@seniorsistemas/angular-components 19.9.3 → 19.9.4
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/checkbox/lib/checkbox/checkbox.component.d.ts +1 -6
- package/checkbox-list/lib/checkbox-list/checkbox-list.component.d.ts +8 -0
- package/content-generator/lib/content-generator/content-generator.component.d.ts +2 -2
- package/country-phone-picker/lib/country-phone-picker/country-phone-picker.component.d.ts +2 -0
- package/drawer/README.md +9 -2
- package/drawer/lib/drawer/drawer.component.d.ts +12 -1
- package/editor/lib/editor/editor.component.d.ts +1 -1
- package/esm2022/button/lib/button/button.component.mjs +3 -3
- package/esm2022/checkbox/lib/checkbox/checkbox.component.mjs +3 -9
- package/esm2022/checkbox-list/lib/checkbox-list/checkbox-list.component.mjs +17 -5
- package/esm2022/content-generator/lib/content-generator/content-generator.component.mjs +9 -8
- package/esm2022/country-phone-picker/lib/country-phone-picker/country-phone-picker.component.mjs +18 -3
- package/esm2022/drawer/lib/drawer/drawer.component.mjs +33 -11
- package/esm2022/drawer/lib/drawer/drawer.module.mjs +2 -2
- package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +3 -3
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.mjs +3 -3
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/boolean/boolean-switch-field/boolean-switch-field.component.mjs +3 -3
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/checkbox/checkbox-field.component.mjs +4 -3
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/currency/currency-field.component.mjs +3 -3
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/number/number-field.component.mjs +3 -3
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/password/password-field.component.mjs +3 -3
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/text/text-field.component.mjs +3 -3
- package/esm2022/editor/lib/editor/editor.component.mjs +8 -8
- package/esm2022/file-picker/lib/file-picker/file-picker.component.mjs +4 -4
- package/esm2022/global-search/lib/global-search/components/dropdown/global-search-dropdown-item.component.mjs +4 -4
- package/esm2022/global-search/lib/global-search/global-search.module.mjs +2 -2
- package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.mjs +3 -3
- package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-text/inline-edit-text.component.mjs +2 -3
- package/esm2022/paginator/lib/models/paginator.models.mjs +1 -1
- package/esm2022/paginator/lib/paginator/paginator.component.mjs +19 -13
- package/esm2022/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.component.mjs +19 -8
- package/esm2022/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.module.mjs +3 -4
- package/esm2022/select/lib/select/select.component.mjs +3 -3
- package/esm2022/side-sheet/lib/side-sheet/side-sheet.component.mjs +6 -5
- package/esm2022/slider/lib/slider/slider.component.mjs +3 -3
- package/esm2022/speech-recognition/lib/speech-recognition/speech-recognition/speech-recognition.component.mjs +54 -8
- package/esm2022/star-rating/star-rating/star-rating.component.mjs +3 -3
- package/esm2022/table-header/lib/table-header/table-header-checkbox.component.mjs +14 -21
- package/esm2022/text-area/lib/text-area/text-area.component.mjs +3 -3
- package/esm2022/tooltip/lib/tooltip/tooltip.directive.mjs +3 -2
- package/esm2022/utils/lib/utils/utils.mjs +49 -3
- package/fesm2022/seniorsistemas-angular-components-button.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-button.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-checkbox-list.mjs +16 -4
- package/fesm2022/seniorsistemas-angular-components-checkbox-list.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-checkbox.mjs +2 -8
- package/fesm2022/seniorsistemas-angular-components-checkbox.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-content-generator.mjs +8 -6
- package/fesm2022/seniorsistemas-angular-components-content-generator.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs +17 -2
- package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-drawer.mjs +32 -9
- package/fesm2022/seniorsistemas-angular-components-drawer.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +16 -16
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-editor.mjs +7 -7
- package/fesm2022/seniorsistemas-angular-components-editor.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-file-picker.mjs +3 -3
- package/fesm2022/seniorsistemas-angular-components-file-picker.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-global-search.mjs +3 -3
- package/fesm2022/seniorsistemas-angular-components-global-search.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs +3 -4
- package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-paginator.mjs +18 -12
- package/fesm2022/seniorsistemas-angular-components-paginator.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs +20 -9
- package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-select.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-select.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-side-sheet.mjs +5 -4
- package/fesm2022/seniorsistemas-angular-components-side-sheet.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-slider.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-slider.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-speech-recognition.mjs +53 -7
- package/fesm2022/seniorsistemas-angular-components-speech-recognition.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-star-rating.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-star-rating.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-table-header.mjs +13 -20
- package/fesm2022/seniorsistemas-angular-components-table-header.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-text-area.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-text-area.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-tooltip.mjs +2 -1
- package/fesm2022/seniorsistemas-angular-components-tooltip.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-utils.mjs +49 -3
- package/fesm2022/seniorsistemas-angular-components-utils.mjs.map +1 -1
- package/global-search/lib/global-search/global-search.module.d.ts +1 -1
- package/package.json +7 -9
- package/paginator/lib/models/paginator.models.d.ts +1 -0
- package/paginator/lib/paginator/paginator.component.d.ts +3 -1
- package/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.component.d.ts +3 -1
- package/side-sheet/README.md +4 -4
- package/side-sheet/lib/side-sheet/side-sheet.component.d.ts +1 -0
- package/speech-recognition/lib/speech-recognition/speech-recognition/speech-recognition.component.d.ts +2 -1
- package/table-header/lib/table-header/table-header-checkbox.component.d.ts +1 -4
- package/utils/lib/utils/utils.d.ts +21 -0
|
@@ -2,7 +2,7 @@ import { NgTemplateOutlet } from '@angular/common';
|
|
|
2
2
|
import { animate, style, transition, trigger } from '@angular/animations';
|
|
3
3
|
import { CdkTrapFocus } from '@angular/cdk/a11y';
|
|
4
4
|
import { Component, DestroyRef, computed, effect, inject, signal, untracked, viewChild } from '@angular/core';
|
|
5
|
-
import {
|
|
5
|
+
import { createScrollLock, randomHash } from '@seniorsistemas/angular-components/utils';
|
|
6
6
|
import { SideSheetService } from './services/side-sheet.service';
|
|
7
7
|
import * as i0 from "@angular/core";
|
|
8
8
|
/** Mantida em sincronia com o breakpoint `[@media(min-width:1024px)]` usado no template e em `panelWidthClasses`. */
|
|
@@ -62,6 +62,7 @@ export class SideSheetComponent {
|
|
|
62
62
|
? '[@media(min-width:1024px)]:w-[400px] [@media(min-width:1366px)]:w-[max(400px,50vw)]'
|
|
63
63
|
: '[@media(min-width:1024px)]:w-[400px] [@media(min-width:1920px)]:w-[480px] [@media(min-width:2560px)]:w-[560px] [@media(min-width:3440px)]:w-[640px]');
|
|
64
64
|
_elementToRefocus = null;
|
|
65
|
+
_scrollLock = createScrollLock();
|
|
65
66
|
constructor() {
|
|
66
67
|
const destroyRef = inject(DestroyRef);
|
|
67
68
|
this.sideSheetService._registerInstance();
|
|
@@ -75,10 +76,10 @@ export class SideSheetComponent {
|
|
|
75
76
|
effect(() => {
|
|
76
77
|
const shouldLockScroll = this.sideSheetService.visible() && this.isOverlayMode();
|
|
77
78
|
if (shouldLockScroll) {
|
|
78
|
-
|
|
79
|
+
this._scrollLock.lock();
|
|
79
80
|
}
|
|
80
81
|
else {
|
|
81
|
-
|
|
82
|
+
this._scrollLock.unlock();
|
|
82
83
|
}
|
|
83
84
|
});
|
|
84
85
|
effect(() => {
|
|
@@ -93,7 +94,7 @@ export class SideSheetComponent {
|
|
|
93
94
|
this._elementToRefocus = null;
|
|
94
95
|
}
|
|
95
96
|
});
|
|
96
|
-
destroyRef.onDestroy(() =>
|
|
97
|
+
destroyRef.onDestroy(() => this._scrollLock.unlock());
|
|
97
98
|
}
|
|
98
99
|
closeSideSheet() {
|
|
99
100
|
this.sideSheetService.close();
|
|
@@ -168,4 +169,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
168
169
|
]),
|
|
169
170
|
], template: "<div class=\"side-sheet relative flex h-full w-full\">\n <div class=\"side-sheet__content min-w-0 flex-1 overflow-auto\">\n <ng-content></ng-content>\n </div>\n\n @if (sideSheetService.visible()) {\n @if (isOverlayMode()) {\n <div class=\"side-sheet__backdrop absolute inset-0 z-20 bg-[rgba(0,0,0,0.5)]\" @backdropVisibility></div>\n }\n\n <aside\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"isOverlayMode()\"\n [@panelVisibility]=\"animationMode()\"\n class=\"side-sheet__panel z-30 flex flex-col gap-4 border-l border-grayscale-20 bg-grayscale-0 p-4 shadow-[0px_2px_4px_rgba(0,0,0,0.2),0px_1px_10px_rgba(0,0,0,0.12),0px_4px_5px_rgba(0,0,0,0.14)] absolute inset-0 w-full [@media(min-width:1024px)]:static [@media(min-width:1024px)]:inset-auto\"\n [class]=\"panelWidthClasses()\"\n [class.side-sheet__panel--half]=\"sideSheetService.size() === 'half'\"\n [attr.role]=\"isOverlayMode() ? 'dialog' : 'complementary'\"\n [attr.aria-modal]=\"isOverlayMode() ? true : null\"\n [attr.aria-labelledby]=\"titleId\"\n >\n <div class=\"side-sheet__header flex flex-col gap-3\">\n <div class=\"flex items-center gap-4\">\n <h2\n #titleRef\n [id]=\"titleId\"\n tabindex=\"-1\"\n class=\"min-w-0 flex-1 break-words font-open-sans text-base font-normal uppercase text-grayscale-90 outline-none\"\n >\n {{ sideSheetService.header() }}\n </h2>\n <button\n type=\"button\"\n class=\"flex shrink-0 cursor-pointer items-center justify-center rounded-medium border-none bg-transparent p-2 outline-none focus-visible:ring-2 focus-visible:ring-primary\"\n aria-label=\"Fechar\"\n (click)=\"closeSideSheet()\"\n >\n <i class=\"fas fa-times text-xs\" aria-hidden=\"true\"></i>\n </button>\n </div>\n <hr class=\"h-px w-full border-0 bg-grayscale-20\" />\n </div>\n\n <div class=\"side-sheet__body min-h-0 flex-1 overflow-auto\">\n <ng-container\n *ngTemplateOutlet=\"sideSheetService.template(); context: sideSheetService.context()\"\n ></ng-container>\n </div>\n </aside>\n }\n</div>\n" }]
|
|
170
171
|
}], ctorParameters: () => [] });
|
|
171
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZS1zaGVldC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvc2lkZS1zaGVldC9zcmMvbGliL3NpZGUtc2hlZXQvc2lkZS1zaGVldC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvc2lkZS1zaGVldC9zcmMvbGliL3NpZGUtc2hlZXQvc2lkZS1zaGVldC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDMUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFjLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFILE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRW5HLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDOztBQUVqRSxxSEFBcUg7QUFDckgsTUFBTSxhQUFhLEdBQUcscUJBQXFCLENBQUM7QUFFNUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9DRztBQXVDSCxNQUFNLE9BQU8sa0JBQWtCO0lBQ1IsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFFL0QsMEZBQTBGO0lBQ3ZFLE9BQU8sR0FBRyxVQUFVLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUUzQyxR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QztxQkFDTCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgYW5pbWF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IENka1RyYXBGb2N1cyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IENvbXBvbmVudCwgRGVzdHJveVJlZiwgRWxlbWVudFJlZiwgY29tcHV0ZWQsIGVmZmVjdCwgaW5qZWN0LCBzaWduYWwsIHVudHJhY2tlZCwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBkaXNhYmxlU2Nyb2xsLCBlbmFibGVTY3JvbGwsIHJhbmRvbUhhc2ggfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL3V0aWxzJztcblxuaW1wb3J0IHsgU2lkZVNoZWV0U2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvc2lkZS1zaGVldC5zZXJ2aWNlJztcblxuLyoqIE1hbnRpZGEgZW0gc2luY3JvbmlhIGNvbSBvIGJyZWFrcG9pbnQgYFtAbWVkaWEobWluLXdpZHRoOjEwMjRweCldYCB1c2FkbyBubyB0ZW1wbGF0ZSBlIGVtIGBwYW5lbFdpZHRoQ2xhc3Nlc2AuICovXG5jb25zdCBPVkVSTEFZX1FVRVJZID0gJyhtaW4td2lkdGg6IDEwMjRweCknO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBQYWluZWwgcXVlIGVtcHVycmEgbyBjb250ZcO6ZG8gYWRqYWNlbnRlIHBhcmEgYSBlc3F1ZXJkYSwgZGl2aWRpbmRvIG8gZXNwYcOnb1xuICogaG9yaXpvbnRhbCBjb20gZWxlIOKAlCBzZW0gZXNjdXJlY2VyIGEgdGVsYSBlIHNlbSBzb2JyZXBvciBvIGNvbnRlw7pkbywgbm8gbW9kbyBkZXNrdG9wXG4gKiAoPj0gMTAyNHB4KS4gQWJhaXhvIGRlIDEwMjRweCBvIHBhaW5lbCBwYXNzYSBhIGZ1bmNpb25hciBjb21vIHVtIG92ZXJsYXkgZW0gdGVsYSBjaGVpYSxcbiAqIGNvbSBmdW5kbyBlc2N1cmVjaWRvLCBpZ3VhbCBhIHVtIERyYXdlci5cbiAqXG4gKiBGZWNoYSBzb21lbnRlIHBlbG8gYm90w6NvIGRlIGZlY2hhciAoWCkgZG8gY2FiZcOnYWxobyDigJQgbsOjbyBow6EgZmVjaGFtZW50byBwb3IgdGVjbGEgRXNjYXBlXG4gKiBvdSBjbGlxdWUgZm9yYSwgZW0gbmVuaHVtYSByZXNvbHXDp8Ojby4gRXNzYSDDqSB1bWEgZGVjaXPDo28gZGUgcHJvZHV0byBkZWxpYmVyYWRhOiBvIGNvbnRlw7pkb1xuICogcG9yIHRyw6FzIGRvIHBhaW5lbCBwZXJtYW5lY2UgaW50ZXJhdGl2byAoZmlsdHJvcywgZHJvcGRvd25zLCBhdXRvY29tcGxldGUpIGUgdW0gYXRhbGhvXG4gKiBnbG9iYWwgZGUgRXNjYXBlIGVudHJhcmlhIGVtIGNvbmZsaXRvIGNvbSBvdXRyb3Mgb3ZlcmxheXMgasOhIGFiZXJ0b3Mgc29icmUgZXNzZSBjb250ZcO6ZG8uXG4gKlxuICogU2VtIGlucHV0czogw6kgdW1hIGluc3TDom5jaWEgKirDum5pY2EqKiBwb3IgYXBsaWNhw6fDo28sIGRlY2xhcmFkYSB1bWEgdmV6IG5vIHNoZWxsIGRvIGFwcCAoZXg6XG4gKiBgYXBwLmNvbXBvbmVudC5odG1sYCwgbG9nbyBhYmFpeG8gZGEgdG9wYmFyKSBlIGNvbnRyb2xhZGEgcmVtb3RhbWVudGUgcG9yXG4gKiBgU2lkZVNoZWV0U2VydmljZS5vcGVuKClgL2BjbG9zZSgpYCBhIHBhcnRpciBkZSBxdWFscXVlciBjb21wb25lbnRlIGRlIHJvdGEuIFVtYSBzZWd1bmRhXG4gKiBpbnN0w6JuY2lhIG1vbnRhZGEgc2ltdWx0YW5lYW1lbnRlIGxhbsOnYSB1bSBlcnJvIGVtIG1vZG8gZGUgZGVzZW52b2x2aW1lbnRvLiBPIGNvbnRlw7pkb1xuICogcHJvamV0YWRvIGRlbnRybyBkbyBgPHMtc2lkZS1zaGVldD5gIMOpIG8gY29udGXDumRvIHByaW5jaXBhbCBkYSBww6FnaW5hIChleDogb1xuICogYHJvdXRlci1vdXRsZXRgKSwgZW1wdXJyYWRvIHBlbG8gcGFpbmVsIHF1YW5kbyBlbGUgYWJyZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPCEtLSBhcHAuY29tcG9uZW50Lmh0bWwgLS0+XG4gKiA8cy1zaWRlLXNoZWV0PlxuICogICA8cm91dGVyLW91dGxldCAvPlxuICogPC9zLXNpZGUtc2hlZXQ+XG4gKiBgYGBcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIHBlZGlkb3MuY29tcG9uZW50LnRzXG4gKiBwcml2YXRlIHJlYWRvbmx5IHNpZGVTaGVldFNlcnZpY2UgPSBpbmplY3QoU2lkZVNoZWV0U2VydmljZSk7XG4gKiBwcml2YXRlIHJlYWRvbmx5IHBhbmVsQm9keSA9IHZpZXdDaGlsZDxUZW1wbGF0ZVJlZjx1bmtub3duPj4oJ3BhbmVsQm9keScpO1xuICpcbiAqIHByb3RlY3RlZCBzZWxlY2lvbmFyUGVkaWRvKHBlZGlkbzogUGVkaWRvKTogdm9pZCB7XG4gKiAgICAgdGhpcy5zaWRlU2hlZXRTZXJ2aWNlLm9wZW4oeyBoZWFkZXI6IHBlZGlkby5udW1lcm8sIHRlbXBsYXRlOiB0aGlzLnBhbmVsQm9keSgpISB9KTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBjYXRlZ29yeSBPdmVybGF5XG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncy1zaWRlLXNoZWV0JyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zaWRlLXNoZWV0LmNvbXBvbmVudC5odG1sJyxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAnYmxvY2sgaC1mdWxsIHctZnVsbCBmbGV4LTEgbWluLWgtMCcsXG4gICAgfSxcbiAgICBpbXBvcnRzOiBbQ2RrVHJhcEZvY3VzLCBOZ1RlbXBsYXRlT3V0bGV0XSxcbiAgICBhbmltYXRpb25zOiBbXG4gICAgICAgIHRyaWdnZXIoJ3BhbmVsVmlzaWJpbGl0eScsIFtcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJ3ZvaWQgPT4gcHVzaCcsIFtcbiAgICAgICAgICAgICAgICBzdHlsZSh7IHdpZHRoOiAwIH0pLFxuICAgICAgICAgICAgICAgIGFuaW1hdGUoJzMwMG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSknLCBzdHlsZSh7IHdpZHRoOiAnKicgfSkpLFxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCdwdXNoID0+IHZvaWQnLCBbXG4gICAgICAgICAgICAgICAgc3R5bGUoeyB3aWR0aDogJyonIH0pLFxuICAgICAgICAgICAgICAgIGFuaW1hdGUoJzMwMG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSknLCBzdHlsZSh7IHdpZHRoOiAwIH0pKSxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgdHJhbnNpdGlvbigndm9pZCA9PiBvdmVybGF5JywgW1xuICAgICAgICAgICAgICAgIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWCgxMDAlKScgfSksXG4gICAgICAgICAgICAgICAgYW5pbWF0ZSgnMzAwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKScsIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWCgwKScgfSkpLFxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCdvdmVybGF5ID0+IHZvaWQnLCBbXG4gICAgICAgICAgICAgICAgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKDApJyB9KSxcbiAgICAgICAgICAgICAgICBhbmltYXRlKCczMDBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpJywgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKDEwMCUpJyB9KSksXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIC8vIFJlc2l6ZSBjcnV6YW5kbyBvIGJyZWFrcG9pbnQgY29tIG8gcGFpbmVsIGrDoSBhYmVydG86IG7Do28gZXhpc3RlIHVtIHR3ZWVuIHZpc3VhbG1lbnRlXG4gICAgICAgICAgICAvLyBjb2VyZW50ZSBlbnRyZSB3aWR0aDo0MDBweC9zdGF0aWMgKHB1c2gpIGUgd2lkdGg6MTAwJS9hYnNvbHV0ZSAob3ZlcmxheSkg4oCUIGFwbGljYSBvXG4gICAgICAgICAgICAvLyBlc3RhZG8gZmluYWwgaW1lZGlhdGFtZW50ZSwgc2VtIHRyYW5zacOnw6NvIHJlc2lkdWFsLlxuICAgICAgICAgICAgdHJhbnNpdGlvbigncHVzaCA9PiBvdmVybGF5JywgW10pLFxuICAgICAgICAgICAgdHJhbnNpdGlvbignb3ZlcmxheSA9PiBwdXNoJywgW10pLFxuICAgICAgICBdKSxcbiAgICAgICAgdHJpZ2dlcignYmFja2Ryb3BWaXNpYmlsaXR5JywgW1xuICAgICAgICAgICAgdHJhbnNpdGlvbignOmVudGVyJywgW3N0eWxlKHsgb3BhY2l0eTogMCB9KSwgYW5pbWF0ZSgnMzAwbXMgZWFzZScsIHN0eWxlKHsgb3BhY2l0eTogMSB9KSldKSxcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJzpsZWF2ZScsIFtzdHlsZSh7IG9wYWNpdHk6IDEgfSksIGFuaW1hdGUoJzMwMG1zIGVhc2UnLCBzdHlsZSh7IG9wYWNpdHk6IDAgfSkpXSksXG4gICAgICAgIF0pLFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIFNpZGVTaGVldENvbXBvbmVudCB7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHNpZGVTaGVldFNlcnZpY2UgPSBpbmplY3QoU2lkZVNoZWV0U2VydmljZSk7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIElkIMO6bmljbyB1c2FkbyBwYXJhIGFzc29jaWFyIG8gdMOtdHVsbyBhbyBwYWluZWwgdmlhIGBhcmlhLWxhYmVsbGVkYnlgLiAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSB0aXRsZUlkID0gcmFuZG9tSGFzaCgnc2lkZS1zaGVldC10aXRsZScpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSB0aXRsZVJlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPEhUTUxIZWFkaW5nRWxlbWVudD4+KCd0aXRsZVJlZicpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaXNEZXNrdG9wVmlld3BvcnQgPSBzaWduYWwodGhpcy5fbWF0Y2hlc0Rlc2t0b3AoKSk7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIGB0cnVlYCBxdWFuZG8gbyBwYWluZWwgZnVuY2lvbmEgY29tbyBvdmVybGF5IGVtIHRlbGEgY2hlaWEgKDwgMTAyNHB4KS4gKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXNPdmVybGF5TW9kZSA9IGNvbXB1dGVkKCgpID0+ICF0aGlzLmlzRGVza3RvcFZpZXdwb3J0KCkpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBhbmltYXRpb25Nb2RlID0gY29tcHV0ZWQ8J3B1c2gnIHwgJ292ZXJsYXknPigoKSA9PlxuICAgICAgICB0aGlzLmlzT3ZlcmxheU1vZGUoKSA/ICdvdmVybGF5JyA6ICdwdXNoJyxcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIExhcmd1cmEgZG8gcGFpbmVsIG5vIG1vZG8gcHVzaCwgcG9yIGJyZWFrcG9pbnQuIGBoYWxmYCBzw7MgcGFzc2EgYSBzZXJcbiAgICAgKiBmbHVpZG8gYSBwYXJ0aXIgZGUgMTM2NnB4IOKAlCBlbnRyZSAxMDI04oCTMTM2NXB4IGhlcmRhIG9zIG1lc21vcyA0MDBweCBkbyBgZGVmYXVsdGBcbiAgICAgKiAoY29udmVyc8OjbyBkZSBcIkhhbGZcIiBwYXJhIFwiRGVmYXVsdFwiIGRlc2NyaXRhIG5hIGVzcGVjaWZpY2HDp8OjbyBkZSBwcm9kdXRvKS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcGFuZWxXaWR0aENsYXNzZXMgPSBjb21wdXRlZCgoKSA9PlxuICAgICAgICB0aGlzLnNpZGVTaGVldFNlcnZpY2Uuc2l6ZSgpID09PSAnaGFsZidcbiAgICAgICAgICAgID8gJ1tAbWVkaWEobWluLXdpZHRoOjEwMjRweCldOnctWzQwMHB4XSBbQG1lZGlhKG1pbi13aWR0aDoxMzY2cHgpXTp3LVttYXgoNDAwcHgsNTB2dyldJ1xuICAgICAgICAgICAgOiAnW0BtZWRpYShtaW4td2lkdGg6MTAyNHB4KV06dy1bNDAwcHhdIFtAbWVkaWEobWluLXdpZHRoOjE5MjBweCldOnctWzQ4MHB4XSBbQG1lZGlhKG1pbi13aWR0aDoyNTYwcHgpXTp3LVs1NjBweF0gW0BtZWRpYShtaW4td2lkdGg6MzQ0MHB4KV06dy1bNjQwcHhdJyxcbiAgICApO1xuXG4gICAgcHJpdmF0ZSBfZWxlbWVudFRvUmVmb2N1czogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBjb25zdCBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgICAgIHRoaXMuc2lkZVNoZWV0U2VydmljZS5fcmVnaXN0ZXJJbnN0YW5jZSgpO1xuICAgICAgICBkZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiB0aGlzLnNpZGVTaGVldFNlcnZpY2UuX3VucmVnaXN0ZXJJbnN0YW5jZSgpKTtcblxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5tYXRjaE1lZGlhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjb25zdCBtZWRpYVF1ZXJ5TGlzdCA9IHdpbmRvdy5tYXRjaE1lZGlhKE9WRVJMQVlfUVVFUlkpO1xuICAgICAgICAgICAgY29uc3QgbGlzdGVuZXIgPSAoZXZlbnQ6IE1lZGlhUXVlcnlMaXN0RXZlbnQpOiB2b2lkID0+IHRoaXMuaXNEZXNrdG9wVmlld3BvcnQuc2V0KGV2ZW50Lm1hdGNoZXMpO1xuICAgICAgICAgICAgbWVkaWFRdWVyeUxpc3QuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgbGlzdGVuZXIpO1xuICAgICAgICAgICAgZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4gbWVkaWFRdWVyeUxpc3QucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgbGlzdGVuZXIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzaG91bGRMb2NrU2Nyb2xsID0gdGhpcy5zaWRlU2hlZXRTZXJ2aWNlLnZpc2libGUoKSAmJiB0aGlzLmlzT3ZlcmxheU1vZGUoKTtcbiAgICAgICAgICAgIGlmIChzaG91bGRMb2NrU2Nyb2xsKSB7XG4gICAgICAgICAgICAgICAgZGlzYWJsZVNjcm9sbCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBlbmFibGVTY3JvbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNpZGVTaGVldFNlcnZpY2UudmlzaWJsZSgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZWxlbWVudFRvUmVmb2N1cyA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgICAgICAgICAgICAgIGlmICghdW50cmFja2VkKHRoaXMuaXNPdmVybGF5TW9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gdGhpcy50aXRsZVJlZigpPy5uYXRpdmVFbGVtZW50LmZvY3VzKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZWxlbWVudFRvUmVmb2N1cz8uZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbGVtZW50VG9SZWZvY3VzID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4gZW5hYmxlU2Nyb2xsKCkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBjbG9zZVNpZGVTaGVldCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zaWRlU2hlZXRTZXJ2aWNlLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfbWF0Y2hlc0Rlc2t0b3AoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93Lm1hdGNoTWVkaWEgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgID8gd2luZG93Lm1hdGNoTWVkaWEoT1ZFUkxBWV9RVUVSWSkubWF0Y2hlc1xuICAgICAgICAgICAgOiB0cnVlO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJzaWRlLXNoZWV0IHJlbGF0aXZlIGZsZXggaC1mdWxsIHctZnVsbFwiPlxuICAgIDxkaXYgY2xhc3M9XCJzaWRlLXNoZWV0X19jb250ZW50IG1pbi13LTAgZmxleC0xIG92ZXJmbG93LWF1dG9cIj5cbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuXG4gICAgQGlmIChzaWRlU2hlZXRTZXJ2aWNlLnZpc2libGUoKSkge1xuICAgICAgICBAaWYgKGlzT3ZlcmxheU1vZGUoKSkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNpZGUtc2hlZXRfX2JhY2tkcm9wIGFic29sdXRlIGluc2V0LTAgei0yMCBiZy1bcmdiYSgwLDAsMCwwLjUpXVwiIEBiYWNrZHJvcFZpc2liaWxpdHk+PC9kaXY+XG4gICAgICAgIH1cblxuICAgICAgICA8YXNpZGVcbiAgICAgICAgICAgIGNka1RyYXBGb2N1c1xuICAgICAgICAgICAgW2Nka1RyYXBGb2N1c0F1dG9DYXB0dXJlXT1cImlzT3ZlcmxheU1vZGUoKVwiXG4gICAgICAgICAgICBbQHBhbmVsVmlzaWJpbGl0eV09XCJhbmltYXRpb25Nb2RlKClcIlxuICAgICAgICAgICAgY2xhc3M9XCJzaWRlLXNoZWV0X19wYW5lbCB6LTMwIGZsZXggZmxleC1jb2wgZ2FwLTQgYm9yZGVyLWwgYm9yZGVyLWdyYXlzY2FsZS0yMCBiZy1ncmF5c2NhbGUtMCBwLTQgc2hhZG93LVswcHhfMnB4XzRweF9yZ2JhKDAsMCwwLDAuMiksMHB4XzFweF8xMHB4X3JnYmEoMCwwLDAsMC4xMiksMHB4XzRweF81cHhfcmdiYSgwLDAsMCwwLjE0KV0gYWJzb2x1dGUgaW5zZXQtMCB3LWZ1bGwgW0BtZWRpYShtaW4td2lkdGg6MTAyNHB4KV06c3RhdGljIFtAbWVkaWEobWluLXdpZHRoOjEwMjRweCldOmluc2V0LWF1dG9cIlxuICAgICAgICAgICAgW2NsYXNzXT1cInBhbmVsV2lkdGhDbGFzc2VzKClcIlxuICAgICAgICAgICAgW2NsYXNzLnNpZGUtc2hlZXRfX3BhbmVsLS1oYWxmXT1cInNpZGVTaGVldFNlcnZpY2Uuc2l6ZSgpID09PSAnaGFsZidcIlxuICAgICAgICAgICAgW2F0dHIucm9sZV09XCJpc092ZXJsYXlNb2RlKCkgPyAnZGlhbG9nJyA6ICdjb21wbGVtZW50YXJ5J1wiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLW1vZGFsXT1cImlzT3ZlcmxheU1vZGUoKSA/IHRydWUgOiBudWxsXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJ0aXRsZUlkXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNpZGUtc2hlZXRfX2hlYWRlciBmbGV4IGZsZXgtY29sIGdhcC0zXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC00XCI+XG4gICAgICAgICAgICAgICAgICAgIDxoMlxuICAgICAgICAgICAgICAgICAgICAgICAgI3RpdGxlUmVmXG4gICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwidGl0bGVJZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWluLXctMCBmbGV4LTEgYnJlYWstd29yZHMgZm9udC1vcGVuLXNhbnMgdGV4dC1iYXNlIGZvbnQtbm9ybWFsIHVwcGVyY2FzZSB0ZXh0LWdyYXlzY2FsZS05MCBvdXRsaW5lLW5vbmVcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBzaWRlU2hlZXRTZXJ2aWNlLmhlYWRlcigpIH19XG4gICAgICAgICAgICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IHNocmluay0wIGN1cnNvci1wb2ludGVyIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLW1lZGl1bSBib3JkZXItbm9uZSBiZy10cmFuc3BhcmVudCBwLTIgb3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6cmluZy0yIGZvY3VzLXZpc2libGU6cmluZy1wcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJGZWNoYXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsb3NlU2lkZVNoZWV0KClcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10aW1lcyB0ZXh0LXhzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8aHIgY2xhc3M9XCJoLXB4IHctZnVsbCBib3JkZXItMCBiZy1ncmF5c2NhbGUtMjBcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaWRlLXNoZWV0X19ib2R5IG1pbi1oLTAgZmxleC0xIG92ZXJmbG93LWF1dG9cIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwic2lkZVNoZWV0U2VydmljZS50ZW1wbGF0ZSgpOyBjb250ZXh0OiBzaWRlU2hlZXRTZXJ2aWNlLmNvbnRleHQoKVwiXG4gICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYXNpZGU+XG4gICAgfVxuPC9kaXY+XG4iXX0=
|
|
172
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZS1zaGVldC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvc2lkZS1zaGVldC9zcmMvbGliL3NpZGUtc2hlZXQvc2lkZS1zaGVldC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvc2lkZS1zaGVldC9zcmMvbGliL3NpZGUtc2hlZXQvc2lkZS1zaGVldC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDMUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFjLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUV4RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7QUFFakUscUhBQXFIO0FBQ3JILE1BQU0sYUFBYSxHQUFHLHFCQUFxQixDQUFDO0FBRTVDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQ0c7QUF1Q0gsTUFBTSxPQUFPLGtCQUFrQjtJQUNSLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBRS9ELDBGQUEwRjtJQUN2RSxPQUFPLEdBQUcsVUFBVSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFFM0MsUUFBUSxHQUFH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T0FBTyxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7eUJBQzlGLENBQUM7cUJBQ0wiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGFuaW1hdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBDZGtUcmFwRm9jdXMgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBDb21wb25lbnQsIERlc3Ryb3lSZWYsIEVsZW1lbnRSZWYsIGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCwgc2lnbmFsLCB1bnRyYWNrZWQsIHZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY3JlYXRlU2Nyb2xsTG9jaywgcmFuZG9tSGFzaCB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvdXRpbHMnO1xuXG5pbXBvcnQgeyBTaWRlU2hlZXRTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9zaWRlLXNoZWV0LnNlcnZpY2UnO1xuXG4vKiogTWFudGlkYSBlbSBzaW5jcm9uaWEgY29tIG8gYnJlYWtwb2ludCBgW0BtZWRpYShtaW4td2lkdGg6MTAyNHB4KV1gIHVzYWRvIG5vIHRlbXBsYXRlIGUgZW0gYHBhbmVsV2lkdGhDbGFzc2VzYC4gKi9cbmNvbnN0IE9WRVJMQVlfUVVFUlkgPSAnKG1pbi13aWR0aDogMTAyNHB4KSc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFBhaW5lbCBxdWUgZW1wdXJyYSBvIGNvbnRlw7pkbyBhZGphY2VudGUgcGFyYSBhIGVzcXVlcmRhLCBkaXZpZGluZG8gbyBlc3Bhw6dvXG4gKiBob3Jpem9udGFsIGNvbSBlbGUg4oCUIHNlbSBlc2N1cmVjZXIgYSB0ZWxhIGUgc2VtIHNvYnJlcG9yIG8gY29udGXDumRvLCBubyBtb2RvIGRlc2t0b3BcbiAqICg+PSAxMDI0cHgpLiBBYmFpeG8gZGUgMTAyNHB4IG8gcGFpbmVsIHBhc3NhIGEgZnVuY2lvbmFyIGNvbW8gdW0gb3ZlcmxheSBlbSB0ZWxhIGNoZWlhLFxuICogY29tIGZ1bmRvIGVzY3VyZWNpZG8sIGlndWFsIGEgdW0gRHJhd2VyLlxuICpcbiAqIEZlY2hhIHNvbWVudGUgcGVsbyBib3TDo28gZGUgZmVjaGFyIChYKSBkbyBjYWJlw6dhbGhvIOKAlCBuw6NvIGjDoSBmZWNoYW1lbnRvIHBvciB0ZWNsYSBFc2NhcGVcbiAqIG91IGNsaXF1ZSBmb3JhLCBlbSBuZW5odW1hIHJlc29sdcOnw6NvLiBFc3NhIMOpIHVtYSBkZWNpc8OjbyBkZSBwcm9kdXRvIGRlbGliZXJhZGE6IG8gY29udGXDumRvXG4gKiBwb3IgdHLDoXMgZG8gcGFpbmVsIHBlcm1hbmVjZSBpbnRlcmF0aXZvIChmaWx0cm9zLCBkcm9wZG93bnMsIGF1dG9jb21wbGV0ZSkgZSB1bSBhdGFsaG9cbiAqIGdsb2JhbCBkZSBFc2NhcGUgZW50cmFyaWEgZW0gY29uZmxpdG8gY29tIG91dHJvcyBvdmVybGF5cyBqw6EgYWJlcnRvcyBzb2JyZSBlc3NlIGNvbnRlw7pkby5cbiAqXG4gKiBTZW0gaW5wdXRzOiDDqSB1bWEgaW5zdMOibmNpYSAqKsO6bmljYSoqIHBvciBhcGxpY2HDp8OjbywgZGVjbGFyYWRhIHVtYSB2ZXogbm8gc2hlbGwgZG8gYXBwIChleDpcbiAqIGBhcHAuY29tcG9uZW50Lmh0bWxgLCBsb2dvIGFiYWl4byBkYSB0b3BiYXIpIGUgY29udHJvbGFkYSByZW1vdGFtZW50ZSBwb3JcbiAqIGBTaWRlU2hlZXRTZXJ2aWNlLm9wZW4oKWAvYGNsb3NlKClgIGEgcGFydGlyIGRlIHF1YWxxdWVyIGNvbXBvbmVudGUgZGUgcm90YS4gVW1hIHNlZ3VuZGFcbiAqIGluc3TDom5jaWEgbW9udGFkYSBzaW11bHRhbmVhbWVudGUgbGFuw6dhIHVtIGVycm8gZW0gbW9kbyBkZSBkZXNlbnZvbHZpbWVudG8uIE8gY29udGXDumRvXG4gKiBwcm9qZXRhZG8gZGVudHJvIGRvIGA8cy1zaWRlLXNoZWV0PmAgw6kgbyBjb250ZcO6ZG8gcHJpbmNpcGFsIGRhIHDDoWdpbmEgKGV4OiBvXG4gKiBgcm91dGVyLW91dGxldGApLCBlbXB1cnJhZG8gcGVsbyBwYWluZWwgcXVhbmRvIGVsZSBhYnJlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8IS0tIGFwcC5jb21wb25lbnQuaHRtbCAtLT5cbiAqIDxzLXNpZGUtc2hlZXQ+XG4gKiAgIDxyb3V0ZXItb3V0bGV0IC8+XG4gKiA8L3Mtc2lkZS1zaGVldD5cbiAqIGBgYFxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gcGVkaWRvcy5jb21wb25lbnQudHNcbiAqIHByaXZhdGUgcmVhZG9ubHkgc2lkZVNoZWV0U2VydmljZSA9IGluamVjdChTaWRlU2hlZXRTZXJ2aWNlKTtcbiAqIHByaXZhdGUgcmVhZG9ubHkgcGFuZWxCb2R5ID0gdmlld0NoaWxkPFRlbXBsYXRlUmVmPHVua25vd24+PigncGFuZWxCb2R5Jyk7XG4gKlxuICogcHJvdGVjdGVkIHNlbGVjaW9uYXJQZWRpZG8ocGVkaWRvOiBQZWRpZG8pOiB2b2lkIHtcbiAqICAgICB0aGlzLnNpZGVTaGVldFNlcnZpY2Uub3Blbih7IGhlYWRlcjogcGVkaWRvLm51bWVybywgdGVtcGxhdGU6IHRoaXMucGFuZWxCb2R5KCkhIH0pO1xuICogfVxuICogYGBgXG4gKlxuICogQGNhdGVnb3J5IE92ZXJsYXlcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdzLXNpZGUtc2hlZXQnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NpZGUtc2hlZXQuY29tcG9uZW50Lmh0bWwnLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICdibG9jayBoLWZ1bGwgdy1mdWxsIGZsZXgtMSBtaW4taC0wJyxcbiAgICB9LFxuICAgIGltcG9ydHM6IFtDZGtUcmFwRm9jdXMsIE5nVGVtcGxhdGVPdXRsZXRdLFxuICAgIGFuaW1hdGlvbnM6IFtcbiAgICAgICAgdHJpZ2dlcigncGFuZWxWaXNpYmlsaXR5JywgW1xuICAgICAgICAgICAgdHJhbnNpdGlvbigndm9pZCA9PiBwdXNoJywgW1xuICAgICAgICAgICAgICAgIHN0eWxlKHsgd2lkdGg6IDAgfSksXG4gICAgICAgICAgICAgICAgYW5pbWF0ZSgnMzAwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKScsIHN0eWxlKHsgd2lkdGg6ICcqJyB9KSksXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJ3B1c2ggPT4gdm9pZCcsIFtcbiAgICAgICAgICAgICAgICBzdHlsZSh7IHdpZHRoOiAnKicgfSksXG4gICAgICAgICAgICAgICAgYW5pbWF0ZSgnMzAwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKScsIHN0eWxlKHsgd2lkdGg6IDAgfSkpLFxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCd2b2lkID0+IG92ZXJsYXknLCBbXG4gICAgICAgICAgICAgICAgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKDEwMCUpJyB9KSxcbiAgICAgICAgICAgICAgICBhbmltYXRlKCczMDBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpJywgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKDApJyB9KSksXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJ292ZXJsYXkgPT4gdm9pZCcsIFtcbiAgICAgICAgICAgICAgICBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVgoMCknIH0pLFxuICAgICAgICAgICAgICAgIGFuaW1hdGUoJzMwMG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSknLCBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVgoMTAwJSknIH0pKSxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgLy8gUmVzaXplIGNydXphbmRvIG8gYnJlYWtwb2ludCBjb20gbyBwYWluZWwgasOhIGFiZXJ0bzogbsOjbyBleGlzdGUgdW0gdHdlZW4gdmlzdWFsbWVudGVcbiAgICAgICAgICAgIC8vIGNvZXJlbnRlIGVudHJlIHdpZHRoOjQwMHB4L3N0YXRpYyAocHVzaCkgZSB3aWR0aDoxMDAlL2Fic29sdXRlIChvdmVybGF5KSDigJQgYXBsaWNhIG9cbiAgICAgICAgICAgIC8vIGVzdGFkbyBmaW5hbCBpbWVkaWF0YW1lbnRlLCBzZW0gdHJhbnNpw6fDo28gcmVzaWR1YWwuXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCdwdXNoID0+IG92ZXJsYXknLCBbXSksXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCdvdmVybGF5ID0+IHB1c2gnLCBbXSksXG4gICAgICAgIF0pLFxuICAgICAgICB0cmlnZ2VyKCdiYWNrZHJvcFZpc2liaWxpdHknLCBbXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCc6ZW50ZXInLCBbc3R5bGUoeyBvcGFjaXR5OiAwIH0pLCBhbmltYXRlKCczMDBtcyBlYXNlJywgc3R5bGUoeyBvcGFjaXR5OiAxIH0pKV0pLFxuICAgICAgICAgICAgdHJhbnNpdGlvbignOmxlYXZlJywgW3N0eWxlKHsgb3BhY2l0eTogMSB9KSwgYW5pbWF0ZSgnMzAwbXMgZWFzZScsIHN0eWxlKHsgb3BhY2l0eTogMCB9KSldKSxcbiAgICAgICAgXSksXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgU2lkZVNoZWV0Q29tcG9uZW50IHtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2lkZVNoZWV0U2VydmljZSA9IGluamVjdChTaWRlU2hlZXRTZXJ2aWNlKTtcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gSWQgw7puaWNvIHVzYWRvIHBhcmEgYXNzb2NpYXIgbyB0w610dWxvIGFvIHBhaW5lbCB2aWEgYGFyaWEtbGFiZWxsZWRieWAuICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHRpdGxlSWQgPSByYW5kb21IYXNoKCdzaWRlLXNoZWV0LXRpdGxlJyk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHRpdGxlUmVmID0gdmlld0NoaWxkPEVsZW1lbnRSZWY8SFRNTEhlYWRpbmdFbGVtZW50Pj4oJ3RpdGxlUmVmJyk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBpc0Rlc2t0b3BWaWV3cG9ydCA9IHNpZ25hbCh0aGlzLl9tYXRjaGVzRGVza3RvcCgpKTtcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gYHRydWVgIHF1YW5kbyBvIHBhaW5lbCBmdW5jaW9uYSBjb21vIG92ZXJsYXkgZW0gdGVsYSBjaGVpYSAoPCAxMDI0cHgpLiAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBpc092ZXJsYXlNb2RlID0gY29tcHV0ZWQoKCkgPT4gIXRoaXMuaXNEZXNrdG9wVmlld3BvcnQoKSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGFuaW1hdGlvbk1vZGUgPSBjb21wdXRlZDwncHVzaCcgfCAnb3ZlcmxheSc+KCgpID0+XG4gICAgICAgIHRoaXMuaXNPdmVybGF5TW9kZSgpID8gJ292ZXJsYXknIDogJ3B1c2gnLFxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gTGFyZ3VyYSBkbyBwYWluZWwgbm8gbW9kbyBwdXNoLCBwb3IgYnJlYWtwb2ludC4gYGhhbGZgIHPDsyBwYXNzYSBhIHNlclxuICAgICAqIGZsdWlkbyBhIHBhcnRpciBkZSAxMzY2cHgg4oCUIGVudHJlIDEwMjTigJMxMzY1cHggaGVyZGEgb3MgbWVzbW9zIDQwMHB4IGRvIGBkZWZhdWx0YFxuICAgICAqIChjb252ZXJzw6NvIGRlIFwiSGFsZlwiIHBhcmEgXCJEZWZhdWx0XCIgZGVzY3JpdGEgbmEgZXNwZWNpZmljYcOnw6NvIGRlIHByb2R1dG8pLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBwYW5lbFdpZHRoQ2xhc3NlcyA9IGNvbXB1dGVkKCgpID0+XG4gICAgICAgIHRoaXMuc2lkZVNoZWV0U2VydmljZS5zaXplKCkgPT09ICdoYWxmJ1xuICAgICAgICAgICAgPyAnW0BtZWRpYShtaW4td2lkdGg6MTAyNHB4KV06dy1bNDAwcHhdIFtAbWVkaWEobWluLXdpZHRoOjEzNjZweCldOnctW21heCg0MDBweCw1MHZ3KV0nXG4gICAgICAgICAgICA6ICdbQG1lZGlhKG1pbi13aWR0aDoxMDI0cHgpXTp3LVs0MDBweF0gW0BtZWRpYShtaW4td2lkdGg6MTkyMHB4KV06dy1bNDgwcHhdIFtAbWVkaWEobWluLXdpZHRoOjI1NjBweCldOnctWzU2MHB4XSBbQG1lZGlhKG1pbi13aWR0aDozNDQwcHgpXTp3LVs2NDBweF0nLFxuICAgICk7XG5cbiAgICBwcml2YXRlIF9lbGVtZW50VG9SZWZvY3VzOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3Njcm9sbExvY2sgPSBjcmVhdGVTY3JvbGxMb2NrKCk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgY29uc3QgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICAgICAgICB0aGlzLnNpZGVTaGVldFNlcnZpY2UuX3JlZ2lzdGVySW5zdGFuY2UoKTtcbiAgICAgICAgZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4gdGhpcy5zaWRlU2hlZXRTZXJ2aWNlLl91bnJlZ2lzdGVySW5zdGFuY2UoKSk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cubWF0Y2hNZWRpYSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY29uc3QgbWVkaWFRdWVyeUxpc3QgPSB3aW5kb3cubWF0Y2hNZWRpYShPVkVSTEFZX1FVRVJZKTtcbiAgICAgICAgICAgIGNvbnN0IGxpc3RlbmVyID0gKGV2ZW50OiBNZWRpYVF1ZXJ5TGlzdEV2ZW50KTogdm9pZCA9PiB0aGlzLmlzRGVza3RvcFZpZXdwb3J0LnNldChldmVudC5tYXRjaGVzKTtcbiAgICAgICAgICAgIG1lZGlhUXVlcnlMaXN0LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGxpc3RlbmVyKTtcbiAgICAgICAgICAgIGRlc3Ryb3lSZWYub25EZXN0cm95KCgpID0+IG1lZGlhUXVlcnlMaXN0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGxpc3RlbmVyKSk7XG4gICAgICAgIH1cblxuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2hvdWxkTG9ja1Njcm9sbCA9IHRoaXMuc2lkZVNoZWV0U2VydmljZS52aXNpYmxlKCkgJiYgdGhpcy5pc092ZXJsYXlNb2RlKCk7XG4gICAgICAgICAgICBpZiAoc2hvdWxkTG9ja1Njcm9sbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Njcm9sbExvY2subG9jaygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zY3JvbGxMb2NrLnVubG9jaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2lkZVNoZWV0U2VydmljZS52aXNpYmxlKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbGVtZW50VG9SZWZvY3VzID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKCF1bnRyYWNrZWQodGhpcy5pc092ZXJsYXlNb2RlKSkge1xuICAgICAgICAgICAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB0aGlzLnRpdGxlUmVmKCk/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbGVtZW50VG9SZWZvY3VzPy5mb2N1cygpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VsZW1lbnRUb1JlZm9jdXMgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBkZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiB0aGlzLl9zY3JvbGxMb2NrLnVubG9jaygpKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY2xvc2VTaWRlU2hlZXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2lkZVNoZWV0U2VydmljZS5jbG9zZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX21hdGNoZXNEZXNrdG9wKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5tYXRjaE1lZGlhID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICA/IHdpbmRvdy5tYXRjaE1lZGlhKE9WRVJMQVlfUVVFUlkpLm1hdGNoZXNcbiAgICAgICAgICAgIDogdHJ1ZTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwic2lkZS1zaGVldCByZWxhdGl2ZSBmbGV4IGgtZnVsbCB3LWZ1bGxcIj5cbiAgICA8ZGl2IGNsYXNzPVwic2lkZS1zaGVldF9fY29udGVudCBtaW4tdy0wIGZsZXgtMSBvdmVyZmxvdy1hdXRvXCI+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cblxuICAgIEBpZiAoc2lkZVNoZWV0U2VydmljZS52aXNpYmxlKCkpIHtcbiAgICAgICAgQGlmIChpc092ZXJsYXlNb2RlKCkpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaWRlLXNoZWV0X19iYWNrZHJvcCBhYnNvbHV0ZSBpbnNldC0wIHotMjAgYmctW3JnYmEoMCwwLDAsMC41KV1cIiBAYmFja2Ryb3BWaXNpYmlsaXR5PjwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAgPGFzaWRlXG4gICAgICAgICAgICBjZGtUcmFwRm9jdXNcbiAgICAgICAgICAgIFtjZGtUcmFwRm9jdXNBdXRvQ2FwdHVyZV09XCJpc092ZXJsYXlNb2RlKClcIlxuICAgICAgICAgICAgW0BwYW5lbFZpc2liaWxpdHldPVwiYW5pbWF0aW9uTW9kZSgpXCJcbiAgICAgICAgICAgIGNsYXNzPVwic2lkZS1zaGVldF9fcGFuZWwgei0zMCBmbGV4IGZsZXgtY29sIGdhcC00IGJvcmRlci1sIGJvcmRlci1ncmF5c2NhbGUtMjAgYmctZ3JheXNjYWxlLTAgcC00IHNoYWRvdy1bMHB4XzJweF80cHhfcmdiYSgwLDAsMCwwLjIpLDBweF8xcHhfMTBweF9yZ2JhKDAsMCwwLDAuMTIpLDBweF80cHhfNXB4X3JnYmEoMCwwLDAsMC4xNCldIGFic29sdXRlIGluc2V0LTAgdy1mdWxsIFtAbWVkaWEobWluLXdpZHRoOjEwMjRweCldOnN0YXRpYyBbQG1lZGlhKG1pbi13aWR0aDoxMDI0cHgpXTppbnNldC1hdXRvXCJcbiAgICAgICAgICAgIFtjbGFzc109XCJwYW5lbFdpZHRoQ2xhc3NlcygpXCJcbiAgICAgICAgICAgIFtjbGFzcy5zaWRlLXNoZWV0X19wYW5lbC0taGFsZl09XCJzaWRlU2hlZXRTZXJ2aWNlLnNpemUoKSA9PT0gJ2hhbGYnXCJcbiAgICAgICAgICAgIFthdHRyLnJvbGVdPVwiaXNPdmVybGF5TW9kZSgpID8gJ2RpYWxvZycgOiAnY29tcGxlbWVudGFyeSdcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1tb2RhbF09XCJpc092ZXJsYXlNb2RlKCkgPyB0cnVlIDogbnVsbFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwidGl0bGVJZFwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaWRlLXNoZWV0X19oZWFkZXIgZmxleCBmbGV4LWNvbCBnYXAtM1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNFwiPlxuICAgICAgICAgICAgICAgICAgICA8aDJcbiAgICAgICAgICAgICAgICAgICAgICAgICN0aXRsZVJlZlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cInRpdGxlSWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1pbi13LTAgZmxleC0xIGJyZWFrLXdvcmRzIGZvbnQtb3Blbi1zYW5zIHRleHQtYmFzZSBmb250LW5vcm1hbCB1cHBlcmNhc2UgdGV4dC1ncmF5c2NhbGUtOTAgb3V0bGluZS1ub25lXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgc2lkZVNoZWV0U2VydmljZS5oZWFkZXIoKSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2gyPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBzaHJpbmstMCBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZWRpdW0gYm9yZGVyLW5vbmUgYmctdHJhbnNwYXJlbnQgcC0yIG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctcHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiRmVjaGFyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbG9zZVNpZGVTaGVldCgpXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdGltZXMgdGV4dC14c1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGhyIGNsYXNzPVwiaC1weCB3LWZ1bGwgYm9yZGVyLTAgYmctZ3JheXNjYWxlLTIwXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2lkZS1zaGVldF9fYm9keSBtaW4taC0wIGZsZXgtMSBvdmVyZmxvdy1hdXRvXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInNpZGVTaGVldFNlcnZpY2UudGVtcGxhdGUoKTsgY29udGV4dDogc2lkZVNoZWV0U2VydmljZS5jb250ZXh0KClcIlxuICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2FzaWRlPlxuICAgIH1cbjwvZGl2PlxuIl19
|
|
@@ -613,7 +613,7 @@ export class SliderComponent {
|
|
|
613
613
|
useExisting: forwardRef(() => SliderComponent),
|
|
614
614
|
multi: true,
|
|
615
615
|
},
|
|
616
|
-
], viewQueries: [{ propertyName: "track", first: true, predicate: ["track"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\r\n class=\"slider-container\"\r\n [ngClass]=\"{ 'slider-container--disabled': disabled }\"\r\n [tabindex]=\"tabindex\"\r\n (click)=\"onTrackClick($event)\"\r\n (focus)=\"onFocusIn()\"\r\n (blur)=\"onBlur()\"\r\n>\r\n <div\r\n #track\r\n class=\"slider-track\"\r\n [ngClass]=\"{\r\n 'slider-track--hidden-thumb': hiddenThumb,\r\n 'slider-track--moving-multiple-thumbs': movingProgressBar,\r\n }\"\r\n >\r\n <div\r\n class=\"slider-progress\"\r\n (mousedown)=\"onProgressMouseDown($event)\"\r\n [style.left.%]=\"progressLeft\"\r\n [style.width]=\"progressWidth\"\r\n ></div>\r\n @if (multiple) {\r\n <div\r\n class=\"slider-thumb\"\r\n [sTooltip]=\"tooltipStartText\"\r\n [showDelay]=\"0\"\r\n (mousedown)=\"onMouseDown($event, 'start')\"\r\n [style.left.%]=\"startValue\"\r\n ></div>\r\n }\r\n <div\r\n [sTooltip]=\"tooltipEndText\"\r\n class=\"slider-thumb\"\r\n [showDelay]=\"0\"\r\n (mousedown)=\"onMouseDown($event, 'end')\"\r\n [style.left.%]=\"endValue\"\r\n ></div>\r\n </div>\r\n <div class=\"footer\">\r\n <span>{{ minValueLabel || min }}</span>\r\n <span>{{ maxValueLabel || max }}</span>\r\n </div>\r\n</div>\r\n", styles: [".slider-container{height:20px;padding:16px 0 40px;position:relative;-webkit-user-select:none;user-select:none;width:100%}.slider-container .slider-track{background-color:#ddd;border-radius:3px;cursor:pointer;height:6px;position:relative;width:100%}.slider-container .slider-track .slider-progress{background-color:#428bca;border-radius:3px;cursor:pointer;height:100%;left:0;position:absolute;top:0;width:0}.slider-container .slider-track .slider-thumb{background-color:#fff;border:2px solid #428bca;border-radius:50%;cursor:pointer;height:20px;position:absolute;transform:translateY(-50%);top:50%;width:20px}.slider-container .slider-track .slider-thumb:active{box-shadow:0 0 0 4px #428bca33}.slider-container .slider-track--hidden-thumb:not(:hover) .slider-thumb{opacity:0}.slider-container .slider-track--moving-multiple-thumbs .slider-thumb{box-shadow:0 0 0 4px #428bca33}.slider-container .footer{color:#212533;display:flex;font-family:Open Sans,sans-serif;font-size:14px;justify-content:space-between;margin-top:8px}.slider-container--disabled .slider-track{cursor:default}.slider-container--disabled .slider-track .slider-thumb{border-color:#a5a5b2;cursor:default}.slider-container--disabled .slider-track .slider-thumb:active{box-shadow:none}.slider-container--disabled .slider-track .slider-progress{background-color:#a5a5b2;cursor:default}.slider-container:focus-visible{outline:none}.slider-container:focus-visible .slider-thumb{box-shadow:0 0 0 4px #428bca33}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: TooltipDirective, selector: "[sTooltip]", inputs: ["sTooltip", "tooltipPosition", "showDelay", "displayTime", "tooltipEvent", "escape", "visible", "mobileBehavior", "focusedInputRef", "checkTruncatedText"] }] });
|
|
616
|
+
], viewQueries: [{ propertyName: "track", first: true, predicate: ["track"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\r\n class=\"slider-container\"\r\n [ngClass]=\"{ 'slider-container--disabled': disabled }\"\r\n [tabindex]=\"disabled ? '-1' : tabindex\"\r\n (click)=\"onTrackClick($event)\"\r\n (focus)=\"onFocusIn()\"\r\n (blur)=\"onBlur()\"\r\n>\r\n <div\r\n #track\r\n class=\"slider-track\"\r\n [ngClass]=\"{\r\n 'slider-track--hidden-thumb': hiddenThumb,\r\n 'slider-track--moving-multiple-thumbs': movingProgressBar,\r\n }\"\r\n >\r\n <div\r\n class=\"slider-progress\"\r\n (mousedown)=\"onProgressMouseDown($event)\"\r\n [style.left.%]=\"progressLeft\"\r\n [style.width]=\"progressWidth\"\r\n ></div>\r\n @if (multiple) {\r\n <div\r\n class=\"slider-thumb\"\r\n [sTooltip]=\"tooltipStartText\"\r\n [showDelay]=\"0\"\r\n (mousedown)=\"onMouseDown($event, 'start')\"\r\n [style.left.%]=\"startValue\"\r\n ></div>\r\n }\r\n <div\r\n [sTooltip]=\"tooltipEndText\"\r\n class=\"slider-thumb\"\r\n [showDelay]=\"0\"\r\n (mousedown)=\"onMouseDown($event, 'end')\"\r\n [style.left.%]=\"endValue\"\r\n ></div>\r\n </div>\r\n <div class=\"footer\">\r\n <span>{{ minValueLabel || min }}</span>\r\n <span>{{ maxValueLabel || max }}</span>\r\n </div>\r\n</div>\r\n", styles: [".slider-container{height:20px;padding:16px 0 40px;position:relative;-webkit-user-select:none;user-select:none;width:100%}.slider-container .slider-track{background-color:#ddd;border-radius:3px;cursor:pointer;height:6px;position:relative;width:100%}.slider-container .slider-track .slider-progress{background-color:#428bca;border-radius:3px;cursor:pointer;height:100%;left:0;position:absolute;top:0;width:0}.slider-container .slider-track .slider-thumb{background-color:#fff;border:2px solid #428bca;border-radius:50%;cursor:pointer;height:20px;position:absolute;transform:translateY(-50%);top:50%;width:20px}.slider-container .slider-track .slider-thumb:active{box-shadow:0 0 0 4px #428bca33}.slider-container .slider-track--hidden-thumb:not(:hover) .slider-thumb{opacity:0}.slider-container .slider-track--moving-multiple-thumbs .slider-thumb{box-shadow:0 0 0 4px #428bca33}.slider-container .footer{color:#212533;display:flex;font-family:Open Sans,sans-serif;font-size:14px;justify-content:space-between;margin-top:8px}.slider-container--disabled .slider-track{cursor:default}.slider-container--disabled .slider-track .slider-thumb{border-color:#a5a5b2;cursor:default}.slider-container--disabled .slider-track .slider-thumb:active{box-shadow:none}.slider-container--disabled .slider-track .slider-progress{background-color:#a5a5b2;cursor:default}.slider-container:focus-visible{outline:none}.slider-container:focus-visible .slider-thumb{box-shadow:0 0 0 4px #428bca33}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: TooltipDirective, selector: "[sTooltip]", inputs: ["sTooltip", "tooltipPosition", "showDelay", "displayTime", "tooltipEvent", "escape", "visible", "mobileBehavior", "focusedInputRef", "checkTruncatedText"] }] });
|
|
617
617
|
}
|
|
618
618
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SliderComponent, decorators: [{
|
|
619
619
|
type: Component,
|
|
@@ -623,7 +623,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
623
623
|
useExisting: forwardRef(() => SliderComponent),
|
|
624
624
|
multi: true,
|
|
625
625
|
},
|
|
626
|
-
], standalone: true, imports: [NgClass, TooltipDirective], template: "<div\r\n class=\"slider-container\"\r\n [ngClass]=\"{ 'slider-container--disabled': disabled }\"\r\n [tabindex]=\"tabindex\"\r\n (click)=\"onTrackClick($event)\"\r\n (focus)=\"onFocusIn()\"\r\n (blur)=\"onBlur()\"\r\n>\r\n <div\r\n #track\r\n class=\"slider-track\"\r\n [ngClass]=\"{\r\n 'slider-track--hidden-thumb': hiddenThumb,\r\n 'slider-track--moving-multiple-thumbs': movingProgressBar,\r\n }\"\r\n >\r\n <div\r\n class=\"slider-progress\"\r\n (mousedown)=\"onProgressMouseDown($event)\"\r\n [style.left.%]=\"progressLeft\"\r\n [style.width]=\"progressWidth\"\r\n ></div>\r\n @if (multiple) {\r\n <div\r\n class=\"slider-thumb\"\r\n [sTooltip]=\"tooltipStartText\"\r\n [showDelay]=\"0\"\r\n (mousedown)=\"onMouseDown($event, 'start')\"\r\n [style.left.%]=\"startValue\"\r\n ></div>\r\n }\r\n <div\r\n [sTooltip]=\"tooltipEndText\"\r\n class=\"slider-thumb\"\r\n [showDelay]=\"0\"\r\n (mousedown)=\"onMouseDown($event, 'end')\"\r\n [style.left.%]=\"endValue\"\r\n ></div>\r\n </div>\r\n <div class=\"footer\">\r\n <span>{{ minValueLabel || min }}</span>\r\n <span>{{ maxValueLabel || max }}</span>\r\n </div>\r\n</div>\r\n", styles: [".slider-container{height:20px;padding:16px 0 40px;position:relative;-webkit-user-select:none;user-select:none;width:100%}.slider-container .slider-track{background-color:#ddd;border-radius:3px;cursor:pointer;height:6px;position:relative;width:100%}.slider-container .slider-track .slider-progress{background-color:#428bca;border-radius:3px;cursor:pointer;height:100%;left:0;position:absolute;top:0;width:0}.slider-container .slider-track .slider-thumb{background-color:#fff;border:2px solid #428bca;border-radius:50%;cursor:pointer;height:20px;position:absolute;transform:translateY(-50%);top:50%;width:20px}.slider-container .slider-track .slider-thumb:active{box-shadow:0 0 0 4px #428bca33}.slider-container .slider-track--hidden-thumb:not(:hover) .slider-thumb{opacity:0}.slider-container .slider-track--moving-multiple-thumbs .slider-thumb{box-shadow:0 0 0 4px #428bca33}.slider-container .footer{color:#212533;display:flex;font-family:Open Sans,sans-serif;font-size:14px;justify-content:space-between;margin-top:8px}.slider-container--disabled .slider-track{cursor:default}.slider-container--disabled .slider-track .slider-thumb{border-color:#a5a5b2;cursor:default}.slider-container--disabled .slider-track .slider-thumb:active{box-shadow:none}.slider-container--disabled .slider-track .slider-progress{background-color:#a5a5b2;cursor:default}.slider-container:focus-visible{outline:none}.slider-container:focus-visible .slider-thumb{box-shadow:0 0 0 4px #428bca33}\n"] }]
|
|
626
|
+
], standalone: true, imports: [NgClass, TooltipDirective], template: "<div\r\n class=\"slider-container\"\r\n [ngClass]=\"{ 'slider-container--disabled': disabled }\"\r\n [tabindex]=\"disabled ? '-1' : tabindex\"\r\n (click)=\"onTrackClick($event)\"\r\n (focus)=\"onFocusIn()\"\r\n (blur)=\"onBlur()\"\r\n>\r\n <div\r\n #track\r\n class=\"slider-track\"\r\n [ngClass]=\"{\r\n 'slider-track--hidden-thumb': hiddenThumb,\r\n 'slider-track--moving-multiple-thumbs': movingProgressBar,\r\n }\"\r\n >\r\n <div\r\n class=\"slider-progress\"\r\n (mousedown)=\"onProgressMouseDown($event)\"\r\n [style.left.%]=\"progressLeft\"\r\n [style.width]=\"progressWidth\"\r\n ></div>\r\n @if (multiple) {\r\n <div\r\n class=\"slider-thumb\"\r\n [sTooltip]=\"tooltipStartText\"\r\n [showDelay]=\"0\"\r\n (mousedown)=\"onMouseDown($event, 'start')\"\r\n [style.left.%]=\"startValue\"\r\n ></div>\r\n }\r\n <div\r\n [sTooltip]=\"tooltipEndText\"\r\n class=\"slider-thumb\"\r\n [showDelay]=\"0\"\r\n (mousedown)=\"onMouseDown($event, 'end')\"\r\n [style.left.%]=\"endValue\"\r\n ></div>\r\n </div>\r\n <div class=\"footer\">\r\n <span>{{ minValueLabel || min }}</span>\r\n <span>{{ maxValueLabel || max }}</span>\r\n </div>\r\n</div>\r\n", styles: [".slider-container{height:20px;padding:16px 0 40px;position:relative;-webkit-user-select:none;user-select:none;width:100%}.slider-container .slider-track{background-color:#ddd;border-radius:3px;cursor:pointer;height:6px;position:relative;width:100%}.slider-container .slider-track .slider-progress{background-color:#428bca;border-radius:3px;cursor:pointer;height:100%;left:0;position:absolute;top:0;width:0}.slider-container .slider-track .slider-thumb{background-color:#fff;border:2px solid #428bca;border-radius:50%;cursor:pointer;height:20px;position:absolute;transform:translateY(-50%);top:50%;width:20px}.slider-container .slider-track .slider-thumb:active{box-shadow:0 0 0 4px #428bca33}.slider-container .slider-track--hidden-thumb:not(:hover) .slider-thumb{opacity:0}.slider-container .slider-track--moving-multiple-thumbs .slider-thumb{box-shadow:0 0 0 4px #428bca33}.slider-container .footer{color:#212533;display:flex;font-family:Open Sans,sans-serif;font-size:14px;justify-content:space-between;margin-top:8px}.slider-container--disabled .slider-track{cursor:default}.slider-container--disabled .slider-track .slider-thumb{border-color:#a5a5b2;cursor:default}.slider-container--disabled .slider-track .slider-thumb:active{box-shadow:none}.slider-container--disabled .slider-track .slider-progress{background-color:#a5a5b2;cursor:default}.slider-container:focus-visible{outline:none}.slider-container:focus-visible .slider-thumb{box-shadow:0 0 0 4px #428bca33}\n"] }]
|
|
627
627
|
}], propDecorators: { track: [{
|
|
628
628
|
type: ViewChild,
|
|
629
629
|
args: ['track']
|
|
@@ -679,4 +679,4 @@ const getMidpoint = (start, end) => {
|
|
|
679
679
|
const getDifference = (end, start) => {
|
|
680
680
|
return Math.abs(end - start);
|
|
681
681
|
};
|
|
682
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9zbGlkZXIvc3JjL2xpYi9zbGlkZXIvc2xpZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9zbGlkZXIvc3JjL2xpYi9zbGlkZXIvc2xpZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHSCxTQUFTLEVBRVQsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFFTixTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQzs7QUFFOUU7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFlSCxNQUFNLE9BQU8sZUFBZTtJQUNQLGVBQWUsR0FBRyxHQUFHLENBQUM7SUFDdEIsZUFBZSxHQUFHLENBQUMsQ0FBQztJQUU5QixLQUFLLENBQWM7SUFFMUI7Ozs7O09BS0c7SUFFSSxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBRXhCOzs7OztPQUtHO0lBRUksS0FBSyxHQUE4QixDQUFDLENBQUM7SUFFNUM7OztPQUdHO0lBRUksV0FBVyxHQUFHLElBQUksWUFBWSxFQUE2QixDQUFDO0lBRW5FOzs7O09BSUc7SUFFSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBRWhCOzs7OztPQUtHO0lBRUksV0FBVyxHQUFHLEtBQUssQ0FBQztJQUUzQjs7OztPQUlHO0lBRUksUUFBUSxHQUFHLEtBQUssQ0FBQztJQUV4Qjs7OztPQUlHO0lBRUksR0FBRyxHQUFHLElBQUks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OlsiaW1wb3J0IHtcclxuICAgIEFmdGVyVmlld0luaXQsXHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIENvbXBvbmVudCxcclxuICAgIEVsZW1lbnRSZWYsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBmb3J3YXJkUmVmLFxyXG4gICAgSG9zdExpc3RlbmVyLFxyXG4gICAgSW5wdXQsXHJcbiAgICBPbkNoYW5nZXMsXHJcbiAgICBPbkluaXQsXHJcbiAgICBPdXRwdXQsXHJcbiAgICBTaW1wbGVDaGFuZ2VzLFxyXG4gICAgVmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy90b29sdGlwJztcclxuXHJcbi8qKlxyXG4gKiBAZGVzY3JpcHRpb24gQ29tcG9uZW50ZSBkZSBjb250cm9sZSBkZXNsaXphbnRlIChzbGlkZXIpIHBhcmEgc2VsZcOnw6NvIGRlIHZhbG9yZXMgbnVtw6lyaWNvc1xyXG4gKiBkZW50cm8gZGUgdW0gaW50ZXJ2YWxvIGRlZmluaWRvLiBTdXBvcnRhIG1vZG8gc2ltcGxlcyAodW0gdmFsb3IpIGUgbW9kbyBkZSBpbnRlcnZhbG9cclxuICogKGRvaXMgdmFsb3JlczogaW7DrWNpbyBlIGZpbSkuIEltcGxlbWVudGEge0BsaW5rIENvbnRyb2xWYWx1ZUFjY2Vzc29yfSBwYXJhIGludGVncmHDp8Ojb1xyXG4gKiBjb20gUmVhY3RpdmUgRm9ybXMgZSBUZW1wbGF0ZS1kcml2ZW4gRm9ybXMgZG8gQW5ndWxhci5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgaHRtbFxyXG4gKiA8IS0tIFNsaWRlciBzaW1wbGVzIC0tPlxyXG4gKiA8cy1zbGlkZXIgZm9ybUNvbnRyb2xOYW1lPVwidm9sdW1lXCIgW21pbl09XCIwXCIgW21heF09XCIxMDBcIiBbc3RlcF09XCI1XCIgLz5cclxuICpcclxuICogPCEtLSBTbGlkZXIgZGUgaW50ZXJ2YWxvIC0tPlxyXG4gKiA8cy1zbGlkZXIgZm9ybUNvbnRyb2xOYW1lPVwiZmFpeGFcIiBbbXVsdGlwbGVdPVwidHJ1ZVwiIFttaW5dPVwiMFwiIFttYXhdPVwiMTAwMFwiIC8+XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAY2F0ZWdvcnkgSW5wdXRzXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAncy1zbGlkZXInLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NsaWRlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9zbGlkZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNsaWRlckNvbXBvbmVudCksXHJcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgICAgIH0sXHJcbiAgICBdLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICAgIGltcG9ydHM6IFtOZ0NsYXNzLCBUb29sdGlwRGlyZWN0aXZlXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNsaWRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uQ2hhbmdlcyB7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IE1BWF9SQU5HRV9WQUxVRSA9IDEwMDtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgTUlOX1JBTkdFX1ZBTFVFID0gMDtcclxuICAgIEBWaWV3Q2hpbGQoJ3RyYWNrJylcclxuICAgIHB1YmxpYyB0cmFjayE6IEVsZW1lbnRSZWY7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gSGFiaWxpdGEgbyBtb2RvIGRlIGludGVydmFsbywgcGVybWl0aW5kbyBzZWxlY2lvbmFyIHVtIHZhbG9yIG3DrW5pbW8gZSBtw6F4aW1vLlxyXG4gICAgICogUXVhbmRvIGB0cnVlYCwgbyB2YWxvciBkbyBjb21wb25lbnRlIMOpIHVtIGFycmF5IGBbaW5pY2lvLCBmaW1dYC5cclxuICAgICAqXHJcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIG11bHRpcGxlID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gVmFsb3IgYXR1YWwgZG8gc2xpZGVyLiBObyBtb2RvIHNpbXBsZXMgw6kgdW0gbsO6bWVybzsgbm8gbW9kbyBkZVxyXG4gICAgICogaW50ZXJ2YWxvIChgbXVsdGlwbGU6IHRydWVgKSDDqSB1bSBhcnJheSBgW2luaWNpbywgZmltXWAuXHJcbiAgICAgKlxyXG4gICAgICogQGRlZmF1bHQgMFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHZhbHVlOiBudW1iZXIgfCBbbnVtYmVyLCBudW1iZXJdID0gMDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBFbWl0aWRvIHNlbXByZSBxdWUgbyB2YWxvciBkbyBzbGlkZXIgw6kgYWx0ZXJhZG8gcGVsbyB1c3XDoXJpby5cclxuICAgICAqIEVtaXRlIG8gbm92byB2YWxvciAobsO6bWVybyBvdSBhcnJheSBkZSBkb2lzIG7Dum1lcm9zIG5vIG1vZG8gZGUgaW50ZXJ2YWxvKS5cclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlciB8IFtudW1iZXIsIG51bWJlcl0+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gSW5jcmVtZW50byBhcGxpY2FkbyBhIGNhZGEgbW92aW1lbnRvIGRvIHRodW1iIGRvIHNsaWRlci5cclxuICAgICAqXHJcbiAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc3RlcCA9IDE7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2N1bHRhIHZpc3VhbG1lbnRlIG8gdGh1bWIgKGJvdMOjbyBhcnJhc3TDoXZlbCkgZG8gc2xpZGVyLlxyXG4gICAgICogw5p0aWwgcGFyYSB2aXN1YWxpemHDp8O1ZXMgb25kZSBhcGVuYXMgYSBmYWl4YSBkZSBwcm9ncmVzc28gZGV2ZSBzZXIgZXhpYmlkYS5cclxuICAgICAqXHJcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGhpZGRlblRodW1iID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gRGVzYWJpbGl0YSBhIGludGVyYcOnw6NvIGRvIHVzdcOhcmlvIGNvbSBvIHNsaWRlci5cclxuICAgICAqXHJcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGRpc2FibGVkID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gVmFsb3IgbcOtbmltbyBwZXJtaXRpZG8gbm8gc2xpZGVyLlxyXG4gICAgICpcclxuICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBtaW4gPSB0aGlzLk1JTl9SQU5HRV9WQUxVRTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBWYWxvciBtw6F4aW1vIHBlcm1pdGlkbyBubyBzbGlkZXIuXHJcbiAgICAgKlxyXG4gICAgICogQGRlZmF1bHQgMTAwXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgbWF4ID0gdGhpcy5NQVhfUkFOR0VfVkFMVUU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gTGFiZWwgZXhpYmlkbyBhYmFpeG8gb3UgYW8gbGFkbyBkbyB2YWxvciBtw61uaW1vIGRvIHNsaWRlci5cclxuICAgICAqIMOadGlsIHBhcmEgaW5kaWNhciBzZW1hbnRpY2FtZW50ZSBvcyBleHRyZW1vcyBkbyBpbnRlcnZhbG8uXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgbWluVmFsdWVMYWJlbD86IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBMYWJlbCBleGliaWRvIGFiYWl4byBvdSBhbyBsYWRvIGRvIHZhbG9yIG3DoXhpbW8gZG8gc2xpZGVyLlxyXG4gICAgICogw5p0aWwgcGFyYSBpbmRpY2FyIHNlbWFudGljYW1lbnRlIG9zIGV4dHJlbW9zIGRvIGludGVydmFsby5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBtYXhWYWx1ZUxhYmVsPzogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIMONbmRpY2UgZGUgdGFidWxhw6fDo28gZG8gZWxlbWVudG8sIGNvbnRyb2xhbmRvIGEgb3JkZW0gZGUgZm9jbyB2aWEgdGVjbGFkby5cclxuICAgICAqXHJcbiAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgdGFiaW5kZXggPSAwO1xyXG5cclxuICAgIHB1YmxpYyBzdGFydFZhbHVlID0gMDtcclxuICAgIHB1YmxpYyBlbmRWYWx1ZSA9IDA7XHJcbiAgICBwdWJsaWMgbW92aW5nUHJvZ3Jlc3NCYXIgPSBmYWxzZTtcclxuICAgIHB1YmxpYyBwcm9ncmVzc0xlZnQgPSAwO1xyXG4gICAgcHVibGljIHByb2dyZXNzV2lkdGggPSAnJztcclxuXHJcbiAgICBwdWJsaWMgb25DaGFuZ2U6ICh2YWx1ZTogbnVtYmVyIHwgW251bWJlciwgbnVtYmVyXSkgPT4gdm9pZCA9ICgpID0+IHt9O1xyXG4gICAgcHVibGljIG9uVG91Y2hlZDogKHZhbHVlOiBudW1iZXIgfCBbbnVtYmVyLCBudW1iZXJdKSA9PiB2b2lkID0gKCkgPT4ge307XHJcblxyXG4gICAgcHJpdmF0ZSBkcmFnZ2luZ1RodW1iOiAnc3RhcnQnIHwgJ2VuZCcgfCBudWxsID0gbnVsbDtcclxuICAgIHByaXZhdGUgcHJvZ3Jlc3NCYXJFdmVudFBvc2l0aW9uU3RhcnQgPSAtMTtcclxuICAgIHByaXZhdGUgc3RhcnRWYWx1ZUJlZm9yZVByb2dyZXNzQmFyRXZlbnQgPSAtMTtcclxuICAgIHByaXZhdGUgcmFuZ2VCZXR3ZWVuRWxlbWVudHNCZWZvcmVQcm9ncmVzc0JhckV2ZW50ID0gLTE7XHJcbiAgICBwcml2YXRlIHRvdGFsUmFuZ2VCZWZvcmVQcm9ncmVzc0JhckV2ZW50ID0gLTE7XHJcbiAgICAvKipcclxuICAgICAqIE1hcCBvZiB2YWxpZCB2YWx1ZXMgZm9yIHZhbHVlcyBpbiByYW5nZS5cclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiB3aXRoIG1pbiA9IC0xMCBhbmQgbWF4ID0gMTAgd2lsbCBoYXZlIHRoaXMgbWFwLlxyXG4gICAgICoge1xyXG4gICAgICogICAgIC0xMDogeyAwIH0sXHJcbiAgICAgKiAgICAgLTk6IHsgMTAgfSxcclxuICAgICAqICAgICAgLi4uXHJcbiAgICAgKiAgICAgMTA6IHsgMTAgfVxyXG4gICAgICogfVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIG1hcFJhbmdlVmFsdWVzRm9yU2xpZGVyOiBNYXA8bnVtYmVyLCBudW1iZXI+ID0gbmV3IE1hcCgpO1xyXG4gICAgcHJpdmF0ZSBhY3RpdmVNb3VzZURvd24gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgZm9jdXNBY3RpdmUgPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZXRVc2VyUmFuZ2VNYXBWYWx1ZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGhhc0NoYW5nZXNPbk1pbiA9IGNoYW5nZXNbJ21pbiddICYmICFjaGFuZ2VzWydtaW4nXS5maXJzdENoYW5nZTtcclxuICAgICAgICBjb25zdCBoYXNDaGFuZ2VzT25NYXggPSBjaGFuZ2VzWydtYXgnXSAmJiAhY2hhbmdlc1snbWF4J10uZmlyc3RDaGFuZ2U7XHJcbiAgICAgICAgY29uc3QgaGFzQ2hhbmdlcyA9IGhhc0NoYW5nZXNPbk1pbiB8fCBoYXNDaGFuZ2VzT25NYXg7XHJcbiAgICAgICAgaWYgKGhhc0NoYW5nZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRVc2VyUmFuZ2VNYXBWYWx1ZXMoKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFJhbmdlVmFsdWVzKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2VWYWx1ZXMoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duJywgWyckZXZlbnQnXSlcclxuICAgIHB1YmxpYyBvbktleWRvd24oJGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZm9jdXNBY3RpdmUgJiYgIXRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgY29uc3QgaXNBcnJvd0tleUxlZnQgPSAkZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0JztcclxuICAgICAgICAgICAgY29uc3QgaXNBcnJvd0tleVJpZ2h0ID0gJGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnO1xyXG4gICAgICAgICAgICBpZiAoaXNBcnJvd0tleUxlZnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQXJyb3dLZXlMZWZ0KCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNBcnJvd0tleVJpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUFycm93S2V5UmlnaHQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHRvb2x0aXBTdGFydFRleHQoKSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgPyB0aGlzLnZhbHVlWzBdPy50b1N0cmluZygpIDogdGhpcy52YWx1ZT8udG9TdHJpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHRvb2x0aXBFbmRUZXh0KCkge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpID8gdGhpcy52YWx1ZVsxXT8udG9TdHJpbmcoKSA6IHRoaXMudmFsdWU/LnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHdyaXRlVmFsdWUob2JqOiBudW1iZXIgfCBbbnVtYmVyLCBudW1iZXJdKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG9iajtcclxuICAgICAgICB0aGlzLnNldFJhbmdlVmFsdWVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogbnVtYmVyIHwgW251bWJlciwgbnVtYmVyXSkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25Gb2N1c0luKCkge1xyXG4gICAgICAgIHRoaXMuZm9jdXNBY3RpdmUgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkJsdXIoKSB7XHJcbiAgICAgICAgdGhpcy5mb2N1c0FjdGl2ZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvblRyYWNrQ2xpY2soZXZ0OiBNb3VzZUV2ZW50KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5tb3ZpbmdQcm9ncmVzc0JhciB8fCB0aGlzLmFjdGl2ZU1vdXNlRG93bikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRyYWNrQ2xpY2tQZXJjZW50YWdlID0gdGhpcy5nZXRQZXJjZW50YWdlQnlFdmVudChldnQpO1xyXG4gICAgICAgIGNvbnN0IHRyYWNrQ2xpY2tUb1VzZXJSYW5nZSA9IHRoaXMuZ2V0VmFsdWVGcm9tTWFwQnlWYWx1ZSh0cmFja0NsaWNrUGVyY2VudGFnZSk7XHJcbiAgICAgICAgY29uc3QgX3RyYWNrQ2xpY2tWYWxpZCA9IHRoaXMubmVlZFBhcnNlVmFsdWVzID8gdHJhY2tDbGlja1RvVXNlclJhbmdlIDogdHJhY2tDbGlja1BlcmNlbnRhZ2U7XHJcbiAgICAgICAgY29uc3QgX3NldEVuZFZhbHVlID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBfZW5kVmFsdWVVc2VyVmFsdWUgPSB0aGlzLmdldFZhbHVlRnJvbU1hcEJ5VmFsdWUodGhpcy5lbmRWYWx1ZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IF9lbmRWYWx1ZSA9XHJcbiAgICAgICAgICAgICAgICAodGhpcy5uZWVkUGFyc2VWYWx1ZXNcclxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMubWFwUmFuZ2VWYWx1ZXNGb3JTbGlkZXIuZ2V0KHRyYWNrQ2xpY2tUb1VzZXJSYW5nZSlcclxuICAgICAgICAgICAgICAgICAgICA6IHRyYWNrQ2xpY2tQZXJjZW50YWdlKSA/PyAwO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5uZWVkUGFyc2VWYWx1ZXMgJiYgX2VuZFZhbHVlVXNlclZhbHVlICE9PSB0cmFja0NsaWNrVG9Vc2VyUmFuZ2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZW5kVmFsdWUgPSBfZW5kVmFsdWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMubmVlZFBhcnNlVmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVuZFZhbHVlID0gdHJhY2tDbGlja1BlcmNlbnRhZ2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBfc2V0U3RhcnRWYWx1ZSA9ICgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgX3N0YXJ0VmFsdWVVc2VyVmFsdWUgPSB0aGlzLmdldFZhbHVlRnJvbU1hcEJ5VmFsdWUodGhpcy5zdGFydFZhbHVlKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMubmVlZFBhcnNlVmFsdWVzICYmIF9zdGFydFZhbHVlVXNlclZhbHVlICE9PSB0cmFja0NsaWNrVG9Vc2VyUmFuZ2UpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IF9zdGFydFZhbHVlID1cclxuICAgICAgICAgICAgICAgICAgICAodGhpcy5uZWVkUGFyc2VWYWx1ZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLm1hcFJhbmdlVmFsdWVzRm9yU2xpZGVyLmdldCh0cmFja0NsaWNrVG9Vc2VyUmFuZ2UpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdHJhY2tDbGlja1BlcmNlbnRhZ2UpID8/IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0VmFsdWUgPSBfc3RhcnRWYWx1ZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5uZWVkUGFyc2VWYWx1ZXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRWYWx1ZSA9IHRyYWNrQ2xpY2tQZXJjZW50YWdlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICBjb25zdCBbc3RhcnQsIGVuZF0gPSB0aGlzLnZhbHVlIGFzIFtudW1iZXIsIG51bWJlcl07XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkU3RhcnQgPSAodGhpcy5uZWVkUGFyc2VWYWx1ZXMgPyB0aGlzLm1hcFJhbmdlVmFsdWVzRm9yU2xpZGVyLmdldChzdGFydCkgOiBzdGFydCkgPz8gMDtcclxuICAgICAgICAgICAgY29uc3QgdmFsaWRFbmQgPSAodGhpcy5uZWVkUGFyc2VWYWx1ZXMgPyB0aGlzLm1hcFJhbmdlVmFsdWVzRm9yU2xpZGVyLmdldChlbmQpIDogZW5kKSA/PyAwO1xyXG4gICAgICAgICAgICBjb25zdCBfdXBkYXRlU3RhcnQgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBfc2V0U3RhcnRWYWx1ZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZShbdHJhY2tDbGlja1BlcmNlbnRhZ2UsIHZhbGlkRW5kXSk7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBjb25zdCBfdXBkYXRlRW5kID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgX3NldEVuZFZhbHVlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFZhbHVlKFt2YWxpZFN0YXJ0LCB0cmFja0NsaWNrUGVyY2VudGFnZV0pO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjb25zdCBjbGlja1BlcmNlbnRhZ2VCZXR3ZWVuUmFuZ2UgPSBpc0luUmFuZ2UoX3RyYWNrQ2xpY2tWYWxpZCwgc3RhcnQsIGVuZCk7XHJcbiAgICAgICAgICAgIGlmIChfdHJhY2tDbGlja1ZhbGlkIDwgc3RhcnQpIHtcclxuICAgICAgICAgICAgICAgIF91cGRhdGVTdGFydCgpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKF90cmFja0NsaWNrVmFsaWQgPiBlbmQpIHtcclxuICAgICAgICAgICAgICAgIF91cGRhdGVFbmQoKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChjbGlja1BlcmNlbnRhZ2VCZXR3ZWVuUmFuZ2UpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1pZGRsZSA9IChzdGFydCArIGVuZCkgLyAyO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdHJhY2tDbGlja1BlcmNlbnRhZ2VJc0V4YWN0aWRkbGUgPSBfdHJhY2tDbGlja1ZhbGlkID09PSBtaWRkbGU7XHJcbiAgICAgICAgICAgICAgICBpZiAodHJhY2tDbGlja1BlcmNlbnRhZ2VJc0V4YWN0aWRkbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBfdXBkYXRlU3RhcnQoKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2V0U3RhcnQgPSBfdHJhY2tDbGlja1ZhbGlkIDwgbWlkZGxlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNldEVuZCA9IF90cmFja0NsaWNrVmFsaWQgPiBtaWRkbGU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNldFN0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF91cGRhdGVTdGFydCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2V0RW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF91cGRhdGVFbmQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKHRyYWNrQ2xpY2tQZXJjZW50YWdlKTtcclxuICAgICAgICAgICAgX3NldEVuZFZhbHVlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFByb2dyZXNzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uUHJvZ3Jlc3NNb3VzZURvd24oZXZ0OiBNb3VzZUV2ZW50KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm11bHRpcGxlIHx8IHRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByb2dyZXNzQmFyRXZlbnRQb3NpdGlvblN0YXJ0ID0gdGhpcy5nZXRQZXJjZW50YWdlQnlFdmVudChldnQpO1xyXG4gICAgICAgIHRoaXMuc3RhcnRWYWx1ZUJlZm9yZVByb2dyZXNzQmFyRXZlbnQgPSB0aGlzLnN0YXJ0VmFsdWU7XHJcbiAgICAgICAgdGhpcy5yYW5nZUJldHdlZW5FbGVtZW50c0JlZm9yZVByb2dyZXNzQmFyRXZlbnQgPSB0aGlzLmVuZFZhbHVlIC0gdGhpcy5zdGFydFZhbHVlO1xyXG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IFtzdGFydCwgZW5kXSA9IHRoaXMudmFsdWUgYXMgW251bWJlciwgbnVtYmVyXTtcclxuICAgICAgICAgICAgdGhpcy50b3RhbFJhbmdlQmVmb3JlUHJvZ3Jlc3NCYXJFdmVudCA9IGVuZCAtIHN0YXJ0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLmhhbmRsZVByb2dyZXNzQmFyTW92ZSk7XHJcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMuaGFuZGxlUHJvZ3Jlc3NCYXJNb3ZlRW5kKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25Nb3VzZURvd24oXzogTW91c2VFdmVudCwgdGh1bWI6ICdzdGFydCcgfCAnZW5kJyk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuZHJhZ2dpbmdUaHVtYiA9IHRodW1iO1xyXG4gICAgICAgIHRoaXMuYWN0aXZlTW91c2VEb3duID0gdHJ1ZTtcclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uVGh1bWJNb3ZlKTtcclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5vbk1vdXNlVXApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0UmFuZ2VWYWx1ZXMoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgX3NldFN0YXJ0QW5kRW5kVmFsdWUgPSAoc3RhcnRWYWx1ZTogbnVtYmVyLCBlbmRWYWx1ZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRWYWx1ZSA9IHRoaXMuZ2V0Q2xvc2VzdFZhbHVlRnJvbU1hcFNsaWRlcihzdGFydFZhbHVlKTtcclxuICAgICAgICAgICAgdGhpcy5lbmRWYWx1ZSA9IHRoaXMuZ2V0Q2xvc2VzdFZhbHVlRnJvbU1hcFNsaWRlcihlbmRWYWx1ZSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAodGhpcy52YWx1ZSA9PT0gbnVsbCB8fCB0aGlzLnZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSAmJiAhdGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBtdXN0IHVzZSBcIm11bHRpcGxlXCIgd2l0aCB2YWx1ZSBhcyBhcnJheScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSAmJiBBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRWYWx1ZSA9IHRoaXMudmFsdWVbMF07XHJcbiAgICAgICAgICAgIHRoaXMuZW5kVmFsdWUgPSB0aGlzLnZhbHVlWzFdO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGFydFZhbHVlID0gdGhpcy52YWx1ZSBhcyBudW1iZXI7XHJcbiAgICAgICAgICAgIHRoaXMuZW5kVmFsdWUgPSB0aGlzLnZhbHVlIGFzIG51bWJlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgX3NldFN0YXJ0QW5kRW5kVmFsdWUodGhpcy5zdGFydFZhbHVlLCB0aGlzLmVuZFZhbHVlKTtcclxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICBsZXQgW19zdGFydFZhbHVlLCBfZW5kVmFsdWVdID0gdGhpcy52YWx1ZSBhcyBbbnVtYmVyLCBudW1iZXJdO1xyXG4gICAgICAgICAgICBjb25zdCBkaWZmZXJlbmNlID0gZ2V0RGlmZmVyZW5jZShfZW5kVmFsdWUsIF9zdGFydFZhbHVlKTtcclxuICAgICAgICAgICAgY29uc3QgZW5kVmFsdWVJc0dyZWF0aGVyVGhhbk1heCA9IF9lbmRWYWx1ZSA+IHRoaXMubWF4O1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydFZhbHVlSXNMZXNzVGhhbk1pbiA9IF9zdGFydFZhbHVlIDwgdGhpcy5taW47XHJcbiAgICAgICAgICAgIGNvbnN0IG5lZWRVcGRhdGVWYWx1ZXMgPSBlbmRWYWx1ZUlzR3JlYXRoZXJUaGFuTWF4IHx8IHN0YXJ0VmFsdWVJc0xlc3NUaGFuTWluO1xyXG4gICAgICAgICAgICBpZiAoZW5kVmFsdWVJc0dyZWF0aGVyVGhhbk1heCkge1xyXG4gICAgICAgICAgICAgICAgX2VuZFZhbHVlID0gdGhpcy5tYXg7XHJcbiAgICAgICAgICAgICAgICBfc3RhcnRWYWx1ZSA9IF9lbmRWYWx1ZSAtIGRpZmZlcmVuY2U7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRWYWx1ZUlzTGVzc1RoYW5NaW4pIHtcclxuICAgICAgICAgICAgICAgIF9zdGFydFZhbHVlID0gdGhpcy5taW47XHJcbiAgICAgICAgICAgICAgICBfZW5kVmFsdWUgPSBfc3RhcnRWYWx1ZSArIGRpZmZlcmVuY2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG5lZWRVcGRhdGVWYWx1ZXMpIHtcclxuICAgICAgICAgICAgICAgIF9zZXRTdGFydEFuZEVuZFZhbHVlKF9zdGFydFZhbHVlLCBfZW5kVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZShbdGhpcy5zdGFydFZhbHVlLCB0aGlzLmVuZFZhbHVlXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgX3ZhbHVlID0gdGhpcy52YWx1ZSBhcyBudW1iZXI7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlR3JlYXRoZXJUaGFuTWF4ID0gX3ZhbHVlID4gdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlTGVzc1RoYW5NaW4gPSBfdmFsdWUgPCB0aGlzLm1pbjtcclxuICAgICAgICAgICAgY29uc3QgbmVlZFVwZGF0ZVZhbHVlID0gdmFsdWVHcmVhdGhlclRoYW5NYXggfHwgdmFsdWVMZXNzVGhhbk1pbjtcclxuICAgICAgICAgICAgaWYgKHZhbHVlR3JlYXRoZXJUaGFuTWF4KSB7XHJcbiAgICAgICAgICAgICAgICBfdmFsdWUgPSB0aGlzLm1heDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZUxlc3NUaGFuTWluKSB7XHJcbiAgICAgICAgICAgICAgICBfdmFsdWUgPSB0aGlzLm1pbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobmVlZFVwZGF0ZVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFZhbHVlKF92YWx1ZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0UHJvZ3Jlc3MoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uVGh1bWJNb3ZlID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMubW92aW5nUHJvZ3Jlc3NCYXIgfHwgIXRoaXMuZHJhZ2dpbmdUaHVtYikgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgbmV3UG9zaXRpb24gPSB0aGlzLmdldFBlcmNlbnRhZ2VCeUV2ZW50KGV2ZW50KTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICh0aGlzLm11bHRpcGxlICYmIHRoaXMuZHJhZ2dpbmdUaHVtYiA9PT0gJ3N0YXJ0JyAmJiBuZXdQb3NpdGlvbiA+IHRoaXMuZW5kVmFsdWUpIHx8XHJcbiAgICAgICAgICAgICh0aGlzLm11bHRpcGxlICYmIHRoaXMuZHJhZ2dpbmdUaHVtYiA9PT0gJ2VuZCcgJiYgbmV3UG9zaXRpb24gPCB0aGlzLnN0YXJ0VmFsdWUpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uSW5Vc2VyUmFuZ2UgPSB0aGlzLmdldFZhbHVlRnJvbU1hcEJ5VmFsdWUobmV3UG9zaXRpb24pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5kcmFnZ2luZ1RodW1iID09PSAnc3RhcnQnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0VmFsdWUgPVxyXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLm5lZWRQYXJzZVZhbHVlcyA/IHRoaXMubWFwUmFuZ2VWYWx1ZXNGb3JTbGlkZXIuZ2V0KHBvc2l0aW9uSW5Vc2VyUmFuZ2UpIDogbmV3UG9zaXRpb24pID8/IDA7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kcmFnZ2luZ1RodW1iID09PSAnZW5kJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbmRWYWx1ZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMubmVlZFBhcnNlVmFsdWVzID8gdGhpcy5tYXBSYW5nZVZhbHVlc0ZvclNsaWRlci5nZXQocG9zaXRpb25JblVzZXJSYW5nZSkgOiBuZXdQb3NpdGlvbikgPz8gMDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZShbdGhpcy5zdGFydFZhbHVlLCB0aGlzLmVuZFZhbHVlXSk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBbc3RhcnQsIGVuZF0gPSB0aGlzLnZhbHVlIGFzIFtudW1iZXIsIG51bWJlcl07XHJcblxyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCAmJiB0aGlzLmRyYWdnaW5nVGh1bWIgPT09ICdzdGFydCcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRWYWx1ZSA9IHRoaXMuZW5kVmFsdWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnQgPT09IGVuZCAmJiB0aGlzLmRyYWdnaW5nVGh1bWIgPT09ICdlbmQnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVuZFZhbHVlID0gdGhpcy5zdGFydFZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy52YWx1ZSBhcyBudW1iZXI7XHJcbiAgICAgICAgICAgIGNvbnN0IF92YWx1ZSA9IHRoaXMubmVlZFBhcnNlVmFsdWVzID8gcG9zaXRpb25JblVzZXJSYW5nZSA6IG5ld1Bvc2l0aW9uO1xyXG4gICAgICAgICAgICBjb25zdCBpc0F0U2FtZVZhbHVlID0gdGhpcy5uZWVkUGFyc2VWYWx1ZXMgPyBwb3NpdGlvbkluVXNlclJhbmdlID09PSB0aGlzLnZhbHVlIDogZmFsc2U7XHJcbiAgICAgICAgICAgIGNvbnN0IGhhc1N0ZXAgPSB0aGlzLnN0ZXAgIT09IDA7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlSXNWYWxpZEJ5U3RlcCA9IGhhc1N0ZXBcclxuICAgICAgICAgICAgICAgID8gY3VycmVudFZhbHVlICsgdGhpcy5zdGVwID09PSBfdmFsdWUgfHwgY3VycmVudFZhbHVlIC0gdGhpcy5zdGVwID09PSBfdmFsdWVcclxuICAgICAgICAgICAgICAgIDogZmFsc2U7XHJcbiAgICAgICAgICAgIGlmIChpc0F0U2FtZVZhbHVlICYmICFuZXdWYWx1ZUlzVmFsaWRCeVN0ZXApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmVuZFZhbHVlID1cclxuICAgICAgICAgICAgICAgICh0aGlzLm5lZWRQYXJzZVZhbHVlcyA/IHRoaXMubWFwUmFuZ2VWYWx1ZXNGb3JTbGlkZXIuZ2V0KHBvc2l0aW9uSW5Vc2VyUmFuZ2UpIDogbmV3UG9zaXRpb24pID8/IDA7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRWYWx1ZSA9IHRoaXMuZW5kVmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUodGhpcy5lbmRWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0UHJvZ3Jlc3MoKTtcclxuICAgIH07XHJcblxyXG4gICAgcHJpdmF0ZSBvbk1vdXNlVXAgPSAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kcmFnZ2luZ1RodW1iID0gbnVsbDtcclxuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uVGh1bWJNb3ZlKTtcclxuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5vbk1vdXNlVXApO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZU1vdXNlRG93biA9IGZhbHNlO1xyXG4gICAgICAgIH0sIDE1MCk7XHJcbiAgICB9O1xyXG5cclxuICAgIHByaXZhdGUgaGFuZGxlUHJvZ3Jlc3NCYXJNb3ZlID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XHJcbiAgICAgICAgdGhpcy5tb3ZpbmdQcm9ncmVzc0JhciA9IHRydWU7XHJcbiAgICAgICAgY29uc3QgbmV3Q2VudGVyID0gdGhpcy5nZXRQZXJjZW50YWdlQnlFdmVudChldmVudCk7XHJcbiAgICAgICAgY29uc3Qgc3RhcnRQb3NpdGlvbkJlZm9yZUV2ZW50ID0gdGhpcy5wcm9ncmVzc0JhckV2ZW50UG9zaXRpb25TdGFydDtcclxuICAgICAgICBjb25zdCBzdGFydFZhbHVlQmVmb3JlRXZlbnQgPSB0aGlzLnN0YXJ0VmFsdWVCZWZvcmVQcm9ncmVzc0JhckV2ZW50O1xyXG4gICAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5yYW5nZUJldHdlZW5FbGVtZW50c0JlZm9yZVByb2dyZXNzQmFyRXZlbnQ7XHJcbiAgICAgICAgbGV0IHsgbmV3U3RhcnQsIG5ld0VuZCB9ID0gY2FsY3VsYXRlTmV3UmFuZ2UoXHJcbiAgICAgICAgICAgIHN0YXJ0VmFsdWVCZWZvcmVFdmVudCxcclxuICAgICAgICAgICAgc3RhcnRWYWx1ZUJlZm9yZUV2ZW50ICsgcmFuZ2UsXHJcbiAgICAgICAgICAgIHN0YXJ0UG9zaXRpb25CZWZvcmVFdmVudCxcclxuICAgICAgICAgICAgbmV3Q2VudGVyLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKG5ld1N0YXJ0IDwgdGhpcy5NSU5fUkFOR0VfVkFMVUUgfHwgbmV3RW5kID4gdGhpcy5NQVhfUkFOR0VfVkFMVUUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5uZWVkUGFyc2VWYWx1ZXMpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnRWYWx1ZUJlZm9yZUV2ZW50VXNlclJhbmdlID0gdGhpcy5nZXRWYWx1ZUZyb21NYXBCeVZhbHVlKHN0YXJ0VmFsdWVCZWZvcmVFdmVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0UG9zaXRpb25CZWZvcmVFdmVudFVzZXJSYW5nZSA9IHRoaXMuZ2V0VmFsdWVGcm9tTWFwQnlWYWx1ZShzdGFydFBvc2l0aW9uQmVmb3JlRXZlbnQpO1xyXG4gICAgICAgICAgICBjb25zdCBjZW50ZXJVc2VyUmFuZ2UgPSB0aGlzLmdldFZhbHVlRnJvbU1hcEJ5VmFsdWUobmV3Q2VudGVyKTtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWVSYW5nZSA9IHRoaXMudG90YWxSYW5nZUJlZm9yZVByb2dyZXNzQmFyRXZlbnQ7XHJcbiAgICAgICAgICAgIGxldCB7IG5ld1N0YXJ0LCBuZXdFbmQgfSA9IGNhbGN1bGF0ZU5ld1JhbmdlKFxyXG4gICAgICAgICAgICAgICAgc3RhcnRWYWx1ZUJlZm9yZUV2ZW50VXNlclJhbmdlLFxyXG4gICAgICAgICAgICAgICAgc3RhcnRWYWx1ZUJlZm9yZUV2ZW50VXNlclJhbmdlICsgdmFsdWVSYW5nZSxcclxuICAgICAgICAgICAgICAgIHN0YXJ0UG9zaXRpb25CZWZvcmVFdmVudFVzZXJSYW5nZSxcclxuICAgICAgICAgICAgICAgIGNlbnRlclVzZXJSYW5nZSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKG5ld1N0YXJ0IDwgdGhpcy5taW4gfHwgbmV3RW5kID4gdGhpcy5tYXgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0VmFsdWUgPSB0aGlzLm1hcFJhbmdlVmFsdWVzRm9yU2xpZGVyLmdldChuZXdTdGFydCkgPz8gMDtcclxuICAgICAgICAgICAgdGhpcy5lbmRWYWx1ZSA9IHRoaXMubWFwUmFuZ2VWYWx1ZXNGb3JTbGlkZXIuZ2V0KG5ld0VuZCkgPz8gMDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0VmFsdWUgPSBuZXdTdGFydDtcclxuICAgICAgICAgICAgdGhpcy5lbmRWYWx1ZSA9IG5ld0VuZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRWYWx1ZShbdGhpcy5zdGFydFZhbHVlLCB0aGlzLmVuZFZhbHVlXSk7XHJcbiAgICAgICAgdGhpcy5zZXRQcm9ncmVzcygpO1xyXG4gICAgfTtcclxuXHJcbiAgICBwcml2YXRlIGhhbmRsZVByb2dyZXNzQmFyTW92ZUVuZCA9ICgpID0+IHtcclxuICAgICAgICB0aGlzLnByb2dyZXNzQmFyRXZlbnRQb3NpdGlvblN0YXJ0ID0gLTE7XHJcbiAgICAgICAgdGhpcy5zdGFydFZhbHVlQmVmb3JlUHJvZ3Jlc3NCYXJFdmVudCA9IC0xO1xyXG4gICAgICAgIHRoaXMucmFuZ2VCZXR3ZWVuRWxlbWVudHNCZWZvcmVQcm9ncmVzc0JhckV2ZW50ID0gLTE7XHJcbiAgICAgICAgdGhpcy50b3RhbFJhbmdlQmVmb3JlUHJvZ3Jlc3NCYXJFdmVudCA9IC0xO1xyXG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuaGFuZGxlUHJvZ3Jlc3NCYXJNb3ZlKTtcclxuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5oYW5kbGVQcm9ncmVzc0Jhck1vdmVFbmQpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm1vdmluZ1Byb2dyZXNzQmFyID0gZmFsc2U7XHJcbiAgICAgICAgfSwgMTUwKTtcclxuICAgIH07XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRQcm9ncmVzcygpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzTGVmdCA9IHRoaXMuc3RhcnRWYWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5wcm9ncmVzc1dpZHRoID0gYGNhbGMoJHt0aGlzLmVuZFZhbHVlIC0gdGhpcy5zdGFydFZhbHVlfSUgKyAxMHB4KWA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9ncmVzc0xlZnQgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzV2lkdGggPSBgY2FsYygke3RoaXMuZW5kVmFsdWV9JSArIDEwcHgpYDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgdGhlIHBlcmNlbnRhZ2Ugb2YgYSBtb3VzZSBldmVudCBmcm9tIHRoZSB0cmFjaydzIGxlZnQgZWRnZVxyXG4gICAgICogQHBhcmFtIG1vdXNlRXZlbnQgbW91c2UgZXZlbnRcclxuICAgICAqIEByZXR1cm5zIHBlcmNlbnRhZ2UgZnJvbSB0aGUgbGVmdCBlZGdlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0UGVyY2VudGFnZUJ5RXZlbnQobW91c2VFdmVudDogTW91c2VFdmVudCB8IFBvaW50ZXJFdmVudCk6IG51bWJlciB7XHJcbiAgICAgICAgY29uc3QgdHJhY2tSZWN0ID0gdGhpcy50cmFjay5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgIGxldCBuZXdMZWZ0ID0gTWF0aC5yb3VuZCgoKG1vdXNlRXZlbnQuY2xpZW50WCAtIHRyYWNrUmVjdC5sZWZ0KSAvIHRyYWNrUmVjdC53aWR0aCkgKiB0aGlzLk1BWF9SQU5HRV9WQUxVRSk7XHJcbiAgICAgICAgbmV3TGVmdCA9IE1hdGgubWF4KDAsIE1hdGgubWluKG5ld0xlZnQsIHRoaXMuTUFYX1JBTkdFX1ZBTFVFKSk7XHJcbiAgICAgICAgcmV0dXJuIG5ld0xlZnQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRWYWx1ZSh2YWx1ZTogbnVtYmVyIHwgW251bWJlciwgbnVtYmVyXSwgcGFyc2UgPSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMubmVlZFBhcnNlVmFsdWVzICYmIHBhcnNlKSB7XHJcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5tYXAoKHgpID0+IHRoaXMuZ2V0VmFsdWVGcm9tTWFwQnlWYWx1ZSh4KSkgYXMgW251bWJlciwgbnVtYmVyXTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5nZXRWYWx1ZUZyb21NYXBCeVZhbHVlKHZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHZhbHVlKTtcclxuICAgICAgICB0aGlzLndyaXRlVmFsdWUodGhpcy52YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcclxuICAgICAgICB0aGlzLm9uVG91Y2hlZCh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldFVzZXJSYW5nZU1hcFZhbHVlcygpIHtcclxuICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMubWluO1xyXG4gICAgICAgIGNvbnN0IGVuZCA9IHRoaXMubWF4O1xyXG4gICAgICAgIGlmIChzdGFydCA+IGVuZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01heCB2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBtaW4gdmFsdWUnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5tYXBSYW5nZVZhbHVlc0ZvclNsaWRlci5jbGVhcigpO1xyXG4gICAgICAgIGNvbnN0IHJhbmdlID0gZW5kIC0gc3RhcnQ7XHJcbiAgICAgICAgY29uc3QgZGVjaW1hbFBsYWNlcyA9IDI7XHJcbiAgICAgICAgY29uc3Qgc3RlcENvdW50ID0gTWF0aC5mbG9vcihyYW5nZSAvIHRoaXMuc3RlcCk7XHJcbiAgICAgICAgY29uc3QgdmFsdWVzOiBudW1iZXJbXSA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IHZhbHVlID0gc3RhcnQ7IHZhbHVlIDw9IGVuZDsgdmFsdWUgKz0gdGhpcy5zdGVwKSB7XHJcbiAgICAgICAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZhbHVlc1t2YWx1ZXMubGVuZ3RoIC0gMV0gIT09IGVuZCkge1xyXG4gICAgICAgICAgICB2YWx1ZXMucHVzaChlbmQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtYXBwZWRWYWx1ZXMgPSB2YWx1ZXMubWFwKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgbWFwcGVkID0gKCh2YWx1ZSAtIHN0YXJ0KSAvIHJhbmdlKSAqIHRoaXMuTUFYX1JBTkdFX1ZBTFVFO1xyXG4gICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChtYXBwZWQudG9GaXhlZChkZWNpbWFsUGxhY2VzKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgbWFwcGVkVmFsdWVzWzBdID0gMDtcclxuICAgICAgICBtYXBwZWRWYWx1ZXNbbWFwcGVkVmFsdWVzLmxlbmd0aCAtIDFdID0gdGhpcy5NQVhfUkFOR0VfVkFMVUU7XHJcbiAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLk1BWF9SQU5HRV9WQUxVRSAtIG1hcHBlZFZhbHVlc1ttYXBwZWRWYWx1ZXMubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgY29uc3QgZXJyb3JQZXJTdGVwID0gZXJyb3IgLyBzdGVwQ291bnQ7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBtYXBwZWRWYWx1ZXMubGVuZ3RoIC0gMTsgaSsrKSB7XHJcbiAgICAgICAgICAgIG1hcHBlZFZhbHVlc1tpXSArPSBlcnJvclBlclN0ZXA7XHJcbiAgICAgICAgICAgIG1hcHBlZFZhbHVlc1tpXSA9IHBhcnNlRmxvYXQobWFwcGVkVmFsdWVzW2ldLnRvRml4ZWQoZGVjaW1hbFBsYWNlcykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YWx1ZXMuZm9yRWFjaCgodmFsdWUsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubWFwUmFuZ2VWYWx1ZXNGb3JTbGlkZXIuc2V0KHZhbHVlLCBtYXBwZWRWYWx1ZXNbaW5kZXhdKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHVzZXIgdmFsdWUgZnJvbSB0aGUgZ2l2ZW4gc2xpZGVyIHZhbHVlIGJ5IHVzaW5nIHRoZSBtYXAgb2YgcmFuZ2UgdmFsdWVzLlxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIElmIHRoZSBtYXAgaXMgMDogeyAwIH0sIDE6IHsgMTAgfSwgMjogeyAzMCB9LCAzOiB7IDQwIH0sIDQ6IHsgNTAgfVxyXG4gICAgICogYW5kIHRoZSBzbGlkZXJWYWx1ZSBpcyAzNywgdGhlIGZ1bmN0aW9uIHJldHVybnMgM1xyXG4gICAgICogb3IgdGhlIHNsaWRlciB2YWx1ZSBpcyA0MCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgNFxyXG4gICAgICogQHBhcmFtIHNsaWRlclZhbHVlIHRoZSB2YWx1ZSBvZiB0aGUgc2xpZGVyICh2YWx1ZXMgb25seSBiZXR3ZWVuIHJhbmdlIE1JTiBhbmQgTUFYKVxyXG4gICAgICogQHJldHVybnMgdGhlIHVzZXIgdmFsdWUgZnJvbSB0aGUgZ2l2ZW4gc2xpZGVyIHZhbHVlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0VmFsdWVGcm9tTWFwQnlWYWx1ZShzbGlkZXJWYWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgY29uc3QgbWFwVG9BcnJheSA9IEFycmF5LmZyb20odGhpcy5tYXBSYW5nZVZhbHVlc0ZvclNsaWRlcikubWFwKChbdmFsdWUsIG1hcHBlZF0pID0+ICh7IHZhbHVlLCBtYXBwZWQgfSkpO1xyXG4gICAgICAgIGNvbnN0IGV4YWN0VmFsdWUgPSBtYXBUb0FycmF5LmZpbmQoKHgpID0+IHgubWFwcGVkID09IHNsaWRlclZhbHVlKTtcclxuICAgICAgICBjb25zdCBjbG9zZXN0ID0gbWFwVG9BcnJheS5yZWR1Y2UoKHByZXYsIGN1cnIpID0+XHJcbiAgICAgICAgICAgIE1hdGguYWJzKGN1cnIubWFwcGVkIC0gc2xpZGVyVmFsdWUpIDwgTWF0aC5hYnMocHJldi5tYXBwZWQgLSBzbGlkZXJWYWx1ZSkgPyBjdXJyIDogcHJldixcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBleGFjdFZhbHVlID8gZXhhY3RWYWx1ZS52YWx1ZSA6IGNsb3Nlc3QudmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIGtleSBmcm9tIHRoZSBtYXAgdGhhdCBpcyBjbG9zZXN0IHRvIHRoZSBnaXZlbiBzbGlkZXIgdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0gdXNlclZhbHVlIC0gVGhlIHZhbHVlIHRvIGZpbmQgdGhlIGNsb3Nlc3Qga2V5IGZvci4gKHZhbHVlcyBvbmx5IGJldHdlZW4gMCAtIDEwMClcclxuICAgICAqIEByZXR1cm5zIFRoZSBrZXkgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgY2xvc2VzdCBtYXBwZWQgdmFsdWUuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0Q2xvc2VzdFZhbHVlRnJvbU1hcFNsaWRlcih1c2VyVmFsdWU6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICAgICAgY29uc3QgbWFwVG9BcnJheSA9IEFycmF5LmZyb20odGhpcy5tYXBSYW5nZVZhbHVlc0ZvclNsaWRlcikubWFwKChbdmFsdWUsIG1hcHBlZF0pID0+ICh7IHZhbHVlLCBtYXBwZWQgfSkpO1xyXG4gICAgICAgIGlmICh1c2VyVmFsdWUgPj0gdGhpcy5tYXgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG1hcFRvQXJyYXlbbWFwVG9BcnJheS5sZW5ndGggLSAxXS5tYXBwZWQ7XHJcbiAgICAgICAgfSBlbHNlIGlmICh1c2VyVmFsdWUgPD0gdGhpcy5taW4pIHtcclxuICAgICAgICAgICAgcmV0dXJuIG1hcFRvQXJyYXlbMF0ubWFwcGVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBleGFjdFZhbHVlID0gbWFwVG9BcnJheS5maW5kKCh4KSA9PiB4LnZhbHVlID09IHVzZXJWYWx1ZSk7XHJcbiAgICAgICAgY29uc3QgY2xvc2VzdFZhbHVlID0gbWFwVG9BcnJheS5yZWR1Y2UoKHByZXYsIGN1cnIpID0+XHJcbiAgICAgICAgICAgIE1hdGguYWJzKGN1cnIudmFsdWUgLSB1c2VyVmFsdWUpIDwgTWF0aC5hYnMocHJldi52YWx1ZSAtIHVzZXJWYWx1ZSkgPyBjdXJyIDogcHJldixcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSBleGFjdFZhbHVlIHx8IGNsb3Nlc3RWYWx1ZTtcclxuICAgICAgICBjb25zdCBpc0ZpcnN0SXRlbSA9IG1hcFRvQXJyYXlbMF0gPT09IGl0ZW07XHJcbiAgICAgICAgY29uc3QgaXNMYXN0SXRlbSA9IG1hcFRvQXJyYXlbbWFwVG9BcnJheS5sZW5ndGggLSAxXSA9PT0gaXRlbTtcclxuICAgICAgICBpZiAoaXNGaXJzdEl0ZW0gJiYgdXNlclZhbHVlID4gdGhpcy5taW4pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGdldE1pZHBvaW50KGl0ZW0ubWFwcGVkLCBtYXBUb0FycmF5WzFdLm1hcHBlZCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpc0xhc3RJdGVtICYmIHVzZXJWYWx1ZSA8IHRoaXMubWF4KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBnZXRNaWRwb2ludChpdGVtLm1hcHBlZCwgbWFwVG9BcnJheVttYXBUb0FycmF5Lmxlbmd0aCAtIDJdLm1hcHBlZCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW0ubWFwcGVkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGhhbmRsZUFycm93S2V5TGVmdCgpIHtcclxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9pbmNyZW1lbnRPckRlY3JlbWVudFN0YXJ0QW5kRW5kVmFsdWUoZmFsc2UpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2luY3JlbWVudE9yRGVjcmVtZW50RW5kVmFsdWUoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldFByb2dyZXNzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYW5kbGVBcnJvd0tleVJpZ2h0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2luY3JlbWVudE9yRGVjcmVtZW50U3RhcnRBbmRFbmRWYWx1ZSh0cnVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9pbmNyZW1lbnRPckRlY3JlbWVudEVuZFZhbHVlKHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldFByb2dyZXNzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfaW5jcmVtZW50T3JEZWNyZW1lbnRTdGFydEFuZEVuZFZhbHVlKGluY3JlbWVudDogYm9vbGVhbikge1xyXG4gICAgICAgIGxldCBbc3RhcnQsIGVuZF0gPSB0aGlzLnZhbHVlIGFzIFtudW1iZXIsIG51bWJlcl07XHJcbiAgICAgICAgY29uc3QgZGlmZmVyZW5jZSA9IGdldERpZmZlcmVuY2UoZW5kLCBzdGFydCk7XHJcbiAgICAgICAgaWYgKGluY3JlbWVudCkge1xyXG4gICAgICAgICAgICBzdGFydCArPSB0aGlzLnN0ZXA7XHJcbiAgICAgICAgICAgIGVuZCArPSB0aGlzLnN0ZXA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3RhcnQgLT0gdGhpcy5zdGVwO1xyXG4gICAgICAgICAgICBlbmQgLT0gdGhpcy5zdGVwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzdGFydExlc3NUaGFuTWluID0gc3RhcnQgPCB0aGlzLm1pbjtcclxuICAgICAgICBjb25zdCBlbmRHcmVhdGVyVGhhbk1heCA9IGVuZCA+IHRoaXMubWF4O1xyXG4gICAgICAgIGlmIChzdGFydExlc3NUaGFuTWluIHx8IGVuZEdyZWF0ZXJUaGFuTWF4KSB7XHJcbiAgICAgICAgICAgIGlmIChzdGFydExlc3NUaGFuTWluKSB7XHJcbiAgICAgICAgICAgICAgICBzdGFydCA9IHRoaXMubWluO1xyXG4gICAgICAgICAgICAgICAgZW5kID0gc3RhcnQgKyBkaWZmZXJlbmNlO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVuZEdyZWF0ZXJUaGFuTWF4KSB7XHJcbiAgICAgICAgICAgICAgICBlbmQgPSB0aGlzLm1heDtcclxuICAgICAgICAgICAgICAgIHN0YXJ0ID0gZW5kIC0gZGlmZmVyZW5jZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc3RhcnQgPCB0aGlzLm1pbiB8fCBlbmQgPiB0aGlzLm1heCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0VmFsdWUoW3N0YXJ0LCBlbmRdLCBmYWxzZSk7XHJcbiAgICAgICAgaWYgKHRoaXMubmVlZFBhcnNlVmFsdWVzKSB7XHJcbiAgICAgICAgICAgIHN0YXJ0ID0gdGhpcy5nZXRDbG9zZXN0VmFsdWVGcm9tTWFwU2xpZGVyKHN0YXJ0KTtcclxuICAgICAgICAgICAgZW5kID0gdGhpcy5nZXRDbG9zZXN0VmFsdWVGcm9tTWFwU2xpZGVyKGVuZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc3RhcnRWYWx1ZSA9IHN0YXJ0O1xyXG4gICAgICAgIHRoaXMuZW5kVmFsdWUgPSBlbmQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfaW5jcmVtZW50T3JEZWNyZW1lbnRFbmRWYWx1ZShpbmNyZW1lbnQ6IGJvb2xlYW4pIHtcclxuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnZhbHVlIGFzIG51bWJlcjtcclxuICAgICAgICBpZiAoaW5jcmVtZW50KSB7XHJcbiAgICAgICAgICAgIHZhbHVlICs9IHRoaXMuc3RlcDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YWx1ZSAtPSB0aGlzLnN0ZXA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBfbmV3RW5kVmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICBpZiAodGhpcy5uZWVkUGFyc2VWYWx1ZXMpIHtcclxuICAgICAgICAgICAgX25ld0VuZFZhbHVlID0gdGhpcy5nZXRDbG9zZXN0VmFsdWVGcm9tTWFwU2xpZGVyKF9uZXdFbmRWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChfbmV3RW5kVmFsdWUgPCB0aGlzLk1JTl9SQU5HRV9WQUxVRSB8fCBfbmV3RW5kVmFsdWUgPiB0aGlzLk1BWF9SQU5HRV9WQUxVRSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZW5kVmFsdWUgPSBfbmV3RW5kVmFsdWU7XHJcbiAgICAgICAgdGhpcy5zdGFydFZhbHVlID0gdGhpcy5lbmRWYWx1ZTtcclxuICAgICAgICB0aGlzLnNldFZhbHVlKF9uZXdFbmRWYWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXQgbmVlZFBhcnNlVmFsdWVzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1heCAhPT0gdGhpcy5NQVhfUkFOR0VfVkFMVUUgfHwgdGhpcy5taW4gIT09IHRoaXMuTUlOX1JBTkdFX1ZBTFVFO1xyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyBhIG5ldyByYW5nZSBiYXNlZCBvbiB0aGUgb2xkIHJhbmdlIGFuZCB0aGUgcG9zaXRpb25zIGNsaWNrZWQgYW5kIGZpbmFsaXplZC5cclxuICpcclxuICogQHBhcmFtIG9sZFN0YXJ0IC0gVGhlIHN0YXJ0aW5nIHZhbHVlIG9mIHRoZSBvbGQgcmFuZ2UuXHJcbiAqIEBwYXJhbSBvbGRFbmQgLSBUaGUgZW5kaW5nIHZhbHVlIG9mIHRoZSBvbGQgcmFuZ2UuXHJcbiAqIEBwYXJhbSBjbGlja2VkUG9zaXRpb24gLSBUaGUgcG9zaXRpb24gd2hlcmUgdGhlIGNsaWNrIG9jY3VycmVkLlxyXG4gKiBAcGFyYW0gZmluYWxQb3NpdGlvbiAtIFRoZSBwb3NpdGlvbiB3aGVyZSB0aGUgcmFuZ2Ugc2hvdWxkIGVuZC5cclxuICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIG5ldyBzdGFydCBhbmQgZW5kIHZhbHVlcyBvZiB0aGUgcmFuZ2UuXHJcbiAqL1xyXG5jb25zdCBjYWxjdWxhdGVOZXdSYW5nZSA9IChvbGRTdGFydDogbnVtYmVyLCBvbGRFbmQ6IG51bWJlciwgY2xpY2tlZFBvc2l0aW9uOiBudW1iZXIsIGZpbmFsUG9zaXRpb246IG51bWJlcikgPT4ge1xyXG4gICAgY29uc3QgcmFuZ2UgPSBvbGRFbmQgLSBvbGRTdGFydDtcclxuICAgIGNvbnN0IG5ld1N0YXJ0ID0gZmluYWxQb3NpdGlvbiAtIChjbGlja2VkUG9zaXRpb24gLSBvbGRTdGFydCk7XHJcbiAgICBjb25zdCBuZXdFbmQgPSBuZXdTdGFydCArIHJhbmdlO1xyXG4gICAgcmV0dXJuIHsgbmV3U3RhcnQsIG5ld0VuZCB9O1xyXG59O1xyXG5cclxuY29uc3QgaXNJblJhbmdlID0gKHZhbHVlOiBudW1iZXIsIHJhbmdlU3RhcnQ6IG51bWJlciwgcmFuZ2VFbmQ6IG51bWJlcik6IGJvb2xlYW4gPT4ge1xyXG4gICAgY29uc3QgW21pbiwgbWF4XSA9IHJhbmdlU3RhcnQgPCByYW5nZUVuZCA/IFtyYW5nZVN0YXJ0LCByYW5nZUVuZF0gOiBbcmFuZ2VFbmQsIHJhbmdlU3RhcnRdO1xyXG4gICAgcmV0dXJuIHZhbHVlID49IG1pbiAmJiB2YWx1ZSA8PSBtYXg7XHJcbn07XHJcblxyXG5jb25zdCBnZXRNaWRwb2ludCA9IChzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcikgPT4ge1xyXG4gICAgY29uc3QgbWlkcG9pbnQgPSAoc3RhcnQgKyBlbmQpIC8gMjtcclxuICAgIHJldHVybiBwYXJzZUZsb2F0KG1pZHBvaW50LnRvRml4ZWQoMikpO1xyXG59O1xyXG5jb25zdCBnZXREaWZmZXJlbmNlID0gKGVuZDogbnVtYmVyLCBzdGFydDogbnVtYmVyKSA9PiB7XHJcbiAgICByZXR1cm4gTWF0aC5hYnMoZW5kIC0gc3RhcnQpO1xyXG59O1xyXG4iLCI8ZGl2XHJcbiAgICBjbGFzcz1cInNsaWRlci1jb250YWluZXJcIlxyXG4gICAgW25nQ2xhc3NdPVwieyAnc2xpZGVyLWNvbnRhaW5lci0tZGlzYWJsZWQnOiBkaXNhYmxlZCB9XCJcclxuICAgIFt0YWJpbmRleF09XCJ0YWJpbmRleFwiXHJcbiAgICAoY2xpY2spPVwib25UcmFja0NsaWNrKCRldmVudClcIlxyXG4gICAgKGZvY3VzKT1cIm9uRm9jdXNJbigpXCJcclxuICAgIChibHVyKT1cIm9uQmx1cigpXCJcclxuPlxyXG4gICAgPGRpdlxyXG4gICAgICAgICN0cmFja1xyXG4gICAgICAgIGNsYXNzPVwic2xpZGVyLXRyYWNrXCJcclxuICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICdzbGlkZXItdHJhY2stLWhpZGRlbi10aHVtYic6IGhpZGRlblRodW1iLFxyXG4gICAgICAgICAgICAnc2xpZGVyLXRyYWNrLS1tb3ZpbmctbXVsdGlwbGUtdGh1bWJzJzogbW92aW5nUHJvZ3Jlc3NCYXIsXHJcbiAgICAgICAgfVwiXHJcbiAgICA+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cInNsaWRlci1wcm9ncmVzc1wiXHJcbiAgICAgICAgICAgIChtb3VzZWRvd24pPVwib25Qcm9ncmVzc01vdXNlRG93bigkZXZlbnQpXCJcclxuICAgICAgICAgICAgW3N0eWxlLmxlZnQuJV09XCJwcm9ncmVzc0xlZnRcIlxyXG4gICAgICAgICAgICBbc3R5bGUud2lkdGhdPVwicHJvZ3Jlc3NXaWR0aFwiXHJcbiAgICAgICAgPjwvZGl2PlxyXG4gICAgICAgIEBpZiAobXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzbGlkZXItdGh1bWJcIlxyXG4gICAgICAgICAgICAgICAgW3NUb29sdGlwXT1cInRvb2x0aXBTdGFydFRleHRcIlxyXG4gICAgICAgICAgICAgICAgW3Nob3dEZWxheV09XCIwXCJcclxuICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwib25Nb3VzZURvd24oJGV2ZW50LCAnc3RhcnQnKVwiXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUubGVmdC4lXT1cInN0YXJ0VmFsdWVcIlxyXG4gICAgICAgICAgICA+PC9kaXY+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgICAgW3NUb29sdGlwXT1cInRvb2x0aXBFbmRUZXh0XCJcclxuICAgICAgICAgICAgY2xhc3M9XCJzbGlkZXItdGh1bWJcIlxyXG4gICAgICAgICAgICBbc2hvd0RlbGF5XT1cIjBcIlxyXG4gICAgICAgICAgICAobW91c2Vkb3duKT1cIm9uTW91c2VEb3duKCRldmVudCwgJ2VuZCcpXCJcclxuICAgICAgICAgICAgW3N0eWxlLmxlZnQuJV09XCJlbmRWYWx1ZVwiXHJcbiAgICAgICAgPjwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyXCI+XHJcbiAgICAgICAgPHNwYW4+e3sgbWluVmFsdWVMYWJlbCB8fCBtaW4gfX08L3NwYW4+XHJcbiAgICAgICAgPHNwYW4+e3sgbWF4VmFsdWVMYWJlbCB8fCBtYXggfX08L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
682
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9zbGlkZXIvc3JjL2xpYi9zbGlkZXIvc2xpZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9zbGlkZXIvc3JjL2xpYi9zbGlkZXIvc2xpZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHSCxTQUFTLEVBRVQsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFFTixTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQzs7QUFFOUU7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFlSCxNQUFNLE9BQU8sZUFBZTtJQUNQLGVBQWUsR0FBRyxHQUFHLENBQUM7SUFDdEIsZUFBZSxHQUFHLENBQUMsQ0FBQztJQUU5QixLQUFLLENBQWM7SUFFMUI7Ozs7O09BS0c7SUFFSSxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBRXhCOzs7OztPQUtHO0lBRUksS0FBSyxHQUE4QixDQUFDLENBQUM7SUFFNUM7OztPQUdHO0lBRUksV0FBVyxHQUFHLElBQUksWUFBWSxFQUE2QixDQUFDO0lBRW5FOzs7O09BSUc7SUFFSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBRWhCOzs7OztPQUtHO0lBRUksV0FBVyxHQUFHLEtBQUssQ0FBQztJQUUzQjs7OztPQUlHO0lBRUksUUFBUSxHQUFHLEtBQUssQ0FBQztJQUV4Qjs7OztPQUlHO0lBRUksR0FBRyxHQUFHLElBQUks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OlsiaW1wb3J0IHtcclxuICAgIEFmdGVyVmlld0luaXQsXHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIENvbXBvbmVudCxcclxuICAgIEVsZW1lbnRSZWYsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBmb3J3YXJkUmVmLFxyXG4gICAgSG9zdExpc3RlbmVyLFxyXG4gICAgSW5wdXQsXHJcbiAgICBPbkNoYW5nZXMsXHJcbiAgICBPbkluaXQsXHJcbiAgICBPdXRwdXQsXHJcbiAgICBTaW1wbGVDaGFuZ2VzLFxyXG4gICAgVmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy90b29sdGlwJztcclxuXHJcbi8qKlxyXG4gKiBAZGVzY3JpcHRpb24gQ29tcG9uZW50ZSBkZSBjb250cm9sZSBkZXNsaXphbnRlIChzbGlkZXIpIHBhcmEgc2VsZcOnw6NvIGRlIHZhbG9yZXMgbnVtw6lyaWNvc1xyXG4gKiBkZW50cm8gZGUgdW0gaW50ZXJ2YWxvIGRlZmluaWRvLiBTdXBvcnRhIG1vZG8gc2ltcGxlcyAodW0gdmFsb3IpIGUgbW9kbyBkZSBpbnRlcnZhbG9cclxuICogKGRvaXMgdmFsb3JlczogaW7DrWNpbyBlIGZpbSkuIEltcGxlbWVudGEge0BsaW5rIENvbnRyb2xWYWx1ZUFjY2Vzc29yfSBwYXJhIGludGVncmHDp8Ojb1xyXG4gKiBjb20gUmVhY3RpdmUgRm9ybXMgZSBUZW1wbGF0ZS1kcml2ZW4gRm9ybXMgZG8gQW5ndWxhci5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgaHRtbFxyXG4gKiA8IS0tIFNsaWRlciBzaW1wbGVzIC0tPlxyXG4gKiA8cy1zbGlkZXIgZm9ybUNvbnRyb2xOYW1lPVwidm9sdW1lXCIgW21pbl09XCIwXCIgW21heF09XCIxMDBcIiBbc3RlcF09XCI1XCIgLz5cclxuICpcclxuICogPCEtLSBTbGlkZXIgZGUgaW50ZXJ2YWxvIC0tPlxyXG4gKiA8cy1zbGlkZXIgZm9ybUNvbnRyb2xOYW1lPVwiZmFpeGFcIiBbbXVsdGlwbGVdPVwidHJ1ZVwiIFttaW5dPVwiMFwiIFttYXhdPVwiMTAwMFwiIC8+XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAY2F0ZWdvcnkgSW5wdXRzXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAncy1zbGlkZXInLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NsaWRlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9zbGlkZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNsaWRlckNvbXBvbmVudCksXHJcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgICAgIH0sXHJcbiAgICBdLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICAgIGltcG9ydHM6IFtOZ0NsYXNzLCBUb29sdGlwRGlyZWN0aXZlXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNsaWRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uQ2hhbmdlcyB7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IE1BWF9SQU5HRV9WQUxVRSA9IDEwMDtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgTUlOX1JBTkdFX1ZBTFVFID0gMDtcclxuICAgIEBWaWV3Q2hpbGQoJ3RyYWNrJylcclxuICAgIHB1YmxpYyB0cmFjayE6IEVsZW1lbnRSZWY7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gSGFiaWxpdGEgbyBtb2RvIGRlIGludGVydmFsbywgcGVybWl0aW5kbyBzZWxlY2lvbmFyIHVtIHZhbG9yIG3DrW5pbW8gZSBtw6F4aW1vLlxyXG4gICAgICogUXVhbmRvIGB0cnVlYCwgbyB2YWxvciBkbyBjb21wb25lbnRlIMOpIHVtIGFycmF5IGBbaW5pY2lvLCBmaW1dYC5cclxuICAgICAqXHJcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIG11bHRpcGxlID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gVmFsb3IgYXR1YWwgZG8gc2xpZGVyLiBObyBtb2RvIHNpbXBsZXMgw6kgdW0gbsO6bWVybzsgbm8gbW9kbyBkZVxyXG4gICAgICogaW50ZXJ2YWxvIChgbXVsdGlwbGU6IHRydWVgKSDDqSB1bSBhcnJheSBgW2luaWNpbywgZmltXWAuXHJcbiAgICAgKlxyXG4gICAgICogQGRlZmF1bHQgMFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHZhbHVlOiBudW1iZXIgfCBbbnVtYmVyLCBudW1iZXJdID0gMDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBFbWl0aWRvIHNlbXByZSBxdWUgbyB2YWxvciBkbyBzbGlkZXIgw6kgYWx0ZXJhZG8gcGVsbyB1c3XDoXJpby5cclxuICAgICAqIEVtaXRlIG8gbm92byB2YWxvciAobsO6bWVybyBvdSBhcnJheSBkZSBkb2lzIG7Dum1lcm9zIG5vIG1vZG8gZGUgaW50ZXJ2YWxvKS5cclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlciB8IFtudW1iZXIsIG51bWJlcl0+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gSW5jcmVtZW50byBhcGxpY2FkbyBhIGNhZGEgbW92aW1lbnRvIGRvIHRodW1iIGRvIHNsaWRlci5cclxuICAgICAqXHJcbiAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc3RlcCA9IDE7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2N1bHRhIHZpc3VhbG1lbnRlIG8gdGh1bWIgKGJvdMOjbyBhcnJhc3TDoXZlbCkgZG8gc2xpZGVyLlxyXG4gICAgICogw5p0aWwgcGFyYSB2aXN1YWxpemHDp8O1ZXMgb25kZSBhcGVuYXMgYSBmYWl4YSBkZSBwcm9ncmVzc28gZGV2ZSBzZXIgZXhpYmlkYS5cclxuICAgICAqXHJcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGhpZGRlblRodW1iID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gRGVzYWJpbGl0YSBhIGludGVyYcOnw6NvIGRvIHVzdcOhcmlvIGNvbSBvIHNsaWRlci5cclxuICAgICAqXHJcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGRpc2FibGVkID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gVmFsb3IgbcOtbmltbyBwZXJtaXRpZG8gbm8gc2xpZGVyLlxyXG4gICAgICpcclxuICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBtaW4gPSB0aGlzLk1JTl9SQU5HRV9WQUxVRTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBWYWxvciBtw6F4aW1vIHBlcm1pdGlkbyBubyBzbGlkZXIuXHJcbiAgICAgKlxyXG4gICAgICogQGRlZmF1bHQgMTAwXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgbWF4ID0gdGhpcy5NQVhfUkFOR0VfVkFMVUU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gTGFiZWwgZXhpYmlkbyBhYmFpeG8gb3UgYW8gbGFkbyBkbyB2YWxvciBtw61uaW1vIGRvIHNsaWRlci5cclxuICAgICAqIMOadGlsIHBhcmEgaW5kaWNhciBzZW1hbnRpY2FtZW50ZSBvcyBleHRyZW1vcyBkbyBpbnRlcnZhbG8uXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgbWluVmFsdWVMYWJlbD86IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBMYWJlbCBleGliaWRvIGFiYWl4byBvdSBhbyBsYWRvIGRvIHZhbG9yIG3DoXhpbW8gZG8gc2xpZGVyLlxyXG4gICAgICogw5p0aWwgcGFyYSBpbmRpY2FyIHNlbWFudGljYW1lbnRlIG9zIGV4dHJlbW9zIGRvIGludGVydmFsby5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBtYXhWYWx1ZUxhYmVsPzogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIMONbmRpY2UgZGUgdGFidWxhw6fDo28gZG8gZWxlbWVudG8sIGNvbnRyb2xhbmRvIGEgb3JkZW0gZGUgZm9jbyB2aWEgdGVjbGFkby5cclxuICAgICAqXHJcbiAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgdGFiaW5kZXggPSAwO1xyXG5cclxuICAgIHB1YmxpYyBzdGFydFZhbHVlID0gMDtcclxuICAgIHB1YmxpYyBlbmRWYWx1ZSA9IDA7XHJcbiAgICBwdWJsaWMgbW92aW5nUHJvZ3Jlc3NCYXIgPSBmYWxzZTtcclxuICAgIHB1YmxpYyBwcm9ncmVzc0xlZnQgPSAwO1xyXG4gICAgcHVibGljIHByb2dyZXNzV2lkdGggPSAnJztcclxuXHJcbiAgICBwdWJsaWMgb25DaGFuZ2U6ICh2YWx1ZTogbnVtYmVyIHwgW251bWJlciwgbnVtYmVyXSkgPT4gdm9pZCA9ICgpID0+IHt9O1xyXG4gICAgcHVibGljIG9uVG91Y2hlZDogKHZhbHVlOiBudW1iZXIgfCBbbnVtYmVyLCBudW1iZXJdKSA9PiB2b2lkID0gKCkgPT4ge307XHJcblxyXG4gICAgcHJpdmF0ZSBkcmFnZ2luZ1RodW1iOiAnc3RhcnQnIHwgJ2VuZCcgfCBudWxsID0gbnVsbDtcclxuICAgIHByaXZhdGUgcHJvZ3Jlc3NCYXJFdmVudFBvc2l0aW9uU3RhcnQgPSAtMTtcclxuICAgIHByaXZhdGUgc3RhcnRWYWx1ZUJlZm9yZVByb2dyZXNzQmFyRXZlbnQgPSAtMTtcclxuICAgIHByaXZhdGUgcmFuZ2VCZXR3ZWVuRWxlbWVudHNCZWZvcmVQcm9ncmVzc0JhckV2ZW50ID0gLTE7XHJcbiAgICBwcml2YXRlIHRvdGFsUmFuZ2VCZWZvcmVQcm9ncmVzc0JhckV2ZW50ID0gLTE7XHJcbiAgICAvKipcclxuICAgICAqIE1hcCBvZiB2YWxpZCB2YWx1ZXMgZm9yIHZhbHVlcyBpbiByYW5nZS5cclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiB3aXRoIG1pbiA9IC0xMCBhbmQgbWF4ID0gMTAgd2lsbCBoYXZlIHRoaXMgbWFwLlxyXG4gICAgICoge1xyXG4gICAgICogICAgIC0xMDogeyAwIH0sXHJcbiAgICAgKiAgICAgLTk6IHsgMTAgfSxcclxuICAgICAqICAgICAgLi4uXHJcbiAgICAgKiAgICAgMTA6IHsgMTAgfVxyXG4gICAgICogfVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIG1hcFJhbmdlVmFsdWVzRm9yU2xpZGVyOiBNYXA8bnVtYmVyLCBudW1iZXI+ID0gbmV3IE1hcCgpO1xyXG4gICAgcHJpdmF0ZSBhY3RpdmVNb3VzZURvd24gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgZm9jdXNBY3RpdmUgPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZXRVc2VyUmFuZ2VNYXBWYWx1ZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGhhc0NoYW5nZXNPbk1pbiA9IGNoYW5nZXNbJ21pbiddICYmICFjaGFuZ2VzWydtaW4nXS5maXJzdENoYW5nZTtcclxuICAgICAgICBjb25zdCBoYXNDaGFuZ2VzT25NYXggPSBjaGFuZ2VzWydtYXgnXSAmJiAhY2hhbmdlc1snbWF4J10uZmlyc3RDaGFuZ2U7XHJcbiAgICAgICAgY29uc3QgaGFzQ2hhbmdlcyA9IGhhc0NoYW5nZXNPbk1pbiB8fCBoYXNDaGFuZ2VzT25NYXg7XHJcbiAgICAgICAgaWYgKGhhc0NoYW5nZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRVc2VyUmFuZ2VNYXBWYWx1ZXMoKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFJhbmdlVmFsdWVzKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2VWYWx1ZXMoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duJywgWyckZXZlbnQnXSlcclxuICAgIHB1YmxpYyBvbktleWRvd24oJGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZm9jdXNBY3RpdmUgJiYgIXRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgY29uc3QgaXNBcnJvd0tleUxlZnQgPSAkZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0JztcclxuICAgICAgICAgICAgY29uc3QgaXNBcnJvd0tleVJpZ2h0ID0gJGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnO1xyXG4gICAgICAgICAgICBpZiAoaXNBcnJvd0tleUxlZnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQXJyb3dLZXlMZWZ0KCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNBcnJvd0tleVJpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUFycm93S2V5UmlnaHQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHRvb2x0aXBTdGFydFRleHQoKSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgPyB0aGlzLnZhbHVlWzBdPy50b1N0cmluZygpIDogdGhpcy52YWx1ZT8udG9TdHJpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHRvb2x0aXBFbmRUZXh0KCkge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpID8gdGhpcy52YWx1ZVsxXT8udG9TdHJpbmcoKSA6IHRoaXMudmFsdWU/LnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHdyaXRlVmFsdWUob2JqOiBudW1iZXIgfCBbbnVtYmVyLCBudW1iZXJdKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG9iajtcclxuICAgICAgICB0aGlzLnNldFJhbmdlVmFsdWVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogbnVtYmVyIHwgW251bWJlciwgbnVtYmVyXSkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25Gb2N1c0luKCkge1xyXG4gICAgICAgIHRoaXMuZm9jdXNBY3RpdmUgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkJsdXIoKSB7XHJcbiAgICAgICAgdGhpcy5mb2N1c0FjdGl2ZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvblRyYWNrQ2xpY2soZXZ0OiBNb3VzZUV2ZW50KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5tb3ZpbmdQcm9ncmVzc0JhciB8fCB0aGlzLmFjdGl2ZU1vdXNlRG93bikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRyYWNrQ2xpY2tQZXJjZW50YWdlID0gdGhpcy5nZXRQZXJjZW50YWdlQnlFdmVudChldnQpO1xyXG4gICAgICAgIGNvbnN0IHRyYWNrQ2xpY2tUb1VzZXJSYW5nZSA9IHRoaXMuZ2V0VmFsdWVGcm9tTWFwQnlWYWx1ZSh0cmFja0NsaWNrUGVyY2VudGFnZSk7XHJcbiAgICAgICAgY29uc3QgX3RyYWNrQ2xpY2tWYWxpZCA9IHRoaXMubmVlZFBhcnNlVmFsdWVzID8gdHJhY2tDbGlja1RvVXNlclJhbmdlIDogdHJhY2tDbGlja1BlcmNlbnRhZ2U7XHJcbiAgICAgICAgY29uc3QgX3NldEVuZFZhbHVlID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBfZW5kVmFsdWVVc2VyVmFsdWUgPSB0aGlzLmdldFZhbHVlRnJvbU1hcEJ5VmFsdWUodGhpcy5lbmRWYWx1ZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IF9lbmRWYWx1ZSA9XHJcbiAgICAgICAgICAgICAgICAodGhpcy5uZWVkUGFyc2VWYWx1ZXNcclxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMubWFwUmFuZ2VWYWx1ZXNGb3JTbGlkZXIuZ2V0KHRyYWNrQ2xpY2tUb1VzZXJSYW5nZSlcclxuICAgICAgICAgICAgICAgICAgICA6IHRyYWNrQ2xpY2tQZXJjZW50YWdlKSA/PyAwO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5uZWVkUGFyc2VWYWx1ZXMgJiYgX2VuZFZhbHVlVXNlclZhbHVlICE9PSB0cmFja0NsaWNrVG9Vc2VyUmFuZ2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZW5kVmFsdWUgPSBfZW5kVmFsdWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMubmVlZFBhcnNlVmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVuZFZhbHVlID0gdHJhY2tDbGlja1BlcmNlbnRhZ2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBfc2V0U3RhcnRWYWx1ZSA9ICgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgX3N0YXJ0VmFsdWVVc2VyVmFsdWUgPSB0aGlzLmdldFZhbHVlRnJvbU1hcEJ5VmFsdWUodGhpcy5zdGFydFZhbHVlKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMubmVlZFBhcnNlVmFsdWVzICYmIF9zdGFydFZhbHVlVXNlclZhbHVlICE9PSB0cmFja0NsaWNrVG9Vc2VyUmFuZ2UpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IF9zdGFydFZhbHVlID1cclxuICAgICAgICAgICAgICAgICAgICAodGhpcy5uZWVkUGFyc2VWYWx1ZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLm1hcFJhbmdlVmFsdWVzRm9yU2xpZGVyLmdldCh0cmFja0NsaWNrVG9Vc2VyUmFuZ2UpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdHJhY2tDbGlja1BlcmNlbnRhZ2UpID8/IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0VmFsdWUgPSBfc3RhcnRWYWx1ZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5uZWVkUGFyc2VWYWx1ZXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRWYWx1ZSA9IHRyYWNrQ2xpY2tQZXJjZW50YWdlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICBjb25zdCBbc3RhcnQsIGVuZF0gPSB0aGlzLnZhbHVlIGFzIFtudW1iZXIsIG51bWJlcl07XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkU3RhcnQgPSAodGhpcy5uZWVkUGFyc2VWYWx1ZXMgPyB0aGlzLm1hcFJhbmdlVmFsdWVzRm9yU2xpZGVyLmdldChzdGFydCkgOiBzdGFydCkgPz8gMDtcclxuICAgICAgICAgICAgY29uc3QgdmFsaWRFbmQgPSAodGhpcy5uZWVkUGFyc2VWYWx1ZXMgPyB0aGlzLm1hcFJhbmdlVmFsdWVzRm9yU2xpZGVyLmdldChlbmQpIDogZW5kKSA/PyAwO1xyXG4gICAgICAgICAgICBjb25zdCBfdXBkYXRlU3RhcnQgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBfc2V0U3RhcnRWYWx1ZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZShbdHJhY2tDbGlja1BlcmNlbnRhZ2UsIHZhbGlkRW5kXSk7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBjb25zdCBfdXBkYXRlRW5kID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgX3NldEVuZFZhbHVlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFZhbHVlKFt2YWxpZFN0YXJ0LCB0cmFja0NsaWNrUGVyY2VudGFnZV0pO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjb25zdCBjbGlja1BlcmNlbnRhZ2VCZXR3ZWVuUmFuZ2UgPSBpc0luUmFuZ2UoX3RyYWNrQ2xpY2tWYWxpZCwgc3RhcnQsIGVuZCk7XHJcbiAgICAgICAgICAgIGlmIChfdHJhY2tDbGlja1ZhbGlkIDwgc3RhcnQpIHtcclxuICAgICAgICAgICAgICAgIF91cGRhdGVTdGFydCgpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKF90cmFja0NsaWNrVmFsaWQgPiBlbmQpIHtcclxuICAgICAgICAgICAgICAgIF91cGRhdGVFbmQoKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChjbGlja1BlcmNlbnRhZ2VCZXR3ZWVuUmFuZ2UpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1pZGRsZSA9IChzdGFydCArIGVuZCkgLyAyO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdHJhY2tDbGlja1BlcmNlbnRhZ2VJc0V4YWN0aWRkbGUgPSBfdHJhY2tDbGlja1ZhbGlkID09PSBtaWRkbGU7XHJcbiAgICAgICAgICAgICAgICBpZiAodHJhY2tDbGlja1BlcmNlbnRhZ2VJc0V4YWN0aWRkbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBfdXBkYXRlU3RhcnQoKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2V0U3RhcnQgPSBfdHJhY2tDbGlja1ZhbGlkIDwgbWlkZGxlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNldEVuZCA9IF90cmFja0NsaWNrVmFsaWQgPiBtaWRkbGU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNldFN0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF91cGRhdGVTdGFydCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2V0RW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF91cGRhdGVFbmQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKHRyYWNrQ2xpY2tQZXJjZW50YWdlKTtcclxuICAgICAgICAgICAgX3NldEVuZFZhbHVlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFByb2dyZXNzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uUHJvZ3Jlc3NNb3VzZURvd24oZXZ0OiBNb3VzZUV2ZW50KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm11bHRpcGxlIHx8IHRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByb2dyZXNzQmFyRXZlbnRQb3NpdGlvblN0YXJ0ID0gdGhpcy5nZXRQZXJjZW50YWdlQnlFdmVudChldnQpO1xyXG4gICAgICAgIHRoaXMuc3RhcnRWYWx1ZUJlZm9yZVByb2dyZXNzQmFyRXZlbnQgPSB0aGlzLnN0YXJ0VmFsdWU7XHJcbiAgICAgICAgdGhpcy5yYW5nZUJldHdlZW5FbGVtZW50c0JlZm9yZVByb2dyZXNzQmFyRXZlbnQgPSB0aGlzLmVuZFZhbHVlIC0gdGhpcy5zdGFydFZhbHVlO1xyXG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IFtzdGFydCwgZW5kXSA9IHRoaXMudmFsdWUgYXMgW251bWJlciwgbnVtYmVyXTtcclxuICAgICAgICAgICAgdGhpcy50b3RhbFJhbmdlQmVmb3JlUHJvZ3Jlc3NCYXJFdmVudCA9IGVuZCAtIHN0YXJ0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLmhhbmRsZVByb2dyZXNzQmFyTW92ZSk7XHJcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMuaGFuZGxlUHJvZ3Jlc3NCYXJNb3ZlRW5kKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25Nb3VzZURvd24oXzogTW91c2VFdmVudCwgdGh1bWI6ICdzdGFydCcgfCAnZW5kJyk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuZHJhZ2dpbmdUaHVtYiA9IHRodW1iO1xyXG4gICAgICAgIHRoaXMuYWN0aXZlTW91c2VEb3duID0gdHJ1ZTtcclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uVGh1bWJNb3ZlKTtcclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5vbk1vdXNlVXApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0UmFuZ2VWYWx1ZXMoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgX3NldFN0YXJ0QW5kRW5kVmFsdWUgPSAoc3RhcnRWYWx1ZTogbnVtYmVyLCBlbmRWYWx1ZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRWYWx1ZSA9IHRoaXMuZ2V0Q2xvc2VzdFZhbHVlRnJvbU1hcFNsaWRlcihzdGFydFZhbHVlKTtcclxuICAgICAgICAgICAgdGhpcy5lbmRWYWx1ZSA9IHRoaXMuZ2V0Q2xvc2VzdFZhbHVlRnJvbU1hcFNsaWRlcihlbmRWYWx1ZSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAodGhpcy52YWx1ZSA9PT0gbnVsbCB8fCB0aGlzLnZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSAmJiAhdGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBtdXN0IHVzZSBcIm11bHRpcGxlXCIgd2l0aCB2YWx1ZSBhcyBhcnJheScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSAmJiBBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRWYWx1ZSA9IHRoaXMudmFsdWVbMF07XHJcbiAgICAgICAgICAgIHRoaXMuZW5kVmFsdWUgPSB0aGlzLnZhbHVlWzFdO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGFydFZhbHVlID0gdGhpcy52YWx1ZSBhcyBudW1iZXI7XHJcbiAgICAgICAgICAgIHRoaXMuZW5kVmFsdWUgPSB0aGlzLnZhbHVlIGFzIG51bWJlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgX3NldFN0YXJ0QW5kRW5kVmFsdWUodGhpcy5zdGFydFZhbHVlLCB0aGlzLmVuZFZhbHVlKTtcclxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICBsZXQgW19zdGFydFZhbHVlLCBfZW5kVmFsdWVdID0gdGhpcy52YWx1ZSBhcyBbbnVtYmVyLCBudW1iZXJdO1xyXG4gICAgICAgICAgICBjb25zdCBkaWZmZXJlbmNlID0gZ2V0RGlmZmVyZW5jZShfZW5kVmFsdWUsIF9zdGFydFZhbHVlKTtcclxuICAgICAgICAgICAgY29uc3QgZW5kVmFsdWVJc0dyZWF0aGVyVGhhbk1heCA9IF9lbmRWYWx1ZSA+IHRoaXMubWF4O1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydFZhbHVlSXNMZXNzVGhhbk1pbiA9IF9zdGFydFZhbHVlIDwgdGhpcy5taW47XHJcbiAgICAgICAgICAgIGNvbnN0IG5lZWRVcGRhdGVWYWx1ZXMgPSBlbmRWYWx1ZUlzR3JlYXRoZXJUaGFuTWF4IHx8IHN0YXJ0VmFsdWVJc0xlc3NUaGFuTWluO1xyXG4gICAgICAgICAgICBpZiAoZW5kVmFsdWVJc0dyZWF0aGVyVGhhbk1heCkge1xyXG4gICAgICAgICAgICAgICAgX2VuZFZhbHVlID0gdGhpcy5tYXg7XHJcbiAgICAgICAgICAgICAgICBfc3RhcnRWYWx1ZSA9IF9lbmRWYWx1ZSAtIGRpZmZlcmVuY2U7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRWYWx1ZUlzTGVzc1RoYW5NaW4pIHtcclxuICAgICAgICAgICAgICAgIF9zdGFydFZhbHVlID0gdGhpcy5taW47XHJcbiAgICAgICAgICAgICAgICBfZW5kVmFsdWUgPSBfc3RhcnRWYWx1ZSArIGRpZmZlcmVuY2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG5lZWRVcGRhdGVWYWx1ZXMpIHtcclxuICAgICAgICAgICAgICAgIF9zZXRTdGFydEFuZEVuZFZhbHVlKF9zdGFydFZhbHVlLCBfZW5kVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZShbdGhpcy5zdGFydFZhbHVlLCB0aGlzLmVuZFZhbHVlXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgX3ZhbHVlID0gdGhpcy52YWx1ZSBhcyBudW1iZXI7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlR3JlYXRoZXJUaGFuTWF4ID0gX3ZhbHVlID4gdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlTGVzc1RoYW5NaW4gPSBfdmFsdWUgPCB0aGlzLm1pbjtcclxuICAgICAgICAgICAgY29uc3QgbmVlZFVwZGF0ZVZhbHVlID0gdmFsdWVHcmVhdGhlclRoYW5NYXggfHwgdmFsdWVMZXNzVGhhbk1pbjtcclxuICAgICAgICAgICAgaWYgKHZhbHVlR3JlYXRoZXJUaGFuTWF4KSB7XHJcbiAgICAgICAgICAgICAgICBfdmFsdWUgPSB0aGlzLm1heDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZUxlc3NUaGFuTWluKSB7XHJcbiAgICAgICAgICAgICAgICBfdmFsdWUgPSB0aGlzLm1pbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobmVlZFVwZGF0ZVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFZhbHVlKF92YWx1ZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0UHJvZ3Jlc3MoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uVGh1bWJNb3ZlID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMubW92aW5nUHJvZ3Jlc3NCYXIgfHwgIXRoaXMuZHJhZ2dpbmdUaHVtYikgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgbmV3UG9zaXRpb24gPSB0aGlzLmdldFBlcmNlbnRhZ2VCeUV2ZW50KGV2ZW50KTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICh0aGlzLm11bHRpcGxlICYmIHRoaXMuZHJhZ2dpbmdUaHVtYiA9PT0gJ3N0YXJ0JyAmJiBuZXdQb3NpdGlvbiA+IHRoaXMuZW5kVmFsdWUpIHx8XHJcbiAgICAgICAgICAgICh0aGlzLm11bHRpcGxlICYmIHRoaXMuZHJhZ2dpbmdUaHVtYiA9PT0gJ2VuZCcgJiYgbmV3UG9zaXRpb24gPCB0aGlzLnN0YXJ0VmFsdWUpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uSW5Vc2VyUmFuZ2UgPSB0aGlzLmdldFZhbHVlRnJvbU1hcEJ5VmFsdWUobmV3UG9zaXRpb24pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5kcmFnZ2luZ1RodW1iID09PSAnc3RhcnQnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0VmFsdWUgPVxyXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLm5lZWRQYXJzZVZhbHVlcyA/IHRoaXMubWFwUmFuZ2VWYWx1ZXNGb3JTbGlkZXIuZ2V0KHBvc2l0aW9uSW5Vc2VyUmFuZ2UpIDogbmV3UG9zaXRpb24pID8/IDA7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kcmFnZ2luZ1RodW1iID09PSAnZW5kJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbmRWYWx1ZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMubmVlZFBhcnNlVmFsdWVzID8gdGhpcy5tYXBSYW5nZVZhbHVlc0ZvclNsaWRlci5nZXQocG9zaXRpb25JblVzZXJSYW5nZSkgOiBuZXdQb3NpdGlvbikgPz8gMDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZShbdGhpcy5zdGFydFZhbHVlLCB0aGlzLmVuZFZhbHVlXSk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBbc3RhcnQsIGVuZF0gPSB0aGlzLnZhbHVlIGFzIFtudW1iZXIsIG51bWJlcl07XHJcblxyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCAmJiB0aGlzLmRyYWdnaW5nVGh1bWIgPT09ICdzdGFydCcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRWYWx1ZSA9IHRoaXMuZW5kVmFsdWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnQgPT09IGVuZCAmJiB0aGlzLmRyYWdnaW5nVGh1bWIgPT09ICdlbmQnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVuZFZhbHVlID0gdGhpcy5zdGFydFZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy52YWx1ZSBhcyBudW1iZXI7XHJcbiAgICAgICAgICAgIGNvbnN0IF92YWx1ZSA9IHRoaXMubmVlZFBhcnNlVmFsdWVzID8gcG9zaXRpb25JblVzZXJSYW5nZSA6IG5ld1Bvc2l0aW9uO1xyXG4gICAgICAgICAgICBjb25zdCBpc0F0U2FtZVZhbHVlID0gdGhpcy5uZWVkUGFyc2VWYWx1ZXMgPyBwb3NpdGlvbkluVXNlclJhbmdlID09PSB0aGlzLnZhbHVlIDogZmFsc2U7XHJcbiAgICAgICAgICAgIGNvbnN0IGhhc1N0ZXAgPSB0aGlzLnN0ZXAgIT09IDA7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlSXNWYWxpZEJ5U3RlcCA9IGhhc1N0ZXBcclxuICAgICAgICAgICAgICAgID8gY3VycmVudFZhbHVlICsgdGhpcy5zdGVwID09PSBfdmFsdWUgfHwgY3VycmVudFZhbHVlIC0gdGhpcy5zdGVwID09PSBfdmFsdWVcclxuICAgICAgICAgICAgICAgIDogZmFsc2U7XHJcbiAgICAgICAgICAgIGlmIChpc0F0U2FtZVZhbHVlICYmICFuZXdWYWx1ZUlzVmFsaWRCeVN0ZXApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmVuZFZhbHVlID1cclxuICAgICAgICAgICAgICAgICh0aGlzLm5lZWRQYXJzZVZhbHVlcyA/IHRoaXMubWFwUmFuZ2VWYWx1ZXNGb3JTbGlkZXIuZ2V0KHBvc2l0aW9uSW5Vc2VyUmFuZ2UpIDogbmV3UG9zaXRpb24pID8/IDA7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRWYWx1ZSA9IHRoaXMuZW5kVmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUodGhpcy5lbmRWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0UHJvZ3Jlc3MoKTtcclxuICAgIH07XHJcblxyXG4gICAgcHJpdmF0ZSBvbk1vdXNlVXAgPSAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kcmFnZ2luZ1RodW1iID0gbnVsbDtcclxuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uVGh1bWJNb3ZlKTtcclxuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5vbk1vdXNlVXApO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZU1vdXNlRG93biA9IGZhbHNlO1xyXG4gICAgICAgIH0sIDE1MCk7XHJcbiAgICB9O1xyXG5cclxuICAgIHByaXZhdGUgaGFuZGxlUHJvZ3Jlc3NCYXJNb3ZlID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XHJcbiAgICAgICAgdGhpcy5tb3ZpbmdQcm9ncmVzc0JhciA9IHRydWU7XHJcbiAgICAgICAgY29uc3QgbmV3Q2VudGVyID0gdGhpcy5nZXRQZXJjZW50YWdlQnlFdmVudChldmVudCk7XHJcbiAgICAgICAgY29uc3Qgc3RhcnRQb3NpdGlvbkJlZm9yZUV2ZW50ID0gdGhpcy5wcm9ncmVzc0JhckV2ZW50UG9zaXRpb25TdGFydDtcclxuICAgICAgICBjb25zdCBzdGFydFZhbHVlQmVmb3JlRXZlbnQgPSB0aGlzLnN0YXJ0VmFsdWVCZWZvcmVQcm9ncmVzc0JhckV2ZW50O1xyXG4gICAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5yYW5nZUJldHdlZW5FbGVtZW50c0JlZm9yZVByb2dyZXNzQmFyRXZlbnQ7XHJcbiAgICAgICAgbGV0IHsgbmV3U3RhcnQsIG5ld0VuZCB9ID0gY2FsY3VsYXRlTmV3UmFuZ2UoXHJcbiAgICAgICAgICAgIHN0YXJ0VmFsdWVCZWZvcmVFdmVudCxcclxuICAgICAgICAgICAgc3RhcnRWYWx1ZUJlZm9yZUV2ZW50ICsgcmFuZ2UsXHJcbiAgICAgICAgICAgIHN0YXJ0UG9zaXRpb25CZWZvcmVFdmVudCxcclxuICAgICAgICAgICAgbmV3Q2VudGVyLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKG5ld1N0YXJ0IDwgdGhpcy5NSU5fUkFOR0VfVkFMVUUgfHwgbmV3RW5kID4gdGhpcy5NQVhfUkFOR0VfVkFMVUUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5uZWVkUGFyc2VWYWx1ZXMpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnRWYWx1ZUJlZm9yZUV2ZW50VXNlclJhbmdlID0gdGhpcy5nZXRWYWx1ZUZyb21NYXBCeVZhbHVlKHN0YXJ0VmFsdWVCZWZvcmVFdmVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0UG9zaXRpb25CZWZvcmVFdmVudFVzZXJSYW5nZSA9IHRoaXMuZ2V0VmFsdWVGcm9tTWFwQnlWYWx1ZShzdGFydFBvc2l0aW9uQmVmb3JlRXZlbnQpO1xyXG4gICAgICAgICAgICBjb25zdCBjZW50ZXJVc2VyUmFuZ2UgPSB0aGlzLmdldFZhbHVlRnJvbU1hcEJ5VmFsdWUobmV3Q2VudGVyKTtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWVSYW5nZSA9IHRoaXMudG90YWxSYW5nZUJlZm9yZVByb2dyZXNzQmFyRXZlbnQ7XHJcbiAgICAgICAgICAgIGxldCB7IG5ld1N0YXJ0LCBuZXdFbmQgfSA9IGNhbGN1bGF0ZU5ld1JhbmdlKFxyXG4gICAgICAgICAgICAgICAgc3RhcnRWYWx1ZUJlZm9yZUV2ZW50VXNlclJhbmdlLFxyXG4gICAgICAgICAgICAgICAgc3RhcnRWYWx1ZUJlZm9yZUV2ZW50VXNlclJhbmdlICsgdmFsdWVSYW5nZSxcclxuICAgICAgICAgICAgICAgIHN0YXJ0UG9zaXRpb25CZWZvcmVFdmVudFVzZXJSYW5nZSxcclxuICAgICAgICAgICAgICAgIGNlbnRlclVzZXJSYW5nZSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKG5ld1N0YXJ0IDwgdGhpcy5taW4gfHwgbmV3RW5kID4gdGhpcy5tYXgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0VmFsdWUgPSB0aGlzLm1hcFJhbmdlVmFsdWVzRm9yU2xpZGVyLmdldChuZXdTdGFydCkgPz8gMDtcclxuICAgICAgICAgICAgdGhpcy5lbmRWYWx1ZSA9IHRoaXMubWFwUmFuZ2VWYWx1ZXNGb3JTbGlkZXIuZ2V0KG5ld0VuZCkgPz8gMDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0VmFsdWUgPSBuZXdTdGFydDtcclxuICAgICAgICAgICAgdGhpcy5lbmRWYWx1ZSA9IG5ld0VuZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRWYWx1ZShbdGhpcy5zdGFydFZhbHVlLCB0aGlzLmVuZFZhbHVlXSk7XHJcbiAgICAgICAgdGhpcy5zZXRQcm9ncmVzcygpO1xyXG4gICAgfTtcclxuXHJcbiAgICBwcml2YXRlIGhhbmRsZVByb2dyZXNzQmFyTW92ZUVuZCA9ICgpID0+IHtcclxuICAgICAgICB0aGlzLnByb2dyZXNzQmFyRXZlbnRQb3NpdGlvblN0YXJ0ID0gLTE7XHJcbiAgICAgICAgdGhpcy5zdGFydFZhbHVlQmVmb3JlUHJvZ3Jlc3NCYXJFdmVudCA9IC0xO1xyXG4gICAgICAgIHRoaXMucmFuZ2VCZXR3ZWVuRWxlbWVudHNCZWZvcmVQcm9ncmVzc0JhckV2ZW50ID0gLTE7XHJcbiAgICAgICAgdGhpcy50b3RhbFJhbmdlQmVmb3JlUHJvZ3Jlc3NCYXJFdmVudCA9IC0xO1xyXG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuaGFuZGxlUHJvZ3Jlc3NCYXJNb3ZlKTtcclxuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5oYW5kbGVQcm9ncmVzc0Jhck1vdmVFbmQpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm1vdmluZ1Byb2dyZXNzQmFyID0gZmFsc2U7XHJcbiAgICAgICAgfSwgMTUwKTtcclxuICAgIH07XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRQcm9ncmVzcygpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzTGVmdCA9IHRoaXMuc3RhcnRWYWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5wcm9ncmVzc1dpZHRoID0gYGNhbGMoJHt0aGlzLmVuZFZhbHVlIC0gdGhpcy5zdGFydFZhbHVlfSUgKyAxMHB4KWA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9ncmVzc0xlZnQgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzV2lkdGggPSBgY2FsYygke3RoaXMuZW5kVmFsdWV9JSArIDEwcHgpYDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgdGhlIHBlcmNlbnRhZ2Ugb2YgYSBtb3VzZSBldmVudCBmcm9tIHRoZSB0cmFjaydzIGxlZnQgZWRnZVxyXG4gICAgICogQHBhcmFtIG1vdXNlRXZlbnQgbW91c2UgZXZlbnRcclxuICAgICAqIEByZXR1cm5zIHBlcmNlbnRhZ2UgZnJvbSB0aGUgbGVmdCBlZGdlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0UGVyY2VudGFnZUJ5RXZlbnQobW91c2VFdmVudDogTW91c2VFdmVudCB8IFBvaW50ZXJFdmVudCk6IG51bWJlciB7XHJcbiAgICAgICAgY29uc3QgdHJhY2tSZWN0ID0gdGhpcy50cmFjay5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgIGxldCBuZXdMZWZ0ID0gTWF0aC5yb3VuZCgoKG1vdXNlRXZlbnQuY2xpZW50WCAtIHRyYWNrUmVjdC5sZWZ0KSAvIHRyYWNrUmVjdC53aWR0aCkgKiB0aGlzLk1BWF9SQU5HRV9WQUxVRSk7XHJcbiAgICAgICAgbmV3TGVmdCA9IE1hdGgubWF4KDAsIE1hdGgubWluKG5ld0xlZnQsIHRoaXMuTUFYX1JBTkdFX1ZBTFVFKSk7XHJcbiAgICAgICAgcmV0dXJuIG5ld0xlZnQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRWYWx1ZSh2YWx1ZTogbnVtYmVyIHwgW251bWJlciwgbnVtYmVyXSwgcGFyc2UgPSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMubmVlZFBhcnNlVmFsdWVzICYmIHBhcnNlKSB7XHJcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5tYXAoKHgpID0+IHRoaXMuZ2V0VmFsdWVGcm9tTWFwQnlWYWx1ZSh4KSkgYXMgW251bWJlciwgbnVtYmVyXTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5nZXRWYWx1ZUZyb21NYXBCeVZhbHVlKHZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHZhbHVlKTtcclxuICAgICAgICB0aGlzLndyaXRlVmFsdWUodGhpcy52YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcclxuICAgICAgICB0aGlzLm9uVG91Y2hlZCh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldFVzZXJSYW5nZU1hcFZhbHVlcygpIHtcclxuICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMubWluO1xyXG4gICAgICAgIGNvbnN0IGVuZCA9IHRoaXMubWF4O1xyXG4gICAgICAgIGlmIChzdGFydCA+IGVuZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01heCB2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBtaW4gdmFsdWUnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5tYXBSYW5nZVZhbHVlc0ZvclNsaWRlci5jbGVhcigpO1xyXG4gICAgICAgIGNvbnN0IHJhbmdlID0gZW5kIC0gc3RhcnQ7XHJcbiAgICAgICAgY29uc3QgZGVjaW1hbFBsYWNlcyA9IDI7XHJcbiAgICAgICAgY29uc3Qgc3RlcENvdW50ID0gTWF0aC5mbG9vcihyYW5nZSAvIHRoaXMuc3RlcCk7XHJcbiAgICAgICAgY29uc3QgdmFsdWVzOiBudW1iZXJbXSA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IHZhbHVlID0gc3RhcnQ7IHZhbHVlIDw9IGVuZDsgdmFsdWUgKz0gdGhpcy5zdGVwKSB7XHJcbiAgICAgICAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZhbHVlc1t2YWx1ZXMubGVuZ3RoIC0gMV0gIT09IGVuZCkge1xyXG4gICAgICAgICAgICB2YWx1ZXMucHVzaChlbmQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtYXBwZWRWYWx1ZXMgPSB2YWx1ZXMubWFwKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgbWFwcGVkID0gKCh2YWx1ZSAtIHN0YXJ0KSAvIHJhbmdlKSAqIHRoaXMuTUFYX1JBTkdFX1ZBTFVFO1xyXG4gICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChtYXBwZWQudG9GaXhlZChkZWNpbWFsUGxhY2VzKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgbWFwcGVkVmFsdWVzWzBdID0gMDtcclxuICAgICAgICBtYXBwZWRWYWx1ZXNbbWFwcGVkVmFsdWVzLmxlbmd0aCAtIDFdID0gdGhpcy5NQVhfUkFOR0VfVkFMVUU7XHJcbiAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLk1BWF9SQU5HRV9WQUxVRSAtIG1hcHBlZFZhbHVlc1ttYXBwZWRWYWx1ZXMubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgY29uc3QgZXJyb3JQZXJTdGVwID0gZXJyb3IgLyBzdGVwQ291bnQ7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBtYXBwZWRWYWx1ZXMubGVuZ3RoIC0gMTsgaSsrKSB7XHJcbiAgICAgICAgICAgIG1hcHBlZFZhbHVlc1tpXSArPSBlcnJvclBlclN0ZXA7XHJcbiAgICAgICAgICAgIG1hcHBlZFZhbHVlc1tpXSA9IHBhcnNlRmxvYXQobWFwcGVkVmFsdWVzW2ldLnRvRml4ZWQoZGVjaW1hbFBsYWNlcykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YWx1ZXMuZm9yRWFjaCgodmFsdWUsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubWFwUmFuZ2VWYWx1ZXNGb3JTbGlkZXIuc2V0KHZhbHVlLCBtYXBwZWRWYWx1ZXNbaW5kZXhdKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHVzZXIgdmFsdWUgZnJvbSB0aGUgZ2l2ZW4gc2xpZGVyIHZhbHVlIGJ5IHVzaW5nIHRoZSBtYXAgb2YgcmFuZ2UgdmFsdWVzLlxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIElmIHRoZSBtYXAgaXMgMDogeyAwIH0sIDE6IHsgMTAgfSwgMjogeyAzMCB9LCAzOiB7IDQwIH0sIDQ6IHsgNTAgfVxyXG4gICAgICogYW5kIHRoZSBzbGlkZXJWYWx1ZSBpcyAzNywgdGhlIGZ1bmN0aW9uIHJldHVybnMgM1xyXG4gICAgICogb3IgdGhlIHNsaWRlciB2YWx1ZSBpcyA0MCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgNFxyXG4gICAgICogQHBhcmFtIHNsaWRlclZhbHVlIHRoZSB2YWx1ZSBvZiB0aGUgc2xpZGVyICh2YWx1ZXMgb25seSBiZXR3ZWVuIHJhbmdlIE1JTiBhbmQgTUFYKVxyXG4gICAgICogQHJldHVybnMgdGhlIHVzZXIgdmFsdWUgZnJvbSB0aGUgZ2l2ZW4gc2xpZGVyIHZhbHVlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0VmFsdWVGcm9tTWFwQnlWYWx1ZShzbGlkZXJWYWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgY29uc3QgbWFwVG9BcnJheSA9IEFycmF5LmZyb20odGhpcy5tYXBSYW5nZVZhbHVlc0ZvclNsaWRlcikubWFwKChbdmFsdWUsIG1hcHBlZF0pID0+ICh7IHZhbHVlLCBtYXBwZWQgfSkpO1xyXG4gICAgICAgIGNvbnN0IGV4YWN0VmFsdWUgPSBtYXBUb0FycmF5LmZpbmQoKHgpID0+IHgubWFwcGVkID09IHNsaWRlclZhbHVlKTtcclxuICAgICAgICBjb25zdCBjbG9zZXN0ID0gbWFwVG9BcnJheS5yZWR1Y2UoKHByZXYsIGN1cnIpID0+XHJcbiAgICAgICAgICAgIE1hdGguYWJzKGN1cnIubWFwcGVkIC0gc2xpZGVyVmFsdWUpIDwgTWF0aC5hYnMocHJldi5tYXBwZWQgLSBzbGlkZXJWYWx1ZSkgPyBjdXJyIDogcHJldixcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBleGFjdFZhbHVlID8gZXhhY3RWYWx1ZS52YWx1ZSA6IGNsb3Nlc3QudmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIGtleSBmcm9tIHRoZSBtYXAgdGhhdCBpcyBjbG9zZXN0IHRvIHRoZSBnaXZlbiBzbGlkZXIgdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0gdXNlclZhbHVlIC0gVGhlIHZhbHVlIHRvIGZpbmQgdGhlIGNsb3Nlc3Qga2V5IGZvci4gKHZhbHVlcyBvbmx5IGJldHdlZW4gMCAtIDEwMClcclxuICAgICAqIEByZXR1cm5zIFRoZSBrZXkgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgY2xvc2VzdCBtYXBwZWQgdmFsdWUuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0Q2xvc2VzdFZhbHVlRnJvbU1hcFNsaWRlcih1c2VyVmFsdWU6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICAgICAgY29uc3QgbWFwVG9BcnJheSA9IEFycmF5LmZyb20odGhpcy5tYXBSYW5nZVZhbHVlc0ZvclNsaWRlcikubWFwKChbdmFsdWUsIG1hcHBlZF0pID0+ICh7IHZhbHVlLCBtYXBwZWQgfSkpO1xyXG4gICAgICAgIGlmICh1c2VyVmFsdWUgPj0gdGhpcy5tYXgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG1hcFRvQXJyYXlbbWFwVG9BcnJheS5sZW5ndGggLSAxXS5tYXBwZWQ7XHJcbiAgICAgICAgfSBlbHNlIGlmICh1c2VyVmFsdWUgPD0gdGhpcy5taW4pIHtcclxuICAgICAgICAgICAgcmV0dXJuIG1hcFRvQXJyYXlbMF0ubWFwcGVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBleGFjdFZhbHVlID0gbWFwVG9BcnJheS5maW5kKCh4KSA9PiB4LnZhbHVlID09IHVzZXJWYWx1ZSk7XHJcbiAgICAgICAgY29uc3QgY2xvc2VzdFZhbHVlID0gbWFwVG9BcnJheS5yZWR1Y2UoKHByZXYsIGN1cnIpID0+XHJcbiAgICAgICAgICAgIE1hdGguYWJzKGN1cnIudmFsdWUgLSB1c2VyVmFsdWUpIDwgTWF0aC5hYnMocHJldi52YWx1ZSAtIHVzZXJWYWx1ZSkgPyBjdXJyIDogcHJldixcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSBleGFjdFZhbHVlIHx8IGNsb3Nlc3RWYWx1ZTtcclxuICAgICAgICBjb25zdCBpc0ZpcnN0SXRlbSA9IG1hcFRvQXJyYXlbMF0gPT09IGl0ZW07XHJcbiAgICAgICAgY29uc3QgaXNMYXN0SXRlbSA9IG1hcFRvQXJyYXlbbWFwVG9BcnJheS5sZW5ndGggLSAxXSA9PT0gaXRlbTtcclxuICAgICAgICBpZiAoaXNGaXJzdEl0ZW0gJiYgdXNlclZhbHVlID4gdGhpcy5taW4pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGdldE1pZHBvaW50KGl0ZW0ubWFwcGVkLCBtYXBUb0FycmF5WzFdLm1hcHBlZCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpc0xhc3RJdGVtICYmIHVzZXJWYWx1ZSA8IHRoaXMubWF4KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBnZXRNaWRwb2ludChpdGVtLm1hcHBlZCwgbWFwVG9BcnJheVttYXBUb0FycmF5Lmxlbmd0aCAtIDJdLm1hcHBlZCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW0ubWFwcGVkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGhhbmRsZUFycm93S2V5TGVmdCgpIHtcclxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9pbmNyZW1lbnRPckRlY3JlbWVudFN0YXJ0QW5kRW5kVmFsdWUoZmFsc2UpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2luY3JlbWVudE9yRGVjcmVtZW50RW5kVmFsdWUoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldFByb2dyZXNzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYW5kbGVBcnJvd0tleVJpZ2h0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2luY3JlbWVudE9yRGVjcmVtZW50U3RhcnRBbmRFbmRWYWx1ZSh0cnVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9pbmNyZW1lbnRPckRlY3JlbWVudEVuZFZhbHVlKHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldFByb2dyZXNzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfaW5jcmVtZW50T3JEZWNyZW1lbnRTdGFydEFuZEVuZFZhbHVlKGluY3JlbWVudDogYm9vbGVhbikge1xyXG4gICAgICAgIGxldCBbc3RhcnQsIGVuZF0gPSB0aGlzLnZhbHVlIGFzIFtudW1iZXIsIG51bWJlcl07XHJcbiAgICAgICAgY29uc3QgZGlmZmVyZW5jZSA9IGdldERpZmZlcmVuY2UoZW5kLCBzdGFydCk7XHJcbiAgICAgICAgaWYgKGluY3JlbWVudCkge1xyXG4gICAgICAgICAgICBzdGFydCArPSB0aGlzLnN0ZXA7XHJcbiAgICAgICAgICAgIGVuZCArPSB0aGlzLnN0ZXA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3RhcnQgLT0gdGhpcy5zdGVwO1xyXG4gICAgICAgICAgICBlbmQgLT0gdGhpcy5zdGVwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzdGFydExlc3NUaGFuTWluID0gc3RhcnQgPCB0aGlzLm1pbjtcclxuICAgICAgICBjb25zdCBlbmRHcmVhdGVyVGhhbk1heCA9IGVuZCA+IHRoaXMubWF4O1xyXG4gICAgICAgIGlmIChzdGFydExlc3NUaGFuTWluIHx8IGVuZEdyZWF0ZXJUaGFuTWF4KSB7XHJcbiAgICAgICAgICAgIGlmIChzdGFydExlc3NUaGFuTWluKSB7XHJcbiAgICAgICAgICAgICAgICBzdGFydCA9IHRoaXMubWluO1xyXG4gICAgICAgICAgICAgICAgZW5kID0gc3RhcnQgKyBkaWZmZXJlbmNlO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVuZEdyZWF0ZXJUaGFuTWF4KSB7XHJcbiAgICAgICAgICAgICAgICBlbmQgPSB0aGlzLm1heDtcclxuICAgICAgICAgICAgICAgIHN0YXJ0ID0gZW5kIC0gZGlmZmVyZW5jZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc3RhcnQgPCB0aGlzLm1pbiB8fCBlbmQgPiB0aGlzLm1heCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0VmFsdWUoW3N0YXJ0LCBlbmRdLCBmYWxzZSk7XHJcbiAgICAgICAgaWYgKHRoaXMubmVlZFBhcnNlVmFsdWVzKSB7XHJcbiAgICAgICAgICAgIHN0YXJ0ID0gdGhpcy5nZXRDbG9zZXN0VmFsdWVGcm9tTWFwU2xpZGVyKHN0YXJ0KTtcclxuICAgICAgICAgICAgZW5kID0gdGhpcy5nZXRDbG9zZXN0VmFsdWVGcm9tTWFwU2xpZGVyKGVuZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc3RhcnRWYWx1ZSA9IHN0YXJ0O1xyXG4gICAgICAgIHRoaXMuZW5kVmFsdWUgPSBlbmQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfaW5jcmVtZW50T3JEZWNyZW1lbnRFbmRWYWx1ZShpbmNyZW1lbnQ6IGJvb2xlYW4pIHtcclxuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnZhbHVlIGFzIG51bWJlcjtcclxuICAgICAgICBpZiAoaW5jcmVtZW50KSB7XHJcbiAgICAgICAgICAgIHZhbHVlICs9IHRoaXMuc3RlcDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YWx1ZSAtPSB0aGlzLnN0ZXA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBfbmV3RW5kVmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICBpZiAodGhpcy5uZWVkUGFyc2VWYWx1ZXMpIHtcclxuICAgICAgICAgICAgX25ld0VuZFZhbHVlID0gdGhpcy5nZXRDbG9zZXN0VmFsdWVGcm9tTWFwU2xpZGVyKF9uZXdFbmRWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChfbmV3RW5kVmFsdWUgPCB0aGlzLk1JTl9SQU5HRV9WQUxVRSB8fCBfbmV3RW5kVmFsdWUgPiB0aGlzLk1BWF9SQU5HRV9WQUxVRSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZW5kVmFsdWUgPSBfbmV3RW5kVmFsdWU7XHJcbiAgICAgICAgdGhpcy5zdGFydFZhbHVlID0gdGhpcy5lbmRWYWx1ZTtcclxuICAgICAgICB0aGlzLnNldFZhbHVlKF9uZXdFbmRWYWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXQgbmVlZFBhcnNlVmFsdWVzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1heCAhPT0gdGhpcy5NQVhfUkFOR0VfVkFMVUUgfHwgdGhpcy5taW4gIT09IHRoaXMuTUlOX1JBTkdFX1ZBTFVFO1xyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyBhIG5ldyByYW5nZSBiYXNlZCBvbiB0aGUgb2xkIHJhbmdlIGFuZCB0aGUgcG9zaXRpb25zIGNsaWNrZWQgYW5kIGZpbmFsaXplZC5cclxuICpcclxuICogQHBhcmFtIG9sZFN0YXJ0IC0gVGhlIHN0YXJ0aW5nIHZhbHVlIG9mIHRoZSBvbGQgcmFuZ2UuXHJcbiAqIEBwYXJhbSBvbGRFbmQgLSBUaGUgZW5kaW5nIHZhbHVlIG9mIHRoZSBvbGQgcmFuZ2UuXHJcbiAqIEBwYXJhbSBjbGlja2VkUG9zaXRpb24gLSBUaGUgcG9zaXRpb24gd2hlcmUgdGhlIGNsaWNrIG9jY3VycmVkLlxyXG4gKiBAcGFyYW0gZmluYWxQb3NpdGlvbiAtIFRoZSBwb3NpdGlvbiB3aGVyZSB0aGUgcmFuZ2Ugc2hvdWxkIGVuZC5cclxuICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIG5ldyBzdGFydCBhbmQgZW5kIHZhbHVlcyBvZiB0aGUgcmFuZ2UuXHJcbiAqL1xyXG5jb25zdCBjYWxjdWxhdGVOZXdSYW5nZSA9IChvbGRTdGFydDogbnVtYmVyLCBvbGRFbmQ6IG51bWJlciwgY2xpY2tlZFBvc2l0aW9uOiBudW1iZXIsIGZpbmFsUG9zaXRpb246IG51bWJlcikgPT4ge1xyXG4gICAgY29uc3QgcmFuZ2UgPSBvbGRFbmQgLSBvbGRTdGFydDtcclxuICAgIGNvbnN0IG5ld1N0YXJ0ID0gZmluYWxQb3NpdGlvbiAtIChjbGlja2VkUG9zaXRpb24gLSBvbGRTdGFydCk7XHJcbiAgICBjb25zdCBuZXdFbmQgPSBuZXdTdGFydCArIHJhbmdlO1xyXG4gICAgcmV0dXJuIHsgbmV3U3RhcnQsIG5ld0VuZCB9O1xyXG59O1xyXG5cclxuY29uc3QgaXNJblJhbmdlID0gKHZhbHVlOiBudW1iZXIsIHJhbmdlU3RhcnQ6IG51bWJlciwgcmFuZ2VFbmQ6IG51bWJlcik6IGJvb2xlYW4gPT4ge1xyXG4gICAgY29uc3QgW21pbiwgbWF4XSA9IHJhbmdlU3RhcnQgPCByYW5nZUVuZCA/IFtyYW5nZVN0YXJ0LCByYW5nZUVuZF0gOiBbcmFuZ2VFbmQsIHJhbmdlU3RhcnRdO1xyXG4gICAgcmV0dXJuIHZhbHVlID49IG1pbiAmJiB2YWx1ZSA8PSBtYXg7XHJcbn07XHJcblxyXG5jb25zdCBnZXRNaWRwb2ludCA9IChzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcikgPT4ge1xyXG4gICAgY29uc3QgbWlkcG9pbnQgPSAoc3RhcnQgKyBlbmQpIC8gMjtcclxuICAgIHJldHVybiBwYXJzZUZsb2F0KG1pZHBvaW50LnRvRml4ZWQoMikpO1xyXG59O1xyXG5jb25zdCBnZXREaWZmZXJlbmNlID0gKGVuZDogbnVtYmVyLCBzdGFydDogbnVtYmVyKSA9PiB7XHJcbiAgICByZXR1cm4gTWF0aC5hYnMoZW5kIC0gc3RhcnQpO1xyXG59O1xyXG4iLCI8ZGl2XHJcbiAgICBjbGFzcz1cInNsaWRlci1jb250YWluZXJcIlxyXG4gICAgW25nQ2xhc3NdPVwieyAnc2xpZGVyLWNvbnRhaW5lci0tZGlzYWJsZWQnOiBkaXNhYmxlZCB9XCJcclxuICAgIFt0YWJpbmRleF09XCJkaXNhYmxlZCA/ICctMScgOiB0YWJpbmRleFwiXHJcbiAgICAoY2xpY2spPVwib25UcmFja0NsaWNrKCRldmVudClcIlxyXG4gICAgKGZvY3VzKT1cIm9uRm9jdXNJbigpXCJcclxuICAgIChibHVyKT1cIm9uQmx1cigpXCJcclxuPlxyXG4gICAgPGRpdlxyXG4gICAgICAgICN0cmFja1xyXG4gICAgICAgIGNsYXNzPVwic2xpZGVyLXRyYWNrXCJcclxuICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICdzbGlkZXItdHJhY2stLWhpZGRlbi10aHVtYic6IGhpZGRlblRodW1iLFxyXG4gICAgICAgICAgICAnc2xpZGVyLXRyYWNrLS1tb3ZpbmctbXVsdGlwbGUtdGh1bWJzJzogbW92aW5nUHJvZ3Jlc3NCYXIsXHJcbiAgICAgICAgfVwiXHJcbiAgICA+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cInNsaWRlci1wcm9ncmVzc1wiXHJcbiAgICAgICAgICAgIChtb3VzZWRvd24pPVwib25Qcm9ncmVzc01vdXNlRG93bigkZXZlbnQpXCJcclxuICAgICAgICAgICAgW3N0eWxlLmxlZnQuJV09XCJwcm9ncmVzc0xlZnRcIlxyXG4gICAgICAgICAgICBbc3R5bGUud2lkdGhdPVwicHJvZ3Jlc3NXaWR0aFwiXHJcbiAgICAgICAgPjwvZGl2PlxyXG4gICAgICAgIEBpZiAobXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzbGlkZXItdGh1bWJcIlxyXG4gICAgICAgICAgICAgICAgW3NUb29sdGlwXT1cInRvb2x0aXBTdGFydFRleHRcIlxyXG4gICAgICAgICAgICAgICAgW3Nob3dEZWxheV09XCIwXCJcclxuICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwib25Nb3VzZURvd24oJGV2ZW50LCAnc3RhcnQnKVwiXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUubGVmdC4lXT1cInN0YXJ0VmFsdWVcIlxyXG4gICAgICAgICAgICA+PC9kaXY+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgICAgW3NUb29sdGlwXT1cInRvb2x0aXBFbmRUZXh0XCJcclxuICAgICAgICAgICAgY2xhc3M9XCJzbGlkZXItdGh1bWJcIlxyXG4gICAgICAgICAgICBbc2hvd0RlbGF5XT1cIjBcIlxyXG4gICAgICAgICAgICAobW91c2Vkb3duKT1cIm9uTW91c2VEb3duKCRldmVudCwgJ2VuZCcpXCJcclxuICAgICAgICAgICAgW3N0eWxlLmxlZnQuJV09XCJlbmRWYWx1ZVwiXHJcbiAgICAgICAgPjwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyXCI+XHJcbiAgICAgICAgPHNwYW4+e3sgbWluVmFsdWVMYWJlbCB8fCBtaW4gfX08L3NwYW4+XHJcbiAgICAgICAgPHNwYW4+e3sgbWF4VmFsdWVMYWJlbCB8fCBtYXggfX08L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|