@sapui5/sap.fe.core 1.124.7 → 1.124.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/ActionRuntime.js +7 -3
- package/src/sap/fe/core/ActionRuntime.ts +6 -2
- package/src/sap/fe/core/AppComponent.js +11 -4
- package/src/sap/fe/core/AppComponent.ts +12 -3
- package/src/sap/fe/core/controllerextensions/EditFlow.js +6 -2
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +5 -1
- package/src/sap/fe/core/controllerextensions/PageReady.js +19 -18
- package/src/sap/fe/core/controllerextensions/PageReady.ts +20 -17
- package/src/sap/fe/core/controllerextensions/SideEffects.js +55 -7
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +55 -2
- package/src/sap/fe/core/controls/ComponentLoader.js +2 -2
- package/src/sap/fe/core/controls/ComponentLoader.ts +1 -1
- package/src/sap/fe/core/converters/controls/Common/Table.js +11 -7
- package/src/sap/fe/core/converters/controls/Common/Table.ts +8 -6
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +32 -2
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +32 -1
- package/src/sap/fe/core/library.js +1 -1
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +8 -17
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +14 -16
- package/src/sap/fe/core/templating/UIFormatters.js +18 -2
- package/src/sap/fe/core/templating/UIFormatters.ts +15 -0
- package/src/sap/fe/core/type/Email.js +2 -2
- package/src/sap/fe/core/type/Email.ts +1 -1
package/package.json
CHANGED
package/src/sap/fe/core/.library
CHANGED
|
@@ -102,10 +102,14 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
102
102
|
for (const sAction in oActionOperationAvailableMap) {
|
|
103
103
|
let aRequestPromises = [];
|
|
104
104
|
oInternalModelContext.setProperty(sAction, false);
|
|
105
|
-
if (
|
|
105
|
+
if (sControl === "table") {
|
|
106
106
|
oInternalModelContext.setProperty(`dynamicActions/${sAction}/aApplicable`, []);
|
|
107
107
|
oInternalModelContext.setProperty(`dynamicActions/${sAction}/aNotApplicable`, []);
|
|
108
|
-
|
|
108
|
+
if (forContextMenu) {
|
|
109
|
+
oInternalModelContext.setProperty(`dynamicActions/${sAction}/bEnabledForContextMenu`, false);
|
|
110
|
+
} else {
|
|
111
|
+
oInternalModelContext.setProperty(`dynamicActions/${sAction}/bEnabled`, false);
|
|
112
|
+
}
|
|
109
113
|
}
|
|
110
114
|
const sProperty = oActionOperationAvailableMap[sAction];
|
|
111
115
|
for (const element of aSelectedContexts) {
|
|
@@ -325,4 +329,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
325
329
|
};
|
|
326
330
|
return ActionRuntime;
|
|
327
331
|
}, false);
|
|
328
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBY3Rpb25SdW50aW1lIiwiX2FkZE1lc3NhZ2VGb3JBY3Rpb25QYXJhbWV0ZXIiLCJtZXNzYWdlUGFyYW1ldGVycyIsIk1lc3NhZ2luZyIsImFkZE1lc3NhZ2VzIiwibWFwIiwibWVzc2FnZVBhcmFtZXRlciIsImJpbmRpbmciLCJhY3Rpb25QYXJhbWV0ZXJJbmZvIiwiZmllbGQiLCJnZXRCaW5kaW5nIiwiaXNNdWx0aVZhbHVlIiwiTWVzc2FnZSIsIm1lc3NhZ2UiLCJ0eXBlIiwiTWVzc2FnZVR5cGUiLCJFcnJvciIsInByb2Nlc3NvciIsImdldE1vZGVsIiwidW5kZWZpbmVkIiwicGVyc2lzdGVudCIsInRhcmdldCIsImdldFJlc29sdmVkUGF0aCIsInZhbGlkYXRlUHJvcGVydGllcyIsImFjdGlvblBhcmFtZXRlckluZm9zIiwicmVzb3VyY2VNb2RlbCIsIlByb21pc2UiLCJhbGxTZXR0bGVkIiwidmFsaWRhdGlvblByb21pc2UiLCJyZXF1aXJlZFBhcmFtZXRlckluZm9zIiwiZmlsdGVyIiwicGFyYW1ldGVySW5mbyIsImdldFJlcXVpcmVkIiwiYWxsTWVzc2FnZXMiLCJnZXRNZXNzYWdlTW9kZWwiLCJnZXREYXRhIiwiZW1wdHlSZXF1aXJlZEZpZWxkcyIsInJlcXVpcmVkUGFyYW1ldGVySW5mbyIsImZpZWxkSWQiLCJnZXRJZCIsInJlbGV2YW50TWVzc2FnZXMiLCJtc2ciLCJnZXRDb250cm9sSWRzIiwic29tZSIsImNvbnRyb2xJZCIsImluY2x1ZGVzIiwibGVuZ3RoIiwidmFsdWUiLCJmaWVsZFZhbHVlIiwiZ2V0VmFsdWUiLCJpc0ZpZWxkQXJyYXkiLCJBcnJheSIsImlzQXJyYXkiLCJnZXRUZXh0IiwiZ2V0UGFyZW50IiwiZ2V0QWdncmVnYXRpb24iLCJmaXJzdEludmFsaWRQYXJhbWV0ZXIiLCJmaW5kIiwiaGFzRXJyb3IiLCJnZXRWYWx1ZVN0YXRlIiwiZm9jdXMiLCJzZXRBY3Rpb25FbmFibGVtZW50Iiwib0ludGVybmFsTW9kZWxDb250ZXh0Iiwib0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsImFTZWxlY3RlZENvbnRleHRzIiwic0NvbnRyb2wiLCJmb3JDb250ZXh0TWVudSIsImFQcm9taXNlcyIsInNBY3Rpb24iLCJhUmVxdWVzdFByb21pc2VzIiwic2V0UHJvcGVydHkiLCJzUHJvcGVydHkiLCJlbGVtZW50Iiwib1NlbGVjdGVkQ29udGV4dCIsIm9Db250ZXh0RGF0YSIsImdldE9iamVjdCIsIl9zZXRBY3Rpb25FbmFibGVtZW50Rm9yVGFibGUiLCJiRW5hYmxlZCIsImFBcHBsaWNhYmxlIiwiYU5vdEFwcGxpY2FibGUiLCJwdXNoIiwiQ29tbW9uVXRpbHMiLCJzZXRDb250ZXh0c0Jhc2VkT25PcGVyYXRpb25BdmFpbGFibGUiLCJhbGwiLCJzZXRBY3Rpb25FbmFibGVtZW50QWZ0ZXJQYXRjaCIsIm9WaWV3Iiwib0xpc3RCaW5kaW5nIiwib0ludGVybmFsTW9kZWxDb250ZXh0RGF0YSIsIm9Db250cm9scyIsImNvbnRyb2xzIiwic0tleSIsIm9UYWJsZSIsImJ5SWQiLCJpc0EiLCJvUm93QmluZGluZyIsImdldFJvd0JpbmRpbmciLCJnZXRCaW5kaW5nQ29udGV4dCIsIkpTT04iLCJwYXJzZSIsImRhdGEiLCJjdXN0b21EYXRhIiwiZ2V0U2VsZWN0ZWRDb250ZXh0cyIsInVwZGF0ZUVkaXRCdXR0b25WaXNpYmlsaXR5QW5kRW5hYmxlbWVudCIsImlWaWV3TGV2ZWwiLCJnZXRWaWV3RGF0YSIsInZpZXdMZXZlbCIsImlzRWRpdGFibGUiLCJnZXRQcm9wZXJ0eSIsIm9Db250ZXh0Iiwib0FwcENvbXBvbmVudCIsImdldEFwcENvbXBvbmVudCIsInNNZXRhUGF0aCIsIk1vZGVsSGVscGVyIiwiZ2V0TWV0YVBhdGhGb3JDb250ZXh0Iiwic0VudGl0eVNldCIsImdldFJvb3RFbnRpdHlTZXRQYXRoIiwibWV0YUNvbnRleHQiLCJnZXRNZXRhTW9kZWwiLCJnZXRDb250ZXh0IiwiZ2V0UGF0aCIsImNvbnZlcnRlckNvbnRleHQiLCJDb252ZXJ0ZXJDb250ZXh0IiwiY3JlYXRlQ29udmVydGVyQ29udGV4dEZvck1hY3JvIiwiZ2V0RGlhZ25vc3RpY3MiLCJtZXJnZSIsImVudGl0eVNldCIsImdldEVudGl0eVNldCIsImVudGl0eVR5cGUiLCJnZXRFbnRpdHlUeXBlIiwidXBkYXRlSGlkZGVuIiwiYlVwZGF0ZUhpZGRlbiIsImlzRW50aXR5U2V0IiwiYW5ub3RhdGlvbnMiLCJVSSIsIlVwZGF0ZUhpZGRlbiIsInZhbHVlT2YiLCJpc1VwZGF0ZUhpZGRlbiIsInNFZGl0RW5hYmxlQmluZGluZyIsImdldEVkaXRCdXR0b25FbmFibGVkIiwiZHJhZnRSb290UGF0aCIsImdldERyYWZ0Um9vdFBhdGgiLCJzU3RpY2t5Um9vdFBhdGgiLCJnZXRTdGlja3lSb290UGF0aCIsInNQYXRoIiwib1Jvb3RDb250ZXh0IiwiYmluZENvbnRleHQiLCJnZXRCb3VuZENvbnRleHQiLCJzSGlkZGVuRXhwcmVzc2lvbiIsImNvbXBpbGVFeHByZXNzaW9uIiwiZXF1YWwiLCJnZXRIaWRkZW5FeHByZXNzaW9uIiwidXBkYXRlRWRpdE1vZGVsQ29udGV4dCIsInNCaW5kaW5nRXhwcmVzc2lvbiIsIm9IaWRkZW5FbGVtZW50IiwiQW55RWxlbWVudCIsImFueVRleHQiLCJzZXRCaW5kaW5nQ29udGV4dCIsImFkZERlcGVuZGVudCIsIiQkZ3JvdXBJZCIsImF0dGFjaENoYW5nZSIsIm9FdmVudCIsIm9OZXdWYWx1ZSIsImdldFNvdXJjZSIsImdldEV4dGVybmFsVmFsdWUiLCJzRW5hYmxlbWVudEZpZWxkTmFtZSIsImJBY3Rpb25FbmFibGVkIiwiYkVuYWJsZWRGb3JDb250ZXh0TWVudSIsImFBcHBsaWNhYmxlRm9yQ29udGV4dE1lbnUiLCJhTm90QXBwbGljYWJsZUZvckNvbnRleHRNZW51Iiwic0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aCIsIm9UcmFuc2Zvcm1lZEJpbmRpbmciLCJ0cmFuc2Zvcm1SZWN1cnNpdmVseSIsIm9CaW5kaW5nRXhwcmVzc2lvbiIsImNvbnN0YW50IiwicGF0aCIsInNSZXN1bHQiLCJzZXREeW5hbWljQWN0aW9uQ29udGV4dHMiLCJyZXF1ZXN0UHJvcGVydHkiLCJnZXRJc0FjdGlvbkNyaXRpY2FsIiwibWV0YU1vZGVsIiwiY29udGV4dHMiLCJpc0FjdGlvbkNyaXRpY2FsVmFsdWUiLCJjb252ZXJ0ZWRUeXBlcyIsImNvbnZlcnRUeXBlcyIsImFjdGlvblRhcmdldFJlc29sdXRpb24iLCJyZXNvbHZlUGF0aCIsImFjdGlvblRhcmdldCIsImlzQWN0aW9uQ3JpdGljYWxCaW5kaW5nRXhwIiwiZ2V0SXNBY3Rpb25Dcml0aWNhbEV4cHJlc3Npb24iLCJpc0NvbnN0YW50IiwiY29tcGlsZUNvbnN0YW50IiwicmVzb2x2ZSIsImFueU9iamVjdCIsIkFueSIsImFueUJvb2xlYW4iLCJzZXRNb2RlbCIsImJvb2xlYW5CaW5kaW5nIiwiZm5DaGFuZ2UiLCJ2YWx1ZUV4dCIsImRlc3Ryb3kiLCJhdHRhY2hFdmVudE9uY2UiLCJlcnIiLCJTdHJpbmciLCJMb2ciLCJlcnJvciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQWN0aW9uUnVudGltZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFjdGlvbiBhcyBFZG1BY3Rpb24sIFByaW1pdGl2ZVR5cGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IG1lcmdlIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgeyBfUmVxdWVzdGVkUHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCBBbnkgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL0FueVwiO1xuaW1wb3J0IHR5cGUgeyBQYXRoSW5Nb2RlbEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgY29tcGlsZUNvbnN0YW50LCBjb21waWxlRXhwcmVzc2lvbiwgY29uc3RhbnQsIGVxdWFsLCBpc0NvbnN0YW50LCB0cmFuc2Zvcm1SZWN1cnNpdmVseSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgaXNFbnRpdHlTZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgeyBnZXRJc0FjdGlvbkNyaXRpY2FsRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0FjdGlvbkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgTGFiZWwgZnJvbSBcInNhcC9tL0xhYmVsXCI7XG5pbXBvcnQgdHlwZSBFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCBNZXNzYWdpbmcgZnJvbSBcInNhcC91aS9jb3JlL01lc3NhZ2luZ1wiO1xuaW1wb3J0IHsgTWVzc2FnZVR5cGUgfSBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIEZpZWxkIGZyb20gXCJzYXAvdWkvbWRjL0ZpZWxkXCI7XG5pbXBvcnQgdHlwZSBNdWx0aVZhbHVlRmllbGQgZnJvbSBcInNhcC91aS9tZGMvTXVsdGlWYWx1ZUZpZWxkXCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgTXVsdGlWYWx1ZUZpZWxkSXRlbSBmcm9tIFwic2FwL3VpL21kYy9maWVsZC9NdWx0aVZhbHVlRmllbGRJdGVtXCI7XG5pbXBvcnQgdHlwZSBQcm9wZXJ0eUJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9Qcm9wZXJ0eUJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IEFueUVsZW1lbnQgZnJvbSBcIi4vY29udHJvbHMvQW55RWxlbWVudFwiO1xuaW1wb3J0IENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4vY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VNYW5pZmVzdFNldHRpbmdzIH0gZnJvbSBcIi4vY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBjb252ZXJ0VHlwZXMgfSBmcm9tIFwiLi9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgZ2V0RWRpdEJ1dHRvbkVuYWJsZWQsIGdldEhpZGRlbkV4cHJlc3Npb24gfSBmcm9tIFwiLi9jb252ZXJ0ZXJzL29iamVjdFBhZ2UvSGVhZGVyQW5kRm9vdGVyQWN0aW9uXCI7XG5cbmV4cG9ydCB0eXBlIEFjdGlvblBhcmFtZXRlckluZm8gPSB7XG5cdHBhcmFtZXRlcjogdW5rbm93bjtcblx0ZmllbGQ6IEZpZWxkIHwgTXVsdGlWYWx1ZUZpZWxkO1xuXHRpc011bHRpVmFsdWU6IGJvb2xlYW47XG5cdHZhbHVlPzogc3RyaW5nIHwgTXVsdGlWYWx1ZUZpZWxkSXRlbVtdO1xuXHR2YWxpZGF0aW9uUHJvbWlzZT86IFByb21pc2U8c3RyaW5nIHwgTXVsdGlWYWx1ZUZpZWxkSXRlbVtdPjtcblx0aGFzRXJyb3I6IGJvb2xlYW47XG59O1xuXG5jb25zdCBBY3Rpb25SdW50aW1lID0ge1xuXHQvKipcblx0ICogQWRkcyBlcnJvciBtZXNzYWdlcyBmb3IgYW4gYWN0aW9uIHBhcmFtZXRlciBmaWVsZCB0byB0aGUgbWVzc2FnZSBtYW5hZ2VyLlxuXHQgKlxuXHQgKiBAcGFyYW0gbWVzc2FnZVBhcmFtZXRlcnMgSW5mb3JtYXRpb24gaWRlbnRpZnlpbmcgYW4gYWN0aW9uIHBhcmFtZXRlciBhbmQgbWVzc2FnZXMgcmVmZXJyaW5nIHRvIHRoaXMgcGFyYW1ldGVyXG5cdCAqL1xuXHRfYWRkTWVzc2FnZUZvckFjdGlvblBhcmFtZXRlcjogZnVuY3Rpb24gKG1lc3NhZ2VQYXJhbWV0ZXJzOiB7IGFjdGlvblBhcmFtZXRlckluZm86IEFjdGlvblBhcmFtZXRlckluZm87IG1lc3NhZ2U6IHN0cmluZyB9W10pOiB2b2lkIHtcblx0XHRNZXNzYWdpbmcuYWRkTWVzc2FnZXMoXG5cdFx0XHRtZXNzYWdlUGFyYW1ldGVycy5tYXAoKG1lc3NhZ2VQYXJhbWV0ZXIpID0+IHtcblx0XHRcdFx0Y29uc3QgYmluZGluZyA9IG1lc3NhZ2VQYXJhbWV0ZXIuYWN0aW9uUGFyYW1ldGVySW5mby5maWVsZC5nZXRCaW5kaW5nKFxuXHRcdFx0XHRcdG1lc3NhZ2VQYXJhbWV0ZXIuYWN0aW9uUGFyYW1ldGVySW5mby5pc011bHRpVmFsdWUgPyBcIml0ZW1zXCIgOiBcInZhbHVlXCJcblx0XHRcdFx0KTtcblx0XHRcdFx0cmV0dXJuIG5ldyBNZXNzYWdlKHtcblx0XHRcdFx0XHRtZXNzYWdlOiBtZXNzYWdlUGFyYW1ldGVyLm1lc3NhZ2UsXG5cdFx0XHRcdFx0dHlwZTogTWVzc2FnZVR5cGUuRXJyb3IsXG5cdFx0XHRcdFx0cHJvY2Vzc29yOiBiaW5kaW5nPy5nZXRNb2RlbCgpID8/IHVuZGVmaW5lZCwgLy8gZ2V0TW9kZWwoKTogbnVsbCB8IE1vZGVsIH5+PiBwcm9jZXNzb3I/OiBNZXNzYWdlUHJvY2Vzc29yXG5cdFx0XHRcdFx0cGVyc2lzdGVudDogdHJ1ZSxcblx0XHRcdFx0XHR0YXJnZXQ6IGJpbmRpbmc/LmdldFJlc29sdmVkUGF0aCgpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSlcblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgYWxsIHJlcXVpcmVkIGFjdGlvbiBwYXJhbWV0ZXJzIGNvbnRhaW4gZGF0YSBhbmQgY2hlY2tzIGZvciBhbGwgYWN0aW9uIHBhcmFtZXRlcnMgaWYgdGhlXG5cdCAqIGNvbnRhaW5lZCBkYXRhIGlzIHZhbGlkLlxuXHQgKlxuXHQgKlxuXHQgKiBAcGFyYW0gYWN0aW9uUGFyYW1ldGVySW5mb3MgSW5mb3JtYXRpb24gaWRlbnRpZnlpbmcgYW4gYWN0aW9uIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0gcmVzb3VyY2VNb2RlbCBUaGUgbW9kZWwgdG8gbG9hZCB0ZXh0IHJlc291cmNlc1xuXHQgKiBAcmV0dXJucyBUaGUgdmFsaWRhdGlvbiByZXN1bHQgY2FuIGJlIHRydWUgb3IgZmFsc2Vcblx0ICovXG5cdHZhbGlkYXRlUHJvcGVydGllczogYXN5bmMgZnVuY3Rpb24gKGFjdGlvblBhcmFtZXRlckluZm9zOiBBY3Rpb25QYXJhbWV0ZXJJbmZvW10sIHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG5cdFx0XHRhY3Rpb25QYXJhbWV0ZXJJbmZvcy5tYXAoXG5cdFx0XHRcdChhY3Rpb25QYXJhbWV0ZXJJbmZvKTogUHJvbWlzZTxzdHJpbmcgfCBNdWx0aVZhbHVlRmllbGRJdGVtW10+IHwgdW5kZWZpbmVkID0+IGFjdGlvblBhcmFtZXRlckluZm8udmFsaWRhdGlvblByb21pc2Vcblx0XHRcdClcblx0XHQpO1xuXG5cdFx0Y29uc3QgcmVxdWlyZWRQYXJhbWV0ZXJJbmZvcyA9IGFjdGlvblBhcmFtZXRlckluZm9zLmZpbHRlcigocGFyYW1ldGVySW5mbykgPT4gcGFyYW1ldGVySW5mby5maWVsZC5nZXRSZXF1aXJlZCgpKTtcblx0XHRjb25zdCBhbGxNZXNzYWdlcyA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCk7XG5cdFx0Y29uc3QgZW1wdHlSZXF1aXJlZEZpZWxkcyA9IHJlcXVpcmVkUGFyYW1ldGVySW5mb3MuZmlsdGVyKChyZXF1aXJlZFBhcmFtZXRlckluZm8pID0+IHtcblx0XHRcdGNvbnN0IGZpZWxkSWQgPSByZXF1aXJlZFBhcmFtZXRlckluZm8uZmllbGQuZ2V0SWQoKTtcblx0XHRcdGNvbnN0IHJlbGV2YW50TWVzc2FnZXMgPSBhbGxNZXNzYWdlcy5maWx0ZXIoKG1zZzogTWVzc2FnZSkgPT5cblx0XHRcdFx0bXNnLmdldENvbnRyb2xJZHMoKS5zb21lKChjb250cm9sSWQ6IHN0cmluZykgPT4gY29udHJvbElkLmluY2x1ZGVzKGZpZWxkSWQpKVxuXHRcdFx0KTtcblx0XHRcdGlmIChyZWxldmFudE1lc3NhZ2VzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSBlbHNlIGlmIChyZXF1aXJlZFBhcmFtZXRlckluZm8uaXNNdWx0aVZhbHVlKSB7XG5cdFx0XHRcdHJldHVybiByZXF1aXJlZFBhcmFtZXRlckluZm8udmFsdWUgPT09IHVuZGVmaW5lZCB8fCAhcmVxdWlyZWRQYXJhbWV0ZXJJbmZvLnZhbHVlLmxlbmd0aDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGZpZWxkVmFsdWUgPSAocmVxdWlyZWRQYXJhbWV0ZXJJbmZvLmZpZWxkIGFzIEZpZWxkKS5nZXRWYWx1ZSgpO1xuXHRcdFx0XHRjb25zdCBpc0ZpZWxkQXJyYXkgPSBBcnJheS5pc0FycmF5KChyZXF1aXJlZFBhcmFtZXRlckluZm8uZmllbGQgYXMgRmllbGQpLmdldFZhbHVlKCkpO1xuXHRcdFx0XHRpZiAoaXNGaWVsZEFycmF5KSB7XG5cdFx0XHRcdFx0Ly8gb25seSBmaXJzdCB2YWx1ZSBjaGVjayBpcyBlbm91Z2ggYXMgdGhlIGZpZWxkIHZhbHVlIGNvbWVzIG9uIFswXSByZXN0IG9mIHRoZSBhcnJheSBpbmNsdWRlcyBjdXJyZW5jeSBhbmQgY3VycmVuY3kgY29kZVxuXHRcdFx0XHRcdC8vIGJvdGggb2Ygd2hpY2ggY2FuIG9yIGNhbm5vdCBiZSBudWxsLCBzbyB3ZSBzaGFsbCBjaGVjayBvbmx5IHRoZSBmaWVsZCB2YWx1ZVxuXHRcdFx0XHRcdHJldHVybiBmaWVsZFZhbHVlWzBdID09PSBudWxsIHx8IGZpZWxkVmFsdWVbMF0gPT09IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGZpZWxkVmFsdWUgPT09IHVuZGVmaW5lZCB8fCBmaWVsZFZhbHVlID09PSBudWxsIHx8IGZpZWxkVmFsdWUgPT09IFwiXCI7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0LyogTWVzc2FnZSBmb3IgbWlzc2luZyBtYW5kYXRvcnkgdmFsdWUgb2YgdGhlIGFjdGlvbiBwYXJhbWV0ZXIgKi9cblx0XHRpZiAoZW1wdHlSZXF1aXJlZEZpZWxkcy5sZW5ndGgpIHtcblx0XHRcdHRoaXMuX2FkZE1lc3NhZ2VGb3JBY3Rpb25QYXJhbWV0ZXIoXG5cdFx0XHRcdGVtcHR5UmVxdWlyZWRGaWVsZHMubWFwKChhY3Rpb25QYXJhbWV0ZXJJbmZvKSA9PiAoe1xuXHRcdFx0XHRcdGFjdGlvblBhcmFtZXRlckluZm86IGFjdGlvblBhcmFtZXRlckluZm8sXG5cdFx0XHRcdFx0bWVzc2FnZTogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19PUEVSQVRJT05TX0FDVElPTl9QQVJBTUVURVJfRElBTE9HX01JU1NJTkdfTUFOREFUT1JZX01TR1wiLCBbXG5cdFx0XHRcdFx0XHQoYWN0aW9uUGFyYW1ldGVySW5mby5maWVsZC5nZXRQYXJlbnQoKT8uZ2V0QWdncmVnYXRpb24oXCJsYWJlbFwiKSBhcyBMYWJlbCkuZ2V0VGV4dCgpXG5cdFx0XHRcdFx0XSlcblx0XHRcdFx0fSkpXG5cdFx0XHQpO1xuXHRcdH1cblx0XHQvKiBDaGVjayB2YWx1ZSBzdGF0ZSBvZiBhbGwgcGFyYW1ldGVycyAqL1xuXHRcdGNvbnN0IGZpcnN0SW52YWxpZFBhcmFtZXRlciA9IGFjdGlvblBhcmFtZXRlckluZm9zLmZpbmQoXG5cdFx0XHQocGFyYW1ldGVySW5mbykgPT5cblx0XHRcdFx0cGFyYW1ldGVySW5mby5oYXNFcnJvciB8fCBwYXJhbWV0ZXJJbmZvLmZpZWxkLmdldFZhbHVlU3RhdGUoKSA9PT0gXCJFcnJvclwiIHx8IGVtcHR5UmVxdWlyZWRGaWVsZHMuaW5jbHVkZXMocGFyYW1ldGVySW5mbylcblx0XHQpO1xuXHRcdGlmIChmaXJzdEludmFsaWRQYXJhbWV0ZXIpIHtcblx0XHRcdGZpcnN0SW52YWxpZFBhcmFtZXRlci5maWVsZC5mb2N1cygpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGFjdGlvbiBlbmFibGVtZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0gb0ludGVybmFsTW9kZWxDb250ZXh0IE9iamVjdCBjb250YWluaW5nIHRoZSBjb250ZXh0IG1vZGVsXG5cdCAqIEBwYXJhbSBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwIE1hcCBjb250YWluaW5nIHRoZSBvcGVyYXRpb24gYXZhaWxhYmlsaXR5IG9mIGFjdGlvbnNcblx0ICogQHBhcmFtIGFTZWxlY3RlZENvbnRleHRzIEFycmF5IGNvbnRhaW5pbmcgc2VsZWN0ZWQgY29udGV4dHMgb2YgdGhlIGNoYXJ0XG5cdCAqIEBwYXJhbSBzQ29udHJvbCBDb250cm9sIG5hbWVcblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuXHQgKiBAcmV0dXJucyBUaGUgYWN0aW9uIGVuYWJsZW1lbnQgcHJvbWlzZXNcblx0ICovXG5cdHNldEFjdGlvbkVuYWJsZW1lbnQ6IGFzeW5jIGZ1bmN0aW9uIChcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ6IEludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG5cdFx0YVNlbGVjdGVkQ29udGV4dHM6IENvbnRleHRbXSxcblx0XHRzQ29udHJvbDogc3RyaW5nLFxuXHRcdGZvckNvbnRleHRNZW51ID0gZmFsc2Vcblx0KTogUHJvbWlzZTx2b2lkW10+IHtcblx0XHRjb25zdCBhUHJvbWlzZXMgPSBbXTtcblx0XHRmb3IgKGNvbnN0IHNBY3Rpb24gaW4gb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCkge1xuXHRcdFx0bGV0IGFSZXF1ZXN0UHJvbWlzZXM6IFByb21pc2U8X1JlcXVlc3RlZFByb3BlcnR5PltdID0gW107XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoc0FjdGlvbiwgZmFsc2UpO1xuXHRcdFx0aWYgKGZvckNvbnRleHRNZW51ICYmIHNDb250cm9sID09PSBcInRhYmxlXCIpIHtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KGBkeW5hbWljQWN0aW9ucy8ke3NBY3Rpb259L2FBcHBsaWNhYmxlYCwgW10pO1xuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn0vYU5vdEFwcGxpY2FibGVgLCBbXSk7XG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufS9iRW5hYmxlZEZvckNvbnRleHRNZW51YCwgZmFsc2UpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgc1Byb3BlcnR5ID0gb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcFtzQWN0aW9uXTtcblx0XHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiBhU2VsZWN0ZWRDb250ZXh0cykge1xuXHRcdFx0XHRjb25zdCBvU2VsZWN0ZWRDb250ZXh0ID0gZWxlbWVudDtcblx0XHRcdFx0aWYgKG9TZWxlY3RlZENvbnRleHQpIHtcblx0XHRcdFx0XHRjb25zdCBvQ29udGV4dERhdGEgPSBvU2VsZWN0ZWRDb250ZXh0LmdldE9iamVjdCgpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRcdFx0XHRcdGlmIChzQ29udHJvbCA9PT0gXCJjaGFydFwiKSB7XG5cdFx0XHRcdFx0XHRpZiAoKHNQcm9wZXJ0eSA9PT0gbnVsbCAmJiAhIW9Db250ZXh0RGF0YVtgIyR7c0FjdGlvbn1gXSkgfHwgb1NlbGVjdGVkQ29udGV4dC5nZXRPYmplY3Qoc1Byb3BlcnR5KSkge1xuXHRcdFx0XHRcdFx0XHQvL2xvb2sgZm9yIGFjdGlvbiBhZHZlcnRpc2VtZW50IGlmIHByZXNlbnQgYW5kIGl0cyB2YWx1ZSBpcyBub3QgbnVsbFxuXHRcdFx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoc0FjdGlvbiwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoc0NvbnRyb2wgPT09IFwidGFibGVcIikge1xuXHRcdFx0XHRcdFx0YVJlcXVlc3RQcm9taXNlcyA9IHRoaXMuX3NldEFjdGlvbkVuYWJsZW1lbnRGb3JUYWJsZShcblx0XHRcdFx0XHRcdFx0b1NlbGVjdGVkQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRzQWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRzUHJvcGVydHksXG5cdFx0XHRcdFx0XHRcdGFSZXF1ZXN0UHJvbWlzZXMsXG5cdFx0XHRcdFx0XHRcdGZvckNvbnRleHRNZW51XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKHNDb250cm9sID09PSBcInRhYmxlXCIpIHtcblx0XHRcdFx0aWYgKCFhU2VsZWN0ZWRDb250ZXh0cy5sZW5ndGgpIHtcblx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn1gLCB7XG5cdFx0XHRcdFx0XHRiRW5hYmxlZDogZmFsc2UsXG5cdFx0XHRcdFx0XHRhQXBwbGljYWJsZTogW10sXG5cdFx0XHRcdFx0XHRhTm90QXBwbGljYWJsZTogW11cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRhUHJvbWlzZXMucHVzaChDb21tb25VdGlscy5zZXRDb250ZXh0c0Jhc2VkT25PcGVyYXRpb25BdmFpbGFibGUob0ludGVybmFsTW9kZWxDb250ZXh0LCBbXSwgZm9yQ29udGV4dE1lbnUpKTtcblx0XHRcdFx0fSBlbHNlIGlmIChhU2VsZWN0ZWRDb250ZXh0cy5sZW5ndGggJiYgdHlwZW9mIHNQcm9wZXJ0eSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRcdC8vIFdoZW4gYWxsIHByb3BlcnR5IHZhbHVlcyBoYXZlIGJlZW4gcmV0cmlldmVkLCBzZXRcblx0XHRcdFx0XHQvLyBUaGUgYXBwbGljYWJsZSBhbmQgbm90LWFwcGxpY2FibGUgc2VsZWN0ZWQgY29udGV4dHMgZm9yIGVhY2ggYWN0aW9uIGFuZFxuXHRcdFx0XHRcdC8vIFRoZSBlbmFibGVkIHByb3BlcnR5IG9mIHRoZSBkeW5hbWljIGFjdGlvbiBpbiBpbnRlcm5hbCBtb2RlbCBjb250ZXh0LlxuXHRcdFx0XHRcdGFQcm9taXNlcy5wdXNoKFxuXHRcdFx0XHRcdFx0Q29tbW9uVXRpbHMuc2V0Q29udGV4dHNCYXNlZE9uT3BlcmF0aW9uQXZhaWxhYmxlKG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgYVJlcXVlc3RQcm9taXNlcywgZm9yQ29udGV4dE1lbnUpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoYVByb21pc2VzKTtcblx0fSxcblx0c2V0QWN0aW9uRW5hYmxlbWVudEFmdGVyUGF0Y2g6IGZ1bmN0aW9uIChcblx0XHRvVmlldzogVmlldyxcblx0XHRvTGlzdEJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmcsXG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dFxuXHQpOiB2b2lkIHtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHREYXRhID0gb0ludGVybmFsTW9kZWxDb250ZXh0Py5nZXRPYmplY3QoKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0XHRjb25zdCBvQ29udHJvbHMgPSAob0ludGVybmFsTW9kZWxDb250ZXh0RGF0YT8uY29udHJvbHMgfHwge30pIGFzIFJlY29yZDxzdHJpbmcsIHsgY29udHJvbElkPzogc3RyaW5nIH0+O1xuXHRcdGZvciAoY29uc3Qgc0tleSBpbiBvQ29udHJvbHMpIHtcblx0XHRcdGlmIChvQ29udHJvbHNbc0tleV0gJiYgb0NvbnRyb2xzW3NLZXldLmNvbnRyb2xJZCkge1xuXHRcdFx0XHRjb25zdCBvVGFibGUgPSBvVmlldy5ieUlkKHNLZXkpO1xuXHRcdFx0XHRpZiAob1RhYmxlICYmIG9UYWJsZS5pc0E8VGFibGU+KFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0XHRcdGNvbnN0IG9Sb3dCaW5kaW5nID0gb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRcdFx0XHRpZiAob1Jvd0JpbmRpbmcgPT0gb0xpc3RCaW5kaW5nKSB7XG5cdFx0XHRcdFx0XHRBY3Rpb25SdW50aW1lLnNldEFjdGlvbkVuYWJsZW1lbnQoXG5cdFx0XHRcdFx0XHRcdG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRKU09OLnBhcnNlKG9UYWJsZS5kYXRhKFwib3BlcmF0aW9uQXZhaWxhYmxlTWFwXCIpLmN1c3RvbURhdGEpLFxuXHRcdFx0XHRcdFx0XHRvVGFibGUuZ2V0U2VsZWN0ZWRDb250ZXh0cygpIGFzIENvbnRleHRbXSxcblx0XHRcdFx0XHRcdFx0XCJ0YWJsZVwiXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHR1cGRhdGVFZGl0QnV0dG9uVmlzaWJpbGl0eUFuZEVuYWJsZW1lbnQob1ZpZXc6IEZFVmlldyk6IHZvaWQge1xuXHRcdGNvbnN0IGlWaWV3TGV2ZWwgPSAob1ZpZXcuZ2V0Vmlld0RhdGEoKSBhcyBCYXNlTWFuaWZlc3RTZXR0aW5ncyk/LnZpZXdMZXZlbCxcblx0XHRcdGlzRWRpdGFibGUgPSBvVmlldy5nZXRNb2RlbChcInVpXCIpPy5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpO1xuXHRcdGlmICgoaVZpZXdMZXZlbCBhcyBudW1iZXIpID4gMSAmJiBpc0VkaXRhYmxlICE9PSB0cnVlKSB7XG5cdFx0XHRjb25zdCBvQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0XHRjb25zdCBvQXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KG9WaWV3KTtcblx0XHRcdGNvbnN0IHNNZXRhUGF0aCA9IE1vZGVsSGVscGVyLmdldE1ldGFQYXRoRm9yQ29udGV4dChvQ29udGV4dCk7XG5cdFx0XHRjb25zdCBzRW50aXR5U2V0ID0gTW9kZWxIZWxwZXIuZ2V0Um9vdEVudGl0eVNldFBhdGgoc01ldGFQYXRoKTtcblx0XHRcdGNvbnN0IG1ldGFDb250ZXh0ID0gb0NvbnRleHRcblx0XHRcdFx0Py5nZXRNb2RlbCgpXG5cdFx0XHRcdC5nZXRNZXRhTW9kZWwoKVxuXHRcdFx0XHQ/LmdldENvbnRleHQob0NvbnRleHQ/LmdldFBhdGgoKSk7XG5cdFx0XHRjb25zdCBjb252ZXJ0ZXJDb250ZXh0ID0gQ29udmVydGVyQ29udGV4dD8uY3JlYXRlQ29udmVydGVyQ29udGV4dEZvck1hY3JvKFxuXHRcdFx0XHRzRW50aXR5U2V0LFxuXHRcdFx0XHRtZXRhQ29udGV4dCxcblx0XHRcdFx0b0FwcENvbXBvbmVudC5nZXREaWFnbm9zdGljcygpLFxuXHRcdFx0XHRtZXJnZVxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdFx0XHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdFx0XHRsZXQgdXBkYXRlSGlkZGVuO1xuXHRcdFx0Ly9GaW5kIHRoZSBVcGRhdGUgSGlkZGVuIG9mIHRoZSByb290IGVudGl0eSBzZXQgYW5kIGJpbmQgdGhlIHByb3BlcnR5IHRvIEFueUVsZW1lbnQsIGFueSBjaGFuZ2VzIGluIHRoZSBwYXRoIG9mIHRoZSByb290IFVwZGF0ZUhpZGRlbiB3aWxsIGJlIHVwZGF0ZWQgdmlhIHRoZSBwcm9wZXJ0eSwgaW50ZXJuYWwgbW9kZWwgY29udGV4dCBpcyB1cGRhdGVkIGJhc2VkIG9uIHRoZSBwcm9wZXJ0eVxuXHRcdFx0Y29uc3QgYlVwZGF0ZUhpZGRlbiA9IGlzRW50aXR5U2V0KGVudGl0eVNldCkgJiYgZW50aXR5U2V0LmFubm90YXRpb25zLlVJPy5VcGRhdGVIaWRkZW4/LnZhbHVlT2YoKTtcblx0XHRcdGlmIChiVXBkYXRlSGlkZGVuICE9PSB0cnVlKSB7XG5cdFx0XHRcdHVwZGF0ZUhpZGRlbiA9IE1vZGVsSGVscGVyLmlzVXBkYXRlSGlkZGVuKGVudGl0eVNldCwgZW50aXR5VHlwZSk7XG5cdFx0XHR9XG5cdFx0XHQvL0ZpbmQgdGhlIG9wZXJhdGlvbiBhdmFpbGFibGUgcHJvcGVydHkgb2YgdGhlIHJvb3QgZWRpdCBjb25maWd1cmF0aW9uIGFuZCBmZXRjaCB0aGUgcHJvcGVydHkgdXNpbmcgQW55RWxlbWVudFxuXHRcdFx0Y29uc3Qgc0VkaXRFbmFibGVCaW5kaW5nID0gZ2V0RWRpdEJ1dHRvbkVuYWJsZWQoY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRjb25zdCBkcmFmdFJvb3RQYXRoID0gTW9kZWxIZWxwZXIuZ2V0RHJhZnRSb290UGF0aChvQ29udGV4dCk7XG5cdFx0XHRjb25zdCBzU3RpY2t5Um9vdFBhdGggPSBNb2RlbEhlbHBlci5nZXRTdGlja3lSb290UGF0aChvQ29udGV4dCk7XG5cdFx0XHRjb25zdCBzUGF0aCA9IGRyYWZ0Um9vdFBhdGggfHwgc1N0aWNreVJvb3RQYXRoO1xuXHRcdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdGlmIChzUGF0aCkge1xuXHRcdFx0XHRjb25zdCBvUm9vdENvbnRleHQgPSBvVmlldy5nZXRNb2RlbCgpLmJpbmRDb250ZXh0KHNQYXRoKS5nZXRCb3VuZENvbnRleHQoKTtcblx0XHRcdFx0aWYgKHVwZGF0ZUhpZGRlbiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc0hpZGRlbkV4cHJlc3Npb24gPSBjb21waWxlRXhwcmVzc2lvbihlcXVhbChnZXRIaWRkZW5FeHByZXNzaW9uKGNvbnZlcnRlckNvbnRleHQsIHVwZGF0ZUhpZGRlbiksIGZhbHNlKSk7XG5cdFx0XHRcdFx0dGhpcy51cGRhdGVFZGl0TW9kZWxDb250ZXh0KHNIaWRkZW5FeHByZXNzaW9uLCBvVmlldywgb1Jvb3RDb250ZXh0LCBcInJvb3RFZGl0VmlzaWJsZVwiLCBvSW50ZXJuYWxNb2RlbENvbnRleHQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChzRWRpdEVuYWJsZUJpbmRpbmcpIHtcblx0XHRcdFx0XHR0aGlzLnVwZGF0ZUVkaXRNb2RlbENvbnRleHQoc0VkaXRFbmFibGVCaW5kaW5nLCBvVmlldywgb1Jvb3RDb250ZXh0LCBcInJvb3RFZGl0RW5hYmxlZFwiLCBvSW50ZXJuYWxNb2RlbENvbnRleHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdHVwZGF0ZUVkaXRNb2RlbENvbnRleHQ6IGZ1bmN0aW9uIChcblx0XHRzQmluZGluZ0V4cHJlc3Npb246IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHRvVmlldzogVmlldyxcblx0XHRvUm9vdENvbnRleHQ6IENvbnRleHQsXG5cdFx0c1Byb3BlcnR5OiBzdHJpbmcsXG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dFxuXHQpOiB2b2lkIHtcblx0XHRpZiAoc0JpbmRpbmdFeHByZXNzaW9uKSB7XG5cdFx0XHRjb25zdCBvSGlkZGVuRWxlbWVudCA9IG5ldyBBbnlFbGVtZW50KHsgYW55VGV4dDogc0JpbmRpbmdFeHByZXNzaW9uIH0pO1xuXHRcdFx0b0hpZGRlbkVsZW1lbnQuc2V0QmluZGluZ0NvbnRleHQobnVsbCk7XG5cdFx0XHRvVmlldy5hZGREZXBlbmRlbnQob0hpZGRlbkVsZW1lbnQpO1xuXHRcdFx0b0hpZGRlbkVsZW1lbnQuZ2V0QmluZGluZyhcImFueVRleHRcIik7XG5cdFx0XHRjb25zdCBvQ29udGV4dCA9IG9IaWRkZW5FbGVtZW50XG5cdFx0XHRcdC5nZXRNb2RlbCgpXG5cdFx0XHRcdD8uYmluZENvbnRleHQob1Jvb3RDb250ZXh0LmdldFBhdGgoKSwgb1Jvb3RDb250ZXh0LCB7ICQkZ3JvdXBJZDogXCIkYXV0by5IZXJvZXNcIiB9KVxuXHRcdFx0XHQ/LmdldEJvdW5kQ29udGV4dCgpO1xuXHRcdFx0b0hpZGRlbkVsZW1lbnQuc2V0QmluZGluZ0NvbnRleHQob0NvbnRleHQpO1xuXHRcdFx0b0hpZGRlbkVsZW1lbnQ/LmdldEJpbmRpbmcoXCJhbnlUZXh0XCIpPy5hdHRhY2hDaGFuZ2UoKG9FdmVudDogRXZlbnQ8e30sIFByb3BlcnR5QmluZGluZz4pID0+IHtcblx0XHRcdFx0Y29uc3Qgb05ld1ZhbHVlID0gb0V2ZW50LmdldFNvdXJjZSgpLmdldEV4dGVybmFsVmFsdWUoKTtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KHNQcm9wZXJ0eSwgb05ld1ZhbHVlKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblxuXHRfc2V0QWN0aW9uRW5hYmxlbWVudEZvclRhYmxlOiBmdW5jdGlvbiAoXG5cdFx0b1NlbGVjdGVkQ29udGV4dDogQ29udGV4dCB8IHVuZGVmaW5lZCxcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ6IEludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdHNBY3Rpb246IHN0cmluZyxcblx0XHRzUHJvcGVydHk6IHN0cmluZyxcblx0XHRhUmVxdWVzdFByb21pc2VzOiBQcm9taXNlPF9SZXF1ZXN0ZWRQcm9wZXJ0eT5bXSxcblx0XHRmb3JDb250ZXh0TWVudSA9IGZhbHNlXG5cdCk6IFByb21pc2U8X1JlcXVlc3RlZFByb3BlcnR5PltdIHtcblx0XHQvLyBSZXRyaWV2ZSBwcmV2aW91c2x5IGNoZWNrZWQgY29udGV4dHMgaW4gY2FzZSBvZiAhZm9yQ29udGV4dE1lbnVcblx0XHRjb25zdCBzRW5hYmxlbWVudEZpZWxkTmFtZSA9IGZvckNvbnRleHRNZW51ID8gXCJiRW5hYmxlZEZvckNvbnRleHRNZW51XCIgOiBcImJFbmFibGVkXCIsXG5cdFx0XHRhQXBwbGljYWJsZTogW0NvbnRleHQgfCB1bmRlZmluZWRdID0gb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KGBkeW5hbWljQWN0aW9ucy8ke3NBY3Rpb259L2FBcHBsaWNhYmxlYCkgfHwgW10sXG5cdFx0XHRhTm90QXBwbGljYWJsZTogW0NvbnRleHQgfCB1bmRlZmluZWRdID0gb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KGBkeW5hbWljQWN0aW9ucy8ke3NBY3Rpb259L2FOb3RBcHBsaWNhYmxlYCkgfHwgW107XG5cdFx0bGV0IGJBY3Rpb25FbmFibGVkOiBib29sZWFuID0gb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KGBkeW5hbWljQWN0aW9ucy8ke3NBY3Rpb259LyR7c0VuYWJsZW1lbnRGaWVsZE5hbWV9YCkgfHwgZmFsc2U7XG5cblx0XHRpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn1gLCB7XG5cdFx0XHRcdGJFbmFibGVkOiBmYWxzZSxcblx0XHRcdFx0YUFwcGxpY2FibGU6IFtdLFxuXHRcdFx0XHRhTm90QXBwbGljYWJsZTogW11cblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn1gLCB7XG5cdFx0XHRcdC8vIERvIG5vdCBjaGFuZ2UgZW5hYmxlZCwgYUFwcGxpY2FibGUgYW5kIGFOb3RBcHBsaWNhYmxlIHByb3BlcnR5IGluIGNhc2Ugb2YgY29udGV4dCBtZW51IGNhbGN1bGF0aW9uXG5cdFx0XHRcdC8vIGluIGNhc2Ugb2YgY29udGV4dCBtZW51LCBvbmx5IHRoZSBjbGlja2VkIGNvbnRleHQgZ29lcyBpbnRvIHRoZSBwcm9jZXNzaW5nIC0gb3RoZXIgc2VsZWN0ZWQgY29udGV4dHMgbXVzdCBiZSBrZXB0IGluIHRoZSBtb2RlbFxuXHRcdFx0XHRiRW5hYmxlZDogb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KGBkeW5hbWljQWN0aW9ucy8ke3NBY3Rpb259L2JFbmFibGVkYCksXG5cdFx0XHRcdGFBcHBsaWNhYmxlOiBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn0vYUFwcGxpY2FibGVgKSxcblx0XHRcdFx0YU5vdEFwcGxpY2FibGU6IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufS9hTm90QXBwbGljYWJsZWApLFxuXHRcdFx0XHRiRW5hYmxlZEZvckNvbnRleHRNZW51OiBmYWxzZSxcblx0XHRcdFx0YUFwcGxpY2FibGVGb3JDb250ZXh0TWVudTogW10sXG5cdFx0XHRcdGFOb3RBcHBsaWNhYmxlRm9yQ29udGV4dE1lbnU6IFtdXG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0Ly8gTm90ZSB0aGF0IG5vbiBkeW5hbWljIGFjdGlvbnMgYXJlIG5vdCBwcm9jZXNzZWQgaGVyZS4gVGhleSBhcmUgZW5hYmxlZCBiZWNhdXNlXG5cdFx0Ly8gb25lIG9yIG1vcmUgYXJlIHNlbGVjdGVkIGFuZCB0aGUgc2Vjb25kIHBhcnQgb2YgdGhlIGNvbmRpdGlvbiBpbiB0aGUgdGVtcGxhdGluZ1xuXHRcdC8vIGlzIHRoZW4gdW5kZWZpbmVkIGFuZCB0aHVzIHRoZSBidXR0b24gdGFrZXMgdGhlIGRlZmF1bHQgZW5hYmxpbmcsIHdoaWNoIGlzIHRydWUhXG5cdFx0Y29uc3Qgc0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aCA9IGAke29JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQYXRoKCl9L2R5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn0vJHtzRW5hYmxlbWVudEZpZWxkTmFtZX1gO1xuXG5cdFx0aWYgKHR5cGVvZiBzUHJvcGVydHkgPT09IFwib2JqZWN0XCIgJiYgc1Byb3BlcnR5ICE9PSBudWxsICYmIHNQcm9wZXJ0eSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAob1NlbGVjdGVkQ29udGV4dCkge1xuXHRcdFx0XHRjb25zdCBvQ29udGV4dERhdGEgPSBvU2VsZWN0ZWRDb250ZXh0LmdldE9iamVjdCgpIGFzIFJlY29yZDxzdHJpbmcsIFByaW1pdGl2ZVR5cGU+O1xuXHRcdFx0XHRjb25zdCBvVHJhbnNmb3JtZWRCaW5kaW5nID0gdHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0XHRcdFx0c1Byb3BlcnR5LFxuXHRcdFx0XHRcdFwiUGF0aEluTW9kZWxcIixcblx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1mdW5jXG5cdFx0XHRcdFx0ZnVuY3Rpb24gKG9CaW5kaW5nRXhwcmVzc2lvbjogUGF0aEluTW9kZWxFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb0NvbnRleHREYXRhID8gY29uc3RhbnQob0NvbnRleHREYXRhW29CaW5kaW5nRXhwcmVzc2lvbi5wYXRoXSkgOiBjb25zdGFudChmYWxzZSk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnN0IHNSZXN1bHQgPSBjb21waWxlRXhwcmVzc2lvbihvVHJhbnNmb3JtZWRCaW5kaW5nKTtcblx0XHRcdFx0YkFjdGlvbkVuYWJsZWQgPSBiQWN0aW9uRW5hYmxlZCB8fCBzUmVzdWx0ID09PSBcInRydWVcIjtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LmdldE1vZGVsKCkuc2V0UHJvcGVydHkoc0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aCwgYkFjdGlvbkVuYWJsZWQpO1xuXHRcdFx0XHQoc1Jlc3VsdCA9PT0gXCJ0cnVlXCIgPyBhQXBwbGljYWJsZSA6IGFOb3RBcHBsaWNhYmxlKS5wdXNoKG9TZWxlY3RlZENvbnRleHQpO1xuXHRcdFx0fVxuXHRcdFx0Q29tbW9uVXRpbHMuc2V0RHluYW1pY0FjdGlvbkNvbnRleHRzKG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgc0FjdGlvbiwgYUFwcGxpY2FibGUsIGFOb3RBcHBsaWNhYmxlLCBmb3JDb250ZXh0TWVudSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IG9Db250ZXh0RGF0YSA9IG9TZWxlY3RlZENvbnRleHQ/LmdldE9iamVjdCgpIGFzIFJlY29yZDxzdHJpbmcsIFByaW1pdGl2ZVR5cGU+O1xuXHRcdFx0aWYgKHNQcm9wZXJ0eSA9PT0gbnVsbCAmJiAhIW9Db250ZXh0RGF0YVtgIyR7c0FjdGlvbn1gXSkge1xuXHRcdFx0XHQvL2xvb2sgZm9yIGFjdGlvbiBhZHZlcnRpc2VtZW50IGlmIHByZXNlbnQgYW5kIGl0cyB2YWx1ZSBpcyBub3QgbnVsbFxuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0TW9kZWwoKS5zZXRQcm9wZXJ0eShzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoLCB0cnVlKTtcblx0XHRcdH0gZWxzZSBpZiAob1NlbGVjdGVkQ29udGV4dCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdC8vIENvbGxlY3QgcHJvbWlzZXMgdG8gcmV0cmlldmUgc2luZ2xldG9uIG9yIG5vcm1hbCBwcm9wZXJ0eSB2YWx1ZSBhc3luY2hyb25vdXNseVxuXHRcdFx0XHRhUmVxdWVzdFByb21pc2VzLnB1c2goQ29tbW9uVXRpbHMucmVxdWVzdFByb3BlcnR5KG9TZWxlY3RlZENvbnRleHQsIHNBY3Rpb24sIHNQcm9wZXJ0eSwgc0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gYVJlcXVlc3RQcm9taXNlcztcblx0fSxcblxuXHQvKipcblx0ICogQ2hlY2sgaWYgYWN0aW9uIGlzIGNyaXRpY2FsLlxuXHQgKlxuXHQgKiBAcGFyYW0gbWV0YU1vZGVsIE1ldGFNb2RlbFxuXHQgKiBAcGFyYW0gcGF0aCBQYXRoIHRvIHRoZSBhY3Rpb25cblx0ICogQHBhcmFtIGNvbnRleHRzIENvbnRleHRzIGluIGNhc2Ugb2YgYm91bmQgYWN0aW9ucy5cblx0ICogQHJldHVybnMgQm9vbGVhbiBpbmRpY2F0aW5nIGFjdGlvbiBpcyBjcml0aWNhbFxuXHQgKi9cblx0Z2V0SXNBY3Rpb25Dcml0aWNhbDogYXN5bmMgZnVuY3Rpb24gKG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsIHBhdGg6IHN0cmluZywgY29udGV4dHM6IENvbnRleHRbXSA9IFtdKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0Ly8gZGVmYXVsdCBpcyB0cnVlLlxuXHRcdGxldCBpc0FjdGlvbkNyaXRpY2FsVmFsdWU6IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+ID0gdHJ1ZTtcblx0XHRjb25zdCBjb252ZXJ0ZWRUeXBlcyA9IGNvbnZlcnRUeXBlcyhtZXRhTW9kZWwpO1xuXHRcdGNvbnN0IGFjdGlvblRhcmdldFJlc29sdXRpb24gPSBjb252ZXJ0ZWRUeXBlcy5yZXNvbHZlUGF0aDxFZG1BY3Rpb24+KHBhdGgpO1xuXHRcdGNvbnN0IGFjdGlvblRhcmdldCA9IGFjdGlvblRhcmdldFJlc29sdXRpb24udGFyZ2V0O1xuXHRcdGlmICghYWN0aW9uVGFyZ2V0KSB7XG5cdFx0XHRyZXR1cm4gaXNBY3Rpb25Dcml0aWNhbFZhbHVlO1xuXHRcdH1cblxuXHRcdGNvbnN0IGlzQWN0aW9uQ3JpdGljYWxCaW5kaW5nRXhwID0gZ2V0SXNBY3Rpb25Dcml0aWNhbEV4cHJlc3Npb24oYWN0aW9uVGFyZ2V0LCBjb252ZXJ0ZWRUeXBlcyk7XG5cblx0XHRpZiAoaXNDb25zdGFudChpc0FjdGlvbkNyaXRpY2FsQmluZGluZ0V4cCkpIHtcblx0XHRcdC8vIENvbnN0YW50IGV4cHJlc3Npb24gcmVzb2x2ZXMgdG8gXCJ0cnVlXCIgb3IgXCJmYWxzZVwiLiBCdXQsIHdlIG5lZWQgYm9vbGVhbi5cblx0XHRcdGlzQWN0aW9uQ3JpdGljYWxWYWx1ZSA9IGNvbXBpbGVDb25zdGFudChpc0FjdGlvbkNyaXRpY2FsQmluZGluZ0V4cCwgZmFsc2UsIHVuZGVmaW5lZCwgdHJ1ZSkgYXMgYm9vbGVhbjtcblx0XHR9IGVsc2UgaWYgKGNvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdC8vIFdlIGV2YWx1YXRlIHRoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbiB2aWEgYSBVSTUgbWFuYWdlZCBvYmplY3QgaW5zdGFuY2UuXG5cdFx0XHRpc0FjdGlvbkNyaXRpY2FsVmFsdWUgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdC8vIENyZWF0aW5nIEJpbmRpbmcgdG8gcmVzb2x2ZVxuXHRcdFx0XHRcdGNvbnN0IGFueU9iamVjdCA9IG5ldyBBbnkoeyBhbnlCb29sZWFuOiBjb21waWxlRXhwcmVzc2lvbihpc0FjdGlvbkNyaXRpY2FsQmluZGluZ0V4cCkgfSk7XG5cdFx0XHRcdFx0YW55T2JqZWN0LnNldE1vZGVsKGNvbnRleHRzWzBdLmdldE1vZGVsKCkpO1xuXG5cdFx0XHRcdFx0Ly8gQXR0YWNoaW5nIGNoYW5nZSBldmVudHNcblx0XHRcdFx0XHRjb25zdCBib29sZWFuQmluZGluZyA9IGFueU9iamVjdC5nZXRCaW5kaW5nKFwiYW55Qm9vbGVhblwiKSBhcyBQcm9wZXJ0eUJpbmRpbmc7XG5cdFx0XHRcdFx0Y29uc3QgZm5DaGFuZ2UgPSBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRcdFx0XHRjb25zdCB2YWx1ZUV4dCA9IGJvb2xlYW5CaW5kaW5nLmdldEV4dGVybmFsVmFsdWUoKTtcblx0XHRcdFx0XHRcdGFueU9iamVjdC5kZXN0cm95KCk7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKHZhbHVlRXh0KTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGJvb2xlYW5CaW5kaW5nLmF0dGFjaEV2ZW50T25jZShcImNoYW5nZVwiLCBmbkNoYW5nZSk7XG5cblx0XHRcdFx0XHQvLyBzZXR0aW5nIGJpbmRpbmcgY29udGV4dCB0byB0cmlnZ2VyIHRoZSBiaW5kaW5nIHJlc29sdXRpb25cblx0XHRcdFx0XHRhbnlPYmplY3Quc2V0QmluZGluZ0NvbnRleHQoY29udGV4dHNbMF0pO1xuXHRcdFx0XHR9IGNhdGNoIChlcnI6IHVua25vd24pIHtcblx0XHRcdFx0XHQvLyBlcnJvciB3aGlsZSBjcmVhdGluZyBvciByZXNvbHZpbmcgdGhlIGJpbmRpbmdcblx0XHRcdFx0XHRjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuXHRcdFx0XHRcdExvZy5lcnJvcihgRkUgOiBBY3Rpb25zIDogRXJyb3Igd2hpbGUgcmVzb2x2aW5nIElzQWN0aW9uQ3JpdGljYWwgZm9yICR7cGF0aH0gOiAke21lc3NhZ2V9YCk7XG5cdFx0XHRcdFx0Ly8gT24gdGhlIHNhZmUgc2lkZSwgd2Ugc2hhbGwgcmV0dXJuIGFjdGlvbiBpcyBjcml0aWNhbCBpZiB2YWx1ZSBjb3VsZG4ndCBiZSBkZXRlcm1pbmVkLlxuXHRcdFx0XHRcdHJlc29sdmUodHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiBpc0FjdGlvbkNyaXRpY2FsVmFsdWU7XG5cdH1cbn07XG5leHBvcnQgZGVmYXVsdCBBY3Rpb25SdW50aW1lO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7O0VBMkNBLE1BQU1BLGFBQWEsR0FBRztJQUNyQjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0lBQ0NDLDZCQUE2QixFQUFFLFVBQVVDLGlCQUFrRixFQUFRO01BQ2xJQyxTQUFTLENBQUNDLFdBQVcsQ0FDcEJGLGlCQUFpQixDQUFDRyxHQUFHLENBQUVDLGdCQUFnQixJQUFLO1FBQzNDLE1BQU1DLE9BQU8sR0FBR0QsZ0JBQWdCLENBQUNFLG1CQUFtQixDQUFDQyxLQUFLLENBQUNDLFVBQVUsQ0FDcEVKLGdCQUFnQixDQUFDRSxtQkFBbUIsQ0FBQ0csWUFBWSxHQUFHLE9BQU8sR0FBRyxPQUFPLENBQ3JFO1FBQ0QsT0FBTyxJQUFJQyxPQUFPLENBQUM7VUFDbEJDLE9BQU8sRUFBRVAsZ0JBQWdCLENBQUNPLE9BQU87VUFDakNDLElBQUksRUFBRUMsV0FBVyxDQUFDQyxLQUFLO1VBQ3ZCQyxTQUFTLEVBQUUsQ0FBQVYsT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUVXLFFBQVEsRUFBRSxLQUFJQyxTQUFT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
|
|
332
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBY3Rpb25SdW50aW1lIiwiX2FkZE1lc3NhZ2VGb3JBY3Rpb25QYXJhbWV0ZXIiLCJtZXNzYWdlUGFyYW1ldGVycyIsIk1lc3NhZ2luZyIsImFkZE1lc3NhZ2VzIiwibWFwIiwibWVzc2FnZVBhcmFtZXRlciIsImJpbmRpbmciLCJhY3Rpb25QYXJhbWV0ZXJJbmZvIiwiZmllbGQiLCJnZXRCaW5kaW5nIiwiaXNNdWx0aVZhbHVlIiwiTWVzc2FnZSIsIm1lc3NhZ2UiLCJ0eXBlIiwiTWVzc2FnZVR5cGUiLCJFcnJvciIsInByb2Nlc3NvciIsImdldE1vZGVsIiwidW5kZWZpbmVkIiwicGVyc2lzdGVudCIsInRhcmdldCIsImdldFJlc29sdmVkUGF0aCIsInZhbGlkYXRlUHJvcGVydGllcyIsImFjdGlvblBhcmFtZXRlckluZm9zIiwicmVzb3VyY2VNb2RlbCIsIlByb21pc2UiLCJhbGxTZXR0bGVkIiwidmFsaWRhdGlvblByb21pc2UiLCJyZXF1aXJlZFBhcmFtZXRlckluZm9zIiwiZmlsdGVyIiwicGFyYW1ldGVySW5mbyIsImdldFJlcXVpcmVkIiwiYWxsTWVzc2FnZXMiLCJnZXRNZXNzYWdlTW9kZWwiLCJnZXREYXRhIiwiZW1wdHlSZXF1aXJlZEZpZWxkcyIsInJlcXVpcmVkUGFyYW1ldGVySW5mbyIsImZpZWxkSWQiLCJnZXRJZCIsInJlbGV2YW50TWVzc2FnZXMiLCJtc2ciLCJnZXRDb250cm9sSWRzIiwic29tZSIsImNvbnRyb2xJZCIsImluY2x1ZGVzIiwibGVuZ3RoIiwidmFsdWUiLCJmaWVsZFZhbHVlIiwiZ2V0VmFsdWUiLCJpc0ZpZWxkQXJyYXkiLCJBcnJheSIsImlzQXJyYXkiLCJnZXRUZXh0IiwiZ2V0UGFyZW50IiwiZ2V0QWdncmVnYXRpb24iLCJmaXJzdEludmFsaWRQYXJhbWV0ZXIiLCJmaW5kIiwiaGFzRXJyb3IiLCJnZXRWYWx1ZVN0YXRlIiwiZm9jdXMiLCJzZXRBY3Rpb25FbmFibGVtZW50Iiwib0ludGVybmFsTW9kZWxDb250ZXh0Iiwib0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsImFTZWxlY3RlZENvbnRleHRzIiwic0NvbnRyb2wiLCJmb3JDb250ZXh0TWVudSIsImFQcm9taXNlcyIsInNBY3Rpb24iLCJhUmVxdWVzdFByb21pc2VzIiwic2V0UHJvcGVydHkiLCJzUHJvcGVydHkiLCJlbGVtZW50Iiwib1NlbGVjdGVkQ29udGV4dCIsIm9Db250ZXh0RGF0YSIsImdldE9iamVjdCIsIl9zZXRBY3Rpb25FbmFibGVtZW50Rm9yVGFibGUiLCJiRW5hYmxlZCIsImFBcHBsaWNhYmxlIiwiYU5vdEFwcGxpY2FibGUiLCJwdXNoIiwiQ29tbW9uVXRpbHMiLCJzZXRDb250ZXh0c0Jhc2VkT25PcGVyYXRpb25BdmFpbGFibGUiLCJhbGwiLCJzZXRBY3Rpb25FbmFibGVtZW50QWZ0ZXJQYXRjaCIsIm9WaWV3Iiwib0xpc3RCaW5kaW5nIiwib0ludGVybmFsTW9kZWxDb250ZXh0RGF0YSIsIm9Db250cm9scyIsImNvbnRyb2xzIiwic0tleSIsIm9UYWJsZSIsImJ5SWQiLCJpc0EiLCJvUm93QmluZGluZyIsImdldFJvd0JpbmRpbmciLCJnZXRCaW5kaW5nQ29udGV4dCIsIkpTT04iLCJwYXJzZSIsImRhdGEiLCJjdXN0b21EYXRhIiwiZ2V0U2VsZWN0ZWRDb250ZXh0cyIsInVwZGF0ZUVkaXRCdXR0b25WaXNpYmlsaXR5QW5kRW5hYmxlbWVudCIsImlWaWV3TGV2ZWwiLCJnZXRWaWV3RGF0YSIsInZpZXdMZXZlbCIsImlzRWRpdGFibGUiLCJnZXRQcm9wZXJ0eSIsIm9Db250ZXh0Iiwib0FwcENvbXBvbmVudCIsImdldEFwcENvbXBvbmVudCIsInNNZXRhUGF0aCIsIk1vZGVsSGVscGVyIiwiZ2V0TWV0YVBhdGhGb3JDb250ZXh0Iiwic0VudGl0eVNldCIsImdldFJvb3RFbnRpdHlTZXRQYXRoIiwibWV0YUNvbnRleHQiLCJnZXRNZXRhTW9kZWwiLCJnZXRDb250ZXh0IiwiZ2V0UGF0aCIsImNvbnZlcnRlckNvbnRleHQiLCJDb252ZXJ0ZXJDb250ZXh0IiwiY3JlYXRlQ29udmVydGVyQ29udGV4dEZvck1hY3JvIiwiZ2V0RGlhZ25vc3RpY3MiLCJtZXJnZSIsImVudGl0eVNldCIsImdldEVudGl0eVNldCIsImVudGl0eVR5cGUiLCJnZXRFbnRpdHlUeXBlIiwidXBkYXRlSGlkZGVuIiwiYlVwZGF0ZUhpZGRlbiIsImlzRW50aXR5U2V0IiwiYW5ub3RhdGlvbnMiLCJVSSIsIlVwZGF0ZUhpZGRlbiIsInZhbHVlT2YiLCJpc1VwZGF0ZUhpZGRlbiIsInNFZGl0RW5hYmxlQmluZGluZyIsImdldEVkaXRCdXR0b25FbmFibGVkIiwiZHJhZnRSb290UGF0aCIsImdldERyYWZ0Um9vdFBhdGgiLCJzU3RpY2t5Um9vdFBhdGgiLCJnZXRTdGlja3lSb290UGF0aCIsInNQYXRoIiwib1Jvb3RDb250ZXh0IiwiYmluZENvbnRleHQiLCJnZXRCb3VuZENvbnRleHQiLCJzSGlkZGVuRXhwcmVzc2lvbiIsImNvbXBpbGVFeHByZXNzaW9uIiwiZXF1YWwiLCJnZXRIaWRkZW5FeHByZXNzaW9uIiwidXBkYXRlRWRpdE1vZGVsQ29udGV4dCIsInNCaW5kaW5nRXhwcmVzc2lvbiIsIm9IaWRkZW5FbGVtZW50IiwiQW55RWxlbWVudCIsImFueVRleHQiLCJzZXRCaW5kaW5nQ29udGV4dCIsImFkZERlcGVuZGVudCIsIiQkZ3JvdXBJZCIsImF0dGFjaENoYW5nZSIsIm9FdmVudCIsIm9OZXdWYWx1ZSIsImdldFNvdXJjZSIsImdldEV4dGVybmFsVmFsdWUiLCJzRW5hYmxlbWVudEZpZWxkTmFtZSIsImJBY3Rpb25FbmFibGVkIiwiYkVuYWJsZWRGb3JDb250ZXh0TWVudSIsImFBcHBsaWNhYmxlRm9yQ29udGV4dE1lbnUiLCJhTm90QXBwbGljYWJsZUZvckNvbnRleHRNZW51Iiwic0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aCIsIm9UcmFuc2Zvcm1lZEJpbmRpbmciLCJ0cmFuc2Zvcm1SZWN1cnNpdmVseSIsIm9CaW5kaW5nRXhwcmVzc2lvbiIsImNvbnN0YW50IiwicGF0aCIsInNSZXN1bHQiLCJzZXREeW5hbWljQWN0aW9uQ29udGV4dHMiLCJyZXF1ZXN0UHJvcGVydHkiLCJnZXRJc0FjdGlvbkNyaXRpY2FsIiwibWV0YU1vZGVsIiwiY29udGV4dHMiLCJpc0FjdGlvbkNyaXRpY2FsVmFsdWUiLCJjb252ZXJ0ZWRUeXBlcyIsImNvbnZlcnRUeXBlcyIsImFjdGlvblRhcmdldFJlc29sdXRpb24iLCJyZXNvbHZlUGF0aCIsImFjdGlvblRhcmdldCIsImlzQWN0aW9uQ3JpdGljYWxCaW5kaW5nRXhwIiwiZ2V0SXNBY3Rpb25Dcml0aWNhbEV4cHJlc3Npb24iLCJpc0NvbnN0YW50IiwiY29tcGlsZUNvbnN0YW50IiwicmVzb2x2ZSIsImFueU9iamVjdCIsIkFueSIsImFueUJvb2xlYW4iLCJzZXRNb2RlbCIsImJvb2xlYW5CaW5kaW5nIiwiZm5DaGFuZ2UiLCJ2YWx1ZUV4dCIsImRlc3Ryb3kiLCJhdHRhY2hFdmVudE9uY2UiLCJlcnIiLCJTdHJpbmciLCJMb2ciLCJlcnJvciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQWN0aW9uUnVudGltZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFjdGlvbiBhcyBFZG1BY3Rpb24sIFByaW1pdGl2ZVR5cGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IG1lcmdlIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgeyBfUmVxdWVzdGVkUHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCBBbnkgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL0FueVwiO1xuaW1wb3J0IHR5cGUgeyBQYXRoSW5Nb2RlbEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgY29tcGlsZUNvbnN0YW50LCBjb21waWxlRXhwcmVzc2lvbiwgY29uc3RhbnQsIGVxdWFsLCBpc0NvbnN0YW50LCB0cmFuc2Zvcm1SZWN1cnNpdmVseSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgaXNFbnRpdHlTZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgeyBnZXRJc0FjdGlvbkNyaXRpY2FsRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0FjdGlvbkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgTGFiZWwgZnJvbSBcInNhcC9tL0xhYmVsXCI7XG5pbXBvcnQgdHlwZSBFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCBNZXNzYWdpbmcgZnJvbSBcInNhcC91aS9jb3JlL01lc3NhZ2luZ1wiO1xuaW1wb3J0IHsgTWVzc2FnZVR5cGUgfSBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIEZpZWxkIGZyb20gXCJzYXAvdWkvbWRjL0ZpZWxkXCI7XG5pbXBvcnQgdHlwZSBNdWx0aVZhbHVlRmllbGQgZnJvbSBcInNhcC91aS9tZGMvTXVsdGlWYWx1ZUZpZWxkXCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgTXVsdGlWYWx1ZUZpZWxkSXRlbSBmcm9tIFwic2FwL3VpL21kYy9maWVsZC9NdWx0aVZhbHVlRmllbGRJdGVtXCI7XG5pbXBvcnQgdHlwZSBQcm9wZXJ0eUJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9Qcm9wZXJ0eUJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IEFueUVsZW1lbnQgZnJvbSBcIi4vY29udHJvbHMvQW55RWxlbWVudFwiO1xuaW1wb3J0IENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4vY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VNYW5pZmVzdFNldHRpbmdzIH0gZnJvbSBcIi4vY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBjb252ZXJ0VHlwZXMgfSBmcm9tIFwiLi9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgZ2V0RWRpdEJ1dHRvbkVuYWJsZWQsIGdldEhpZGRlbkV4cHJlc3Npb24gfSBmcm9tIFwiLi9jb252ZXJ0ZXJzL29iamVjdFBhZ2UvSGVhZGVyQW5kRm9vdGVyQWN0aW9uXCI7XG5cbmV4cG9ydCB0eXBlIEFjdGlvblBhcmFtZXRlckluZm8gPSB7XG5cdHBhcmFtZXRlcjogdW5rbm93bjtcblx0ZmllbGQ6IEZpZWxkIHwgTXVsdGlWYWx1ZUZpZWxkO1xuXHRpc011bHRpVmFsdWU6IGJvb2xlYW47XG5cdHZhbHVlPzogc3RyaW5nIHwgTXVsdGlWYWx1ZUZpZWxkSXRlbVtdO1xuXHR2YWxpZGF0aW9uUHJvbWlzZT86IFByb21pc2U8c3RyaW5nIHwgTXVsdGlWYWx1ZUZpZWxkSXRlbVtdPjtcblx0aGFzRXJyb3I6IGJvb2xlYW47XG59O1xuXG5jb25zdCBBY3Rpb25SdW50aW1lID0ge1xuXHQvKipcblx0ICogQWRkcyBlcnJvciBtZXNzYWdlcyBmb3IgYW4gYWN0aW9uIHBhcmFtZXRlciBmaWVsZCB0byB0aGUgbWVzc2FnZSBtYW5hZ2VyLlxuXHQgKlxuXHQgKiBAcGFyYW0gbWVzc2FnZVBhcmFtZXRlcnMgSW5mb3JtYXRpb24gaWRlbnRpZnlpbmcgYW4gYWN0aW9uIHBhcmFtZXRlciBhbmQgbWVzc2FnZXMgcmVmZXJyaW5nIHRvIHRoaXMgcGFyYW1ldGVyXG5cdCAqL1xuXHRfYWRkTWVzc2FnZUZvckFjdGlvblBhcmFtZXRlcjogZnVuY3Rpb24gKG1lc3NhZ2VQYXJhbWV0ZXJzOiB7IGFjdGlvblBhcmFtZXRlckluZm86IEFjdGlvblBhcmFtZXRlckluZm87IG1lc3NhZ2U6IHN0cmluZyB9W10pOiB2b2lkIHtcblx0XHRNZXNzYWdpbmcuYWRkTWVzc2FnZXMoXG5cdFx0XHRtZXNzYWdlUGFyYW1ldGVycy5tYXAoKG1lc3NhZ2VQYXJhbWV0ZXIpID0+IHtcblx0XHRcdFx0Y29uc3QgYmluZGluZyA9IG1lc3NhZ2VQYXJhbWV0ZXIuYWN0aW9uUGFyYW1ldGVySW5mby5maWVsZC5nZXRCaW5kaW5nKFxuXHRcdFx0XHRcdG1lc3NhZ2VQYXJhbWV0ZXIuYWN0aW9uUGFyYW1ldGVySW5mby5pc011bHRpVmFsdWUgPyBcIml0ZW1zXCIgOiBcInZhbHVlXCJcblx0XHRcdFx0KTtcblx0XHRcdFx0cmV0dXJuIG5ldyBNZXNzYWdlKHtcblx0XHRcdFx0XHRtZXNzYWdlOiBtZXNzYWdlUGFyYW1ldGVyLm1lc3NhZ2UsXG5cdFx0XHRcdFx0dHlwZTogTWVzc2FnZVR5cGUuRXJyb3IsXG5cdFx0XHRcdFx0cHJvY2Vzc29yOiBiaW5kaW5nPy5nZXRNb2RlbCgpID8/IHVuZGVmaW5lZCwgLy8gZ2V0TW9kZWwoKTogbnVsbCB8IE1vZGVsIH5+PiBwcm9jZXNzb3I/OiBNZXNzYWdlUHJvY2Vzc29yXG5cdFx0XHRcdFx0cGVyc2lzdGVudDogdHJ1ZSxcblx0XHRcdFx0XHR0YXJnZXQ6IGJpbmRpbmc/LmdldFJlc29sdmVkUGF0aCgpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSlcblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgYWxsIHJlcXVpcmVkIGFjdGlvbiBwYXJhbWV0ZXJzIGNvbnRhaW4gZGF0YSBhbmQgY2hlY2tzIGZvciBhbGwgYWN0aW9uIHBhcmFtZXRlcnMgaWYgdGhlXG5cdCAqIGNvbnRhaW5lZCBkYXRhIGlzIHZhbGlkLlxuXHQgKlxuXHQgKlxuXHQgKiBAcGFyYW0gYWN0aW9uUGFyYW1ldGVySW5mb3MgSW5mb3JtYXRpb24gaWRlbnRpZnlpbmcgYW4gYWN0aW9uIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0gcmVzb3VyY2VNb2RlbCBUaGUgbW9kZWwgdG8gbG9hZCB0ZXh0IHJlc291cmNlc1xuXHQgKiBAcmV0dXJucyBUaGUgdmFsaWRhdGlvbiByZXN1bHQgY2FuIGJlIHRydWUgb3IgZmFsc2Vcblx0ICovXG5cdHZhbGlkYXRlUHJvcGVydGllczogYXN5bmMgZnVuY3Rpb24gKGFjdGlvblBhcmFtZXRlckluZm9zOiBBY3Rpb25QYXJhbWV0ZXJJbmZvW10sIHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG5cdFx0XHRhY3Rpb25QYXJhbWV0ZXJJbmZvcy5tYXAoXG5cdFx0XHRcdChhY3Rpb25QYXJhbWV0ZXJJbmZvKTogUHJvbWlzZTxzdHJpbmcgfCBNdWx0aVZhbHVlRmllbGRJdGVtW10+IHwgdW5kZWZpbmVkID0+IGFjdGlvblBhcmFtZXRlckluZm8udmFsaWRhdGlvblByb21pc2Vcblx0XHRcdClcblx0XHQpO1xuXG5cdFx0Y29uc3QgcmVxdWlyZWRQYXJhbWV0ZXJJbmZvcyA9IGFjdGlvblBhcmFtZXRlckluZm9zLmZpbHRlcigocGFyYW1ldGVySW5mbykgPT4gcGFyYW1ldGVySW5mby5maWVsZC5nZXRSZXF1aXJlZCgpKTtcblx0XHRjb25zdCBhbGxNZXNzYWdlcyA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCk7XG5cdFx0Y29uc3QgZW1wdHlSZXF1aXJlZEZpZWxkcyA9IHJlcXVpcmVkUGFyYW1ldGVySW5mb3MuZmlsdGVyKChyZXF1aXJlZFBhcmFtZXRlckluZm8pID0+IHtcblx0XHRcdGNvbnN0IGZpZWxkSWQgPSByZXF1aXJlZFBhcmFtZXRlckluZm8uZmllbGQuZ2V0SWQoKTtcblx0XHRcdGNvbnN0IHJlbGV2YW50TWVzc2FnZXMgPSBhbGxNZXNzYWdlcy5maWx0ZXIoKG1zZzogTWVzc2FnZSkgPT5cblx0XHRcdFx0bXNnLmdldENvbnRyb2xJZHMoKS5zb21lKChjb250cm9sSWQ6IHN0cmluZykgPT4gY29udHJvbElkLmluY2x1ZGVzKGZpZWxkSWQpKVxuXHRcdFx0KTtcblx0XHRcdGlmIChyZWxldmFudE1lc3NhZ2VzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSBlbHNlIGlmIChyZXF1aXJlZFBhcmFtZXRlckluZm8uaXNNdWx0aVZhbHVlKSB7XG5cdFx0XHRcdHJldHVybiByZXF1aXJlZFBhcmFtZXRlckluZm8udmFsdWUgPT09IHVuZGVmaW5lZCB8fCAhcmVxdWlyZWRQYXJhbWV0ZXJJbmZvLnZhbHVlLmxlbmd0aDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGZpZWxkVmFsdWUgPSAocmVxdWlyZWRQYXJhbWV0ZXJJbmZvLmZpZWxkIGFzIEZpZWxkKS5nZXRWYWx1ZSgpO1xuXHRcdFx0XHRjb25zdCBpc0ZpZWxkQXJyYXkgPSBBcnJheS5pc0FycmF5KChyZXF1aXJlZFBhcmFtZXRlckluZm8uZmllbGQgYXMgRmllbGQpLmdldFZhbHVlKCkpO1xuXHRcdFx0XHRpZiAoaXNGaWVsZEFycmF5KSB7XG5cdFx0XHRcdFx0Ly8gb25seSBmaXJzdCB2YWx1ZSBjaGVjayBpcyBlbm91Z2ggYXMgdGhlIGZpZWxkIHZhbHVlIGNvbWVzIG9uIFswXSByZXN0IG9mIHRoZSBhcnJheSBpbmNsdWRlcyBjdXJyZW5jeSBhbmQgY3VycmVuY3kgY29kZVxuXHRcdFx0XHRcdC8vIGJvdGggb2Ygd2hpY2ggY2FuIG9yIGNhbm5vdCBiZSBudWxsLCBzbyB3ZSBzaGFsbCBjaGVjayBvbmx5IHRoZSBmaWVsZCB2YWx1ZVxuXHRcdFx0XHRcdHJldHVybiBmaWVsZFZhbHVlWzBdID09PSBudWxsIHx8IGZpZWxkVmFsdWVbMF0gPT09IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGZpZWxkVmFsdWUgPT09IHVuZGVmaW5lZCB8fCBmaWVsZFZhbHVlID09PSBudWxsIHx8IGZpZWxkVmFsdWUgPT09IFwiXCI7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0LyogTWVzc2FnZSBmb3IgbWlzc2luZyBtYW5kYXRvcnkgdmFsdWUgb2YgdGhlIGFjdGlvbiBwYXJhbWV0ZXIgKi9cblx0XHRpZiAoZW1wdHlSZXF1aXJlZEZpZWxkcy5sZW5ndGgpIHtcblx0XHRcdHRoaXMuX2FkZE1lc3NhZ2VGb3JBY3Rpb25QYXJhbWV0ZXIoXG5cdFx0XHRcdGVtcHR5UmVxdWlyZWRGaWVsZHMubWFwKChhY3Rpb25QYXJhbWV0ZXJJbmZvKSA9PiAoe1xuXHRcdFx0XHRcdGFjdGlvblBhcmFtZXRlckluZm86IGFjdGlvblBhcmFtZXRlckluZm8sXG5cdFx0XHRcdFx0bWVzc2FnZTogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19PUEVSQVRJT05TX0FDVElPTl9QQVJBTUVURVJfRElBTE9HX01JU1NJTkdfTUFOREFUT1JZX01TR1wiLCBbXG5cdFx0XHRcdFx0XHQoYWN0aW9uUGFyYW1ldGVySW5mby5maWVsZC5nZXRQYXJlbnQoKT8uZ2V0QWdncmVnYXRpb24oXCJsYWJlbFwiKSBhcyBMYWJlbCkuZ2V0VGV4dCgpXG5cdFx0XHRcdFx0XSlcblx0XHRcdFx0fSkpXG5cdFx0XHQpO1xuXHRcdH1cblx0XHQvKiBDaGVjayB2YWx1ZSBzdGF0ZSBvZiBhbGwgcGFyYW1ldGVycyAqL1xuXHRcdGNvbnN0IGZpcnN0SW52YWxpZFBhcmFtZXRlciA9IGFjdGlvblBhcmFtZXRlckluZm9zLmZpbmQoXG5cdFx0XHQocGFyYW1ldGVySW5mbykgPT5cblx0XHRcdFx0cGFyYW1ldGVySW5mby5oYXNFcnJvciB8fCBwYXJhbWV0ZXJJbmZvLmZpZWxkLmdldFZhbHVlU3RhdGUoKSA9PT0gXCJFcnJvclwiIHx8IGVtcHR5UmVxdWlyZWRGaWVsZHMuaW5jbHVkZXMocGFyYW1ldGVySW5mbylcblx0XHQpO1xuXHRcdGlmIChmaXJzdEludmFsaWRQYXJhbWV0ZXIpIHtcblx0XHRcdGZpcnN0SW52YWxpZFBhcmFtZXRlci5maWVsZC5mb2N1cygpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGFjdGlvbiBlbmFibGVtZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0gb0ludGVybmFsTW9kZWxDb250ZXh0IE9iamVjdCBjb250YWluaW5nIHRoZSBjb250ZXh0IG1vZGVsXG5cdCAqIEBwYXJhbSBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwIE1hcCBjb250YWluaW5nIHRoZSBvcGVyYXRpb24gYXZhaWxhYmlsaXR5IG9mIGFjdGlvbnNcblx0ICogQHBhcmFtIGFTZWxlY3RlZENvbnRleHRzIEFycmF5IGNvbnRhaW5pbmcgc2VsZWN0ZWQgY29udGV4dHMgb2YgdGhlIGNoYXJ0XG5cdCAqIEBwYXJhbSBzQ29udHJvbCBDb250cm9sIG5hbWVcblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuXHQgKiBAcmV0dXJucyBUaGUgYWN0aW9uIGVuYWJsZW1lbnQgcHJvbWlzZXNcblx0ICovXG5cdHNldEFjdGlvbkVuYWJsZW1lbnQ6IGFzeW5jIGZ1bmN0aW9uIChcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ6IEludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG5cdFx0YVNlbGVjdGVkQ29udGV4dHM6IENvbnRleHRbXSxcblx0XHRzQ29udHJvbDogc3RyaW5nLFxuXHRcdGZvckNvbnRleHRNZW51ID0gZmFsc2Vcblx0KTogUHJvbWlzZTx2b2lkW10+IHtcblx0XHRjb25zdCBhUHJvbWlzZXMgPSBbXTtcblx0XHRmb3IgKGNvbnN0IHNBY3Rpb24gaW4gb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCkge1xuXHRcdFx0bGV0IGFSZXF1ZXN0UHJvbWlzZXM6IFByb21pc2U8X1JlcXVlc3RlZFByb3BlcnR5PltdID0gW107XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoc0FjdGlvbiwgZmFsc2UpO1xuXHRcdFx0aWYgKHNDb250cm9sID09PSBcInRhYmxlXCIpIHtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KGBkeW5hbWljQWN0aW9ucy8ke3NBY3Rpb259L2FBcHBsaWNhYmxlYCwgW10pO1xuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn0vYU5vdEFwcGxpY2FibGVgLCBbXSk7XG5cdFx0XHRcdGlmIChmb3JDb250ZXh0TWVudSkge1xuXHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufS9iRW5hYmxlZEZvckNvbnRleHRNZW51YCwgZmFsc2UpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufS9iRW5hYmxlZGAsIGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgc1Byb3BlcnR5ID0gb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcFtzQWN0aW9uXTtcblx0XHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiBhU2VsZWN0ZWRDb250ZXh0cykge1xuXHRcdFx0XHRjb25zdCBvU2VsZWN0ZWRDb250ZXh0ID0gZWxlbWVudDtcblx0XHRcdFx0aWYgKG9TZWxlY3RlZENvbnRleHQpIHtcblx0XHRcdFx0XHRjb25zdCBvQ29udGV4dERhdGEgPSBvU2VsZWN0ZWRDb250ZXh0LmdldE9iamVjdCgpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRcdFx0XHRcdGlmIChzQ29udHJvbCA9PT0gXCJjaGFydFwiKSB7XG5cdFx0XHRcdFx0XHRpZiAoKHNQcm9wZXJ0eSA9PT0gbnVsbCAmJiAhIW9Db250ZXh0RGF0YVtgIyR7c0FjdGlvbn1gXSkgfHwgb1NlbGVjdGVkQ29udGV4dC5nZXRPYmplY3Qoc1Byb3BlcnR5KSkge1xuXHRcdFx0XHRcdFx0XHQvL2xvb2sgZm9yIGFjdGlvbiBhZHZlcnRpc2VtZW50IGlmIHByZXNlbnQgYW5kIGl0cyB2YWx1ZSBpcyBub3QgbnVsbFxuXHRcdFx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoc0FjdGlvbiwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoc0NvbnRyb2wgPT09IFwidGFibGVcIikge1xuXHRcdFx0XHRcdFx0YVJlcXVlc3RQcm9taXNlcyA9IHRoaXMuX3NldEFjdGlvbkVuYWJsZW1lbnRGb3JUYWJsZShcblx0XHRcdFx0XHRcdFx0b1NlbGVjdGVkQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRzQWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRzUHJvcGVydHksXG5cdFx0XHRcdFx0XHRcdGFSZXF1ZXN0UHJvbWlzZXMsXG5cdFx0XHRcdFx0XHRcdGZvckNvbnRleHRNZW51XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKHNDb250cm9sID09PSBcInRhYmxlXCIpIHtcblx0XHRcdFx0aWYgKCFhU2VsZWN0ZWRDb250ZXh0cy5sZW5ndGgpIHtcblx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn1gLCB7XG5cdFx0XHRcdFx0XHRiRW5hYmxlZDogZmFsc2UsXG5cdFx0XHRcdFx0XHRhQXBwbGljYWJsZTogW10sXG5cdFx0XHRcdFx0XHRhTm90QXBwbGljYWJsZTogW11cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRhUHJvbWlzZXMucHVzaChDb21tb25VdGlscy5zZXRDb250ZXh0c0Jhc2VkT25PcGVyYXRpb25BdmFpbGFibGUob0ludGVybmFsTW9kZWxDb250ZXh0LCBbXSwgZm9yQ29udGV4dE1lbnUpKTtcblx0XHRcdFx0fSBlbHNlIGlmIChhU2VsZWN0ZWRDb250ZXh0cy5sZW5ndGggJiYgdHlwZW9mIHNQcm9wZXJ0eSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRcdC8vIFdoZW4gYWxsIHByb3BlcnR5IHZhbHVlcyBoYXZlIGJlZW4gcmV0cmlldmVkLCBzZXRcblx0XHRcdFx0XHQvLyBUaGUgYXBwbGljYWJsZSBhbmQgbm90LWFwcGxpY2FibGUgc2VsZWN0ZWQgY29udGV4dHMgZm9yIGVhY2ggYWN0aW9uIGFuZFxuXHRcdFx0XHRcdC8vIFRoZSBlbmFibGVkIHByb3BlcnR5IG9mIHRoZSBkeW5hbWljIGFjdGlvbiBpbiBpbnRlcm5hbCBtb2RlbCBjb250ZXh0LlxuXHRcdFx0XHRcdGFQcm9taXNlcy5wdXNoKFxuXHRcdFx0XHRcdFx0Q29tbW9uVXRpbHMuc2V0Q29udGV4dHNCYXNlZE9uT3BlcmF0aW9uQXZhaWxhYmxlKG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgYVJlcXVlc3RQcm9taXNlcywgZm9yQ29udGV4dE1lbnUpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoYVByb21pc2VzKTtcblx0fSxcblx0c2V0QWN0aW9uRW5hYmxlbWVudEFmdGVyUGF0Y2g6IGZ1bmN0aW9uIChcblx0XHRvVmlldzogVmlldyxcblx0XHRvTGlzdEJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmcsXG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dFxuXHQpOiB2b2lkIHtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHREYXRhID0gb0ludGVybmFsTW9kZWxDb250ZXh0Py5nZXRPYmplY3QoKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0XHRjb25zdCBvQ29udHJvbHMgPSAob0ludGVybmFsTW9kZWxDb250ZXh0RGF0YT8uY29udHJvbHMgfHwge30pIGFzIFJlY29yZDxzdHJpbmcsIHsgY29udHJvbElkPzogc3RyaW5nIH0+O1xuXHRcdGZvciAoY29uc3Qgc0tleSBpbiBvQ29udHJvbHMpIHtcblx0XHRcdGlmIChvQ29udHJvbHNbc0tleV0gJiYgb0NvbnRyb2xzW3NLZXldLmNvbnRyb2xJZCkge1xuXHRcdFx0XHRjb25zdCBvVGFibGUgPSBvVmlldy5ieUlkKHNLZXkpO1xuXHRcdFx0XHRpZiAob1RhYmxlICYmIG9UYWJsZS5pc0E8VGFibGU+KFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0XHRcdGNvbnN0IG9Sb3dCaW5kaW5nID0gb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRcdFx0XHRpZiAob1Jvd0JpbmRpbmcgPT0gb0xpc3RCaW5kaW5nKSB7XG5cdFx0XHRcdFx0XHRBY3Rpb25SdW50aW1lLnNldEFjdGlvbkVuYWJsZW1lbnQoXG5cdFx0XHRcdFx0XHRcdG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRKU09OLnBhcnNlKG9UYWJsZS5kYXRhKFwib3BlcmF0aW9uQXZhaWxhYmxlTWFwXCIpLmN1c3RvbURhdGEpLFxuXHRcdFx0XHRcdFx0XHRvVGFibGUuZ2V0U2VsZWN0ZWRDb250ZXh0cygpIGFzIENvbnRleHRbXSxcblx0XHRcdFx0XHRcdFx0XCJ0YWJsZVwiXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHR1cGRhdGVFZGl0QnV0dG9uVmlzaWJpbGl0eUFuZEVuYWJsZW1lbnQob1ZpZXc6IEZFVmlldyk6IHZvaWQge1xuXHRcdGNvbnN0IGlWaWV3TGV2ZWwgPSAob1ZpZXcuZ2V0Vmlld0RhdGEoKSBhcyBCYXNlTWFuaWZlc3RTZXR0aW5ncyk/LnZpZXdMZXZlbCxcblx0XHRcdGlzRWRpdGFibGUgPSBvVmlldy5nZXRNb2RlbChcInVpXCIpPy5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpO1xuXHRcdGlmICgoaVZpZXdMZXZlbCBhcyBudW1iZXIpID4gMSAmJiBpc0VkaXRhYmxlICE9PSB0cnVlKSB7XG5cdFx0XHRjb25zdCBvQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0XHRjb25zdCBvQXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KG9WaWV3KTtcblx0XHRcdGNvbnN0IHNNZXRhUGF0aCA9IE1vZGVsSGVscGVyLmdldE1ldGFQYXRoRm9yQ29udGV4dChvQ29udGV4dCk7XG5cdFx0XHRjb25zdCBzRW50aXR5U2V0ID0gTW9kZWxIZWxwZXIuZ2V0Um9vdEVudGl0eVNldFBhdGgoc01ldGFQYXRoKTtcblx0XHRcdGNvbnN0IG1ldGFDb250ZXh0ID0gb0NvbnRleHRcblx0XHRcdFx0Py5nZXRNb2RlbCgpXG5cdFx0XHRcdC5nZXRNZXRhTW9kZWwoKVxuXHRcdFx0XHQ/LmdldENvbnRleHQob0NvbnRleHQ/LmdldFBhdGgoKSk7XG5cdFx0XHRjb25zdCBjb252ZXJ0ZXJDb250ZXh0ID0gQ29udmVydGVyQ29udGV4dD8uY3JlYXRlQ29udmVydGVyQ29udGV4dEZvck1hY3JvKFxuXHRcdFx0XHRzRW50aXR5U2V0LFxuXHRcdFx0XHRtZXRhQ29udGV4dCxcblx0XHRcdFx0b0FwcENvbXBvbmVudC5nZXREaWFnbm9zdGljcygpLFxuXHRcdFx0XHRtZXJnZVxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdFx0XHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdFx0XHRsZXQgdXBkYXRlSGlkZGVuO1xuXHRcdFx0Ly9GaW5kIHRoZSBVcGRhdGUgSGlkZGVuIG9mIHRoZSByb290IGVudGl0eSBzZXQgYW5kIGJpbmQgdGhlIHByb3BlcnR5IHRvIEFueUVsZW1lbnQsIGFueSBjaGFuZ2VzIGluIHRoZSBwYXRoIG9mIHRoZSByb290IFVwZGF0ZUhpZGRlbiB3aWxsIGJlIHVwZGF0ZWQgdmlhIHRoZSBwcm9wZXJ0eSwgaW50ZXJuYWwgbW9kZWwgY29udGV4dCBpcyB1cGRhdGVkIGJhc2VkIG9uIHRoZSBwcm9wZXJ0eVxuXHRcdFx0Y29uc3QgYlVwZGF0ZUhpZGRlbiA9IGlzRW50aXR5U2V0KGVudGl0eVNldCkgJiYgZW50aXR5U2V0LmFubm90YXRpb25zLlVJPy5VcGRhdGVIaWRkZW4/LnZhbHVlT2YoKTtcblx0XHRcdGlmIChiVXBkYXRlSGlkZGVuICE9PSB0cnVlKSB7XG5cdFx0XHRcdHVwZGF0ZUhpZGRlbiA9IE1vZGVsSGVscGVyLmlzVXBkYXRlSGlkZGVuKGVudGl0eVNldCwgZW50aXR5VHlwZSk7XG5cdFx0XHR9XG5cdFx0XHQvL0ZpbmQgdGhlIG9wZXJhdGlvbiBhdmFpbGFibGUgcHJvcGVydHkgb2YgdGhlIHJvb3QgZWRpdCBjb25maWd1cmF0aW9uIGFuZCBmZXRjaCB0aGUgcHJvcGVydHkgdXNpbmcgQW55RWxlbWVudFxuXHRcdFx0Y29uc3Qgc0VkaXRFbmFibGVCaW5kaW5nID0gZ2V0RWRpdEJ1dHRvbkVuYWJsZWQoY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRjb25zdCBkcmFmdFJvb3RQYXRoID0gTW9kZWxIZWxwZXIuZ2V0RHJhZnRSb290UGF0aChvQ29udGV4dCk7XG5cdFx0XHRjb25zdCBzU3RpY2t5Um9vdFBhdGggPSBNb2RlbEhlbHBlci5nZXRTdGlja3lSb290UGF0aChvQ29udGV4dCk7XG5cdFx0XHRjb25zdCBzUGF0aCA9IGRyYWZ0Um9vdFBhdGggfHwgc1N0aWNreVJvb3RQYXRoO1xuXHRcdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdGlmIChzUGF0aCkge1xuXHRcdFx0XHRjb25zdCBvUm9vdENvbnRleHQgPSBvVmlldy5nZXRNb2RlbCgpLmJpbmRDb250ZXh0KHNQYXRoKS5nZXRCb3VuZENvbnRleHQoKTtcblx0XHRcdFx0aWYgKHVwZGF0ZUhpZGRlbiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc0hpZGRlbkV4cHJlc3Npb24gPSBjb21waWxlRXhwcmVzc2lvbihlcXVhbChnZXRIaWRkZW5FeHByZXNzaW9uKGNvbnZlcnRlckNvbnRleHQsIHVwZGF0ZUhpZGRlbiksIGZhbHNlKSk7XG5cdFx0XHRcdFx0dGhpcy51cGRhdGVFZGl0TW9kZWxDb250ZXh0KHNIaWRkZW5FeHByZXNzaW9uLCBvVmlldywgb1Jvb3RDb250ZXh0LCBcInJvb3RFZGl0VmlzaWJsZVwiLCBvSW50ZXJuYWxNb2RlbENvbnRleHQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChzRWRpdEVuYWJsZUJpbmRpbmcpIHtcblx0XHRcdFx0XHR0aGlzLnVwZGF0ZUVkaXRNb2RlbENvbnRleHQoc0VkaXRFbmFibGVCaW5kaW5nLCBvVmlldywgb1Jvb3RDb250ZXh0LCBcInJvb3RFZGl0RW5hYmxlZFwiLCBvSW50ZXJuYWxNb2RlbENvbnRleHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdHVwZGF0ZUVkaXRNb2RlbENvbnRleHQ6IGZ1bmN0aW9uIChcblx0XHRzQmluZGluZ0V4cHJlc3Npb246IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHRvVmlldzogVmlldyxcblx0XHRvUm9vdENvbnRleHQ6IENvbnRleHQsXG5cdFx0c1Byb3BlcnR5OiBzdHJpbmcsXG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dFxuXHQpOiB2b2lkIHtcblx0XHRpZiAoc0JpbmRpbmdFeHByZXNzaW9uKSB7XG5cdFx0XHRjb25zdCBvSGlkZGVuRWxlbWVudCA9IG5ldyBBbnlFbGVtZW50KHsgYW55VGV4dDogc0JpbmRpbmdFeHByZXNzaW9uIH0pO1xuXHRcdFx0b0hpZGRlbkVsZW1lbnQuc2V0QmluZGluZ0NvbnRleHQobnVsbCk7XG5cdFx0XHRvVmlldy5hZGREZXBlbmRlbnQob0hpZGRlbkVsZW1lbnQpO1xuXHRcdFx0b0hpZGRlbkVsZW1lbnQuZ2V0QmluZGluZyhcImFueVRleHRcIik7XG5cdFx0XHRjb25zdCBvQ29udGV4dCA9IG9IaWRkZW5FbGVtZW50XG5cdFx0XHRcdC5nZXRNb2RlbCgpXG5cdFx0XHRcdD8uYmluZENvbnRleHQob1Jvb3RDb250ZXh0LmdldFBhdGgoKSwgb1Jvb3RDb250ZXh0LCB7ICQkZ3JvdXBJZDogXCIkYXV0by5IZXJvZXNcIiB9KVxuXHRcdFx0XHQ/LmdldEJvdW5kQ29udGV4dCgpO1xuXHRcdFx0b0hpZGRlbkVsZW1lbnQuc2V0QmluZGluZ0NvbnRleHQob0NvbnRleHQpO1xuXHRcdFx0b0hpZGRlbkVsZW1lbnQ/LmdldEJpbmRpbmcoXCJhbnlUZXh0XCIpPy5hdHRhY2hDaGFuZ2UoKG9FdmVudDogRXZlbnQ8e30sIFByb3BlcnR5QmluZGluZz4pID0+IHtcblx0XHRcdFx0Y29uc3Qgb05ld1ZhbHVlID0gb0V2ZW50LmdldFNvdXJjZSgpLmdldEV4dGVybmFsVmFsdWUoKTtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KHNQcm9wZXJ0eSwgb05ld1ZhbHVlKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblxuXHRfc2V0QWN0aW9uRW5hYmxlbWVudEZvclRhYmxlOiBmdW5jdGlvbiAoXG5cdFx0b1NlbGVjdGVkQ29udGV4dDogQ29udGV4dCB8IHVuZGVmaW5lZCxcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ6IEludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdHNBY3Rpb246IHN0cmluZyxcblx0XHRzUHJvcGVydHk6IHN0cmluZyxcblx0XHRhUmVxdWVzdFByb21pc2VzOiBQcm9taXNlPF9SZXF1ZXN0ZWRQcm9wZXJ0eT5bXSxcblx0XHRmb3JDb250ZXh0TWVudSA9IGZhbHNlXG5cdCk6IFByb21pc2U8X1JlcXVlc3RlZFByb3BlcnR5PltdIHtcblx0XHQvLyBSZXRyaWV2ZSBwcmV2aW91c2x5IGNoZWNrZWQgY29udGV4dHMgaW4gY2FzZSBvZiAhZm9yQ29udGV4dE1lbnVcblx0XHRjb25zdCBzRW5hYmxlbWVudEZpZWxkTmFtZSA9IGZvckNvbnRleHRNZW51ID8gXCJiRW5hYmxlZEZvckNvbnRleHRNZW51XCIgOiBcImJFbmFibGVkXCIsXG5cdFx0XHRhQXBwbGljYWJsZTogW0NvbnRleHQgfCB1bmRlZmluZWRdID0gb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KGBkeW5hbWljQWN0aW9ucy8ke3NBY3Rpb259L2FBcHBsaWNhYmxlYCkgfHwgW10sXG5cdFx0XHRhTm90QXBwbGljYWJsZTogW0NvbnRleHQgfCB1bmRlZmluZWRdID0gb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KGBkeW5hbWljQWN0aW9ucy8ke3NBY3Rpb259L2FOb3RBcHBsaWNhYmxlYCkgfHwgW107XG5cdFx0bGV0IGJBY3Rpb25FbmFibGVkOiBib29sZWFuID0gb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KGBkeW5hbWljQWN0aW9ucy8ke3NBY3Rpb259LyR7c0VuYWJsZW1lbnRGaWVsZE5hbWV9YCkgfHwgZmFsc2U7XG5cblx0XHRpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn1gLCB7XG5cdFx0XHRcdGJFbmFibGVkOiBmYWxzZSxcblx0XHRcdFx0YUFwcGxpY2FibGU6IFtdLFxuXHRcdFx0XHRhTm90QXBwbGljYWJsZTogW11cblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn1gLCB7XG5cdFx0XHRcdC8vIERvIG5vdCBjaGFuZ2UgZW5hYmxlZCwgYUFwcGxpY2FibGUgYW5kIGFOb3RBcHBsaWNhYmxlIHByb3BlcnR5IGluIGNhc2Ugb2YgY29udGV4dCBtZW51IGNhbGN1bGF0aW9uXG5cdFx0XHRcdC8vIGluIGNhc2Ugb2YgY29udGV4dCBtZW51LCBvbmx5IHRoZSBjbGlja2VkIGNvbnRleHQgZ29lcyBpbnRvIHRoZSBwcm9jZXNzaW5nIC0gb3RoZXIgc2VsZWN0ZWQgY29udGV4dHMgbXVzdCBiZSBrZXB0IGluIHRoZSBtb2RlbFxuXHRcdFx0XHRiRW5hYmxlZDogb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KGBkeW5hbWljQWN0aW9ucy8ke3NBY3Rpb259L2JFbmFibGVkYCksXG5cdFx0XHRcdGFBcHBsaWNhYmxlOiBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn0vYUFwcGxpY2FibGVgKSxcblx0XHRcdFx0YU5vdEFwcGxpY2FibGU6IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufS9hTm90QXBwbGljYWJsZWApLFxuXHRcdFx0XHRiRW5hYmxlZEZvckNvbnRleHRNZW51OiBmYWxzZSxcblx0XHRcdFx0YUFwcGxpY2FibGVGb3JDb250ZXh0TWVudTogW10sXG5cdFx0XHRcdGFOb3RBcHBsaWNhYmxlRm9yQ29udGV4dE1lbnU6IFtdXG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0Ly8gTm90ZSB0aGF0IG5vbiBkeW5hbWljIGFjdGlvbnMgYXJlIG5vdCBwcm9jZXNzZWQgaGVyZS4gVGhleSBhcmUgZW5hYmxlZCBiZWNhdXNlXG5cdFx0Ly8gb25lIG9yIG1vcmUgYXJlIHNlbGVjdGVkIGFuZCB0aGUgc2Vjb25kIHBhcnQgb2YgdGhlIGNvbmRpdGlvbiBpbiB0aGUgdGVtcGxhdGluZ1xuXHRcdC8vIGlzIHRoZW4gdW5kZWZpbmVkIGFuZCB0aHVzIHRoZSBidXR0b24gdGFrZXMgdGhlIGRlZmF1bHQgZW5hYmxpbmcsIHdoaWNoIGlzIHRydWUhXG5cdFx0Y29uc3Qgc0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aCA9IGAke29JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQYXRoKCl9L2R5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn0vJHtzRW5hYmxlbWVudEZpZWxkTmFtZX1gO1xuXG5cdFx0aWYgKHR5cGVvZiBzUHJvcGVydHkgPT09IFwib2JqZWN0XCIgJiYgc1Byb3BlcnR5ICE9PSBudWxsICYmIHNQcm9wZXJ0eSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAob1NlbGVjdGVkQ29udGV4dCkge1xuXHRcdFx0XHRjb25zdCBvQ29udGV4dERhdGEgPSBvU2VsZWN0ZWRDb250ZXh0LmdldE9iamVjdCgpIGFzIFJlY29yZDxzdHJpbmcsIFByaW1pdGl2ZVR5cGU+O1xuXHRcdFx0XHRjb25zdCBvVHJhbnNmb3JtZWRCaW5kaW5nID0gdHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0XHRcdFx0c1Byb3BlcnR5LFxuXHRcdFx0XHRcdFwiUGF0aEluTW9kZWxcIixcblx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1mdW5jXG5cdFx0XHRcdFx0ZnVuY3Rpb24gKG9CaW5kaW5nRXhwcmVzc2lvbjogUGF0aEluTW9kZWxFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb0NvbnRleHREYXRhID8gY29uc3RhbnQob0NvbnRleHREYXRhW29CaW5kaW5nRXhwcmVzc2lvbi5wYXRoXSkgOiBjb25zdGFudChmYWxzZSk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnN0IHNSZXN1bHQgPSBjb21waWxlRXhwcmVzc2lvbihvVHJhbnNmb3JtZWRCaW5kaW5nKTtcblx0XHRcdFx0YkFjdGlvbkVuYWJsZWQgPSBiQWN0aW9uRW5hYmxlZCB8fCBzUmVzdWx0ID09PSBcInRydWVcIjtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LmdldE1vZGVsKCkuc2V0UHJvcGVydHkoc0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aCwgYkFjdGlvbkVuYWJsZWQpO1xuXHRcdFx0XHQoc1Jlc3VsdCA9PT0gXCJ0cnVlXCIgPyBhQXBwbGljYWJsZSA6IGFOb3RBcHBsaWNhYmxlKS5wdXNoKG9TZWxlY3RlZENvbnRleHQpO1xuXHRcdFx0fVxuXHRcdFx0Q29tbW9uVXRpbHMuc2V0RHluYW1pY0FjdGlvbkNvbnRleHRzKG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgc0FjdGlvbiwgYUFwcGxpY2FibGUsIGFOb3RBcHBsaWNhYmxlLCBmb3JDb250ZXh0TWVudSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IG9Db250ZXh0RGF0YSA9IG9TZWxlY3RlZENvbnRleHQ/LmdldE9iamVjdCgpIGFzIFJlY29yZDxzdHJpbmcsIFByaW1pdGl2ZVR5cGU+O1xuXHRcdFx0aWYgKHNQcm9wZXJ0eSA9PT0gbnVsbCAmJiAhIW9Db250ZXh0RGF0YVtgIyR7c0FjdGlvbn1gXSkge1xuXHRcdFx0XHQvL2xvb2sgZm9yIGFjdGlvbiBhZHZlcnRpc2VtZW50IGlmIHByZXNlbnQgYW5kIGl0cyB2YWx1ZSBpcyBub3QgbnVsbFxuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0TW9kZWwoKS5zZXRQcm9wZXJ0eShzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoLCB0cnVlKTtcblx0XHRcdH0gZWxzZSBpZiAob1NlbGVjdGVkQ29udGV4dCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdC8vIENvbGxlY3QgcHJvbWlzZXMgdG8gcmV0cmlldmUgc2luZ2xldG9uIG9yIG5vcm1hbCBwcm9wZXJ0eSB2YWx1ZSBhc3luY2hyb25vdXNseVxuXHRcdFx0XHRhUmVxdWVzdFByb21pc2VzLnB1c2goQ29tbW9uVXRpbHMucmVxdWVzdFByb3BlcnR5KG9TZWxlY3RlZENvbnRleHQsIHNBY3Rpb24sIHNQcm9wZXJ0eSwgc0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gYVJlcXVlc3RQcm9taXNlcztcblx0fSxcblxuXHQvKipcblx0ICogQ2hlY2sgaWYgYWN0aW9uIGlzIGNyaXRpY2FsLlxuXHQgKlxuXHQgKiBAcGFyYW0gbWV0YU1vZGVsIE1ldGFNb2RlbFxuXHQgKiBAcGFyYW0gcGF0aCBQYXRoIHRvIHRoZSBhY3Rpb25cblx0ICogQHBhcmFtIGNvbnRleHRzIENvbnRleHRzIGluIGNhc2Ugb2YgYm91bmQgYWN0aW9ucy5cblx0ICogQHJldHVybnMgQm9vbGVhbiBpbmRpY2F0aW5nIGFjdGlvbiBpcyBjcml0aWNhbFxuXHQgKi9cblx0Z2V0SXNBY3Rpb25Dcml0aWNhbDogYXN5bmMgZnVuY3Rpb24gKG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsIHBhdGg6IHN0cmluZywgY29udGV4dHM6IENvbnRleHRbXSA9IFtdKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0Ly8gZGVmYXVsdCBpcyB0cnVlLlxuXHRcdGxldCBpc0FjdGlvbkNyaXRpY2FsVmFsdWU6IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+ID0gdHJ1ZTtcblx0XHRjb25zdCBjb252ZXJ0ZWRUeXBlcyA9IGNvbnZlcnRUeXBlcyhtZXRhTW9kZWwpO1xuXHRcdGNvbnN0IGFjdGlvblRhcmdldFJlc29sdXRpb24gPSBjb252ZXJ0ZWRUeXBlcy5yZXNvbHZlUGF0aDxFZG1BY3Rpb24+KHBhdGgpO1xuXHRcdGNvbnN0IGFjdGlvblRhcmdldCA9IGFjdGlvblRhcmdldFJlc29sdXRpb24udGFyZ2V0O1xuXHRcdGlmICghYWN0aW9uVGFyZ2V0KSB7XG5cdFx0XHRyZXR1cm4gaXNBY3Rpb25Dcml0aWNhbFZhbHVlO1xuXHRcdH1cblxuXHRcdGNvbnN0IGlzQWN0aW9uQ3JpdGljYWxCaW5kaW5nRXhwID0gZ2V0SXNBY3Rpb25Dcml0aWNhbEV4cHJlc3Npb24oYWN0aW9uVGFyZ2V0LCBjb252ZXJ0ZWRUeXBlcyk7XG5cblx0XHRpZiAoaXNDb25zdGFudChpc0FjdGlvbkNyaXRpY2FsQmluZGluZ0V4cCkpIHtcblx0XHRcdC8vIENvbnN0YW50IGV4cHJlc3Npb24gcmVzb2x2ZXMgdG8gXCJ0cnVlXCIgb3IgXCJmYWxzZVwiLiBCdXQsIHdlIG5lZWQgYm9vbGVhbi5cblx0XHRcdGlzQWN0aW9uQ3JpdGljYWxWYWx1ZSA9IGNvbXBpbGVDb25zdGFudChpc0FjdGlvbkNyaXRpY2FsQmluZGluZ0V4cCwgZmFsc2UsIHVuZGVmaW5lZCwgdHJ1ZSkgYXMgYm9vbGVhbjtcblx0XHR9IGVsc2UgaWYgKGNvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdC8vIFdlIGV2YWx1YXRlIHRoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbiB2aWEgYSBVSTUgbWFuYWdlZCBvYmplY3QgaW5zdGFuY2UuXG5cdFx0XHRpc0FjdGlvbkNyaXRpY2FsVmFsdWUgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdC8vIENyZWF0aW5nIEJpbmRpbmcgdG8gcmVzb2x2ZVxuXHRcdFx0XHRcdGNvbnN0IGFueU9iamVjdCA9IG5ldyBBbnkoeyBhbnlCb29sZWFuOiBjb21waWxlRXhwcmVzc2lvbihpc0FjdGlvbkNyaXRpY2FsQmluZGluZ0V4cCkgfSk7XG5cdFx0XHRcdFx0YW55T2JqZWN0LnNldE1vZGVsKGNvbnRleHRzWzBdLmdldE1vZGVsKCkpO1xuXG5cdFx0XHRcdFx0Ly8gQXR0YWNoaW5nIGNoYW5nZSBldmVudHNcblx0XHRcdFx0XHRjb25zdCBib29sZWFuQmluZGluZyA9IGFueU9iamVjdC5nZXRCaW5kaW5nKFwiYW55Qm9vbGVhblwiKSBhcyBQcm9wZXJ0eUJpbmRpbmc7XG5cdFx0XHRcdFx0Y29uc3QgZm5DaGFuZ2UgPSBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRcdFx0XHRjb25zdCB2YWx1ZUV4dCA9IGJvb2xlYW5CaW5kaW5nLmdldEV4dGVybmFsVmFsdWUoKTtcblx0XHRcdFx0XHRcdGFueU9iamVjdC5kZXN0cm95KCk7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKHZhbHVlRXh0KTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGJvb2xlYW5CaW5kaW5nLmF0dGFjaEV2ZW50T25jZShcImNoYW5nZVwiLCBmbkNoYW5nZSk7XG5cblx0XHRcdFx0XHQvLyBzZXR0aW5nIGJpbmRpbmcgY29udGV4dCB0byB0cmlnZ2VyIHRoZSBiaW5kaW5nIHJlc29sdXRpb25cblx0XHRcdFx0XHRhbnlPYmplY3Quc2V0QmluZGluZ0NvbnRleHQoY29udGV4dHNbMF0pO1xuXHRcdFx0XHR9IGNhdGNoIChlcnI6IHVua25vd24pIHtcblx0XHRcdFx0XHQvLyBlcnJvciB3aGlsZSBjcmVhdGluZyBvciByZXNvbHZpbmcgdGhlIGJpbmRpbmdcblx0XHRcdFx0XHRjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuXHRcdFx0XHRcdExvZy5lcnJvcihgRkUgOiBBY3Rpb25zIDogRXJyb3Igd2hpbGUgcmVzb2x2aW5nIElzQWN0aW9uQ3JpdGljYWwgZm9yICR7cGF0aH0gOiAke21lc3NhZ2V9YCk7XG5cdFx0XHRcdFx0Ly8gT24gdGhlIHNhZmUgc2lkZSwgd2Ugc2hhbGwgcmV0dXJuIGFjdGlvbiBpcyBjcml0aWNhbCBpZiB2YWx1ZSBjb3VsZG4ndCBiZSBkZXRlcm1pbmVkLlxuXHRcdFx0XHRcdHJlc29sdmUodHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiBpc0FjdGlvbkNyaXRpY2FsVmFsdWU7XG5cdH1cbn07XG5leHBvcnQgZGVmYXVsdCBBY3Rpb25SdW50aW1lO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7O0VBMkNBLE1BQU1BLGFBQWEsR0FBRztJQUNyQjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0lBQ0NDLDZCQUE2QixFQUFFLFVBQVVDLGlCQUFrRixFQUFRO01BQ2xJQyxTQUFTLENBQUNDLFdBQVcsQ0FDcEJGLGlCQUFpQixDQUFDRyxHQUFHLENBQUVDLGdCQUFnQixJQUFLO1FBQzNDLE1BQU1DLE9BQU8sR0FBR0QsZ0JBQWdCLENBQUNFLG1CQUFtQixDQUFDQyxLQUFLLENBQUNDLFVBQVUsQ0FDcEVKLGdCQUFnQixDQUFDRSxtQkFBbUIsQ0FBQ0csWUFBWSxHQUFHLE9BQU8sR0FBRyxPQUFPLENBQ3JFO1FBQ0QsT0FBTyxJQUFJQyxPQUFPLENBQUM7VUFDbEJDLE9BQU8s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
|
|
@@ -147,10 +147,14 @@ const ActionRuntime = {
|
|
|
147
147
|
for (const sAction in oActionOperationAvailableMap) {
|
|
148
148
|
let aRequestPromises: Promise<_RequestedProperty>[] = [];
|
|
149
149
|
oInternalModelContext.setProperty(sAction, false);
|
|
150
|
-
if (
|
|
150
|
+
if (sControl === "table") {
|
|
151
151
|
oInternalModelContext.setProperty(`dynamicActions/${sAction}/aApplicable`, []);
|
|
152
152
|
oInternalModelContext.setProperty(`dynamicActions/${sAction}/aNotApplicable`, []);
|
|
153
|
-
|
|
153
|
+
if (forContextMenu) {
|
|
154
|
+
oInternalModelContext.setProperty(`dynamicActions/${sAction}/bEnabledForContextMenu`, false);
|
|
155
|
+
} else {
|
|
156
|
+
oInternalModelContext.setProperty(`dynamicActions/${sAction}/bEnabled`, false);
|
|
157
|
+
}
|
|
154
158
|
}
|
|
155
159
|
const sProperty = oActionOperationAvailableMap[sAction];
|
|
156
160
|
for (const element of aSelectedContexts) {
|
|
@@ -7,7 +7,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/AppStateHandler", "sap/fe/core/contr
|
|
|
7
7
|
|
|
8
8
|
var _dec, _dec2, _class, _class2, _descriptor, _class3;
|
|
9
9
|
var deleteModelCacheData = MetaModelConverter.deleteModelCacheData;
|
|
10
|
-
var cleanPageConfigurationChanges = ChangePageConfiguration.cleanPageConfigurationChanges;
|
|
11
10
|
var changeConfiguration = ChangePageConfiguration.changeConfiguration;
|
|
12
11
|
var implementInterface = ClassSupport.implementInterface;
|
|
13
12
|
var defineUI5Class = ClassSupport.defineUI5Class;
|
|
@@ -146,6 +145,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/AppStateHandler", "sap/fe/core/contr
|
|
|
146
145
|
_this.startupMode = StartupMode.Normal;
|
|
147
146
|
_this._startedServices = [];
|
|
148
147
|
_this.isExiting = false;
|
|
148
|
+
_this.pageConfigurationChanges = {};
|
|
149
149
|
return _this;
|
|
150
150
|
}
|
|
151
151
|
var _proto = AppComponent.prototype;
|
|
@@ -180,7 +180,14 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/AppStateHandler", "sap/fe/core/contr
|
|
|
180
180
|
* @public
|
|
181
181
|
*/;
|
|
182
182
|
_proto.changePageConfiguration = function changePageConfiguration(pageId, path, value) {
|
|
183
|
-
changeConfiguration(this.getManifest(), pageId, path, value, true);
|
|
183
|
+
changeConfiguration(this.getManifest(), pageId, path, value, true, this);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* Cleans all registered page configuration changes.
|
|
188
|
+
*/;
|
|
189
|
+
_proto.cleanPageConfigurationChanges = function cleanPageConfigurationChanges() {
|
|
190
|
+
this.pageConfigurationChanges = {};
|
|
184
191
|
}
|
|
185
192
|
|
|
186
193
|
/**
|
|
@@ -380,7 +387,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/AppStateHandler", "sap/fe/core/contr
|
|
|
380
387
|
delete this._oRouterProxy;
|
|
381
388
|
deleteModelCacheData(this.getMetaModel());
|
|
382
389
|
this.getModel("ui").destroy();
|
|
383
|
-
cleanPageConfigurationChanges();
|
|
390
|
+
this.cleanPageConfigurationChanges();
|
|
384
391
|
};
|
|
385
392
|
_proto.getMetaModel = function getMetaModel() {
|
|
386
393
|
return this.getModel().getMetaModel();
|
|
@@ -514,4 +521,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/AppStateHandler", "sap/fe/core/contr
|
|
|
514
521
|
})), _class2)) || _class);
|
|
515
522
|
return AppComponent;
|
|
516
523
|
}, false);
|
|
517
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdGFydHVwTW9kZSIsImxpYnJhcnkiLCJOQVZDT05GIiwiRkNMIiwiVklFV05BTUUiLCJWSUVXTkFNRV9DT01QQVRJQklMSVRZIiwiUk9VVEVSQ0xBU1MiLCJOQVZDT05UQUlORVIiLCJfbVJvdXRlciIsIlJvdXRlciIsIkFwcENvbXBvbmVudCIsImRlZmluZVVJNUNsYXNzIiwiY29uZmlnIiwiZnVsbFdpZHRoIiwibWFuaWZlc3QiLCJzZXJ2aWNlcyIsInJlc291cmNlTW9kZWwiLCJmYWN0b3J5TmFtZSIsInN0YXJ0dXAiLCJzZXR0aW5ncyIsImJ1bmRsZXMiLCJtb2RlbE5hbWUiLCJyb3V0aW5nU2VydmljZSIsInNoZWxsU2VydmljZXMiLCJTaGVsbFVJU2VydmljZSIsIm5hdmlnYXRpb25TZXJ2aWNlIiwiZW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJzaWRlRWZmZWN0c1NlcnZpY2UiLCJhc3luY0NvbXBvbmVudFNlcnZpY2UiLCJjb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2UiLCJjb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlIiwidGVsZW1ldHJ5U2VydmljZSIsInZhbHVlSGVscEhpc3RvcnlTZXJ2aWNlIiwiQ29sbGFib3JhdGl2ZURyYWZ0U2VydmljZSIsIkNvbnRleHRTaGFyaW5nU2VydmljZSIsInJvb3RWaWV3Iiwidmlld05hbWUiLCJ0eXBlIiwiYXN5bmMiLCJpZCIsInJvdXRpbmciLCJjb250cm9sSWQiLCJyb3V0ZXJDbGFzcyIsInZpZXdUeXBlIiwiY29udHJvbEFnZ3JlZ2F0aW9uIiwiY29udGFpbmVyT3B0aW9ucyIsInByb3BhZ2F0ZU1vZGVsIiwiZGVzaWdudGltZSIsImltcGxlbWVudEludGVyZmFjZSIsInN0YXJ0dXBNb2RlIiwiTm9ybWFsIiwiX3N0YXJ0ZWRTZXJ2aWNlcyIsImlzRXhpdGluZyIsIl9pc0ZjbEVuYWJsZWQiLCJvTWFuaWZlc3RVSTUiLCJnZXRNYW5pZmVzdEVudHJ5IiwiaW5pdGlhbGl6ZUZlYXR1cmVUb2dnbGVzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJjaGFuZ2VQYWdlQ29uZmlndXJhdGlvbiIsInBhZ2VJZCIsInBhdGgiLCJ2YWx1ZSIsImNoYW5nZUNvbmZpZ3VyYXRpb24iLCJnZXRNYW5pZmVzdCIsImdldFJvdXRlclByb3h5IiwiX29Sb3V0ZXJQcm94eSIsImdldEFwcFN0YXRlSGFuZGxlciIsIl9vQXBwU3RhdGVIYW5kbGVyIiwiZ2V0Um9vdFZpZXdDb250cm9sbGVyIiwiZ2V0Um9vdENvbnRyb2wiLCJnZXRDb250cm9sbGVyIiwiZ2V0Um9vdENvbnRhaW5lciIsImdldENvbnRlbnQiLCJnZXRTdGFydHVwTW9kZSIsInNldFN0YXJ0dXBNb2RlQ3JlYXRlIiwiQ3JlYXRlIiwic2V0U3RhcnR1cE1vZGVBdXRvQ3JlYXRlIiwiQXV0b0NyZWF0ZSIsInNldFN0YXJ0dXBNb2RlRGVlcGxpbmsiLCJEZWVwbGluayIsImluaXQiLCJfaW5pdGlhbGl6ZWRLZWVwZXIiLCJQcm9taXNlS2VlcGVyIiwiaW5pdGlhbGl6ZWQiLCJwcm9taXNlIiwidWlNb2RlbCIsIkpTT05Nb2RlbCIsImVkaXRNb2RlIiwiRWRpdE1vZGUiLCJEaXNwbGF5IiwiaXNFZGl0YWJsZSIsImRyYWZ0U3RhdHVzIiwiRHJhZnRTdGF0dXMiLCJDbGVhciIsImJ1c3kiLCJidXN5TG9jYWwiLCJwYWdlcyIsIm9JbnRlcm5hbE1vZGVsIiwic2V0RGVmYXVsdEJpbmRpbmdNb2RlIiwiTW9kZWxIZWxwZXIiLCJlbmhhbmNlVWlKU09OTW9kZWwiLCJlbmhhbmNlSW50ZXJuYWxKU09OTW9kZWwiLCJzZXRNb2RlbCIsImJJbml0aWFsaXplUm91dGluZyIsInVuZGVmaW5lZCIsIlJvdXRlclByb3h5IiwiQXBwU3RhdGVIYW5kbGVyIiwiX29EaWFnbm9zdGljcyIsIkRpYWdub3N0aWNzIiwib01vZGVsIiwiZ2V0TW9kZWwiLCJpc0EiLCJlbmhhbmNlT0RhdGFNb2RlbCIsImVudGl0eUNvbnRhaW5lciIsImdldE1ldGFNb2RlbCIsInJlcXVlc3RPYmplY3QiLCJhcHAiLCJkaXNhYmxlQ29sbGFib3JhdGlvbkRyYWZ0IiwiY2hlY2tSb3V0aW5nQ29uZmlndXJhdGlvbiIsImluc3RhbmNlTWFwIiwiZ2V0SWQiLCJMb2ciLCJpbmZvIiwiaW5jbHVkZXMiLCJFcnJvciIsIm9uU2VydmljZXNTdGFydGVkIiwiYWxsU2VydmljZXMiLCJmaW5hbGl6ZWRSb3V0aW5nSW5pdGlhbGl6YXRpb24iLCJ0aGVuIiwiYXR0YWNoUm91dGVNYXRjaGVycyIsImdldFJvdXRlciIsImluaXRpYWxpemUiLCJnZXRWYWx1ZUhlbHBIaXN0b3J5U2VydmljZSIsInJlZ2lzdGVyU2hlbGxIb29rIiwiY2F0Y2giLCJlcnJvciIsIm9SZXNvdXJjZUJ1bmRsZSIsIkxpYnJhcnkiLCJnZXRSZXNvdXJjZUJ1bmRsZUZvciIsImRpc3BsYXlFcnJvclBhZ2UiLCJnZXRUZXh0IiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsIm1lc3NhZ2UiLCJnZXRSb3V0aW5nU2VydmljZSIsImluaXRpYWxpemVSb3V0aW5nIiwiYXR0YWNoQWZ0ZXJJbml0IiwiZXJyIiwidG9TdHJpbmciLCJleGl0IiwiZGVzdHJveSIsImRlbGV0ZU1vZGVsQ2FjaGVEYXRhIiwiY2xlYW5QYWdlQ29uZmlndXJhdGlvbkNoYW5nZXMiLCJnZXREaWFnbm9zdGljcyIsImJTdXBwcmVzc0ludmFsaWRhdGUiLCJ3aW5kb3ciLCJfcm91dGluZyIsImUiLCJvTWFpbk1vZGVsIiwib01vZGVscyIsIm9IZWFkZXJzIiwib1JlcXVlc3RvciIsIk9iamVjdCIsImFzc2lnbiIsIm1IZWFkZXJzIiwiYmVmb3JlRXhpdCIsImdldFNoZWxsU2VydmljZXMiLCJnZXROYXZpZ2F0aW9uU2VydmljZSIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsImdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiZ2V0Q29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlIiwiZ2V0Q29sbGFib3JhdGl2ZVRvb2xzU2VydmljZSIsImdldENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2UiLCJnZXRDb250ZXh0U2hhcmluZ1NlcnZpY2UiLCJnZXRUZWxlbWV0cnlTZXJ2aWNlIiwiZ2V0U3RhcnR1cFBhcmFtZXRlcnMiLCJvQ29tcG9uZW50RGF0YSIsImdldENvbXBvbmVudERhdGEiLCJzdGFydHVwUGFyYW1ldGVycyIsInJlc3RvcmUiLCJzdGFydGVkU2VydmljZSIsIm9uUmVzdG9yZSIsInZpZXdTdGF0ZSIsInN1c3BlbmQiLCJvblN1c3BlbmQiLCJuYXZpZ2F0ZUJhc2VkT25TdGFydHVwUGFyYW1ldGVyIiwiQnVzeUxvY2tlciIsImlzTG9ja2VkIiwiX21hbmFnZURlZXBMaW5rU3RhcnR1cCIsImV4Y2VwdGlvbiIsInVubG9jayIsImlzQ29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlRW5hYmxlZCIsIlVJQ29tcG9uZW50Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJBcHBDb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSBGbGV4aWJsZUNvbHVtbkxheW91dCBmcm9tIFwic2FwL2YvRmxleGlibGVDb2x1bW5MYXlvdXRcIjtcbmltcG9ydCBBcHBTdGF0ZUhhbmRsZXIgZnJvbSBcInNhcC9mZS9jb3JlL0FwcFN0YXRlSGFuZGxlclwiO1xuaW1wb3J0IFJvdXRlclByb3h5IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9yb3V0aW5nL1JvdXRlclByb3h5XCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgaW1wbGVtZW50SW50ZXJmYWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBQcm9taXNlS2VlcGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Byb21pc2VLZWVwZXJcIjtcbmltcG9ydCBsaWJyYXJ5IGZyb20gXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgeyBjaGFuZ2VDb25maWd1cmF0aW9uLCBjbGVhblBhZ2VDb25maWd1cmF0aW9uQ2hhbmdlcyB9IGZyb20gXCJzYXAvZmUvY29yZS9tYW5pZmVzdE1lcmdlci9DaGFuZ2VQYWdlQ29uZmlndXJhdGlvblwiO1xuaW1wb3J0IHR5cGUgUm9vdFZpZXdCYXNlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvcm9vdFZpZXcvUm9vdFZpZXdCYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgeyBDb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvQ29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgeyBDb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL0NvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSB7IENvbnRleHRTaGFyaW5nU2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9Db250ZXh0U2hhcmluZ1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSB7IEVudmlyb25tZW50Q2FwYWJpbGl0aWVzU2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9FbnZpcm9ubWVudFNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSB7IE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL05hdmlnYXRpb25TZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgeyBSb3V0aW5nU2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9Sb3V0aW5nU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgSVNoZWxsU2VydmljZXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2hlbGxTZXJ2aWNlc0ZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgU2lkZUVmZmVjdHNTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1NpZGVFZmZlY3RzU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgVGVsZW1ldHJ5U2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9UZWxlbWV0cnlTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgeyBDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL2NvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgRGlhZ25vc3RpY3MgZnJvbSBcInNhcC9mZS9jb3JlL3N1cHBvcnQvRGlhZ25vc3RpY3NcIjtcbmltcG9ydCB0eXBlIE5hdkNvbnRhaW5lciBmcm9tIFwic2FwL20vTmF2Q29udGFpbmVyXCI7XG5pbXBvcnQgUm91dGVyIGZyb20gXCJzYXAvbS9yb3V0aW5nL1JvdXRlclwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IHR5cGUgeyBNYW5pZmVzdENvbnRlbnQgfSBmcm9tIFwic2FwL3VpL2NvcmUvTWFuaWZlc3RcIjtcbmltcG9ydCBVSUNvbXBvbmVudCBmcm9tIFwic2FwL3VpL2NvcmUvVUlDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgSUFzeW5jQ29udGVudENyZWF0aW9uIH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgdHlwZSBTZXJ2aWNlIGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlL1NlcnZpY2VcIjtcbmltcG9ydCB0eXBlIE1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTW9kZWxcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCBCdXN5TG9ja2VyIGZyb20gXCIuL2NvbnRyb2xsZXJleHRlbnNpb25zL0J1c3lMb2NrZXJcIjtcbmltcG9ydCB7IGRlbGV0ZU1vZGVsQ2FjaGVEYXRhIH0gZnJvbSBcIi4vY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgVmFsdWVIZWxwSGlzdG9yeVNlcnZpY2UgfSBmcm9tIFwiLi9zZXJ2aWNlcy9WYWx1ZUhlbHBIaXN0b3J5U2VydmljZUZhY3RvcnlcIjtcblxuY29uc3QgU3RhcnR1cE1vZGUgPSBsaWJyYXJ5LlN0YXJ0dXBNb2RlO1xuY29uc3QgTkFWQ09ORiA9IHtcblx0RkNMOiB7XG5cdFx0VklFV05BTUU6IFwic2FwLmZlLmNvcmUucm9vdFZpZXcuRmNsXCIsXG5cdFx0VklFV05BTUVfQ09NUEFUSUJJTElUWTogXCJzYXAuZmUudGVtcGxhdGVzLlJvb3RDb250YWluZXIudmlldy5GY2xcIixcblx0XHRST1VURVJDTEFTUzogXCJzYXAuZi5yb3V0aW5nLlJvdXRlclwiXG5cdH0sXG5cdE5BVkNPTlRBSU5FUjoge1xuXHRcdFZJRVdOQU1FOiBcInNhcC5mZS5jb3JlLnJvb3RWaWV3Lk5hdkNvbnRhaW5lclwiLFxuXHRcdFZJRVdOQU1FX0NPTVBBVElCSUxJVFk6IFwic2FwLmZlLnRlbXBsYXRlcy5Sb290Q29udGFpbmVyLnZpZXcuTmF2Q29udGFpbmVyXCIsXG5cdFx0Uk9VVEVSQ0xBU1M6IFwic2FwLm0ucm91dGluZy5Sb3V0ZXJcIlxuXHR9XG59O1xuXG5leHBvcnQgdHlwZSBDb21wb25lbnREYXRhID0ge1xuXHRzdGFydHVwUGFyYW1ldGVycz86IFN0YXJ0dXBQYXJhbWV0ZXJzO1xuXHQvL2ZlRW52aXJvbm1lbnQgaXMgb2JqZWN0IHdoaWNoIGlzIHJlY2VpdmVkIGFzIGEgcGFydCBvZiB0aGUgY29tcG9uZW50IGRhdGEgZm9yIE15IEluYm94IGFwcGxpY2F0aW9ucy5cblx0ZmVFbnZpcm9ubWVudD86IHtcblx0XHQvL1dpdGhpbiB0aGlzIG9iamVjdCB0aGV5IHBhc3MgYSBmdW5jdGlvbiBjYWxsZWQgZ2V0SW50ZW50KCkgd2hpY2ggcmV0dXJucyBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgc2VtYW50aWNPYmplY3QgYW5kIGFjdGlvbiBhcyBzZXBhcmF0ZSBwcm9wZXJ0eS12YWx1ZSBlbnRyaWVzIHRoYXQgYXJlIHRoZW4gdXNlZCB0byB1cGRhdGUgdGhlIHJlbGF0ZWQgYXBwcyBidXR0b24uXG5cdFx0Z2V0SW50ZW50OiBGdW5jdGlvbjtcblx0XHQvL1dpdGhpbiB0aGlzIG9iamVjdCB0aGV5IHBhc3MgYSBmdW5jdGlvbiBjYWxsZWQgZ2V0U2hhcmVDb250cm9sVmlzaWJpbGl0eSgpIHRoYXQgcmV0dXJucyBib29sZWFuIHZhbHVlcyh0cnVlIG9yIGZhbHNlKSB3aGljaCBkZXRlcm1pbmVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBzaGFyZSBidXR0b24uXG5cdFx0Z2V0U2hhcmVDb250cm9sVmlzaWJpbGl0eTogRnVuY3Rpb247XG5cdH07XG59O1xuLy8gS2VlcCBhIHJlZmVyZW5jZSBzbyBhcyB0byBrZWVwIHRoZSBpbXBvcnQgZGVzcGl0ZSBpdCBub3QgYmVpbmcgZGlyZWN0bHkgdXNlZFxuY29uc3QgX21Sb3V0ZXIgPSBSb3V0ZXI7XG5cbmV4cG9ydCB0eXBlIFN0YXJ0dXBQYXJhbWV0ZXJzID0ge1xuXHRwcmVmZXJyZWRNb2RlPzogc3RyaW5nW107XG59ICYgUmVjb3JkPHN0cmluZywgdW5rbm93bltdPjtcbi8qKlxuICogTWFpbiBjbGFzcyBmb3IgY29tcG9uZW50cyB1c2VkIGZvciBhbiBhcHBsaWNhdGlvbiBpbiBTQVAgRmlvcmkgZWxlbWVudHMuXG4gKlxuICogQXBwbGljYXRpb24gZGV2ZWxvcGVycyB1c2luZyB0aGUgdGVtcGxhdGVzIGFuZCBidWlsZGluZyBibG9ja3MgcHJvdmlkZWQgYnkgU0FQIEZpb3JpIGVsZW1lbnRzIHNob3VsZCBjcmVhdGUgdGhlaXIgYXBwcyBieSBleHRlbmRpbmcgdGhpcyBjb21wb25lbnQuXG4gKiBUaGlzIGVuc3VyZXMgdGhhdCBhbGwgdGhlIG5lY2Vzc2FyeSBzZXJ2aWNlcyB0aGF0IHlvdSBuZWVkIGZvciB0aGUgYnVpbGRpbmcgYmxvY2tzIGFuZCB0ZW1wbGF0ZXMgdG8gd29yayBwcm9wZXJseSBhcmUgc3RhcnRlZC5cbiAqXG4gKiBXaGVuIHlvdSB1c2Ugc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50IGFzIHRoZSBiYXNlIGNvbXBvbmVudCwgeW91IGFsc28gbmVlZCB0byB1c2UgYSByb290Vmlldy4gU0FQIEZpb3JpIGVsZW1lbnRzIHByb3ZpZGVzIHR3byBvcHRpb25zOiA8YnIvPlxuICogIC0gc2FwLmZlLmNvcmUucm9vdFZpZXcuTmF2Q29udGFpbmVyIHdoZW4gdXNpbmcgc2FwLm0ucm91dGluZy5Sb3V0ZXIgPGJyLz5cbiAqICAtIHNhcC5mZS5jb3JlLnJvb3RWaWV3LkZjbCB3aGVuIHVzaW5nIHNhcC5mLnJvdXRpbmcuUm91dGVyIChGQ0wgdXNlIGNhc2UpIDxici8+XG4gKlxuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQHB1YmxpY1xuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5BcHBDb21wb25lbnRcIiwge1xuXHRjb25maWc6IHtcblx0XHRmdWxsV2lkdGg6IHRydWVcblx0fSxcblx0bWFuaWZlc3Q6IHtcblx0XHRcInNhcC51aTVcIjoge1xuXHRcdFx0c2VydmljZXM6IHtcblx0XHRcdFx0cmVzb3VyY2VNb2RlbDoge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLlJlc291cmNlTW9kZWxTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCIsXG5cdFx0XHRcdFx0c2V0dGluZ3M6IHtcblx0XHRcdFx0XHRcdGJ1bmRsZXM6IFtcInNhcC5mZS5jb3JlLm1lc3NhZ2VidW5kbGVcIl0sXG5cdFx0XHRcdFx0XHRtb2RlbE5hbWU6IFwic2FwLmZlLmkxOG5cIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cm91dGluZ1NlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5Sb3V0aW5nU2VydmljZVwiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNoZWxsU2VydmljZXM6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5TaGVsbFNlcnZpY2VzXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0U2hlbGxVSVNlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAudXNoZWxsLnVpNXNlcnZpY2UuU2hlbGxVSVNlcnZpY2VcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRuYXZpZ2F0aW9uU2VydmljZToge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLk5hdmlnYXRpb25TZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0ZW52aXJvbm1lbnRDYXBhYmlsaXRpZXM6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5FbnZpcm9ubWVudFNlcnZpY2VcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRzaWRlRWZmZWN0c1NlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5TaWRlRWZmZWN0c1NlcnZpY2VcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhc3luY0NvbXBvbmVudFNlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5Bc3luY0NvbXBvbmVudFNlcnZpY2VcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5Db2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2VcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlOiB7XG5cdFx0XHRcdFx0ZmFjdG9yeU5hbWU6IFwic2FwLmZlLmNvcmUuc2VydmljZXMuQ29sbGFib3JhdGl2ZVRvb2xzU2VydmljZVwiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRlbGVtZXRyeVNlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5UZWxlbWV0cnlTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0dmFsdWVIZWxwSGlzdG9yeVNlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5WYWx1ZUhlbHBIaXN0b3J5U2VydmljZVwiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5Db2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Q29udGV4dFNoYXJpbmdTZXJ2aWNlOiB7XG5cdFx0XHRcdFx0ZmFjdG9yeU5hbWU6IFwic2FwLmZlLmNvcmUuc2VydmljZXMuQ29udGV4dFNoYXJpbmdTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHJvb3RWaWV3OiB7XG5cdFx0XHRcdHZpZXdOYW1lOiBOQVZDT05GLk5BVkNPTlRBSU5FUi5WSUVXTkFNRSxcblx0XHRcdFx0dHlwZTogXCJYTUxcIixcblx0XHRcdFx0YXN5bmM6IHRydWUsXG5cdFx0XHRcdGlkOiBcImFwcFJvb3RWaWV3XCJcblx0XHRcdH0sXG5cdFx0XHRyb3V0aW5nOiB7XG5cdFx0XHRcdGNvbmZpZzoge1xuXHRcdFx0XHRcdGNvbnRyb2xJZDogXCJhcHBDb250ZW50XCIsXG5cdFx0XHRcdFx0cm91dGVyQ2xhc3M6IE5BVkNPTkYuTkFWQ09OVEFJTkVSLlJPVVRFUkNMQVNTLFxuXHRcdFx0XHRcdHZpZXdUeXBlOiBcIlhNTFwiLFxuXHRcdFx0XHRcdGNvbnRyb2xBZ2dyZWdhdGlvbjogXCJwYWdlc1wiLFxuXHRcdFx0XHRcdGFzeW5jOiB0cnVlLFxuXHRcdFx0XHRcdGNvbnRhaW5lck9wdGlvbnM6IHtcblx0XHRcdFx0XHRcdHByb3BhZ2F0ZU1vZGVsOiB0cnVlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRkZXNpZ250aW1lOiBcInNhcC9mZS9jb3JlL2Rlc2lnbnRpbWUvQXBwQ29tcG9uZW50LmRlc2lnbnRpbWVcIixcblxuXHRsaWJyYXJ5OiBcInNhcC5mZS5jb3JlXCJcbn0pXG5jbGFzcyBBcHBDb21wb25lbnQgZXh0ZW5kcyBVSUNvbXBvbmVudCBpbXBsZW1lbnRzIElBc3luY0NvbnRlbnRDcmVhdGlvbiB7XG5cdEBpbXBsZW1lbnRJbnRlcmZhY2UoXCJzYXAudWkuY29yZS5JQXN5bmNDb250ZW50Q3JlYXRpb25cIilcblx0X19pbXBsZW1lbnRzX19zYXBfdWlfY29yZV9JQXN5bmNDb250ZW50Q3JlYXRpb24gPSB0cnVlO1xuXG5cdHN0YXRpYyBpbnN0YW5jZU1hcDogUmVjb3JkPHN0cmluZywgQXBwQ29tcG9uZW50PiA9IHt9O1xuXG5cdHByaXZhdGUgX29Sb3V0ZXJQcm94eSE6IFJvdXRlclByb3h5O1xuXG5cdHByaXZhdGUgX29BcHBTdGF0ZUhhbmRsZXIhOiBBcHBTdGF0ZUhhbmRsZXI7XG5cblx0cHJpdmF0ZSBiSW5pdGlhbGl6ZVJvdXRpbmc/OiBib29sZWFuO1xuXG5cdHByaXZhdGUgX29EaWFnbm9zdGljcyE6IERpYWdub3N0aWNzO1xuXG5cdHByaXZhdGUgZW50aXR5Q29udGFpbmVyITogUHJvbWlzZTx2b2lkPjtcblxuXHRwcml2YXRlIHN0YXJ0dXBNb2RlOiBzdHJpbmcgPSBTdGFydHVwTW9kZS5Ob3JtYWw7XG5cblx0cHJpdmF0ZSBfc3RhcnRlZFNlcnZpY2VzOiBTZXJ2aWNlPHVua25vd24+W10gPSBbXTtcblxuXHRwdWJsaWMgaW5pdGlhbGl6ZWQhOiBQcm9taXNlPHZvaWQ+O1xuXG5cdHByaXZhdGUgX2luaXRpYWxpemVkS2VlcGVyITogUHJvbWlzZUtlZXBlcjx2b2lkPjtcblxuXHRwdWJsaWMgaXNFeGl0aW5nID0gZmFsc2U7XG5cblx0X2lzRmNsRW5hYmxlZCgpOiBib29sZWFuIHtcblx0XHRjb25zdCBvTWFuaWZlc3RVSTUgPSB0aGlzLmdldE1hbmlmZXN0RW50cnkoXCJzYXAudWk1XCIpO1xuXHRcdHJldHVybiBvTWFuaWZlc3RVSTU/LnJvdXRpbmc/LmNvbmZpZz8ucm91dGVyQ2xhc3MgPT09IE5BVkNPTkYuRkNMLlJPVVRFUkNMQVNTO1xuXHR9XG5cblx0LyoqXG5cdCAqIFByb3ZpZGVzIGEgaG9vayB0byBpbml0aWFsaXplIGZlYXR1cmUgdG9nZ2xlcy5cblx0ICpcblx0ICogVGhpcyBob29rIGlzIGJlaW5nIGNhbGxlZCBieSB0aGUgU0FQIEZpb3JpIGVsZW1lbnRzIEFwcENvbXBvbmVudCBhdCB0aGUgdGltZSBmZWF0dXJlIHRvZ2dsZXMgY2FuIGJlIGluaXRpYWxpemVkLlxuXHQgKiBUbyBjaGFuZ2UgcGFnZSBjb25maWd1cmF0aW9uIHVzZSB0aGUge0BsaW5rIHNhcC5mZS5jb3JlLkFwcENvbXBvbmVudCNjaGFuZ2VQYWdlQ29uZmlndXJhdGlvbn0gbWV0aG9kLlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aXRob3V0IGFueSB2YWx1ZSB0byBhbGxvdyBhc3luY2hyb25vdXMgcHJvY2Vzc2VzXG5cdCAqL1xuXHRhc3luYyBpbml0aWFsaXplRmVhdHVyZVRvZ2dsZXMoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Ly8gdGhpcyBtZXRob2QgY2FuIGJlIG92ZXJyaWRkZW4gYnkgYXBwbGljYXRpb25zXG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoYW5nZXMgdGhlIHBhZ2UgY29uZmlndXJhdGlvbiBvZiBTQVAgRmlvcmkgZWxlbWVudHMuXG5cdCAqXG5cdCAqIFRoaXMgbWV0aG9kIGVuYWJsZXMgeW91IHRvIGNoYW5nZSB0aGUgcGFnZSBjb25maWd1cmF0aW9uIG9mIFNBUCBGaW9yaSBlbGVtZW50cy5cblx0ICpcblx0ICogQHBhcmFtIHBhZ2VJZCBUaGUgSUQgb2YgdGhlIHBhZ2UgZm9yIHdoaWNoIHRoZSBjb25maWd1cmF0aW9uIGlzIHRvIGJlIGNoYW5nZWQuXG5cdCAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIGluIHRoZSBwYWdlIHNldHRpbmdzIGZvciB3aGljaCB0aGUgY29uZmlndXJhdGlvbiBpcyB0byBiZSBjaGFuZ2VkLlxuXHQgKiBAcGFyYW0gdmFsdWUgVGhlIG5ldyB2YWx1ZSBvZiB0aGUgY29uZmlndXJhdGlvbi4gVGhpcyBjb3VsZCBiZSBhIHBsYWluIHZhbHVlIGxpa2UgYSBzdHJpbmcsIG9yIGEgQm9vbGVhbiwgb3IgYSBzdHJ1Y3R1cmVkIG9iamVjdC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0Y2hhbmdlUGFnZUNvbmZpZ3VyYXRpb24ocGFnZUlkOiBzdHJpbmcsIHBhdGg6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkIHtcblx0XHRjaGFuZ2VDb25maWd1cmF0aW9uKHRoaXMuZ2V0TWFuaWZlc3QoKSwgcGFnZUlkLCBwYXRoLCB2YWx1ZSwgdHJ1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBSb3V0ZXJQcm94eS5cblx0ICpcblx0ICogQHJldHVybnMgQSBSZWZlcmVuY2UgdG8gdGhlIFJvdXRlclByb3h5XG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0Z2V0Um91dGVyUHJveHkoKTogUm91dGVyUHJveHkge1xuXHRcdHJldHVybiB0aGlzLl9vUm91dGVyUHJveHk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBBcHBTdGF0ZUhhbmRsZXIuXG5cdCAqXG5cdCAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBBcHBTdGF0ZUhhbmRsZXJcblx0ICogQGZpbmFsXG5cdCAqL1xuXHRnZXRBcHBTdGF0ZUhhbmRsZXIoKTogQXBwU3RhdGVIYW5kbGVyIHtcblx0XHRyZXR1cm4gdGhpcy5fb0FwcFN0YXRlSGFuZGxlcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYSByZWZlcmVuY2UgdG8gdGhlIG5hdi9GQ0wgQ29udHJvbGxlci5cblx0ICpcblx0ICogQHJldHVybnMgIEEgcmVmZXJlbmNlIHRvIHRoZSBGQ0wgQ29udHJvbGxlclxuXHQgKiBAZmluYWxcblx0ICovXG5cdGdldFJvb3RWaWV3Q29udHJvbGxlcigpOiBSb290Vmlld0Jhc2VDb250cm9sbGVyIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRSb290Q29udHJvbCgpLmdldENvbnRyb2xsZXIoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIE5hdkNvbnRhaW5lciBjb250cm9sIG9yIHRoZSBGQ0wgY29udHJvbC5cblx0ICpcblx0ICogQHJldHVybnMgIEEgcmVmZXJlbmNlIHRvIE5hdkNvbnRhaW5lciBjb250cm9sIG9yIHRoZSBGQ0wgY29udHJvbFxuXHQgKiBAZmluYWxcblx0ICovXG5cdGdldFJvb3RDb250YWluZXIoKTogTmF2Q29udGFpbmVyIHwgRmxleGlibGVDb2x1bW5MYXlvdXQge1xuXHRcdHJldHVybiB0aGlzLmdldFJvb3RDb250cm9sKCkuZ2V0Q29udGVudCgpWzBdIGFzIE5hdkNvbnRhaW5lciB8IEZsZXhpYmxlQ29sdW1uTGF5b3V0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgc3RhcnR1cCBtb2RlIG9mIHRoZSBhcHAuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFRoZSBzdGFydHVwIG1vZGVcblx0ICovXG5cdGdldFN0YXJ0dXBNb2RlKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuc3RhcnR1cE1vZGU7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IHRoZSBzdGFydHVwIG1vZGUgZm9yIHRoZSBhcHAgdG8gJ0NyZWF0ZScuXG5cdCAqXG5cdCAqL1xuXHRzZXRTdGFydHVwTW9kZUNyZWF0ZSgpOiB2b2lkIHtcblx0XHR0aGlzLnN0YXJ0dXBNb2RlID0gU3RhcnR1cE1vZGUuQ3JlYXRlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB0aGUgc3RhcnR1cCBtb2RlIGZvciB0aGUgYXBwIHRvICdBdXRvQ3JlYXRlJy5cblx0ICpcblx0ICovXG5cdHNldFN0YXJ0dXBNb2RlQXV0b0NyZWF0ZSgpOiB2b2lkIHtcblx0XHR0aGlzLnN0YXJ0dXBNb2RlID0gU3RhcnR1cE1vZGUuQXV0b0NyZWF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIHN0YXJ0dXAgbW9kZSBmb3IgdGhlIGFwcCB0byAnRGVlcGxpbmsnLlxuXHQgKlxuXHQgKi9cblx0c2V0U3RhcnR1cE1vZGVEZWVwbGluaygpOiB2b2lkIHtcblx0XHR0aGlzLnN0YXJ0dXBNb2RlID0gU3RhcnR1cE1vZGUuRGVlcGxpbms7XG5cdH1cblxuXHRpbml0KCk6IHZvaWQge1xuXHRcdHRoaXMuX2luaXRpYWxpemVkS2VlcGVyID0gbmV3IFByb21pc2VLZWVwZXI8dm9pZD4oKTtcblx0XHR0aGlzLmluaXRpYWxpemVkID0gdGhpcy5faW5pdGlhbGl6ZWRLZWVwZXIucHJvbWlzZTtcblx0XHRjb25zdCB1aU1vZGVsID0gbmV3IEpTT05Nb2RlbCh7XG5cdFx0XHRlZGl0TW9kZTogbGlicmFyeS5FZGl0TW9kZS5EaXNwbGF5LFxuXHRcdFx0aXNFZGl0YWJsZTogZmFsc2UsXG5cdFx0XHRkcmFmdFN0YXR1czogbGlicmFyeS5EcmFmdFN0YXR1cy5DbGVhcixcblx0XHRcdGJ1c3k6IGZhbHNlLFxuXHRcdFx0YnVzeUxvY2FsOiB7fSxcblx0XHRcdHBhZ2VzOiB7fVxuXHRcdH0pO1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsID0gbmV3IEpTT05Nb2RlbCh7XG5cdFx0XHRwYWdlczoge31cblx0XHR9KTtcblx0XHQvLyBzZXQgdGhlIGJpbmRpbmcgT25lV2F5IGZvciB1aU1vZGVsIHRvIHByZXZlbnQgY2hhbmdlcyBpZiBjb250cm9sbGVyIGV4dGVuc2lvbnMgbW9kaWZ5IGEgYm91bmQgcHJvcGVydHkgb2YgYSBjb250cm9sXG5cdFx0dWlNb2RlbC5zZXREZWZhdWx0QmluZGluZ01vZGUoXCJPbmVXYXlcIik7XG5cdFx0Ly8gZm9yIGludGVybmFsIG1vZGVsIGJpbmRpbmcgbmVlZHMgdG8gYmUgdHdvIHdheVxuXHRcdE1vZGVsSGVscGVyLmVuaGFuY2VVaUpTT05Nb2RlbCh1aU1vZGVsLCBsaWJyYXJ5KTtcblx0XHRNb2RlbEhlbHBlci5lbmhhbmNlSW50ZXJuYWxKU09OTW9kZWwob0ludGVybmFsTW9kZWwpO1xuXG5cdFx0dGhpcy5zZXRNb2RlbCh1aU1vZGVsLCBcInVpXCIpO1xuXHRcdHRoaXMuc2V0TW9kZWwob0ludGVybmFsTW9kZWwsIFwiaW50ZXJuYWxcIik7XG5cblx0XHR0aGlzLmJJbml0aWFsaXplUm91dGluZyA9IHRoaXMuYkluaXRpYWxpemVSb3V0aW5nICE9PSB1bmRlZmluZWQgPyB0aGlzLmJJbml0aWFsaXplUm91dGluZyA6IHRydWU7XG5cdFx0dGhpcy5fb1JvdXRlclByb3h5ID0gbmV3IFJvdXRlclByb3h5KCk7XG5cdFx0dGhpcy5fb0FwcFN0YXRlSGFuZGxlciA9IG5ldyBBcHBTdGF0ZUhhbmRsZXIodGhpcyk7XG5cdFx0dGhpcy5fb0RpYWdub3N0aWNzID0gbmV3IERpYWdub3N0aWNzKCk7XG5cblx0XHRjb25zdCBvTW9kZWwgPSB0aGlzLmdldE1vZGVsKCk7XG5cdFx0aWYgKG9Nb2RlbD8uaXNBPy48T0RhdGFNb2RlbD4oXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFNb2RlbFwiKSkge1xuXHRcdFx0TW9kZWxIZWxwZXIuZW5oYW5jZU9EYXRhTW9kZWwob01vZGVsKTtcblx0XHRcdHRoaXMuZW50aXR5Q29udGFpbmVyID0gb01vZGVsLmdldE1ldGFNb2RlbCgpLnJlcXVlc3RPYmplY3QoXCIvJEVudGl0eUNvbnRhaW5lci9cIik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIG5vdCBhbiBPRGF0YSB2NCBzZXJ2aWNlXG5cdFx0XHR0aGlzLmVudGl0eUNvbnRhaW5lciA9IFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmdldE1hbmlmZXN0RW50cnkoXCJzYXAuZmVcIik/LmFwcD8uZGlzYWJsZUNvbGxhYm9yYXRpb25EcmFmdCkge1xuXHRcdFx0Ly8gZGlzYWJsZSB0aGUgY29sbGFib3JhdGlvbiBkcmFmdCBnbG9iYWxseSBpbiBjYXNlIHByaXZhdGUgbWFuaWZlc3QgZmxhZyBpcyBzZXRcblx0XHRcdC8vIHRoaXMgYWxsb3dzIGN1c3RvbWVycyB0byBkaXNhYmxlIHRoZSBjb2xsYWJvcmF0aW9uIGRyYWZ0IGluIGNhc2Ugd2UgcnVuIGludG8gaXNzdWVzIHdpdGggdGhlIGZpcnN0IGRlbGl2ZXJ5XG5cdFx0XHQvLyB0aGlzIHdpbGwgYmUgcmVtb3ZlZCB3aXRoIHRoZSBuZXh0IFMvNCByZWxlYXNlXG5cdFx0XHRNb2RlbEhlbHBlci5kaXNhYmxlQ29sbGFib3JhdGlvbkRyYWZ0ID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRjb25zdCBvTWFuaWZlc3RVSTUgPSB0aGlzLmdldE1hbmlmZXN0KClbXCJzYXAudWk1XCJdO1xuXHRcdHRoaXMuY2hlY2tSb3V0aW5nQ29uZmlndXJhdGlvbihvTWFuaWZlc3RVSTUpO1xuXG5cdFx0Ly8gdGhlIGluaXQgZnVuY3Rpb24gY29uZmlndXJlcyB0aGUgcm91dGluZyBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzIGFib3ZlXG5cdFx0Ly8gaXQgd2lsbCBjYWxsIHRoZSBjcmVhdGVDb250ZW50IGZ1bmN0aW9uIHRvIGluc3RhbnRpYXRlIHRoZSBSb290VmlldyBhbmQgYWRkIGl0IHRvIHRoZSBVSUNvbXBvbmVudCBhZ2dyZWdhdGlvbnNcblxuXHRcdHN1cGVyLmluaXQoKTtcblx0XHRBcHBDb21wb25lbnQuaW5zdGFuY2VNYXBbdGhpcy5nZXRJZCgpXSA9IHRoaXM7XG5cdH1cblxuXHRwcml2YXRlIGNoZWNrUm91dGluZ0NvbmZpZ3VyYXRpb24ob01hbmlmZXN0VUk1OiBNYW5pZmVzdENvbnRlbnRbXCJzYXAudWk1XCJdKTogdm9pZCB7XG5cdFx0aWYgKG9NYW5pZmVzdFVJNT8ucm9vdFZpZXc/LnZpZXdOYW1lKSB7XG5cdFx0XHQvLyBUaGUgYXBwbGljYXRpb24gc3BlY2lmaWVkIGFuIG93biByb290IHZpZXcgaW4gdGhlIG1hbmlmZXN0XG5cblx0XHRcdC8vIFJvb3QgVmlldyB3YXMgbW92ZWQgZnJvbSBzYXAuZmUudGVtcGxhdGVzIHRvIHNhcC5mZS5jb3JlIC0ga2VlcCBpdCBjb21wYXRpYmxlXG5cdFx0XHRpZiAob01hbmlmZXN0VUk1LnJvb3RWaWV3LnZpZXdOYW1lID09PSBOQVZDT05GLkZDTC5WSUVXTkFNRV9DT01QQVRJQklMSVRZKSB7XG5cdFx0XHRcdG9NYW5pZmVzdFVJNS5yb290Vmlldy52aWV3TmFtZSA9IE5BVkNPTkYuRkNMLlZJRVdOQU1FO1xuXHRcdFx0fSBlbHNlIGlmIChvTWFuaWZlc3RVSTUucm9vdFZpZXcudmlld05hbWUgPT09IE5BVkNPTkYuTkFWQ09OVEFJTkVSLlZJRVdOQU1FX0NPTVBBVElCSUxJVFkpIHtcblx0XHRcdFx0b01hbmlmZXN0VUk1LnJvb3RWaWV3LnZpZXdOYW1lID0gTkFWQ09ORi5OQVZDT05UQUlORVIuVklFV05BTUU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChcblx0XHRcdFx0b01hbmlmZXN0VUk1LnJvb3RWaWV3LnZpZXdOYW1lID09PSBOQVZDT05GLkZDTC5WSUVXTkFNRSAmJlxuXHRcdFx0XHRvTWFuaWZlc3RVSTUucm91dGluZz8uY29uZmlnPy5yb3V0ZXJDbGFzcyA9PT0gTkFWQ09ORi5GQ0wuUk9VVEVSQ0xBU1Ncblx0XHRcdCkge1xuXHRcdFx0XHRMb2cuaW5mbyhgUm9vdGNvbnRhaW5lcjogXCIke05BVkNPTkYuRkNMLlZJRVdOQU1FfVwiIC0gUm91dGVyY2xhc3M6IFwiJHtOQVZDT05GLkZDTC5ST1VURVJDTEFTU31cImApO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0b01hbmlmZXN0VUk1LnJvb3RWaWV3LnZpZXdOYW1lID09PSBOQVZDT05GLk5BVkNPTlRBSU5FUi5WSUVXTkFNRSAmJlxuXHRcdFx0XHRvTWFuaWZlc3RVSTUucm91dGluZz8uY29uZmlnPy5yb3V0ZXJDbGFzcyA9PT0gTkFWQ09ORi5OQVZDT05UQUlORVIuUk9VVEVSQ0xBU1Ncblx0XHRcdCkge1xuXHRcdFx0XHRMb2cuaW5mbyhgUm9vdGNvbnRhaW5lcjogXCIke05BVkNPTkYuTkFWQ09OVEFJTkVSLlZJRVdOQU1FfVwiIC0gUm91dGVyY2xhc3M6IFwiJHtOQVZDT05GLk5BVkNPTlRBSU5FUi5ST1VURVJDTEFTU31cImApO1xuXHRcdFx0fSBlbHNlIGlmIChvTWFuaWZlc3RVSTUucm9vdFZpZXc/LnZpZXdOYW1lPy5pbmNsdWRlcyhcInNhcC5mZS5jb3JlLnJvb3RWaWV3XCIpKSB7XG5cdFx0XHRcdHRocm93IEVycm9yKFxuXHRcdFx0XHRcdGBcXG5Xcm9uZyBjb25maWd1cmF0aW9uIGZvciB0aGUgY291cGxlIChyb290Vmlldy9yb3V0ZXJDbGFzcykgaW4gbWFuaWZlc3QgZmlsZS5cXG5gICtcblx0XHRcdFx0XHRcdGBDdXJyZW50IHZhbHVlcyBhcmUgOigke29NYW5pZmVzdFVJNS5yb290Vmlldy52aWV3TmFtZX0vJHtcblx0XHRcdFx0XHRcdFx0b01hbmlmZXN0VUk1LnJvdXRpbmc/LmNvbmZpZz8ucm91dGVyQ2xhc3MgfHwgXCI8bWlzc2luZyByb3V0ZXIgY2xhc3M+XCJcblx0XHRcdFx0XHRcdH0pXFxuYCArXG5cdFx0XHRcdFx0XHRgRXhwZWN0ZWQgdmFsdWVzIGFyZSBcXG5gICtcblx0XHRcdFx0XHRcdGBcXHQgLSAoJHtOQVZDT05GLk5BVkNPTlRBSU5FUi5WSUVXTkFNRX0vJHtOQVZDT05GLk5BVkNPTlRBSU5FUi5ST1VURVJDTEFTU30pXFxuYCArXG5cdFx0XHRcdFx0XHRgXFx0IC0gKCR7TkFWQ09ORi5GQ0wuVklFV05BTUV9LyR7TkFWQ09ORi5GQ0wuUk9VVEVSQ0xBU1N9KWBcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdExvZy5pbmZvKGBSb290Y29udGFpbmVyOiBcIiR7b01hbmlmZXN0VUk1LnJvb3RWaWV3LnZpZXdOYW1lfVwiIC0gUm91dGVyY2xhc3M6IFwiJHtOQVZDT05GLk5BVkNPTlRBSU5FUi5ST1VURVJDTEFTU31cImApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGFzeW5jIG9uU2VydmljZXNTdGFydGVkKGFsbFNlcnZpY2VzOiBTZXJ2aWNlPHVua25vd24+W10pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0aGlzLl9zdGFydGVkU2VydmljZXMgPSBhbGxTZXJ2aWNlcztcblx0XHRhd2FpdCB0aGlzLmluaXRpYWxpemVGZWF0dXJlVG9nZ2xlcygpO1xuXG5cdFx0Ly9yb3V0ZXIgbXVzdCBiZSBzdGFydGVkIG9uY2UgdGhlIHJvb3Rjb250YWluZXIgaXMgaW5pdGlhbGl6ZWRcblx0XHQvL3N0YXJ0aW5nIG9mIHRoZSByb3V0ZXJcblx0XHRjb25zdCBmaW5hbGl6ZWRSb3V0aW5nSW5pdGlhbGl6YXRpb24gPSAoKTogdm9pZCA9PiB7XG5cdFx0XHR0aGlzLmVudGl0eUNvbnRhaW5lclxuXHRcdFx0XHQudGhlbihhc3luYyAoKSA9PiB7XG5cdFx0XHRcdFx0aWYgKHRoaXMuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkuYXR0YWNoUm91dGVNYXRjaGVycykge1xuXHRcdFx0XHRcdFx0dGhpcy5nZXRSb290Vmlld0NvbnRyb2xsZXIoKS5hdHRhY2hSb3V0ZU1hdGNoZXJzKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMuZ2V0Um91dGVyKCkuaW5pdGlhbGl6ZSgpO1xuXHRcdFx0XHRcdHRoaXMuZ2V0Um91dGVyUHJveHkoKS5pbml0KHRoaXMsIHRoaXMuX2lzRmNsRW5hYmxlZCgpKTtcblxuXHRcdFx0XHRcdHJldHVybiB0aGlzLmdldFZhbHVlSGVscEhpc3RvcnlTZXJ2aWNlKCkucmVnaXN0ZXJTaGVsbEhvb2soKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcblx0XHRcdFx0XHRjb25zdCBvUmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhO1xuXG5cdFx0XHRcdFx0dGhpcy5nZXRSb290Vmlld0NvbnRyb2xsZXIoKS5kaXNwbGF5RXJyb3JQYWdlKFxuXHRcdFx0XHRcdFx0b1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0FQUF9DT01QT05FTlRfU0FQRkVfQVBQU1RBUlRfVEVDSE5JQ0FMX0lTU1VFU1wiKSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGl0bGU6IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfRVJST1JcIiksXG5cdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiBlcnJvci5tZXNzYWdlXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSk7XG5cdFx0fTtcblxuXHRcdGlmICh0aGlzLmJJbml0aWFsaXplUm91dGluZykge1xuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0Um91dGluZ1NlcnZpY2UoKVxuXHRcdFx0XHQuaW5pdGlhbGl6ZVJvdXRpbmcoKVxuXHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0aWYgKHRoaXMuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkpIHtcblx0XHRcdFx0XHRcdGZpbmFsaXplZFJvdXRpbmdJbml0aWFsaXphdGlvbigpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0aGlzLmdldFJvb3RDb250cm9sKCkuYXR0YWNoQWZ0ZXJJbml0KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0ZmluYWxpemVkUm91dGluZ0luaXRpYWxpemF0aW9uKCk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dGhpcy5faW5pdGlhbGl6ZWRLZWVwZXIucmVzb2x2ZSgpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnI6IEVycm9yKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKGBjYW5ub3QgY2Fubm90IGluaXRpYWxpemUgcm91dGluZzogJHtlcnIudG9TdHJpbmcoKX1gKTtcblx0XHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuX2luaXRpYWxpemVkS2VlcGVyLnJlc29sdmUoKTtcblx0XHR9XG5cdH1cblxuXHRleGl0KCk6IHZvaWQge1xuXHRcdHRoaXMuX3N0YXJ0ZWRTZXJ2aWNlcyA9IFtdO1xuXHRcdHRoaXMuX29BcHBTdGF0ZUhhbmRsZXIuZGVzdHJveSgpO1xuXHRcdHRoaXMuX29Sb3V0ZXJQcm94eS5kZXN0cm95KCk7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRkZWxldGUgdGhpcy5fb0FwcFN0YXRlSGFuZGxlcjtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdGRlbGV0ZSB0aGlzLl9vUm91dGVyUHJveHk7XG5cdFx0ZGVsZXRlTW9kZWxDYWNoZURhdGEodGhpcy5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0dGhpcy5nZXRNb2RlbChcInVpXCIpLmRlc3Ryb3koKTtcblx0XHRjbGVhblBhZ2VDb25maWd1cmF0aW9uQ2hhbmdlcygpO1xuXHR9XG5cblx0Z2V0TWV0YU1vZGVsKCk6IE9EYXRhTWV0YU1vZGVsIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHR9XG5cblx0Z2V0RGlhZ25vc3RpY3MoKTogRGlhZ25vc3RpY3Mge1xuXHRcdHJldHVybiB0aGlzLl9vRGlhZ25vc3RpY3M7XG5cdH1cblxuXHRkZXN0cm95KGJTdXBwcmVzc0ludmFsaWRhdGU/OiBib29sZWFuKTogdm9pZCB7XG5cdFx0dGhpcy5pc0V4aXRpbmcgPSB0cnVlO1xuXG5cdFx0Ly8gTEVBS1MsIHdpdGggd29ya2Fyb3VuZCBmb3Igc29tZSBGbGV4IC8gTURDIGlzc3VlXG5cdFx0dHJ5IHtcblx0XHRcdGRlbGV0ZSBBcHBDb21wb25lbnQuaW5zdGFuY2VNYXBbdGhpcy5nZXRJZCgpXTtcblxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0ZGVsZXRlICh3aW5kb3cgYXMgdW5rbm93bikuX3JvdXRpbmc7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0TG9nLmluZm8oZSBhcyBzdHJpbmcpO1xuXHRcdH1cblxuXHRcdC8vV09SS0FST1VORCBmb3Igc3RpY2t5IGRpc2NhcmQgcmVxdWVzdCA6IGR1ZSB0byBhc3luYyBjYWxsYmFjaywgcmVxdWVzdCB0cmlnZ2VyZWQgYnkgdGhlIGV4aXRBcHBsaWNhdGlvbiB3aWxsIGJlIHNlbmQgYWZ0ZXIgdGhlIFVJQ29tcG9uZW50LnByb3RvdHlwZS5kZXN0cm95XG5cdFx0Ly9zbyB3ZSBuZWVkIHRvIGNvcHkgdGhlIFJlcXVlc3RvciBoZWFkZXJzIGFzIGl0IHdpbGwgYmUgZGVzdHJveVxuXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRjb25zdCBvTWFpbk1vZGVsID0gdGhpcy5vTW9kZWxzW3VuZGVmaW5lZF07XG5cdFx0bGV0IG9IZWFkZXJzO1xuXHRcdGlmIChvTWFpbk1vZGVsPy5vUmVxdWVzdG9yKSB7XG5cdFx0XHRvSGVhZGVycyA9IE9iamVjdC5hc3NpZ24oe30sIG9NYWluTW9kZWwub1JlcXVlc3Rvci5tSGVhZGVycyk7XG5cdFx0fVxuXG5cdFx0Ly8gQXMgd2UgbmVlZCB0byBjbGVhbnVwIHRoZSBhcHBsaWNhdGlvbiAvIGhhbmRsZSB0aGUgZGlydHkgb2JqZWN0IHdlIG5lZWQgdG8gY2FsbCBvdXIgY2xlYW51cCBiZWZvcmUgdGhlIG1vZGVscyBhcmUgZGVzdHJveWVkXG5cdFx0dGhpcy5nZXRSb3V0aW5nU2VydmljZSgpPy5iZWZvcmVFeGl0Py4oKTtcblx0XHRzdXBlci5kZXN0cm95KGJTdXBwcmVzc0ludmFsaWRhdGUpO1xuXHRcdGlmIChvSGVhZGVycyAmJiBvTWFpbk1vZGVsLm9SZXF1ZXN0b3IpIHtcblx0XHRcdG9NYWluTW9kZWwub1JlcXVlc3Rvci5tSGVhZGVycyA9IG9IZWFkZXJzO1xuXHRcdH1cblx0fVxuXG5cdGdldFJvdXRpbmdTZXJ2aWNlKCk6IFJvdXRpbmdTZXJ2aWNlIHtcblx0XHRyZXR1cm4ge30gYXMgUm91dGluZ1NlcnZpY2U7IC8vIG92ZXJyaWRlbiBhdCBydW50aW1lXG5cdH1cblxuXHRnZXRTaGVsbFNlcnZpY2VzKCk6IElTaGVsbFNlcnZpY2VzIHtcblx0XHRyZXR1cm4ge30gYXMgSVNoZWxsU2VydmljZXM7IC8vIG92ZXJyaWRlbiBhdCBydW50aW1lXG5cdH1cblxuXHRnZXROYXZpZ2F0aW9uU2VydmljZSgpOiBOYXZpZ2F0aW9uU2VydmljZSB7XG5cdFx0cmV0dXJuIHt9IGFzIE5hdmlnYXRpb25TZXJ2aWNlOyAvLyBvdmVycmlkZW4gYXQgcnVudGltZVxuXHR9XG5cblx0Z2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCk6IFNpZGVFZmZlY3RzU2VydmljZSB7XG5cdFx0cmV0dXJuIHt9IGFzIFNpZGVFZmZlY3RzU2VydmljZTtcblx0fVxuXG5cdGdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCk6IEVudmlyb25tZW50Q2FwYWJpbGl0aWVzU2VydmljZSB7XG5cdFx0cmV0dXJuIHt9IGFzIEVudmlyb25tZW50Q2FwYWJpbGl0aWVzU2VydmljZTtcblx0fVxuXG5cdGdldENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSgpOiBDb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2Uge1xuXHRcdHJldHVybiB7fSBhcyBDb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2U7XG5cdH1cblxuXHRnZXRDb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlKCk6IENvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2Uge1xuXHRcdHJldHVybiB7fSBhcyBDb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlO1xuXHR9XG5cblx0Z2V0Q29sbGFib3JhdGl2ZURyYWZ0U2VydmljZSgpOiBDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlIHtcblx0XHRyZXR1cm4ge30gYXMgQ29sbGFib3JhdGl2ZURyYWZ0U2VydmljZTtcblx0fVxuXG5cdGdldENvbnRleHRTaGFyaW5nU2VydmljZSgpOiBDb250ZXh0U2hhcmluZ1NlcnZpY2Uge1xuXHRcdHJldHVybiB7fSBhcyBDb250ZXh0U2hhcmluZ1NlcnZpY2U7XG5cdH1cblxuXHRnZXRUZWxlbWV0cnlTZXJ2aWNlKCk6IFRlbGVtZXRyeVNlcnZpY2Uge1xuXHRcdHJldHVybiB7fSBhcyBUZWxlbWV0cnlTZXJ2aWNlO1xuXHR9XG5cblx0Z2V0VmFsdWVIZWxwSGlzdG9yeVNlcnZpY2UoKTogVmFsdWVIZWxwSGlzdG9yeVNlcnZpY2Uge1xuXHRcdHJldHVybiB7fSBhcyBWYWx1ZUhlbHBIaXN0b3J5U2VydmljZTtcblx0fVxuXG5cdGFzeW5jIGdldFN0YXJ0dXBQYXJhbWV0ZXJzKCk6IFByb21pc2U8U3RhcnR1cFBhcmFtZXRlcnM+IHtcblx0XHRjb25zdCBvQ29tcG9uZW50RGF0YSA9IHRoaXMuZ2V0Q29tcG9uZW50RGF0YSgpO1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKG9Db21wb25lbnREYXRhICYmIG9Db21wb25lbnREYXRhLnN0YXJ0dXBQYXJhbWV0ZXJzKSB8fCB7fSk7XG5cdH1cblxuXHRyZXN0b3JlKCk6IHZvaWQge1xuXHRcdC8vIGNhbGxlZCBieSBGTFAgd2hlbiBhcHAgc2FwLWtlZXAtYWxpdmUgaXMgZW5hYmxlZCBhbmQgYXBwIGlzIHJlc3RvcmVkXG5cdFx0Zm9yIChjb25zdCBzdGFydGVkU2VydmljZSBvZiB0aGlzLl9zdGFydGVkU2VydmljZXMpIHtcblx0XHRcdHN0YXJ0ZWRTZXJ2aWNlLm9uUmVzdG9yZT8uKCk7XG5cdFx0fVxuXHRcdHRoaXMuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkudmlld1N0YXRlLm9uUmVzdG9yZSgpO1xuXHR9XG5cblx0c3VzcGVuZCgpOiB2b2lkIHtcblx0XHQvLyBjYWxsZWQgYnkgRkxQIHdoZW4gYXBwIHNhcC1rZWVwLWFsaXZlIGlzIGVuYWJsZWQgYW5kIGFwcCBpcyBzdXNwZW5kZWRcblx0XHRmb3IgKGNvbnN0IHN0YXJ0ZWRTZXJ2aWNlIG9mIHRoaXMuX3N0YXJ0ZWRTZXJ2aWNlcykge1xuXHRcdFx0c3RhcnRlZFNlcnZpY2Uub25TdXNwZW5kPy4oKTtcblx0XHR9XG5cdFx0dGhpcy5nZXRSb290Vmlld0NvbnRyb2xsZXIoKS52aWV3U3RhdGUub25TdXNwZW5kKCk7XG5cdH1cblxuXHQvKipcblx0ICogbmF2aWdhdGVCYXNlZE9uU3RhcnR1cFBhcmFtZXRlciBmdW5jdGlvbiBpcyBhIHB1YmxpYyBhcGkgdGhhdCBhY3RzIGFzIGEgd3JhcHBlciB0byBfbWFuYWdlRGVlcExpbmtTdGFydHVwIGZ1bmN0aW9uLiBJdCBwYXNzZXMgdGhlIHN0YXJ0dXAgcGFyYW1ldGVycyBmdXJ0aGVyIHRvIF9tYW5hZ2VEZWVwTGlua1N0YXJ0dXAgZnVuY3Rpb25cblx0ICpcblx0ICogQHBhcmFtIHN0YXJ0dXBQYXJhbWV0ZXJzIERlZmluZXMgdGhlIHN0YXJ0dXAgcGFyYW1ldGVycyB3aGljaCBpcyBmdXJ0aGVyIHBhc3NlZCB0byBfbWFuYWdlRGVlcExpbmtTdGFydHVwIGZ1bmN0aW9uLlxuXHQgKi9cblxuXHRhc3luYyBuYXZpZ2F0ZUJhc2VkT25TdGFydHVwUGFyYW1ldGVyKHN0YXJ0dXBQYXJhbWV0ZXJzOiBTdGFydHVwUGFyYW1ldGVycyB8IG51bGwgfCB1bmRlZmluZWQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0cnkge1xuXHRcdFx0aWYgKCFCdXN5TG9ja2VyLmlzTG9ja2VkKHRoaXMuZ2V0TW9kZWwoXCJ1aVwiKSkpIHtcblx0XHRcdFx0aWYgKCFzdGFydHVwUGFyYW1ldGVycykge1xuXHRcdFx0XHRcdHN0YXJ0dXBQYXJhbWV0ZXJzID0gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCByb3V0aW5nU2VydmljZSA9IHRoaXMuZ2V0Um91dGluZ1NlcnZpY2UoKTtcblx0XHRcdFx0YXdhaXQgcm91dGluZ1NlcnZpY2UuX21hbmFnZURlZXBMaW5rU3RhcnR1cChzdGFydHVwUGFyYW1ldGVycyk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXhjZXB0aW9uOiB1bmtub3duKSB7XG5cdFx0XHRMb2cuZXJyb3IoZXhjZXB0aW9uIGFzIHN0cmluZyk7XG5cdFx0XHRCdXN5TG9ja2VyLnVubG9jayh0aGlzLmdldE1vZGVsKFwidWlcIikpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBVc2VkIHRvIGFsbG93IGRpc2FibGluZyB0aGUgQ29sbGFib3JhdGlvbiBNYW5hZ2VyIGludGVncmF0aW9uIGZvciB0aGUgT1ZQIHVzZSBjYXNlLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBjb2xsYWJvcmF0aW9uIG1hbmFnZXIgc2VydmljZSBpcyBhY3RpdmUuXG5cdCAqL1xuXHRpc0NvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZUVuYWJsZWQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn1cblxuaW50ZXJmYWNlIEFwcENvbXBvbmVudCBleHRlbmRzIFVJQ29tcG9uZW50IHtcblx0Z2V0TWFuaWZlc3QoKTogTWFuaWZlc3RDb250ZW50O1xuXHRnZXRNYW5pZmVzdEVudHJ5KGVudHJ5OiBcInNhcC5hcHBcIik6IE1hbmlmZXN0Q29udGVudFtcInNhcC5hcHBcIl07XG5cdGdldE1hbmlmZXN0RW50cnkoZW50cnk6IFwic2FwLnVpNVwiKTogTWFuaWZlc3RDb250ZW50W1wic2FwLnVpNVwiXTtcblx0X2dldE1hbmlmZXN0RW50cnkoZW50cnk6IFwic2FwLnVpNVwiLCBtZXJnZWQ6IGJvb2xlYW4pOiBNYW5pZmVzdENvbnRlbnRbXCJzYXAudWk1XCJdO1xuXHRnZXRNYW5pZmVzdEVudHJ5KGVudHJ5OiBcInNhcC51aVwiKTogTWFuaWZlc3RDb250ZW50W1wic2FwLnVpXCJdO1xuXHRnZXRNYW5pZmVzdEVudHJ5KGVudHJ5OiBcInNhcC5mZVwiKTogTWFuaWZlc3RDb250ZW50W1wic2FwLmZlXCJdO1xuXHRnZXRNYW5pZmVzdEVudHJ5KGVudHJ5OiBcInNhcC5maW9yaVwiKTogTWFuaWZlc3RDb250ZW50W1wic2FwLmZpb3JpXCJdO1xuXHRnZXRDb21wb25lbnREYXRhKCk6IENvbXBvbmVudERhdGE7XG5cdGdldFJvb3RDb250cm9sKCk6IHtcblx0XHRnZXRDb250cm9sbGVyKCk6IFJvb3RWaWV3QmFzZUNvbnRyb2xsZXI7XG5cdH0gJiBWaWV3O1xuXHRnZXRNb2RlbCgpOiBPRGF0YU1vZGVsO1xuXHRnZXRNb2RlbChuYW1lOiBcInVpXCIpOiBKU09OTW9kZWw7XG5cdGdldE1vZGVsKG5hbWU6IHN0cmluZyk6IE1vZGVsIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBBcHBDb21wb25lbnQ7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7RUFxQ0EsTUFBTUEsV0FBVyxHQUFHQyxPQUFPLENBQUNELFdBQVc7RUFDdkMsTUFBTUUsT0FBTyxHQUFHO0lBQ2ZDLEdBQUcsRUFBRTtNQUNKQyxRQUFRLEVBQUUsMEJBQTBCO01BQ3BDQyxzQkFBc0IsRUFBRSx5Q0FBeUM7TUFDakVDLFdBQVcsRUFBRTtJQUNkLENBQUM7SUFDREMsWUFBWSxFQUFFO01BQ2JILFFBQVEsRUFBRSxtQ0FBbUM7TUFDN0NDLHNCQUFzQixFQUFFLGtEQUFrRDtNQUMxRUMsV0FBVyxFQUFFO0lBQ2Q7RUFDRCxDQUFDO0VBWUQ7RUFDQSxNQUFNRSxRQUFRLEdBQUdDLE1BQU07RUFLdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFaQSxJQXdHTUMsWUFBWSxXQTNGakJDLGNBQWMsQ0FBQywwQkFBMEIsRUFBRTtJQUMzQ0MsTUFBTSxFQUFFO01BQ1BDLFNBQVMsRUFBRTtJQUNaLENBQUM7SUFDREMsUUFBUSxFQUFFO01BQ1QsU0FBUyxFQUFFO1FBQ1ZDLFFBQVEsRUFBRTtVQUNUQyxhQUFhLEVBQUU7WUFDZEMsV0FBVyxFQUFFLDJDQUEyQztZQUN4REMsT0FBTyxFQUFFLFNBQVM7WUFDbEJDLFFBQVEsRUFBRTtjQUNUQyxPQUFPLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQztjQUN0Q0MsU0FBUyxF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
|
|
524
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdGFydHVwTW9kZSIsImxpYnJhcnkiLCJOQVZDT05GIiwiRkNMIiwiVklFV05BTUUiLCJWSUVXTkFNRV9DT01QQVRJQklMSVRZIiwiUk9VVEVSQ0xBU1MiLCJOQVZDT05UQUlORVIiLCJfbVJvdXRlciIsIlJvdXRlciIsIkFwcENvbXBvbmVudCIsImRlZmluZVVJNUNsYXNzIiwiY29uZmlnIiwiZnVsbFdpZHRoIiwibWFuaWZlc3QiLCJzZXJ2aWNlcyIsInJlc291cmNlTW9kZWwiLCJmYWN0b3J5TmFtZSIsInN0YXJ0dXAiLCJzZXR0aW5ncyIsImJ1bmRsZXMiLCJtb2RlbE5hbWUiLCJyb3V0aW5nU2VydmljZSIsInNoZWxsU2VydmljZXMiLCJTaGVsbFVJU2VydmljZSIsIm5hdmlnYXRpb25TZXJ2aWNlIiwiZW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJzaWRlRWZmZWN0c1NlcnZpY2UiLCJhc3luY0NvbXBvbmVudFNlcnZpY2UiLCJjb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2UiLCJjb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlIiwidGVsZW1ldHJ5U2VydmljZSIsInZhbHVlSGVscEhpc3RvcnlTZXJ2aWNlIiwiQ29sbGFib3JhdGl2ZURyYWZ0U2VydmljZSIsIkNvbnRleHRTaGFyaW5nU2VydmljZSIsInJvb3RWaWV3Iiwidmlld05hbWUiLCJ0eXBlIiwiYXN5bmMiLCJpZCIsInJvdXRpbmciLCJjb250cm9sSWQiLCJyb3V0ZXJDbGFzcyIsInZpZXdUeXBlIiwiY29udHJvbEFnZ3JlZ2F0aW9uIiwiY29udGFpbmVyT3B0aW9ucyIsInByb3BhZ2F0ZU1vZGVsIiwiZGVzaWdudGltZSIsImltcGxlbWVudEludGVyZmFjZSIsInN0YXJ0dXBNb2RlIiwiTm9ybWFsIiwiX3N0YXJ0ZWRTZXJ2aWNlcyIsImlzRXhpdGluZyIsInBhZ2VDb25maWd1cmF0aW9uQ2hhbmdlcyIsIl9pc0ZjbEVuYWJsZWQiLCJvTWFuaWZlc3RVSTUiLCJnZXRNYW5pZmVzdEVudHJ5IiwiaW5pdGlhbGl6ZUZlYXR1cmVUb2dnbGVzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJjaGFuZ2VQYWdlQ29uZmlndXJhdGlvbiIsInBhZ2VJZCIsInBhdGgiLCJ2YWx1ZSIsImNoYW5nZUNvbmZpZ3VyYXRpb24iLCJnZXRNYW5pZmVzdCIsImNsZWFuUGFnZUNvbmZpZ3VyYXRpb25DaGFuZ2VzIiwiZ2V0Um91dGVyUHJveHkiLCJfb1JvdXRlclByb3h5IiwiZ2V0QXBwU3RhdGVIYW5kbGVyIiwiX29BcHBTdGF0ZUhhbmRsZXIiLCJnZXRSb290Vmlld0NvbnRyb2xsZXIiLCJnZXRSb290Q29udHJvbCIsImdldENvbnRyb2xsZXIiLCJnZXRSb290Q29udGFpbmVyIiwiZ2V0Q29udGVudCIsImdldFN0YXJ0dXBNb2RlIiwic2V0U3RhcnR1cE1vZGVDcmVhdGUiLCJDcmVhdGUiLCJzZXRTdGFydHVwTW9kZUF1dG9DcmVhdGUiLCJBdXRvQ3JlYXRlIiwic2V0U3RhcnR1cE1vZGVEZWVwbGluayIsIkRlZXBsaW5rIiwiaW5pdCIsIl9pbml0aWFsaXplZEtlZXBlciIsIlByb21pc2VLZWVwZXIiLCJpbml0aWFsaXplZCIsInByb21pc2UiLCJ1aU1vZGVsIiwiSlNPTk1vZGVsIiwiZWRpdE1vZGUiLCJFZGl0TW9kZSIsIkRpc3BsYXkiLCJpc0VkaXRhYmxlIiwiZHJhZnRTdGF0dXMiLCJEcmFmdFN0YXR1cyIsIkNsZWFyIiwiYnVzeSIsImJ1c3lMb2NhbCIsInBhZ2VzIiwib0ludGVybmFsTW9kZWwiLCJzZXREZWZhdWx0QmluZGluZ01vZGUiLCJNb2RlbEhlbHBlciIsImVuaGFuY2VVaUpTT05Nb2RlbCIsImVuaGFuY2VJbnRlcm5hbEpTT05Nb2RlbCIsInNldE1vZGVsIiwiYkluaXRpYWxpemVSb3V0aW5nIiwidW5kZWZpbmVkIiwiUm91dGVyUHJveHkiLCJBcHBTdGF0ZUhhbmRsZXIiLCJfb0RpYWdub3N0aWNzIiwiRGlhZ25vc3RpY3MiLCJvTW9kZWwiLCJnZXRNb2RlbCIsImlzQSIsImVuaGFuY2VPRGF0YU1vZGVsIiwiZW50aXR5Q29udGFpbmVyIiwiZ2V0TWV0YU1vZGVsIiwicmVxdWVzdE9iamVjdCIsImFwcCIsImRpc2FibGVDb2xsYWJvcmF0aW9uRHJhZnQiLCJjaGVja1JvdXRpbmdDb25maWd1cmF0aW9uIiwiaW5zdGFuY2VNYXAiLCJnZXRJZCIsIkxvZyIsImluZm8iLCJpbmNsdWRlcyIsIkVycm9yIiwib25TZXJ2aWNlc1N0YXJ0ZWQiLCJhbGxTZXJ2aWNlcyIsImZpbmFsaXplZFJvdXRpbmdJbml0aWFsaXphdGlvbiIsInRoZW4iLCJhdHRhY2hSb3V0ZU1hdGNoZXJzIiwiZ2V0Um91dGVyIiwiaW5pdGlhbGl6ZSIsImdldFZhbHVlSGVscEhpc3RvcnlTZXJ2aWNlIiwicmVnaXN0ZXJTaGVsbEhvb2siLCJjYXRjaCIsImVycm9yIiwib1Jlc291cmNlQnVuZGxlIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiZGlzcGxheUVycm9yUGFnZSIsImdldFRleHQiLCJ0aXRsZSIsImRlc2NyaXB0aW9uIiwibWVzc2FnZSIsImdldFJvdXRpbmdTZXJ2aWNlIiwiaW5pdGlhbGl6ZVJvdXRpbmciLCJhdHRhY2hBZnRlckluaXQiLCJlcnIiLCJ0b1N0cmluZyIsImV4aXQiLCJkZXN0cm95IiwiZGVsZXRlTW9kZWxDYWNoZURhdGEiLCJnZXREaWFnbm9zdGljcyIsImJTdXBwcmVzc0ludmFsaWRhdGUiLCJ3aW5kb3ciLCJfcm91dGluZyIsImUiLCJvTWFpbk1vZGVsIiwib01vZGVscyIsIm9IZWFkZXJzIiwib1JlcXVlc3RvciIsIk9iamVjdCIsImFzc2lnbiIsIm1IZWFkZXJzIiwiYmVmb3JlRXhpdCIsImdldFNoZWxsU2VydmljZXMiLCJnZXROYXZpZ2F0aW9uU2VydmljZSIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsImdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiZ2V0Q29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlIiwiZ2V0Q29sbGFib3JhdGl2ZVRvb2xzU2VydmljZSIsImdldENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2UiLCJnZXRDb250ZXh0U2hhcmluZ1NlcnZpY2UiLCJnZXRUZWxlbWV0cnlTZXJ2aWNlIiwiZ2V0U3RhcnR1cFBhcmFtZXRlcnMiLCJvQ29tcG9uZW50RGF0YSIsImdldENvbXBvbmVudERhdGEiLCJzdGFydHVwUGFyYW1ldGVycyIsInJlc3RvcmUiLCJzdGFydGVkU2VydmljZSIsIm9uUmVzdG9yZSIsInZpZXdTdGF0ZSIsInN1c3BlbmQiLCJvblN1c3BlbmQiLCJuYXZpZ2F0ZUJhc2VkT25TdGFydHVwUGFyYW1ldGVyIiwiQnVzeUxvY2tlciIsImlzTG9ja2VkIiwiX21hbmFnZURlZXBMaW5rU3RhcnR1cCIsImV4Y2VwdGlvbiIsInVubG9jayIsImlzQ29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlRW5hYmxlZCIsIlVJQ29tcG9uZW50Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJBcHBDb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSBGbGV4aWJsZUNvbHVtbkxheW91dCBmcm9tIFwic2FwL2YvRmxleGlibGVDb2x1bW5MYXlvdXRcIjtcbmltcG9ydCBBcHBTdGF0ZUhhbmRsZXIgZnJvbSBcInNhcC9mZS9jb3JlL0FwcFN0YXRlSGFuZGxlclwiO1xuaW1wb3J0IFJvdXRlclByb3h5IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9yb3V0aW5nL1JvdXRlclByb3h5XCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgaW1wbGVtZW50SW50ZXJmYWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBQcm9taXNlS2VlcGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Byb21pc2VLZWVwZXJcIjtcbmltcG9ydCBsaWJyYXJ5IGZyb20gXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgeyBjaGFuZ2VDb25maWd1cmF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL21hbmlmZXN0TWVyZ2VyL0NoYW5nZVBhZ2VDb25maWd1cmF0aW9uXCI7XG5pbXBvcnQgdHlwZSBSb290Vmlld0Jhc2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9yb290Vmlldy9Sb290Vmlld0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSB7IENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9Db2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSB7IENvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvQ29sbGFib3JhdGl2ZVRvb2xzU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgQ29udGV4dFNoYXJpbmdTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL0NvbnRleHRTaGFyaW5nU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL0Vudmlyb25tZW50U2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgTmF2aWdhdGlvblNlcnZpY2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvTmF2aWdhdGlvblNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSB7IFJvdXRpbmdTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1JvdXRpbmdTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgeyBJU2hlbGxTZXJ2aWNlcyB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9TaGVsbFNlcnZpY2VzRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgeyBTaWRlRWZmZWN0c1NlcnZpY2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2lkZUVmZmVjdHNTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgeyBUZWxlbWV0cnlTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1RlbGVtZXRyeVNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSB7IENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvY29sbGFib3JhdGl2ZURyYWZ0U2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCBEaWFnbm9zdGljcyBmcm9tIFwic2FwL2ZlL2NvcmUvc3VwcG9ydC9EaWFnbm9zdGljc1wiO1xuaW1wb3J0IHR5cGUgTmF2Q29udGFpbmVyIGZyb20gXCJzYXAvbS9OYXZDb250YWluZXJcIjtcbmltcG9ydCBSb3V0ZXIgZnJvbSBcInNhcC9tL3JvdXRpbmcvUm91dGVyXCI7XG5pbXBvcnQgTGlicmFyeSBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgdHlwZSB7IE1hbmlmZXN0Q29udGVudCB9IGZyb20gXCJzYXAvdWkvY29yZS9NYW5pZmVzdFwiO1xuaW1wb3J0IFVJQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9VSUNvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBJQXN5bmNDb250ZW50Q3JlYXRpb24gfSBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIFNlcnZpY2UgZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2UvU2VydmljZVwiO1xuaW1wb3J0IHR5cGUgTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9Nb2RlbFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IEJ1c3lMb2NrZXIgZnJvbSBcIi4vY29udHJvbGxlcmV4dGVuc2lvbnMvQnVzeUxvY2tlclwiO1xuaW1wb3J0IHsgZGVsZXRlTW9kZWxDYWNoZURhdGEgfSBmcm9tIFwiLi9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBWYWx1ZUhlbHBIaXN0b3J5U2VydmljZSB9IGZyb20gXCIuL3NlcnZpY2VzL1ZhbHVlSGVscEhpc3RvcnlTZXJ2aWNlRmFjdG9yeVwiO1xuXG5jb25zdCBTdGFydHVwTW9kZSA9IGxpYnJhcnkuU3RhcnR1cE1vZGU7XG5jb25zdCBOQVZDT05GID0ge1xuXHRGQ0w6IHtcblx0XHRWSUVXTkFNRTogXCJzYXAuZmUuY29yZS5yb290Vmlldy5GY2xcIixcblx0XHRWSUVXTkFNRV9DT01QQVRJQklMSVRZOiBcInNhcC5mZS50ZW1wbGF0ZXMuUm9vdENvbnRhaW5lci52aWV3LkZjbFwiLFxuXHRcdFJPVVRFUkNMQVNTOiBcInNhcC5mLnJvdXRpbmcuUm91dGVyXCJcblx0fSxcblx0TkFWQ09OVEFJTkVSOiB7XG5cdFx0VklFV05BTUU6IFwic2FwLmZlLmNvcmUucm9vdFZpZXcuTmF2Q29udGFpbmVyXCIsXG5cdFx0VklFV05BTUVfQ09NUEFUSUJJTElUWTogXCJzYXAuZmUudGVtcGxhdGVzLlJvb3RDb250YWluZXIudmlldy5OYXZDb250YWluZXJcIixcblx0XHRST1VURVJDTEFTUzogXCJzYXAubS5yb3V0aW5nLlJvdXRlclwiXG5cdH1cbn07XG5cbmV4cG9ydCB0eXBlIENvbXBvbmVudERhdGEgPSB7XG5cdHN0YXJ0dXBQYXJhbWV0ZXJzPzogU3RhcnR1cFBhcmFtZXRlcnM7XG5cdC8vZmVFbnZpcm9ubWVudCBpcyBvYmplY3Qgd2hpY2ggaXMgcmVjZWl2ZWQgYXMgYSBwYXJ0IG9mIHRoZSBjb21wb25lbnQgZGF0YSBmb3IgTXkgSW5ib3ggYXBwbGljYXRpb25zLlxuXHRmZUVudmlyb25tZW50Pzoge1xuXHRcdC8vV2l0aGluIHRoaXMgb2JqZWN0IHRoZXkgcGFzcyBhIGZ1bmN0aW9uIGNhbGxlZCBnZXRJbnRlbnQoKSB3aGljaCByZXR1cm5zIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBzZW1hbnRpY09iamVjdCBhbmQgYWN0aW9uIGFzIHNlcGFyYXRlIHByb3BlcnR5LXZhbHVlIGVudHJpZXMgdGhhdCBhcmUgdGhlbiB1c2VkIHRvIHVwZGF0ZSB0aGUgcmVsYXRlZCBhcHBzIGJ1dHRvbi5cblx0XHRnZXRJbnRlbnQ6IEZ1bmN0aW9uO1xuXHRcdC8vV2l0aGluIHRoaXMgb2JqZWN0IHRoZXkgcGFzcyBhIGZ1bmN0aW9uIGNhbGxlZCBnZXRTaGFyZUNvbnRyb2xWaXNpYmlsaXR5KCkgdGhhdCByZXR1cm5zIGJvb2xlYW4gdmFsdWVzKHRydWUgb3IgZmFsc2UpIHdoaWNoIGRldGVybWluZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIHNoYXJlIGJ1dHRvbi5cblx0XHRnZXRTaGFyZUNvbnRyb2xWaXNpYmlsaXR5OiBGdW5jdGlvbjtcblx0fTtcbn07XG4vLyBLZWVwIGEgcmVmZXJlbmNlIHNvIGFzIHRvIGtlZXAgdGhlIGltcG9ydCBkZXNwaXRlIGl0IG5vdCBiZWluZyBkaXJlY3RseSB1c2VkXG5jb25zdCBfbVJvdXRlciA9IFJvdXRlcjtcblxuZXhwb3J0IHR5cGUgU3RhcnR1cFBhcmFtZXRlcnMgPSB7XG5cdHByZWZlcnJlZE1vZGU/OiBzdHJpbmdbXTtcbn0gJiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duW10+O1xuLyoqXG4gKiBNYWluIGNsYXNzIGZvciBjb21wb25lbnRzIHVzZWQgZm9yIGFuIGFwcGxpY2F0aW9uIGluIFNBUCBGaW9yaSBlbGVtZW50cy5cbiAqXG4gKiBBcHBsaWNhdGlvbiBkZXZlbG9wZXJzIHVzaW5nIHRoZSB0ZW1wbGF0ZXMgYW5kIGJ1aWxkaW5nIGJsb2NrcyBwcm92aWRlZCBieSBTQVAgRmlvcmkgZWxlbWVudHMgc2hvdWxkIGNyZWF0ZSB0aGVpciBhcHBzIGJ5IGV4dGVuZGluZyB0aGlzIGNvbXBvbmVudC5cbiAqIFRoaXMgZW5zdXJlcyB0aGF0IGFsbCB0aGUgbmVjZXNzYXJ5IHNlcnZpY2VzIHRoYXQgeW91IG5lZWQgZm9yIHRoZSBidWlsZGluZyBibG9ja3MgYW5kIHRlbXBsYXRlcyB0byB3b3JrIHByb3Blcmx5IGFyZSBzdGFydGVkLlxuICpcbiAqIFdoZW4geW91IHVzZSBzYXAuZmUuY29yZS5BcHBDb21wb25lbnQgYXMgdGhlIGJhc2UgY29tcG9uZW50LCB5b3UgYWxzbyBuZWVkIHRvIHVzZSBhIHJvb3RWaWV3LiBTQVAgRmlvcmkgZWxlbWVudHMgcHJvdmlkZXMgdHdvIG9wdGlvbnM6IDxici8+XG4gKiAgLSBzYXAuZmUuY29yZS5yb290Vmlldy5OYXZDb250YWluZXIgd2hlbiB1c2luZyBzYXAubS5yb3V0aW5nLlJvdXRlciA8YnIvPlxuICogIC0gc2FwLmZlLmNvcmUucm9vdFZpZXcuRmNsIHdoZW4gdXNpbmcgc2FwLmYucm91dGluZy5Sb3V0ZXIgKEZDTCB1c2UgY2FzZSkgPGJyLz5cbiAqXG4gKiBAaGlkZWNvbnN0cnVjdG9yXG4gKiBAcHVibGljXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLkFwcENvbXBvbmVudFwiLCB7XG5cdGNvbmZpZzoge1xuXHRcdGZ1bGxXaWR0aDogdHJ1ZVxuXHR9LFxuXHRtYW5pZmVzdDoge1xuXHRcdFwic2FwLnVpNVwiOiB7XG5cdFx0XHRzZXJ2aWNlczoge1xuXHRcdFx0XHRyZXNvdXJjZU1vZGVsOiB7XG5cdFx0XHRcdFx0ZmFjdG9yeU5hbWU6IFwic2FwLmZlLmNvcmUuc2VydmljZXMuUmVzb3VyY2VNb2RlbFNlcnZpY2VcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIixcblx0XHRcdFx0XHRzZXR0aW5nczoge1xuXHRcdFx0XHRcdFx0YnVuZGxlczogW1wic2FwLmZlLmNvcmUubWVzc2FnZWJ1bmRsZVwiXSxcblx0XHRcdFx0XHRcdG1vZGVsTmFtZTogXCJzYXAuZmUuaTE4blwiXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRyb3V0aW5nU2VydmljZToge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLlJvdXRpbmdTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0c2hlbGxTZXJ2aWNlczoge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLlNoZWxsU2VydmljZXNcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRTaGVsbFVJU2VydmljZToge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC51c2hlbGwudWk1c2VydmljZS5TaGVsbFVJU2VydmljZVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdG5hdmlnYXRpb25TZXJ2aWNlOiB7XG5cdFx0XHRcdFx0ZmFjdG9yeU5hbWU6IFwic2FwLmZlLmNvcmUuc2VydmljZXMuTmF2aWdhdGlvblNlcnZpY2VcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRlbnZpcm9ubWVudENhcGFiaWxpdGllczoge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLkVudmlyb25tZW50U2VydmljZVwiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNpZGVFZmZlY3RzU2VydmljZToge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLlNpZGVFZmZlY3RzU2VydmljZVwiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFzeW5jQ29tcG9uZW50U2VydmljZToge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLkFzeW5jQ29tcG9uZW50U2VydmljZVwiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZToge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLkNvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZVwiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5Db2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0dGVsZW1ldHJ5U2VydmljZToge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLlRlbGVtZXRyeVNlcnZpY2VcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHR2YWx1ZUhlbHBIaXN0b3J5U2VydmljZToge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLlZhbHVlSGVscEhpc3RvcnlTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Q29sbGFib3JhdGl2ZURyYWZ0U2VydmljZToge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLkNvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2VcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRDb250ZXh0U2hhcmluZ1NlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5Db250ZXh0U2hhcmluZ1NlcnZpY2VcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIlxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0cm9vdFZpZXc6IHtcblx0XHRcdFx0dmlld05hbWU6IE5BVkNPTkYuTkFWQ09OVEFJTkVSLlZJRVdOQU1FLFxuXHRcdFx0XHR0eXBlOiBcIlhNTFwiLFxuXHRcdFx0XHRhc3luYzogdHJ1ZSxcblx0XHRcdFx0aWQ6IFwiYXBwUm9vdFZpZXdcIlxuXHRcdFx0fSxcblx0XHRcdHJvdXRpbmc6IHtcblx0XHRcdFx0Y29uZmlnOiB7XG5cdFx0XHRcdFx0Y29udHJvbElkOiBcImFwcENvbnRlbnRcIixcblx0XHRcdFx0XHRyb3V0ZXJDbGFzczogTkFWQ09ORi5OQVZDT05UQUlORVIuUk9VVEVSQ0xBU1MsXG5cdFx0XHRcdFx0dmlld1R5cGU6IFwiWE1MXCIsXG5cdFx0XHRcdFx0Y29udHJvbEFnZ3JlZ2F0aW9uOiBcInBhZ2VzXCIsXG5cdFx0XHRcdFx0YXN5bmM6IHRydWUsXG5cdFx0XHRcdFx0Y29udGFpbmVyT3B0aW9uczoge1xuXHRcdFx0XHRcdFx0cHJvcGFnYXRlTW9kZWw6IHRydWVcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdGRlc2lnbnRpbWU6IFwic2FwL2ZlL2NvcmUvZGVzaWdudGltZS9BcHBDb21wb25lbnQuZGVzaWdudGltZVwiLFxuXG5cdGxpYnJhcnk6IFwic2FwLmZlLmNvcmVcIlxufSlcbmNsYXNzIEFwcENvbXBvbmVudCBleHRlbmRzIFVJQ29tcG9uZW50IGltcGxlbWVudHMgSUFzeW5jQ29udGVudENyZWF0aW9uIHtcblx0QGltcGxlbWVudEludGVyZmFjZShcInNhcC51aS5jb3JlLklBc3luY0NvbnRlbnRDcmVhdGlvblwiKVxuXHRfX2ltcGxlbWVudHNfX3NhcF91aV9jb3JlX0lBc3luY0NvbnRlbnRDcmVhdGlvbiA9IHRydWU7XG5cblx0c3RhdGljIGluc3RhbmNlTWFwOiBSZWNvcmQ8c3RyaW5nLCBBcHBDb21wb25lbnQ+ID0ge307XG5cblx0cHJpdmF0ZSBfb1JvdXRlclByb3h5ITogUm91dGVyUHJveHk7XG5cblx0cHJpdmF0ZSBfb0FwcFN0YXRlSGFuZGxlciE6IEFwcFN0YXRlSGFuZGxlcjtcblxuXHRwcml2YXRlIGJJbml0aWFsaXplUm91dGluZz86IGJvb2xlYW47XG5cblx0cHJpdmF0ZSBfb0RpYWdub3N0aWNzITogRGlhZ25vc3RpY3M7XG5cblx0cHJpdmF0ZSBlbnRpdHlDb250YWluZXIhOiBQcm9taXNlPHZvaWQ+O1xuXG5cdHByaXZhdGUgc3RhcnR1cE1vZGU6IHN0cmluZyA9IFN0YXJ0dXBNb2RlLk5vcm1hbDtcblxuXHRwcml2YXRlIF9zdGFydGVkU2VydmljZXM6IFNlcnZpY2U8dW5rbm93bj5bXSA9IFtdO1xuXG5cdHB1YmxpYyBpbml0aWFsaXplZCE6IFByb21pc2U8dm9pZD47XG5cblx0cHJpdmF0ZSBfaW5pdGlhbGl6ZWRLZWVwZXIhOiBQcm9taXNlS2VlcGVyPHZvaWQ+O1xuXG5cdHB1YmxpYyBpc0V4aXRpbmcgPSBmYWxzZTtcblxuXHRwdWJsaWMgcGFnZUNvbmZpZ3VyYXRpb25DaGFuZ2VzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7fTtcblxuXHRfaXNGY2xFbmFibGVkKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IG9NYW5pZmVzdFVJNSA9IHRoaXMuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC51aTVcIik7XG5cdFx0cmV0dXJuIG9NYW5pZmVzdFVJNT8ucm91dGluZz8uY29uZmlnPy5yb3V0ZXJDbGFzcyA9PT0gTkFWQ09ORi5GQ0wuUk9VVEVSQ0xBU1M7XG5cdH1cblxuXHQvKipcblx0ICogUHJvdmlkZXMgYSBob29rIHRvIGluaXRpYWxpemUgZmVhdHVyZSB0b2dnbGVzLlxuXHQgKlxuXHQgKiBUaGlzIGhvb2sgaXMgYmVpbmcgY2FsbGVkIGJ5IHRoZSBTQVAgRmlvcmkgZWxlbWVudHMgQXBwQ29tcG9uZW50IGF0IHRoZSB0aW1lIGZlYXR1cmUgdG9nZ2xlcyBjYW4gYmUgaW5pdGlhbGl6ZWQuXG5cdCAqIFRvIGNoYW5nZSBwYWdlIGNvbmZpZ3VyYXRpb24gdXNlIHRoZSB7QGxpbmsgc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50I2NoYW5nZVBhZ2VDb25maWd1cmF0aW9ufSBtZXRob2QuXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHdpdGhvdXQgYW55IHZhbHVlIHRvIGFsbG93IGFzeW5jaHJvbm91cyBwcm9jZXNzZXNcblx0ICovXG5cdGFzeW5jIGluaXRpYWxpemVGZWF0dXJlVG9nZ2xlcygpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHQvLyB0aGlzIG1ldGhvZCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBhcHBsaWNhdGlvbnNcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hhbmdlcyB0aGUgcGFnZSBjb25maWd1cmF0aW9uIG9mIFNBUCBGaW9yaSBlbGVtZW50cy5cblx0ICpcblx0ICogVGhpcyBtZXRob2QgZW5hYmxlcyB5b3UgdG8gY2hhbmdlIHRoZSBwYWdlIGNvbmZpZ3VyYXRpb24gb2YgU0FQIEZpb3JpIGVsZW1lbnRzLlxuXHQgKlxuXHQgKiBAcGFyYW0gcGFnZUlkIFRoZSBJRCBvZiB0aGUgcGFnZSBmb3Igd2hpY2ggdGhlIGNvbmZpZ3VyYXRpb24gaXMgdG8gYmUgY2hhbmdlZC5cblx0ICogQHBhcmFtIHBhdGggVGhlIHBhdGggaW4gdGhlIHBhZ2Ugc2V0dGluZ3MgZm9yIHdoaWNoIHRoZSBjb25maWd1cmF0aW9uIGlzIHRvIGJlIGNoYW5nZWQuXG5cdCAqIEBwYXJhbSB2YWx1ZSBUaGUgbmV3IHZhbHVlIG9mIHRoZSBjb25maWd1cmF0aW9uLiBUaGlzIGNvdWxkIGJlIGEgcGxhaW4gdmFsdWUgbGlrZSBhIHN0cmluZywgb3IgYSBCb29sZWFuLCBvciBhIHN0cnVjdHVyZWQgb2JqZWN0LlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRjaGFuZ2VQYWdlQ29uZmlndXJhdGlvbihwYWdlSWQ6IHN0cmluZywgcGF0aDogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IHZvaWQge1xuXHRcdGNoYW5nZUNvbmZpZ3VyYXRpb24odGhpcy5nZXRNYW5pZmVzdCgpLCBwYWdlSWQsIHBhdGgsIHZhbHVlLCB0cnVlLCB0aGlzKSBhcyBNYW5pZmVzdENvbnRlbnQ7XG5cdH1cblxuXHQvKipcblx0ICogQ2xlYW5zIGFsbCByZWdpc3RlcmVkIHBhZ2UgY29uZmlndXJhdGlvbiBjaGFuZ2VzLlxuXHQgKi9cblx0Y2xlYW5QYWdlQ29uZmlndXJhdGlvbkNoYW5nZXMoKTogdm9pZCB7XG5cdFx0dGhpcy5wYWdlQ29uZmlndXJhdGlvbkNoYW5nZXMgPSB7fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYSByZWZlcmVuY2UgdG8gdGhlIFJvdXRlclByb3h5LlxuXHQgKlxuXHQgKiBAcmV0dXJucyBBIFJlZmVyZW5jZSB0byB0aGUgUm91dGVyUHJveHlcblx0ICogQGZpbmFsXG5cdCAqL1xuXHRnZXRSb3V0ZXJQcm94eSgpOiBSb3V0ZXJQcm94eSB7XG5cdFx0cmV0dXJuIHRoaXMuX29Sb3V0ZXJQcm94eTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYSByZWZlcmVuY2UgdG8gdGhlIEFwcFN0YXRlSGFuZGxlci5cblx0ICpcblx0ICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIEFwcFN0YXRlSGFuZGxlclxuXHQgKiBAZmluYWxcblx0ICovXG5cdGdldEFwcFN0YXRlSGFuZGxlcigpOiBBcHBTdGF0ZUhhbmRsZXIge1xuXHRcdHJldHVybiB0aGlzLl9vQXBwU3RhdGVIYW5kbGVyO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBhIHJlZmVyZW5jZSB0byB0aGUgbmF2L0ZDTCBDb250cm9sbGVyLlxuXHQgKlxuXHQgKiBAcmV0dXJucyAgQSByZWZlcmVuY2UgdG8gdGhlIEZDTCBDb250cm9sbGVyXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0Z2V0Um9vdFZpZXdDb250cm9sbGVyKCk6IFJvb3RWaWV3QmFzZUNvbnRyb2xsZXIge1xuXHRcdHJldHVybiB0aGlzLmdldFJvb3RDb250cm9sKCkuZ2V0Q29udHJvbGxlcigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgTmF2Q29udGFpbmVyIGNvbnRyb2wgb3IgdGhlIEZDTCBjb250cm9sLlxuXHQgKlxuXHQgKiBAcmV0dXJucyAgQSByZWZlcmVuY2UgdG8gTmF2Q29udGFpbmVyIGNvbnRyb2wgb3IgdGhlIEZDTCBjb250cm9sXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0Z2V0Um9vdENvbnRhaW5lcigpOiBOYXZDb250YWluZXIgfCBGbGV4aWJsZUNvbHVtbkxheW91dCB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0Um9vdENvbnRyb2woKS5nZXRDb250ZW50KClbMF0gYXMgTmF2Q29udGFpbmVyIHwgRmxleGlibGVDb2x1bW5MYXlvdXQ7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBzdGFydHVwIG1vZGUgb2YgdGhlIGFwcC5cblx0ICpcblx0ICogQHJldHVybnMgVGhlIHN0YXJ0dXAgbW9kZVxuXHQgKi9cblx0Z2V0U3RhcnR1cE1vZGUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5zdGFydHVwTW9kZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIHN0YXJ0dXAgbW9kZSBmb3IgdGhlIGFwcCB0byAnQ3JlYXRlJy5cblx0ICpcblx0ICovXG5cdHNldFN0YXJ0dXBNb2RlQ3JlYXRlKCk6IHZvaWQge1xuXHRcdHRoaXMuc3RhcnR1cE1vZGUgPSBTdGFydHVwTW9kZS5DcmVhdGU7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IHRoZSBzdGFydHVwIG1vZGUgZm9yIHRoZSBhcHAgdG8gJ0F1dG9DcmVhdGUnLlxuXHQgKlxuXHQgKi9cblx0c2V0U3RhcnR1cE1vZGVBdXRvQ3JlYXRlKCk6IHZvaWQge1xuXHRcdHRoaXMuc3RhcnR1cE1vZGUgPSBTdGFydHVwTW9kZS5BdXRvQ3JlYXRlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB0aGUgc3RhcnR1cCBtb2RlIGZvciB0aGUgYXBwIHRvICdEZWVwbGluaycuXG5cdCAqXG5cdCAqL1xuXHRzZXRTdGFydHVwTW9kZURlZXBsaW5rKCk6IHZvaWQge1xuXHRcdHRoaXMuc3RhcnR1cE1vZGUgPSBTdGFydHVwTW9kZS5EZWVwbGluaztcblx0fVxuXG5cdGluaXQoKTogdm9pZCB7XG5cdFx0dGhpcy5faW5pdGlhbGl6ZWRLZWVwZXIgPSBuZXcgUHJvbWlzZUtlZXBlcjx2b2lkPigpO1xuXHRcdHRoaXMuaW5pdGlhbGl6ZWQgPSB0aGlzLl9pbml0aWFsaXplZEtlZXBlci5wcm9taXNlO1xuXHRcdGNvbnN0IHVpTW9kZWwgPSBuZXcgSlNPTk1vZGVsKHtcblx0XHRcdGVkaXRNb2RlOiBsaWJyYXJ5LkVkaXRNb2RlLkRpc3BsYXksXG5cdFx0XHRpc0VkaXRhYmxlOiBmYWxzZSxcblx0XHRcdGRyYWZ0U3RhdHVzOiBsaWJyYXJ5LkRyYWZ0U3RhdHVzLkNsZWFyLFxuXHRcdFx0YnVzeTogZmFsc2UsXG5cdFx0XHRidXN5TG9jYWw6IHt9LFxuXHRcdFx0cGFnZXM6IHt9XG5cdFx0fSk7XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWwgPSBuZXcgSlNPTk1vZGVsKHtcblx0XHRcdHBhZ2VzOiB7fVxuXHRcdH0pO1xuXHRcdC8vIHNldCB0aGUgYmluZGluZyBPbmVXYXkgZm9yIHVpTW9kZWwgdG8gcHJldmVudCBjaGFuZ2VzIGlmIGNvbnRyb2xsZXIgZXh0ZW5zaW9ucyBtb2RpZnkgYSBib3VuZCBwcm9wZXJ0eSBvZiBhIGNvbnRyb2xcblx0XHR1aU1vZGVsLnNldERlZmF1bHRCaW5kaW5nTW9kZShcIk9uZVdheVwiKTtcblx0XHQvLyBmb3IgaW50ZXJuYWwgbW9kZWwgYmluZGluZyBuZWVkcyB0byBiZSB0d28gd2F5XG5cdFx0TW9kZWxIZWxwZXIuZW5oYW5jZVVpSlNPTk1vZGVsKHVpTW9kZWwsIGxpYnJhcnkpO1xuXHRcdE1vZGVsSGVscGVyLmVuaGFuY2VJbnRlcm5hbEpTT05Nb2RlbChvSW50ZXJuYWxNb2RlbCk7XG5cblx0XHR0aGlzLnNldE1vZGVsKHVpTW9kZWwsIFwidWlcIik7XG5cdFx0dGhpcy5zZXRNb2RlbChvSW50ZXJuYWxNb2RlbCwgXCJpbnRlcm5hbFwiKTtcblxuXHRcdHRoaXMuYkluaXRpYWxpemVSb3V0aW5nID0gdGhpcy5iSW5pdGlhbGl6ZVJvdXRpbmcgIT09IHVuZGVmaW5lZCA/IHRoaXMuYkluaXRpYWxpemVSb3V0aW5nIDogdHJ1ZTtcblx0XHR0aGlzLl9vUm91dGVyUHJveHkgPSBuZXcgUm91dGVyUHJveHkoKTtcblx0XHR0aGlzLl9vQXBwU3RhdGVIYW5kbGVyID0gbmV3IEFwcFN0YXRlSGFuZGxlcih0aGlzKTtcblx0XHR0aGlzLl9vRGlhZ25vc3RpY3MgPSBuZXcgRGlhZ25vc3RpY3MoKTtcblxuXHRcdGNvbnN0IG9Nb2RlbCA9IHRoaXMuZ2V0TW9kZWwoKTtcblx0XHRpZiAob01vZGVsPy5pc0E/LjxPRGF0YU1vZGVsPihcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YU1vZGVsXCIpKSB7XG5cdFx0XHRNb2RlbEhlbHBlci5lbmhhbmNlT0RhdGFNb2RlbChvTW9kZWwpO1xuXHRcdFx0dGhpcy5lbnRpdHlDb250YWluZXIgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCkucmVxdWVzdE9iamVjdChcIi8kRW50aXR5Q29udGFpbmVyL1wiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gbm90IGFuIE9EYXRhIHY0IHNlcnZpY2Vcblx0XHRcdHRoaXMuZW50aXR5Q29udGFpbmVyID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC5mZVwiKT8uYXBwPy5kaXNhYmxlQ29sbGFib3JhdGlvbkRyYWZ0KSB7XG5cdFx0XHQvLyBkaXNhYmxlIHRoZSBjb2xsYWJvcmF0aW9uIGRyYWZ0IGdsb2JhbGx5IGluIGNhc2UgcHJpdmF0ZSBtYW5pZmVzdCBmbGFnIGlzIHNldFxuXHRcdFx0Ly8gdGhpcyBhbGxvd3MgY3VzdG9tZXJzIHRvIGRpc2FibGUgdGhlIGNvbGxhYm9yYXRpb24gZHJhZnQgaW4gY2FzZSB3ZSBydW4gaW50byBpc3N1ZXMgd2l0aCB0aGUgZmlyc3QgZGVsaXZlcnlcblx0XHRcdC8vIHRoaXMgd2lsbCBiZSByZW1vdmVkIHdpdGggdGhlIG5leHQgUy80IHJlbGVhc2Vcblx0XHRcdE1vZGVsSGVscGVyLmRpc2FibGVDb2xsYWJvcmF0aW9uRHJhZnQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGNvbnN0IG9NYW5pZmVzdFVJNSA9IHRoaXMuZ2V0TWFuaWZlc3QoKVtcInNhcC51aTVcIl07XG5cdFx0dGhpcy5jaGVja1JvdXRpbmdDb25maWd1cmF0aW9uKG9NYW5pZmVzdFVJNSk7XG5cblx0XHQvLyB0aGUgaW5pdCBmdW5jdGlvbiBjb25maWd1cmVzIHRoZSByb3V0aW5nIGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MgYWJvdmVcblx0XHQvLyBpdCB3aWxsIGNhbGwgdGhlIGNyZWF0ZUNvbnRlbnQgZnVuY3Rpb24gdG8gaW5zdGFudGlhdGUgdGhlIFJvb3RWaWV3IGFuZCBhZGQgaXQgdG8gdGhlIFVJQ29tcG9uZW50IGFnZ3JlZ2F0aW9uc1xuXG5cdFx0c3VwZXIuaW5pdCgpO1xuXHRcdEFwcENvbXBvbmVudC5pbnN0YW5jZU1hcFt0aGlzLmdldElkKCldID0gdGhpcztcblx0fVxuXG5cdHByaXZhdGUgY2hlY2tSb3V0aW5nQ29uZmlndXJhdGlvbihvTWFuaWZlc3RVSTU6IE1hbmlmZXN0Q29udGVudFtcInNhcC51aTVcIl0pOiB2b2lkIHtcblx0XHRpZiAob01hbmlmZXN0VUk1Py5yb290Vmlldz8udmlld05hbWUpIHtcblx0XHRcdC8vIFRoZSBhcHBsaWNhdGlvbiBzcGVjaWZpZWQgYW4gb3duIHJvb3QgdmlldyBpbiB0aGUgbWFuaWZlc3RcblxuXHRcdFx0Ly8gUm9vdCBWaWV3IHdhcyBtb3ZlZCBmcm9tIHNhcC5mZS50ZW1wbGF0ZXMgdG8gc2FwLmZlLmNvcmUgLSBrZWVwIGl0IGNvbXBhdGlibGVcblx0XHRcdGlmIChvTWFuaWZlc3RVSTUucm9vdFZpZXcudmlld05hbWUgPT09IE5BVkNPTkYuRkNMLlZJRVdOQU1FX0NPTVBBVElCSUxJVFkpIHtcblx0XHRcdFx0b01hbmlmZXN0VUk1LnJvb3RWaWV3LnZpZXdOYW1lID0gTkFWQ09ORi5GQ0wuVklFV05BTUU7XG5cdFx0XHR9IGVsc2UgaWYgKG9NYW5pZmVzdFVJNS5yb290Vmlldy52aWV3TmFtZSA9PT0gTkFWQ09ORi5OQVZDT05UQUlORVIuVklFV05BTUVfQ09NUEFUSUJJTElUWSkge1xuXHRcdFx0XHRvTWFuaWZlc3RVSTUucm9vdFZpZXcudmlld05hbWUgPSBOQVZDT05GLk5BVkNPTlRBSU5FUi5WSUVXTkFNRTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKFxuXHRcdFx0XHRvTWFuaWZlc3RVSTUucm9vdFZpZXcudmlld05hbWUgPT09IE5BVkNPTkYuRkNMLlZJRVdOQU1FICYmXG5cdFx0XHRcdG9NYW5pZmVzdFVJNS5yb3V0aW5nPy5jb25maWc/LnJvdXRlckNsYXNzID09PSBOQVZDT05GLkZDTC5ST1VURVJDTEFTU1xuXHRcdFx0KSB7XG5cdFx0XHRcdExvZy5pbmZvKGBSb290Y29udGFpbmVyOiBcIiR7TkFWQ09ORi5GQ0wuVklFV05BTUV9XCIgLSBSb3V0ZXJjbGFzczogXCIke05BVkNPTkYuRkNMLlJPVVRFUkNMQVNTfVwiYCk7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRvTWFuaWZlc3RVSTUucm9vdFZpZXcudmlld05hbWUgPT09IE5BVkNPTkYuTkFWQ09OVEFJTkVSLlZJRVdOQU1FICYmXG5cdFx0XHRcdG9NYW5pZmVzdFVJNS5yb3V0aW5nPy5jb25maWc/LnJvdXRlckNsYXNzID09PSBOQVZDT05GLk5BVkNPTlRBSU5FUi5ST1VURVJDTEFTU1xuXHRcdFx0KSB7XG5cdFx0XHRcdExvZy5pbmZvKGBSb290Y29udGFpbmVyOiBcIiR7TkFWQ09ORi5OQVZDT05UQUlORVIuVklFV05BTUV9XCIgLSBSb3V0ZXJjbGFzczogXCIke05BVkNPTkYuTkFWQ09OVEFJTkVSLlJPVVRFUkNMQVNTfVwiYCk7XG5cdFx0XHR9IGVsc2UgaWYgKG9NYW5pZmVzdFVJNS5yb290Vmlldz8udmlld05hbWU/LmluY2x1ZGVzKFwic2FwLmZlLmNvcmUucm9vdFZpZXdcIikpIHtcblx0XHRcdFx0dGhyb3cgRXJyb3IoXG5cdFx0XHRcdFx0YFxcbldyb25nIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBjb3VwbGUgKHJvb3RWaWV3L3JvdXRlckNsYXNzKSBpbiBtYW5pZmVzdCBmaWxlLlxcbmAgK1xuXHRcdFx0XHRcdFx0YEN1cnJlbnQgdmFsdWVzIGFyZSA6KCR7b01hbmlmZXN0VUk1LnJvb3RWaWV3LnZpZXdOYW1lfS8ke1xuXHRcdFx0XHRcdFx0XHRvTWFuaWZlc3RVSTUucm91dGluZz8uY29uZmlnPy5yb3V0ZXJDbGFzcyB8fCBcIjxtaXNzaW5nIHJvdXRlciBjbGFzcz5cIlxuXHRcdFx0XHRcdFx0fSlcXG5gICtcblx0XHRcdFx0XHRcdGBFeHBlY3RlZCB2YWx1ZXMgYXJlIFxcbmAgK1xuXHRcdFx0XHRcdFx0YFxcdCAtICgke05BVkNPTkYuTkFWQ09OVEFJTkVSLlZJRVdOQU1FfS8ke05BVkNPTkYuTkFWQ09OVEFJTkVSLlJPVVRFUkNMQVNTfSlcXG5gICtcblx0XHRcdFx0XHRcdGBcXHQgLSAoJHtOQVZDT05GLkZDTC5WSUVXTkFNRX0vJHtOQVZDT05GLkZDTC5ST1VURVJDTEFTU30pYFxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0TG9nLmluZm8oYFJvb3Rjb250YWluZXI6IFwiJHtvTWFuaWZlc3RVSTUucm9vdFZpZXcudmlld05hbWV9XCIgLSBSb3V0ZXJjbGFzczogXCIke05BVkNPTkYuTkFWQ09OVEFJTkVSLlJPVVRFUkNMQVNTfVwiYCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgb25TZXJ2aWNlc1N0YXJ0ZWQoYWxsU2VydmljZXM6IFNlcnZpY2U8dW5rbm93bj5bXSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRoaXMuX3N0YXJ0ZWRTZXJ2aWNlcyA9IGFsbFNlcnZpY2VzO1xuXHRcdGF3YWl0IHRoaXMuaW5pdGlhbGl6ZUZlYXR1cmVUb2dnbGVzKCk7XG5cblx0XHQvL3JvdXRlciBtdXN0IGJlIHN0YXJ0ZWQgb25jZSB0aGUgcm9vdGNvbnRhaW5lciBpcyBpbml0aWFsaXplZFxuXHRcdC8vc3RhcnRpbmcgb2YgdGhlIHJvdXRlclxuXHRcdGNvbnN0IGZpbmFsaXplZFJvdXRpbmdJbml0aWFsaXphdGlvbiA9ICgpOiB2b2lkID0+IHtcblx0XHRcdHRoaXMuZW50aXR5Q29udGFpbmVyXG5cdFx0XHRcdC50aGVuKGFzeW5jICgpID0+IHtcblx0XHRcdFx0XHRpZiAodGhpcy5nZXRSb290Vmlld0NvbnRyb2xsZXIoKS5hdHRhY2hSb3V0ZU1hdGNoZXJzKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmdldFJvb3RWaWV3Q29udHJvbGxlcigpLmF0dGFjaFJvdXRlTWF0Y2hlcnMoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dGhpcy5nZXRSb3V0ZXIoKS5pbml0aWFsaXplKCk7XG5cdFx0XHRcdFx0dGhpcy5nZXRSb3V0ZXJQcm94eSgpLmluaXQodGhpcywgdGhpcy5faXNGY2xFbmFibGVkKCkpO1xuXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0VmFsdWVIZWxwSGlzdG9yeVNlcnZpY2UoKS5yZWdpc3RlclNoZWxsSG9vaygpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IG9SZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSE7XG5cblx0XHRcdFx0XHR0aGlzLmdldFJvb3RWaWV3Q29udHJvbGxlcigpLmRpc3BsYXlFcnJvclBhZ2UoXG5cdFx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQVBQX0NPTVBPTkVOVF9TQVBGRV9BUFBTVEFSVF9URUNITklDQUxfSVNTVUVTXCIpLFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0aXRsZTogb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9FUlJPUlwiKSxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IGVycm9yLm1lc3NhZ2Vcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KTtcblx0XHR9O1xuXG5cdFx0aWYgKHRoaXMuYkluaXRpYWxpemVSb3V0aW5nKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRSb3V0aW5nU2VydmljZSgpXG5cdFx0XHRcdC5pbml0aWFsaXplUm91dGluZygpXG5cdFx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0XHRpZiAodGhpcy5nZXRSb290Vmlld0NvbnRyb2xsZXIoKSkge1xuXHRcdFx0XHRcdFx0ZmluYWxpemVkUm91dGluZ0luaXRpYWxpemF0aW9uKCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRoaXMuZ2V0Um9vdENvbnRyb2woKS5hdHRhY2hBZnRlckluaXQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRmaW5hbGl6ZWRSb3V0aW5nSW5pdGlhbGl6YXRpb24oKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLl9pbml0aWFsaXplZEtlZXBlci5yZXNvbHZlKCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycjogRXJyb3IpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoYGNhbm5vdCBjYW5ub3QgaW5pdGlhbGl6ZSByb3V0aW5nOiAke2Vyci50b1N0cmluZygpfWApO1xuXHRcdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5faW5pdGlhbGl6ZWRLZWVwZXIucmVzb2x2ZSgpO1xuXHRcdH1cblx0fVxuXG5cdGV4aXQoKTogdm9pZCB7XG5cdFx0dGhpcy5fc3RhcnRlZFNlcnZpY2VzID0gW107XG5cdFx0dGhpcy5fb0FwcFN0YXRlSGFuZGxlci5kZXN0cm95KCk7XG5cdFx0dGhpcy5fb1JvdXRlclByb3h5LmRlc3Ryb3koKTtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdGRlbGV0ZSB0aGlzLl9vQXBwU3RhdGVIYW5kbGVyO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0ZGVsZXRlIHRoaXMuX29Sb3V0ZXJQcm94eTtcblx0XHRkZWxldGVNb2RlbENhY2hlRGF0YSh0aGlzLmdldE1ldGFNb2RlbCgpKTtcblx0XHR0aGlzLmdldE1vZGVsKFwidWlcIikuZGVzdHJveSgpO1xuXHRcdHRoaXMuY2xlYW5QYWdlQ29uZmlndXJhdGlvbkNoYW5nZXMoKTtcblx0fVxuXG5cdGdldE1ldGFNb2RlbCgpOiBPRGF0YU1ldGFNb2RlbCB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0fVxuXG5cdGdldERpYWdub3N0aWNzKCk6IERpYWdub3N0aWNzIHtcblx0XHRyZXR1cm4gdGhpcy5fb0RpYWdub3N0aWNzO1xuXHR9XG5cblx0ZGVzdHJveShiU3VwcHJlc3NJbnZhbGlkYXRlPzogYm9vbGVhbik6IHZvaWQge1xuXHRcdHRoaXMuaXNFeGl0aW5nID0gdHJ1ZTtcblxuXHRcdC8vIExFQUtTLCB3aXRoIHdvcmthcm91bmQgZm9yIHNvbWUgRmxleCAvIE1EQyBpc3N1ZVxuXHRcdHRyeSB7XG5cdFx0XHRkZWxldGUgQXBwQ29tcG9uZW50Lmluc3RhbmNlTWFwW3RoaXMuZ2V0SWQoKV07XG5cblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdGRlbGV0ZSAod2luZG93IGFzIHVua25vd24pLl9yb3V0aW5nO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdExvZy5pbmZvKGUgYXMgc3RyaW5nKTtcblx0XHR9XG5cblx0XHQvL1dPUktBUk9VTkQgZm9yIHN0aWNreSBkaXNjYXJkIHJlcXVlc3QgOiBkdWUgdG8gYXN5bmMgY2FsbGJhY2ssIHJlcXVlc3QgdHJpZ2dlcmVkIGJ5IHRoZSBleGl0QXBwbGljYXRpb24gd2lsbCBiZSBzZW5kIGFmdGVyIHRoZSBVSUNvbXBvbmVudC5wcm90b3R5cGUuZGVzdHJveVxuXHRcdC8vc28gd2UgbmVlZCB0byBjb3B5IHRoZSBSZXF1ZXN0b3IgaGVhZGVycyBhcyBpdCB3aWxsIGJlIGRlc3Ryb3lcblxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0Y29uc3Qgb01haW5Nb2RlbCA9IHRoaXMub01vZGVsc1t1bmRlZmluZWRdO1xuXHRcdGxldCBvSGVhZGVycztcblx0XHRpZiAob01haW5Nb2RlbD8ub1JlcXVlc3Rvcikge1xuXHRcdFx0b0hlYWRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCBvTWFpbk1vZGVsLm9SZXF1ZXN0b3IubUhlYWRlcnMpO1xuXHRcdH1cblxuXHRcdC8vIEFzIHdlIG5lZWQgdG8gY2xlYW51cCB0aGUgYXBwbGljYXRpb24gLyBoYW5kbGUgdGhlIGRpcnR5IG9iamVjdCB3ZSBuZWVkIHRvIGNhbGwgb3VyIGNsZWFudXAgYmVmb3JlIHRoZSBtb2RlbHMgYXJlIGRlc3Ryb3llZFxuXHRcdHRoaXMuZ2V0Um91dGluZ1NlcnZpY2UoKT8uYmVmb3JlRXhpdD8uKCk7XG5cdFx0c3VwZXIuZGVzdHJveShiU3VwcHJlc3NJbnZhbGlkYXRlKTtcblx0XHRpZiAob0hlYWRlcnMgJiYgb01haW5Nb2RlbC5vUmVxdWVzdG9yKSB7XG5cdFx0XHRvTWFpbk1vZGVsLm9SZXF1ZXN0b3IubUhlYWRlcnMgPSBvSGVhZGVycztcblx0XHR9XG5cdH1cblxuXHRnZXRSb3V0aW5nU2VydmljZSgpOiBSb3V0aW5nU2VydmljZSB7XG5cdFx0cmV0dXJuIHt9IGFzIFJvdXRpbmdTZXJ2aWNlOyAvLyBvdmVycmlkZW4gYXQgcnVudGltZVxuXHR9XG5cblx0Z2V0U2hlbGxTZXJ2aWNlcygpOiBJU2hlbGxTZXJ2aWNlcyB7XG5cdFx0cmV0dXJuIHt9IGFzIElTaGVsbFNlcnZpY2VzOyAvLyBvdmVycmlkZW4gYXQgcnVudGltZVxuXHR9XG5cblx0Z2V0TmF2aWdhdGlvblNlcnZpY2UoKTogTmF2aWdhdGlvblNlcnZpY2Uge1xuXHRcdHJldHVybiB7fSBhcyBOYXZpZ2F0aW9uU2VydmljZTsgLy8gb3ZlcnJpZGVuIGF0IHJ1bnRpbWVcblx0fVxuXG5cdGdldFNpZGVFZmZlY3RzU2VydmljZSgpOiBTaWRlRWZmZWN0c1NlcnZpY2Uge1xuXHRcdHJldHVybiB7fSBhcyBTaWRlRWZmZWN0c1NlcnZpY2U7XG5cdH1cblxuXHRnZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpOiBFbnZpcm9ubWVudENhcGFiaWxpdGllc1NlcnZpY2Uge1xuXHRcdHJldHVybiB7fSBhcyBFbnZpcm9ubWVudENhcGFiaWxpdGllc1NlcnZpY2U7XG5cdH1cblxuXHRnZXRDb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2UoKTogQ29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlIHtcblx0XHRyZXR1cm4ge30gYXMgQ29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlO1xuXHR9XG5cblx0Z2V0Q29sbGFib3JhdGl2ZVRvb2xzU2VydmljZSgpOiBDb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlIHtcblx0XHRyZXR1cm4ge30gYXMgQ29sbGFib3JhdGl2ZVRvb2xzU2VydmljZTtcblx0fVxuXG5cdGdldENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2UoKTogQ29sbGFib3JhdGl2ZURyYWZ0U2VydmljZSB7XG5cdFx0cmV0dXJuIHt9IGFzIENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2U7XG5cdH1cblxuXHRnZXRDb250ZXh0U2hhcmluZ1NlcnZpY2UoKTogQ29udGV4dFNoYXJpbmdTZXJ2aWNlIHtcblx0XHRyZXR1cm4ge30gYXMgQ29udGV4dFNoYXJpbmdTZXJ2aWNlO1xuXHR9XG5cblx0Z2V0VGVsZW1ldHJ5U2VydmljZSgpOiBUZWxlbWV0cnlTZXJ2aWNlIHtcblx0XHRyZXR1cm4ge30gYXMgVGVsZW1ldHJ5U2VydmljZTtcblx0fVxuXG5cdGdldFZhbHVlSGVscEhpc3RvcnlTZXJ2aWNlKCk6IFZhbHVlSGVscEhpc3RvcnlTZXJ2aWNlIHtcblx0XHRyZXR1cm4ge30gYXMgVmFsdWVIZWxwSGlzdG9yeVNlcnZpY2U7XG5cdH1cblxuXHRhc3luYyBnZXRTdGFydHVwUGFyYW1ldGVycygpOiBQcm9taXNlPFN0YXJ0dXBQYXJhbWV0ZXJzPiB7XG5cdFx0Y29uc3Qgb0NvbXBvbmVudERhdGEgPSB0aGlzLmdldENvbXBvbmVudERhdGEoKTtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKChvQ29tcG9uZW50RGF0YSAmJiBvQ29tcG9uZW50RGF0YS5zdGFydHVwUGFyYW1ldGVycykgfHwge30pO1xuXHR9XG5cblx0cmVzdG9yZSgpOiB2b2lkIHtcblx0XHQvLyBjYWxsZWQgYnkgRkxQIHdoZW4gYXBwIHNhcC1rZWVwLWFsaXZlIGlzIGVuYWJsZWQgYW5kIGFwcCBpcyByZXN0b3JlZFxuXHRcdGZvciAoY29uc3Qgc3RhcnRlZFNlcnZpY2Ugb2YgdGhpcy5fc3RhcnRlZFNlcnZpY2VzKSB7XG5cdFx0XHRzdGFydGVkU2VydmljZS5vblJlc3RvcmU/LigpO1xuXHRcdH1cblx0XHR0aGlzLmdldFJvb3RWaWV3Q29udHJvbGxlcigpLnZpZXdTdGF0ZS5vblJlc3RvcmUoKTtcblx0fVxuXG5cdHN1c3BlbmQoKTogdm9pZCB7XG5cdFx0Ly8gY2FsbGVkIGJ5IEZMUCB3aGVuIGFwcCBzYXAta2VlcC1hbGl2ZSBpcyBlbmFibGVkIGFuZCBhcHAgaXMgc3VzcGVuZGVkXG5cdFx0Zm9yIChjb25zdCBzdGFydGVkU2VydmljZSBvZiB0aGlzLl9zdGFydGVkU2VydmljZXMpIHtcblx0XHRcdHN0YXJ0ZWRTZXJ2aWNlLm9uU3VzcGVuZD8uKCk7XG5cdFx0fVxuXHRcdHRoaXMuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkudmlld1N0YXRlLm9uU3VzcGVuZCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIG5hdmlnYXRlQmFzZWRPblN0YXJ0dXBQYXJhbWV0ZXIgZnVuY3Rpb24gaXMgYSBwdWJsaWMgYXBpIHRoYXQgYWN0cyBhcyBhIHdyYXBwZXIgdG8gX21hbmFnZURlZXBMaW5rU3RhcnR1cCBmdW5jdGlvbi4gSXQgcGFzc2VzIHRoZSBzdGFydHVwIHBhcmFtZXRlcnMgZnVydGhlciB0byBfbWFuYWdlRGVlcExpbmtTdGFydHVwIGZ1bmN0aW9uXG5cdCAqXG5cdCAqIEBwYXJhbSBzdGFydHVwUGFyYW1ldGVycyBEZWZpbmVzIHRoZSBzdGFydHVwIHBhcmFtZXRlcnMgd2hpY2ggaXMgZnVydGhlciBwYXNzZWQgdG8gX21hbmFnZURlZXBMaW5rU3RhcnR1cCBmdW5jdGlvbi5cblx0ICovXG5cblx0YXN5bmMgbmF2aWdhdGVCYXNlZE9uU3RhcnR1cFBhcmFtZXRlcihzdGFydHVwUGFyYW1ldGVyczogU3RhcnR1cFBhcmFtZXRlcnMgfCBudWxsIHwgdW5kZWZpbmVkKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dHJ5IHtcblx0XHRcdGlmICghQnVzeUxvY2tlci5pc0xvY2tlZCh0aGlzLmdldE1vZGVsKFwidWlcIikpKSB7XG5cdFx0XHRcdGlmICghc3RhcnR1cFBhcmFtZXRlcnMpIHtcblx0XHRcdFx0XHRzdGFydHVwUGFyYW1ldGVycyA9IG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3Qgcm91dGluZ1NlcnZpY2UgPSB0aGlzLmdldFJvdXRpbmdTZXJ2aWNlKCk7XG5cdFx0XHRcdGF3YWl0IHJvdXRpbmdTZXJ2aWNlLl9tYW5hZ2VEZWVwTGlua1N0YXJ0dXAoc3RhcnR1cFBhcmFtZXRlcnMpO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGV4Y2VwdGlvbjogdW5rbm93bikge1xuXHRcdFx0TG9nLmVycm9yKGV4Y2VwdGlvbiBhcyBzdHJpbmcpO1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2sodGhpcy5nZXRNb2RlbChcInVpXCIpKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVXNlZCB0byBhbGxvdyBkaXNhYmxpbmcgdGhlIENvbGxhYm9yYXRpb24gTWFuYWdlciBpbnRlZ3JhdGlvbiBmb3IgdGhlIE9WUCB1c2UgY2FzZS5cblx0ICpcblx0ICogQHJldHVybnMgV2hldGhlciB0aGUgY29sbGFib3JhdGlvbiBtYW5hZ2VyIHNlcnZpY2UgaXMgYWN0aXZlLlxuXHQgKi9cblx0aXNDb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2VFbmFibGVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG59XG5cbmludGVyZmFjZSBBcHBDb21wb25lbnQgZXh0ZW5kcyBVSUNvbXBvbmVudCB7XG5cdGdldE1hbmlmZXN0KCk6IE1hbmlmZXN0Q29udGVudDtcblx0Z2V0TWFuaWZlc3RFbnRyeShlbnRyeTogXCJzYXAuYXBwXCIpOiBNYW5pZmVzdENvbnRlbnRbXCJzYXAuYXBwXCJdO1xuXHRnZXRNYW5pZmVzdEVudHJ5KGVudHJ5OiBcInNhcC51aTVcIik6IE1hbmlmZXN0Q29udGVudFtcInNhcC51aTVcIl07XG5cdF9nZXRNYW5pZmVzdEVudHJ5KGVudHJ5OiBcInNhcC51aTVcIiwgbWVyZ2VkOiBib29sZWFuKTogTWFuaWZlc3RDb250ZW50W1wic2FwLnVpNVwiXTtcblx0Z2V0TWFuaWZlc3RFbnRyeShlbnRyeTogXCJzYXAudWlcIik6IE1hbmlmZXN0Q29udGVudFtcInNhcC51aVwiXTtcblx0Z2V0TWFuaWZlc3RFbnRyeShlbnRyeTogXCJzYXAuZmVcIik6IE1hbmlmZXN0Q29udGVudFtcInNhcC5mZVwiXTtcblx0Z2V0TWFuaWZlc3RFbnRyeShlbnRyeTogXCJzYXAuZmlvcmlcIik6IE1hbmlmZXN0Q29udGVudFtcInNhcC5maW9yaVwiXTtcblx0Z2V0Q29tcG9uZW50RGF0YSgpOiBDb21wb25lbnREYXRhO1xuXHRnZXRSb290Q29udHJvbCgpOiB7XG5cdFx0Z2V0Q29udHJvbGxlcigpOiBSb290Vmlld0Jhc2VDb250cm9sbGVyO1xuXHR9ICYgVmlldztcblx0Z2V0TW9kZWwoKTogT0RhdGFNb2RlbDtcblx0Z2V0TW9kZWwobmFtZTogXCJ1aVwiKTogSlNPTk1vZGVsO1xuXHRnZXRNb2RlbChuYW1lOiBzdHJpbmcpOiBNb2RlbCB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQXBwQ29tcG9uZW50O1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7RUFxQ0EsTUFBTUEsV0FBVyxHQUFHQyxPQUFPLENBQUNELFdBQVc7RUFDdkMsTUFBTUUsT0FBTyxHQUFHO0lBQ2ZDLEdBQUcsRUFBRTtNQUNKQyxRQUFRLEVBQUUsMEJBQTBCO01BQ3BDQyxzQkFBc0IsRUFBRSx5Q0FBeUM7TUFDakVDLFdBQVcsRUFBRTtJQUNkLENBQUM7SUFDREMsWUFBWSxFQUFFO01BQ2JILFFBQVEsRUFBRSxtQ0FBbUM7TUFDN0NDLHNCQUFzQixFQUFFLGtEQUFrRDtNQUMxRUMsV0FBVyxFQUFFO0lBQ2Q7RUFDRCxDQUFDO0VBWUQ7RUFDQSxNQUFNRSxRQUFRLEdBQUdDLE1BQU07RUFLdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFaQSxJ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
|
|
@@ -6,7 +6,7 @@ import { defineUI5Class, implementInterface } from "sap/fe/core/helpers/ClassSup
|
|
|
6
6
|
import ModelHelper from "sap/fe/core/helpers/ModelHelper";
|
|
7
7
|
import PromiseKeeper from "sap/fe/core/helpers/PromiseKeeper";
|
|
8
8
|
import library from "sap/fe/core/library";
|
|
9
|
-
import { changeConfiguration
|
|
9
|
+
import { changeConfiguration } from "sap/fe/core/manifestMerger/ChangePageConfiguration";
|
|
10
10
|
import type RootViewBaseController from "sap/fe/core/rootView/RootViewBaseController";
|
|
11
11
|
import type { CollaborationManagerService } from "sap/fe/core/services/CollaborationManagerServiceFactory";
|
|
12
12
|
import type { CollaborativeToolsService } from "sap/fe/core/services/CollaborativeToolsServiceFactory";
|
|
@@ -195,6 +195,8 @@ class AppComponent extends UIComponent implements IAsyncContentCreation {
|
|
|
195
195
|
|
|
196
196
|
public isExiting = false;
|
|
197
197
|
|
|
198
|
+
public pageConfigurationChanges: Record<string, string[]> = {};
|
|
199
|
+
|
|
198
200
|
_isFclEnabled(): boolean {
|
|
199
201
|
const oManifestUI5 = this.getManifestEntry("sap.ui5");
|
|
200
202
|
return oManifestUI5?.routing?.config?.routerClass === NAVCONF.FCL.ROUTERCLASS;
|
|
@@ -225,7 +227,14 @@ class AppComponent extends UIComponent implements IAsyncContentCreation {
|
|
|
225
227
|
* @public
|
|
226
228
|
*/
|
|
227
229
|
changePageConfiguration(pageId: string, path: string, value: unknown): void {
|
|
228
|
-
changeConfiguration(this.getManifest(), pageId, path, value, true);
|
|
230
|
+
changeConfiguration(this.getManifest(), pageId, path, value, true, this) as ManifestContent;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* Cleans all registered page configuration changes.
|
|
235
|
+
*/
|
|
236
|
+
cleanPageConfigurationChanges(): void {
|
|
237
|
+
this.pageConfigurationChanges = {};
|
|
229
238
|
}
|
|
230
239
|
|
|
231
240
|
/**
|
|
@@ -456,7 +465,7 @@ class AppComponent extends UIComponent implements IAsyncContentCreation {
|
|
|
456
465
|
delete this._oRouterProxy;
|
|
457
466
|
deleteModelCacheData(this.getMetaModel());
|
|
458
467
|
this.getModel("ui").destroy();
|
|
459
|
-
cleanPageConfigurationChanges();
|
|
468
|
+
this.cleanPageConfigurationChanges();
|
|
460
469
|
}
|
|
461
470
|
|
|
462
471
|
getMetaModel(): ODataMetaModel {
|