@sapui5/sap.fe.templates 1.113.0 → 1.114.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/templates/.library +1 -1
- package/src/sap/fe/templates/AnalyticalListPage/manifest.json +1 -1
- package/src/sap/fe/templates/ListReport/ListReportController-dbg.controller.js +3 -2
- package/src/sap/fe/templates/ListReport/ListReportController.controller.js +1 -1
- package/src/sap/fe/templates/ListReport/ListReportController.controller.js.map +1 -1
- package/src/sap/fe/templates/ListReport/ListReportController.controller.ts +6 -1
- package/src/sap/fe/templates/ListReport/ListReportTemplating-dbg.js +7 -7
- package/src/sap/fe/templates/ListReport/ListReportTemplating.js.map +1 -1
- package/src/sap/fe/templates/ListReport/ListReportTemplating.ts +8 -6
- package/src/sap/fe/templates/ListReport/manifest.json +1 -1
- package/src/sap/fe/templates/ListReport/overrides/ViewState-dbg.js +14 -39
- package/src/sap/fe/templates/ListReport/overrides/ViewState.js +1 -1
- package/src/sap/fe/templates/ListReport/overrides/ViewState.js.map +1 -1
- package/src/sap/fe/templates/ListReport/overrides/ViewState.ts +14 -42
- package/src/sap/fe/templates/ListReport/view/fragments/MacroChart.fragment.xml +1 -1
- package/src/sap/fe/templates/ObjectPage/ExtensionAPI-dbg.js +19 -6
- package/src/sap/fe/templates/ObjectPage/ExtensionAPI.js +1 -1
- package/src/sap/fe/templates/ObjectPage/ExtensionAPI.js.map +1 -1
- package/src/sap/fe/templates/ObjectPage/ExtensionAPI.ts +19 -9
- package/src/sap/fe/templates/ObjectPage/ObjectPage.view.xml +5 -1
- package/src/sap/fe/templates/ObjectPage/ObjectPageController-dbg.controller.js +53 -66
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +1 -1
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js.map +1 -1
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.ts +56 -71
- package/src/sap/fe/templates/ObjectPage/manifest.json +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/Share-dbg.js +7 -2
- package/src/sap/fe/templates/ObjectPage/overrides/Share.js +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/Share.js.map +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/Share.ts +5 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/Actions.fragment.xml +3 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/FooterContent.block-dbg.js +7 -6
- package/src/sap/fe/templates/ObjectPage/view/fragments/FooterContent.block.js +1 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/FooterContent.block.js.map +1 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/FooterContent.block.tsx +8 -7
- package/src/sap/fe/templates/ObjectPage/view/fragments/MacroChart.fragment.xml +1 -1
- package/src/sap/fe/templates/library-dbg.js +1 -1
- package/src/sap/fe/templates/library-preload.js +15 -15
- package/src/sap/fe/templates/library-preload.js.map +1 -1
- package/src/sap/fe/templates/library.js +1 -1
- package/src/sap/fe/templates/manifest.json +1 -1
- package/src/sap/fe/templates/messagebundle.properties +6 -0
- package/src/sap/fe/templates/messagebundle_ar.properties +2 -0
- package/src/sap/fe/templates/messagebundle_bg.properties +2 -0
- package/src/sap/fe/templates/messagebundle_ca.properties +2 -0
- package/src/sap/fe/templates/messagebundle_cs.properties +2 -0
- package/src/sap/fe/templates/messagebundle_cy.properties +2 -0
- package/src/sap/fe/templates/messagebundle_da.properties +2 -0
- package/src/sap/fe/templates/messagebundle_de.properties +3 -1
- package/src/sap/fe/templates/messagebundle_el.properties +2 -0
- package/src/sap/fe/templates/messagebundle_en.properties +2 -2
- package/src/sap/fe/templates/messagebundle_en_GB.properties +2 -0
- package/src/sap/fe/templates/messagebundle_en_US_sappsd.properties +2 -0
- package/src/sap/fe/templates/messagebundle_en_US_saprigi.properties +2 -0
- package/src/sap/fe/templates/messagebundle_en_US_saptrc.properties +2 -0
- package/src/sap/fe/templates/messagebundle_es.properties +2 -0
- package/src/sap/fe/templates/messagebundle_es_MX.properties +2 -0
- package/src/sap/fe/templates/messagebundle_et.properties +2 -0
- package/src/sap/fe/templates/messagebundle_fi.properties +2 -0
- package/src/sap/fe/templates/messagebundle_fr.properties +2 -0
- package/src/sap/fe/templates/messagebundle_fr_CA.properties +2 -0
- package/src/sap/fe/templates/messagebundle_hi.properties +2 -0
- package/src/sap/fe/templates/messagebundle_hr.properties +2 -0
- package/src/sap/fe/templates/messagebundle_hu.properties +2 -0
- package/src/sap/fe/templates/messagebundle_id.properties +2 -0
- package/src/sap/fe/templates/messagebundle_it.properties +2 -0
- package/src/sap/fe/templates/messagebundle_iw.properties +2 -0
- package/src/sap/fe/templates/messagebundle_ja.properties +2 -0
- package/src/sap/fe/templates/messagebundle_kk.properties +2 -0
- package/src/sap/fe/templates/messagebundle_ko.properties +2 -0
- package/src/sap/fe/templates/messagebundle_lt.properties +2 -0
- package/src/sap/fe/templates/messagebundle_lv.properties +2 -0
- package/src/sap/fe/templates/messagebundle_ms.properties +2 -0
- package/src/sap/fe/templates/messagebundle_nl.properties +2 -0
- package/src/sap/fe/templates/messagebundle_no.properties +2 -0
- package/src/sap/fe/templates/messagebundle_pl.properties +2 -0
- package/src/sap/fe/templates/messagebundle_pt.properties +2 -0
- package/src/sap/fe/templates/messagebundle_pt_PT.properties +2 -0
- package/src/sap/fe/templates/messagebundle_ro.properties +2 -0
- package/src/sap/fe/templates/messagebundle_ru.properties +2 -0
- package/src/sap/fe/templates/messagebundle_sh.properties +2 -0
- package/src/sap/fe/templates/messagebundle_sk.properties +2 -0
- package/src/sap/fe/templates/messagebundle_sl.properties +2 -0
- package/src/sap/fe/templates/messagebundle_sv.properties +2 -0
- package/src/sap/fe/templates/messagebundle_th.properties +2 -0
- package/src/sap/fe/templates/messagebundle_tr.properties +2 -0
- package/src/sap/fe/templates/messagebundle_uk.properties +2 -0
- package/src/sap/fe/templates/messagebundle_vi.properties +2 -0
- package/src/sap/fe/templates/messagebundle_zh_CN.properties +2 -0
- package/src/sap/fe/templates/messagebundle_zh_TW.properties +2 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2023 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime", "sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/BusyLocker", "sap/fe/core/controllerextensions/collaboration/ActivitySync", "sap/fe/core/controllerextensions/collaboration/Manage", "sap/fe/core/controllerextensions/editFlow/draft", "sap/fe/core/controllerextensions/IntentBasedNavigation", "sap/fe/core/controllerextensions/InternalIntentBasedNavigation", "sap/fe/core/controllerextensions/InternalRouting", "sap/fe/core/controllerextensions/MassEdit", "sap/fe/core/controllerextensions/MessageHandler", "sap/fe/core/controllerextensions/PageReady", "sap/fe/core/controllerextensions/Paginator", "sap/fe/core/controllerextensions/Placeholder", "sap/fe/core/controllerextensions/Share", "sap/fe/core/controllerextensions/ViewState", "sap/fe/core/helpers/ClassSupport", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/ResourceModelHelper", "sap/fe/core/PageController", "sap/fe/macros/CommonHelper", "sap/fe/macros/DelegateUtil", "sap/fe/macros/table/TableHelper", "sap/fe/macros/table/Utils", "sap/fe/navigation/SelectionVariant", "sap/fe/templates/ObjectPage/ExtensionAPI", "sap/fe/templates/TableScroller", "sap/m/InstanceManager", "sap/m/Link", "sap/m/MessageBox", "sap/ui/core/Core", "sap/ui/core/mvc/OverrideExecution", "sap/ui/model/odata/v4/ODataListBinding", "./overrides/IntentBasedNavigation", "./overrides/InternalRouting", "./overrides/MessageHandler", "./overrides/Paginator", "./overrides/Share", "./overrides/ViewState"], function (Log, merge, ActionRuntime, CommonUtils, BusyLocker, ActivitySync, Manage, draft, IntentBasedNavigation, InternalIntentBasedNavigation, InternalRouting, MassEdit, MessageHandler, PageReady, Paginator, Placeholder, Share, ViewState, ClassSupport, ModelHelper, ResourceModelHelper, PageController, CommonHelper, DelegateUtil, TableHelper, TableUtils, SelectionVariant, ExtensionAPI, TableScroller, InstanceManager, Link, MessageBox, Core, OverrideExecution, ODataListBinding, IntentBasedNavigationOverride, InternalRoutingOverride, MessageHandlerOverride, PaginatorOverride, ShareOverrides, ViewStateOverrides) {
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime", "sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/BusyLocker", "sap/fe/core/controllerextensions/collaboration/ActivitySync", "sap/fe/core/controllerextensions/collaboration/Manage", "sap/fe/core/controllerextensions/editFlow/draft", "sap/fe/core/controllerextensions/IntentBasedNavigation", "sap/fe/core/controllerextensions/InternalIntentBasedNavigation", "sap/fe/core/controllerextensions/InternalRouting", "sap/fe/core/controllerextensions/MassEdit", "sap/fe/core/controllerextensions/MessageHandler", "sap/fe/core/controllerextensions/PageReady", "sap/fe/core/controllerextensions/Paginator", "sap/fe/core/controllerextensions/Placeholder", "sap/fe/core/controllerextensions/Share", "sap/fe/core/controllerextensions/ViewState", "sap/fe/core/helpers/ClassSupport", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/ResourceModelHelper", "sap/fe/core/library", "sap/fe/core/PageController", "sap/fe/macros/CommonHelper", "sap/fe/macros/DelegateUtil", "sap/fe/macros/table/TableHelper", "sap/fe/macros/table/Utils", "sap/fe/navigation/SelectionVariant", "sap/fe/templates/ObjectPage/ExtensionAPI", "sap/fe/templates/TableScroller", "sap/m/InstanceManager", "sap/m/Link", "sap/m/MessageBox", "sap/ui/core/Core", "sap/ui/core/message/Message", "sap/ui/core/mvc/OverrideExecution", "sap/ui/model/odata/v4/ODataListBinding", "./overrides/IntentBasedNavigation", "./overrides/InternalRouting", "./overrides/MessageHandler", "./overrides/Paginator", "./overrides/Share", "./overrides/ViewState"], function (Log, merge, ActionRuntime, CommonUtils, BusyLocker, ActivitySync, Manage, draft, IntentBasedNavigation, InternalIntentBasedNavigation, InternalRouting, MassEdit, MessageHandler, PageReady, Paginator, Placeholder, Share, ViewState, ClassSupport, ModelHelper, ResourceModelHelper, FELibrary, PageController, CommonHelper, DelegateUtil, TableHelper, TableUtils, SelectionVariant, ExtensionAPI, TableScroller, InstanceManager, Link, MessageBox, Core, Message, OverrideExecution, ODataListBinding, IntentBasedNavigationOverride, InternalRoutingOverride, MessageHandlerOverride, PaginatorOverride, ShareOverrides, ViewStateOverrides) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor10;
|
|
@@ -23,6 +23,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
|
|
|
23
23
|
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
|
24
24
|
function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var desc = {}; Object.keys(descriptor).forEach(function (key) { desc[key] = descriptor[key]; }); desc.enumerable = !!desc.enumerable; desc.configurable = !!desc.configurable; if ('value' in desc || desc.initializer) { desc.writable = true; } desc = decorators.slice().reverse().reduce(function (desc, decorator) { return decorator(target, property, desc) || desc; }, desc); if (context && desc.initializer !== void 0) { desc.value = desc.initializer ? desc.initializer.call(context) : void 0; desc.initializer = undefined; } if (desc.initializer === void 0) { Object.defineProperty(target, property, desc); desc = null; } return desc; }
|
|
25
25
|
function _initializerWarningHelper(descriptor, context) { throw new Error('Decorating class property failed. Please ensure that ' + 'proposal-class-properties is enabled and runs after the decorators transform.'); }
|
|
26
|
+
const ProgrammingModel = FELibrary.ProgrammingModel;
|
|
26
27
|
let ObjectPageController = (_dec = defineUI5Class("sap.fe.templates.ObjectPage.ObjectPageController"), _dec2 = usingExtension(Placeholder), _dec3 = usingExtension(Share.override(ShareOverrides)), _dec4 = usingExtension(InternalRouting.override(InternalRoutingOverride)), _dec5 = usingExtension(Paginator.override(PaginatorOverride)), _dec6 = usingExtension(MessageHandler.override(MessageHandlerOverride)), _dec7 = usingExtension(IntentBasedNavigation.override(IntentBasedNavigationOverride)), _dec8 = usingExtension(InternalIntentBasedNavigation.override({
|
|
27
28
|
getNavigationMode: function () {
|
|
28
29
|
const bIsStickyEditMode = this.getView().getController().getStickyEditMode && this.getView().getController().getStickyEditMode();
|
|
@@ -350,11 +351,13 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
|
|
|
350
351
|
_proto._fnShowOPMessage = function _fnShowOPMessage() {
|
|
351
352
|
const extensionAPI = this.getExtensionAPI();
|
|
352
353
|
const view = this.getView();
|
|
354
|
+
const internalContext = view === null || view === void 0 ? void 0 : view.getBindingContext("internal");
|
|
355
|
+
const stripVisible = internalContext === null || internalContext === void 0 ? void 0 : internalContext.getProperty("OPMessageStripVisibility");
|
|
353
356
|
const messages = this.messageButton.oMessagePopover.getItems().map(item => item.getBindingContext("message").getObject()).filter(message => {
|
|
354
357
|
var _view$getBindingConte;
|
|
355
358
|
return message.getTargets()[0] === ((_view$getBindingConte = view.getBindingContext()) === null || _view$getBindingConte === void 0 ? void 0 : _view$getBindingConte.getPath());
|
|
356
359
|
});
|
|
357
|
-
if (extensionAPI) {
|
|
360
|
+
if (extensionAPI && !(messages.length === 0 && stripVisible)) {
|
|
358
361
|
extensionAPI.showMessages(messages);
|
|
359
362
|
}
|
|
360
363
|
};
|
|
@@ -363,16 +366,17 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
|
|
|
363
366
|
}
|
|
364
367
|
|
|
365
368
|
/**
|
|
366
|
-
* Find the last visible subsection and add the sapUxAPObjectPageSubSectionFitContainer CSS class if it contains only a
|
|
369
|
+
* Find the last visible subsection and add the sapUxAPObjectPageSubSectionFitContainer CSS class if it contains only a GridTable or a TreeTable.
|
|
367
370
|
*
|
|
368
371
|
* @param subSections The sub sections to look for
|
|
369
372
|
* @private
|
|
370
373
|
*/;
|
|
371
|
-
_proto.
|
|
374
|
+
_proto.checkSectionsForNonResponsiveTable = function checkSectionsForNonResponsiveTable(subSections) {
|
|
372
375
|
const changeClassForTables = (event, lastVisibleSubSection) => {
|
|
373
|
-
var _this$searchTableInBl
|
|
376
|
+
var _this$searchTableInBl;
|
|
374
377
|
const blocks = [...lastVisibleSubSection.getBlocks(), ...lastVisibleSubSection.getMoreBlocks()];
|
|
375
|
-
|
|
378
|
+
const tableType = blocks.length === 1 && ((_this$searchTableInBl = this.searchTableInBlock(blocks[0])) === null || _this$searchTableInBl === void 0 ? void 0 : _this$searchTableInBl.getType());
|
|
379
|
+
if (tableType && (tableType !== null && tableType !== void 0 && tableType.isA("sap.ui.mdc.table.GridTableType") || tableType !== null && tableType !== void 0 && tableType.isA("sap.ui.mdc.table.TreeTableType"))) {
|
|
376
380
|
//In case there is only a single table in a subSection we fit that to the whole page so that the scrollbar comes only on table and not on page
|
|
377
381
|
lastVisibleSubSection.addStyleClass("sapUxAPObjectPageSubSectionFitContainer");
|
|
378
382
|
lastVisibleSubSection.detachEvent("modelContextChange", changeClassForTables, this);
|
|
@@ -425,11 +429,11 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
|
|
|
425
429
|
const sections = this._getObjectPageLayoutControl().getSections();
|
|
426
430
|
for (const section of sections) {
|
|
427
431
|
subSections = section.getSubSections();
|
|
428
|
-
this.
|
|
432
|
+
this.checkSectionsForNonResponsiveTable(subSections);
|
|
429
433
|
}
|
|
430
434
|
} else {
|
|
431
435
|
subSections = this._getAllSubSections();
|
|
432
|
-
this.
|
|
436
|
+
this.checkSectionsForNonResponsiveTable(subSections);
|
|
433
437
|
}
|
|
434
438
|
};
|
|
435
439
|
_proto._onBeforeBinding = function _onBeforeBinding(oContext, mParameters) {
|
|
@@ -634,14 +638,14 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
|
|
|
634
638
|
|
|
635
639
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
636
640
|
;
|
|
637
|
-
_proto._onAfterBinding = function _onAfterBinding(
|
|
641
|
+
_proto._onAfterBinding = function _onAfterBinding(inputBindingContext, mParameters) {
|
|
638
642
|
const oObjectPage = this._getObjectPageLayoutControl();
|
|
639
643
|
const aTables = this._findTables();
|
|
640
644
|
this._sideEffects.clearFieldGroupsValidity();
|
|
641
645
|
|
|
642
646
|
// TODO: this is only a temp solution as long as the model fix the cache issue and we use this additional
|
|
643
647
|
// binding with ownRequest
|
|
644
|
-
|
|
648
|
+
const bindingContext = oObjectPage.getBindingContext();
|
|
645
649
|
let aIBNActions = [];
|
|
646
650
|
oObjectPage.getSections().forEach(function (oSection) {
|
|
647
651
|
oSection.getSubSections().forEach(function (oSubSection) {
|
|
@@ -675,12 +679,10 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
|
|
|
675
679
|
}
|
|
676
680
|
// Workaround ends here!!
|
|
677
681
|
|
|
678
|
-
//
|
|
679
|
-
//
|
|
680
|
-
const oActionOperationAvailableMap = JSON.parse(CommonHelper.parseCustomData(DelegateUtil.getCustomData(oTable, "operationAvailableMap")))
|
|
681
|
-
|
|
682
|
-
ActionRuntime.setActionEnablement(oInternalModelContext, oActionOperationAvailableMap, aSelectedContexts, "table");
|
|
683
|
-
// Clear the selection in the table, need to be fixed and review with BLI: FIORITECHP1-24318
|
|
682
|
+
// Clear the selection in the table and update action enablement accordingly
|
|
683
|
+
// Will to be fixed with BLI: FIORITECHP1-24318
|
|
684
|
+
const oActionOperationAvailableMap = JSON.parse(CommonHelper.parseCustomData(DelegateUtil.getCustomData(oTable, "operationAvailableMap")));
|
|
685
|
+
ActionRuntime.setActionEnablement(oInternalModelContext, oActionOperationAvailableMap, [], "table");
|
|
684
686
|
oTable.clearSelection();
|
|
685
687
|
}
|
|
686
688
|
});
|
|
@@ -718,11 +720,11 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
|
|
|
718
720
|
oBinding.attachChange(fnHandleChange);
|
|
719
721
|
}
|
|
720
722
|
};
|
|
721
|
-
if (
|
|
722
|
-
oModel =
|
|
723
|
+
if (bindingContext) {
|
|
724
|
+
oModel = bindingContext.getModel();
|
|
723
725
|
|
|
724
726
|
// Compute Edit Mode
|
|
725
|
-
oFinalUIState = this.editFlow.computeEditMode(
|
|
727
|
+
oFinalUIState = this.editFlow.computeEditMode(bindingContext);
|
|
726
728
|
if (ModelHelper.isCollaborationDraftSupported(oModel.getMetaModel())) {
|
|
727
729
|
oFinalUIState.then(() => {
|
|
728
730
|
if (this.getView().getModel("ui").getProperty("/isEditable")) {
|
|
@@ -738,11 +740,11 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
|
|
|
738
740
|
this._updateRelatedApps();
|
|
739
741
|
|
|
740
742
|
//Attach the patch sent and patch completed event to the object page binding so that we can react
|
|
741
|
-
const oBinding =
|
|
743
|
+
const oBinding = bindingContext.getBinding && bindingContext.getBinding() || bindingContext;
|
|
742
744
|
|
|
743
745
|
// Attach the event handler only once to the same binding
|
|
744
746
|
if (this.currentBinding !== oBinding) {
|
|
745
|
-
oBinding.attachEvent("patchSent", this.editFlow.handlePatchSent, this);
|
|
747
|
+
oBinding.attachEvent("patchSent", {}, this.editFlow.handlePatchSent, this);
|
|
746
748
|
this.currentBinding = oBinding;
|
|
747
749
|
}
|
|
748
750
|
aTables.forEach(function (oTable) {
|
|
@@ -758,6 +760,34 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
|
|
|
758
760
|
//To Compute the Edit Binding of the subObject page using root object page, create a context for draft root and update the edit button in sub OP using the context
|
|
759
761
|
ActionRuntime.updateEditButtonVisibilityAndEnablement(this.getView());
|
|
760
762
|
}
|
|
763
|
+
this.displayCollaborationMessage(mParameters === null || mParameters === void 0 ? void 0 : mParameters.redirectedToNonDraft);
|
|
764
|
+
}
|
|
765
|
+
|
|
766
|
+
/**
|
|
767
|
+
* Show a message strip if a redirection to a non-draft element has been done.
|
|
768
|
+
* Remove the message strip in case we navigate to another object page.
|
|
769
|
+
*
|
|
770
|
+
* @param entityName Name of the Entity to be displayed in the message
|
|
771
|
+
* @private
|
|
772
|
+
*/;
|
|
773
|
+
_proto.displayCollaborationMessage = function displayCollaborationMessage(entityName) {
|
|
774
|
+
var _this$getView;
|
|
775
|
+
const internalBindingContext = (_this$getView = this.getView()) === null || _this$getView === void 0 ? void 0 : _this$getView.getBindingContext("internal");
|
|
776
|
+
const resourceBundle = Core.getLibraryResourceBundle("sap.fe.core");
|
|
777
|
+
if (entityName) {
|
|
778
|
+
const message = new Message({
|
|
779
|
+
message: resourceBundle.getText("REROUTED_NAVIGATION_TO_SAVED_VERSION", [entityName]),
|
|
780
|
+
type: "Information"
|
|
781
|
+
});
|
|
782
|
+
this.getExtensionAPI().showMessages([message]);
|
|
783
|
+
} else {
|
|
784
|
+
var _internalBindingConte;
|
|
785
|
+
const messageToCompare = resourceBundle.getText("REROUTED_NAVIGATION_TO_SAVED_VERSION", ["{0}"]);
|
|
786
|
+
const lengthUntilVariable = messageToCompare.search("{");
|
|
787
|
+
if ((internalBindingContext === null || internalBindingContext === void 0 ? void 0 : (_internalBindingConte = internalBindingContext.getProperty("OPMessageStripText")) === null || _internalBindingConte === void 0 ? void 0 : _internalBindingConte.substring(0, lengthUntilVariable)) === messageToCompare.substring(0, lengthUntilVariable)) {
|
|
788
|
+
this.getExtensionAPI().showMessages([]);
|
|
789
|
+
}
|
|
790
|
+
}
|
|
761
791
|
};
|
|
762
792
|
_proto.onPageReady = function onPageReady(mParameters) {
|
|
763
793
|
const setFocus = () => {
|
|
@@ -905,49 +935,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
|
|
|
905
935
|
return this.editFlow.editDocument.apply(this.editFlow, [oContext]).finally(function () {
|
|
906
936
|
BusyLocker.unlock(oModel);
|
|
907
937
|
});
|
|
908
|
-
}
|
|
909
|
-
|
|
910
|
-
/**
|
|
911
|
-
* Gets the context of the DraftRoot path.
|
|
912
|
-
* If a view has been created with the draft Root Path, this method returns its bindingContext.
|
|
913
|
-
* Where no view is found a new created context is returned.
|
|
914
|
-
* The new created context request the key of the entity in order to get the Etag of this entity.
|
|
915
|
-
*
|
|
916
|
-
* @function
|
|
917
|
-
* @name getDraftRootPath
|
|
918
|
-
* @returns Returns a Promise
|
|
919
|
-
*/;
|
|
920
|
-
_proto.getDraftRootContext = async function getDraftRootContext() {
|
|
921
|
-
const view = this.getView();
|
|
922
|
-
const context = view.getBindingContext();
|
|
923
|
-
if (context) {
|
|
924
|
-
const draftRootContextPath = ModelHelper.getDraftRootPath(context);
|
|
925
|
-
let simpleDraftRootContext;
|
|
926
|
-
if (draftRootContextPath) {
|
|
927
|
-
var _this$getAppComponent, _simpleDraftRootConte;
|
|
928
|
-
// Check if a view matches with the draft root path
|
|
929
|
-
const existingBindingContextOnPage = (_this$getAppComponent = this.getAppComponent().getRootViewController().getInstancedViews().find(pageView => {
|
|
930
|
-
var _pageView$getBindingC;
|
|
931
|
-
return ((_pageView$getBindingC = pageView.getBindingContext()) === null || _pageView$getBindingC === void 0 ? void 0 : _pageView$getBindingC.getPath()) === draftRootContextPath;
|
|
932
|
-
})) === null || _this$getAppComponent === void 0 ? void 0 : _this$getAppComponent.getBindingContext();
|
|
933
|
-
if (existingBindingContextOnPage) {
|
|
934
|
-
return existingBindingContextOnPage;
|
|
935
|
-
}
|
|
936
|
-
const internalModel = view.getModel("internal");
|
|
937
|
-
simpleDraftRootContext = internalModel.getProperty("/simpleDraftRootContext");
|
|
938
|
-
if (((_simpleDraftRootConte = simpleDraftRootContext) === null || _simpleDraftRootConte === void 0 ? void 0 : _simpleDraftRootConte.getPath()) === draftRootContextPath) {
|
|
939
|
-
return simpleDraftRootContext;
|
|
940
|
-
}
|
|
941
|
-
const model = context.getModel();
|
|
942
|
-
simpleDraftRootContext = model.bindContext(draftRootContextPath).getBoundContext();
|
|
943
|
-
await CommonUtils.waitForContextRequested(simpleDraftRootContext);
|
|
944
|
-
// Store this new created context to use it on the next iterations
|
|
945
|
-
internalModel.setProperty("/simpleDraftRootContext", simpleDraftRootContext);
|
|
946
|
-
return simpleDraftRootContext;
|
|
947
|
-
}
|
|
948
|
-
return undefined;
|
|
949
|
-
}
|
|
950
|
-
return undefined;
|
|
951
938
|
};
|
|
952
939
|
_proto._validateDocument = async function _validateDocument() {
|
|
953
940
|
const appComponent = this.getAppComponent();
|
|
@@ -962,7 +949,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
|
|
|
962
949
|
await this.editFlow.syncTask();
|
|
963
950
|
return Promise.all(globalSideEffects.map(sideEffects => this._sideEffects.requestSideEffects(sideEffects, context)));
|
|
964
951
|
}
|
|
965
|
-
const draftRootContext = await this.
|
|
952
|
+
const draftRootContext = await CommonUtils.createRootContext(ProgrammingModel.Draft, this.getView(), appComponent);
|
|
966
953
|
//Execute the draftValidation if there is no globalSideEffects (ignore ETags in collaboration draft)
|
|
967
954
|
if (draftRootContext) {
|
|
968
955
|
await this.editFlow.syncTask();
|
|
@@ -1433,4 +1420,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
|
|
|
1433
1420
|
}), _applyDecoratedDescriptor(_class2.prototype, "getExtensionAPI", [_dec12, _dec13], Object.getOwnPropertyDescriptor(_class2.prototype, "getExtensionAPI"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onPageReady", [_dec14, _dec15], Object.getOwnPropertyDescriptor(_class2.prototype, "onPageReady"), _class2.prototype)), _class2)) || _class);
|
|
1434
1421
|
return ObjectPageController;
|
|
1435
1422
|
}, false);
|
|
1436
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPYmplY3RQYWdlQ29udHJvbGxlciIsImRlZmluZVVJNUNsYXNzIiwidXNpbmdFeHRlbnNpb24iLCJQbGFjZWhvbGRlciIsIlNoYXJlIiwib3ZlcnJpZGUiLCJTaGFyZU92ZXJyaWRlcyIsIkludGVybmFsUm91dGluZyIsIkludGVybmFsUm91dGluZ092ZXJyaWRlIiwiUGFnaW5hdG9yIiwiUGFnaW5hdG9yT3ZlcnJpZGUiLCJNZXNzYWdlSGFuZGxlciIsIk1lc3NhZ2VIYW5kbGVyT3ZlcnJpZGUiLCJJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSIsIkludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0TmF2aWdhdGlvbk1vZGUiLCJiSXNTdGlja3lFZGl0TW9kZSIsImdldFZpZXciLCJnZXRDb250cm9sbGVyIiwiZ2V0U3RpY2t5RWRpdE1vZGUiLCJ1bmRlZmluZWQiLCJWaWV3U3RhdGUiLCJWaWV3U3RhdGVPdmVycmlkZXMiLCJQYWdlUmVhZHkiLCJpc0NvbnRleHRFeHBlY3RlZCIsIk1hc3NFZGl0IiwicHVibGljRXh0ZW5zaW9uIiwiZmluYWxFeHRlbnNpb24iLCJleHRlbnNpYmxlIiwiT3ZlcnJpZGVFeGVjdXRpb24iLCJBZnRlciIsImhhbmRsZXJzIiwib25QcmltYXJ5QWN0aW9uIiwib0NvbnRyb2xsZXIiLCJvVmlldyIsIm9Db250ZXh0Iiwic0FjdGlvbk5hbWUiLCJtUGFyYW1ldGVycyIsIm1Db25kaXRpb25zIiwiaVZpZXdMZXZlbCIsImdldFZpZXdEYXRhIiwidmlld0xldmVsIiwib09iamVjdFBhZ2UiLCJfZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2wiLCJwb3NpdGl2ZUFjdGlvblZpc2libGUiLCJwb3NpdGl2ZUFjdGlvbkVuYWJsZWQiLCJvbkNhbGxBY3Rpb24iLCJlZGl0QWN0aW9uVmlzaWJsZSIsImVkaXRBY3Rpb25FbmFibGVkIiwiX2VkaXREb2N1bWVudCIsImdldE1vZGVsIiwiZ2V0UHJvcGVydHkiLCJfc2F2ZURvY3VtZW50IiwiX2FwcGx5RG9jdW1lbnQiLCJvblRhYmxlQ29udGV4dENoYW5nZSIsIm9FdmVudCIsIm9Tb3VyY2UiLCJnZXRTb3VyY2UiLCJvVGFibGUiLCJfZmluZFRhYmxlcyIsInNvbWUiLCJfb1RhYmxlIiwiZ2V0Um93QmluZGluZyIsImZhc3RDcmVhdGlvblJvdyIsImdldENyZWF0aW9uUm93IiwiX29Jbm5lckNyZWF0aW9uUm93IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJ0YWJsZUJpbmRpbmciLCJfZ2V0VGFibGVCaW5kaW5nIiwiTG9nIiwiZXJyb3IiLCJnZXRJZCIsImdldENvbnRleHQiLCJvYmplY3RQYWdlIiwiYmluZGluZ0NvbnRleHQiLCJtb2RlbCIsIlRhYmxlSGVscGVyIiwiZW5hYmxlRmFzdENyZWF0aW9uUm93IiwiZ2V0UGF0aCIsIm9DdXJyZW50QWN0aW9uUHJvbWlzZSIsImVkaXRGbG93IiwiZ2V0Q3VycmVudEFjdGlvblByb21pc2UiLCJhVGFibGVDb250ZXh0cyIsImdldFR5cGUiLCJnZXRNZXRhZGF0YSIsImlzQSIsImdldENvbnRleHRzIiwiZ2V0Q3VycmVudENvbnRleHRzIiwidGhlbiIsIm9BY3Rpb25SZXNwb25zZSIsImNvbnRyb2xJZCIsInNJZCIsIm9BY3Rpb25EYXRhIiwib0RhdGEiLCJhS2V5cyIsImtleXMiLCJpTmV3SXRlbXAiLCJmaW5kIiwib1RhYmxlQ29udGV4dCIsImkiLCJvVGFibGVEYXRhIiwiZ2V0T2JqZWN0IiwiYkNvbXBhcmUiLCJldmVyeSIsInNLZXkiLCJhRGlhbG9ncyIsIkluc3RhbmNlTWFuYWdlciIsImdldE9wZW5EaWFsb2dzIiwib0RpYWxvZyIsImxlbmd0aCIsImRpYWxvZyIsImRhdGEiLCJhdHRhY2hFdmVudE9uY2UiLCJmb2N1c1JvdyIsImRlbGV0ZUN1cnJlbnRBY3Rpb25Qcm9taXNlIiwiY2F0Y2giLCJlcnIiLCJtZXNzYWdlQnV0dG9uIiwiZmlyZU1vZGVsQ29udGV4dENoYW5nZSIsImludm9rZUFjdGlvbiIsIl9zaG93TWVzc2FnZVBvcG92ZXIiLCJiaW5kIiwib25EYXRhUG9pbnRUaXRsZVByZXNzZWQiLCJvTWFuaWZlc3RPdXRib3VuZCIsInNDb250cm9sQ29uZmlnIiwic0NvbGxlY3Rpb25QYXRoIiwiSlNPTiIsInBhcnNlIiwib1RhcmdldEluZm8iLCJhU2VtYW50aWNPYmplY3RNYXBwaW5nIiwiQ29tbW9uVXRpbHMiLCJnZXRTZW1hbnRpY09iamVjdE1hcHBpbmciLCJvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0Iiwic01ldGFQYXRoIiwiZ2V0TWV0YU1vZGVsIiwiZ2V0TWV0YVBhdGgiLCJhTmF2aWdhdGlvbkRhdGEiLCJfZ2V0Q2hhcnRDb250ZXh0RGF0YSIsImFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVycyIsIm1hcCIsIm9OYXZpZ2F0aW9uRGF0YSIsIm1ldGFQYXRoIiwicGFyYW1ldGVycyIsIm9QYXJhbXMiLCJfaW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0T3V0Ym91bmRQYXJhbXMiLCJPYmplY3QiLCJzZW1hbnRpY09iamVjdCIsImFjdGlvbiIsIm5hdmlnYXRlIiwibmF2aWdhdGlvbkNvbnRleHRzIiwic2VtYW50aWNPYmplY3RNYXBwaW5nIiwib25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kIiwic091dGJvdW5kVGFyZ2V0Iiwic0NyZWF0ZVBhdGgiLCJvbk5hdmlnYXRlQ2hhbmdlIiwiZ2V0RXh0ZW5zaW9uQVBJIiwidXBkYXRlQXBwU3RhdGUiLCJiU2VjdGlvbk5hdmlnYXRlZCIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsInNlY3Rpb25MYXlvdXQiLCJvU3ViU2VjdGlvbiIsImdldFBhcmFtZXRlciIsIl91cGRhdGVGb2N1c0luRWRpdE1vZGUiLCJvblZhcmlhbnRTZWxlY3RlZCIsIm9uVmFyaWFudFNhdmVkIiwic2V0VGltZW91dCIsIm5hdmlnYXRlVG9TdWJTZWN0aW9uIiwidkRldGFpbENvbmZpZyIsIm9EZXRhaWxDb25maWciLCJieUlkIiwib1NlY3Rpb24iLCJzZWN0aW9uSWQiLCJzdWJTZWN0aW9uSWQiLCJnZXRTdWJTZWN0aW9ucyIsImdldFBhcmVudCIsImdldFZpc2libGUiLCJzVGl0bGUiLCJnZXRSZXNvdXJjZU1vZGVsIiwiZ2V0VGV4dCIsImVudGl0eVNldCIsIk1lc3NhZ2VCb3giLCJzY3JvbGxUb1NlY3Rpb24iLCJmaXJlTmF2aWdhdGUiLCJzZWN0aW9uIiwic3ViU2VjdGlvbiIsIm9uU3RhdGVDaGFuZ2UiLCJjbG9zZU9QTWVzc2FnZVN0cmlwIiwiaGlkZU1lc3NhZ2UiLCJtQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXMiLCJFeHRlbnNpb25BUEkiLCJleHRlbnNpb25BUEkiLCJvbkluaXQiLCJzZXRQcm9wZXJ0eSIsInBhZ2UiLCJ2aXNpYmlsaXR5IiwiaXRlbXMiLCJfZ2V0QmF0Y2hHcm91cHNGb3JWaWV3IiwiZ2V0RW5hYmxlTGF6eUxvYWRpbmciLCJhdHRhY2hFdmVudCIsIl9oYW5kbGVTdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0Iiwib0l0ZW1CaW5kaW5nIiwiYXR0YWNoQ2hhbmdlIiwiX2ZuU2hvd09QTWVzc2FnZSIsIm9uRXhpdCIsImRlc3Ryb3kiLCJvTWVzc2FnZVBvcG92ZXIiLCJpc09wZW4iLCJjbG9zZSIsImlzS2VlcEFsaXZlIiwic2V0S2VlcEFsaXZlIiwiaXNDb25uZWN0ZWQiLCJkaXNjb25uZWN0IiwidmlldyIsIm1lc3NhZ2VzIiwiZ2V0SXRlbXMiLCJpdGVtIiwiZmlsdGVyIiwibWVzc2FnZSIsImdldFRhcmdldHMiLCJzaG93TWVzc2FnZXMiLCJjaGVja1NlY3Rpb25zRm9yR3JpZFRhYmxlIiwic3ViU2VjdGlvbnMiLCJjaGFuZ2VDbGFzc0ZvclRhYmxlcyIsImV2ZW50IiwibGFzdFZpc2libGVTdWJTZWN0aW9uIiwiYmxvY2tzIiwiZ2V0QmxvY2tzIiwiZ2V0TW9yZUJsb2NrcyIsInNlYXJjaFRhYmxlSW5CbG9jayIsImFkZFN0eWxlQ2xhc3MiLCJkZXRhY2hFdmVudCIsInN1YlNlY3Rpb25JbmRleCIsImJsb2NrIiwiY29udHJvbCIsImNvbnRlbnQiLCJ0YWJsZUFQSSIsIm9uQmVmb3JlUmVuZGVyaW5nIiwiUGFnZUNvbnRyb2xsZXIiLCJwcm90b3R5cGUiLCJhcHBseSIsIm9WaWV3RGF0YSIsInJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3QiLCJDb21tb25IZWxwZXIiLCJzZXRNZXRhTW9kZWwiLCJnZXRBcHBDb21wb25lbnQiLCJvbkFmdGVyUmVuZGVyaW5nIiwiZ2V0VXNlSWNvblRhYkJhciIsInNlY3Rpb25zIiwiZ2V0U2VjdGlvbnMiLCJfZ2V0QWxsU3ViU2VjdGlvbnMiLCJfb25CZWZvcmVCaW5kaW5nIiwiYVRhYmxlcyIsIm9JbnRlcm5hbE1vZGVsIiwiYUJhdGNoR3JvdXBzIiwib0Zhc3RDcmVhdGlvblJvdyIsInB1c2giLCJiRHJhZnROYXZpZ2F0aW9uIiwiX2Nsb3NlU2lkZUNvbnRlbnQiLCJvcENvbnRleHQiLCJoYXNQZW5kaW5nQ2hhbmdlcyIsImdldEJpbmRpbmciLCJyZXNldENoYW5nZXMiLCJzZXRCaW5kaW5nQ29udGV4dCIsImZuU2Nyb2xsVG9QcmVzZW50U2VjdGlvbiIsImlzRmlyc3RSZW5kZXJpbmciLCJiUGVyc2lzdE9QU2Nyb2xsIiwic2V0U2VsZWN0ZWRTZWN0aW9uIiwib0RlbGVnYXRlT25CZWZvcmUiLCJhZGRFdmVudERlbGVnYXRlIiwicGFnZVJlYWR5IiwicmVtb3ZlRXZlbnREZWxlZ2F0ZSIsIm9CaW5kaW5nIiwibGlzdEJpbmRpbmciLCJvUGFnaW5hdG9yQ3VycmVudENvbnRleHQiLCJvQmluZGluZ1RvVXNlIiwicGFnaW5hdG9yIiwiaW5pdGlhbGl6ZSIsInNCaW5kaW5nUGF0aCIsInRlc3QiLCJzTGlzdEJpbmRpbmdQYXRoIiwicmVwbGFjZSIsIk9EYXRhTGlzdEJpbmRpbmciLCJvTW9kZWwiLCJfc2V0TGlzdEJpbmRpbmdBc3luYyIsImFTZWN0aW9ucyIsImJVc2VJY29uVGFiQmFyIiwiaVNraXAiLCJiSXNJbkVkaXRNb2RlIiwiYkVkaXRhYmxlSGVhZGVyIiwiZWRpdGFibGVIZWFkZXJDb250ZW50IiwiaVNlY3Rpb24iLCJhU3ViU2VjdGlvbnMiLCJpU3ViU2VjdGlvbiIsImlzVmlzaWJpbGl0eUR5bmFtaWMiLCJwbGFjZWhvbGRlciIsImlzUGxhY2Vob2xkZXJFbmFibGVkIiwic2hvd1BsYWNlaG9sZGVyIiwib05hdkNvbnRhaW5lciIsIm9Db250YWluZXIiLCJfZ2V0Rmlyc3RDbGlja2FibGVFbGVtZW50Iiwib0ZpcnN0Q2xpY2thYmxlRWxlbWVudCIsImFBY3Rpb25zIiwiZ2V0SGVhZGVyVGl0bGUiLCJnZXRBY3Rpb25zIiwib0FjdGlvbiIsImdldEVuYWJsZWQiLCJfZ2V0Rmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkRnJvbVN1YlNlY3Rpb24iLCJhQmxvY2tzIiwiYUZvcm1Db250YWluZXJzIiwiZ2V0Rm9ybUNvbnRhaW5lcnMiLCJnZXRDb250ZW50IiwiZm9ybUNvbnRhaW5lciIsImFGb3JtRWxlbWVudHMiLCJnZXRGb3JtRWxlbWVudHMiLCJmb3JtRWxlbWVudCIsImFGaWVsZHMiLCJnZXRGaWVsZHMiLCJnZXRSZXF1aXJlZCIsImdldFZhbHVlIiwiZGVidWciLCJvTWFuZGF0b3J5RmllbGQiLCJvRmllbGRUb0ZvY3VzIiwiZ2V0Q29udGVudEVkaXQiLCJfZ2V0Rmlyc3RFZGl0YWJsZUlucHV0IiwiZm9jdXMiLCJfb25CYWNrTmF2aWdhdGlvbkluRHJhZnQiLCJtZXNzYWdlSGFuZGxlciIsInJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyIsImdldFJvdXRlclByb3h5IiwiY2hlY2tJZkJhY2tIYXNTYW1lQ29udGV4dCIsImhpc3RvcnkiLCJiYWNrIiwiZHJhZnQiLCJwcm9jZXNzRGF0YUxvc3NPckRyYWZ0RGlzY2FyZENvbmZpcm1hdGlvbiIsIkZ1bmN0aW9uIiwiTmF2aWdhdGlvblR5cGUiLCJCYWNrTmF2aWdhdGlvbiIsIl9vbkFmdGVyQmluZGluZyIsIm9CaW5kaW5nQ29udGV4dCIsIl9zaWRlRWZmZWN0cyIsImNsZWFyRmllbGRHcm91cHNWYWxpZGl0eSIsImFJQk5BY3Rpb25zIiwiZm9yRWFjaCIsImdldElCTkFjdGlvbnMiLCJvVGFibGVSb3dCaW5kaW5nIiwiTW9kZWxIZWxwZXIiLCJpc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJyZW1vdmVDYWNoZXNBbmRNZXNzYWdlcyIsIm9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAiLCJwYXJzZUN1c3RvbURhdGEiLCJEZWxlZ2F0ZVV0aWwiLCJnZXRDdXN0b21EYXRhIiwiYVNlbGVjdGVkQ29udGV4dHMiLCJnZXRTZWxlY3RlZENvbnRleHRzIiwiQWN0aW9uUnVudGltZSIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJjbGVhclNlbGVjdGlvbiIsImdldFNlbWFudGljVGFyZ2V0c0Zyb21QYWdlTW9kZWwiLCJvT2JqZWN0UGFnZVRpdGxlIiwiYUlCTkhlYWRlckFjdGlvbnMiLCJjb25jYXQiLCJ1cGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eSIsIm9GaW5hbFVJU3RhdGUiLCJoYW5kbGVUYWJsZU1vZGlmaWNhdGlvbnMiLCJmbkhhbmRsZVRhYmxlUGF0Y2hFdmVudHMiLCJmbkhhbmRsZUNoYW5nZSIsImRldGFjaENoYW5nZSIsImNvbXB1dGVFZGl0TW9kZSIsImlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkIiwiY29ubmVjdCIsIm9FcnJvciIsIl91cGRhdGVSZWxhdGVkQXBwcyIsImN1cnJlbnRCaW5kaW5nIiwiaGFuZGxlUGF0Y2hTZW50IiwiVGFibGVVdGlscyIsIndoZW5Cb3VuZCIsIl90cmlnZ2VyVmlzaWJsZVN1YlNlY3Rpb25zRXZlbnRzIiwidXBkYXRlRWRpdEJ1dHRvblZpc2liaWxpdHlBbmRFbmFibGVtZW50Iiwib25QYWdlUmVhZHkiLCJzZXRGb2N1cyIsImlzSW5EaXNwbGF5TW9kZSIsIm9TZWxlY3RlZFNlY3Rpb24iLCJDb3JlIiwiZ2V0U2VsZWN0ZWRTZWN0aW9uIiwiYklzU3RpY2t5TW9kZSIsIm9BcHBDb21wb25lbnQiLCJnZXRTaGVsbFNlcnZpY2VzIiwic2V0QmFja05hdmlnYXRpb24iLCJ2aWV3SWQiLCJnZXRBcHBTdGF0ZUhhbmRsZXIiLCJhcHBseUFwcFN0YXRlIiwiZm9yY2VGb2N1cyIsIkVycm9yIiwiX2NoZWNrRGF0YVBvaW50VGl0bGVGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJfZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24iLCJvT2JqZWN0UGFnZVN1YnRpdGxlIiwib0N1c3RvbURhdGEiLCJnZXRLZXkiLCJ0aXRsZSIsInN1YnRpdGxlIiwiaW50ZW50IiwiaWNvbiIsIl9leGVjdXRlSGVhZGVyU2hvcnRjdXQiLCJzQnV0dG9uSWQiLCJvQnV0dG9uIiwib0VsZW1lbnQiLCJmaXJlQnV0dG9uUHJlc3MiLCJfZXhlY3V0ZUZvb3RlclNob3J0Y3V0IiwiZ2V0Rm9vdGVyIiwiZ2V0TmFtZSIsIl9leGVjdXRlVGFiU2hvcnRDdXQiLCJvRXhlY3V0aW9uIiwiaVNlY3Rpb25JbmRleE1heCIsInNDb21tYW5kIiwiZ2V0Q29tbWFuZCIsIm5ld1NlY3Rpb24iLCJpU2VsZWN0ZWRTZWN0aW9uSW5kZXgiLCJpbmRleE9mU2VjdGlvbiIsIl9nZXRGb290ZXJWaXNpYmlsaXR5Iiwic1ZpZXdJZCIsInNhcCIsInVpIiwiZ2V0Q29yZSIsImdldE1lc3NhZ2VNYW5hZ2VyIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsIm9NZXNzYWdlIiwidmFsaWRhdGlvbiIsInR5cGUiLCJ0YXJnZXQiLCJpbmRleE9mIiwib1JldCIsInJvb3RWaWV3Q29udHJvbGxlciIsImdldFJvb3RWaWV3Q29udHJvbGxlciIsImN1cnJlbnRQYWdlVmlldyIsImlzRmNsRW5hYmxlZCIsImdldFJpZ2h0bW9zdFZpZXciLCJnZXRSb290Q29udGFpbmVyIiwiZ2V0Q3VycmVudFBhZ2UiLCJvTWVzc2FnZUJ1dHRvbiIsImdldExlbmd0aCIsInNldFZpc2libGUiLCJvcGVuQnkiLCJCdXN5TG9ja2VyIiwibG9jayIsImVkaXREb2N1bWVudCIsImZpbmFsbHkiLCJ1bmxvY2siLCJnZXREcmFmdFJvb3RDb250ZXh0IiwiY29udGV4dCIsImRyYWZ0Um9vdENvbnRleHRQYXRoIiwiZ2V0RHJhZnRSb290UGF0aCIsInNpbXBsZURyYWZ0Um9vdENvbnRleHQiLCJleGlzdGluZ0JpbmRpbmdDb250ZXh0T25QYWdlIiwiZ2V0SW5zdGFuY2VkVmlld3MiLCJwYWdlVmlldyIsImludGVybmFsTW9kZWwiLCJiaW5kQ29udGV4dCIsImdldEJvdW5kQ29udGV4dCIsIndhaXRGb3JDb250ZXh0UmVxdWVzdGVkIiwiX3ZhbGlkYXRlRG9jdW1lbnQiLCJhcHBDb21wb25lbnQiLCJnZXRDdXJyZW50Rm9jdXNlZENvbnRyb2xJZCIsImlzVHJhbnNpZW50Iiwic2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiZW50aXR5VHlwZSIsImdldEVudGl0eVR5cGVGcm9tQ29udGV4dCIsImdsb2JhbFNpZGVFZmZlY3RzIiwiZ2V0R2xvYmFsT0RhdGFFbnRpdHlTaWRlRWZmZWN0cyIsInN5bmNUYXNrIiwiUHJvbWlzZSIsImFsbCIsInNpZGVFZmZlY3RzIiwicmVxdWVzdFNpZGVFZmZlY3RzIiwiZHJhZnRSb290Q29udGV4dCIsImV4ZWN1dGVEcmFmdFZhbGlkYXRpb24iLCJhV2FpdENyZWF0ZURvY3VtZW50cyIsImJFeGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yIiwiY3JlYXRpb25Nb2RlIiwiY3JlYXRpb25Sb3ciLCJjcmVhdGVBdEVuZCIsImJDcmVhdGVEb2N1bWVudCIsImJTa2lwU2lkZUVmZmVjdHMiLCJjcmVhdGVEb2N1bWVudCIsImFCaW5kaW5ncyIsImJpbmRpbmdzIiwic2F2ZURvY3VtZW50IiwiaXNMb2NrZWQiLCJfbWFuYWdlQ29sbGFib3JhdGlvbiIsIm9wZW5NYW5hZ2VEaWFsb2ciLCJfc2hvd0NvbGxhYm9yYXRpb25Vc2VyRGV0YWlscyIsInNob3dVc2VyRGV0YWlscyIsIl9jYW5jZWxEb2N1bWVudCIsImNhbmNlbEJ1dHRvbiIsImNhbmNlbERvY3VtZW50IiwiYXBwbHlEb2N1bWVudCIsInNob3dSZWxhdGVkQXBwcyIsInVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyIsIl9maW5kQ29udHJvbEluU3ViU2VjdGlvbiIsImFQYXJlbnRFbGVtZW50IiwiYVN1YnNlY3Rpb24iLCJhQ29udHJvbHMiLCJiSXNDaGFydCIsImVsZW1lbnQiLCJtQWdncmVnYXRpb25zIiwiZ2V0QWdncmVnYXRpb24iLCJhSXRlbXMiLCJvSXRlbSIsImdldE1haW5Db250ZW50IiwiX2dldEFsbEJsb2NrcyIsIl9maW5kQ2hhcnRzIiwiYUNoYXJ0cyIsIm9CbG9jayIsIm9Db250ZW50Iiwic2V0U2hvd1NpZGVDb250ZW50Iiwib0NoYXJ0Q29udGV4dCIsInNDaGFydFBhdGgiLCJvQ29udGV4dERhdGEiLCJvQ2hhcnRDb250ZXh0RGF0YSIsIl9zY3JvbGxUYWJsZXNUb1JvdyIsInNSb3dQYXRoIiwiVGFibGVTY3JvbGxlciIsInNjcm9sbFRhYmxlVG9Sb3ciLCJfbWVyZ2VNdWx0aXBsZUNvbnRleHRzIiwib1BhZ2VDb250ZXh0IiwiYUxpbmVDb250ZXh0IiwiYUF0dHJpYnV0ZXMiLCJhUGFnZUF0dHJpYnV0ZXMiLCJzTWV0YVBhdGhMaW5lIiwic1BhdGhMaW5lIiwic1BhZ2VQYXRoIiwib01ldGFNb2RlbCIsInNNZXRhUGF0aFBhZ2UiLCJvU2luZ2xlQ29udGV4dCIsIm9TdWJDaGFydENvbnRleHREYXRhIiwiY29udGV4dERhdGEiLCJyZW1vdmVTZW5zaXRpdmVEYXRhIiwib1BhZ2VMZXZlbFNWIiwiYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQiLCJTZWxlY3Rpb25WYXJpYW50Iiwic2VsZWN0aW9uVmFyaWFudCIsImF0dHJpYnV0ZXMiLCJvQ29uZmlndXJhdGlvbnMiLCJjb250cm9sQ29uZmlndXJhdGlvbiIsImFDb25maWd1cmF0aW9ucyIsIm9Db25maWd1cmF0aW9uIiwicmVxdWVzdEdyb3VwSWQiLCJfc2V0QnJlYWRjcnVtYkxpbmtzIiwiYVByb21pc2VzIiwiYVNraXBQYXJhbWV0ZXJpemVkIiwic05ld1BhdGgiLCJhUGF0aFBhcnRzIiwic3BsaXQiLCJzUGF0aCIsInNoaWZ0Iiwic3BsaWNlIiwic1BhdGhQYXJ0Iiwib1Jvb3RWaWV3Q29udHJvbGxlciIsInNQYXJhbWV0ZXJQYXRoIiwiYlJlc3VsdENvbnRleHQiLCJnZXRUaXRsZUluZm9Gcm9tUGF0aCIsInRpdGxlSGllcmFyY2h5SW5mb3MiLCJpZHgiLCJoaWVyYXJjaHlQb3NpdGlvbiIsIm9MaW5rIiwidGl0bGVIaWVyYXJjaHlJbmZvIiwiZ2V0TGlua3MiLCJMaW5rIiwic2V0VGV4dCIsInNldEhyZWYiLCJlbmNvZGVVUkkiLCJhZGRMaW5rIiwib0RhdGFQb2ludHMiLCJnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJnZXRSb3V0aW5nU2VydmljZSIsImdldE91dGJvdW5kcyIsIm9TaGVsbFNlcnZpY2VzIiwicmVxdWVzdE9iamVjdCIsImZuR2V0TGlua3MiLCJmbk9uRXJyb3IiLCJmblNldExpbmtFbmFibGVtZW50IiwiaWQiLCJhU3VwcG9ydGVkTGlua3MiLCJzTGlua0lkIiwic3VwcG9ydGVkIiwib1N1YkRhdGFQb2ludHMiLCJvUGFnZURhdGEiLCJvRGF0YVBvaW50Iiwib0xpbmtDb250ZXh0Iiwib0xpbmtEYXRhIiwib01peGVkQ29udGV4dCIsIm1lcmdlIiwib01hcHBpbmciLCJzTWFpblByb3BlcnR5Iiwic01hcHBlZFByb3BlcnR5IiwiaGFzT3duUHJvcGVydHkiLCJvTmV3TWFwcGluZyIsImlzTmF2aWdhdGlvblN1cHBvcnRlZCIsInBhcmFtcyIsImFMaW5rcyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiT2JqZWN0UGFnZUNvbnRyb2xsZXIuY29udHJvbGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IEFjdGlvblJ1bnRpbWUgZnJvbSBcInNhcC9mZS9jb3JlL0FjdGlvblJ1bnRpbWVcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBCdXN5TG9ja2VyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgeyBjb25uZWN0LCBkaXNjb25uZWN0LCBpc0Nvbm5lY3RlZCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9jb2xsYWJvcmF0aW9uL0FjdGl2aXR5U3luY1wiO1xuaW1wb3J0IHsgb3Blbk1hbmFnZURpYWxvZywgc2hvd1VzZXJEZXRhaWxzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NvbGxhYm9yYXRpb24vTWFuYWdlXCI7XG5pbXBvcnQgZHJhZnQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2VkaXRGbG93L2RyYWZ0XCI7XG5pbXBvcnQgSW50ZW50QmFzZWROYXZpZ2F0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBJbnRlcm5hbFJvdXRpbmcgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsUm91dGluZ1wiO1xuaW1wb3J0IE1hc3NFZGl0IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9NYXNzRWRpdFwiO1xuaW1wb3J0IE1lc3NhZ2VIYW5kbGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9NZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IFBhZ2VSZWFkeSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvUGFnZVJlYWR5XCI7XG5pbXBvcnQgUGFnaW5hdG9yIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QYWdpbmF0b3JcIjtcbmltcG9ydCBQbGFjZWhvbGRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvUGxhY2Vob2xkZXJcIjtcbmltcG9ydCBTaGFyZSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvU2hhcmVcIjtcbmltcG9ydCBWaWV3U3RhdGUgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1ZpZXdTdGF0ZVwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIGV4dGVuc2libGUsIGZpbmFsRXh0ZW5zaW9uLCBwdWJsaWNFeHRlbnNpb24sIHVzaW5nRXh0ZW5zaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgRGVsZWdhdGVVdGlsIGZyb20gXCJzYXAvZmUvbWFjcm9zL0RlbGVnYXRlVXRpbFwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCBUYWJsZUhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUhlbHBlclwiO1xuaW1wb3J0IFRhYmxlVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVXRpbHNcIjtcbmltcG9ydCBTZWxlY3Rpb25WYXJpYW50IGZyb20gXCJzYXAvZmUvbmF2aWdhdGlvbi9TZWxlY3Rpb25WYXJpYW50XCI7XG5pbXBvcnQgdHlwZSBTdWJTZWN0aW9uQmxvY2sgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9jb250cm9scy9TdWJTZWN0aW9uQmxvY2tcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJIH0gZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9FeHRlbnNpb25BUElcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgRXh0ZW5zaW9uQVBJIH0gZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9FeHRlbnNpb25BUElcIjtcbmltcG9ydCBUYWJsZVNjcm9sbGVyIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL1RhYmxlU2Nyb2xsZXJcIjtcbmltcG9ydCBJbnN0YW5jZU1hbmFnZXIgZnJvbSBcInNhcC9tL0luc3RhbmNlTWFuYWdlclwiO1xuaW1wb3J0IExpbmsgZnJvbSBcInNhcC9tL0xpbmtcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgdHlwZSBQb3BvdmVyIGZyb20gXCJzYXAvbS9Qb3BvdmVyXCI7XG5pbXBvcnQgQ29yZSBmcm9tIFwic2FwL3VpL2NvcmUvQ29yZVwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgT3ZlcnJpZGVFeGVjdXRpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9PdmVycmlkZUV4ZWN1dGlvblwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvQmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgT0RhdGFDb250ZXh0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhQ29udGV4dEJpbmRpbmdcIjtcbmltcG9ydCBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIEJyZWFkQ3J1bWJzIGZyb20gXCJzYXAvdXhhcC9CcmVhZENydW1ic1wiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZSBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZVwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUxheW91dCBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUxheW91dFwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZVNlY3Rpb24gZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VTZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlU3ViU2VjdGlvbiBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZVN1YlNlY3Rpb25cIjtcbmltcG9ydCBJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxSb3V0aW5nT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL0ludGVybmFsUm91dGluZ1wiO1xuaW1wb3J0IE1lc3NhZ2VIYW5kbGVyT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgUGFnaW5hdG9yT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL1BhZ2luYXRvclwiO1xuaW1wb3J0IFNoYXJlT3ZlcnJpZGVzIGZyb20gXCIuL292ZXJyaWRlcy9TaGFyZVwiO1xuaW1wb3J0IFZpZXdTdGF0ZU92ZXJyaWRlcyBmcm9tIFwiLi9vdmVycmlkZXMvVmlld1N0YXRlXCI7XG5cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5PYmplY3RQYWdlQ29udHJvbGxlclwiKVxuY2xhc3MgT2JqZWN0UGFnZUNvbnRyb2xsZXIgZXh0ZW5kcyBQYWdlQ29udHJvbGxlciB7XG5cdG9WaWV3ITogYW55O1xuXG5cdEB1c2luZ0V4dGVuc2lvbihQbGFjZWhvbGRlcilcblx0cGxhY2Vob2xkZXIhOiBQbGFjZWhvbGRlcjtcblxuXHRAdXNpbmdFeHRlbnNpb24oU2hhcmUub3ZlcnJpZGUoU2hhcmVPdmVycmlkZXMpKVxuXHRzaGFyZSE6IFNoYXJlO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihJbnRlcm5hbFJvdXRpbmcub3ZlcnJpZGUoSW50ZXJuYWxSb3V0aW5nT3ZlcnJpZGUpKVxuXHRfcm91dGluZyE6IEludGVybmFsUm91dGluZztcblxuXHRAdXNpbmdFeHRlbnNpb24oUGFnaW5hdG9yLm92ZXJyaWRlKFBhZ2luYXRvck92ZXJyaWRlKSlcblx0cGFnaW5hdG9yITogUGFnaW5hdG9yO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihNZXNzYWdlSGFuZGxlci5vdmVycmlkZShNZXNzYWdlSGFuZGxlck92ZXJyaWRlKSlcblx0bWVzc2FnZUhhbmRsZXIhOiBNZXNzYWdlSGFuZGxlcjtcblxuXHRAdXNpbmdFeHRlbnNpb24oSW50ZW50QmFzZWROYXZpZ2F0aW9uLm92ZXJyaWRlKEludGVudEJhc2VkTmF2aWdhdGlvbk92ZXJyaWRlKSlcblx0aW50ZW50QmFzZWROYXZpZ2F0aW9uITogSW50ZW50QmFzZWROYXZpZ2F0aW9uO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihcblx0XHRJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbi5vdmVycmlkZSh7XG5cdFx0XHRnZXROYXZpZ2F0aW9uTW9kZTogZnVuY3Rpb24gKHRoaXM6IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uKSB7XG5cdFx0XHRcdGNvbnN0IGJJc1N0aWNreUVkaXRNb2RlID1cblx0XHRcdFx0XHQodGhpcy5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIE9iamVjdFBhZ2VDb250cm9sbGVyKS5nZXRTdGlja3lFZGl0TW9kZSAmJlxuXHRcdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgT2JqZWN0UGFnZUNvbnRyb2xsZXIpLmdldFN0aWNreUVkaXRNb2RlKCk7XG5cdFx0XHRcdHJldHVybiBiSXNTdGlja3lFZGl0TW9kZSA/IFwiZXhwbGFjZVwiIDogdW5kZWZpbmVkO1xuXHRcdFx0fVxuXHRcdH0pXG5cdClcblx0X2ludGVudEJhc2VkTmF2aWdhdGlvbiE6IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihWaWV3U3RhdGUub3ZlcnJpZGUoVmlld1N0YXRlT3ZlcnJpZGVzKSlcblx0dmlld1N0YXRlITogVmlld1N0YXRlO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihcblx0XHRQYWdlUmVhZHkub3ZlcnJpZGUoe1xuXHRcdFx0aXNDb250ZXh0RXhwZWN0ZWQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fSlcblx0KVxuXHRwYWdlUmVhZHkhOiBQYWdlUmVhZHk7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKE1hc3NFZGl0KVxuXHRtYXNzRWRpdCE6IE1hc3NFZGl0O1xuXG5cdHByaXZhdGUgbUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzPzogUmVjb3JkPHN0cmluZywgT2JqZWN0UGFnZUV4dGVuc2lvbkFQST47XG5cblx0cHJvdGVjdGVkIGV4dGVuc2lvbkFQST86IE9iamVjdFBhZ2VFeHRlbnNpb25BUEk7XG5cblx0cHJpdmF0ZSBiU2VjdGlvbk5hdmlnYXRlZD86IGJvb2xlYW47XG5cblx0cHJpdmF0ZSBzd2l0Y2hEcmFmdEFuZEFjdGl2ZVBvcE92ZXI/OiBQb3BvdmVyO1xuXG5cdHByaXZhdGUgY3VycmVudEJpbmRpbmc/OiBCaW5kaW5nO1xuXG5cdHByaXZhdGUgbWVzc2FnZUJ1dHRvbjogYW55O1xuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRnZXRFeHRlbnNpb25BUEkoc0lkPzogc3RyaW5nKTogRXh0ZW5zaW9uQVBJIHtcblx0XHRpZiAoc0lkKSB7XG5cdFx0XHQvLyB0byBhbGxvdyBsb2NhbCBJRCB1c2FnZSBmb3IgY3VzdG9tIHBhZ2VzIHdlJ2xsIGNyZWF0ZS9yZXR1cm4gb3duIGluc3RhbmNlcyBmb3IgY3VzdG9tIHNlY3Rpb25zXG5cdFx0XHR0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcyA9IHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzIHx8IHt9O1xuXG5cdFx0XHRpZiAoIXRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF0pIHtcblx0XHRcdFx0dGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXSA9IG5ldyBFeHRlbnNpb25BUEkodGhpcywgc0lkKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoIXRoaXMuZXh0ZW5zaW9uQVBJKSB7XG5cdFx0XHRcdHRoaXMuZXh0ZW5zaW9uQVBJID0gbmV3IEV4dGVuc2lvbkFQSSh0aGlzKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzLmV4dGVuc2lvbkFQSTtcblx0XHR9XG5cdH1cblxuXHRvbkluaXQoKSB7XG5cdFx0c3VwZXIub25Jbml0KCk7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXG5cdFx0Ly8gU2V0dGluZyBkZWZhdWx0cyBvZiBpbnRlcm5hbCBtb2RlbCBjb250ZXh0XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiZXh0ZXJuYWxOYXZpZ2F0aW9uQ29udGV4dFwiLCB7IHBhZ2U6IHRydWUgfSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcInJlbGF0ZWRBcHBzXCIsIHtcblx0XHRcdHZpc2liaWxpdHk6IGZhbHNlLFxuXHRcdFx0aXRlbXM6IG51bGxcblx0XHR9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiYmF0Y2hHcm91cHNcIiwgdGhpcy5fZ2V0QmF0Y2hHcm91cHNGb3JWaWV3KCkpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJlcnJvck5hdmlnYXRpb25TZWN0aW9uRmxhZ1wiLCBmYWxzZSk7XG5cdFx0aWYgKG9PYmplY3RQYWdlLmdldEVuYWJsZUxhenlMb2FkaW5nKCkpIHtcblx0XHRcdC8vQXR0YWNoaW5nIHRoZSBldmVudCB0byBtYWtlIHRoZSBzdWJzZWN0aW9uIGNvbnRleHQgYmluZGluZyBhY3RpdmUgd2hlbiBpdCBpcyB2aXNpYmxlLlxuXHRcdFx0b09iamVjdFBhZ2UuYXR0YWNoRXZlbnQoXCJzdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0XCIsIHRoaXMuX2hhbmRsZVN1YlNlY3Rpb25FbnRlcmVkVmlld1BvcnQuYmluZCh0aGlzKSk7XG5cdFx0fVxuXHRcdHRoaXMubWVzc2FnZUJ1dHRvbiA9IHRoaXMuZ2V0VmlldygpLmJ5SWQoXCJmZTo6Rm9vdGVyQmFyOjpNZXNzYWdlQnV0dG9uXCIpO1xuXHRcdHRoaXMubWVzc2FnZUJ1dHRvbi5vSXRlbUJpbmRpbmcuYXR0YWNoQ2hhbmdlKHRoaXMuX2ZuU2hvd09QTWVzc2FnZSwgdGhpcyk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcInJvb3RFZGl0RW5hYmxlZFwiLCB0cnVlKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwicm9vdEVkaXRWaXNpYmxlXCIsIHRydWUpO1xuXHR9XG5cblx0b25FeGl0KCkge1xuXHRcdGlmICh0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcykge1xuXHRcdFx0Zm9yIChjb25zdCBzSWQgb2YgT2JqZWN0LmtleXModGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXMpKSB7XG5cdFx0XHRcdGlmICh0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdKSB7XG5cdFx0XHRcdFx0dGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXS5kZXN0cm95KCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGRlbGV0ZSB0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcztcblx0XHR9XG5cdFx0aWYgKHRoaXMuZXh0ZW5zaW9uQVBJKSB7XG5cdFx0XHR0aGlzLmV4dGVuc2lvbkFQSS5kZXN0cm95KCk7XG5cdFx0fVxuXHRcdGRlbGV0ZSB0aGlzLmV4dGVuc2lvbkFQSTtcblxuXHRcdGNvbnN0IG9NZXNzYWdlUG9wb3ZlciA9IHRoaXMubWVzc2FnZUJ1dHRvbiA/IHRoaXMubWVzc2FnZUJ1dHRvbi5vTWVzc2FnZVBvcG92ZXIgOiBudWxsO1xuXHRcdGlmIChvTWVzc2FnZVBvcG92ZXIgJiYgb01lc3NhZ2VQb3BvdmVyLmlzT3BlbigpKSB7XG5cdFx0XHRvTWVzc2FnZVBvcG92ZXIuY2xvc2UoKTtcblx0XHR9XG5cdFx0Ly93aGVuIGV4aXRpbmcgd2Ugc2V0IGtlZXBBbGl2ZSBjb250ZXh0IHRvIGZhbHNlXG5cdFx0Y29uc3Qgb0NvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQ7XG5cdFx0aWYgKG9Db250ZXh0ICYmIG9Db250ZXh0LmlzS2VlcEFsaXZlKCkpIHtcblx0XHRcdG9Db250ZXh0LnNldEtlZXBBbGl2ZShmYWxzZSk7XG5cdFx0fVxuXHRcdGlmIChpc0Nvbm5lY3RlZCh0aGlzLmdldFZpZXcoKSkpIHtcblx0XHRcdGRpc2Nvbm5lY3QodGhpcy5nZXRWaWV3KCkpOyAvLyBDbGVhbnVwIGNvbGxhYm9yYXRpb24gY29ubmVjdGlvbiB3aGVuIGxlYXZpbmcgdGhlIGFwcFxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gc2hvdyB0aGUgbWVzc2FnZSBzdHJpcCBvbiB0aGUgb2JqZWN0IHBhZ2UuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZm5TaG93T1BNZXNzYWdlKCkge1xuXHRcdGNvbnN0IGV4dGVuc2lvbkFQSSA9IHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCk7XG5cdFx0Y29uc3QgdmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IG1lc3NhZ2VzID0gdGhpcy5tZXNzYWdlQnV0dG9uLm9NZXNzYWdlUG9wb3ZlclxuXHRcdFx0LmdldEl0ZW1zKClcblx0XHRcdC5tYXAoKGl0ZW06IGFueSkgPT4gaXRlbS5nZXRCaW5kaW5nQ29udGV4dChcIm1lc3NhZ2VcIikuZ2V0T2JqZWN0KCkpXG5cdFx0XHQuZmlsdGVyKChtZXNzYWdlOiBNZXNzYWdlKSA9PiB7XG5cdFx0XHRcdHJldHVybiBtZXNzYWdlLmdldFRhcmdldHMoKVswXSA9PT0gdmlldy5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCk7XG5cdFx0XHR9KTtcblxuXHRcdGlmIChleHRlbnNpb25BUEkpIHtcblx0XHRcdGV4dGVuc2lvbkFQSS5zaG93TWVzc2FnZXMobWVzc2FnZXMpO1xuXHRcdH1cblx0fVxuXG5cdF9nZXRUYWJsZUJpbmRpbmcob1RhYmxlOiBhbnkpIHtcblx0XHRyZXR1cm4gb1RhYmxlICYmIG9UYWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cdH1cblxuXHQvKipcblx0ICogRmluZCB0aGUgbGFzdCB2aXNpYmxlIHN1YnNlY3Rpb24gYW5kIGFkZCB0aGUgc2FwVXhBUE9iamVjdFBhZ2VTdWJTZWN0aW9uRml0Q29udGFpbmVyIENTUyBjbGFzcyBpZiBpdCBjb250YWlucyBvbmx5IGEgZ3JpZFRhYmxlLlxuXHQgKlxuXHQgKiBAcGFyYW0gc3ViU2VjdGlvbnMgVGhlIHN1YiBzZWN0aW9ucyB0byBsb29rIGZvclxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0cHJpdmF0ZSBjaGVja1NlY3Rpb25zRm9yR3JpZFRhYmxlKHN1YlNlY3Rpb25zOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdKSB7XG5cdFx0Y29uc3QgY2hhbmdlQ2xhc3NGb3JUYWJsZXMgPSAoZXZlbnQ6IEV2ZW50LCBsYXN0VmlzaWJsZVN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uKSA9PiB7XG5cdFx0XHRjb25zdCBibG9ja3MgPSBbLi4ubGFzdFZpc2libGVTdWJTZWN0aW9uLmdldEJsb2NrcygpLCAuLi5sYXN0VmlzaWJsZVN1YlNlY3Rpb24uZ2V0TW9yZUJsb2NrcygpXTtcblx0XHRcdGlmIChcblx0XHRcdFx0YmxvY2tzLmxlbmd0aCA9PT0gMSAmJlxuXHRcdFx0XHR0aGlzLnNlYXJjaFRhYmxlSW5CbG9jayhibG9ja3NbMF0gYXMgU3ViU2VjdGlvbkJsb2NrKVxuXHRcdFx0XHRcdD8uZ2V0VHlwZSgpXG5cdFx0XHRcdFx0Py5pc0EoXCJzYXAudWkubWRjLnRhYmxlLkdyaWRUYWJsZVR5cGVcIilcblx0XHRcdCkge1xuXHRcdFx0XHQvL0luIGNhc2UgdGhlcmUgaXMgb25seSBhIHNpbmdsZSB0YWJsZSBpbiBhIHN1YlNlY3Rpb24gd2UgZml0IHRoYXQgdG8gdGhlIHdob2xlIHBhZ2Ugc28gdGhhdCB0aGUgc2Nyb2xsYmFyIGNvbWVzIG9ubHkgb24gdGFibGUgYW5kIG5vdCBvbiBwYWdlXG5cdFx0XHRcdGxhc3RWaXNpYmxlU3ViU2VjdGlvbi5hZGRTdHlsZUNsYXNzKFwic2FwVXhBUE9iamVjdFBhZ2VTdWJTZWN0aW9uRml0Q29udGFpbmVyXCIpO1xuXHRcdFx0XHRsYXN0VmlzaWJsZVN1YlNlY3Rpb24uZGV0YWNoRXZlbnQoXCJtb2RlbENvbnRleHRDaGFuZ2VcIiwgY2hhbmdlQ2xhc3NGb3JUYWJsZXMsIHRoaXMpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0Zm9yIChsZXQgc3ViU2VjdGlvbkluZGV4ID0gc3ViU2VjdGlvbnMubGVuZ3RoIC0gMTsgc3ViU2VjdGlvbkluZGV4ID49IDA7IHN1YlNlY3Rpb25JbmRleC0tKSB7XG5cdFx0XHRpZiAoc3ViU2VjdGlvbnNbc3ViU2VjdGlvbkluZGV4XS5nZXRWaXNpYmxlKCkpIHtcblx0XHRcdFx0Y29uc3QgbGFzdFZpc2libGVTdWJTZWN0aW9uID0gc3ViU2VjdGlvbnNbc3ViU2VjdGlvbkluZGV4XTtcblx0XHRcdFx0Ly8gV2UgbmVlZCB0byBhdHRhY2ggdGhpcyBldmVudCBpbiBvcmRlciB0byBtYW5hZ2UgdGhlIE9iamVjdCBQYWdlIExhenkgTG9hZGluZyBtZWNoYW5pc21cblx0XHRcdFx0bGFzdFZpc2libGVTdWJTZWN0aW9uLmF0dGFjaEV2ZW50KFwibW9kZWxDb250ZXh0Q2hhbmdlXCIsIGxhc3RWaXNpYmxlU3ViU2VjdGlvbiwgY2hhbmdlQ2xhc3NGb3JUYWJsZXMsIHRoaXMpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRmluZCBhIHRhYmxlIGluIGJsb2NrcyBvZiBzZWN0aW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0gYmxvY2sgT25lIHN1YiBzZWN0aW9uIGJsb2NrXG5cdCAqIEByZXR1cm5zIFRhYmxlIGlmIGV4aXN0c1xuXHQgKi9cblx0cHJpdmF0ZSBzZWFyY2hUYWJsZUluQmxvY2soYmxvY2s6IFN1YlNlY3Rpb25CbG9jaykge1xuXHRcdGNvbnN0IGNvbnRyb2wgPSBibG9jay5jb250ZW50O1xuXHRcdGxldCB0YWJsZUFQSTogVGFibGVBUEkgfCB1bmRlZmluZWQ7XG5cdFx0aWYgKGJsb2NrLmlzQShcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5jb250cm9scy5TdWJTZWN0aW9uQmxvY2tcIikpIHtcblx0XHRcdC8vIFRoZSB0YWJsZSBtYXkgY3VycmVudGx5IGJlIHNob3duIGluIGEgZnVsbCBzY3JlZW4gZGlhbG9nLCB3ZSBjYW4gdGhlbiBnZXQgdGhlIHJlZmVyZW5jZSB0byB0aGUgVGFibGVBUElcblx0XHRcdC8vIGNvbnRyb2wgZnJvbSB0aGUgY3VzdG9tIGRhdGEgb2YgdGhlIHBsYWNlIGhvbGRlciBwYW5lbFxuXHRcdFx0aWYgKGNvbnRyb2wuaXNBKFwic2FwLm0uUGFuZWxcIikgJiYgY29udHJvbC5kYXRhKFwiRnVsbFNjcmVlblRhYmxlUGxhY2VIb2xkZXJcIikpIHtcblx0XHRcdFx0dGFibGVBUEkgPSBjb250cm9sLmRhdGEoXCJ0YWJsZUFQSXJlZmVyZW5jZVwiKTtcblx0XHRcdH0gZWxzZSBpZiAoY29udHJvbC5pc0EoXCJzYXAuZmUubWFjcm9zLnRhYmxlLlRhYmxlQVBJXCIpKSB7XG5cdFx0XHRcdHRhYmxlQVBJID0gY29udHJvbCBhcyBUYWJsZUFQSTtcblx0XHRcdH1cblx0XHRcdGlmICh0YWJsZUFQSSkge1xuXHRcdFx0XHRyZXR1cm4gdGFibGVBUEkuY29udGVudCBhcyBUYWJsZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRvbkJlZm9yZVJlbmRlcmluZygpIHtcblx0XHRQYWdlQ29udHJvbGxlci5wcm90b3R5cGUub25CZWZvcmVSZW5kZXJpbmcuYXBwbHkodGhpcyk7XG5cdFx0Ly8gSW4gdGhlIHJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3Qgc2NlbmFyaW8gd2UgbmVlZCB0byBlbnN1cmUgaW4gY2FzZSBvZiByZWxvYWQvcmVmcmVzaCB0aGF0IHRoZSBtZXRhIG1vZGVsIGluIHRoZSBtZXRob2RlIHJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3Qgb2YgdGhlIEZpZWxkUnVudGltZSBpcyBhdmFpbGFibGVcblx0XHRpZiAodGhpcy5vVmlldy5vVmlld0RhdGE/LnJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3QgJiYgQ29tbW9uSGVscGVyLmdldE1ldGFNb2RlbCgpID09PSB1bmRlZmluZWQpIHtcblx0XHRcdENvbW1vbkhlbHBlci5zZXRNZXRhTW9kZWwodGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0fVxuXHR9XG5cblx0b25BZnRlclJlbmRlcmluZygpIHtcblx0XHRsZXQgc3ViU2VjdGlvbnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW107XG5cdFx0aWYgKHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkuZ2V0VXNlSWNvblRhYkJhcigpKSB7XG5cdFx0XHRjb25zdCBzZWN0aW9ucyA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkuZ2V0U2VjdGlvbnMoKTtcblx0XHRcdGZvciAoY29uc3Qgc2VjdGlvbiBvZiBzZWN0aW9ucykge1xuXHRcdFx0XHRzdWJTZWN0aW9ucyA9IHNlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKTtcblx0XHRcdFx0dGhpcy5jaGVja1NlY3Rpb25zRm9yR3JpZFRhYmxlKHN1YlNlY3Rpb25zKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0c3ViU2VjdGlvbnMgPSB0aGlzLl9nZXRBbGxTdWJTZWN0aW9ucygpO1xuXHRcdFx0dGhpcy5jaGVja1NlY3Rpb25zRm9yR3JpZFRhYmxlKHN1YlNlY3Rpb25zKTtcblx0XHR9XG5cdH1cblxuXHRfb25CZWZvcmVCaW5kaW5nKG9Db250ZXh0OiBhbnksIG1QYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHQvLyBUT0RPOiB3ZSBzaG91bGQgY2hlY2sgaG93IHRoaXMgY29tZXMgdG9nZXRoZXIgd2l0aCB0aGUgdHJhbnNhY3Rpb24gaGVscGVyLCBzYW1lIHRvIHRoZSBjaGFuZ2UgaW4gdGhlIGFmdGVyQmluZGluZ1xuXHRcdGNvbnN0IGFUYWJsZXMgPSB0aGlzLl9maW5kVGFibGVzKCksXG5cdFx0XHRvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCksXG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0b0ludGVybmFsTW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbCxcblx0XHRcdGFCYXRjaEdyb3VwcyA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImJhdGNoR3JvdXBzXCIpLFxuXHRcdFx0aVZpZXdMZXZlbCA9ICh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkudmlld0xldmVsO1xuXHRcdGxldCBvRmFzdENyZWF0aW9uUm93O1xuXHRcdGFCYXRjaEdyb3Vwcy5wdXNoKFwiJGF1dG9cIik7XG5cdFx0aWYgKG1QYXJhbWV0ZXJzLmJEcmFmdE5hdmlnYXRpb24gIT09IHRydWUpIHtcblx0XHRcdHRoaXMuX2Nsb3NlU2lkZUNvbnRlbnQoKTtcblx0XHR9XG5cdFx0Y29uc3Qgb3BDb250ZXh0ID0gb09iamVjdFBhZ2UuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0O1xuXHRcdGlmIChcblx0XHRcdG9wQ29udGV4dCAmJlxuXHRcdFx0b3BDb250ZXh0Lmhhc1BlbmRpbmdDaGFuZ2VzKCkgJiZcblx0XHRcdCFhQmF0Y2hHcm91cHMuc29tZShvcENvbnRleHQuZ2V0TW9kZWwoKS5oYXNQZW5kaW5nQ2hhbmdlcy5iaW5kKG9wQ29udGV4dC5nZXRNb2RlbCgpKSlcblx0XHQpIHtcblx0XHRcdC8qIFx0SW4gY2FzZSB0aGVyZSBhcmUgcGVuZGluZyBjaGFuZ2VzIGZvciB0aGUgY3JlYXRpb24gcm93IGFuZCBubyBvdGhlcnMgd2UgbmVlZCB0byByZXNldCB0aGUgY2hhbmdlc1xuXHRcdFx0XHRcdFx0XHRcdFRPRE86IHRoaXMgaXMganVzdCBhIHF1aWNrIHNvbHV0aW9uLCB0aGlzIG5lZWRzIHRvIGJlIHJld29ya2VkXG5cdFx0XHRcdFx0XHRcdFx0Ki9cblxuXHRcdFx0b3BDb250ZXh0LmdldEJpbmRpbmcoKS5yZXNldENoYW5nZXMoKTtcblx0XHR9XG5cblx0XHQvLyBGb3Igbm93IHdlIGhhdmUgdG8gc2V0IHRoZSBiaW5kaW5nIGNvbnRleHQgdG8gbnVsbCBmb3IgZXZlcnkgZmFzdCBjcmVhdGlvbiByb3dcblx0XHQvLyBUT0RPOiBHZXQgcmlkIG9mIHRoaXMgY29kaW5nIG9yIG1vdmUgaXQgdG8gYW5vdGhlciBsYXllciAtIHRvIGJlIGRpc2N1c3NlZCB3aXRoIE1EQyBhbmQgbW9kZWxcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFUYWJsZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdG9GYXN0Q3JlYXRpb25Sb3cgPSBhVGFibGVzW2ldLmdldENyZWF0aW9uUm93KCk7XG5cdFx0XHRpZiAob0Zhc3RDcmVhdGlvblJvdykge1xuXHRcdFx0XHRvRmFzdENyZWF0aW9uUm93LnNldEJpbmRpbmdDb250ZXh0KG51bGwpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFNjcm9sbCB0byBwcmVzZW50IFNlY3Rpb24gc28gdGhhdCBiaW5kaW5ncyBhcmUgZW5hYmxlZCBkdXJpbmcgbmF2aWdhdGlvbiB0aHJvdWdoIHBhZ2luYXRvciBidXR0b25zLCBhcyB0aGVyZSBpcyBubyB2aWV3IHJlcmVuZGVyaW5nL3JlYmluZFxuXHRcdGNvbnN0IGZuU2Nyb2xsVG9QcmVzZW50U2VjdGlvbiA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdGlmICghKG9PYmplY3RQYWdlIGFzIGFueSkuaXNGaXJzdFJlbmRlcmluZygpICYmICFtUGFyYW1ldGVycy5iUGVyc2lzdE9QU2Nyb2xsKSB7XG5cdFx0XHRcdG9PYmplY3RQYWdlLnNldFNlbGVjdGVkU2VjdGlvbihudWxsIGFzIGFueSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRvT2JqZWN0UGFnZS5hdHRhY2hFdmVudE9uY2UoXCJtb2RlbENvbnRleHRDaGFuZ2VcIiwgZm5TY3JvbGxUb1ByZXNlbnRTZWN0aW9uKTtcblxuXHRcdC8vIGlmIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIE9iamVjdFBhZ2VMYXlvdXQgaXMgY2hhbmdlZCB0aGVuIHNjcm9sbCB0byBwcmVzZW50IFNlY3Rpb25cblx0XHQvLyBGSVhNRSBJcyB0aGlzIHJlYWxseSB3b3JraW5nIGFzIGludGVuZGVkID8gSW5pdGlhbGx5IHRoaXMgd2FzIG9uQmVmb3JlUmVuZGVyaW5nLCBidXQgbmV2ZXIgdHJpZ2dlcmVkIG9uQmVmb3JlUmVuZGVyaW5nIGJlY2F1c2UgaXQgd2FzIHJlZ2lzdGVyZWQgYWZ0ZXIgaXRcblx0XHRjb25zdCBvRGVsZWdhdGVPbkJlZm9yZSA9IHtcblx0XHRcdG9uQWZ0ZXJSZW5kZXJpbmc6IGZuU2Nyb2xsVG9QcmVzZW50U2VjdGlvblxuXHRcdH07XG5cdFx0b09iamVjdFBhZ2UuYWRkRXZlbnREZWxlZ2F0ZShvRGVsZWdhdGVPbkJlZm9yZSwgdGhpcyk7XG5cdFx0dGhpcy5wYWdlUmVhZHkuYXR0YWNoRXZlbnRPbmNlKFwicGFnZVJlYWR5XCIsIGZ1bmN0aW9uICgpIHtcblx0XHRcdG9PYmplY3RQYWdlLnJlbW92ZUV2ZW50RGVsZWdhdGUob0RlbGVnYXRlT25CZWZvcmUpO1xuXHRcdH0pO1xuXG5cdFx0Ly9TZXQgdGhlIEJpbmRpbmcgZm9yIFBhZ2luYXRvcnMgdXNpbmcgTGlzdEJpbmRpbmcgSURcblx0XHRpZiAoaVZpZXdMZXZlbCA+IDEpIHtcblx0XHRcdGxldCBvQmluZGluZyA9IG1QYXJhbWV0ZXJzICYmIG1QYXJhbWV0ZXJzLmxpc3RCaW5kaW5nO1xuXHRcdFx0Y29uc3Qgb1BhZ2luYXRvckN1cnJlbnRDb250ZXh0ID0gb0ludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvcGFnaW5hdG9yQ3VycmVudENvbnRleHRcIik7XG5cdFx0XHRpZiAob1BhZ2luYXRvckN1cnJlbnRDb250ZXh0KSB7XG5cdFx0XHRcdGNvbnN0IG9CaW5kaW5nVG9Vc2UgPSBvUGFnaW5hdG9yQ3VycmVudENvbnRleHQuZ2V0QmluZGluZygpO1xuXHRcdFx0XHR0aGlzLnBhZ2luYXRvci5pbml0aWFsaXplKG9CaW5kaW5nVG9Vc2UsIG9QYWdpbmF0b3JDdXJyZW50Q29udGV4dCk7XG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL3BhZ2luYXRvckN1cnJlbnRDb250ZXh0XCIsIG51bGwpO1xuXHRcdFx0fSBlbHNlIGlmIChvQmluZGluZykge1xuXHRcdFx0XHRpZiAob0JpbmRpbmcuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIikpIHtcblx0XHRcdFx0XHR0aGlzLnBhZ2luYXRvci5pbml0aWFsaXplKG9CaW5kaW5nLCBvQ29udGV4dCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gaWYgdGhlIGJpbmRpbmcgdHlwZSBpcyBub3QgT0RhdGFMaXN0QmluZGluZyBiZWNhdXNlIG9mIGEgZGVlcGxpbmsgbmF2aWdhdGlvbiBvciBhIHJlZnJlc2ggb2YgdGhlIHBhZ2Vcblx0XHRcdFx0XHQvLyB3ZSBuZWVkIHRvIGNyZWF0ZSBpdFxuXHRcdFx0XHRcdGNvbnN0IHNCaW5kaW5nUGF0aCA9IG9CaW5kaW5nLmdldFBhdGgoKTtcblx0XHRcdFx0XHRpZiAoL1xcKFteKV0qXFwpJC8udGVzdChzQmluZGluZ1BhdGgpKSB7XG5cdFx0XHRcdFx0XHQvLyBUaGUgY3VycmVudCBiaW5kaW5nIHBhdGggZW5kcyB3aXRoICh4eHgpLCBzbyB3ZSBjcmVhdGUgdGhlIGxpc3RCaW5kaW5nIGJ5IHJlbW92aW5nICh4eHgpXG5cdFx0XHRcdFx0XHRjb25zdCBzTGlzdEJpbmRpbmdQYXRoID0gc0JpbmRpbmdQYXRoLnJlcGxhY2UoL1xcKFteKV0qXFwpJC8sIFwiXCIpO1xuXHRcdFx0XHRcdFx0b0JpbmRpbmcgPSBuZXcgKE9EYXRhTGlzdEJpbmRpbmcgYXMgYW55KShvQmluZGluZy5vTW9kZWwsIHNMaXN0QmluZGluZ1BhdGgpO1xuXHRcdFx0XHRcdFx0Y29uc3QgX3NldExpc3RCaW5kaW5nQXN5bmMgPSAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmIChvQmluZGluZy5nZXRDb250ZXh0cygpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnBhZ2luYXRvci5pbml0aWFsaXplKG9CaW5kaW5nLCBvQ29udGV4dCk7XG5cdFx0XHRcdFx0XHRcdFx0b0JpbmRpbmcuZGV0YWNoRXZlbnQoXCJjaGFuZ2VcIiwgX3NldExpc3RCaW5kaW5nQXN5bmMpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRvQmluZGluZy5nZXRDb250ZXh0cygwKTtcblx0XHRcdFx0XHRcdG9CaW5kaW5nLmF0dGFjaEV2ZW50KFwiY2hhbmdlXCIsIF9zZXRMaXN0QmluZGluZ0FzeW5jKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gVGhlIGN1cnJlbnQgYmluZGluZyBkb2Vzbid0IGVuZCB3aXRoICh4eHgpIC0tPiB0aGUgbGFzdCBzZWdtZW50IGlzIGEgMS0xIG5hdmlnYXRpb24sIHNvIHdlIGRvbid0IGRpc3BsYXkgdGhlIHBhZ2luYXRvclxuXHRcdFx0XHRcdFx0dGhpcy5wYWdpbmF0b3IuaW5pdGlhbGl6ZSh1bmRlZmluZWQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChvT2JqZWN0UGFnZS5nZXRFbmFibGVMYXp5TG9hZGluZygpKSB7XG5cdFx0XHRjb25zdCBhU2VjdGlvbnMgPSBvT2JqZWN0UGFnZS5nZXRTZWN0aW9ucygpO1xuXHRcdFx0Y29uc3QgYlVzZUljb25UYWJCYXIgPSBvT2JqZWN0UGFnZS5nZXRVc2VJY29uVGFiQmFyKCk7XG5cdFx0XHRsZXQgaVNraXAgPSAyO1xuXHRcdFx0Y29uc3QgYklzSW5FZGl0TW9kZSA9IG9PYmplY3RQYWdlLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKTtcblx0XHRcdGNvbnN0IGJFZGl0YWJsZUhlYWRlciA9ICh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkuZWRpdGFibGVIZWFkZXJDb250ZW50O1xuXHRcdFx0Zm9yIChsZXQgaVNlY3Rpb24gPSAwOyBpU2VjdGlvbiA8IGFTZWN0aW9ucy5sZW5ndGg7IGlTZWN0aW9uKyspIHtcblx0XHRcdFx0Y29uc3Qgb1NlY3Rpb24gPSBhU2VjdGlvbnNbaVNlY3Rpb25dO1xuXHRcdFx0XHRjb25zdCBhU3ViU2VjdGlvbnMgPSBvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpO1xuXHRcdFx0XHRmb3IgKGxldCBpU3ViU2VjdGlvbiA9IDA7IGlTdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgaVN1YlNlY3Rpb24rKywgaVNraXAtLSkge1xuXHRcdFx0XHRcdC8vIEluIEljb25UYWJCYXIgbW9kZSBrZWVwIHRoZSBzZWNvbmQgc2VjdGlvbiBib3VuZCBpZiB0aGVyZSBpcyBhbiBlZGl0YWJsZSBoZWFkZXIgYW5kIHdlIGFyZSBzd2l0Y2hpbmcgdG8gZGlzcGxheSBtb2RlXG5cdFx0XHRcdFx0aWYgKGlTa2lwIDwgMSB8fCAoYlVzZUljb25UYWJCYXIgJiYgKGlTZWN0aW9uID4gMSB8fCAoaVNlY3Rpb24gPT09IDEgJiYgIWJFZGl0YWJsZUhlYWRlciAmJiAhYklzSW5FZGl0TW9kZSkpKSkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb1N1YlNlY3Rpb24gPSBhU3ViU2VjdGlvbnNbaVN1YlNlY3Rpb25dO1xuXHRcdFx0XHRcdFx0aWYgKG9TdWJTZWN0aW9uLmRhdGEoKS5pc1Zpc2liaWxpdHlEeW5hbWljICE9PSBcInRydWVcIikge1xuXHRcdFx0XHRcdFx0XHRvU3ViU2VjdGlvbi5zZXRCaW5kaW5nQ29udGV4dChudWxsIGFzIGFueSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMucGxhY2Vob2xkZXIuaXNQbGFjZWhvbGRlckVuYWJsZWQoKSAmJiBtUGFyYW1ldGVycy5zaG93UGxhY2Vob2xkZXIpIHtcblx0XHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0XHRjb25zdCBvTmF2Q29udGFpbmVyID0gKG9WaWV3LmdldFBhcmVudCgpIGFzIGFueSkub0NvbnRhaW5lci5nZXRQYXJlbnQoKTtcblx0XHRcdGlmIChvTmF2Q29udGFpbmVyKSB7XG5cdFx0XHRcdG9OYXZDb250YWluZXIuc2hvd1BsYWNlaG9sZGVyKHt9KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfZ2V0Rmlyc3RDbGlja2FibGVFbGVtZW50KG9PYmplY3RQYWdlOiBhbnkpIHtcblx0XHRsZXQgb0ZpcnN0Q2xpY2thYmxlRWxlbWVudDtcblx0XHRjb25zdCBhQWN0aW9ucyA9IG9PYmplY3RQYWdlLmdldEhlYWRlclRpdGxlKCkgJiYgb09iamVjdFBhZ2UuZ2V0SGVhZGVyVGl0bGUoKS5nZXRBY3Rpb25zKCk7XG5cdFx0aWYgKGFBY3Rpb25zICYmIGFBY3Rpb25zLmxlbmd0aCkge1xuXHRcdFx0b0ZpcnN0Q2xpY2thYmxlRWxlbWVudCA9IGFBY3Rpb25zLmZpbmQoZnVuY3Rpb24gKG9BY3Rpb246IGFueSkge1xuXHRcdFx0XHQvLyBEdWUgdG8gdGhlIGxlZnQgYWxpZ25tZW50IG9mIHRoZSBEcmFmdCBzd2l0Y2ggYW5kIHRoZSBjb2xsYWJvcmF0aXZlIGRyYWZ0IGF2YXRhciBjb250cm9sc1xuXHRcdFx0XHQvLyB0aGVyZSBpcyBhIFRvb2xiYXJTcGFjZXIgaW4gdGhlIGFjdGlvbnMgYWdncmVnYXRpb24gd2hpY2ggd2UgbmVlZCB0byBleGNsdWRlIGhlcmUhXG5cdFx0XHRcdC8vIER1ZSB0byB0aGUgQUNDIHJlcG9ydCwgd2UgYWxzbyBuZWVkIG5vdCB0byBjaGVjayBmb3IgdGhlIEludmlzaWJsZVRleHQgZWxlbWVudHNcblx0XHRcdFx0aWYgKG9BY3Rpb24uaXNBKFwic2FwLmZlLm1hY3Jvcy5zaGFyZS5TaGFyZUFQSVwiKSkge1xuXHRcdFx0XHRcdC8vIHNpbmNlIFNoYXJlQVBJIGRvZXMgbm90IGhhdmUgYSBkaXNhYmxlIHByb3BlcnR5XG5cdFx0XHRcdFx0Ly8gaGVuY2UgdGhlcmUgaXMgbm8gbmVlZCB0byBjaGVjayBpZiBpdCBpcyBkaXNiYWxlZCBvciBub3Rcblx0XHRcdFx0XHRyZXR1cm4gb0FjdGlvbi5nZXRWaXNpYmxlKCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoIW9BY3Rpb24uaXNBKFwic2FwLnVpLmNvcmUuSW52aXNpYmxlVGV4dFwiKSAmJiAhb0FjdGlvbi5pc0EoXCJzYXAubS5Ub29sYmFyU3BhY2VyXCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9BY3Rpb24uZ2V0VmlzaWJsZSgpICYmIG9BY3Rpb24uZ2V0RW5hYmxlZCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIG9GaXJzdENsaWNrYWJsZUVsZW1lbnQ7XG5cdH1cblxuXHRfZ2V0Rmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkRnJvbVN1YlNlY3Rpb24oYVN1YlNlY3Rpb25zOiBhbnkpIHtcblx0XHRpZiAoYVN1YlNlY3Rpb25zKSB7XG5cdFx0XHRmb3IgKGxldCBzdWJTZWN0aW9uID0gMDsgc3ViU2VjdGlvbiA8IGFTdWJTZWN0aW9ucy5sZW5ndGg7IHN1YlNlY3Rpb24rKykge1xuXHRcdFx0XHRjb25zdCBhQmxvY2tzID0gYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLmdldEJsb2NrcygpO1xuXG5cdFx0XHRcdGlmIChhQmxvY2tzKSB7XG5cdFx0XHRcdFx0Zm9yIChsZXQgYmxvY2sgPSAwOyBibG9jayA8IGFCbG9ja3MubGVuZ3RoOyBibG9jaysrKSB7XG5cdFx0XHRcdFx0XHRsZXQgYUZvcm1Db250YWluZXJzO1xuXG5cdFx0XHRcdFx0XHRpZiAoYUJsb2Nrc1tibG9ja10uaXNBKFwic2FwLnVpLmxheW91dC5mb3JtLkZvcm1cIikpIHtcblx0XHRcdFx0XHRcdFx0YUZvcm1Db250YWluZXJzID0gYUJsb2Nrc1tibG9ja10uZ2V0Rm9ybUNvbnRhaW5lcnMoKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdFx0XHRcdGFCbG9ja3NbYmxvY2tdLmdldENvbnRlbnQgJiZcblx0XHRcdFx0XHRcdFx0YUJsb2Nrc1tibG9ja10uZ2V0Q29udGVudCgpICYmXG5cdFx0XHRcdFx0XHRcdGFCbG9ja3NbYmxvY2tdLmdldENvbnRlbnQoKS5pc0EoXCJzYXAudWkubGF5b3V0LmZvcm0uRm9ybVwiKVxuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdGFGb3JtQ29udGFpbmVycyA9IGFCbG9ja3NbYmxvY2tdLmdldENvbnRlbnQoKS5nZXRGb3JtQ29udGFpbmVycygpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAoYUZvcm1Db250YWluZXJzKSB7XG5cdFx0XHRcdFx0XHRcdGZvciAobGV0IGZvcm1Db250YWluZXIgPSAwOyBmb3JtQ29udGFpbmVyIDwgYUZvcm1Db250YWluZXJzLmxlbmd0aDsgZm9ybUNvbnRhaW5lcisrKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgYUZvcm1FbGVtZW50cyA9IGFGb3JtQ29udGFpbmVyc1tmb3JtQ29udGFpbmVyXS5nZXRGb3JtRWxlbWVudHMoKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoYUZvcm1FbGVtZW50cykge1xuXHRcdFx0XHRcdFx0XHRcdFx0Zm9yIChsZXQgZm9ybUVsZW1lbnQgPSAwOyBmb3JtRWxlbWVudCA8IGFGb3JtRWxlbWVudHMubGVuZ3RoOyBmb3JtRWxlbWVudCsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGFGaWVsZHMgPSBhRm9ybUVsZW1lbnRzW2Zvcm1FbGVtZW50XS5nZXRGaWVsZHMoKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBUaGUgZmlyc3QgZmllbGQgaXMgbm90IG5lY2Vzc2FyaWx5IGFuIElucHV0QmFzZSAoZS5nLiBjb3VsZCBiZSBhIFRleHQpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFNvIHdlIG5lZWQgdG8gY2hlY2sgd2hldGhlciBpdCBoYXMgYSBnZXRSZXF1aXJlZCBtZXRob2Rcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoYUZpZWxkc1swXS5nZXRSZXF1aXJlZCAmJiBhRmllbGRzWzBdLmdldFJlcXVpcmVkKCkgJiYgIWFGaWVsZHNbMF0uZ2V0VmFsdWUoKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGFGaWVsZHNbMF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdExvZy5kZWJ1ZyhgRXJyb3Igd2hlbiBzZWFyY2hpbmcgZm9yIG1hbmRhb3RyeSBlbXB0eSBmaWVsZDogJHtlcnJvcn1gKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0X3VwZGF0ZUZvY3VzSW5FZGl0TW9kZShhU3ViU2VjdGlvbnM6IGFueSkge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblxuXHRcdGNvbnN0IG9NYW5kYXRvcnlGaWVsZCA9IHRoaXMuX2dldEZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZEZyb21TdWJTZWN0aW9uKGFTdWJTZWN0aW9ucyk7XG5cdFx0bGV0IG9GaWVsZFRvRm9jdXM6IGFueTtcblx0XHRpZiAob01hbmRhdG9yeUZpZWxkKSB7XG5cdFx0XHRvRmllbGRUb0ZvY3VzID0gb01hbmRhdG9yeUZpZWxkLmNvbnRlbnQuZ2V0Q29udGVudEVkaXQoKVswXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b0ZpZWxkVG9Gb2N1cyA9IChvT2JqZWN0UGFnZSBhcyBhbnkpLl9nZXRGaXJzdEVkaXRhYmxlSW5wdXQoKSB8fCB0aGlzLl9nZXRGaXJzdENsaWNrYWJsZUVsZW1lbnQob09iamVjdFBhZ2UpO1xuXHRcdH1cblxuXHRcdGlmIChvRmllbGRUb0ZvY3VzKSB7XG5cdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0Ly8gV2Ugc2V0IHRoZSBmb2N1cyBpbiBhIHRpbWVlb3V0LCBvdGhlcndpc2UgdGhlIGZvY3VzIHNvbWV0aW1lcyBnb2VzIHRvIHRoZSBUYWJCYXJcblx0XHRcdFx0b0ZpZWxkVG9Gb2N1cy5mb2N1cygpO1xuXHRcdFx0fSwgMCk7XG5cdFx0fVxuXHR9XG5cblx0X2hhbmRsZVN1YlNlY3Rpb25FbnRlcmVkVmlld1BvcnQob0V2ZW50OiBhbnkpIHtcblx0XHRjb25zdCBvU3ViU2VjdGlvbiA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJzdWJTZWN0aW9uXCIpO1xuXHRcdG9TdWJTZWN0aW9uLnNldEJpbmRpbmdDb250ZXh0KHVuZGVmaW5lZCk7XG5cdH1cblxuXHRfb25CYWNrTmF2aWdhdGlvbkluRHJhZnQob0NvbnRleHQ6IGFueSkge1xuXHRcdHRoaXMubWVzc2FnZUhhbmRsZXIucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0aWYgKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um91dGVyUHJveHkoKS5jaGVja0lmQmFja0hhc1NhbWVDb250ZXh0KCkpIHtcblx0XHRcdC8vIEJhY2sgbmF2IHdpbGwga2VlcCB0aGUgc2FtZSBjb250ZXh0IC0tPiBubyBuZWVkIHRvIGRpc3BsYXkgdGhlIGRpYWxvZ1xuXHRcdFx0aGlzdG9yeS5iYWNrKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRyYWZ0LnByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uKFxuXHRcdFx0XHRmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0aGlzdG9yeS5iYWNrKCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdEZ1bmN0aW9uLnByb3RvdHlwZSxcblx0XHRcdFx0b0NvbnRleHQsXG5cdFx0XHRcdHRoaXMsXG5cdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRkcmFmdC5OYXZpZ2F0aW9uVHlwZS5CYWNrTmF2aWdhdGlvblxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdF9vbkFmdGVyQmluZGluZyhvQmluZGluZ0NvbnRleHQ6IGFueSwgbVBhcmFtZXRlcnM6IGFueSkge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRjb25zdCBhVGFibGVzID0gdGhpcy5fZmluZFRhYmxlcygpO1xuXG5cdFx0dGhpcy5fc2lkZUVmZmVjdHMuY2xlYXJGaWVsZEdyb3Vwc1ZhbGlkaXR5KCk7XG5cblx0XHQvLyBUT0RPOiB0aGlzIGlzIG9ubHkgYSB0ZW1wIHNvbHV0aW9uIGFzIGxvbmcgYXMgdGhlIG1vZGVsIGZpeCB0aGUgY2FjaGUgaXNzdWUgYW5kIHdlIHVzZSB0aGlzIGFkZGl0aW9uYWxcblx0XHQvLyBiaW5kaW5nIHdpdGggb3duUmVxdWVzdFxuXHRcdG9CaW5kaW5nQ29udGV4dCA9IG9PYmplY3RQYWdlLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cblx0XHRsZXQgYUlCTkFjdGlvbnM6IGFueVtdID0gW107XG5cdFx0b09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvU2VjdGlvbjogYW55KSB7XG5cdFx0XHRvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpLmZvckVhY2goZnVuY3Rpb24gKG9TdWJTZWN0aW9uOiBhbnkpIHtcblx0XHRcdFx0YUlCTkFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9TdWJTZWN0aW9uLCBhSUJOQWN0aW9ucyk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdC8vIEFzc2lnbiBpbnRlcm5hbCBiaW5kaW5nIGNvbnRleHRzIHRvIG9Gb3JtQ29udGFpbmVyOlxuXHRcdC8vIDEuIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBhc3NpZ24gdGhlIGludGVybmFsIGJpbmRpbmcgY29udGV4dCB0byB0aGUgWE1MIGZyYWdtZW50XG5cdFx0Ly8gKEZvcm1Db250YWluZXIuZnJhZ21lbnQueG1sKSB5ZXQgLSBpdCBpcyB1c2VkIGFscmVhZHkgZm9yIHRoZSBkYXRhLXN0cnVjdHVyZS5cblx0XHQvLyAyLiBBbm90aGVyIHByb2JsZW0gaXMsIHRoYXQgRm9ybUNvbnRhaW5lcnMgYXNzaWduZWQgdG8gYSAnTW9yZUJsb2NrJyBkb2VzIG5vdCBoYXZlIGFuXG5cdFx0Ly8gaW50ZXJuYWwgbW9kZWwgY29udGV4dCBhdCBhbGwuXG5cblx0XHRhVGFibGVzLmZvckVhY2goZnVuY3Rpb24gKG9UYWJsZTogYW55KSB7XG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRcdGlmIChvSW50ZXJuYWxNb2RlbENvbnRleHQpIHtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY3JlYXRpb25Sb3dGaWVsZFZhbGlkaXR5XCIsIHt9KTtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY3JlYXRpb25Sb3dDdXN0b21WYWxpZGl0eVwiLCB7fSk7XG5cblx0XHRcdFx0YUlCTkFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9UYWJsZSwgYUlCTkFjdGlvbnMpO1xuXG5cdFx0XHRcdC8vIHRlbXBvcmFyeSB3b3JrYXJvdW5kIGZvciBCQ1A6IDIwODAyMTgwMDRcblx0XHRcdFx0Ly8gTmVlZCB0byBmaXggd2l0aCBCTEk6IEZJT1JJVEVDSFAxLTE1Mjc0XG5cdFx0XHRcdC8vIG9ubHkgZm9yIGVkaXQgbW9kZSwgd2UgY2xlYXIgdGhlIHRhYmxlIGNhY2hlXG5cdFx0XHRcdC8vIFdvcmthcm91bmQgc3RhcnRzIGhlcmUhIVxuXHRcdFx0XHRjb25zdCBvVGFibGVSb3dCaW5kaW5nID0gb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRcdFx0aWYgKG9UYWJsZVJvd0JpbmRpbmcpIHtcblx0XHRcdFx0XHRpZiAoTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKG9UYWJsZVJvd0JpbmRpbmcuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSkpIHtcblx0XHRcdFx0XHRcdC8vIGFwcGx5IGZvciBib3RoIGVkaXQgYW5kIGRpc3BsYXkgbW9kZSBpbiBzdGlja3lcblx0XHRcdFx0XHRcdG9UYWJsZVJvd0JpbmRpbmcucmVtb3ZlQ2FjaGVzQW5kTWVzc2FnZXMoXCJcIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIFdvcmthcm91bmQgZW5kcyBoZXJlISFcblxuXHRcdFx0XHQvLyBVcGRhdGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIERhdGFGaWVsZEZvckFjdGlvbiBidXR0b25zIG9uIHRhYmxlIHRvb2xiYXJcblx0XHRcdFx0Ly8gVGhlIHNhbWUgaXMgYWxzbyBwZXJmb3JtZWQgb24gVGFibGUgc2VsZWN0aW9uQ2hhbmdlIGV2ZW50XG5cdFx0XHRcdGNvbnN0IG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAgPSBKU09OLnBhcnNlKFxuXHRcdFx0XHRcdFx0Q29tbW9uSGVscGVyLnBhcnNlQ3VzdG9tRGF0YShEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YShvVGFibGUsIFwib3BlcmF0aW9uQXZhaWxhYmxlTWFwXCIpKVxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0YVNlbGVjdGVkQ29udGV4dHMgPSBvVGFibGUuZ2V0U2VsZWN0ZWRDb250ZXh0cygpO1xuXG5cdFx0XHRcdEFjdGlvblJ1bnRpbWUuc2V0QWN0aW9uRW5hYmxlbWVudChvSW50ZXJuYWxNb2RlbENvbnRleHQsIG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAsIGFTZWxlY3RlZENvbnRleHRzLCBcInRhYmxlXCIpO1xuXHRcdFx0XHQvLyBDbGVhciB0aGUgc2VsZWN0aW9uIGluIHRoZSB0YWJsZSwgbmVlZCB0byBiZSBmaXhlZCBhbmQgcmV2aWV3IHdpdGggQkxJOiBGSU9SSVRFQ0hQMS0yNDMxOFxuXHRcdFx0XHRvVGFibGUuY2xlYXJTZWxlY3Rpb24oKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRDb21tb25VdGlscy5nZXRTZW1hbnRpY1RhcmdldHNGcm9tUGFnZU1vZGVsKHRoaXMsIFwiX3BhZ2VNb2RlbFwiKTtcblx0XHQvL1JldHJpZXZlIE9iamVjdCBQYWdlIGhlYWRlciBhY3Rpb25zIGZyb20gT2JqZWN0IFBhZ2UgdGl0bGUgY29udHJvbFxuXHRcdGNvbnN0IG9PYmplY3RQYWdlVGl0bGUgPSBvT2JqZWN0UGFnZS5nZXRIZWFkZXJUaXRsZSgpIGFzIE9iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGU7XG5cdFx0bGV0IGFJQk5IZWFkZXJBY3Rpb25zOiBhbnlbXSA9IFtdO1xuXHRcdGFJQk5IZWFkZXJBY3Rpb25zID0gQ29tbW9uVXRpbHMuZ2V0SUJOQWN0aW9ucyhvT2JqZWN0UGFnZVRpdGxlLCBhSUJOSGVhZGVyQWN0aW9ucyk7XG5cdFx0YUlCTkFjdGlvbnMgPSBhSUJOQWN0aW9ucy5jb25jYXQoYUlCTkhlYWRlckFjdGlvbnMpO1xuXHRcdENvbW1vblV0aWxzLnVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5KGFJQk5BY3Rpb25zLCB0aGlzLmdldFZpZXcoKSk7XG5cblx0XHRsZXQgb01vZGVsOiBhbnksIG9GaW5hbFVJU3RhdGU6IGFueTtcblxuXHRcdC8vIHRoaXMgc2hvdWxkIG5vdCBiZSBuZWVkZWQgYXQgdGhlIGFsbFxuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSBvVGFibGVcblx0XHQgKi9cblx0XHRjb25zdCBoYW5kbGVUYWJsZU1vZGlmaWNhdGlvbnMgPSAob1RhYmxlOiBhbnkpID0+IHtcblx0XHRcdGNvbnN0IG9CaW5kaW5nID0gdGhpcy5fZ2V0VGFibGVCaW5kaW5nKG9UYWJsZSksXG5cdFx0XHRcdGZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cyA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRUYWJsZUhlbHBlci5lbmFibGVGYXN0Q3JlYXRpb25Sb3coXG5cdFx0XHRcdFx0XHRvVGFibGUuZ2V0Q3JlYXRpb25Sb3coKSxcblx0XHRcdFx0XHRcdG9CaW5kaW5nLmdldFBhdGgoKSxcblx0XHRcdFx0XHRcdG9CaW5kaW5nLmdldENvbnRleHQoKSxcblx0XHRcdFx0XHRcdG9Nb2RlbCxcblx0XHRcdFx0XHRcdG9GaW5hbFVJU3RhdGVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRpZiAoIW9CaW5kaW5nKSB7XG5cdFx0XHRcdExvZy5lcnJvcihgRXhwZWN0ZWQgYmluZGluZyBtaXNzaW5nIGZvciB0YWJsZTogJHtvVGFibGUuZ2V0SWQoKX1gKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAob0JpbmRpbmcub0NvbnRleHQpIHtcblx0XHRcdFx0Zm5IYW5kbGVUYWJsZVBhdGNoRXZlbnRzKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBmbkhhbmRsZUNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRpZiAob0JpbmRpbmcub0NvbnRleHQpIHtcblx0XHRcdFx0XHRcdGZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cygpO1xuXHRcdFx0XHRcdFx0b0JpbmRpbmcuZGV0YWNoQ2hhbmdlKGZuSGFuZGxlQ2hhbmdlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHRcdG9CaW5kaW5nLmF0dGFjaENoYW5nZShmbkhhbmRsZUNoYW5nZSk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGlmIChvQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdG9Nb2RlbCA9IG9CaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpO1xuXG5cdFx0XHQvLyBDb21wdXRlIEVkaXQgTW9kZVxuXHRcdFx0b0ZpbmFsVUlTdGF0ZSA9IHRoaXMuZWRpdEZsb3cuY29tcHV0ZUVkaXRNb2RlKG9CaW5kaW5nQ29udGV4dCk7XG5cblx0XHRcdGlmIChNb2RlbEhlbHBlci5pc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZChvTW9kZWwuZ2V0TWV0YU1vZGVsKCkpKSB7XG5cdFx0XHRcdG9GaW5hbFVJU3RhdGVcblx0XHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAodGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpKSB7XG5cdFx0XHRcdFx0XHRcdGNvbm5lY3QodGhpcy5nZXRWaWV3KCkpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChpc0Nvbm5lY3RlZCh0aGlzLmdldFZpZXcoKSkpIHtcblx0XHRcdFx0XHRcdFx0ZGlzY29ubmVjdCh0aGlzLmdldFZpZXcoKSk7IC8vIENsZWFudXAgY29sbGFib3JhdGlvbiBjb25uZWN0aW9uIGluIGNhc2Ugd2Ugc3dpdGNoIHRvIGFub3RoZXIgZWxlbWVudCAoZS5nLiBpbiBGQ0wpXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSB3YWl0aW5nIGZvciB0aGUgZmluYWwgVUkgU3RhdGVcIiwgb0Vycm9yKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdC8vIHVwZGF0ZSByZWxhdGVkIGFwcHNcblx0XHRcdHRoaXMuX3VwZGF0ZVJlbGF0ZWRBcHBzKCk7XG5cblx0XHRcdC8vQXR0YWNoIHRoZSBwYXRjaCBzZW50IGFuZCBwYXRjaCBjb21wbGV0ZWQgZXZlbnQgdG8gdGhlIG9iamVjdCBwYWdlIGJpbmRpbmcgc28gdGhhdCB3ZSBjYW4gcmVhY3Rcblx0XHRcdGNvbnN0IG9CaW5kaW5nID0gKG9CaW5kaW5nQ29udGV4dC5nZXRCaW5kaW5nICYmIG9CaW5kaW5nQ29udGV4dC5nZXRCaW5kaW5nKCkpIHx8IG9CaW5kaW5nQ29udGV4dDtcblxuXHRcdFx0Ly8gQXR0YWNoIHRoZSBldmVudCBoYW5kbGVyIG9ubHkgb25jZSB0byB0aGUgc2FtZSBiaW5kaW5nXG5cdFx0XHRpZiAodGhpcy5jdXJyZW50QmluZGluZyAhPT0gb0JpbmRpbmcpIHtcblx0XHRcdFx0b0JpbmRpbmcuYXR0YWNoRXZlbnQoXCJwYXRjaFNlbnRcIiwgdGhpcy5lZGl0Rmxvdy5oYW5kbGVQYXRjaFNlbnQsIHRoaXMpO1xuXHRcdFx0XHR0aGlzLmN1cnJlbnRCaW5kaW5nID0gb0JpbmRpbmc7XG5cdFx0XHR9XG5cblx0XHRcdGFUYWJsZXMuZm9yRWFjaChmdW5jdGlvbiAob1RhYmxlOiBhbnkpIHtcblx0XHRcdFx0Ly8gYWNjZXNzIGJpbmRpbmcgb25seSBhZnRlciB0YWJsZSBpcyBib3VuZFxuXHRcdFx0XHRUYWJsZVV0aWxzLndoZW5Cb3VuZChvVGFibGUpXG5cdFx0XHRcdFx0LnRoZW4oaGFuZGxlVGFibGVNb2RpZmljYXRpb25zKVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSB0YWJsZSB0byBiZSBib3VuZFwiLCBvRXJyb3IpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdC8vIHNob3VsZCBiZSBjYWxsZWQgb25seSBhZnRlciBiaW5kaW5nIGlzIHJlYWR5IGhlbmNlIGNhbGxpbmcgaXQgaW4gb25BZnRlckJpbmRpbmdcblx0XHRcdChvT2JqZWN0UGFnZSBhcyBhbnkpLl90cmlnZ2VyVmlzaWJsZVN1YlNlY3Rpb25zRXZlbnRzKCk7XG5cblx0XHRcdC8vVG8gQ29tcHV0ZSB0aGUgRWRpdCBCaW5kaW5nIG9mIHRoZSBzdWJPYmplY3QgcGFnZSB1c2luZyByb290IG9iamVjdCBwYWdlLCBjcmVhdGUgYSBjb250ZXh0IGZvciBkcmFmdCByb290IGFuZCB1cGRhdGUgdGhlIGVkaXQgYnV0dG9uIGluIHN1YiBPUCB1c2luZyB0aGUgY29udGV4dFxuXHRcdFx0QWN0aW9uUnVudGltZS51cGRhdGVFZGl0QnV0dG9uVmlzaWJpbGl0eUFuZEVuYWJsZW1lbnQodGhpcy5nZXRWaWV3KCkpO1xuXHRcdH1cblx0fVxuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0b25QYWdlUmVhZHkobVBhcmFtZXRlcnM6IGFueSkge1xuXHRcdGNvbnN0IHNldEZvY3VzID0gKCkgPT4ge1xuXHRcdFx0Ly8gU2V0IHRoZSBmb2N1cyB0byB0aGUgZmlyc3QgYWN0aW9uIGJ1dHRvbiwgb3IgdG8gdGhlIGZpcnN0IGVkaXRhYmxlIGlucHV0IGlmIGluIGVkaXRhYmxlIG1vZGVcblx0XHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRcdGNvbnN0IGlzSW5EaXNwbGF5TW9kZSA9ICFvT2JqZWN0UGFnZS5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIik7XG5cblx0XHRcdGlmIChpc0luRGlzcGxheU1vZGUpIHtcblx0XHRcdFx0Y29uc3Qgb0ZpcnN0Q2xpY2thYmxlRWxlbWVudCA9IHRoaXMuX2dldEZpcnN0Q2xpY2thYmxlRWxlbWVudChvT2JqZWN0UGFnZSk7XG5cdFx0XHRcdGlmIChvRmlyc3RDbGlja2FibGVFbGVtZW50KSB7XG5cdFx0XHRcdFx0b0ZpcnN0Q2xpY2thYmxlRWxlbWVudC5mb2N1cygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBvU2VsZWN0ZWRTZWN0aW9uOiBhbnkgPSBDb3JlLmJ5SWQob09iamVjdFBhZ2UuZ2V0U2VsZWN0ZWRTZWN0aW9uKCkpO1xuXHRcdFx0XHRpZiAob1NlbGVjdGVkU2VjdGlvbikge1xuXHRcdFx0XHRcdHRoaXMuX3VwZGF0ZUZvY3VzSW5FZGl0TW9kZShvU2VsZWN0ZWRTZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0XHQvLyBBcHBseSBhcHAgc3RhdGUgb25seSBhZnRlciB0aGUgcGFnZSBpcyByZWFkeSB3aXRoIHRoZSBmaXJzdCBzZWN0aW9uIHNlbGVjdGVkXG5cdFx0Y29uc3Qgb1ZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0Ly9TaG93IHBvcHVwIHdoaWxlIG5hdmlnYXRpbmcgYmFjayBmcm9tIG9iamVjdCBwYWdlIGluIGNhc2Ugb2YgZHJhZnRcblx0XHRpZiAob0JpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRjb25zdCBiSXNTdGlja3lNb2RlID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKChvQmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0XHRpZiAoIWJJc1N0aWNreU1vZGUpIHtcblx0XHRcdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChvVmlldyk7XG5cdFx0XHRcdG9BcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpLnNldEJhY2tOYXZpZ2F0aW9uKCgpID0+IHRoaXMuX29uQmFja05hdmlnYXRpb25JbkRyYWZ0KG9CaW5kaW5nQ29udGV4dCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRjb25zdCB2aWV3SWQgPSB0aGlzLmdldFZpZXcoKS5nZXRJZCgpO1xuXHRcdHRoaXMuZ2V0QXBwQ29tcG9uZW50KClcblx0XHRcdC5nZXRBcHBTdGF0ZUhhbmRsZXIoKVxuXHRcdFx0LmFwcGx5QXBwU3RhdGUodmlld0lkLCB0aGlzLmdldFZpZXcoKSlcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0aWYgKG1QYXJhbWV0ZXJzLmZvcmNlRm9jdXMpIHtcblx0XHRcdFx0XHRzZXRGb2N1cygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChFcnJvcikge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBzZXR0aW5nIHRoZSBmb2N1c1wiLCBFcnJvcik7XG5cdFx0XHR9KTtcblxuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImVycm9yTmF2aWdhdGlvblNlY3Rpb25GbGFnXCIsIGZhbHNlKTtcblx0XHR0aGlzLl9jaGVja0RhdGFQb2ludFRpdGxlRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uKCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBzdGF0dXMgb2YgZWRpdCBtb2RlIGZvciBzdGlja3kgc2Vzc2lvbi5cblx0ICpcblx0ICogQHJldHVybnMgVGhlIHN0YXR1cyBvZiBlZGl0IG1vZGUgZm9yIHN0aWNreSBzZXNzaW9uXG5cdCAqL1xuXHRnZXRTdGlja3lFZGl0TW9kZSgpIHtcblx0XHRjb25zdCBvQmluZGluZ0NvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCAmJiAodGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0KTtcblx0XHRsZXQgYklzU3RpY2t5RWRpdE1vZGUgPSBmYWxzZTtcblx0XHRpZiAob0JpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRjb25zdCBiSXNTdGlja3lNb2RlID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKG9CaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpKTtcblx0XHRcdGlmIChiSXNTdGlja3lNb2RlKSB7XG5cdFx0XHRcdGJJc1N0aWNreUVkaXRNb2RlID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gYklzU3RpY2t5RWRpdE1vZGU7XG5cdH1cblxuXHRfZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKSB7XG5cdFx0cmV0dXJuIHRoaXMuYnlJZChcImZlOjpPYmplY3RQYWdlXCIpIGFzIE9iamVjdFBhZ2VMYXlvdXQ7XG5cdH1cblxuXHRfZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24oKSB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlU3VidGl0bGUgPSBvT2JqZWN0UGFnZS5nZXRDdXN0b21EYXRhKCkuZmluZChmdW5jdGlvbiAob0N1c3RvbURhdGE6IGFueSkge1xuXHRcdFx0cmV0dXJuIG9DdXN0b21EYXRhLmdldEtleSgpID09PSBcIk9iamVjdFBhZ2VTdWJ0aXRsZVwiO1xuXHRcdH0pO1xuXHRcdHJldHVybiB7XG5cdFx0XHR0aXRsZTogb09iamVjdFBhZ2UuZGF0YShcIk9iamVjdFBhZ2VUaXRsZVwiKSB8fCBcIlwiLFxuXHRcdFx0c3VidGl0bGU6IG9PYmplY3RQYWdlU3VidGl0bGUgJiYgb09iamVjdFBhZ2VTdWJ0aXRsZS5nZXRWYWx1ZSgpLFxuXHRcdFx0aW50ZW50OiBcIlwiLFxuXHRcdFx0aWNvbjogXCJcIlxuXHRcdH07XG5cdH1cblxuXHRfZXhlY3V0ZUhlYWRlclNob3J0Y3V0KHNJZDogYW55KSB7XG5cdFx0Y29uc3Qgc0J1dHRvbklkID0gYCR7dGhpcy5nZXRWaWV3KCkuZ2V0SWQoKX0tLSR7c0lkfWAsXG5cdFx0XHRvQnV0dG9uID0gKHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkuZ2V0SGVhZGVyVGl0bGUoKSBhcyBPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlKVxuXHRcdFx0XHQuZ2V0QWN0aW9ucygpXG5cdFx0XHRcdC5maW5kKGZ1bmN0aW9uIChvRWxlbWVudDogYW55KSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9FbGVtZW50LmdldElkKCkgPT09IHNCdXR0b25JZDtcblx0XHRcdFx0fSk7XG5cdFx0aWYgKG9CdXR0b24pIHtcblx0XHRcdENvbW1vblV0aWxzLmZpcmVCdXR0b25QcmVzcyhvQnV0dG9uKTtcblx0XHR9XG5cdH1cblxuXHRfZXhlY3V0ZUZvb3RlclNob3J0Y3V0KHNJZDogYW55KSB7XG5cdFx0Y29uc3Qgc0J1dHRvbklkID0gYCR7dGhpcy5nZXRWaWV3KCkuZ2V0SWQoKX0tLSR7c0lkfWAsXG5cdFx0XHRvQnV0dG9uID0gKHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkuZ2V0Rm9vdGVyKCkgYXMgYW55KS5nZXRDb250ZW50KCkuZmluZChmdW5jdGlvbiAob0VsZW1lbnQ6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4gb0VsZW1lbnQuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCkgPT09IFwic2FwLm0uQnV0dG9uXCIgJiYgb0VsZW1lbnQuZ2V0SWQoKSA9PT0gc0J1dHRvbklkO1xuXHRcdFx0fSk7XG5cdFx0Q29tbW9uVXRpbHMuZmlyZUJ1dHRvblByZXNzKG9CdXR0b24pO1xuXHR9XG5cblx0X2V4ZWN1dGVUYWJTaG9ydEN1dChvRXhlY3V0aW9uOiBhbnkpIHtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCksXG5cdFx0XHRhU2VjdGlvbnMgPSBvT2JqZWN0UGFnZS5nZXRTZWN0aW9ucygpLFxuXHRcdFx0aVNlY3Rpb25JbmRleE1heCA9IGFTZWN0aW9ucy5sZW5ndGggLSAxLFxuXHRcdFx0c0NvbW1hbmQgPSBvRXhlY3V0aW9uLm9Tb3VyY2UuZ2V0Q29tbWFuZCgpO1xuXHRcdGxldCBuZXdTZWN0aW9uLFxuXHRcdFx0aVNlbGVjdGVkU2VjdGlvbkluZGV4ID0gb09iamVjdFBhZ2UuaW5kZXhPZlNlY3Rpb24odGhpcy5ieUlkKG9PYmplY3RQYWdlLmdldFNlbGVjdGVkU2VjdGlvbigpKSBhcyBPYmplY3RQYWdlU2VjdGlvbik7XG5cdFx0aWYgKGlTZWxlY3RlZFNlY3Rpb25JbmRleCAhPT0gLTEgJiYgaVNlY3Rpb25JbmRleE1heCA+IDApIHtcblx0XHRcdGlmIChzQ29tbWFuZCA9PT0gXCJOZXh0VGFiXCIpIHtcblx0XHRcdFx0aWYgKGlTZWxlY3RlZFNlY3Rpb25JbmRleCA8PSBpU2VjdGlvbkluZGV4TWF4IC0gMSkge1xuXHRcdFx0XHRcdG5ld1NlY3Rpb24gPSBhU2VjdGlvbnNbKytpU2VsZWN0ZWRTZWN0aW9uSW5kZXhdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGlTZWxlY3RlZFNlY3Rpb25JbmRleCAhPT0gMCkge1xuXHRcdFx0XHQvLyBQcmV2aW91c1RhYlxuXHRcdFx0XHRuZXdTZWN0aW9uID0gYVNlY3Rpb25zWy0taVNlbGVjdGVkU2VjdGlvbkluZGV4XTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG5ld1NlY3Rpb24pIHtcblx0XHRcdFx0b09iamVjdFBhZ2Uuc2V0U2VsZWN0ZWRTZWN0aW9uKG5ld1NlY3Rpb24pO1xuXHRcdFx0XHRuZXdTZWN0aW9uLmZvY3VzKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X2dldEZvb3RlclZpc2liaWxpdHkoKSB7XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBzVmlld0lkID0gdGhpcy5nZXRWaWV3KCkuZ2V0SWQoKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJtZXNzYWdlRm9vdGVyQ29udGFpbnNFcnJvcnNcIiwgZmFsc2UpO1xuXHRcdHNhcC51aVxuXHRcdFx0LmdldENvcmUoKVxuXHRcdFx0LmdldE1lc3NhZ2VNYW5hZ2VyKClcblx0XHRcdC5nZXRNZXNzYWdlTW9kZWwoKVxuXHRcdFx0LmdldERhdGEoKVxuXHRcdFx0LmZvckVhY2goZnVuY3Rpb24gKG9NZXNzYWdlOiBhbnkpIHtcblx0XHRcdFx0aWYgKG9NZXNzYWdlLnZhbGlkYXRpb24gJiYgb01lc3NhZ2UudHlwZSA9PT0gXCJFcnJvclwiICYmIG9NZXNzYWdlLnRhcmdldC5pbmRleE9mKHNWaWV3SWQpID4gLTEpIHtcblx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJtZXNzYWdlRm9vdGVyQ29udGFpbnNFcnJvcnNcIiwgdHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHR9XG5cblx0X3Nob3dNZXNzYWdlUG9wb3ZlcihlcnI/OiBhbnksIG9SZXQ/OiBhbnkpIHtcblx0XHRpZiAoZXJyKSB7XG5cdFx0XHRMb2cuZXJyb3IoZXJyKTtcblx0XHR9XG5cdFx0Y29uc3Qgcm9vdFZpZXdDb250cm9sbGVyID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb290Vmlld0NvbnRyb2xsZXIoKSBhcyBhbnk7XG5cdFx0Y29uc3QgY3VycmVudFBhZ2VWaWV3ID0gcm9vdFZpZXdDb250cm9sbGVyLmlzRmNsRW5hYmxlZCgpXG5cdFx0XHQ/IHJvb3RWaWV3Q29udHJvbGxlci5nZXRSaWdodG1vc3RWaWV3KClcblx0XHRcdDogKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um9vdENvbnRhaW5lcigpIGFzIGFueSkuZ2V0Q3VycmVudFBhZ2UoKTtcblx0XHRpZiAoIWN1cnJlbnRQYWdlVmlldy5pc0EoXCJzYXAubS5NZXNzYWdlUGFnZVwiKSkge1xuXHRcdFx0Y29uc3Qgb01lc3NhZ2VCdXR0b24gPSB0aGlzLm1lc3NhZ2VCdXR0b24sXG5cdFx0XHRcdG9NZXNzYWdlUG9wb3ZlciA9IG9NZXNzYWdlQnV0dG9uLm9NZXNzYWdlUG9wb3Zlcixcblx0XHRcdFx0b0l0ZW1CaW5kaW5nID0gb01lc3NhZ2VQb3BvdmVyLmdldEJpbmRpbmcoXCJpdGVtc1wiKTtcblxuXHRcdFx0aWYgKG9JdGVtQmluZGluZy5nZXRMZW5ndGgoKSA+IDAgJiYgIW9NZXNzYWdlUG9wb3Zlci5pc09wZW4oKSkge1xuXHRcdFx0XHRvTWVzc2FnZUJ1dHRvbi5zZXRWaXNpYmxlKHRydWUpO1xuXHRcdFx0XHQvLyB3b3JrYXJvdW5kIHRvIGVuc3VyZSB0aGF0IG9NZXNzYWdlQnV0dG9uIGlzIHJlbmRlcmVkIHdoZW4gb3BlbkJ5IGlzIGNhbGxlZFxuXHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRvTWVzc2FnZVBvcG92ZXIub3BlbkJ5KG9NZXNzYWdlQnV0dG9uKTtcblx0XHRcdFx0fSwgMCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvUmV0O1xuXHR9XG5cblx0X2VkaXREb2N1bWVudChvQ29udGV4dDogYW55KSB7XG5cdFx0Y29uc3Qgb01vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKTtcblx0XHRCdXN5TG9ja2VyLmxvY2sob01vZGVsKTtcblx0XHRyZXR1cm4gdGhpcy5lZGl0Rmxvdy5lZGl0RG9jdW1lbnQuYXBwbHkodGhpcy5lZGl0RmxvdywgW29Db250ZXh0XSkuZmluYWxseShmdW5jdGlvbiAoKSB7XG5cdFx0XHRCdXN5TG9ja2VyLnVubG9jayhvTW9kZWwpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGNvbnRleHQgb2YgdGhlIERyYWZ0Um9vdCBwYXRoLlxuXHQgKiBJZiBhIHZpZXcgaGFzIGJlZW4gY3JlYXRlZCB3aXRoIHRoZSBkcmFmdCBSb290IFBhdGgsIHRoaXMgbWV0aG9kIHJldHVybnMgaXRzIGJpbmRpbmdDb250ZXh0LlxuXHQgKiBXaGVyZSBubyB2aWV3IGlzIGZvdW5kIGEgbmV3IGNyZWF0ZWQgY29udGV4dCBpcyByZXR1cm5lZC5cblx0ICogVGhlIG5ldyBjcmVhdGVkIGNvbnRleHQgcmVxdWVzdCB0aGUga2V5IG9mIHRoZSBlbnRpdHkgaW4gb3JkZXIgdG8gZ2V0IHRoZSBFdGFnIG9mIHRoaXMgZW50aXR5LlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgZ2V0RHJhZnRSb290UGF0aFxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIGEgUHJvbWlzZVxuXHQgKi9cblx0YXN5bmMgZ2V0RHJhZnRSb290Q29udGV4dCgpOiBQcm9taXNlPENvbnRleHQgfCB1bmRlZmluZWQ+IHtcblx0XHRjb25zdCB2aWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0Y29uc3QgY29udGV4dCA9IHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0O1xuXHRcdGlmIChjb250ZXh0KSB7XG5cdFx0XHRjb25zdCBkcmFmdFJvb3RDb250ZXh0UGF0aCA9IE1vZGVsSGVscGVyLmdldERyYWZ0Um9vdFBhdGgoY29udGV4dCk7XG5cdFx0XHRsZXQgc2ltcGxlRHJhZnRSb290Q29udGV4dDogQ29udGV4dDtcblx0XHRcdGlmIChkcmFmdFJvb3RDb250ZXh0UGF0aCkge1xuXHRcdFx0XHQvLyBDaGVjayBpZiBhIHZpZXcgbWF0Y2hlcyB3aXRoIHRoZSBkcmFmdCByb290IHBhdGhcblx0XHRcdFx0Y29uc3QgZXhpc3RpbmdCaW5kaW5nQ29udGV4dE9uUGFnZSA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KClcblx0XHRcdFx0XHQuZ2V0Um9vdFZpZXdDb250cm9sbGVyKClcblx0XHRcdFx0XHQuZ2V0SW5zdGFuY2VkVmlld3MoKVxuXHRcdFx0XHRcdC5maW5kKChwYWdlVmlldzogVmlldykgPT4gcGFnZVZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpID09PSBkcmFmdFJvb3RDb250ZXh0UGF0aClcblx0XHRcdFx0XHQ/LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dDtcblx0XHRcdFx0aWYgKGV4aXN0aW5nQmluZGluZ0NvbnRleHRPblBhZ2UpIHtcblx0XHRcdFx0XHRyZXR1cm4gZXhpc3RpbmdCaW5kaW5nQ29udGV4dE9uUGFnZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBpbnRlcm5hbE1vZGVsID0gdmlldy5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbDtcblx0XHRcdFx0c2ltcGxlRHJhZnRSb290Q29udGV4dCA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvc2ltcGxlRHJhZnRSb290Q29udGV4dFwiKTtcblx0XHRcdFx0aWYgKHNpbXBsZURyYWZ0Um9vdENvbnRleHQ/LmdldFBhdGgoKSA9PT0gZHJhZnRSb290Q29udGV4dFBhdGgpIHtcblx0XHRcdFx0XHRyZXR1cm4gc2ltcGxlRHJhZnRSb290Q29udGV4dDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBtb2RlbCA9IGNvbnRleHQuZ2V0TW9kZWwoKTtcblx0XHRcdFx0c2ltcGxlRHJhZnRSb290Q29udGV4dCA9IG1vZGVsLmJpbmRDb250ZXh0KGRyYWZ0Um9vdENvbnRleHRQYXRoKS5nZXRCb3VuZENvbnRleHQoKTtcblx0XHRcdFx0YXdhaXQgQ29tbW9uVXRpbHMud2FpdEZvckNvbnRleHRSZXF1ZXN0ZWQoc2ltcGxlRHJhZnRSb290Q29udGV4dCk7XG5cdFx0XHRcdC8vIFN0b3JlIHRoaXMgbmV3IGNyZWF0ZWQgY29udGV4dCB0byB1c2UgaXQgb24gdGhlIG5leHQgaXRlcmF0aW9uc1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL3NpbXBsZURyYWZ0Um9vdENvbnRleHRcIiwgc2ltcGxlRHJhZnRSb290Q29udGV4dCk7XG5cdFx0XHRcdHJldHVybiBzaW1wbGVEcmFmdFJvb3RDb250ZXh0O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdGFzeW5jIF92YWxpZGF0ZURvY3VtZW50KCk6IFByb21pc2U8dm9pZCB8IGFueVtdIHwgT0RhdGFDb250ZXh0QmluZGluZz4ge1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0Y29uc3QgY29udHJvbCA9IENvcmUuYnlJZChDb3JlLmdldEN1cnJlbnRGb2N1c2VkQ29udHJvbElkKCkpO1xuXHRcdGNvbnN0IGNvbnRleHQgPSBjb250cm9sPy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdFx0aWYgKGNvbnRleHQgJiYgIWNvbnRleHQuaXNUcmFuc2llbnQoKSkge1xuXHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNTZXJ2aWNlID0gYXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXHRcdFx0Y29uc3QgZW50aXR5VHlwZSA9IHNpZGVFZmZlY3RzU2VydmljZS5nZXRFbnRpdHlUeXBlRnJvbUNvbnRleHQoY29udGV4dCk7XG5cdFx0XHRjb25zdCBnbG9iYWxTaWRlRWZmZWN0cyA9IGVudGl0eVR5cGUgPyBzaWRlRWZmZWN0c1NlcnZpY2UuZ2V0R2xvYmFsT0RhdGFFbnRpdHlTaWRlRWZmZWN0cyhlbnRpdHlUeXBlKSA6IFtdO1xuXHRcdFx0Ly8gSWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGdsb2JhbCBTaWRlRWZmZWN0cyBmb3IgdGhlIHJlbGF0ZWQgZW50aXR5LCBleGVjdXRlIGl0L3RoZW1cblx0XHRcdGlmIChnbG9iYWxTaWRlRWZmZWN0cy5sZW5ndGgpIHtcblx0XHRcdFx0YXdhaXQgdGhpcy5lZGl0Rmxvdy5zeW5jVGFzaygpO1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoZ2xvYmFsU2lkZUVmZmVjdHMubWFwKChzaWRlRWZmZWN0cykgPT4gdGhpcy5fc2lkZUVmZmVjdHMucmVxdWVzdFNpZGVFZmZlY3RzKHNpZGVFZmZlY3RzLCBjb250ZXh0KSkpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgZHJhZnRSb290Q29udGV4dCA9IGF3YWl0IHRoaXMuZ2V0RHJhZnRSb290Q29udGV4dCgpO1xuXHRcdFx0Ly9FeGVjdXRlIHRoZSBkcmFmdFZhbGlkYXRpb24gaWYgdGhlcmUgaXMgbm8gZ2xvYmFsU2lkZUVmZmVjdHMgKGlnbm9yZSBFVGFncyBpbiBjb2xsYWJvcmF0aW9uIGRyYWZ0KVxuXHRcdFx0aWYgKGRyYWZ0Um9vdENvbnRleHQpIHtcblx0XHRcdFx0YXdhaXQgdGhpcy5lZGl0Rmxvdy5zeW5jVGFzaygpO1xuXHRcdFx0XHRyZXR1cm4gZHJhZnQuZXhlY3V0ZURyYWZ0VmFsaWRhdGlvbihkcmFmdFJvb3RDb250ZXh0LCBhcHBDb21wb25lbnQsIGlzQ29ubmVjdGVkKHRoaXMuZ2V0VmlldygpKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRhc3luYyBfc2F2ZURvY3VtZW50KG9Db250ZXh0OiBhbnkpIHtcblx0XHRjb25zdCBvTW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInVpXCIpLFxuXHRcdFx0YVdhaXRDcmVhdGVEb2N1bWVudHM6IGFueVtdID0gW107XG5cdFx0Ly8gaW5kaWNhdGVzIGlmIHdlIGFyZSBjcmVhdGluZyBhIG5ldyByb3cgaW4gdGhlIE9QXG5cdFx0bGV0IGJFeGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yID0gZmFsc2U7XG5cdFx0QnVzeUxvY2tlci5sb2NrKG9Nb2RlbCk7XG5cdFx0dGhpcy5fZmluZFRhYmxlcygpLmZvckVhY2goKG9UYWJsZTogYW55KSA9PiB7XG5cdFx0XHRjb25zdCBvQmluZGluZyA9IHRoaXMuX2dldFRhYmxlQmluZGluZyhvVGFibGUpO1xuXHRcdFx0Y29uc3QgbVBhcmFtZXRlcnM6IGFueSA9IHtcblx0XHRcdFx0Y3JlYXRpb25Nb2RlOiBvVGFibGUuZGF0YShcImNyZWF0aW9uTW9kZVwiKSxcblx0XHRcdFx0Y3JlYXRpb25Sb3c6IG9UYWJsZS5nZXRDcmVhdGlvblJvdygpLFxuXHRcdFx0XHRjcmVhdGVBdEVuZDogb1RhYmxlLmRhdGEoXCJjcmVhdGVBdEVuZFwiKSA9PT0gXCJ0cnVlXCJcblx0XHRcdH07XG5cdFx0XHRjb25zdCBiQ3JlYXRlRG9jdW1lbnQgPVxuXHRcdFx0XHRtUGFyYW1ldGVycy5jcmVhdGlvblJvdyAmJlxuXHRcdFx0XHRtUGFyYW1ldGVycy5jcmVhdGlvblJvdy5nZXRCaW5kaW5nQ29udGV4dCgpICYmXG5cdFx0XHRcdE9iamVjdC5rZXlzKG1QYXJhbWV0ZXJzLmNyZWF0aW9uUm93LmdldEJpbmRpbmdDb250ZXh0KCkuZ2V0T2JqZWN0KCkpLmxlbmd0aCA+IDE7XG5cdFx0XHRpZiAoYkNyZWF0ZURvY3VtZW50KSB7XG5cdFx0XHRcdC8vIHRoZSBiU2tpcFNpZGVFZmZlY3RzIGlzIGEgcGFyYW1ldGVyIGNyZWF0ZWQgd2hlbiB3ZSBjbGljayB0aGUgc2F2ZSBrZXkuIElmIHdlIHByZXNzIHRoaXMga2V5XG5cdFx0XHRcdC8vIHdlIGRvbid0IGV4ZWN1dGUgdGhlIGhhbmRsZVNpZGVFZmZlY3RzIGZ1bmNpdG9uIHRvIGF2b2lkIGJhdGNoIHJlZHVuZGFuY3lcblx0XHRcdFx0bVBhcmFtZXRlcnMuYlNraXBTaWRlRWZmZWN0cyA9IHRydWU7XG5cdFx0XHRcdGJFeGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yID0gdHJ1ZTtcblx0XHRcdFx0YVdhaXRDcmVhdGVEb2N1bWVudHMucHVzaChcblx0XHRcdFx0XHR0aGlzLmVkaXRGbG93LmNyZWF0ZURvY3VtZW50KG9CaW5kaW5nLCBtUGFyYW1ldGVycykudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb0JpbmRpbmc7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBhQmluZGluZ3MgPSBhd2FpdCBQcm9taXNlLmFsbChhV2FpdENyZWF0ZURvY3VtZW50cyk7XG5cdFx0XHRjb25zdCBtUGFyYW1ldGVycyA9IHtcblx0XHRcdFx0YkV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3I6IGJFeGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yLFxuXHRcdFx0XHRiaW5kaW5nczogYUJpbmRpbmdzXG5cdFx0XHR9O1xuXHRcdFx0Ly8gV2UgbmVlZCB0byBlaXRoZXIgcmVqZWN0IG9yIHJlc29sdmUgYSBwcm9taXNlIGhlcmUgYW5kIHJldHVybiBpdCBzaW5jZSB0aGlzIHNhdmVcblx0XHRcdC8vIGZ1bmN0aW9uIGlzIG5vdCBvbmx5IGNhbGxlZCB3aGVuIHByZXNzaW5nIHRoZSBzYXZlIGJ1dHRvbiBpbiB0aGUgZm9vdGVyLCBidXQgYWxzb1xuXHRcdFx0Ly8gd2hlbiB0aGUgdXNlciBzZWxlY3RzIGNyZWF0ZSBvciBzYXZlIGluIGEgZGF0YWxvc3MgcG9wdXAuXG5cdFx0XHQvLyBUaGUgbG9naWMgb2YgdGhlIGRhdGFsb3NzIHBvcHVwIG5lZWRzIHRvIGRldGVjdCBpZiB0aGUgc2F2ZSBoYWQgZXJyb3JzIG9yIG5vdCBpbiBvcmRlclxuXHRcdFx0Ly8gdG8gZGVjaWRlIGlmIHRoZSBzdWJzZXF1ZW50IGFjdGlvbiAtIGxpa2UgYSBiYWNrIG5hdmlnYXRpb24gLSBoYXMgdG8gYmUgZXhlY3V0ZWQgb3Igbm90LlxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YXdhaXQgdGhpcy5lZGl0Rmxvdy5zYXZlRG9jdW1lbnQob0NvbnRleHQsIG1QYXJhbWV0ZXJzKTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcblx0XHRcdFx0Ly8gSWYgdGhlIHNhdmVEb2N1bWVudCBpbiBlZGl0RmxvdyByZXR1cm5zIGVycm9ycyB3ZSBuZWVkXG5cdFx0XHRcdC8vIHRvIHNob3cgdGhlIG1lc3NhZ2UgcG9wb3ZlciBoZXJlIGFuZCBlbnN1cmUgdGhhdCB0aGVcblx0XHRcdFx0Ly8gZGF0YWxvc3MgbG9naWMgZG9lcyBub3QgcGVyZm9ybSB0aGUgZm9sbG93IHVwIGZ1bmN0aW9uXG5cdFx0XHRcdC8vIGxpa2UgZS5nLiBhIGJhY2sgbmF2aWdhdGlvbiBoZW5jZSB3ZSByZXR1cm4gYSBwcm9taXNlIGFuZCByZWplY3QgaXRcblx0XHRcdFx0dGhpcy5fc2hvd01lc3NhZ2VQb3BvdmVyKGVycm9yKTtcblx0XHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0XHR9XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdGlmIChCdXN5TG9ja2VyLmlzTG9ja2VkKG9Nb2RlbCkpIHtcblx0XHRcdFx0QnVzeUxvY2tlci51bmxvY2sob01vZGVsKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfbWFuYWdlQ29sbGFib3JhdGlvbigpIHtcblx0XHRvcGVuTWFuYWdlRGlhbG9nKHRoaXMuZ2V0VmlldygpKTtcblx0fVxuXG5cdF9zaG93Q29sbGFib3JhdGlvblVzZXJEZXRhaWxzKGV2ZW50OiBhbnkpIHtcblx0XHRzaG93VXNlckRldGFpbHMoZXZlbnQsIHRoaXMuZ2V0VmlldygpKTtcblx0fVxuXG5cdF9jYW5jZWxEb2N1bWVudChvQ29udGV4dDogYW55LCBtUGFyYW1ldGVyczogYW55KSB7XG5cdFx0bVBhcmFtZXRlcnMuY2FuY2VsQnV0dG9uID0gdGhpcy5nZXRWaWV3KCkuYnlJZChtUGFyYW1ldGVycy5jYW5jZWxCdXR0b24pOyAvL3RvIGdldCB0aGUgcmVmZXJlbmNlIG9mIHRoZSBjYW5jZWwgYnV0dG9uIGZyb20gY29tbWFuZCBleGVjdXRpb25cblx0XHRyZXR1cm4gdGhpcy5lZGl0Rmxvdy5jYW5jZWxEb2N1bWVudChvQ29udGV4dCwgbVBhcmFtZXRlcnMpO1xuXHR9XG5cblx0X2FwcGx5RG9jdW1lbnQob0NvbnRleHQ6IGFueSkge1xuXHRcdHJldHVybiB0aGlzLmVkaXRGbG93LmFwcGx5RG9jdW1lbnQob0NvbnRleHQpLmNhdGNoKCgpID0+IHRoaXMuX3Nob3dNZXNzYWdlUG9wb3ZlcigpKTtcblx0fVxuXG5cdF91cGRhdGVSZWxhdGVkQXBwcygpIHtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0Y29uc3Qgc2hvd1JlbGF0ZWRBcHBzID0gb09iamVjdFBhZ2UuZGF0YShcInNob3dSZWxhdGVkQXBwc1wiKTtcblx0XHRpZiAoc2hvd1JlbGF0ZWRBcHBzID09PSBcInRydWVcIiB8fCBzaG93UmVsYXRlZEFwcHMgPT09IHRydWUpIHtcblx0XHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLmdldFZpZXcoKSk7XG5cdFx0XHRDb21tb25VdGlscy51cGRhdGVSZWxhdGVkQXBwc0RldGFpbHMob09iamVjdFBhZ2UsIGFwcENvbXBvbmVudCk7XG5cdFx0fVxuXHR9XG5cblx0X2ZpbmRDb250cm9sSW5TdWJTZWN0aW9uKGFQYXJlbnRFbGVtZW50OiBhbnksIGFTdWJzZWN0aW9uOiBhbnksIGFDb250cm9sczogYW55LCBiSXNDaGFydD86IGJvb2xlYW4pIHtcblx0XHRmb3IgKGxldCBlbGVtZW50ID0gMDsgZWxlbWVudCA8IGFQYXJlbnRFbGVtZW50Lmxlbmd0aDsgZWxlbWVudCsrKSB7XG5cdFx0XHRsZXQgb0VsZW1lbnQgPSBhUGFyZW50RWxlbWVudFtlbGVtZW50XS5nZXRDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgYVBhcmVudEVsZW1lbnRbZWxlbWVudF0uZ2V0Q29udGVudCgpO1xuXHRcdFx0aWYgKGJJc0NoYXJ0KSB7XG5cdFx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5tQWdncmVnYXRpb25zICYmIG9FbGVtZW50LmdldEFnZ3JlZ2F0aW9uKFwiaXRlbXNcIikpIHtcblx0XHRcdFx0XHRjb25zdCBhSXRlbXMgPSBvRWxlbWVudC5nZXRBZ2dyZWdhdGlvbihcIml0ZW1zXCIpO1xuXHRcdFx0XHRcdGFJdGVtcy5mb3JFYWNoKGZ1bmN0aW9uIChvSXRlbTogYW55KSB7XG5cdFx0XHRcdFx0XHRpZiAob0l0ZW0uaXNBKFwic2FwLmZlLm1hY3Jvcy5jaGFydC5DaGFydEFQSVwiKSkge1xuXHRcdFx0XHRcdFx0XHRvRWxlbWVudCA9IG9JdGVtO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQuaXNBICYmIG9FbGVtZW50LmlzQShcInNhcC51aS5sYXlvdXQuRHluYW1pY1NpZGVDb250ZW50XCIpKSB7XG5cdFx0XHRcdG9FbGVtZW50ID0gb0VsZW1lbnQuZ2V0TWFpbkNvbnRlbnQgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBvRWxlbWVudC5nZXRNYWluQ29udGVudCgpO1xuXHRcdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdG9FbGVtZW50ID0gb0VsZW1lbnRbMF07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIFRoZSB0YWJsZSBtYXkgY3VycmVudGx5IGJlIHNob3duIGluIGEgZnVsbCBzY3JlZW4gZGlhbG9nLCB3ZSBjYW4gdGhlbiBnZXQgdGhlIHJlZmVyZW5jZSB0byB0aGUgVGFibGVBUElcblx0XHRcdC8vIGNvbnRyb2wgZnJvbSB0aGUgY3VzdG9tIGRhdGEgb2YgdGhlIHBsYWNlIGhvbGRlciBwYW5lbFxuXHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50LmlzQSAmJiBvRWxlbWVudC5pc0EoXCJzYXAubS5QYW5lbFwiKSAmJiBvRWxlbWVudC5kYXRhKFwiRnVsbFNjcmVlblRhYmxlUGxhY2VIb2xkZXJcIikpIHtcblx0XHRcdFx0b0VsZW1lbnQgPSBvRWxlbWVudC5kYXRhKFwidGFibGVBUElyZWZlcmVuY2VcIik7XG5cdFx0XHR9XG5cdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQuaXNBICYmIG9FbGVtZW50LmlzQShcInNhcC5mZS5tYWNyb3MudGFibGUuVGFibGVBUElcIikpIHtcblx0XHRcdFx0b0VsZW1lbnQgPSBvRWxlbWVudC5nZXRDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgb0VsZW1lbnQuZ2V0Q29udGVudCgpO1xuXHRcdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdG9FbGVtZW50ID0gb0VsZW1lbnRbMF07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5pc0EgJiYgb0VsZW1lbnQuaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0XHRhQ29udHJvbHMucHVzaChvRWxlbWVudCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQuaXNBICYmIG9FbGVtZW50LmlzQShcInNhcC5mZS5tYWNyb3MuY2hhcnQuQ2hhcnRBUElcIikpIHtcblx0XHRcdFx0b0VsZW1lbnQgPSBvRWxlbWVudC5nZXRDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgb0VsZW1lbnQuZ2V0Q29udGVudCgpO1xuXHRcdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdG9FbGVtZW50ID0gb0VsZW1lbnRbMF07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5pc0EgJiYgb0VsZW1lbnQuaXNBKFwic2FwLnVpLm1kYy5DaGFydFwiKSkge1xuXHRcdFx0XHRhQ29udHJvbHMucHVzaChvRWxlbWVudCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X2dldEFsbFN1YlNlY3Rpb25zKCkge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRsZXQgYVN1YlNlY3Rpb25zOiBhbnlbXSA9IFtdO1xuXHRcdG9PYmplY3RQYWdlLmdldFNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1NlY3Rpb246IGFueSkge1xuXHRcdFx0YVN1YlNlY3Rpb25zID0gYVN1YlNlY3Rpb25zLmNvbmNhdChvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gYVN1YlNlY3Rpb25zO1xuXHR9XG5cblx0X2dldEFsbEJsb2NrcygpIHtcblx0XHRsZXQgYUJsb2NrczogYW55W10gPSBbXTtcblx0XHR0aGlzLl9nZXRBbGxTdWJTZWN0aW9ucygpLmZvckVhY2goZnVuY3Rpb24gKG9TdWJTZWN0aW9uOiBhbnkpIHtcblx0XHRcdGFCbG9ja3MgPSBhQmxvY2tzLmNvbmNhdChvU3ViU2VjdGlvbi5nZXRCbG9ja3MoKSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGFCbG9ja3M7XG5cdH1cblxuXHRfZmluZFRhYmxlcygpIHtcblx0XHRjb25zdCBhU3ViU2VjdGlvbnMgPSB0aGlzLl9nZXRBbGxTdWJTZWN0aW9ucygpO1xuXHRcdGNvbnN0IGFUYWJsZXM6IGFueVtdID0gW107XG5cdFx0Zm9yIChsZXQgc3ViU2VjdGlvbiA9IDA7IHN1YlNlY3Rpb24gPCBhU3ViU2VjdGlvbnMubGVuZ3RoOyBzdWJTZWN0aW9uKyspIHtcblx0XHRcdHRoaXMuX2ZpbmRDb250cm9sSW5TdWJTZWN0aW9uKGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXS5nZXRCbG9ja3MoKSwgYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLCBhVGFibGVzKTtcblx0XHRcdHRoaXMuX2ZpbmRDb250cm9sSW5TdWJTZWN0aW9uKGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXS5nZXRNb3JlQmxvY2tzKCksIGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXSwgYVRhYmxlcyk7XG5cdFx0fVxuXHRcdHJldHVybiBhVGFibGVzO1xuXHR9XG5cblx0X2ZpbmRDaGFydHMoKSB7XG5cdFx0Y29uc3QgYVN1YlNlY3Rpb25zID0gdGhpcy5fZ2V0QWxsU3ViU2VjdGlvbnMoKTtcblx0XHRjb25zdCBhQ2hhcnRzOiBhbnlbXSA9IFtdO1xuXHRcdGZvciAobGV0IHN1YlNlY3Rpb24gPSAwOyBzdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgc3ViU2VjdGlvbisrKSB7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0QmxvY2tzKCksIGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXSwgYUNoYXJ0cywgdHJ1ZSk7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0TW9yZUJsb2NrcygpLCBhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0sIGFDaGFydHMsIHRydWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gYUNoYXJ0cztcblx0fVxuXG5cdF9jbG9zZVNpZGVDb250ZW50KCkge1xuXHRcdHRoaXMuX2dldEFsbEJsb2NrcygpLmZvckVhY2goZnVuY3Rpb24gKG9CbG9jazogYW55KSB7XG5cdFx0XHRjb25zdCBvQ29udGVudCA9IG9CbG9jay5nZXRDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgb0Jsb2NrLmdldENvbnRlbnQoKTtcblx0XHRcdGlmIChvQ29udGVudCAmJiBvQ29udGVudC5pc0EgJiYgb0NvbnRlbnQuaXNBKFwic2FwLnVpLmxheW91dC5EeW5hbWljU2lkZUNvbnRlbnRcIikpIHtcblx0XHRcdFx0aWYgKG9Db250ZW50LnNldFNob3dTaWRlQ29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG5cdFx0XHRcdFx0b0NvbnRlbnQuc2V0U2hvd1NpZGVDb250ZW50KGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoYXJ0IENvbnRleHQgaXMgcmVzb2x2ZWQgZm9yIDE6biBtaWNyb2NoYXJ0cy5cblx0ICpcblx0ICogQHBhcmFtIG9DaGFydENvbnRleHQgVGhlIENvbnRleHQgb2YgdGhlIE1pY3JvQ2hhcnRcblx0ICogQHBhcmFtIHNDaGFydFBhdGggVGhlIGNvbGxlY3Rpb25QYXRoIG9mIHRoZSB0aGUgY2hhcnRcblx0ICogQHJldHVybnMgQXJyYXkgb2YgQXR0cmlidXRlcyBvZiB0aGUgY2hhcnQgQ29udGV4dFxuXHQgKi9cblx0X2dldENoYXJ0Q29udGV4dERhdGEob0NoYXJ0Q29udGV4dDogYW55LCBzQ2hhcnRQYXRoOiBzdHJpbmcpIHtcblx0XHRjb25zdCBvQ29udGV4dERhdGEgPSBvQ2hhcnRDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdGxldCBvQ2hhcnRDb250ZXh0RGF0YSA9IFtvQ29udGV4dERhdGFdO1xuXHRcdGlmIChvQ2hhcnRDb250ZXh0ICYmIHNDaGFydFBhdGgpIHtcblx0XHRcdGlmIChvQ29udGV4dERhdGFbc0NoYXJ0UGF0aF0pIHtcblx0XHRcdFx0b0NoYXJ0Q29udGV4dERhdGEgPSBvQ29udGV4dERhdGFbc0NoYXJ0UGF0aF07XG5cdFx0XHRcdGRlbGV0ZSBvQ29udGV4dERhdGFbc0NoYXJ0UGF0aF07XG5cdFx0XHRcdG9DaGFydENvbnRleHREYXRhLnB1c2gob0NvbnRleHREYXRhKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG9DaGFydENvbnRleHREYXRhO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNjcm9sbCB0aGUgdGFibGVzIHRvIHRoZSByb3cgd2l0aCB0aGUgc1BhdGhcblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIHNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5PYmplY3RQYWdlQ29udHJvbGxlci5jb250cm9sbGVyI19zY3JvbGxUYWJsZXNUb1Jvd1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1Jvd1BhdGggJ3NQYXRoIG9mIHRoZSB0YWJsZSByb3cnXG5cdCAqL1xuXG5cdF9zY3JvbGxUYWJsZXNUb1JvdyhzUm93UGF0aDogc3RyaW5nKSB7XG5cdFx0aWYgKHRoaXMuX2ZpbmRUYWJsZXMgJiYgdGhpcy5fZmluZFRhYmxlcygpLmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnN0IGFUYWJsZXMgPSB0aGlzLl9maW5kVGFibGVzKCk7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFUYWJsZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0VGFibGVTY3JvbGxlci5zY3JvbGxUYWJsZVRvUm93KGFUYWJsZXNbaV0sIHNSb3dQYXRoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIG1lcmdlIHNlbGVjdGVkIGNvbnRleHRzIGFuZCBmaWx0ZXJzLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgX21lcmdlTXVsdGlwbGVDb250ZXh0c1xuXHQgKiBAcGFyYW0gb1BhZ2VDb250ZXh0IFBhZ2UgY29udGV4dFxuXHQgKiBAcGFyYW0gYUxpbmVDb250ZXh0IFNlbGVjdGVkIENvbnRleHRzXG5cdCAqIEBwYXJhbSBzQ2hhcnRQYXRoIENvbGxlY3Rpb24gbmFtZSBvZiB0aGUgY2hhcnRcblx0ICogQHJldHVybnMgU2VsZWN0aW9uIFZhcmlhbnQgT2JqZWN0XG5cdCAqL1xuXHRfbWVyZ2VNdWx0aXBsZUNvbnRleHRzKG9QYWdlQ29udGV4dDogQ29udGV4dCwgYUxpbmVDb250ZXh0OiBhbnlbXSwgc0NoYXJ0UGF0aDogc3RyaW5nKSB7XG5cdFx0bGV0IGFBdHRyaWJ1dGVzOiBhbnlbXSA9IFtdLFxuXHRcdFx0YVBhZ2VBdHRyaWJ1dGVzID0gW10sXG5cdFx0XHRvQ29udGV4dCxcblx0XHRcdHNNZXRhUGF0aExpbmU6IHN0cmluZyxcblx0XHRcdHNQYXRoTGluZTtcblxuXHRcdGNvbnN0IHNQYWdlUGF0aCA9IG9QYWdlQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9QYWdlQ29udGV4dCAmJiBvUGFnZUNvbnRleHQuZ2V0TW9kZWwoKSAmJiBvUGFnZUNvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBzTWV0YVBhdGhQYWdlID0gb01ldGFNb2RlbCAmJiBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNQYWdlUGF0aCkucmVwbGFjZSgvXlxcLyovLCBcIlwiKTtcblxuXHRcdC8vIEdldCBzaW5nbGUgbGluZSBjb250ZXh0IGlmIG5lY2Vzc2FyeVxuXHRcdGlmIChhTGluZUNvbnRleHQgJiYgYUxpbmVDb250ZXh0Lmxlbmd0aCkge1xuXHRcdFx0b0NvbnRleHQgPSBhTGluZUNvbnRleHRbMF07XG5cdFx0XHRzUGF0aExpbmUgPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRzTWV0YVBhdGhMaW5lID0gb01ldGFNb2RlbCAmJiBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNQYXRoTGluZSkucmVwbGFjZSgvXlxcLyovLCBcIlwiKTtcblxuXHRcdFx0YUxpbmVDb250ZXh0LmZvckVhY2goKG9TaW5nbGVDb250ZXh0OiBhbnkpID0+IHtcblx0XHRcdFx0aWYgKHNDaGFydFBhdGgpIHtcblx0XHRcdFx0XHRjb25zdCBvQ2hhcnRDb250ZXh0RGF0YSA9IHRoaXMuX2dldENoYXJ0Q29udGV4dERhdGEob1NpbmdsZUNvbnRleHQsIHNDaGFydFBhdGgpO1xuXHRcdFx0XHRcdGlmIChvQ2hhcnRDb250ZXh0RGF0YSkge1xuXHRcdFx0XHRcdFx0YUF0dHJpYnV0ZXMgPSBvQ2hhcnRDb250ZXh0RGF0YS5tYXAoZnVuY3Rpb24gKG9TdWJDaGFydENvbnRleHREYXRhOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRjb250ZXh0RGF0YTogb1N1YkNoYXJ0Q29udGV4dERhdGEsXG5cdFx0XHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBgJHtzTWV0YVBhdGhQYWdlfS8ke3NDaGFydFBhdGh9YFxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGFBdHRyaWJ1dGVzLnB1c2goe1xuXHRcdFx0XHRcdFx0Y29udGV4dERhdGE6IG9TaW5nbGVDb250ZXh0LmdldE9iamVjdCgpLFxuXHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBzTWV0YVBhdGhMaW5lXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRhUGFnZUF0dHJpYnV0ZXMucHVzaCh7XG5cdFx0XHRjb250ZXh0RGF0YTogb1BhZ2VDb250ZXh0LmdldE9iamVjdCgpLFxuXHRcdFx0ZW50aXR5U2V0OiBzTWV0YVBhdGhQYWdlXG5cdFx0fSk7XG5cdFx0Ly8gQWRkaW5nIFBhZ2UgQ29udGV4dCB0byBzZWxlY3Rpb24gdmFyaWFudFxuXHRcdGFQYWdlQXR0cmlidXRlcyA9IHRoaXMuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5yZW1vdmVTZW5zaXRpdmVEYXRhKGFQYWdlQXR0cmlidXRlcywgc01ldGFQYXRoUGFnZSk7XG5cdFx0Y29uc3Qgb1BhZ2VMZXZlbFNWID0gQ29tbW9uVXRpbHMuYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQobmV3IFNlbGVjdGlvblZhcmlhbnQoKSwgYVBhZ2VBdHRyaWJ1dGVzLCB0aGlzLmdldFZpZXcoKSk7XG5cdFx0YUF0dHJpYnV0ZXMgPSB0aGlzLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ucmVtb3ZlU2Vuc2l0aXZlRGF0YShhQXR0cmlidXRlcywgc01ldGFQYXRoUGFnZSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbGVjdGlvblZhcmlhbnQ6IG9QYWdlTGV2ZWxTVixcblx0XHRcdGF0dHJpYnV0ZXM6IGFBdHRyaWJ1dGVzXG5cdFx0fTtcblx0fVxuXG5cdF9nZXRCYXRjaEdyb3Vwc0ZvclZpZXcoKSB7XG5cdFx0Y29uc3Qgb1ZpZXdEYXRhID0gdGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnksXG5cdFx0XHRvQ29uZmlndXJhdGlvbnMgPSBvVmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb24sXG5cdFx0XHRhQ29uZmlndXJhdGlvbnMgPSBvQ29uZmlndXJhdGlvbnMgJiYgT2JqZWN0LmtleXMob0NvbmZpZ3VyYXRpb25zKSxcblx0XHRcdGFCYXRjaEdyb3VwcyA9IFtcIiRhdXRvLkhlcm9lc1wiLCBcIiRhdXRvLkRlY29yYXRpb25cIiwgXCIkYXV0by5Xb3JrZXJzXCJdO1xuXG5cdFx0aWYgKGFDb25maWd1cmF0aW9ucyAmJiBhQ29uZmlndXJhdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0YUNvbmZpZ3VyYXRpb25zLmZvckVhY2goZnVuY3Rpb24gKHNLZXk6IGFueSkge1xuXHRcdFx0XHRjb25zdCBvQ29uZmlndXJhdGlvbiA9IG9Db25maWd1cmF0aW9uc1tzS2V5XTtcblx0XHRcdFx0aWYgKG9Db25maWd1cmF0aW9uLnJlcXVlc3RHcm91cElkID09PSBcIkxvbmdSdW5uZXJzXCIpIHtcblx0XHRcdFx0XHRhQmF0Y2hHcm91cHMucHVzaChcIiRhdXRvLkxvbmdSdW5uZXJzXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGFCYXRjaEdyb3Vwcztcblx0fVxuXG5cdC8qXG5cdCAqIFJlc2V0IEJyZWFkY3J1bWIgbGlua3Ncblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7c2FwLm0uQnJlYWRjcnVtYnN9IFtvU291cmNlXSBwYXJlbnQgY29udHJvbFxuXHQgKiBAZGVzY3JpcHRpb24gVXNlZCB3aGVuIGNvbnRleHQgb2YgdGhlIG9iamVjdCBwYWdlIGNoYW5nZXMuXG5cdCAqICAgICAgICAgICAgICBUaGlzIGV2ZW50IGNhbGxiYWNrIGlzIGF0dGFjaGVkIHRvIG1vZGVsQ29udGV4dENoYW5nZVxuXHQgKiAgICAgICAgICAgICAgZXZlbnQgb2YgdGhlIEJyZWFkY3J1bWIgY29udHJvbCB0byBjYXRjaCBjb250ZXh0IGNoYW5nZS5cblx0ICogICAgICAgICAgICAgIFRoZW4gZWxlbWVudCBiaW5kaW5nIGFuZCBocmVmcyBhcmUgdXBkYXRlZCBmb3IgZWFjaCBsaW5rLlxuXHQgKlxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQGV4cGVyaW1lbnRhbFxuXHQgKi9cblx0YXN5bmMgX3NldEJyZWFkY3J1bWJMaW5rcyhvU291cmNlOiBCcmVhZENydW1icykge1xuXHRcdGNvbnN0IG9Db250ZXh0ID0gb1NvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpLFxuXHRcdFx0b0FwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCksXG5cdFx0XHRhUHJvbWlzZXM6IFByb21pc2U8dm9pZD5bXSA9IFtdLFxuXHRcdFx0YVNraXBQYXJhbWV0ZXJpemVkOiBhbnlbXSA9IFtdLFxuXHRcdFx0c05ld1BhdGggPSBvQ29udGV4dD8uZ2V0UGF0aCgpLFxuXHRcdFx0YVBhdGhQYXJ0cyA9IHNOZXdQYXRoPy5zcGxpdChcIi9cIikgPz8gW10sXG5cdFx0XHRvTWV0YU1vZGVsID0gb0FwcENvbXBvbmVudCAmJiBvQXBwQ29tcG9uZW50LmdldE1ldGFNb2RlbCgpO1xuXHRcdGxldCBzUGF0aCA9IFwiXCI7XG5cdFx0dHJ5IHtcblx0XHRcdGFQYXRoUGFydHMuc2hpZnQoKTtcblx0XHRcdGFQYXRoUGFydHMuc3BsaWNlKC0xLCAxKTtcblx0XHRcdGFQYXRoUGFydHMuZm9yRWFjaChmdW5jdGlvbiAoc1BhdGhQYXJ0OiBhbnkpIHtcblx0XHRcdFx0c1BhdGggKz0gYC8ke3NQYXRoUGFydH1gO1xuXHRcdFx0XHRjb25zdCBvUm9vdFZpZXdDb250cm9sbGVyID0gb0FwcENvbXBvbmVudC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKTtcblx0XHRcdFx0Y29uc3Qgc1BhcmFtZXRlclBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNQYXRoKTtcblx0XHRcdFx0Y29uc3QgYlJlc3VsdENvbnRleHQgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzUGFyYW1ldGVyUGF0aH0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZXN1bHRDb250ZXh0YCk7XG5cdFx0XHRcdGlmIChiUmVzdWx0Q29udGV4dCkge1xuXHRcdFx0XHRcdC8vIFdlIGRvbnQgbmVlZCB0byBjcmVhdGUgYSBicmVhZGNydW1iIGZvciBQYXJhbWV0ZXIgcGF0aFxuXHRcdFx0XHRcdGFTa2lwUGFyYW1ldGVyaXplZC5wdXNoKDEpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhU2tpcFBhcmFtZXRlcml6ZWQucHVzaCgwKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRhUHJvbWlzZXMucHVzaChvUm9vdFZpZXdDb250cm9sbGVyLmdldFRpdGxlSW5mb0Zyb21QYXRoKHNQYXRoKSk7XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IHRpdGxlSGllcmFyY2h5SW5mb3M6IGFueVtdID0gYXdhaXQgUHJvbWlzZS5hbGwoYVByb21pc2VzKTtcblx0XHRcdGxldCBpZHgsIGhpZXJhcmNoeVBvc2l0aW9uLCBvTGluaztcblx0XHRcdGZvciAoY29uc3QgdGl0bGVIaWVyYXJjaHlJbmZvIG9mIHRpdGxlSGllcmFyY2h5SW5mb3MpIHtcblx0XHRcdFx0aGllcmFyY2h5UG9zaXRpb24gPSB0aXRsZUhpZXJhcmNoeUluZm9zLmluZGV4T2YodGl0bGVIaWVyYXJjaHlJbmZvKTtcblx0XHRcdFx0aWR4ID0gaGllcmFyY2h5UG9zaXRpb24gLSBhU2tpcFBhcmFtZXRlcml6ZWRbaGllcmFyY2h5UG9zaXRpb25dO1xuXHRcdFx0XHRvTGluayA9IG9Tb3VyY2UuZ2V0TGlua3MoKVtpZHhdID8gb1NvdXJjZS5nZXRMaW5rcygpW2lkeF0gOiBuZXcgTGluaygpO1xuXHRcdFx0XHQvL3NDdXJyZW50RW50aXR5IGlzIGEgZmFsbGJhY2sgdmFsdWUgaW4gY2FzZSBvZiBlbXB0eSB0aXRsZVxuXHRcdFx0XHRvTGluay5zZXRUZXh0KHRpdGxlSGllcmFyY2h5SW5mby5zdWJ0aXRsZSB8fCB0aXRsZUhpZXJhcmNoeUluZm8udGl0bGUpO1xuXHRcdFx0XHQvL1dlIGFwcGx5IGFuIGFkZGl0aW9uYWwgZW5jb2RlVVJJIGluIGNhc2Ugb2Ygc3BlY2lhbCBjaGFyYWN0ZXJzIChpZSBcIi9cIikgdXNlZCBpbiB0aGUgdXJsIHRocm91Z2ggdGhlIHNlbWFudGljIGtleXNcblx0XHRcdFx0b0xpbmsuc2V0SHJlZihlbmNvZGVVUkkodGl0bGVIaWVyYXJjaHlJbmZvLmludGVudCkpO1xuXHRcdFx0XHRpZiAoIW9Tb3VyY2UuZ2V0TGlua3MoKVtpZHhdKSB7XG5cdFx0XHRcdFx0b1NvdXJjZS5hZGRMaW5rKG9MaW5rKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcblx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHNldHRpbmcgdGhlIGJyZWFkY3J1bWIgbGlua3M6XCIgKyBlcnJvcik7XG5cdFx0fVxuXHR9XG5cblx0X2NoZWNrRGF0YVBvaW50VGl0bGVGb3JFeHRlcm5hbE5hdmlnYXRpb24oKSB7XG5cdFx0Y29uc3Qgb1ZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IG9EYXRhUG9pbnRzID0gQ29tbW9uVXRpbHMuZ2V0SGVhZGVyRmFjZXRJdGVtQ29uZmlnRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uKFxuXHRcdFx0b1ZpZXcuZ2V0Vmlld0RhdGEoKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0XHRcdHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um91dGluZ1NlcnZpY2UoKS5nZXRPdXRib3VuZHMoKVxuXHRcdCk7XG5cdFx0Y29uc3Qgb1NoZWxsU2VydmljZXMgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFNoZWxsU2VydmljZXMoKTtcblx0XHRjb25zdCBvUGFnZUNvbnRleHQgPSBvVmlldyAmJiAob1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJpc0hlYWRlckRQTGlua1Zpc2libGVcIiwge30pO1xuXHRcdGlmIChvUGFnZUNvbnRleHQpIHtcblx0XHRcdG9QYWdlQ29udGV4dFxuXHRcdFx0XHQucmVxdWVzdE9iamVjdCgpXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChvRGF0YTogYW55KSB7XG5cdFx0XHRcdFx0Zm5HZXRMaW5rcyhvRGF0YVBvaW50cywgb0RhdGEpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IHJldHJpZXZlIHRoZSBsaW5rcyBmcm9tIHRoZSBzaGVsbCBzZXJ2aWNlXCIsIG9FcnJvcik7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSBvRXJyb3Jcblx0XHQgKi9cblx0XHRmdW5jdGlvbiBmbk9uRXJyb3Iob0Vycm9yOiBhbnkpIHtcblx0XHRcdExvZy5lcnJvcihvRXJyb3IpO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGZuU2V0TGlua0VuYWJsZW1lbnQoaWQ6IHN0cmluZywgYVN1cHBvcnRlZExpbmtzOiBhbnkpIHtcblx0XHRcdGNvbnN0IHNMaW5rSWQgPSBpZDtcblx0XHRcdC8vIHByb2Nlc3MgdmlhYmxlIGxpbmtzIGZyb20gZ2V0TGlua3MgZm9yIGFsbCBkYXRhcG9pbnRzIGhhdmluZyBvdXRib3VuZFxuXHRcdFx0aWYgKGFTdXBwb3J0ZWRMaW5rcyAmJiBhU3VwcG9ydGVkTGlua3MubGVuZ3RoID09PSAxICYmIGFTdXBwb3J0ZWRMaW5rc1swXS5zdXBwb3J0ZWQpIHtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KGBpc0hlYWRlckRQTGlua1Zpc2libGUvJHtzTGlua0lkfWAsIHRydWUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSBvU3ViRGF0YVBvaW50c1xuXHRcdCAqIEBwYXJhbSBvUGFnZURhdGFcblx0XHQgKi9cblx0XHRmdW5jdGlvbiBmbkdldExpbmtzKG9TdWJEYXRhUG9pbnRzOiBhbnksIG9QYWdlRGF0YTogYW55KSB7XG5cdFx0XHRmb3IgKGNvbnN0IHNJZCBpbiBvU3ViRGF0YVBvaW50cykge1xuXHRcdFx0XHRjb25zdCBvRGF0YVBvaW50ID0gb1N1YkRhdGFQb2ludHNbc0lkXTtcblx0XHRcdFx0Y29uc3Qgb1BhcmFtczogYW55ID0ge307XG5cdFx0XHRcdGNvbnN0IG9MaW5rID0gb1ZpZXcuYnlJZChzSWQpO1xuXHRcdFx0XHRpZiAoIW9MaW5rKSB7XG5cdFx0XHRcdFx0Ly8gZm9yIGRhdGEgcG9pbnRzIGNvbmZpZ3VyZWQgaW4gYXBwIGRlc2NyaXB0b3IgYnV0IG5vdCBhbm5vdGF0ZWQgaW4gdGhlIGhlYWRlclxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IG9MaW5rQ29udGV4dCA9IG9MaW5rLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0XHRcdGNvbnN0IG9MaW5rRGF0YTogYW55ID0gb0xpbmtDb250ZXh0ICYmIG9MaW5rQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0bGV0IG9NaXhlZENvbnRleHQ6IGFueSA9IG1lcmdlKHt9LCBvUGFnZURhdGEsIG9MaW5rRGF0YSk7XG5cdFx0XHRcdC8vIHByb2Nlc3Mgc2VtYW50aWMgb2JqZWN0IG1hcHBpbmdzXG5cdFx0XHRcdGlmIChvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0TWFwcGluZykge1xuXHRcdFx0XHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0TWFwcGluZztcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW0gaW4gYVNlbWFudGljT2JqZWN0TWFwcGluZykge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb01hcHBpbmcgPSBhU2VtYW50aWNPYmplY3RNYXBwaW5nW2l0ZW1dO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc01haW5Qcm9wZXJ0eSA9IG9NYXBwaW5nW1wiTG9jYWxQcm9wZXJ0eVwiXVtcIiRQcm9wZXJ0eVBhdGhcIl07XG5cdFx0XHRcdFx0XHRjb25zdCBzTWFwcGVkUHJvcGVydHkgPSBvTWFwcGluZ1tcIlNlbWFudGljT2JqZWN0UHJvcGVydHlcIl07XG5cdFx0XHRcdFx0XHRpZiAoc01haW5Qcm9wZXJ0eSAhPT0gc01hcHBlZFByb3BlcnR5KSB7XG5cdFx0XHRcdFx0XHRcdGlmIChvTWl4ZWRDb250ZXh0Lmhhc093blByb3BlcnR5KHNNYWluUHJvcGVydHkpKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb05ld01hcHBpbmc6IGFueSA9IHt9O1xuXHRcdFx0XHRcdFx0XHRcdG9OZXdNYXBwaW5nW3NNYXBwZWRQcm9wZXJ0eV0gPSBvTWl4ZWRDb250ZXh0W3NNYWluUHJvcGVydHldO1xuXHRcdFx0XHRcdFx0XHRcdG9NaXhlZENvbnRleHQgPSBtZXJnZSh7fSwgb01peGVkQ29udGV4dCwgb05ld01hcHBpbmcpO1xuXHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSBvTWl4ZWRDb250ZXh0W3NNYWluUHJvcGVydHldO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKG9NaXhlZENvbnRleHQpIHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHNLZXkgaW4gb01peGVkQ29udGV4dCkge1xuXHRcdFx0XHRcdFx0aWYgKHNLZXkuaW5kZXhPZihcIl9cIikgIT09IDAgJiYgc0tleS5pbmRleE9mKFwib2RhdGEuY29udGV4dFwiKSA9PT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0b1BhcmFtc1tzS2V5XSA9IG9NaXhlZENvbnRleHRbc0tleV07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIHZhbGlkYXRlIGlmIGEgbGluayBtdXN0IGJlIHJlbmRlcmVkXG5cdFx0XHRcdG9TaGVsbFNlcnZpY2VzXG5cdFx0XHRcdFx0LmlzTmF2aWdhdGlvblN1cHBvcnRlZChbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhcmdldDoge1xuXHRcdFx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRcdGFjdGlvbjogb0RhdGFQb2ludC5hY3Rpb25cblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0cGFyYW1zOiBvUGFyYW1zXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XSlcblx0XHRcdFx0XHQudGhlbigoYUxpbmtzKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZm5TZXRMaW5rRW5hYmxlbWVudChzSWQsIGFMaW5rcyk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZm5PbkVycm9yKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRoYW5kbGVycyA9IHtcblx0XHQvKipcblx0XHQgKiBJbnZva2VzIHRoZSBwYWdlIHByaW1hcnkgYWN0aW9uIG9uIHByZXNzIG9mIEN0cmwrRW50ZXIuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0gb0NvbnRyb2xsZXIgVGhlIHBhZ2UgY29udHJvbGxlclxuXHRcdCAqIEBwYXJhbSBvVmlld1xuXHRcdCAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IGZvciB3aGljaCB0aGUgYWN0aW9uIGlzIGNhbGxlZFxuXHRcdCAqIEBwYXJhbSBzQWN0aW9uTmFtZSBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uIHRvIGJlIGNhbGxlZFxuXHRcdCAqIEBwYXJhbSBbbVBhcmFtZXRlcnNdIENvbnRhaW5zIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcblx0XHQgKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmNvbnRleHRzXSBNYW5kYXRvcnkgZm9yIGEgYm91bmQgYWN0aW9uLCBlaXRoZXIgb25lIGNvbnRleHQgb3IgYW4gYXJyYXkgd2l0aCBjb250ZXh0cyBmb3Igd2hpY2ggdGhlIGFjdGlvbiBpcyBjYWxsZWRcblx0XHQgKiBAcGFyYW0gW21QYXJhbWV0ZXJzLm1vZGVsXSBNYW5kYXRvcnkgZm9yIGFuIHVuYm91bmQgYWN0aW9uOyBhbiBpbnN0YW5jZSBvZiBhbiBPRGF0YSBWNCBtb2RlbFxuXHRcdCAqIEBwYXJhbSBbbUNvbmRpdGlvbnNdIENvbnRhaW5zIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcblx0XHQgKiBAcGFyYW0gW21Db25kaXRpb25zLnBvc2l0aXZlQWN0aW9uVmlzaWJsZV0gVGhlIHZpc2liaWxpdHkgb2Ygc2VtYXRpYyBwb3NpdGl2ZSBhY3Rpb25cblx0XHQgKiBAcGFyYW0gW21Db25kaXRpb25zLnBvc2l0aXZlQWN0aW9uRW5hYmxlZF0gVGhlIGVuYWJsZW1lbnQgb2Ygc2VtYW50aWMgcG9zaXRpdmUgYWN0aW9uXG5cdFx0ICogQHBhcmFtIFttQ29uZGl0aW9ucy5lZGl0QWN0aW9uVmlzaWJsZV0gVGhlIEVkaXQgYnV0dG9uIHZpc2liaWxpdHlcblx0XHQgKiBAcGFyYW0gW21Db25kaXRpb25zLmVkaXRBY3Rpb25FbmFibGVkXSBUaGUgZW5hYmxlbWVudCBvZiBFZGl0IGJ1dHRvblxuXHRcdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHRcdCAqIEBmaW5hbFxuXHRcdCAqL1xuXHRcdG9uUHJpbWFyeUFjdGlvbihcblx0XHRcdG9Db250cm9sbGVyOiBPYmplY3RQYWdlQ29udHJvbGxlcixcblx0XHRcdG9WaWV3OiBWaWV3LFxuXHRcdFx0b0NvbnRleHQ6IENvbnRleHQsXG5cdFx0XHRzQWN0aW9uTmFtZTogc3RyaW5nLFxuXHRcdFx0bVBhcmFtZXRlcnM6IHVua25vd24sXG5cdFx0XHRtQ29uZGl0aW9uczoge1xuXHRcdFx0XHRwb3NpdGl2ZUFjdGlvblZpc2libGU6IGJvb2xlYW47XG5cdFx0XHRcdHBvc2l0aXZlQWN0aW9uRW5hYmxlZDogYm9vbGVhbjtcblx0XHRcdFx0ZWRpdEFjdGlvblZpc2libGU6IGJvb2xlYW47XG5cdFx0XHRcdGVkaXRBY3Rpb25FbmFibGVkOiBib29sZWFuO1xuXHRcdFx0fVxuXHRcdCkge1xuXHRcdFx0Y29uc3QgaVZpZXdMZXZlbCA9IChvQ29udHJvbGxlci5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLnZpZXdMZXZlbCxcblx0XHRcdFx0b09iamVjdFBhZ2UgPSBvQ29udHJvbGxlci5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRcdGlmIChtQ29uZGl0aW9ucy5wb3NpdGl2ZUFjdGlvblZpc2libGUpIHtcblx0XHRcdFx0aWYgKG1Db25kaXRpb25zLnBvc2l0aXZlQWN0aW9uRW5hYmxlZCkge1xuXHRcdFx0XHRcdG9Db250cm9sbGVyLmhhbmRsZXJzLm9uQ2FsbEFjdGlvbihvVmlldywgc0FjdGlvbk5hbWUsIG1QYXJhbWV0ZXJzKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChtQ29uZGl0aW9ucy5lZGl0QWN0aW9uVmlzaWJsZSkge1xuXHRcdFx0XHRpZiAobUNvbmRpdGlvbnMuZWRpdEFjdGlvbkVuYWJsZWQpIHtcblx0XHRcdFx0XHRvQ29udHJvbGxlci5fZWRpdERvY3VtZW50KG9Db250ZXh0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChpVmlld0xldmVsID09PSAxICYmIG9PYmplY3RQYWdlLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKSkge1xuXHRcdFx0XHRvQ29udHJvbGxlci5fc2F2ZURvY3VtZW50KG9Db250ZXh0KTtcblx0XHRcdH0gZWxzZSBpZiAob09iamVjdFBhZ2UuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpKSB7XG5cdFx0XHRcdG9Db250cm9sbGVyLl9hcHBseURvY3VtZW50KG9Db250ZXh0KTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0b25UYWJsZUNvbnRleHRDaGFuZ2UodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIsIG9FdmVudDogYW55KSB7XG5cdFx0XHRjb25zdCBvU291cmNlID0gb0V2ZW50LmdldFNvdXJjZSgpO1xuXHRcdFx0bGV0IG9UYWJsZTogYW55O1xuXHRcdFx0dGhpcy5fZmluZFRhYmxlcygpLnNvbWUoZnVuY3Rpb24gKF9vVGFibGU6IGFueSkge1xuXHRcdFx0XHRpZiAoX29UYWJsZS5nZXRSb3dCaW5kaW5nKCkgPT09IG9Tb3VyY2UpIHtcblx0XHRcdFx0XHRvVGFibGUgPSBfb1RhYmxlO1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBzZXQgY29ycmVjdCBiaW5kaW5nIGNvbnRleHQgZm9yIGZhc3QgY3JlYXRpb24gcm93XG5cdFx0XHRjb25zdCBmYXN0Q3JlYXRpb25Sb3cgPSBvVGFibGUuZ2V0Q3JlYXRpb25Sb3coKTtcblxuXHRcdFx0aWYgKGZhc3RDcmVhdGlvblJvdyAmJiAhZmFzdENyZWF0aW9uUm93Ll9vSW5uZXJDcmVhdGlvblJvdz8uZ2V0QmluZGluZ0NvbnRleHQoKSkge1xuXHRcdFx0XHRjb25zdCB0YWJsZUJpbmRpbmcgPSB0aGlzLl9nZXRUYWJsZUJpbmRpbmcob1RhYmxlKTtcblxuXHRcdFx0XHRpZiAoIXRhYmxlQmluZGluZykge1xuXHRcdFx0XHRcdExvZy5lcnJvcihgRXhwZWN0ZWQgYmluZGluZyBtaXNzaW5nIGZvciB0YWJsZTogJHtvVGFibGUuZ2V0SWQoKX1gKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodGFibGVCaW5kaW5nLmdldENvbnRleHQoKSkge1xuXHRcdFx0XHRcdGNvbnN0IG9iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdFx0XHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0ID0gb2JqZWN0UGFnZS5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQ7XG5cdFx0XHRcdFx0Y29uc3QgbW9kZWwgPSBiaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpO1xuXG5cdFx0XHRcdFx0VGFibGVIZWxwZXIuZW5hYmxlRmFzdENyZWF0aW9uUm93KFxuXHRcdFx0XHRcdFx0ZmFzdENyZWF0aW9uUm93LFxuXHRcdFx0XHRcdFx0dGFibGVCaW5kaW5nLmdldFBhdGgoKSxcblx0XHRcdFx0XHRcdHRhYmxlQmluZGluZy5nZXRDb250ZXh0KCksXG5cdFx0XHRcdFx0XHRtb2RlbCxcblx0XHRcdFx0XHRcdG9UYWJsZS5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIilcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IG9DdXJyZW50QWN0aW9uUHJvbWlzZSA9IHRoaXMuZWRpdEZsb3cuZ2V0Q3VycmVudEFjdGlvblByb21pc2UoKTtcblxuXHRcdFx0aWYgKG9DdXJyZW50QWN0aW9uUHJvbWlzZSkge1xuXHRcdFx0XHRsZXQgYVRhYmxlQ29udGV4dHM6IGFueTtcblx0XHRcdFx0aWYgKG9UYWJsZS5nZXRUeXBlKCkuZ2V0TWV0YWRhdGEoKS5pc0EoXCJzYXAudWkubWRjLnRhYmxlLkdyaWRUYWJsZVR5cGVcIikpIHtcblx0XHRcdFx0XHRhVGFibGVDb250ZXh0cyA9IG9Tb3VyY2UuZ2V0Q29udGV4dHMoMCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YVRhYmxlQ29udGV4dHMgPSBvU291cmNlLmdldEN1cnJlbnRDb250ZXh0cygpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vaWYgY29udGV4dHMgYXJlIG5vdCBmdWxseSBsb2FkZWQgdGhlIGdldGNvbnRleHRzIGZ1bmN0aW9uIGFib3ZlIHdpbGwgdHJpZ2dlciBhIG5ldyBjaGFuZ2UgZXZlbnQgY2FsbFxuXHRcdFx0XHRpZiAoIWFUYWJsZUNvbnRleHRzWzBdKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG9DdXJyZW50QWN0aW9uUHJvbWlzZVxuXHRcdFx0XHRcdC50aGVuKChvQWN0aW9uUmVzcG9uc2U6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKCFvQWN0aW9uUmVzcG9uc2UgfHwgb0FjdGlvblJlc3BvbnNlLmNvbnRyb2xJZCAhPT0gb1RhYmxlLnNJZCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRjb25zdCBvQWN0aW9uRGF0YSA9IG9BY3Rpb25SZXNwb25zZS5vRGF0YTtcblx0XHRcdFx0XHRcdGNvbnN0IGFLZXlzID0gb0FjdGlvblJlc3BvbnNlLmtleXM7XG5cdFx0XHRcdFx0XHRsZXQgaU5ld0l0ZW1wID0gLTE7XG5cdFx0XHRcdFx0XHRhVGFibGVDb250ZXh0cy5maW5kKGZ1bmN0aW9uIChvVGFibGVDb250ZXh0OiBhbnksIGk6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvVGFibGVEYXRhID0gb1RhYmxlQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYkNvbXBhcmUgPSBhS2V5cy5ldmVyeShmdW5jdGlvbiAoc0tleTogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG9UYWJsZURhdGFbc0tleV0gPT09IG9BY3Rpb25EYXRhW3NLZXldO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0aWYgKGJDb21wYXJlKSB7XG5cdFx0XHRcdFx0XHRcdFx0aU5ld0l0ZW1wID0gaTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYkNvbXBhcmU7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGlmIChpTmV3SXRlbXAgIT09IC0xKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGFEaWFsb2dzID0gSW5zdGFuY2VNYW5hZ2VyLmdldE9wZW5EaWFsb2dzKCk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9EaWFsb2cgPVxuXHRcdFx0XHRcdFx0XHRcdGFEaWFsb2dzLmxlbmd0aCA+IDAgPyBhRGlhbG9ncy5maW5kKChkaWFsb2cpID0+IGRpYWxvZy5kYXRhKFwiRnVsbFNjcmVlbkRpYWxvZ1wiKSAhPT0gdHJ1ZSkgOiBudWxsO1xuXHRcdFx0XHRcdFx0XHRpZiAob0RpYWxvZykge1xuXHRcdFx0XHRcdFx0XHRcdC8vIGJ5IGRlc2lnbiwgYSBzYXAubS5kaWFsb2cgc2V0IHRoZSBmb2N1cyB0byB0aGUgcHJldmlvdXMgZm9jdXNlZCBlbGVtZW50IHdoZW4gY2xvc2luZy5cblx0XHRcdFx0XHRcdFx0XHQvLyB3ZSBzaG91bGQgd2FpdCBmb3IgdGhlIGRpYWxvZyB0byBiZSBjbG9zZSBiZWZvcmUgdG8gZm9jdXMgYW5vdGhlciBlbGVtZW50XG5cdFx0XHRcdFx0XHRcdFx0b0RpYWxvZy5hdHRhY2hFdmVudE9uY2UoXCJhZnRlckNsb3NlXCIsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdG9UYWJsZS5mb2N1c1JvdyhpTmV3SXRlbXAsIHRydWUpO1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdG9UYWJsZS5mb2N1c1JvdyhpTmV3SXRlbXAsIHRydWUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHRoaXMuZWRpdEZsb3cuZGVsZXRlQ3VycmVudEFjdGlvblByb21pc2UoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyOiBhbnkpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihgQW4gZXJyb3Igb2NjdXJzIHdoaWxlIHNjcm9sbGluZyB0byB0aGUgbmV3bHkgY3JlYXRlZCBJdGVtOiAke2Vycn1gKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdC8vIGZpcmUgTW9kZWxDb250ZXh0Q2hhbmdlIG9uIHRoZSBtZXNzYWdlIGJ1dHRvbiB3aGVuZXZlciB0aGUgdGFibGUgY29udGV4dCBjaGFuZ2VzXG5cdFx0XHR0aGlzLm1lc3NhZ2VCdXR0b24uZmlyZU1vZGVsQ29udGV4dENoYW5nZSgpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBJbnZva2VzIGFuIGFjdGlvbiAtIGJvdW5kL3VuYm91bmQgYW5kIHNldHMgdGhlIHBhZ2UgZGlydHkuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0gb1ZpZXdcblx0XHQgKiBAcGFyYW0gc0FjdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGFjdGlvbiB0byBiZSBjYWxsZWRcblx0XHQgKiBAcGFyYW0gW21QYXJhbWV0ZXJzXSBDb250YWlucyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG5cdFx0ICogQHBhcmFtIFttUGFyYW1ldGVycy5jb250ZXh0c10gTWFuZGF0b3J5IGZvciBhIGJvdW5kIGFjdGlvbiwgZWl0aGVyIG9uZSBjb250ZXh0IG9yIGFuIGFycmF5IHdpdGggY29udGV4dHMgZm9yIHdoaWNoIHRoZSBhY3Rpb24gaXMgY2FsbGVkXG5cdFx0ICogQHBhcmFtIFttUGFyYW1ldGVycy5tb2RlbF0gTWFuZGF0b3J5IGZvciBhbiB1bmJvdW5kIGFjdGlvbjsgYW4gaW5zdGFuY2Ugb2YgYW4gT0RhdGEgVjQgbW9kZWxcblx0XHQgKiBAcmV0dXJucyBUaGUgYWN0aW9uIHByb21pc2Vcblx0XHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0XHQgKiBAZmluYWxcblx0XHQgKi9cblx0XHRvbkNhbGxBY3Rpb24ob1ZpZXc6IGFueSwgc0FjdGlvbk5hbWU6IHN0cmluZywgbVBhcmFtZXRlcnM6IGFueSkge1xuXHRcdFx0Y29uc3Qgb0NvbnRyb2xsZXIgPSBvVmlldy5nZXRDb250cm9sbGVyKCk7XG5cdFx0XHRyZXR1cm4gb0NvbnRyb2xsZXIuZWRpdEZsb3dcblx0XHRcdFx0Lmludm9rZUFjdGlvbihzQWN0aW9uTmFtZSwgbVBhcmFtZXRlcnMpXG5cdFx0XHRcdC50aGVuKG9Db250cm9sbGVyLl9zaG93TWVzc2FnZVBvcG92ZXIuYmluZChvQ29udHJvbGxlciwgdW5kZWZpbmVkKSlcblx0XHRcdFx0LmNhdGNoKG9Db250cm9sbGVyLl9zaG93TWVzc2FnZVBvcG92ZXIuYmluZChvQ29udHJvbGxlcikpO1xuXHRcdH0sXG5cdFx0b25EYXRhUG9pbnRUaXRsZVByZXNzZWQob0NvbnRyb2xsZXI6IGFueSwgb1NvdXJjZTogYW55LCBvTWFuaWZlc3RPdXRib3VuZDogYW55LCBzQ29udHJvbENvbmZpZzogYW55LCBzQ29sbGVjdGlvblBhdGg6IGFueSkge1xuXHRcdFx0b01hbmlmZXN0T3V0Ym91bmQgPSB0eXBlb2Ygb01hbmlmZXN0T3V0Ym91bmQgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKG9NYW5pZmVzdE91dGJvdW5kKSA6IG9NYW5pZmVzdE91dGJvdW5kO1xuXHRcdFx0Y29uc3Qgb1RhcmdldEluZm8gPSBvTWFuaWZlc3RPdXRib3VuZFtzQ29udHJvbENvbmZpZ10sXG5cdFx0XHRcdGFTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBDb21tb25VdGlscy5nZXRTZW1hbnRpY09iamVjdE1hcHBpbmcob1RhcmdldEluZm8pLFxuXHRcdFx0XHRvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0ID0gb1NvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpLFxuXHRcdFx0XHRzTWV0YVBhdGggPSBvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0XG5cdFx0XHRcdFx0LmdldE1vZGVsKClcblx0XHRcdFx0XHQuZ2V0TWV0YU1vZGVsKClcblx0XHRcdFx0XHQuZ2V0TWV0YVBhdGgob0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdFx0bGV0IGFOYXZpZ2F0aW9uRGF0YSA9IG9Db250cm9sbGVyLl9nZXRDaGFydENvbnRleHREYXRhKG9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHQsIHNDb2xsZWN0aW9uUGF0aCk7XG5cdFx0XHRsZXQgYWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzO1xuXG5cdFx0XHRhTmF2aWdhdGlvbkRhdGEgPSBhTmF2aWdhdGlvbkRhdGEubWFwKGZ1bmN0aW9uIChvTmF2aWdhdGlvbkRhdGE6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdGRhdGE6IG9OYXZpZ2F0aW9uRGF0YSxcblx0XHRcdFx0XHRtZXRhUGF0aDogc01ldGFQYXRoICsgKHNDb2xsZWN0aW9uUGF0aCA/IGAvJHtzQ29sbGVjdGlvblBhdGh9YCA6IFwiXCIpXG5cdFx0XHRcdH07XG5cdFx0XHR9KTtcblx0XHRcdGlmIChvVGFyZ2V0SW5mbyAmJiBvVGFyZ2V0SW5mby5wYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdGNvbnN0IG9QYXJhbXMgPSBvVGFyZ2V0SW5mby5wYXJhbWV0ZXJzICYmIG9Db250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24uZ2V0T3V0Ym91bmRQYXJhbXMob1RhcmdldEluZm8ucGFyYW1ldGVycyk7XG5cdFx0XHRcdGlmIChPYmplY3Qua2V5cyhvUGFyYW1zKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0YWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzID0gb1BhcmFtcztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKG9UYXJnZXRJbmZvICYmIG9UYXJnZXRJbmZvLnNlbWFudGljT2JqZWN0ICYmIG9UYXJnZXRJbmZvLmFjdGlvbikge1xuXHRcdFx0XHRvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlKG9UYXJnZXRJbmZvLnNlbWFudGljT2JqZWN0LCBvVGFyZ2V0SW5mby5hY3Rpb24sIHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHM6IGFOYXZpZ2F0aW9uRGF0YSxcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdE1hcHBpbmc6IGFTZW1hbnRpY09iamVjdE1hcHBpbmcsXG5cdFx0XHRcdFx0YWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzOiBhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnNcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBUcmlnZ2VycyBhbiBvdXRib3VuZCBuYXZpZ2F0aW9uIHdoZW4gYSB1c2VyIGNob29zZXMgdGhlIGNoZXZyb24uXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0gb0NvbnRyb2xsZXJcblx0XHQgKiBAcGFyYW0gc091dGJvdW5kVGFyZ2V0IE5hbWUgb2YgdGhlIG91dGJvdW5kIHRhcmdldCAobmVlZHMgdG8gYmUgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QpXG5cdFx0ICogQHBhcmFtIG9Db250ZXh0IFRoZSBjb250ZXh0IHRoYXQgY29udGFpbnMgdGhlIGRhdGEgZm9yIHRoZSB0YXJnZXQgYXBwXG5cdFx0ICogQHBhcmFtIHNDcmVhdGVQYXRoIENyZWF0ZSBwYXRoIHdoZW4gdGhlIGNoZXZyb24gaXMgY3JlYXRlZC5cblx0XHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIGlzIHJlc29sdmVkIG9uY2UgdGhlIG5hdmlnYXRpb24gaXMgdHJpZ2dlcmVkICg/Pz8gbWF5YmUgb25seSBvbmNlIGZpbmlzaGVkPylcblx0XHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0XHQgKiBAZmluYWxcblx0XHQgKi9cblx0XHRvbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQob0NvbnRyb2xsZXI6IE9iamVjdFBhZ2VDb250cm9sbGVyLCBzT3V0Ym91bmRUYXJnZXQ6IHN0cmluZywgb0NvbnRleHQ6IGFueSwgc0NyZWF0ZVBhdGg6IHN0cmluZykge1xuXHRcdFx0cmV0dXJuIG9Db250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ub25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kKG9Db250cm9sbGVyLCBzT3V0Ym91bmRUYXJnZXQsIG9Db250ZXh0LCBzQ3JlYXRlUGF0aCk7XG5cdFx0fSxcblxuXHRcdG9uTmF2aWdhdGVDaGFuZ2UodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIsIG9FdmVudDogYW55KSB7XG5cdFx0XHQvL3dpbGwgYmUgY2FsbGVkIGFsd2F5cyB3aGVuIHdlIGNsaWNrIG9uIGEgc2VjdGlvbiB0YWJcblx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdHRoaXMuYlNlY3Rpb25OYXZpZ2F0ZWQgPSB0cnVlO1xuXG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRvT2JqZWN0UGFnZS5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIikgJiZcblx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55KS5zZWN0aW9uTGF5b3V0ID09PSBcIlRhYnNcIiAmJlxuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJlcnJvck5hdmlnYXRpb25TZWN0aW9uRmxhZ1wiKSA9PT0gZmFsc2Vcblx0XHRcdCkge1xuXHRcdFx0XHRjb25zdCBvU3ViU2VjdGlvbiA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJzdWJTZWN0aW9uXCIpO1xuXHRcdFx0XHR0aGlzLl91cGRhdGVGb2N1c0luRWRpdE1vZGUoW29TdWJTZWN0aW9uXSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRvblZhcmlhbnRTZWxlY3RlZDogZnVuY3Rpb24gKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyKSB7XG5cdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0fSxcblx0XHRvblZhcmlhbnRTYXZlZDogZnVuY3Rpb24gKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyKSB7XG5cdFx0XHQvL1RPRE86IFNob3VsZCByZW1vdmUgdGhpcyBzZXRUaW1lT3V0IG9uY2UgVmFyaWFudCBNYW5hZ2VtZW50IHByb3ZpZGVzIGFuIGFwaSB0byBmZXRjaCB0aGUgY3VycmVudCB2YXJpYW50IGtleSBvbiBzYXZlXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0fSwgMjAwMCk7XG5cdFx0fSxcblx0XHRuYXZpZ2F0ZVRvU3ViU2VjdGlvbjogZnVuY3Rpb24gKG9Db250cm9sbGVyOiBPYmplY3RQYWdlQ29udHJvbGxlciwgdkRldGFpbENvbmZpZzogYW55KSB7XG5cdFx0XHRjb25zdCBvRGV0YWlsQ29uZmlnID0gdHlwZW9mIHZEZXRhaWxDb25maWcgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKHZEZXRhaWxDb25maWcpIDogdkRldGFpbENvbmZpZztcblx0XHRcdGNvbnN0IG9PYmplY3RQYWdlID0gb0NvbnRyb2xsZXIuZ2V0VmlldygpLmJ5SWQoXCJmZTo6T2JqZWN0UGFnZVwiKSBhcyBPYmplY3RQYWdlTGF5b3V0O1xuXHRcdFx0bGV0IG9TZWN0aW9uO1xuXHRcdFx0bGV0IG9TdWJTZWN0aW9uO1xuXHRcdFx0aWYgKG9EZXRhaWxDb25maWcuc2VjdGlvbklkKSB7XG5cdFx0XHRcdG9TZWN0aW9uID0gb0NvbnRyb2xsZXIuZ2V0VmlldygpLmJ5SWQob0RldGFpbENvbmZpZy5zZWN0aW9uSWQpIGFzIE9iamVjdFBhZ2VTZWN0aW9uO1xuXHRcdFx0XHRvU3ViU2VjdGlvbiA9IChcblx0XHRcdFx0XHRvRGV0YWlsQ29uZmlnLnN1YlNlY3Rpb25JZFxuXHRcdFx0XHRcdFx0PyBvQ29udHJvbGxlci5nZXRWaWV3KCkuYnlJZChvRGV0YWlsQ29uZmlnLnN1YlNlY3Rpb25JZClcblx0XHRcdFx0XHRcdDogb1NlY3Rpb24gJiYgb1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKSAmJiBvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpWzBdXG5cdFx0XHRcdCkgYXMgT2JqZWN0UGFnZVN1YlNlY3Rpb247XG5cdFx0XHR9IGVsc2UgaWYgKG9EZXRhaWxDb25maWcuc3ViU2VjdGlvbklkKSB7XG5cdFx0XHRcdG9TdWJTZWN0aW9uID0gb0NvbnRyb2xsZXIuZ2V0VmlldygpLmJ5SWQob0RldGFpbENvbmZpZy5zdWJTZWN0aW9uSWQpIGFzIE9iamVjdFBhZ2VTdWJTZWN0aW9uO1xuXHRcdFx0XHRvU2VjdGlvbiA9IG9TdWJTZWN0aW9uICYmIChvU3ViU2VjdGlvbi5nZXRQYXJlbnQoKSBhcyBPYmplY3RQYWdlU2VjdGlvbik7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIW9TZWN0aW9uIHx8ICFvU3ViU2VjdGlvbiB8fCAhb1NlY3Rpb24uZ2V0VmlzaWJsZSgpIHx8ICFvU3ViU2VjdGlvbi5nZXRWaXNpYmxlKCkpIHtcblx0XHRcdFx0Y29uc3Qgc1RpdGxlID0gZ2V0UmVzb3VyY2VNb2RlbChvQ29udHJvbGxlcikuZ2V0VGV4dChcblx0XHRcdFx0XHRcIkNfUk9VVElOR19OQVZJR0FUSU9OX0RJU0FCTEVEX1RJVExFXCIsXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdChvQ29udHJvbGxlci5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLmVudGl0eVNldFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRMb2cuZXJyb3Ioc1RpdGxlKTtcblx0XHRcdFx0TWVzc2FnZUJveC5lcnJvcihzVGl0bGUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b09iamVjdFBhZ2Uuc2Nyb2xsVG9TZWN0aW9uKG9TdWJTZWN0aW9uLmdldElkKCkpO1xuXHRcdFx0XHQvLyB0cmlnZ2VyIGlhcHAgc3RhdGUgY2hhbmdlXG5cdFx0XHRcdG9PYmplY3RQYWdlLmZpcmVOYXZpZ2F0ZSh7XG5cdFx0XHRcdFx0c2VjdGlvbjogb1NlY3Rpb24sXG5cdFx0XHRcdFx0c3ViU2VjdGlvbjogb1N1YlNlY3Rpb25cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdG9uU3RhdGVDaGFuZ2UodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIpIHtcblx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHR9LFxuXHRcdGNsb3NlT1BNZXNzYWdlU3RyaXA6IGZ1bmN0aW9uICh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlcikge1xuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS5oaWRlTWVzc2FnZSgpO1xuXHRcdH1cblx0fTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgT2JqZWN0UGFnZUNvbnRyb2xsZXI7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUE2RE1BLG9CQUFvQixXQUR6QkMsY0FBYyxDQUFDLGtEQUFrRCxDQUFDLFVBSWpFQyxjQUFjLENBQUNDLFdBQVcsQ0FBQyxVQUczQkQsY0FBYyxDQUFDRSxLQUFLLENBQUNDLFFBQVEsQ0FBQ0MsY0FBYyxDQUFDLENBQUMsVUFHOUNKLGNBQWMsQ0FBQ0ssZUFBZSxDQUFDRixRQUFRLENBQUNHLHVCQUF1QixDQUFDLENBQUMsVUFHakVOLGNBQWMsQ0FBQ08sU0FBUyxDQUFDSixRQUFRLENBQUNLLGlCQUFpQixDQUFDLENBQUMsVUFHckRSLGNBQWMsQ0FBQ1MsY0FBYyxDQUFDTixRQUFRLENBQUNPLHNCQUFzQixDQUFDLENBQUMsVUFHL0RWLGNBQWMsQ0FBQ1cscUJBQXFCLENBQUNSLFFBQVEsQ0FBQ1MsNkJBQTZCLENBQUMsQ0FBQyxVQUc3RVosY0FBYyxDQUNkYSw2QkFBNkIsQ0FBQ1YsUUFBUSxDQUFDO0lBQ3RDVyxpQkFBaUIsRUFBRSxZQUErQztNQUNqRSxNQUFNQyxpQkFBaUIsR0FDckIsSUFBSSxDQUFDQyxPQUFPLEVBQUUsQ0FBQ0MsYUFBYSxFQUFFLENBQTBCQyxpQkFBaUIsSUFDekUsSUFBSSxDQUFDRixPQUFPLEVBQUUsQ0FBQ0MsYUFBYSxFQUFFLENBQTBCQyxpQkFBaUIsRUFBRTtNQUM3RSxPQUFPSCxpQkFBaUIsR0FBRyxTQUFTLEdBQUdJLFNBQVM7SUFDakQ7RUFDRCxDQUFDLENBQUMsQ0FD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QyxDQUFDO2tCQUMzQkEsV0FBVyxDQUFDRixlQUFlLENBQUMsR0FBR0osYUFBYSxDQUFDRyxhQUFhLENBQUM7a0JBQzNESCxhQUFhLEdBQUdDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRUQsYUFBYSxFQUFFTSxXQUFXLENBQUM7a0JBQ3JELE9BQU9OLGFBQWEsQ0FBQ0csYUFBYSxDQUFDO2dCQUNwQztjQUNEO1lBQ0Q7VUFDRDtVQUVBLElBQUlILGFBQWEsRUFBRTtZQUNsQixLQUFLLE1BQU14ZSxJQUFJLElBQUl3ZSxhQUFhLEVBQUU7Y0FDakMsSUFBSXhlLElBQUksQ0FBQ3VVLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUl2VSxJQUFJLENBQUN1VSxPQUFPLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQ3BFaFMsT0FBTyxDQUFDdkMsSUFBSSxDQUFDLEdBQUd3ZSxhQUFhLENBQUN4ZSxJQUFJLENBQUM7Y0FDcEM7WUFDRDtVQUNEO1VBQ0E7VUFDQTBkLGNBQWMsQ0FDWnFCLHFCQUFxQixDQUFDLENBQ3RCO1lBQ0N6SyxNQUFNLEVBQUU7Y0FDUDNSLGNBQWMsRUFBRTBiLFVBQVUsQ0FBQzFiLGNBQWM7Y0FDekNDLE1BQU0sRUFBRXliLFVBQVUsQ0FBQ3piO1lBQ3BCLENBQUM7WUFDRG9jLE1BQU0sRUFBRXpjO1VBQ1QsQ0FBQyxDQUNELENBQUMsQ0FDRHZELElBQUksQ0FBRWlnQixNQUFNLElBQUs7WUFDakIsT0FBT25CLG1CQUFtQixDQUFDM2UsR0FBRyxFQUFFOGYsTUFBTSxDQUFDO1VBQ3hDLENBQUMsQ0FBQyxDQUNEdGUsS0FBSyxDQUFDa2QsU0FBUyxDQUFDO1FBQ25CO01BQ0Q7SUFDRCxDQUFDO0lBQUE7RUFBQSxFQTF3Q2lDdlYsY0FBYztJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7RUFBQSxPQStoRGxDL08sb0JBQW9CO0FBQUEifQ==
|
|
1423
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQcm9ncmFtbWluZ01vZGVsIiwiRkVMaWJyYXJ5IiwiT2JqZWN0UGFnZUNvbnRyb2xsZXIiLCJkZWZpbmVVSTVDbGFzcyIsInVzaW5nRXh0ZW5zaW9uIiwiUGxhY2Vob2xkZXIiLCJTaGFyZSIsIm92ZXJyaWRlIiwiU2hhcmVPdmVycmlkZXMiLCJJbnRlcm5hbFJvdXRpbmciLCJJbnRlcm5hbFJvdXRpbmdPdmVycmlkZSIsIlBhZ2luYXRvciIsIlBhZ2luYXRvck92ZXJyaWRlIiwiTWVzc2FnZUhhbmRsZXIiLCJNZXNzYWdlSGFuZGxlck92ZXJyaWRlIiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUiLCJJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldE5hdmlnYXRpb25Nb2RlIiwiYklzU3RpY2t5RWRpdE1vZGUiLCJnZXRWaWV3IiwiZ2V0Q29udHJvbGxlciIsImdldFN0aWNreUVkaXRNb2RlIiwidW5kZWZpbmVkIiwiVmlld1N0YXRlIiwiVmlld1N0YXRlT3ZlcnJpZGVzIiwiUGFnZVJlYWR5IiwiaXNDb250ZXh0RXhwZWN0ZWQiLCJNYXNzRWRpdCIsInB1YmxpY0V4dGVuc2lvbiIsImZpbmFsRXh0ZW5zaW9uIiwiZXh0ZW5zaWJsZSIsIk92ZXJyaWRlRXhlY3V0aW9uIiwiQWZ0ZXIiLCJoYW5kbGVycyIsIm9uUHJpbWFyeUFjdGlvbiIsIm9Db250cm9sbGVyIiwib1ZpZXciLCJvQ29udGV4dCIsInNBY3Rpb25OYW1lIiwibVBhcmFtZXRlcnMiLCJtQ29uZGl0aW9ucyIsImlWaWV3TGV2ZWwiLCJnZXRWaWV3RGF0YSIsInZpZXdMZXZlbCIsIm9PYmplY3RQYWdlIiwiX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sIiwicG9zaXRpdmVBY3Rpb25WaXNpYmxlIiwicG9zaXRpdmVBY3Rpb25FbmFibGVkIiwib25DYWxsQWN0aW9uIiwiZWRpdEFjdGlvblZpc2libGUiLCJlZGl0QWN0aW9uRW5hYmxlZCIsIl9lZGl0RG9jdW1lbnQiLCJnZXRNb2RlbCIsImdldFByb3BlcnR5IiwiX3NhdmVEb2N1bWVudCIsIl9hcHBseURvY3VtZW50Iiwib25UYWJsZUNvbnRleHRDaGFuZ2UiLCJvRXZlbnQiLCJvU291cmNlIiwiZ2V0U291cmNlIiwib1RhYmxlIiwiX2ZpbmRUYWJsZXMiLCJzb21lIiwiX29UYWJsZSIsImdldFJvd0JpbmRpbmciLCJmYXN0Q3JlYXRpb25Sb3ciLCJnZXRDcmVhdGlvblJvdyIsIl9vSW5uZXJDcmVhdGlvblJvdyIsImdldEJpbmRpbmdDb250ZXh0IiwidGFibGVCaW5kaW5nIiwiX2dldFRhYmxlQmluZGluZyIsIkxvZyIsImVycm9yIiwiZ2V0SWQiLCJnZXRDb250ZXh0Iiwib2JqZWN0UGFnZSIsImJpbmRpbmdDb250ZXh0IiwibW9kZWwiLCJUYWJsZUhlbHBlciIsImVuYWJsZUZhc3RDcmVhdGlvblJvdyIsImdldFBhdGgiLCJvQ3VycmVudEFjdGlvblByb21pc2UiLCJlZGl0RmxvdyIsImdldEN1cnJlbnRBY3Rpb25Qcm9taXNlIiwiYVRhYmxlQ29udGV4dHMiLCJnZXRUeXBlIiwiZ2V0TWV0YWRhdGEiLCJpc0EiLCJnZXRDb250ZXh0cyIsImdldEN1cnJlbnRDb250ZXh0cyIsInRoZW4iLCJvQWN0aW9uUmVzcG9uc2UiLCJjb250cm9sSWQiLCJzSWQiLCJvQWN0aW9uRGF0YSIsIm9EYXRhIiwiYUtleXMiLCJrZXlzIiwiaU5ld0l0ZW1wIiwiZmluZCIsIm9UYWJsZUNvbnRleHQiLCJpIiwib1RhYmxlRGF0YSIsImdldE9iamVjdCIsImJDb21wYXJlIiwiZXZlcnkiLCJzS2V5IiwiYURpYWxvZ3MiLCJJbnN0YW5jZU1hbmFnZXIiLCJnZXRPcGVuRGlhbG9ncyIsIm9EaWFsb2ciLCJsZW5ndGgiLCJkaWFsb2ciLCJkYXRhIiwiYXR0YWNoRXZlbnRPbmNlIiwiZm9jdXNSb3ciLCJkZWxldGVDdXJyZW50QWN0aW9uUHJvbWlzZSIsImNhdGNoIiwiZXJyIiwibWVzc2FnZUJ1dHRvbiIsImZpcmVNb2RlbENvbnRleHRDaGFuZ2UiLCJpbnZva2VBY3Rpb24iLCJfc2hvd01lc3NhZ2VQb3BvdmVyIiwiYmluZCIsIm9uRGF0YVBvaW50VGl0bGVQcmVzc2VkIiwib01hbmlmZXN0T3V0Ym91bmQiLCJzQ29udHJvbENvbmZpZyIsInNDb2xsZWN0aW9uUGF0aCIsIkpTT04iLCJwYXJzZSIsIm9UYXJnZXRJbmZvIiwiYVNlbWFudGljT2JqZWN0TWFwcGluZyIsIkNvbW1vblV0aWxzIiwiZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nIiwib0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dCIsInNNZXRhUGF0aCIsImdldE1ldGFNb2RlbCIsImdldE1ldGFQYXRoIiwiYU5hdmlnYXRpb25EYXRhIiwiX2dldENoYXJ0Q29udGV4dERhdGEiLCJhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnMiLCJtYXAiLCJvTmF2aWdhdGlvbkRhdGEiLCJtZXRhUGF0aCIsInBhcmFtZXRlcnMiLCJvUGFyYW1zIiwiX2ludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldE91dGJvdW5kUGFyYW1zIiwiT2JqZWN0Iiwic2VtYW50aWNPYmplY3QiLCJhY3Rpb24iLCJuYXZpZ2F0ZSIsIm5hdmlnYXRpb25Db250ZXh0cyIsInNlbWFudGljT2JqZWN0TWFwcGluZyIsIm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZCIsInNPdXRib3VuZFRhcmdldCIsInNDcmVhdGVQYXRoIiwib25OYXZpZ2F0ZUNoYW5nZSIsImdldEV4dGVuc2lvbkFQSSIsInVwZGF0ZUFwcFN0YXRlIiwiYlNlY3Rpb25OYXZpZ2F0ZWQiLCJvSW50ZXJuYWxNb2RlbENvbnRleHQiLCJzZWN0aW9uTGF5b3V0Iiwib1N1YlNlY3Rpb24iLCJnZXRQYXJhbWV0ZXIiLCJfdXBkYXRlRm9jdXNJbkVkaXRNb2RlIiwib25WYXJpYW50U2VsZWN0ZWQiLCJvblZhcmlhbnRTYXZlZCIsInNldFRpbWVvdXQiLCJuYXZpZ2F0ZVRvU3ViU2VjdGlvbiIsInZEZXRhaWxDb25maWciLCJvRGV0YWlsQ29uZmlnIiwiYnlJZCIsIm9TZWN0aW9uIiwic2VjdGlvbklkIiwic3ViU2VjdGlvbklkIiwiZ2V0U3ViU2VjdGlvbnMiLCJnZXRQYXJlbnQiLCJnZXRWaXNpYmxlIiwic1RpdGxlIiwiZ2V0UmVzb3VyY2VNb2RlbCIsImdldFRleHQiLCJlbnRpdHlTZXQiLCJNZXNzYWdlQm94Iiwic2Nyb2xsVG9TZWN0aW9uIiwiZmlyZU5hdmlnYXRlIiwic2VjdGlvbiIsInN1YlNlY3Rpb24iLCJvblN0YXRlQ2hhbmdlIiwiY2xvc2VPUE1lc3NhZ2VTdHJpcCIsImhpZGVNZXNzYWdlIiwibUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzIiwiRXh0ZW5zaW9uQVBJIiwiZXh0ZW5zaW9uQVBJIiwib25Jbml0Iiwic2V0UHJvcGVydHkiLCJwYWdlIiwidmlzaWJpbGl0eSIsIml0ZW1zIiwiX2dldEJhdGNoR3JvdXBzRm9yVmlldyIsImdldEVuYWJsZUxhenlMb2FkaW5nIiwiYXR0YWNoRXZlbnQiLCJfaGFuZGxlU3ViU2VjdGlvbkVudGVyZWRWaWV3UG9ydCIsIm9JdGVtQmluZGluZyIsImF0dGFjaENoYW5nZSIsIl9mblNob3dPUE1lc3NhZ2UiLCJvbkV4aXQiLCJkZXN0cm95Iiwib01lc3NhZ2VQb3BvdmVyIiwiaXNPcGVuIiwiY2xvc2UiLCJpc0tlZXBBbGl2ZSIsInNldEtlZXBBbGl2ZSIsImlzQ29ubmVjdGVkIiwiZGlzY29ubmVjdCIsInZpZXciLCJpbnRlcm5hbENvbnRleHQiLCJzdHJpcFZpc2libGUiLCJtZXNzYWdlcyIsImdldEl0ZW1zIiwiaXRlbSIsImZpbHRlciIsIm1lc3NhZ2UiLCJnZXRUYXJnZXRzIiwic2hvd01lc3NhZ2VzIiwiY2hlY2tTZWN0aW9uc0Zvck5vblJlc3BvbnNpdmVUYWJsZSIsInN1YlNlY3Rpb25zIiwiY2hhbmdlQ2xhc3NGb3JUYWJsZXMiLCJldmVudCIsImxhc3RWaXNpYmxlU3ViU2VjdGlvbiIsImJsb2NrcyIsImdldEJsb2NrcyIsImdldE1vcmVCbG9ja3MiLCJ0YWJsZVR5cGUiLCJzZWFyY2hUYWJsZUluQmxvY2siLCJhZGRTdHlsZUNsYXNzIiwiZGV0YWNoRXZlbnQiLCJzdWJTZWN0aW9uSW5kZXgiLCJibG9jayIsImNvbnRyb2wiLCJjb250ZW50IiwidGFibGVBUEkiLCJvbkJlZm9yZVJlbmRlcmluZyIsIlBhZ2VDb250cm9sbGVyIiwicHJvdG90eXBlIiwiYXBwbHkiLCJvVmlld0RhdGEiLCJyZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IiwiQ29tbW9uSGVscGVyIiwic2V0TWV0YU1vZGVsIiwiZ2V0QXBwQ29tcG9uZW50Iiwib25BZnRlclJlbmRlcmluZyIsImdldFVzZUljb25UYWJCYXIiLCJzZWN0aW9ucyIsImdldFNlY3Rpb25zIiwiX2dldEFsbFN1YlNlY3Rpb25zIiwiX29uQmVmb3JlQmluZGluZyIsImFUYWJsZXMiLCJvSW50ZXJuYWxNb2RlbCIsImFCYXRjaEdyb3VwcyIsIm9GYXN0Q3JlYXRpb25Sb3ciLCJwdXNoIiwiYkRyYWZ0TmF2aWdhdGlvbiIsIl9jbG9zZVNpZGVDb250ZW50Iiwib3BDb250ZXh0IiwiaGFzUGVuZGluZ0NoYW5nZXMiLCJnZXRCaW5kaW5nIiwicmVzZXRDaGFuZ2VzIiwic2V0QmluZGluZ0NvbnRleHQiLCJmblNjcm9sbFRvUHJlc2VudFNlY3Rpb24iLCJpc0ZpcnN0UmVuZGVyaW5nIiwiYlBlcnNpc3RPUFNjcm9sbCIsInNldFNlbGVjdGVkU2VjdGlvbiIsIm9EZWxlZ2F0ZU9uQmVmb3JlIiwiYWRkRXZlbnREZWxlZ2F0ZSIsInBhZ2VSZWFkeSIsInJlbW92ZUV2ZW50RGVsZWdhdGUiLCJvQmluZGluZyIsImxpc3RCaW5kaW5nIiwib1BhZ2luYXRvckN1cnJlbnRDb250ZXh0Iiwib0JpbmRpbmdUb1VzZSIsInBhZ2luYXRvciIsImluaXRpYWxpemUiLCJzQmluZGluZ1BhdGgiLCJ0ZXN0Iiwic0xpc3RCaW5kaW5nUGF0aCIsInJlcGxhY2UiLCJPRGF0YUxpc3RCaW5kaW5nIiwib01vZGVsIiwiX3NldExpc3RCaW5kaW5nQXN5bmMiLCJhU2VjdGlvbnMiLCJiVXNlSWNvblRhYkJhciIsImlTa2lwIiwiYklzSW5FZGl0TW9kZSIsImJFZGl0YWJsZUhlYWRlciIsImVkaXRhYmxlSGVhZGVyQ29udGVudCIsImlTZWN0aW9uIiwiYVN1YlNlY3Rpb25zIiwiaVN1YlNlY3Rpb24iLCJpc1Zpc2liaWxpdHlEeW5hbWljIiwicGxhY2Vob2xkZXIiLCJpc1BsYWNlaG9sZGVyRW5hYmxlZCIsInNob3dQbGFjZWhvbGRlciIsIm9OYXZDb250YWluZXIiLCJvQ29udGFpbmVyIiwiX2dldEZpcnN0Q2xpY2thYmxlRWxlbWVudCIsIm9GaXJzdENsaWNrYWJsZUVsZW1lbnQiLCJhQWN0aW9ucyIsImdldEhlYWRlclRpdGxlIiwiZ2V0QWN0aW9ucyIsIm9BY3Rpb24iLCJnZXRFbmFibGVkIiwiX2dldEZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZEZyb21TdWJTZWN0aW9uIiwiYUJsb2NrcyIsImFGb3JtQ29udGFpbmVycyIsImdldEZvcm1Db250YWluZXJzIiwiZ2V0Q29udGVudCIsImZvcm1Db250YWluZXIiLCJhRm9ybUVsZW1lbnRzIiwiZ2V0Rm9ybUVsZW1lbnRzIiwiZm9ybUVsZW1lbnQiLCJhRmllbGRzIiwiZ2V0RmllbGRzIiwiZ2V0UmVxdWlyZWQiLCJnZXRWYWx1ZSIsImRlYnVnIiwib01hbmRhdG9yeUZpZWxkIiwib0ZpZWxkVG9Gb2N1cyIsImdldENvbnRlbnRFZGl0IiwiX2dldEZpcnN0RWRpdGFibGVJbnB1dCIsImZvY3VzIiwiX29uQmFja05hdmlnYXRpb25JbkRyYWZ0IiwibWVzc2FnZUhhbmRsZXIiLCJyZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMiLCJnZXRSb3V0ZXJQcm94eSIsImNoZWNrSWZCYWNrSGFzU2FtZUNvbnRleHQiLCJoaXN0b3J5IiwiYmFjayIsImRyYWZ0IiwicHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24iLCJGdW5jdGlvbiIsIk5hdmlnYXRpb25UeXBlIiwiQmFja05hdmlnYXRpb24iLCJfb25BZnRlckJpbmRpbmciLCJpbnB1dEJpbmRpbmdDb250ZXh0IiwiX3NpZGVFZmZlY3RzIiwiY2xlYXJGaWVsZEdyb3Vwc1ZhbGlkaXR5IiwiYUlCTkFjdGlvbnMiLCJmb3JFYWNoIiwiZ2V0SUJOQWN0aW9ucyIsIm9UYWJsZVJvd0JpbmRpbmciLCJNb2RlbEhlbHBlciIsImlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsInJlbW92ZUNhY2hlc0FuZE1lc3NhZ2VzIiwib0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsInBhcnNlQ3VzdG9tRGF0YSIsIkRlbGVnYXRlVXRpbCIsImdldEN1c3RvbURhdGEiLCJBY3Rpb25SdW50aW1lIiwic2V0QWN0aW9uRW5hYmxlbWVudCIsImNsZWFyU2VsZWN0aW9uIiwiZ2V0U2VtYW50aWNUYXJnZXRzRnJvbVBhZ2VNb2RlbCIsIm9PYmplY3RQYWdlVGl0bGUiLCJhSUJOSGVhZGVyQWN0aW9ucyIsImNvbmNhdCIsInVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5Iiwib0ZpbmFsVUlTdGF0ZSIsImhhbmRsZVRhYmxlTW9kaWZpY2F0aW9ucyIsImZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cyIsImZuSGFuZGxlQ2hhbmdlIiwiZGV0YWNoQ2hhbmdlIiwiY29tcHV0ZUVkaXRNb2RlIiwiaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQiLCJjb25uZWN0Iiwib0Vycm9yIiwiX3VwZGF0ZVJlbGF0ZWRBcHBzIiwiY3VycmVudEJpbmRpbmciLCJoYW5kbGVQYXRjaFNlbnQiLCJUYWJsZVV0aWxzIiwid2hlbkJvdW5kIiwiX3RyaWdnZXJWaXNpYmxlU3ViU2VjdGlvbnNFdmVudHMiLCJ1cGRhdGVFZGl0QnV0dG9uVmlzaWJpbGl0eUFuZEVuYWJsZW1lbnQiLCJkaXNwbGF5Q29sbGFib3JhdGlvbk1lc3NhZ2UiLCJyZWRpcmVjdGVkVG9Ob25EcmFmdCIsImVudGl0eU5hbWUiLCJpbnRlcm5hbEJpbmRpbmdDb250ZXh0IiwicmVzb3VyY2VCdW5kbGUiLCJDb3JlIiwiZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlIiwiTWVzc2FnZSIsInR5cGUiLCJtZXNzYWdlVG9Db21wYXJlIiwibGVuZ3RoVW50aWxWYXJpYWJsZSIsInNlYXJjaCIsInN1YnN0cmluZyIsIm9uUGFnZVJlYWR5Iiwic2V0Rm9jdXMiLCJpc0luRGlzcGxheU1vZGUiLCJvU2VsZWN0ZWRTZWN0aW9uIiwiZ2V0U2VsZWN0ZWRTZWN0aW9uIiwib0JpbmRpbmdDb250ZXh0IiwiYklzU3RpY2t5TW9kZSIsIm9BcHBDb21wb25lbnQiLCJnZXRTaGVsbFNlcnZpY2VzIiwic2V0QmFja05hdmlnYXRpb24iLCJ2aWV3SWQiLCJnZXRBcHBTdGF0ZUhhbmRsZXIiLCJhcHBseUFwcFN0YXRlIiwiZm9yY2VGb2N1cyIsIkVycm9yIiwiX2NoZWNrRGF0YVBvaW50VGl0bGVGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJfZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24iLCJvT2JqZWN0UGFnZVN1YnRpdGxlIiwib0N1c3RvbURhdGEiLCJnZXRLZXkiLCJ0aXRsZSIsInN1YnRpdGxlIiwiaW50ZW50IiwiaWNvbiIsIl9leGVjdXRlSGVhZGVyU2hvcnRjdXQiLCJzQnV0dG9uSWQiLCJvQnV0dG9uIiwib0VsZW1lbnQiLCJmaXJlQnV0dG9uUHJlc3MiLCJfZXhlY3V0ZUZvb3RlclNob3J0Y3V0IiwiZ2V0Rm9vdGVyIiwiZ2V0TmFtZSIsIl9leGVjdXRlVGFiU2hvcnRDdXQiLCJvRXhlY3V0aW9uIiwiaVNlY3Rpb25JbmRleE1heCIsInNDb21tYW5kIiwiZ2V0Q29tbWFuZCIsIm5ld1NlY3Rpb24iLCJpU2VsZWN0ZWRTZWN0aW9uSW5kZXgiLCJpbmRleE9mU2VjdGlvbiIsIl9nZXRGb290ZXJWaXNpYmlsaXR5Iiwic1ZpZXdJZCIsInNhcCIsInVpIiwiZ2V0Q29yZSIsImdldE1lc3NhZ2VNYW5hZ2VyIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsIm9NZXNzYWdlIiwidmFsaWRhdGlvbiIsInRhcmdldCIsImluZGV4T2YiLCJvUmV0Iiwicm9vdFZpZXdDb250cm9sbGVyIiwiZ2V0Um9vdFZpZXdDb250cm9sbGVyIiwiY3VycmVudFBhZ2VWaWV3IiwiaXNGY2xFbmFibGVkIiwiZ2V0UmlnaHRtb3N0VmlldyIsImdldFJvb3RDb250YWluZXIiLCJnZXRDdXJyZW50UGFnZSIsIm9NZXNzYWdlQnV0dG9uIiwiZ2V0TGVuZ3RoIiwic2V0VmlzaWJsZSIsIm9wZW5CeSIsIkJ1c3lMb2NrZXIiLCJsb2NrIiwiZWRpdERvY3VtZW50IiwiZmluYWxseSIsInVubG9jayIsIl92YWxpZGF0ZURvY3VtZW50IiwiYXBwQ29tcG9uZW50IiwiZ2V0Q3VycmVudEZvY3VzZWRDb250cm9sSWQiLCJjb250ZXh0IiwiaXNUcmFuc2llbnQiLCJzaWRlRWZmZWN0c1NlcnZpY2UiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJlbnRpdHlUeXBlIiwiZ2V0RW50aXR5VHlwZUZyb21Db250ZXh0IiwiZ2xvYmFsU2lkZUVmZmVjdHMiLCJnZXRHbG9iYWxPRGF0YUVudGl0eVNpZGVFZmZlY3RzIiwic3luY1Rhc2siLCJQcm9taXNlIiwiYWxsIiwic2lkZUVmZmVjdHMiLCJyZXF1ZXN0U2lkZUVmZmVjdHMiLCJkcmFmdFJvb3RDb250ZXh0IiwiY3JlYXRlUm9vdENvbnRleHQiLCJEcmFmdCIsImV4ZWN1dGVEcmFmdFZhbGlkYXRpb24iLCJhV2FpdENyZWF0ZURvY3VtZW50cyIsImJFeGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yIiwiY3JlYXRpb25Nb2RlIiwiY3JlYXRpb25Sb3ciLCJjcmVhdGVBdEVuZCIsImJDcmVhdGVEb2N1bWVudCIsImJTa2lwU2lkZUVmZmVjdHMiLCJjcmVhdGVEb2N1bWVudCIsImFCaW5kaW5ncyIsImJpbmRpbmdzIiwic2F2ZURvY3VtZW50IiwiaXNMb2NrZWQiLCJfbWFuYWdlQ29sbGFib3JhdGlvbiIsIm9wZW5NYW5hZ2VEaWFsb2ciLCJfc2hvd0NvbGxhYm9yYXRpb25Vc2VyRGV0YWlscyIsInNob3dVc2VyRGV0YWlscyIsIl9jYW5jZWxEb2N1bWVudCIsImNhbmNlbEJ1dHRvbiIsImNhbmNlbERvY3VtZW50IiwiYXBwbHlEb2N1bWVudCIsInNob3dSZWxhdGVkQXBwcyIsInVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyIsIl9maW5kQ29udHJvbEluU3ViU2VjdGlvbiIsImFQYXJlbnRFbGVtZW50IiwiYVN1YnNlY3Rpb24iLCJhQ29udHJvbHMiLCJiSXNDaGFydCIsImVsZW1lbnQiLCJtQWdncmVnYXRpb25zIiwiZ2V0QWdncmVnYXRpb24iLCJhSXRlbXMiLCJvSXRlbSIsImdldE1haW5Db250ZW50IiwiX2dldEFsbEJsb2NrcyIsIl9maW5kQ2hhcnRzIiwiYUNoYXJ0cyIsIm9CbG9jayIsIm9Db250ZW50Iiwic2V0U2hvd1NpZGVDb250ZW50Iiwib0NoYXJ0Q29udGV4dCIsInNDaGFydFBhdGgiLCJvQ29udGV4dERhdGEiLCJvQ2hhcnRDb250ZXh0RGF0YSIsIl9zY3JvbGxUYWJsZXNUb1JvdyIsInNSb3dQYXRoIiwiVGFibGVTY3JvbGxlciIsInNjcm9sbFRhYmxlVG9Sb3ciLCJfbWVyZ2VNdWx0aXBsZUNvbnRleHRzIiwib1BhZ2VDb250ZXh0IiwiYUxpbmVDb250ZXh0IiwiYUF0dHJpYnV0ZXMiLCJhUGFnZUF0dHJpYnV0ZXMiLCJzTWV0YVBhdGhMaW5lIiwic1BhdGhMaW5lIiwic1BhZ2VQYXRoIiwib01ldGFNb2RlbCIsInNNZXRhUGF0aFBhZ2UiLCJvU2luZ2xlQ29udGV4dCIsIm9TdWJDaGFydENvbnRleHREYXRhIiwiY29udGV4dERhdGEiLCJyZW1vdmVTZW5zaXRpdmVEYXRhIiwib1BhZ2VMZXZlbFNWIiwiYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQiLCJTZWxlY3Rpb25WYXJpYW50Iiwic2VsZWN0aW9uVmFyaWFudCIsImF0dHJpYnV0ZXMiLCJvQ29uZmlndXJhdGlvbnMiLCJjb250cm9sQ29uZmlndXJhdGlvbiIsImFDb25maWd1cmF0aW9ucyIsIm9Db25maWd1cmF0aW9uIiwicmVxdWVzdEdyb3VwSWQiLCJfc2V0QnJlYWRjcnVtYkxpbmtzIiwiYVByb21pc2VzIiwiYVNraXBQYXJhbWV0ZXJpemVkIiwic05ld1BhdGgiLCJhUGF0aFBhcnRzIiwic3BsaXQiLCJzUGF0aCIsInNoaWZ0Iiwic3BsaWNlIiwic1BhdGhQYXJ0Iiwib1Jvb3RWaWV3Q29udHJvbGxlciIsInNQYXJhbWV0ZXJQYXRoIiwiYlJlc3VsdENvbnRleHQiLCJnZXRUaXRsZUluZm9Gcm9tUGF0aCIsInRpdGxlSGllcmFyY2h5SW5mb3MiLCJpZHgiLCJoaWVyYXJjaHlQb3NpdGlvbiIsIm9MaW5rIiwidGl0bGVIaWVyYXJjaHlJbmZvIiwiZ2V0TGlua3MiLCJMaW5rIiwic2V0VGV4dCIsInNldEhyZWYiLCJlbmNvZGVVUkkiLCJhZGRMaW5rIiwib0RhdGFQb2ludHMiLCJnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJnZXRSb3V0aW5nU2VydmljZSIsImdldE91dGJvdW5kcyIsIm9TaGVsbFNlcnZpY2VzIiwicmVxdWVzdE9iamVjdCIsImZuR2V0TGlua3MiLCJmbk9uRXJyb3IiLCJmblNldExpbmtFbmFibGVtZW50IiwiaWQiLCJhU3VwcG9ydGVkTGlua3MiLCJzTGlua0lkIiwic3VwcG9ydGVkIiwib1N1YkRhdGFQb2ludHMiLCJvUGFnZURhdGEiLCJvRGF0YVBvaW50Iiwib0xpbmtDb250ZXh0Iiwib0xpbmtEYXRhIiwib01peGVkQ29udGV4dCIsIm1lcmdlIiwib01hcHBpbmciLCJzTWFpblByb3BlcnR5Iiwic01hcHBlZFByb3BlcnR5IiwiaGFzT3duUHJvcGVydHkiLCJvTmV3TWFwcGluZyIsImlzTmF2aWdhdGlvblN1cHBvcnRlZCIsInBhcmFtcyIsImFMaW5rcyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiT2JqZWN0UGFnZUNvbnRyb2xsZXIuY29udHJvbGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IEFjdGlvblJ1bnRpbWUgZnJvbSBcInNhcC9mZS9jb3JlL0FjdGlvblJ1bnRpbWVcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBCdXN5TG9ja2VyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgeyBjb25uZWN0LCBkaXNjb25uZWN0LCBpc0Nvbm5lY3RlZCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9jb2xsYWJvcmF0aW9uL0FjdGl2aXR5U3luY1wiO1xuaW1wb3J0IHsgb3Blbk1hbmFnZURpYWxvZywgc2hvd1VzZXJEZXRhaWxzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NvbGxhYm9yYXRpb24vTWFuYWdlXCI7XG5pbXBvcnQgZHJhZnQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2VkaXRGbG93L2RyYWZ0XCI7XG5pbXBvcnQgSW50ZW50QmFzZWROYXZpZ2F0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBJbnRlcm5hbFJvdXRpbmcgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsUm91dGluZ1wiO1xuaW1wb3J0IE1hc3NFZGl0IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9NYXNzRWRpdFwiO1xuaW1wb3J0IE1lc3NhZ2VIYW5kbGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9NZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IFBhZ2VSZWFkeSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvUGFnZVJlYWR5XCI7XG5pbXBvcnQgUGFnaW5hdG9yIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QYWdpbmF0b3JcIjtcbmltcG9ydCBQbGFjZWhvbGRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvUGxhY2Vob2xkZXJcIjtcbmltcG9ydCBTaGFyZSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvU2hhcmVcIjtcbmltcG9ydCBWaWV3U3RhdGUgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1ZpZXdTdGF0ZVwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIGV4dGVuc2libGUsIGZpbmFsRXh0ZW5zaW9uLCBwdWJsaWNFeHRlbnNpb24sIHVzaW5nRXh0ZW5zaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBGRUxpYnJhcnkgZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgRGVsZWdhdGVVdGlsIGZyb20gXCJzYXAvZmUvbWFjcm9zL0RlbGVnYXRlVXRpbFwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCBUYWJsZUhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUhlbHBlclwiO1xuaW1wb3J0IFRhYmxlVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVXRpbHNcIjtcbmltcG9ydCBTZWxlY3Rpb25WYXJpYW50IGZyb20gXCJzYXAvZmUvbmF2aWdhdGlvbi9TZWxlY3Rpb25WYXJpYW50XCI7XG5pbXBvcnQgdHlwZSBTdWJTZWN0aW9uQmxvY2sgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9jb250cm9scy9TdWJTZWN0aW9uQmxvY2tcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJIH0gZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9FeHRlbnNpb25BUElcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgRXh0ZW5zaW9uQVBJIH0gZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9FeHRlbnNpb25BUElcIjtcbmltcG9ydCBUYWJsZVNjcm9sbGVyIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL1RhYmxlU2Nyb2xsZXJcIjtcbmltcG9ydCBJbnN0YW5jZU1hbmFnZXIgZnJvbSBcInNhcC9tL0luc3RhbmNlTWFuYWdlclwiO1xuaW1wb3J0IExpbmsgZnJvbSBcInNhcC9tL0xpbmtcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgdHlwZSBQb3BvdmVyIGZyb20gXCJzYXAvbS9Qb3BvdmVyXCI7XG5pbXBvcnQgQ29yZSBmcm9tIFwic2FwL3VpL2NvcmUvQ29yZVwiO1xuaW1wb3J0IE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IE92ZXJyaWRlRXhlY3V0aW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvT3ZlcnJpZGVFeGVjdXRpb25cIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgQmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL0JpbmRpbmdcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IE9EYXRhQ29udGV4dEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUNvbnRleHRCaW5kaW5nXCI7XG5pbXBvcnQgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBCcmVhZENydW1icyBmcm9tIFwic2FwL3V4YXAvQnJlYWRDcnVtYnNcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGUgZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGVcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VMYXlvdXQgZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VMYXlvdXRcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VTZWN0aW9uIGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlU2VjdGlvblwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZVN1YlNlY3Rpb24gZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VTdWJTZWN0aW9uXCI7XG5pbXBvcnQgSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL0ludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IEludGVybmFsUm91dGluZ092ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9JbnRlcm5hbFJvdXRpbmdcIjtcbmltcG9ydCBNZXNzYWdlSGFuZGxlck92ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9NZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IFBhZ2luYXRvck92ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9QYWdpbmF0b3JcIjtcbmltcG9ydCBTaGFyZU92ZXJyaWRlcyBmcm9tIFwiLi9vdmVycmlkZXMvU2hhcmVcIjtcbmltcG9ydCBWaWV3U3RhdGVPdmVycmlkZXMgZnJvbSBcIi4vb3ZlcnJpZGVzL1ZpZXdTdGF0ZVwiO1xuXG5jb25zdCBQcm9ncmFtbWluZ01vZGVsID0gRkVMaWJyYXJ5LlByb2dyYW1taW5nTW9kZWw7XG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUudGVtcGxhdGVzLk9iamVjdFBhZ2UuT2JqZWN0UGFnZUNvbnRyb2xsZXJcIilcbmNsYXNzIE9iamVjdFBhZ2VDb250cm9sbGVyIGV4dGVuZHMgUGFnZUNvbnRyb2xsZXIge1xuXHRvVmlldyE6IGFueTtcblxuXHRAdXNpbmdFeHRlbnNpb24oUGxhY2Vob2xkZXIpXG5cdHBsYWNlaG9sZGVyITogUGxhY2Vob2xkZXI7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFNoYXJlLm92ZXJyaWRlKFNoYXJlT3ZlcnJpZGVzKSlcblx0c2hhcmUhOiBTaGFyZTtcblxuXHRAdXNpbmdFeHRlbnNpb24oSW50ZXJuYWxSb3V0aW5nLm92ZXJyaWRlKEludGVybmFsUm91dGluZ092ZXJyaWRlKSlcblx0X3JvdXRpbmchOiBJbnRlcm5hbFJvdXRpbmc7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFBhZ2luYXRvci5vdmVycmlkZShQYWdpbmF0b3JPdmVycmlkZSkpXG5cdHBhZ2luYXRvciE6IFBhZ2luYXRvcjtcblxuXHRAdXNpbmdFeHRlbnNpb24oTWVzc2FnZUhhbmRsZXIub3ZlcnJpZGUoTWVzc2FnZUhhbmRsZXJPdmVycmlkZSkpXG5cdG1lc3NhZ2VIYW5kbGVyITogTWVzc2FnZUhhbmRsZXI7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKEludGVudEJhc2VkTmF2aWdhdGlvbi5vdmVycmlkZShJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSkpXG5cdGludGVudEJhc2VkTmF2aWdhdGlvbiE6IEludGVudEJhc2VkTmF2aWdhdGlvbjtcblxuXHRAdXNpbmdFeHRlbnNpb24oXG5cdFx0SW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24ub3ZlcnJpZGUoe1xuXHRcdFx0Z2V0TmF2aWdhdGlvbk1vZGU6IGZ1bmN0aW9uICh0aGlzOiBJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbikge1xuXHRcdFx0XHRjb25zdCBiSXNTdGlja3lFZGl0TW9kZSA9XG5cdFx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBPYmplY3RQYWdlQ29udHJvbGxlcikuZ2V0U3RpY2t5RWRpdE1vZGUgJiZcblx0XHRcdFx0XHQodGhpcy5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIE9iamVjdFBhZ2VDb250cm9sbGVyKS5nZXRTdGlja3lFZGl0TW9kZSgpO1xuXHRcdFx0XHRyZXR1cm4gYklzU3RpY2t5RWRpdE1vZGUgPyBcImV4cGxhY2VcIiA6IHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHR9KVxuXHQpXG5cdF9pbnRlbnRCYXNlZE5hdmlnYXRpb24hOiBJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbjtcblxuXHRAdXNpbmdFeHRlbnNpb24oVmlld1N0YXRlLm92ZXJyaWRlKFZpZXdTdGF0ZU92ZXJyaWRlcykpXG5cdHZpZXdTdGF0ZSE6IFZpZXdTdGF0ZTtcblxuXHRAdXNpbmdFeHRlbnNpb24oXG5cdFx0UGFnZVJlYWR5Lm92ZXJyaWRlKHtcblx0XHRcdGlzQ29udGV4dEV4cGVjdGVkOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pXG5cdClcblx0cGFnZVJlYWR5ITogUGFnZVJlYWR5O1xuXG5cdEB1c2luZ0V4dGVuc2lvbihNYXNzRWRpdClcblx0bWFzc0VkaXQhOiBNYXNzRWRpdDtcblxuXHRwcml2YXRlIG1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcz86IFJlY29yZDxzdHJpbmcsIE9iamVjdFBhZ2VFeHRlbnNpb25BUEk+O1xuXG5cdHByb3RlY3RlZCBleHRlbnNpb25BUEk/OiBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJO1xuXG5cdHByaXZhdGUgYlNlY3Rpb25OYXZpZ2F0ZWQ/OiBib29sZWFuO1xuXG5cdHByaXZhdGUgc3dpdGNoRHJhZnRBbmRBY3RpdmVQb3BPdmVyPzogUG9wb3ZlcjtcblxuXHRwcml2YXRlIGN1cnJlbnRCaW5kaW5nPzogQmluZGluZztcblxuXHRwcml2YXRlIG1lc3NhZ2VCdXR0b246IGFueTtcblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0Z2V0RXh0ZW5zaW9uQVBJKHNJZD86IHN0cmluZyk6IEV4dGVuc2lvbkFQSSB7XG5cdFx0aWYgKHNJZCkge1xuXHRcdFx0Ly8gdG8gYWxsb3cgbG9jYWwgSUQgdXNhZ2UgZm9yIGN1c3RvbSBwYWdlcyB3ZSdsbCBjcmVhdGUvcmV0dXJuIG93biBpbnN0YW5jZXMgZm9yIGN1c3RvbSBzZWN0aW9uc1xuXHRcdFx0dGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXMgPSB0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcyB8fCB7fTtcblxuXHRcdFx0aWYgKCF0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdKSB7XG5cdFx0XHRcdHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF0gPSBuZXcgRXh0ZW5zaW9uQVBJKHRoaXMsIHNJZCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKCF0aGlzLmV4dGVuc2lvbkFQSSkge1xuXHRcdFx0XHR0aGlzLmV4dGVuc2lvbkFQSSA9IG5ldyBFeHRlbnNpb25BUEkodGhpcyk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcy5leHRlbnNpb25BUEk7XG5cdFx0fVxuXHR9XG5cblx0b25Jbml0KCkge1xuXHRcdHN1cGVyLm9uSW5pdCgpO1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblxuXHRcdC8vIFNldHRpbmcgZGVmYXVsdHMgb2YgaW50ZXJuYWwgbW9kZWwgY29udGV4dFxuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcImV4dGVybmFsTmF2aWdhdGlvbkNvbnRleHRcIiwgeyBwYWdlOiB0cnVlIH0pO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJyZWxhdGVkQXBwc1wiLCB7XG5cdFx0XHR2aXNpYmlsaXR5OiBmYWxzZSxcblx0XHRcdGl0ZW1zOiBudWxsXG5cdFx0fSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcImJhdGNoR3JvdXBzXCIsIHRoaXMuX2dldEJhdGNoR3JvdXBzRm9yVmlldygpKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiZXJyb3JOYXZpZ2F0aW9uU2VjdGlvbkZsYWdcIiwgZmFsc2UpO1xuXHRcdGlmIChvT2JqZWN0UGFnZS5nZXRFbmFibGVMYXp5TG9hZGluZygpKSB7XG5cdFx0XHQvL0F0dGFjaGluZyB0aGUgZXZlbnQgdG8gbWFrZSB0aGUgc3Vic2VjdGlvbiBjb250ZXh0IGJpbmRpbmcgYWN0aXZlIHdoZW4gaXQgaXMgdmlzaWJsZS5cblx0XHRcdG9PYmplY3RQYWdlLmF0dGFjaEV2ZW50KFwic3ViU2VjdGlvbkVudGVyZWRWaWV3UG9ydFwiLCB0aGlzLl9oYW5kbGVTdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0LmJpbmQodGhpcykpO1xuXHRcdH1cblx0XHR0aGlzLm1lc3NhZ2VCdXR0b24gPSB0aGlzLmdldFZpZXcoKS5ieUlkKFwiZmU6OkZvb3RlckJhcjo6TWVzc2FnZUJ1dHRvblwiKTtcblx0XHR0aGlzLm1lc3NhZ2VCdXR0b24ub0l0ZW1CaW5kaW5nLmF0dGFjaENoYW5nZSh0aGlzLl9mblNob3dPUE1lc3NhZ2UsIHRoaXMpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJyb290RWRpdEVuYWJsZWRcIiwgdHJ1ZSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcInJvb3RFZGl0VmlzaWJsZVwiLCB0cnVlKTtcblx0fVxuXG5cdG9uRXhpdCgpIHtcblx0XHRpZiAodGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXMpIHtcblx0XHRcdGZvciAoY29uc3Qgc0lkIG9mIE9iamVjdC5rZXlzKHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzKSkge1xuXHRcdFx0XHRpZiAodGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXSkge1xuXHRcdFx0XHRcdHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF0uZGVzdHJveSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRkZWxldGUgdGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXM7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmV4dGVuc2lvbkFQSSkge1xuXHRcdFx0dGhpcy5leHRlbnNpb25BUEkuZGVzdHJveSgpO1xuXHRcdH1cblx0XHRkZWxldGUgdGhpcy5leHRlbnNpb25BUEk7XG5cblx0XHRjb25zdCBvTWVzc2FnZVBvcG92ZXIgPSB0aGlzLm1lc3NhZ2VCdXR0b24gPyB0aGlzLm1lc3NhZ2VCdXR0b24ub01lc3NhZ2VQb3BvdmVyIDogbnVsbDtcblx0XHRpZiAob01lc3NhZ2VQb3BvdmVyICYmIG9NZXNzYWdlUG9wb3Zlci5pc09wZW4oKSkge1xuXHRcdFx0b01lc3NhZ2VQb3BvdmVyLmNsb3NlKCk7XG5cdFx0fVxuXHRcdC8vd2hlbiBleGl0aW5nIHdlIHNldCBrZWVwQWxpdmUgY29udGV4dCB0byBmYWxzZVxuXHRcdGNvbnN0IG9Db250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0O1xuXHRcdGlmIChvQ29udGV4dCAmJiBvQ29udGV4dC5pc0tlZXBBbGl2ZSgpKSB7XG5cdFx0XHRvQ29udGV4dC5zZXRLZWVwQWxpdmUoZmFsc2UpO1xuXHRcdH1cblx0XHRpZiAoaXNDb25uZWN0ZWQodGhpcy5nZXRWaWV3KCkpKSB7XG5cdFx0XHRkaXNjb25uZWN0KHRoaXMuZ2V0VmlldygpKTsgLy8gQ2xlYW51cCBjb2xsYWJvcmF0aW9uIGNvbm5lY3Rpb24gd2hlbiBsZWF2aW5nIHRoZSBhcHBcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHNob3cgdGhlIG1lc3NhZ2Ugc3RyaXAgb24gdGhlIG9iamVjdCBwYWdlLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2ZuU2hvd09QTWVzc2FnZSgpIHtcblx0XHRjb25zdCBleHRlbnNpb25BUEkgPSB0aGlzLmdldEV4dGVuc2lvbkFQSSgpO1xuXHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRjb25zdCBpbnRlcm5hbENvbnRleHQgPSB2aWV3Py5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdGNvbnN0IHN0cmlwVmlzaWJsZSA9IGludGVybmFsQ29udGV4dD8uZ2V0UHJvcGVydHkoXCJPUE1lc3NhZ2VTdHJpcFZpc2liaWxpdHlcIik7XG5cdFx0Y29uc3QgbWVzc2FnZXMgPSB0aGlzLm1lc3NhZ2VCdXR0b24ub01lc3NhZ2VQb3BvdmVyXG5cdFx0XHQuZ2V0SXRlbXMoKVxuXHRcdFx0Lm1hcCgoaXRlbTogYW55KSA9PiBpdGVtLmdldEJpbmRpbmdDb250ZXh0KFwibWVzc2FnZVwiKS5nZXRPYmplY3QoKSlcblx0XHRcdC5maWx0ZXIoKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IHtcblx0XHRcdFx0cmV0dXJuIG1lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdID09PSB2aWV3LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKTtcblx0XHRcdH0pO1xuXG5cdFx0aWYgKGV4dGVuc2lvbkFQSSAmJiAhKG1lc3NhZ2VzLmxlbmd0aCA9PT0gMCAmJiBzdHJpcFZpc2libGUpKSB7XG5cdFx0XHRleHRlbnNpb25BUEkuc2hvd01lc3NhZ2VzKG1lc3NhZ2VzKTtcblx0XHR9XG5cdH1cblxuXHRfZ2V0VGFibGVCaW5kaW5nKG9UYWJsZTogYW55KSB7XG5cdFx0cmV0dXJuIG9UYWJsZSAmJiBvVGFibGUuZ2V0Um93QmluZGluZygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZpbmQgdGhlIGxhc3QgdmlzaWJsZSBzdWJzZWN0aW9uIGFuZCBhZGQgdGhlIHNhcFV4QVBPYmplY3RQYWdlU3ViU2VjdGlvbkZpdENvbnRhaW5lciBDU1MgY2xhc3MgaWYgaXQgY29udGFpbnMgb25seSBhIEdyaWRUYWJsZSBvciBhIFRyZWVUYWJsZS5cblx0ICpcblx0ICogQHBhcmFtIHN1YlNlY3Rpb25zIFRoZSBzdWIgc2VjdGlvbnMgdG8gbG9vayBmb3Jcblx0ICogQHByaXZhdGVcblx0ICovXG5cdHByaXZhdGUgY2hlY2tTZWN0aW9uc0Zvck5vblJlc3BvbnNpdmVUYWJsZShzdWJTZWN0aW9uczogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSkge1xuXHRcdGNvbnN0IGNoYW5nZUNsYXNzRm9yVGFibGVzID0gKGV2ZW50OiBFdmVudCwgbGFzdFZpc2libGVTdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbikgPT4ge1xuXHRcdFx0Y29uc3QgYmxvY2tzID0gWy4uLmxhc3RWaXNpYmxlU3ViU2VjdGlvbi5nZXRCbG9ja3MoKSwgLi4ubGFzdFZpc2libGVTdWJTZWN0aW9uLmdldE1vcmVCbG9ja3MoKV07XG5cdFx0XHRjb25zdCB0YWJsZVR5cGUgPSBibG9ja3MubGVuZ3RoID09PSAxICYmIHRoaXMuc2VhcmNoVGFibGVJbkJsb2NrKGJsb2Nrc1swXSBhcyBTdWJTZWN0aW9uQmxvY2spPy5nZXRUeXBlKCk7XG5cdFx0XHRpZiAodGFibGVUeXBlICYmICh0YWJsZVR5cGU/LmlzQShcInNhcC51aS5tZGMudGFibGUuR3JpZFRhYmxlVHlwZVwiKSB8fCB0YWJsZVR5cGU/LmlzQShcInNhcC51aS5tZGMudGFibGUuVHJlZVRhYmxlVHlwZVwiKSkpIHtcblx0XHRcdFx0Ly9JbiBjYXNlIHRoZXJlIGlzIG9ubHkgYSBzaW5nbGUgdGFibGUgaW4gYSBzdWJTZWN0aW9uIHdlIGZpdCB0aGF0IHRvIHRoZSB3aG9sZSBwYWdlIHNvIHRoYXQgdGhlIHNjcm9sbGJhciBjb21lcyBvbmx5IG9uIHRhYmxlIGFuZCBub3Qgb24gcGFnZVxuXHRcdFx0XHRsYXN0VmlzaWJsZVN1YlNlY3Rpb24uYWRkU3R5bGVDbGFzcyhcInNhcFV4QVBPYmplY3RQYWdlU3ViU2VjdGlvbkZpdENvbnRhaW5lclwiKTtcblx0XHRcdFx0bGFzdFZpc2libGVTdWJTZWN0aW9uLmRldGFjaEV2ZW50KFwibW9kZWxDb250ZXh0Q2hhbmdlXCIsIGNoYW5nZUNsYXNzRm9yVGFibGVzLCB0aGlzKTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdGZvciAobGV0IHN1YlNlY3Rpb25JbmRleCA9IHN1YlNlY3Rpb25zLmxlbmd0aCAtIDE7IHN1YlNlY3Rpb25JbmRleCA+PSAwOyBzdWJTZWN0aW9uSW5kZXgtLSkge1xuXHRcdFx0aWYgKHN1YlNlY3Rpb25zW3N1YlNlY3Rpb25JbmRleF0uZ2V0VmlzaWJsZSgpKSB7XG5cdFx0XHRcdGNvbnN0IGxhc3RWaXNpYmxlU3ViU2VjdGlvbiA9IHN1YlNlY3Rpb25zW3N1YlNlY3Rpb25JbmRleF07XG5cdFx0XHRcdC8vIFdlIG5lZWQgdG8gYXR0YWNoIHRoaXMgZXZlbnQgaW4gb3JkZXIgdG8gbWFuYWdlIHRoZSBPYmplY3QgUGFnZSBMYXp5IExvYWRpbmcgbWVjaGFuaXNtXG5cdFx0XHRcdGxhc3RWaXNpYmxlU3ViU2VjdGlvbi5hdHRhY2hFdmVudChcIm1vZGVsQ29udGV4dENoYW5nZVwiLCBsYXN0VmlzaWJsZVN1YlNlY3Rpb24sIGNoYW5nZUNsYXNzRm9yVGFibGVzLCB0aGlzKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEZpbmQgYSB0YWJsZSBpbiBibG9ja3Mgb2Ygc2VjdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIGJsb2NrIE9uZSBzdWIgc2VjdGlvbiBibG9ja1xuXHQgKiBAcmV0dXJucyBUYWJsZSBpZiBleGlzdHNcblx0ICovXG5cdHByaXZhdGUgc2VhcmNoVGFibGVJbkJsb2NrKGJsb2NrOiBTdWJTZWN0aW9uQmxvY2spIHtcblx0XHRjb25zdCBjb250cm9sID0gYmxvY2suY29udGVudDtcblx0XHRsZXQgdGFibGVBUEk6IFRhYmxlQVBJIHwgdW5kZWZpbmVkO1xuXHRcdGlmIChibG9jay5pc0EoXCJzYXAuZmUudGVtcGxhdGVzLk9iamVjdFBhZ2UuY29udHJvbHMuU3ViU2VjdGlvbkJsb2NrXCIpKSB7XG5cdFx0XHQvLyBUaGUgdGFibGUgbWF5IGN1cnJlbnRseSBiZSBzaG93biBpbiBhIGZ1bGwgc2NyZWVuIGRpYWxvZywgd2UgY2FuIHRoZW4gZ2V0IHRoZSByZWZlcmVuY2UgdG8gdGhlIFRhYmxlQVBJXG5cdFx0XHQvLyBjb250cm9sIGZyb20gdGhlIGN1c3RvbSBkYXRhIG9mIHRoZSBwbGFjZSBob2xkZXIgcGFuZWxcblx0XHRcdGlmIChjb250cm9sLmlzQShcInNhcC5tLlBhbmVsXCIpICYmIGNvbnRyb2wuZGF0YShcIkZ1bGxTY3JlZW5UYWJsZVBsYWNlSG9sZGVyXCIpKSB7XG5cdFx0XHRcdHRhYmxlQVBJID0gY29udHJvbC5kYXRhKFwidGFibGVBUElyZWZlcmVuY2VcIik7XG5cdFx0XHR9IGVsc2UgaWYgKGNvbnRyb2wuaXNBKFwic2FwLmZlLm1hY3Jvcy50YWJsZS5UYWJsZUFQSVwiKSkge1xuXHRcdFx0XHR0YWJsZUFQSSA9IGNvbnRyb2wgYXMgVGFibGVBUEk7XG5cdFx0XHR9XG5cdFx0XHRpZiAodGFibGVBUEkpIHtcblx0XHRcdFx0cmV0dXJuIHRhYmxlQVBJLmNvbnRlbnQgYXMgVGFibGU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0b25CZWZvcmVSZW5kZXJpbmcoKSB7XG5cdFx0UGFnZUNvbnRyb2xsZXIucHJvdG90eXBlLm9uQmVmb3JlUmVuZGVyaW5nLmFwcGx5KHRoaXMpO1xuXHRcdC8vIEluIHRoZSByZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IHNjZW5hcmlvIHdlIG5lZWQgdG8gZW5zdXJlIGluIGNhc2Ugb2YgcmVsb2FkL3JlZnJlc2ggdGhhdCB0aGUgbWV0YSBtb2RlbCBpbiB0aGUgbWV0aG9kZSByZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IG9mIHRoZSBGaWVsZFJ1bnRpbWUgaXMgYXZhaWxhYmxlXG5cdFx0aWYgKHRoaXMub1ZpZXcub1ZpZXdEYXRhPy5yZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0ICYmIENvbW1vbkhlbHBlci5nZXRNZXRhTW9kZWwoKSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRDb21tb25IZWxwZXIuc2V0TWV0YU1vZGVsKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdH1cblx0fVxuXG5cdG9uQWZ0ZXJSZW5kZXJpbmcoKSB7XG5cdFx0bGV0IHN1YlNlY3Rpb25zOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdO1xuXHRcdGlmICh0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLmdldFVzZUljb25UYWJCYXIoKSkge1xuXHRcdFx0Y29uc3Qgc2VjdGlvbnMgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLmdldFNlY3Rpb25zKCk7XG5cdFx0XHRmb3IgKGNvbnN0IHNlY3Rpb24gb2Ygc2VjdGlvbnMpIHtcblx0XHRcdFx0c3ViU2VjdGlvbnMgPSBzZWN0aW9uLmdldFN1YlNlY3Rpb25zKCk7XG5cdFx0XHRcdHRoaXMuY2hlY2tTZWN0aW9uc0Zvck5vblJlc3BvbnNpdmVUYWJsZShzdWJTZWN0aW9ucyk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHN1YlNlY3Rpb25zID0gdGhpcy5fZ2V0QWxsU3ViU2VjdGlvbnMoKTtcblx0XHRcdHRoaXMuY2hlY2tTZWN0aW9uc0Zvck5vblJlc3BvbnNpdmVUYWJsZShzdWJTZWN0aW9ucyk7XG5cdFx0fVxuXHR9XG5cblx0X29uQmVmb3JlQmluZGluZyhvQ29udGV4dDogYW55LCBtUGFyYW1ldGVyczogYW55KSB7XG5cdFx0Ly8gVE9ETzogd2Ugc2hvdWxkIGNoZWNrIGhvdyB0aGlzIGNvbWVzIHRvZ2V0aGVyIHdpdGggdGhlIHRyYW5zYWN0aW9uIGhlbHBlciwgc2FtZSB0byB0aGUgY2hhbmdlIGluIHRoZSBhZnRlckJpbmRpbmdcblx0XHRjb25zdCBhVGFibGVzID0gdGhpcy5fZmluZFRhYmxlcygpLFxuXHRcdFx0b09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLFxuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdG9JbnRlcm5hbE1vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWwsXG5cdFx0XHRhQmF0Y2hHcm91cHMgPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJiYXRjaEdyb3Vwc1wiKSxcblx0XHRcdGlWaWV3TGV2ZWwgPSAodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLnZpZXdMZXZlbDtcblx0XHRsZXQgb0Zhc3RDcmVhdGlvblJvdztcblx0XHRhQmF0Y2hHcm91cHMucHVzaChcIiRhdXRvXCIpO1xuXHRcdGlmIChtUGFyYW1ldGVycy5iRHJhZnROYXZpZ2F0aW9uICE9PSB0cnVlKSB7XG5cdFx0XHR0aGlzLl9jbG9zZVNpZGVDb250ZW50KCk7XG5cdFx0fVxuXHRcdGNvbnN0IG9wQ29udGV4dCA9IG9PYmplY3RQYWdlLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dDtcblx0XHRpZiAoXG5cdFx0XHRvcENvbnRleHQgJiZcblx0XHRcdG9wQ29udGV4dC5oYXNQZW5kaW5nQ2hhbmdlcygpICYmXG5cdFx0XHQhYUJhdGNoR3JvdXBzLnNvbWUob3BDb250ZXh0LmdldE1vZGVsKCkuaGFzUGVuZGluZ0NoYW5nZXMuYmluZChvcENvbnRleHQuZ2V0TW9kZWwoKSkpXG5cdFx0KSB7XG5cdFx0XHQvKiBcdEluIGNhc2UgdGhlcmUgYXJlIHBlbmRpbmcgY2hhbmdlcyBmb3IgdGhlIGNyZWF0aW9uIHJvdyBhbmQgbm8gb3RoZXJzIHdlIG5lZWQgdG8gcmVzZXQgdGhlIGNoYW5nZXNcblx0XHRcdFx0XHRcdFx0XHRUT0RPOiB0aGlzIGlzIGp1c3QgYSBxdWljayBzb2x1dGlvbiwgdGhpcyBuZWVkcyB0byBiZSByZXdvcmtlZFxuXHRcdFx0XHRcdFx0XHRcdCovXG5cblx0XHRcdG9wQ29udGV4dC5nZXRCaW5kaW5nKCkucmVzZXRDaGFuZ2VzKCk7XG5cdFx0fVxuXG5cdFx0Ly8gRm9yIG5vdyB3ZSBoYXZlIHRvIHNldCB0aGUgYmluZGluZyBjb250ZXh0IHRvIG51bGwgZm9yIGV2ZXJ5IGZhc3QgY3JlYXRpb24gcm93XG5cdFx0Ly8gVE9ETzogR2V0IHJpZCBvZiB0aGlzIGNvZGluZyBvciBtb3ZlIGl0IHRvIGFub3RoZXIgbGF5ZXIgLSB0byBiZSBkaXNjdXNzZWQgd2l0aCBNREMgYW5kIG1vZGVsXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhVGFibGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRvRmFzdENyZWF0aW9uUm93ID0gYVRhYmxlc1tpXS5nZXRDcmVhdGlvblJvdygpO1xuXHRcdFx0aWYgKG9GYXN0Q3JlYXRpb25Sb3cpIHtcblx0XHRcdFx0b0Zhc3RDcmVhdGlvblJvdy5zZXRCaW5kaW5nQ29udGV4dChudWxsKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBTY3JvbGwgdG8gcHJlc2VudCBTZWN0aW9uIHNvIHRoYXQgYmluZGluZ3MgYXJlIGVuYWJsZWQgZHVyaW5nIG5hdmlnYXRpb24gdGhyb3VnaCBwYWdpbmF0b3IgYnV0dG9ucywgYXMgdGhlcmUgaXMgbm8gdmlldyByZXJlbmRlcmluZy9yZWJpbmRcblx0XHRjb25zdCBmblNjcm9sbFRvUHJlc2VudFNlY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRpZiAoIShvT2JqZWN0UGFnZSBhcyBhbnkpLmlzRmlyc3RSZW5kZXJpbmcoKSAmJiAhbVBhcmFtZXRlcnMuYlBlcnNpc3RPUFNjcm9sbCkge1xuXHRcdFx0XHRvT2JqZWN0UGFnZS5zZXRTZWxlY3RlZFNlY3Rpb24obnVsbCBhcyBhbnkpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0b09iamVjdFBhZ2UuYXR0YWNoRXZlbnRPbmNlKFwibW9kZWxDb250ZXh0Q2hhbmdlXCIsIGZuU2Nyb2xsVG9QcmVzZW50U2VjdGlvbik7XG5cblx0XHQvLyBpZiB0aGUgc3RydWN0dXJlIG9mIHRoZSBPYmplY3RQYWdlTGF5b3V0IGlzIGNoYW5nZWQgdGhlbiBzY3JvbGwgdG8gcHJlc2VudCBTZWN0aW9uXG5cdFx0Ly8gRklYTUUgSXMgdGhpcyByZWFsbHkgd29ya2luZyBhcyBpbnRlbmRlZCA/IEluaXRpYWxseSB0aGlzIHdhcyBvbkJlZm9yZVJlbmRlcmluZywgYnV0IG5ldmVyIHRyaWdnZXJlZCBvbkJlZm9yZVJlbmRlcmluZyBiZWNhdXNlIGl0IHdhcyByZWdpc3RlcmVkIGFmdGVyIGl0XG5cdFx0Y29uc3Qgb0RlbGVnYXRlT25CZWZvcmUgPSB7XG5cdFx0XHRvbkFmdGVyUmVuZGVyaW5nOiBmblNjcm9sbFRvUHJlc2VudFNlY3Rpb25cblx0XHR9O1xuXHRcdG9PYmplY3RQYWdlLmFkZEV2ZW50RGVsZWdhdGUob0RlbGVnYXRlT25CZWZvcmUsIHRoaXMpO1xuXHRcdHRoaXMucGFnZVJlYWR5LmF0dGFjaEV2ZW50T25jZShcInBhZ2VSZWFkeVwiLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRvT2JqZWN0UGFnZS5yZW1vdmVFdmVudERlbGVnYXRlKG9EZWxlZ2F0ZU9uQmVmb3JlKTtcblx0XHR9KTtcblxuXHRcdC8vU2V0IHRoZSBCaW5kaW5nIGZvciBQYWdpbmF0b3JzIHVzaW5nIExpc3RCaW5kaW5nIElEXG5cdFx0aWYgKGlWaWV3TGV2ZWwgPiAxKSB7XG5cdFx0XHRsZXQgb0JpbmRpbmcgPSBtUGFyYW1ldGVycyAmJiBtUGFyYW1ldGVycy5saXN0QmluZGluZztcblx0XHRcdGNvbnN0IG9QYWdpbmF0b3JDdXJyZW50Q29udGV4dCA9IG9JbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5KFwiL3BhZ2luYXRvckN1cnJlbnRDb250ZXh0XCIpO1xuXHRcdFx0aWYgKG9QYWdpbmF0b3JDdXJyZW50Q29udGV4dCkge1xuXHRcdFx0XHRjb25zdCBvQmluZGluZ1RvVXNlID0gb1BhZ2luYXRvckN1cnJlbnRDb250ZXh0LmdldEJpbmRpbmcoKTtcblx0XHRcdFx0dGhpcy5wYWdpbmF0b3IuaW5pdGlhbGl6ZShvQmluZGluZ1RvVXNlLCBvUGFnaW5hdG9yQ3VycmVudENvbnRleHQpO1xuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9wYWdpbmF0b3JDdXJyZW50Q29udGV4dFwiLCBudWxsKTtcblx0XHRcdH0gZWxzZSBpZiAob0JpbmRpbmcpIHtcblx0XHRcdFx0aWYgKG9CaW5kaW5nLmlzQShcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCIpKSB7XG5cdFx0XHRcdFx0dGhpcy5wYWdpbmF0b3IuaW5pdGlhbGl6ZShvQmluZGluZywgb0NvbnRleHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIGlmIHRoZSBiaW5kaW5nIHR5cGUgaXMgbm90IE9EYXRhTGlzdEJpbmRpbmcgYmVjYXVzZSBvZiBhIGRlZXBsaW5rIG5hdmlnYXRpb24gb3IgYSByZWZyZXNoIG9mIHRoZSBwYWdlXG5cdFx0XHRcdFx0Ly8gd2UgbmVlZCB0byBjcmVhdGUgaXRcblx0XHRcdFx0XHRjb25zdCBzQmluZGluZ1BhdGggPSBvQmluZGluZy5nZXRQYXRoKCk7XG5cdFx0XHRcdFx0aWYgKC9cXChbXildKlxcKSQvLnRlc3Qoc0JpbmRpbmdQYXRoKSkge1xuXHRcdFx0XHRcdFx0Ly8gVGhlIGN1cnJlbnQgYmluZGluZyBwYXRoIGVuZHMgd2l0aCAoeHh4KSwgc28gd2UgY3JlYXRlIHRoZSBsaXN0QmluZGluZyBieSByZW1vdmluZyAoeHh4KVxuXHRcdFx0XHRcdFx0Y29uc3Qgc0xpc3RCaW5kaW5nUGF0aCA9IHNCaW5kaW5nUGF0aC5yZXBsYWNlKC9cXChbXildKlxcKSQvLCBcIlwiKTtcblx0XHRcdFx0XHRcdG9CaW5kaW5nID0gbmV3IChPRGF0YUxpc3RCaW5kaW5nIGFzIGFueSkob0JpbmRpbmcub01vZGVsLCBzTGlzdEJpbmRpbmdQYXRoKTtcblx0XHRcdFx0XHRcdGNvbnN0IF9zZXRMaXN0QmluZGluZ0FzeW5jID0gKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRpZiAob0JpbmRpbmcuZ2V0Q29udGV4dHMoKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5wYWdpbmF0b3IuaW5pdGlhbGl6ZShvQmluZGluZywgb0NvbnRleHQpO1xuXHRcdFx0XHRcdFx0XHRcdG9CaW5kaW5nLmRldGFjaEV2ZW50KFwiY2hhbmdlXCIsIF9zZXRMaXN0QmluZGluZ0FzeW5jKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0b0JpbmRpbmcuZ2V0Q29udGV4dHMoMCk7XG5cdFx0XHRcdFx0XHRvQmluZGluZy5hdHRhY2hFdmVudChcImNoYW5nZVwiLCBfc2V0TGlzdEJpbmRpbmdBc3luYyk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIFRoZSBjdXJyZW50IGJpbmRpbmcgZG9lc24ndCBlbmQgd2l0aCAoeHh4KSAtLT4gdGhlIGxhc3Qgc2VnbWVudCBpcyBhIDEtMSBuYXZpZ2F0aW9uLCBzbyB3ZSBkb24ndCBkaXNwbGF5IHRoZSBwYWdpbmF0b3Jcblx0XHRcdFx0XHRcdHRoaXMucGFnaW5hdG9yLmluaXRpYWxpemUodW5kZWZpbmVkKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAob09iamVjdFBhZ2UuZ2V0RW5hYmxlTGF6eUxvYWRpbmcoKSkge1xuXHRcdFx0Y29uc3QgYVNlY3Rpb25zID0gb09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKTtcblx0XHRcdGNvbnN0IGJVc2VJY29uVGFiQmFyID0gb09iamVjdFBhZ2UuZ2V0VXNlSWNvblRhYkJhcigpO1xuXHRcdFx0bGV0IGlTa2lwID0gMjtcblx0XHRcdGNvbnN0IGJJc0luRWRpdE1vZGUgPSBvT2JqZWN0UGFnZS5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIik7XG5cdFx0XHRjb25zdCBiRWRpdGFibGVIZWFkZXIgPSAodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLmVkaXRhYmxlSGVhZGVyQ29udGVudDtcblx0XHRcdGZvciAobGV0IGlTZWN0aW9uID0gMDsgaVNlY3Rpb24gPCBhU2VjdGlvbnMubGVuZ3RoOyBpU2VjdGlvbisrKSB7XG5cdFx0XHRcdGNvbnN0IG9TZWN0aW9uID0gYVNlY3Rpb25zW2lTZWN0aW9uXTtcblx0XHRcdFx0Y29uc3QgYVN1YlNlY3Rpb25zID0gb1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKTtcblx0XHRcdFx0Zm9yIChsZXQgaVN1YlNlY3Rpb24gPSAwOyBpU3ViU2VjdGlvbiA8IGFTdWJTZWN0aW9ucy5sZW5ndGg7IGlTdWJTZWN0aW9uKyssIGlTa2lwLS0pIHtcblx0XHRcdFx0XHQvLyBJbiBJY29uVGFiQmFyIG1vZGUga2VlcCB0aGUgc2Vjb25kIHNlY3Rpb24gYm91bmQgaWYgdGhlcmUgaXMgYW4gZWRpdGFibGUgaGVhZGVyIGFuZCB3ZSBhcmUgc3dpdGNoaW5nIHRvIGRpc3BsYXkgbW9kZVxuXHRcdFx0XHRcdGlmIChpU2tpcCA8IDEgfHwgKGJVc2VJY29uVGFiQmFyICYmIChpU2VjdGlvbiA+IDEgfHwgKGlTZWN0aW9uID09PSAxICYmICFiRWRpdGFibGVIZWFkZXIgJiYgIWJJc0luRWRpdE1vZGUpKSkpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG9TdWJTZWN0aW9uID0gYVN1YlNlY3Rpb25zW2lTdWJTZWN0aW9uXTtcblx0XHRcdFx0XHRcdGlmIChvU3ViU2VjdGlvbi5kYXRhKCkuaXNWaXNpYmlsaXR5RHluYW1pYyAhPT0gXCJ0cnVlXCIpIHtcblx0XHRcdFx0XHRcdFx0b1N1YlNlY3Rpb24uc2V0QmluZGluZ0NvbnRleHQobnVsbCBhcyBhbnkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICh0aGlzLnBsYWNlaG9sZGVyLmlzUGxhY2Vob2xkZXJFbmFibGVkKCkgJiYgbVBhcmFtZXRlcnMuc2hvd1BsYWNlaG9sZGVyKSB7XG5cdFx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdFx0Y29uc3Qgb05hdkNvbnRhaW5lciA9IChvVmlldy5nZXRQYXJlbnQoKSBhcyBhbnkpLm9Db250YWluZXIuZ2V0UGFyZW50KCk7XG5cdFx0XHRpZiAob05hdkNvbnRhaW5lcikge1xuXHRcdFx0XHRvTmF2Q29udGFpbmVyLnNob3dQbGFjZWhvbGRlcih7fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X2dldEZpcnN0Q2xpY2thYmxlRWxlbWVudChvT2JqZWN0UGFnZTogYW55KSB7XG5cdFx0bGV0IG9GaXJzdENsaWNrYWJsZUVsZW1lbnQ7XG5cdFx0Y29uc3QgYUFjdGlvbnMgPSBvT2JqZWN0UGFnZS5nZXRIZWFkZXJUaXRsZSgpICYmIG9PYmplY3RQYWdlLmdldEhlYWRlclRpdGxlKCkuZ2V0QWN0aW9ucygpO1xuXHRcdGlmIChhQWN0aW9ucyAmJiBhQWN0aW9ucy5sZW5ndGgpIHtcblx0XHRcdG9GaXJzdENsaWNrYWJsZUVsZW1lbnQgPSBhQWN0aW9ucy5maW5kKGZ1bmN0aW9uIChvQWN0aW9uOiBhbnkpIHtcblx0XHRcdFx0Ly8gRHVlIHRvIHRoZSBsZWZ0IGFsaWdubWVudCBvZiB0aGUgRHJhZnQgc3dpdGNoIGFuZCB0aGUgY29sbGFib3JhdGl2ZSBkcmFmdCBhdmF0YXIgY29udHJvbHNcblx0XHRcdFx0Ly8gdGhlcmUgaXMgYSBUb29sYmFyU3BhY2VyIGluIHRoZSBhY3Rpb25zIGFnZ3JlZ2F0aW9uIHdoaWNoIHdlIG5lZWQgdG8gZXhjbHVkZSBoZXJlIVxuXHRcdFx0XHQvLyBEdWUgdG8gdGhlIEFDQyByZXBvcnQsIHdlIGFsc28gbmVlZCBub3QgdG8gY2hlY2sgZm9yIHRoZSBJbnZpc2libGVUZXh0IGVsZW1lbnRzXG5cdFx0XHRcdGlmIChvQWN0aW9uLmlzQShcInNhcC5mZS5tYWNyb3Muc2hhcmUuU2hhcmVBUElcIikpIHtcblx0XHRcdFx0XHQvLyBzaW5jZSBTaGFyZUFQSSBkb2VzIG5vdCBoYXZlIGEgZGlzYWJsZSBwcm9wZXJ0eVxuXHRcdFx0XHRcdC8vIGhlbmNlIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2hlY2sgaWYgaXQgaXMgZGlzYmFsZWQgb3Igbm90XG5cdFx0XHRcdFx0cmV0dXJuIG9BY3Rpb24uZ2V0VmlzaWJsZSgpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCFvQWN0aW9uLmlzQShcInNhcC51aS5jb3JlLkludmlzaWJsZVRleHRcIikgJiYgIW9BY3Rpb24uaXNBKFwic2FwLm0uVG9vbGJhclNwYWNlclwiKSkge1xuXHRcdFx0XHRcdHJldHVybiBvQWN0aW9uLmdldFZpc2libGUoKSAmJiBvQWN0aW9uLmdldEVuYWJsZWQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBvRmlyc3RDbGlja2FibGVFbGVtZW50O1xuXHR9XG5cblx0X2dldEZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZEZyb21TdWJTZWN0aW9uKGFTdWJTZWN0aW9uczogYW55KSB7XG5cdFx0aWYgKGFTdWJTZWN0aW9ucykge1xuXHRcdFx0Zm9yIChsZXQgc3ViU2VjdGlvbiA9IDA7IHN1YlNlY3Rpb24gPCBhU3ViU2VjdGlvbnMubGVuZ3RoOyBzdWJTZWN0aW9uKyspIHtcblx0XHRcdFx0Y29uc3QgYUJsb2NrcyA9IGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXS5nZXRCbG9ja3MoKTtcblxuXHRcdFx0XHRpZiAoYUJsb2Nrcykge1xuXHRcdFx0XHRcdGZvciAobGV0IGJsb2NrID0gMDsgYmxvY2sgPCBhQmxvY2tzLmxlbmd0aDsgYmxvY2srKykge1xuXHRcdFx0XHRcdFx0bGV0IGFGb3JtQ29udGFpbmVycztcblxuXHRcdFx0XHRcdFx0aWYgKGFCbG9ja3NbYmxvY2tdLmlzQShcInNhcC51aS5sYXlvdXQuZm9ybS5Gb3JtXCIpKSB7XG5cdFx0XHRcdFx0XHRcdGFGb3JtQ29udGFpbmVycyA9IGFCbG9ja3NbYmxvY2tdLmdldEZvcm1Db250YWluZXJzKCk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRcdFx0XHRhQmxvY2tzW2Jsb2NrXS5nZXRDb250ZW50ICYmXG5cdFx0XHRcdFx0XHRcdGFCbG9ja3NbYmxvY2tdLmdldENvbnRlbnQoKSAmJlxuXHRcdFx0XHRcdFx0XHRhQmxvY2tzW2Jsb2NrXS5nZXRDb250ZW50KCkuaXNBKFwic2FwLnVpLmxheW91dC5mb3JtLkZvcm1cIilcblx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRhRm9ybUNvbnRhaW5lcnMgPSBhQmxvY2tzW2Jsb2NrXS5nZXRDb250ZW50KCkuZ2V0Rm9ybUNvbnRhaW5lcnMoKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKGFGb3JtQ29udGFpbmVycykge1xuXHRcdFx0XHRcdFx0XHRmb3IgKGxldCBmb3JtQ29udGFpbmVyID0gMDsgZm9ybUNvbnRhaW5lciA8IGFGb3JtQ29udGFpbmVycy5sZW5ndGg7IGZvcm1Db250YWluZXIrKykge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGFGb3JtRWxlbWVudHMgPSBhRm9ybUNvbnRhaW5lcnNbZm9ybUNvbnRhaW5lcl0uZ2V0Rm9ybUVsZW1lbnRzKCk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGFGb3JtRWxlbWVudHMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGZvciAobGV0IGZvcm1FbGVtZW50ID0gMDsgZm9ybUVsZW1lbnQgPCBhRm9ybUVsZW1lbnRzLmxlbmd0aDsgZm9ybUVsZW1lbnQrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBhRmllbGRzID0gYUZvcm1FbGVtZW50c1tmb3JtRWxlbWVudF0uZ2V0RmllbGRzKCk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gVGhlIGZpcnN0IGZpZWxkIGlzIG5vdCBuZWNlc3NhcmlseSBhbiBJbnB1dEJhc2UgKGUuZy4gY291bGQgYmUgYSBUZXh0KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTbyB3ZSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgaXQgaGFzIGEgZ2V0UmVxdWlyZWQgbWV0aG9kXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFGaWVsZHNbMF0uZ2V0UmVxdWlyZWQgJiYgYUZpZWxkc1swXS5nZXRSZXF1aXJlZCgpICYmICFhRmllbGRzWzBdLmdldFZhbHVlKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBhRmllbGRzWzBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRMb2cuZGVidWcoYEVycm9yIHdoZW4gc2VhcmNoaW5nIGZvciBtYW5kYW90cnkgZW1wdHkgZmllbGQ6ICR7ZXJyb3J9YCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdF91cGRhdGVGb2N1c0luRWRpdE1vZGUoYVN1YlNlY3Rpb25zOiBhbnkpIHtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cblx0XHRjb25zdCBvTWFuZGF0b3J5RmllbGQgPSB0aGlzLl9nZXRGaXJzdEVtcHR5TWFuZGF0b3J5RmllbGRGcm9tU3ViU2VjdGlvbihhU3ViU2VjdGlvbnMpO1xuXHRcdGxldCBvRmllbGRUb0ZvY3VzOiBhbnk7XG5cdFx0aWYgKG9NYW5kYXRvcnlGaWVsZCkge1xuXHRcdFx0b0ZpZWxkVG9Gb2N1cyA9IG9NYW5kYXRvcnlGaWVsZC5jb250ZW50LmdldENvbnRlbnRFZGl0KClbMF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9GaWVsZFRvRm9jdXMgPSAob09iamVjdFBhZ2UgYXMgYW55KS5fZ2V0Rmlyc3RFZGl0YWJsZUlucHV0KCkgfHwgdGhpcy5fZ2V0Rmlyc3RDbGlja2FibGVFbGVtZW50KG9PYmplY3RQYWdlKTtcblx0XHR9XG5cblx0XHRpZiAob0ZpZWxkVG9Gb2N1cykge1xuXHRcdFx0c2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdC8vIFdlIHNldCB0aGUgZm9jdXMgaW4gYSB0aW1lZW91dCwgb3RoZXJ3aXNlIHRoZSBmb2N1cyBzb21ldGltZXMgZ29lcyB0byB0aGUgVGFiQmFyXG5cdFx0XHRcdG9GaWVsZFRvRm9jdXMuZm9jdXMoKTtcblx0XHRcdH0sIDApO1xuXHRcdH1cblx0fVxuXG5cdF9oYW5kbGVTdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0KG9FdmVudDogYW55KSB7XG5cdFx0Y29uc3Qgb1N1YlNlY3Rpb24gPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwic3ViU2VjdGlvblwiKTtcblx0XHRvU3ViU2VjdGlvbi5zZXRCaW5kaW5nQ29udGV4dCh1bmRlZmluZWQpO1xuXHR9XG5cblx0X29uQmFja05hdmlnYXRpb25JbkRyYWZ0KG9Db250ZXh0OiBhbnkpIHtcblx0XHR0aGlzLm1lc3NhZ2VIYW5kbGVyLnJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdGlmICh0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvdXRlclByb3h5KCkuY2hlY2tJZkJhY2tIYXNTYW1lQ29udGV4dCgpKSB7XG5cdFx0XHQvLyBCYWNrIG5hdiB3aWxsIGtlZXAgdGhlIHNhbWUgY29udGV4dCAtLT4gbm8gbmVlZCB0byBkaXNwbGF5IHRoZSBkaWFsb2dcblx0XHRcdGhpc3RvcnkuYmFjaygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkcmFmdC5wcm9jZXNzRGF0YUxvc3NPckRyYWZ0RGlzY2FyZENvbmZpcm1hdGlvbihcblx0XHRcdFx0ZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdGhpc3RvcnkuYmFjaygpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRGdW5jdGlvbi5wcm90b3R5cGUsXG5cdFx0XHRcdG9Db250ZXh0LFxuXHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0ZHJhZnQuTmF2aWdhdGlvblR5cGUuQmFja05hdmlnYXRpb25cblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRfb25BZnRlckJpbmRpbmcoaW5wdXRCaW5kaW5nQ29udGV4dDogYW55LCBtUGFyYW1ldGVyczogYW55KSB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGNvbnN0IGFUYWJsZXMgPSB0aGlzLl9maW5kVGFibGVzKCk7XG5cblx0XHR0aGlzLl9zaWRlRWZmZWN0cy5jbGVhckZpZWxkR3JvdXBzVmFsaWRpdHkoKTtcblxuXHRcdC8vIFRPRE86IHRoaXMgaXMgb25seSBhIHRlbXAgc29sdXRpb24gYXMgbG9uZyBhcyB0aGUgbW9kZWwgZml4IHRoZSBjYWNoZSBpc3N1ZSBhbmQgd2UgdXNlIHRoaXMgYWRkaXRpb25hbFxuXHRcdC8vIGJpbmRpbmcgd2l0aCBvd25SZXF1ZXN0XG5cdFx0Y29uc3QgYmluZGluZ0NvbnRleHQgPSBvT2JqZWN0UGFnZS5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQ7XG5cblx0XHRsZXQgYUlCTkFjdGlvbnM6IGFueVtdID0gW107XG5cdFx0b09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvU2VjdGlvbjogYW55KSB7XG5cdFx0XHRvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpLmZvckVhY2goZnVuY3Rpb24gKG9TdWJTZWN0aW9uOiBhbnkpIHtcblx0XHRcdFx0YUlCTkFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9TdWJTZWN0aW9uLCBhSUJOQWN0aW9ucyk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdC8vIEFzc2lnbiBpbnRlcm5hbCBiaW5kaW5nIGNvbnRleHRzIHRvIG9Gb3JtQ29udGFpbmVyOlxuXHRcdC8vIDEuIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBhc3NpZ24gdGhlIGludGVybmFsIGJpbmRpbmcgY29udGV4dCB0byB0aGUgWE1MIGZyYWdtZW50XG5cdFx0Ly8gKEZvcm1Db250YWluZXIuZnJhZ21lbnQueG1sKSB5ZXQgLSBpdCBpcyB1c2VkIGFscmVhZHkgZm9yIHRoZSBkYXRhLXN0cnVjdHVyZS5cblx0XHQvLyAyLiBBbm90aGVyIHByb2JsZW0gaXMsIHRoYXQgRm9ybUNvbnRhaW5lcnMgYXNzaWduZWQgdG8gYSAnTW9yZUJsb2NrJyBkb2VzIG5vdCBoYXZlIGFuXG5cdFx0Ly8gaW50ZXJuYWwgbW9kZWwgY29udGV4dCBhdCBhbGwuXG5cblx0XHRhVGFibGVzLmZvckVhY2goZnVuY3Rpb24gKG9UYWJsZTogYW55KSB7XG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRcdGlmIChvSW50ZXJuYWxNb2RlbENvbnRleHQpIHtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY3JlYXRpb25Sb3dGaWVsZFZhbGlkaXR5XCIsIHt9KTtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY3JlYXRpb25Sb3dDdXN0b21WYWxpZGl0eVwiLCB7fSk7XG5cblx0XHRcdFx0YUlCTkFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9UYWJsZSwgYUlCTkFjdGlvbnMpO1xuXG5cdFx0XHRcdC8vIHRlbXBvcmFyeSB3b3JrYXJvdW5kIGZvciBCQ1A6IDIwODAyMTgwMDRcblx0XHRcdFx0Ly8gTmVlZCB0byBmaXggd2l0aCBCTEk6IEZJT1JJVEVDSFAxLTE1Mjc0XG5cdFx0XHRcdC8vIG9ubHkgZm9yIGVkaXQgbW9kZSwgd2UgY2xlYXIgdGhlIHRhYmxlIGNhY2hlXG5cdFx0XHRcdC8vIFdvcmthcm91bmQgc3RhcnRzIGhlcmUhIVxuXHRcdFx0XHRjb25zdCBvVGFibGVSb3dCaW5kaW5nID0gb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRcdFx0aWYgKG9UYWJsZVJvd0JpbmRpbmcpIHtcblx0XHRcdFx0XHRpZiAoTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKG9UYWJsZVJvd0JpbmRpbmcuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSkpIHtcblx0XHRcdFx0XHRcdC8vIGFwcGx5IGZvciBib3RoIGVkaXQgYW5kIGRpc3BsYXkgbW9kZSBpbiBzdGlja3lcblx0XHRcdFx0XHRcdG9UYWJsZVJvd0JpbmRpbmcucmVtb3ZlQ2FjaGVzQW5kTWVzc2FnZXMoXCJcIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIFdvcmthcm91bmQgZW5kcyBoZXJlISFcblxuXHRcdFx0XHQvLyBDbGVhciB0aGUgc2VsZWN0aW9uIGluIHRoZSB0YWJsZSBhbmQgdXBkYXRlIGFjdGlvbiBlbmFibGVtZW50IGFjY29yZGluZ2x5XG5cdFx0XHRcdC8vIFdpbGwgdG8gYmUgZml4ZWQgd2l0aCBCTEk6IEZJT1JJVEVDSFAxLTI0MzE4XG5cdFx0XHRcdGNvbnN0IG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAgPSBKU09OLnBhcnNlKFxuXHRcdFx0XHRcdENvbW1vbkhlbHBlci5wYXJzZUN1c3RvbURhdGEoRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGEob1RhYmxlLCBcIm9wZXJhdGlvbkF2YWlsYWJsZU1hcFwiKSlcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRBY3Rpb25SdW50aW1lLnNldEFjdGlvbkVuYWJsZW1lbnQob0ludGVybmFsTW9kZWxDb250ZXh0LCBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwLCBbXSwgXCJ0YWJsZVwiKTtcblxuXHRcdFx0XHRvVGFibGUuY2xlYXJTZWxlY3Rpb24oKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRDb21tb25VdGlscy5nZXRTZW1hbnRpY1RhcmdldHNGcm9tUGFnZU1vZGVsKHRoaXMsIFwiX3BhZ2VNb2RlbFwiKTtcblx0XHQvL1JldHJpZXZlIE9iamVjdCBQYWdlIGhlYWRlciBhY3Rpb25zIGZyb20gT2JqZWN0IFBhZ2UgdGl0bGUgY29udHJvbFxuXHRcdGNvbnN0IG9PYmplY3RQYWdlVGl0bGUgPSBvT2JqZWN0UGFnZS5nZXRIZWFkZXJUaXRsZSgpIGFzIE9iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGU7XG5cdFx0bGV0IGFJQk5IZWFkZXJBY3Rpb25zOiBhbnlbXSA9IFtdO1xuXHRcdGFJQk5IZWFkZXJBY3Rpb25zID0gQ29tbW9uVXRpbHMuZ2V0SUJOQWN0aW9ucyhvT2JqZWN0UGFnZVRpdGxlLCBhSUJOSGVhZGVyQWN0aW9ucyk7XG5cdFx0YUlCTkFjdGlvbnMgPSBhSUJOQWN0aW9ucy5jb25jYXQoYUlCTkhlYWRlckFjdGlvbnMpO1xuXHRcdENvbW1vblV0aWxzLnVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5KGFJQk5BY3Rpb25zLCB0aGlzLmdldFZpZXcoKSk7XG5cblx0XHRsZXQgb01vZGVsOiBhbnksIG9GaW5hbFVJU3RhdGU6IGFueTtcblxuXHRcdC8vIHRoaXMgc2hvdWxkIG5vdCBiZSBuZWVkZWQgYXQgdGhlIGFsbFxuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSBvVGFibGVcblx0XHQgKi9cblx0XHRjb25zdCBoYW5kbGVUYWJsZU1vZGlmaWNhdGlvbnMgPSAob1RhYmxlOiBhbnkpID0+IHtcblx0XHRcdGNvbnN0IG9CaW5kaW5nID0gdGhpcy5fZ2V0VGFibGVCaW5kaW5nKG9UYWJsZSksXG5cdFx0XHRcdGZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cyA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRUYWJsZUhlbHBlci5lbmFibGVGYXN0Q3JlYXRpb25Sb3coXG5cdFx0XHRcdFx0XHRvVGFibGUuZ2V0Q3JlYXRpb25Sb3coKSxcblx0XHRcdFx0XHRcdG9CaW5kaW5nLmdldFBhdGgoKSxcblx0XHRcdFx0XHRcdG9CaW5kaW5nLmdldENvbnRleHQoKSxcblx0XHRcdFx0XHRcdG9Nb2RlbCxcblx0XHRcdFx0XHRcdG9GaW5hbFVJU3RhdGVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRpZiAoIW9CaW5kaW5nKSB7XG5cdFx0XHRcdExvZy5lcnJvcihgRXhwZWN0ZWQgYmluZGluZyBtaXNzaW5nIGZvciB0YWJsZTogJHtvVGFibGUuZ2V0SWQoKX1gKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAob0JpbmRpbmcub0NvbnRleHQpIHtcblx0XHRcdFx0Zm5IYW5kbGVUYWJsZVBhdGNoRXZlbnRzKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBmbkhhbmRsZUNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRpZiAob0JpbmRpbmcub0NvbnRleHQpIHtcblx0XHRcdFx0XHRcdGZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cygpO1xuXHRcdFx0XHRcdFx0b0JpbmRpbmcuZGV0YWNoQ2hhbmdlKGZuSGFuZGxlQ2hhbmdlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHRcdG9CaW5kaW5nLmF0dGFjaENoYW5nZShmbkhhbmRsZUNoYW5nZSk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGlmIChiaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0b01vZGVsID0gYmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKTtcblxuXHRcdFx0Ly8gQ29tcHV0ZSBFZGl0IE1vZGVcblx0XHRcdG9GaW5hbFVJU3RhdGUgPSB0aGlzLmVkaXRGbG93LmNvbXB1dGVFZGl0TW9kZShiaW5kaW5nQ29udGV4dCk7XG5cblx0XHRcdGlmIChNb2RlbEhlbHBlci5pc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZChvTW9kZWwuZ2V0TWV0YU1vZGVsKCkpKSB7XG5cdFx0XHRcdG9GaW5hbFVJU3RhdGVcblx0XHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAodGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpKSB7XG5cdFx0XHRcdFx0XHRcdGNvbm5lY3QodGhpcy5nZXRWaWV3KCkpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChpc0Nvbm5lY3RlZCh0aGlzLmdldFZpZXcoKSkpIHtcblx0XHRcdFx0XHRcdFx0ZGlzY29ubmVjdCh0aGlzLmdldFZpZXcoKSk7IC8vIENsZWFudXAgY29sbGFib3JhdGlvbiBjb25uZWN0aW9uIGluIGNhc2Ugd2Ugc3dpdGNoIHRvIGFub3RoZXIgZWxlbWVudCAoZS5nLiBpbiBGQ0wpXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSB3YWl0aW5nIGZvciB0aGUgZmluYWwgVUkgU3RhdGVcIiwgb0Vycm9yKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdC8vIHVwZGF0ZSByZWxhdGVkIGFwcHNcblx0XHRcdHRoaXMuX3VwZGF0ZVJlbGF0ZWRBcHBzKCk7XG5cblx0XHRcdC8vQXR0YWNoIHRoZSBwYXRjaCBzZW50IGFuZCBwYXRjaCBjb21wbGV0ZWQgZXZlbnQgdG8gdGhlIG9iamVjdCBwYWdlIGJpbmRpbmcgc28gdGhhdCB3ZSBjYW4gcmVhY3Rcblx0XHRcdGNvbnN0IG9CaW5kaW5nID0gKGJpbmRpbmdDb250ZXh0LmdldEJpbmRpbmcgJiYgYmluZGluZ0NvbnRleHQuZ2V0QmluZGluZygpKSB8fCBiaW5kaW5nQ29udGV4dDtcblxuXHRcdFx0Ly8gQXR0YWNoIHRoZSBldmVudCBoYW5kbGVyIG9ubHkgb25jZSB0byB0aGUgc2FtZSBiaW5kaW5nXG5cdFx0XHRpZiAodGhpcy5jdXJyZW50QmluZGluZyAhPT0gb0JpbmRpbmcpIHtcblx0XHRcdFx0b0JpbmRpbmcuYXR0YWNoRXZlbnQoXCJwYXRjaFNlbnRcIiwge30sIHRoaXMuZWRpdEZsb3cuaGFuZGxlUGF0Y2hTZW50LCB0aGlzKTtcblx0XHRcdFx0dGhpcy5jdXJyZW50QmluZGluZyA9IG9CaW5kaW5nO1xuXHRcdFx0fVxuXG5cdFx0XHRhVGFibGVzLmZvckVhY2goZnVuY3Rpb24gKG9UYWJsZTogYW55KSB7XG5cdFx0XHRcdC8vIGFjY2VzcyBiaW5kaW5nIG9ubHkgYWZ0ZXIgdGFibGUgaXMgYm91bmRcblx0XHRcdFx0VGFibGVVdGlscy53aGVuQm91bmQob1RhYmxlKVxuXHRcdFx0XHRcdC50aGVuKGhhbmRsZVRhYmxlTW9kaWZpY2F0aW9ucylcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSB3YWl0aW5nIGZvciB0aGUgdGFibGUgdG8gYmUgYm91bmRcIiwgb0Vycm9yKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBzaG91bGQgYmUgY2FsbGVkIG9ubHkgYWZ0ZXIgYmluZGluZyBpcyByZWFkeSBoZW5jZSBjYWxsaW5nIGl0IGluIG9uQWZ0ZXJCaW5kaW5nXG5cdFx0XHQob09iamVjdFBhZ2UgYXMgYW55KS5fdHJpZ2dlclZpc2libGVTdWJTZWN0aW9uc0V2ZW50cygpO1xuXG5cdFx0XHQvL1RvIENvbXB1dGUgdGhlIEVkaXQgQmluZGluZyBvZiB0aGUgc3ViT2JqZWN0IHBhZ2UgdXNpbmcgcm9vdCBvYmplY3QgcGFnZSwgY3JlYXRlIGEgY29udGV4dCBmb3IgZHJhZnQgcm9vdCBhbmQgdXBkYXRlIHRoZSBlZGl0IGJ1dHRvbiBpbiBzdWIgT1AgdXNpbmcgdGhlIGNvbnRleHRcblx0XHRcdEFjdGlvblJ1bnRpbWUudXBkYXRlRWRpdEJ1dHRvblZpc2liaWxpdHlBbmRFbmFibGVtZW50KHRoaXMuZ2V0VmlldygpKTtcblx0XHR9XG5cdFx0dGhpcy5kaXNwbGF5Q29sbGFib3JhdGlvbk1lc3NhZ2UobVBhcmFtZXRlcnM/LnJlZGlyZWN0ZWRUb05vbkRyYWZ0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTaG93IGEgbWVzc2FnZSBzdHJpcCBpZiBhIHJlZGlyZWN0aW9uIHRvIGEgbm9uLWRyYWZ0IGVsZW1lbnQgaGFzIGJlZW4gZG9uZS5cblx0ICogUmVtb3ZlIHRoZSBtZXNzYWdlIHN0cmlwIGluIGNhc2Ugd2UgbmF2aWdhdGUgdG8gYW5vdGhlciBvYmplY3QgcGFnZS5cblx0ICpcblx0ICogQHBhcmFtIGVudGl0eU5hbWUgTmFtZSBvZiB0aGUgRW50aXR5IHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgbWVzc2FnZVxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0ZGlzcGxheUNvbGxhYm9yYXRpb25NZXNzYWdlKGVudGl0eU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuXHRcdGNvbnN0IGludGVybmFsQmluZGluZ0NvbnRleHQgPSB0aGlzLmdldFZpZXcoKT8uZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRjb25zdCByZXNvdXJjZUJ1bmRsZSA9IENvcmUuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIik7XG5cdFx0aWYgKGVudGl0eU5hbWUpIHtcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBuZXcgTWVzc2FnZSh7XG5cdFx0XHRcdG1lc3NhZ2U6IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJSRVJPVVRFRF9OQVZJR0FUSU9OX1RPX1NBVkVEX1ZFUlNJT05cIiwgW2VudGl0eU5hbWVdKSxcblx0XHRcdFx0dHlwZTogXCJJbmZvcm1hdGlvblwiXG5cdFx0XHR9KTtcblx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkuc2hvd01lc3NhZ2VzKFttZXNzYWdlXSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IG1lc3NhZ2VUb0NvbXBhcmUgPSByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiUkVST1VURURfTkFWSUdBVElPTl9UT19TQVZFRF9WRVJTSU9OXCIsIFtcInswfVwiXSk7XG5cdFx0XHRjb25zdCBsZW5ndGhVbnRpbFZhcmlhYmxlID0gbWVzc2FnZVRvQ29tcGFyZS5zZWFyY2goXCJ7XCIpO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRpbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5nZXRQcm9wZXJ0eShcIk9QTWVzc2FnZVN0cmlwVGV4dFwiKT8uc3Vic3RyaW5nKDAsIGxlbmd0aFVudGlsVmFyaWFibGUpID09PVxuXHRcdFx0XHRtZXNzYWdlVG9Db21wYXJlLnN1YnN0cmluZygwLCBsZW5ndGhVbnRpbFZhcmlhYmxlKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkuc2hvd01lc3NhZ2VzKFtdKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdG9uUGFnZVJlYWR5KG1QYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHRjb25zdCBzZXRGb2N1cyA9ICgpID0+IHtcblx0XHRcdC8vIFNldCB0aGUgZm9jdXMgdG8gdGhlIGZpcnN0IGFjdGlvbiBidXR0b24sIG9yIHRvIHRoZSBmaXJzdCBlZGl0YWJsZSBpbnB1dCBpZiBpbiBlZGl0YWJsZSBtb2RlXG5cdFx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0XHRjb25zdCBpc0luRGlzcGxheU1vZGUgPSAhb09iamVjdFBhZ2UuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpO1xuXG5cdFx0XHRpZiAoaXNJbkRpc3BsYXlNb2RlKSB7XG5cdFx0XHRcdGNvbnN0IG9GaXJzdENsaWNrYWJsZUVsZW1lbnQgPSB0aGlzLl9nZXRGaXJzdENsaWNrYWJsZUVsZW1lbnQob09iamVjdFBhZ2UpO1xuXHRcdFx0XHRpZiAob0ZpcnN0Q2xpY2thYmxlRWxlbWVudCkge1xuXHRcdFx0XHRcdG9GaXJzdENsaWNrYWJsZUVsZW1lbnQuZm9jdXMoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3Qgb1NlbGVjdGVkU2VjdGlvbjogYW55ID0gQ29yZS5ieUlkKG9PYmplY3RQYWdlLmdldFNlbGVjdGVkU2VjdGlvbigpKTtcblx0XHRcdFx0aWYgKG9TZWxlY3RlZFNlY3Rpb24pIHtcblx0XHRcdFx0XHR0aGlzLl91cGRhdGVGb2N1c0luRWRpdE1vZGUob1NlbGVjdGVkU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdFx0Ly8gQXBwbHkgYXBwIHN0YXRlIG9ubHkgYWZ0ZXIgdGhlIHBhZ2UgaXMgcmVhZHkgd2l0aCB0aGUgZmlyc3Qgc2VjdGlvbiBzZWxlY3RlZFxuXHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBvQmluZGluZ0NvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdC8vU2hvdyBwb3B1cCB3aGlsZSBuYXZpZ2F0aW5nIGJhY2sgZnJvbSBvYmplY3QgcGFnZSBpbiBjYXNlIG9mIGRyYWZ0XG5cdFx0aWYgKG9CaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0Y29uc3QgYklzU3RpY2t5TW9kZSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCgob0JpbmRpbmdDb250ZXh0LmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdFx0aWYgKCFiSXNTdGlja3lNb2RlKSB7XG5cdFx0XHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQob1ZpZXcpO1xuXHRcdFx0XHRvQXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKS5zZXRCYWNrTmF2aWdhdGlvbigoKSA9PiB0aGlzLl9vbkJhY2tOYXZpZ2F0aW9uSW5EcmFmdChvQmluZGluZ0NvbnRleHQpKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3Qgdmlld0lkID0gdGhpcy5nZXRWaWV3KCkuZ2V0SWQoKTtcblx0XHR0aGlzLmdldEFwcENvbXBvbmVudCgpXG5cdFx0XHQuZ2V0QXBwU3RhdGVIYW5kbGVyKClcblx0XHRcdC5hcHBseUFwcFN0YXRlKHZpZXdJZCwgdGhpcy5nZXRWaWV3KCkpXG5cdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdGlmIChtUGFyYW1ldGVycy5mb3JjZUZvY3VzKSB7XG5cdFx0XHRcdFx0c2V0Rm9jdXMoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAoRXJyb3IpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgc2V0dGluZyB0aGUgZm9jdXNcIiwgRXJyb3IpO1xuXHRcdFx0fSk7XG5cblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJlcnJvck5hdmlnYXRpb25TZWN0aW9uRmxhZ1wiLCBmYWxzZSk7XG5cdFx0dGhpcy5fY2hlY2tEYXRhUG9pbnRUaXRsZUZvckV4dGVybmFsTmF2aWdhdGlvbigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgc3RhdHVzIG9mIGVkaXQgbW9kZSBmb3Igc3RpY2t5IHNlc3Npb24uXG5cdCAqXG5cdCAqIEByZXR1cm5zIFRoZSBzdGF0dXMgb2YgZWRpdCBtb2RlIGZvciBzdGlja3kgc2Vzc2lvblxuXHQgKi9cblx0Z2V0U3RpY2t5RWRpdE1vZGUoKSB7XG5cdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQgJiYgKHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dCk7XG5cdFx0bGV0IGJJc1N0aWNreUVkaXRNb2RlID0gZmFsc2U7XG5cdFx0aWYgKG9CaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0Y29uc3QgYklzU3RpY2t5TW9kZSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChvQmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0XHRpZiAoYklzU3RpY2t5TW9kZSkge1xuXHRcdFx0XHRiSXNTdGlja3lFZGl0TW9kZSA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGJJc1N0aWNreUVkaXRNb2RlO1xuXHR9XG5cblx0X2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkge1xuXHRcdHJldHVybiB0aGlzLmJ5SWQoXCJmZTo6T2JqZWN0UGFnZVwiKSBhcyBPYmplY3RQYWdlTGF5b3V0O1xuXHR9XG5cblx0X2dldFBhZ2VUaXRsZUluZm9ybWF0aW9uKCkge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRjb25zdCBvT2JqZWN0UGFnZVN1YnRpdGxlID0gb09iamVjdFBhZ2UuZ2V0Q3VzdG9tRGF0YSgpLmZpbmQoZnVuY3Rpb24gKG9DdXN0b21EYXRhOiBhbnkpIHtcblx0XHRcdHJldHVybiBvQ3VzdG9tRGF0YS5nZXRLZXkoKSA9PT0gXCJPYmplY3RQYWdlU3VidGl0bGVcIjtcblx0XHR9KTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dGl0bGU6IG9PYmplY3RQYWdlLmRhdGEoXCJPYmplY3RQYWdlVGl0bGVcIikgfHwgXCJcIixcblx0XHRcdHN1YnRpdGxlOiBvT2JqZWN0UGFnZVN1YnRpdGxlICYmIG9PYmplY3RQYWdlU3VidGl0bGUuZ2V0VmFsdWUoKSxcblx0XHRcdGludGVudDogXCJcIixcblx0XHRcdGljb246IFwiXCJcblx0XHR9O1xuXHR9XG5cblx0X2V4ZWN1dGVIZWFkZXJTaG9ydGN1dChzSWQ6IGFueSkge1xuXHRcdGNvbnN0IHNCdXR0b25JZCA9IGAke3RoaXMuZ2V0VmlldygpLmdldElkKCl9LS0ke3NJZH1gLFxuXHRcdFx0b0J1dHRvbiA9ICh0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLmdldEhlYWRlclRpdGxlKCkgYXMgT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZSlcblx0XHRcdFx0LmdldEFjdGlvbnMoKVxuXHRcdFx0XHQuZmluZChmdW5jdGlvbiAob0VsZW1lbnQ6IGFueSkge1xuXHRcdFx0XHRcdHJldHVybiBvRWxlbWVudC5nZXRJZCgpID09PSBzQnV0dG9uSWQ7XG5cdFx0XHRcdH0pO1xuXHRcdGlmIChvQnV0dG9uKSB7XG5cdFx0XHRDb21tb25VdGlscy5maXJlQnV0dG9uUHJlc3Mob0J1dHRvbik7XG5cdFx0fVxuXHR9XG5cblx0X2V4ZWN1dGVGb290ZXJTaG9ydGN1dChzSWQ6IGFueSkge1xuXHRcdGNvbnN0IHNCdXR0b25JZCA9IGAke3RoaXMuZ2V0VmlldygpLmdldElkKCl9LS0ke3NJZH1gLFxuXHRcdFx0b0J1dHRvbiA9ICh0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLmdldEZvb3RlcigpIGFzIGFueSkuZ2V0Q29udGVudCgpLmZpbmQoZnVuY3Rpb24gKG9FbGVtZW50OiBhbnkpIHtcblx0XHRcdFx0cmV0dXJuIG9FbGVtZW50LmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpID09PSBcInNhcC5tLkJ1dHRvblwiICYmIG9FbGVtZW50LmdldElkKCkgPT09IHNCdXR0b25JZDtcblx0XHRcdH0pO1xuXHRcdENvbW1vblV0aWxzLmZpcmVCdXR0b25QcmVzcyhvQnV0dG9uKTtcblx0fVxuXG5cdF9leGVjdXRlVGFiU2hvcnRDdXQob0V4ZWN1dGlvbjogYW55KSB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLFxuXHRcdFx0YVNlY3Rpb25zID0gb09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKSxcblx0XHRcdGlTZWN0aW9uSW5kZXhNYXggPSBhU2VjdGlvbnMubGVuZ3RoIC0gMSxcblx0XHRcdHNDb21tYW5kID0gb0V4ZWN1dGlvbi5vU291cmNlLmdldENvbW1hbmQoKTtcblx0XHRsZXQgbmV3U2VjdGlvbixcblx0XHRcdGlTZWxlY3RlZFNlY3Rpb25JbmRleCA9IG9PYmplY3RQYWdlLmluZGV4T2ZTZWN0aW9uKHRoaXMuYnlJZChvT2JqZWN0UGFnZS5nZXRTZWxlY3RlZFNlY3Rpb24oKSkgYXMgT2JqZWN0UGFnZVNlY3Rpb24pO1xuXHRcdGlmIChpU2VsZWN0ZWRTZWN0aW9uSW5kZXggIT09IC0xICYmIGlTZWN0aW9uSW5kZXhNYXggPiAwKSB7XG5cdFx0XHRpZiAoc0NvbW1hbmQgPT09IFwiTmV4dFRhYlwiKSB7XG5cdFx0XHRcdGlmIChpU2VsZWN0ZWRTZWN0aW9uSW5kZXggPD0gaVNlY3Rpb25JbmRleE1heCAtIDEpIHtcblx0XHRcdFx0XHRuZXdTZWN0aW9uID0gYVNlY3Rpb25zWysraVNlbGVjdGVkU2VjdGlvbkluZGV4XTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChpU2VsZWN0ZWRTZWN0aW9uSW5kZXggIT09IDApIHtcblx0XHRcdFx0Ly8gUHJldmlvdXNUYWJcblx0XHRcdFx0bmV3U2VjdGlvbiA9IGFTZWN0aW9uc1stLWlTZWxlY3RlZFNlY3Rpb25JbmRleF07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChuZXdTZWN0aW9uKSB7XG5cdFx0XHRcdG9PYmplY3RQYWdlLnNldFNlbGVjdGVkU2VjdGlvbihuZXdTZWN0aW9uKTtcblx0XHRcdFx0bmV3U2VjdGlvbi5mb2N1cygpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdF9nZXRGb290ZXJWaXNpYmlsaXR5KCkge1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3Qgc1ZpZXdJZCA9IHRoaXMuZ2V0VmlldygpLmdldElkKCk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwibWVzc2FnZUZvb3RlckNvbnRhaW5zRXJyb3JzXCIsIGZhbHNlKTtcblx0XHRzYXAudWlcblx0XHRcdC5nZXRDb3JlKClcblx0XHRcdC5nZXRNZXNzYWdlTWFuYWdlcigpXG5cdFx0XHQuZ2V0TWVzc2FnZU1vZGVsKClcblx0XHRcdC5nZXREYXRhKClcblx0XHRcdC5mb3JFYWNoKGZ1bmN0aW9uIChvTWVzc2FnZTogYW55KSB7XG5cdFx0XHRcdGlmIChvTWVzc2FnZS52YWxpZGF0aW9uICYmIG9NZXNzYWdlLnR5cGUgPT09IFwiRXJyb3JcIiAmJiBvTWVzc2FnZS50YXJnZXQuaW5kZXhPZihzVmlld0lkKSA+IC0xKSB7XG5cdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwibWVzc2FnZUZvb3RlckNvbnRhaW5zRXJyb3JzXCIsIHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0fVxuXG5cdF9zaG93TWVzc2FnZVBvcG92ZXIoZXJyPzogYW55LCBvUmV0PzogYW55KSB7XG5cdFx0aWYgKGVycikge1xuXHRcdFx0TG9nLmVycm9yKGVycik7XG5cdFx0fVxuXHRcdGNvbnN0IHJvb3RWaWV3Q29udHJvbGxlciA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkgYXMgYW55O1xuXHRcdGNvbnN0IGN1cnJlbnRQYWdlVmlldyA9IHJvb3RWaWV3Q29udHJvbGxlci5pc0ZjbEVuYWJsZWQoKVxuXHRcdFx0PyByb290Vmlld0NvbnRyb2xsZXIuZ2V0UmlnaHRtb3N0VmlldygpXG5cdFx0XHQ6ICh0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvb3RDb250YWluZXIoKSBhcyBhbnkpLmdldEN1cnJlbnRQYWdlKCk7XG5cdFx0aWYgKCFjdXJyZW50UGFnZVZpZXcuaXNBKFwic2FwLm0uTWVzc2FnZVBhZ2VcIikpIHtcblx0XHRcdGNvbnN0IG9NZXNzYWdlQnV0dG9uID0gdGhpcy5tZXNzYWdlQnV0dG9uLFxuXHRcdFx0XHRvTWVzc2FnZVBvcG92ZXIgPSBvTWVzc2FnZUJ1dHRvbi5vTWVzc2FnZVBvcG92ZXIsXG5cdFx0XHRcdG9JdGVtQmluZGluZyA9IG9NZXNzYWdlUG9wb3Zlci5nZXRCaW5kaW5nKFwiaXRlbXNcIik7XG5cblx0XHRcdGlmIChvSXRlbUJpbmRpbmcuZ2V0TGVuZ3RoKCkgPiAwICYmICFvTWVzc2FnZVBvcG92ZXIuaXNPcGVuKCkpIHtcblx0XHRcdFx0b01lc3NhZ2VCdXR0b24uc2V0VmlzaWJsZSh0cnVlKTtcblx0XHRcdFx0Ly8gd29ya2Fyb3VuZCB0byBlbnN1cmUgdGhhdCBvTWVzc2FnZUJ1dHRvbiBpcyByZW5kZXJlZCB3aGVuIG9wZW5CeSBpcyBjYWxsZWRcblx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0b01lc3NhZ2VQb3BvdmVyLm9wZW5CeShvTWVzc2FnZUJ1dHRvbik7XG5cdFx0XHRcdH0sIDApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb1JldDtcblx0fVxuXG5cdF9lZGl0RG9jdW1lbnQob0NvbnRleHQ6IGFueSkge1xuXHRcdGNvbnN0IG9Nb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIik7XG5cdFx0QnVzeUxvY2tlci5sb2NrKG9Nb2RlbCk7XG5cdFx0cmV0dXJuIHRoaXMuZWRpdEZsb3cuZWRpdERvY3VtZW50LmFwcGx5KHRoaXMuZWRpdEZsb3csIFtvQ29udGV4dF0pLmZpbmFsbHkoZnVuY3Rpb24gKCkge1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2sob01vZGVsKTtcblx0XHR9KTtcblx0fVxuXG5cdGFzeW5jIF92YWxpZGF0ZURvY3VtZW50KCk6IFByb21pc2U8dm9pZCB8IGFueVtdIHwgT0RhdGFDb250ZXh0QmluZGluZz4ge1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0Y29uc3QgY29udHJvbCA9IENvcmUuYnlJZChDb3JlLmdldEN1cnJlbnRGb2N1c2VkQ29udHJvbElkKCkpO1xuXHRcdGNvbnN0IGNvbnRleHQgPSBjb250cm9sPy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdFx0aWYgKGNvbnRleHQgJiYgIWNvbnRleHQuaXNUcmFuc2llbnQoKSkge1xuXHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNTZXJ2aWNlID0gYXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXHRcdFx0Y29uc3QgZW50aXR5VHlwZSA9IHNpZGVFZmZlY3RzU2VydmljZS5nZXRFbnRpdHlUeXBlRnJvbUNvbnRleHQoY29udGV4dCk7XG5cdFx0XHRjb25zdCBnbG9iYWxTaWRlRWZmZWN0cyA9IGVudGl0eVR5cGUgPyBzaWRlRWZmZWN0c1NlcnZpY2UuZ2V0R2xvYmFsT0RhdGFFbnRpdHlTaWRlRWZmZWN0cyhlbnRpdHlUeXBlKSA6IFtdO1xuXHRcdFx0Ly8gSWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGdsb2JhbCBTaWRlRWZmZWN0cyBmb3IgdGhlIHJlbGF0ZWQgZW50aXR5LCBleGVjdXRlIGl0L3RoZW1cblx0XHRcdGlmIChnbG9iYWxTaWRlRWZmZWN0cy5sZW5ndGgpIHtcblx0XHRcdFx0YXdhaXQgdGhpcy5lZGl0Rmxvdy5zeW5jVGFzaygpO1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoZ2xvYmFsU2lkZUVmZmVjdHMubWFwKChzaWRlRWZmZWN0cykgPT4gdGhpcy5fc2lkZUVmZmVjdHMucmVxdWVzdFNpZGVFZmZlY3RzKHNpZGVFZmZlY3RzLCBjb250ZXh0KSkpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgZHJhZnRSb290Q29udGV4dCA9IChhd2FpdCBDb21tb25VdGlscy5jcmVhdGVSb290Q29udGV4dChQcm9ncmFtbWluZ01vZGVsLkRyYWZ0LCB0aGlzLmdldFZpZXcoKSwgYXBwQ29tcG9uZW50KSkgYXMgQ29udGV4dDtcblx0XHRcdC8vRXhlY3V0ZSB0aGUgZHJhZnRWYWxpZGF0aW9uIGlmIHRoZXJlIGlzIG5vIGdsb2JhbFNpZGVFZmZlY3RzIChpZ25vcmUgRVRhZ3MgaW4gY29sbGFib3JhdGlvbiBkcmFmdClcblx0XHRcdGlmIChkcmFmdFJvb3RDb250ZXh0KSB7XG5cdFx0XHRcdGF3YWl0IHRoaXMuZWRpdEZsb3cuc3luY1Rhc2soKTtcblx0XHRcdFx0cmV0dXJuIGRyYWZ0LmV4ZWN1dGVEcmFmdFZhbGlkYXRpb24oZHJhZnRSb290Q29udGV4dCwgYXBwQ29tcG9uZW50LCBpc0Nvbm5lY3RlZCh0aGlzLmdldFZpZXcoKSkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0YXN5bmMgX3NhdmVEb2N1bWVudChvQ29udGV4dDogYW55KSB7XG5cdFx0Y29uc3Qgb01vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKSxcblx0XHRcdGFXYWl0Q3JlYXRlRG9jdW1lbnRzOiBhbnlbXSA9IFtdO1xuXHRcdC8vIGluZGljYXRlcyBpZiB3ZSBhcmUgY3JlYXRpbmcgYSBuZXcgcm93IGluIHRoZSBPUFxuXHRcdGxldCBiRXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvciA9IGZhbHNlO1xuXHRcdEJ1c3lMb2NrZXIubG9jayhvTW9kZWwpO1xuXHRcdHRoaXMuX2ZpbmRUYWJsZXMoKS5mb3JFYWNoKChvVGFibGU6IGFueSkgPT4ge1xuXHRcdFx0Y29uc3Qgb0JpbmRpbmcgPSB0aGlzLl9nZXRUYWJsZUJpbmRpbmcob1RhYmxlKTtcblx0XHRcdGNvbnN0IG1QYXJhbWV0ZXJzOiBhbnkgPSB7XG5cdFx0XHRcdGNyZWF0aW9uTW9kZTogb1RhYmxlLmRhdGEoXCJjcmVhdGlvbk1vZGVcIiksXG5cdFx0XHRcdGNyZWF0aW9uUm93OiBvVGFibGUuZ2V0Q3JlYXRpb25Sb3coKSxcblx0XHRcdFx0Y3JlYXRlQXRFbmQ6IG9UYWJsZS5kYXRhKFwiY3JlYXRlQXRFbmRcIikgPT09IFwidHJ1ZVwiXG5cdFx0XHR9O1xuXHRcdFx0Y29uc3QgYkNyZWF0ZURvY3VtZW50ID1cblx0XHRcdFx0bVBhcmFtZXRlcnMuY3JlYXRpb25Sb3cgJiZcblx0XHRcdFx0bVBhcmFtZXRlcnMuY3JlYXRpb25Sb3cuZ2V0QmluZGluZ0NvbnRleHQoKSAmJlxuXHRcdFx0XHRPYmplY3Qua2V5cyhtUGFyYW1ldGVycy5jcmVhdGlvblJvdy5nZXRCaW5kaW5nQ29udGV4dCgpLmdldE9iamVjdCgpKS5sZW5ndGggPiAxO1xuXHRcdFx0aWYgKGJDcmVhdGVEb2N1bWVudCkge1xuXHRcdFx0XHQvLyB0aGUgYlNraXBTaWRlRWZmZWN0cyBpcyBhIHBhcmFtZXRlciBjcmVhdGVkIHdoZW4gd2UgY2xpY2sgdGhlIHNhdmUga2V5LiBJZiB3ZSBwcmVzcyB0aGlzIGtleVxuXHRcdFx0XHQvLyB3ZSBkb24ndCBleGVjdXRlIHRoZSBoYW5kbGVTaWRlRWZmZWN0cyBmdW5jaXRvbiB0byBhdm9pZCBiYXRjaCByZWR1bmRhbmN5XG5cdFx0XHRcdG1QYXJhbWV0ZXJzLmJTa2lwU2lkZUVmZmVjdHMgPSB0cnVlO1xuXHRcdFx0XHRiRXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvciA9IHRydWU7XG5cdFx0XHRcdGFXYWl0Q3JlYXRlRG9jdW1lbnRzLnB1c2goXG5cdFx0XHRcdFx0dGhpcy5lZGl0Rmxvdy5jcmVhdGVEb2N1bWVudChvQmluZGluZywgbVBhcmFtZXRlcnMpLnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG9CaW5kaW5nO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgYUJpbmRpbmdzID0gYXdhaXQgUHJvbWlzZS5hbGwoYVdhaXRDcmVhdGVEb2N1bWVudHMpO1xuXHRcdFx0Y29uc3QgbVBhcmFtZXRlcnMgPSB7XG5cdFx0XHRcdGJFeGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yOiBiRXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvcixcblx0XHRcdFx0YmluZGluZ3M6IGFCaW5kaW5nc1xuXHRcdFx0fTtcblx0XHRcdC8vIFdlIG5lZWQgdG8gZWl0aGVyIHJlamVjdCBvciByZXNvbHZlIGEgcHJvbWlzZSBoZXJlIGFuZCByZXR1cm4gaXQgc2luY2UgdGhpcyBzYXZlXG5cdFx0XHQvLyBmdW5jdGlvbiBpcyBub3Qgb25seSBjYWxsZWQgd2hlbiBwcmVzc2luZyB0aGUgc2F2ZSBidXR0b24gaW4gdGhlIGZvb3RlciwgYnV0IGFsc29cblx0XHRcdC8vIHdoZW4gdGhlIHVzZXIgc2VsZWN0cyBjcmVhdGUgb3Igc2F2ZSBpbiBhIGRhdGFsb3NzIHBvcHVwLlxuXHRcdFx0Ly8gVGhlIGxvZ2ljIG9mIHRoZSBkYXRhbG9zcyBwb3B1cCBuZWVkcyB0byBkZXRlY3QgaWYgdGhlIHNhdmUgaGFkIGVycm9ycyBvciBub3QgaW4gb3JkZXJcblx0XHRcdC8vIHRvIGRlY2lkZSBpZiB0aGUgc3Vic2VxdWVudCBhY3Rpb24gLSBsaWtlIGEgYmFjayBuYXZpZ2F0aW9uIC0gaGFzIHRvIGJlIGV4ZWN1dGVkIG9yIG5vdC5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGF3YWl0IHRoaXMuZWRpdEZsb3cuc2F2ZURvY3VtZW50KG9Db250ZXh0LCBtUGFyYW1ldGVycyk7XG5cdFx0XHR9IGNhdGNoIChlcnJvcjogYW55KSB7XG5cdFx0XHRcdC8vIElmIHRoZSBzYXZlRG9jdW1lbnQgaW4gZWRpdEZsb3cgcmV0dXJucyBlcnJvcnMgd2UgbmVlZFxuXHRcdFx0XHQvLyB0byBzaG93IHRoZSBtZXNzYWdlIHBvcG92ZXIgaGVyZSBhbmQgZW5zdXJlIHRoYXQgdGhlXG5cdFx0XHRcdC8vIGRhdGFsb3NzIGxvZ2ljIGRvZXMgbm90IHBlcmZvcm0gdGhlIGZvbGxvdyB1cCBmdW5jdGlvblxuXHRcdFx0XHQvLyBsaWtlIGUuZy4gYSBiYWNrIG5hdmlnYXRpb24gaGVuY2Ugd2UgcmV0dXJuIGEgcHJvbWlzZSBhbmQgcmVqZWN0IGl0XG5cdFx0XHRcdHRoaXMuX3Nob3dNZXNzYWdlUG9wb3ZlcihlcnJvcik7XG5cdFx0XHRcdHRocm93IGVycm9yO1xuXHRcdFx0fVxuXHRcdH0gZmluYWxseSB7XG5cdFx0XHRpZiAoQnVzeUxvY2tlci5pc0xvY2tlZChvTW9kZWwpKSB7XG5cdFx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKG9Nb2RlbCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X21hbmFnZUNvbGxhYm9yYXRpb24oKSB7XG5cdFx0b3Blbk1hbmFnZURpYWxvZyh0aGlzLmdldFZpZXcoKSk7XG5cdH1cblxuXHRfc2hvd0NvbGxhYm9yYXRpb25Vc2VyRGV0YWlscyhldmVudDogYW55KSB7XG5cdFx0c2hvd1VzZXJEZXRhaWxzKGV2ZW50LCB0aGlzLmdldFZpZXcoKSk7XG5cdH1cblxuXHRfY2FuY2VsRG9jdW1lbnQob0NvbnRleHQ6IGFueSwgbVBhcmFtZXRlcnM6IGFueSkge1xuXHRcdG1QYXJhbWV0ZXJzLmNhbmNlbEJ1dHRvbiA9IHRoaXMuZ2V0VmlldygpLmJ5SWQobVBhcmFtZXRlcnMuY2FuY2VsQnV0dG9uKTsgLy90byBnZXQgdGhlIHJlZmVyZW5jZSBvZiB0aGUgY2FuY2VsIGJ1dHRvbiBmcm9tIGNvbW1hbmQgZXhlY3V0aW9uXG5cdFx0cmV0dXJuIHRoaXMuZWRpdEZsb3cuY2FuY2VsRG9jdW1lbnQob0NvbnRleHQsIG1QYXJhbWV0ZXJzKTtcblx0fVxuXG5cdF9hcHBseURvY3VtZW50KG9Db250ZXh0OiBDb250ZXh0KSB7XG5cdFx0cmV0dXJuIHRoaXMuZWRpdEZsb3cuYXBwbHlEb2N1bWVudChvQ29udGV4dCkuY2F0Y2goKCkgPT4gdGhpcy5fc2hvd01lc3NhZ2VQb3BvdmVyKCkpO1xuXHR9XG5cblx0X3VwZGF0ZVJlbGF0ZWRBcHBzKCkge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRjb25zdCBzaG93UmVsYXRlZEFwcHMgPSBvT2JqZWN0UGFnZS5kYXRhKFwic2hvd1JlbGF0ZWRBcHBzXCIpO1xuXHRcdGlmIChzaG93UmVsYXRlZEFwcHMgPT09IFwidHJ1ZVwiIHx8IHNob3dSZWxhdGVkQXBwcyA9PT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuZ2V0VmlldygpKTtcblx0XHRcdENvbW1vblV0aWxzLnVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyhvT2JqZWN0UGFnZSwgYXBwQ29tcG9uZW50KTtcblx0XHR9XG5cdH1cblxuXHRfZmluZENvbnRyb2xJblN1YlNlY3Rpb24oYVBhcmVudEVsZW1lbnQ6IGFueSwgYVN1YnNlY3Rpb246IGFueSwgYUNvbnRyb2xzOiBhbnksIGJJc0NoYXJ0PzogYm9vbGVhbikge1xuXHRcdGZvciAobGV0IGVsZW1lbnQgPSAwOyBlbGVtZW50IDwgYVBhcmVudEVsZW1lbnQubGVuZ3RoOyBlbGVtZW50KyspIHtcblx0XHRcdGxldCBvRWxlbWVudCA9IGFQYXJlbnRFbGVtZW50W2VsZW1lbnRdLmdldENvbnRlbnQgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBhUGFyZW50RWxlbWVudFtlbGVtZW50XS5nZXRDb250ZW50KCk7XG5cdFx0XHRpZiAoYklzQ2hhcnQpIHtcblx0XHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50Lm1BZ2dyZWdhdGlvbnMgJiYgb0VsZW1lbnQuZ2V0QWdncmVnYXRpb24oXCJpdGVtc1wiKSkge1xuXHRcdFx0XHRcdGNvbnN0IGFJdGVtcyA9IG9FbGVtZW50LmdldEFnZ3JlZ2F0aW9uKFwiaXRlbXNcIik7XG5cdFx0XHRcdFx0YUl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKG9JdGVtOiBhbnkpIHtcblx0XHRcdFx0XHRcdGlmIChvSXRlbS5pc0EoXCJzYXAuZmUubWFjcm9zLmNoYXJ0LkNoYXJ0QVBJXCIpKSB7XG5cdFx0XHRcdFx0XHRcdG9FbGVtZW50ID0gb0l0ZW07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5pc0EgJiYgb0VsZW1lbnQuaXNBKFwic2FwLnVpLmxheW91dC5EeW5hbWljU2lkZUNvbnRlbnRcIikpIHtcblx0XHRcdFx0b0VsZW1lbnQgPSBvRWxlbWVudC5nZXRNYWluQ29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmIG9FbGVtZW50LmdldE1haW5Db250ZW50KCk7XG5cdFx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0b0VsZW1lbnQgPSBvRWxlbWVudFswXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly8gVGhlIHRhYmxlIG1heSBjdXJyZW50bHkgYmUgc2hvd24gaW4gYSBmdWxsIHNjcmVlbiBkaWFsb2csIHdlIGNhbiB0aGVuIGdldCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBUYWJsZUFQSVxuXHRcdFx0Ly8gY29udHJvbCBmcm9tIHRoZSBjdXN0b20gZGF0YSBvZiB0aGUgcGxhY2UgaG9sZGVyIHBhbmVsXG5cdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQuaXNBICYmIG9FbGVtZW50LmlzQShcInNhcC5tLlBhbmVsXCIpICYmIG9FbGVtZW50LmRhdGEoXCJGdWxsU2NyZWVuVGFibGVQbGFjZUhvbGRlclwiKSkge1xuXHRcdFx0XHRvRWxlbWVudCA9IG9FbGVtZW50LmRhdGEoXCJ0YWJsZUFQSXJlZmVyZW5jZVwiKTtcblx0XHRcdH1cblx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5pc0EgJiYgb0VsZW1lbnQuaXNBKFwic2FwLmZlLm1hY3Jvcy50YWJsZS5UYWJsZUFQSVwiKSkge1xuXHRcdFx0XHRvRWxlbWVudCA9IG9FbGVtZW50LmdldENvbnRlbnQgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBvRWxlbWVudC5nZXRDb250ZW50KCk7XG5cdFx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0b0VsZW1lbnQgPSBvRWxlbWVudFswXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50LmlzQSAmJiBvRWxlbWVudC5pc0EoXCJzYXAudWkubWRjLlRhYmxlXCIpKSB7XG5cdFx0XHRcdGFDb250cm9scy5wdXNoKG9FbGVtZW50KTtcblx0XHRcdH1cblx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5pc0EgJiYgb0VsZW1lbnQuaXNBKFwic2FwLmZlLm1hY3Jvcy5jaGFydC5DaGFydEFQSVwiKSkge1xuXHRcdFx0XHRvRWxlbWVudCA9IG9FbGVtZW50LmdldENvbnRlbnQgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBvRWxlbWVudC5nZXRDb250ZW50KCk7XG5cdFx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0b0VsZW1lbnQgPSBvRWxlbWVudFswXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50LmlzQSAmJiBvRWxlbWVudC5pc0EoXCJzYXAudWkubWRjLkNoYXJ0XCIpKSB7XG5cdFx0XHRcdGFDb250cm9scy5wdXNoKG9FbGVtZW50KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfZ2V0QWxsU3ViU2VjdGlvbnMoKSB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGxldCBhU3ViU2VjdGlvbnM6IGFueVtdID0gW107XG5cdFx0b09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvU2VjdGlvbjogYW55KSB7XG5cdFx0XHRhU3ViU2VjdGlvbnMgPSBhU3ViU2VjdGlvbnMuY29uY2F0KG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBhU3ViU2VjdGlvbnM7XG5cdH1cblxuXHRfZ2V0QWxsQmxvY2tzKCkge1xuXHRcdGxldCBhQmxvY2tzOiBhbnlbXSA9IFtdO1xuXHRcdHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1N1YlNlY3Rpb246IGFueSkge1xuXHRcdFx0YUJsb2NrcyA9IGFCbG9ja3MuY29uY2F0KG9TdWJTZWN0aW9uLmdldEJsb2NrcygpKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gYUJsb2Nrcztcblx0fVxuXG5cdF9maW5kVGFibGVzKCkge1xuXHRcdGNvbnN0IGFTdWJTZWN0aW9ucyA9IHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCk7XG5cdFx0Y29uc3QgYVRhYmxlczogYW55W10gPSBbXTtcblx0XHRmb3IgKGxldCBzdWJTZWN0aW9uID0gMDsgc3ViU2VjdGlvbiA8IGFTdWJTZWN0aW9ucy5sZW5ndGg7IHN1YlNlY3Rpb24rKykge1xuXHRcdFx0dGhpcy5fZmluZENvbnRyb2xJblN1YlNlY3Rpb24oYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLmdldEJsb2NrcygpLCBhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0sIGFUYWJsZXMpO1xuXHRcdFx0dGhpcy5fZmluZENvbnRyb2xJblN1YlNlY3Rpb24oYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLmdldE1vcmVCbG9ja3MoKSwgYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLCBhVGFibGVzKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFUYWJsZXM7XG5cdH1cblxuXHRfZmluZENoYXJ0cygpIHtcblx0XHRjb25zdCBhU3ViU2VjdGlvbnMgPSB0aGlzLl9nZXRBbGxTdWJTZWN0aW9ucygpO1xuXHRcdGNvbnN0IGFDaGFydHM6IGFueVtdID0gW107XG5cdFx0Zm9yIChsZXQgc3ViU2VjdGlvbiA9IDA7IHN1YlNlY3Rpb24gPCBhU3ViU2VjdGlvbnMubGVuZ3RoOyBzdWJTZWN0aW9uKyspIHtcblx0XHRcdHRoaXMuX2ZpbmRDb250cm9sSW5TdWJTZWN0aW9uKGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXS5nZXRCbG9ja3MoKSwgYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLCBhQ2hhcnRzLCB0cnVlKTtcblx0XHRcdHRoaXMuX2ZpbmRDb250cm9sSW5TdWJTZWN0aW9uKGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXS5nZXRNb3JlQmxvY2tzKCksIGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXSwgYUNoYXJ0cywgdHJ1ZSk7XG5cdFx0fVxuXHRcdHJldHVybiBhQ2hhcnRzO1xuXHR9XG5cblx0X2Nsb3NlU2lkZUNvbnRlbnQoKSB7XG5cdFx0dGhpcy5fZ2V0QWxsQmxvY2tzKCkuZm9yRWFjaChmdW5jdGlvbiAob0Jsb2NrOiBhbnkpIHtcblx0XHRcdGNvbnN0IG9Db250ZW50ID0gb0Jsb2NrLmdldENvbnRlbnQgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBvQmxvY2suZ2V0Q29udGVudCgpO1xuXHRcdFx0aWYgKG9Db250ZW50ICYmIG9Db250ZW50LmlzQSAmJiBvQ29udGVudC5pc0EoXCJzYXAudWkubGF5b3V0LkR5bmFtaWNTaWRlQ29udGVudFwiKSkge1xuXHRcdFx0XHRpZiAob0NvbnRlbnQuc2V0U2hvd1NpZGVDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcblx0XHRcdFx0XHRvQ29udGVudC5zZXRTaG93U2lkZUNvbnRlbnQoZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hhcnQgQ29udGV4dCBpcyByZXNvbHZlZCBmb3IgMTpuIG1pY3JvY2hhcnRzLlxuXHQgKlxuXHQgKiBAcGFyYW0gb0NoYXJ0Q29udGV4dCBUaGUgQ29udGV4dCBvZiB0aGUgTWljcm9DaGFydFxuXHQgKiBAcGFyYW0gc0NoYXJ0UGF0aCBUaGUgY29sbGVjdGlvblBhdGggb2YgdGhlIHRoZSBjaGFydFxuXHQgKiBAcmV0dXJucyBBcnJheSBvZiBBdHRyaWJ1dGVzIG9mIHRoZSBjaGFydCBDb250ZXh0XG5cdCAqL1xuXHRfZ2V0Q2hhcnRDb250ZXh0RGF0YShvQ2hhcnRDb250ZXh0OiBhbnksIHNDaGFydFBhdGg6IHN0cmluZykge1xuXHRcdGNvbnN0IG9Db250ZXh0RGF0YSA9IG9DaGFydENvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0bGV0IG9DaGFydENvbnRleHREYXRhID0gW29Db250ZXh0RGF0YV07XG5cdFx0aWYgKG9DaGFydENvbnRleHQgJiYgc0NoYXJ0UGF0aCkge1xuXHRcdFx0aWYgKG9Db250ZXh0RGF0YVtzQ2hhcnRQYXRoXSkge1xuXHRcdFx0XHRvQ2hhcnRDb250ZXh0RGF0YSA9IG9Db250ZXh0RGF0YVtzQ2hhcnRQYXRoXTtcblx0XHRcdFx0ZGVsZXRlIG9Db250ZXh0RGF0YVtzQ2hhcnRQYXRoXTtcblx0XHRcdFx0b0NoYXJ0Q29udGV4dERhdGEucHVzaChvQ29udGV4dERhdGEpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb0NoYXJ0Q29udGV4dERhdGE7XG5cdH1cblxuXHQvKipcblx0ICogU2Nyb2xsIHRoZSB0YWJsZXMgdG8gdGhlIHJvdyB3aXRoIHRoZSBzUGF0aFxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgc2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLk9iamVjdFBhZ2VDb250cm9sbGVyLmNvbnRyb2xsZXIjX3Njcm9sbFRhYmxlc1RvUm93XG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzUm93UGF0aCAnc1BhdGggb2YgdGhlIHRhYmxlIHJvdydcblx0ICovXG5cblx0X3Njcm9sbFRhYmxlc1RvUm93KHNSb3dQYXRoOiBzdHJpbmcpIHtcblx0XHRpZiAodGhpcy5fZmluZFRhYmxlcyAmJiB0aGlzLl9maW5kVGFibGVzKCkubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgYVRhYmxlcyA9IHRoaXMuX2ZpbmRUYWJsZXMoKTtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYVRhYmxlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRUYWJsZVNjcm9sbGVyLnNjcm9sbFRhYmxlVG9Sb3coYVRhYmxlc1tpXSwgc1Jvd1BhdGgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gbWVyZ2Ugc2VsZWN0ZWQgY29udGV4dHMgYW5kIGZpbHRlcnMuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBfbWVyZ2VNdWx0aXBsZUNvbnRleHRzXG5cdCAqIEBwYXJhbSBvUGFnZUNvbnRleHQgUGFnZSBjb250ZXh0XG5cdCAqIEBwYXJhbSBhTGluZUNvbnRleHQgU2VsZWN0ZWQgQ29udGV4dHNcblx0ICogQHBhcmFtIHNDaGFydFBhdGggQ29sbGVjdGlvbiBuYW1lIG9mIHRoZSBjaGFydFxuXHQgKiBAcmV0dXJucyBTZWxlY3Rpb24gVmFyaWFudCBPYmplY3Rcblx0ICovXG5cdF9tZXJnZU11bHRpcGxlQ29udGV4dHMob1BhZ2VDb250ZXh0OiBDb250ZXh0LCBhTGluZUNvbnRleHQ6IGFueVtdLCBzQ2hhcnRQYXRoOiBzdHJpbmcpIHtcblx0XHRsZXQgYUF0dHJpYnV0ZXM6IGFueVtdID0gW10sXG5cdFx0XHRhUGFnZUF0dHJpYnV0ZXMgPSBbXSxcblx0XHRcdG9Db250ZXh0LFxuXHRcdFx0c01ldGFQYXRoTGluZTogc3RyaW5nLFxuXHRcdFx0c1BhdGhMaW5lO1xuXG5cdFx0Y29uc3Qgc1BhZ2VQYXRoID0gb1BhZ2VDb250ZXh0LmdldFBhdGgoKTtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb1BhZ2VDb250ZXh0ICYmIG9QYWdlQ29udGV4dC5nZXRNb2RlbCgpICYmIG9QYWdlQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IHNNZXRhUGF0aFBhZ2UgPSBvTWV0YU1vZGVsICYmIG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoc1BhZ2VQYXRoKS5yZXBsYWNlKC9eXFwvKi8sIFwiXCIpO1xuXG5cdFx0Ly8gR2V0IHNpbmdsZSBsaW5lIGNvbnRleHQgaWYgbmVjZXNzYXJ5XG5cdFx0aWYgKGFMaW5lQ29udGV4dCAmJiBhTGluZUNvbnRleHQubGVuZ3RoKSB7XG5cdFx0XHRvQ29udGV4dCA9IGFMaW5lQ29udGV4dFswXTtcblx0XHRcdHNQYXRoTGluZSA9IG9Db250ZXh0LmdldFBhdGgoKTtcblx0XHRcdHNNZXRhUGF0aExpbmUgPSBvTWV0YU1vZGVsICYmIG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoc1BhdGhMaW5lKS5yZXBsYWNlKC9eXFwvKi8sIFwiXCIpO1xuXG5cdFx0XHRhTGluZUNvbnRleHQuZm9yRWFjaCgob1NpbmdsZUNvbnRleHQ6IGFueSkgPT4ge1xuXHRcdFx0XHRpZiAoc0NoYXJ0UGF0aCkge1xuXHRcdFx0XHRcdGNvbnN0IG9DaGFydENvbnRleHREYXRhID0gdGhpcy5fZ2V0Q2hhcnRDb250ZXh0RGF0YShvU2luZ2xlQ29udGV4dCwgc0NoYXJ0UGF0aCk7XG5cdFx0XHRcdFx0aWYgKG9DaGFydENvbnRleHREYXRhKSB7XG5cdFx0XHRcdFx0XHRhQXR0cmlidXRlcyA9IG9DaGFydENvbnRleHREYXRhLm1hcChmdW5jdGlvbiAob1N1YkNoYXJ0Q29udGV4dERhdGE6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnRleHREYXRhOiBvU3ViQ2hhcnRDb250ZXh0RGF0YSxcblx0XHRcdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IGAke3NNZXRhUGF0aFBhZ2V9LyR7c0NoYXJ0UGF0aH1gXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YUF0dHJpYnV0ZXMucHVzaCh7XG5cdFx0XHRcdFx0XHRjb250ZXh0RGF0YTogb1NpbmdsZUNvbnRleHQuZ2V0T2JqZWN0KCksXG5cdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IHNNZXRhUGF0aExpbmVcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGFQYWdlQXR0cmlidXRlcy5wdXNoKHtcblx0XHRcdGNvbnRleHREYXRhOiBvUGFnZUNvbnRleHQuZ2V0T2JqZWN0KCksXG5cdFx0XHRlbnRpdHlTZXQ6IHNNZXRhUGF0aFBhZ2Vcblx0XHR9KTtcblx0XHQvLyBBZGRpbmcgUGFnZSBDb250ZXh0IHRvIHNlbGVjdGlvbiB2YXJpYW50XG5cdFx0YVBhZ2VBdHRyaWJ1dGVzID0gdGhpcy5faW50ZW50QmFzZWROYXZpZ2F0aW9uLnJlbW92ZVNlbnNpdGl2ZURhdGEoYVBhZ2VBdHRyaWJ1dGVzLCBzTWV0YVBhdGhQYWdlKTtcblx0XHRjb25zdCBvUGFnZUxldmVsU1YgPSBDb21tb25VdGlscy5hZGRQYWdlQ29udGV4dFRvU2VsZWN0aW9uVmFyaWFudChuZXcgU2VsZWN0aW9uVmFyaWFudCgpLCBhUGFnZUF0dHJpYnV0ZXMsIHRoaXMuZ2V0VmlldygpKTtcblx0XHRhQXR0cmlidXRlcyA9IHRoaXMuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5yZW1vdmVTZW5zaXRpdmVEYXRhKGFBdHRyaWJ1dGVzLCBzTWV0YVBhdGhQYWdlKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VsZWN0aW9uVmFyaWFudDogb1BhZ2VMZXZlbFNWLFxuXHRcdFx0YXR0cmlidXRlczogYUF0dHJpYnV0ZXNcblx0XHR9O1xuXHR9XG5cblx0X2dldEJhdGNoR3JvdXBzRm9yVmlldygpIHtcblx0XHRjb25zdCBvVmlld0RhdGEgPSB0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSxcblx0XHRcdG9Db25maWd1cmF0aW9ucyA9IG9WaWV3RGF0YS5jb250cm9sQ29uZmlndXJhdGlvbixcblx0XHRcdGFDb25maWd1cmF0aW9ucyA9IG9Db25maWd1cmF0aW9ucyAmJiBPYmplY3Qua2V5cyhvQ29uZmlndXJhdGlvbnMpLFxuXHRcdFx0YUJhdGNoR3JvdXBzID0gW1wiJGF1dG8uSGVyb2VzXCIsIFwiJGF1dG8uRGVjb3JhdGlvblwiLCBcIiRhdXRvLldvcmtlcnNcIl07XG5cblx0XHRpZiAoYUNvbmZpZ3VyYXRpb25zICYmIGFDb25maWd1cmF0aW9ucy5sZW5ndGggPiAwKSB7XG5cdFx0XHRhQ29uZmlndXJhdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoc0tleTogYW55KSB7XG5cdFx0XHRcdGNvbnN0IG9Db25maWd1cmF0aW9uID0gb0NvbmZpZ3VyYXRpb25zW3NLZXldO1xuXHRcdFx0XHRpZiAob0NvbmZpZ3VyYXRpb24ucmVxdWVzdEdyb3VwSWQgPT09IFwiTG9uZ1J1bm5lcnNcIikge1xuXHRcdFx0XHRcdGFCYXRjaEdyb3Vwcy5wdXNoKFwiJGF1dG8uTG9uZ1J1bm5lcnNcIik7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gYUJhdGNoR3JvdXBzO1xuXHR9XG5cblx0Lypcblx0ICogUmVzZXQgQnJlYWRjcnVtYiBsaW5rc1xuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHtzYXAubS5CcmVhZGNydW1ic30gW29Tb3VyY2VdIHBhcmVudCBjb250cm9sXG5cdCAqIEBkZXNjcmlwdGlvbiBVc2VkIHdoZW4gY29udGV4dCBvZiB0aGUgb2JqZWN0IHBhZ2UgY2hhbmdlcy5cblx0ICogICAgICAgICAgICAgIFRoaXMgZXZlbnQgY2FsbGJhY2sgaXMgYXR0YWNoZWQgdG8gbW9kZWxDb250ZXh0Q2hhbmdlXG5cdCAqICAgICAgICAgICAgICBldmVudCBvZiB0aGUgQnJlYWRjcnVtYiBjb250cm9sIHRvIGNhdGNoIGNvbnRleHQgY2hhbmdlLlxuXHQgKiAgICAgICAgICAgICAgVGhlbiBlbGVtZW50IGJpbmRpbmcgYW5kIGhyZWZzIGFyZSB1cGRhdGVkIGZvciBlYWNoIGxpbmsuXG5cdCAqXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAZXhwZXJpbWVudGFsXG5cdCAqL1xuXHRhc3luYyBfc2V0QnJlYWRjcnVtYkxpbmtzKG9Tb3VyY2U6IEJyZWFkQ3J1bWJzKSB7XG5cdFx0Y29uc3Qgb0NvbnRleHQgPSBvU291cmNlLmdldEJpbmRpbmdDb250ZXh0KCksXG5cdFx0XHRvQXBwQ29tcG9uZW50ID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKSxcblx0XHRcdGFQcm9taXNlczogUHJvbWlzZTx2b2lkPltdID0gW10sXG5cdFx0XHRhU2tpcFBhcmFtZXRlcml6ZWQ6IGFueVtdID0gW10sXG5cdFx0XHRzTmV3UGF0aCA9IG9Db250ZXh0Py5nZXRQYXRoKCksXG5cdFx0XHRhUGF0aFBhcnRzID0gc05ld1BhdGg/LnNwbGl0KFwiL1wiKSA/PyBbXSxcblx0XHRcdG9NZXRhTW9kZWwgPSBvQXBwQ29tcG9uZW50ICYmIG9BcHBDb21wb25lbnQuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0bGV0IHNQYXRoID0gXCJcIjtcblx0XHR0cnkge1xuXHRcdFx0YVBhdGhQYXJ0cy5zaGlmdCgpO1xuXHRcdFx0YVBhdGhQYXJ0cy5zcGxpY2UoLTEsIDEpO1xuXHRcdFx0YVBhdGhQYXJ0cy5mb3JFYWNoKGZ1bmN0aW9uIChzUGF0aFBhcnQ6IGFueSkge1xuXHRcdFx0XHRzUGF0aCArPSBgLyR7c1BhdGhQYXJ0fWA7XG5cdFx0XHRcdGNvbnN0IG9Sb290Vmlld0NvbnRyb2xsZXIgPSBvQXBwQ29tcG9uZW50LmdldFJvb3RWaWV3Q29udHJvbGxlcigpO1xuXHRcdFx0XHRjb25zdCBzUGFyYW1ldGVyUGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoc1BhdGgpO1xuXHRcdFx0XHRjb25zdCBiUmVzdWx0Q29udGV4dCA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NQYXJhbWV0ZXJQYXRofS9AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlJlc3VsdENvbnRleHRgKTtcblx0XHRcdFx0aWYgKGJSZXN1bHRDb250ZXh0KSB7XG5cdFx0XHRcdFx0Ly8gV2UgZG9udCBuZWVkIHRvIGNyZWF0ZSBhIGJyZWFkY3J1bWIgZm9yIFBhcmFtZXRlciBwYXRoXG5cdFx0XHRcdFx0YVNraXBQYXJhbWV0ZXJpemVkLnB1c2goMSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGFTa2lwUGFyYW1ldGVyaXplZC5wdXNoKDApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGFQcm9taXNlcy5wdXNoKG9Sb290Vmlld0NvbnRyb2xsZXIuZ2V0VGl0bGVJbmZvRnJvbVBhdGgoc1BhdGgpKTtcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgdGl0bGVIaWVyYXJjaHlJbmZvczogYW55W10gPSBhd2FpdCBQcm9taXNlLmFsbChhUHJvbWlzZXMpO1xuXHRcdFx0bGV0IGlkeCwgaGllcmFyY2h5UG9zaXRpb24sIG9MaW5rO1xuXHRcdFx0Zm9yIChjb25zdCB0aXRsZUhpZXJhcmNoeUluZm8gb2YgdGl0bGVIaWVyYXJjaHlJbmZvcykge1xuXHRcdFx0XHRoaWVyYXJjaHlQb3NpdGlvbiA9IHRpdGxlSGllcmFyY2h5SW5mb3MuaW5kZXhPZih0aXRsZUhpZXJhcmNoeUluZm8pO1xuXHRcdFx0XHRpZHggPSBoaWVyYXJjaHlQb3NpdGlvbiAtIGFTa2lwUGFyYW1ldGVyaXplZFtoaWVyYXJjaHlQb3NpdGlvbl07XG5cdFx0XHRcdG9MaW5rID0gb1NvdXJjZS5nZXRMaW5rcygpW2lkeF0gPyBvU291cmNlLmdldExpbmtzKClbaWR4XSA6IG5ldyBMaW5rKCk7XG5cdFx0XHRcdC8vc0N1cnJlbnRFbnRpdHkgaXMgYSBmYWxsYmFjayB2YWx1ZSBpbiBjYXNlIG9mIGVtcHR5IHRpdGxlXG5cdFx0XHRcdG9MaW5rLnNldFRleHQodGl0bGVIaWVyYXJjaHlJbmZvLnN1YnRpdGxlIHx8IHRpdGxlSGllcmFyY2h5SW5mby50aXRsZSk7XG5cdFx0XHRcdC8vV2UgYXBwbHkgYW4gYWRkaXRpb25hbCBlbmNvZGVVUkkgaW4gY2FzZSBvZiBzcGVjaWFsIGNoYXJhY3RlcnMgKGllIFwiL1wiKSB1c2VkIGluIHRoZSB1cmwgdGhyb3VnaCB0aGUgc2VtYW50aWMga2V5c1xuXHRcdFx0XHRvTGluay5zZXRIcmVmKGVuY29kZVVSSSh0aXRsZUhpZXJhcmNoeUluZm8uaW50ZW50KSk7XG5cdFx0XHRcdGlmICghb1NvdXJjZS5nZXRMaW5rcygpW2lkeF0pIHtcblx0XHRcdFx0XHRvU291cmNlLmFkZExpbmsob0xpbmspO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyb3I6IGFueSkge1xuXHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgc2V0dGluZyB0aGUgYnJlYWRjcnVtYiBsaW5rczpcIiArIGVycm9yKTtcblx0XHR9XG5cdH1cblxuXHRfY2hlY2tEYXRhUG9pbnRUaXRsZUZvckV4dGVybmFsTmF2aWdhdGlvbigpIHtcblx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3Qgb0RhdGFQb2ludHMgPSBDb21tb25VdGlscy5nZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24oXG5cdFx0XHRvVmlldy5nZXRWaWV3RGF0YSgpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRcdFx0dGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb3V0aW5nU2VydmljZSgpLmdldE91dGJvdW5kcygpXG5cdFx0KTtcblx0XHRjb25zdCBvU2hlbGxTZXJ2aWNlcyA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0U2hlbGxTZXJ2aWNlcygpO1xuXHRcdGNvbnN0IG9QYWdlQ29udGV4dCA9IG9WaWV3ICYmIChvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImlzSGVhZGVyRFBMaW5rVmlzaWJsZVwiLCB7fSk7XG5cdFx0aWYgKG9QYWdlQ29udGV4dCkge1xuXHRcdFx0b1BhZ2VDb250ZXh0XG5cdFx0XHRcdC5yZXF1ZXN0T2JqZWN0KClcblx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKG9EYXRhOiBhbnkpIHtcblx0XHRcdFx0XHRmbkdldExpbmtzKG9EYXRhUG9pbnRzLCBvRGF0YSk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgcmV0cmlldmUgdGhlIGxpbmtzIGZyb20gdGhlIHNoZWxsIHNlcnZpY2VcIiwgb0Vycm9yKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogQHBhcmFtIG9FcnJvclxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIGZuT25FcnJvcihvRXJyb3I6IGFueSkge1xuXHRcdFx0TG9nLmVycm9yKG9FcnJvcik7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gZm5TZXRMaW5rRW5hYmxlbWVudChpZDogc3RyaW5nLCBhU3VwcG9ydGVkTGlua3M6IGFueSkge1xuXHRcdFx0Y29uc3Qgc0xpbmtJZCA9IGlkO1xuXHRcdFx0Ly8gcHJvY2VzcyB2aWFibGUgbGlua3MgZnJvbSBnZXRMaW5rcyBmb3IgYWxsIGRhdGFwb2ludHMgaGF2aW5nIG91dGJvdW5kXG5cdFx0XHRpZiAoYVN1cHBvcnRlZExpbmtzICYmIGFTdXBwb3J0ZWRMaW5rcy5sZW5ndGggPT09IDEgJiYgYVN1cHBvcnRlZExpbmtzWzBdLnN1cHBvcnRlZCkge1xuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYGlzSGVhZGVyRFBMaW5rVmlzaWJsZS8ke3NMaW5rSWR9YCwgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogQHBhcmFtIG9TdWJEYXRhUG9pbnRzXG5cdFx0ICogQHBhcmFtIG9QYWdlRGF0YVxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIGZuR2V0TGlua3Mob1N1YkRhdGFQb2ludHM6IGFueSwgb1BhZ2VEYXRhOiBhbnkpIHtcblx0XHRcdGZvciAoY29uc3Qgc0lkIGluIG9TdWJEYXRhUG9pbnRzKSB7XG5cdFx0XHRcdGNvbnN0IG9EYXRhUG9pbnQgPSBvU3ViRGF0YVBvaW50c1tzSWRdO1xuXHRcdFx0XHRjb25zdCBvUGFyYW1zOiBhbnkgPSB7fTtcblx0XHRcdFx0Y29uc3Qgb0xpbmsgPSBvVmlldy5ieUlkKHNJZCk7XG5cdFx0XHRcdGlmICghb0xpbmspIHtcblx0XHRcdFx0XHQvLyBmb3IgZGF0YSBwb2ludHMgY29uZmlndXJlZCBpbiBhcHAgZGVzY3JpcHRvciBidXQgbm90IGFubm90YXRlZCBpbiB0aGUgaGVhZGVyXG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3Qgb0xpbmtDb250ZXh0ID0gb0xpbmsuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRcdFx0Y29uc3Qgb0xpbmtEYXRhOiBhbnkgPSBvTGlua0NvbnRleHQgJiYgb0xpbmtDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0XHRsZXQgb01peGVkQ29udGV4dDogYW55ID0gbWVyZ2Uoe30sIG9QYWdlRGF0YSwgb0xpbmtEYXRhKTtcblx0XHRcdFx0Ly8gcHJvY2VzcyBzZW1hbnRpYyBvYmplY3QgbWFwcGluZ3Ncblx0XHRcdFx0aWYgKG9EYXRhUG9pbnQuc2VtYW50aWNPYmplY3RNYXBwaW5nKSB7XG5cdFx0XHRcdFx0Y29uc3QgYVNlbWFudGljT2JqZWN0TWFwcGluZyA9IG9EYXRhUG9pbnQuc2VtYW50aWNPYmplY3RNYXBwaW5nO1xuXHRcdFx0XHRcdGZvciAoY29uc3QgaXRlbSBpbiBhU2VtYW50aWNPYmplY3RNYXBwaW5nKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBvTWFwcGluZyA9IGFTZW1hbnRpY09iamVjdE1hcHBpbmdbaXRlbV07XG5cdFx0XHRcdFx0XHRjb25zdCBzTWFpblByb3BlcnR5ID0gb01hcHBpbmdbXCJMb2NhbFByb3BlcnR5XCJdW1wiJFByb3BlcnR5UGF0aFwiXTtcblx0XHRcdFx0XHRcdGNvbnN0IHNNYXBwZWRQcm9wZXJ0eSA9IG9NYXBwaW5nW1wiU2VtYW50aWNPYmplY3RQcm9wZXJ0eVwiXTtcblx0XHRcdFx0XHRcdGlmIChzTWFpblByb3BlcnR5ICE9PSBzTWFwcGVkUHJvcGVydHkpIHtcblx0XHRcdFx0XHRcdFx0aWYgKG9NaXhlZENvbnRleHQuaGFzT3duUHJvcGVydHkoc01haW5Qcm9wZXJ0eSkpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBvTmV3TWFwcGluZzogYW55ID0ge307XG5cdFx0XHRcdFx0XHRcdFx0b05ld01hcHBpbmdbc01hcHBlZFByb3BlcnR5XSA9IG9NaXhlZENvbnRleHRbc01haW5Qcm9wZXJ0eV07XG5cdFx0XHRcdFx0XHRcdFx0b01peGVkQ29udGV4dCA9IG1lcmdlKHt9LCBvTWl4ZWRDb250ZXh0LCBvTmV3TWFwcGluZyk7XG5cdFx0XHRcdFx0XHRcdFx0ZGVsZXRlIG9NaXhlZENvbnRleHRbc01haW5Qcm9wZXJ0eV07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAob01peGVkQ29udGV4dCkge1xuXHRcdFx0XHRcdGZvciAoY29uc3Qgc0tleSBpbiBvTWl4ZWRDb250ZXh0KSB7XG5cdFx0XHRcdFx0XHRpZiAoc0tleS5pbmRleE9mKFwiX1wiKSAhPT0gMCAmJiBzS2V5LmluZGV4T2YoXCJvZGF0YS5jb250ZXh0XCIpID09PSAtMSkge1xuXHRcdFx0XHRcdFx0XHRvUGFyYW1zW3NLZXldID0gb01peGVkQ29udGV4dFtzS2V5XTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gdmFsaWRhdGUgaWYgYSBsaW5rIG11c3QgYmUgcmVuZGVyZWRcblx0XHRcdFx0b1NoZWxsU2VydmljZXNcblx0XHRcdFx0XHQuaXNOYXZpZ2F0aW9uU3VwcG9ydGVkKFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0OiB7XG5cdFx0XHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IG9EYXRhUG9pbnQuc2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0XHRcdFx0YWN0aW9uOiBvRGF0YVBvaW50LmFjdGlvblxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRwYXJhbXM6IG9QYXJhbXNcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRdKVxuXHRcdFx0XHRcdC50aGVuKChhTGlua3MpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiBmblNldExpbmtFbmFibGVtZW50KHNJZCwgYUxpbmtzKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmbk9uRXJyb3IpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGhhbmRsZXJzID0ge1xuXHRcdC8qKlxuXHRcdCAqIEludm9rZXMgdGhlIHBhZ2UgcHJpbWFyeSBhY3Rpb24gb24gcHJlc3Mgb2YgQ3RybCtFbnRlci5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSBvQ29udHJvbGxlciBUaGUgcGFnZSBjb250cm9sbGVyXG5cdFx0ICogQHBhcmFtIG9WaWV3XG5cdFx0ICogQHBhcmFtIG9Db250ZXh0IENvbnRleHQgZm9yIHdoaWNoIHRoZSBhY3Rpb24gaXMgY2FsbGVkXG5cdFx0ICogQHBhcmFtIHNBY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb24gdG8gYmUgY2FsbGVkXG5cdFx0ICogQHBhcmFtIFttUGFyYW1ldGVyc10gQ29udGFpbnMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuXHRcdCAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuY29udGV4dHNdIE1hbmRhdG9yeSBmb3IgYSBib3VuZCBhY3Rpb24sIGVpdGhlciBvbmUgY29udGV4dCBvciBhbiBhcnJheSB3aXRoIGNvbnRleHRzIGZvciB3aGljaCB0aGUgYWN0aW9uIGlzIGNhbGxlZFxuXHRcdCAqIEBwYXJhbSBbbVBhcmFtZXRlcnMubW9kZWxdIE1hbmRhdG9yeSBmb3IgYW4gdW5ib3VuZCBhY3Rpb247IGFuIGluc3RhbmNlIG9mIGFuIE9EYXRhIFY0IG1vZGVsXG5cdFx0ICogQHBhcmFtIFttQ29uZGl0aW9uc10gQ29udGFpbnMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuXHRcdCAqIEBwYXJhbSBbbUNvbmRpdGlvbnMucG9zaXRpdmVBY3Rpb25WaXNpYmxlXSBUaGUgdmlzaWJpbGl0eSBvZiBzZW1hdGljIHBvc2l0aXZlIGFjdGlvblxuXHRcdCAqIEBwYXJhbSBbbUNvbmRpdGlvbnMucG9zaXRpdmVBY3Rpb25FbmFibGVkXSBUaGUgZW5hYmxlbWVudCBvZiBzZW1hbnRpYyBwb3NpdGl2ZSBhY3Rpb25cblx0XHQgKiBAcGFyYW0gW21Db25kaXRpb25zLmVkaXRBY3Rpb25WaXNpYmxlXSBUaGUgRWRpdCBidXR0b24gdmlzaWJpbGl0eVxuXHRcdCAqIEBwYXJhbSBbbUNvbmRpdGlvbnMuZWRpdEFjdGlvbkVuYWJsZWRdIFRoZSBlbmFibGVtZW50IG9mIEVkaXQgYnV0dG9uXG5cdFx0ICogQHVpNS1yZXN0cmljdGVkXG5cdFx0ICogQGZpbmFsXG5cdFx0ICovXG5cdFx0b25QcmltYXJ5QWN0aW9uKFxuXHRcdFx0b0NvbnRyb2xsZXI6IE9iamVjdFBhZ2VDb250cm9sbGVyLFxuXHRcdFx0b1ZpZXc6IFZpZXcsXG5cdFx0XHRvQ29udGV4dDogQ29udGV4dCxcblx0XHRcdHNBY3Rpb25OYW1lOiBzdHJpbmcsXG5cdFx0XHRtUGFyYW1ldGVyczogdW5rbm93bixcblx0XHRcdG1Db25kaXRpb25zOiB7XG5cdFx0XHRcdHBvc2l0aXZlQWN0aW9uVmlzaWJsZTogYm9vbGVhbjtcblx0XHRcdFx0cG9zaXRpdmVBY3Rpb25FbmFibGVkOiBib29sZWFuO1xuXHRcdFx0XHRlZGl0QWN0aW9uVmlzaWJsZTogYm9vbGVhbjtcblx0XHRcdFx0ZWRpdEFjdGlvbkVuYWJsZWQ6IGJvb2xlYW47XG5cdFx0XHR9XG5cdFx0KSB7XG5cdFx0XHRjb25zdCBpVmlld0xldmVsID0gKG9Db250cm9sbGVyLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkudmlld0xldmVsLFxuXHRcdFx0XHRvT2JqZWN0UGFnZSA9IG9Db250cm9sbGVyLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdFx0aWYgKG1Db25kaXRpb25zLnBvc2l0aXZlQWN0aW9uVmlzaWJsZSkge1xuXHRcdFx0XHRpZiAobUNvbmRpdGlvbnMucG9zaXRpdmVBY3Rpb25FbmFibGVkKSB7XG5cdFx0XHRcdFx0b0NvbnRyb2xsZXIuaGFuZGxlcnMub25DYWxsQWN0aW9uKG9WaWV3LCBzQWN0aW9uTmFtZSwgbVBhcmFtZXRlcnMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKG1Db25kaXRpb25zLmVkaXRBY3Rpb25WaXNpYmxlKSB7XG5cdFx0XHRcdGlmIChtQ29uZGl0aW9ucy5lZGl0QWN0aW9uRW5hYmxlZCkge1xuXHRcdFx0XHRcdG9Db250cm9sbGVyLl9lZGl0RG9jdW1lbnQob0NvbnRleHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGlWaWV3TGV2ZWwgPT09IDEgJiYgb09iamVjdFBhZ2UuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpKSB7XG5cdFx0XHRcdG9Db250cm9sbGVyLl9zYXZlRG9jdW1lbnQob0NvbnRleHQpO1xuXHRcdFx0fSBlbHNlIGlmIChvT2JqZWN0UGFnZS5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIikpIHtcblx0XHRcdFx0b0NvbnRyb2xsZXIuX2FwcGx5RG9jdW1lbnQob0NvbnRleHQpO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRvblRhYmxlQ29udGV4dENoYW5nZSh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlciwgb0V2ZW50OiBhbnkpIHtcblx0XHRcdGNvbnN0IG9Tb3VyY2UgPSBvRXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0XHRsZXQgb1RhYmxlOiBhbnk7XG5cdFx0XHR0aGlzLl9maW5kVGFibGVzKCkuc29tZShmdW5jdGlvbiAoX29UYWJsZTogYW55KSB7XG5cdFx0XHRcdGlmIChfb1RhYmxlLmdldFJvd0JpbmRpbmcoKSA9PT0gb1NvdXJjZSkge1xuXHRcdFx0XHRcdG9UYWJsZSA9IF9vVGFibGU7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSk7XG5cblx0XHRcdC8vIHNldCBjb3JyZWN0IGJpbmRpbmcgY29udGV4dCBmb3IgZmFzdCBjcmVhdGlvbiByb3dcblx0XHRcdGNvbnN0IGZhc3RDcmVhdGlvblJvdyA9IG9UYWJsZS5nZXRDcmVhdGlvblJvdygpO1xuXG5cdFx0XHRpZiAoZmFzdENyZWF0aW9uUm93ICYmICFmYXN0Q3JlYXRpb25Sb3cuX29Jbm5lckNyZWF0aW9uUm93Py5nZXRCaW5kaW5nQ29udGV4dCgpKSB7XG5cdFx0XHRcdGNvbnN0IHRhYmxlQmluZGluZyA9IHRoaXMuX2dldFRhYmxlQmluZGluZyhvVGFibGUpO1xuXG5cdFx0XHRcdGlmICghdGFibGVCaW5kaW5nKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKGBFeHBlY3RlZCBiaW5kaW5nIG1pc3NpbmcgZm9yIHRhYmxlOiAke29UYWJsZS5nZXRJZCgpfWApO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh0YWJsZUJpbmRpbmcuZ2V0Q29udGV4dCgpKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0XHRcdFx0Y29uc3QgYmluZGluZ0NvbnRleHQgPSBvYmplY3RQYWdlLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dDtcblx0XHRcdFx0XHRjb25zdCBtb2RlbCA9IGJpbmRpbmdDb250ZXh0LmdldE1vZGVsKCk7XG5cblx0XHRcdFx0XHRUYWJsZUhlbHBlci5lbmFibGVGYXN0Q3JlYXRpb25Sb3coXG5cdFx0XHRcdFx0XHRmYXN0Q3JlYXRpb25Sb3csXG5cdFx0XHRcdFx0XHR0YWJsZUJpbmRpbmcuZ2V0UGF0aCgpLFxuXHRcdFx0XHRcdFx0dGFibGVCaW5kaW5nLmdldENvbnRleHQoKSxcblx0XHRcdFx0XHRcdG1vZGVsLFxuXHRcdFx0XHRcdFx0b1RhYmxlLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qgb0N1cnJlbnRBY3Rpb25Qcm9taXNlID0gdGhpcy5lZGl0Rmxvdy5nZXRDdXJyZW50QWN0aW9uUHJvbWlzZSgpO1xuXG5cdFx0XHRpZiAob0N1cnJlbnRBY3Rpb25Qcm9taXNlKSB7XG5cdFx0XHRcdGxldCBhVGFibGVDb250ZXh0czogYW55O1xuXHRcdFx0XHRpZiAob1RhYmxlLmdldFR5cGUoKS5nZXRNZXRhZGF0YSgpLmlzQShcInNhcC51aS5tZGMudGFibGUuR3JpZFRhYmxlVHlwZVwiKSkge1xuXHRcdFx0XHRcdGFUYWJsZUNvbnRleHRzID0gb1NvdXJjZS5nZXRDb250ZXh0cygwKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhVGFibGVDb250ZXh0cyA9IG9Tb3VyY2UuZ2V0Q3VycmVudENvbnRleHRzKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly9pZiBjb250ZXh0cyBhcmUgbm90IGZ1bGx5IGxvYWRlZCB0aGUgZ2V0Y29udGV4dHMgZnVuY3Rpb24gYWJvdmUgd2lsbCB0cmlnZ2VyIGEgbmV3IGNoYW5nZSBldmVudCBjYWxsXG5cdFx0XHRcdGlmICghYVRhYmxlQ29udGV4dHNbMF0pIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0b0N1cnJlbnRBY3Rpb25Qcm9taXNlXG5cdFx0XHRcdFx0LnRoZW4oKG9BY3Rpb25SZXNwb25zZTogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoIW9BY3Rpb25SZXNwb25zZSB8fCBvQWN0aW9uUmVzcG9uc2UuY29udHJvbElkICE9PSBvVGFibGUuc0lkKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGNvbnN0IG9BY3Rpb25EYXRhID0gb0FjdGlvblJlc3BvbnNlLm9EYXRhO1xuXHRcdFx0XHRcdFx0Y29uc3QgYUtleXMgPSBvQWN0aW9uUmVzcG9uc2Uua2V5cztcblx0XHRcdFx0XHRcdGxldCBpTmV3SXRlbXAgPSAtMTtcblx0XHRcdFx0XHRcdGFUYWJsZUNvbnRleHRzLmZpbmQoZnVuY3Rpb24gKG9UYWJsZUNvbnRleHQ6IGFueSwgaTogYW55KSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9UYWJsZURhdGEgPSBvVGFibGVDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBiQ29tcGFyZSA9IGFLZXlzLmV2ZXJ5KGZ1bmN0aW9uIChzS2V5OiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gb1RhYmxlRGF0YVtzS2V5XSA9PT0gb0FjdGlvbkRhdGFbc0tleV07XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRpZiAoYkNvbXBhcmUpIHtcblx0XHRcdFx0XHRcdFx0XHRpTmV3SXRlbXAgPSBpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiBiQ29tcGFyZTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0aWYgKGlOZXdJdGVtcCAhPT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYURpYWxvZ3MgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0T3BlbkRpYWxvZ3MoKTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb0RpYWxvZyA9XG5cdFx0XHRcdFx0XHRcdFx0YURpYWxvZ3MubGVuZ3RoID4gMCA/IGFEaWFsb2dzLmZpbmQoKGRpYWxvZykgPT4gZGlhbG9nLmRhdGEoXCJGdWxsU2NyZWVuRGlhbG9nXCIpICE9PSB0cnVlKSA6IG51bGw7XG5cdFx0XHRcdFx0XHRcdGlmIChvRGlhbG9nKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gYnkgZGVzaWduLCBhIHNhcC5tLmRpYWxvZyBzZXQgdGhlIGZvY3VzIHRvIHRoZSBwcmV2aW91cyBmb2N1c2VkIGVsZW1lbnQgd2hlbiBjbG9zaW5nLlxuXHRcdFx0XHRcdFx0XHRcdC8vIHdlIHNob3VsZCB3YWl0IGZvciB0aGUgZGlhbG9nIHRvIGJlIGNsb3NlIGJlZm9yZSB0byBmb2N1cyBhbm90aGVyIGVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRvRGlhbG9nLmF0dGFjaEV2ZW50T25jZShcImFmdGVyQ2xvc2VcIiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0b1RhYmxlLmZvY3VzUm93KGlOZXdJdGVtcCwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0b1RhYmxlLmZvY3VzUm93KGlOZXdJdGVtcCwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0dGhpcy5lZGl0Rmxvdy5kZWxldGVDdXJyZW50QWN0aW9uUHJvbWlzZSgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnI6IGFueSkge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKGBBbiBlcnJvciBvY2N1cnMgd2hpbGUgc2Nyb2xsaW5nIHRvIHRoZSBuZXdseSBjcmVhdGVkIEl0ZW06ICR7ZXJyfWApO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0Ly8gZmlyZSBNb2RlbENvbnRleHRDaGFuZ2Ugb24gdGhlIG1lc3NhZ2UgYnV0dG9uIHdoZW5ldmVyIHRoZSB0YWJsZSBjb250ZXh0IGNoYW5nZXNcblx0XHRcdHRoaXMubWVzc2FnZUJ1dHRvbi5maXJlTW9kZWxDb250ZXh0Q2hhbmdlKCk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEludm9rZXMgYW4gYWN0aW9uIC0gYm91bmQvdW5ib3VuZCBhbmQgc2V0cyB0aGUgcGFnZSBkaXJ0eS5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSBvVmlld1xuXHRcdCAqIEBwYXJhbSBzQWN0aW9uTmFtZSBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uIHRvIGJlIGNhbGxlZFxuXHRcdCAqIEBwYXJhbSBbbVBhcmFtZXRlcnNdIENvbnRhaW5zIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcblx0XHQgKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmNvbnRleHRzXSBNYW5kYXRvcnkgZm9yIGEgYm91bmQgYWN0aW9uLCBlaXRoZXIgb25lIGNvbnRleHQgb3IgYW4gYXJyYXkgd2l0aCBjb250ZXh0cyBmb3Igd2hpY2ggdGhlIGFjdGlvbiBpcyBjYWxsZWRcblx0XHQgKiBAcGFyYW0gW21QYXJhbWV0ZXJzLm1vZGVsXSBNYW5kYXRvcnkgZm9yIGFuIHVuYm91bmQgYWN0aW9uOyBhbiBpbnN0YW5jZSBvZiBhbiBPRGF0YSBWNCBtb2RlbFxuXHRcdCAqIEByZXR1cm5zIFRoZSBhY3Rpb24gcHJvbWlzZVxuXHRcdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHRcdCAqIEBmaW5hbFxuXHRcdCAqL1xuXHRcdG9uQ2FsbEFjdGlvbihvVmlldzogYW55LCBzQWN0aW9uTmFtZTogc3RyaW5nLCBtUGFyYW1ldGVyczogYW55KSB7XG5cdFx0XHRjb25zdCBvQ29udHJvbGxlciA9IG9WaWV3LmdldENvbnRyb2xsZXIoKTtcblx0XHRcdHJldHVybiBvQ29udHJvbGxlci5lZGl0Rmxvd1xuXHRcdFx0XHQuaW52b2tlQWN0aW9uKHNBY3Rpb25OYW1lLCBtUGFyYW1ldGVycylcblx0XHRcdFx0LnRoZW4ob0NvbnRyb2xsZXIuX3Nob3dNZXNzYWdlUG9wb3Zlci5iaW5kKG9Db250cm9sbGVyLCB1bmRlZmluZWQpKVxuXHRcdFx0XHQuY2F0Y2gob0NvbnRyb2xsZXIuX3Nob3dNZXNzYWdlUG9wb3Zlci5iaW5kKG9Db250cm9sbGVyKSk7XG5cdFx0fSxcblx0XHRvbkRhdGFQb2ludFRpdGxlUHJlc3NlZChvQ29udHJvbGxlcjogYW55LCBvU291cmNlOiBhbnksIG9NYW5pZmVzdE91dGJvdW5kOiBhbnksIHNDb250cm9sQ29uZmlnOiBhbnksIHNDb2xsZWN0aW9uUGF0aDogYW55KSB7XG5cdFx0XHRvTWFuaWZlc3RPdXRib3VuZCA9IHR5cGVvZiBvTWFuaWZlc3RPdXRib3VuZCA9PT0gXCJzdHJpbmdcIiA/IEpTT04ucGFyc2Uob01hbmlmZXN0T3V0Ym91bmQpIDogb01hbmlmZXN0T3V0Ym91bmQ7XG5cdFx0XHRjb25zdCBvVGFyZ2V0SW5mbyA9IG9NYW5pZmVzdE91dGJvdW5kW3NDb250cm9sQ29uZmlnXSxcblx0XHRcdFx0YVNlbWFudGljT2JqZWN0TWFwcGluZyA9IENvbW1vblV0aWxzLmdldFNlbWFudGljT2JqZWN0TWFwcGluZyhvVGFyZ2V0SW5mbyksXG5cdFx0XHRcdG9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHQgPSBvU291cmNlLmdldEJpbmRpbmdDb250ZXh0KCksXG5cdFx0XHRcdHNNZXRhUGF0aCA9IG9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHRcblx0XHRcdFx0XHQuZ2V0TW9kZWwoKVxuXHRcdFx0XHRcdC5nZXRNZXRhTW9kZWwoKVxuXHRcdFx0XHRcdC5nZXRNZXRhUGF0aChvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0LmdldFBhdGgoKSk7XG5cdFx0XHRsZXQgYU5hdmlnYXRpb25EYXRhID0gb0NvbnRyb2xsZXIuX2dldENoYXJ0Q29udGV4dERhdGEob0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dCwgc0NvbGxlY3Rpb25QYXRoKTtcblx0XHRcdGxldCBhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnM7XG5cblx0XHRcdGFOYXZpZ2F0aW9uRGF0YSA9IGFOYXZpZ2F0aW9uRGF0YS5tYXAoZnVuY3Rpb24gKG9OYXZpZ2F0aW9uRGF0YTogYW55KSB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0ZGF0YTogb05hdmlnYXRpb25EYXRhLFxuXHRcdFx0XHRcdG1ldGFQYXRoOiBzTWV0YVBhdGggKyAoc0NvbGxlY3Rpb25QYXRoID8gYC8ke3NDb2xsZWN0aW9uUGF0aH1gIDogXCJcIilcblx0XHRcdFx0fTtcblx0XHRcdH0pO1xuXHRcdFx0aWYgKG9UYXJnZXRJbmZvICYmIG9UYXJnZXRJbmZvLnBhcmFtZXRlcnMpIHtcblx0XHRcdFx0Y29uc3Qgb1BhcmFtcyA9IG9UYXJnZXRJbmZvLnBhcmFtZXRlcnMgJiYgb0NvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5nZXRPdXRib3VuZFBhcmFtcyhvVGFyZ2V0SW5mby5wYXJhbWV0ZXJzKTtcblx0XHRcdFx0aWYgKE9iamVjdC5rZXlzKG9QYXJhbXMpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnMgPSBvUGFyYW1zO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAob1RhcmdldEluZm8gJiYgb1RhcmdldEluZm8uc2VtYW50aWNPYmplY3QgJiYgb1RhcmdldEluZm8uYWN0aW9uKSB7XG5cdFx0XHRcdG9Db250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ubmF2aWdhdGUob1RhcmdldEluZm8uc2VtYW50aWNPYmplY3QsIG9UYXJnZXRJbmZvLmFjdGlvbiwge1xuXHRcdFx0XHRcdG5hdmlnYXRpb25Db250ZXh0czogYU5hdmlnYXRpb25EYXRhLFxuXHRcdFx0XHRcdHNlbWFudGljT2JqZWN0TWFwcGluZzogYVNlbWFudGljT2JqZWN0TWFwcGluZyxcblx0XHRcdFx0XHRhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnM6IGFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVyc1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIFRyaWdnZXJzIGFuIG91dGJvdW5kIG5hdmlnYXRpb24gd2hlbiBhIHVzZXIgY2hvb3NlcyB0aGUgY2hldnJvbi5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSBvQ29udHJvbGxlclxuXHRcdCAqIEBwYXJhbSBzT3V0Ym91bmRUYXJnZXQgTmFtZSBvZiB0aGUgb3V0Ym91bmQgdGFyZ2V0IChuZWVkcyB0byBiZSBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdClcblx0XHQgKiBAcGFyYW0gb0NvbnRleHQgVGhlIGNvbnRleHQgdGhhdCBjb250YWlucyB0aGUgZGF0YSBmb3IgdGhlIHRhcmdldCBhcHBcblx0XHQgKiBAcGFyYW0gc0NyZWF0ZVBhdGggQ3JlYXRlIHBhdGggd2hlbiB0aGUgY2hldnJvbiBpcyBjcmVhdGVkLlxuXHRcdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggaXMgcmVzb2x2ZWQgb25jZSB0aGUgbmF2aWdhdGlvbiBpcyB0cmlnZ2VyZWQgKD8/PyBtYXliZSBvbmx5IG9uY2UgZmluaXNoZWQ/KVxuXHRcdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHRcdCAqIEBmaW5hbFxuXHRcdCAqL1xuXHRcdG9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZChvQ29udHJvbGxlcjogT2JqZWN0UGFnZUNvbnRyb2xsZXIsIHNPdXRib3VuZFRhcmdldDogc3RyaW5nLCBvQ29udGV4dDogYW55LCBzQ3JlYXRlUGF0aDogc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gb0NvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5vbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQob0NvbnRyb2xsZXIsIHNPdXRib3VuZFRhcmdldCwgb0NvbnRleHQsIHNDcmVhdGVQYXRoKTtcblx0XHR9LFxuXG5cdFx0b25OYXZpZ2F0ZUNoYW5nZSh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlciwgb0V2ZW50OiBhbnkpIHtcblx0XHRcdC8vd2lsbCBiZSBjYWxsZWQgYWx3YXlzIHdoZW4gd2UgY2xpY2sgb24gYSBzZWN0aW9uIHRhYlxuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0dGhpcy5iU2VjdGlvbk5hdmlnYXRlZCA9IHRydWU7XG5cblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdG9PYmplY3RQYWdlLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKSAmJlxuXHRcdFx0XHQodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLnNlY3Rpb25MYXlvdXQgPT09IFwiVGFic1wiICYmXG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImVycm9yTmF2aWdhdGlvblNlY3Rpb25GbGFnXCIpID09PSBmYWxzZVxuXHRcdFx0KSB7XG5cdFx0XHRcdGNvbnN0IG9TdWJTZWN0aW9uID0gb0V2ZW50LmdldFBhcmFtZXRlcihcInN1YlNlY3Rpb25cIik7XG5cdFx0XHRcdHRoaXMuX3VwZGF0ZUZvY3VzSW5FZGl0TW9kZShbb1N1YlNlY3Rpb25dKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdG9uVmFyaWFudFNlbGVjdGVkOiBmdW5jdGlvbiAodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIpIHtcblx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHR9LFxuXHRcdG9uVmFyaWFudFNhdmVkOiBmdW5jdGlvbiAodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIpIHtcblx0XHRcdC8vVE9ETzogU2hvdWxkIHJlbW92ZSB0aGlzIHNldFRpbWVPdXQgb25jZSBWYXJpYW50IE1hbmFnZW1lbnQgcHJvdmlkZXMgYW4gYXBpIHRvIGZldGNoIHRoZSBjdXJyZW50IHZhcmlhbnQga2V5IG9uIHNhdmVcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0XHR9LCAyMDAwKTtcblx0XHR9LFxuXHRcdG5hdmlnYXRlVG9TdWJTZWN0aW9uOiBmdW5jdGlvbiAob0NvbnRyb2xsZXI6IE9iamVjdFBhZ2VDb250cm9sbGVyLCB2RGV0YWlsQ29uZmlnOiBhbnkpIHtcblx0XHRcdGNvbnN0IG9EZXRhaWxDb25maWcgPSB0eXBlb2YgdkRldGFpbENvbmZpZyA9PT0gXCJzdHJpbmdcIiA/IEpTT04ucGFyc2UodkRldGFpbENvbmZpZykgOiB2RGV0YWlsQ29uZmlnO1xuXHRcdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSBvQ29udHJvbGxlci5nZXRWaWV3KCkuYnlJZChcImZlOjpPYmplY3RQYWdlXCIpIGFzIE9iamVjdFBhZ2VMYXlvdXQ7XG5cdFx0XHRsZXQgb1NlY3Rpb247XG5cdFx0XHRsZXQgb1N1YlNlY3Rpb247XG5cdFx0XHRpZiAob0RldGFpbENvbmZpZy5zZWN0aW9uSWQpIHtcblx0XHRcdFx0b1NlY3Rpb24gPSBvQ29udHJvbGxlci5nZXRWaWV3KCkuYnlJZChvRGV0YWlsQ29uZmlnLnNlY3Rpb25JZCkgYXMgT2JqZWN0UGFnZVNlY3Rpb247XG5cdFx0XHRcdG9TdWJTZWN0aW9uID0gKFxuXHRcdFx0XHRcdG9EZXRhaWxDb25maWcuc3ViU2VjdGlvbklkXG5cdFx0XHRcdFx0XHQ/IG9Db250cm9sbGVyLmdldFZpZXcoKS5ieUlkKG9EZXRhaWxDb25maWcuc3ViU2VjdGlvbklkKVxuXHRcdFx0XHRcdFx0OiBvU2VjdGlvbiAmJiBvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpICYmIG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKClbMF1cblx0XHRcdFx0KSBhcyBPYmplY3RQYWdlU3ViU2VjdGlvbjtcblx0XHRcdH0gZWxzZSBpZiAob0RldGFpbENvbmZpZy5zdWJTZWN0aW9uSWQpIHtcblx0XHRcdFx0b1N1YlNlY3Rpb24gPSBvQ29udHJvbGxlci5nZXRWaWV3KCkuYnlJZChvRGV0YWlsQ29uZmlnLnN1YlNlY3Rpb25JZCkgYXMgT2JqZWN0UGFnZVN1YlNlY3Rpb247XG5cdFx0XHRcdG9TZWN0aW9uID0gb1N1YlNlY3Rpb24gJiYgKG9TdWJTZWN0aW9uLmdldFBhcmVudCgpIGFzIE9iamVjdFBhZ2VTZWN0aW9uKTtcblx0XHRcdH1cblx0XHRcdGlmICghb1NlY3Rpb24gfHwgIW9TdWJTZWN0aW9uIHx8ICFvU2VjdGlvbi5nZXRWaXNpYmxlKCkgfHwgIW9TdWJTZWN0aW9uLmdldFZpc2libGUoKSkge1xuXHRcdFx0XHRjb25zdCBzVGl0bGUgPSBnZXRSZXNvdXJjZU1vZGVsKG9Db250cm9sbGVyKS5nZXRUZXh0KFxuXHRcdFx0XHRcdFwiQ19ST1VUSU5HX05BVklHQVRJT05fRElTQUJMRURfVElUTEVcIixcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0KG9Db250cm9sbGVyLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkuZW50aXR5U2V0XG5cdFx0XHRcdCk7XG5cdFx0XHRcdExvZy5lcnJvcihzVGl0bGUpO1xuXHRcdFx0XHRNZXNzYWdlQm94LmVycm9yKHNUaXRsZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvT2JqZWN0UGFnZS5zY3JvbGxUb1NlY3Rpb24ob1N1YlNlY3Rpb24uZ2V0SWQoKSk7XG5cdFx0XHRcdC8vIHRyaWdnZXIgaWFwcCBzdGF0ZSBjaGFuZ2Vcblx0XHRcdFx0b09iamVjdFBhZ2UuZmlyZU5hdmlnYXRlKHtcblx0XHRcdFx0XHRzZWN0aW9uOiBvU2VjdGlvbixcblx0XHRcdFx0XHRzdWJTZWN0aW9uOiBvU3ViU2VjdGlvblxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0b25TdGF0ZUNoYW5nZSh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlcikge1xuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdH0sXG5cdFx0Y2xvc2VPUE1lc3NhZ2VTdHJpcDogZnVuY3Rpb24gKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyKSB7XG5cdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLmhpZGVNZXNzYWdlKCk7XG5cdFx0fVxuXHR9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBPYmplY3RQYWdlQ29udHJvbGxlcjtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQTZEQSxNQUFNQSxnQkFBZ0IsR0FBR0MsU0FBUyxDQUFDRCxnQkFBZ0I7RUFBQyxJQUU5Q0Usb0JBQW9CLFdBRHpCQyxjQUFjLENBQUMsa0RBQWtELENBQUMsVUFJakVDLGNBQWMsQ0FBQ0MsV0FBVyxDQUFDLFVBRzNCRCxjQUFjLENBQUNFLEtBQUssQ0FBQ0MsUUFBUSxDQUFDQyxjQUFjLENBQUMsQ0FBQyxVQUc5Q0osY0FBYyxDQUFDSyxlQUFlLENBQUNGLFFBQVEsQ0FBQ0csdUJBQXVCLENBQUMsQ0FBQyxVQUdqRU4sY0FBYyxDQUFDTyxTQUFTLENBQUNKLFFBQVEsQ0FBQ0ssaUJBQWlCLENBQUMsQ0FBQyxVQUdyRFIsY0FBYyxDQUFDUyxjQUFjLENBQUNOLFFBQVEsQ0FBQ08sc0JBQXNCLENBQUMsQ0FBQyxVQUcvRFYsY0FBYyxDQUFDVyxxQkFBcUIsQ0FBQ1IsUUFBUSxDQUFDUyw2QkFBNkIsQ0FBQyxDQUFDLFVBRzdFWixjQUFjLENBQ2RhLDZCQUE2QixDQUFDVixRQUFRLENBQUM7SUFDdENXLGlCQUFpQixFQUFFLFlBQStDO01BQ2pFLE1BQU1DLGlCQUFpQixHQUNyQixJQUFJLENBQUNDLE9BQU8sRUFBRSxDQUFDQyxhQUFhLEVBQUUsQ0FBMEJDLGlCQUFpQixJQUN6RSxJQUFJLENBQUNGLE9BQU8sRUFBRSxDQUFDQyxhQUFhLEVBQUUsQ0FBMEJDLGlCQUFpQixFQUFFO01BQzdFLE9BQU9ILGlCQUFpQixHQUFHLFNBQVMsR0FBR0ksU0FBUztJQUNqRDtFQUNELENBQUMsQ0FBQyxDQUNGLFVBR0FuQixjQUFjLENBQUNvQixTQUFTLENBQUNqQixRQUFRLENBQUNrQixrQkFBa0IsQ0FBQyxDQUFDLFdBR3REckIsY0FBYyxDQUNkc0IsU0FBUyxDQUFDbkIsUUFBUSxDQUFDO0lBQ2xCb0IsaUJBQWlCLEVBQUUsWUFBWTtNQUM5QixPQUFPLElBQUk7SUFDWjtFQUNELENBQUMsQ0FBQyxDQUNGLFdBR0F2QixjQUFjLENBQUN3QixRQUFRLENBQUMsV0FleEJDLGVBQWUsRUFBRSxXQUNqQkMsY0FBYyxFQUFFLFdBMmpCaEJELGVBQWUsRUFBRSxXQUNqQkUsVUFBVSxDQUFDQyxpQkFBaUIsQ0FBQ0MsS0FBSyxDQUFDO0lBQUE7SUFBQTtNQUFBO01BQUE7UUFBQTtNQUFBO01BQUE7TUFBQTtNQUFBO01BQUE7TUFBQTtNQUFBO01BQUE7TUFBQTtNQUFBO01BQUE7TUFBQTtNQUFBLE1Ba29CcENDLFFBQVEsR0FBRztRQUNWO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtRQUNFQyxlQUFlLENBQ2RDLFdBQWlDLEVBQ2pDQyxLQUFXLEVBQ1hDLFFBQWlCLEVBQ2pCQyxXQUFtQixFQUNuQkMsV0FBb0IsRUFDcEJDLFdBS0MsRUFDQTtVQUNELE1BQU1DLFVBQVUsR0FBSU4sV0FBVyxDQUFDaEIsT0FBTyxFQUFFLENBQUN1QixXQUFXLEVBQUUsQ0FBU0MsU0FBUztZQUN4RUMsV0FBVyxHQUFHVCxXQUFXLENBQUNVLDJCQUEyQixFQUFFO1VBQ3hELElBQUlMLFdBQVcsQ0FBQ00scUJBQXFCLEVBQUU7WUFDdEMsSUFBSU4sV0FBVyxDQUFDTyxxQkFBcUIsRUFBRTtjQUN0Q1osV0FBVyxDQUFDRixRQUFRLENBQUNlLFlBQVksQ0FBQ1osS0FBSyxFQUFFRSxXQUFXLEVBQUVDLFdBQVcsQ0FBQztZQUNuRTtVQUNELENBQUMsTUFBTSxJQUFJQyxXQUFXLENBQUNTLGlCQUFpQixFQUFFO1lBQ3pDLElBQUlULFdBQVcsQ0FBQ1UsaUJBQWlCLEVBQUU7Y0FDbENmLFdBQVcsQ0FBQ2dCLGFBQWEsQ0FBQ2QsUUFBUSxDQUFDO1lBQ3BDO1VBQ0QsQ0FBQyxNQUFNLElBQUlJLFVBQVUsS0FBSyxDQUFDLElBQUlHLFdBQVcsQ0FBQ1EsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDQyxXQUFXLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDckZsQixXQUFXLENBQUNtQixhQUFhLENBQUNqQixRQUFRLENBQUM7VUFDcEMsQ0FBQyxNQUFNLElBQUlPLFdBQVcsQ0FBQ1EsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDQyxXQUFXLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDakVsQixXQUFXLENBQUNvQixjQUFjLENBQUNsQixRQUFRLENBQUM7VUFDckM7UUFDRCxDQUFDO1FBRURtQixvQkFBb0IsQ0FBNkJDLE1BQVcsRUFBRTtVQUFBO1VBQzdELE1BQU1DLE9BQU8sR0FBR0QsTUFBTSxDQUFDRSxTQUFTLEVBQUU7VUFDbEMsSUFBSUMsTUFBVztVQUNmLElBQUksQ0FBQ0MsV0FBVyxFQUFFLENBQUNDLElBQUksQ0FBQyxVQUFVQyxPQUFZLEVBQUU7WUFDL0MsSUFBSUEsT0FBTyxDQUFDQyxhQUFhLEVBQUUsS0FBS04sT0FBTyxFQUFFO2NBQ3hDRSxNQUFNLEdBQUdHLE9BQU87Y0FDaEIsT0FBTyxJQUFJO1lBQ1o7WUFDQSxPQUFPLEtBQUs7VUFDYixDQUFDLENBQUM7O1VBRUY7VUFDQSxNQUFNRSxlQUFlLEdBQUdMLE1BQU0sQ0FBQ00sY0FBYyxFQUFFO1VBRS9DLElBQUlELGVBQWUsSUFBSSwyQkFBQ0EsZUFBZSxDQUFDRSxrQkFBa0Isa0RBQWxDLHNCQUFvQ0MsaUJBQWlCLEVBQUUsR0FBRTtZQUNoRixNQUFNQyxZQUFZLEdBQUcsSUFBSSxDQUFDQyxnQkFBZ0IsQ0FBQ1YsTUFBTSxDQUFDO1lBRWxELElBQUksQ0FBQ1MsWUFBWSxFQUFFO2NBQ2xCRSxHQUFHLENBQUNDLEtBQUssQ0FBRSx1Q0FBc0NaLE1BQU0sQ0FBQ2EsS0FBSyxFQUFHLEVBQUMsQ0FBQztjQUNsRTtZQUNEO1lBRUEsSUFBSUosWUFBWSxDQUFDSyxVQUFVLEVBQUUsRUFBRTtjQUM5QixNQUFNQyxVQUFVLEdBQUcsSUFBSSxDQUFDOUIsMkJBQTJCLEVBQUU7Y0FDckQsTUFBTStCLGNBQWMsR0FBR0QsVUFBVSxDQUFDUCxpQkFBaUIsRUFBYTtjQUNoRSxNQUFNUyxLQUFLLEdBQUdELGNBQWMsQ0FBQ3hCLFFBQVEsRUFBRTtjQUV2QzBCLFdBQVcsQ0FBQ0MscUJBQXFCLENBQ2hDZCxlQUFlLEVBQ2ZJLFlBQVksQ0FBQ1csT0FBTyxFQUFFLEVBQ3RCWCxZQUFZLENBQUNLLFVBQVUsRUFBRSxFQUN6QkcsS0FBSyxFQUNMakIsTUFBTSxDQUFDUixRQUFRLENBQUMsSUFBSSxDQUFDLENBQUNDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FDaEQ7WUFDRjtVQUNEO1VBRUEsTUFBTTRCLHFCQUFxQixHQUFHLElBQUksQ0FBQ0MsUUFBUSxDQUFDQyx1QkFBdUIsRUFBRTtVQUVyRSxJQUFJRixxQkFBcUIsRUFBRTtZQUMxQixJQUFJRyxjQUFtQjtZQUN2QixJQUFJeEIsTUFBTSxDQUFDeUIsT0FBTyxFQUFFLENBQUNDLFdBQVcsRUFBRSxDQUFDQyxHQUFHLENBQUMsZ0NBQWdDLENBQUMsRUFBRTtjQUN6RUgsY0FBYyxHQUFHMUIsT0FBTyxDQUFDOEIsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUN4QyxDQUFDLE1BQU07Y0FDTkosY0FBYyxHQUFHMUIsT0FBTyxDQUFDK0Isa0JBQWtCLEVBQUU7WUFDOUM7WUFDQTtZQUNBLElBQUksQ0FBQ0wsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFO2NBQ3ZCO1lBQ0Q7WUFDQUgscUJBQXFCLENBQ25CUyxJQUFJLENBQUVDLGVBQW9CLElBQUs7Y0FDL0IsSUFBSSxDQUFDQSxlQUFlLElBQUlBLGVBQWUsQ0FBQ0MsU0FBUyxLQUFLaEMsTUFBTSxDQUFDaUMsR0FBRyxFQUFFO2dCQUNqRTtjQUNEO2NBQ0EsTUFBTUMsV0FBVyxHQUFHSCxlQUFlLENBQUNJLEtBQUs7Y0FDekMsTUFBTUMsS0FBSyxHQUFHTCxlQUFlLENBQUNNLElBQUk7Y0FDbEMsSUFBSUMsU0FBUyxHQUFHLENBQUMsQ0FBQztjQUNsQmQsY0FBYyxDQUFDZSxJQUFJLENBQUMsVUFBVUMsYUFBa0IsRUFBRUMsQ0FBTSxFQUFFO2dCQUN6RCxNQUFNQyxVQUFVLEdBQUdGLGFBQWEsQ0FBQ0csU0FBUyxFQUFFO2dCQUM1QyxNQUFNQyxRQUFRLEdBQUdSLEtBQUssQ0FBQ1MsS0FBSyxDQUFDLFVBQVVDLElBQVMsRUFBRTtrQkFDakQsT0FBT0osVUFBVSxDQUFDSSxJQUFJLENBQUMsS0FBS1osV0FBVyxDQUFDWSxJQUFJLENBQUM7Z0JBQzlDLENBQUMsQ0FBQztnQkFDRixJQUFJRixRQUFRLEVBQUU7a0JBQ2JOLFNBQVMsR0FBR0csQ0FBQztnQkFDZDtnQkFDQSxPQUFPRyxRQUFRO2NBQ2hCLENBQUMsQ0FBQztjQUNGLElBQUlOLFNBQVMsS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDckIsTUFBTVMsUUFBUSxHQUFHQyxlQUFlLENBQUNDLGNBQWMsRUFBRTtnQkFDakQsTUFBTUMsT0FBTyxHQUNaSCxRQUFRLENBQUNJLE1BQU0sR0FBRyxDQUFDLEdBQUdKLFFBQVEsQ0FBQ1IsSUFBSSxDQUFFYSxNQUFNLElBQUtBLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSTtnQkFDakcsSUFBSUgsT0FBTyxFQUFFO2tCQUNaO2tCQUNBO2tCQUNBQSxPQUFPLENBQUNJLGVBQWUsQ0FBQyxZQUFZLEVBQUUsWUFBWTtvQkFDakR0RCxNQUFNLENBQUN1RCxRQUFRLENBQUNqQixTQUFTLEVBQUUsSUFBSSxDQUFDO2tCQUNqQyxDQUFDLENBQUM7Z0JBQ0gsQ0FBQyxNQUFNO2tCQUNOdEMsTUFBTSxDQUFDdUQsUUFBUSxDQUFDakIsU0FBUyxFQUFFLElBQUksQ0FBQztnQkFDakM7Z0JBQ0EsSUFBSSxDQUFDaEIsUUFBUSxDQUFDa0MsMEJBQTBCLEVBQUU7Y0FDM0M7WUFDRCxDQUFDLENBQUMsQ0FDREMsS0FBSyxDQUFDLFVBQVVDLEdBQVEsRUFBRTtjQUMxQi9DLEdBQUcsQ0FBQ0MsS0FBSyxDQUFFLDhEQUE2RDhDLEdBQUksRUFBQyxDQUFDO1lBQy9FLENBQUMsQ0FBQztVQUNKO1VBQ0E7VUFDQSxJQUFJLENBQUNDLGFBQWEsQ0FBQ0Msc0JBQXNCLEVBQUU7UUFDNUMsQ0FBQztRQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtRQUNFeEUsWUFBWSxDQUFDWixLQUFVLEVBQUVFLFdBQW1CLEVBQUVDLFdBQWdCLEVBQUU7VUFDL0QsTUFBTUosV0FBVyxHQUFHQyxLQUFLLENBQUNoQixhQUFhLEVBQUU7VUFDekMsT0FBT2UsV0FBVyxDQUFDK0MsUUFBUSxDQUN6QnVDLFlBQVksQ0FBQ25GLFdBQVcsRUFBRUMsV0FBVyxDQUFDLENBQ3RDbUQsSUFBSSxDQUFDdkQsV0FBVyxDQUFDdUYsbUJBQW1CLENBQUNDLElBQUksQ0FBQ3hGLFdBQVcsRUFBRWIsU0FBUyxDQUFDLENBQUMsQ0FDbEUrRixLQUFLLENBQUNsRixXQUFXLENBQUN1RixtQkFBbUIsQ0FBQ0MsSUFBSSxDQUFDeEYsV0FBVyxDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUNEeUYsdUJBQXVCLENBQUN6RixXQUFnQixFQUFFdUIsT0FBWSxFQUFFbUUsaUJBQXNCLEVBQUVDLGNBQW1CLEVBQUVDLGVBQW9CLEVBQUU7VUFDMUhGLGlCQUFpQixHQUFHLE9BQU9BLGlCQUFpQixLQUFLLFFBQVEsR0FBR0csSUFBSSxDQUFDQyxLQUFLLENBQUNKLGlCQUFpQixDQUFDLEdBQUdBLGlCQUFpQjtVQUM3RyxNQUFNSyxXQUFXLEdBQUdMLGlCQUFpQixDQUFDQyxjQUFjLENBQUM7WUFDcERLLHNCQUFzQixHQUFHQyxXQUFXLENBQUNDLHdCQUF3QixDQUFDSCxXQUFXLENBQUM7WUFDMUVJLCtCQUErQixHQUFHNUUsT0FBTyxDQUFDVSxpQkFBaUIsRUFBRTtZQUM3RG1FLFNBQVMsR0FBR0QsK0JBQStCLENBQ3pDbEYsUUFBUSxFQUFFLENBQ1ZvRixZQUFZLEVBQUUsQ0FDZEMsV0FBVyxDQUFDSCwrQkFBK0IsQ0FBQ3RELE9BQU8sRUFBRSxDQUFDO1VBQ3pELElBQUkwRCxlQUFlLEdBQUd2RyxXQUFXLENBQUN3RyxvQkFBb0IsQ0FBQ0wsK0JBQStCLEVBQUVQLGVBQWUsQ0FBQztVQUN4RyxJQUFJYSw4QkFBOEI7VUFFbENGLGVBQWUsR0FBR0EsZUFBZSxDQUFDRyxHQUFHLENBQUMsVUFBVUMsZUFBb0IsRUFBRTtZQUNyRSxPQUFPO2NBQ043QixJQUFJLEVBQUU2QixlQUFlO2NBQ3JCQyxRQUFRLEVBQUVSLFNBQVMsSUFBSVIsZUFBZSxHQUFJLElBQUdBLGVBQWdCLEVBQUMsR0FBRyxFQUFFO1lBQ3BFLENBQUM7VUFDRixDQUFDLENBQUM7VUFDRixJQUFJRyxXQUFXLElBQUlBLFdBQVcsQ0FBQ2MsVUFBVSxFQUFFO1lBQzFDLE1BQU1DLE9BQU8sR0FBR2YsV0FBVyxDQUFDYyxVQUFVLElBQUk3RyxXQUFXLENBQUMrRyxzQkFBc0IsQ0FBQ0MsaUJBQWlCLENBQUNqQixXQUFXLENBQUNjLFVBQVUsQ0FBQztZQUN0SCxJQUFJSSxNQUFNLENBQUNuRCxJQUFJLENBQUNnRCxPQUFPLENBQUMsQ0FBQ2xDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Y0FDcEM2Qiw4QkFBOEIsR0FBR0ssT0FBTztZQUN6QztVQUNEO1VBQ0EsSUFBSWYsV0FBVyxJQUFJQSxXQUFXLENBQUNtQixjQUFjLElBQUluQixXQUFXLENBQUNvQixNQUFNLEVBQUU7WUFDcEVuSCxXQUFXLENBQUMrRyxzQkFBc0IsQ0FBQ0ssUUFBUSxDQUFDckIsV0FBVyxDQUFDbUIsY0FBYyxFQUFFbkIsV0FBVyxDQUFDb0IsTUFBTSxFQUFFO2NBQzNGRSxrQkFBa0IsRUFBRWQsZUFBZTtjQUNuQ2UscUJBQXFCLEVBQUV0QixzQkFBc0I7Y0FDN0NTLDhCQUE4QixFQUFFQTtZQUNqQyxDQUFDLENBQUM7VUFDSDtRQUNELENBQUM7UUFDRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO1FBQ0VjLDhCQUE4QixDQUFDdkgsV0FBaUMsRUFBRXdILGVBQXVCLEVBQUV0SCxRQUFhLEVBQUV1SCxXQUFtQixFQUFFO1VBQzlILE9BQU96SCxXQUFXLENBQUMrRyxzQkFBc0IsQ0FBQ1EsOEJBQThCLENBQUN2SCxXQUFXLEVBQUV3SCxlQUFlLEVBQUV0SCxRQUFRLEVBQUV1SCxXQUFXLENBQUM7UUFDOUgsQ0FBQztRQUVEQyxnQkFBZ0IsQ0FBNkJwRyxNQUFXLEVBQUU7VUFDekQ7VUFDQSxJQUFJLENBQUNxRyxlQUFlLEVBQUUsQ0FBQ0MsY0FBYyxFQUFFO1VBQ3ZDLElBQUksQ0FBQ0MsaUJBQWlCLEdBQUcsSUFBSTtVQUU3QixNQUFNQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM5SSxPQUFPLEVBQUUsQ0FBQ2lELGlCQUFpQixDQUFDLFVBQVUsQ0FBeUI7VUFDbEcsTUFBTXhCLFdBQVcsR0FBRyxJQUFJLENBQUNDLDJCQUEyQixFQUFFO1VBQ3RELElBQ0NELFdBQVcsQ0FBQ1EsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDQyxXQUFXLENBQUMsYUFBYSxDQUFDLElBQ3BELElBQUksQ0FBQ2xDLE9BQU8sRUFBRSxDQUFDdUIsV0FBVyxFQUFFLENBQVN3SCxhQUFhLEtBQUssTUFBTSxJQUM5REQscUJBQXFCLENBQUM1RyxXQUFXLENBQUMsNEJBQTRCLENBQUMsS0FBSyxLQUFLLEVBQ3hFO1lBQ0QsTUFBTThHLFdBQVcsR0FBRzFHLE1BQU0sQ0FBQzJHLFlBQVksQ0FBQyxZQUFZLENBQUM7WUFDckQsSUFBSSxDQUFDQyxzQkFBc0IsQ0FBQyxDQUFDRixXQUFXLENBQUMsQ0FBQztVQUMzQztRQUNELENBQUM7UUFDREcsaUJBQWlCLEVBQUUsWUFBc0M7VUFDeEQsSUFBSSxDQUFDUixlQUFlLEVBQUUsQ0FBQ0MsY0FBYyxFQUFFO1FBQ3hDLENBQUM7UUFDRFEsY0FBYyxFQUFFLFlBQXNDO1VBQ3JEO1VBQ0FDLFVBQVUsQ0FBQyxNQUFNO1lBQ2hCLElBQUksQ0FBQ1YsZUFBZSxFQUFFLENBQUNDLGNBQWMsRUFBRTtVQUN4QyxDQUFDLEVBQUUsSUFBSSxDQUFDO1FBQ1QsQ0FBQztRQUNEVSxvQkFBb0IsRUFBRSxVQUFVdEksV0FBaUMsRUFBRXVJLGFBQWtCLEVBQUU7VUFDdEYsTUFBTUMsYUFBYSxHQUFHLE9BQU9ELGFBQWEsS0FBSyxRQUFRLEdBQUcxQyxJQUFJLENBQUNDLEtBQUssQ0FBQ3lDLGFBQWEsQ0FBQyxHQUFHQSxhQUFhO1VBQ25HLE1BQU05SCxXQUFXLEdBQUdULFdBQVcsQ0FBQ2hCLE9BQU8sRUFBRSxDQUFDeUosSUFBSSxDQUFDLGdCQUFnQixDQUFxQjtVQUNwRixJQUFJQyxRQUFRO1VBQ1osSUFBSVYsV0FBVztVQUNmLElBQUlRLGFBQWEsQ0FBQ0csU0FBUyxFQUFFO1lBQzVCRCxRQUFRLEdBQUcxSSxXQUFXLENBQUNoQixPQUFPLEVBQUUsQ0FBQ3lKLElBQUksQ0FBQ0QsYUFBYSxDQUFDRyxTQUFTLENBQXNCO1lBQ25GWCxXQUFXLEdBQ1ZRLGFBQWEsQ0FBQ0ksWUFBWSxHQUN2QjVJLFdBQVcsQ0FBQ2hCLE9BQU8sRUFBRSxDQUFDeUosSUFBSSxDQUFDRCxhQUFhLENBQUNJLFlBQVksQ0FBQyxHQUN0REYsUUFBUSxJQUFJQSxRQUFRLENBQUNHLGNBQWMsRUFBRSxJQUFJSCxRQUFRLENBQUNHLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FDL0M7VUFDMUIsQ0FBQyxNQUFNLElBQUlMLGFBQWEsQ0FBQ0ksWUFBWSxFQUFFO1lBQ3RDWixXQUFXLEdBQUdoSSxXQUFXLENBQUNoQixPQUFPLEVBQUUsQ0FBQ3lKLElBQUksQ0FBQ0QsYUFBYSxDQUFDSSxZQUFZLENBQXlCO1lBQzVGRixRQUFRLEdBQUdWLFdBQVcsSUFBS0EsV0FBVyxDQUFDYyxTQUFTLEVBQXdCO1VBQ3pFO1VBQ0EsSUFBSSxDQUFDSixRQUFRLElBQUksQ0FBQ1YsV0FBVyxJQUFJLENBQUNVLFFBQVEsQ0FBQ0ssVUFBVSxFQUFFLElBQUksQ0FBQ2YsV0FBVyxDQUFDZSxVQUFVLEVBQUUsRUFBRTtZQUNyRixNQUFNQyxNQUFNLEdBQUdDLGdCQUFnQixDQUFDakosV0FBVyxDQUFDLENBQUNrSixPQUFPLENBQ25ELHFDQUFxQyxFQUNyQy9KLFNBQVMsRUFDUmEsV0FBVyxDQUFDaEIsT0FBTyxFQUFFLENBQUN1QixXQUFXLEVBQUUsQ0FBUzRJLFNBQVMsQ0FDdEQ7WUFDRC9HLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDMkcsTUFBTSxDQUFDO1lBQ2pCSSxVQUFVLENBQUMvRyxLQUFLLENBQUMyRyxNQUFNLENBQUM7VUFDekIsQ0FBQyxNQUFNO1lBQ052SSxXQUFXLENBQUM0SSxlQUFlLENBQUNyQixXQUFXLENBQUMxRixLQUFLLEVBQUUsQ0FBQztZQUNoRDtZQUNBN0IsV0FBVyxDQUFDNkksWUFBWSxDQUFDO2NBQ3hCQyxPQUFPLEVBQUViLFFBQVE7Y0FDakJjLFVBQVUsRUFBRXhCO1lBQ2IsQ0FBQyxDQUFDO1VBQ0g7UUFDRCxDQUFDO1FBRUR5QixhQUFhLEdBQTZCO1VBQ3pDLElBQUksQ0FBQzlCLGVBQWUsRUFBRSxDQUFDQyxjQUFjLEVBQUU7UUFDeEMsQ0FBQztRQUNEOEIsbUJBQW1CLEVBQUUsWUFBc0M7VUFDMUQsSUFBSSxDQUFDL0IsZUFBZSxFQUFFLENBQUNnQyxXQUFXLEVBQUU7UUFDckM7TUFDRCxDQUFDO01BQUE7SUFBQTtJQUFBO0lBQUEsT0E3OENEaEMsZUFBZSxHQUZmLHlCQUVnQmpFLEdBQVksRUFBZ0I7TUFDM0MsSUFBSUEsR0FBRyxFQUFFO1FBQ1I7UUFDQSxJQUFJLENBQUNrRywyQkFBMkIsR0FBRyxJQUFJLENBQUNBLDJCQUEyQixJQUFJLENBQUMsQ0FBQztRQUV6RSxJQUFJLENBQUMsSUFBSSxDQUFDQSwyQkFBMkIsQ0FBQ2xHLEdBQUcsQ0FBQyxFQUFFO1VBQzNDLElBQUksQ0FBQ2tHLDJCQUEyQixDQUFDbEcsR0FBRyxDQUFDLEdBQUcsSUFBSW1HLFlBQVksQ0FBQyxJQUFJLEVBQUVuRyxHQUFHLENBQUM7UUFDcEU7UUFDQSxPQUFPLElBQUksQ0FBQ2tHLDJCQUEyQixDQUFDbEcsR0FBRyxDQUFDO01BQzdDLENBQUMsTUFBTTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUNvRyxZQUFZLEVBQUU7VUFDdkIsSUFBSSxDQUFDQSxZQUFZLEdBQUcsSUFBSUQsWUFBWSxDQUFDLElBQUksQ0FBQztRQUMzQztRQUNBLE9BQU8sSUFBSSxDQUFDQyxZQUFZO01BQ3pCO0lBQ0QsQ0FBQztJQUFBLE9BRURDLE1BQU0sR0FBTixrQkFBUztNQUNSLDBCQUFNQSxNQUFNO01BQ1osTUFBTXRKLFdBQVcsR0FBRyxJQUFJLENBQUNDLDJCQUEyQixFQUFFOztNQUV0RDtNQUNBLE1BQU1vSCxxQkFBcUIsR0FBRyxJQUFJLENBQUM5SSxPQUFPLEVBQUUsQ0FBQ2lELGlCQUFpQixDQUFDLFVBQVUsQ0FBeUI7TUFDbEc2RixxQkFBcUIsYUFBckJBLHFCQUFxQix1QkFBckJBLHFCQUFxQixDQUFFa0MsV0FBVyxDQUFDLDJCQUEyQixFQUFFO1FBQUVDLElBQUksRUFBRTtNQUFLLENBQUMsQ0FBQztNQUMvRW5DLHFCQUFxQixhQUFyQkEscUJBQXFCLHVCQUFyQkEscUJBQXFCLENBQUVrQyxXQUFXLENBQUMsYUFBYSxFQUFFO1FBQ2pERSxVQUFVLEVBQUUsS0FBSztRQUNqQkMsS0FBSyxFQUFFO01BQ1IsQ0FBQyxDQUFDO01BQ0ZyQyxxQkFBcUIsYUFBckJBLHFCQUFxQix1QkFBckJBLHFCQUFxQixDQUFFa0MsV0FBVyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUNJLHNCQUFzQixFQUFFLENBQUM7TUFDaEZ0QyxxQkFBcUIsYUFBckJBLHFCQUFxQix1QkFBckJBLHFCQUFxQixDQUFFa0MsV0FBVyxDQUFDLDRCQUE0QixFQUFFLEtBQUssQ0FBQztNQUN2RSxJQUFJdkosV0FBVyxDQUFDNEosb0JBQW9CLEVBQUUsRUFBRTtRQUN2QztRQUNBNUosV0FBVyxDQUFDNkosV0FBVyxDQUFDLDJCQUEyQixFQUFFLElBQUksQ0FBQ0MsZ0NBQWdDLENBQUMvRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDdkc7TUFDQSxJQUFJLENBQUNKLGFBQWEsR0FBRyxJQUFJLENBQUNwRyxPQUFPLEVBQUUsQ0FBQ3lKLElBQUksQ0FBQyw4QkFBOEIsQ0FBQztNQUN4RSxJQUFJLENBQUNyRCxhQUFhLENBQUNvRixZQUFZLENBQUNDLFlBQVksQ0FBQyxJQUFJLENBQUNDLGdCQUFnQixFQUFFLElBQUksQ0FBQztNQUN6RTVDLHFCQUFxQixhQUFyQkEscUJBQXFCLHVCQUFyQkEscUJBQXFCLENBQUVrQyxXQUFXLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDO01BQzNEbEMscUJBQXFCLGFBQXJCQSxxQkFBcUIsdUJBQXJCQSxxQkFBcUIsQ0FBRWtDLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUM7SUFDNUQsQ0FBQztJQUFBLE9BRURXLE1BQU0sR0FBTixrQkFBUztNQUNSLElBQUksSUFBSSxDQUFDZiwyQkFBMkIsRUFBRTtRQUNyQyxLQUFLLE1BQU1sRyxHQUFHLElBQUl1RCxNQUFNLENBQUNuRCxJQUFJLENBQUMsSUFBSSxDQUFDOEYsMkJBQTJCLENBQUMsRUFBRTtVQUNoRSxJQUFJLElBQUksQ0FBQ0EsMkJBQTJCLENBQUNsRyxHQUFHLENBQUMsRUFBRTtZQUMxQyxJQUFJLENBQUNrRywyQkFBMkIsQ0FBQ2xHLEdBQUcsQ0FBQyxDQUFDa0gsT0FBTyxFQUFFO1VBQ2hEO1FBQ0Q7UUFDQSxPQUFPLElBQUksQ0FBQ2hCLDJCQUEyQjtNQUN4QztNQUNBLElBQUksSUFBSSxDQUFDRSxZQUFZLEVBQUU7UUFDdEIsSUFBSSxDQUFDQSxZQUFZLENBQUNjLE9BQU8sRUFBRTtNQUM1QjtNQUNBLE9BQU8sSUFBSSxDQUFDZCxZQUFZO01BRXhCLE1BQU1lLGVBQWUsR0FBRyxJQUFJLENBQUN6RixhQUFhLEdBQUcsSUFBSSxDQUFDQSxhQUFhLENBQUN5RixlQUFlLEdBQUcsSUFBSTtNQUN0RixJQUFJQSxlQUFlLElBQUlBLGVBQWUsQ0FBQ0MsTUFBTSxFQUFFLEVBQUU7UUFDaERELGVBQWUsQ0FBQ0UsS0FBSyxFQUFFO01BQ3hCO01BQ0E7TUFDQSxNQUFNN0ssUUFBUSxHQUFHLElBQUksQ0FBQ2xCLE9BQU8sRUFBRSxDQUFDaUQsaUJBQWlCLEVBQWE7TUFDOUQsSUFBSS9CLFFBQVEsSUFBSUEsUUFBUSxDQUFDOEssV0FBVyxFQUFFLEVBQUU7UUFDdkM5SyxRQUFRLENBQUMrSyxZQUFZLENBQUMsS0FBSyxDQUFDO01BQzdCO01BQ0EsSUFBSUMsV0FBVyxDQUFDLElBQUksQ0FBQ2xNLE9BQU8sRUFBRSxDQUFDLEVBQUU7UUFDaENtTSxVQUFVLENBQUMsSUFBSSxDQUFDbk0sT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO01BQzdCO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUEsT0FLQTBMLGdCQUFnQixHQUFoQiw0QkFBbUI7TUFDbEIsTUFBTVosWUFBWSxHQUFHLElBQUksQ0FBQ25DLGVBQWUsRUFBRTtNQUMzQyxNQUFNeUQsSUFBSSxHQUFHLElBQUksQ0FBQ3BNLE9BQU8sRUFBRTtNQUMzQixNQUFNcU0sZUFBZSxHQUFHRCxJQUFJLGFBQUpBLElBQUksdUJBQUpBLElBQUksQ0FBRW5KLGlCQUFpQixDQUFDLFVBQVUsQ0FBQztNQUMzRCxNQUFNcUosWUFBWSxHQUFHRCxlQUFlLGFBQWZBLGVBQWUsdUJBQWZBLGVBQWUsQ0FBRW5LLFdBQVcsQ0FBQywwQkFBMEIsQ0FBQztNQUM3RSxNQUFNcUssUUFBUSxHQUFHLElBQUksQ0FBQ25HLGFBQWEsQ0FBQ3lGLGVBQWUsQ0FDakRXLFFBQVEsRUFBRSxDQUNWOUUsR0FBRyxDQUFFK0UsSUFBUyxJQUFLQSxJQUFJLENBQUN4SixpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQ21DLFNBQVMsRUFBRSxDQUFDLENBQ2pFc0gsTUFBTSxDQUFFQyxPQUFnQixJQUFLO1FBQUE7UUFDN0IsT0FBT0EsT0FBTyxDQUFDQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsK0JBQUtSLElBQUksQ0FBQ25KLGlCQUFpQixFQUFFLDBEQUF4QixzQkFBMEJZLE9BQU8sRUFBRTtNQUN2RSxDQUFDLENBQUM7TUFFSCxJQUFJaUgsWUFBWSxJQUFJLEVBQUV5QixRQUFRLENBQUMzRyxNQUFNLEtBQUssQ0FBQyxJQUFJMEcsWUFBWSxDQUFDLEVBQUU7UUFDN0R4QixZQUFZLENBQUMrQixZQUFZLENBQUNOLFFBQVEsQ0FBQztNQUNwQztJQUNELENBQUM7SUFBQSxPQUVEcEosZ0JBQWdCLEdBQWhCLDBCQUFpQlYsTUFBVyxFQUFFO01BQzdCLE9BQU9BLE1BQU0sSUFBSUEsTUFBTSxDQUFDSSxhQUFhLEVBQUU7SUFDeEM7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTEM7SUFBQSxPQU1RaUssa0NBQWtDLEdBQTFDLDRDQUEyQ0MsV0FBbUMsRUFBRTtNQUMvRSxNQUFNQyxvQkFBb0IsR0FBRyxDQUFDQyxLQUFZLEVBQUVDLHFCQUEyQyxLQUFLO1FBQUE7UUFDM0YsTUFBTUMsTUFBTSxHQUFHLENBQUMsR0FBR0QscUJBQXFCLENBQUNFLFNBQVMsRUFBRSxFQUFFLEdBQUdGLHFCQUFxQixDQUFDRyxhQUFhLEVBQUUsQ0FBQztRQUMvRixNQUFNQyxTQUFTLEdBQUdILE1BQU0sQ0FBQ3ZILE1BQU0sS0FBSyxDQUFDLDhCQUFJLElBQUksQ0FBQzJILGtCQUFrQixDQUFDSixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQW9CLDBEQUFyRCxzQkFBdURqSixPQUFPLEVBQUU7UUFDekcsSUFBSW9KLFNBQVMsS0FBS0EsU0FBUyxhQUFUQSxTQUFTLGVBQVRBLFNBQVMsQ0FBRWxKLEdBQUcsQ0FBQyxnQ0FBZ0MsQ0FBQyxJQUFJa0osU0FBUyxhQUFUQSxTQUFTLGVBQVRBLFNBQVMsQ0FBRWxKLEdBQUcsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDLEVBQUU7VUFDeEg7VUFDQThJLHFCQUFxQixDQUFDTSxhQUFhLENBQUMseUNBQXlDLENBQUM7VUFDOUVOLHFCQUFxQixDQUFDTyxXQUFXLENBQUMsb0JBQW9CLEVBQUVULG9CQUFvQixFQUFFLElBQUksQ0FBQztRQUNwRjtNQUNELENBQUM7TUFDRCxLQUFLLElBQUlVLGVBQWUsR0FBR1gsV0FBVyxDQUFDbkgsTUFBTSxHQUFHLENBQUMsRUFBRThILGVBQWUsSUFBSSxDQUFDLEVBQUVBLGVBQWUsRUFBRSxFQUFFO1FBQzNGLElBQUlYLFdBQVcsQ0FBQ1csZUFBZSxDQUFDLENBQUMzRCxVQUFVLEVBQUUsRUFBRTtVQUM5QyxNQUFNbUQscUJBQXFCLEdBQUdILFdBQVcsQ0FBQ1csZUFBZSxDQUFDO1VBQzFEO1VBQ0FSLHFCQUFxQixDQUFDNUIsV0FBVyxDQUFDLG9CQUFvQixFQUFFNEIscUJBQXFCLEVBQUVGLG9CQUFvQixFQUFFLElBQUksQ0FBQztVQUMxRztRQUNEO01BQ0Q7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FMQztJQUFBLE9BTVFPLGtCQUFrQixHQUExQiw0QkFBMkJJLEtBQXNCLEVBQUU7TUFDbEQsTUFBTUMsT0FBTyxHQUFHRCxLQUFLLENBQUNFLE9BQU87TUFDN0IsSUFBSUMsUUFBOEI7TUFDbEMsSUFBSUgsS0FBSyxDQUFDdkosR0FBRyxDQUFDLHNEQUFzRCxDQUFDLEVBQUU7UUFDdEU7UUFDQTtRQUNBLElBQUl3SixPQUFPLENBQUN4SixHQUFHLENBQUMsYUFBYSxDQUFDLElBQUl3SixPQUFPLENBQUM5SCxJQUFJLENBQUMsNEJBQTRCLENBQUMsRUFBRTtVQUM3RWdJLFFBQVEsR0FBR0YsT0FBTyxDQUFDOUgsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1FBQzdDLENBQUMsTUFBTSxJQUFJOEgsT0FBTyxDQUFDeEosR0FBRyxDQUFDLDhCQUE4QixDQUFDLEVBQUU7VUFDdkQwSixRQUFRLEdBQUdGLE9BQW1CO1FBQy9CO1FBQ0EsSUFBSUUsUUFBUSxFQUFFO1VBQ2IsT0FBT0EsUUFBUSxDQUFDRCxPQUFPO1FBQ3hCO01BQ0Q7TUFDQSxPQUFPMU4sU0FBUztJQUNqQixDQUFDO0lBQUEsT0FDRDROLGlCQUFpQixHQUFqQiw2QkFBb0I7TUFBQTtNQUNuQkMsY0FBYyxDQUFDQyxTQUFTLENBQUNGLGlCQUFpQixDQUFDRyxLQUFLLENBQUMsSUFBSSxDQUFDO01BQ3REO01BQ0EsSUFBSSw2QkFBSSxDQUFDak4sS0FBSyxDQUFDa04sU0FBUyxrREFBcEIsc0JBQXNCQyx5QkFBeUIsSUFBSUMsWUFBWSxDQUFDaEgsWUFBWSxFQUFFLEtBQUtsSCxTQUFTLEVBQUU7UUFDakdrTyxZQUFZLENBQUNDLFlBQVksQ0FBQyxJQUFJLENBQUNDLGVBQWUsRUFBRSxDQUFDbEgsWUFBWSxFQUFFLENBQUM7TUFDakU7SUFDRCxDQUFDO0lBQUEsT0FFRG1ILGdCQUFnQixHQUFoQiw0QkFBbUI7TUFDbEIsSUFBSXpCLFdBQW1DO01BQ3ZDLElBQUksSUFBSSxDQUFDckwsMkJBQTJCLEVBQUUsQ0FBQytNLGdCQUFnQixFQUFFLEVBQUU7UUFDMUQsTUFBTUMsUUFBUSxHQUFHLElBQUksQ0FBQ2hOLDJCQUEyQixFQUFFLENBQUNpTixXQUFXLEVBQUU7UUFDakUsS0FBSyxNQUFNcEUsT0FBTyxJQUFJbUUsUUFBUSxFQUFFO1VBQy9CM0IsV0FBVyxHQUFHeEMsT0FBTyxDQUFDVixjQUFjLEVBQUU7VUFDdEMsSUFBSSxDQUFDaUQsa0NBQWtDLENBQUNDLFdBQVcsQ0FBQztRQUNyRDtNQUNELENBQUMsTUFBTTtRQUNOQSxXQUFXLEdBQUcsSUFBSSxDQUFDNkIsa0JBQWtCLEVBQUU7UUFDdkMsSUFBSSxDQUFDOUIsa0NBQWtDLENBQUNDLFdBQVcsQ0FBQztNQUNyRDtJQUNELENBQUM7SUFBQSxPQUVEOEIsZ0JBQWdCLEdBQWhCLDBCQUFpQjNOLFFBQWEsRUFBRUUsV0FBZ0IsRUFBRTtNQUNqRDtNQUNBLE1BQU0wTixPQUFPLEdBQUcsSUFBSSxDQUFDcE0sV0FBVyxFQUFFO1FBQ2pDakIsV0FBVyxHQUFHLElBQUksQ0FBQ0MsMkJBQTJCLEVBQUU7UUFDaERvSCxxQkFBcUIsR0FBRyxJQUFJLENBQUM5SSxPQUFPLEVBQUUsQ0FBQ2lELGlCQUFpQixDQUFDLFVBQVUsQ0FBeUI7UUFDNUY4TCxjQUFjLEdBQUcsSUFBSSxDQUFDL08sT0FBTyxFQUFFLENBQUNpQyxRQUFRLENBQUMsVUFBVSxDQUFjO1FBQ2pFK00sWUFBWSxHQUFHbEcscUJBQXFCLENBQUM1RyxXQUFXLENBQUMsYUFBYSxDQUFDO1FBQy9EWixVQUFVLEdBQUksSUFBSSxDQUFDdEIsT0FBTyxFQUFFLENBQUN1QixXQUFXLEVBQUUsQ0FBU0MsU0FBUztNQUM3RCxJQUFJeU4sZ0JBQWdCO01BQ3BCRCxZQUFZLENBQUNFLElBQUksQ0FBQyxPQUFPLENBQUM7TUFDMUIsSUFBSTlOLFdBQVcsQ0FBQytOLGdCQUFnQixLQUFLLElBQUksRUFBRTtRQUMxQyxJQUFJLENBQUNDLGlCQUFpQixFQUFFO01BQ3pCO01BQ0EsTUFBTUMsU0FBUyxHQUFHNU4sV0FBVyxDQUFDd0IsaUJBQWlCLEVBQWE7TUFDNUQsSUFDQ29NLFNBQVMsSUFDVEEsU0FBUyxDQUFDQyxpQkFBaUIsRUFBRSxJQUM3QixDQUFDTixZQUFZLENBQUNyTSxJQUFJLENBQUMwTSxTQUFTLENBQUNwTixRQUFRLEVBQUUsQ0FBQ3FOLGlCQUFpQixDQUFDOUksSUFBSSxDQUFDNkksU0FBUyxDQUFDcE4sUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUNwRjtRQUNEO0FBQ0g7QUFDQTs7UUFFR29OLFNBQVMsQ0FBQ0UsVUFBVSxFQUFFLENBQUNDLFlBQVksRUFBRTtNQUN0Qzs7TUFFQTtNQUNBO01BQ0EsS0FBSyxJQUFJdEssQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHNEosT0FBTyxDQUFDbEosTUFBTSxFQUFFVixDQUFDLEVBQUUsRUFBRTtRQUN4QytKLGdCQUFnQixHQUFHSCxPQUFPLENBQUM1SixDQUFDLENBQUMsQ0FBQ25DLGNBQWMsRUFBRTtRQUM5QyxJQUFJa00sZ0JBQWdCLEVBQUU7VUFDckJBLGdCQUFnQixDQUFDUSxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7UUFDekM7TUFDRDs7TUFFQTtNQUNBLE1BQU1DLHdCQUF3QixHQUFHLFlBQVk7UUFDNUMsSUFBSSxDQUFFak8sV0FBVyxDQUFTa08sZ0JBQWdCLEVBQUUsSUFBSSxDQUFDdk8sV0FBVyxDQUFDd08sZ0JBQWdCLEVBQUU7VUFDOUVuTyxXQUFXLENBQUNvTyxrQkFBa0IsQ0FBQyxJQUFJLENBQVE7UUFDNUM7TUFDRCxDQUFDO01BQ0RwTyxXQUFXLENBQUNzRSxlQUFlLENBQUMsb0JBQW9CLEVBQUUySix3QkFBd0IsQ0FBQzs7TUFFM0U7TUFDQTtNQUNBLE1BQU1JLGlCQUFpQixHQUFHO1FBQ3pCdEIsZ0JBQWdCLEVBQUVrQjtNQUNuQixDQUFDO01BQ0RqTyxXQUFXLENBQUNzTyxnQkFBZ0IsQ0FBQ0QsaUJBQWlCLEVBQUUsSUFBSSxDQUFDO01BQ3JELElBQUksQ0FBQ0UsU0FBUyxDQUFDakssZUFBZSxDQUFDLFdBQVcsRUFBRSxZQUFZO1FBQ3ZEdEUsV0FBVyxDQUFDd08sbUJBQW1CLENBQUNILGlCQUFpQixDQUFDO01BQ25ELENBQUMsQ0FBQzs7TUFFRjtNQUNBLElBQUl4TyxVQUFVLEdBQUcsQ0FBQyxFQUFFO1FBQ25CLElBQUk0TyxRQUFRLEdBQUc5TyxXQUFXLElBQUlBLFdBQVcsQ0FBQytPLFdBQVc7UUFDckQsTUFBTUMsd0JBQXdCLEdBQUdyQixjQUFjLENBQUM3TSxXQUFXLENBQUMsMEJBQTBCLENBQUM7UUFDdkYsSUFBSWtPLHdCQUF3QixFQUFFO1VBQzdCLE1BQU1DLGFBQWEsR0FBR0Qsd0JBQXdCLENBQUNiLFVBQVUsRUFBRTtVQUMzRCxJQUFJLENBQUNlLFNBQVMsQ0FBQ0MsVUFBVSxDQUFDRixhQUFhLEVBQUVELHdCQUF3QixDQUFDO1VBQ2xFckIsY0FBYyxDQUFDL0QsV0FBVyxDQUFDLDBCQUEwQixFQUFFLElBQUksQ0FBQztRQUM3RCxDQUFDLE1BQU0sSUFBSWtGLFFBQVEsRUFBRTtVQUNwQixJQUFJQSxRQUFRLENBQUM5TCxHQUFHLENBQUMsd0NBQXdDLENBQUMsRUFBRTtZQUMzRCxJQUFJLENBQUNrTSxTQUFTLENBQUNDLFVBQVUsQ0FBQ0wsUUFBUSxFQUFFaFAsUUFBUSxDQUFDO1VBQzlDLENBQUMsTUFBTTtZQUNOO1lBQ0E7WUFDQSxNQUFNc1AsWUFBWSxHQUFHTixRQUFRLENBQUNyTSxPQUFPLEVBQUU7WUFDdkMsSUFBSSxZQUFZLENBQUM0TSxJQUFJLENBQUNELFlBQVksQ0FBQyxFQUFFO2NBQ3BDO2NBQ0EsTUFBTUUsZ0JBQWdCLEdBQUdGLFlBQVksQ0FBQ0csT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7Y0FDL0RULFFBQVEsR0FBRyxJQUFLVSxnQkFBZ0IsQ0FBU1YsUUFBUSxDQUFDVyxNQUFNLEVBQUVILGdCQUFnQixDQUFDO2NBQzNFLE1BQU1JLG9CQUFvQixHQUFHLE1BQU07Z0JBQ2xDLElBQUlaLFFBQVEsQ0FBQzdMLFdBQVcsRUFBRSxDQUFDdUIsTUFBTSxHQUFHLENBQUMsRUFBRTtrQkFDdEMsSUFBSSxDQUFDMEssU0FBUyxDQUFDQyxVQUFVLENBQUNMLFFBQVEsRUFBRWhQLFFBQVEsQ0FBQztrQkFDN0NnUCxRQUFRLENBQUN6QyxXQUFXLENBQUMsUUFBUSxFQUFFcUQsb0JBQW9CLENBQUM7Z0JBQ3JEO2NBQ0QsQ0FBQztjQUVEWixRQUFRLENBQUM3TCxXQUFXLENBQUMsQ0FBQyxDQUFDO2NBQ3ZCNkwsUUFBUSxDQUFDNUUsV0FBVyxDQUFDLFFBQVEsRUFBRXdGLG9CQUFvQixDQUFDO1lBQ3JELENBQUMsTUFBTTtjQUNOO2NBQ0EsSUFBSSxDQUFDUixTQUFTLENBQUNDLFVBQVUsQ0FBQ3BRLFNBQVMsQ0FBQztZQUNyQztVQUNEO1FBQ0Q7TUFDRDtNQUVBLElBQUlzQixXQUFXLENBQUM0SixvQkFBb0IsRUFBRSxFQUFFO1FBQ3ZDLE1BQU0wRixTQUFTLEdBQUd0UCxXQUFXLENBQUNrTixXQUFXLEVBQUU7UUFDM0MsTUFBTXFDLGNBQWMsR0FBR3ZQLFdBQVcsQ0FBQ2dOLGdCQUFnQixFQUFFO1FBQ3JELElBQUl3QyxLQUFLLEdBQUcsQ0FBQztRQUNiLE1BQU1DLGFBQWEsR0FBR3pQLFdBQVcsQ0FBQ1EsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDQyxXQUFXLENBQUMsYUFBYSxDQUFDO1FBQzNFLE1BQU1pUCxlQUFlLEdBQUksSUFBSSxDQUFDblIsT0FBTyxFQUFFLENBQUN1QixXQUFXLEVBQUUsQ0FBUzZQLHFCQUFxQjtRQUNuRixLQUFLLElBQUlDLFFBQVEsR0FBRyxDQUFDLEVBQUVBLFFBQVEsR0FBR04sU0FBUyxDQUFDbkwsTUFBTSxFQUFFeUwsUUFBUSxFQUFFLEVBQUU7VUFDL0QsTUFBTTNILFFBQVEsR0FBR3FILFNBQVMsQ0FBQ00sUUFBUSxDQUFDO1VBQ3BDLE1BQU1DLFlBQVksR0FBRzVILFFBQVEsQ0FBQ0csY0FBYyxFQUFFO1VBQzlDLEtBQUssSUFBSTBILFdBQVcsR0FBRyxDQUFDLEVBQUVBLFdBQVcsR0FBR0QsWUFBWSxDQUFDMUwsTUFBTSxFQUFFMkwsV0FBVyxFQUFFLEVBQUVOLEtBQUssRUFBRSxFQUFFO1lBQ3BGO1lBQ0EsSUFBSUEsS0FBSyxHQUFHLENBQUMsSUFBS0QsY0FBYyxLQUFLSyxRQUFRLEdBQUcsQ0FBQyxJQUFLQSxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUNGLGVBQWUsSUFBSSxDQUFDRCxhQUFjLENBQUUsRUFBRTtjQUM5RyxNQUFNbEksV0FBVyxHQUFHc0ksWUFBWSxDQUFDQyxXQUFXLENBQUM7Y0FDN0MsSUFBSXZJLFdBQVcsQ0FBQ2xELElBQUksRUFBRSxDQUFDMEwsbUJBQW1CLEtBQUssTUFBTSxFQUFFO2dCQUN0RHhJLFdBQVcsQ0FBQ3lHLGlCQUFpQixDQUFDLElBQUksQ0FBUTtjQUMzQztZQUNEO1VBQ0Q7UUFDRDtNQUNEO01BRUEsSUFBSSxJQUFJLENBQUNnQyxXQUFXLENBQUNDLG9CQUFvQixFQUFFLElBQUl0USxXQUFXLENBQUN1USxlQUFlLEVBQUU7UUFDM0UsTUFBTTFRLEtBQUssR0FBRyxJQUFJLENBQUNqQixPQUFPLEVBQUU7UUFDNUIsTUFBTTRSLGFBQWEsR0FBSTNRLEtBQUssQ0FBQzZJLFNBQVMsRUFBRSxDQUFTK0gsVUFBVSxDQUFDL0gsU0FBUyxFQUFFO1FBQ3ZFLElBQUk4SCxhQUFhLEVBQUU7VUFDbEJBLGFBQWEsQ0FBQ0QsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDO01BQ0Q7SUFDRCxDQUFDO0lBQUEsT0FFREcseUJBQXlCLEdBQXpCLG1DQUEwQnJRLFdBQWdCLEVBQUU7TUFDM0MsSUFBSXNRLHNCQUFzQjtNQUMxQixNQUFNQyxRQUFRLEdBQUd2USxXQUFXLENBQUN3USxjQUFjLEVBQUUsSUFBSXhRLFdBQVcsQ0FBQ3dRLGNBQWMsRUFBRSxDQUFDQyxVQUFVLEVBQUU7TUFDMUYsSUFBSUYsUUFBUSxJQUFJQSxRQUFRLENBQUNwTSxNQUFNLEVBQUU7UUFDaENtTSxzQkFBc0IsR0FBR0MsUUFBUSxDQUFDaE4sSUFBSSxDQUFDLFVBQVVtTixPQUFZLEVBQUU7VUFDOUQ7VUFDQTtVQUNBO1VBQ0EsSUFBSUEsT0FBTyxDQUFDL04sR0FBRyxDQUFDLDhCQUE4QixDQUFDLEVBQUU7WUFDaEQ7WUFDQTtZQUNBLE9BQU8rTixPQUFPLENBQUNwSSxVQUFVLEVBQUU7VUFDNUIsQ0FBQyxNQUFNLElBQUksQ0FBQ29JLE9BQU8sQ0FBQy9OLEdBQUcsQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMrTixPQUFPLENBQUMvTixHQUFHLENBQUMscUJBQXFCLENBQUMsRUFBRTtZQUM1RixPQUFPK04sT0FBTyxDQUFDcEksVUFBVSxFQUFFLElBQUlvSSxPQUFPLENBQUNDLFVBQVUsRUFBRTtVQUNwRDtRQUNELENBQUMsQ0FBQztNQUNIO01BQ0EsT0FBT0wsc0JBQXNCO0lBQzlCLENBQUM7SUFBQSxPQUVETSwwQ0FBMEMsR0FBMUMsb0RBQTJDZixZQUFpQixFQUFFO01BQzdELElBQUlBLFlBQVksRUFBRTtRQUNqQixLQUFLLElBQUk5RyxVQUFVLEdBQUcsQ0FBQyxFQUFFQSxVQUFVLEdBQUc4RyxZQUFZLENBQUMxTCxNQUFNLEVBQUU0RSxVQUFVLEVBQUUsRUFBRTtVQUN4RSxNQUFNOEgsT0FBTyxHQUFHaEIsWUFBWSxDQUFDOUcsVUFBVSxDQUFDLENBQUM0QyxTQUFTLEVBQUU7VUFFcEQsSUFBSWtGLE9BQU8sRUFBRTtZQUNaLEtBQUssSUFBSTNFLEtBQUssR0FBRyxDQUFDLEVBQUVBLEtBQUssR0FBRzJFLE9BQU8sQ0FBQzFNLE1BQU0sRUFBRStILEtBQUssRUFBRSxFQUFFO2NBQ3BELElBQUk0RSxlQUFlO2NBRW5CLElBQUlELE9BQU8sQ0FBQzNFLEtBQUssQ0FBQyxDQUFDdkosR0FBRyxDQUFDLHlCQUF5QixDQUFDLEVBQUU7Z0JBQ2xEbU8sZUFBZSxHQUFHRCxPQUFPLENBQUMzRSxLQUFLLENBQUMsQ0FBQzZFLGlCQUFpQixFQUFFO2NBQ3JELENBQUMsTUFBTSxJQUNORixPQUFPLENBQUMzRSxLQUFLLENBQUMsQ0FBQzhFLFVBQVUsSUFDekJILE9BQU8sQ0FBQzNFLEtBQUssQ0FBQyxDQUFDOEUsVUFBVSxFQUFFLElBQzNCSCxPQUFPLENBQUMzRSxLQUFLLENBQUMsQ0FBQzhFLFVBQVUsRUFBRSxDQUFDck8sR0FBRyxDQUFDLHlCQUF5QixDQUFDLEVBQ3pEO2dCQUNEbU8sZUFBZSxHQUFHRCxPQUFPLENBQUMzRSxLQUFLLENBQUMsQ0FBQzhFLFVBQVUsRUFBRSxDQUFDRCxpQkFBaUIsRUFBRTtjQUNsRTtjQUVBLElBQUlELGVBQWUsRUFBRTtnQkFDcEIsS0FBSyxJQUFJRyxhQUFhLEdBQUcsQ0FBQyxFQUFFQSxhQUFhLEdBQUdILGVBQWUsQ0FBQzNNLE1BQU0sRUFBRThNLGFBQWEsRUFBRSxFQUFFO2tCQUNwRixNQUFNQyxhQUFhLEdBQUdKLGVBQWUsQ0FBQ0csYUFBYSxDQUFDLENBQUNFLGVBQWUsRUFBRTtrQkFDdEUsSUFBSUQsYUFBYSxFQUFFO29CQUNsQixLQUFLLElBQUlFLFdBQVcsR0FBRyxDQUFDLEVBQUVBLFdBQVcsR0FBR0YsYUFBYSxDQUFDL00sTUFBTSxFQUFFaU4sV0FBVyxFQUFFLEVBQUU7c0JBQzVFLE1BQU1DLE9BQU8sR0FBR0gsYUFBYSxDQUFDRSxXQUFXLENBQUMsQ0FBQ0UsU0FBUyxFQUFFOztzQkFFdEQ7c0JBQ0E7c0JBQ0EsSUFBSTt3QkFDSCxJQUFJRCxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUNFLFdBQVcsSUFBSUYsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDRSxXQUFXLEVBQUUsSUFBSSxDQUFDRixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUNHLFFBQVEsRUFBRSxFQUFFOzBCQUNqRixPQUFPSCxPQUFPLENBQUMsQ0FBQyxDQUFDO3dCQUNsQjtzQkFDRCxDQUFDLENBQUMsT0FBT3pQLEtBQUssRUFBRTt3QkFDZkQsR0FBRyxDQUFDOFAsS0FBSyxDQUFFLG1EQUFrRDdQLEtBQU0sRUFBQyxDQUFDO3NCQUN0RTtvQkFDRDtrQkFDRDtnQkFDRDtjQUNEO1lBQ0Q7VUFDRDtRQUNEO01BQ0Q7TUFDQSxPQUFPbEQsU0FBUztJQUNqQixDQUFDO0lBQUEsT0FFRCtJLHNCQUFzQixHQUF0QixnQ0FBdUJvSSxZQUFpQixFQUFFO01BQ3pDLE1BQU03UCxXQUFXLEdBQUcsSUFBSSxDQUFDQywyQkFBMkIsRUFBRTtNQUV0RCxNQUFNeVIsZUFBZSxHQUFHLElBQUksQ0FBQ2QsMENBQTBDLENBQUNmLFlBQVksQ0FBQztNQUNyRixJQUFJOEIsYUFBa0I7TUFDdEIsSUFBSUQsZUFBZSxFQUFFO1FBQ3BCQyxhQUFhLEdBQUdELGVBQWUsQ0FBQ3RGLE9BQU8sQ0FBQ3dGLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQztNQUM1RCxDQUFDLE1BQU07UUFDTkQsYUFBYSxHQUFJM1IsV0FBVyxDQUFTNlIsc0JBQXNCLEVBQUUsSUFBSSxJQUFJLENBQUN4Qix5QkFBeUIsQ0FBQ3JRLFdBQVcsQ0FBQztNQUM3RztNQUVBLElBQUkyUixhQUFhLEVBQUU7UUFDbEIvSixVQUFVLENBQUMsWUFBWTtVQUN0QjtVQUNBK0osYUFBYSxDQUFDRyxLQUFLLEVBQUU7UUFDdEIsQ0FBQyxFQUFFLENBQUMsQ0FBQztNQUNOO0lBQ0QsQ0FBQztJQUFBLE9BRURoSSxnQ0FBZ0MsR0FBaEMsMENBQWlDakosTUFBVyxFQUFFO01BQzdDLE1BQU0wRyxXQUFXLEdBQUcxRyxNQUFNLENBQUMyRyxZQUFZLENBQUMsWUFBWSxDQUFDO01BQ3JERCxXQUFXLENBQUN5RyxpQkFBaUIsQ0FBQ3RQLFNBQVMsQ0FBQztJQUN6QyxDQUFDO0lBQUEsT0FFRHFULHdCQUF3QixHQUF4QixrQ0FBeUJ0UyxRQUFhLEVBQUU7TUFDdkMsSUFBSSxDQUFDdVMsY0FBYyxDQUFDQyx3QkFBd0IsRUFBRTtNQUM5QyxJQUFJLElBQUksQ0FBQ25GLGVBQWUsRUFBRSxDQUFDb0YsY0FBYyxFQUFFLENBQUNDLHlCQUF5QixFQUFFLEVBQUU7UUFDeEU7UUFDQUMsT0FBTyxDQUFDQyxJQUFJLEVBQUU7TUFDZixDQUFDLE1BQU07UUFDTkMsS0FBSyxDQUFDQyx5Q0FBeUMsQ0FDOUMsWUFBWTtVQUNYSCxPQUFPLENBQUNDLElBQUksRUFBRTtRQUNmLENBQUMsRUFDREcsUUFBUSxDQUFDaEcsU0FBUyxFQUNsQi9NLFFBQVEsRUFDUixJQUFJLEVBQ0osS0FBSyxFQUNMNlMsS0FBSyxDQUFDRyxjQUFjLENBQUNDLGNBQWMsQ0FDbkM7TUFDRjtJQUNEOztJQUVBO0lBQUE7SUFBQSxPQUNBQyxlQUFlLEdBQWYseUJBQWdCQyxtQkFBd0IsRUFBRWpULFdBQWdCLEVBQUU7TUFDM0QsTUFBTUssV0FBVyxHQUFHLElBQUksQ0FBQ0MsMkJBQTJCLEVBQUU7TUFDdEQsTUFBTW9OLE9BQU8sR0FBRyxJQUFJLENBQUNwTSxXQUFXLEVBQUU7TUFFbEMsSUFBSSxDQUFDNFIsWUFBWSxDQUFDQyx3QkFBd0IsRUFBRTs7TUFFNUM7TUFDQTtNQUNBLE1BQU05USxjQUFjLEdBQUdoQyxXQUFXLENBQUN3QixpQkFBaUIsRUFBYTtNQUVqRSxJQUFJdVIsV0FBa0IsR0FBRyxFQUFFO01BQzNCL1MsV0FBVyxDQUFDa04sV0FBVyxFQUFFLENBQUM4RixPQUFPLENBQUMsVUFBVS9LLFFBQWEsRUFBRTtRQUMxREEsUUFBUSxDQUFDRyxjQUFjLEVBQUUsQ0FBQzRLLE9BQU8sQ0FBQyxVQUFVekwsV0FBZ0IsRUFBRTtVQUM3RHdMLFdBQVcsR0FBR3ZOLFdBQVcsQ0FBQ3lOLGFBQWEsQ0FBQzFMLFdBQVcsRUFBRXdMLFdBQVcsQ0FBQztRQUNsRSxDQUFDLENBQUM7TUFDSCxDQUFDLENBQUM7O01BRUY7TUFDQTtNQUNBO01BQ0E7TUFDQTs7TUFFQTFGLE9BQU8sQ0FBQzJGLE9BQU8sQ0FBQyxVQUFVaFMsTUFBVyxFQUFFO1FBQ3RDLE1BQU1xRyxxQkFBcUIsR0FBR3JHLE1BQU0sQ0FBQ1EsaUJBQWlCLENBQUMsVUFBVSxDQUFDO1FBQ2xFLElBQUk2RixxQkFBcUIsRUFBRTtVQUMxQkEscUJBQXFCLENBQUNrQyxXQUFXLENBQUMsMEJBQTBCLEVBQUUsQ0FBQyxDQUFDLENBQUM7VUFDakVsQyxxQkFBcUIsQ0FBQ2tDLFdBQVcsQ0FBQywyQkFBMkIsRUFBRSxDQUFDLENBQUMsQ0FBQztVQUVsRXdKLFdBQVcsR0FBR3ZOLFdBQVcsQ0FBQ3lOLGFBQWEsQ0FBQ2pTLE1BQU0sRUFBRStSLFdBQVcsQ0FBQzs7VUFFNUQ7VUFDQTtVQUNBO1VBQ0E7VUFDQSxNQUFNRyxnQkFBZ0IsR0FBR2xTLE1BQU0sQ0FBQ0ksYUFBYSxFQUFFO1VBQy9DLElBQUk4UixnQkFBZ0IsRUFBRTtZQUNyQixJQUFJQyxXQUFXLENBQUNDLHdCQUF3QixDQUFDRixnQkFBZ0IsQ0FBQzFTLFFBQVEsRUFBRSxDQUFDb0YsWUFBWSxFQUFFLENBQUMsRUFBRTtjQUNyRjtjQUNBc04sZ0JBQWdCLENBQUNHLHVCQUF1QixDQUFDLEVBQUUsQ0FBQztZQUM3QztVQUNEO1VBQ0E7O1VBRUE7VUFDQTtVQUNBLE1BQU1DLDRCQUE0QixHQUFHbE8sSUFBSSxDQUFDQyxLQUFLLENBQzlDdUgsWUFBWSxDQUFDMkcsZUFBZSxDQUFDQyxZQUFZLENBQUNDLGFBQWEsQ0FBQ3pTLE1BQU0sRUFBRSx1QkFBdUIsQ0FBQyxDQUFDLENBQ3pGO1VBRUQwUyxhQUFhLENBQUNDLG1CQUFtQixDQUFDdE0scUJBQXFCLEVBQUVpTSw0QkFBNEIsRUFBRSxFQUFFLEVBQUUsT0FBTyxDQUFDO1VBRW5HdFMsTUFBTSxDQUFDNFMsY0FBYyxFQUFFO1FBQ3hCO01BQ0QsQ0FBQyxDQUFDO01BQ0ZwTyxXQUFXLENBQUNxTywrQkFBK0IsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDO01BQy9EO01BQ0EsTUFBTUMsZ0JBQWdCLEdBQUc5VCxXQUFXLENBQUN3USxjQUFjLEVBQWtDO01BQ3JGLElBQUl1RCxpQkFBd0IsR0FBRyxFQUFFO01BQ2pDQSxpQkFBaUIsR0FBR3ZPLFdBQVcsQ0FBQ3lOLGFBQWEsQ0FBQ2EsZ0JBQWdCLEVBQUVDLGlCQUFpQixDQUFDO01BQ2xGaEIsV0FBVyxHQUFHQSxXQUFXLENBQUNpQixNQUFNLENBQUNELGlCQUFpQixDQUFDO01BQ25Edk8sV0FBVyxDQUFDeU8sc0NBQXNDLENBQUNsQixXQUFXLEVBQUUsSUFBSSxDQUFDeFUsT0FBTyxFQUFFLENBQUM7TUFFL0UsSUFBSTZRLE1BQVcsRUFBRThFLGFBQWtCOztNQUVuQztNQUNBO0FBQ0Y7QUFDQTtNQUNFLE1BQU1DLHdCQUF3QixHQUFJblQsTUFBVyxJQUFLO1FBQ2pELE1BQU15TixRQUFRLEdBQUcsSUFBSSxDQUFDL00sZ0JBQWdCLENBQUNWLE1BQU0sQ0FBQztVQUM3Q29ULHdCQUF3QixHQUFHLFlBQVk7WUFDdENsUyxXQUFXLENBQUNDLHFCQUFxQixDQUNoQ25CLE1BQU0sQ0FBQ00sY0FBYyxFQUFFLEVBQ3ZCbU4sUUFBUSxDQUFDck0sT0FBTyxFQUFFLEVBQ2xCcU0sUUFBUSxDQUFDM00sVUFBVSxFQUFFLEVBQ3JCc04sTUFBTSxFQUNOOEUsYUFBYSxDQUNiO1VBQ0YsQ0FBQztRQUVGLElBQUksQ0FBQ3pGLFFBQVEsRUFBRTtVQUNkOU0sR0FBRyxDQUFDQyxLQUFLLENBQUUsdUNBQXNDWixNQUFNLENBQUNhLEtBQUssRUFBRyxFQUFDLENBQUM7VUFDbEU7UUFDRDtRQUVBLElBQUk0TSxRQUFRLENBQUNoUCxRQUFRLEVBQUU7VUFDdEIyVSx3QkFBd0IsRUFBRTtRQUMzQixDQUFDLE1BQU07VUFDTixNQUFNQyxjQUFjLEdBQUcsWUFBWTtZQUNsQyxJQUFJNUYsUUFBUSxDQUFDaFAsUUFBUSxFQUFFO2NBQ3RCMlUsd0JBQXdCLEVBQUU7Y0FDMUIzRixRQUFRLENBQUM2RixZQUFZLENBQUNELGNBQWMsQ0FBQztZQUN0QztVQUNELENBQUM7VUFDRDVGLFFBQVEsQ0FBQ3pFLFlBQVksQ0FBQ3FLLGNBQWMsQ0FBQztRQUN0QztNQUNELENBQUM7TUFFRCxJQUFJclMsY0FBYyxFQUFFO1FBQ25Cb04sTUFBTSxHQUFHcE4sY0FBYyxDQUFDeEIsUUFBUSxFQUFFOztRQUVsQztRQUNBMFQsYUFBYSxHQUFHLElBQUksQ0FBQzVSLFFBQVEsQ0FBQ2lTLGVBQWUsQ0FBQ3ZTLGNBQWMsQ0FBQztRQUU3RCxJQUFJbVIsV0FBVyxDQUFDcUIsNkJBQTZCLENBQUNwRixNQUFNLENBQUN4SixZQUFZLEVBQUUsQ0FBQyxFQUFFO1VBQ3JFc08sYUFBYSxDQUNYcFIsSUFBSSxDQUFDLE1BQU07WUFDWCxJQUFJLElBQUksQ0FBQ3ZFLE9BQU8sRUFBRSxDQUFDaUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDQyxXQUFXLENBQUMsYUFBYSxDQUFDLEVBQUU7Y0FDN0RnVSxPQUFPLENBQUMsSUFBSSxDQUFDbFcsT0FBTyxFQUFFLENBQUM7WUFDeEIsQ0FBQyxNQUFNLElBQUlrTSxXQUFXLENBQUMsSUFBSSxDQUFDbE0sT0FBTyxFQUFFLENBQUMsRUFBRTtjQUN2Q21NLFVBQVUsQ0FBQyxJQUFJLENBQUNuTSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDN0I7VUFDRCxDQUFDLENBQUMsQ0FDRGtHLEtBQUssQ0FBQyxVQUFVaVEsTUFBVyxFQUFFO1lBQzdCL1MsR0FBRyxDQUFDQyxLQUFLLENBQUMsNENBQTRDLEVBQUU4UyxNQUFNLENBQUM7VUFDaEUsQ0FBQyxDQUFDO1FBQ0o7UUFDQTtRQUNBLElBQUksQ0FBQ0Msa0JBQWtCLEVBQUU7O1FBRXpCO1FBQ0EsTUFBTWxHLFFBQVEsR0FBSXpNLGNBQWMsQ0FBQzhMLFVBQVUsSUFBSTlMLGNBQWMsQ0FBQzhMLFVBQVUsRUFBRSxJQUFLOUwsY0FBYzs7UUFFN0Y7UUFDQSxJQUFJLElBQUksQ0FBQzRTLGNBQWMsS0FBS25HLFFBQVEsRUFBRTtVQUNyQ0EsUUFBUSxDQUFDNUUsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUN2SCxRQUFRLENBQUN1UyxlQUFlLEVBQUUsSUFBSSxDQUFDO1VBQzFFLElBQUksQ0FBQ0QsY0FBYyxHQUFHbkcsUUFBUTtRQUMvQjtRQUVBcEIsT0FBTyxDQUFDMkYsT0FBTyxDQUFDLFVBQVVoUyxNQUFXLEVBQUU7VUFDdEM7VUFDQThULFVBQVUsQ0FBQ0MsU0FBUyxDQUFDL1QsTUFBTSxDQUFDLENBQzFCOEIsSUFBSSxDQUFDcVIsd0JBQXdCLENBQUMsQ0FDOUIxUCxLQUFLLENBQUMsVUFBVWlRLE1BQVcsRUFBRTtZQUM3Qi9TLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDLCtDQUErQyxFQUFFOFMsTUFBTSxDQUFDO1VBQ25FLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQzs7UUFFRjtRQUNDMVUsV0FBVyxDQUFTZ1YsZ0NBQWdDLEVBQUU7O1FBRXZEO1FBQ0F0QixhQUFhLENBQUN1Qix1Q0FBdUMsQ0FBQyxJQUFJLENBQUMxVyxPQUFPLEVBQUUsQ0FBQztNQUN0RTtNQUNBLElBQUksQ0FBQzJXLDJCQUEyQixDQUFDdlYsV0FBVyxhQUFYQSxXQUFXLHVCQUFYQSxXQUFXLENBQUV3VixvQkFBb0IsQ0FBQztJQUNwRTs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQU5DO0lBQUEsT0FPQUQsMkJBQTJCLEdBQTNCLHFDQUE0QkUsVUFBOEIsRUFBRTtNQUFBO01BQzNELE1BQU1DLHNCQUFzQixvQkFBRyxJQUFJLENBQUM5VyxPQUFPLEVBQUUsa0RBQWQsY0FBZ0JpRCxpQkFBaUIsQ0FBQyxVQUFVLENBQUM7TUFDNUUsTUFBTThULGNBQWMsR0FBR0MsSUFBSSxDQUFDQyx3QkFBd0IsQ0FBQyxhQUFhLENBQUM7TUFDbkUsSUFBSUosVUFBVSxFQUFFO1FBQ2YsTUFBTWxLLE9BQU8sR0FBRyxJQUFJdUssT0FBTyxDQUFDO1VBQzNCdkssT0FBTyxFQUFFb0ssY0FBYyxDQUFDN00sT0FBTyxDQUFDLHNDQUFzQyxFQUFFLENBQUMyTSxVQUFVLENBQUMsQ0FBQztVQUNyRk0sSUFBSSxFQUFFO1FBQ1AsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxDQUFDeE8sZUFBZSxFQUFFLENBQUNrRSxZQUFZLENBQUMsQ0FBQ0YsT0FBTyxDQUFDLENBQUM7TUFDL0MsQ0FBQyxNQUFNO1FBQUE7UUFDTixNQUFNeUssZ0JBQWdCLEdBQUdMLGNBQWMsQ0FBQzdNLE9BQU8sQ0FBQyxzQ0FBc0MsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hHLE1BQU1tTixtQkFBbUIsR0FBR0QsZ0JBQWdCLENBQUNFLE1BQU0sQ0FBQyxHQUFHLENBQUM7UUFDeEQsSUFDQyxDQUFBUixzQkFBc0IsYUFBdEJBLHNCQUFzQixnREFBdEJBLHNCQUFzQixDQUFFNVUsV0FBVyxDQUFDLG9CQUFvQixDQUFDLDBEQUF6RCxzQkFBMkRxVixTQUFTLENBQUMsQ0FBQyxFQUFFRixtQkFBbUIsQ0FBQyxNQUM1RkQsZ0JBQWdCLENBQUNHLFNBQVMsQ0FBQyxDQUFDLEVBQUVGLG1CQUFtQixDQUFDLEVBQ2pEO1VBQ0QsSUFBSSxDQUFDMU8sZUFBZSxFQUFFLENBQUNrRSxZQUFZLENBQUMsRUFBRSxDQUFDO1FBQ3hDO01BQ0Q7SUFDRCxDQUFDO0lBQUEsT0FJRDJLLFdBQVcsR0FGWCxxQkFFWXBXLFdBQWdCLEVBQUU7TUFDN0IsTUFBTXFXLFFBQVEsR0FBRyxNQUFNO1FBQ3RCO1FBQ0EsTUFBTWhXLFdBQVcsR0FBRyxJQUFJLENBQUNDLDJCQUEyQixFQUFFO1FBQ3RELE1BQU1nVyxlQUFlLEdBQUcsQ0FBQ2pXLFdBQVcsQ0FBQ1EsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDQyxXQUFXLENBQUMsYUFBYSxDQUFDO1FBRTlFLElBQUl3VixlQUFlLEVBQUU7VUFDcEIsTUFBTTNGLHNCQUFzQixHQUFHLElBQUksQ0FBQ0QseUJBQXlCLENBQUNyUSxXQUFXLENBQUM7VUFDMUUsSUFBSXNRLHNCQUFzQixFQUFFO1lBQzNCQSxzQkFBc0IsQ0FBQ3dCLEtBQUssRUFBRTtVQUMvQjtRQUNELENBQUMsTUFBTTtVQUNOLE1BQU1vRSxnQkFBcUIsR0FBR1gsSUFBSSxDQUFDdk4sSUFBSSxDQUFDaEksV0FBVyxDQUFDbVcsa0JBQWtCLEVBQUUsQ0FBQztVQUN6RSxJQUFJRCxnQkFBZ0IsRUFBRTtZQUNyQixJQUFJLENBQUN6TyxzQkFBc0IsQ0FBQ3lPLGdCQUFnQixDQUFDOU4sY0FBYyxFQUFFLENBQUM7VUFDL0Q7UUFDRDtNQUNELENBQUM7TUFDRDtNQUNBLE1BQU01SSxLQUFLLEdBQUcsSUFBSSxDQUFDakIsT0FBTyxFQUFFO01BQzVCLE1BQU04SSxxQkFBcUIsR0FBRzdILEtBQUssQ0FBQ2dDLGlCQUFpQixDQUFDLFVBQVUsQ0FBeUI7TUFDekYsTUFBTTRVLGVBQWUsR0FBRzVXLEtBQUssQ0FBQ2dDLGlCQUFpQixFQUFFO01BQ2pEO01BQ0EsSUFBSTRVLGVBQWUsRUFBRTtRQUNwQixNQUFNQyxhQUFhLEdBQUdsRCxXQUFXLENBQUNDLHdCQUF3QixDQUFFZ0QsZUFBZSxDQUFDNVYsUUFBUSxFQUFFLENBQWdCb0YsWUFBWSxFQUFFLENBQUM7UUFDckgsSUFBSSxDQUFDeVEsYUFBYSxFQUFFO1VBQ25CLE1BQU1DLGFBQWEsR0FBRzlRLFdBQVcsQ0FBQ3NILGVBQWUsQ0FBQ3ROLEtBQUssQ0FBQztVQUN4RDhXLGFBQWEsQ0FBQ0MsZ0JBQWdCLEVBQUUsQ0FBQ0MsaUJBQWlCLENBQUMsTUFBTSxJQUFJLENBQUN6RSx3QkFBd0IsQ0FBQ3FFLGVBQWUsQ0FBQyxDQUFDO1FBQ3pHO01BQ0Q7TUFDQSxNQUFNSyxNQUFNLEdBQUcsSUFBSSxDQUFDbFksT0FBTyxFQUFFLENBQUNzRCxLQUFLLEVBQUU7TUFDckMsSUFBSSxDQUFDaUwsZUFBZSxFQUFFLENBQ3BCNEosa0JBQWtCLEVBQUUsQ0FDcEJDLGFBQWEsQ0FBQ0YsTUFBTSxFQUFFLElBQUksQ0FBQ2xZLE9BQU8sRUFBRSxDQUFDLENBQ3JDdUUsSUFBSSxDQUFDLE1BQU07UUFDWCxJQUFJbkQsV0FBVyxDQUFDaVgsVUFBVSxFQUFFO1VBQzNCWixRQUFRLEVBQUU7UUFDWDtNQUNELENBQUMsQ0FBQyxDQUNEdlIsS0FBSyxDQUFDLFVBQVVvUyxLQUFLLEVBQUU7UUFDdkJsVixHQUFHLENBQUNDLEtBQUssQ0FBQywrQkFBK0IsRUFBRWlWLEtBQUssQ0FBQztNQUNsRCxDQUFDLENBQUM7TUFFSHhQLHFCQUFxQixDQUFDa0MsV0FBVyxDQUFDLDRCQUE0QixFQUFFLEtBQUssQ0FBQztNQUN0RSxJQUFJLENBQUN1Tix5Q0FBeUMsRUFBRTtJQUNqRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQSxPQUtBclksaUJBQWlCLEdBQWpCLDZCQUFvQjtNQUNuQixNQUFNMlgsZUFBZSxHQUFHLElBQUksQ0FBQzdYLE9BQU8sRUFBRSxDQUFDaUQsaUJBQWlCLElBQUssSUFBSSxDQUFDakQsT0FBTyxFQUFFLENBQUNpRCxpQkFBaUIsRUFBYztNQUMzRyxJQUFJbEQsaUJBQWlCLEdBQUcsS0FBSztNQUM3QixJQUFJOFgsZUFBZSxFQUFFO1FBQ3BCLE1BQU1DLGFBQWEsR0FBR2xELFdBQVcsQ0FBQ0Msd0JBQXdCLENBQUNnRCxlQUFlLENBQUM1VixRQUFRLEVBQUUsQ0FBQ29GLFlBQVksRUFBRSxDQUFDO1FBQ3JHLElBQUl5USxhQUFhLEVBQUU7VUFDbEIvWCxpQkFBaUIsR0FBRyxJQUFJLENBQUNDLE9BQU8sRUFBRSxDQUFDaUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDQyxXQUFXLENBQUMsYUFBYSxDQUFDO1FBQzdFO01BQ0Q7TUFDQSxPQUFPbkMsaUJBQWlCO0lBQ3pCLENBQUM7SUFBQSxPQUVEMkIsMkJBQTJCLEdBQTNCLHVDQUE4QjtNQUM3QixPQUFPLElBQUksQ0FBQytILElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUNuQyxDQUFDO0lBQUEsT0FFRCtPLHdCQUF3QixHQUF4QixvQ0FBMkI7TUFDMUIsTUFBTS9XLFdBQVcsR0FBRyxJQUFJLENBQUNDLDJCQUEyQixFQUFFO01BQ3RELE1BQU0rVyxtQkFBbUIsR0FBR2hYLFdBQVcsQ0FBQ3lULGFBQWEsRUFBRSxDQUFDbFEsSUFBSSxDQUFDLFVBQVUwVCxXQUFnQixFQUFFO1FBQ3hGLE9BQU9BLFdBQVcsQ0FBQ0MsTUFBTSxFQUFFLEtBQUssb0JBQW9CO01BQ3JELENBQUMsQ0FBQztNQUNGLE9BQU87UUFDTkMsS0FBSyxFQUFFblgsV0FBVyxDQUFDcUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRTtRQUNoRCtTLFFBQVEsRUFBRUosbUJBQW1CLElBQUlBLG1CQUFtQixDQUFDeEYsUUFBUSxFQUFFO1FBQy9ENkYsTUFBTSxFQUFFLEVBQUU7UUFDVkMsSUFBSSxFQUFFO01BQ1AsQ0FBQztJQUNGLENBQUM7SUFBQSxPQUVEQyxzQkFBc0IsR0FBdEIsZ0NBQXVCdFUsR0FBUSxFQUFFO01BQ2hDLE1BQU11VSxTQUFTLEdBQUksR0FBRSxJQUFJLENBQUNqWixPQUFPLEVBQUUsQ0FBQ3NELEtBQUssRUFBRyxLQUFJb0IsR0FBSSxFQUFDO1FBQ3BEd1UsT0FBTyxHQUFJLElBQUksQ0FBQ3hYLDJCQUEyQixFQUFFLENBQUN1USxjQUFjLEVBQUUsQ0FDNURDLFVBQVUsRUFBRSxDQUNabE4sSUFBSSxDQUFDLFVBQVVtVSxRQUFhLEVBQUU7VUFDOUIsT0FBT0EsUUFBUSxDQUFDN1YsS0FBSyxFQUFFLEtBQUsyVixTQUFTO1FBQ3RDLENBQUMsQ0FBQztNQUNKLElBQUlDLE9BQU8sRUFBRTtRQUNaalMsV0FBVyxDQUFDbVMsZUFBZSxDQUFDRixPQUFPLENBQUM7TUFDckM7SUFDRCxDQUFDO0lBQUEsT0FFREcsc0JBQXNCLEdBQXRCLGdDQUF1QjNVLEdBQVEsRUFBRTtNQUNoQyxNQUFNdVUsU0FBUyxHQUFJLEdBQUUsSUFBSSxDQUFDalosT0FBTyxFQUFFLENBQUNzRCxLQUFLLEVBQUcsS0FBSW9CLEdBQUksRUFBQztRQUNwRHdVLE9BQU8sR0FBSSxJQUFJLENBQUN4WCwyQkFBMkIsRUFBRSxDQUFDNFgsU0FBUyxFQUFFLENBQVM3RyxVQUFVLEVBQUUsQ0FBQ3pOLElBQUksQ0FBQyxVQUFVbVUsUUFBYSxFQUFFO1VBQzVHLE9BQU9BLFFBQVEsQ0FBQ2hWLFdBQVcsRUFBRSxDQUFDb1YsT0FBTyxFQUFFLEtBQUssY0FBYyxJQUFJSixRQUFRLENBQUM3VixLQUFLLEVBQUUsS0FBSzJWLFNBQVM7UUFDN0YsQ0FBQyxDQUFDO01BQ0hoUyxXQUFXLENBQUNtUyxlQUFlLENBQUNGLE9BQU8sQ0FBQztJQUNyQyxDQUFDO0lBQUEsT0FFRE0sbUJBQW1CLEdBQW5CLDZCQUFvQkMsVUFBZSxFQUFFO01BQ3BDLE1BQU1oWSxXQUFXLEdBQUcsSUFBSSxDQUFDQywyQkFBMkIsRUFBRTtRQUNyRHFQLFNBQVMsR0FBR3RQLFdBQVcsQ0FBQ2tOLFdBQVcsRUFBRTtRQUNyQytLLGdCQUFnQixHQUFHM0ksU0FBUyxDQUFDbkwsTUFBTSxHQUFHLENBQUM7UUFDdkMrVCxRQUFRLEdBQUdGLFVBQVUsQ0FBQ2xYLE9BQU8sQ0FBQ3FYLFVBQVUsRUFBRTtNQUMzQyxJQUFJQyxVQUFVO1FBQ2JDLHFCQUFxQixHQUFHclksV0FBVyxDQUFDc1ksY0FBYyxDQUFDLElBQUksQ0FBQ3RRLElBQUksQ0FBQ2hJLFdBQVcsQ0FBQ21XLGtCQUFrQixFQUFFLENBQUMsQ0FBc0I7TUFDckgsSUFBSWtDLHFCQUFxQixLQUFLLENBQUMsQ0FBQyxJQUFJSixnQkFBZ0IsR0FBRyxDQUFDLEVBQUU7UUFDekQsSUFBSUMsUUFBUSxLQUFLLFNBQVMsRUFBRTtVQUMzQixJQUFJRyxxQkFBcUIsSUFBSUosZ0JBQWdCLEdBQUcsQ0FBQyxFQUFFO1lBQ2xERyxVQUFVLEdBQUc5SSxTQUFTLENBQUMsRUFBRStJLHFCQUFxQixDQUFDO1VBQ2hEO1FBQ0QsQ0FBQyxNQUFNLElBQUlBLHFCQUFxQixLQUFLLENBQUMsRUFBRTtVQUN2QztVQUNBRCxVQUFVLEdBQUc5SSxTQUFTLENBQUMsRUFBRStJLHFCQUFxQixDQUFDO1FBQ2hEO1FBRUEsSUFBSUQsVUFBVSxFQUFFO1VBQ2ZwWSxXQUFXLENBQUNvTyxrQkFBa0IsQ0FBQ2dLLFVBQVUsQ0FBQztVQUMxQ0EsVUFBVSxDQUFDdEcsS0FBSyxFQUFFO1FBQ25CO01BQ0Q7SUFDRCxDQUFDO0lBQUEsT0FFRHlHLG9CQUFvQixHQUFwQixnQ0FBdUI7TUFDdEIsTUFBTWxSLHFCQUFxQixHQUFHLElBQUksQ0FBQzlJLE9BQU8sRUFBRSxDQUFDaUQsaUJBQWlCLENBQUMsVUFBVSxDQUF5QjtNQUNsRyxNQUFNZ1gsT0FBTyxHQUFHLElBQUksQ0FBQ2phLE9BQU8sRUFBRSxDQUFDc0QsS0FBSyxFQUFFO01BQ3RDd0YscUJBQXFCLENBQUNrQyxXQUFXLENBQUMsNkJBQTZCLEVBQUUsS0FBSyxDQUFDO01BQ3ZFa1AsR0FBRyxDQUFDQyxFQUFFLENBQ0pDLE9BQU8sRUFBRSxDQUNUQyxpQkFBaUIsRUFBRSxDQUNuQkMsZUFBZSxFQUFFLENBQ2pCQyxPQUFPLEVBQUUsQ0FDVDlGLE9BQU8sQ0FBQyxVQUFVK0YsUUFBYSxFQUFFO1FBQ2pDLElBQUlBLFFBQVEsQ0FBQ0MsVUFBVSxJQUFJRCxRQUFRLENBQUNyRCxJQUFJLEtBQUssT0FBTyxJQUFJcUQsUUFBUSxDQUFDRSxNQUFNLENBQUNDLE9BQU8sQ0FBQ1YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7VUFDOUZuUixxQkFBcUIsQ0FBQ2tDLFdBQVcsQ0FBQyw2QkFBNkIsRUFBRSxJQUFJLENBQUM7UUFDdkU7TUFDRCxDQUFDLENBQUM7SUFDSixDQUFDO0lBQUEsT0FFRHpFLG1CQUFtQixHQUFuQiw2QkFBb0JKLEdBQVMsRUFBRXlVLElBQVUsRUFBRTtNQUMxQyxJQUFJelUsR0FBRyxFQUFFO1FBQ1IvQyxHQUFHLENBQUNDLEtBQUssQ0FBQzhDLEdBQUcsQ0FBQztNQUNmO01BQ0EsTUFBTTBVLGtCQUFrQixHQUFHLElBQUksQ0FBQ3RNLGVBQWUsRUFBRSxDQUFDdU0scUJBQXFCLEVBQVM7TUFDaEYsTUFBTUMsZUFBZSxHQUFHRixrQkFBa0IsQ0FBQ0csWUFBWSxFQUFFLEdBQ3RESCxrQkFBa0IsQ0FBQ0ksZ0JBQWdCLEVBQUUsR0FDcEMsSUFBSSxDQUFDMU0sZUFBZSxFQUFFLENBQUMyTSxnQkFBZ0IsRUFBRSxDQUFTQyxjQUFjLEVBQUU7TUFDdEUsSUFBSSxDQUFDSixlQUFlLENBQUMzVyxHQUFHLENBQUMsbUJBQW1CLENBQUMsRUFBRTtRQUM5QyxNQUFNZ1gsY0FBYyxHQUFHLElBQUksQ0FBQ2hWLGFBQWE7VUFDeEN5RixlQUFlLEdBQUd1UCxjQUFjLENBQUN2UCxlQUFlO1VBQ2hETCxZQUFZLEdBQUdLLGVBQWUsQ0FBQzBELFVBQVUsQ0FBQyxPQUFPLENBQUM7UUFFbkQsSUFBSS9ELFlBQVksQ0FBQzZQLFNBQVMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDeFAsZUFBZSxDQUFDQyxNQUFNLEVBQUUsRUFBRTtVQUM5RHNQLGNBQWMsQ0FBQ0UsVUFBVSxDQUFDLElBQUksQ0FBQztVQUMvQjtVQUNBalMsVUFBVSxDQUFDLFlBQVk7WUFDdEJ3QyxlQUFlLENBQUMwUCxNQUFNLENBQUNILGNBQWMsQ0FBQztVQUN2QyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ047TUFDRDtNQUNBLE9BQU9SLElBQUk7SUFDWixDQUFDO0lBQUEsT0FFRDVZLGFBQWEsR0FBYix1QkFBY2QsUUFBYSxFQUFFO01BQzVCLE1BQU0yUCxNQUFNLEdBQUcsSUFBSSxDQUFDN1EsT0FBTyxFQUFFLENBQUNpQyxRQUFRLENBQUMsSUFBSSxDQUFDO01BQzVDdVosVUFBVSxDQUFDQyxJQUFJLENBQUM1SyxNQUFNLENBQUM7TUFDdkIsT0FBTyxJQUFJLENBQUM5TSxRQUFRLENBQUMyWCxZQUFZLENBQUN4TixLQUFLLENBQUMsSUFBSSxDQUFDbkssUUFBUSxFQUFFLENBQUM3QyxRQUFRLENBQUMsQ0FBQyxDQUFDeWEsT0FBTyxDQUFDLFlBQVk7UUFDdEZILFVBQVUsQ0FBQ0ksTUFBTSxDQUFDL0ssTUFBTSxDQUFDO01BQzFCLENBQUMsQ0FBQztJQUNILENBQUM7SUFBQSxPQUVLZ0wsaUJBQWlCLEdBQXZCLG1DQUF1RTtNQUN0RSxNQUFNQyxZQUFZLEdBQUcsSUFBSSxDQUFDdk4sZUFBZSxFQUFFO01BQzNDLE1BQU1YLE9BQU8sR0FBR29KLElBQUksQ0FBQ3ZOLElBQUksQ0FBQ3VOLElBQUksQ0FBQytFLDBCQUEwQixFQUFFLENBQUM7TUFDNUQsTUFBTUMsT0FBTyxHQUFHcE8sT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUUzSyxpQkFBaUIsRUFBeUI7TUFDbkUsSUFBSStZLE9BQU8sSUFBSSxDQUFDQSxPQUFPLENBQUNDLFdBQVcsRUFBRSxFQUFFO1FBQ3RDLE1BQU1DLGtCQUFrQixHQUFHSixZQUFZLENBQUNLLHFCQUFxQixFQUFFO1FBQy9ELE1BQU1DLFVBQVUsR0FBR0Ysa0JBQWtCLENBQUNHLHdCQUF3QixDQUFDTCxPQUFPLENBQUM7UUFDdkUsTUFBTU0saUJBQWlCLEdBQUdGLFVBQVUsR0FBR0Ysa0JBQWtCLENBQUNLLCtCQUErQixDQUFDSCxVQUFVLENBQUMsR0FBRyxFQUFFO1FBQzFHO1FBQ0EsSUFBSUUsaUJBQWlCLENBQUMxVyxNQUFNLEVBQUU7VUFDN0IsTUFBTSxJQUFJLENBQUM3QixRQUFRLENBQUN5WSxRQUFRLEVBQUU7VUFDOUIsT0FBT0MsT0FBTyxDQUFDQyxHQUFHLENBQUNKLGlCQUFpQixDQUFDNVUsR0FBRyxDQUFFaVYsV0FBVyxJQUFLLElBQUksQ0FBQ3JJLFlBQVksQ0FBQ3NJLGtCQUFrQixDQUFDRCxXQUFXLEVBQUVYLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDdkg7UUFDQSxNQUFNYSxnQkFBZ0IsR0FBSSxNQUFNNVYsV0FBVyxDQUFDNlYsaUJBQWlCLENBQUNsZSxnQkFBZ0IsQ0FBQ21lLEtBQUssRUFBRSxJQUFJLENBQUMvYyxPQUFPLEVBQUUsRUFBRThiLFlBQVksQ0FBYTtRQUMvSDtRQUNBLElBQUllLGdCQUFnQixFQUFFO1VBQ3JCLE1BQU0sSUFBSSxDQUFDOVksUUFBUSxDQUFDeVksUUFBUSxFQUFFO1VBQzlCLE9BQU96SSxLQUFLLENBQUNpSixzQkFBc0IsQ0FBQ0gsZ0JBQWdCLEVBQUVmLFlBQVksRUFBRTVQLFdBQVcsQ0FBQyxJQUFJLENBQUNsTSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ2pHO01BQ0Q7TUFDQSxPQUFPRyxTQUFTO0lBQ2pCLENBQUM7SUFBQSxPQUVLZ0MsYUFBYSxHQUFuQiw2QkFBb0JqQixRQUFhLEVBQUU7TUFDbEMsTUFBTTJQLE1BQU0sR0FBRyxJQUFJLENBQUM3USxPQUFPLEVBQUUsQ0FBQ2lDLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDM0NnYixvQkFBMkIsR0FBRyxFQUFFO01BQ2pDO01BQ0EsSUFBSUMsMEJBQTBCLEdBQUcsS0FBSztNQUN0QzFCLFVBQVUsQ0FBQ0MsSUFBSSxDQUFDNUssTUFBTSxDQUFDO01BQ3ZCLElBQUksQ0FBQ25PLFdBQVcsRUFBRSxDQUFDK1IsT0FBTyxDQUFFaFMsTUFBVyxJQUFLO1FBQzNDLE1BQU15TixRQUFRLEdBQUcsSUFBSSxDQUFDL00sZ0JBQWdCLENBQUNWLE1BQU0sQ0FBQztRQUM5QyxNQUFNckIsV0FBZ0IsR0FBRztVQUN4QitiLFlBQVksRUFBRTFhLE1BQU0sQ0FBQ3FELElBQUksQ0FBQyxjQUFjLENBQUM7VUFDekNzWCxXQUFXLEVBQUUzYSxNQUFNLENBQUNNLGNBQWMsRUFBRTtVQUNwQ3NhLFdBQVcsRUFBRTVhLE1BQU0sQ0FBQ3FELElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSztRQUM3QyxDQUFDO1FBQ0QsTUFBTXdYLGVBQWUsR0FDcEJsYyxXQUFXLENBQUNnYyxXQUFXLElBQ3ZCaGMsV0FBVyxDQUFDZ2MsV0FBVyxDQUFDbmEsaUJBQWlCLEVBQUUsSUFDM0NnRixNQUFNLENBQUNuRCxJQUFJLENBQUMxRCxXQUFXLENBQUNnYyxXQUFXLENBQUNuYSxpQkFBaUIsRUFBRSxDQUFDbUMsU0FBUyxFQUFFLENBQUMsQ0FBQ1EsTUFBTSxHQUFHLENBQUM7UUFDaEYsSUFBSTBYLGVBQWUsRUFBRTtVQUNwQjtVQUNBO1VBQ0FsYyxXQUFXLENBQUNtYyxnQkFBZ0IsR0FBRyxJQUFJO1VBQ25DTCwwQkFBMEIsR0FBRyxJQUFJO1VBQ2pDRCxvQkFBb0IsQ0FBQy9OLElBQUksQ0FDeEIsSUFBSSxDQUFDbkwsUUFBUSxDQUFDeVosY0FBYyxDQUFDdE4sUUFBUSxFQUFFOU8sV0FBVyxDQUFDLENBQUNtRCxJQUFJLENBQUMsWUFBWTtZQUNwRSxPQUFPMkwsUUFBUTtVQUNoQixDQUFDLENBQUMsQ0FDRjtRQUNGO01BQ0QsQ0FBQyxDQUFDO01BRUYsSUFBSTtRQUNILE1BQU11TixTQUFTLEdBQUcsTUFBTWhCLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDTyxvQkFBb0IsQ0FBQztRQUN6RCxNQUFNN2IsV0FBVyxHQUFHO1VBQ25COGIsMEJBQTBCLEVBQUVBLDBCQUEwQjtVQUN0RFEsUUFBUSxFQUFFRDtRQUNYLENBQUM7UUFDRDtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsSUFBSTtVQUNILE1BQU0sSUFBSSxDQUFDMVosUUFBUSxDQUFDNFosWUFBWSxDQUFDemMsUUFBUSxFQUFFRSxXQUFXLENBQUM7UUFDeEQsQ0FBQyxDQUFDLE9BQU9pQyxLQUFVLEVBQUU7VUFDcEI7VUFDQTtVQUNBO1VBQ0E7VUFDQSxJQUFJLENBQUNrRCxtQkFBbUIsQ0FBQ2xELEtBQUssQ0FBQztVQUMvQixNQUFNQSxLQUFLO1FBQ1o7TUFDRCxDQUFDLFNBQVM7UUFDVCxJQUFJbVksVUFBVSxDQUFDb0MsUUFBUSxDQUFDL00sTUFBTSxDQUFDLEVBQUU7VUFDaEMySyxVQUFVLENBQUNJLE1BQU0sQ0FBQy9LLE1BQU0sQ0FBQztRQUMxQjtNQUNEO0lBQ0QsQ0FBQztJQUFBLE9BRURnTixvQkFBb0IsR0FBcEIsZ0NBQXVCO01BQ3RCQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM5ZCxPQUFPLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBQUEsT0FFRCtkLDZCQUE2QixHQUE3Qix1Q0FBOEI5USxLQUFVLEVBQUU7TUFDekMrUSxlQUFlLENBQUMvUSxLQUFLLEVBQUUsSUFBSSxDQUFDak4sT0FBTyxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUFBLE9BRURpZSxlQUFlLEdBQWYseUJBQWdCL2MsUUFBYSxFQUFFRSxXQUFnQixFQUFFO01BQ2hEQSxXQUFXLENBQUM4YyxZQUFZLEdBQUcsSUFBSSxDQUFDbGUsT0FBTyxFQUFFLENBQUN5SixJQUFJLENBQUNySSxXQUFXLENBQUM4YyxZQUFZLENBQUMsQ0FBQyxDQUFDO01BQzFFLE9BQU8sSUFBSSxDQUFDbmEsUUFBUSxDQUFDb2EsY0FBYyxDQUFDamQsUUFBUSxFQUFFRSxXQUFXLENBQUM7SUFDM0QsQ0FBQztJQUFBLE9BRURnQixjQUFjLEdBQWQsd0JBQWVsQixRQUFpQixFQUFFO01BQ2pDLE9BQU8sSUFBSSxDQUFDNkMsUUFBUSxDQUFDcWEsYUFBYSxDQUFDbGQsUUFBUSxDQUFDLENBQUNnRixLQUFLLENBQUMsTUFBTSxJQUFJLENBQUNLLG1CQUFtQixFQUFFLENBQUM7SUFDckYsQ0FBQztJQUFBLE9BRUQ2UCxrQkFBa0IsR0FBbEIsOEJBQXFCO01BQ3BCLE1BQU0zVSxXQUFXLEdBQUcsSUFBSSxDQUFDQywyQkFBMkIsRUFBRTtNQUN0RCxNQUFNMmMsZUFBZSxHQUFHNWMsV0FBVyxDQUFDcUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDO01BQzNELElBQUl1WSxlQUFlLEtBQUssTUFBTSxJQUFJQSxlQUFlLEtBQUssSUFBSSxFQUFFO1FBQzNELE1BQU12QyxZQUFZLEdBQUc3VSxXQUFXLENBQUNzSCxlQUFlLENBQUMsSUFBSSxDQUFDdk8sT0FBTyxFQUFFLENBQUM7UUFDaEVpSCxXQUFXLENBQUNxWCx3QkFBd0IsQ0FBQzdjLFdBQVcsRUFBRXFhLFlBQVksQ0FBQztNQUNoRTtJQUNELENBQUM7SUFBQSxPQUVEeUMsd0JBQXdCLEdBQXhCLGtDQUF5QkMsY0FBbUIsRUFBRUMsV0FBZ0IsRUFBRUMsU0FBYyxFQUFFQyxRQUFrQixFQUFFO01BQ25HLEtBQUssSUFBSUMsT0FBTyxHQUFHLENBQUMsRUFBRUEsT0FBTyxHQUFHSixjQUFjLENBQUM1WSxNQUFNLEVBQUVnWixPQUFPLEVBQUUsRUFBRTtRQUNqRSxJQUFJekYsUUFBUSxHQUFHcUYsY0FBYyxDQUFDSSxPQUFPLENBQUMsQ0FBQ25NLFVBQVUsWUFBWXdCLFFBQVEsSUFBSXVLLGNBQWMsQ0FBQ0ksT0FBTyxDQUFDLENBQUNuTSxVQUFVLEVBQUU7UUFDN0csSUFBSWtNLFFBQVEsRUFBRTtVQUNiLElBQUl4RixRQUFRLElBQUlBLFFBQVEsQ0FBQzBGLGFBQWEsSUFBSTFGLFFBQVEsQ0FBQzJGLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUMzRSxNQUFNQyxNQUFNLEdBQUc1RixRQUFRLENBQUMyRixjQUFjLENBQUMsT0FBTyxDQUFDO1lBQy9DQyxNQUFNLENBQUN0SyxPQUFPLENBQUMsVUFBVXVLLEtBQVUsRUFBRTtjQUNwQyxJQUFJQSxLQUFLLENBQUM1YSxHQUFHLENBQUMsOEJBQThCLENBQUMsRUFBRTtnQkFDOUMrVSxRQUFRLEdBQUc2RixLQUFLO2NBQ2pCO1lBQ0QsQ0FBQyxDQUFDO1VBQ0g7UUFDRDtRQUNBLElBQUk3RixRQUFRLElBQUlBLFFBQVEsQ0FBQy9VLEdBQUcsSUFBSStVLFFBQVEsQ0FBQy9VLEdBQUcsQ0FBQyxrQ0FBa0MsQ0FBQyxFQUFFO1VBQ2pGK1UsUUFBUSxHQUFHQSxRQUFRLENBQUM4RixjQUFjLFlBQVloTCxRQUFRLElBQUlrRixRQUFRLENBQUM4RixjQUFjLEVBQUU7VUFDbkYsSUFBSTlGLFFBQVEsSUFBSUEsUUFBUSxDQUFDdlQsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNwQ3VULFFBQVEsR0FBR0EsUUFBUSxDQUFDLENBQUMsQ0FBQztVQUN2QjtRQUNEO1FBQ0E7UUFDQTtRQUNBLElBQUlBLFFBQVEsSUFBSUEsUUFBUSxDQUFDL1UsR0FBRyxJQUFJK1UsUUFBUSxDQUFDL1UsR0FBRyxDQUFDLGFBQWEsQ0FBQyxJQUFJK1UsUUFBUSxDQUFDclQsSUFBSSxDQUFDLDRCQUE0QixDQUFDLEVBQUU7VUFDM0dxVCxRQUFRLEdBQUdBLFFBQVEsQ0FBQ3JULElBQUksQ0FBQyxtQkFBbUIsQ0FBQztRQUM5QztRQUNBLElBQUlxVCxRQUFRLElBQUlBLFFBQVEsQ0FBQy9VLEdBQUcsSUFBSStVLFFBQVEsQ0FBQy9VLEdBQUcsQ0FBQyw4QkFBOEIsQ0FBQyxFQUFFO1VBQzdFK1UsUUFBUSxHQUFHQSxRQUFRLENBQUMxRyxVQUFVLFlBQVl3QixRQUFRLElBQUlrRixRQUFRLENBQUMxRyxVQUFVLEVBQUU7VUFDM0UsSUFBSTBHLFFBQVEsSUFBSUEsUUFBUSxDQUFDdlQsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNwQ3VULFFBQVEsR0FBR0EsUUFBUSxDQUFDLENBQUMsQ0FBQztVQUN2QjtRQUNEO1FBQ0EsSUFBSUEsUUFBUSxJQUFJQSxRQUFRLENBQUMvVSxHQUFHLElBQUkrVSxRQUFRLENBQUMvVSxHQUFHLENBQUMsa0JBQWtCLENBQUMsRUFBRTtVQUNqRXNhLFNBQVMsQ0FBQ3hQLElBQUksQ0FBQ2lLLFFBQVEsQ0FBQztRQUN6QjtRQUNBLElBQUlBLFFBQVEsSUFBSUEsUUFBUSxDQUFDL1UsR0FBRyxJQUFJK1UsUUFBUSxDQUFDL1UsR0FBRyxDQUFDLDhCQUE4QixDQUFDLEVBQUU7VUFDN0UrVSxRQUFRLEdBQUdBLFFBQVEsQ0FBQzFHLFVBQVUsWUFBWXdCLFFBQVEsSUFBSWtGLFFBQVEsQ0FBQzFHLFVBQVUsRUFBRTtVQUMzRSxJQUFJMEcsUUFBUSxJQUFJQSxRQUFRLENBQUN2VCxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3BDdVQsUUFBUSxHQUFHQSxRQUFRLENBQUMsQ0FBQyxDQUFDO1VBQ3ZCO1FBQ0Q7UUFDQSxJQUFJQSxRQUFRLElBQUlBLFFBQVEsQ0FBQy9VLEdBQUcsSUFBSStVLFFBQVEsQ0FBQy9VLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO1VBQ2pFc2EsU0FBUyxDQUFDeFAsSUFBSSxDQUFDaUssUUFBUSxDQUFDO1FBQ3pCO01BQ0Q7SUFDRCxDQUFDO0lBQUEsT0FFRHZLLGtCQUFrQixHQUFsQiw4QkFBcUI7TUFDcEIsTUFBTW5OLFdBQVcsR0FBRyxJQUFJLENBQUNDLDJCQUEyQixFQUFFO01BQ3RELElBQUk0UCxZQUFtQixHQUFHLEVBQUU7TUFDNUI3UCxXQUFXLENBQUNrTixXQUFXLEVBQUUsQ0FBQzhGLE9BQU8sQ0FBQyxVQUFVL0ssUUFBYSxFQUFFO1FBQzFENEgsWUFBWSxHQUFHQSxZQUFZLENBQUNtRSxNQUFNLENBQUMvTCxRQUFRLENBQUNHLGNBQWMsRUFBRSxDQUFDO01BQzlELENBQUMsQ0FBQztNQUNGLE9BQU95SCxZQUFZO0lBQ3BCLENBQUM7SUFBQSxPQUVENE4sYUFBYSxHQUFiLHlCQUFnQjtNQUNmLElBQUk1TSxPQUFjLEdBQUcsRUFBRTtNQUN2QixJQUFJLENBQUMxRCxrQkFBa0IsRUFBRSxDQUFDNkYsT0FBTyxDQUFDLFVBQVV6TCxXQUFnQixFQUFFO1FBQzdEc0osT0FBTyxHQUFHQSxPQUFPLENBQUNtRCxNQUFNLENBQUN6TSxXQUFXLENBQUNvRSxTQUFTLEVBQUUsQ0FBQztNQUNsRCxDQUFDLENBQUM7TUFDRixPQUFPa0YsT0FBTztJQUNmLENBQUM7SUFBQSxPQUVENVAsV0FBVyxHQUFYLHVCQUFjO01BQ2IsTUFBTTRPLFlBQVksR0FBRyxJQUFJLENBQUMxQyxrQkFBa0IsRUFBRTtNQUM5QyxNQUFNRSxPQUFjLEdBQUcsRUFBRTtNQUN6QixLQUFLLElBQUl0RSxVQUFVLEdBQUcsQ0FBQyxFQUFFQSxVQUFVLEdBQUc4RyxZQUFZLENBQUMxTCxNQUFNLEVBQUU0RSxVQUFVLEVBQUUsRUFBRTtRQUN4RSxJQUFJLENBQUMrVCx3QkFBd0IsQ0FBQ2pOLFlBQVksQ0FBQzlHLFVBQVUsQ0FBQyxDQUFDNEMsU0FBUyxFQUFFLEVBQUVrRSxZQUFZLENBQUM5RyxVQUFVLENBQUMsRUFBRXNFLE9BQU8sQ0FBQztRQUN0RyxJQUFJLENBQUN5UCx3QkFBd0IsQ0FBQ2pOLFlBQVksQ0FBQzlHLFVBQVUsQ0FBQyxDQUFDNkMsYUFBYSxFQUFFLEVBQUVpRSxZQUFZLENBQUM5RyxVQUFVLENBQUMsRUFBRXNFLE9BQU8sQ0FBQztNQUMzRztNQUNBLE9BQU9BLE9BQU87SUFDZixDQUFDO0lBQUEsT0FFRHFRLFdBQVcsR0FBWCx1QkFBYztNQUNiLE1BQU03TixZQUFZLEdBQUcsSUFBSSxDQUFDMUMsa0JBQWtCLEVBQUU7TUFDOUMsTUFBTXdRLE9BQWMsR0FBRyxFQUFFO01BQ3pCLEtBQUssSUFBSTVVLFVBQVUsR0FBRyxDQUFDLEVBQUVBLFVBQVUsR0FBRzhHLFlBQVksQ0FBQzFMLE1BQU0sRUFBRTRFLFVBQVUsRUFBRSxFQUFFO1FBQ3hFLElBQUksQ0FBQytULHdCQUF3QixDQUFDak4sWUFBWSxDQUFDOUcsVUFBVSxDQUFDLENBQUM0QyxTQUFTLEVBQUUsRUFBRWtFLFlBQVksQ0FBQzlHLFVBQVUsQ0FBQyxFQUFFNFUsT0FBTyxFQUFFLElBQUksQ0FBQztRQUM1RyxJQUFJLENBQUNiLHdCQUF3QixDQUFDak4sWUFBWSxDQUFDOUcsVUFBVSxDQUFDLENBQUM2QyxhQUFhLEVBQUUsRUFBRWlFLFlBQVksQ0FBQzlHLFVBQVUsQ0FBQyxFQUFFNFUsT0FBTyxFQUFFLElBQUksQ0FBQztNQUNqSDtNQUNBLE9BQU9BLE9BQU87SUFDZixDQUFDO0lBQUEsT0FFRGhRLGlCQUFpQixHQUFqQiw2QkFBb0I7TUFDbkIsSUFBSSxDQUFDOFAsYUFBYSxFQUFFLENBQUN6SyxPQUFPLENBQUMsVUFBVTRLLE1BQVcsRUFBRTtRQUNuRCxNQUFNQyxRQUFRLEdBQUdELE1BQU0sQ0FBQzVNLFVBQVUsWUFBWXdCLFFBQVEsSUFBSW9MLE1BQU0sQ0FBQzVNLFVBQVUsRUFBRTtRQUM3RSxJQUFJNk0sUUFBUSxJQUFJQSxRQUFRLENBQUNsYixHQUFHLElBQUlrYixRQUFRLENBQUNsYixHQUFHLENBQUMsa0NBQWtDLENBQUMsRUFBRTtVQUNqRixJQUFJa2IsUUFBUSxDQUFDQyxrQkFBa0IsWUFBWXRMLFFBQVEsRUFBRTtZQUNwRHFMLFFBQVEsQ0FBQ0Msa0JBQWtCLENBQUMsS0FBSyxDQUFDO1VBQ25DO1FBQ0Q7TUFDRCxDQUFDLENBQUM7SUFDSDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQU5DO0lBQUEsT0FPQS9YLG9CQUFvQixHQUFwQiw4QkFBcUJnWSxhQUFrQixFQUFFQyxVQUFrQixFQUFFO01BQzVELE1BQU1DLFlBQVksR0FBR0YsYUFBYSxDQUFDcGEsU0FBUyxFQUFFO01BQzlDLElBQUl1YSxpQkFBaUIsR0FBRyxDQUFDRCxZQUFZLENBQUM7TUFDdEMsSUFBSUYsYUFBYSxJQUFJQyxVQUFVLEVBQUU7UUFDaEMsSUFBSUMsWUFBWSxDQUFDRCxVQUFVLENBQUMsRUFBRTtVQUM3QkUsaUJBQWlCLEdBQUdELFlBQVksQ0FBQ0QsVUFBVSxDQUFDO1VBQzVDLE9BQU9DLFlBQVksQ0FBQ0QsVUFBVSxDQUFDO1VBQy9CRSxpQkFBaUIsQ0FBQ3pRLElBQUksQ0FBQ3dRLFlBQVksQ0FBQztRQUNyQztNQUNEO01BQ0EsT0FBT0MsaUJBQWlCO0lBQ3pCOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTkM7SUFBQSxPQVFBQyxrQkFBa0IsR0FBbEIsNEJBQW1CQyxRQUFnQixFQUFFO01BQ3BDLElBQUksSUFBSSxDQUFDbmQsV0FBVyxJQUFJLElBQUksQ0FBQ0EsV0FBVyxFQUFFLENBQUNrRCxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ3RELE1BQU1rSixPQUFPLEdBQUcsSUFBSSxDQUFDcE0sV0FBVyxFQUFFO1FBQ2xDLEtBQUssSUFBSXdDLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBRzRKLE9BQU8sQ0FBQ2xKLE1BQU0sRUFBRVYsQ0FBQyxFQUFFLEVBQUU7VUFDeEM0YSxhQUFhLENBQUNDLGdCQUFnQixDQUFDalIsT0FBTyxDQUFDNUosQ0FBQyxDQUFDLEVBQUUyYSxRQUFRLENBQUM7UUFDckQ7TUFDRDtJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BVEM7SUFBQSxPQVVBRyxzQkFBc0IsR0FBdEIsZ0NBQXVCQyxZQUFxQixFQUFFQyxZQUFtQixFQUFFVCxVQUFrQixFQUFFO01BQ3RGLElBQUlVLFdBQWtCLEdBQUcsRUFBRTtRQUMxQkMsZUFBZSxHQUFHLEVBQUU7UUFDcEJsZixRQUFRO1FBQ1JtZixhQUFxQjtRQUNyQkMsU0FBUztNQUVWLE1BQU1DLFNBQVMsR0FBR04sWUFBWSxDQUFDcGMsT0FBTyxFQUFFO01BQ3hDLE1BQU0yYyxVQUFVLEdBQUdQLFlBQVksSUFBSUEsWUFBWSxDQUFDaGUsUUFBUSxFQUFFLElBQUlnZSxZQUFZLENBQUNoZSxRQUFRLEVBQUUsQ0FBQ29GLFlBQVksRUFBRTtNQUNwRyxNQUFNb1osYUFBYSxHQUFHRCxVQUFVLElBQUlBLFVBQVUsQ0FBQ2xaLFdBQVcsQ0FBQ2laLFNBQVMsQ0FBQyxDQUFDNVAsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7O01BRXpGO01BQ0EsSUFBSXVQLFlBQVksSUFBSUEsWUFBWSxDQUFDdGEsTUFBTSxFQUFFO1FBQ3hDMUUsUUFBUSxHQUFHZ2YsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUMxQkksU0FBUyxHQUFHcGYsUUFBUSxDQUFDMkMsT0FBTyxFQUFFO1FBQzlCd2MsYUFBYSxHQUFHRyxVQUFVLElBQUlBLFVBQVUsQ0FBQ2xaLFdBQVcsQ0FBQ2daLFNBQVMsQ0FBQyxDQUFDM1AsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7UUFFbkZ1UCxZQUFZLENBQUN6TCxPQUFPLENBQUVpTSxjQUFtQixJQUFLO1VBQzdDLElBQUlqQixVQUFVLEVBQUU7WUFDZixNQUFNRSxpQkFBaUIsR0FBRyxJQUFJLENBQUNuWSxvQkFBb0IsQ0FBQ2taLGNBQWMsRUFBRWpCLFVBQVUsQ0FBQztZQUMvRSxJQUFJRSxpQkFBaUIsRUFBRTtjQUN0QlEsV0FBVyxHQUFHUixpQkFBaUIsQ0FBQ2pZLEdBQUcsQ0FBQyxVQUFVaVosb0JBQXlCLEVBQUU7Z0JBQ3hFLE9BQU87a0JBQ05DLFdBQVcsRUFBRUQsb0JBQW9CO2tCQUNqQ3hXLFNBQVMsRUFBRyxHQUFFc1csYUFBYyxJQUFHaEIsVUFBVztnQkFDM0MsQ0FBQztjQUNGLENBQUMsQ0FBQztZQUNIO1VBQ0QsQ0FBQyxNQUFNO1lBQ05VLFdBQVcsQ0FBQ2pSLElBQUksQ0FBQztjQUNoQjBSLFdBQVcsRUFBRUYsY0FBYyxDQUFDdGIsU0FBUyxFQUFFO2NBQ3ZDK0UsU0FBUyxFQUFFa1c7WUFDWixDQUFDLENBQUM7VUFDSDtRQUNELENBQUMsQ0FBQztNQUNIO01BQ0FELGVBQWUsQ0FBQ2xSLElBQUksQ0FBQztRQUNwQjBSLFdBQVcsRUFBRVgsWUFBWSxDQUFDN2EsU0FBUyxFQUFFO1FBQ3JDK0UsU0FBUyxFQUFFc1c7TUFDWixDQUFDLENBQUM7TUFDRjtNQUNBTCxlQUFlLEdBQUcsSUFBSSxDQUFDclksc0JBQXNCLENBQUM4WSxtQkFBbUIsQ0FBQ1QsZUFBZSxFQUFFSyxhQUFhLENBQUM7TUFDakcsTUFBTUssWUFBWSxHQUFHN1osV0FBVyxDQUFDOFosZ0NBQWdDLENBQUMsSUFBSUMsZ0JBQWdCLEVBQUUsRUFBRVosZUFBZSxFQUFFLElBQUksQ0FBQ3BnQixPQUFPLEVBQUUsQ0FBQztNQUMxSG1nQixXQUFXLEdBQUcsSUFBSSxDQUFDcFksc0JBQXNCLENBQUM4WSxtQkFBbUIsQ0FBQ1YsV0FBVyxFQUFFTSxhQUFhLENBQUM7TUFDekYsT0FBTztRQUNOUSxnQkFBZ0IsRUFBRUgsWUFBWTtRQUM5QkksVUFBVSxFQUFFZjtNQUNiLENBQUM7SUFDRixDQUFDO0lBQUEsT0FFRC9VLHNCQUFzQixHQUF0QixrQ0FBeUI7TUFDeEIsTUFBTStDLFNBQVMsR0FBRyxJQUFJLENBQUNuTyxPQUFPLEVBQUUsQ0FBQ3VCLFdBQVcsRUFBUztRQUNwRDRmLGVBQWUsR0FBR2hULFNBQVMsQ0FBQ2lULG9CQUFvQjtRQUNoREMsZUFBZSxHQUFHRixlQUFlLElBQUlsWixNQUFNLENBQUNuRCxJQUFJLENBQUNxYyxlQUFlLENBQUM7UUFDakVuUyxZQUFZLEdBQUcsQ0FBQyxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxDQUFDO01BRXJFLElBQUlxUyxlQUFlLElBQUlBLGVBQWUsQ0FBQ3piLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDbER5YixlQUFlLENBQUM1TSxPQUFPLENBQUMsVUFBVWxQLElBQVMsRUFBRTtVQUM1QyxNQUFNK2IsY0FBYyxHQUFHSCxlQUFlLENBQUM1YixJQUFJLENBQUM7VUFDNUMsSUFBSStiLGNBQWMsQ0FBQ0MsY0FBYyxLQUFLLGFBQWEsRUFBRTtZQUNwRHZTLFlBQVksQ0FBQ0UsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1VBQ3ZDO1FBQ0QsQ0FBQyxDQUFDO01BQ0g7TUFDQSxPQUFPRixZQUFZO0lBQ3BCOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BWkM7SUFBQSxPQWFNd1MsbUJBQW1CLEdBQXpCLG1DQUEwQmpmLE9BQW9CLEVBQUU7TUFDL0MsTUFBTXJCLFFBQVEsR0FBR3FCLE9BQU8sQ0FBQ1UsaUJBQWlCLEVBQUU7UUFDM0M4VSxhQUFhLEdBQUcsSUFBSSxDQUFDeEosZUFBZSxFQUFFO1FBQ3RDa1QsU0FBMEIsR0FBRyxFQUFFO1FBQy9CQyxrQkFBeUIsR0FBRyxFQUFFO1FBQzlCQyxRQUFRLEdBQUd6Z0IsUUFBUSxhQUFSQSxRQUFRLHVCQUFSQSxRQUFRLENBQUUyQyxPQUFPLEVBQUU7UUFDOUIrZCxVQUFVLEdBQUcsQ0FBQUQsUUFBUSxhQUFSQSxRQUFRLHVCQUFSQSxRQUFRLENBQUVFLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSSxFQUFFO1FBQ3ZDckIsVUFBVSxHQUFHekksYUFBYSxJQUFJQSxhQUFhLENBQUMxUSxZQUFZLEVBQUU7TUFDM0QsSUFBSXlhLEtBQUssR0FBRyxFQUFFO01BQ2QsSUFBSTtRQUNIRixVQUFVLENBQUNHLEtBQUssRUFBRTtRQUNsQkgsVUFBVSxDQUFDSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hCSixVQUFVLENBQUNuTixPQUFPLENBQUMsVUFBVXdOLFNBQWMsRUFBRTtVQUM1Q0gsS0FBSyxJQUFLLElBQUdHLFNBQVUsRUFBQztVQUN4QixNQUFNQyxtQkFBbUIsR0FBR25LLGFBQWEsQ0FBQytDLHFCQUFxQixFQUFFO1VBQ2pFLE1BQU1xSCxjQUFjLEdBQUczQixVQUFVLENBQUNsWixXQUFXLENBQUN3YSxLQUFLLENBQUM7VUFDcEQsTUFBTU0sY0FBYyxHQUFHNUIsVUFBVSxDQUFDcGIsU0FBUyxDQUFFLEdBQUUrYyxjQUFlLGdEQUErQyxDQUFDO1VBQzlHLElBQUlDLGNBQWMsRUFBRTtZQUNuQjtZQUNBVixrQkFBa0IsQ0FBQ3hTLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDMUI7VUFDRCxDQUFDLE1BQU07WUFDTndTLGtCQUFrQixDQUFDeFMsSUFBSSxDQUFDLENBQUMsQ0FBQztVQUMzQjtVQUNBdVMsU0FBUyxDQUFDdlMsSUFBSSxDQUFDZ1QsbUJBQW1CLENBQUNHLG9CQUFvQixDQUFDUCxLQUFLLENBQUMsQ0FBQztRQUNoRSxDQUFDLENBQUM7UUFDRixNQUFNUSxtQkFBMEIsR0FBRyxNQUFNN0YsT0FBTyxDQUFDQyxHQUFHLENBQUMrRSxTQUFTLENBQUM7UUFDL0QsSUFBSWMsR0FBRyxFQUFFQyxpQkFBaUIsRUFBRUMsS0FBSztRQUNqQyxLQUFLLE1BQU1DLGtCQUFrQixJQUFJSixtQkFBbUIsRUFBRTtVQUNyREUsaUJBQWlCLEdBQUdGLG1CQUFtQixDQUFDM0gsT0FBTyxDQUFDK0gsa0JBQWtCLENBQUM7VUFDbkVILEdBQUcsR0FBR0MsaUJBQWlCLEdBQUdkLGtCQUFrQixDQUFDYyxpQkFBaUIsQ0FBQztVQUMvREMsS0FBSyxHQUFHbGdCLE9BQU8sQ0FBQ29nQixRQUFRLEVBQUUsQ0FBQ0osR0FBRyxDQUFDLEdBQUdoZ0IsT0FBTyxDQUFDb2dCLFFBQVEsRUFBRSxDQUFDSixHQUFHLENBQUMsR0FBRyxJQUFJSyxJQUFJLEVBQUU7VUFDdEU7VUFDQUgsS0FBSyxDQUFDSSxPQUFPLENBQUNILGtCQUFrQixDQUFDN0osUUFBUSxJQUFJNkosa0JBQWtCLENBQUM5SixLQUFLLENBQUM7VUFDdEU7VUFDQTZKLEtBQUssQ0FBQ0ssT0FBTyxDQUFDQyxTQUFTLENBQUNMLGtCQUFrQixDQUFDNUosTUFBTSxDQUFDLENBQUM7VUFDbkQsSUFBSSxDQUFDdlcsT0FBTyxDQUFDb2dCLFFBQVEsRUFBRSxDQUFDSixHQUFHLENBQUMsRUFBRTtZQUM3QmhnQixPQUFPLENBQUN5Z0IsT0FBTyxDQUFDUCxLQUFLLENBQUM7VUFDdkI7UUFDRDtNQUNELENBQUMsQ0FBQyxPQUFPcGYsS0FBVSxFQUFFO1FBQ3BCRCxHQUFHLENBQUNDLEtBQUssQ0FBQywyQ0FBMkMsR0FBR0EsS0FBSyxDQUFDO01BQy9EO0lBQ0QsQ0FBQztJQUFBLE9BRURrVix5Q0FBeUMsR0FBekMscURBQTRDO01BQzNDLE1BQU10WCxLQUFLLEdBQUcsSUFBSSxDQUFDakIsT0FBTyxFQUFFO01BQzVCLE1BQU04SSxxQkFBcUIsR0FBRzdILEtBQUssQ0FBQ2dDLGlCQUFpQixDQUFDLFVBQVUsQ0FBeUI7TUFDekYsTUFBTWdnQixXQUFXLEdBQUdoYyxXQUFXLENBQUNpYyw2Q0FBNkMsQ0FDNUVqaUIsS0FBSyxDQUFDTSxXQUFXLEVBQUUsRUFDbkIsSUFBSSxDQUFDZ04sZUFBZSxFQUFFLENBQUM0VSxpQkFBaUIsRUFBRSxDQUFDQyxZQUFZLEVBQUUsQ0FDekQ7TUFDRCxNQUFNQyxjQUFjLEdBQUcsSUFBSSxDQUFDOVUsZUFBZSxFQUFFLENBQUN5SixnQkFBZ0IsRUFBRTtNQUNoRSxNQUFNaUksWUFBWSxHQUFHaGYsS0FBSyxJQUFLQSxLQUFLLENBQUNnQyxpQkFBaUIsRUFBYztNQUNwRTZGLHFCQUFxQixDQUFDa0MsV0FBVyxDQUFDLHVCQUF1QixFQUFFLENBQUMsQ0FBQyxDQUFDO01BQzlELElBQUlpVixZQUFZLEVBQUU7UUFDakJBLFlBQVksQ0FDVnFELGFBQWEsRUFBRSxDQUNmL2UsSUFBSSxDQUFDLFVBQVVLLEtBQVUsRUFBRTtVQUMzQjJlLFVBQVUsQ0FBQ04sV0FBVyxFQUFFcmUsS0FBSyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUNEc0IsS0FBSyxDQUFDLFVBQVVpUSxNQUFXLEVBQUU7VUFDN0IvUyxHQUFHLENBQUNDLEtBQUssQ0FBQyxrREFBa0QsRUFBRThTLE1BQU0sQ0FBQztRQUN0RSxDQUFDLENBQUM7TUFDSjs7TUFFQTtBQUNGO0FBQ0E7TUFDRSxTQUFTcU4sU0FBUyxDQUFDck4sTUFBVyxFQUFFO1FBQy9CL1MsR0FBRyxDQUFDQyxLQUFLLENBQUM4UyxNQUFNLENBQUM7TUFDbEI7TUFFQSxTQUFTc04sbUJBQW1CLENBQUNDLEVBQVUsRUFBRUMsZUFBb0IsRUFBRTtRQUM5RCxNQUFNQyxPQUFPLEdBQUdGLEVBQUU7UUFDbEI7UUFDQSxJQUFJQyxlQUFlLElBQUlBLGVBQWUsQ0FBQy9kLE1BQU0sS0FBSyxDQUFDLElBQUkrZCxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUNFLFNBQVMsRUFBRTtVQUNwRi9hLHFCQUFxQixDQUFDa0MsV0FBVyxDQUFFLHlCQUF3QjRZLE9BQVEsRUFBQyxFQUFFLElBQUksQ0FBQztRQUM1RTtNQUNEOztNQUVBO0FBQ0Y7QUFDQTtBQUNBO01BQ0UsU0FBU0wsVUFBVSxDQUFDTyxjQUFtQixFQUFFQyxTQUFjLEVBQUU7UUFDeEQsS0FBSyxNQUFNcmYsR0FBRyxJQUFJb2YsY0FBYyxFQUFFO1VBQ2pDLE1BQU1FLFVBQVUsR0FBR0YsY0FBYyxDQUFDcGYsR0FBRyxDQUFDO1VBQ3RDLE1BQU1vRCxPQUFZLEdBQUcsQ0FBQyxDQUFDO1VBQ3ZCLE1BQU0yYSxLQUFLLEdBQUd4aEIsS0FBSyxDQUFDd0ksSUFBSSxDQUFDL0UsR0FBRyxDQUFDO1VBQzdCLElBQUksQ0FBQytkLEtBQUssRUFBRTtZQUNYO1lBQ0E7VUFDRDtVQUNBLE1BQU13QixZQUFZLEdBQUd4QixLQUFLLENBQUN4ZixpQkFBaUIsRUFBRTtVQUM5QyxNQUFNaWhCLFNBQWMsR0FBR0QsWUFBWSxJQUFJQSxZQUFZLENBQUM3ZSxTQUFTLEVBQUU7VUFDL0QsSUFBSStlLGFBQWtCLEdBQUdDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRUwsU0FBUyxFQUFFRyxTQUFTLENBQUM7VUFDeEQ7VUFDQSxJQUFJRixVQUFVLENBQUMxYixxQkFBcUIsRUFBRTtZQUNyQyxNQUFNdEIsc0JBQXNCLEdBQUdnZCxVQUFVLENBQUMxYixxQkFBcUI7WUFDL0QsS0FBSyxNQUFNbUUsSUFBSSxJQUFJekYsc0JBQXNCLEVBQUU7Y0FDMUMsTUFBTXFkLFFBQVEsR0FBR3JkLHNCQUFzQixDQUFDeUYsSUFBSSxDQUFDO2NBQzdDLE1BQU02WCxhQUFhLEdBQUdELFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxlQUFlLENBQUM7Y0FDaEUsTUFBTUUsZUFBZSxHQUFHRixRQUFRLENBQUMsd0JBQXdCLENBQUM7Y0FDMUQsSUFBSUMsYUFBYSxLQUFLQyxlQUFlLEVBQUU7Z0JBQ3RDLElBQUlKLGFBQWEsQ0FBQ0ssY0FBYyxDQUFDRixhQUFhLENBQUMsRUFBRTtrQkFDaEQsTUFBTUcsV0FBZ0IsR0FBRyxDQUFDLENBQUM7a0JBQzNCQSxXQUFXLENBQUNGLGVBQWUsQ0FBQyxHQUFHSixhQUFhLENBQUNHLGFBQWEsQ0FBQztrQkFDM0RILGFBQWEsR0FBR0MsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFRCxhQUFhLEVBQUVNLFdBQVcsQ0FBQztrQkFDckQsT0FBT04sYUFBYSxDQUFDRyxhQUFhLENBQUM7Z0JBQ3BDO2NBQ0Q7WUFDRDtVQUNEO1VBRUEsSUFBSUgsYUFBYSxFQUFFO1lBQ2xCLEtBQUssTUFBTTVlLElBQUksSUFBSTRlLGFBQWEsRUFBRTtjQUNqQyxJQUFJNWUsSUFBSSxDQUFDb1YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSXBWLElBQUksQ0FBQ29WLE9BQU8sQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDcEU3UyxPQUFPLENBQUN2QyxJQUFJLENBQUMsR0FBRzRlLGFBQWEsQ0FBQzVlLElBQUksQ0FBQztjQUNwQztZQUNEO1VBQ0Q7VUFDQTtVQUNBOGQsY0FBYyxDQUNacUIscUJBQXFCLENBQUMsQ0FDdEI7WUFDQ2hLLE1BQU0sRUFBRTtjQUNQeFMsY0FBYyxFQUFFOGIsVUFBVSxDQUFDOWIsY0FBYztjQUN6Q0MsTUFBTSxFQUFFNmIsVUFBVSxDQUFDN2I7WUFDcEIsQ0FBQztZQUNEd2MsTUFBTSxFQUFFN2M7VUFDVCxDQUFDLENBQ0QsQ0FBQyxDQUNEdkQsSUFBSSxDQUFFcWdCLE1BQU0sSUFBSztZQUNqQixPQUFPbkIsbUJBQW1CLENBQUMvZSxHQUFHLEVBQUVrZ0IsTUFBTSxDQUFDO1VBQ3hDLENBQUMsQ0FBQyxDQUNEMWUsS0FBSyxDQUFDc2QsU0FBUyxDQUFDO1FBQ25CO01BQ0Q7SUFDRCxDQUFDO0lBQUE7RUFBQSxFQXp2Q2lDeFYsY0FBYztJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7RUFBQSxPQThnRGxDbFAsb0JBQW9CO0FBQUEifQ==
|