@po-ui/ng-components 18.21.0 → 18.23.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.
- package/esm2022/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-field.interface.mjs +1 -1
- package/esm2022/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-fields/po-dynamic-form-fields.component.mjs +19 -19
- package/esm2022/lib/components/po-field/po-checkbox-group/po-checkbox-group-base.component.mjs +18 -2
- package/esm2022/lib/components/po-field/po-checkbox-group/po-checkbox-group.component.mjs +4 -4
- package/esm2022/lib/components/po-field/po-combo/po-combo-base.component.mjs +22 -2
- package/esm2022/lib/components/po-field/po-combo/po-combo.component.mjs +4 -4
- package/esm2022/lib/components/po-field/po-datepicker/po-datepicker-base.component.mjs +22 -2
- package/esm2022/lib/components/po-field/po-datepicker/po-datepicker.component.mjs +4 -4
- package/esm2022/lib/components/po-field/po-datepicker-range/po-datepicker-range-base.component.mjs +18 -2
- package/esm2022/lib/components/po-field/po-datepicker-range/po-datepicker-range.component.mjs +4 -4
- package/esm2022/lib/components/po-field/po-decimal/po-decimal.component.mjs +4 -4
- package/esm2022/lib/components/po-field/po-email/po-email.component.mjs +4 -4
- package/esm2022/lib/components/po-field/po-field-container/po-field-container-bottom/po-field-container-bottom.component.mjs +27 -10
- package/esm2022/lib/components/po-field/po-field-container/po-field-container.module.mjs +5 -4
- package/esm2022/lib/components/po-field/po-field-validate.model.mjs +22 -2
- package/esm2022/lib/components/po-field/po-input/po-input-base.component.mjs +22 -2
- package/esm2022/lib/components/po-field/po-input/po-input.component.mjs +4 -4
- package/esm2022/lib/components/po-field/po-login/po-login.component.mjs +4 -4
- package/esm2022/lib/components/po-field/po-lookup/po-lookup-base.component.mjs +22 -2
- package/esm2022/lib/components/po-field/po-lookup/po-lookup.component.mjs +4 -4
- package/esm2022/lib/components/po-field/po-multiselect/po-multiselect-base.component.mjs +22 -2
- package/esm2022/lib/components/po-field/po-multiselect/po-multiselect.component.mjs +4 -4
- package/esm2022/lib/components/po-field/po-number/po-number.component.mjs +4 -4
- package/esm2022/lib/components/po-field/po-password/po-password.component.mjs +4 -4
- package/esm2022/lib/components/po-field/po-radio-group/po-radio-group-base.component.mjs +18 -2
- package/esm2022/lib/components/po-field/po-radio-group/po-radio-group.component.mjs +4 -4
- package/esm2022/lib/components/po-field/po-rich-text/po-rich-text-base.component.mjs +18 -2
- package/esm2022/lib/components/po-field/po-rich-text/po-rich-text.component.mjs +4 -4
- package/esm2022/lib/components/po-field/po-select/po-select.component.mjs +4 -4
- package/esm2022/lib/components/po-field/po-textarea/po-textarea-base.component.mjs +18 -2
- package/esm2022/lib/components/po-field/po-textarea/po-textarea.component.mjs +4 -4
- package/esm2022/lib/components/po-field/po-upload/po-upload-base.component.mjs +86 -2
- package/esm2022/lib/components/po-field/po-upload/po-upload.component.mjs +17 -7
- package/esm2022/lib/components/po-field/po-url/po-url.component.mjs +4 -4
- package/esm2022/lib/components/po-progress/index.mjs +2 -1
- package/esm2022/lib/components/po-progress/interfaces/index.mjs +2 -0
- package/esm2022/lib/components/po-progress/interfaces/po-progress-actions.interface.mjs +2 -0
- package/esm2022/lib/components/po-progress/po-progress-base.component.mjs +87 -2
- package/esm2022/lib/components/po-progress/po-progress.component.mjs +44 -15
- package/fesm2022/po-ui-ng-components.mjs +553 -132
- package/fesm2022/po-ui-ng-components.mjs.map +1 -1
- package/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-field.interface.d.ts +57 -1
- package/lib/components/po-field/po-checkbox-group/po-checkbox-group-base.component.d.ts +14 -1
- package/lib/components/po-field/po-combo/po-combo-base.component.d.ts +16 -1
- package/lib/components/po-field/po-datepicker/po-datepicker-base.component.d.ts +16 -1
- package/lib/components/po-field/po-datepicker-range/po-datepicker-range-base.component.d.ts +14 -1
- package/lib/components/po-field/po-field-container/po-field-container-bottom/po-field-container-bottom.component.d.ts +7 -1
- package/lib/components/po-field/po-field-container/po-field-container.module.d.ts +2 -1
- package/lib/components/po-field/po-field-validate.model.d.ts +16 -1
- package/lib/components/po-field/po-input/po-input-base.component.d.ts +16 -1
- package/lib/components/po-field/po-lookup/po-lookup-base.component.d.ts +16 -1
- package/lib/components/po-field/po-multiselect/po-multiselect-base.component.d.ts +16 -1
- package/lib/components/po-field/po-radio-group/po-radio-group-base.component.d.ts +14 -1
- package/lib/components/po-field/po-rich-text/po-rich-text-base.component.d.ts +14 -1
- package/lib/components/po-field/po-textarea/po-textarea-base.component.d.ts +14 -1
- package/lib/components/po-field/po-upload/po-upload-base.component.d.ts +80 -1
- package/lib/components/po-field/po-upload/po-upload.component.d.ts +6 -0
- package/lib/components/po-progress/index.d.ts +1 -0
- package/lib/components/po-progress/interfaces/index.d.ts +1 -0
- package/lib/components/po-progress/interfaces/po-progress-actions.interface.d.ts +83 -0
- package/lib/components/po-progress/po-progress-base.component.d.ts +81 -1
- package/lib/components/po-progress/po-progress.component.d.ts +4 -0
- package/package.json +4 -4
- package/po-ui-ng-components-18.23.0.tgz +0 -0
- package/schematics/ng-add/index.js +1 -1
- package/schematics/ng-update/v14/index.js +1 -1
- package/schematics/ng-update/v15/index.js +1 -1
- package/schematics/ng-update/v16/index.js +1 -1
- package/schematics/ng-update/v17/index.js +1 -1
- package/schematics/ng-update/v18/index.js +2 -2
- package/schematics/ng-update/v2/index.js +1 -1
- package/schematics/ng-update/v3/index.js +1 -1
- package/schematics/ng-update/v4/index.js +1 -1
- package/schematics/ng-update/v5/index.js +1 -1
- package/schematics/ng-update/v6/index.js +1 -1
- package/po-ui-ng-components-18.21.0.tgz +0 -0
|
@@ -218,6 +218,84 @@ export class PoUploadBaseComponent {
|
|
|
218
218
|
* @default `true`
|
|
219
219
|
*/
|
|
220
220
|
requiredUrl = true;
|
|
221
|
+
/**
|
|
222
|
+
* @optional
|
|
223
|
+
*
|
|
224
|
+
* @description
|
|
225
|
+
*
|
|
226
|
+
* Define uma ação personalizada no componente `po-upload`, adicionando um botão no canto inferior direito
|
|
227
|
+
* de cada barra de progresso associada aos arquivos enviados ou em envio.
|
|
228
|
+
*
|
|
229
|
+
* A ação deve implementar a interface **PoProgressAction**, permitindo configurar propriedades como:
|
|
230
|
+
* - `label`: Texto do botão.
|
|
231
|
+
* - `icon`: Ícone a ser exibido no botão.
|
|
232
|
+
* - `type`: Tipo de botão (ex.: `danger` ou `default`).
|
|
233
|
+
* - `disabled`: Indica se o botão deve estar desabilitado.
|
|
234
|
+
* - `visible`: Indica se o botão deve estar visível.
|
|
235
|
+
*
|
|
236
|
+
* **Exemplo de uso:**
|
|
237
|
+
*
|
|
238
|
+
* ```html
|
|
239
|
+
* <po-upload
|
|
240
|
+
* [p-custom-action]="customAction"
|
|
241
|
+
* (p-custom-action-click)="onCustomActionClick($event)">
|
|
242
|
+
* </po-upload>
|
|
243
|
+
* ```
|
|
244
|
+
*
|
|
245
|
+
* ```typescript
|
|
246
|
+
* customAction: PoProgressAction = {
|
|
247
|
+
* label: 'Baixar',
|
|
248
|
+
* icon: 'ph ph-download',
|
|
249
|
+
* type: 'default',
|
|
250
|
+
* visible: true
|
|
251
|
+
* };
|
|
252
|
+
*
|
|
253
|
+
* onCustomActionClick(file: PoUploadFile) {
|
|
254
|
+
* console.log(`Ação personalizada clicada para o arquivo: ${file.name}`);
|
|
255
|
+
* }
|
|
256
|
+
* ```
|
|
257
|
+
*/
|
|
258
|
+
customAction;
|
|
259
|
+
/**
|
|
260
|
+
* @optional
|
|
261
|
+
*
|
|
262
|
+
* @description
|
|
263
|
+
*
|
|
264
|
+
* Evento emitido ao clicar na ação personalizada configurada no `p-custom-action`.
|
|
265
|
+
*
|
|
266
|
+
* O evento retorna o arquivo associado à barra de progresso onde a ação foi clicada,
|
|
267
|
+
* permitindo executar operações específicas para aquele arquivo.
|
|
268
|
+
*
|
|
269
|
+
* **Exemplo de uso:**
|
|
270
|
+
*
|
|
271
|
+
* ```html
|
|
272
|
+
* <po-upload
|
|
273
|
+
* [p-custom-action]="customAction"
|
|
274
|
+
* (p-custom-action-click)="onCustomActionClick($event)">
|
|
275
|
+
* </po-upload>
|
|
276
|
+
* ```
|
|
277
|
+
*
|
|
278
|
+
* ```typescript
|
|
279
|
+
* customAction: PoProgressAction = {
|
|
280
|
+
* label: 'Baixar',
|
|
281
|
+
* icon: 'ph ph-download',
|
|
282
|
+
* type: 'default',
|
|
283
|
+
* visible: true
|
|
284
|
+
* };
|
|
285
|
+
*
|
|
286
|
+
* onCustomActionClick(file: PoUploadFile) {
|
|
287
|
+
* console.log(`Ação personalizada clicada para o arquivo: ${file.name}`);
|
|
288
|
+
* // Lógica para download do arquivo
|
|
289
|
+
* this.downloadFile(file);
|
|
290
|
+
* }
|
|
291
|
+
*
|
|
292
|
+
* downloadFile(file: PoUploadFile) {
|
|
293
|
+
* // Exemplo de download
|
|
294
|
+
* console.log(`Iniciando o download do arquivo: ${file.name}`);
|
|
295
|
+
* }
|
|
296
|
+
* ```
|
|
297
|
+
*/
|
|
298
|
+
customActionClick = new EventEmitter();
|
|
221
299
|
/**
|
|
222
300
|
* @optional
|
|
223
301
|
*
|
|
@@ -644,7 +722,7 @@ export class PoUploadBaseComponent {
|
|
|
644
722
|
static ɵfac = function PoUploadBaseComponent_Factory(t) { return new (t || PoUploadBaseComponent)(i0.ɵɵdirectiveInject(i1.PoUploadService), i0.ɵɵdirectiveInject(i2.PoLanguageService)); };
|
|
645
723
|
static ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: PoUploadBaseComponent, hostVars: 1, hostBindings: function PoUploadBaseComponent_HostBindings(rf, ctx) { if (rf & 2) {
|
|
646
724
|
i0.ɵɵattribute("p-required-url", ctx.requiredUrl);
|
|
647
|
-
} }, inputs: { autoFocus: [2, "p-auto-focus", "autoFocus", convertToBoolean], dragDropHeight: [0, "p-drag-drop-height", "dragDropHeight"], label: [0, "p-label", "label"], help: [0, "p-help", "help"], url: [0, "p-url", "url"], name: "name", autoUpload: [0, "p-auto-upload", "autoUpload"], disabledRemoveFile: [2, "p-disabled-remove-file", "disabledRemoveFile", convertToBoolean], optional: [0, "p-optional", "optional"], headers: [0, "p-headers", "headers"], requiredUrl: [2, "p-required-url", "requiredUrl", convertToBoolean], directory: [0, "p-directory", "directory"], dragDrop: [0, "p-drag-drop", "dragDrop"], hideRestrictionsInfo: [0, "p-hide-restrictions-info", "hideRestrictionsInfo"], hideSelectButton: [0, "p-hide-select-button", "hideSelectButton"], hideSendButton: [0, "p-hide-send-button", "hideSendButton"], literals: [0, "p-literals", "literals"], fileRestrictions: [0, "p-restrictions", "fileRestrictions"], formField: [0, "p-form-field", "formField"], disabled: [0, "p-disabled", "disabled"], isMultiple: [0, "p-multiple", "isMultiple"], required: [0, "p-required", "required"], showRequired: [0, "p-show-required", "showRequired"] }, outputs: { onUpload: "p-upload", onError: "p-error", onSuccess: "p-success", ngModelChange: "ngModelChange" }, features: [i0.ɵɵInputTransformsFeature] });
|
|
725
|
+
} }, inputs: { autoFocus: [2, "p-auto-focus", "autoFocus", convertToBoolean], dragDropHeight: [0, "p-drag-drop-height", "dragDropHeight"], label: [0, "p-label", "label"], help: [0, "p-help", "help"], url: [0, "p-url", "url"], name: "name", autoUpload: [0, "p-auto-upload", "autoUpload"], disabledRemoveFile: [2, "p-disabled-remove-file", "disabledRemoveFile", convertToBoolean], optional: [0, "p-optional", "optional"], headers: [0, "p-headers", "headers"], requiredUrl: [2, "p-required-url", "requiredUrl", convertToBoolean], customAction: [0, "p-custom-action", "customAction"], directory: [0, "p-directory", "directory"], dragDrop: [0, "p-drag-drop", "dragDrop"], hideRestrictionsInfo: [0, "p-hide-restrictions-info", "hideRestrictionsInfo"], hideSelectButton: [0, "p-hide-select-button", "hideSelectButton"], hideSendButton: [0, "p-hide-send-button", "hideSendButton"], literals: [0, "p-literals", "literals"], fileRestrictions: [0, "p-restrictions", "fileRestrictions"], formField: [0, "p-form-field", "formField"], disabled: [0, "p-disabled", "disabled"], isMultiple: [0, "p-multiple", "isMultiple"], required: [0, "p-required", "required"], showRequired: [0, "p-show-required", "showRequired"] }, outputs: { customActionClick: "p-custom-action-click", onUpload: "p-upload", onError: "p-error", onSuccess: "p-success", ngModelChange: "ngModelChange" }, features: [i0.ɵɵInputTransformsFeature] });
|
|
648
726
|
}
|
|
649
727
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PoUploadBaseComponent, [{
|
|
650
728
|
type: Directive
|
|
@@ -684,6 +762,12 @@ export class PoUploadBaseComponent {
|
|
|
684
762
|
}, {
|
|
685
763
|
type: Input,
|
|
686
764
|
args: [{ alias: 'p-required-url', transform: convertToBoolean }]
|
|
765
|
+
}], customAction: [{
|
|
766
|
+
type: Input,
|
|
767
|
+
args: ['p-custom-action']
|
|
768
|
+
}], customActionClick: [{
|
|
769
|
+
type: Output,
|
|
770
|
+
args: ['p-custom-action-click']
|
|
687
771
|
}], onUpload: [{
|
|
688
772
|
type: Output,
|
|
689
773
|
args: ['p-upload']
|
|
@@ -733,4 +817,4 @@ export class PoUploadBaseComponent {
|
|
|
733
817
|
type: Input,
|
|
734
818
|
args: ['p-show-required']
|
|
735
819
|
}] }); })();
|
|
736
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tdXBsb2FkLWJhc2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9jb21wb25lbnRzL3BvLWZpZWxkL3BvLXVwbG9hZC9wby11cGxvYWQtYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHcEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFJckYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7OztBQUd6RCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRztJQUNyQyxFQUFFLEVBQW9CO1FBQ3BCLEtBQUssRUFBRSxPQUFPO1FBQ2QsT0FBTyxFQUFFLFNBQVM7UUFDbEIsVUFBVSxFQUFFLGFBQWE7UUFDekIsV0FBVyxFQUFFLGNBQWM7UUFDM0IsWUFBWSxFQUFFLGVBQWU7UUFDN0IsWUFBWSxFQUFFLGVBQWU7UUFDN0IsYUFBYSxFQUFFLGlCQUFpQjtRQUNoQyxlQUFlLEVBQUUsbUJBQW1CO1FBQ3BDLHFCQUFxQixFQUFFLGtDQUFrQztRQUN6RCxzQkFBc0IsRUFBRSxtQ0FBbUM7UUFDM0QsYUFBYSxFQUFFLGlCQUFpQjtRQUNoQyxlQUFlLEVBQUUsbUJBQW1CO1FBQ3BDLGVBQWUsRUFBRSwwQ0FBMEM7UUFDM0QsZUFBZSxFQUFFLGdFQUFnRTtRQUNqRixh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QVE7a0JBQWhDLEtBQUs7bUJBQUMsWUFBWTtZQXVCVSxnQkFBZ0I7a0JBQTVDLEtBQUs7bUJBQUMsZ0JBQWdCO1lBbUJJLFNBQVM7a0JBQW5DLEtBQUs7bUJBQUMsY0FBYztZQWlCSSxRQUFRO2tCQUFoQyxLQUFLO21CQUFDLFlBQVk7WUFtQk0sVUFBVTtrQkFBbEMsS0FBSzttQkFBQyxZQUFZO1lBaUJNLFFBQVE7a0JBQWhDLEtBQUs7bUJBQUMsWUFBWTtZQWdCTyxZQUFZO2tCQUFyQyxLQUFLO21CQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBjb252ZXJ0VG9Cb29sZWFuLCBpc0VxdWFscywgaXNJRSwgaXNNb2JpbGUgfSBmcm9tICcuLi8uLi8uLi91dGlscy91dGlsJztcbmltcG9ydCB7IHJlcXVpcmVkRmFpbGVkIH0gZnJvbSAnLi4vdmFsaWRhdG9ycyc7XG5cbmltcG9ydCB7IHBvTG9jYWxlRGVmYXVsdCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BvLWxhbmd1YWdlL3BvLWxhbmd1YWdlLmNvbnN0YW50JztcbmltcG9ydCB7IFBvTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcG8tbGFuZ3VhZ2UvcG8tbGFuZ3VhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBQb1VwbG9hZEZpbGVSZXN0cmljdGlvbnMgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tdXBsb2FkLWZpbGUtcmVzdHJpY3Rpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvVXBsb2FkTGl0ZXJhbHMgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tdXBsb2FkLWxpdGVyYWxzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1VwbG9hZEZpbGUgfSBmcm9tICcuL3BvLXVwbG9hZC1maWxlJztcbmltcG9ydCB7IFBvVXBsb2FkU3RhdHVzIH0gZnJvbSAnLi9wby11cGxvYWQtc3RhdHVzLmVudW0nO1xuaW1wb3J0IHsgUG9VcGxvYWRTZXJ2aWNlIH0gZnJvbSAnLi9wby11cGxvYWQuc2VydmljZSc7XG5cbmV4cG9ydCBjb25zdCBwb1VwbG9hZExpdGVyYWxzRGVmYXVsdCA9IHtcbiAgZW46IDxQb1VwbG9hZExpdGVyYWxzPntcbiAgICBmaWxlczogJ2ZpbGVzJyxcbiAgICBmb2xkZXJzOiAnZm9sZGVycycsXG4gICAgc2VsZWN0RmlsZTogJ1NlbGVjdCBmaWxlJyxcbiAgICBzZWxlY3RGaWxlczogJ1NlbGVjdCBmaWxlcycsXG4gICAgc2VsZWN0Rm9sZGVyOiAnU2VsZWN0IGZvbGRlcicsXG4gICAgc3RhcnRTZW5kaW5nOiAnU3RhcnQgc2VuZGluZycsXG4gICAgZHJhZ0ZpbGVzSGVyZTogJ0RyYWcgZmlsZXMgaGVyZScsXG4gICAgZHJhZ0ZvbGRlcnNIZXJlOiAnRHJhZyBmb2xkZXJzIGhlcmUnLFxuICAgIHNlbGVjdEZpbGVzT25Db21wdXRlcjogJ29yIHNlbGVjdCBmaWxlcyBvbiB5b3VyIGNvbXB1dGVyJyxcbiAgICBzZWxlY3RGb2xkZXJPbkNvbXB1dGVyOiAnb3Igc2VsZWN0IGZvbGRlciBvbiB5b3VyIGNvbXB1dGVyJyxcbiAgICBkcm9wRmlsZXNIZXJlOiAnRHJvcCBmaWxlcyBoZXJlJyxcbiAgICBkcm9wRm9sZGVyc0hlcmU6ICdEcm9wIGZvbGRlcnMgaGVyZScsXG4gICAgaW52YWxpZERyb3BBcmVhOiAnezB9IHdlcmUgbm90IGRyb3BwZWQgaW4gdGhlIGNvcnJlY3QgYXJlYScsXG4gICAgaW52YWxpZEZpbGVUeXBlOiAnRmFpbGVkIHRvIGxvYWQgezB9IGZpbGUocykgYXMgaXQgaXMgbm90IHRoZSBhbGxvd2VkIGZpbGUgdHlwZS4nLFxuICAgIGludmFsaWRBbW91bnQ6ICdGYWlsZWQgdG8gbG9hZCB7MH0gZmlsZShzKSwgYXMgaXQgZXhjZWVkcyB0aGUgbGltaXQgYW1vdW50IG9mIGZpbGVzLicsXG4gICAgaW52YWxpZEZvcm1hdDogJ0ZhaWxlZCB0byBsb2FkIHswfSBmaWxlKHMpLCBhcyBpdCBkb2VzIG5vdCBtYXRjaCB0aGUgZm9ybWF0KHMpOiB7MX0uJyxcbiAgICBpbnZhbGlkU2l6ZTogJ0ZhaWxlZCB0byBsb2FkIHswfSBmaWxlcyhzKSwgYXMgaXQgaXMgbm90IHRoZSBhbGxvd2VkIHNpemU6IGZyb20gezF9IHRvIHsyfS4nLFxuICAgIG51bWJlck9mRmlsZXNBbGxvd2VkOiAnezB9IGZpbGUocykgYWxsb3dlZCcsXG4gICAgYWxsb3dlZEZvcm1hdHM6ICdBY2NlcHRlZCBmaWxlIGZvcm1hdHM6IHswfS4nLFxuICAgIGFsbG93ZWRGaWxlU2l6ZVJhbmdlOiAnU2l6ZSBsaW1pdCBwZXIgZmlsZTogZnJvbSB7MH0gdG8gezF9JyxcbiAgICBtYXhGaWxlU2l6ZUFsbG93ZWQ6ICdTaXplIGxpbWl0IHBlciBmaWxlOiB7MH0gbWF4aW11bScsXG4gICAgbWluRmlsZVNpemVBbGxvd2VkOiAnU2l6ZSBsaW1pdCBwZXIgZmlsZTogezB9IG1pbmltdW0nLFxuICAgIGVycm9yT2NjdXJyZWQ6ICdBbiBlcnJvciBoYXMgb2NjdXJyZWQnLFxuICAgIHNlbnRXaXRoU3VjY2VzczogJ1NlbnQgd2l0aCBzdWNjZXNzJ1xuICB9LFxuICBlczogPFBvVXBsb2FkTGl0ZXJhbHM+e1xuICAgIGZpbGVzOiAnYXJjaGl2b3MnLFxuICAgIGZvbGRlcnM6ICdjYXJwZXRhcycsXG4gICAgc2VsZWN0RmlsZTogJ1NlbGVjY2lvbmFyIGFyY2hpdm8nLFxuICAgIHNlbGVjdEZpbGVzOiAnU2VsZWNjaW9uYXIgYXJjaGl2b3MnLFxuICAgIHNlbGVjdEZvbGRlcjogJ1NlbGVjY2lvbmFyIGNhcnBldGEnLFxuICAgIHN0YXJ0U2VuZGluZzogJ0luaWNpYXIgY2FyZ2EnLFxuICAgIGRyYWdGaWxlc0hlcmU6ICdBcnJhc3RyYSBsb3MgYXJjaGl2b3MgYXF1w60nLFxuICAgIGRyYWdGb2xkZXJzSGVyZTogJ0FycmFzdHJhIGxhcyBjYXJwZXRhcyBhcXXDrScsXG4gICAgc2VsZWN0RmlsZXNPbkNvbXB1dGVyOiAnbyBzZWxlY2Npb25hIGxvcyBhcmNoaXZvcyBlbiB0dSBjb21wdXRhZG9yYScsXG4gICAgc2VsZWN0Rm9sZGVyT25Db21wdXRlcjogJ28gc2VsZWNjaW9uYSBsYSBjYXJwZXRhIGVuIHR1IGNvbXB1dGFkb3JhJyxcbiAgICBkcm9wRmlsZXNIZXJlOiAnRGVqYSBsb3MgYXJjaGl2b3MgYXF1w60nLFxuICAgIGRyb3BGb2xkZXJzSGVyZTogJ0RlamEgbGFzIGNhcnBldGFzIGFxdcOtJyxcbiAgICBpbnZhbGlkRHJvcEFyZWE6ICdMb3MgezB9IG5vIHNlIGluc2VydGFyb24gZW4gbGEgdWJpY2FjacOzbiBjb3JyZWN0YScsXG4gICAgaW52YWxpZEZpbGVUeXBlOiAnRXJyb3IgYWwgY2FyZ2FyIHswfSBhcmNoaXZvIChzKSB5YSBxdWUgbm8gZXMgZWwgdGlwbyBkZSBhcmNoaXZvIHBlcm1pdGlkbycsXG4gICAgaW52YWxpZEFtb3VudDogJ0Vycm9yIGFsIGNhcmdhciB7MH0gYXJjaGl2byAocykgeWEgcXVlIGV4Y2VkZSBsYSBjYW50aWRhZCBsaW1pdGUgZGUgYXJjaGl2b3MuJyxcbiAgICBpbnZhbGlkRm9ybWF0OiAnRXJyb3IgYWwgY2FyZ2FyIHswfSBhcmNoaXZvIChzKSB5YSBxdWUgbm8gY29pbmNpZGUgY29uIGVsIGZvcm1hdG8gKHMpOiB7MX0uJyxcbiAgICBpbnZhbGlkU2l6ZTogJ0Vycm9yIGFsIGNhcmdhciB7MH0gYXJjaGl2byAocykgeWEgcXVlIG5vIGN1bXBsZSBjb24gZWwgdGFtYcOxbyBwZXJtaXRpZG86IGRlc2RlIHsxfSBoYXN0YSB7Mn0uJyxcbiAgICBudW1iZXJPZkZpbGVzQWxsb3dlZDogJ3swfSBhcmNoaXZvKHMpIHBlcm1pdGlkbyhzKScsXG4gICAgYWxsb3dlZEZvcm1hdHM6ICdGb3JtYXRvcyBhY2VwdGFkb3M6IHswfS4nLFxuICAgIGFsbG93ZWRGaWxlU2l6ZVJhbmdlOiAnTGltaXRlIGRlIHRhbWHDsW8gZGUgYXJjaGl2bzogZGVzZGUgezB9IGhhc3RhIHsxfScsXG4gICAgbWF4RmlsZVNpemVBbGxvd2VkOiAnTGltaXRlIGRlIHRhbWHDsW8gZGUgYXJjaGl2bzogaGFzdGEgezB9JyxcbiAgICBtaW5GaWxlU2l6ZUFsbG93ZWQ6ICdMaW1pdGUgZGUgdGFtYcOxbyBkZSBhcmNoaXZvOiBtaW5pbW8gezB9JyxcbiAgICBlcnJvck9jY3VycmVkOiAnT2N1cnJpbyB1biBlcnJvcicsXG4gICAgc2VudFdpdGhTdWNjZXNzOiAnRW52aWFkbyBjb24gw6l4aXRvJ1xuICB9LFxuICBwdDogPFBvVXBsb2FkTGl0ZXJhbHM+e1xuICAgIGZpbGVzOiAnYXJxdWl2b3MnLFxuICAgIGZvbGRlcnM6ICdkaXJldMOzcmlvcycsXG4gICAgc2VsZWN0RmlsZTogJ1NlbGVjaW9uYXIgYXJxdWl2bycsXG4gICAgc2VsZWN0RmlsZXM6ICdTZWxlY2lvbmFyIGFycXVpdm9zJyxcbiAgICBzZWxlY3RGb2xkZXI6ICdTZWxlY2lvbmFyIHBhc3RhJyxcbiAgICBzdGFydFNlbmRpbmc6ICdJbmljaWFyIGVudmlvJyxcbiAgICBkcmFnRmlsZXNIZXJlOiAnQXJyYXN0ZSBvcyBhcnF1aXZvcyBhcXVpJyxcbiAgICBkcmFnRm9sZGVyc0hlcmU6ICdBcnJhc3RlIGFzIHBhc3RhcyBhcXVpJyxcbiAgICBzZWxlY3RGaWxlc09uQ29tcHV0ZXI6ICdvdSBzZWxlY2lvbmUgb3MgYXJxdWl2b3Mgbm8gY29tcHV0YWRvcicsXG4gICAgc2VsZWN0Rm9sZGVyT25Db21wdXRlcjogJ291IHNlbGVjaW9uZSBhIHBhc3RhIG5vIGNvbXB1dGFkb3InLFxuICAgIGRyb3BGaWxlc0hlcmU6ICdTb2x0ZSBvcyBhcnF1aXZvcyBhcXVpJyxcbiAgICBkcm9wRm9sZGVyc0hlcmU6ICdTb2x0ZSBhcyBwYXN0YXMgYXF1aScsXG4gICAgaW52YWxpZERyb3BBcmVhOiAnT3MgezB9IG7Do28gZm9yYW0gaW5zZXJpZG9zIG5vIGxvY2FsIGNvcnJldG8nLFxuICAgIGludmFsaWRGaWxlVHlwZTogJ0ZhbGhhIGFvIGNhcnJlZ2FyIHswfSBhcnF1aXZvIChzKSwgcG9pcyBuw6NvIMOpIG8gdGlwbyBkZSBhcnF1aXZvIHBlcm1pdGlkbycsXG4gICAgaW52YWxpZEFtb3VudDogJ0ZhbGhhIGFvIGNhcnJlZ2FyIHswfSBhcnF1aXZvKHMpLCBwb2lzIGV4Y2VkZShtKSBhIHF1YW50aWRhZGUgbGltaXRlIGRlIGFycXVpdm9zLicsXG4gICAgaW52YWxpZEZvcm1hdDogJ0ZhbGhhIGFvIGNhcnJlZ2FyIHswfSBhcnF1aXZvKHMpLCBwb2lzIG7Do28gY29ycmVzcG9uZGUobSkgYW8ocykgZm9ybWF0byhzKTogezF9LicsXG4gICAgaW52YWxpZFNpemU6ICdGYWxoYSBhbyBjYXJyZWdhciB7MH0gYXJxdWl2byhzKSwgcG9pcyBuw6NvIGF0ZW5kZSBhbyB0YW1hbmhvIHBlcm1pdGlkbzogezF9IGF0w6kgezJ9LicsXG4gICAgbnVtYmVyT2ZGaWxlc0FsbG93ZWQ6ICdRdWFudGlkYWRlIG3DoXhpbWE6IHswfSBhcnF1aXZvKHMpJyxcbiAgICBhbGxvd2VkRm9ybWF0czogJ0Zvcm1hdG9zIGFkb3RhZG9zOiB7MH0uJyxcbiAgICBhbGxvd2VkRmlsZVNpemVSYW5nZTogJ0xpbWl0ZSBkZSB0YW1hbmhvIHBvciBhcnF1aXZvOiBkZSB7MH0gYXTDqSB7MX0nLFxuICAgIG1heEZpbGVTaXplQWxsb3dlZDogJ0xpbWl0ZSBkZSB0YW1hbmhvIHBvciBhcnF1aXZvOiBhdMOpIHswfScsXG4gICAgbWluRmlsZVNpemVBbGxvd2VkOiAnTGltaXRlIGRlIHRhbWFuaG8gcG9yIGFycXVpdm86IG5vIG3DrW5pbW8gezB9JyxcbiAgICBlcnJvck9jY3VycmVkOiAnT2NvcnJldSB1bSBlcnJvJyxcbiAgICBzZW50V2l0aFN1Y2Nlc3M6ICdFbnZpYWRvIGNvbSBzdWNlc3NvJ1xuICB9LFxuICBydTogPFBvVXBsb2FkTGl0ZXJhbHM+e1xuICAgIGZpbGVzOiAn0YTQsNC50LvRiycsXG4gICAgZm9sZGVyczogJ9C/0LDQv9C60Lgg0YEg0YTQsNC50LvQsNC80LgnLFxuICAgIHNlbGVjdEZpbGU6ICfQktGL0LHQtdGA0LjRgtC1INGE0LDQudC7JyxcbiAgICBzZWxlY3RGaWxlczogJ9CS0YvQsdC10YDQuNGC0LUg0YTQsNC50LvRiycsXG4gICAgc2VsZWN0Rm9sZGVyOiAn0JLRi9Cx0LXRgNC40YLQtSDQv9Cw0L/QutGDINGBINGE0LDQudC70LDQvNC4JyxcbiAgICBzdGFydFNlbmRpbmc6ICfQndCw0YfQsNGC0Ywg0LfQsNCz0YDRg9C30LrRgycsXG4gICAgZHJhZ0ZpbGVzSGVyZTogJ9Cf0LXRgNC10YLQsNGJ0LjRgtC1INGE0LDQudC70Ysg0YHRjtC00LAnLFxuICAgIGRyYWdGb2xkZXJzSGVyZTogJ9Cf0LXRgNC10YLQsNGJ0LjRgtC1INGB0Y7QtNCwINC/0LDQv9C60LgnLFxuICAgIHNlbGVjdEZpbGVzT25Db21wdXRlcjogJ9C40LvQuCDQstGL0LHQtdGA0LjRgtC1INGE0LDQudC70Ysg0L3QsCDQutC+0LzQv9GM0Y7RgtC10YDQtScsXG4gICAgc2VsZWN0Rm9sZGVyT25Db21wdXRlcjogJ9C40LvQuCDQstGL0LHQtdGA0LjRgtC1INC/0LDQv9C60YMg0L3QsCDQstCw0YjQtdC8INC60L7QvNC/0YzRjtGC0LXRgNC1JyxcbiAgICBkcm9wRmlsZXNIZXJlOiAn0J7RgdGC0LDQstGM0YLQtSDRhNCw0LnQu9GLINC30LTQtdGB0YwnLFxuICAgIGRyb3BGb2xkZXJzSGVyZTogJ9Cf0LXRgNC10YLQsNGJ0LjRgtC1INGB0Y7QtNCwINC/0LDQv9C60LgnLFxuICAgIGludmFsaWREcm9wQXJlYTogJ3swfSDQvdC1INCx0YvQu9C4INCy0YHRgtCw0LLQu9C10L3RiyDQsiDQv9GA0LDQstC40LvRjNC90L7QvCDQvNC10YHRgtC1LicsXG4gICAgaW52YWxpZEZpbGVUeXBlOiAn0J3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0LPRgNGD0LfQuNGC0Ywg0YTQsNC50LvRiyB7MH0sINGC0LDQuiDQutCw0Log0Y3RgtC+INC90LXQstC10YDQvdGL0Lkg0YLQuNC/INGE0LDQudC70LAnLFxuICAgIGludmFsaWRBbW91bnQ6ICdOw6NvIGZvaSBwb3Nzw612ZWwgY2FycmVnYXIgb3MgYXJxdWl2b3MgezB9IHBvcnF1ZSBlbGVzIGV4Y2VkZXJhbSBvIGxpbWl0ZSBkZSBhcnF1aXZvcy4nLFxuICAgIGludmFsaWRGb3JtYXQ6ICfQndC1INGD0LTQsNC70L7RgdGMINC30LDQs9GA0YPQt9C40YLRjCDRhNCw0LnQu9GLIHswfSwg0YLQsNC6INC60LDQuiDQvtC90Lgg0L3QtSDRgdC+0L7RgtCy0LXRgtGB0YLQstGD0Y7RgiDRhNC+0YDQvNCw0YLRgyAo0LDQvCk6IHsxfS4nLFxuICAgIGludmFsaWRTaXplOiAn0J3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0LPRgNGD0LfQuNGC0Ywg0YTQsNC50LvRiyB7MH0sINC/0L7RgdC60L7Qu9GM0LrRgyDQvtC90Lgg0L3QtSDRgdC+0L7RgtCy0LXRgtGB0YLQstGD0Y7RgiDRgNCw0LfRgNC10YjQtdC90L3QvtC80YMg0YDQsNC30LzQtdGA0YM6INC+0YIgezF9INC00L4gezJ9LicsXG4gICAgbnVtYmVyT2ZGaWxlc0FsbG93ZWQ6ICfQnNCw0LrRgdC40LzQsNC70YzQvdC+0LUg0LrQvtC70LjRh9C10YHRgtCy0L46IHswfSDRhNCw0LnQu9C+0LInLFxuICAgIGFsbG93ZWRGb3JtYXRzOiAn0KTQvtGA0LzQsNGC0Ysg0L/RgNC40L3Rj9GC0Ys6IHswfS4nLFxuICAgIGFsbG93ZWRGaWxlU2l6ZVJhbmdlOiAn0J7Qs9GA0LDQvdC40YfQtdC90LjQtSDRgNCw0LfQvNC10YDQsCDRhNCw0LnQu9CwOiDQvtGCIHswfSDQtNC+IHsxfScsXG4gICAgbWF4RmlsZVNpemVBbGxvd2VkOiAn0J7Qs9GA0LDQvdC40YfQtdC90LjQtSDRgNCw0LfQvNC10YDQsCDRhNCw0LnQu9CwOiDQtNC+IHswfScsXG4gICAgbWluRmlsZVNpemVBbGxvd2VkOiAn0J7Qs9GA0LDQvdC40YfQtdC90LjQtSDRgNCw0LfQvNC10YDQsCDRhNCw0LnQu9CwOiDQvdC1INC80LXQvdC10LUgezB9JyxcbiAgICBlcnJvck9jY3VycmVkOiAn0J/RgNC+0LjQt9C+0YjQu9CwINC+0YjQuNCx0LrQsC4nLFxuICAgIHNlbnRXaXRoU3VjY2VzczogJ9Cj0YHQv9C10YjQvdC+INC+0YLQv9GA0LDQstC70LXQvdC+J1xuICB9XG59O1xuXG5jb25zdCBwb1VwbG9hZEZvcm1GaWVsZERlZmF1bHQgPSAnZmlsZXMnO1xuXG5jb25zdCBwb1VwbG9hZE1heEZpbGVTaXplID0gMzE0NTcyODA7IC8vIDMwTUJcbmNvbnN0IHBvVXBsb2FkTWluRmlsZVNpemUgPSAwO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqIE8gY29tcG9uZW50ZSBgcG8tdXBsb2FkYCBwZXJtaXRlIHF1ZSBvIHVzdcOhcmlvIGVudmllIGFycXVpdm8ocykgYW8gc2Vydmlkb3IgZSBhY29tcGFuaGUgbyBwcm9ncmVzc28uXG4gKiBFc3RlIGNvbXBvbmVudGUgdGFtYsOpbSBwb3NzaWJpbGl0YSBhbGd1bWFzIGNvbmZpZ3VyYcOnw7VlcyBjb21vOlxuICogIOKAkyBFbnZpbyBkZSBkaXJldMOzcmlvcywgb25kZSBlbGUgYWNlc3NhIG8gZGlyZXTDs3JpbyBzZWxlY2lvbmFkbyBhc3NpbSBjb21vIHNldXMgc3ViLWRpcmV0w7NyaW9zO1xuICogIC0gTcO6bHRpcGxhIHNlbGXDp8Ojbywgb25kZSBvIHVzdcOhcmlvIHBvZGUgZW52aWFyIG1haXMgZGUgdW0gYXJxdWl2byBhbyBzZXJ2aWRvci5cbiAqICAtIEF1dG8gZW52aW8sIG9uZGUgbyBhcnF1aXZvIMOpIGVudmlhZG8gaW1lZGlhdGFtZW50ZSBhcMOzcyBhIHNlbGXDp8OjbyBkbyB1c3XDoXJpbywgbsOjbyBuZWNlc3NpdGFuZG8gcXVlIG8gdXN1w6FyaW9cbiAqIGNsaXF1ZSBlbSBlbnZpYXIuXG4gKiAgLSBSZXN0cmnDp8O1ZXMgZGUgZm9ybWF0b3MgZGUgYXJxdWl2byBlIHRhbWFuaG8uXG4gKiAgLSBGdW7Dp8OjbyBkZSBzdWNlc3NvIHF1ZSBzZXLDoSBkaXNwYXJhZGEgcXVhbmRvIG9zIGFycXVpdm9zIGZvcmVtIGVudmlhZG9zIGNvbSBzdWNlc3NvLlxuICogIC0gRnVuw6fDo28gZGUgZXJybyBxdWUgc2Vyw6EgZGlzcGFyYWRhIHF1YW5kbyBob3V2ZXIgZXJybyBubyBlbnZpbyBkb3MgYXJxdWl2b3MuXG4gKiAgLSBQZXJtaXRlIGhhYmlsaXRhciB1bWEgw6FyZWEgb25kZSBvcyBhcnF1aXZvcyBwb2RlbSBzZXIgYXJyYXN0YWRvcy5cbiAqL1xuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUG9VcGxvYWRCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciB7XG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEFwbGljYSBmb2NvIG5vIGVsZW1lbnRvIGFvIHNlciBpbmljaWFkby5cbiAgICpcbiAgICogPiBDYXNvIG1haXMgZGUgdW0gZWxlbWVudG8gc2VqYSBjb25maWd1cmFkbyBjb20gZXNzYSBwcm9wcmllZGFkZSwgYXBlbmFzIG8gw7psdGltbyBlbGVtZW50byBkZWNsYXJhZG8gY29tIGVsYSB0ZXLDoSBvIGZvY28uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCh7IGFsaWFzOiAncC1hdXRvLWZvY3VzJywgdHJhbnNmb3JtOiBjb252ZXJ0VG9Cb29sZWFuIH0pIGF1dG9Gb2N1czogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSBlbSAqcGl4ZWxzKiBhIGFsdHVyYSBkYSDDoXJlYSBvbmRlIHBvZGVtIHNlciBhcnJhc3RhZG9zIG9zIGFycXVpdm9zLiBBIGFsdHVyYSBtw61uaW1hIGFjZWl0YSDDqSBgMTYwcHhgLlxuICAgKlxuICAgKiA+IEVzdGEgcHJvcHJpZWRhZGUgZnVuY2lvbmEgc29tZW50ZSBzZSBhIHByb3ByaWVkYWRlIGBwLWRyYWctZHJvcGAgZXN0aXZlciBoYWJpbGl0YWRhLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgMzIwYFxuICAgKi9cbiAgQElucHV0KCdwLWRyYWctZHJvcC1oZWlnaHQnKSBkcmFnRHJvcEhlaWdodDogbnVtYmVyO1xuXG4gIC8qKiBSw7N0dWxvIGRvIGNhbXBvLiAqL1xuICBASW5wdXQoJ3AtbGFiZWwnKSBsYWJlbD86IHN0cmluZztcblxuICAvKiogVGV4dG8gZGUgYXBvaW8gcGFyYSBvIGNhbXBvLiAqL1xuICBASW5wdXQoJ3AtaGVscCcpIGhlbHA/OiBzdHJpbmc7XG5cbiAgLyoqIFVSTCBxdWUgZGV2ZSBzZXIgZmVpdGEgYSByZXF1aXNpw6fDo28gY29tIG9zIGFycXVpdm9zIHNlbGVjaW9uYWRvcy4gKi9cbiAgQElucHV0KCdwLXVybCcpIHVybDogc3RyaW5nO1xuXG4gIC8qKiBEZWZpbmUgbyB2YWxvciBkbyBhdHJpYnV0byBgbmFtZWAgZG8gY29tcG9uZW50ZS4gKi9cbiAgQElucHV0KCduYW1lJykgbmFtZTogc3RyaW5nID0gJ2ZpbGUnO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSBzZSBvIGVudmlvIGRvIGFycXVpdm8gc2Vyw6EgYXV0b23DoXRpY28gYW8gc2VsZWNpb25hciBvIG1lc21vLlxuICAgKlxuICAgKiA+IEVzdGEgcHJvcHJpZWRhZGUgZnVuY2lvbmEgc29tZW50ZSBzZSBhIHByb3ByaWVkYWRlIGBwLXVybGAgdGl2ZXIgdW0gdmFsb3IgYXRyaWJ1w61kby5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLWF1dG8tdXBsb2FkJykgYXV0b1VwbG9hZD86IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEZXNhYmlsaXRhIGJvdMOjbyBkZSByZW1vdmVyIG8ocykgYXJxdWl2byhzKSBzZWxlY2lvbmFkbyhzKS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KHsgYWxpYXM6ICdwLWRpc2FibGVkLXJlbW92ZS1maWxlJywgdHJhbnNmb3JtOiBjb252ZXJ0VG9Cb29sZWFuIH0pIGRpc2FibGVkUmVtb3ZlRmlsZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSBzZSBhIGluZGljYcOnw6NvIGRlIGNhbXBvIG9wY2lvbmFsIHNlcsOhIGV4aWJpZGEuXG4gICAqXG4gICAqID4gTsOjbyBzZXLDoSBleGliaWRhIGEgaW5kaWNhw6fDo28gc2U6XG4gICAqICAtIE8gY2FtcG8gY29udGVyIGBwLXJlcXVpcmVkYDtcbiAgICogIC0gTsOjbyBwb3NzdWlyIGBwLWhlbHBgIGUvb3UgYHAtbGFiZWxgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3Atb3B0aW9uYWwnKSBvcHRpb25hbDogYm9vbGVhbjtcblxuICAvKiogT2JqZXRvIHF1ZSBjb250w6ltIG9zIGNhYmXDp2FsaG9zIHF1ZSBzZXLDoSBlbnZpYWRvIG5hIHJlcXVpc2nDp8OjbyBkb3MgYXJxdWl2b3MuICovXG4gIEBJbnB1dCgncC1oZWFkZXJzJykgaGVhZGVyczogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIHwgQXJyYXk8c3RyaW5nPiB9O1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSBzZSBhIHByb3ByaWVkYWRlIGBwLXVybGAgw6kgb2JyaWdhdMOzcmlhLlxuICAgKlxuICAgKiBDYXNvIGEgcHJvcHJpZWRhZGUgc2VqYSBkZWZpbmlkYSBjb21vIGBmYWxzZWA6XG4gICAqIC0gbyBib3TDo28gZGUgXCJTZWxlY2lvbmFyIGFycXVpdm9cIiBmaWNhcsOhIGhhYmlsaXRhZG8gbWVzbW8gc2VtIGEgcHJvcHJpZWRhZGUgYHAtdXJsYCBkZWZpbmlkYS5cbiAgICogLSBvIGJvdMOjbyBcIkluaWNpYXIgZW52aW9cIiBmaWNhcsOhIG9jdWx0byBhdMOpIHF1ZSBhIHByb3ByaWVkYWRlIGBwLXVybGAgc2VqYSBkZWZpbmlkYS5cbiAgICpcbiAgICogPiBTZSB1dGlsaXphZGEgY29tIGEgcHJvcHJpZWRhZGUgYHAtYXV0by11cGxvYWRgIGRlZmluaWRhIGNvbW8gYHRydWVgIHNlcsOhIG5lY2Vzc8OhcmlvIGRlZmluaXIgYSBwcm9wcmllZGFkZSBgcC11cmxgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIEBIb3N0QmluZGluZygnYXR0ci5wLXJlcXVpcmVkLXVybCcpXG4gIEBJbnB1dCh7IGFsaWFzOiAncC1yZXF1aXJlZC11cmwnLCB0cmFuc2Zvcm06IGNvbnZlcnRUb0Jvb2xlYW4gfSlcbiAgcmVxdWlyZWRVcmw6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEZ1bsOnw6NvIHF1ZSBzZXLDoSBleGVjdXRhZGEgbm8gbW9tZW50byBkZSByZWFsaXphciBvIGVudmlvIGRvIGFycXVpdm8sXG4gICAqIG9uZGUgc2Vyw6EgcG9zc8OtdmVsIGFkaWNpb25hciBpbmZvcm1hw6fDtWVzIGFvIHBhcsOibWV0cm8gcXVlIHNlcsOhIGVudmlhZG8gbmEgcmVxdWlzacOnw6NvLlxuICAgKiDDiSBwYXNzYWRvIHBvciBwYXLDom1ldHJvIHVtIG9iamV0byBjb20gbyBhcnF1aXZvIGUgYXMgcHJvcHJpZWRhZGVzIGRhdGEgZSBleHRyYUZvcm1EYXRhLFxuICAgKiBxdWUgc2Vyw6NvIGVudmlhZGFzIGVtIGNvbmp1bnRvIGNvbSBvIGFycXVpdm8gbmEgcmVxdWlzacOnw6NvLCBwb3IgZXhlbXBsbzpcbiAgICpcbiAgICogPiBkYXRhLCBuZXN0YSBwcm9wcmllZGFkZSBwb2RlIHNlciBpbmZvcm1hZG8gYWxndW0gZGFkb1xuICAgKiBgYGBcbiAgICogICBldmVudC5kYXRhID0ge2lkOiAnaWQgZG8gdXN1w6FyaW8nfTtcbiAgICogYGBgXG4gICAqID4gZXh0cmFGb3JtRGF0YSwgbmVzdGEgcHJvcHJpZWRhZGUgcG9kZSBzZXIgaW5mb3JtYWRvIGFsZ3VtIGRhZG8gc29saWNpdGFkbyBwZWxhIEFQSVxuICAgKiA+IHF1ZSBuw6NvIHBvc3NhIGVzdGFyIG5vIG9iamV0byBgZGF0YWAsIGFzc2ltIG8gY29udGXDumRvIHNhcsOhIGV4dHJhw61kbyBkbyBvYmpldG8gZVxuICAgKiA+IGVudmlhZG8gY29tbyBwYXLDom1ldHJvXG4gICAqIGBgYFxuICAgKiAgIGV2ZW50LmV4dHJhRm9ybURhdGEgPSB7aWQ6ICdpZCBkbyB1c3XDoXJpbyd9O1xuICAgKiBgYGBcbiAgICovXG4gIEBPdXRwdXQoJ3AtdXBsb2FkJykgb25VcGxvYWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRXZlbnRvIHNlcsOhIGRpc3BhcmFkbyBxdWFuZG8gb2NvcnJlciBhbGd1bSBlcnJvIG5vIGVudmlvIGRvIGFycXVpdm8uXG4gICAqID4gUG9yIHBhcsOibWV0cm8gc2Vyw6EgcGFzc2FkbyBvIG9iamV0byBkbyByZXRvcm5vIHF1ZSDDqSBkbyB0aXBvIGBIdHRwRXJyb3JSZXNwb25zZWAuXG4gICAqL1xuICBAT3V0cHV0KCdwLWVycm9yJykgb25FcnJvcjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBFdmVudG8gc2Vyw6EgZGlzcGFyYWRvIHF1YW5kbyBvIGVudmlvIGRvIGFycXVpdm8gZm9yIHJlYWxpemFkbyBjb20gc3VjZXNzby5cbiAgICogPiBQb3IgcGFyw6JtZXRybyBzZXLDoSBwYXNzYWRvIG8gb2JqZXRvIGRvIHJldG9ybm8gcXVlIMOpIGRvIHRpcG8gYEh0dHBSZXNwb25zZWAuXG4gICAqL1xuICBAT3V0cHV0KCdwLXN1Y2Nlc3MnKSBvblN1Y2Nlc3M6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRnVuw6fDo28gcGFyYSBhdHVhbGl6YXIgbyBuZ01vZGVsIGRvIGNvbXBvbmVudGUsIG5lY2Vzc8OhcmlvIHF1YW5kbyBuw6NvIGZvciB1dGlsaXphZG8gZGVudHJvIGRhICp0YWcqIGBmb3JtYC5cbiAgICpcbiAgICogTmEgdmVyc8OjbyAxMi4yLjAgZG8gQW5ndWxhciBhIHZlcmlmaWNhw6fDo28gYHN0cmljdFRlbXBsYXRlc2AgdmVtIHRydWUgY29tbyBkZWZhdWx0LiBQb3J0YW50bywgcGFyYSB1dGlsaXphclxuICAgKiB0d28td2F5IGJpbmRpbmcgbm8gY29tcG9uZW50ZSBkZXZlIHNlIHV0aWxpemFyIGRhIHNlZ3VpbnRlIGZvcm1hOlxuICAgKlxuICAgKiBgYGBcbiAgICogPHBvLXVwbG9hZCAuLi4gW25nTW9kZWxdPVwiVXBsb2FkTW9kZWxcIiAobmdNb2RlbENoYW5nZSk9XCJ1cGxvYWRNb2RlbCA9ICRldmVudFwiPiA8L3BvLXVwbG9hZD5cbiAgICogYGBgXG4gICAqXG4gICAqL1xuICBAT3V0cHV0KCduZ01vZGVsQ2hhbmdlJykgbmdNb2RlbENoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBhbGxvd2VkRXh0ZW5zaW9uczogc3RyaW5nO1xuICBjdXJyZW50RmlsZXM6IEFycmF5PFBvVXBsb2FkRmlsZT47XG5cbiAgY2FuSGFuZGxlRGlyZWN0b3J5OiBib29sZWFuO1xuICBvbk1vZGVsQ2hhbmdlOiBhbnk7XG5cbiAgcHJvdGVjdGVkIGV4dGVuc2lvbk5vdEFsbG93ZWQgPSAwO1xuICBwcm90ZWN0ZWQgcXVhbnRpdHlOb3RBbGxvd2VkID0gMDtcbiAgcHJvdGVjdGVkIHNpemVOb3RBbGxvd2VkID0gMDtcbiAgcHJvdGVjdGVkIG9uTW9kZWxUb3VjaGVkOiBhbnkgPSBudWxsO1xuXG4gIHByaXZhdGUgX2RpcmVjdG9yeT86IGJvb2xlYW47XG4gIHByaXZhdGUgX2Rpc2FibGVkPzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZHJhZ0Ryb3A/OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2ZpbGVSZXN0cmljdGlvbnM/OiBQb1VwbG9hZEZpbGVSZXN0cmljdGlvbnM7XG4gIHByaXZhdGUgX2Zvcm1GaWVsZD86IHN0cmluZztcbiAgcHJpdmF0ZSBfaGlkZVJlc3RyaWN0aW9uc0luZm8/OiBib29sZWFuO1xuICBwcml2YXRlIF9oaWRlU2VsZWN0QnV0dG9uPzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfaGlkZVNlbmRCdXR0b24/OiBib29sZWFuO1xuICBwcml2YXRlIF9pc011bHRpcGxlPzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfbGl0ZXJhbHM/OiBhbnk7XG4gIHByaXZhdGUgX3JlcXVpcmVkPzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBsYW5ndWFnZTogc3RyaW5nO1xuICBwcml2YXRlIHZhbGlkYXRvckNoYW5nZTogYW55O1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIFBlcm1pdGUgYSBzZWxlw6fDo28gZGUgZGlyZXTDs3Jpb3MgY29udGVuZG8gdW0gb3UgbWFpcyBhcnF1aXZvcyBwYXJhIGVudmlvLlxuICAgKlxuICAgKiA+IEEgaGFiaWxpdGHDp8OjbyBkZXN0YSBwcm9wcmllZGFkZSBzZSByZXN0cmluZ2UgYXBlbmFzIMOgIHNlbGXDp8OjbyBkZSBkaXJldMOzcmlvcy5cbiAgICpcbiAgICogPiBEZWZpbmnDp8OjbyBuw6NvIHN1cG9ydGFkYSBwZWxvIGJyb3dzZXIgKipJbnRlcm5ldCBFeHBsb3JlcioqLCB0b2RhdmlhIHNlcsOhIHBvc3PDrXZlbCBhIHNlbGXDp8OjbyBkZSBhcnF1aXZvcyBwYWRyw6NvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtZGlyZWN0b3J5Jykgc2V0IGRpcmVjdG9yeSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2RpcmVjdG9yeSA9IGNvbnZlcnRUb0Jvb2xlYW4odmFsdWUpO1xuXG4gICAgdGhpcy5jYW5IYW5kbGVEaXJlY3RvcnkgPSB0aGlzLl9kaXJlY3RvcnkgJiYgIWlzSUUoKSAmJiAhaXNNb2JpbGUoKTtcbiAgICB0aGlzLnNldERpcmVjdG9yeUF0dHJpYnV0ZSh0aGlzLmNhbkhhbmRsZURpcmVjdG9yeSk7XG4gIH1cblxuICBnZXQgZGlyZWN0b3J5KCkge1xuICAgIHJldHVybiB0aGlzLl9kaXJlY3Rvcnk7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBFeGliZSBhIMOhcmVhIG9uZGUgw6kgcG9zc8OtdmVsIGFycmFzdGFyIGUgc2VsZWNpb25hciBvcyBhcnF1aXZvcy4gUXVhbmRvIGVzdGl2ZXIgZGVmaW5pZGEsIG9taXRlIG8gYm90w6NvIHBhcmEgc2VsZcOnw6NvIGRlIGFycXVpdm9zXG4gICAqIGF1dG9tYXRpY2FtZW50ZS5cbiAgICpcbiAgICogPiBSZWNvbWVuZGFtb3MgdXRpbGl6YXIgYXBlbmFzIHVtIGBwby11cGxvYWRgIGNvbSBlc3RhIGZ1bmNpb25hbGlkYWRlIHBvciB0ZWxhLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtZHJhZy1kcm9wJykgc2V0IGRyYWdEcm9wKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZHJhZ0Ryb3AgPSBjb252ZXJ0VG9Cb29sZWFuKHZhbHVlKTtcbiAgfVxuXG4gIGdldCBkcmFnRHJvcCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZHJhZ0Ryb3A7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBPY3VsdGEgdmlzdWFsbWVudGUgYXMgaW5mb3JtYcOnw7VlcyBkZSByZXN0cmnDp8O1ZXMgcGFyYSBvIHVwbG9hZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLWhpZGUtcmVzdHJpY3Rpb25zLWluZm8nKSBzZXQgaGlkZVJlc3RyaWN0aW9uc0luZm8odmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9oaWRlUmVzdHJpY3Rpb25zSW5mbyA9IGNvbnZlcnRUb0Jvb2xlYW4odmFsdWUpO1xuICB9XG5cbiAgZ2V0IGhpZGVSZXN0cmljdGlvbnNJbmZvKCkge1xuICAgIHJldHVybiB0aGlzLl9oaWRlUmVzdHJpY3Rpb25zSW5mbztcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIE9taXRlIG8gYm90w6NvIGRlIHNlbGXDp8OjbyBkZSBhcnF1aXZvcy5cbiAgICpcbiAgICogPiBDYXNvIG8gdmFsb3IgZGVmaW5pZG8gc2VqYSBgdHJ1ZWAsIGNhYmVyw6EgYW8gZGVzZW52b2x2ZWRvciBhIHJlc3BvbnNhYmlsaWRhZGVcbiAgICogcGVsYSBjaGFtYWRhIGRvIG3DqXRvZG8gYHNlbGVjdEZpbGVzKClgIHBhcmEgc2VsZcOnw6NvIGRlIGFycXVpdm9zLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtaGlkZS1zZWxlY3QtYnV0dG9uJykgc2V0IGhpZGVTZWxlY3RCdXR0b24odmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9oaWRlU2VsZWN0QnV0dG9uID0gY29udmVydFRvQm9vbGVhbih2YWx1ZSk7XG4gIH1cbiAgZ2V0IGhpZGVTZWxlY3RCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2hpZGVTZWxlY3RCdXR0b247XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBPbWl0ZSBvIGJvdMOjbyBkZSBlbnZpbyBkZSBhcnF1aXZvcy5cbiAgICpcbiAgICogPiBDYXNvIG8gdmFsb3IgZGVmaW5pZG8gc2VqYSBgdHJ1ZWAsIGNhYmVyw6EgYW8gZGVzZW52b2x2ZWRvciBhIHJlc3BvbnNhYmlsaWRhZGVcbiAgICogcGVsYSBjaGFtYWRhIGRvIG3DqXRvZG8gYHNlbmRGaWxlcygpYCBwYXJhIGVudmlvIGRvKHMpIGFycXVpdm8ocykgc2VsZWNpb25hZG8ocykuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1oaWRlLXNlbmQtYnV0dG9uJykgc2V0IGhpZGVTZW5kQnV0dG9uKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5faGlkZVNlbmRCdXR0b24gPSBjb252ZXJ0VG9Cb29sZWFuKHZhbHVlKTtcbiAgfVxuICBnZXQgaGlkZVNlbmRCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2hpZGVTZW5kQnV0dG9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogT2JqZXRvIGNvbSBhcyBsaXRlcmFpcyB1c2FkYXMgbm8gYHBvLXVwbG9hZGAuXG4gICAqXG4gICAqIEV4aXN0ZW0gZHVhcyBtYW5laXJhcyBkZSBjdXN0b21pemFyIG8gY29tcG9uZW50ZTpcbiAgICpcbiAgICogLSBwYXNzYW5kbyB1bSBvYmpldG8gaW1wbGVtZW50YW5kbyBhIGludGVyZmFjZSBgUG9VcGxvYWRMaXRlcmFsc2AgY29tIHRvZGFzIGFzIGxpdGVyYWlzIGRpc3BvbsOtdmVpcztcbiAgICogLSBwYXNzYW5kbyBhcGVuYXMgYXMgbGl0ZXJhaXMgcXVlIGRlc2VqYSBjdXN0b21pemFyOlxuICAgKiBgYGBcbiAgICogIGNvbnN0IGN1c3RvbUxpdGVyYWxzOiBQb1VwbG9hZExpdGVyYWxzID0ge1xuICAgKiAgICBmb2xkZXJzOiAnUGFzdGFzJyxcbiAgICogICAgc2VsZWN0RmlsZTogJ0J1c2NhciBhcnF1aXZvJyxcbiAgICogICAgc3RhcnRTZW5kaW5nOiAnRW52aWFyJ1xuICAgKiAgfTtcbiAgICogYGBgXG4gICAqXG4gICAqIEUgcGFyYSBjYXJyZWdhciBhcyBsaXRlcmFpcyBjdXN0b21pemFkYXMsIGJhc3RhIGFwZW5hcyBwYXNzYXIgbyBvYmpldG8gcGFyYSBvIGNvbXBvbmVudGU6XG4gICAqXG4gICAqIGBgYFxuICAgKiA8cG8tdXBsb2FkXG4gICAqICAgW3AtbGl0ZXJhbHNdPVwiY3VzdG9tTGl0ZXJhbHNcIj5cbiAgICogPC9wby11cGxvYWQ+XG4gICAqIGBgYFxuICAgKlxuICAgKiA+IE8gb2JqZXRvIHBhZHLDo28gZGUgbGl0ZXJhaXMgc2Vyw6EgdHJhZHV6aWRvIGRlIGFjb3JkbyBjb20gbyBpZGlvbWEgZG8gKmJyb3dzZXIqIChwdCwgZW4sIGVzLCBydSkuXG4gICAqL1xuICBASW5wdXQoJ3AtbGl0ZXJhbHMnKSBzZXQgbGl0ZXJhbHModmFsdWU6IFBvVXBsb2FkTGl0ZXJhbHMpIHtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBPYmplY3QgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5KSkge1xuICAgICAgdGhpcy5fbGl0ZXJhbHMgPSB7XG4gICAgICAgIC4uLnBvVXBsb2FkTGl0ZXJhbHNEZWZhdWx0W3BvTG9jYWxlRGVmYXVsdF0sXG4gICAgICAgIC4uLnBvVXBsb2FkTGl0ZXJhbHNEZWZhdWx0W3RoaXMubGFuZ3VhZ2VdLFxuICAgICAgICAuLi52YWx1ZVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbGl0ZXJhbHMgPSBwb1VwbG9hZExpdGVyYWxzRGVmYXVsdFt0aGlzLmxhbmd1YWdlXTtcbiAgICB9XG4gIH1cbiAgZ2V0IGxpdGVyYWxzKCkge1xuICAgIHJldHVybiB0aGlzLl9saXRlcmFscyB8fCBwb1VwbG9hZExpdGVyYWxzRGVmYXVsdFt0aGlzLmxhbmd1YWdlXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIE9iamV0byBxdWUgc2VndWUgYSBkZWZpbmnDp8OjbyBkYSBpbnRlcmZhY2UgYFBvVXBsb2FkRmlsZVJlc3RyaWN0aW9uc2AsXG4gICAqIHF1ZSBwb3NzaWJpbGl0YSBkZWZpbmlyIHRhbWFuaG8gbcOheGltby9tw61uaW1vIGUgZXh0ZW5zw6NvIGRvcyBhcnF1aXZvcyBwZXJtaXRpZG9zLlxuICAgKi9cbiAgQElucHV0KCdwLXJlc3RyaWN0aW9ucycpIHNldCBmaWxlUmVzdHJpY3Rpb25zKHJlc3RyaWN0aW9uczogUG9VcGxvYWRGaWxlUmVzdHJpY3Rpb25zKSB7XG4gICAgdGhpcy5fZmlsZVJlc3RyaWN0aW9ucyA9IHRoaXMuaW5pdFJlc3RyaWN0aW9ucyhyZXN0cmljdGlvbnMpO1xuXG4gICAgdGhpcy5zZXRBbGxvd2VkRXh0ZW5zaW9ucyhyZXN0cmljdGlvbnMpO1xuICB9XG5cbiAgZ2V0IGZpbGVSZXN0cmljdGlvbnMoKTogUG9VcGxvYWRGaWxlUmVzdHJpY3Rpb25zIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsZVJlc3RyaWN0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIE5vbWUgZG8gY2FtcG8gZGUgZm9ybXVsw6FyaW8gcXVlIHNlcsOhIGVudmlhZG8gcGFyYSBvIHNlcnZpw6dvIGluZm9ybWFkbyBuYSBwcm9wcmllZGFkZSBgcC11cmxgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmlsZXNgXG4gICAqL1xuICBASW5wdXQoJ3AtZm9ybS1maWVsZCcpIHNldCBmb3JtRmllbGQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2Zvcm1GaWVsZCA9IHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZSA6IHBvVXBsb2FkRm9ybUZpZWxkRGVmYXVsdDtcblxuICAgIHRoaXMuZ2V0VXBsb2FkU2VydmljZSgpLmZvcm1GaWVsZCA9IHRoaXMuZm9ybUZpZWxkO1xuICB9XG5cbiAgZ2V0IGZvcm1GaWVsZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9mb3JtRmllbGQ7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBJbmRpY2EgcXVlIG8gY2FtcG8gc2Vyw6EgZGVzYWJpbGl0YWRvLlxuICAgKi9cbiAgQElucHV0KCdwLWRpc2FibGVkJykgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSBjb252ZXJ0VG9Cb29sZWFuKHZhbHVlKTtcblxuICAgIHRoaXMudmFsaWRhdGVNb2RlbCh0aGlzLmN1cnJlbnRGaWxlcyk7XG4gIH1cblxuICBnZXQgZGlzYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIHNlIHBvZGUgc2VsZWNpb25hciBtYWlzIGRlIHVtIGFycXVpdm8uXG4gICAqXG4gICAqID4gU2UgdXRpbGl6YWRhIGEgYHAtZGlyZWN0b3J5YCwgaGFiaWxpdGEtc2UgYXV0b21hdGljYW1lbnRlIGVzdGEgcHJvcHJpZWRhZGUuXG4gICAqL1xuICBASW5wdXQoJ3AtbXVsdGlwbGUnKSBzZXQgaXNNdWx0aXBsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2lzTXVsdGlwbGUgPSBjb252ZXJ0VG9Cb29sZWFuKHZhbHVlKTtcbiAgfVxuXG4gIGdldCBpc011bHRpcGxlKCkge1xuICAgIHJldHVybiB0aGlzLmNhbkhhbmRsZURpcmVjdG9yeSA/IHRydWUgOiB0aGlzLl9pc011bHRpcGxlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIHF1ZSBvIGNhbXBvIHNlcsOhIG9icmlnYXTDs3Jpby5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLXJlcXVpcmVkJykgc2V0IHJlcXVpcmVkKHJlcXVpcmVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5fcmVxdWlyZWQgPSBjb252ZXJ0VG9Cb29sZWFuKHJlcXVpcmVkKTtcblxuICAgIHRoaXMudmFsaWRhdGVNb2RlbCh0aGlzLmN1cnJlbnRGaWxlcyk7XG4gIH1cblxuICBnZXQgcmVxdWlyZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZSBzZSBhIGluZGljYcOnw6NvIGRlIGNhbXBvIG9icmlnYXTDs3JpbyBzZXLDoSBleGliaWRhLlxuICAgKlxuICAgKiA+IE7Do28gc2Vyw6EgZXhpYmlkYSBhIGluZGljYcOnw6NvIHNlOlxuICAgKiAtIE7Do28gcG9zc3VpciBgcC1oZWxwYCBlL291IGBwLWxhYmVsYC5cbiAgICovXG4gIEBJbnB1dCgncC1zaG93LXJlcXVpcmVkJykgc2hvd1JlcXVpcmVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHVwbG9hZFNlcnZpY2U6IFBvVXBsb2FkU2VydmljZSxcbiAgICBsYW5ndWFnZVNlcnZpY2U6IFBvTGFuZ3VhZ2VTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMubGFuZ3VhZ2UgPSBsYW5ndWFnZVNlcnZpY2UuZ2V0U2hvcnRMYW5ndWFnZSgpO1xuICB9XG5cbiAgLy8gRnVuw6fDo28gaW1wbGVtZW50YWRhIGRvIENvbnRyb2xWYWx1ZUFjY2Vzc29yXG4gIC8vIFVzYWRhIHBhcmEgaW50ZXJjZXB0YXIgb3MgZXN0YWRvcyBkZSBoYWJpbGl0YWRvIHZpYSBmb3JtcyBhcGlcbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uTW9kZWxDaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uTW9kZWxUb3VjaGVkID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGZuOiAoKSA9PiB2b2lkKSB7XG4gICAgdGhpcy52YWxpZGF0b3JDaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHZhbGlkYXRlKGFic3RyYWN0Q29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gICAgaWYgKHJlcXVpcmVkRmFpbGVkKHRoaXMucmVxdWlyZWQsIHRoaXMuZGlzYWJsZWQsIGFic3RyYWN0Q29udHJvbC52YWx1ZSkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlcXVpcmVkOiB7XG4gICAgICAgICAgdmFsaWQ6IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgd3JpdGVWYWx1ZShtb2RlbDogYW55KTogdm9pZCB7XG4gICAgaWYgKG1vZGVsKSB7XG4gICAgICBpZiAoIWlzRXF1YWxzKHRoaXMuY3VycmVudEZpbGVzLCBtb2RlbCkpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50RmlsZXMgPSB0aGlzLnBhcnNlRmlsZXMobW9kZWwpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnJlbnRGaWxlcyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaXNFeGNlZWRlZEZpbGVMaW1pdChjdXJyZW50RmlsZXNMZW5ndGg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmlzTXVsdGlwbGUgJiZcbiAgICAgIHRoaXMuZmlsZVJlc3RyaWN0aW9ucyAmJlxuICAgICAgdGhpcy5maWxlUmVzdHJpY3Rpb25zLm1heEZpbGVzID4gMCAmJlxuICAgICAgdGhpcy5maWxlUmVzdHJpY3Rpb25zLm1heEZpbGVzIDw9IGN1cnJlbnRGaWxlc0xlbmd0aFxuICAgICk7XG4gIH1cblxuICAvLyBGYXogbyBwYXJzZSBkb3MgYXJxdWl2b3Mgc2VsZWNpb25hZG9zIHBhcmEgYXJxdWl2b3MgZG8gZm9ybWF0byBQb1VwbG9hZEZpbGUgZSBhdHVhbGl6YSBvcyBhcnF1aXZvcyBjb3JyZW50ZXMuXG4gIHByb3RlY3RlZCBwYXJzZUZpbGVzKGZpbGVzOiBBcnJheTxGaWxlPik6IEFycmF5PFBvVXBsb2FkRmlsZT4ge1xuICAgIGxldCBwb1VwbG9hZEZpbGVzOiBBcnJheTxQb1VwbG9hZEZpbGU+ID0gdGhpcy5jdXJyZW50RmlsZXMgfHwgW107XG4gICAgY29uc3QgZmlsZXNMZW5ndGggPSBmaWxlcy5sZW5ndGg7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpbGVzTGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmlzRXhjZWVkZWRGaWxlTGltaXQocG9VcGxvYWRGaWxlcy5sZW5ndGgpKSB7XG4gICAgICAgIHRoaXMucXVhbnRpdHlOb3RBbGxvd2VkID0gZmlsZXNMZW5ndGggLSB0aGlzLmZpbGVSZXN0cmljdGlvbnMubWF4RmlsZXM7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY29uc3QgZmlsZSA9IG5ldyBQb1VwbG9hZEZpbGUoZmlsZXNbaV0pO1xuXG4gICAgICBpZiAodGhpcy5jaGVja1Jlc3RyaWN0aW9ucyhmaWxlKSkge1xuICAgICAgICBwb1VwbG9hZEZpbGVzID0gdGhpcy5pbnNlcnRGaWxlSW5GaWxlcyhmaWxlLCBwb1VwbG9hZEZpbGVzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zZW5kRmVlZGJhY2soKTtcbiAgICByZXR1cm4gcG9VcGxvYWRGaWxlcztcbiAgfVxuXG4gIHByb3RlY3RlZCB2YWxpZGF0ZU1vZGVsKG1vZGVsOiBhbnkpIHtcbiAgICBpZiAodGhpcy52YWxpZGF0b3JDaGFuZ2UpIHtcbiAgICAgIHRoaXMudmFsaWRhdG9yQ2hhbmdlKG1vZGVsKTtcbiAgICB9XG4gIH1cblxuICAvLyBWZXJpZmljYSBzZSBvIGFycXVpdm8gZXN0w6EgZGUgYWNvcmRvIGNvbSBhcyByZXN0cmnDp8O1ZXMuXG4gIHByaXZhdGUgY2hlY2tSZXN0cmljdGlvbnMoZmlsZTogUG9VcGxvYWRGaWxlKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcmVzdHJpY3Rpb25zID0gdGhpcy5maWxlUmVzdHJpY3Rpb25zO1xuXG4gICAgaWYgKHJlc3RyaWN0aW9ucykge1xuICAgICAgY29uc3QgYWxsb3dlZEV4dGVuc2lvbnMgPSByZXN0cmljdGlvbnMuYWxsb3dlZEV4dGVuc2lvbnM7XG4gICAgICBjb25zdCBtaW5GaWxlU2l6ZSA9IHJlc3RyaWN0aW9ucy5taW5GaWxlU2l6ZTtcbiAgICAgIGNvbnN0IG1heEZpbGVTaXplID0gcmVzdHJpY3Rpb25zLm1heEZpbGVTaXplO1xuXG4gICAgICBjb25zdCBpc0FjY2VwdCA9IGFsbG93ZWRFeHRlbnNpb25zID8gdGhpcy5pc0FsbG93ZWRFeHRlbnNpb24oZmlsZS5leHRlbnNpb24sIGFsbG93ZWRFeHRlbnNpb25zKSA6IHRydWU7XG4gICAgICBjb25zdCBpc0FjY2VwdFNpemUgPSBmaWxlLnNpemUgPj0gbWluRmlsZVNpemUgJiYgZmlsZS5zaXplIDw9IG1heEZpbGVTaXplO1xuXG4gICAgICBpZiAoIWlzQWNjZXB0U2l6ZSkge1xuICAgICAgICB0aGlzLnNpemVOb3RBbGxvd2VkID0gdGhpcy5zaXplTm90QWxsb3dlZCArIDE7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpc0FjY2VwdCAmJiBpc0FjY2VwdFNpemU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIGV4aXN0c0ZpbGVTYW1lTmFtZShmaWxlOiBQb1VwbG9hZEZpbGUsIGZpbGVzOiBBcnJheTxQb1VwbG9hZEZpbGU+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZpbGVzLnNvbWUoY3VycmVudEZpbGUgPT4gZmlsZS5uYW1lID09PSBjdXJyZW50RmlsZS5uYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VXBsb2FkU2VydmljZSgpOiBQb1VwbG9hZFNlcnZpY2Uge1xuICAgIHJldHVybiB0aGlzLnVwbG9hZFNlcnZpY2U7XG4gIH1cblxuICBwcml2YXRlIGluc2VydEZpbGVJbkZpbGVzKG5ld0ZpbGU6IFBvVXBsb2FkRmlsZSwgZmlsZXM6IEFycmF5PFBvVXBsb2FkRmlsZT4pIHtcbiAgICBpZiAodGhpcy5leGlzdHNGaWxlU2FtZU5hbWUobmV3RmlsZSwgZmlsZXMpKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVFeGlzdHNGaWxlSW5GaWxlcyhuZXdGaWxlLCBmaWxlcyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNNdWx0aXBsZSkge1xuICAgICAgZmlsZXMucHVzaChuZXdGaWxlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmlsZXMuc3BsaWNlKDAsIGZpbGVzLmxlbmd0aCwgbmV3RmlsZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbGVzO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0FsbG93ZWRFeHRlbnNpb24oZXh0ZW5zaW9uOiBzdHJpbmcsIGFsbG93ZWRFeHRlbnNpb25zOiBBcnJheTxzdHJpbmc+ID0gW10pOiBib29sZWFuIHtcbiAgICBjb25zdCBpc0FsbG93ZWQgPSBhbGxvd2VkRXh0ZW5zaW9ucy5zb21lKGV4dCA9PiBleHQudG9Mb3dlckNhc2UoKSA9PT0gZXh0ZW5zaW9uKTtcbiAgICBpZiAoIWlzQWxsb3dlZCkge1xuICAgICAgdGhpcy5leHRlbnNpb25Ob3RBbGxvd2VkID0gdGhpcy5leHRlbnNpb25Ob3RBbGxvd2VkICsgMTtcbiAgICB9XG4gICAgcmV0dXJuIGlzQWxsb3dlZDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0QWxsb3dlZEV4dGVuc2lvbnMocmVzdHJpY3Rpb25zOiBQb1VwbG9hZEZpbGVSZXN0cmljdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IF9hbGxvd2VkRXh0ZW5zaW9ucyA9IHJlc3RyaWN0aW9ucy5hbGxvd2VkRXh0ZW5zaW9ucyB8fCBbXTtcblxuICAgIHRoaXMuYWxsb3dlZEV4dGVuc2lvbnMgPSBfYWxsb3dlZEV4dGVuc2lvbnMuam9pbignLCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0UmVzdHJpY3Rpb25zKHJlc3RyaWN0aW9uczogUG9VcGxvYWRGaWxlUmVzdHJpY3Rpb25zKTogUG9VcGxvYWRGaWxlUmVzdHJpY3Rpb25zIHtcbiAgICBpZiAoIXJlc3RyaWN0aW9ucykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG1pbkZpbGVTaXplID0gcmVzdHJpY3Rpb25zLm1pbkZpbGVTaXplIHx8IHBvVXBsb2FkTWluRmlsZVNpemU7XG4gICAgY29uc3QgbWF4RmlsZVNpemUgPSByZXN0cmljdGlvbnMubWF4RmlsZVNpemUgfHwgcG9VcGxvYWRNYXhGaWxlU2l6ZTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5yZXN0cmljdGlvbnMsXG4gICAgICBtYXhGaWxlU2l6ZTogbWF4RmlsZVNpemUsXG4gICAgICBtaW5GaWxlU2l6ZTogbWluRmlsZVNpemVcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVFeGlzdHNGaWxlSW5GaWxlcyhuZXdGaWxlOiBQb1VwbG9hZEZpbGUsIGZpbGVzOiBBcnJheTxQb1VwbG9hZEZpbGU+KSB7XG4gICAgY29uc3QgZmlsZUluZGV4ID0gZmlsZXMuZmluZEluZGV4KFxuICAgICAgY3VycmVudEZpbGUgPT4gbmV3RmlsZS5uYW1lID09PSBjdXJyZW50RmlsZS5uYW1lICYmIGN1cnJlbnRGaWxlLnN0YXR1cyAhPT0gUG9VcGxvYWRTdGF0dXMuVXBsb2FkZWRcbiAgICApO1xuXG4gICAgaWYgKGZpbGVJbmRleCAhPT0gLTEpIHtcbiAgICAgIGZpbGVzLnNwbGljZShmaWxlSW5kZXgsIDEsIG5ld0ZpbGUpO1xuICAgIH1cblxuICAgIHJldHVybiBmaWxlcztcbiAgfVxuXG4gIGFic3RyYWN0IHNlbmRGZWVkYmFjaygpOiB2b2lkO1xuXG4gIGFic3RyYWN0IHNldERpcmVjdG9yeUF0dHJpYnV0ZSh2YWx1ZTogYm9vbGVhbik7XG59XG4iXX0=
|
|
820
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tdXBsb2FkLWJhc2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9jb21wb25lbnRzL3BvLWZpZWxkL3BvLXVwbG9hZC9wby11cGxvYWQtYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHcEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFJckYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7OztBQUl6RCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRztJQUNyQyxFQUFFLEVBQW9CO1FBQ3BCLEtBQUssRUFBRSxPQUFPO1FBQ2QsT0FBTyxFQUFFLFNBQVM7UUFDbEIsVUFBVSxFQUFFLGFBQWE7UUFDekIsV0FBVyxFQUFFLGNBQWM7UUFDM0IsWUFBWSxFQUFFLGVBQWU7UUFDN0IsWUFBWSxFQUFFLGVBQWU7UUFDN0IsYUFBYSxFQUFFLGlCQUFpQjtRQUNoQyxlQUFlLEVBQUUsbUJBQW1CO1FBQ3BDLHFCQUFxQixFQUFFLGtDQUFrQztRQUN6RCxzQkFBc0IsRUFBRSxtQ0FBbUM7UUFDM0QsYUFBYSxFQUFFLGlCQUFpQjtRQUNoQyxlQUFlLEVBQUUsbUJBQW1CO1FBQ3BDLGVBQWUsRUFBRSwwQ0FBMEM7UUFDM0QsZUFBZSxFQUFFLGdFQUFnRTtRQUNqRixh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QVc7WUFpQk0sYUFBYTtrQkFBckMsTUFBTTttQkFBQyxlQUFlO1lBd0NHLFNBQVM7a0JBQWxDLEtBQUs7bUJBQUMsYUFBYTtZQXVCTSxRQUFRO2tCQUFqQyxLQUFLO21CQUFDLGFBQWE7WUFpQm1CLG9CQUFvQjtrQkFBMUQsS0FBSzttQkFBQywwQkFBMEI7WUFvQkUsZ0JBQWdCO2tCQUFsRCxLQUFLO21CQUFDLHNCQUFzQjtZQW1CSSxjQUFjO2tCQUE5QyxLQUFLO21CQUFDLG9CQUFvQjtZQW9DRixRQUFRO2tCQUFoQyxLQUFLO21CQUFDLFlBQVk7WUF1QlUsZ0JBQWdCO2tCQUE1QyxLQUFLO21CQUFDLGdCQUFnQjtZQW1CSSxTQUFTO2tCQUFuQyxLQUFLO21CQUFDLGNBQWM7WUFpQkksUUFBUTtrQkFBaEMsS0FBSzttQkFBQyxZQUFZO1lBbUJNLFVBQVU7a0JBQWxDLEtBQUs7bUJBQUMsWUFBWTtZQWlCTSxRQUFRO2tCQUFoQyxLQUFLO21CQUFDLFlBQVk7WUFnQk8sWUFBWTtrQkFBckMsS0FBSzttQkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgY29udmVydFRvQm9vbGVhbiwgaXNFcXVhbHMsIGlzSUUsIGlzTW9iaWxlIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvdXRpbCc7XG5pbXBvcnQgeyByZXF1aXJlZEZhaWxlZCB9IGZyb20gJy4uL3ZhbGlkYXRvcnMnO1xuXG5pbXBvcnQgeyBwb0xvY2FsZURlZmF1bHQgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wby1sYW5ndWFnZS9wby1sYW5ndWFnZS5jb25zdGFudCc7XG5pbXBvcnQgeyBQb0xhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BvLWxhbmd1YWdlL3BvLWxhbmd1YWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9VcGxvYWRGaWxlUmVzdHJpY3Rpb25zIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXVwbG9hZC1maWxlLXJlc3RyaWN0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1VwbG9hZExpdGVyYWxzIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXVwbG9hZC1saXRlcmFscy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9VcGxvYWRGaWxlIH0gZnJvbSAnLi9wby11cGxvYWQtZmlsZSc7XG5pbXBvcnQgeyBQb1VwbG9hZFN0YXR1cyB9IGZyb20gJy4vcG8tdXBsb2FkLXN0YXR1cy5lbnVtJztcbmltcG9ydCB7IFBvVXBsb2FkU2VydmljZSB9IGZyb20gJy4vcG8tdXBsb2FkLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9Qcm9ncmVzc0FjdGlvbiB9IGZyb20gJy4uLy4uL3BvLXByb2dyZXNzJztcblxuZXhwb3J0IGNvbnN0IHBvVXBsb2FkTGl0ZXJhbHNEZWZhdWx0ID0ge1xuICBlbjogPFBvVXBsb2FkTGl0ZXJhbHM+e1xuICAgIGZpbGVzOiAnZmlsZXMnLFxuICAgIGZvbGRlcnM6ICdmb2xkZXJzJyxcbiAgICBzZWxlY3RGaWxlOiAnU2VsZWN0IGZpbGUnLFxuICAgIHNlbGVjdEZpbGVzOiAnU2VsZWN0IGZpbGVzJyxcbiAgICBzZWxlY3RGb2xkZXI6ICdTZWxlY3QgZm9sZGVyJyxcbiAgICBzdGFydFNlbmRpbmc6ICdTdGFydCBzZW5kaW5nJyxcbiAgICBkcmFnRmlsZXNIZXJlOiAnRHJhZyBmaWxlcyBoZXJlJyxcbiAgICBkcmFnRm9sZGVyc0hlcmU6ICdEcmFnIGZvbGRlcnMgaGVyZScsXG4gICAgc2VsZWN0RmlsZXNPbkNvbXB1dGVyOiAnb3Igc2VsZWN0IGZpbGVzIG9uIHlvdXIgY29tcHV0ZXInLFxuICAgIHNlbGVjdEZvbGRlck9uQ29tcHV0ZXI6ICdvciBzZWxlY3QgZm9sZGVyIG9uIHlvdXIgY29tcHV0ZXInLFxuICAgIGRyb3BGaWxlc0hlcmU6ICdEcm9wIGZpbGVzIGhlcmUnLFxuICAgIGRyb3BGb2xkZXJzSGVyZTogJ0Ryb3AgZm9sZGVycyBoZXJlJyxcbiAgICBpbnZhbGlkRHJvcEFyZWE6ICd7MH0gd2VyZSBub3QgZHJvcHBlZCBpbiB0aGUgY29ycmVjdCBhcmVhJyxcbiAgICBpbnZhbGlkRmlsZVR5cGU6ICdGYWlsZWQgdG8gbG9hZCB7MH0gZmlsZShzKSBhcyBpdCBpcyBub3QgdGhlIGFsbG93ZWQgZmlsZSB0eXBlLicsXG4gICAgaW52YWxpZEFtb3VudDogJ0ZhaWxlZCB0byBsb2FkIHswfSBmaWxlKHMpLCBhcyBpdCBleGNlZWRzIHRoZSBsaW1pdCBhbW91bnQgb2YgZmlsZXMuJyxcbiAgICBpbnZhbGlkRm9ybWF0OiAnRmFpbGVkIHRvIGxvYWQgezB9IGZpbGUocyksIGFzIGl0IGRvZXMgbm90IG1hdGNoIHRoZSBmb3JtYXQocyk6IHsxfS4nLFxuICAgIGludmFsaWRTaXplOiAnRmFpbGVkIHRvIGxvYWQgezB9IGZpbGVzKHMpLCBhcyBpdCBpcyBub3QgdGhlIGFsbG93ZWQgc2l6ZTogZnJvbSB7MX0gdG8gezJ9LicsXG4gICAgbnVtYmVyT2ZGaWxlc0FsbG93ZWQ6ICd7MH0gZmlsZShzKSBhbGxvd2VkJyxcbiAgICBhbGxvd2VkRm9ybWF0czogJ0FjY2VwdGVkIGZpbGUgZm9ybWF0czogezB9LicsXG4gICAgYWxsb3dlZEZpbGVTaXplUmFuZ2U6ICdTaXplIGxpbWl0IHBlciBmaWxlOiBmcm9tIHswfSB0byB7MX0nLFxuICAgIG1heEZpbGVTaXplQWxsb3dlZDogJ1NpemUgbGltaXQgcGVyIGZpbGU6IHswfSBtYXhpbXVtJyxcbiAgICBtaW5GaWxlU2l6ZUFsbG93ZWQ6ICdTaXplIGxpbWl0IHBlciBmaWxlOiB7MH0gbWluaW11bScsXG4gICAgZXJyb3JPY2N1cnJlZDogJ0FuIGVycm9yIGhhcyBvY2N1cnJlZCcsXG4gICAgc2VudFdpdGhTdWNjZXNzOiAnU2VudCB3aXRoIHN1Y2Nlc3MnXG4gIH0sXG4gIGVzOiA8UG9VcGxvYWRMaXRlcmFscz57XG4gICAgZmlsZXM6ICdhcmNoaXZvcycsXG4gICAgZm9sZGVyczogJ2NhcnBldGFzJyxcbiAgICBzZWxlY3RGaWxlOiAnU2VsZWNjaW9uYXIgYXJjaGl2bycsXG4gICAgc2VsZWN0RmlsZXM6ICdTZWxlY2Npb25hciBhcmNoaXZvcycsXG4gICAgc2VsZWN0Rm9sZGVyOiAnU2VsZWNjaW9uYXIgY2FycGV0YScsXG4gICAgc3RhcnRTZW5kaW5nOiAnSW5pY2lhciBjYXJnYScsXG4gICAgZHJhZ0ZpbGVzSGVyZTogJ0FycmFzdHJhIGxvcyBhcmNoaXZvcyBhcXXDrScsXG4gICAgZHJhZ0ZvbGRlcnNIZXJlOiAnQXJyYXN0cmEgbGFzIGNhcnBldGFzIGFxdcOtJyxcbiAgICBzZWxlY3RGaWxlc09uQ29tcHV0ZXI6ICdvIHNlbGVjY2lvbmEgbG9zIGFyY2hpdm9zIGVuIHR1IGNvbXB1dGFkb3JhJyxcbiAgICBzZWxlY3RGb2xkZXJPbkNvbXB1dGVyOiAnbyBzZWxlY2Npb25hIGxhIGNhcnBldGEgZW4gdHUgY29tcHV0YWRvcmEnLFxuICAgIGRyb3BGaWxlc0hlcmU6ICdEZWphIGxvcyBhcmNoaXZvcyBhcXXDrScsXG4gICAgZHJvcEZvbGRlcnNIZXJlOiAnRGVqYSBsYXMgY2FycGV0YXMgYXF1w60nLFxuICAgIGludmFsaWREcm9wQXJlYTogJ0xvcyB7MH0gbm8gc2UgaW5zZXJ0YXJvbiBlbiBsYSB1YmljYWNpw7NuIGNvcnJlY3RhJyxcbiAgICBpbnZhbGlkRmlsZVR5cGU6ICdFcnJvciBhbCBjYXJnYXIgezB9IGFyY2hpdm8gKHMpIHlhIHF1ZSBubyBlcyBlbCB0aXBvIGRlIGFyY2hpdm8gcGVybWl0aWRvJyxcbiAgICBpbnZhbGlkQW1vdW50OiAnRXJyb3IgYWwgY2FyZ2FyIHswfSBhcmNoaXZvIChzKSB5YSBxdWUgZXhjZWRlIGxhIGNhbnRpZGFkIGxpbWl0ZSBkZSBhcmNoaXZvcy4nLFxuICAgIGludmFsaWRGb3JtYXQ6ICdFcnJvciBhbCBjYXJnYXIgezB9IGFyY2hpdm8gKHMpIHlhIHF1ZSBubyBjb2luY2lkZSBjb24gZWwgZm9ybWF0byAocyk6IHsxfS4nLFxuICAgIGludmFsaWRTaXplOiAnRXJyb3IgYWwgY2FyZ2FyIHswfSBhcmNoaXZvIChzKSB5YSBxdWUgbm8gY3VtcGxlIGNvbiBlbCB0YW1hw7FvIHBlcm1pdGlkbzogZGVzZGUgezF9IGhhc3RhIHsyfS4nLFxuICAgIG51bWJlck9mRmlsZXNBbGxvd2VkOiAnezB9IGFyY2hpdm8ocykgcGVybWl0aWRvKHMpJyxcbiAgICBhbGxvd2VkRm9ybWF0czogJ0Zvcm1hdG9zIGFjZXB0YWRvczogezB9LicsXG4gICAgYWxsb3dlZEZpbGVTaXplUmFuZ2U6ICdMaW1pdGUgZGUgdGFtYcOxbyBkZSBhcmNoaXZvOiBkZXNkZSB7MH0gaGFzdGEgezF9JyxcbiAgICBtYXhGaWxlU2l6ZUFsbG93ZWQ6ICdMaW1pdGUgZGUgdGFtYcOxbyBkZSBhcmNoaXZvOiBoYXN0YSB7MH0nLFxuICAgIG1pbkZpbGVTaXplQWxsb3dlZDogJ0xpbWl0ZSBkZSB0YW1hw7FvIGRlIGFyY2hpdm86IG1pbmltbyB7MH0nLFxuICAgIGVycm9yT2NjdXJyZWQ6ICdPY3VycmlvIHVuIGVycm9yJyxcbiAgICBzZW50V2l0aFN1Y2Nlc3M6ICdFbnZpYWRvIGNvbiDDqXhpdG8nXG4gIH0sXG4gIHB0OiA8UG9VcGxvYWRMaXRlcmFscz57XG4gICAgZmlsZXM6ICdhcnF1aXZvcycsXG4gICAgZm9sZGVyczogJ2RpcmV0w7NyaW9zJyxcbiAgICBzZWxlY3RGaWxlOiAnU2VsZWNpb25hciBhcnF1aXZvJyxcbiAgICBzZWxlY3RGaWxlczogJ1NlbGVjaW9uYXIgYXJxdWl2b3MnLFxuICAgIHNlbGVjdEZvbGRlcjogJ1NlbGVjaW9uYXIgcGFzdGEnLFxuICAgIHN0YXJ0U2VuZGluZzogJ0luaWNpYXIgZW52aW8nLFxuICAgIGRyYWdGaWxlc0hlcmU6ICdBcnJhc3RlIG9zIGFycXVpdm9zIGFxdWknLFxuICAgIGRyYWdGb2xkZXJzSGVyZTogJ0FycmFzdGUgYXMgcGFzdGFzIGFxdWknLFxuICAgIHNlbGVjdEZpbGVzT25Db21wdXRlcjogJ291IHNlbGVjaW9uZSBvcyBhcnF1aXZvcyBubyBjb21wdXRhZG9yJyxcbiAgICBzZWxlY3RGb2xkZXJPbkNvbXB1dGVyOiAnb3Ugc2VsZWNpb25lIGEgcGFzdGEgbm8gY29tcHV0YWRvcicsXG4gICAgZHJvcEZpbGVzSGVyZTogJ1NvbHRlIG9zIGFycXVpdm9zIGFxdWknLFxuICAgIGRyb3BGb2xkZXJzSGVyZTogJ1NvbHRlIGFzIHBhc3RhcyBhcXVpJyxcbiAgICBpbnZhbGlkRHJvcEFyZWE6ICdPcyB7MH0gbsOjbyBmb3JhbSBpbnNlcmlkb3Mgbm8gbG9jYWwgY29ycmV0bycsXG4gICAgaW52YWxpZEZpbGVUeXBlOiAnRmFsaGEgYW8gY2FycmVnYXIgezB9IGFycXVpdm8gKHMpLCBwb2lzIG7Do28gw6kgbyB0aXBvIGRlIGFycXVpdm8gcGVybWl0aWRvJyxcbiAgICBpbnZhbGlkQW1vdW50OiAnRmFsaGEgYW8gY2FycmVnYXIgezB9IGFycXVpdm8ocyksIHBvaXMgZXhjZWRlKG0pIGEgcXVhbnRpZGFkZSBsaW1pdGUgZGUgYXJxdWl2b3MuJyxcbiAgICBpbnZhbGlkRm9ybWF0OiAnRmFsaGEgYW8gY2FycmVnYXIgezB9IGFycXVpdm8ocyksIHBvaXMgbsOjbyBjb3JyZXNwb25kZShtKSBhbyhzKSBmb3JtYXRvKHMpOiB7MX0uJyxcbiAgICBpbnZhbGlkU2l6ZTogJ0ZhbGhhIGFvIGNhcnJlZ2FyIHswfSBhcnF1aXZvKHMpLCBwb2lzIG7Do28gYXRlbmRlIGFvIHRhbWFuaG8gcGVybWl0aWRvOiB7MX0gYXTDqSB7Mn0uJyxcbiAgICBudW1iZXJPZkZpbGVzQWxsb3dlZDogJ1F1YW50aWRhZGUgbcOheGltYTogezB9IGFycXVpdm8ocyknLFxuICAgIGFsbG93ZWRGb3JtYXRzOiAnRm9ybWF0b3MgYWRvdGFkb3M6IHswfS4nLFxuICAgIGFsbG93ZWRGaWxlU2l6ZVJhbmdlOiAnTGltaXRlIGRlIHRhbWFuaG8gcG9yIGFycXVpdm86IGRlIHswfSBhdMOpIHsxfScsXG4gICAgbWF4RmlsZVNpemVBbGxvd2VkOiAnTGltaXRlIGRlIHRhbWFuaG8gcG9yIGFycXVpdm86IGF0w6kgezB9JyxcbiAgICBtaW5GaWxlU2l6ZUFsbG93ZWQ6ICdMaW1pdGUgZGUgdGFtYW5obyBwb3IgYXJxdWl2bzogbm8gbcOtbmltbyB7MH0nLFxuICAgIGVycm9yT2NjdXJyZWQ6ICdPY29ycmV1IHVtIGVycm8nLFxuICAgIHNlbnRXaXRoU3VjY2VzczogJ0VudmlhZG8gY29tIHN1Y2Vzc28nXG4gIH0sXG4gIHJ1OiA8UG9VcGxvYWRMaXRlcmFscz57XG4gICAgZmlsZXM6ICfRhNCw0LnQu9GLJyxcbiAgICBmb2xkZXJzOiAn0L/QsNC/0LrQuCDRgSDRhNCw0LnQu9Cw0LzQuCcsXG4gICAgc2VsZWN0RmlsZTogJ9CS0YvQsdC10YDQuNGC0LUg0YTQsNC50LsnLFxuICAgIHNlbGVjdEZpbGVzOiAn0JLRi9Cx0LXRgNC40YLQtSDRhNCw0LnQu9GLJyxcbiAgICBzZWxlY3RGb2xkZXI6ICfQktGL0LHQtdGA0LjRgtC1INC/0LDQv9C60YMg0YEg0YTQsNC50LvQsNC80LgnLFxuICAgIHN0YXJ0U2VuZGluZzogJ9Cd0LDRh9Cw0YLRjCDQt9Cw0LPRgNGD0LfQutGDJyxcbiAgICBkcmFnRmlsZXNIZXJlOiAn0J/QtdGA0LXRgtCw0YnQuNGC0LUg0YTQsNC50LvRiyDRgdGO0LTQsCcsXG4gICAgZHJhZ0ZvbGRlcnNIZXJlOiAn0J/QtdGA0LXRgtCw0YnQuNGC0LUg0YHRjtC00LAg0L/QsNC/0LrQuCcsXG4gICAgc2VsZWN0RmlsZXNPbkNvbXB1dGVyOiAn0LjQu9C4INCy0YvQsdC10YDQuNGC0LUg0YTQsNC50LvRiyDQvdCwINC60L7QvNC/0YzRjtGC0LXRgNC1JyxcbiAgICBzZWxlY3RGb2xkZXJPbkNvbXB1dGVyOiAn0LjQu9C4INCy0YvQsdC10YDQuNGC0LUg0L/QsNC/0LrRgyDQvdCwINCy0LDRiNC10Lwg0LrQvtC80L/RjNGO0YLQtdGA0LUnLFxuICAgIGRyb3BGaWxlc0hlcmU6ICfQntGB0YLQsNCy0YzRgtC1INGE0LDQudC70Ysg0LfQtNC10YHRjCcsXG4gICAgZHJvcEZvbGRlcnNIZXJlOiAn0J/QtdGA0LXRgtCw0YnQuNGC0LUg0YHRjtC00LAg0L/QsNC/0LrQuCcsXG4gICAgaW52YWxpZERyb3BBcmVhOiAnezB9INC90LUg0LHRi9C70Lgg0LLRgdGC0LDQstC70LXQvdGLINCyINC/0YDQsNCy0LjQu9GM0L3QvtC8INC80LXRgdGC0LUuJyxcbiAgICBpbnZhbGlkRmlsZVR5cGU6ICfQndC1INGD0LTQsNC70L7RgdGMINC30LDQs9GA0YPQt9C40YLRjCDRhNCw0LnQu9GLIHswfSwg0YLQsNC6INC60LDQuiDRjdGC0L4g0L3QtdCy0LXRgNC90YvQuSDRgtC40L8g0YTQsNC50LvQsCcsXG4gICAgaW52YWxpZEFtb3VudDogJ07Do28gZm9pIHBvc3PDrXZlbCBjYXJyZWdhciBvcyBhcnF1aXZvcyB7MH0gcG9ycXVlIGVsZXMgZXhjZWRlcmFtIG8gbGltaXRlIGRlIGFycXVpdm9zLicsXG4gICAgaW52YWxpZEZvcm1hdDogJ9Cd0LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNCz0YDRg9C30LjRgtGMINGE0LDQudC70YsgezB9LCDRgtCw0Log0LrQsNC6INC+0L3QuCDQvdC1INGB0L7QvtGC0LLQtdGC0YHRgtCy0YPRjtGCINGE0L7RgNC80LDRgtGDICjQsNC8KTogezF9LicsXG4gICAgaW52YWxpZFNpemU6ICfQndC1INGD0LTQsNC70L7RgdGMINC30LDQs9GA0YPQt9C40YLRjCDRhNCw0LnQu9GLIHswfSwg0L/QvtGB0LrQvtC70YzQutGDINC+0L3QuCDQvdC1INGB0L7QvtGC0LLQtdGC0YHRgtCy0YPRjtGCINGA0LDQt9GA0LXRiNC10L3QvdC+0LzRgyDRgNCw0LfQvNC10YDRgzog0L7RgiB7MX0g0LTQviB7Mn0uJyxcbiAgICBudW1iZXJPZkZpbGVzQWxsb3dlZDogJ9Cc0LDQutGB0LjQvNCw0LvRjNC90L7QtSDQutC+0LvQuNGH0LXRgdGC0LLQvjogezB9INGE0LDQudC70L7QsicsXG4gICAgYWxsb3dlZEZvcm1hdHM6ICfQpNC+0YDQvNCw0YLRiyDQv9GA0LjQvdGP0YLRizogezB9LicsXG4gICAgYWxsb3dlZEZpbGVTaXplUmFuZ2U6ICfQntCz0YDQsNC90LjRh9C10L3QuNC1INGA0LDQt9C80LXRgNCwINGE0LDQudC70LA6INC+0YIgezB9INC00L4gezF9JyxcbiAgICBtYXhGaWxlU2l6ZUFsbG93ZWQ6ICfQntCz0YDQsNC90LjRh9C10L3QuNC1INGA0LDQt9C80LXRgNCwINGE0LDQudC70LA6INC00L4gezB9JyxcbiAgICBtaW5GaWxlU2l6ZUFsbG93ZWQ6ICfQntCz0YDQsNC90LjRh9C10L3QuNC1INGA0LDQt9C80LXRgNCwINGE0LDQudC70LA6INC90LUg0LzQtdC90LXQtSB7MH0nLFxuICAgIGVycm9yT2NjdXJyZWQ6ICfQn9GA0L7QuNC30L7RiNC70LAg0L7RiNC40LHQutCwLicsXG4gICAgc2VudFdpdGhTdWNjZXNzOiAn0KPRgdC/0LXRiNC90L4g0L7RgtC/0YDQsNCy0LvQtdC90L4nXG4gIH1cbn07XG5cbmNvbnN0IHBvVXBsb2FkRm9ybUZpZWxkRGVmYXVsdCA9ICdmaWxlcyc7XG5cbmNvbnN0IHBvVXBsb2FkTWF4RmlsZVNpemUgPSAzMTQ1NzI4MDsgLy8gMzBNQlxuY29uc3QgcG9VcGxvYWRNaW5GaWxlU2l6ZSA9IDA7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogTyBjb21wb25lbnRlIGBwby11cGxvYWRgIHBlcm1pdGUgcXVlIG8gdXN1w6FyaW8gZW52aWUgYXJxdWl2byhzKSBhbyBzZXJ2aWRvciBlIGFjb21wYW5oZSBvIHByb2dyZXNzby5cbiAqIEVzdGUgY29tcG9uZW50ZSB0YW1iw6ltIHBvc3NpYmlsaXRhIGFsZ3VtYXMgY29uZmlndXJhw6fDtWVzIGNvbW86XG4gKiAg4oCTIEVudmlvIGRlIGRpcmV0w7NyaW9zLCBvbmRlIGVsZSBhY2Vzc2EgbyBkaXJldMOzcmlvIHNlbGVjaW9uYWRvIGFzc2ltIGNvbW8gc2V1cyBzdWItZGlyZXTDs3Jpb3M7XG4gKiAgLSBNw7psdGlwbGEgc2VsZcOnw6NvLCBvbmRlIG8gdXN1w6FyaW8gcG9kZSBlbnZpYXIgbWFpcyBkZSB1bSBhcnF1aXZvIGFvIHNlcnZpZG9yLlxuICogIC0gQXV0byBlbnZpbywgb25kZSBvIGFycXVpdm8gw6kgZW52aWFkbyBpbWVkaWF0YW1lbnRlIGFww7NzIGEgc2VsZcOnw6NvIGRvIHVzdcOhcmlvLCBuw6NvIG5lY2Vzc2l0YW5kbyBxdWUgbyB1c3XDoXJpb1xuICogY2xpcXVlIGVtIGVudmlhci5cbiAqICAtIFJlc3RyacOnw7VlcyBkZSBmb3JtYXRvcyBkZSBhcnF1aXZvIGUgdGFtYW5oby5cbiAqICAtIEZ1bsOnw6NvIGRlIHN1Y2Vzc28gcXVlIHNlcsOhIGRpc3BhcmFkYSBxdWFuZG8gb3MgYXJxdWl2b3MgZm9yZW0gZW52aWFkb3MgY29tIHN1Y2Vzc28uXG4gKiAgLSBGdW7Dp8OjbyBkZSBlcnJvIHF1ZSBzZXLDoSBkaXNwYXJhZGEgcXVhbmRvIGhvdXZlciBlcnJvIG5vIGVudmlvIGRvcyBhcnF1aXZvcy5cbiAqICAtIFBlcm1pdGUgaGFiaWxpdGFyIHVtYSDDoXJlYSBvbmRlIG9zIGFycXVpdm9zIHBvZGVtIHNlciBhcnJhc3RhZG9zLlxuICovXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBQb1VwbG9hZEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yIHtcbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogQXBsaWNhIGZvY28gbm8gZWxlbWVudG8gYW8gc2VyIGluaWNpYWRvLlxuICAgKlxuICAgKiA+IENhc28gbWFpcyBkZSB1bSBlbGVtZW50byBzZWphIGNvbmZpZ3VyYWRvIGNvbSBlc3NhIHByb3ByaWVkYWRlLCBhcGVuYXMgbyDDumx0aW1vIGVsZW1lbnRvIGRlY2xhcmFkbyBjb20gZWxhIHRlcsOhIG8gZm9jby5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KHsgYWxpYXM6ICdwLWF1dG8tZm9jdXMnLCB0cmFuc2Zvcm06IGNvbnZlcnRUb0Jvb2xlYW4gfSkgYXV0b0ZvY3VzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIGVtICpwaXhlbHMqIGEgYWx0dXJhIGRhIMOhcmVhIG9uZGUgcG9kZW0gc2VyIGFycmFzdGFkb3Mgb3MgYXJxdWl2b3MuIEEgYWx0dXJhIG3DrW5pbWEgYWNlaXRhIMOpIGAxNjBweGAuXG4gICAqXG4gICAqID4gRXN0YSBwcm9wcmllZGFkZSBmdW5jaW9uYSBzb21lbnRlIHNlIGEgcHJvcHJpZWRhZGUgYHAtZHJhZy1kcm9wYCBlc3RpdmVyIGhhYmlsaXRhZGEuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAzMjBgXG4gICAqL1xuICBASW5wdXQoJ3AtZHJhZy1kcm9wLWhlaWdodCcpIGRyYWdEcm9wSGVpZ2h0OiBudW1iZXI7XG5cbiAgLyoqIFLDs3R1bG8gZG8gY2FtcG8uICovXG4gIEBJbnB1dCgncC1sYWJlbCcpIGxhYmVsPzogc3RyaW5nO1xuXG4gIC8qKiBUZXh0byBkZSBhcG9pbyBwYXJhIG8gY2FtcG8uICovXG4gIEBJbnB1dCgncC1oZWxwJykgaGVscD86IHN0cmluZztcblxuICAvKiogVVJMIHF1ZSBkZXZlIHNlciBmZWl0YSBhIHJlcXVpc2nDp8OjbyBjb20gb3MgYXJxdWl2b3Mgc2VsZWNpb25hZG9zLiAqL1xuICBASW5wdXQoJ3AtdXJsJykgdXJsOiBzdHJpbmc7XG5cbiAgLyoqIERlZmluZSBvIHZhbG9yIGRvIGF0cmlidXRvIGBuYW1lYCBkbyBjb21wb25lbnRlLiAqL1xuICBASW5wdXQoJ25hbWUnKSBuYW1lOiBzdHJpbmcgPSAnZmlsZSc7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIHNlIG8gZW52aW8gZG8gYXJxdWl2byBzZXLDoSBhdXRvbcOhdGljbyBhbyBzZWxlY2lvbmFyIG8gbWVzbW8uXG4gICAqXG4gICAqID4gRXN0YSBwcm9wcmllZGFkZSBmdW5jaW9uYSBzb21lbnRlIHNlIGEgcHJvcHJpZWRhZGUgYHAtdXJsYCB0aXZlciB1bSB2YWxvciBhdHJpYnXDrWRvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtYXV0by11cGxvYWQnKSBhdXRvVXBsb2FkPzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlc2FiaWxpdGEgYm90w6NvIGRlIHJlbW92ZXIgbyhzKSBhcnF1aXZvKHMpIHNlbGVjaW9uYWRvKHMpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoeyBhbGlhczogJ3AtZGlzYWJsZWQtcmVtb3ZlLWZpbGUnLCB0cmFuc2Zvcm06IGNvbnZlcnRUb0Jvb2xlYW4gfSkgZGlzYWJsZWRSZW1vdmVGaWxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIHNlIGEgaW5kaWNhw6fDo28gZGUgY2FtcG8gb3BjaW9uYWwgc2Vyw6EgZXhpYmlkYS5cbiAgICpcbiAgICogPiBOw6NvIHNlcsOhIGV4aWJpZGEgYSBpbmRpY2HDp8OjbyBzZTpcbiAgICogIC0gTyBjYW1wbyBjb250ZXIgYHAtcmVxdWlyZWRgO1xuICAgKiAgLSBOw6NvIHBvc3N1aXIgYHAtaGVscGAgZS9vdSBgcC1sYWJlbGAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1vcHRpb25hbCcpIG9wdGlvbmFsOiBib29sZWFuO1xuXG4gIC8qKiBPYmpldG8gcXVlIGNvbnTDqW0gb3MgY2FiZcOnYWxob3MgcXVlIHNlcsOhIGVudmlhZG8gbmEgcmVxdWlzacOnw6NvIGRvcyBhcnF1aXZvcy4gKi9cbiAgQElucHV0KCdwLWhlYWRlcnMnKSBoZWFkZXJzOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfCBBcnJheTxzdHJpbmc+IH07XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIHNlIGEgcHJvcHJpZWRhZGUgYHAtdXJsYCDDqSBvYnJpZ2F0w7NyaWEuXG4gICAqXG4gICAqIENhc28gYSBwcm9wcmllZGFkZSBzZWphIGRlZmluaWRhIGNvbW8gYGZhbHNlYDpcbiAgICogLSBvIGJvdMOjbyBkZSBcIlNlbGVjaW9uYXIgYXJxdWl2b1wiIGZpY2Fyw6EgaGFiaWxpdGFkbyBtZXNtbyBzZW0gYSBwcm9wcmllZGFkZSBgcC11cmxgIGRlZmluaWRhLlxuICAgKiAtIG8gYm90w6NvIFwiSW5pY2lhciBlbnZpb1wiIGZpY2Fyw6Egb2N1bHRvIGF0w6kgcXVlIGEgcHJvcHJpZWRhZGUgYHAtdXJsYCBzZWphIGRlZmluaWRhLlxuICAgKlxuICAgKiA+IFNlIHV0aWxpemFkYSBjb20gYSBwcm9wcmllZGFkZSBgcC1hdXRvLXVwbG9hZGAgZGVmaW5pZGEgY29tbyBgdHJ1ZWAgc2Vyw6EgbmVjZXNzw6FyaW8gZGVmaW5pciBhIHByb3ByaWVkYWRlIGBwLXVybGAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnAtcmVxdWlyZWQtdXJsJylcbiAgQElucHV0KHsgYWxpYXM6ICdwLXJlcXVpcmVkLXVybCcsIHRyYW5zZm9ybTogY29udmVydFRvQm9vbGVhbiB9KVxuICByZXF1aXJlZFVybDogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIHVtYSBhw6fDo28gcGVyc29uYWxpemFkYSBubyBjb21wb25lbnRlIGBwby11cGxvYWRgLCBhZGljaW9uYW5kbyB1bSBib3TDo28gbm8gY2FudG8gaW5mZXJpb3IgZGlyZWl0b1xuICAgKiBkZSBjYWRhIGJhcnJhIGRlIHByb2dyZXNzbyBhc3NvY2lhZGEgYW9zIGFycXVpdm9zIGVudmlhZG9zIG91IGVtIGVudmlvLlxuICAgKlxuICAgKiBBIGHDp8OjbyBkZXZlIGltcGxlbWVudGFyIGEgaW50ZXJmYWNlICoqUG9Qcm9ncmVzc0FjdGlvbioqLCBwZXJtaXRpbmRvIGNvbmZpZ3VyYXIgcHJvcHJpZWRhZGVzIGNvbW86XG4gICAqIC0gYGxhYmVsYDogVGV4dG8gZG8gYm90w6NvLlxuICAgKiAtIGBpY29uYDogw41jb25lIGEgc2VyIGV4aWJpZG8gbm8gYm90w6NvLlxuICAgKiAtIGB0eXBlYDogVGlwbyBkZSBib3TDo28gKGV4LjogYGRhbmdlcmAgb3UgYGRlZmF1bHRgKS5cbiAgICogLSBgZGlzYWJsZWRgOiBJbmRpY2Egc2UgbyBib3TDo28gZGV2ZSBlc3RhciBkZXNhYmlsaXRhZG8uXG4gICAqIC0gYHZpc2libGVgOiBJbmRpY2Egc2UgbyBib3TDo28gZGV2ZSBlc3RhciB2aXPDrXZlbC5cbiAgICpcbiAgICogKipFeGVtcGxvIGRlIHVzbzoqKlxuICAgKlxuICAgKiBgYGBodG1sXG4gICAqIDxwby11cGxvYWRcbiAgICogIFtwLWN1c3RvbS1hY3Rpb25dPVwiY3VzdG9tQWN0aW9uXCJcbiAgICogIChwLWN1c3RvbS1hY3Rpb24tY2xpY2spPVwib25DdXN0b21BY3Rpb25DbGljaygkZXZlbnQpXCI+XG4gICAqIDwvcG8tdXBsb2FkPlxuICAgKiBgYGBcbiAgICpcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjdXN0b21BY3Rpb246IFBvUHJvZ3Jlc3NBY3Rpb24gPSB7XG4gICAqICAgbGFiZWw6ICdCYWl4YXInLFxuICAgKiAgIGljb246ICdwaCBwaC1kb3dubG9hZCcsXG4gICAqICAgdHlwZTogJ2RlZmF1bHQnLFxuICAgKiAgIHZpc2libGU6IHRydWVcbiAgICogfTtcbiAgICpcbiAgICogb25DdXN0b21BY3Rpb25DbGljayhmaWxlOiBQb1VwbG9hZEZpbGUpIHtcbiAgICogICBjb25zb2xlLmxvZyhgQcOnw6NvIHBlcnNvbmFsaXphZGEgY2xpY2FkYSBwYXJhIG8gYXJxdWl2bzogJHtmaWxlLm5hbWV9YCk7XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBASW5wdXQoJ3AtY3VzdG9tLWFjdGlvbicpIGN1c3RvbUFjdGlvbj86IFBvUHJvZ3Jlc3NBY3Rpb247XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRXZlbnRvIGVtaXRpZG8gYW8gY2xpY2FyIG5hIGHDp8OjbyBwZXJzb25hbGl6YWRhIGNvbmZpZ3VyYWRhIG5vIGBwLWN1c3RvbS1hY3Rpb25gLlxuICAgKlxuICAgKiBPIGV2ZW50byByZXRvcm5hIG8gYXJxdWl2byBhc3NvY2lhZG8gw6AgYmFycmEgZGUgcHJvZ3Jlc3NvIG9uZGUgYSBhw6fDo28gZm9pIGNsaWNhZGEsXG4gICAqIHBlcm1pdGluZG8gZXhlY3V0YXIgb3BlcmHDp8O1ZXMgZXNwZWPDrWZpY2FzIHBhcmEgYXF1ZWxlIGFycXVpdm8uXG4gICAqXG4gICAqICoqRXhlbXBsbyBkZSB1c286KipcbiAgICpcbiAgICogYGBgaHRtbFxuICAgKiA8cG8tdXBsb2FkXG4gICAqICBbcC1jdXN0b20tYWN0aW9uXT1cImN1c3RvbUFjdGlvblwiXG4gICAqICAocC1jdXN0b20tYWN0aW9uLWNsaWNrKT1cIm9uQ3VzdG9tQWN0aW9uQ2xpY2soJGV2ZW50KVwiPlxuICAgKiA8L3BvLXVwbG9hZD5cbiAgICogYGBgXG4gICAqXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY3VzdG9tQWN0aW9uOiBQb1Byb2dyZXNzQWN0aW9uID0ge1xuICAgKiAgIGxhYmVsOiAnQmFpeGFyJyxcbiAgICogICBpY29uOiAncGggcGgtZG93bmxvYWQnLFxuICAgKiAgIHR5cGU6ICdkZWZhdWx0JyxcbiAgICogICB2aXNpYmxlOiB0cnVlXG4gICAqIH07XG4gICAqXG4gICAqIG9uQ3VzdG9tQWN0aW9uQ2xpY2soZmlsZTogUG9VcGxvYWRGaWxlKSB7XG4gICAqICAgY29uc29sZS5sb2coYEHDp8OjbyBwZXJzb25hbGl6YWRhIGNsaWNhZGEgcGFyYSBvIGFycXVpdm86ICR7ZmlsZS5uYW1lfWApO1xuICAgKiAgIC8vIEzDs2dpY2EgcGFyYSBkb3dubG9hZCBkbyBhcnF1aXZvXG4gICAqICAgdGhpcy5kb3dubG9hZEZpbGUoZmlsZSk7XG4gICAqIH1cbiAgICpcbiAgICogZG93bmxvYWRGaWxlKGZpbGU6IFBvVXBsb2FkRmlsZSkge1xuICAgKiAgIC8vIEV4ZW1wbG8gZGUgZG93bmxvYWRcbiAgICogICBjb25zb2xlLmxvZyhgSW5pY2lhbmRvIG8gZG93bmxvYWQgZG8gYXJxdWl2bzogJHtmaWxlLm5hbWV9YCk7XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBAT3V0cHV0KCdwLWN1c3RvbS1hY3Rpb24tY2xpY2snKSBjdXN0b21BY3Rpb25DbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRnVuw6fDo28gcXVlIHNlcsOhIGV4ZWN1dGFkYSBubyBtb21lbnRvIGRlIHJlYWxpemFyIG8gZW52aW8gZG8gYXJxdWl2byxcbiAgICogb25kZSBzZXLDoSBwb3Nzw612ZWwgYWRpY2lvbmFyIGluZm9ybWHDp8O1ZXMgYW8gcGFyw6JtZXRybyBxdWUgc2Vyw6EgZW52aWFkbyBuYSByZXF1aXNpw6fDo28uXG4gICAqIMOJIHBhc3NhZG8gcG9yIHBhcsOibWV0cm8gdW0gb2JqZXRvIGNvbSBvIGFycXVpdm8gZSBhcyBwcm9wcmllZGFkZXMgZGF0YSBlIGV4dHJhRm9ybURhdGEsXG4gICAqIHF1ZSBzZXLDo28gZW52aWFkYXMgZW0gY29uanVudG8gY29tIG8gYXJxdWl2byBuYSByZXF1aXNpw6fDo28sIHBvciBleGVtcGxvOlxuICAgKlxuICAgKiA+IGRhdGEsIG5lc3RhIHByb3ByaWVkYWRlIHBvZGUgc2VyIGluZm9ybWFkbyBhbGd1bSBkYWRvXG4gICAqIGBgYFxuICAgKiAgIGV2ZW50LmRhdGEgPSB7aWQ6ICdpZCBkbyB1c3XDoXJpbyd9O1xuICAgKiBgYGBcbiAgICogPiBleHRyYUZvcm1EYXRhLCBuZXN0YSBwcm9wcmllZGFkZSBwb2RlIHNlciBpbmZvcm1hZG8gYWxndW0gZGFkbyBzb2xpY2l0YWRvIHBlbGEgQVBJXG4gICAqID4gcXVlIG7Do28gcG9zc2EgZXN0YXIgbm8gb2JqZXRvIGBkYXRhYCwgYXNzaW0gbyBjb250ZcO6ZG8gc2Fyw6EgZXh0cmHDrWRvIGRvIG9iamV0byBlXG4gICAqID4gZW52aWFkbyBjb21vIHBhcsOibWV0cm9cbiAgICogYGBgXG4gICAqICAgZXZlbnQuZXh0cmFGb3JtRGF0YSA9IHtpZDogJ2lkIGRvIHVzdcOhcmlvJ307XG4gICAqIGBgYFxuICAgKi9cbiAgQE91dHB1dCgncC11cGxvYWQnKSBvblVwbG9hZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBFdmVudG8gc2Vyw6EgZGlzcGFyYWRvIHF1YW5kbyBvY29ycmVyIGFsZ3VtIGVycm8gbm8gZW52aW8gZG8gYXJxdWl2by5cbiAgICogPiBQb3IgcGFyw6JtZXRybyBzZXLDoSBwYXNzYWRvIG8gb2JqZXRvIGRvIHJldG9ybm8gcXVlIMOpIGRvIHRpcG8gYEh0dHBFcnJvclJlc3BvbnNlYC5cbiAgICovXG4gIEBPdXRwdXQoJ3AtZXJyb3InKSBvbkVycm9yOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEV2ZW50byBzZXLDoSBkaXNwYXJhZG8gcXVhbmRvIG8gZW52aW8gZG8gYXJxdWl2byBmb3IgcmVhbGl6YWRvIGNvbSBzdWNlc3NvLlxuICAgKiA+IFBvciBwYXLDom1ldHJvIHNlcsOhIHBhc3NhZG8gbyBvYmpldG8gZG8gcmV0b3JubyBxdWUgw6kgZG8gdGlwbyBgSHR0cFJlc3BvbnNlYC5cbiAgICovXG4gIEBPdXRwdXQoJ3Atc3VjY2VzcycpIG9uU3VjY2VzczogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBGdW7Dp8OjbyBwYXJhIGF0dWFsaXphciBvIG5nTW9kZWwgZG8gY29tcG9uZW50ZSwgbmVjZXNzw6FyaW8gcXVhbmRvIG7Do28gZm9yIHV0aWxpemFkbyBkZW50cm8gZGEgKnRhZyogYGZvcm1gLlxuICAgKlxuICAgKiBOYSB2ZXJzw6NvIDEyLjIuMCBkbyBBbmd1bGFyIGEgdmVyaWZpY2HDp8OjbyBgc3RyaWN0VGVtcGxhdGVzYCB2ZW0gdHJ1ZSBjb21vIGRlZmF1bHQuIFBvcnRhbnRvLCBwYXJhIHV0aWxpemFyXG4gICAqIHR3by13YXkgYmluZGluZyBubyBjb21wb25lbnRlIGRldmUgc2UgdXRpbGl6YXIgZGEgc2VndWludGUgZm9ybWE6XG4gICAqXG4gICAqIGBgYFxuICAgKiA8cG8tdXBsb2FkIC4uLiBbbmdNb2RlbF09XCJVcGxvYWRNb2RlbFwiIChuZ01vZGVsQ2hhbmdlKT1cInVwbG9hZE1vZGVsID0gJGV2ZW50XCI+IDwvcG8tdXBsb2FkPlxuICAgKiBgYGBcbiAgICpcbiAgICovXG4gIEBPdXRwdXQoJ25nTW9kZWxDaGFuZ2UnKSBuZ01vZGVsQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIGFsbG93ZWRFeHRlbnNpb25zOiBzdHJpbmc7XG4gIGN1cnJlbnRGaWxlczogQXJyYXk8UG9VcGxvYWRGaWxlPjtcblxuICBjYW5IYW5kbGVEaXJlY3Rvcnk6IGJvb2xlYW47XG4gIG9uTW9kZWxDaGFuZ2U6IGFueTtcblxuICBwcm90ZWN0ZWQgZXh0ZW5zaW9uTm90QWxsb3dlZCA9IDA7XG4gIHByb3RlY3RlZCBxdWFudGl0eU5vdEFsbG93ZWQgPSAwO1xuICBwcm90ZWN0ZWQgc2l6ZU5vdEFsbG93ZWQgPSAwO1xuICBwcm90ZWN0ZWQgb25Nb2RlbFRvdWNoZWQ6IGFueSA9IG51bGw7XG5cbiAgcHJpdmF0ZSBfZGlyZWN0b3J5PzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZGlzYWJsZWQ/OiBib29sZWFuO1xuICBwcml2YXRlIF9kcmFnRHJvcD86IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZmlsZVJlc3RyaWN0aW9ucz86IFBvVXBsb2FkRmlsZVJlc3RyaWN0aW9ucztcbiAgcHJpdmF0ZSBfZm9ybUZpZWxkPzogc3RyaW5nO1xuICBwcml2YXRlIF9oaWRlUmVzdHJpY3Rpb25zSW5mbz86IGJvb2xlYW47XG4gIHByaXZhdGUgX2hpZGVTZWxlY3RCdXR0b24/OiBib29sZWFuO1xuICBwcml2YXRlIF9oaWRlU2VuZEJ1dHRvbj86IGJvb2xlYW47XG4gIHByaXZhdGUgX2lzTXVsdGlwbGU/OiBib29sZWFuO1xuICBwcml2YXRlIF9saXRlcmFscz86IGFueTtcbiAgcHJpdmF0ZSBfcmVxdWlyZWQ/OiBib29sZWFuO1xuICBwcml2YXRlIGxhbmd1YWdlOiBzdHJpbmc7XG4gIHByaXZhdGUgdmFsaWRhdG9yQ2hhbmdlOiBhbnk7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogUGVybWl0ZSBhIHNlbGXDp8OjbyBkZSBkaXJldMOzcmlvcyBjb250ZW5kbyB1bSBvdSBtYWlzIGFycXVpdm9zIHBhcmEgZW52aW8uXG4gICAqXG4gICAqID4gQSBoYWJpbGl0YcOnw6NvIGRlc3RhIHByb3ByaWVkYWRlIHNlIHJlc3RyaW5nZSBhcGVuYXMgw6Agc2VsZcOnw6NvIGRlIGRpcmV0w7NyaW9zLlxuICAgKlxuICAgKiA+IERlZmluacOnw6NvIG7Do28gc3Vwb3J0YWRhIHBlbG8gYnJvd3NlciAqKkludGVybmV0IEV4cGxvcmVyKiosIHRvZGF2aWEgc2Vyw6EgcG9zc8OtdmVsIGEgc2VsZcOnw6NvIGRlIGFycXVpdm9zIHBhZHLDo28uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1kaXJlY3RvcnknKSBzZXQgZGlyZWN0b3J5KHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZGlyZWN0b3J5ID0gY29udmVydFRvQm9vbGVhbih2YWx1ZSk7XG5cbiAgICB0aGlzLmNhbkhhbmRsZURpcmVjdG9yeSA9IHRoaXMuX2RpcmVjdG9yeSAmJiAhaXNJRSgpICYmICFpc01vYmlsZSgpO1xuICAgIHRoaXMuc2V0RGlyZWN0b3J5QXR0cmlidXRlKHRoaXMuY2FuSGFuZGxlRGlyZWN0b3J5KTtcbiAgfVxuXG4gIGdldCBkaXJlY3RvcnkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RpcmVjdG9yeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEV4aWJlIGEgw6FyZWEgb25kZSDDqSBwb3Nzw612ZWwgYXJyYXN0YXIgZSBzZWxlY2lvbmFyIG9zIGFycXVpdm9zLiBRdWFuZG8gZXN0aXZlciBkZWZpbmlkYSwgb21pdGUgbyBib3TDo28gcGFyYSBzZWxlw6fDo28gZGUgYXJxdWl2b3NcbiAgICogYXV0b21hdGljYW1lbnRlLlxuICAgKlxuICAgKiA+IFJlY29tZW5kYW1vcyB1dGlsaXphciBhcGVuYXMgdW0gYHBvLXVwbG9hZGAgY29tIGVzdGEgZnVuY2lvbmFsaWRhZGUgcG9yIHRlbGEuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1kcmFnLWRyb3AnKSBzZXQgZHJhZ0Ryb3AodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9kcmFnRHJvcCA9IGNvbnZlcnRUb0Jvb2xlYW4odmFsdWUpO1xuICB9XG5cbiAgZ2V0IGRyYWdEcm9wKCkge1xuICAgIHJldHVybiB0aGlzLl9kcmFnRHJvcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIE9jdWx0YSB2aXN1YWxtZW50ZSBhcyBpbmZvcm1hw6fDtWVzIGRlIHJlc3RyacOnw7VlcyBwYXJhIG8gdXBsb2FkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtaGlkZS1yZXN0cmljdGlvbnMtaW5mbycpIHNldCBoaWRlUmVzdHJpY3Rpb25zSW5mbyh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2hpZGVSZXN0cmljdGlvbnNJbmZvID0gY29udmVydFRvQm9vbGVhbih2YWx1ZSk7XG4gIH1cblxuICBnZXQgaGlkZVJlc3RyaWN0aW9uc0luZm8oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2hpZGVSZXN0cmljdGlvbnNJbmZvO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogT21pdGUgbyBib3TDo28gZGUgc2VsZcOnw6NvIGRlIGFycXVpdm9zLlxuICAgKlxuICAgKiA+IENhc28gbyB2YWxvciBkZWZpbmlkbyBzZWphIGB0cnVlYCwgY2FiZXLDoSBhbyBkZXNlbnZvbHZlZG9yIGEgcmVzcG9uc2FiaWxpZGFkZVxuICAgKiBwZWxhIGNoYW1hZGEgZG8gbcOpdG9kbyBgc2VsZWN0RmlsZXMoKWAgcGFyYSBzZWxlw6fDo28gZGUgYXJxdWl2b3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1oaWRlLXNlbGVjdC1idXR0b24nKSBzZXQgaGlkZVNlbGVjdEJ1dHRvbih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2hpZGVTZWxlY3RCdXR0b24gPSBjb252ZXJ0VG9Cb29sZWFuKHZhbHVlKTtcbiAgfVxuICBnZXQgaGlkZVNlbGVjdEJ1dHRvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faGlkZVNlbGVjdEJ1dHRvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIE9taXRlIG8gYm90w6NvIGRlIGVudmlvIGRlIGFycXVpdm9zLlxuICAgKlxuICAgKiA+IENhc28gbyB2YWxvciBkZWZpbmlkbyBzZWphIGB0cnVlYCwgY2FiZXLDoSBhbyBkZXNlbnZvbHZlZG9yIGEgcmVzcG9uc2FiaWxpZGFkZVxuICAgKiBwZWxhIGNoYW1hZGEgZG8gbcOpdG9kbyBgc2VuZEZpbGVzKClgIHBhcmEgZW52aW8gZG8ocykgYXJxdWl2byhzKSBzZWxlY2lvbmFkbyhzKS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLWhpZGUtc2VuZC1idXR0b24nKSBzZXQgaGlkZVNlbmRCdXR0b24odmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9oaWRlU2VuZEJ1dHRvbiA9IGNvbnZlcnRUb0Jvb2xlYW4odmFsdWUpO1xuICB9XG4gIGdldCBoaWRlU2VuZEJ1dHRvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faGlkZVNlbmRCdXR0b247XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBPYmpldG8gY29tIGFzIGxpdGVyYWlzIHVzYWRhcyBubyBgcG8tdXBsb2FkYC5cbiAgICpcbiAgICogRXhpc3RlbSBkdWFzIG1hbmVpcmFzIGRlIGN1c3RvbWl6YXIgbyBjb21wb25lbnRlOlxuICAgKlxuICAgKiAtIHBhc3NhbmRvIHVtIG9iamV0byBpbXBsZW1lbnRhbmRvIGEgaW50ZXJmYWNlIGBQb1VwbG9hZExpdGVyYWxzYCBjb20gdG9kYXMgYXMgbGl0ZXJhaXMgZGlzcG9uw612ZWlzO1xuICAgKiAtIHBhc3NhbmRvIGFwZW5hcyBhcyBsaXRlcmFpcyBxdWUgZGVzZWphIGN1c3RvbWl6YXI6XG4gICAqIGBgYFxuICAgKiAgY29uc3QgY3VzdG9tTGl0ZXJhbHM6IFBvVXBsb2FkTGl0ZXJhbHMgPSB7XG4gICAqICAgIGZvbGRlcnM6ICdQYXN0YXMnLFxuICAgKiAgICBzZWxlY3RGaWxlOiAnQnVzY2FyIGFycXVpdm8nLFxuICAgKiAgICBzdGFydFNlbmRpbmc6ICdFbnZpYXInXG4gICAqICB9O1xuICAgKiBgYGBcbiAgICpcbiAgICogRSBwYXJhIGNhcnJlZ2FyIGFzIGxpdGVyYWlzIGN1c3RvbWl6YWRhcywgYmFzdGEgYXBlbmFzIHBhc3NhciBvIG9iamV0byBwYXJhIG8gY29tcG9uZW50ZTpcbiAgICpcbiAgICogYGBgXG4gICAqIDxwby11cGxvYWRcbiAgICogICBbcC1saXRlcmFsc109XCJjdXN0b21MaXRlcmFsc1wiPlxuICAgKiA8L3BvLXVwbG9hZD5cbiAgICogYGBgXG4gICAqXG4gICAqID4gTyBvYmpldG8gcGFkcsOjbyBkZSBsaXRlcmFpcyBzZXLDoSB0cmFkdXppZG8gZGUgYWNvcmRvIGNvbSBvIGlkaW9tYSBkbyAqYnJvd3NlciogKHB0LCBlbiwgZXMsIHJ1KS5cbiAgICovXG4gIEBJbnB1dCgncC1saXRlcmFscycpIHNldCBsaXRlcmFscyh2YWx1ZTogUG9VcGxvYWRMaXRlcmFscykge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCAmJiAhKHZhbHVlIGluc3RhbmNlb2YgQXJyYXkpKSB7XG4gICAgICB0aGlzLl9saXRlcmFscyA9IHtcbiAgICAgICAgLi4ucG9VcGxvYWRMaXRlcmFsc0RlZmF1bHRbcG9Mb2NhbGVEZWZhdWx0XSxcbiAgICAgICAgLi4ucG9VcGxvYWRMaXRlcmFsc0RlZmF1bHRbdGhpcy5sYW5ndWFnZV0sXG4gICAgICAgIC4uLnZhbHVlXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9saXRlcmFscyA9IHBvVXBsb2FkTGl0ZXJhbHNEZWZhdWx0W3RoaXMubGFuZ3VhZ2VdO1xuICAgIH1cbiAgfVxuICBnZXQgbGl0ZXJhbHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xpdGVyYWxzIHx8IHBvVXBsb2FkTGl0ZXJhbHNEZWZhdWx0W3RoaXMubGFuZ3VhZ2VdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogT2JqZXRvIHF1ZSBzZWd1ZSBhIGRlZmluacOnw6NvIGRhIGludGVyZmFjZSBgUG9VcGxvYWRGaWxlUmVzdHJpY3Rpb25zYCxcbiAgICogcXVlIHBvc3NpYmlsaXRhIGRlZmluaXIgdGFtYW5obyBtw6F4aW1vL23DrW5pbW8gZSBleHRlbnPDo28gZG9zIGFycXVpdm9zIHBlcm1pdGlkb3MuXG4gICAqL1xuICBASW5wdXQoJ3AtcmVzdHJpY3Rpb25zJykgc2V0IGZpbGVSZXN0cmljdGlvbnMocmVzdHJpY3Rpb25zOiBQb1VwbG9hZEZpbGVSZXN0cmljdGlvbnMpIHtcbiAgICB0aGlzLl9maWxlUmVzdHJpY3Rpb25zID0gdGhpcy5pbml0UmVzdHJpY3Rpb25zKHJlc3RyaWN0aW9ucyk7XG5cbiAgICB0aGlzLnNldEFsbG93ZWRFeHRlbnNpb25zKHJlc3RyaWN0aW9ucyk7XG4gIH1cblxuICBnZXQgZmlsZVJlc3RyaWN0aW9ucygpOiBQb1VwbG9hZEZpbGVSZXN0cmljdGlvbnMge1xuICAgIHJldHVybiB0aGlzLl9maWxlUmVzdHJpY3Rpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogTm9tZSBkbyBjYW1wbyBkZSBmb3JtdWzDoXJpbyBxdWUgc2Vyw6EgZW52aWFkbyBwYXJhIG8gc2VydmnDp28gaW5mb3JtYWRvIG5hIHByb3ByaWVkYWRlIGBwLXVybGAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmaWxlc2BcbiAgICovXG4gIEBJbnB1dCgncC1mb3JtLWZpZWxkJykgc2V0IGZvcm1GaWVsZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fZm9ybUZpZWxkID0gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogcG9VcGxvYWRGb3JtRmllbGREZWZhdWx0O1xuXG4gICAgdGhpcy5nZXRVcGxvYWRTZXJ2aWNlKCkuZm9ybUZpZWxkID0gdGhpcy5mb3JtRmllbGQ7XG4gIH1cblxuICBnZXQgZm9ybUZpZWxkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1GaWVsZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEluZGljYSBxdWUgbyBjYW1wbyBzZXLDoSBkZXNhYmlsaXRhZG8uXG4gICAqL1xuICBASW5wdXQoJ3AtZGlzYWJsZWQnKSBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IGNvbnZlcnRUb0Jvb2xlYW4odmFsdWUpO1xuXG4gICAgdGhpcy52YWxpZGF0ZU1vZGVsKHRoaXMuY3VycmVudEZpbGVzKTtcbiAgfVxuXG4gIGdldCBkaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEZWZpbmUgc2UgcG9kZSBzZWxlY2lvbmFyIG1haXMgZGUgdW0gYXJxdWl2by5cbiAgICpcbiAgICogPiBTZSB1dGlsaXphZGEgYSBgcC1kaXJlY3RvcnlgLCBoYWJpbGl0YS1zZSBhdXRvbWF0aWNhbWVudGUgZXN0YSBwcm9wcmllZGFkZS5cbiAgICovXG4gIEBJbnB1dCgncC1tdWx0aXBsZScpIHNldCBpc011bHRpcGxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5faXNNdWx0aXBsZSA9IGNvbnZlcnRUb0Jvb2xlYW4odmFsdWUpO1xuICB9XG5cbiAgZ2V0IGlzTXVsdGlwbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2FuSGFuZGxlRGlyZWN0b3J5ID8gdHJ1ZSA6IHRoaXMuX2lzTXVsdGlwbGU7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEZWZpbmUgcXVlIG8gY2FtcG8gc2Vyw6Egb2JyaWdhdMOzcmlvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtcmVxdWlyZWQnKSBzZXQgcmVxdWlyZWQocmVxdWlyZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9yZXF1aXJlZCA9IGNvbnZlcnRUb0Jvb2xlYW4ocmVxdWlyZWQpO1xuXG4gICAgdGhpcy52YWxpZGF0ZU1vZGVsKHRoaXMuY3VycmVudEZpbGVzKTtcbiAgfVxuXG4gIGdldCByZXF1aXJlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQ7XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lIHNlIGEgaW5kaWNhw6fDo28gZGUgY2FtcG8gb2JyaWdhdMOzcmlvIHNlcsOhIGV4aWJpZGEuXG4gICAqXG4gICAqID4gTsOjbyBzZXLDoSBleGliaWRhIGEgaW5kaWNhw6fDo28gc2U6XG4gICAqIC0gTsOjbyBwb3NzdWlyIGBwLWhlbHBgIGUvb3UgYHAtbGFiZWxgLlxuICAgKi9cbiAgQElucHV0KCdwLXNob3ctcmVxdWlyZWQnKSBzaG93UmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgdXBsb2FkU2VydmljZTogUG9VcGxvYWRTZXJ2aWNlLFxuICAgIGxhbmd1YWdlU2VydmljZTogUG9MYW5ndWFnZVNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5sYW5ndWFnZSA9IGxhbmd1YWdlU2VydmljZS5nZXRTaG9ydExhbmd1YWdlKCk7XG4gIH1cblxuICAvLyBGdW7Dp8OjbyBpbXBsZW1lbnRhZGEgZG8gQ29udHJvbFZhbHVlQWNjZXNzb3JcbiAgLy8gVXNhZGEgcGFyYSBpbnRlcmNlcHRhciBvcyBlc3RhZG9zIGRlIGhhYmlsaXRhZG8gdmlhIGZvcm1zIGFwaVxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Nb2RlbENoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Nb2RlbFRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoZm46ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLnZhbGlkYXRvckNoYW5nZSA9IGZuO1xuICB9XG5cbiAgdmFsaWRhdGUoYWJzdHJhY3RDb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcbiAgICBpZiAocmVxdWlyZWRGYWlsZWQodGhpcy5yZXF1aXJlZCwgdGhpcy5kaXNhYmxlZCwgYWJzdHJhY3RDb250cm9sLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVxdWlyZWQ6IHtcbiAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICB3cml0ZVZhbHVlKG1vZGVsOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAobW9kZWwpIHtcbiAgICAgIGlmICghaXNFcXVhbHModGhpcy5jdXJyZW50RmlsZXMsIG1vZGVsKSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRGaWxlcyA9IHRoaXMucGFyc2VGaWxlcyhtb2RlbCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3VycmVudEZpbGVzID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBpc0V4Y2VlZGVkRmlsZUxpbWl0KGN1cnJlbnRGaWxlc0xlbmd0aDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuaXNNdWx0aXBsZSAmJlxuICAgICAgdGhpcy5maWxlUmVzdHJpY3Rpb25zICYmXG4gICAgICB0aGlzLmZpbGVSZXN0cmljdGlvbnMubWF4RmlsZXMgPiAwICYmXG4gICAgICB0aGlzLmZpbGVSZXN0cmljdGlvbnMubWF4RmlsZXMgPD0gY3VycmVudEZpbGVzTGVuZ3RoXG4gICAgKTtcbiAgfVxuXG4gIC8vIEZheiBvIHBhcnNlIGRvcyBhcnF1aXZvcyBzZWxlY2lvbmFkb3MgcGFyYSBhcnF1aXZvcyBkbyBmb3JtYXRvIFBvVXBsb2FkRmlsZSBlIGF0dWFsaXphIG9zIGFycXVpdm9zIGNvcnJlbnRlcy5cbiAgcHJvdGVjdGVkIHBhcnNlRmlsZXMoZmlsZXM6IEFycmF5PEZpbGU+KTogQXJyYXk8UG9VcGxvYWRGaWxlPiB7XG4gICAgbGV0IHBvVXBsb2FkRmlsZXM6IEFycmF5PFBvVXBsb2FkRmlsZT4gPSB0aGlzLmN1cnJlbnRGaWxlcyB8fCBbXTtcbiAgICBjb25zdCBmaWxlc0xlbmd0aCA9IGZpbGVzLmxlbmd0aDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsZXNMZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMuaXNFeGNlZWRlZEZpbGVMaW1pdChwb1VwbG9hZEZpbGVzLmxlbmd0aCkpIHtcbiAgICAgICAgdGhpcy5xdWFudGl0eU5vdEFsbG93ZWQgPSBmaWxlc0xlbmd0aCAtIHRoaXMuZmlsZVJlc3RyaWN0aW9ucy5tYXhGaWxlcztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjb25zdCBmaWxlID0gbmV3IFBvVXBsb2FkRmlsZShmaWxlc1tpXSk7XG5cbiAgICAgIGlmICh0aGlzLmNoZWNrUmVzdHJpY3Rpb25zKGZpbGUpKSB7XG4gICAgICAgIHBvVXBsb2FkRmlsZXMgPSB0aGlzLmluc2VydEZpbGVJbkZpbGVzKGZpbGUsIHBvVXBsb2FkRmlsZXMpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNlbmRGZWVkYmFjaygpO1xuICAgIHJldHVybiBwb1VwbG9hZEZpbGVzO1xuICB9XG5cbiAgcHJvdGVjdGVkIHZhbGlkYXRlTW9kZWwobW9kZWw6IGFueSkge1xuICAgIGlmICh0aGlzLnZhbGlkYXRvckNoYW5nZSkge1xuICAgICAgdGhpcy52YWxpZGF0b3JDaGFuZ2UobW9kZWwpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFZlcmlmaWNhIHNlIG8gYXJxdWl2byBlc3TDoSBkZSBhY29yZG8gY29tIGFzIHJlc3RyacOnw7Vlcy5cbiAgcHJpdmF0ZSBjaGVja1Jlc3RyaWN0aW9ucyhmaWxlOiBQb1VwbG9hZEZpbGUpOiBib29sZWFuIHtcbiAgICBjb25zdCByZXN0cmljdGlvbnMgPSB0aGlzLmZpbGVSZXN0cmljdGlvbnM7XG5cbiAgICBpZiAocmVzdHJpY3Rpb25zKSB7XG4gICAgICBjb25zdCBhbGxvd2VkRXh0ZW5zaW9ucyA9IHJlc3RyaWN0aW9ucy5hbGxvd2VkRXh0ZW5zaW9ucztcbiAgICAgIGNvbnN0IG1pbkZpbGVTaXplID0gcmVzdHJpY3Rpb25zLm1pbkZpbGVTaXplO1xuICAgICAgY29uc3QgbWF4RmlsZVNpemUgPSByZXN0cmljdGlvbnMubWF4RmlsZVNpemU7XG5cbiAgICAgIGNvbnN0IGlzQWNjZXB0ID0gYWxsb3dlZEV4dGVuc2lvbnMgPyB0aGlzLmlzQWxsb3dlZEV4dGVuc2lvbihmaWxlLmV4dGVuc2lvbiwgYWxsb3dlZEV4dGVuc2lvbnMpIDogdHJ1ZTtcbiAgICAgIGNvbnN0IGlzQWNjZXB0U2l6ZSA9IGZpbGUuc2l6ZSA+PSBtaW5GaWxlU2l6ZSAmJiBmaWxlLnNpemUgPD0gbWF4RmlsZVNpemU7XG5cbiAgICAgIGlmICghaXNBY2NlcHRTaXplKSB7XG4gICAgICAgIHRoaXMuc2l6ZU5vdEFsbG93ZWQgPSB0aGlzLnNpemVOb3RBbGxvd2VkICsgMTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGlzQWNjZXB0ICYmIGlzQWNjZXB0U2l6ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZXhpc3RzRmlsZVNhbWVOYW1lKGZpbGU6IFBvVXBsb2FkRmlsZSwgZmlsZXM6IEFycmF5PFBvVXBsb2FkRmlsZT4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmlsZXMuc29tZShjdXJyZW50RmlsZSA9PiBmaWxlLm5hbWUgPT09IGN1cnJlbnRGaWxlLm5hbWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRVcGxvYWRTZXJ2aWNlKCk6IFBvVXBsb2FkU2VydmljZSB7XG4gICAgcmV0dXJuIHRoaXMudXBsb2FkU2VydmljZTtcbiAgfVxuXG4gIHByaXZhdGUgaW5zZXJ0RmlsZUluRmlsZXMobmV3RmlsZTogUG9VcGxvYWRGaWxlLCBmaWxlczogQXJyYXk8UG9VcGxvYWRGaWxlPikge1xuICAgIGlmICh0aGlzLmV4aXN0c0ZpbGVTYW1lTmFtZShuZXdGaWxlLCBmaWxlcykpIHtcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUV4aXN0c0ZpbGVJbkZpbGVzKG5ld0ZpbGUsIGZpbGVzKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc011bHRpcGxlKSB7XG4gICAgICBmaWxlcy5wdXNoKG5ld0ZpbGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmaWxlcy5zcGxpY2UoMCwgZmlsZXMubGVuZ3RoLCBuZXdGaWxlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsZXM7XG4gIH1cblxuICBwcml2YXRlIGlzQWxsb3dlZEV4dGVuc2lvbihleHRlbnNpb246IHN0cmluZywgYWxsb3dlZEV4dGVuc2lvbnM6IEFycmF5PHN0cmluZz4gPSBbXSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGlzQWxsb3dlZCA9IGFsbG93ZWRFeHRlbnNpb25zLnNvbWUoZXh0ID0+IGV4dC50b0xvd2VyQ2FzZSgpID09PSBleHRlbnNpb24pO1xuICAgIGlmICghaXNBbGxvd2VkKSB7XG4gICAgICB0aGlzLmV4dGVuc2lvbk5vdEFsbG93ZWQgPSB0aGlzLmV4dGVuc2lvbk5vdEFsbG93ZWQgKyAxO1xuICAgIH1cbiAgICByZXR1cm4gaXNBbGxvd2VkO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRBbGxvd2VkRXh0ZW5zaW9ucyhyZXN0cmljdGlvbnM6IFBvVXBsb2FkRmlsZVJlc3RyaWN0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgX2FsbG93ZWRFeHRlbnNpb25zID0gcmVzdHJpY3Rpb25zLmFsbG93ZWRFeHRlbnNpb25zIHx8IFtdO1xuXG4gICAgdGhpcy5hbGxvd2VkRXh0ZW5zaW9ucyA9IF9hbGxvd2VkRXh0ZW5zaW9ucy5qb2luKCcsJyk7XG4gIH1cblxuICBwcml2YXRlIGluaXRSZXN0cmljdGlvbnMocmVzdHJpY3Rpb25zOiBQb1VwbG9hZEZpbGVSZXN0cmljdGlvbnMpOiBQb1VwbG9hZEZpbGVSZXN0cmljdGlvbnMge1xuICAgIGlmICghcmVzdHJpY3Rpb25zKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbWluRmlsZVNpemUgPSByZXN0cmljdGlvbnMubWluRmlsZVNpemUgfHwgcG9VcGxvYWRNaW5GaWxlU2l6ZTtcbiAgICBjb25zdCBtYXhGaWxlU2l6ZSA9IHJlc3RyaWN0aW9ucy5tYXhGaWxlU2l6ZSB8fCBwb1VwbG9hZE1heEZpbGVTaXplO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnJlc3RyaWN0aW9ucyxcbiAgICAgIG1heEZpbGVTaXplOiBtYXhGaWxlU2l6ZSxcbiAgICAgIG1pbkZpbGVTaXplOiBtaW5GaWxlU2l6ZVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUV4aXN0c0ZpbGVJbkZpbGVzKG5ld0ZpbGU6IFBvVXBsb2FkRmlsZSwgZmlsZXM6IEFycmF5PFBvVXBsb2FkRmlsZT4pIHtcbiAgICBjb25zdCBmaWxlSW5kZXggPSBmaWxlcy5maW5kSW5kZXgoXG4gICAgICBjdXJyZW50RmlsZSA9PiBuZXdGaWxlLm5hbWUgPT09IGN1cnJlbnRGaWxlLm5hbWUgJiYgY3VycmVudEZpbGUuc3RhdHVzICE9PSBQb1VwbG9hZFN0YXR1cy5VcGxvYWRlZFxuICAgICk7XG5cbiAgICBpZiAoZmlsZUluZGV4ICE9PSAtMSkge1xuICAgICAgZmlsZXMuc3BsaWNlKGZpbGVJbmRleCwgMSwgbmV3RmlsZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbGVzO1xuICB9XG5cbiAgYWJzdHJhY3Qgc2VuZEZlZWRiYWNrKCk6IHZvaWQ7XG5cbiAgYWJzdHJhY3Qgc2V0RGlyZWN0b3J5QXR0cmlidXRlKHZhbHVlOiBib29sZWFuKTtcbn1cbiJdfQ==
|