@sapui5/sap.fe.core 1.124.1 → 1.124.2
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/controllerextensions/Routing.js +5 -3
- package/src/sap/fe/core/controllerextensions/Routing.ts +4 -2
- package/src/sap/fe/core/controllerextensions/SideEffects.js +1 -1
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +5 -5
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +1 -1
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +2 -0
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/BindingToolkit.js +17 -5
- package/src/sap/fe/core/helpers/BindingToolkit.ts +8 -1
- package/src/sap/fe/core/library.js +1 -1
- package/src/sap/fe/core/services/RoutingServiceFactory.js +2 -2
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +8 -1
- package/src/sap/fe/core/templating/UIFormatters.js +17 -9
- package/src/sap/fe/core/templating/UIFormatters.ts +26 -14
package/package.json
CHANGED
package/src/sap/fe/core/.library
CHANGED
|
@@ -55,15 +55,17 @@ sap.ui.define(["sap/fe/core/helpers/ClassSupport", "sap/fe/core/helpers/ModelHel
|
|
|
55
55
|
* Allows navigation to a specific context.
|
|
56
56
|
*
|
|
57
57
|
* @param oContext Object containing the context to be navigated to
|
|
58
|
+
* @param parameters Object containing the parameters for the navigation
|
|
59
|
+
* @param parameters.preserveHistory By default, the internal algorithm decides whether the navigation preserves the previous entry. PreserveHistory allows you to override this behavior.
|
|
58
60
|
* @public
|
|
59
61
|
* @since 1.90.0
|
|
60
62
|
*/;
|
|
61
|
-
_proto.navigate = function navigate(oContext) {
|
|
63
|
+
_proto.navigate = function navigate(oContext, parameters) {
|
|
62
64
|
const internalModel = this.base.getModel("internal");
|
|
63
65
|
// We have to delete the internal model value for "paginatorCurrentContext" to ensure it is re-evaluated by the navigateToContext function
|
|
64
66
|
// BCP: 2270123820
|
|
65
67
|
internalModel.setProperty("/paginatorCurrentContext", null);
|
|
66
|
-
this.base._routing.navigateToContext(oContext);
|
|
68
|
+
this.base._routing.navigateToContext(oContext, parameters);
|
|
67
69
|
}
|
|
68
70
|
|
|
69
71
|
/**
|
|
@@ -124,4 +126,4 @@ sap.ui.define(["sap/fe/core/helpers/ClassSupport", "sap/fe/core/helpers/ModelHel
|
|
|
124
126
|
}(ControllerExtension), (_applyDecoratedDescriptor(_class2.prototype, "onBeforeNavigation", [_dec2, _dec3], Object.getOwnPropertyDescriptor(_class2.prototype, "onBeforeNavigation"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "navigate", [_dec4, _dec5], Object.getOwnPropertyDescriptor(_class2.prototype, "navigate"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onBeforeBinding", [_dec6, _dec7], Object.getOwnPropertyDescriptor(_class2.prototype, "onBeforeBinding"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onAfterBinding", [_dec8, _dec9, _dec10], Object.getOwnPropertyDescriptor(_class2.prototype, "onAfterBinding"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "navigateToRoute", [_dec11, _dec12], Object.getOwnPropertyDescriptor(_class2.prototype, "navigateToRoute"), _class2.prototype)), _class2)) || _class);
|
|
125
127
|
return Routing;
|
|
126
128
|
}, false);
|
|
127
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSb3V0aW5nIiwiZGVmaW5lVUk1Q2xhc3MiLCJwdWJsaWNFeHRlbnNpb24iLCJleHRlbnNpYmxlIiwiT3ZlcnJpZGVFeGVjdXRpb24iLCJBZnRlciIsImZpbmFsRXh0ZW5zaW9uIiwiaG9va2FibGUiLCJvbkJlZm9yZU5hdmlnYXRpb24iLCJtTmF2aWdhdGlvblBhcmFtZXRlcnMiLCJuYXZpZ2F0ZSIsIm9Db250ZXh0IiwiaW50ZXJuYWxNb2RlbCIsImJhc2UiLCJnZXRNb2RlbCIsInNldFByb3BlcnR5IiwiX3JvdXRpbmciLCJuYXZpZ2F0ZVRvQ29udGV4dCIsIm9uQmVmb3JlQmluZGluZyIsIm9uQWZ0ZXJCaW5kaW5nIiwibmF2aWdhdGVUb1JvdXRlIiwic1RhcmdldFJvdXRlTmFtZSIsIm9QYXJhbWV0ZXJzIiwib01ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsImJJc1N0aWNreU1vZGUiLCJNb2RlbEhlbHBlciIsImlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsIkNvbnRyb2xsZXJFeHRlbnNpb24iXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlJvdXRpbmcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXh0ZW5zaWJsZSwgZmluYWxFeHRlbnNpb24sIHB1YmxpY0V4dGVuc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgQ29udHJvbGxlckV4dGVuc2lvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJFeHRlbnNpb25cIjtcbmltcG9ydCBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgdHlwZSBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB7IGhvb2thYmxlIH0gZnJvbSBcIi4vSG9va1N1cHBvcnRcIjtcblxuLyoqXG4gKiBBIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIG9mZmVyaW5nIGhvb2tzIGludG8gdGhlIHJvdXRpbmcgZmxvdyBvZiB0aGUgYXBwbGljYXRpb25cbiAqXG4gKiBAaGlkZWNvbnN0cnVjdG9yXG4gKiBAcHVibGljXG4gKiBAc2luY2UgMS44Ni4wXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLlJvdXRpbmdcIilcbmNsYXNzIFJvdXRpbmcgZXh0ZW5kcyBDb250cm9sbGVyRXh0ZW5zaW9uIHtcblx0cHJpdmF0ZSBiYXNlITogUGFnZUNvbnRyb2xsZXI7XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gaW50ZXJjZXB0IHRoZSByb3V0aW5nIGV2ZW50IGhhcHBlbmluZyBkdXJpbmcgdGhlIG5vcm1hbCBwcm9jZXNzIG9mIG5hdmlnYXRpbmcgZnJvbSBvbmUgcGFnZSB0byBhbm90aGVyIChsaWtlIGNsaWNraW5nIG9uIHRoZSB0YWJsZSByb3cgdG8gbmF2aWdhdGUsIG9yIHdoZW4gcGFnaW5hdGlvbiBidXR0b25zIGFyZSBjbGlja2VkKS5cblx0ICpcblx0ICogVGhlIGZ1bmN0aW9uIGlzIE5PVCBjYWxsZWQgZHVyaW5nIG90aGVyIG1lYW5zIG9mIGV4dGVybmFsIG91dGJvdW5kIG5hdmlnYXRpb24gKGxpa2UgYSBuYXZpZ2F0aW9uIGNvbmZpZ3VyZWQgdmlhIGEgbGluaywgb3IgYnkgdXNpbmcgbmF2aWdhdGlvbiBidXR0b25zKS5cblx0ICpcblx0ICogSWYgZGVjbGFyZWQgYXMgYW4gZXh0ZW5zaW9uLCBpdCBhbGxvd3MgeW91IHRvIGludGVyY2VwdCBhbmQgY2hhbmdlIHRoZSBub3JtYWwgbmF2aWdhdGlvbiBmbG93LlxuXHQgKiBJZiB5b3UgZGVjaWRlIHRvIGRvIHlvdXIgb3duIG5hdmlnYXRpb24gcHJvY2Vzc2luZywgeW91IGNhbiByZXR1cm4gYHRydWVgIHRvIHByZXZlbnQgdGhlIGRlZmF1bHQgcm91dGluZyBiZWhhdmlvci5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBpbmRpdmlkdWFsbHkgb3ZlcnJpZGRlbiBieSBjb25zdW1pbmcgY29udHJvbGxlcnMsIGJ1dCBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyfS5cblx0ICpcblx0ICogQHBhcmFtIG1OYXZpZ2F0aW9uUGFyYW1ldGVycyBPYmplY3QgY29udGFpbmluZyByb3cgY29udGV4dCBhbmQgcGFnZSBjb250ZXh0XG5cdCAqIEBwYXJhbSBtTmF2aWdhdGlvblBhcmFtZXRlcnMuYmluZGluZ0NvbnRleHQgVGhlIGN1cnJlbnRseSBzZWxlY3RlZCBjb250ZXh0XG5cdCAqIEByZXR1cm5zIGB0cnVlYCB0byBwcmV2ZW50IHRoZSBkZWZhdWx0IGV4ZWN1dGlvbiwgZmFsc2UgdG8ga2VlcCB0aGUgc3RhbmRhcmQgYmVoYXZpb3Jcblx0ICogQHB1YmxpY1xuXHQgKiBAc2luY2UgMS44Ni4wXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0b25CZWZvcmVOYXZpZ2F0aW9uKG1OYXZpZ2F0aW9uUGFyYW1ldGVyczogeyBiaW5kaW5nQ29udGV4dDogQ29udGV4dCB9KTogYm9vbGVhbiB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGVuIGJ5IHRoZSBhcHBsaWNhdGlvblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBbGxvd3MgbmF2aWdhdGlvbiB0byBhIHNwZWNpZmljIGNvbnRleHQuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBPYmplY3QgY29udGFpbmluZyB0aGUgY29udGV4dCB0byBiZSBuYXZpZ2F0ZWQgdG9cblx0ICogQHB1YmxpY1xuXHQgKiBAc2luY2UgMS45MC4wXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0bmF2aWdhdGUob0NvbnRleHQ6IENvbnRleHQpOiB2b2lkIHtcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsID0gdGhpcy5iYXNlLmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsO1xuXHRcdC8vIFdlIGhhdmUgdG8gZGVsZXRlIHRoZSBpbnRlcm5hbCBtb2RlbCB2YWx1ZSBmb3IgXCJwYWdpbmF0b3JDdXJyZW50Q29udGV4dFwiIHRvIGVuc3VyZSBpdCBpcyByZS1ldmFsdWF0ZWQgYnkgdGhlIG5hdmlnYXRlVG9Db250ZXh0IGZ1bmN0aW9uXG5cdFx0Ly8gQkNQOiAyMjcwMTIzODIwXG5cdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9wYWdpbmF0b3JDdXJyZW50Q29udGV4dFwiLCBudWxsKTtcblx0XHR0aGlzLmJhc2UuX3JvdXRpbmcubmF2aWdhdGVUb0NvbnRleHQob0NvbnRleHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBpbnRlcmNlcHQgdGhlIHJvdXRpbmcgZXZlbnQgYmVmb3JlIGJpbmRpbmcgYSBwYWdlLlxuXHQgKlxuXHQgKiBJZiBpdCBpcyBkZWNsYXJlZCBhcyBhbiBleHRlbnNpb24sIGl0IGFsbG93cyB5b3UgdG8gaW50ZXJjZXB0IGFuZCBjaGFuZ2UgdGhlIG5vcm1hbCBmbG93IG9mIGJpbmRpbmcuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgbm90IGNhbGxlZCBkaXJlY3RseSwgYnV0IG92ZXJyaWRkZW4gc2VwYXJhdGVseSBieSBjb25zdW1pbmcgY29udHJvbGxlcnMuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKlxuXHQgKiBAcGFyYW0gb0NvbnRleHQgT2JqZWN0IGNvbnRhaW5pbmcgdGhlIGNvbnRleHQgZm9yIHRoZSBuYXZpZ2F0aW9uXG5cdCAqIEBwdWJsaWNcblx0ICogQHNpbmNlIDEuOTAuMFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdG9uQmVmb3JlQmluZGluZyhvQ29udGV4dDogb2JqZWN0IHwgbnVsbCk6IHZvaWQge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRlbiBieSB0aGUgYXBwbGljYXRpb25cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gaW50ZXJjZXB0IHRoZSByb3V0aW5nIGV2ZW50IGFmdGVyIGJpbmRpbmcgYSBwYWdlLlxuXHQgKlxuXHQgKiBJZiBpdCBpcyBkZWNsYXJlZCBhcyBhbiBleHRlbnNpb24sIGl0IGFsbG93cyB5b3UgdG8gaW50ZXJjZXB0IGFuZCBjaGFuZ2UgdGhlIG5vcm1hbCBmbG93IG9mIGJpbmRpbmcuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgbm90IGNhbGxlZCBkaXJlY3RseSwgYnV0IG92ZXJyaWRkZW4gc2VwYXJhdGVseSBieSBjb25zdW1pbmcgY29udHJvbGxlcnMuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKlxuXHQgKiBAcGFyYW0gb0NvbnRleHQgT2JqZWN0IGNvbnRhaW5pbmcgdGhlIGNvbnRleHQgdG8gYmUgbmF2aWdhdGVkXG5cdCAqIEBwdWJsaWNcblx0ICogQHNpbmNlIDEuOTAuMFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRAaG9va2FibGUoXCJhZnRlclwiKVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdG9uQWZ0ZXJCaW5kaW5nKG9Db250ZXh0OiBvYmplY3QgfCBudWxsKTogdm9pZCB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGVuIGJ5IHRoZSBhcHBsaWNhdGlvblxuXHR9XG5cblx0LyoqXG5cdCAqIE5hdmlnYXRlIHRvIGFub3RoZXIgdGFyZ2V0LlxuXHQgKlxuXHQgKiBAcGFyYW0gc1RhcmdldFJvdXRlTmFtZSBOYW1lIG9mIHRoZSB0YXJnZXQgcm91dGVcblx0ICogQHBhcmFtIG9QYXJhbWV0ZXJzIFBhcmFtZXRlcnMgdG8gYmUgdXNlZCB3aXRoIHJvdXRlIHRvIGNyZWF0ZSB0aGUgdGFyZ2V0IGhhc2hcblx0ICogQHBhcmFtIG9QYXJhbWV0ZXJzLmJJc1N0aWNreU1vZGUgUFJJVkFURVxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgd2hlbiB0aGUgbmF2aWdhdGlvbiBpcyBmaW5hbGl6ZWRcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFzeW5jIG5hdmlnYXRlVG9Sb3V0ZShzVGFyZ2V0Um91dGVOYW1lOiBzdHJpbmcsIG9QYXJhbWV0ZXJzPzogeyBiSXNTdGlja3lNb2RlPzogYm9vbGVhbiB9KTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IHRoaXMuYmFzZS5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IGJJc1N0aWNreU1vZGUgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQob01ldGFNb2RlbCk7XG5cdFx0aWYgKCFvUGFyYW1ldGVycykge1xuXHRcdFx0b1BhcmFtZXRlcnMgPSB7fTtcblx0XHR9XG5cdFx0b1BhcmFtZXRlcnMuYklzU3RpY2t5TW9kZSA9IGJJc1N0aWNreU1vZGU7XG5cdFx0cmV0dXJuIHRoaXMuYmFzZS5fcm91dGluZy5uYXZpZ2F0ZVRvUm91dGUoc1RhcmdldFJvdXRlTmFtZSwgb1BhcmFtZXRlcnMpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJvdXRpbmc7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7RUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQU5BLElBUU1BLE9BQU8sV0FEWkMsY0FBYyxDQUFDLDBDQUEwQyxDQUFDLFVBcUJ6REMsZUFBZSxFQUFFLFVBQ2pCQyxVQUFVLENBQUNDLGlCQUFpQixDQUFDQyxLQUFLLENBQUMsVUFjbkNILGVBQWUsRUFBRSxVQUNqQkksY0FBYyxFQUFFLFVBcUJoQkosZUFBZSxFQUFFLFVBQ2pCQyxVQUFVLENBQUNDLGlCQUFpQixDQUFDQyxLQUFLLENBQUMsVUFrQm5DSCxlQUFlLEVBQUUsVUFDakJDLFVBQVUsQ0FBQ0MsaUJBQWlCLENBQUNDLEtBQUssQ0FBQyxXQUNuQ0UsUUFBUSxDQUFDLE9BQU8sQ0FBQyxXQWVqQkwsZUFBZSxFQUFFLFdBQ2pCSSxjQUFjLEVBQUU7SUFBQTtJQUFBO01BQUE7SUFBQTtJQUFBO0lBM0ZqQjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBaEJDO0lBbUJBO0lBQ0FFLGtCQUFrQixHQUhsQiw0QkFHbUJDLHFCQUFrRCxFQUFXO01BQy9FO01BQ0EsT0FBTyxLQUFLO0lBQ2I7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FOQztJQUFBLE9BU0FDLFFBQVEsR0FGUixrQkFFU0MsUUFBaUIsRUFBUTtNQUNqQyxNQUFNQyxhQUFhLEdBQUcsSUFBSSxDQUFDQyxJQUFJLENBQUNDLFFBQVEsQ0FBQyxVQUFVLENBQWM7TUFDakU7TUFDQTtNQUNBRixhQUFhLENBQUNHLFdBQVcsQ0FBQywwQkFBMEIsRUFBRSxJQUFJLENBQUM7TUFDM0QsSUFBSSxDQUFDRixJQUFJLENBQUNHLFFBQVEsQ0FBQ0MsaUJBQWlCLENBQUNOLFFBQVEsQ0FBQztJQUMvQzs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FYQztJQUFBO0lBY0E7SUFDQU8sZUFBZSxHQUhmLHlCQUdnQlAsUUFBdUIsRUFBUTtNQUM5QztJQUFBOztJQUdEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQVhDO0lBQUE7SUFlQTtJQUNBUSxjQUFjLEdBSmQsd0JBSWVSLFFBQXVCLEVBQVE7TUFDN0M7SUFBQTs7SUFHRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FSQztJQUFBLE9BV01TLGVBQWUsR0FGckIsK0JBRXNCQyxnQkFBd0IsRUFBRUMsV0FBeUMsRUFBb0I7TUFDNUcsTUFBTUMsVUFBVSxHQUFHLElBQUksQ0FBQ1YsSUFBSSxDQUFDQyxRQUFRLEVBQUUsQ0FBQ1UsWUFBWSxFQUFFO01BQ3RELE1BQU1DLGFBQWEsR0FBR0MsV0FBVyxDQUFDQyx3QkFBd0IsQ0FBQ0osVUFBVSxDQUFDO01BQ3RFLElBQUksQ0FBQ0QsV0FBVyxFQUFFO1FBQ2pCQSxXQUFXLEdBQUcsQ0FBQyxDQUFDO01BQ2pCO01BQ0FBLFdBQVcsQ0FBQ0csYUFBYSxHQUFHQSxhQUFhO01BQ3pDLE9BQU8sSUFBSSxDQUFDWixJQUFJLENBQUNHLFFBQVEsQ0FBQ0ksZUFBZSxDQUFDQyxnQkFBZ0IsRUFBRUMsV0FBVyxDQUFDO0lBQ3pFLENBQUM7SUFBQTtFQUFBLEVBdkdvQk0sbUJBQW1CO0VBQUEsT0EwRzFCNUIsT0FBTztBQUFBIn0=
|
|
129
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSb3V0aW5nIiwiZGVmaW5lVUk1Q2xhc3MiLCJwdWJsaWNFeHRlbnNpb24iLCJleHRlbnNpYmxlIiwiT3ZlcnJpZGVFeGVjdXRpb24iLCJBZnRlciIsImZpbmFsRXh0ZW5zaW9uIiwiaG9va2FibGUiLCJvbkJlZm9yZU5hdmlnYXRpb24iLCJtTmF2aWdhdGlvblBhcmFtZXRlcnMiLCJuYXZpZ2F0ZSIsIm9Db250ZXh0IiwicGFyYW1ldGVycyIsImludGVybmFsTW9kZWwiLCJiYXNlIiwiZ2V0TW9kZWwiLCJzZXRQcm9wZXJ0eSIsIl9yb3V0aW5nIiwibmF2aWdhdGVUb0NvbnRleHQiLCJvbkJlZm9yZUJpbmRpbmciLCJvbkFmdGVyQmluZGluZyIsIm5hdmlnYXRlVG9Sb3V0ZSIsInNUYXJnZXRSb3V0ZU5hbWUiLCJvUGFyYW1ldGVycyIsIm9NZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJiSXNTdGlja3lNb2RlIiwiTW9kZWxIZWxwZXIiLCJpc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJDb250cm9sbGVyRXh0ZW5zaW9uIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJSb3V0aW5nLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIGV4dGVuc2libGUsIGZpbmFsRXh0ZW5zaW9uLCBwdWJsaWNFeHRlbnNpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IENvbnRyb2xsZXJFeHRlbnNpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyRXh0ZW5zaW9uXCI7XG5pbXBvcnQgT3ZlcnJpZGVFeGVjdXRpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9PdmVycmlkZUV4ZWN1dGlvblwiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgeyBob29rYWJsZSB9IGZyb20gXCIuL0hvb2tTdXBwb3J0XCI7XG5cbi8qKlxuICogQSBjb250cm9sbGVyIGV4dGVuc2lvbiBvZmZlcmluZyBob29rcyBpbnRvIHRoZSByb3V0aW5nIGZsb3cgb2YgdGhlIGFwcGxpY2F0aW9uXG4gKlxuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQHB1YmxpY1xuICogQHNpbmNlIDEuODYuMFxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5Sb3V0aW5nXCIpXG5jbGFzcyBSb3V0aW5nIGV4dGVuZHMgQ29udHJvbGxlckV4dGVuc2lvbiB7XG5cdHByaXZhdGUgYmFzZSE6IFBhZ2VDb250cm9sbGVyO1xuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGludGVyY2VwdCB0aGUgcm91dGluZyBldmVudCBoYXBwZW5pbmcgZHVyaW5nIHRoZSBub3JtYWwgcHJvY2VzcyBvZiBuYXZpZ2F0aW5nIGZyb20gb25lIHBhZ2UgdG8gYW5vdGhlciAobGlrZSBjbGlja2luZyBvbiB0aGUgdGFibGUgcm93IHRvIG5hdmlnYXRlLCBvciB3aGVuIHBhZ2luYXRpb24gYnV0dG9ucyBhcmUgY2xpY2tlZCkuXG5cdCAqXG5cdCAqIFRoZSBmdW5jdGlvbiBpcyBOT1QgY2FsbGVkIGR1cmluZyBvdGhlciBtZWFucyBvZiBleHRlcm5hbCBvdXRib3VuZCBuYXZpZ2F0aW9uIChsaWtlIGEgbmF2aWdhdGlvbiBjb25maWd1cmVkIHZpYSBhIGxpbmssIG9yIGJ5IHVzaW5nIG5hdmlnYXRpb24gYnV0dG9ucykuXG5cdCAqXG5cdCAqIElmIGRlY2xhcmVkIGFzIGFuIGV4dGVuc2lvbiwgaXQgYWxsb3dzIHlvdSB0byBpbnRlcmNlcHQgYW5kIGNoYW5nZSB0aGUgbm9ybWFsIG5hdmlnYXRpb24gZmxvdy5cblx0ICogSWYgeW91IGRlY2lkZSB0byBkbyB5b3VyIG93biBuYXZpZ2F0aW9uIHByb2Nlc3NpbmcsIHlvdSBjYW4gcmV0dXJuIGB0cnVlYCB0byBwcmV2ZW50IHRoZSBkZWZhdWx0IHJvdXRpbmcgYmVoYXZpb3IuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLCBidXQgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5BZnRlcn0uXG5cdCAqXG5cdCAqIEBwYXJhbSBtTmF2aWdhdGlvblBhcmFtZXRlcnMgT2JqZWN0IGNvbnRhaW5pbmcgcm93IGNvbnRleHQgYW5kIHBhZ2UgY29udGV4dFxuXHQgKiBAcGFyYW0gbU5hdmlnYXRpb25QYXJhbWV0ZXJzLmJpbmRpbmdDb250ZXh0IFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgY29udGV4dFxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgdG8gcHJldmVudCB0aGUgZGVmYXVsdCBleGVjdXRpb24sIGZhbHNlIHRvIGtlZXAgdGhlIHN0YW5kYXJkIGJlaGF2aW9yXG5cdCAqIEBwdWJsaWNcblx0ICogQHNpbmNlIDEuODYuMFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdG9uQmVmb3JlTmF2aWdhdGlvbihtTmF2aWdhdGlvblBhcmFtZXRlcnM6IHsgYmluZGluZ0NvbnRleHQ6IENvbnRleHQgfSk6IGJvb2xlYW4ge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRlbiBieSB0aGUgYXBwbGljYXRpb25cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogQWxsb3dzIG5hdmlnYXRpb24gdG8gYSBzcGVjaWZpYyBjb250ZXh0LlxuXHQgKlxuXHQgKiBAcGFyYW0gb0NvbnRleHQgT2JqZWN0IGNvbnRhaW5pbmcgdGhlIGNvbnRleHQgdG8gYmUgbmF2aWdhdGVkIHRvXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzIE9iamVjdCBjb250YWluaW5nIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgbmF2aWdhdGlvblxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5wcmVzZXJ2ZUhpc3RvcnkgIEJ5IGRlZmF1bHQsIHRoZSBpbnRlcm5hbCBhbGdvcml0aG0gZGVjaWRlcyB3aGV0aGVyIHRoZSBuYXZpZ2F0aW9uIHByZXNlcnZlcyB0aGUgcHJldmlvdXMgZW50cnkuIFByZXNlcnZlSGlzdG9yeSBhbGxvd3MgeW91IHRvIG92ZXJyaWRlIHRoaXMgYmVoYXZpb3IuXG5cdCAqIEBwdWJsaWNcblx0ICogQHNpbmNlIDEuOTAuMFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdG5hdmlnYXRlKG9Db250ZXh0OiBDb250ZXh0LCBwYXJhbWV0ZXJzPzogeyBwcmVzZXJ2ZUhpc3Rvcnk6IGJvb2xlYW4gfSk6IHZvaWQge1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB0aGlzLmJhc2UuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cdFx0Ly8gV2UgaGF2ZSB0byBkZWxldGUgdGhlIGludGVybmFsIG1vZGVsIHZhbHVlIGZvciBcInBhZ2luYXRvckN1cnJlbnRDb250ZXh0XCIgdG8gZW5zdXJlIGl0IGlzIHJlLWV2YWx1YXRlZCBieSB0aGUgbmF2aWdhdGVUb0NvbnRleHQgZnVuY3Rpb25cblx0XHQvLyBCQ1A6IDIyNzAxMjM4MjBcblx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL3BhZ2luYXRvckN1cnJlbnRDb250ZXh0XCIsIG51bGwpO1xuXHRcdHRoaXMuYmFzZS5fcm91dGluZy5uYXZpZ2F0ZVRvQ29udGV4dChvQ29udGV4dCwgcGFyYW1ldGVycyk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGludGVyY2VwdCB0aGUgcm91dGluZyBldmVudCBiZWZvcmUgYmluZGluZyBhIHBhZ2UuXG5cdCAqXG5cdCAqIElmIGl0IGlzIGRlY2xhcmVkIGFzIGFuIGV4dGVuc2lvbiwgaXQgYWxsb3dzIHlvdSB0byBpbnRlcmNlcHQgYW5kIGNoYW5nZSB0aGUgbm9ybWFsIGZsb3cgb2YgYmluZGluZy5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBub3QgY2FsbGVkIGRpcmVjdGx5LCBidXQgb3ZlcnJpZGRlbiBzZXBhcmF0ZWx5IGJ5IGNvbnN1bWluZyBjb250cm9sbGVycy5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5BZnRlcn0uXG5cdCAqXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBPYmplY3QgY29udGFpbmluZyB0aGUgY29udGV4dCBmb3IgdGhlIG5hdmlnYXRpb25cblx0ICogQHB1YmxpY1xuXHQgKiBAc2luY2UgMS45MC4wXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0b25CZWZvcmVCaW5kaW5nKG9Db250ZXh0OiBvYmplY3QgfCBudWxsKTogdm9pZCB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGVuIGJ5IHRoZSBhcHBsaWNhdGlvblxuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBpbnRlcmNlcHQgdGhlIHJvdXRpbmcgZXZlbnQgYWZ0ZXIgYmluZGluZyBhIHBhZ2UuXG5cdCAqXG5cdCAqIElmIGl0IGlzIGRlY2xhcmVkIGFzIGFuIGV4dGVuc2lvbiwgaXQgYWxsb3dzIHlvdSB0byBpbnRlcmNlcHQgYW5kIGNoYW5nZSB0aGUgbm9ybWFsIGZsb3cgb2YgYmluZGluZy5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBub3QgY2FsbGVkIGRpcmVjdGx5LCBidXQgb3ZlcnJpZGRlbiBzZXBhcmF0ZWx5IGJ5IGNvbnN1bWluZyBjb250cm9sbGVycy5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5BZnRlcn0uXG5cdCAqXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBPYmplY3QgY29udGFpbmluZyB0aGUgY29udGV4dCB0byBiZSBuYXZpZ2F0ZWRcblx0ICogQHB1YmxpY1xuXHQgKiBAc2luY2UgMS45MC4wXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdEBob29rYWJsZShcImFmdGVyXCIpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0b25BZnRlckJpbmRpbmcob0NvbnRleHQ6IG9iamVjdCB8IG51bGwpOiB2b2lkIHtcblx0XHQvLyB0byBiZSBvdmVycmlkZW4gYnkgdGhlIGFwcGxpY2F0aW9uXG5cdH1cblxuXHQvKipcblx0ICogTmF2aWdhdGUgdG8gYW5vdGhlciB0YXJnZXQuXG5cdCAqXG5cdCAqIEBwYXJhbSBzVGFyZ2V0Um91dGVOYW1lIE5hbWUgb2YgdGhlIHRhcmdldCByb3V0ZVxuXHQgKiBAcGFyYW0gb1BhcmFtZXRlcnMgUGFyYW1ldGVycyB0byBiZSB1c2VkIHdpdGggcm91dGUgdG8gY3JlYXRlIHRoZSB0YXJnZXQgaGFzaFxuXHQgKiBAcGFyYW0gb1BhcmFtZXRlcnMuYklzU3RpY2t5TW9kZSBQUklWQVRFXG5cdCAqIEByZXR1cm5zIFByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB3aGVuIHRoZSBuYXZpZ2F0aW9uIGlzIGZpbmFsaXplZFxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0YXN5bmMgbmF2aWdhdGVUb1JvdXRlKHNUYXJnZXRSb3V0ZU5hbWU6IHN0cmluZywgb1BhcmFtZXRlcnM/OiB7IGJJc1N0aWNreU1vZGU/OiBib29sZWFuIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gdGhpcy5iYXNlLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgYklzU3RpY2t5TW9kZSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChvTWV0YU1vZGVsKTtcblx0XHRpZiAoIW9QYXJhbWV0ZXJzKSB7XG5cdFx0XHRvUGFyYW1ldGVycyA9IHt9O1xuXHRcdH1cblx0XHRvUGFyYW1ldGVycy5iSXNTdGlja3lNb2RlID0gYklzU3RpY2t5TW9kZTtcblx0XHRyZXR1cm4gdGhpcy5iYXNlLl9yb3V0aW5nLm5hdmlnYXRlVG9Sb3V0ZShzVGFyZ2V0Um91dGVOYW1lLCBvUGFyYW1ldGVycyk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUm91dGluZztcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7OztFQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTkEsSUFRTUEsT0FBTyxXQURaQyxjQUFjLENBQUMsMENBQTBDLENBQUMsVUFxQnpEQyxlQUFlLEVBQUUsVUFDakJDLFVBQVUsQ0FBQ0MsaUJBQWlCLENBQUNDLEtBQUssQ0FBQyxVQWdCbkNILGVBQWUsRUFBRSxVQUNqQkksY0FBYyxFQUFFLFVBcUJoQkosZUFBZSxFQUFFLFVBQ2pCQyxVQUFVLENBQUNDLGlCQUFpQixDQUFDQyxLQUFLLENBQUMsVUFrQm5DSCxlQUFlLEVBQUUsVUFDakJDLFVBQVUsQ0FBQ0MsaUJBQWlCLENBQUNDLEtBQUssQ0FBQyxXQUNuQ0UsUUFBUSxDQUFDLE9BQU8sQ0FBQyxXQWVqQkwsZUFBZSxFQUFFLFdBQ2pCSSxjQUFjLEVBQUU7SUFBQTtJQUFBO01BQUE7SUFBQTtJQUFBO0lBN0ZqQjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBaEJDO0lBbUJBO0lBQ0FFLGtCQUFrQixHQUhsQiw0QkFHbUJDLHFCQUFrRCxFQUFXO01BQy9FO01BQ0EsT0FBTyxLQUFLO0lBQ2I7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BUkM7SUFBQSxPQVdBQyxRQUFRLEdBRlIsa0JBRVNDLFFBQWlCLEVBQUVDLFVBQXlDLEVBQVE7TUFDNUUsTUFBTUMsYUFBYSxHQUFHLElBQUksQ0FBQ0MsSUFBSSxDQUFDQyxRQUFRLENBQUMsVUFBVSxDQUFjO01BQ2pFO01BQ0E7TUFDQUYsYUFBYSxDQUFDRyxXQUFXLENBQUMsMEJBQTBCLEVBQUUsSUFBSSxDQUFDO01BQzNELElBQUksQ0FBQ0YsSUFBSSxDQUFDRyxRQUFRLENBQUNDLGlCQUFpQixDQUFDUCxRQUFRLEVBQUVDLFVBQVUsQ0FBQztJQUMzRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FYQztJQUFBO0lBY0E7SUFDQU8sZUFBZSxHQUhmLHlCQUdnQlIsUUFBdUIsRUFBUTtNQUM5QztJQUFBOztJQUdEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQVhDO0lBQUE7SUFlQTtJQUNBUyxjQUFjLEdBSmQsd0JBSWVULFFBQXVCLEVBQVE7TUFDN0M7SUFBQTs7SUFHRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FSQztJQUFBLE9BV01VLGVBQWUsR0FGckIsK0JBRXNCQyxnQkFBd0IsRUFBRUMsV0FBeUMsRUFBb0I7TUFDNUcsTUFBTUMsVUFBVSxHQUFHLElBQUksQ0FBQ1YsSUFBSSxDQUFDQyxRQUFRLEVBQUUsQ0FBQ1UsWUFBWSxFQUFFO01BQ3RELE1BQU1DLGFBQWEsR0FBR0MsV0FBVyxDQUFDQyx3QkFBd0IsQ0FBQ0osVUFBVSxDQUFDO01BQ3RFLElBQUksQ0FBQ0QsV0FBVyxFQUFFO1FBQ2pCQSxXQUFXLEdBQUcsQ0FBQyxDQUFDO01BQ2pCO01BQ0FBLFdBQVcsQ0FBQ0csYUFBYSxHQUFHQSxhQUFhO01BQ3pDLE9BQU8sSUFBSSxDQUFDWixJQUFJLENBQUNHLFFBQVEsQ0FBQ0ksZUFBZSxDQUFDQyxnQkFBZ0IsRUFBRUMsV0FBVyxDQUFDO0lBQ3pFLENBQUM7SUFBQTtFQUFBLEVBekdvQk0sbUJBQW1CO0VBQUEsT0E0RzFCN0IsT0FBTztBQUFBIn0=
|
|
@@ -47,17 +47,19 @@ class Routing extends ControllerExtension {
|
|
|
47
47
|
* Allows navigation to a specific context.
|
|
48
48
|
*
|
|
49
49
|
* @param oContext Object containing the context to be navigated to
|
|
50
|
+
* @param parameters Object containing the parameters for the navigation
|
|
51
|
+
* @param parameters.preserveHistory By default, the internal algorithm decides whether the navigation preserves the previous entry. PreserveHistory allows you to override this behavior.
|
|
50
52
|
* @public
|
|
51
53
|
* @since 1.90.0
|
|
52
54
|
*/
|
|
53
55
|
@publicExtension()
|
|
54
56
|
@finalExtension()
|
|
55
|
-
navigate(oContext: Context): void {
|
|
57
|
+
navigate(oContext: Context, parameters?: { preserveHistory: boolean }): void {
|
|
56
58
|
const internalModel = this.base.getModel("internal") as JSONModel;
|
|
57
59
|
// We have to delete the internal model value for "paginatorCurrentContext" to ensure it is re-evaluated by the navigateToContext function
|
|
58
60
|
// BCP: 2270123820
|
|
59
61
|
internalModel.setProperty("/paginatorCurrentContext", null);
|
|
60
|
-
this.base._routing.navigateToContext(oContext);
|
|
62
|
+
this.base._routing.navigateToContext(oContext, parameters);
|
|
61
63
|
}
|
|
62
64
|
|
|
63
65
|
/**
|
|
@@ -730,4 +730,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/ResourceModelHelper", "sap/m
|
|
|
730
730
|
}(ControllerExtension), (_applyDecoratedDescriptor(_class2.prototype, "onInit", [_dec2], Object.getOwnPropertyDescriptor(_class2.prototype, "onInit"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "addControlSideEffects", [_dec3, _dec4], Object.getOwnPropertyDescriptor(_class2.prototype, "addControlSideEffects"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "removeControlSideEffects", [_dec5, _dec6], Object.getOwnPropertyDescriptor(_class2.prototype, "removeControlSideEffects"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getContextForSideEffects", [_dec7, _dec8], Object.getOwnPropertyDescriptor(_class2.prototype, "getContextForSideEffects"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getFieldSideEffectsMap", [_dec9, _dec10], Object.getOwnPropertyDescriptor(_class2.prototype, "getFieldSideEffectsMap"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getSideEffectsMapForFieldGroups", [_dec11, _dec12], Object.getOwnPropertyDescriptor(_class2.prototype, "getSideEffectsMapForFieldGroups"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "clearFieldGroupsValidity", [_dec13, _dec14], Object.getOwnPropertyDescriptor(_class2.prototype, "clearFieldGroupsValidity"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "isFieldGroupValid", [_dec15, _dec16], Object.getOwnPropertyDescriptor(_class2.prototype, "isFieldGroupValid"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getTargetProperty", [_dec17, _dec18], Object.getOwnPropertyDescriptor(_class2.prototype, "getTargetProperty"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "prepareDeferredSideEffectsForField", [_dec19, _dec20], Object.getOwnPropertyDescriptor(_class2.prototype, "prepareDeferredSideEffectsForField"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "handleFieldChange", [_dec21, _dec22], Object.getOwnPropertyDescriptor(_class2.prototype, "handleFieldChange"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "handleFieldGroupChange", [_dec23, _dec24], Object.getOwnPropertyDescriptor(_class2.prototype, "handleFieldGroupChange"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "requestSideEffects", [_dec25, _dec26], Object.getOwnPropertyDescriptor(_class2.prototype, "requestSideEffects"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "requestSideEffectsForEvent", [_dec27, _dec28], Object.getOwnPropertyDescriptor(_class2.prototype, "requestSideEffectsForEvent"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getDataRefreshText", [_dec29, _dec30], Object.getOwnPropertyDescriptor(_class2.prototype, "getDataRefreshText"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getRegisteredFailedRequests", [_dec31, _dec32], Object.getOwnPropertyDescriptor(_class2.prototype, "getRegisteredFailedRequests"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "registerFailedSideEffects", [_dec33, _dec34], Object.getOwnPropertyDescriptor(_class2.prototype, "registerFailedSideEffects"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "unregisterFailedSideEffectsForAContext", [_dec35, _dec36], Object.getOwnPropertyDescriptor(_class2.prototype, "unregisterFailedSideEffectsForAContext"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "unregisterFailedSideEffects", [_dec37, _dec38], Object.getOwnPropertyDescriptor(_class2.prototype, "unregisterFailedSideEffects"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "registerFieldGroupSideEffects", [_dec39, _dec40], Object.getOwnPropertyDescriptor(_class2.prototype, "registerFieldGroupSideEffects"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "unregisterFieldGroupSideEffects", [_dec41, _dec42], Object.getOwnPropertyDescriptor(_class2.prototype, "unregisterFieldGroupSideEffects"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getRegisteredSideEffectsForFieldGroup", [_dec43, _dec44], Object.getOwnPropertyDescriptor(_class2.prototype, "getRegisteredSideEffectsForFieldGroup"), _class2.prototype)), _class2)) || _class);
|
|
731
731
|
return SideEffectsControllerExtension;
|
|
732
732
|
}, false);
|
|
733
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJTU1FRElBVEVfUkVRVUVTVCIsIlNpZGVFZmZlY3RzQ29udHJvbGxlckV4dGVuc2lvbiIsImRlZmluZVVJNUNsYXNzIiwibWV0aG9kT3ZlcnJpZGUiLCJwdWJsaWNFeHRlbnNpb24iLCJmaW5hbEV4dGVuc2lvbiIsImV4dGVuc2libGUiLCJPdmVycmlkZUV4ZWN1dGlvbiIsIkluc3RlYWQiLCJwcml2YXRlRXh0ZW5zaW9uIiwib25Jbml0IiwiX3ZpZXciLCJiYXNlIiwiZ2V0VmlldyIsIl9zaWRlRWZmZWN0c1NlcnZpY2UiLCJDb21tb25VdGlscyIsImdldEFwcENvbXBvbmVudCIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsIl9yZWdpc3RlcmVkRmllbGRHcm91cE1hcCIsIl9maWVsZEdyb3VwSW52YWxpZGl0eSIsIl9yZWdpc3RlcmVkRmFpbGVkU2lkZUVmZmVjdHMiLCJhZGRDb250cm9sU2lkZUVmZmVjdHMiLCJlbnRpdHlUeXBlIiwiY29udHJvbFNpZGVFZmZlY3RzIiwicmVtb3ZlQ29udHJvbFNpZGVFZmZlY3RzIiwiY29udHJvbCIsImNvbnRyb2xJZCIsImlzQSIsImdldElkIiwiZ2V0Q29udGV4dEZvclNpZGVFZmZlY3RzIiwiYmluZGluZ0NvbnRleHQiLCJzaWRlRWZmZWN0RW50aXR5VHlwZSIsImNvbnRleHRGb3JTaWRlRWZmZWN0cyIsImdldEVudGl0eVR5cGVGcm9tQ29udGV4dCIsImdldEJpbmRpbmciLCJnZXRDb250ZXh0IiwidW5kZWZpbmVkIiwiZ2V0RmllbGRTaWRlRWZmZWN0c01hcCIsImZpZWxkIiwic2lkZUVmZmVjdHNNYXAiLCJmaWVsZEdyb3VwSWRzIiwiZ2V0RmllbGRHcm91cElkcyIsInZpZXdFbnRpdHlTZXRTZXROYW1lIiwiZ2V0Vmlld0RhdGEiLCJlbnRpdHlTZXQiLCJ2aWV3RW50aXR5U2V0IiwiZ2V0Q29udmVydGVkTWV0YU1vZGVsIiwiZW50aXR5U2V0cyIsImZpbmQiLCJuYW1lIiwiZ2V0U2lkZUVmZmVjdHNNYXBGb3JGaWVsZEdyb3VwcyIsImdldEJpbmRpbmdDb250ZXh0Iiwidmlld0VudGl0eVR5cGUiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJmaWVsZFBhdGgiLCJnZXRUYXJnZXRQcm9wZXJ0eSIsImNvbnRleHQiLCJjb250cm9sU2lkZUVmZmVjdHNFbnRpdHlUeXBlIiwiZ2V0Q29udHJvbEVudGl0eVNpZGVFZmZlY3RzIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJzaWRlRWZmZWN0c05hbWUiLCJvQ29udHJvbFNpZGVFZmZlY3RzIiwic291cmNlUHJvcGVydGllcyIsImluY2x1ZGVzIiwiaW1tZWRpYXRlIiwic2lkZUVmZmVjdHMiLCJmaWVsZENvbnRleHQiLCJtU2lkZUVmZmVjdHNNYXAiLCJmaWVsZEdyb3VwSWQiLCJfZ2V0U2lkZUVmZmVjdHNQcm9wZXJ0eUZvckZpZWxkR3JvdXAiLCJvQ29udGV4dCIsImNsZWFyRmllbGRHcm91cHNWYWxpZGl0eSIsImlzRmllbGRHcm91cFZhbGlkIiwiaWQiLCJfZ2V0RmllbGRHcm91cEluZGV4IiwibGVuZ3RoIiwiZGF0YSIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwidmlld0JpbmRpbmdQYXRoIiwiZ2V0UGF0aCIsInZpZXdNZXRhTW9kZWxQYXRoIiwiZ2V0TWV0YVBhdGgiLCJyZXBsYWNlIiwicHJlcGFyZURlZmVycmVkU2lkZUVmZmVjdHNGb3JGaWVsZCIsImV2ZW50IiwiZmllbGRWYWxpZGl0eSIsImZpZWxkR3JvdXBQcmVSZXF1aXNpdGUiLCJnZXRTb3VyY2UiLCJfc2F2ZUZpZWxkUHJvcGVydGllc1N0YXR1cyIsImZpbHRlciIsInNpZGVFZmZlY3RzUHJvcGVydGllcyIsInJlZ2lzdGVyRmllbGRHcm91cFNpZGVFZmZlY3RzIiwiaGFuZGxlRmllbGRDaGFuZ2UiLCJza2lwRGVmZXJyZWRSZWdpc3RyYXRpb24iLCJfbWFuYWdlU2lkZUVmZmVjdHNGcm9tRmllbGQiLCJoYW5kbGVGaWVsZEdyb3VwQ2hhbmdlIiwiZ2V0UGFyYW1ldGVyIiwiZmllbGRHcm91cHNTaWRlRWZmZWN0cyIsInJlZHVjZSIsInJlc3VsdHMiLCJjb25jYXQiLCJnZXRSZWdpc3RlcmVkU2lkZUVmZmVjdHNGb3JGaWVsZEdyb3VwIiwiUHJvbWlzZSIsImFsbCIsIm1hcCIsImZpZWxkR3JvdXBTaWRlRWZmZWN0cyIsIl9yZXF1ZXN0RmllbGRHcm91cFNpZGVFZmZlY3RzIiwiY2F0Y2giLCJlcnJvciIsImNvbnRleHRQYXRoIiwiTG9nIiwiZGVidWciLCJyZXF1ZXN0U2lkZUVmZmVjdHMiLCJncm91cElkIiwiZm5HZXRUYXJnZXRzIiwiaWdub3JlVHJpZ2dlckFjdGlvbnMiLCJmblRyaWdnZXJDYWxsYmFja3MiLCJ0cmlnZ2VyQ2FsbGJhY2tzIiwiYmluZCIsInRhcmdldHMiLCJ0cmlnZ2VyQWN0aW9uIiwidGFyZ2V0RW50aXRpZXMiLCJ0YXJnZXRQcm9wZXJ0aWVzIiwiaXNDb250cm9sU2lkZUVmZmVjdHMiLCJleGVjdXRlQWN0aW9uIiwidGhlbiIsImFzeW5jIiwidGFyZ2V0IiwiJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJyZWdpc3RlckZhaWxlZFNpZGVFZmZlY3RzIiwicmVxdWVzdFNpZGVFZmZlY3RzRm9yRXZlbnQiLCJldmVudE5hbWUiLCJwYXRoIiwiaXNEYXRhUGF0aFJlbGV2YW50IiwiX2ZpbmRSZWxldmFudENvbnRleHQiLCJfY29udGV4dElzUmVsZXZhbnQiLCJnZXRDYW5vbmljYWxQYXRoIiwiZGVwZW5kZW50QmluZGluZ3MiLCJnZXREZXBlbmRlbnRCaW5kaW5ncyIsImJpbmRpbmciLCJnZXRCb3VuZENvbnRleHQiLCJsaXN0Q29udGV4dHMiLCJnZXRBbGxDdXJyZW50Q29udGV4dHMiLCJsaXN0Q29udGV4dCIsImdldERhdGFSZWZyZXNoVGV4dCIsInJlc291cmNlTW9kZWwiLCJnZXRSZXNvdXJjZU1vZGVsIiwiZ2V0VGV4dCIsIm5vdGlmeURhdGFSZWZyZXNoIiwiTWVzc2FnZVRvYXN0Iiwic2hvdyIsImdldENvbnRyb2xsZXIiLCJfc2lkZUVmZmVjdHMiLCJjb25maXJtRGF0YVJlZnJlc2giLCJpc0NvbmZpcm1hdGlvbkRpYWxvZ09wZW4iLCJyZXNvbHZlIiwicmVqZWN0IiwidGV4dCIsImNvbmZpcm1hdGlvbkRpYWxvZyIsIkRpYWxvZyIsInRpdGxlIiwic3RhdGUiLCJjb250ZW50IiwiVGV4dCIsImJlZ2luQnV0dG9uIiwiQnV0dG9uIiwicHJlc3MiLCJjbG9zZSIsImVuZEJ1dHRvbiIsImFmdGVyQ2xvc2UiLCJkZXN0cm95IiwiYWRkU3R5bGVDbGFzcyIsIm9wZW4iLCJyZXF1ZXN0TXVsdGlwbGVTaWRlRWZmZWN0cyIsIm11bHRpU2lkZUVmZmVjdHMiLCJwcm9wZXJ0aWVzIiwiU2V0IiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJhY3Rpb25zIiwic2lkZUVmZmVjdEFjdGlvbiIsInB1c2giLCJmbnRyaWdnZXJDYWxsYmFja3MiLCJhY3Rpb24iLCJteVNldCIsInByb3BlcnR5IiwiYWRkIiwibmF2aWdhdGlvblByb3BlcnR5IiwiQXJyYXkiLCJmcm9tIiwiZ2V0UmVnaXN0ZXJlZEZhaWxlZFJlcXVlc3RzIiwiaXNOb3RBbHJlYWR5TGlzdGVkIiwiZXZlcnkiLCJtRmFpbGVkU2lkZUVmZmVjdHMiLCJ1bnJlZ2lzdGVyRmFpbGVkU2lkZUVmZmVjdHNGb3JBQ29udGV4dCIsInVucmVnaXN0ZXJGYWlsZWRTaWRlRWZmZWN0cyIsInNpZGVFZmZlY3RzRnVsbHlRdWFsaWZpZWROYW1lIiwicHJvbWlzZSIsInNpZGVFZmZlY3RQcm9wZXJ0eSIsInVucmVnaXN0ZXJGaWVsZEdyb3VwU2lkZUVmZmVjdHMiLCJyZWdpc3RyeUluZGV4Iiwic3RhcnRzV2l0aCIsInNpZGVFZmZlY3RQYXJ0cyIsInNwbGl0Iiwic2lkZUVmZmVjdFBhdGgiLCJnZXRPRGF0YUVudGl0eVNpZGVFZmZlY3RzIiwic2lkZUVmZmVjdHNUb0V4ZWN1dGUiLCJhZGRTaWRlRWZmZWN0cyIsInZhbHVlcyIsImZhaWxlZFNpZGVFZmZlY3RzIiwiZmFpbGVkU2lkZUVmZmVjdCIsImUiLCJuYXZpZ2F0aW9uIiwibmF2IiwicmVnaXN0ZXJDYWxsQmFjayIsImdldFJlZ2lzdGVyZWRDYWxsYmFjayIsInN1Y2Nlc3MiLCJrZXkiLCJDb250cm9sbGVyRXh0ZW5zaW9uIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJTaWRlRWZmZWN0cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgRkVWaWV3IH0gZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgeyBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IHR5cGUge1xuXHRDb250cm9sU2lkZUVmZmVjdHNUeXBlLFxuXHRPRGF0YVNpZGVFZmZlY3RzVHlwZSxcblx0U2lkZUVmZmVjdHNTZXJ2aWNlLFxuXHRTaWRlRWZmZWN0c1RhcmdldCxcblx0U2lkZUVmZmVjdHNUeXBlXG59IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9TaWRlRWZmZWN0c1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBEaWFsb2cgZnJvbSBcInNhcC9tL0RpYWxvZ1wiO1xuaW1wb3J0IE1lc3NhZ2VUb2FzdCBmcm9tIFwic2FwL20vTWVzc2FnZVRvYXN0XCI7XG5pbXBvcnQgVGV4dCBmcm9tIFwic2FwL20vVGV4dFwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSB7IENvbnRyb2wkVmFsaWRhdGVGaWVsZEdyb3VwRXZlbnQgfSBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IENvbnRyb2xsZXJFeHRlbnNpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyRXh0ZW5zaW9uXCI7XG5pbXBvcnQgT3ZlcnJpZGVFeGVjdXRpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9PdmVycmlkZUV4ZWN1dGlvblwiO1xuaW1wb3J0IHR5cGUgRmllbGQgZnJvbSBcInNhcC91aS9tZGMvRmllbGRcIjtcbmltcG9ydCB0eXBlIHsgRmllbGQkQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL3VpL21kYy9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgeyBNdWx0aVZhbHVlRmllbGQkQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL3VpL21kYy9NdWx0aVZhbHVlRmllbGRcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUNvbnRleHRCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFDb250ZXh0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwiLi4vQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCIuLi9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlTWFuaWZlc3RTZXR0aW5ncyB9IGZyb20gXCIuLi9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCBleHRlbnNpYmxlLCBmaW5hbEV4dGVuc2lvbiwgbWV0aG9kT3ZlcnJpZGUsIHByaXZhdGVFeHRlbnNpb24sIHB1YmxpY0V4dGVuc2lvbiB9IGZyb20gXCIuLi9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuXG50eXBlIEJhc2VTaWRlRWZmZWN0UHJvcGVydHlUeXBlID0ge1xuXHRuYW1lOiBzdHJpbmc7XG5cdGltbWVkaWF0ZT86IGJvb2xlYW47XG5cdHNpZGVFZmZlY3RzOiBTaWRlRWZmZWN0c1R5cGU7XG59O1xuXG5leHBvcnQgdHlwZSBGaWVsZFNpZGVFZmZlY3RQcm9wZXJ0eVR5cGUgPSBCYXNlU2lkZUVmZmVjdFByb3BlcnR5VHlwZSAmIHtcblx0Y29udGV4dDogQ29udGV4dDtcbn07XG5cbmV4cG9ydCB0eXBlIEZpZWxkU2lkZUVmZmVjdERpY3Rpb25hcnkgPSBSZWNvcmQ8c3RyaW5nLCBGaWVsZFNpZGVFZmZlY3RQcm9wZXJ0eVR5cGU+O1xuXG5leHBvcnQgdHlwZSBNYXNzRWRpdEZpZWxkU2lkZUVmZmVjdERpY3Rpb25hcnkgPSBSZWNvcmQ8c3RyaW5nLCBCYXNlU2lkZUVmZmVjdFByb3BlcnR5VHlwZT47XG5cbnR5cGUgRmFpbGVkU2lkZUVmZmVjdERpY3Rpb25hcnkgPSBSZWNvcmQ8c3RyaW5nLCBTaWRlRWZmZWN0c1R5cGVbXT47XG5cbmV4cG9ydCB0eXBlIEZpZWxkR3JvdXBTaWRlRWZmZWN0VHlwZSA9IHtcblx0cHJvbWlzZTogUHJvbWlzZTx1bmtub3duPjtcblx0c2lkZUVmZmVjdFByb3BlcnR5OiBGaWVsZFNpZGVFZmZlY3RQcm9wZXJ0eVR5cGU7XG59O1xuXG5jb25zdCBJTU1FRElBVEVfUkVRVUVTVCA9IFwiJCRJbW1lZGlhdGVSZXF1ZXN0XCI7XG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5TaWRlRWZmZWN0c1wiKVxuY2xhc3MgU2lkZUVmZmVjdHNDb250cm9sbGVyRXh0ZW5zaW9uIGV4dGVuZHMgQ29udHJvbGxlckV4dGVuc2lvbiB7XG5cdHByb3RlY3RlZCBiYXNlITogUGFnZUNvbnRyb2xsZXI7XG5cblx0cHJpdmF0ZSBfdmlldyE6IEZFVmlldztcblxuXHRwcml2YXRlIF9yZWdpc3RlcmVkRmllbGRHcm91cE1hcCE6IFJlY29yZDxzdHJpbmcsIEZpZWxkR3JvdXBTaWRlRWZmZWN0VHlwZT47XG5cblx0cHJpdmF0ZSBfZmllbGRHcm91cEludmFsaWRpdHkhOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPj47XG5cblx0cHJpdmF0ZSBfc2lkZUVmZmVjdHNTZXJ2aWNlITogU2lkZUVmZmVjdHNTZXJ2aWNlO1xuXG5cdHByaXZhdGUgX3JlZ2lzdGVyZWRGYWlsZWRTaWRlRWZmZWN0cyE6IEZhaWxlZFNpZGVFZmZlY3REaWN0aW9uYXJ5O1xuXG5cdHByaXZhdGUgaXNDb25maXJtYXRpb25EaWFsb2dPcGVuPzogYm9vbGVhbjtcblxuXHRAbWV0aG9kT3ZlcnJpZGUoKVxuXHRvbkluaXQoKTogdm9pZCB7XG5cdFx0dGhpcy5fdmlldyA9IHRoaXMuYmFzZS5nZXRWaWV3KCk7XG5cdFx0dGhpcy5fc2lkZUVmZmVjdHNTZXJ2aWNlID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuX3ZpZXcpLmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXHRcdHRoaXMuX3JlZ2lzdGVyZWRGaWVsZEdyb3VwTWFwID0ge307XG5cdFx0dGhpcy5fZmllbGRHcm91cEludmFsaWRpdHkgPSB7fTtcblx0XHR0aGlzLl9yZWdpc3RlcmVkRmFpbGVkU2lkZUVmZmVjdHMgPSB7fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIGEgU2lkZUVmZmVjdHMgY29udHJvbC5cblx0ICpcblx0ICogQHBhcmFtIGVudGl0eVR5cGUgTmFtZSBvZiB0aGUgZW50aXR5IHdoZXJlIHRoZSBTaWRlRWZmZWN0cyBjb250cm9sIHdpbGwgYmUgcmVnaXN0ZXJlZFxuXHQgKiBAcGFyYW0gY29udHJvbFNpZGVFZmZlY3RzIFNpZGVFZmZlY3RzIHRvIHJlZ2lzdGVyLiBFbnN1cmUgdGhlIHNvdXJjZUNvbnRyb2xJZCBtYXRjaGVzIHRoZSBhc3NvY2lhdGVkIFNBUFVJNSBjb250cm9sIElELlxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFkZENvbnRyb2xTaWRlRWZmZWN0cyhlbnRpdHlUeXBlOiBzdHJpbmcsIGNvbnRyb2xTaWRlRWZmZWN0czogT21pdDxDb250cm9sU2lkZUVmZmVjdHNUeXBlLCBcImZ1bGx5UXVhbGlmaWVkTmFtZVwiPik6IHZvaWQge1xuXHRcdHRoaXMuX3NpZGVFZmZlY3RzU2VydmljZS5hZGRDb250cm9sU2lkZUVmZmVjdHMoZW50aXR5VHlwZSwgY29udHJvbFNpZGVFZmZlY3RzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIFNpZGVFZmZlY3RzIGNyZWF0ZWQgYnkgYSBjb250cm9sLlxuXHQgKlxuXHQgKiBAcGFyYW0gY29udHJvbCBTQVBVSTUgQ29udHJvbFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdHJlbW92ZUNvbnRyb2xTaWRlRWZmZWN0cyhjb250cm9sOiBDb250cm9sKTogdm9pZCB7XG5cdFx0Y29uc3QgY29udHJvbElkID0gY29udHJvbC5pc0E/LihcInNhcC51aS5iYXNlLk1hbmFnZWRPYmplY3RcIikgJiYgY29udHJvbC5nZXRJZCgpO1xuXG5cdFx0aWYgKGNvbnRyb2xJZCkge1xuXHRcdFx0dGhpcy5fc2lkZUVmZmVjdHNTZXJ2aWNlLnJlbW92ZUNvbnRyb2xTaWRlRWZmZWN0cyhjb250cm9sSWQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBhcHByb3ByaWF0ZSBjb250ZXh0IG9uIHdoaWNoIFNpZGVFZmZlY3RzIGNhbiBiZSByZXF1ZXN0ZWQuXG5cdCAqIFRoZSBjb3JyZWN0IG9uZSBtdXN0IGhhdmUgdGhlIGJpbmRpbmcgcGFyYW1ldGVyICQkcGF0Y2hXaXRob3V0U2lkZUVmZmVjdHMuXG5cdCAqXG5cdCAqIEBwYXJhbSBiaW5kaW5nQ29udGV4dCBJbml0aWFsIGJpbmRpbmcgY29udGV4dFxuXHQgKiBAcGFyYW0gc2lkZUVmZmVjdEVudGl0eVR5cGUgRW50aXR5VHlwZSBvZiB0aGUgc2lkZUVmZmVjdHNcblx0ICogQHJldHVybnMgU0FQVUk1IENvbnRleHQgb3IgdW5kZWZpbmVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0Z2V0Q29udGV4dEZvclNpZGVFZmZlY3RzKGJpbmRpbmdDb250ZXh0OiBDb250ZXh0LCBzaWRlRWZmZWN0RW50aXR5VHlwZTogc3RyaW5nKTogQ29udGV4dCB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IGNvbnRleHRGb3JTaWRlRWZmZWN0cyA9IGJpbmRpbmdDb250ZXh0LFxuXHRcdFx0ZW50aXR5VHlwZSA9IHRoaXMuX3NpZGVFZmZlY3RzU2VydmljZS5nZXRFbnRpdHlUeXBlRnJvbUNvbnRleHQoYmluZGluZ0NvbnRleHQpO1xuXG5cdFx0aWYgKHNpZGVFZmZlY3RFbnRpdHlUeXBlICE9PSBlbnRpdHlUeXBlKSB7XG5cdFx0XHRjb250ZXh0Rm9yU2lkZUVmZmVjdHMgPSBiaW5kaW5nQ29udGV4dC5nZXRCaW5kaW5nKCkuZ2V0Q29udGV4dCgpIGFzIENvbnRleHQ7XG5cdFx0XHRpZiAoY29udGV4dEZvclNpZGVFZmZlY3RzKSB7XG5cdFx0XHRcdGVudGl0eVR5cGUgPSB0aGlzLl9zaWRlRWZmZWN0c1NlcnZpY2UuZ2V0RW50aXR5VHlwZUZyb21Db250ZXh0KGNvbnRleHRGb3JTaWRlRWZmZWN0cyk7XG5cdFx0XHRcdGlmIChzaWRlRWZmZWN0RW50aXR5VHlwZSAhPT0gZW50aXR5VHlwZSkge1xuXHRcdFx0XHRcdGNvbnRleHRGb3JTaWRlRWZmZWN0cyA9IGNvbnRleHRGb3JTaWRlRWZmZWN0cy5nZXRCaW5kaW5nKCkuZ2V0Q29udGV4dCgpIGFzIENvbnRleHQ7XG5cdFx0XHRcdFx0aWYgKGNvbnRleHRGb3JTaWRlRWZmZWN0cykge1xuXHRcdFx0XHRcdFx0ZW50aXR5VHlwZSA9IHRoaXMuX3NpZGVFZmZlY3RzU2VydmljZS5nZXRFbnRpdHlUeXBlRnJvbUNvbnRleHQoY29udGV4dEZvclNpZGVFZmZlY3RzKTtcblx0XHRcdFx0XHRcdGlmIChzaWRlRWZmZWN0RW50aXR5VHlwZSAhPT0gZW50aXR5VHlwZSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjb250ZXh0Rm9yU2lkZUVmZmVjdHMgfHwgdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIFNpZGVFZmZlY3RzIG1hcCBmb3IgYSBmaWVsZFxuXHQgKiBUaGVzZSBTaWRlRWZmZWN0cyBhcmVcblx0ICogLSBsaXN0ZWQgaW50byBGaWVsZEdyb3VwSWRzIChjb21pbmcgZnJvbSBhbiBPRGF0YSBTZXJ2aWNlKVxuXHQgKiAtIGdlbmVyYXRlZCBieSBhIGNvbnRyb2wgb3IgY29udHJvbHMgYW5kIHRoYXQgY29uZmlndXJlIHRoaXMgZmllbGQgYXMgU291cmNlUHJvcGVydGllcy5cblx0ICpcblx0ICogQHBhcmFtIGZpZWxkIEZpZWxkIGNvbnRyb2xcblx0ICogQHJldHVybnMgU2lkZUVmZmVjdHMgbWFwXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0Z2V0RmllbGRTaWRlRWZmZWN0c01hcChmaWVsZDogQ29udHJvbCk6IEZpZWxkU2lkZUVmZmVjdERpY3Rpb25hcnkge1xuXHRcdGxldCBzaWRlRWZmZWN0c01hcDogRmllbGRTaWRlRWZmZWN0RGljdGlvbmFyeSA9IHt9O1xuXHRcdGNvbnN0IGZpZWxkR3JvdXBJZHMgPSBmaWVsZC5nZXRGaWVsZEdyb3VwSWRzKCksXG5cdFx0XHR2aWV3RW50aXR5U2V0U2V0TmFtZSA9ICh0aGlzLl92aWV3LmdldFZpZXdEYXRhKCkgYXMgQmFzZU1hbmlmZXN0U2V0dGluZ3MpLmVudGl0eVNldCxcblx0XHRcdHZpZXdFbnRpdHlTZXQgPSB0aGlzLl9zaWRlRWZmZWN0c1NlcnZpY2UuZ2V0Q29udmVydGVkTWV0YU1vZGVsKCkuZW50aXR5U2V0cy5maW5kKChlbnRpdHlTZXQpID0+IHtcblx0XHRcdFx0cmV0dXJuIGVudGl0eVNldC5uYW1lID09PSB2aWV3RW50aXR5U2V0U2V0TmFtZTtcblx0XHRcdH0pO1xuXG5cdFx0Ly8gU2lkZUVmZmVjdHMgY29taW5nIGZyb20gYW4gT0RhdGEgU2VydmljZVxuXHRcdHNpZGVFZmZlY3RzTWFwID0gdGhpcy5nZXRTaWRlRWZmZWN0c01hcEZvckZpZWxkR3JvdXBzKFxuXHRcdFx0ZmllbGRHcm91cElkcyxcblx0XHRcdGZpZWxkLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dCB8IG51bGwgfCB1bmRlZmluZWRcblx0XHQpIGFzIEZpZWxkU2lkZUVmZmVjdERpY3Rpb25hcnk7XG5cblx0XHQvLyBTaWRlRWZmZWN0cyBjb21pbmcgZnJvbSBjb250cm9sKHMpXG5cdFx0aWYgKHZpZXdFbnRpdHlTZXRTZXROYW1lICYmIHZpZXdFbnRpdHlTZXQpIHtcblx0XHRcdGNvbnN0IHZpZXdFbnRpdHlUeXBlID0gdmlld0VudGl0eVNldC5lbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZSxcblx0XHRcdFx0ZmllbGRQYXRoID0gdGhpcy5nZXRUYXJnZXRQcm9wZXJ0eShmaWVsZCksXG5cdFx0XHRcdGNvbnRleHQgPSB0aGlzLmdldENvbnRleHRGb3JTaWRlRWZmZWN0cyhmaWVsZC5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQsIHZpZXdFbnRpdHlUeXBlKTtcblxuXHRcdFx0aWYgKGZpZWxkUGF0aCAmJiBjb250ZXh0KSB7XG5cdFx0XHRcdGNvbnN0IGNvbnRyb2xTaWRlRWZmZWN0c0VudGl0eVR5cGUgPSB0aGlzLl9zaWRlRWZmZWN0c1NlcnZpY2UuZ2V0Q29udHJvbEVudGl0eVNpZGVFZmZlY3RzKHZpZXdFbnRpdHlUeXBlKTtcblx0XHRcdFx0T2JqZWN0LmtleXMoY29udHJvbFNpZGVFZmZlY3RzRW50aXR5VHlwZSkuZm9yRWFjaCgoc2lkZUVmZmVjdHNOYW1lKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgb0NvbnRyb2xTaWRlRWZmZWN0cyA9IGNvbnRyb2xTaWRlRWZmZWN0c0VudGl0eVR5cGVbc2lkZUVmZmVjdHNOYW1lXTtcblx0XHRcdFx0XHRpZiAob0NvbnRyb2xTaWRlRWZmZWN0cy5zb3VyY2VQcm9wZXJ0aWVzLmluY2x1ZGVzKGZpZWxkUGF0aCkpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG5hbWUgPSBgJHtzaWRlRWZmZWN0c05hbWV9Ojoke3ZpZXdFbnRpdHlUeXBlfWA7XG5cdFx0XHRcdFx0XHRzaWRlRWZmZWN0c01hcFtuYW1lXSA9IHtcblx0XHRcdFx0XHRcdFx0bmFtZTogbmFtZSxcblx0XHRcdFx0XHRcdFx0aW1tZWRpYXRlOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRzaWRlRWZmZWN0czogb0NvbnRyb2xTaWRlRWZmZWN0cyxcblx0XHRcdFx0XHRcdFx0Y29udGV4dDogY29udGV4dFxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gc2lkZUVmZmVjdHNNYXA7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgc2lkZUVmZmVjdHMgbWFwIGZvciBmaWVsZEdyb3Vwcy5cblx0ICpcblx0ICogQHBhcmFtIGZpZWxkR3JvdXBJZHMgRmllbGQgZ3JvdXAgaWRzXG5cdCAqIEBwYXJhbSBmaWVsZENvbnRleHQgRmllbGQgYmluZGluZyBjb250ZXh0XG5cdCAqIEByZXR1cm5zIFNpZGVFZmZlY3RzIG1hcFxuXHQgKi9cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0Z2V0U2lkZUVmZmVjdHNNYXBGb3JGaWVsZEdyb3Vwcyhcblx0XHRmaWVsZEdyb3VwSWRzOiBzdHJpbmdbXSxcblx0XHRmaWVsZENvbnRleHQ/OiBDb250ZXh0IHwgbnVsbFxuXHQpOiBNYXNzRWRpdEZpZWxkU2lkZUVmZmVjdERpY3Rpb25hcnkgfCBGaWVsZFNpZGVFZmZlY3REaWN0aW9uYXJ5IHtcblx0XHRjb25zdCBtU2lkZUVmZmVjdHNNYXA6IE1hc3NFZGl0RmllbGRTaWRlRWZmZWN0RGljdGlvbmFyeSB8IEZpZWxkU2lkZUVmZmVjdERpY3Rpb25hcnkgPSB7fTtcblx0XHRmaWVsZEdyb3VwSWRzLmZvckVhY2goKGZpZWxkR3JvdXBJZCkgPT4ge1xuXHRcdFx0Y29uc3QgeyBuYW1lLCBpbW1lZGlhdGUsIHNpZGVFZmZlY3RzLCBzaWRlRWZmZWN0RW50aXR5VHlwZSB9ID0gdGhpcy5fZ2V0U2lkZUVmZmVjdHNQcm9wZXJ0eUZvckZpZWxkR3JvdXAoZmllbGRHcm91cElkKTtcblx0XHRcdGNvbnN0IG9Db250ZXh0ID0gZmllbGRDb250ZXh0ID8gKHRoaXMuZ2V0Q29udGV4dEZvclNpZGVFZmZlY3RzKGZpZWxkQ29udGV4dCwgc2lkZUVmZmVjdEVudGl0eVR5cGUpIGFzIENvbnRleHQpIDogdW5kZWZpbmVkO1xuXHRcdFx0aWYgKHNpZGVFZmZlY3RzICYmICghZmllbGRDb250ZXh0IHx8IChmaWVsZENvbnRleHQgJiYgb0NvbnRleHQpKSkge1xuXHRcdFx0XHRtU2lkZUVmZmVjdHNNYXBbbmFtZV0gPSB7XG5cdFx0XHRcdFx0bmFtZSxcblx0XHRcdFx0XHRpbW1lZGlhdGUsXG5cdFx0XHRcdFx0c2lkZUVmZmVjdHNcblx0XHRcdFx0fTtcblx0XHRcdFx0aWYgKGZpZWxkQ29udGV4dCkge1xuXHRcdFx0XHRcdChtU2lkZUVmZmVjdHNNYXBbbmFtZV0gYXMgRmllbGRTaWRlRWZmZWN0UHJvcGVydHlUeXBlKS5jb250ZXh0ID0gb0NvbnRleHQhO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIG1TaWRlRWZmZWN0c01hcDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbGVhciByZWNvcmRlZCB2YWxpZGF0aW9uIHN0YXR1cyBmb3IgYWxsIHByb3BlcnRpZXMuXG5cdCAqXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0Y2xlYXJGaWVsZEdyb3Vwc1ZhbGlkaXR5KCk6IHZvaWQge1xuXHRcdHRoaXMuX2ZpZWxkR3JvdXBJbnZhbGlkaXR5ID0ge307XG5cdH1cblxuXHQvKipcblx0ICogQ2xlYXIgcmVjb3JkZWQgdmFsaWRhdGlvbiBzdGF0dXMgZm9yIGFsbCBwcm9wZXJ0aWVzLlxuXHQgKlxuXHQgKiBAcGFyYW0gZmllbGRHcm91cElkIEZpZWxkIGdyb3VwIGlkXG5cdCAqIEBwYXJhbSBjb250ZXh0IENvbnRleHRcblx0ICogQHJldHVybnMgU0FQVUk1IENvbnRleHQgb3IgdW5kZWZpbmVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0aXNGaWVsZEdyb3VwVmFsaWQoZmllbGRHcm91cElkOiBzdHJpbmcsIGNvbnRleHQ6IENvbnRleHQpOiBib29sZWFuIHtcblx0XHRjb25zdCBpZCA9IHRoaXMuX2dldEZpZWxkR3JvdXBJbmRleChmaWVsZEdyb3VwSWQsIGNvbnRleHQpO1xuXHRcdHJldHVybiBPYmplY3Qua2V5cyh0aGlzLl9maWVsZEdyb3VwSW52YWxpZGl0eVtpZF0gPz8ge30pLmxlbmd0aCA9PT0gMDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSByZWxhdGl2ZSB0YXJnZXQgcHJvcGVydHkgcmVsYXRlZCB0byB0aGUgRmllbGQuXG5cdCAqXG5cdCAqIEBwYXJhbSBmaWVsZCBGaWVsZCBjb250cm9sXG5cdCAqIEByZXR1cm5zIFJlbGF0aXZlIHRhcmdldCBwcm9wZXJ0eVxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGdldFRhcmdldFByb3BlcnR5KGZpZWxkOiBDb250cm9sKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBmaWVsZFBhdGggPSBmaWVsZC5kYXRhKFwic291cmNlUGF0aFwiKSBhcyBzdHJpbmc7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gdGhpcy5fdmlldy5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IHZpZXdCaW5kaW5nUGF0aCA9IHRoaXMuX3ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IHZpZXdNZXRhTW9kZWxQYXRoID0gdmlld0JpbmRpbmdQYXRoID8gYCR7bWV0YU1vZGVsLmdldE1ldGFQYXRoKHZpZXdCaW5kaW5nUGF0aCl9L2AgOiBcIlwiO1xuXHRcdHJldHVybiBmaWVsZFBhdGg/LnJlcGxhY2Uodmlld01ldGFNb2RlbFBhdGgsIFwiXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENhY2hlcyBkZWZlcnJlZCBTaWRlRWZmZWN0cyB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiB0aGUgRmllbGRHcm91cCBpcyB1bmZvY3VzZWQuXG5cdCAqXG5cdCAqIEBwYXJhbSBldmVudCBTQVBVSTUgZXZlbnQgdGhhdCBjb21lcyBmcm9tIGEgZmllbGQgY2hhbmdlXG5cdCAqIEBwYXJhbSBmaWVsZFZhbGlkaXR5XG5cdCAqIEBwYXJhbSBmaWVsZEdyb3VwUHJlUmVxdWlzaXRlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkIGJlZm9yZSBleGVjdXRpbmcgZGVmZXJyZWQgU2lkZUVmZmVjdHNcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRwcmVwYXJlRGVmZXJyZWRTaWRlRWZmZWN0c0ZvckZpZWxkKFxuXHRcdGV2ZW50OiBGaWVsZCRDaGFuZ2VFdmVudCB8IE11bHRpVmFsdWVGaWVsZCRDaGFuZ2VFdmVudCxcblx0XHRmaWVsZFZhbGlkaXR5OiBib29sZWFuLFxuXHRcdGZpZWxkR3JvdXBQcmVSZXF1aXNpdGU/OiBQcm9taXNlPHVua25vd24+XG5cdCk6IHZvaWQge1xuXHRcdGNvbnN0IGZpZWxkID0gKGV2ZW50IGFzIFVJNUV2ZW50PHt9LCBGaWVsZD4pLmdldFNvdXJjZSgpO1xuXHRcdHRoaXMuX3NhdmVGaWVsZFByb3BlcnRpZXNTdGF0dXMoZmllbGQsIGZpZWxkVmFsaWRpdHkpO1xuXHRcdGlmICghZmllbGRWYWxpZGl0eSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBzaWRlRWZmZWN0c01hcCA9IHRoaXMuZ2V0RmllbGRTaWRlRWZmZWN0c01hcChmaWVsZCk7XG5cblx0XHQvLyByZWdpc3RlciBmaWVsZCBncm91cCBTaWRlRWZmZWN0c1xuXHRcdE9iamVjdC5rZXlzKHNpZGVFZmZlY3RzTWFwKVxuXHRcdFx0LmZpbHRlcigoc2lkZUVmZmVjdHNOYW1lKSA9PiBzaWRlRWZmZWN0c01hcFtzaWRlRWZmZWN0c05hbWVdLmltbWVkaWF0ZSAhPT0gdHJ1ZSlcblx0XHRcdC5mb3JFYWNoKChzaWRlRWZmZWN0c05hbWUpID0+IHtcblx0XHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNQcm9wZXJ0aWVzID0gc2lkZUVmZmVjdHNNYXBbc2lkZUVmZmVjdHNOYW1lXTtcblx0XHRcdFx0dGhpcy5yZWdpc3RlckZpZWxkR3JvdXBTaWRlRWZmZWN0cyhzaWRlRWZmZWN0c1Byb3BlcnRpZXMsIGZpZWxkR3JvdXBQcmVSZXF1aXNpdGUpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogTWFuYWdlcyB0aGUgd29ya2Zsb3cgZm9yIFNpZGVFZmZlY3RzIHdpdGggcmVsYXRlZCBjaGFuZ2VzIHRvIGEgZmllbGRcblx0ICogVGhlIGZvbGxvd2luZyBzY2VuYXJpb3MgYXJlIG1hbmFnZWQ6XG5cdCAqICAtIFJlZ2lzdGVyOiBjYWNoZXMgZGVmZXJyZWQgU2lkZUVmZmVjdHMgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIEZpZWxkR3JvdXAgaXMgdW5mb2N1c2VkXG5cdCAqICAtIEV4ZWN1dGU6IHRyaWdnZXJzIGltbWVkaWF0ZSBTaWRlRWZmZWN0cyByZXF1ZXN0cyBpZiB0aGUgcHJvbWlzZSBmb3IgdGhlIGZpZWxkIGV2ZW50IGlzIGZ1bGZpbGxlZC5cblx0ICpcblx0ICogQHBhcmFtIGV2ZW50IFNBUFVJNSBldmVudCB0aGF0IGNvbWVzIGZyb20gYSBmaWVsZCBjaGFuZ2Vcblx0ICogQHBhcmFtIGZpZWxkVmFsaWRpdHlcblx0ICogQHBhcmFtIGZpZWxkR3JvdXBQcmVSZXF1aXNpdGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWQgYmVmb3JlIGV4ZWN1dGluZyBkZWZlcnJlZCBTaWRlRWZmZWN0c1xuXHQgKiBAcGFyYW0gc2tpcERlZmVycmVkUmVnaXN0cmF0aW9uIElmIHRydWUgdGhlbiBkZWZlcnJlZCBzaWRlIGVmZmVjdHMgYXJlIG5vdCByZWdpc3RlcmVkLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHRoZSByZWdpc3RyYXRpb24gb2YgZGVmZXJyZWQgc2lkZSBlZmZlY3RzIGFuZCB0cmlnZ2VyaW5nIG5lZWRzIHRvIGJlIGRvbmUgc2VwYXJhdGVseS5cblx0ICogQHJldHVybnMgIFByb21pc2Ugb24gU2lkZUVmZmVjdHMgcmVxdWVzdChzKVxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFzeW5jIGhhbmRsZUZpZWxkQ2hhbmdlKFxuXHRcdGV2ZW50OiBGaWVsZCRDaGFuZ2VFdmVudCxcblx0XHRmaWVsZFZhbGlkaXR5OiBib29sZWFuLFxuXHRcdGZpZWxkR3JvdXBQcmVSZXF1aXNpdGU/OiBQcm9taXNlPHVua25vd24+LFxuXHRcdHNraXBEZWZlcnJlZFJlZ2lzdHJhdGlvbiA9IGZhbHNlXG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGZpZWxkID0gZXZlbnQuZ2V0U291cmNlKCkgYXMgQ29udHJvbDtcblx0XHRpZiAoIXNraXBEZWZlcnJlZFJlZ2lzdHJhdGlvbikge1xuXHRcdFx0dGhpcy5wcmVwYXJlRGVmZXJyZWRTaWRlRWZmZWN0c0ZvckZpZWxkKGV2ZW50LCBmaWVsZFZhbGlkaXR5LCBmaWVsZEdyb3VwUHJlUmVxdWlzaXRlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5fc2F2ZUZpZWxkUHJvcGVydGllc1N0YXR1cyhmaWVsZCwgZmllbGRWYWxpZGl0eSk7XG5cdFx0XHRpZiAoIWZpZWxkVmFsaWRpdHkpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5fbWFuYWdlU2lkZUVmZmVjdHNGcm9tRmllbGQoZmllbGQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1hbmFnZXMgU2lkZUVmZmVjdHMgd2l0aCBhIHJlbGF0ZWQgJ2ZvY3VzIG91dCcgdG8gYSBmaWVsZCBncm91cC5cblx0ICpcblx0ICogQHBhcmFtIGV2ZW50IFNBUFVJNSBFdmVudFxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHJldHVybmluZyB0cnVlIGlmIHRoZSBTaWRlRWZmZWN0cyBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0YXN5bmMgaGFuZGxlRmllbGRHcm91cENoYW5nZShldmVudDogQ29udHJvbCRWYWxpZGF0ZUZpZWxkR3JvdXBFdmVudCk6IFByb21pc2U8dm9pZCB8IHZvaWRbXT4ge1xuXHRcdGNvbnN0IGZpZWxkID0gZXZlbnQuZ2V0U291cmNlKCksXG5cdFx0XHRmaWVsZEdyb3VwSWRzOiBzdHJpbmdbXSA9IGV2ZW50LmdldFBhcmFtZXRlcihcImZpZWxkR3JvdXBJZHNcIikgPz8gW10sXG5cdFx0XHRmaWVsZEdyb3Vwc1NpZGVFZmZlY3RzID0gZmllbGRHcm91cElkcy5yZWR1Y2UoKHJlc3VsdHM6IEZpZWxkR3JvdXBTaWRlRWZmZWN0VHlwZVtdLCBmaWVsZEdyb3VwSWQpID0+IHtcblx0XHRcdFx0cmV0dXJuIHJlc3VsdHMuY29uY2F0KHRoaXMuZ2V0UmVnaXN0ZXJlZFNpZGVFZmZlY3RzRm9yRmllbGRHcm91cChmaWVsZEdyb3VwSWQpKTtcblx0XHRcdH0sIFtdKTtcblxuXHRcdHJldHVybiBQcm9taXNlLmFsbChcblx0XHRcdGZpZWxkR3JvdXBzU2lkZUVmZmVjdHMubWFwKGFzeW5jIChmaWVsZEdyb3VwU2lkZUVmZmVjdHMpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuX3JlcXVlc3RGaWVsZEdyb3VwU2lkZUVmZmVjdHMoZmllbGRHcm91cFNpZGVFZmZlY3RzKTtcblx0XHRcdH0pXG5cdFx0KS5jYXRjaCgoZXJyb3IpID0+IHtcblx0XHRcdGNvbnN0IGNvbnRleHRQYXRoID0gZmllbGQuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpO1xuXHRcdFx0TG9nLmRlYnVnKGBFcnJvciB3aGlsZSBwcm9jZXNzaW5nIEZpZWxkR3JvdXAgU2lkZUVmZmVjdHMgb24gY29udGV4dCAke2NvbnRleHRQYXRofWAsIGVycm9yKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXF1ZXN0IFNpZGVFZmZlY3RzIG9uIGEgc3BlY2lmaWMgY29udGV4dC5cblx0ICpcblx0ICogQHBhcmFtIHNpZGVFZmZlY3RzIFNpZGVFZmZlY3RzIHRvIGJlIGV4ZWN1dGVkXG5cdCAqIEBwYXJhbSBjb250ZXh0IENvbnRleHQgd2hlcmUgU2lkZUVmZmVjdHMgbmVlZCB0byBiZSBleGVjdXRlZFxuXHQgKiBAcGFyYW0gZ3JvdXBJZFxuXHQgKiBAcGFyYW0gZm5HZXRUYXJnZXRzIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aGljaCB3aWxsIGdpdmUgdXMgdGhlIHRhcmdldHMgYW5kIGFjdGlvbnMgaWYgaXQgd2FzIGNvbWluZyB0aHJvdWdoIHNvbWUgc3BlY2lmaWMgaGFuZGxpbmcuXG5cdCAqIEBwYXJhbSBpZ25vcmVUcmlnZ2VyQWN0aW9ucyBJZiB0cnVlLCB3ZSBkbyBub3QgdHJpZ2dlciBhY3Rpb25zIGRlZmluZWQgaW4gdGhlIHNpZGUgZWZmZWN0XG5cdCAqIEByZXR1cm5zIFNpZGVFZmZlY3RzIHJlcXVlc3Qgb24gU0FQVUk1IGNvbnRleHRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRhc3luYyByZXF1ZXN0U2lkZUVmZmVjdHMoXG5cdFx0c2lkZUVmZmVjdHM6IFNpZGVFZmZlY3RzVHlwZSxcblx0XHRjb250ZXh0OiBDb250ZXh0LFxuXHRcdGdyb3VwSWQ/OiBzdHJpbmcsXG5cdFx0Zm5HZXRUYXJnZXRzPzogKHNpZGVFZmZlY3RzRGVmOiBTaWRlRWZmZWN0c1R5cGUpID0+IHsgdGFyZ2V0czogU2lkZUVmZmVjdHNUYXJnZXRbXTsgdHJpZ2dlckFjdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkIH0sXG5cdFx0aWdub3JlVHJpZ2dlckFjdGlvbnMgPSBmYWxzZVxuXHQpOiBQcm9taXNlPHVua25vd24+IHtcblx0XHRjb25zdCBmblRyaWdnZXJDYWxsYmFja3MgPSB0aGlzLnRyaWdnZXJDYWxsYmFja3MuYmluZCh0aGlzKTtcblx0XHRjb25zdCB7IHRhcmdldHMsIHRyaWdnZXJBY3Rpb24gfSA9IGZuR2V0VGFyZ2V0c1xuXHRcdFx0PyBmbkdldFRhcmdldHMoc2lkZUVmZmVjdHMpXG5cdFx0XHQ6IHtcblx0XHRcdFx0XHR0YXJnZXRzOiBbLi4uKHNpZGVFZmZlY3RzLnRhcmdldEVudGl0aWVzID8/IFtdKSwgLi4uKHNpZGVFZmZlY3RzLnRhcmdldFByb3BlcnRpZXMgPz8gW10pXSxcblx0XHRcdFx0XHR0cmlnZ2VyQWN0aW9uOiAhdGhpcy5fc2lkZUVmZmVjdHNTZXJ2aWNlLmlzQ29udHJvbFNpZGVFZmZlY3RzKHNpZGVFZmZlY3RzKSA/IHNpZGVFZmZlY3RzLnRyaWdnZXJBY3Rpb24gOiB1bmRlZmluZWRcblx0XHRcdCAgfTtcblx0XHRpZiAodHJpZ2dlckFjdGlvbiAmJiAhaWdub3JlVHJpZ2dlckFjdGlvbnMpIHtcblx0XHRcdHRoaXMuX3NpZGVFZmZlY3RzU2VydmljZS5leGVjdXRlQWN0aW9uKHRyaWdnZXJBY3Rpb24sIGNvbnRleHQsIGdyb3VwSWQpO1xuXHRcdH1cblxuXHRcdGlmICh0YXJnZXRzLmxlbmd0aCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuX3NpZGVFZmZlY3RzU2VydmljZVxuXHRcdFx0XHQucmVxdWVzdFNpZGVFZmZlY3RzKHRhcmdldHMsIGNvbnRleHQsIGdyb3VwSWQpXG5cdFx0XHRcdC50aGVuKGFzeW5jIGZ1bmN0aW9uIGFzeW5jKCkge1xuXHRcdFx0XHRcdHJldHVybiBmblRyaWdnZXJDYWxsYmFja3Moc2lkZUVmZmVjdHMudGFyZ2V0RW50aXRpZXM/Lm1hcCgodGFyZ2V0KSA9PiB0YXJnZXQuJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgpIHx8IFtdKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKChlcnJvcjogdW5rbm93bikgPT4ge1xuXHRcdFx0XHRcdHRoaXMucmVnaXN0ZXJGYWlsZWRTaWRlRWZmZWN0cyhbc2lkZUVmZmVjdHNdLCBjb250ZXh0KTtcblx0XHRcdFx0XHR0aHJvdyBlcnJvcjtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJlcXVlc3RzIHRoZSBTaWRlRWZmZWN0cyBmb3IgYSBzaWRlRWZmZWN0IGV2ZW50LlxuXHQgKlxuXHQgKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpcyB0byBleGVjdXRlIHRoZSBzaWRlIGVmZmVjdCBvbiB0aGUgcGFnZSdzIGNvbnRleHQsIGJ1dCBwYWdlcyAobGlrZSB0aGUgTFIpIG1pZ2h0IG92ZXJyaWRlIHRoaXMgbWV0aG9kLlxuXHQgKlxuXHQgKiBAcGFyYW0gZXZlbnROYW1lIFNpZGVFZmZlY3RzIGV2ZW50IHdoaWNoIHdhcyB0cmlnZ2VyZWRcblx0ICogQHBhcmFtIHBhdGggVGhlIHBhdGggZm9yIHdoaWNoIHRoaXMgZXZlbnQgd2FzIHRyaWdnZXJlZFxuXHQgKiBAcmV0dXJucyBQcm9taXNlIG9uIFNpZGVFZmZlY3RzIHJlcXVlc3Rcblx0ICovXG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkluc3RlYWQpXG5cdGFzeW5jIHJlcXVlc3RTaWRlRWZmZWN0c0ZvckV2ZW50KGV2ZW50TmFtZTogc3RyaW5nLCBwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHVuZGVmaW5lZD4ge1xuXHRcdGlmICh0aGlzLmlzRGF0YVBhdGhSZWxldmFudChwYXRoKSkge1xuXHRcdFx0Ly8gdXNlIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGZyb20gdGhlIFNpZGVFZmZlY3RzIFNlcnZpY2Vcblx0XHRcdGNvbnN0IGNvbnRleHQgPSB0aGlzLl9maW5kUmVsZXZhbnRDb250ZXh0KHBhdGgsIHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dCk7XG5cdFx0XHRpZiAoY29udGV4dCkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fc2lkZUVmZmVjdHNTZXJ2aWNlLnJlcXVlc3RTaWRlRWZmZWN0c0ZvckV2ZW50KGV2ZW50TmFtZSwgY29udGV4dCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBhIGdpdmVuIGRhdGEgcGF0aCBpcyBzaG93bi9yZWxldmFudCBvbiB0aGUgcGFnZS5cblx0ICpcblx0ICogQHBhcmFtIHBhdGggVGhlIHBhdGggdG8gYmUgY2hlY2tlZFxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBkYXRhIHBhdGggaXMgc2hvd24gb24gdGhlIFVJXG5cdCAqL1xuXHRpc0RhdGFQYXRoUmVsZXZhbnQocGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgY29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dDtcblxuXHRcdGlmICh0aGlzLl9jb250ZXh0SXNSZWxldmFudChwYXRoLCBjb250ZXh0KSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICEhdGhpcy5fZmluZFJlbGV2YW50Q29udGV4dChwYXRoLCBjb250ZXh0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgYSBnaXZlbiBjb250ZXh0IGZpdHMgdG8gYSBnaXZlbiBwYXRoLlxuXHQgKlxuXHQgKiBUaGlzIGlzIGRvbmUgYnkgY2hlY2tpbmcgYm90aCB0aGUgbmF2aWdhdGlvbiBwYXRoIGFuZCB0aGUgY2Fub25pY2FsIHBhdGguXG5cdCAqXG5cdCAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIHRvIGJlIGNoZWNrZWRcblx0ICogQHBhcmFtIGNvbnRleHQgVGhlIGNvbnRleHQgdG8gYmUgY2hlY2tlZFxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBjb250ZXh0IGZpdHMgdG8gdGhlIGdpdmVuIHBhdGhcblx0ICovXG5cdF9jb250ZXh0SXNSZWxldmFudChwYXRoOiBzdHJpbmcsIGNvbnRleHQ6IENvbnRleHQpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gY29udGV4dD8uZ2V0UGF0aCgpID09PSBwYXRoIHx8IGNvbnRleHQ/LmdldENhbm9uaWNhbFBhdGgoKSA9PT0gcGF0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBGaW5kIGNvbnRleHQgZm9yIGEgZ2l2ZW4gcGF0aCBieSBjaGVja2luZyBkZXBlbmRlbnQgYmluZGluZ3MuXG5cdCAqXG5cdCAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIHRvIGJlIGNoZWNrZWRcblx0ICogQHBhcmFtIGNvbnRleHQgVGhlIHBhcmVudCBjb250ZXh0XG5cdCAqIEByZXR1cm5zIENvbnRleHQgaWYgZm91bmQsIG90aGVyd2lzZSByZXR1cm5zIHVuZGVmaW5lZFxuXHQgKi9cblx0X2ZpbmRSZWxldmFudENvbnRleHQocGF0aDogc3RyaW5nLCBjb250ZXh0OiBDb250ZXh0KTogQ29udGV4dCB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHRoaXMuX2NvbnRleHRJc1JlbGV2YW50KHBhdGgsIGNvbnRleHQpKSB7XG5cdFx0XHRyZXR1cm4gY29udGV4dDtcblx0XHR9XG5cblx0XHRjb25zdCBkZXBlbmRlbnRCaW5kaW5ncyA9IGNvbnRleHQuZ2V0TW9kZWwoKS5nZXREZXBlbmRlbnRCaW5kaW5ncyhjb250ZXh0KTtcblx0XHRmb3IgKGNvbnN0IGJpbmRpbmcgb2YgZGVwZW5kZW50QmluZGluZ3MpIHtcblx0XHRcdGlmIChiaW5kaW5nLmlzQTxPRGF0YUNvbnRleHRCaW5kaW5nPihcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUNvbnRleHRCaW5kaW5nXCIpKSB7XG5cdFx0XHRcdGlmICh0aGlzLl9jb250ZXh0SXNSZWxldmFudChwYXRoLCBiaW5kaW5nLmdldEJvdW5kQ29udGV4dCgpKSkge1xuXHRcdFx0XHRcdHJldHVybiBiaW5kaW5nLmdldEJvdW5kQ29udGV4dCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGJpbmRpbmcuaXNBPE9EYXRhTGlzdEJpbmRpbmc+KFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIikpIHtcblx0XHRcdFx0Y29uc3QgbGlzdENvbnRleHRzID0gYmluZGluZy5nZXRBbGxDdXJyZW50Q29udGV4dHMoKTtcblx0XHRcdFx0Zm9yIChjb25zdCBsaXN0Q29udGV4dCBvZiBsaXN0Q29udGV4dHMpIHtcblx0XHRcdFx0XHRpZiAodGhpcy5fY29udGV4dElzUmVsZXZhbnQocGF0aCwgbGlzdENvbnRleHQpKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gbGlzdENvbnRleHQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0ZXh0IHRvIGJlIHNob3duIGZvciB1c2VyIHRvIGluZGljYXRlIGRhdGEgcmVmcmVzaC5cblx0ICpcblx0ICogVGhpcyBpcyBjdXJyZW50bHkgb25seSB1c2VkIGJ5IFNpZGVFZmZlY3RzIGV2ZW50cy4gUGFnZXMgKGxpa2UgdGhlIExSKSBtaWdodCBvdmVycmlkZSB0aGlzIG1ldGhvZC5cblx0ICpcblx0ICogQHJldHVybnMgVGV4dCB0byBiZSBzaG93biB0byB0aGUgdXNlciBpbiBjYXNlIG9mIGEgZGF0YSByZWZyZXNoXG5cdCAqL1xuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5JbnN0ZWFkKVxuXHRnZXREYXRhUmVmcmVzaFRleHQoKTogc3RyaW5nIHtcblx0XHRjb25zdCByZXNvdXJjZU1vZGVsID0gZ2V0UmVzb3VyY2VNb2RlbCh0aGlzLmdldFZpZXcoKSk7XG5cdFx0cmV0dXJuIHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfU0VSVkVSX0VWRU5UU19ORVdfREFUQV9JVEVNXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE5vdGlmeSB0aGUgdXNlciB0aGF0IGRhdGEgd2FzIHJlZnJlc2hlZC5cblx0ICpcblx0ICogVGhpcyBpcyBjdXJyZW50bHkgb25seSB1c2VkIGJ5IFNpZGVFZmZlY3RzIGV2ZW50cy5cblx0ICovXG5cblx0bm90aWZ5RGF0YVJlZnJlc2goKTogdm9pZCB7XG5cdFx0TWVzc2FnZVRvYXN0LnNob3codGhpcy5iYXNlLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkuX3NpZGVFZmZlY3RzLmdldERhdGFSZWZyZXNoVGV4dCgpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBc2sgdGhlIHVzZXIgZm9yIGNvbmZpcm1hdGlvbiBvZiBhIGRhdGEgcmVmcmVzaC5cblx0ICpcblx0ICogVGhpcyBpcyBjdXJyZW50bHkgb25seSB1c2VkIGJ5IFNpZGVFZmZlY3RzIGV2ZW50cy5cblx0ICpcblx0ICogQHJldHVybnMgUHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIGlmIHRoZSB1c2VyIGNvbmZpcm1zIGFuZCByZWplY3RzIGlmIHRoZSB1c2VyIGNhbmNlbHMuXG5cdCAqL1xuXHRhc3luYyBjb25maXJtRGF0YVJlZnJlc2goKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKCF0aGlzLmlzQ29uZmlybWF0aW9uRGlhbG9nT3Blbikge1xuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdFx0Y29uc3QgdGV4dCA9IHRoaXMuZ2V0RGF0YVJlZnJlc2hUZXh0KCk7XG5cdFx0XHRcdGNvbnN0IHJlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKHRoaXMuZ2V0VmlldygpKTtcblxuXHRcdFx0XHRjb25zdCBjb25maXJtYXRpb25EaWFsb2cgPSBuZXcgRGlhbG9nKHtcblx0XHRcdFx0XHR0aXRsZTogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiV0FSTklOR1wiKSxcblx0XHRcdFx0XHRzdGF0ZTogXCJXYXJuaW5nXCIsXG5cdFx0XHRcdFx0Y29udGVudDogbmV3IFRleHQoeyB0ZXh0OiB0ZXh0IH0pLFxuXHRcdFx0XHRcdGJlZ2luQnV0dG9uOiBuZXcgQnV0dG9uKHtcblx0XHRcdFx0XHRcdHRleHQ6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX1JFRlJFU0hcIiksXG5cdFx0XHRcdFx0XHRwcmVzczogKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25maXJtYXRpb25EaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdGVuZEJ1dHRvbjogbmV3IEJ1dHRvbih7XG5cdFx0XHRcdFx0XHR0ZXh0OiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9ESUFMT0dfQ0FOQ0VMXCIpLFxuXHRcdFx0XHRcdFx0cHJlc3M6ICgpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0Y29uZmlybWF0aW9uRGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHRcdHJlamVjdCgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdGFmdGVyQ2xvc2U6ICgpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdGNvbmZpcm1hdGlvbkRpYWxvZy5kZXN0cm95KCk7XG5cdFx0XHRcdFx0XHR0aGlzLmlzQ29uZmlybWF0aW9uRGlhbG9nT3BlbiA9IGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdGNvbmZpcm1hdGlvbkRpYWxvZy5hZGRTdHlsZUNsYXNzKFwic2FwVWlDb250ZW50UGFkZGluZ1wiKTtcblx0XHRcdFx0dGhpcy5pc0NvbmZpcm1hdGlvbkRpYWxvZ09wZW4gPSB0cnVlO1xuXHRcdFx0XHRjb25maXJtYXRpb25EaWFsb2cub3BlbigpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBQcm9taXNlLnJlamVjdCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlcXVlc3QgbXVsdGlwbGUgU2lkZUVmZmVjdHMgb24gYSBzcGVjaWZpYyBjb250ZXh0LlxuXHQgKlxuXHQgKiBAcGFyYW0gbXVsdGlTaWRlRWZmZWN0cyBTaWRlRWZmZWN0cyB0byBiZSBleGVjdXRlZFxuXHQgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0IHdoZXJlIFNpZGVFZmZlY3RzIG5lZWQgdG8gYmUgZXhlY3V0ZWRcblx0ICogQHBhcmFtIGdyb3VwSWQgVGhlIGdyb3VwIGlkIG9mIHRoZSBiYXRjaFxuXHQgKiBAcmV0dXJucyBTaWRlRWZmZWN0cyByZXF1ZXN0IG9uIFNBUFVJNSBjb250ZXh0XG5cdCAqL1xuXHRhc3luYyByZXF1ZXN0TXVsdGlwbGVTaWRlRWZmZWN0cyhtdWx0aVNpZGVFZmZlY3RzOiBTaWRlRWZmZWN0c1R5cGVbXSwgY29udGV4dDogQ29udGV4dCwgZ3JvdXBJZD86IHN0cmluZyk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdGxldCBwcm9wZXJ0aWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cdFx0bGV0IG5hdmlnYXRpb25Qcm9wZXJ0aWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cdFx0Y29uc3QgYWN0aW9ucyA9IG11bHRpU2lkZUVmZmVjdHMucmVkdWNlKChhY3Rpb25zLCBzaWRlRWZmZWN0cykgPT4ge1xuXHRcdFx0Y29uc3Qgc2lkZUVmZmVjdEFjdGlvbiA9IChzaWRlRWZmZWN0cyBhcyBPRGF0YVNpZGVFZmZlY3RzVHlwZSkudHJpZ2dlckFjdGlvbjtcblx0XHRcdGlmIChzaWRlRWZmZWN0QWN0aW9uKSB7XG5cdFx0XHRcdGFjdGlvbnMucHVzaChzaWRlRWZmZWN0QWN0aW9uKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBhY3Rpb25zO1xuXHRcdH0sIFtdIGFzIHN0cmluZ1tdKTtcblx0XHRjb25zdCBmbnRyaWdnZXJDYWxsYmFja3MgPSB0aGlzLnRyaWdnZXJDYWxsYmFja3MuYmluZCh0aGlzKTtcblxuXHRcdGZvciAoY29uc3QgYWN0aW9uIG9mIGFjdGlvbnMpIHtcblx0XHRcdHRoaXMuX3NpZGVFZmZlY3RzU2VydmljZS5leGVjdXRlQWN0aW9uKGFjdGlvbiwgY29udGV4dCwgZ3JvdXBJZCk7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBzaWRlRWZmZWN0cyBvZiBtdWx0aVNpZGVFZmZlY3RzKSB7XG5cdFx0XHRwcm9wZXJ0aWVzID0gKHNpZGVFZmZlY3RzLnRhcmdldFByb3BlcnRpZXMgPz8gW10pLnJlZHVjZSgobXlTZXQsIHByb3BlcnR5KSA9PiBteVNldC5hZGQocHJvcGVydHkpLCBwcm9wZXJ0aWVzKTtcblx0XHRcdG5hdmlnYXRpb25Qcm9wZXJ0aWVzID0gKHNpZGVFZmZlY3RzLnRhcmdldEVudGl0aWVzID8/IFtdKS5yZWR1Y2UoXG5cdFx0XHRcdChteVNldCwgbmF2aWdhdGlvblByb3BlcnR5KSA9PiBteVNldC5hZGQobmF2aWdhdGlvblByb3BlcnR5LiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoKSxcblx0XHRcdFx0bmF2aWdhdGlvblByb3BlcnRpZXNcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuX3NpZGVFZmZlY3RzU2VydmljZVxuXHRcdFx0LnJlcXVlc3RTaWRlRWZmZWN0cyhcblx0XHRcdFx0W1xuXHRcdFx0XHRcdC4uLkFycmF5LmZyb20ocHJvcGVydGllcyksXG5cdFx0XHRcdFx0Li4uQXJyYXkuZnJvbShuYXZpZ2F0aW9uUHJvcGVydGllcykubWFwKChuYXZpZ2F0aW9uUHJvcGVydHkpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiB7ICROYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBuYXZpZ2F0aW9uUHJvcGVydHkgfTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRdLFxuXHRcdFx0XHRjb250ZXh0LFxuXHRcdFx0XHRncm91cElkXG5cdFx0XHQpXG5cdFx0XHQudGhlbihhc3luYyBmdW5jdGlvbiBhc3luYygpIHtcblx0XHRcdFx0cmV0dXJuIGZudHJpZ2dlckNhbGxiYWNrcyhBcnJheS5mcm9tKG5hdmlnYXRpb25Qcm9wZXJ0aWVzKSk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKChlcnJvcjogdW5rbm93bikgPT4ge1xuXHRcdFx0XHR0aGlzLnJlZ2lzdGVyRmFpbGVkU2lkZUVmZmVjdHMobXVsdGlTaWRlRWZmZWN0cywgY29udGV4dCk7XG5cdFx0XHRcdHRocm93IGVycm9yO1xuXHRcdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyBmYWlsZWQgU2lkZUVmZmVjdHMuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFJlZ2lzdGVyZWQgU2lkZUVmZmVjdHMgcmVxdWVzdHMgdGhhdCBoYXZlIGZhaWxlZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdHB1YmxpYyBnZXRSZWdpc3RlcmVkRmFpbGVkUmVxdWVzdHMoKTogRmFpbGVkU2lkZUVmZmVjdERpY3Rpb25hcnkge1xuXHRcdHJldHVybiB0aGlzLl9yZWdpc3RlcmVkRmFpbGVkU2lkZUVmZmVjdHM7XG5cdH1cblxuXHQvKipcblx0ICogQWRkcyBTaWRlRWZmZWN0cyB0byB0aGUgcXVldWUgb2YgdGhlIGZhaWxlZCBTaWRlRWZmZWN0c1xuXHQgKiBUaGUgU2lkZUVmZmVjdHMgYXJlIHJldHJpZ2dlcmVkIG9uIHRoZSBuZXh0IHJlcXVlc3Qgb24gdGhlIHNhbWUgY29udGV4dC5cblx0ICpcblx0ICogQHBhcmFtIG11bHRpU2lkZUVmZmVjdHMgU2lkZUVmZmVjdHMgdGhhdCBuZWVkIHRvIGJlIHJldHJpZ2dlcmVkXG5cdCAqIEBwYXJhbSBjb250ZXh0IENvbnRleHQgd2hlcmUgU2lkZUVmZmVjdHMgaGF2ZSBmYWlsZWRcblx0ICovXG5cdEBwcml2YXRlRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cmVnaXN0ZXJGYWlsZWRTaWRlRWZmZWN0cyhtdWx0aVNpZGVFZmZlY3RzOiBTaWRlRWZmZWN0c1R5cGVbXSwgY29udGV4dDogQ29udGV4dCk6IHZvaWQge1xuXHRcdGNvbnN0IGNvbnRleHRQYXRoID0gY29udGV4dC5nZXRQYXRoKCk7XG5cdFx0dGhpcy5fcmVnaXN0ZXJlZEZhaWxlZFNpZGVFZmZlY3RzW2NvbnRleHRQYXRoXSA9IHRoaXMuX3JlZ2lzdGVyZWRGYWlsZWRTaWRlRWZmZWN0c1tjb250ZXh0UGF0aF0gPz8gW107XG5cdFx0Zm9yIChjb25zdCBzaWRlRWZmZWN0cyBvZiBtdWx0aVNpZGVFZmZlY3RzKSB7XG5cdFx0XHRjb25zdCBpc05vdEFscmVhZHlMaXN0ZWQgPSB0aGlzLl9yZWdpc3RlcmVkRmFpbGVkU2lkZUVmZmVjdHNbY29udGV4dFBhdGhdLmV2ZXJ5KFxuXHRcdFx0XHQobUZhaWxlZFNpZGVFZmZlY3RzKSA9PiBzaWRlRWZmZWN0cy5mdWxseVF1YWxpZmllZE5hbWUgIT09IG1GYWlsZWRTaWRlRWZmZWN0cy5mdWxseVF1YWxpZmllZE5hbWVcblx0XHRcdCk7XG5cdFx0XHRpZiAoaXNOb3RBbHJlYWR5TGlzdGVkKSB7XG5cdFx0XHRcdHRoaXMuX3JlZ2lzdGVyZWRGYWlsZWRTaWRlRWZmZWN0c1tjb250ZXh0UGF0aF0ucHVzaChzaWRlRWZmZWN0cyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIERlbGV0ZXMgU2lkZUVmZmVjdHMgaW4gdGhlIHF1ZXVlIG9mIHRoZSBmYWlsZWQgU2lkZUVmZmVjdHMgZm9yIGEgY29udGV4dC5cblx0ICpcblx0ICogQHBhcmFtIGNvbnRleHRQYXRoIENvbnRleHQgcGF0aCB3aGVyZSBTaWRlRWZmZWN0cyBoYXZlIGZhaWxlZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdHVucmVnaXN0ZXJGYWlsZWRTaWRlRWZmZWN0c0ZvckFDb250ZXh0KGNvbnRleHRQYXRoOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRkZWxldGUgdGhpcy5fcmVnaXN0ZXJlZEZhaWxlZFNpZGVFZmZlY3RzW2NvbnRleHRQYXRoXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZWxldGVzIFNpZGVFZmZlY3RzIHRvIHRoZSBxdWV1ZSBvZiB0aGUgZmFpbGVkIFNpZGVFZmZlY3RzLlxuXHQgKlxuXHQgKiBAcGFyYW0gc2lkZUVmZmVjdHNGdWxseVF1YWxpZmllZE5hbWUgU2lkZUVmZmVjdHMgdGhhdCBuZWVkIHRvIGJlIHJldHJpZ2dlcmVkXG5cdCAqIEBwYXJhbSBjb250ZXh0IENvbnRleHQgd2hlcmUgU2lkZUVmZmVjdHMgaGF2ZSBmYWlsZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHR1bnJlZ2lzdGVyRmFpbGVkU2lkZUVmZmVjdHMoc2lkZUVmZmVjdHNGdWxseVF1YWxpZmllZE5hbWU6IHN0cmluZywgY29udGV4dDogQ29udGV4dCk6IHZvaWQge1xuXHRcdGNvbnN0IGNvbnRleHRQYXRoID0gY29udGV4dC5nZXRQYXRoKCk7XG5cdFx0aWYgKHRoaXMuX3JlZ2lzdGVyZWRGYWlsZWRTaWRlRWZmZWN0c1tjb250ZXh0UGF0aF0/Lmxlbmd0aCkge1xuXHRcdFx0dGhpcy5fcmVnaXN0ZXJlZEZhaWxlZFNpZGVFZmZlY3RzW2NvbnRleHRQYXRoXSA9IHRoaXMuX3JlZ2lzdGVyZWRGYWlsZWRTaWRlRWZmZWN0c1tjb250ZXh0UGF0aF0uZmlsdGVyKFxuXHRcdFx0XHQoc2lkZUVmZmVjdHMpID0+IHNpZGVFZmZlY3RzLmZ1bGx5UXVhbGlmaWVkTmFtZSAhPT0gc2lkZUVmZmVjdHNGdWxseVF1YWxpZmllZE5hbWVcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMgU2lkZUVmZmVjdHMgdG8gdGhlIHF1ZXVlIG9mIGEgRmllbGRHcm91cFxuXHQgKiBUaGUgU2lkZUVmZmVjdHMgYXJlIHRyaWdnZXJlZCB3aGVuIGV2ZW50IHJlbGF0ZWQgdG8gdGhlIGZpZWxkIGdyb3VwIGNoYW5nZSBpcyBmaXJlZC5cblx0ICpcblx0ICogQHBhcmFtIHNpZGVFZmZlY3RzUHJvcGVydGllcyBTaWRlRWZmZWN0cyBwcm9wZXJ0aWVzXG5cdCAqIEBwYXJhbSBmaWVsZEdyb3VwUHJlUmVxdWlzaXRlIFByb21pc2UgdG8gZnVsbGZpbCBiZWZvcmUgZXhlY3V0aW5nIHRoZSBTaWRlRWZmZWN0c1xuXHQgKi9cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRyZWdpc3RlckZpZWxkR3JvdXBTaWRlRWZmZWN0cyhzaWRlRWZmZWN0c1Byb3BlcnRpZXM6IEZpZWxkU2lkZUVmZmVjdFByb3BlcnR5VHlwZSwgZmllbGRHcm91cFByZVJlcXVpc2l0ZT86IFByb21pc2U8dW5rbm93bj4pOiB2b2lkIHtcblx0XHRjb25zdCBpZCA9IHRoaXMuX2dldEZpZWxkR3JvdXBJbmRleChzaWRlRWZmZWN0c1Byb3BlcnRpZXMubmFtZSwgc2lkZUVmZmVjdHNQcm9wZXJ0aWVzLmNvbnRleHQpO1xuXHRcdGlmICghdGhpcy5fcmVnaXN0ZXJlZEZpZWxkR3JvdXBNYXBbaWRdKSB7XG5cdFx0XHR0aGlzLl9yZWdpc3RlcmVkRmllbGRHcm91cE1hcFtpZF0gPSB7XG5cdFx0XHRcdHByb21pc2U6IGZpZWxkR3JvdXBQcmVSZXF1aXNpdGUgPz8gUHJvbWlzZS5yZXNvbHZlKCksXG5cdFx0XHRcdHNpZGVFZmZlY3RQcm9wZXJ0eTogc2lkZUVmZmVjdHNQcm9wZXJ0aWVzXG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBEZWxldGVzIFNpZGVFZmZlY3RzIHRvIHRoZSBxdWV1ZSBvZiBhIEZpZWxkR3JvdXAuXG5cdCAqXG5cdCAqIEBwYXJhbSBzaWRlRWZmZWN0c1Byb3BlcnRpZXMgU2lkZUVmZmVjdHMgcHJvcGVydGllc1xuXHQgKi9cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHR1bnJlZ2lzdGVyRmllbGRHcm91cFNpZGVFZmZlY3RzKHNpZGVFZmZlY3RzUHJvcGVydGllczogRmllbGRTaWRlRWZmZWN0UHJvcGVydHlUeXBlKTogdm9pZCB7XG5cdFx0Y29uc3QgeyBjb250ZXh0LCBuYW1lIH0gPSBzaWRlRWZmZWN0c1Byb3BlcnRpZXM7XG5cdFx0Y29uc3QgaWQgPSB0aGlzLl9nZXRGaWVsZEdyb3VwSW5kZXgobmFtZSwgY29udGV4dCk7XG5cdFx0ZGVsZXRlIHRoaXMuX3JlZ2lzdGVyZWRGaWVsZEdyb3VwTWFwW2lkXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSByZWdpc3RlcmVkIFNpZGVFZmZlY3RzIGludG8gdGhlIHF1ZXVlIGZvciBhIGZpZWxkIGdyb3VwIGlkLlxuXHQgKlxuXHQgKiBAcGFyYW0gZmllbGRHcm91cElkIEZpZWxkIGdyb3VwIGlkXG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIHJlZ2lzdGVyZWQgU2lkZUVmZmVjdHMgYW5kIHRoZWlyIHByb21pc2Vcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRnZXRSZWdpc3RlcmVkU2lkZUVmZmVjdHNGb3JGaWVsZEdyb3VwKGZpZWxkR3JvdXBJZDogc3RyaW5nKTogRmllbGRHcm91cFNpZGVFZmZlY3RUeXBlW10ge1xuXHRcdGNvbnN0IHNpZGVFZmZlY3RzID0gW107XG5cdFx0Zm9yIChjb25zdCByZWdpc3RyeUluZGV4IG9mIE9iamVjdC5rZXlzKHRoaXMuX3JlZ2lzdGVyZWRGaWVsZEdyb3VwTWFwKSkge1xuXHRcdFx0aWYgKHJlZ2lzdHJ5SW5kZXguc3RhcnRzV2l0aChgJHtmaWVsZEdyb3VwSWR9X2ApKSB7XG5cdFx0XHRcdHNpZGVFZmZlY3RzLnB1c2godGhpcy5fcmVnaXN0ZXJlZEZpZWxkR3JvdXBNYXBbcmVnaXN0cnlJbmRleF0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gc2lkZUVmZmVjdHM7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyBhIHN0YXR1cyBpbmRleC5cblx0ICpcblx0ICogQHBhcmFtIGZpZWxkR3JvdXBJZCBUaGUgZmllbGQgZ3JvdXAgaWRcblx0ICogQHBhcmFtIGNvbnRleHQgU0FQVUk1IENvbnRleHRcblx0ICogQHJldHVybnMgSW5kZXhcblx0ICovXG5cdHByaXZhdGUgX2dldEZpZWxkR3JvdXBJbmRleChmaWVsZEdyb3VwSWQ6IHN0cmluZywgY29udGV4dDogQ29udGV4dCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGAke2ZpZWxkR3JvdXBJZH1fJHtjb250ZXh0LmdldFBhdGgoKX1gO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgc2lkZUVmZmVjdHMgcHJvcGVydGllcyBmcm9tIGEgZmllbGQgZ3JvdXAgaWRcblx0ICogVGhlIHByb3BlcnRpZXMgYXJlOlxuXHQgKiAgLSBuYW1lXG5cdCAqICAtIHNpZGVFZmZlY3RzIGRlZmluaXRpb25cblx0ICogIC0gc2lkZUVmZmVjdHMgZW50aXR5IHR5cGVcblx0ICogIC0gaW1tZWRpYXRlIHNpZGVFZmZlY3RzLlxuXHQgKlxuXHQgKiBAcGFyYW0gZmllbGRHcm91cElkXG5cdCAqIEByZXR1cm5zIFNpZGVFZmZlY3RzIHByb3BlcnRpZXNcblx0ICovXG5cdHByaXZhdGUgX2dldFNpZGVFZmZlY3RzUHJvcGVydHlGb3JGaWVsZEdyb3VwKGZpZWxkR3JvdXBJZDogc3RyaW5nKToge1xuXHRcdHNpZGVFZmZlY3RFbnRpdHlUeXBlOiBzdHJpbmc7XG5cdFx0bmFtZTogc3RyaW5nO1xuXHRcdGltbWVkaWF0ZTogYm9vbGVhbjtcblx0XHRzaWRlRWZmZWN0czogT0RhdGFTaWRlRWZmZWN0c1R5cGUgfCB1bmRlZmluZWQ7XG5cdH0ge1xuXHRcdC8qKlxuXHRcdCAqIHN0cmluZyBcIiQkSW1tZWRpYXRlUmVxdWVzdFwiIGlzIGFkZGVkIHRvIHRoZSBTaWRlRWZmZWN0cyBuYW1lIGR1cmluZyB0ZW1wbGF0aW5nIHRvIGtub3dcblx0XHQgKiBpZiB0aGlzIFNpZGVFZmZlY3RzIG11c3QgYmUgaW1tZWRpYXRlbHkgZXhlY3V0ZWQgcmVxdWVzdGVkIChvbiBmaWVsZCBjaGFuZ2UpIG9yIG11c3Rcblx0XHQgKiBiZSBkZWZlcnJlZCAob24gZmllbGQgZ3JvdXAgZm9jdXMgb3V0KVxuXHRcdCAqXG5cdFx0ICovXG5cdFx0Y29uc3QgaW1tZWRpYXRlID0gZmllbGRHcm91cElkLmluY2x1ZGVzKElNTUVESUFURV9SRVFVRVNUKSxcblx0XHRcdG5hbWUgPSBmaWVsZEdyb3VwSWQucmVwbGFjZShJTU1FRElBVEVfUkVRVUVTVCwgXCJcIiksXG5cdFx0XHRzaWRlRWZmZWN0UGFydHMgPSBuYW1lLnNwbGl0KFwiI1wiKSxcblx0XHRcdHNpZGVFZmZlY3RFbnRpdHlUeXBlID0gc2lkZUVmZmVjdFBhcnRzWzBdLFxuXHRcdFx0c2lkZUVmZmVjdFBhdGggPSBgJHtzaWRlRWZmZWN0RW50aXR5VHlwZX1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNpZGVFZmZlY3RzJHtcblx0XHRcdFx0c2lkZUVmZmVjdFBhcnRzLmxlbmd0aCA9PT0gMiA/IGAjJHtzaWRlRWZmZWN0UGFydHNbMV19YCA6IFwiXCJcblx0XHRcdH1gLFxuXHRcdFx0c2lkZUVmZmVjdHM6IE9EYXRhU2lkZUVmZmVjdHNUeXBlIHwgdW5kZWZpbmVkID1cblx0XHRcdFx0dGhpcy5fc2lkZUVmZmVjdHNTZXJ2aWNlLmdldE9EYXRhRW50aXR5U2lkZUVmZmVjdHMoc2lkZUVmZmVjdEVudGl0eVR5cGUpPy5bc2lkZUVmZmVjdFBhdGhdO1xuXHRcdHJldHVybiB7IG5hbWUsIGltbWVkaWF0ZSwgc2lkZUVmZmVjdHMsIHNpZGVFZmZlY3RFbnRpdHlUeXBlIH07XG5cdH1cblxuXHQvKipcblx0ICogTWFuYWdlcyB0aGUgU2lkZUVmZmVjdHMgZm9yIGEgZmllbGQuXG5cdCAqXG5cdCAqIEBwYXJhbSBmaWVsZCBGaWVsZCBjb250cm9sXG5cdCAqIEByZXR1cm5zIFByb21pc2UgcmVsYXRlZCB0byB0aGUgcmVxdWVzdGVkIGltbWVkaWF0ZSBzaWRlRWZmZWN0c1xuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBfbWFuYWdlU2lkZUVmZmVjdHNGcm9tRmllbGQoZmllbGQ6IENvbnRyb2wpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBzaWRlRWZmZWN0c01hcCA9IHRoaXMuZ2V0RmllbGRTaWRlRWZmZWN0c01hcChmaWVsZCk7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHNpZGVFZmZlY3RzVG9FeGVjdXRlOiBSZWNvcmQ8c3RyaW5nLCB7IHNpZGVFZmZlY3RzOiBTaWRlRWZmZWN0c1R5cGVbXTsgY29udGV4dDogQ29udGV4dCB9PiA9IHt9O1xuXHRcdFx0Y29uc3QgYWRkU2lkZUVmZmVjdHMgPSAoY29udGV4dDogQ29udGV4dCwgc2lkZUVmZmVjdHM6IFNpZGVFZmZlY3RzVHlwZSk6IHZvaWQgPT4ge1xuXHRcdFx0XHRjb25zdCBjb250ZXh0UGF0aCA9IGNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdFx0XHRpZiAoc2lkZUVmZmVjdHNUb0V4ZWN1dGVbY29udGV4dFBhdGhdKSB7XG5cdFx0XHRcdFx0c2lkZUVmZmVjdHNUb0V4ZWN1dGVbY29udGV4dFBhdGhdLnNpZGVFZmZlY3RzLnB1c2goc2lkZUVmZmVjdHMpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHNpZGVFZmZlY3RzVG9FeGVjdXRlW2NvbnRleHRQYXRoXSA9IHtcblx0XHRcdFx0XHRcdGNvbnRleHQsXG5cdFx0XHRcdFx0XHRzaWRlRWZmZWN0czogW3NpZGVFZmZlY3RzXVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHRcdC8vR2V0IEltbWVkaWF0ZSBTaWRlRWZmZWN0c1xuXHRcdFx0Zm9yIChjb25zdCBzaWRlRWZmZWN0c1Byb3BlcnRpZXMgb2YgT2JqZWN0LnZhbHVlcyhzaWRlRWZmZWN0c01hcCkuZmlsdGVyKFxuXHRcdFx0XHQoc2lkZUVmZmVjdHNQcm9wZXJ0aWVzKSA9PiBzaWRlRWZmZWN0c1Byb3BlcnRpZXMuaW1tZWRpYXRlID09PSB0cnVlXG5cdFx0XHQpKSB7XG5cdFx0XHRcdC8vIGlmIHRoaXMgU2lkZUVmZmVjdHMgaXMgcmVjb3JkZWQgYXMgZmFpbGVkIFNpZGVFZmZlY3RzLCBuZWVkIHRvIHJlbW92ZSBpdC5cblx0XHRcdFx0dGhpcy51bnJlZ2lzdGVyRmFpbGVkU2lkZUVmZmVjdHMoc2lkZUVmZmVjdHNQcm9wZXJ0aWVzLnNpZGVFZmZlY3RzLmZ1bGx5UXVhbGlmaWVkTmFtZSwgc2lkZUVmZmVjdHNQcm9wZXJ0aWVzLmNvbnRleHQpO1xuXHRcdFx0XHRhZGRTaWRlRWZmZWN0cyhzaWRlRWZmZWN0c1Byb3BlcnRpZXMuY29udGV4dCwgc2lkZUVmZmVjdHNQcm9wZXJ0aWVzLnNpZGVFZmZlY3RzKTtcblx0XHRcdH1cblxuXHRcdFx0Ly9SZXBsYXkgZmFpbGVkIFNpZGVFZmZlY3RzIHJlbGF0ZWQgdG8gdGhlIHZpZXcgb3IgRmllbGRcblx0XHRcdGZvciAoY29uc3QgY29udGV4dCBvZiBbZmllbGQuZ2V0QmluZGluZ0NvbnRleHQoKSwgdGhpcy5fdmlldy5nZXRCaW5kaW5nQ29udGV4dCgpXS5maWx0ZXIoXG5cdFx0XHRcdChjb250ZXh0KTogY29udGV4dCBpcyBDb250ZXh0ID0+ICEhY29udGV4dFxuXHRcdFx0KSkge1xuXHRcdFx0XHRjb25zdCBjb250ZXh0UGF0aCA9IGNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdFx0XHRjb25zdCBmYWlsZWRTaWRlRWZmZWN0cyA9IHRoaXMuX3JlZ2lzdGVyZWRGYWlsZWRTaWRlRWZmZWN0c1tjb250ZXh0UGF0aF0gPz8gW107XG5cdFx0XHRcdHRoaXMudW5yZWdpc3RlckZhaWxlZFNpZGVFZmZlY3RzRm9yQUNvbnRleHQoY29udGV4dFBhdGgpO1xuXHRcdFx0XHRmb3IgKGNvbnN0IGZhaWxlZFNpZGVFZmZlY3Qgb2YgZmFpbGVkU2lkZUVmZmVjdHMpIHtcblx0XHRcdFx0XHRhZGRTaWRlRWZmZWN0cyhjb250ZXh0LCBmYWlsZWRTaWRlRWZmZWN0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0YXdhaXQgUHJvbWlzZS5hbGwoXG5cdFx0XHRcdE9iamVjdC52YWx1ZXMoc2lkZUVmZmVjdHNUb0V4ZWN1dGUpLm1hcChhc3luYyAoc2lkZUVmZmVjdHNQcm9wZXJ0aWVzKSA9PlxuXHRcdFx0XHRcdHNpZGVFZmZlY3RzUHJvcGVydGllcy5zaWRlRWZmZWN0cy5sZW5ndGggPT09IDFcblx0XHRcdFx0XHRcdD8gdGhpcy5yZXF1ZXN0U2lkZUVmZmVjdHMoc2lkZUVmZmVjdHNQcm9wZXJ0aWVzLnNpZGVFZmZlY3RzWzBdLCBzaWRlRWZmZWN0c1Byb3BlcnRpZXMuY29udGV4dClcblx0XHRcdFx0XHRcdDogdGhpcy5yZXF1ZXN0TXVsdGlwbGVTaWRlRWZmZWN0cyhzaWRlRWZmZWN0c1Byb3BlcnRpZXMuc2lkZUVmZmVjdHMsIHNpZGVFZmZlY3RzUHJvcGVydGllcy5jb250ZXh0KVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdExvZy5kZWJ1ZyhgRXJyb3Igd2hpbGUgbWFuYWdpbmcgRmllbGQgU2lkZUVmZmVjdHNgLCBlIGFzIHN0cmluZyk7XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgdHJpZ2dlckNhbGxiYWNrcyhuYXZpZ2F0aW9uOiBzdHJpbmdbXSk6IFByb21pc2U8dW5kZWZpbmVkPiB7XG5cdFx0YXdhaXQgUHJvbWlzZS5hbGwoXG5cdFx0XHRuYXZpZ2F0aW9uLm1hcCgobmF2KSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJlZ2lzdGVyQ2FsbEJhY2sgPSB0aGlzLl9zaWRlRWZmZWN0c1NlcnZpY2UuZ2V0UmVnaXN0ZXJlZENhbGxiYWNrKG5hdik7XG5cdFx0XHRcdGlmIChyZWdpc3RlckNhbGxCYWNrKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJlZ2lzdGVyQ2FsbEJhY2soKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0XHR9KVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVxdWVzdHMgdGhlIFNpZGVFZmZlY3RzIGZvciBhIGZpZWxkR3JvdXAuXG5cdCAqXG5cdCAqIEBwYXJhbSBmaWVsZEdyb3VwU2lkZUVmZmVjdHMgRmllbGQgZ3JvdXAgc2lkZUVmZmVjdHMgd2l0aCBpdHMgcHJvbWlzZVxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHJldHVybmluZyB0cnVlIGlmIHRoZSBTaWRlRWZmZWN0cyBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIF9yZXF1ZXN0RmllbGRHcm91cFNpZGVFZmZlY3RzKGZpZWxkR3JvdXBTaWRlRWZmZWN0czogRmllbGRHcm91cFNpZGVFZmZlY3RUeXBlKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dGhpcy51bnJlZ2lzdGVyRmllbGRHcm91cFNpZGVFZmZlY3RzKGZpZWxkR3JvdXBTaWRlRWZmZWN0cy5zaWRlRWZmZWN0UHJvcGVydHkpO1xuXHRcdHRyeSB7XG5cdFx0XHRhd2FpdCBmaWVsZEdyb3VwU2lkZUVmZmVjdHMucHJvbWlzZTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRMb2cuZGVidWcoYEVycm9yIHdoaWxlIHByb2Nlc3NpbmcgRmllbGRHcm91cCBTaWRlRWZmZWN0c2AsIGUgYXMgc3RyaW5nKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHsgc2lkZUVmZmVjdHMsIGNvbnRleHQsIG5hbWUgfSA9IGZpZWxkR3JvdXBTaWRlRWZmZWN0cy5zaWRlRWZmZWN0UHJvcGVydHk7XG5cdFx0XHRpZiAodGhpcy5pc0ZpZWxkR3JvdXBWYWxpZChuYW1lLCBjb250ZXh0KSkge1xuXHRcdFx0XHRhd2FpdCB0aGlzLnJlcXVlc3RTaWRlRWZmZWN0cyhzaWRlRWZmZWN0cywgY29udGV4dCk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0TG9nLmRlYnVnKGBFcnJvciB3aGlsZSBleGVjdXRpbmcgRmllbGRHcm91cCBTaWRlRWZmZWN0c2AsIGUgYXMgc3RyaW5nKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2F2ZXMgdGhlIHZhbGlkYXRpb24gc3RhdHVzIG9mIHByb3BlcnRpZXMgcmVsYXRlZCB0byBhIGZpZWxkIGNvbnRyb2wuXG5cdCAqXG5cdCAqIEBwYXJhbSBmaWVsZCBUaGUgZmllbGQgY29udHJvbFxuXHQgKiBAcGFyYW0gc3VjY2VzcyBTdGF0dXMgb2YgdGhlIGZpZWxkIHZhbGlkYXRpb25cblx0ICovXG5cdHByaXZhdGUgX3NhdmVGaWVsZFByb3BlcnRpZXNTdGF0dXMoZmllbGQ6IENvbnRyb2wsIHN1Y2Nlc3M6IGJvb2xlYW4pOiB2b2lkIHtcblx0XHRjb25zdCBzaWRlRWZmZWN0c01hcCA9IHRoaXMuZ2V0RmllbGRTaWRlRWZmZWN0c01hcChmaWVsZCk7XG5cdFx0T2JqZWN0LmtleXMoc2lkZUVmZmVjdHNNYXApLmZvckVhY2goKGtleSkgPT4ge1xuXHRcdFx0Y29uc3QgeyBuYW1lLCBpbW1lZGlhdGUsIGNvbnRleHQgfSA9IHNpZGVFZmZlY3RzTWFwW2tleV07XG5cdFx0XHRpZiAoIWltbWVkaWF0ZSkge1xuXHRcdFx0XHRjb25zdCBpZCA9IHRoaXMuX2dldEZpZWxkR3JvdXBJbmRleChuYW1lLCBjb250ZXh0KTtcblx0XHRcdFx0aWYgKHN1Y2Nlc3MpIHtcblx0XHRcdFx0XHRkZWxldGUgdGhpcy5fZmllbGRHcm91cEludmFsaWRpdHlbaWRdPy5bZmllbGQuZ2V0SWQoKV07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5fZmllbGRHcm91cEludmFsaWRpdHlbaWRdID0ge1xuXHRcdFx0XHRcdFx0Li4udGhpcy5fZmllbGRHcm91cEludmFsaWRpdHlbaWRdLFxuXHRcdFx0XHRcdFx0Li4ueyBbZmllbGQuZ2V0SWQoKV06IHRydWUgfVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBTaWRlRWZmZWN0c0NvbnRyb2xsZXJFeHRlbnNpb247XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7OztFQW1EQSxNQUFNQSxpQkFBaUIsR0FBRyxvQkFBb0I7RUFBQyxJQUV6Q0MsOEJBQThCLFdBRG5DQyxjQUFjLENBQUMsOENBQThDLENB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
|
|
733
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJTU1FRElBVEVfUkVRVUVTVCIsIlNpZGVFZmZlY3RzQ29udHJvbGxlckV4dGVuc2lvbiIsImRlZmluZVVJNUNsYXNzIiwibWV0aG9kT3ZlcnJpZGUiLCJwdWJsaWNFeHRlbnNpb24iLCJmaW5hbEV4dGVuc2lvbiIsImV4dGVuc2libGUiLCJPdmVycmlkZUV4ZWN1dGlvbiIsIkluc3RlYWQiLCJwcml2YXRlRXh0ZW5zaW9uIiwib25Jbml0IiwiX3ZpZXciLCJiYXNlIiwiZ2V0VmlldyIsIl9zaWRlRWZmZWN0c1NlcnZpY2UiLCJDb21tb25VdGlscyIsImdldEFwcENvbXBvbmVudCIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsIl9yZWdpc3RlcmVkRmllbGRHcm91cE1hcCIsIl9maWVsZEdyb3VwSW52YWxpZGl0eSIsIl9yZWdpc3RlcmVkRmFpbGVkU2lkZUVmZmVjdHMiLCJhZGRDb250cm9sU2lkZUVmZmVjdHMiLCJlbnRpdHlUeXBlIiwiY29udHJvbFNpZGVFZmZlY3RzIiwicmVtb3ZlQ29udHJvbFNpZGVFZmZlY3RzIiwiY29udHJvbCIsImNvbnRyb2xJZCIsImlzQSIsImdldElkIiwiZ2V0Q29udGV4dEZvclNpZGVFZmZlY3RzIiwiYmluZGluZ0NvbnRleHQiLCJzaWRlRWZmZWN0RW50aXR5VHlwZSIsImNvbnRleHRGb3JTaWRlRWZmZWN0cyIsImdldEVudGl0eVR5cGVGcm9tQ29udGV4dCIsImdldEJpbmRpbmciLCJnZXRDb250ZXh0IiwidW5kZWZpbmVkIiwiZ2V0RmllbGRTaWRlRWZmZWN0c01hcCIsImZpZWxkIiwic2lkZUVmZmVjdHNNYXAiLCJmaWVsZEdyb3VwSWRzIiwiZ2V0RmllbGRHcm91cElkcyIsInZpZXdFbnRpdHlTZXRTZXROYW1lIiwiZ2V0Vmlld0RhdGEiLCJlbnRpdHlTZXQiLCJ2aWV3RW50aXR5U2V0IiwiZ2V0Q29udmVydGVkTWV0YU1vZGVsIiwiZW50aXR5U2V0cyIsImZpbmQiLCJuYW1lIiwiZ2V0U2lkZUVmZmVjdHNNYXBGb3JGaWVsZEdyb3VwcyIsImdldEJpbmRpbmdDb250ZXh0Iiwidmlld0VudGl0eVR5cGUiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJmaWVsZFBhdGgiLCJnZXRUYXJnZXRQcm9wZXJ0eSIsImNvbnRleHQiLCJjb250cm9sU2lkZUVmZmVjdHNFbnRpdHlUeXBlIiwiZ2V0Q29udHJvbEVudGl0eVNpZGVFZmZlY3RzIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJzaWRlRWZmZWN0c05hbWUiLCJvQ29udHJvbFNpZGVFZmZlY3RzIiwic291cmNlUHJvcGVydGllcyIsImluY2x1ZGVzIiwiaW1tZWRpYXRlIiwic2lkZUVmZmVjdHMiLCJmaWVsZENvbnRleHQiLCJtU2lkZUVmZmVjdHNNYXAiLCJmaWVsZEdyb3VwSWQiLCJfZ2V0U2lkZUVmZmVjdHNQcm9wZXJ0eUZvckZpZWxkR3JvdXAiLCJvQ29udGV4dCIsImNsZWFyRmllbGRHcm91cHNWYWxpZGl0eSIsImlzRmllbGRHcm91cFZhbGlkIiwiaWQiLCJfZ2V0RmllbGRHcm91cEluZGV4IiwibGVuZ3RoIiwiZGF0YSIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwidmlld0JpbmRpbmdQYXRoIiwiZ2V0UGF0aCIsInZpZXdNZXRhTW9kZWxQYXRoIiwiZ2V0TWV0YVBhdGgiLCJyZXBsYWNlIiwicHJlcGFyZURlZmVycmVkU2lkZUVmZmVjdHNGb3JGaWVsZCIsImV2ZW50IiwiZmllbGRWYWxpZGl0eSIsImZpZWxkR3JvdXBQcmVSZXF1aXNpdGUiLCJnZXRTb3VyY2UiLCJfc2F2ZUZpZWxkUHJvcGVydGllc1N0YXR1cyIsImZpbHRlciIsInNpZGVFZmZlY3RzUHJvcGVydGllcyIsInJlZ2lzdGVyRmllbGRHcm91cFNpZGVFZmZlY3RzIiwiaGFuZGxlRmllbGRDaGFuZ2UiLCJza2lwRGVmZXJyZWRSZWdpc3RyYXRpb24iLCJfbWFuYWdlU2lkZUVmZmVjdHNGcm9tRmllbGQiLCJoYW5kbGVGaWVsZEdyb3VwQ2hhbmdlIiwiZ2V0UGFyYW1ldGVyIiwiZmllbGRHcm91cHNTaWRlRWZmZWN0cyIsInJlZHVjZSIsInJlc3VsdHMiLCJjb25jYXQiLCJnZXRSZWdpc3RlcmVkU2lkZUVmZmVjdHNGb3JGaWVsZEdyb3VwIiwiUHJvbWlzZSIsImFsbCIsIm1hcCIsImZpZWxkR3JvdXBTaWRlRWZmZWN0cyIsIl9yZXF1ZXN0RmllbGRHcm91cFNpZGVFZmZlY3RzIiwiY2F0Y2giLCJlcnJvciIsImNvbnRleHRQYXRoIiwiTG9nIiwiZGVidWciLCJyZXF1ZXN0U2lkZUVmZmVjdHMiLCJncm91cElkIiwiZm5HZXRUYXJnZXRzIiwiaWdub3JlVHJpZ2dlckFjdGlvbnMiLCJmblRyaWdnZXJDYWxsYmFja3MiLCJ0cmlnZ2VyQ2FsbGJhY2tzIiwiYmluZCIsInRhcmdldHMiLCJ0cmlnZ2VyQWN0aW9uIiwidGFyZ2V0RW50aXRpZXMiLCJ0YXJnZXRQcm9wZXJ0aWVzIiwiaXNDb250cm9sU2lkZUVmZmVjdHMiLCJleGVjdXRlQWN0aW9uIiwidGhlbiIsImFzeW5jIiwidGFyZ2V0IiwiJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJyZWdpc3RlckZhaWxlZFNpZGVFZmZlY3RzIiwicmVxdWVzdFNpZGVFZmZlY3RzRm9yRXZlbnQiLCJldmVudE5hbWUiLCJwYXRoIiwiaXNEYXRhUGF0aFJlbGV2YW50IiwiX2ZpbmRSZWxldmFudENvbnRleHQiLCJfY29udGV4dElzUmVsZXZhbnQiLCJnZXRDYW5vbmljYWxQYXRoIiwiZGVwZW5kZW50QmluZGluZ3MiLCJnZXREZXBlbmRlbnRCaW5kaW5ncyIsImJpbmRpbmciLCJnZXRCb3VuZENvbnRleHQiLCJsaXN0Q29udGV4dHMiLCJnZXRBbGxDdXJyZW50Q29udGV4dHMiLCJsaXN0Q29udGV4dCIsImdldERhdGFSZWZyZXNoVGV4dCIsInJlc291cmNlTW9kZWwiLCJnZXRSZXNvdXJjZU1vZGVsIiwiZ2V0VGV4dCIsIm5vdGlmeURhdGFSZWZyZXNoIiwiTWVzc2FnZVRvYXN0Iiwic2hvdyIsImdldENvbnRyb2xsZXIiLCJfc2lkZUVmZmVjdHMiLCJjb25maXJtRGF0YVJlZnJlc2giLCJpc0NvbmZpcm1hdGlvbkRpYWxvZ09wZW4iLCJyZXNvbHZlIiwicmVqZWN0IiwidGV4dCIsImNvbmZpcm1hdGlvbkRpYWxvZyIsIkRpYWxvZyIsInRpdGxlIiwic3RhdGUiLCJjb250ZW50IiwiVGV4dCIsImJlZ2luQnV0dG9uIiwiQnV0dG9uIiwicHJlc3MiLCJjbG9zZSIsImVuZEJ1dHRvbiIsImFmdGVyQ2xvc2UiLCJkZXN0cm95IiwiYWRkU3R5bGVDbGFzcyIsIm9wZW4iLCJyZXF1ZXN0TXVsdGlwbGVTaWRlRWZmZWN0cyIsIm11bHRpU2lkZUVmZmVjdHMiLCJwcm9wZXJ0aWVzIiwiU2V0IiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJhY3Rpb25zIiwic2lkZUVmZmVjdEFjdGlvbiIsInB1c2giLCJmbnRyaWdnZXJDYWxsYmFja3MiLCJhY3Rpb24iLCJteVNldCIsInByb3BlcnR5IiwiYWRkIiwibmF2aWdhdGlvblByb3BlcnR5IiwiQXJyYXkiLCJmcm9tIiwiZ2V0UmVnaXN0ZXJlZEZhaWxlZFJlcXVlc3RzIiwiaXNOb3RBbHJlYWR5TGlzdGVkIiwiZXZlcnkiLCJtRmFpbGVkU2lkZUVmZmVjdHMiLCJ1bnJlZ2lzdGVyRmFpbGVkU2lkZUVmZmVjdHNGb3JBQ29udGV4dCIsInVucmVnaXN0ZXJGYWlsZWRTaWRlRWZmZWN0cyIsInNpZGVFZmZlY3RzRnVsbHlRdWFsaWZpZWROYW1lIiwicHJvbWlzZSIsInNpZGVFZmZlY3RQcm9wZXJ0eSIsInVucmVnaXN0ZXJGaWVsZEdyb3VwU2lkZUVmZmVjdHMiLCJyZWdpc3RyeUluZGV4Iiwic3RhcnRzV2l0aCIsInNpZGVFZmZlY3RQYXJ0cyIsInNwbGl0Iiwic2lkZUVmZmVjdFBhdGgiLCJnZXRPRGF0YUVudGl0eVNpZGVFZmZlY3RzIiwic2lkZUVmZmVjdHNUb0V4ZWN1dGUiLCJhZGRTaWRlRWZmZWN0cyIsInZhbHVlcyIsImZhaWxlZFNpZGVFZmZlY3RzIiwiZmFpbGVkU2lkZUVmZmVjdCIsImUiLCJuYXZpZ2F0aW9uIiwibmF2IiwicmVnaXN0ZXJDYWxsQmFjayIsImdldFJlZ2lzdGVyZWRDYWxsYmFjayIsInN1Y2Nlc3MiLCJrZXkiLCJDb250cm9sbGVyRXh0ZW5zaW9uIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJTaWRlRWZmZWN0cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgRkVWaWV3IH0gZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgeyBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IHR5cGUge1xuXHRDb250cm9sU2lkZUVmZmVjdHNUeXBlLFxuXHRPRGF0YVNpZGVFZmZlY3RzVHlwZSxcblx0U2lkZUVmZmVjdHNTZXJ2aWNlLFxuXHRTaWRlRWZmZWN0c1RhcmdldCxcblx0U2lkZUVmZmVjdHNUeXBlXG59IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9TaWRlRWZmZWN0c1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBEaWFsb2cgZnJvbSBcInNhcC9tL0RpYWxvZ1wiO1xuaW1wb3J0IE1lc3NhZ2VUb2FzdCBmcm9tIFwic2FwL20vTWVzc2FnZVRvYXN0XCI7XG5pbXBvcnQgdHlwZSB7IFJhZGlvQnV0dG9uR3JvdXAkU2VsZWN0RXZlbnQgfSBmcm9tIFwic2FwL20vUmFkaW9CdXR0b25Hcm91cFwiO1xuaW1wb3J0IFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgeyBDb250cm9sJFZhbGlkYXRlRmllbGRHcm91cEV2ZW50IH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDb250cm9sbGVyRXh0ZW5zaW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvQ29udHJvbGxlckV4dGVuc2lvblwiO1xuaW1wb3J0IE92ZXJyaWRlRXhlY3V0aW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvT3ZlcnJpZGVFeGVjdXRpb25cIjtcbmltcG9ydCB0eXBlIHsgRmllbGQkQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL3VpL21kYy9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgeyBNdWx0aVZhbHVlRmllbGQkQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL3VpL21kYy9NdWx0aVZhbHVlRmllbGRcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUNvbnRleHRCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFDb250ZXh0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwiLi4vQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCIuLi9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlTWFuaWZlc3RTZXR0aW5ncyB9IGZyb20gXCIuLi9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCBleHRlbnNpYmxlLCBmaW5hbEV4dGVuc2lvbiwgbWV0aG9kT3ZlcnJpZGUsIHByaXZhdGVFeHRlbnNpb24sIHB1YmxpY0V4dGVuc2lvbiB9IGZyb20gXCIuLi9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuXG50eXBlIEJhc2VTaWRlRWZmZWN0UHJvcGVydHlUeXBlID0ge1xuXHRuYW1lOiBzdHJpbmc7XG5cdGltbWVkaWF0ZT86IGJvb2xlYW47XG5cdHNpZGVFZmZlY3RzOiBTaWRlRWZmZWN0c1R5cGU7XG59O1xuXG5leHBvcnQgdHlwZSBGaWVsZFNpZGVFZmZlY3RQcm9wZXJ0eVR5cGUgPSBCYXNlU2lkZUVmZmVjdFByb3BlcnR5VHlwZSAmIHtcblx0Y29udGV4dDogQ29udGV4dDtcbn07XG5cbmV4cG9ydCB0eXBlIEZpZWxkU2lkZUVmZmVjdERpY3Rpb25hcnkgPSBSZWNvcmQ8c3RyaW5nLCBGaWVsZFNpZGVFZmZlY3RQcm9wZXJ0eVR5cGU+O1xuXG5leHBvcnQgdHlwZSBNYXNzRWRpdEZpZWxkU2lkZUVmZmVjdERpY3Rpb25hcnkgPSBSZWNvcmQ8c3RyaW5nLCBCYXNlU2lkZUVmZmVjdFByb3BlcnR5VHlwZT47XG5cbnR5cGUgRmFpbGVkU2lkZUVmZmVjdERpY3Rpb25hcnkgPSBSZWNvcmQ8c3RyaW5nLCBTaWRlRWZmZWN0c1R5cGVbXT47XG5cbmV4cG9ydCB0eXBlIEZpZWxkR3JvdXBTaWRlRWZmZWN0VHlwZSA9IHtcblx0cHJvbWlzZTogUHJvbWlzZTx1bmtub3duPjtcblx0c2lkZUVmZmVjdFByb3BlcnR5OiBGaWVsZFNpZGVFZmZlY3RQcm9wZXJ0eVR5cGU7XG59O1xuXG5jb25zdCBJTU1FRElBVEVfUkVRVUVTVCA9IFwiJCRJbW1lZGlhdGVSZXF1ZXN0XCI7XG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5TaWRlRWZmZWN0c1wiKVxuY2xhc3MgU2lkZUVmZmVjdHNDb250cm9sbGVyRXh0ZW5zaW9uIGV4dGVuZHMgQ29udHJvbGxlckV4dGVuc2lvbiB7XG5cdHByb3RlY3RlZCBiYXNlITogUGFnZUNvbnRyb2xsZXI7XG5cblx0cHJpdmF0ZSBfdmlldyE6IEZFVmlldztcblxuXHRwcml2YXRlIF9yZWdpc3RlcmVkRmllbGRHcm91cE1hcCE6IFJlY29yZDxzdHJpbmcsIEZpZWxkR3JvdXBTaWRlRWZmZWN0VHlwZT47XG5cblx0cHJpdmF0ZSBfZmllbGRHcm91cEludmFsaWRpdHkhOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPj47XG5cblx0cHJpdmF0ZSBfc2lkZUVmZmVjdHNTZXJ2aWNlITogU2lkZUVmZmVjdHNTZXJ2aWNlO1xuXG5cdHByaXZhdGUgX3JlZ2lzdGVyZWRGYWlsZWRTaWRlRWZmZWN0cyE6IEZhaWxlZFNpZGVFZmZlY3REaWN0aW9uYXJ5O1xuXG5cdHByaXZhdGUgaXNDb25maXJtYXRpb25EaWFsb2dPcGVuPzogYm9vbGVhbjtcblxuXHRAbWV0aG9kT3ZlcnJpZGUoKVxuXHRvbkluaXQoKTogdm9pZCB7XG5cdFx0dGhpcy5fdmlldyA9IHRoaXMuYmFzZS5nZXRWaWV3KCk7XG5cdFx0dGhpcy5fc2lkZUVmZmVjdHNTZXJ2aWNlID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuX3ZpZXcpLmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXHRcdHRoaXMuX3JlZ2lzdGVyZWRGaWVsZEdyb3VwTWFwID0ge307XG5cdFx0dGhpcy5fZmllbGRHcm91cEludmFsaWRpdHkgPSB7fTtcblx0XHR0aGlzLl9yZWdpc3RlcmVkRmFpbGVkU2lkZUVmZmVjdHMgPSB7fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIGEgU2lkZUVmZmVjdHMgY29udHJvbC5cblx0ICpcblx0ICogQHBhcmFtIGVudGl0eVR5cGUgTmFtZSBvZiB0aGUgZW50aXR5IHdoZXJlIHRoZSBTaWRlRWZmZWN0cyBjb250cm9sIHdpbGwgYmUgcmVnaXN0ZXJlZFxuXHQgKiBAcGFyYW0gY29udHJvbFNpZGVFZmZlY3RzIFNpZGVFZmZlY3RzIHRvIHJlZ2lzdGVyLiBFbnN1cmUgdGhlIHNvdXJjZUNvbnRyb2xJZCBtYXRjaGVzIHRoZSBhc3NvY2lhdGVkIFNBUFVJNSBjb250cm9sIElELlxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFkZENvbnRyb2xTaWRlRWZmZWN0cyhlbnRpdHlUeXBlOiBzdHJpbmcsIGNvbnRyb2xTaWRlRWZmZWN0czogT21pdDxDb250cm9sU2lkZUVmZmVjdHNUeXBlLCBcImZ1bGx5UXVhbGlmaWVkTmFtZVwiPik6IHZvaWQge1xuXHRcdHRoaXMuX3NpZGVFZmZlY3RzU2VydmljZS5hZGRDb250cm9sU2lkZUVmZmVjdHMoZW50aXR5VHlwZSwgY29udHJvbFNpZGVFZmZlY3RzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIFNpZGVFZmZlY3RzIGNyZWF0ZWQgYnkgYSBjb250cm9sLlxuXHQgKlxuXHQgKiBAcGFyYW0gY29udHJvbCBTQVBVSTUgQ29udHJvbFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdHJlbW92ZUNvbnRyb2xTaWRlRWZmZWN0cyhjb250cm9sOiBDb250cm9sKTogdm9pZCB7XG5cdFx0Y29uc3QgY29udHJvbElkID0gY29udHJvbC5pc0E/LihcInNhcC51aS5iYXNlLk1hbmFnZWRPYmplY3RcIikgJiYgY29udHJvbC5nZXRJZCgpO1xuXG5cdFx0aWYgKGNvbnRyb2xJZCkge1xuXHRcdFx0dGhpcy5fc2lkZUVmZmVjdHNTZXJ2aWNlLnJlbW92ZUNvbnRyb2xTaWRlRWZmZWN0cyhjb250cm9sSWQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBhcHByb3ByaWF0ZSBjb250ZXh0IG9uIHdoaWNoIFNpZGVFZmZlY3RzIGNhbiBiZSByZXF1ZXN0ZWQuXG5cdCAqIFRoZSBjb3JyZWN0IG9uZSBtdXN0IGhhdmUgdGhlIGJpbmRpbmcgcGFyYW1ldGVyICQkcGF0Y2hXaXRob3V0U2lkZUVmZmVjdHMuXG5cdCAqXG5cdCAqIEBwYXJhbSBiaW5kaW5nQ29udGV4dCBJbml0aWFsIGJpbmRpbmcgY29udGV4dFxuXHQgKiBAcGFyYW0gc2lkZUVmZmVjdEVudGl0eVR5cGUgRW50aXR5VHlwZSBvZiB0aGUgc2lkZUVmZmVjdHNcblx0ICogQHJldHVybnMgU0FQVUk1IENvbnRleHQgb3IgdW5kZWZpbmVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0Z2V0Q29udGV4dEZvclNpZGVFZmZlY3RzKGJpbmRpbmdDb250ZXh0OiBDb250ZXh0LCBzaWRlRWZmZWN0RW50aXR5VHlwZTogc3RyaW5nKTogQ29udGV4dCB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IGNvbnRleHRGb3JTaWRlRWZmZWN0cyA9IGJpbmRpbmdDb250ZXh0LFxuXHRcdFx0ZW50aXR5VHlwZSA9IHRoaXMuX3NpZGVFZmZlY3RzU2VydmljZS5nZXRFbnRpdHlUeXBlRnJvbUNvbnRleHQoYmluZGluZ0NvbnRleHQpO1xuXG5cdFx0aWYgKHNpZGVFZmZlY3RFbnRpdHlUeXBlICE9PSBlbnRpdHlUeXBlKSB7XG5cdFx0XHRjb250ZXh0Rm9yU2lkZUVmZmVjdHMgPSBiaW5kaW5nQ29udGV4dC5nZXRCaW5kaW5nKCkuZ2V0Q29udGV4dCgpIGFzIENvbnRleHQ7XG5cdFx0XHRpZiAoY29udGV4dEZvclNpZGVFZmZlY3RzKSB7XG5cdFx0XHRcdGVudGl0eVR5cGUgPSB0aGlzLl9zaWRlRWZmZWN0c1NlcnZpY2UuZ2V0RW50aXR5VHlwZUZyb21Db250ZXh0KGNvbnRleHRGb3JTaWRlRWZmZWN0cyk7XG5cdFx0XHRcdGlmIChzaWRlRWZmZWN0RW50aXR5VHlwZSAhPT0gZW50aXR5VHlwZSkge1xuXHRcdFx0XHRcdGNvbnRleHRGb3JTaWRlRWZmZWN0cyA9IGNvbnRleHRGb3JTaWRlRWZmZWN0cy5nZXRCaW5kaW5nKCkuZ2V0Q29udGV4dCgpIGFzIENvbnRleHQ7XG5cdFx0XHRcdFx0aWYgKGNvbnRleHRGb3JTaWRlRWZmZWN0cykge1xuXHRcdFx0XHRcdFx0ZW50aXR5VHlwZSA9IHRoaXMuX3NpZGVFZmZlY3RzU2VydmljZS5nZXRFbnRpdHlUeXBlRnJvbUNvbnRleHQoY29udGV4dEZvclNpZGVFZmZlY3RzKTtcblx0XHRcdFx0XHRcdGlmIChzaWRlRWZmZWN0RW50aXR5VHlwZSAhPT0gZW50aXR5VHlwZSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjb250ZXh0Rm9yU2lkZUVmZmVjdHMgfHwgdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIFNpZGVFZmZlY3RzIG1hcCBmb3IgYSBmaWVsZFxuXHQgKiBUaGVzZSBTaWRlRWZmZWN0cyBhcmVcblx0ICogLSBsaXN0ZWQgaW50byBGaWVsZEdyb3VwSWRzIChjb21pbmcgZnJvbSBhbiBPRGF0YSBTZXJ2aWNlKVxuXHQgKiAtIGdlbmVyYXRlZCBieSBhIGNvbnRyb2wgb3IgY29udHJvbHMgYW5kIHRoYXQgY29uZmlndXJlIHRoaXMgZmllbGQgYXMgU291cmNlUHJvcGVydGllcy5cblx0ICpcblx0ICogQHBhcmFtIGZpZWxkIEZpZWxkIGNvbnRyb2xcblx0ICogQHJldHVybnMgU2lkZUVmZmVjdHMgbWFwXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0Z2V0RmllbGRTaWRlRWZmZWN0c01hcChmaWVsZDogQ29udHJvbCk6IEZpZWxkU2lkZUVmZmVjdERpY3Rpb25hcnkge1xuXHRcdGxldCBzaWRlRWZmZWN0c01hcDogRmllbGRTaWRlRWZmZWN0RGljdGlvbmFyeSA9IHt9O1xuXHRcdGNvbnN0IGZpZWxkR3JvdXBJZHMgPSBmaWVsZC5nZXRGaWVsZEdyb3VwSWRzKCksXG5cdFx0XHR2aWV3RW50aXR5U2V0U2V0TmFtZSA9ICh0aGlzLl92aWV3LmdldFZpZXdEYXRhKCkgYXMgQmFzZU1hbmlmZXN0U2V0dGluZ3MpLmVudGl0eVNldCxcblx0XHRcdHZpZXdFbnRpdHlTZXQgPSB0aGlzLl9zaWRlRWZmZWN0c1NlcnZpY2UuZ2V0Q29udmVydGVkTWV0YU1vZGVsKCkuZW50aXR5U2V0cy5maW5kKChlbnRpdHlTZXQpID0+IHtcblx0XHRcdFx0cmV0dXJuIGVudGl0eVNldC5uYW1lID09PSB2aWV3RW50aXR5U2V0U2V0TmFtZTtcblx0XHRcdH0pO1xuXG5cdFx0Ly8gU2lkZUVmZmVjdHMgY29taW5nIGZyb20gYW4gT0RhdGEgU2VydmljZVxuXHRcdHNpZGVFZmZlY3RzTWFwID0gdGhpcy5nZXRTaWRlRWZmZWN0c01hcEZvckZpZWxkR3JvdXBzKFxuXHRcdFx0ZmllbGRHcm91cElkcyxcblx0XHRcdGZpZWxkLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dCB8IG51bGwgfCB1bmRlZmluZWRcblx0XHQpIGFzIEZpZWxkU2lkZUVmZmVjdERpY3Rpb25hcnk7XG5cblx0XHQvLyBTaWRlRWZmZWN0cyBjb21pbmcgZnJvbSBjb250cm9sKHMpXG5cdFx0aWYgKHZpZXdFbnRpdHlTZXRTZXROYW1lICYmIHZpZXdFbnRpdHlTZXQpIHtcblx0XHRcdGNvbnN0IHZpZXdFbnRpdHlUeXBlID0gdmlld0VudGl0eVNldC5lbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZSxcblx0XHRcdFx0ZmllbGRQYXRoID0gdGhpcy5nZXRUYXJnZXRQcm9wZXJ0eShmaWVsZCksXG5cdFx0XHRcdGNvbnRleHQgPSB0aGlzLmdldENvbnRleHRGb3JTaWRlRWZmZWN0cyhmaWVsZC5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQsIHZpZXdFbnRpdHlUeXBlKTtcblxuXHRcdFx0aWYgKGZpZWxkUGF0aCAmJiBjb250ZXh0KSB7XG5cdFx0XHRcdGNvbnN0IGNvbnRyb2xTaWRlRWZmZWN0c0VudGl0eVR5cGUgPSB0aGlzLl9zaWRlRWZmZWN0c1NlcnZpY2UuZ2V0Q29udHJvbEVudGl0eVNpZGVFZmZlY3RzKHZpZXdFbnRpdHlUeXBlKTtcblx0XHRcdFx0T2JqZWN0LmtleXMoY29udHJvbFNpZGVFZmZlY3RzRW50aXR5VHlwZSkuZm9yRWFjaCgoc2lkZUVmZmVjdHNOYW1lKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgb0NvbnRyb2xTaWRlRWZmZWN0cyA9IGNvbnRyb2xTaWRlRWZmZWN0c0VudGl0eVR5cGVbc2lkZUVmZmVjdHNOYW1lXTtcblx0XHRcdFx0XHRpZiAob0NvbnRyb2xTaWRlRWZmZWN0cy5zb3VyY2VQcm9wZXJ0aWVzLmluY2x1ZGVzKGZpZWxkUGF0aCkpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG5hbWUgPSBgJHtzaWRlRWZmZWN0c05hbWV9Ojoke3ZpZXdFbnRpdHlUeXBlfWA7XG5cdFx0XHRcdFx0XHRzaWRlRWZmZWN0c01hcFtuYW1lXSA9IHtcblx0XHRcdFx0XHRcdFx0bmFtZTogbmFtZSxcblx0XHRcdFx0XHRcdFx0aW1tZWRpYXRlOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRzaWRlRWZmZWN0czogb0NvbnRyb2xTaWRlRWZmZWN0cyxcblx0XHRcdFx0XHRcdFx0Y29udGV4dDogY29udGV4dFxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gc2lkZUVmZmVjdHNNYXA7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgc2lkZUVmZmVjdHMgbWFwIGZvciBmaWVsZEdyb3Vwcy5cblx0ICpcblx0ICogQHBhcmFtIGZpZWxkR3JvdXBJZHMgRmllbGQgZ3JvdXAgaWRzXG5cdCAqIEBwYXJhbSBmaWVsZENvbnRleHQgRmllbGQgYmluZGluZyBjb250ZXh0XG5cdCAqIEByZXR1cm5zIFNpZGVFZmZlY3RzIG1hcFxuXHQgKi9cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0Z2V0U2lkZUVmZmVjdHNNYXBGb3JGaWVsZEdyb3Vwcyhcblx0XHRmaWVsZEdyb3VwSWRzOiBzdHJpbmdbXSxcblx0XHRmaWVsZENvbnRleHQ/OiBDb250ZXh0IHwgbnVsbFxuXHQpOiBNYXNzRWRpdEZpZWxkU2lkZUVmZmVjdERpY3Rpb25hcnkgfCBGaWVsZFNpZGVFZmZlY3REaWN0aW9uYXJ5IHtcblx0XHRjb25zdCBtU2lkZUVmZmVjdHNNYXA6IE1hc3NFZGl0RmllbGRTaWRlRWZmZWN0RGljdGlvbmFyeSB8IEZpZWxkU2lkZUVmZmVjdERpY3Rpb25hcnkgPSB7fTtcblx0XHRmaWVsZEdyb3VwSWRzLmZvckVhY2goKGZpZWxkR3JvdXBJZCkgPT4ge1xuXHRcdFx0Y29uc3QgeyBuYW1lLCBpbW1lZGlhdGUsIHNpZGVFZmZlY3RzLCBzaWRlRWZmZWN0RW50aXR5VHlwZSB9ID0gdGhpcy5fZ2V0U2lkZUVmZmVjdHNQcm9wZXJ0eUZvckZpZWxkR3JvdXAoZmllbGRHcm91cElkKTtcblx0XHRcdGNvbnN0IG9Db250ZXh0ID0gZmllbGRDb250ZXh0ID8gKHRoaXMuZ2V0Q29udGV4dEZvclNpZGVFZmZlY3RzKGZpZWxkQ29udGV4dCwgc2lkZUVmZmVjdEVudGl0eVR5cGUpIGFzIENvbnRleHQpIDogdW5kZWZpbmVkO1xuXHRcdFx0aWYgKHNpZGVFZmZlY3RzICYmICghZmllbGRDb250ZXh0IHx8IChmaWVsZENvbnRleHQgJiYgb0NvbnRleHQpKSkge1xuXHRcdFx0XHRtU2lkZUVmZmVjdHNNYXBbbmFtZV0gPSB7XG5cdFx0XHRcdFx0bmFtZSxcblx0XHRcdFx0XHRpbW1lZGlhdGUsXG5cdFx0XHRcdFx0c2lkZUVmZmVjdHNcblx0XHRcdFx0fTtcblx0XHRcdFx0aWYgKGZpZWxkQ29udGV4dCkge1xuXHRcdFx0XHRcdChtU2lkZUVmZmVjdHNNYXBbbmFtZV0gYXMgRmllbGRTaWRlRWZmZWN0UHJvcGVydHlUeXBlKS5jb250ZXh0ID0gb0NvbnRleHQhO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIG1TaWRlRWZmZWN0c01hcDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbGVhciByZWNvcmRlZCB2YWxpZGF0aW9uIHN0YXR1cyBmb3IgYWxsIHByb3BlcnRpZXMuXG5cdCAqXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0Y2xlYXJGaWVsZEdyb3Vwc1ZhbGlkaXR5KCk6IHZvaWQge1xuXHRcdHRoaXMuX2ZpZWxkR3JvdXBJbnZhbGlkaXR5ID0ge307XG5cdH1cblxuXHQvKipcblx0ICogQ2xlYXIgcmVjb3JkZWQgdmFsaWRhdGlvbiBzdGF0dXMgZm9yIGFsbCBwcm9wZXJ0aWVzLlxuXHQgKlxuXHQgKiBAcGFyYW0gZmllbGRHcm91cElkIEZpZWxkIGdyb3VwIGlkXG5cdCAqIEBwYXJhbSBjb250ZXh0IENvbnRleHRcblx0ICogQHJldHVybnMgU0FQVUk1IENvbnRleHQgb3IgdW5kZWZpbmVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0aXNGaWVsZEdyb3VwVmFsaWQoZmllbGRHcm91cElkOiBzdHJpbmcsIGNvbnRleHQ6IENvbnRleHQpOiBib29sZWFuIHtcblx0XHRjb25zdCBpZCA9IHRoaXMuX2dldEZpZWxkR3JvdXBJbmRleChmaWVsZEdyb3VwSWQsIGNvbnRleHQpO1xuXHRcdHJldHVybiBPYmplY3Qua2V5cyh0aGlzLl9maWVsZEdyb3VwSW52YWxpZGl0eVtpZF0gPz8ge30pLmxlbmd0aCA9PT0gMDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSByZWxhdGl2ZSB0YXJnZXQgcHJvcGVydHkgcmVsYXRlZCB0byB0aGUgRmllbGQuXG5cdCAqXG5cdCAqIEBwYXJhbSBmaWVsZCBGaWVsZCBjb250cm9sXG5cdCAqIEByZXR1cm5zIFJlbGF0aXZlIHRhcmdldCBwcm9wZXJ0eVxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGdldFRhcmdldFByb3BlcnR5KGZpZWxkOiBDb250cm9sKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBmaWVsZFBhdGggPSBmaWVsZC5kYXRhKFwic291cmNlUGF0aFwiKSBhcyBzdHJpbmc7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gdGhpcy5fdmlldy5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IHZpZXdCaW5kaW5nUGF0aCA9IHRoaXMuX3ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IHZpZXdNZXRhTW9kZWxQYXRoID0gdmlld0JpbmRpbmdQYXRoID8gYCR7bWV0YU1vZGVsLmdldE1ldGFQYXRoKHZpZXdCaW5kaW5nUGF0aCl9L2AgOiBcIlwiO1xuXHRcdHJldHVybiBmaWVsZFBhdGg/LnJlcGxhY2Uodmlld01ldGFNb2RlbFBhdGgsIFwiXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENhY2hlcyBkZWZlcnJlZCBTaWRlRWZmZWN0cyB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiB0aGUgRmllbGRHcm91cCBpcyB1bmZvY3VzZWQuXG5cdCAqXG5cdCAqIEBwYXJhbSBldmVudCBTQVBVSTUgZXZlbnQgdGhhdCBjb21lcyBmcm9tIGEgZmllbGQgY2hhbmdlXG5cdCAqIEBwYXJhbSBmaWVsZFZhbGlkaXR5XG5cdCAqIEBwYXJhbSBmaWVsZEdyb3VwUHJlUmVxdWlzaXRlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkIGJlZm9yZSBleGVjdXRpbmcgZGVmZXJyZWQgU2lkZUVmZmVjdHNcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRwcmVwYXJlRGVmZXJyZWRTaWRlRWZmZWN0c0ZvckZpZWxkKFxuXHRcdGV2ZW50OiBGaWVsZCRDaGFuZ2VFdmVudCB8IE11bHRpVmFsdWVGaWVsZCRDaGFuZ2VFdmVudCB8IFJhZGlvQnV0dG9uR3JvdXAkU2VsZWN0RXZlbnQsXG5cdFx0ZmllbGRWYWxpZGl0eTogYm9vbGVhbixcblx0XHRmaWVsZEdyb3VwUHJlUmVxdWlzaXRlPzogUHJvbWlzZTx1bmtub3duPlxuXHQpOiB2b2lkIHtcblx0XHRjb25zdCBmaWVsZCA9IChldmVudCBhcyBVSTVFdmVudDx7fSwgQ29udHJvbD4pLmdldFNvdXJjZSgpO1xuXHRcdHRoaXMuX3NhdmVGaWVsZFByb3BlcnRpZXNTdGF0dXMoZmllbGQsIGZpZWxkVmFsaWRpdHkpO1xuXHRcdGlmICghZmllbGRWYWxpZGl0eSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBzaWRlRWZmZWN0c01hcCA9IHRoaXMuZ2V0RmllbGRTaWRlRWZmZWN0c01hcChmaWVsZCk7XG5cblx0XHQvLyByZWdpc3RlciBmaWVsZCBncm91cCBTaWRlRWZmZWN0c1xuXHRcdE9iamVjdC5rZXlzKHNpZGVFZmZlY3RzTWFwKVxuXHRcdFx0LmZpbHRlcigoc2lkZUVmZmVjdHNOYW1lKSA9PiBzaWRlRWZmZWN0c01hcFtzaWRlRWZmZWN0c05hbWVdLmltbWVkaWF0ZSAhPT0gdHJ1ZSlcblx0XHRcdC5mb3JFYWNoKChzaWRlRWZmZWN0c05hbWUpID0+IHtcblx0XHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNQcm9wZXJ0aWVzID0gc2lkZUVmZmVjdHNNYXBbc2lkZUVmZmVjdHNOYW1lXTtcblx0XHRcdFx0dGhpcy5yZWdpc3RlckZpZWxkR3JvdXBTaWRlRWZmZWN0cyhzaWRlRWZmZWN0c1Byb3BlcnRpZXMsIGZpZWxkR3JvdXBQcmVSZXF1aXNpdGUpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogTWFuYWdlcyB0aGUgd29ya2Zsb3cgZm9yIFNpZGVFZmZlY3RzIHdpdGggcmVsYXRlZCBjaGFuZ2VzIHRvIGEgZmllbGRcblx0ICogVGhlIGZvbGxvd2luZyBzY2VuYXJpb3MgYXJlIG1hbmFnZWQ6XG5cdCAqICAtIFJlZ2lzdGVyOiBjYWNoZXMgZGVmZXJyZWQgU2lkZUVmZmVjdHMgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIEZpZWxkR3JvdXAgaXMgdW5mb2N1c2VkXG5cdCAqICAtIEV4ZWN1dGU6IHRyaWdnZXJzIGltbWVkaWF0ZSBTaWRlRWZmZWN0cyByZXF1ZXN0cyBpZiB0aGUgcHJvbWlzZSBmb3IgdGhlIGZpZWxkIGV2ZW50IGlzIGZ1bGZpbGxlZC5cblx0ICpcblx0ICogQHBhcmFtIGV2ZW50IFNBUFVJNSBldmVudCB0aGF0IGNvbWVzIGZyb20gYSBmaWVsZCBjaGFuZ2Vcblx0ICogQHBhcmFtIGZpZWxkVmFsaWRpdHlcblx0ICogQHBhcmFtIGZpZWxkR3JvdXBQcmVSZXF1aXNpdGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWQgYmVmb3JlIGV4ZWN1dGluZyBkZWZlcnJlZCBTaWRlRWZmZWN0c1xuXHQgKiBAcGFyYW0gc2tpcERlZmVycmVkUmVnaXN0cmF0aW9uIElmIHRydWUgdGhlbiBkZWZlcnJlZCBzaWRlIGVmZmVjdHMgYXJlIG5vdCByZWdpc3RlcmVkLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHRoZSByZWdpc3RyYXRpb24gb2YgZGVmZXJyZWQgc2lkZSBlZmZlY3RzIGFuZCB0cmlnZ2VyaW5nIG5lZWRzIHRvIGJlIGRvbmUgc2VwYXJhdGVseS5cblx0ICogQHJldHVybnMgIFByb21pc2Ugb24gU2lkZUVmZmVjdHMgcmVxdWVzdChzKVxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFzeW5jIGhhbmRsZUZpZWxkQ2hhbmdlKFxuXHRcdGV2ZW50OiBGaWVsZCRDaGFuZ2VFdmVudCB8IE11bHRpVmFsdWVGaWVsZCRDaGFuZ2VFdmVudCB8IFJhZGlvQnV0dG9uR3JvdXAkU2VsZWN0RXZlbnQsXG5cdFx0ZmllbGRWYWxpZGl0eTogYm9vbGVhbixcblx0XHRmaWVsZEdyb3VwUHJlUmVxdWlzaXRlPzogUHJvbWlzZTx1bmtub3duPixcblx0XHRza2lwRGVmZXJyZWRSZWdpc3RyYXRpb24gPSBmYWxzZVxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBmaWVsZCA9IChldmVudCBhcyBVSTVFdmVudDx7fSwgQ29udHJvbD4pLmdldFNvdXJjZSgpO1xuXHRcdGlmICghc2tpcERlZmVycmVkUmVnaXN0cmF0aW9uKSB7XG5cdFx0XHR0aGlzLnByZXBhcmVEZWZlcnJlZFNpZGVFZmZlY3RzRm9yRmllbGQoZXZlbnQsIGZpZWxkVmFsaWRpdHksIGZpZWxkR3JvdXBQcmVSZXF1aXNpdGUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLl9zYXZlRmllbGRQcm9wZXJ0aWVzU3RhdHVzKGZpZWxkLCBmaWVsZFZhbGlkaXR5KTtcblx0XHRcdGlmICghZmllbGRWYWxpZGl0eSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLl9tYW5hZ2VTaWRlRWZmZWN0c0Zyb21GaWVsZChmaWVsZCk7XG5cdH1cblxuXHQvKipcblx0ICogTWFuYWdlcyBTaWRlRWZmZWN0cyB3aXRoIGEgcmVsYXRlZCAnZm9jdXMgb3V0JyB0byBhIGZpZWxkIGdyb3VwLlxuXHQgKlxuXHQgKiBAcGFyYW0gZXZlbnQgU0FQVUk1IEV2ZW50XG5cdCAqIEByZXR1cm5zIFByb21pc2UgcmV0dXJuaW5nIHRydWUgaWYgdGhlIFNpZGVFZmZlY3RzIGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRhc3luYyBoYW5kbGVGaWVsZEdyb3VwQ2hhbmdlKGV2ZW50OiBDb250cm9sJFZhbGlkYXRlRmllbGRHcm91cEV2ZW50KTogUHJvbWlzZTx2b2lkIHwgdm9pZFtdPiB7XG5cdFx0Y29uc3QgZmllbGQgPSBldmVudC5nZXRTb3VyY2UoKSxcblx0XHRcdGZpZWxkR3JvdXBJZHM6IHN0cmluZ1tdID0gZXZlbnQuZ2V0UGFyYW1ldGVyKFwiZmllbGRHcm91cElkc1wiKSA/PyBbXSxcblx0XHRcdGZpZWxkR3JvdXBzU2lkZUVmZmVjdHMgPSBmaWVsZEdyb3VwSWRzLnJlZHVjZSgocmVzdWx0czogRmllbGRHcm91cFNpZGVFZmZlY3RUeXBlW10sIGZpZWxkR3JvdXBJZCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0cy5jb25jYXQodGhpcy5nZXRSZWdpc3RlcmVkU2lkZUVmZmVjdHNGb3JGaWVsZEdyb3VwKGZpZWxkR3JvdXBJZCkpO1xuXHRcdFx0fSwgW10pO1xuXG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKFxuXHRcdFx0ZmllbGRHcm91cHNTaWRlRWZmZWN0cy5tYXAoYXN5bmMgKGZpZWxkR3JvdXBTaWRlRWZmZWN0cykgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fcmVxdWVzdEZpZWxkR3JvdXBTaWRlRWZmZWN0cyhmaWVsZEdyb3VwU2lkZUVmZmVjdHMpO1xuXHRcdFx0fSlcblx0XHQpLmNhdGNoKChlcnJvcikgPT4ge1xuXHRcdFx0Y29uc3QgY29udGV4dFBhdGggPSBmaWVsZC5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCk7XG5cdFx0XHRMb2cuZGVidWcoYEVycm9yIHdoaWxlIHByb2Nlc3NpbmcgRmllbGRHcm91cCBTaWRlRWZmZWN0cyBvbiBjb250ZXh0ICR7Y29udGV4dFBhdGh9YCwgZXJyb3IpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlcXVlc3QgU2lkZUVmZmVjdHMgb24gYSBzcGVjaWZpYyBjb250ZXh0LlxuXHQgKlxuXHQgKiBAcGFyYW0gc2lkZUVmZmVjdHMgU2lkZUVmZmVjdHMgdG8gYmUgZXhlY3V0ZWRcblx0ICogQHBhcmFtIGNvbnRleHQgQ29udGV4dCB3aGVyZSBTaWRlRWZmZWN0cyBuZWVkIHRvIGJlIGV4ZWN1dGVkXG5cdCAqIEBwYXJhbSBncm91cElkXG5cdCAqIEBwYXJhbSBmbkdldFRhcmdldHMgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdoaWNoIHdpbGwgZ2l2ZSB1cyB0aGUgdGFyZ2V0cyBhbmQgYWN0aW9ucyBpZiBpdCB3YXMgY29taW5nIHRocm91Z2ggc29tZSBzcGVjaWZpYyBoYW5kbGluZy5cblx0ICogQHBhcmFtIGlnbm9yZVRyaWdnZXJBY3Rpb25zIElmIHRydWUsIHdlIGRvIG5vdCB0cmlnZ2VyIGFjdGlvbnMgZGVmaW5lZCBpbiB0aGUgc2lkZSBlZmZlY3Rcblx0ICogQHJldHVybnMgU2lkZUVmZmVjdHMgcmVxdWVzdCBvbiBTQVBVSTUgY29udGV4dFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFzeW5jIHJlcXVlc3RTaWRlRWZmZWN0cyhcblx0XHRzaWRlRWZmZWN0czogU2lkZUVmZmVjdHNUeXBlLFxuXHRcdGNvbnRleHQ6IENvbnRleHQsXG5cdFx0Z3JvdXBJZD86IHN0cmluZyxcblx0XHRmbkdldFRhcmdldHM/OiAoc2lkZUVmZmVjdHNEZWY6IFNpZGVFZmZlY3RzVHlwZSkgPT4geyB0YXJnZXRzOiBTaWRlRWZmZWN0c1RhcmdldFtdOyB0cmlnZ2VyQWN0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQgfSxcblx0XHRpZ25vcmVUcmlnZ2VyQWN0aW9ucyA9IGZhbHNlXG5cdCk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdGNvbnN0IGZuVHJpZ2dlckNhbGxiYWNrcyA9IHRoaXMudHJpZ2dlckNhbGxiYWNrcy5iaW5kKHRoaXMpO1xuXHRcdGNvbnN0IHsgdGFyZ2V0cywgdHJpZ2dlckFjdGlvbiB9ID0gZm5HZXRUYXJnZXRzXG5cdFx0XHQ/IGZuR2V0VGFyZ2V0cyhzaWRlRWZmZWN0cylcblx0XHRcdDoge1xuXHRcdFx0XHRcdHRhcmdldHM6IFsuLi4oc2lkZUVmZmVjdHMudGFyZ2V0RW50aXRpZXMgPz8gW10pLCAuLi4oc2lkZUVmZmVjdHMudGFyZ2V0UHJvcGVydGllcyA/PyBbXSldLFxuXHRcdFx0XHRcdHRyaWdnZXJBY3Rpb246ICF0aGlzLl9zaWRlRWZmZWN0c1NlcnZpY2UuaXNDb250cm9sU2lkZUVmZmVjdHMoc2lkZUVmZmVjdHMpID8gc2lkZUVmZmVjdHMudHJpZ2dlckFjdGlvbiA6IHVuZGVmaW5lZFxuXHRcdFx0ICB9O1xuXHRcdGlmICh0cmlnZ2VyQWN0aW9uICYmICFpZ25vcmVUcmlnZ2VyQWN0aW9ucykge1xuXHRcdFx0dGhpcy5fc2lkZUVmZmVjdHNTZXJ2aWNlLmV4ZWN1dGVBY3Rpb24odHJpZ2dlckFjdGlvbiwgY29udGV4dCwgZ3JvdXBJZCk7XG5cdFx0fVxuXG5cdFx0aWYgKHRhcmdldHMubGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fc2lkZUVmZmVjdHNTZXJ2aWNlXG5cdFx0XHRcdC5yZXF1ZXN0U2lkZUVmZmVjdHModGFyZ2V0cywgY29udGV4dCwgZ3JvdXBJZClcblx0XHRcdFx0LnRoZW4oYXN5bmMgZnVuY3Rpb24gYXN5bmMoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZuVHJpZ2dlckNhbGxiYWNrcyhzaWRlRWZmZWN0cy50YXJnZXRFbnRpdGllcz8ubWFwKCh0YXJnZXQpID0+IHRhcmdldC4kTmF2aWdhdGlvblByb3BlcnR5UGF0aCkgfHwgW10pO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goKGVycm9yOiB1bmtub3duKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5yZWdpc3RlckZhaWxlZFNpZGVFZmZlY3RzKFtzaWRlRWZmZWN0c10sIGNvbnRleHQpO1xuXHRcdFx0XHRcdHRocm93IGVycm9yO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmVxdWVzdHMgdGhlIFNpZGVFZmZlY3RzIGZvciBhIHNpZGVFZmZlY3QgZXZlbnQuXG5cdCAqXG5cdCAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIHRvIGV4ZWN1dGUgdGhlIHNpZGUgZWZmZWN0IG9uIHRoZSBwYWdlJ3MgY29udGV4dCwgYnV0IHBhZ2VzIChsaWtlIHRoZSBMUikgbWlnaHQgb3ZlcnJpZGUgdGhpcyBtZXRob2QuXG5cdCAqXG5cdCAqIEBwYXJhbSBldmVudE5hbWUgU2lkZUVmZmVjdHMgZXZlbnQgd2hpY2ggd2FzIHRyaWdnZXJlZFxuXHQgKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCBmb3Igd2hpY2ggdGhpcyBldmVudCB3YXMgdHJpZ2dlcmVkXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugb24gU2lkZUVmZmVjdHMgcmVxdWVzdFxuXHQgKi9cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uSW5zdGVhZClcblx0YXN5bmMgcmVxdWVzdFNpZGVFZmZlY3RzRm9yRXZlbnQoZXZlbnROYW1lOiBzdHJpbmcsIHBhdGg6IHN0cmluZyk6IFByb21pc2U8dW5kZWZpbmVkPiB7XG5cdFx0aWYgKHRoaXMuaXNEYXRhUGF0aFJlbGV2YW50KHBhdGgpKSB7XG5cdFx0XHQvLyB1c2UgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgU2lkZUVmZmVjdHMgU2VydmljZVxuXHRcdFx0Y29uc3QgY29udGV4dCA9IHRoaXMuX2ZpbmRSZWxldmFudENvbnRleHQocGF0aCwgdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0KTtcblx0XHRcdGlmIChjb250ZXh0KSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9zaWRlRWZmZWN0c1NlcnZpY2UucmVxdWVzdFNpZGVFZmZlY3RzRm9yRXZlbnQoZXZlbnROYW1lLCBjb250ZXh0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIGEgZ2l2ZW4gZGF0YSBwYXRoIGlzIHNob3duL3JlbGV2YW50IG9uIHRoZSBwYWdlLlxuXHQgKlxuXHQgKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCB0byBiZSBjaGVja2VkXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGRhdGEgcGF0aCBpcyBzaG93biBvbiB0aGUgVUlcblx0ICovXG5cdGlzRGF0YVBhdGhSZWxldmFudChwYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0O1xuXG5cdFx0aWYgKHRoaXMuX2NvbnRleHRJc1JlbGV2YW50KHBhdGgsIGNvbnRleHQpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gISF0aGlzLl9maW5kUmVsZXZhbnRDb250ZXh0KHBhdGgsIGNvbnRleHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBhIGdpdmVuIGNvbnRleHQgZml0cyB0byBhIGdpdmVuIHBhdGguXG5cdCAqXG5cdCAqIFRoaXMgaXMgZG9uZSBieSBjaGVja2luZyBib3RoIHRoZSBuYXZpZ2F0aW9uIHBhdGggYW5kIHRoZSBjYW5vbmljYWwgcGF0aC5cblx0ICpcblx0ICogQHBhcmFtIHBhdGggVGhlIHBhdGggdG8gYmUgY2hlY2tlZFxuXHQgKiBAcGFyYW0gY29udGV4dCBUaGUgY29udGV4dCB0byBiZSBjaGVja2VkXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGNvbnRleHQgZml0cyB0byB0aGUgZ2l2ZW4gcGF0aFxuXHQgKi9cblx0X2NvbnRleHRJc1JlbGV2YW50KHBhdGg6IHN0cmluZywgY29udGV4dDogQ29udGV4dCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBjb250ZXh0Py5nZXRQYXRoKCkgPT09IHBhdGggfHwgY29udGV4dD8uZ2V0Q2Fub25pY2FsUGF0aCgpID09PSBwYXRoO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZpbmQgY29udGV4dCBmb3IgYSBnaXZlbiBwYXRoIGJ5IGNoZWNraW5nIGRlcGVuZGVudCBiaW5kaW5ncy5cblx0ICpcblx0ICogQHBhcmFtIHBhdGggVGhlIHBhdGggdG8gYmUgY2hlY2tlZFxuXHQgKiBAcGFyYW0gY29udGV4dCBUaGUgcGFyZW50IGNvbnRleHRcblx0ICogQHJldHVybnMgQ29udGV4dCBpZiBmb3VuZCwgb3RoZXJ3aXNlIHJldHVybnMgdW5kZWZpbmVkXG5cdCAqL1xuXHRfZmluZFJlbGV2YW50Q29udGV4dChwYXRoOiBzdHJpbmcsIGNvbnRleHQ6IENvbnRleHQpOiBDb250ZXh0IHwgdW5kZWZpbmVkIHtcblx0XHRpZiAodGhpcy5fY29udGV4dElzUmVsZXZhbnQocGF0aCwgY29udGV4dCkpIHtcblx0XHRcdHJldHVybiBjb250ZXh0O1xuXHRcdH1cblxuXHRcdGNvbnN0IGRlcGVuZGVudEJpbmRpbmdzID0gY29udGV4dC5nZXRNb2RlbCgpLmdldERlcGVuZGVudEJpbmRpbmdzKGNvbnRleHQpO1xuXHRcdGZvciAoY29uc3QgYmluZGluZyBvZiBkZXBlbmRlbnRCaW5kaW5ncykge1xuXHRcdFx0aWYgKGJpbmRpbmcuaXNBPE9EYXRhQ29udGV4dEJpbmRpbmc+KFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhQ29udGV4dEJpbmRpbmdcIikpIHtcblx0XHRcdFx0aWYgKHRoaXMuX2NvbnRleHRJc1JlbGV2YW50KHBhdGgsIGJpbmRpbmcuZ2V0Qm91bmRDb250ZXh0KCkpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGJpbmRpbmcuZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoYmluZGluZy5pc0E8T0RhdGFMaXN0QmluZGluZz4oXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFMaXN0QmluZGluZ1wiKSkge1xuXHRcdFx0XHRjb25zdCBsaXN0Q29udGV4dHMgPSBiaW5kaW5nLmdldEFsbEN1cnJlbnRDb250ZXh0cygpO1xuXHRcdFx0XHRmb3IgKGNvbnN0IGxpc3RDb250ZXh0IG9mIGxpc3RDb250ZXh0cykge1xuXHRcdFx0XHRcdGlmICh0aGlzLl9jb250ZXh0SXNSZWxldmFudChwYXRoLCBsaXN0Q29udGV4dCkpIHtcblx0XHRcdFx0XHRcdHJldHVybiBsaXN0Q29udGV4dDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRleHQgdG8gYmUgc2hvd24gZm9yIHVzZXIgdG8gaW5kaWNhdGUgZGF0YSByZWZyZXNoLlxuXHQgKlxuXHQgKiBUaGlzIGlzIGN1cnJlbnRseSBvbmx5IHVzZWQgYnkgU2lkZUVmZmVjdHMgZXZlbnRzLiBQYWdlcyAobGlrZSB0aGUgTFIpIG1pZ2h0IG92ZXJyaWRlIHRoaXMgbWV0aG9kLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBUZXh0IHRvIGJlIHNob3duIHRvIHRoZSB1c2VyIGluIGNhc2Ugb2YgYSBkYXRhIHJlZnJlc2hcblx0ICovXG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkluc3RlYWQpXG5cdGdldERhdGFSZWZyZXNoVGV4dCgpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHJlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKHRoaXMuZ2V0VmlldygpKTtcblx0XHRyZXR1cm4gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19TRVJWRVJfRVZFTlRTX05FV19EQVRBX0lURU1cIik7XG5cdH1cblxuXHQvKipcblx0ICogTm90aWZ5IHRoZSB1c2VyIHRoYXQgZGF0YSB3YXMgcmVmcmVzaGVkLlxuXHQgKlxuXHQgKiBUaGlzIGlzIGN1cnJlbnRseSBvbmx5IHVzZWQgYnkgU2lkZUVmZmVjdHMgZXZlbnRzLlxuXHQgKi9cblxuXHRub3RpZnlEYXRhUmVmcmVzaCgpOiB2b2lkIHtcblx0XHRNZXNzYWdlVG9hc3Quc2hvdyh0aGlzLmJhc2UuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKS5fc2lkZUVmZmVjdHMuZ2V0RGF0YVJlZnJlc2hUZXh0KCkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFzayB0aGUgdXNlciBmb3IgY29uZmlybWF0aW9uIG9mIGEgZGF0YSByZWZyZXNoLlxuXHQgKlxuXHQgKiBUaGlzIGlzIGN1cnJlbnRseSBvbmx5IHVzZWQgYnkgU2lkZUVmZmVjdHMgZXZlbnRzLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgaWYgdGhlIHVzZXIgY29uZmlybXMgYW5kIHJlamVjdHMgaWYgdGhlIHVzZXIgY2FuY2Vscy5cblx0ICovXG5cdGFzeW5jIGNvbmZpcm1EYXRhUmVmcmVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAoIXRoaXMuaXNDb25maXJtYXRpb25EaWFsb2dPcGVuKSB7XG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0XHRjb25zdCB0ZXh0ID0gdGhpcy5nZXREYXRhUmVmcmVzaFRleHQoKTtcblx0XHRcdFx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IGdldFJlc291cmNlTW9kZWwodGhpcy5nZXRWaWV3KCkpO1xuXG5cdFx0XHRcdGNvbnN0IGNvbmZpcm1hdGlvbkRpYWxvZyA9IG5ldyBEaWFsb2coe1xuXHRcdFx0XHRcdHRpdGxlOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJXQVJOSU5HXCIpLFxuXHRcdFx0XHRcdHN0YXRlOiBcIldhcm5pbmdcIixcblx0XHRcdFx0XHRjb250ZW50OiBuZXcgVGV4dCh7IHRleHQ6IHRleHQgfSksXG5cdFx0XHRcdFx0YmVnaW5CdXR0b246IG5ldyBCdXR0b24oe1xuXHRcdFx0XHRcdFx0dGV4dDogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfUkVGUkVTSFwiKSxcblx0XHRcdFx0XHRcdHByZXNzOiAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdGNvbmZpcm1hdGlvbkRpYWxvZy5jbG9zZSgpO1xuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0ZW5kQnV0dG9uOiBuZXcgQnV0dG9uKHtcblx0XHRcdFx0XHRcdHRleHQ6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX0RJQUxPR19DQU5DRUxcIiksXG5cdFx0XHRcdFx0XHRwcmVzczogKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25maXJtYXRpb25EaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0XHRcdFx0cmVqZWN0KCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0YWZ0ZXJDbG9zZTogKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0Y29uZmlybWF0aW9uRGlhbG9nLmRlc3Ryb3koKTtcblx0XHRcdFx0XHRcdHRoaXMuaXNDb25maXJtYXRpb25EaWFsb2dPcGVuID0gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0Y29uZmlybWF0aW9uRGlhbG9nLmFkZFN0eWxlQ2xhc3MoXCJzYXBVaUNvbnRlbnRQYWRkaW5nXCIpO1xuXHRcdFx0XHR0aGlzLmlzQ29uZmlybWF0aW9uRGlhbG9nT3BlbiA9IHRydWU7XG5cdFx0XHRcdGNvbmZpcm1hdGlvbkRpYWxvZy5vcGVuKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVxdWVzdCBtdWx0aXBsZSBTaWRlRWZmZWN0cyBvbiBhIHNwZWNpZmljIGNvbnRleHQuXG5cdCAqXG5cdCAqIEBwYXJhbSBtdWx0aVNpZGVFZmZlY3RzIFNpZGVFZmZlY3RzIHRvIGJlIGV4ZWN1dGVkXG5cdCAqIEBwYXJhbSBjb250ZXh0IENvbnRleHQgd2hlcmUgU2lkZUVmZmVjdHMgbmVlZCB0byBiZSBleGVjdXRlZFxuXHQgKiBAcGFyYW0gZ3JvdXBJZCBUaGUgZ3JvdXAgaWQgb2YgdGhlIGJhdGNoXG5cdCAqIEByZXR1cm5zIFNpZGVFZmZlY3RzIHJlcXVlc3Qgb24gU0FQVUk1IGNvbnRleHRcblx0ICovXG5cdGFzeW5jIHJlcXVlc3RNdWx0aXBsZVNpZGVFZmZlY3RzKG11bHRpU2lkZUVmZmVjdHM6IFNpZGVFZmZlY3RzVHlwZVtdLCBjb250ZXh0OiBDb250ZXh0LCBncm91cElkPzogc3RyaW5nKTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0bGV0IHByb3BlcnRpZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblx0XHRsZXQgbmF2aWdhdGlvblByb3BlcnRpZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblx0XHRjb25zdCBhY3Rpb25zID0gbXVsdGlTaWRlRWZmZWN0cy5yZWR1Y2UoKGFjdGlvbnMsIHNpZGVFZmZlY3RzKSA9PiB7XG5cdFx0XHRjb25zdCBzaWRlRWZmZWN0QWN0aW9uID0gKHNpZGVFZmZlY3RzIGFzIE9EYXRhU2lkZUVmZmVjdHNUeXBlKS50cmlnZ2VyQWN0aW9uO1xuXHRcdFx0aWYgKHNpZGVFZmZlY3RBY3Rpb24pIHtcblx0XHRcdFx0YWN0aW9ucy5wdXNoKHNpZGVFZmZlY3RBY3Rpb24pO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGFjdGlvbnM7XG5cdFx0fSwgW10gYXMgc3RyaW5nW10pO1xuXHRcdGNvbnN0IGZudHJpZ2dlckNhbGxiYWNrcyA9IHRoaXMudHJpZ2dlckNhbGxiYWNrcy5iaW5kKHRoaXMpO1xuXG5cdFx0Zm9yIChjb25zdCBhY3Rpb24gb2YgYWN0aW9ucykge1xuXHRcdFx0dGhpcy5fc2lkZUVmZmVjdHNTZXJ2aWNlLmV4ZWN1dGVBY3Rpb24oYWN0aW9uLCBjb250ZXh0LCBncm91cElkKTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IHNpZGVFZmZlY3RzIG9mIG11bHRpU2lkZUVmZmVjdHMpIHtcblx0XHRcdHByb3BlcnRpZXMgPSAoc2lkZUVmZmVjdHMudGFyZ2V0UHJvcGVydGllcyA/PyBbXSkucmVkdWNlKChteVNldCwgcHJvcGVydHkpID0+IG15U2V0LmFkZChwcm9wZXJ0eSksIHByb3BlcnRpZXMpO1xuXHRcdFx0bmF2aWdhdGlvblByb3BlcnRpZXMgPSAoc2lkZUVmZmVjdHMudGFyZ2V0RW50aXRpZXMgPz8gW10pLnJlZHVjZShcblx0XHRcdFx0KG15U2V0LCBuYXZpZ2F0aW9uUHJvcGVydHkpID0+IG15U2V0LmFkZChuYXZpZ2F0aW9uUHJvcGVydHkuJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgpLFxuXHRcdFx0XHRuYXZpZ2F0aW9uUHJvcGVydGllc1xuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5fc2lkZUVmZmVjdHNTZXJ2aWNlXG5cdFx0XHQucmVxdWVzdFNpZGVFZmZlY3RzKFxuXHRcdFx0XHRbXG5cdFx0XHRcdFx0Li4uQXJyYXkuZnJvbShwcm9wZXJ0aWVzKSxcblx0XHRcdFx0XHQuLi5BcnJheS5mcm9tKG5hdmlnYXRpb25Qcm9wZXJ0aWVzKS5tYXAoKG5hdmlnYXRpb25Qcm9wZXJ0eSkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHsgJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IG5hdmlnYXRpb25Qcm9wZXJ0eSB9O1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdF0sXG5cdFx0XHRcdGNvbnRleHQsXG5cdFx0XHRcdGdyb3VwSWRcblx0XHRcdClcblx0XHRcdC50aGVuKGFzeW5jIGZ1bmN0aW9uIGFzeW5jKCkge1xuXHRcdFx0XHRyZXR1cm4gZm50cmlnZ2VyQ2FsbGJhY2tzKEFycmF5LmZyb20obmF2aWdhdGlvblByb3BlcnRpZXMpKTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goKGVycm9yOiB1bmtub3duKSA9PiB7XG5cdFx0XHRcdHRoaXMucmVnaXN0ZXJGYWlsZWRTaWRlRWZmZWN0cyhtdWx0aVNpZGVFZmZlY3RzLCBjb250ZXh0KTtcblx0XHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIGZhaWxlZCBTaWRlRWZmZWN0cy5cblx0ICpcblx0ICogQHJldHVybnMgUmVnaXN0ZXJlZCBTaWRlRWZmZWN0cyByZXF1ZXN0cyB0aGF0IGhhdmUgZmFpbGVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cHVibGljIGdldFJlZ2lzdGVyZWRGYWlsZWRSZXF1ZXN0cygpOiBGYWlsZWRTaWRlRWZmZWN0RGljdGlvbmFyeSB7XG5cdFx0cmV0dXJuIHRoaXMuX3JlZ2lzdGVyZWRGYWlsZWRTaWRlRWZmZWN0cztcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIFNpZGVFZmZlY3RzIHRvIHRoZSBxdWV1ZSBvZiB0aGUgZmFpbGVkIFNpZGVFZmZlY3RzXG5cdCAqIFRoZSBTaWRlRWZmZWN0cyBhcmUgcmV0cmlnZ2VyZWQgb24gdGhlIG5leHQgcmVxdWVzdCBvbiB0aGUgc2FtZSBjb250ZXh0LlxuXHQgKlxuXHQgKiBAcGFyYW0gbXVsdGlTaWRlRWZmZWN0cyBTaWRlRWZmZWN0cyB0aGF0IG5lZWQgdG8gYmUgcmV0cmlnZ2VyZWRcblx0ICogQHBhcmFtIGNvbnRleHQgQ29udGV4dCB3aGVyZSBTaWRlRWZmZWN0cyBoYXZlIGZhaWxlZFxuXHQgKi9cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRyZWdpc3RlckZhaWxlZFNpZGVFZmZlY3RzKG11bHRpU2lkZUVmZmVjdHM6IFNpZGVFZmZlY3RzVHlwZVtdLCBjb250ZXh0OiBDb250ZXh0KTogdm9pZCB7XG5cdFx0Y29uc3QgY29udGV4dFBhdGggPSBjb250ZXh0LmdldFBhdGgoKTtcblx0XHR0aGlzLl9yZWdpc3RlcmVkRmFpbGVkU2lkZUVmZmVjdHNbY29udGV4dFBhdGhdID0gdGhpcy5fcmVnaXN0ZXJlZEZhaWxlZFNpZGVFZmZlY3RzW2NvbnRleHRQYXRoXSA/PyBbXTtcblx0XHRmb3IgKGNvbnN0IHNpZGVFZmZlY3RzIG9mIG11bHRpU2lkZUVmZmVjdHMpIHtcblx0XHRcdGNvbnN0IGlzTm90QWxyZWFkeUxpc3RlZCA9IHRoaXMuX3JlZ2lzdGVyZWRGYWlsZWRTaWRlRWZmZWN0c1tjb250ZXh0UGF0aF0uZXZlcnkoXG5cdFx0XHRcdChtRmFpbGVkU2lkZUVmZmVjdHMpID0+IHNpZGVFZmZlY3RzLmZ1bGx5UXVhbGlmaWVkTmFtZSAhPT0gbUZhaWxlZFNpZGVFZmZlY3RzLmZ1bGx5UXVhbGlmaWVkTmFtZVxuXHRcdFx0KTtcblx0XHRcdGlmIChpc05vdEFscmVhZHlMaXN0ZWQpIHtcblx0XHRcdFx0dGhpcy5fcmVnaXN0ZXJlZEZhaWxlZFNpZGVFZmZlY3RzW2NvbnRleHRQYXRoXS5wdXNoKHNpZGVFZmZlY3RzKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRGVsZXRlcyBTaWRlRWZmZWN0cyBpbiB0aGUgcXVldWUgb2YgdGhlIGZhaWxlZCBTaWRlRWZmZWN0cyBmb3IgYSBjb250ZXh0LlxuXHQgKlxuXHQgKiBAcGFyYW0gY29udGV4dFBhdGggQ29udGV4dCBwYXRoIHdoZXJlIFNpZGVFZmZlY3RzIGhhdmUgZmFpbGVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0dW5yZWdpc3RlckZhaWxlZFNpZGVFZmZlY3RzRm9yQUNvbnRleHQoY29udGV4dFBhdGg6IHN0cmluZyk6IHZvaWQge1xuXHRcdGRlbGV0ZSB0aGlzLl9yZWdpc3RlcmVkRmFpbGVkU2lkZUVmZmVjdHNbY29udGV4dFBhdGhdO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlbGV0ZXMgU2lkZUVmZmVjdHMgdG8gdGhlIHF1ZXVlIG9mIHRoZSBmYWlsZWQgU2lkZUVmZmVjdHMuXG5cdCAqXG5cdCAqIEBwYXJhbSBzaWRlRWZmZWN0c0Z1bGx5UXVhbGlmaWVkTmFtZSBTaWRlRWZmZWN0cyB0aGF0IG5lZWQgdG8gYmUgcmV0cmlnZ2VyZWRcblx0ICogQHBhcmFtIGNvbnRleHQgQ29udGV4dCB3aGVyZSBTaWRlRWZmZWN0cyBoYXZlIGZhaWxlZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdHVucmVnaXN0ZXJGYWlsZWRTaWRlRWZmZWN0cyhzaWRlRWZmZWN0c0Z1bGx5UXVhbGlmaWVkTmFtZTogc3RyaW5nLCBjb250ZXh0OiBDb250ZXh0KTogdm9pZCB7XG5cdFx0Y29uc3QgY29udGV4dFBhdGggPSBjb250ZXh0LmdldFBhdGgoKTtcblx0XHRpZiAodGhpcy5fcmVnaXN0ZXJlZEZhaWxlZFNpZGVFZmZlY3RzW2NvbnRleHRQYXRoXT8ubGVuZ3RoKSB7XG5cdFx0XHR0aGlzLl9yZWdpc3RlcmVkRmFpbGVkU2lkZUVmZmVjdHNbY29udGV4dFBhdGhdID0gdGhpcy5fcmVnaXN0ZXJlZEZhaWxlZFNpZGVFZmZlY3RzW2NvbnRleHRQYXRoXS5maWx0ZXIoXG5cdFx0XHRcdChzaWRlRWZmZWN0cykgPT4gc2lkZUVmZmVjdHMuZnVsbHlRdWFsaWZpZWROYW1lICE9PSBzaWRlRWZmZWN0c0Z1bGx5UXVhbGlmaWVkTmFtZVxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQWRkcyBTaWRlRWZmZWN0cyB0byB0aGUgcXVldWUgb2YgYSBGaWVsZEdyb3VwXG5cdCAqIFRoZSBTaWRlRWZmZWN0cyBhcmUgdHJpZ2dlcmVkIHdoZW4gZXZlbnQgcmVsYXRlZCB0byB0aGUgZmllbGQgZ3JvdXAgY2hhbmdlIGlzIGZpcmVkLlxuXHQgKlxuXHQgKiBAcGFyYW0gc2lkZUVmZmVjdHNQcm9wZXJ0aWVzIFNpZGVFZmZlY3RzIHByb3BlcnRpZXNcblx0ICogQHBhcmFtIGZpZWxkR3JvdXBQcmVSZXF1aXNpdGUgUHJvbWlzZSB0byBmdWxsZmlsIGJlZm9yZSBleGVjdXRpbmcgdGhlIFNpZGVFZmZlY3RzXG5cdCAqL1xuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdHJlZ2lzdGVyRmllbGRHcm91cFNpZGVFZmZlY3RzKHNpZGVFZmZlY3RzUHJvcGVydGllczogRmllbGRTaWRlRWZmZWN0UHJvcGVydHlUeXBlLCBmaWVsZEdyb3VwUHJlUmVxdWlzaXRlPzogUHJvbWlzZTx1bmtub3duPik6IHZvaWQge1xuXHRcdGNvbnN0IGlkID0gdGhpcy5fZ2V0RmllbGRHcm91cEluZGV4KHNpZGVFZmZlY3RzUHJvcGVydGllcy5uYW1lLCBzaWRlRWZmZWN0c1Byb3BlcnRpZXMuY29udGV4dCk7XG5cdFx0aWYgKCF0aGlzLl9yZWdpc3RlcmVkRmllbGRHcm91cE1hcFtpZF0pIHtcblx0XHRcdHRoaXMuX3JlZ2lzdGVyZWRGaWVsZEdyb3VwTWFwW2lkXSA9IHtcblx0XHRcdFx0cHJvbWlzZTogZmllbGRHcm91cFByZVJlcXVpc2l0ZSA/PyBQcm9taXNlLnJlc29sdmUoKSxcblx0XHRcdFx0c2lkZUVmZmVjdFByb3BlcnR5OiBzaWRlRWZmZWN0c1Byb3BlcnRpZXNcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIERlbGV0ZXMgU2lkZUVmZmVjdHMgdG8gdGhlIHF1ZXVlIG9mIGEgRmllbGRHcm91cC5cblx0ICpcblx0ICogQHBhcmFtIHNpZGVFZmZlY3RzUHJvcGVydGllcyBTaWRlRWZmZWN0cyBwcm9wZXJ0aWVzXG5cdCAqL1xuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdHVucmVnaXN0ZXJGaWVsZEdyb3VwU2lkZUVmZmVjdHMoc2lkZUVmZmVjdHNQcm9wZXJ0aWVzOiBGaWVsZFNpZGVFZmZlY3RQcm9wZXJ0eVR5cGUpOiB2b2lkIHtcblx0XHRjb25zdCB7IGNvbnRleHQsIG5hbWUgfSA9IHNpZGVFZmZlY3RzUHJvcGVydGllcztcblx0XHRjb25zdCBpZCA9IHRoaXMuX2dldEZpZWxkR3JvdXBJbmRleChuYW1lLCBjb250ZXh0KTtcblx0XHRkZWxldGUgdGhpcy5fcmVnaXN0ZXJlZEZpZWxkR3JvdXBNYXBbaWRdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHJlZ2lzdGVyZWQgU2lkZUVmZmVjdHMgaW50byB0aGUgcXVldWUgZm9yIGEgZmllbGQgZ3JvdXAgaWQuXG5cdCAqXG5cdCAqIEBwYXJhbSBmaWVsZEdyb3VwSWQgRmllbGQgZ3JvdXAgaWRcblx0ICogQHJldHVybnMgQXJyYXkgb2YgcmVnaXN0ZXJlZCBTaWRlRWZmZWN0cyBhbmQgdGhlaXIgcHJvbWlzZVxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGdldFJlZ2lzdGVyZWRTaWRlRWZmZWN0c0ZvckZpZWxkR3JvdXAoZmllbGRHcm91cElkOiBzdHJpbmcpOiBGaWVsZEdyb3VwU2lkZUVmZmVjdFR5cGVbXSB7XG5cdFx0Y29uc3Qgc2lkZUVmZmVjdHMgPSBbXTtcblx0XHRmb3IgKGNvbnN0IHJlZ2lzdHJ5SW5kZXggb2YgT2JqZWN0LmtleXModGhpcy5fcmVnaXN0ZXJlZEZpZWxkR3JvdXBNYXApKSB7XG5cdFx0XHRpZiAocmVnaXN0cnlJbmRleC5zdGFydHNXaXRoKGAke2ZpZWxkR3JvdXBJZH1fYCkpIHtcblx0XHRcdFx0c2lkZUVmZmVjdHMucHVzaCh0aGlzLl9yZWdpc3RlcmVkRmllbGRHcm91cE1hcFtyZWdpc3RyeUluZGV4XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBzaWRlRWZmZWN0cztcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIGEgc3RhdHVzIGluZGV4LlxuXHQgKlxuXHQgKiBAcGFyYW0gZmllbGRHcm91cElkIFRoZSBmaWVsZCBncm91cCBpZFxuXHQgKiBAcGFyYW0gY29udGV4dCBTQVBVSTUgQ29udGV4dFxuXHQgKiBAcmV0dXJucyBJbmRleFxuXHQgKi9cblx0cHJpdmF0ZSBfZ2V0RmllbGRHcm91cEluZGV4KGZpZWxkR3JvdXBJZDogc3RyaW5nLCBjb250ZXh0OiBDb250ZXh0KTogc3RyaW5nIHtcblx0XHRyZXR1cm4gYCR7ZmllbGRHcm91cElkfV8ke2NvbnRleHQuZ2V0UGF0aCgpfWA7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyBzaWRlRWZmZWN0cyBwcm9wZXJ0aWVzIGZyb20gYSBmaWVsZCBncm91cCBpZFxuXHQgKiBUaGUgcHJvcGVydGllcyBhcmU6XG5cdCAqICAtIG5hbWVcblx0ICogIC0gc2lkZUVmZmVjdHMgZGVmaW5pdGlvblxuXHQgKiAgLSBzaWRlRWZmZWN0cyBlbnRpdHkgdHlwZVxuXHQgKiAgLSBpbW1lZGlhdGUgc2lkZUVmZmVjdHMuXG5cdCAqXG5cdCAqIEBwYXJhbSBmaWVsZEdyb3VwSWRcblx0ICogQHJldHVybnMgU2lkZUVmZmVjdHMgcHJvcGVydGllc1xuXHQgKi9cblx0cHJpdmF0ZSBfZ2V0U2lkZUVmZmVjdHNQcm9wZXJ0eUZvckZpZWxkR3JvdXAoZmllbGRHcm91cElkOiBzdHJpbmcpOiB7XG5cdFx0c2lkZUVmZmVjdEVudGl0eVR5cGU6IHN0cmluZztcblx0XHRuYW1lOiBzdHJpbmc7XG5cdFx0aW1tZWRpYXRlOiBib29sZWFuO1xuXHRcdHNpZGVFZmZlY3RzOiBPRGF0YVNpZGVFZmZlY3RzVHlwZSB8IHVuZGVmaW5lZDtcblx0fSB7XG5cdFx0LyoqXG5cdFx0ICogc3RyaW5nIFwiJCRJbW1lZGlhdGVSZXF1ZXN0XCIgaXMgYWRkZWQgdG8gdGhlIFNpZGVFZmZlY3RzIG5hbWUgZHVyaW5nIHRlbXBsYXRpbmcgdG8ga25vd1xuXHRcdCAqIGlmIHRoaXMgU2lkZUVmZmVjdHMgbXVzdCBiZSBpbW1lZGlhdGVseSBleGVjdXRlZCByZXF1ZXN0ZWQgKG9uIGZpZWxkIGNoYW5nZSkgb3IgbXVzdFxuXHRcdCAqIGJlIGRlZmVycmVkIChvbiBmaWVsZCBncm91cCBmb2N1cyBvdXQpXG5cdFx0ICpcblx0XHQgKi9cblx0XHRjb25zdCBpbW1lZGlhdGUgPSBmaWVsZEdyb3VwSWQuaW5jbHVkZXMoSU1NRURJQVRFX1JFUVVFU1QpLFxuXHRcdFx0bmFtZSA9IGZpZWxkR3JvdXBJZC5yZXBsYWNlKElNTUVESUFURV9SRVFVRVNULCBcIlwiKSxcblx0XHRcdHNpZGVFZmZlY3RQYXJ0cyA9IG5hbWUuc3BsaXQoXCIjXCIpLFxuXHRcdFx0c2lkZUVmZmVjdEVudGl0eVR5cGUgPSBzaWRlRWZmZWN0UGFydHNbMF0sXG5cdFx0XHRzaWRlRWZmZWN0UGF0aCA9IGAke3NpZGVFZmZlY3RFbnRpdHlUeXBlfUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2lkZUVmZmVjdHMke1xuXHRcdFx0XHRzaWRlRWZmZWN0UGFydHMubGVuZ3RoID09PSAyID8gYCMke3NpZGVFZmZlY3RQYXJ0c1sxXX1gIDogXCJcIlxuXHRcdFx0fWAsXG5cdFx0XHRzaWRlRWZmZWN0czogT0RhdGFTaWRlRWZmZWN0c1R5cGUgfCB1bmRlZmluZWQgPVxuXHRcdFx0XHR0aGlzLl9zaWRlRWZmZWN0c1NlcnZpY2UuZ2V0T0RhdGFFbnRpdHlTaWRlRWZmZWN0cyhzaWRlRWZmZWN0RW50aXR5VHlwZSk/LltzaWRlRWZmZWN0UGF0aF07XG5cdFx0cmV0dXJuIHsgbmFtZSwgaW1tZWRpYXRlLCBzaWRlRWZmZWN0cywgc2lkZUVmZmVjdEVudGl0eVR5cGUgfTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNYW5hZ2VzIHRoZSBTaWRlRWZmZWN0cyBmb3IgYSBmaWVsZC5cblx0ICpcblx0ICogQHBhcmFtIGZpZWxkIEZpZWxkIGNvbnRyb2xcblx0ICogQHJldHVybnMgUHJvbWlzZSByZWxhdGVkIHRvIHRoZSByZXF1ZXN0ZWQgaW1tZWRpYXRlIHNpZGVFZmZlY3RzXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIF9tYW5hZ2VTaWRlRWZmZWN0c0Zyb21GaWVsZChmaWVsZDogQ29udHJvbCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHNpZGVFZmZlY3RzTWFwID0gdGhpcy5nZXRGaWVsZFNpZGVFZmZlY3RzTWFwKGZpZWxkKTtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNUb0V4ZWN1dGU6IFJlY29yZDxzdHJpbmcsIHsgc2lkZUVmZmVjdHM6IFNpZGVFZmZlY3RzVHlwZVtdOyBjb250ZXh0OiBDb250ZXh0IH0+ID0ge307XG5cdFx0XHRjb25zdCBhZGRTaWRlRWZmZWN0cyA9IChjb250ZXh0OiBDb250ZXh0LCBzaWRlRWZmZWN0czogU2lkZUVmZmVjdHNUeXBlKTogdm9pZCA9PiB7XG5cdFx0XHRcdGNvbnN0IGNvbnRleHRQYXRoID0gY29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRcdGlmIChzaWRlRWZmZWN0c1RvRXhlY3V0ZVtjb250ZXh0UGF0aF0pIHtcblx0XHRcdFx0XHRzaWRlRWZmZWN0c1RvRXhlY3V0ZVtjb250ZXh0UGF0aF0uc2lkZUVmZmVjdHMucHVzaChzaWRlRWZmZWN0cyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c2lkZUVmZmVjdHNUb0V4ZWN1dGVbY29udGV4dFBhdGhdID0ge1xuXHRcdFx0XHRcdFx0Y29udGV4dCxcblx0XHRcdFx0XHRcdHNpZGVFZmZlY3RzOiBbc2lkZUVmZmVjdHNdXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdFx0Ly9HZXQgSW1tZWRpYXRlIFNpZGVFZmZlY3RzXG5cdFx0XHRmb3IgKGNvbnN0IHNpZGVFZmZlY3RzUHJvcGVydGllcyBvZiBPYmplY3QudmFsdWVzKHNpZGVFZmZlY3RzTWFwKS5maWx0ZXIoXG5cdFx0XHRcdChzaWRlRWZmZWN0c1Byb3BlcnRpZXMpID0+IHNpZGVFZmZlY3RzUHJvcGVydGllcy5pbW1lZGlhdGUgPT09IHRydWVcblx0XHRcdCkpIHtcblx0XHRcdFx0Ly8gaWYgdGhpcyBTaWRlRWZmZWN0cyBpcyByZWNvcmRlZCBhcyBmYWlsZWQgU2lkZUVmZmVjdHMsIG5lZWQgdG8gcmVtb3ZlIGl0LlxuXHRcdFx0XHR0aGlzLnVucmVnaXN0ZXJGYWlsZWRTaWRlRWZmZWN0cyhzaWRlRWZmZWN0c1Byb3BlcnRpZXMuc2lkZUVmZmVjdHMuZnVsbHlRdWFsaWZpZWROYW1lLCBzaWRlRWZmZWN0c1Byb3BlcnRpZXMuY29udGV4dCk7XG5cdFx0XHRcdGFkZFNpZGVFZmZlY3RzKHNpZGVFZmZlY3RzUHJvcGVydGllcy5jb250ZXh0LCBzaWRlRWZmZWN0c1Byb3BlcnRpZXMuc2lkZUVmZmVjdHMpO1xuXHRcdFx0fVxuXG5cdFx0XHQvL1JlcGxheSBmYWlsZWQgU2lkZUVmZmVjdHMgcmVsYXRlZCB0byB0aGUgdmlldyBvciBGaWVsZFxuXHRcdFx0Zm9yIChjb25zdCBjb250ZXh0IG9mIFtmaWVsZC5nZXRCaW5kaW5nQ29udGV4dCgpLCB0aGlzLl92aWV3LmdldEJpbmRpbmdDb250ZXh0KCldLmZpbHRlcihcblx0XHRcdFx0KGNvbnRleHQpOiBjb250ZXh0IGlzIENvbnRleHQgPT4gISFjb250ZXh0XG5cdFx0XHQpKSB7XG5cdFx0XHRcdGNvbnN0IGNvbnRleHRQYXRoID0gY29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRcdGNvbnN0IGZhaWxlZFNpZGVFZmZlY3RzID0gdGhpcy5fcmVnaXN0ZXJlZEZhaWxlZFNpZGVFZmZlY3RzW2NvbnRleHRQYXRoXSA/PyBbXTtcblx0XHRcdFx0dGhpcy51bnJlZ2lzdGVyRmFpbGVkU2lkZUVmZmVjdHNGb3JBQ29udGV4dChjb250ZXh0UGF0aCk7XG5cdFx0XHRcdGZvciAoY29uc3QgZmFpbGVkU2lkZUVmZmVjdCBvZiBmYWlsZWRTaWRlRWZmZWN0cykge1xuXHRcdFx0XHRcdGFkZFNpZGVFZmZlY3RzKGNvbnRleHQsIGZhaWxlZFNpZGVFZmZlY3QpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRhd2FpdCBQcm9taXNlLmFsbChcblx0XHRcdFx0T2JqZWN0LnZhbHVlcyhzaWRlRWZmZWN0c1RvRXhlY3V0ZSkubWFwKGFzeW5jIChzaWRlRWZmZWN0c1Byb3BlcnRpZXMpID0+XG5cdFx0XHRcdFx0c2lkZUVmZmVjdHNQcm9wZXJ0aWVzLnNpZGVFZmZlY3RzLmxlbmd0aCA9PT0gMVxuXHRcdFx0XHRcdFx0PyB0aGlzLnJlcXVlc3RTaWRlRWZmZWN0cyhzaWRlRWZmZWN0c1Byb3BlcnRpZXMuc2lkZUVmZmVjdHNbMF0sIHNpZGVFZmZlY3RzUHJvcGVydGllcy5jb250ZXh0KVxuXHRcdFx0XHRcdFx0OiB0aGlzLnJlcXVlc3RNdWx0aXBsZVNpZGVFZmZlY3RzKHNpZGVFZmZlY3RzUHJvcGVydGllcy5zaWRlRWZmZWN0cywgc2lkZUVmZmVjdHNQcm9wZXJ0aWVzLmNvbnRleHQpXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0TG9nLmRlYnVnKGBFcnJvciB3aGlsZSBtYW5hZ2luZyBGaWVsZCBTaWRlRWZmZWN0c2AsIGUgYXMgc3RyaW5nKTtcblx0XHR9XG5cdH1cblxuXHRhc3luYyB0cmlnZ2VyQ2FsbGJhY2tzKG5hdmlnYXRpb246IHN0cmluZ1tdKTogUHJvbWlzZTx1bmRlZmluZWQ+IHtcblx0XHRhd2FpdCBQcm9taXNlLmFsbChcblx0XHRcdG5hdmlnYXRpb24ubWFwKChuYXYpID0+IHtcblx0XHRcdFx0Y29uc3QgcmVnaXN0ZXJDYWxsQmFjayA9IHRoaXMuX3NpZGVFZmZlY3RzU2VydmljZS5nZXRSZWdpc3RlcmVkQ2FsbGJhY2sobmF2KTtcblx0XHRcdFx0aWYgKHJlZ2lzdGVyQ2FsbEJhY2spIHtcblx0XHRcdFx0XHRyZXR1cm4gcmVnaXN0ZXJDYWxsQmFjaygpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRcdH0pXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXF1ZXN0cyB0aGUgU2lkZUVmZmVjdHMgZm9yIGEgZmllbGRHcm91cC5cblx0ICpcblx0ICogQHBhcmFtIGZpZWxkR3JvdXBTaWRlRWZmZWN0cyBGaWVsZCBncm91cCBzaWRlRWZmZWN0cyB3aXRoIGl0cyBwcm9taXNlXG5cdCAqIEByZXR1cm5zIFByb21pc2UgcmV0dXJuaW5nIHRydWUgaWYgdGhlIFNpZGVFZmZlY3RzIGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWRcblx0ICovXG5cdHByaXZhdGUgYXN5bmMgX3JlcXVlc3RGaWVsZEdyb3VwU2lkZUVmZmVjdHMoZmllbGRHcm91cFNpZGVFZmZlY3RzOiBGaWVsZEdyb3VwU2lkZUVmZmVjdFR5cGUpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0aGlzLnVucmVnaXN0ZXJGaWVsZEdyb3VwU2lkZUVmZmVjdHMoZmllbGRHcm91cFNpZGVFZmZlY3RzLnNpZGVFZmZlY3RQcm9wZXJ0eSk7XG5cdFx0dHJ5IHtcblx0XHRcdGF3YWl0IGZpZWxkR3JvdXBTaWRlRWZmZWN0cy5wcm9taXNlO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdExvZy5kZWJ1ZyhgRXJyb3Igd2hpbGUgcHJvY2Vzc2luZyBGaWVsZEdyb3VwIFNpZGVFZmZlY3RzYCwgZSBhcyBzdHJpbmcpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgeyBzaWRlRWZmZWN0cywgY29udGV4dCwgbmFtZSB9ID0gZmllbGRHcm91cFNpZGVFZmZlY3RzLnNpZGVFZmZlY3RQcm9wZXJ0eTtcblx0XHRcdGlmICh0aGlzLmlzRmllbGRHcm91cFZhbGlkKG5hbWUsIGNvbnRleHQpKSB7XG5cdFx0XHRcdGF3YWl0IHRoaXMucmVxdWVzdFNpZGVFZmZlY3RzKHNpZGVFZmZlY3RzLCBjb250ZXh0KTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRMb2cuZGVidWcoYEVycm9yIHdoaWxlIGV4ZWN1dGluZyBGaWVsZEdyb3VwIFNpZGVFZmZlY3RzYCwgZSBhcyBzdHJpbmcpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTYXZlcyB0aGUgdmFsaWRhdGlvbiBzdGF0dXMgb2YgcHJvcGVydGllcyByZWxhdGVkIHRvIGEgZmllbGQgY29udHJvbC5cblx0ICpcblx0ICogQHBhcmFtIGZpZWxkIFRoZSBmaWVsZCBjb250cm9sXG5cdCAqIEBwYXJhbSBzdWNjZXNzIFN0YXR1cyBvZiB0aGUgZmllbGQgdmFsaWRhdGlvblxuXHQgKi9cblx0cHJpdmF0ZSBfc2F2ZUZpZWxkUHJvcGVydGllc1N0YXR1cyhmaWVsZDogQ29udHJvbCwgc3VjY2VzczogYm9vbGVhbik6IHZvaWQge1xuXHRcdGNvbnN0IHNpZGVFZmZlY3RzTWFwID0gdGhpcy5nZXRGaWVsZFNpZGVFZmZlY3RzTWFwKGZpZWxkKTtcblx0XHRPYmplY3Qua2V5cyhzaWRlRWZmZWN0c01hcCkuZm9yRWFjaCgoa2V5KSA9PiB7XG5cdFx0XHRjb25zdCB7IG5hbWUsIGltbWVkaWF0ZSwgY29udGV4dCB9ID0gc2lkZUVmZmVjdHNNYXBba2V5XTtcblx0XHRcdGlmICghaW1tZWRpYXRlKSB7XG5cdFx0XHRcdGNvbnN0IGlkID0gdGhpcy5fZ2V0RmllbGRHcm91cEluZGV4KG5hbWUsIGNvbnRleHQpO1xuXHRcdFx0XHRpZiAoc3VjY2Vzcykge1xuXHRcdFx0XHRcdGRlbGV0ZSB0aGlzLl9maWVsZEdyb3VwSW52YWxpZGl0eVtpZF0/LltmaWVsZC5nZXRJZCgpXTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLl9maWVsZEdyb3VwSW52YWxpZGl0eVtpZF0gPSB7XG5cdFx0XHRcdFx0XHQuLi50aGlzLl9maWVsZEdyb3VwSW52YWxpZGl0eVtpZF0sXG5cdFx0XHRcdFx0XHQuLi57IFtmaWVsZC5nZXRJZCgpXTogdHJ1ZSB9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNpZGVFZmZlY3Rz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
|
|
@@ -11,13 +11,13 @@ import type {
|
|
|
11
11
|
import Button from "sap/m/Button";
|
|
12
12
|
import Dialog from "sap/m/Dialog";
|
|
13
13
|
import MessageToast from "sap/m/MessageToast";
|
|
14
|
+
import type { RadioButtonGroup$SelectEvent } from "sap/m/RadioButtonGroup";
|
|
14
15
|
import Text from "sap/m/Text";
|
|
15
16
|
import type UI5Event from "sap/ui/base/Event";
|
|
16
17
|
import type Control from "sap/ui/core/Control";
|
|
17
18
|
import type { Control$ValidateFieldGroupEvent } from "sap/ui/core/Control";
|
|
18
19
|
import ControllerExtension from "sap/ui/core/mvc/ControllerExtension";
|
|
19
20
|
import OverrideExecution from "sap/ui/core/mvc/OverrideExecution";
|
|
20
|
-
import type Field from "sap/ui/mdc/Field";
|
|
21
21
|
import type { Field$ChangeEvent } from "sap/ui/mdc/Field";
|
|
22
22
|
import type { MultiValueField$ChangeEvent } from "sap/ui/mdc/MultiValueField";
|
|
23
23
|
import type Context from "sap/ui/model/odata/v4/Context";
|
|
@@ -267,11 +267,11 @@ class SideEffectsControllerExtension extends ControllerExtension {
|
|
|
267
267
|
@publicExtension()
|
|
268
268
|
@finalExtension()
|
|
269
269
|
prepareDeferredSideEffectsForField(
|
|
270
|
-
event: Field$ChangeEvent | MultiValueField$ChangeEvent,
|
|
270
|
+
event: Field$ChangeEvent | MultiValueField$ChangeEvent | RadioButtonGroup$SelectEvent,
|
|
271
271
|
fieldValidity: boolean,
|
|
272
272
|
fieldGroupPreRequisite?: Promise<unknown>
|
|
273
273
|
): void {
|
|
274
|
-
const field = (event as UI5Event<{},
|
|
274
|
+
const field = (event as UI5Event<{}, Control>).getSource();
|
|
275
275
|
this._saveFieldPropertiesStatus(field, fieldValidity);
|
|
276
276
|
if (!fieldValidity) {
|
|
277
277
|
return;
|
|
@@ -302,12 +302,12 @@ class SideEffectsControllerExtension extends ControllerExtension {
|
|
|
302
302
|
@publicExtension()
|
|
303
303
|
@finalExtension()
|
|
304
304
|
async handleFieldChange(
|
|
305
|
-
event: Field$ChangeEvent,
|
|
305
|
+
event: Field$ChangeEvent | MultiValueField$ChangeEvent | RadioButtonGroup$SelectEvent,
|
|
306
306
|
fieldValidity: boolean,
|
|
307
307
|
fieldGroupPreRequisite?: Promise<unknown>,
|
|
308
308
|
skipDeferredRegistration = false
|
|
309
309
|
): Promise<void> {
|
|
310
|
-
const field = event.getSource()
|
|
310
|
+
const field = (event as UI5Event<{}, Control>).getSource();
|
|
311
311
|
if (!skipDeferredRegistration) {
|
|
312
312
|
this.prepareDeferredSideEffectsForField(event, fieldValidity, fieldGroupPreRequisite);
|
|
313
313
|
} else {
|