@snabcentr/client-ui 4.20.1 → 4.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/alerts/confirm-alert/sc-confirm-alert.component.d.ts +22 -0
- package/alerts/index.d.ts +1 -0
- package/cart/add-or-editing-cart-item-dialog/sc-add-or-editing-cart-item-dialog.component.d.ts +1 -1
- package/cart/sc-cart-add-products-from-csv-dialog/sc-cart-add-products-from-csv-dialog.component.d.ts +3 -3
- package/catalog/input-quantity/sc-input-quantity.component.d.ts +17 -1
- package/contragents/sc-contragents.module.d.ts +1 -1
- package/delivery-address/add-delivery-address-dialog/sc-add-delivery-address-dialog.component.d.ts +5 -0
- package/delivery-address/sc-delivery-address.module.d.ts +1 -1
- package/directives/address-quality/sc-address-quality.directive.d.ts +5 -0
- package/directives/address-quality/sc-address-quality.service.d.ts +9 -1
- package/esm2022/alerts/confirm-alert/sc-confirm-alert.component.mjs +29 -0
- package/esm2022/alerts/index.mjs +2 -0
- package/esm2022/auth/sc-simple-sign-up-form/sc-simple-sign-up-form.component.mjs +1 -1
- package/esm2022/auth/sign-up-form/sc-sign-up-form.component.mjs +1 -1
- package/esm2022/cart/add-or-editing-cart-item-dialog/sc-add-or-editing-cart-item-dialog.component.mjs +4 -3
- package/esm2022/cart/sc-cart-add-products-from-csv-dialog/sc-cart-add-products-from-csv-dialog.component.mjs +5 -16
- package/esm2022/catalog/input-quantity/sc-input-quantity.component.mjs +24 -4
- package/esm2022/catalog/notify-when-in-stock-dialog/sc-notify-when-in-stock-dialog.component.mjs +2 -2
- package/esm2022/catalog/price-warehouse-stock/sc-price-warehouse-stock.component.mjs +3 -3
- package/esm2022/contacts/new-contact-form/sc-new-contact-form.component.mjs +1 -1
- package/esm2022/contragents/new-contragent-bank-account-form/sc-new-contragent-bank-account-form.component.mjs +1 -1
- package/esm2022/contragents/new-contragent-form/sc-new-contragent-form.component.mjs +3 -3
- package/esm2022/contragents/sc-contragents.module.mjs +5 -2
- package/esm2022/delivery-address/add-delivery-address-dialog/sc-add-delivery-address-dialog.component.mjs +10 -3
- package/esm2022/delivery-address/sc-delivery-address.module.mjs +5 -2
- package/esm2022/directives/address-quality/sc-address-quality.directive.mjs +8 -1
- package/esm2022/directives/address-quality/sc-address-quality.service.mjs +14 -6
- package/esm2022/feedback/feedback-form/sc-feedback-form.component.mjs +21 -11
- package/esm2022/form-fields/suggestion-field/sc-suggestion-field.component.mjs +6 -31
- package/esm2022/helpers/sc-api-error-helper.mjs +25 -0
- package/esm2022/helpers/sc-file-helper.mjs +29 -0
- package/esm2022/order/draft/helpers/sc-draft-list-helper.mjs +83 -0
- package/esm2022/order/draft/models/sc-i-draft-list-item.mjs +2 -0
- package/esm2022/order/draft/profstroy/actualization-panel/sc-profstroy-actualization-panel.component.mjs +73 -0
- package/esm2022/order/draft/profstroy/badge/sc-profstroy-badge.component.mjs +21 -0
- package/esm2022/order/draft/profstroy/badges/sc-profstroy-draft-badges.component.mjs +31 -0
- package/esm2022/order/draft/profstroy/create-dialog/sc-profstroy-draft-create-dialog.component.mjs +139 -0
- package/esm2022/order/draft/profstroy/enums/sc-profstroy-draft-state.mjs +32 -0
- package/esm2022/order/draft/profstroy/helpers/sc-profstroy-draft-helper.mjs +94 -0
- package/esm2022/order/draft/profstroy/index.mjs +8 -0
- package/esm2022/order/draft/profstroy/models/sc-i-profstroy-draft-state-view.mjs +2 -0
- package/esm2022/order/draft/sc-draft.component.mjs +148 -14
- package/esm2022/order/draft/services/sc-draft-expiration-clock.service.mjs +42 -0
- package/esm2022/order/draft/services/sc-draft-list-updates.service.mjs +288 -0
- package/esm2022/order/index.mjs +6 -1
- package/esm2022/order/new-order-items/sc-new-order-items.component.mjs +11 -3
- package/esm2022/order/order-form/sc-order-form.component.mjs +4 -2
- package/esm2022/order/order-item/sc-order-item.component.mjs +37 -5
- package/esm2022/order/order-items-list/sc-order-items-list.component.mjs +282 -44
- package/esm2022/order/order-items-list-by-stock/sc-order-items-list-by-stock.component.mjs +1 -1
- package/esm2022/order/order-items-list-with-actions/sc-order-items-list-with-actions.component.mjs +15 -3
- package/esm2022/pipes/sc-format-date.mjs +1 -1
- package/esm2022/providers/cleanup-recaptcha-artifacts.mjs +30 -0
- package/esm2022/providers/index.mjs +2 -1
- package/esm2022/providers/sc-block-incomplete-address.mjs +3 -3
- package/esm2022/providers/sc-date-formatter.mjs +1 -1
- package/esm2022/public-api.mjs +2 -2
- package/esm2022/samples/sc-sample.module.mjs +10 -3
- package/esm2022/services/index.mjs +1 -2
- package/esm2022/user/update-user-info-dialog/sc-update-user-info-dialog.component.mjs +3 -3
- package/feedback/feedback-form/sc-feedback-form.component.d.ts +1 -1
- package/fesm2022/snabcentr-client-ui.mjs +1483 -527
- package/fesm2022/snabcentr-client-ui.mjs.map +1 -1
- package/form-fields/suggestion-field/sc-suggestion-field.component.d.ts +3 -14
- package/helpers/sc-api-error-helper.d.ts +18 -0
- package/helpers/sc-file-helper.d.ts +13 -0
- package/order/draft/helpers/sc-draft-list-helper.d.ts +51 -0
- package/order/draft/models/sc-i-draft-list-item.d.ts +14 -0
- package/order/draft/profstroy/actualization-panel/sc-profstroy-actualization-panel.component.d.ts +58 -0
- package/order/draft/profstroy/badge/sc-profstroy-badge.component.d.ts +12 -0
- package/order/draft/profstroy/badges/sc-profstroy-draft-badges.component.d.ts +21 -0
- package/order/draft/profstroy/create-dialog/sc-profstroy-draft-create-dialog.component.d.ts +65 -0
- package/order/draft/profstroy/enums/sc-profstroy-draft-state.d.ts +29 -0
- package/order/draft/profstroy/helpers/sc-profstroy-draft-helper.d.ts +33 -0
- package/order/draft/profstroy/index.d.ts +7 -0
- package/order/draft/profstroy/models/sc-i-profstroy-draft-state-view.d.ts +17 -0
- package/order/draft/sc-draft.component.d.ts +73 -1
- package/order/draft/services/sc-draft-expiration-clock.service.d.ts +29 -0
- package/order/draft/services/sc-draft-list-updates.service.d.ts +158 -0
- package/order/index.d.ts +5 -0
- package/order/new-order-items/sc-new-order-items.component.d.ts +9 -1
- package/order/order-form/sc-order-form.component.d.ts +1 -0
- package/order/order-item/sc-order-item.component.d.ts +25 -1
- package/order/order-items-list/sc-order-items-list.component.d.ts +140 -7
- package/order/order-items-list-with-actions/sc-order-items-list-with-actions.component.d.ts +13 -1
- package/package.json +3 -2
- package/pipes/sc-format-date.d.ts +1 -1
- package/providers/cleanup-recaptcha-artifacts.d.ts +7 -0
- package/providers/index.d.ts +1 -0
- package/providers/sc-block-incomplete-address.d.ts +1 -1
- package/providers/sc-date-formatter.d.ts +1 -1
- package/public-api.d.ts +1 -1
- package/release_notes.tmp +8 -3
- package/samples/sc-sample.module.d.ts +2 -1
- package/services/index.d.ts +0 -1
- package/styles/taiga/variables.less +16 -1
- package/styles/tailwind/tailwind.scss +43 -40
- package/esm2022/services/sc-scripts.service.mjs +0 -106
- package/esm2022/smart-captcha/index.mjs +0 -5
- package/esm2022/smart-captcha/interfaces/index.mjs +0 -6
- package/esm2022/smart-captcha/interfaces/sc-smart-captcha-api.mjs +0 -2
- package/esm2022/smart-captcha/interfaces/sc-smart-captcha-event.mjs +0 -2
- package/esm2022/smart-captcha/interfaces/sc-smart-captcha-language.mjs +0 -2
- package/esm2022/smart-captcha/interfaces/sc-smart-captcha-render-params.mjs +0 -2
- package/esm2022/smart-captcha/interfaces/sc-smart-captcha-settings.mjs +0 -2
- package/esm2022/smart-captcha/interfaces/sc-smart-captcha-window.mjs +0 -2
- package/esm2022/smart-captcha/sc-smart-captcha.component.mjs +0 -167
- package/esm2022/smart-captcha/services/index.mjs +0 -2
- package/esm2022/smart-captcha/services/sc-smart-captcha-loader.service.mjs +0 -87
- package/esm2022/smart-captcha/tokens/index.mjs +0 -3
- package/esm2022/smart-captcha/tokens/sc-smart-captcha-load-timeout.token.mjs +0 -8
- package/esm2022/smart-captcha/tokens/sc-smart-captcha-settings.token.mjs +0 -6
- package/services/sc-scripts.service.d.ts +0 -51
- package/smart-captcha/index.d.ts +0 -4
- package/smart-captcha/interfaces/index.d.ts +0 -5
- package/smart-captcha/interfaces/sc-smart-captcha-api.d.ts +0 -36
- package/smart-captcha/interfaces/sc-smart-captcha-event.d.ts +0 -4
- package/smart-captcha/interfaces/sc-smart-captcha-language.d.ts +0 -4
- package/smart-captcha/interfaces/sc-smart-captcha-render-params.d.ts +0 -16
- package/smart-captcha/interfaces/sc-smart-captcha-settings.d.ts +0 -16
- package/smart-captcha/interfaces/sc-smart-captcha-window.d.ts +0 -14
- package/smart-captcha/sc-smart-captcha.component.d.ts +0 -92
- package/smart-captcha/services/index.d.ts +0 -1
- package/smart-captcha/services/sc-smart-captcha-loader.service.d.ts +0 -50
- package/smart-captcha/tokens/index.d.ts +0 -2
- package/smart-captcha/tokens/sc-smart-captcha-load-timeout.token.d.ts +0 -5
- package/smart-captcha/tokens/sc-smart-captcha-settings.token.d.ts +0 -6
|
@@ -281,8 +281,10 @@ export class ScOrderFormComponent {
|
|
|
281
281
|
}
|
|
282
282
|
/**
|
|
283
283
|
* Обрабатывает отправку формы: валидирует и эмитит данные заказа родителю.
|
|
284
|
+
* Общая ошибка сервера с прошлой отправки (например, 409) не мешает отправить форму снова, ошибки полей остаются до их исправления.
|
|
284
285
|
*/
|
|
285
286
|
submit() {
|
|
287
|
+
this.form.updateValueAndValidity({ emitEvent: false });
|
|
286
288
|
this.form.markAllAsTouched();
|
|
287
289
|
if (!this.form.valid) {
|
|
288
290
|
return;
|
|
@@ -300,7 +302,7 @@ export class ScOrderFormComponent {
|
|
|
300
302
|
* @param error Ответ сервера с ошибками.
|
|
301
303
|
*/
|
|
302
304
|
applyServerErrors(error) {
|
|
303
|
-
const { errors, message } = error.error;
|
|
305
|
+
const { errors, message } = (error.error ?? {});
|
|
304
306
|
if (errors) {
|
|
305
307
|
Object.keys(errors).forEach((key) => {
|
|
306
308
|
if (key === 'deliveryDate' && isArray(errors[key])) {
|
|
@@ -551,4 +553,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
551
553
|
ScFocusFirstInvalidFieldDirective,
|
|
552
554
|
], providers: [TERMINAL_PROVIDERS], template: "@let user = user$ | async;\n\n<form\n [formGroup]=\"form\"\n scFocusFirstInvalidField\n [fieldOrder]=\"['contragentId', 'paymentType', 'deliveryType', 'warehouseId', 'addressId', 'deliveryDate', 'comment']\"\n (ngSubmit)=\"submit()\"\n class=\"flex flex-col gap-4\"\n>\n <ng-template #selectLoading> <tui-loader /> </ng-template>\n\n <!-- \u041A\u043E\u043D\u0442\u0440\u0430\u0433\u0435\u043D\u0442. -->\n @if (contragents$ | async; as contragents) {\n @if (contragents.length > 1 || user?.isOrg) {\n <div>\n <label tuiLabel>\n \u041A\u043E\u043D\u0442\u0440\u0430\u0433\u0435\u043D\u0442\n <tui-select\n formControlName=\"contragentId\"\n [valueContent]=\"contragents ? stringify(contragents) : selectLoading\"\n >\n \u041A\u043E\u043D\u0442\u0440\u0430\u0433\u0435\u043D\u0442\n <tui-data-list *tuiDataList>\n @for (contragent of contragents; track contragent.id) {\n <button\n tuiOption\n [value]=\"contragent.id\"\n >\n {{ contragent.name }}\n </button>\n }\n </tui-data-list>\n </tui-select>\n <tui-error\n formControlName=\"contragentId\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n <a\n tuiLink\n iconStart=\"@tui.plus\"\n (click)=\"addContragent()\"\n class=\"mt-2 block\"\n >\n \u041D\u043E\u0432\u044B\u0439\n </a>\n </div>\n }\n }\n\n <!-- \u0422\u0438\u043F \u043E\u043F\u043B\u0430\u0442\u044B. -->\n <label tuiLabel>\n \u0422\u0438\u043F \u043E\u043F\u043B\u0430\u0442\u044B\n @let paymentTypes = paymentTypes$ | async;\n <tui-select\n formControlName=\"paymentType\"\n [valueContent]=\"paymentTypes ? stringify(paymentTypes) : selectLoading\"\n >\n \u0422\u0438\u043F \u043E\u043F\u043B\u0430\u0442\u044B\n <tui-data-list *tuiDataList>\n @for (type of paymentTypes; track type.id) {\n <button\n tuiOption\n [value]=\"type.id\"\n >\n {{ type.name }}\n </button>\n }\n </tui-data-list>\n </tui-select>\n <tui-error\n formControlName=\"paymentType\"\n [error]=\"[] | tuiFieldError | async\"\n />\n @if (isCashPaymentSelected()) {\n <p class=\"text-xs text-tui-status-positive\">\u0417\u0430\u043A\u0430\u0437\u044B \u043F\u0440\u043E\u0438\u0437\u0432\u043E\u0434\u044F\u0442\u0441\u044F \u043F\u043E \u043F\u0440\u0435\u0434\u043E\u043F\u043B\u0430\u0442\u0435</p>\n }\n </label>\n\n <!-- \u041F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u0435 \u043E \u043D\u0435\u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0451\u043D\u043D\u044B\u0445 \u043A\u043E\u043D\u0442\u0430\u043A\u0442\u043D\u044B\u0445 \u0434\u0430\u043D\u043D\u044B\u0445. -->\n @if (!isPhoneApproved() || !isEmailApproved()) {\n <div\n #unconfirmedDataWarning\n class=\"text-tui-text-negative\"\n [class.warning-shake]=\"warningShake()\"\n >\n \u0412\u043D\u0438\u043C\u0430\u043D\u0438\u0435! \u0414\u043B\u044F \u043E\u0444\u043E\u0440\u043C\u043B\u0435\u043D\u0438\u044F \u0437\u0430\u043A\u0430\u0437\u0430 \u043D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u043E \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044C\n @if (!isPhoneApproved()) {\n <span class=\"font-bold\"> \u043D\u043E\u043C\u0435\u0440 \u0442\u0435\u043B\u0435\u0444\u043E\u043D\u0430 </span>\n }\n @if (!isPhoneApproved() && !isEmailApproved()) {\n <span> \u0438 </span>\n }\n @if (!isEmailApproved()) {\n <span class=\"font-bold\"> \u0430\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B </span>\n }\n <a\n tuiLink\n routerLink=\"/profile\"\n >\n \u0432 \u0432\u0430\u0448\u0435\u043C \u043F\u0440\u043E\u0444\u0438\u043B\u0435\n </a>\n </div>\n }\n\n <!-- \u0421\u043F\u043E\u0441\u043E\u0431 \u0434\u043E\u0441\u0442\u0430\u0432\u043A\u0438. -->\n <label tuiLabel>\n \u0421\u043F\u043E\u0441\u043E\u0431 \u0434\u043E\u0441\u0442\u0430\u0432\u043A\u0438\n @let deliveryTypes = deliveryTypes$ | async;\n <tui-select\n formControlName=\"deliveryType\"\n [valueContent]=\"deliveryTypes ? stringify(deliveryTypes) : selectLoading\"\n >\n \u0421\u043F\u043E\u0441\u043E\u0431 \u0434\u043E\u0441\u0442\u0430\u0432\u043A\u0438\n <tui-data-list *tuiDataList>\n @for (delivery of deliveryTypes; track delivery.id) {\n <button\n tuiOption\n [value]=\"delivery.id\"\n >\n {{ delivery.name }}\n </button>\n }\n </tui-data-list>\n </tui-select>\n <tui-error\n formControlName=\"deliveryType\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- \u0421\u043A\u043B\u0430\u0434. -->\n <label tuiLabel>\n \u0421\u043A\u043B\u0430\u0434\n @let warehouses = warehouses$ | async;\n <tui-select\n formControlName=\"warehouseId\"\n [valueContent]=\"warehouses ? stringify(warehouses) : selectLoading\"\n >\n \u0421\u043A\u043B\u0430\u0434\n <tui-data-list *tuiDataList>\n @if (!terminal.isRunningOnTerminal) {\n @for (warehouse of warehouses; track warehouse.id) {\n <button\n tuiOption\n [value]=\"warehouse.id\"\n >\n {{ warehouse.name }}\n </button>\n }\n } @else {\n @if (warehouseService.getCatalogWarehouseChange$() | async; as terminalWarehouse) {\n <button\n tuiOption\n [value]=\"terminalWarehouse.id\"\n >\n {{ terminalWarehouse.name }}\n </button>\n }\n }\n </tui-data-list>\n </tui-select>\n <tui-error\n formControlName=\"warehouseId\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- \u0410\u0434\u0440\u0435\u0441 \u0434\u043E\u0441\u0442\u0430\u0432\u043A\u0438. -->\n @if (isDelivery()) {\n @let addresses = addresses$ | async;\n <div>\n <label tuiLabel>\n \u0410\u0434\u0440\u0435\u0441 \u0434\u043E\u0441\u0442\u0430\u0432\u043A\u0438\n <tui-select\n formControlName=\"addressId\"\n [valueContent]=\"addresses ? stringify(addresses) : selectLoading\"\n >\n \u0410\u0434\u0440\u0435\u0441 \u0434\u043E\u0441\u0442\u0430\u0432\u043A\u0438\n <tui-data-list *tuiDataList>\n @for (address of addresses; track address.id) {\n <button\n tuiOption\n [value]=\"address.id\"\n >\n {{ address.address }}\n </button>\n }\n </tui-data-list>\n </tui-select>\n @if (addresses && addresses.length === 0) {\n <tui-error error=\"\u0423 \u043A\u043E\u043D\u0442\u0440\u0430\u0433\u0435\u043D\u0442\u0430 \u043D\u0435\u0442 \u0430\u0434\u0440\u0435\u0441\u0430 \u0434\u043E\u0441\u0442\u0430\u0432\u043A\u0438\" />\n }\n <tui-error\n formControlName=\"addressId\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n <a\n tuiLink\n iconStart=\"@tui.plus\"\n (click)=\"addDeliveryAddress()\"\n class=\"mt-2 block\"\n >\n \u041D\u043E\u0432\u044B\u0439\n </a>\n </div>\n }\n\n <!-- \u0414\u0430\u0442\u0430 \u0434\u043E\u0441\u0442\u0430\u0432\u043A\u0438/\u0441\u0430\u043C\u043E\u0432\u044B\u0432\u043E\u0437\u0430. -->\n <label tuiLabel>\n \u0416\u0435\u043B\u0430\u0435\u043C\u0430\u044F \u0434\u0430\u0442\u0430 {{ isDelivery() ? '\u0434\u043E\u0441\u0442\u0430\u0432\u043A\u0438' : '\u0441\u0430\u043C\u043E\u0432\u044B\u0432\u043E\u0437\u0430' }}\n <tui-input-date\n formControlName=\"deliveryDate\"\n [disabledItemHandler]=\"deliveryDateFilter\"\n [markerHandler]=\"deliveryDateMarker\"\n [max]=\"maxDeliveryDay()\"\n [min]=\"minDeliveryDay()\"\n >\n \u0416\u0435\u043B\u0430\u0435\u043C\u0430\u044F \u0434\u0430\u0442\u0430 {{ isDelivery() ? '\u0434\u043E\u0441\u0442\u0430\u0432\u043A\u0438' : '\u0441\u0430\u043C\u043E\u0432\u044B\u0432\u043E\u0437\u0430' }}\n </tui-input-date>\n <tui-error\n formControlName=\"deliveryDate\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- \u041A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439 \u043A\u043B\u0438\u0435\u043D\u0442\u0430. -->\n <label tuiLabel>\n \u041A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439 \u043A\u043B\u0438\u0435\u043D\u0442\u0430 \u043A \u0437\u0430\u043A\u0430\u0437\u0443\n <tui-textarea\n formControlName=\"comment\"\n [expandable]=\"true\"\n [rows]=\"15\"\n >\n \u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0442\u0435\u043A\u0441\u0442\n </tui-textarea>\n <tui-error\n formControlName=\"comment\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- \u041F\u0440\u0438\u043A\u0440\u0435\u043F\u043B\u0435\u043D\u0438\u0435 \u0444\u0430\u0439\u043B\u0430 \u043A \u0437\u0430\u043A\u0430\u0437\u0443. -->\n <div>\n @if (!controlFile.value) {\n <label tuiInputFiles>\n <input\n accept=\"image/*\"\n tuiInputFiles\n [formControl]=\"controlFile\"\n />\n </label>\n }\n\n <tui-files class=\"tui-space_top-1\">\n @if (controlFile.value | tuiFileRejected: { accept: 'image/*' } | async; as file) {\n <tui-file\n state=\"error\"\n [file]=\"file\"\n (remove)=\"removeFile()\"\n />\n }\n\n @for (file of accepted$ | async; track file.name) {\n <tui-file\n [file]=\"file\"\n (remove)=\"removeFile()\"\n />\n }\n </tui-files>\n\n <tui-error\n [error]=\"['maxLength'] | tuiFieldError | async\"\n [formControl]=\"controlFile\"\n />\n <p class=\"tui-form__field-note\">\u041D\u0430\u043F\u0440\u0438\u043C\u0435\u0440, \u0444\u043E\u0442\u043E\u0433\u0440\u0430\u0444\u0438\u044E \u043F\u043E\u0432\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u0439 \u0438 \u0434\u0435\u0444\u0444\u0435\u043A\u0442\u043E\u0432, \u0447\u0442\u043E \u043F\u043E\u0441\u043B\u0443\u0436\u0438\u0442 \u0434\u043E\u043A\u0430\u0437\u0430\u0442\u0435\u043B\u044C\u0441\u0442\u0432\u043E\u043C \u043D\u0435\u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044F \u0437\u0430\u044F\u0432\u043B\u0435\u043D\u043D\u043E\u0433\u043E \u043A\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u0442\u043E\u0432\u0430\u0440\u0430.</p>\n </div>\n</form>\n", styles: ["tui-calendar:has(.t-dots) .t-cell:has(.t-dots){opacity:1;font-weight:700;color:var(--tui-text-primary);border-radius:var(--tui-radius-m);box-shadow:inset 0 0 0 .125rem color-mix(in srgb,var(--tui-background-accent-1) 33%,transparent)}\n"] }]
|
|
553
555
|
}], ctorParameters: () => [] });
|
|
554
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtb3JkZXItZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvb3JkZXIvb3JkZXItZm9ybS9zYy1vcmRlci1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9vcmRlci9vcmRlci1mb3JtL3NjLW9yZGVyLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNFZBQTRWO0FBRTVWLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQWMsTUFBTSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsTCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUUsT0FBTyxFQUFtQixXQUFXLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBb0IsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekksT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFDSCxzQkFBc0IsRUFDdEIsU0FBUyxFQUNULFlBQVksRUFFWixtQkFBbUIsRUFDbkIsbUJBQW1CLEVBQ25CLHdCQUF3QixFQUN4QixjQUFjLEVBT2QsU0FBUyxFQUNULGVBQWUsRUFDZixhQUFhLEVBQ2IsbUJBQW1CLEVBQ25CLFdBQVcsRUFDWCxjQUFjLEVBRWQsa0JBQWtCLEVBQ2xCLGtCQUFrQixHQUNyQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFB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Q29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uLHJ4anMvbm8tc2hhcmVyZXBsYXksQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1lbnVtLWNvbXBhcmlzb24sQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kLEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXNzaWdubWVudCxAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MsQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1jYWxsLEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXJndW1lbnQsc2VjdXJpdHkvZGV0ZWN0LW9iamVjdC1pbmplY3Rpb24gKi9cblxuaW1wb3J0IHsgQXN5bmNQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIERlc3Ryb3lSZWYsIEVsZW1lbnRSZWYsIGluamVjdCwgaW5wdXQsIE9uSW5pdCwgb3V0cHV0LCBTaWduYWwsIHNpZ25hbCwgdmlld0NoaWxkLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkLCB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBSb3V0ZXJMaW5rIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gICAgSVNfUlVOTklOR19PTl9URVJNSU5BTCxcbiAgICBJU19TRVJWRVIsXG4gICAgU0NfVVNFUl9JTkZPLFxuICAgIFNjQ29udHJhZ2VudCxcbiAgICBTY0NvbnRyYWdlbnRTZXJ2aWNlLFxuICAgIFNjQ29udmVydGVyc1NlcnZpY2UsXG4gICAgU2NEZWxpdmVyeUFkZHJlc3NTZXJ2aWNlLFxuICAgIFNjRGVsaXZlcnlUeXBlLFxuICAgIFNjSUFwaUVycm9yUmVzcG9uc2UsXG4gICAgU2NJRGVsaXZlcnlBZGRyZXNzLFxuICAgIFNjSU5ld09yZGVyLFxuICAgIFNjSVJlZmVyZW5jZXNUeXBlcyxcbiAgICBTY0lUZXJtaW5hbFByb3ZpZGVyLFxuICAgIFNjSVdhcmVob3VzZSxcbiAgICBTY09wZkxpc3QsXG4gICAgU2NPcmRlcnNTZXJ2aWNlLFxuICAgIFNjUGF5bWVudFR5cGUsXG4gICAgU2NSZWZlcmVuY2VzU2VydmljZSxcbiAgICBTY1VJU2VydmljZSxcbiAgICBTY1VwbG9hZGVkRmlsZSxcbiAgICBTY1VzZXIsXG4gICAgU2NXYXJlaG91c2VTZXJ2aWNlLFxuICAgIFRFUk1JTkFMX1BST1ZJREVSUyxcbn0gZnJvbSAnQHNuYWJjZW50ci9jbGllbnQtY29yZSc7XG5pbXBvcnQgeyBUdWlDb250ZXh0LCB0dWlDb250cm9sVmFsdWUsIFR1aURheSwgdHVpSXNQcmVzZW50LCBUdWlTdHJpbmdIYW5kbGVyLCBUdWlWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICdAdGFpZ2EtdWkvY2RrJztcbmltcG9ydCB7IFR1aURhdGFMaXN0Q29tcG9uZW50LCBUdWlEaWFsb2dTZXJ2aWNlLCBUdWlFcnJvciwgVHVpTGFiZWwsIFR1aUxpbmssIFR1aUxvYWRlciwgVHVpTWFya2VySGFuZGxlciwgVHVpT3B0aW9uIH0gZnJvbSAnQHRhaWdhLXVpL2NvcmUnO1xuaW1wb3J0IHsgVHVpRGF0YUxpc3REaXJlY3RpdmUgfSBmcm9tICdAdGFpZ2EtdWkvY29yZS9jb21wb25lbnRzL2RhdGEtbGlzdCc7XG5pbXBvcnQgeyBUdWlGaWVsZEVycm9yUGlwZSwgVHVpRmlsZSwgVHVpRmlsZUxpa2UsIFR1aUZpbGVSZWplY3RlZFBpcGUsIHR1aUZpbGVzQWNjZXB0ZWQsIFR1aUZpbGVzQ29tcG9uZW50LCBUdWlJbnB1dEZpbGVzLCBUdWlJbnB1dEZpbGVzRGlyZWN0aXZlIH0gZnJvbSAnQHRhaWdhLXVpL2tpdCc7XG5pbXBvcnQgeyBUdWlJbnB1dERhdGVNb2R1bGUsIFR1aVNlbGVjdE1vZHVsZSwgVHVpVGV4dGFyZWFNb2R1bGUgfSBmcm9tICdAdGFpZ2EtdWkvbGVnYWN5JztcbmltcG9ydCB7IFBvbHltb3JwaGV1c0NvbXBvbmVudCB9IGZyb20gJ0B0YWlnYS11aS9wb2x5bW9ycGhldXMnO1xuaW1wb3J0IHsgZm9ybWF0LCBpc1ZhbGlkLCBwYXJzZSB9IGZyb20gJ2RhdGUtZm5zJztcbmltcG9ydCB7IGlzQXJyYXksIGlzU3RyaW5nIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGNvbWJpbmVMYXRlc3QsIGRlYm91bmNlVGltZSwgZmlsdGVyLCBmaXJzdCwgbWFwLCBtZXJnZSwgT2JzZXJ2YWJsZSwgb2YsIHJldHJ5LCBzaGFyZVJlcGxheSwgc3dpdGNoTWFwLCB0YXAsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU2NBZGRDb250cmFnZW50RGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29udHJhZ2VudHMvYWRkLWNvbnRyYWdlbnQtZGlhbG9nL3NjLWFkZC1jb250cmFnZW50LWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2NBZGREZWxpdmVyeUFkZHJlc3NEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi8uLi9kZWxpdmVyeS1hZGRyZXNzL2FkZC1kZWxpdmVyeS1hZGRyZXNzLWRpYWxvZy9zYy1hZGQtZGVsaXZlcnktYWRkcmVzcy1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IFNjRm9jdXNGaXJzdEludmFsaWRGaWVsZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvc2MtZm9jdXMtZmlyc3QtaW52YWxpZC1maWVsZC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSU5ld09yZGVyRm9ybSB9IGZyb20gJy4uL21vZGVscy9pLW5ldy1vcmRlci1mb3JtJztcbmltcG9ydCB7IFNDX09SREVSX0ZPUk1fQ09ORklHIH0gZnJvbSAnLi9zYy1vcmRlci1mb3JtLmNvbmZpZyc7XG5cbi8qKlxuICog0KLQuNC/0YssINC60L7RgtC+0YDRi9C1INCy0L7Qt9C80L7QttC90L4g0L/RgNC10L7QsdGA0LDQt9C+0LLQsNGC0Ywg0LIg0LfQvdCw0YfQtdC90LjQtSwg0L7RgtC+0LHRgNCw0LbQsNC10LzQvtC1INCyINC/0L7Qu9C1INCy0LLQvtC00LAuXG4gKi9cbnR5cGUgU2VsZWN0VHlwZSA9XG4gICAgfCBTY0lSZWZlcmVuY2VzVHlwZXM8U2NQYXltZW50VHlwZSwgdHlwZW9mIFNjUGF5bWVudFR5cGU+XG4gICAgfCBTY0NvbnRyYWdlbnRcbiAgICB8IFNjSVJlZmVyZW5jZXNUeXBlczxTY0RlbGl2ZXJ5VHlwZSwgdHlwZW9mIFNjRGVsaXZlcnlUeXBlPlxuICAgIHwgU2NJV2FyZWhvdXNlXG4gICAgfCBTY0lEZWxpdmVyeUFkZHJlc3M7XG5cbi8qKlxuICog0KTQvtGA0LzQsCDQvtGE0L7RgNC80LvQtdC90LjRjyDQt9Cw0LrQsNC30LAuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdzYy1vcmRlci1mb3JtJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2Mtb3JkZXItZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vc2Mtb3JkZXItZm9ybS5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICAgICAgUm91dGVyTGluayxcbiAgICAgICAgVHVpTG9hZGVyLFxuICAgICAgICBUdWlMYWJlbCxcbiAgICAgICAgVHVpU2VsZWN0TW9kdWxlLFxuICAgICAgICBUdWlEYXRhTGlzdERpcmVjdGl2ZSxcbiAgICAgICAgVHVpRGF0YUxpc3RDb21wb25lbnQsXG4gICAgICAgIFR1aU9wdGlvbixcbiAgICAgICAgVHVpRXJyb3IsXG4gICAgICAgIFR1aUxpbmssXG4gICAgICAgIFR1aUlucHV0RGF0ZU1vZHVsZSxcbiAgICAgICAgVHVpVGV4dGFyZWFNb2R1bGUsXG4gICAgICAgIFR1aUlucHV0RmlsZXMsXG4gICAgICAgIFR1aUlucHV0RmlsZXNEaXJlY3RpdmUsXG4gICAgICAgIFR1aUZpbGVzQ29tcG9uZW50LFxuICAgICAgICBUdWlGaWxlLFxuICAgICAgICBBc3luY1BpcGUsXG4gICAgICAgIFR1aUZpZWxkRXJyb3JQaXBlLFxuICAgICAgICBUdWlGaWxlUmVqZWN0ZWRQaXBlLFxuICAgICAgICBTY0ZvY3VzRmlyc3RJbnZhbGlkRmllbGREaXJlY3RpdmUsXG4gICAgXSxcbiAgICBwcm92aWRlcnM6IFtURVJNSU5BTF9QUk9WSURFUlNdLFxufSlcbmV4cG9ydCBjbGFzcyBTY09yZGVyRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgLyoqXG4gICAgICog0KLRgNC10LHQvtCy0LDRgtGMINC/0L7QtNGC0LLQtdGA0LbQtNGR0L3QvdGL0LUg0LrQvtC90YLQsNC60YLQvdGL0LUg0LTQsNC90L3Ri9C1INC00LvRjyDQvtGE0L7RgNC80LvQtdC90LjRjy4g0JTQu9GPINGH0LXRgNC90L7QstC40LrQsCDigJQgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgZW5mb3JjZUFwcHJvdmVkQ29udGFjdHMgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcblxuICAgIC8qKlxuICAgICAqINCh0L7QsdGL0YLQuNC1INC+0YLQv9GA0LDQstC60Lgg0LLQsNC70LjQtNC90L7QuSDRhNC+0YDQvNGLINC+0YTQvtGA0LzQu9C10L3QuNGPLiDQn9C+0LvQtdC30L3QsNGPINC90LDQs9GA0YPQt9C60LAg4oCUINGB0YvRgNGL0LUg0LfQvdCw0YfQtdC90LjRjyDRhNC+0YDQvNGLLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBvcmRlclN1Ym1pdCA9IG91dHB1dDxTY0lOZXdPcmRlcj4oKTtcblxuICAgIC8qKlxuICAgICAqINCh0LXRgNCy0LjRgSDRgdC/0YDQsNCy0L7Rh9C90LjQutC+0LIuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSByZWZlcmVuY2VzU2VydmljZSA9IGluamVjdChTY1JlZmVyZW5jZXNTZXJ2aWNlKTtcblxuICAgIC8qKlxuICAgICAqINCh0LXRgNCy0LjRgSDRgNCw0LHQvtGC0Ysg0YEg0LrQvtC90YLRgNCw0LPQtdC90YLQsNC80LguXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb250cmFnZW50U2VydmljZSA9IGluamVjdChTY0NvbnRyYWdlbnRTZXJ2aWNlKTtcblxuICAgIC8qKlxuICAgICAqINCh0LXRgNCy0LjRgSDRgNCw0LHQvtGC0Ysg0YEg0LDQtNGA0LXRgdCw0LzQuCDQtNC+0YHRgtCw0LLQutC4LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVsaXZlcnlBZGRyZXNzU2VydmljZSA9IGluamVjdChTY0RlbGl2ZXJ5QWRkcmVzc1NlcnZpY2UpO1xuXG4gICAgLyoqXG4gICAgICog0KHQtdGA0LLQuNGBINC00LvRjyDRgNCw0LHQvtGC0Ysg0YHQviDRgdC60LvQsNC00LDQvNC4LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSB3YXJlaG91c2VTZXJ2aWNlID0gaW5qZWN0KFNjV2FyZWhvdXNlU2VydmljZSk7XG5cbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0LTQu9GPINGA0LDQsdC+0YLRiyDRgSDQt9Cw0LrQsNC30LDQvNC4ICjQt9Cw0LPRgNGD0LfQutCwINC00LDRgiDQtNC+0YHRgtCw0LLQutC4L9GB0LDQvNC+0LLRi9Cy0L7Qt9CwKS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IG9yZGVyc1NlcnZpY2UgPSBpbmplY3QoU2NPcmRlcnNTZXJ2aWNlKTtcblxuICAgIC8qKlxuICAgICAqINCh0LXRgNCy0LjRgSDQtNC70Y8g0YDQsNCx0L7RgtGLINGBIFVJLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdWlTZXJ2aWNlID0gaW5qZWN0KFNjVUlTZXJ2aWNlKTtcblxuICAgIC8qKlxuICAgICAqINCh0LXRgNCy0LjRgSDQutC+0L3QstC10YDRgtCw0YbQuNC4INC00LDQvdC90YvRhS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbnZlcnRlcnNTZXJ2aWNlID0gaW5qZWN0KFNjQ29udmVydGVyc1NlcnZpY2UpO1xuXG4gICAgLyoqXG4gICAgICog0KHQtdGA0LLQuNGBINGA0LDQsdC+0YLRiyDRgSDQtNC40LDQu9C+0LPQvtCy0YvQvCDQvtC60L3QvtC8LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nID0gaW5qZWN0KFR1aURpYWxvZ1NlcnZpY2UpO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC+0LLQsNC50LTQtdGAINC00LDQvdC90YvRhSDQviDRgtC10YDQvNC40L3QsNC70LUuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHRlcm1pbmFsID0gaW5qZWN0PFNjSVRlcm1pbmFsUHJvdmlkZXI+KElTX1JVTk5JTkdfT05fVEVSTUlOQUwpO1xuXG4gICAgLyoqXG4gICAgICog0J/QvtGC0L7QuiDQtNCw0L3QvdGL0YUg0L4g0YLQtdC60YPRidC10Lwg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9C1LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSB1c2VyJCA9IGluamVjdDxPYnNlcnZhYmxlPFNjVXNlcj4+KFNDX1VTRVJfSU5GTyk7XG5cbiAgICAvKipcbiAgICAgKiDQndCw0YHRgtGA0L7QudC60Lgg0YTQvtGA0LzRiyDQvtGE0L7RgNC80LvQtdC90LjRjyDQt9Cw0LrQsNC30LAuINCV0YHQu9C4INC90LUg0L/RgNC10LTQvtGB0YLQsNCy0LvQtdC90YssINC80LXRgtCw0LTQsNC90L3Ri9C1INGE0L7RgNC80Ysg0L3QtSDRgdC+0YXRgNCw0L3Rj9GO0YLRgdGPLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnID0gaW5qZWN0KFNDX09SREVSX0ZPUk1fQ09ORklHLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0Log0LLRi9C/0L7Qu9C90LXQvdC40Y8g0YHQutGA0LjQv9GC0LAg0L3QsCDRgdC10YDQstC10YDQtS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGlzU2VydmVyID0gaW5qZWN0KElTX1NFUlZFUik7XG5cbiAgICAvKipcbiAgICAgKiDQodGB0YvQu9C60LAg0LTQu9GPINCw0LLRgtC+0LzQsNGC0LjRh9C10YHQutC+0LPQviDRg9C/0YDQsNCy0LvQtdC90LjRjyDRg9C90LjRh9GC0L7QttC10L3QuNC10Lwg0LfQsNCy0LjRgdC40LzQvtGB0YLQtdC5LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICAgIC8qKlxuICAgICAqINCX0LDQtNC10YDQttC60LAg0YHRh9C40YLRi9Cy0LDQvdC40Y8g0YHQuNCz0L3QsNC70L7QsiDRhNC+0YDQvNGLLCDQtNC70Y8g0LjQt9Cx0LXQttCw0L3QuNGPINC70LjRiNC90LjRhSDQvtCx0YDQsNCx0L7RgtC+0Log0L/RgNC4INGB0LzQtdC90LUg0LfQvdCw0YfQtdC90LjQuS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlYm91bmNlVGltZUZvcm1DaGFuZ2UgPSA1MDtcblxuICAgIC8qKlxuICAgICAqINCk0L7RgNC80LAg0YHQvtC30LTQsNC90LjRjyDQt9Cw0LrQsNC30LAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGZvcm0gPSBuZXcgRm9ybUdyb3VwPElOZXdPcmRlckZvcm0+KHtcbiAgICAgICAgY29udHJhZ2VudElkOiBuZXcgRm9ybUNvbnRyb2w8bnVtYmVyIHwgbnVsbD4obnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgICAgIHBheW1lbnRUeXBlOiBuZXcgRm9ybUNvbnRyb2w8U2NQYXltZW50VHlwZSB8IG51bGw+KHsgdmFsdWU6IG51bGwsIGRpc2FibGVkOiB0cnVlIH0sIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgICAgICBkZWxpdmVyeVR5cGU6IG5ldyBGb3JtQ29udHJvbDxTY0RlbGl2ZXJ5VHlwZSB8IG51bGw+KHsgdmFsdWU6IG51bGwsIGRpc2FibGVkOiB0cnVlIH0sIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgICAgICBkZWxpdmVyeURhdGU6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPih7IHZhbHVlOiBudWxsLCBkaXNhYmxlZDogdHJ1ZSB9LCBbXG4gICAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgICAgICAgKHsgdmFsdWUgfTogQWJzdHJhY3RDb250cm9sPHN0cmluZyB8IG51bGw+KTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdmFsdWUgfHwgdGhpcy5kZWxpdmVyeURhdGVzKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgJiYgIXRoaXMuZGVsaXZlcnlEYXRlcygpLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBzZXJ2ZXJSZXNwb25zZTogJ9Cj0LrQsNC20LjRgtC1INC60L7RgNGA0LXQutGC0L3Rg9GOINC00LDRgtGDLCDQuNC70Lgg0LLRi9Cx0LXRgNC40YLQtSDQuNC3INCw0LrRgtC40LLQvdGL0YUg0LTQsNGCINC60LDQu9C10L3QtNCw0YDRjycgfTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0pLFxuICAgICAgICB3YXJlaG91c2VJZDogbmV3IEZvcm1Db250cm9sPG51bWJlciB8IG51bGw+KHsgdmFsdWU6IG51bGwsIGRpc2FibGVkOiB0cnVlIH0sIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgICAgICBhZGRyZXNzSWQ6IG5ldyBGb3JtQ29udHJvbDxudW1iZXIgfCBudWxsPih7IHZhbHVlOiBudWxsLCBkaXNhYmxlZDogdHJ1ZSB9LCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICAgICAgY29tbWVudDogbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwpLFxuICAgICAgICBpbWFnZTogbmV3IEZvcm1Db250cm9sPFNjVXBsb2FkZWRGaWxlIHwgbnVsbD4obnVsbCksXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiDQn9C+0LvQtSDRhNCw0LnQu9CwLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBjb250cm9sRmlsZSA9IG5ldyBGb3JtQ29udHJvbDxGaWxlIHwgbnVsbD4obnVsbCk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgT2JzZXJ2YWJsZX0g0YHQv9C40YHQutCwINC/0L7QtNGC0LLQtdGA0LbQtNGR0L3QvdGL0YUg0YTQsNC50LvQvtCyLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBhY2NlcHRlZCQgPSB0aGlzLmNvbnRyb2xGaWxlLnZhbHVlQ2hhbmdlcy5waXBlKG1hcCgoKSA9PiB0dWlGaWxlc0FjY2VwdGVkKHRoaXMuY29udHJvbEZpbGUpKSk7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiwg0YfRgtC+INCy0LrQu9GO0YfRkdC9INGA0LXQttC40Lwg0LDQvdC40LzQsNGG0LjQuCDQv9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNGPINC+INC90LXQv9C+0LTRgtCy0LXRgNC20LTRkdC90L3Ri9GFINC00LDQvdC90YvRhS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgd2FybmluZ1NoYWtlID0gc2lnbmFsKGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqINCf0YDQuNC30L3QsNC6LCDRh9GC0L4g0LrQvtC90YLRgNCw0LPQtdC90YIg0Y/QstC70Y/QtdGC0YHRjyDRhNC40LfQuNGH0LXRgdC60LjQvCDQu9C40YbQvtC8LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBpc0luZGl2aWR1YWwgPSBzaWduYWw8Ym9vbGVhbj4odHJ1ZSk7XG5cbiAgICAvKipcbiAgICAgKiDQodC/0LjRgdC+0Log0LLQvtC30LzQvtC20L3Ri9GFINC00LDRgiDRgdCw0LzQvtCy0YvQstC+0LfQsCDRgdC+INGB0LrQu9Cw0LTQsC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHdhcmVob3VzZURlbGl2ZXJ5RGF0ZXMgPSBzaWduYWw8c3RyaW5nW10+KFtdKTtcblxuICAgIC8qKlxuICAgICAqINCh0L/QuNGB0L7QuiDQstC+0LfQvNC+0LbQvdGL0YUg0LTQsNGCINC00L7RgdGC0LDQstC60LguXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBhZGRyZXNzRGVsaXZlcnlEYXRlcyA9IHNpZ25hbDxzdHJpbmdbXT4oW10pO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIE9ic2VydmFibGV9INGB0L/QuNGB0LrQsCDQutC+0L3RgtGA0LDQs9C10L3RgtC+0LIg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBjb250cmFnZW50cyQ6IE9ic2VydmFibGU8U2NDb250cmFnZW50W10gfCBudWxsPiA9IHRoaXMuY29udHJhZ2VudFNlcnZpY2UuY29udHJhZ2VudHMkO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIE9ic2VydmFibGV9INGB0L/QuNGB0LrQsCDQsNC00YDQtdGB0L7QsiDQutC+0L3RgtGA0LDQs9C10L3RgtCwLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBhZGRyZXNzZXMkOiBPYnNlcnZhYmxlPFNjSURlbGl2ZXJ5QWRkcmVzc1tdIHwgbnVsbD4gPSB0aGlzLmRlbGl2ZXJ5QWRkcmVzc1NlcnZpY2UuZGVsaXZlcnlBZGRyZXNzZXMkLnBpcGUoXG4gICAgICAgIHRhcCgoZGVsaXZlcnlBZGRyZXNzZXMpID0+IHtcbiAgICAgICAgICAgIGlmIChkZWxpdmVyeUFkZHJlc3NlcyAmJiB0aGlzLmZvcm0uY29udHJvbHMuYWRkcmVzc0lkLnZhbHVlICYmICFkZWxpdmVyeUFkZHJlc3Nlcy5zb21lKChkZWxpdmVyeSkgPT4gZGVsaXZlcnkuaWQgPT09IHRoaXMuZm9ybS5jb250cm9scy5hZGRyZXNzSWQudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLmFkZHJlc3NJZC5yZXNldCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgT2JzZXJ2YWJsZX0g0YHQv9C40YHQutCwINGB0LrQu9Cw0LTQvtCyLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSB3YXJlaG91c2VzJDogT2JzZXJ2YWJsZTxTY0lXYXJlaG91c2VbXT4gPSB0aGlzLndhcmVob3VzZVNlcnZpY2UuZ2V0V2FyZWhvdXNlcyQoKTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDQntCf0KQg0LLRi9Cx0YDQsNC90L3QvtCz0L4g0LrQvtC90YLRgNCw0LPQtdC90YLQsC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IG9wZiQgPSB0dWlDb250cm9sVmFsdWU8bnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZD4odGhpcy5mb3JtLmNvbnRyb2xzLmNvbnRyYWdlbnRJZCkucGlwZShcbiAgICAgICAgZmlsdGVyKHR1aUlzUHJlc2VudCksXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZvcm0uY29udHJvbHMucGF5bWVudFR5cGUuZW5hYmxlKCk7XG4gICAgICAgICAgICB0aGlzLmZvcm0uY29udHJvbHMuZGVsaXZlcnlUeXBlLmVuYWJsZSgpO1xuICAgICAgICB9KSxcbiAgICAgICAgc3dpdGNoTWFwKChzZWxlY3RDb250cmFnZW50SWQpID0+XG4gICAgICAgICAgICB0aGlzLmNvbnRyYWdlbnRzJC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcih0dWlJc1ByZXNlbnQpLFxuICAgICAgICAgICAgICAgIG1hcCgoY29udHJhZ2VudHM6IFNjQ29udHJhZ2VudFtdKSA9PiBjb250cmFnZW50cy5maW5kKChjb250cmFnZW50KSA9PiBjb250cmFnZW50LmlkID09PSBzZWxlY3RDb250cmFnZW50SWQpKSxcbiAgICAgICAgICAgICAgICBtYXAoKGNvbnRyYWdlbnQpID0+IGNvbnRyYWdlbnQ/Lm9wZiksXG4gICAgICAgICAgICAgICAgdGFwKChvcGYpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0luZGl2aWR1YWwuc2V0KG9wZj8uaWQgPT09IFNjT3BmTGlzdC5pbmRpdmlkdWFsLnZhbHVlT2YoKSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDRgtC40L/QvtCyINC+0L/Qu9Cw0YLRiyDQt9Cw0LrQsNC30LAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHBheW1lbnRUeXBlcyQ6IE9ic2VydmFibGU8QXJyYXk8U2NJUmVmZXJlbmNlc1R5cGVzPFNjUGF5bWVudFR5cGUsIHR5cGVvZiBTY1BheW1lbnRUeXBlPj4+ID0gdGhpcy5vcGYkLnBpcGUoXG4gICAgICAgIG1hcCgob3BmKSA9PiBvcGYgJiYgKG9wZi5pZCA9PT0gU2NPcGZMaXN0LmluZGl2aWR1YWwgPyBTY1BheW1lbnRUeXBlLmJlem5hbDIgOiBTY1BheW1lbnRUeXBlLm9ubGluZSkpLFxuICAgICAgICBzd2l0Y2hNYXAoKHBheW1lbnRUeXBlRmlsdGVyKSA9PlxuICAgICAgICAgICAgdGhpcy5yZWZlcmVuY2VzU2VydmljZS5wYXltZW50VHlwZXMkLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChwYXltZW50VHlwZXMpID0+IChwYXltZW50VHlwZUZpbHRlciA/IHBheW1lbnRUeXBlcyA6IFtdKSksXG4gICAgICAgICAgICAgICAgbWFwKChwYXltZW50VHlwZXMpID0+IHBheW1lbnRUeXBlcy5maWx0ZXIoKHR5cGUpID0+IHR5cGUuaWQgIT09IHBheW1lbnRUeXBlRmlsdGVyKSksXG4gICAgICAgICAgICAgICAgdGFwKChwYXltZW50VHlwZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZm9ybS5jb250cm9scy5wYXltZW50VHlwZS52YWx1ZSAmJiAhcGF5bWVudFR5cGVzLnNvbWUoKHBheW1lbnQpID0+IHBheW1lbnQuaWQgPT09IHRoaXMuZm9ybS5jb250cm9scy5wYXltZW50VHlwZS52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5wYXltZW50VHlwZS5yZXNldCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5mb3JtLmNvbnRyb2xzLnBheW1lbnRUeXBlLnZhbHVlICYmIHBheW1lbnRUeXBlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5wYXltZW50VHlwZS5wYXRjaFZhbHVlKHBheW1lbnRUeXBlc1swXS5pZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICApXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDRgtC40L/QvtCyINC00L7RgdGC0LDQstC60Lgg0LfQsNC60LDQt9CwLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBkZWxpdmVyeVR5cGVzJDogT2JzZXJ2YWJsZTxBcnJheTxTY0lSZWZlcmVuY2VzVHlwZXM8U2NEZWxpdmVyeVR5cGUsIHR5cGVvZiBTY0RlbGl2ZXJ5VHlwZT4+PiA9IHRoaXMub3BmJC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKG9wZikgPT5cbiAgICAgICAgICAgIHRoaXMucmVmZXJlbmNlc1NlcnZpY2UuZGVsaXZlcnlUeXBlcyQucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGRlbGl2ZXJ5VHlwZXMpID0+IChvcGYgPyBkZWxpdmVyeVR5cGVzIDogW10pKSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKGRlbGl2ZXJ5VHlwZXMpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVsaXZlcnlBZGRyZXNzU2VydmljZS5kZWxpdmVyeUFkZHJlc3NlcyQucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcCgoZGVsaXZlcnlBZGRyZXNzZXMpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BmPy5pZCA9PT0gU2NPcGZMaXN0LmluZGl2aWR1YWwgJiYgIShkZWxpdmVyeUFkZHJlc3NlcyAmJiBkZWxpdmVyeUFkZHJlc3Nlcy5sZW5ndGggPiAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGRlbGl2ZXJ5VHlwZXMuZmlsdGVyKCh0eXBlKSA9PiB0eXBlLmlkICE9PSBTY0RlbGl2ZXJ5VHlwZS5kZWxpdmVyeSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBkZWxpdmVyeVR5cGVzXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHRhcCgoZGVsaXZlcnlUeXBlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5mb3JtLmNvbnRyb2xzLmRlbGl2ZXJ5VHlwZS52YWx1ZSAmJiAhZGVsaXZlcnlUeXBlcy5zb21lKChkZWxpdmVyeSkgPT4gZGVsaXZlcnkuaWQgPT09IHRoaXMuZm9ybS5jb250cm9scy5kZWxpdmVyeVR5cGUudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uY29udHJvbHMuZGVsaXZlcnlUeXBlLnJlc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmZvcm0uY29udHJvbHMuZGVsaXZlcnlUeXBlLnZhbHVlICYmIGRlbGl2ZXJ5VHlwZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uY29udHJvbHMuZGVsaXZlcnlUeXBlLnBhdGNoVmFsdWUoZGVsaXZlcnlUeXBlc1swXS5pZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICApXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqINCf0YDQuNC30L3QsNC6LCDRh9GC0L4g0LLRi9Cx0YDQsNC9INGC0LjQvyDQvtC/0LvQsNGC0Ysg0L3QsNC70LjRh9C90YvQvNC4LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBpc0Nhc2hQYXltZW50U2VsZWN0ZWQ6IFNpZ25hbDxib29sZWFuPiA9IHRvU2lnbmFsKFxuICAgICAgICB0dWlDb250cm9sVmFsdWU8U2NQYXltZW50VHlwZSB8IG51bGw+KHRoaXMuZm9ybS5jb250cm9scy5wYXltZW50VHlwZSkucGlwZShtYXAoKHBheW1lbnRUeXBlKSA9PiBwYXltZW50VHlwZSA9PT0gU2NQYXltZW50VHlwZS5uYWwpKSxcbiAgICAgICAgeyBpbml0aWFsVmFsdWU6IGZhbHNlIH1cbiAgICApO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0LosINGH0YLQviDQvdC+0LzQtdGAINGC0LXQu9C10YTQvtC90LAg0L/QvtC00YLQstC10YDQttC00ZHQvS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXNQaG9uZUFwcHJvdmVkOiBTaWduYWw8Ym9vbGVhbj4gPSB0b1NpZ25hbChcbiAgICAgICAgdGhpcy51c2VyJC5waXBlKFxuICAgICAgICAgICAgZmlsdGVyKCh1c2VyKSA9PiAhdXNlci5pc0d1ZXN0KSxcbiAgICAgICAgICAgIG1hcCgodXNlcikgPT4gdXNlci5jb250YWN0cy5waG9uZS5pc0FwcHJvdmVkKVxuICAgICAgICApLFxuICAgICAgICB7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9XG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqINCf0YDQuNC30L3QsNC6LCDRh9GC0L4g0LDQtNGA0LXRgSDRjdC70LXQutGC0YDQvtC90L3QvtC5INC/0L7Rh9GC0Ysg0L/QvtC00YLQstC10YDQttC00ZHQvSDQv9C+0LvRjNC30L7QstCw0YLQtdC70LXQvC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGlzRW1haWxBcHByb3ZlZFVzZXI6IFNpZ25hbDxib29sZWFuPiA9IHRvU2lnbmFsKFxuICAgICAgICB0aGlzLnVzZXIkLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoKHVzZXIpID0+ICF1c2VyLmlzR3Vlc3QpLFxuICAgICAgICAgICAgbWFwKCh1c2VyKSA9PiB1c2VyLmNvbnRhY3RzLmVtYWlsLmlzQXBwcm92ZWQpXG4gICAgICAgICksXG4gICAgICAgIHsgaW5pdGlhbFZhbHVlOiB0cnVlIH1cbiAgICApO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0LosINGH0YLQviDQsNC00YDQtdGBINGN0LvQtdC60YLRgNC+0L3QvdC+0Lkg0L/QvtGH0YLRiyDQv9C+0LTRgtCy0LXRgNC20LTRkdC9INC40LvQuCDQutC+0L3RgtGA0LDQs9C10L3RgiDRj9Cy0LvRj9C10YLRgdGPINGE0LjQt9C40YfQtdGB0LrQuNC8INC70LjRhtC+0LwuXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vY29uc2lzdGVudC1mdW5jdGlvbi1zY29waW5nXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzRW1haWxBcHByb3ZlZDogU2lnbmFsPGJvb2xlYW4+ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5pc0VtYWlsQXBwcm92ZWRVc2VyKCkgfHwgdGhpcy5pc0luZGl2aWR1YWwoKSk7XG5cbiAgICAvKipcbiAgICAgKiDQl9C90LDRh9C10L3QuNC1INCy0YvQsdGA0LDQvdC90L7Qs9C+INGC0LjQv9CwINC00L7RgdGC0LDQstC60LguXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZWxpdmVyeVR5cGVWYWx1ZSA9IHRvU2lnbmFsKHR1aUNvbnRyb2xWYWx1ZTxTY0RlbGl2ZXJ5VHlwZSB8IG51bGw+KHRoaXMuZm9ybS5jb250cm9scy5kZWxpdmVyeVR5cGUpLCB7IGluaXRpYWxWYWx1ZTogbnVsbCB9KTtcblxuICAgIC8qKlxuICAgICAqINCf0YDQuNC30L3QsNC6LCDRh9GC0L4g0LLRi9Cx0YDQsNC9INGC0LjQvyDQtNC+0YHRgtCw0LLQutC4IFwi0JTQvtGB0YLQsNCy0LrQsFwiLlxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL2NvbnNpc3RlbnQtZnVuY3Rpb24tc2NvcGluZ1xuICAgIHByb3RlY3RlZCByZWFkb25seSBpc0RlbGl2ZXJ5ID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4gdGhpcy5kZWxpdmVyeVR5cGVWYWx1ZSgpID09PSBTY0RlbGl2ZXJ5VHlwZS5kZWxpdmVyeSk7XG5cbiAgICAvKipcbiAgICAgKiDQndCw0LHQvtGAINC00L7RgdGC0YPQv9C90YvRhSDQtNCw0YIg0LIg0LfQsNCy0LjRgdC40LzQvtGB0YLQuCDQvtGCINGC0LjQv9CwINC00L7RgdGC0LDQstC60LguXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vY29uc2lzdGVudC1mdW5jdGlvbi1zY29waW5nXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGRlbGl2ZXJ5RGF0ZXMgPSBjb21wdXRlZDxzdHJpbmdbXT4oKCkgPT5cbiAgICAgICAgdGhpcy5kZWxpdmVyeVR5cGVWYWx1ZSgpID09PSBTY0RlbGl2ZXJ5VHlwZS5zZWxmX2RlbGl2ZXJ5ID8gdGhpcy53YXJlaG91c2VEZWxpdmVyeURhdGVzKCkgOiB0aGlzLmFkZHJlc3NEZWxpdmVyeURhdGVzKClcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICog0J3QsNCx0L7RgCDQtNC+0YHRgtGD0L/QvdGL0YUg0LTQsNGCINCyINCy0LjQtNC1INC00LDRgiDQutCw0LvQtdC90LTQsNGA0Y8sINC+0YLRgdC+0YDRgtC40YDQvtCy0LDQvdC90YvQuSDQv9C+INCy0L7Qt9GA0LDRgdGC0LDQvdC40Y4uXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZWxpdmVyeURheXMgPSBjb21wdXRlZDxUdWlEYXlbXT4oKCkgPT5cbiAgICAgICAgdGhpcy5kZWxpdmVyeURhdGVzKClcbiAgICAgICAgICAgIC5tYXAoKGRhdGUpID0+IFR1aURheS5ub3JtYWxpemVQYXJzZShkYXRlLnNsaWNlKDAsIDEwKSwgJ1lNRCcpKVxuICAgICAgICAgICAgLnNvcnQoKGZpcnN0RGF5LCBzZWNvbmREYXkpID0+IChmaXJzdERheS5kYXlTYW1lT3JCZWZvcmUoc2Vjb25kRGF5KSA/IC0xIDogMSkpXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqINCf0LXRgNCy0LDRjyDQtNC+0YHRgtGD0L/QvdCw0Y8g0LTQsNGC0LAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IG1pbkRlbGl2ZXJ5RGF5ID0gY29tcHV0ZWQ8VHVpRGF5IHwgbnVsbD4oKCkgPT4gdGhpcy5kZWxpdmVyeURheXMoKVswXSA/PyBudWxsKTtcblxuICAgIC8qKlxuICAgICAqINCf0L7RgdC70LXQtNC90Y/RjyDQtNC+0YHRgtGD0L/QvdCw0Y8g0LTQsNGC0LAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IG1heERlbGl2ZXJ5RGF5ID0gY29tcHV0ZWQ8VHVpRGF5IHwgbnVsbD4oKCkgPT4gdGhpcy5kZWxpdmVyeURheXMoKS5hdCgtMSkgPz8gbnVsbCk7XG5cbiAgICAvKipcbiAgICAgKiDQodGB0YvQu9C60LAg0L3QsCDRjdC70LXQvNC10L3RgiDRgSDQv9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNC10Lwg0L4g0L3QtdC/0L7QtNGC0LLQtdGA0LbQtNGR0L3QvdGL0YUg0LTQsNC90L3Ri9GFLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSB1bmNvbmZpcm1lZERhdGFXYXJuaW5nID0gdmlld0NoaWxkPEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PigndW5jb25maXJtZWREYXRhV2FybmluZycpO1xuXG4gICAgLyoqXG4gICAgICog0JLQvtC30LLRgNCw0YnQsNC10YIg0LzQsNGA0LrQtdGALCDQutC+0YLQvtGA0YvQvCDQstGL0LTQtdC70Y/QtdGC0YHRjyDQtNC+0YHRgtGD0L/QvdCw0Y8g0LTQu9GPINCy0YvQsdC+0YDQsCDQtNCw0YLQsC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkYXRlINCU0LDRgtCwLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBkZWxpdmVyeURhdGVNYXJrZXI6IFR1aU1hcmtlckhhbmRsZXIgPSAoZGF0ZTogVHVpRGF5KSA9PiAodGhpcy5kZWxpdmVyeURhdGVGaWx0ZXIoZGF0ZSkgPyBbXSA6IFsndmFyKC0tdHVpLWJhY2tncm91bmQtYWNjZW50LTEpJ10pO1xuXG4gICAgLyoqXG4gICAgICog0JLQvtC30LLRgNCw0YnQsNC10YIg0L/RgNC40LfQvdCw0LosINGH0YLQviDRg9C60LDQt9Cw0L3QvdCw0Y8g0LTQsNGC0LAg0L3QtdC00L7RgdGC0YPQv9C90LAg0LTQu9GPINCy0YvQsdC+0YDQsC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkYXRlINCU0LDRgtCwLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBkZWxpdmVyeURhdGVGaWx0ZXIgPSAoZGF0ZTogVHVpRGF5KTogYm9vbGVhbiA9PiAhdGhpcy5kZWxpdmVyeURhdGVzKCkuaW5jbHVkZXMoYCR7ZGF0ZS50b1N0cmluZygnWU1EJywgJy0nKX0gMDA6MDA6MDBgKTtcblxuICAgIC8qKlxuICAgICAqINCY0L3QuNGG0LjQsNC70LjQt9C40YDRg9C10YIg0Y3QutC30LXQvNC/0LvRj9GAINC60LvQsNGB0YHQsCB7QGxpbmsgU2NPcmRlckZvcm1Db21wb25lbnR9LlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgLy8g0JDQstGC0L7QvNCw0YLQuNGH0LXRgdC60Lgg0LLRi9Cx0LjRgNCw0LXQvCDQtdC00LjQvdGB0YLQstC10L3QvdC+0LPQviDQutC+0L3RgtGA0LDQs9C10L3RgtCwLdGE0LjQt9C70LjRhtC+LlxuICAgICAgICB0aGlzLmNvbnRyYWdlbnRzJFxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKChjb250cmFnZW50cyk6IGNvbnRyYWdlbnRzIGlzIFtTY0NvbnRyYWdlbnRdID0+ICEhY29udHJhZ2VudHMgJiYgY29udHJhZ2VudHMubGVuZ3RoID09PSAxKSxcbiAgICAgICAgICAgICAgICBmaXJzdCgpLFxuICAgICAgICAgICAgICAgIGZpbHRlcigoW2NvbnRyYWdlbnRdKSA9PiBjb250cmFnZW50Lm9wZi5pZCA9PT0gU2NPcGZMaXN0LmluZGl2aWR1YWwudmFsdWVPZigpKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoW2NvbnRyYWdlbnRdKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLmNvbnRyYWdlbnRJZD8ucGF0Y2hWYWx1ZShjb250cmFnZW50LmlkKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuaW5pdEZvcm1DaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBpbmhlcml0ZG9jICovXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmluaXRNZXRhZGF0YSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCf0YDQtdC+0LHRgNCw0LfRg9C10YIg0L7QsdGK0LXQutGC0Ysg0LIg0LfQvdCw0YfQtdC90LjRjywg0L7RgtC+0LHRgNCw0LbQsNC10LzQvtC1INCyINC/0L7Qu9C1INCy0LLQvtC00LAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXRlbXMg0JLRi9Cx0YDQsNC90L3Ri9C1INC+0LHRitC10LrRgtGLINCy0YvQv9Cw0LTQsNGO0YnQtdCz0L4g0YHQv9C40YHQutCwLlxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzXG4gICAgcHVibGljIHN0cmluZ2lmeShpdGVtczogcmVhZG9ubHkgU2VsZWN0VHlwZVtdKTogVHVpU3RyaW5nSGFuZGxlcjxUdWlDb250ZXh0PG51bWJlcj4+IHtcbiAgICAgICAgY29uc3QgaXRlbXNNYXAgPSBuZXcgTWFwKFxuICAgICAgICAgICAgaXRlbXMubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tbmVzdGVkLXRlcm5hcnksc29uYXJqcy9uby1uZXN0ZWQtY29uZGl0aW9uYWxcbiAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gJ25hbWUnIGluIGl0ZW0gPyBpdGVtLm5hbWUgOiAnYWRkcmVzcycgaW4gaXRlbSA/IGl0ZW0uYWRkcmVzcyA6ICcnO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtpdGVtLmlkLCBuYW1lXSBhcyBbbnVtYmVyLCBzdHJpbmddO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gKHsgJGltcGxpY2l0IH06IFR1aUNvbnRleHQ8bnVtYmVyPikgPT4gaXRlbXNNYXAuZ2V0KCRpbXBsaWNpdCkgPz8gJyc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J7QsdGA0LDQsdCw0YLRi9Cy0LDQtdGCINC+0YLQv9GA0LDQstC60YMg0YTQvtGA0LzRizog0LLQsNC70LjQtNC40YDRg9C10YIg0Lgg0Y3QvNC40YLQuNGCINC00LDQvdC90YvQtSDQt9Cw0LrQsNC30LAg0YDQvtC00LjRgtC10LvRji5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3VibWl0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xuXG4gICAgICAgIGlmICghdGhpcy5mb3JtLnZhbGlkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb250YWN0c0FwcHJvdmVkID0gIXRoaXMuZW5mb3JjZUFwcHJvdmVkQ29udGFjdHMoKSB8fCAodGhpcy5pc1Bob25lQXBwcm92ZWQoKSAmJiB0aGlzLmlzRW1haWxBcHByb3ZlZCgpKTtcblxuICAgICAgICBpZiAoIWNvbnRhY3RzQXBwcm92ZWQpIHtcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlclVuY29uZmlybWVkV2FybmluZygpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9yZGVyU3VibWl0LmVtaXQodGhpcy5mb3JtLmdldFJhd1ZhbHVlKCkgYXMgU2NJTmV3T3JkZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCf0YDQuNC80LXQvdGP0LXRgiDQuiDQv9C+0LvRj9C8INGE0L7RgNC80Ysg0L7RiNC40LHQutC4LCDQv9GA0LjRiNC10LTRiNC40LUg0L7RgiDRgdC10YDQstC10YDQsC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBlcnJvciDQntGC0LLQtdGCINGB0LXRgNCy0LXRgNCwINGBINC+0YjQuNCx0LrQsNC80LguXG4gICAgICovXG4gICAgcHVibGljIGFwcGx5U2VydmVyRXJyb3JzKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IGVycm9ycywgbWVzc2FnZSB9ID0gZXJyb3IuZXJyb3IgYXMgU2NJQXBpRXJyb3JSZXNwb25zZTtcblxuICAgICAgICBpZiAoZXJyb3JzKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhlcnJvcnMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChrZXkgPT09ICdkZWxpdmVyeURhdGUnICYmIGlzQXJyYXkoZXJyb3JzW2tleV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoa2V5KT8uc2V0RXJyb3JzKHsgc2VydmVyUmVzcG9uc2U6IG5ldyBUdWlWYWxpZGF0aW9uRXJyb3IoZXJyb3JzW2tleV0uYXQoMSkgPz8gZXJyb3JzW2tleV0uYXQoMCkpIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoa2V5KT8uc2V0RXJyb3JzKHsgc2VydmVyUmVzcG9uc2U6IG5ldyBUdWlWYWxpZGF0aW9uRXJyb3IoZXJyb3JzW2tleV0pIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KGtleSk/Lm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5zZXRFcnJvcnMoeyBzZXJ2ZXJSZXNwb25zZTogbmV3IFR1aVZhbGlkYXRpb25FcnJvcihtZXNzYWdlKSB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCj0LTQsNC70Y/QtdGCINGE0LDQudC7INC40Lcg0YTQvtGA0LzRiyDQt9Cw0LrQsNC30LAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlbW92ZUZpbGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29udHJvbEZpbGUucmVzZXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntGC0LrRgNGL0LLQsNC10YIg0LTQuNCw0LvQvtCz0L7QstC+0LUg0L7QutC90L4g0LTQvtCx0LDQstC70LXQvdC40Y8g0LDQtNGA0LXRgdCwINC00L7RgdGC0LDQstC60LguXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGFkZERlbGl2ZXJ5QWRkcmVzcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaWFsb2dcbiAgICAgICAgICAgIC5vcGVuKG5ldyBQb2x5bW9ycGhldXNDb21wb25lbnQoU2NBZGREZWxpdmVyeUFkZHJlc3NEaWFsb2dDb21wb25lbnQpLCB7XG4gICAgICAgICAgICAgICAgc2l6ZTogJ2wnLFxuICAgICAgICAgICAgICAgIGxhYmVsOiAn0JTQvtCx0LDQstC70LXQvdC40LUg0LDQtNGA0LXRgdCwINC00L7RgdGC0LDQstC60LgnLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntGC0LrRgNGL0LLQsNC10YIg0LTQuNCw0LvQvtCz0L7QstC+0LUg0L7QutC90L4g0LTQvtCx0LDQstC70LXQvdC40Y8g0LrQvtC90YLRgNCw0LPQtdC90YLQsC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgYWRkQ29udHJhZ2VudCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaWFsb2dcbiAgICAgICAgICAgIC5vcGVuKG5ldyBQb2x5bW9ycGhldXNDb21wb25lbnQoU2NBZGRDb250cmFnZW50RGlhbG9nQ29tcG9uZW50KSwge1xuICAgICAgICAgICAgICAgIHNpemU6ICdtJyxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ9CU0L7QsdCw0LLQu9C10L3QuNC1INC60L7QvdGC0YDQsNCz0LXQvdGC0LAnLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQl9Cw0L/Rg9GB0LrQsNC10YIg0LDQvdC40LzQsNGG0LjRjiDQv9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNGPINC+INC90LXQv9C+0LTRgtCy0LXRgNC20LTRkdC90L3Ri9GFINC00LDQvdC90YvRhSDQuCDQv9GA0L7QutGA0YPRh9C40LLQsNC10YIg0Log0L3QtdC80YMuXG4gICAgICovXG4gICAgcHJpdmF0ZSB0cmlnZ2VyVW5jb25maXJtZWRXYXJuaW5nKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy51bmNvbmZpcm1lZERhdGFXYXJuaW5nKCk/Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzU2VydmVyICYmIGVsZW1lbnQpIHtcbiAgICAgICAgICAgIGVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnY2VudGVyJyB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMud2FybmluZ1NoYWtlLnNldChmYWxzZSk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy53YXJuaW5nU2hha2Uuc2V0KHRydWUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0YHRgdGC0LDQvdCw0LLQu9C40LLQsNC10YIg0YfQtdGA0L3QvtCy0YvQtSDQtNCw0L3QvdGL0LUg0YTQvtGA0LzRiyDQuNC3INC80LXRgtCw0LTQsNC90L3Ri9GFINC4INC40L3QuNGG0LjQsNC70LjQt9C40YDRg9C10YIg0LjRhSDRgdC+0YXRgNCw0L3QtdC90LjQtSwg0LXRgdC70Lgg0L/RgNC10LTQvtGB0YLQsNCy0LvQtdC9INGC0L7QutC10L0ge0BsaW5rIFNDX09SREVSX0ZPUk1fQ09ORklHfS5cbiAgICAgKi9cbiAgICBwcml2YXRlIGluaXRNZXRhZGF0YSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBjb25maWcgfSA9IHRoaXM7XG5cbiAgICAgICAgaWYgKCFjb25maWcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbWJpbmVMYXRlc3Qoe1xuICAgICAgICAgICAgb3JkZXJNZXRhZGF0YTogdGhpcy51aVNlcnZpY2UuZ2V0TmV3T3JkZXJNZXRhZGF0YSQoKSxcbiAgICAgICAgICAgIHVzZXI6IHRoaXMudXNlciQucGlwZShmaWx0ZXIoKHVzZXIpID0+ICF1c2VyLmlzR3Vlc3QpKSxcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC5waXBlKGZpcnN0KCksIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNvbmFyanMvY29nbml0aXZlLWNvbXBsZXhpdHlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHsgb3JkZXJNZXRhZGF0YSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGRlbGl2ZXJ5RGF0ZTogc3RyaW5nIHwgbnVsbCA9XG4gICAgICAgICAgICAgICAgICAgIG9yZGVyTWV0YWRhdGE/LmRlbGl2ZXJ5RGF0ZSAmJiBpc1ZhbGlkKHBhcnNlKG9yZGVyTWV0YWRhdGEuZGVsaXZlcnlEYXRlLCBjb25maWcuZGF0ZUZvcm1hdHMuYXBpLCBuZXcgRGF0ZSgpKSkgPyBvcmRlck1ldGFkYXRhLmRlbGl2ZXJ5RGF0ZSA6IG51bGw7XG5cbiAgICAgICAgICAgICAgICAvLyDQldGB0LvQuCDQtNCw0YLQsCDRgdGC0LDRgNC+0LPQviDRhNC+0YDQvNCw0YLQsCwg0YLQviDQv9GA0LXQvtCx0YDQsNC30YPQtdC8INC10ZEg0LIg0L3QvtCy0YvQuSDRhNC+0YDQvNCw0YIuXG4gICAgICAgICAgICAgICAgLy8gVE9ETzog0KPQsdGA0LDRgtGMINGN0YLQvtGCINCx0LvQvtC6INC60L7Qs9C00LAg0LLRgdC1INC00LDRgtGLINGDINC60LvQuNC10L3RgtC+0LIg0LLRgdGC0LDQvdGD0YIg0LIg0L3QvtGA0LzQsNC70YzQvdC+0Lwg0YTQvtGA0LzQsNGC0LUuXG4gICAgICAgICAgICAgICAgaWYgKG9yZGVyTWV0YWRhdGE/LmRlbGl2ZXJ5RGF0ZSAmJiAhZGVsaXZlcnlEYXRlICYmIGlzVmFsaWQocGFyc2Uob3JkZXJNZXRhZGF0YS5kZWxpdmVyeURhdGUsIGNvbmZpZy5kYXRlRm9ybWF0cy51aURhdGUsIG5ldyBEYXRlKCkpKSkge1xuICAgICAgICAgICAgICAgICAgICBkZWxpdmVyeURhdGUgPSBmb3JtYXQocGFyc2Uob3JkZXJNZXRhZGF0YS5kZWxpdmVyeURhdGUsIGNvbmZpZy5kYXRlRm9ybWF0cy51aURhdGUsIG5ldyBEYXRlKCkpLCBjb25maWcuZGF0ZUZvcm1hdHMuYXBpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodHVpSXNQcmVzZW50KG9yZGVyTWV0YWRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyYWdlbnRJZDogb3JkZXJNZXRhZGF0YS5jb250cmFnZW50SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXltZW50VHlwZTogb3JkZXJNZXRhZGF0YS5jb250cmFnZW50SWQgPyBvcmRlck1ldGFkYXRhLnBheW1lbnRUeXBlIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGl2ZXJ5VHlwZTogb3JkZXJNZXRhZGF0YS5jb250cmFnZW50SWQgPyBvcmRlck1ldGFkYXRhLmRlbGl2ZXJ5VHlwZSA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxpdmVyeURhdGU6IG9yZGVyTWV0YWRhdGEuY29udHJhZ2VudElkICYmIEJvb2xlYW4ob3JkZXJNZXRhZGF0YS5kZWxpdmVyeVR5cGUpICYmIGRlbGl2ZXJ5RGF0ZSA/IGRlbGl2ZXJ5RGF0ZSA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzSWQ6IG9yZGVyTWV0YWRhdGEuZGVsaXZlcnlUeXBlID09PSBTY0RlbGl2ZXJ5VHlwZS5kZWxpdmVyeSAmJiBvcmRlck1ldGFkYXRhLmFkZHJlc3NJZCA/IG9yZGVyTWV0YWRhdGEuYWRkcmVzc0lkIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcmVob3VzZUlkOiBvcmRlck1ldGFkYXRhLmNvbnRyYWdlbnRJZCAmJiBCb29sZWFuKG9yZGVyTWV0YWRhdGEuZGVsaXZlcnlUeXBlKSA/IG9yZGVyTWV0YWRhdGEud2FyZWhvdXNlSWQgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudDogb3JkZXJNZXRhZGF0YS5jb21tZW50LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmZvcm0udmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKGNvbmZpZy5kZWJvdW5jZVRpbWUpLCB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKChuZXdPcmRlcikgPT4ge1xuICAgICAgICAgICAgdGhpcy51aVNlcnZpY2Uuc2V0TmV3T3JkZXJNZXRhZGF0YSh0aGlzLmNvbnZlcnRlcnNTZXJ2aWNlLnJlbW92ZU51bGw8U2NJTmV3T3JkZXI+KG5ld09yZGVyIGFzIFNjSU5ld09yZGVyKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCY0L3QuNGG0LjQsNC70LjQt9C40YDRg9C10YIg0L/QvtC00L/QuNGB0LrQuCDQvdCwINC40LfQvNC10L3QtdC90LjRjyDQv9C+0LvQtdC5INGE0L7RgNC80YsuXG4gICAgICovXG4gICAgcHJpdmF0ZSBpbml0Rm9ybUNoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5pdEZpbGVDaGFuZ2UoKTtcbiAgICAgICAgdGhpcy5pbml0V2FyZWhvdXNlQ2hhbmdlKCk7XG4gICAgICAgIHRoaXMuaW5pdERlbGl2ZXJ5RGF0ZXNDaGFuZ2UoKTtcbiAgICAgICAgdGhpcy5pbml0RGF0ZUZpZWxkQWN0aXZhdGlvbkNoYW5nZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCY0L3QuNGG0LjQsNC70LjQt9C40YDRg9C10YIg0L/QvtC00L/QuNGB0LrRgyDQvdCwINC40LfQvNC10L3QtdC90LjQtSDQv9C+0LvRjyDQv9GA0LjQutGA0LXQv9C70LXQvdC40Y8g0YTQsNC50LvQsC4g0KTQsNC50LssINC90LUg0L/RgNC+0YjQtdC00YjQuNC5INC/0YDQvtCy0LXRgNC60YMg0YTQvtGA0LzQsNGC0LAg0LjQu9C4INGA0LDQt9C80LXRgNCwLCDQuiDQt9Cw0LrQsNC30YMg0L3QtSDQv9GA0LjQutGA0LXQv9C70Y/QtdGC0YHRjy5cbiAgICAgKi9cbiAgICBwcml2YXRlIGluaXRGaWxlQ2hhbmdlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmFjY2VwdGVkJC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKGZpbGVzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaWxlID0gZmlsZXMuYXQoMCk7XG5cbiAgICAgICAgICAgIGlmIChmaWxlICYmIHRoaXMuZm9ybS5jb250cm9scy5pbWFnZSkge1xuICAgICAgICAgICAgICAgIHRoaXMub25VcGxvYWRGaWxlKGZpbGUsIHRoaXMuZm9ybS5jb250cm9scy5pbWFnZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5pbWFnZT8ucmVzZXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JjQvdC40YbQuNCw0LvQuNC30LjRgNGD0LXRgiDQv9C+0LTQv9C40YHQutGDINC90LAg0LjQt9C80LXQvdC10L3QuNC1INCy0YvQsdGA0LDQvdC90L7Qs9C+INGB0LrQu9Cw0LTQsC5cbiAgICAgKi9cbiAgICBwcml2YXRlIGluaXRXYXJlaG91c2VDaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5jb250cm9scy53YXJlaG91c2VJZC52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcigod2FyZWhvdXNlSWQpID0+IHR1aUlzUHJlc2VudCh3YXJlaG91c2VJZCkgJiYgdGhpcy53YXJlaG91c2VTZXJ2aWNlLmdldEN1cnJlbnRXYXJlaG91c2VJZFNlbGVjdCgpICE9PSB3YXJlaG91c2VJZCksXG4gICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDApLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChpZCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMud2FyZWhvdXNlU2VydmljZS5zZXRXYXJlaG91c2VJZFNlbGVjdENoYW5nZShpZCEpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JjQvdC40YbQuNCw0LvQuNC30LjRgNGD0LXRgiDQv9C+0LTQv9C40YHQutGDINC90LAg0LjQt9C80LXQvdC10L3QuNC1INCw0LTRgNC10YHQsCDQtNC+0YHRgtCw0LLQutC4INC4INCy0YvQsdGA0LDQvdC90L7Qs9C+INGB0LrQu9Cw0LTQsCDQtNC70Y8g0L/QvtC70YPRh9C10L3QuNGPINGB0L/QuNGB0LrQsCDQtNC+0YHRgtGD0L/QvdGL0YUg0LTQsNGCINC00L7RgdGC0LDQstC60LguXG4gICAgICovXG4gICAgcHJpdmF0ZSBpbml0RGVsaXZlcnlEYXRlc0NoYW5nZSgpOiB2b2lkIHtcbiAgICAgICAgbWVyZ2UoXG4gICAgICAgICAgICB0dWlDb250cm9sVmFsdWU8bnVtYmVyIHwgbnVsbD4odGhpcy5mb3JtLmNvbnRyb2xzLmFkZHJlc3NJZCkucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIodHVpSXNQcmVzZW50KSxcbiAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUodGhpcy5kZWJvdW5jZVRpbWVGb3JtQ2hhbmdlKSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKGFkZHJlc3NJZDogbnVtYmVyKSA9PiB0aGlzLmRlbGl2ZXJpZXNCeUFkZHJlc3MoYWRkcmVzc0lkKSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0dWlDb250cm9sVmFsdWU8bnVtYmVyIHwgbnVsbD4odGhpcy5mb3JtLmNvbnRyb2xzLndhcmVob3VzZUlkKS5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcih0dWlJc1ByZXNlbnQpLFxuICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSh0aGlzLmRlYm91bmNlVGltZUZvcm1DaGFuZ2UpLFxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLmZvcm0uY29udHJvbHMuZGVsaXZlcnlUeXBlLnZhbHVlID09PSBTY0RlbGl2ZXJ5VHlwZS5zZWxmX2RlbGl2ZXJ5KSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKHdhcmVob3VzZUlkOiBudW1iZXIpID0+IHRoaXMuZGVsaXZlcmllc0J5V2FyZWhvdXNlKHdhcmVob3VzZUlkKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IHVua25vd24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLmRlbGl2ZXJ5RGF0ZS5kaXNhYmxlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHJldHJ5KCksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRlbGl2ZXJ5RGF0ZXMpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkZWxpdmVyeURhdGVWYWx1ZSA9IHRoaXMuZm9ybS5jb250cm9scy5kZWxpdmVyeURhdGUudmFsdWU7XG5cbiAgICAgICAgICAgICAgICBpZiAoZGVsaXZlcnlEYXRlVmFsdWUgJiYgIWRlbGl2ZXJ5RGF0ZXMuaW5jbHVkZXMoZGVsaXZlcnlEYXRlVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5kZWxpdmVyeURhdGUucmVzZXQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQmNC90LjRhtC40LDQu9C40LfQuNGA0YPQtdGCINC/0L7QtNC/0LjRgdC60YMg0L3QsCDQuNC30LzQtdC90LXQvdC40LUg0L/QvtC70LXQuSDRhNC+0YDQvNGLINC00LvRjyDQsdC70L7QutC40YDQvtCy0LDQvdC40Y8v0LDQutGC0LjQstCw0YbQuNC4INC/0L7Qu9GPINCy0YvQsdC+0YDQsCDQtNCw0YLRiy5cbiAgICAgKi9cbiAgICBwcml2YXRlIGluaXREYXRlRmllbGRBY3RpdmF0aW9uQ2hhbmdlKCk6IHZvaWQge1xuICAgICAgICBtZXJnZShcbiAgICAgICAgICAgIHR1aUNvbnRyb2xWYWx1ZTxTY0RlbGl2ZXJ5VHlwZT4odGhpcy5mb3JtLmNvbnRyb2xzLmRlbGl2ZXJ5VHlwZSksXG4gICAgICAgICAgICB0aGlzLmZvcm0uY29udHJvbHMuY29udHJhZ2VudElkPy52YWx1ZUNoYW5nZXMucGlwZShmaWx0ZXIoKCkgPT4gdGhpcy5mb3JtLmNvbnRyb2xzLmRlbGl2ZXJ5VHlwZS52YWx1ZSA9PT0gU2NEZWxpdmVyeVR5cGUuZGVsaXZlcnkpKSA/PyBvZigpXG4gICAgICAgIClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLmRlbGl2ZXJ5RGF0ZS5kaXNhYmxlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLndhcmVob3VzZUlkLmRpc2FibGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZHJlc3NEZWxpdmVyeURhdGVzLnNldChbXSk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5mb3JtLmNvbnRyb2xzLmRlbGl2ZXJ5VHlwZS52YWx1ZSA9PT0gU2NEZWxpdmVyeVR5cGUuZGVsaXZlcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLmFkZHJlc3NJZC5lbmFibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53YXJlaG91c2VTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgICAgICAuZ2V0RGVsaXZlcnlXYXJlaG91c2UkKClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5waXBlKGZpcnN0KCksIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJ4anMvbm8tbmVzdGVkLXN1YnNjcmliZVxuICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgod2FyZWhvdXNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLndhcmVob3VzZUlkLnBhdGNoVmFsdWUod2FyZWhvdXNlLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmZvcm0uY29udHJvbHMuZGVsaXZlcnlUeXBlLnZhbHVlID09PSBTY0RlbGl2ZXJ5VHlwZS5zZWxmX2RlbGl2ZXJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5hZGRyZXNzSWQuZGlzYWJsZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uY29udHJvbHMud2FyZWhvdXNlSWQuZW5hYmxlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JfQsNC/0YDQsNGI0LjQstCw0LXRgiDQtNCw0YLRiyDQtNC+0YHRgtCw0LLQutC4INC/0L4g0LDQtNGA0LXRgdGDLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFkZHJlc3NJZCDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQsNC00YDQtdGB0LAg0LTQvtGB0YLQsNCy0LrQuC5cbiAgICAgKi9cbiAgICBwcml2YXRlIGRlbGl2ZXJpZXNCeUFkZHJlc3MoYWRkcmVzc0lkOiBudW1iZXIpOiBPYnNlcnZhYmxlPHN0cmluZ1tdPiB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yZGVyc1NlcnZpY2UuZ2V0RGVsaXZlcmllc0RhdGEkKGFkZHJlc3NJZCkucGlwZShcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UgPyBlcnJvci5lcnJvci5tZXNzYWdlIDogdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLmFkZHJlc3NJZC5zZXRFcnJvcnMoe1xuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJSZXNwb25zZTogbWVzc2FnZSA/PyBg0J7RiNC40LHQutCwINGB0LXRgNCy0LXRgNCwOiDQv9C+0LbQsNC70YPQudGB0YLQsCwg0L/QtdGA0LXQt9Cw0LPRgNGD0LfQuNGC0LUg0YHRgtGA0LDQvdC40YbRgyDQuC/QuNC70Lgg0LLRi9C/0L7Qu9C90LjRgtC1INC30LDQv9GA0L7RgSDQv9C+0LfQttC1LmAsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRyZXNzRGVsaXZlcnlEYXRlcy5zZXQoW10pO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0YXAoKGRlbGl2ZXJ5RGF0ZXMpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZHJlc3NEZWxpdmVyeURhdGVzLnNldChkZWxpdmVyeURhdGVzKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0uY29udHJvbHMuZGVsaXZlcnlEYXRlLmVuYWJsZSgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQl9Cw0L/RgNCw0YjQuNCy0LDQtdGCINC00LDRgtGLINGB0LDQvNC+0LLRi9Cy0L7Qt9CwINC/0L4g0YHQutC70LDQtNGDLlxuICAgICAqXG4gICAgICogQHBhcmFtIHdhcmVob3VzZUlkINCY0LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINGB0LrQu9Cw0LTQsC5cbiAgICAgKi9cbiAgICBwcml2YXRlIGRlbGl2ZXJpZXNCeVdhcmVob3VzZSh3YXJlaG91c2VJZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxzdHJpbmdbXT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmRlcnNTZXJ2aWNlLmdldFNlbGZEZWxpdmVyaWVzRGF0YSQod2FyZWhvdXNlSWQpLnBpcGUoXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlID8gZXJyb3IuZXJyb3IubWVzc2FnZSA6IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9scy53YXJlaG91c2VJZC5zZXRFcnJvcnMoe1xuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJSZXNwb25zZTogbWVzc2FnZSA/PyBg0J7RiNC40LHQutCwINGB0LXRgNCy0LXRgNCwOiDQv9C+0LbQsNC70YPQudGB0YLQsCwg0L/QtdGA0LXQt9Cw0LPRgNGD0LfQuNGC0LUg0YHRgtGA0LDQvdC40YbRgyDQuC/QuNC70Lgg0LLRi9C/0L7Qu9C90LjRgtC1INC30LDQv9GA0L7RgSDQv9C+0LfQttC1LmAsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy53YXJlaG91c2VEZWxpdmVyeURhdGVzLnNldChbXSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRhcCgoZGVsaXZlcnlEYXRlcykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMud2FyZWhvdXNlRGVsaXZlcnlEYXRlcy5zZXQoZGVsaXZlcnlEYXRlcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLmRlbGl2ZXJ5RGF0ZS5lbmFibGUoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JfQsNCz0YDRg9C20LDQtdGCINGE0LDQudC7INCyINGE0L7RgNC80YMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZmlsZSDQpNCw0LnQuy5cbiAgICAgKiBAcGFyYW0gZmlsZXNDb250cm9sINCf0L7Qu9C1INGE0LDQudC70LAg0LfQsNC60LDQt9CwLlxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzXG4gICAgcHJpdmF0ZSBvblVwbG9hZEZpbGUoZmlsZTogVHVpRmlsZUxpa2UsIGZpbGVzQ29udHJvbDogRm9ybUNvbnRyb2w8U2NVcGxvYWRlZEZpbGUgfCBudWxsPik6IHZvaWQge1xuICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuXG4gICAgICAgIHJlYWRlci5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyByZXN1bHQgfSA9IHJlYWRlcjtcblxuICAgICAgICAgICAgaWYgKGlzU3RyaW5nKHJlc3VsdCkpIHtcbiAgICAgICAgICAgICAgICBmaWxlc0NvbnRyb2wuc2V0VmFsdWUobmV3IFNjVXBsb2FkZWRGaWxlKGZpbGUubmFtZSwgcmVzdWx0KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUgYXMgdW5rbm93biBhcyBCbG9iKTtcbiAgICB9XG59XG4iLCJAbGV0IHVzZXIgPSB1c2VyJCB8IGFzeW5jO1xuXG48Zm9ybVxuICAgIFtmb3JtR3JvdXBdPVwiZm9ybVwiXG4gICAgc2NGb2N1c0ZpcnN0SW52YWxpZEZpZWxkXG4gICAgW2ZpZWxkT3JkZXJdPVwiWydjb250cmFnZW50SWQnLCAncGF5bWVudFR5cGUnLCAnZGVsaXZlcnlUeXBlJywgJ3dhcmVob3VzZUlkJywgJ2FkZHJlc3NJZCcsICdkZWxpdmVyeURhdGUnLCAnY29tbWVudCddXCJcbiAgICAobmdTdWJtaXQpPVwic3VibWl0KClcIlxuICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtNFwiXG4+XG4gICAgPG5nLXRlbXBsYXRlICNzZWxlY3RMb2FkaW5nPiA8dHVpLWxvYWRlciAvPiA8L25nLXRlbXBsYXRlPlxuXG4gICAgPCEtLSDQmtC+0L3RgtGA0LDQs9C10L3Rgi4gLS0+XG4gICAgQGlmIChjb250cmFnZW50cyQgfCBhc3luYzsgYXMgY29udHJhZ2VudHMpIHtcbiAgICAgICAgQGlmIChjb250cmFnZW50cy5sZW5ndGggPiAxIHx8IHVzZXI/LmlzT3JnKSB7XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxsYWJlbCB0dWlMYWJlbD5cbiAgICAgICAgICAgICAgICAgICAg0JrQvtC90YLRgNCw0LPQtdC90YJcbiAgICAgICAgICAgICAgICAgICAgPHR1aS1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNvbnRyYWdlbnRJZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVDb250ZW50XT1cImNvbnRyYWdlbnRzID8gc3RyaW5naWZ5KGNvbnRyYWdlbnRzKSA6IHNlbGVjdExvYWRpbmdcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICDQmtC+0L3RgtGA0LDQs9C10L3RglxuICAgICAgICAgICAgICAgICAgICAgICAgPHR1aS1kYXRhLWxpc3QgKnR1aURhdGFMaXN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGNvbnRyYWdlbnQgb2YgY29udHJhZ2VudHM7IHRyYWNrIGNvbnRyYWdlbnQuaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpT3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiY29udHJhZ2VudC5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNvbnRyYWdlbnQubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3R1aS1kYXRhLWxpc3Q+XG4gICAgICAgICAgICAgICAgICAgIDwvdHVpLXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgPHR1aS1lcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY29udHJhZ2VudElkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtlcnJvcl09XCJbXSB8IHR1aUZpZWxkRXJyb3IgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICB0dWlMaW5rXG4gICAgICAgICAgICAgICAgICAgIGljb25TdGFydD1cIkB0dWkucGx1c1wiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGRDb250cmFnZW50KClcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm10LTIgYmxvY2tcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAg0J3QvtCy0YvQuVxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgfVxuXG4gICAgPCEtLSDQotC40L8g0L7Qv9C70LDRgtGLLiAtLT5cbiAgICA8bGFiZWwgdHVpTGFiZWw+XG4gICAgICAgINCi0LjQvyDQvtC/0LvQsNGC0YtcbiAgICAgICAgQGxldCBwYXltZW50VHlwZXMgPSBwYXltZW50VHlwZXMkIHwgYXN5bmM7XG4gICAgICAgIDx0dWktc2VsZWN0XG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwYXltZW50VHlwZVwiXG4gICAgICAgICAgICBbdmFsdWVDb250ZW50XT1cInBheW1lbnRUeXBlcyA/IHN0cmluZ2lmeShwYXltZW50VHlwZXMpIDogc2VsZWN0TG9hZGluZ1wiXG4gICAgICAgID5cbiAgICAgICAgICAgINCi0LjQvyDQvtC/0LvQsNGC0YtcbiAgICAgICAgICAgIDx0dWktZGF0YS1saXN0ICp0dWlEYXRhTGlzdD5cbiAgICAgICAgICAgICAgICBAZm9yICh0eXBlIG9mIHBheW1lbnRUeXBlczsgdHJhY2sgdHlwZS5pZCkge1xuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0dWlPcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ0eXBlLmlkXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgdHlwZS5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvdHVpLWRhdGEtbGlzdD5cbiAgICAgICAgPC90dWktc2VsZWN0PlxuICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwYXltZW50VHlwZVwiXG4gICAgICAgICAgICBbZXJyb3JdPVwiW10gfCB0dWlGaWVsZEVycm9yIHwgYXN5bmNcIlxuICAgICAgICAvPlxuICAgICAgICBAaWYgKGlzQ2FzaFBheW1lbnRTZWxlY3RlZCgpKSB7XG4gICAgICAgICAgICA8cCBjbGFzcz1cInRleHQteHMgdGV4dC10dWktc3RhdHVzLXBvc2l0aXZlXCI+0JfQsNC60LDQt9GLINC/0YDQvtC40LfQstC+0LTRj9GC0YHRjyDQv9C+INC/0YDQtdC00L7Qv9C70LDRgtC1PC9wPlxuICAgICAgICB9XG4gICAgPC9sYWJlbD5cblxuICAgIDwhLS0g0J/RgNC10LTRg9C/0YDQtdC20LTQtdC90LjQtSDQviDQvdC10L/QvtC00YLQstC10YDQttC00ZHQvdC90YvRhSDQutC+0L3RgtCw0LrRgtC90YvRhSDQtNCw0L3QvdGL0YUuIC0tPlxuICAgIEBpZiAoIWlzUGhvbmVBcHByb3ZlZCgpIHx8ICFpc0VtYWlsQXBwcm92ZWQoKSkge1xuICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjdW5jb25maXJtZWREYXRhV2FybmluZ1xuICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXR1aS10ZXh0LW5lZ2F0aXZlXCJcbiAgICAgICAgICAgIFtjbGFzcy53YXJuaW5nLXNoYWtlXT1cIndhcm5pbmdTaGFrZSgpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAg0JLQvdC40LzQsNC90LjQtSEg0JTQu9GPINC+0YTQvtGA0LzQu9C10L3QuNGPINC30LDQutCw0LfQsCDQvdC10L7QsdGF0L7QtNC40LzQviDQv9C+0LTRgtCy0LXRgNC00LjRgtGMXG4gICAgICAgICAgICBAaWYgKCFpc1Bob25lQXBwcm92ZWQoKSkge1xuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1ib2xkXCI+INC90L7QvNC10YAg0YLQtdC70LXRhNC+0L3QsCA8L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKCFpc1Bob25lQXBwcm92ZWQoKSAmJiAhaXNFbWFpbEFwcHJvdmVkKCkpIHtcbiAgICAgICAgICAgICAgICA8c3Bhbj4g0LggPC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmICghaXNFbWFpbEFwcHJvdmVkKCkpIHtcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtYm9sZFwiPiDQsNC00YDQtdGBINGN0LvQtdC60YLRgNC+0L3QvdC+0Lkg0L/QvtGH0YLRiyA8L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgIHR1aUxpbmtcbiAgICAgICAgICAgICAgICByb3V0ZXJMaW5rPVwiL3Byb2ZpbGVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgINCyINCy0LDRiNC10Lwg0L/RgNC+0YTQuNC70LVcbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuXG4gICAgPCEtLSDQodC/0L7RgdC+0LEg0LTQvtGB0YLQsNCy0LrQuC4gLS0+XG4gICAgPGxhYmVsIHR1aUxhYmVsPlxuICAgICAgICDQodC/0L7RgdC+0LEg0LTQvtGB0YLQsNCy0LrQuFxuICAgICAgICBAbGV0IGRlbGl2ZXJ5VHlwZXMgPSBkZWxpdmVyeVR5cGVzJCB8IGFzeW5jO1xuICAgICAgICA8dHVpLXNlbGVjdFxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGVsaXZlcnlUeXBlXCJcbiAgICAgICAgICAgIFt2YWx1ZUNvbnRlbnRdPVwiZGVsaXZlcnlUeXBlcyA/IHN0cmluZ2lmeShkZWxpdmVyeVR5cGVzKSA6IHNlbGVjdExvYWRpbmdcIlxuICAgICAgICA+XG4gICAgICAgICAgICDQodC/0L7RgdC+0LEg0LTQvtGB0YLQsNCy0LrQuFxuICAgICAgICAgICAgPHR1aS1kYXRhLWxpc3QgKnR1aURhdGFMaXN0PlxuICAgICAgICAgICAgICAgIEBmb3IgKGRlbGl2ZXJ5IG9mIGRlbGl2ZXJ5VHlwZXM7IHRyYWNrIGRlbGl2ZXJ5LmlkKSB7XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR1aU9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImRlbGl2ZXJ5LmlkXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgZGVsaXZlcnkubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3R1aS1kYXRhLWxpc3Q+XG4gICAgICAgIDwvdHVpLXNlbGVjdD5cbiAgICAgICAgPHR1aS1lcnJvclxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGVsaXZlcnlUeXBlXCJcbiAgICAgICAgICAgIFtlcnJvcl09XCJbXSB8IHR1aUZpZWxkRXJyb3IgfCBhc3luY1wiXG4gICAgICAgIC8+XG4gICAgPC9sYWJlbD5cblxuICAgIDwhLS0g0KHQutC70LDQtC4gLS0+XG4gICAgPGxhYmVsIHR1aUxhYmVsPlxuICAgICAgICDQodC60LvQsNC0XG4gICAgICAgIEBsZXQgd2FyZWhvdXNlcyA9IHdhcmVob3VzZXMkIHwgYXN5bmM7XG4gICAgICAgIDx0dWktc2VsZWN0XG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ3YXJlaG91c2VJZFwiXG4gICAgICAgICAgICBbdmFsdWVDb250ZW50XT1cIndhcmVob3VzZXMgPyBzdHJpbmdpZnkod2FyZWhvdXNlcykgOiBzZWxlY3RMb2FkaW5nXCJcbiAgICAgICAgPlxuICAgICAgICAgICAg0KHQutC70LDQtFxuICAgICAgICAgICAgPHR1aS1kYXRhLWxpc3QgKnR1aURhdGFMaXN0PlxuICAgICAgICAgICAgICAgIEBpZiAoIXRlcm1pbmFsLmlzUnVubmluZ09uVGVybWluYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgQGZvciAod2FyZWhvdXNlIG9mIHdhcmVob3VzZXM7IHRyYWNrIHdhcmVob3VzZS5pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1aU9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ3YXJlaG91c2UuaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHdhcmVob3VzZS5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBAaWYgKHdhcmVob3VzZVNlcnZpY2UuZ2V0Q2F0YWxvZ1dhcmVob3VzZUNoYW5nZSQoKSB8IGFzeW5jOyBhcyB0ZXJtaW5hbFdhcmVob3VzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1aU9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ0ZXJtaW5hbFdhcmVob3VzZS5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdGVybWluYWxXYXJlaG91c2UubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3R1aS1kYXRhLWxpc3Q+XG4gICAgICAgIDwvdHVpLXNlbGVjdD5cbiAgICAgICAgPHR1aS1lcnJvclxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwid2FyZWhvdXNlSWRcIlxuICAgICAgICAgICAgW2Vycm9yXT1cIltdIHwgdHVpRmllbGRFcnJvciB8IGFzeW5jXCJcbiAgICAgICAgLz5cbiAgICA8L2xhYmVsPlxuXG4gICAgPCEtLSDQkNC00YDQtdGBINC00L7RgdGC0LDQstC60LguIC0tPlxuICAgIEBpZiAoaXNEZWxpdmVyeSgpKSB7XG4gICAgICAgIEBsZXQgYWRkcmVzc2VzID0gYWRkcmVzc2VzJCB8IGFzeW5jO1xuICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGxhYmVsIHR1aUxhYmVsPlxuICAgICAgICAgICAgICAgINCQ0LTRgNC10YEg0LTQvtGB0YLQsNCy0LrQuFxuICAgICAgICAgICAgICAgIDx0dWktc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImFkZHJlc3NJZFwiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZUNvbnRlbnRdPVwiYWRkcmVzc2VzID8gc3RyaW5naWZ5KGFkZHJlc3NlcykgOiBzZWxlY3RMb2FkaW5nXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgINCQ0LTRgNC10YEg0LTQvtGB0YLQsNCy0LrQuFxuICAgICAgICAgICAgICAgICAgICA8dHVpLWRhdGEtbGlzdCAqdHVpRGF0YUxpc3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChhZGRyZXNzIG9mIGFkZHJlc3NlczsgdHJhY2sgYWRkcmVzcy5pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpT3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJhZGRyZXNzLmlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGFkZHJlc3MuYWRkcmVzcyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L3R1aS1kYXRhLWxpc3Q+XG4gICAgICAgICAgICAgICAgPC90dWktc2VsZWN0PlxuICAgICAgICAgICAgICAgIEBpZiAoYWRkcmVzc2VzICYmIGFkZHJlc3Nlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgPHR1aS1lcnJvciBlcnJvcj1cItCjINC60L7QvdGC0YDQsNCz0LXQvdGC0LAg0L3QtdGCINCw0LTRgNC10YHQsCDQtNC+0YHRgtCw0LLQutC4XCIgLz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPHR1aS1lcnJvclxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJhZGRyZXNzSWRcIlxuICAgICAgICAgICAgICAgICAgICBbZXJyb3JdPVwiW10gfCB0dWlGaWVsZEVycm9yIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICB0dWlMaW5rXG4gICAgICAgICAgICAgICAgaWNvblN0YXJ0PVwiQHR1aS5wbHVzXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkRGVsaXZlcnlBZGRyZXNzKClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwibXQtMiBibG9ja1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAg0J3QvtCy0YvQuVxuICAgICAgICAgICAgPC9hPlxuICAgICAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICA8IS0tINCU0LDRgtCwINC00L7RgdGC0LDQstC60Lgv0YHQsNC80L7QstGL0LLQvtC30LAuIC0tPlxuICAgIDxsYWJlbCB0dWlMYWJlbD5cbiAgICAgICAg0JbQtdC70LDQtdC80LDRjyDQtNCw0YLQsCB7eyBpc0RlbGl2ZXJ5KCkgPyAn0LTQvtGB0YLQsNCy0LrQuCcgOiAn0YHQsNC80L7QstGL0LLQvtC30LAnIH19XG4gICAgICAgIDx0dWktaW5wdXQtZGF0ZVxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGVsaXZlcnlEYXRlXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZEl0ZW1IYW5kbGVyXT1cImRlbGl2ZXJ5RGF0ZUZpbHRlclwiXG4gICAgICAgICAgICBbbWFya2VySGFuZGxlcl09XCJkZWxpdmVyeURhdGVNYXJrZXJcIlxuICAgICAgICAgICAgW21heF09XCJtYXhEZWxpdmVyeURheSgpXCJcbiAgICAgICAgICAgIFttaW5dPVwibWluRGVsaXZlcnlEYXkoKVwiXG4gICAgICAgID5cbiAgICAgICAgICAgINCW0LXQu9Cw0LXQvNCw0Y8g0LTQsNGC0LAge3sgaXNEZWxpdmVyeSgpID8gJ9C00L7RgdGC0LDQstC60LgnIDogJ9GB0LDQvNC+0LLRi9Cy0L7Qt9CwJyB9fVxuICAgICAgICA8L3R1aS1pbnB1dC1kYXRlPlxuICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkZWxpdmVyeURhdGVcIlxuICAgICAgICAgICAgW2Vycm9yXT1cIltdIHwgdHVpRmllbGRFcnJvciB8IGFzeW5jXCJcbiAgICAgICAgLz5cbiAgICA8L2xhYmVsPlxuXG4gICAgPCEtLSDQmtC+0LzQvNC10L3RgtCw0YDQuNC5INC60LvQuNC10L3RgtCwLiAtLT5cbiAgICA8bGFiZWwgdHVpTGFiZWw+XG4gICAgICAgINCa0L7QvNC80LXQvdGC0LDRgNC40Lkg0LrQu9C40LXQvdGC0LAg0Log0LfQsNC60LDQt9GDXG4gICAgICAgIDx0dWktdGV4dGFyZWFcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNvbW1lbnRcIlxuICAgICAgICAgICAgW2V4cGFuZGFibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbcm93c109XCIxNVwiXG4gICAgICAgID5cbiAgICAgICAgICAgINCS0LLQtdC00LjRgtC1INGC0LXQutGB0YJcbiAgICAgICAgPC90dWktdGV4dGFyZWE+XG4gICAgICAgIDx0dWktZXJyb3JcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNvbW1lbnRcIlxuICAgICAgICAgICAgW2Vycm9yXT1cIltdIHwgdHVpRmllbGRFcnJvciB8IGFzeW5jXCJcbiAgICAgICAgLz5cbiAgICA8L2xhYmVsPlxuXG4gICAgPCEtLSDQn9GA0LjQutGA0LXQv9C70LXQvdC40LUg0YTQsNC50LvQsCDQuiDQt9Cw0LrQsNC30YMuIC0tPlxuICAgIDxkaXY+XG4gICAgICAgIEBpZiAoIWNvbnRyb2xGaWxlLnZhbHVlKSB7XG4gICAgICAgICAgICA8bGFiZWwgdHVpSW5wdXRGaWxlcz5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgYWNjZXB0PVwiaW1hZ2UvKlwiXG4gICAgICAgICAgICAgICAgICAgIHR1aUlucHV0RmlsZXNcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xGaWxlXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgfVxuXG4gICAgICAgIDx0dWktZmlsZXMgY2xhc3M9XCJ0dWktc3BhY2VfdG9wLTFcIj5cbiAgICAgICAgICAgIEBpZiAoY29udHJvbEZpbGUudmFsdWUgfCB0dWlGaWxlUmVqZWN0ZWQ6IHsgYWNjZXB0OiAnaW1hZ2UvKicgfSB8IGFzeW5jOyBhcyBmaWxlKSB7XG4gICAgICAgICAgICAgICAgPHR1aS1maWxlXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlPVwiZXJyb3JcIlxuICAgICAgICAgICAgICAgICAgICBbZmlsZV09XCJmaWxlXCJcbiAgICAgICAgICAgICAgICAgICAgKHJlbW92ZSk9XCJyZW1vdmVGaWxlKClcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBmb3IgKGZpbGUgb2YgYWNjZXB0ZWQkIHwgYXN5bmM7IHRyYWNrIGZpbGUubmFtZSkge1xuICAgICAgICAgICAgICAgIDx0dWktZmlsZVxuICAgICAgICAgICAgICAgICAgICBbZmlsZV09XCJmaWxlXCJcbiAgICAgICAgICAgICAgICAgICAgKHJlbW92ZSk9XCJyZW1vdmVGaWxlKClcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvdHVpLWZpbGVzPlxuXG4gICAgICAgIDx0dWktZXJyb3JcbiAgICAgICAgICAgIFtlcnJvcl09XCJbJ21heExlbmd0aCddIHwgdHVpRmllbGRFcnJvciB8IGFzeW5jXCJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sRmlsZVwiXG4gICAgICAgIC8+XG4gICAgICAgIDxwIGNsYXNzPVwidHVpLWZvcm1fX2ZpZWxkLW5vdGVcIj7QndCw0L/RgNC40LzQtdGALCDRhNC+0YLQvtCz0YDQsNGE0LjRjiDQv9C+0LLRgNC10LbQtNC10L3QuNC5INC4INC00LXRhNGE0LXQutGC0L7Qsiwg0YfRgtC+INC/0L7RgdC70YPQttC40YIg0LTQvtC60LDQt9Cw0YLQtdC70YzRgdGC0LLQvtC8INC90LXRgdC+0L7RgtCy0LXRgtGB0YLQstC40Y8g0LfQsNGP0LLQu9C10L3QvdC+0LPQviDQutCw0YfQtdGB0YLQstCwINGC0L7QstCw0YDQsC48L3A+XG4gICAgPC9kaXY+XG48L2Zvcm0+XG4iXX0=
|
|
556
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtb3JkZXItZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvb3JkZXIvb3JkZXItZm9ybS9zYy1vcmRlci1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9vcmRlci9vcmRlci1mb3JtL3NjLW9yZGVyLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNFZBQTRWO0FBRTVWLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQWMsTUFBTSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsTCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUUsT0FBTyxFQUFtQixXQUFXLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBb0IsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekksT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFDSCxzQkFBc0IsRUFDdEIsU0FBUyxFQUNULFlBQVksRUFFWixtQkFBbUIsRUFDbkIsbUJBQW1CLEVBQ25CLHdCQUF3QixFQUN4QixjQUFjLEVBT2QsU0FBUyxFQUNULGVBQWUsRUFDZixhQUFhLEVBQ2IsbUJBQW1CLEVBQ25CLFdBQVcsRUFDWCxjQUFjLEVBRWQsa0JBQWtCLEVBQ2xCLGtCQUFrQixHQUNyQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFB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QUFPO3dCQUNQLFNBQVM7d0JBQ1QsaUJBQWlCO3dCQUNqQixtQkFBbUI7d0JBQ25CLGlDQUFpQztxQkFDcEMsYUFDVSxDQUFDLGtCQUFrQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvbixyeGpzL25vLXNoYXJlcmVwbGF5LEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtZW51bS1jb21wYXJpc29uLEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZCxAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFzc2lnbm1lbnQsQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzLEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtY2FsbCxAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFyZ3VtZW50LHNlY3VyaXR5L2RldGVjdC1vYmplY3QtaW5qZWN0aW9uICovXG5cbmltcG9ydCB7IEFzeW5jUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBEZXN0cm95UmVmLCBFbGVtZW50UmVmLCBpbmplY3QsIGlucHV0LCBPbkluaXQsIG91dHB1dCwgU2lnbmFsLCBzaWduYWwsIHZpZXdDaGlsZCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCwgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUm91dGVyTGluayB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICAgIElTX1JVTk5JTkdfT05fVEVSTUlOQUwsXG4gICAgSVNfU0VSVkVSLFxuICAgIFNDX1VTRVJfSU5GTyxcbiAgICBTY0NvbnRyYWdlbnQsXG4gICAgU2NDb250cmFnZW50U2VydmljZSxcbiAgICBTY0NvbnZlcnRlcnNTZXJ2aWNlLFxuICAgIFNjRGVsaXZlcnlBZGRyZXNzU2VydmljZSxcbiAgICBTY0RlbGl2ZXJ5VHlwZSxcbiAgICBTY0lBcGlFcnJvclJlc3BvbnNlLFxuICAgIFNjSURlbGl2ZXJ5QWRkcmVzcyxcbiAgICBTY0lOZXdPcmRlcixcbiAgICBTY0lSZWZlcmVuY2VzVHlwZXMsXG4gICAgU2NJVGVybWluYWxQcm92aWRlcixcbiAgICBTY0lXYXJlaG91c2UsXG4gICAgU2NPcGZMaXN0LFxuICAgIFNjT3JkZXJzU2VydmljZSxcbiAgICBTY1BheW1lbnRUeXBlLFxuICAgIFNjUmVmZXJlbmNlc1NlcnZpY2UsXG4gICAgU2NVSVNlcnZpY2UsXG4gICAgU2NVcGxvYWRlZEZpbGUsXG4gICAgU2NVc2VyLFxuICAgIFNjV2FyZWhvdXNlU2VydmljZSxcbiAgICBURVJNSU5BTF9QUk9WSURFUlMsXG59IGZyb20gJ0BzbmFiY2VudHIvY2xpZW50LWNvcmUnO1xuaW1wb3J0IHsgVHVpQ29udGV4dCwgdHVpQ29udHJvbFZhbHVlLCBUdWlEYXksIHR1aUlzUHJlc2VudCwgVHVpU3RyaW5nSGFuZGxlciwgVHVpVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAnQHRhaWdhLXVpL2Nkayc7XG5pbXBvcnQgeyBUdWlEYXRhTGlzdENvbXBvbmVudCwgVHVpRGlhbG9nU2VydmljZSwgVHVpRXJyb3IsIFR1aUxhYmVsLCBUdWlMaW5rLCBUdWlMb2FkZXIsIFR1aU1hcmtlckhhbmRsZXIsIFR1aU9wdGlvbiB9IGZyb20gJ0B0YWlnYS11aS9jb3JlJztcbmltcG9ydCB7IFR1aURhdGFMaXN0RGlyZWN0aXZlIH0gZnJvbSAnQHRhaWdhLXVpL2NvcmUvY29tcG9uZW50cy9kYXRhLWxpc3QnO1xuaW1wb3J0IHsgVHVpRmllbGRFcnJvclBpcGUsIFR1aUZpbGUsIFR1aUZpbGVMaWtlLCBUdWlGaWxlUmVqZWN0ZWRQaXBlLCB0dWlGaWxlc0FjY2VwdGVkLCBUdWlGaWxlc0NvbXBvbmVudCwgVHVpSW5wdXRGaWxlcywgVHVpSW5wdXRGaWxlc0RpcmVjdGl2ZSB9IGZyb20gJ0B0YWlnYS11aS9raXQnO1xuaW1wb3J0IHsgVHVpSW5wdXREYXRlTW9kdWxlLCBUdWlTZWxlY3RNb2R1bGUsIFR1aVRleHRhcmVhTW9kdWxlIH0gZnJvbSAnQHRhaWdhLXVpL2xlZ2FjeSc7XG5pbXBvcnQgeyBQb2x5bW9ycGhldXNDb21wb25lbnQgfSBmcm9tICdAdGFpZ2EtdWkvcG9seW1vcnBoZXVzJztcbmltcG9ydCB7IGZvcm1hdCwgaXNWYWxpZCwgcGFyc2UgfSBmcm9tICdkYXRlLWZucyc7XG5pbXBvcnQgeyBpc0FycmF5LCBpc1N0cmluZyB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBjb21iaW5lTGF0ZXN0LCBkZWJvdW5jZVRpbWUsIGZpbHRlciwgZmlyc3QsIG1hcCwgbWVyZ2UsIE9ic2VydmFibGUsIG9mLCByZXRyeSwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCwgdGFwLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFNjQWRkQ29udHJhZ2VudERpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbnRyYWdlbnRzL2FkZC1jb250cmFnZW50LWRpYWxvZy9zYy1hZGQtY29udHJhZ2VudC1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IFNjQWRkRGVsaXZlcnlBZGRyZXNzRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZGVsaXZlcnktYWRkcmVzcy9hZGQtZGVsaXZlcnktYWRkcmVzcy1kaWFsb2cvc2MtYWRkLWRlbGl2ZXJ5LWFkZHJlc3MtZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTY0ZvY3VzRmlyc3RJbnZhbGlkRmllbGREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3NjLWZvY3VzLWZpcnN0LWludmFsaWQtZmllbGQuZGlyZWN0aXZlJztcbmltcG9ydCB7IElOZXdPcmRlckZvcm0gfSBmcm9tICcuLi9tb2RlbHMvaS1uZXctb3JkZXItZm9ybSc7XG5pbXBvcnQgeyBTQ19PUkRFUl9GT1JNX0NPTkZJRyB9IGZyb20gJy4vc2Mtb3JkZXItZm9ybS5jb25maWcnO1xuXG4vKipcbiAqINCi0LjQv9GLLCDQutC+0YLQvtGA0YvQtSDQstC+0LfQvNC+0LbQvdC+INC/0YDQtdC+0LHRgNCw0LfQvtCy0LDRgtGMINCyINC30L3QsNGH0LXQvdC40LUsINC+0YLQvtCx0YDQsNC20LDQtdC80L7QtSDQsiDQv9C+0LvQtSDQstCy0L7QtNCwLlxuICovXG50eXBlIFNlbGVjdFR5cGUgPVxuICAgIHwgU2NJUmVmZXJlbmNlc1R5cGVzPFNjUGF5bWVudFR5cGUsIHR5cGVvZiBTY1BheW1lbnRUeXBlPlxuICAgIHwgU2NDb250cmFnZW50XG4gICAgfCBTY0lSZWZlcmVuY2VzVHlwZXM8U2NEZWxpdmVyeVR5cGUsIHR5cGVvZiBTY0RlbGl2ZXJ5VHlwZT5cbiAgICB8IFNjSVdhcmVob3VzZVxuICAgIHwgU2NJRGVsaXZlcnlBZGRyZXNzO1xuXG4vKipcbiAqINCk0L7RgNC80LAg0L7RhNC+0YDQvNC70LXQvdC40Y8g0LfQsNC60LDQt9CwLlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnc2Mtb3JkZXItZm9ybScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NjLW9yZGVyLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3NjLW9yZGVyLWZvcm0uY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgICAgIFJvdXRlckxpbmssXG4gICAgICAgIFR1aUxvYWRlcixcbiAgICAgICAgVHVpTGFiZWwsXG4gICAgICAgIFR1aVNlbGVjdE1vZHVsZSxcbiAgICAgICAgVHVpRGF0YUxpc3REaXJlY3RpdmUsXG4gICAgICAgIFR1aURhdGFMaXN0Q29tcG9uZW50LFxuICAgICAgICBUdWlPcHRpb24sXG4gICAgICAgIFR1aUVycm9yLFxuICAgICAgICBUdWlMaW5rLFxuICAgICAgICBUdWlJbnB1dERhdGVNb2R1bGUsXG4gICAgICAgIFR1aVRleHRhcmVhTW9kdWxlLFxuICAgICAgICBUdWlJbnB1dEZpbGVzLFxuICAgICAgICBUdWlJbnB1dEZpbGVzRGlyZWN0aXZlLFxuICAgICAgICBUdWlGaWxlc0NvbXBvbmVudCxcbiAgICAgICAgVHVpRmlsZSxcbiAgICAgICAgQXN5bmNQaXBlLFxuICAgICAgICBUdWlGaWVsZEVycm9yUGlwZSxcbiAgICAgICAgVHVpRmlsZVJlamVjdGVkUGlwZSxcbiAgICAgICAgU2NGb2N1c0ZpcnN0SW52YWxpZEZpZWxkRGlyZWN0aXZlLFxuICAgIF0sXG4gICAgcHJvdmlkZXJzOiBbVEVSTUlOQUxfUFJPVklERVJTXSxcbn0pXG5leHBvcnQgY2xhc3MgU2NPcmRlckZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIC8qKlxuICAgICAqINCi0YDQtdCx0L7QstCw0YLRjCDQv9C+0LTRgtCy0LXRgNC20LTRkdC90L3Ri9C1INC60L7QvdGC0LDQutGC0L3Ri9C1INC00LDQvdC90YvQtSDQtNC70Y8g0L7RhNC+0YDQvNC70LXQvdC40Y8uINCU0LvRjyDRh9C10YDQvdC+0LLQuNC60LAg4oCUIGBmYWxzZWAuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGVuZm9yY2VBcHByb3ZlZENvbnRhY3RzID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG5cbiAgICAvKipcbiAgICAgKiDQodC+0LHRi9GC0LjQtSDQvtGC0L/RgNCw0LLQutC4INCy0LDQu9C40LTQvdC+0Lkg0YTQvtGA0LzRiyDQvtGE0L7RgNC80LvQtdC90LjRjy4g0J/QvtC70LXQt9C90LDRjyDQvdCw0LPRgNGD0LfQutCwIOKAlCDRgdGL0YDRi9C1INC30L3QsNGH0LXQvdC40Y8g0YTQvtGA0LzRiy5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgb3JkZXJTdWJtaXQgPSBvdXRwdXQ8U2NJTmV3T3JkZXI+KCk7XG5cbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0YHQv9GA0LDQstC+0YfQvdC40LrQvtCyLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVmZXJlbmNlc1NlcnZpY2UgPSBpbmplY3QoU2NSZWZlcmVuY2VzU2VydmljZSk7XG5cbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0YDQsNCx0L7RgtGLINGBINC60L7QvdGC0YDQsNCz0LXQvdGC0LDQvNC4LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY29udHJhZ2VudFNlcnZpY2UgPSBpbmplY3QoU2NDb250cmFnZW50U2VydmljZSk7XG5cbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0YDQsNCx0L7RgtGLINGBINCw0LTRgNC10YHQsNC80Lgg0LTQvtGB0YLQsNCy0LrQuC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlbGl2ZXJ5QWRkcmVzc1NlcnZpY2UgPSBpbmplY3QoU2NEZWxpdmVyeUFkZHJlc3NTZXJ2aWNlKTtcblxuICAgIC8qKlxuICAgICAqINCh0LXRgNCy0LjRgSDQtNC70Y8g0YDQsNCx0L7RgtGLINGB0L4g0YHQutC70LDQtNCw0LzQuC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgd2FyZWhvdXNlU2VydmljZSA9IGluamVjdChTY1dhcmVob3VzZVNlcnZpY2UpO1xuXG4gICAgLyoqXG4gICAgICog0KHQtdGA0LLQuNGBINC00LvRjyDRgNCw0LHQvtGC0Ysg0YEg0LfQsNC60LDQt9Cw0LzQuCAo0LfQsNCz0YDRg9C30LrQsCDQtNCw0YIg0LTQvtGB0YLQsNCy0LrQuC/RgdCw0LzQvtCy0YvQstC+0LfQsCkuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBvcmRlcnNTZXJ2aWNlID0gaW5qZWN0KFNjT3JkZXJzU2VydmljZSk7XG5cbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0LTQu9GPINGA0LDQsdC+0YLRiyDRgSBVSS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHVpU2VydmljZSA9IGluamVjdChTY1VJU2VydmljZSk7XG5cbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0LrQvtC90LLQtdGA0YLQsNGG0LjQuCDQtNCw0L3QvdGL0YUuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb252ZXJ0ZXJzU2VydmljZSA9IGluamVjdChTY0NvbnZlcnRlcnNTZXJ2aWNlKTtcblxuICAgIC8qKlxuICAgICAqINCh0LXRgNCy0LjRgSDRgNCw0LHQvtGC0Ysg0YEg0LTQuNCw0LvQvtCz0L7QstGL0Lwg0L7QutC90L7QvC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRpYWxvZyA9IGluamVjdChUdWlEaWFsb2dTZXJ2aWNlKTtcblxuICAgIC8qKlxuICAgICAqINCf0YDQvtCy0LDQudC00LXRgCDQtNCw0L3QvdGL0YUg0L4g0YLQtdGA0LzQuNC90LDQu9C1LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSB0ZXJtaW5hbCA9IGluamVjdDxTY0lUZXJtaW5hbFByb3ZpZGVyPihJU19SVU5OSU5HX09OX1RFUk1JTkFMKTtcblxuICAgIC8qKlxuICAgICAqINCf0L7RgtC+0Log0LTQsNC90L3Ri9GFINC+INGC0LXQutGD0YnQtdC8INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQtS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgdXNlciQgPSBpbmplY3Q8T2JzZXJ2YWJsZTxTY1VzZXI+PihTQ19VU0VSX0lORk8pO1xuXG4gICAgLyoqXG4gICAgICog0J3QsNGB0YLRgNC+0LnQutC4INGE0L7RgNC80Ysg0L7RhNC+0YDQvNC70LXQvdC40Y8g0LfQsNC60LDQt9CwLiDQldGB0LvQuCDQvdC1INC/0YDQtdC00L7RgdGC0LDQstC70LXQvdGLLCDQvNC10YLQsNC00LDQvdC90YvQtSDRhNC+0YDQvNGLINC90LUg0YHQvtGF0YDQsNC90Y/RjtGC0YHRjy5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZyA9IGluamVjdChTQ19PUkRFUl9GT1JNX0NPTkZJRywgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICAgIC8qKlxuICAgICAqINCf0YDQuNC30L3QsNC6INCy0YvQv9C+0LvQvdC10L3QuNGPINGB0LrRgNC40L/RgtCwINC90LAg0YHQtdGA0LLQtdGA0LUuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBpc1NlcnZlciA9IGluamVjdChJU19TRVJWRVIpO1xuXG4gICAgLyoqXG4gICAgICog0KHRgdGL0LvQutCwINC00LvRjyDQsNCy0YLQvtC80LDRgtC40YfQtdGB0LrQvtCz0L4g0YPQv9GA0LDQstC70LXQvdC40Y8g0YPQvdC40YfRgtC+0LbQtdC90LjQtdC8INC30LDQstC40YHQuNC80L7RgdGC0LXQuS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgICAvKipcbiAgICAgKiDQl9Cw0LTQtdGA0LbQutCwINGB0YfQuNGC0YvQstCw0L3QuNGPINGB0LjQs9C90LDQu9C+0LIg0YTQvtGA0LzRiywg0LTQu9GPINC40LfQsdC10LbQsNC90LjRjyDQu9C40YjQvdC40YUg0L7QsdGA0LDQsdC+0YLQvtC6INC/0YDQuCDRgdC80LXQvdC1INC30L3QsNGH0LXQvdC40LkuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZWJvdW5jZVRpbWVGb3JtQ2hhbmdlID0gNTA7XG5cbiAgICAvKipcbiAgICAgKiDQpNC+0YDQvNCwINGB0L7Qt9C00LDQvdC40Y8g0LfQsNC60LDQt9CwLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBmb3JtID0gbmV3IEZvcm1Hcm91cDxJTmV3T3JkZXJGb3JtPih7XG4gICAgICAgIGNvbnRyYWdlbnRJZDogbmV3IEZvcm1Db250cm9sPG51bWJlciB8IG51bGw+KG51bGwsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgICAgICBwYXltZW50VHlwZTogbmV3IEZvcm1Db250cm9sPFNjUGF5bWVudFR5cGUgfCBudWxsPih7IHZhbHVlOiBudWxsLCBkaXNhYmxlZDogdHJ1ZSB9LCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICAgICAgZGVsaXZlcnlUeXBlOiBuZXcgRm9ybUNvbnRyb2w8U2NEZWxpdmVyeVR5cGUgfCBudWxsPih7IHZhbHVlOiBudWxsLCBkaXNhYmxlZDogdHJ1ZSB9LCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICAgICAgZGVsaXZlcnlEYXRlOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4oeyB2YWx1ZTogbnVsbCwgZGlzYWJsZWQ6IHRydWUgfSwgW1xuICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcbiAgICAgICAgICAgICh7IHZhbHVlIH06IEFic3RyYWN0Q29udHJvbDxzdHJpbmcgfCBudWxsPik6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXZhbHVlIHx8IHRoaXMuZGVsaXZlcnlEYXRlcygpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlICYmICF0aGlzLmRlbGl2ZXJ5RGF0ZXMoKS5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgc2VydmVyUmVzcG9uc2U6ICfQo9C60LDQttC40YLQtSDQutC+0YDRgNC10LrRgtC90YPRjiDQtNCw0YLRgywg0LjQu9C4INCy0YvQsdC10YDQuNGC0LUg0LjQtyDQsNC60YLQuNCy0L3Ri9GFINC00LDRgiDQutCw0LvQtdC90LTQsNGA0Y8nIH07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9LFxuICAgICAgICBdKSxcbiAgICAgICAgd2FyZWhvdXNlSWQ6IG5ldyBGb3JtQ29udHJvbDxudW1iZXIgfCBudWxsPih7IHZhbHVlOiBudWxsLCBkaXNhYmxlZDogdHJ1ZSB9LCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICAgICAgYWRkcmVzc0lkOiBuZXcgRm9ybUNvbnRyb2w8bnVtYmVyIHwgbnVsbD4oeyB2YWx1ZTogbnVsbCwgZGlzYWJsZWQ6IHRydWUgfSwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgICAgIGNvbW1lbnQ6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsKSxcbiAgICAgICAgaW1hZ2U6IG5ldyBGb3JtQ29udHJvbDxTY1VwbG9hZGVkRmlsZSB8IG51bGw+KG51bGwpLFxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICog0J/QvtC70LUg0YTQsNC50LvQsC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29udHJvbEZpbGUgPSBuZXcgRm9ybUNvbnRyb2w8RmlsZSB8IG51bGw+KG51bGwpO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIE9ic2VydmFibGV9INGB0L/QuNGB0LrQsCDQv9C+0LTRgtCy0LXRgNC20LTRkdC90L3Ri9GFINGE0LDQudC70L7Qsi5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgYWNjZXB0ZWQkID0gdGhpcy5jb250cm9sRmlsZS52YWx1ZUNoYW5nZXMucGlwZShtYXAoKCkgPT4gdHVpRmlsZXNBY2NlcHRlZCh0aGlzLmNvbnRyb2xGaWxlKSkpO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0LosINGH0YLQviDQstC60LvRjtGH0ZHQvSDRgNC10LbQuNC8INCw0L3QuNC80LDRhtC40Lgg0L/RgNC10LTRg9C/0YDQtdC20LTQtdC90LjRjyDQviDQvdC10L/QvtC00YLQstC10YDQttC00ZHQvdC90YvRhSDQtNCw0L3QvdGL0YUuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHdhcm5pbmdTaGFrZSA9IHNpZ25hbChmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiwg0YfRgtC+INC60L7QvdGC0YDQsNCz0LXQvdGCINGP0LLQu9GP0LXRgtGB0Y8g0YTQuNC30LjRh9C10YHQutC40Lwg0LvQuNGG0L7QvC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXNJbmRpdmlkdWFsID0gc2lnbmFsPGJvb2xlYW4+KHRydWUpO1xuXG4gICAgLyoqXG4gICAgICog0KHQv9C40YHQvtC6INCy0L7Qt9C80L7QttC90YvRhSDQtNCw0YIg0YHQsNC80L7QstGL0LLQvtC30LAg0YHQviDRgdC60LvQsNC00LAuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSB3YXJlaG91c2VEZWxpdmVyeURhdGVzID0gc2lnbmFsPHN0cmluZ1tdPihbXSk7XG5cbiAgICAvKipcbiAgICAgKiDQodC/0LjRgdC+0Log0LLQvtC30LzQvtC20L3Ri9GFINC00LDRgiDQtNC+0YHRgtCw0LLQutC4LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYWRkcmVzc0RlbGl2ZXJ5RGF0ZXMgPSBzaWduYWw8c3RyaW5nW10+KFtdKTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDRgdC/0LjRgdC60LAg0LrQvtC90YLRgNCw0LPQtdC90YLQvtCyINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29udHJhZ2VudHMkOiBPYnNlcnZhYmxlPFNjQ29udHJhZ2VudFtdIHwgbnVsbD4gPSB0aGlzLmNvbnRyYWdlbnRTZXJ2aWNlLmNvbnRyYWdlbnRzJDtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDRgdC/0LjRgdC60LAg0LDQtNGA0LXRgdC+0LIg0LrQvtC90YLRgNCw0LPQtdC90YLQsC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgYWRkcmVzc2VzJDogT2JzZXJ2YWJsZTxTY0lEZWxpdmVyeUFkZHJlc3NbXSB8IG51bGw+ID0gdGhpcy5kZWxpdmVyeUFkZHJlc3NTZXJ2aWNlLmRlbGl2ZXJ5QWRkcmVzc2VzJC5waXBlKFxuICAgICAgICB0YXAoKGRlbGl2ZXJ5QWRkcmVzc2VzKSA9PiB7XG4gICAgICAgICAgICBpZiAoZGVsaXZlcnlBZGRyZXNzZXMgJiYgdGhpcy5mb3JtLmNvbnRyb2xzLmFkZHJlc3NJZC52YWx1ZSAmJiAhZGVsaXZlcnlBZGRyZXNzZXMuc29tZSgoZGVsaXZlcnkpID0+IGRlbGl2ZXJ5LmlkID09PSB0aGlzLmZvcm0uY29udHJvbHMuYWRkcmVzc0lkLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5hZGRyZXNzSWQucmVzZXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIE9ic2VydmFibGV9INGB0L/QuNGB0LrQsCDRgdC60LvQsNC00L7Qsi5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgd2FyZWhvdXNlcyQ6IE9ic2VydmFibGU8U2NJV2FyZWhvdXNlW10+ID0gdGhpcy53YXJlaG91c2VTZXJ2aWNlLmdldFdhcmVob3VzZXMkKCk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgT2JzZXJ2YWJsZX0g0J7Qn9CkINCy0YvQsdGA0LDQvdC90L7Qs9C+INC60L7QvdGC0YDQsNCz0LXQvdGC0LAuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBvcGYkID0gdHVpQ29udHJvbFZhbHVlPG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQ+KHRoaXMuZm9ybS5jb250cm9scy5jb250cmFnZW50SWQpLnBpcGUoXG4gICAgICAgIGZpbHRlcih0dWlJc1ByZXNlbnQpLFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLnBheW1lbnRUeXBlLmVuYWJsZSgpO1xuICAgICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLmRlbGl2ZXJ5VHlwZS5lbmFibGUoKTtcbiAgICAgICAgfSksXG4gICAgICAgIHN3aXRjaE1hcCgoc2VsZWN0Q29udHJhZ2VudElkKSA9PlxuICAgICAgICAgICAgdGhpcy5jb250cmFnZW50cyQucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIodHVpSXNQcmVzZW50KSxcbiAgICAgICAgICAgICAgICBtYXAoKGNvbnRyYWdlbnRzOiBTY0NvbnRyYWdlbnRbXSkgPT4gY29udHJhZ2VudHMuZmluZCgoY29udHJhZ2VudCkgPT4gY29udHJhZ2VudC5pZCA9PT0gc2VsZWN0Q29udHJhZ2VudElkKSksXG4gICAgICAgICAgICAgICAgbWFwKChjb250cmFnZW50KSA9PiBjb250cmFnZW50Py5vcGYpLFxuICAgICAgICAgICAgICAgIHRhcCgob3BmKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNJbmRpdmlkdWFsLnNldChvcGY/LmlkID09PSBTY09wZkxpc3QuaW5kaXZpZHVhbC52YWx1ZU9mKCkpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgT2JzZXJ2YWJsZX0g0YLQuNC/0L7QsiDQvtC/0LvQsNGC0Ysg0LfQsNC60LDQt9CwLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBwYXltZW50VHlwZXMkOiBPYnNlcnZhYmxlPEFycmF5PFNjSVJlZmVyZW5jZXNUeXBlczxTY1BheW1lbnRUeXBlLCB0eXBlb2YgU2NQYXltZW50VHlwZT4+PiA9IHRoaXMub3BmJC5waXBlKFxuICAgICAgICBtYXAoKG9wZikgPT4gb3BmICYmIChvcGYuaWQgPT09IFNjT3BmTGlzdC5pbmRpdmlkdWFsID8gU2NQYXltZW50VHlwZS5iZXpuYWwyIDogU2NQYXltZW50VHlwZS5vbmxpbmUpKSxcbiAgICAgICAgc3dpdGNoTWFwKChwYXltZW50VHlwZUZpbHRlcikgPT5cbiAgICAgICAgICAgIHRoaXMucmVmZXJlbmNlc1NlcnZpY2UucGF5bWVudFR5cGVzJC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgocGF5bWVudFR5cGVzKSA9PiAocGF5bWVudFR5cGVGaWx0ZXIgPyBwYXltZW50VHlwZXMgOiBbXSkpLFxuICAgICAgICAgICAgICAgIG1hcCgocGF5bWVudFR5cGVzKSA9PiBwYXltZW50VHlwZXMuZmlsdGVyKCh0eXBlKSA9PiB0eXBlLmlkICE9PSBwYXltZW50VHlwZUZpbHRlcikpLFxuICAgICAgICAgICAgICAgIHRhcCgocGF5bWVudFR5cGVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmZvcm0uY29udHJvbHMucGF5bWVudFR5cGUudmFsdWUgJiYgIXBheW1lbnRUeXBlcy5zb21lKChwYXltZW50KSA9PiBwYXltZW50LmlkID09PSB0aGlzLmZvcm0uY29udHJvbHMucGF5bWVudFR5cGUudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uY29udHJvbHMucGF5bWVudFR5cGUucmVzZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZm9ybS5jb250cm9scy5wYXltZW50VHlwZS52YWx1ZSAmJiBwYXltZW50VHlwZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uY29udHJvbHMucGF5bWVudFR5cGUucGF0Y2hWYWx1ZShwYXltZW50VHlwZXNbMF0uaWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgT2JzZXJ2YWJsZX0g0YLQuNC/0L7QsiDQtNC+0YHRgtCw0LLQutC4INC30LDQutCw0LfQsC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGVsaXZlcnlUeXBlcyQ6IE9ic2VydmFibGU8QXJyYXk8U2NJUmVmZXJlbmNlc1R5cGVzPFNjRGVsaXZlcnlUeXBlLCB0eXBlb2YgU2NEZWxpdmVyeVR5cGU+Pj4gPSB0aGlzLm9wZiQucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKChvcGYpID0+XG4gICAgICAgICAgICB0aGlzLnJlZmVyZW5jZXNTZXJ2aWNlLmRlbGl2ZXJ5VHlwZXMkLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChkZWxpdmVyeVR5cGVzKSA9PiAob3BmID8gZGVsaXZlcnlUeXBlcyA6IFtdKSksXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKChkZWxpdmVyeVR5cGVzKSA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlbGl2ZXJ5QWRkcmVzc1NlcnZpY2UuZGVsaXZlcnlBZGRyZXNzZXMkLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXAoKGRlbGl2ZXJ5QWRkcmVzc2VzKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZj8uaWQgPT09IFNjT3BmTGlzdC5pbmRpdmlkdWFsICYmICEoZGVsaXZlcnlBZGRyZXNzZXMgJiYgZGVsaXZlcnlBZGRyZXNzZXMubGVuZ3RoID4gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBkZWxpdmVyeVR5cGVzLmZpbHRlcigodHlwZSkgPT4gdHlwZS5pZCAhPT0gU2NEZWxpdmVyeVR5cGUuZGVsaXZlcnkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZGVsaXZlcnlUeXBlc1xuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB0YXAoKGRlbGl2ZXJ5VHlwZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZm9ybS5jb250cm9scy5kZWxpdmVyeVR5cGUudmFsdWUgJiYgIWRlbGl2ZXJ5VHlwZXMuc29tZSgoZGVsaXZlcnkpID0+IGRlbGl2ZXJ5LmlkID09PSB0aGlzLmZvcm0uY29udHJvbHMuZGVsaXZlcnlUeXBlLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLmRlbGl2ZXJ5VHlwZS5yZXNldCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5mb3JtLmNvbnRyb2xzLmRlbGl2ZXJ5VHlwZS52YWx1ZSAmJiBkZWxpdmVyeVR5cGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLmRlbGl2ZXJ5VHlwZS5wYXRjaFZhbHVlKGRlbGl2ZXJ5VHlwZXNbMF0uaWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiwg0YfRgtC+INCy0YvQsdGA0LDQvSDRgtC40L8g0L7Qv9C70LDRgtGLINC90LDQu9C40YfQvdGL0LzQuC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXNDYXNoUGF5bWVudFNlbGVjdGVkOiBTaWduYWw8Ym9vbGVhbj4gPSB0b1NpZ25hbChcbiAgICAgICAgdHVpQ29udHJvbFZhbHVlPFNjUGF5bWVudFR5cGUgfCBudWxsPih0aGlzLmZvcm0uY29udHJvbHMucGF5bWVudFR5cGUpLnBpcGUobWFwKChwYXltZW50VHlwZSkgPT4gcGF5bWVudFR5cGUgPT09IFNjUGF5bWVudFR5cGUubmFsKSksXG4gICAgICAgIHsgaW5pdGlhbFZhbHVlOiBmYWxzZSB9XG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqINCf0YDQuNC30L3QsNC6LCDRh9GC0L4g0L3QvtC80LXRgCDRgtC10LvQtdGE0L7QvdCwINC/0L7QtNGC0LLQtdGA0LbQtNGR0L0uXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzUGhvbmVBcHByb3ZlZDogU2lnbmFsPGJvb2xlYW4+ID0gdG9TaWduYWwoXG4gICAgICAgIHRoaXMudXNlciQucGlwZShcbiAgICAgICAgICAgIGZpbHRlcigodXNlcikgPT4gIXVzZXIuaXNHdWVzdCksXG4gICAgICAgICAgICBtYXAoKHVzZXIpID0+IHVzZXIuY29udGFjdHMucGhvbmUuaXNBcHByb3ZlZClcbiAgICAgICAgKSxcbiAgICAgICAgeyBpbml0aWFsVmFsdWU6IHRydWUgfVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiwg0YfRgtC+INCw0LTRgNC10YEg0Y3Qu9C10LrRgtGA0L7QvdC90L7QuSDQv9C+0YfRgtGLINC/0L7QtNGC0LLQtdGA0LbQtNGR0L0g0L/QvtC70YzQt9C+0LLQsNGC0LXQu9C10LwuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBpc0VtYWlsQXBwcm92ZWRVc2VyOiBTaWduYWw8Ym9vbGVhbj4gPSB0b1NpZ25hbChcbiAgICAgICAgdGhpcy51c2VyJC5waXBlKFxuICAgICAgICAgICAgZmlsdGVyKCh1c2VyKSA9PiAhdXNlci5pc0d1ZXN0KSxcbiAgICAgICAgICAgIG1hcCgodXNlcikgPT4gdXNlci5jb250YWN0cy5lbWFpbC5pc0FwcHJvdmVkKVxuICAgICAgICApLFxuICAgICAgICB7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9XG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqINCf0YDQuNC30L3QsNC6LCDRh9GC0L4g0LDQtNGA0LXRgSDRjdC70LXQutGC0YDQvtC90L3QvtC5INC/0L7Rh9GC0Ysg0L/QvtC00YLQstC10YDQttC00ZHQvSDQuNC70Lgg0LrQvtC90YLRgNCw0LPQtdC90YIg0Y/QstC70Y/QtdGC0YHRjyDRhNC40LfQuNGH0LXRgdC60LjQvCDQu9C40YbQvtC8LlxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL2NvbnNpc3RlbnQtZnVuY3Rpb24tc2NvcGluZ1xuICAgIHByb3RlY3RlZCByZWFkb25seSBpc0VtYWlsQXBwcm92ZWQ6IFNpZ25hbDxib29sZWFuPiA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaXNFbWFpbEFwcHJvdmVkVXNlcigpIHx8IHRoaXMuaXNJbmRpdmlkdWFsKCkpO1xuXG4gICAgLyoqXG4gICAgICog0JfQvdCw0YfQtdC90LjQtSDQstGL0LHRgNCw0L3QvdC+0LPQviDRgtC40L/QsCDQtNC+0YHRgtCw0LLQutC4LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVsaXZlcnlUeXBlVmFsdWUgPSB0b1NpZ25hbCh0dWlDb250cm9sVmFsdWU8U2NEZWxpdmVyeVR5cGUgfCBudWxsPih0aGlzLmZvcm0uY29udHJvbHMuZGVsaXZlcnlUeXBlKSwgeyBpbml0aWFsVmFsdWU6IG51bGwgfSk7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiwg0YfRgtC+INCy0YvQsdGA0LDQvSDRgtC40L8g0LTQvtGB0YLQsNCy0LrQuCBcItCU0L7RgdGC0LDQstC60LBcIi5cbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9jb25zaXN0ZW50LWZ1bmN0aW9uLXNjb3BpbmdcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXNEZWxpdmVyeSA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHRoaXMuZGVsaXZlcnlUeXBlVmFsdWUoKSA9PT0gU2NEZWxpdmVyeVR5cGUuZGVsaXZlcnkpO1xuXG4gICAgLyoqXG4gICAgICog0J3QsNCx0L7RgCDQtNC+0YHRgtGD0L/QvdGL0YUg0LTQsNGCINCyINC30LDQstC40YHQuNC80L7RgdGC0Lgg0L7RgiDRgtC40L/QsCDQtNC+0YHRgtCw0LLQutC4LlxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL2NvbnNpc3RlbnQtZnVuY3Rpb24tc2NvcGluZ1xuICAgIHByb3RlY3RlZCByZWFkb25seSBkZWxpdmVyeURhdGVzID0gY29tcHV0ZWQ8c3RyaW5nW10+KCgpID0+XG4gICAgICAgIHRoaXMuZGVsaXZlcnlUeXBlVmFsdWUoKSA9PT0gU2NEZWxpdmVyeVR5cGUuc2VsZl9kZWxpdmVyeSA/IHRoaXMud2FyZWhvdXNlRGVsaXZlcnlEYXRlcygpIDogdGhpcy5hZGRyZXNzRGVsaXZlcnlEYXRlcygpXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqINCd0LDQsdC+0YAg0LTQvtGB0YLRg9C/0L3Ri9GFINC00LDRgiDQsiDQstC40LTQtSDQtNCw0YIg0LrQsNC70LXQvdC00LDRgNGPLCDQvtGC0YHQvtGA0YLQuNGA0L7QstCw0L3QvdGL0Lkg0L/QviDQstC+0LfRgNCw0YHRgtCw0L3QuNGOLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVsaXZlcnlEYXlzID0gY29tcHV0ZWQ8VHVpRGF5W10+KCgpID0+XG4gICAgICAgIHRoaXMuZGVsaXZlcnlEYXRlcygpXG4gICAgICAgICAgICAubWFwKChkYXRlKSA9PiBUdWlEYXkubm9ybWFsaXplUGFyc2UoZGF0ZS5zbGljZSgwLCAxMCksICdZTUQnKSlcbiAgICAgICAgICAgIC5zb3J0KChmaXJzdERheSwgc2Vjb25kRGF5KSA9PiAoZmlyc3REYXkuZGF5U2FtZU9yQmVmb3JlKHNlY29uZERheSkgPyAtMSA6IDEpKVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiDQn9C10YDQstCw0Y8g0LTQvtGB0YLRg9C/0L3QsNGPINC00LDRgtCwLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBtaW5EZWxpdmVyeURheSA9IGNvbXB1dGVkPFR1aURheSB8IG51bGw+KCgpID0+IHRoaXMuZGVsaXZlcnlEYXlzKClbMF0gPz8gbnVsbCk7XG5cbiAgICAvKipcbiAgICAgKiDQn9C+0YHQu9C10LTQvdGP0Y8g0LTQvtGB0YLRg9C/0L3QsNGPINC00LDRgtCwLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBtYXhEZWxpdmVyeURheSA9IGNvbXB1dGVkPFR1aURheSB8IG51bGw+KCgpID0+IHRoaXMuZGVsaXZlcnlEYXlzKCkuYXQoLTEpID8/IG51bGwpO1xuXG4gICAgLyoqXG4gICAgICog0KHRgdGL0LvQutCwINC90LAg0Y3Qu9C10LzQtdC90YIg0YEg0L/RgNC10LTRg9C/0YDQtdC20LTQtdC90LjQtdC8INC+INC90LXQv9C+0LTRgtCy0LXRgNC20LTRkdC90L3Ri9GFINC00LDQvdC90YvRhS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgdW5jb25maXJtZWREYXRhV2FybmluZyA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oJ3VuY29uZmlybWVkRGF0YVdhcm5pbmcnKTtcblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCINC80LDRgNC60LXRgCwg0LrQvtGC0L7RgNGL0Lwg0LLRi9C00LXQu9GP0LXRgtGB0Y8g0LTQvtGB0YLRg9C/0L3QsNGPINC00LvRjyDQstGL0LHQvtGA0LAg0LTQsNGC0LAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGF0ZSDQlNCw0YLQsC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGVsaXZlcnlEYXRlTWFya2VyOiBUdWlNYXJrZXJIYW5kbGVyID0gKGRhdGU6IFR1aURheSkgPT4gKHRoaXMuZGVsaXZlcnlEYXRlRmlsdGVyKGRhdGUpID8gW10gOiBbJ3ZhcigtLXR1aS1iYWNrZ3JvdW5kLWFjY2VudC0xKSddKTtcblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCINC/0YDQuNC30L3QsNC6LCDRh9GC0L4g0YPQutCw0LfQsNC90L3QsNGPINC00LDRgtCwINC90LXQtNC+0YHRgtGD0L/QvdCwINC00LvRjyDQstGL0LHQvtGA0LAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGF0ZSDQlNCw0YLQsC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGVsaXZlcnlEYXRlRmlsdGVyID0gKGRhdGU6IFR1aURheSk6IGJvb2xlYW4gPT4gIXRoaXMuZGVsaXZlcnlEYXRlcygpLmluY2x1ZGVzKGAke2RhdGUudG9TdHJpbmcoJ1lNRCcsICctJyl9IDAwOjAwOjAwYCk7XG5cbiAgICAvKipcbiAgICAgKiDQmNC90LjRhtC40LDQu9C40LfQuNGA0YPQtdGCINGN0LrQt9C10LzQv9C70Y/RgCDQutC70LDRgdGB0LAge0BsaW5rIFNjT3JkZXJGb3JtQ29tcG9uZW50fS5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIC8vINCQ0LLRgtC+0LzQsNGC0LjRh9C10YHQutC4INCy0YvQsdC40YDQsNC10Lwg0LXQtNC40L3RgdGC0LLQtdC90L3QvtCz0L4g0LrQvtC90YLRgNCw0LPQtdC90YLQsC3RhNC40LfQu9C40YbQvi5cbiAgICAgICAgdGhpcy5jb250cmFnZW50cyRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcigoY29udHJhZ2VudHMpOiBjb250cmFnZW50cyBpcyBbU2NDb250cmFnZW50XSA9PiAhIWNvbnRyYWdlbnRzICYmIGNvbnRyYWdlbnRzLmxlbmd0aCA9PT0gMSksXG4gICAgICAgICAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKFtjb250cmFnZW50XSkgPT4gY29udHJhZ2VudC5vcGYuaWQgPT09IFNjT3BmTGlzdC5pbmRpdmlkdWFsLnZhbHVlT2YoKSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKFtjb250cmFnZW50XSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5jb250cmFnZW50SWQ/LnBhdGNoVmFsdWUoY29udHJhZ2VudC5pZCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmluaXRGb3JtQ2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBAaW5oZXJpdGRvYyAqL1xuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbml0TWV0YWRhdGEoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LXQvtCx0YDQsNC30YPQtdGCINC+0LHRitC10LrRgtGLINCyINC30L3QsNGH0LXQvdC40Y8sINC+0YLQvtCx0YDQsNC20LDQtdC80L7QtSDQsiDQv9C+0LvQtSDQstCy0L7QtNCwLlxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW1zINCS0YvQsdGA0LDQvdC90YvQtSDQvtCx0YrQtdC60YLRiyDQstGL0L/QsNC00LDRjtGJ0LXQs9C+INGB0L/QuNGB0LrQsC5cbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2xhc3MtbWV0aG9kcy11c2UtdGhpc1xuICAgIHB1YmxpYyBzdHJpbmdpZnkoaXRlbXM6IHJlYWRvbmx5IFNlbGVjdFR5cGVbXSk6IFR1aVN0cmluZ0hhbmRsZXI8VHVpQ29udGV4dDxudW1iZXI+PiB7XG4gICAgICAgIGNvbnN0IGl0ZW1zTWFwID0gbmV3IE1hcChcbiAgICAgICAgICAgIGl0ZW1zLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLW5lc3RlZC10ZXJuYXJ5LHNvbmFyanMvbm8tbmVzdGVkLWNvbmRpdGlvbmFsXG4gICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9ICduYW1lJyBpbiBpdGVtID8gaXRlbS5uYW1lIDogJ2FkZHJlc3MnIGluIGl0ZW0gPyBpdGVtLmFkZHJlc3MgOiAnJztcblxuICAgICAgICAgICAgICAgIHJldHVybiBbaXRlbS5pZCwgbmFtZV0gYXMgW251bWJlciwgc3RyaW5nXTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuICh7ICRpbXBsaWNpdCB9OiBUdWlDb250ZXh0PG51bWJlcj4pID0+IGl0ZW1zTWFwLmdldCgkaW1wbGljaXQpID8/ICcnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0LHRgNCw0LHQsNGC0YvQstCw0LXRgiDQvtGC0L/RgNCw0LLQutGDINGE0L7RgNC80Ys6INCy0LDQu9C40LTQuNGA0YPQtdGCINC4INGN0LzQuNGC0LjRgiDQtNCw0L3QvdGL0LUg0LfQsNC60LDQt9CwINGA0L7QtNC40YLQtdC70Y4uXG4gICAgICog0J7QsdGJ0LDRjyDQvtGI0LjQsdC60LAg0YHQtdGA0LLQtdGA0LAg0YEg0L/RgNC+0YjQu9C+0Lkg0L7RgtC/0YDQsNCy0LrQuCAo0L3QsNC/0YDQuNC80LXRgCwgNDA5KSDQvdC1INC80LXRiNCw0LXRgiDQvtGC0L/RgNCw0LLQuNGC0Ywg0YTQvtGA0LzRgyDRgdC90L7QstCwLCDQvtGI0LjQsdC60Lgg0L/QvtC70LXQuSDQvtGB0YLQsNGO0YLRgdGPINC00L4g0LjRhSDQuNGB0L/RgNCw0LLQu9C10L3QuNGPLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdWJtaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgdGhpcy5mb3JtLm1hcmtBbGxBc1RvdWNoZWQoKTtcblxuICAgICAgICBpZiAoIXRoaXMuZm9ybS52YWxpZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29udGFjdHNBcHByb3ZlZCA9ICF0aGlzLmVuZm9yY2VBcHByb3ZlZENvbnRhY3RzKCkgfHwgKHRoaXMuaXNQaG9uZUFwcHJvdmVkKCkgJiYgdGhpcy5pc0VtYWlsQXBwcm92ZWQoKSk7XG5cbiAgICAgICAgaWYgKCFjb250YWN0c0FwcHJvdmVkKSB7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJVbmNvbmZpcm1lZFdhcm5pbmcoKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vcmRlclN1Ym1pdC5lbWl0KHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpIGFzIFNjSU5ld09yZGVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQvNC10L3Rj9C10YIg0Log0L/QvtC70Y/QvCDRhNC+0YDQvNGLINC+0YjQuNCx0LrQuCwg0L/RgNC40YjQtdC00YjQuNC1INC+0YIg0YHQtdGA0LLQtdGA0LAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXJyb3Ig0J7RgtCy0LXRgiDRgdC10YDQstC10YDQsCDRgSDQvtGI0LjQsdC60LDQvNC4LlxuICAgICAqL1xuICAgIHB1YmxpYyBhcHBseVNlcnZlckVycm9ycyhlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBlcnJvcnMsIG1lc3NhZ2UgfSA9IChlcnJvci5lcnJvciA/PyB7fSkgYXMgUGFydGlhbDxTY0lBcGlFcnJvclJlc3BvbnNlPjtcblxuICAgICAgICBpZiAoZXJyb3JzKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhlcnJvcnMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChrZXkgPT09ICdkZWxpdmVyeURhdGUnICYmIGlzQXJyYXkoZXJyb3JzW2tleV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoa2V5KT8uc2V0RXJyb3JzKHsgc2VydmVyUmVzcG9uc2U6IG5ldyBUdWlWYWxpZGF0aW9uRXJyb3IoZXJyb3JzW2tleV0uYXQoMSkgPz8gZXJyb3JzW2tleV0uYXQoMCkpIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoa2V5KT8uc2V0RXJyb3JzKHsgc2VydmVyUmVzcG9uc2U6IG5ldyBUdWlWYWxpZGF0aW9uRXJyb3IoZXJyb3JzW2tleV0pIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KGtleSk/Lm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5zZXRFcnJvcnMoeyBzZXJ2ZXJSZXNwb25zZTogbmV3IFR1aVZhbGlkYXRpb25FcnJvcihtZXNzYWdlKSB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCj0LTQsNC70Y/QtdGCINGE0LDQudC7INC40Lcg0YTQvtGA0LzRiyDQt9Cw0LrQsNC30LAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlbW92ZUZpbGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29udHJvbEZpbGUucmVzZXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntGC0LrRgNGL0LLQsNC10YIg0LTQuNCw0LvQvtCz0L7QstC+0LUg0L7QutC90L4g0LTQvtCx0LDQstC70LXQvdC40Y8g0LDQtNGA0LXRgdCwINC00L7RgdGC0LDQstC60LguXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGFkZERlbGl2ZXJ5QWRkcmVzcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaWFsb2dcbiAgICAgICAgICAgIC5vcGVuKG5ldyBQb2x5bW9ycGhldXNDb21wb25lbnQoU2NBZGREZWxpdmVyeUFkZHJlc3NEaWFsb2dDb21wb25lbnQpLCB7XG4gICAgICAgICAgICAgICAgc2l6ZTogJ2wnLFxuICAgICAgICAgICAgICAgIGxhYmVsOiAn0JTQvtCx0LDQstC70LXQvdC40LUg0LDQtNGA0LXRgdCwINC00L7RgdGC0LDQstC60LgnLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntGC0LrRgNGL0LLQsNC10YIg0LTQuNCw0LvQvtCz0L7QstC+0LUg0L7QutC90L4g0LTQvtCx0LDQstC70LXQvdC40Y8g0LrQvtC90YLRgNCw0LPQtdC90YLQsC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgYWRkQ29udHJhZ2VudCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaWFsb2dcbiAgICAgICAgICAgIC5vcGVuKG5ldyBQb2x5bW9ycGhldXNDb21wb25lbnQoU2NBZGRDb250cmFnZW50RGlhbG9nQ29tcG9uZW50KSwge1xuICAgICAgICAgICAgICAgIHNpemU6ICdtJyxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ9CU0L7QsdCw0LLQu9C10L3QuNC1INC60L7QvdGC0YDQsNCz0LXQvdGC0LAnLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQl9Cw0L/Rg9GB0LrQsNC10YIg0LDQvdC40LzQsNGG0LjRjiDQv9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNGPINC+INC90LXQv9C+0LTRgtCy0LXRgNC20LTRkdC90L3Ri9GFINC00LDQvdC90YvRhSDQuCDQv9GA0L7QutGA0YPRh9C40LLQsNC10YIg0Log0L3QtdC80YMuXG4gICAgICovXG4gICAgcHJpdmF0ZSB0cmlnZ2VyVW5jb25maXJtZWRXYXJuaW5nKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy51bmNvbmZpcm1lZERhdGFXYXJuaW5nKCk/Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzU2VydmVyICYmIGVsZW1lbnQpIHtcbiAgICAgICAgICAgIGVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnY2VudGVyJyB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMud2FybmluZ1NoYWtlLnNldChmYWxzZSk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy53YXJuaW5nU2hha2Uuc2V0KHRydWUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0YHRgdGC0LDQvdCw0LLQu9C40LLQsNC10YIg0YfQtdGA0L3QvtCy0YvQtSDQtNCw0L3QvdGL0LUg0YTQvtGA0LzRiyDQuNC3INC80LXRgtCw0LTQsNC90L3Ri9GFINC4INC40L3QuNGG0LjQsNC70LjQt9C40YDRg9C10YIg0LjRhSDRgdC+0YXRgNCw0L3QtdC90LjQtSwg0LXRgdC70Lgg0L/RgNC10LTQvtGB0YLQsNCy0LvQtdC9INGC0L7QutC10L0ge0BsaW5rIFNDX09SREVSX0ZPUk1fQ09ORklHfS5cbiAgICAgKi9cbiAgICBwcml2YXRlIGluaXRNZXRhZGF0YSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBjb25maWcgfSA9IHRoaXM7XG5cbiAgICAgICAgaWYgKCFjb25maWcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbWJpbmVMYXRlc3Qoe1xuICAgICAgICAgICAgb3JkZXJNZXRhZGF0YTogdGhpcy51aVNlcnZpY2UuZ2V0TmV3T3JkZXJNZXRhZGF0YSQoKSxcbiAgICAgICAgICAgIHVzZXI6IHRoaXMudXNlciQucGlwZShmaWx0ZXIoKHVzZXIpID0+ICF1c2VyLmlzR3Vlc3QpKSxcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC5waXBlKGZpcnN0KCksIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNvbmFyanMvY29nbml0aXZlLWNvbXBsZXhpdHlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHsgb3JkZXJNZXRhZGF0YSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGRlbGl2ZXJ5RGF0ZTogc3RyaW5nIHwgbnVsbCA9XG4gICAgICAgICAgICAgICAgICAgIG9yZGVyTWV0YWRhdGE/LmRlbGl2ZXJ5RGF0ZSAmJiBpc1ZhbGlkKHBhcnNlKG9yZGVyTWV0YWRhdGEuZGVsaXZlcnlEYXRlLCBjb25maWcuZGF0ZUZvcm1hdHMuYXBpLCBuZXcgRGF0ZSgpKSkgPyBvcmRlck1ldGFkYXRhLmRlbGl2ZXJ5RGF0ZSA6IG51bGw7XG5cbiAgICAgICAgICAgICAgICAvLyDQldGB0LvQuCDQtNCw0YLQsCDRgdGC0LDRgNC+0LPQviDRhNC+0YDQvNCw0YLQsCwg0YLQviDQv9GA0LXQvtCx0YDQsNC30YPQtdC8INC10ZEg0LIg0L3QvtCy0YvQuSDRhNC+0YDQvNCw0YIuXG4gICAgICAgICAgICAgICAgLy8gVE9ETzog0KPQsdGA0LDRgtGMINGN0YLQvtGCINCx0LvQvtC6INC60L7Qs9C00LAg0LLRgdC1INC00LDRgtGLINGDINC60LvQuNC10L3RgtC+0LIg0LLRgdGC0LDQvdGD0YIg0LIg0L3QvtGA0LzQsNC70YzQvdC+0Lwg0YTQvtGA0LzQsNGC0LUuXG4gICAgICAgICAgICAgICAgaWYgKG9yZGVyTWV0YWRhdGE/LmRlbGl2ZXJ5RGF0ZSAmJiAhZGVsaXZlcnlEYXRlICYmIGlzVmFsaWQocGFyc2Uob3JkZXJNZXRhZGF0YS5kZWxpdmVyeURhdGUsIGNvbmZpZy5kYXRlRm9ybWF0cy51aURhdGUsIG5ldyBEYXRlKCkpKSkge1xuICAgICAgICAgICAgICAgICAgICBkZWxpdmVyeURhdGUgPSBmb3JtYXQocGFyc2Uob3JkZXJNZXRhZGF0YS5kZWxpdmVyeURhdGUsIGNvbmZpZy5kYXRlRm9ybWF0cy51aURhdGUsIG5ldyBEYXRlKCkpLCBjb25maWcuZGF0ZUZvcm1hdHMuYXBpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodHVpSXNQcmVzZW50KG9yZGVyTWV0YWRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyYWdlbnRJZDogb3JkZXJNZXRhZGF0YS5jb250cmFnZW50SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXltZW50VHlwZTogb3JkZXJNZXRhZGF0YS5jb250cmFnZW50SWQgPyBvcmRlck1ldGFkYXRhLnBheW1lbnRUeXBlIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGl2ZXJ5VHlwZTogb3JkZXJNZXRhZGF0YS5jb250cmFnZW50SWQgPyBvcmRlck1ldGFkYXRhLmRlbGl2ZXJ5VHlwZSA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxpdmVyeURhdGU6IG9yZGVyTWV0YWRhdGEuY29udHJhZ2VudElkICYmIEJvb2xlYW4ob3JkZXJNZXRhZGF0YS5kZWxpdmVyeVR5cGUpICYmIGRlbGl2ZXJ5RGF0ZSA/IGRlbGl2ZXJ5RGF0ZSA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzSWQ6IG9yZGVyTWV0YWRhdGEuZGVsaXZlcnlUeXBlID09PSBTY0RlbGl2ZXJ5VHlwZS5kZWxpdmVyeSAmJiBvcmRlck1ldGFkYXRhLmFkZHJlc3NJZCA/IG9yZGVyTWV0YWRhdGEuYWRkcmVzc0lkIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcmVob3VzZUlkOiBvcmRlck1ldGFkYXRhLmNvbnRyYWdlbnRJZCAmJiBCb29sZWFuKG9yZGVyTWV0YWRhdGEuZGVsaXZlcnlUeXBlKSA/IG9yZGVyTWV0YWRhdGEud2FyZWhvdXNlSWQgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudDogb3JkZXJNZXRhZGF0YS5jb21tZW50LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmZvcm0udmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKGNvbmZpZy5kZWJvdW5jZVRpbWUpLCB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKChuZXdPcmRlcikgPT4ge1xuICAgICAgICAgICAgdGhpcy51aVNlcnZpY2Uuc2V0TmV3T3JkZXJNZXRhZGF0YSh0aGlzLmNvbnZlcnRlcnNTZXJ2aWNlLnJlbW92ZU51bGw8U2NJTmV3T3JkZXI+KG5ld09yZGVyIGFzIFNjSU5ld09yZGVyKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCY0L3QuNGG0LjQsNC70LjQt9C40YDRg9C10YIg0L/QvtC00L/QuNGB0LrQuCDQvdCwINC40LfQvNC10L3QtdC90LjRjyDQv9C+0LvQtdC5INGE0L7RgNC80YsuXG4gICAgICovXG4gICAgcHJpdmF0ZSBpbml0Rm9ybUNoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5pdEZpbGVDaGFuZ2UoKTtcbiAgICAgICAgdGhpcy5pbml0V2FyZWhvdXNlQ2hhbmdlKCk7XG4gICAgICAgIHRoaXMuaW5pdERlbGl2ZXJ5RGF0ZXNDaGFuZ2UoKTtcbiAgICAgICAgdGhpcy5pbml0RGF0ZUZpZWxkQWN0aXZhdGlvbkNoYW5nZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCY0L3QuNGG0LjQsNC70LjQt9C40YDRg9C10YIg0L/QvtC00L/QuNGB0LrRgyDQvdCwINC40LfQvNC10L3QtdC90LjQtSDQv9C+0LvRjyDQv9GA0LjQutGA0LXQv9C70LXQvdC40Y8g0YTQsNC50LvQsC4g0KTQsNC50LssINC90LUg0L/RgNC+0YjQtdC00YjQuNC5INC/0YDQvtCy0LXRgNC60YMg0YTQvtGA0LzQsNGC0LAg0LjQu9C4INGA0LDQt9C80LXRgNCwLCDQuiDQt9Cw0LrQsNC30YMg0L3QtSDQv9GA0LjQutGA0LXQv9C70Y/QtdGC0YHRjy5cbiAgICAgKi9cbiAgICBwcml2YXRlIGluaXRGaWxlQ2hhbmdlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmFjY2VwdGVkJC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKGZpbGVzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaWxlID0gZmlsZXMuYXQoMCk7XG5cbiAgICAgICAgICAgIGlmIChmaWxlICYmIHRoaXMuZm9ybS5jb250cm9scy5pbWFnZSkge1xuICAgICAgICAgICAgICAgIHRoaXMub25VcGxvYWRGaWxlKGZpbGUsIHRoaXMuZm9ybS5jb250cm9scy5pbWFnZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5pbWFnZT8ucmVzZXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JjQvdC40YbQuNCw0LvQuNC30LjRgNGD0LXRgiDQv9C+0LTQv9C40YHQutGDINC90LAg0LjQt9C80LXQvdC10L3QuNC1INCy0YvQsdGA0LDQvdC90L7Qs9C+INGB0LrQu9Cw0LTQsC5cbiAgICAgKi9cbiAgICBwcml2YXRlIGluaXRXYXJlaG91c2VDaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5jb250cm9scy53YXJlaG91c2VJZC52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcigod2FyZWhvdXNlSWQpID0+IHR1aUlzUHJlc2VudCh3YXJlaG91c2VJZCkgJiYgdGhpcy53YXJlaG91c2VTZXJ2aWNlLmdldEN1cnJlbnRXYXJlaG91c2VJZFNlbGVjdCgpICE9PSB3YXJlaG91c2VJZCksXG4gICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDApLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChpZCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMud2FyZWhvdXNlU2VydmljZS5zZXRXYXJlaG91c2VJZFNlbGVjdENoYW5nZShpZCEpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JjQvdC40YbQuNCw0LvQuNC30LjRgNGD0LXRgiDQv9C+0LTQv9C40YHQutGDINC90LAg0LjQt9C80LXQvdC10L3QuNC1INCw0LTRgNC10YHQsCDQtNC+0YHRgtCw0LLQutC4INC4INCy0YvQsdGA0LDQvdC90L7Qs9C+INGB0LrQu9Cw0LTQsCDQtNC70Y8g0L/QvtC70YPRh9C10L3QuNGPINGB0L/QuNGB0LrQsCDQtNC+0YHRgtGD0L/QvdGL0YUg0LTQsNGCINC00L7RgdGC0LDQstC60LguXG4gICAgICovXG4gICAgcHJpdmF0ZSBpbml0RGVsaXZlcnlEYXRlc0NoYW5nZSgpOiB2b2lkIHtcbiAgICAgICAgbWVyZ2UoXG4gICAgICAgICAgICB0dWlDb250cm9sVmFsdWU8bnVtYmVyIHwgbnVsbD4odGhpcy5mb3JtLmNvbnRyb2xzLmFkZHJlc3NJZCkucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIodHVpSXNQcmVzZW50KSxcbiAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUodGhpcy5kZWJvdW5jZVRpbWVGb3JtQ2hhbmdlKSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKGFkZHJlc3NJZDogbnVtYmVyKSA9PiB0aGlzLmRlbGl2ZXJpZXNCeUFkZHJlc3MoYWRkcmVzc0lkKSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0dWlDb250cm9sVmFsdWU8bnVtYmVyIHwgbnVsbD4odGhpcy5mb3JtLmNvbnRyb2xzLndhcmVob3VzZUlkKS5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcih0dWlJc1ByZXNlbnQpLFxuICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSh0aGlzLmRlYm91bmNlVGltZUZvcm1DaGFuZ2UpLFxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLmZvcm0uY29udHJvbHMuZGVsaXZlcnlUeXBlLnZhbHVlID09PSBTY0RlbGl2ZXJ5VHlwZS5zZWxmX2RlbGl2ZXJ5KSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKHdhcmVob3VzZUlkOiBudW1iZXIpID0+IHRoaXMuZGVsaXZlcmllc0J5V2FyZWhvdXNlKHdhcmVob3VzZUlkKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IHVua25vd24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLmRlbGl2ZXJ5RGF0ZS5kaXNhYmxlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHJldHJ5KCksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRlbGl2ZXJ5RGF0ZXMpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkZWxpdmVyeURhdGVWYWx1ZSA9IHRoaXMuZm9ybS5jb250cm9scy5kZWxpdmVyeURhdGUudmFsdWU7XG5cbiAgICAgICAgICAgICAgICBpZiAoZGVsaXZlcnlEYXRlVmFsdWUgJiYgIWRlbGl2ZXJ5RGF0ZXMuaW5jbHVkZXMoZGVsaXZlcnlEYXRlVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5kZWxpdmVyeURhdGUucmVzZXQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQmNC90LjRhtC40LDQu9C40LfQuNGA0YPQtdGCINC/0L7QtNC/0LjRgdC60YMg0L3QsCDQuNC30LzQtdC90LXQvdC40LUg0L/QvtC70LXQuSDRhNC+0YDQvNGLINC00LvRjyDQsdC70L7QutC40YDQvtCy0LDQvdC40Y8v0LDQutGC0LjQstCw0YbQuNC4INC/0L7Qu9GPINCy0YvQsdC+0YDQsCDQtNCw0YLRiy5cbiAgICAgKi9cbiAgICBwcml2YXRlIGluaXREYXRlRmllbGRBY3RpdmF0aW9uQ2hhbmdlKCk6IHZvaWQge1xuICAgICAgICBtZXJnZShcbiAgICAgICAgICAgIHR1aUNvbnRyb2xWYWx1ZTxTY0RlbGl2ZXJ5VHlwZT4odGhpcy5mb3JtLmNvbnRyb2xzLmRlbGl2ZXJ5VHlwZSksXG4gICAgICAgICAgICB0aGlzLmZvcm0uY29udHJvbHMuY29udHJhZ2VudElkPy52YWx1ZUNoYW5nZXMucGlwZShmaWx0ZXIoKCkgPT4gdGhpcy5mb3JtLmNvbnRyb2xzLmRlbGl2ZXJ5VHlwZS52YWx1ZSA9PT0gU2NEZWxpdmVyeVR5cGUuZGVsaXZlcnkpKSA/PyBvZigpXG4gICAgICAgIClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLmRlbGl2ZXJ5RGF0ZS5kaXNhYmxlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLndhcmVob3VzZUlkLmRpc2FibGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZHJlc3NEZWxpdmVyeURhdGVzLnNldChbXSk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5mb3JtLmNvbnRyb2xzLmRlbGl2ZXJ5VHlwZS52YWx1ZSA9PT0gU2NEZWxpdmVyeVR5cGUuZGVsaXZlcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLmFkZHJlc3NJZC5lbmFibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53YXJlaG91c2VTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgICAgICAuZ2V0RGVsaXZlcnlXYXJlaG91c2UkKClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5waXBlKGZpcnN0KCksIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJ4anMvbm8tbmVzdGVkLXN1YnNjcmliZVxuICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgod2FyZWhvdXNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLndhcmVob3VzZUlkLnBhdGNoVmFsdWUod2FyZWhvdXNlLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmZvcm0uY29udHJvbHMuZGVsaXZlcnlUeXBlLnZhbHVlID09PSBTY0RlbGl2ZXJ5VHlwZS5zZWxmX2RlbGl2ZXJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5hZGRyZXNzSWQuZGlzYWJsZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uY29udHJvbHMud2FyZWhvdXNlSWQuZW5hYmxlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JfQsNC/0YDQsNGI0LjQstCw0LXRgiDQtNCw0YLRiyDQtNC+0YHRgtCw0LLQutC4INC/0L4g0LDQtNGA0LXRgdGDLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFkZHJlc3NJZCDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQsNC00YDQtdGB0LAg0LTQvtGB0YLQsNCy0LrQuC5cbiAgICAgKi9cbiAgICBwcml2YXRlIGRlbGl2ZXJpZXNCeUFkZHJlc3MoYWRkcmVzc0lkOiBudW1iZXIpOiBPYnNlcnZhYmxlPHN0cmluZ1tdPiB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yZGVyc1NlcnZpY2UuZ2V0RGVsaXZlcmllc0RhdGEkKGFkZHJlc3NJZCkucGlwZShcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UgPyBlcnJvci5lcnJvci5tZXNzYWdlIDogdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLmFkZHJlc3NJZC5zZXRFcnJvcnMoe1xuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJSZXNwb25zZTogbWVzc2FnZSA/PyBg0J7RiNC40LHQutCwINGB0LXRgNCy0LXRgNCwOiDQv9C+0LbQsNC70YPQudGB0YLQsCwg0L/QtdGA0LXQt9Cw0LPRgNGD0LfQuNGC0LUg0YHRgtGA0LDQvdC40YbRgyDQuC/QuNC70Lgg0LLRi9C/0L7Qu9C90LjRgtC1INC30LDQv9GA0L7RgSDQv9C+0LfQttC1LmAsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRyZXNzRGVsaXZlcnlEYXRlcy5zZXQoW10pO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0YXAoKGRlbGl2ZXJ5RGF0ZXMpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZHJlc3NEZWxpdmVyeURhdGVzLnNldChkZWxpdmVyeURhdGVzKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0uY29udHJvbHMuZGVsaXZlcnlEYXRlLmVuYWJsZSgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQl9Cw0L/RgNCw0YjQuNCy0LDQtdGCINC00LDRgtGLINGB0LDQvNC+0LLRi9Cy0L7Qt9CwINC/0L4g0YHQutC70LDQtNGDLlxuICAgICAqXG4gICAgICogQHBhcmFtIHdhcmVob3VzZUlkINCY0LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINGB0LrQu9Cw0LTQsC5cbiAgICAgKi9cbiAgICBwcml2YXRlIGRlbGl2ZXJpZXNCeVdhcmVob3VzZSh3YXJlaG91c2VJZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxzdHJpbmdbXT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmRlcnNTZXJ2aWNlLmdldFNlbGZEZWxpdmVyaWVzRGF0YSQod2FyZWhvdXNlSWQpLnBpcGUoXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlID8gZXJyb3IuZXJyb3IubWVzc2FnZSA6IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9scy53YXJlaG91c2VJZC5zZXRFcnJvcnMoe1xuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJSZXNwb25zZTogbWVzc2FnZSA/PyBg0J7RiNC40LHQutCwINGB0LXRgNCy0LXRgNCwOiDQv9C+0LbQsNC70YPQudGB0YLQsCwg0L/QtdGA0LXQt9Cw0LPRgNGD0LfQuNGC0LUg0YHRgtGA0LDQvdC40YbRgyDQuC/QuNC70Lgg0LLRi9C/0L7Qu9C90LjRgtC1INC30LDQv9GA0L7RgSDQv9C+0LfQttC1LmAsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy53YXJlaG91c2VEZWxpdmVyeURhdGVzLnNldChbXSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRhcCgoZGVsaXZlcnlEYXRlcykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMud2FyZWhvdXNlRGVsaXZlcnlEYXRlcy5zZXQoZGVsaXZlcnlEYXRlcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLmRlbGl2ZXJ5RGF0ZS5lbmFibGUoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JfQsNCz0YDRg9C20LDQtdGCINGE0LDQudC7INCyINGE0L7RgNC80YMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZmlsZSDQpNCw0LnQuy5cbiAgICAgKiBAcGFyYW0gZmlsZXNDb250cm9sINCf0L7Qu9C1INGE0LDQudC70LAg0LfQsNC60LDQt9CwLlxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzXG4gICAgcHJpdmF0ZSBvblVwbG9hZEZpbGUoZmlsZTogVHVpRmlsZUxpa2UsIGZpbGVzQ29udHJvbDogRm9ybUNvbnRyb2w8U2NVcGxvYWRlZEZpbGUgfCBudWxsPik6IHZvaWQge1xuICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuXG4gICAgICAgIHJlYWRlci5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyByZXN1bHQgfSA9IHJlYWRlcjtcblxuICAgICAgICAgICAgaWYgKGlzU3RyaW5nKHJlc3VsdCkpIHtcbiAgICAgICAgICAgICAgICBmaWxlc0NvbnRyb2wuc2V0VmFsdWUobmV3IFNjVXBsb2FkZWRGaWxlKGZpbGUubmFtZSwgcmVzdWx0KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUgYXMgdW5rbm93biBhcyBCbG9iKTtcbiAgICB9XG59XG4iLCJAbGV0IHVzZXIgPSB1c2VyJCB8IGFzeW5jO1xuXG48Zm9ybVxuICAgIFtmb3JtR3JvdXBdPVwiZm9ybVwiXG4gICAgc2NGb2N1c0ZpcnN0SW52YWxpZEZpZWxkXG4gICAgW2ZpZWxkT3JkZXJdPVwiWydjb250cmFnZW50SWQnLCAncGF5bWVudFR5cGUnLCAnZGVsaXZlcnlUeXBlJywgJ3dhcmVob3VzZUlkJywgJ2FkZHJlc3NJZCcsICdkZWxpdmVyeURhdGUnLCAnY29tbWVudCddXCJcbiAgICAobmdTdWJtaXQpPVwic3VibWl0KClcIlxuICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtNFwiXG4+XG4gICAgPG5nLXRlbXBsYXRlICNzZWxlY3RMb2FkaW5nPiA8dHVpLWxvYWRlciAvPiA8L25nLXRlbXBsYXRlPlxuXG4gICAgPCEtLSDQmtC+0L3RgtGA0LDQs9C10L3Rgi4gLS0+XG4gICAgQGlmIChjb250cmFnZW50cyQgfCBhc3luYzsgYXMgY29udHJhZ2VudHMpIHtcbiAgICAgICAgQGlmIChjb250cmFnZW50cy5sZW5ndGggPiAxIHx8IHVzZXI/LmlzT3JnKSB7XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxsYWJlbCB0dWlMYWJlbD5cbiAgICAgICAgICAgICAgICAgICAg0JrQvtC90YLRgNCw0LPQtdC90YJcbiAgICAgICAgICAgICAgICAgICAgPHR1aS1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNvbnRyYWdlbnRJZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVDb250ZW50XT1cImNvbnRyYWdlbnRzID8gc3RyaW5naWZ5KGNvbnRyYWdlbnRzKSA6IHNlbGVjdExvYWRpbmdcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICDQmtC+0L3RgtGA0LDQs9C10L3RglxuICAgICAgICAgICAgICAgICAgICAgICAgPHR1aS1kYXRhLWxpc3QgKnR1aURhdGFMaXN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGNvbnRyYWdlbnQgb2YgY29udHJhZ2VudHM7IHRyYWNrIGNvbnRyYWdlbnQuaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpT3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiY29udHJhZ2VudC5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNvbnRyYWdlbnQubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3R1aS1kYXRhLWxpc3Q+XG4gICAgICAgICAgICAgICAgICAgIDwvdHVpLXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgPHR1aS1lcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY29udHJhZ2VudElkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtlcnJvcl09XCJbXSB8IHR1aUZpZWxkRXJyb3IgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICB0dWlMaW5rXG4gICAgICAgICAgICAgICAgICAgIGljb25TdGFydD1cIkB0dWkucGx1c1wiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGRDb250cmFnZW50KClcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm10LTIgYmxvY2tcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAg0J3QvtCy0YvQuVxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgfVxuXG4gICAgPCEtLSDQotC40L8g0L7Qv9C70LDRgtGLLiAtLT5cbiAgICA8bGFiZWwgdHVpTGFiZWw+XG4gICAgICAgINCi0LjQvyDQvtC/0LvQsNGC0YtcbiAgICAgICAgQGxldCBwYXltZW50VHlwZXMgPSBwYXltZW50VHlwZXMkIHwgYXN5bmM7XG4gICAgICAgIDx0dWktc2VsZWN0XG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwYXltZW50VHlwZVwiXG4gICAgICAgICAgICBbdmFsdWVDb250ZW50XT1cInBheW1lbnRUeXBlcyA/IHN0cmluZ2lmeShwYXltZW50VHlwZXMpIDogc2VsZWN0TG9hZGluZ1wiXG4gICAgICAgID5cbiAgICAgICAgICAgINCi0LjQvyDQvtC/0LvQsNGC0YtcbiAgICAgICAgICAgIDx0dWktZGF0YS1saXN0ICp0dWlEYXRhTGlzdD5cbiAgICAgICAgICAgICAgICBAZm9yICh0eXBlIG9mIHBheW1lbnRUeXBlczsgdHJhY2sgdHlwZS5pZCkge1xuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0dWlPcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ0eXBlLmlkXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgdHlwZS5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvdHVpLWRhdGEtbGlzdD5cbiAgICAgICAgPC90dWktc2VsZWN0PlxuICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwYXltZW50VHlwZVwiXG4gICAgICAgICAgICBbZXJyb3JdPVwiW10gfCB0dWlGaWVsZEVycm9yIHwgYXN5bmNcIlxuICAgICAgICAvPlxuICAgICAgICBAaWYgKGlzQ2FzaFBheW1lbnRTZWxlY3RlZCgpKSB7XG4gICAgICAgICAgICA8cCBjbGFzcz1cInRleHQteHMgdGV4dC10dWktc3RhdHVzLXBvc2l0aXZlXCI+0JfQsNC60LDQt9GLINC/0YDQvtC40LfQstC+0LTRj9GC0YHRjyDQv9C+INC/0YDQtdC00L7Qv9C70LDRgtC1PC9wPlxuICAgICAgICB9XG4gICAgPC9sYWJlbD5cblxuICAgIDwhLS0g0J/RgNC10LTRg9C/0YDQtdC20LTQtdC90LjQtSDQviDQvdC10L/QvtC00YLQstC10YDQttC00ZHQvdC90YvRhSDQutC+0L3RgtCw0LrRgtC90YvRhSDQtNCw0L3QvdGL0YUuIC0tPlxuICAgIEBpZiAoIWlzUGhvbmVBcHByb3ZlZCgpIHx8ICFpc0VtYWlsQXBwcm92ZWQoKSkge1xuICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjdW5jb25maXJtZWREYXRhV2FybmluZ1xuICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXR1aS10ZXh0LW5lZ2F0aXZlXCJcbiAgICAgICAgICAgIFtjbGFzcy53YXJuaW5nLXNoYWtlXT1cIndhcm5pbmdTaGFrZSgpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAg0JLQvdC40LzQsNC90LjQtSEg0JTQu9GPINC+0YTQvtGA0LzQu9C10L3QuNGPINC30LDQutCw0LfQsCDQvdC10L7QsdGF0L7QtNC40LzQviDQv9C+0LTRgtCy0LXRgNC00LjRgtGMXG4gICAgICAgICAgICBAaWYgKCFpc1Bob25lQXBwcm92ZWQoKSkge1xuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1ib2xkXCI+INC90L7QvNC10YAg0YLQtdC70LXRhNC+0L3QsCA8L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKCFpc1Bob25lQXBwcm92ZWQoKSAmJiAhaXNFbWFpbEFwcHJvdmVkKCkpIHtcbiAgICAgICAgICAgICAgICA8c3Bhbj4g0LggPC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmICghaXNFbWFpbEFwcHJvdmVkKCkpIHtcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtYm9sZFwiPiDQsNC00YDQtdGBINGN0LvQtdC60YLRgNC+0L3QvdC+0Lkg0L/QvtGH0YLRiyA8L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgIHR1aUxpbmtcbiAgICAgICAgICAgICAgICByb3V0ZXJMaW5rPVwiL3Byb2ZpbGVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgINCyINCy0LDRiNC10Lwg0L/RgNC+0YTQuNC70LVcbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuXG4gICAgPCEtLSDQodC/0L7RgdC+0LEg0LTQvtGB0YLQsNCy0LrQuC4gLS0+XG4gICAgPGxhYmVsIHR1aUxhYmVsPlxuICAgICAgICDQodC/0L7RgdC+0LEg0LTQvtGB0YLQsNCy0LrQuFxuICAgICAgICBAbGV0IGRlbGl2ZXJ5VHlwZXMgPSBkZWxpdmVyeVR5cGVzJCB8IGFzeW5jO1xuICAgICAgICA8dHVpLXNlbGVjdFxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGVsaXZlcnlUeXBlXCJcbiAgICAgICAgICAgIFt2YWx1ZUNvbnRlbnRdPVwiZGVsaXZlcnlUeXBlcyA/IHN0cmluZ2lmeShkZWxpdmVyeVR5cGVzKSA6IHNlbGVjdExvYWRpbmdcIlxuICAgICAgICA+XG4gICAgICAgICAgICDQodC/0L7RgdC+0LEg0LTQvtGB0YLQsNCy0LrQuFxuICAgICAgICAgICAgPHR1aS1kYXRhLWxpc3QgKnR1aURhdGFMaXN0PlxuICAgICAgICAgICAgICAgIEBmb3IgKGRlbGl2ZXJ5IG9mIGRlbGl2ZXJ5VHlwZXM7IHRyYWNrIGRlbGl2ZXJ5LmlkKSB7XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR1aU9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImRlbGl2ZXJ5LmlkXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgZGVsaXZlcnkubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3R1aS1kYXRhLWxpc3Q+XG4gICAgICAgIDwvdHVpLXNlbGVjdD5cbiAgICAgICAgPHR1aS1lcnJvclxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGVsaXZlcnlUeXBlXCJcbiAgICAgICAgICAgIFtlcnJvcl09XCJbXSB8IHR1aUZpZWxkRXJyb3IgfCBhc3luY1wiXG4gICAgICAgIC8+XG4gICAgPC9sYWJlbD5cblxuICAgIDwhLS0g0KHQutC70LDQtC4gLS0+XG4gICAgPGxhYmVsIHR1aUxhYmVsPlxuICAgICAgICDQodC60LvQsNC0XG4gICAgICAgIEBsZXQgd2FyZWhvdXNlcyA9IHdhcmVob3VzZXMkIHwgYXN5bmM7XG4gICAgICAgIDx0dWktc2VsZWN0XG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ3YXJlaG91c2VJZFwiXG4gICAgICAgICAgICBbdmFsdWVDb250ZW50XT1cIndhcmVob3VzZXMgPyBzdHJpbmdpZnkod2FyZWhvdXNlcykgOiBzZWxlY3RMb2FkaW5nXCJcbiAgICAgICAgPlxuICAgICAgICAgICAg0KHQutC70LDQtFxuICAgICAgICAgICAgPHR1aS1kYXRhLWxpc3QgKnR1aURhdGFMaXN0PlxuICAgICAgICAgICAgICAgIEBpZiAoIXRlcm1pbmFsLmlzUnVubmluZ09uVGVybWluYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgQGZvciAod2FyZWhvdXNlIG9mIHdhcmVob3VzZXM7IHRyYWNrIHdhcmVob3VzZS5pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1aU9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ3YXJlaG91c2UuaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHdhcmVob3VzZS5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBAaWYgKHdhcmVob3VzZVNlcnZpY2UuZ2V0Q2F0YWxvZ1dhcmVob3VzZUNoYW5nZSQoKSB8IGFzeW5jOyBhcyB0ZXJtaW5hbFdhcmVob3VzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1aU9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ0ZXJtaW5hbFdhcmVob3VzZS5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdGVybWluYWxXYXJlaG91c2UubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3R1aS1kYXRhLWxpc3Q+XG4gICAgICAgIDwvdHVpLXNlbGVjdD5cbiAgICAgICAgPHR1aS1lcnJvclxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwid2FyZWhvdXNlSWRcIlxuICAgICAgICAgICAgW2Vycm9yXT1cIltdIHwgdHVpRmllbGRFcnJvciB8IGFzeW5jXCJcbiAgICAgICAgLz5cbiAgICA8L2xhYmVsPlxuXG4gICAgPCEtLSDQkNC00YDQtdGBINC00L7RgdGC0LDQstC60LguIC0tPlxuICAgIEBpZiAoaXNEZWxpdmVyeSgpKSB7XG4gICAgICAgIEBsZXQgYWRkcmVzc2VzID0gYWRkcmVzc2VzJCB8IGFzeW5jO1xuICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGxhYmVsIHR1aUxhYmVsPlxuICAgICAgICAgICAgICAgINCQ0LTRgNC10YEg0LTQvtGB0YLQsNCy0LrQuFxuICAgICAgICAgICAgICAgIDx0dWktc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImFkZHJlc3NJZFwiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZUNvbnRlbnRdPVwiYWRkcmVzc2VzID8gc3RyaW5naWZ5KGFkZHJlc3NlcykgOiBzZWxlY3RMb2FkaW5nXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgINCQ0LTRgNC10YEg0LTQvtGB0YLQsNCy0LrQuFxuICAgICAgICAgICAgICAgICAgICA8dHVpLWRhdGEtbGlzdCAqdHVpRGF0YUxpc3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChhZGRyZXNzIG9mIGFkZHJlc3NlczsgdHJhY2sgYWRkcmVzcy5pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpT3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJhZGRyZXNzLmlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGFkZHJlc3MuYWRkcmVzcyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L3R1aS1kYXRhLWxpc3Q+XG4gICAgICAgICAgICAgICAgPC90dWktc2VsZWN0PlxuICAgICAgICAgICAgICAgIEBpZiAoYWRkcmVzc2VzICYmIGFkZHJlc3Nlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgPHR1aS1lcnJvciBlcnJvcj1cItCjINC60L7QvdGC0YDQsNCz0LXQvdGC0LAg0L3QtdGCINCw0LTRgNC10YHQsCDQtNC+0YHRgtCw0LLQutC4XCIgLz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPHR1aS1lcnJvclxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJhZGRyZXNzSWRcIlxuICAgICAgICAgICAgICAgICAgICBbZXJyb3JdPVwiW10gfCB0dWlGaWVsZEVycm9yIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICB0dWlMaW5rXG4gICAgICAgICAgICAgICAgaWNvblN0YXJ0PVwiQHR1aS5wbHVzXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkRGVsaXZlcnlBZGRyZXNzKClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwibXQtMiBibG9ja1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAg0J3QvtCy0YvQuVxuICAgICAgICAgICAgPC9hPlxuICAgICAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICA8IS0tINCU0LDRgtCwINC00L7RgdGC0LDQstC60Lgv0YHQsNC80L7QstGL0LLQvtC30LAuIC0tPlxuICAgIDxsYWJlbCB0dWlMYWJlbD5cbiAgICAgICAg0JbQtdC70LDQtdC80LDRjyDQtNCw0YLQsCB7eyBpc0RlbGl2ZXJ5KCkgPyAn0LTQvtGB0YLQsNCy0LrQuCcgOiAn0YHQsNC80L7QstGL0LLQvtC30LAnIH19XG4gICAgICAgIDx0dWktaW5wdXQtZGF0ZVxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGVsaXZlcnlEYXRlXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZEl0ZW1IYW5kbGVyXT1cImRlbGl2ZXJ5RGF0ZUZpbHRlclwiXG4gICAgICAgICAgICBbbWFya2VySGFuZGxlcl09XCJkZWxpdmVyeURhdGVNYXJrZXJcIlxuICAgICAgICAgICAgW21heF09XCJtYXhEZWxpdmVyeURheSgpXCJcbiAgICAgICAgICAgIFttaW5dPVwibWluRGVsaXZlcnlEYXkoKVwiXG4gICAgICAgID5cbiAgICAgICAgICAgINCW0LXQu9Cw0LXQvNCw0Y8g0LTQsNGC0LAge3sgaXNEZWxpdmVyeSgpID8gJ9C00L7RgdGC0LDQstC60LgnIDogJ9GB0LDQvNC+0LLRi9Cy0L7Qt9CwJyB9fVxuICAgICAgICA8L3R1aS1pbnB1dC1kYXRlPlxuICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkZWxpdmVyeURhdGVcIlxuICAgICAgICAgICAgW2Vycm9yXT1cIltdIHwgdHVpRmllbGRFcnJvciB8IGFzeW5jXCJcbiAgICAgICAgLz5cbiAgICA8L2xhYmVsPlxuXG4gICAgPCEtLSDQmtC+0LzQvNC10L3RgtCw0YDQuNC5INC60LvQuNC10L3RgtCwLiAtLT5cbiAgICA8bGFiZWwgdHVpTGFiZWw+XG4gICAgICAgINCa0L7QvNC80LXQvdGC0LDRgNC40Lkg0LrQu9C40LXQvdGC0LAg0Log0LfQsNC60LDQt9GDXG4gICAgICAgIDx0dWktdGV4dGFyZWFcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNvbW1lbnRcIlxuICAgICAgICAgICAgW2V4cGFuZGFibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbcm93c109XCIxNVwiXG4gICAgICAgID5cbiAgICAgICAgICAgINCS0LLQtdC00LjRgtC1INGC0LXQutGB0YJcbiAgICAgICAgPC90dWktdGV4dGFyZWE+XG4gICAgICAgIDx0dWktZXJyb3JcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNvbW1lbnRcIlxuICAgICAgICAgICAgW2Vycm9yXT1cIltdIHwgdHVpRmllbGRFcnJvciB8IGFzeW5jXCJcbiAgICAgICAgLz5cbiAgICA8L2xhYmVsPlxuXG4gICAgPCEtLSDQn9GA0LjQutGA0LXQv9C70LXQvdC40LUg0YTQsNC50LvQsCDQuiDQt9Cw0LrQsNC30YMuIC0tPlxuICAgIDxkaXY+XG4gICAgICAgIEBpZiAoIWNvbnRyb2xGaWxlLnZhbHVlKSB7XG4gICAgICAgICAgICA8bGFiZWwgdHVpSW5wdXRGaWxlcz5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgYWNjZXB0PVwiaW1hZ2UvKlwiXG4gICAgICAgICAgICAgICAgICAgIHR1aUlucHV0RmlsZXNcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xGaWxlXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgfVxuXG4gICAgICAgIDx0dWktZmlsZXMgY2xhc3M9XCJ0dWktc3BhY2VfdG9wLTFcIj5cbiAgICAgICAgICAgIEBpZiAoY29udHJvbEZpbGUudmFsdWUgfCB0dWlGaWxlUmVqZWN0ZWQ6IHsgYWNjZXB0OiAnaW1hZ2UvKicgfSB8IGFzeW5jOyBhcyBmaWxlKSB7XG4gICAgICAgICAgICAgICAgPHR1aS1maWxlXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlPVwiZXJyb3JcIlxuICAgICAgICAgICAgICAgICAgICBbZmlsZV09XCJmaWxlXCJcbiAgICAgICAgICAgICAgICAgICAgKHJlbW92ZSk9XCJyZW1vdmVGaWxlKClcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBmb3IgKGZpbGUgb2YgYWNjZXB0ZWQkIHwgYXN5bmM7IHRyYWNrIGZpbGUubmFtZSkge1xuICAgICAgICAgICAgICAgIDx0dWktZmlsZVxuICAgICAgICAgICAgICAgICAgICBbZmlsZV09XCJmaWxlXCJcbiAgICAgICAgICAgICAgICAgICAgKHJlbW92ZSk9XCJyZW1vdmVGaWxlKClcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvdHVpLWZpbGVzPlxuXG4gICAgICAgIDx0dWktZXJyb3JcbiAgICAgICAgICAgIFtlcnJvcl09XCJbJ21heExlbmd0aCddIHwgdHVpRmllbGRFcnJvciB8IGFzeW5jXCJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sRmlsZVwiXG4gICAgICAgIC8+XG4gICAgICAgIDxwIGNsYXNzPVwidHVpLWZvcm1fX2ZpZWxkLW5vdGVcIj7QndCw0L/RgNC40LzQtdGALCDRhNC+0YLQvtCz0YDQsNGE0LjRjiDQv9C+0LLRgNC10LbQtNC10L3QuNC5INC4INC00LXRhNGE0LXQutGC0L7Qsiwg0YfRgtC+INC/0L7RgdC70YPQttC40YIg0LTQvtC60LDQt9Cw0YLQtdC70YzRgdGC0LLQvtC8INC90LXRgdC+0L7RgtCy0LXRgtGB0YLQstC40Y8g0LfQsNGP0LLQu9C10L3QvdC+0LPQviDQutCw0YfQtdGB0YLQstCwINGC0L7QstCw0YDQsC48L3A+XG4gICAgPC9kaXY+XG48L2Zvcm0+XG4iXX0=
|