@ng-formworks/core 18.6.8 → 18.6.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/framework-library/framework-library.service.mjs +3 -3
- package/esm2022/lib/framework-library/framework.mjs +3 -3
- package/esm2022/lib/framework-library/no-framework.component.mjs +3 -3
- package/esm2022/lib/framework-library/no-framework.module.mjs +4 -4
- package/esm2022/lib/framework-library/no.framework.mjs +3 -3
- package/esm2022/lib/json-schema-form.component.mjs +30 -9
- package/esm2022/lib/json-schema-form.module.mjs +4 -4
- package/esm2022/lib/json-schema-form.service.mjs +65 -7
- package/esm2022/lib/shared/json-schema.functions.mjs +2 -9
- package/esm2022/lib/shared/jsonpointer.functions.mjs +3 -3
- package/esm2022/lib/shared/layout.functions.mjs +15 -5
- package/esm2022/lib/shared/utility.functions.mjs +44 -1
- package/esm2022/lib/widget-library/add-reference.component.mjs +6 -6
- package/esm2022/lib/widget-library/button.component.mjs +3 -3
- package/esm2022/lib/widget-library/checkbox.component.mjs +3 -3
- package/esm2022/lib/widget-library/checkboxes.component.mjs +3 -3
- package/esm2022/lib/widget-library/element-attribute.directive.mjs +3 -3
- package/esm2022/lib/widget-library/file.component.mjs +3 -3
- package/esm2022/lib/widget-library/hidden.component.mjs +3 -3
- package/esm2022/lib/widget-library/index.mjs +4 -2
- package/esm2022/lib/widget-library/input.component.mjs +10 -5
- package/esm2022/lib/widget-library/item-title.component.mjs +43 -0
- package/esm2022/lib/widget-library/message.component.mjs +3 -3
- package/esm2022/lib/widget-library/none.component.mjs +3 -3
- package/esm2022/lib/widget-library/number.component.mjs +8 -5
- package/esm2022/lib/widget-library/one-of.component.mjs +3 -3
- package/esm2022/lib/widget-library/orderable.directive.mjs +3 -3
- package/esm2022/lib/widget-library/radios.component.mjs +3 -3
- package/esm2022/lib/widget-library/root.component.mjs +8 -6
- package/esm2022/lib/widget-library/section.component.mjs +3 -3
- package/esm2022/lib/widget-library/select-framework.component.mjs +3 -3
- package/esm2022/lib/widget-library/select-widget.component.mjs +3 -3
- package/esm2022/lib/widget-library/select.component.mjs +3 -3
- package/esm2022/lib/widget-library/selectcheckbox.component.mjs +3 -3
- package/esm2022/lib/widget-library/stop-propagation.directive.mjs +3 -3
- package/esm2022/lib/widget-library/submit.component.mjs +3 -3
- package/esm2022/lib/widget-library/tab.component.mjs +3 -3
- package/esm2022/lib/widget-library/tabs.component.mjs +7 -6
- package/esm2022/lib/widget-library/template.component.mjs +3 -3
- package/esm2022/lib/widget-library/textarea.component.mjs +8 -5
- package/esm2022/lib/widget-library/widget-library.module.mjs +6 -5
- package/esm2022/lib/widget-library/widget-library.service.mjs +3 -3
- package/fesm2022/ng-formworks-core.mjs +322 -144
- package/fesm2022/ng-formworks-core.mjs.map +1 -1
- package/lib/json-schema-form.component.d.ts +1 -1
- package/lib/json-schema-form.service.d.ts +1 -0
- package/lib/shared/layout.functions.d.ts +1 -0
- package/lib/shared/utility.functions.d.ts +15 -0
- package/lib/shared/validator.functions.d.ts +1 -1
- package/lib/widget-library/index.d.ts +3 -1
- package/lib/widget-library/item-title.component.d.ts +19 -0
- package/lib/widget-library/widget-library.module.d.ts +8 -7
- package/package.json +1 -1
|
@@ -5,6 +5,7 @@ import Ajv2019 from 'ajv/dist/2019';
|
|
|
5
5
|
import jsonDraft6 from 'ajv/lib/refs/json-schema-draft-06.json';
|
|
6
6
|
import jsonDraft7 from 'ajv/lib/refs/json-schema-draft-07.json';
|
|
7
7
|
import cloneDeep from 'lodash/cloneDeep';
|
|
8
|
+
import _isArray from 'lodash/isArray';
|
|
8
9
|
import { BehaviorSubject, Subject } from 'rxjs';
|
|
9
10
|
import { deValidationMessages, enValidationMessages, esValidationMessages, frValidationMessages, itValidationMessages, ptValidationMessages, zhValidationMessages } from './locale';
|
|
10
11
|
import { JsonPointer, buildFormGroup, buildFormGroupTemplate, buildLayout, buildSchemaFromData, buildSchemaFromLayout, fixTitle, forEach, formatFormData, getControl, getLayoutNode, hasOwn, hasValue, isArray, isDefined, isEmpty, isObject, removeRecursiveReferences, toTitleCase } from './shared';
|
|
@@ -613,7 +614,7 @@ export class JsonSchemaFormService {
|
|
|
613
614
|
// Set values of any related controls in copyValueTo array
|
|
614
615
|
if (isArray(ctx.options.copyValueTo)) {
|
|
615
616
|
for (const item of ctx.options.copyValueTo) {
|
|
616
|
-
const targetControl = getControl(this.formGroup, item);
|
|
617
|
+
const targetControl = this.formGroup && getControl(this.formGroup, item);
|
|
617
618
|
if (isObject(targetControl) &&
|
|
618
619
|
typeof targetControl.setValue === 'function') {
|
|
619
620
|
targetControl.setValue(value);
|
|
@@ -688,7 +689,8 @@ export class JsonSchemaFormService {
|
|
|
688
689
|
getFormControlValue(ctx) {
|
|
689
690
|
if (!ctx || !ctx.layoutNode ||
|
|
690
691
|
!isDefined(ctx.layoutNode().dataPointer) ||
|
|
691
|
-
ctx.layoutNode().type === '$ref'
|
|
692
|
+
ctx.layoutNode().type === '$ref'
|
|
693
|
+
|| this.formGroup == null) {
|
|
692
694
|
return null;
|
|
693
695
|
}
|
|
694
696
|
const schemaPointer = ctx.layoutNode()?.isITEItem ? ctx.layoutNode()?.schemaPointer : null;
|
|
@@ -698,7 +700,7 @@ export class JsonSchemaFormService {
|
|
|
698
700
|
return control ? control.value : null;
|
|
699
701
|
}
|
|
700
702
|
getFormControlGroup(ctx) {
|
|
701
|
-
if (!ctx || !ctx.layoutNode || !isDefined(ctx.layoutNode().dataPointer)) {
|
|
703
|
+
if (!ctx || !ctx.layoutNode || !isDefined(ctx.layoutNode().dataPointer) || this.formGroup == null) {
|
|
702
704
|
return null;
|
|
703
705
|
}
|
|
704
706
|
const schemaPointer = ctx.layoutNode()?.isITEItem ? ctx.layoutNode()?.schemaPointer : null;
|
|
@@ -826,10 +828,66 @@ export class JsonSchemaFormService {
|
|
|
826
828
|
JsonPointer.remove(this.layout, this.getLayoutPointer(ctx));
|
|
827
829
|
return true;
|
|
828
830
|
}
|
|
829
|
-
|
|
830
|
-
|
|
831
|
+
//TODO fix-doesnt seem to work for nested array
|
|
832
|
+
adjustLayout(layout, newData, currLayoutIndex = [0], currDataIndex = []) {
|
|
833
|
+
const createWidgetCtx = (layoutNode, layoutIndex, dataIndex) => {
|
|
834
|
+
return {
|
|
835
|
+
layoutNode: () => { return layoutNode; },
|
|
836
|
+
layoutIndex: () => { return layoutIndex; },
|
|
837
|
+
dataIndex: () => { return dataIndex; },
|
|
838
|
+
};
|
|
839
|
+
};
|
|
840
|
+
// console.log(`adjustLayout currLayoutIndex:${currLayoutIndex}`);
|
|
841
|
+
if (layout.items && _isArray(newData)) {
|
|
842
|
+
let ctx = createWidgetCtx({
|
|
843
|
+
...layout,
|
|
844
|
+
$ref: layout.$ref || layout.items[0]?.dataPointer,
|
|
845
|
+
dataPointer: layout.items[0]?.dataPointer,
|
|
846
|
+
arrayItem: true,
|
|
847
|
+
arrayItemType: "list"
|
|
848
|
+
}, [...currLayoutIndex.slice(0, currLayoutIndex.length - 1), layout.items.length - 1], [...currDataIndex.slice(0, currDataIndex.length - 1), layout.items.length - 1]);
|
|
849
|
+
const lengthDifference = newData.length - layout.items.filter(litem => {
|
|
850
|
+
return litem?.type != "$ref";
|
|
851
|
+
}).length;
|
|
852
|
+
if (lengthDifference > 0) {
|
|
853
|
+
// Add missing controls if newData has more items
|
|
854
|
+
for (let i = 0; i < lengthDifference; i++) {
|
|
855
|
+
this.addItem(ctx);
|
|
856
|
+
}
|
|
857
|
+
}
|
|
858
|
+
else if (lengthDifference < 0) {
|
|
859
|
+
let numToRemove = layout.items.filter(litem => {
|
|
860
|
+
return litem?.type != "$ref";
|
|
861
|
+
})
|
|
862
|
+
.length - newData.length;
|
|
863
|
+
// Remove extra controls if newData has fewer items
|
|
864
|
+
for (let i = 0; i < numToRemove; i++) {
|
|
865
|
+
let oldDataIndex = ctx.dataIndex();
|
|
866
|
+
let lastDataIndex = oldDataIndex[oldDataIndex.length - 1];
|
|
867
|
+
let updatedLayoutIndex = [...currLayoutIndex.slice(0, currLayoutIndex.length - 1), 0];
|
|
868
|
+
let updatedDataIndex = [...oldDataIndex.slice(0, oldDataIndex.length - 1), 0];
|
|
869
|
+
ctx = createWidgetCtx(ctx.layoutNode(), updatedLayoutIndex, updatedDataIndex);
|
|
870
|
+
let removed = this.removeItem(ctx);
|
|
871
|
+
// if(removed){
|
|
872
|
+
//}
|
|
873
|
+
}
|
|
874
|
+
}
|
|
875
|
+
return;
|
|
876
|
+
}
|
|
877
|
+
if (_isArray(layout)) {
|
|
878
|
+
layout.forEach((layoutNode, ind) => {
|
|
879
|
+
//if(layoutNode.items){
|
|
880
|
+
let layoutMappedData = layoutNode.dataPointer ? JsonPointer.get(newData, layoutNode.dataPointer)
|
|
881
|
+
: undefined;
|
|
882
|
+
this.adjustLayout(layoutNode, layoutMappedData, [...currLayoutIndex, ind], [...currDataIndex, ind]);
|
|
883
|
+
///}
|
|
884
|
+
});
|
|
885
|
+
}
|
|
886
|
+
}
|
|
887
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: JsonSchemaFormService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
888
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: JsonSchemaFormService }); }
|
|
831
889
|
}
|
|
832
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
890
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: JsonSchemaFormService, decorators: [{
|
|
833
891
|
type: Injectable
|
|
834
892
|
}], ctorParameters: () => [] });
|
|
835
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi1zY2hlbWEtZm9ybS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZm9ybXdvcmtzLWNvcmUvc3JjL2xpYi9qc29uLXNjaGVtYS1mb3JtLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFFOUQsa0RBQWtEO0FBQ2xELE9BQU8sVUFBVSxNQUFNLGFBQWEsQ0FBQztBQUNyQyxPQUFPLE9BQW1ELE1BQU0sZUFBZSxDQUFDO0FBQ2hGLE9BQU8sVUFBVSxNQUFNLHdDQUF3QyxDQUFDO0FBQ2hFLE9BQU8sVUFBVSxNQUFNLHdDQUF3QyxDQUFDO0FBQ2hFLE9BQU8sU0FBUyxNQUFNLGtCQUFrQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUM5RCxPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLG9CQUFvQixFQUNwQixvQkFBb0IsRUFDcEIsb0JBQW9CLEVBQ3BCLG9CQUFvQixFQUNwQixvQkFBb0IsRUFDcEIsb0JBQW9CLEVBQ3JCLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFDTCxXQUFXLEVBQ1gsY0FBYyxFQUNkLHNCQUFzQixFQUN0QixXQUFXLEVBQ1gsbUJBQW1CLEVBQ25CLHFCQUFxQixFQUNyQixRQUFRLEVBQ1IsT0FBTyxFQUNQLGNBQWMsRUFDZCxVQUFVLEVBQ1YsYUFBYSxFQUNiLE1BQU0sRUFDTixRQUFRLEVBQ1IsT0FBTyxFQUNQLFNBQVMsRUFDVCxPQUFPLEVBQ1AsUUFBUSxFQUNSLHlCQUF5QixFQUN6QixXQUFXLEVBQ1osTUFBTSxVQUFVLENBQUM7QUFFbEIsT0FBTyxFQUFFLE9BQU8sSUFBSSxRQUFRLEVBQUUsT0FBTyxJQUFJLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxVQUFVLEVB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LFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQzVDLENBQUM7UUFDSixDQUFDO2FBQU0sQ0FBQztZQUNOLGtDQUFrQztZQUNmLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUUsQ0FBQyxhQUFhLENBQzdELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FDN0IsQ0FBQztRQUNKLENBQUM7UUFFRCxnQ0FBZ0M7UUFDaEMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzsrR0E5L0JVLHFCQUFxQjttSEFBckIscUJBQXFCOzs0RkFBckIscUJBQXFCO2tCQURqQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95LCBTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBVbnR5cGVkRm9ybUFycmF5LCBVbnR5cGVkRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG4vL2ltcG9ydCBBanYsIHsgRXJyb3JPYmplY3QsIE9wdGlvbnMgfSBmcm9tICdhanYnO1xyXG5pbXBvcnQgYWRkRm9ybWF0cyBmcm9tIFwiYWp2LWZvcm1hdHNcIjtcclxuaW1wb3J0IEFqdjIwMTksIHsgRXJyb3JPYmplY3QsIE9wdGlvbnMsIFZhbGlkYXRlRnVuY3Rpb24gfSBmcm9tICdhanYvZGlzdC8yMDE5JztcclxuaW1wb3J0IGpzb25EcmFmdDYgZnJvbSAnYWp2L2xpYi9yZWZzL2pzb24tc2NoZW1hLWRyYWZ0LTA2Lmpzb24nO1xyXG5pbXBvcnQganNvbkRyYWZ0NyBmcm9tICdhanYvbGliL3JlZnMvanNvbi1zY2hlbWEtZHJhZnQtMDcuanNvbic7XHJcbmltcG9ydCBjbG9uZURlZXAgZnJvbSAnbG9kYXNoL2Nsb25lRGVlcCc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7XHJcbiAgZGVWYWxpZGF0aW9uTWVzc2FnZXMsXHJcbiAgZW5WYWxpZGF0aW9uTWVzc2FnZXMsXHJcbiAgZXNWYWxpZGF0aW9uTWVzc2FnZXMsXHJcbiAgZnJWYWxpZGF0aW9uTWVzc2FnZXMsXHJcbiAgaXRWYWxpZGF0aW9uTWVzc2FnZXMsXHJcbiAgcHRWYWxpZGF0aW9uTWVzc2FnZXMsXHJcbiAgemhWYWxpZGF0aW9uTWVzc2FnZXNcclxufSBmcm9tICcuL2xvY2FsZSc7XHJcbmltcG9ydCB7XHJcbiAgSnNvblBvaW50ZXIsXHJcbiAgYnVpbGRGb3JtR3JvdXAsXHJcbiAgYnVpbGRGb3JtR3JvdXBUZW1wbGF0ZSxcclxuICBidWlsZExheW91dCxcclxuICBidWlsZFNjaGVtYUZyb21EYXRhLFxyXG4gIGJ1aWxkU2NoZW1hRnJvbUxheW91dCxcclxuICBmaXhUaXRsZSxcclxuICBmb3JFYWNoLFxyXG4gIGZvcm1hdEZvcm1EYXRhLFxyXG4gIGdldENvbnRyb2wsXHJcbiAgZ2V0TGF5b3V0Tm9kZSxcclxuICBoYXNPd24sXHJcbiAgaGFzVmFsdWUsXHJcbiAgaXNBcnJheSxcclxuICBpc0RlZmluZWQsXHJcbiAgaXNFbXB0eSxcclxuICBpc09iamVjdCxcclxuICByZW1vdmVSZWN1cnNpdmVSZWZlcmVuY2VzLFxyXG4gIHRvVGl0bGVDYXNlXHJcbn0gZnJvbSAnLi9zaGFyZWQnO1xyXG5cclxuaW1wb3J0IHsgZGVmYXVsdCBhcyBfaXNFcXVhbCwgZGVmYXVsdCBhcyBpc0VxdWFsIH0gZnJvbSAnbG9kYXNoL2lzRXF1YWwnO1xyXG5pbXBvcnQgeyBzZXRDb250cm9sIH0gZnJvbSAnLi9zaGFyZWQvZm9ybS1ncm91cC5mdW5jdGlvbnMnO1xyXG5cclxuXHJcbmV4cG9ydCB0eXBlIFdpZGdldENvbnRleHQ9e1xyXG4gIGZvcm1Db250cm9sPzpBYnN0cmFjdENvbnRyb2w7XHJcbiAgbGF5b3V0Tm9kZT86IFNpZ25hbDxhbnk+O1xyXG4gIGxheW91dEluZGV4PzogU2lnbmFsPG51bWJlcltdPjtcclxuICBkYXRhSW5kZXg/OiBTaWduYWw8bnVtYmVyW10+O1xyXG4gIG9wdGlvbnM/OmFueTtcclxuICBjb250cm9sVmFsdWU/OmFueTtcclxuICBib3VuZENvbnRyb2w/OmJvb2xlYW47XHJcbiAgY29udHJvbE5hbWU/OnN0cmluZztcclxuICBjb250cm9sRGlzYWJsZWQ/OmJvb2xlYW5cclxufVxyXG5cclxuZXhwb3J0IHR5cGUgQUpWUmVnaXN0cnlJdGVtPXtcclxuICBbbmFtZTogc3RyaW5nXTp7XHJcbiAgICBuYW1lOnN0cmluZyxcclxuICAgIGFqdkluc3RhbmNlOkFqdjIwMTlcclxuICAgIGFqdlZhbGlkYXRvcjpWYWxpZGF0ZUZ1bmN0aW9uXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFRpdGxlTWFwSXRlbSB7XHJcbiAgbmFtZT86IHN0cmluZztcclxuICB2YWx1ZT86IGFueTtcclxuICBjaGVja2VkPzogYm9vbGVhbjtcclxuICBncm91cD86IHN0cmluZztcclxuICBpdGVtcz86IFRpdGxlTWFwSXRlbVtdO1xyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgRXJyb3JNZXNzYWdlcyB7XHJcbiAgW2NvbnRyb2xfbmFtZTogc3RyaW5nXToge1xyXG4gICAgbWVzc2FnZTogc3RyaW5nIHwgRnVuY3Rpb24gfCBPYmplY3Q7XHJcbiAgICBjb2RlOiBzdHJpbmc7XHJcbiAgfVtdO1xyXG59XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBKc29uU2NoZW1hRm9ybVNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gIEpzb25Gb3JtQ29tcGF0aWJpbGl0eSA9IGZhbHNlO1xyXG4gIFJlYWN0SnNvblNjaGVtYUZvcm1Db21wYXRpYmlsaXR5ID0gZmFsc2U7XHJcbiAgQW5ndWxhclNjaGVtYUZvcm1Db21wYXRpYmlsaXR5ID0gZmFsc2U7XHJcbiAgdHBsZGF0YTogYW55ID0ge307XHJcblxyXG4gIGFqdk9wdGlvbnM6IE9wdGlvbnMgPSB7XHJcbiAgICBhbGxFcnJvcnM6IHRydWUsXHJcbiAgICAvL3ZhbGlkYXRlRm9ybWF0czpmYWxzZSxcclxuICAgIHN0cmljdDpmYWxzZVxyXG4gIFxyXG4gIH07XHJcbiAgYWp2OmFueSA9IG5ldyBBanYyMDE5KHRoaXMuYWp2T3B0aW9ucyk7IC8vIEFKVjogQW5vdGhlciBKU09OIFNjaGVtYSBWYWxpZGF0b3JcclxuICBcclxuICAvL0JlaW5nIHJlcGxhY2VkIGJ5IGdldEFqdlZhbGlkYXRvcigpXHJcbiAgdmFsaWRhdGVGb3JtRGF0YTogYW55ID0gbnVsbDsgLy8gQ29tcGlsZWQgQUpWIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGFjdGl2ZSBmb3JtJ3Mgc2NoZW1hXHJcblxyXG4gIGZvcm1WYWx1ZXM6IGFueSA9IHt9OyAvLyBJbnRlcm5hbCBmb3JtIGRhdGEgKG1heSBub3QgaGF2ZSBjb3JyZWN0IHR5cGVzKVxyXG4gIGRhdGE6IGFueSA9IHt9OyAvLyBPdXRwdXQgZm9ybSBkYXRhIChmb3JtVmFsdWVzLCBmb3JtYXR0ZWQgd2l0aCBjb3JyZWN0IGRhdGEgdHlwZXMpXHJcbiAgc2NoZW1hOiBhbnkgPSB7fTsgLy8gSW50ZXJuYWwgSlNPTiBTY2hlbWFcclxuICBsYXlvdXQ6IGFueVtdID0gW107IC8vIEludGVybmFsIGZvcm0gbGF5b3V0XHJcbiAgZm9ybUdyb3VwVGVtcGxhdGU6IGFueSA9IHt9OyAvLyBUZW1wbGF0ZSB1c2VkIHRvIGNyZWF0ZSBmb3JtR3JvdXBcclxuICBmb3JtR3JvdXA6IGFueSA9IG51bGw7IC8vIEFuZ3VsYXIgZm9ybUdyb3VwLCB3aGljaCBwb3dlcnMgdGhlIHJlYWN0aXZlIGZvcm1cclxuICBmcmFtZXdvcms6IGFueSA9IG51bGw7IC8vIEFjdGl2ZSBmcmFtZXdvcmsgY29tcG9uZW50XHJcbiAgZm9ybU9wdGlvbnM6IGFueTsgLy8gQWN0aXZlIG9wdGlvbnMsIHVzZWQgdG8gY29uZmlndXJlIHRoZSBmb3JtXHJcblxyXG4gIHZhbGlkRGF0YTogYW55ID0gbnVsbDsgLy8gVmFsaWQgZm9ybSBkYXRhIChvciBudWxsKSAoPT09IGlzVmFsaWQgPyBkYXRhIDogbnVsbClcclxuICBpc1ZhbGlkOiBib29sZWFuID0gbnVsbDsgLy8gSXMgY3VycmVudCBmb3JtIGRhdGEgdmFsaWQ/XHJcbiAgYWp2RXJyb3JzOiBFcnJvck9iamVjdFtdID0gbnVsbDsgLy8gQWp2IGVycm9ycyBmb3IgY3VycmVudCBkYXRhXHJcbiAgdmFsaWRhdGlvbkVycm9yczogYW55ID0gbnVsbDsgLy8gQW55IHZhbGlkYXRpb24gZXJyb3JzIGZvciBjdXJyZW50IGRhdGFcclxuICBkYXRhRXJyb3JzOiBhbnkgPSBuZXcgTWFwKCk7IC8vXHJcbiAgZm9ybVZhbHVlU3Vic2NyaXB0aW9uOiBhbnkgPSBudWxsOyAvLyBTdWJzY3JpcHRpb24gdG8gZm9ybUdyb3VwLnZhbHVlQ2hhbmdlcyBvYnNlcnZhYmxlIChmb3IgdW4tIGFuZCByZS1zdWJzY3JpYmluZylcclxuICBkYXRhQ2hhbmdlczogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTsgLy8gRm9ybSBkYXRhIG9ic2VydmFibGVcclxuICBpc1ZhbGlkQ2hhbmdlczogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTsgLy8gaXNWYWxpZCBvYnNlcnZhYmxlXHJcbiAgdmFsaWRhdGlvbkVycm9yQ2hhbmdlczogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTsgLy8gdmFsaWRhdGlvbkVycm9ycyBvYnNlcnZhYmxlXHJcblxyXG4gIGFycmF5TWFwOiBNYXA8c3RyaW5nLCBudW1iZXI+ID0gbmV3IE1hcCgpOyAvLyBNYXBzIGFycmF5cyBpbiBkYXRhIG9iamVjdCBhbmQgbnVtYmVyIG9mIHR1cGxlIHZhbHVlc1xyXG4gIGRhdGFNYXA6IE1hcDxzdHJpbmcsIGFueT4gPSBuZXcgTWFwKCk7IC8vIE1hcHMgcGF0aHMgaW4gZm9ybSBkYXRhIHRvIHNjaGVtYSBhbmQgZm9ybUdyb3VwIHBhdGhzXHJcbiAgZGF0YVJlY3Vyc2l2ZVJlZk1hcDogTWFwPHN0cmluZywgc3RyaW5nPiA9IG5ldyBNYXAoKTsgLy8gTWFwcyByZWN1cnNpdmUgcmVmZXJlbmNlIHBvaW50cyBpbiBmb3JtIGRhdGFcclxuICBzY2hlbWFSZWN1cnNpdmVSZWZNYXA6IE1hcDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTWFwKCk7IC8vIE1hcHMgcmVjdXJzaXZlIHJlZmVyZW5jZSBwb2ludHMgaW4gc2NoZW1hXHJcbiAgc2NoZW1hUmVmTGlicmFyeTogYW55ID0ge307IC8vIExpYnJhcnkgb2Ygc2NoZW1hcyBmb3IgcmVzb2x2aW5nIHNjaGVtYSAkcmVmc1xyXG4gIGxheW91dFJlZkxpYnJhcnk6IGFueSA9IHsgJyc6IG51bGwgfTsgLy8gTGlicmFyeSBvZiBsYXlvdXQgbm9kZXMgZm9yIGFkZGluZyB0byBmb3JtXHJcbiAgdGVtcGxhdGVSZWZMaWJyYXJ5OiBhbnkgPSB7fTsgLy8gTGlicmFyeSBvZiBmb3JtR3JvdXAgdGVtcGxhdGVzIGZvciBhZGRpbmcgdG8gZm9ybVxyXG4gIGhhc1Jvb3RSZWZlcmVuY2UgPSBmYWxzZTsgLy8gRG9lcyB0aGUgZm9ybSBpbmNsdWRlIGEgcmVjdXJzaXZlIHJlZmVyZW5jZSB0byBpdHNlbGY/XHJcblxyXG4gIGxhbmd1YWdlID0gJ2VuLVVTJzsgLy8gRG9lcyB0aGUgZm9ybSBpbmNsdWRlIGEgcmVjdXJzaXZlIHJlZmVyZW5jZSB0byBpdHNlbGY/XHJcblxyXG4gIC8vIERlZmF1bHQgZ2xvYmFsIGZvcm0gb3B0aW9uc1xyXG4gIGRlZmF1bHRGb3JtT3B0aW9uczogYW55ID0ge1xyXG4gICAgYXV0b2NvbXBsZXRlOiB0cnVlLCAvLyBBbGxvdyB0aGUgd2ViIGJyb3dzZXIgdG8gcmVtZW1iZXIgcHJldmlvdXMgZm9ybSBzdWJtaXNzaW9uIHZhbHVlcyBhcyBkZWZhdWx0c1xyXG4gICAgYWRkU3VibWl0OiAnYXV0bycsIC8vIEFkZCBhIHN1Ym1pdCBidXR0b24gaWYgbGF5b3V0IGRvZXMgbm90IGhhdmUgb25lP1xyXG4gICAgLy8gZm9yIGFkZFN1Ym1pdDogdHJ1ZSA9IGFsd2F5cywgZmFsc2UgPSBuZXZlcixcclxuICAgIC8vICdhdXRvJyA9IG9ubHkgaWYgbGF5b3V0IGlzIHVuZGVmaW5lZCAoZm9ybSBpcyBidWlsdCBmcm9tIHNjaGVtYSBhbG9uZSlcclxuICAgIGRlYnVnOiBmYWxzZSwgLy8gU2hvdyBkZWJ1Z2dpbmcgb3V0cHV0P1xyXG4gICAgZGlzYWJsZUludmFsaWRTdWJtaXQ6IHRydWUsIC8vIERpc2FibGUgc3VibWl0IGlmIGZvcm0gaW52YWxpZD9cclxuICAgIGZvcm1EaXNhYmxlZDogZmFsc2UsIC8vIFNldCBlbnRpcmUgZm9ybSBhcyBkaXNhYmxlZD8gKG5vdCBlZGl0YWJsZSwgYW5kIGRpc2FibGVzIG91dHB1dHMpXHJcbiAgICBmb3JtUmVhZG9ubHk6IGZhbHNlLCAvLyBTZXQgZW50aXJlIGZvcm0gYXMgcmVhZCBvbmx5PyAobm90IGVkaXRhYmxlLCBidXQgb3V0cHV0cyBzdGlsbCBlbmFibGVkKVxyXG4gICAgZmllbGRzUmVxdWlyZWQ6IGZhbHNlLCAvLyAoc2V0IGF1dG9tYXRpY2FsbHkpIEFyZSB0aGVyZSBhbnkgcmVxdWlyZWQgZmllbGRzIGluIHRoZSBmb3JtP1xyXG4gICAgZnJhbWV3b3JrOiAnbm8tZnJhbWV3b3JrJywgLy8gVGhlIGZyYW1ld29yayB0byBsb2FkXHJcbiAgICBsb2FkRXh0ZXJuYWxBc3NldHM6IGZhbHNlLCAvLyBMb2FkIGV4dGVybmFsIGNzcyBhbmQgSmF2YVNjcmlwdCBmb3IgZnJhbWV3b3JrP1xyXG4gICAgcHJpc3RpbmU6IHsgZXJyb3JzOiB0cnVlLCBzdWNjZXNzOiB0cnVlIH0sXHJcbiAgICBzdXByZXNzUHJvcGVydHlUaXRsZXM6IGZhbHNlLFxyXG4gICAgc2V0U2NoZW1hRGVmYXVsdHM6ICdhdXRvJywgLy8gU2V0IGZlZmF1bHQgdmFsdWVzIGZyb20gc2NoZW1hP1xyXG4gICAgLy8gdHJ1ZSA9IGFsd2F5cyBzZXQgKHVubGVzcyBvdmVycmlkZGVuIGJ5IGxheW91dCBkZWZhdWx0IG9yIGZvcm1WYWx1ZXMpXHJcbiAgICAvLyBmYWxzZSA9IG5ldmVyIHNldFxyXG4gICAgLy8gJ2F1dG8nID0gc2V0IGluIGFkZGFibGUgY29tcG9uZW50cywgYW5kIGV2ZXJ5d2hlcmUgaWYgZm9ybVZhbHVlcyBub3Qgc2V0XHJcbiAgICBzZXRMYXlvdXREZWZhdWx0czogJ2F1dG8nLCAvLyBTZXQgZmVmYXVsdCB2YWx1ZXMgZnJvbSBsYXlvdXQ/XHJcbiAgICAvLyB0cnVlID0gYWx3YXlzIHNldCAodW5sZXNzIG92ZXJyaWRkZW4gYnkgZm9ybVZhbHVlcylcclxuICAgIC8vIGZhbHNlID0gbmV2ZXIgc2V0XHJcbiAgICAvLyAnYXV0bycgPSBzZXQgaW4gYWRkYWJsZSBjb21wb25lbnRzLCBhbmQgZXZlcnl3aGVyZSBpZiBmb3JtVmFsdWVzIG5vdCBzZXRcclxuICAgIHZhbGlkYXRlT25SZW5kZXI6ICdhdXRvJywgLy8gVmFsaWRhdGUgZmllbGRzIGltbWVkaWF0ZWx5LCBiZWZvcmUgdGhleSBhcmUgdG91Y2hlZD9cclxuICAgIC8vIHRydWUgPSB2YWxpZGF0ZSBhbGwgZmllbGRzIGltbWVkaWF0ZWx5XHJcbiAgICAvLyBmYWxzZSA9IG9ubHkgdmFsaWRhdGUgZmllbGRzIGFmdGVyIHRoZXkgYXJlIHRvdWNoZWQgYnkgdXNlclxyXG4gICAgLy8gJ2F1dG8nID0gdmFsaWRhdGUgZmllbGRzIHdpdGggdmFsdWVzIGltbWVkaWF0ZWx5LCBlbXB0eSBmaWVsZHMgYWZ0ZXIgdGhleSBhcmUgdG91Y2hlZFxyXG4gICAgd2lkZ2V0czoge30sIC8vIEFueSBjdXN0b20gd2lkZ2V0cyB0byBsb2FkXHJcbiAgICBkZWZhdWx0V2lkZ2V0T3B0aW9uczoge1xyXG4gICAgICAvLyBEZWZhdWx0IG9wdGlvbnMgZm9yIGZvcm0gY29udHJvbCB3aWRnZXRzXHJcbiAgICAgIGxpc3RJdGVtczogMSwgLy8gTnVtYmVyIG9mIGxpc3QgaXRlbXMgdG8gaW5pdGlhbGx5IGFkZCB0byBhcnJheXMgd2l0aCBubyBkZWZhdWx0IHZhbHVlXHJcbiAgICAgIGFkZGFibGU6IHRydWUsIC8vIEFsbG93IGFkZGluZyBpdGVtcyB0byBhbiBhcnJheSBvciAkcmVmIHBvaW50P1xyXG4gICAgICBvcmRlcmFibGU6IHRydWUsIC8vIEFsbG93IHJlb3JkZXJpbmcgaXRlbXMgd2l0aGluIGFuIGFycmF5P1xyXG4gICAgICByZW1vdmFibGU6IHRydWUsIC8vIEFsbG93IHJlbW92aW5nIGl0ZW1zIGZyb20gYW4gYXJyYXkgb3IgJHJlZiBwb2ludD9cclxuICAgICAgZW5hYmxlRXJyb3JTdGF0ZTogdHJ1ZSwgLy8gQXBwbHkgJ2hhcy1lcnJvcicgY2xhc3Mgd2hlbiBmaWVsZCBmYWlscyB2YWxpZGF0aW9uP1xyXG4gICAgICAvLyBkaXNhYmxlRXJyb3JTdGF0ZTogZmFsc2UsIC8vIERvbid0IGFwcGx5ICdoYXMtZXJyb3InIGNsYXNzIHdoZW4gZmllbGQgZmFpbHMgdmFsaWRhdGlvbj9cclxuICAgICAgZW5hYmxlU3VjY2Vzc1N0YXRlOiB0cnVlLCAvLyBBcHBseSAnaGFzLXN1Y2Nlc3MnIGNsYXNzIHdoZW4gZmllbGQgdmFsaWRhdGVzP1xyXG4gICAgICAvLyBkaXNhYmxlU3VjY2Vzc1N0YXRlOiBmYWxzZSwgLy8gRG9uJ3QgYXBwbHkgJ2hhcy1zdWNjZXNzJyBjbGFzcyB3aGVuIGZpZWxkIHZhbGlkYXRlcz9cclxuICAgICAgZmVlZGJhY2s6IGZhbHNlLCAvLyBTaG93IGlubGluZSBmZWVkYmFjayBpY29ucz9cclxuICAgICAgZmVlZGJhY2tPblJlbmRlcjogZmFsc2UsIC8vIFNob3cgZXJyb3JNZXNzYWdlIG9uIFJlbmRlcj9cclxuICAgICAgbm90aXRsZTogZmFsc2UsIC8vIEhpZGUgdGl0bGU/XHJcbiAgICAgIGRpc2FibGVkOiBmYWxzZSwgLy8gU2V0IGNvbnRyb2wgYXMgZGlzYWJsZWQ/IChub3QgZWRpdGFibGUsIGFuZCBleGNsdWRlZCBmcm9tIG91dHB1dClcclxuICAgICAgcmVhZG9ubHk6IGZhbHNlLCAvLyBTZXQgY29udHJvbCBhcyByZWFkIG9ubHk/IChub3QgZWRpdGFibGUsIGJ1dCBpbmNsdWRlZCBpbiBvdXRwdXQpXHJcbiAgICAgIHJldHVybkVtcHR5RmllbGRzOiB0cnVlLCAvLyByZXR1cm4gdmFsdWVzIGZvciBmaWVsZHMgdGhhdCBjb250YWluIG5vIGRhdGE/XHJcbiAgICAgIHZhbGlkYXRpb25NZXNzYWdlczoge30gLy8gc2V0IGJ5IHNldExhbmd1YWdlKClcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBmY1ZhbHVlQ2hhbmdlc1N1YnM6U3Vic2NyaXB0aW9uO1xyXG4gIGZjU3RhdHVzQ2hhbmdlc1N1YnM6U3Vic2NyaXB0aW9uO1xyXG5cclxuICAvL1RPRE8tcmV2aWV3LG1heSBub3QgYmUgbmVlZGVkIGFzIHNvcnRhYmxlanMgcmVwbGFjZXMgZG5kXHJcbiAgLy90aGlzIGhhcyBiZWVuIGFkZGVkIHRvIGVuYWJsZSBvciBkaXNhYmxlIHRoZSBkcmFnYWJibGUgc3RhdGUgb2YgYSBjb21wb25lbnRcclxuICAvL3VzaW5nIHRoZSBPcmRlcmFibGVEaXJlY3RpdmUsIG1haW5seSB3aGVuIGFuIDxpbnB1dCB0eXBlPVwicmFuZ2VcIj4gXHJcbiAgLy9lbGVtZW50cyBhcmUgcHJlc2VudCwgYXMgdGhlIGRyYWdnYWJsZSBhdHRyaWJ1dGUgbWFrZXMgaXQgZGlmZmljdWx0IHRvXHJcbiAgLy9zbGlkZSB0aGUgcmFuZ2Ugc2xpZGVycyBhbmQgZW5kIHVwIGRyYWdnaW5nXHJcbiAgLy9OQiB0aGlzIHdpbGwgYmUgc2V0IGdsb2JhbGx5IGZvciBhbGwgT3JkZXJhYmxlRGlyZWN0aXZlIGluc3RhbmNlc1xyXG4gIC8vYW5kIHdpbGwgb25seSBiZSBlbmFibGVkIHdoZW4vaWYgdGhlIGNhbGxlciBzZXRzIHRoZSB2YWx1ZSBiYWNrIHRvIHRydWUgXHJcbiAgcHJpdmF0ZSBkcmFnZ2FibGVTdGF0ZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpOyAvLyBEZWZhdWx0IHZhbHVlIHRydWVcclxuICBkcmFnZ2FibGVTdGF0ZSQgPSB0aGlzLmRyYWdnYWJsZVN0YXRlU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgc2V0RHJhZ2dhYmxlU3RhdGUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuZHJhZ2dhYmxlU3RhdGVTdWJqZWN0Lm5leHQodmFsdWUpOyAvLyBVcGRhdGUgdGhlIGRyYWdnYWJsZSB2YWx1ZVxyXG4gIH1cclxuXHJcbiAgY3JlYXRlQWp2SW5zdGFuY2UoYWp2T3B0aW9ucyl7XHJcbiAgICBsZXQgYWp2SW5zdGFuY2U9bmV3IEFqdjIwMTkoYWp2T3B0aW9ucyk7IFxyXG4gICAgYWp2SW5zdGFuY2UuYWRkTWV0YVNjaGVtYShqc29uRHJhZnQ2KTtcclxuICAgIGFqdkluc3RhbmNlLmFkZE1ldGFTY2hlbWEoanNvbkRyYWZ0Nyk7XHJcbiAgICBhZGRGb3JtYXRzKGFqdkluc3RhbmNlKTtcclxuICAgIHJldHVybiBhanZJbnN0YW5jZTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZUFuZFJlZ2lzdGVyQWp2SW5zdGFuY2UoYWp2T3B0aW9ucyxuYW1lPzpzdHJpbmcpe1xyXG4gICAgY29uc3QgaW50YW5jZU5hbWU9bmFtZXx8YGFqdl8ke0RhdGUubm93KCl9YDtcclxuICAgIGlmKHRoaXMuYWp2UmVnaXN0cnlbaW50YW5jZU5hbWVdKXtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBhanYgaW5zdGFuY2Ugd2l0aCBuYW1lOicke2ludGFuY2VOYW1lfScgaGFzIGFscmVhZHkgYmVlbiByZWdpc3RlcmVkYCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBhanZJbnN0YW5jZT10aGlzLmNyZWF0ZUFqdkluc3RhbmNlKGFqdk9wdGlvbnMpO1xyXG4gICAgdGhpcy5hanZSZWdpc3RyeVtpbnRhbmNlTmFtZV09e1xyXG4gICAgICBuYW1lOmludGFuY2VOYW1lLFxyXG4gICAgICBhanZJbnN0YW5jZTphanZJbnN0YW5jZSxcclxuICAgICAgYWp2VmFsaWRhdG9yOm51bGxcclxuICAgIH07XHJcbiAgICByZXR1cm4gdGhpcy5hanZSZWdpc3RyeVtpbnRhbmNlTmFtZV07XHJcbiAgfVxyXG5cclxuICBhanZSZWdpc3RyeTpBSlZSZWdpc3RyeUl0ZW09e31cclxuXHJcbiAgZ2V0QWp2SW5zdGFuY2UobmFtZT0nZGVmYXVsdCcpe1xyXG4gICAgcmV0dXJuIHRoaXMuYWp2UmVnaXN0cnlbbmFtZV0uYWp2SW5zdGFuY2U7XHJcbiAgfVxyXG4gIGdldEFqdlZhbGlkYXRvcihuYW1lPSdkZWZhdWx0Jyl7XHJcbiAgICByZXR1cm4gdGhpcy5hanZSZWdpc3RyeVtuYW1lXT8uYWp2VmFsaWRhdG9yO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLnNldExhbmd1YWdlKHRoaXMubGFuZ3VhZ2UpO1xyXG4gICAgdGhpcy5hanYuYWRkTWV0YVNjaGVtYShqc29uRHJhZnQ2KTtcclxuICAgIHRoaXMuYWp2LmFkZE1ldGFTY2hlbWEoanNvbkRyYWZ0Nyk7XHJcbiAgICBhZGRGb3JtYXRzKHRoaXMuYWp2KTtcclxuICAgIHRoaXMuYWp2UmVnaXN0cnlbJ2RlZmF1bHQnXT17bmFtZTonZGVmYXVsdCcsYWp2SW5zdGFuY2U6dGhpcy5hanYsYWp2VmFsaWRhdG9yOm51bGx9O1xyXG4gICAgLy8gQWRkIGN1c3RvbSAnZHVyYXRpb24nIGZvcm1hdCB1c2luZyBhIHJlZ2V4XHJcbi8qICAgIFxyXG50aGlzLmFqdi5hZGRGb3JtYXQoXCJkdXJhdGlvblwiLCB7XHJcbiAgdHlwZTogXCJzdHJpbmdcIixcclxuICB2YWxpZGF0ZTogKGR1cmF0aW9uKSA9PiAvXlAoPyEkKShcXGQrWSk/KFxcZCtNKT8oXFxkK0QpPyhUKFxcZCtIKT8oXFxkK00pPyhcXGQrUyk/KT8kLy50ZXN0KGR1cmF0aW9uKVxyXG59KTtcclxuKi9cclxuICB9XHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmZjVmFsdWVDaGFuZ2VzU3Vicz8udW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuZmNTdGF0dXNDaGFuZ2VzU3Vicz8udW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuZm9ybVZhbHVlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xyXG4gICAgdGhpcy5mY1ZhbHVlQ2hhbmdlc1N1YnM9bnVsbDtcclxuICAgIHRoaXMuZmNTdGF0dXNDaGFuZ2VzU3Vicz1udWxsO1xyXG4gICAgdGhpcy5mb3JtVmFsdWVTdWJzY3JpcHRpb249bnVsbDtcclxuXHJcbiAgfVxyXG5cclxuICBzZXRMYW5ndWFnZShsYW5ndWFnZTogc3RyaW5nID0gJ2VuLVVTJykge1xyXG4gICAgdGhpcy5sYW5ndWFnZSA9IGxhbmd1YWdlO1xyXG4gICAgY29uc3QgbGFuZ3VhZ2VWYWxpZGF0aW9uTWVzc2FnZXMgPSB7XHJcbiAgICAgIGRlOiBkZVZhbGlkYXRpb25NZXNzYWdlcyxcclxuICAgICAgZW46IGVuVmFsaWRhdGlvbk1lc3NhZ2VzLFxyXG4gICAgICBlczogZXNWYWxpZGF0aW9uTWVzc2FnZXMsXHJcbiAgICAgIGZyOiBmclZhbGlkYXRpb25NZXNzYWdlcyxcclxuICAgICAgaXQ6IGl0VmFsaWRhdGlvbk1lc3NhZ2VzLFxyXG4gICAgICBwdDogcHRWYWxpZGF0aW9uTWVzc2FnZXMsXHJcbiAgICAgIHpoOiB6aFZhbGlkYXRpb25NZXNzYWdlcyxcclxuICAgIH07XHJcbiAgICBjb25zdCBsYW5ndWFnZUNvZGUgPSBsYW5ndWFnZS5zbGljZSgwLCAyKTtcclxuXHJcbiAgICBjb25zdCB2YWxpZGF0aW9uTWVzc2FnZXMgPSBsYW5ndWFnZVZhbGlkYXRpb25NZXNzYWdlc1tsYW5ndWFnZUNvZGVdO1xyXG5cclxuICAgIHRoaXMuZGVmYXVsdEZvcm1PcHRpb25zLmRlZmF1bHRXaWRnZXRPcHRpb25zLnZhbGlkYXRpb25NZXNzYWdlcyA9IGNsb25lRGVlcChcclxuICAgICAgdmFsaWRhdGlvbk1lc3NhZ2VzXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0RGF0YSgpIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGE7XHJcbiAgfVxyXG5cclxuICBnZXRTY2hlbWEoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zY2hlbWE7XHJcbiAgfVxyXG5cclxuICBnZXRMYXlvdXQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5sYXlvdXQ7XHJcbiAgfVxyXG5cclxuICByZXNldEFsbFZhbHVlcygpIHtcclxuICAgIHRoaXMuSnNvbkZvcm1Db21wYXRpYmlsaXR5ID0gZmFsc2U7XHJcbiAgICB0aGlzLlJlYWN0SnNvblNjaGVtYUZvcm1Db21wYXRpYmlsaXR5ID0gZmFsc2U7XHJcbiAgICB0aGlzLkFuZ3VsYXJTY2hlbWFGb3JtQ29tcGF0aWJpbGl0eSA9IGZhbHNlO1xyXG4gICAgdGhpcy50cGxkYXRhID0ge307XHJcbiAgICB0aGlzLnZhbGlkYXRlRm9ybURhdGEgPSBudWxsOy8vQmVpbmcgcmVwbGFjZWQgYnkgZ2V0QWp2VmFsaWRhdG9yKClcclxuICAgIHRoaXMuZm9ybVZhbHVlcyA9IHt9O1xyXG4gICAgdGhpcy5zY2hlbWEgPSB7fTtcclxuICAgIHRoaXMubGF5b3V0ID0gW107XHJcbiAgICB0aGlzLmZvcm1Hcm91cFRlbXBsYXRlID0ge307XHJcbiAgICB0aGlzLmZvcm1Hcm91cCA9IG51bGw7XHJcbiAgICB0aGlzLmZyYW1ld29yayA9IG51bGw7XHJcbiAgICB0aGlzLmRhdGEgPSB7fTtcclxuICAgIHRoaXMudmFsaWREYXRhID0gbnVsbDtcclxuICAgIHRoaXMuaXNWYWxpZCA9IG51bGw7XHJcbiAgICB0aGlzLnZhbGlkYXRpb25FcnJvcnMgPSBudWxsO1xyXG4gICAgdGhpcy5hcnJheU1hcCA9IG5ldyBNYXAoKTtcclxuICAgIHRoaXMuZGF0YU1hcCA9IG5ldyBNYXAoKTtcclxuICAgIHRoaXMuZGF0YVJlY3Vyc2l2ZVJlZk1hcCA9IG5ldyBNYXAoKTtcclxuICAgIHRoaXMuc2NoZW1hUmVjdXJzaXZlUmVmTWFwID0gbmV3IE1hcCgpO1xyXG4gICAgdGhpcy5sYXlvdXRSZWZMaWJyYXJ5ID0ge307XHJcbiAgICB0aGlzLnNjaGVtYVJlZkxpYnJhcnkgPSB7fTtcclxuICAgIHRoaXMudGVtcGxhdGVSZWZMaWJyYXJ5ID0ge307XHJcbiAgICB0aGlzLmZvcm1PcHRpb25zID0gY2xvbmVEZWVwKHRoaXMuZGVmYXVsdEZvcm1PcHRpb25zKTtcclxuICAgIHRoaXMuYWp2UmVnaXN0cnk9e307XHJcbiAgICB0aGlzLmFqdlJlZ2lzdHJ5WydkZWZhdWx0J109e25hbWU6J2RlZmF1bHQnLGFqdkluc3RhbmNlOnRoaXMuYWp2LGFqdlZhbGlkYXRvcjpudWxsfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqICdidWlsZFJlbW90ZUVycm9yJyBmdW5jdGlvblxyXG4gICAqXHJcbiAgICogRXhhbXBsZSBlcnJvcnM6XHJcbiAgICoge1xyXG4gICAqICAgbGFzdF9uYW1lOiBbIHtcclxuICAgKiAgICAgbWVzc2FnZTogJ0xhc3QgbmFtZSBtdXN0IGJ5IHN0YXJ0IHdpdGggY2FwaXRhbCBsZXR0ZXIuJyxcclxuICAgKiAgICAgY29kZTogJ2NhcGl0YWxfbGV0dGVyJ1xyXG4gICAqICAgfSBdLFxyXG4gICAqICAgZW1haWw6IFsge1xyXG4gICAqICAgICBtZXNzYWdlOiAnRW1haWwgbXVzdCBiZSBmcm9tIGV4YW1wbGUuY29tIGRvbWFpbi4nLFxyXG4gICAqICAgICBjb2RlOiAnc3BlY2lhbF9kb21haW4nXHJcbiAgICogICB9LCB7XHJcbiAgICogICAgIG1lc3NhZ2U6ICdFbWFpbCBtdXN0IGNvbnRhaW4gYW4gQCBzeW1ib2wuJyxcclxuICAgKiAgICAgY29kZTogJ2F0X3N5bWJvbCdcclxuICAgKiAgIH0gXVxyXG4gICAqIH1cclxuICAgKiAvL3tFcnJvck1lc3NhZ2VzfSBlcnJvcnNcclxuICAgKi9cclxuICBidWlsZFJlbW90ZUVycm9yKGVycm9yczogRXJyb3JNZXNzYWdlcykge1xyXG4gICAgZm9yRWFjaChlcnJvcnMsICh2YWx1ZSwga2V5KSA9PiB7XHJcbiAgICAgIGlmIChrZXkgaW4gdGhpcy5mb3JtR3JvdXAuY29udHJvbHMpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGVycm9yIG9mIHZhbHVlKSB7XHJcbiAgICAgICAgICBjb25zdCBlcnIgPSB7fTtcclxuICAgICAgICAgIGVycltlcnJvclsnY29kZSddXSA9IGVycm9yWydtZXNzYWdlJ107XHJcbiAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoa2V5KS5zZXRFcnJvcnMoZXJyLCB7IGVtaXRFdmVudDogdHJ1ZSB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGVEYXRhKG5ld1ZhbHVlOiBhbnksIHVwZGF0ZVN1YnNjcmlwdGlvbnMgPSB0cnVlLGFqdkluc3RhbmNlTmFtZT0nZGVmYXVsdCcpOiB2b2lkIHtcclxuICAgIC8vIEZvcm1hdCByYXcgZm9ybSBkYXRhIHRvIGNvcnJlY3QgZGF0YSB0eXBlc1xyXG4gICAgdGhpcy5kYXRhID0gZm9ybWF0Rm9ybURhdGEoXHJcbiAgICAgIG5ld1ZhbHVlLFxyXG4gICAgICB0aGlzLmRhdGFNYXAsXHJcbiAgICAgIHRoaXMuZGF0YVJlY3Vyc2l2ZVJlZk1hcCxcclxuICAgICAgdGhpcy5hcnJheU1hcCxcclxuICAgICAgdGhpcy5mb3JtT3B0aW9ucy5yZXR1cm5FbXB0eUZpZWxkc1xyXG4gICAgKTtcclxuICAgIHRoaXMuaXNWYWxpZCA9IHRoaXMuZ2V0QWp2VmFsaWRhdG9yKGFqdkluc3RhbmNlTmFtZSkodGhpcy5kYXRhKTtcclxuICAgIHRoaXMudmFsaWREYXRhID0gdGhpcy5pc1ZhbGlkID8gdGhpcy5kYXRhIDogbnVsbDtcclxuICAgIGNvbnN0IGNvbXBpbGVFcnJvcnMgPSAoZXJyb3JzOkVycm9yT2JqZWN0W10pID0+IHtcclxuICAgICAgY29uc3QgY29tcGlsZWRFcnJvcnMgPSB7fTtcclxuICAgICAgKGVycm9ycyB8fCBbXSkuZm9yRWFjaChlcnJvciA9PiB7XHJcbiAgICAgICAgLy9UT0RPIHJldmlldy1zZWVtcyB0byBiZSBhIGNoYW5nZSBpbiBuZXdlciB2ZXJzaW9uc1xyXG4gICAgICAgIC8vb2YgYWp2IGdpdmluZyAnJyBhcyBpbnN0YW5jZVBhdGggZm9yIHJvb3Qgb2JqZWN0c1xyXG4gICAgICAgIGxldCBlcnJvclBhdGg9ZXJyb3IuaW5zdGFuY2VQYXRofHxcIlJPT1RcIjtcclxuICAgICAgICBpZiAoIWNvbXBpbGVkRXJyb3JzW2Vycm9yUGF0aF0pIHtcclxuICAgICAgICAgIGNvbXBpbGVkRXJyb3JzW2Vycm9yUGF0aF0gPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29tcGlsZWRFcnJvcnNbZXJyb3JQYXRoXS5wdXNoKGVycm9yLm1lc3NhZ2UpO1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGNvbXBpbGVkRXJyb3JzO1xyXG4gICAgfTtcclxuICAgIC8vVE9ETzpzdG9yZSBhdmpFcnJvcnMgcGVyIGFqdkluc3RhbmNlIGluIHJlZ2lzdHJ5XHJcbiAgICB0aGlzLmFqdkVycm9ycyA9IHRoaXMuZ2V0QWp2VmFsaWRhdG9yKGFqdkluc3RhbmNlTmFtZSkuZXJyb3JzO1xyXG4gICAgdGhpcy52YWxpZGF0aW9uRXJyb3JzID0gY29tcGlsZUVycm9ycyh0aGlzLmFqdkVycm9ycyk7XHJcbiAgICBpZiAodXBkYXRlU3Vic2NyaXB0aW9ucykge1xyXG4gICAgICB0aGlzLmRhdGFDaGFuZ2VzLm5leHQodGhpcy5kYXRhKTtcclxuICAgICAgdGhpcy5pc1ZhbGlkQ2hhbmdlcy5uZXh0KHRoaXMuaXNWYWxpZCk7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbkVycm9yQ2hhbmdlcy5uZXh0KHRoaXMuYWp2RXJyb3JzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGJ1aWxkRm9ybUdyb3VwVGVtcGxhdGUoZm9ybVZhbHVlczogYW55ID0gbnVsbCwgc2V0VmFsdWVzID0gdHJ1ZSkge1xyXG4gICAgdGhpcy5mb3JtR3JvdXBUZW1wbGF0ZSA9IGJ1aWxkRm9ybUdyb3VwVGVtcGxhdGUoXHJcbiAgICAgIHRoaXMsXHJcbiAgICAgIGZvcm1WYWx1ZXMsXHJcbiAgICAgIHNldFZhbHVlc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGJ1aWxkRm9ybUdyb3VwKGFqdkluc3RhbmNlTmFtZT86c3RyaW5nKSB7XHJcbiAgICB0aGlzLmZvcm1Hcm91cCA9IDxVbnR5cGVkRm9ybUdyb3VwPmJ1aWxkRm9ybUdyb3VwKHRoaXMuZm9ybUdyb3VwVGVtcGxhdGUpO1xyXG4gICAgaWYgKHRoaXMuZm9ybUdyb3VwKSB7XHJcbiAgICAgIHRoaXMuY29tcGlsZUFqdlNjaGVtYShhanZJbnN0YW5jZU5hbWUpO1xyXG4gICAgICB0aGlzLnZhbGlkYXRlRGF0YSh0aGlzLmZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpLHRydWUsYWp2SW5zdGFuY2VOYW1lKTtcclxuXHJcbiAgICAgIC8vIFNldCB1cCBvYnNlcnZhYmxlcyB0byBlbWl0IGRhdGEgYW5kIHZhbGlkYXRpb24gaW5mbyB3aGVuIGZvcm0gZGF0YSBjaGFuZ2VzXHJcbiAgICAgIGlmICh0aGlzLmZvcm1WYWx1ZVN1YnNjcmlwdGlvbikge1xyXG4gICAgICAgIHRoaXMuZm9ybVZhbHVlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5mb3JtVmFsdWVTdWJzY3JpcHRpb24gPSB0aGlzLmZvcm1Hcm91cC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKFxyXG4gICAgICAgIGZvcm1WYWx1ZSA9PiB0aGlzLnZhbGlkYXRlRGF0YSh0aGlzLmZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpLHRydWUsYWp2SW5zdGFuY2VOYW1lKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYnVpbGRMYXlvdXQod2lkZ2V0TGlicmFyeTogYW55KSB7XHJcbiAgICB0aGlzLmxheW91dCA9IGJ1aWxkTGF5b3V0KHRoaXMsIHdpZGdldExpYnJhcnkpO1xyXG4gIH1cclxuXHJcbiAgc2V0T3B0aW9ucyhuZXdPcHRpb25zOiBhbnkpIHtcclxuICAgIGlmIChpc09iamVjdChuZXdPcHRpb25zKSkge1xyXG4gICAgICBjb25zdCBhZGRPcHRpb25zID0gY2xvbmVEZWVwKG5ld09wdGlvbnMpO1xyXG4gICAgICAvLyBCYWNrd2FyZCBjb21wYXRpYmlsaXR5IGZvciAnZGVmYXVsdE9wdGlvbnMnIChyZW5hbWVkICdkZWZhdWx0V2lkZ2V0T3B0aW9ucycpXHJcbiAgICAgIGlmIChpc09iamVjdChhZGRPcHRpb25zLmRlZmF1bHRPcHRpb25zKSkge1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24oXHJcbiAgICAgICAgICB0aGlzLmZvcm1PcHRpb25zLmRlZmF1bHRXaWRnZXRPcHRpb25zLFxyXG4gICAgICAgICAgYWRkT3B0aW9ucy5kZWZhdWx0T3B0aW9uc1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgZGVsZXRlIGFkZE9wdGlvbnMuZGVmYXVsdE9wdGlvbnM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGlzT2JqZWN0KGFkZE9wdGlvbnMuZGVmYXVsdFdpZGdldE9wdGlvbnMpKSB7XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihcclxuICAgICAgICAgIHRoaXMuZm9ybU9wdGlvbnMuZGVmYXVsdFdpZGdldE9wdGlvbnMsXHJcbiAgICAgICAgICBhZGRPcHRpb25zLmRlZmF1bHRXaWRnZXRPcHRpb25zXHJcbiAgICAgICAgKTtcclxuICAgICAgICBkZWxldGUgYWRkT3B0aW9ucy5kZWZhdWx0V2lkZ2V0T3B0aW9ucztcclxuICAgICAgfVxyXG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMuZm9ybU9wdGlvbnMsIGFkZE9wdGlvbnMpO1xyXG5cclxuICAgICAgLy8gY29udmVydCBkaXNhYmxlRXJyb3JTdGF0ZSAvIGRpc2FibGVTdWNjZXNzU3RhdGUgdG8gZW5hYmxlLi4uXHJcbiAgICAgIGNvbnN0IGdsb2JhbERlZmF1bHRzID0gdGhpcy5mb3JtT3B0aW9ucy5kZWZhdWx0V2lkZ2V0T3B0aW9ucztcclxuICAgICAgWydFcnJvclN0YXRlJywgJ1N1Y2Nlc3NTdGF0ZSddXHJcbiAgICAgICAgLmZpbHRlcihzdWZmaXggPT4gaGFzT3duKGdsb2JhbERlZmF1bHRzLCAnZGlzYWJsZScgKyBzdWZmaXgpKVxyXG4gICAgICAgIC5mb3JFYWNoKHN1ZmZpeCA9PiB7XHJcbiAgICAgICAgICBnbG9iYWxEZWZhdWx0c1snZW5hYmxlJyArIHN1ZmZpeF0gPSAhZ2xvYmFsRGVmYXVsdHNbXHJcbiAgICAgICAgICAgICdkaXNhYmxlJyArIHN1ZmZpeFxyXG4gICAgICAgICAgXTtcclxuICAgICAgICAgIGRlbGV0ZSBnbG9iYWxEZWZhdWx0c1snZGlzYWJsZScgKyBzdWZmaXhdO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29tcGlsZUFqdlNjaGVtYShhanZJbnN0YW5jZU5hbWU9J2RlZmF1bHQnKSB7XHJcbiAgICBsZXQgYWp2VmFsaWRhdG9yPXRoaXMuZ2V0QWp2VmFsaWRhdG9yKGFqdkluc3RhbmNlTmFtZSk7XHJcbiAgICBpZiAoIWFqdlZhbGlkYXRvcikge1xyXG4gICAgICAvLyBpZiAndWk6b3JkZXInIGV4aXN0cyBpbiBwcm9wZXJ0aWVzLCBtb3ZlIGl0IHRvIHJvb3QgYmVmb3JlIGNvbXBpbGluZyB3aXRoIGFqdlxyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnNjaGVtYS5wcm9wZXJ0aWVzWyd1aTpvcmRlciddKSkge1xyXG4gICAgICAgIHRoaXMuc2NoZW1hWyd1aTpvcmRlciddID0gdGhpcy5zY2hlbWEucHJvcGVydGllc1sndWk6b3JkZXInXTtcclxuICAgICAgICBkZWxldGUgdGhpcy5zY2hlbWEucHJvcGVydGllc1sndWk6b3JkZXInXTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmdldEFqdkluc3RhbmNlKGFqdkluc3RhbmNlTmFtZSkucmVtb3ZlU2NoZW1hKHRoaXMuc2NoZW1hKTtcclxuICAgICAgXHJcbiAgICAgIGFqdlZhbGlkYXRvciA9IHRoaXMuZ2V0QWp2SW5zdGFuY2UoYWp2SW5zdGFuY2VOYW1lKS5jb21waWxlKHRoaXMuc2NoZW1hKTtcclxuICAgICAgdGhpcy5hanZSZWdpc3RyeVthanZJbnN0YW5jZU5hbWVdLmFqdlZhbGlkYXRvcj1hanZWYWxpZGF0b3I7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYnVpbGRTY2hlbWFGcm9tRGF0YShkYXRhPzogYW55LCByZXF1aXJlQWxsRmllbGRzID0gZmFsc2UpOiBhbnkge1xyXG4gICAgaWYgKGRhdGEpIHtcclxuICAgICAgcmV0dXJuIGJ1aWxkU2NoZW1hRnJvbURhdGEoZGF0YSwgcmVxdWlyZUFsbEZpZWxkcyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNjaGVtYSA9IGJ1aWxkU2NoZW1hRnJvbURhdGEodGhpcy5mb3JtVmFsdWVzLCByZXF1aXJlQWxsRmllbGRzKTtcclxuICB9XHJcblxyXG4gIGJ1aWxkU2NoZW1hRnJvbUxheW91dChsYXlvdXQ/OiBhbnkpOiBhbnkge1xyXG4gICAgaWYgKGxheW91dCkge1xyXG4gICAgICByZXR1cm4gYnVpbGRTY2hlbWFGcm9tTGF5b3V0KGxheW91dCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNjaGVtYSA9IGJ1aWxkU2NoZW1hRnJvbUxheW91dCh0aGlzLmxheW91dCk7XHJcbiAgfVxyXG5cclxuICBzZXRUcGxkYXRhKG5ld1RwbGRhdGE6IGFueSA9IHt9KTogdm9pZCB7XHJcbiAgICB0aGlzLnRwbGRhdGEgPSBuZXdUcGxkYXRhO1xyXG4gIH1cclxuXHJcbiAgcGFyc2VUZXh0KFxyXG4gICAgdGV4dCA9ICcnLFxyXG4gICAgdmFsdWU6IGFueSA9IHt9LFxyXG4gICAgdmFsdWVzOiBhbnkgPSB7fSxcclxuICAgIGtleTogbnVtYmVyIHwgc3RyaW5nID0gbnVsbFxyXG4gICk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXRleHQgfHwgIS97ey4rP319Ly50ZXN0KHRleHQpKSB7XHJcbiAgICAgIHJldHVybiB0ZXh0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRleHQucmVwbGFjZSgve3soLis/KX19L2csICguLi5hKSA9PlxyXG4gICAgICB0aGlzLnBhcnNlRXhwcmVzc2lvbihhWzFdLCB2YWx1ZSwgdmFsdWVzLCBrZXksIHRoaXMudHBsZGF0YSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwYXJzZUV4cHJlc3Npb24oXHJcbiAgICBleHByZXNzaW9uID0gJycsXHJcbiAgICB2YWx1ZTogYW55ID0ge30sXHJcbiAgICB2YWx1ZXM6IGFueSA9IHt9LFxyXG4gICAga2V5OiBudW1iZXIgfCBzdHJpbmcgPSBudWxsLFxyXG4gICAgdHBsZGF0YTogYW55ID0gbnVsbFxyXG4gICkge1xyXG4gICAgaWYgKHR5cGVvZiBleHByZXNzaW9uICE9PSAnc3RyaW5nJykge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgICBjb25zdCBpbmRleCA9IHR5cGVvZiBrZXkgPT09ICdudW1iZXInID8ga2V5ICsgMSArICcnIDoga2V5IHx8ICcnO1xyXG4gICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24udHJpbSgpO1xyXG4gICAgaWYgKFxyXG4gICAgICAoZXhwcmVzc2lvblswXSA9PT0gXCInXCIgfHwgZXhwcmVzc2lvblswXSA9PT0gJ1wiJykgJiZcclxuICAgICAgZXhwcmVzc2lvblswXSA9PT0gZXhwcmVzc2lvbltleHByZXNzaW9uLmxlbmd0aCAtIDFdICYmXHJcbiAgICAgIGV4cHJlc3Npb24uc2xpY2UoMSwgZXhwcmVzc2lvbi5sZW5ndGggLSAxKS5pbmRleE9mKGV4cHJlc3Npb25bMF0pID09PSAtMVxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiBleHByZXNzaW9uLnNsaWNlKDEsIGV4cHJlc3Npb24ubGVuZ3RoIC0gMSk7XHJcbiAgICB9XHJcbiAgICBpZiAoZXhwcmVzc2lvbiA9PT0gJ2lkeCcgfHwgZXhwcmVzc2lvbiA9PT0gJyRpbmRleCcpIHtcclxuICAgICAgcmV0dXJuIGluZGV4O1xyXG4gICAgfVxyXG4gICAgaWYgKGV4cHJlc3Npb24gPT09ICd2YWx1ZScgJiYgIWhhc093bih2YWx1ZXMsICd2YWx1ZScpKSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgWydcIicsIFwiJ1wiLCAnICcsICd8fCcsICcmJicsICcrJ10uZXZlcnkoXHJcbiAgICAgICAgZGVsaW0gPT4gZXhwcmVzc2lvbi5pbmRleE9mKGRlbGltKSA9PT0gLTFcclxuICAgICAgKVxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnN0IHBvaW50ZXIgPSBKc29uUG9pbnRlci5wYXJzZU9iamVjdFBhdGgoZXhwcmVzc2lvbik7XHJcbiAgICAgIHJldHVybiBwb2ludGVyWzBdID09PSAndmFsdWUnICYmIEpzb25Qb2ludGVyLmhhcyh2YWx1ZSwgcG9pbnRlci5zbGljZSgxKSlcclxuICAgICAgICA/IEpzb25Qb2ludGVyLmdldCh2YWx1ZSwgcG9pbnRlci5zbGljZSgxKSlcclxuICAgICAgICA6IHBvaW50ZXJbMF0gPT09ICd2YWx1ZXMnICYmIEpzb25Qb2ludGVyLmhhcyh2YWx1ZXMsIHBvaW50ZXIuc2xpY2UoMSkpXHJcbiAgICAgICAgICA/IEpzb25Qb2ludGVyLmdldCh2YWx1ZXMsIHBvaW50ZXIuc2xpY2UoMSkpXHJcbiAgICAgICAgICA6IHBvaW50ZXJbMF0gPT09ICd0cGxkYXRhJyAmJiBKc29uUG9pbnRlci5oYXModHBsZGF0YSwgcG9pbnRlci5zbGljZSgxKSlcclxuICAgICAgICAgICAgPyBKc29uUG9pbnRlci5nZXQodHBsZGF0YSwgcG9pbnRlci5zbGljZSgxKSlcclxuICAgICAgICAgICAgOiBKc29uUG9pbnRlci5oYXModmFsdWVzLCBwb2ludGVyKVxyXG4gICAgICAgICAgICAgID8gSnNvblBvaW50ZXIuZ2V0KHZhbHVlcywgcG9pbnRlcilcclxuICAgICAgICAgICAgICA6ICcnO1xyXG4gICAgfVxyXG4gICAgaWYgKGV4cHJlc3Npb24uaW5kZXhPZignW2lkeF0nKSA+IC0xKSB7XHJcbiAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uLnJlcGxhY2UoL1xcW2lkeFxcXS9nLCA8c3RyaW5nPmluZGV4KTtcclxuICAgIH1cclxuICAgIGlmIChleHByZXNzaW9uLmluZGV4T2YoJ1skaW5kZXhdJykgPiAtMSkge1xyXG4gICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbi5yZXBsYWNlKC9cXFskaW5kZXhcXF0vZywgPHN0cmluZz5pbmRleCk7XHJcbiAgICB9XHJcbiAgICAvLyBUT0RPOiBJbXByb3ZlIGV4cHJlc3Npb24gZXZhbHVhdGlvbiBieSBwYXJzaW5nIHF1b3RlZCBzdHJpbmdzIGZpcnN0XHJcbiAgICAvLyBsZXQgZXhwcmVzc2lvbkFycmF5ID0gZXhwcmVzc2lvbi5tYXRjaCgvKFteXCInXSt8XCJbXlwiXStcInwnW14nXSsnKS9nKTtcclxuICAgIGlmIChleHByZXNzaW9uLmluZGV4T2YoJ3x8JykgPiAtMSkge1xyXG4gICAgICByZXR1cm4gZXhwcmVzc2lvblxyXG4gICAgICAgIC5zcGxpdCgnfHwnKVxyXG4gICAgICAgIC5yZWR1Y2UoXHJcbiAgICAgICAgICAoYWxsLCB0ZXJtKSA9PlxyXG4gICAgICAgICAgICBhbGwgfHwgdGhpcy5wYXJzZUV4cHJlc3Npb24odGVybSwgdmFsdWUsIHZhbHVlcywga2V5LCB0cGxkYXRhKSxcclxuICAgICAgICAgICcnXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmIChleHByZXNzaW9uLmluZGV4T2YoJyYmJykgPiAtMSkge1xyXG4gICAgICByZXR1cm4gZXhwcmVzc2lvblxyXG4gICAgICAgIC5zcGxpdCgnJiYnKVxyXG4gICAgICAgIC5yZWR1Y2UoXHJcbiAgICAgICAgICAoYWxsLCB0ZXJtKSA9PlxyXG4gICAgICAgICAgICBhbGwgJiYgdGhpcy5wYXJzZUV4cHJlc3Npb24odGVybSwgdmFsdWUsIHZhbHVlcywga2V5LCB0cGxkYXRhKSxcclxuICAgICAgICAgICcgJ1xyXG4gICAgICAgIClcclxuICAgICAgICAudHJpbSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKGV4cHJlc3Npb24uaW5kZXhPZignKycpID4gLTEpIHtcclxuICAgICAgcmV0dXJuIGV4cHJlc3Npb25cclxuICAgICAgICAuc3BsaXQoJysnKVxyXG4gICAgICAgIC5tYXAodGVybSA9PiB0aGlzLnBhcnNlRXhwcmVzc2lvbih0ZXJtLCB2YWx1ZSwgdmFsdWVzLCBrZXksIHRwbGRhdGEpKVxyXG4gICAgICAgIC5qb2luKCcnKTtcclxuICAgIH1cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIC8vVE9ETyBmaXgtIGlmIHRlbXBsYXRlIGhhcyB2YWx1ZSBpbiB0aXRsZVxyXG4gIC8vIFwiaXRlbXNcIjoge1xyXG4gIC8vICAgXCJ0aXRsZVwiOiBcInt7ICdJbnB1dCAnICsgJGluZGV4K3ZhbHVlIH19XCIsXHJcbiAgLy8gICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcclxuICAvLyB9XHJcbiAgLy8gcmVzdWx0IG9uIGJ1dHRvbiB3aWxsIGJlIFwiQWRkIElucHV0IFtvYmplY3QgT2JqZWN0XVwiXHJcbiAgc2V0QXJyYXlJdGVtVGl0bGUoXHJcbiAgICBwYXJlbnRDdHg6IGFueSA9IHt9LFxyXG4gICAgY2hpbGROb2RlOiBhbnkgPSBudWxsLFxyXG4gICAgaW5kZXg6IG51bWJlciA9IG51bGxcclxuICApOiBzdHJpbmcge1xyXG4gICAgLy9mb3IgbGVnYWN5IGNvbXBhdGliaWxpdHksIHBhcmVudEN0eC5sYXlvdXROb2RlIGNvdWxkIGVpdGhlciBiZSBhIHZhbHVlXHJcbiAgICAvL29yIGhhdmUgYmVlbiBjb252ZXJ0ZWQgdG8gdXNlIFNpZ25hbHNcclxuICAgIGxldCBwYXJlbnRDdHhBc1NpZ25hbHM6YW55PXtcclxuICAgICAgbGF5b3V0Tm9kZTooKT0+e1xyXG4gICAgICAgIGlmKGlzT2JqZWN0KHBhcmVudEN0eC5sYXlvdXROb2RlKSl7XHJcbiAgICAgICAgICByZXR1cm4gcGFyZW50Q3R4LmxheW91dE5vZGVcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHBhcmVudEN0eC5sYXlvdXROb2RlKCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGRhdGFJbmRleDooKT0+e1xyXG4gICAgICAgIGlmKGlzT2JqZWN0KHBhcmVudEN0eC5kYXRhSW5kZXgpKXtcclxuICAgICAgICAgIHJldHVybiBwYXJlbnRDdHguZGF0YUluZGV4XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwYXJlbnRDdHguZGF0YUluZGV4KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IHBhcmVudE5vZGUgPSBwYXJlbnRDdHhBc1NpZ25hbHMubGF5b3V0Tm9kZSgpO1xyXG4gICAgY29uc3QgcGFyZW50VmFsdWVzOiBhbnkgPSB0aGlzLmdldEZvcm1Db250cm9sVmFsdWUocGFyZW50Q3R4QXNTaWduYWxzKTtcclxuICAgIGNvbnN0IGlzQXJyYXlJdGVtID1cclxuICAgICAgKHBhcmVudE5vZGUudHlwZSB8fCAnJykuc2xpY2UoLTUpID09PSAnYXJyYXknICYmIGlzQXJyYXkocGFyZW50VmFsdWVzKTtcclxuICAgIGNvbnN0IHRleHQgPSBKc29uUG9pbnRlci5nZXRGaXJzdChcclxuICAgICAgaXNBcnJheUl0ZW0gJiYgY2hpbGROb2RlLnR5cGUgIT09ICckcmVmJ1xyXG4gICAgICAgID8gW1xyXG4gICAgICAgICAgW2NoaWxkTm9kZSwgJy9vcHRpb25zL2xlZ2VuZCddLFxyXG4gICAgICAgICAgW2NoaWxkTm9kZSwgJy9vcHRpb25zL3RpdGxlJ10sXHJcbiAgICAgICAgICBbcGFyZW50Tm9kZSwgJy9vcHRpb25zL3RpdGxlJ10sXHJcbiAgICAgICAgICBbcGFyZW50Tm9kZSwgJy9vcHRpb25zL2xlZ2VuZCddXHJcbiAgICAgICAgXVxyXG4gICAgICAgIDogW1xyXG4gICAgICAgICAgW2NoaWxkTm9kZSwgJy9vcHRpb25zL3RpdGxlJ10sXHJcbiAgICAgICAgICBbY2hpbGROb2RlLCAnL29wdGlvbnMvbGVnZW5kJ10sXHJcbiAgICAgICAgICBbcGFyZW50Tm9kZSwgJy9vcHRpb25zL3RpdGxlJ10sXHJcbiAgICAgICAgICBbcGFyZW50Tm9kZSwgJy9vcHRpb25zL2xlZ2VuZCddXHJcbiAgICAgICAgXVxyXG4gICAgKTtcclxuICAgIGlmICghdGV4dCkge1xyXG4gICAgICByZXR1cm4gdGV4dDtcclxuICAgIH1cclxuICAgIGNvbnN0IGNoaWxkVmFsdWUgPVxyXG4gICAgICBpc0FycmF5KHBhcmVudFZhbHVlcykgJiYgaW5kZXggPCBwYXJlbnRWYWx1ZXMubGVuZ3RoXHJcbiAgICAgICAgPyBwYXJlbnRWYWx1ZXNbaW5kZXhdXHJcbiAgICAgICAgOiBwYXJlbnRWYWx1ZXM7XHJcbiAgICByZXR1cm4gdGhpcy5wYXJzZVRleHQodGV4dCwgY2hpbGRWYWx1ZSwgcGFyZW50VmFsdWVzLCBpbmRleCk7XHJcbiAgfVxyXG5cclxuICBzZXRJdGVtVGl0bGUoY3R4OiBXaWRnZXRDb250ZXh0KSB7XHJcbiAgICByZXR1cm4gIWN0eC5vcHRpb25zLnRpdGxlICYmIC9eKFxcZCt8LSkkLy50ZXN0KGN0eC5sYXlvdXROb2RlKCkubmFtZSlcclxuICAgICAgPyBudWxsXHJcbiAgICAgIDogdGhpcy5wYXJzZVRleHQoXHJcbiAgICAgICAgY3R4Lm9wdGlvbnMudGl0bGUgfHwgdG9UaXRsZUNhc2UoY3R4LmxheW91dE5vZGUoKS5uYW1lKSxcclxuICAgICAgICB0aGlzLmdldEZvcm1Db250cm9sVmFsdWUoY3R4KSxcclxuICAgICAgICAodGhpcy5nZXRGb3JtQ29udHJvbEdyb3VwKGN0eCkgfHwgPGFueT57fSkudmFsdWUsXHJcbiAgICAgICAgY3R4LmRhdGFJbmRleCgpW2N0eC5kYXRhSW5kZXgoKS5sZW5ndGggLSAxXVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgZXZhbHVhdGVDb25kaXRpb24obGF5b3V0Tm9kZTogYW55LCBkYXRhSW5kZXg6IG51bWJlcltdKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBhcnJheUluZGV4ID0gZGF0YUluZGV4ICYmIGRhdGFJbmRleFtkYXRhSW5kZXgubGVuZ3RoIC0gMV07XHJcbiAgICBsZXQgcmVzdWx0ID0gdHJ1ZTtcclxuICAgIGlmIChoYXNWYWx1ZSgobGF5b3V0Tm9kZS5vcHRpb25zIHx8IHt9KS5jb25kaXRpb24pKSB7XHJcbiAgICAgIGlmICh0eXBlb2YgbGF5b3V0Tm9kZS5vcHRpb25zLmNvbmRpdGlvbiA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICBsZXQgcG9pbnRlciA9IGxheW91dE5vZGUub3B0aW9ucy5jb25kaXRpb247XHJcbiAgICAgICAgaWYgKGhhc1ZhbHVlKGFycmF5SW5kZXgpKSB7XHJcbiAgICAgICAgICBwb2ludGVyID0gcG9pbnRlci5yZXBsYWNlKCdbYXJyYXlJbmRleF0nLCBgWyR7YXJyYXlJbmRleH1dYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBvaW50ZXIgPSBKc29uUG9pbnRlci5wYXJzZU9iamVjdFBhdGgocG9pbnRlcik7XHJcbiAgICAgICAgcmVzdWx0ID0gISFKc29uUG9pbnRlci5nZXQodGhpcy5kYXRhLCBwb2ludGVyKTtcclxuICAgICAgICBpZiAoIXJlc3VsdCAmJiBwb2ludGVyWzBdID09PSAnbW9kZWwnKSB7XHJcbiAgICAgICAgICByZXN1bHQgPSAhIUpzb25Qb2ludGVyLmdldCh7IG1vZGVsOiB0aGlzLmRhdGEgfSwgcG9pbnRlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBsYXlvdXROb2RlLm9wdGlvbnMuY29uZGl0aW9uID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gbGF5b3V0Tm9kZS5vcHRpb25zLmNvbmRpdGlvbih0aGlzLmRhdGEpO1xyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgIHR5cGVvZiBsYXlvdXROb2RlLm9wdGlvbnMuY29uZGl0aW9uLmZ1bmN0aW9uQm9keSA9PT0gJ3N0cmluZydcclxuICAgICAgKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGNvbnN0IGR5bkZuID0gbmV3IEZ1bmN0aW9uKFxyXG4gICAgICAgICAgICAnbW9kZWwnLFxyXG4gICAgICAgICAgICAnYXJyYXlJbmRpY2VzJyxcclxuICAgICAgICAgICAgbGF5b3V0Tm9kZS5vcHRpb25zLmNvbmRpdGlvbi5mdW5jdGlvbkJvZHlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICByZXN1bHQgPSBkeW5Gbih0aGlzLmRhdGEsIGRhdGFJbmRleCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgcmVzdWx0ID0gdHJ1ZTtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgICAgICdjb25kaXRpb24gZnVuY3Rpb25Cb2R5IGVycm9yZWQgb3V0IG9uIGV2YWx1YXRpb246ICcgK1xyXG4gICAgICAgICAgICBsYXlvdXROb2RlLm9wdGlvbnMuY29uZGl0aW9uLmZ1bmN0aW9uQm9keVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplQ29udHJvbChjdHg6IFdpZGdldENvbnRleHQsIGJpbmQgPSB0cnVlKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIWlzT2JqZWN0KGN0eCkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbGF5b3V0Tm9kZT1jdHgubGF5b3V0Tm9kZSgpO1xyXG4gICAgaWYgKGlzRW1wdHkoY3R4Lm9wdGlvbnMpKSB7XHJcbiAgICAgIGN0eC5vcHRpb25zID0gIWlzRW1wdHkoKGxheW91dE5vZGUgfHwge30pLm9wdGlvbnMpXHJcbiAgICAgICAgPyBsYXlvdXROb2RlLm9wdGlvbnNcclxuICAgICAgICA6IGNsb25lRGVlcCh0aGlzLmZvcm1PcHRpb25zKTtcclxuICAgIH1cclxuICAgIGN0eC5mb3JtQ29udHJvbCA9IHRoaXMuZ2V0Rm9ybUNvbnRyb2woY3R4KTtcclxuICAgIC8vaW50cm9kdWNlZCB0byBjaGVjayBpZiB0aGUgbm9kZSAgaXMgcGFydCBvZiBJVEUgY29uZGl0aW9uYWxcclxuICAgIC8vdGhlbiBjaGFuZ2Ugb3IgYWRkIHRoZSBjb250cm9sXHJcbiAgICBpZihsYXlvdXROb2RlPy5zY2hlbWFQb2ludGVyICYmIGxheW91dE5vZGUuaXNJVEVJdGVtIHx8IFxyXG4gICAgICAobGF5b3V0Tm9kZT8uc2NoZW1hUG9pbnRlciAmJiBsYXlvdXROb2RlPy5vbmVPZlBvaW50ZXIpIHx8XHJcbiAgICAgIGxheW91dE5vZGU/LnNjaGVtYVBvaW50ZXIgJiYgbGF5b3V0Tm9kZS5hbnlPZlBvaW50ZXIgICl7XHJcbiAgICAgIC8vYmVmb3JlIGNoYW5naW5nIGNvbnRyb2wsIG5lZWQgdG8gc2V0IHRoZSBuZXcgZGF0YSB0eXBlIGZvciBkYXRhIGZvcm1hdHRpbmdcclxuICAgICAgY29uc3Qgc2NoZW1hVHlwZT10aGlzLmRhdGFNYXAuZ2V0KGxheW91dE5vZGU/LmRhdGFQb2ludGVyKS5nZXQoXCJzY2hlbWFUeXBlXCIpO1xyXG4gICAgICBpZihzY2hlbWFUeXBlIT1sYXlvdXROb2RlLmRhdGFUeXBlKXtcclxuICAgICAgICB0aGlzLmRhdGFNYXAuZ2V0KGxheW91dE5vZGU/LmRhdGFQb2ludGVyKS5zZXQoXCJzY2hlbWFUeXBlXCIsbGF5b3V0Tm9kZS5kYXRhVHlwZSlcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNldEZvcm1Db250cm9sKGN0eCxjdHguZm9ybUNvbnRyb2wpO1xyXG4gICAgfVxyXG4gICAgY3R4LmJvdW5kQ29udHJvbCA9IGJpbmQgJiYgISFjdHguZm9ybUNvbnRyb2w7XHJcbiAgICBpZiAoY3R4LmZvcm1Db250cm9sKSB7XHJcbiAgICAgIGN0eC5jb250cm9sTmFtZSA9IHRoaXMuZ2V0Rm9ybUNvbnRyb2xOYW1lKGN0eCk7XHJcbiAgICAgIGN0eC5jb250cm9sVmFsdWUgPSBjdHguZm9ybUNvbnRyb2wudmFsdWU7XHJcbiAgICAgIGN0eC5jb250cm9sRGlzYWJsZWQgPSBjdHguZm9ybUNvbnRyb2wuZGlzYWJsZWQ7XHJcbiAgICAgIGN0eC5vcHRpb25zLmVycm9yTWVzc2FnZSA9XHJcbiAgICAgICAgY3R4LmZvcm1Db250cm9sLnN0YXR1cyA9PT0gJ1ZBTElEJ1xyXG4gICAgICAgICAgPyBudWxsXHJcbiAgICAgICAgICA6IHRoaXMuZm9ybWF0RXJyb3JzKFxyXG4gICAgICAgICAgICBjdHguZm9ybUNvbnRyb2wuZXJyb3JzLFxyXG4gICAgICAgICAgICBjdHgub3B0aW9ucy52YWxpZGF0aW9uTWVzc2FnZXNcclxuICAgICAgICAgICk7XHJcbiAgICAgIGN0eC5vcHRpb25zLnNob3dFcnJvcnMgPVxyXG4gICAgICAgIHRoaXMuZm9ybU9wdGlvbnMudmFsaWRhdGVPblJlbmRlciA9PT0gdHJ1ZSB8fFxyXG4gICAgICAgICh0aGlzLmZvcm1PcHRpb25zLnZhbGlkYXRlT25SZW5kZXIgPT09ICdhdXRvJyAmJlxyXG4gICAgICAgICAgaGFzVmFsdWUoY3R4LmNvbnRyb2xWYWx1ZSkpO1xyXG4gICAgICB0aGlzLmZjU3RhdHVzQ2hhbmdlc1N1YnM9Y3R4LmZvcm1Db250cm9sLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKFxyXG4gICAgICAgIHN0YXR1cyA9PlxyXG4gICAgICAgICAgKGN0eC5vcHRpb25zLmVycm9yTWVzc2FnZSA9XHJcbiAgICAgICAgICAgIHN0YXR1cyA9PT0gJ1ZBTElEJ1xyXG4gICAgICAgICAgICAgID8gbnVsbFxyXG4gICAgICAgICAgICAgIDogdGhpcy5mb3JtYXRFcnJvcnMoXHJcbiAgICAgICAgICAgICAgICBjdHguZm9ybUNvbnRyb2wuZXJyb3JzLFxyXG4gICAgICAgICAgICAgICAgY3R4Lm9wdGlvbnMudmFsaWRhdGlvbk1lc3NhZ2VzXHJcbiAgICAgICAgICAgICAgKSlcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5mY1ZhbHVlQ2hhbmdlc1N1YnM9Y3R4LmZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodmFsdWUgPT4ge1xyXG4gICAgICAgIGlmICghX2lzRXF1YWwoY3R4LmNvbnRyb2xWYWx1ZSwgdmFsdWUpKSB7IFxyXG4gICAgICAgICAgY3R4LmNvbnRyb2xWYWx1ZSA9IHZhbHVlIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY3R4LmNvbnRyb2xOYW1lID0gbGF5b3V0Tm9kZS5uYW1lO1xyXG4gICAgICBjdHguY29udHJvbFZhbHVlID0gbGF5b3V0Tm9kZS52YWx1ZSB8fCBudWxsO1xyXG4gICAgICBjb25zdCBkYXRhUG9pbnRlciA9IHRoaXMuZ2V0RGF0YVBvaW50ZXIoY3R4KTtcclxuICAgICAgaWYgKGJpbmQgJiYgZGF0YVBvaW50ZXIpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICAgYHdhcm5pbmc6IGNvbnRyb2wgXCIke2RhdGFQb2ludGVyfVwiIGlzIG5vdCBib3VuZCB0byB0aGUgQW5ndWxhciBGb3JtR3JvdXAuYFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vaWYgdGhpcyBpcyBhIElURSBjb25kaXRpb25hbCBmaWVsZCwgdGhlIHZhbHVlIHdvdWxkIG5vdCBoYXZlIGJlZW5cclxuICAgIC8vc2V0LCBhcyB0aGUgY29udHJvbCB3b3VsZCBvbmx5IGJlIGluaXRpYWxpemVkIHdoZW4gdGhlIGNvbmRpdGlvbiBpcyB0cnVlIFxyXG4gICAgLy9UT0RPLXJldmlldyBuZWVkIHRvIGRlY2lkZSB3aGljaCBvZiB0aGUgZGF0YSBzZXRzIGJldHdlZW4gZGF0YSxmb3JtVmFsdWVzIGFuZCBkZWZhdWx0IFxyXG4gICAgLy90byB1c2UgZm9yIHRoZSB2YWx1ZVxyXG4gICAgLy9UT0RPIHRyeSBtYXliZSBtYXJraW5nIGRlc2NlbmRhbnRzIGluIGFwcGx5SVRFQ29uZGl0aW9uc1xyXG4gICAgbGV0IGlzSVRFRGVzY2VuZGFudD1sYXlvdXROb2RlPy5zY2hlbWFQb2ludGVyPy5zcGxpdChcIi9cIilcclxuICAgIC5zb21lKGVsdD0+W1widGhlblwiLFwiZWxzZVwiXS5pbmNsdWRlcyhlbHQpKTtcclxuICAgIGlmKGN0eC5vcHRpb25zPy5jb25kaXRpb24gfHwgbGF5b3V0Tm9kZT8ub25lT2ZQb2ludGVyIHx8IGxheW91dE5vZGU/LmFueU9mUG9pbnRlciB8fCBpc0lURURlc2NlbmRhbnQpe1xyXG4gICAgICBjb25zdCBkYXRhUG9pbnRlciA9IHRoaXMuZ2V0RGF0YVBvaW50ZXIoY3R4KTtcclxuICAgICAgY29uc3QgY29udHJvbFZhbHVlPWN0eC5mb3JtQ29udHJvbD8udmFsdWU7XHJcbiAgICAgIGNvbnN0IGRhdGFWYWx1ZT1Kc29uUG9pbnRlci5oYXModGhpcy5kYXRhLGRhdGFQb2ludGVyKT9cclxuICAgICAgSnNvblBvaW50ZXIuZ2V0KHRoaXMuZGF0YSxkYXRhUG9pbnRlcik6dW5kZWZpbmVkO1xyXG4gICAgICBjb25zdCBmb3JtVmFsdWU9SnNvblBvaW50ZXIuaGFzKHRoaXMuZm9ybVZhbHVlcyxkYXRhUG9pbnRlcik/XHJcbiAgICAgIEpzb25Qb2ludGVyLmdldCh0aGlzLmZvcm1WYWx1ZXMsZGF0YVBvaW50ZXIpOnVuZGVmaW5lZDtcclxuICAgICAgY29uc3Qgc2NoZW1hRGVmYXVsdD1jdHgub3B0aW9ucz8uZGVmYXVsdDtcclxuICAgICAgLy9pZiBpbml0aWFsIGZvcm1WYWx1ZXMgd2FzIHN1cHBsaWVkIGFuZCBjb250cm9sVmFsdWUgbWF0Y2hlcyBmb3JtVmFsdWUgdGhlbiBsaWtlbHlcclxuICAgICAgLy9jb250cm9sIHdhcyBpbml0aWFsbHkgY3JlYXRlZCB3aXRoIHRoZSBmb3JtVmFsdWUgdGhlbiBzZXQgdmFsdWUgdG8gZGF0YSB2YWx1ZVxyXG4gICAgICBcclxuICAgICAgLy9pZiBubyBmb3JtVmFsdWVzIHdhcyBzdXBwbGllZCBhbmQgY29udHJvbFZhbHVlIG1hdGNoZXMgc2NoZW1hRGVmYXVsdCB0aGVuIGxpa2VseVxyXG4gICAgICAvL2NvbnRyb2wgd2FzIGluaXRpYWxseSBjcmVhdGVkIHdpdGggdGhlIGRlZmF1bHQgdGhlbiBzZXQgdmFsdWUgdG8gZGF0YSB2YWx1ZVxyXG4gICAgICBjb25zdCB2YWx1ZT10aGlzLmZvcm1WYWx1ZXMgJiYgaXNFcXVhbChmb3JtVmFsdWUsY29udHJvbFZhbHVlKT9kYXRhVmFsdWVcclxuICAgICAgOiF0aGlzLmZvcm1WYWx1ZXMgJiYgaXNFcXVhbChzY2hlbWFEZWZhdWx0LGNvbnRyb2xWYWx1ZSk/ZGF0YVZhbHVlXHJcbiAgICAgIDpzY2hlbWFEZWZhdWx0O1xyXG4gICAgICBjdHguZm9ybUNvbnRyb2w/LnBhdGNoVmFsdWUodmFsdWUpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3R4LmJvdW5kQ29udHJvbDtcclxuICB9XHJcblxyXG4gIGZvcm1hdEVycm9ycyhlcnJvcnM6IGFueSwgdmFsaWRhdGlvbk1lc3NhZ2VzOiBhbnkgPSB7fSk6IHN0cmluZyB7XHJcbiAgICBpZiAoaXNFbXB0eShlcnJvcnMpKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgaWYgKCFpc09iamVjdCh2YWxpZGF0aW9uTWVzc2FnZXMpKSB7XHJcbiAgICAgIHZhbGlkYXRpb25NZXNzYWdlcyA9IHt9O1xyXG4gICAgfVxyXG4gICAgY29uc3QgYWRkU3BhY2VzID0gc3RyaW5nID0+XHJcbiAgICAgIHN0cmluZ1swXS50b1VwcGVyQ2FzZSgpICtcclxuICAgICAgKHN0cmluZy5zbGljZSgxKSB8fCAnJylcclxuICAgICAgICAucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywgJyQxICQyJylcclxuICAgICAgICAucmVwbGFjZSgvXy9nLCAnICcpO1xyXG4gICAgY29uc3QgZm9ybWF0RXJyb3IgPSBlcnJvciA9PlxyXG4gICAgICB0eXBlb2YgZXJyb3IgPT09ICdvYmplY3QnXHJcbiAgICAgICAgPyBPYmplY3Qua2V5cyhlcnJvcilcclxuICAgICAgICAgIC5tYXAoa2V5ID0+XHJcbiAgICAgICAgICAgIGVycm9yW2tleV0gPT09IHRydWVcclxuICAgICAgICAgICAgICA/IGFkZFNwYWNlcyhrZXkpXHJcbiAgICAgICAgICAgICAgOiBlcnJvcltrZXldID09PSBmYWxzZVxyXG4gICAgICAgICAgICAgICAgPyAnTm90ICcgKyBhZGRTcGFjZXMoa2V5KVxyXG4gICAgICAgICAgICAgICAgOiBhZGRTcGFjZXMoa2V5KSArICc6ICcgKyBmb3JtYXRFcnJvcihlcnJvcltrZXldKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgLmpvaW4oJywgJylcclxuICAgICAgICA6IGFkZFNwYWNlcyhlcnJvci50b1N0cmluZygpKTtcclxuICAgIGNvbnN0IG1lc3NhZ2VzID0gW107XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBPYmplY3Qua2V5cyhlcnJvcnMpXHJcbiAgICAgICAgLy8gSGlkZSAncmVxdWlyZWQnIGVycm9yLCB1bmxlc3MgaXQgaXMgdGhlIG9ubHkgb25lXHJcbiAgICAgICAgLmZpbHRlcihcclxuICAgICAgICAgIGVycm9yS2V5ID0+XHJcbiAgICAgICAgICAgIGVycm9yS2V5ICE9PSAncmVxdWlyZWQnIHx8IE9iamVjdC5rZXlzKGVycm9ycykubGVuZ3RoID09PSAxXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5tYXAoZXJyb3JLZXkgPT5cclxuICAgICAgICAgIC8vIElmIHZhbGlkYXRpb25NZXNzYWdlcyBpcyBhIHN0cmluZywgcmV0dXJuIGl0XHJcbiAgICAgICAgICB0eXBlb2YgdmFsaWRhdGlvbk1lc3NhZ2VzID09PSAnc3RyaW5nJ1xyXG4gICAgICAgICAgICA/IHZhbGlkYXRpb25NZXNzYWdlc1xyXG4gICAgICAgICAgICA6IC8vIElmIGN1c3RvbSBlcnJvciBtZXNzYWdlIGlzIGEgZnVuY3Rpb24sIHJldHVybiBmdW5jdGlvbiByZXN1bHRcclxuICAgICAgICAgICAgdHlwZW9mIHZhbGlkYXRpb25NZXNzYWdlc1tlcnJvcktleV0gPT09ICdmdW5jdGlvbidcclxuICAgICAgICAgICAgICA/IHZhbGlkYXRpb25NZXNzYWdlc1tlcnJvcktleV0oZXJyb3JzW2Vycm9yS2V5XSlcclxuICAgICAgICAgICAgICA6IC8vIElmIGN1c3RvbSBlcnJvciBtZXNzYWdlIGlzIGEgc3RyaW5nLCByZXBsYWNlIHBsYWNlaG9sZGVycyBhbmQgcmV0dXJuXHJcbiAgICAgICAgICAgICAgdHlwZW9mIHZhbGlkYXRpb25NZXNzYWdlc1tlcnJvcktleV0gPT09ICdzdHJpbmcnXHJcbiAgICAgICAgICAgICAgICA/IC8vIERvZXMgZXJyb3IgbWVzc2FnZSBoYXZlIGFueSB7e3Byb3BlcnR5fX0gcGxhY2Vob2xkZXJzP1xyXG4gICAgICAgICAgICAgICAgIS97ey4rP319Ly50ZXN0KHZhbGlkYXRpb25NZXNzYWdlc1tlcnJvcktleV0pXHJcbiAgICAgICAgICAgICAgICAgID8gdmFsaWRhdGlvbk1lc3NhZ2VzW2Vycm9yS2V5XVxyXG4gICAgICAgICAgICAgICAgICA6IC8vIFJlcGxhY2Uge3twcm9wZXJ0eX19IHBsYWNlaG9sZGVycyB3aXRoIHZhbHVlc1xyXG4gICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhlcnJvcnNbZXJyb3JLZXldKS5yZWR1Y2UoXHJcbiAgICAgICAgICAgICAgICAgICAgKGVycm9yTWVzc2FnZSwgZXJyb3JQcm9wZXJ0eSkgPT5cclxuICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZS5yZXBsYWNlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgUmVnRXhwKCd7eycgKyBlcnJvclByb3BlcnR5ICsgJ319JywgJ2cnKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzW2Vycm9yS2V5XVtlcnJvclByb3BlcnR5XVxyXG4gICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uTWVzc2FnZXNbZXJyb3JLZXldXHJcbiAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIDogLy8gSWYgbm8gY3VzdG9tIGVycm9yIG1lc3NhZ2UsIHJldHVybiBmb3JtYXR0ZWQgZXJyb3IgZGF0YSBpbnN0ZWFkXHJcbiAgICAgICAgICAgICAgICBhZGRTcGFjZXMoZXJyb3JLZXkpICsgJyBFcnJvcjogJyArIGZvcm1hdEVycm9yKGVycm9yc1tlcnJvcktleV0pXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5qb2luKCc8YnI+JylcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVWYWx1ZShjdHg6IFdpZGdldENvbnRleHQsIHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIC8vIFNldCB2YWx1ZSBvZiBjdXJyZW50IGNvbnRyb2xcclxuICAgIGN0eC5jb250cm9sVmFsdWUgPSB2YWx1ZTtcclxuICAgIGlmIChjdHguYm91bmRDb250cm9sKSB7XHJcbiAgICAgIGN0eC5mb3JtQ29udHJvbC5zZXRWYWx1ZSh2YWx1ZSk7XHJcbiAgICAgIGN0eC5mb3JtQ29udHJvbC5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgfVxyXG4gICAgY3R4LmxheW91dE5vZGUoKS52YWx1ZSA9IHZhbHVlO1xyXG5cclxuICAgIC8vIFNldCB2YWx1ZXMgb2YgYW55IHJlbGF0ZWQgY29udHJvbHMgaW4gY29weVZhbHVlVG8gYXJyYXlcclxuICAgIGlmIChpc0FycmF5KGN0eC5vcHRpb25zLmNvcHlWYWx1ZVRvKSkge1xyXG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgY3R4Lm9wdGlvbnMuY29weVZhbHVlVG8pIHtcclxuICAgICAgICBjb25zdCB0YXJnZXRDb250cm9sID0gZ2V0Q29udHJvbCh0aGlzLmZvcm1Hcm91cCwgaXRlbSk7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgaXNPYmplY3QodGFyZ2V0Q29udHJvbCkgJiZcclxuICAgICAgICAgIHR5cGVvZiB0YXJnZXRDb250cm9sLnNldFZhbHVlID09PSAnZnVuY3Rpb24nXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0YXJnZXRDb250cm9sLnNldFZhbHVlKHZhbHVlKTtcclxuICAgICAgICAgIHRhcmdldENvbnRyb2wubWFya0FzRGlydHkoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZUFycmF5Q2hlY2tib3hMaXN0KGN0eDogV2lkZ2V0Q29udGV4dCwgY2hlY2tib3hMaXN0OiBUaXRsZU1hcEl0ZW1bXSk6IHZvaWQge1xyXG4gICAgY29uc3QgZm9ybUFycmF5ID0gPFVudHlwZWRGb3JtQXJyYXk+dGhpcy5nZXRGb3JtQ29udHJvbChjdHgpO1xyXG5cclxuICAgIC8vIFJlbW92ZSBhbGwgZXhpc3RpbmcgaXRlbXNcclxuICAgIHdoaWxlIChmb3JtQXJyYXkudmFsdWUubGVuZ3RoKSB7XHJcbiAgICAgIGZvcm1BcnJheS5yZW1vdmVBdCgwKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZS1hZGQgYW4gaXRlbSBmb3IgZWFjaCBjaGVja2VkIGJveFxyXG4gICAgY29uc3QgcmVmUG9pbnRlciA9IHJlbW92ZVJlY3Vyc2l2ZVJlZmVyZW5jZXMoXHJcbiAgICAgIGN0eC5sYXlvdXROb2RlKCkuZGF0YVBvaW50ZXIgKyAnLy0nLFxyXG4gICAgICB0aGlzLmRhdGFSZWN1cnNpdmVSZWZNYXAsXHJcbiAgICAgIHRoaXMuYXJyYXlNYXBcclxuICAgICk7XHJcbiAgICBmb3IgKGNvbnN0IGNoZWNrYm94SXRlbSBvZiBjaGVja2JveExpc3QpIHtcclxuICAgICAgaWYgKGNoZWNrYm94SXRlbS5jaGVja2VkKSB7XHJcbiAgICAgICAgY29uc3QgbmV3Rm9ybUNvbnRyb2wgPSBidWlsZEZvcm1Hcm91cChcclxuICAgICAgICAgIHRoaXMudGVtcGxhdGVSZWZMaWJyYXJ5W3JlZlBvaW50ZXJdXHJcbiAgICAgICAgKTtcclxuICAgICAgICBuZXdGb3JtQ29udHJvbC5zZXRWYWx1ZShjaGVja2JveEl0ZW0udmFsdWUpO1xyXG4gICAgICAgIGZvcm1BcnJheS5wdXNoKG5ld0Zvcm1Db250cm9sKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZm9ybUFycmF5Lm1hcmtBc0RpcnR5KCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVBcnJheU11bHRpU2VsZWN0TGlzdChjdHg6IFdpZGdldENvbnRleHQsIHNlbGVjdExpc3Q6IFRpdGxlTWFwSXRlbVtdKTogdm9pZCB7XHJcbiAgICB0aGlzLnVwZGF0ZUFycmF5Q2hlY2tib3hMaXN0KGN0eCxzZWxlY3RMaXN0KTtcclxuICAgIC8qIGNvbnN0IGZvcm1BcnJheSA9IDxVbnR5cGVkRm9ybUFycmF5PnRoaXMuZ2V0Rm9ybUNvbnRyb2woY3R4KTtcclxuXHJcbiAgICAvLyBSZW1vdmUgYWxsIGV4aXN0aW5nIGl0ZW1zXHJcbiAgICB3aGlsZSAoZm9ybUFycmF5LnZhbHVlLmxlbmd0aCkge1xyXG4gICAgICBmb3JtQXJyYXkucmVtb3ZlQXQoMCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmUtYWRkIGFuIGl0ZW0gZm9yIGVhY2ggY2hlY2tlZCBib3hcclxuICAgIGNvbnN0IHJlZlBvaW50ZXIgPSByZW1vdmVSZWN1cnNpdmVSZWZlcmVuY2VzKFxyXG4gICAgICBjdHgubGF5b3V0Tm9kZSgpLmRhdGFQb2ludGVyICsgJy8tJyxcclxuICAgICAgdGhpcy5kYXRhUmVjdXJzaXZlUmVmTWFwLFxyXG4gICAgICB0aGlzLmFycmF5TWFwXHJcbiAgICApO1xyXG4gICAgZm9yIChjb25zdCBzZWxlY3RJdGVtIG9mIHNlbGVjdExpc3QpIHtcclxuICAgICAgaWYgKHNlbGVjdEl0ZW0udmFsdWUpIHtcclxuICAgICAgICBjb25zdCBuZXdGb3JtQ29udHJvbCA9IGJ1aWxkRm9ybUdyb3VwKFxyXG4gICAgICAgICAgdGhpcy50ZW1wbGF0ZVJlZkxpYnJhcnlbcmVmUG9pbnRlcl1cclxuICAgICAgICApO1xyXG4gICAgICAgIG5ld0Zvcm1Db250cm9sLnNldFZhbHVlKHNlbGVjdEl0ZW0udmFsdWUpO1xyXG4gICAgICAgIGZvcm1BcnJheS5wdXNoKG5ld0Zvcm1Db250cm9sKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZm9ybUFycmF5Lm1hcmtBc0RpcnR5KCk7XHJcbiAgICAqL1xyXG4gIH1cclxuICBnZXRGb3JtQ29udHJvbChjdHg6IFdpZGdldENvbnRleHQpOiBBYnN0cmFjdENvbnRyb2wge1xyXG4gICAgaWYgKFxyXG4gICAgICAhY3R4IHx8ICFjdHgubGF5b3V0Tm9kZSB8fFxyXG4gICAgICAhaXNEZWZpbmVkKGN0eC5sYXlvdXROb2RlKCkuZGF0YVBvaW50ZXIpIHx8XHJcbiAgICAgIGN0eC5sYXlvdXROb2RlKCkudHlwZSA9PT0gJyRyZWYnXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCBzY2hlbWFQb2ludGVyPWN0eC5sYXlvdXROb2RlKCk/LmlzSVRFSXRlbT9jdHgubGF5b3V0Tm9kZSgpPy5zY2hlbWFQb2ludGVyOm51bGw7XHJcbiAgICBjb25zdCBvbmVPZlBvaW50ZXI9Y3R4LmxheW91dE5vZGUoKT8ub25lT2ZQb2ludGVyO1xyXG4gICAgY29uc3QgYW55T2ZQb2ludGVyPWN0eC5sYXlvdXROb2RlKCk/LmFueU9mUG9pbnRlcjtcclxuICAgIHJldHVybiBnZXRDb250cm9sKHRoaXMuZm9ybUdyb3VwLCB0aGlzLmdldERhdGFQb2ludGVyKGN0eCksZmFsc2Usc2NoZW1hUG9pbnRlcnx8b25lT2ZQb2ludGVyfHxhbnlPZlBvaW50ZXIpO1xyXG4gIH1cclxuXHJcbiAgc2V0Rm9ybUNvbnRyb2woY3R4OiBXaWRnZXRDb250ZXh0LGNvbnRyb2w6QWJzdHJhY3RDb250cm9sKTogQWJzdHJhY3RDb250cm9sIHtcclxuICAgIGlmIChcclxuICAgICAgIWN0eCB8fCAhY3R4LmxheW91dE5vZGUgfHxcclxuICAgICAgIWlzRGVmaW5lZChjdHgubGF5b3V0Tm9kZSgpLmRhdGFQb2ludGVyKSB8fFxyXG4gICAgICBjdHgubGF5b3V0Tm9kZSgpLnR5cGUgPT09ICckcmVmJ1xyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHNldENvbnRyb2wodGhpcy5mb3JtR3JvdXAsIHRoaXMuZ2V0RGF0YVBvaW50ZXIoY3R4KSxjb250cm9sKTtcclxuICB9XHJcblxyXG4gIGdldEZvcm1Db250cm9sVmFsdWUoY3R4OiBXaWRnZXRDb250ZXh0KTogQWJzdHJhY3RDb250cm9sIHtcclxuXHJcbiAgICBpZiAoIWN0eCB8fCAhY3R4LmxheW91dE5vZGUgfHwgXHJcbiAgICAgICFpc0RlZmluZWQoY3R4LmxheW91dE5vZGUoKS5kYXRhUG9pbnRlcikgfHxcclxuICAgICAgY3R4LmxheW91dE5vZGUoKS50eXBlID09PSAnJHJlZidcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGNvbnN0IHNjaGVtYVBvaW50ZXI9Y3R4LmxheW91dE5vZGUoKT8uaXNJVEVJdGVtP2N0eC5sYXlvdXROb2RlKCk/LnNjaGVtYVBvaW50ZXI6bnVsbDtcclxuICAgIGNvbnN0IG9uZU9mUG9pbnRlcj1jdHgubGF5b3V0Tm9kZSgpPy5vbmVPZlBvaW50ZXI7XHJcbiAgICBjb25zdCBhbnlPZlBvaW50ZXI9Y3R4LmxheW91dE5vZGUoKT8uYW55T2ZQb2ludGVyO1xyXG4gICAgY29uc3QgY29udHJvbCA9IGdldENvbnRyb2wodGhpcy5mb3JtR3JvdXAsIHRoaXMuZ2V0RGF0YVBvaW50ZXIoY3R4KSxmYWxzZSxzY2hlbWFQb2ludGVyfHxvbmVPZlBvaW50ZXJ8fGFueU9mUG9pbnRlcik7XHJcbiAgICByZXR1cm4gY29udHJvbCA/IGNvbnRyb2wudmFsdWUgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0Rm9ybUNvbnRyb2xHcm91cChjdHg6IFdpZGdldENvbnRleHQpOiBVbnR5cGVkRm9ybUFycmF5IHwgVW50eXBlZEZvcm1Hcm91cCB7XHJcbiAgICBpZiAoIWN0eCB8fCAhY3R4LmxheW91dE5vZGUgfHwgIWlzRGVmaW5lZChjdHgubGF5b3V0Tm9kZSgpLmRhdGFQb2ludGVyKSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGNvbnN0IHNjaGVtYVBvaW50ZXI9Y3R4LmxheW91dE5vZGUoKT8uaXNJVEVJdGVtP2N0eC5sYXlvdXROb2RlKCk/LnNjaGVtYVBvaW50ZXI6bnVsbDtcclxuICAgIGNvbnN0IG9uZU9mUG9pbnRlcj1jdHgubGF5b3V0Tm9kZSgpPy5vbmVPZlBvaW50ZXI7XHJcbiAgICBjb25zdCBhbnlPZlBvaW50ZXI9Y3R4LmxheW91dE5vZGUoKT8uYW55T2ZQb2ludGVyO1xyXG4gICAgcmV0dXJuIGdldENvbnRyb2wodGhpcy5mb3JtR3JvdXAsIHRoaXMuZ2V0RGF0YVBvaW50ZXIoY3R4KSwgdHJ1ZSxzY2hlbWFQb2ludGVyfHxvbmVPZlBvaW50ZXJ8fGFueU9mUG9pbnRlcik7XHJcbiAgfVxyXG5cclxuICBnZXRGb3JtQ29udHJvbE5hbWUoY3R4OiBXaWRnZXRDb250ZXh0KTogc3RyaW5nIHtcclxuICAgIGlmIChcclxuICAgICAgIWN0eCB8fCAhY3R4LmxheW91dE5vZGUgfHxcclxuICAgICAgIWlzRGVmaW5lZChjdHgubGF5b3V0Tm9kZSgpLmRhdGFQb2ludGVyKSB8fFxyXG4gICAgICAhaGFzVmFsdWUoY3R4LmRhdGFJbmRleCgpKVxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIEpzb25Qb2ludGVyLnRvS2V5KHRoaXMuZ2V0RGF0YVBvaW50ZXIoY3R4KSk7XHJcbiAgfVxyXG5cclxuICBnZXRMYXlvdXRBcnJheShjdHg6IFdpZGdldENvbnRleHQpOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gSnNvblBvaW50ZXIuZ2V0KHRoaXMubGF5b3V0LCB0aGlzLmdldExheW91dFBvaW50ZXIoY3R4KSwgMCwgLTEpO1xyXG4gIH1cclxuXHJcbiAgZ2V0UGFyZW50Tm9kZShjdHg6IFdpZGdldENvbnRleHQpOiBhbnkge1xyXG4gICAgcmV0dXJuIEpzb25Qb2ludGVyLmdldCh0aGlzLmxheW91dCwgdGhpcy5nZXRMYXlvdXRQb2ludGVyKGN0eCksIDAsIC0yKTtcclxuICB9XHJcblxyXG4gIGdldERhdGFQb2ludGVyKGN0eDogV2lkZ2V0Q29udGV4dCk6IHN0cmluZyB7XHJcbiAgICBpZiAoXHJcbiAgICAgICFjdHggfHwgIWN0eC5sYXlvdXROb2RlIHx8XHJcbiAgICAgICFpc0RlZmluZWQoY3R4LmxheW91dE5vZGUoKS5kYXRhUG9pbnRlcikgfHxcclxuICAgICAgIWhhc1ZhbHVlKGN0eC5kYXRhSW5kZXgoKSlcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiBKc29uUG9pbnRlci50b0luZGV4ZWRQb2ludGVyKFxyXG4gICAgICBjdHgubGF5b3V0Tm9kZSgpLmRhdGFQb2ludGVyLFxyXG4gICAgICBjdHguZGF0YUluZGV4KCksXHJcbiAgICAgIHRoaXMuYXJyYXlNYXBcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRMYXlvdXRQb2ludGVyKGN0eDogV2lkZ2V0Q29udGV4dCk6IHN0cmluZyB7XHJcbiAgICBpZiAoIWhhc1ZhbHVlKGN0eC5sYXlvdXRJbmRleCgpKSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiAnLycgKyBjdHgubGF5b3V0SW5kZXgoKS5qb2luKCcvaXRlbXMvJyk7XHJcbiAgfVxyXG5cclxuICBpc0NvbnRyb2xCb3VuZChjdHg6IFdpZGdldENvbnRleHQpOiBib29sZWFuIHtcclxuICAgIGlmIChcclxuICAgICAgIWN0eCB8fCAhY3R4LmxheW91dE5vZGUgfHxcclxuICAgICAgIWlzRGVmaW5lZChjdHgubGF5b3V0Tm9kZSgpLmRhdGFQb2ludGVyKSB8fFxyXG4gICAgICAhaGFzVmFsdWUoY3R4LmRhdGFJbmRleCgpKVxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnN0IGNvbnRyb2xHcm91cCA9IHRoaXMuZ2V0Rm9ybUNvbnRyb2xHcm91cChjdHgpO1xyXG4gICAgY29uc3QgbmFtZSA9IHRoaXMuZ2V0Rm9ybUNvbnRyb2xOYW1lKGN0eCk7XHJcbiAgICByZXR1cm4gY29udHJvbEdyb3VwID8gaGFzT3duKGNvbnRyb2xHcm91cC5jb250cm9scywgbmFtZSkgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGFkZEl0ZW0oY3R4OiBXaWRnZXRDb250ZXh0LCBuYW1lPzogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoXHJcbiAgICAgICFjdHggfHwgIWN0eC5sYXlvdXROb2RlIHx8XHJcbiAgICAgICFpc0RlZmluZWQoY3R4LmxheW91dE5vZGUoKS4kcmVmKSB8fFxyXG4gICAgICAhaGFzVmFsdWUoY3R4LmRhdGFJbmRleCgpKSB8fFxyXG4gICAgICAhaGFzVmFsdWUoY3R4LmxheW91dEluZGV4KCkpXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENyZWF0ZSBhIG5ldyBBbmd1bGFyIGZvcm0gY29udHJvbCBmcm9tIGEgdGVtcGxhdGUgaW4gdGVtcGxhdGVSZWZMaWJyYXJ5XHJcbiAgICBjb25zdCBuZXdGb3JtR3JvdXAgPSBidWlsZEZvcm1Hcm91cChcclxuICAgICAgdGhpcy50ZW1wbGF0ZVJlZkxpYnJhcnlbY3R4LmxheW91dE5vZGUoKS4kcmVmXVxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBBZGQgdGhlIG5ldyBmb3JtIGNvbnRyb2wgdG8gdGhlIHBhcmVudCBmb3JtQXJyYXkgb3IgZm9ybUdyb3VwXHJcbiAgICBpZiAoY3R4LmxheW91dE5vZGUoKS5hcnJheUl0ZW0pIHtcclxuICAgICAgLy8gQWRkIG5ldyBhcnJheSBpdGVtIHRvIGZvcm1BcnJheVxyXG4gICAgICAoPFVudHlwZWRGb3JtQXJyYXk+dGhpcy5nZXRGb3JtQ29udHJvbEdyb3VwKGN0eCkpLnB1c2gobmV3Rm9ybUdyb3VwKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIEFkZCBuZXcgJHJlZiBpdGVtIHRvIGZvcm1Hcm91cFxyXG4gICAgICAoPFVudHlwZWRGb3JtR3JvdXA+dGhpcy5nZXRGb3JtQ29udHJvbEdyb3VwKGN0eCkpLmFkZENvbnRyb2woXHJcbiAgICAgICAgbmFtZSB8fCB0aGlzLmdldEZvcm1Db250cm9sTmFtZShjdHgpLFxyXG4gICAgICAgIG5ld0Zvcm1Hcm91cFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENvcHkgYSBuZXcgbGF5b3V0Tm9kZSBmcm9tIGxheW91dFJlZkxpYnJhcnlcclxuICAgIGNvbnN0IG5ld0xheW91dE5vZGUgPSBnZXRMYXlvdXROb2RlKGN0eC5sYXlvdXROb2RlKCksIHRoaXMpO1xyXG4gICAgbmV3TGF5b3V0Tm9kZS5hcnJheUl0ZW0gPSBjdHgubGF5b3V0Tm9kZSgpLmFycmF5SXRlbTtcclxuICAgIGlmIChjdHgubGF5b3V0Tm9kZSgpLmFycmF5SXRlbVR5cGUpIHtcclxuICAgICAgbmV3TGF5b3V0Tm9kZS5hcnJheUl0ZW1UeXBlID0gY3R4LmxheW91dE5vZGUoKS5hcnJheUl0ZW1UeXBlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZGVsZXRlIG5ld0xheW91dE5vZGUuYXJyYXlJdGVtVHlwZTtcclxuICAgIH1cclxuICAgIGlmIChuYW1lKSB7XHJcbiAgICAgIG5ld0xheW91dE5vZGUubmFtZSA9IG5hbWU7XHJcbiAgICAgIG5ld0xheW91dE5vZGUuZGF0YVBvaW50ZXIgKz0gJy8nICsgSnNvblBvaW50ZXIuZXNjYXBlKG5hbWUpO1xyXG4gICAgICBuZXdMYXlvdXROb2RlLm9wdGlvbnMudGl0bGUgPSBmaXhUaXRsZShuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBBZGQgdGhlIG5ldyBsYXlvdXROb2RlIHRvIHRoZSBmb3JtIGxheW91dFxyXG4gICAgSnNvblBvaW50ZXIuaW5zZXJ0KHRoaXMubGF5b3V0LCB0aGlzLmdldExheW91dFBvaW50ZXIoY3R4KSwgbmV3TGF5b3V0Tm9kZSk7XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBtb3ZlQXJyYXlJdGVtKGN0eDogV2lkZ2V0Q29udGV4dCwgb2xkSW5kZXg6IG51bWJlciwgbmV3SW5kZXg6IG51bWJlcixtb3ZlTGF5b3V0OmJvb2xlYW49dHJ1ZSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKFxyXG4gICAgICAhY3R4IHx8ICFjdHgubGF5b3V0Tm9kZSB8fFxyXG4gICAgICAhaXNEZWZpbmVkKGN0eC5sYXlvdXROb2RlKCkuZGF0YVBvaW50ZXIpIHx8XHJcbiAgICAgICFoYXNWYWx1ZShjdHguZGF0YUluZGV4KCkpIHx8XHJcbiAgICAgICFoYXNWYWx1ZShjdHgubGF5b3V0SW5kZXgoKSkgfHxcclxuICAgICAgIWlzRGVmaW5lZChvbGRJbmRleCkgfHxcclxuICAgICAgIWlzRGVmaW5lZChuZXdJbmRleCkgfHxcclxuICAgICAgb2xkSW5kZXggPT09IG5ld0luZGV4XHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE1vdmUgaXRlbSBpbiB0aGUgZm9ybUFycmF5XHJcbiAgICBjb25zdCBmb3JtQXJyYXkgPSA8VW50eXBlZEZvcm1BcnJheT50aGlzLmdldEZvcm1Db250cm9sR3JvdXAoY3R4KTtcclxuICAgIGlmKG9sZEluZGV4ID49Zm9ybUFycmF5Lmxlbmd0aCl7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnN0IGFycmF5SXRlbSA9IGZvcm1BcnJheS5hdChvbGRJbmRleCk7XHJcbiAgICBmb3JtQXJyYXkucmVtb3ZlQXQob2xkSW5kZXgpO1xyXG4gICAgZm9ybUFycmF5Lmluc2VydChuZXdJbmRleCwgYXJyYXlJdGVtKTtcclxuICAgIGZvcm1BcnJheS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcblxyXG4gICAgLy8gTW92ZSBsYXlvdXQgaXRlbVxyXG4gICAgaWYobW92ZUxheW91dCl7XHJcbiAgICAgIGNvbnN0IGxheW91dEFycmF5ID0gdGhpcy5nZXRMYXlvdXRBcnJheShjdHgpO1xyXG4gICAgICBsYXlvdXRBcnJheS5zcGxpY2UobmV3SW5kZXgsIDAsIGxheW91dEFycmF5LnNwbGljZShvbGRJbmRleCwgMSlbMF0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlSXRlbShjdHg6IFdpZGdldENvbnRleHQpOiBib29sZWFuIHtcclxuICAgIGlmIChcclxuICAgICAgIWN0eCB8fCAhY3R4LmxheW91dE5vZGUgfHxcclxuICAgICAgIWlzRGVmaW5lZChjdHgubGF5b3V0Tm9kZSgpLmRhdGFQb2ludGVyKSB8fFxyXG4gICAgICAhaGFzVmFsdWUoY3R4LmRhdGFJbmRleCgpKSB8fFxyXG4gICAgICAhaGFzVmFsdWUoY3R4LmxheW91dEluZGV4KCkpXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFJlbW92ZSB0aGUgQW5ndWxhciBmb3JtIGNvbnRyb2wgZnJvbSB0aGUgcGFyZW50IGZvcm1BcnJheSBvciBmb3JtR3JvdXBcclxuICAgIGlmIChjdHgubGF5b3V0Tm9kZSgpLmFycmF5SXRlbSkge1xyXG4gICAgICAvLyBSZW1vdmUgYXJyYXkgaXRlbSBmcm9tIGZvcm1BcnJheVxyXG4gICAgICAoPFVudHlwZWRGb3JtQXJyYXk+dGhpcy5nZXRGb3JtQ29udHJvbEdyb3VwKGN0eCkpLnJlbW92ZUF0KFxyXG4gICAgICAgIGN0eC5kYXRhSW5kZXgoKVtjdHguZGF0YUluZGV4KCkubGVuZ3RoIC0gMV1cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIFJlbW92ZSAkcmVmIGl0ZW0gZnJvbSBmb3JtR3JvdXBcclxuICAgICAgKDxVbnR5cGVkRm9ybUdyb3VwPnRoaXMuZ2V0Rm9ybUNvbnRyb2xHcm91cChjdHgpKS5yZW1vdmVDb250cm9sKFxyXG4gICAgICAgIHRoaXMuZ2V0Rm9ybUNvbnRyb2xOYW1lKGN0eClcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZW1vdmUgbGF5b3V0Tm9kZSBmcm9tIGxheW91dFxyXG4gICAgSnNvblBvaW50ZXIucmVtb3ZlKHRoaXMubGF5b3V0LCB0aGlzLmdldExheW91dFBvaW50ZXIoY3R4KSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcbn1cclxuIl19
|
|
893
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi1zY2hlbWEtZm9ybS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZm9ybXdvcmtzLWNvcmUvc3JjL2xpYi9qc29uLXNjaGVtYS1mb3JtLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFFOUQsa0RBQWtEO0FBQ2xELE9BQU8sVUFBVSxNQUFNLGFBQWEsQ0FBQztBQUNyQyxPQUFPLE9BQW1ELE1BQU0sZUFBZSxDQUFDO0FBQ2hGLE9BQU8sVUFBVSxNQUFNLHdDQUF3QyxDQUFDO0FBQ2hFLE9BQU8sVUFBVSxNQUFNLHdDQUF3QyxDQUFDO0FBQ2hFLE9BQU8sU0FBUyxNQUFNLGtCQUFrQixDQUFDO0FBQ3pDLE9BQU8sUUFBUSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RDLE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUM5RCxPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLG9CQUFvQixFQUNwQixvQkFBb0IsRUFDcEIsb0JBQW9CLEVBQ3BCLG9CQUFvQixFQUNwQixvQkFBb0IsRUFDcEIsb0JBQW9CLEVBQ3JCLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFDTCxXQUFXLEVBQ1gsY0FBYyxFQUNkLHNCQUFzQixFQUN0QixXQUFXLEVBQ1gsbUJBQW1CLEVBQ25CLHFCQUFxQixFQUNyQixRQUFRLEVBQ1IsT0FBTyxFQUNQLGNBQWMsRUFDZCxVQUFVLEVBQ1YsYUFBYSxFQUNiLE1BQU0sRUFDTixRQUFRLEVBQ1IsT0FBTyxFQUNQLFNBQVMsRUFDVCxPQUFPLEVBQ1AsUUFBUSxFQUNSLHlCQUF5QixFQUN6QixXQUFXLEVBQ1osTUFBTSxVQUFVLENBQUM7QUFFbEIsT0FBTyxFQUFFLE9BQU8sSUFBSSxRQUFRLEVBQUUsT0FBTyxJQUFJLE9BQU8sRUFBRSxNQUFNLGdC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QUFDLFdBQVcsQ0FBQSxDQUFDLENBQUEsV0FBVyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQztvQkFDM0YsQ0FBQyxDQUFBLFNBQVMsQ0FBQztnQkFDWCxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBQyxnQkFBZ0IsRUFBQyxDQUFDLEdBQUcsZUFBZSxFQUFDLEdBQUcsQ0FBQyxFQUFDLENBQUMsR0FBRyxhQUFhLEVBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDakcsSUFBSTtZQUNOLENBQUMsQ0FBQyxDQUFBO1FBQ0osQ0FBQztJQUVILENBQUM7K0dBaGtDUSxxQkFBcUI7bUhBQXJCLHFCQUFxQjs7NEZBQXJCLHFCQUFxQjtrQkFEakMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSwgU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgVW50eXBlZEZvcm1BcnJheSwgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuLy9pbXBvcnQgQWp2LCB7IEVycm9yT2JqZWN0LCBPcHRpb25zIH0gZnJvbSAnYWp2JztcclxuaW1wb3J0IGFkZEZvcm1hdHMgZnJvbSBcImFqdi1mb3JtYXRzXCI7XHJcbmltcG9ydCBBanYyMDE5LCB7IEVycm9yT2JqZWN0LCBPcHRpb25zLCBWYWxpZGF0ZUZ1bmN0aW9uIH0gZnJvbSAnYWp2L2Rpc3QvMjAxOSc7XHJcbmltcG9ydCBqc29uRHJhZnQ2IGZyb20gJ2Fqdi9saWIvcmVmcy9qc29uLXNjaGVtYS1kcmFmdC0wNi5qc29uJztcclxuaW1wb3J0IGpzb25EcmFmdDcgZnJvbSAnYWp2L2xpYi9yZWZzL2pzb24tc2NoZW1hLWRyYWZ0LTA3Lmpzb24nO1xyXG5pbXBvcnQgY2xvbmVEZWVwIGZyb20gJ2xvZGFzaC9jbG9uZURlZXAnO1xyXG5pbXBvcnQgX2lzQXJyYXkgZnJvbSAnbG9kYXNoL2lzQXJyYXknO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1xyXG4gIGRlVmFsaWRhdGlvbk1lc3NhZ2VzLFxyXG4gIGVuVmFsaWRhdGlvbk1lc3NhZ2VzLFxyXG4gIGVzVmFsaWRhdGlvbk1lc3NhZ2VzLFxyXG4gIGZyVmFsaWRhdGlvbk1lc3NhZ2VzLFxyXG4gIGl0VmFsaWRhdGlvbk1lc3NhZ2VzLFxyXG4gIHB0VmFsaWRhdGlvbk1lc3NhZ2VzLFxyXG4gIHpoVmFsaWRhdGlvbk1lc3NhZ2VzXHJcbn0gZnJvbSAnLi9sb2NhbGUnO1xyXG5pbXBvcnQge1xyXG4gIEpzb25Qb2ludGVyLFxyXG4gIGJ1aWxkRm9ybUdyb3VwLFxyXG4gIGJ1aWxkRm9ybUdyb3VwVGVtcGxhdGUsXHJcbiAgYnVpbGRMYXlvdXQsXHJcbiAgYnVpbGRTY2hlbWFGcm9tRGF0YSxcclxuICBidWlsZFNjaGVtYUZyb21MYXlvdXQsXHJcbiAgZml4VGl0bGUsXHJcbiAgZm9yRWFjaCxcclxuICBmb3JtYXRGb3JtRGF0YSxcclxuICBnZXRDb250cm9sLFxyXG4gIGdldExheW91dE5vZGUsXHJcbiAgaGFzT3duLFxyXG4gIGhhc1ZhbHVlLFxyXG4gIGlzQXJyYXksXHJcbiAgaXNEZWZpbmVkLFxyXG4gIGlzRW1wdHksXHJcbiAgaXNPYmplY3QsXHJcbiAgcmVtb3ZlUmVjdXJzaXZlUmVmZXJlbmNlcyxcclxuICB0b1RpdGxlQ2FzZVxyXG59IGZyb20gJy4vc2hhcmVkJztcclxuXHJcbmltcG9ydCB7IGRlZmF1bHQgYXMgX2lzRXF1YWwsIGRlZmF1bHQgYXMgaXNFcXVhbCB9IGZyb20gJ2xvZGFzaC9pc0VxdWFsJztcclxuaW1wb3J0IHsgc2V0Q29udHJvbCB9IGZyb20gJy4vc2hhcmVkL2Zvcm0tZ3JvdXAuZnVuY3Rpb25zJztcclxuXHJcblxyXG5leHBvcnQgdHlwZSBXaWRnZXRDb250ZXh0PXtcclxuICBmb3JtQ29udHJvbD86QWJzdHJhY3RDb250cm9sO1xyXG4gIGxheW91dE5vZGU/OiBTaWduYWw8YW55PjtcclxuICBsYXlvdXRJbmRleD86IFNpZ25hbDxudW1iZXJbXT47XHJcbiAgZGF0YUluZGV4PzogU2lnbmFsPG51bWJlcltdPjtcclxuICBvcHRpb25zPzphbnk7XHJcbiAgY29udHJvbFZhbHVlPzphbnk7XHJcbiAgYm91bmRDb250cm9sPzpib29sZWFuO1xyXG4gIGNvbnRyb2xOYW1lPzpzdHJpbmc7XHJcbiAgY29udHJvbERpc2FibGVkPzpib29sZWFuXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIEFKVlJlZ2lzdHJ5SXRlbT17XHJcbiAgW25hbWU6IHN0cmluZ106e1xyXG4gICAgbmFtZTpzdHJpbmcsXHJcbiAgICBhanZJbnN0YW5jZTpBanYyMDE5XHJcbiAgICBhanZWYWxpZGF0b3I6VmFsaWRhdGVGdW5jdGlvblxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBUaXRsZU1hcEl0ZW0ge1xyXG4gIG5hbWU/OiBzdHJpbmc7XHJcbiAgdmFsdWU/OiBhbnk7XHJcbiAgY2hlY2tlZD86IGJvb2xlYW47XHJcbiAgZ3JvdXA/OiBzdHJpbmc7XHJcbiAgaXRlbXM/OiBUaXRsZU1hcEl0ZW1bXTtcclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIEVycm9yTWVzc2FnZXMge1xyXG4gIFtjb250cm9sX25hbWU6IHN0cmluZ106IHtcclxuICAgIG1lc3NhZ2U6IHN0cmluZyB8IEZ1bmN0aW9uIHwgT2JqZWN0O1xyXG4gICAgY29kZTogc3RyaW5nO1xyXG4gIH1bXTtcclxufVxyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgSnNvblNjaGVtYUZvcm1TZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuICBKc29uRm9ybUNvbXBhdGliaWxpdHkgPSBmYWxzZTtcclxuICBSZWFjdEpzb25TY2hlbWFGb3JtQ29tcGF0aWJpbGl0eSA9IGZhbHNlO1xyXG4gIEFuZ3VsYXJTY2hlbWFGb3JtQ29tcGF0aWJpbGl0eSA9IGZhbHNlO1xyXG4gIHRwbGRhdGE6IGFueSA9IHt9O1xyXG5cclxuICBhanZPcHRpb25zOiBPcHRpb25zID0ge1xyXG4gICAgYWxsRXJyb3JzOiB0cnVlLFxyXG4gICAgLy92YWxpZGF0ZUZvcm1hdHM6ZmFsc2UsXHJcbiAgICBzdHJpY3Q6ZmFsc2VcclxuICBcclxuICB9O1xyXG4gIGFqdjphbnkgPSBuZXcgQWp2MjAxOSh0aGlzLmFqdk9wdGlvbnMpOyAvLyBBSlY6IEFub3RoZXIgSlNPTiBTY2hlbWEgVmFsaWRhdG9yXHJcbiAgXHJcbiAgLy9CZWluZyByZXBsYWNlZCBieSBnZXRBanZWYWxpZGF0b3IoKVxyXG4gIHZhbGlkYXRlRm9ybURhdGE6IGFueSA9IG51bGw7IC8vIENvbXBpbGVkIEFKViBmdW5jdGlvbiB0byB2YWxpZGF0ZSBhY3RpdmUgZm9ybSdzIHNjaGVtYVxyXG5cclxuICBmb3JtVmFsdWVzOiBhbnkgPSB7fTsgLy8gSW50ZXJuYWwgZm9ybSBkYXRhIChtYXkgbm90IGhhdmUgY29ycmVjdCB0eXBlcylcclxuICBkYXRhOiBhbnkgPSB7fTsgLy8gT3V0cHV0IGZvcm0gZGF0YSAoZm9ybVZhbHVlcywgZm9ybWF0dGVkIHdpdGggY29ycmVjdCBkYXRhIHR5cGVzKVxyXG4gIHNjaGVtYTogYW55ID0ge307IC8vIEludGVybmFsIEpTT04gU2NoZW1hXHJcbiAgbGF5b3V0OiBhbnlbXSA9IFtdOyAvLyBJbnRlcm5hbCBmb3JtIGxheW91dFxyXG4gIGZvcm1Hcm91cFRlbXBsYXRlOiBhbnkgPSB7fTsgLy8gVGVtcGxhdGUgdXNlZCB0byBjcmVhdGUgZm9ybUdyb3VwXHJcbiAgZm9ybUdyb3VwOiBhbnkgPSBudWxsOyAvLyBBbmd1bGFyIGZvcm1Hcm91cCwgd2hpY2ggcG93ZXJzIHRoZSByZWFjdGl2ZSBmb3JtXHJcbiAgZnJhbWV3b3JrOiBhbnkgPSBudWxsOyAvLyBBY3RpdmUgZnJhbWV3b3JrIGNvbXBvbmVudFxyXG4gIGZvcm1PcHRpb25zOiBhbnk7IC8vIEFjdGl2ZSBvcHRpb25zLCB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgZm9ybVxyXG5cclxuICB2YWxpZERhdGE6IGFueSA9IG51bGw7IC8vIFZhbGlkIGZvcm0gZGF0YSAob3IgbnVsbCkgKD09PSBpc1ZhbGlkID8gZGF0YSA6IG51bGwpXHJcbiAgaXNWYWxpZDogYm9vbGVhbiA9IG51bGw7IC8vIElzIGN1cnJlbnQgZm9ybSBkYXRhIHZhbGlkP1xyXG4gIGFqdkVycm9yczogRXJyb3JPYmplY3RbXSA9IG51bGw7IC8vIEFqdiBlcnJvcnMgZm9yIGN1cnJlbnQgZGF0YVxyXG4gIHZhbGlkYXRpb25FcnJvcnM6IGFueSA9IG51bGw7IC8vIEFueSB2YWxpZGF0aW9uIGVycm9ycyBmb3IgY3VycmVudCBkYXRhXHJcbiAgZGF0YUVycm9yczogYW55ID0gbmV3IE1hcCgpOyAvL1xyXG4gIGZvcm1WYWx1ZVN1YnNjcmlwdGlvbjogYW55ID0gbnVsbDsgLy8gU3Vic2NyaXB0aW9uIHRvIGZvcm1Hcm91cC52YWx1ZUNoYW5nZXMgb2JzZXJ2YWJsZSAoZm9yIHVuLSBhbmQgcmUtc3Vic2NyaWJpbmcpXHJcbiAgZGF0YUNoYW5nZXM6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7IC8vIEZvcm0gZGF0YSBvYnNlcnZhYmxlXHJcbiAgaXNWYWxpZENoYW5nZXM6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7IC8vIGlzVmFsaWQgb2JzZXJ2YWJsZVxyXG4gIHZhbGlkYXRpb25FcnJvckNoYW5nZXM6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7IC8vIHZhbGlkYXRpb25FcnJvcnMgb2JzZXJ2YWJsZVxyXG5cclxuICBhcnJheU1hcDogTWFwPHN0cmluZywgbnVtYmVyPiA9IG5ldyBNYXAoKTsgLy8gTWFwcyBhcnJheXMgaW4gZGF0YSBvYmplY3QgYW5kIG51bWJlciBvZiB0dXBsZSB2YWx1ZXNcclxuICBkYXRhTWFwOiBNYXA8c3RyaW5nLCBhbnk+ID0gbmV3IE1hcCgpOyAvLyBNYXBzIHBhdGhzIGluIGZvcm0gZGF0YSB0byBzY2hlbWEgYW5kIGZvcm1Hcm91cCBwYXRoc1xyXG4gIGRhdGFSZWN1cnNpdmVSZWZNYXA6IE1hcDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTWFwKCk7IC8vIE1hcHMgcmVjdXJzaXZlIHJlZmVyZW5jZSBwb2ludHMgaW4gZm9ybSBkYXRhXHJcbiAgc2NoZW1hUmVjdXJzaXZlUmVmTWFwOiBNYXA8c3RyaW5nLCBzdHJpbmc+ID0gbmV3IE1hcCgpOyAvLyBNYXBzIHJlY3Vyc2l2ZSByZWZlcmVuY2UgcG9pbnRzIGluIHNjaGVtYVxyXG4gIHNjaGVtYVJlZkxpYnJhcnk6IGFueSA9IHt9OyAvLyBMaWJyYXJ5IG9mIHNjaGVtYXMgZm9yIHJlc29sdmluZyBzY2hlbWEgJHJlZnNcclxuICBsYXlvdXRSZWZMaWJyYXJ5OiBhbnkgPSB7ICcnOiBudWxsIH07IC8vIExpYnJhcnkgb2YgbGF5b3V0IG5vZGVzIGZvciBhZGRpbmcgdG8gZm9ybVxyXG4gIHRlbXBsYXRlUmVmTGlicmFyeTogYW55ID0ge307IC8vIExpYnJhcnkgb2YgZm9ybUdyb3VwIHRlbXBsYXRlcyBmb3IgYWRkaW5nIHRvIGZvcm1cclxuICBoYXNSb290UmVmZXJlbmNlID0gZmFsc2U7IC8vIERvZXMgdGhlIGZvcm0gaW5jbHVkZSBhIHJlY3Vyc2l2ZSByZWZlcmVuY2UgdG8gaXRzZWxmP1xyXG5cclxuICBsYW5ndWFnZSA9ICdlbi1VUyc7IC8vIERvZXMgdGhlIGZvcm0gaW5jbHVkZSBhIHJlY3Vyc2l2ZSByZWZlcmVuY2UgdG8gaXRzZWxmP1xyXG5cclxuICAvLyBEZWZhdWx0IGdsb2JhbCBmb3JtIG9wdGlvbnNcclxuICBkZWZhdWx0Rm9ybU9wdGlvbnM6IGFueSA9IHtcclxuICAgIGF1dG9jb21wbGV0ZTogdHJ1ZSwgLy8gQWxsb3cgdGhlIHdlYiBicm93c2VyIHRvIHJlbWVtYmVyIHByZXZpb3VzIGZvcm0gc3VibWlzc2lvbiB2YWx1ZXMgYXMgZGVmYXVsdHNcclxuICAgIGFkZFN1Ym1pdDogJ2F1dG8nLCAvLyBBZGQgYSBzdWJtaXQgYnV0dG9uIGlmIGxheW91dCBkb2VzIG5vdCBoYXZlIG9uZT9cclxuICAgIC8vIGZvciBhZGRTdWJtaXQ6IHRydWUgPSBhbHdheXMsIGZhbHNlID0gbmV2ZXIsXHJcbiAgICAvLyAnYXV0bycgPSBvbmx5IGlmIGxheW91dCBpcyB1bmRlZmluZWQgKGZvcm0gaXMgYnVpbHQgZnJvbSBzY2hlbWEgYWxvbmUpXHJcbiAgICBkZWJ1ZzogZmFsc2UsIC8vIFNob3cgZGVidWdnaW5nIG91dHB1dD9cclxuICAgIGRpc2FibGVJbnZhbGlkU3VibWl0OiB0cnVlLCAvLyBEaXNhYmxlIHN1Ym1pdCBpZiBmb3JtIGludmFsaWQ/XHJcbiAgICBmb3JtRGlzYWJsZWQ6IGZhbHNlLCAvLyBTZXQgZW50aXJlIGZvcm0gYXMgZGlzYWJsZWQ/IChub3QgZWRpdGFibGUsIGFuZCBkaXNhYmxlcyBvdXRwdXRzKVxyXG4gICAgZm9ybVJlYWRvbmx5OiBmYWxzZSwgLy8gU2V0IGVudGlyZSBmb3JtIGFzIHJlYWQgb25seT8gKG5vdCBlZGl0YWJsZSwgYnV0IG91dHB1dHMgc3RpbGwgZW5hYmxlZClcclxuICAgIGZpZWxkc1JlcXVpcmVkOiBmYWxzZSwgLy8gKHNldCBhdXRvbWF0aWNhbGx5KSBBcmUgdGhlcmUgYW55IHJlcXVpcmVkIGZpZWxkcyBpbiB0aGUgZm9ybT9cclxuICAgIGZyYW1ld29yazogJ25vLWZyYW1ld29yaycsIC8vIFRoZSBmcmFtZXdvcmsgdG8gbG9hZFxyXG4gICAgbG9hZEV4dGVybmFsQXNzZXRzOiBmYWxzZSwgLy8gTG9hZCBleHRlcm5hbCBjc3MgYW5kIEphdmFTY3JpcHQgZm9yIGZyYW1ld29yaz9cclxuICAgIHByaXN0aW5lOiB7IGVycm9yczogdHJ1ZSwgc3VjY2VzczogdHJ1ZSB9LFxyXG4gICAgc3VwcmVzc1Byb3BlcnR5VGl0bGVzOiBmYWxzZSxcclxuICAgIHNldFNjaGVtYURlZmF1bHRzOiAnYXV0bycsIC8vIFNldCBmZWZhdWx0IHZhbHVlcyBmcm9tIHNjaGVtYT9cclxuICAgIC8vIHRydWUgPSBhbHdheXMgc2V0ICh1bmxlc3Mgb3ZlcnJpZGRlbiBieSBsYXlvdXQgZGVmYXVsdCBvciBmb3JtVmFsdWVzKVxyXG4gICAgLy8gZmFsc2UgPSBuZXZlciBzZXRcclxuICAgIC8vICdhdXRvJyA9IHNldCBpbiBhZGRhYmxlIGNvbXBvbmVudHMsIGFuZCBldmVyeXdoZXJlIGlmIGZvcm1WYWx1ZXMgbm90IHNldFxyXG4gICAgc2V0TGF5b3V0RGVmYXVsdHM6ICdhdXRvJywgLy8gU2V0IGZlZmF1bHQgdmFsdWVzIGZyb20gbGF5b3V0P1xyXG4gICAgLy8gdHJ1ZSA9IGFsd2F5cyBzZXQgKHVubGVzcyBvdmVycmlkZGVuIGJ5IGZvcm1WYWx1ZXMpXHJcbiAgICAvLyBmYWxzZSA9IG5ldmVyIHNldFxyXG4gICAgLy8gJ2F1dG8nID0gc2V0IGluIGFkZGFibGUgY29tcG9uZW50cywgYW5kIGV2ZXJ5d2hlcmUgaWYgZm9ybVZhbHVlcyBub3Qgc2V0XHJcbiAgICB2YWxpZGF0ZU9uUmVuZGVyOiAnYXV0bycsIC8vIFZhbGlkYXRlIGZpZWxkcyBpbW1lZGlhdGVseSwgYmVmb3JlIHRoZXkgYXJlIHRvdWNoZWQ/XHJcbiAgICAvLyB0cnVlID0gdmFsaWRhdGUgYWxsIGZpZWxkcyBpbW1lZGlhdGVseVxyXG4gICAgLy8gZmFsc2UgPSBvbmx5IHZhbGlkYXRlIGZpZWxkcyBhZnRlciB0aGV5IGFyZSB0b3VjaGVkIGJ5IHVzZXJcclxuICAgIC8vICdhdXRvJyA9IHZhbGlkYXRlIGZpZWxkcyB3aXRoIHZhbHVlcyBpbW1lZGlhdGVseSwgZW1wdHkgZmllbGRzIGFmdGVyIHRoZXkgYXJlIHRvdWNoZWRcclxuICAgIHdpZGdldHM6IHt9LCAvLyBBbnkgY3VzdG9tIHdpZGdldHMgdG8gbG9hZFxyXG4gICAgZGVmYXVsdFdpZGdldE9wdGlvbnM6IHtcclxuICAgICAgLy8gRGVmYXVsdCBvcHRpb25zIGZvciBmb3JtIGNvbnRyb2wgd2lkZ2V0c1xyXG4gICAgICBsaXN0SXRlbXM6IDEsIC8vIE51bWJlciBvZiBsaXN0IGl0ZW1zIHRvIGluaXRpYWxseSBhZGQgdG8gYXJyYXlzIHdpdGggbm8gZGVmYXVsdCB2YWx1ZVxyXG4gICAgICBhZGRhYmxlOiB0cnVlLCAvLyBBbGxvdyBhZGRpbmcgaXRlbXMgdG8gYW4gYXJyYXkgb3IgJHJlZiBwb2ludD9cclxuICAgICAgb3JkZXJhYmxlOiB0cnVlLCAvLyBBbGxvdyByZW9yZGVyaW5nIGl0ZW1zIHdpdGhpbiBhbiBhcnJheT9cclxuICAgICAgcmVtb3ZhYmxlOiB0cnVlLCAvLyBBbGxvdyByZW1vdmluZyBpdGVtcyBmcm9tIGFuIGFycmF5IG9yICRyZWYgcG9pbnQ/XHJcbiAgICAgIGVuYWJsZUVycm9yU3RhdGU6IHRydWUsIC8vIEFwcGx5ICdoYXMtZXJyb3InIGNsYXNzIHdoZW4gZmllbGQgZmFpbHMgdmFsaWRhdGlvbj9cclxuICAgICAgLy8gZGlzYWJsZUVycm9yU3RhdGU6IGZhbHNlLCAvLyBEb24ndCBhcHBseSAnaGFzLWVycm9yJyBjbGFzcyB3aGVuIGZpZWxkIGZhaWxzIHZhbGlkYXRpb24/XHJcbiAgICAgIGVuYWJsZVN1Y2Nlc3NTdGF0ZTogdHJ1ZSwgLy8gQXBwbHkgJ2hhcy1zdWNjZXNzJyBjbGFzcyB3aGVuIGZpZWxkIHZhbGlkYXRlcz9cclxuICAgICAgLy8gZGlzYWJsZVN1Y2Nlc3NTdGF0ZTogZmFsc2UsIC8vIERvbid0IGFwcGx5ICdoYXMtc3VjY2VzcycgY2xhc3Mgd2hlbiBmaWVsZCB2YWxpZGF0ZXM/XHJcbiAgICAgIGZlZWRiYWNrOiBmYWxzZSwgLy8gU2hvdyBpbmxpbmUgZmVlZGJhY2sgaWNvbnM/XHJcbiAgICAgIGZlZWRiYWNrT25SZW5kZXI6IGZhbHNlLCAvLyBTaG93IGVycm9yTWVzc2FnZSBvbiBSZW5kZXI/XHJcbiAgICAgIG5vdGl0bGU6IGZhbHNlLCAvLyBIaWRlIHRpdGxlP1xyXG4gICAgICBkaXNhYmxlZDogZmFsc2UsIC8vIFNldCBjb250cm9sIGFzIGRpc2FibGVkPyAobm90IGVkaXRhYmxlLCBhbmQgZXhjbHVkZWQgZnJvbSBvdXRwdXQpXHJcbiAgICAgIHJlYWRvbmx5OiBmYWxzZSwgLy8gU2V0IGNvbnRyb2wgYXMgcmVhZCBvbmx5PyAobm90IGVkaXRhYmxlLCBidXQgaW5jbHVkZWQgaW4gb3V0cHV0KVxyXG4gICAgICByZXR1cm5FbXB0eUZpZWxkczogdHJ1ZSwgLy8gcmV0dXJuIHZhbHVlcyBmb3IgZmllbGRzIHRoYXQgY29udGFpbiBubyBkYXRhP1xyXG4gICAgICB2YWxpZGF0aW9uTWVzc2FnZXM6IHt9IC8vIHNldCBieSBzZXRMYW5ndWFnZSgpXHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgZmNWYWx1ZUNoYW5nZXNTdWJzOlN1YnNjcmlwdGlvbjtcclxuICBmY1N0YXR1c0NoYW5nZXNTdWJzOlN1YnNjcmlwdGlvbjtcclxuXHJcbiAgLy9UT0RPLXJldmlldyxtYXkgbm90IGJlIG5lZWRlZCBhcyBzb3J0YWJsZWpzIHJlcGxhY2VzIGRuZFxyXG4gIC8vdGhpcyBoYXMgYmVlbiBhZGRlZCB0byBlbmFibGUgb3IgZGlzYWJsZSB0aGUgZHJhZ2FiYmxlIHN0YXRlIG9mIGEgY29tcG9uZW50XHJcbiAgLy91c2luZyB0aGUgT3JkZXJhYmxlRGlyZWN0aXZlLCBtYWlubHkgd2hlbiBhbiA8aW5wdXQgdHlwZT1cInJhbmdlXCI+IFxyXG4gIC8vZWxlbWVudHMgYXJlIHByZXNlbnQsIGFzIHRoZSBkcmFnZ2FibGUgYXR0cmlidXRlIG1ha2VzIGl0IGRpZmZpY3VsdCB0b1xyXG4gIC8vc2xpZGUgdGhlIHJhbmdlIHNsaWRlcnMgYW5kIGVuZCB1cCBkcmFnZ2luZ1xyXG4gIC8vTkIgdGhpcyB3aWxsIGJlIHNldCBnbG9iYWxseSBmb3IgYWxsIE9yZGVyYWJsZURpcmVjdGl2ZSBpbnN0YW5jZXNcclxuICAvL2FuZCB3aWxsIG9ubHkgYmUgZW5hYmxlZCB3aGVuL2lmIHRoZSBjYWxsZXIgc2V0cyB0aGUgdmFsdWUgYmFjayB0byB0cnVlIFxyXG4gIHByaXZhdGUgZHJhZ2dhYmxlU3RhdGVTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTsgLy8gRGVmYXVsdCB2YWx1ZSB0cnVlXHJcbiAgZHJhZ2dhYmxlU3RhdGUkID0gdGhpcy5kcmFnZ2FibGVTdGF0ZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHNldERyYWdnYWJsZVN0YXRlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmRyYWdnYWJsZVN0YXRlU3ViamVjdC5uZXh0KHZhbHVlKTsgLy8gVXBkYXRlIHRoZSBkcmFnZ2FibGUgdmFsdWVcclxuICB9XHJcblxyXG4gIGNyZWF0ZUFqdkluc3RhbmNlKGFqdk9wdGlvbnMpe1xyXG4gICAgbGV0IGFqdkluc3RhbmNlPW5ldyBBanYyMDE5KGFqdk9wdGlvbnMpOyBcclxuICAgIGFqdkluc3RhbmNlLmFkZE1ldGFTY2hlbWEoanNvbkRyYWZ0Nik7XHJcbiAgICBhanZJbnN0YW5jZS5hZGRNZXRhU2NoZW1hKGpzb25EcmFmdDcpO1xyXG4gICAgYWRkRm9ybWF0cyhhanZJbnN0YW5jZSk7XHJcbiAgICByZXR1cm4gYWp2SW5zdGFuY2U7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVBbmRSZWdpc3RlckFqdkluc3RhbmNlKGFqdk9wdGlvbnMsbmFtZT86c3RyaW5nKXtcclxuICAgIGNvbnN0IGludGFuY2VOYW1lPW5hbWV8fGBhanZfJHtEYXRlLm5vdygpfWA7XHJcbiAgICBpZih0aGlzLmFqdlJlZ2lzdHJ5W2ludGFuY2VOYW1lXSl7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgYWp2IGluc3RhbmNlIHdpdGggbmFtZTonJHtpbnRhbmNlTmFtZX0nIGhhcyBhbHJlYWR5IGJlZW4gcmVnaXN0ZXJlZGApO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYWp2SW5zdGFuY2U9dGhpcy5jcmVhdGVBanZJbnN0YW5jZShhanZPcHRpb25zKTtcclxuICAgIHRoaXMuYWp2UmVnaXN0cnlbaW50YW5jZU5hbWVdPXtcclxuICAgICAgbmFtZTppbnRhbmNlTmFtZSxcclxuICAgICAgYWp2SW5zdGFuY2U6YWp2SW5zdGFuY2UsXHJcbiAgICAgIGFqdlZhbGlkYXRvcjpudWxsXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHRoaXMuYWp2UmVnaXN0cnlbaW50YW5jZU5hbWVdO1xyXG4gIH1cclxuXHJcbiAgYWp2UmVnaXN0cnk6QUpWUmVnaXN0cnlJdGVtPXt9XHJcblxyXG4gIGdldEFqdkluc3RhbmNlKG5hbWU9J2RlZmF1bHQnKXtcclxuICAgIHJldHVybiB0aGlzLmFqdlJlZ2lzdHJ5W25hbWVdLmFqdkluc3RhbmNlO1xyXG4gIH1cclxuICBnZXRBanZWYWxpZGF0b3IobmFtZT0nZGVmYXVsdCcpe1xyXG4gICAgcmV0dXJuIHRoaXMuYWp2UmVnaXN0cnlbbmFtZV0/LmFqdlZhbGlkYXRvcjtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5zZXRMYW5ndWFnZSh0aGlzLmxhbmd1YWdlKTtcclxuICAgIHRoaXMuYWp2LmFkZE1ldGFTY2hlbWEoanNvbkRyYWZ0Nik7XHJcbiAgICB0aGlzLmFqdi5hZGRNZXRhU2NoZW1hKGpzb25EcmFmdDcpO1xyXG4gICAgYWRkRm9ybWF0cyh0aGlzLmFqdik7XHJcbiAgICB0aGlzLmFqdlJlZ2lzdHJ5WydkZWZhdWx0J109e25hbWU6J2RlZmF1bHQnLGFqdkluc3RhbmNlOnRoaXMuYWp2LGFqdlZhbGlkYXRvcjpudWxsfTtcclxuICAgIC8vIEFkZCBjdXN0b20gJ2R1cmF0aW9uJyBmb3JtYXQgdXNpbmcgYSByZWdleFxyXG4vKiAgICBcclxudGhpcy5hanYuYWRkRm9ybWF0KFwiZHVyYXRpb25cIiwge1xyXG4gIHR5cGU6IFwic3RyaW5nXCIsXHJcbiAgdmFsaWRhdGU6IChkdXJhdGlvbikgPT4gL15QKD8hJCkoXFxkK1kpPyhcXGQrTSk/KFxcZCtEKT8oVChcXGQrSCk/KFxcZCtNKT8oXFxkK1MpPyk/JC8udGVzdChkdXJhdGlvbilcclxufSk7XHJcbiovXHJcbiAgfVxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5mY1ZhbHVlQ2hhbmdlc1N1YnM/LnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLmZjU3RhdHVzQ2hhbmdlc1N1YnM/LnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLmZvcm1WYWx1ZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuZmNWYWx1ZUNoYW5nZXNTdWJzPW51bGw7XHJcbiAgICB0aGlzLmZjU3RhdHVzQ2hhbmdlc1N1YnM9bnVsbDtcclxuICAgIHRoaXMuZm9ybVZhbHVlU3Vic2NyaXB0aW9uPW51bGw7XHJcblxyXG4gIH1cclxuXHJcbiAgc2V0TGFuZ3VhZ2UobGFuZ3VhZ2U6IHN0cmluZyA9ICdlbi1VUycpIHtcclxuICAgIHRoaXMubGFuZ3VhZ2UgPSBsYW5ndWFnZTtcclxuICAgIGNvbnN0IGxhbmd1YWdlVmFsaWRhdGlvbk1lc3NhZ2VzID0ge1xyXG4gICAgICBkZTogZGVWYWxpZGF0aW9uTWVzc2FnZXMsXHJcbiAgICAgIGVuOiBlblZhbGlkYXRpb25NZXNzYWdlcyxcclxuICAgICAgZXM6IGVzVmFsaWRhdGlvbk1lc3NhZ2VzLFxyXG4gICAgICBmcjogZnJWYWxpZGF0aW9uTWVzc2FnZXMsXHJcbiAgICAgIGl0OiBpdFZhbGlkYXRpb25NZXNzYWdlcyxcclxuICAgICAgcHQ6IHB0VmFsaWRhdGlvbk1lc3NhZ2VzLFxyXG4gICAgICB6aDogemhWYWxpZGF0aW9uTWVzc2FnZXMsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgbGFuZ3VhZ2VDb2RlID0gbGFuZ3VhZ2Uuc2xpY2UoMCwgMik7XHJcblxyXG4gICAgY29uc3QgdmFsaWRhdGlvbk1lc3NhZ2VzID0gbGFuZ3VhZ2VWYWxpZGF0aW9uTWVzc2FnZXNbbGFuZ3VhZ2VDb2RlXTtcclxuXHJcbiAgICB0aGlzLmRlZmF1bHRGb3JtT3B0aW9ucy5kZWZhdWx0V2lkZ2V0T3B0aW9ucy52YWxpZGF0aW9uTWVzc2FnZXMgPSBjbG9uZURlZXAoXHJcbiAgICAgIHZhbGlkYXRpb25NZXNzYWdlc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldERhdGEoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2NoZW1hKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2NoZW1hO1xyXG4gIH1cclxuXHJcbiAgZ2V0TGF5b3V0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMubGF5b3V0O1xyXG4gIH1cclxuXHJcbiAgcmVzZXRBbGxWYWx1ZXMoKSB7XHJcbiAgICB0aGlzLkpzb25Gb3JtQ29tcGF0aWJpbGl0eSA9IGZhbHNlO1xyXG4gICAgdGhpcy5SZWFjdEpzb25TY2hlbWFGb3JtQ29tcGF0aWJpbGl0eSA9IGZhbHNlO1xyXG4gICAgdGhpcy5Bbmd1bGFyU2NoZW1hRm9ybUNvbXBhdGliaWxpdHkgPSBmYWxzZTtcclxuICAgIHRoaXMudHBsZGF0YSA9IHt9O1xyXG4gICAgdGhpcy52YWxpZGF0ZUZvcm1EYXRhID0gbnVsbDsvL0JlaW5nIHJlcGxhY2VkIGJ5IGdldEFqdlZhbGlkYXRvcigpXHJcbiAgICB0aGlzLmZvcm1WYWx1ZXMgPSB7fTtcclxuICAgIHRoaXMuc2NoZW1hID0ge307XHJcbiAgICB0aGlzLmxheW91dCA9IFtdO1xyXG4gICAgdGhpcy5mb3JtR3JvdXBUZW1wbGF0ZSA9IHt9O1xyXG4gICAgdGhpcy5mb3JtR3JvdXAgPSBudWxsO1xyXG4gICAgdGhpcy5mcmFtZXdvcmsgPSBudWxsO1xyXG4gICAgdGhpcy5kYXRhID0ge307XHJcbiAgICB0aGlzLnZhbGlkRGF0YSA9IG51bGw7XHJcbiAgICB0aGlzLmlzVmFsaWQgPSBudWxsO1xyXG4gICAgdGhpcy52YWxpZGF0aW9uRXJyb3JzID0gbnVsbDtcclxuICAgIHRoaXMuYXJyYXlNYXAgPSBuZXcgTWFwKCk7XHJcbiAgICB0aGlzLmRhdGFNYXAgPSBuZXcgTWFwKCk7XHJcbiAgICB0aGlzLmRhdGFSZWN1cnNpdmVSZWZNYXAgPSBuZXcgTWFwKCk7XHJcbiAgICB0aGlzLnNjaGVtYVJlY3Vyc2l2ZVJlZk1hcCA9IG5ldyBNYXAoKTtcclxuICAgIHRoaXMubGF5b3V0UmVmTGlicmFyeSA9IHt9O1xyXG4gICAgdGhpcy5zY2hlbWFSZWZMaWJyYXJ5ID0ge307XHJcbiAgICB0aGlzLnRlbXBsYXRlUmVmTGlicmFyeSA9IHt9O1xyXG4gICAgdGhpcy5mb3JtT3B0aW9ucyA9IGNsb25lRGVlcCh0aGlzLmRlZmF1bHRGb3JtT3B0aW9ucyk7XHJcbiAgICB0aGlzLmFqdlJlZ2lzdHJ5PXt9O1xyXG4gICAgdGhpcy5hanZSZWdpc3RyeVsnZGVmYXVsdCddPXtuYW1lOidkZWZhdWx0JyxhanZJbnN0YW5jZTp0aGlzLmFqdixhanZWYWxpZGF0b3I6bnVsbH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiAnYnVpbGRSZW1vdGVFcnJvcicgZnVuY3Rpb25cclxuICAgKlxyXG4gICAqIEV4YW1wbGUgZXJyb3JzOlxyXG4gICAqIHtcclxuICAgKiAgIGxhc3RfbmFtZTogWyB7XHJcbiAgICogICAgIG1lc3NhZ2U6ICdMYXN0IG5hbWUgbXVzdCBieSBzdGFydCB3aXRoIGNhcGl0YWwgbGV0dGVyLicsXHJcbiAgICogICAgIGNvZGU6ICdjYXBpdGFsX2xldHRlcidcclxuICAgKiAgIH0gXSxcclxuICAgKiAgIGVtYWlsOiBbIHtcclxuICAgKiAgICAgbWVzc2FnZTogJ0VtYWlsIG11c3QgYmUgZnJvbSBleGFtcGxlLmNvbSBkb21haW4uJyxcclxuICAgKiAgICAgY29kZTogJ3NwZWNpYWxfZG9tYWluJ1xyXG4gICAqICAgfSwge1xyXG4gICAqICAgICBtZXNzYWdlOiAnRW1haWwgbXVzdCBjb250YWluIGFuIEAgc3ltYm9sLicsXHJcbiAgICogICAgIGNvZGU6ICdhdF9zeW1ib2wnXHJcbiAgICogICB9IF1cclxuICAgKiB9XHJcbiAgICogLy97RXJyb3JNZXNzYWdlc30gZXJyb3JzXHJcbiAgICovXHJcbiAgYnVpbGRSZW1vdGVFcnJvcihlcnJvcnM6IEVycm9yTWVzc2FnZXMpIHtcclxuICAgIGZvckVhY2goZXJyb3JzLCAodmFsdWUsIGtleSkgPT4ge1xyXG4gICAgICBpZiAoa2V5IGluIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBlcnJvciBvZiB2YWx1ZSkge1xyXG4gICAgICAgICAgY29uc3QgZXJyID0ge307XHJcbiAgICAgICAgICBlcnJbZXJyb3JbJ2NvZGUnXV0gPSBlcnJvclsnbWVzc2FnZSddO1xyXG4gICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KGtleSkuc2V0RXJyb3JzKGVyciwgeyBlbWl0RXZlbnQ6IHRydWUgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHZhbGlkYXRlRGF0YShuZXdWYWx1ZTogYW55LCB1cGRhdGVTdWJzY3JpcHRpb25zID0gdHJ1ZSxhanZJbnN0YW5jZU5hbWU9J2RlZmF1bHQnKTogdm9pZCB7XHJcbiAgICAvLyBGb3JtYXQgcmF3IGZvcm0gZGF0YSB0byBjb3JyZWN0IGRhdGEgdHlwZXNcclxuICAgIHRoaXMuZGF0YSA9IGZvcm1hdEZvcm1EYXRhKFxyXG4gICAgICBuZXdWYWx1ZSxcclxuICAgICAgdGhpcy5kYXRhTWFwLFxyXG4gICAgICB0aGlzLmRhdGFSZWN1cnNpdmVSZWZNYXAsXHJcbiAgICAgIHRoaXMuYXJyYXlNYXAsXHJcbiAgICAgIHRoaXMuZm9ybU9wdGlvbnMucmV0dXJuRW1wdHlGaWVsZHNcclxuICAgICk7XHJcbiAgICB0aGlzLmlzVmFsaWQgPSB0aGlzLmdldEFqdlZhbGlkYXRvcihhanZJbnN0YW5jZU5hbWUpKHRoaXMuZGF0YSk7XHJcbiAgICB0aGlzLnZhbGlkRGF0YSA9IHRoaXMuaXNWYWxpZCA/IHRoaXMuZGF0YSA6IG51bGw7XHJcbiAgICBjb25zdCBjb21waWxlRXJyb3JzID0gKGVycm9yczpFcnJvck9iamVjdFtdKSA9PiB7XHJcbiAgICAgIGNvbnN0IGNvbXBpbGVkRXJyb3JzID0ge307XHJcbiAgICAgIChlcnJvcnMgfHwgW10pLmZvckVhY2goZXJyb3IgPT4ge1xyXG4gICAgICAgIC8vVE9ETyByZXZpZXctc2VlbXMgdG8gYmUgYSBjaGFuZ2UgaW4gbmV3ZXIgdmVyc2lvbnNcclxuICAgICAgICAvL29mIGFqdiBnaXZpbmcgJycgYXMgaW5zdGFuY2VQYXRoIGZvciByb290IG9iamVjdHNcclxuICAgICAgICBsZXQgZXJyb3JQYXRoPWVycm9yLmluc3RhbmNlUGF0aHx8XCJST09UXCI7XHJcbiAgICAgICAgaWYgKCFjb21waWxlZEVycm9yc1tlcnJvclBhdGhdKSB7XHJcbiAgICAgICAgICBjb21waWxlZEVycm9yc1tlcnJvclBhdGhdID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbXBpbGVkRXJyb3JzW2Vycm9yUGF0aF0ucHVzaChlcnJvci5tZXNzYWdlKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBjb21waWxlZEVycm9ycztcclxuICAgIH07XHJcbiAgICAvL1RPRE86c3RvcmUgYXZqRXJyb3JzIHBlciBhanZJbnN0YW5jZSBpbiByZWdpc3RyeVxyXG4gICAgdGhpcy5hanZFcnJvcnMgPSB0aGlzLmdldEFqdlZhbGlkYXRvcihhanZJbnN0YW5jZU5hbWUpLmVycm9ycztcclxuICAgIHRoaXMudmFsaWRhdGlvbkVycm9ycyA9IGNvbXBpbGVFcnJvcnModGhpcy5hanZFcnJvcnMpO1xyXG4gICAgaWYgKHVwZGF0ZVN1YnNjcmlwdGlvbnMpIHtcclxuICAgICAgdGhpcy5kYXRhQ2hhbmdlcy5uZXh0KHRoaXMuZGF0YSk7XHJcbiAgICAgIHRoaXMuaXNWYWxpZENoYW5nZXMubmV4dCh0aGlzLmlzVmFsaWQpO1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25FcnJvckNoYW5nZXMubmV4dCh0aGlzLmFqdkVycm9ycyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBidWlsZEZvcm1Hcm91cFRlbXBsYXRlKGZvcm1WYWx1ZXM6IGFueSA9IG51bGwsIHNldFZhbHVlcyA9IHRydWUpIHtcclxuICAgIHRoaXMuZm9ybUdyb3VwVGVtcGxhdGUgPSBidWlsZEZvcm1Hcm91cFRlbXBsYXRlKFxyXG4gICAgICB0aGlzLFxyXG4gICAgICBmb3JtVmFsdWVzLFxyXG4gICAgICBzZXRWYWx1ZXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBidWlsZEZvcm1Hcm91cChhanZJbnN0YW5jZU5hbWU/OnN0cmluZykge1xyXG4gICAgdGhpcy5mb3JtR3JvdXAgPSA8VW50eXBlZEZvcm1Hcm91cD5idWlsZEZvcm1Hcm91cCh0aGlzLmZvcm1Hcm91cFRlbXBsYXRlKTtcclxuICAgIGlmICh0aGlzLmZvcm1Hcm91cCkge1xyXG4gICAgICB0aGlzLmNvbXBpbGVBanZTY2hlbWEoYWp2SW5zdGFuY2VOYW1lKTtcclxuICAgICAgdGhpcy52YWxpZGF0ZURhdGEodGhpcy5mb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKSx0cnVlLGFqdkluc3RhbmNlTmFtZSk7XHJcblxyXG4gICAgICAvLyBTZXQgdXAgb2JzZXJ2YWJsZXMgdG8gZW1pdCBkYXRhIGFuZCB2YWxpZGF0aW9uIGluZm8gd2hlbiBmb3JtIGRhdGEgY2hhbmdlc1xyXG4gICAgICBpZiAodGhpcy5mb3JtVmFsdWVTdWJzY3JpcHRpb24pIHtcclxuICAgICAgICB0aGlzLmZvcm1WYWx1ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZm9ybVZhbHVlU3Vic2NyaXB0aW9uID0gdGhpcy5mb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnN1YnNjcmliZShcclxuICAgICAgICBmb3JtVmFsdWUgPT4gdGhpcy52YWxpZGF0ZURhdGEodGhpcy5mb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKSx0cnVlLGFqdkluc3RhbmNlTmFtZSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGJ1aWxkTGF5b3V0KHdpZGdldExpYnJhcnk6IGFueSkge1xyXG4gICAgdGhpcy5sYXlvdXQgPSBidWlsZExheW91dCh0aGlzLCB3aWRnZXRMaWJyYXJ5KTtcclxuICB9XHJcblxyXG4gIHNldE9wdGlvbnMobmV3T3B0aW9uczogYW55KSB7XHJcbiAgICBpZiAoaXNPYmplY3QobmV3T3B0aW9ucykpIHtcclxuICAgICAgY29uc3QgYWRkT3B0aW9ucyA9IGNsb25lRGVlcChuZXdPcHRpb25zKTtcclxuICAgICAgLy8gQmFja3dhcmQgY29tcGF0aWJpbGl0eSBmb3IgJ2RlZmF1bHRPcHRpb25zJyAocmVuYW1lZCAnZGVmYXVsdFdpZGdldE9wdGlvbnMnKVxyXG4gICAgICBpZiAoaXNPYmplY3QoYWRkT3B0aW9ucy5kZWZhdWx0T3B0aW9ucykpIHtcclxuICAgICAgICBPYmplY3QuYXNzaWduKFxyXG4gICAgICAgICAgdGhpcy5mb3JtT3B0aW9ucy5kZWZhdWx0V2lkZ2V0T3B0aW9ucyxcclxuICAgICAgICAgIGFkZE9wdGlvbnMuZGVmYXVsdE9wdGlvbnNcclxuICAgICAgICApO1xyXG4gICAgICAgIGRlbGV0ZSBhZGRPcHRpb25zLmRlZmF1bHRPcHRpb25zO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChpc09iamVjdChhZGRPcHRpb25zLmRlZmF1bHRXaWRnZXRPcHRpb25zKSkge1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24oXHJcbiAgICAgICAgICB0aGlzLmZvcm1PcHRpb25zLmRlZmF1bHRXaWRnZXRPcHRpb25zLFxyXG4gICAgICAgICAgYWRkT3B0aW9ucy5kZWZhdWx0V2lkZ2V0T3B0aW9uc1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgZGVsZXRlIGFkZE9wdGlvbnMuZGVmYXVsdFdpZGdldE9wdGlvbnM7XHJcbiAgICAgIH1cclxuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmZvcm1PcHRpb25zLCBhZGRPcHRpb25zKTtcclxuXHJcbiAgICAgIC8vIGNvbnZlcnQgZGlzYWJsZUVycm9yU3RhdGUgLyBkaXNhYmxlU3VjY2Vzc1N0YXRlIHRvIGVuYWJsZS4uLlxyXG4gICAgICBjb25zdCBnbG9iYWxEZWZhdWx0cyA9IHRoaXMuZm9ybU9wdGlvbnMuZGVmYXVsdFdpZGdldE9wdGlvbnM7XHJcbiAgICAgIFsnRXJyb3JTdGF0ZScsICdTdWNjZXNzU3RhdGUnXVxyXG4gICAgICAgIC5maWx0ZXIoc3VmZml4ID0+IGhhc093bihnbG9iYWxEZWZhdWx0cywgJ2Rpc2FibGUnICsgc3VmZml4KSlcclxuICAgICAgICAuZm9yRWFjaChzdWZmaXggPT4ge1xyXG4gICAgICAgICAgZ2xvYmFsRGVmYXVsdHNbJ2VuYWJsZScgKyBzdWZmaXhdID0gIWdsb2JhbERlZmF1bHRzW1xyXG4gICAgICAgICAgICAnZGlzYWJsZScgKyBzdWZmaXhcclxuICAgICAgICAgIF07XHJcbiAgICAgICAgICBkZWxldGUgZ2xvYmFsRGVmYXVsdHNbJ2Rpc2FibGUnICsgc3VmZml4XTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbXBpbGVBanZTY2hlbWEoYWp2SW5zdGFuY2VOYW1lPSdkZWZhdWx0Jykge1xyXG4gICAgbGV0IGFqdlZhbGlkYXRvcj10aGlzLmdldEFqdlZhbGlkYXRvcihhanZJbnN0YW5jZU5hbWUpO1xyXG4gICAgaWYgKCFhanZWYWxpZGF0b3IpIHtcclxuICAgICAgLy8gaWYgJ3VpOm9yZGVyJyBleGlzdHMgaW4gcHJvcGVydGllcywgbW92ZSBpdCB0byByb290IGJlZm9yZSBjb21waWxpbmcgd2l0aCBhanZcclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5zY2hlbWEucHJvcGVydGllc1sndWk6b3JkZXInXSkpIHtcclxuICAgICAgICB0aGlzLnNjaGVtYVsndWk6b3JkZXInXSA9IHRoaXMuc2NoZW1hLnByb3BlcnRpZXNbJ3VpOm9yZGVyJ107XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuc2NoZW1hLnByb3BlcnRpZXNbJ3VpOm9yZGVyJ107XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5nZXRBanZJbnN0YW5jZShhanZJbnN0YW5jZU5hbWUpLnJlbW92ZVNjaGVtYSh0aGlzLnNjaGVtYSk7XHJcbiAgICAgIFxyXG4gICAgICBhanZWYWxpZGF0b3IgPSB0aGlzLmdldEFqdkluc3RhbmNlKGFqdkluc3RhbmNlTmFtZSkuY29tcGlsZSh0aGlzLnNjaGVtYSk7XHJcbiAgICAgIHRoaXMuYWp2UmVnaXN0cnlbYWp2SW5zdGFuY2VOYW1lXS5hanZWYWxpZGF0b3I9YWp2VmFsaWRhdG9yO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGJ1aWxkU2NoZW1hRnJvbURhdGEoZGF0YT86IGFueSwgcmVxdWlyZUFsbEZpZWxkcyA9IGZhbHNlKTogYW55IHtcclxuICAgIGlmIChkYXRhKSB7XHJcbiAgICAgIHJldHVybiBidWlsZFNjaGVtYUZyb21EYXRhKGRhdGEsIHJlcXVpcmVBbGxGaWVsZHMpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zY2hlbWEgPSBidWlsZFNjaGVtYUZyb21EYXRhKHRoaXMuZm9ybVZhbHVlcywgcmVxdWlyZUFsbEZpZWxkcyk7XHJcbiAgfVxyXG5cclxuICBidWlsZFNjaGVtYUZyb21MYXlvdXQobGF5b3V0PzogYW55KTogYW55IHtcclxuICAgIGlmIChsYXlvdXQpIHtcclxuICAgICAgcmV0dXJuIGJ1aWxkU2NoZW1hRnJvbUxheW91dChsYXlvdXQpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zY2hlbWEgPSBidWlsZFNjaGVtYUZyb21MYXlvdXQodGhpcy5sYXlvdXQpO1xyXG4gIH1cclxuXHJcbiAgc2V0VHBsZGF0YShuZXdUcGxkYXRhOiBhbnkgPSB7fSk6IHZvaWQge1xyXG4gICAgdGhpcy50cGxkYXRhID0gbmV3VHBsZGF0YTtcclxuICB9XHJcblxyXG4gIHBhcnNlVGV4dChcclxuICAgIHRleHQgPSAnJyxcclxuICAgIHZhbHVlOiBhbnkgPSB7fSxcclxuICAgIHZhbHVlczogYW55ID0ge30sXHJcbiAgICBrZXk6IG51bWJlciB8IHN0cmluZyA9IG51bGxcclxuICApOiBzdHJpbmcge1xyXG4gICAgaWYgKCF0ZXh0IHx8ICEve3suKz99fS8udGVzdCh0ZXh0KSkge1xyXG4gICAgICByZXR1cm4gdGV4dDtcclxuICAgIH1cclxuICAgIHJldHVybiB0ZXh0LnJlcGxhY2UoL3t7KC4rPyl9fS9nLCAoLi4uYSkgPT5cclxuICAgICAgdGhpcy5wYXJzZUV4cHJlc3Npb24oYVsxXSwgdmFsdWUsIHZhbHVlcywga2V5LCB0aGlzLnRwbGRhdGEpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcGFyc2VFeHByZXNzaW9uKFxyXG4gICAgZXhwcmVzc2lvbiA9ICcnLFxyXG4gICAgdmFsdWU6IGFueSA9IHt9LFxyXG4gICAgdmFsdWVzOiBhbnkgPSB7fSxcclxuICAgIGtleTogbnVtYmVyIHwgc3RyaW5nID0gbnVsbCxcclxuICAgIHRwbGRhdGE6IGFueSA9IG51bGxcclxuICApIHtcclxuICAgIGlmICh0eXBlb2YgZXhwcmVzc2lvbiAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaW5kZXggPSB0eXBlb2Yga2V5ID09PSAnbnVtYmVyJyA/IGtleSArIDEgKyAnJyA6IGtleSB8fCAnJztcclxuICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uLnRyaW0oKTtcclxuICAgIGlmIChcclxuICAgICAgKGV4cHJlc3Npb25bMF0gPT09IFwiJ1wiIHx8IGV4cHJlc3Npb25bMF0gPT09ICdcIicpICYmXHJcbiAgICAgIGV4cHJlc3Npb25bMF0gPT09IGV4cHJlc3Npb25bZXhwcmVzc2lvbi5sZW5ndGggLSAxXSAmJlxyXG4gICAgICBleHByZXNzaW9uLnNsaWNlKDEsIGV4cHJlc3Npb24ubGVuZ3RoIC0gMSkuaW5kZXhPZihleHByZXNzaW9uWzBdKSA9PT0gLTFcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gZXhwcmVzc2lvbi5zbGljZSgxLCBleHByZXNzaW9uLmxlbmd0aCAtIDEpO1xyXG4gICAgfVxyXG4gICAgaWYgKGV4cHJlc3Npb24gPT09ICdpZHgnIHx8IGV4cHJlc3Npb24gPT09ICckaW5kZXgnKSB7XHJcbiAgICAgIHJldHVybiBpbmRleDtcclxuICAgIH1cclxuICAgIGlmIChleHByZXNzaW9uID09PSAndmFsdWUnICYmICFoYXNPd24odmFsdWVzLCAndmFsdWUnKSkge1xyXG4gICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIFsnXCInLCBcIidcIiwgJyAnLCAnfHwnLCAnJiYnLCAnKyddLmV2ZXJ5KFxyXG4gICAgICAgIGRlbGltID0+IGV4cHJlc3Npb24uaW5kZXhPZihkZWxpbSkgPT09IC0xXHJcbiAgICAgIClcclxuICAgICkge1xyXG4gICAgICBjb25zdCBwb2ludGVyID0gSnNvblBvaW50ZXIucGFyc2VPYmplY3RQYXRoKGV4cHJlc3Npb24pO1xyXG4gICAgICByZXR1cm4gcG9pbnRlclswXSA9PT0gJ3ZhbHVlJyAmJiBKc29uUG9pbnRlci5oYXModmFsdWUsIHBvaW50ZXIuc2xpY2UoMSkpXHJcbiAgICAgICAgPyBKc29uUG9pbnRlci5nZXQodmFsdWUsIHBvaW50ZXIuc2xpY2UoMSkpXHJcbiAgICAgICAgOiBwb2ludGVyWzBdID09PSAndmFsdWVzJyAmJiBKc29uUG9pbnRlci5oYXModmFsdWVzLCBwb2ludGVyLnNsaWNlKDEpKVxyXG4gICAgICAgICAgPyBKc29uUG9pbnRlci5nZXQodmFsdWVzLCBwb2ludGVyLnNsaWNlKDEpKVxyXG4gICAgICAgICAgOiBwb2ludGVyWzBdID09PSAndHBsZGF0YScgJiYgSnNvblBvaW50ZXIuaGFzKHRwbGRhdGEsIHBvaW50ZXIuc2xpY2UoMSkpXHJcbiAgICAgICAgICAgID8gSnNvblBvaW50ZXIuZ2V0KHRwbGRhdGEsIHBvaW50ZXIuc2xpY2UoMSkpXHJcbiAgICAgICAgICAgIDogSnNvblBvaW50ZXIuaGFzKHZhbHVlcywgcG9pbnRlcilcclxuICAgICAgICAgICAgICA/IEpzb25Qb2ludGVyLmdldCh2YWx1ZXMsIHBvaW50ZXIpXHJcbiAgICAgICAgICAgICAgOiAnJztcclxuICAgIH1cclxuICAgIGlmIChleHByZXNzaW9uLmluZGV4T2YoJ1tpZHhdJykgPiAtMSkge1xyXG4gICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbi5yZXBsYWNlKC9cXFtpZHhcXF0vZywgPHN0cmluZz5pbmRleCk7XHJcbiAgICB9XHJcbiAgICBpZiAoZXhwcmVzc2lvbi5pbmRleE9mKCdbJGluZGV4XScpID4gLTEpIHtcclxuICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24ucmVwbGFjZSgvXFxbJGluZGV4XFxdL2csIDxzdHJpbmc+aW5kZXgpO1xyXG4gICAgfVxyXG4gICAgLy8gVE9ETzogSW1wcm92ZSBleHByZXNzaW9uIGV2YWx1YXRpb24gYnkgcGFyc2luZyBxdW90ZWQgc3RyaW5ncyBmaXJzdFxyXG4gICAgLy8gbGV0IGV4cHJlc3Npb25BcnJheSA9IGV4cHJlc3Npb24ubWF0Y2goLyhbXlwiJ10rfFwiW15cIl0rXCJ8J1teJ10rJykvZyk7XHJcbiAgICBpZiAoZXhwcmVzc2lvbi5pbmRleE9mKCd8fCcpID4gLTEpIHtcclxuICAgICAgcmV0dXJuIGV4cHJlc3Npb25cclxuICAgICAgICAuc3BsaXQoJ3x8JylcclxuICAgICAgICAucmVkdWNlKFxyXG4gICAgICAgICAgKGFsbCwgdGVybSkgPT5cclxuICAgICAgICAgICAgYWxsIHx8IHRoaXMucGFyc2VFeHByZXNzaW9uKHRlcm0sIHZhbHVlLCB2YWx1ZXMsIGtleSwgdHBsZGF0YSksXHJcbiAgICAgICAgICAnJ1xyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAoZXhwcmVzc2lvbi5pbmRleE9mKCcmJicpID4gLTEpIHtcclxuICAgICAgcmV0dXJuIGV4cHJlc3Npb25cclxuICAgICAgICAuc3BsaXQoJyYmJylcclxuICAgICAgICAucmVkdWNlKFxyXG4gICAgICAgICAgKGFsbCwgdGVybSkgPT5cclxuICAgICAgICAgICAgYWxsICYmIHRoaXMucGFyc2VFeHByZXNzaW9uKHRlcm0sIHZhbHVlLCB2YWx1ZXMsIGtleSwgdHBsZGF0YSksXHJcbiAgICAgICAgICAnICdcclxuICAgICAgICApXHJcbiAgICAgICAgLnRyaW0oKTtcclxuICAgIH1cclxuICAgIGlmIChleHByZXNzaW9uLmluZGV4T2YoJysnKSA+IC0xKSB7XHJcbiAgICAgIHJldHVybiBleHByZXNzaW9uXHJcbiAgICAgICAgLnNwbGl0KCcrJylcclxuICAgICAgICAubWFwKHRlcm0gPT4gdGhpcy5wYXJzZUV4cHJlc3Npb24odGVybSwgdmFsdWUsIHZhbHVlcywga2V5LCB0cGxkYXRhKSlcclxuICAgICAgICAuam9pbignJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICAvL1RPRE8gZml4LSBpZiB0ZW1wbGF0ZSBoYXMgdmFsdWUgaW4gdGl0bGVcclxuICAvLyBcIml0ZW1zXCI6IHtcclxuICAvLyAgIFwidGl0bGVcIjogXCJ7eyAnSW5wdXQgJyArICRpbmRleCt2YWx1ZSB9fVwiLFxyXG4gIC8vICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXHJcbiAgLy8gfVxyXG4gIC8vIHJlc3VsdCBvbiBidXR0b24gd2lsbCBiZSBcIkFkZCBJbnB1dCBbb2JqZWN0IE9iamVjdF1cIlxyXG4gIHNldEFycmF5SXRlbVRpdGxlKFxyXG4gICAgcGFyZW50Q3R4OiBhbnkgPSB7fSxcclxuICAgIGNoaWxkTm9kZTogYW55ID0gbnVsbCxcclxuICAgIGluZGV4OiBudW1iZXIgPSBudWxsXHJcbiAgKTogc3RyaW5nIHtcclxuICAgIC8vZm9yIGxlZ2FjeSBjb21wYXRpYmlsaXR5LCBwYXJlbnRDdHgubGF5b3V0Tm9kZSBjb3VsZCBlaXRoZXIgYmUgYSB2YWx1ZVxyXG4gICAgLy9vciBoYXZlIGJlZW4gY29udmVydGVkIHRvIHVzZSBTaWduYWxzXHJcbiAgICBsZXQgcGFyZW50Q3R4QXNTaWduYWxzOmFueT17XHJcbiAgICAgIGxheW91dE5vZGU6KCk9PntcclxuICAgICAgICBpZihpc09iamVjdChwYXJlbnRDdHgubGF5b3V0Tm9kZSkpe1xyXG4gICAgICAgICAgcmV0dXJuIHBhcmVudEN0eC5sYXlvdXROb2RlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwYXJlbnRDdHgubGF5b3V0Tm9kZSgpO1xyXG4gICAgICB9LFxyXG4gICAgICBkYXRhSW5kZXg6KCk9PntcclxuICAgICAgICBpZihpc09iamVjdChwYXJlbnRDdHguZGF0YUluZGV4KSl7XHJcbiAgICAgICAgICByZXR1cm4gcGFyZW50Q3R4LmRhdGFJbmRleFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGFyZW50Q3R4LmRhdGFJbmRleCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCBwYXJlbnROb2RlID0gcGFyZW50Q3R4QXNTaWduYWxzLmxheW91dE5vZGUoKTtcclxuICAgIGNvbnN0IHBhcmVudFZhbHVlczogYW55ID0gdGhpcy5nZXRGb3JtQ29udHJvbFZhbHVlKHBhcmVudEN0eEFzU2lnbmFscyk7XHJcbiAgICBjb25zdCBpc0FycmF5SXRlbSA9XHJcbiAgICAgIChwYXJlbnROb2RlLnR5cGUgfHwgJycpLnNsaWNlKC01KSA9PT0gJ2FycmF5JyAmJiBpc0FycmF5KHBhcmVudFZhbHVlcyk7XHJcbiAgICBjb25zdCB0ZXh0ID0gSnNvblBvaW50ZXIuZ2V0Rmlyc3QoXHJcbiAgICAgIGlzQXJyYXlJdGVtICYmIGNoaWxkTm9kZS50eXBlICE9PSAnJHJlZidcclxuICAgICAgICA/IFtcclxuICAgICAgICAgIFtjaGlsZE5vZGUsICcvb3B0aW9ucy9sZWdlbmQnXSxcclxuICAgICAgICAgIFtjaGlsZE5vZGUsICcvb3B0aW9ucy90aXRsZSddLFxyXG4gICAgICAgICAgW3BhcmVudE5vZGUsICcvb3B0aW9ucy90aXRsZSddLFxyXG4gICAgICAgICAgW3BhcmVudE5vZGUsICcvb3B0aW9ucy9sZWdlbmQnXVxyXG4gICAgICAgIF1cclxuICAgICAgICA6IFtcclxuICAgICAgICAgIFtjaGlsZE5vZGUsICcvb3B0aW9ucy90aXRsZSddLFxyXG4gICAgICAgICAgW2NoaWxkTm9kZSwgJy9vcHRpb25zL2xlZ2VuZCddLFxyXG4gICAgICAgICAgW3BhcmVudE5vZGUsICcvb3B0aW9ucy90aXRsZSddLFxyXG4gICAgICAgICAgW3BhcmVudE5vZGUsICcvb3B0aW9ucy9sZWdlbmQnXVxyXG4gICAgICAgIF1cclxuICAgICk7XHJcbiAgICBpZiAoIXRleHQpIHtcclxuICAgICAgcmV0dXJuIHRleHQ7XHJcbiAgICB9XHJcbiAgICBjb25zdCBjaGlsZFZhbHVlID1cclxuICAgICAgaXNBcnJheShwYXJlbnRWYWx1ZXMpICYmIGluZGV4IDwgcGFyZW50VmFsdWVzLmxlbmd0aFxyXG4gICAgICAgID8gcGFyZW50VmFsdWVzW2luZGV4XVxyXG4gICAgICAgIDogcGFyZW50VmFsdWVzO1xyXG4gICAgcmV0dXJuIHRoaXMucGFyc2VUZXh0KHRleHQsIGNoaWxkVmFsdWUsIHBhcmVudFZhbHVlcywgaW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgc2V0SXRlbVRpdGxlKGN0eDogV2lkZ2V0Q29udGV4dCkge1xyXG4gICAgcmV0dXJuICFjdHgub3B0aW9ucy50aXRsZSAmJiAvXihcXGQrfC0pJC8udGVzdChjdHgubGF5b3V0Tm9kZSgpLm5hbWUpXHJcbiAgICAgID8gbnVsbFxyXG4gICAgICA6IHRoaXMucGFyc2VUZXh0KFxyXG4gICAgICAgIGN0eC5vcHRpb25zLnRpdGxlIHx8IHRvVGl0bGVDYXNlKGN0eC5sYXlvdXROb2RlKCkubmFtZSksXHJcbiAgICAgICAgdGhpcy5nZXRGb3JtQ29udHJvbFZhbHVlKGN0eCksXHJcbiAgICAgICAgKHRoaXMuZ2V0Rm9ybUNvbnRyb2xHcm91cChjdHgpIHx8IDxhbnk+e30pLnZhbHVlLFxyXG4gICAgICAgIGN0eC5kYXRhSW5kZXgoKVtjdHguZGF0YUluZGV4KCkubGVuZ3RoIC0gMV1cclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIGV2YWx1YXRlQ29uZGl0aW9uKGxheW91dE5vZGU6IGFueSwgZGF0YUluZGV4OiBudW1iZXJbXSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgYXJyYXlJbmRleCA9IGRhdGFJbmRleCAmJiBkYXRhSW5kZXhbZGF0YUluZGV4Lmxlbmd0aCAtIDFdO1xyXG4gICAgbGV0IHJlc3VsdCA9IHRydWU7XHJcbiAgICBpZiAoaGFzVmFsdWUoKGxheW91dE5vZGUub3B0aW9ucyB8fCB7fSkuY29uZGl0aW9uKSkge1xyXG4gICAgICBpZiAodHlwZW9mIGxheW91dE5vZGUub3B0aW9ucy5jb25kaXRpb24gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgbGV0IHBvaW50ZXIgPSBsYXlvdXROb2RlLm9wdGlvbnMuY29uZGl0aW9uO1xyXG4gICAgICAgIGlmIChoYXNWYWx1ZShhcnJheUluZGV4KSkge1xyXG4gICAgICAgICAgcG9pbnRlciA9IHBvaW50ZXIucmVwbGFjZSgnW2FycmF5SW5kZXhdJywgYFske2FycmF5SW5kZXh9XWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBwb2ludGVyID0gSnNvblBvaW50ZXIucGFyc2VPYmplY3RQYXRoKHBvaW50ZXIpO1xyXG4gICAgICAgIHJlc3VsdCA9ICEhSnNvblBvaW50ZXIuZ2V0KHRoaXMuZGF0YSwgcG9pbnRlcik7XHJcbiAgICAgICAgaWYgKCFyZXN1bHQgJiYgcG9pbnRlclswXSA9PT0gJ21vZGVsJykge1xyXG4gICAgICAgICAgcmVzdWx0ID0gISFKc29uUG9pbnRlci5nZXQoeyBtb2RlbDogdGhpcy5kYXRhIH0sIHBvaW50ZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgbGF5b3V0Tm9kZS5vcHRpb25zLmNvbmRpdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIHJlc3VsdCA9IGxheW91dE5vZGUub3B0aW9ucy5jb25kaXRpb24odGhpcy5kYXRhKTtcclxuICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICB0eXBlb2YgbGF5b3V0Tm9kZS5vcHRpb25zLmNvbmRpdGlvbi5mdW5jdGlvbkJvZHkgPT09ICdzdHJpbmcnXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjb25zdCBkeW5GbiA9IG5ldyBGdW5jdGlvbihcclxuICAgICAgICAgICAgJ21vZGVsJyxcclxuICAgICAgICAgICAgJ2FycmF5SW5kaWNlcycsXHJcbiAgICAgICAgICAgIGxheW91dE5vZGUub3B0aW9ucy5jb25kaXRpb24uZnVuY3Rpb25Cb2R5XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcmVzdWx0ID0gZHluRm4odGhpcy5kYXRhLCBkYXRhSW5kZXgpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgIHJlc3VsdCA9IHRydWU7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICAgICAnY29uZGl0aW9uIGZ1bmN0aW9uQm9keSBlcnJvcmVkIG91dCBvbiBldmFsdWF0aW9uOiAnICtcclxuICAgICAgICAgICAgbGF5b3V0Tm9kZS5vcHRpb25zLmNvbmRpdGlvbi5mdW5jdGlvbkJvZHlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGl6ZUNvbnRyb2woY3R4OiBXaWRnZXRDb250ZXh0LCBiaW5kID0gdHJ1ZSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCFpc09iamVjdChjdHgpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnN0IGxheW91dE5vZGU9Y3R4LmxheW91dE5vZGUoKTtcclxuICAgIGlmIChpc0VtcHR5KGN0eC5vcHRpb25zKSkge1xyXG4gICAgICBjdHgub3B0aW9ucyA9ICFpc0VtcHR5KChsYXlvdXROb2RlIHx8IHt9KS5vcHRpb25zKVxyXG4gICAgICAgID8gbGF5b3V0Tm9kZS5vcHRpb25zXHJcbiAgICAgICAgOiBjbG9uZURlZXAodGhpcy5mb3JtT3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgICBjdHguZm9ybUNvbnRyb2wgPSB0aGlzLmdldEZvcm1Db250cm9sKGN0eCk7XHJcbiAgICAvL2ludHJvZHVjZWQgdG8gY2hlY2sgaWYgdGhlIG5vZGUgIGlzIHBhcnQgb2YgSVRFIGNvbmRpdGlvbmFsXHJcbiAgICAvL3RoZW4gY2hhbmdlIG9yIGFkZCB0aGUgY29udHJvbFxyXG4gICAgaWYobGF5b3V0Tm9kZT8uc2NoZW1hUG9pbnRlciAmJiBsYXlvdXROb2RlLmlzSVRFSXRlbSB8fCBcclxuICAgICAgKGxheW91dE5vZGU/LnNjaGVtYVBvaW50ZXIgJiYgbGF5b3V0Tm9kZT8ub25lT2ZQb2ludGVyKSB8fFxyXG4gICAgICBsYXlvdXROb2RlPy5zY2hlbWFQb2ludGVyICYmIGxheW91dE5vZGUuYW55T2ZQb2ludGVyICApe1xyXG4gICAgICAvL2JlZm9yZSBjaGFuZ2luZyBjb250cm9sLCBuZWVkIHRvIHNldCB0aGUgbmV3IGRhdGEgdHlwZSBmb3IgZGF0YSBmb3JtYXR0aW5nXHJcbiAgICAgIGNvbnN0IHNjaGVtYVR5cGU9dGhpcy5kYXRhTWFwLmdldChsYXlvdXROb2RlPy5kYXRhUG9pbnRlcikuZ2V0KFwic2NoZW1hVHlwZVwiKTtcclxuICAgICAgaWYoc2NoZW1hVHlwZSE9bGF5b3V0Tm9kZS5kYXRhVHlwZSl7XHJcbiAgICAgICAgdGhpcy5kYXRhTWFwLmdldChsYXlvdXROb2RlPy5kYXRhUG9pbnRlcikuc2V0KFwic2NoZW1hVHlwZVwiLGxheW91dE5vZGUuZGF0YVR5cGUpXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZXRGb3JtQ29udHJvbChjdHgsY3R4LmZvcm1Db250cm9sKTtcclxuICAgIH1cclxuICAgIGN0eC5ib3VuZENvbnRyb2wgPSBiaW5kICYmICEhY3R4LmZvcm1Db250cm9sO1xyXG4gICAgaWYgKGN0eC5mb3JtQ29udHJvbCkge1xyXG4gICAgICBjdHguY29udHJvbE5hbWUgPSB0aGlzLmdldEZvcm1Db250cm9sTmFtZShjdHgpO1xyXG4gICAgICBjdHguY29udHJvbFZhbHVlID0gY3R4LmZvcm1Db250cm9sLnZhbHVlO1xyXG4gICAgICBjdHguY29udHJvbERpc2FibGVkID0gY3R4LmZvcm1Db250cm9sLmRpc2FibGVkO1xyXG4gICAgICBjdHgub3B0aW9ucy5lcnJvck1lc3NhZ2UgPVxyXG4gICAgICAgIGN0eC5mb3JtQ29udHJvbC5zdGF0dXMgPT09ICdWQUxJRCdcclxuICAgICAgICAgID8gbnVsbFxyXG4gICAgICAgICAgOiB0aGlzLmZvcm1hdEVycm9ycyhcclxuICAgICAgICAgICAgY3R4LmZvcm1Db250cm9sLmVycm9ycyxcclxuICAgICAgICAgICAgY3R4Lm9wdGlvbnMudmFsaWRhdGlvbk1lc3NhZ2VzXHJcbiAgICAgICAgICApO1xyXG4gICAgICBjdHgub3B0aW9ucy5zaG93RXJyb3JzID1cclxuICAgICAgICB0aGlzLmZvcm1PcHRpb25zLnZhbGlkYXRlT25SZW5kZXIgPT09IHRydWUgfHxcclxuICAgICAgICAodGhpcy5mb3JtT3B0aW9ucy52YWxpZGF0ZU9uUmVuZGVyID09PSAnYXV0bycgJiZcclxuICAgICAgICAgIGhhc1ZhbHVlKGN0eC5jb250cm9sVmFsdWUpKTtcclxuICAgICAgdGhpcy5mY1N0YXR1c0NoYW5nZXNTdWJzPWN0eC5mb3JtQ29udHJvbC5zdGF0dXNDaGFuZ2VzLnN1YnNjcmliZShcclxuICAgICAgICBzdGF0dXMgPT5cclxuICAgICAgICAgIChjdHgub3B0aW9ucy5lcnJvck1lc3NhZ2UgPVxyXG4gICAgICAgICAgICBzdGF0dXMgPT09ICdWQUxJRCdcclxuICAgICAgICAgICAgICA/IG51bGxcclxuICAgICAgICAgICAgICA6IHRoaXMuZm9ybWF0RXJyb3JzKFxyXG4gICAgICAgICAgICAgICAgY3R4LmZvcm1Db250cm9sLmVycm9ycyxcclxuICAgICAgICAgICAgICAgIGN0eC5vcHRpb25zLnZhbGlkYXRpb25NZXNzYWdlc1xyXG4gICAgICAgICAgICAgICkpXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZmNWYWx1ZUNoYW5nZXNTdWJzPWN0eC5mb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHZhbHVlID0+IHtcclxuICAgICAgICBpZiAoIV9pc0VxdWFsKGN0eC5jb250cm9sVmFsdWUsIHZhbHVlKSkgeyBcclxuICAgICAgICAgIGN0eC5jb250cm9sVmFsdWUgPSB2YWx1ZSBcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGN0eC5jb250cm9sTmFtZSA9IGxheW91dE5vZGUubmFtZTtcclxuICAgICAgY3R4LmNvbnRyb2xWYWx1ZSA9IGxheW91dE5vZGUudmFsdWUgfHwgbnVsbDtcclxuICAgICAgY29uc3QgZGF0YVBvaW50ZXIgPSB0aGlzLmdldERhdGFQb2ludGVyKGN0eCk7XHJcbiAgICAgIGlmIChiaW5kICYmIGRhdGFQb2ludGVyKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcclxuICAgICAgICAgIGB3YXJuaW5nOiBjb250cm9sIFwiJHtkYXRhUG9pbnRlcn1cIiBpcyBub3QgYm91bmQgdG8gdGhlIEFuZ3VsYXIgRm9ybUdyb3VwLmBcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvL2lmIHRoaXMgaXMgYSBJVEUgY29uZGl0aW9uYWwgZmllbGQsIHRoZSB2YWx1ZSB3b3VsZCBub3QgaGF2ZSBiZWVuXHJcbiAgICAvL3NldCwgYXMgdGhlIGNvbnRyb2wgd291bGQgb25seSBiZSBpbml0aWFsaXplZCB3aGVuIHRoZSBjb25kaXRpb24gaXMgdHJ1ZSBcclxuICAgIC8vVE9ETy1yZXZpZXcgbmVlZCB0byBkZWNpZGUgd2hpY2ggb2YgdGhlIGRhdGEgc2V0cyBiZXR3ZWVuIGRhdGEsZm9ybVZhbHVlcyBhbmQgZGVmYXVsdCBcclxuICAgIC8vdG8gdXNlIGZvciB0aGUgdmFsdWVcclxuICAgIC8vVE9ETyB0cnkgbWF5YmUgbWFya2luZyBkZXNjZW5kYW50cyBpbiBhcHBseUlURUNvbmRpdGlvbnNcclxuICAgIGxldCBpc0lURURlc2NlbmRhbnQ9bGF5b3V0Tm9kZT8uc2NoZW1hUG9pbnRlcj8uc3BsaXQoXCIvXCIpXHJcbiAgICAuc29tZShlbHQ9PltcInRoZW5cIixcImVsc2VcIl0uaW5jbHVkZXMoZWx0KSk7XHJcbiAgICBpZihjdHgub3B0aW9ucz8uY29uZGl0aW9uIHx8IGxheW91dE5vZGU/Lm9uZU9mUG9pbnRlciB8fCBsYXlvdXROb2RlPy5hbnlPZlBvaW50ZXIgfHwgaXNJVEVEZXNjZW5kYW50KXtcclxuICAgICAgY29uc3QgZGF0YVBvaW50ZXIgPSB0aGlzLmdldERhdGFQb2ludGVyKGN0eCk7XHJcbiAgICAgIGNvbnN0IGNvbnRyb2xWYWx1ZT1jdHguZm9ybUNvbnRyb2w/LnZhbHVlO1xyXG4gICAgICBjb25zdCBkYXRhVmFsdWU9SnNvblBvaW50ZXIuaGFzKHRoaXMuZGF0YSxkYXRhUG9pbnRlcik/XHJcbiAgICAgIEpzb25Qb2ludGVyLmdldCh0aGlzLmRhdGEsZGF0YVBvaW50ZXIpOnVuZGVmaW5lZDtcclxuICAgICAgY29uc3QgZm9ybVZhbHVlPUpzb25Qb2ludGVyLmhhcyh0aGlzLmZvcm1WYWx1ZXMsZGF0YVBvaW50ZXIpP1xyXG4gICAgICBKc29uUG9pbnRlci5nZXQodGhpcy5mb3JtVmFsdWVzLGRhdGFQb2ludGVyKTp1bmRlZmluZWQ7XHJcbiAgICAgIGNvbnN0IHNjaGVtYURlZmF1bHQ9Y3R4Lm9wdGlvbnM/LmRlZmF1bHQ7XHJcbiAgICAgIC8vaWYgaW5pdGlhbCBmb3JtVmFsdWVzIHdhcyBzdXBwbGllZCBhbmQgY29udHJvbFZhbHVlIG1hdGNoZXMgZm9ybVZhbHVlIHRoZW4gbGlrZWx5XHJcbiAgICAgIC8vY29udHJvbCB3YXMgaW5pdGlhbGx5IGNyZWF0ZWQgd2l0aCB0aGUgZm9ybVZhbHVlIHRoZW4gc2V0IHZhbHVlIHRvIGRhdGEgdmFsdWVcclxuICAgICAgXHJcbiAgICAgIC8vaWYgbm8gZm9ybVZhbHVlcyB3YXMgc3VwcGxpZWQgYW5kIGNvbnRyb2xWYWx1ZSBtYXRjaGVzIHNjaGVtYURlZmF1bHQgdGhlbiBsaWtlbHlcclxuICAgICAgLy9jb250cm9sIHdhcyBpbml0aWFsbHkgY3JlYXRlZCB3aXRoIHRoZSBkZWZhdWx0IHRoZW4gc2V0IHZhbHVlIHRvIGRhdGEgdmFsdWVcclxuICAgICAgY29uc3QgdmFsdWU9dGhpcy5mb3JtVmFsdWVzICYmIGlzRXF1YWwoZm9ybVZhbHVlLGNvbnRyb2xWYWx1ZSk/ZGF0YVZhbHVlXHJcbiAgICAgIDohdGhpcy5mb3JtVmFsdWVzICYmIGlzRXF1YWwoc2NoZW1hRGVmYXVsdCxjb250cm9sVmFsdWUpP2RhdGFWYWx1ZVxyXG4gICAgICA6c2NoZW1hRGVmYXVsdDtcclxuICAgICAgY3R4LmZvcm1Db250cm9sPy5wYXRjaFZhbHVlKHZhbHVlKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eC5ib3VuZENvbnRyb2w7XHJcbiAgfVxyXG5cclxuICBmb3JtYXRFcnJvcnMoZXJyb3JzOiBhbnksIHZhbGlkYXRpb25NZXNzYWdlczogYW55ID0ge30pOiBzdHJpbmcge1xyXG4gICAgaWYgKGlzRW1wdHkoZXJyb3JzKSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGlmICghaXNPYmplY3QodmFsaWRhdGlvbk1lc3NhZ2VzKSkge1xyXG4gICAgICB2YWxpZGF0aW9uTWVzc2FnZXMgPSB7fTtcclxuICAgIH1cclxuICAgIGNvbnN0IGFkZFNwYWNlcyA9IHN0cmluZyA9PlxyXG4gICAgICBzdHJpbmdbMF0udG9VcHBlckNhc2UoKSArXHJcbiAgICAgIChzdHJpbmcuc2xpY2UoMSkgfHwgJycpXHJcbiAgICAgICAgLnJlcGxhY2UoLyhbYS16XSkoW0EtWl0pL2csICckMSAkMicpXHJcbiAgICAgICAgLnJlcGxhY2UoL18vZywgJyAnKTtcclxuICAgIGNvbnN0IGZvcm1hdEVycm9yID0gZXJyb3IgPT5cclxuICAgICAgdHlwZW9mIGVycm9yID09PSAnb2JqZWN0J1xyXG4gICAgICAgID8gT2JqZWN0LmtleXMoZXJyb3IpXHJcbiAgICAgICAgICAubWFwKGtleSA9PlxyXG4gICAgICAgICAgICBlcnJvcltrZXldID09PSB0cnVlXHJcbiAgICAgICAgICAgICAgPyBhZGRTcGFjZXMoa2V5KVxyXG4gICAgICAgICAgICAgIDogZXJyb3Jba2V5XSA9PT0gZmFsc2VcclxuICAgICAgICAgICAgICAgID8gJ05vdCAnICsgYWRkU3BhY2VzKGtleSlcclxuICAgICAgICAgICAgICAgIDogYWRkU3BhY2VzKGtleSkgKyAnOiAnICsgZm9ybWF0RXJyb3IoZXJyb3Jba2V5XSlcclxuICAgICAgICAgIClcclxuICAgICAgICAgIC5qb2luKCcsICcpXHJcbiAgICAgICAgOiBhZGRTcGFjZXMoZXJyb3IudG9TdHJpbmcoKSk7XHJcbiAgICBjb25zdCBtZXNzYWdlcyA9IFtdO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgT2JqZWN0LmtleXMoZXJyb3JzKVxyXG4gICAgICAgIC8vIEhpZGUgJ3JlcXVpcmVkJyBlcnJvciwgdW5sZXNzIGl0IGlzIHRoZSBvbmx5IG9uZVxyXG4gICAgICAgIC5maWx0ZXIoXHJcbiAgICAgICAgICBlcnJvcktleSA9PlxyXG4gICAgICAgICAgICBlcnJvcktleSAhPT0gJ3JlcXVpcmVkJyB8fCBPYmplY3Qua2V5cyhlcnJvcnMpLmxlbmd0aCA9PT0gMVxyXG4gICAgICAgIClcclxuICAgICAgICAubWFwKGVycm9yS2V5ID0+XHJcbiAgICAgICAgICAvLyBJZiB2YWxpZGF0aW9uTWVzc2FnZXMgaXMgYSBzdHJpbmcsIHJldHVybiBpdFxyXG4gICAgICAgICAgdHlwZW9mIHZhbGlkYXRpb25NZXNzYWdlcyA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgPyB2YWxpZGF0aW9uTWVzc2FnZXNcclxuICAgICAgICAgICAgOiAvLyBJZiBjdXN0b20gZXJyb3IgbWVzc2FnZSBpcyBhIGZ1bmN0aW9uLCByZXR1cm4gZnVuY3Rpb24gcmVzdWx0XHJcbiAgICAgICAgICAgIHR5cGVvZiB2YWxpZGF0aW9uTWVzc2FnZXNbZXJyb3JLZXldID09PSAnZnVuY3Rpb24nXHJcbiAgICAgICAgICAgICAgPyB2YWxpZGF0aW9uTWVzc2FnZXNbZXJyb3JLZXldKGVycm9yc1tlcnJvcktleV0pXHJcbiAgICAgICAgICAgICAgOiAvLyBJZiBjdXN0b20gZXJyb3IgbWVzc2FnZSBpcyBhIHN0cmluZywgcmVwbGFjZSBwbGFjZWhvbGRlcnMgYW5kIHJldHVyblxyXG4gICAgICAgICAgICAgIHR5cGVvZiB2YWxpZGF0aW9uTWVzc2FnZXNbZXJyb3JLZXldID09PSAnc3RyaW5nJ1xyXG4gICAgICAgICAgICAgICAgPyAvLyBEb2VzIGVycm9yIG1lc3NhZ2UgaGF2ZSBhbnkge3twcm9wZXJ0eX19IHBsYWNlaG9sZGVycz9cclxuICAgICAgICAgICAgICAgICEve3suKz99fS8udGVzdCh2YWxpZGF0aW9uTWVzc2FnZXNbZXJyb3JLZXldKVxyXG4gICAgICAgICAgICAgICAgICA/IHZhbGlkYXRpb25NZXNzYWdlc1tlcnJvcktleV1cclxuICAgICAgICAgICAgICAgICAgOiAvLyBSZXBsYWNlIHt7cHJvcGVydHl9fSBwbGFjZWhvbGRlcnMgd2l0aCB2YWx1ZXNcclxuICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoZXJyb3JzW2Vycm9yS2V5XSkucmVkdWNlKFxyXG4gICAgICAgICAgICAgICAgICAgIChlcnJvck1lc3NhZ2UsIGVycm9yUHJvcGVydHkpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UucmVwbGFjZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFJlZ0V4cCgne3snICsgZXJyb3JQcm9wZXJ0eSArICd9fScsICdnJyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yc1tlcnJvcktleV1bZXJyb3JQcm9wZXJ0eV1cclxuICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbk1lc3NhZ2VzW2Vycm9yS2V5XVxyXG4gICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICA6IC8vIElmIG5vIGN1c3RvbSBlcnJvciBtZXNzYWdlLCByZXR1cm4gZm9ybWF0dGVkIGVycm9yIGRhdGEgaW5zdGVhZFxyXG4gICAgICAgICAgICAgICAgYWRkU3BhY2VzKGVycm9yS2V5KSArICcgRXJyb3I6ICcgKyBmb3JtYXRFcnJvcihlcnJvcnNbZXJyb3JLZXldKVxyXG4gICAgICAgIClcclxuICAgICAgICAuam9pbignPGJyPicpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlVmFsdWUoY3R4OiBXaWRnZXRDb250ZXh0LCB2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICAvLyBTZXQgdmFsdWUgb2YgY3VycmVudCBjb250cm9sXHJcbiAgICBjdHguY29udHJvbFZhbHVlID0gdmFsdWU7XHJcbiAgICBpZiAoY3R4LmJvdW5kQ29udHJvbCkge1xyXG4gICAgICBjdHguZm9ybUNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xyXG4gICAgICBjdHguZm9ybUNvbnRyb2wubWFya0FzRGlydHkoKTtcclxuICAgIH1cclxuICAgIGN0eC5sYXlvdXROb2RlKCkudmFsdWUgPSB2YWx1ZTtcclxuXHJcbiAgICAvLyBTZXQgdmFsdWVzIG9mIGFueSByZWxhdGVkIGNvbnRyb2xzIGluIGNvcHlWYWx1ZVRvIGFycmF5XHJcbiAgICBpZiAoaXNBcnJheShjdHgub3B0aW9ucy5jb3B5VmFsdWVUbykpIHtcclxuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGN0eC5vcHRpb25zLmNvcHlWYWx1ZVRvKSB7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0Q29udHJvbCA9IHRoaXMuZm9ybUdyb3VwICYmIGdldENvbnRyb2wodGhpcy5mb3JtR3JvdXAsIGl0ZW0pO1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGlzT2JqZWN0KHRhcmdldENvbnRyb2wpICYmXHJcbiAgICAgICAgICB0eXBlb2YgdGFyZ2V0Q29udHJvbC5zZXRWYWx1ZSA9PT0gJ2Z1bmN0aW9uJ1xyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGFyZ2V0Q29udHJvbC5zZXRWYWx1ZSh2YWx1ZSk7XHJcbiAgICAgICAgICB0YXJnZXRDb250cm9sLm1hcmtBc0RpcnR5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVBcnJheUNoZWNrYm94TGlzdChjdHg6IFdpZGdldENvbnRleHQsIGNoZWNrYm94TGlzdDogVGl0bGVNYXBJdGVtW10pOiB2b2lkIHtcclxuICAgIGNvbnN0IGZvcm1BcnJheSA9IDxVbnR5cGVkRm9ybUFycmF5PnRoaXMuZ2V0Rm9ybUNvbnRyb2woY3R4KTtcclxuXHJcbiAgICAvLyBSZW1vdmUgYWxsIGV4aXN0aW5nIGl0ZW1zXHJcbiAgICB3aGlsZSAoZm9ybUFycmF5LnZhbHVlLmxlbmd0aCkge1xyXG4gICAgICBmb3JtQXJyYXkucmVtb3ZlQXQoMCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmUtYWRkIGFuIGl0ZW0gZm9yIGVhY2ggY2hlY2tlZCBib3hcclxuICAgIGNvbnN0IHJlZlBvaW50ZXIgPSByZW1vdmVSZWN1cnNpdmVSZWZlcmVuY2VzKFxyXG4gICAgICBjdHgubGF5b3V0Tm9kZSgpLmRhdGFQb2ludGVyICsgJy8tJyxcclxuICAgICAgdGhpcy5kYXRhUmVjdXJzaXZlUmVmTWFwLFxyXG4gICAgICB0aGlzLmFycmF5TWFwXHJcbiAgICApO1xyXG4gICAgZm9yIChjb25zdCBjaGVja2JveEl0ZW0gb2YgY2hlY2tib3hMaXN0KSB7XHJcbiAgICAgIGlmIChjaGVja2JveEl0ZW0uY2hlY2tlZCkge1xyXG4gICAgICAgIGNvbnN0IG5ld0Zvcm1Db250cm9sID0gYnVpbGRGb3JtR3JvdXAoXHJcbiAgICAgICAgICB0aGlzLnRlbXBsYXRlUmVmTGlicmFyeVtyZWZQb2ludGVyXVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgbmV3Rm9ybUNvbnRyb2wuc2V0VmFsdWUoY2hlY2tib3hJdGVtLnZhbHVlKTtcclxuICAgICAgICBmb3JtQXJyYXkucHVzaChuZXdGb3JtQ29udHJvbCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGZvcm1BcnJheS5tYXJrQXNEaXJ0eSgpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlQXJyYXlNdWx0aVNlbGVjdExpc3QoY3R4OiBXaWRnZXRDb250ZXh0LCBzZWxlY3RMaXN0OiBUaXRsZU1hcEl0ZW1bXSk6IHZvaWQge1xyXG4gICAgdGhpcy51cGRhdGVBcnJheUNoZWNrYm94TGlzdChjdHgsc2VsZWN0TGlzdCk7XHJcbiAgICAvKiBjb25zdCBmb3JtQXJyYXkgPSA8VW50eXBlZEZvcm1BcnJheT50aGlzLmdldEZvcm1Db250cm9sKGN0eCk7XHJcblxyXG4gICAgLy8gUmVtb3ZlIGFsbCBleGlzdGluZyBpdGVtc1xyXG4gICAgd2hpbGUgKGZvcm1BcnJheS52YWx1ZS5sZW5ndGgpIHtcclxuICAgICAgZm9ybUFycmF5LnJlbW92ZUF0KDApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFJlLWFkZCBhbiBpdGVtIGZvciBlYWNoIGNoZWNrZWQgYm94XHJcbiAgICBjb25zdCByZWZQb2ludGVyID0gcmVtb3ZlUmVjdXJzaXZlUmVmZXJlbmNlcyhcclxuICAgICAgY3R4LmxheW91dE5vZGUoKS5kYXRhUG9pbnRlciArICcvLScsXHJcbiAgICAgIHRoaXMuZGF0YVJlY3Vyc2l2ZVJlZk1hcCxcclxuICAgICAgdGhpcy5hcnJheU1hcFxyXG4gICAgKTtcclxuICAgIGZvciAoY29uc3Qgc2VsZWN0SXRlbSBvZiBzZWxlY3RMaXN0KSB7XHJcbiAgICAgIGlmIChzZWxlY3RJdGVtLnZhbHVlKSB7XHJcbiAgICAgICAgY29uc3QgbmV3Rm9ybUNvbnRyb2wgPSBidWlsZEZvcm1Hcm91cChcclxuICAgICAgICAgIHRoaXMudGVtcGxhdGVSZWZMaWJyYXJ5W3JlZlBvaW50ZXJdXHJcbiAgICAgICAgKTtcclxuICAgICAgICBuZXdGb3JtQ29udHJvbC5zZXRWYWx1ZShzZWxlY3RJdGVtLnZhbHVlKTtcclxuICAgICAgICBmb3JtQXJyYXkucHVzaChuZXdGb3JtQ29udHJvbCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGZvcm1BcnJheS5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgKi9cclxuICB9XHJcbiAgZ2V0Rm9ybUNvbnRyb2woY3R4OiBXaWRnZXRDb250ZXh0KTogQWJzdHJhY3RDb250cm9sIHtcclxuICAgIGlmIChcclxuICAgICAgIWN0eCB8fCAhY3R4LmxheW91dE5vZGUgfHxcclxuICAgICAgIWlzRGVmaW5lZChjdHgubGF5b3V0Tm9kZSgpLmRhdGFQb2ludGVyKSB8fFxyXG4gICAgICBjdHgubGF5b3V0Tm9kZSgpLnR5cGUgPT09ICckcmVmJ1xyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc2NoZW1hUG9pbnRlcj1jdHgubGF5b3V0Tm9kZSgpPy5pc0lURUl0ZW0/Y3R4LmxheW91dE5vZGUoKT8uc2NoZW1hUG9pbnRlcjpudWxsO1xyXG4gICAgY29uc3Qgb25lT2ZQb2ludGVyPWN0eC5sYXlvdXROb2RlKCk/Lm9uZU9mUG9pbnRlcjtcclxuICAgIGNvbnN0IGFueU9mUG9pbnRlcj1jdHgubGF5b3V0Tm9kZSgpPy5hbnlPZlBvaW50ZXI7XHJcbiAgICByZXR1cm4gZ2V0Q29udHJvbCh0aGlzLmZvcm1Hcm91cCwgdGhpcy5nZXREYXRhUG9pbnRlcihjdHgpLGZhbHNlLHNjaGVtYVBvaW50ZXJ8fG9uZU9mUG9pbnRlcnx8YW55T2ZQb2ludGVyKTtcclxuICB9XHJcblxyXG4gIHNldEZvcm1Db250cm9sKGN0eDogV2lkZ2V0Q29udGV4dCxjb250cm9sOkFic3RyYWN0Q29udHJvbCk6IEFic3RyYWN0Q29udHJvbCB7XHJcbiAgICBpZiAoXHJcbiAgICAgICFjdHggfHwgIWN0eC5sYXlvdXROb2RlIHx8XHJcbiAgICAgICFpc0RlZmluZWQoY3R4LmxheW91dE5vZGUoKS5kYXRhUG9pbnRlcikgfHxcclxuICAgICAgY3R4LmxheW91dE5vZGUoKS50eXBlID09PSAnJHJlZidcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiBzZXRDb250cm9sKHRoaXMuZm9ybUdyb3VwLCB0aGlzLmdldERhdGFQb2ludGVyKGN0eCksY29udHJvbCk7XHJcbiAgfVxyXG5cclxuICBnZXRGb3JtQ29udHJvbFZhbHVlKGN0eDogV2lkZ2V0Q29udGV4dCk6IEFic3RyYWN0Q29udHJvbCB7XHJcblxyXG4gICAgaWYgKCFjdHggfHwgIWN0eC5sYXlvdXROb2RlIHx8IFxyXG4gICAgICAhaXNEZWZpbmVkKGN0eC5sYXlvdXROb2RlKCkuZGF0YVBvaW50ZXIpIHx8XHJcbiAgICAgIGN0eC5sYXlvdXROb2RlKCkudHlwZSA9PT0gJyRyZWYnXHJcbiAgICAgIHx8dGhpcy5mb3JtR3JvdXA9PW51bGxcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGNvbnN0IHNjaGVtYVBvaW50ZXI9Y3R4LmxheW91dE5vZGUoKT8uaXNJVEVJdGVtP2N0eC5sYXlvdXROb2RlKCk/LnNjaGVtYVBvaW50ZXI6bnVsbDtcclxuICAgIGNvbnN0IG9uZU9mUG9pbnRlcj1jdHgubGF5b3V0Tm9kZSgpPy5vbmVPZlBvaW50ZXI7XHJcbiAgICBjb25zdCBhbnlPZlBvaW50ZXI9Y3R4LmxheW91dE5vZGUoKT8uYW55T2ZQb2ludGVyO1xyXG4gICAgY29uc3QgY29udHJvbCA9IGdldENvbnRyb2wodGhpcy5mb3JtR3JvdXAsIHRoaXMuZ2V0RGF0YVBvaW50ZXIoY3R4KSxmYWxzZSxzY2hlbWFQb2ludGVyfHxvbmVPZlBvaW50ZXJ8fGFueU9mUG9pbnRlcik7XHJcbiAgICByZXR1cm4gY29udHJvbCA/IGNvbnRyb2wudmFsdWUgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0Rm9ybUNvbnRyb2xHcm91cChjdHg6IFdpZGdldENvbnRleHQpOiBVbnR5cGVkRm9ybUFycmF5IHwgVW50eXBlZEZvcm1Hcm91cCB7XHJcbiAgICBpZiAoIWN0eCB8fCAhY3R4LmxheW91dE5vZGUgfHwgIWlzRGVmaW5lZChjdHgubGF5b3V0Tm9kZSgpLmRhdGFQb2ludGVyKSB8fHRoaXMuZm9ybUdyb3VwPT1udWxsKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc2NoZW1hUG9pbnRlcj1jdHgubGF5b3V0Tm9kZSgpPy5pc0lURUl0ZW0/Y3R4LmxheW91dE5vZGUoKT8uc2NoZW1hUG9pbnRlcjpudWxsO1xyXG4gICAgY29uc3Qgb25lT2ZQb2ludGVyPWN0eC5sYXlvdXROb2RlKCk/Lm9uZU9mUG9pbnRlcjtcclxuICAgIGNvbnN0IGFueU9mUG9pbnRlcj1jdHgubGF5b3V0Tm9kZSgpPy5hbnlPZlBvaW50ZXI7XHJcbiAgICByZXR1cm4gZ2V0Q29udHJvbCh0aGlzLmZvcm1Hcm91cCwgdGhpcy5nZXREYXRhUG9pbnRlcihjdHgpLCB0cnVlLHNjaGVtYVBvaW50ZXJ8fG9uZU9mUG9pbnRlcnx8YW55T2ZQb2ludGVyKTtcclxuICB9XHJcblxyXG4gIGdldEZvcm1Db250cm9sTmFtZShjdHg6IFdpZGdldENvbnRleHQpOiBzdHJpbmcge1xyXG4gICAgaWYgKFxyXG4gICAgICAhY3R4IHx8ICFjdHgubGF5b3V0Tm9kZSB8fFxyXG4gICAgICAhaXNEZWZpbmVkKGN0eC5sYXlvdXROb2RlKCkuZGF0YVBvaW50ZXIpIHx8XHJcbiAgICAgICFoYXNWYWx1ZShjdHguZGF0YUluZGV4KCkpXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gSnNvblBvaW50ZXIudG9LZXkodGhpcy5nZXREYXRhUG9pbnRlcihjdHgpKTtcclxuICB9XHJcblxyXG4gIGdldExheW91dEFycmF5KGN0eDogV2lkZ2V0Q29udGV4dCk6IGFueVtdIHtcclxuICAgIHJldHVybiBKc29uUG9pbnRlci5nZXQodGhpcy5sYXlvdXQsIHRoaXMuZ2V0TGF5b3V0UG9pbnRlcihjdHgpLCAwLCAtMSk7XHJcbiAgfVxyXG5cclxuICBnZXRQYXJlbnROb2RlKGN0eDogV2lkZ2V0Q29udGV4dCk6IGFueSB7XHJcbiAgICByZXR1cm4gSnNvblBvaW50ZXIuZ2V0KHRoaXMubGF5b3V0LCB0aGlzLmdldExheW91dFBvaW50ZXIoY3R4KSwgMCwgLTIpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RGF0YVBvaW50ZXIoY3R4OiBXaWRnZXRDb250ZXh0KTogc3RyaW5nIHtcclxuICAgIGlmIChcclxuICAgICAgIWN0eCB8fCAhY3R4LmxheW91dE5vZGUgfHxcclxuICAgICAgIWlzRGVmaW5lZChjdHgubGF5b3V0Tm9kZSgpLmRhdGFQb2ludGVyKSB8fFxyXG4gICAgICAhaGFzVmFsdWUoY3R4LmRhdGFJbmRleCgpKVxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIEpzb25Qb2ludGVyLnRvSW5kZXhlZFBvaW50ZXIoXHJcbiAgICAgIGN0eC5sYXlvdXROb2RlKCkuZGF0YVBvaW50ZXIsXHJcbiAgICAgIGN0eC5kYXRhSW5kZXgoKSxcclxuICAgICAgdGhpcy5hcnJheU1hcFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldExheW91dFBvaW50ZXIoY3R4OiBXaWRnZXRDb250ZXh0KTogc3RyaW5nIHtcclxuICAgIGlmICghaGFzVmFsdWUoY3R4LmxheW91dEluZGV4KCkpKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICcvJyArIGN0eC5sYXlvdXRJbmRleCgpLmpvaW4oJy9pdGVtcy8nKTtcclxuICB9XHJcblxyXG4gIGlzQ29udHJvbEJvdW5kKGN0eDogV2lkZ2V0Q29udGV4dCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKFxyXG4gICAgICAhY3R4IHx8ICFjdHgubGF5b3V0Tm9kZSB8fFxyXG4gICAgICAhaXNEZWZpbmVkKGN0eC5sYXlvdXROb2RlKCkuZGF0YVBvaW50ZXIpIHx8XHJcbiAgICAgICFoYXNWYWx1ZShjdHguZGF0YUluZGV4KCkpXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY29udHJvbEdyb3VwID0gdGhpcy5nZXRGb3JtQ29udHJvbEdyb3VwKGN0eCk7XHJcbiAgICBjb25zdCBuYW1lID0gdGhpcy5nZXRGb3JtQ29udHJvbE5hbWUoY3R4KTtcclxuICAgIHJldHVybiBjb250cm9sR3JvdXAgPyBoYXNPd24oY29udHJvbEdyb3VwLmNvbnRyb2xzLCBuYW1lKSA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgYWRkSXRlbShjdHg6IFdpZGdldENvbnRleHQsIG5hbWU/OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmIChcclxuICAgICAgIWN0eCB8fCAhY3R4LmxheW91dE5vZGUgfHxcclxuICAgICAgIWlzRGVmaW5lZChjdHgubGF5b3V0Tm9kZSgpLiRyZWYpIHx8XHJcbiAgICAgICFoYXNWYWx1ZShjdHguZGF0YUluZGV4KCkpIHx8XHJcbiAgICAgICFoYXNWYWx1ZShjdHgubGF5b3V0SW5kZXgoKSlcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ3JlYXRlIGEgbmV3IEFuZ3VsYXIgZm9ybSBjb250cm9sIGZyb20gYSB0ZW1wbGF0ZSBpbiB0ZW1wbGF0ZVJlZkxpYnJhcnlcclxuICAgIGNvbnN0IG5ld0Zvcm1Hcm91cCA9IGJ1aWxkRm9ybUdyb3VwKFxyXG4gICAgICB0aGlzLnRlbXBsYXRlUmVmTGlicmFyeVtjdHgubGF5b3V0Tm9kZSgpLiRyZWZdXHJcbiAgICApO1xyXG5cclxuICAgIC8vIEFkZCB0aGUgbmV3IGZvcm0gY29udHJvbCB0byB0aGUgcGFyZW50IGZvcm1BcnJheSBvciBmb3JtR3JvdXBcclxuICAgIGlmIChjdHgubGF5b3V0Tm9kZSgpLmFycmF5SXRlbSkge1xyXG4gICAgICAvLyBBZGQgbmV3IGFycmF5IGl0ZW0gdG8gZm9ybUFycmF5XHJcbiAgICAgICg8VW50eXBlZEZvcm1BcnJheT50aGlzLmdldEZvcm1Db250cm9sR3JvdXAoY3R4KSkucHVzaChuZXdGb3JtR3JvdXApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gQWRkIG5ldyAkcmVmIGl0ZW0gdG8gZm9ybUdyb3VwXHJcbiAgICAgICg8VW50eXBlZEZvcm1Hcm91cD50aGlzLmdldEZvcm1Db250cm9sR3JvdXAoY3R4KSkuYWRkQ29udHJvbChcclxuICAgICAgICBuYW1lIHx8IHRoaXMuZ2V0Rm9ybUNvbnRyb2xOYW1lKGN0eCksXHJcbiAgICAgICAgbmV3Rm9ybUdyb3VwXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ29weSBhIG5ldyBsYXlvdXROb2RlIGZyb20gbGF5b3V0UmVmTGlicmFyeVxyXG4gICAgY29uc3QgbmV3TGF5b3V0Tm9kZSA9IGdldExheW91dE5vZGUoY3R4LmxheW91dE5vZGUoKSwgdGhpcyk7XHJcbiAgICBuZXdMYXlvdXROb2RlLmFycmF5SXRlbSA9IGN0eC5sYXlvdXROb2RlKCkuYXJyYXlJdGVtO1xyXG4gICAgaWYgKGN0eC5sYXlvdXROb2RlKCkuYXJyYXlJdGVtVHlwZSkge1xyXG4gICAgICBuZXdMYXlvdXROb2RlLmFycmF5SXRlbVR5cGUgPSBjdHgubGF5b3V0Tm9kZSgpLmFycmF5SXRlbVR5cGU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkZWxldGUgbmV3TGF5b3V0Tm9kZS5hcnJheUl0ZW1UeXBlO1xyXG4gICAgfVxyXG4gICAgaWYgKG5hbWUpIHtcclxuICAgICAgbmV3TGF5b3V0Tm9kZS5uYW1lID0gbmFtZTtcclxuICAgICAgbmV3TGF5b3V0Tm9kZS5kYXRhUG9pbnRlciArPSAnLycgKyBKc29uUG9pbnRlci5lc2NhcGUobmFtZSk7XHJcbiAgICAgIG5ld0xheW91dE5vZGUub3B0aW9ucy50aXRsZSA9IGZpeFRpdGxlKG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEFkZCB0aGUgbmV3IGxheW91dE5vZGUgdG8gdGhlIGZvcm0gbGF5b3V0XHJcbiAgICBKc29uUG9pbnRlci5pbnNlcnQodGhpcy5sYXlvdXQsIHRoaXMuZ2V0TGF5b3V0UG9pbnRlcihjdHgpLCBuZXdMYXlvdXROb2RlKTtcclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIG1vdmVBcnJheUl0ZW0oY3R4OiBXaWRnZXRDb250ZXh0LCBvbGRJbmRleDogbnVtYmVyLCBuZXdJbmRleDogbnVtYmVyLG1vdmVMYXlvdXQ6Ym9vbGVhbj10cnVlKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoXHJcbiAgICAgICFjdHggfHwgIWN0eC5sYXlvdXROb2RlIHx8XHJcbiAgICAgICFpc0RlZmluZWQoY3R4LmxheW91dE5vZGUoKS5kYXRhUG9pbnRlcikgfHxcclxuICAgICAgIWhhc1ZhbHVlKGN0eC5kYXRhSW5kZXgoKSkgfHxcclxuICAgICAgIWhhc1ZhbHVlKGN0eC5sYXlvdXRJbmRleCgpKSB8fFxyXG4gICAgICAhaXNEZWZpbmVkKG9sZEluZGV4KSB8fFxyXG4gICAgICAhaXNEZWZpbmVkKG5ld0luZGV4KSB8fFxyXG4gICAgICBvbGRJbmRleCA9PT0gbmV3SW5kZXhcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTW92ZSBpdGVtIGluIHRoZSBmb3JtQXJyYXlcclxuICAgIGNvbnN0IGZvcm1BcnJheSA9IDxVbnR5cGVkRm9ybUFycmF5PnRoaXMuZ2V0Rm9ybUNvbnRyb2xHcm91cChjdHgpO1xyXG4gICAgaWYob2xkSW5kZXggPj1mb3JtQXJyYXkubGVuZ3RoKXtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYXJyYXlJdGVtID0gZm9ybUFycmF5LmF0KG9sZEluZGV4KTtcclxuICAgIGZvcm1BcnJheS5yZW1vdmVBdChvbGRJbmRleCk7XHJcbiAgICBmb3JtQXJyYXkuaW5zZXJ0KG5ld0luZGV4LCBhcnJheUl0ZW0pO1xyXG4gICAgZm9ybUFycmF5LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuXHJcbiAgICAvLyBNb3ZlIGxheW91dCBpdGVtXHJcbiAgICBpZihtb3ZlTGF5b3V0KXtcclxuICAgICAgY29uc3QgbGF5b3V0QXJyYXkgPSB0aGlzLmdldExheW91dEFycmF5KGN0eCk7XHJcbiAgICAgIGxheW91dEFycmF5LnNwbGljZShuZXdJbmRleCwgMCwgbGF5b3V0QXJyYXkuc3BsaWNlKG9sZEluZGV4LCAxKVswXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICByZW1vdmVJdGVtKGN0eDogV2lkZ2V0Q29udGV4dCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKFxyXG4gICAgICAhY3R4IHx8ICFjdHgubGF5b3V0Tm9kZSB8fFxyXG4gICAgICAhaXNEZWZpbmVkKGN0eC5sYXlvdXROb2RlKCkuZGF0YVBvaW50ZXIpIHx8XHJcbiAgICAgICFoYXNWYWx1ZShjdHguZGF0YUluZGV4KCkpIHx8XHJcbiAgICAgICFoYXNWYWx1ZShjdHgubGF5b3V0SW5kZXgoKSlcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVtb3ZlIHRoZSBBbmd1bGFyIGZvcm0gY29udHJvbCBmcm9tIHRoZSBwYXJlbnQgZm9ybUFycmF5IG9yIGZvcm1Hcm91cFxyXG4gICAgaWYgKGN0eC5sYXlvdXROb2RlKCkuYXJyYXlJdGVtKSB7XHJcbiAgICAgIC8vIFJlbW92ZSBhcnJheSBpdGVtIGZyb20gZm9ybUFycmF5XHJcbiAgICAgICg8VW50eXBlZEZvcm1BcnJheT50aGlzLmdldEZvcm1Db250cm9sR3JvdXAoY3R4KSkucmVtb3ZlQXQoXHJcbiAgICAgICAgY3R4LmRhdGFJbmRleCgpW2N0eC5kYXRhSW5kZXgoKS5sZW5ndGggLSAxXVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gUmVtb3ZlICRyZWYgaXRlbSBmcm9tIGZvcm1Hcm91cFxyXG4gICAgICAoPFVudHlwZWRGb3JtR3JvdXA+dGhpcy5nZXRGb3JtQ29udHJvbEdyb3VwKGN0eCkpLnJlbW92ZUNvbnRyb2woXHJcbiAgICAgICAgdGhpcy5nZXRGb3JtQ29udHJvbE5hbWUoY3R4KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFJlbW92ZSBsYXlvdXROb2RlIGZyb20gbGF5b3V0XHJcbiAgICBKc29uUG9pbnRlci5yZW1vdmUodGhpcy5sYXlvdXQsIHRoaXMuZ2V0TGF5b3V0UG9pbnRlcihjdHgpKTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgIC8vVE9ETyBmaXgtZG9lc250IHNlZW0gdG8gd29yayBmb3IgbmVzdGVkIGFycmF5XHJcbiAgICBhZGp1c3RMYXlvdXQobGF5b3V0OmFueSwgbmV3RGF0YTogYW55LGN1cnJMYXlvdXRJbmRleD1bMF0sY3VyckRhdGFJbmRleD1bXSkge1xyXG4gICAgICBjb25zdCBjcmVhdGVXaWRnZXRDdHg9KGxheW91dE5vZGU6YW55LGxheW91dEluZGV4OmFueSxkYXRhSW5kZXg6YW55KTphbnk9PntcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgbGF5b3V0Tm9kZTogKCk9PntyZXR1cm4gbGF5b3V0Tm9kZX0sXHJcbiAgICAgICAgICBsYXlvdXRJbmRleDogKCk9PntyZXR1cm4gbGF5b3V0SW5kZXh9LFxyXG4gICAgICAgICAgZGF0YUluZGV4OiAoKT0+e3JldHVybiBkYXRhSW5kZXh9LFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvLyBjb25zb2xlLmxvZyhgYWRqdXN0TGF5b3V0IGN1cnJMYXlvdXRJbmRleDoke2N1cnJMYXlvdXRJbmRleH1gKTtcclxuICAgICAgaWYobGF5b3V0Lml0ZW1zICYmIF9pc0FycmF5KG5ld0RhdGEpKXtcclxuICAgICAgICBsZXQgY3R4PWNyZWF0ZVdpZGdldEN0eChcclxuICAgICAgICAgIHsvL2FkZCBhIHJlZiBub2RlIHRvIGJlIHRoYXQgb2YgZmlyc3QgaXRlbXMgZGF0YXBvaW50ZXJcclxuXHJcbiAgICAgICAgICAgIC4uLmxheW91dCxcclxuICAgICAgICAgICAgJHJlZjpsYXlvdXQuJHJlZnx8bGF5b3V0Lml0ZW1zWzBdPy5kYXRhUG9pbnRlcixcclxuICAgICAgICAgICAgZGF0YVBvaW50ZXI6bGF5b3V0Lml0ZW1zWzBdPy5kYXRhUG9pbnRlcixcclxuICAgICAgICAgICAgYXJyYXlJdGVtOiB0cnVlLFxyXG4gICAgICAgICAgICBhcnJheUl0ZW1UeXBlOiBcImxpc3RcIlxyXG4gICAgICAgICAgXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAsWy4uLmN1cnJMYXlvdXRJbmRleC5zbGljZSgwLCBjdXJyTGF5b3V0SW5kZXgubGVuZ3RoIC0gMSksbGF5b3V0Lml0ZW1zLmxlbmd0aC0xXVxyXG4gICAgICAgICAgLFsuLi5jdXJyRGF0YUluZGV4LnNsaWNlKDAsIGN1cnJEYXRhSW5kZXgubGVuZ3RoIC0gMSksbGF5b3V0Lml0ZW1zLmxlbmd0aC0xXSk7XHJcbiAgICAgICAgY29uc3QgbGVuZ3RoRGlmZmVyZW5jZSA9IG5ld0RhdGEubGVuZ3RoIC0gbGF5b3V0Lml0ZW1zLmZpbHRlcihsaXRlbT0+e1xyXG4gICAgICAgICAgcmV0dXJuIGxpdGVtPy50eXBlIT1cIiRyZWZcIlxyXG4gICAgICAgIH0pLmxlbmd0aDtcclxuICAgICAgICBpZiAobGVuZ3RoRGlmZmVyZW5jZSA+IDApIHtcclxuICAgICAgICAgIC8vIEFkZCBtaXNzaW5nIGNvbnRyb2xzIGlmIG5ld0RhdGEgaGFzIG1vcmUgaXRlbXNcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoRGlmZmVyZW5jZTsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkSXRlbShjdHgpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChsZW5ndGhEaWZmZXJlbmNlIDwgMCkge1xyXG4gICAgICAgICAgbGV0IG51bVRvUmVtb3ZlPWxheW91dC5pdGVtcy5maWx0ZXIobGl0ZW09PntcclxuICAgICAgICAgICAgcmV0dXJuIGxpdGVtPy50eXBlIT1cIiRyZWZcIlxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5sZW5ndGgtbmV3RGF0YS5sZW5ndGg7XHJcbiAgICAgICAgICAvLyBSZW1vdmUgZXh0cmEgY29udHJvbHMgaWYgbmV3RGF0YSBoYXMgZmV3ZXIgaXRlbXNcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpPCBudW1Ub1JlbW92ZTsgaSsrKSB7XHJcbiAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGxldCBvbGREYXRhSW5kZXg9Y3R4LmRhdGFJbmRleCgpO1xyXG4gICAgICAgICAgICBsZXQgbGFzdERhdGFJbmRleD1vbGREYXRhSW5kZXhbb2xkRGF0YUluZGV4Lmxlbmd0aC0xXTtcclxuICAgICAgICAgICAgbGV0IHVwZGF0ZWRMYXlvdXRJbmRleD1bLi4uY3VyckxheW91dEluZGV4LnNsaWNlKDAsIGN1cnJMYXlvdXRJbmRleC5sZW5ndGggLSAxKSwwXVxyXG4gICAgICAgICAgICBsZXQgdXBkYXRlZERhdGFJbmRleD1bLi4ub2xkRGF0YUluZGV4LnNsaWNlKDAsIG9sZERhdGFJbmRleC5sZW5ndGggLSAxKSwwXTtcclxuICAgICAgICAgICAgY3R4PWNyZWF0ZVdpZGdldEN0eChjdHgubGF5b3V0Tm9kZSgpLHVwZGF0ZWRMYXlvdXRJbmRleCx1cGRhdGVkRGF0YUluZGV4KVxyXG4gICAgICAgICAgICBsZXQgcmVtb3ZlZD10aGlzLnJlbW92ZUl0ZW0oY3R4KTtcclxuICAgICAgICAgICAvLyBpZihyZW1vdmVkKXtcclxuXHJcbiAgICAgICAgICAgIC8vfVxyXG5cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFxyXG4gICAgICB9XHJcbiAgICAgIGlmKF9pc0FycmF5KGxheW91dCkgKXtcclxuICAgICAgICBsYXlvdXQuZm9yRWFjaCgobGF5b3V0Tm9kZSxpbmQpPT57XHJcbiAgICAgICAgICAvL2lmKGxheW91dE5vZGUuaXRlbXMpe1xyXG4gICAgICAgICAgICBsZXQgbGF5b3V0TWFwcGVkRGF0YT1sYXlvdXROb2RlLmRhdGFQb2ludGVyP0pzb25Qb2ludGVyLmdldChuZXdEYXRhLGxheW91dE5vZGUuZGF0YVBvaW50ZXIpXHJcbiAgICAgICAgICAgIDp1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIHRoaXMuYWRqdXN0TGF5b3V0KGxheW91dE5vZGUsbGF5b3V0TWFwcGVkRGF0YSxbLi4uY3VyckxheW91dEluZGV4LGluZF0sWy4uLmN1cnJEYXRhSW5kZXgsaW5kXSk7XHJcbiAgICAgICAgICAvLy99XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBcclxufVxyXG4iXX0=
|