@valtimo/zgw 12.2.1 → 12.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (19) hide show
  1. package/esm2022/lib/modules/documenten-api/components/documenten-api-columns/documenten-api-columns.component.mjs +3 -3
  2. package/esm2022/lib/modules/documenten-api/components/documenten-api-documents/documenten-api-documents.component.mjs +56 -12
  3. package/esm2022/lib/modules/documenten-api/components/documenten-api-filter/documenten-api-filter.component.mjs +3 -3
  4. package/esm2022/lib/modules/documenten-api/components/documenten-api-link-upload-process/dossier-management-link-process.component.mjs +3 -3
  5. package/esm2022/lib/modules/documenten-api/components/documenten-api-metadata-modal/documenten-api-metadata-modal.component.mjs +6 -4
  6. package/esm2022/lib/modules/documenten-api/components/documenten-api-tag-modal/documenten-api-tag-modal.component.mjs +3 -3
  7. package/esm2022/lib/modules/documenten-api/components/documenten-api-tags/documenten-api-tags.component.mjs +3 -3
  8. package/esm2022/lib/modules/documenten-api/components/documenten-api-version/documenten-api-version.component.mjs +3 -3
  9. package/esm2022/lib/modules/haalcentraal-brp/components/cases-list/cases-list.component.mjs +3 -3
  10. package/esm2022/lib/modules/objecten-api/components/object-type/object-type.component.mjs +3 -3
  11. package/esm2022/lib/modules/objecten-api/components/zaakobjecten/zaakobjecten.component.mjs +3 -3
  12. package/esm2022/lib/modules/zaakdetails/components/document-objecten-api-sync/document-objecten-api-sync.component.mjs +3 -3
  13. package/esm2022/lib/modules/zaken-api/components/zaken-api-zaaktype-link/zaken-api-zaaktype-link.component.mjs +3 -3
  14. package/fesm2022/valtimo-zgw.mjs +82 -36
  15. package/fesm2022/valtimo-zgw.mjs.map +1 -1
  16. package/lib/modules/documenten-api/components/documenten-api-documents/documenten-api-documents.component.d.ts +11 -2
  17. package/lib/modules/documenten-api/components/documenten-api-documents/documenten-api-documents.component.d.ts.map +1 -1
  18. package/lib/modules/documenten-api/components/documenten-api-metadata-modal/documenten-api-metadata-modal.component.d.ts.map +1 -1
  19. package/package.json +1 -1
