@bnsights/bbsf-controls 1.0.110 → 1.0.112
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/README.md +8 -0
- package/esm2022/lib/Shared/Components/app-base-component.mjs +7 -7
- package/esm2022/lib/Shared/Enums/StartView.mjs +1 -1
- package/esm2022/lib/Shared/Enums/map-enums.mjs +7 -0
- package/esm2022/lib/Shared/Models/AutocompleteOptions.mjs +9 -9
- package/esm2022/lib/Shared/Models/CalendarOptions.mjs +7 -7
- package/esm2022/lib/Shared/Models/CheckBoxOptions.mjs +3 -3
- package/esm2022/lib/Shared/Models/ConfirmationModalOptions.mjs +16 -16
- package/esm2022/lib/Shared/Models/ControlOptionsBase.mjs +5 -5
- package/esm2022/lib/Shared/Models/DatePickerOptions.mjs +24 -0
- package/esm2022/lib/Shared/Models/DropdownOptions.mjs +6 -6
- package/esm2022/lib/Shared/Models/EnglishArabicDTO.mjs +3 -3
- package/esm2022/lib/Shared/Models/FileUploadModel.mjs +1 -1
- package/esm2022/lib/Shared/Models/FileUploadOptions.mjs +3 -3
- package/esm2022/lib/Shared/Models/FormOptions.mjs +13 -13
- package/esm2022/lib/Shared/Models/HtmlEditorOptions.mjs +3 -3
- package/esm2022/lib/Shared/Models/ImageUploadOptions.mjs +4 -4
- package/esm2022/lib/Shared/Models/MapAutoCompleteOptions.mjs +5 -1
- package/esm2022/lib/Shared/Models/MapAutocompleteDTO.mjs +2 -2
- package/esm2022/lib/Shared/Models/MultiLingualHtmlEditorOptions.mjs +2 -2
- package/esm2022/lib/Shared/Models/MultiLingualTextAreaOptions.mjs +2 -2
- package/esm2022/lib/Shared/Models/{MultilingualTextBoxOptions.mjs → MultiLingualTextBoxOptions.mjs} +5 -5
- package/esm2022/lib/Shared/Models/MultilingualControlOptionsBase.mjs +6 -6
- package/esm2022/lib/Shared/Models/MultipleFileUploadModel.mjs +5 -5
- package/esm2022/lib/Shared/Models/PagingOptions.mjs +22 -22
- package/esm2022/lib/Shared/Models/PhoneOptions.mjs +4 -4
- package/esm2022/lib/Shared/Models/ProfileImageUploadOptions.mjs +3 -3
- package/esm2022/lib/Shared/Models/ProfilePictureDTO.mjs +1 -1
- package/esm2022/lib/Shared/Models/RadioButtonItem.mjs +1 -1
- package/esm2022/lib/Shared/Models/RadioButtonOptions.mjs +1 -1
- package/esm2022/lib/Shared/Models/RangeNumber.mjs +1 -1
- package/esm2022/lib/Shared/Models/Recaptcha.mjs +2 -2
- package/esm2022/lib/Shared/Models/RecaptchaOptions.mjs +9 -9
- package/esm2022/lib/Shared/Models/RepeaterField.mjs +1 -1
- package/esm2022/lib/Shared/Models/RepeaterOptions.mjs +9 -9
- package/esm2022/lib/Shared/Models/TagsInputDTO.mjs +1 -1
- package/esm2022/lib/Shared/Models/TagsInputOptions.mjs +19 -19
- package/esm2022/lib/Shared/Models/TextAreaOptions.mjs +1 -1
- package/esm2022/lib/Shared/Models/TextBoxOptions.mjs +9 -9
- package/esm2022/lib/Shared/Models/{ToggleslideOptions.mjs → ToggleSlideOptions.mjs} +2 -2
- package/esm2022/lib/Shared/Models/filter-options.mjs +5 -5
- package/esm2022/lib/Shared/Models/page-header-options.mjs +32 -32
- package/esm2022/lib/Shared/services/ControlUtility.mjs +37 -37
- package/esm2022/lib/Shared/services/GlobalSettings.service.mjs +9 -9
- package/esm2022/lib/controls/AutocompleteTextBox/AutocompleteTextBox.component.mjs +81 -81
- package/esm2022/lib/controls/Calendar/Calendar.component.mjs +40 -40
- package/esm2022/lib/controls/CheckBox/CheckBox.component.mjs +35 -35
- package/esm2022/lib/controls/ConfirmationModal/ConfirmationModal.component.mjs +30 -30
- package/esm2022/lib/controls/DateTimePicker/DateTimePicker.component.mjs +90 -97
- package/esm2022/lib/controls/DropdownList/DropdownList.component.mjs +74 -74
- package/esm2022/lib/controls/FileUplaod/FileUplaod.component.mjs +155 -155
- package/esm2022/lib/controls/Form/Form.component.mjs +24 -24
- package/esm2022/lib/controls/HtmlEditor/HtmlEditor.component.mjs +55 -55
- package/esm2022/lib/controls/ImageUpload/ImageUpload.component.mjs +113 -113
- package/esm2022/lib/controls/MapAutoComplete/MapAutoComplete.component.mjs +322 -246
- package/esm2022/lib/controls/MultiLingualHtmlEditor/MultiLingualHtmlEditor.component.mjs +163 -163
- package/esm2022/lib/controls/MultiLingualTextArea/MultiLingualTextArea.component.mjs +193 -193
- package/esm2022/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.mjs +210 -210
- package/esm2022/lib/controls/Paging/Paging.component.mjs +85 -85
- package/esm2022/lib/controls/Phone/Phone.component.mjs +42 -42
- package/esm2022/lib/controls/ProfileImageUploader/ProfileImageUploader.component.mjs +112 -112
- package/esm2022/lib/controls/RadioButton/RadioButton.component.mjs +38 -38
- package/esm2022/lib/controls/Recaptcha/Recaptcha.component.mjs +46 -46
- package/esm2022/lib/controls/Repeater/repeater/repeater.component.mjs +12 -12
- package/esm2022/lib/controls/Repeater/repeater-field-builder/repeater-field-builder.component.mjs +556 -556
- package/esm2022/lib/controls/Repeater/repeater-table/repeater-table.component.mjs +15 -15
- package/esm2022/lib/controls/TagsInput/TagsInput.component.mjs +100 -100
- package/esm2022/lib/controls/TextArea/TextArea.component.mjs +71 -71
- package/esm2022/lib/controls/TextBox/TextBox.component.mjs +116 -116
- package/esm2022/lib/controls/Toggleslide/Toggleslide.component.mjs +90 -0
- package/esm2022/lib/controls/bbsf-controls.module.mjs +13 -24
- package/esm2022/lib/controls/page-header-component/page-header-component.component.mjs +4 -4
- package/esm2022/public-api.mjs +8 -10
- package/fesm2022/bnsights-bbsf-controls.mjs +3060 -2989
- package/fesm2022/bnsights-bbsf-controls.mjs.map +1 -1
- package/lib/Shared/Enums/map-enums.d.ts +5 -0
- package/lib/Shared/Models/AutocompleteOptions.d.ts +20 -20
- package/lib/Shared/Models/CalendarOptions.d.ts +10 -10
- package/lib/Shared/Models/CheckBoxOptions.d.ts +2 -2
- package/lib/Shared/Models/ConfirmationModalOptions.d.ts +14 -14
- package/lib/Shared/Models/ControlOptionsBase.d.ts +17 -17
- package/lib/Shared/Models/{datePickerOptions.d.ts → DatePickerOptions.d.ts} +12 -13
- package/lib/Shared/Models/DropdownOptions.d.ts +15 -15
- package/lib/Shared/Models/EnglishArabicDTO.d.ts +2 -2
- package/lib/Shared/Models/FileUploadModel.d.ts +1 -1
- package/lib/Shared/Models/FileUploadOptions.d.ts +8 -8
- package/lib/Shared/Models/FormOptions.d.ts +11 -11
- package/lib/Shared/Models/HtmlEditorOptions.d.ts +11 -11
- package/lib/Shared/Models/ImageUploadOptions.d.ts +9 -9
- package/lib/Shared/Models/MapAutoCompleteOptions.d.ts +2 -1
- package/lib/Shared/Models/MapAutocompleteDTO.d.ts +5 -5
- package/lib/Shared/Models/MultiLingualHtmlEditorOptions.d.ts +7 -7
- package/lib/Shared/Models/MultiLingualTextAreaOptions.d.ts +5 -5
- package/lib/Shared/Models/{MultilingualTextBoxOptions.d.ts → MultiLingualTextBoxOptions.d.ts} +6 -6
- package/lib/Shared/Models/MultilingualControlOptionsBase.d.ts +34 -34
- package/lib/Shared/Models/MultipleFileUploadModel.d.ts +4 -4
- package/lib/Shared/Models/PagingOptions.d.ts +25 -25
- package/lib/Shared/Models/PhoneOptions.d.ts +9 -9
- package/lib/Shared/Models/ProfileImageUploadOptions.d.ts +10 -10
- package/lib/Shared/Models/ProfilePictureDTO.d.ts +9 -9
- package/lib/Shared/Models/RadioButtonItem.d.ts +2 -2
- package/lib/Shared/Models/RadioButtonOptions.d.ts +2 -2
- package/lib/Shared/Models/RangeNumber.d.ts +2 -2
- package/lib/Shared/Models/Recaptcha.d.ts +4 -4
- package/lib/Shared/Models/RecaptchaOptions.d.ts +10 -10
- package/lib/Shared/Models/RepeaterField.d.ts +4 -4
- package/lib/Shared/Models/RepeaterOptions.d.ts +16 -16
- package/lib/Shared/Models/TagsInputDTO.d.ts +4 -4
- package/lib/Shared/Models/TagsInputOptions.d.ts +29 -29
- package/lib/Shared/Models/TextAreaOptions.d.ts +11 -11
- package/lib/Shared/Models/TextBoxOptions.d.ts +18 -18
- package/lib/Shared/Models/{ToggleslideOptions.d.ts → ToggleSlideOptions.d.ts} +3 -3
- package/lib/Shared/Models/filter-options.d.ts +4 -4
- package/lib/Shared/Models/page-header-options.d.ts +43 -43
- package/lib/Shared/services/ControlUtility.d.ts +8 -8
- package/lib/Shared/services/GlobalSettings.service.d.ts +8 -8
- package/lib/controls/AutocompleteTextBox/AutocompleteTextBox.component.d.ts +11 -11
- package/lib/controls/Calendar/Calendar.component.d.ts +7 -7
- package/lib/controls/CheckBox/CheckBox.component.d.ts +10 -10
- package/lib/controls/DateTimePicker/DateTimePicker.component.d.ts +20 -24
- package/lib/controls/DropdownList/DropdownList.component.d.ts +13 -13
- package/lib/controls/FileUplaod/FileUplaod.component.d.ts +11 -11
- package/lib/controls/Form/Form.component.d.ts +2 -2
- package/lib/controls/HtmlEditor/HtmlEditor.component.d.ts +12 -12
- package/lib/controls/ImageUpload/ImageUpload.component.d.ts +16 -16
- package/lib/controls/MapAutoComplete/MapAutoComplete.component.d.ts +31 -13
- package/lib/controls/MultiLingualHtmlEditor/MultiLingualHtmlEditor.component.d.ts +25 -25
- package/lib/controls/MultiLingualTextArea/MultiLingualTextArea.component.d.ts +24 -24
- package/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.d.ts +32 -32
- package/lib/controls/Paging/Paging.component.d.ts +9 -9
- package/lib/controls/Phone/Phone.component.d.ts +12 -12
- package/lib/controls/ProfileImageUploader/ProfileImageUploader.component.d.ts +18 -18
- package/lib/controls/RadioButton/RadioButton.component.d.ts +11 -11
- package/lib/controls/Recaptcha/Recaptcha.component.d.ts +10 -10
- package/lib/controls/Repeater/repeater-field-builder/repeater-field-builder.component.d.ts +5 -5
- package/lib/controls/Repeater/repeater-table/repeater-table.component.d.ts +1 -1
- package/lib/controls/TagsInput/TagsInput.component.d.ts +17 -17
- package/lib/controls/TextArea/TextArea.component.d.ts +14 -14
- package/lib/controls/TextBox/TextBox.component.d.ts +25 -25
- package/lib/controls/Toggleslide/{toggleslide.component.d.ts → Toggleslide.component.d.ts} +10 -10
- package/lib/controls/bbsf-controls.module.d.ts +4 -2
- package/package.json +7 -2
- package/public-api.d.ts +5 -4
- package/src/lib/assets/Style-rtl.scss +46 -28
- package/src/lib/assets/images/marker-pin.svg +4 -0
- package/src/lib/assets/sass/base.scss +73 -21
- package/esm2022/lib/Shared/Models/datePickerOptions.mjs +0 -23
- package/esm2022/lib/controls/Toggleslide/toggleslide.component.mjs +0 -90
|
@@ -12,15 +12,15 @@ export class RepeaterTableComponent {
|
|
|
12
12
|
}
|
|
13
13
|
ngOnInit() {
|
|
14
14
|
this.repeaterGroup = new FormGroup({});
|
|
15
|
-
this.group.addControl(this.options.
|
|
16
|
-
if (this.options.
|
|
17
|
-
this.originalItems = this.options.
|
|
18
|
-
for (let index = 0; index < this.options.
|
|
15
|
+
this.group.addControl(this.options.name, this.repeaterGroup);
|
|
16
|
+
if (this.options.repeaterValue.length > 0) {
|
|
17
|
+
this.originalItems = this.options.repeaterValue;
|
|
18
|
+
for (let index = 0; index < this.options.repeaterValue.length; index++) {
|
|
19
19
|
this.items.push(index);
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
22
|
else
|
|
23
|
-
for (let index = 0; index < this.options.
|
|
23
|
+
for (let index = 0; index < this.options.minRequiredItems; index++) {
|
|
24
24
|
this.items.push(index);
|
|
25
25
|
}
|
|
26
26
|
this.repeaterGroup.valueChanges.subscribe((res) => {
|
|
@@ -31,7 +31,7 @@ export class RepeaterTableComponent {
|
|
|
31
31
|
if (Object.prototype.hasOwnProperty.call(this.repeaterGroup.controls, key)) {
|
|
32
32
|
const keySplitArr = key.split('.');
|
|
33
33
|
let item = {
|
|
34
|
-
[keySplitArr[1]]: { [keySplitArr[0]]: this.group.controls[this.options.
|
|
34
|
+
[keySplitArr[1]]: { [keySplitArr[0]]: this.group.controls[this.options.name].value[key] }
|
|
35
35
|
};
|
|
36
36
|
addItems.push(item);
|
|
37
37
|
if (!rowNumber.includes(keySplitArr[1]))
|
|
@@ -58,20 +58,20 @@ export class RepeaterTableComponent {
|
|
|
58
58
|
}
|
|
59
59
|
result.push(addObject);
|
|
60
60
|
}
|
|
61
|
-
this.options.
|
|
61
|
+
this.options.repeaterValue = result;
|
|
62
62
|
});
|
|
63
63
|
}
|
|
64
|
-
deleteItem(
|
|
65
|
-
if (this.items.length == this.options.
|
|
64
|
+
deleteItem(index) {
|
|
65
|
+
if (this.items.length == this.options.minRequiredItems && this.options.isRequired)
|
|
66
66
|
return;
|
|
67
67
|
let deletedControls = [];
|
|
68
|
-
let controlNames = this.options.
|
|
68
|
+
let controlNames = this.options.repeaterStructure.map(e => e.controlOptions.Name);
|
|
69
69
|
for (const key in this.repeaterGroup.controls) {
|
|
70
70
|
if (Object.prototype.hasOwnProperty.call(this.repeaterGroup.controls, key)) {
|
|
71
71
|
for (let index = 0; index < controlNames.length; index++) {
|
|
72
72
|
const element = controlNames[index];
|
|
73
73
|
const keySplitArr = key.split('.');
|
|
74
|
-
if (keySplitArr[0] + keySplitArr[1] == `${element}${
|
|
74
|
+
if (keySplitArr[0] + keySplitArr[1] == `${element}${index}`) {
|
|
75
75
|
const element = this.repeaterGroup.controls[key];
|
|
76
76
|
deletedControls.push({ [key]: element });
|
|
77
77
|
}
|
|
@@ -86,7 +86,7 @@ export class RepeaterTableComponent {
|
|
|
86
86
|
}
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
|
-
this.items = this.items.filter((res) => res != this.items[
|
|
89
|
+
this.items = this.items.filter((res) => res != this.items[index]);
|
|
90
90
|
}
|
|
91
91
|
addItem() {
|
|
92
92
|
if (this.items.length == 0)
|
|
@@ -95,14 +95,14 @@ export class RepeaterTableComponent {
|
|
|
95
95
|
this.items.push(this.items[this.items.length - 1] + 1);
|
|
96
96
|
}
|
|
97
97
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: RepeaterTableComponent, deps: [{ token: i1.UtilityService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
98
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: RepeaterTableComponent, selector: "BBSF-repeater-table", inputs: { group: "group", options: "options" }, ngImport: i0, template: "<div class=\"form-group bbsf-control bbsf-repeater\">\r\n <!--table-->\r\n <div class=\"table-responsive\">\r\n <table class=\"bbsf-repeater-table table {{options.
|
|
98
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: RepeaterTableComponent, selector: "BBSF-repeater-table", inputs: { group: "group", options: "options" }, ngImport: i0, template: "<div class=\"form-group bbsf-control bbsf-repeater\">\r\n <!--table-->\r\n <div class=\"table-responsive\">\r\n <table class=\"bbsf-repeater-table table {{options.repeaterTableExtraClasses}}\">\r\n <thead class=\"table-head\">\r\n <tr class=\"{{options.repeaterTableRowExtraClasses}}\">\r\n <th *ngFor=\"let item of options.repeaterStructure\" [hidden]=\"item.isHiddenInput\">{{item.headerTitle}}</th>\r\n <th *ngIf=\"!options.disableDeleteButton\" class=\"text-center\">\r\n {{utilityService.getResourceValue(options.actionLabelKey)}}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-body\">\r\n <tr *ngFor=\"let item of items ; index as i\">\r\n <td *ngFor=\"let repeaterField of options.repeaterStructure ; index as r\"\r\n [hidden]=\"repeaterField.isHiddenInput\">\r\n <repeater-field-builder [repeaterField]=\"repeaterField\" [itemNumber]=\"i\" [itemsValue]=\"originalItems\"\r\n [controlNumber]=\"r\" [group]=\"repeaterGroup\">\r\n </repeater-field-builder>\r\n </td>\r\n <td *ngIf=\"!options.disableDeleteButton\" class=\"td-delete\">\r\n <button class=\"{{options.deleteButtonExtraClasses}} btn btn-icon btn-sm btn-danger\" type=\"button\"\r\n (click)=\"deleteItem(i)\" [disabled]=\"(items.length ==options.minRequiredItems&&options.isRequired)\">\r\n <span [innerHTML]=\"options.deleteButtonText\"></span>\r\n </button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <!--add button-->\r\n <div class=\"repeater-add-btn\" *ngIf=\"!options.disableAddButton\">\r\n <button class=\"{{options.addButtonExtraClasses}} btn btn-sm btn-brand\" type=\"button\" (click)=\"addItem()\">\r\n <span [innerHTML]=\"options.addButtonText\"></span>\r\n </button>\r\n </div>\r\n</div>", dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.RepeaterFieldBuilderComponent, selector: "repeater-field-builder", inputs: ["group", "itemNumber", "controlNumber", "repeaterField", "itemsValue"] }] }); }
|
|
99
99
|
}
|
|
100
100
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: RepeaterTableComponent, decorators: [{
|
|
101
101
|
type: Component,
|
|
102
|
-
args: [{ selector: 'BBSF-repeater-table', template: "<div class=\"form-group bbsf-control bbsf-repeater\">\r\n <!--table-->\r\n <div class=\"table-responsive\">\r\n <table class=\"bbsf-repeater-table table {{options.
|
|
102
|
+
args: [{ selector: 'BBSF-repeater-table', template: "<div class=\"form-group bbsf-control bbsf-repeater\">\r\n <!--table-->\r\n <div class=\"table-responsive\">\r\n <table class=\"bbsf-repeater-table table {{options.repeaterTableExtraClasses}}\">\r\n <thead class=\"table-head\">\r\n <tr class=\"{{options.repeaterTableRowExtraClasses}}\">\r\n <th *ngFor=\"let item of options.repeaterStructure\" [hidden]=\"item.isHiddenInput\">{{item.headerTitle}}</th>\r\n <th *ngIf=\"!options.disableDeleteButton\" class=\"text-center\">\r\n {{utilityService.getResourceValue(options.actionLabelKey)}}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-body\">\r\n <tr *ngFor=\"let item of items ; index as i\">\r\n <td *ngFor=\"let repeaterField of options.repeaterStructure ; index as r\"\r\n [hidden]=\"repeaterField.isHiddenInput\">\r\n <repeater-field-builder [repeaterField]=\"repeaterField\" [itemNumber]=\"i\" [itemsValue]=\"originalItems\"\r\n [controlNumber]=\"r\" [group]=\"repeaterGroup\">\r\n </repeater-field-builder>\r\n </td>\r\n <td *ngIf=\"!options.disableDeleteButton\" class=\"td-delete\">\r\n <button class=\"{{options.deleteButtonExtraClasses}} btn btn-icon btn-sm btn-danger\" type=\"button\"\r\n (click)=\"deleteItem(i)\" [disabled]=\"(items.length ==options.minRequiredItems&&options.isRequired)\">\r\n <span [innerHTML]=\"options.deleteButtonText\"></span>\r\n </button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <!--add button-->\r\n <div class=\"repeater-add-btn\" *ngIf=\"!options.disableAddButton\">\r\n <button class=\"{{options.addButtonExtraClasses}} btn btn-sm btn-brand\" type=\"button\" (click)=\"addItem()\">\r\n <span [innerHTML]=\"options.addButtonText\"></span>\r\n </button>\r\n </div>\r\n</div>" }]
|
|
103
103
|
}], ctorParameters: () => [{ type: i1.UtilityService }], propDecorators: { group: [{
|
|
104
104
|
type: Input
|
|
105
105
|
}], options: [{
|
|
106
106
|
type: Input
|
|
107
107
|
}] } });
|
|
108
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwZWF0ZXItdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1jb250cm9scy9zcmMvbGliL2NvbnRyb2xzL1JlcGVhdGVyL3JlcGVhdGVyLXRhYmxlL3JlcGVhdGVyLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtY29udHJvbHMvc3JjL2xpYi9jb250cm9scy9SZXBlYXRlci9yZXBlYXRlci10YWJsZS9yZXBlYXRlci10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBMkQsTUFBTSxlQUFlLENBQUM7QUFDMUcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7OztBQVMzQyxNQUFNLE9BQU8sc0JBQXNCO0lBT2pDLFlBQW1CLGNBQTZCO1FBQTdCLG1CQUFjLEdBQWQsY0FBYyxDQUFlO1FBSmhELFVBQUssR0FBYSxFQUFFLENBQUE7UUFFcEIsa0JBQWEsR0FBUSxFQUFFLENBQUM7SUFFNEIsQ0FBQztJQUVyRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDN0QsSUFBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxFQUN0QztZQUNFLElBQUksQ0FBQyxhQUFhLEdBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUM7WUFDL0MsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENB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LCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIFF1ZXJ5TGlzdCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCwgVmlld0NoaWxkcmVuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgUmVwZWF0ZXJPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vU2hhcmVkL01vZGVscy9SZXBlYXRlck9wdGlvbnMnO1xyXG5pbXBvcnQgeyBVdGlsaXR5U2VydmljZSB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLXV0aWxpdGllcyc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdCQlNGLXJlcGVhdGVyLXRhYmxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmVwZWF0ZXItdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVwZWF0ZXJUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7IFxyXG4gIEBJbnB1dCgpIGdyb3VwOiBGb3JtR3JvdXA7XHJcbiAgQElucHV0KCkgb3B0aW9uczogUmVwZWF0ZXJPcHRpb25zO1xyXG4gIGl0ZW1zOiBudW1iZXJbXSA9IFtdXHJcbiAgcmVwZWF0ZXJHcm91cDogRm9ybUdyb3VwO1xyXG4gIG9yaWdpbmFsSXRlbXM6YW55IFtdPVtdO1xyXG5cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdXRpbGl0eVNlcnZpY2U6VXRpbGl0eVNlcnZpY2UpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMucmVwZWF0ZXJHcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gICAgdGhpcy5ncm91cC5hZGRDb250cm9sKHRoaXMub3B0aW9ucy5OYW1lLCB0aGlzLnJlcGVhdGVyR3JvdXApO1xyXG4gICAgaWYodGhpcy5vcHRpb25zLlJlcGVhdGVyVmFsdWUubGVuZ3RoPjApXHJcbiAgICB7XHJcbiAgICAgIHRoaXMub3JpZ2luYWxJdGVtcz0gdGhpcy5vcHRpb25zLlJlcGVhdGVyVmFsdWU7XHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLm9wdGlvbnMuUmVwZWF0ZXJWYWx1ZS5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICB0aGlzLml0ZW1zLnB1c2goaW5kZXgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgIFxyXG4gICAgZWxzZVxyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMub3B0aW9ucy5NaW5SZXF1aXJlZEl0ZW1zOyBpbmRleCsrKSB7XHJcbiAgICAgIHRoaXMuaXRlbXMucHVzaChpbmRleCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlcGVhdGVyR3JvdXAudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgIGxldCByZXN1bHQgPSBbXTtcclxuICAgICAgbGV0IHJvd051bWJlciA9IFtdO1xyXG4gICAgICBsZXQgYWRkSXRlbXMgPSBbXTtcclxuICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5yZXBlYXRlckdyb3VwLmNvbnRyb2xzKSB7XHJcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnJlcGVhdGVyR3JvdXAuY29udHJvbHMsIGtleSkpIHtcclxuICAgICAgICAgIGNvbnN0IGtleVNwbGl0QXJyID0ga2V5LnNwbGl0KCcuJylcclxuICAgICAgICAgIGxldCBpdGVtID0ge1xyXG4gICAgICAgICAgICBba2V5U3BsaXRBcnJbMV1dOiB7IFtrZXlTcGxpdEFyclswXV06IHRoaXMuZ3JvdXAuY29udHJvbHNbdGhpcy5vcHRpb25zLk5hbWVdLnZhbHVlW2tleV0gfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYWRkSXRlbXMucHVzaChpdGVtKVxyXG4gICAgICAgICAgaWYgKCFyb3dOdW1iZXIuaW5jbHVkZXMoa2V5U3BsaXRBcnJbMV0pKVxyXG4gICAgICAgICAgICByb3dOdW1iZXIucHVzaChrZXlTcGxpdEFyclsxXSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHJvd051bWJlci5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICBjb25zdCByb3cgPSByb3dOdW1iZXJbaW5kZXhdO1xyXG4gICAgICAgIGxldCBhZGRPYmplY3QgPSB7fVxyXG4gICAgICAgIGxldCBmaWx0ZXJlZEVsZW1lbnRzID0gYWRkSXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbVtyb3ddKVxyXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBmaWx0ZXJlZEVsZW1lbnRzLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgY29uc3QgZmlsdGVyZWRFbGVtZW50ID0gZmlsdGVyZWRFbGVtZW50c1tpbmRleF07XHJcbiAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBmaWx0ZXJlZEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChmaWx0ZXJlZEVsZW1lbnQsIGtleSkpIHtcclxuICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZmlsdGVyZWRFbGVtZW50W2tleV07XHJcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlbGVtZW50LCBrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZWxlbWVudFtrZXldO1xyXG4gICAgICAgICAgICAgICAgICBhZGRPYmplY3Rba2V5XSA9IHZhbHVlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlc3VsdC5wdXNoKGFkZE9iamVjdClcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm9wdGlvbnMuUmVwZWF0ZXJWYWx1ZSA9IHJlc3VsdDtcclxuICAgIH0pXHJcblxyXG4gIH1cclxuXHJcbiAgZGVsZXRlSXRlbShJbmRleCkge1xyXG4gICAgaWYgKHRoaXMuaXRlbXMubGVuZ3RoID09IHRoaXMub3B0aW9ucy5NaW5SZXF1aXJlZEl0ZW1zICYmIHRoaXMub3B0aW9ucy5Jc1JlcXVpcmVkKVxyXG4gICAgICByZXR1cm47XHJcbiAgICBsZXQgZGVsZXRlZENvbnRyb2xzOiBhbnlbXSA9IFtdXHJcbiAgICBsZXQgY29udHJvbE5hbWVzID0gdGhpcy5vcHRpb25zLlJlcGVhdGVyU3RydWN0dXJlLm1hcChlID0+IGUuQ29udHJvbE9wdGlvbnMuTmFtZSlcclxuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMucmVwZWF0ZXJHcm91cC5jb250cm9scykge1xyXG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMucmVwZWF0ZXJHcm91cC5jb250cm9scywga2V5KSkge1xyXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBjb250cm9sTmFtZXMubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gY29udHJvbE5hbWVzW2luZGV4XTtcclxuICAgICAgICAgIGNvbnN0IGtleVNwbGl0QXJyID0ga2V5LnNwbGl0KCcuJylcclxuICAgICAgICAgIGlmIChrZXlTcGxpdEFyclswXSArIGtleVNwbGl0QXJyWzFdID09IGAke2VsZW1lbnR9JHtJbmRleH1gKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnJlcGVhdGVyR3JvdXAuY29udHJvbHNba2V5XTtcclxuICAgICAgICAgICAgZGVsZXRlZENvbnRyb2xzLnB1c2goeyBba2V5XTogZWxlbWVudCB9KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGRlbGV0ZWRDb250cm9scy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgY29uc3QgZWxlbWVudCA9IGRlbGV0ZWRDb250cm9sc1tpbmRleF07XHJcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIGVsZW1lbnQpIHtcclxuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGVsZW1lbnQsIGtleSkpIHtcclxuICAgICAgICAgIHRoaXMucmVwZWF0ZXJHcm91cC5yZW1vdmVDb250cm9sKGtleSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLml0ZW1zID0gdGhpcy5pdGVtcy5maWx0ZXIoKHJlcykgPT4gcmVzICE9IHRoaXMuaXRlbXNbSW5kZXhdKVxyXG4gIH1cclxuXHJcbiAgYWRkSXRlbSgpIHtcclxuICAgIGlmKHRoaXMuaXRlbXMubGVuZ3RoPT0wKVxyXG4gICAgdGhpcy5pdGVtcy5wdXNoKHRoaXMuaXRlbXMubGVuZ3RoKTtcclxuICAgIGVsc2VcclxuICAgIHRoaXMuaXRlbXMucHVzaCh0aGlzLml0ZW1zW3RoaXMuaXRlbXMubGVuZ3RoLTFdKzEpO1xyXG59XHJcblxyXG5cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBiYnNmLWNvbnRyb2wgYmJzZi1yZXBlYXRlclwiPlxyXG4gIDwhLS10YWJsZS0tPlxyXG4gIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICA8dGFibGUgY2xhc3M9XCJiYnNmLXJlcGVhdGVyLXRhYmxlIHRhYmxlICB7e29wdGlvbnMuUmVwZWF0ZXJUYWJsZUV4dHJhQ2xhc3Nlc319XCI+XHJcbiAgICAgIDx0aGVhZCBjbGFzcz1cInRhYmxlLWhlYWRcIj5cclxuICAgICAgICA8dHIgY2xhc3M9XCJ7e29wdGlvbnMuUmVwZWF0ZXJUYWJsZVJvd0V4dHJhQ2xhc3Nlc319XCI+XHJcbiAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IGl0ZW0gb2Ygb3B0aW9ucy5SZXBlYXRlclN0cnVjdHVyZVwiIFtoaWRkZW5dPVwiaXRlbS5Jc0hpZGRlbklucHV0XCI+e3tpdGVtLkhlYWRlclRpdGxlfX08L3RoPlxyXG4gICAgICAgICAgPHRoICpuZ0lmPVwiIW9wdGlvbnMuRGlzYWJsZURlbGV0ZUJ1dHRvblwiIGNsYXNzPVwidGV4dC1jZW50ZXJcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUob3B0aW9ucy5BY3Rpb25MYWJlbEtleSl9fTwvdGg+XHJcbiAgICAgICAgPC90cj5cclxuICAgICAgPC90aGVhZD5cclxuICAgICAgPHRib2R5IGNsYXNzPVwidGFibGUtYm9keVwiPlxyXG4gICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtcyAgOyBpbmRleCBhcyBpXCI+XHJcbiAgICAgICAgICA8dGQgKm5nRm9yPVwibGV0IFJlcGVhdGVyRmllbGQgb2Ygb3B0aW9ucy5SZXBlYXRlclN0cnVjdHVyZSAgOyBpbmRleCBhcyByXCIgW2hpZGRlbl09XCJSZXBlYXRlckZpZWxkLklzSGlkZGVuSW5wdXRcIj5cclxuICAgICAgICAgICAgPHJlcGVhdGVyLWZpZWxkLWJ1aWxkZXIgW1JlcGVhdGVyRmllbGRdPVwiUmVwZWF0ZXJGaWVsZFwiIFtpdGVtTnVtYmVyXT1cImlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbXNWYWx1ZV09XCJvcmlnaW5hbEl0ZW1zXCIgW2NvbnRyb2xOdW1iZXJdPVwiclwiIFtncm91cF09XCJyZXBlYXRlckdyb3VwXCI+XHJcbiAgICAgICAgICAgIDwvcmVwZWF0ZXItZmllbGQtYnVpbGRlcj5cclxuICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICA8dGQgKm5nSWY9XCIhb3B0aW9ucy5EaXNhYmxlRGVsZXRlQnV0dG9uXCIgY2xhc3M9XCJ0ZC1kZWxldGVcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInt7b3B0aW9ucy5EZWxldGVCdXR0b25FeHRyYUNsYXNzZXN9fSBidG4gYnRuLWljb24gYnRuLXNtIGJ0bi1kYW5nZXJcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImRlbGV0ZUl0ZW0oaSlcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIoaXRlbXMubGVuZ3RoID09b3B0aW9ucy5NaW5SZXF1aXJlZEl0ZW1zJiZvcHRpb25zLklzUmVxdWlyZWQpXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJvcHRpb25zLkRlbGV0ZUJ1dHRvblRleHRcIj48L3NwYW4+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC90ZD5cclxuICAgICAgICA8L3RyPlxyXG4gICAgICA8L3Rib2R5PlxyXG4gICAgPC90YWJsZT5cclxuICA8L2Rpdj5cclxuICA8IS0tYWRkIGJ1dHRvbi0tPlxyXG4gIDxkaXYgY2xhc3M9XCJyZXBlYXRlci1hZGQtYnRuXCIgKm5nSWY9XCIhb3B0aW9ucy5EaXNhYmxlQWRkQnV0dG9uXCI+XHJcbiAgICA8YnV0dG9uIGNsYXNzPVwie3tvcHRpb25zLkFkZEJ1dHRvbkV4dHJhQ2xhc3Nlc319IGJ0biBidG4tc20gYnRuLWJyYW5kXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJhZGRJdGVtKClcIj5cclxuICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJvcHRpb25zLkFkZEJ1dHRvblRleHRcIj48L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG5cclxuIl19
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwZWF0ZXItdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1jb250cm9scy9zcmMvbGliL2NvbnRyb2xzL1JlcGVhdGVyL3JlcGVhdGVyLXRhYmxlL3JlcGVhdGVyLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtY29udHJvbHMvc3JjL2xpYi9jb250cm9scy9SZXBlYXRlci9yZXBlYXRlci10YWJsZS9yZXBlYXRlci10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBMkQsTUFBTSxlQUFlLENBQUM7QUFDMUcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7OztBQVMzQyxNQUFNLE9BQU8sc0JBQXNCO0lBT2pDLFlBQW1CLGNBQThCO1FBQTlCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUpqRCxVQUFLLEdBQWEsRUFBRSxDQUFBO1FBRXBCLGtCQUFhLEdBQVUsRUFBRSxDQUFDO0lBRTJCLENBQUM7SUFFdEQsUUFBUTtRQUNOLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzdELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN6QyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO1lBQ2hELEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQ3RFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3hCO1NBQ0Y7O1lBR0MsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQ2xFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3hCO1FBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDaEQsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQztZQUNuQixJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUM7WUFDbEIsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRTtnQkFDN0MsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLEVBQUU7b0JBQzFFLE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7b0JBQ2xDLElBQUksSUFBSSxHQUFHO3dCQUNULENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO3FCQUMxRixDQUFBO29CQUNELFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7b0JBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDckMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtpQkFDakM7YUFDRjtZQUNELEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUNyRCxNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzdCLElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQTtnQkFDbEIsSUFBSSxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7Z0JBQ3pELEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7b0JBQzVELE1BQU0sZUFBZSxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNoRCxLQUFLLE1BQU0sR0FBRyxJQUFJLGVBQWUsRUFBRTt3QkFDakMsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEdBQUcsQ0FBQyxFQUFFOzRCQUM5RCxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQ3JDLEtBQUssTUFBTSxHQUFHLElBQUksT0FBTyxFQUFFO2dDQUN6QixJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEVBQUU7b0NBQ3RELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztvQ0FDM0IsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQTtpQ0FDdkI7NkJBQ0Y7eUJBQ0Y7cUJBQ0Y7aUJBQ0Y7Z0JBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTthQUN2QjtZQUNELElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQTtJQUVKLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBSztRQUNkLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVU7WUFDL0UsT0FBTztRQUNULElBQUksZUFBZSxHQUFVLEVBQUUsQ0FBQTtRQUMvQixJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDakYsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRTtZQUM3QyxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsRUFBRTtnQkFDMUUsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7b0JBQ3hELE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDcEMsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtvQkFDbEMsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsT0FBTyxHQUFHLEtBQUssRUFBRSxFQUFFO3dCQUMzRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDakQsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQTtxQkFDekM7aUJBQ0Y7YUFDRjtTQUNGO1FBQ0QsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDM0QsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3ZDLEtBQUssTUFBTSxHQUFHLElBQUksT0FBTyxFQUFFO2dCQUN6QixJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEVBQUU7b0JBQ3RELElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFBO2lCQUN0QzthQUNGO1NBQ0Y7UUFFRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO0lBQ25FLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7O1lBRW5DLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0QsQ0FBQzs4R0FqR1Usc0JBQXNCO2tHQUF0QixzQkFBc0IsMkdDVm5DLHM0REFtQ007OzJGRHpCTyxzQkFBc0I7a0JBSmxDLFNBQVM7K0JBQ0UscUJBQXFCO21GQUl0QixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBRdWVyeUxpc3QsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIFZpZXdDaGlsZHJlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFJlcGVhdGVyT3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL1NoYXJlZC9Nb2RlbHMvUmVwZWF0ZXJPcHRpb25zJztcclxuaW1wb3J0IHsgVXRpbGl0eVNlcnZpY2UgfSBmcm9tICdAYm5zaWdodHMvYmJzZi11dGlsaXRpZXMnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnQkJTRi1yZXBlYXRlci10YWJsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3JlcGVhdGVyLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFJlcGVhdGVyVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIGdyb3VwOiBGb3JtR3JvdXA7XHJcbiAgQElucHV0KCkgb3B0aW9uczogUmVwZWF0ZXJPcHRpb25zO1xyXG4gIGl0ZW1zOiBudW1iZXJbXSA9IFtdXHJcbiAgcmVwZWF0ZXJHcm91cDogRm9ybUdyb3VwO1xyXG4gIG9yaWdpbmFsSXRlbXM6IGFueVtdID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB1dGlsaXR5U2VydmljZTogVXRpbGl0eVNlcnZpY2UpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMucmVwZWF0ZXJHcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gICAgdGhpcy5ncm91cC5hZGRDb250cm9sKHRoaXMub3B0aW9ucy5uYW1lLCB0aGlzLnJlcGVhdGVyR3JvdXApO1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5yZXBlYXRlclZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5vcmlnaW5hbEl0ZW1zID0gdGhpcy5vcHRpb25zLnJlcGVhdGVyVmFsdWU7XHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLm9wdGlvbnMucmVwZWF0ZXJWYWx1ZS5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICB0aGlzLml0ZW1zLnB1c2goaW5kZXgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5vcHRpb25zLm1pblJlcXVpcmVkSXRlbXM7IGluZGV4KyspIHtcclxuICAgICAgICB0aGlzLml0ZW1zLnB1c2goaW5kZXgpO1xyXG4gICAgICB9XHJcbiAgICB0aGlzLnJlcGVhdGVyR3JvdXAudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgIGxldCByZXN1bHQgPSBbXTtcclxuICAgICAgbGV0IHJvd051bWJlciA9IFtdO1xyXG4gICAgICBsZXQgYWRkSXRlbXMgPSBbXTtcclxuICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5yZXBlYXRlckdyb3VwLmNvbnRyb2xzKSB7XHJcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnJlcGVhdGVyR3JvdXAuY29udHJvbHMsIGtleSkpIHtcclxuICAgICAgICAgIGNvbnN0IGtleVNwbGl0QXJyID0ga2V5LnNwbGl0KCcuJylcclxuICAgICAgICAgIGxldCBpdGVtID0ge1xyXG4gICAgICAgICAgICBba2V5U3BsaXRBcnJbMV1dOiB7IFtrZXlTcGxpdEFyclswXV06IHRoaXMuZ3JvdXAuY29udHJvbHNbdGhpcy5vcHRpb25zLm5hbWVdLnZhbHVlW2tleV0gfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYWRkSXRlbXMucHVzaChpdGVtKVxyXG4gICAgICAgICAgaWYgKCFyb3dOdW1iZXIuaW5jbHVkZXMoa2V5U3BsaXRBcnJbMV0pKVxyXG4gICAgICAgICAgICByb3dOdW1iZXIucHVzaChrZXlTcGxpdEFyclsxXSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHJvd051bWJlci5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICBjb25zdCByb3cgPSByb3dOdW1iZXJbaW5kZXhdO1xyXG4gICAgICAgIGxldCBhZGRPYmplY3QgPSB7fVxyXG4gICAgICAgIGxldCBmaWx0ZXJlZEVsZW1lbnRzID0gYWRkSXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbVtyb3ddKVxyXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBmaWx0ZXJlZEVsZW1lbnRzLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgY29uc3QgZmlsdGVyZWRFbGVtZW50ID0gZmlsdGVyZWRFbGVtZW50c1tpbmRleF07XHJcbiAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBmaWx0ZXJlZEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChmaWx0ZXJlZEVsZW1lbnQsIGtleSkpIHtcclxuICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZmlsdGVyZWRFbGVtZW50W2tleV07XHJcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlbGVtZW50LCBrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZWxlbWVudFtrZXldO1xyXG4gICAgICAgICAgICAgICAgICBhZGRPYmplY3Rba2V5XSA9IHZhbHVlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlc3VsdC5wdXNoKGFkZE9iamVjdClcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm9wdGlvbnMucmVwZWF0ZXJWYWx1ZSA9IHJlc3VsdDtcclxuICAgIH0pXHJcblxyXG4gIH1cclxuXHJcbiAgZGVsZXRlSXRlbShpbmRleCkge1xyXG4gICAgaWYgKHRoaXMuaXRlbXMubGVuZ3RoID09IHRoaXMub3B0aW9ucy5taW5SZXF1aXJlZEl0ZW1zICYmIHRoaXMub3B0aW9ucy5pc1JlcXVpcmVkKVxyXG4gICAgICByZXR1cm47XHJcbiAgICBsZXQgZGVsZXRlZENvbnRyb2xzOiBhbnlbXSA9IFtdXHJcbiAgICBsZXQgY29udHJvbE5hbWVzID0gdGhpcy5vcHRpb25zLnJlcGVhdGVyU3RydWN0dXJlLm1hcChlID0+IGUuY29udHJvbE9wdGlvbnMuTmFtZSlcclxuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMucmVwZWF0ZXJHcm91cC5jb250cm9scykge1xyXG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMucmVwZWF0ZXJHcm91cC5jb250cm9scywga2V5KSkge1xyXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBjb250cm9sTmFtZXMubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gY29udHJvbE5hbWVzW2luZGV4XTtcclxuICAgICAgICAgIGNvbnN0IGtleVNwbGl0QXJyID0ga2V5LnNwbGl0KCcuJylcclxuICAgICAgICAgIGlmIChrZXlTcGxpdEFyclswXSArIGtleVNwbGl0QXJyWzFdID09IGAke2VsZW1lbnR9JHtpbmRleH1gKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnJlcGVhdGVyR3JvdXAuY29udHJvbHNba2V5XTtcclxuICAgICAgICAgICAgZGVsZXRlZENvbnRyb2xzLnB1c2goeyBba2V5XTogZWxlbWVudCB9KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGRlbGV0ZWRDb250cm9scy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgY29uc3QgZWxlbWVudCA9IGRlbGV0ZWRDb250cm9sc1tpbmRleF07XHJcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIGVsZW1lbnQpIHtcclxuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGVsZW1lbnQsIGtleSkpIHtcclxuICAgICAgICAgIHRoaXMucmVwZWF0ZXJHcm91cC5yZW1vdmVDb250cm9sKGtleSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLml0ZW1zID0gdGhpcy5pdGVtcy5maWx0ZXIoKHJlcykgPT4gcmVzICE9IHRoaXMuaXRlbXNbaW5kZXhdKVxyXG4gIH1cclxuXHJcbiAgYWRkSXRlbSgpIHtcclxuICAgIGlmICh0aGlzLml0ZW1zLmxlbmd0aCA9PSAwKVxyXG4gICAgICB0aGlzLml0ZW1zLnB1c2godGhpcy5pdGVtcy5sZW5ndGgpO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLml0ZW1zLnB1c2godGhpcy5pdGVtc1t0aGlzLml0ZW1zLmxlbmd0aCAtIDFdICsgMSk7XHJcbiAgfVxyXG5cclxuXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgYmJzZi1jb250cm9sIGJic2YtcmVwZWF0ZXJcIj5cclxuICA8IS0tdGFibGUtLT5cclxuICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxyXG4gICAgPHRhYmxlIGNsYXNzPVwiYmJzZi1yZXBlYXRlci10YWJsZSB0YWJsZSAge3tvcHRpb25zLnJlcGVhdGVyVGFibGVFeHRyYUNsYXNzZXN9fVwiPlxyXG4gICAgICA8dGhlYWQgY2xhc3M9XCJ0YWJsZS1oZWFkXCI+XHJcbiAgICAgICAgPHRyIGNsYXNzPVwie3tvcHRpb25zLnJlcGVhdGVyVGFibGVSb3dFeHRyYUNsYXNzZXN9fVwiPlxyXG4gICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBpdGVtIG9mIG9wdGlvbnMucmVwZWF0ZXJTdHJ1Y3R1cmVcIiBbaGlkZGVuXT1cIml0ZW0uaXNIaWRkZW5JbnB1dFwiPnt7aXRlbS5oZWFkZXJUaXRsZX19PC90aD5cclxuICAgICAgICAgIDx0aCAqbmdJZj1cIiFvcHRpb25zLmRpc2FibGVEZWxldGVCdXR0b25cIiBjbGFzcz1cInRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShvcHRpb25zLmFjdGlvbkxhYmVsS2V5KX19PC90aD5cclxuICAgICAgICA8L3RyPlxyXG4gICAgICA8L3RoZWFkPlxyXG4gICAgICA8dGJvZHkgY2xhc3M9XCJ0YWJsZS1ib2R5XCI+XHJcbiAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zICA7IGluZGV4IGFzIGlcIj5cclxuICAgICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgcmVwZWF0ZXJGaWVsZCBvZiBvcHRpb25zLnJlcGVhdGVyU3RydWN0dXJlICA7IGluZGV4IGFzIHJcIlxyXG4gICAgICAgICAgICBbaGlkZGVuXT1cInJlcGVhdGVyRmllbGQuaXNIaWRkZW5JbnB1dFwiPlxyXG4gICAgICAgICAgICA8cmVwZWF0ZXItZmllbGQtYnVpbGRlciBbcmVwZWF0ZXJGaWVsZF09XCJyZXBlYXRlckZpZWxkXCIgW2l0ZW1OdW1iZXJdPVwiaVwiIFtpdGVtc1ZhbHVlXT1cIm9yaWdpbmFsSXRlbXNcIlxyXG4gICAgICAgICAgICAgIFtjb250cm9sTnVtYmVyXT1cInJcIiBbZ3JvdXBdPVwicmVwZWF0ZXJHcm91cFwiPlxyXG4gICAgICAgICAgICA8L3JlcGVhdGVyLWZpZWxkLWJ1aWxkZXI+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgPHRkICpuZ0lmPVwiIW9wdGlvbnMuZGlzYWJsZURlbGV0ZUJ1dHRvblwiIGNsYXNzPVwidGQtZGVsZXRlXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ7e29wdGlvbnMuZGVsZXRlQnV0dG9uRXh0cmFDbGFzc2VzfX0gYnRuIGJ0bi1pY29uIGJ0bi1zbSBidG4tZGFuZ2VyXCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZUl0ZW0oaSlcIiBbZGlzYWJsZWRdPVwiKGl0ZW1zLmxlbmd0aCA9PW9wdGlvbnMubWluUmVxdWlyZWRJdGVtcyYmb3B0aW9ucy5pc1JlcXVpcmVkKVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwib3B0aW9ucy5kZWxldGVCdXR0b25UZXh0XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPC90cj5cclxuICAgICAgPC90Ym9keT5cclxuICAgIDwvdGFibGU+XHJcbiAgPC9kaXY+XHJcbiAgPCEtLWFkZCBidXR0b24tLT5cclxuICA8ZGl2IGNsYXNzPVwicmVwZWF0ZXItYWRkLWJ0blwiICpuZ0lmPVwiIW9wdGlvbnMuZGlzYWJsZUFkZEJ1dHRvblwiPlxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cInt7b3B0aW9ucy5hZGRCdXR0b25FeHRyYUNsYXNzZXN9fSBidG4gYnRuLXNtIGJ0bi1icmFuZFwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiYWRkSXRlbSgpXCI+XHJcbiAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwib3B0aW9ucy5hZGRCdXR0b25UZXh0XCI+PC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==
|