@almatar/smart-booking-dashboard 0.0.2-alpha.2 → 0.0.2-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/almatar-aside/aside.component.mjs +6 -7
- package/esm2022/lib/components/hotel-cancel/almatar-hotel-auto-cancellation.component.mjs +2 -2
- package/esm2022/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/components/almatar-hotel-auto-cancellation-non-refundable-room/almatar-hotel-auto-cancellation-non-refundable-room.component.mjs +2 -2
- package/esm2022/lib/components/hotel-cancel/services/almatar-hotel-auto-cancellation-endpoints.service.mjs +13 -4
- package/esm2022/lib/components/reissue-dialog/reissue-dialog.component.mjs +135 -0
- package/esm2022/lib/components/reissue-dialog/reissue-upgrade.store.mjs +305 -0
- package/esm2022/lib/components/reissue-dialog/reissue.store.mjs +349 -0
- package/esm2022/lib/components/reissue-dialog/steps/reissue-date-step/reissue-date-step.component.mjs +45 -0
- package/esm2022/lib/components/reissue-dialog/steps/reissue-legs-step/reissue-legs-step.component.mjs +140 -0
- package/esm2022/lib/components/reissue-dialog/steps/reissue-notice/reissue-notice.component.mjs +16 -0
- package/esm2022/lib/components/reissue-dialog/steps/reissue-route-step/reissue-route-step.component.mjs +104 -0
- package/esm2022/lib/components/reissue-dialog/steps/reissue-service-step/reissue-service-step.component.mjs +44 -0
- package/esm2022/lib/components/reissue-dialog/steps/reissue-upgrade-confirm-step/reissue-upgrade-confirm-step.component.mjs +193 -0
- package/esm2022/lib/components/reissue-dialog/steps/reissue-upgrade-step/reissue-upgrade-step.component.mjs +88 -0
- package/esm2022/lib/components/workflow-actions/workflow-actions.component.mjs +5 -3
- package/esm2022/lib/config/dashboard.config.mjs +3 -1
- package/esm2022/lib/models/reissue.types.mjs +2 -0
- package/esm2022/lib/pages/smart-booking-dashboard/smart-booking-dashboard.component.mjs +9 -3
- package/esm2022/lib/services/reissue.service.mjs +142 -0
- package/esm2022/lib/services/toast.service.mjs +15 -7
- package/esm2022/lib/utils/reissue-format.mjs +64 -0
- package/esm2022/lib/utils/reissue-url.builder.mjs +314 -0
- package/esm2022/public-api.mjs +3 -1
- package/fesm2022/almatar-smart-booking-dashboard.mjs +1919 -25
- package/fesm2022/almatar-smart-booking-dashboard.mjs.map +1 -1
- package/lib/components/action-dialog/action-dialog.component.d.ts +1 -1
- package/lib/components/almatar-aside/aside.component.d.ts +1 -2
- package/lib/components/hotel-cancel/components/hotel-content/hotel-content.component.d.ts +1 -1
- package/lib/components/hotel-cancel/services/almatar-hotel-auto-cancellation-endpoints.service.d.ts +6 -0
- package/lib/components/reissue-dialog/reissue-dialog.component.d.ts +34 -0
- package/lib/components/reissue-dialog/reissue-upgrade.store.d.ts +96 -0
- package/lib/components/reissue-dialog/reissue.store.d.ts +124 -0
- package/lib/components/reissue-dialog/steps/reissue-date-step/reissue-date-step.component.d.ts +11 -0
- package/lib/components/reissue-dialog/steps/reissue-legs-step/reissue-legs-step.component.d.ts +16 -0
- package/lib/components/reissue-dialog/steps/reissue-notice/reissue-notice.component.d.ts +8 -0
- package/lib/components/reissue-dialog/steps/reissue-route-step/reissue-route-step.component.d.ts +21 -0
- package/lib/components/reissue-dialog/steps/reissue-service-step/reissue-service-step.component.d.ts +17 -0
- package/lib/components/reissue-dialog/steps/reissue-upgrade-confirm-step/reissue-upgrade-confirm-step.component.d.ts +28 -0
- package/lib/components/reissue-dialog/steps/reissue-upgrade-step/reissue-upgrade-step.component.d.ts +13 -0
- package/lib/components/result-panel/result-panel.component.d.ts +1 -1
- package/lib/components/workflow-actions/workflow-actions.component.d.ts +3 -1
- package/lib/config/dashboard.config.d.ts +29 -0
- package/lib/models/reissue.types.d.ts +147 -0
- package/lib/pages/smart-booking-dashboard/smart-booking-dashboard.component.d.ts +4 -1
- package/lib/services/reissue.service.d.ts +45 -0
- package/lib/services/toast.service.d.ts +14 -1
- package/lib/utils/reissue-format.d.ts +28 -0
- package/lib/utils/reissue-url.builder.d.ts +24 -0
- package/package.json +9 -7
- package/public-api.d.ts +5 -1
|
@@ -78,7 +78,7 @@ export class AlmatarHotelAutoCancellationNonRefundableRoomComponent {
|
|
|
78
78
|
this.uploadedFileUrl.set(null);
|
|
79
79
|
const formData = new FormData();
|
|
80
80
|
formData.append('file', file);
|
|
81
|
-
const req = new HttpRequest('POST', AlmatarHotelAutoCancellationEndpointsEnum.uploadAttachment, formData, {
|
|
81
|
+
const req = new HttpRequest('POST', this.endpointsService.resolveEndpoint(AlmatarHotelAutoCancellationEndpointsEnum.uploadAttachment), formData, {
|
|
82
82
|
reportProgress: true,
|
|
83
83
|
responseType: 'json',
|
|
84
84
|
});
|
|
@@ -239,4 +239,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
239
239
|
type: Component,
|
|
240
240
|
args: [{ selector: 'almatar-hotel-auto-cancellation-non-refundable-room', standalone: true, imports: [CommonModule, AlmatarIconModule], providers: [DialogService], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (!package().isCancelled) {\n <div class=\"package-item package-item--non-refundable\">\n <div class=\"package-item__header\">\n <div class=\"package-item__content\">\n <div class=\"package-item__info\">\n <h4 class=\"package-item__name\">{{ package().packageName }}</h4>\n @if (package().boardBasis) {\n <span class=\"package-item__board-basis\">{{\n package().boardBasis\n }}</span>\n }\n </div>\n\n <span\n class=\"package-item__refund-badge package-item__refund-badge--non-refundable\"\n >\n @if (\n allPackagesNonRefundable() ||\n (!package()?.isRefundable && !package()?.isCancelled)\n ) {\n NON-REFUNDABLE\n }\n @if (package()?.isCancelled) {\n PREVIOUS CANCELLATION\n }\n </span>\n </div>\n </div>\n\n @if (groupedRooms().length) {\n <div class=\"package-item__rooms\">\n @for (group of groupedRooms(); track i; let i = $index) {\n <div class=\"package-item__room\">\n <h5 class=\"package-item__room-name\">\n @if (group.count > 1) {\n {{ group.count }}x\n @if (group.bedTypeOrRoomType) {\n {{ group.bedTypeOrRoomType }}\n }\n } @else {\n Room\n {{ i + 1 }}\n @if (group.bedTypeOrRoomType) {\n <span class=\"package-item__separator\">\u2022</span>\n {{ group.bedTypeOrRoomType }}\n }\n }\n </h5>\n @if (group.roomBasis) {\n <span class=\"package-item__room-basis\">{{\n group.roomBasis\n }}</span>\n }\n </div>\n }\n </div>\n }\n\n @if (!package()?.isCancelled && !allPackagesNonRefundable()) {\n <div class=\"package-item__non-refundable-content\">\n <div class=\"info-message\">\n <almatar-icon [name]=\"'exclamation-circle'\"> </almatar-icon>\n <p\n class=\"info-message__text\"\n (click)=\"$event.preventDefault(); onOpenCancellationPolicy()\"\n [innerHTML]=\"\n 'We can\\'t process automatic cancellation with this room. Check the <a class="info-message__link">cancellation policy</a> for details'\n \"\n ></p>\n </div>\n\n @if (uploadSuccess()) {\n <div class=\"upload-success\">\n <span class=\"upload-success__icon\">\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M13.4697 8.20112C13.7626 7.90822 14.2373 7.90822 14.5302 8.20112C14.8231 8.49401 14.8231 8.96877 14.5302 9.26166L7.53022 16.2617C7.23732 16.5546 6.76256 16.5546 6.46967 16.2617L3.46967 13.2617C3.17678 12.9688 3.17678 12.494 3.46967 12.2011C3.74427 11.9265 4.17899 11.909 4.47358 12.1494L4.53022 12.2011L6.99994 14.6708L13.4697 8.20112Z\"\n fill=\"#1B1A1F\"\n />\n <path\n d=\"M19.4697 8.20112C19.7626 7.90822 20.2373 7.90822 20.5302 8.20112C20.8231 8.49401 20.8231 8.96877 20.5302 9.26166L13.5302 16.2617C13.2639 16.5279 12.8415 16.5556 12.5429 16.3261L11.5429 15.5576L11.4843 15.5078C11.2079 15.2468 11.1686 14.8137 11.4052 14.5058C11.6418 14.198 12.0703 14.1245 12.3935 14.3242L12.457 14.3681L12.9345 14.7353L19.4697 8.20112Z\"\n fill=\"#1B1A1F\"\n />\n </svg>\n </span>\n <div class=\"upload-success__info\">\n <p class=\"upload-success__filename\">{{ filePicked()?.name }}</p>\n <p class=\"upload-success__meta\">\n {{ formatFileSize(filePicked()?.size) }} \u2022\n Uploaded\n </p>\n </div>\n <input\n type=\"file\"\n #fileInput\n (change)=\"onFileSelected($event)\"\n style=\"display: none\"\n accept=\".pdf,.jpg,.jpeg,.png,.doc,.docx\"\n />\n <button\n type=\"button\"\n class=\"upload-success__change-btn\"\n (click)=\"fileInput.click()\"\n >\n Change\n </button>\n </div>\n } @else {\n <div class=\"upload-section\">\n <almatar-icon [name]=\"'arrow-up-on-square'\"></almatar-icon>\n <div style=\"flex: 1\">\n <h5 class=\"upload-section__title\">\n Upload a document to support your request\n </h5>\n <p class=\"upload-section__subtitle\">\n Required to submit and track your request\n </p>\n @if (filePicked() && !uploadSuccess()) {\n <p class=\"upload-section__filename\">\n {{ filePicked()?.name }}\n </p>\n }\n @if (isUploading()) {\n <div class=\"upload-progress\">\n <div class=\"upload-progress__bar\">\n <div\n class=\"upload-progress__fill\"\n [style.width.%]=\"uploadProgress()\"\n ></div>\n </div>\n <span class=\"upload-progress__text\"\n >{{ uploadProgress() }}%</span\n >\n </div>\n }\n </div>\n <input\n type=\"file\"\n #fileInput\n (change)=\"onFileSelected($event)\"\n style=\"display: none\"\n accept=\".pdf,.jpg,.jpeg,.png,.doc,.docx\"\n />\n <button\n type=\"button\"\n class=\"upload-section__button\"\n [disabled]=\"isUploading()\"\n (click)=\"fileInput.click()\"\n >\n Upload file\n </button>\n </div>\n }\n\n @if (submitError()) {\n <div class=\"submit-result submit-result--error\">\n <almatar-icon [name]=\"'exclamation-circle'\"></almatar-icon>\n <p class=\"submit-result__text\">{{ submitError() }}</p>\n <button\n type=\"button\"\n class=\"submit-result__retry-btn\"\n (click)=\"onRetry()\"\n >\n Try Again\n </button>\n </div>\n } @else if (!submitSuccess()) {\n <button\n type=\"button\"\n class=\"submit-request-btn\"\n [disabled]=\"!uploadSuccess() || isSubmitting()\"\n (click)=\"onSubmitRequest()\"\n >\n @if (isSubmitting()) {\n Submitting...\n } @else {\n Submit my request\n }\n </button>\n }\n </div>\n }\n </div>\n}\n", styles: [".package-item{display:flex;flex-direction:column;gap:12px;padding:12px;background:#fff;border:1px solid rgb(217,217,222);border-radius:16px;transition:border-color .2s ease,background-color .2s ease}.package-item--non-refundable{cursor:default}.package-item__header{display:flex;align-items:flex-start;gap:8px;width:100%}.package-item__content{flex:1;display:flex;justify-content:space-between;align-items:flex-start;gap:12px}.package-item__info{display:flex;flex-direction:column;gap:4px}.package-item__name{font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-medium);color:#1b1a1f;margin:0}.package-item__board-basis{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#747583}.package-item__refund-badge{font-size:calc(10 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-medium);text-transform:uppercase;padding:6px 8px;flex-shrink:0;border-radius:999px}.package-item__refund-badge--refundable{color:#15803c;background:#f0fdf5}.package-item__refund-badge--non-refundable{color:#6b7280;background:#f3f4f6}.package-item__rooms{display:flex;flex-direction:column;gap:8px}.package-item__room{display:flex;flex-direction:column;gap:4px;padding:12px;border-radius:16px;border:1px solid rgb(217,217,222)}.package-item__room-name{font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-medium);color:#1b1a1f;display:flex;align-items:center;gap:0;margin:0}.package-item__separator{margin:0 4px;color:#1f2937;font-weight:var(--almatar-font-weight-regular)}.package-item__room-basis{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#747583}.package-item__non-refundable-content{display:flex;flex-direction:column;gap:8px;width:100%}.info-message{display:flex;gap:8px;padding:12px;background:#f7f7f8;border:1px solid rgb(217,217,222);border-radius:12px;align-items:center}.info-message__icon{flex-shrink:0;width:24px;height:24px;color:#1b1a1f}.info-message__text{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#1b1a1f;line-height:15.6px;margin:0;cursor:pointer}.info-message__text ::ng-deep a{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#1b1a1f;text-decoration:underline;cursor:pointer}.info-message__text ::ng-deep a:focus,.info-message__text ::ng-deep a:hover{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#1b1a1f;text-decoration:underline!important;cursor:pointer}.info-message__link{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#1b1a1f;text-decoration:underline;cursor:pointer}.info-message__link:focus,.info-message__link:hover{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#1b1a1f;text-decoration:underline;cursor:pointer}.upload-success{display:flex;align-items:center;gap:12px;padding:12px;border:1px dashed rgb(217,217,222);border-radius:12px;background:#fff}.upload-success__icon{flex-shrink:0;display:flex;align-items:center;justify-content:center}.upload-success__info{flex:1;min-width:0}.upload-success__filename{font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-regular);color:#1b1a1f;margin:0 0 2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.upload-success__meta{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#747583;margin:0}.upload-success__change-btn{flex-shrink:0;padding:8px 14px;background:#fff;border:1.5px solid rgb(217,217,222);border-radius:8px;color:#7c3aed;font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-medium);cursor:pointer;transition:all .2s ease;white-space:nowrap}.upload-success__change-btn:hover:not(:disabled){background:#7c3aed;color:#fff}.upload-success__change-btn:disabled{opacity:.5;cursor:not-allowed}.upload-section{display:flex;align-items:center;gap:12px;padding:12px;border:1px dashed rgb(217,217,222);border-radius:12px;background:#fff}.upload-section__icon{flex-shrink:0;width:24px;height:24px;color:#1b1a1f}.upload-section__title{font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-regular);color:#1b1a1f;margin:0 0 2px}.upload-section__subtitle{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#747583;margin:0;line-height:1.4}.upload-section__button{flex-shrink:0;padding:8px 14px;background:#fff;border:1.5px solid rgb(217,217,222);border-radius:8px;color:#7c3aed;font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-medium);cursor:pointer;transition:all .2s ease;white-space:nowrap}.upload-section__button:hover:not(:disabled){background:#7c3aed;color:#fff}.upload-section__button:disabled{opacity:.5;cursor:not-allowed}.upload-section__filename{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#747583;margin:8px 0 0;font-weight:var(--almatar-font-weight-medium)}.upload-progress{display:flex;align-items:center;gap:8px;margin-top:8px}.upload-progress__bar{flex:1;height:6px;background:#e5e7eb;border-radius:3px;overflow:hidden}.upload-progress__fill{height:100%;background:#7c3aed;border-radius:3px;transition:width .2s ease}.upload-progress__text{font-size:calc(11 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-medium);color:#7c3aed;min-width:36px;text-align:right}.submit-request-btn{width:100%;padding:8px 0;background:#f7f7f8;border:none;border-radius:12px;color:#7c3aed;cursor:pointer;font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-semibold);transition:all .2s ease;letter-spacing:.2px}.submit-request-btn:disabled{background:#f7f7f8;color:#b8b9c1;cursor:not-allowed}.submit-request-btn:disabled:hover{background:#f7f7f8;color:#b8b9c1}.submit-request-btn:hover{background:#f7f7f8;color:#7c3aed}.submit-result{display:flex;align-items:center;gap:8px;padding:12px;border-radius:12px}.submit-result--error{background:#fef2f2;border:1px solid rgba(220,38,38,.2);flex-wrap:wrap}.submit-result--error almatar-icon{color:#dc2626}.submit-result__text{flex:1;font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);margin:0;line-height:1.4;color:#dc2626}.submit-result__retry-btn{width:100%;margin-top:8px;padding:8px 16px;background:#dc2626;border:none;border-radius:8px;color:#fff;font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-medium);cursor:pointer;transition:all .2s ease}.submit-result__retry-btn:hover{background:#b91c1c}\n"] }]
|
|
241
241
|
}] });
|
|
242
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1ub24tcmVmdW5kYWJsZS1yb29tLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LWJvb2tpbmctZGFzaGJvYXJkL3NyYy9saWIvY29tcG9uZW50cy9ob3RlbC1jYW5jZWwvY29tcG9uZW50cy9hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLXNlbGVjdC1yb29tcy9jb21wb25lbnRzL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tbm9uLXJlZnVuZGFibGUtcm9vbS9hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLW5vbi1yZWZ1bmRhYmxlLXJvb20uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtYm9va2luZy1kYXNoYm9hcmQvc3JjL2xpYi9jb21wb25lbnRzL2hvdGVsLWNhbmNlbC9jb21wb25lbnRzL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tc2VsZWN0LXJvb21zL2NvbXBvbmVudHMvYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1ub24tcmVmdW5kYWJsZS1yb29tL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tbm9uLXJlZnVuZGFibGUtcm9vbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULHVCQUF1QixFQUN2QixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixNQUFNLEVBQ04sVUFBVSxFQUVWLFFBQVEsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdURBQXVELENB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QUM7WUFDWCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFDRCxJQUFJLEtBQUssR0FBRyxJQUFJLEVBQUUsQ0FBQztZQUNqQixPQUFPLEdBQUcsS0FBSyxJQUFJLENBQUM7UUFDdEIsQ0FBQztRQUNELElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxJQUFJLEVBQUUsQ0FBQztZQUN4QixPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUMxQyxDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDcEQsQ0FBQzsrR0F6UVUsc0RBQXNEO21HQUF0RCxzREFBc0Qsc2hDQVJ0RCxDQUFDLGFBQWEsQ0FBQywwQkNyQzVCLHUvTkE4TEEsMDhNRDFKWSxZQUFZLDhCQUFFLGlCQUFpQjs7NEZBUzlCLHNEQUFzRDtrQkFabEUsU0FBUzsrQkFDRSxxREFBcUQsY0FDbkQsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGlCQUFpQixDQUFDLGFBQy9CLENBQUMsYUFBYSxDQUFDLG1CQU1ULHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG4gIGluamVjdCxcbiAgRGVzdHJveVJlZixcbiAgZWZmZWN0LFxuICBjb21wdXRlZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vc2hhcmVkL3NlcnZpY2VzL3RyYW5zbGF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEV2ZW50VHlwZSwgSHR0cFJlcXVlc3QgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQge1xuICBJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblBhY2thZ2UsXG4gIElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uSG90ZWxJbmZvLFxuICBJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblBhY2thZ2VSb29tLFxufSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcmZhY2VzL2ktYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQWxtYXRhckljb25Nb2R1bGUgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9zaGFyZWQvbW9kdWxlcy9hbG1hdGFyLWljb24vYWxtYXRhci1pY29uLm1vZHVsZSc7XG5pbXBvcnQgeyBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uRW5kcG9pbnRzRW51bSB9IGZyb20gJy4uLy4uLy4uLy4uL2VudW1zL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tZW5kcG9pbnRzLmVudW0nO1xuaW1wb3J0IHsgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbkVuZHBvaW50c1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLWVuZHBvaW50cy5zZXJ2aWNlJztcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xuXG5pbnRlcmZhY2UgSUdyb3VwZWRQYWNrYWdlUm9vbSB7XG4gIGtleTogc3RyaW5nO1xuICBiZWRUeXBlT3JSb29tVHlwZTogc3RyaW5nO1xuICByb29tQmFzaXM6IHN0cmluZztcbiAgY291bnQ6IG51bWJlcjtcbiAgcm9vbXM6IElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUGFja2FnZVJvb21bXTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1ub24tcmVmdW5kYWJsZS1yb29tJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgQWxtYXRhckljb25Nb2R1bGVdLFxuICBwcm92aWRlcnM6IFtEaWFsb2dTZXJ2aWNlXSxcbiAgdGVtcGxhdGVVcmw6XG4gICAgJy4vYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1ub24tcmVmdW5kYWJsZS1yb29tLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbXG4gICAgJy4vYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1ub24tcmVmdW5kYWJsZS1yb29tLmNvbXBvbmVudC5zY3NzJyxcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25Ob25SZWZ1bmRhYmxlUm9vbUNvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaHR0cCA9IGluamVjdChIdHRwQ2xpZW50KTtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IGVuZHBvaW50c1NlcnZpY2UgPSBpbmplY3QoXG4gICAgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbkVuZHBvaW50c1NlcnZpY2UsXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlID0gaW5qZWN0KFRyYW5zbGF0aW9uU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nU2VydmljZSA9IGluamVjdChEaWFsb2dTZXJ2aWNlKTtcblxuICByZWFkb25seSBwYWNrYWdlID0gaW5wdXQucmVxdWlyZWQ8SUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25QYWNrYWdlPigpO1xuICByZWFkb25seSBhbGxQYWNrYWdlcyA9IGlucHV0PElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUGFja2FnZVtdPihbXSk7XG4gIHJlYWRvbmx5IGhvdGVsSW5mbyA9IGlucHV0PElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uSG90ZWxJbmZvIHwgbnVsbD4oXG4gICAgbnVsbCxcbiAgKTtcblxuICAvLyBjb25zdHJ1Y3Rvcigpe2VmZmVjdCgoKSA9PiB7XG4gIC8vICAgY29uc29sZS5sb2codGhpcy5wYWNrYWdlKCkpXG4gIC8vIH0pfVxuXG4gIHJlYWRvbmx5IGhvdGVsSWQgPSBpbnB1dDxzdHJpbmcgfCBudW1iZXI+KCcnKTtcbiAgcmVhZG9ubHkgY3VycmVuY3lDb2RlID0gaW5wdXQ8c3RyaW5nPignU0FSJyk7XG4gIHJlYWRvbmx5IGFsbFBhY2thZ2VzTm9uUmVmdW5kYWJsZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHVzZUxvY2FsQ2FuY2VsbGF0aW9uUG9saWNpZXMgPSB0cnVlO1xuXG4gIHJlYWRvbmx5IGNsb3NlTW9kYWwgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgcmVhZG9ubHkgbm9uUmVmdW5kYWJsZVN1Ym1pdFN1Y2Nlc3MgPSBvdXRwdXQ8c3RyaW5nPigpO1xuXG4gIHJlYWRvbmx5IHVwbG9hZGVkRmlsZSA9IHNpZ25hbDxGaWxlIHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IHVwbG9hZGVkRmlsZVVybCA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgcmVhZG9ubHkgZmlsZVBpY2tlZCA9IHNpZ25hbDxGaWxlIHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IHVwbG9hZFN1Y2Nlc3MgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSB1cGxvYWRQcm9ncmVzcyA9IHNpZ25hbDxudW1iZXI+KDApO1xuICByZWFkb25seSBpc1VwbG9hZGluZyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGlzU3VibWl0dGluZyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IHN1Ym1pdFN1Y2Nlc3MgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBzdWJtaXRFcnJvciA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICByZWFkb25seSBncm91cGVkUm9vbXMgPSBjb21wdXRlZDxJR3JvdXBlZFBhY2thZ2VSb29tW10+KCgpID0+IHtcbiAgICBjb25zdCByb29tcyA9IHRoaXMucGFja2FnZSgpPy5yb29tcyB8fCBbXTtcbiAgICBjb25zdCBncm91cE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBJR3JvdXBlZFBhY2thZ2VSb29tPigpO1xuXG4gICAgZm9yIChjb25zdCByb29tIG9mIHJvb21zKSB7XG4gICAgICAvLyBjb25zdCBiZWRUeXBlT3JSb29tVHlwZSA9IHJvb20uYmVkVHlwZSB8fCByb29tLnJvb21UeXBlIHx8ICcnO1xuICAgICAgY29uc3QgYmVkVHlwZU9yUm9vbVR5cGUgPSByb29tPy5yb29tTmFtZTtcbiAgICAgIGNvbnN0IHJvb21CYXNpcyA9IHJvb20ucm9vbUJhc2lzIHx8ICcnO1xuICAgICAgY29uc3Qga2V5ID0gYCR7YmVkVHlwZU9yUm9vbVR5cGV9fHx8JHtyb29tQmFzaXN9YDtcblxuICAgICAgaWYgKGdyb3VwTWFwLmhhcyhrZXkpKSB7XG4gICAgICAgIGNvbnN0IGdyb3VwID0gZ3JvdXBNYXAuZ2V0KGtleSkhO1xuICAgICAgICBncm91cC5jb3VudCsrO1xuICAgICAgICBncm91cC5yb29tcy5wdXNoKHJvb20pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ3JvdXBNYXAuc2V0KGtleSwge1xuICAgICAgICAgIGtleSxcbiAgICAgICAgICBiZWRUeXBlT3JSb29tVHlwZSxcbiAgICAgICAgICByb29tQmFzaXMsXG4gICAgICAgICAgY291bnQ6IDEsXG4gICAgICAgICAgcm9vbXM6IFtyb29tXSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIEFycmF5LmZyb20oZ3JvdXBNYXAudmFsdWVzKCkpO1xuICB9KTtcblxuICBvbkZpbGVTZWxlY3RlZChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGlmIChpbnB1dC5maWxlcyAmJiBpbnB1dC5maWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBmaWxlID0gaW5wdXQuZmlsZXNbMF07XG4gICAgICB0aGlzLmZpbGVQaWNrZWQuc2V0KGZpbGUpO1xuICAgICAgdGhpcy51cGxvYWRGaWxlKGZpbGUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBsb2FkRmlsZShmaWxlOiBGaWxlKTogdm9pZCB7XG4gICAgdGhpcy5pc1VwbG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgdGhpcy51cGxvYWRQcm9ncmVzcy5zZXQoMCk7XG4gICAgdGhpcy51cGxvYWRTdWNjZXNzLnNldChmYWxzZSk7XG4gICAgdGhpcy51cGxvYWRlZEZpbGVVcmwuc2V0KG51bGwpO1xuXG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlKTtcblxuICAgIGNvbnN0IHJlcSA9IG5ldyBIdHRwUmVxdWVzdChcbiAgICAgICdQT1NUJyxcbiAgICAgIEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25FbmRwb2ludHNFbnVtLnVwbG9hZEF0dGFjaG1lbnQsXG4gICAgICBmb3JtRGF0YSxcbiAgICAgIHtcbiAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHRydWUsXG4gICAgICAgIHJlc3BvbnNlVHlwZTogJ2pzb24nLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgdGhpcy5odHRwXG4gICAgICAucmVxdWVzdDx7IGRhdGE6IHsgdXJsOiBzdHJpbmcgfSB9PihyZXEpXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoZXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gSHR0cEV2ZW50VHlwZS5VcGxvYWRQcm9ncmVzcyAmJiBldmVudC50b3RhbCkge1xuICAgICAgICAgICAgY29uc3QgcHJvZ3Jlc3MgPSBNYXRoLnJvdW5kKCgxMDAgKiBldmVudC5sb2FkZWQpIC8gZXZlbnQudG90YWwpO1xuICAgICAgICAgICAgdGhpcy51cGxvYWRQcm9ncmVzcy5zZXQocHJvZ3Jlc3MpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQudHlwZSA9PT0gSHR0cEV2ZW50VHlwZS5SZXNwb25zZSkge1xuICAgICAgICAgICAgdGhpcy51cGxvYWRQcm9ncmVzcy5zZXQoMTAwKTtcbiAgICAgICAgICAgIHRoaXMuaXNVcGxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMudXBsb2FkU3VjY2Vzcy5zZXQodHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZS5zZXQoZmlsZSk7XG4gICAgICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZVVybC5zZXQoZXZlbnQuYm9keT8uZGF0YT8udXJsID8/IG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmlzVXBsb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgdGhpcy51cGxvYWRQcm9ncmVzcy5zZXQoMCk7XG4gICAgICAgICAgdGhpcy51cGxvYWRTdWNjZXNzLnNldChmYWxzZSk7XG4gICAgICAgICAgdGhpcy5maWxlUGlja2VkLnNldChudWxsKTtcbiAgICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZVVybC5zZXQobnVsbCk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIG9uU3VibWl0UmVxdWVzdCgpOiB2b2lkIHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLnVwbG9hZGVkRmlsZVVybCgpO1xuICAgIGlmICghdXJsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5pc1N1Ym1pdHRpbmcuc2V0KHRydWUpO1xuICAgIHRoaXMuc3VibWl0RXJyb3Iuc2V0KG51bGwpO1xuICAgIHRoaXMuc3VibWl0U3VjY2Vzcy5zZXQoZmFsc2UpO1xuXG4gICAgY29uc3QgbGFuZ3VhZ2UgPSAnZW4nO1xuXG4gICAgdGhpcy5lbmRwb2ludHNTZXJ2aWNlXG4gICAgICAucHJvY2Vzc05vblJlZnVuZGFibGVDYW5jZWxsYXRpb24odGhpcy5wYWNrYWdlKCkucGFja2FnZUlkLCB1cmwsIGxhbmd1YWdlKVxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgdGhpcy5zdWJtaXRTdWNjZXNzLnNldCh0cnVlKTtcbiAgICAgICAgICB0aGlzLm5vblJlZnVuZGFibGVTdWJtaXRTdWNjZXNzLmVtaXQodGhpcy5wYWNrYWdlKCkucGFja2FnZU5hbWUpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICB0aGlzLnN1Ym1pdEVycm9yLnNldChlcnJvcj8ubWVzc2FnZSB8fCAnRmFpbGVkIHRvIHN1Ym1pdCByZXF1ZXN0Jyk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIG9uUmV0cnkoKTogdm9pZCB7XG4gICAgdGhpcy5zdWJtaXRFcnJvci5zZXQobnVsbCk7XG4gICAgdGhpcy5vblN1Ym1pdFJlcXVlc3QoKTtcbiAgfVxuXG4gIG9uT3BlbkNhbmNlbGxhdGlvblBvbGljeSgpOiB2b2lkIHtcbiAgICBjb25zdCBob3RlbEluZm9EYXRhID0gdGhpcy5ob3RlbEluZm8oKTtcbiAgICBjb25zdCBjdXJyZW5jeUNvZGUgPSB0aGlzLmN1cnJlbmN5Q29kZSgpO1xuXG4gICAgLy8gVXNlIGFsbCBwYWNrYWdlcyBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8gY3VycmVudCBwYWNrYWdlXG4gICAgY29uc3QgcGFja2FnZXNUb1Nob3cgPVxuICAgICAgdGhpcy5hbGxQYWNrYWdlcygpLmxlbmd0aCA+IDAgPyB0aGlzLmFsbFBhY2thZ2VzKCkgOiBbdGhpcy5wYWNrYWdlKCldO1xuXG4gICAgLy8gVHJhbnNmb3JtIGFsbCBwYWNrYWdlcyB3aXRoIHRoZWlyIGNhbmNlbGxhdGlvbiBwb2xpY2llc1xuICAgIGNvbnN0IHBhY2thZ2VzRm9yUG9wdXAgPSBwYWNrYWdlc1RvU2hvdy5tYXAoKHBrZykgPT4ge1xuICAgICAgLy8gVHJhbnNmb3JtIGNhbmNlbGxhdGlvbiBwb2xpY2llcyB0byB0aGUgZm9ybWF0IGV4cGVjdGVkIGJ5IG1hcENhbmNlbGxhdGlvblBvbGljaWVzXG4gICAgICBjb25zdCByYXdDYW5jZWxsYXRpb25Qb2xpY2llcyA9IChwa2cuY2FuY2VsbGF0aW9uUG9saWNpZXMgfHwgW10pLm1hcChcbiAgICAgICAgKHBvbGljeSkgPT4gKHtcbiAgICAgICAgICBkYXRlRnJvbTogcG9saWN5LmZyb21EYXRlLFxuICAgICAgICAgIGRhdGVUbzogcG9saWN5LnRvRGF0ZSxcbiAgICAgICAgICBjdXJyZW5jeUlzb0NvZGU6IGN1cnJlbmN5Q29kZSxcbiAgICAgICAgICBmaW5hbFByaWNlOiBwb2xpY3kucGVuYWx0eVZhbHVlLFxuICAgICAgICAgIHJlZnVuZGFiaWxpdHlUeXBlOlxuICAgICAgICAgICAgcG9saWN5LnBlbmFsdHlUeXBlID09PSAnRnVsbFJlZnVuZGVkJ1xuICAgICAgICAgICAgICA/ICdGdWxsUmVmdW5kZWQnXG4gICAgICAgICAgICAgIDogcG9saWN5LnBlbmFsdHlUeXBlID09PSAnUGVyY2VudGFnZScgfHxcbiAgICAgICAgICAgICAgICAgIHBvbGljeS5wZW5hbHR5VHlwZSA9PT0gJ0Ftb3VudCdcbiAgICAgICAgICAgICAgICA/ICdQYXJ0aWFsUmVmdW5kZWQnXG4gICAgICAgICAgICAgICAgOiAnTm9uUmVmdW5kZWQnLFxuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICAgIC8vIEVuc3VyZSBhdCBsZWFzdCBvbmUgcG9saWN5IGV4aXN0c1xuICAgICAgaWYgKHJhd0NhbmNlbGxhdGlvblBvbGljaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByYXdDYW5jZWxsYXRpb25Qb2xpY2llcy5wdXNoKHtcbiAgICAgICAgICBkYXRlRnJvbTogaG90ZWxJbmZvRGF0YT8uY2hlY2tJbixcbiAgICAgICAgICBkYXRlVG86IGhvdGVsSW5mb0RhdGE/LmNoZWNrT3V0LFxuICAgICAgICAgIGN1cnJlbmN5SXNvQ29kZTogY3VycmVuY3lDb2RlLFxuICAgICAgICAgIGZpbmFsUHJpY2U6IHBrZy5jYW5jZWxsYXRpb25GZWUgfHwgMCxcbiAgICAgICAgICByZWZ1bmRhYmlsaXR5VHlwZTogcGtnLmlzUmVmdW5kYWJsZSA/ICdSZWZ1bmRhYmxlJyA6ICdOb25SZWZ1bmRlZCcsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBCdWlsZCBwYWNrYWdlIGRhdGEgd2l0aCBhbGwgcmVxdWlyZWQgZmllbGRzXG4gICAgICBjb25zdCByZW1hcmtzID1cbiAgICAgICAgKHBrZyBhcyBhbnkpPy5jYW5jZWxsYXRpb25Qb2xpY2llc1JlbWFya3MgPz9cbiAgICAgICAgKHBrZyBhcyBhbnkpPy5DYW5jZWxsYXRpb25Qb2xpY2llc1JlbWFya3M7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5wa2csXG4gICAgICAgIGNhbmNlbGxhdGlvblBvbGljaWVzOiByYXdDYW5jZWxsYXRpb25Qb2xpY2llcyxcbiAgICAgICAgaXNSZWZ1bmRhYmxlOiBwa2cuaXNSZWZ1bmRhYmxlID8/IHBrZy5yZWZ1bmRhYmlsaXR5ID8/IGZhbHNlLFxuICAgICAgICByZWZ1bmRhYmxlVW50aWw6IHBrZy5yZWZ1bmRhYmxlVW50aWwsXG4gICAgICAgIGN1cnJlbmN5OiBjdXJyZW5jeUNvZGUsXG4gICAgICAgIGZpbmFsUHJpY2U6IHBrZy5yb29tQW1vdW50LFxuICAgICAgICBib29raW5nUmVtYXJrczogcmVtYXJrcyxcbiAgICAgICAgY2FuY2VsbGF0aW9uUG9saWNpZXNSZW1hcmtzOiByZW1hcmtzLFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGNhcnRJbmZvID0ge1xuICAgICAgcGFja2FnZXM6IHBhY2thZ2VzRm9yUG9wdXAsXG4gICAgICBmcm9tRGF0ZTogaG90ZWxJbmZvRGF0YT8uY2hlY2tJbixcbiAgICAgIGRhdGVfZnJvbTogaG90ZWxJbmZvRGF0YT8uY2hlY2tJbixcbiAgICAgIHRvRGF0ZTogaG90ZWxJbmZvRGF0YT8uY2hlY2tPdXQsXG4gICAgICBkYXRlX3RvOiBob3RlbEluZm9EYXRhPy5jaGVja091dCxcbiAgICAgIGFsbXRhYXJIb3RlbElkOiB0aGlzLmhvdGVsSWQoKSxcbiAgICB9O1xuXG4gICAgY29uc3QgbGFuZyA9ICdlbic7XG4gICAgY29uc3QgZm9ybWF0RGF0ZSA9XG4gICAgICBsYW5nID09PSAnZW4nXG4gICAgICAgID8gJ2RkZGQgRG8gb2YgTU1NTSBZWVlZIC0gaGg6bW0gQSBbR01UXSdcbiAgICAgICAgOiAnZGRkZCAsIEREIE1NTU0gWVlZWSAtIGhoOm1tIEEgW0dNVF0nO1xuXG4gICAgLy8gVE9ETzogRml4IGltcG9ydCBwYXRoIGZvciBDYW5jZWxsYXRpb25Qb2xpY3lQb3B1cENvbXBvbmVudFxuICAgIC8vIGltcG9ydCgnbGlicy9mZWF0dXJlcy9zcmMvbGliL2ZlYXR1cmVzL2hvdGVscy9zaGFyZWQvbW9kdWxlcy9ob3RlbC1ib29raW5nLWluZm9ybWF0aW9uL2NvbXBvbmVudHMvYm9va2luZy1zdW1tYXJ5L2NvbXBvbmVudHMvY2FuY2VsbGF0aW9uLXBvbGljeS1wb3B1cC9jYW5jZWxsYXRpb24tcG9saWN5LnBvcHVwLmNvbXBvbmVudCcpLnRoZW4oXG4gICAgLy8gICAoeyBDYW5jZWxsYXRpb25Qb2xpY3lQb3B1cENvbXBvbmVudCB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGhlYWRlciA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICAgICdIT1RFTC5jYW5jZWxsYXRpb24tcG9saWN5JyxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc29sZS53YXJuKCdDYW5jZWxsYXRpb25Qb2xpY3lQb3B1cENvbXBvbmVudCBub3QgYXZhaWxhYmxlIC0gaW1wb3J0IHBhdGggbmVlZHMgdG8gYmUgZml4ZWQnKTtcbiAgICAgICAgLy8gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oQ2FuY2VsbGF0aW9uUG9saWN5UG9wdXBDb21wb25lbnQsIHtcbiAgICAgICAgLy8gICBoZWFkZXIsXG4gICAgICAgIC8vICAgZGF0YToge1xuICAgICAgICAvLyAgICAgY2FydEluZm8sXG4gICAgICAgIC8vICAgICBjdXJyZW50Q3VycmVuY3lPYmo6IHtcbiAgICAgICAgLy8gICAgICAgY29kZTogY3VycmVuY3lDb2RlLFxuICAgICAgICAvLyAgICAgICBjdXJyZW5jeTogY3VycmVuY3lDb2RlLFxuICAgICAgICAvLyAgICAgfSxcbiAgICAgICAgLy8gICAgIGZvcm1hdERhdGUsXG4gICAgICAgIC8vICAgICBob3RlbERldGFpbHM6IHtcbiAgICAgICAgLy8gICAgICAgaG90ZWxOYW1lOiBob3RlbEluZm9EYXRhPy5ob3RlbE5hbWUsXG4gICAgICAgIC8vICAgICAgIHBheW1lbnRPcHRpb246IG51bGwsXG4gICAgICAgIC8vICAgICB9LFxuICAgICAgICAvLyAgIH0sXG4gICAgICAgIC8vICAgc3R5bGVDbGFzczogJ2NhbmNlbGxhdGlvbi1wb2xpY3ktZGlhbG9nJyxcbiAgICAgICAgLy8gICBjb250ZW50U3R5bGU6IHsgb3ZlcmZsb3c6ICdhdXRvJyB9LFxuICAgICAgICAvLyAgIGJhc2VaSW5kZXg6IDEwMDAwLFxuICAgICAgICAvLyAgIG1heGltaXphYmxlOiBmYWxzZSxcbiAgICAgICAgLy8gICBzdHlsZTogeyB3aWR0aDogJzYwMHB4JywgbWF4V2lkdGg6ICc5MCUnIH0sXG4gICAgICAgIC8vIH0pO1xuICAgICAgLy99LFxuICAgIC8vKTtcbiAgfVxuXG4gIGZvcm1hdEZpbGVTaXplKGJ5dGVzOiBudW1iZXIgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICAgIGlmICghYnl0ZXMpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgaWYgKGJ5dGVzIDwgMTAyNCkge1xuICAgICAgcmV0dXJuIGAke2J5dGVzfSBCYDtcbiAgICB9XG4gICAgaWYgKGJ5dGVzIDwgMTAyNCAqIDEwMjQpIHtcbiAgICAgIHJldHVybiBgJHtNYXRoLnJvdW5kKGJ5dGVzIC8gMTAyNCl9IEtCYDtcbiAgICB9XG4gICAgcmV0dXJuIGAkeyhieXRlcyAvICgxMDI0ICogMTAyNCkpLnRvRml4ZWQoMSl9IE1CYDtcbiAgfVxufVxuIiwiQGlmICghcGFja2FnZSgpLmlzQ2FuY2VsbGVkKSB7XG4gIDxkaXYgY2xhc3M9XCJwYWNrYWdlLWl0ZW0gcGFja2FnZS1pdGVtLS1ub24tcmVmdW5kYWJsZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJwYWNrYWdlLWl0ZW1fX2hlYWRlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cInBhY2thZ2UtaXRlbV9fY29udGVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicGFja2FnZS1pdGVtX19pbmZvXCI+XG4gICAgICAgICAgPGg0IGNsYXNzPVwicGFja2FnZS1pdGVtX19uYW1lXCI+e3sgcGFja2FnZSgpLnBhY2thZ2VOYW1lIH19PC9oND5cbiAgICAgICAgICBAaWYgKHBhY2thZ2UoKS5ib2FyZEJhc2lzKSB7XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhY2thZ2UtaXRlbV9fYm9hcmQtYmFzaXNcIj57e1xuICAgICAgICAgICAgICBwYWNrYWdlKCkuYm9hcmRCYXNpc1xuICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwicGFja2FnZS1pdGVtX19yZWZ1bmQtYmFkZ2UgcGFja2FnZS1pdGVtX19yZWZ1bmQtYmFkZ2UtLW5vbi1yZWZ1bmRhYmxlXCJcbiAgICAgICAgPlxuICAgICAgICAgIEBpZiAoXG4gICAgICAgICAgICBhbGxQYWNrYWdlc05vblJlZnVuZGFibGUoKSB8fFxuICAgICAgICAgICAgKCFwYWNrYWdlKCk/LmlzUmVmdW5kYWJsZSAmJiAhcGFja2FnZSgpPy5pc0NhbmNlbGxlZClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIE5PTi1SRUZVTkRBQkxFXG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAocGFja2FnZSgpPy5pc0NhbmNlbGxlZCkge1xuICAgICAgICAgICAgUFJFVklPVVMgQ0FOQ0VMTEFUSU9OXG4gICAgICAgICAgfVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIEBpZiAoZ3JvdXBlZFJvb21zKCkubGVuZ3RoKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwicGFja2FnZS1pdGVtX19yb29tc1wiPlxuICAgICAgICBAZm9yIChncm91cCBvZiBncm91cGVkUm9vbXMoKTsgdHJhY2sgaTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFja2FnZS1pdGVtX19yb29tXCI+XG4gICAgICAgICAgICA8aDUgY2xhc3M9XCJwYWNrYWdlLWl0ZW1fX3Jvb20tbmFtZVwiPlxuICAgICAgICAgICAgICBAaWYgKGdyb3VwLmNvdW50ID4gMSkge1xuICAgICAgICAgICAgICAgIHt7IGdyb3VwLmNvdW50IH19eFxuICAgICAgICAgICAgICAgIEBpZiAoZ3JvdXAuYmVkVHlwZU9yUm9vbVR5cGUpIHtcbiAgICAgICAgICAgICAgICAgIHt7IGdyb3VwLmJlZFR5cGVPclJvb21UeXBlIH19XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICBSb29tXG4gICAgICAgICAgICAgICAge3sgaSArIDEgfX1cbiAgICAgICAgICAgICAgICBAaWYgKGdyb3VwLmJlZFR5cGVPclJvb21UeXBlKSB7XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhY2thZ2UtaXRlbV9fc2VwYXJhdG9yXCI+4oCiPC9zcGFuPlxuICAgICAgICAgICAgICAgICAge3sgZ3JvdXAuYmVkVHlwZU9yUm9vbVR5cGUgfX1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvaDU+XG4gICAgICAgICAgICBAaWYgKGdyb3VwLnJvb21CYXNpcykge1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhY2thZ2UtaXRlbV9fcm9vbS1iYXNpc1wiPnt7XG4gICAgICAgICAgICAgICAgZ3JvdXAucm9vbUJhc2lzXG4gICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICBAaWYgKCFwYWNrYWdlKCk/LmlzQ2FuY2VsbGVkICYmICFhbGxQYWNrYWdlc05vblJlZnVuZGFibGUoKSkge1xuICAgICAgPGRpdiBjbGFzcz1cInBhY2thZ2UtaXRlbV9fbm9uLXJlZnVuZGFibGUtY29udGVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1tZXNzYWdlXCI+XG4gICAgICAgICAgPGFsbWF0YXItaWNvbiBbbmFtZV09XCInZXhjbGFtYXRpb24tY2lyY2xlJ1wiPiA8L2FsbWF0YXItaWNvbj5cbiAgICAgICAgICA8cFxuICAgICAgICAgICAgY2xhc3M9XCJpbmZvLW1lc3NhZ2VfX3RleHRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyBvbk9wZW5DYW5jZWxsYXRpb25Qb2xpY3koKVwiXG4gICAgICAgICAgICBbaW5uZXJIVE1MXT1cIlxuICAgICAgICAgICAgICAnV2UgY2FuXFwndCBwcm9jZXNzIGF1dG9tYXRpYyBjYW5jZWxsYXRpb24gd2l0aCB0aGlzIHJvb20uIENoZWNrIHRoZSA8YSBjbGFzcz0mcXVvdDtpbmZvLW1lc3NhZ2VfX2xpbmsmcXVvdDs+Y2FuY2VsbGF0aW9uIHBvbGljeTwvYT4gZm9yIGRldGFpbHMnXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID48L3A+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIEBpZiAodXBsb2FkU3VjY2VzcygpKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInVwbG9hZC1zdWNjZXNzXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVwbG9hZC1zdWNjZXNzX19pY29uXCI+XG4gICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICB3aWR0aD1cIjI0XCJcbiAgICAgICAgICAgICAgICBoZWlnaHQ9XCIyNFwiXG4gICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiXG4gICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgIGQ9XCJNMTMuNDY5NyA4LjIwMTEyQzEzLjc2MjYgNy45MDgyMiAxNC4yMzczIDcuOTA4MjIgMTQuNTMwMiA4LjIwMTEyQzE0LjgyMzEgOC40OTQwMSAxNC44MjMxIDguOTY4NzcgMTQuNTMwMiA5LjI2MTY2TDcuNTMwMjIgMTYuMjYxN0M3LjIzNzMyIDE2LjU1NDYgNi43NjI1NiAxNi41NTQ2IDYuNDY5NjcgMTYuMjYxN0wzLjQ2OTY3IDEzLjI2MTdDMy4xNzY3OCAxMi45Njg4IDMuMTc2NzggMTIuNDk0IDMuNDY5NjcgMTIuMjAxMUMzLjc0NDI3IDExLjkyNjUgNC4xNzg5OSAxMS45MDkgNC40NzM1OCAxMi4xNDk0TDQuNTMwMjIgMTIuMjAxMUw2Ljk5OTk0IDE0LjY3MDhMMTMuNDY5NyA4LjIwMTEyWlwiXG4gICAgICAgICAgICAgICAgICBmaWxsPVwiIzFCMUExRlwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgZD1cIk0xOS40Njk3IDguMjAxMTJDMTkuNzYyNiA3LjkwODIyIDIwLjIzNzMgNy45MDgyMiAyMC41MzAyIDguMjAxMTJDMjAuODIzMSA4LjQ5NDAxIDIwLjgyMzEgOC45Njg3NyAyMC41MzAyIDkuMjYxNjZMMTMuNTMwMiAxNi4yNjE3QzEzLjI2MzkgMTYuNTI3OSAxMi44NDE1IDE2LjU1NTYgMTIuNTQyOSAxNi4zMjYxTDExLjU0MjkgMTUuNTU3NkwxMS40ODQzIDE1LjUwNzhDMTEuMjA3OSAxNS4yNDY4IDExLjE2ODYgMTQuODEzNyAxMS40MDUyIDE0LjUwNThDMTEuNjQxOCAxNC4xOTggMTIuMDcwMyAxNC4xMjQ1IDEyLjM5MzUgMTQuMzI0MkwxMi40NTcgMTQuMzY4MUwxMi45MzQ1IDE0LjczNTNMMTkuNDY5NyA4LjIwMTEyWlwiXG4gICAgICAgICAgICAgICAgICBmaWxsPVwiIzFCMUExRlwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXBsb2FkLXN1Y2Nlc3NfX2luZm9cIj5cbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ1cGxvYWQtc3VjY2Vzc19fZmlsZW5hbWVcIj57eyBmaWxlUGlja2VkKCk/Lm5hbWUgfX08L3A+XG4gICAgICAgICAgICAgIDxwIGNsYXNzPVwidXBsb2FkLXN1Y2Nlc3NfX21ldGFcIj5cbiAgICAgICAgICAgICAgICB7eyBmb3JtYXRGaWxlU2l6ZShmaWxlUGlja2VkKCk/LnNpemUpIH19IOKAolxuICAgICAgICAgICAgICAgIFVwbG9hZGVkXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgI2ZpbGVJbnB1dFxuICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uRmlsZVNlbGVjdGVkKCRldmVudClcIlxuICAgICAgICAgICAgICBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIlxuICAgICAgICAgICAgICBhY2NlcHQ9XCIucGRmLC5qcGcsLmpwZWcsLnBuZywuZG9jLC5kb2N4XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cInVwbG9hZC1zdWNjZXNzX19jaGFuZ2UtYnRuXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImZpbGVJbnB1dC5jbGljaygpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgQ2hhbmdlXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInVwbG9hZC1zZWN0aW9uXCI+XG4gICAgICAgICAgICA8YWxtYXRhci1pY29uIFtuYW1lXT1cIidhcnJvdy11cC1vbi1zcXVhcmUnXCI+PC9hbG1hdGFyLWljb24+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZmxleDogMVwiPlxuICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJ1cGxvYWQtc2VjdGlvbl9fdGl0bGVcIj5cbiAgICAgICAgICAgICAgICBVcGxvYWQgYSBkb2N1bWVudCB0byBzdXBwb3J0IHlvdXIgcmVxdWVzdFxuICAgICAgICAgICAgICA8L2g1PlxuICAgICAgICAgICAgICA8cCBjbGFzcz1cInVwbG9hZC1zZWN0aW9uX19zdWJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgIFJlcXVpcmVkIHRvIHN1Ym1pdCBhbmQgdHJhY2sgeW91ciByZXF1ZXN0XG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgQGlmIChmaWxlUGlja2VkKCkgJiYgIXVwbG9hZFN1Y2Nlc3MoKSkge1xuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidXBsb2FkLXNlY3Rpb25fX2ZpbGVuYW1lXCI+XG4gICAgICAgICAgICAgICAgICB7eyBmaWxlUGlja2VkKCk/Lm5hbWUgfX1cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgQGlmIChpc1VwbG9hZGluZygpKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVwbG9hZC1wcm9ncmVzc1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVwbG9hZC1wcm9ncmVzc19fYmFyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInVwbG9hZC1wcm9ncmVzc19fZmlsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLiVdPVwidXBsb2FkUHJvZ3Jlc3MoKVwiXG4gICAgICAgICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cGxvYWQtcHJvZ3Jlc3NfX3RleHRcIlxuICAgICAgICAgICAgICAgICAgICA+e3sgdXBsb2FkUHJvZ3Jlc3MoKSB9fSU8L3NwYW5cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgICAjZmlsZUlucHV0XG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwib25GaWxlU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiXG4gICAgICAgICAgICAgIGFjY2VwdD1cIi5wZGYsLmpwZywuanBlZywucG5nLC5kb2MsLmRvY3hcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwidXBsb2FkLXNlY3Rpb25fX2J1dHRvblwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1VwbG9hZGluZygpXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImZpbGVJbnB1dC5jbGljaygpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgVXBsb2FkIGZpbGVcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIChzdWJtaXRFcnJvcigpKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN1Ym1pdC1yZXN1bHQgc3VibWl0LXJlc3VsdC0tZXJyb3JcIj5cbiAgICAgICAgICAgIDxhbG1hdGFyLWljb24gW25hbWVdPVwiJ2V4Y2xhbWF0aW9uLWNpcmNsZSdcIj48L2FsbWF0YXItaWNvbj5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwic3VibWl0LXJlc3VsdF9fdGV4dFwiPnt7IHN1Ym1pdEVycm9yKCkgfX08L3A+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cInN1Ym1pdC1yZXN1bHRfX3JldHJ5LWJ0blwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJvblJldHJ5KClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBUcnkgQWdhaW5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9IEBlbHNlIGlmICghc3VibWl0U3VjY2VzcygpKSB7XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cInN1Ym1pdC1yZXF1ZXN0LWJ0blwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXVwbG9hZFN1Y2Nlc3MoKSB8fCBpc1N1Ym1pdHRpbmcoKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25TdWJtaXRSZXF1ZXN0KClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIEBpZiAoaXNTdWJtaXR0aW5nKCkpIHtcbiAgICAgICAgICAgICAgU3VibWl0dGluZy4uLlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIFN1Ym1pdCBteSByZXF1ZXN0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9kaXY+XG59XG4iXX0=
|
|
242
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1ub24tcmVmdW5kYWJsZS1yb29tLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LWJvb2tpbmctZGFzaGJvYXJkL3NyYy9saWIvY29tcG9uZW50cy9ob3RlbC1jYW5jZWwvY29tcG9uZW50cy9hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLXNlbGVjdC1yb29tcy9jb21wb25lbnRzL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tbm9uLXJlZnVuZGFibGUtcm9vbS9hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLW5vbi1yZWZ1bmRhYmxlLXJvb20uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtYm9va2luZy1kYXNoYm9hcmQvc3JjL2xpYi9jb21wb25lbnRzL2hvdGVsLWNhbmNlbC9jb21wb25lbnRzL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tc2VsZWN0LXJvb21zL2NvbXBvbmVudHMvYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1ub24tcmVmdW5kYWJsZS1yb29tL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tbm9uLXJlZnVuZGFibGUtcm9vbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULHVCQUF1QixFQUN2QixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixNQUFNLEVBQ04sVUFBVSxFQUVWLFFBQVEsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdURBQXVELENB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QUFDLEtBQXlCO1FBQ3RDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUNELElBQUksS0FBSyxHQUFHLElBQUksRUFBRSxDQUFDO1lBQ2pCLE9BQU8sR0FBRyxLQUFLLElBQUksQ0FBQztRQUN0QixDQUFDO1FBQ0QsSUFBSSxLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksRUFBRSxDQUFDO1lBQ3hCLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQzFDLENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNwRCxDQUFDOytHQTNRVSxzREFBc0Q7bUdBQXRELHNEQUFzRCxzaENBUnRELENBQUMsYUFBYSxDQUFDLDBCQ3JDNUIsdS9OQThMQSwwOE1EMUpZLFlBQVksOEJBQUUsaUJBQWlCOzs0RkFTOUIsc0RBQXNEO2tCQVpsRSxTQUFTOytCQUNFLHFEQUFxRCxjQUNuRCxJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsaUJBQWlCLENBQUMsYUFDL0IsQ0FBQyxhQUFhLENBQUMsbUJBTVQsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIGlucHV0LFxuICBvdXRwdXQsXG4gIHNpZ25hbCxcbiAgaW5qZWN0LFxuICBEZXN0cm95UmVmLFxuICBlZmZlY3QsXG4gIGNvbXB1dGVkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9zaGFyZWQvc2VydmljZXMvdHJhbnNsYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXZlbnRUeXBlLCBIdHRwUmVxdWVzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7XG4gIElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUGFja2FnZSxcbiAgSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25Ib3RlbEluZm8sXG4gIElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUGFja2FnZVJvb20sXG59IGZyb20gJy4uLy4uLy4uLy4uL2ludGVyZmFjZXMvaS1hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBBbG1hdGFySWNvbk1vZHVsZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL3NoYXJlZC9tb2R1bGVzL2FsbWF0YXItaWNvbi9hbG1hdGFyLWljb24ubW9kdWxlJztcbmltcG9ydCB7IEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25FbmRwb2ludHNFbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vZW51bXMvYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1lbmRwb2ludHMuZW51bSc7XG5pbXBvcnQgeyBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uRW5kcG9pbnRzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tZW5kcG9pbnRzLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XG5cbmludGVyZmFjZSBJR3JvdXBlZFBhY2thZ2VSb29tIHtcbiAga2V5OiBzdHJpbmc7XG4gIGJlZFR5cGVPclJvb21UeXBlOiBzdHJpbmc7XG4gIHJvb21CYXNpczogc3RyaW5nO1xuICBjb3VudDogbnVtYmVyO1xuICByb29tczogSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25QYWNrYWdlUm9vbVtdO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLW5vbi1yZWZ1bmRhYmxlLXJvb20nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBBbG1hdGFySWNvbk1vZHVsZV0sXG4gIHByb3ZpZGVyczogW0RpYWxvZ1NlcnZpY2VdLFxuICB0ZW1wbGF0ZVVybDpcbiAgICAnLi9hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLW5vbi1yZWZ1bmRhYmxlLXJvb20uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtcbiAgICAnLi9hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLW5vbi1yZWZ1bmRhYmxlLXJvb20uY29tcG9uZW50LnNjc3MnLFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbk5vblJlZnVuZGFibGVSb29tQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBodHRwID0gaW5qZWN0KEh0dHBDbGllbnQpO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgZW5kcG9pbnRzU2VydmljZSA9IGluamVjdChcbiAgICBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uRW5kcG9pbnRzU2VydmljZSxcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZVNlcnZpY2UgPSBpbmplY3QoVHJhbnNsYXRpb25TZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBkaWFsb2dTZXJ2aWNlID0gaW5qZWN0KERpYWxvZ1NlcnZpY2UpO1xuXG4gIHJlYWRvbmx5IHBhY2thZ2UgPSBpbnB1dC5yZXF1aXJlZDxJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblBhY2thZ2U+KCk7XG4gIHJlYWRvbmx5IGFsbFBhY2thZ2VzID0gaW5wdXQ8SUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25QYWNrYWdlW10+KFtdKTtcbiAgcmVhZG9ubHkgaG90ZWxJbmZvID0gaW5wdXQ8SUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25Ib3RlbEluZm8gfCBudWxsPihcbiAgICBudWxsLFxuICApO1xuXG4gIC8vIGNvbnN0cnVjdG9yKCl7ZWZmZWN0KCgpID0+IHtcbiAgLy8gICBjb25zb2xlLmxvZyh0aGlzLnBhY2thZ2UoKSlcbiAgLy8gfSl9XG5cbiAgcmVhZG9ubHkgaG90ZWxJZCA9IGlucHV0PHN0cmluZyB8IG51bWJlcj4oJycpO1xuICByZWFkb25seSBjdXJyZW5jeUNvZGUgPSBpbnB1dDxzdHJpbmc+KCdTQVInKTtcbiAgcmVhZG9ubHkgYWxsUGFja2FnZXNOb25SZWZ1bmRhYmxlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgdXNlTG9jYWxDYW5jZWxsYXRpb25Qb2xpY2llcyA9IHRydWU7XG5cbiAgcmVhZG9ubHkgY2xvc2VNb2RhbCA9IG91dHB1dDx2b2lkPigpO1xuICByZWFkb25seSBub25SZWZ1bmRhYmxlU3VibWl0U3VjY2VzcyA9IG91dHB1dDxzdHJpbmc+KCk7XG5cbiAgcmVhZG9ubHkgdXBsb2FkZWRGaWxlID0gc2lnbmFsPEZpbGUgfCBudWxsPihudWxsKTtcbiAgcmVhZG9ubHkgdXBsb2FkZWRGaWxlVXJsID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICByZWFkb25seSBmaWxlUGlja2VkID0gc2lnbmFsPEZpbGUgfCBudWxsPihudWxsKTtcbiAgcmVhZG9ubHkgdXBsb2FkU3VjY2VzcyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IHVwbG9hZFByb2dyZXNzID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHJlYWRvbmx5IGlzVXBsb2FkaW5nID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgaXNTdWJtaXR0aW5nID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgc3VibWl0U3VjY2VzcyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IHN1Ym1pdEVycm9yID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIHJlYWRvbmx5IGdyb3VwZWRSb29tcyA9IGNvbXB1dGVkPElHcm91cGVkUGFja2FnZVJvb21bXT4oKCkgPT4ge1xuICAgIGNvbnN0IHJvb21zID0gdGhpcy5wYWNrYWdlKCk/LnJvb21zIHx8IFtdO1xuICAgIGNvbnN0IGdyb3VwTWFwID0gbmV3IE1hcDxzdHJpbmcsIElHcm91cGVkUGFja2FnZVJvb20+KCk7XG5cbiAgICBmb3IgKGNvbnN0IHJvb20gb2Ygcm9vbXMpIHtcbiAgICAgIC8vIGNvbnN0IGJlZFR5cGVPclJvb21UeXBlID0gcm9vbS5iZWRUeXBlIHx8IHJvb20ucm9vbVR5cGUgfHwgJyc7XG4gICAgICBjb25zdCBiZWRUeXBlT3JSb29tVHlwZSA9IHJvb20/LnJvb21OYW1lO1xuICAgICAgY29uc3Qgcm9vbUJhc2lzID0gcm9vbS5yb29tQmFzaXMgfHwgJyc7XG4gICAgICBjb25zdCBrZXkgPSBgJHtiZWRUeXBlT3JSb29tVHlwZX18fHwke3Jvb21CYXNpc31gO1xuXG4gICAgICBpZiAoZ3JvdXBNYXAuaGFzKGtleSkpIHtcbiAgICAgICAgY29uc3QgZ3JvdXAgPSBncm91cE1hcC5nZXQoa2V5KSE7XG4gICAgICAgIGdyb3VwLmNvdW50Kys7XG4gICAgICAgIGdyb3VwLnJvb21zLnB1c2gocm9vbSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBncm91cE1hcC5zZXQoa2V5LCB7XG4gICAgICAgICAga2V5LFxuICAgICAgICAgIGJlZFR5cGVPclJvb21UeXBlLFxuICAgICAgICAgIHJvb21CYXNpcyxcbiAgICAgICAgICBjb3VudDogMSxcbiAgICAgICAgICByb29tczogW3Jvb21dLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbShncm91cE1hcC52YWx1ZXMoKSk7XG4gIH0pO1xuXG4gIG9uRmlsZVNlbGVjdGVkKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgaWYgKGlucHV0LmZpbGVzICYmIGlucHV0LmZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGZpbGUgPSBpbnB1dC5maWxlc1swXTtcbiAgICAgIHRoaXMuZmlsZVBpY2tlZC5zZXQoZmlsZSk7XG4gICAgICB0aGlzLnVwbG9hZEZpbGUoZmlsZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGxvYWRGaWxlKGZpbGU6IEZpbGUpOiB2b2lkIHtcbiAgICB0aGlzLmlzVXBsb2FkaW5nLnNldCh0cnVlKTtcbiAgICB0aGlzLnVwbG9hZFByb2dyZXNzLnNldCgwKTtcbiAgICB0aGlzLnVwbG9hZFN1Y2Nlc3Muc2V0KGZhbHNlKTtcbiAgICB0aGlzLnVwbG9hZGVkRmlsZVVybC5zZXQobnVsbCk7XG5cbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIGZpbGUpO1xuXG4gICAgY29uc3QgcmVxID0gbmV3IEh0dHBSZXF1ZXN0KFxuICAgICAgJ1BPU1QnLFxuICAgICAgdGhpcy5lbmRwb2ludHNTZXJ2aWNlLnJlc29sdmVFbmRwb2ludChcbiAgICAgICAgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbkVuZHBvaW50c0VudW0udXBsb2FkQXR0YWNobWVudCxcbiAgICAgICksXG4gICAgICBmb3JtRGF0YSxcbiAgICAgIHtcbiAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHRydWUsXG4gICAgICAgIHJlc3BvbnNlVHlwZTogJ2pzb24nLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgdGhpcy5odHRwXG4gICAgICAucmVxdWVzdDx7IGRhdGE6IHsgdXJsOiBzdHJpbmcgfSB9PihyZXEpXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoZXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gSHR0cEV2ZW50VHlwZS5VcGxvYWRQcm9ncmVzcyAmJiBldmVudC50b3RhbCkge1xuICAgICAgICAgICAgY29uc3QgcHJvZ3Jlc3MgPSBNYXRoLnJvdW5kKCgxMDAgKiBldmVudC5sb2FkZWQpIC8gZXZlbnQudG90YWwpO1xuICAgICAgICAgICAgdGhpcy51cGxvYWRQcm9ncmVzcy5zZXQocHJvZ3Jlc3MpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQudHlwZSA9PT0gSHR0cEV2ZW50VHlwZS5SZXNwb25zZSkge1xuICAgICAgICAgICAgdGhpcy51cGxvYWRQcm9ncmVzcy5zZXQoMTAwKTtcbiAgICAgICAgICAgIHRoaXMuaXNVcGxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMudXBsb2FkU3VjY2Vzcy5zZXQodHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZS5zZXQoZmlsZSk7XG4gICAgICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZVVybC5zZXQoZXZlbnQuYm9keT8uZGF0YT8udXJsID8/IG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmlzVXBsb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgdGhpcy51cGxvYWRQcm9ncmVzcy5zZXQoMCk7XG4gICAgICAgICAgdGhpcy51cGxvYWRTdWNjZXNzLnNldChmYWxzZSk7XG4gICAgICAgICAgdGhpcy5maWxlUGlja2VkLnNldChudWxsKTtcbiAgICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZVVybC5zZXQobnVsbCk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIG9uU3VibWl0UmVxdWVzdCgpOiB2b2lkIHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLnVwbG9hZGVkRmlsZVVybCgpO1xuICAgIGlmICghdXJsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5pc1N1Ym1pdHRpbmcuc2V0KHRydWUpO1xuICAgIHRoaXMuc3VibWl0RXJyb3Iuc2V0KG51bGwpO1xuICAgIHRoaXMuc3VibWl0U3VjY2Vzcy5zZXQoZmFsc2UpO1xuXG4gICAgY29uc3QgbGFuZ3VhZ2UgPSAnZW4nO1xuXG4gICAgdGhpcy5lbmRwb2ludHNTZXJ2aWNlXG4gICAgICAucHJvY2Vzc05vblJlZnVuZGFibGVDYW5jZWxsYXRpb24odGhpcy5wYWNrYWdlKCkucGFja2FnZUlkLCB1cmwsIGxhbmd1YWdlKVxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgdGhpcy5zdWJtaXRTdWNjZXNzLnNldCh0cnVlKTtcbiAgICAgICAgICB0aGlzLm5vblJlZnVuZGFibGVTdWJtaXRTdWNjZXNzLmVtaXQodGhpcy5wYWNrYWdlKCkucGFja2FnZU5hbWUpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICB0aGlzLnN1Ym1pdEVycm9yLnNldChlcnJvcj8ubWVzc2FnZSB8fCAnRmFpbGVkIHRvIHN1Ym1pdCByZXF1ZXN0Jyk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIG9uUmV0cnkoKTogdm9pZCB7XG4gICAgdGhpcy5zdWJtaXRFcnJvci5zZXQobnVsbCk7XG4gICAgdGhpcy5vblN1Ym1pdFJlcXVlc3QoKTtcbiAgfVxuXG4gIG9uT3BlbkNhbmNlbGxhdGlvblBvbGljeSgpOiB2b2lkIHtcbiAgICBjb25zdCBob3RlbEluZm9EYXRhID0gdGhpcy5ob3RlbEluZm8oKTtcbiAgICBjb25zdCBjdXJyZW5jeUNvZGUgPSB0aGlzLmN1cnJlbmN5Q29kZSgpO1xuXG4gICAgLy8gVXNlIGFsbCBwYWNrYWdlcyBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8gY3VycmVudCBwYWNrYWdlXG4gICAgY29uc3QgcGFja2FnZXNUb1Nob3cgPVxuICAgICAgdGhpcy5hbGxQYWNrYWdlcygpLmxlbmd0aCA+IDAgPyB0aGlzLmFsbFBhY2thZ2VzKCkgOiBbdGhpcy5wYWNrYWdlKCldO1xuXG4gICAgLy8gVHJhbnNmb3JtIGFsbCBwYWNrYWdlcyB3aXRoIHRoZWlyIGNhbmNlbGxhdGlvbiBwb2xpY2llc1xuICAgIGNvbnN0IHBhY2thZ2VzRm9yUG9wdXAgPSBwYWNrYWdlc1RvU2hvdy5tYXAoKHBrZykgPT4ge1xuICAgICAgLy8gVHJhbnNmb3JtIGNhbmNlbGxhdGlvbiBwb2xpY2llcyB0byB0aGUgZm9ybWF0IGV4cGVjdGVkIGJ5IG1hcENhbmNlbGxhdGlvblBvbGljaWVzXG4gICAgICBjb25zdCByYXdDYW5jZWxsYXRpb25Qb2xpY2llcyA9IChwa2cuY2FuY2VsbGF0aW9uUG9saWNpZXMgfHwgW10pLm1hcChcbiAgICAgICAgKHBvbGljeSkgPT4gKHtcbiAgICAgICAgICBkYXRlRnJvbTogcG9saWN5LmZyb21EYXRlLFxuICAgICAgICAgIGRhdGVUbzogcG9saWN5LnRvRGF0ZSxcbiAgICAgICAgICBjdXJyZW5jeUlzb0NvZGU6IGN1cnJlbmN5Q29kZSxcbiAgICAgICAgICBmaW5hbFByaWNlOiBwb2xpY3kucGVuYWx0eVZhbHVlLFxuICAgICAgICAgIHJlZnVuZGFiaWxpdHlUeXBlOlxuICAgICAgICAgICAgcG9saWN5LnBlbmFsdHlUeXBlID09PSAnRnVsbFJlZnVuZGVkJ1xuICAgICAgICAgICAgICA/ICdGdWxsUmVmdW5kZWQnXG4gICAgICAgICAgICAgIDogcG9saWN5LnBlbmFsdHlUeXBlID09PSAnUGVyY2VudGFnZScgfHxcbiAgICAgICAgICAgICAgICAgIHBvbGljeS5wZW5hbHR5VHlwZSA9PT0gJ0Ftb3VudCdcbiAgICAgICAgICAgICAgICA/ICdQYXJ0aWFsUmVmdW5kZWQnXG4gICAgICAgICAgICAgICAgOiAnTm9uUmVmdW5kZWQnLFxuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICAgIC8vIEVuc3VyZSBhdCBsZWFzdCBvbmUgcG9saWN5IGV4aXN0c1xuICAgICAgaWYgKHJhd0NhbmNlbGxhdGlvblBvbGljaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByYXdDYW5jZWxsYXRpb25Qb2xpY2llcy5wdXNoKHtcbiAgICAgICAgICBkYXRlRnJvbTogaG90ZWxJbmZvRGF0YT8uY2hlY2tJbixcbiAgICAgICAgICBkYXRlVG86IGhvdGVsSW5mb0RhdGE/LmNoZWNrT3V0LFxuICAgICAgICAgIGN1cnJlbmN5SXNvQ29kZTogY3VycmVuY3lDb2RlLFxuICAgICAgICAgIGZpbmFsUHJpY2U6IHBrZy5jYW5jZWxsYXRpb25GZWUgfHwgMCxcbiAgICAgICAgICByZWZ1bmRhYmlsaXR5VHlwZTogcGtnLmlzUmVmdW5kYWJsZSA/ICdSZWZ1bmRhYmxlJyA6ICdOb25SZWZ1bmRlZCcsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBCdWlsZCBwYWNrYWdlIGRhdGEgd2l0aCBhbGwgcmVxdWlyZWQgZmllbGRzXG4gICAgICBjb25zdCByZW1hcmtzID1cbiAgICAgICAgKHBrZyBhcyBhbnkpPy5jYW5jZWxsYXRpb25Qb2xpY2llc1JlbWFya3MgPz9cbiAgICAgICAgKHBrZyBhcyBhbnkpPy5DYW5jZWxsYXRpb25Qb2xpY2llc1JlbWFya3M7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5wa2csXG4gICAgICAgIGNhbmNlbGxhdGlvblBvbGljaWVzOiByYXdDYW5jZWxsYXRpb25Qb2xpY2llcyxcbiAgICAgICAgaXNSZWZ1bmRhYmxlOiBwa2cuaXNSZWZ1bmRhYmxlID8/IHBrZy5yZWZ1bmRhYmlsaXR5ID8/IGZhbHNlLFxuICAgICAgICByZWZ1bmRhYmxlVW50aWw6IHBrZy5yZWZ1bmRhYmxlVW50aWwsXG4gICAgICAgIGN1cnJlbmN5OiBjdXJyZW5jeUNvZGUsXG4gICAgICAgIGZpbmFsUHJpY2U6IHBrZy5yb29tQW1vdW50LFxuICAgICAgICBib29raW5nUmVtYXJrczogcmVtYXJrcyxcbiAgICAgICAgY2FuY2VsbGF0aW9uUG9saWNpZXNSZW1hcmtzOiByZW1hcmtzLFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGNhcnRJbmZvID0ge1xuICAgICAgcGFja2FnZXM6IHBhY2thZ2VzRm9yUG9wdXAsXG4gICAgICBmcm9tRGF0ZTogaG90ZWxJbmZvRGF0YT8uY2hlY2tJbixcbiAgICAgIGRhdGVfZnJvbTogaG90ZWxJbmZvRGF0YT8uY2hlY2tJbixcbiAgICAgIHRvRGF0ZTogaG90ZWxJbmZvRGF0YT8uY2hlY2tPdXQsXG4gICAgICBkYXRlX3RvOiBob3RlbEluZm9EYXRhPy5jaGVja091dCxcbiAgICAgIGFsbXRhYXJIb3RlbElkOiB0aGlzLmhvdGVsSWQoKSxcbiAgICB9O1xuXG4gICAgY29uc3QgbGFuZyA9ICdlbic7XG4gICAgY29uc3QgZm9ybWF0RGF0ZSA9XG4gICAgICBsYW5nID09PSAnZW4nXG4gICAgICAgID8gJ2RkZGQgRG8gb2YgTU1NTSBZWVlZIC0gaGg6bW0gQSBbR01UXSdcbiAgICAgICAgOiAnZGRkZCAsIEREIE1NTU0gWVlZWSAtIGhoOm1tIEEgW0dNVF0nO1xuXG4gICAgLy8gVE9ETzogRml4IGltcG9ydCBwYXRoIGZvciBDYW5jZWxsYXRpb25Qb2xpY3lQb3B1cENvbXBvbmVudFxuICAgIC8vIGltcG9ydCgnbGlicy9mZWF0dXJlcy9zcmMvbGliL2ZlYXR1cmVzL2hvdGVscy9zaGFyZWQvbW9kdWxlcy9ob3RlbC1ib29raW5nLWluZm9ybWF0aW9uL2NvbXBvbmVudHMvYm9va2luZy1zdW1tYXJ5L2NvbXBvbmVudHMvY2FuY2VsbGF0aW9uLXBvbGljeS1wb3B1cC9jYW5jZWxsYXRpb24tcG9saWN5LnBvcHVwLmNvbXBvbmVudCcpLnRoZW4oXG4gICAgLy8gICAoeyBDYW5jZWxsYXRpb25Qb2xpY3lQb3B1cENvbXBvbmVudCB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGhlYWRlciA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICAgICdIT1RFTC5jYW5jZWxsYXRpb24tcG9saWN5JyxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc29sZS53YXJuKCdDYW5jZWxsYXRpb25Qb2xpY3lQb3B1cENvbXBvbmVudCBub3QgYXZhaWxhYmxlIC0gaW1wb3J0IHBhdGggbmVlZHMgdG8gYmUgZml4ZWQnKTtcbiAgICAgICAgLy8gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oQ2FuY2VsbGF0aW9uUG9saWN5UG9wdXBDb21wb25lbnQsIHtcbiAgICAgICAgLy8gICBoZWFkZXIsXG4gICAgICAgIC8vICAgZGF0YToge1xuICAgICAgICAvLyAgICAgY2FydEluZm8sXG4gICAgICAgIC8vICAgICBjdXJyZW50Q3VycmVuY3lPYmo6IHtcbiAgICAgICAgLy8gICAgICAgY29kZTogY3VycmVuY3lDb2RlLFxuICAgICAgICAvLyAgICAgICBjdXJyZW5jeTogY3VycmVuY3lDb2RlLFxuICAgICAgICAvLyAgICAgfSxcbiAgICAgICAgLy8gICAgIGZvcm1hdERhdGUsXG4gICAgICAgIC8vICAgICBob3RlbERldGFpbHM6IHtcbiAgICAgICAgLy8gICAgICAgaG90ZWxOYW1lOiBob3RlbEluZm9EYXRhPy5ob3RlbE5hbWUsXG4gICAgICAgIC8vICAgICAgIHBheW1lbnRPcHRpb246IG51bGwsXG4gICAgICAgIC8vICAgICB9LFxuICAgICAgICAvLyAgIH0sXG4gICAgICAgIC8vICAgc3R5bGVDbGFzczogJ2NhbmNlbGxhdGlvbi1wb2xpY3ktZGlhbG9nJyxcbiAgICAgICAgLy8gICBjb250ZW50U3R5bGU6IHsgb3ZlcmZsb3c6ICdhdXRvJyB9LFxuICAgICAgICAvLyAgIGJhc2VaSW5kZXg6IDEwMDAwLFxuICAgICAgICAvLyAgIG1heGltaXphYmxlOiBmYWxzZSxcbiAgICAgICAgLy8gICBzdHlsZTogeyB3aWR0aDogJzYwMHB4JywgbWF4V2lkdGg6ICc5MCUnIH0sXG4gICAgICAgIC8vIH0pO1xuICAgICAgLy99LFxuICAgIC8vKTtcbiAgfVxuXG4gIGZvcm1hdEZpbGVTaXplKGJ5dGVzOiBudW1iZXIgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICAgIGlmICghYnl0ZXMpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgaWYgKGJ5dGVzIDwgMTAyNCkge1xuICAgICAgcmV0dXJuIGAke2J5dGVzfSBCYDtcbiAgICB9XG4gICAgaWYgKGJ5dGVzIDwgMTAyNCAqIDEwMjQpIHtcbiAgICAgIHJldHVybiBgJHtNYXRoLnJvdW5kKGJ5dGVzIC8gMTAyNCl9IEtCYDtcbiAgICB9XG4gICAgcmV0dXJuIGAkeyhieXRlcyAvICgxMDI0ICogMTAyNCkpLnRvRml4ZWQoMSl9IE1CYDtcbiAgfVxufVxuIiwiQGlmICghcGFja2FnZSgpLmlzQ2FuY2VsbGVkKSB7XG4gIDxkaXYgY2xhc3M9XCJwYWNrYWdlLWl0ZW0gcGFja2FnZS1pdGVtLS1ub24tcmVmdW5kYWJsZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJwYWNrYWdlLWl0ZW1fX2hlYWRlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cInBhY2thZ2UtaXRlbV9fY29udGVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicGFja2FnZS1pdGVtX19pbmZvXCI+XG4gICAgICAgICAgPGg0IGNsYXNzPVwicGFja2FnZS1pdGVtX19uYW1lXCI+e3sgcGFja2FnZSgpLnBhY2thZ2VOYW1lIH19PC9oND5cbiAgICAgICAgICBAaWYgKHBhY2thZ2UoKS5ib2FyZEJhc2lzKSB7XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhY2thZ2UtaXRlbV9fYm9hcmQtYmFzaXNcIj57e1xuICAgICAgICAgICAgICBwYWNrYWdlKCkuYm9hcmRCYXNpc1xuICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwicGFja2FnZS1pdGVtX19yZWZ1bmQtYmFkZ2UgcGFja2FnZS1pdGVtX19yZWZ1bmQtYmFkZ2UtLW5vbi1yZWZ1bmRhYmxlXCJcbiAgICAgICAgPlxuICAgICAgICAgIEBpZiAoXG4gICAgICAgICAgICBhbGxQYWNrYWdlc05vblJlZnVuZGFibGUoKSB8fFxuICAgICAgICAgICAgKCFwYWNrYWdlKCk/LmlzUmVmdW5kYWJsZSAmJiAhcGFja2FnZSgpPy5pc0NhbmNlbGxlZClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIE5PTi1SRUZVTkRBQkxFXG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAocGFja2FnZSgpPy5pc0NhbmNlbGxlZCkge1xuICAgICAgICAgICAgUFJFVklPVVMgQ0FOQ0VMTEFUSU9OXG4gICAgICAgICAgfVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIEBpZiAoZ3JvdXBlZFJvb21zKCkubGVuZ3RoKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwicGFja2FnZS1pdGVtX19yb29tc1wiPlxuICAgICAgICBAZm9yIChncm91cCBvZiBncm91cGVkUm9vbXMoKTsgdHJhY2sgaTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFja2FnZS1pdGVtX19yb29tXCI+XG4gICAgICAgICAgICA8aDUgY2xhc3M9XCJwYWNrYWdlLWl0ZW1fX3Jvb20tbmFtZVwiPlxuICAgICAgICAgICAgICBAaWYgKGdyb3VwLmNvdW50ID4gMSkge1xuICAgICAgICAgICAgICAgIHt7IGdyb3VwLmNvdW50IH19eFxuICAgICAgICAgICAgICAgIEBpZiAoZ3JvdXAuYmVkVHlwZU9yUm9vbVR5cGUpIHtcbiAgICAgICAgICAgICAgICAgIHt7IGdyb3VwLmJlZFR5cGVPclJvb21UeXBlIH19XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICBSb29tXG4gICAgICAgICAgICAgICAge3sgaSArIDEgfX1cbiAgICAgICAgICAgICAgICBAaWYgKGdyb3VwLmJlZFR5cGVPclJvb21UeXBlKSB7XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhY2thZ2UtaXRlbV9fc2VwYXJhdG9yXCI+4oCiPC9zcGFuPlxuICAgICAgICAgICAgICAgICAge3sgZ3JvdXAuYmVkVHlwZU9yUm9vbVR5cGUgfX1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvaDU+XG4gICAgICAgICAgICBAaWYgKGdyb3VwLnJvb21CYXNpcykge1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhY2thZ2UtaXRlbV9fcm9vbS1iYXNpc1wiPnt7XG4gICAgICAgICAgICAgICAgZ3JvdXAucm9vbUJhc2lzXG4gICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICBAaWYgKCFwYWNrYWdlKCk/LmlzQ2FuY2VsbGVkICYmICFhbGxQYWNrYWdlc05vblJlZnVuZGFibGUoKSkge1xuICAgICAgPGRpdiBjbGFzcz1cInBhY2thZ2UtaXRlbV9fbm9uLXJlZnVuZGFibGUtY29udGVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1tZXNzYWdlXCI+XG4gICAgICAgICAgPGFsbWF0YXItaWNvbiBbbmFtZV09XCInZXhjbGFtYXRpb24tY2lyY2xlJ1wiPiA8L2FsbWF0YXItaWNvbj5cbiAgICAgICAgICA8cFxuICAgICAgICAgICAgY2xhc3M9XCJpbmZvLW1lc3NhZ2VfX3RleHRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyBvbk9wZW5DYW5jZWxsYXRpb25Qb2xpY3koKVwiXG4gICAgICAgICAgICBbaW5uZXJIVE1MXT1cIlxuICAgICAgICAgICAgICAnV2UgY2FuXFwndCBwcm9jZXNzIGF1dG9tYXRpYyBjYW5jZWxsYXRpb24gd2l0aCB0aGlzIHJvb20uIENoZWNrIHRoZSA8YSBjbGFzcz0mcXVvdDtpbmZvLW1lc3NhZ2VfX2xpbmsmcXVvdDs+Y2FuY2VsbGF0aW9uIHBvbGljeTwvYT4gZm9yIGRldGFpbHMnXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID48L3A+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIEBpZiAodXBsb2FkU3VjY2VzcygpKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInVwbG9hZC1zdWNjZXNzXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVwbG9hZC1zdWNjZXNzX19pY29uXCI+XG4gICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICB3aWR0aD1cIjI0XCJcbiAgICAgICAgICAgICAgICBoZWlnaHQ9XCIyNFwiXG4gICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiXG4gICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgIGQ9XCJNMTMuNDY5NyA4LjIwMTEyQzEzLjc2MjYgNy45MDgyMiAxNC4yMzczIDcuOTA4MjIgMTQuNTMwMiA4LjIwMTEyQzE0LjgyMzEgOC40OTQwMSAxNC44MjMxIDguOTY4NzcgMTQuNTMwMiA5LjI2MTY2TDcuNTMwMjIgMTYuMjYxN0M3LjIzNzMyIDE2LjU1NDYgNi43NjI1NiAxNi41NTQ2IDYuNDY5NjcgMTYuMjYxN0wzLjQ2OTY3IDEzLjI2MTdDMy4xNzY3OCAxMi45Njg4IDMuMTc2NzggMTIuNDk0IDMuNDY5NjcgMTIuMjAxMUMzLjc0NDI3IDExLjkyNjUgNC4xNzg5OSAxMS45MDkgNC40NzM1OCAxMi4xNDk0TDQuNTMwMjIgMTIuMjAxMUw2Ljk5OTk0IDE0LjY3MDhMMTMuNDY5NyA4LjIwMTEyWlwiXG4gICAgICAgICAgICAgICAgICBmaWxsPVwiIzFCMUExRlwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgZD1cIk0xOS40Njk3IDguMjAxMTJDMTkuNzYyNiA3LjkwODIyIDIwLjIzNzMgNy45MDgyMiAyMC41MzAyIDguMjAxMTJDMjAuODIzMSA4LjQ5NDAxIDIwLjgyMzEgOC45Njg3NyAyMC41MzAyIDkuMjYxNjZMMTMuNTMwMiAxNi4yNjE3QzEzLjI2MzkgMTYuNTI3OSAxMi44NDE1IDE2LjU1NTYgMTIuNTQyOSAxNi4zMjYxTDExLjU0MjkgMTUuNTU3NkwxMS40ODQzIDE1LjUwNzhDMTEuMjA3OSAxNS4yNDY4IDExLjE2ODYgMTQuODEzNyAxMS40MDUyIDE0LjUwNThDMTEuNjQxOCAxNC4xOTggMTIuMDcwMyAxNC4xMjQ1IDEyLjM5MzUgMTQuMzI0MkwxMi40NTcgMTQuMzY4MUwxMi45MzQ1IDE0LjczNTNMMTkuNDY5NyA4LjIwMTEyWlwiXG4gICAgICAgICAgICAgICAgICBmaWxsPVwiIzFCMUExRlwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXBsb2FkLXN1Y2Nlc3NfX2luZm9cIj5cbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ1cGxvYWQtc3VjY2Vzc19fZmlsZW5hbWVcIj57eyBmaWxlUGlja2VkKCk/Lm5hbWUgfX08L3A+XG4gICAgICAgICAgICAgIDxwIGNsYXNzPVwidXBsb2FkLXN1Y2Nlc3NfX21ldGFcIj5cbiAgICAgICAgICAgICAgICB7eyBmb3JtYXRGaWxlU2l6ZShmaWxlUGlja2VkKCk/LnNpemUpIH19IOKAolxuICAgICAgICAgICAgICAgIFVwbG9hZGVkXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgI2ZpbGVJbnB1dFxuICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uRmlsZVNlbGVjdGVkKCRldmVudClcIlxuICAgICAgICAgICAgICBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIlxuICAgICAgICAgICAgICBhY2NlcHQ9XCIucGRmLC5qcGcsLmpwZWcsLnBuZywuZG9jLC5kb2N4XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cInVwbG9hZC1zdWNjZXNzX19jaGFuZ2UtYnRuXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImZpbGVJbnB1dC5jbGljaygpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgQ2hhbmdlXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInVwbG9hZC1zZWN0aW9uXCI+XG4gICAgICAgICAgICA8YWxtYXRhci1pY29uIFtuYW1lXT1cIidhcnJvdy11cC1vbi1zcXVhcmUnXCI+PC9hbG1hdGFyLWljb24+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZmxleDogMVwiPlxuICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJ1cGxvYWQtc2VjdGlvbl9fdGl0bGVcIj5cbiAgICAgICAgICAgICAgICBVcGxvYWQgYSBkb2N1bWVudCB0byBzdXBwb3J0IHlvdXIgcmVxdWVzdFxuICAgICAgICAgICAgICA8L2g1PlxuICAgICAgICAgICAgICA8cCBjbGFzcz1cInVwbG9hZC1zZWN0aW9uX19zdWJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgIFJlcXVpcmVkIHRvIHN1Ym1pdCBhbmQgdHJhY2sgeW91ciByZXF1ZXN0XG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgQGlmIChmaWxlUGlja2VkKCkgJiYgIXVwbG9hZFN1Y2Nlc3MoKSkge1xuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidXBsb2FkLXNlY3Rpb25fX2ZpbGVuYW1lXCI+XG4gICAgICAgICAgICAgICAgICB7eyBmaWxlUGlja2VkKCk/Lm5hbWUgfX1cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgQGlmIChpc1VwbG9hZGluZygpKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVwbG9hZC1wcm9ncmVzc1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVwbG9hZC1wcm9ncmVzc19fYmFyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInVwbG9hZC1wcm9ncmVzc19fZmlsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLiVdPVwidXBsb2FkUHJvZ3Jlc3MoKVwiXG4gICAgICAgICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cGxvYWQtcHJvZ3Jlc3NfX3RleHRcIlxuICAgICAgICAgICAgICAgICAgICA+e3sgdXBsb2FkUHJvZ3Jlc3MoKSB9fSU8L3NwYW5cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgICAjZmlsZUlucHV0XG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwib25GaWxlU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiXG4gICAgICAgICAgICAgIGFjY2VwdD1cIi5wZGYsLmpwZywuanBlZywucG5nLC5kb2MsLmRvY3hcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwidXBsb2FkLXNlY3Rpb25fX2J1dHRvblwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1VwbG9hZGluZygpXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImZpbGVJbnB1dC5jbGljaygpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgVXBsb2FkIGZpbGVcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIChzdWJtaXRFcnJvcigpKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN1Ym1pdC1yZXN1bHQgc3VibWl0LXJlc3VsdC0tZXJyb3JcIj5cbiAgICAgICAgICAgIDxhbG1hdGFyLWljb24gW25hbWVdPVwiJ2V4Y2xhbWF0aW9uLWNpcmNsZSdcIj48L2FsbWF0YXItaWNvbj5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwic3VibWl0LXJlc3VsdF9fdGV4dFwiPnt7IHN1Ym1pdEVycm9yKCkgfX08L3A+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cInN1Ym1pdC1yZXN1bHRfX3JldHJ5LWJ0blwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJvblJldHJ5KClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBUcnkgQWdhaW5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9IEBlbHNlIGlmICghc3VibWl0U3VjY2VzcygpKSB7XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cInN1Ym1pdC1yZXF1ZXN0LWJ0blwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXVwbG9hZFN1Y2Nlc3MoKSB8fCBpc1N1Ym1pdHRpbmcoKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25TdWJtaXRSZXF1ZXN0KClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIEBpZiAoaXNTdWJtaXR0aW5nKCkpIHtcbiAgICAgICAgICAgICAgU3VibWl0dGluZy4uLlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIFN1Ym1pdCBteSByZXF1ZXN0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9kaXY+XG59XG4iXX0=
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Injectable, inject, signal, computed } from '@angular/core';
|
|
2
2
|
import { map, catchError, throwError } from 'rxjs';
|
|
3
3
|
import { ApiService } from '../../../shared/services/api.service';
|
|
4
|
+
import { SBD_CONFIG } from '../../../config/dashboard.config';
|
|
4
5
|
import { ActivatedRoute } from '@angular/router';
|
|
5
6
|
import { environments } from '../../../shared/environments/environment';
|
|
6
7
|
import { HotelManageBookingService } from '../../shared/services/hotel-manage-booking/hotel-manage-booking.service';
|
|
@@ -11,6 +12,7 @@ import * as i0 from "@angular/core";
|
|
|
11
12
|
export class AlmatarHotelAutoCancellationEndpointsService {
|
|
12
13
|
constructor() {
|
|
13
14
|
this.api = inject(ApiService);
|
|
15
|
+
this.apiBase = inject(SBD_CONFIG).apiBase;
|
|
14
16
|
this.route = inject(ActivatedRoute);
|
|
15
17
|
this.hotelManageBookingService = inject(HotelManageBookingService);
|
|
16
18
|
this._almatarBookingId = signal('');
|
|
@@ -33,8 +35,15 @@ export class AlmatarHotelAutoCancellationEndpointsService {
|
|
|
33
35
|
}
|
|
34
36
|
});
|
|
35
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* Full URL of an endpoint from the enum. The enum paths start with `/api/`, which is the default `apiBase`; a host
|
|
40
|
+
* that serves the API somewhere else (Helix: its own API origin) sets `apiBase`, so that part is swapped for it.
|
|
41
|
+
*/
|
|
42
|
+
resolveEndpoint(path) {
|
|
43
|
+
return `${this.apiBase.replace(/\/+$/, '')}/${path.replace(/^\/?api\//, '')}`;
|
|
44
|
+
}
|
|
36
45
|
getRefundDetails(packageIds = []) {
|
|
37
|
-
const endpoint = AlmatarHotelAutoCancellationEndpointsEnum.getRefundDetails;
|
|
46
|
+
const endpoint = this.resolveEndpoint(AlmatarHotelAutoCancellationEndpointsEnum.getRefundDetails);
|
|
38
47
|
const payload = {
|
|
39
48
|
bookingId: `${this.hotelManageBookingService.selectedHotelBooking.value?.bookingId ||
|
|
40
49
|
''}`,
|
|
@@ -326,7 +335,7 @@ export class AlmatarHotelAutoCancellationEndpointsService {
|
|
|
326
335
|
return allRooms;
|
|
327
336
|
}
|
|
328
337
|
processAutoCancellation(packageIds, refundOption = 'originalPaymentMethod') {
|
|
329
|
-
const endpoint = AlmatarHotelAutoCancellationEndpointsEnum.processAutoCancellation;
|
|
338
|
+
const endpoint = this.resolveEndpoint(AlmatarHotelAutoCancellationEndpointsEnum.processAutoCancellation);
|
|
330
339
|
const uniquePackageIds = [...new Set(packageIds)]; // Ensure unique package IDs
|
|
331
340
|
const payload = {
|
|
332
341
|
bookingId: `${this.hotelManageBookingService.selectedHotelBooking.value?.bookingId ||
|
|
@@ -376,7 +385,7 @@ export class AlmatarHotelAutoCancellationEndpointsService {
|
|
|
376
385
|
}), catchError((error) => this.handleError(error, 'Failed to process cancellation')));
|
|
377
386
|
}
|
|
378
387
|
processNonRefundableCancellation(packageId, attachmentUrl, language = 'en') {
|
|
379
|
-
const endpoint = AlmatarHotelAutoCancellationEndpointsEnum.processAutoCancellation;
|
|
388
|
+
const endpoint = this.resolveEndpoint(AlmatarHotelAutoCancellationEndpointsEnum.processAutoCancellation);
|
|
380
389
|
const payload = {
|
|
381
390
|
bookingId: `${this.hotelManageBookingService.selectedHotelBooking.value?.bookingId ||
|
|
382
391
|
''}`,
|
|
@@ -445,4 +454,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
445
454
|
providedIn: 'root'
|
|
446
455
|
}]
|
|
447
456
|
}], ctorParameters: () => [] });
|
|
448
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1lbmRwb2ludHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LWJvb2tpbmctZGFzaGJvYXJkL3NyYy9saWIvY29tcG9uZW50cy9ob3RlbC1jYW5jZWwvc2VydmljZXMvYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1lbmRwb2ludHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JFLE9BQU8sRUFBYyxHQUFHLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBTSxNQUFNLE1BQU0sQ0FBQztBQUNuRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUN4RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx5RUFBeUUsQ0FBQztBQUNwSCxPQUFPLEVBQUUseUNBQXlDLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQVFwSCxPQUFPLEVBQUUsOENBQThDLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUNySCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUErRGhFLE1BQU0sT0FBTyw0Q0FBNEM7SUFtQnZEO1FBbEJpQixRQUFHLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pCLFVBQUssR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDL0IsOEJBQXlCLEdBQUcsTUFBTSxDQUNqRCx5QkFBeUIsQ0FDMUIsQ0FBQztRQUVlLHNCQUFpQixHQUFHLE1BQU0s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LE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDbkQsQ0FBQzsrR0FsZ0JVLDRDQUE0QzttSEFBNUMsNENBQTRDLGNBRjNDLE1BQU07OzRGQUVQLDRDQUE0QztrQkFIeEQsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QsIHNpZ25hbCwgY29tcHV0ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG1hcCwgY2F0Y2hFcnJvciwgdGhyb3dFcnJvciwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvc2VydmljZXMvYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgZW52aXJvbm1lbnRzIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBIb3RlbE1hbmFnZUJvb2tpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2hvdGVsLW1hbmFnZS1ib29raW5nL2hvdGVsLW1hbmFnZS1ib29raW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbkVuZHBvaW50c0VudW0gfSBmcm9tICcuLi9lbnVtcy9hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLWVuZHBvaW50cy5lbnVtJztcbmltcG9ydCB7XG4gIElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUm9vbSxcbiAgSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25SZWZ1bmRTdW1tYXJ5LFxuICBJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblJlZnVuZFBhY2thZ2UsXG4gIElSZWZ1bmREZXRhaWxzQXBpUmVzcG9uc2UsXG4gIElSZWZ1bmREZXRhaWxzRGF0YVxufSBmcm9tICcuLi9pbnRlcmZhY2VzL2ktYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgcmVzb2x2ZU15VHJpcHNWaWV3ZWRFbnRyeVNvdXJjZUZyb21RdWVyeVBhcmFtcyB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy93ZWJlbmdhZ2UtdHJhY2tpbmcuc2VydmljZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJlZnVuZERldGFpbHNSZXF1ZXN0IHtcbiAgYm9va2luZ0lkOiBzdHJpbmc7XG4gIHByb2R1Y3Q6ICdob3RlbHMnO1xuICBwYWNrYWdlSWRzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUHJvY2Vzc0NhbmNlbGxhdGlvblJlcXVlc3Qge1xuICBib29raW5nSWQ6IHN0cmluZztcbiAgcHJvZHVjdDogJ2hvdGVscyc7XG4gIHBhY2thZ2VJZHM6IHN0cmluZ1tdO1xuICBwcmVmZXJyZWRQYXltZW50TWV0aG9kPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElQcm9jZXNzTm9uUmVmdW5kYWJsZUNhbmNlbGxhdGlvblJlcXVlc3Qge1xuICBib29raW5nSWQ6IHN0cmluZztcbiAgcHJvZHVjdDogJ2hvdGVscyc7XG4gIHBhY2thZ2VJZHM6IHN0cmluZ1tdO1xuICBwcmVmZXJyZWRQYXltZW50TWV0aG9kOiBzdHJpbmc7XG4gIHByb2Nlc3NlZE1vZGU6ICdhdXRvJztcbiAgbGFuZ3VhZ2U6IHN0cmluZztcbiAgYXR0YWNobWVudFVybDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElBdXRvQ2FuY2VsbGF0aW9uUHJvY2Vzc1Jlc3BvbnNlIHtcbiAgc3RhdHVzOiBudW1iZXI7XG4gIGRhdGE6IHtcbiAgICBlcnJvcjogc3RyaW5nO1xuICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgICBib29raW5nSWQ6IG51bWJlcjtcbiAgICBwcmVmZXJyZWRQYXltZW50TWV0aG9kOiBzdHJpbmc7XG4gICAgaXNXaGF0c0FwcD86IGJvb2xlYW47XG4gICAgY2FuY2VsOiB7XG4gICAgICBzdGF0dXM6IHN0cmluZztcbiAgICAgIHBhY2thZ2VJZHM6IHN0cmluZ1tdO1xuICAgIH07XG4gICAgcmVmdW5kOiB7XG4gICAgICBzdGF0dXM6IHN0cmluZztcbiAgICAgIGJvb2tpbmdTdGF0dXM6IHN0cmluZztcbiAgICAgIGFtb3VudDogbnVtYmVyO1xuICAgICAgY3VycmVuY3k6IHN0cmluZztcbiAgICAgIGJyZWFrZG93bjoge1xuICAgICAgICB3YWxsZXQ6IG51bWJlcjtcbiAgICAgICAgbW9rYWZhOiBudW1iZXI7XG4gICAgICAgIHFpdGFmOiBudW1iZXI7XG4gICAgICAgIGNhcmQ6IG51bWJlcjtcbiAgICAgICAgdGFiYnk6IG51bWJlcjtcbiAgICAgICAgdGFtYXJhOiBudW1iZXI7XG4gICAgICB9O1xuICAgIH07XG4gIH07XG4gIGVycm9yczogYW55O1xufVxuXG5pbnRlcmZhY2UgSUVudHJ5U291cmNlRGV2aWNlQnJhbmQge1xuICBlbnRyeVNvdXJjZTogc3RyaW5nO1xuICBkZXZpY2U6IHN0cmluZztcbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbkVuZHBvaW50c1NlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IGFwaSA9IGluamVjdChBcGlTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSByb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaG90ZWxNYW5hZ2VCb29raW5nU2VydmljZSA9IGluamVjdChcbiAgICBIb3RlbE1hbmFnZUJvb2tpbmdTZXJ2aWNlXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfYWxtYXRhckJvb2tpbmdJZCA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY29uZmlybWF0aW9uTnVtYmVyID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc051c3VrRmxvdyA9IHNpZ25hbDxib29sZWFuPihcbiAgICBlbnZpcm9ubWVudHMuaXNUZW5hbnQgfHwgZmFsc2VcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zZWxlY3RlZFBhY2thZ2VJZHMgPSBzaWduYWw8c3RyaW5nW10+KFtdKTtcblxuICByZWFkb25seSBhbG1hdGFyQm9va2luZ0lkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5fYWxtYXRhckJvb2tpbmdJZCgpKTtcbiAgcmVhZG9ubHkgY29uZmlybWF0aW9uTnVtYmVyID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5fY29uZmlybWF0aW9uTnVtYmVyKCkpO1xuICByZWFkb25seSBpc051c3VrRmxvdyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuX2lzTnVzdWtGbG93KCkpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaW5pdGlhbGl6ZUJvb2tpbmdEYXRhKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVCb29raW5nRGF0YSgpOiB2b2lkIHtcbiAgICB0aGlzLmhvdGVsTWFuYWdlQm9va2luZ1NlcnZpY2Uuc2VsZWN0ZWRIb3RlbEJvb2tpbmdcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKVxuICAgICAgLnN1YnNjcmliZSgoc2VsZWN0ZWRIb3RlbEJvb2tpbmc6IGFueSkgPT4ge1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnU2VsZWN0ZWQgSG90ZWwgQm9va2luZzonLCBzZWxlY3RlZEhvdGVsQm9va2luZyk7XG4gICAgICAgIGlmIChzZWxlY3RlZEhvdGVsQm9va2luZykge1xuICAgICAgICAgIHRoaXMuX2FsbWF0YXJCb29raW5nSWQuc2V0KHNlbGVjdGVkSG90ZWxCb29raW5nLmJvb2tpbmdJZCB8fCAnJyk7XG4gICAgICAgICAgdGhpcy5fY29uZmlybWF0aW9uTnVtYmVyLnNldChzZWxlY3RlZEhvdGVsQm9va2luZy5ib29raW5nSWQgfHwgJycpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIGdldFJlZnVuZERldGFpbHMoXG4gICAgcGFja2FnZUlkczogc3RyaW5nW10gPSBbXVxuICApOiBPYnNlcnZhYmxlPElSZWZ1bmREZXRhaWxzQXBpUmVzcG9uc2U+IHtcbiAgICBjb25zdCBlbmRwb2ludCA9IEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25FbmRwb2ludHNFbnVtLmdldFJlZnVuZERldGFpbHM7XG5cbiAgICBjb25zdCBwYXlsb2FkOiBJUmVmdW5kRGV0YWlsc1JlcXVlc3QgPSB7XG4gICAgICBib29raW5nSWQ6IGAke1xuICAgICAgICB0aGlzLmhvdGVsTWFuYWdlQm9va2luZ1NlcnZpY2Uuc2VsZWN0ZWRIb3RlbEJvb2tpbmcudmFsdWU/LmJvb2tpbmdJZCB8fFxuICAgICAgICAnJ1xuICAgICAgfWAsXG4gICAgICBwcm9kdWN0OiAnaG90ZWxzJyxcbiAgICAgIHBhY2thZ2VJZHM6IFsuLi5uZXcgU2V0KHBhY2thZ2VJZHMpXSAvLyBFbnN1cmUgdW5pcXVlIHBhY2thZ2UgSURzXG4gICAgfTtcblxuICAgIC8vIHJldHVybiBvZih7XG4gICAgLy8gICBkYXRhOiB7XG4gICAgLy8gICAgIGJvb2tpbmdJZDogMTQ0MzY4LFxuICAgIC8vICAgICBjdXJyZW5jeTogJ1NBUicsXG4gICAgLy8gICAgIHN0YXR1czogJ1BhcnRpYWxseSByZWZ1bmRlZCcsXG4gICAgLy8gICAgIG1lc3NhZ2U6ICdSZWZ1bmQgZGV0YWlscyBjYWxjdWxhdGVkIHN1Y2Nlc3NmdWxseScsXG4gICAgLy8gICAgIGZsYWdzOiB7XG4gICAgLy8gICAgICAgcmVmdW5kYWJsZTogdHJ1ZSxcbiAgICAvLyAgICAgICBwYXJ0aWFsOiBmYWxzZSxcbiAgICAvLyAgICAgICBnb2xkZW5HaWZ0OiBmYWxzZVxuICAgIC8vICAgICB9LFxuICAgIC8vICAgICBzZWxlY3Rpb246IHtcbiAgICAvLyAgICAgICBwYWNrYWdlSWRzOiBbJ2YwMzgzOGJkLWVhOGQtNGZlNS1iZmM4LWRkMzFjOWJkZWU5NSddXG4gICAgLy8gICAgIH0sXG4gICAgLy8gICAgIHRvdGFsczoge1xuICAgIC8vICAgICAgIHBhaWQ6IDY4NjYsXG4gICAgLy8gICAgICAgYmVmb3JlQ291cG9uOiA2ODY1LjYxLFxuICAgIC8vICAgICAgIHJvb21zQm9va2VkOiA0LFxuICAgIC8vICAgICAgIGNvdXBvbjogMCxcbiAgICAvLyAgICAgICBnaWZ0czogMCxcbiAgICAvLyAgICAgICBzZXJ2aWNlRmVlOiAwLFxuICAgIC8vICAgICAgIHdhbGxldDogMCxcbiAgICAvLyAgICAgICBjYXJkOiAwLFxuICAgIC8vICAgICAgIHRhYmJ5OiAwLFxuICAgIC8vICAgICAgIHRhbWFyYTogMjIwLFxuICAgIC8vICAgICAgIG1va2FmYTogMCxcbiAgICAvLyAgICAgICBxaXRhZjogMCxcbiAgICAvLyAgICAgICB3YWxhOiAwLFxuICAgIC8vICAgICAgIGhhc3NhZDogMCxcbiAgICAvLyAgICAgICBhbmI6IDAsXG4gICAgLy8gICAgICAgeWdnOiAwXG4gICAgLy8gICAgIH0sXG4gICAgLy8gICAgIHByZXZpb3VzOiBbXG4gICAgLy8gICAgICAge1xuICAgIC8vICAgICAgICAgcGFja2FnZUlkOiAnNWViMzNkNTktMjYwNy00MDU3LTlkMjYtNGY3YmU3NDVmNjdmJyxcbiAgICAvLyAgICAgICAgIHJvb21OYW1lOiAnU3RhbmRhcmQgUm9vbScsXG4gICAgLy8gICAgICAgICBjYW5jZWxsZWRBdDogJzIwMjYtMDktMDJUMTM6NDI6NTQuODQ4WicsXG4gICAgLy8gICAgICAgICBhbW91bnQ6IDI5OTAuNzksXG4gICAgLy8gICAgICAgICBmZWU6IDAsXG4gICAgLy8gICAgICAgICByZWZ1bmRlZDogMjk5MC43OVxuICAgIC8vICAgICAgIH1cbiAgICAvLyAgICAgXSxcbiAgICAvLyAgICAgY3VycmVudDoge1xuICAgIC8vICAgICAgIHJvb21zOiBbXG4gICAgLy8gICAgICAgICB7XG4gICAgLy8gICAgICAgICAgIHBhY2thZ2VJZDogJ2YwMzgzOGJkLWVhOGQtNGZlNS1iZmM4LWRkMzFjOWJkZWU5NScsXG4gICAgLy8gICAgICAgICAgIHJvb21JZDogJzAyMjllNjIyLWE4OWEtNDY5ZC1hZGI4LTg2MTVkZWI5NzFjYScsXG4gICAgLy8gICAgICAgICAgIHJvb21OYW1lOiAnU2NlbmUgUm9vbSBUd2luJyxcbiAgICAvLyAgICAgICAgICAgYmFzaXM6ICdSb29tIG9ubHkgUk8nLFxuICAgIC8vICAgICAgICAgICBwYXg6IHtcbiAgICAvLyAgICAgICAgICAgICBhZHVsdHM6IDIsXG4gICAgLy8gICAgICAgICAgICAgY2hpbGRyZW46IDAsXG4gICAgLy8gICAgICAgICAgICAgdG90YWw6IDJcbiAgICAvLyAgICAgICAgICAgfSxcbiAgICAvLyAgICAgICAgICAgbmlnaHRzOiA0LFxuICAgIC8vICAgICAgICAgICBhbW91bnQ6IDE4ODcuNjEsXG4gICAgLy8gICAgICAgICAgIGZlZTogMCxcbiAgICAvLyAgICAgICAgICAgc2VydmljZUZlZTogNTAsXG4gICAgLy8gICAgICAgICAgIHJlZnVuZDogMTg4Ny42MSxcbiAgICAvLyAgICAgICAgICAgcmVmdW5kYWJsZTogdHJ1ZSxcbiAgICAvLyAgICAgICAgICAgcm91dGU6ICdBVVRPJ1xuICAgIC8vICAgICAgICAgfSxcbiAgICAvLyAgICAgICAgIHtcbiAgICAvLyAgICAgICAgICAgcGFja2FnZUlkOiAnZjAzODM4YmQtZWE4ZC00ZmU1LWJmYzgtZGQzMWM5YmRlZTk1JyxcbiAgICAvLyAgICAgICAgICAgcm9vbUlkOiAnYjhhZWQyNmUtZDkxYS00MjM0LWFlMzctOTRiMmM2MjMyZGJkJyxcbiAgICAvLyAgICAgICAgICAgcm9vbU5hbWU6ICdTY2VuZSBSb29tIFR3aW4nLFxuICAgIC8vICAgICAgICAgICBiYXNpczogJ1Jvb20gb25seSBSTycsXG4gICAgLy8gICAgICAgICAgIHBheDoge1xuICAgIC8vICAgICAgICAgICAgIGFkdWx0czogMixcbiAgICAvLyAgICAgICAgICAgICBjaGlsZHJlbjogMCxcbiAgICAvLyAgICAgICAgICAgICB0b3RhbDogMlxuICAgIC8vICAgICAgICAgICB9LFxuICAgIC8vICAgICAgICAgICBuaWdodHM6IDQsXG4gICAgLy8gICAgICAgICAgIGFtb3VudDogMTg4Ny42LFxuICAgIC8vICAgICAgICAgICBmZWU6IDAsXG4gICAgLy8gICAgICAgICAgIHNlcnZpY2VGZWU6IDUwLFxuICAgIC8vICAgICAgICAgICByZWZ1bmQ6IDE4ODcuNixcbiAgICAvLyAgICAgICAgICAgcmVmdW5kYWJsZTogdHJ1ZSxcbiAgICAvLyAgICAgICAgICAgcm91dGU6ICdBVVRPJ1xuICAgIC8vICAgICAgICAgfVxuICAgIC8vICAgICAgIF0sXG4gICAgLy8gICAgICAgYW1vdW50OiAzNzc1LjIxLFxuICAgIC8vICAgICAgIGZlZTogMCxcbiAgICAvLyAgICAgICBzdXJjaGFyZ2U6IDAsXG4gICAgLy8gICAgICAgcmVmdW5kOiAzNzc1LjIxXG4gICAgLy8gICAgIH0sXG4gICAgLy8gICAgIHBheW91dDoge1xuICAgIC8vICAgICAgIGFscmVhZHlSZWZ1bmRlZDogMjk5MC43OSxcbiAgICAvLyAgICAgICBjdXJyZW50OiAxNjAwLFxuICAgIC8vICAgICAgIGFmdGVyVGhpczogNjc2NixcbiAgICAvLyAgICAgICBmZWVzVG90YWw6IDAsXG4gICAgLy8gICAgICAgd2FsbGV0OiAwLFxuICAgIC8vICAgICAgIGNhcmQ6IDAsXG4gICAgLy8gICAgICAgdGFiYnk6IDAsXG4gICAgLy8gICAgICAgdGFtYXJhOiAyMDAsXG4gICAgLy8gICAgICAgYW13YWw6IDAsXG4gICAgLy8gICAgICAgbWlzOiAwLFxuICAgIC8vICAgICAgIGJucGxNYW51YWw6IDAsXG4gICAgLy8gICAgICAgbG95YWx0eVRvV2FsbGV0OiA2MDAsXG4gICAgLy8gICAgICAgbm90ZTogbnVsbFxuICAgIC8vICAgICB9LFxuICAgIC8vICAgICBzdW1tYXJpZXM6IFtcbiAgICAvLyAgICAgICB7XG4gICAgLy8gICAgICAgICBjb2RlOiAnQ0FSRCcsXG4gICAgLy8gICAgICAgICBsYWJlbDogJ0NhcmQnLFxuICAgIC8vICAgICAgICAgcGFpZDogNjg2NixcbiAgICAvLyAgICAgICAgIHJlZnVuZDogMzc3NS4yMSxcbiAgICAvLyAgICAgICAgIHJlZnVuZGFibGU6IHRydWUsXG4gICAgLy8gICAgICAgICBnYXRld2F5OiAnQ0gnXG4gICAgLy8gICAgICAgfSxcbiAgICAvLyAgICAgICB7XG4gICAgLy8gICAgICAgICBjb2RlOiAnU0VSVklDRV9GRUUnLFxuICAgIC8vICAgICAgICAgbGFiZWw6ICdTZXJ2aWNlIEZlZScsXG4gICAgLy8gICAgICAgICBwYWlkOiAxMDAsXG4gICAgLy8gICAgICAgICByZWZ1bmQ6IDAsXG4gICAgLy8gICAgICAgICByZWZ1bmRhYmxlOiBmYWxzZVxuICAgIC8vICAgICAgIH1cbiAgICAvLyAgICAgXSxcbiAgICAvLyAgICAgZ2lmdHM6IFtdXG4gICAgLy8gICB9LFxuICAgIC8vICAgc3RhdHVzOiAyMDAsXG4gICAgLy8gICBlcnJvcnM6IG51bGxcbiAgICAvLyB9KTtcblxuICAgIHJldHVybiB0aGlzLmFwaVxuICAgICAgLnBvc3Q8SVJlZnVuZERldGFpbHNBcGlSZXNwb25zZT4oe1xuICAgICAgICBlbmRwb2ludCxcbiAgICAgICAgLi4ucGF5bG9hZFxuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT5cbiAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycm9yLCAnRmFpbGVkIHRvIGdldCByZWZ1bmQgZGV0YWlscycpXG4gICAgICAgIClcbiAgICAgICk7XG4gIH1cblxuICBtYXBBcGlSZXNwb25zZVRvUm9vbXMoXG4gICAgZGF0YTogSVJlZnVuZERldGFpbHNEYXRhXG4gICk6IElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUm9vbVtdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRBbGxSb29tcyhkYXRhKTtcbiAgfVxuXG4gIG1hcEFwaVJlc3BvbnNlVG9SZWZ1bmRTdW1tYXJ5KFxuICAgIGRhdGE6IElSZWZ1bmREZXRhaWxzRGF0YVxuICApOiBJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblJlZnVuZFN1bW1hcnkge1xuICAgIHJldHVybiB7XG4gICAgICB0b3RhbFBhaWQ6IGRhdGEudG90YWxzPy5wYWlkIHx8IDAsXG4gICAgICB0b3RhbFJlZnVuZDogZGF0YS5jdXJyZW50Py5yZWZ1bmQgfHwgZGF0YS5jdXJyZW50Py5yZWZ1bmQgfHwgMCxcbiAgICAgIHRvdGFsRmVlczogZGF0YS5jdXJyZW50Py5mZWUgfHwgMCxcbiAgICAgIHJvb21zOiB0aGlzLmdldEFsbFJvb21zKGRhdGEpLFxuICAgICAgcGFja2FnZXM6IHRoaXMuZ2V0QWxsUGFja2FnZXMoZGF0YSksXG4gICAgICBzdW1tYXJpZXM6IGRhdGEuc3VtbWFyaWVzLFxuICAgICAgcGF5b3V0OiBkYXRhLnBheW91dCxcbiAgICAgIHRvdGFsczogZGF0YS50b3RhbHMsXG4gICAgICAvLyBBZGRpdGlvbmFsIGJyZWFrZG93biBmaWVsZHNcbiAgICAgIGNvdXBvbjogZGF0YS50b3RhbHM/LmNvdXBvbiB8fCAwLFxuICAgICAgZ2lmdHNUb3RhbDogZGF0YS50b3RhbHM/LmdpZnRzIHx8IDAsXG4gICAgICBnaWZ0c0RldGFpbHM6IGRhdGEuZ2lmdHMgfHwgW10sXG4gICAgICBzZXJ2aWNlRmVlOiBkYXRhLnRvdGFscz8uc2VydmljZUZlZSB8fCAwLFxuICAgICAgc3VyY2hhcmdlOiBkYXRhLmN1cnJlbnQ/LnN1cmNoYXJnZSB8fCAwLFxuICAgICAgZ29sZGVuR2lmdDogZGF0YS5mbGFncz8uZ29sZGVuR2lmdCB8fCBmYWxzZSxcbiAgICAgIHByZXZpb3VzUm9vbXM6IGRhdGEucHJldmlvdXMgfHwgW11cbiAgICB9O1xuICB9XG5cbiAgZ2V0QWxsUGFja2FnZXMoXG4gICAgZGF0YTogSVJlZnVuZERldGFpbHNEYXRhXG4gICk6IElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUmVmdW5kUGFja2FnZVtdIHtcbiAgICBjb25zdCBwYWNrYWdlczogSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25SZWZ1bmRQYWNrYWdlW10gPSBbXTtcbiAgICBjb25zdCBwYWNrYWdlTWFwID0gbmV3IE1hcDxcbiAgICAgIHN0cmluZyxcbiAgICAgIElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUmVmdW5kUGFja2FnZVxuICAgID4oKTtcblxuICAgIC8vIFByb2Nlc3MgcHJldmlvdXMgKGNhbmNlbGxlZCkgcm9vbXMgLSBncm91cCBieSBwYWNrYWdlSWRcbiAgICBpZiAoZGF0YS5wcmV2aW91cz8ubGVuZ3RoKSB7XG4gICAgICBkYXRhLnByZXZpb3VzLmZvckVhY2goKHJvb206IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBleGlzdGluZ1BrZyA9IHBhY2thZ2VNYXAuZ2V0KHJvb20ucGFja2FnZUlkKTtcbiAgICAgICAgaWYgKGV4aXN0aW5nUGtnKSB7XG4gICAgICAgICAgZXhpc3RpbmdQa2cucm9vbXMucHVzaCh7XG4gICAgICAgICAgICByb29tSWQ6IHJvb20ucm9vbUlkIHx8IHJvb20ucGFja2FnZUlkLFxuICAgICAgICAgICAgcm9vbU5hbWU6IHJvb20ucm9vbU5hbWUsXG4gICAgICAgICAgICBiYXNpczogcm9vbS5iYXNpcyxcbiAgICAgICAgICAgIG5pZ2h0czogcm9vbS5uaWdodHNcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBleGlzdGluZ1BrZy5hbW91bnQgKz0gcm9vbS5hbW91bnQgfHwgMDtcbiAgICAgICAgICBleGlzdGluZ1BrZy5mZWUgKz0gcm9vbS5mZWUgfHwgMDtcbiAgICAgICAgICBleGlzdGluZ1BrZy5yZWZ1bmQgKz0gcm9vbS5yZWZ1bmRlZCB8fCAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhY2thZ2VNYXAuc2V0KHJvb20ucGFja2FnZUlkLCB7XG4gICAgICAgICAgICBwYWNrYWdlSWQ6IHJvb20ucGFja2FnZUlkLFxuICAgICAgICAgICAgcGFja2FnZU5hbWU6IHJvb20ucm9vbU5hbWUsXG4gICAgICAgICAgICByb29tczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcm9vbUlkOiByb29tLnJvb21JZCB8fCByb29tLnBhY2thZ2VJZCxcbiAgICAgICAgICAgICAgICByb29tTmFtZTogcm9vbS5yb29tTmFtZSxcbiAgICAgICAgICAgICAgICBiYXNpczogcm9vbS5iYXNpcyxcbiAgICAgICAgICAgICAgICBuaWdodHM6IHJvb20ubmlnaHRzXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBhbW91bnQ6IHJvb20uYW1vdW50IHx8IDAsXG4gICAgICAgICAgICBmZWU6IHJvb20uZmVlIHx8IDAsXG4gICAgICAgICAgICBzZXJ2aWNlRmVlOiAwLFxuICAgICAgICAgICAgcmVmdW5kOiByb29tLnJlZnVuZGVkIHx8IDAsXG4gICAgICAgICAgICByZWZ1bmRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGNhbmNlbGxlZEJlZm9yZTogdHJ1ZSxcbiAgICAgICAgICAgIGNhbmNlbGxhdGlvbkRhdGU6IHJvb20uY2FuY2VsbGVkQXRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gUHJvY2VzcyBjdXJyZW50IHJvb21zIC0gZ3JvdXAgYnkgcGFja2FnZUlkXG4gICAgaWYgKGRhdGEuY3VycmVudD8ucm9vbXM/Lmxlbmd0aCkge1xuICAgICAgZGF0YS5jdXJyZW50LnJvb21zLmZvckVhY2goKHJvb206IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBleGlzdGluZ1BrZyA9IHBhY2thZ2VNYXAuZ2V0KHJvb20ucGFja2FnZUlkKTtcbiAgICAgICAgaWYgKGV4aXN0aW5nUGtnICYmICFleGlzdGluZ1BrZy5jYW5jZWxsZWRCZWZvcmUpIHtcbiAgICAgICAgICBleGlzdGluZ1BrZy5yb29tcy5wdXNoKHtcbiAgICAgICAgICAgIHJvb21JZDogcm9vbS5yb29tSWQgfHwgcm9vbS5wYWNrYWdlSWQsXG4gICAgICAgICAgICByb29tTmFtZTogcm9vbS5yb29tTmFtZSxcbiAgICAgICAgICAgIGJhc2lzOiByb29tLmJhc2lzLFxuICAgICAgICAgICAgbmlnaHRzOiByb29tLm5pZ2h0cyxcbiAgICAgICAgICAgIHBheDogcm9vbS5wYXgsXG4gICAgICAgICAgICBhZHVsdHM6IHJvb20ucGF4Py5hZHVsdHMsXG4gICAgICAgICAgICBjaGlsZHJlbjogcm9vbS5wYXg/LmNoaWxkcmVuXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZXhpc3RpbmdQa2cuYW1vdW50ICs9IHJvb20uYW1vdW50IHx8IDA7XG4gICAgICAgICAgZXhpc3RpbmdQa2cuZmVlICs9IHJvb20uZmVlIHx8IDA7XG4gICAgICAgICAgZXhpc3RpbmdQa2cuc2VydmljZUZlZSArPSByb29tLnNlcnZpY2VGZWUgfHwgMDtcbiAgICAgICAgICBleGlzdGluZ1BrZy5yZWZ1bmQgKz0gcm9vbS5yZWZ1bmQgfHwgMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYWNrYWdlTWFwLnNldChyb29tLnBhY2thZ2VJZCwge1xuICAgICAgICAgICAgcGFja2FnZUlkOiByb29tLnBhY2thZ2VJZCxcbiAgICAgICAgICAgIHBhY2thZ2VOYW1lOiByb29tLnJvb21OYW1lLFxuICAgICAgICAgICAgcm9vbXM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJvb21JZDogcm9vbS5yb29tSWQgfHwgcm9vbS5wYWNrYWdlSWQsXG4gICAgICAgICAgICAgICAgcm9vbU5hbWU6IHJvb20ucm9vbU5hbWUsXG4gICAgICAgICAgICAgICAgYmFzaXM6IHJvb20uYmFzaXMsXG4gICAgICAgICAgICAgICAgbmlnaHRzOiByb29tLm5pZ2h0cyxcbiAgICAgICAgICAgICAgICBwYXg6IHJvb20ucGF4LFxuICAgICAgICAgICAgICAgIGFkdWx0czogcm9vbS5wYXg/LmFkdWx0cyxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogcm9vbS5wYXg/LmNoaWxkcmVuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBhbW91bnQ6IHJvb20uYW1vdW50IHx8IDAsXG4gICAgICAgICAgICBmZWU6IHJvb20uZmVlIHx8IDAsXG4gICAgICAgICAgICBzZXJ2aWNlRmVlOiByb29tLnNlcnZpY2VGZWUgfHwgMCxcbiAgICAgICAgICAgIHJlZnVuZDogcm9vbS5yZWZ1bmQgfHwgMCxcbiAgICAgICAgICAgIHJlZnVuZGFibGU6IHJvb20ucmVmdW5kYWJsZSxcbiAgICAgICAgICAgIHJvdXRlOiByb29tLnJvdXRlLFxuICAgICAgICAgICAgY2FuY2VsbGVkQmVmb3JlOiBmYWxzZSxcbiAgICAgICAgICAgIGNhbmNlbGxhdGlvbkRhdGU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBwYWNrYWdlTWFwLmZvckVhY2goKHBrZykgPT4gcGFja2FnZXMucHVzaChwa2cpKTtcbiAgICByZXR1cm4gcGFja2FnZXM7XG4gIH1cblxuICBnZXRBbGxSb29tcyhkYXRhOiBJUmVmdW5kRGV0YWlsc0RhdGEpOiBJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblJvb21bXSB7XG4gICAgY29uc3QgYWxsUm9vbXM6IElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUm9vbVtdID0gW107XG5cbiAgICBpZiAoZGF0YS5wcmV2aW91cz8ubGVuZ3RoKSB7XG4gICAgICBkYXRhLnByZXZpb3VzLmZvckVhY2goKHJvb20pID0+IHtcbiAgICAgICAgYWxsUm9vbXMucHVzaCh7XG4gICAgICAgICAgcGFja2FnZUlkOiByb29tLnBhY2thZ2VJZCxcbiAgICAgICAgICByb29tSWQ6IHJvb20/LnJvb21JZCxcbiAgICAgICAgICByb29tTmFtZTogcm9vbS5yb29tTmFtZSxcbiAgICAgICAgICBpc1JlZnVuZGFibGU6IGZhbHNlLFxuICAgICAgICAgIGlzU2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgIGNhbmNlbGxlZEJlZm9yZTogdHJ1ZSxcbiAgICAgICAgICByb29tQW1vdW50OiByb29tLmFtb3VudCxcbiAgICAgICAgICBjYW5jZWxsYXRpb25GZWU6IHJvb20uZmVlLFxuICAgICAgICAgIHJlZnVuZEFtb3VudDogcm9vbS5yZWZ1bmRlZCxcbiAgICAgICAgICBjdXJyZW50Q2FuY2VsbGF0aW9uOiBmYWxzZSxcbiAgICAgICAgICBjYW5jZWxsYXRpb25EYXRlOiByb29tLmNhbmNlbGxlZEF0LFxuICAgICAgICAgIG5pZ2h0czogcm9vbS5uaWdodHMgPz8gMVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChkYXRhLmN1cnJlbnQ/LnJvb21zPy5sZW5ndGgpIHtcbiAgICAgIGRhdGEuY3VycmVudC5yb29tcy5mb3JFYWNoKChyb29tKSA9PiB7XG4gICAgICAgIGFsbFJvb21zLnB1c2goe1xuICAgICAgICAgIHBhY2thZ2VJZDogcm9vbS5wYWNrYWdlSWQsXG4gICAgICAgICAgcm9vbUlkOiByb29tPy5yb29tSWQsXG4gICAgICAgICAgcm9vbU5hbWU6IHJvb20ucm9vbU5hbWUsXG4gICAgICAgICAgaXNSZWZ1bmRhYmxlOiByb29tLnJlZnVuZGFibGUsXG4gICAgICAgICAgaXNTZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgcm9vbUFtb3VudDogcm9vbS5hbW91bnQsXG4gICAgICAgICAgY2FuY2VsbGF0aW9uRmVlOiByb29tLmZlZSxcbiAgICAgICAgICBjYW5jZWxsZWRCZWZvcmU6IGZhbHNlLFxuICAgICAgICAgIHJlZnVuZEFtb3VudDogcm9vbS5yZWZ1bmQsXG4gICAgICAgICAgcm91dGU6IHJvb20ucm91dGUsXG4gICAgICAgICAgY3VycmVudENhbmNlbGxhdGlvbjogdHJ1ZSxcbiAgICAgICAgICBjYW5jZWxsYXRpb25EYXRlOiBgJHtuZXcgRGF0ZSgpfWAsXG4gICAgICAgICAgbmlnaHRzOiByb29tLm5pZ2h0cyA/PyAxXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFsbFJvb21zO1xuICB9XG5cbiAgcHJvY2Vzc0F1dG9DYW5jZWxsYXRpb24oXG4gICAgcGFja2FnZUlkczogc3RyaW5nW10sXG4gICAgcmVmdW5kT3B0aW9uID0gJ29yaWdpbmFsUGF5bWVudE1ldGhvZCdcbiAgKTogT2JzZXJ2YWJsZTxJQXV0b0NhbmNlbGxhdGlvblByb2Nlc3NSZXNwb25zZT4ge1xuICAgIGNvbnN0IGVuZHBvaW50ID0gXG4gICAgICAgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbkVuZHBvaW50c0VudW0ucHJvY2Vzc0F1dG9DYW5jZWxsYXRpb247XG5cbiAgICBjb25zdCB1bmlxdWVQYWNrYWdlSWRzID0gWy4uLm5ldyBTZXQocGFja2FnZUlkcyldOyAvLyBFbnN1cmUgdW5pcXVlIHBhY2thZ2UgSURzXG4gICAgY29uc3QgcGF5bG9hZDogSVByb2Nlc3NDYW5jZWxsYXRpb25SZXF1ZXN0ID0ge1xuICAgICAgYm9va2luZ0lkOiBgJHtcbiAgICAgICAgdGhpcy5ob3RlbE1hbmFnZUJvb2tpbmdTZXJ2aWNlLnNlbGVjdGVkSG90ZWxCb29raW5nLnZhbHVlPy5ib29raW5nSWQgfHxcbiAgICAgICAgJydcbiAgICAgIH1gLFxuICAgICAgcHJvZHVjdDogJ2hvdGVscycsXG4gICAgICBwYWNrYWdlSWRzOiB1bmlxdWVQYWNrYWdlSWRzLFxuICAgICAgcHJlZmVycmVkUGF5bWVudE1ldGhvZDogcmVmdW5kT3B0aW9uXG4gICAgfTtcblxuICAgIHRoaXMuX3NlbGVjdGVkUGFja2FnZUlkcy5zZXQodW5pcXVlUGFja2FnZUlkcyk7XG5cbiAgICAvLyByZXR1cm4gb2Yoe1xuICAgIC8vICAgZGF0YToge1xuICAgIC8vICAgICBlcnJvcjogJzEnLFxuICAgIC8vICAgICBtZXNzYWdlOlxuICAgIC8vICAgICAgICdDYW5jZWwgcmVxdWVzdGVkIOKAlCBzdXBwbGllciBjYW5jZWxsYXRpb24gZmFpbGVkOyB0aWNrZXQgY3JlYXRlZCcsXG4gICAgLy8gICAgIGJvb2tpbmdJZDogMTQ0MzY4LFxuICAgIC8vICAgICBwcmVmZXJyZWRQYXltZW50TWV0aG9kOiAnd2FsbGV0JyxcbiAgICAvLyAgICAgY2FuY2VsOiB7XG4gICAgLy8gICAgICAgc3RhdHVzOiAnZmFpbGVkJyxcbiAgICAvLyAgICAgICBwYWNrYWdlSWRzOiBbJ2YwMzgzOGJkLWVhOGQtNGZlNS1iZmM4LWRkMzFjOWJkZWU5NSddLFxuICAgIC8vICAgICB9LFxuICAgIC8vICAgICByZWZ1bmQ6IHtcbiAgICAvLyAgICAgICBzdGF0dXM6ICdza2lwcGVkJyxcbiAgICAvLyAgICAgICBib29raW5nU3RhdHVzOiAnQ2FuY2VsbGVkJyxcbiAgICAvLyAgICAgICBhbW91bnQ6IDEwNTAsXG4gICAgLy8gICAgICAgY3VycmVuY3k6ICdTQVInLFxuICAgIC8vICAgICAgIGJyZWFrZG93bjoge1xuICAgIC8vICAgICAgICAgd2FsbGV0OiA3NTAsXG4gICAgLy8gICAgICAgICBtb2thZmE6IDIwMCxcbiAgICAvLyAgICAgICAgIHFpdGFmOiAxMDAsXG4gICAgLy8gICAgICAgICBjYXJkOiAwLFxuICAgIC8vICAgICAgICAgdGFiYnk6IDAsXG4gICAgLy8gICAgICAgICB0YW1hcmE6IDAsXG4gICAgLy8gICAgICAgfSxcbiAgICAvLyAgICAgfSxcbiAgICAvLyAgIH0sXG4gICAgLy8gICBzdGF0dXM6IDIwMCxcbiAgICAvLyAgIGVycm9yczogbnVsbCxcbiAgICAvLyB9KTtcblxuICAgIHJldHVybiB0aGlzLmFwaVxuICAgICAgLnBvc3Q8SUF1dG9DYW5jZWxsYXRpb25Qcm9jZXNzUmVzcG9uc2U+KHtcbiAgICAgICAgZW5kcG9pbnQsXG4gICAgICAgIC4uLnBheWxvYWRcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHRoaXMuX3NlbGVjdGVkUGFja2FnZUlkcy5zZXQoW10pO1xuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PlxuICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyb3IsICdGYWlsZWQgdG8gcHJvY2VzcyBjYW5jZWxsYXRpb24nKVxuICAgICAgICApXG4gICAgICApO1xuICB9XG5cbiAgcHJvY2Vzc05vblJlZnVuZGFibGVDYW5jZWxsYXRpb24oXG4gICAgcGFja2FnZUlkOiBzdHJpbmcsXG4gICAgYXR0YWNobWVudFVybDogc3RyaW5nLFxuICAgIGxhbmd1YWdlID0gJ2VuJ1xuICApOiBPYnNlcnZhYmxlPElBdXRvQ2FuY2VsbGF0aW9uUHJvY2Vzc1Jlc3BvbnNlPiB7XG4gICAgY29uc3QgZW5kcG9pbnQgPVxuICAgICAgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbkVuZHBvaW50c0VudW0ucHJvY2Vzc0F1dG9DYW5jZWxsYXRpb247XG5cbiAgICBjb25zdCBwYXlsb2FkOiBJUHJvY2Vzc05vblJlZnVuZGFibGVDYW5jZWxsYXRpb25SZXF1ZXN0ID0ge1xuICAgICAgYm9va2luZ0lkOiBgJHtcbiAgICAgICAgdGhpcy5ob3RlbE1hbmFnZUJvb2tpbmdTZXJ2aWNlLnNlbGVjdGVkSG90ZWxCb29raW5nLnZhbHVlPy5ib29raW5nSWQgfHxcbiAgICAgICAgJydcbiAgICAgIH1gLFxuICAgICAgcHJvZHVjdDogJ2hvdGVscycsXG4gICAgICBwYWNrYWdlSWRzOiBbcGFja2FnZUlkXSxcbiAgICAgIHByZWZlcnJlZFBheW1lbnRNZXRob2Q6ICdvcmlnaW5hbFBheW1lbnRNZXRob2QnLFxuICAgICAgcHJvY2Vzc2VkTW9kZTogJ2F1dG8nLFxuICAgICAgbGFuZ3VhZ2UsXG4gICAgICBhdHRhY2htZW50VXJsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmFwaVxuICAgICAgLnBvc3Q8SUF1dG9DYW5jZWxsYXRpb25Qcm9jZXNzUmVzcG9uc2U+KHtcbiAgICAgICAgZW5kcG9pbnQsXG4gICAgICAgIC4uLnBheWxvYWRcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+XG4gICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihcbiAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgJ0ZhaWxlZCB0byBwcm9jZXNzIG5vbi1yZWZ1bmRhYmxlIGNhbmNlbGxhdGlvbidcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICk7XG4gIH1cblxuICBjYWxjdWxhdGVMb2NhbFJlZnVuZFN1bW1hcnkoXG4gICAgcm9vbXM6IElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUm9vbVtdXG4gICk6IElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUmVmdW5kU3VtbWFyeSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRSb29tcyA9IHJvb21zLmZpbHRlcigocm9vbSkgPT4gcm9vbS5pc1NlbGVjdGVkKTtcbiAgICBjb25zdCB0b3RhbFBhaWQgPSByb29tcy5yZWR1Y2UoKHN1bSwgcm9vbSkgPT4gc3VtICsgcm9vbS5yb29tQW1vdW50LCAwKTtcbiAgICBjb25zdCB0b3RhbFJlZnVuZCA9IHNlbGVjdGVkUm9vbXMucmVkdWNlKFxuICAgICAgKHN1bSwgcm9vbSkgPT4gc3VtICsgcm9vbS5yZWZ1bmRBbW91bnQsXG4gICAgICAwXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICB0b3RhbFBhaWQsXG4gICAgICB0b3RhbFJlZnVuZCxcbiAgICAgIHJvb21zOiBzZWxlY3RlZFJvb21zLm1hcCgocm9vbSkgPT4gKHtcbiAgICAgICAgLi4ucm9vbSxcbiAgICAgICAgY3VycmVudENhbmNlbGxhdGlvbjogdHJ1ZSxcbiAgICAgICAgY2FuY2VsbGF0aW9uRGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gICAgICB9KSlcbiAgICB9O1xuICB9XG5cbiAgZ2V0U2VsZWN0ZWRQYWNrYWdlSWRzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRQYWNrYWdlSWRzKCk7XG4gIH1cblxuICBjbGVhclNlbGVjdGVkUGFja2FnZUlkcygpOiB2b2lkIHtcbiAgICB0aGlzLl9zZWxlY3RlZFBhY2thZ2VJZHMuc2V0KFtdKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RW50cnlTb3VyY2VEZXZpY2VCcmFuZCgpOiBJRW50cnlTb3VyY2VEZXZpY2VCcmFuZCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVudHJ5U291cmNlOiB0aGlzLmdldEVudHJ5U291cmNlKCksXG4gICAgICBkZXZpY2U6IHRoaXMuZ2V0RGV2aWNlKClcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFbnRyeVNvdXJjZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiByZXNvbHZlTXlUcmlwc1ZpZXdlZEVudHJ5U291cmNlRnJvbVF1ZXJ5UGFyYW1zKFxuICAgICAgdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldERldmljZSgpOiBzdHJpbmcge1xuICAgIGxldCBkZXZpY2UgPSAnd2ViJztcbiAgICBpZiAodGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtc1snbW9iaWxlQXV0aCddKSB7XG4gICAgICBkZXZpY2UgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zWydkZXZpY2UnXSB8fCAnbW9iaWxlJztcbiAgICB9XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2RldmljZVR5cGUnLCBkZXZpY2UpO1xuICAgIHJldHVybiBkZXZpY2U7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUVycm9yKGVycm9yOiBhbnksIG1lc3NhZ2U6IHN0cmluZyk6IE9ic2VydmFibGU8bmV2ZXI+IHtcbiAgICAvLyBjb25zb2xlLmxvZyhtZXNzYWdlLCBlcnJvcik7XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID1cbiAgICAgIGVycm9yPy5lcnJvcj8ubWVzc2FnZSB8fCBlcnJvcj8ubWVzc2FnZSB8fCBtZXNzYWdlO1xuICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpKTtcbiAgfVxufVxuIl19
|
|
457
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1lbmRwb2ludHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LWJvb2tpbmctZGFzaGJvYXJkL3NyYy9saWIvY29tcG9uZW50cy9ob3RlbC1jYW5jZWwvc2VydmljZXMvYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1lbmRwb2ludHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JFLE9BQU8sRUFBYyxHQUFHLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBTSxNQUFNLE1BQU0sQ0FBQztBQUNuRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDbEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDeEUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0seUVBQXlFLENBQUM7QUFDcEgsT0FBTyxFQUFFLHlDQUF5QyxFQUFFLE1BQU0seURBQXlELENBQUM7QUFRcEgsT0FBTyxFQUFFLDhDQUE4QyxFQUFFLE1BQU0scURBQXFELENBQUM7QUFDckgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0FBK0RoRSxNQUFNLE9BQU8sNENBQTRDO0lBb0J2RDtRQW5CaUIsUUFBRyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN6QixZQUFPLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUNyQyxVQUFLLEdBQUcs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QyxXQUFXLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUNsRCxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLFFBQVEsQ0FBQztRQUNqRSxDQUFDO1FBQ0QsWUFBWSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDM0MsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVPLFdBQVcsQ0FBQyxLQUFVLEVBQUUsT0FBZTtRQUM3QywrQkFBK0I7UUFDL0IsTUFBTSxZQUFZLEdBQ2hCLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxJQUFJLEtBQUssRUFBRSxPQUFPLElBQUksT0FBTyxDQUFDO1FBQ3JELE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDbkQsQ0FBQzsrR0EvZ0JVLDRDQUE0QzttSEFBNUMsNENBQTRDLGNBRjNDLE1BQU07OzRGQUVQLDRDQUE0QztrQkFIeEQsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QsIHNpZ25hbCwgY29tcHV0ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG1hcCwgY2F0Y2hFcnJvciwgdGhyb3dFcnJvciwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvc2VydmljZXMvYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgU0JEX0NPTkZJRyB9IGZyb20gJy4uLy4uLy4uL2NvbmZpZy9kYXNoYm9hcmQuY29uZmlnJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGVudmlyb25tZW50cyB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgSG90ZWxNYW5hZ2VCb29raW5nU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9ob3RlbC1tYW5hZ2UtYm9va2luZy9ob3RlbC1tYW5hZ2UtYm9va2luZy5zZXJ2aWNlJztcbmltcG9ydCB7IEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25FbmRwb2ludHNFbnVtIH0gZnJvbSAnLi4vZW51bXMvYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1lbmRwb2ludHMuZW51bSc7XG5pbXBvcnQge1xuICBJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblJvb20sXG4gIElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUmVmdW5kU3VtbWFyeSxcbiAgSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25SZWZ1bmRQYWNrYWdlLFxuICBJUmVmdW5kRGV0YWlsc0FwaVJlc3BvbnNlLFxuICBJUmVmdW5kRGV0YWlsc0RhdGFcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9pLWFsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IHJlc29sdmVNeVRyaXBzVmlld2VkRW50cnlTb3VyY2VGcm9tUXVlcnlQYXJhbXMgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvc2VydmljZXMvd2ViZW5nYWdlLXRyYWNraW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElSZWZ1bmREZXRhaWxzUmVxdWVzdCB7XG4gIGJvb2tpbmdJZDogc3RyaW5nO1xuICBwcm9kdWN0OiAnaG90ZWxzJztcbiAgcGFja2FnZUlkczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVByb2Nlc3NDYW5jZWxsYXRpb25SZXF1ZXN0IHtcbiAgYm9va2luZ0lkOiBzdHJpbmc7XG4gIHByb2R1Y3Q6ICdob3RlbHMnO1xuICBwYWNrYWdlSWRzOiBzdHJpbmdbXTtcbiAgcHJlZmVycmVkUGF5bWVudE1ldGhvZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUHJvY2Vzc05vblJlZnVuZGFibGVDYW5jZWxsYXRpb25SZXF1ZXN0IHtcbiAgYm9va2luZ0lkOiBzdHJpbmc7XG4gIHByb2R1Y3Q6ICdob3RlbHMnO1xuICBwYWNrYWdlSWRzOiBzdHJpbmdbXTtcbiAgcHJlZmVycmVkUGF5bWVudE1ldGhvZDogc3RyaW5nO1xuICBwcm9jZXNzZWRNb2RlOiAnYXV0byc7XG4gIGxhbmd1YWdlOiBzdHJpbmc7XG4gIGF0dGFjaG1lbnRVcmw6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQXV0b0NhbmNlbGxhdGlvblByb2Nlc3NSZXNwb25zZSB7XG4gIHN0YXR1czogbnVtYmVyO1xuICBkYXRhOiB7XG4gICAgZXJyb3I6IHN0cmluZztcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG4gICAgYm9va2luZ0lkOiBudW1iZXI7XG4gICAgcHJlZmVycmVkUGF5bWVudE1ldGhvZDogc3RyaW5nO1xuICAgIGlzV2hhdHNBcHA/OiBib29sZWFuO1xuICAgIGNhbmNlbDoge1xuICAgICAgc3RhdHVzOiBzdHJpbmc7XG4gICAgICBwYWNrYWdlSWRzOiBzdHJpbmdbXTtcbiAgICB9O1xuICAgIHJlZnVuZDoge1xuICAgICAgc3RhdHVzOiBzdHJpbmc7XG4gICAgICBib29raW5nU3RhdHVzOiBzdHJpbmc7XG4gICAgICBhbW91bnQ6IG51bWJlcjtcbiAgICAgIGN1cnJlbmN5OiBzdHJpbmc7XG4gICAgICBicmVha2Rvd246IHtcbiAgICAgICAgd2FsbGV0OiBudW1iZXI7XG4gICAgICAgIG1va2FmYTogbnVtYmVyO1xuICAgICAgICBxaXRhZjogbnVtYmVyO1xuICAgICAgICBjYXJkOiBudW1iZXI7XG4gICAgICAgIHRhYmJ5OiBudW1iZXI7XG4gICAgICAgIHRhbWFyYTogbnVtYmVyO1xuICAgICAgfTtcbiAgICB9O1xuICB9O1xuICBlcnJvcnM6IGFueTtcbn1cblxuaW50ZXJmYWNlIElFbnRyeVNvdXJjZURldmljZUJyYW5kIHtcbiAgZW50cnlTb3VyY2U6IHN0cmluZztcbiAgZGV2aWNlOiBzdHJpbmc7XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25FbmRwb2ludHNTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBhcGkgPSBpbmplY3QoQXBpU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXBpQmFzZSA9IGluamVjdChTQkRfQ09ORklHKS5hcGlCYXNlO1xuICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBob3RlbE1hbmFnZUJvb2tpbmdTZXJ2aWNlID0gaW5qZWN0KFxuICAgIEhvdGVsTWFuYWdlQm9va2luZ1NlcnZpY2VcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9hbG1hdGFyQm9va2luZ0lkID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jb25maXJtYXRpb25OdW1iZXIgPSBzaWduYWw8c3RyaW5nPignJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzTnVzdWtGbG93ID0gc2lnbmFsPGJvb2xlYW4+KFxuICAgIGVudmlyb25tZW50cy5pc1RlbmFudCB8fCBmYWxzZVxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3NlbGVjdGVkUGFja2FnZUlkcyA9IHNpZ25hbDxzdHJpbmdbXT4oW10pO1xuXG4gIHJlYWRvbmx5IGFsbWF0YXJCb29raW5nSWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLl9hbG1hdGFyQm9va2luZ0lkKCkpO1xuICByZWFkb25seSBjb25maXJtYXRpb25OdW1iZXIgPSBjb21wdXRlZCgoKSA9PiB0aGlzLl9jb25maXJtYXRpb25OdW1iZXIoKSk7XG4gIHJlYWRvbmx5IGlzTnVzdWtGbG93ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5faXNOdXN1a0Zsb3coKSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5pbml0aWFsaXplQm9va2luZ0RhdGEoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUJvb2tpbmdEYXRhKCk6IHZvaWQge1xuICAgIHRoaXMuaG90ZWxNYW5hZ2VCb29raW5nU2VydmljZS5zZWxlY3RlZEhvdGVsQm9va2luZ1xuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAuc3Vic2NyaWJlKChzZWxlY3RlZEhvdGVsQm9va2luZzogYW55KSA9PiB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdTZWxlY3RlZCBIb3RlbCBCb29raW5nOicsIHNlbGVjdGVkSG90ZWxCb29raW5nKTtcbiAgICAgICAgaWYgKHNlbGVjdGVkSG90ZWxCb29raW5nKSB7XG4gICAgICAgICAgdGhpcy5fYWxtYXRhckJvb2tpbmdJZC5zZXQoc2VsZWN0ZWRIb3RlbEJvb2tpbmcuYm9va2luZ0lkIHx8ICcnKTtcbiAgICAgICAgICB0aGlzLl9jb25maXJtYXRpb25OdW1iZXIuc2V0KHNlbGVjdGVkSG90ZWxCb29raW5nLmJvb2tpbmdJZCB8fCAnJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZ1bGwgVVJMIG9mIGFuIGVuZHBvaW50IGZyb20gdGhlIGVudW0uIFRoZSBlbnVtIHBhdGhzIHN0YXJ0IHdpdGggYC9hcGkvYCwgd2hpY2ggaXMgdGhlIGRlZmF1bHQgYGFwaUJhc2VgOyBhIGhvc3RcbiAgICogdGhhdCBzZXJ2ZXMgdGhlIEFQSSBzb21ld2hlcmUgZWxzZSAoSGVsaXg6IGl0cyBvd24gQVBJIG9yaWdpbikgc2V0cyBgYXBpQmFzZWAsIHNvIHRoYXQgcGFydCBpcyBzd2FwcGVkIGZvciBpdC5cbiAgICovXG4gIHJlc29sdmVFbmRwb2ludChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLmFwaUJhc2UucmVwbGFjZSgvXFwvKyQvLCAnJyl9LyR7cGF0aC5yZXBsYWNlKC9eXFwvP2FwaVxcLy8sICcnKX1gO1xuICB9XG5cbiAgZ2V0UmVmdW5kRGV0YWlscyhcbiAgICBwYWNrYWdlSWRzOiBzdHJpbmdbXSA9IFtdXG4gICk6IE9ic2VydmFibGU8SVJlZnVuZERldGFpbHNBcGlSZXNwb25zZT4ge1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5yZXNvbHZlRW5kcG9pbnQoXG4gICAgICBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uRW5kcG9pbnRzRW51bS5nZXRSZWZ1bmREZXRhaWxzXG4gICAgKTtcblxuICAgIGNvbnN0IHBheWxvYWQ6IElSZWZ1bmREZXRhaWxzUmVxdWVzdCA9IHtcbiAgICAgIGJvb2tpbmdJZDogYCR7XG4gICAgICAgIHRoaXMuaG90ZWxNYW5hZ2VCb29raW5nU2VydmljZS5zZWxlY3RlZEhvdGVsQm9va2luZy52YWx1ZT8uYm9va2luZ0lkIHx8XG4gICAgICAgICcnXG4gICAgICB9YCxcbiAgICAgIHByb2R1Y3Q6ICdob3RlbHMnLFxuICAgICAgcGFja2FnZUlkczogWy4uLm5ldyBTZXQocGFja2FnZUlkcyldIC8vIEVuc3VyZSB1bmlxdWUgcGFja2FnZSBJRHNcbiAgICB9O1xuXG4gICAgLy8gcmV0dXJuIG9mKHtcbiAgICAvLyAgIGRhdGE6IHtcbiAgICAvLyAgICAgYm9va2luZ0lkOiAxNDQzNjgsXG4gICAgLy8gICAgIGN1cnJlbmN5OiAnU0FSJyxcbiAgICAvLyAgICAgc3RhdHVzOiAnUGFydGlhbGx5IHJlZnVuZGVkJyxcbiAgICAvLyAgICAgbWVzc2FnZTogJ1JlZnVuZCBkZXRhaWxzIGNhbGN1bGF0ZWQgc3VjY2Vzc2Z1bGx5JyxcbiAgICAvLyAgICAgZmxhZ3M6IHtcbiAgICAvLyAgICAgICByZWZ1bmRhYmxlOiB0cnVlLFxuICAgIC8vICAgICAgIHBhcnRpYWw6IGZhbHNlLFxuICAgIC8vICAgICAgIGdvbGRlbkdpZnQ6IGZhbHNlXG4gICAgLy8gICAgIH0sXG4gICAgLy8gICAgIHNlbGVjdGlvbjoge1xuICAgIC8vICAgICAgIHBhY2thZ2VJZHM6IFsnZjAzODM4YmQtZWE4ZC00ZmU1LWJmYzgtZGQzMWM5YmRlZTk1J11cbiAgICAvLyAgICAgfSxcbiAgICAvLyAgICAgdG90YWxzOiB7XG4gICAgLy8gICAgICAgcGFpZDogNjg2NixcbiAgICAvLyAgICAgICBiZWZvcmVDb3Vwb246IDY4NjUuNjEsXG4gICAgLy8gICAgICAgcm9vbXNCb29rZWQ6IDQsXG4gICAgLy8gICAgICAgY291cG9uOiAwLFxuICAgIC8vICAgICAgIGdpZnRzOiAwLFxuICAgIC8vICAgICAgIHNlcnZpY2VGZWU6IDAsXG4gICAgLy8gICAgICAgd2FsbGV0OiAwLFxuICAgIC8vICAgICAgIGNhcmQ6IDAsXG4gICAgLy8gICAgICAgdGFiYnk6IDAsXG4gICAgLy8gICAgICAgdGFtYXJhOiAyMjAsXG4gICAgLy8gICAgICAgbW9rYWZhOiAwLFxuICAgIC8vICAgICAgIHFpdGFmOiAwLFxuICAgIC8vICAgICAgIHdhbGE6IDAsXG4gICAgLy8gICAgICAgaGFzc2FkOiAwLFxuICAgIC8vICAgICAgIGFuYjogMCxcbiAgICAvLyAgICAgICB5Z2c6IDBcbiAgICAvLyAgICAgfSxcbiAgICAvLyAgICAgcHJldmlvdXM6IFtcbiAgICAvLyAgICAgICB7XG4gICAgLy8gICAgICAgICBwYWNrYWdlSWQ6ICc1ZWIzM2Q1OS0yNjA3LTQwNTctOWQyNi00ZjdiZTc0NWY2N2YnLFxuICAgIC8vICAgICAgICAgcm9vbU5hbWU6ICdTdGFuZGFyZCBSb29tJyxcbiAgICAvLyAgICAgICAgIGNhbmNlbGxlZEF0OiAnMjAyNi0wOS0wMlQxMzo0Mjo1NC44NDhaJyxcbiAgICAvLyAgICAgICAgIGFtb3VudDogMjk5MC43OSxcbiAgICAvLyAgICAgICAgIGZlZTogMCxcbiAgICAvLyAgICAgICAgIHJlZnVuZGVkOiAyOTkwLjc5XG4gICAgLy8gICAgICAgfVxuICAgIC8vICAgICBdLFxuICAgIC8vICAgICBjdXJyZW50OiB7XG4gICAgLy8gICAgICAgcm9vbXM6IFtcbiAgICAvLyAgICAgICAgIHtcbiAgICAvLyAgICAgICAgICAgcGFja2FnZUlkOiAnZjAzODM4YmQtZWE4ZC00ZmU1LWJmYzgtZGQzMWM5YmRlZTk1JyxcbiAgICAvLyAgICAgICAgICAgcm9vbUlkOiAnMDIyOWU2MjItYTg5YS00NjlkLWFkYjgtODYxNWRlYjk3MWNhJyxcbiAgICAvLyAgICAgICAgICAgcm9vbU5hbWU6ICdTY2VuZSBSb29tIFR3aW4nLFxuICAgIC8vICAgICAgICAgICBiYXNpczogJ1Jvb20gb25seSBSTycsXG4gICAgLy8gICAgICAgICAgIHBheDoge1xuICAgIC8vICAgICAgICAgICAgIGFkdWx0czogMixcbiAgICAvLyAgICAgICAgICAgICBjaGlsZHJlbjogMCxcbiAgICAvLyAgICAgICAgICAgICB0b3RhbDogMlxuICAgIC8vICAgICAgICAgICB9LFxuICAgIC8vICAgICAgICAgICBuaWdodHM6IDQsXG4gICAgLy8gICAgICAgICAgIGFtb3VudDogMTg4Ny42MSxcbiAgICAvLyAgICAgICAgICAgZmVlOiAwLFxuICAgIC8vICAgICAgICAgICBzZXJ2aWNlRmVlOiA1MCxcbiAgICAvLyAgICAgICAgICAgcmVmdW5kOiAxODg3LjYxLFxuICAgIC8vICAgICAgICAgICByZWZ1bmRhYmxlOiB0cnVlLFxuICAgIC8vICAgICAgICAgICByb3V0ZTogJ0FVVE8nXG4gICAgLy8gICAgICAgICB9LFxuICAgIC8vICAgICAgICAge1xuICAgIC8vICAgICAgICAgICBwYWNrYWdlSWQ6ICdmMDM4MzhiZC1lYThkLTRmZTUtYmZjOC1kZDMxYzliZGVlOTUnLFxuICAgIC8vICAgICAgICAgICByb29tSWQ6ICdiOGFlZDI2ZS1kOTFhLTQyMzQtYWUzNy05NGIyYzYyMzJkYmQnLFxuICAgIC8vICAgICAgICAgICByb29tTmFtZTogJ1NjZW5lIFJvb20gVHdpbicsXG4gICAgLy8gICAgICAgICAgIGJhc2lzOiAnUm9vbSBvbmx5IFJPJyxcbiAgICAvLyAgICAgICAgICAgcGF4OiB7XG4gICAgLy8gICAgICAgICAgICAgYWR1bHRzOiAyLFxuICAgIC8vICAgICAgICAgICAgIGNoaWxkcmVuOiAwLFxuICAgIC8vICAgICAgICAgICAgIHRvdGFsOiAyXG4gICAgLy8gICAgICAgICAgIH0sXG4gICAgLy8gICAgICAgICAgIG5pZ2h0czogNCxcbiAgICAvLyAgICAgICAgICAgYW1vdW50OiAxODg3LjYsXG4gICAgLy8gICAgICAgICAgIGZlZTogMCxcbiAgICAvLyAgICAgICAgICAgc2VydmljZUZlZTogNTAsXG4gICAgLy8gICAgICAgICAgIHJlZnVuZDogMTg4Ny42LFxuICAgIC8vICAgICAgICAgICByZWZ1bmRhYmxlOiB0cnVlLFxuICAgIC8vICAgICAgICAgICByb3V0ZTogJ0FVVE8nXG4gICAgLy8gICAgICAgICB9XG4gICAgLy8gICAgICAgXSxcbiAgICAvLyAgICAgICBhbW91bnQ6IDM3NzUuMjEsXG4gICAgLy8gICAgICAgZmVlOiAwLFxuICAgIC8vICAgICAgIHN1cmNoYXJnZTogMCxcbiAgICAvLyAgICAgICByZWZ1bmQ6IDM3NzUuMjFcbiAgICAvLyAgICAgfSxcbiAgICAvLyAgICAgcGF5b3V0OiB7XG4gICAgLy8gICAgICAgYWxyZWFkeVJlZnVuZGVkOiAyOTkwLjc5LFxuICAgIC8vICAgICAgIGN1cnJlbnQ6IDE2MDAsXG4gICAgLy8gICAgICAgYWZ0ZXJUaGlzOiA2NzY2LFxuICAgIC8vICAgICAgIGZlZXNUb3RhbDogMCxcbiAgICAvLyAgICAgICB3YWxsZXQ6IDAsXG4gICAgLy8gICAgICAgY2FyZDogMCxcbiAgICAvLyAgICAgICB0YWJieTogMCxcbiAgICAvLyAgICAgICB0YW1hcmE6IDIwMCxcbiAgICAvLyAgICAgICBhbXdhbDogMCxcbiAgICAvLyAgICAgICBtaXM6IDAsXG4gICAgLy8gICAgICAgYm5wbE1hbnVhbDogMCxcbiAgICAvLyAgICAgICBsb3lhbHR5VG9XYWxsZXQ6IDYwMCxcbiAgICAvLyAgICAgICBub3RlOiBudWxsXG4gICAgLy8gICAgIH0sXG4gICAgLy8gICAgIHN1bW1hcmllczogW1xuICAgIC8vICAgICAgIHtcbiAgICAvLyAgICAgICAgIGNvZGU6ICdDQVJEJyxcbiAgICAvLyAgICAgICAgIGxhYmVsOiAnQ2FyZCcsXG4gICAgLy8gICAgICAgICBwYWlkOiA2ODY2LFxuICAgIC8vICAgICAgICAgcmVmdW5kOiAzNzc1LjIxLFxuICAgIC8vICAgICAgICAgcmVmdW5kYWJsZTogdHJ1ZSxcbiAgICAvLyAgICAgICAgIGdhdGV3YXk6ICdDSCdcbiAgICAvLyAgICAgICB9LFxuICAgIC8vICAgICAgIHtcbiAgICAvLyAgICAgICAgIGNvZGU6ICdTRVJWSUNFX0ZFRScsXG4gICAgLy8gICAgICAgICBsYWJlbDogJ1NlcnZpY2UgRmVlJyxcbiAgICAvLyAgICAgICAgIHBhaWQ6IDEwMCxcbiAgICAvLyAgICAgICAgIHJlZnVuZDogMCxcbiAgICAvLyAgICAgICAgIHJlZnVuZGFibGU6IGZhbHNlXG4gICAgLy8gICAgICAgfVxuICAgIC8vICAgICBdLFxuICAgIC8vICAgICBnaWZ0czogW11cbiAgICAvLyAgIH0sXG4gICAgLy8gICBzdGF0dXM6IDIwMCxcbiAgICAvLyAgIGVycm9yczogbnVsbFxuICAgIC8vIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpXG4gICAgICAucG9zdDxJUmVmdW5kRGV0YWlsc0FwaVJlc3BvbnNlPih7XG4gICAgICAgIGVuZHBvaW50LFxuICAgICAgICAuLi5wYXlsb2FkXG4gICAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PlxuICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyb3IsICdGYWlsZWQgdG8gZ2V0IHJlZnVuZCBkZXRhaWxzJylcbiAgICAgICAgKVxuICAgICAgKTtcbiAgfVxuXG4gIG1hcEFwaVJlc3BvbnNlVG9Sb29tcyhcbiAgICBkYXRhOiBJUmVmdW5kRGV0YWlsc0RhdGFcbiAgKTogSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25Sb29tW10ge1xuICAgIHJldHVybiB0aGlzLmdldEFsbFJvb21zKGRhdGEpO1xuICB9XG5cbiAgbWFwQXBpUmVzcG9uc2VUb1JlZnVuZFN1bW1hcnkoXG4gICAgZGF0YTogSVJlZnVuZERldGFpbHNEYXRhXG4gICk6IElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUmVmdW5kU3VtbWFyeSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRvdGFsUGFpZDogZGF0YS50b3RhbHM/LnBhaWQgfHwgMCxcbiAgICAgIHRvdGFsUmVmdW5kOiBkYXRhLmN1cnJlbnQ/LnJlZnVuZCB8fCBkYXRhLmN1cnJlbnQ/LnJlZnVuZCB8fCAwLFxuICAgICAgdG90YWxGZWVzOiBkYXRhLmN1cnJlbnQ/LmZlZSB8fCAwLFxuICAgICAgcm9vbXM6IHRoaXMuZ2V0QWxsUm9vbXMoZGF0YSksXG4gICAgICBwYWNrYWdlczogdGhpcy5nZXRBbGxQYWNrYWdlcyhkYXRhKSxcbiAgICAgIHN1bW1hcmllczogZGF0YS5zdW1tYXJpZXMsXG4gICAgICBwYXlvdXQ6IGRhdGEucGF5b3V0LFxuICAgICAgdG90YWxzOiBkYXRhLnRvdGFscyxcbiAgICAgIC8vIEFkZGl0aW9uYWwgYnJlYWtkb3duIGZpZWxkc1xuICAgICAgY291cG9uOiBkYXRhLnRvdGFscz8uY291cG9uIHx8IDAsXG4gICAgICBnaWZ0c1RvdGFsOiBkYXRhLnRvdGFscz8uZ2lmdHMgfHwgMCxcbiAgICAgIGdpZnRzRGV0YWlsczogZGF0YS5naWZ0cyB8fCBbXSxcbiAgICAgIHNlcnZpY2VGZWU6IGRhdGEudG90YWxzPy5zZXJ2aWNlRmVlIHx8IDAsXG4gICAgICBzdXJjaGFyZ2U6IGRhdGEuY3VycmVudD8uc3VyY2hhcmdlIHx8IDAsXG4gICAgICBnb2xkZW5HaWZ0OiBkYXRhLmZsYWdzPy5nb2xkZW5HaWZ0IHx8IGZhbHNlLFxuICAgICAgcHJldmlvdXNSb29tczogZGF0YS5wcmV2aW91cyB8fCBbXVxuICAgIH07XG4gIH1cblxuICBnZXRBbGxQYWNrYWdlcyhcbiAgICBkYXRhOiBJUmVmdW5kRGV0YWlsc0RhdGFcbiAgKTogSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25SZWZ1bmRQYWNrYWdlW10ge1xuICAgIGNvbnN0IHBhY2thZ2VzOiBJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblJlZnVuZFBhY2thZ2VbXSA9IFtdO1xuICAgIGNvbnN0IHBhY2thZ2VNYXAgPSBuZXcgTWFwPFxuICAgICAgc3RyaW5nLFxuICAgICAgSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25SZWZ1bmRQYWNrYWdlXG4gICAgPigpO1xuXG4gICAgLy8gUHJvY2VzcyBwcmV2aW91cyAoY2FuY2VsbGVkKSByb29tcyAtIGdyb3VwIGJ5IHBhY2thZ2VJZFxuICAgIGlmIChkYXRhLnByZXZpb3VzPy5sZW5ndGgpIHtcbiAgICAgIGRhdGEucHJldmlvdXMuZm9yRWFjaCgocm9vbTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nUGtnID0gcGFja2FnZU1hcC5nZXQocm9vbS5wYWNrYWdlSWQpO1xuICAgICAgICBpZiAoZXhpc3RpbmdQa2cpIHtcbiAgICAgICAgICBleGlzdGluZ1BrZy5yb29tcy5wdXNoKHtcbiAgICAgICAgICAgIHJvb21JZDogcm9vbS5yb29tSWQgfHwgcm9vbS5wYWNrYWdlSWQsXG4gICAgICAgICAgICByb29tTmFtZTogcm9vbS5yb29tTmFtZSxcbiAgICAgICAgICAgIGJhc2lzOiByb29tLmJhc2lzLFxuICAgICAgICAgICAgbmlnaHRzOiByb29tLm5pZ2h0c1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGV4aXN0aW5nUGtnLmFtb3VudCArPSByb29tLmFtb3VudCB8fCAwO1xuICAgICAgICAgIGV4aXN0aW5nUGtnLmZlZSArPSByb29tLmZlZSB8fCAwO1xuICAgICAgICAgIGV4aXN0aW5nUGtnLnJlZnVuZCArPSByb29tLnJlZnVuZGVkIHx8IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFja2FnZU1hcC5zZXQocm9vbS5wYWNrYWdlSWQsIHtcbiAgICAgICAgICAgIHBhY2thZ2VJZDogcm9vbS5wYWNrYWdlSWQsXG4gICAgICAgICAgICBwYWNrYWdlTmFtZTogcm9vbS5yb29tTmFtZSxcbiAgICAgICAgICAgIHJvb21zOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByb29tSWQ6IHJvb20ucm9vbUlkIHx8IHJvb20ucGFja2FnZUlkLFxuICAgICAgICAgICAgICAgIHJvb21OYW1lOiByb29tLnJvb21OYW1lLFxuICAgICAgICAgICAgICAgIGJhc2lzOiByb29tLmJhc2lzLFxuICAgICAgICAgICAgICAgIG5pZ2h0czogcm9vbS5uaWdodHNcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGFtb3VudDogcm9vbS5hbW91bnQgfHwgMCxcbiAgICAgICAgICAgIGZlZTogcm9vbS5mZWUgfHwgMCxcbiAgICAgICAgICAgIHNlcnZpY2VGZWU6IDAsXG4gICAgICAgICAgICByZWZ1bmQ6IHJvb20ucmVmdW5kZWQgfHwgMCxcbiAgICAgICAgICAgIHJlZnVuZGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgY2FuY2VsbGVkQmVmb3JlOiB0cnVlLFxuICAgICAgICAgICAgY2FuY2VsbGF0aW9uRGF0ZTogcm9vbS5jYW5jZWxsZWRBdFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBQcm9jZXNzIGN1cnJlbnQgcm9vbXMgLSBncm91cCBieSBwYWNrYWdlSWRcbiAgICBpZiAoZGF0YS5jdXJyZW50Py5yb29tcz8ubGVuZ3RoKSB7XG4gICAgICBkYXRhLmN1cnJlbnQucm9vbXMuZm9yRWFjaCgocm9vbTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nUGtnID0gcGFja2FnZU1hcC5nZXQocm9vbS5wYWNrYWdlSWQpO1xuICAgICAgICBpZiAoZXhpc3RpbmdQa2cgJiYgIWV4aXN0aW5nUGtnLmNhbmNlbGxlZEJlZm9yZSkge1xuICAgICAgICAgIGV4aXN0aW5nUGtnLnJvb21zLnB1c2goe1xuICAgICAgICAgICAgcm9vbUlkOiByb29tLnJvb21JZCB8fCByb29tLnBhY2thZ2VJZCxcbiAgICAgICAgICAgIHJvb21OYW1lOiByb29tLnJvb21OYW1lLFxuICAgICAgICAgICAgYmFzaXM6IHJvb20uYmFzaXMsXG4gICAgICAgICAgICBuaWdodHM6IHJvb20ubmlnaHRzLFxuICAgICAgICAgICAgcGF4OiByb29tLnBheCxcbiAgICAgICAgICAgIGFkdWx0czogcm9vbS5wYXg/LmFkdWx0cyxcbiAgICAgICAgICAgIGNoaWxkcmVuOiByb29tLnBheD8uY2hpbGRyZW5cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBleGlzdGluZ1BrZy5hbW91bnQgKz0gcm9vbS5hbW91bnQgfHwgMDtcbiAgICAgICAgICBleGlzdGluZ1BrZy5mZWUgKz0gcm9vbS5mZWUgfHwgMDtcbiAgICAgICAgICBleGlzdGluZ1BrZy5zZXJ2aWNlRmVlICs9IHJvb20uc2VydmljZUZlZSB8fCAwO1xuICAgICAgICAgIGV4aXN0aW5nUGtnLnJlZnVuZCArPSByb29tLnJlZnVuZCB8fCAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhY2thZ2VNYXAuc2V0KHJvb20ucGFja2FnZUlkLCB7XG4gICAgICAgICAgICBwYWNrYWdlSWQ6IHJvb20ucGFja2FnZUlkLFxuICAgICAgICAgICAgcGFja2FnZU5hbWU6IHJvb20ucm9vbU5hbWUsXG4gICAgICAgICAgICByb29tczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcm9vbUlkOiByb29tLnJvb21JZCB8fCByb29tLnBhY2thZ2VJZCxcbiAgICAgICAgICAgICAgICByb29tTmFtZTogcm9vbS5yb29tTmFtZSxcbiAgICAgICAgICAgICAgICBiYXNpczogcm9vbS5iYXNpcyxcbiAgICAgICAgICAgICAgICBuaWdodHM6IHJvb20ubmlnaHRzLFxuICAgICAgICAgICAgICAgIHBheDogcm9vbS5wYXgsXG4gICAgICAgICAgICAgICAgYWR1bHRzOiByb29tLnBheD8uYWR1bHRzLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiByb29tLnBheD8uY2hpbGRyZW5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGFtb3VudDogcm9vbS5hbW91bnQgfHwgMCxcbiAgICAgICAgICAgIGZlZTogcm9vbS5mZWUgfHwgMCxcbiAgICAgICAgICAgIHNlcnZpY2VGZWU6IHJvb20uc2VydmljZUZlZSB8fCAwLFxuICAgICAgICAgICAgcmVmdW5kOiByb29tLnJlZnVuZCB8fCAwLFxuICAgICAgICAgICAgcmVmdW5kYWJsZTogcm9vbS5yZWZ1bmRhYmxlLFxuICAgICAgICAgICAgcm91dGU6IHJvb20ucm91dGUsXG4gICAgICAgICAgICBjYW5jZWxsZWRCZWZvcmU6IGZhbHNlLFxuICAgICAgICAgICAgY2FuY2VsbGF0aW9uRGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHBhY2thZ2VNYXAuZm9yRWFjaCgocGtnKSA9PiBwYWNrYWdlcy5wdXNoKHBrZykpO1xuICAgIHJldHVybiBwYWNrYWdlcztcbiAgfVxuXG4gIGdldEFsbFJvb21zKGRhdGE6IElSZWZ1bmREZXRhaWxzRGF0YSk6IElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUm9vbVtdIHtcbiAgICBjb25zdCBhbGxSb29tczogSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25Sb29tW10gPSBbXTtcblxuICAgIGlmIChkYXRhLnByZXZpb3VzPy5sZW5ndGgpIHtcbiAgICAgIGRhdGEucHJldmlvdXMuZm9yRWFjaCgocm9vbSkgPT4ge1xuICAgICAgICBhbGxSb29tcy5wdXNoKHtcbiAgICAgICAgICBwYWNrYWdlSWQ6IHJvb20ucGFja2FnZUlkLFxuICAgICAgICAgIHJvb21JZDogcm9vbT8ucm9vbUlkLFxuICAgICAgICAgIHJvb21OYW1lOiByb29tLnJvb21OYW1lLFxuICAgICAgICAgIGlzUmVmdW5kYWJsZTogZmFsc2UsXG4gICAgICAgICAgaXNTZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgY2FuY2VsbGVkQmVmb3JlOiB0cnVlLFxuICAgICAgICAgIHJvb21BbW91bnQ6IHJvb20uYW1vdW50LFxuICAgICAgICAgIGNhbmNlbGxhdGlvbkZlZTogcm9vbS5mZWUsXG4gICAgICAgICAgcmVmdW5kQW1vdW50OiByb29tLnJlZnVuZGVkLFxuICAgICAgICAgIGN1cnJlbnRDYW5jZWxsYXRpb246IGZhbHNlLFxuICAgICAgICAgIGNhbmNlbGxhdGlvbkRhdGU6IHJvb20uY2FuY2VsbGVkQXQsXG4gICAgICAgICAgbmlnaHRzOiByb29tLm5pZ2h0cyA/PyAxXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEuY3VycmVudD8ucm9vbXM/Lmxlbmd0aCkge1xuICAgICAgZGF0YS5jdXJyZW50LnJvb21zLmZvckVhY2goKHJvb20pID0+IHtcbiAgICAgICAgYWxsUm9vbXMucHVzaCh7XG4gICAgICAgICAgcGFja2FnZUlkOiByb29tLnBhY2thZ2VJZCxcbiAgICAgICAgICByb29tSWQ6IHJvb20/LnJvb21JZCxcbiAgICAgICAgICByb29tTmFtZTogcm9vbS5yb29tTmFtZSxcbiAgICAgICAgICBpc1JlZnVuZGFibGU6IHJvb20ucmVmdW5kYWJsZSxcbiAgICAgICAgICBpc1NlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICByb29tQW1vdW50OiByb29tLmFtb3VudCxcbiAgICAgICAgICBjYW5jZWxsYXRpb25GZWU6IHJvb20uZmVlLFxuICAgICAgICAgIGNhbmNlbGxlZEJlZm9yZTogZmFsc2UsXG4gICAgICAgICAgcmVmdW5kQW1vdW50OiByb29tLnJlZnVuZCxcbiAgICAgICAgICByb3V0ZTogcm9vbS5yb3V0ZSxcbiAgICAgICAgICBjdXJyZW50Q2FuY2VsbGF0aW9uOiB0cnVlLFxuICAgICAgICAgIGNhbmNlbGxhdGlvbkRhdGU6IGAke25ldyBEYXRlKCl9YCxcbiAgICAgICAgICBuaWdodHM6IHJvb20ubmlnaHRzID8/IDFcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWxsUm9vbXM7XG4gIH1cblxuICBwcm9jZXNzQXV0b0NhbmNlbGxhdGlvbihcbiAgICBwYWNrYWdlSWRzOiBzdHJpbmdbXSxcbiAgICByZWZ1bmRPcHRpb24gPSAnb3JpZ2luYWxQYXltZW50TWV0aG9kJ1xuICApOiBPYnNlcnZhYmxlPElBdXRvQ2FuY2VsbGF0aW9uUHJvY2Vzc1Jlc3BvbnNlPiB7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLnJlc29sdmVFbmRwb2ludChcbiAgICAgIEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25FbmRwb2ludHNFbnVtLnByb2Nlc3NBdXRvQ2FuY2VsbGF0aW9uXG4gICAgKTtcblxuICAgIGNvbnN0IHVuaXF1ZVBhY2thZ2VJZHMgPSBbLi4ubmV3IFNldChwYWNrYWdlSWRzKV07IC8vIEVuc3VyZSB1bmlxdWUgcGFja2FnZSBJRHNcbiAgICBjb25zdCBwYXlsb2FkOiBJUHJvY2Vzc0NhbmNlbGxhdGlvblJlcXVlc3QgPSB7XG4gICAgICBib29raW5nSWQ6IGAke1xuICAgICAgICB0aGlzLmhvdGVsTWFuYWdlQm9va2luZ1NlcnZpY2Uuc2VsZWN0ZWRIb3RlbEJvb2tpbmcudmFsdWU/LmJvb2tpbmdJZCB8fFxuICAgICAgICAnJ1xuICAgICAgfWAsXG4gICAgICBwcm9kdWN0OiAnaG90ZWxzJyxcbiAgICAgIHBhY2thZ2VJZHM6IHVuaXF1ZVBhY2thZ2VJZHMsXG4gICAgICBwcmVmZXJyZWRQYXltZW50TWV0aG9kOiByZWZ1bmRPcHRpb25cbiAgICB9O1xuXG4gICAgdGhpcy5fc2VsZWN0ZWRQYWNrYWdlSWRzLnNldCh1bmlxdWVQYWNrYWdlSWRzKTtcblxuICAgIC8vIHJldHVybiBvZih7XG4gICAgLy8gICBkYXRhOiB7XG4gICAgLy8gICAgIGVycm9yOiAnMScsXG4gICAgLy8gICAgIG1lc3NhZ2U6XG4gICAgLy8gICAgICAgJ0NhbmNlbCByZXF1ZXN0ZWQg4oCUIHN1cHBsaWVyIGNhbmNlbGxhdGlvbiBmYWlsZWQ7IHRpY2tldCBjcmVhdGVkJyxcbiAgICAvLyAgICAgYm9va2luZ0lkOiAxNDQzNjgsXG4gICAgLy8gICAgIHByZWZlcnJlZFBheW1lbnRNZXRob2Q6ICd3YWxsZXQnLFxuICAgIC8vICAgICBjYW5jZWw6IHtcbiAgICAvLyAgICAgICBzdGF0dXM6ICdmYWlsZWQnLFxuICAgIC8vICAgICAgIHBhY2thZ2VJZHM6IFsnZjAzODM4YmQtZWE4ZC00ZmU1LWJmYzgtZGQzMWM5YmRlZTk1J10sXG4gICAgLy8gICAgIH0sXG4gICAgLy8gICAgIHJlZnVuZDoge1xuICAgIC8vICAgICAgIHN0YXR1czogJ3NraXBwZWQnLFxuICAgIC8vICAgICAgIGJvb2tpbmdTdGF0dXM6ICdDYW5jZWxsZWQnLFxuICAgIC8vICAgICAgIGFtb3VudDogMTA1MCxcbiAgICAvLyAgICAgICBjdXJyZW5jeTogJ1NBUicsXG4gICAgLy8gICAgICAgYnJlYWtkb3duOiB7XG4gICAgLy8gICAgICAgICB3YWxsZXQ6IDc1MCxcbiAgICAvLyAgICAgICAgIG1va2FmYTogMjAwLFxuICAgIC8vICAgICAgICAgcWl0YWY6IDEwMCxcbiAgICAvLyAgICAgICAgIGNhcmQ6IDAsXG4gICAgLy8gICAgICAgICB0YWJieTogMCxcbiAgICAvLyAgICAgICAgIHRhbWFyYTogMCxcbiAgICAvLyAgICAgICB9LFxuICAgIC8vICAgICB9LFxuICAgIC8vICAgfSxcbiAgICAvLyAgIHN0YXR1czogMjAwLFxuICAgIC8vICAgZXJyb3JzOiBudWxsLFxuICAgIC8vIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpXG4gICAgICAucG9zdDxJQXV0b0NhbmNlbGxhdGlvblByb2Nlc3NSZXNwb25zZT4oe1xuICAgICAgICBlbmRwb2ludCxcbiAgICAgICAgLi4ucGF5bG9hZFxuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgdGhpcy5fc2VsZWN0ZWRQYWNrYWdlSWRzLnNldChbXSk7XG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+XG4gICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnJvciwgJ0ZhaWxlZCB0byBwcm9jZXNzIGNhbmNlbGxhdGlvbicpXG4gICAgICAgIClcbiAgICAgICk7XG4gIH1cblxuICBwcm9jZXNzTm9uUmVmdW5kYWJsZUNhbmNlbGxhdGlvbihcbiAgICBwYWNrYWdlSWQ6IHN0cmluZyxcbiAgICBhdHRhY2htZW50VXJsOiBzdHJpbmcsXG4gICAgbGFuZ3VhZ2UgPSAnZW4nXG4gICk6IE9ic2VydmFibGU8SUF1dG9DYW5jZWxsYXRpb25Qcm9jZXNzUmVzcG9uc2U+IHtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMucmVzb2x2ZUVuZHBvaW50KFxuICAgICAgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbkVuZHBvaW50c0VudW0ucHJvY2Vzc0F1dG9DYW5jZWxsYXRpb25cbiAgICApO1xuXG4gICAgY29uc3QgcGF5bG9hZDogSVByb2Nlc3NOb25SZWZ1bmRhYmxlQ2FuY2VsbGF0aW9uUmVxdWVzdCA9IHtcbiAgICAgIGJvb2tpbmdJZDogYCR7XG4gICAgICAgIHRoaXMuaG90ZWxNYW5hZ2VCb29raW5nU2VydmljZS5zZWxlY3RlZEhvdGVsQm9va2luZy52YWx1ZT8uYm9va2luZ0lkIHx8XG4gICAgICAgICcnXG4gICAgICB9YCxcbiAgICAgIHByb2R1Y3Q6ICdob3RlbHMnLFxuICAgICAgcGFja2FnZUlkczogW3BhY2thZ2VJZF0sXG4gICAgICBwcmVmZXJyZWRQYXltZW50TWV0aG9kOiAnb3JpZ2luYWxQYXltZW50TWV0aG9kJyxcbiAgICAgIHByb2Nlc3NlZE1vZGU6ICdhdXRvJyxcbiAgICAgIGxhbmd1YWdlLFxuICAgICAgYXR0YWNobWVudFVybFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5hcGlcbiAgICAgIC5wb3N0PElBdXRvQ2FuY2VsbGF0aW9uUHJvY2Vzc1Jlc3BvbnNlPih7XG4gICAgICAgIGVuZHBvaW50LFxuICAgICAgICAuLi5wYXlsb2FkXG4gICAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PlxuICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoXG4gICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgICdGYWlsZWQgdG8gcHJvY2VzcyBub24tcmVmdW5kYWJsZSBjYW5jZWxsYXRpb24nXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICB9XG5cbiAgY2FsY3VsYXRlTG9jYWxSZWZ1bmRTdW1tYXJ5KFxuICAgIHJvb21zOiBJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblJvb21bXVxuICApOiBJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblJlZnVuZFN1bW1hcnkge1xuICAgIGNvbnN0IHNlbGVjdGVkUm9vbXMgPSByb29tcy5maWx0ZXIoKHJvb20pID0+IHJvb20uaXNTZWxlY3RlZCk7XG4gICAgY29uc3QgdG90YWxQYWlkID0gcm9vbXMucmVkdWNlKChzdW0sIHJvb20pID0+IHN1bSArIHJvb20ucm9vbUFtb3VudCwgMCk7XG4gICAgY29uc3QgdG90YWxSZWZ1bmQgPSBzZWxlY3RlZFJvb21zLnJlZHVjZShcbiAgICAgIChzdW0sIHJvb20pID0+IHN1bSArIHJvb20ucmVmdW5kQW1vdW50LFxuICAgICAgMFxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdG90YWxQYWlkLFxuICAgICAgdG90YWxSZWZ1bmQsXG4gICAgICByb29tczogc2VsZWN0ZWRSb29tcy5tYXAoKHJvb20pID0+ICh7XG4gICAgICAgIC4uLnJvb20sXG4gICAgICAgIGN1cnJlbnRDYW5jZWxsYXRpb246IHRydWUsXG4gICAgICAgIGNhbmNlbGxhdGlvbkRhdGU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgfSkpXG4gICAgfTtcbiAgfVxuXG4gIGdldFNlbGVjdGVkUGFja2FnZUlkcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkUGFja2FnZUlkcygpO1xuICB9XG5cbiAgY2xlYXJTZWxlY3RlZFBhY2thZ2VJZHMoKTogdm9pZCB7XG4gICAgdGhpcy5fc2VsZWN0ZWRQYWNrYWdlSWRzLnNldChbXSk7XG4gIH1cblxuICBwcml2YXRlIGdldEVudHJ5U291cmNlRGV2aWNlQnJhbmQoKTogSUVudHJ5U291cmNlRGV2aWNlQnJhbmQge1xuICAgIHJldHVybiB7XG4gICAgICBlbnRyeVNvdXJjZTogdGhpcy5nZXRFbnRyeVNvdXJjZSgpLFxuICAgICAgZGV2aWNlOiB0aGlzLmdldERldmljZSgpXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RW50cnlTb3VyY2UoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVzb2x2ZU15VHJpcHNWaWV3ZWRFbnRyeVNvdXJjZUZyb21RdWVyeVBhcmFtcyhcbiAgICAgIHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZXZpY2UoKTogc3RyaW5nIHtcbiAgICBsZXQgZGV2aWNlID0gJ3dlYic7XG4gICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNbJ21vYmlsZUF1dGgnXSkge1xuICAgICAgZGV2aWNlID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtc1snZGV2aWNlJ10gfHwgJ21vYmlsZSc7XG4gICAgfVxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdkZXZpY2VUeXBlJywgZGV2aWNlKTtcbiAgICByZXR1cm4gZGV2aWNlO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVFcnJvcihlcnJvcjogYW55LCBtZXNzYWdlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPG5ldmVyPiB7XG4gICAgLy8gY29uc29sZS5sb2cobWVzc2FnZSwgZXJyb3IpO1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9XG4gICAgICBlcnJvcj8uZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyb3I/Lm1lc3NhZ2UgfHwgbWVzc2FnZTtcbiAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKSk7XG4gIH1cbn1cbiJdfQ==
|