@@ -334,6 +334,8 @@ export class DocumentenApiMetadataModalComponent {
334
334
  this.additionalDocumentDate$.next('received');
335
335
  else
336
336
  this.additionalDocumentDate$.next('neither');
337
+ const prefillStatus = this.status || status;
338
+ const validPrefillStatus = this.STATUSES.includes(prefillStatus) ? prefillStatus : '';
337
339
  this.documentenApiMetadataForm.patchValue({
338
340
  bestandsnaam: this.filename || bestandsnaam,
339
341
  titel: this.documentTitle || titel,
@@ -341,7 +343,7 @@ export class DocumentenApiMetadataModalComponent {
341
343
  beschrijving: this.description || beschrijving,
342
344
  taal: this.language || taal,
343
345
  informatieobjecttype: this.documentType || informatieobjecttype,
344
- status: this.status || status,
346
+ status: validPrefillStatus,
345
347
  vertrouwelijkheidaanduiding: this.confidentialityLevel || vertrouwelijkheidaanduiding,
346
348
  creatiedatum,
347
349
  ontvangstdatum,
@@ -414,7 +416,7 @@ export class DocumentenApiMetadataModalComponent {
414
416
  this.additionalDocumentDate$.next(value);
415
417
  }
416
418
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DocumentenApiMetadataModalComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.DocumentService }, { token: i3.DocumentenApiTagService }, { token: i4.FormBuilder }, { token: i5.KeycloakService }, { token: i6.ModalService }, { token: i7.TranslateService }, { token: i6.ValtimoModalService }], target: i0.ɵɵFactoryTarget.Component }); }
417
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: DocumentenApiMetadataModalComponent, isStandalone: true, selector: "valtimo-documenten-api-metadata-modal", inputs: { disabled$: "disabled$", file$: "file$", author: "author", confidentialityLevel: "confidentialityLevel", description: "description", disableAuthor: "disableAuthor", disableConfidentialityLevel: "disableConfidentialityLevel", disableDescription: "disableDescription", disableDocumentTitle: "disableDocumentTitle", disableDocumentType: "disableDocumentType", disableFilename: "disableFilename", disableLanguage: "disableLanguage", disableStatus: "disableStatus", disableTrefwoorden: "disableTrefwoorden", documentTitle: "documentTitle", documentType: "documentType", filename: "filename", isEditMode: "isEditMode", language: "language", open: "open", status: "status", supportsTrefwoorden: "supportsTrefwoorden" }, outputs: { metadata: "metadata", modalClose: "modalClose" }, viewQueries: [{ propertyName: "metadataModal", first: true, predicate: ["metadataModal"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<v-modal\n #metadataModal\n *ngIf=\"{\n file: file$ | async,\n disabled: disabled$ | async,\n isDefinitiveStatus: isDefinitiveStatus$ | async,\n languageItems: languageItems$ | async,\n statusItems: statusItems$ | async,\n tagItems: tagItems$ | async,\n userEmail: userEmail$ | async,\n open: open$ | async,\n additionalDate: additionalDocumentDate$ | async,\n } as obs\"\n [maxWidthPx]=\"1280\"\n (closeEvent)=\"closeModal()\"\n>\n <div role=\"header\">\n @if (isEditMode) {\n <h3 cdsModalHeaderHeading>\n {{ 'document.editMetadata' | translate }}\n </h3>\n } @else {\n <h3 cdsModalHeaderHeading>\n {{ 'document.fillInMetadata' | translate }}\n </h3>\n }\n </div>\n\n <div role=\"content\">\n @if (obs.open) {\n <ng-container *ngTemplateOutlet=\"metadataForm; context: {obs: obs}\"></ng-container>\n }\n </div>\n\n <div role=\"footer\" class=\"metadata-modal-footer\">\n <button cdsButton=\"ghost\" (click)=\"closeModal()\" [disabled]=\"obs.disabled\">\n {{ 'document.cancel' | translate }}\n </button>\n\n <button\n cdsButton=\"primary\"\n type=\"submit\"\n [disabled]=\"obs.disabled || !documentenApiMetadataForm.valid || obs.isDefinitiveStatus\"\n (click)=\"save()\"\n >\n {{ 'document.save' | translate }}\n </button>\n </div>\n</v-modal>\n\n<ng-template #metadataForm let-obs=\"obs\">\n <form [formGroup]=\"documentenApiMetadataForm\">\n <div class=\"documenten-metadata-form-columns-container\">\n <div class=\"documenten-metadata-form-column\">\n <cds-text-label class=\"documenten-metada-form-input\">\n {{ 'document.filename' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.filenameTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n <input\n [value]=\"filename\"\n [placeholder]=\"'document.filenamePlaceholder' | translate\"\n [required]=\"true\"\n cdsText\n type=\"text\"\n id=\"bestandsnaam\"\n formControlName=\"bestandsnaam\"\n />\n </cds-text-label>\n <cds-text-label class=\"documenten-metada-form-input\">\n {{ 'document.author' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.authorTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n <input\n [value]=\"author\"\n [placeholder]=\"'document.authorPlaceholder' | translate\"\n [required]=\"true\"\n cdsText\n id=\"auteur\"\n formControlName=\"auteur\"\n />\n </cds-text-label>\n <cds-text-label>\n {{ 'document.language' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.languageTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-text-label>\n <div class=\"documenten-metada-form-input\">\n <cds-dropdown\n *ngIf=\"obs.languageItems\"\n [disabled]=\"obs.disabled || (languageDisabled$ | async)\"\n [appendInline]=\"true\"\n [placeholder]=\"'document.languagePlaceholder' | translate\"\n id=\"language\"\n (selected)=\"languageSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs.languageItems || []\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n <cds-label>\n {{ 'document.confidentialityLevel' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.confidentialityLevelTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-label>\n <div class=\"documenten-metada-form-input\">\n <cds-dropdown\n [placeholder]=\"'document.confidentialityPlaceholder' | translate\"\n id=\"vertrouwelijkheidaanduiding\"\n [appendInline]=\"true\"\n [disabled]=\"obs.disabled || (confidentialityLevelDisabled$ | async)\"\n (selected)=\"confidentialityLevelSelected($event)\"\n >\n <cds-dropdown-list [items]=\"confidentialityLevelItems$ | async\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n <ng-container *ngIf=\"{documentTypeItems: documentTypeItems$ | async} as obs\">\n <cds-label>\n {{ 'document.informatieobjecttype' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.informatieobjecttypeTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-label>\n <div class=\"documenten-metada-form-input\">\n <cds-dropdown\n [placeholder]=\"'document.informatieobjecttypePlaceholder' | translate\"\n [disabled]=\"obs.disabled || (informatieobjecttypeDisabled$ | async)\"\n id=\"informatieobjecttype\"\n [appendInline]=\"true\"\n (selected)=\"informatieobjecttypeSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs.documentTypeItems || []\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n </ng-container>\n <cds-text-label name=\"'additionalDate'\">\n {{ 'document.additionalDate' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.additionalDateTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-text-label>\n <cds-radio-group [orientation]=\"'horizontal'\" class=\"documenten-metada-form-input\">\n <cds-radio\n *ngFor=\"let option of ADDITONAL_DOCUMENT_DATE_OPTIONS\"\n [value]=\"option.value\"\n [checked]=\"obs.additionalDate === option.value\"\n [required]=\"true\"\n (click)=\"setAdditionalDate(option.value)\"\n name=\"radio-inline\"\n >\n {{ option.translationKey | translate }}\n </cds-radio>\n </cds-radio-group>\n @if (supportsTrefwoorden) {\n <cds-text-label>\n {{ 'document.tags' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.tagsTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-text-label>\n <div class=\"documenten-metada-form-input\">\n <cds-combo-box\n [type]=\"'multi'\"\n [placeholder]=\"'document.tagsPlaceholder' | translate\"\n [disabled]=\"obs.disabled || obs.tagItems.length === 0\"\n [appendInline]=\"true\"\n (selected)=\"tagsSelected($event)\"\n >\n >\n <cds-dropdown-list [items]=\"obs.tagItems || []\"></cds-dropdown-list>\n </cds-combo-box>\n </div>\n }\n </div>\n\n <div class=\"documenten-metadata-form-column\">\n <cds-text-label>\n {{ 'document.inputTitle' | translate }}\n <input\n [placeholder]=\"'document.inputTitlePlaceholder' | translate\"\n [required]=\"true\"\n cdsText\n class=\"documenten-metada-form-input\"\n id=\"titel\"\n formControlName=\"titel\"\n />\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.inputTitleTooltip' | translate\"\n [align]=\"'bottom'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-text-label>\n <cds-textarea-label>\n {{ 'document.inputDescription' | translate }}\n <textarea\n [placeholder]=\"'document.inputDescriptionPlaceholder' | translate\"\n [required]=\"true\"\n [rows]=\"5\"\n cdsTextArea\n class=\"documenten-metada-form-description-input documenten-metada-form-input\"\n id=\"beschrijving\"\n formControlName=\"beschrijving\"\n ></textarea>\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.inputDescriptionTooltip' | translate\"\n [align]=\"'bottom'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-textarea-label>\n <cds-label>\n {{ 'document.creationDate' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.creationDateTooltip' | translate\"\n [align]=\"'bottom'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n <div class=\"documenten-metada-form-input\">\n <cds-date-picker\n [placeholder]=\"'DD-MM-YYYY'\"\n [dateFormat]=\"'d-m-Y'\"\n id=\"creatiedatum\"\n formControlName=\"creatiedatum\"\n >\n </cds-date-picker>\n </div>\n </cds-label>\n <cds-label>\n {{ 'document.status' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.statusTooltip' | translate\"\n [align]=\"'bottom'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-label>\n <div class=\"documenten-metada-form-input\">\n <cds-dropdown\n [placeholder]=\"'document.statusPlaceholder' | translate\"\n [disabled]=\"obs.disabled || (statusDisabled$ | async)\"\n id=\"status\"\n [appendInline]=\"true\"\n (selected)=\"statusSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs.statusItems || []\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n <cds-date-picker\n *ngIf=\"obs.additionalDate === 'received'\"\n [label]=\"'document.additionalDate' | translate\"\n [placeholder]=\"'DD-MM-YYYY'\"\n [dateFormat]=\"'d-m-Y'\"\n id=\"ontvangstdatum\"\n formControlName=\"ontvangstdatum\"\n ></cds-date-picker>\n <cds-date-picker\n *ngIf=\"obs.additionalDate === 'sent'\"\n [label]=\"'document.additionalDate' | translate\"\n [placeholder]=\"'DD-MM-YYYY'\"\n [dateFormat]=\"'d-m-Y'\"\n id=\"verzenddatum\"\n formControlName=\"verzenddatum\"\n ></cds-date-picker>\n </div>\n </div>\n </form>\n</ng-template>\n", styles: [".documenten-metadata-form-columns-container{display:flex;justify-content:space-between}.documenten-metadata-form-column{flex:1;margin-right:1rem}.documenten-metada-form-input{margin-bottom:18px!important;width:100%!important}.documenten-metada-form-description-input{width:100%}::ng-deep .cds--date-picker,::ng-deep .cds--date-picker-container,::ng-deep .cds--date-picker__input,::ng-deep .cds--date-picker-input__wrapper,::ng-deep .cds--date-picker-input__wrapper>span{width:100%}::ng-deep .cds--date-picker.cds--date-picker--single .cds--date-picker__input{inline-size:100%}.metadata-modal-footer button{width:100%}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i8.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: CarbonInputModule }, { kind: "component", type: i8.Label, selector: "cds-label, ibm-label", inputs: ["labelInputID", "disabled", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "component", type: i8.TextareaLabelComponent, selector: "cds-textarea-label, ibm-textarea-label", inputs: ["labelInputID", "disabled", "skeleton", "labelTemplate", "textAreaTemplate", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "component", type: i8.TextInputLabelComponent, selector: "cds-text-label, ibm-text-label", inputs: ["labelInputID", "disabled", "skeleton", "labelTemplate", "textInputTemplate", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "directive", type: i8.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "directive", type: i8.TextArea, selector: "[cdsTextArea], [ibmTextArea]", inputs: ["theme", "invalid", "skeleton"] }, { kind: "ngmodule", type: ComboBoxModule }, { kind: "component", type: i8.ComboBox, selector: "cds-combo-box, ibm-combo-box", inputs: ["placeholder", "openMenuAria", "closeMenuAria", "clearSelectionsTitle", "clearSelectionsAria", "clearSelectionTitle", "clearSelectionAria", "id", "labelId", "items", "type", "size", "itemValueKey", "label", "hideLabel", "helperText", "appendInline", "invalid", "invalidText", "warn", "warnText", "maxLength", "theme", "selectionFeedback", "autocomplete", "dropUp", "disabled"], outputs: ["selected", "submit", "close", "search", "clear"] }, { kind: "component", type: i8.Dropdown, selector: "cds-dropdown, ibm-dropdown", inputs: ["id", "label", "hideLabel", "helperText", "placeholder", "displayValue", "clearText", "size", "type", "theme", "disabled", "skeleton", "inline", "disableArrowKeys", "invalid", "invalidText", "warn", "warnText", "appendInline", "scrollableContainer", "itemValueKey", "selectionFeedback", "menuButtonLabel", "selectedLabel", "dropUp"], outputs: ["selected", "onClose", "close"] }, { kind: "component", type: i8.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i9.AsyncPipe, name: "async" }, { kind: "ngmodule", type: DatePickerModule }, { kind: "component", type: i8.DatePicker, selector: "cds-date-picker, ibm-date-picker", inputs: ["range", "dateFormat", "language", "label", "helperText", "rangeHelperText", "rangeLabel", "placeholder", "ariaLabel", "inputPattern", "id", "value", "theme", "disabled", "invalid", "invalidText", "warn", "warnText", "size", "rangeInvalid", "rangeInvalidText", "rangeWarn", "rangeWarnText", "skeleton", "plugins", "flatpickrOptions"], outputs: ["valueChange", "onClose"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "ngmodule", type: IconModule }, { kind: "ngmodule", type: InputLabelModule }, { kind: "ngmodule", type: InputModule }, { kind: "ngmodule", type: ModalModule }, { kind: "directive", type: i8.ModalHeaderHeading, selector: "[cdsModalHeaderHeading], [ibmModalHeaderHeading]" }, { kind: "ngmodule", type: RadioModule }, { kind: "component", type: i8.Radio, selector: "cds-radio, ibm-radio", inputs: ["checked", "name", "disabled", "labelPlacement", "ariaLabelledby", "ariaLabel", "required", "value", "skeleton", "id"], outputs: ["change"] }, { kind: "component", type: i8.RadioGroup, selector: "cds-radio-group, ibm-radio-group", inputs: ["selected", "value", "name", "disabled", "skeleton", "orientation", "labelPlacement", "legend", "ariaLabel", "ariaLabelledby", "helperText", "invalid", "invalidText", "warn", "warnText"], outputs: ["change"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: SelectModule }, { kind: "ngmodule", type: TagModule }, { kind: "ngmodule", type: TooltipModule }, { kind: "component", type: i8.Tooltip, selector: "cds-tooltip, ibm-tooltip", inputs: ["id", "enterDelayMs", "leaveDelayMs", "disabled", "description", "templateContext"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: VModalModule }, { kind: "component", type: i6.VModalComponent, selector: "v-modal", inputs: ["appearingDelayMs", "maxWidthPx", "hideFooter"], outputs: ["closeEvent"] }] }); }
419
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: DocumentenApiMetadataModalComponent, isStandalone: true, selector: "valtimo-documenten-api-metadata-modal", inputs: { disabled$: "disabled$", file$: "file$", author: "author", confidentialityLevel: "confidentialityLevel", description: "description", disableAuthor: "disableAuthor", disableConfidentialityLevel: "disableConfidentialityLevel", disableDescription: "disableDescription", disableDocumentTitle: "disableDocumentTitle", disableDocumentType: "disableDocumentType", disableFilename: "disableFilename", disableLanguage: "disableLanguage", disableStatus: "disableStatus", disableTrefwoorden: "disableTrefwoorden", documentTitle: "documentTitle", documentType: "documentType", filename: "filename", isEditMode: "isEditMode", language: "language", open: "open", status: "status", supportsTrefwoorden: "supportsTrefwoorden" }, outputs: { metadata: "metadata", modalClose: "modalClose" }, viewQueries: [{ propertyName: "metadataModal", first: true, predicate: ["metadataModal"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<v-modal\n #metadataModal\n *ngIf=\"{\n file: file$ | async,\n disabled: disabled$ | async,\n isDefinitiveStatus: isDefinitiveStatus$ | async,\n languageItems: languageItems$ | async,\n statusItems: statusItems$ | async,\n tagItems: tagItems$ | async,\n userEmail: userEmail$ | async,\n open: open$ | async,\n additionalDate: additionalDocumentDate$ | async,\n } as obs\"\n [maxWidthPx]=\"1280\"\n (closeEvent)=\"closeModal()\"\n>\n <div role=\"header\">\n @if (isEditMode) {\n <h3 cdsModalHeaderHeading>\n {{ 'document.editMetadata' | translate }}\n </h3>\n } @else {\n <h3 cdsModalHeaderHeading>\n {{ 'document.fillInMetadata' | translate }}\n </h3>\n }\n </div>\n\n <div role=\"content\">\n @if (obs.open) {\n <ng-container *ngTemplateOutlet=\"metadataForm; context: {obs: obs}\"></ng-container>\n }\n </div>\n\n <div role=\"footer\" class=\"metadata-modal-footer\">\n <button cdsButton=\"ghost\" (click)=\"closeModal()\" [disabled]=\"obs.disabled\">\n {{ 'document.cancel' | translate }}\n </button>\n\n <button\n cdsButton=\"primary\"\n type=\"submit\"\n [disabled]=\"obs.disabled || !documentenApiMetadataForm.valid || obs.isDefinitiveStatus\"\n (click)=\"save()\"\n >\n {{ 'document.save' | translate }}\n </button>\n </div>\n</v-modal>\n\n<ng-template #metadataForm let-obs=\"obs\">\n <form [formGroup]=\"documentenApiMetadataForm\">\n <div class=\"documenten-metadata-form-columns-container\">\n <div class=\"documenten-metadata-form-column\">\n <cds-text-label class=\"documenten-metada-form-input\">\n {{ 'document.filename' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.filenameTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n <input\n [value]=\"filename\"\n [placeholder]=\"'document.filenamePlaceholder' | translate\"\n [required]=\"true\"\n cdsText\n type=\"text\"\n id=\"bestandsnaam\"\n formControlName=\"bestandsnaam\"\n />\n </cds-text-label>\n <cds-text-label class=\"documenten-metada-form-input\">\n {{ 'document.author' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.authorTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n <input\n [value]=\"author\"\n [placeholder]=\"'document.authorPlaceholder' | translate\"\n [required]=\"true\"\n cdsText\n id=\"auteur\"\n formControlName=\"auteur\"\n />\n </cds-text-label>\n <cds-text-label>\n {{ 'document.language' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.languageTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-text-label>\n <div class=\"documenten-metada-form-input\">\n <cds-dropdown\n *ngIf=\"obs.languageItems\"\n [disabled]=\"obs.disabled || (languageDisabled$ | async)\"\n [appendInline]=\"true\"\n [placeholder]=\"'document.languagePlaceholder' | translate\"\n id=\"language\"\n (selected)=\"languageSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs.languageItems || []\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n <cds-label>\n {{ 'document.confidentialityLevel' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.confidentialityLevelTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-label>\n <div class=\"documenten-metada-form-input\">\n <cds-dropdown\n [placeholder]=\"'document.confidentialityPlaceholder' | translate\"\n id=\"vertrouwelijkheidaanduiding\"\n [appendInline]=\"true\"\n [disabled]=\"obs.disabled || (confidentialityLevelDisabled$ | async)\"\n (selected)=\"confidentialityLevelSelected($event)\"\n >\n <cds-dropdown-list [items]=\"confidentialityLevelItems$ | async\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n <ng-container *ngIf=\"{documentTypeItems: documentTypeItems$ | async} as obs\">\n <cds-label>\n {{ 'document.informatieobjecttype' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.informatieobjecttypeTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-label>\n <div class=\"documenten-metada-form-input\">\n <cds-dropdown\n [placeholder]=\"'document.informatieobjecttypePlaceholder' | translate\"\n [disabled]=\"obs.disabled || (informatieobjecttypeDisabled$ | async)\"\n id=\"informatieobjecttype\"\n [appendInline]=\"true\"\n (selected)=\"informatieobjecttypeSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs.documentTypeItems || []\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n </ng-container>\n <cds-text-label name=\"'additionalDate'\">\n {{ 'document.additionalDate' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.additionalDateTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-text-label>\n <cds-radio-group [orientation]=\"'horizontal'\" class=\"documenten-metada-form-input\">\n <cds-radio\n *ngFor=\"let option of ADDITONAL_DOCUMENT_DATE_OPTIONS\"\n [value]=\"option.value\"\n [checked]=\"obs.additionalDate === option.value\"\n [required]=\"true\"\n (click)=\"setAdditionalDate(option.value)\"\n name=\"radio-inline\"\n >\n {{ option.translationKey | translate }}\n </cds-radio>\n </cds-radio-group>\n @if (supportsTrefwoorden) {\n <cds-text-label>\n {{ 'document.tags' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.tagsTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-text-label>\n <div class=\"documenten-metada-form-input\">\n <cds-combo-box\n [type]=\"'multi'\"\n [placeholder]=\"'document.tagsPlaceholder' | translate\"\n [disabled]=\"obs.disabled || obs.tagItems.length === 0\"\n [appendInline]=\"true\"\n (selected)=\"tagsSelected($event)\"\n >\n >\n <cds-dropdown-list [items]=\"obs.tagItems || []\"></cds-dropdown-list>\n </cds-combo-box>\n </div>\n }\n </div>\n\n <div class=\"documenten-metadata-form-column\">\n <cds-text-label>\n {{ 'document.inputTitle' | translate }}\n <input\n [placeholder]=\"'document.inputTitlePlaceholder' | translate\"\n [required]=\"true\"\n cdsText\n class=\"documenten-metada-form-input\"\n id=\"titel\"\n formControlName=\"titel\"\n />\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.inputTitleTooltip' | translate\"\n [align]=\"'bottom'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-text-label>\n <cds-textarea-label>\n {{ 'document.inputDescription' | translate }}\n <textarea\n [placeholder]=\"'document.inputDescriptionPlaceholder' | translate\"\n [required]=\"true\"\n [rows]=\"5\"\n cdsTextArea\n class=\"documenten-metada-form-description-input documenten-metada-form-input\"\n id=\"beschrijving\"\n formControlName=\"beschrijving\"\n ></textarea>\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.inputDescriptionTooltip' | translate\"\n [align]=\"'bottom'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-textarea-label>\n <cds-label>\n {{ 'document.creationDate' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.creationDateTooltip' | translate\"\n [align]=\"'bottom'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n <div class=\"documenten-metada-form-input\">\n <cds-date-picker\n [placeholder]=\"'DD-MM-YYYY'\"\n [dateFormat]=\"'d-m-Y'\"\n id=\"creatiedatum\"\n formControlName=\"creatiedatum\"\n >\n </cds-date-picker>\n </div>\n </cds-label>\n <cds-label>\n {{ 'document.status' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.statusTooltip' | translate\"\n [align]=\"'bottom'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-label>\n <div class=\"documenten-metada-form-input\">\n <cds-dropdown\n [placeholder]=\"'document.statusPlaceholder' | translate\"\n [disabled]=\"obs.disabled || (statusDisabled$ | async)\"\n id=\"status\"\n [appendInline]=\"true\"\n (selected)=\"statusSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs.statusItems || []\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n <cds-date-picker\n *ngIf=\"obs.additionalDate === 'received'\"\n [label]=\"'document.additionalDate' | translate\"\n [placeholder]=\"'DD-MM-YYYY'\"\n [dateFormat]=\"'d-m-Y'\"\n id=\"ontvangstdatum\"\n formControlName=\"ontvangstdatum\"\n ></cds-date-picker>\n <cds-date-picker\n *ngIf=\"obs.additionalDate === 'sent'\"\n [label]=\"'document.additionalDate' | translate\"\n [placeholder]=\"'DD-MM-YYYY'\"\n [dateFormat]=\"'d-m-Y'\"\n id=\"verzenddatum\"\n formControlName=\"verzenddatum\"\n ></cds-date-picker>\n </div>\n </div>\n </form>\n</ng-template>\n", styles: [".documenten-metadata-form-columns-container{display:flex;justify-content:space-between}.documenten-metadata-form-column{flex:1;margin-right:1rem}.documenten-metada-form-input{margin-bottom:18px!important;width:100%!important}.documenten-metada-form-description-input{width:100%}::ng-deep .cds--date-picker,::ng-deep .cds--date-picker-container,::ng-deep .cds--date-picker__input,::ng-deep .cds--date-picker-input__wrapper,::ng-deep .cds--date-picker-input__wrapper>span{width:100%}::ng-deep .cds--date-picker.cds--date-picker--single .cds--date-picker__input{inline-size:100%}.metadata-modal-footer{display:flex;justify-content:flex-end}.metadata-modal-footer button{width:100%}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i8.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: CarbonInputModule }, { kind: "component", type: i8.Label, selector: "cds-label, ibm-label", inputs: ["labelInputID", "disabled", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "component", type: i8.TextareaLabelComponent, selector: "cds-textarea-label, ibm-textarea-label", inputs: ["labelInputID", "disabled", "skeleton", "labelTemplate", "textAreaTemplate", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "component", type: i8.TextInputLabelComponent, selector: "cds-text-label, ibm-text-label", inputs: ["labelInputID", "disabled", "skeleton", "labelTemplate", "textInputTemplate", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "directive", type: i8.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "directive", type: i8.TextArea, selector: "[cdsTextArea], [ibmTextArea]", inputs: ["theme", "invalid", "skeleton"] }, { kind: "ngmodule", type: ComboBoxModule }, { kind: "component", type: i8.ComboBox, selector: "cds-combo-box, ibm-combo-box", inputs: ["placeholder", "openMenuAria", "closeMenuAria", "clearSelectionsTitle", "clearSelectionsAria", "clearSelectionTitle", "clearSelectionAria", "id", "labelId", "items", "type", "size", "itemValueKey", "label", "hideLabel", "helperText", "appendInline", "invalid", "invalidText", "warn", "warnText", "maxLength", "theme", "selectionFeedback", "autocomplete", "dropUp", "disabled"], outputs: ["selected", "submit", "close", "search", "clear"] }, { kind: "component", type: i8.Dropdown, selector: "cds-dropdown, ibm-dropdown", inputs: ["id", "label", "hideLabel", "helperText", "placeholder", "displayValue", "clearText", "size", "type", "theme", "disabled", "skeleton", "inline", "disableArrowKeys", "invalid", "invalidText", "warn", "warnText", "appendInline", "scrollableContainer", "itemValueKey", "selectionFeedback", "menuButtonLabel", "selectedLabel", "dropUp"], outputs: ["selected", "onClose", "close"] }, { kind: "component", type: i8.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i9.AsyncPipe, name: "async" }, { kind: "ngmodule", type: DatePickerModule }, { kind: "component", type: i8.DatePicker, selector: "cds-date-picker, ibm-date-picker", inputs: ["range", "dateFormat", "language", "label", "helperText", "rangeHelperText", "rangeLabel", "placeholder", "ariaLabel", "inputPattern", "id", "value", "theme", "disabled", "invalid", "invalidText", "warn", "warnText", "size", "rangeInvalid", "rangeInvalidText", "rangeWarn", "rangeWarnText", "skeleton", "plugins", "flatpickrOptions"], outputs: ["valueChange", "onClose"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "ngmodule", type: IconModule }, { kind: "ngmodule", type: InputLabelModule }, { kind: "ngmodule", type: InputModule }, { kind: "ngmodule", type: ModalModule }, { kind: "directive", type: i8.ModalHeaderHeading, selector: "[cdsModalHeaderHeading], [ibmModalHeaderHeading]" }, { kind: "ngmodule", type: RadioModule }, { kind: "component", type: i8.Radio, selector: "cds-radio, ibm-radio", inputs: ["checked", "name", "disabled", "labelPlacement", "ariaLabelledby", "ariaLabel", "required", "value", "skeleton", "id"], outputs: ["change"] }, { kind: "component", type: i8.RadioGroup, selector: "cds-radio-group, ibm-radio-group", inputs: ["selected", "value", "name", "disabled", "skeleton", "orientation", "labelPlacement", "legend", "ariaLabel", "ariaLabelledby", "helperText", "invalid", "invalidText", "warn", "warnText"], outputs: ["change"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: SelectModule }, { kind: "ngmodule", type: TagModule }, { kind: "ngmodule", type: TooltipModule }, { kind: "component", type: i8.Tooltip, selector: "cds-tooltip, ibm-tooltip", inputs: ["id", "enterDelayMs", "leaveDelayMs", "disabled", "description", "templateContext"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: VModalModule }, { kind: "component", type: i6.VModalComponent, selector: "v-modal", inputs: ["appearingDelayMs", "maxWidthPx", "hideFooter"], outputs: ["closeEvent"] }] }); }
418
420
  }
419
421
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DocumentenApiMetadataModalComponent, decorators: [{
420
422
  type: Component,
@@ -436,7 +438,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
436
438
  TooltipModule,
437
439
  TranslateModule,
438
440
  VModalModule,
439
- ], template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<v-modal\n #metadataModal\n *ngIf=\"{\n file: file$ | async,\n disabled: disabled$ | async,\n isDefinitiveStatus: isDefinitiveStatus$ | async,\n languageItems: languageItems$ | async,\n statusItems: statusItems$ | async,\n tagItems: tagItems$ | async,\n userEmail: userEmail$ | async,\n open: open$ | async,\n additionalDate: additionalDocumentDate$ | async,\n } as obs\"\n [maxWidthPx]=\"1280\"\n (closeEvent)=\"closeModal()\"\n>\n <div role=\"header\">\n @if (isEditMode) {\n <h3 cdsModalHeaderHeading>\n {{ 'document.editMetadata' | translate }}\n </h3>\n } @else {\n <h3 cdsModalHeaderHeading>\n {{ 'document.fillInMetadata' | translate }}\n </h3>\n }\n </div>\n\n <div role=\"content\">\n @if (obs.open) {\n <ng-container *ngTemplateOutlet=\"metadataForm; context: {obs: obs}\"></ng-container>\n }\n </div>\n\n <div role=\"footer\" class=\"metadata-modal-footer\">\n <button cdsButton=\"ghost\" (click)=\"closeModal()\" [disabled]=\"obs.disabled\">\n {{ 'document.cancel' | translate }}\n </button>\n\n <button\n cdsButton=\"primary\"\n type=\"submit\"\n [disabled]=\"obs.disabled || !documentenApiMetadataForm.valid || obs.isDefinitiveStatus\"\n (click)=\"save()\"\n >\n {{ 'document.save' | translate }}\n </button>\n </div>\n</v-modal>\n\n<ng-template #metadataForm let-obs=\"obs\">\n <form [formGroup]=\"documentenApiMetadataForm\">\n <div class=\"documenten-metadata-form-columns-container\">\n <div class=\"documenten-metadata-form-column\">\n <cds-text-label class=\"documenten-metada-form-input\">\n {{ 'document.filename' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.filenameTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n <input\n [value]=\"filename\"\n [placeholder]=\"'document.filenamePlaceholder' | translate\"\n [required]=\"true\"\n cdsText\n type=\"text\"\n id=\"bestandsnaam\"\n formControlName=\"bestandsnaam\"\n />\n </cds-text-label>\n <cds-text-label class=\"documenten-metada-form-input\">\n {{ 'document.author' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.authorTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n <input\n [value]=\"author\"\n [placeholder]=\"'document.authorPlaceholder' | translate\"\n [required]=\"true\"\n cdsText\n id=\"auteur\"\n formControlName=\"auteur\"\n />\n </cds-text-label>\n <cds-text-label>\n {{ 'document.language' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.languageTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-text-label>\n <div class=\"documenten-metada-form-input\">\n <cds-dropdown\n *ngIf=\"obs.languageItems\"\n [disabled]=\"obs.disabled || (languageDisabled$ | async)\"\n [appendInline]=\"true\"\n [placeholder]=\"'document.languagePlaceholder' | translate\"\n id=\"language\"\n (selected)=\"languageSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs.languageItems || []\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n <cds-label>\n {{ 'document.confidentialityLevel' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.confidentialityLevelTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-label>\n <div class=\"documenten-metada-form-input\">\n <cds-dropdown\n [placeholder]=\"'document.confidentialityPlaceholder' | translate\"\n id=\"vertrouwelijkheidaanduiding\"\n [appendInline]=\"true\"\n [disabled]=\"obs.disabled || (confidentialityLevelDisabled$ | async)\"\n (selected)=\"confidentialityLevelSelected($event)\"\n >\n <cds-dropdown-list [items]=\"confidentialityLevelItems$ | async\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n <ng-container *ngIf=\"{documentTypeItems: documentTypeItems$ | async} as obs\">\n <cds-label>\n {{ 'document.informatieobjecttype' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.informatieobjecttypeTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-label>\n <div class=\"documenten-metada-form-input\">\n <cds-dropdown\n [placeholder]=\"'document.informatieobjecttypePlaceholder' | translate\"\n [disabled]=\"obs.disabled || (informatieobjecttypeDisabled$ | async)\"\n id=\"informatieobjecttype\"\n [appendInline]=\"true\"\n (selected)=\"informatieobjecttypeSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs.documentTypeItems || []\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n </ng-container>\n <cds-text-label name=\"'additionalDate'\">\n {{ 'document.additionalDate' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.additionalDateTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-text-label>\n <cds-radio-group [orientation]=\"'horizontal'\" class=\"documenten-metada-form-input\">\n <cds-radio\n *ngFor=\"let option of ADDITONAL_DOCUMENT_DATE_OPTIONS\"\n [value]=\"option.value\"\n [checked]=\"obs.additionalDate === option.value\"\n [required]=\"true\"\n (click)=\"setAdditionalDate(option.value)\"\n name=\"radio-inline\"\n >\n {{ option.translationKey | translate }}\n </cds-radio>\n </cds-radio-group>\n @if (supportsTrefwoorden) {\n <cds-text-label>\n {{ 'document.tags' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.tagsTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-text-label>\n <div class=\"documenten-metada-form-input\">\n <cds-combo-box\n [type]=\"'multi'\"\n [placeholder]=\"'document.tagsPlaceholder' | translate\"\n [disabled]=\"obs.disabled || obs.tagItems.length === 0\"\n [appendInline]=\"true\"\n (selected)=\"tagsSelected($event)\"\n >\n >\n <cds-dropdown-list [items]=\"obs.tagItems || []\"></cds-dropdown-list>\n </cds-combo-box>\n </div>\n }\n </div>\n\n <div class=\"documenten-metadata-form-column\">\n <cds-text-label>\n {{ 'document.inputTitle' | translate }}\n <input\n [placeholder]=\"'document.inputTitlePlaceholder' | translate\"\n [required]=\"true\"\n cdsText\n class=\"documenten-metada-form-input\"\n id=\"titel\"\n formControlName=\"titel\"\n />\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.inputTitleTooltip' | translate\"\n [align]=\"'bottom'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-text-label>\n <cds-textarea-label>\n {{ 'document.inputDescription' | translate }}\n <textarea\n [placeholder]=\"'document.inputDescriptionPlaceholder' | translate\"\n [required]=\"true\"\n [rows]=\"5\"\n cdsTextArea\n class=\"documenten-metada-form-description-input documenten-metada-form-input\"\n id=\"beschrijving\"\n formControlName=\"beschrijving\"\n ></textarea>\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.inputDescriptionTooltip' | translate\"\n [align]=\"'bottom'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-textarea-label>\n <cds-label>\n {{ 'document.creationDate' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.creationDateTooltip' | translate\"\n [align]=\"'bottom'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n <div class=\"documenten-metada-form-input\">\n <cds-date-picker\n [placeholder]=\"'DD-MM-YYYY'\"\n [dateFormat]=\"'d-m-Y'\"\n id=\"creatiedatum\"\n formControlName=\"creatiedatum\"\n >\n </cds-date-picker>\n </div>\n </cds-label>\n <cds-label>\n {{ 'document.status' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.statusTooltip' | translate\"\n [align]=\"'bottom'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-label>\n <div class=\"documenten-metada-form-input\">\n <cds-dropdown\n [placeholder]=\"'document.statusPlaceholder' | translate\"\n [disabled]=\"obs.disabled || (statusDisabled$ | async)\"\n id=\"status\"\n [appendInline]=\"true\"\n (selected)=\"statusSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs.statusItems || []\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n <cds-date-picker\n *ngIf=\"obs.additionalDate === 'received'\"\n [label]=\"'document.additionalDate' | translate\"\n [placeholder]=\"'DD-MM-YYYY'\"\n [dateFormat]=\"'d-m-Y'\"\n id=\"ontvangstdatum\"\n formControlName=\"ontvangstdatum\"\n ></cds-date-picker>\n <cds-date-picker\n *ngIf=\"obs.additionalDate === 'sent'\"\n [label]=\"'document.additionalDate' | translate\"\n [placeholder]=\"'DD-MM-YYYY'\"\n [dateFormat]=\"'d-m-Y'\"\n id=\"verzenddatum\"\n formControlName=\"verzenddatum\"\n ></cds-date-picker>\n </div>\n </div>\n </form>\n</ng-template>\n", styles: [".documenten-metadata-form-columns-container{display:flex;justify-content:space-between}.documenten-metadata-form-column{flex:1;margin-right:1rem}.documenten-metada-form-input{margin-bottom:18px!important;width:100%!important}.documenten-metada-form-description-input{width:100%}::ng-deep .cds--date-picker,::ng-deep .cds--date-picker-container,::ng-deep .cds--date-picker__input,::ng-deep .cds--date-picker-input__wrapper,::ng-deep .cds--date-picker-input__wrapper>span{width:100%}::ng-deep .cds--date-picker.cds--date-picker--single .cds--date-picker__input{inline-size:100%}.metadata-modal-footer button{width:100%}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
441
+ ], template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<v-modal\n #metadataModal\n *ngIf=\"{\n file: file$ | async,\n disabled: disabled$ | async,\n isDefinitiveStatus: isDefinitiveStatus$ | async,\n languageItems: languageItems$ | async,\n statusItems: statusItems$ | async,\n tagItems: tagItems$ | async,\n userEmail: userEmail$ | async,\n open: open$ | async,\n additionalDate: additionalDocumentDate$ | async,\n } as obs\"\n [maxWidthPx]=\"1280\"\n (closeEvent)=\"closeModal()\"\n>\n <div role=\"header\">\n @if (isEditMode) {\n <h3 cdsModalHeaderHeading>\n {{ 'document.editMetadata' | translate }}\n </h3>\n } @else {\n <h3 cdsModalHeaderHeading>\n {{ 'document.fillInMetadata' | translate }}\n </h3>\n }\n </div>\n\n <div role=\"content\">\n @if (obs.open) {\n <ng-container *ngTemplateOutlet=\"metadataForm; context: {obs: obs}\"></ng-container>\n }\n </div>\n\n <div role=\"footer\" class=\"metadata-modal-footer\">\n <button cdsButton=\"ghost\" (click)=\"closeModal()\" [disabled]=\"obs.disabled\">\n {{ 'document.cancel' | translate }}\n </button>\n\n <button\n cdsButton=\"primary\"\n type=\"submit\"\n [disabled]=\"obs.disabled || !documentenApiMetadataForm.valid || obs.isDefinitiveStatus\"\n (click)=\"save()\"\n >\n {{ 'document.save' | translate }}\n </button>\n </div>\n</v-modal>\n\n<ng-template #metadataForm let-obs=\"obs\">\n <form [formGroup]=\"documentenApiMetadataForm\">\n <div class=\"documenten-metadata-form-columns-container\">\n <div class=\"documenten-metadata-form-column\">\n <cds-text-label class=\"documenten-metada-form-input\">\n {{ 'document.filename' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.filenameTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n <input\n [value]=\"filename\"\n [placeholder]=\"'document.filenamePlaceholder' | translate\"\n [required]=\"true\"\n cdsText\n type=\"text\"\n id=\"bestandsnaam\"\n formControlName=\"bestandsnaam\"\n />\n </cds-text-label>\n <cds-text-label class=\"documenten-metada-form-input\">\n {{ 'document.author' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.authorTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n <input\n [value]=\"author\"\n [placeholder]=\"'document.authorPlaceholder' | translate\"\n [required]=\"true\"\n cdsText\n id=\"auteur\"\n formControlName=\"auteur\"\n />\n </cds-text-label>\n <cds-text-label>\n {{ 'document.language' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.languageTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-text-label>\n <div class=\"documenten-metada-form-input\">\n <cds-dropdown\n *ngIf=\"obs.languageItems\"\n [disabled]=\"obs.disabled || (languageDisabled$ | async)\"\n [appendInline]=\"true\"\n [placeholder]=\"'document.languagePlaceholder' | translate\"\n id=\"language\"\n (selected)=\"languageSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs.languageItems || []\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n <cds-label>\n {{ 'document.confidentialityLevel' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.confidentialityLevelTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-label>\n <div class=\"documenten-metada-form-input\">\n <cds-dropdown\n [placeholder]=\"'document.confidentialityPlaceholder' | translate\"\n id=\"vertrouwelijkheidaanduiding\"\n [appendInline]=\"true\"\n [disabled]=\"obs.disabled || (confidentialityLevelDisabled$ | async)\"\n (selected)=\"confidentialityLevelSelected($event)\"\n >\n <cds-dropdown-list [items]=\"confidentialityLevelItems$ | async\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n <ng-container *ngIf=\"{documentTypeItems: documentTypeItems$ | async} as obs\">\n <cds-label>\n {{ 'document.informatieobjecttype' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.informatieobjecttypeTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-label>\n <div class=\"documenten-metada-form-input\">\n <cds-dropdown\n [placeholder]=\"'document.informatieobjecttypePlaceholder' | translate\"\n [disabled]=\"obs.disabled || (informatieobjecttypeDisabled$ | async)\"\n id=\"informatieobjecttype\"\n [appendInline]=\"true\"\n (selected)=\"informatieobjecttypeSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs.documentTypeItems || []\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n </ng-container>\n <cds-text-label name=\"'additionalDate'\">\n {{ 'document.additionalDate' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.additionalDateTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-text-label>\n <cds-radio-group [orientation]=\"'horizontal'\" class=\"documenten-metada-form-input\">\n <cds-radio\n *ngFor=\"let option of ADDITONAL_DOCUMENT_DATE_OPTIONS\"\n [value]=\"option.value\"\n [checked]=\"obs.additionalDate === option.value\"\n [required]=\"true\"\n (click)=\"setAdditionalDate(option.value)\"\n name=\"radio-inline\"\n >\n {{ option.translationKey | translate }}\n </cds-radio>\n </cds-radio-group>\n @if (supportsTrefwoorden) {\n <cds-text-label>\n {{ 'document.tags' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.tagsTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-text-label>\n <div class=\"documenten-metada-form-input\">\n <cds-combo-box\n [type]=\"'multi'\"\n [placeholder]=\"'document.tagsPlaceholder' | translate\"\n [disabled]=\"obs.disabled || obs.tagItems.length === 0\"\n [appendInline]=\"true\"\n (selected)=\"tagsSelected($event)\"\n >\n >\n <cds-dropdown-list [items]=\"obs.tagItems || []\"></cds-dropdown-list>\n </cds-combo-box>\n </div>\n }\n </div>\n\n <div class=\"documenten-metadata-form-column\">\n <cds-text-label>\n {{ 'document.inputTitle' | translate }}\n <input\n [placeholder]=\"'document.inputTitlePlaceholder' | translate\"\n [required]=\"true\"\n cdsText\n class=\"documenten-metada-form-input\"\n id=\"titel\"\n formControlName=\"titel\"\n />\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.inputTitleTooltip' | translate\"\n [align]=\"'bottom'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-text-label>\n <cds-textarea-label>\n {{ 'document.inputDescription' | translate }}\n <textarea\n [placeholder]=\"'document.inputDescriptionPlaceholder' | translate\"\n [required]=\"true\"\n [rows]=\"5\"\n cdsTextArea\n class=\"documenten-metada-form-description-input documenten-metada-form-input\"\n id=\"beschrijving\"\n formControlName=\"beschrijving\"\n ></textarea>\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.inputDescriptionTooltip' | translate\"\n [align]=\"'bottom'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-textarea-label>\n <cds-label>\n {{ 'document.creationDate' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.creationDateTooltip' | translate\"\n [align]=\"'bottom'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n <div class=\"documenten-metada-form-input\">\n <cds-date-picker\n [placeholder]=\"'DD-MM-YYYY'\"\n [dateFormat]=\"'d-m-Y'\"\n id=\"creatiedatum\"\n formControlName=\"creatiedatum\"\n >\n </cds-date-picker>\n </div>\n </cds-label>\n <cds-label>\n {{ 'document.status' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.statusTooltip' | translate\"\n [align]=\"'bottom'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-label>\n <div class=\"documenten-metada-form-input\">\n <cds-dropdown\n [placeholder]=\"'document.statusPlaceholder' | translate\"\n [disabled]=\"obs.disabled || (statusDisabled$ | async)\"\n id=\"status\"\n [appendInline]=\"true\"\n (selected)=\"statusSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs.statusItems || []\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n <cds-date-picker\n *ngIf=\"obs.additionalDate === 'received'\"\n [label]=\"'document.additionalDate' | translate\"\n [placeholder]=\"'DD-MM-YYYY'\"\n [dateFormat]=\"'d-m-Y'\"\n id=\"ontvangstdatum\"\n formControlName=\"ontvangstdatum\"\n ></cds-date-picker>\n <cds-date-picker\n *ngIf=\"obs.additionalDate === 'sent'\"\n [label]=\"'document.additionalDate' | translate\"\n [placeholder]=\"'DD-MM-YYYY'\"\n [dateFormat]=\"'d-m-Y'\"\n id=\"verzenddatum\"\n formControlName=\"verzenddatum\"\n ></cds-date-picker>\n </div>\n </div>\n </form>\n</ng-template>\n", styles: [".documenten-metadata-form-columns-container{display:flex;justify-content:space-between}.documenten-metadata-form-column{flex:1;margin-right:1rem}.documenten-metada-form-input{margin-bottom:18px!important;width:100%!important}.documenten-metada-form-description-input{width:100%}::ng-deep .cds--date-picker,::ng-deep .cds--date-picker-container,::ng-deep .cds--date-picker__input,::ng-deep .cds--date-picker-input__wrapper,::ng-deep .cds--date-picker-input__wrapper>span{width:100%}::ng-deep .cds--date-picker.cds--date-picker--single .cds--date-picker__input{inline-size:100%}.metadata-modal-footer{display:flex;justify-content:flex-end}.metadata-modal-footer button{width:100%}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
440
442
  }], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i2.DocumentService }, { type: i3.DocumentenApiTagService }, { type: i4.FormBuilder }, { type: i5.KeycloakService }, { type: i6.ModalService }, { type: i7.TranslateService }, { type: i6.ValtimoModalService }], propDecorators: { metadataModal: [{
441
443
  type: ViewChild,
442
444
  args: ['metadataModal']
@@ -489,4 +491,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
489
491
  }], modalClose: [{
490
492
  type: Output
491
493
  }] } });
