@sapui5/sap.fe.core 1.124.7 → 1.124.8
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/controls/ComponentLoader.js +2 -2
- package/src/sap/fe/core/controls/ComponentLoader.ts +1 -1
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/library.js +1 -1
- 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
|
@@ -104,7 +104,7 @@ sap.ui.define(["sap/fe/core/helpers/ClassSupport", "sap/ui/core/Component", "sap
|
|
|
104
104
|
this.targets.display({
|
|
105
105
|
name: this.getId(),
|
|
106
106
|
prefix: this.prefix,
|
|
107
|
-
routeRelevant:
|
|
107
|
+
routeRelevant: true
|
|
108
108
|
});
|
|
109
109
|
};
|
|
110
110
|
ComponentLoader.render = function render(rm, loader) {
|
|
@@ -140,4 +140,4 @@ sap.ui.define(["sap/fe/core/helpers/ClassSupport", "sap/ui/core/Component", "sap
|
|
|
140
140
|
_exports = ComponentLoader;
|
|
141
141
|
return _exports;
|
|
142
142
|
}, false);
|
|
143
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb21wb25lbnRMb2FkZXIiLCJkZWZpbmVVSTVDbGFzcyIsInByb3BlcnR5IiwidHlwZSIsInJlcXVpcmVkIiwiYWdncmVnYXRpb24iLCJtdWx0aXBsZSIsImlzRGVmYXVsdCIsImluaXQiLCJ0YXJnZXRzIiwiZ2V0VGFyZ2V0cyIsImNvbXBvbmVudCIsIkNvbXBvbmVudCIsImdldE93bmVyQ29tcG9uZW50Rm9yIiwiaXNBIiwiRXJyb3IiLCJhZGRUYXJnZXQiLCJ0YXJnZXQiLCJnZXRUYXJnZXQiLCJnZXRJZCIsInRhcmdldFNldHRpbmdzIiwibmFtZSIsImlkIiwiY29udHJvbElkIiwiY29udHJvbEFnZ3JlZ2F0aW9uIiwic2V0dGluZ3MiLCJvcHRpb25zIiwiYXBwbHlTZXR0aW5ncyIsIm1TZXR0aW5ncyIsIm9TY29wZSIsIm9uQmVmb3JlUmVuZGVyaW5nIiwiZGlzcGxheSIsInByZWZpeCIsInJvdXRlUmVsZXZhbnQiLCJyZW5kZXIiLCJybSIsImxvYWRlciIsImdldFJlbmRlcmVyIiwiQ29udHJvbCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQ29tcG9uZW50TG9hZGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFnZ3JlZ2F0aW9uLCBkZWZpbmVVSTVDbGFzcywgcHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIHsgJE1hbmFnZWRPYmplY3RTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCB0eXBlIENvbXBvbmVudENvbnRhaW5lciBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50Q29udGFpbmVyXCI7XG5pbXBvcnQgdHlwZSB7ICRDb21wb25lbnRDb250YWluZXJTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRDb250YWluZXJcIjtcbmltcG9ydCBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBSZW5kZXJNYW5hZ2VyIGZyb20gXCJzYXAvdWkvY29yZS9SZW5kZXJNYW5hZ2VyXCI7XG5pbXBvcnQgdHlwZSB7ICRUYXJnZXRTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvY29yZS9yb3V0aW5nL1RhcmdldFwiO1xuaW1wb3J0IHR5cGUgVGFyZ2V0cyBmcm9tIFwic2FwL3VpL2NvcmUvcm91dGluZy9UYXJnZXRzXCI7XG5pbXBvcnQgdHlwZSBVSUNvbXBvbmVudCBmcm9tIFwic2FwL3VpL2NvcmUvVUlDb21wb25lbnRcIjtcblxuLyoqXG4gKiBDb250cm9sIGZvciBsb2FkaW5nIGEgY29tcG9uZW50IHVzaW5nIFVJNSByb3V0aW5nLlxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5jb250cm9scy5Db21wb25lbnRMb2FkZXJcIilcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbXBvbmVudExvYWRlciBleHRlbmRzIENvbnRyb2wge1xuXHQvKipcblx0ICogTmFtZSBvZiB0aGUgY29tcG9uZW50LlxuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiwgcmVxdWlyZWQ6IHRydWUgfSlcblx0bmFtZSE6IHN0cmluZztcblxuXHQvKipcblx0ICogUm91dGUgcHJlZml4IGZvciB0aGUgY29tcG9uZW50LlxuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRwcmVmaXg/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFNldHRpbmcgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgY29tcG9uZW50LlxuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJvYmplY3RcIiB9KVxuXHRzZXR0aW5ncz86ICRDb21wb25lbnRDb250YWluZXJTZXR0aW5nc1tcInNldHRpbmdzXCJdO1xuXG5cdC8qKlxuXHQgKiBUaGlzIGFnZ3JlZ2F0aW9uIGhvbGRzIHRoZSBlbWJlZGRlZCBjb21wb25lbnQuXG5cdCAqL1xuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC51aS5jb3JlLkNvbXBvbmVudENvbnRhaW5lclwiLCBtdWx0aXBsZTogZmFsc2UsIGlzRGVmYXVsdDogdHJ1ZSB9KVxuXHRwcml2YXRlIGNvbXBvbmVudDogQ29tcG9uZW50Q29udGFpbmVyIHwgbnVsbCA9IG51bGw7XG5cblx0LyoqXG5cdCAqIFRhcmdldHMgQVBJLlxuXHQgKi9cblx0cHJpdmF0ZSB0YXJnZXRzITogVGFyZ2V0cztcblxuXHRpbml0KCk6IHZvaWQge1xuXHRcdHRoaXMudGFyZ2V0cyA9IHRoaXMuZ2V0VGFyZ2V0cygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUge0BsaW5rIFRhcmdldHN9IGluc3RhbmNlIHJlc3BvbnNpYmxlIGZvciB0aGlzIGNvbnRyb2wuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFRoZSB7QGxpbmsgVGFyZ2V0c30gaW5zdGFuY2UuXG5cdCAqIEB0aHJvd3MgSWYgdGhlIGluc3RhbmNlIGNvdWxkIG5vdCBiZSBmb3VuZCwgZS5nLiwgaWYgdGhlcmUgaXMgbm8gcm91dGVyIGF0IGFsbC5cblx0ICovXG5cdHByaXZhdGUgZ2V0VGFyZ2V0cygpOiBUYXJnZXRzIHtcblx0XHRsZXQgY29tcG9uZW50ID0gQ29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKHRoaXMpO1xuXHRcdGxldCB0YXJnZXRzOiBUYXJnZXRzIHwgdW5kZWZpbmVkO1xuXHRcdHdoaWxlIChjb21wb25lbnQgJiYgIXRhcmdldHMpIHtcblx0XHRcdGlmIChjb21wb25lbnQuaXNBPFVJQ29tcG9uZW50PihcInNhcC51aS5jb3JlLlVJQ29tcG9uZW50XCIpKSB7XG5cdFx0XHRcdHRhcmdldHMgPSBjb21wb25lbnQuZ2V0VGFyZ2V0cygpO1xuXHRcdFx0fVxuXHRcdFx0Y29tcG9uZW50ID0gQ29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKGNvbXBvbmVudCk7XG5cdFx0fVxuXG5cdFx0aWYgKCF0YXJnZXRzKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBpbnN0YW5jZSBvZiBzYXAudWkuY29yZS5yb3V0aW5nLlRhcmdldHNcIik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRhcmdldHM7XG5cdH1cblxuXHQvKipcblx0ICogQWRkIGEgdGFyZ2V0LCB1c2luZyB0aGlzIGNvbnRyb2wncyBJRCBhcyB0aGUgbmFtZS5cblx0ICovXG5cdHByaXZhdGUgYWRkVGFyZ2V0KCk6IHZvaWQge1xuXHRcdGNvbnN0IHRhcmdldCA9IHRoaXMudGFyZ2V0cy5nZXRUYXJnZXQodGhpcy5nZXRJZCgpLCB0cnVlKTtcblx0XHRpZiAoIXRhcmdldCkge1xuXHRcdFx0Ly8gVUk1IHJvdXRpbmcgd2lsbCBsYXRlciBjcmVhdGUgb25lIGluc3RhbmNlIG9mIHRoZSBjb21wb25lbnQgcGVyIHR1cGxlIFtuYW1lLCBpZF0gb3IgW3VzYWdlLCBpZF0sIHJlc3BlY3RpdmVseS5cblx0XHRcdGNvbnN0IHRhcmdldFNldHRpbmdzOiAkVGFyZ2V0U2V0dGluZ3MgJiB7IG9wdGlvbnM/OiBvYmplY3QgfSA9IHtcblx0XHRcdFx0dHlwZTogXCJDb21wb25lbnRcIixcblx0XHRcdFx0bmFtZTogdGhpcy5uYW1lLFxuXHRcdFx0XHRpZDogdGhpcy5nZXRJZCgpLFxuXG5cdFx0XHRcdC8vIHRoaXMgaXMgd2hlcmUgdGhlIGNvbXBvbmVudCdzIHZpZXcgd2lsbCBiZSBwbGFjZWQuIEl0IG11c3QgYmUgKip0aGlzKiogY29udHJvbCdzICdjb21wb25lbnQnIGFnZ3JlZ2F0aW9uLlxuXHRcdFx0XHRjb250cm9sSWQ6IHRoaXMuZ2V0SWQoKSxcblx0XHRcdFx0Y29udHJvbEFnZ3JlZ2F0aW9uOiBcImNvbXBvbmVudFwiXG5cdFx0XHR9O1xuXG5cdFx0XHRpZiAodGhpcy5zZXR0aW5ncykge1xuXHRcdFx0XHR0YXJnZXRTZXR0aW5ncy5vcHRpb25zID0geyBzZXR0aW5nczogdGhpcy5zZXR0aW5ncyB9O1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnRhcmdldHMuYWRkVGFyZ2V0KHRoaXMuZ2V0SWQoKSwgdGFyZ2V0U2V0dGluZ3MpO1xuXHRcdH1cblx0fVxuXG5cdGFwcGx5U2V0dGluZ3MobVNldHRpbmdzOiAkTWFuYWdlZE9iamVjdFNldHRpbmdzLCBvU2NvcGU/
|
|
143
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb21wb25lbnRMb2FkZXIiLCJkZWZpbmVVSTVDbGFzcyIsInByb3BlcnR5IiwidHlwZSIsInJlcXVpcmVkIiwiYWdncmVnYXRpb24iLCJtdWx0aXBsZSIsImlzRGVmYXVsdCIsImluaXQiLCJ0YXJnZXRzIiwiZ2V0VGFyZ2V0cyIsImNvbXBvbmVudCIsIkNvbXBvbmVudCIsImdldE93bmVyQ29tcG9uZW50Rm9yIiwiaXNBIiwiRXJyb3IiLCJhZGRUYXJnZXQiLCJ0YXJnZXQiLCJnZXRUYXJnZXQiLCJnZXRJZCIsInRhcmdldFNldHRpbmdzIiwibmFtZSIsImlkIiwiY29udHJvbElkIiwiY29udHJvbEFnZ3JlZ2F0aW9uIiwic2V0dGluZ3MiLCJvcHRpb25zIiwiYXBwbHlTZXR0aW5ncyIsIm1TZXR0aW5ncyIsIm9TY29wZSIsIm9uQmVmb3JlUmVuZGVyaW5nIiwiZGlzcGxheSIsInByZWZpeCIsInJvdXRlUmVsZXZhbnQiLCJyZW5kZXIiLCJybSIsImxvYWRlciIsImdldFJlbmRlcmVyIiwiQ29udHJvbCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQ29tcG9uZW50TG9hZGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFnZ3JlZ2F0aW9uLCBkZWZpbmVVSTVDbGFzcywgcHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIHsgJE1hbmFnZWRPYmplY3RTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCB0eXBlIENvbXBvbmVudENvbnRhaW5lciBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50Q29udGFpbmVyXCI7XG5pbXBvcnQgdHlwZSB7ICRDb21wb25lbnRDb250YWluZXJTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRDb250YWluZXJcIjtcbmltcG9ydCBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBSZW5kZXJNYW5hZ2VyIGZyb20gXCJzYXAvdWkvY29yZS9SZW5kZXJNYW5hZ2VyXCI7XG5pbXBvcnQgdHlwZSB7ICRUYXJnZXRTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvY29yZS9yb3V0aW5nL1RhcmdldFwiO1xuaW1wb3J0IHR5cGUgVGFyZ2V0cyBmcm9tIFwic2FwL3VpL2NvcmUvcm91dGluZy9UYXJnZXRzXCI7XG5pbXBvcnQgdHlwZSBVSUNvbXBvbmVudCBmcm9tIFwic2FwL3VpL2NvcmUvVUlDb21wb25lbnRcIjtcblxuLyoqXG4gKiBDb250cm9sIGZvciBsb2FkaW5nIGEgY29tcG9uZW50IHVzaW5nIFVJNSByb3V0aW5nLlxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5jb250cm9scy5Db21wb25lbnRMb2FkZXJcIilcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbXBvbmVudExvYWRlciBleHRlbmRzIENvbnRyb2wge1xuXHQvKipcblx0ICogTmFtZSBvZiB0aGUgY29tcG9uZW50LlxuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiwgcmVxdWlyZWQ6IHRydWUgfSlcblx0bmFtZSE6IHN0cmluZztcblxuXHQvKipcblx0ICogUm91dGUgcHJlZml4IGZvciB0aGUgY29tcG9uZW50LlxuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRwcmVmaXg/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFNldHRpbmcgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgY29tcG9uZW50LlxuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJvYmplY3RcIiB9KVxuXHRzZXR0aW5ncz86ICRDb21wb25lbnRDb250YWluZXJTZXR0aW5nc1tcInNldHRpbmdzXCJdO1xuXG5cdC8qKlxuXHQgKiBUaGlzIGFnZ3JlZ2F0aW9uIGhvbGRzIHRoZSBlbWJlZGRlZCBjb21wb25lbnQuXG5cdCAqL1xuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC51aS5jb3JlLkNvbXBvbmVudENvbnRhaW5lclwiLCBtdWx0aXBsZTogZmFsc2UsIGlzRGVmYXVsdDogdHJ1ZSB9KVxuXHRwcml2YXRlIGNvbXBvbmVudDogQ29tcG9uZW50Q29udGFpbmVyIHwgbnVsbCA9IG51bGw7XG5cblx0LyoqXG5cdCAqIFRhcmdldHMgQVBJLlxuXHQgKi9cblx0cHJpdmF0ZSB0YXJnZXRzITogVGFyZ2V0cztcblxuXHRpbml0KCk6IHZvaWQge1xuXHRcdHRoaXMudGFyZ2V0cyA9IHRoaXMuZ2V0VGFyZ2V0cygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUge0BsaW5rIFRhcmdldHN9IGluc3RhbmNlIHJlc3BvbnNpYmxlIGZvciB0aGlzIGNvbnRyb2wuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFRoZSB7QGxpbmsgVGFyZ2V0c30gaW5zdGFuY2UuXG5cdCAqIEB0aHJvd3MgSWYgdGhlIGluc3RhbmNlIGNvdWxkIG5vdCBiZSBmb3VuZCwgZS5nLiwgaWYgdGhlcmUgaXMgbm8gcm91dGVyIGF0IGFsbC5cblx0ICovXG5cdHByaXZhdGUgZ2V0VGFyZ2V0cygpOiBUYXJnZXRzIHtcblx0XHRsZXQgY29tcG9uZW50ID0gQ29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKHRoaXMpO1xuXHRcdGxldCB0YXJnZXRzOiBUYXJnZXRzIHwgdW5kZWZpbmVkO1xuXHRcdHdoaWxlIChjb21wb25lbnQgJiYgIXRhcmdldHMpIHtcblx0XHRcdGlmIChjb21wb25lbnQuaXNBPFVJQ29tcG9uZW50PihcInNhcC51aS5jb3JlLlVJQ29tcG9uZW50XCIpKSB7XG5cdFx0XHRcdHRhcmdldHMgPSBjb21wb25lbnQuZ2V0VGFyZ2V0cygpO1xuXHRcdFx0fVxuXHRcdFx0Y29tcG9uZW50ID0gQ29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKGNvbXBvbmVudCk7XG5cdFx0fVxuXG5cdFx0aWYgKCF0YXJnZXRzKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBpbnN0YW5jZSBvZiBzYXAudWkuY29yZS5yb3V0aW5nLlRhcmdldHNcIik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRhcmdldHM7XG5cdH1cblxuXHQvKipcblx0ICogQWRkIGEgdGFyZ2V0LCB1c2luZyB0aGlzIGNvbnRyb2wncyBJRCBhcyB0aGUgbmFtZS5cblx0ICovXG5cdHByaXZhdGUgYWRkVGFyZ2V0KCk6IHZvaWQge1xuXHRcdGNvbnN0IHRhcmdldCA9IHRoaXMudGFyZ2V0cy5nZXRUYXJnZXQodGhpcy5nZXRJZCgpLCB0cnVlKTtcblx0XHRpZiAoIXRhcmdldCkge1xuXHRcdFx0Ly8gVUk1IHJvdXRpbmcgd2lsbCBsYXRlciBjcmVhdGUgb25lIGluc3RhbmNlIG9mIHRoZSBjb21wb25lbnQgcGVyIHR1cGxlIFtuYW1lLCBpZF0gb3IgW3VzYWdlLCBpZF0sIHJlc3BlY3RpdmVseS5cblx0XHRcdGNvbnN0IHRhcmdldFNldHRpbmdzOiAkVGFyZ2V0U2V0dGluZ3MgJiB7IG9wdGlvbnM/OiBvYmplY3QgfSA9IHtcblx0XHRcdFx0dHlwZTogXCJDb21wb25lbnRcIixcblx0XHRcdFx0bmFtZTogdGhpcy5uYW1lLFxuXHRcdFx0XHRpZDogdGhpcy5nZXRJZCgpLFxuXG5cdFx0XHRcdC8vIHRoaXMgaXMgd2hlcmUgdGhlIGNvbXBvbmVudCdzIHZpZXcgd2lsbCBiZSBwbGFjZWQuIEl0IG11c3QgYmUgKip0aGlzKiogY29udHJvbCdzICdjb21wb25lbnQnIGFnZ3JlZ2F0aW9uLlxuXHRcdFx0XHRjb250cm9sSWQ6IHRoaXMuZ2V0SWQoKSxcblx0XHRcdFx0Y29udHJvbEFnZ3JlZ2F0aW9uOiBcImNvbXBvbmVudFwiXG5cdFx0XHR9O1xuXG5cdFx0XHRpZiAodGhpcy5zZXR0aW5ncykge1xuXHRcdFx0XHR0YXJnZXRTZXR0aW5ncy5vcHRpb25zID0geyBzZXR0aW5nczogdGhpcy5zZXR0aW5ncyB9O1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnRhcmdldHMuYWRkVGFyZ2V0KHRoaXMuZ2V0SWQoKSwgdGFyZ2V0U2V0dGluZ3MpO1xuXHRcdH1cblx0fVxuXG5cdGFwcGx5U2V0dGluZ3MobVNldHRpbmdzOiAkTWFuYWdlZE9iamVjdFNldHRpbmdzLCBvU2NvcGU/OiBvYmplY3QpOiB0aGlzIHtcblx0XHRzdXBlci5hcHBseVNldHRpbmdzKG1TZXR0aW5ncywgb1Njb3BlKTtcblx0XHR0aGlzLmFkZFRhcmdldCgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0b25CZWZvcmVSZW5kZXJpbmcoKTogdm9pZCB7XG5cdFx0dGhpcy50YXJnZXRzLmRpc3BsYXkoe1xuXHRcdFx0bmFtZTogdGhpcy5nZXRJZCgpLFxuXHRcdFx0cHJlZml4OiB0aGlzLnByZWZpeCxcblx0XHRcdHJvdXRlUmVsZXZhbnQ6IHRydWVcblx0XHR9KTtcblx0fVxuXG5cdHN0YXRpYyByZW5kZXIocm06IFJlbmRlck1hbmFnZXIsIGxvYWRlcjogQ29tcG9uZW50TG9hZGVyKTogdm9pZCB7XG5cdFx0Ly8gZGVsZWdhdGUgcmVuZGVyaW5nIHRvIHRoZSBuZXN0ZWQgQ29tcG9uZW50Q29udGFpbmVyXG5cdFx0aWYgKGxvYWRlci5jb21wb25lbnQpIHtcblx0XHRcdGxvYWRlci5jb21wb25lbnQuZ2V0UmVuZGVyZXIoKS5yZW5kZXIocm0sIGxvYWRlci5jb21wb25lbnQpO1xuXHRcdH1cblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7TUFlcUJBLGVBQWU7RUFKcEM7QUFDQTtBQUNBO0VBRkEsT0FHQ0MsY0FBYyxDQUFDLHNDQUFzQyxDQUFDLFVBS3JEQyxRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFLFFBQVE7SUFBRUMsUUFBUSxFQUFFO0VBQUssQ0FBQyxDQUFDLFVBTTVDRixRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQVMsQ0FBQyxDQUFDLFVBTTVCRCxRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQVMsQ0FBQyxDQUFDLFVBTTVCRSxXQUFXLENBQUM7SUFBRUYsSUFBSSxFQUFFLGdDQUFnQztJQUFFRyxRQUFRLEVBQUUsS0FBSztJQUFFQyxTQUFTLEVBQUU7RUFBSyxDQUFDLENBQUM7SUFBQTtJQUFBO01BQUE7TUFBQTtRQUFBO01BQUE7TUFBQTtNQUFBO01BQUE7TUFBQTtNQUFBO01BQUE7SUFBQTtJQUFBO0lBQUE7SUFBQSxPQVExRkMsSUFBSSxHQUFKLGdCQUFhO01BQ1osSUFBSSxDQUFDQyxPQUFPLEdBQUcsSUFBSSxDQUFDQyxVQUFVLEVBQUU7SUFDakM7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTEM7SUFBQSxPQU1RQSxVQUFVLEdBQWxCLHNCQUE4QjtNQUM3QixJQUFJQyxTQUFTLEdBQUdDLFNBQVMsQ0FBQ0Msb0JBQW9CLENBQUMsSUFBSSxDQUFDO01BQ3BELElBQUlKLE9BQTRCO01BQ2hDLE9BQU9FLFNBQVMsSUFBSSxDQUFDRixPQUFPLEVBQUU7UUFDN0IsSUFBSUUsU0FBUyxDQUFDRyxHQUFHLENBQWMseUJBQXlCLENBQUMsRUFBRTtVQUMxREwsT0FBTyxHQUFHRSxTQUFTLENBQUNELFVBQVUsRUFBRTtRQUNqQztRQUNBQyxTQUFTLEdBQUdDLFNBQVMsQ0FBQ0Msb0JBQW9CLENBQUNGLFNBQVMsQ0FBQztNQUN0RDtNQUVBLElBQUksQ0FBQ0YsT0FBTyxFQUFFO1FBQ2IsTUFBTSxJQUFJTSxLQUFLLENBQUMsaUVBQWlFLENBQUM7TUFDbkY7TUFFQSxPQUFPTixPQUFPO0lBQ2Y7O0lBRUE7QUFDRDtBQUNBLE9BRkM7SUFBQSxPQUdRTyxTQUFTLEdBQWpCLHFCQUEwQjtNQUN6QixNQUFNQyxNQUFNLEdBQUcsSUFBSSxDQUFDUixPQUFPLENBQUNTLFNBQVMsQ0FBQyxJQUFJLENBQUNDLEtBQUssRUFBRSxFQUFFLElBQUksQ0FBQztNQUN6RCxJQUFJLENBQUNGLE1BQU0sRUFBRTtRQUNaO1FBQ0EsTUFBTUcsY0FBc0QsR0FBRztVQUM5RGpCLElBQUksRUFBRSxXQUFXO1VBQ2pCa0IsSUFBSSxFQUFFLElBQUksQ0FBQ0EsSUFBSTtVQUNmQyxFQUFFLEVBQUUsSUFBSSxDQUFDSCxLQUFLLEVBQUU7VUFFaEI7VUFDQUksU0FBUyxFQUFFLElBQUksQ0FBQ0osS0FBSyxFQUFFO1VBQ3ZCSyxrQkFBa0IsRUFBRTtRQUNyQixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUNDLFFBQVEsRUFBRTtVQUNsQkwsY0FBYyxDQUFDTSxPQUFPLEdBQUc7WUFBRUQsUUFBUSxFQUFFLElBQUksQ0FBQ0E7VUFBUyxDQUFDO1FBQ3JEO1FBRUEsSUFBSSxDQUFDaEIsT0FBTyxDQUFDTyxTQUFTLENBQUMsSUFBSSxDQUFDRyxLQUFLLEVBQUUsRUFBRUMsY0FBYyxDQUFDO01BQ3JEO0lBQ0QsQ0FBQztJQUFBLE9BRURPLGFBQWEsR0FBYix1QkFBY0MsU0FBaUMsRUFBRUMsTUFBZSxFQUFRO01BQ3ZFLG1CQUFNRixhQUFhLFlBQUNDLFNBQVMsRUFBRUMsTUFBTTtNQUNyQyxJQUFJLENBQUNiLFNBQVMsRUFBRTtNQUNoQixPQUFPLElBQUk7SUFDWixDQUFDO0lBQUEsT0FFRGMsaUJBQWlCLEdBQWpCLDZCQUEwQjtNQUN6QixJQUFJLENBQUNyQixPQUFPLENBQUNzQixPQUFPLENBQUM7UUFDcEJWLElBQUksRUFBRSxJQUFJLENBQUNGLEtBQUssRUFBRTtRQUNsQmEsTUFBTSxFQUFFLElBQUksQ0FBQ0EsTUFBTTtRQUNuQkMsYUFBYSxFQUFFO01BQ2hCLENBQUMsQ0FBQztJQUNILENBQUM7SUFBQSxnQkFFTUMsTUFBTSxHQUFiLGdCQUFjQyxFQUFpQixFQUFFQyxNQUF1QixFQUFRO01BQy9EO01BQ0EsSUFBSUEsTUFBTSxDQUFDekIsU0FBUyxFQUFFO1FBQ3JCeUIsTUFBTSxDQUFDekIsU0FBUyxDQUFDMEIsV0FBVyxFQUFFLENBQUNILE1BQU0sQ0FBQ0MsRUFBRSxFQUFFQyxNQUFNLENBQUN6QixTQUFTLENBQUM7TUFDNUQ7SUFDRCxDQUFDO0lBQUE7RUFBQSxFQXJHMkMyQixPQUFPO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7TUFBQSxPQXVCSixJQUFJO0lBQUE7RUFBQTtFQUFBO0VBQUE7QUFBQSJ9
|
|
@@ -48,7 +48,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/formatters/CriticalityFormatter", "s
|
|
|
48
48
|
controls: [],
|
|
49
49
|
elements: [],
|
|
50
50
|
// eslint-disable-next-line no-template-curly-in-string
|
|
51
|
-
version: "1.124.
|
|
51
|
+
version: "1.124.8",
|
|
52
52
|
noLibraryCSS: true,
|
|
53
53
|
extensions: {
|
|
54
54
|
//Configuration used for rule loading of Support Assistant
|
|
@@ -632,6 +632,22 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/formatt
|
|
|
632
632
|
return equal(operationAvailableExpression, true);
|
|
633
633
|
}
|
|
634
634
|
|
|
635
|
+
/**
|
|
636
|
+
* Generates the expression to check if the quickView facet is visible.
|
|
637
|
+
* @param facetModelPath
|
|
638
|
+
* @returns BindingToolkitExpression The binding expression of the visibility
|
|
639
|
+
*/
|
|
640
|
+
_exports.getActionEnabledExpression = getActionEnabledExpression;
|
|
641
|
+
function isQuickViewFacetVisible(facetModelPath) {
|
|
642
|
+
var _facetModelPath$targe, _facetModelPath$targe2;
|
|
643
|
+
let targetVisible = constant(true);
|
|
644
|
+
if (isAnnotationOfType((_facetModelPath$targe = facetModelPath.targetObject) === null || _facetModelPath$targe === void 0 ? void 0 : (_facetModelPath$targe2 = _facetModelPath$targe.Target) === null || _facetModelPath$targe2 === void 0 ? void 0 : _facetModelPath$targe2.$target, "com.sap.vocabularies.UI.v1.FieldGroupType")) {
|
|
645
|
+
var _facetModelPath$targe3, _facetModelPath$targe4;
|
|
646
|
+
targetVisible = isVisible((_facetModelPath$targe3 = facetModelPath.targetObject) === null || _facetModelPath$targe3 === void 0 ? void 0 : (_facetModelPath$targe4 = _facetModelPath$targe3.Target) === null || _facetModelPath$targe4 === void 0 ? void 0 : _facetModelPath$targe4.$target);
|
|
647
|
+
}
|
|
648
|
+
return compileExpression(and(isVisible(facetModelPath.targetObject), targetVisible));
|
|
649
|
+
}
|
|
650
|
+
|
|
635
651
|
/**
|
|
636
652
|
* Check if the field is MultiLine and needs visibility.
|
|
637
653
|
* @param isMultiLineField True if the field is multiline
|
|
@@ -639,7 +655,7 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/formatt
|
|
|
639
655
|
* @param useSingleTextAreaFieldAsNotes If the only field within a form container is a text-area field, the label is hidden
|
|
640
656
|
* @returns True if the form has only 1 element and is multiline
|
|
641
657
|
*/
|
|
642
|
-
_exports.
|
|
658
|
+
_exports.isQuickViewFacetVisible = isQuickViewFacetVisible;
|
|
643
659
|
function isMultiLineLabelAndNeedVisibility(isMultiLineField, formElementsLength, useSingleTextAreaFieldAsNotes) {
|
|
644
660
|
if (useSingleTextAreaFieldAsNotes && isMultiLineField && formElementsLength === 1) {
|
|
645
661
|
return true;
|
|
@@ -649,4 +665,4 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/formatt
|
|
|
649
665
|
_exports.isMultiLineLabelAndNeedVisibility = isMultiLineLabelAndNeedVisibility;
|
|
650
666
|
return _exports;
|
|
651
667
|
}, false);
|
|
652
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGaWVsZEVkaXRNb2RlIiwiRGlzYWJsZWQiLCJEaXNwbGF5IiwiRWRpdGFibGUiLCJFZGl0YWJsZURpc3BsYXkiLCJFZGl0YWJsZVJlYWRPbmx5IiwiUmVhZE9ubHkiLCJnZXREaXNwbGF5TW9kZSIsIm9EYXRhTW9kZWxPYmplY3RQYXRoIiwiRGlzcGxheU1vZGVGb3JtYXR0ZXIiLCJ0YXJnZXRPYmplY3QiLCJnZXRFZGl0YWJsZUV4cHJlc3Npb25Bc09iamVjdCIsIm9Qcm9wZXJ0eVBhdGgiLCJvRGF0YUZpZWxkQ29udmVydGVkIiwiaXNFZGl0YWJsZSIsIlVJIiwiSXNFZGl0YWJsZSIsImNvbnNpZGVyVXBkYXRlUmVzdHJpY3Rpb25zIiwiZ2V0RWRpdGFibGVFeHByZXNzaW9uIiwidW5kZWZpbmVkIiwiYkFzT2JqZWN0IiwicmVsYXRpdmVQYXRoIiwiZ2V0UmVsYXRpdmVQYXRocyIsImNvbXBpbGVFeHByZXNzaW9uIiwiZGF0YUZpZWxkRWRpdGFibGVFeHByZXNzaW9uIiwiY29uc3RhbnQiLCJpc1Byb3BlcnR5IiwiaWZFbHNlIiwiaXNOb25FZGl0YWJsZUV4cHJlc3Npb24iLCJvUHJvcGVydHkiLCJpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsIiR0YXJnZXQiLCJpc1BhdGhVcGRhdGFibGVFeHByZXNzaW9uIiwiaXNQYXRoVXBkYXRhYmxlIiwicHJvcGVydHlQYXRoIiwicGF0aFZpc2l0b3IiLCJwYXRoIiwibmF2aWdhdGlvblBhdGhzIiwic2luZ2xldG9uUGF0aFZpc2l0b3IiLCJjb252ZXJ0ZWRUeXBlcyIsImVkaXRhYmxlRXhwcmVzc2lvbiIsIm9yIiwiYW5kIiwibm90IiwiaXNDb21wdXRlZCIsImlzS2V5IiwiaXNJbW11dGFibGUiLCJJc1RyYW5zaWVudEJpbmRpbmciLCJ1bnJlc29sdmFibGVFeHByZXNzaW9uIiwiZ2V0Q29sbGFib3JhdGlvbkV4cHJlc3Npb24iLCJkYXRhTW9kZWxPYmplY3RQYXRoIiwiZm9ybWF0dGVyIiwib2JqZWN0UGF0aCIsImdldFRhcmdldE9iamVjdFBhdGgiLCJhY3Rpdml0eUV4cHJlc3Npb24iLCJwYXRoSW5Nb2RlbCIsImtleXMiLCJ0YXJnZXRFbnRpdHlUeXBlIiwia2V5c0V4cHJlc3Npb25zIiwiZm9yRWFjaCIsImtleSIsImtleUV4cHJlc3Npb24iLCJuYW1lIiwicHVzaCIsImZvcm1hdFJlc3VsdCIsImdldEVuYWJsZWRFeHByZXNzaW9uQXNPYmplY3QiLCJnZXRFbmFibGVkRXhwcmVzc2lvbiIsImRhdGFGaWVsZEVuYWJsZWRFeHByZXNzaW9uIiwiaXNEaXNhYmxlZEV4cHJlc3Npb24iLCJlbmFibGVkRXhwcmVzc2lvbiIsImdldEVkaXRNb2RlIiwibWVhc3VyZVJlYWRPbmx5IiwiYXNPYmplY3QiLCJkYXRhRmllbGRDb252ZXJ0ZWQiLCIkVHlwZSIsInByb3BlcnR5IiwiYXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkiLCJnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eSIsInVuaXRQcm9wZXJ0eSIsImdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkiLCJyZXN1bHRFeHByZXNzaW9uIiwiaXNVbml0UmVhZE9ubHkiLCJpc1JlYWRPbmx5RXhwcmVzc2lvbiIsImlzQ29uc3RhbnQiLCJhbm5vdGF0aW9ucyIsIk1lYXN1cmVzIiwiSVNPQ3VycmVuY3kiLCJVbml0IiwicmVhZE9ubHlFeHByZXNzaW9uIiwiZWRpdE1vZGVFeHByZXNzaW9uIiwiaGFzVmFsaWRBbmFseXRpY2FsQ3VycmVuY3lPclVuaXQiLCJvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoIiwib1Byb3BlcnR5RGVmaW5pdGlvbiIsImN1cnJlbmN5IiwibWVhc3VyZSIsImlzVHJ1dGh5IiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwiSXNUb3RhbCIsImdldEZpZWxkRGlzcGxheSIsInNUYXJnZXREaXNwbGF5TW9kZSIsIm9Db21wdXRlZEVkaXRNb2RlIiwiaGFzVGV4dEFubm90YXRpb24iLCJDb21tb24iLCJUZXh0IiwiaGFzVmFsdWVIZWxwIiwiZXF1YWwiLCJnZXRUeXBlQ29uZmlnIiwiZGF0YVR5cGUiLCJvVGFyZ2V0TWFwcGluZyIsIkVETV9UWVBFX01BUFBJTkciLCJ0eXBlIiwicHJvcGVydHlUeXBlQ29uZmlnIiwiY29uc3RyYWludHMiLCJmb3JtYXRPcHRpb25zIiwic2NhbGUiLCIkU2NhbGUiLCJwcmVjaXNpb24iLCIkUHJlY2lzaW9uIiwibWF4TGVuZ3RoIiwiJE1heExlbmd0aCIsIm51bGxhYmxlIiwiJE51bGxhYmxlIiwibWluaW11bSIsImlzTmFOIiwiVmFsaWRhdGlvbiIsIk1pbmltdW0iLCJtYXhpbXVtIiwiTWF4aW11bSIsImlzRGlnaXRTZXF1ZW5jZSIsIklzRGlnaXRTZXF1ZW5jZSIsIlY0IiwiJFY0IiwicGFyc2VBc1N0cmluZyIsImluZGV4T2YiLCJlbXB0eVN0cmluZyIsInBhcnNlS2VlcHNFbXB0eVN0cmluZyIsImdldEJpbmRpbmdXaXRoVW5pdE9yQ3VycmVuY3kiLCJvUHJvcGVydHlEYXRhTW9kZWxQYXRoIiwicHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiIsImlnbm9yZVVuaXRDb25zdHJhaW50IiwidW5pdCIsInJlbGF0aXZlTG9jYXRpb24iLCJmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uIiwiaGFzU3RhdGljUGVyY2VudFVuaXQiLCJzaG93TWVhc3VyZSIsInZhbHVlRm9ybWF0dGVycyIsImZvcm1hdFdpdGhQZXJjZW50YWdlIiwiY29tcGxleFR5cGUiLCJ1bml0QmluZGluZ0V4cHJlc3Npb24iLCJhZGRUeXBlSW5mb3JtYXRpb24iLCJnZXRCaW5kaW5nRm9yVW5pdE9yQ3VycmVuY3kiLCJnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoIiwic2hvd051bWJlciIsImdldEJpbmRpbmdXaXRoVGltZXpvbmUiLCJoaWRlVGltZXpvbmVGb3JFbXB0eVZhbHVlcyIsImRhdGVGb3JtYXRPcHRpb25zIiwidGltZXpvbmUiLCJUaW1lem9uZSIsInNob3dUaW1lem9uZUZvckVtcHR5VmFsdWVzIiwic2hvd1RpbWUiLCJzaG93RGF0ZSIsInNob3dUaW1lem9uZSIsImdldEJpbmRpbmdGb3JUaW1lem9uZSIsInByb3BlcnR5RGF0YU1vZGVsUGF0aCIsInByb3BlcnR5RGVmaW5pdGlvbiIsImdldEFsaWdubWVudEV4cHJlc3Npb24iLCJzQWxpZ25EaXNwbGF5Iiwic0FsaWduRWRpdCIsImdldENvbnZlcnRlckNvbnRleHQiLCJvQ29udGV4dCIsIm9JbnRlcmZhY2UiLCJjb250ZXh0IiwiY29udmVydE1ldGFNb2RlbENvbnRleHQiLCJyZXF1aXJlc0lDb250ZXh0IiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImlzTXVsdGlWYWx1ZUZpZWxkIiwib0RhdGFNb2RlbFBhdGgiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsImxlbmd0aCIsImhhc09uZVRvTWFueU5hdmlnYXRpb24iLCJmaW5kSW5kZXgiLCJvTmF2IiwiaXNNdWx0aXBsZU5hdmlnYXRpb25Qcm9wZXJ0eSIsImNvbnRleHRMb2NhdGlvbiIsIm9Db250ZXh0TmF2IiwiZ2V0UmVxdWlyZWRFeHByZXNzaW9uQXNPYmplY3QiLCJmb3JjZUVkaXRNb2RlIiwiZ2V0UmVxdWlyZWRFeHByZXNzaW9uIiwib1JlcXVpcmVkUHJvcGVydGllcyIsImFSZXF1aXJlZFByb3BlcnRpZXNGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zIiwicmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucyIsImFSZXF1aXJlZFByb3BlcnRpZXNGcm9tVXBkYXRlUmVzdHJpY3Rpb25zIiwicmVxdWlyZWRQcm9wZXJ0aWVzRnJvbVVwZGF0ZVJlc3RyaWN0aW9ucyIsImRhdGFGaWVsZFJlcXVpcmVkRXhwcmVzc2lvbiIsImlzUmVxdWlyZWRFeHByZXNzaW9uIiwicmVxdWlyZWRQcm9wZXJ0eUZyb21JbnNlcnRSZXN0cmljdGlvbnNFeHByZXNzaW9uIiwicmVxdWlyZWRQcm9wZXJ0eUZyb21VcGRhdGVSZXN0cmljdGlvbnNFeHByZXNzaW9uIiwicmVxdWlyZWRFeHByZXNzaW9uIiwiZWRpdE1vZGUiLCJpbmNsdWRlcyIsIklzQ3JlYXRlTW9kZSIsInJldHVybkV4cHJlc3Npb24iLCJnZXRSZXF1aXJlZEV4cHJlc3Npb25Gb3JDb25uZWN0ZWREYXRhRmllbGQiLCJkYXRhRmllbGRPYmplY3RQYXRoIiwiZGF0YSIsIkRhdGEiLCJPYmplY3QiLCJkYXRhRmllbGRzIiwiaXNSZXF1aXJlZEV4cHJlc3Npb25zIiwiZGF0YUZpZWxkIiwiVmFsdWUiLCJUYXJnZXQiLCJpc0Fubm90YXRpb25PZlR5cGUiLCJpc1Zpc2libGUiLCJIaWRkZW4iLCJpc011bHRpTGluZSIsImlzTXVsdGlMaW5lVGV4dCIsImdldEFjdGlvbkVuYWJsZWRFeHByZXNzaW9uIiwiYWN0aW9uVGFyZ2V0IiwicGF0aEZyb21Db250ZXh0TG9jYXRpb24iLCJvcGVyYXRpb25BdmFpbGFibGVJc0Fubm90YXRlZCIsIkNvcmUiLCJPcGVyYXRpb25BdmFpbGFibGUiLCJ0ZXJtIiwicHJlZml4Iiwic291cmNlRW50aXR5VHlwZSIsIm5hdmlnYXRpb25zIiwic291cmNlQWN0aW9uRGF0YU1vZGVsT2JqZWN0IiwiZW5oYW5jZURhdGFNb2RlbFBhdGgiLCJuYXYiLCJqb2luIiwiYmluZGluZ1BhcmFtZXRlckZ1bGxOYW1lIiwiaXNCb3VuZCIsInBhcmFtZXRlcnMiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJvcGVyYXRpb25BdmFpbGFibGVFeHByZXNzaW9uIiwiYmluZGluZ0NvbnRleHRQYXRoVmlzaXRvciIsImlzTXVsdGlMaW5lTGFiZWxBbmROZWVkVmlzaWJpbGl0eSIsImlzTXVsdGlMaW5lRmllbGQiLCJmb3JtRWxlbWVudHNMZW5ndGgiLCJ1c2VTaW5nbGVUZXh0QXJlYUZpZWxkQXNOb3RlcyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVUlGb3JtYXR0ZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQWN0aW9uLCBBY3Rpb25QYXJhbWV0ZXIsIENvbnZlcnRlZE1ldGFkYXRhLCBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24sIFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25QYXRoIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL0VkbVwiO1xuaW1wb3J0IHsgQ29yZUFubm90YXRpb25UZXJtcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29yZVwiO1xuaW1wb3J0IHR5cGUgeyBVbml0IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9NZWFzdXJlc1wiO1xuaW1wb3J0IHR5cGUge1xuXHRDb2xsZWN0aW9uRmFjZXQsXG5cdENvbm5lY3RlZEZpZWxkc1R5cGUsXG5cdERhdGFGaWVsZCxcblx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0RGF0YUZpZWxkRm9yQWN0aW9uVHlwZXMsXG5cdERhdGFQb2ludFR5cGUsXG5cdERhdGFQb2ludFR5cGVUeXBlcyxcblx0UmVmZXJlbmNlRmFjZXRcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBjb252ZXJ0TWV0YU1vZGVsQ29udGV4dCwgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IFBhZ2VDb250ZXh0UGF0aFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgdmFsdWVGb3JtYXR0ZXJzIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL1ZhbHVlRm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBVSSwgYmluZGluZ0NvbnRleHRQYXRoVmlzaXRvciwgc2luZ2xldG9uUGF0aFZpc2l0b3IgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sIEZuIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdEVETV9UWVBFX01BUFBJTkcsXG5cdGFkZFR5cGVJbmZvcm1hdGlvbixcblx0YW5kLFxuXHRjb21waWxlRXhwcmVzc2lvbixcblx0Y29uc3RhbnQsXG5cdGVxdWFsLFxuXHRmb3JtYXRSZXN1bHQsXG5cdGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24sXG5cdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbixcblx0aWZFbHNlLFxuXHRpc0NvbnN0YW50LFxuXHRpc1RydXRoeSxcblx0bm90LFxuXHRvcixcblx0cGF0aEluTW9kZWwsXG5cdHVucmVzb2x2YWJsZUV4cHJlc3Npb25cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGlzQW5ub3RhdGlvbk9mVHlwZSwgaXNNdWx0aXBsZU5hdmlnYXRpb25Qcm9wZXJ0eSwgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24sIGlzUHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQge1xuXHRlbmhhbmNlRGF0YU1vZGVsUGF0aCxcblx0Z2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCxcblx0Z2V0UmVsYXRpdmVQYXRocyxcblx0Z2V0VGFyZ2V0T2JqZWN0UGF0aCxcblx0aXNQYXRoVXBkYXRhYmxlXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCAqIGFzIERpc3BsYXlNb2RlRm9ybWF0dGVyIGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0Rpc3BsYXlNb2RlRm9ybWF0dGVyXCI7XG5pbXBvcnQge1xuXHRpc0Rpc2FibGVkRXhwcmVzc2lvbixcblx0aXNOb25FZGl0YWJsZUV4cHJlc3Npb24sXG5cdGlzUmVhZE9ubHlFeHByZXNzaW9uLFxuXHRpc1JlcXVpcmVkRXhwcmVzc2lvblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9GaWVsZENvbnRyb2xIZWxwZXJcIjtcbmltcG9ydCB7XG5cdGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5LFxuXHRnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5LFxuXHRoYXNTdGF0aWNQZXJjZW50VW5pdCxcblx0aGFzVmFsdWVIZWxwLFxuXHRpc0NvbXB1dGVkLFxuXHRpc0ltbXV0YWJsZSxcblx0aXNLZXksXG5cdGlzTXVsdGlMaW5lVGV4dFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcblxuLy8gSW1wb3J0LWV4cG9ydCBtZXRob2QgdXNlZCBieSB0aGUgY29udmVydGVyIHRvIHVzZSB0aGVtIGluIHRoZSB0ZW1wbGF0aW5nIHRocm91Z2ggdGhlIFVJRm9ybWF0dGVycy5cbmV4cG9ydCB0eXBlIERpc3BsYXlNb2RlID0gRGlzcGxheU1vZGVGb3JtYXR0ZXIuRGlzcGxheU1vZGU7XG5cbmV4cG9ydCB0eXBlIEZpZWxkRWRpdFN0eWxlID0gXCJSYWRpb0J1dHRvbnNcIjtcblxuZXhwb3J0IHR5cGUgUHJvcGVydHlPclBhdGg8UD4gPSBzdHJpbmcgfCBQIHwgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPFA+O1xuZXhwb3J0IHR5cGUgTWV0YU1vZGVsQ29udGV4dCA9IHtcblx0JGtpbmQ6IHN0cmluZztcblx0JFR5cGU6IHN0cmluZztcblx0JE51bGxhYmxlPzogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogSW50ZXJmYWNlIHJlcHJlc2VudGluZyB0aGUgc3RydWN0dXJlIHJldHVybmVkIGJ5IHRoZSBPRGF0YU1ldGFNb2RlbCB3aGVuIHVzaW5nIHRoZSBAQCBvcGVyYXRvciBpbiBYTUwgdGVtcGxhdGVzLlxuICovXG5leHBvcnQgdHlwZSBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2UgPSB7XG5cdGNvbnRleHQ6IENvbnRleHQ7XG5cdGFyZ3VtZW50cz86IHVua25vd25bXTtcblx0JCR2YWx1ZUFzUHJvbWlzZT86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBjb25maWdUeXBlQ29uc3RyYWludHMgPSB7XG5cdHNjYWxlPzogbnVtYmVyO1xuXHRwcmVjaXNpb24/OiBudW1iZXI7XG5cdG1heExlbmd0aD86IG51bWJlcjtcblx0bnVsbGFibGU/OiBib29sZWFuO1xuXHRtaW5pbXVtPzogc3RyaW5nO1xuXHRtYXhpbXVtPzogc3RyaW5nO1xuXHRpc0RpZ2l0U2VxdWVuY2U/OiBib29sZWFuO1xuXHRWND86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBjb25maWdUeXBlZm9ybWF0T3B0aW9ucyA9IHtcblx0cGFyc2VBc1N0cmluZz86IGJvb2xlYW47XG5cdGVtcHR5U3RyaW5nPzogc3RyaW5nO1xuXHRwYXJzZUtlZXBzRW1wdHlTdHJpbmc/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgQ29uZmlnVHlwZSA9IHtcblx0dHlwZTogc3RyaW5nO1xuXHRjb25zdHJhaW50czogY29uZmlnVHlwZUNvbnN0cmFpbnRzO1xuXHRmb3JtYXRPcHRpb25zOiBjb25maWdUeXBlZm9ybWF0T3B0aW9ucztcbn07XG5cbmV4cG9ydCBjb25zdCBGaWVsZEVkaXRNb2RlID0ge1xuXHQvKipcblx0ICoge0BsaW5rIHNhcC51aS5tZGMuRmllbGQgRmllbGR9LCB7QGxpbmsgc2FwLnVpLm1kYy5GaWx0ZXJGaWVsZCBGaWx0ZXJGaWVsZH0gb3Ige0BsaW5rIHNhcC51aS5tZGMuTXVsdGlWYWx1ZUZpZWxkIE11bHRpVmFsdWVGaWVsZCB9XG5cdCAqIGlzIHJlbmRlcmVkIGluIGRpc2FibGVkIG1vZGVcblx0ICovXG5cdERpc2FibGVkOiBcIkRpc2FibGVkXCIsXG5cdC8qKlxuXHQgKiB7QGxpbmsgc2FwLnVpLm1kYy5GaWVsZCBGaWVsZH0sIHtAbGluayBzYXAudWkubWRjLkZpbHRlckZpZWxkIEZpbHRlckZpZWxkfSBvciB7QGxpbmsgc2FwLnVpLm1kYy5NdWx0aVZhbHVlRmllbGQgTXVsdGlWYWx1ZUZpZWxkIH1cblx0ICogaXMgcmVuZGVyZWQgaW4gZGlzcGxheSBtb2RlXG5cdCAqL1xuXHREaXNwbGF5OiBcIkRpc3BsYXlcIixcblx0LyoqXG5cdCAqIHtAbGluayBzYXAudWkubWRjLkZpZWxkIEZpZWxkfSwge0BsaW5rIHNhcC51aS5tZGMuRmlsdGVyRmllbGQgRmlsdGVyRmllbGR9IG9yIHtAbGluayBzYXAudWkubWRjLk11bHRpVmFsdWVGaWVsZCBNdWx0aVZhbHVlRmllbGQgfVxuXHQgKiBpcyByZW5kZXJlZCBpbiBlZGl0YWJsZSBtb2RlXG5cdCAqL1xuXHRFZGl0YWJsZTogXCJFZGl0YWJsZVwiLFxuXHQvKipcblx0ICogSWYgbW9yZSB0aGFuIG9uZSBjb250cm9sIGlzIHJlbmRlcmVkIGJ5IHRoZSB7QGxpbmsgc2FwLnVpLm1kYy5GaWVsZCBGaWVsZH0sIHtAbGluayBzYXAudWkubWRjLkZpbHRlckZpZWxkIEZpbHRlckZpZWxkIH1cblx0ICogb3Ige0BsaW5rIHNhcC51aS5tZGMuTXVsdGlWYWx1ZUZpZWxkIE11bHRpVmFsdWVGaWVsZH0gY29udHJvbCwgdGhlIGZpcnN0IHBhcnQgaXMgZWRpdGFibGUsIGFuZCB0aGUgb3RoZXJcblx0ICogcGFydHMgYXJlIGluIGRpc3BsYXkgbW9kZS5cblx0ICovXG5cdEVkaXRhYmxlRGlzcGxheTogXCJFZGl0YWJsZURpc3BsYXlcIixcblx0LyoqXG5cdCAqIElmIG1vcmUgdGhhbiBvbmUgY29udHJvbCBpcyByZW5kZXJlZCBieSB0aGUge0BsaW5rIHNhcC51aS5tZGMuRmllbGQgRmllbGR9LCB7QGxpbmsgc2FwLnVpLm1kYy5GaWx0ZXJGaWVsZCBGaWx0ZXJGaWVsZCB9XG5cdCAqIG9yIHtAbGluayBzYXAudWkubWRjLk11bHRpVmFsdWVGaWVsZCBNdWx0aVZhbHVlRmllbGR9IGNvbnRyb2wsIHRoZSBmaXJzdCBwYXJ0IGlzIGVkaXRhYmxlLCBhbmQgdGhlIG90aGVyXG5cdCAqIHBhcnRzIGFyZSByZWFkLW9ubHkuXG5cdCAqL1xuXHRFZGl0YWJsZVJlYWRPbmx5OiBcIkVkaXRhYmxlUmVhZE9ubHlcIixcblx0LyoqXG5cdCAqIHtAbGluayBzYXAudWkubWRjLkZpZWxkIEZpZWxkfSwge0BsaW5rIHNhcC51aS5tZGMuRmlsdGVyRmllbGQgRmlsdGVyRmllbGR9IG9yIHtAbGluayBzYXAudWkubWRjLk11bHRpVmFsdWVGaWVsZCBNdWx0aVZhbHVlRmllbGQgfVxuXHQgKiBpcyByZW5kZXJlZCBpbiByZWFkLW9ubHkgbW9kZVxuXHQgKi9cblx0UmVhZE9ubHk6IFwiUmVhZE9ubHlcIlxufTtcblxuZXhwb3J0IGNvbnN0IGdldERpc3BsYXlNb2RlID0gZnVuY3Rpb24gKFxuXHRvRGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXM+XG4pOiBEaXNwbGF5TW9kZSB7XG5cdHJldHVybiBEaXNwbGF5TW9kZUZvcm1hdHRlci5nZXREaXNwbGF5TW9kZShvRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QsIG9EYXRhTW9kZWxPYmplY3RQYXRoKTtcbn07XG5leHBvcnQgY29uc3QgZ2V0RWRpdGFibGVFeHByZXNzaW9uQXNPYmplY3QgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0b0RhdGFGaWVsZENvbnZlcnRlZDogUHJvcGVydHkgfCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzIHwgdW5kZWZpbmVkLFxuXHRvRGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPixcblx0aXNFZGl0YWJsZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gVUkuSXNFZGl0YWJsZSxcblx0Y29uc2lkZXJVcGRhdGVSZXN0cmljdGlvbnMgPSB0cnVlXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gZ2V0RWRpdGFibGVFeHByZXNzaW9uKFxuXHRcdG9Qcm9wZXJ0eVBhdGgsXG5cdFx0b0RhdGFGaWVsZENvbnZlcnRlZCxcblx0XHRvRGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHR0cnVlLFxuXHRcdGlzRWRpdGFibGUsXG5cdFx0Y29uc2lkZXJVcGRhdGVSZXN0cmljdGlvbnNcblx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG59O1xuXG5leHBvcnQgdHlwZSBkYXRlRm9ybWF0T3B0aW9ucyA9IHtcblx0c2hvd0RhdGU/OiBib29sZWFuO1xuXHRzaG93VGltZT86IGJvb2xlYW47XG5cdHNob3dUaW1lem9uZT86IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIENyZWF0ZSB0aGUgZXhwcmVzc2lvbiB0byBnZW5lcmF0ZSBhbiBcImVkaXRhYmxlXCIgQm9vbGVhbiB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0gb1Byb3BlcnR5UGF0aCBUaGUgaW5wdXQgcHJvcGVydHlcbiAqIEBwYXJhbSBvRGF0YUZpZWxkQ29udmVydGVkIFRoZSBEYXRhRmllbGRDb252ZXJ0ZWQgb2JqZWN0IHRvIHJlYWQgdGhlIGZpZWxkQ29udHJvbCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gb0RhdGFNb2RlbE9iamVjdFBhdGggVGhlIHBhdGggdG8gdGhpcyBwcm9wZXJ0eSBvYmplY3RcbiAqIEBwYXJhbSBiQXNPYmplY3QgV2hldGhlciBvciBub3QgdGhpcyBzaG91bGQgYmUgcmV0dXJuZWQgYXMgYW4gb2JqZWN0IG9yIGEgYmluZGluZyBzdHJpbmdcbiAqIEBwYXJhbSBpc0VkaXRhYmxlIFdoZXRoZXIgb3Igbm90IFVJLklzRWRpdGFibGUgYmUgY29uc2lkZXJlZC5cbiAqIEBwYXJhbSBjb25zaWRlclVwZGF0ZVJlc3RyaWN0aW9ucyBXaGV0aGVyIHdlIHdhbnQgdG8gdGFrZSBpbnRvIGFjY291bnQgVXBkYXRlUmVzdHJpY3Rpb25zIHRvIGNvbXB1dGUgdGhlIGVkaXRhYmxlXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGEgcHJvcGVydHkgaXMgZWRpdGFibGUgb3Igbm90XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFZGl0YWJsZUV4cHJlc3Npb24gPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0b0RhdGFGaWVsZENvbnZlcnRlZDogUHJvcGVydHkgfCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxuXHRvRGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPixcblx0YkFzT2JqZWN0ID0gZmFsc2UsXG5cdGlzRWRpdGFibGU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IFVJLklzRWRpdGFibGUsXG5cdGNvbnNpZGVyVXBkYXRlUmVzdHJpY3Rpb25zID0gdHJ1ZVxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCByZWxhdGl2ZVBhdGggPSBnZXRSZWxhdGl2ZVBhdGhzKG9EYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0aWYgKCFvUHJvcGVydHlQYXRoIHx8IHR5cGVvZiBvUHJvcGVydHlQYXRoID09PSBcInN0cmluZ1wiKSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGZhbHNlKTtcblx0fVxuXHRsZXQgZGF0YUZpZWxkRWRpdGFibGVFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBjb25zdGFudCh0cnVlKTtcblx0aWYgKG9EYXRhRmllbGRDb252ZXJ0ZWQgIT09IHVuZGVmaW5lZCAmJiAhaXNQcm9wZXJ0eShvRGF0YUZpZWxkQ29udmVydGVkKSkge1xuXHRcdGRhdGFGaWVsZEVkaXRhYmxlRXhwcmVzc2lvbiA9IGlmRWxzZShpc05vbkVkaXRhYmxlRXhwcmVzc2lvbihvRGF0YUZpZWxkQ29udmVydGVkKSwgZmFsc2UsIGlzRWRpdGFibGUpO1xuXHR9IGVsc2UgaWYgKG9EYXRhRmllbGRDb252ZXJ0ZWQgIT09IHVuZGVmaW5lZCkge1xuXHRcdGRhdGFGaWVsZEVkaXRhYmxlRXhwcmVzc2lvbiA9IGlzRWRpdGFibGU7XG5cdH1cblxuXHRjb25zdCBvUHJvcGVydHkgPSBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihvUHJvcGVydHlQYXRoKSA/IG9Qcm9wZXJ0eVBhdGguJHRhcmdldCA6IG9Qcm9wZXJ0eVBhdGg7XG5cblx0Ly8gRWRpdGFiaWxpdHkgZGVwZW5kcyBvbiB0aGUgZmllbGQgY29udHJvbCBleHByZXNzaW9uXG5cdC8vIElmIHRoZSBGaWVsZCBjb250cm9sIGlzIHN0YXRpY2FsbHkgaW4gUmVhZE9ubHkgb3IgSW5hcHBsaWNhYmxlIChkaXNhYmxlZCkgLT4gbm90IGVkaXRhYmxlXG5cdC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBhIGtleSAtPiBub3QgZWRpdGFibGUgZXhjZXB0IGluIGNyZWF0aW9uIGlmIG5vdCBjb21wdXRlZFxuXHQvLyBJZiB0aGUgcHJvcGVydHkgaXMgY29tcHV0ZWQgLT4gbm90IGVkaXRhYmxlXG5cdC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBub3QgdXBkYXRhYmxlIC0+IG5vdCBlZGl0YWJsZVxuXHQvLyBJZiB0aGUgcHJvcGVydHkgaXMgaW1tdXRhYmxlIC0+IG5vdCBlZGl0YWJsZSBleGNlcHQgaW4gY3JlYXRpb25cblx0Ly8gSWYgdGhlIEZpZWxkIGNvbnRyb2wgaXMgYSBwYXRoIHJlc29sdmluZyB0byBSZWFkT25seSBvciBJbmFwcGxpY2FibGUgKGRpc2FibGVkKSAoPD0gMSkgLT4gbm90IGVkaXRhYmxlXG5cdC8vIEVsc2UsIHRvIGJlIGVkaXRhYmxlIHlvdSBuZWVkXG5cdC8vIGltbXV0YWJsZSBhbmQga2V5IHdoaWxlIGluIHRoZSBjcmVhdGlvbiByb3dcblx0Ly8gdWkvaXNFZGl0YWJsZVxuXHRjb25zdCBpc1BhdGhVcGRhdGFibGVFeHByZXNzaW9uID0gaXNQYXRoVXBkYXRhYmxlKG9EYXRhTW9kZWxPYmplY3RQYXRoLCB7XG5cdFx0cHJvcGVydHlQYXRoOiBvUHJvcGVydHlQYXRoLFxuXHRcdHBhdGhWaXNpdG9yOiAocGF0aDogc3RyaW5nLCBuYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdKSA9PlxuXHRcdFx0c2luZ2xldG9uUGF0aFZpc2l0b3IocGF0aCwgb0RhdGFNb2RlbE9iamVjdFBhdGguY29udmVydGVkVHlwZXMsIG5hdmlnYXRpb25QYXRocylcblx0fSk7XG5cdGlmIChjb21waWxlRXhwcmVzc2lvbihpc1BhdGhVcGRhdGFibGVFeHByZXNzaW9uKSA9PT0gXCJmYWxzZVwiICYmIGNvbnNpZGVyVXBkYXRlUmVzdHJpY3Rpb25zKSB7XG5cdFx0cmV0dXJuIGJBc09iamVjdCA/IGlzUGF0aFVwZGF0YWJsZUV4cHJlc3Npb24gOiBcImZhbHNlXCI7XG5cdH1cblx0Y29uc3QgZWRpdGFibGVFeHByZXNzaW9uID1cblx0XHRvUHJvcGVydHkgIT09IHVuZGVmaW5lZFxuXHRcdFx0PyBpZkVsc2UoXG5cdFx0XHRcdFx0b3IoXG5cdFx0XHRcdFx0XHRhbmQobm90KGlzUGF0aFVwZGF0YWJsZUV4cHJlc3Npb24pLCBjb25zaWRlclVwZGF0ZVJlc3RyaWN0aW9ucyksXG5cdFx0XHRcdFx0XHRpc0NvbXB1dGVkKG9Qcm9wZXJ0eSksXG5cdFx0XHRcdFx0XHRpc0tleShvUHJvcGVydHkpLFxuXHRcdFx0XHRcdFx0aXNJbW11dGFibGUob1Byb3BlcnR5KSxcblx0XHRcdFx0XHRcdGlzTm9uRWRpdGFibGVFeHByZXNzaW9uKG9Qcm9wZXJ0eSwgcmVsYXRpdmVQYXRoKVxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0aWZFbHNlKG9yKGlzQ29tcHV0ZWQob1Byb3BlcnR5KSwgaXNOb25FZGl0YWJsZUV4cHJlc3Npb24ob1Byb3BlcnR5LCByZWxhdGl2ZVBhdGgpKSwgZmFsc2UsIFVJLklzVHJhbnNpZW50QmluZGluZyksXG5cdFx0XHRcdFx0aXNFZGl0YWJsZVxuXHRcdFx0ICApXG5cdFx0XHQ6IHVucmVzb2x2YWJsZUV4cHJlc3Npb247XG5cdGlmIChiQXNPYmplY3QpIHtcblx0XHRyZXR1cm4gYW5kKGVkaXRhYmxlRXhwcmVzc2lvbiwgZGF0YUZpZWxkRWRpdGFibGVFeHByZXNzaW9uKTtcblx0fVxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oYW5kKGVkaXRhYmxlRXhwcmVzc2lvbiwgZGF0YUZpZWxkRWRpdGFibGVFeHByZXNzaW9uKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29sbGFib3JhdGlvbkV4cHJlc3Npb24gPSBmdW5jdGlvbiA8VD4oXG5cdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRmb3JtYXR0ZXI6IEZuPFQ+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4ge1xuXHRjb25zdCBvYmplY3RQYXRoID0gZ2V0VGFyZ2V0T2JqZWN0UGF0aChkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0Y29uc3QgYWN0aXZpdHlFeHByZXNzaW9uID0gcGF0aEluTW9kZWwoYC9jb2xsYWJvcmF0aW9uL2FjdGl2aXRpZXMke29iamVjdFBhdGh9YCwgXCJpbnRlcm5hbFwiKTtcblx0Y29uc3Qga2V5cyA9IGRhdGFNb2RlbE9iamVjdFBhdGg/LnRhcmdldEVudGl0eVR5cGU/LmtleXM7XG5cdGNvbnN0IGtleXNFeHByZXNzaW9uczogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+W10gPSBbXTtcblx0a2V5cz8uZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG5cdFx0Y29uc3Qga2V5RXhwcmVzc2lvbiA9IHBhdGhJbk1vZGVsKGtleS5uYW1lKTtcblx0XHRrZXlzRXhwcmVzc2lvbnMucHVzaChrZXlFeHByZXNzaW9uKTtcblx0fSk7XG5cdHJldHVybiBmb3JtYXRSZXN1bHQoW2FjdGl2aXR5RXhwcmVzc2lvbiwgLi4ua2V5c0V4cHJlc3Npb25zXSwgZm9ybWF0dGVyKTtcbn07XG5leHBvcnQgY29uc3QgZ2V0RW5hYmxlZEV4cHJlc3Npb25Bc09iamVjdCA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRvRGF0YUZpZWxkQ29udmVydGVkPzogUHJvcGVydHkgfCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzLFxuXHRvRGF0YU1vZGVsT2JqZWN0UGF0aD86IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBnZXRFbmFibGVkRXhwcmVzc2lvbihvUHJvcGVydHlQYXRoLCBvRGF0YUZpZWxkQ29udmVydGVkLCB0cnVlLCBvRGF0YU1vZGVsT2JqZWN0UGF0aCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xufTtcbi8qKlxuICogQ3JlYXRlIHRoZSBleHByZXNzaW9uIHRvIGdlbmVyYXRlIGFuIFwiZW5hYmxlZFwiIEJvb2xlYW4gdmFsdWUuXG4gKlxuICogQHBhcmFtIG9Qcm9wZXJ0eVBhdGggVGhlIGlucHV0IHByb3BlcnR5XG4gKiBAcGFyYW0gb0RhdGFGaWVsZENvbnZlcnRlZCBUaGUgRGF0YUZpZWxkQ29udmVydGVkIE9iamVjdCB0byByZWFkIHRoZSBmaWVsZENvbnRyb2wgYW5ub3RhdGlvblxuICogQHBhcmFtIGJBc09iamVjdCBXaGV0aGVyIG9yIG5vdCB0aGlzIHNob3VsZCBiZSByZXR1cm5lZCBhcyBhbiBvYmplY3Qgb3IgYSBiaW5kaW5nIHN0cmluZ1xuICogQHBhcmFtIG9EYXRhTW9kZWxPYmplY3RQYXRoXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIHRvIGRldGVybWluZSBpZiBhIHByb3BlcnR5IGlzIGVuYWJsZWQgb3Igbm90XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFbmFibGVkRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRvRGF0YUZpZWxkQ29udmVydGVkPzogUHJvcGVydHkgfCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzLFxuXHRiQXNPYmplY3QgPSBmYWxzZSxcblx0b0RhdGFNb2RlbE9iamVjdFBhdGg/OiBEYXRhTW9kZWxPYmplY3RQYXRoPHVua25vd24+XG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGlmICghb1Byb3BlcnR5UGF0aCB8fCB0eXBlb2Ygb1Byb3BlcnR5UGF0aCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbih0cnVlKTtcblx0fVxuXHRsZXQgcmVsYXRpdmVQYXRoO1xuXHRpZiAob0RhdGFNb2RlbE9iamVjdFBhdGgpIHtcblx0XHRyZWxhdGl2ZVBhdGggPSBnZXRSZWxhdGl2ZVBhdGhzKG9EYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0fVxuXHRsZXQgZGF0YUZpZWxkRW5hYmxlZEV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IGNvbnN0YW50KHRydWUpO1xuXHRpZiAob0RhdGFGaWVsZENvbnZlcnRlZCAhPT0gdW5kZWZpbmVkICYmICFpc1Byb3BlcnR5KG9EYXRhRmllbGRDb252ZXJ0ZWQpKSB7XG5cdFx0ZGF0YUZpZWxkRW5hYmxlZEV4cHJlc3Npb24gPSBpZkVsc2UoaXNEaXNhYmxlZEV4cHJlc3Npb24ob0RhdGFGaWVsZENvbnZlcnRlZCksIGZhbHNlLCB0cnVlKTtcblx0fVxuXG5cdGNvbnN0IG9Qcm9wZXJ0eSA9IGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKG9Qcm9wZXJ0eVBhdGgpID8gb1Byb3BlcnR5UGF0aC4kdGFyZ2V0IDogb1Byb3BlcnR5UGF0aDtcblx0Ly8gRW5hYmxlbWVudCBkZXBlbmRzIG9uIHRoZSBmaWVsZCBjb250cm9sIGV4cHJlc3Npb25cblx0Ly8gSWYgdGhlIEZpZWxkIGNvbnRyb2wgaXMgc3RhdGljYWxseSBpbiBJbmFwcGxpY2FibGUgKGRpc2FibGVkKSAtPiBub3QgZW5hYmxlZFxuXHRjb25zdCBlbmFibGVkRXhwcmVzc2lvbiA9XG5cdFx0b1Byb3BlcnR5ICE9PSB1bmRlZmluZWQgPyBpZkVsc2UoaXNEaXNhYmxlZEV4cHJlc3Npb24ob1Byb3BlcnR5LCByZWxhdGl2ZVBhdGgpLCBmYWxzZSwgdHJ1ZSkgOiB1bnJlc29sdmFibGVFeHByZXNzaW9uO1xuXHRpZiAoYkFzT2JqZWN0KSB7XG5cdFx0cmV0dXJuIGFuZChlbmFibGVkRXhwcmVzc2lvbiwgZGF0YUZpZWxkRW5hYmxlZEV4cHJlc3Npb24pO1xuXHR9XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihhbmQoZW5hYmxlZEV4cHJlc3Npb24sIGRhdGFGaWVsZEVuYWJsZWRFeHByZXNzaW9uKSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZSB0aGUgZXhwcmVzc2lvbiB0byBnZW5lcmF0ZSBhbiBcImVkaXRNb2RlXCIgZW51bSB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0gcHJvcGVydHlQYXRoIFRoZSBpbnB1dCBwcm9wZXJ0eVxuICogQHBhcmFtIGRhdGFNb2RlbE9iamVjdFBhdGggVGhlIGxpc3Qgb2YgZGF0YSBtb2RlbCBvYmplY3RzIHRoYXQgYXJlIGludm9sdmVkIHRvIHJlYWNoIHRoYXQgcHJvcGVydHlcbiAqIEBwYXJhbSBtZWFzdXJlUmVhZE9ubHkgV2hldGhlciB3ZSBzaG91bGQgc2V0IFVvTSAvIGN1cnJlbmN5IGZpZWxkIG1vZGUgdG8gcmVhZCBvbmx5XG4gKiBAcGFyYW0gYXNPYmplY3QgV2hldGhlciB3ZSBzaG91bGQgcmV0dXJuIHRoaXMgYXMgYW4gZXhwcmVzc2lvbiBvciBhcyBhIHN0cmluZ1xuICogQHBhcmFtIGRhdGFGaWVsZENvbnZlcnRlZCBUaGUgZGF0YUZpZWxkIG9iamVjdFxuICogQHBhcmFtIGlzRWRpdGFibGUgV2hldGhlciBvciBub3QgVUkuSXNFZGl0YWJsZSBiZSBjb25zaWRlcmVkLlxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgcHJvcGVydHkgZWRpdCBtb2RlLCBjb21wbGlhbnQgd2l0aCB0aGUgTURDIEZpZWxkIGRlZmluaXRpb24gb2YgZWRpdE1vZGUuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFZGl0TW9kZSA9IGZ1bmN0aW9uIChcblx0cHJvcGVydHlQYXRoOiBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sXG5cdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj4sXG5cdG1lYXN1cmVSZWFkT25seSA9IGZhbHNlLFxuXHRhc09iamVjdCA9IGZhbHNlLFxuXHRkYXRhRmllbGRDb252ZXJ0ZWQ6IFByb3BlcnR5IHwgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCxcblx0aXNFZGl0YWJsZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gVUkuSXNFZGl0YWJsZVxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB7XG5cdGlmIChcblx0XHQhcHJvcGVydHlQYXRoIHx8XG5cdFx0dHlwZW9mIHByb3BlcnR5UGF0aCA9PT0gXCJzdHJpbmdcIiB8fFxuXHRcdCghaXNQcm9wZXJ0eShkYXRhRmllbGRDb252ZXJ0ZWQpICYmIGRhdGFGaWVsZENvbnZlcnRlZD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aClcblx0KSB7XG5cdFx0cmV0dXJuIEZpZWxkRWRpdE1vZGUuRGlzcGxheTtcblx0fVxuXHRjb25zdCBwcm9wZXJ0eSA9IGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKHByb3BlcnR5UGF0aCkgPyBwcm9wZXJ0eVBhdGguJHRhcmdldCA6IHByb3BlcnR5UGF0aDtcblx0Y29uc3QgcmVsYXRpdmVQYXRoID0gZ2V0UmVsYXRpdmVQYXRocyhkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0Y29uc3QgaXNQYXRoVXBkYXRhYmxlRXhwcmVzc2lvbiA9IGlzUGF0aFVwZGF0YWJsZShkYXRhTW9kZWxPYmplY3RQYXRoLCB7XG5cdFx0cHJvcGVydHlQYXRoOiBwcm9wZXJ0eSxcblx0XHRwYXRoVmlzaXRvcjogKHBhdGg6IHN0cmluZywgbmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSkgPT5cblx0XHRcdHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGRhdGFNb2RlbE9iamVjdFBhdGguY29udmVydGVkVHlwZXMsIG5hdmlnYXRpb25QYXRocylcblx0fSk7XG5cblx0Ly8gd2UgZ2V0IHRoZSBlZGl0YWJsZSBFeHByZXNzaW9uIHdpdGhvdXQgY29uc2lkZXJpbmcgdXBkYXRlIFJlc3RyaWN0aW9ucyBiZWNhdXNlIHRoZXkgYXJlIGhhbmRsZWQgc2VwYXJhdGVseVxuXHRjb25zdCBlZGl0YWJsZUV4cHJlc3Npb24gPSBnZXRFZGl0YWJsZUV4cHJlc3Npb25Bc09iamVjdChwcm9wZXJ0eVBhdGgsIGRhdGFGaWVsZENvbnZlcnRlZCwgZGF0YU1vZGVsT2JqZWN0UGF0aCwgaXNFZGl0YWJsZSwgZmFsc2UpO1xuXG5cdGNvbnN0IGVuYWJsZWRFeHByZXNzaW9uID0gZ2V0RW5hYmxlZEV4cHJlc3Npb25Bc09iamVjdChwcm9wZXJ0eVBhdGgsIGRhdGFGaWVsZENvbnZlcnRlZCwgZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdGNvbnN0IGFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5ID0gZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkocHJvcGVydHkpO1xuXHRjb25zdCB1bml0UHJvcGVydHkgPSBhc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eSB8fCBnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5KHByb3BlcnR5KTtcblx0bGV0IHJlc3VsdEV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+ID0gY29uc3RhbnQoRmllbGRFZGl0TW9kZS5FZGl0YWJsZSk7XG5cdGlmICh1bml0UHJvcGVydHkpIHtcblx0XHRjb25zdCBpc1VuaXRSZWFkT25seSA9IGlzUmVhZE9ubHlFeHByZXNzaW9uKHVuaXRQcm9wZXJ0eSwgcmVsYXRpdmVQYXRoKTtcblx0XHRyZXN1bHRFeHByZXNzaW9uID0gaWZFbHNlKFxuXHRcdFx0b3IoaXNVbml0UmVhZE9ubHksIGlzQ29tcHV0ZWQodW5pdFByb3BlcnR5KSwgYW5kKGlzSW1tdXRhYmxlKHVuaXRQcm9wZXJ0eSksIG5vdChVSS5Jc1RyYW5zaWVudEJpbmRpbmcpKSwgbWVhc3VyZVJlYWRPbmx5KSxcblx0XHRcdGlmRWxzZSghaXNDb25zdGFudChpc1VuaXRSZWFkT25seSkgJiYgaXNVbml0UmVhZE9ubHksIEZpZWxkRWRpdE1vZGUuRWRpdGFibGVSZWFkT25seSwgRmllbGRFZGl0TW9kZS5FZGl0YWJsZURpc3BsYXkpLFxuXHRcdFx0RmllbGRFZGl0TW9kZS5FZGl0YWJsZVxuXHRcdCk7XG5cdH1cblx0aWYgKCF1bml0UHJvcGVydHkgJiYgKHByb3BlcnR5Py5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5IHx8IHByb3BlcnR5Py5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQpKSB7XG5cdFx0Ly8gbm8gdW5pdCBwcm9wZXJ0eSBhc3NvY2lhdGVkIG1lYW5zIHRoaXMgaXMgYSBzdGF0aWMgdW5pdFxuXHRcdHJlc3VsdEV4cHJlc3Npb24gPSBjb25zdGFudChGaWVsZEVkaXRNb2RlLkVkaXRhYmxlRGlzcGxheSk7XG5cdH1cblx0bGV0IHJlYWRPbmx5RXhwcmVzc2lvbjtcblx0aWYgKGRhdGFGaWVsZENvbnZlcnRlZCAhPSB1bmRlZmluZWQgJiYgIWlzUHJvcGVydHkoZGF0YUZpZWxkQ29udmVydGVkKSkge1xuXHRcdHJlYWRPbmx5RXhwcmVzc2lvbiA9IG9yKGlzUmVhZE9ubHlFeHByZXNzaW9uKHByb3BlcnR5LCByZWxhdGl2ZVBhdGgpLCBpc1JlYWRPbmx5RXhwcmVzc2lvbihkYXRhRmllbGRDb252ZXJ0ZWQpKTtcblx0fSBlbHNlIHtcblx0XHRyZWFkT25seUV4cHJlc3Npb24gPSBpc1JlYWRPbmx5RXhwcmVzc2lvbihwcm9wZXJ0eSwgcmVsYXRpdmVQYXRoKTtcblx0fVxuXG5cdC8vIGlmIHRoZXJlIGFyZSB1cGRhdGUgUmVzdHJpY3Rpb25zIGl0IGlzIGFsd2F5cyBkaXNwbGF5IG1vZGVcblx0Y29uc3QgZWRpdE1vZGVFeHByZXNzaW9uID0gaWZFbHNlKFxuXHRcdG9yKGlzUGF0aFVwZGF0YWJsZUV4cHJlc3Npb24sIFVJLklzVHJhbnNpZW50QmluZGluZyksXG5cdFx0aWZFbHNlKFxuXHRcdFx0ZW5hYmxlZEV4cHJlc3Npb24sXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdGVkaXRhYmxlRXhwcmVzc2lvbixcblx0XHRcdFx0cmVzdWx0RXhwcmVzc2lvbixcblx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdGFuZCghaXNDb25zdGFudChyZWFkT25seUV4cHJlc3Npb24pICYmIHJlYWRPbmx5RXhwcmVzc2lvbiwgaXNFZGl0YWJsZSksXG5cdFx0XHRcdFx0RmllbGRFZGl0TW9kZS5SZWFkT25seSxcblx0XHRcdFx0XHRGaWVsZEVkaXRNb2RlLkRpc3BsYXlcblx0XHRcdFx0KVxuXHRcdFx0KSxcblx0XHRcdGlmRWxzZShpc0VkaXRhYmxlLCBGaWVsZEVkaXRNb2RlLkRpc2FibGVkLCBGaWVsZEVkaXRNb2RlLkRpc3BsYXkpXG5cdFx0KSxcblx0XHRGaWVsZEVkaXRNb2RlLkRpc3BsYXlcblx0KTtcblx0aWYgKGFzT2JqZWN0KSB7XG5cdFx0cmV0dXJuIGVkaXRNb2RlRXhwcmVzc2lvbjtcblx0fVxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oZWRpdE1vZGVFeHByZXNzaW9uKTtcbn07XG5cbmV4cG9ydCBjb25zdCBoYXNWYWxpZEFuYWx5dGljYWxDdXJyZW5jeU9yVW5pdCA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4gfCB1bmRlZmluZWRcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0Y29uc3Qgb1Byb3BlcnR5RGVmaW5pdGlvbiA9IG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGg/LnRhcmdldE9iamVjdDtcblx0Y29uc3QgY3VycmVuY3kgPSBvUHJvcGVydHlEZWZpbml0aW9uPy5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5O1xuXHRjb25zdCBtZWFzdXJlID0gY3VycmVuY3kgPyBjdXJyZW5jeSA6IG9Qcm9wZXJ0eURlZmluaXRpb24/LmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdDtcblx0aWYgKG1lYXN1cmUpIHtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24ob3IoaXNUcnV0aHkoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKG1lYXN1cmUpKSwgbm90KFVJLklzVG90YWwpKSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGNvbnN0YW50KHRydWUpKTtcblx0fVxufTtcblxuLyoqXG4gKiBDcmVhdGUgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIGZpZWxkRGlzcGxheS5cbiAqXG4gKiBAcGFyYW0gb1Byb3BlcnR5UGF0aFxuICogQHBhcmFtIHNUYXJnZXREaXNwbGF5TW9kZVxuICogQHBhcmFtIG9Db21wdXRlZEVkaXRNb2RlXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBwcm9wZXJ0eSBkaXNwbGF5IG1vZGUsIGNvbXBsaWFudCB3aXRoIHRoZSBNREMgRmllbGQgZGVmaW5pdGlvbiBvZiBkaXNwbGF5TW9kZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEZpZWxkRGlzcGxheSA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRzVGFyZ2V0RGlzcGxheU1vZGU6IHN0cmluZyxcblx0b0NvbXB1dGVkRWRpdE1vZGU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+XG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGNvbnN0IG9Qcm9wZXJ0eSA9IChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihvUHJvcGVydHlQYXRoKSAmJiBvUHJvcGVydHlQYXRoLiR0YXJnZXQpIHx8IChvUHJvcGVydHlQYXRoIGFzIFByb3BlcnR5KTtcblx0Y29uc3QgaGFzVGV4dEFubm90YXRpb24gPSBvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dCAhPT0gdW5kZWZpbmVkO1xuXG5cdGlmIChoYXNWYWx1ZUhlbHAob1Byb3BlcnR5KSkge1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihzVGFyZ2V0RGlzcGxheU1vZGUpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBoYXNUZXh0QW5ub3RhdGlvbiA/IGNvbXBpbGVFeHByZXNzaW9uKGlmRWxzZShlcXVhbChvQ29tcHV0ZWRFZGl0TW9kZSwgXCJFZGl0YWJsZVwiKSwgXCJWYWx1ZVwiLCBzVGFyZ2V0RGlzcGxheU1vZGUpKSA6IFwiVmFsdWVcIjtcblx0fVxufTtcblxuZXhwb3J0IGNvbnN0IGdldFR5cGVDb25maWcgPSBmdW5jdGlvbiAob1Byb3BlcnR5OiBQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsIGRhdGFUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBDb25maWdUeXBlIHtcblx0Y29uc3Qgb1RhcmdldE1hcHBpbmcgPSBFRE1fVFlQRV9NQVBQSU5HWyhvUHJvcGVydHkgYXMgUHJvcGVydHkpPy50eXBlXSB8fCAoZGF0YVR5cGUgPyBFRE1fVFlQRV9NQVBQSU5HW2RhdGFUeXBlXSA6IHVuZGVmaW5lZCk7XG5cdGNvbnN0IHByb3BlcnR5VHlwZUNvbmZpZzogQ29uZmlnVHlwZSA9IHtcblx0XHR0eXBlOiBvVGFyZ2V0TWFwcGluZy50eXBlLFxuXHRcdGNvbnN0cmFpbnRzOiB7fSxcblx0XHRmb3JtYXRPcHRpb25zOiB7fVxuXHR9O1xuXHRpZiAoaXNQcm9wZXJ0eShvUHJvcGVydHkpKSB7XG5cdFx0cHJvcGVydHlUeXBlQ29uZmlnLmNvbnN0cmFpbnRzID0ge1xuXHRcdFx0c2NhbGU6IG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy4kU2NhbGUgPyBvUHJvcGVydHkuc2NhbGUgOiB1bmRlZmluZWQsXG5cdFx0XHRwcmVjaXNpb246IG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy4kUHJlY2lzaW9uID8gb1Byb3BlcnR5LnByZWNpc2lvbiA6IHVuZGVmaW5lZCxcblx0XHRcdG1heExlbmd0aDogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiRNYXhMZW5ndGggPyBvUHJvcGVydHkubWF4TGVuZ3RoIDogdW5kZWZpbmVkLFxuXHRcdFx0bnVsbGFibGU6IG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy4kTnVsbGFibGUgPyBvUHJvcGVydHkubnVsbGFibGUgOiB1bmRlZmluZWQsXG5cdFx0XHRtaW5pbXVtOlxuXHRcdFx0XHRvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uW1wiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1pbmltdW0vJERlY2ltYWxcIl0gJiZcblx0XHRcdFx0IWlzTmFOKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWluaW11bSlcblx0XHRcdFx0XHQ/IGAke29Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWluaW11bX1gXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRtYXhpbXVtOlxuXHRcdFx0XHRvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uW1wiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1heGltdW0vJERlY2ltYWxcIl0gJiZcblx0XHRcdFx0IWlzTmFOKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWF4aW11bSlcblx0XHRcdFx0XHQ/IGAke29Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWF4aW11bX1gXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRpc0RpZ2l0U2VxdWVuY2U6XG5cdFx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZy50eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiICYmXG5cdFx0XHRcdG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy5bXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRGlnaXRTZXF1ZW5jZVwiXSAmJlxuXHRcdFx0XHRvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNEaWdpdFNlcXVlbmNlXG5cdFx0XHRcdFx0PyB0cnVlXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRWNDogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiRWNCA/IHRydWUgOiB1bmRlZmluZWRcblx0XHR9O1xuXHR9XG5cdHByb3BlcnR5VHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zID0ge1xuXHRcdHBhcnNlQXNTdHJpbmc6XG5cdFx0XHRwcm9wZXJ0eVR5cGVDb25maWc/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnRcIikgPT09IDAgfHxcblx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZz8udHlwZT8uaW5kZXhPZihcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRvdWJsZVwiKSA9PT0gMFxuXHRcdFx0XHQ/IGZhbHNlXG5cdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdGVtcHR5U3RyaW5nOlxuXHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50XCIpID09PSAwIHx8XG5cdFx0XHRwcm9wZXJ0eVR5cGVDb25maWc/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Eb3VibGVcIikgPT09IDBcblx0XHRcdFx0PyBcIlwiXG5cdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdHBhcnNlS2VlcHNFbXB0eVN0cmluZzogcHJvcGVydHlUeXBlQ29uZmlnLnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIgPyB0cnVlIDogdW5kZWZpbmVkXG5cdH07XG5cdHJldHVybiBwcm9wZXJ0eVR5cGVDb25maWc7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QmluZGluZ1dpdGhVbml0T3JDdXJyZW5jeSA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5RGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+LFxuXHRpZ25vcmVVbml0Q29uc3RyYWludD86IGJvb2xlYW4sXG5cdGZvcm1hdE9wdGlvbnM/OiB7XG5cdFx0c2hvd01lYXN1cmU/OiBib29sZWFuO1xuXHR9XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB7XG5cdGNvbnN0IG9Qcm9wZXJ0eURlZmluaXRpb24gPSBvUHJvcGVydHlEYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCBhcyBQcm9wZXJ0eTtcblx0bGV0IHVuaXQgPSBvUHJvcGVydHlEZWZpbml0aW9uLmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdDtcblx0Y29uc3QgcmVsYXRpdmVMb2NhdGlvbiA9IGdldFJlbGF0aXZlUGF0aHMob1Byb3BlcnR5RGF0YU1vZGVsUGF0aCk7XG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24gPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKG9Qcm9wZXJ0eURlZmluaXRpb24sIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24pO1xuXHRpZiAoaGFzU3RhdGljUGVyY2VudFVuaXQob1Byb3BlcnR5RGVmaW5pdGlvbikpIHtcblx0XHRpZiAoZm9ybWF0T3B0aW9ucz8uc2hvd01lYXN1cmUgPT09IGZhbHNlKSB7XG5cdFx0XHRyZXR1cm4gcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbjtcblx0XHR9XG5cdFx0cmV0dXJuIGZvcm1hdFJlc3VsdChbcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbl0sIHZhbHVlRm9ybWF0dGVycy5mb3JtYXRXaXRoUGVyY2VudGFnZSk7XG5cdH1cblx0Y29uc3QgY29tcGxleFR5cGUgPSB1bml0ID8gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Vbml0XCIgOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkN1cnJlbmN5XCI7XG5cdHVuaXQgPSB1bml0ID8gdW5pdCA6IChvUHJvcGVydHlEZWZpbml0aW9uLmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kgYXMgdW5rbm93biBhcyBVbml0IHwgdW5kZWZpbmVkKTtcblx0Y29uc3QgdW5pdEJpbmRpbmdFeHByZXNzaW9uID1cblx0XHRpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbih1bml0KSAmJiB1bml0LiR0YXJnZXRcblx0XHRcdD8gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbih1bml0LiR0YXJnZXQsIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih1bml0LCByZWxhdGl2ZUxvY2F0aW9uKSwgaWdub3JlVW5pdENvbnN0cmFpbnQpXG5cdFx0XHQ6IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih1bml0LCByZWxhdGl2ZUxvY2F0aW9uKTtcblxuXHRyZXR1cm4gYWRkVHlwZUluZm9ybWF0aW9uKFtwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uLCB1bml0QmluZGluZ0V4cHJlc3Npb25dLCBjb21wbGV4VHlwZSwgdW5kZWZpbmVkLCBmb3JtYXRPcHRpb25zKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRCaW5kaW5nRm9yVW5pdE9yQ3VycmVuY3kgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+IHwgdW5kZWZpbmVkXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB8IHN0cmluZyB7XG5cdGNvbnN0IG9Qcm9wZXJ0eURlZmluaXRpb24gPSBvUHJvcGVydHlEYXRhTW9kZWxQYXRoPy50YXJnZXRPYmplY3Q7XG5cdGlmICghb1Byb3BlcnR5RGVmaW5pdGlvbikge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cblx0bGV0IHVuaXQgPSBvUHJvcGVydHlEZWZpbml0aW9uLmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdDtcblx0aWYgKGhhc1N0YXRpY1BlcmNlbnRVbml0KG9Qcm9wZXJ0eURlZmluaXRpb24pKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KFwiJVwiKTtcblx0fVxuXHRjb25zdCByZWxhdGl2ZUxvY2F0aW9uID0gZ2V0UmVsYXRpdmVQYXRocyhvUHJvcGVydHlEYXRhTW9kZWxQYXRoKTtcblxuXHRjb25zdCBjb21wbGV4VHlwZSA9IHVuaXQgPyBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlVuaXRcIiA6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuQ3VycmVuY3lcIjtcblx0dW5pdCA9IHVuaXQgPyB1bml0IDogKG9Qcm9wZXJ0eURlZmluaXRpb24uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeSBhcyB1bmtub3duIGFzIFVuaXQgfCB1bmRlZmluZWQpO1xuXHRjb25zdCB1bml0QmluZGluZ0V4cHJlc3Npb24gPVxuXHRcdGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKHVuaXQpICYmIHVuaXQuJHRhcmdldFxuXHRcdFx0PyBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKHVuaXQuJHRhcmdldCwgZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHVuaXQsIHJlbGF0aXZlTG9jYXRpb24pKVxuXHRcdFx0OiBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odW5pdCwgcmVsYXRpdmVMb2NhdGlvbik7XG5cblx0bGV0IHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24gPSBwYXRoSW5Nb2RlbChcblx0XHRnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoKG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgpXG5cdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz47XG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24gPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKG9Qcm9wZXJ0eURlZmluaXRpb24sIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24sIHRydWUpO1xuXHRyZXR1cm4gYWRkVHlwZUluZm9ybWF0aW9uKFtwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uLCB1bml0QmluZGluZ0V4cHJlc3Npb25dLCBjb21wbGV4VHlwZSwgdW5kZWZpbmVkLCB7XG5cdFx0cGFyc2VLZWVwc0VtcHR5U3RyaW5nOiB0cnVlLFxuXHRcdHNob3dOdW1iZXI6IGZhbHNlXG5cdH0pO1xufTtcbmV4cG9ydCBjb25zdCBnZXRCaW5kaW5nV2l0aFRpbWV6b25lID0gZnVuY3Rpb24gKFxuXHRvUHJvcGVydHlEYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pixcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4sXG5cdGlnbm9yZVVuaXRDb25zdHJhaW50ID0gZmFsc2UsXG5cdGhpZGVUaW1lem9uZUZvckVtcHR5VmFsdWVzID0gZmFsc2UsXG5cdGRhdGVGb3JtYXRPcHRpb25zPzogZGF0ZUZvcm1hdE9wdGlvbnNcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0Y29uc3Qgb1Byb3BlcnR5RGVmaW5pdGlvbiA9IG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0IGFzIFByb3BlcnR5O1xuXHRjb25zdCB0aW1lem9uZSA9IG9Qcm9wZXJ0eURlZmluaXRpb24uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGltZXpvbmU7XG5cdGNvbnN0IHJlbGF0aXZlTG9jYXRpb24gPSBnZXRSZWxhdGl2ZVBhdGhzKG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgpO1xuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uID0gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihvUHJvcGVydHlEZWZpbml0aW9uLCBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uKTtcblxuXHRjb25zdCBjb21wbGV4VHlwZSA9IFwic2FwLmZlLmNvcmUudHlwZS5EYXRlVGltZVdpdGhUaW1lem9uZVwiO1xuXHRjb25zdCB1bml0QmluZGluZ0V4cHJlc3Npb24gPVxuXHRcdGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKHRpbWV6b25lKSAmJiB0aW1lem9uZS4kdGFyZ2V0XG5cdFx0XHQ/IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24oXG5cdFx0XHRcdFx0KHRpbWV6b25lIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjx1bmtub3duPikuJHRhcmdldCBhcyBQcm9wZXJ0eSxcblx0XHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odGltZXpvbmUsIHJlbGF0aXZlTG9jYXRpb24pLFxuXHRcdFx0XHRcdGlnbm9yZVVuaXRDb25zdHJhaW50XG5cdFx0XHQgIClcblx0XHRcdDogZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHRpbWV6b25lLCByZWxhdGl2ZUxvY2F0aW9uKTtcblx0bGV0IGZvcm1hdE9wdGlvbnMgPSB7fTtcblx0aWYgKGhpZGVUaW1lem9uZUZvckVtcHR5VmFsdWVzKSB7XG5cdFx0Zm9ybWF0T3B0aW9ucyA9IHtcblx0XHRcdHNob3dUaW1lem9uZUZvckVtcHR5VmFsdWVzOiBmYWxzZVxuXHRcdH07XG5cdH1cblxuXHRpZiAoZGF0ZUZvcm1hdE9wdGlvbnM/LnNob3dUaW1lICE9PSB1bmRlZmluZWQpIHtcblx0XHRmb3JtYXRPcHRpb25zID0geyAuLi5mb3JtYXRPcHRpb25zLCAuLi57IHNob3dUaW1lOiBkYXRlRm9ybWF0T3B0aW9ucy5zaG93VGltZSB9IH07XG5cdH1cblx0aWYgKGRhdGVGb3JtYXRPcHRpb25zPy5zaG93RGF0ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0Zm9ybWF0T3B0aW9ucyA9IHsgLi4uZm9ybWF0T3B0aW9ucywgLi4ueyBzaG93RGF0ZTogZGF0ZUZvcm1hdE9wdGlvbnMuc2hvd0RhdGUgfSB9O1xuXHR9XG5cdGlmIChkYXRlRm9ybWF0T3B0aW9ucz8uc2hvd1RpbWV6b25lICE9PSB1bmRlZmluZWQpIHtcblx0XHRmb3JtYXRPcHRpb25zID0geyAuLi5mb3JtYXRPcHRpb25zLCAuLi57IHNob3dUaW1lem9uZTogZGF0ZUZvcm1hdE9wdGlvbnMuc2hvd1RpbWV6b25lIH0gfTtcblx0fVxuXG5cdHJldHVybiBhZGRUeXBlSW5mb3JtYXRpb24oW3Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb24sIHVuaXRCaW5kaW5nRXhwcmVzc2lvbl0sIGNvbXBsZXhUeXBlLCB1bmRlZmluZWQsIGZvcm1hdE9wdGlvbnMpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEJpbmRpbmdGb3JUaW1lem9uZSA9IGZ1bmN0aW9uIChcblx0cHJvcGVydHlEYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pixcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0Y29uc3QgcHJvcGVydHlEZWZpbml0aW9uID0gcHJvcGVydHlEYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCBhcyBQcm9wZXJ0eTtcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiA9IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24ocHJvcGVydHlEZWZpbml0aW9uLCBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uKTtcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbi50eXBlID0gXCJhbnlcIjtcblx0Y29uc3QgY29tcGxleFR5cGUgPSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRhdGVUaW1lV2l0aFRpbWV6b25lXCI7XG5cdGNvbnN0IGZvcm1hdE9wdGlvbnMgPSB7IHNob3dUaW1lOiBmYWxzZSwgc2hvd0RhdGU6IGZhbHNlLCBzaG93VGltZXpvbmU6IHRydWUgfTtcblxuXHQvLyBudWxsIGlzIHJlcXVpcmVkIGJ5IGZvcm1hdHRlciB3aGVuIHRoZXJlIGlzIGp1c3QgYSB0aW1lem9uZVxuXHRyZXR1cm4gYWRkVHlwZUluZm9ybWF0aW9uKFtudWxsLCBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uXSwgY29tcGxleFR5cGUsIHVuZGVmaW5lZCwgZm9ybWF0T3B0aW9ucyk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QWxpZ25tZW50RXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChcblx0b0NvbXB1dGVkRWRpdE1vZGU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+LFxuXHRzQWxpZ25EaXNwbGF5ID0gXCJCZWdpblwiLFxuXHRzQWxpZ25FZGl0ID0gXCJCZWdpblwiXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGlmRWxzZShlcXVhbChvQ29tcHV0ZWRFZGl0TW9kZSwgXCJEaXNwbGF5XCIpLCBzQWxpZ25EaXNwbGF5LCBzQWxpZ25FZGl0KSk7XG59O1xuXG4vKipcbiAqIEZvcm1hdHRlciBoZWxwZXIgdG8gcmV0cmlldmUgdGhlIGNvbnZlcnRlckNvbnRleHQgZnJvbSB0aGUgbWV0YW1vZGVsIGNvbnRleHQuXG4gKlxuICogQHBhcmFtIG9Db250ZXh0IFRoZSBvcmlnaW5hbCBtZXRhbW9kZWwgY29udGV4dFxuICogQHBhcmFtIG9JbnRlcmZhY2UgVGhlIGN1cnJlbnQgdGVtcGxhdGluZyBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgQ29udmVydGVyQ29udGV4dCByZXByZXNlbnRpbmcgdGhhdCBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IGdldENvbnZlcnRlckNvbnRleHQgPSBmdW5jdGlvbiAob0NvbnRleHQ6IE1ldGFNb2RlbENvbnRleHQsIG9JbnRlcmZhY2U6IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZSk6IG9iamVjdCB8IG51bGwge1xuXHRpZiAob0ludGVyZmFjZSAmJiBvSW50ZXJmYWNlLmNvbnRleHQpIHtcblx0XHRyZXR1cm4gY29udmVydE1ldGFNb2RlbENvbnRleHQob0ludGVyZmFjZS5jb250ZXh0KSBhcyBvYmplY3Q7XG5cdH1cblx0cmV0dXJuIG51bGw7XG59O1xuZ2V0Q29udmVydGVyQ29udGV4dC5yZXF1aXJlc0lDb250ZXh0ID0gdHJ1ZTtcblxuLyoqXG4gKiBGb3JtYXR0ZXIgaGVscGVyIHRvIHJldHJpZXZlIHRoZSBkYXRhIG1vZGVsIG9iamVjdHMgdGhhdCBhcmUgaW52b2x2ZWQgZnJvbSB0aGUgbWV0YW1vZGVsIGNvbnRleHQuXG4gKlxuICogQHBhcmFtIG9Db250ZXh0IFRoZSBvcmlnaW5hbCBPRGF0YU1ldGFNb2RlbCBjb250ZXh0XG4gKiBAcGFyYW0gb0ludGVyZmFjZSBUaGUgY3VycmVudCB0ZW1wbGF0aW5nIGNvbnRleHRcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGVudGl0eXNldHMgYW5kIG5hdnByb3BlcnRpZXMgdGhhdCBhcmUgaW52b2x2ZWQgdG8gZ2V0IHRvIGEgc3BlY2lmaWMgb2JqZWN0IGluIHRoZSBtZXRhbW9kZWxcbiAqL1xuZXhwb3J0IGNvbnN0IGdldERhdGFNb2RlbE9iamVjdFBhdGggPSBmdW5jdGlvbiA8VD4oXG5cdG9Db250ZXh0OiBNZXRhTW9kZWxDb250ZXh0LFxuXHRvSW50ZXJmYWNlOiBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2Vcbik6IERhdGFNb2RlbE9iamVjdFBhdGg8VD4gfCBudWxsIHtcblx0aWYgKG9JbnRlcmZhY2UgJiYgb0ludGVyZmFjZS5jb250ZXh0KSB7XG5cdFx0cmV0dXJuIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhvSW50ZXJmYWNlLmNvbnRleHQpO1xuXHR9XG5cdHJldHVybiBudWxsO1xufTtcbmdldERhdGFNb2RlbE9iamVjdFBhdGgucmVxdWlyZXNJQ29udGV4dCA9IHRydWU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSByZWZlcmVuY2VkIHByb3BlcnR5IGlzIHBhcnQgb2YgYSAxLi5uIG5hdmlnYXRpb24uXG4gKlxuICogQHBhcmFtIG9EYXRhTW9kZWxQYXRoIFRoZSBkYXRhIG1vZGVsIHBhdGggdG8gY2hlY2tcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHByb3BlcnR5IGlzIHBhcnQgb2YgYSAxLi5uIG5hdmlnYXRpb25cbiAqL1xuZXhwb3J0IGNvbnN0IGlzTXVsdGlWYWx1ZUZpZWxkID0gZnVuY3Rpb24gKG9EYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPHVua25vd24+KTogYm9vbGVhbiB7XG5cdGlmIChvRGF0YU1vZGVsUGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcz8ubGVuZ3RoKSB7XG5cdFx0Y29uc3QgaGFzT25lVG9NYW55TmF2aWdhdGlvbiA9XG5cdFx0XHRvRGF0YU1vZGVsUGF0aD8ubmF2aWdhdGlvblByb3BlcnRpZXMuZmluZEluZGV4KChvTmF2KSA9PiB7XG5cdFx0XHRcdGlmIChpc011bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5KG9OYXYpKSB7XG5cdFx0XHRcdFx0aWYgKG9EYXRhTW9kZWxQYXRoLmNvbnRleHRMb2NhdGlvbj8ubmF2aWdhdGlvblByb3BlcnRpZXM/Lmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0Ly93ZSBjaGVjayB0aGUgb25lIHRvIG1hbnkgbmF2IGlzIG5vdCBhbHJlYWR5IHBhcnQgb2YgdGhlIGNvbnRleHRcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdG9EYXRhTW9kZWxQYXRoLmNvbnRleHRMb2NhdGlvbj8ubmF2aWdhdGlvblByb3BlcnRpZXMuZmluZEluZGV4KFxuXHRcdFx0XHRcdFx0XHRcdChvQ29udGV4dE5hdikgPT4gb0NvbnRleHROYXYubmFtZSA9PT0gb05hdi5uYW1lXG5cdFx0XHRcdFx0XHRcdCkgPT09IC0xXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9KSA+IC0xO1xuXHRcdGlmIChoYXNPbmVUb01hbnlOYXZpZ2F0aW9uKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcbmV4cG9ydCBjb25zdCBnZXRSZXF1aXJlZEV4cHJlc3Npb25Bc09iamVjdCA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRvRGF0YUZpZWxkQ29udmVydGVkPzogUHJvcGVydHkgfCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzLFxuXHRmb3JjZUVkaXRNb2RlID0gZmFsc2Vcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBnZXRSZXF1aXJlZEV4cHJlc3Npb24ob1Byb3BlcnR5UGF0aCwgb0RhdGFGaWVsZENvbnZlcnRlZCwgZm9yY2VFZGl0TW9kZSwgdHJ1ZSkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xufTtcbmV4cG9ydCBjb25zdCBnZXRSZXF1aXJlZEV4cHJlc3Npb24gPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0b0RhdGFGaWVsZENvbnZlcnRlZD86IFByb3BlcnR5IHwgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcyxcblx0Zm9yY2VFZGl0TW9kZSA9IGZhbHNlLFxuXHRiQXNPYmplY3QgPSBmYWxzZSxcblx0b1JlcXVpcmVkUHJvcGVydGllczoge1xuXHRcdHJlcXVpcmVkUHJvcGVydGllc0Zyb21JbnNlcnRSZXN0cmljdGlvbnM/OiB1bmtub3duW107XG5cdFx0cmVxdWlyZWRQcm9wZXJ0aWVzRnJvbVVwZGF0ZVJlc3RyaWN0aW9ucz86IHVua25vd25bXTtcblx0fSA9IHt9LFxuXHRkYXRhTW9kZWxPYmplY3RQYXRoPzogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPlxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBhUmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucyA9IG9SZXF1aXJlZFByb3BlcnRpZXMucmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucztcblx0Y29uc3QgYVJlcXVpcmVkUHJvcGVydGllc0Zyb21VcGRhdGVSZXN0cmljdGlvbnMgPSBvUmVxdWlyZWRQcm9wZXJ0aWVzLnJlcXVpcmVkUHJvcGVydGllc0Zyb21VcGRhdGVSZXN0cmljdGlvbnM7XG5cdGlmICghb1Byb3BlcnR5UGF0aCB8fCB0eXBlb2Ygb1Byb3BlcnR5UGF0aCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdGlmIChiQXNPYmplY3QpIHtcblx0XHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdFx0fVxuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihjb25zdGFudChmYWxzZSkpO1xuXHR9XG5cdGxldCByZWxhdGl2ZVBhdGg7XG5cdGlmIChkYXRhTW9kZWxPYmplY3RQYXRoKSB7XG5cdFx0cmVsYXRpdmVQYXRoID0gZ2V0UmVsYXRpdmVQYXRocyhkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0fVxuXHRsZXQgZGF0YUZpZWxkUmVxdWlyZWRFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBjb25zdGFudChmYWxzZSk7XG5cdGlmIChvRGF0YUZpZWxkQ29udmVydGVkICE9PSB1bmRlZmluZWQgJiYgIWlzUHJvcGVydHkob0RhdGFGaWVsZENvbnZlcnRlZCkpIHtcblx0XHQvLyBGb3IgdGhlIGRhdGFmaWVsZCBleHByZXNzaW9uIHdlIHNob3VsZCBub3QgIGNvbnNpZGVyIHRoZSByZWxhdGl2ZSBwYXRoXG5cdFx0ZGF0YUZpZWxkUmVxdWlyZWRFeHByZXNzaW9uID0gaXNSZXF1aXJlZEV4cHJlc3Npb24ob0RhdGFGaWVsZENvbnZlcnRlZCk7XG5cdH1cblx0bGV0IHJlcXVpcmVkUHJvcGVydHlGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gY29uc3RhbnQoZmFsc2UpO1xuXHRsZXQgcmVxdWlyZWRQcm9wZXJ0eUZyb21VcGRhdGVSZXN0cmljdGlvbnNFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBjb25zdGFudChmYWxzZSk7XG5cblx0Y29uc3Qgb1Byb3BlcnR5OiBQcm9wZXJ0eSA9IChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihvUHJvcGVydHlQYXRoKSAmJiBvUHJvcGVydHlQYXRoLiR0YXJnZXQpIHx8IChvUHJvcGVydHlQYXRoIGFzIFByb3BlcnR5KTtcblx0Ly8gRW5hYmxlbWVudCBkZXBlbmRzIG9uIHRoZSBmaWVsZCBjb250cm9sIGV4cHJlc3Npb25cblx0Ly8gSWYgdGhlIEZpZWxkIGNvbnRyb2wgaXMgc3RhdGljYWxseSBpbiBJbmFwcGxpY2FibGUgKGRpc2FibGVkKSAtPiBub3QgZW5hYmxlZFxuXHRjb25zdCByZXF1aXJlZEV4cHJlc3Npb24gPSBpc1JlcXVpcmVkRXhwcmVzc2lvbihvUHJvcGVydHksIHJlbGF0aXZlUGF0aCk7XG5cdGNvbnN0IGVkaXRNb2RlID0gZm9yY2VFZGl0TW9kZSB8fCBVSS5Jc0VkaXRhYmxlO1xuXHRpZiAoYVJlcXVpcmVkUHJvcGVydGllc0Zyb21JbnNlcnRSZXN0cmljdGlvbnM/LmluY2x1ZGVzKG9Qcm9wZXJ0eS5uYW1lKSkge1xuXHRcdHJlcXVpcmVkUHJvcGVydHlGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zRXhwcmVzc2lvbiA9IFVJLklzQ3JlYXRlTW9kZTtcblx0fVxuXHRpZiAoYVJlcXVpcmVkUHJvcGVydGllc0Zyb21VcGRhdGVSZXN0cmljdGlvbnM/LmluY2x1ZGVzKG9Qcm9wZXJ0eS5uYW1lKSkge1xuXHRcdHJlcXVpcmVkUHJvcGVydHlGcm9tVXBkYXRlUmVzdHJpY3Rpb25zRXhwcmVzc2lvbiA9IGFuZChVSS5Jc0VkaXRhYmxlLCBub3QoVUkuSXNDcmVhdGVNb2RlKSk7XG5cdH1cblx0Y29uc3QgcmV0dXJuRXhwcmVzc2lvbiA9IG9yKFxuXHRcdGFuZChvcihyZXF1aXJlZEV4cHJlc3Npb24sIGRhdGFGaWVsZFJlcXVpcmVkRXhwcmVzc2lvbiksIGVkaXRNb2RlKSxcblx0XHRyZXF1aXJlZFByb3BlcnR5RnJvbUluc2VydFJlc3RyaWN0aW9uc0V4cHJlc3Npb24sXG5cdFx0cmVxdWlyZWRQcm9wZXJ0eUZyb21VcGRhdGVSZXN0cmljdGlvbnNFeHByZXNzaW9uXG5cdCk7XG5cdGlmIChiQXNPYmplY3QpIHtcblx0XHRyZXR1cm4gcmV0dXJuRXhwcmVzc2lvbjtcblx0fVxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24ocmV0dXJuRXhwcmVzc2lvbik7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UmVxdWlyZWRFeHByZXNzaW9uRm9yQ29ubmVjdGVkRGF0YUZpZWxkID0gZnVuY3Rpb24gKFxuXHRkYXRhRmllbGRPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPEFubm90YXRpb25QYXRoPENvbm5lY3RlZEZpZWxkc1R5cGU+PlxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRjb25zdCBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzPiA9IChkYXRhRmllbGRPYmplY3RQYXRoPy50YXJnZXRPYmplY3Q/LiR0YXJnZXQ/LkRhdGEgPz8ge30pIGFzIFJlY29yZDxcblx0XHRzdHJpbmcsXG5cdFx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlc1xuXHQ+O1xuXHRjb25zdCBrZXlzOiBBcnJheTxzdHJpbmc+ID0gT2JqZWN0LmtleXMoZGF0YSk7XG5cdGNvbnN0IGRhdGFGaWVsZHMgPSBbXTtcblx0bGV0IHByb3BlcnR5UGF0aDtcblx0Y29uc3QgaXNSZXF1aXJlZEV4cHJlc3Npb25zOiAoQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4pW10gfCB1bmRlZmluZWQgPSBbXTtcblx0Zm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuXHRcdGlmIChkYXRhW2tleV0/LltcIiRUeXBlXCJdICYmIGRhdGFba2V5XVtcIiRUeXBlXCJdPy5pbmNsdWRlcyhcIkRhdGFGaWVsZFwiKSkge1xuXHRcdFx0ZGF0YUZpZWxkcy5wdXNoKGRhdGFba2V5XSk7XG5cdFx0fVxuXHR9XG5cdGZvciAoY29uc3QgZGF0YUZpZWxkIG9mIGRhdGFGaWVsZHMpIHtcblx0XHRzd2l0Y2ggKGRhdGFGaWVsZC4kVHlwZSkge1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQ6XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aDpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybDpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEFjdGlvbjpcblx0XHRcdFx0aWYgKHR5cGVvZiBkYXRhRmllbGQuVmFsdWUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRwcm9wZXJ0eVBhdGggPSBkYXRhRmllbGQuVmFsdWUuJHRhcmdldDtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjpcblx0XHRcdFx0aWYgKGRhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQpIHtcblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRpc0Fubm90YXRpb25PZlR5cGU8RGF0YUZpZWxkIHwgRGF0YVBvaW50VHlwZT4oZGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0LCBbXG5cdFx0XHRcdFx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZCxcblx0XHRcdFx0XHRcdFx0VUlBbm5vdGF0aW9uVHlwZXMuRGF0YVBvaW50VHlwZVxuXHRcdFx0XHRcdFx0XSlcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdGlmICh0eXBlb2YgZGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0LlZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5UGF0aCA9IGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldC5WYWx1ZS4kdGFyZ2V0O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZiAodHlwZW9mIGRhdGFGaWVsZC5UYXJnZXQgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlQYXRoID0gZGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0fVxuXHRcdGlzUmVxdWlyZWRFeHByZXNzaW9ucy5wdXNoKGdldFJlcXVpcmVkRXhwcmVzc2lvbkFzT2JqZWN0KHByb3BlcnR5UGF0aCwgZGF0YUZpZWxkLCBmYWxzZSkpO1xuXHR9XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihvciguLi4oaXNSZXF1aXJlZEV4cHJlc3Npb25zIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdKSkpO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiBoZWFkZXIgZmFjZXQgb3IgYWN0aW9uIGlzIHZpc2libGUuXG4gKlxuICogQHBhcmFtIHRhcmdldE9iamVjdCBIZWFkZXIgZmFjZXRzIG9yIEFjdGlvbnNcbiAqIEByZXR1cm5zIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWaXNpYmxlKFxuXHR0YXJnZXRPYmplY3Q6XG5cdFx0fCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzXG5cdFx0fCBEYXRhUG9pbnRUeXBlVHlwZXNcblx0XHR8IFJlZmVyZW5jZUZhY2V0XG5cdFx0fCBDb2xsZWN0aW9uRmFjZXRcblx0XHR8IERhdGFGaWVsZEZvckFjdGlvblR5cGVzXG5cdFx0fCBQcm9wZXJ0eVxuXHRcdHwgdW5kZWZpbmVkXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gbm90KGVxdWFsKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih0YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5VST8uSGlkZGVuKSwgdHJ1ZSkpO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGFjdGlvbiBwYXJhbWV0ZXIgaXMgc3VwcG9ydHMgbXVsdGkgbGluZSBpbnB1dC5cbiAqXG4gKiBAcGFyYW0gZGF0YU1vZGVsT2JqZWN0UGF0aCBPYmplY3QgcGF0aCB0byB0aGUgYWN0aW9uIHBhcmFtZXRlci5cbiAqIEByZXR1cm5zIEJvb2xlYW5cbiAqL1xuZXhwb3J0IGNvbnN0IGlzTXVsdGlMaW5lID0gZnVuY3Rpb24gKGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8QWN0aW9uUGFyYW1ldGVyPik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gaXNNdWx0aUxpbmVUZXh0KGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0KTtcbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIGFjdGlvbiBpcyBlbmFibGVkLlxuICogQHBhcmFtIGFjdGlvblRhcmdldCBBY3Rpb25cbiAqIEBwYXJhbSBjb252ZXJ0ZWRUeXBlcyBDb252ZXJ0ZWRNZXRhZGF0YVxuICogQHBhcmFtIGRhdGFNb2RlbE9iamVjdFBhdGggRGF0YU1vZGVsT2JqZWN0UGF0aFxuICogQHBhcmFtIHBhdGhGcm9tQ29udGV4dExvY2F0aW9uIEJvb2xlYW5cbiAqIEByZXR1cm5zIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWN0aW9uRW5hYmxlZEV4cHJlc3Npb24oXG5cdGFjdGlvblRhcmdldDogQWN0aW9uLFxuXHRjb252ZXJ0ZWRUeXBlczogQ29udmVydGVkTWV0YWRhdGEsXG5cdGRhdGFNb2RlbE9iamVjdFBhdGg/OiBEYXRhTW9kZWxPYmplY3RQYXRoPFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHBhdGhGcm9tQ29udGV4dExvY2F0aW9uPzogYm9vbGVhblxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3Qgb3BlcmF0aW9uQXZhaWxhYmxlSXNBbm5vdGF0ZWQgPVxuXHRcdGFjdGlvblRhcmdldC5hbm5vdGF0aW9ucy5Db3JlPy5PcGVyYXRpb25BdmFpbGFibGU/LnRlcm0gPT09IENvcmVBbm5vdGF0aW9uVGVybXMuT3BlcmF0aW9uQXZhaWxhYmxlO1xuXG5cdGlmICghb3BlcmF0aW9uQXZhaWxhYmxlSXNBbm5vdGF0ZWQpIHtcblx0XHQvLyBPcGVyYXRpb25BdmFpbGFibGUgdGVybSBkb2Vzbid0IGV4aXN0IGZvciB0aGUgYWN0aW9uXG5cdFx0cmV0dXJuIGNvbnN0YW50KHRydWUpO1xuXHR9XG5cblx0bGV0IHByZWZpeCA9IFwiXCI7XG5cdGlmIChcblx0XHRkYXRhTW9kZWxPYmplY3RQYXRoICYmXG5cdFx0cGF0aEZyb21Db250ZXh0TG9jYXRpb24gJiZcblx0XHRwYXRoRnJvbUNvbnRleHRMb2NhdGlvbiA9PT0gdHJ1ZSAmJlxuXHRcdGRhdGFNb2RlbE9iamVjdFBhdGguY29udGV4dExvY2F0aW9uPy50YXJnZXRFbnRpdHlUeXBlICYmXG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aC5jb250ZXh0TG9jYXRpb24udGFyZ2V0RW50aXR5VHlwZSAhPT0gYWN0aW9uVGFyZ2V0LnNvdXJjZUVudGl0eVR5cGVcblx0KSB7XG5cdFx0Y29uc3QgbmF2aWdhdGlvbnMgPSBnZXRSZWxhdGl2ZVBhdGhzKGRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRcdGxldCBzb3VyY2VBY3Rpb25EYXRhTW9kZWxPYmplY3QgPSBlbmhhbmNlRGF0YU1vZGVsUGF0aChkYXRhTW9kZWxPYmplY3RQYXRoLmNvbnRleHRMb2NhdGlvbik7XG5cdFx0Ly9TdGFydCBmcm9tIGNvbnRleHRMb2NhdGlvbiBhbmQgbmF2aWdhdGUgdW50aWwgdGhlIHNvdXJjZSBlbnRpdHlUeXBlIG9mIHRoZSBhY3Rpb24gdG8gZ2V0IHRoZSByaWdodCBwcmVmaXhcblx0XHRmb3IgKGNvbnN0IG5hdiBvZiBuYXZpZ2F0aW9ucykge1xuXHRcdFx0c291cmNlQWN0aW9uRGF0YU1vZGVsT2JqZWN0ID0gZW5oYW5jZURhdGFNb2RlbFBhdGgoc291cmNlQWN0aW9uRGF0YU1vZGVsT2JqZWN0LCBuYXYpO1xuXHRcdFx0aWYgKHNvdXJjZUFjdGlvbkRhdGFNb2RlbE9iamVjdC50YXJnZXRFbnRpdHlUeXBlID09PSBhY3Rpb25UYXJnZXQuc291cmNlRW50aXR5VHlwZSkge1xuXHRcdFx0XHRwcmVmaXggPSBgJHtnZXRSZWxhdGl2ZVBhdGhzKHNvdXJjZUFjdGlvbkRhdGFNb2RlbE9iamVjdCkuam9pbihcIi9cIil9L2A7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRjb25zdCBiaW5kaW5nUGFyYW1ldGVyRnVsbE5hbWUgPSBhY3Rpb25UYXJnZXQuaXNCb3VuZCA/IGFjdGlvblRhcmdldC5wYXJhbWV0ZXJzWzBdPy5mdWxseVF1YWxpZmllZE5hbWUgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IG9wZXJhdGlvbkF2YWlsYWJsZUV4cHJlc3Npb24gPSBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oXG5cdFx0YWN0aW9uVGFyZ2V0LmFubm90YXRpb25zLkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZSxcblx0XHRbXSxcblx0XHR1bmRlZmluZWQsXG5cdFx0KHBhdGg6IHN0cmluZykgPT4gYCR7cHJlZml4fSR7YmluZGluZ0NvbnRleHRQYXRoVmlzaXRvcihwYXRoLCBjb252ZXJ0ZWRUeXBlcywgYmluZGluZ1BhcmFtZXRlckZ1bGxOYW1lKX1gXG5cdCk7XG5cblx0cmV0dXJuIGVxdWFsKG9wZXJhdGlvbkF2YWlsYWJsZUV4cHJlc3Npb24sIHRydWUpO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBmaWVsZCBpcyBNdWx0aUxpbmUgYW5kIG5lZWRzIHZpc2liaWxpdHkuXG4gKiBAcGFyYW0gaXNNdWx0aUxpbmVGaWVsZCBUcnVlIGlmIHRoZSBmaWVsZCBpcyBtdWx0aWxpbmVcbiAqIEBwYXJhbSBmb3JtRWxlbWVudHNMZW5ndGggTnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBmb3JtXG4gKiBAcGFyYW0gdXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXMgSWYgdGhlIG9ubHkgZmllbGQgd2l0aGluIGEgZm9ybSBjb250YWluZXIgaXMgYSB0ZXh0LWFyZWEgZmllbGQsIHRoZSBsYWJlbCBpcyBoaWRkZW5cbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGZvcm0gaGFzIG9ubHkgMSBlbGVtZW50IGFuZCBpcyBtdWx0aWxpbmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTXVsdGlMaW5lTGFiZWxBbmROZWVkVmlzaWJpbGl0eShcblx0aXNNdWx0aUxpbmVGaWVsZDogYm9vbGVhbixcblx0Zm9ybUVsZW1lbnRzTGVuZ3RoOiBudW1iZXIsXG5cdHVzZVNpbmdsZVRleHRBcmVhRmllbGRBc05vdGVzOiBib29sZWFuXG4pOiBib29sZWFuIHtcblx0aWYgKHVzZVNpbmdsZVRleHRBcmVhRmllbGRBc05vdGVzICYmIGlzTXVsdGlMaW5lRmllbGQgJiYgZm9ybUVsZW1lbnRzTGVuZ3RoID09PSAxKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQThHTyxNQUFNQSxhQUFhLEdBQUc7SUFDNUI7QUFDRDtBQUNBO0FBQ0E7SUFDQ0MsUUFBUSxFQUFFLFVBQVU7SUFDcEI7QUFDRDtBQUNBO0FBQ0E7SUFDQ0MsT0FBTyxFQUFFLFNBQVM7SUFDbEI7QUFDRDtBQUNBO0FBQ0E7SUFDQ0MsUUFBUSxFQUFFLFVBQVU7SUFDcEI7QUFDRDtBQUNBO0FBQ0E7QUFD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
|
|
668
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGaWVsZEVkaXRNb2RlIiwiRGlzYWJsZWQiLCJEaXNwbGF5IiwiRWRpdGFibGUiLCJFZGl0YWJsZURpc3BsYXkiLCJFZGl0YWJsZVJlYWRPbmx5IiwiUmVhZE9ubHkiLCJnZXREaXNwbGF5TW9kZSIsIm9EYXRhTW9kZWxPYmplY3RQYXRoIiwiRGlzcGxheU1vZGVGb3JtYXR0ZXIiLCJ0YXJnZXRPYmplY3QiLCJnZXRFZGl0YWJsZUV4cHJlc3Npb25Bc09iamVjdCIsIm9Qcm9wZXJ0eVBhdGgiLCJvRGF0YUZpZWxkQ29udmVydGVkIiwiaXNFZGl0YWJsZSIsIlVJIiwiSXNFZGl0YWJsZSIsImNvbnNpZGVyVXBkYXRlUmVzdHJpY3Rpb25zIiwiZ2V0RWRpdGFibGVFeHByZXNzaW9uIiwidW5kZWZpbmVkIiwiYkFzT2JqZWN0IiwicmVsYXRpdmVQYXRoIiwiZ2V0UmVsYXRpdmVQYXRocyIsImNvbXBpbGVFeHByZXNzaW9uIiwiZGF0YUZpZWxkRWRpdGFibGVFeHByZXNzaW9uIiwiY29uc3RhbnQiLCJpc1Byb3BlcnR5IiwiaWZFbHNlIiwiaXNOb25FZGl0YWJsZUV4cHJlc3Npb24iLCJvUHJvcGVydHkiLCJpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsIiR0YXJnZXQiLCJpc1BhdGhVcGRhdGFibGVFeHByZXNzaW9uIiwiaXNQYXRoVXBkYXRhYmxlIiwicHJvcGVydHlQYXRoIiwicGF0aFZpc2l0b3IiLCJwYXRoIiwibmF2aWdhdGlvblBhdGhzIiwic2luZ2xldG9uUGF0aFZpc2l0b3IiLCJjb252ZXJ0ZWRUeXBlcyIsImVkaXRhYmxlRXhwcmVzc2lvbiIsIm9yIiwiYW5kIiwibm90IiwiaXNDb21wdXRlZCIsImlzS2V5IiwiaXNJbW11dGFibGUiLCJJc1RyYW5zaWVudEJpbmRpbmciLCJ1bnJlc29sdmFibGVFeHByZXNzaW9uIiwiZ2V0Q29sbGFib3JhdGlvbkV4cHJlc3Npb24iLCJkYXRhTW9kZWxPYmplY3RQYXRoIiwiZm9ybWF0dGVyIiwib2JqZWN0UGF0aCIsImdldFRhcmdldE9iamVjdFBhdGgiLCJhY3Rpdml0eUV4cHJlc3Npb24iLCJwYXRoSW5Nb2RlbCIsImtleXMiLCJ0YXJnZXRFbnRpdHlUeXBlIiwia2V5c0V4cHJlc3Npb25zIiwiZm9yRWFjaCIsImtleSIsImtleUV4cHJlc3Npb24iLCJuYW1lIiwicHVzaCIsImZvcm1hdFJlc3VsdCIsImdldEVuYWJsZWRFeHByZXNzaW9uQXNPYmplY3QiLCJnZXRFbmFibGVkRXhwcmVzc2lvbiIsImRhdGFGaWVsZEVuYWJsZWRFeHByZXNzaW9uIiwiaXNEaXNhYmxlZEV4cHJlc3Npb24iLCJlbmFibGVkRXhwcmVzc2lvbiIsImdldEVkaXRNb2RlIiwibWVhc3VyZVJlYWRPbmx5IiwiYXNPYmplY3QiLCJkYXRhRmllbGRDb252ZXJ0ZWQiLCIkVHlwZSIsInByb3BlcnR5IiwiYXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkiLCJnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eSIsInVuaXRQcm9wZXJ0eSIsImdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkiLCJyZXN1bHRFeHByZXNzaW9uIiwiaXNVbml0UmVhZE9ubHkiLCJpc1JlYWRPbmx5RXhwcmVzc2lvbiIsImlzQ29uc3RhbnQiLCJhbm5vdGF0aW9ucyIsIk1lYXN1cmVzIiwiSVNPQ3VycmVuY3kiLCJVbml0IiwicmVhZE9ubHlFeHByZXNzaW9uIiwiZWRpdE1vZGVFeHByZXNzaW9uIiwiaGFzVmFsaWRBbmFseXRpY2FsQ3VycmVuY3lPclVuaXQiLCJvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoIiwib1Byb3BlcnR5RGVmaW5pdGlvbiIsImN1cnJlbmN5IiwibWVhc3VyZSIsImlzVHJ1dGh5IiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwiSXNUb3RhbCIsImdldEZpZWxkRGlzcGxheSIsInNUYXJnZXREaXNwbGF5TW9kZSIsIm9Db21wdXRlZEVkaXRNb2RlIiwiaGFzVGV4dEFubm90YXRpb24iLCJDb21tb24iLCJUZXh0IiwiaGFzVmFsdWVIZWxwIiwiZXF1YWwiLCJnZXRUeXBlQ29uZmlnIiwiZGF0YVR5cGUiLCJvVGFyZ2V0TWFwcGluZyIsIkVETV9UWVBFX01BUFBJTkciLCJ0eXBlIiwicHJvcGVydHlUeXBlQ29uZmlnIiwiY29uc3RyYWludHMiLCJmb3JtYXRPcHRpb25zIiwic2NhbGUiLCIkU2NhbGUiLCJwcmVjaXNpb24iLCIkUHJlY2lzaW9uIiwibWF4TGVuZ3RoIiwiJE1heExlbmd0aCIsIm51bGxhYmxlIiwiJE51bGxhYmxlIiwibWluaW11bSIsImlzTmFOIiwiVmFsaWRhdGlvbiIsIk1pbmltdW0iLCJtYXhpbXVtIiwiTWF4aW11bSIsImlzRGlnaXRTZXF1ZW5jZSIsIklzRGlnaXRTZXF1ZW5jZSIsIlY0IiwiJFY0IiwicGFyc2VBc1N0cmluZyIsImluZGV4T2YiLCJlbXB0eVN0cmluZyIsInBhcnNlS2VlcHNFbXB0eVN0cmluZyIsImdldEJpbmRpbmdXaXRoVW5pdE9yQ3VycmVuY3kiLCJvUHJvcGVydHlEYXRhTW9kZWxQYXRoIiwicHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiIsImlnbm9yZVVuaXRDb25zdHJhaW50IiwidW5pdCIsInJlbGF0aXZlTG9jYXRpb24iLCJmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uIiwiaGFzU3RhdGljUGVyY2VudFVuaXQiLCJzaG93TWVhc3VyZSIsInZhbHVlRm9ybWF0dGVycyIsImZvcm1hdFdpdGhQZXJjZW50YWdlIiwiY29tcGxleFR5cGUiLCJ1bml0QmluZGluZ0V4cHJlc3Npb24iLCJhZGRUeXBlSW5mb3JtYXRpb24iLCJnZXRCaW5kaW5nRm9yVW5pdE9yQ3VycmVuY3kiLCJnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoIiwic2hvd051bWJlciIsImdldEJpbmRpbmdXaXRoVGltZXpvbmUiLCJoaWRlVGltZXpvbmVGb3JFbXB0eVZhbHVlcyIsImRhdGVGb3JtYXRPcHRpb25zIiwidGltZXpvbmUiLCJUaW1lem9uZSIsInNob3dUaW1lem9uZUZvckVtcHR5VmFsdWVzIiwic2hvd1RpbWUiLCJzaG93RGF0ZSIsInNob3dUaW1lem9uZSIsImdldEJpbmRpbmdGb3JUaW1lem9uZSIsInByb3BlcnR5RGF0YU1vZGVsUGF0aCIsInByb3BlcnR5RGVmaW5pdGlvbiIsImdldEFsaWdubWVudEV4cHJlc3Npb24iLCJzQWxpZ25EaXNwbGF5Iiwic0FsaWduRWRpdCIsImdldENvbnZlcnRlckNvbnRleHQiLCJvQ29udGV4dCIsIm9JbnRlcmZhY2UiLCJjb250ZXh0IiwiY29udmVydE1ldGFNb2RlbENvbnRleHQiLCJyZXF1aXJlc0lDb250ZXh0IiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImlzTXVsdGlWYWx1ZUZpZWxkIiwib0RhdGFNb2RlbFBhdGgiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsImxlbmd0aCIsImhhc09uZVRvTWFueU5hdmlnYXRpb24iLCJmaW5kSW5kZXgiLCJvTmF2IiwiaXNNdWx0aXBsZU5hdmlnYXRpb25Qcm9wZXJ0eSIsImNvbnRleHRMb2NhdGlvbiIsIm9Db250ZXh0TmF2IiwiZ2V0UmVxdWlyZWRFeHByZXNzaW9uQXNPYmplY3QiLCJmb3JjZUVkaXRNb2RlIiwiZ2V0UmVxdWlyZWRFeHByZXNzaW9uIiwib1JlcXVpcmVkUHJvcGVydGllcyIsImFSZXF1aXJlZFByb3BlcnRpZXNGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zIiwicmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucyIsImFSZXF1aXJlZFByb3BlcnRpZXNGcm9tVXBkYXRlUmVzdHJpY3Rpb25zIiwicmVxdWlyZWRQcm9wZXJ0aWVzRnJvbVVwZGF0ZVJlc3RyaWN0aW9ucyIsImRhdGFGaWVsZFJlcXVpcmVkRXhwcmVzc2lvbiIsImlzUmVxdWlyZWRFeHByZXNzaW9uIiwicmVxdWlyZWRQcm9wZXJ0eUZyb21JbnNlcnRSZXN0cmljdGlvbnNFeHByZXNzaW9uIiwicmVxdWlyZWRQcm9wZXJ0eUZyb21VcGRhdGVSZXN0cmljdGlvbnNFeHByZXNzaW9uIiwicmVxdWlyZWRFeHByZXNzaW9uIiwiZWRpdE1vZGUiLCJpbmNsdWRlcyIsIklzQ3JlYXRlTW9kZSIsInJldHVybkV4cHJlc3Npb24iLCJnZXRSZXF1aXJlZEV4cHJlc3Npb25Gb3JDb25uZWN0ZWREYXRhRmllbGQiLCJkYXRhRmllbGRPYmplY3RQYXRoIiwiZGF0YSIsIkRhdGEiLCJPYmplY3QiLCJkYXRhRmllbGRzIiwiaXNSZXF1aXJlZEV4cHJlc3Npb25zIiwiZGF0YUZpZWxkIiwiVmFsdWUiLCJUYXJnZXQiLCJpc0Fubm90YXRpb25PZlR5cGUiLCJpc1Zpc2libGUiLCJIaWRkZW4iLCJpc011bHRpTGluZSIsImlzTXVsdGlMaW5lVGV4dCIsImdldEFjdGlvbkVuYWJsZWRFeHByZXNzaW9uIiwiYWN0aW9uVGFyZ2V0IiwicGF0aEZyb21Db250ZXh0TG9jYXRpb24iLCJvcGVyYXRpb25BdmFpbGFibGVJc0Fubm90YXRlZCIsIkNvcmUiLCJPcGVyYXRpb25BdmFpbGFibGUiLCJ0ZXJtIiwicHJlZml4Iiwic291cmNlRW50aXR5VHlwZSIsIm5hdmlnYXRpb25zIiwic291cmNlQWN0aW9uRGF0YU1vZGVsT2JqZWN0IiwiZW5oYW5jZURhdGFNb2RlbFBhdGgiLCJuYXYiLCJqb2luIiwiYmluZGluZ1BhcmFtZXRlckZ1bGxOYW1lIiwiaXNCb3VuZCIsInBhcmFtZXRlcnMiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJvcGVyYXRpb25BdmFpbGFibGVFeHByZXNzaW9uIiwiYmluZGluZ0NvbnRleHRQYXRoVmlzaXRvciIsImlzUXVpY2tWaWV3RmFjZXRWaXNpYmxlIiwiZmFjZXRNb2RlbFBhdGgiLCJ0YXJnZXRWaXNpYmxlIiwiaXNNdWx0aUxpbmVMYWJlbEFuZE5lZWRWaXNpYmlsaXR5IiwiaXNNdWx0aUxpbmVGaWVsZCIsImZvcm1FbGVtZW50c0xlbmd0aCIsInVzZVNpbmdsZVRleHRBcmVhRmllbGRBc05vdGVzIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJVSUZvcm1hdHRlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBY3Rpb24sIEFjdGlvblBhcmFtZXRlciwgQ29udmVydGVkTWV0YWRhdGEsIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiwgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgQW5ub3RhdGlvblBhdGggfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvRWRtXCI7XG5pbXBvcnQgeyBDb3JlQW5ub3RhdGlvblRlcm1zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db3JlXCI7XG5pbXBvcnQgdHlwZSB7IFVuaXQgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL01lYXN1cmVzXCI7XG5pbXBvcnQgdHlwZSB7XG5cdENvbGxlY3Rpb25GYWNldCxcblx0Q29ubmVjdGVkRmllbGRzVHlwZSxcblx0RGF0YUZpZWxkLFxuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRGb3JBY3Rpb25UeXBlcyxcblx0RGF0YVBvaW50VHlwZSxcblx0RGF0YVBvaW50VHlwZVR5cGVzLFxuXHRGaWVsZEdyb3VwLFxuXHRSZWZlcmVuY2VGYWNldFxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IGNvbnZlcnRNZXRhTW9kZWxDb250ZXh0LCBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB2YWx1ZUZvcm1hdHRlcnMgZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvVmFsdWVGb3JtYXR0ZXJcIjtcbmltcG9ydCB7IFVJLCBiaW5kaW5nQ29udGV4dFBhdGhWaXNpdG9yLCBzaW5nbGV0b25QYXRoVmlzaXRvciB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgRm4gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHtcblx0RURNX1RZUEVfTUFQUElORyxcblx0YWRkVHlwZUluZm9ybWF0aW9uLFxuXHRhbmQsXG5cdGNvbXBpbGVFeHByZXNzaW9uLFxuXHRjb25zdGFudCxcblx0ZXF1YWwsXG5cdGZvcm1hdFJlc3VsdCxcblx0Zm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbixcblx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uLFxuXHRpZkVsc2UsXG5cdGlzQ29uc3RhbnQsXG5cdGlzVHJ1dGh5LFxuXHRub3QsXG5cdG9yLFxuXHRwYXRoSW5Nb2RlbCxcblx0dW5yZXNvbHZhYmxlRXhwcmVzc2lvblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgaXNBbm5vdGF0aW9uT2ZUeXBlLCBpc011bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5LCBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiwgaXNQcm9wZXJ0eSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7XG5cdGVuaGFuY2VEYXRhTW9kZWxQYXRoLFxuXHRnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoLFxuXHRnZXRSZWxhdGl2ZVBhdGhzLFxuXHRnZXRUYXJnZXRPYmplY3RQYXRoLFxuXHRpc1BhdGhVcGRhdGFibGVcbn0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0ICogYXMgRGlzcGxheU1vZGVGb3JtYXR0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGlzcGxheU1vZGVGb3JtYXR0ZXJcIjtcbmltcG9ydCB7XG5cdGlzRGlzYWJsZWRFeHByZXNzaW9uLFxuXHRpc05vbkVkaXRhYmxlRXhwcmVzc2lvbixcblx0aXNSZWFkT25seUV4cHJlc3Npb24sXG5cdGlzUmVxdWlyZWRFeHByZXNzaW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0ZpZWxkQ29udHJvbEhlbHBlclwiO1xuaW1wb3J0IHtcblx0Z2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHksXG5cdGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHksXG5cdGhhc1N0YXRpY1BlcmNlbnRVbml0LFxuXHRoYXNWYWx1ZUhlbHAsXG5cdGlzQ29tcHV0ZWQsXG5cdGlzSW1tdXRhYmxlLFxuXHRpc0tleSxcblx0aXNNdWx0aUxpbmVUZXh0XG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuXG4vLyBJbXBvcnQtZXhwb3J0IG1ldGhvZCB1c2VkIGJ5IHRoZSBjb252ZXJ0ZXIgdG8gdXNlIHRoZW0gaW4gdGhlIHRlbXBsYXRpbmcgdGhyb3VnaCB0aGUgVUlGb3JtYXR0ZXJzLlxuZXhwb3J0IHR5cGUgRGlzcGxheU1vZGUgPSBEaXNwbGF5TW9kZUZvcm1hdHRlci5EaXNwbGF5TW9kZTtcblxuZXhwb3J0IHR5cGUgRmllbGRFZGl0U3R5bGUgPSBcIlJhZGlvQnV0dG9uc1wiO1xuXG5leHBvcnQgdHlwZSBQcm9wZXJ0eU9yUGF0aDxQPiA9IHN0cmluZyB8IFAgfCBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248UD47XG5leHBvcnQgdHlwZSBNZXRhTW9kZWxDb250ZXh0ID0ge1xuXHQka2luZDogc3RyaW5nO1xuXHQkVHlwZTogc3RyaW5nO1xuXHQkTnVsbGFibGU/OiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBJbnRlcmZhY2UgcmVwcmVzZW50aW5nIHRoZSBzdHJ1Y3R1cmUgcmV0dXJuZWQgYnkgdGhlIE9EYXRhTWV0YU1vZGVsIHdoZW4gdXNpbmcgdGhlIEBAIG9wZXJhdG9yIGluIFhNTCB0ZW1wbGF0ZXMuXG4gKi9cbmV4cG9ydCB0eXBlIENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZSA9IHtcblx0Y29udGV4dDogQ29udGV4dDtcblx0YXJndW1lbnRzPzogdW5rbm93bltdO1xuXHQkJHZhbHVlQXNQcm9taXNlPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIGNvbmZpZ1R5cGVDb25zdHJhaW50cyA9IHtcblx0c2NhbGU/OiBudW1iZXI7XG5cdHByZWNpc2lvbj86IG51bWJlcjtcblx0bWF4TGVuZ3RoPzogbnVtYmVyO1xuXHRudWxsYWJsZT86IGJvb2xlYW47XG5cdG1pbmltdW0/OiBzdHJpbmc7XG5cdG1heGltdW0/OiBzdHJpbmc7XG5cdGlzRGlnaXRTZXF1ZW5jZT86IGJvb2xlYW47XG5cdFY0PzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIGNvbmZpZ1R5cGVmb3JtYXRPcHRpb25zID0ge1xuXHRwYXJzZUFzU3RyaW5nPzogYm9vbGVhbjtcblx0ZW1wdHlTdHJpbmc/OiBzdHJpbmc7XG5cdHBhcnNlS2VlcHNFbXB0eVN0cmluZz86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBDb25maWdUeXBlID0ge1xuXHR0eXBlOiBzdHJpbmc7XG5cdGNvbnN0cmFpbnRzOiBjb25maWdUeXBlQ29uc3RyYWludHM7XG5cdGZvcm1hdE9wdGlvbnM6IGNvbmZpZ1R5cGVmb3JtYXRPcHRpb25zO1xufTtcblxuZXhwb3J0IGNvbnN0IEZpZWxkRWRpdE1vZGUgPSB7XG5cdC8qKlxuXHQgKiB7QGxpbmsgc2FwLnVpLm1kYy5GaWVsZCBGaWVsZH0sIHtAbGluayBzYXAudWkubWRjLkZpbHRlckZpZWxkIEZpbHRlckZpZWxkfSBvciB7QGxpbmsgc2FwLnVpLm1kYy5NdWx0aVZhbHVlRmllbGQgTXVsdGlWYWx1ZUZpZWxkIH1cblx0ICogaXMgcmVuZGVyZWQgaW4gZGlzYWJsZWQgbW9kZVxuXHQgKi9cblx0RGlzYWJsZWQ6IFwiRGlzYWJsZWRcIixcblx0LyoqXG5cdCAqIHtAbGluayBzYXAudWkubWRjLkZpZWxkIEZpZWxkfSwge0BsaW5rIHNhcC51aS5tZGMuRmlsdGVyRmllbGQgRmlsdGVyRmllbGR9IG9yIHtAbGluayBzYXAudWkubWRjLk11bHRpVmFsdWVGaWVsZCBNdWx0aVZhbHVlRmllbGQgfVxuXHQgKiBpcyByZW5kZXJlZCBpbiBkaXNwbGF5IG1vZGVcblx0ICovXG5cdERpc3BsYXk6IFwiRGlzcGxheVwiLFxuXHQvKipcblx0ICoge0BsaW5rIHNhcC51aS5tZGMuRmllbGQgRmllbGR9LCB7QGxpbmsgc2FwLnVpLm1kYy5GaWx0ZXJGaWVsZCBGaWx0ZXJGaWVsZH0gb3Ige0BsaW5rIHNhcC51aS5tZGMuTXVsdGlWYWx1ZUZpZWxkIE11bHRpVmFsdWVGaWVsZCB9XG5cdCAqIGlzIHJlbmRlcmVkIGluIGVkaXRhYmxlIG1vZGVcblx0ICovXG5cdEVkaXRhYmxlOiBcIkVkaXRhYmxlXCIsXG5cdC8qKlxuXHQgKiBJZiBtb3JlIHRoYW4gb25lIGNvbnRyb2wgaXMgcmVuZGVyZWQgYnkgdGhlIHtAbGluayBzYXAudWkubWRjLkZpZWxkIEZpZWxkfSwge0BsaW5rIHNhcC51aS5tZGMuRmlsdGVyRmllbGQgRmlsdGVyRmllbGQgfVxuXHQgKiBvciB7QGxpbmsgc2FwLnVpLm1kYy5NdWx0aVZhbHVlRmllbGQgTXVsdGlWYWx1ZUZpZWxkfSBjb250cm9sLCB0aGUgZmlyc3QgcGFydCBpcyBlZGl0YWJsZSwgYW5kIHRoZSBvdGhlclxuXHQgKiBwYXJ0cyBhcmUgaW4gZGlzcGxheSBtb2RlLlxuXHQgKi9cblx0RWRpdGFibGVEaXNwbGF5OiBcIkVkaXRhYmxlRGlzcGxheVwiLFxuXHQvKipcblx0ICogSWYgbW9yZSB0aGFuIG9uZSBjb250cm9sIGlzIHJlbmRlcmVkIGJ5IHRoZSB7QGxpbmsgc2FwLnVpLm1kYy5GaWVsZCBGaWVsZH0sIHtAbGluayBzYXAudWkubWRjLkZpbHRlckZpZWxkIEZpbHRlckZpZWxkIH1cblx0ICogb3Ige0BsaW5rIHNhcC51aS5tZGMuTXVsdGlWYWx1ZUZpZWxkIE11bHRpVmFsdWVGaWVsZH0gY29udHJvbCwgdGhlIGZpcnN0IHBhcnQgaXMgZWRpdGFibGUsIGFuZCB0aGUgb3RoZXJcblx0ICogcGFydHMgYXJlIHJlYWQtb25seS5cblx0ICovXG5cdEVkaXRhYmxlUmVhZE9ubHk6IFwiRWRpdGFibGVSZWFkT25seVwiLFxuXHQvKipcblx0ICoge0BsaW5rIHNhcC51aS5tZGMuRmllbGQgRmllbGR9LCB7QGxpbmsgc2FwLnVpLm1kYy5GaWx0ZXJGaWVsZCBGaWx0ZXJGaWVsZH0gb3Ige0BsaW5rIHNhcC51aS5tZGMuTXVsdGlWYWx1ZUZpZWxkIE11bHRpVmFsdWVGaWVsZCB9XG5cdCAqIGlzIHJlbmRlcmVkIGluIHJlYWQtb25seSBtb2RlXG5cdCAqL1xuXHRSZWFkT25seTogXCJSZWFkT25seVwiXG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RGlzcGxheU1vZGUgPSBmdW5jdGlvbiAoXG5cdG9EYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5IHwgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcz5cbik6IERpc3BsYXlNb2RlIHtcblx0cmV0dXJuIERpc3BsYXlNb2RlRm9ybWF0dGVyLmdldERpc3BsYXlNb2RlKG9EYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCwgb0RhdGFNb2RlbE9iamVjdFBhdGgpO1xufTtcbmV4cG9ydCBjb25zdCBnZXRFZGl0YWJsZUV4cHJlc3Npb25Bc09iamVjdCA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRvRGF0YUZpZWxkQ29udmVydGVkOiBQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMgfCB1bmRlZmluZWQsXG5cdG9EYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPHVua25vd24+LFxuXHRpc0VkaXRhYmxlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBVSS5Jc0VkaXRhYmxlLFxuXHRjb25zaWRlclVwZGF0ZVJlc3RyaWN0aW9ucyA9IHRydWVcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBnZXRFZGl0YWJsZUV4cHJlc3Npb24oXG5cdFx0b1Byb3BlcnR5UGF0aCxcblx0XHRvRGF0YUZpZWxkQ29udmVydGVkLFxuXHRcdG9EYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdHRydWUsXG5cdFx0aXNFZGl0YWJsZSxcblx0XHRjb25zaWRlclVwZGF0ZVJlc3RyaWN0aW9uc1xuXHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcbn07XG5cbmV4cG9ydCB0eXBlIGRhdGVGb3JtYXRPcHRpb25zID0ge1xuXHRzaG93RGF0ZT86IGJvb2xlYW47XG5cdHNob3dUaW1lPzogYm9vbGVhbjtcblx0c2hvd1RpbWV6b25lPzogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBleHByZXNzaW9uIHRvIGdlbmVyYXRlIGFuIFwiZWRpdGFibGVcIiBCb29sZWFuIHZhbHVlLlxuICpcbiAqIEBwYXJhbSBvUHJvcGVydHlQYXRoIFRoZSBpbnB1dCBwcm9wZXJ0eVxuICogQHBhcmFtIG9EYXRhRmllbGRDb252ZXJ0ZWQgVGhlIERhdGFGaWVsZENvbnZlcnRlZCBvYmplY3QgdG8gcmVhZCB0aGUgZmllbGRDb250cm9sIGFubm90YXRpb25cbiAqIEBwYXJhbSBvRGF0YU1vZGVsT2JqZWN0UGF0aCBUaGUgcGF0aCB0byB0aGlzIHByb3BlcnR5IG9iamVjdFxuICogQHBhcmFtIGJBc09iamVjdCBXaGV0aGVyIG9yIG5vdCB0aGlzIHNob3VsZCBiZSByZXR1cm5lZCBhcyBhbiBvYmplY3Qgb3IgYSBiaW5kaW5nIHN0cmluZ1xuICogQHBhcmFtIGlzRWRpdGFibGUgV2hldGhlciBvciBub3QgVUkuSXNFZGl0YWJsZSBiZSBjb25zaWRlcmVkLlxuICogQHBhcmFtIGNvbnNpZGVyVXBkYXRlUmVzdHJpY3Rpb25zIFdoZXRoZXIgd2Ugd2FudCB0byB0YWtlIGludG8gYWNjb3VudCBVcGRhdGVSZXN0cmljdGlvbnMgdG8gY29tcHV0ZSB0aGUgZWRpdGFibGVcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdXNlZCB0byBkZXRlcm1pbmUgaWYgYSBwcm9wZXJ0eSBpcyBlZGl0YWJsZSBvciBub3RcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEVkaXRhYmxlRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRvRGF0YUZpZWxkQ29udmVydGVkOiBQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXG5cdG9EYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPHVua25vd24+LFxuXHRiQXNPYmplY3QgPSBmYWxzZSxcblx0aXNFZGl0YWJsZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gVUkuSXNFZGl0YWJsZSxcblx0Y29uc2lkZXJVcGRhdGVSZXN0cmljdGlvbnMgPSB0cnVlXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IHJlbGF0aXZlUGF0aCA9IGdldFJlbGF0aXZlUGF0aHMob0RhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRpZiAoIW9Qcm9wZXJ0eVBhdGggfHwgdHlwZW9mIG9Qcm9wZXJ0eVBhdGggPT09IFwic3RyaW5nXCIpIHtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oZmFsc2UpO1xuXHR9XG5cdGxldCBkYXRhRmllbGRFZGl0YWJsZUV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IGNvbnN0YW50KHRydWUpO1xuXHRpZiAob0RhdGFGaWVsZENvbnZlcnRlZCAhPT0gdW5kZWZpbmVkICYmICFpc1Byb3BlcnR5KG9EYXRhRmllbGRDb252ZXJ0ZWQpKSB7XG5cdFx0ZGF0YUZpZWxkRWRpdGFibGVFeHByZXNzaW9uID0gaWZFbHNlKGlzTm9uRWRpdGFibGVFeHByZXNzaW9uKG9EYXRhRmllbGRDb252ZXJ0ZWQpLCBmYWxzZSwgaXNFZGl0YWJsZSk7XG5cdH0gZWxzZSBpZiAob0RhdGFGaWVsZENvbnZlcnRlZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0ZGF0YUZpZWxkRWRpdGFibGVFeHByZXNzaW9uID0gaXNFZGl0YWJsZTtcblx0fVxuXG5cdGNvbnN0IG9Qcm9wZXJ0eSA9IGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKG9Qcm9wZXJ0eVBhdGgpID8gb1Byb3BlcnR5UGF0aC4kdGFyZ2V0IDogb1Byb3BlcnR5UGF0aDtcblxuXHQvLyBFZGl0YWJpbGl0eSBkZXBlbmRzIG9uIHRoZSBmaWVsZCBjb250cm9sIGV4cHJlc3Npb25cblx0Ly8gSWYgdGhlIEZpZWxkIGNvbnRyb2wgaXMgc3RhdGljYWxseSBpbiBSZWFkT25seSBvciBJbmFwcGxpY2FibGUgKGRpc2FibGVkKSAtPiBub3QgZWRpdGFibGVcblx0Ly8gSWYgdGhlIHByb3BlcnR5IGlzIGEga2V5IC0+IG5vdCBlZGl0YWJsZSBleGNlcHQgaW4gY3JlYXRpb24gaWYgbm90IGNvbXB1dGVkXG5cdC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBjb21wdXRlZCAtPiBub3QgZWRpdGFibGVcblx0Ly8gSWYgdGhlIHByb3BlcnR5IGlzIG5vdCB1cGRhdGFibGUgLT4gbm90IGVkaXRhYmxlXG5cdC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBpbW11dGFibGUgLT4gbm90IGVkaXRhYmxlIGV4Y2VwdCBpbiBjcmVhdGlvblxuXHQvLyBJZiB0aGUgRmllbGQgY29udHJvbCBpcyBhIHBhdGggcmVzb2x2aW5nIHRvIFJlYWRPbmx5IG9yIEluYXBwbGljYWJsZSAoZGlzYWJsZWQpICg8PSAxKSAtPiBub3QgZWRpdGFibGVcblx0Ly8gRWxzZSwgdG8gYmUgZWRpdGFibGUgeW91IG5lZWRcblx0Ly8gaW1tdXRhYmxlIGFuZCBrZXkgd2hpbGUgaW4gdGhlIGNyZWF0aW9uIHJvd1xuXHQvLyB1aS9pc0VkaXRhYmxlXG5cdGNvbnN0IGlzUGF0aFVwZGF0YWJsZUV4cHJlc3Npb24gPSBpc1BhdGhVcGRhdGFibGUob0RhdGFNb2RlbE9iamVjdFBhdGgsIHtcblx0XHRwcm9wZXJ0eVBhdGg6IG9Qcm9wZXJ0eVBhdGgsXG5cdFx0cGF0aFZpc2l0b3I6IChwYXRoOiBzdHJpbmcsIG5hdmlnYXRpb25QYXRoczogc3RyaW5nW10pID0+XG5cdFx0XHRzaW5nbGV0b25QYXRoVmlzaXRvcihwYXRoLCBvRGF0YU1vZGVsT2JqZWN0UGF0aC5jb252ZXJ0ZWRUeXBlcywgbmF2aWdhdGlvblBhdGhzKVxuXHR9KTtcblx0aWYgKGNvbXBpbGVFeHByZXNzaW9uKGlzUGF0aFVwZGF0YWJsZUV4cHJlc3Npb24pID09PSBcImZhbHNlXCIgJiYgY29uc2lkZXJVcGRhdGVSZXN0cmljdGlvbnMpIHtcblx0XHRyZXR1cm4gYkFzT2JqZWN0ID8gaXNQYXRoVXBkYXRhYmxlRXhwcmVzc2lvbiA6IFwiZmFsc2VcIjtcblx0fVxuXHRjb25zdCBlZGl0YWJsZUV4cHJlc3Npb24gPVxuXHRcdG9Qcm9wZXJ0eSAhPT0gdW5kZWZpbmVkXG5cdFx0XHQ/IGlmRWxzZShcblx0XHRcdFx0XHRvcihcblx0XHRcdFx0XHRcdGFuZChub3QoaXNQYXRoVXBkYXRhYmxlRXhwcmVzc2lvbiksIGNvbnNpZGVyVXBkYXRlUmVzdHJpY3Rpb25zKSxcblx0XHRcdFx0XHRcdGlzQ29tcHV0ZWQob1Byb3BlcnR5KSxcblx0XHRcdFx0XHRcdGlzS2V5KG9Qcm9wZXJ0eSksXG5cdFx0XHRcdFx0XHRpc0ltbXV0YWJsZShvUHJvcGVydHkpLFxuXHRcdFx0XHRcdFx0aXNOb25FZGl0YWJsZUV4cHJlc3Npb24ob1Byb3BlcnR5LCByZWxhdGl2ZVBhdGgpXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRpZkVsc2Uob3IoaXNDb21wdXRlZChvUHJvcGVydHkpLCBpc05vbkVkaXRhYmxlRXhwcmVzc2lvbihvUHJvcGVydHksIHJlbGF0aXZlUGF0aCkpLCBmYWxzZSwgVUkuSXNUcmFuc2llbnRCaW5kaW5nKSxcblx0XHRcdFx0XHRpc0VkaXRhYmxlXG5cdFx0XHQgIClcblx0XHRcdDogdW5yZXNvbHZhYmxlRXhwcmVzc2lvbjtcblx0aWYgKGJBc09iamVjdCkge1xuXHRcdHJldHVybiBhbmQoZWRpdGFibGVFeHByZXNzaW9uLCBkYXRhRmllbGRFZGl0YWJsZUV4cHJlc3Npb24pO1xuXHR9XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihhbmQoZWRpdGFibGVFeHByZXNzaW9uLCBkYXRhRmllbGRFZGl0YWJsZUV4cHJlc3Npb24pKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb2xsYWJvcmF0aW9uRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIDxUPihcblx0ZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4sXG5cdGZvcm1hdHRlcjogRm48VD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPiB7XG5cdGNvbnN0IG9iamVjdFBhdGggPSBnZXRUYXJnZXRPYmplY3RQYXRoKGRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRjb25zdCBhY3Rpdml0eUV4cHJlc3Npb24gPSBwYXRoSW5Nb2RlbChgL2NvbGxhYm9yYXRpb24vYWN0aXZpdGllcyR7b2JqZWN0UGF0aH1gLCBcImludGVybmFsXCIpO1xuXHRjb25zdCBrZXlzID0gZGF0YU1vZGVsT2JqZWN0UGF0aD8udGFyZ2V0RW50aXR5VHlwZT8ua2V5cztcblx0Y29uc3Qga2V5c0V4cHJlc3Npb25zOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj5bXSA9IFtdO1xuXHRrZXlzPy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcblx0XHRjb25zdCBrZXlFeHByZXNzaW9uID0gcGF0aEluTW9kZWwoa2V5Lm5hbWUpO1xuXHRcdGtleXNFeHByZXNzaW9ucy5wdXNoKGtleUV4cHJlc3Npb24pO1xuXHR9KTtcblx0cmV0dXJuIGZvcm1hdFJlc3VsdChbYWN0aXZpdHlFeHByZXNzaW9uLCAuLi5rZXlzRXhwcmVzc2lvbnNdLCBmb3JtYXR0ZXIpO1xufTtcbmV4cG9ydCBjb25zdCBnZXRFbmFibGVkRXhwcmVzc2lvbkFzT2JqZWN0ID0gZnVuY3Rpb24gKFxuXHRvUHJvcGVydHlQYXRoOiBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sXG5cdG9EYXRhRmllbGRDb252ZXJ0ZWQ/OiBQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMsXG5cdG9EYXRhTW9kZWxPYmplY3RQYXRoPzogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIGdldEVuYWJsZWRFeHByZXNzaW9uKG9Qcm9wZXJ0eVBhdGgsIG9EYXRhRmllbGRDb252ZXJ0ZWQsIHRydWUsIG9EYXRhTW9kZWxPYmplY3RQYXRoKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG59O1xuLyoqXG4gKiBDcmVhdGUgdGhlIGV4cHJlc3Npb24gdG8gZ2VuZXJhdGUgYW4gXCJlbmFibGVkXCIgQm9vbGVhbiB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0gb1Byb3BlcnR5UGF0aCBUaGUgaW5wdXQgcHJvcGVydHlcbiAqIEBwYXJhbSBvRGF0YUZpZWxkQ29udmVydGVkIFRoZSBEYXRhRmllbGRDb252ZXJ0ZWQgT2JqZWN0IHRvIHJlYWQgdGhlIGZpZWxkQ29udHJvbCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gYkFzT2JqZWN0IFdoZXRoZXIgb3Igbm90IHRoaXMgc2hvdWxkIGJlIHJldHVybmVkIGFzIGFuIG9iamVjdCBvciBhIGJpbmRpbmcgc3RyaW5nXG4gKiBAcGFyYW0gb0RhdGFNb2RlbE9iamVjdFBhdGhcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdG8gZGV0ZXJtaW5lIGlmIGEgcHJvcGVydHkgaXMgZW5hYmxlZCBvciBub3RcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEVuYWJsZWRFeHByZXNzaW9uID0gZnVuY3Rpb24gKFxuXHRvUHJvcGVydHlQYXRoOiBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sXG5cdG9EYXRhRmllbGRDb252ZXJ0ZWQ/OiBQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMsXG5cdGJBc09iamVjdCA9IGZhbHNlLFxuXHRvRGF0YU1vZGVsT2JqZWN0UGF0aD86IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj5cbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0aWYgKCFvUHJvcGVydHlQYXRoIHx8IHR5cGVvZiBvUHJvcGVydHlQYXRoID09PSBcInN0cmluZ1wiKSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKHRydWUpO1xuXHR9XG5cdGxldCByZWxhdGl2ZVBhdGg7XG5cdGlmIChvRGF0YU1vZGVsT2JqZWN0UGF0aCkge1xuXHRcdHJlbGF0aXZlUGF0aCA9IGdldFJlbGF0aXZlUGF0aHMob0RhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHR9XG5cdGxldCBkYXRhRmllbGRFbmFibGVkRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gY29uc3RhbnQodHJ1ZSk7XG5cdGlmIChvRGF0YUZpZWxkQ29udmVydGVkICE9PSB1bmRlZmluZWQgJiYgIWlzUHJvcGVydHkob0RhdGFGaWVsZENvbnZlcnRlZCkpIHtcblx0XHRkYXRhRmllbGRFbmFibGVkRXhwcmVzc2lvbiA9IGlmRWxzZShpc0Rpc2FibGVkRXhwcmVzc2lvbihvRGF0YUZpZWxkQ29udmVydGVkKSwgZmFsc2UsIHRydWUpO1xuXHR9XG5cblx0Y29uc3Qgb1Byb3BlcnR5ID0gaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ob1Byb3BlcnR5UGF0aCkgPyBvUHJvcGVydHlQYXRoLiR0YXJnZXQgOiBvUHJvcGVydHlQYXRoO1xuXHQvLyBFbmFibGVtZW50IGRlcGVuZHMgb24gdGhlIGZpZWxkIGNvbnRyb2wgZXhwcmVzc2lvblxuXHQvLyBJZiB0aGUgRmllbGQgY29udHJvbCBpcyBzdGF0aWNhbGx5IGluIEluYXBwbGljYWJsZSAoZGlzYWJsZWQpIC0+IG5vdCBlbmFibGVkXG5cdGNvbnN0IGVuYWJsZWRFeHByZXNzaW9uID1cblx0XHRvUHJvcGVydHkgIT09IHVuZGVmaW5lZCA/IGlmRWxzZShpc0Rpc2FibGVkRXhwcmVzc2lvbihvUHJvcGVydHksIHJlbGF0aXZlUGF0aCksIGZhbHNlLCB0cnVlKSA6IHVucmVzb2x2YWJsZUV4cHJlc3Npb247XG5cdGlmIChiQXNPYmplY3QpIHtcblx0XHRyZXR1cm4gYW5kKGVuYWJsZWRFeHByZXNzaW9uLCBkYXRhRmllbGRFbmFibGVkRXhwcmVzc2lvbik7XG5cdH1cblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGFuZChlbmFibGVkRXhwcmVzc2lvbiwgZGF0YUZpZWxkRW5hYmxlZEV4cHJlc3Npb24pKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBleHByZXNzaW9uIHRvIGdlbmVyYXRlIGFuIFwiZWRpdE1vZGVcIiBlbnVtIHZhbHVlLlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggVGhlIGlucHV0IHByb3BlcnR5XG4gKiBAcGFyYW0gZGF0YU1vZGVsT2JqZWN0UGF0aCBUaGUgbGlzdCBvZiBkYXRhIG1vZGVsIG9iamVjdHMgdGhhdCBhcmUgaW52b2x2ZWQgdG8gcmVhY2ggdGhhdCBwcm9wZXJ0eVxuICogQHBhcmFtIG1lYXN1cmVSZWFkT25seSBXaGV0aGVyIHdlIHNob3VsZCBzZXQgVW9NIC8gY3VycmVuY3kgZmllbGQgbW9kZSB0byByZWFkIG9ubHlcbiAqIEBwYXJhbSBhc09iamVjdCBXaGV0aGVyIHdlIHNob3VsZCByZXR1cm4gdGhpcyBhcyBhbiBleHByZXNzaW9uIG9yIGFzIGEgc3RyaW5nXG4gKiBAcGFyYW0gZGF0YUZpZWxkQ29udmVydGVkIFRoZSBkYXRhRmllbGQgb2JqZWN0XG4gKiBAcGFyYW0gaXNFZGl0YWJsZSBXaGV0aGVyIG9yIG5vdCBVSS5Jc0VkaXRhYmxlIGJlIGNvbnNpZGVyZWQuXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBwcm9wZXJ0eSBlZGl0IG1vZGUsIGNvbXBsaWFudCB3aXRoIHRoZSBNREMgRmllbGQgZGVmaW5pdGlvbiBvZiBlZGl0TW9kZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEVkaXRNb2RlID0gZnVuY3Rpb24gKFxuXHRwcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0ZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPixcblx0bWVhc3VyZVJlYWRPbmx5ID0gZmFsc2UsXG5cdGFzT2JqZWN0ID0gZmFsc2UsXG5cdGRhdGFGaWVsZENvbnZlcnRlZDogUHJvcGVydHkgfCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxuXHRpc0VkaXRhYmxlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBVSS5Jc0VkaXRhYmxlXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0aWYgKFxuXHRcdCFwcm9wZXJ0eVBhdGggfHxcblx0XHR0eXBlb2YgcHJvcGVydHlQYXRoID09PSBcInN0cmluZ1wiIHx8XG5cdFx0KCFpc1Byb3BlcnR5KGRhdGFGaWVsZENvbnZlcnRlZCkgJiYgZGF0YUZpZWxkQ29udmVydGVkPy4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoKVxuXHQpIHtcblx0XHRyZXR1cm4gRmllbGRFZGl0TW9kZS5EaXNwbGF5O1xuXHR9XG5cdGNvbnN0IHByb3BlcnR5ID0gaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ocHJvcGVydHlQYXRoKSA/IHByb3BlcnR5UGF0aC4kdGFyZ2V0IDogcHJvcGVydHlQYXRoO1xuXHRjb25zdCByZWxhdGl2ZVBhdGggPSBnZXRSZWxhdGl2ZVBhdGhzKGRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRjb25zdCBpc1BhdGhVcGRhdGFibGVFeHByZXNzaW9uID0gaXNQYXRoVXBkYXRhYmxlKGRhdGFNb2RlbE9iamVjdFBhdGgsIHtcblx0XHRwcm9wZXJ0eVBhdGg6IHByb3BlcnR5LFxuXHRcdHBhdGhWaXNpdG9yOiAocGF0aDogc3RyaW5nLCBuYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdKSA9PlxuXHRcdFx0c2luZ2xldG9uUGF0aFZpc2l0b3IocGF0aCwgZGF0YU1vZGVsT2JqZWN0UGF0aC5jb252ZXJ0ZWRUeXBlcywgbmF2aWdhdGlvblBhdGhzKVxuXHR9KTtcblxuXHQvLyB3ZSBnZXQgdGhlIGVkaXRhYmxlIEV4cHJlc3Npb24gd2l0aG91dCBjb25zaWRlcmluZyB1cGRhdGUgUmVzdHJpY3Rpb25zIGJlY2F1c2UgdGhleSBhcmUgaGFuZGxlZCBzZXBhcmF0ZWx5XG5cdGNvbnN0IGVkaXRhYmxlRXhwcmVzc2lvbiA9IGdldEVkaXRhYmxlRXhwcmVzc2lvbkFzT2JqZWN0KHByb3BlcnR5UGF0aCwgZGF0YUZpZWxkQ29udmVydGVkLCBkYXRhTW9kZWxPYmplY3RQYXRoLCBpc0VkaXRhYmxlLCBmYWxzZSk7XG5cblx0Y29uc3QgZW5hYmxlZEV4cHJlc3Npb24gPSBnZXRFbmFibGVkRXhwcmVzc2lvbkFzT2JqZWN0KHByb3BlcnR5UGF0aCwgZGF0YUZpZWxkQ29udmVydGVkLCBkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0Y29uc3QgYXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkgPSBnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eShwcm9wZXJ0eSk7XG5cdGNvbnN0IHVuaXRQcm9wZXJ0eSA9IGFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5IHx8IGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkocHJvcGVydHkpO1xuXHRsZXQgcmVzdWx0RXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gPSBjb25zdGFudChGaWVsZEVkaXRNb2RlLkVkaXRhYmxlKTtcblx0aWYgKHVuaXRQcm9wZXJ0eSkge1xuXHRcdGNvbnN0IGlzVW5pdFJlYWRPbmx5ID0gaXNSZWFkT25seUV4cHJlc3Npb24odW5pdFByb3BlcnR5LCByZWxhdGl2ZVBhdGgpO1xuXHRcdHJlc3VsdEV4cHJlc3Npb24gPSBpZkVsc2UoXG5cdFx0XHRvcihpc1VuaXRSZWFkT25seSwgaXNDb21wdXRlZCh1bml0UHJvcGVydHkpLCBhbmQoaXNJbW11dGFibGUodW5pdFByb3BlcnR5KSwgbm90KFVJLklzVHJhbnNpZW50QmluZGluZykpLCBtZWFzdXJlUmVhZE9ubHkpLFxuXHRcdFx0aWZFbHNlKCFpc0NvbnN0YW50KGlzVW5pdFJlYWRPbmx5KSAmJiBpc1VuaXRSZWFkT25seSwgRmllbGRFZGl0TW9kZS5FZGl0YWJsZVJlYWRPbmx5LCBGaWVsZEVkaXRNb2RlLkVkaXRhYmxlRGlzcGxheSksXG5cdFx0XHRGaWVsZEVkaXRNb2RlLkVkaXRhYmxlXG5cdFx0KTtcblx0fVxuXHRpZiAoIXVuaXRQcm9wZXJ0eSAmJiAocHJvcGVydHk/LmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kgfHwgcHJvcGVydHk/LmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdCkpIHtcblx0XHQvLyBubyB1bml0IHByb3BlcnR5IGFzc29jaWF0ZWQgbWVhbnMgdGhpcyBpcyBhIHN0YXRpYyB1bml0XG5cdFx0cmVzdWx0RXhwcmVzc2lvbiA9IGNvbnN0YW50KEZpZWxkRWRpdE1vZGUuRWRpdGFibGVEaXNwbGF5KTtcblx0fVxuXHRsZXQgcmVhZE9ubHlFeHByZXNzaW9uO1xuXHRpZiAoZGF0YUZpZWxkQ29udmVydGVkICE9IHVuZGVmaW5lZCAmJiAhaXNQcm9wZXJ0eShkYXRhRmllbGRDb252ZXJ0ZWQpKSB7XG5cdFx0cmVhZE9ubHlFeHByZXNzaW9uID0gb3IoaXNSZWFkT25seUV4cHJlc3Npb24ocHJvcGVydHksIHJlbGF0aXZlUGF0aCksIGlzUmVhZE9ubHlFeHByZXNzaW9uKGRhdGFGaWVsZENvbnZlcnRlZCkpO1xuXHR9IGVsc2Uge1xuXHRcdHJlYWRPbmx5RXhwcmVzc2lvbiA9IGlzUmVhZE9ubHlFeHByZXNzaW9uKHByb3BlcnR5LCByZWxhdGl2ZVBhdGgpO1xuXHR9XG5cblx0Ly8gaWYgdGhlcmUgYXJlIHVwZGF0ZSBSZXN0cmljdGlvbnMgaXQgaXMgYWx3YXlzIGRpc3BsYXkgbW9kZVxuXHRjb25zdCBlZGl0TW9kZUV4cHJlc3Npb24gPSBpZkVsc2UoXG5cdFx0b3IoaXNQYXRoVXBkYXRhYmxlRXhwcmVzc2lvbiwgVUkuSXNUcmFuc2llbnRCaW5kaW5nKSxcblx0XHRpZkVsc2UoXG5cdFx0XHRlbmFibGVkRXhwcmVzc2lvbixcblx0XHRcdGlmRWxzZShcblx0XHRcdFx0ZWRpdGFibGVFeHByZXNzaW9uLFxuXHRcdFx0XHRyZXN1bHRFeHByZXNzaW9uLFxuXHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0YW5kKCFpc0NvbnN0YW50KHJlYWRPbmx5RXhwcmVzc2lvbikgJiYgcmVhZE9ubHlFeHByZXNzaW9uLCBpc0VkaXRhYmxlKSxcblx0XHRcdFx0XHRGaWVsZEVkaXRNb2RlLlJlYWRPbmx5LFxuXHRcdFx0XHRcdEZpZWxkRWRpdE1vZGUuRGlzcGxheVxuXHRcdFx0XHQpXG5cdFx0XHQpLFxuXHRcdFx0aWZFbHNlKGlzRWRpdGFibGUsIEZpZWxkRWRpdE1vZGUuRGlzYWJsZWQsIEZpZWxkRWRpdE1vZGUuRGlzcGxheSlcblx0XHQpLFxuXHRcdEZpZWxkRWRpdE1vZGUuRGlzcGxheVxuXHQpO1xuXHRpZiAoYXNPYmplY3QpIHtcblx0XHRyZXR1cm4gZWRpdE1vZGVFeHByZXNzaW9uO1xuXHR9XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihlZGl0TW9kZUV4cHJlc3Npb24pO1xufTtcblxuZXhwb3J0IGNvbnN0IGhhc1ZhbGlkQW5hbHl0aWNhbEN1cnJlbmN5T3JVbml0ID0gZnVuY3Rpb24gKFxuXHRvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5PiB8IHVuZGVmaW5lZFxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRjb25zdCBvUHJvcGVydHlEZWZpbml0aW9uID0gb1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aD8udGFyZ2V0T2JqZWN0O1xuXHRjb25zdCBjdXJyZW5jeSA9IG9Qcm9wZXJ0eURlZmluaXRpb24/LmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3k7XG5cdGNvbnN0IG1lYXN1cmUgPSBjdXJyZW5jeSA/IGN1cnJlbmN5IDogb1Byb3BlcnR5RGVmaW5pdGlvbj8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0O1xuXHRpZiAobWVhc3VyZSkge1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihvcihpc1RydXRoeShnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24obWVhc3VyZSkpLCBub3QoVUkuSXNUb3RhbCkpKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oY29uc3RhbnQodHJ1ZSkpO1xuXHR9XG59O1xuXG4vKipcbiAqIENyZWF0ZSB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgZmllbGREaXNwbGF5LlxuICpcbiAqIEBwYXJhbSBvUHJvcGVydHlQYXRoXG4gKiBAcGFyYW0gc1RhcmdldERpc3BsYXlNb2RlXG4gKiBAcGFyYW0gb0NvbXB1dGVkRWRpdE1vZGVcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IHByb3BlcnR5IGRpc3BsYXkgbW9kZSwgY29tcGxpYW50IHdpdGggdGhlIE1EQyBGaWVsZCBkZWZpbml0aW9uIG9mIGRpc3BsYXlNb2RlLlxuICovXG5leHBvcnQgY29uc3QgZ2V0RmllbGREaXNwbGF5ID0gZnVuY3Rpb24gKFxuXHRvUHJvcGVydHlQYXRoOiBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sXG5cdHNUYXJnZXREaXNwbGF5TW9kZTogc3RyaW5nLFxuXHRvQ29tcHV0ZWRFZGl0TW9kZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz5cbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0Y29uc3Qgb1Byb3BlcnR5ID0gKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKG9Qcm9wZXJ0eVBhdGgpICYmIG9Qcm9wZXJ0eVBhdGguJHRhcmdldCkgfHwgKG9Qcm9wZXJ0eVBhdGggYXMgUHJvcGVydHkpO1xuXHRjb25zdCBoYXNUZXh0QW5ub3RhdGlvbiA9IG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0ICE9PSB1bmRlZmluZWQ7XG5cblx0aWYgKGhhc1ZhbHVlSGVscChvUHJvcGVydHkpKSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKHNUYXJnZXREaXNwbGF5TW9kZSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGhhc1RleHRBbm5vdGF0aW9uID8gY29tcGlsZUV4cHJlc3Npb24oaWZFbHNlKGVxdWFsKG9Db21wdXRlZEVkaXRNb2RlLCBcIkVkaXRhYmxlXCIpLCBcIlZhbHVlXCIsIHNUYXJnZXREaXNwbGF5TW9kZSkpIDogXCJWYWx1ZVwiO1xuXHR9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VHlwZUNvbmZpZyA9IGZ1bmN0aW9uIChvUHJvcGVydHk6IFByb3BlcnR5IHwgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcywgZGF0YVR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IENvbmZpZ1R5cGUge1xuXHRjb25zdCBvVGFyZ2V0TWFwcGluZyA9IEVETV9UWVBFX01BUFBJTkdbKG9Qcm9wZXJ0eSBhcyBQcm9wZXJ0eSk/LnR5cGVdIHx8IChkYXRhVHlwZSA/IEVETV9UWVBFX01BUFBJTkdbZGF0YVR5cGVdIDogdW5kZWZpbmVkKTtcblx0Y29uc3QgcHJvcGVydHlUeXBlQ29uZmlnOiBDb25maWdUeXBlID0ge1xuXHRcdHR5cGU6IG9UYXJnZXRNYXBwaW5nLnR5cGUsXG5cdFx0Y29uc3RyYWludHM6IHt9LFxuXHRcdGZvcm1hdE9wdGlvbnM6IHt9XG5cdH07XG5cdGlmIChpc1Byb3BlcnR5KG9Qcm9wZXJ0eSkpIHtcblx0XHRwcm9wZXJ0eVR5cGVDb25maWcuY29uc3RyYWludHMgPSB7XG5cdFx0XHRzY2FsZTogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiRTY2FsZSA/IG9Qcm9wZXJ0eS5zY2FsZSA6IHVuZGVmaW5lZCxcblx0XHRcdHByZWNpc2lvbjogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiRQcmVjaXNpb24gPyBvUHJvcGVydHkucHJlY2lzaW9uIDogdW5kZWZpbmVkLFxuXHRcdFx0bWF4TGVuZ3RoOiBvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uJE1heExlbmd0aCA/IG9Qcm9wZXJ0eS5tYXhMZW5ndGggOiB1bmRlZmluZWQsXG5cdFx0XHRudWxsYWJsZTogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiROdWxsYWJsZSA/IG9Qcm9wZXJ0eS5udWxsYWJsZSA6IHVuZGVmaW5lZCxcblx0XHRcdG1pbmltdW06XG5cdFx0XHRcdG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy5bXCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWluaW11bS8kRGVjaW1hbFwiXSAmJlxuXHRcdFx0XHQhaXNOYU4ob1Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NaW5pbXVtKVxuXHRcdFx0XHRcdD8gYCR7b1Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NaW5pbXVtfWBcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRcdG1heGltdW06XG5cdFx0XHRcdG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy5bXCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWF4aW11bS8kRGVjaW1hbFwiXSAmJlxuXHRcdFx0XHQhaXNOYU4ob1Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtKVxuXHRcdFx0XHRcdD8gYCR7b1Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtfWBcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRcdGlzRGlnaXRTZXF1ZW5jZTpcblx0XHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnLnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIgJiZcblx0XHRcdFx0b1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LltcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNEaWdpdFNlcXVlbmNlXCJdICYmXG5cdFx0XHRcdG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc0RpZ2l0U2VxdWVuY2Vcblx0XHRcdFx0XHQ/IHRydWVcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRcdFY0OiBvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uJFY0ID8gdHJ1ZSA6IHVuZGVmaW5lZFxuXHRcdH07XG5cdH1cblx0cHJvcGVydHlUeXBlQ29uZmlnLmZvcm1hdE9wdGlvbnMgPSB7XG5cdFx0cGFyc2VBc1N0cmluZzpcblx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZz8udHlwZT8uaW5kZXhPZihcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludFwiKSA9PT0gMCB8fFxuXHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRG91YmxlXCIpID09PSAwXG5cdFx0XHRcdD8gZmFsc2Vcblx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0ZW1wdHlTdHJpbmc6XG5cdFx0XHRwcm9wZXJ0eVR5cGVDb25maWc/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnRcIikgPT09IDAgfHxcblx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZz8udHlwZT8uaW5kZXhPZihcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRvdWJsZVwiKSA9PT0gMFxuXHRcdFx0XHQ/IFwiXCJcblx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0cGFyc2VLZWVwc0VtcHR5U3RyaW5nOiBwcm9wZXJ0eVR5cGVDb25maWcudHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIiA/IHRydWUgOiB1bmRlZmluZWRcblx0fTtcblx0cmV0dXJuIHByb3BlcnR5VHlwZUNvbmZpZztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRCaW5kaW5nV2l0aFVuaXRPckN1cnJlbmN5ID0gZnVuY3Rpb24gKFxuXHRvUHJvcGVydHlEYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pixcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4sXG5cdGlnbm9yZVVuaXRDb25zdHJhaW50PzogYm9vbGVhbixcblx0Zm9ybWF0T3B0aW9ucz86IHtcblx0XHRzaG93TWVhc3VyZT86IGJvb2xlYW47XG5cdH1cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0Y29uc3Qgb1Byb3BlcnR5RGVmaW5pdGlvbiA9IG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0IGFzIFByb3BlcnR5O1xuXHRsZXQgdW5pdCA9IG9Qcm9wZXJ0eURlZmluaXRpb24uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0O1xuXHRjb25zdCByZWxhdGl2ZUxvY2F0aW9uID0gZ2V0UmVsYXRpdmVQYXRocyhvUHJvcGVydHlEYXRhTW9kZWxQYXRoKTtcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiA9IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24ob1Byb3BlcnR5RGVmaW5pdGlvbiwgcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbik7XG5cdGlmIChoYXNTdGF0aWNQZXJjZW50VW5pdChvUHJvcGVydHlEZWZpbml0aW9uKSkge1xuXHRcdGlmIChmb3JtYXRPcHRpb25zPy5zaG93TWVhc3VyZSA9PT0gZmFsc2UpIHtcblx0XHRcdHJldHVybiBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uO1xuXHRcdH1cblx0XHRyZXR1cm4gZm9ybWF0UmVzdWx0KFtwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uXSwgdmFsdWVGb3JtYXR0ZXJzLmZvcm1hdFdpdGhQZXJjZW50YWdlKTtcblx0fVxuXHRjb25zdCBjb21wbGV4VHlwZSA9IHVuaXQgPyBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlVuaXRcIiA6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuQ3VycmVuY3lcIjtcblx0dW5pdCA9IHVuaXQgPyB1bml0IDogKG9Qcm9wZXJ0eURlZmluaXRpb24uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeSBhcyB1bmtub3duIGFzIFVuaXQgfCB1bmRlZmluZWQpO1xuXHRjb25zdCB1bml0QmluZGluZ0V4cHJlc3Npb24gPVxuXHRcdGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKHVuaXQpICYmIHVuaXQuJHRhcmdldFxuXHRcdFx0PyBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKHVuaXQuJHRhcmdldCwgZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHVuaXQsIHJlbGF0aXZlTG9jYXRpb24pLCBpZ25vcmVVbml0Q29uc3RyYWludClcblx0XHRcdDogZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHVuaXQsIHJlbGF0aXZlTG9jYXRpb24pO1xuXG5cdHJldHVybiBhZGRUeXBlSW5mb3JtYXRpb24oW3Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb24sIHVuaXRCaW5kaW5nRXhwcmVzc2lvbl0sIGNvbXBsZXhUeXBlLCB1bmRlZmluZWQsIGZvcm1hdE9wdGlvbnMpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEJpbmRpbmdGb3JVbml0T3JDdXJyZW5jeSA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5RGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4gfCB1bmRlZmluZWRcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHwgc3RyaW5nIHtcblx0Y29uc3Qgb1Byb3BlcnR5RGVmaW5pdGlvbiA9IG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGg/LnRhcmdldE9iamVjdDtcblx0aWYgKCFvUHJvcGVydHlEZWZpbml0aW9uKSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHRsZXQgdW5pdCA9IG9Qcm9wZXJ0eURlZmluaXRpb24uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0O1xuXHRpZiAoaGFzU3RhdGljUGVyY2VudFVuaXQob1Byb3BlcnR5RGVmaW5pdGlvbikpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQoXCIlXCIpO1xuXHR9XG5cdGNvbnN0IHJlbGF0aXZlTG9jYXRpb24gPSBnZXRSZWxhdGl2ZVBhdGhzKG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgpO1xuXG5cdGNvbnN0IGNvbXBsZXhUeXBlID0gdW5pdCA/IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuVW5pdFwiIDogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5DdXJyZW5jeVwiO1xuXHR1bml0ID0gdW5pdCA/IHVuaXQgOiAob1Byb3BlcnR5RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5IGFzIHVua25vd24gYXMgVW5pdCB8IHVuZGVmaW5lZCk7XG5cdGNvbnN0IHVuaXRCaW5kaW5nRXhwcmVzc2lvbiA9XG5cdFx0aXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24odW5pdCkgJiYgdW5pdC4kdGFyZ2V0XG5cdFx0XHQ/IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24odW5pdC4kdGFyZ2V0LCBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odW5pdCwgcmVsYXRpdmVMb2NhdGlvbikpXG5cdFx0XHQ6IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih1bml0LCByZWxhdGl2ZUxvY2F0aW9uKTtcblxuXHRsZXQgcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiA9IHBhdGhJbk1vZGVsKFxuXHRcdGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgob1Byb3BlcnR5RGF0YU1vZGVsUGF0aClcblx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPjtcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiA9IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24ob1Byb3BlcnR5RGVmaW5pdGlvbiwgcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiwgdHJ1ZSk7XG5cdHJldHVybiBhZGRUeXBlSW5mb3JtYXRpb24oW3Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb24sIHVuaXRCaW5kaW5nRXhwcmVzc2lvbl0sIGNvbXBsZXhUeXBlLCB1bmRlZmluZWQsIHtcblx0XHRwYXJzZUtlZXBzRW1wdHlTdHJpbmc6IHRydWUsXG5cdFx0c2hvd051bWJlcjogZmFsc2Vcblx0fSk7XG59O1xuZXhwb3J0IGNvbnN0IGdldEJpbmRpbmdXaXRoVGltZXpvbmUgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPixcblx0aWdub3JlVW5pdENvbnN0cmFpbnQgPSBmYWxzZSxcblx0aGlkZVRpbWV6b25lRm9yRW1wdHlWYWx1ZXMgPSBmYWxzZSxcblx0ZGF0ZUZvcm1hdE9wdGlvbnM/OiBkYXRlRm9ybWF0T3B0aW9uc1xuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRjb25zdCBvUHJvcGVydHlEZWZpbml0aW9uID0gb1Byb3BlcnR5RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHk7XG5cdGNvbnN0IHRpbWV6b25lID0gb1Byb3BlcnR5RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UaW1lem9uZTtcblx0Y29uc3QgcmVsYXRpdmVMb2NhdGlvbiA9IGdldFJlbGF0aXZlUGF0aHMob1Byb3BlcnR5RGF0YU1vZGVsUGF0aCk7XG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24gPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKG9Qcm9wZXJ0eURlZmluaXRpb24sIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24pO1xuXG5cdGNvbnN0IGNvbXBsZXhUeXBlID0gXCJzYXAuZmUuY29yZS50eXBlLkRhdGVUaW1lV2l0aFRpbWV6b25lXCI7XG5cdGNvbnN0IHVuaXRCaW5kaW5nRXhwcmVzc2lvbiA9XG5cdFx0aXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24odGltZXpvbmUpICYmIHRpbWV6b25lLiR0YXJnZXRcblx0XHRcdD8gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihcblx0XHRcdFx0XHQodGltZXpvbmUgYXMgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPHVua25vd24+KS4kdGFyZ2V0IGFzIFByb3BlcnR5LFxuXHRcdFx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih0aW1lem9uZSwgcmVsYXRpdmVMb2NhdGlvbiksXG5cdFx0XHRcdFx0aWdub3JlVW5pdENvbnN0cmFpbnRcblx0XHRcdCAgKVxuXHRcdFx0OiBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odGltZXpvbmUsIHJlbGF0aXZlTG9jYXRpb24pO1xuXHRsZXQgZm9ybWF0T3B0aW9ucyA9IHt9O1xuXHRpZiAoaGlkZVRpbWV6b25lRm9yRW1wdHlWYWx1ZXMpIHtcblx0XHRmb3JtYXRPcHRpb25zID0ge1xuXHRcdFx0c2hvd1RpbWV6b25lRm9yRW1wdHlWYWx1ZXM6IGZhbHNlXG5cdFx0fTtcblx0fVxuXG5cdGlmIChkYXRlRm9ybWF0T3B0aW9ucz8uc2hvd1RpbWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdGZvcm1hdE9wdGlvbnMgPSB7IC4uLmZvcm1hdE9wdGlvbnMsIC4uLnsgc2hvd1RpbWU6IGRhdGVGb3JtYXRPcHRpb25zLnNob3dUaW1lIH0gfTtcblx0fVxuXHRpZiAoZGF0ZUZvcm1hdE9wdGlvbnM/LnNob3dEYXRlICE9PSB1bmRlZmluZWQpIHtcblx0XHRmb3JtYXRPcHRpb25zID0geyAuLi5mb3JtYXRPcHRpb25zLCAuLi57IHNob3dEYXRlOiBkYXRlRm9ybWF0T3B0aW9ucy5zaG93RGF0ZSB9IH07XG5cdH1cblx0aWYgKGRhdGVGb3JtYXRPcHRpb25zPy5zaG93VGltZXpvbmUgIT09IHVuZGVmaW5lZCkge1xuXHRcdGZvcm1hdE9wdGlvbnMgPSB7IC4uLmZvcm1hdE9wdGlvbnMsIC4uLnsgc2hvd1RpbWV6b25lOiBkYXRlRm9ybWF0T3B0aW9ucy5zaG93VGltZXpvbmUgfSB9O1xuXHR9XG5cblx0cmV0dXJuIGFkZFR5cGVJbmZvcm1hdGlvbihbcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiwgdW5pdEJpbmRpbmdFeHByZXNzaW9uXSwgY29tcGxleFR5cGUsIHVuZGVmaW5lZCwgZm9ybWF0T3B0aW9ucyk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QmluZGluZ0ZvclRpbWV6b25lID0gZnVuY3Rpb24gKFxuXHRwcm9wZXJ0eURhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRjb25zdCBwcm9wZXJ0eURlZmluaXRpb24gPSBwcm9wZXJ0eURhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0IGFzIFByb3BlcnR5O1xuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uID0gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihwcm9wZXJ0eURlZmluaXRpb24sIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24pO1xuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uLnR5cGUgPSBcImFueVwiO1xuXHRjb25zdCBjb21wbGV4VHlwZSA9IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRGF0ZVRpbWVXaXRoVGltZXpvbmVcIjtcblx0Y29uc3QgZm9ybWF0T3B0aW9ucyA9IHsgc2hvd1RpbWU6IGZhbHNlLCBzaG93RGF0ZTogZmFsc2UsIHNob3dUaW1lem9uZTogdHJ1ZSB9O1xuXG5cdC8vIG51bGwgaXMgcmVxdWlyZWQgYnkgZm9ybWF0dGVyIHdoZW4gdGhlcmUgaXMganVzdCBhIHRpbWV6b25lXG5cdHJldHVybiBhZGRUeXBlSW5mb3JtYXRpb24oW251bGwsIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb25dLCBjb21wbGV4VHlwZSwgdW5kZWZpbmVkLCBmb3JtYXRPcHRpb25zKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBbGlnbm1lbnRFeHByZXNzaW9uID0gZnVuY3Rpb24gKFxuXHRvQ29tcHV0ZWRFZGl0TW9kZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4sXG5cdHNBbGlnbkRpc3BsYXkgPSBcIkJlZ2luXCIsXG5cdHNBbGlnbkVkaXQgPSBcIkJlZ2luXCJcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oaWZFbHNlKGVxdWFsKG9Db21wdXRlZEVkaXRNb2RlLCBcIkRpc3BsYXlcIiksIHNBbGlnbkRpc3BsYXksIHNBbGlnbkVkaXQpKTtcbn07XG5cbi8qKlxuICogRm9ybWF0dGVyIGhlbHBlciB0byByZXRyaWV2ZSB0aGUgY29udmVydGVyQ29udGV4dCBmcm9tIHRoZSBtZXRhbW9kZWwgY29udGV4dC5cbiAqXG4gKiBAcGFyYW0gb0NvbnRleHQgVGhlIG9yaWdpbmFsIG1ldGFtb2RlbCBjb250ZXh0XG4gKiBAcGFyYW0gb0ludGVyZmFjZSBUaGUgY3VycmVudCB0ZW1wbGF0aW5nIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBDb252ZXJ0ZXJDb250ZXh0IHJlcHJlc2VudGluZyB0aGF0IG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgZ2V0Q29udmVydGVyQ29udGV4dCA9IGZ1bmN0aW9uIChvQ29udGV4dDogTWV0YU1vZGVsQ29udGV4dCwgb0ludGVyZmFjZTogQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlKTogb2JqZWN0IHwgbnVsbCB7XG5cdGlmIChvSW50ZXJmYWNlICYmIG9JbnRlcmZhY2UuY29udGV4dCkge1xuXHRcdHJldHVybiBjb252ZXJ0TWV0YU1vZGVsQ29udGV4dChvSW50ZXJmYWNlLmNvbnRleHQpIGFzIG9iamVjdDtcblx0fVxuXHRyZXR1cm4gbnVsbDtcbn07XG5nZXRDb252ZXJ0ZXJDb250ZXh0LnJlcXVpcmVzSUNvbnRleHQgPSB0cnVlO1xuXG4vKipcbiAqIEZvcm1hdHRlciBoZWxwZXIgdG8gcmV0cmlldmUgdGhlIGRhdGEgbW9kZWwgb2JqZWN0cyB0aGF0IGFyZSBpbnZvbHZlZCBmcm9tIHRoZSBtZXRhbW9kZWwgY29udGV4dC5cbiAqXG4gKiBAcGFyYW0gb0NvbnRleHQgVGhlIG9yaWdpbmFsIE9EYXRhTWV0YU1vZGVsIGNvbnRleHRcbiAqIEBwYXJhbSBvSW50ZXJmYWNlIFRoZSBjdXJyZW50IHRlbXBsYXRpbmcgY29udGV4dFxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgZW50aXR5c2V0cyBhbmQgbmF2cHJvcGVydGllcyB0aGF0IGFyZSBpbnZvbHZlZCB0byBnZXQgdG8gYSBzcGVjaWZpYyBvYmplY3QgaW4gdGhlIG1ldGFtb2RlbFxuICovXG5leHBvcnQgY29uc3QgZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCA9IGZ1bmN0aW9uIDxUPihcblx0b0NvbnRleHQ6IE1ldGFNb2RlbENvbnRleHQsXG5cdG9JbnRlcmZhY2U6IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZVxuKTogRGF0YU1vZGVsT2JqZWN0UGF0aDxUPiB8IG51bGwge1xuXHRpZiAob0ludGVyZmFjZSAmJiBvSW50ZXJmYWNlLmNvbnRleHQpIHtcblx0XHRyZXR1cm4gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG9JbnRlcmZhY2UuY29udGV4dCk7XG5cdH1cblx0cmV0dXJuIG51bGw7XG59O1xuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aC5yZXF1aXJlc0lDb250ZXh0ID0gdHJ1ZTtcblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIHJlZmVyZW5jZWQgcHJvcGVydHkgaXMgcGFydCBvZiBhIDEuLm4gbmF2aWdhdGlvbi5cbiAqXG4gKiBAcGFyYW0gb0RhdGFNb2RlbFBhdGggVGhlIGRhdGEgbW9kZWwgcGF0aCB0byBjaGVja1xuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgcHJvcGVydHkgaXMgcGFydCBvZiBhIDEuLm4gbmF2aWdhdGlvblxuICovXG5leHBvcnQgY29uc3QgaXNNdWx0aVZhbHVlRmllbGQgPSBmdW5jdGlvbiAob0RhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj4pOiBib29sZWFuIHtcblx0aWYgKG9EYXRhTW9kZWxQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzPy5sZW5ndGgpIHtcblx0XHRjb25zdCBoYXNPbmVUb01hbnlOYXZpZ2F0aW9uID1cblx0XHRcdG9EYXRhTW9kZWxQYXRoPy5uYXZpZ2F0aW9uUHJvcGVydGllcy5maW5kSW5kZXgoKG9OYXYpID0+IHtcblx0XHRcdFx0aWYgKGlzTXVsdGlwbGVOYXZpZ2F0aW9uUHJvcGVydHkob05hdikpIHtcblx0XHRcdFx0XHRpZiAob0RhdGFNb2RlbFBhdGguY29udGV4dExvY2F0aW9uPy5uYXZpZ2F0aW9uUHJvcGVydGllcz8ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHQvL3dlIGNoZWNrIHRoZSBvbmUgdG8gbWFueSBuYXYgaXMgbm90IGFscmVhZHkgcGFydCBvZiB0aGUgY29udGV4dFxuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0b0RhdGFNb2RlbFBhdGguY29udGV4dExvY2F0aW9uPy5uYXZpZ2F0aW9uUHJvcGVydGllcy5maW5kSW5kZXgoXG5cdFx0XHRcdFx0XHRcdFx0KG9Db250ZXh0TmF2KSA9PiBvQ29udGV4dE5hdi5uYW1lID09PSBvTmF2Lm5hbWVcblx0XHRcdFx0XHRcdFx0KSA9PT0gLTFcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0pID4gLTE7XG5cdFx0aWYgKGhhc09uZVRvTWFueU5hdmlnYXRpb24pIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuZXhwb3J0IGNvbnN0IGdldFJlcXVpcmVkRXhwcmVzc2lvbkFzT2JqZWN0ID0gZnVuY3Rpb24gKFxuXHRvUHJvcGVydHlQYXRoOiBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sXG5cdG9EYXRhRmllbGRDb252ZXJ0ZWQ/OiBQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMsXG5cdGZvcmNlRWRpdE1vZGUgPSBmYWxzZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIGdldFJlcXVpcmVkRXhwcmVzc2lvbihvUHJvcGVydHlQYXRoLCBvRGF0YUZpZWxkQ29udmVydGVkLCBmb3JjZUVkaXRNb2RlLCB0cnVlKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG59O1xuZXhwb3J0IGNvbnN0IGdldFJlcXVpcmVkRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRvRGF0YUZpZWxkQ29udmVydGVkPzogUHJvcGVydHkgfCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzLFxuXHRmb3JjZUVkaXRNb2RlID0gZmFsc2UsXG5cdGJBc09iamVjdCA9IGZhbHNlLFxuXHRvUmVxdWlyZWRQcm9wZXJ0aWVzOiB7XG5cdFx0cmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucz86IHVua25vd25bXTtcblx0XHRyZXF1aXJlZFByb3BlcnRpZXNGcm9tVXBkYXRlUmVzdHJpY3Rpb25zPzogdW5rbm93bltdO1xuXHR9ID0ge30sXG5cdGRhdGFNb2RlbE9iamVjdFBhdGg/OiBEYXRhTW9kZWxPYmplY3RQYXRoPHVua25vd24+XG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGFSZXF1aXJlZFByb3BlcnRpZXNGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zID0gb1JlcXVpcmVkUHJvcGVydGllcy5yZXF1aXJlZFByb3BlcnRpZXNGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zO1xuXHRjb25zdCBhUmVxdWlyZWRQcm9wZXJ0aWVzRnJvbVVwZGF0ZVJlc3RyaWN0aW9ucyA9IG9SZXF1aXJlZFByb3BlcnRpZXMucmVxdWlyZWRQcm9wZXJ0aWVzRnJvbVVwZGF0ZVJlc3RyaWN0aW9ucztcblx0aWYgKCFvUHJvcGVydHlQYXRoIHx8IHR5cGVvZiBvUHJvcGVydHlQYXRoID09PSBcInN0cmluZ1wiKSB7XG5cdFx0aWYgKGJBc09iamVjdCkge1xuXHRcdFx0cmV0dXJuIGNvbnN0YW50KGZhbHNlKTtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGNvbnN0YW50KGZhbHNlKSk7XG5cdH1cblx0bGV0IHJlbGF0aXZlUGF0aDtcblx0aWYgKGRhdGFNb2RlbE9iamVjdFBhdGgpIHtcblx0XHRyZWxhdGl2ZVBhdGggPSBnZXRSZWxhdGl2ZVBhdGhzKGRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHR9XG5cdGxldCBkYXRhRmllbGRSZXF1aXJlZEV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IGNvbnN0YW50KGZhbHNlKTtcblx0aWYgKG9EYXRhRmllbGRDb252ZXJ0ZWQgIT09IHVuZGVmaW5lZCAmJiAhaXNQcm9wZXJ0eShvRGF0YUZpZWxkQ29udmVydGVkKSkge1xuXHRcdC8vIEZvciB0aGUgZGF0YWZpZWxkIGV4cHJlc3Npb24gd2Ugc2hvdWxkIG5vdCAgY29uc2lkZXIgdGhlIHJlbGF0aXZlIHBhdGhcblx0XHRkYXRhRmllbGRSZXF1aXJlZEV4cHJlc3Npb24gPSBpc1JlcXVpcmVkRXhwcmVzc2lvbihvRGF0YUZpZWxkQ29udmVydGVkKTtcblx0fVxuXHRsZXQgcmVxdWlyZWRQcm9wZXJ0eUZyb21JbnNlcnRSZXN0cmljdGlvbnNFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBjb25zdGFudChmYWxzZSk7XG5cdGxldCByZXF1aXJlZFByb3BlcnR5RnJvbVVwZGF0ZVJlc3RyaWN0aW9uc0V4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IGNvbnN0YW50KGZhbHNlKTtcblxuXHRjb25zdCBvUHJvcGVydHk6IFByb3BlcnR5ID0gKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKG9Qcm9wZXJ0eVBhdGgpICYmIG9Qcm9wZXJ0eVBhdGguJHRhcmdldCkgfHwgKG9Qcm9wZXJ0eVBhdGggYXMgUHJvcGVydHkpO1xuXHQvLyBFbmFibGVtZW50IGRlcGVuZHMgb24gdGhlIGZpZWxkIGNvbnRyb2wgZXhwcmVzc2lvblxuXHQvLyBJZiB0aGUgRmllbGQgY29udHJvbCBpcyBzdGF0aWNhbGx5IGluIEluYXBwbGljYWJsZSAoZGlzYWJsZWQpIC0+IG5vdCBlbmFibGVkXG5cdGNvbnN0IHJlcXVpcmVkRXhwcmVzc2lvbiA9IGlzUmVxdWlyZWRFeHByZXNzaW9uKG9Qcm9wZXJ0eSwgcmVsYXRpdmVQYXRoKTtcblx0Y29uc3QgZWRpdE1vZGUgPSBmb3JjZUVkaXRNb2RlIHx8IFVJLklzRWRpdGFibGU7XG5cdGlmIChhUmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucz8uaW5jbHVkZXMob1Byb3BlcnR5Lm5hbWUpKSB7XG5cdFx0cmVxdWlyZWRQcm9wZXJ0eUZyb21JbnNlcnRSZXN0cmljdGlvbnNFeHByZXNzaW9uID0gVUkuSXNDcmVhdGVNb2RlO1xuXHR9XG5cdGlmIChhUmVxdWlyZWRQcm9wZXJ0aWVzRnJvbVVwZGF0ZVJlc3RyaWN0aW9ucz8uaW5jbHVkZXMob1Byb3BlcnR5Lm5hbWUpKSB7XG5cdFx0cmVxdWlyZWRQcm9wZXJ0eUZyb21VcGRhdGVSZXN0cmljdGlvbnNFeHByZXNzaW9uID0gYW5kKFVJLklzRWRpdGFibGUsIG5vdChVSS5Jc0NyZWF0ZU1vZGUpKTtcblx0fVxuXHRjb25zdCByZXR1cm5FeHByZXNzaW9uID0gb3IoXG5cdFx0YW5kKG9yKHJlcXVpcmVkRXhwcmVzc2lvbiwgZGF0YUZpZWxkUmVxdWlyZWRFeHByZXNzaW9uKSwgZWRpdE1vZGUpLFxuXHRcdHJlcXVpcmVkUHJvcGVydHlGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zRXhwcmVzc2lvbixcblx0XHRyZXF1aXJlZFByb3BlcnR5RnJvbVVwZGF0ZVJlc3RyaWN0aW9uc0V4cHJlc3Npb25cblx0KTtcblx0aWYgKGJBc09iamVjdCkge1xuXHRcdHJldHVybiByZXR1cm5FeHByZXNzaW9uO1xuXHR9XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihyZXR1cm5FeHByZXNzaW9uKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRSZXF1aXJlZEV4cHJlc3Npb25Gb3JDb25uZWN0ZWREYXRhRmllbGQgPSBmdW5jdGlvbiAoXG5cdGRhdGFGaWVsZE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8QW5ub3RhdGlvblBhdGg8Q29ubmVjdGVkRmllbGRzVHlwZT4+XG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGNvbnN0IGRhdGE6IFJlY29yZDxzdHJpbmcsIERhdGFGaWVsZEFic3RyYWN0VHlwZXM+ID0gKGRhdGFGaWVsZE9iamVjdFBhdGg/LnRhcmdldE9iamVjdD8uJHRhcmdldD8uRGF0YSA/PyB7fSkgYXMgUmVjb3JkPFxuXHRcdHN0cmluZyxcblx0XHREYXRhRmllbGRBYnN0cmFjdFR5cGVzXG5cdD47XG5cdGNvbnN0IGtleXM6IEFycmF5PHN0cmluZz4gPSBPYmplY3Qua2V5cyhkYXRhKTtcblx0Y29uc3QgZGF0YUZpZWxkcyA9IFtdO1xuXHRsZXQgcHJvcGVydHlQYXRoO1xuXHRjb25zdCBpc1JlcXVpcmVkRXhwcmVzc2lvbnM6IChDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPilbXSB8IHVuZGVmaW5lZCA9IFtdO1xuXHRmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG5cdFx0aWYgKGRhdGFba2V5XT8uW1wiJFR5cGVcIl0gJiYgZGF0YVtrZXldW1wiJFR5cGVcIl0/LmluY2x1ZGVzKFwiRGF0YUZpZWxkXCIpKSB7XG5cdFx0XHRkYXRhRmllbGRzLnB1c2goZGF0YVtrZXldKTtcblx0XHR9XG5cdH1cblx0Zm9yIChjb25zdCBkYXRhRmllbGQgb2YgZGF0YUZpZWxkcykge1xuXHRcdHN3aXRjaCAoZGF0YUZpZWxkLiRUeXBlKSB7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZDpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoQWN0aW9uOlxuXHRcdFx0XHRpZiAodHlwZW9mIGRhdGFGaWVsZC5WYWx1ZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdHByb3BlcnR5UGF0aCA9IGRhdGFGaWVsZC5WYWx1ZS4kdGFyZ2V0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uOlxuXHRcdFx0XHRpZiAoZGF0YUZpZWxkLlRhcmdldD8uJHRhcmdldCkge1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdGlzQW5ub3RhdGlvbk9mVHlwZTxEYXRhRmllbGQgfCBEYXRhUG9pbnRUeXBlPihkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQsIFtcblx0XHRcdFx0XHRcdFx0VUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkLFxuXHRcdFx0XHRcdFx0XHRVSUFubm90YXRpb25UeXBlcy5EYXRhUG9pbnRUeXBlXG5cdFx0XHRcdFx0XHRdKVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0aWYgKHR5cGVvZiBkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQuVmFsdWUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlQYXRoID0gZGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0LlZhbHVlLiR0YXJnZXQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGlmICh0eXBlb2YgZGF0YUZpZWxkLlRhcmdldCA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0eVBhdGggPSBkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRicmVhaztcblx0XHRcdC8vIG5vIGRlZmF1bHRcblx0XHR9XG5cdFx0aXNSZXF1aXJlZEV4cHJlc3Npb25zLnB1c2goZ2V0UmVxdWlyZWRFeHByZXNzaW9uQXNPYmplY3QocHJvcGVydHlQYXRoLCBkYXRhRmllbGQsIGZhbHNlKSk7XG5cdH1cblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKG9yKC4uLihpc1JlcXVpcmVkRXhwcmVzc2lvbnMgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10pKSk7XG59O1xuXG4vKipcbiAqIENoZWNrIGlmIGhlYWRlciBmYWNldCBvciBhY3Rpb24gaXMgdmlzaWJsZS5cbiAqXG4gKiBAcGFyYW0gdGFyZ2V0T2JqZWN0IEhlYWRlciBmYWNldHMgb3IgQWN0aW9uc1xuICogQHJldHVybnMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1Zpc2libGUoXG5cdHRhcmdldE9iamVjdDpcblx0XHR8IERhdGFGaWVsZEFic3RyYWN0VHlwZXNcblx0XHR8IERhdGFQb2ludFR5cGVUeXBlc1xuXHRcdHwgUmVmZXJlbmNlRmFjZXRcblx0XHR8IENvbGxlY3Rpb25GYWNldFxuXHRcdHwgRGF0YUZpZWxkRm9yQWN0aW9uVHlwZXNcblx0XHR8IEZpZWxkR3JvdXBcblx0XHR8IFByb3BlcnR5XG5cdFx0fCB1bmRlZmluZWRcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBub3QoZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4pLCB0cnVlKSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYWN0aW9uIHBhcmFtZXRlciBpcyBzdXBwb3J0cyBtdWx0aSBsaW5lIGlucHV0LlxuICpcbiAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoIE9iamVjdCBwYXRoIHRvIHRoZSBhY3Rpb24gcGFyYW1ldGVyLlxuICogQHJldHVybnMgQm9vbGVhblxuICovXG5leHBvcnQgY29uc3QgaXNNdWx0aUxpbmUgPSBmdW5jdGlvbiAoZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxBY3Rpb25QYXJhbWV0ZXI+KTogYm9vbGVhbiB7XG5cdHJldHVybiBpc011bHRpTGluZVRleHQoZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QpO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgYWN0aW9uIGlzIGVuYWJsZWQuXG4gKiBAcGFyYW0gYWN0aW9uVGFyZ2V0IEFjdGlvblxuICogQHBhcmFtIGNvbnZlcnRlZFR5cGVzIENvbnZlcnRlZE1ldGFkYXRhXG4gKiBAcGFyYW0gZGF0YU1vZGVsT2JqZWN0UGF0aCBEYXRhTW9kZWxPYmplY3RQYXRoXG4gKiBAcGFyYW0gcGF0aEZyb21Db250ZXh0TG9jYXRpb24gQm9vbGVhblxuICogQHJldHVybnMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBY3Rpb25FbmFibGVkRXhwcmVzc2lvbihcblx0YWN0aW9uVGFyZ2V0OiBBY3Rpb24sXG5cdGNvbnZlcnRlZFR5cGVzOiBDb252ZXJ0ZWRNZXRhZGF0YSxcblx0ZGF0YU1vZGVsT2JqZWN0UGF0aD86IERhdGFNb2RlbE9iamVjdFBhdGg8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0cGF0aEZyb21Db250ZXh0TG9jYXRpb24/OiBib29sZWFuXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBvcGVyYXRpb25BdmFpbGFibGVJc0Fubm90YXRlZCA9XG5cdFx0YWN0aW9uVGFyZ2V0LmFubm90YXRpb25zLkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZT8udGVybSA9PT0gQ29yZUFubm90YXRpb25UZXJtcy5PcGVyYXRpb25BdmFpbGFibGU7XG5cblx0aWYgKCFvcGVyYXRpb25BdmFpbGFibGVJc0Fubm90YXRlZCkge1xuXHRcdC8vIE9wZXJhdGlvbkF2YWlsYWJsZSB0ZXJtIGRvZXNuJ3QgZXhpc3QgZm9yIHRoZSBhY3Rpb25cblx0XHRyZXR1cm4gY29uc3RhbnQodHJ1ZSk7XG5cdH1cblxuXHRsZXQgcHJlZml4ID0gXCJcIjtcblx0aWYgKFxuXHRcdGRhdGFNb2RlbE9iamVjdFBhdGggJiZcblx0XHRwYXRoRnJvbUNvbnRleHRMb2NhdGlvbiAmJlxuXHRcdHBhdGhGcm9tQ29udGV4dExvY2F0aW9uID09PSB0cnVlICYmXG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aC5jb250ZXh0TG9jYXRpb24/LnRhcmdldEVudGl0eVR5cGUgJiZcblx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLmNvbnRleHRMb2NhdGlvbi50YXJnZXRFbnRpdHlUeXBlICE9PSBhY3Rpb25UYXJnZXQuc291cmNlRW50aXR5VHlwZVxuXHQpIHtcblx0XHRjb25zdCBuYXZpZ2F0aW9ucyA9IGdldFJlbGF0aXZlUGF0aHMoZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdFx0bGV0IHNvdXJjZUFjdGlvbkRhdGFNb2RlbE9iamVjdCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoKGRhdGFNb2RlbE9iamVjdFBhdGguY29udGV4dExvY2F0aW9uKTtcblx0XHQvL1N0YXJ0IGZyb20gY29udGV4dExvY2F0aW9uIGFuZCBuYXZpZ2F0ZSB1bnRpbCB0aGUgc291cmNlIGVudGl0eVR5cGUgb2YgdGhlIGFjdGlvbiB0byBnZXQgdGhlIHJpZ2h0IHByZWZpeFxuXHRcdGZvciAoY29uc3QgbmF2IG9mIG5hdmlnYXRpb25zKSB7XG5cdFx0XHRzb3VyY2VBY3Rpb25EYXRhTW9kZWxPYmplY3QgPSBlbmhhbmNlRGF0YU1vZGVsUGF0aChzb3VyY2VBY3Rpb25EYXRhTW9kZWxPYmplY3QsIG5hdik7XG5cdFx0XHRpZiAoc291cmNlQWN0aW9uRGF0YU1vZGVsT2JqZWN0LnRhcmdldEVudGl0eVR5cGUgPT09IGFjdGlvblRhcmdldC5zb3VyY2VFbnRpdHlUeXBlKSB7XG5cdFx0XHRcdHByZWZpeCA9IGAke2dldFJlbGF0aXZlUGF0aHMoc291cmNlQWN0aW9uRGF0YU1vZGVsT2JqZWN0KS5qb2luKFwiL1wiKX0vYDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGNvbnN0IGJpbmRpbmdQYXJhbWV0ZXJGdWxsTmFtZSA9IGFjdGlvblRhcmdldC5pc0JvdW5kID8gYWN0aW9uVGFyZ2V0LnBhcmFtZXRlcnNbMF0/LmZ1bGx5UXVhbGlmaWVkTmFtZSA6IHVuZGVmaW5lZDtcblx0Y29uc3Qgb3BlcmF0aW9uQXZhaWxhYmxlRXhwcmVzc2lvbiA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihcblx0XHRhY3Rpb25UYXJnZXQuYW5ub3RhdGlvbnMuQ29yZT8uT3BlcmF0aW9uQXZhaWxhYmxlLFxuXHRcdFtdLFxuXHRcdHVuZGVmaW5lZCxcblx0XHQocGF0aDogc3RyaW5nKSA9PiBgJHtwcmVmaXh9JHtiaW5kaW5nQ29udGV4dFBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlZFR5cGVzLCBiaW5kaW5nUGFyYW1ldGVyRnVsbE5hbWUpfWBcblx0KTtcblxuXHRyZXR1cm4gZXF1YWwob3BlcmF0aW9uQXZhaWxhYmxlRXhwcmVzc2lvbiwgdHJ1ZSk7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBleHByZXNzaW9uIHRvIGNoZWNrIGlmIHRoZSBxdWlja1ZpZXcgZmFjZXQgaXMgdmlzaWJsZS5cbiAqIEBwYXJhbSBmYWNldE1vZGVsUGF0aFxuICogQHJldHVybnMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gb2YgdGhlIHZpc2liaWxpdHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUXVpY2tWaWV3RmFjZXRWaXNpYmxlKGZhY2V0TW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFJlZmVyZW5jZUZhY2V0Pik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0bGV0IHRhcmdldFZpc2libGU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IGNvbnN0YW50KHRydWUpO1xuXHRpZiAoaXNBbm5vdGF0aW9uT2ZUeXBlPEZpZWxkR3JvdXA+KGZhY2V0TW9kZWxQYXRoLnRhcmdldE9iamVjdD8uVGFyZ2V0Py4kdGFyZ2V0LCBVSUFubm90YXRpb25UeXBlcy5GaWVsZEdyb3VwVHlwZSkpIHtcblx0XHR0YXJnZXRWaXNpYmxlID0gaXNWaXNpYmxlKGZhY2V0TW9kZWxQYXRoLnRhcmdldE9iamVjdD8uVGFyZ2V0Py4kdGFyZ2V0KTtcblx0fVxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oYW5kKGlzVmlzaWJsZShmYWNldE1vZGVsUGF0aC50YXJnZXRPYmplY3QpLCB0YXJnZXRWaXNpYmxlKSk7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIGZpZWxkIGlzIE11bHRpTGluZSBhbmQgbmVlZHMgdmlzaWJpbGl0eS5cbiAqIEBwYXJhbSBpc011bHRpTGluZUZpZWxkIFRydWUgaWYgdGhlIGZpZWxkIGlzIG11bHRpbGluZVxuICogQHBhcmFtIGZvcm1FbGVtZW50c0xlbmd0aCBOdW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGZvcm1cbiAqIEBwYXJhbSB1c2VTaW5nbGVUZXh0QXJlYUZpZWxkQXNOb3RlcyBJZiB0aGUgb25seSBmaWVsZCB3aXRoaW4gYSBmb3JtIGNvbnRhaW5lciBpcyBhIHRleHQtYXJlYSBmaWVsZCwgdGhlIGxhYmVsIGlzIGhpZGRlblxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZm9ybSBoYXMgb25seSAxIGVsZW1lbnQgYW5kIGlzIG11bHRpbGluZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNNdWx0aUxpbmVMYWJlbEFuZE5lZWRWaXNpYmlsaXR5KFxuXHRpc011bHRpTGluZUZpZWxkOiBib29sZWFuLFxuXHRmb3JtRWxlbWVudHNMZW5ndGg6IG51bWJlcixcblx0dXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXM6IGJvb2xlYW5cbik6IGJvb2xlYW4ge1xuXHRpZiAodXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXMgJiYgaXNNdWx0aUxpbmVGaWVsZCAmJiBmb3JtRWxlbWVudHNMZW5ndGggPT09IDEpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBK0dPLE1BQU1BLGFBQWEsR0FBRztJQUM1QjtBQUNEO0FBQ0E7QUFDQTtJQUNDQyxRQUFRLEVBQUUsVUFBVTtJQUNwQjtBQUNEO0FBQ0E7QUFDQTtJQUNDQyxPQUFPLEVBQUUsU0FBUztJQUNsQjtBQUNEO0FBQ0E7QUFDQTtJQUNDQyxRQUFRLEVBQUUsVUFBVTtJQUNwQjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0lBQ0NDLGVBQWUsRUFBRSxpQkFBaUI7SUFDbEM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtJQUNDQyxnQkFBZ0IsRUFBRSxrQkFBa0I7SUFDcEM7QUFDRDtBQUNBO0FBQ0E7SUFDQ0MsUUFBUSxFQUFFO0VBQ1gs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
|
|
@@ -10,6 +10,7 @@ import type {
|
|
|
10
10
|
DataFieldForActionTypes,
|
|
11
11
|
DataPointType,
|
|
12
12
|
DataPointTypeTypes,
|
|
13
|
+
FieldGroup,
|
|
13
14
|
ReferenceFacet
|
|
14
15
|
} from "@sap-ux/vocabularies-types/vocabularies/UI";
|
|
15
16
|
import { UIAnnotationTypes } from "@sap-ux/vocabularies-types/vocabularies/UI";
|
|
@@ -779,6 +780,7 @@ export function isVisible(
|
|
|
779
780
|
| ReferenceFacet
|
|
780
781
|
| CollectionFacet
|
|
781
782
|
| DataFieldForActionTypes
|
|
783
|
+
| FieldGroup
|
|
782
784
|
| Property
|
|
783
785
|
| undefined
|
|
784
786
|
): BindingToolkitExpression<boolean> {
|
|
@@ -847,6 +849,19 @@ export function getActionEnabledExpression(
|
|
|
847
849
|
return equal(operationAvailableExpression, true);
|
|
848
850
|
}
|
|
849
851
|
|
|
852
|
+
/**
|
|
853
|
+
* Generates the expression to check if the quickView facet is visible.
|
|
854
|
+
* @param facetModelPath
|
|
855
|
+
* @returns BindingToolkitExpression The binding expression of the visibility
|
|
856
|
+
*/
|
|
857
|
+
export function isQuickViewFacetVisible(facetModelPath: DataModelObjectPath<ReferenceFacet>): CompiledBindingToolkitExpression {
|
|
858
|
+
let targetVisible: BindingToolkitExpression<boolean> = constant(true);
|
|
859
|
+
if (isAnnotationOfType<FieldGroup>(facetModelPath.targetObject?.Target?.$target, UIAnnotationTypes.FieldGroupType)) {
|
|
860
|
+
targetVisible = isVisible(facetModelPath.targetObject?.Target?.$target);
|
|
861
|
+
}
|
|
862
|
+
return compileExpression(and(isVisible(facetModelPath.targetObject), targetVisible));
|
|
863
|
+
}
|
|
864
|
+
|
|
850
865
|
/**
|
|
851
866
|
* Check if the field is MultiLine and needs visibility.
|
|
852
867
|
* @param isMultiLineField True if the field is multiline
|
|
@@ -9,7 +9,7 @@ sap.ui.define(["sap/fe/core/helpers/ClassSupport", "sap/ui/core/Lib", "sap/ui/mo
|
|
|
9
9
|
var defineUI5Class = ClassSupport.defineUI5Class;
|
|
10
10
|
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
|
|
11
11
|
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
|
12
|
-
const emailW3CRegexp = /^[a-zA-Z0-9
|
|
12
|
+
const emailW3CRegexp = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:.[a-zA-Z0-9-]+)*$/;
|
|
13
13
|
let EmailType = (_dec = defineUI5Class("sap.fe.core.type.Email"), _dec(_class = /*#__PURE__*/function (_ODataStringType) {
|
|
14
14
|
_inheritsLoose(EmailType, _ODataStringType);
|
|
15
15
|
function EmailType() {
|
|
@@ -26,4 +26,4 @@ sap.ui.define(["sap/fe/core/helpers/ClassSupport", "sap/ui/core/Lib", "sap/ui/mo
|
|
|
26
26
|
}(ODataStringType)) || _class);
|
|
27
27
|
return EmailType;
|
|
28
28
|
}, false);
|
|
29
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
29
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlbWFpbFczQ1JlZ2V4cCIsIkVtYWlsVHlwZSIsImRlZmluZVVJNUNsYXNzIiwidmFsaWRhdGVWYWx1ZSIsInNWYWx1ZSIsInRlc3QiLCJWYWxpZGF0ZUV4Y2VwdGlvbiIsIkxpYnJhcnkiLCJnZXRSZXNvdXJjZUJ1bmRsZUZvciIsImdldFRleHQiLCJPRGF0YVN0cmluZ1R5cGUiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkVtYWlsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlZmluZVVJNUNsYXNzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgTGlicmFyeSBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgT0RhdGFTdHJpbmdUeXBlIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdHlwZS9TdHJpbmdcIjtcbmltcG9ydCBWYWxpZGF0ZUV4Y2VwdGlvbiBmcm9tIFwic2FwL3VpL21vZGVsL1ZhbGlkYXRlRXhjZXB0aW9uXCI7XG5cbmNvbnN0IGVtYWlsVzNDUmVnZXhwID0gL15bYS16QS1aMC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dK0BbYS16QS1aMC05LV0rKD86LlthLXpBLVowLTktXSspKiQvO1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUudHlwZS5FbWFpbFwiKVxuY2xhc3MgRW1haWxUeXBlIGV4dGVuZHMgT0RhdGFTdHJpbmdUeXBlIHtcblx0dmFsaWRhdGVWYWx1ZShzVmFsdWU6IHN0cmluZyk6IHZvaWQge1xuXHRcdGlmIChzVmFsdWUgJiYgIWVtYWlsVzNDUmVnZXhwLnRlc3Qoc1ZhbHVlKSkge1xuXHRcdFx0dGhyb3cgbmV3IFZhbGlkYXRlRXhjZXB0aW9uKExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEuZ2V0VGV4dChcIlRfRU1BSUxUWVBFX0lOVkFMSURfVkFMVUVcIikpO1xuXHRcdH1cblx0XHRzdXBlci52YWxpZGF0ZVZhbHVlKHNWYWx1ZSk7XG5cdH1cbn1cbmV4cG9ydCBkZWZhdWx0IEVtYWlsVHlwZTtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7RUFLQSxNQUFNQSxjQUFjLEdBQUcscUVBQXFFO0VBQUMsSUFFdkZDLFNBQVMsV0FEZEMsY0FBYyxDQUFDLHdCQUF3QixDQUFDO0lBQUE7SUFBQTtNQUFBO0lBQUE7SUFBQTtJQUFBLE9BRXhDQyxhQUFhLEdBQWIsdUJBQWNDLE1BQWMsRUFBUTtNQUNuQyxJQUFJQSxNQUFNLElBQUksQ0FBQ0osY0FBYyxDQUFDSyxJQUFJLENBQUNELE1BQU0sQ0FBQyxFQUFFO1FBQzNDLE1BQU0sSUFBSUUsaUJBQWlCLENBQUNDLE9BQU8sQ0FBQ0Msb0JBQW9CLENBQUMsYUFBYSxDQUFDLENBQUVDLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO01BQy9HO01BQ0EsMkJBQU1OLGFBQWEsWUFBQ0MsTUFBTTtJQUMzQixDQUFDO0lBQUE7RUFBQSxFQU5zQk0sZUFBZTtFQUFBLE9BUXhCVCxTQUFTO0FBQUEifQ==
|
|
@@ -3,7 +3,7 @@ import Library from "sap/ui/core/Lib";
|
|
|
3
3
|
import ODataStringType from "sap/ui/model/odata/type/String";
|
|
4
4
|
import ValidateException from "sap/ui/model/ValidateException";
|
|
5
5
|
|
|
6
|
-
const emailW3CRegexp = /^[a-zA-Z0-9
|
|
6
|
+
const emailW3CRegexp = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:.[a-zA-Z0-9-]+)*$/;
|
|
7
7
|
@defineUI5Class("sap.fe.core.type.Email")
|
|
8
8
|
class EmailType extends ODataStringType {
|
|
9
9
|
validateValue(sValue: string): void {
|