@mediusinc/mng-commons 2.5.0-rc.0 → 2.6.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/i18n/en.json +4 -1
- package/assets/i18n/sl.json +4 -1
- package/esm2020/lib/components/action/action.component.mjs +8 -1
- package/esm2020/lib/components/action/editor/action-editor.component.mjs +196 -115
- package/esm2020/lib/components/action/models/action-execution.model.mjs +99 -10
- package/esm2020/lib/components/action/route/action-route.component.mjs +53 -35
- package/esm2020/lib/components/form/editor/form-editor.component.mjs +15 -6
- package/esm2020/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +4 -1
- package/esm2020/lib/components/form/formly/fields/formly-field-custom/formly-custom-field-base.model.mjs +69 -0
- package/esm2020/lib/components/form/formly/fields/formly-field-custom/formly-field-custom.component.mjs +54 -0
- package/esm2020/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +4 -1
- package/esm2020/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.mjs +4 -1
- package/esm2020/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +4 -1
- package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +5 -2
- package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +4 -1
- package/esm2020/lib/components/form/formly/fields/index.mjs +3 -1
- package/esm2020/lib/components/form/formly/formly.config.mjs +11 -1
- package/esm2020/lib/components/form/formly/models/formly-field.model.mjs +1 -1
- package/esm2020/lib/components/form/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.mjs +21 -3
- package/esm2020/lib/components/layout/menu-item.component.mjs +9 -11
- package/esm2020/lib/components/layout/version.component.mjs +3 -3
- package/esm2020/lib/components/tableview/table/models/index.mjs +2 -0
- package/esm2020/lib/components/tableview/table/table.component.mjs +67 -9
- package/esm2020/lib/descriptors/action/action.descriptor.mjs +13 -1
- package/esm2020/lib/descriptors/editor/field.descriptor.mjs +77 -3
- package/esm2020/lib/descriptors/table/column.descriptor.mjs +25 -1
- package/esm2020/lib/descriptors/table/table.descriptor.mjs +13 -1
- package/esm2020/lib/descriptors/types/table.type.mjs +4 -1
- package/esm2020/lib/mng-commons.module.mjs +7 -4
- package/esm2020/lib/models/config.model.mjs +1 -1
- package/esm2020/lib/models/view-container.model.mjs +1 -1
- package/esm2020/lib/services/action-executor.service.mjs +313 -190
- package/esm2020/lib/services/commons.service.mjs +8 -1
- package/esm2020/lib/services/index.mjs +3 -1
- package/esm2020/lib/services/internal/commons-init.service.mjs +5 -9
- package/esm2020/lib/services/navigation.service.mjs +6 -3
- package/esm2020/lib/services/view-container.component.service.mjs +10 -1
- package/esm2020/lib/utils/action-data-provider.util.mjs +14 -1
- package/esm2020/lib/utils/editor-formly.util.mjs +23 -3
- package/fesm2015/mediusinc-mng-commons.mjs +2541 -1807
- package/fesm2015/mediusinc-mng-commons.mjs.map +1 -1
- package/fesm2020/mediusinc-mng-commons.mjs +2167 -1451
- package/fesm2020/mediusinc-mng-commons.mjs.map +1 -1
- package/lib/components/action/action.component.d.ts +1 -2
- package/lib/components/action/editor/action-editor.component.d.ts +19 -6
- package/lib/components/action/models/action-execution.model.d.ts +35 -6
- package/lib/components/action/route/action-route.component.d.ts +7 -4
- package/lib/components/form/editor/form-editor.component.d.ts +2 -1
- package/lib/components/form/formly/fields/formly-field-custom/formly-custom-field-base.model.d.ts +27 -0
- package/lib/components/form/formly/fields/formly-field-custom/formly-field-custom.component.d.ts +11 -0
- package/lib/components/form/formly/fields/index.d.ts +2 -0
- package/lib/components/form/formly/models/formly-field.model.d.ts +1 -0
- package/lib/components/form/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.d.ts +5 -0
- package/lib/components/layout/menu-item.component.d.ts +1 -2
- package/lib/components/layout/version.component.d.ts +1 -1
- package/lib/components/tableview/table/models/index.d.ts +6 -0
- package/lib/components/tableview/table/table.component.d.ts +16 -1
- package/lib/descriptors/action/action.descriptor.d.ts +5 -0
- package/lib/descriptors/editor/field.descriptor.d.ts +28 -1
- package/lib/descriptors/table/column.descriptor.d.ts +8 -0
- package/lib/descriptors/table/table.descriptor.d.ts +2 -0
- package/lib/descriptors/types/table.type.d.ts +3 -0
- package/lib/mng-commons.module.d.ts +15 -14
- package/lib/models/config.model.d.ts +4 -0
- package/lib/models/view-container.model.d.ts +6 -0
- package/lib/services/action-executor.service.d.ts +69 -35
- package/lib/services/commons.service.d.ts +2 -0
- package/lib/services/index.d.ts +2 -0
- package/lib/services/internal/commons-init.service.d.ts +1 -3
- package/lib/services/navigation.service.d.ts +3 -2
- package/lib/services/view-container.component.service.d.ts +7 -2
- package/lib/utils/action-data-provider.util.d.ts +8 -0
- package/package.json +3 -3
- package/scss/mng-commons-light.scss +3 -0
- package/scss/mng-overrides/_theme_multiselect.scss +20 -0
- package/scss/mng-overrides/_theme_styles.scss +1 -0
|
@@ -36,6 +36,7 @@ export class AFieldDescriptor extends AGenericFieldDescriptor {
|
|
|
36
36
|
this._disabled = false;
|
|
37
37
|
this._validations = [];
|
|
38
38
|
this._asyncValidations = [];
|
|
39
|
+
this._updateOn = 'change';
|
|
39
40
|
this._className = '';
|
|
40
41
|
this._labelClassName = '';
|
|
41
42
|
this._inputClassName = '';
|
|
@@ -91,6 +92,27 @@ export class AFieldDescriptor extends AGenericFieldDescriptor {
|
|
|
91
92
|
get hiddenExpression() {
|
|
92
93
|
return this._hiddenExpression;
|
|
93
94
|
}
|
|
95
|
+
get updateOn() {
|
|
96
|
+
return this._updateOn;
|
|
97
|
+
}
|
|
98
|
+
get onInit() {
|
|
99
|
+
return this._onInit;
|
|
100
|
+
}
|
|
101
|
+
get onChanges() {
|
|
102
|
+
return this._onChanges;
|
|
103
|
+
}
|
|
104
|
+
get afterContentInit() {
|
|
105
|
+
return this._afterContentInit;
|
|
106
|
+
}
|
|
107
|
+
get afterViewInit() {
|
|
108
|
+
return this._afterViewInit;
|
|
109
|
+
}
|
|
110
|
+
get onDestroy() {
|
|
111
|
+
return this._onDestroy;
|
|
112
|
+
}
|
|
113
|
+
get onValueChange() {
|
|
114
|
+
return this._onValueChange;
|
|
115
|
+
}
|
|
94
116
|
get className() {
|
|
95
117
|
return this._className;
|
|
96
118
|
}
|
|
@@ -149,6 +171,34 @@ export class AFieldDescriptor extends AGenericFieldDescriptor {
|
|
|
149
171
|
this._hiddenExpression = hiddenExpression;
|
|
150
172
|
return this;
|
|
151
173
|
}
|
|
174
|
+
withUpdateOn(updateOn) {
|
|
175
|
+
this._updateOn = updateOn;
|
|
176
|
+
return this;
|
|
177
|
+
}
|
|
178
|
+
withOnInit(onInit) {
|
|
179
|
+
this._onInit = onInit;
|
|
180
|
+
return this;
|
|
181
|
+
}
|
|
182
|
+
withOnChanges(onChanges) {
|
|
183
|
+
this._onChanges = onChanges;
|
|
184
|
+
return this;
|
|
185
|
+
}
|
|
186
|
+
withAfterContentInit(afterContentInit) {
|
|
187
|
+
this._afterContentInit = afterContentInit;
|
|
188
|
+
return this;
|
|
189
|
+
}
|
|
190
|
+
withAfterViewInit(afterViewInit) {
|
|
191
|
+
this._afterViewInit = afterViewInit;
|
|
192
|
+
return this;
|
|
193
|
+
}
|
|
194
|
+
withOnDestroy(onDestroy) {
|
|
195
|
+
this._onDestroy = onDestroy;
|
|
196
|
+
return this;
|
|
197
|
+
}
|
|
198
|
+
withOnValueChange(onValueChange) {
|
|
199
|
+
this._onValueChange = onValueChange;
|
|
200
|
+
return this;
|
|
201
|
+
}
|
|
152
202
|
withDefaultValue(defaultValue) {
|
|
153
203
|
this._defaultValue = defaultValue;
|
|
154
204
|
return this;
|
|
@@ -226,6 +276,13 @@ export class AFieldDescriptor extends AGenericFieldDescriptor {
|
|
|
226
276
|
obj._defaultValue = this._defaultValue;
|
|
227
277
|
obj._requiredExpression = this._requiredExpression;
|
|
228
278
|
obj._hiddenExpression = this._hiddenExpression;
|
|
279
|
+
obj._updateOn = this._updateOn;
|
|
280
|
+
obj._onInit = this._onInit;
|
|
281
|
+
obj._onChanges = this._onChanges;
|
|
282
|
+
obj._onDestroy = this._onDestroy;
|
|
283
|
+
obj._afterContentInit = this._afterContentInit;
|
|
284
|
+
obj._afterViewInit = this._afterViewInit;
|
|
285
|
+
obj._onValueChange = this._onValueChange;
|
|
229
286
|
obj._disabledExpression = this._disabledExpression;
|
|
230
287
|
obj._className = this._className;
|
|
231
288
|
obj._size = this.size;
|
|
@@ -254,6 +311,7 @@ export class FieldInputDescriptor extends AFieldDescriptor {
|
|
|
254
311
|
// image specific properties
|
|
255
312
|
this._imagePreview = true;
|
|
256
313
|
this._imageUrlInputHiddenOnDisabled = false;
|
|
314
|
+
this._customComponentWrappers = [];
|
|
257
315
|
}
|
|
258
316
|
/**
|
|
259
317
|
* converts field to given type with additional arguments
|
|
@@ -373,6 +431,12 @@ export class FieldInputDescriptor extends AFieldDescriptor {
|
|
|
373
431
|
get customComponentName() {
|
|
374
432
|
return this._customComponentName;
|
|
375
433
|
}
|
|
434
|
+
get customComponentType() {
|
|
435
|
+
return this._customComponentType;
|
|
436
|
+
}
|
|
437
|
+
get customComponentWrappers() {
|
|
438
|
+
return this._customComponentWrappers;
|
|
439
|
+
}
|
|
376
440
|
get locale() {
|
|
377
441
|
return this._locale;
|
|
378
442
|
}
|
|
@@ -472,9 +536,17 @@ export class FieldInputDescriptor extends AFieldDescriptor {
|
|
|
472
536
|
this._imageUrlInputHiddenOnDisabled = inputVisibleOnDisabled;
|
|
473
537
|
return this;
|
|
474
538
|
}
|
|
475
|
-
asCustomComponent(
|
|
539
|
+
asCustomComponent(customComponent, useWrappers) {
|
|
476
540
|
this._fieldType = FieldInputTypeEnum.Custom;
|
|
477
|
-
|
|
541
|
+
if (typeof customComponent === 'string') {
|
|
542
|
+
this._customComponentName = customComponent;
|
|
543
|
+
}
|
|
544
|
+
else {
|
|
545
|
+
this._customComponentType = customComponent;
|
|
546
|
+
}
|
|
547
|
+
if (useWrappers) {
|
|
548
|
+
this._customComponentWrappers = useWrappers;
|
|
549
|
+
}
|
|
478
550
|
return this;
|
|
479
551
|
}
|
|
480
552
|
withNumberValidation(min, max, step, autoCorrect = true) {
|
|
@@ -542,6 +614,8 @@ export class FieldInputDescriptor extends AFieldDescriptor {
|
|
|
542
614
|
field._imagePreview = this._imagePreview;
|
|
543
615
|
field._imageUrlInputHiddenOnDisabled = this._imageUrlInputHiddenOnDisabled;
|
|
544
616
|
field._customComponentName = this._customComponentName;
|
|
617
|
+
field._customComponentType = this._customComponentType;
|
|
618
|
+
field._customComponentWrappers = this._customComponentWrappers;
|
|
545
619
|
field._locale = this._locale;
|
|
546
620
|
field._currency = this._currency;
|
|
547
621
|
field._currencyDisplay = this._currencyDisplay;
|
|
@@ -1006,4 +1080,4 @@ export class FieldGroupDescriptor extends AFieldGroupDescriptor {
|
|
|
1006
1080
|
return group;
|
|
1007
1081
|
}
|
|
1008
1082
|
}
|
|
1009
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQuZGVzY3JpcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZGVzY3JpcHRvcnMvZWRpdG9yL2ZpZWxkLmRlc2NyaXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFrQixVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUczRCxPQUFPLEVBQWEsT0FBTyxFQUFFLEVBQUUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUc3QyxPQUFPLEVBQUMsaUJBQWlCLEVBQW1ELE1BQU0sOEJBQThCLENBQUM7QUFFakgsT0FBTyxFQUEwQyxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRXhILE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNoRCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFbkQsT0FBTyxFQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUNyRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRSxPQUFPLEVBQUMsc0JBQXNCLEVBQW1CLE1BQU0sV0FBVyxDQUFDO0FBR25FLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNqRCxPQUFPLEVBQ0gsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQixtQkFBbUIsRUFDbkIseUJBQXlCLEVBQ3pCLHVCQUF1QixFQUN2QiwrQkFBK0IsRUFDL0IsNkJBQTZCLEVBQzdCLGFBQWEsRUFDaEIsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFDLHlCQUF5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SUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxTQUFTO1FBQ1osSUFBSSxDQUFDLEtBQUssR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUM7UUFDeEMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLElBQUk7UUFDUCxNQUFNLEtBQUssR0FBRyxJQUFJLG9CQUFvQixDQUFLLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3BHLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUN6QixLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDM0IsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQy9DLEtBQUssQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN6RCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1R5cGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRvcnN9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHtGb3JtbHlGaWVsZENvbmZpZ30gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQge09ic2VydmFibGUsIFN1YmplY3QsIG9mfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtNZWRpdXNRdWVyeVBhcmFtLCBNZWRpdXNRdWVyeVJlc3VsdH0gZnJvbSAnLi4vLi4vYXBpL21vZGVscyc7XG5pbXBvcnQge01uZ0Zvcm1GaWVsZEV2ZW50LCBNbmdGb3JtRmllbGRFdmVudERhdGEsIE1uZ0Zvcm1GaWVsZEV2ZW50VHlwZUVudW19IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZm9ybS9tb2RlbHMnO1xuaW1wb3J0IHtGaWVsZEFjdGlvbkNvbnRleHR9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZm9ybS9tb2RlbHMvZmllbGQtYWN0aW9uLWNvbnRleHQubW9kZWwnO1xuaW1wb3J0IHtJTG9va3VwRGF0YVByb3ZpZGVyLCBJVGFibGVEYXRhUHJvdmlkZXIsIExvb2t1cERhdGFQcm92aWRlciwgVGFibGV2aWV3RGF0YVByb3ZpZGVyfSBmcm9tICcuLi8uLi9kYXRhLXByb3ZpZGVycyc7XG5pbXBvcnQge0VudW1WYWx1ZX0gZnJvbSAnLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7TW5nQ29tbW9uc1NlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7QnV0dG9uU3R5bGVCdWlsZGVyfSBmcm9tICcuLi8uLi9zdHlsZXMnO1xuaW1wb3J0IHtTdHlsZUxldmVsRW51bX0gZnJvbSAnLi4vLi4vc3R5bGVzL21vZGVscyc7XG5pbXBvcnQge0NsYXNzVHlwZSwgRW51bUNvbnN0YW50VHlwZSwgRW51bVR5cGUsIE1uZ0ZpZWxkQXN5bmNWYWxpZGF0b3IsIE1uZ0ZpZWxkVmFsaWRhdGlvbk1lc3NhZ2UsIE1uZ0ZpZWxkVmFsaWRhdG9yfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQge0VudW1VdGlsLCBJMThuVXRpbHMsIE1vZGVsVXRpbCwgVHlwZVV0aWx9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7bWF4RGF0ZVZhbGlkYXRvciwgbWluRGF0ZVZhbGlkYXRvcn0gZnJvbSAnLi4vLi4vdmFsaWRhdG9ycyc7XG5pbXBvcnQge0FjdGlvbkJ1dHRvbkRlc2NyaXB0b3IsIEFjdGlvbkRlc2NyaXB0b3J9IGZyb20gJy4uL2FjdGlvbic7XG5pbXBvcnQge0ZpZWxkQ29uZmlnLCBGaWVsZExvb2t1cENvbmZpZywgSUxvb2t1cERlc2NyaXB0b3J9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHtUYWJsZURlc2NyaXB0b3J9IGZyb20gJy4uL3RhYmxlJztcbmltcG9ydCB7VGFibGV2aWV3RGVzY3JpcHRvcn0gZnJvbSAnLi4vdGFibGV2aWV3JztcbmltcG9ydCB7XG4gICAgRmllbGRHcm91cFR5cGVFbnVtLFxuICAgIEZpZWxkSW5wdXRUeXBlRW51bSxcbiAgICBGaWVsZExvb2t1cFR5cGVFbnVtLFxuICAgIEZpZWxkTWFueUVkaXRvckFjdGlvbkVudW0sXG4gICAgRmllbGRNYW55RWRpdG9yVHlwZUVudW0sXG4gICAgRmllbGRNYW55VG9NYW55RWRpdG9yQWN0aW9uRW51bSxcbiAgICBGaWVsZE1hbnlUb01hbnlFZGl0b3JUeXBlRW51bSxcbiAgICBGaWVsZFNpemVFbnVtXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7RWRpdG9yRGVzY3JpcHRvcn0gZnJvbSAnLi9lZGl0b3IuZGVzY3JpcHRvcic7XG5pbXBvcnQge0ZpZWxkVmFsaWRhdGlvbkRlc2NyaXB0b3J9IGZyb20gJy4vZmllbGQtdmFsaWRhdGlvbi5kZXNjcmlwdG9yJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFHZW5lcmljRmllbGREZXNjcmlwdG9yPEVUPiB7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9lZGl0b3I6IEVkaXRvckRlc2NyaXB0b3I8RVQ+O1xuICAgIHByb3RlY3RlZCBfY29uZmlnOiBGaWVsZENvbmZpZyA9IHt9O1xuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGVkaXRvcjogRWRpdG9yRGVzY3JpcHRvcjxFVD4pIHtcbiAgICAgICAgdGhpcy5fZWRpdG9yID0gZWRpdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZWRpdG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZWRpdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY29uZmlnKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQ29uZmlnKGNvbmZpZzogRmllbGRDb25maWcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fY29uZmlnID0gY29uZmlnO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBRmllbGREZXNjcmlwdG9yPFQsIEVULCBWVCA9IFQ+IGV4dGVuZHMgQUdlbmVyaWNGaWVsZERlc2NyaXB0b3I8RVQ+IHtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3Byb3BlcnR5OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9sYWJlbD86IHN0cmluZyB8IG51bGw7XG5cbiAgICBwcm90ZWN0ZWQgX3BsYWNlaG9sZGVyPzogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBfaGVscFRleHQ/OiBzdHJpbmc7XG5cbiAgICBwcm90ZWN0ZWQgX3JlcXVpcmVkID0gZmFsc2U7XG4gICAgcHJvdGVjdGVkIF9yZXF1aXJlZEhpZGVMYWJlbE1hcmtlciA9IGZhbHNlO1xuICAgIHByb3RlY3RlZCBfZGlzYWJsZWQgPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgX2RlZmF1bHRWYWx1ZT86IFZUO1xuICAgIHByb3RlY3RlZCBfZ2V0dGVyPzogKGl0ZW06IEVUKSA9PiBWVDtcbiAgICBwcm90ZWN0ZWQgX3NldHRlcj86IChpdGVtOiBFVCwgdmFsdWU6IFZUKSA9PiB2b2lkO1xuICAgIHByb3RlY3RlZCBfdmFsaWRhdGlvbnM6IEFycmF5PEZpZWxkVmFsaWRhdGlvbkRlc2NyaXB0b3I+ID0gW107XG4gICAgcHJvdGVjdGVkIF9hc3luY1ZhbGlkYXRpb25zOiBBcnJheTxGaWVsZFZhbGlkYXRpb25EZXNjcmlwdG9yPiA9IFtdO1xuICAgIHByb3RlY3RlZCBfcmVxdWlyZWRFeHByZXNzaW9uPzogc3RyaW5nIHwgKChmaWVsZD86IEZvcm1seUZpZWxkQ29uZmlnKSA9PiBib29sZWFuKSB8IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgcHJvdGVjdGVkIF9kaXNhYmxlZEV4cHJlc3Npb24/OiBzdHJpbmcgfCAoKGZpZWxkPzogRm9ybWx5RmllbGRDb25maWcpID0+IGJvb2xlYW4pIHwgT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICBwcm90ZWN0ZWQgX2hpZGRlbkV4cHJlc3Npb24/OiBzdHJpbmcgfCAoKGZpZWxkPzogRm9ybWx5RmllbGRDb25maWcpID0+IGJvb2xlYW4pIHwgT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuICAgIHByb3RlY3RlZCBfY2xhc3NOYW1lID0gJyc7XG4gICAgcHJvdGVjdGVkIF9maWVsZENsYXNzTmFtZT86IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgX2xhYmVsQ2xhc3NOYW1lID0gJyc7XG4gICAgcHJvdGVjdGVkIF9pbnB1dENsYXNzTmFtZSA9ICcnO1xuICAgIHByb3RlY3RlZCBfc2l6ZTogRmllbGRTaXplRW51bSA9IEZpZWxkU2l6ZUVudW0uTm9ybWFsO1xuXG4gICAgLy8gbG9jYWxpemF0aW9uXG4gICAgcHJvdGVjdGVkIF9pc0xvY2FsaXplZCA9IGZhbHNlO1xuICAgIHByb3RlY3RlZCBfbG9jYWxpemF0aW9uVGFibGV2aWV3PzogVGFibGV2aWV3RGVzY3JpcHRvcjxhbnk+O1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9ldmVudHNTdWJqZWN0ID0gbmV3IFN1YmplY3Q8TW5nRm9ybUZpZWxkRXZlbnQ8VCwgRVQ+PigpO1xuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGVkaXRvcjogRWRpdG9yRGVzY3JpcHRvcjxFVD4sIHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoZWRpdG9yKTtcbiAgICAgICAgdGhpcy5fcHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICAgICAgdGhpcy5fbGFiZWwgPSBJMThuVXRpbHMuVHlwZS5nZXRQcm9wZXJ0eUtleSh0aGlzLl9lZGl0b3IubW9kZWwuaTE4bkJhc2VLZXksIHByb3BlcnR5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsYWJlbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xhYmVsO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcGxhY2Vob2xkZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wbGFjZWhvbGRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhlbHBUZXh0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGVscFRleHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByZXF1aXJlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcmVxdWlyZWRIaWRlTGFiZWxNYXJrZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXF1aXJlZEhpZGVMYWJlbE1hcmtlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRpc2FibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkZWZhdWx0VmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBnZXR0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXR0ZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzZXR0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZXR0ZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB2YWxpZGF0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRpb25zO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYXN5bmNWYWxpZGF0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FzeW5jVmFsaWRhdGlvbnM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByZXF1aXJlZEV4cHJlc3Npb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXF1aXJlZEV4cHJlc3Npb247XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkaXNhYmxlZEV4cHJlc3Npb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZEV4cHJlc3Npb247XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoaWRkZW5FeHByZXNzaW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGlkZGVuRXhwcmVzc2lvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsYXNzTmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZpZWxkQ2xhc3NOYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmllbGRDbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsYWJlbENsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xhYmVsQ2xhc3NOYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaW5wdXRDbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnB1dENsYXNzTmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHNpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaXplO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbG9jYWxpemF0aW9uVGFibGV2aWV3KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxpemF0aW9uVGFibGV2aWV3O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNTaXplU21hbGwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaXplID09PSBGaWVsZFNpemVFbnVtLlNtYWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNTaXplTGFyZ2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaXplID09PSBGaWVsZFNpemVFbnVtLkxhcmdlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNMb2NhbGl6ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0xvY2FsaXplZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWJzdHJhY3QgY29weSgpOiBBRmllbGREZXNjcmlwdG9yPFQsIEVULCBWVD47XG5cbiAgICBwdWJsaWMgd2l0aExhYmVsKGxhYmVsOiBzdHJpbmcgfCBudWxsKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2xhYmVsID0gbGFiZWw7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUGxhY2Vob2xkZXIocGxhY2Vob2xkZXI6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9wbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEhlbHBUZXh0KGhlbHBUZXh0OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faGVscFRleHQgPSBoZWxwVGV4dDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhSZXF1aXJlZChyZXF1aXJlZCA9IHRydWUsIHJlcXVpcmVkRXhwcmVzc2lvbj86IHN0cmluZyB8ICgoZmllbGQ/OiBGb3JtbHlGaWVsZENvbmZpZykgPT4gYm9vbGVhbikgfCBPYnNlcnZhYmxlPGJvb2xlYW4+LCBoaWRlTGFiZWxNYXJrZXIgPSBmYWxzZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9yZXF1aXJlZCA9IHJlcXVpcmVkO1xuICAgICAgICBpZiAocmVxdWlyZWRFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9yZXF1aXJlZEV4cHJlc3Npb24gPSByZXF1aXJlZEV4cHJlc3Npb247XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcmVxdWlyZWRIaWRlTGFiZWxNYXJrZXIgPSBoaWRlTGFiZWxNYXJrZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRGlzYWJsZWQoZGlzYWJsZWQgPSB0cnVlLCBkaXNhYmxlZEV4cHJlc3Npb24/OiBzdHJpbmcgfCAoKGZpZWxkPzogRm9ybWx5RmllbGRDb25maWcpID0+IGJvb2xlYW4pIHwgT2JzZXJ2YWJsZTxib29sZWFuPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9kaXNhYmxlZCA9IGRpc2FibGVkO1xuICAgICAgICBpZiAoZGlzYWJsZWRFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9kaXNhYmxlZEV4cHJlc3Npb24gPSBkaXNhYmxlZEV4cHJlc3Npb247XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhIaWRkZW4oaGlkZGVuRXhwcmVzc2lvbjogc3RyaW5nIHwgKChmaWVsZD86IEZvcm1seUZpZWxkQ29uZmlnKSA9PiBib29sZWFuKSB8IE9ic2VydmFibGU8Ym9vbGVhbj4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faGlkZGVuRXhwcmVzc2lvbiA9IGhpZGRlbkV4cHJlc3Npb247XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRGVmYXVsdFZhbHVlKGRlZmF1bHRWYWx1ZTogVlQpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEdldHRlcihnZXR0ZXI6IChpdGVtOiBFVCkgPT4gVlQpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZ2V0dGVyID0gZ2V0dGVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFNldHRlcihzZXR0ZXI6IChpdGVtOiBFVCwgdmFsdWU6IFZUKSA9PiB2b2lkKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3NldHRlciA9IHNldHRlcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhWYWxpZGF0aW9uKG5hbWU6IHN0cmluZywgdmFsaWRhdG9yPzogTW5nRmllbGRWYWxpZGF0b3IsIG1lc3NhZ2U/OiBNbmdGaWVsZFZhbGlkYXRpb25NZXNzYWdlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRpb25zLnB1c2gobmV3IEZpZWxkVmFsaWRhdGlvbkRlc2NyaXB0b3IobmFtZSwgdmFsaWRhdG9yLCBtZXNzYWdlKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQXN5bmNWYWxpZGF0aW9uKG5hbWU6IHN0cmluZywgYXN5bmNWYWxpZGF0b3I/OiBNbmdGaWVsZEFzeW5jVmFsaWRhdG9yLCBtZXNzYWdlPzogTW5nRmllbGRWYWxpZGF0aW9uTWVzc2FnZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9hc3luY1ZhbGlkYXRpb25zLnB1c2gobmV3IEZpZWxkVmFsaWRhdGlvbkRlc2NyaXB0b3IobmFtZSwgYXN5bmNWYWxpZGF0b3IsIG1lc3NhZ2UpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhDbGFzc05hbWUoY2xhc3NOYW1lOiBzdHJpbmcsIGxhYmVsQ2xhc3NOYW1lID0gJycsIGlucHV0Q2xhc3NOYW1lID0gJycsIGZpZWxkQ2xhc3NOYW1lPzogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2NsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgICAgICAgdGhpcy5fbGFiZWxDbGFzc05hbWUgPSBsYWJlbENsYXNzTmFtZTtcbiAgICAgICAgdGhpcy5faW5wdXRDbGFzc05hbWUgPSBpbnB1dENsYXNzTmFtZTtcbiAgICAgICAgdGhpcy5fZmllbGRDbGFzc05hbWUgPSBmaWVsZENsYXNzTmFtZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhTaXplKHNpemU6IEZpZWxkU2l6ZUVudW0gPSBGaWVsZFNpemVFbnVtLk5vcm1hbCk6IHRoaXMge1xuICAgICAgICB0aGlzLl9zaXplID0gc2l6ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgYWRkcyBhbiBpY29uIHdpdGggdGV4dCBTaG93IGFsbCB0cmFuc2xhdGlvbnMgYWJvdmUgdGhlIGZpZWxkIGFuZCBhZnRlciBjbGlja2luZyBvbiBpdCwgaXQgZGlzcGxheXMgYSBuZXcgZGlhbG9nIHdpdGggdGFibGV2aWV3LlxuICAgICAqIFRoaXMgbmV3IHRhYmxlIHZpZXcgc2hvd3MgYWxsIGF2YWlsYWJsZSB0cmFuc2xhdGlvbnMgZm9yIHNwZWNpZmljIHByb3BlcnR5IGFuZCBhbGxvd3MgZWRpdGluZyBpdC5cbiAgICAgKiBAcGFyYW0gdGFibGV2aWV3IHdpdGggbG9va3VwIHByb3ZpZGVyIGZvciBsb2NhbGVzXG4gICAgICovXG4gICAgcHVibGljIGxvY2FsaXplZCh0YWJsZXZpZXc/OiBUYWJsZXZpZXdEZXNjcmlwdG9yPFQ+KTogdGhpcyB7XG4gICAgICAgIGlmICghdGhpcy5lZGl0b3IuaXNMb2NhbGl6ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yLmxvY2FsaXplZCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lzTG9jYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRhYmxldmlldykge1xuICAgICAgICAgICAgdGhpcy5fbG9jYWxpemF0aW9uVGFibGV2aWV3ID0gdGFibGV2aWV3O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbG9jYWxpemF0aW9uVGFibGV2aWV3RGVzY3JpcHRvciA9IG5ldyBUYWJsZXZpZXdEZXNjcmlwdG9yKHRoaXMuX2VkaXRvci5sb2NhbGl6YXRpb25CZWFuVHlwZSEpO1xuICAgICAgICAgICAgbG9jYWxpemF0aW9uVGFibGV2aWV3RGVzY3JpcHRvci5hZGRDb2x1bW4odGhpcy5fZWRpdG9yLmxvY2FsaXphdGlvbkxvY2FsZVByb3BlcnR5ISk7XG4gICAgICAgICAgICBsb2NhbGl6YXRpb25UYWJsZXZpZXdEZXNjcmlwdG9yLmFkZENvbHVtbih0aGlzLnByb3BlcnR5KTtcblxuICAgICAgICAgICAgbG9jYWxpemF0aW9uVGFibGV2aWV3RGVzY3JpcHRvclxuICAgICAgICAgICAgICAgIC5hZGRGaWVsZExvb2t1cCh0aGlzLl9lZGl0b3IubG9jYWxpemF0aW9uTG9jYWxlUHJvcGVydHkhLCBTdHJpbmcpXG4gICAgICAgICAgICAgICAgLndpdGhMb29rdXAoKHFwLCBzZXJ2aWNlKSA9PiBvZihzZXJ2aWNlIS5hcHBEYXRhTGFuZ3VhZ2VzKSwgTW5nQ29tbW9uc1NlcnZpY2UpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2VkaXRvci5sb2NhbGVMb29rdXApIHtcbiAgICAgICAgICAgICAgICBsb2NhbGl6YXRpb25UYWJsZXZpZXdEZXNjcmlwdG9yLmFkZEZpZWxkTG9va3VwKHRoaXMuX2VkaXRvci5sb2NhbGl6YXRpb25Mb2NhbGVQcm9wZXJ0eSEsIFN0cmluZykud2l0aExvb2t1cCgoKSA9PiB0aGlzLl9lZGl0b3IubG9jYWxlTG9va3VwISgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxvY2FsaXphdGlvblRhYmxldmlld0Rlc2NyaXB0b3IuYWRkRmllbGQodGhpcy5wcm9wZXJ0eSk7XG5cbiAgICAgICAgICAgIC8vIHRoaXMgaXMgdXNlZCBpbiB0YWJsZS5jb21wb25lbnQgdG8gbWFyayByb3cgd2l0aCBkZWZhdWx0IGRhdGEgbGFuZ3VhZ2VcbiAgICAgICAgICAgIGxvY2FsaXphdGlvblRhYmxldmlld0Rlc2NyaXB0b3IudGFibGUud2l0aExvY2FsaXphdGlvbkxvY2FsZVByb3BlcnR5KHRoaXMuX2VkaXRvci5sb2NhbGl6YXRpb25Mb2NhbGVQcm9wZXJ0eSEpO1xuXG4gICAgICAgICAgICB0aGlzLl9sb2NhbGl6YXRpb25UYWJsZXZpZXcgPSBuZXcgVGFibGV2aWV3RGVzY3JpcHRvcih0aGlzLl9lZGl0b3IubW9kZWwudHlwZSk7XG4gICAgICAgICAgICB0aGlzLl9sb2NhbGl6YXRpb25UYWJsZXZpZXcuYWRkRmllbGRNYW55RWRpdG9yKHRoaXMuX2VkaXRvci5sb2NhbGl6YXRpb25Mb2NhbGl6YXRpb25Qcm9wZXJ0eSEsIGxvY2FsaXphdGlvblRhYmxldmlld0Rlc2NyaXB0b3IpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZXh0RXZlbnQodHlwZTogTW5nRm9ybUZpZWxkRXZlbnRUeXBlRW51bSwgY21wVHlwZTogVHlwZTxhbnk+LCBjbXBJbnN0YW5jZTogYW55LCBkYXRhPzogTW5nRm9ybUZpZWxkRXZlbnREYXRhPFQsIEVUPikge1xuICAgICAgICB0aGlzLl9ldmVudHNTdWJqZWN0Lm5leHQobmV3IE1uZ0Zvcm1GaWVsZEV2ZW50KHR5cGUsIGNtcFR5cGUsIGNtcEluc3RhbmNlLCBkYXRhKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBldmVudHMkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnRzU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY29weUZpZWxkc1RvKG9iajogQUZpZWxkRGVzY3JpcHRvcjxULCBFVCwgVlQ+KSB7XG4gICAgICAgIG9iai5fbGFiZWwgPSB0aGlzLl9sYWJlbDtcbiAgICAgICAgb2JqLl9wbGFjZWhvbGRlciA9IHRoaXMuX3BsYWNlaG9sZGVyO1xuICAgICAgICBvYmouX2hlbHBUZXh0ID0gdGhpcy5faGVscFRleHQ7XG4gICAgICAgIG9iai5fcmVxdWlyZWQgPSB0aGlzLl9yZXF1aXJlZDtcbiAgICAgICAgb2JqLl9kaXNhYmxlZCA9IHRoaXMuX2Rpc2FibGVkO1xuICAgICAgICBvYmouX2RlZmF1bHRWYWx1ZSA9IHRoaXMuX2RlZmF1bHRWYWx1ZTtcbiAgICAgICAgb2JqLl9yZXF1aXJlZEV4cHJlc3Npb24gPSB0aGlzLl9yZXF1aXJlZEV4cHJlc3Npb247XG4gICAgICAgIG9iai5faGlkZGVuRXhwcmVzc2lvbiA9IHRoaXMuX2hpZGRlbkV4cHJlc3Npb247XG4gICAgICAgIG9iai5fZGlzYWJsZWRFeHByZXNzaW9uID0gdGhpcy5fZGlzYWJsZWRFeHByZXNzaW9uO1xuICAgICAgICBvYmouX2NsYXNzTmFtZSA9IHRoaXMuX2NsYXNzTmFtZTtcbiAgICAgICAgb2JqLl9zaXplID0gdGhpcy5zaXplO1xuICAgICAgICBvYmouX2dldHRlciA9IHRoaXMuX2dldHRlcjtcbiAgICAgICAgb2JqLl9zZXR0ZXIgPSB0aGlzLl9zZXR0ZXI7XG4gICAgICAgIG9iai5faXNMb2NhbGl6ZWQgPSB0aGlzLl9pc0xvY2FsaXplZDtcbiAgICAgICAgb2JqLl9sb2NhbGl6YXRpb25UYWJsZXZpZXcgPSB0aGlzLl9sb2NhbGl6YXRpb25UYWJsZXZpZXc/LmNvcHkoKTtcbiAgICAgICAgb2JqLl92YWxpZGF0aW9ucyA9IHRoaXMuX3ZhbGlkYXRpb25zLm1hcCh2YWx1ZSA9PiB2YWx1ZS5jb3B5KCkpO1xuICAgICAgICBvYmouX2FzeW5jVmFsaWRhdGlvbnMgPSB0aGlzLl9hc3luY1ZhbGlkYXRpb25zLm1hcCh2YWx1ZSA9PiB2YWx1ZS5jb3B5KCkpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEZpZWxkSW5wdXREZXNjcmlwdG9yPEVUPiBleHRlbmRzIEFGaWVsZERlc2NyaXB0b3I8c3RyaW5nIHwgc3RyaW5nW10gfCBudW1iZXIgfCBib29sZWFuIHwgRGF0ZSB8IEZpbGUgfCBGaWxlW10sIEVUPiB7XG4gICAgcHJpdmF0ZSBfZmllbGRUeXBlOiBGaWVsZElucHV0VHlwZUVudW0gPSBGaWVsZElucHV0VHlwZUVudW0uVGV4dDtcblxuICAgIC8vIHRleHRhcmVhIHNwZWNpZmljIHByb3BlcnRpZXNcbiAgICBwcml2YXRlIF9yb3dzPzogbnVtYmVyO1xuXG4gICAgLy8gbnVtYmVyIHNwZWNpZmljIHByb3BlcnRpZXNcbiAgICBwcml2YXRlIF9udW1iZXJNaW4/OiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfbnVtYmVyTWF4PzogbnVtYmVyO1xuICAgIHByaXZhdGUgX251bWJlclN0ZXA/OiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfbnVtYmVyQXV0b0NvcnJlY3QgPSB0cnVlO1xuICAgIHByaXZhdGUgX251bWJlck1pbkZyYWN0aW9uRGlnaXRzPzogbnVtYmVyO1xuICAgIHByaXZhdGUgX251bWJlck1heEZyYWN0aW9uRGlnaXRzPzogbnVtYmVyO1xuICAgIHByaXZhdGUgX251bWJlclVzZUdyb3VwaW5nID0gdHJ1ZTtcbiAgICBwcml2YXRlIF9sb2NhbGU/OiBzdHJpbmc7XG5cbiAgICAvLyBjdXJyZW5jeSBzcGVjaWZpYyBwcm9wZXJ0aWVzXG4gICAgcHJpdmF0ZSBfY3VycmVuY3k/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfY3VycmVuY3lEaXNwbGF5OiAnc3ltYm9sJyB8ICdjb2RlJyB8ICduYW1lJyA9ICdzeW1ib2wnO1xuICAgIHByaXZhdGUgX2N1cnJlbmN5RnJvbVByb3BlcnR5Pzogc3RyaW5nO1xuXG4gICAgLy8gcmFkaW8gc3BlY2lmaWMgcHJvcGVydGllc1xuICAgIHByaXZhdGUgX3JhZGlvT3B0aW9uczogQXJyYXk8RW51bVZhbHVlPHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBEYXRlPj4gPSBbXTtcblxuICAgIC8vIGRhdGVwaWNrZXIgc3BlY2lmaWMgcHJvcGVydGllc1xuICAgIHByaXZhdGUgX2RhdGVQaWNrZXJGb3JtYXQ/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfZGF0ZVBpY2tlck1pbj86IERhdGU7XG4gICAgcHJpdmF0ZSBfZGF0ZVBpY2tlck1heD86IERhdGU7XG4gICAgcHJpdmF0ZSBfZGF0ZVBpY2tlclNob3dUaW1lID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfZGF0ZVBpY2tlclNob3dTZWNvbmRzID0gdHJ1ZTtcblxuICAgIC8vIGlucHV0IHNwZWNpZmljIHByb3BlcnRpZXNcbiAgICBwcml2YXRlIF9tYXhMZW5ndGg/OiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfbWluTGVuZ3RoPzogbnVtYmVyO1xuICAgIHByaXZhdGUgX3BhdHRlcm4/OiBzdHJpbmcgfCBSZWdFeHA7XG5cbiAgICAvLyBtYXNrIHNwZWNpZmljIHByb3BlcnRpZXNcbiAgICBwcml2YXRlIF9tYXNrPzogc3RyaW5nO1xuICAgIHByaXZhdGUgX3Nsb3RDaGFyPzogc3RyaW5nO1xuXG4gICAgLy8gZmlsZSBzcGVjaWZpYyBwcm9wZXJ0aWVzXG4gICAgcHJpdmF0ZSBfZmlsZU11bHRpcGxlID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfZmlsZU1heEZpbGVTaXplID0gNTAwMDAwO1xuICAgIHByaXZhdGUgX2ZpbGVBY2NlcHQ/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfZmlsZU9uU2VsZWN0SGFuZGxlcj86IChmaWxlOiBGaWxlW10gfCBudWxsLCBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHZvaWQ7XG5cbiAgICAvLyBpbWFnZSBzcGVjaWZpYyBwcm9wZXJ0aWVzXG4gICAgcHJpdmF0ZSBfaW1hZ2VQcmV2aWV3ID0gdHJ1ZTtcbiAgICBwcml2YXRlIF9pbWFnZVVybElucHV0SGlkZGVuT25EaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgLy8gY3VzdG9tIGNvbXBvbmVudCBwcm9wZXJ0aWVzXG4gICAgcHJpdmF0ZSBfY3VzdG9tQ29tcG9uZW50TmFtZT86IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKGVkaXRvcjogRWRpdG9yRGVzY3JpcHRvcjxFVD4sIHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoZWRpdG9yLCBwcm9wZXJ0eSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY29udmVydHMgZmllbGQgdG8gZ2l2ZW4gdHlwZSB3aXRoIGFkZGl0aW9uYWwgYXJndW1lbnRzXG4gICAgICogQHBhcmFtIGZpZWxkVHlwZSBmaWVsZCB0eXBlIGVudW1cbiAgICAgKiBAcGFyYW0gYXJncyBhbnkgYWRkaXRpb25hbCBhcmd1bWVudHMgZm9yIGZpZWxkIChvcHRpb25hbClcbiAgICAgKi9cbiAgICBwdWJsaWMgYXNUeXBlKGZpZWxkVHlwZTogRmllbGRJbnB1dFR5cGVFbnVtLCAuLi5hcmdzOiBhbnlbXSk6IHRoaXMge1xuICAgICAgICBzd2l0Y2ggKGZpZWxkVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBGaWVsZElucHV0VHlwZUVudW0uSGlkZGVuOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFzSGlkZGVuKCk7XG4gICAgICAgICAgICBjYXNlIEZpZWxkSW5wdXRUeXBlRW51bS5MYWJlbDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hc0xhYmVsKCk7XG4gICAgICAgICAgICBjYXNlIEZpZWxkSW5wdXRUeXBlRW51bS5UZXh0YXJlYTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hc1RleHRhcmVhKC4uLmFyZ3MpO1xuICAgICAgICAgICAgY2FzZSBGaWVsZElucHV0VHlwZUVudW0uTnVtYmVyOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFzTnVtYmVyKCk7XG4gICAgICAgICAgICBjYXNlIEZpZWxkSW5wdXRUeXBlRW51bS5DdXJyZW5jeTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hc0N1cnJlbmN5KC4uLmFyZ3MpO1xuICAgICAgICAgICAgY2FzZSBGaWVsZElucHV0VHlwZUVudW0uU3dpdGNoOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFzU3dpdGNoKCk7XG4gICAgICAgICAgICBjYXNlIEZpZWxkSW5wdXRUeXBlRW51bS5SYWRpbzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hc1JhZGlvKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICAgICAgY2FzZSBGaWVsZElucHV0VHlwZUVudW0uRGF0ZXBpY2tlcjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hc0RhdGVQaWNrZXIoLi4uYXJncyk7XG4gICAgICAgICAgICBjYXNlIEZpZWxkSW5wdXRUeXBlRW51bS5NYXNrOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFzTWFzayhhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgICAgIGNhc2UgRmllbGRJbnB1dFR5cGVFbnVtLkZpbGU6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXNGaWxlKC4uLmFyZ3MpO1xuICAgICAgICAgICAgY2FzZSBGaWVsZElucHV0VHlwZUVudW0uSW1hZ2VGaWxlOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFzSW1hZ2VGaWxlKCk7XG4gICAgICAgICAgICBjYXNlIEZpZWxkSW5wdXRUeXBlRW51bS5JbWFnZVVybDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hc0ltYWdlVXJsKCk7XG4gICAgICAgICAgICBjYXNlIEZpZWxkSW5wdXRUeXBlRW51bS5DdXN0b206XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXNDdXN0b21Db21wb25lbnQoYXJnc1swXSk7XG4gICAgICAgICAgICBjYXNlIEZpZWxkSW5wdXRUeXBlRW51bS5UZXh0OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFzVGV4dCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBmaWVsZFR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWVsZFR5cGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByb3dzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm93cztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG51bWJlck1pbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX251bWJlck1pbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG51bWJlck1heCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX251bWJlck1heDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG51bWJlclN0ZXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9udW1iZXJTdGVwO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbnVtYmVyQXV0b0NvcnJlY3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9udW1iZXJBdXRvQ29ycmVjdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG51bWJlck1pbkZyYWN0aW9uRGlnaXRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbnVtYmVyTWluRnJhY3Rpb25EaWdpdHM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBudW1iZXJNYXhGcmFjdGlvbkRpZ2l0cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX251bWJlck1heEZyYWN0aW9uRGlnaXRzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbnVtYmVyVXNlR3JvdXBpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9udW1iZXJVc2VHcm91cGluZztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJhZGlvT3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JhZGlvT3B0aW9ucztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRhdGVQaWNrZXJGb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlUGlja2VyRm9ybWF0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGF0ZVBpY2tlck1pbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVQaWNrZXJNaW47XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkYXRlUGlja2VyTWF4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVBpY2tlck1heDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRhdGVQaWNrZXJTaG93VGltZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVQaWNrZXJTaG93VGltZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRhdGVQaWNrZXJTaG93U2Vjb25kcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVQaWNrZXJTaG93U2Vjb25kcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1heExlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21heExlbmd0aDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1pbkxlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21pbkxlbmd0aDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYXR0ZXJuO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbWFzaygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21hc2s7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzbG90Q2hhcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Nsb3RDaGFyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZmlsZU11bHRpcGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmlsZU11bHRpcGxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZmlsZU1heEZpbGVTaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmlsZU1heEZpbGVTaXplO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZmlsZUFjY2VwdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbGVBY2NlcHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBmaWxlT25TZWxlY3RIYW5kbGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmlsZU9uU2VsZWN0SGFuZGxlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGltYWdlUHJldmlldygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ltYWdlUHJldmlldztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGltYWdlVXJsSW5wdXRWaXNpYmxlT25EaXNhYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ltYWdlVXJsSW5wdXRIaWRkZW5PbkRpc2FibGVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY3VzdG9tQ29tcG9uZW50TmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1c3RvbUNvbXBvbmVudE5hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsb2NhbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjdXJyZW5jeSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbmN5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY3VycmVuY3lGcm9tUHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW5jeUZyb21Qcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGN1cnJlbmN5RGlzcGxheSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbmN5RGlzcGxheTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNIaWRkZW4oKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ZpZWxkVHlwZSA9IEZpZWxkSW5wdXRUeXBlRW51bS5IaWRkZW47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc0xhYmVsKCk6IHRoaXMge1xuICAgICAgICB0aGlzLl9maWVsZFR5cGUgPSBGaWVsZElucHV0VHlwZUVudW0uTGFiZWw7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc1RleHQoKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ZpZWxkVHlwZSA9IEZpZWxkSW5wdXRUeXBlRW51bS5UZXh0O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNUZXh0YXJlYShyb3dzID0gMyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9maWVsZFR5cGUgPSBGaWVsZElucHV0VHlwZUVudW0uVGV4dGFyZWE7XG4gICAgICAgIHRoaXMuX3Jvd3MgPSByb3dzO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNOdW1iZXIoKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ZpZWxkVHlwZSA9IEZpZWxkSW5wdXRUeXBlRW51bS5OdW1iZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc0N1cnJlbmN5KGN1cnJlbmN5RnJvbVByb3BlcnR5Pzogc3RyaW5nLCBjdXJyZW5jeT86IHN0cmluZywgY3VycmVuY3lEaXNwbGF5PzogJ3N5bWJvbCcgfCAnY29kZScgfCAnbmFtZScpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZmllbGRUeXBlID0gRmllbGRJbnB1dFR5cGVFbnVtLkN1cnJlbmN5O1xuICAgICAgICB0aGlzLl9jdXJyZW5jeUZyb21Qcm9wZXJ0eSA9IGN1cnJlbmN5RnJvbVByb3BlcnR5O1xuICAgICAgICB0aGlzLl9jdXJyZW5jeSA9IGN1cnJlbmN5ID8/IHRoaXMuX2N1cnJlbmN5O1xuICAgICAgICB0aGlzLl9jdXJyZW5jeURpc3BsYXkgPSBjdXJyZW5jeURpc3BsYXkgPz8gdGhpcy5fY3VycmVuY3lEaXNwbGF5O1xuICAgICAgICByZXR1cm4gdGhpcy53aXRoTnVtYmVyRnJhY3Rpb25zKDIsIDIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc1N3aXRjaCgpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZmllbGRUeXBlID0gRmllbGRJbnB1dFR5cGVFbnVtLlN3aXRjaDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzUmFkaW8ob3B0aW9uczogQXJyYXk8c3RyaW5nIHwgbnVtYmVyPiwgb3B0aW9uc1RpdGxlUGF0aD86IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9maWVsZFR5cGUgPSBGaWVsZElucHV0VHlwZUVudW0uUmFkaW87XG4gICAgICAgIHRoaXMuX3JhZGlvT3B0aW9ucyA9IG9wdGlvbnMubWFwKG8gPT4gPEVudW1WYWx1ZTxzdHJpbmcgfCBudW1iZXI+Pnt2YWx1ZTogbywgdGl0bGU6IGAke29wdGlvbnNUaXRsZVBhdGggPyBgJHtvcHRpb25zVGl0bGVQYXRofS5gIDogJyd9JHtvfWB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzUmFkaW9Gcm9tRW51bShlbnVtVHlwZTogRW51bVR5cGUsIG9wdGlvbnNUaXRsZVBhdGg/OiBzdHJpbmcgfCBudWxsLCB2YWx1ZXM/OiBBcnJheTxFbnVtQ29uc3RhbnRUeXBlPiwgbmFtZUFzVmFsdWUgPSBmYWxzZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9maWVsZFR5cGUgPSBGaWVsZElucHV0VHlwZUVudW0uUmFkaW87XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc1RpdGxlUGF0aCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIG9wdGlvbnNUaXRsZVBhdGggPSBUeXBlVXRpbC5maW5kRW51bU5hbWUoZW51bVR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3JhZGlvT3B0aW9ucyA9IEFycmF5LmlzQXJyYXkodmFsdWVzKVxuICAgICAgICAgICAgPyBFbnVtVXRpbC5mcm9tVmFsdWVzQXNFbnVtVmFsdWVBcnJheShlbnVtVHlwZSwgdmFsdWVzLCBuYW1lQXNWYWx1ZSwgb3B0aW9uc1RpdGxlUGF0aCA/PyB1bmRlZmluZWQpXG4gICAgICAgICAgICA6IEVudW1VdGlsLmZyb21Db25zdGFudHNBc0VudW1WYWx1ZUFycmF5KGVudW1UeXBlLCBuYW1lQXNWYWx1ZSwgb3B0aW9uc1RpdGxlUGF0aCA/PyB1bmRlZmluZWQpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNEYXRlUGlja2VyKGZvcm1hdD86IHN0cmluZywgbWluPzogRGF0ZSwgbWF4PzogRGF0ZSwgc2hvd1RpbWU/OiBib29sZWFuLCBzaG93U2Vjb25kcz86IGJvb2xlYW4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZmllbGRUeXBlID0gRmllbGRJbnB1dFR5cGVFbnVtLkRhdGVwaWNrZXI7XG4gICAgICAgIHRoaXMuX2RhdGVQaWNrZXJGb3JtYXQgPSBmb3JtYXQ7XG4gICAgICAgIHRoaXMuX2RhdGVQaWNrZXJNaW4gPSBtaW47XG4gICAgICAgIHRoaXMuX2RhdGVQaWNrZXJNYXggPSBtYXg7XG4gICAgICAgIHRoaXMuX2RhdGVQaWNrZXJTaG93VGltZSA9IHNob3dUaW1lID8/IGZhbHNlO1xuICAgICAgICB0aGlzLl9kYXRlUGlja2VyU2hvd1NlY29uZHMgPSBzaG93U2Vjb25kcyA/PyB0cnVlO1xuXG4gICAgICAgIGlmIChtaW4gIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLndpdGhWYWxpZGF0aW9uKCdtaW5EYXRlJywgbWluRGF0ZVZhbGlkYXRvcihtaW4pKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMud2l0aFZhbGlkYXRpb24oJ21heERhdGUnLCBtYXhEYXRlVmFsaWRhdG9yKG1heCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzTWFzayhtYXNrOiBzdHJpbmcsIHNsb3RDaGFyOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZmllbGRUeXBlID0gRmllbGRJbnB1dFR5cGVFbnVtLk1hc2s7XG4gICAgICAgIHRoaXMuX21hc2sgPSBtYXNrO1xuICAgICAgICB0aGlzLl9zbG90Q2hhciA9IHNsb3RDaGFyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNGaWxlKG11bHRpcGxlID0gZmFsc2UsIG1heEZpbGVTaXplID0gNTAwMDAwLCBhY2NlcHQ/OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZmllbGRUeXBlID0gRmllbGRJbnB1dFR5cGVFbnVtLkZpbGU7XG4gICAgICAgIHRoaXMuX2ZpbGVNdWx0aXBsZSA9IG11bHRpcGxlO1xuICAgICAgICB0aGlzLl9maWxlTWF4RmlsZVNpemUgPSBtYXhGaWxlU2l6ZTtcbiAgICAgICAgdGhpcy5fZmlsZUFjY2VwdCA9IGFjY2VwdDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzSW1hZ2VGaWxlKG11bHRpcGxlID0gZmFsc2UsIG1heEZpbGVTaXplID0gNTAwMDAwLCBhY2NlcHQgPSAnaW1hZ2UvKicpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5hc0ZpbGUobXVsdGlwbGUsIG1heEZpbGVTaXplLCBhY2NlcHQpO1xuICAgICAgICB0aGlzLl9maWVsZFR5cGUgPSBGaWVsZElucHV0VHlwZUVudW0uSW1hZ2VGaWxlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNJbWFnZVVybChtdWx0aXBsZSA9IGZhbHNlLCBwcmV2aWV3ID0gdHJ1ZSwgaW5wdXRWaXNpYmxlT25EaXNhYmxlZCA9IHRydWUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZmllbGRUeXBlID0gRmllbGRJbnB1dFR5cGVFbnVtLkltYWdlVXJsO1xuICAgICAgICB0aGlzLl9maWxlTXVsdGlwbGUgPSBtdWx0aXBsZTtcbiAgICAgICAgdGhpcy5faW1hZ2VQcmV2aWV3ID0gcHJldmlldztcbiAgICAgICAgdGhpcy5faW1hZ2VVcmxJbnB1dEhpZGRlbk9uRGlzYWJsZWQgPSBpbnB1dFZpc2libGVPbkRpc2FibGVkO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNDdXN0b21Db21wb25lbnQoY3VzdG9tQ29tcG9uZW50TmFtZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ZpZWxkVHlwZSA9IEZpZWxkSW5wdXRUeXBlRW51bS5DdXN0b207XG4gICAgICAgIHRoaXMuX2N1c3RvbUNvbXBvbmVudE5hbWUgPSBjdXN0b21Db21wb25lbnROYW1lO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aE51bWJlclZhbGlkYXRpb24obWluPzogbnVtYmVyLCBtYXg/OiBudW1iZXIsIHN0ZXA/OiBudW1iZXIsIGF1dG9Db3JyZWN0ID0gdHJ1ZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9udW1iZXJTdGVwID0gc3RlcCA/PyB0aGlzLl9udW1iZXJTdGVwO1xuICAgICAgICB0aGlzLl9udW1iZXJBdXRvQ29ycmVjdCA9IGF1dG9Db3JyZWN0O1xuICAgICAgICB0aGlzLl9udW1iZXJNaW4gPSBtaW4gPz8gdGhpcy5fbnVtYmVyTWluID8/IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSO1xuICAgICAgICB0aGlzLl9udW1iZXJNYXggPSBtYXggPz8gdGhpcy5fbnVtYmVyTWF4ID8/IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aExvY2FsZShsb2NhbGU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9sb2NhbGUgPSBsb2NhbGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoTnVtYmVyRnJhY3Rpb25zKG1pbj86IG51bWJlciwgbWF4PzogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX251bWJlck1pbkZyYWN0aW9uRGlnaXRzID0gbWluO1xuICAgICAgICB0aGlzLl9udW1iZXJNYXhGcmFjdGlvbkRpZ2l0cyA9IG1heDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhOdW1iZXJHcm91cGluZyh1c2VHcm91cGluZyA9IHRydWUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fbnVtYmVyVXNlR3JvdXBpbmcgPSB1c2VHcm91cGluZztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhUZXh0VmFsaWRhdGlvbihtaW5MZW5ndGg/OiBudW1iZXIsIG1heExlbmd0aD86IG51bWJlciwgcGF0dGVybj86IHN0cmluZyB8IFJlZ0V4cCk6IHRoaXMge1xuICAgICAgICB0aGlzLl9taW5MZW5ndGggPSBtaW5MZW5ndGg7XG4gICAgICAgIHRoaXMuX21heExlbmd0aCA9IG1heExlbmd0aDtcbiAgICAgICAgdGhpcy5fcGF0dGVybiA9IHBhdHRlcm47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoVGV4dFZhbGlkYXRpb25FbWFpbCgpOiB0aGlzIHtcbiAgICAgICAgaWYgKHRoaXMuZmllbGRUeXBlID09PSBGaWVsZElucHV0VHlwZUVudW0uVGV4dCkge1xuICAgICAgICAgICAgdGhpcy53aXRoVmFsaWRhdGlvbignZW1haWwnLCBWYWxpZGF0b3JzLmVtYWlsKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEZpbGVPblNlbGVjdEhhbmRsZXIoZm46IChmaWxlOiBGaWxlW10gfCBudWxsLCBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHZvaWQpIHtcbiAgICAgICAgdGhpcy5fZmlsZU9uU2VsZWN0SGFuZGxlciA9IGZuO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb3B5KCk6IEZpZWxkSW5wdXREZXNjcmlwdG9yPEVUPiB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gbmV3IEZpZWxkSW5wdXREZXNjcmlwdG9yPEVUPih0aGlzLl9lZGl0b3IsIHRoaXMuX3Byb3BlcnR5KTtcbiAgICAgICAgdGhpcy5jb3B5RmllbGRzVG8oZmllbGQpO1xuICAgICAgICBmaWVsZC5fZmllbGRUeXBlID0gdGhpcy5fZmllbGRUeXBlO1xuICAgICAgICBmaWVsZC5fcm93cyA9IHRoaXMuX3Jvd3M7XG4gICAgICAgIGZpZWxkLl9udW1iZXJNaW4gPSB0aGlzLl9udW1iZXJNaW47XG4gICAgICAgIGZpZWxkLl9udW1iZXJNYXggPSB0aGlzLl9udW1iZXJNYXg7XG4gICAgICAgIGZpZWxkLl9udW1iZXJTdGVwID0gdGhpcy5fbnVtYmVyU3RlcDtcbiAgICAgICAgZmllbGQuX251bWJlckF1dG9Db3JyZWN0ID0gdGhpcy5fbnVtYmVyQXV0b0NvcnJlY3Q7XG4gICAgICAgIGZpZWxkLl9udW1iZXJNaW5GcmFjdGlvbkRpZ2l0cyA9IHRoaXMuX251bWJlck1pbkZyYWN0aW9uRGlnaXRzO1xuICAgICAgICBmaWVsZC5fbnVtYmVyTWF4RnJhY3Rpb25EaWdpdHMgPSB0aGlzLl9udW1iZXJNYXhGcmFjdGlvbkRpZ2l0cztcbiAgICAgICAgZmllbGQuX251bWJlclVzZUdyb3VwaW5nID0gdGhpcy5fbnVtYmVyVXNlR3JvdXBpbmc7XG4gICAgICAgIGZpZWxkLl9yYWRpb09wdGlvbnMgPSBbLi4udGhpcy5fcmFkaW9PcHRpb25zXTtcbiAgICAgICAgZmllbGQuX2RhdGVQaWNrZXJGb3JtYXQgPSB0aGlzLl9kYXRlUGlja2VyRm9ybWF0O1xuICAgICAgICBmaWVsZC5fZGF0ZVBpY2tlck1pbiA9IHRoaXMuX2RhdGVQaWNrZXJNaW47XG4gICAgICAgIGZpZWxkLl9kYXRlUGlja2VyTWF4ID0gdGhpcy5fZGF0ZVBpY2tlck1heDtcbiAgICAgICAgZmllbGQuX2RhdGVQaWNrZXJTaG93VGltZSA9IHRoaXMuX2RhdGVQaWNrZXJTaG93VGltZTtcbiAgICAgICAgZmllbGQuX2RhdGVQaWNrZXJTaG93U2Vjb25kcyA9IHRoaXMuX2RhdGVQaWNrZXJTaG93U2Vjb25kcztcbiAgICAgICAgZmllbGQuX21heExlbmd0aCA9IHRoaXMuX21heExlbmd0aDtcbiAgICAgICAgZmllbGQuX21pbkxlbmd0aCA9IHRoaXMuX21pbkxlbmd0aDtcbiAgICAgICAgZmllbGQuX3BhdHRlcm4gPSB0aGlzLl9wYXR0ZXJuO1xuICAgICAgICBmaWVsZC5fbWFzayA9IHRoaXMuX21hc2s7XG4gICAgICAgIGZpZWxkLl9zbG90Q2hhciA9IHRoaXMuX3Nsb3RDaGFyO1xuICAgICAgICBmaWVsZC5fZmlsZU11bHRpcGxlID0gdGhpcy5fZmlsZU11bHRpcGxlO1xuICAgICAgICBmaWVsZC5fZmlsZU1heEZpbGVTaXplID0gdGhpcy5fZmlsZU1heEZpbGVTaXplO1xuICAgICAgICBmaWVsZC5fZmlsZUFjY2VwdCA9IHRoaXMuX2ZpbGVBY2NlcHQ7XG4gICAgICAgIGZpZWxkLl9maWxlT25TZWxlY3RIYW5kbGVyID0gdGhpcy5fZmlsZU9uU2VsZWN0SGFuZGxlcjtcbiAgICAgICAgZmllbGQuX2ltYWdlUHJldmlldyA9IHRoaXMuX2ltYWdlUHJldmlldztcbiAgICAgICAgZmllbGQuX2ltYWdlVXJsSW5wdXRIaWRkZW5PbkRpc2FibGVkID0gdGhpcy5faW1hZ2VVcmxJbnB1dEhpZGRlbk9uRGlzYWJsZWQ7XG4gICAgICAgIGZpZWxkLl9jdXN0b21Db21wb25lbnROYW1lID0gdGhpcy5fY3VzdG9tQ29tcG9uZW50TmFtZTtcbiAgICAgICAgZmllbGQuX2xvY2FsZSA9IHRoaXMuX2xvY2FsZTtcbiAgICAgICAgZmllbGQuX2N1cnJlbmN5ID0gdGhpcy5fY3VycmVuY3k7XG4gICAgICAgIGZpZWxkLl9jdXJyZW5jeURpc3BsYXkgPSB0aGlzLl9jdXJyZW5jeURpc3BsYXk7XG4gICAgICAgIGZpZWxkLl9jdXJyZW5jeUZyb21Qcm9wZXJ0eSA9IHRoaXMuX2N1cnJlbmN5RnJvbVByb3BlcnR5O1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRmllbGRBY3Rpb25EZXNjcmlwdG9yPEVUPiBleHRlbmRzIEFGaWVsZERlc2NyaXB0b3I8dm9pZCwgRVQ+IHtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2ZpZWxkQWN0aW9uTmFtZTogc3RyaW5nO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfZmllbGRBY3Rpb25OYW1lTG9uZzogc3RyaW5nO1xuXG4gICAgcHJvdGVjdGVkIF9idXR0b24gPSBuZXcgQWN0aW9uQnV0dG9uRGVzY3JpcHRvcigpO1xuXG4gICAgcHJvdGVjdGVkIF9ydW5GdW5jdGlvbj86IChjdHg6IEZpZWxkQWN0aW9uQ29udGV4dDxFVD4pID0+IHZvaWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihlZGl0b3I6IEVkaXRvckRlc2NyaXB0b3I8RVQ+LCBwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKGVkaXRvciwgcHJvcGVydHkpO1xuICAgICAgICB0aGlzLl9maWVsZEFjdGlvbk5hbWUgPSBwcm9wZXJ0eTtcbiAgICAgICAgbGV0IGRpc3BsYXlOYW1lID0gcHJvcGVydHk7XG4gICAgICAgIGlmICh0aGlzLl9lZGl0b3IubW9kZWwpIGRpc3BsYXlOYW1lID0gYCR7dGhpcy5fZWRpdG9yLm1vZGVsLnR5cGVOYW1lfS4ke2Rpc3BsYXlOYW1lfWA7XG4gICAgICAgIHRoaXMuX2ZpZWxkQWN0aW9uTmFtZUxvbmcgPSBkaXNwbGF5TmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGJ1dHRvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2J1dHRvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJ1bkZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnVuRnVuY3Rpb247XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhCdXR0b25EZXNjcmlwdG9yKGJ1dHRvbjogQWN0aW9uQnV0dG9uRGVzY3JpcHRvcik6IHRoaXMge1xuICAgICAgICB0aGlzLl9idXR0b24gPSBidXR0b247XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQnV0dG9uKGxhYmVsPzogc3RyaW5nIHwgbnVsbCwgaWNvbjogc3RyaW5nIHwgbnVsbCA9IG51bGwsIHN0eWxlTGV2ZWwgPSBTdHlsZUxldmVsRW51bS5EZWZhdWx0LCBzdHlsZVRleHQgPSBmYWxzZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9idXR0b24gPSBuZXcgQWN0aW9uQnV0dG9uRGVzY3JpcHRvcigpLndpdGhMYWJlbChsYWJlbCkud2l0aEljb24oaWNvbikud2l0aFN0eWxlQ2xhc3MobmV3IEJ1dHRvblN0eWxlQnVpbGRlcihzdHlsZUxldmVsKS53aXRoVGV4dEJ1dHRvbihzdHlsZVRleHQpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhSdW5GdW5jdGlvbihmbjogKGN0eDogRmllbGRBY3Rpb25Db250ZXh0PEVUPikgPT4gdm9pZCk6IHRoaXMge1xuICAgICAgICB0aGlzLl9ydW5GdW5jdGlvbiA9IGZuO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgY29weSgpOiBGaWVsZEFjdGlvbkRlc2NyaXB0b3I8RVQ+IHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBuZXcgRmllbGRBY3Rpb25EZXNjcmlwdG9yPEVUPih0aGlzLl9lZGl0b3IsIHRoaXMuX3Byb3BlcnR5KTtcbiAgICAgICAgdGhpcy5jb3B5RmllbGRzVG8oZmllbGQpO1xuICAgICAgICBmaWVsZC5fYnV0dG9uID0gdGhpcy5fYnV0dG9uLmNvcHkoKTtcbiAgICAgICAgZmllbGQuX3J1bkZ1bmN0aW9uID0gdGhpcy5fcnVuRnVuY3Rpb24/LmJpbmQoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRmllbGRMb29rdXBEZXNjcmlwdG9yPFQsIEVUPiBleHRlbmRzIEFGaWVsZERlc2NyaXB0b3I8VCwgRVQ+IGltcGxlbWVudHMgSUxvb2t1cERlc2NyaXB0b3I8VD4ge1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfbW9kZWxUeXBlOiBDbGFzc1R5cGU8VD4gfCBudWxsO1xuICAgIHByb3RlY3RlZCBfbG9va3VwVHlwZTogRmllbGRMb29rdXBUeXBlRW51bSA9IEZpZWxkTG9va3VwVHlwZUVudW0uRHJvcGRvd247XG4gICAgcHJvdGVjdGVkIF9pdGVtc0xhYmVsUHJvcGVydHk/OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9pdGVtc0xhYmVsVHJhbnNsYXRlID0gZmFsc2U7XG4gICAgcHJvdGVjdGVkIF9pdGVtc1ZhbHVlUHJvcGVydHk/OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9pdGVtc0Rpc2FibGVkUHJvcGVydHk/OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9kYXRhS2V5UHJvcGVydHk/OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9kYXRhUHJvdmlkZXI/OiBJTG9va3VwRGF0YVByb3ZpZGVyPFQsIGFueT47XG5cbiAgICBwcm90ZWN0ZWQgX2Ryb3Bkb3duQ2xhc3NOYW1lID0gJ21uZy1maWx0ZXItbG9va3VwLWRyb3Bkb3duJztcblxuICAgIHByb3RlY3RlZCBfYXV0b2NvbXBsZXRlT3Blbk9uRm9jdXMgPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgX2F1dG9jb21wbGV0ZUlubGluZVNlYXJjaCA9IGZhbHNlO1xuICAgIHByb3RlY3RlZCBfYXV0b2NvbXBsZXRlQXV0b0NsZWFyID0gZmFsc2U7XG4gICAgcHJvdGVjdGVkIF9hdXRvY29tcGxldGVTZWxlY3RGaXJzdCA9IGZhbHNlO1xuXG4gICAgcHJvdGVjdGVkIF9kaWFsb2dUYWJsZURlc2NyaXB0b3I/OiBUYWJsZURlc2NyaXB0b3I8VD47XG4gICAgcHJvdGVjdGVkIF9kaWFsb2dUYWJsZURhdGFQcm92aWRlcj86IElUYWJsZURhdGFQcm92aWRlcjxULCBhbnk+O1xuXG4gICAgcHJvdGVjdGVkIF9jdXN0b21Db21wb25lbnROYW1lPzogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoZWRpdG9yOiBFZGl0b3JEZXNjcmlwdG9yPEVUPiwgcHJvcGVydHk6IHN0cmluZywgbW9kZWxUeXBlOiBDbGFzc1R5cGU8VD4gfCBudWxsKSB7XG4gICAgICAgIHN1cGVyKGVkaXRvciwgcHJvcGVydHkpO1xuICAgICAgICB0aGlzLl9tb2RlbFR5cGUgPSBtb2RlbFR5cGU7XG4gICAgICAgIE1vZGVsVXRpbC50cnlTZXRMb29rdXBJdGVtc1Byb3BlcnRpZXModGhpcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsb29rdXBUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9va3VwVHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGl0ZW1zTGFiZWxQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zTGFiZWxQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGl0ZW1zTGFiZWxUcmFuc2xhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pdGVtc0xhYmVsVHJhbnNsYXRlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXRlbXNWYWx1ZVByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXRlbXNWYWx1ZVByb3BlcnR5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXRlbXNEaXNhYmxlZFByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXRlbXNEaXNhYmxlZFByb3BlcnR5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGF0YUtleVByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YUtleVByb3BlcnR5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGF0YVByb3ZpZGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YVByb3ZpZGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYXV0b2NvbXBsZXRlT3Blbk9uRm9jdXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hdXRvY29tcGxldGVPcGVuT25Gb2N1cztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGF1dG9jb21wbGV0ZUlubGluZVNlYXJjaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F1dG9jb21wbGV0ZUlubGluZVNlYXJjaDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGF1dG9jb21wbGV0ZUF1dG9DbGVhcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F1dG9jb21wbGV0ZUF1dG9DbGVhcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGF1dG9jb21wbGV0ZVNlbGVjdEZpcnN0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXV0b2NvbXBsZXRlU2VsZWN0Rmlyc3Q7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkcm9wZG93bkNsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Ryb3Bkb3duQ2xhc3NOYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbW9kZWxUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbW9kZWxUeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGlhbG9nVGFibGVEZXNjcmlwdG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlhbG9nVGFibGVEZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGlhbG9nVGFibGVEYXRhUHJvdmlkZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaWFsb2dUYWJsZURhdGFQcm92aWRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGN1c3RvbUNvbXBvbmVudE5hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdXN0b21Db21wb25lbnROYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoSXRlbXNMYWJlbFByb3BlcnR5KGl0ZW1zTGFiZWxQcm9wZXJ0eTogc3RyaW5nLCB0cmFuc2xhdGUgPSBmYWxzZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9pdGVtc0xhYmVsUHJvcGVydHkgPSBpdGVtc0xhYmVsUHJvcGVydHk7XG4gICAgICAgIHRoaXMuX2l0ZW1zTGFiZWxUcmFuc2xhdGUgPSB0cmFuc2xhdGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoSXRlbXNWYWx1ZVByb3BlcnR5KGl0ZW1zVmFsdWVQcm9wZXJ0eTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2l0ZW1zVmFsdWVQcm9wZXJ0eSA9IGl0ZW1zVmFsdWVQcm9wZXJ0eTtcbiAgICAgICAgdGhpcy5fZGF0YUtleVByb3BlcnR5ID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEl0ZW1zRGlzYWJsZWRQcm9wZXJ0eShpdGVtc0Rpc2FibGVkUHJvcGVydHk6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9pdGVtc0Rpc2FibGVkUHJvcGVydHkgPSBpdGVtc0Rpc2FibGVkUHJvcGVydHk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRGF0YUtleVByb3BlcnR5KHByb3BlcnR5OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZGF0YUtleVByb3BlcnR5ID0gcHJvcGVydHk7XG4gICAgICAgIHRoaXMuX2l0ZW1zVmFsdWVQcm9wZXJ0eSA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhMb29rdXA8Uz4obG9va3VwOiAocXVlcnlQYXJhbT86IE1lZGl1c1F1ZXJ5UGFyYW0sIHNlcnZpY2U/OiBTLCBzZWFyY2g/OiBzdHJpbmcpID0+IE9ic2VydmFibGU8QXJyYXk8VD4+LCBzZXJ2aWNlVHlwZT86IFR5cGU8Uz4pOiB0aGlzIHtcbiAgICAgICAgY29uc3QgZGF0YVByb3ZpZGVyID0gbmV3IExvb2t1cERhdGFQcm92aWRlcjxULCBTPih0aGlzLl9tb2RlbFR5cGUpO1xuICAgICAgICBpZiAoc2VydmljZVR5cGUpIHtcbiAgICAgICAgICAgIGRhdGFQcm92aWRlci53aXRoU2VydmljZVR5cGUoc2VydmljZVR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIGRhdGFQcm92aWRlci53aXRoTG9va3VwKGxvb2t1cCk7XG4gICAgICAgIHRoaXMuX2RhdGFQcm92aWRlciA9IGRhdGFQcm92aWRlcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhMb29rdXBEYXRhUHJvdmlkZXIoZGF0YVByb3ZpZGVyOiBJTG9va3VwRGF0YVByb3ZpZGVyPFQsIGFueT4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZGF0YVByb3ZpZGVyID0gZGF0YVByb3ZpZGVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgd2l0aENvbmZpZyhjb25maWc6IEZpZWxkTG9va3VwQ29uZmlnKTogdGhpcyB7XG4gICAgICAgIHJldHVybiBzdXBlci53aXRoQ29uZmlnKGNvbmZpZyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzQXV0b2NvbXBsZXRlKG9wZW5PbkZvY3VzID0gZmFsc2UsIGlubGluZVNlYXJjaCA9IGZhbHNlLCBzZWxlY3RGaXJzdCA9IGZhbHNlLCBhdXRvQ2xlYXIgPSBmYWxzZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9sb29rdXBUeXBlID0gRmllbGRMb29rdXBUeXBlRW51bS5BdXRvY29tcGxldGU7XG4gICAgICAgIHRoaXMuX2F1dG9jb21wbGV0ZUF1dG9DbGVhciA9IGF1dG9DbGVhcjtcbiAgICAgICAgdGhpcy5fYXV0b2NvbXBsZXRlU2VsZWN0Rmlyc3QgPSBzZWxlY3RGaXJzdDtcbiAgICAgICAgdGhpcy5fYXV0b2NvbXBsZXRlT3Blbk9uRm9jdXMgPSBvcGVuT25Gb2N1cztcbiAgICAgICAgdGhpcy5fYXV0b2NvbXBsZXRlSW5saW5lU2VhcmNoID0gaW5saW5lU2VhcmNoO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNEaWFsb2cobG9va3VwVGFibGVEZXNjcmlwdG9yOiBUYWJsZURlc2NyaXB0b3I8VD4sIHRhYmxlRGF0YVByb3ZpZGVyPzogSVRhYmxlRGF0YVByb3ZpZGVyPFQsIGFueT4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fbG9va3VwVHlwZSA9IEZpZWxkTG9va3VwVHlwZUVudW0uRGlhbG9nO1xuICAgICAgICB0aGlzLl9kaWFsb2dUYWJsZURlc2NyaXB0b3IgPSBsb29rdXBUYWJsZURlc2NyaXB0b3I7XG4gICAgICAgIHRoaXMuX2RpYWxvZ1RhYmxlRGF0YVByb3ZpZGVyID0gdGFibGVEYXRhUHJvdmlkZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc0N1c3RvbUNvbXBvbmVudChjdXN0b21Db21wb25lbnROYW1lOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fbG9va3VwVHlwZSA9IEZpZWxkTG9va3VwVHlwZUVudW0uQ3VzdG9tO1xuICAgICAgICB0aGlzLl9jdXN0b21Db21wb25lbnROYW1lID0gY3VzdG9tQ29tcG9uZW50TmFtZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGNvcHkoKTogRmllbGRMb29rdXBEZXNjcmlwdG9yPFQsIEVUPiB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gbmV3IEZpZWxkTG9va3VwRGVzY3JpcHRvcih0aGlzLl9lZGl0b3IsIHRoaXMuX3Byb3BlcnR5LCB0aGlzLl9tb2RlbFR5cGUpO1xuICAgICAgICB0aGlzLmNvcHlGaWVsZHNUbyhmaWVsZCk7XG4gICAgICAgIGZpZWxkLl9sb29rdXBUeXBlID0gdGhpcy5fbG9va3VwVHlwZTtcbiAgICAgICAgZmllbGQuX2l0ZW1zTGFiZWxQcm9wZXJ0eSA9IHRoaXMuX2l0ZW1zTGFiZWxQcm9wZXJ0eTtcbiAgICAgICAgZmllbGQuX2l0ZW1zTGFiZWxUcmFuc2xhdGUgPSB0aGlzLl9pdGVtc0xhYmVsVHJhbnNsYXRlO1xuICAgICAgICBmaWVsZC5faXRlbXNWYWx1ZVByb3BlcnR5ID0gdGhpcy5faXRlbXNWYWx1ZVByb3BlcnR5O1xuICAgICAgICBmaWVsZC5faXRlbXNEaXNhYmxlZFByb3BlcnR5ID0gdGhpcy5faXRlbXNEaXNhYmxlZFByb3BlcnR5O1xuICAgICAgICBmaWVsZC5fZGF0YUtleVByb3BlcnR5ID0gdGhpcy5fZGF0YUtleVByb3BlcnR5O1xuICAgICAgICBmaWVsZC5fZGF0YVByb3ZpZGVyID0gdGhpcy5fZGF0YVByb3ZpZGVyO1xuICAgICAgICBmaWVsZC5fZHJvcGRvd25DbGFzc05hbWUgPSB0aGlzLl9kcm9wZG93bkNsYXNzTmFtZTtcbiAgICAgICAgZmllbGQuX2F1dG9jb21wbGV0ZU9wZW5PbkZvY3VzID0gdGhpcy5fYXV0b2NvbXBsZXRlT3Blbk9uRm9jdXM7XG4gICAgICAgIGZpZWxkLl9hdXRvY29tcGxldGVJbmxpbmVTZWFyY2ggPSB0aGlzLl9hdXRvY29tcGxldGVJbmxpbmVTZWFyY2g7XG4gICAgICAgIGZpZWxkLl9kaWFsb2dUYWJsZURlc2NyaXB0b3IgPSB0aGlzLl9kaWFsb2dUYWJsZURlc2NyaXB0b3I7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGaWVsZExvb2t1cEVudW1EZXNjcmlwdG9yPEVUPiBleHRlbmRzIEZpZWxkTG9va3VwRGVzY3JpcHRvcjxFbnVtVmFsdWU8c3RyaW5nIHwgbnVtYmVyPiwgRVQ+IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9lbnVtVHlwZTogRW51bVR5cGU7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uRW51bVZhbHVlczogRW51bVZhbHVlPHN0cmluZyB8IG51bWJlcj5bXTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9uYW1lQXNWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoZWRpdG9yOiBFZGl0b3JEZXNjcmlwdG9yPEVUPiwgcHJvcGVydHk6IHN0cmluZywgZW51bVR5cGU6IEVudW1UeXBlLCBvcHRpb25zPzogQXJyYXk8RW51bUNvbnN0YW50VHlwZT4sIG5hbWVBc1ZhbHVlID0gZmFsc2UsIG9wdGlvbnNUaXRsZVBhdGg/OiBzdHJpbmcgfCBudWxsKSB7XG4gICAgICAgIHN1cGVyKGVkaXRvciwgcHJvcGVydHksIG51bGwpO1xuICAgICAgICB0aGlzLl9lbnVtVHlwZSA9IGVudW1UeXBlO1xuICAgICAgICB0aGlzLl9uYW1lQXNWYWx1ZSA9IG5hbWVBc1ZhbHVlO1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnNUaXRsZVBhdGggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBvcHRpb25zVGl0bGVQYXRoID0gVHlwZVV0aWwuZmluZEVudW1OYW1lKGVudW1UeXBlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9vcHRpb25FbnVtVmFsdWVzID0gQXJyYXkuaXNBcnJheShvcHRpb25zKVxuICAgICAgICAgICAgPyBFbnVtVXRpbC5mcm9tVmFsdWVzQXNFbnVtVmFsdWVBcnJheShlbnVtVHlwZSwgb3B0aW9ucywgbmFtZUFzVmFsdWUsIG9wdGlvbnNUaXRsZVBhdGggPz8gdW5kZWZpbmVkKVxuICAgICAgICAgICAgOiBFbnVtVXRpbC5mcm9tQ29uc3RhbnRzQXNFbnVtVmFsdWVBcnJheShlbnVtVHlwZSwgbmFtZUFzVmFsdWUsIG9wdGlvbnNUaXRsZVBhdGggPz8gdW5kZWZpbmVkKTtcbiAgICAgICAgY29uc3QgZGF0YVByb3ZpZGVyID0gbmV3IExvb2t1cERhdGFQcm92aWRlcjxFbnVtVmFsdWU8c3RyaW5nIHwgbnVtYmVyPiwgYW55PihudWxsKS53aXRoTG9va3VwKCgpID0+IG9mKHRoaXMuX29wdGlvbkVudW1WYWx1ZXMpKTtcbiAgICAgICAgdGhpcy53aXRoTG9va3VwRGF0YVByb3ZpZGVyKGRhdGFQcm92aWRlcik7XG4gICAgICAgIHRoaXMud2l0aEl0ZW1zTGFiZWxQcm9wZXJ0eSgndGl0bGUnLCBvcHRpb25zVGl0bGVQYXRoICE9PSBudWxsKTtcbiAgICAgICAgdGhpcy53aXRoSXRlbXNWYWx1ZVByb3BlcnR5KCd2YWx1ZScpO1xuICAgICAgICB0aGlzLndpdGhJdGVtc0Rpc2FibGVkUHJvcGVydHkoJ2Rpc2FibGVkJyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBlbnVtVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VudW1UeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRGlzYWJsZWRPcHRpb25zKC4uLmRpc2FibGVkT3B0aW9uczogQXJyYXk8RW51bUNvbnN0YW50VHlwZT4pOiB0aGlzIHtcbiAgICAgICAgZm9yIChjb25zdCBkaXNhYmxlZE9wdGlvbiBvZiBkaXNhYmxlZE9wdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpc2FibGVkT3B0aW9uVmFsdWUgPSB0aGlzLl9uYW1lQXNWYWx1ZSA/IEVudW1VdGlsLmdldENvbnN0YW50TmFtZSh0aGlzLl9lbnVtVHlwZSwgZGlzYWJsZWRPcHRpb24pIDogZGlzYWJsZWRPcHRpb247XG4gICAgICAgICAgICBpZiAoZGlzYWJsZWRPcHRpb25WYWx1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMuX29wdGlvbkVudW1WYWx1ZXMuZmluZChvID0+IG8udmFsdWUgPT09IGRpc2FibGVkT3B0aW9uVmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhEZWZhdWx0VmFsdWVFbnVtKGRlZmF1bHRWYWx1ZTogRW51bUNvbnN0YW50VHlwZSk6IHRoaXMge1xuICAgICAgICBjb25zdCBkZWZhdWx0T3B0aW9uVmFsdWUgPSB0aGlzLl9uYW1lQXNWYWx1ZSA/IEVudW1VdGlsLmdldENvbnN0YW50TmFtZSh0aGlzLl9lbnVtVHlwZSwgZGVmYXVsdFZhbHVlKSA6IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgaWYgKGRlZmF1bHRPcHRpb25WYWx1ZSkge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5fb3B0aW9uRW51bVZhbHVlcy5maW5kKG8gPT4gby52YWx1ZSA9PT0gZGVmYXVsdE9wdGlvblZhbHVlKTtcbiAgICAgICAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLndpdGhEZWZhdWx0VmFsdWUodGhpcy5faXRlbXNWYWx1ZVByb3BlcnR5ID8gb3B0aW9uW3RoaXMuX2l0ZW1zVmFsdWVQcm9wZXJ0eSBhcyBrZXlvZiBvYmplY3RdIDogb3B0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgYXNBdXRvY29tcGxldGUob3Blbk9uRm9jdXMgPSB0cnVlKTogdGhpcyB7XG4gICAgICAgIHN1cGVyLmFzQXV0b2NvbXBsZXRlKG9wZW5PbkZvY3VzLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIGNvcHkoKTogRmllbGRMb29rdXBFbnVtRGVzY3JpcHRvcjxFVD4ge1xuICAgICAgICBjb25zdCBmaWVsZCA9IG5ldyBGaWVsZExvb2t1cEVudW1EZXNjcmlwdG9yPEVUPih0aGlzLl9lZGl0b3IsIHRoaXMuX3Byb3BlcnR5LCB0aGlzLl9lbnVtVHlwZSwgW10pO1xuICAgICAgICB0aGlzLmNvcHlGaWVsZHNUbyhmaWVsZCk7XG4gICAgICAgIGZpZWxkLl9sb29rdXBUeXBlID0gdGhpcy5fbG9va3VwVHlwZTtcbiAgICAgICAgZmllbGQuX2l0ZW1zTGFiZWxQcm9wZXJ0eSA9IHRoaXMuX2l0ZW1zTGFiZWxQcm9wZXJ0eTtcbiAgICAgICAgZmllbGQuX2l0ZW1zVmFsdWVQcm9wZXJ0eSA9IHRoaXMuX2l0ZW1zVmFsdWVQcm9wZXJ0eTtcbiAgICAgICAgZmllbGQuX2l0ZW1zRGlzYWJsZWRQcm9wZXJ0eSA9IHRoaXMuX2l0ZW1zRGlzYWJsZWRQcm9wZXJ0eTtcbiAgICAgICAgZmllbGQuX2RhdGFLZXlQcm9wZXJ0eSA9IHRoaXMuX2RhdGFLZXlQcm9wZXJ0eTtcbiAgICAgICAgZmllbGQuX2RhdGFQcm92aWRlciA9IHRoaXMuX2RhdGFQcm92aWRlcjtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEZpZWxkTWFueVRvTWFueUVkaXRvckRlc2NyaXB0b3I8VCwgRVQ+IGV4dGVuZHMgQUZpZWxkRGVzY3JpcHRvcjxULCBFVCwgVFtdPiB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfbWFpblRhYmxlRGVzY3JpcHRvcjogVGFibGVEZXNjcmlwdG9yPFQ+OyAvLyB0YWJsZSBkZXNjcmlwdG9yIGZvciBtYWluIHRhYmxlIGNvbXBvbmVudFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2xvb2t1cFRhYmxlRGVzY3JpcHRvcjogVGFibGVEZXNjcmlwdG9yPFQ+OyAvLyB0YWJsZSBkZXNjcmlwdG9yIGZvciB3aGVyZSBzZWxlY3Qgd2lsbCBiZSBhcHBsaWVkXG4gICAgcHJpdmF0ZSBfZmllbGRUeXBlOiBGaWVsZE1hbnlUb01hbnlFZGl0b3JUeXBlRW51bSA9IEZpZWxkTWFueVRvTWFueUVkaXRvclR5cGVFbnVtLkRpYWxvZ1RhYmxlTXVsdGlzZWxlY3Q7XG4gICAgcHJpdmF0ZSBfbG9va3VwVGFibGVEYXRhUHJvdmlkZXI6IElUYWJsZURhdGFQcm92aWRlcjxULCBhbnk+IHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfYWN0aW9uczogQXJyYXk8RmllbGRNYW55VG9NYW55RWRpdG9yQWN0aW9uRW51bT4gPSBbXTtcbiAgICBwcml2YXRlIF9oYXNMb29rdXBFeGNsdWRlVmFsdWVzID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfZXhjbHVkZUZpbHRlclByb3BlcnR5ID0gJyc7XG4gICAgcHJpdmF0ZSBfZXhjbHVkZVZhbHVlUHJvcGVydHkgPSAnJztcbiAgICBwcml2YXRlIF9zZWFyY2hFbmFibGVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfc2VhcmNoRmllbGRzPzogc3RyaW5nW107XG5cbiAgICBjb25zdHJ1Y3RvcihlZGl0b3I6IEVkaXRvckRlc2NyaXB0b3I8RVQ+LCBwcm9wZXJ0eTogc3RyaW5nLCBtYWluVGFibGVEZXNjcmlwdG9yOiBUYWJsZURlc2NyaXB0b3I8VD4sIGxvb2t1cFRhYmxlRGVzY3JpcHRvcjogVGFibGVEZXNjcmlwdG9yPFQ+KSB7XG4gICAgICAgIHN1cGVyKGVkaXRvciwgcHJvcGVydHkpO1xuICAgICAgICB0aGlzLl9tYWluVGFibGVEZXNjcmlwdG9yID0gbWFpblRhYmxlRGVzY3JpcHRvcjtcbiAgICAgICAgdGhpcy5fbG9va3VwVGFibGVEZXNjcmlwdG9yID0gbG9va3VwVGFibGVEZXNjcmlwdG9yO1xuICAgICAgICB0aGlzLl9hY3Rpb25zLnB1c2goRmllbGRNYW55VG9NYW55RWRpdG9yQWN0aW9uRW51bS5BZGQsIEZpZWxkTWFueVRvTWFueUVkaXRvckFjdGlvbkVudW0uRGVsZXRlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZpZWxkVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpZWxkVHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxvb2t1cFRhYmxlRGF0YVByb3ZpZGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9va3VwVGFibGVEYXRhUHJvdmlkZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhY3Rpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aW9ucztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhhc0xvb2t1cEV4Y2x1ZGVWYWx1ZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNMb29rdXBFeGNsdWRlVmFsdWVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZXhjbHVkZUZpbHRlclByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXhjbHVkZUZpbHRlclByb3BlcnR5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZXhjbHVkZVZhbHVlUHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9leGNsdWRlVmFsdWVQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1haW5UYWJsZURlc2NyaXB0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYWluVGFibGVEZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbG9va3VwVGFibGVEZXNjcmlwdG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9va3VwVGFibGVEZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc2VhcmNoRW5hYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlYXJjaEVuYWJsZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzZWFyY2hGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWFyY2hGaWVsZHM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhMb29rdXA8Uz4oZ2V0QWxsOiAocXVlcnlQYXJhbTogTWVkaXVzUXVlcnlQYXJhbSwgc2VydmljZT86IFMpID0+IE9ic2VydmFibGU8TWVkaXVzUXVlcnlSZXN1bHQ8VD4+LCBzZXJ2aWNlVHlwZT86IFR5cGU8Uz4pOiB0aGlzIHtcbiAgICAgICAgY29uc3QgZGF0YVByb3ZpZGVyID0gbmV3IFRhYmxldmlld0RhdGFQcm92aWRlcjxULCBTPih0aGlzLl9tYWluVGFibGVEZXNjcmlwdG9yLm1vZGVsLnR5cGUpO1xuICAgICAgICBpZiAoc2VydmljZVR5cGUpIHtcbiAgICAgICAgICAgIGRhdGFQcm92aWRlci53aXRoU2VydmljZVR5cGUoc2VydmljZVR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIGRhdGFQcm92aWRlci53aXRoR2V0QWxsKGdldEFsbCk7XG4gICAgICAgIHRoaXMuX2xvb2t1cFRhYmxlRGF0YVByb3ZpZGVyID0gZGF0YVByb3ZpZGVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aExvb2t1cERhdGFQcm92aWRlcihkYXRhUHJvdmlkZXI6IElUYWJsZURhdGFQcm92aWRlcjxULCBhbnk+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2xvb2t1cFRhYmxlRGF0YVByb3ZpZGVyID0gZGF0YVByb3ZpZGVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEFjdGlvbnMoYWN0aW9uczogQXJyYXk8RmllbGRNYW55VG9NYW55RWRpdG9yQWN0aW9uRW51bT4gPSBbXSk6IHRoaXMge1xuICAgICAgICB0aGlzLmFjdGlvbnMucHVzaCguLi5hY3Rpb25zKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhMb29rdXBFeGNsdWRlKGZpbHRlclByb3BlcnR5OiBzdHJpbmcsIHZhbHVlUHJvcGVydHk6IHN0cmluZywgaGFzTG9va3VwRXhjbHVkZSA9IHRydWUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faGFzTG9va3VwRXhjbHVkZVZhbHVlcyA9IGhhc0xvb2t1cEV4Y2x1ZGU7XG4gICAgICAgIHRoaXMuX2V4Y2x1ZGVGaWx0ZXJQcm9wZXJ0eSA9IGZpbHRlclByb3BlcnR5O1xuICAgICAgICB0aGlzLl9leGNsdWRlVmFsdWVQcm9wZXJ0eSA9IHZhbHVlUHJvcGVydHk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoU2VhcmNoKGVuYWJsZWQgPSB0cnVlLCBzZWFyY2hGaWVsZHM/OiBzdHJpbmdbXSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9zZWFyY2hFbmFibGVkID0gZW5hYmxlZDtcbiAgICAgICAgdGhpcy5fc2VhcmNoRmllbGRzID0gc2VhcmNoRmllbGRzO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgY29weSgpOiBGaWVsZE1hbnlUb01hbnlFZGl0b3JEZXNjcmlwdG9yPFQsIEVUPiB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gbmV3IEZpZWxkTWFueVRvTWFueUVkaXRvckRlc2NyaXB0b3IodGhpcy5fZWRpdG9yLCB0aGlzLl9wcm9wZXJ0eSwgdGhpcy5fbWFpblRhYmxlRGVzY3JpcHRvci5jb3B5KCksIHRoaXMuX2xvb2t1cFRhYmxlRGVzY3JpcHRvci5jb3B5KCkpO1xuICAgICAgICB0aGlzLmNvcHlGaWVsZHNUbyhmaWVsZCk7XG4gICAgICAgIGZpZWxkLl9maWVsZFR5cGUgPSB0aGlzLl9maWVsZFR5cGU7XG4gICAgICAgIGZpZWxkLl9hY3Rpb25zID0gdGhpcy5fYWN0aW9ucy5tYXAoYSA9PiBhKTtcbiAgICAgICAgZmllbGQuX2xvb2t1cFRhYmxlRGF0YVByb3ZpZGVyID0gdGhpcy5fbG9va3VwVGFibGVEYXRhUHJvdmlkZXI7XG4gICAgICAgIGZpZWxkLl9oYXNMb29rdXBFeGNsdWRlVmFsdWVzID0gdGhpcy5faGFzTG9va3VwRXhjbHVkZVZhbHVlcztcbiAgICAgICAgZmllbGQuX2V4Y2x1ZGVGaWx0ZXJQcm9wZXJ0eSA9IHRoaXMuX2V4Y2x1ZGVGaWx0ZXJQcm9wZXJ0eTtcbiAgICAgICAgZmllbGQuX2V4Y2x1ZGVWYWx1ZVByb3BlcnR5ID0gdGhpcy5fZXhjbHVkZVZhbHVlUHJvcGVydHk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGaWVsZE1hbnlFZGl0b3JEZXNjcmlwdG9yPFQsIEVUPiBleHRlbmRzIEFGaWVsZERlc2NyaXB0b3I8VCwgRVQsIFRbXT4ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RhYmxldmlld0Rlc2NyaXB0b3I6IFRhYmxldmlld0Rlc2NyaXB0b3I8VD47XG4gICAgcHJpdmF0ZSBfZmllbGRUeXBlOiBGaWVsZE1hbnlFZGl0b3JUeXBlRW51bSA9IEZpZWxkTWFueUVkaXRvclR5cGVFbnVtLkRpYWxvZ0VkaXRvcjtcbiAgICBwcml2YXRlIF9maWVsZEFjdGlvbnM6IEFycmF5PEZpZWxkTWFueUVkaXRvckFjdGlvbkVudW0+ID0gW107XG4gICAgcHJpdmF0ZSBfYWN0aW9uczogQXJyYXk8QWN0aW9uRGVzY3JpcHRvcjxUPj4gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKGVkaXRvcjogRWRpdG9yRGVzY3JpcHRvcjxFVD4sIHByb3BlcnR5OiBzdHJpbmcsIHRhYmxldmlld0Rlc2NyaXB0b3I6IFRhYmxldmlld0Rlc2NyaXB0b3I8VD4pIHtcbiAgICAgICAgc3VwZXIoZWRpdG9yLCBwcm9wZXJ0eSk7XG4gICAgICAgIC8vIHRoaXMuX21vZGVsVHlwZSA9IG1vZGVsVHlwZTtcbiAgICAgICAgdGhpcy5fdGFibGV2aWV3RGVzY3JpcHRvciA9IHRhYmxldmlld0Rlc2NyaXB0b3I7XG4gICAgICAgIHRoaXMuX2ZpZWxkQWN0aW9ucy5wdXNoKEZpZWxkTWFueUVkaXRvckFjdGlvbkVudW0uVmlldywgRmllbGRNYW55RWRpdG9yQWN0aW9uRW51bS5BZGQsIEZpZWxkTWFueUVkaXRvckFjdGlvbkVudW0uRWRpdCwgRmllbGRNYW55RWRpdG9yQWN0aW9uRW51bS5EZWxldGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZmllbGRUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmllbGRUeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZmllbGRBY3Rpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmllbGRBY3Rpb25zO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYWN0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGlvbnM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0YWJsZXZpZXdEZXNjcmlwdG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGV2aWV3RGVzY3JpcHRvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRhYmxlRGVzY3JpcHRvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmxldmlld0Rlc2NyaXB0b3IudGFibGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBlZGl0b3JGb3JDcmVhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZXZpZXdEZXNjcmlwdG9yLmFkZEVkaXRvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGVkaXRvckZvclJlYWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZXZpZXdEZXNjcmlwdG9yLmRldGFpbHNFZGl0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBlZGl0b3JGb3JVcGRhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZXZpZXdEZXNjcmlwdG9yLmVkaXRFZGl0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhGaWVsZEFjdGlvbihhY3Rpb246IEZpZWxkTWFueUVkaXRvckFjdGlvbkVudW0pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZmllbGRBY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhGaWVsZEFjdGlvbnMoYWN0aW9uczogRmllbGRNYW55RWRpdG9yQWN0aW9uRW51bVtdKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ZpZWxkQWN0aW9ucyA9IGFjdGlvbnM7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQWN0aW9uKGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxUPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9hY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGNvcHkoKTogRmllbGRNYW55RWRpdG9yRGVzY3JpcHRvcjxULCBFVD4ge1xuICAgICAgICBjb25zdCBmaWVsZCA9IG5ldyBGaWVsZE1hbnlFZGl0b3JEZXNjcmlwdG9yKHRoaXMuX2VkaXRvciwgdGhpcy5fcHJvcGVydHksIHRoaXMuX3RhYmxldmlld0Rlc2NyaXB0b3IuY29weSgpKTtcbiAgICAgICAgdGhpcy5jb3B5RmllbGRzVG8oZmllbGQpO1xuICAgICAgICBmaWVsZC5fZmllbGRUeXBlID0gdGhpcy5fZmllbGRUeXBlO1xuICAgICAgICBmaWVsZC5fZmllbGRBY3Rpb25zID0gdGhpcy5fZmllbGRBY3Rpb25zLm1hcChhID0+IGEpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQUZpZWxkR3JvdXBEZXNjcmlwdG9yPEVUPiBleHRlbmRzIEFHZW5lcmljRmllbGREZXNjcmlwdG9yPEVUPiB7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9uYW1lOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9kZWZhdWx0OiBib29sZWFuO1xuICAgIHByb3RlY3RlZCBfdGl0bGU/OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9maWVsZHM6IEFHZW5lcmljRmllbGREZXNjcmlwdG9yPEVUPltdID0gW107XG4gICAgcHJvdGVjdGVkIF92YWxpZGF0aW9uczogQXJyYXk8RmllbGRWYWxpZGF0aW9uRGVzY3JpcHRvcj4gPSBbXTtcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihlZGl0b3I6IEVkaXRvckRlc2NyaXB0b3I8RVQ+LCBuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoZWRpdG9yKTtcbiAgICAgICAgdGhpcy5fbmFtZSA9IGAke3RoaXMuYmFzZU5hbWV9JHtuYW1lfWA7XG4gICAgICAgIHRoaXMuX2RlZmF1bHQgPSBuYW1lID09PSBFZGl0b3JEZXNjcmlwdG9yLmRlZmF1bHRHcm91cE5hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUZpZWxkKHByb3BlcnR5OiBzdHJpbmcsIGZpbHRlckZ1bmN0aW9uOiAoZmllbGRzOiBBR2VuZXJpY0ZpZWxkRGVzY3JpcHRvcjxFVD5bXSkgPT4gQUdlbmVyaWNGaWVsZERlc2NyaXB0b3I8RVQ+W10pOiBBR2VuZXJpY0ZpZWxkRGVzY3JpcHRvcjxFVD5bXSB7XG4gICAgICAgIHRoaXMuX2ZpZWxkcyA9IGZpbHRlckZ1bmN0aW9uKHRoaXMuX2ZpZWxkcyk7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWVsZHM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0aXRsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RpdGxlO1xuICAgIH1cblxuICAgIGFic3RyYWN0IGdldCBmaWVsZHMoKTogQUdlbmVyaWNGaWVsZERlc2NyaXB0b3I8RVQ+W107XG5cbiAgICBwdWJsaWMgZ2V0IHZhbGlkYXRpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdGlvbnM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBiYXNlTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuZ3JvdXBOYW1lKCl9X2A7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBuYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0O1xuICAgIH1cblxuICAgIGFic3RyYWN0IGdyb3VwTmFtZSgpOiBzdHJpbmc7XG5cbiAgICBhYnN0cmFjdCBhZGRGaWVsZChmaWVsZDogQUdlbmVyaWNGaWVsZERlc2NyaXB0b3I8RVQ+KTogdGhpcztcblxuICAgIGFic3RyYWN0IGNvcHkoKTogQUZpZWxkR3JvdXBEZXNjcmlwdG9yPEVUPjtcblxuICAgIHB1YmxpYyB3aXRoVGl0bGUodGl0bGU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl90aXRsZSA9IHRpdGxlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFZhbGlkYXRpb24obmFtZTogc3RyaW5nLCB2YWxpZGF0b3I/OiBNbmdGaWVsZFZhbGlkYXRvciwgbWVzc2FnZT86IE1uZ0ZpZWxkVmFsaWRhdGlvbk1lc3NhZ2UpIHtcbiAgICAgICAgdGhpcy5fdmFsaWRhdGlvbnMucHVzaChuZXcgRmllbGRWYWxpZGF0aW9uRGVzY3JpcHRvcihuYW1lLCB2YWxpZGF0b3IsIG1lc3NhZ2UpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRmllbGRUYWJHcm91cERlc2NyaXB0b3I8RVQ+IGV4dGVuZHMgQUZpZWxkR3JvdXBEZXNjcmlwdG9yPEVUPiB7XG4gICAgY29uc3RydWN0b3IoZWRpdG9yOiBFZGl0b3JEZXNjcmlwdG9yPEVUPiwgbmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKGVkaXRvciwgbmFtZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBmaWVsZHMoKTogQXJyYXk8RmllbGRHcm91cERlc2NyaXB0b3I8RVQ+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWVsZHMgYXMgQXJyYXk8RmllbGRHcm91cERlc2NyaXB0b3I8RVQ+PjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ3JvdXBOYW1lKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiAndGFiJztcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmllbGQoZmllbGQ6IEZpZWxkR3JvdXBEZXNjcmlwdG9yPEVUPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9maWVsZHMucHVzaChmaWVsZCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb3B5KCk6IEZpZWxkVGFiR3JvdXBEZXNjcmlwdG9yPEVUPiB7XG4gICAgICAgIGNvbnN0IHRhYiA9IG5ldyBGaWVsZFRhYkdyb3VwRGVzY3JpcHRvcjxFVD4odGhpcy5fZWRpdG9yLCB0aGlzLm5hbWUuc3Vic3RyaW5nKHRoaXMuYmFzZU5hbWUubGVuZ3RoKSk7XG4gICAgICAgIHRhYi5fdGl0bGUgPSB0aGlzLl90aXRsZTtcbiAgICAgICAgdGFiLl9maWVsZHMgPSB0aGlzLmZpZWxkcy5tYXAoZiA9PiBmLmNvcHkoKSk7XG4gICAgICAgIHRhYi5fdmFsaWRhdGlvbnMgPSB0aGlzLnZhbGlkYXRpb25zLm1hcCh2ID0+IHYuY29weSgpKTtcbiAgICAgICAgcmV0dXJuIHRhYjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGaWVsZEdyb3VwRGVzY3JpcHRvcjxFVD4gZXh0ZW5kcyBBRmllbGRHcm91cERlc2NyaXB0b3I8RVQ+IHtcbiAgICBwcml2YXRlIF90eXBlID0gRmllbGRHcm91cFR5cGVFbnVtLkZpZWxkc2V0O1xuXG4gICAgY29uc3RydWN0b3IoZWRpdG9yOiBFZGl0b3JEZXNjcmlwdG9yPEVUPiwgbmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKGVkaXRvciwgbmFtZSk7XG4gICAgICAgIGlmICh0aGlzLl9kZWZhdWx0KSB7XG4gICAgICAgICAgICB0aGlzLmFzTG9naWNhbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0eXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZpZWxkcygpOiBBcnJheTxBRmllbGREZXNjcmlwdG9yPGFueSwgRVQ+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWVsZHMgYXMgQXJyYXk8QUZpZWxkRGVzY3JpcHRvcjxhbnksIEVUPj47XG4gICAgfVxuXG4gICAgcHVibGljIGdyb3VwTmFtZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gJ2dyb3VwJztcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmllbGQoZmllbGQ6IEFGaWVsZERlc2NyaXB0b3I8YW55LCBFVD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZmllbGRzLnB1c2goZmllbGQpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNMb2dpY2FsKCk6IHRoaXMge1xuICAgICAgICB0aGlzLl90eXBlID0gRmllbGRHcm91cFR5cGVFbnVtLkxvZ2ljYWw7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb3B5KCk6IEZpZWxkR3JvdXBEZXNjcmlwdG9yPEVUPiB7XG4gICAgICAgIGNvbnN0IGdyb3VwID0gbmV3IEZpZWxkR3JvdXBEZXNjcmlwdG9yPEVUPih0aGlzLl9lZGl0b3IsIHRoaXMubmFtZS5zdWJzdHJpbmcodGhpcy5iYXNlTmFtZS5sZW5ndGgpKTtcbiAgICAgICAgZ3JvdXAuX3R5cGUgPSB0aGlzLl90eXBlO1xuICAgICAgICBncm91cC5fdGl0bGUgPSB0aGlzLl90aXRsZTtcbiAgICAgICAgZ3JvdXAuX2ZpZWxkcyA9IHRoaXMuZmllbGRzLm1hcChmID0+IGYuY29weSgpKTtcbiAgICAgICAgZ3JvdXAuX3ZhbGlkYXRpb25zID0gdGhpcy52YWxpZGF0aW9ucy5tYXAodiA9PiB2LmNvcHkoKSk7XG4gICAgICAgIHJldHVybiBncm91cDtcbiAgICB9XG59XG4iXX0=
|
|
1083
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQuZGVzY3JpcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZGVzY3JpcHRvcnMvZWRpdG9yL2ZpZWxkLmRlc2NyaXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFrQixVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUczRCxPQUFPLEVBQWEsT0FBTyxFQUFFLEVBQUUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUs3QyxPQUFPLEVBQUMsaUJBQWlCLEVBQW1ELE1BQU0sOEJBQThCLENBQUM7QUFFakgsT0FBTyxFQUEwQyxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRXhILE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNoRCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFbkQsT0FBTyxFQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUNyRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRSxPQUFPLEVBQUMsc0JBQXNCLEVBQW1CLE1BQU0sV0FBVyxDQUFDO0FBR25FLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNqRCxPQUFPLEVBQ0gsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQixtQkFBbUIsRUFDbkIseUJBQXlCLEVBQ3pCLHVCQUF1QixFQUN2QiwrQkFBK0IsRUFDL0IsNkJBQTZCLEVBQzdCLGFBQWEsRUFDaEIsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFDLHlCQUF5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QUksQ0FBQztJQUNoQixDQUFDO0lBRU0sU0FBUztRQUNaLElBQUksQ0FBQyxLQUFLLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxDQUFDO1FBQ3hDLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxJQUFJO1FBQ1AsTUFBTSxLQUFLLEdBQUcsSUFBSSxvQkFBb0IsQ0FBSyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNwRyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDekIsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzNCLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMvQyxLQUFLLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDekQsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtUeXBlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWJzdHJhY3RDb250cm9sLCBWYWxpZGF0b3JzfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7Rm9ybWx5RmllbGRDb25maWd9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBTdWJqZWN0LCBvZn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7TWVkaXVzUXVlcnlQYXJhbSwgTWVkaXVzUXVlcnlSZXN1bHR9IGZyb20gJy4uLy4uL2FwaS9tb2RlbHMnO1xuaW1wb3J0IHtBTW5nRm9ybWx5Q3VzdG9tRmllbGRDb21wb25lbnR9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZm9ybS9mb3JtbHkvZmllbGRzLyc7XG5pbXBvcnQge01uZ0Zvcm1seUZpZWxkQ29uZmlnLCBNbmdGb3JtbHlIb29rRm59IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZm9ybS9mb3JtbHkvbW9kZWxzJztcbmltcG9ydCB7TW5nRm9ybUZpZWxkRXZlbnQsIE1uZ0Zvcm1GaWVsZEV2ZW50RGF0YSwgTW5nRm9ybUZpZWxkRXZlbnRUeXBlRW51bX0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9mb3JtL21vZGVscyc7XG5pbXBvcnQge0ZpZWxkQWN0aW9uQ29udGV4dH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9mb3JtL21vZGVscy9maWVsZC1hY3Rpb24tY29udGV4dC5tb2RlbCc7XG5pbXBvcnQge0lMb29rdXBEYXRhUHJvdmlkZXIsIElUYWJsZURhdGFQcm92aWRlciwgTG9va3VwRGF0YVByb3ZpZGVyLCBUYWJsZXZpZXdEYXRhUHJvdmlkZXJ9IGZyb20gJy4uLy4uL2RhdGEtcHJvdmlkZXJzJztcbmltcG9ydCB7RW51bVZhbHVlfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHtNbmdDb21tb25zU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHtCdXR0b25TdHlsZUJ1aWxkZXJ9IGZyb20gJy4uLy4uL3N0eWxlcyc7XG5pbXBvcnQge1N0eWxlTGV2ZWxFbnVtfSBmcm9tICcuLi8uLi9zdHlsZXMvbW9kZWxzJztcbmltcG9ydCB7Q2xhc3NUeXBlLCBFbnVtQ29uc3RhbnRUeXBlLCBFbnVtVHlwZSwgTW5nRmllbGRBc3luY1ZhbGlkYXRvciwgTW5nRmllbGRWYWxpZGF0aW9uTWVzc2FnZSwgTW5nRmllbGRWYWxpZGF0b3J9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7RW51bVV0aWwsIEkxOG5VdGlscywgTW9kZWxVdGlsLCBUeXBlVXRpbH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHttYXhEYXRlVmFsaWRhdG9yLCBtaW5EYXRlVmFsaWRhdG9yfSBmcm9tICcuLi8uLi92YWxpZGF0b3JzJztcbmltcG9ydCB7QWN0aW9uQnV0dG9uRGVzY3JpcHRvciwgQWN0aW9uRGVzY3JpcHRvcn0gZnJvbSAnLi4vYWN0aW9uJztcbmltcG9ydCB7RmllbGRDb25maWcsIEZpZWxkTG9va3VwQ29uZmlnLCBJTG9va3VwRGVzY3JpcHRvcn0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQge1RhYmxlRGVzY3JpcHRvcn0gZnJvbSAnLi4vdGFibGUnO1xuaW1wb3J0IHtUYWJsZXZpZXdEZXNjcmlwdG9yfSBmcm9tICcuLi90YWJsZXZpZXcnO1xuaW1wb3J0IHtcbiAgICBGaWVsZEdyb3VwVHlwZUVudW0sXG4gICAgRmllbGRJbnB1dFR5cGVFbnVtLFxuICAgIEZpZWxkTG9va3VwVHlwZUVudW0sXG4gICAgRmllbGRNYW55RWRpdG9yQWN0aW9uRW51bSxcbiAgICBGaWVsZE1hbnlFZGl0b3JUeXBlRW51bSxcbiAgICBGaWVsZE1hbnlUb01hbnlFZGl0b3JBY3Rpb25FbnVtLFxuICAgIEZpZWxkTWFueVRvTWFueUVkaXRvclR5cGVFbnVtLFxuICAgIEZpZWxkU2l6ZUVudW1cbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtFZGl0b3JEZXNjcmlwdG9yfSBmcm9tICcuL2VkaXRvci5kZXNjcmlwdG9yJztcbmltcG9ydCB7RmllbGRWYWxpZGF0aW9uRGVzY3JpcHRvcn0gZnJvbSAnLi9maWVsZC12YWxpZGF0aW9uLmRlc2NyaXB0b3InO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQUdlbmVyaWNGaWVsZERlc2NyaXB0b3I8RVQ+IHtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2VkaXRvcjogRWRpdG9yRGVzY3JpcHRvcjxFVD47XG4gICAgcHJvdGVjdGVkIF9jb25maWc6IEZpZWxkQ29uZmlnID0ge307XG5cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoZWRpdG9yOiBFZGl0b3JEZXNjcmlwdG9yPEVUPikge1xuICAgICAgICB0aGlzLl9lZGl0b3IgPSBlZGl0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBlZGl0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lZGl0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjb25maWcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWc7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhDb25maWcoY29uZmlnOiBGaWVsZENvbmZpZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9jb25maWcgPSBjb25maWc7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFGaWVsZERlc2NyaXB0b3I8VCwgRVQsIFZUID0gVD4gZXh0ZW5kcyBBR2VuZXJpY0ZpZWxkRGVzY3JpcHRvcjxFVD4ge1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfcHJvcGVydHk6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgX2xhYmVsPzogc3RyaW5nIHwgbnVsbDtcblxuICAgIHByb3RlY3RlZCBfcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9oZWxwVGV4dD86IHN0cmluZztcblxuICAgIHByb3RlY3RlZCBfcmVxdWlyZWQgPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgX3JlcXVpcmVkSGlkZUxhYmVsTWFya2VyID0gZmFsc2U7XG4gICAgcHJvdGVjdGVkIF9kaXNhYmxlZCA9IGZhbHNlO1xuICAgIHByb3RlY3RlZCBfZGVmYXVsdFZhbHVlPzogVlQ7XG4gICAgcHJvdGVjdGVkIF9nZXR0ZXI/OiAoaXRlbTogRVQpID0+IFZUO1xuICAgIHByb3RlY3RlZCBfc2V0dGVyPzogKGl0ZW06IEVULCB2YWx1ZTogVlQpID0+IHZvaWQ7XG4gICAgcHJvdGVjdGVkIF92YWxpZGF0aW9uczogQXJyYXk8RmllbGRWYWxpZGF0aW9uRGVzY3JpcHRvcj4gPSBbXTtcbiAgICBwcm90ZWN0ZWQgX2FzeW5jVmFsaWRhdGlvbnM6IEFycmF5PEZpZWxkVmFsaWRhdGlvbkRlc2NyaXB0b3I+ID0gW107XG4gICAgcHJvdGVjdGVkIF9yZXF1aXJlZEV4cHJlc3Npb24/OiBzdHJpbmcgfCAoKGZpZWxkPzogRm9ybWx5RmllbGRDb25maWcpID0+IGJvb2xlYW4pIHwgT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICBwcm90ZWN0ZWQgX2Rpc2FibGVkRXhwcmVzc2lvbj86IHN0cmluZyB8ICgoZmllbGQ/OiBGb3JtbHlGaWVsZENvbmZpZykgPT4gYm9vbGVhbikgfCBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIHByb3RlY3RlZCBfaGlkZGVuRXhwcmVzc2lvbj86IHN0cmluZyB8ICgoZmllbGQ/OiBGb3JtbHlGaWVsZENvbmZpZykgPT4gYm9vbGVhbikgfCBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIHByb3RlY3RlZCBfdXBkYXRlT246ICdjaGFuZ2UnIHwgJ2JsdXInIHwgJ3N1Ym1pdCcgPSAnY2hhbmdlJztcblxuICAgIHByb3RlY3RlZCBfb25Jbml0PzogTW5nRm9ybWx5SG9va0ZuO1xuICAgIHByb3RlY3RlZCBfb25DaGFuZ2VzPzogTW5nRm9ybWx5SG9va0ZuO1xuICAgIHByb3RlY3RlZCBfYWZ0ZXJDb250ZW50SW5pdD86IE1uZ0Zvcm1seUhvb2tGbjtcbiAgICBwcm90ZWN0ZWQgX2FmdGVyVmlld0luaXQ/OiBNbmdGb3JtbHlIb29rRm47XG4gICAgcHJvdGVjdGVkIF9vbkRlc3Ryb3k/OiBNbmdGb3JtbHlIb29rRm47XG5cbiAgICBwcm90ZWN0ZWQgX29uVmFsdWVDaGFuZ2U/OiAoZmllbGQ6IE1uZ0Zvcm1seUZpZWxkQ29uZmlnLCB2YWx1ZTogYW55KSA9PiB2b2lkO1xuXG4gICAgcHJvdGVjdGVkIF9jbGFzc05hbWUgPSAnJztcbiAgICBwcm90ZWN0ZWQgX2ZpZWxkQ2xhc3NOYW1lPzogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBfbGFiZWxDbGFzc05hbWUgPSAnJztcbiAgICBwcm90ZWN0ZWQgX2lucHV0Q2xhc3NOYW1lID0gJyc7XG4gICAgcHJvdGVjdGVkIF9zaXplOiBGaWVsZFNpemVFbnVtID0gRmllbGRTaXplRW51bS5Ob3JtYWw7XG5cbiAgICAvLyBsb2NhbGl6YXRpb25cbiAgICBwcm90ZWN0ZWQgX2lzTG9jYWxpemVkID0gZmFsc2U7XG4gICAgcHJvdGVjdGVkIF9sb2NhbGl6YXRpb25UYWJsZXZpZXc/OiBUYWJsZXZpZXdEZXNjcmlwdG9yPGFueT47XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2V2ZW50c1N1YmplY3QgPSBuZXcgU3ViamVjdDxNbmdGb3JtRmllbGRFdmVudDxULCBFVD4+KCk7XG5cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoZWRpdG9yOiBFZGl0b3JEZXNjcmlwdG9yPEVUPiwgcHJvcGVydHk6IHN0cmluZykge1xuICAgICAgICBzdXBlcihlZGl0b3IpO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0eSA9IHByb3BlcnR5O1xuICAgICAgICB0aGlzLl9sYWJlbCA9IEkxOG5VdGlscy5UeXBlLmdldFByb3BlcnR5S2V5KHRoaXMuX2VkaXRvci5tb2RlbC5pMThuQmFzZUtleSwgcHJvcGVydHkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxhYmVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGFiZWw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwbGFjZWhvbGRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGVscFRleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oZWxwVGV4dDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJlcXVpcmVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByZXF1aXJlZEhpZGVMYWJlbE1hcmtlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkSGlkZUxhYmVsTWFya2VyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGlzYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRlZmF1bHRWYWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRWYWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGdldHRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldHRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHNldHRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NldHRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHZhbGlkYXRpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdGlvbnM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhc3luY1ZhbGlkYXRpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXN5bmNWYWxpZGF0aW9ucztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJlcXVpcmVkRXhwcmVzc2lvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkRXhwcmVzc2lvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRpc2FibGVkRXhwcmVzc2lvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkRXhwcmVzc2lvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhpZGRlbkV4cHJlc3Npb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oaWRkZW5FeHByZXNzaW9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdXBkYXRlT24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl91cGRhdGVPbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG9uSW5pdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29uSW5pdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG9uQ2hhbmdlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29uQ2hhbmdlcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZnRlckNvbnRlbnRJbml0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FmdGVyVmlld0luaXQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBvbkRlc3Ryb3koKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vbkRlc3Ryb3k7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBvblZhbHVlQ2hhbmdlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fb25WYWx1ZUNoYW5nZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsYXNzTmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZpZWxkQ2xhc3NOYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmllbGRDbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsYWJlbENsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xhYmVsQ2xhc3NOYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaW5wdXRDbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnB1dENsYXNzTmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHNpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaXplO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbG9jYWxpemF0aW9uVGFibGV2aWV3KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxpemF0aW9uVGFibGV2aWV3O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNTaXplU21hbGwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaXplID09PSBGaWVsZFNpemVFbnVtLlNtYWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNTaXplTGFyZ2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaXplID09PSBGaWVsZFNpemVFbnVtLkxhcmdlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNMb2NhbGl6ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0xvY2FsaXplZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWJzdHJhY3QgY29weSgpOiBBRmllbGREZXNjcmlwdG9yPFQsIEVULCBWVD47XG5cbiAgICBwdWJsaWMgd2l0aExhYmVsKGxhYmVsOiBzdHJpbmcgfCBudWxsKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2xhYmVsID0gbGFiZWw7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUGxhY2Vob2xkZXIocGxhY2Vob2xkZXI6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9wbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEhlbHBUZXh0KGhlbHBUZXh0OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faGVscFRleHQgPSBoZWxwVGV4dDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhSZXF1aXJlZChyZXF1aXJlZCA9IHRydWUsIHJlcXVpcmVkRXhwcmVzc2lvbj86IHN0cmluZyB8ICgoZmllbGQ/OiBGb3JtbHlGaWVsZENvbmZpZykgPT4gYm9vbGVhbikgfCBPYnNlcnZhYmxlPGJvb2xlYW4+LCBoaWRlTGFiZWxNYXJrZXIgPSBmYWxzZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9yZXF1aXJlZCA9IHJlcXVpcmVkO1xuICAgICAgICBpZiAocmVxdWlyZWRFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9yZXF1aXJlZEV4cHJlc3Npb24gPSByZXF1aXJlZEV4cHJlc3Npb247XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcmVxdWlyZWRIaWRlTGFiZWxNYXJrZXIgPSBoaWRlTGFiZWxNYXJrZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRGlzYWJsZWQoZGlzYWJsZWQgPSB0cnVlLCBkaXNhYmxlZEV4cHJlc3Npb24/OiBzdHJpbmcgfCAoKGZpZWxkPzogRm9ybWx5RmllbGRDb25maWcpID0+IGJvb2xlYW4pIHwgT2JzZXJ2YWJsZTxib29sZWFuPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9kaXNhYmxlZCA9IGRpc2FibGVkO1xuICAgICAgICBpZiAoZGlzYWJsZWRFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9kaXNhYmxlZEV4cHJlc3Npb24gPSBkaXNhYmxlZEV4cHJlc3Npb247XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhIaWRkZW4oaGlkZGVuRXhwcmVzc2lvbjogc3RyaW5nIHwgKChmaWVsZD86IEZvcm1seUZpZWxkQ29uZmlnKSA9PiBib29sZWFuKSB8IE9ic2VydmFibGU8Ym9vbGVhbj4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faGlkZGVuRXhwcmVzc2lvbiA9IGhpZGRlbkV4cHJlc3Npb247XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoVXBkYXRlT24odXBkYXRlT246ICdjaGFuZ2UnIHwgJ2JsdXInIHwgJ3N1Ym1pdCcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fdXBkYXRlT24gPSB1cGRhdGVPbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhPbkluaXQob25Jbml0PzogTW5nRm9ybWx5SG9va0ZuKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX29uSW5pdCA9IG9uSW5pdDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhPbkNoYW5nZXMob25DaGFuZ2VzPzogTW5nRm9ybWx5SG9va0ZuKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX29uQ2hhbmdlcyA9IG9uQ2hhbmdlcztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhBZnRlckNvbnRlbnRJbml0KGFmdGVyQ29udGVudEluaXQ/OiBNbmdGb3JtbHlIb29rRm4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fYWZ0ZXJDb250ZW50SW5pdCA9IGFmdGVyQ29udGVudEluaXQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQWZ0ZXJWaWV3SW5pdChhZnRlclZpZXdJbml0PzogTW5nRm9ybWx5SG9va0ZuKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2FmdGVyVmlld0luaXQgPSBhZnRlclZpZXdJbml0O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aE9uRGVzdHJveShvbkRlc3Ryb3k/OiBNbmdGb3JtbHlIb29rRm4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fb25EZXN0cm95ID0gb25EZXN0cm95O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aE9uVmFsdWVDaGFuZ2Uob25WYWx1ZUNoYW5nZT86IChmaWVsZDogTW5nRm9ybWx5RmllbGRDb25maWcsIHZhbHVlOiBhbnkpID0+IHZvaWQpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fb25WYWx1ZUNoYW5nZSA9IG9uVmFsdWVDaGFuZ2U7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRGVmYXVsdFZhbHVlKGRlZmF1bHRWYWx1ZTogVlQpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEdldHRlcihnZXR0ZXI6IChpdGVtOiBFVCkgPT4gVlQpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZ2V0dGVyID0gZ2V0dGVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFNldHRlcihzZXR0ZXI6IChpdGVtOiBFVCwgdmFsdWU6IFZUKSA9PiB2b2lkKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3NldHRlciA9IHNldHRlcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhWYWxpZGF0aW9uKG5hbWU6IHN0cmluZywgdmFsaWRhdG9yPzogTW5nRmllbGRWYWxpZGF0b3IsIG1lc3NhZ2U/OiBNbmdGaWVsZFZhbGlkYXRpb25NZXNzYWdlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRpb25zLnB1c2gobmV3IEZpZWxkVmFsaWRhdGlvbkRlc2NyaXB0b3IobmFtZSwgdmFsaWRhdG9yLCBtZXNzYWdlKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQXN5bmNWYWxpZGF0aW9uKG5hbWU6IHN0cmluZywgYXN5bmNWYWxpZGF0b3I/OiBNbmdGaWVsZEFzeW5jVmFsaWRhdG9yLCBtZXNzYWdlPzogTW5nRmllbGRWYWxpZGF0aW9uTWVzc2FnZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9hc3luY1ZhbGlkYXRpb25zLnB1c2gobmV3IEZpZWxkVmFsaWRhdGlvbkRlc2NyaXB0b3IobmFtZSwgYXN5bmNWYWxpZGF0b3IsIG1lc3NhZ2UpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhDbGFzc05hbWUoY2xhc3NOYW1lOiBzdHJpbmcsIGxhYmVsQ2xhc3NOYW1lID0gJycsIGlucHV0Q2xhc3NOYW1lID0gJycsIGZpZWxkQ2xhc3NOYW1lPzogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2NsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgICAgICAgdGhpcy5fbGFiZWxDbGFzc05hbWUgPSBsYWJlbENsYXNzTmFtZTtcbiAgICAgICAgdGhpcy5faW5wdXRDbGFzc05hbWUgPSBpbnB1dENsYXNzTmFtZTtcbiAgICAgICAgdGhpcy5fZmllbGRDbGFzc05hbWUgPSBmaWVsZENsYXNzTmFtZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhTaXplKHNpemU6IEZpZWxkU2l6ZUVudW0gPSBGaWVsZFNpemVFbnVtLk5vcm1hbCk6IHRoaXMge1xuICAgICAgICB0aGlzLl9zaXplID0gc2l6ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgYWRkcyBhbiBpY29uIHdpdGggdGV4dCBTaG93IGFsbCB0cmFuc2xhdGlvbnMgYWJvdmUgdGhlIGZpZWxkIGFuZCBhZnRlciBjbGlja2luZyBvbiBpdCwgaXQgZGlzcGxheXMgYSBuZXcgZGlhbG9nIHdpdGggdGFibGV2aWV3LlxuICAgICAqIFRoaXMgbmV3IHRhYmxlIHZpZXcgc2hvd3MgYWxsIGF2YWlsYWJsZSB0cmFuc2xhdGlvbnMgZm9yIHNwZWNpZmljIHByb3BlcnR5IGFuZCBhbGxvd3MgZWRpdGluZyBpdC5cbiAgICAgKiBAcGFyYW0gdGFibGV2aWV3IHdpdGggbG9va3VwIHByb3ZpZGVyIGZvciBsb2NhbGVzXG4gICAgICovXG4gICAgcHVibGljIGxvY2FsaXplZCh0YWJsZXZpZXc/OiBUYWJsZXZpZXdEZXNjcmlwdG9yPFQ+KTogdGhpcyB7XG4gICAgICAgIGlmICghdGhpcy5lZGl0b3IuaXNMb2NhbGl6ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yLmxvY2FsaXplZCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lzTG9jYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRhYmxldmlldykge1xuICAgICAgICAgICAgdGhpcy5fbG9jYWxpemF0aW9uVGFibGV2aWV3ID0gdGFibGV2aWV3O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbG9jYWxpemF0aW9uVGFibGV2aWV3RGVzY3JpcHRvciA9IG5ldyBUYWJsZXZpZXdEZXNjcmlwdG9yKHRoaXMuX2VkaXRvci5sb2NhbGl6YXRpb25CZWFuVHlwZSEpO1xuICAgICAgICAgICAgbG9jYWxpemF0aW9uVGFibGV2aWV3RGVzY3JpcHRvci5hZGRDb2x1bW4odGhpcy5fZWRpdG9yLmxvY2FsaXphdGlvbkxvY2FsZVByb3BlcnR5ISk7XG4gICAgICAgICAgICBsb2NhbGl6YXRpb25UYWJsZXZpZXdEZXNjcmlwdG9yLmFkZENvbHVtbih0aGlzLnByb3BlcnR5KTtcblxuICAgICAgICAgICAgbG9jYWxpemF0aW9uVGFibGV2aWV3RGVzY3JpcHRvclxuICAgICAgICAgICAgICAgIC5hZGRGaWVsZExvb2t1cCh0aGlzLl9lZGl0b3IubG9jYWxpemF0aW9uTG9jYWxlUHJvcGVydHkhLCBTdHJpbmcpXG4gICAgICAgICAgICAgICAgLndpdGhMb29rdXAoKHFwLCBzZXJ2aWNlKSA9PiBvZihzZXJ2aWNlIS5hcHBEYXRhTGFuZ3VhZ2VzKSwgTW5nQ29tbW9uc1NlcnZpY2UpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2VkaXRvci5sb2NhbGVMb29rdXApIHtcbiAgICAgICAgICAgICAgICBsb2NhbGl6YXRpb25UYWJsZXZpZXdEZXNjcmlwdG9yLmFkZEZpZWxkTG9va3VwKHRoaXMuX2VkaXRvci5sb2NhbGl6YXRpb25Mb2NhbGVQcm9wZXJ0eSEsIFN0cmluZykud2l0aExvb2t1cCgoKSA9PiB0aGlzLl9lZGl0b3IubG9jYWxlTG9va3VwISgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxvY2FsaXphdGlvblRhYmxldmlld0Rlc2NyaXB0b3IuYWRkRmllbGQodGhpcy5wcm9wZXJ0eSk7XG5cbiAgICAgICAgICAgIC8vIHRoaXMgaXMgdXNlZCBpbiB0YWJsZS5jb21wb25lbnQgdG8gbWFyayByb3cgd2l0aCBkZWZhdWx0IGRhdGEgbGFuZ3VhZ2VcbiAgICAgICAgICAgIGxvY2FsaXphdGlvblRhYmxldmlld0Rlc2NyaXB0b3IudGFibGUud2l0aExvY2FsaXphdGlvbkxvY2FsZVByb3BlcnR5KHRoaXMuX2VkaXRvci5sb2NhbGl6YXRpb25Mb2NhbGVQcm9wZXJ0eSEpO1xuXG4gICAgICAgICAgICB0aGlzLl9sb2NhbGl6YXRpb25UYWJsZXZpZXcgPSBuZXcgVGFibGV2aWV3RGVzY3JpcHRvcih0aGlzLl9lZGl0b3IubW9kZWwudHlwZSk7XG4gICAgICAgICAgICB0aGlzLl9sb2NhbGl6YXRpb25UYWJsZXZpZXcuYWRkRmllbGRNYW55RWRpdG9yKHRoaXMuX2VkaXRvci5sb2NhbGl6YXRpb25Mb2NhbGl6YXRpb25Qcm9wZXJ0eSEsIGxvY2FsaXphdGlvblRhYmxldmlld0Rlc2NyaXB0b3IpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZXh0RXZlbnQodHlwZTogTW5nRm9ybUZpZWxkRXZlbnRUeXBlRW51bSwgY21wVHlwZTogVHlwZTxhbnk+LCBjbXBJbnN0YW5jZTogYW55LCBkYXRhPzogTW5nRm9ybUZpZWxkRXZlbnREYXRhPFQsIEVUPikge1xuICAgICAgICB0aGlzLl9ldmVudHNTdWJqZWN0Lm5leHQobmV3IE1uZ0Zvcm1GaWVsZEV2ZW50KHR5cGUsIGNtcFR5cGUsIGNtcEluc3RhbmNlLCBkYXRhKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBldmVudHMkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnRzU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY29weUZpZWxkc1RvKG9iajogQUZpZWxkRGVzY3JpcHRvcjxULCBFVCwgVlQ+KSB7XG4gICAgICAgIG9iai5fbGFiZWwgPSB0aGlzLl9sYWJlbDtcbiAgICAgICAgb2JqLl9wbGFjZWhvbGRlciA9IHRoaXMuX3BsYWNlaG9sZGVyO1xuICAgICAgICBvYmouX2hlbHBUZXh0ID0gdGhpcy5faGVscFRleHQ7XG4gICAgICAgIG9iai5fcmVxdWlyZWQgPSB0aGlzLl9yZXF1aXJlZDtcbiAgICAgICAgb2JqLl9kaXNhYmxlZCA9IHRoaXMuX2Rpc2FibGVkO1xuICAgICAgICBvYmouX2RlZmF1bHRWYWx1ZSA9IHRoaXMuX2RlZmF1bHRWYWx1ZTtcbiAgICAgICAgb2JqLl9yZXF1aXJlZEV4cHJlc3Npb24gPSB0aGlzLl9yZXF1aXJlZEV4cHJlc3Npb247XG4gICAgICAgIG9iai5faGlkZGVuRXhwcmVzc2lvbiA9IHRoaXMuX2hpZGRlbkV4cHJlc3Npb247XG4gICAgICAgIG9iai5fdXBkYXRlT24gPSB0aGlzLl91cGRhdGVPbjtcbiAgICAgICAgb2JqLl9vbkluaXQgPSB0aGlzLl9vbkluaXQ7XG4gICAgICAgIG9iai5fb25DaGFuZ2VzID0gdGhpcy5fb25DaGFuZ2VzO1xuICAgICAgICBvYmouX29uRGVzdHJveSA9IHRoaXMuX29uRGVzdHJveTtcbiAgICAgICAgb2JqLl9hZnRlckNvbnRlbnRJbml0ID0gdGhpcy5fYWZ0ZXJDb250ZW50SW5pdDtcbiAgICAgICAgb2JqLl9hZnRlclZpZXdJbml0ID0gdGhpcy5fYWZ0ZXJWaWV3SW5pdDtcbiAgICAgICAgb2JqLl9vblZhbHVlQ2hhbmdlID0gdGhpcy5fb25WYWx1ZUNoYW5nZTtcbiAgICAgICAgb2JqLl9kaXNhYmxlZEV4cHJlc3Npb24gPSB0aGlzLl9kaXNhYmxlZEV4cHJlc3Npb247XG4gICAgICAgIG9iai5fY2xhc3NOYW1lID0gdGhpcy5fY2xhc3NOYW1lO1xuICAgICAgICBvYmouX3NpemUgPSB0aGlzLnNpemU7XG4gICAgICAgIG9iai5fZ2V0dGVyID0gdGhpcy5fZ2V0dGVyO1xuICAgICAgICBvYmouX3NldHRlciA9IHRoaXMuX3NldHRlcjtcbiAgICAgICAgb2JqLl9pc0xvY2FsaXplZCA9IHRoaXMuX2lzTG9jYWxpemVkO1xuICAgICAgICBvYmouX2xvY2FsaXphdGlvblRhYmxldmlldyA9IHRoaXMuX2xvY2FsaXphdGlvblRhYmxldmlldz8uY29weSgpO1xuICAgICAgICBvYmouX3ZhbGlkYXRpb25zID0gdGhpcy5fdmFsaWRhdGlvbnMubWFwKHZhbHVlID0+IHZhbHVlLmNvcHkoKSk7XG4gICAgICAgIG9iai5fYXN5bmNWYWxpZGF0aW9ucyA9IHRoaXMuX2FzeW5jVmFsaWRhdGlvbnMubWFwKHZhbHVlID0+IHZhbHVlLmNvcHkoKSk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRmllbGRJbnB1dERlc2NyaXB0b3I8RVQ+IGV4dGVuZHMgQUZpZWxkRGVzY3JpcHRvcjxzdHJpbmcgfCBzdHJpbmdbXSB8IG51bWJlciB8IGJvb2xlYW4gfCBEYXRlIHwgRmlsZSB8IEZpbGVbXSwgRVQ+IHtcbiAgICBwcml2YXRlIF9maWVsZFR5cGU6IEZpZWxkSW5wdXRUeXBlRW51bSA9IEZpZWxkSW5wdXRUeXBlRW51bS5UZXh0O1xuXG4gICAgLy8gdGV4dGFyZWEgc3BlY2lmaWMgcHJvcGVydGllc1xuICAgIHByaXZhdGUgX3Jvd3M/OiBudW1iZXI7XG5cbiAgICAvLyBudW1iZXIgc3BlY2lmaWMgcHJvcGVydGllc1xuICAgIHByaXZhdGUgX251bWJlck1pbj86IG51bWJlcjtcbiAgICBwcml2YXRlIF9udW1iZXJNYXg/OiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfbnVtYmVyU3RlcD86IG51bWJlcjtcbiAgICBwcml2YXRlIF9udW1iZXJBdXRvQ29ycmVjdCA9IHRydWU7XG4gICAgcHJpdmF0ZSBfbnVtYmVyTWluRnJhY3Rpb25EaWdpdHM/OiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfbnVtYmVyTWF4RnJhY3Rpb25EaWdpdHM/OiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfbnVtYmVyVXNlR3JvdXBpbmcgPSB0cnVlO1xuICAgIHByaXZhdGUgX2xvY2FsZT86IHN0cmluZztcblxuICAgIC8vIGN1cnJlbmN5IHNwZWNpZmljIHByb3BlcnRpZXNcbiAgICBwcml2YXRlIF9jdXJyZW5jeT86IHN0cmluZztcbiAgICBwcml2YXRlIF9jdXJyZW5jeURpc3BsYXk6ICdzeW1ib2wnIHwgJ2NvZGUnIHwgJ25hbWUnID0gJ3N5bWJvbCc7XG4gICAgcHJpdmF0ZSBfY3VycmVuY3lGcm9tUHJvcGVydHk/OiBzdHJpbmc7XG5cbiAgICAvLyByYWRpbyBzcGVjaWZpYyBwcm9wZXJ0aWVzXG4gICAgcHJpdmF0ZSBfcmFkaW9PcHRpb25zOiBBcnJheTxFbnVtVmFsdWU8c3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IERhdGU+PiA9IFtdO1xuXG4gICAgLy8gZGF0ZXBpY2tlciBzcGVjaWZpYyBwcm9wZXJ0aWVzXG4gICAgcHJpdmF0ZSBfZGF0ZVBpY2tlckZvcm1hdD86IHN0cmluZztcbiAgICBwcml2YXRlIF9kYXRlUGlja2VyTWluPzogRGF0ZTtcbiAgICBwcml2YXRlIF9kYXRlUGlja2VyTWF4PzogRGF0ZTtcbiAgICBwcml2YXRlIF9kYXRlUGlja2VyU2hvd1RpbWUgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9kYXRlUGlja2VyU2hvd1NlY29uZHMgPSB0cnVlO1xuXG4gICAgLy8gaW5wdXQgc3BlY2lmaWMgcHJvcGVydGllc1xuICAgIHByaXZhdGUgX21heExlbmd0aD86IG51bWJlcjtcbiAgICBwcml2YXRlIF9taW5MZW5ndGg/OiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfcGF0dGVybj86IHN0cmluZyB8IFJlZ0V4cDtcblxuICAgIC8vIG1hc2sgc3BlY2lmaWMgcHJvcGVydGllc1xuICAgIHByaXZhdGUgX21hc2s/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfc2xvdENoYXI/OiBzdHJpbmc7XG5cbiAgICAvLyBmaWxlIHNwZWNpZmljIHByb3BlcnRpZXNcbiAgICBwcml2YXRlIF9maWxlTXVsdGlwbGUgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9maWxlTWF4RmlsZVNpemUgPSA1MDAwMDA7XG4gICAgcHJpdmF0ZSBfZmlsZUFjY2VwdD86IHN0cmluZztcbiAgICBwcml2YXRlIF9maWxlT25TZWxlY3RIYW5kbGVyPzogKGZpbGU6IEZpbGVbXSB8IG51bGwsIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4gdm9pZDtcblxuICAgIC8vIGltYWdlIHNwZWNpZmljIHByb3BlcnRpZXNcbiAgICBwcml2YXRlIF9pbWFnZVByZXZpZXcgPSB0cnVlO1xuICAgIHByaXZhdGUgX2ltYWdlVXJsSW5wdXRIaWRkZW5PbkRpc2FibGVkID0gZmFsc2U7XG5cbiAgICAvLyBjdXN0b20gY29tcG9uZW50IHByb3BlcnRpZXNcbiAgICBwcml2YXRlIF9jdXN0b21Db21wb25lbnROYW1lPzogc3RyaW5nO1xuICAgIHByaXZhdGUgX2N1c3RvbUNvbXBvbmVudFR5cGU/OiBUeXBlPEFNbmdGb3JtbHlDdXN0b21GaWVsZENvbXBvbmVudD47XG4gICAgcHJpdmF0ZSBfY3VzdG9tQ29tcG9uZW50V3JhcHBlcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBjb25zdHJ1Y3RvcihlZGl0b3I6IEVkaXRvckRlc2NyaXB0b3I8RVQ+LCBwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKGVkaXRvciwgcHJvcGVydHkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGNvbnZlcnRzIGZpZWxkIHRvIGdpdmVuIHR5cGUgd2l0aCBhZGRpdGlvbmFsIGFyZ3VtZW50c1xuICAgICAqIEBwYXJhbSBmaWVsZFR5cGUgZmllbGQgdHlwZSBlbnVtXG4gICAgICogQHBhcmFtIGFyZ3MgYW55IGFkZGl0aW9uYWwgYXJndW1lbnRzIGZvciBmaWVsZCAob3B0aW9uYWwpXG4gICAgICovXG4gICAgcHVibGljIGFzVHlwZShmaWVsZFR5cGU6IEZpZWxkSW5wdXRUeXBlRW51bSwgLi4uYXJnczogYW55W10pOiB0aGlzIHtcbiAgICAgICAgc3dpdGNoIChmaWVsZFR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgRmllbGRJbnB1dFR5cGVFbnVtLkhpZGRlbjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hc0hpZGRlbigpO1xuICAgICAgICAgICAgY2FzZSBGaWVsZElucHV0VHlwZUVudW0uTGFiZWw6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXNMYWJlbCgpO1xuICAgICAgICAgICAgY2FzZSBGaWVsZElucHV0VHlwZUVudW0uVGV4dGFyZWE6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXNUZXh0YXJlYSguLi5hcmdzKTtcbiAgICAgICAgICAgIGNhc2UgRmllbGRJbnB1dFR5cGVFbnVtLk51bWJlcjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hc051bWJlcigpO1xuICAgICAgICAgICAgY2FzZSBGaWVsZElucHV0VHlwZUVudW0uQ3VycmVuY3k6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXNDdXJyZW5jeSguLi5hcmdzKTtcbiAgICAgICAgICAgIGNhc2UgRmllbGRJbnB1dFR5cGVFbnVtLlN3aXRjaDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hc1N3aXRjaCgpO1xuICAgICAgICAgICAgY2FzZSBGaWVsZElucHV0VHlwZUVudW0uUmFkaW86XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXNSYWRpbyhhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgICAgIGNhc2UgRmllbGRJbnB1dFR5cGVFbnVtLkRhdGVwaWNrZXI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXNEYXRlUGlja2VyKC4uLmFyZ3MpO1xuICAgICAgICAgICAgY2FzZSBGaWVsZElucHV0VHlwZUVudW0uTWFzazpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hc01hc2soYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgICAgICBjYXNlIEZpZWxkSW5wdXRUeXBlRW51bS5GaWxlOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFzRmlsZSguLi5hcmdzKTtcbiAgICAgICAgICAgIGNhc2UgRmllbGRJbnB1dFR5cGVFbnVtLkltYWdlRmlsZTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hc0ltYWdlRmlsZSgpO1xuICAgICAgICAgICAgY2FzZSBGaWVsZElucHV0VHlwZUVudW0uSW1hZ2VVcmw6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXNJbWFnZVVybCgpO1xuICAgICAgICAgICAgY2FzZSBGaWVsZElucHV0VHlwZUVudW0uQ3VzdG9tOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFzQ3VzdG9tQ29tcG9uZW50KGFyZ3NbMF0pO1xuICAgICAgICAgICAgY2FzZSBGaWVsZElucHV0VHlwZUVudW0uVGV4dDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hc1RleHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZmllbGRUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmllbGRUeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcm93cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd3M7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBudW1iZXJNaW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9udW1iZXJNaW47XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBudW1iZXJNYXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9udW1iZXJNYXg7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBudW1iZXJTdGVwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbnVtYmVyU3RlcDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG51bWJlckF1dG9Db3JyZWN0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbnVtYmVyQXV0b0NvcnJlY3Q7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBudW1iZXJNaW5GcmFjdGlvbkRpZ2l0cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX251bWJlck1pbkZyYWN0aW9uRGlnaXRzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbnVtYmVyTWF4RnJhY3Rpb25EaWdpdHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9udW1iZXJNYXhGcmFjdGlvbkRpZ2l0cztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG51bWJlclVzZUdyb3VwaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbnVtYmVyVXNlR3JvdXBpbmc7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByYWRpb09wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yYWRpb09wdGlvbnM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkYXRlUGlja2VyRm9ybWF0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVBpY2tlckZvcm1hdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRhdGVQaWNrZXJNaW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlUGlja2VyTWluO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGF0ZVBpY2tlck1heCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVQaWNrZXJNYXg7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkYXRlUGlja2VyU2hvd1RpbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlUGlja2VyU2hvd1RpbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkYXRlUGlja2VyU2hvd1NlY29uZHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlUGlja2VyU2hvd1NlY29uZHM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtYXhMZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXhMZW5ndGg7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtaW5MZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9taW5MZW5ndGg7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGF0dGVybjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1hc2soKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXNrO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc2xvdENoYXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zbG90Q2hhcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZpbGVNdWx0aXBsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbGVNdWx0aXBsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZpbGVNYXhGaWxlU2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbGVNYXhGaWxlU2l6ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZpbGVBY2NlcHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWxlQWNjZXB0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZmlsZU9uU2VsZWN0SGFuZGxlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbGVPblNlbGVjdEhhbmRsZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpbWFnZVByZXZpZXcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbWFnZVByZXZpZXc7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpbWFnZVVybElucHV0VmlzaWJsZU9uRGlzYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbWFnZVVybElucHV0SGlkZGVuT25EaXNhYmxlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGN1c3RvbUNvbXBvbmVudE5hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdXN0b21Db21wb25lbnROYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY3VzdG9tQ29tcG9uZW50VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1c3RvbUNvbXBvbmVudFR5cGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjdXN0b21Db21wb25lbnRXcmFwcGVycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1c3RvbUNvbXBvbmVudFdyYXBwZXJzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbG9jYWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY3VycmVuY3koKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW5jeTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGN1cnJlbmN5RnJvbVByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVuY3lGcm9tUHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjdXJyZW5jeURpc3BsYXkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW5jeURpc3BsYXk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzSGlkZGVuKCk6IHRoaXMge1xuICAgICAgICB0aGlzLl9maWVsZFR5cGUgPSBGaWVsZElucHV0VHlwZUVudW0uSGlkZGVuO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNMYWJlbCgpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZmllbGRUeXBlID0gRmllbGRJbnB1dFR5cGVFbnVtLkxhYmVsO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNUZXh0KCk6IHRoaXMge1xuICAgICAgICB0aGlzLl9maWVsZFR5cGUgPSBGaWVsZElucHV0VHlwZUVudW0uVGV4dDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzVGV4dGFyZWEocm93cyA9IDMpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZmllbGRUeXBlID0gRmllbGRJbnB1dFR5cGVFbnVtLlRleHRhcmVhO1xuICAgICAgICB0aGlzLl9yb3dzID0gcm93cztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzTnVtYmVyKCk6IHRoaXMge1xuICAgICAgICB0aGlzLl9maWVsZFR5cGUgPSBGaWVsZElucHV0VHlwZUVudW0uTnVtYmVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNDdXJyZW5jeShjdXJyZW5jeUZyb21Qcm9wZXJ0eT86IHN0cmluZywgY3VycmVuY3k/OiBzdHJpbmcsIGN1cnJlbmN5RGlzcGxheT86ICdzeW1ib2wnIHwgJ2NvZGUnIHwgJ25hbWUnKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ZpZWxkVHlwZSA9IEZpZWxkSW5wdXRUeXBlRW51bS5DdXJyZW5jeTtcbiAgICAgICAgdGhpcy5fY3VycmVuY3lGcm9tUHJvcGVydHkgPSBjdXJyZW5jeUZyb21Qcm9wZXJ0eTtcbiAgICAgICAgdGhpcy5fY3VycmVuY3kgPSBjdXJyZW5jeSA/PyB0aGlzLl9jdXJyZW5jeTtcbiAgICAgICAgdGhpcy5fY3VycmVuY3lEaXNwbGF5ID0gY3VycmVuY3lEaXNwbGF5ID8/IHRoaXMuX2N1cnJlbmN5RGlzcGxheTtcbiAgICAgICAgcmV0dXJuIHRoaXMud2l0aE51bWJlckZyYWN0aW9ucygyLCAyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNTd2l0Y2goKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ZpZWxkVHlwZSA9IEZpZWxkSW5wdXRUeXBlRW51bS5Td2l0Y2g7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc1JhZGlvKG9wdGlvbnM6IEFycmF5PHN0cmluZyB8IG51bWJlcj4sIG9wdGlvbnNUaXRsZVBhdGg/OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZmllbGRUeXBlID0gRmllbGRJbnB1dFR5cGVFbnVtLlJhZGlvO1xuICAgICAgICB0aGlzLl9yYWRpb09wdGlvbnMgPSBvcHRpb25zLm1hcChvID0+IDxFbnVtVmFsdWU8c3RyaW5nIHwgbnVtYmVyPj57dmFsdWU6IG8sIHRpdGxlOiBgJHtvcHRpb25zVGl0bGVQYXRoID8gYCR7b3B0aW9uc1RpdGxlUGF0aH0uYCA6ICcnfSR7b31gfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc1JhZGlvRnJvbUVudW0oZW51bVR5cGU6IEVudW1UeXBlLCBvcHRpb25zVGl0bGVQYXRoPzogc3RyaW5nIHwgbnVsbCwgdmFsdWVzPzogQXJyYXk8RW51bUNvbnN0YW50VHlwZT4sIG5hbWVBc1ZhbHVlID0gZmFsc2UpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZmllbGRUeXBlID0gRmllbGRJbnB1dFR5cGVFbnVtLlJhZGlvO1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnNUaXRsZVBhdGggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBvcHRpb25zVGl0bGVQYXRoID0gVHlwZVV0aWwuZmluZEVudW1OYW1lKGVudW1UeXBlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9yYWRpb09wdGlvbnMgPSBBcnJheS5pc0FycmF5KHZhbHVlcylcbiAgICAgICAgICAgID8gRW51bVV0aWwuZnJvbVZhbHVlc0FzRW51bVZhbHVlQXJyYXkoZW51bVR5cGUsIHZhbHVlcywgbmFtZUFzVmFsdWUsIG9wdGlvbnNUaXRsZVBhdGggPz8gdW5kZWZpbmVkKVxuICAgICAgICAgICAgOiBFbnVtVXRpbC5mcm9tQ29uc3RhbnRzQXNFbnVtVmFsdWVBcnJheShlbnVtVHlwZSwgbmFtZUFzVmFsdWUsIG9wdGlvbnNUaXRsZVBhdGggPz8gdW5kZWZpbmVkKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzRGF0ZVBpY2tlcihmb3JtYXQ/OiBzdHJpbmcsIG1pbj86IERhdGUsIG1heD86IERhdGUsIHNob3dUaW1lPzogYm9vbGVhbiwgc2hvd1NlY29uZHM/OiBib29sZWFuKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ZpZWxkVHlwZSA9IEZpZWxkSW5wdXRUeXBlRW51bS5EYXRlcGlja2VyO1xuICAgICAgICB0aGlzLl9kYXRlUGlja2VyRm9ybWF0ID0gZm9ybWF0O1xuICAgICAgICB0aGlzLl9kYXRlUGlja2VyTWluID0gbWluO1xuICAgICAgICB0aGlzLl9kYXRlUGlja2VyTWF4ID0gbWF4O1xuICAgICAgICB0aGlzLl9kYXRlUGlja2VyU2hvd1RpbWUgPSBzaG93VGltZSA/PyBmYWxzZTtcbiAgICAgICAgdGhpcy5fZGF0ZVBpY2tlclNob3dTZWNvbmRzID0gc2hvd1NlY29uZHMgPz8gdHJ1ZTtcblxuICAgICAgICBpZiAobWluICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy53aXRoVmFsaWRhdGlvbignbWluRGF0ZScsIG1pbkRhdGVWYWxpZGF0b3IobWluKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1heCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLndpdGhWYWxpZGF0aW9uKCdtYXhEYXRlJywgbWF4RGF0ZVZhbGlkYXRvcihtYXgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc01hc2sobWFzazogc3RyaW5nLCBzbG90Q2hhcjogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ZpZWxkVHlwZSA9IEZpZWxkSW5wdXRUeXBlRW51bS5NYXNrO1xuICAgICAgICB0aGlzLl9tYXNrID0gbWFzaztcbiAgICAgICAgdGhpcy5fc2xvdENoYXIgPSBzbG90Q2hhcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzRmlsZShtdWx0aXBsZSA9IGZhbHNlLCBtYXhGaWxlU2l6ZSA9IDUwMDAwMCwgYWNjZXB0Pzogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ZpZWxkVHlwZSA9IEZpZWxkSW5wdXRUeXBlRW51bS5GaWxlO1xuICAgICAgICB0aGlzLl9maWxlTXVsdGlwbGUgPSBtdWx0aXBsZTtcbiAgICAgICAgdGhpcy5fZmlsZU1heEZpbGVTaXplID0gbWF4RmlsZVNpemU7XG4gICAgICAgIHRoaXMuX2ZpbGVBY2NlcHQgPSBhY2NlcHQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc0ltYWdlRmlsZShtdWx0aXBsZSA9IGZhbHNlLCBtYXhGaWxlU2l6ZSA9IDUwMDAwMCwgYWNjZXB0ID0gJ2ltYWdlLyonKTogdGhpcyB7XG4gICAgICAgIHRoaXMuYXNGaWxlKG11bHRpcGxlLCBtYXhGaWxlU2l6ZSwgYWNjZXB0KTtcbiAgICAgICAgdGhpcy5fZmllbGRUeXBlID0gRmllbGRJbnB1dFR5cGVFbnVtLkltYWdlRmlsZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzSW1hZ2VVcmwobXVsdGlwbGUgPSBmYWxzZSwgcHJldmlldyA9IHRydWUsIGlucHV0VmlzaWJsZU9uRGlzYWJsZWQgPSB0cnVlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ZpZWxkVHlwZSA9IEZpZWxkSW5wdXRUeXBlRW51bS5JbWFnZVVybDtcbiAgICAgICAgdGhpcy5fZmlsZU11bHRpcGxlID0gbXVsdGlwbGU7XG4gICAgICAgIHRoaXMuX2ltYWdlUHJldmlldyA9IHByZXZpZXc7XG4gICAgICAgIHRoaXMuX2ltYWdlVXJsSW5wdXRIaWRkZW5PbkRpc2FibGVkID0gaW5wdXRWaXNpYmxlT25EaXNhYmxlZDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzQ3VzdG9tQ29tcG9uZW50KGN1c3RvbUNvbXBvbmVudDogc3RyaW5nIHwgVHlwZTxBTW5nRm9ybWx5Q3VzdG9tRmllbGRDb21wb25lbnQ+LCB1c2VXcmFwcGVycz86IHN0cmluZ1tdKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ZpZWxkVHlwZSA9IEZpZWxkSW5wdXRUeXBlRW51bS5DdXN0b207XG4gICAgICAgIGlmICh0eXBlb2YgY3VzdG9tQ29tcG9uZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhpcy5fY3VzdG9tQ29tcG9uZW50TmFtZSA9IGN1c3RvbUNvbXBvbmVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2N1c3RvbUNvbXBvbmVudFR5cGUgPSBjdXN0b21Db21wb25lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVzZVdyYXBwZXJzKSB7XG4gICAgICAgICAgICB0aGlzLl9jdXN0b21Db21wb25lbnRXcmFwcGVycyA9IHVzZVdyYXBwZXJzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoTnVtYmVyVmFsaWRhdGlvbihtaW4/OiBudW1iZXIsIG1heD86IG51bWJlciwgc3RlcD86IG51bWJlciwgYXV0b0NvcnJlY3QgPSB0cnVlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX251bWJlclN0ZXAgPSBzdGVwID8/IHRoaXMuX251bWJlclN0ZXA7XG4gICAgICAgIHRoaXMuX251bWJlckF1dG9Db3JyZWN0ID0gYXV0b0NvcnJlY3Q7XG4gICAgICAgIHRoaXMuX251bWJlck1pbiA9IG1pbiA/PyB0aGlzLl9udW1iZXJNaW4gPz8gTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVI7XG4gICAgICAgIHRoaXMuX251bWJlck1heCA9IG1heCA/PyB0aGlzLl9udW1iZXJNYXggPz8gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoTG9jYWxlKGxvY2FsZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2xvY2FsZSA9IGxvY2FsZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhOdW1iZXJGcmFjdGlvbnMobWluPzogbnVtYmVyLCBtYXg/OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fbnVtYmVyTWluRnJhY3Rpb25EaWdpdHMgPSBtaW47XG4gICAgICAgIHRoaXMuX251bWJlck1heEZyYWN0aW9uRGlnaXRzID0gbWF4O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aE51bWJlckdyb3VwaW5nKHVzZUdyb3VwaW5nID0gdHJ1ZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9udW1iZXJVc2VHcm91cGluZyA9IHVzZUdyb3VwaW5nO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFRleHRWYWxpZGF0aW9uKG1pbkxlbmd0aD86IG51bWJlciwgbWF4TGVuZ3RoPzogbnVtYmVyLCBwYXR0ZXJuPzogc3RyaW5nIHwgUmVnRXhwKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX21pbkxlbmd0aCA9IG1pbkxlbmd0aDtcbiAgICAgICAgdGhpcy5fbWF4TGVuZ3RoID0gbWF4TGVuZ3RoO1xuICAgICAgICB0aGlzLl9wYXR0ZXJuID0gcGF0dGVybjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhUZXh0VmFsaWRhdGlvbkVtYWlsKCk6IHRoaXMge1xuICAgICAgICBpZiAodGhpcy5maWVsZFR5cGUgPT09IEZpZWxkSW5wdXRUeXBlRW51bS5UZXh0KSB7XG4gICAgICAgICAgICB0aGlzLndpdGhWYWxpZGF0aW9uKCdlbWFpbCcsIFZhbGlkYXRvcnMuZW1haWwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRmlsZU9uU2VsZWN0SGFuZGxlcihmbjogKGZpbGU6IEZpbGVbXSB8IG51bGwsIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4gdm9pZCkge1xuICAgICAgICB0aGlzLl9maWxlT25TZWxlY3RIYW5kbGVyID0gZm47XG4gICAgfVxuXG4gICAgcHVibGljIGNvcHkoKTogRmllbGRJbnB1dERlc2NyaXB0b3I8RVQ+IHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBuZXcgRmllbGRJbnB1dERlc2NyaXB0b3I8RVQ+KHRoaXMuX2VkaXRvciwgdGhpcy5fcHJvcGVydHkpO1xuICAgICAgICB0aGlzLmNvcHlGaWVsZHNUbyhmaWVsZCk7XG4gICAgICAgIGZpZWxkLl9maWVsZFR5cGUgPSB0aGlzLl9maWVsZFR5cGU7XG4gICAgICAgIGZpZWxkLl9yb3dzID0gdGhpcy5fcm93cztcbiAgICAgICAgZmllbGQuX251bWJlck1pbiA9IHRoaXMuX251bWJlck1pbjtcbiAgICAgICAgZmllbGQuX251bWJlck1heCA9IHRoaXMuX251bWJlck1heDtcbiAgICAgICAgZmllbGQuX251bWJlclN0ZXAgPSB0aGlzLl9udW1iZXJTdGVwO1xuICAgICAgICBmaWVsZC5fbnVtYmVyQXV0b0NvcnJlY3QgPSB0aGlzLl9udW1iZXJBdXRvQ29ycmVjdDtcbiAgICAgICAgZmllbGQuX251bWJlck1pbkZyYWN0aW9uRGlnaXRzID0gdGhpcy5fbnVtYmVyTWluRnJhY3Rpb25EaWdpdHM7XG4gICAgICAgIGZpZWxkLl9udW1iZXJNYXhGcmFjdGlvbkRpZ2l0cyA9IHRoaXMuX251bWJlck1heEZyYWN0aW9uRGlnaXRzO1xuICAgICAgICBmaWVsZC5fbnVtYmVyVXNlR3JvdXBpbmcgPSB0aGlzLl9udW1iZXJVc2VHcm91cGluZztcbiAgICAgICAgZmllbGQuX3JhZGlvT3B0aW9ucyA9IFsuLi50aGlzLl9yYWRpb09wdGlvbnNdO1xuICAgICAgICBmaWVsZC5fZGF0ZVBpY2tlckZvcm1hdCA9IHRoaXMuX2RhdGVQaWNrZXJGb3JtYXQ7XG4gICAgICAgIGZpZWxkLl9kYXRlUGlja2VyTWluID0gdGhpcy5fZGF0ZVBpY2tlck1pbjtcbiAgICAgICAgZmllbGQuX2RhdGVQaWNrZXJNYXggPSB0aGlzLl9kYXRlUGlja2VyTWF4O1xuICAgICAgICBmaWVsZC5fZGF0ZVBpY2tlclNob3dUaW1lID0gdGhpcy5fZGF0ZVBpY2tlclNob3dUaW1lO1xuICAgICAgICBmaWVsZC5fZGF0ZVBpY2tlclNob3dTZWNvbmRzID0gdGhpcy5fZGF0ZVBpY2tlclNob3dTZWNvbmRzO1xuICAgICAgICBmaWVsZC5fbWF4TGVuZ3RoID0gdGhpcy5fbWF4TGVuZ3RoO1xuICAgICAgICBmaWVsZC5fbWluTGVuZ3RoID0gdGhpcy5fbWluTGVuZ3RoO1xuICAgICAgICBmaWVsZC5fcGF0dGVybiA9IHRoaXMuX3BhdHRlcm47XG4gICAgICAgIGZpZWxkLl9tYXNrID0gdGhpcy5fbWFzaztcbiAgICAgICAgZmllbGQuX3Nsb3RDaGFyID0gdGhpcy5fc2xvdENoYXI7XG4gICAgICAgIGZpZWxkLl9maWxlTXVsdGlwbGUgPSB0aGlzLl9maWxlTXVsdGlwbGU7XG4gICAgICAgIGZpZWxkLl9maWxlTWF4RmlsZVNpemUgPSB0aGlzLl9maWxlTWF4RmlsZVNpemU7XG4gICAgICAgIGZpZWxkLl9maWxlQWNjZXB0ID0gdGhpcy5fZmlsZUFjY2VwdDtcbiAgICAgICAgZmllbGQuX2ZpbGVPblNlbGVjdEhhbmRsZXIgPSB0aGlzLl9maWxlT25TZWxlY3RIYW5kbGVyO1xuICAgICAgICBmaWVsZC5faW1hZ2VQcmV2aWV3ID0gdGhpcy5faW1hZ2VQcmV2aWV3O1xuICAgICAgICBmaWVsZC5faW1hZ2VVcmxJbnB1dEhpZGRlbk9uRGlzYWJsZWQgPSB0aGlzLl9pbWFnZVVybElucHV0SGlkZGVuT25EaXNhYmxlZDtcbiAgICAgICAgZmllbGQuX2N1c3RvbUNvbXBvbmVudE5hbWUgPSB0aGlzLl9jdXN0b21Db21wb25lbnROYW1lO1xuICAgICAgICBmaWVsZC5fY3VzdG9tQ29tcG9uZW50VHlwZSA9IHRoaXMuX2N1c3RvbUNvbXBvbmVudFR5cGU7XG4gICAgICAgIGZpZWxkLl9jdXN0b21Db21wb25lbnRXcmFwcGVycyA9IHRoaXMuX2N1c3RvbUNvbXBvbmVudFdyYXBwZXJzO1xuICAgICAgICBmaWVsZC5fbG9jYWxlID0gdGhpcy5fbG9jYWxlO1xuICAgICAgICBmaWVsZC5fY3VycmVuY3kgPSB0aGlzLl9jdXJyZW5jeTtcbiAgICAgICAgZmllbGQuX2N1cnJlbmN5RGlzcGxheSA9IHRoaXMuX2N1cnJlbmN5RGlzcGxheTtcbiAgICAgICAgZmllbGQuX2N1cnJlbmN5RnJvbVByb3BlcnR5ID0gdGhpcy5fY3VycmVuY3lGcm9tUHJvcGVydHk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGaWVsZEFjdGlvbkRlc2NyaXB0b3I8RVQ+IGV4dGVuZHMgQUZpZWxkRGVzY3JpcHRvcjx2b2lkLCBFVD4ge1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfZmllbGRBY3Rpb25OYW1lOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9maWVsZEFjdGlvbk5hbWVMb25nOiBzdHJpbmc7XG5cbiAgICBwcm90ZWN0ZWQgX2J1dHRvbiA9IG5ldyBBY3Rpb25CdXR0b25EZXNjcmlwdG9yKCk7XG5cbiAgICBwcm90ZWN0ZWQgX3J1bkZ1bmN0aW9uPzogKGN0eDogRmllbGRBY3Rpb25Db250ZXh0PEVUPikgPT4gdm9pZDtcblxuICAgIGNvbnN0cnVjdG9yKGVkaXRvcjogRWRpdG9yRGVzY3JpcHRvcjxFVD4sIHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoZWRpdG9yLCBwcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuX2ZpZWxkQWN0aW9uTmFtZSA9IHByb3BlcnR5O1xuICAgICAgICBsZXQgZGlzcGxheU5hbWUgPSBwcm9wZXJ0eTtcbiAgICAgICAgaWYgKHRoaXMuX2VkaXRvci5tb2RlbCkgZGlzcGxheU5hbWUgPSBgJHt0aGlzLl9lZGl0b3IubW9kZWwudHlwZU5hbWV9LiR7ZGlzcGxheU5hbWV9YDtcbiAgICAgICAgdGhpcy5fZmllbGRBY3Rpb25OYW1lTG9uZyA9IGRpc3BsYXlOYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYnV0dG9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYnV0dG9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcnVuRnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ydW5GdW5jdGlvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEJ1dHRvbkRlc2NyaXB0b3IoYnV0dG9uOiBBY3Rpb25CdXR0b25EZXNjcmlwdG9yKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2J1dHRvbiA9IGJ1dHRvbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhCdXR0b24obGFiZWw/OiBzdHJpbmcgfCBudWxsLCBpY29uOiBzdHJpbmcgfCBudWxsID0gbnVsbCwgc3R5bGVMZXZlbCA9IFN0eWxlTGV2ZWxFbnVtLkRlZmF1bHQsIHN0eWxlVGV4dCA9IGZhbHNlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2J1dHRvbiA9IG5ldyBBY3Rpb25CdXR0b25EZXNjcmlwdG9yKCkud2l0aExhYmVsKGxhYmVsKS53aXRoSWNvbihpY29uKS53aXRoU3R5bGVDbGFzcyhuZXcgQnV0dG9uU3R5bGVCdWlsZGVyKHN0eWxlTGV2ZWwpLndpdGhUZXh0QnV0dG9uKHN0eWxlVGV4dCkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFJ1bkZ1bmN0aW9uKGZuOiAoY3R4OiBGaWVsZEFjdGlvbkNvbnRleHQ8RVQ+KSA9PiB2b2lkKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3J1bkZ1bmN0aW9uID0gZm47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb3B5KCk6IEZpZWxkQWN0aW9uRGVzY3JpcHRvcjxFVD4ge1xuICAgICAgICBjb25zdCBmaWVsZCA9IG5ldyBGaWVsZEFjdGlvbkRlc2NyaXB0b3I8RVQ+KHRoaXMuX2VkaXRvciwgdGhpcy5fcHJvcGVydHkpO1xuICAgICAgICB0aGlzLmNvcHlGaWVsZHNUbyhmaWVsZCk7XG4gICAgICAgIGZpZWxkLl9idXR0b24gPSB0aGlzLl9idXR0b24uY29weSgpO1xuICAgICAgICBmaWVsZC5fcnVuRnVuY3Rpb24gPSB0aGlzLl9ydW5GdW5jdGlvbj8uYmluZChmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGaWVsZExvb2t1cERlc2NyaXB0b3I8VCwgRVQ+IGV4dGVuZHMgQUZpZWxkRGVzY3JpcHRvcjxULCBFVD4gaW1wbGVtZW50cyBJTG9va3VwRGVzY3JpcHRvcjxUPiB7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9tb2RlbFR5cGU6IENsYXNzVHlwZTxUPiB8IG51bGw7XG4gICAgcHJvdGVjdGVkIF9sb29rdXBUeXBlOiBGaWVsZExvb2t1cFR5cGVFbnVtID0gRmllbGRMb29rdXBUeXBlRW51bS5Ecm9wZG93bjtcbiAgICBwcm90ZWN0ZWQgX2l0ZW1zTGFiZWxQcm9wZXJ0eT86IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgX2l0ZW1zTGFiZWxUcmFuc2xhdGUgPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgX2l0ZW1zVmFsdWVQcm9wZXJ0eT86IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgX2l0ZW1zRGlzYWJsZWRQcm9wZXJ0eT86IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgX2RhdGFLZXlQcm9wZXJ0eT86IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgX2RhdGFQcm92aWRlcj86IElMb29rdXBEYXRhUHJvdmlkZXI8VCwgYW55PjtcblxuICAgIHByb3RlY3RlZCBfZHJvcGRvd25DbGFzc05hbWUgPSAnbW5nLWZpbHRlci1sb29rdXAtZHJvcGRvd24nO1xuXG4gICAgcHJvdGVjdGVkIF9hdXRvY29tcGxldGVPcGVuT25Gb2N1cyA9IGZhbHNlO1xuICAgIHByb3RlY3RlZCBfYXV0b2NvbXBsZXRlSW5saW5lU2VhcmNoID0gZmFsc2U7XG4gICAgcHJvdGVjdGVkIF9hdXRvY29tcGxldGVBdXRvQ2xlYXIgPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgX2F1dG9jb21wbGV0ZVNlbGVjdEZpcnN0ID0gZmFsc2U7XG5cbiAgICBwcm90ZWN0ZWQgX2RpYWxvZ1RhYmxlRGVzY3JpcHRvcj86IFRhYmxlRGVzY3JpcHRvcjxUPjtcbiAgICBwcm90ZWN0ZWQgX2RpYWxvZ1RhYmxlRGF0YVByb3ZpZGVyPzogSVRhYmxlRGF0YVByb3ZpZGVyPFQsIGFueT47XG5cbiAgICBwcm90ZWN0ZWQgX2N1c3RvbUNvbXBvbmVudE5hbWU/OiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcihlZGl0b3I6IEVkaXRvckRlc2NyaXB0b3I8RVQ+LCBwcm9wZXJ0eTogc3RyaW5nLCBtb2RlbFR5cGU6IENsYXNzVHlwZTxUPiB8IG51bGwpIHtcbiAgICAgICAgc3VwZXIoZWRpdG9yLCBwcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuX21vZGVsVHlwZSA9IG1vZGVsVHlwZTtcbiAgICAgICAgTW9kZWxVdGlsLnRyeVNldExvb2t1cEl0ZW1zUHJvcGVydGllcyh0aGlzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxvb2t1cFR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb29rdXBUeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXRlbXNMYWJlbFByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXRlbXNMYWJlbFByb3BlcnR5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXRlbXNMYWJlbFRyYW5zbGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zTGFiZWxUcmFuc2xhdGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpdGVtc1ZhbHVlUHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pdGVtc1ZhbHVlUHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpdGVtc0Rpc2FibGVkUHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pdGVtc0Rpc2FibGVkUHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkYXRhS2V5UHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhS2V5UHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkYXRhUHJvdmlkZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhUHJvdmlkZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhdXRvY29tcGxldGVPcGVuT25Gb2N1cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F1dG9jb21wbGV0ZU9wZW5PbkZvY3VzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYXV0b2NvbXBsZXRlSW5saW5lU2VhcmNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXV0b2NvbXBsZXRlSW5saW5lU2VhcmNoO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYXV0b2NvbXBsZXRlQXV0b0NsZWFyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXV0b2NvbXBsZXRlQXV0b0NsZWFyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYXV0b2NvbXBsZXRlU2VsZWN0Rmlyc3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hdXRvY29tcGxldGVTZWxlY3RGaXJzdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRyb3Bkb3duQ2xhc3NOYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZHJvcGRvd25DbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtb2RlbFR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tb2RlbFR5cGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkaWFsb2dUYWJsZURlc2NyaXB0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaWFsb2dUYWJsZURlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkaWFsb2dUYWJsZURhdGFQcm92aWRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RpYWxvZ1RhYmxlRGF0YVByb3ZpZGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY3VzdG9tQ29tcG9uZW50TmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1c3RvbUNvbXBvbmVudE5hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhJdGVtc0xhYmVsUHJvcGVydHkoaXRlbXNMYWJlbFByb3BlcnR5OiBzdHJpbmcsIHRyYW5zbGF0ZSA9IGZhbHNlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2l0ZW1zTGFiZWxQcm9wZXJ0eSA9IGl0ZW1zTGFiZWxQcm9wZXJ0eTtcbiAgICAgICAgdGhpcy5faXRlbXNMYWJlbFRyYW5zbGF0ZSA9IHRyYW5zbGF0ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhJdGVtc1ZhbHVlUHJvcGVydHkoaXRlbXNWYWx1ZVByb3BlcnR5OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faXRlbXNWYWx1ZVByb3BlcnR5ID0gaXRlbXNWYWx1ZVByb3BlcnR5O1xuICAgICAgICB0aGlzLl9kYXRhS2V5UHJvcGVydHkgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoSXRlbXNEaXNhYmxlZFByb3BlcnR5KGl0ZW1zRGlzYWJsZWRQcm9wZXJ0eTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2l0ZW1zRGlzYWJsZWRQcm9wZXJ0eSA9IGl0ZW1zRGlzYWJsZWRQcm9wZXJ0eTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhEYXRhS2V5UHJvcGVydHkocHJvcGVydHk6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9kYXRhS2V5UHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICAgICAgdGhpcy5faXRlbXNWYWx1ZVByb3BlcnR5ID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aExvb2t1cDxTPihsb29rdXA6IChxdWVyeVBhcmFtPzogTWVkaXVzUXVlcnlQYXJhbSwgc2VydmljZT86IFMsIHNlYXJjaD86IHN0cmluZykgPT4gT2JzZXJ2YWJsZTxBcnJheTxUPj4sIHNlcnZpY2VUeXBlPzogVHlwZTxTPik6IHRoaXMge1xuICAgICAgICBjb25zdCBkYXRhUHJvdmlkZXIgPSBuZXcgTG9va3VwRGF0YVByb3ZpZGVyPFQsIFM+KHRoaXMuX21vZGVsVHlwZSk7XG4gICAgICAgIGlmIChzZXJ2aWNlVHlwZSkge1xuICAgICAgICAgICAgZGF0YVByb3ZpZGVyLndpdGhTZXJ2aWNlVHlwZShzZXJ2aWNlVHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YVByb3ZpZGVyLndpdGhMb29rdXAobG9va3VwKTtcbiAgICAgICAgdGhpcy5fZGF0YVByb3ZpZGVyID0gZGF0YVByb3ZpZGVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aExvb2t1cERhdGFQcm92aWRlcihkYXRhUHJvdmlkZXI6IElMb29rdXBEYXRhUHJvdmlkZXI8VCwgYW55Pik6IHRoaXMge1xuICAgICAgICB0aGlzLl9kYXRhUHJvdmlkZXIgPSBkYXRhUHJvdmlkZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSB3aXRoQ29uZmlnKGNvbmZpZzogRmllbGRMb29rdXBDb25maWcpOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLndpdGhDb25maWcoY29uZmlnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNBdXRvY29tcGxldGUob3Blbk9uRm9jdXMgPSBmYWxzZSwgaW5saW5lU2VhcmNoID0gZmFsc2UsIHNlbGVjdEZpcnN0ID0gZmFsc2UsIGF1dG9DbGVhciA9IGZhbHNlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2xvb2t1cFR5cGUgPSBGaWVsZExvb2t1cFR5cGVFbnVtLkF1dG9jb21wbGV0ZTtcbiAgICAgICAgdGhpcy5fYXV0b2NvbXBsZXRlQXV0b0NsZWFyID0gYXV0b0NsZWFyO1xuICAgICAgICB0aGlzLl9hdXRvY29tcGxldGVTZWxlY3RGaXJzdCA9IHNlbGVjdEZpcnN0O1xuICAgICAgICB0aGlzLl9hdXRvY29tcGxldGVPcGVuT25Gb2N1cyA9IG9wZW5PbkZvY3VzO1xuICAgICAgICB0aGlzLl9hdXRvY29tcGxldGVJbmxpbmVTZWFyY2ggPSBpbmxpbmVTZWFyY2g7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc0RpYWxvZyhsb29rdXBUYWJsZURlc2NyaXB0b3I6IFRhYmxlRGVzY3JpcHRvcjxUPiwgdGFibGVEYXRhUHJvdmlkZXI/OiBJVGFibGVEYXRhUHJvdmlkZXI8VCwgYW55Pik6IHRoaXMge1xuICAgICAgICB0aGlzLl9sb29rdXBUeXBlID0gRmllbGRMb29rdXBUeXBlRW51bS5EaWFsb2c7XG4gICAgICAgIHRoaXMuX2RpYWxvZ1RhYmxlRGVzY3JpcHRvciA9IGxvb2t1cFRhYmxlRGVzY3JpcHRvcjtcbiAgICAgICAgdGhpcy5fZGlhbG9nVGFibGVEYXRhUHJvdmlkZXIgPSB0YWJsZURhdGFQcm92aWRlcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzQ3VzdG9tQ29tcG9uZW50KGN1c3RvbUNvbXBvbmVudE5hbWU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9sb29rdXBUeXBlID0gRmllbGRMb29rdXBUeXBlRW51bS5DdXN0b207XG4gICAgICAgIHRoaXMuX2N1c3RvbUNvbXBvbmVudE5hbWUgPSBjdXN0b21Db21wb25lbnROYW1lO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgY29weSgpOiBGaWVsZExvb2t1cERlc2NyaXB0b3I8VCwgRVQ+IHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBuZXcgRmllbGRMb29rdXBEZXNjcmlwdG9yKHRoaXMuX2VkaXRvciwgdGhpcy5fcHJvcGVydHksIHRoaXMuX21vZGVsVHlwZSk7XG4gICAgICAgIHRoaXMuY29weUZpZWxkc1RvKGZpZWxkKTtcbiAgICAgICAgZmllbGQuX2xvb2t1cFR5cGUgPSB0aGlzLl9sb29rdXBUeXBlO1xuICAgICAgICBmaWVsZC5faXRlbXNMYWJlbFByb3BlcnR5ID0gdGhpcy5faXRlbXNMYWJlbFByb3BlcnR5O1xuICAgICAgICBmaWVsZC5faXRlbXNMYWJlbFRyYW5zbGF0ZSA9IHRoaXMuX2l0ZW1zTGFiZWxUcmFuc2xhdGU7XG4gICAgICAgIGZpZWxkLl9pdGVtc1ZhbHVlUHJvcGVydHkgPSB0aGlzLl9pdGVtc1ZhbHVlUHJvcGVydHk7XG4gICAgICAgIGZpZWxkLl9pdGVtc0Rpc2FibGVkUHJvcGVydHkgPSB0aGlzLl9pdGVtc0Rpc2FibGVkUHJvcGVydHk7XG4gICAgICAgIGZpZWxkLl9kYXRhS2V5UHJvcGVydHkgPSB0aGlzLl9kYXRhS2V5UHJvcGVydHk7XG4gICAgICAgIGZpZWxkLl9kYXRhUHJvdmlkZXIgPSB0aGlzLl9kYXRhUHJvdmlkZXI7XG4gICAgICAgIGZpZWxkLl9kcm9wZG93bkNsYXNzTmFtZSA9IHRoaXMuX2Ryb3Bkb3duQ2xhc3NOYW1lO1xuICAgICAgICBmaWVsZC5fYXV0b2NvbXBsZXRlT3Blbk9uRm9jdXMgPSB0aGlzLl9hdXRvY29tcGxldGVPcGVuT25Gb2N1cztcbiAgICAgICAgZmllbGQuX2F1dG9jb21wbGV0ZUlubGluZVNlYXJjaCA9IHRoaXMuX2F1dG9jb21wbGV0ZUlubGluZVNlYXJjaDtcbiAgICAgICAgZmllbGQuX2RpYWxvZ1RhYmxlRGVzY3JpcHRvciA9IHRoaXMuX2RpYWxvZ1RhYmxlRGVzY3JpcHRvcjtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEZpZWxkTG9va3VwRW51bURlc2NyaXB0b3I8RVQ+IGV4dGVuZHMgRmllbGRMb29rdXBEZXNjcmlwdG9yPEVudW1WYWx1ZTxzdHJpbmcgfCBudW1iZXI+LCBFVD4ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2VudW1UeXBlOiBFbnVtVHlwZTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25FbnVtVmFsdWVzOiBFbnVtVmFsdWU8c3RyaW5nIHwgbnVtYmVyPltdO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX25hbWVBc1ZhbHVlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihlZGl0b3I6IEVkaXRvckRlc2NyaXB0b3I8RVQ+LCBwcm9wZXJ0eTogc3RyaW5nLCBlbnVtVHlwZTogRW51bVR5cGUsIG9wdGlvbnM/OiBBcnJheTxFbnVtQ29uc3RhbnRUeXBlPiwgbmFtZUFzVmFsdWUgPSBmYWxzZSwgb3B0aW9uc1RpdGxlUGF0aD86IHN0cmluZyB8IG51bGwpIHtcbiAgICAgICAgc3VwZXIoZWRpdG9yLCBwcm9wZXJ0eSwgbnVsbCk7XG4gICAgICAgIHRoaXMuX2VudW1UeXBlID0gZW51bVR5cGU7XG4gICAgICAgIHRoaXMuX25hbWVBc1ZhbHVlID0gbmFtZUFzVmFsdWU7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc1RpdGxlUGF0aCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIG9wdGlvbnNUaXRsZVBhdGggPSBUeXBlVXRpbC5maW5kRW51bU5hbWUoZW51bVR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX29wdGlvbkVudW1WYWx1ZXMgPSBBcnJheS5pc0FycmF5KG9wdGlvbnMpXG4gICAgICAgICAgICA/IEVudW1VdGlsLmZyb21WYWx1ZXNBc0VudW1WYWx1ZUFycmF5KGVudW1UeXBlLCBvcHRpb25zLCBuYW1lQXNWYWx1ZSwgb3B0aW9uc1RpdGxlUGF0aCA/PyB1bmRlZmluZWQpXG4gICAgICAgICAgICA6IEVudW1VdGlsLmZyb21Db25zdGFudHNBc0VudW1WYWx1ZUFycmF5KGVudW1UeXBlLCBuYW1lQXNWYWx1ZSwgb3B0aW9uc1RpdGxlUGF0aCA/PyB1bmRlZmluZWQpO1xuICAgICAgICBjb25zdCBkYXRhUHJvdmlkZXIgPSBuZXcgTG9va3VwRGF0YVByb3ZpZGVyPEVudW1WYWx1ZTxzdHJpbmcgfCBudW1iZXI+LCBhbnk+KG51bGwpLndpdGhMb29rdXAoKCkgPT4gb2YodGhpcy5fb3B0aW9uRW51bVZhbHVlcykpO1xuICAgICAgICB0aGlzLndpdGhMb29rdXBEYXRhUHJvdmlkZXIoZGF0YVByb3ZpZGVyKTtcbiAgICAgICAgdGhpcy53aXRoSXRlbXNMYWJlbFByb3BlcnR5KCd0aXRsZScsIG9wdGlvbnNUaXRsZVBhdGggIT09IG51bGwpO1xuICAgICAgICB0aGlzLndpdGhJdGVtc1ZhbHVlUHJvcGVydHkoJ3ZhbHVlJyk7XG4gICAgICAgIHRoaXMud2l0aEl0ZW1zRGlzYWJsZWRQcm9wZXJ0eSgnZGlzYWJsZWQnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGVudW1UeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW51bVR5cGU7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhEaXNhYmxlZE9wdGlvbnMoLi4uZGlzYWJsZWRPcHRpb25zOiBBcnJheTxFbnVtQ29uc3RhbnRUeXBlPik6IHRoaXMge1xuICAgICAgICBmb3IgKGNvbnN0IGRpc2FibGVkT3B0aW9uIG9mIGRpc2FibGVkT3B0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgZGlzYWJsZWRPcHRpb25WYWx1ZSA9IHRoaXMuX25hbWVBc1ZhbHVlID8gRW51bVV0aWwuZ2V0Q29uc3RhbnROYW1lKHRoaXMuX2VudW1UeXBlLCBkaXNhYmxlZE9wdGlvbikgOiBkaXNhYmxlZE9wdGlvbjtcbiAgICAgICAgICAgIGlmIChkaXNhYmxlZE9wdGlvblZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5fb3B0aW9uRW51bVZhbHVlcy5maW5kKG8gPT4gby52YWx1ZSA9PT0gZGlzYWJsZWRPcHRpb25WYWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb24uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aERlZmF1bHRWYWx1ZUVudW0oZGVmYXVsdFZhbHVlOiBFbnVtQ29uc3RhbnRUeXBlKTogdGhpcyB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRPcHRpb25WYWx1ZSA9IHRoaXMuX25hbWVBc1ZhbHVlID8gRW51bVV0aWwuZ2V0Q29uc3RhbnROYW1lKHRoaXMuX2VudW1UeXBlLCBkZWZhdWx0VmFsdWUpIDogZGVmYXVsdFZhbHVlO1xuICAgICAgICBpZiAoZGVmYXVsdE9wdGlvblZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb24gPSB0aGlzLl9vcHRpb25FbnVtVmFsdWVzLmZpbmQobyA9PiBvLnZhbHVlID09PSBkZWZhdWx0T3B0aW9uVmFsdWUpO1xuICAgICAgICAgICAgaWYgKG9wdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMud2l0aERlZmF1bHRWYWx1ZSh0aGlzLl9pdGVtc1ZhbHVlUHJvcGVydHkgPyBvcHRpb25bdGhpcy5faXRlbXNWYWx1ZVByb3BlcnR5IGFzIGtleW9mIG9iamVjdF0gOiBvcHRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBhc0F1dG9jb21wbGV0ZShvcGVuT25Gb2N1cyA9IHRydWUpOiB0aGlzIHtcbiAgICAgICAgc3VwZXIuYXNBdXRvY29tcGxldGUob3Blbk9uRm9jdXMsIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgY29weSgpOiBGaWVsZExvb2t1cEVudW1EZXNjcmlwdG9yPEVUPiB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gbmV3IEZpZWxkTG9va3VwRW51bURlc2NyaXB0b3I8RVQ+KHRoaXMuX2VkaXRvciwgdGhpcy5fcHJvcGVydHksIHRoaXMuX2VudW1UeXBlLCBbXSk7XG4gICAgICAgIHRoaXMuY29weUZpZWxkc1RvKGZpZWxkKTtcbiAgICAgICAgZmllbGQuX2xvb2t1cFR5cGUgPSB0aGlzLl9sb29rdXBUeXBlO1xuICAgICAgICBmaWVsZC5faXRlbXNMYWJlbFByb3BlcnR5ID0gdGhpcy5faXRlbXNMYWJlbFByb3BlcnR5O1xuICAgICAgICBmaWVsZC5faXRlbXNWYWx1ZVByb3BlcnR5ID0gdGhpcy5faXRlbXNWYWx1ZVByb3BlcnR5O1xuICAgICAgICBmaWVsZC5faXRlbXNEaXNhYmxlZFByb3BlcnR5ID0gdGhpcy5faXRlbXNEaXNhYmxlZFByb3BlcnR5O1xuICAgICAgICBmaWVsZC5fZGF0YUtleVByb3BlcnR5ID0gdGhpcy5fZGF0YUtleVByb3BlcnR5O1xuICAgICAgICBmaWVsZC5fZGF0YVByb3ZpZGVyID0gdGhpcy5fZGF0YVByb3ZpZGVyO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRmllbGRNYW55VG9NYW55RWRpdG9yRGVzY3JpcHRvcjxULCBFVD4gZXh0ZW5kcyBBRmllbGREZXNjcmlwdG9yPFQsIEVULCBUW10+IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9tYWluVGFibGVEZXNjcmlwdG9yOiBUYWJsZURlc2NyaXB0b3I8VD47IC8vIHRhYmxlIGRlc2NyaXB0b3IgZm9yIG1haW4gdGFibGUgY29tcG9uZW50XG4gICAgcHJpdmF0ZSByZWFkb25seSBfbG9va3VwVGFibGVEZXNjcmlwdG9yOiBUYWJsZURlc2NyaXB0b3I8VD47IC8vIHRhYmxlIGRlc2NyaXB0b3IgZm9yIHdoZXJlIHNlbGVjdCB3aWxsIGJlIGFwcGxpZWRcbiAgICBwcml2YXRlIF9maWVsZFR5cGU6IEZpZWxkTWFueVRvTWFueUVkaXRvclR5cGVFbnVtID0gRmllbGRNYW55VG9NYW55RWRpdG9yVHlwZUVudW0uRGlhbG9nVGFibGVNdWx0aXNlbGVjdDtcbiAgICBwcml2YXRlIF9sb29rdXBUYWJsZURhdGFQcm92aWRlcjogSVRhYmxlRGF0YVByb3ZpZGVyPFQsIGFueT4gfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIF9hY3Rpb25zOiBBcnJheTxGaWVsZE1hbnlUb01hbnlFZGl0b3JBY3Rpb25FbnVtPiA9IFtdO1xuICAgIHByaXZhdGUgX2hhc0xvb2t1cEV4Y2x1ZGVWYWx1ZXMgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9leGNsdWRlRmlsdGVyUHJvcGVydHkgPSAnJztcbiAgICBwcml2YXRlIF9leGNsdWRlVmFsdWVQcm9wZXJ0eSA9ICcnO1xuICAgIHByaXZhdGUgX3NlYXJjaEVuYWJsZWQgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9zZWFyY2hGaWVsZHM/OiBzdHJpbmdbXTtcblxuICAgIGNvbnN0cnVjdG9yKGVkaXRvcjogRWRpdG9yRGVzY3JpcHRvcjxFVD4sIHByb3BlcnR5OiBzdHJpbmcsIG1haW5UYWJsZURlc2NyaXB0b3I6IFRhYmxlRGVzY3JpcHRvcjxUPiwgbG9va3VwVGFibGVEZXNjcmlwdG9yOiBUYWJsZURlc2NyaXB0b3I8VD4pIHtcbiAgICAgICAgc3VwZXIoZWRpdG9yLCBwcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuX21haW5UYWJsZURlc2NyaXB0b3IgPSBtYWluVGFibGVEZXNjcmlwdG9yO1xuICAgICAgICB0aGlzLl9sb29rdXBUYWJsZURlc2NyaXB0b3IgPSBsb29rdXBUYWJsZURlc2NyaXB0b3I7XG4gICAgICAgIHRoaXMuX2FjdGlvbnMucHVzaChGaWVsZE1hbnlUb01hbnlFZGl0b3JBY3Rpb25FbnVtLkFkZCwgRmllbGRNYW55VG9NYW55RWRpdG9yQWN0aW9uRW51bS5EZWxldGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZmllbGRUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmllbGRUeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbG9va3VwVGFibGVEYXRhUHJvdmlkZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb29rdXBUYWJsZURhdGFQcm92aWRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFjdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hY3Rpb25zO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGFzTG9va3VwRXhjbHVkZVZhbHVlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc0xvb2t1cEV4Y2x1ZGVWYWx1ZXM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBleGNsdWRlRmlsdGVyUHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9leGNsdWRlRmlsdGVyUHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBleGNsdWRlVmFsdWVQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4Y2x1ZGVWYWx1ZVByb3BlcnR5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbWFpblRhYmxlRGVzY3JpcHRvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21haW5UYWJsZURlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsb29rdXBUYWJsZURlc2NyaXB0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb29rdXBUYWJsZURlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzZWFyY2hFbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VhcmNoRW5hYmxlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHNlYXJjaEZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlYXJjaEZpZWxkcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aExvb2t1cDxTPihnZXRBbGw6IChxdWVyeVBhcmFtOiBNZWRpdXNRdWVyeVBhcmFtLCBzZXJ2aWNlPzogUykgPT4gT2JzZXJ2YWJsZTxNZWRpdXNRdWVyeVJlc3VsdDxUPj4sIHNlcnZpY2VUeXBlPzogVHlwZTxTPik6IHRoaXMge1xuICAgICAgICBjb25zdCBkYXRhUHJvdmlkZXIgPSBuZXcgVGFibGV2aWV3RGF0YVByb3ZpZGVyPFQsIFM+KHRoaXMuX21haW5UYWJsZURlc2NyaXB0b3IubW9kZWwudHlwZSk7XG4gICAgICAgIGlmIChzZXJ2aWNlVHlwZSkge1xuICAgICAgICAgICAgZGF0YVByb3ZpZGVyLndpdGhTZXJ2aWNlVHlwZShzZXJ2aWNlVHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YVByb3ZpZGVyLndpdGhHZXRBbGwoZ2V0QWxsKTtcbiAgICAgICAgdGhpcy5fbG9va3VwVGFibGVEYXRhUHJvdmlkZXIgPSBkYXRhUHJvdmlkZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoTG9va3VwRGF0YVByb3ZpZGVyKGRhdGFQcm92aWRlcjogSVRhYmxlRGF0YVByb3ZpZGVyPFQsIGFueT4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fbG9va3VwVGFibGVEYXRhUHJvdmlkZXIgPSBkYXRhUHJvdmlkZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQWN0aW9ucyhhY3Rpb25zOiBBcnJheTxGaWVsZE1hbnlUb01hbnlFZGl0b3JBY3Rpb25FbnVtPiA9IFtdKTogdGhpcyB7XG4gICAgICAgIHRoaXMuYWN0aW9ucy5wdXNoKC4uLmFjdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aExvb2t1cEV4Y2x1ZGUoZmlsdGVyUHJvcGVydHk6IHN0cmluZywgdmFsdWVQcm9wZXJ0eTogc3RyaW5nLCBoYXNMb29rdXBFeGNsdWRlID0gdHJ1ZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9oYXNMb29rdXBFeGNsdWRlVmFsdWVzID0gaGFzTG9va3VwRXhjbHVkZTtcbiAgICAgICAgdGhpcy5fZXhjbHVkZUZpbHRlclByb3BlcnR5ID0gZmlsdGVyUHJvcGVydHk7XG4gICAgICAgIHRoaXMuX2V4Y2x1ZGVWYWx1ZVByb3BlcnR5ID0gdmFsdWVQcm9wZXJ0eTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhTZWFyY2goZW5hYmxlZCA9IHRydWUsIHNlYXJjaEZpZWxkcz86IHN0cmluZ1tdKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3NlYXJjaEVuYWJsZWQgPSBlbmFibGVkO1xuICAgICAgICB0aGlzLl9zZWFyY2hGaWVsZHMgPSBzZWFyY2hGaWVsZHM7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb3B5KCk6IEZpZWxkTWFueVRvTWFueUVkaXRvckRlc2NyaXB0b3I8VCwgRVQ+IHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBuZXcgRmllbGRNYW55VG9NYW55RWRpdG9yRGVzY3JpcHRvcih0aGlzLl9lZGl0b3IsIHRoaXMuX3Byb3BlcnR5LCB0aGlzLl9tYWluVGFibGVEZXNjcmlwdG9yLmNvcHkoKSwgdGhpcy5fbG9va3VwVGFibGVEZXNjcmlwdG9yLmNvcHkoKSk7XG4gICAgICAgIHRoaXMuY29weUZpZWxkc1RvKGZpZWxkKTtcbiAgICAgICAgZmllbGQuX2ZpZWxkVHlwZSA9IHRoaXMuX2ZpZWxkVHlwZTtcbiAgICAgICAgZmllbGQuX2FjdGlvbnMgPSB0aGlzLl9hY3Rpb25zLm1hcChhID0+IGEpO1xuICAgICAgICBmaWVsZC5fbG9va3VwVGFibGVEYXRhUHJvdmlkZXIgPSB0aGlzLl9sb29rdXBUYWJsZURhdGFQcm92aWRlcjtcbiAgICAgICAgZmllbGQuX2hhc0xvb2t1cEV4Y2x1ZGVWYWx1ZXMgPSB0aGlzLl9oYXNMb29rdXBFeGNsdWRlVmFsdWVzO1xuICAgICAgICBmaWVsZC5fZXhjbHVkZUZpbHRlclByb3BlcnR5ID0gdGhpcy5fZXhjbHVkZUZpbHRlclByb3BlcnR5O1xuICAgICAgICBmaWVsZC5fZXhjbHVkZVZhbHVlUHJvcGVydHkgPSB0aGlzLl9leGNsdWRlVmFsdWVQcm9wZXJ0eTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEZpZWxkTWFueUVkaXRvckRlc2NyaXB0b3I8VCwgRVQ+IGV4dGVuZHMgQUZpZWxkRGVzY3JpcHRvcjxULCBFVCwgVFtdPiB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfdGFibGV2aWV3RGVzY3JpcHRvcjogVGFibGV2aWV3RGVzY3JpcHRvcjxUPjtcbiAgICBwcml2YXRlIF9maWVsZFR5cGU6IEZpZWxkTWFueUVkaXRvclR5cGVFbnVtID0gRmllbGRNYW55RWRpdG9yVHlwZUVudW0uRGlhbG9nRWRpdG9yO1xuICAgIHByaXZhdGUgX2ZpZWxkQWN0aW9uczogQXJyYXk8RmllbGRNYW55RWRpdG9yQWN0aW9uRW51bT4gPSBbXTtcbiAgICBwcml2YXRlIF9hY3Rpb25zOiBBcnJheTxBY3Rpb25EZXNjcmlwdG9yPFQ+PiA9IFtdO1xuXG4gICAgY29uc3RydWN0b3IoZWRpdG9yOiBFZGl0b3JEZXNjcmlwdG9yPEVUPiwgcHJvcGVydHk6IHN0cmluZywgdGFibGV2aWV3RGVzY3JpcHRvcjogVGFibGV2aWV3RGVzY3JpcHRvcjxUPikge1xuICAgICAgICBzdXBlcihlZGl0b3IsIHByb3BlcnR5KTtcbiAgICAgICAgLy8gdGhpcy5fbW9kZWxUeXBlID0gbW9kZWxUeXBlO1xuICAgICAgICB0aGlzLl90YWJsZXZpZXdEZXNjcmlwdG9yID0gdGFibGV2aWV3RGVzY3JpcHRvcjtcbiAgICAgICAgdGhpcy5fZmllbGRBY3Rpb25zLnB1c2goRmllbGRNYW55RWRpdG9yQWN0aW9uRW51bS5WaWV3LCBGaWVsZE1hbnlFZGl0b3JBY3Rpb25FbnVtLkFkZCwgRmllbGRNYW55RWRpdG9yQWN0aW9uRW51bS5FZGl0LCBGaWVsZE1hbnlFZGl0b3JBY3Rpb25FbnVtLkRlbGV0ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBmaWVsZFR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWVsZFR5cGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBmaWVsZEFjdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWVsZEFjdGlvbnM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhY3Rpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aW9ucztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRhYmxldmlld0Rlc2NyaXB0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZXZpZXdEZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdGFibGVEZXNjcmlwdG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGV2aWV3RGVzY3JpcHRvci50YWJsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGVkaXRvckZvckNyZWF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmxldmlld0Rlc2NyaXB0b3IuYWRkRWRpdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZWRpdG9yRm9yUmVhZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmxldmlld0Rlc2NyaXB0b3IuZGV0YWlsc0VkaXRvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGVkaXRvckZvclVwZGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmxldmlld0Rlc2NyaXB0b3IuZWRpdEVkaXRvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEZpZWxkQWN0aW9uKGFjdGlvbjogRmllbGRNYW55RWRpdG9yQWN0aW9uRW51bSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9maWVsZEFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEZpZWxkQWN0aW9ucyhhY3Rpb25zOiBGaWVsZE1hbnlFZGl0b3JBY3Rpb25FbnVtW10pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZmllbGRBY3Rpb25zID0gYWN0aW9ucztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhBY3Rpb24oYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9yPFQ+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2FjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgY29weSgpOiBGaWVsZE1hbnlFZGl0b3JEZXNjcmlwdG9yPFQsIEVUPiB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gbmV3IEZpZWxkTWFueUVkaXRvckRlc2NyaXB0b3IodGhpcy5fZWRpdG9yLCB0aGlzLl9wcm9wZXJ0eSwgdGhpcy5fdGFibGV2aWV3RGVzY3JpcHRvci5jb3B5KCkpO1xuICAgICAgICB0aGlzLmNvcHlGaWVsZHNUbyhmaWVsZCk7XG4gICAgICAgIGZpZWxkLl9maWVsZFR5cGUgPSB0aGlzLl9maWVsZFR5cGU7XG4gICAgICAgIGZpZWxkLl9maWVsZEFjdGlvbnMgPSB0aGlzLl9maWVsZEFjdGlvbnMubWFwKGEgPT4gYSk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBRmllbGRHcm91cERlc2NyaXB0b3I8RVQ+IGV4dGVuZHMgQUdlbmVyaWNGaWVsZERlc2NyaXB0b3I8RVQ+IHtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX25hbWU6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2RlZmF1bHQ6IGJvb2xlYW47XG4gICAgcHJvdGVjdGVkIF90aXRsZT86IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgX2ZpZWxkczogQUdlbmVyaWNGaWVsZERlc2NyaXB0b3I8RVQ+W10gPSBbXTtcbiAgICBwcm90ZWN0ZWQgX3ZhbGlkYXRpb25zOiBBcnJheTxGaWVsZFZhbGlkYXRpb25EZXNjcmlwdG9yPiA9IFtdO1xuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGVkaXRvcjogRWRpdG9yRGVzY3JpcHRvcjxFVD4sIG5hbWU6IHN0cmluZykge1xuICAgICAgICBzdXBlcihlZGl0b3IpO1xuICAgICAgICB0aGlzLl9uYW1lID0gYCR7dGhpcy5iYXNlTmFtZX0ke25hbWV9YDtcbiAgICAgICAgdGhpcy5fZGVmYXVsdCA9IG5hbWUgPT09IEVkaXRvckRlc2NyaXB0b3IuZGVmYXVsdEdyb3VwTmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlRmllbGQocHJvcGVydHk6IHN0cmluZywgZmlsdGVyRnVuY3Rpb246IChmaWVsZHM6IEFHZW5lcmljRmllbGREZXNjcmlwdG9yPEVUPltdKSA9PiBBR2VuZXJpY0ZpZWxkRGVzY3JpcHRvcjxFVD5bXSk6IEFHZW5lcmljRmllbGREZXNjcmlwdG9yPEVUPltdIHtcbiAgICAgICAgdGhpcy5fZmllbGRzID0gZmlsdGVyRnVuY3Rpb24odGhpcy5fZmllbGRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpZWxkcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGl0bGU7XG4gICAgfVxuXG4gICAgYWJzdHJhY3QgZ2V0IGZpZWxkcygpOiBBR2VuZXJpY0ZpZWxkRGVzY3JpcHRvcjxFVD5bXTtcblxuICAgIHB1YmxpYyBnZXQgdmFsaWRhdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWxpZGF0aW9ucztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGJhc2VOYW1lKCkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5ncm91cE5hbWUoKX1fYDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG5hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9uYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHQ7XG4gICAgfVxuXG4gICAgYWJzdHJhY3QgZ3JvdXBOYW1lKCk6IHN0cmluZztcblxuICAgIGFic3RyYWN0IGFkZEZpZWxkKGZpZWxkOiBBR2VuZXJpY0ZpZWxkRGVzY3JpcHRvcjxFVD4pOiB0aGlzO1xuXG4gICAgYWJzdHJhY3QgY29weSgpOiBBRmllbGRHcm91cERlc2NyaXB0b3I8RVQ+O1xuXG4gICAgcHVibGljIHdpdGhUaXRsZSh0aXRsZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3RpdGxlID0gdGl0bGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoVmFsaWRhdGlvbihuYW1lOiBzdHJpbmcsIHZhbGlkYXRvcj86IE1uZ0ZpZWxkVmFsaWRhdG9yLCBtZXNzYWdlPzogTW5nRmllbGRWYWxpZGF0aW9uTWVzc2FnZSkge1xuICAgICAgICB0aGlzLl92YWxpZGF0aW9ucy5wdXNoKG5ldyBGaWVsZFZhbGlkYXRpb25EZXNjcmlwdG9yKG5hbWUsIHZhbGlkYXRvciwgbWVzc2FnZSkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGaWVsZFRhYkdyb3VwRGVzY3JpcHRvcjxFVD4gZXh0ZW5kcyBBRmllbGRHcm91cERlc2NyaXB0b3I8RVQ+IHtcbiAgICBjb25zdHJ1Y3RvcihlZGl0b3I6IEVkaXRvckRlc2NyaXB0b3I8RVQ+LCBuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoZWRpdG9yLCBuYW1lKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZpZWxkcygpOiBBcnJheTxGaWVsZEdyb3VwRGVzY3JpcHRvcjxFVD4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpZWxkcyBhcyBBcnJheTxGaWVsZEdyb3VwRGVzY3JpcHRvcjxFVD4+O1xuICAgIH1cblxuICAgIHB1YmxpYyBncm91cE5hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuICd0YWInO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWVsZChmaWVsZDogRmllbGRHcm91cERlc2NyaXB0b3I8RVQ+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ZpZWxkcy5wdXNoKGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGNvcHkoKTogRmllbGRUYWJHcm91cERlc2NyaXB0b3I8RVQ+IHtcbiAgICAgICAgY29uc3QgdGFiID0gbmV3IEZpZWxkVGFiR3JvdXBEZXNjcmlwdG9yPEVUPih0aGlzLl9lZGl0b3IsIHRoaXMubmFtZS5zdWJzdHJpbmcodGhpcy5iYXNlTmFtZS5sZW5ndGgpKTtcbiAgICAgICAgdGFiLl90aXRsZSA9IHRoaXMuX3RpdGxlO1xuICAgICAgICB0YWIuX2ZpZWxkcyA9IHRoaXMuZmllbGRzLm1hcChmID0+IGYuY29weSgpKTtcbiAgICAgICAgdGFiLl92YWxpZGF0aW9ucyA9IHRoaXMudmFsaWRhdGlvbnMubWFwKHYgPT4gdi5jb3B5KCkpO1xuICAgICAgICByZXR1cm4gdGFiO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEZpZWxkR3JvdXBEZXNjcmlwdG9yPEVUPiBleHRlbmRzIEFGaWVsZEdyb3VwRGVzY3JpcHRvcjxFVD4ge1xuICAgIHByaXZhdGUgX3R5cGUgPSBGaWVsZEdyb3VwVHlwZUVudW0uRmllbGRzZXQ7XG5cbiAgICBjb25zdHJ1Y3RvcihlZGl0b3I6IEVkaXRvckRlc2NyaXB0b3I8RVQ+LCBuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoZWRpdG9yLCBuYW1lKTtcbiAgICAgICAgaWYgKHRoaXMuX2RlZmF1bHQpIHtcbiAgICAgICAgICAgIHRoaXMuYXNMb2dpY2FsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZmllbGRzKCk6IEFycmF5PEFGaWVsZERlc2NyaXB0b3I8YW55LCBFVD4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpZWxkcyBhcyBBcnJheTxBRmllbGREZXNjcmlwdG9yPGFueSwgRVQ+PjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ3JvdXBOYW1lKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiAnZ3JvdXAnO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWVsZChmaWVsZDogQUZpZWxkRGVzY3JpcHRvcjxhbnksIEVUPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9maWVsZHMucHVzaChmaWVsZCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc0xvZ2ljYWwoKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3R5cGUgPSBGaWVsZEdyb3VwVHlwZUVudW0uTG9naWNhbDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGNvcHkoKTogRmllbGRHcm91cERlc2NyaXB0b3I8RVQ+IHtcbiAgICAgICAgY29uc3QgZ3JvdXAgPSBuZXcgRmllbGRHcm91cERlc2NyaXB0b3I8RVQ+KHRoaXMuX2VkaXRvciwgdGhpcy5uYW1lLnN1YnN0cmluZyh0aGlzLmJhc2VOYW1lLmxlbmd0aCkpO1xuICAgICAgICBncm91cC5fdHlwZSA9IHRoaXMuX3R5cGU7XG4gICAgICAgIGdyb3VwLl90aXRsZSA9IHRoaXMuX3RpdGxlO1xuICAgICAgICBncm91cC5fZmllbGRzID0gdGhpcy5maWVsZHMubWFwKGYgPT4gZi5jb3B5KCkpO1xuICAgICAgICBncm91cC5fdmFsaWRhdGlvbnMgPSB0aGlzLnZhbGlkYXRpb25zLm1hcCh2ID0+IHYuY29weSgpKTtcbiAgICAgICAgcmV0dXJuIGdyb3VwO1xuICAgIH1cbn1cbiJdfQ==
|