492
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnRlbi1hcGktbWV0YWRhdGEtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby96Z3cvc3JjL2xpYi9tb2R1bGVzL2RvY3VtZW50ZW4tYXBpL2NvbXBvbmVudHMvZG9jdW1lbnRlbi1hcGktbWV0YWRhdGEtbW9kYWwvZG9jdW1lbnRlbi1hcGktbWV0YWRhdGEtbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby96Z3cvc3JjL2xpYi9tb2R1bGVzL2RvY3VtZW50ZW4tYXBpL2NvbXBvbmVudHMvZG9jdW1lbnRlbi1hcGktbWV0YWRhdGEtbW9kYWwvZG9jdW1lbnRlbi1hcGktbWV0YWRhdGEtbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFFSCxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQVN2QixPQUFPLEVBQ0wsZUFBZSxFQUNmLGFBQWEsRUFDYixNQUFNLEVBQ04sSUFBSSxFQUNKLEdBQUcsRUFFSCxFQUFFLEVBQ0YsU0FBUyxFQUNULE9BQU8sRUFDUCxZQUFZLEVBQ1osU0FBUyxFQUNULElBQUksR0FDTCxNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBQyxlQUFlLEVBQW1CLE1BQU0scUJBQXFCLENBQUM7QUFJdEUsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ25DLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBSUwsbUJBQW1CLEVBQ25CLFVBQVUsR0FDWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFDTCxnQkFBZ0Is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O3dCQUNqQixjQUFjO3dCQUNkLFlBQVk7d0JBQ1osZ0JBQWdCO3dCQUNoQixjQUFjO3dCQUNkLFVBQVU7d0JBQ1YsZ0JBQWdCO3dCQUNoQixXQUFXO3dCQUNYLFdBQVc7d0JBQ1gsV0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLFlBQVk7d0JBQ1osU0FBUzt3QkFDVCxhQUFhO3dCQUNiLGVBQWU7d0JBQ2YsWUFBWTtxQkFDYjsyU0FHMkIsYUFBYTtzQkFBeEMsU0FBUzt1QkFBQyxlQUFlO2dCQUVqQixTQUFTO3NCQUFqQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ08sYUFBYTtzQkFBekIsS0FBSztnQkFPTywyQkFBMkI7c0JBQXZDLEtBQUs7Z0JBT08sa0JBQWtCO3NCQUE5QixLQUFLO2dCQU9PLG9CQUFvQjtzQkFBaEMsS0FBSztnQkFPTyxtQkFBbUI7c0JBQS9CLEtBQUs7Z0JBT08sZUFBZTtzQkFBM0IsS0FBSztnQkFPTyxlQUFlO3NCQUEzQixLQUFLO2dCQU9PLGFBQWE7c0JBQXpCLEtBQUs7Z0JBT08sa0JBQWtCO3NCQUE5QixLQUFLO2dCQU9HLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFJTyxJQUFJO3NCQUFoQixLQUFLO2dCQVVHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBRUksUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7XG4gIEFkZGl0aW9uYWxEb2N1bWVudERhdGUsXG4gIENvbmZpZGVudGlhbGl0eUxldmVsLFxuICBEb2N1bWVudGVuQXBpTWV0YWRhdGEsXG4gIERvY3VtZW50TGFuZ3VhZ2UsXG4gIERvY3VtZW50U3RhdHVzLFxufSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBmaWx0ZXIsXG4gIGZyb20sXG4gIG1hcCxcbiAgT2JzZXJ2YWJsZSxcbiAgb2YsXG4gIHN0YXJ0V2l0aCxcbiAgU3ViamVjdCxcbiAgU3Vic2NyaXB0aW9uLFxuICBzd2l0Y2hNYXAsXG4gIHRha2UsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7RG9jdW1lbnRTZXJ2aWNlfSBmcm9tICdAdmFsdGltby9kb2N1bWVudCc7XG5pbXBvcnQge0tleWNsb2FrU2VydmljZX0gZnJvbSAna2V5Y2xvYWstYW5ndWxhcic7XG5pbXBvcnQge3RhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIEZvcm1CdWlsZGVyLFxuICBGb3JtR3JvdXAsXG4gIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gIFZhbGlkYXRvcnMsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIElucHV0TGFiZWxNb2R1bGUsXG4gIElucHV0TW9kdWxlLFxuICBNb2RhbFNlcnZpY2UsXG4gIFNlbGVjdE1vZHVsZSxcbiAgVmFsdGltb01vZGFsU2VydmljZSxcbiAgVk1vZGFsQ29tcG9uZW50LFxuICBWTW9kYWxNb2R1bGUsXG59IGZyb20gJ0B2YWx0aW1vL2NvbXBvbmVudHMnO1xuXG5pbXBvcnQge1xuICBCdXR0b25Nb2R1bGUsXG4gIENvbWJvQm94TW9kdWxlLFxuICBEYXRlUGlja2VyTW9kdWxlLFxuICBEcm9wZG93bk1vZHVsZSxcbiAgSWNvbk1vZHVsZSxcbiAgSW5wdXRNb2R1bGUgYXMgQ2FyYm9uSW5wdXRNb2R1bGUsXG4gIExpc3RJdGVtLFxuICBNb2RhbE1vZHVsZSxcbiAgUmFkaW9Nb2R1bGUsXG4gIFRhZ01vZHVsZSxcbiAgVG9vbHRpcE1vZHVsZSxcbn0gZnJvbSAnY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhcic7XG5pbXBvcnQge0RvY3VtZW50ZW5BcGlUYWdTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kb2N1bWVudGVuLWFwaS10YWcuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tZG9jdW1lbnRlbi1hcGktbWV0YWRhdGEtbW9kYWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vZG9jdW1lbnRlbi1hcGktbWV0YWRhdGEtbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kb2N1bWVudGVuLWFwaS1tZXRhZGF0YS1tb2RhbC5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQnV0dG9uTW9kdWxlLFxuICAgIENhcmJvbklucHV0TW9kdWxlLFxuICAgIENvbWJvQm94TW9kdWxlLFxuICAgIENvbW1vbk1vZHVsZSxcbiAgICBEYXRlUGlja2VyTW9kdWxlLFxuICAgIERyb3Bkb3duTW9kdWxlLFxuICAgIEljb25Nb2R1bGUsXG4gICAgSW5wdXRMYWJlbE1vZHVsZSxcbiAgICBJbnB1dE1vZHVsZSxcbiAgICBNb2RhbE1vZHVsZSxcbiAgICBSYWRpb01vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIFNlbGVjdE1vZHVsZSxcbiAgICBUYWdNb2R1bGUsXG4gICAgVG9vbHRpcE1vZHVsZSxcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgVk1vZGFsTW9kdWxlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBEb2N1bWVudGVuQXBpTWV0YWRhdGFNb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBAVmlld0NoaWxkKCdtZXRhZGF0YU1vZGFsJykgbWV0YWRhdGFNb2RhbDogVk1vZGFsQ29tcG9uZW50O1xuXG4gIEBJbnB1dCgpIGRpc2FibGVkJCE6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIEBJbnB1dCgpIGZpbGUkITogT2JzZXJ2YWJsZTxhbnk+O1xuXG4gIEBJbnB1dCgpIGF1dGhvcjogc3RyaW5nO1xuICBASW5wdXQoKSBjb25maWRlbnRpYWxpdHlMZXZlbDogc3RyaW5nO1xuICBASW5wdXQoKSBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBASW5wdXQoKSBzZXQgZGlzYWJsZUF1dGhvcih2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5hdXRldXIuZGlzYWJsZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmF1dGV1ci5lbmFibGUoKTtcbiAgICB9XG4gIH1cbiAgQElucHV0KCkgc2V0IGRpc2FibGVDb25maWRlbnRpYWxpdHlMZXZlbCh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5jb25maWRlbnRpYWxpdHlMZXZlbEZvcm1Db250cm9sLmRpc2FibGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb25maWRlbnRpYWxpdHlMZXZlbEZvcm1Db250cm9sLmVuYWJsZSgpO1xuICAgIH1cbiAgfVxuICBASW5wdXQoKSBzZXQgZGlzYWJsZURlc2NyaXB0aW9uKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLmJlc2NocmlqdmluZy5kaXNhYmxlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYmVzY2hyaWp2aW5nLmVuYWJsZSgpO1xuICAgIH1cbiAgfVxuICBASW5wdXQoKSBzZXQgZGlzYWJsZURvY3VtZW50VGl0bGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMudGl0ZWwuZGlzYWJsZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRpdGVsLmVuYWJsZSgpO1xuICAgIH1cbiAgfVxuICBASW5wdXQoKSBzZXQgZGlzYWJsZURvY3VtZW50VHlwZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5pbmZvcm1hdGllb2JqZWN0dHlwZUZvcm1Db250cm9sLmRpc2FibGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbmZvcm1hdGllb2JqZWN0dHlwZUZvcm1Db250cm9sLmVuYWJsZSgpO1xuICAgIH1cbiAgfVxuICBASW5wdXQoKSBzZXQgZGlzYWJsZUZpbGVuYW1lKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLmJlc3RhbmRzbmFhbS5kaXNhYmxlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYmVzdGFuZHNuYWFtLmVuYWJsZSgpO1xuICAgIH1cbiAgfVxuICBASW5wdXQoKSBzZXQgZGlzYWJsZUxhbmd1YWdlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLmxhbmd1YWdlRm9ybUNvbnRyb2wuZGlzYWJsZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxhbmd1YWdlRm9ybUNvbnRyb2wuZW5hYmxlKCk7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpIHNldCBkaXNhYmxlU3RhdHVzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLnN0YXR1c0Zvcm1Db250cm9sLmRpc2FibGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGF0dXNGb3JtQ29udHJvbC5lbmFibGUoKTtcbiAgICB9XG4gIH1cbiAgQElucHV0KCkgc2V0IGRpc2FibGVUcmVmd29vcmRlbih2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy50YWdGb3JtQ29udHJvbC5kaXNhYmxlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGFnRm9ybUNvbnRyb2wuZW5hYmxlKCk7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpIGRvY3VtZW50VGl0bGUgPSAnJztcbiAgQElucHV0KCkgZG9jdW1lbnRUeXBlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGZpbGVuYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGlzRWRpdE1vZGU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGxhbmd1YWdlOiBzdHJpbmc7XG5cbiAgcHVibGljIHJlYWRvbmx5IG9wZW4kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgQElucHV0KCkgc2V0IG9wZW4odmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLm9wZW4kLm5leHQodmFsdWUpO1xuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuTW9kYWwodGhpcy5tZXRhZGF0YU1vZGFsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tb2RhbFNlcnZpY2UuY2xvc2VNb2RhbCgpO1xuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgpIHN0YXR1czogc3RyaW5nO1xuICBASW5wdXQoKSBzdXBwb3J0c1RyZWZ3b29yZGVuID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIG1ldGFkYXRhOiBFdmVudEVtaXR0ZXI8RG9jdW1lbnRlbkFwaU1ldGFkYXRhPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIG1vZGFsQ2xvc2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBwdWJsaWMgZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybTogRm9ybUdyb3VwID0gdGhpcy5mYi5ncm91cCh7XG4gICAgYmVzdGFuZHNuYWFtOiB0aGlzLmZiLmNvbnRyb2woJycsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgIHRpdGVsOiB0aGlzLmZiLmNvbnRyb2woJycsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgIGF1dGV1cjogdGhpcy5mYi5jb250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICBiZXNjaHJpanZpbmc6IHRoaXMuZmIuY29udHJvbCgnJywgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgdGFhbDogdGhpcy5mYi5jb250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICBpbmZvcm1hdGllb2JqZWN0dHlwZTogdGhpcy5mYi5jb250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICBzdGF0dXM6IHRoaXMuZmIuY29udHJvbCgnJywgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgdmVydHJvdXdlbGlqa2hlaWRhYW5kdWlkaW5nOiB0aGlzLmZiLmNvbnRyb2woJycsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgIGNyZWF0aWVkYXR1bTogdGhpcy5mYi5jb250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICBvbnR2YW5nc3RkYXR1bTogdGhpcy5mYi5jb250cm9sKCcnKSxcbiAgICB2ZXJ6ZW5kZGF0dW06IHRoaXMuZmIuY29udHJvbCgnJyksXG4gICAgdHJlZndvb3JkZW46IHRoaXMuZmIuY29udHJvbChbXSksXG4gIH0pO1xuXG4gIHB1YmxpYyBnZXQgY29uZmlkZW50aWFsaXR5TGV2ZWxGb3JtQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2w8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5nZXQoJ3ZlcnRyb3V3ZWxpamtoZWlkYWFuZHVpZGluZycpO1xuICB9XG4gIHB1YmxpYyBnZXQgY29uZmlkZW50aWFsaXR5TGV2ZWxEaXNhYmxlZCQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlkZW50aWFsaXR5TGV2ZWxGb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgIHN0YXJ0V2l0aChudWxsKSxcbiAgICAgIG1hcCgoKSA9PiB0aGlzLmNvbmZpZGVudGlhbGl0eUxldmVsRm9ybUNvbnRyb2wuZGlzYWJsZWQpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaW5mb3JtYXRpZW9iamVjdHR5cGVGb3JtQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2w8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5nZXQoJ2luZm9ybWF0aWVvYmplY3R0eXBlJyk7XG4gIH1cbiAgcHVibGljIGdldCBpbmZvcm1hdGllb2JqZWN0dHlwZURpc2FibGVkJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5pbmZvcm1hdGllb2JqZWN0dHlwZUZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgc3RhcnRXaXRoKG51bGwpLFxuICAgICAgbWFwKCgpID0+IHRoaXMuaW5mb3JtYXRpZW9iamVjdHR5cGVGb3JtQ29udHJvbC5kaXNhYmxlZClcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldCBsYW5ndWFnZUZvcm1Db250cm9sKCk6IEFic3RyYWN0Q29udHJvbDxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5kb2N1bWVudGVuQXBpTWV0YWRhdGFGb3JtLmdldCgndGFhbCcpO1xuICB9XG5cbiAgcHVibGljIGdldCBsYW5ndWFnZURpc2FibGVkJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5sYW5ndWFnZUZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgc3RhcnRXaXRoKG51bGwpLFxuICAgICAgbWFwKCgpID0+IHRoaXMubGFuZ3VhZ2VGb3JtQ29udHJvbC5kaXNhYmxlZClcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldCBzdGF0dXNGb3JtQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2w8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5nZXQoJ3N0YXR1cycpO1xuICB9XG4gIHB1YmxpYyBnZXQgc3RhdHVzRGlzYWJsZWQkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXR1c0Zvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgc3RhcnRXaXRoKG51bGwpLFxuICAgICAgbWFwKCgpID0+IHRoaXMuaW5mb3JtYXRpZW9iamVjdHR5cGVGb3JtQ29udHJvbC5kaXNhYmxlZClcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldCB0YWdGb3JtQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2w8c3RyaW5nW10+IHtcbiAgICByZXR1cm4gdGhpcy5kb2N1bWVudGVuQXBpTWV0YWRhdGFGb3JtLmdldCgndHJlZndvb3JkZW4nKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdGl0ZWwoKTogQWJzdHJhY3RDb250cm9sPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmRvY3VtZW50ZW5BcGlNZXRhZGF0YUZvcm0uZ2V0KCd0aXRlbCcpO1xuICB9XG5cbiAgcHVibGljIGdldCBiZXNjaHJpanZpbmcoKTogQWJzdHJhY3RDb250cm9sPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmRvY3VtZW50ZW5BcGlNZXRhZGF0YUZvcm0uZ2V0KCdiZXNjaHJpanZpbmcnKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYXV0ZXVyKCk6IEFic3RyYWN0Q29udHJvbDxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5kb2N1bWVudGVuQXBpTWV0YWRhdGFGb3JtLmdldCgnYXV0ZXVyJyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGJlc3RhbmRzbmFhbSgpOiBBYnN0cmFjdENvbnRyb2w8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5nZXQoJ2Jlc3RhbmRzbmFhbScpO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IGlzRGVmaW5pdGl2ZVN0YXR1cyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgQ09ORklERU5USUFMSVRZX0xFVkVMUzogQXJyYXk8Q29uZmlkZW50aWFsaXR5TGV2ZWw+ID0gW1xuICAgICdvcGVuYmFhcicsXG4gICAgJ2JlcGVya3Rfb3BlbmJhYXInLFxuICAgICdpbnRlcm4nLFxuICAgICd6YWFrdmVydHJvdXdlbGlqaycsXG4gICAgJ3ZlcnRyb3V3ZWxpamsnLFxuICAgICdjb25maWRlbnRpZWVsJyxcbiAgICAnZ2VoZWltJyxcbiAgICAnemVlcl9nZWhlaW0nLFxuICBdO1xuICBwdWJsaWMgcmVhZG9ubHkgY29uZmlkZW50aWFsaXR5TGV2ZWxJdGVtcyQ6IE9ic2VydmFibGU8QXJyYXk8TGlzdEl0ZW0+PiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuY29uZmlkZW50aWFsaXR5TGV2ZWxGb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgIHN0YXJ0V2l0aCh0aGlzLmNvbmZpZGVudGlhbGl0eUxldmVsRm9ybUNvbnRyb2wudmFsdWUpXG4gICAgKSxcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKCdrZXknKSxcbiAgXSkucGlwZShcbiAgICBtYXAoKFtjdXJyZW50Q29uZmlkZW50aWFsaXR5TGV2ZWxdKSA9PlxuICAgICAgdGhpcy5DT05GSURFTlRJQUxJVFlfTEVWRUxTLm1hcChjb25maWRlbnRpYWxpdHlMZXZlbCA9PiAoe1xuICAgICAgICBpZDogY29uZmlkZW50aWFsaXR5TGV2ZWwsXG4gICAgICAgIGNvbnRlbnQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGBkb2N1bWVudC4ke2NvbmZpZGVudGlhbGl0eUxldmVsfWApLFxuICAgICAgICBzZWxlY3RlZDogY3VycmVudENvbmZpZGVudGlhbGl0eUxldmVsID09PSBjb25maWRlbnRpYWxpdHlMZXZlbCxcbiAgICAgIH0pKVxuICAgIClcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgQURESVRPTkFMX0RPQ1VNRU5UX0RBVEVfT1BUSU9OUzogQXJyYXk8e1xuICAgIHZhbHVlOiBBZGRpdGlvbmFsRG9jdW1lbnREYXRlO1xuICAgIHRyYW5zbGF0aW9uS2V5OiBzdHJpbmc7XG4gIH0+ID0gW1xuICAgIHtcbiAgICAgIHZhbHVlOiAnbmVpdGhlcicsXG4gICAgICB0cmFuc2xhdGlvbktleTogJ2RvY3VtZW50Lm5vQWRkaXRpb25hbERhdGUnLFxuICAgIH0sXG4gICAge1xuICAgICAgdmFsdWU6ICdzZW50JyxcbiAgICAgIHRyYW5zbGF0aW9uS2V5OiAnZG9jdW1lbnQuc2VuZERhdGUnLFxuICAgIH0sXG4gICAge1xuICAgICAgdmFsdWU6ICdyZWNlaXZlZCcsXG4gICAgICB0cmFuc2xhdGlvbktleTogJ2RvY3VtZW50LnJlY2VpcHREYXRlJyxcbiAgICB9LFxuICBdO1xuICBwdWJsaWMgcmVhZG9ubHkgY2xlYXJTdGF0dXNTZWxlY3Rpb24kID0gbmV3IFN1YmplY3Q8bnVsbD4oKTtcbiAgcHVibGljIHJlYWRvbmx5IGFkZGl0aW9uYWxEb2N1bWVudERhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBZGRpdGlvbmFsRG9jdW1lbnREYXRlPignbmVpdGhlcicpO1xuICBwdWJsaWMgcmVhZG9ubHkgU1RBVFVTRVM6IEFycmF5PERvY3VtZW50U3RhdHVzPiA9IFtcbiAgICAnaW5fYmV3ZXJraW5nJyxcbiAgICAndGVyX3Zhc3RzdGVsbGluZycsXG4gICAgJ2RlZmluaXRpZWYnLFxuICAgICdnZWFyY2hpdmVlcmQnLFxuICBdO1xuICBwdWJsaWMgcmVhZG9ubHkgUkVDRUlQVF9TVEFUVVNFUzogQXJyYXk8RG9jdW1lbnRTdGF0dXM+ID0gWydkZWZpbml0aWVmJywgJ2dlYXJjaGl2ZWVyZCddO1xuICBwdWJsaWMgcmVhZG9ubHkgZm9ybURhdGEkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEb2N1bWVudGVuQXBpTWV0YWRhdGE+KG51bGwpO1xuICBwdWJsaWMgcmVhZG9ubHkgc3RhdHVzSXRlbXMkOiBPYnNlcnZhYmxlPEFycmF5PExpc3RJdGVtPj4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmFkZGl0aW9uYWxEb2N1bWVudERhdGUkLFxuICAgIHRoaXMuc3RhdHVzRm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKHRoaXMuc3RhdHVzRm9ybUNvbnRyb2wudmFsdWUpKSxcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKCdrZXknKSxcbiAgXSkucGlwZShcbiAgICB0YXAoKFthZGRpdGlvbmFsRG9jdW1lbnREYXRlLCBjdXJyZW50U3RhdHVzXSkgPT4ge1xuICAgICAgdGhpcy5mb3JtRGF0YSQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoZm9ybURhdGEgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgYWRkaXRpb25hbERvY3VtZW50RGF0ZSA9PT0gJ3JlY2VpdmVkJyAmJlxuICAgICAgICAgIChmb3JtRGF0YS5zdGF0dXMgPT09ICdpbl9iZXdlcmtpbmcnIHx8IGZvcm1EYXRhLnN0YXR1cyA9PT0gJ3Rlcl92YXN0c3RlbGxpbmcnKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmNsZWFyU3RhdHVzU2VsZWN0aW9uJC5uZXh0KG51bGwpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KSxcbiAgICBtYXAoKFthZGRpdGlvbmFsRG9jdW1lbnREYXRlLCBjdXJyZW50U3RhdHVzXSkgPT5cbiAgICAgIChhZGRpdGlvbmFsRG9jdW1lbnREYXRlID09PSAncmVjZWl2ZWQnID8gdGhpcy5SRUNFSVBUX1NUQVRVU0VTIDogdGhpcy5TVEFUVVNFUykubWFwKFxuICAgICAgICBzdGF0dXMgPT4gKHtcbiAgICAgICAgICBpZDogc3RhdHVzLFxuICAgICAgICAgIGNvbnRlbnQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGBkb2N1bWVudC4ke3N0YXR1c31gKSxcbiAgICAgICAgICBzZWxlY3RlZDogY3VycmVudFN0YXR1cyA9PT0gc3RhdHVzLFxuICAgICAgICB9KVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZG9jdW1lbnREZWZpbml0aW9uTmFtZSQ6IE9ic2VydmFibGU8c3RyaW5nPiA9IGZyb20oXG4gICAgdGhpcy5yb3V0ZS5wYXJhbXMucGlwZShtYXAocGFyYW1zID0+IHBhcmFtcz8uZG9jdW1lbnREZWZpbml0aW9uTmFtZSkpXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHRhZ0l0ZW1zJDogT2JzZXJ2YWJsZTxBcnJheTxMaXN0SXRlbT4+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lJCxcbiAgICB0aGlzLnRhZ0Zvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aCh0aGlzLnRhZ0Zvcm1Db250cm9sLnZhbHVlKSksXG4gIF0pLnBpcGUoXG4gICAgZmlsdGVyKChbZG9jdW1lbnREZWZpbml0aW9uTmFtZV0pID0+ICEhZG9jdW1lbnREZWZpbml0aW9uTmFtZSksXG4gICAgc3dpdGNoTWFwKChbZG9jdW1lbnREZWZpbml0aW9uTmFtZSwgdGFnRm9ybUNvbnRyb2xWYWx1ZV0pID0+XG4gICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgdGhpcy5kb2N1bWVudGVuQXBpVGFnU2VydmljZS5nZXRUYWdzKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpLFxuICAgICAgICBvZih0YWdGb3JtQ29udHJvbFZhbHVlKSxcbiAgICAgIF0pXG4gICAgKSxcbiAgICBtYXAoKFt0YWdzLCB0YWdGb3JtQ29udHJvbFZhbHVlXSkgPT5cbiAgICAgIHRhZ3MubWFwKHRhZyA9PiAoe1xuICAgICAgICBpZDogdGFnLnZhbHVlLFxuICAgICAgICBjb250ZW50OiB0YWcudmFsdWUsXG4gICAgICAgIHNlbGVjdGVkOiAhIXRhZ0Zvcm1Db250cm9sVmFsdWUgPyB0YWdGb3JtQ29udHJvbFZhbHVlLmluY2x1ZGVzKHRhZy52YWx1ZSkgOiBmYWxzZSxcbiAgICAgIH0pKVxuICAgIClcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgTEFOR1VBR0VTOiBBcnJheTxEb2N1bWVudExhbmd1YWdlPiA9IFsnbmxkJywgJ2VuZycsICdkZXUnXTtcbiAgcHVibGljIGxhbmd1YWdlSXRlbXMkOiBPYnNlcnZhYmxlPEFycmF5PExpc3RJdGVtPj4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmxhbmd1YWdlRm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKHRoaXMubGFuZ3VhZ2VGb3JtQ29udHJvbC52YWx1ZSkpLFxuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oJ2tleScpLFxuICBdKS5waXBlKFxuICAgIG1hcCgoW2N1cnJlbnRMYW5ndWFnZV0pID0+IHtcbiAgICAgIHJldHVybiB0aGlzLkxBTkdVQUdFUy5tYXAoXG4gICAgICAgIChsYW5ndWFnZTogYW55KSA9PlxuICAgICAgICAgICh7XG4gICAgICAgICAgICBjb250ZW50OiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChgZG9jdW1lbnQuJHtsYW5ndWFnZX1gKSxcbiAgICAgICAgICAgIGlkOiBsYW5ndWFnZSxcbiAgICAgICAgICAgIHNlbGVjdGVkOiBjdXJyZW50TGFuZ3VhZ2UgPT09IGxhbmd1YWdlLFxuICAgICAgICAgIH0pIGFzIExpc3RJdGVtXG4gICAgICApO1xuICAgIH0pXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGRvY3VtZW50VHlwZUl0ZW1zJDogT2JzZXJ2YWJsZTxBcnJheTxMaXN0SXRlbT4+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5yb3V0ZT8ucGFyYW1zIHx8IG9mKG51bGwpLFxuICAgIHRoaXMucm91dGU/LmZpcnN0Q2hpbGQ/LnBhcmFtcyB8fCBvZihudWxsKSxcbiAgICB0aGlzLnZhbHRpbW9Nb2RhbFNlcnZpY2UuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQsXG4gICAgdGhpcy5pbmZvcm1hdGllb2JqZWN0dHlwZUZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgc3RhcnRXaXRoKHRoaXMuaW5mb3JtYXRpZW9iamVjdHR5cGVGb3JtQ29udHJvbC52YWx1ZSlcbiAgICApLFxuICBdKS5waXBlKFxuICAgIGZpbHRlcihcbiAgICAgIChbcGFyYW1zLCBmaXJzdENoaWxkUGFyYW1zLCBkb2N1bWVudERlZmluaXRpb25OYW1lXSkgPT5cbiAgICAgICAgISEoXG4gICAgICAgICAgcGFyYW1zPy5kb2N1bWVudERlZmluaXRpb25OYW1lIHx8XG4gICAgICAgICAgZmlyc3RDaGlsZFBhcmFtcz8uZG9jdW1lbnREZWZpbml0aW9uTmFtZSB8fFxuICAgICAgICAgIGRvY3VtZW50RGVmaW5pdGlvbk5hbWVcbiAgICAgICAgKVxuICAgICksXG4gICAgc3dpdGNoTWFwKChbcGFyYW1zLCBmaXJzdENoaWxkUGFyYW1zLCBkb2N1bWVudERlZmluaXRpb25OYW1lLCBpbmZvcm1hdGllb2JqZWN0dHlwZVZhbHVlXSkgPT5cbiAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICB0aGlzLmRvY3VtZW50U2VydmljZS5nZXREb2N1bWVudFR5cGVzKFxuICAgICAgICAgIHBhcmFtcz8uZG9jdW1lbnREZWZpbml0aW9uTmFtZSB8fFxuICAgICAgICAgICAgZmlyc3RDaGlsZFBhcmFtcz8uZG9jdW1lbnREZWZpbml0aW9uTmFtZSB8fFxuICAgICAgICAgICAgZG9jdW1lbnREZWZpbml0aW9uTmFtZVxuICAgICAgICApLFxuICAgICAgICBvZihpbmZvcm1hdGllb2JqZWN0dHlwZVZhbHVlKSxcbiAgICAgIF0pXG4gICAgKSxcbiAgICBtYXAoKFtkb2N1bWVudFR5cGVzLCBpbmZvcm1hdGllb2JqZWN0dHlwZVZhbHVlXSkgPT5cbiAgICAgIGRvY3VtZW50VHlwZXMubWFwKCh0eXBlOiBhbnkpID0+ICh7XG4gICAgICAgIGlkOiB0eXBlLnVybCxcbiAgICAgICAgY29udGVudDogdHlwZS5uYW1lLFxuICAgICAgICBzZWxlY3RlZDogaW5mb3JtYXRpZW9iamVjdHR5cGVWYWx1ZSA9PT0gdHlwZS51cmwsXG4gICAgICB9KSlcbiAgICApXG4gICk7XG4gIHB1YmxpYyByZWFkb25seSB1c2VyRW1haWwkID0gZnJvbSh0aGlzLmtleWNsb2FrU2VydmljZS5sb2FkVXNlclByb2ZpbGUoKSkucGlwZShcbiAgICBtYXAodXNlclByb2ZpbGUgPT4gdXNlclByb2ZpbGU/LmVtYWlsIHx8ICcnKVxuICApO1xuXG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgX2ZpbGVTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudFNlcnZpY2U6IERvY3VtZW50U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50ZW5BcGlUYWdTZXJ2aWNlOiBEb2N1bWVudGVuQXBpVGFnU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGtleWNsb2FrU2VydmljZTogS2V5Y2xvYWtTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbW9kYWxTZXJ2aWNlOiBNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdmFsdGltb01vZGFsU2VydmljZTogVmFsdGltb01vZGFsU2VydmljZVxuICApIHt9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMub3BlbkZpbGVTdWJzY3JpcHRpb24oKTtcbiAgICB0aGlzLm9wZW5EaXNhYmxlZFN1YnNjcmlwdGlvbigpO1xuICB9XG5cbiAgcHVibGljIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMub3BlbkZpbGVTdWJzY3JpcHRpb24oKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5pc0RlZmluaXRpdmVTdGF0dXMkLm5leHQoZmFsc2UpO1xuICB9XG5cbiAgcHVibGljIGxhbmd1YWdlU2VsZWN0ZWQoZXZlbnQ6IHtpdGVtOiB7aWQ6IHN0cmluZ319KSB7XG4gICAgaWYgKGV2ZW50Lml0ZW0uaWQpIHtcbiAgICAgIHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgdGFhbDogZXZlbnQuaXRlbS5pZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB0YWdzU2VsZWN0ZWQoZXZlbnQ6IEFycmF5PExpc3RJdGVtPikge1xuICAgIHRoaXMudGFnRm9ybUNvbnRyb2wucGF0Y2hWYWx1ZShldmVudC5maWx0ZXIodGFnID0+IHRhZy5zZWxlY3RlZCkubWFwKHRhZyA9PiB0YWcuaWQpKTtcbiAgfVxuXG4gIHB1YmxpYyBjb25maWRlbnRpYWxpdHlMZXZlbFNlbGVjdGVkKGV2ZW50OiB7aXRlbToge2lkOiBzdHJpbmd9fSkge1xuICAgIGlmIChldmVudC5pdGVtLmlkKSB7XG4gICAgICB0aGlzLmRvY3VtZW50ZW5BcGlNZXRhZGF0YUZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgIHZlcnRyb3V3ZWxpamtoZWlkYWFuZHVpZGluZzogZXZlbnQuaXRlbS5pZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzdGF0dXNTZWxlY3RlZChldmVudDoge2l0ZW06IHtpZDogc3RyaW5nfX0pIHtcbiAgICBpZiAoZXZlbnQuaXRlbS5pZCkge1xuICAgICAgdGhpcy5kb2N1bWVudGVuQXBpTWV0YWRhdGFGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICBzdGF0dXM6IGV2ZW50Lml0ZW0uaWQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaW5mb3JtYXRpZW9iamVjdHR5cGVTZWxlY3RlZChldmVudDoge2l0ZW06IHtpZDogc3RyaW5nfX0pIHtcbiAgICBpZiAoZXZlbnQuaXRlbS5pZCkge1xuICAgICAgdGhpcy5kb2N1bWVudGVuQXBpTWV0YWRhdGFGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICBpbmZvcm1hdGllb2JqZWN0dHlwZTogZXZlbnQuaXRlbS5pZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBwcmVmaWxsRm9ybShmaWxlKSB7XG4gICAgdGhpcy5wcmVmaWxsRmlsZW5hbWVBbmRBdXRob3IoKTtcbiAgICBpZiAoZmlsZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBiZXN0YW5kc25hYW0sXG4gICAgICAgIHRpdGVsLFxuICAgICAgICBhdXRldXIsXG4gICAgICAgIGJlc2NocmlqdmluZyxcbiAgICAgICAgdGFhbCxcbiAgICAgICAgaW5mb3JtYXRpZW9iamVjdHR5cGUsXG4gICAgICAgIHN0YXR1cyxcbiAgICAgICAgdmVydHJvdXdlbGlqa2hlaWRhYW5kdWlkaW5nLFxuICAgICAgICBjcmVhdGllZGF0dW0sXG4gICAgICAgIG9udHZhbmdzdGRhdHVtLFxuICAgICAgICB2ZXJ6ZW5kZGF0dW0sXG4gICAgICAgIHRyZWZ3b29yZGVuLFxuICAgICAgfSA9IGZpbGU7XG5cbiAgICAgIGlmICh2ZXJ6ZW5kZGF0dW0pIHRoaXMuYWRkaXRpb25hbERvY3VtZW50RGF0ZSQubmV4dCgnc2VudCcpO1xuICAgICAgZWxzZSBpZiAob250dmFuZ3N0ZGF0dW0pIHRoaXMuYWRkaXRpb25hbERvY3VtZW50RGF0ZSQubmV4dCgncmVjZWl2ZWQnKTtcbiAgICAgIGVsc2UgdGhpcy5hZGRpdGlvbmFsRG9jdW1lbnREYXRlJC5uZXh0KCduZWl0aGVyJyk7XG5cbiAgICAgIHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgYmVzdGFuZHNuYWFtOiB0aGlzLmZpbGVuYW1lIHx8IGJlc3RhbmRzbmFhbSxcbiAgICAgICAgdGl0ZWw6IHRoaXMuZG9jdW1lbnRUaXRsZSB8fCB0aXRlbCxcbiAgICAgICAgYXV0ZXVyOiB0aGlzLmF1dGhvciB8fCBhdXRldXIsXG4gICAgICAgIGJlc2NocmlqdmluZzogdGhpcy5kZXNjcmlwdGlvbiB8fCBiZXNjaHJpanZpbmcsXG4gICAgICAgIHRhYWw6IHRoaXMubGFuZ3VhZ2UgfHwgdGFhbCxcbiAgICAgICAgaW5mb3JtYXRpZW9iamVjdHR5cGU6IHRoaXMuZG9jdW1lbnRUeXBlIHx8IGluZm9ybWF0aWVvYmplY3R0eXBlLFxuICAgICAgICBzdGF0dXM6IHRoaXMuc3RhdHVzIHx8IHN0YXR1cyxcbiAgICAgICAgdmVydHJvdXdlbGlqa2hlaWRhYW5kdWlkaW5nOiB0aGlzLmNvbmZpZGVudGlhbGl0eUxldmVsIHx8IHZlcnRyb3V3ZWxpamtoZWlkYWFuZHVpZGluZyxcbiAgICAgICAgY3JlYXRpZWRhdHVtLFxuICAgICAgICBvbnR2YW5nc3RkYXR1bSxcbiAgICAgICAgdmVyemVuZGRhdHVtLFxuICAgICAgICB0cmVmd29vcmRlbixcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzYXZlKCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybWF0RGF0ZSgnY3JlYXRpZWRhdHVtJyk7XG4gICAgdGhpcy5mb3JtYXREYXRlKCd2ZXJ6ZW5kZGF0dW0nKTtcbiAgICB0aGlzLmZvcm1hdERhdGUoJ29udHZhbmdzdGRhdHVtJyk7XG5cbiAgICBjb25zdCByYXdWYWx1ZSA9IHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5nZXRSYXdWYWx1ZSgpO1xuICAgIGNvbnN0IG1hcHBlZFJhd1ZhbHVlID0gT2JqZWN0LmtleXMocmF3VmFsdWUpLnJlZHVjZShcbiAgICAgIChhY2MsIGN1cnJlbnRLZXkpID0+XG4gICAgICAgIHJhd1ZhbHVlW2N1cnJlbnRLZXldICE9PSB1bmRlZmluZWQgPyB7Li4uYWNjLCBbY3VycmVudEtleV06IHJhd1ZhbHVlW2N1cnJlbnRLZXldfSA6IGFjYyxcbiAgICAgIHt9XG4gICAgKSBhcyBEb2N1bWVudGVuQXBpTWV0YWRhdGE7XG5cbiAgICBpZiAodGhpcy5kb2N1bWVudGVuQXBpTWV0YWRhdGFGb3JtLnZhbGlkKSB0aGlzLm1ldGFkYXRhLmVtaXQobWFwcGVkUmF3VmFsdWUpO1xuXG4gICAgdGhpcy5jbG9zZU1vZGFsKCk7XG4gIH1cblxuICBwdWJsaWMgY2xvc2VNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGFsU2VydmljZS5jbG9zZU1vZGFsKCgpID0+IHtcbiAgICAgIHRoaXMuYWRkaXRpb25hbERvY3VtZW50RGF0ZSQubmV4dCgnbmVpdGhlcicpO1xuICAgICAgdGhpcy5tb2RhbENsb3NlLmVtaXQoKTtcbiAgICAgIHRoaXMuY2xlYXJGb3JtKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyRm9ybSgpOiB2b2lkIHtcbiAgICB0aGlzLmRvY3VtZW50ZW5BcGlNZXRhZGF0YUZvcm0ucmVzZXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJlZmlsbEZpbGVuYW1lQW5kQXV0aG9yKCkge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgY29tYmluZUxhdGVzdChbdGhpcy5maWxlJCwgdGhpcy51c2VyRW1haWwkXSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFwKChbZmlsZSwgdXNlckVtYWlsXSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudGVuQXBpTWV0YWRhdGFGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgICBiZXN0YW5kc25hYW06IHRoaXMuZmlsZW5hbWUgfHwgZmlsZT8ubmFtZSB8fCBmaWxlPy5iZXN0YW5kc25hYW0sXG4gICAgICAgICAgICAgIGF1dGV1cjogdGhpcy5hdXRob3IgfHwgdXNlckVtYWlsLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXREYXRlKGNvbnRyb2xOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5kb2N1bWVudGVuQXBpTWV0YWRhdGFGb3JtLmNvbnRyb2xzW2NvbnRyb2xOYW1lXTtcbiAgICBpZiAoY29udHJvbC52YWx1ZSkge1xuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGNvbnRyb2wudmFsdWUpO1xuICAgICAgdGhpcy5kb2N1bWVudGVuQXBpTWV0YWRhdGFGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICBbY29udHJvbE5hbWVdOiBgJHtkYXRlLmdldEZ1bGxZZWFyKCl9LSR7KGRhdGUuZ2V0TW9udGgoKSArIDEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX0tJHtkYXRlLmdldERhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9YCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb3BlbkZpbGVTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fZmlsZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICBpZiAodGhpcy5maWxlJCkge1xuICAgICAgdGhpcy5fZmlsZVN1YnNjcmlwdGlvbiA9IHRoaXMuZmlsZSQuc3Vic2NyaWJlKGZpbGUgPT4ge1xuICAgICAgICBpZiAoZmlsZSkge1xuICAgICAgICAgIHRoaXMucHJlZmlsbEZvcm0oZmlsZSk7XG4gICAgICAgICAgdGhpcy5pc0RlZmluaXRpdmVTdGF0dXMkLm5leHQoXG4gICAgICAgICAgICBmaWxlLnN0YXR1cyA9PT0gJ2RlZmluaXRpZWYnICYmIHRoaXMuaXNFZGl0TW9kZSA/IHRydWUgOiBmYWxzZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvcGVuRGlzYWJsZWRTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLmRpc2FibGVkJD8uc3Vic2NyaWJlKGRpc2FibGVkID0+IHtcbiAgICAgICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICAgICAgdGhpcy5kb2N1bWVudGVuQXBpTWV0YWRhdGFGb3JtLmRpc2FibGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRvY3VtZW50ZW5BcGlNZXRhZGF0YUZvcm0uZW5hYmxlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0QWRkaXRpb25hbERhdGUodmFsdWU6IEFkZGl0aW9uYWxEb2N1bWVudERhdGUpOiB2b2lkIHtcbiAgICB0aGlzLmFkZGl0aW9uYWxEb2N1bWVudERhdGUkLm5leHQodmFsdWUpO1xuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG5cbjx2LW1vZGFsXG4gICNtZXRhZGF0YU1vZGFsXG4gICpuZ0lmPVwie1xuICAgIGZpbGU6IGZpbGUkIHwgYXN5bmMsXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkJCB8IGFzeW5jLFxuICAgIGlzRGVmaW5pdGl2ZVN0YXR1czogaXNEZWZpbml0aXZlU3RhdHVzJCB8IGFzeW5jLFxuICAgIGxhbmd1YWdlSXRlbXM6IGxhbmd1YWdlSXRlbXMkIHwgYXN5bmMsXG4gICAgc3RhdHVzSXRlbXM6IHN0YXR1c0l0ZW1zJCB8IGFzeW5jLFxuICAgIHRhZ0l0ZW1zOiB0YWdJdGVtcyQgfCBhc3luYyxcbiAgICB1c2VyRW1haWw6IHVzZXJFbWFpbCQgfCBhc3luYyxcbiAgICBvcGVuOiBvcGVuJCB8IGFzeW5jLFxuICAgIGFkZGl0aW9uYWxEYXRlOiBhZGRpdGlvbmFsRG9jdW1lbnREYXRlJCB8IGFzeW5jLFxuICB9IGFzIG9ic1wiXG4gIFttYXhXaWR0aFB4XT1cIjEyODBcIlxuICAoY2xvc2VFdmVudCk9XCJjbG9zZU1vZGFsKClcIlxuPlxuICA8ZGl2IHJvbGU9XCJoZWFkZXJcIj5cbiAgICBAaWYgKGlzRWRpdE1vZGUpIHtcbiAgICAgIDxoMyBjZHNNb2RhbEhlYWRlckhlYWRpbmc+XG4gICAgICAgIHt7ICdkb2N1bWVudC5lZGl0TWV0YWRhdGEnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2gzPlxuICAgIH0gQGVsc2Uge1xuICAgICAgPGgzIGNkc01vZGFsSGVhZGVySGVhZGluZz5cbiAgICAgICAge3sgJ2RvY3VtZW50LmZpbGxJbk1ldGFkYXRhJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9oMz5cbiAgICB9XG4gIDwvZGl2PlxuXG4gIDxkaXYgcm9sZT1cImNvbnRlbnRcIj5cbiAgICBAaWYgKG9icy5vcGVuKSB7XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWV0YWRhdGFGb3JtOyBjb250ZXh0OiB7b2JzOiBvYnN9XCI+PC9uZy1jb250YWluZXI+XG4gICAgfVxuICA8L2Rpdj5cblxuICA8ZGl2IHJvbGU9XCJmb290ZXJcIiBjbGFzcz1cIm1ldGFkYXRhLW1vZGFsLWZvb3RlclwiPlxuICAgIDxidXR0b24gY2RzQnV0dG9uPVwiZ2hvc3RcIiAoY2xpY2spPVwiY2xvc2VNb2RhbCgpXCIgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlZFwiPlxuICAgICAge3sgJ2RvY3VtZW50LmNhbmNlbCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cblxuICAgIDxidXR0b25cbiAgICAgIGNkc0J1dHRvbj1cInByaW1hcnlcIlxuICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICBbZGlzYWJsZWRdPVwib2JzLmRpc2FibGVkIHx8ICFkb2N1bWVudGVuQXBpTWV0YWRhdGFGb3JtLnZhbGlkIHx8IG9icy5pc0RlZmluaXRpdmVTdGF0dXNcIlxuICAgICAgKGNsaWNrKT1cInNhdmUoKVwiXG4gICAgPlxuICAgICAge3sgJ2RvY3VtZW50LnNhdmUnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC92LW1vZGFsPlxuXG48bmctdGVtcGxhdGUgI21ldGFkYXRhRm9ybSBsZXQtb2JzPVwib2JzXCI+XG4gIDxmb3JtIFtmb3JtR3JvdXBdPVwiZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybVwiPlxuICAgIDxkaXYgY2xhc3M9XCJkb2N1bWVudGVuLW1ldGFkYXRhLWZvcm0tY29sdW1ucy1jb250YWluZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkb2N1bWVudGVuLW1ldGFkYXRhLWZvcm0tY29sdW1uXCI+XG4gICAgICAgIDxjZHMtdGV4dC1sYWJlbCBjbGFzcz1cImRvY3VtZW50ZW4tbWV0YWRhLWZvcm0taW5wdXRcIj5cbiAgICAgICAgICB7eyAnZG9jdW1lbnQuZmlsZW5hbWUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPGNkcy10b29sdGlwXG4gICAgICAgICAgICBbaXNPcGVuXT1cImZhbHNlXCJcbiAgICAgICAgICAgIFtkZXNjcmlwdGlvbl09XCInZG9jdW1lbnQuZmlsZW5hbWVUb29sdGlwJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbYWxpZ25dPVwiJ2JvdHRvbS1sZWZ0J1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWhlbHAtY2lyY2xlLW91dGxpbmVcIj48L2k+XG4gICAgICAgICAgPC9jZHMtdG9vbHRpcD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIFt2YWx1ZV09XCJmaWxlbmFtZVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2RvY3VtZW50LmZpbGVuYW1lUGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgIGNkc1RleHRcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIGlkPVwiYmVzdGFuZHNuYWFtXCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImJlc3RhbmRzbmFhbVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9jZHMtdGV4dC1sYWJlbD5cbiAgICAgICAgPGNkcy10ZXh0LWxhYmVsIGNsYXNzPVwiZG9jdW1lbnRlbi1tZXRhZGEtZm9ybS1pbnB1dFwiPlxuICAgICAgICAgIHt7ICdkb2N1bWVudC5hdXRob3InIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPGNkcy10b29sdGlwXG4gICAgICAgICAgICBbaXNPcGVuXT1cImZhbHNlXCJcbiAgICAgICAgICAgIFtkZXNjcmlwdGlvbl09XCInZG9jdW1lbnQuYXV0aG9yVG9vbHRpcCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgW2FsaWduXT1cIidib3R0b20tbGVmdCdcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1oZWxwLWNpcmNsZS1vdXRsaW5lXCI+PC9pPlxuICAgICAgICAgIDwvY2RzLXRvb2x0aXA+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBbdmFsdWVdPVwiYXV0aG9yXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInZG9jdW1lbnQuYXV0aG9yUGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgIGNkc1RleHRcbiAgICAgICAgICAgIGlkPVwiYXV0ZXVyXCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImF1dGV1clwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9jZHMtdGV4dC1sYWJlbD5cbiAgICAgICAgPGNkcy10ZXh0LWxhYmVsPlxuICAgICAgICAgIHt7ICdkb2N1bWVudC5sYW5ndWFnZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8Y2RzLXRvb2x0aXBcbiAgICAgICAgICAgIFtpc09wZW5dPVwiZmFsc2VcIlxuICAgICAgICAgICAgW2Rlc2NyaXB0aW9uXT1cIidkb2N1bWVudC5sYW5ndWFnZVRvb2x0aXAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFthbGlnbl09XCInYm90dG9tLWxlZnQnXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktaGVscC1jaXJjbGUtb3V0bGluZVwiPjwvaT5cbiAgICAgICAgICA8L2Nkcy10b29sdGlwPlxuICAgICAgICA8L2Nkcy10ZXh0LWxhYmVsPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZG9jdW1lbnRlbi1tZXRhZGEtZm9ybS1pbnB1dFwiPlxuICAgICAgICAgIDxjZHMtZHJvcGRvd25cbiAgICAgICAgICAgICpuZ0lmPVwib2JzLmxhbmd1YWdlSXRlbXNcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlZCB8fCAobGFuZ3VhZ2VEaXNhYmxlZCQgfCBhc3luYylcIlxuICAgICAgICAgICAgW2FwcGVuZElubGluZV09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInZG9jdW1lbnQubGFuZ3VhZ2VQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgaWQ9XCJsYW5ndWFnZVwiXG4gICAgICAgICAgICAoc2VsZWN0ZWQpPVwibGFuZ3VhZ2VTZWxlY3RlZCgkZXZlbnQpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Y2RzLWRyb3Bkb3duLWxpc3QgW2l0ZW1zXT1cIm9icy5sYW5ndWFnZUl0ZW1zIHx8IFtdXCI+PC9jZHMtZHJvcGRvd24tbGlzdD5cbiAgICAgICAgICA8L2Nkcy1kcm9wZG93bj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxjZHMtbGFiZWw+XG4gICAgICAgICAge3sgJ2RvY3VtZW50LmNvbmZpZGVudGlhbGl0eUxldmVsJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDxjZHMtdG9vbHRpcFxuICAgICAgICAgICAgW2lzT3Blbl09XCJmYWxzZVwiXG4gICAgICAgICAgICBbZGVzY3JpcHRpb25dPVwiJ2RvY3VtZW50LmNvbmZpZGVudGlhbGl0eUxldmVsVG9vbHRpcCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgW2FsaWduXT1cIidib3R0b20tbGVmdCdcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1oZWxwLWNpcmNsZS1vdXRsaW5lXCI+PC9pPlxuICAgICAgICAgIDwvY2RzLXRvb2x0aXA+XG4gICAgICAgIDwvY2RzLWxhYmVsPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZG9jdW1lbnRlbi1tZXRhZGEtZm9ybS1pbnB1dFwiPlxuICAgICAgICAgIDxjZHMtZHJvcGRvd25cbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInZG9jdW1lbnQuY29uZmlkZW50aWFsaXR5UGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIGlkPVwidmVydHJvdXdlbGlqa2hlaWRhYW5kdWlkaW5nXCJcbiAgICAgICAgICAgIFthcHBlbmRJbmxpbmVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwib2JzLmRpc2FibGVkIHx8IChjb25maWRlbnRpYWxpdHlMZXZlbERpc2FibGVkJCB8IGFzeW5jKVwiXG4gICAgICAgICAgICAoc2VsZWN0ZWQpPVwiY29uZmlkZW50aWFsaXR5TGV2ZWxTZWxlY3RlZCgkZXZlbnQpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Y2RzLWRyb3Bkb3duLWxpc3QgW2l0ZW1zXT1cImNvbmZpZGVudGlhbGl0eUxldmVsSXRlbXMkIHwgYXN5bmNcIj48L2Nkcy1kcm9wZG93bi1saXN0PlxuICAgICAgICAgIDwvY2RzLWRyb3Bkb3duPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIntkb2N1bWVudFR5cGVJdGVtczogZG9jdW1lbnRUeXBlSXRlbXMkIHwgYXN5bmN9IGFzIG9ic1wiPlxuICAgICAgICAgIDxjZHMtbGFiZWw+XG4gICAgICAgICAgICB7eyAnZG9jdW1lbnQuaW5mb3JtYXRpZW9iamVjdHR5cGUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8Y2RzLXRvb2x0aXBcbiAgICAgICAgICAgICAgW2lzT3Blbl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtkZXNjcmlwdGlvbl09XCInZG9jdW1lbnQuaW5mb3JtYXRpZW9iamVjdHR5cGVUb29sdGlwJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIFthbGlnbl09XCInYm90dG9tLWxlZnQnXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWhlbHAtY2lyY2xlLW91dGxpbmVcIj48L2k+XG4gICAgICAgICAgICA8L2Nkcy10b29sdGlwPlxuICAgICAgICAgIDwvY2RzLWxhYmVsPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkb2N1bWVudGVuLW1ldGFkYS1mb3JtLWlucHV0XCI+XG4gICAgICAgICAgICA8Y2RzLWRyb3Bkb3duXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInZG9jdW1lbnQuaW5mb3JtYXRpZW9iamVjdHR5cGVQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwib2JzLmRpc2FibGVkIHx8IChpbmZvcm1hdGllb2JqZWN0dHlwZURpc2FibGVkJCB8IGFzeW5jKVwiXG4gICAgICAgICAgICAgIGlkPVwiaW5mb3JtYXRpZW9iamVjdHR5cGVcIlxuICAgICAgICAgICAgICBbYXBwZW5kSW5saW5lXT1cInRydWVcIlxuICAgICAgICAgICAgICAoc2VsZWN0ZWQpPVwiaW5mb3JtYXRpZW9iamVjdHR5cGVTZWxlY3RlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGNkcy1kcm9wZG93bi1saXN0IFtpdGVtc109XCJvYnMuZG9jdW1lbnRUeXBlSXRlbXMgfHwgW11cIj48L2Nkcy1kcm9wZG93bi1saXN0PlxuICAgICAgICAgICAgPC9jZHMtZHJvcGRvd24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8Y2RzLXRleHQtbGFiZWwgbmFtZT1cIidhZGRpdGlvbmFsRGF0ZSdcIj5cbiAgICAgICAgICB7eyAnZG9jdW1lbnQuYWRkaXRpb25hbERhdGUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPGNkcy10b29sdGlwXG4gICAgICAgICAgICBbaXNPcGVuXT1cImZhbHNlXCJcbiAgICAgICAgICAgIFtkZXNjcmlwdGlvbl09XCInZG9jdW1lbnQuYWRkaXRpb25hbERhdGVUb29sdGlwJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbYWxpZ25dPVwiJ2JvdHRvbS1sZWZ0J1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWhlbHAtY2lyY2xlLW91dGxpbmVcIj48L2k+XG4gICAgICAgICAgPC9jZHMtdG9vbHRpcD5cbiAgICAgICAgPC9jZHMtdGV4dC1sYWJlbD5cbiAgICAgICAgPGNkcy1yYWRpby1ncm91cCBbb3JpZW50YXRpb25dPVwiJ2hvcml6b250YWwnXCIgY2xhc3M9XCJkb2N1bWVudGVuLW1ldGFkYS1mb3JtLWlucHV0XCI+XG4gICAgICAgICAgPGNkcy1yYWRpb1xuICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBBRERJVE9OQUxfRE9DVU1FTlRfREFURV9PUFRJT05TXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIlxuICAgICAgICAgICAgW2NoZWNrZWRdPVwib2JzLmFkZGl0aW9uYWxEYXRlID09PSBvcHRpb24udmFsdWVcIlxuICAgICAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNldEFkZGl0aW9uYWxEYXRlKG9wdGlvbi52YWx1ZSlcIlxuICAgICAgICAgICAgbmFtZT1cInJhZGlvLWlubGluZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgb3B0aW9uLnRyYW5zbGF0aW9uS2V5IHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9jZHMtcmFkaW8+XG4gICAgICAgIDwvY2RzLXJhZGlvLWdyb3VwPlxuICAgICAgICBAaWYgKHN1cHBvcnRzVHJlZndvb3JkZW4pIHtcbiAgICAgICAgICA8Y2RzLXRleHQtbGFiZWw+XG4gICAgICAgICAgICB7eyAnZG9jdW1lbnQudGFncycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDxjZHMtdG9vbHRpcFxuICAgICAgICAgICAgICBbaXNPcGVuXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2Rlc2NyaXB0aW9uXT1cIidkb2N1bWVudC50YWdzVG9vbHRpcCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbYWxpZ25dPVwiJ2JvdHRvbS1sZWZ0J1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1oZWxwLWNpcmNsZS1vdXRsaW5lXCI+PC9pPlxuICAgICAgICAgICAgPC9jZHMtdG9vbHRpcD5cbiAgICAgICAgICA8L2Nkcy10ZXh0LWxhYmVsPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkb2N1bWVudGVuLW1ldGFkYS1mb3JtLWlucHV0XCI+XG4gICAgICAgICAgICA8Y2RzLWNvbWJvLWJveFxuICAgICAgICAgICAgICBbdHlwZV09XCInbXVsdGknXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidkb2N1bWVudC50YWdzUGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlZCB8fCBvYnMudGFnSXRlbXMubGVuZ3RoID09PSAwXCJcbiAgICAgICAgICAgICAgW2FwcGVuZElubGluZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cInRhZ3NTZWxlY3RlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8Y2RzLWRyb3Bkb3duLWxpc3QgW2l0ZW1zXT1cIm9icy50YWdJdGVtcyB8fCBbXVwiPjwvY2RzLWRyb3Bkb3duLWxpc3Q+XG4gICAgICAgICAgICA8L2Nkcy1jb21iby1ib3g+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiZG9jdW1lbnRlbi1tZXRhZGF0YS1mb3JtLWNvbHVtblwiPlxuICAgICAgICA8Y2RzLXRleHQtbGFiZWw+XG4gICAgICAgICAge3sgJ2RvY3VtZW50LmlucHV0VGl0bGUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2RvY3VtZW50LmlucHV0VGl0bGVQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICAgICAgY2RzVGV4dFxuICAgICAgICAgICAgY2xhc3M9XCJkb2N1bWVudGVuLW1ldGFkYS1mb3JtLWlucHV0XCJcbiAgICAgICAgICAgIGlkPVwidGl0ZWxcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidGl0ZWxcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGNkcy10b29sdGlwXG4gICAgICAgICAgICBbaXNPcGVuXT1cImZhbHNlXCJcbiAgICAgICAgICAgIFtkZXNjcmlwdGlvbl09XCInZG9jdW1lbnQuaW5wdXRUaXRsZVRvb2x0aXAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFthbGlnbl09XCInYm90dG9tJ1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWhlbHAtY2lyY2xlLW91dGxpbmVcIj48L2k+XG4gICAgICAgICAgPC9jZHMtdG9vbHRpcD5cbiAgICAgICAgPC9jZHMtdGV4dC1sYWJlbD5cbiAgICAgICAgPGNkcy10ZXh0YXJlYS1sYWJlbD5cbiAgICAgICAgICB7eyAnZG9jdW1lbnQuaW5wdXREZXNjcmlwdGlvbicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInZG9jdW1lbnQuaW5wdXREZXNjcmlwdGlvblBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbcm93c109XCI1XCJcbiAgICAgICAgICAgIGNkc1RleHRBcmVhXG4gICAgICAgICAgICBjbGFzcz1cImRvY3VtZW50ZW4tbWV0YWRhLWZvcm0tZGVzY3JpcHRpb24taW5wdXQgZG9jdW1lbnRlbi1tZXRhZGEtZm9ybS1pbnB1dFwiXG4gICAgICAgICAgICBpZD1cImJlc2NocmlqdmluZ1wiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJiZXNjaHJpanZpbmdcIlxuICAgICAgICAgID48L3RleHRhcmVhPlxuICAgICAgICAgIDxjZHMtdG9vbHRpcFxuICAgICAgICAgICAgW2lzT3Blbl09XCJmYWxzZVwiXG4gICAgICAgICAgICBbZGVzY3JpcHRpb25dPVwiJ2RvY3VtZW50LmlucHV0RGVzY3JpcHRpb25Ub29sdGlwJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbYWxpZ25dPVwiJ2JvdHRvbSdcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1oZWxwLWNpcmNsZS1vdXRsaW5lXCI+PC9pPlxuICAgICAgICAgIDwvY2RzLXRvb2x0aXA+XG4gICAgICAgIDwvY2RzLXRleHRhcmVhLWxhYmVsPlxuICAgICAgICA8Y2RzLWxhYmVsPlxuICAgICAgICAgIHt7ICdkb2N1bWVudC5jcmVhdGlvbkRhdGUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPGNkcy10b29sdGlwXG4gICAgICAgICAgICBbaXNPcGVuXT1cImZhbHNlXCJcbiAgICAgICAgICAgIFtkZXNjcmlwdGlvbl09XCInZG9jdW1lbnQuY3JlYXRpb25EYXRlVG9vbHRpcCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgW2FsaWduXT1cIidib3R0b20nXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktaGVscC1jaXJjbGUtb3V0bGluZVwiPjwvaT5cbiAgICAgICAgICA8L2Nkcy10b29sdGlwPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkb2N1bWVudGVuLW1ldGFkYS1mb3JtLWlucHV0XCI+XG4gICAgICAgICAgICA8Y2RzLWRhdGUtcGlja2VyXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInREQtTU0tWVlZWSdcIlxuICAgICAgICAgICAgICBbZGF0ZUZvcm1hdF09XCInZC1tLVknXCJcbiAgICAgICAgICAgICAgaWQ9XCJjcmVhdGllZGF0dW1cIlxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjcmVhdGllZGF0dW1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9jZHMtZGF0ZS1waWNrZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvY2RzLWxhYmVsPlxuICAgICAgICA8Y2RzLWxhYmVsPlxuICAgICAgICAgIHt7ICdkb2N1bWVudC5zdGF0dXMnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPGNkcy10b29sdGlwXG4gICAgICAgICAgICBbaXNPcGVuXT1cImZhbHNlXCJcbiAgICAgICAgICAgIFtkZXNjcmlwdGlvbl09XCInZG9jdW1lbnQuc3RhdHVzVG9vbHRpcCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgW2FsaWduXT1cIidib3R0b20nXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktaGVscC1jaXJjbGUtb3V0bGluZVwiPjwvaT5cbiAgICAgICAgICA8L2Nkcy10b29sdGlwPlxuICAgICAgICA8L2Nkcy1sYWJlbD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRvY3VtZW50ZW4tbWV0YWRhLWZvcm0taW5wdXRcIj5cbiAgICAgICAgICA8Y2RzLWRyb3Bkb3duXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2RvY3VtZW50LnN0YXR1c1BsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwib2JzLmRpc2FibGVkIHx8IChzdGF0dXNEaXNhYmxlZCQgfCBhc3luYylcIlxuICAgICAgICAgICAgaWQ9XCJzdGF0dXNcIlxuICAgICAgICAgICAgW2FwcGVuZElubGluZV09XCJ0cnVlXCJcbiAgICAgICAgICAgIChzZWxlY3RlZCk9XCJzdGF0dXNTZWxlY3RlZCgkZXZlbnQpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Y2RzLWRyb3Bkb3duLWxpc3QgW2l0ZW1zXT1cIm9icy5zdGF0dXNJdGVtcyB8fCBbXVwiPjwvY2RzLWRyb3Bkb3duLWxpc3Q+XG4gICAgICAgICAgPC9jZHMtZHJvcGRvd24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8Y2RzLWRhdGUtcGlja2VyXG4gICAgICAgICAgKm5nSWY9XCJvYnMuYWRkaXRpb25hbERhdGUgPT09ICdyZWNlaXZlZCdcIlxuICAgICAgICAgIFtsYWJlbF09XCInZG9jdW1lbnQuYWRkaXRpb25hbERhdGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0RELU1NLVlZWVknXCJcbiAgICAgICAgICBbZGF0ZUZvcm1hdF09XCInZC1tLVknXCJcbiAgICAgICAgICBpZD1cIm9udHZhbmdzdGRhdHVtXCJcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJvbnR2YW5nc3RkYXR1bVwiXG4gICAgICAgID48L2Nkcy1kYXRlLXBpY2tlcj5cbiAgICAgICAgPGNkcy1kYXRlLXBpY2tlclxuICAgICAgICAgICpuZ0lmPVwib2JzLmFkZGl0aW9uYWxEYXRlID09PSAnc2VudCdcIlxuICAgICAgICAgIFtsYWJlbF09XCInZG9jdW1lbnQuYWRkaXRpb25hbERhdGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0RELU1NLVlZWVknXCJcbiAgICAgICAgICBbZGF0ZUZvcm1hdF09XCInZC1tLVknXCJcbiAgICAgICAgICBpZD1cInZlcnplbmRkYXR1bVwiXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidmVyemVuZGRhdHVtXCJcbiAgICAgICAgPjwvY2RzLWRhdGUtcGlja2VyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZm9ybT5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
494
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnRlbi1hcGktbWV0YWRhdGEtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby96Z3cvc3JjL2xpYi9tb2R1bGVzL2RvY3VtZW50ZW4tYXBpL2NvbXBvbmVudHMvZG9jdW1lbnRlbi1hcGktbWV0YWRhdGEtbW9kYWwvZG9jdW1lbnRlbi1hcGktbWV0YWRhdGEtbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby96Z3cvc3JjL2xpYi9tb2R1bGVzL2RvY3VtZW50ZW4tYXBpL2NvbXBvbmVudHMvZG9jdW1lbnRlbi1hcGktbWV0YWRhdGEtbW9kYWwvZG9jdW1lbnRlbi1hcGktbWV0YWRhdGEtbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFFSCxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQVN2QixPQUFPLEVBQ0wsZUFBZSxFQUNmLGFBQWEsRUFDYixNQUFNLEVBQ04sSUFBSSxFQUNKLEdBQUcsRUFFSCxFQUFFLEVBQ0YsU0FBUyxFQUNULE9BQU8sRUFDUCxZQUFZLEVBQ1osU0FBUyxFQUNULElBQUksR0FDTCxNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBQyxlQUFlLEVBQW1CLE1BQU0scUJBQXFCLENBQUM7QUFJdEUsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ25DLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBSUwsbUJBQW1CLEVBQ25CLFVBQVUsR0FDWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFDTCxnQkFBZ0Is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QkFDRyxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7XG4gIEFkZGl0aW9uYWxEb2N1bWVudERhdGUsXG4gIENvbmZpZGVudGlhbGl0eUxldmVsLFxuICBEb2N1bWVudGVuQXBpTWV0YWRhdGEsXG4gIERvY3VtZW50TGFuZ3VhZ2UsXG4gIERvY3VtZW50U3RhdHVzLFxufSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBmaWx0ZXIsXG4gIGZyb20sXG4gIG1hcCxcbiAgT2JzZXJ2YWJsZSxcbiAgb2YsXG4gIHN0YXJ0V2l0aCxcbiAgU3ViamVjdCxcbiAgU3Vic2NyaXB0aW9uLFxuICBzd2l0Y2hNYXAsXG4gIHRha2UsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7RG9jdW1lbnRTZXJ2aWNlfSBmcm9tICdAdmFsdGltby9kb2N1bWVudCc7XG5pbXBvcnQge0tleWNsb2FrU2VydmljZX0gZnJvbSAna2V5Y2xvYWstYW5ndWxhcic7XG5pbXBvcnQge3RhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIEZvcm1CdWlsZGVyLFxuICBGb3JtR3JvdXAsXG4gIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gIFZhbGlkYXRvcnMsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIElucHV0TGFiZWxNb2R1bGUsXG4gIElucHV0TW9kdWxlLFxuICBNb2RhbFNlcnZpY2UsXG4gIFNlbGVjdE1vZHVsZSxcbiAgVmFsdGltb01vZGFsU2VydmljZSxcbiAgVk1vZGFsQ29tcG9uZW50LFxuICBWTW9kYWxNb2R1bGUsXG59IGZyb20gJ0B2YWx0aW1vL2NvbXBvbmVudHMnO1xuXG5pbXBvcnQge1xuICBCdXR0b25Nb2R1bGUsXG4gIENvbWJvQm94TW9kdWxlLFxuICBEYXRlUGlja2VyTW9kdWxlLFxuICBEcm9wZG93bk1vZHVsZSxcbiAgSWNvbk1vZHVsZSxcbiAgSW5wdXRNb2R1bGUgYXMgQ2FyYm9uSW5wdXRNb2R1bGUsXG4gIExpc3RJdGVtLFxuICBNb2RhbE1vZHVsZSxcbiAgUmFkaW9Nb2R1bGUsXG4gIFRhZ01vZHVsZSxcbiAgVG9vbHRpcE1vZHVsZSxcbn0gZnJvbSAnY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhcic7XG5pbXBvcnQge0RvY3VtZW50ZW5BcGlUYWdTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kb2N1bWVudGVuLWFwaS10YWcuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tZG9jdW1lbnRlbi1hcGktbWV0YWRhdGEtbW9kYWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vZG9jdW1lbnRlbi1hcGktbWV0YWRhdGEtbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kb2N1bWVudGVuLWFwaS1tZXRhZGF0YS1tb2RhbC5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQnV0dG9uTW9kdWxlLFxuICAgIENhcmJvbklucHV0TW9kdWxlLFxuICAgIENvbWJvQm94TW9kdWxlLFxuICAgIENvbW1vbk1vZHVsZSxcbiAgICBEYXRlUGlja2VyTW9kdWxlLFxuICAgIERyb3Bkb3duTW9kdWxlLFxuICAgIEljb25Nb2R1bGUsXG4gICAgSW5wdXRMYWJlbE1vZHVsZSxcbiAgICBJbnB1dE1vZHVsZSxcbiAgICBNb2RhbE1vZHVsZSxcbiAgICBSYWRpb01vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIFNlbGVjdE1vZHVsZSxcbiAgICBUYWdNb2R1bGUsXG4gICAgVG9vbHRpcE1vZHVsZSxcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgVk1vZGFsTW9kdWxlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBEb2N1bWVudGVuQXBpTWV0YWRhdGFNb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBAVmlld0NoaWxkKCdtZXRhZGF0YU1vZGFsJykgbWV0YWRhdGFNb2RhbDogVk1vZGFsQ29tcG9uZW50O1xuXG4gIEBJbnB1dCgpIGRpc2FibGVkJCE6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIEBJbnB1dCgpIGZpbGUkITogT2JzZXJ2YWJsZTxhbnk+O1xuXG4gIEBJbnB1dCgpIGF1dGhvcjogc3RyaW5nO1xuICBASW5wdXQoKSBjb25maWRlbnRpYWxpdHlMZXZlbDogc3RyaW5nO1xuICBASW5wdXQoKSBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBASW5wdXQoKSBzZXQgZGlzYWJsZUF1dGhvcih2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5hdXRldXIuZGlzYWJsZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmF1dGV1ci5lbmFibGUoKTtcbiAgICB9XG4gIH1cbiAgQElucHV0KCkgc2V0IGRpc2FibGVDb25maWRlbnRpYWxpdHlMZXZlbCh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5jb25maWRlbnRpYWxpdHlMZXZlbEZvcm1Db250cm9sLmRpc2FibGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb25maWRlbnRpYWxpdHlMZXZlbEZvcm1Db250cm9sLmVuYWJsZSgpO1xuICAgIH1cbiAgfVxuICBASW5wdXQoKSBzZXQgZGlzYWJsZURlc2NyaXB0aW9uKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLmJlc2NocmlqdmluZy5kaXNhYmxlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYmVzY2hyaWp2aW5nLmVuYWJsZSgpO1xuICAgIH1cbiAgfVxuICBASW5wdXQoKSBzZXQgZGlzYWJsZURvY3VtZW50VGl0bGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMudGl0ZWwuZGlzYWJsZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRpdGVsLmVuYWJsZSgpO1xuICAgIH1cbiAgfVxuICBASW5wdXQoKSBzZXQgZGlzYWJsZURvY3VtZW50VHlwZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5pbmZvcm1hdGllb2JqZWN0dHlwZUZvcm1Db250cm9sLmRpc2FibGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbmZvcm1hdGllb2JqZWN0dHlwZUZvcm1Db250cm9sLmVuYWJsZSgpO1xuICAgIH1cbiAgfVxuICBASW5wdXQoKSBzZXQgZGlzYWJsZUZpbGVuYW1lKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLmJlc3RhbmRzbmFhbS5kaXNhYmxlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYmVzdGFuZHNuYWFtLmVuYWJsZSgpO1xuICAgIH1cbiAgfVxuICBASW5wdXQoKSBzZXQgZGlzYWJsZUxhbmd1YWdlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLmxhbmd1YWdlRm9ybUNvbnRyb2wuZGlzYWJsZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxhbmd1YWdlRm9ybUNvbnRyb2wuZW5hYmxlKCk7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpIHNldCBkaXNhYmxlU3RhdHVzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLnN0YXR1c0Zvcm1Db250cm9sLmRpc2FibGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGF0dXNGb3JtQ29udHJvbC5lbmFibGUoKTtcbiAgICB9XG4gIH1cbiAgQElucHV0KCkgc2V0IGRpc2FibGVUcmVmd29vcmRlbih2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy50YWdGb3JtQ29udHJvbC5kaXNhYmxlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGFnRm9ybUNvbnRyb2wuZW5hYmxlKCk7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpIGRvY3VtZW50VGl0bGUgPSAnJztcbiAgQElucHV0KCkgZG9jdW1lbnRUeXBlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGZpbGVuYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGlzRWRpdE1vZGU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGxhbmd1YWdlOiBzdHJpbmc7XG5cbiAgcHVibGljIHJlYWRvbmx5IG9wZW4kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgQElucHV0KCkgc2V0IG9wZW4odmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLm9wZW4kLm5leHQodmFsdWUpO1xuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuTW9kYWwodGhpcy5tZXRhZGF0YU1vZGFsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tb2RhbFNlcnZpY2UuY2xvc2VNb2RhbCgpO1xuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgpIHN0YXR1czogc3RyaW5nO1xuICBASW5wdXQoKSBzdXBwb3J0c1RyZWZ3b29yZGVuID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIG1ldGFkYXRhOiBFdmVudEVtaXR0ZXI8RG9jdW1lbnRlbkFwaU1ldGFkYXRhPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIG1vZGFsQ2xvc2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBwdWJsaWMgZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybTogRm9ybUdyb3VwID0gdGhpcy5mYi5ncm91cCh7XG4gICAgYmVzdGFuZHNuYWFtOiB0aGlzLmZiLmNvbnRyb2woJycsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgIHRpdGVsOiB0aGlzLmZiLmNvbnRyb2woJycsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgIGF1dGV1cjogdGhpcy5mYi5jb250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICBiZXNjaHJpanZpbmc6IHRoaXMuZmIuY29udHJvbCgnJywgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgdGFhbDogdGhpcy5mYi5jb250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICBpbmZvcm1hdGllb2JqZWN0dHlwZTogdGhpcy5mYi5jb250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICBzdGF0dXM6IHRoaXMuZmIuY29udHJvbCgnJywgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgdmVydHJvdXdlbGlqa2hlaWRhYW5kdWlkaW5nOiB0aGlzLmZiLmNvbnRyb2woJycsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgIGNyZWF0aWVkYXR1bTogdGhpcy5mYi5jb250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICBvbnR2YW5nc3RkYXR1bTogdGhpcy5mYi5jb250cm9sKCcnKSxcbiAgICB2ZXJ6ZW5kZGF0dW06IHRoaXMuZmIuY29udHJvbCgnJyksXG4gICAgdHJlZndvb3JkZW46IHRoaXMuZmIuY29udHJvbChbXSksXG4gIH0pO1xuXG4gIHB1YmxpYyBnZXQgY29uZmlkZW50aWFsaXR5TGV2ZWxGb3JtQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2w8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5nZXQoJ3ZlcnRyb3V3ZWxpamtoZWlkYWFuZHVpZGluZycpO1xuICB9XG4gIHB1YmxpYyBnZXQgY29uZmlkZW50aWFsaXR5TGV2ZWxEaXNhYmxlZCQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlkZW50aWFsaXR5TGV2ZWxGb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgIHN0YXJ0V2l0aChudWxsKSxcbiAgICAgIG1hcCgoKSA9PiB0aGlzLmNvbmZpZGVudGlhbGl0eUxldmVsRm9ybUNvbnRyb2wuZGlzYWJsZWQpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaW5mb3JtYXRpZW9iamVjdHR5cGVGb3JtQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2w8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5nZXQoJ2luZm9ybWF0aWVvYmplY3R0eXBlJyk7XG4gIH1cbiAgcHVibGljIGdldCBpbmZvcm1hdGllb2JqZWN0dHlwZURpc2FibGVkJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5pbmZvcm1hdGllb2JqZWN0dHlwZUZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgc3RhcnRXaXRoKG51bGwpLFxuICAgICAgbWFwKCgpID0+IHRoaXMuaW5mb3JtYXRpZW9iamVjdHR5cGVGb3JtQ29udHJvbC5kaXNhYmxlZClcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldCBsYW5ndWFnZUZvcm1Db250cm9sKCk6IEFic3RyYWN0Q29udHJvbDxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5kb2N1bWVudGVuQXBpTWV0YWRhdGFGb3JtLmdldCgndGFhbCcpO1xuICB9XG5cbiAgcHVibGljIGdldCBsYW5ndWFnZURpc2FibGVkJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5sYW5ndWFnZUZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgc3RhcnRXaXRoKG51bGwpLFxuICAgICAgbWFwKCgpID0+IHRoaXMubGFuZ3VhZ2VGb3JtQ29udHJvbC5kaXNhYmxlZClcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldCBzdGF0dXNGb3JtQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2w8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5nZXQoJ3N0YXR1cycpO1xuICB9XG4gIHB1YmxpYyBnZXQgc3RhdHVzRGlzYWJsZWQkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXR1c0Zvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgc3RhcnRXaXRoKG51bGwpLFxuICAgICAgbWFwKCgpID0+IHRoaXMuaW5mb3JtYXRpZW9iamVjdHR5cGVGb3JtQ29udHJvbC5kaXNhYmxlZClcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldCB0YWdGb3JtQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2w8c3RyaW5nW10+IHtcbiAgICByZXR1cm4gdGhpcy5kb2N1bWVudGVuQXBpTWV0YWRhdGFGb3JtLmdldCgndHJlZndvb3JkZW4nKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdGl0ZWwoKTogQWJzdHJhY3RDb250cm9sPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmRvY3VtZW50ZW5BcGlNZXRhZGF0YUZvcm0uZ2V0KCd0aXRlbCcpO1xuICB9XG5cbiAgcHVibGljIGdldCBiZXNjaHJpanZpbmcoKTogQWJzdHJhY3RDb250cm9sPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmRvY3VtZW50ZW5BcGlNZXRhZGF0YUZvcm0uZ2V0KCdiZXNjaHJpanZpbmcnKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYXV0ZXVyKCk6IEFic3RyYWN0Q29udHJvbDxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5kb2N1bWVudGVuQXBpTWV0YWRhdGFGb3JtLmdldCgnYXV0ZXVyJyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGJlc3RhbmRzbmFhbSgpOiBBYnN0cmFjdENvbnRyb2w8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5nZXQoJ2Jlc3RhbmRzbmFhbScpO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IGlzRGVmaW5pdGl2ZVN0YXR1cyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgQ09ORklERU5USUFMSVRZX0xFVkVMUzogQXJyYXk8Q29uZmlkZW50aWFsaXR5TGV2ZWw+ID0gW1xuICAgICdvcGVuYmFhcicsXG4gICAgJ2JlcGVya3Rfb3BlbmJhYXInLFxuICAgICdpbnRlcm4nLFxuICAgICd6YWFrdmVydHJvdXdlbGlqaycsXG4gICAgJ3ZlcnRyb3V3ZWxpamsnLFxuICAgICdjb25maWRlbnRpZWVsJyxcbiAgICAnZ2VoZWltJyxcbiAgICAnemVlcl9nZWhlaW0nLFxuICBdO1xuICBwdWJsaWMgcmVhZG9ubHkgY29uZmlkZW50aWFsaXR5TGV2ZWxJdGVtcyQ6IE9ic2VydmFibGU8QXJyYXk8TGlzdEl0ZW0+PiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuY29uZmlkZW50aWFsaXR5TGV2ZWxGb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgIHN0YXJ0V2l0aCh0aGlzLmNvbmZpZGVudGlhbGl0eUxldmVsRm9ybUNvbnRyb2wudmFsdWUpXG4gICAgKSxcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKCdrZXknKSxcbiAgXSkucGlwZShcbiAgICBtYXAoKFtjdXJyZW50Q29uZmlkZW50aWFsaXR5TGV2ZWxdKSA9PlxuICAgICAgdGhpcy5DT05GSURFTlRJQUxJVFlfTEVWRUxTLm1hcChjb25maWRlbnRpYWxpdHlMZXZlbCA9PiAoe1xuICAgICAgICBpZDogY29uZmlkZW50aWFsaXR5TGV2ZWwsXG4gICAgICAgIGNvbnRlbnQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGBkb2N1bWVudC4ke2NvbmZpZGVudGlhbGl0eUxldmVsfWApLFxuICAgICAgICBzZWxlY3RlZDogY3VycmVudENvbmZpZGVudGlhbGl0eUxldmVsID09PSBjb25maWRlbnRpYWxpdHlMZXZlbCxcbiAgICAgIH0pKVxuICAgIClcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgQURESVRPTkFMX0RPQ1VNRU5UX0RBVEVfT1BUSU9OUzogQXJyYXk8e1xuICAgIHZhbHVlOiBBZGRpdGlvbmFsRG9jdW1lbnREYXRlO1xuICAgIHRyYW5zbGF0aW9uS2V5OiBzdHJpbmc7XG4gIH0+ID0gW1xuICAgIHtcbiAgICAgIHZhbHVlOiAnbmVpdGhlcicsXG4gICAgICB0cmFuc2xhdGlvbktleTogJ2RvY3VtZW50Lm5vQWRkaXRpb25hbERhdGUnLFxuICAgIH0sXG4gICAge1xuICAgICAgdmFsdWU6ICdzZW50JyxcbiAgICAgIHRyYW5zbGF0aW9uS2V5OiAnZG9jdW1lbnQuc2VuZERhdGUnLFxuICAgIH0sXG4gICAge1xuICAgICAgdmFsdWU6ICdyZWNlaXZlZCcsXG4gICAgICB0cmFuc2xhdGlvbktleTogJ2RvY3VtZW50LnJlY2VpcHREYXRlJyxcbiAgICB9LFxuICBdO1xuICBwdWJsaWMgcmVhZG9ubHkgY2xlYXJTdGF0dXNTZWxlY3Rpb24kID0gbmV3IFN1YmplY3Q8bnVsbD4oKTtcbiAgcHVibGljIHJlYWRvbmx5IGFkZGl0aW9uYWxEb2N1bWVudERhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBZGRpdGlvbmFsRG9jdW1lbnREYXRlPignbmVpdGhlcicpO1xuICBwdWJsaWMgcmVhZG9ubHkgU1RBVFVTRVM6IEFycmF5PERvY3VtZW50U3RhdHVzPiA9IFtcbiAgICAnaW5fYmV3ZXJraW5nJyxcbiAgICAndGVyX3Zhc3RzdGVsbGluZycsXG4gICAgJ2RlZmluaXRpZWYnLFxuICAgICdnZWFyY2hpdmVlcmQnLFxuICBdO1xuICBwdWJsaWMgcmVhZG9ubHkgUkVDRUlQVF9TVEFUVVNFUzogQXJyYXk8RG9jdW1lbnRTdGF0dXM+ID0gWydkZWZpbml0aWVmJywgJ2dlYXJjaGl2ZWVyZCddO1xuICBwdWJsaWMgcmVhZG9ubHkgZm9ybURhdGEkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEb2N1bWVudGVuQXBpTWV0YWRhdGE+KG51bGwpO1xuICBwdWJsaWMgcmVhZG9ubHkgc3RhdHVzSXRlbXMkOiBPYnNlcnZhYmxlPEFycmF5PExpc3RJdGVtPj4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmFkZGl0aW9uYWxEb2N1bWVudERhdGUkLFxuICAgIHRoaXMuc3RhdHVzRm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKHRoaXMuc3RhdHVzRm9ybUNvbnRyb2wudmFsdWUpKSxcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKCdrZXknKSxcbiAgXSkucGlwZShcbiAgICB0YXAoKFthZGRpdGlvbmFsRG9jdW1lbnREYXRlLCBjdXJyZW50U3RhdHVzXSkgPT4ge1xuICAgICAgdGhpcy5mb3JtRGF0YSQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoZm9ybURhdGEgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgYWRkaXRpb25hbERvY3VtZW50RGF0ZSA9PT0gJ3JlY2VpdmVkJyAmJlxuICAgICAgICAgIChmb3JtRGF0YS5zdGF0dXMgPT09ICdpbl9iZXdlcmtpbmcnIHx8IGZvcm1EYXRhLnN0YXR1cyA9PT0gJ3Rlcl92YXN0c3RlbGxpbmcnKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmNsZWFyU3RhdHVzU2VsZWN0aW9uJC5uZXh0KG51bGwpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KSxcbiAgICBtYXAoKFthZGRpdGlvbmFsRG9jdW1lbnREYXRlLCBjdXJyZW50U3RhdHVzXSkgPT5cbiAgICAgIChhZGRpdGlvbmFsRG9jdW1lbnREYXRlID09PSAncmVjZWl2ZWQnID8gdGhpcy5SRUNFSVBUX1NUQVRVU0VTIDogdGhpcy5TVEFUVVNFUykubWFwKFxuICAgICAgICBzdGF0dXMgPT4gKHtcbiAgICAgICAgICBpZDogc3RhdHVzLFxuICAgICAgICAgIGNvbnRlbnQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGBkb2N1bWVudC4ke3N0YXR1c31gKSxcbiAgICAgICAgICBzZWxlY3RlZDogY3VycmVudFN0YXR1cyA9PT0gc3RhdHVzLFxuICAgICAgICB9KVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZG9jdW1lbnREZWZpbml0aW9uTmFtZSQ6IE9ic2VydmFibGU8c3RyaW5nPiA9IGZyb20oXG4gICAgdGhpcy5yb3V0ZS5wYXJhbXMucGlwZShtYXAocGFyYW1zID0+IHBhcmFtcz8uZG9jdW1lbnREZWZpbml0aW9uTmFtZSkpXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHRhZ0l0ZW1zJDogT2JzZXJ2YWJsZTxBcnJheTxMaXN0SXRlbT4+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lJCxcbiAgICB0aGlzLnRhZ0Zvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aCh0aGlzLnRhZ0Zvcm1Db250cm9sLnZhbHVlKSksXG4gIF0pLnBpcGUoXG4gICAgZmlsdGVyKChbZG9jdW1lbnREZWZpbml0aW9uTmFtZV0pID0+ICEhZG9jdW1lbnREZWZpbml0aW9uTmFtZSksXG4gICAgc3dpdGNoTWFwKChbZG9jdW1lbnREZWZpbml0aW9uTmFtZSwgdGFnRm9ybUNvbnRyb2xWYWx1ZV0pID0+XG4gICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgdGhpcy5kb2N1bWVudGVuQXBpVGFnU2VydmljZS5nZXRUYWdzKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpLFxuICAgICAgICBvZih0YWdGb3JtQ29udHJvbFZhbHVlKSxcbiAgICAgIF0pXG4gICAgKSxcbiAgICBtYXAoKFt0YWdzLCB0YWdGb3JtQ29udHJvbFZhbHVlXSkgPT5cbiAgICAgIHRhZ3MubWFwKHRhZyA9PiAoe1xuICAgICAgICBpZDogdGFnLnZhbHVlLFxuICAgICAgICBjb250ZW50OiB0YWcudmFsdWUsXG4gICAgICAgIHNlbGVjdGVkOiAhIXRhZ0Zvcm1Db250cm9sVmFsdWUgPyB0YWdGb3JtQ29udHJvbFZhbHVlLmluY2x1ZGVzKHRhZy52YWx1ZSkgOiBmYWxzZSxcbiAgICAgIH0pKVxuICAgIClcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgTEFOR1VBR0VTOiBBcnJheTxEb2N1bWVudExhbmd1YWdlPiA9IFsnbmxkJywgJ2VuZycsICdkZXUnXTtcbiAgcHVibGljIGxhbmd1YWdlSXRlbXMkOiBPYnNlcnZhYmxlPEFycmF5PExpc3RJdGVtPj4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmxhbmd1YWdlRm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKHRoaXMubGFuZ3VhZ2VGb3JtQ29udHJvbC52YWx1ZSkpLFxuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oJ2tleScpLFxuICBdKS5waXBlKFxuICAgIG1hcCgoW2N1cnJlbnRMYW5ndWFnZV0pID0+IHtcbiAgICAgIHJldHVybiB0aGlzLkxBTkdVQUdFUy5tYXAoXG4gICAgICAgIChsYW5ndWFnZTogYW55KSA9PlxuICAgICAgICAgICh7XG4gICAgICAgICAgICBjb250ZW50OiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChgZG9jdW1lbnQuJHtsYW5ndWFnZX1gKSxcbiAgICAgICAgICAgIGlkOiBsYW5ndWFnZSxcbiAgICAgICAgICAgIHNlbGVjdGVkOiBjdXJyZW50TGFuZ3VhZ2UgPT09IGxhbmd1YWdlLFxuICAgICAgICAgIH0pIGFzIExpc3RJdGVtXG4gICAgICApO1xuICAgIH0pXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGRvY3VtZW50VHlwZUl0ZW1zJDogT2JzZXJ2YWJsZTxBcnJheTxMaXN0SXRlbT4+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5yb3V0ZT8ucGFyYW1zIHx8IG9mKG51bGwpLFxuICAgIHRoaXMucm91dGU/LmZpcnN0Q2hpbGQ/LnBhcmFtcyB8fCBvZihudWxsKSxcbiAgICB0aGlzLnZhbHRpbW9Nb2RhbFNlcnZpY2UuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQsXG4gICAgdGhpcy5pbmZvcm1hdGllb2JqZWN0dHlwZUZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgc3RhcnRXaXRoKHRoaXMuaW5mb3JtYXRpZW9iamVjdHR5cGVGb3JtQ29udHJvbC52YWx1ZSlcbiAgICApLFxuICBdKS5waXBlKFxuICAgIGZpbHRlcihcbiAgICAgIChbcGFyYW1zLCBmaXJzdENoaWxkUGFyYW1zLCBkb2N1bWVudERlZmluaXRpb25OYW1lXSkgPT5cbiAgICAgICAgISEoXG4gICAgICAgICAgcGFyYW1zPy5kb2N1bWVudERlZmluaXRpb25OYW1lIHx8XG4gICAgICAgICAgZmlyc3RDaGlsZFBhcmFtcz8uZG9jdW1lbnREZWZpbml0aW9uTmFtZSB8fFxuICAgICAgICAgIGRvY3VtZW50RGVmaW5pdGlvbk5hbWVcbiAgICAgICAgKVxuICAgICksXG4gICAgc3dpdGNoTWFwKChbcGFyYW1zLCBmaXJzdENoaWxkUGFyYW1zLCBkb2N1bWVudERlZmluaXRpb25OYW1lLCBpbmZvcm1hdGllb2JqZWN0dHlwZVZhbHVlXSkgPT5cbiAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICB0aGlzLmRvY3VtZW50U2VydmljZS5nZXREb2N1bWVudFR5cGVzKFxuICAgICAgICAgIHBhcmFtcz8uZG9jdW1lbnREZWZpbml0aW9uTmFtZSB8fFxuICAgICAgICAgICAgZmlyc3RDaGlsZFBhcmFtcz8uZG9jdW1lbnREZWZpbml0aW9uTmFtZSB8fFxuICAgICAgICAgICAgZG9jdW1lbnREZWZpbml0aW9uTmFtZVxuICAgICAgICApLFxuICAgICAgICBvZihpbmZvcm1hdGllb2JqZWN0dHlwZVZhbHVlKSxcbiAgICAgIF0pXG4gICAgKSxcbiAgICBtYXAoKFtkb2N1bWVudFR5cGVzLCBpbmZvcm1hdGllb2JqZWN0dHlwZVZhbHVlXSkgPT5cbiAgICAgIGRvY3VtZW50VHlwZXMubWFwKCh0eXBlOiBhbnkpID0+ICh7XG4gICAgICAgIGlkOiB0eXBlLnVybCxcbiAgICAgICAgY29udGVudDogdHlwZS5uYW1lLFxuICAgICAgICBzZWxlY3RlZDogaW5mb3JtYXRpZW9iamVjdHR5cGVWYWx1ZSA9PT0gdHlwZS51cmwsXG4gICAgICB9KSlcbiAgICApXG4gICk7XG4gIHB1YmxpYyByZWFkb25seSB1c2VyRW1haWwkID0gZnJvbSh0aGlzLmtleWNsb2FrU2VydmljZS5sb2FkVXNlclByb2ZpbGUoKSkucGlwZShcbiAgICBtYXAodXNlclByb2ZpbGUgPT4gdXNlclByb2ZpbGU/LmVtYWlsIHx8ICcnKVxuICApO1xuXG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgX2ZpbGVTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudFNlcnZpY2U6IERvY3VtZW50U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50ZW5BcGlUYWdTZXJ2aWNlOiBEb2N1bWVudGVuQXBpVGFnU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGtleWNsb2FrU2VydmljZTogS2V5Y2xvYWtTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbW9kYWxTZXJ2aWNlOiBNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdmFsdGltb01vZGFsU2VydmljZTogVmFsdGltb01vZGFsU2VydmljZVxuICApIHt9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMub3BlbkZpbGVTdWJzY3JpcHRpb24oKTtcbiAgICB0aGlzLm9wZW5EaXNhYmxlZFN1YnNjcmlwdGlvbigpO1xuICB9XG5cbiAgcHVibGljIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMub3BlbkZpbGVTdWJzY3JpcHRpb24oKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5pc0RlZmluaXRpdmVTdGF0dXMkLm5leHQoZmFsc2UpO1xuICB9XG5cbiAgcHVibGljIGxhbmd1YWdlU2VsZWN0ZWQoZXZlbnQ6IHtpdGVtOiB7aWQ6IHN0cmluZ319KSB7XG4gICAgaWYgKGV2ZW50Lml0ZW0uaWQpIHtcbiAgICAgIHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgdGFhbDogZXZlbnQuaXRlbS5pZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB0YWdzU2VsZWN0ZWQoZXZlbnQ6IEFycmF5PExpc3RJdGVtPikge1xuICAgIHRoaXMudGFnRm9ybUNvbnRyb2wucGF0Y2hWYWx1ZShldmVudC5maWx0ZXIodGFnID0+IHRhZy5zZWxlY3RlZCkubWFwKHRhZyA9PiB0YWcuaWQpKTtcbiAgfVxuXG4gIHB1YmxpYyBjb25maWRlbnRpYWxpdHlMZXZlbFNlbGVjdGVkKGV2ZW50OiB7aXRlbToge2lkOiBzdHJpbmd9fSkge1xuICAgIGlmIChldmVudC5pdGVtLmlkKSB7XG4gICAgICB0aGlzLmRvY3VtZW50ZW5BcGlNZXRhZGF0YUZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgIHZlcnRyb3V3ZWxpamtoZWlkYWFuZHVpZGluZzogZXZlbnQuaXRlbS5pZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzdGF0dXNTZWxlY3RlZChldmVudDoge2l0ZW06IHtpZDogc3RyaW5nfX0pIHtcbiAgICBpZiAoZXZlbnQuaXRlbS5pZCkge1xuICAgICAgdGhpcy5kb2N1bWVudGVuQXBpTWV0YWRhdGFGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICBzdGF0dXM6IGV2ZW50Lml0ZW0uaWQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaW5mb3JtYXRpZW9iamVjdHR5cGVTZWxlY3RlZChldmVudDoge2l0ZW06IHtpZDogc3RyaW5nfX0pIHtcbiAgICBpZiAoZXZlbnQuaXRlbS5pZCkge1xuICAgICAgdGhpcy5kb2N1bWVudGVuQXBpTWV0YWRhdGFGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICBpbmZvcm1hdGllb2JqZWN0dHlwZTogZXZlbnQuaXRlbS5pZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBwcmVmaWxsRm9ybShmaWxlKSB7XG4gICAgdGhpcy5wcmVmaWxsRmlsZW5hbWVBbmRBdXRob3IoKTtcbiAgICBpZiAoZmlsZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBiZXN0YW5kc25hYW0sXG4gICAgICAgIHRpdGVsLFxuICAgICAgICBhdXRldXIsXG4gICAgICAgIGJlc2NocmlqdmluZyxcbiAgICAgICAgdGFhbCxcbiAgICAgICAgaW5mb3JtYXRpZW9iamVjdHR5cGUsXG4gICAgICAgIHN0YXR1cyxcbiAgICAgICAgdmVydHJvdXdlbGlqa2hlaWRhYW5kdWlkaW5nLFxuICAgICAgICBjcmVhdGllZGF0dW0sXG4gICAgICAgIG9udHZhbmdzdGRhdHVtLFxuICAgICAgICB2ZXJ6ZW5kZGF0dW0sXG4gICAgICAgIHRyZWZ3b29yZGVuLFxuICAgICAgfSA9IGZpbGU7XG5cbiAgICAgIGlmICh2ZXJ6ZW5kZGF0dW0pIHRoaXMuYWRkaXRpb25hbERvY3VtZW50RGF0ZSQubmV4dCgnc2VudCcpO1xuICAgICAgZWxzZSBpZiAob250dmFuZ3N0ZGF0dW0pIHRoaXMuYWRkaXRpb25hbERvY3VtZW50RGF0ZSQubmV4dCgncmVjZWl2ZWQnKTtcbiAgICAgIGVsc2UgdGhpcy5hZGRpdGlvbmFsRG9jdW1lbnREYXRlJC5uZXh0KCduZWl0aGVyJyk7XG5cbiAgICAgIGNvbnN0IHByZWZpbGxTdGF0dXMgPSB0aGlzLnN0YXR1cyB8fCBzdGF0dXM7XG4gICAgICBjb25zdCB2YWxpZFByZWZpbGxTdGF0dXMgPSB0aGlzLlNUQVRVU0VTLmluY2x1ZGVzKHByZWZpbGxTdGF0dXMpID8gcHJlZmlsbFN0YXR1cyA6ICcnO1xuXG4gICAgICB0aGlzLmRvY3VtZW50ZW5BcGlNZXRhZGF0YUZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgIGJlc3RhbmRzbmFhbTogdGhpcy5maWxlbmFtZSB8fCBiZXN0YW5kc25hYW0sXG4gICAgICAgIHRpdGVsOiB0aGlzLmRvY3VtZW50VGl0bGUgfHwgdGl0ZWwsXG4gICAgICAgIGF1dGV1cjogdGhpcy5hdXRob3IgfHwgYXV0ZXVyLFxuICAgICAgICBiZXNjaHJpanZpbmc6IHRoaXMuZGVzY3JpcHRpb24gfHwgYmVzY2hyaWp2aW5nLFxuICAgICAgICB0YWFsOiB0aGlzLmxhbmd1YWdlIHx8IHRhYWwsXG4gICAgICAgIGluZm9ybWF0aWVvYmplY3R0eXBlOiB0aGlzLmRvY3VtZW50VHlwZSB8fCBpbmZvcm1hdGllb2JqZWN0dHlwZSxcbiAgICAgICAgc3RhdHVzOiB2YWxpZFByZWZpbGxTdGF0dXMsXG4gICAgICAgIHZlcnRyb3V3ZWxpamtoZWlkYWFuZHVpZGluZzogdGhpcy5jb25maWRlbnRpYWxpdHlMZXZlbCB8fCB2ZXJ0cm91d2VsaWpraGVpZGFhbmR1aWRpbmcsXG4gICAgICAgIGNyZWF0aWVkYXR1bSxcbiAgICAgICAgb250dmFuZ3N0ZGF0dW0sXG4gICAgICAgIHZlcnplbmRkYXR1bSxcbiAgICAgICAgdHJlZndvb3JkZW4sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2F2ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1hdERhdGUoJ2NyZWF0aWVkYXR1bScpO1xuICAgIHRoaXMuZm9ybWF0RGF0ZSgndmVyemVuZGRhdHVtJyk7XG4gICAgdGhpcy5mb3JtYXREYXRlKCdvbnR2YW5nc3RkYXR1bScpO1xuXG4gICAgY29uc3QgcmF3VmFsdWUgPSB0aGlzLmRvY3VtZW50ZW5BcGlNZXRhZGF0YUZvcm0uZ2V0UmF3VmFsdWUoKTtcbiAgICBjb25zdCBtYXBwZWRSYXdWYWx1ZSA9IE9iamVjdC5rZXlzKHJhd1ZhbHVlKS5yZWR1Y2UoXG4gICAgICAoYWNjLCBjdXJyZW50S2V5KSA9PlxuICAgICAgICByYXdWYWx1ZVtjdXJyZW50S2V5XSAhPT0gdW5kZWZpbmVkID8gey4uLmFjYywgW2N1cnJlbnRLZXldOiByYXdWYWx1ZVtjdXJyZW50S2V5XX0gOiBhY2MsXG4gICAgICB7fVxuICAgICkgYXMgRG9jdW1lbnRlbkFwaU1ldGFkYXRhO1xuXG4gICAgaWYgKHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS52YWxpZCkgdGhpcy5tZXRhZGF0YS5lbWl0KG1hcHBlZFJhd1ZhbHVlKTtcblxuICAgIHRoaXMuY2xvc2VNb2RhbCgpO1xuICB9XG5cbiAgcHVibGljIGNsb3NlTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RhbFNlcnZpY2UuY2xvc2VNb2RhbCgoKSA9PiB7XG4gICAgICB0aGlzLmFkZGl0aW9uYWxEb2N1bWVudERhdGUkLm5leHQoJ25laXRoZXInKTtcbiAgICAgIHRoaXMubW9kYWxDbG9zZS5lbWl0KCk7XG4gICAgICB0aGlzLmNsZWFyRm9ybSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckZvcm0oKTogdm9pZCB7XG4gICAgdGhpcy5kb2N1bWVudGVuQXBpTWV0YWRhdGFGb3JtLnJlc2V0KCk7XG4gIH1cblxuICBwcml2YXRlIHByZWZpbGxGaWxlbmFtZUFuZEF1dGhvcigpIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuZmlsZSQsIHRoaXMudXNlckVtYWlsJF0pXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRhcCgoW2ZpbGUsIHVzZXJFbWFpbF0pID0+IHtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgICAgICAgYmVzdGFuZHNuYWFtOiB0aGlzLmZpbGVuYW1lIHx8IGZpbGU/Lm5hbWUgfHwgZmlsZT8uYmVzdGFuZHNuYWFtLFxuICAgICAgICAgICAgICBhdXRldXI6IHRoaXMuYXV0aG9yIHx8IHVzZXJFbWFpbCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0RGF0ZShjb250cm9sTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5jb250cm9sc1tjb250cm9sTmFtZV07XG4gICAgaWYgKGNvbnRyb2wudmFsdWUpIHtcbiAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShjb250cm9sLnZhbHVlKTtcbiAgICAgIHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgW2NvbnRyb2xOYW1lXTogYCR7ZGF0ZS5nZXRGdWxsWWVhcigpfS0keyhkYXRlLmdldE1vbnRoKCkgKyAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9LSR7ZGF0ZS5nZXREYXRlKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfWAsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9wZW5GaWxlU3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX2ZpbGVTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgaWYgKHRoaXMuZmlsZSQpIHtcbiAgICAgIHRoaXMuX2ZpbGVTdWJzY3JpcHRpb24gPSB0aGlzLmZpbGUkLnN1YnNjcmliZShmaWxlID0+IHtcbiAgICAgICAgaWYgKGZpbGUpIHtcbiAgICAgICAgICB0aGlzLnByZWZpbGxGb3JtKGZpbGUpO1xuICAgICAgICAgIHRoaXMuaXNEZWZpbml0aXZlU3RhdHVzJC5uZXh0KFxuICAgICAgICAgICAgZmlsZS5zdGF0dXMgPT09ICdkZWZpbml0aWVmJyAmJiB0aGlzLmlzRWRpdE1vZGUgPyB0cnVlIDogZmFsc2VcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb3BlbkRpc2FibGVkU3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5kaXNhYmxlZCQ/LnN1YnNjcmliZShkaXNhYmxlZCA9PiB7XG4gICAgICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgICAgIHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5kaXNhYmxlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kb2N1bWVudGVuQXBpTWV0YWRhdGFGb3JtLmVuYWJsZSgpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHNldEFkZGl0aW9uYWxEYXRlKHZhbHVlOiBBZGRpdGlvbmFsRG9jdW1lbnREYXRlKTogdm9pZCB7XG4gICAgdGhpcy5hZGRpdGlvbmFsRG9jdW1lbnREYXRlJC5uZXh0KHZhbHVlKTtcbiAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuXG48di1tb2RhbFxuICAjbWV0YWRhdGFNb2RhbFxuICAqbmdJZj1cIntcbiAgICBmaWxlOiBmaWxlJCB8IGFzeW5jLFxuICAgIGRpc2FibGVkOiBkaXNhYmxlZCQgfCBhc3luYyxcbiAgICBpc0RlZmluaXRpdmVTdGF0dXM6IGlzRGVmaW5pdGl2ZVN0YXR1cyQgfCBhc3luYyxcbiAgICBsYW5ndWFnZUl0ZW1zOiBsYW5ndWFnZUl0ZW1zJCB8IGFzeW5jLFxuICAgIHN0YXR1c0l0ZW1zOiBzdGF0dXNJdGVtcyQgfCBhc3luYyxcbiAgICB0YWdJdGVtczogdGFnSXRlbXMkIHwgYXN5bmMsXG4gICAgdXNlckVtYWlsOiB1c2VyRW1haWwkIHwgYXN5bmMsXG4gICAgb3Blbjogb3BlbiQgfCBhc3luYyxcbiAgICBhZGRpdGlvbmFsRGF0ZTogYWRkaXRpb25hbERvY3VtZW50RGF0ZSQgfCBhc3luYyxcbiAgfSBhcyBvYnNcIlxuICBbbWF4V2lkdGhQeF09XCIxMjgwXCJcbiAgKGNsb3NlRXZlbnQpPVwiY2xvc2VNb2RhbCgpXCJcbj5cbiAgPGRpdiByb2xlPVwiaGVhZGVyXCI+XG4gICAgQGlmIChpc0VkaXRNb2RlKSB7XG4gICAgICA8aDMgY2RzTW9kYWxIZWFkZXJIZWFkaW5nPlxuICAgICAgICB7eyAnZG9jdW1lbnQuZWRpdE1ldGFkYXRhJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9oMz5cbiAgICB9IEBlbHNlIHtcbiAgICAgIDxoMyBjZHNNb2RhbEhlYWRlckhlYWRpbmc+XG4gICAgICAgIHt7ICdkb2N1bWVudC5maWxsSW5NZXRhZGF0YScgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvaDM+XG4gICAgfVxuICA8L2Rpdj5cblxuICA8ZGl2IHJvbGU9XCJjb250ZW50XCI+XG4gICAgQGlmIChvYnMub3Blbikge1xuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1ldGFkYXRhRm9ybTsgY29udGV4dDoge29iczogb2JzfVwiPjwvbmctY29udGFpbmVyPlxuICAgIH1cbiAgPC9kaXY+XG5cbiAgPGRpdiByb2xlPVwiZm9vdGVyXCIgY2xhc3M9XCJtZXRhZGF0YS1tb2RhbC1mb290ZXJcIj5cbiAgICA8YnV0dG9uIGNkc0J1dHRvbj1cImdob3N0XCIgKGNsaWNrKT1cImNsb3NlTW9kYWwoKVwiIFtkaXNhYmxlZF09XCJvYnMuZGlzYWJsZWRcIj5cbiAgICAgIHt7ICdkb2N1bWVudC5jYW5jZWwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG5cbiAgICA8YnV0dG9uXG4gICAgICBjZHNCdXR0b249XCJwcmltYXJ5XCJcbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlZCB8fCAhZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS52YWxpZCB8fCBvYnMuaXNEZWZpbml0aXZlU3RhdHVzXCJcbiAgICAgIChjbGljayk9XCJzYXZlKClcIlxuICAgID5cbiAgICAgIHt7ICdkb2N1bWVudC5zYXZlJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvdi1tb2RhbD5cblxuPG5nLXRlbXBsYXRlICNtZXRhZGF0YUZvcm0gbGV0LW9icz1cIm9ic1wiPlxuICA8Zm9ybSBbZm9ybUdyb3VwXT1cImRvY3VtZW50ZW5BcGlNZXRhZGF0YUZvcm1cIj5cbiAgICA8ZGl2IGNsYXNzPVwiZG9jdW1lbnRlbi1tZXRhZGF0YS1mb3JtLWNvbHVtbnMtY29udGFpbmVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZG9jdW1lbnRlbi1tZXRhZGF0YS1mb3JtLWNvbHVtblwiPlxuICAgICAgICA8Y2RzLXRleHQtbGFiZWwgY2xhc3M9XCJkb2N1bWVudGVuLW1ldGFkYS1mb3JtLWlucHV0XCI+XG4gICAgICAgICAge3sgJ2RvY3VtZW50LmZpbGVuYW1lJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDxjZHMtdG9vbHRpcFxuICAgICAgICAgICAgW2lzT3Blbl09XCJmYWxzZVwiXG4gICAgICAgICAgICBbZGVzY3JpcHRpb25dPVwiJ2RvY3VtZW50LmZpbGVuYW1lVG9vbHRpcCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgW2FsaWduXT1cIidib3R0b20tbGVmdCdcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1oZWxwLWNpcmNsZS1vdXRsaW5lXCI+PC9pPlxuICAgICAgICAgIDwvY2RzLXRvb2x0aXA+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBbdmFsdWVdPVwiZmlsZW5hbWVcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidkb2N1bWVudC5maWxlbmFtZVBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICBjZHNUZXh0XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBpZD1cImJlc3RhbmRzbmFhbVwiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJiZXN0YW5kc25hYW1cIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvY2RzLXRleHQtbGFiZWw+XG4gICAgICAgIDxjZHMtdGV4dC1sYWJlbCBjbGFzcz1cImRvY3VtZW50ZW4tbWV0YWRhLWZvcm0taW5wdXRcIj5cbiAgICAgICAgICB7eyAnZG9jdW1lbnQuYXV0aG9yJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDxjZHMtdG9vbHRpcFxuICAgICAgICAgICAgW2lzT3Blbl09XCJmYWxzZVwiXG4gICAgICAgICAgICBbZGVzY3JpcHRpb25dPVwiJ2RvY3VtZW50LmF1dGhvclRvb2x0aXAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFthbGlnbl09XCInYm90dG9tLWxlZnQnXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktaGVscC1jaXJjbGUtb3V0bGluZVwiPjwvaT5cbiAgICAgICAgICA8L2Nkcy10b29sdGlwPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgW3ZhbHVlXT1cImF1dGhvclwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2RvY3VtZW50LmF1dGhvclBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICBjZHNUZXh0XG4gICAgICAgICAgICBpZD1cImF1dGV1clwiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJhdXRldXJcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvY2RzLXRleHQtbGFiZWw+XG4gICAgICAgIDxjZHMtdGV4dC1sYWJlbD5cbiAgICAgICAgICB7eyAnZG9jdW1lbnQubGFuZ3VhZ2UnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPGNkcy10b29sdGlwXG4gICAgICAgICAgICBbaXNPcGVuXT1cImZhbHNlXCJcbiAgICAgICAgICAgIFtkZXNjcmlwdGlvbl09XCInZG9jdW1lbnQubGFuZ3VhZ2VUb29sdGlwJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbYWxpZ25dPVwiJ2JvdHRvbS1sZWZ0J1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWhlbHAtY2lyY2xlLW91dGxpbmVcIj48L2k+XG4gICAgICAgICAgPC9jZHMtdG9vbHRpcD5cbiAgICAgICAgPC9jZHMtdGV4dC1sYWJlbD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRvY3VtZW50ZW4tbWV0YWRhLWZvcm0taW5wdXRcIj5cbiAgICAgICAgICA8Y2RzLWRyb3Bkb3duXG4gICAgICAgICAgICAqbmdJZj1cIm9icy5sYW5ndWFnZUl0ZW1zXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJvYnMuZGlzYWJsZWQgfHwgKGxhbmd1YWdlRGlzYWJsZWQkIHwgYXN5bmMpXCJcbiAgICAgICAgICAgIFthcHBlbmRJbmxpbmVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2RvY3VtZW50Lmxhbmd1YWdlUGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIGlkPVwibGFuZ3VhZ2VcIlxuICAgICAgICAgICAgKHNlbGVjdGVkKT1cImxhbmd1YWdlU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGNkcy1kcm9wZG93bi1saXN0IFtpdGVtc109XCJvYnMubGFuZ3VhZ2VJdGVtcyB8fCBbXVwiPjwvY2RzLWRyb3Bkb3duLWxpc3Q+XG4gICAgICAgICAgPC9jZHMtZHJvcGRvd24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8Y2RzLWxhYmVsPlxuICAgICAgICAgIHt7ICdkb2N1bWVudC5jb25maWRlbnRpYWxpdHlMZXZlbCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8Y2RzLXRvb2x0aXBcbiAgICAgICAgICAgIFtpc09wZW5dPVwiZmFsc2VcIlxuICAgICAgICAgICAgW2Rlc2NyaXB0aW9uXT1cIidkb2N1bWVudC5jb25maWRlbnRpYWxpdHlMZXZlbFRvb2x0aXAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFthbGlnbl09XCInYm90dG9tLWxlZnQnXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktaGVscC1jaXJjbGUtb3V0bGluZVwiPjwvaT5cbiAgICAgICAgICA8L2Nkcy10b29sdGlwPlxuICAgICAgICA8L2Nkcy1sYWJlbD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRvY3VtZW50ZW4tbWV0YWRhLWZvcm0taW5wdXRcIj5cbiAgICAgICAgICA8Y2RzLWRyb3Bkb3duXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2RvY3VtZW50LmNvbmZpZGVudGlhbGl0eVBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBpZD1cInZlcnRyb3V3ZWxpamtoZWlkYWFuZHVpZGluZ1wiXG4gICAgICAgICAgICBbYXBwZW5kSW5saW5lXT1cInRydWVcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlZCB8fCAoY29uZmlkZW50aWFsaXR5TGV2ZWxEaXNhYmxlZCQgfCBhc3luYylcIlxuICAgICAgICAgICAgKHNlbGVjdGVkKT1cImNvbmZpZGVudGlhbGl0eUxldmVsU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGNkcy1kcm9wZG93bi1saXN0IFtpdGVtc109XCJjb25maWRlbnRpYWxpdHlMZXZlbEl0ZW1zJCB8IGFzeW5jXCI+PC9jZHMtZHJvcGRvd24tbGlzdD5cbiAgICAgICAgICA8L2Nkcy1kcm9wZG93bj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ7ZG9jdW1lbnRUeXBlSXRlbXM6IGRvY3VtZW50VHlwZUl0ZW1zJCB8IGFzeW5jfSBhcyBvYnNcIj5cbiAgICAgICAgICA8Y2RzLWxhYmVsPlxuICAgICAgICAgICAge3sgJ2RvY3VtZW50LmluZm9ybWF0aWVvYmplY3R0eXBlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPGNkcy10b29sdGlwXG4gICAgICAgICAgICAgIFtpc09wZW5dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbZGVzY3JpcHRpb25dPVwiJ2RvY3VtZW50LmluZm9ybWF0aWVvYmplY3R0eXBlVG9vbHRpcCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbYWxpZ25dPVwiJ2JvdHRvbS1sZWZ0J1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1oZWxwLWNpcmNsZS1vdXRsaW5lXCI+PC9pPlxuICAgICAgICAgICAgPC9jZHMtdG9vbHRpcD5cbiAgICAgICAgICA8L2Nkcy1sYWJlbD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZG9jdW1lbnRlbi1tZXRhZGEtZm9ybS1pbnB1dFwiPlxuICAgICAgICAgICAgPGNkcy1kcm9wZG93blxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2RvY3VtZW50LmluZm9ybWF0aWVvYmplY3R0eXBlUGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlZCB8fCAoaW5mb3JtYXRpZW9iamVjdHR5cGVEaXNhYmxlZCQgfCBhc3luYylcIlxuICAgICAgICAgICAgICBpZD1cImluZm9ybWF0aWVvYmplY3R0eXBlXCJcbiAgICAgICAgICAgICAgW2FwcGVuZElubGluZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cImluZm9ybWF0aWVvYmplY3R0eXBlU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxjZHMtZHJvcGRvd24tbGlzdCBbaXRlbXNdPVwib2JzLmRvY3VtZW50VHlwZUl0ZW1zIHx8IFtdXCI+PC9jZHMtZHJvcGRvd24tbGlzdD5cbiAgICAgICAgICAgIDwvY2RzLWRyb3Bkb3duPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGNkcy10ZXh0LWxhYmVsIG5hbWU9XCInYWRkaXRpb25hbERhdGUnXCI+XG4gICAgICAgICAge3sgJ2RvY3VtZW50LmFkZGl0aW9uYWxEYXRlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDxjZHMtdG9vbHRpcFxuICAgICAgICAgICAgW2lzT3Blbl09XCJmYWxzZVwiXG4gICAgICAgICAgICBbZGVzY3JpcHRpb25dPVwiJ2RvY3VtZW50LmFkZGl0aW9uYWxEYXRlVG9vbHRpcCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgW2FsaWduXT1cIidib3R0b20tbGVmdCdcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1oZWxwLWNpcmNsZS1vdXRsaW5lXCI+PC9pPlxuICAgICAgICAgIDwvY2RzLXRvb2x0aXA+XG4gICAgICAgIDwvY2RzLXRleHQtbGFiZWw+XG4gICAgICAgIDxjZHMtcmFkaW8tZ3JvdXAgW29yaWVudGF0aW9uXT1cIidob3Jpem9udGFsJ1wiIGNsYXNzPVwiZG9jdW1lbnRlbi1tZXRhZGEtZm9ybS1pbnB1dFwiPlxuICAgICAgICAgIDxjZHMtcmFkaW9cbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgQURESVRPTkFMX0RPQ1VNRU5UX0RBVEVfT1BUSU9OU1wiXG4gICAgICAgICAgICBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cIm9icy5hZGRpdGlvbmFsRGF0ZSA9PT0gb3B0aW9uLnZhbHVlXCJcbiAgICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzZXRBZGRpdGlvbmFsRGF0ZShvcHRpb24udmFsdWUpXCJcbiAgICAgICAgICAgIG5hbWU9XCJyYWRpby1pbmxpbmVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IG9wdGlvbi50cmFuc2xhdGlvbktleSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvY2RzLXJhZGlvPlxuICAgICAgICA8L2Nkcy1yYWRpby1ncm91cD5cbiAgICAgICAgQGlmIChzdXBwb3J0c1RyZWZ3b29yZGVuKSB7XG4gICAgICAgICAgPGNkcy10ZXh0LWxhYmVsPlxuICAgICAgICAgICAge3sgJ2RvY3VtZW50LnRhZ3MnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8Y2RzLXRvb2x0aXBcbiAgICAgICAgICAgICAgW2lzT3Blbl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtkZXNjcmlwdGlvbl09XCInZG9jdW1lbnQudGFnc1Rvb2x0aXAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW2FsaWduXT1cIidib3R0b20tbGVmdCdcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktaGVscC1jaXJjbGUtb3V0bGluZVwiPjwvaT5cbiAgICAgICAgICAgIDwvY2RzLXRvb2x0aXA+XG4gICAgICAgICAgPC9jZHMtdGV4dC1sYWJlbD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZG9jdW1lbnRlbi1tZXRhZGEtZm9ybS1pbnB1dFwiPlxuICAgICAgICAgICAgPGNkcy1jb21iby1ib3hcbiAgICAgICAgICAgICAgW3R5cGVdPVwiJ211bHRpJ1wiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInZG9jdW1lbnQudGFnc1BsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJvYnMuZGlzYWJsZWQgfHwgb2JzLnRhZ0l0ZW1zLmxlbmd0aCA9PT0gMFwiXG4gICAgICAgICAgICAgIFthcHBlbmRJbmxpbmVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIChzZWxlY3RlZCk9XCJ0YWdzU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGNkcy1kcm9wZG93bi1saXN0IFtpdGVtc109XCJvYnMudGFnSXRlbXMgfHwgW11cIj48L2Nkcy1kcm9wZG93bi1saXN0PlxuICAgICAgICAgICAgPC9jZHMtY29tYm8tYm94PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImRvY3VtZW50ZW4tbWV0YWRhdGEtZm9ybS1jb2x1bW5cIj5cbiAgICAgICAgPGNkcy10ZXh0LWxhYmVsPlxuICAgICAgICAgIHt7ICdkb2N1bWVudC5pbnB1dFRpdGxlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidkb2N1bWVudC5pbnB1dFRpdGxlUGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgIGNkc1RleHRcbiAgICAgICAgICAgIGNsYXNzPVwiZG9jdW1lbnRlbi1tZXRhZGEtZm9ybS1pbnB1dFwiXG4gICAgICAgICAgICBpZD1cInRpdGVsXCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInRpdGVsXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxjZHMtdG9vbHRpcFxuICAgICAgICAgICAgW2lzT3Blbl09XCJmYWxzZVwiXG4gICAgICAgICAgICBbZGVzY3JpcHRpb25dPVwiJ2RvY3VtZW50LmlucHV0VGl0bGVUb29sdGlwJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbYWxpZ25dPVwiJ2JvdHRvbSdcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1oZWxwLWNpcmNsZS1vdXRsaW5lXCI+PC9pPlxuICAgICAgICAgIDwvY2RzLXRvb2x0aXA+XG4gICAgICAgIDwvY2RzLXRleHQtbGFiZWw+XG4gICAgICAgIDxjZHMtdGV4dGFyZWEtbGFiZWw+XG4gICAgICAgICAge3sgJ2RvY3VtZW50LmlucHV0RGVzY3JpcHRpb24nIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2RvY3VtZW50LmlucHV0RGVzY3JpcHRpb25QbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICAgICAgW3Jvd3NdPVwiNVwiXG4gICAgICAgICAgICBjZHNUZXh0QXJlYVxuICAgICAgICAgICAgY2xhc3M9XCJkb2N1bWVudGVuLW1ldGFkYS1mb3JtLWRlc2NyaXB0aW9uLWlucHV0IGRvY3VtZW50ZW4tbWV0YWRhLWZvcm0taW5wdXRcIlxuICAgICAgICAgICAgaWQ9XCJiZXNjaHJpanZpbmdcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiYmVzY2hyaWp2aW5nXCJcbiAgICAgICAgICA+PC90ZXh0YXJlYT5cbiAgICAgICAgICA8Y2RzLXRvb2x0aXBcbiAgICAgICAgICAgIFtpc09wZW5dPVwiZmFsc2VcIlxuICAgICAgICAgICAgW2Rlc2NyaXB0aW9uXT1cIidkb2N1bWVudC5pbnB1dERlc2NyaXB0aW9uVG9vbHRpcCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgW2FsaWduXT1cIidib3R0b20nXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktaGVscC1jaXJjbGUtb3V0bGluZVwiPjwvaT5cbiAgICAgICAgICA8L2Nkcy10b29sdGlwPlxuICAgICAgICA8L2Nkcy10ZXh0YXJlYS1sYWJlbD5cbiAgICAgICAgPGNkcy1sYWJlbD5cbiAgICAgICAgICB7eyAnZG9jdW1lbnQuY3JlYXRpb25EYXRlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDxjZHMtdG9vbHRpcFxuICAgICAgICAgICAgW2lzT3Blbl09XCJmYWxzZVwiXG4gICAgICAgICAgICBbZGVzY3JpcHRpb25dPVwiJ2RvY3VtZW50LmNyZWF0aW9uRGF0ZVRvb2x0aXAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFthbGlnbl09XCInYm90dG9tJ1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWhlbHAtY2lyY2xlLW91dGxpbmVcIj48L2k+XG4gICAgICAgICAgPC9jZHMtdG9vbHRpcD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZG9jdW1lbnRlbi1tZXRhZGEtZm9ybS1pbnB1dFwiPlxuICAgICAgICAgICAgPGNkcy1kYXRlLXBpY2tlclxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0RELU1NLVlZWVknXCJcbiAgICAgICAgICAgICAgW2RhdGVGb3JtYXRdPVwiJ2QtbS1ZJ1wiXG4gICAgICAgICAgICAgIGlkPVwiY3JlYXRpZWRhdHVtXCJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY3JlYXRpZWRhdHVtXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvY2RzLWRhdGUtcGlja2VyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Nkcy1sYWJlbD5cbiAgICAgICAgPGNkcy1sYWJlbD5cbiAgICAgICAgICB7eyAnZG9jdW1lbnQuc3RhdHVzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDxjZHMtdG9vbHRpcFxuICAgICAgICAgICAgW2lzT3Blbl09XCJmYWxzZVwiXG4gICAgICAgICAgICBbZGVzY3JpcHRpb25dPVwiJ2RvY3VtZW50LnN0YXR1c1Rvb2x0aXAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFthbGlnbl09XCInYm90dG9tJ1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWhlbHAtY2lyY2xlLW91dGxpbmVcIj48L2k+XG4gICAgICAgICAgPC9jZHMtdG9vbHRpcD5cbiAgICAgICAgPC9jZHMtbGFiZWw+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkb2N1bWVudGVuLW1ldGFkYS1mb3JtLWlucHV0XCI+XG4gICAgICAgICAgPGNkcy1kcm9wZG93blxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidkb2N1bWVudC5zdGF0dXNQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlZCB8fCAoc3RhdHVzRGlzYWJsZWQkIHwgYXN5bmMpXCJcbiAgICAgICAgICAgIGlkPVwic3RhdHVzXCJcbiAgICAgICAgICAgIFthcHBlbmRJbmxpbmVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAoc2VsZWN0ZWQpPVwic3RhdHVzU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGNkcy1kcm9wZG93bi1saXN0IFtpdGVtc109XCJvYnMuc3RhdHVzSXRlbXMgfHwgW11cIj48L2Nkcy1kcm9wZG93bi1saXN0PlxuICAgICAgICAgIDwvY2RzLWRyb3Bkb3duPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGNkcy1kYXRlLXBpY2tlclxuICAgICAgICAgICpuZ0lmPVwib2JzLmFkZGl0aW9uYWxEYXRlID09PSAncmVjZWl2ZWQnXCJcbiAgICAgICAgICBbbGFiZWxdPVwiJ2RvY3VtZW50LmFkZGl0aW9uYWxEYXRlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidERC1NTS1ZWVlZJ1wiXG4gICAgICAgICAgW2RhdGVGb3JtYXRdPVwiJ2QtbS1ZJ1wiXG4gICAgICAgICAgaWQ9XCJvbnR2YW5nc3RkYXR1bVwiXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwib250dmFuZ3N0ZGF0dW1cIlxuICAgICAgICA+PC9jZHMtZGF0ZS1waWNrZXI+XG4gICAgICAgIDxjZHMtZGF0ZS1waWNrZXJcbiAgICAgICAgICAqbmdJZj1cIm9icy5hZGRpdGlvbmFsRGF0ZSA9PT0gJ3NlbnQnXCJcbiAgICAgICAgICBbbGFiZWxdPVwiJ2RvY3VtZW50LmFkZGl0aW9uYWxEYXRlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidERC1NTS1ZWVlZJ1wiXG4gICAgICAgICAgW2RhdGVGb3JtYXRdPVwiJ2QtbS1ZJ1wiXG4gICAgICAgICAgaWQ9XCJ2ZXJ6ZW5kZGF0dW1cIlxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInZlcnplbmRkYXR1bVwiXG4gICAgICAgID48L2Nkcy1kYXRlLXBpY2tlcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Zvcm0+XG48L25nLXRlbXBsYXRlPlxuIl19