@sapui5/sap.fe.core 1.136.12 → 1.136.13

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sapui5/sap.fe.core",
3
- "version": "1.136.12",
3
+ "version": "1.136.13",
4
4
  "description": "SAPUI5 Library sap.fe.core",
5
5
  "keywords": [
6
6
  "sapui5",
@@ -6,7 +6,7 @@
6
6
  SAP UI development toolkit for HTML5 (SAPUI5)
7
7
  (c) Copyright 2009-2021 SAP SE. All rights reserved
8
8
  </copyright>
9
- <version>1.136.12</version>
9
+ <version>1.136.13</version>
10
10
 
11
11
  <documentation>UI5 library: sap.fe.core</documentation>
12
12
 
@@ -211,6 +211,11 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/fe/base/ClassSupp
211
211
  if (internalModelContext && internalModelContext.getProperty("fclColumnClosed") === true) {
212
212
  const technicalKeysObject = internalModelContext.getProperty("technicalKeysOfLastSeenRecord");
213
213
  const bindingContext = view?.getBindingContext();
214
+ if (bindingContext.getObject() === undefined) {
215
+ // After executing a bound action in an FCL app, we set the EditState to dirty, which refreshes the LR table, and invalidate all bindingContexts.
216
+ // This ensure it won't throw an error in those cases.
217
+ return false;
218
+ }
214
219
  const path = bindingContext && bindingContext.getPath() || "";
215
220
  const metaModel = bindingContext?.getModel().getMetaModel();
216
221
  const metaPath = metaModel?.getMetaPath(path);
@@ -358,4 +363,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/fe/base/ClassSupp
358
363
  */
359
364
  return AppStateHandler;
360
365
  }, true);
361
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJOYXZUeXBlIiwibGlicmFyeSIsIlNLSVBfTUVSR0VfS0VZIiwiUkVQTEFDRV9DT01QTEVURV9BUFBTVEFURSIsIkFwcFN0YXRlSGFuZGxlciIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9jbGFzcyIsIl9BcHBTdGF0ZUhhbmRsZXIiLCJfQmFzZU9iamVjdCIsIm9BcHBDb21wb25lbnQiLCJfdGhpcyIsImNhbGwiLCJfbUN1cnJlbnRBcHBTdGF0ZSIsInNJZCIsImdldElkIiwic2ltdWx0YW5lb3VzQ3JlYXRlUmVxdWVzdCIsImJOb1JvdXRlQ2hhbmdlIiwiTG9nIiwiaW5mbyIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiX2dldElubmVyQXBwU3RhdGVGb3JWaWV3IiwiaW5uZXJBcHBTdGF0ZSIsInN0YXRlSWRlbnRpZmllciIsIl9hZGRBcHBTdGF0ZUluSGFzaCIsImFwcFN0YXRlS2V5IiwiYXBwQ29tcG9uZW50IiwibmF2aWdhdGlvblNlcnZpY2UiLCJnZXROYXZpZ2F0aW9uU2VydmljZSIsInJvdXRlclByb3h5IiwiZ2V0Um91dGVyUHJveHkiLCJoYXNoIiwiZ2V0SGFzaCIsImlzU3RpY2t5TW9kZSIsIk1vZGVsSGVscGVyIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiZ2V0TWV0YU1vZGVsIiwiaXNIaWRkZW5EcmFmdEVuYWJsZWQiLCJnZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcyIsImdldENhcGFiaWxpdGllcyIsIkhpZGRlbkRyYWZ0IiwiZW5hYmxlZCIsIm5ld0hhc2giLCJyZXBsYWNlSW5uZXJBcHBTdGF0ZUtleSIsIm5hdlRvSGFzaCIsInVuZGVmaW5lZCIsIl9jcmVhdGVBcHBTdGF0ZUtleSIsImFwcFN0YXRlRGF0YSIsInN0b3JlSW5uZXJBcHBTdGF0ZUFzeW5jIiwiX2dldEFwcFN0YXRlSW5mbyIsImNyZWF0ZUFwcFBhcmFtZXRlcnMiLCJyZXBsYWNlSGFzaCIsInZpZXdJZCIsImFwcFN0YXRlIiwiY3VycmVudFN0YXRlVG9VcGRhdGUiLCJkZWVwRXF1YWwiLCJvRXJyb3IiLCJlcnJvciIsImZpbmRBcHBTdGF0ZUluSGFzaCIsImNyZWF0ZUFwcFN0YXRlIiwiQXBwU3RhdGUiLCJCdXN5TG9ja2VyIiwiaXNMb2NrZWQiLCJza2lwTWVyZ2UiLCJyb290Q29udHJvbGxlciIsImdldFJvb3RDb250cm9sIiwiZ2V0Q29udHJvbGxlciIsInZpZXdTdGF0ZSIsIkVycm9yIiwiZ2V0TWV0YWRhdGEiLCJnZXROYW1lIiwicm91dGluZ0lzQ29tcGxldGUiLCJyZXRyaWV2ZVZpZXdTdGF0ZSIsIl9jcmVhdGVOYXZpZ2F0aW9uUGFyYW1ldGVycyIsIm9BcHBEYXRhIiwic05hdlR5cGUiLCJPYmplY3QiLCJhc3NpZ24iLCJzZWxlY3Rpb25WYXJpYW50RGVmYXVsdHMiLCJvRGVmYXVsdGVkU2VsZWN0aW9uVmFyaWFudCIsInNlbGVjdGlvblZhcmlhbnQiLCJvU2VsZWN0aW9uVmFyaWFudCIsInJlcXVpcmVzU3RhbmRhcmRWYXJpYW50IiwiYk5hdlNlbFZhckhhc0RlZmF1bHRzT25seSIsIm5hdmlnYXRpb25UeXBlIiwic2V0UlRBVmVyc2lvbldhc0FjdGl2YXRlZCIsImlkIiwidmFsdWUiLCJ2ZXJzaW9uQWN0aXZhdGlvblN0YXR1cyIsImdldFJUQVZlcnNpb25XYXNBY3RpdmF0ZWQiLCJfY2hlY2tJZkxhc3RTZWVuUmVjb3JkIiwidmlldyIsImludGVybmFsTW9kZWxDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJnZXRQcm9wZXJ0eSIsInRlY2huaWNhbEtleXNPYmplY3QiLCJiaW5kaW5nQ29udGV4dCIsInBhdGgiLCJnZXRQYXRoIiwibWV0YU1vZGVsIiwiZ2V0TW9kZWwiLCJtZXRhUGF0aCIsImdldE1ldGFQYXRoIiwidGVjaG5pY2FsS2V5cyIsImdldE9iamVjdCIsImVsZW1lbnQiLCJrZXlWYWx1ZSIsInNldFByb3BlcnR5IiwiX2dldEFwcFN0YXRlRGF0YSIsIm5hdlR5cGUiLCJrZXkiLCJpIiwiaHlicmlkIiwiaUFwcFN0YXRlIiwia2V5cyIsImxlbmd0aCIsImFwcGx5QXBwU3RhdGUiLCJQcm9taXNlIiwicmVzb2x2ZSIsImNoZWNrSWZMYXN0U2VlblJlY29yZCIsImxvY2siLCJvTmF2aWdhdGlvblNlcnZpY2UiLCJ0b0VTNlByb21pc2UiLCJwYXJzZU5hdmlnYXRpb24iLCJjYXRjaCIsImFFcnJvckRhdGEiLCJ3YXJuaW5nIiwidGhlbiIsImFSZXN1bHRzIiwiaW5pdGlhbCIsIm9Sb290Q29udHJvbGxlciIsInNob3VsZEFwcGx5U3RhdGUiLCJfaXNTdGF0ZUVtcHR5Rm9ySUFwcFN0YXRlTmF2VHlwZSIsIl9nZXRJbml0aWFsU3RhdGVBcHBsaWVkIiwiX3NldEluaXRpYWxTdGF0ZUFwcGxpZWQiLCJhcHBseVZpZXdTdGF0ZSIsImZpbmFsbHkiLCJ1bmxvY2siLCJjaGVja0lmUm91dGVDaGFuZ2VkQnlJQXBwIiwicmVzZXRSb3V0ZUNoYW5nZWRCeUlBcHAiLCJyZXNldFZlcnNpb25BY3RpdmF0aW9uU3RhdHVzIiwiaGFzT3duUHJvcGVydHkiLCJCYXNlT2JqZWN0Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJBcHBTdGF0ZUhhbmRsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgZGVlcEVxdWFsIGZyb20gXCJzYXAvYmFzZS91dGlsL2RlZXBFcXVhbFwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBOYXZpZ2F0aW9uUGFyYW1ldGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1ZpZXdTdGF0ZVwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgdG9FUzZQcm9taXNlIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1RvRVM2UHJvbWlzZVwiO1xuaW1wb3J0IHR5cGUgeyBJbm5lckFwcERhdGEgfSBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vTmF2aWdhdGlvbkhhbmRsZXJcIjtcbmltcG9ydCB0eXBlIHsgU2VsZWN0aW9uVmFyaWFudCB9IGZyb20gXCJzYXAvZmUvbmF2aWdhdGlvbi9TZWxlY3Rpb25WYXJpYW50XCI7XG5pbXBvcnQgbGlicmFyeSBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vbGlicmFyeVwiO1xuaW1wb3J0IEJhc2VPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL09iamVjdFwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgQnVzeUxvY2tlciBmcm9tIFwiLi9jb250cm9sbGVyZXh0ZW5zaW9ucy9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgdHlwZSB7IEhpZGRlbkRyYWZ0IH0gZnJvbSBcIi4vY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcIi4vaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuXG5jb25zdCBOYXZUeXBlID0gbGlicmFyeS5OYXZUeXBlO1xudHlwZSBBcHBTdGF0ZSA9IHtcblx0c2tpcE1lcmdlPzogYm9vbGVhbjtcblx0W2tleTogc3RyaW5nXTogdW5rbm93bjtcbn07XG5leHBvcnQgdHlwZSBBcHBEYXRhID0ge1xuXHRvRGVmYXVsdGVkU2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudDtcblx0b1NlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQ7XG5cdGJOYXZTZWxWYXJIYXNEZWZhdWx0c09ubHk6IGJvb2xlYW47XG5cdGFwcFN0YXRlOiBBcHBTdGF0ZTtcblx0aUFwcFN0YXRlPzoge1xuXHRcdGFwcFN0YXRlOiBBcHBTdGF0ZTtcblx0fTtcbn07XG5jb25zdCBTS0lQX01FUkdFX0tFWSA9IFwic2tpcE1lcmdlXCI7XG5leHBvcnQgdHlwZSBJQXBwU3RhdGUgPSB7XG5cdGFwcFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn07XG5cbmV4cG9ydCB0eXBlIEFwcERhdGFJbmZvID0ge1xuXHRhcHBTdGF0ZURhdGE6IHsgYXBwU3RhdGU6IG9iamVjdCB8IHVuZGVmaW5lZCB9O1xuXHRhcHBTdGF0ZUtleTogc3RyaW5nIHwgbnVsbDtcbn07XG5cbmV4cG9ydCB0eXBlIENyZWF0ZUFwcFBhcmFtZXRlcnMgPSB7XG5cdHJlcGxhY2VIYXNoPzogYm9vbGVhbjtcblx0c2tpcE1lcmdlPzogYm9vbGVhbjtcblx0dmlld0lkPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgVmVyc2lvbkFjdGl2YXRlZCA9IHtcblx0dmVyc2lvbldhc0FjdGl2YXRlZDogYm9vbGVhbjtcbn07XG5cbmNvbnN0IFJFUExBQ0VfQ09NUExFVEVfQVBQU1RBVEUgPSBcIlJFUExBQ0VfQ09NUExFVEVfQVBQU1RBVEVcIjtcblxuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuQXBwU3RhdGVIYW5kbGVyXCIpXG5jbGFzcyBBcHBTdGF0ZUhhbmRsZXIgZXh0ZW5kcyBCYXNlT2JqZWN0IHtcblx0cHVibGljIHNJZDogc3RyaW5nO1xuXG5cdHB1YmxpYyBvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7XG5cblx0cHVibGljIGJOb1JvdXRlQ2hhbmdlOiBib29sZWFuO1xuXG5cdHByaXZhdGUgX21DdXJyZW50QXBwU3RhdGU/OiBBcHBTdGF0ZSA9IHt9O1xuXG5cdHNpbXVsdGFuZW91c0NyZWF0ZVJlcXVlc3Q6IFJlY29yZDxzdHJpbmcsIG51bWJlcj47XG5cblx0c3RhdGljIHZlcnNpb25BY3RpdmF0aW9uU3RhdHVzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yKG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5vQXBwQ29tcG9uZW50ID0gb0FwcENvbXBvbmVudDtcblx0XHR0aGlzLnNJZCA9IGAke29BcHBDb21wb25lbnQuZ2V0SWQoKX0vQXBwU3RhdGVIYW5kbGVyYDtcblx0XHR0aGlzLnNpbXVsdGFuZW91c0NyZWF0ZVJlcXVlc3QgPSB7fTtcblx0XHR0aGlzLmJOb1JvdXRlQ2hhbmdlID0gZmFsc2U7XG5cdFx0TG9nLmluZm8oXCJBUFBTVEFURSA6IEFwcHN0YXRlIGhhbmRsZXIgaW5pdGlhbGl6ZWRcIik7XG5cdH1cblxuXHRnZXRJZCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLnNJZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdmlldyBzcGVjaWZpYyBhcHBzdGF0ZS5cblx0ICogQHBhcmFtIGlubmVyQXBwU3RhdGUgT3ZlcmFsbCBhcHBzdGF0ZVxuXHQgKiBAcGFyYW0gc3RhdGVJZGVudGlmaWVyIFN0YXRlIGlkZW50aWZpZXIuIElkIG9mIHRoZSBsb2NhbCB2aWV3XG5cdCAqIEByZXR1cm5zIElubmVyIGFwcHN0YXRlXG5cdCAqL1xuXHRfZ2V0SW5uZXJBcHBTdGF0ZUZvclZpZXcoaW5uZXJBcHBTdGF0ZTogSW5uZXJBcHBEYXRhIHwgdW5kZWZpbmVkLCBzdGF0ZUlkZW50aWZpZXI6IHN0cmluZyk6IElubmVyQXBwRGF0YSB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHN0YXRlSWRlbnRpZmllciA9PT0gUkVQTEFDRV9DT01QTEVURV9BUFBTVEFURSB8fCAhaW5uZXJBcHBTdGF0ZSkge1xuXHRcdFx0Ly8gb3ZlcmFsbCBhcHAgc3RhdGUgbmVlZHMgdG8gYmUgY29uc2lkZXJlZC5cblx0XHRcdHJldHVybiBpbm5lckFwcFN0YXRlO1xuXHRcdH1cblxuXHRcdC8vIHdlIHRha2UgdGhlIHN1YnNldCBvZiB0aGUgYXBwIHN0YXRlIHdydCB0byB0aGUgbG9jYWwgdmlldyBpZC5cblx0XHRyZXR1cm4ge1xuXHRcdFx0W3N0YXRlSWRlbnRpZmllcl06IGlubmVyQXBwU3RhdGVbc3RhdGVJZGVudGlmaWVyIGFzIGtleW9mIHR5cGVvZiBpbm5lckFwcFN0YXRlXSB8fCB7fVxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogQWRkIGFwcHN0YXRlIGluIGhhc2guXG5cdCAqIEBwYXJhbSBhcHBTdGF0ZUtleSBBcHBzdGF0ZSBrZXlcblx0ICogQHBhcmFtIHN0YXRlSWRlbnRpZmllciBTdGF0ZSBpZGVudGlmaWVyLiBJZCBvZiB0aGUgbG9jYWwgdmlld1xuXHQgKi9cblx0X2FkZEFwcFN0YXRlSW5IYXNoKGFwcFN0YXRlS2V5OiBzdHJpbmcsIHN0YXRlSWRlbnRpZmllcjogc3RyaW5nKTogdm9pZCB7XG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gdGhpcy5vQXBwQ29tcG9uZW50LFxuXHRcdFx0bmF2aWdhdGlvblNlcnZpY2UgPSBhcHBDb21wb25lbnQuZ2V0TmF2aWdhdGlvblNlcnZpY2UoKSxcblx0XHRcdHJvdXRlclByb3h5ID0gYXBwQ29tcG9uZW50LmdldFJvdXRlclByb3h5KCksXG5cdFx0XHRoYXNoID0gcm91dGVyUHJveHkuZ2V0SGFzaCgpLFxuXHRcdFx0aXNTdGlja3lNb2RlID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKGFwcENvbXBvbmVudC5nZXRNZXRhTW9kZWwoKSksXG5cdFx0XHRpc0hpZGRlbkRyYWZ0RW5hYmxlZCA9XG5cdFx0XHRcdCh0aGlzLm9BcHBDb21wb25lbnQuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKS5nZXRDYXBhYmlsaXRpZXMoKS5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdCk/LmVuYWJsZWQgfHwgZmFsc2UsXG5cdFx0XHRuZXdIYXNoID0gbmF2aWdhdGlvblNlcnZpY2UucmVwbGFjZUlubmVyQXBwU3RhdGVLZXkocm91dGVyUHJveHkuZ2V0SGFzaCgpLCBhcHBTdGF0ZUtleSk7XG5cblx0XHRpZiAobmV3SGFzaCAmJiB0aGlzLnNpbXVsdGFuZW91c0NyZWF0ZVJlcXVlc3Rbc3RhdGVJZGVudGlmaWVyXSA9PT0gMCAmJiBuZXdIYXNoICE9PSBoYXNoKSB7XG5cdFx0XHRyb3V0ZXJQcm94eS5uYXZUb0hhc2gobmV3SGFzaCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgaXNTdGlja3lNb2RlIHx8IGlzSGlkZGVuRHJhZnRFbmFibGVkKTtcblx0XHRcdHRoaXMuYk5vUm91dGVDaGFuZ2UgPSB0cnVlO1xuXHRcdH1cblx0XHRMb2cuaW5mbyhcIkFQUFNUQVRFOiBuYXZUb0hhc2hcIik7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlIEFwcHN0YXRlIEtleS5cblx0ICogQHBhcmFtIGFwcFN0YXRlRGF0YSBBcHBzdGF0ZVxuXHQgKiBAcGFyYW0gc3RhdGVJZGVudGlmaWVyIFN0YXRlIGlkZW50aWZpZXIuIElkIG9mIHRoZSBsb2NhbCB2aWV3XG5cdCAqIEByZXR1cm5zIEFwcHN0YXRlIEtleVxuXHQgKi9cblx0YXN5bmMgX2NyZWF0ZUFwcFN0YXRlS2V5KGFwcFN0YXRlRGF0YTogSW5uZXJBcHBEYXRhLCBzdGF0ZUlkZW50aWZpZXI6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gdGhpcy5vQXBwQ29tcG9uZW50LFxuXHRcdFx0bmF2aWdhdGlvblNlcnZpY2UgPSBhcHBDb21wb25lbnQuZ2V0TmF2aWdhdGlvblNlcnZpY2UoKTtcblxuXHRcdGlmICh0aGlzLnNpbXVsdGFuZW91c0NyZWF0ZVJlcXVlc3Rbc3RhdGVJZGVudGlmaWVyXSkge1xuXHRcdFx0Ly8gYW55IG90aGVyIHZhbHVlXG5cdFx0XHR0aGlzLnNpbXVsdGFuZW91c0NyZWF0ZVJlcXVlc3Rbc3RhdGVJZGVudGlmaWVyXSsrO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyAwIG9yIHVuZGVmaW5lZFxuXHRcdFx0dGhpcy5zaW11bHRhbmVvdXNDcmVhdGVSZXF1ZXN0W3N0YXRlSWRlbnRpZmllcl0gPSAxO1xuXHRcdH1cblxuXHRcdGNvbnN0IGFwcFN0YXRlS2V5ID0gYXdhaXQgbmF2aWdhdGlvblNlcnZpY2Uuc3RvcmVJbm5lckFwcFN0YXRlQXN5bmMoYXBwU3RhdGVEYXRhLCB0cnVlLCB0cnVlKTtcblxuXHRcdHRoaXMuc2ltdWx0YW5lb3VzQ3JlYXRlUmVxdWVzdFtzdGF0ZUlkZW50aWZpZXJdLS07XG5cblx0XHRMb2cuaW5mbyhcIkFQUFNUQVRFOiBBcHBzdGF0ZSBzdG9yZWRcIik7XG5cdFx0cmV0dXJuIGFwcFN0YXRlS2V5O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYXBwc3RhdGUgaW5mby5cblx0ICogQHBhcmFtIGlubmVyQXBwU3RhdGVcblx0ICogQHBhcmFtIGNyZWF0ZUFwcFBhcmFtZXRlcnMgUGFyYW1ldGVycyBmb3IgY3JlYXRpbmcgbmV3IGFwcHN0YXRlXG5cdCAqIEBwYXJhbSBjcmVhdGVBcHBQYXJhbWV0ZXJzLnJlcGxhY2VIYXNoIEJvb2xlYW4gd2hpY2ggZGV0ZXJtaW5lcyB0byByZXBsYWNlIHRoZSBoYXNoIHdpdGggdGhlIG5ldyBnZW5lcmF0ZWQga2V5XG5cdCAqIEBwYXJhbSBjcmVhdGVBcHBQYXJhbWV0ZXJzLnZpZXdJZCBJZCBvZiB0aGUgdmlldyBmb3Igd2hpY2ggd2UgbmVlZCB0byBjcmVhdGUgdGhlIGFwcCBzdGF0ZS4gVGhpcyBpcyB0byBjcmVhdGUgb3IgdXBkYXRlIHZpZXcgc3BlY2lmaWMgYXBwc3RhdGUuXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSByZXNvbHZpbmcgdGhlIHN0b3JlZCBkYXRhIG9yIGFwcHN0YXRlIGtleVxuXHQgKi9cblx0YXN5bmMgX2dldEFwcFN0YXRlSW5mbyhpbm5lckFwcFN0YXRlOiBJbm5lckFwcERhdGEgfCB1bmRlZmluZWQsIGNyZWF0ZUFwcFBhcmFtZXRlcnM/OiBDcmVhdGVBcHBQYXJhbWV0ZXJzKTogUHJvbWlzZTxBcHBEYXRhSW5mbz4ge1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IHRoaXMub0FwcENvbXBvbmVudDtcblx0XHRjb25zdCB7IHJlcGxhY2VIYXNoID0gdHJ1ZSwgdmlld0lkOiBzdGF0ZUlkZW50aWZpZXIgPSBSRVBMQUNFX0NPTVBMRVRFX0FQUFNUQVRFIH0gPSBjcmVhdGVBcHBQYXJhbWV0ZXJzID8/IHt9O1xuXG5cdFx0bGV0IGFwcFN0YXRlS2V5OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblx0XHRsZXQgYXBwU3RhdGVEYXRhID0geyBhcHBTdGF0ZTogdGhpcy5fbUN1cnJlbnRBcHBTdGF0ZSB9O1xuXG5cdFx0Y29uc3QgY3VycmVudFN0YXRlVG9VcGRhdGUgPSB0aGlzLl9nZXRJbm5lckFwcFN0YXRlRm9yVmlldyh0aGlzLl9tQ3VycmVudEFwcFN0YXRlLCBzdGF0ZUlkZW50aWZpZXIpO1xuXHRcdGlmIChpbm5lckFwcFN0YXRlICYmICFkZWVwRXF1YWwoY3VycmVudFN0YXRlVG9VcGRhdGUsIGlubmVyQXBwU3RhdGUpKSB7XG5cdFx0XHQvL1xuXHRcdFx0dGhpcy5fbUN1cnJlbnRBcHBTdGF0ZSA9IHsgLi4udGhpcy5fbUN1cnJlbnRBcHBTdGF0ZSwgLi4uKGlubmVyQXBwU3RhdGUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIH07XG5cdFx0XHRhcHBTdGF0ZURhdGEgPSB7IGFwcFN0YXRlOiB0aGlzLl9tQ3VycmVudEFwcFN0YXRlIH07XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRhcHBTdGF0ZUtleSA9IGF3YWl0IHRoaXMuX2NyZWF0ZUFwcFN0YXRlS2V5KGFwcFN0YXRlRGF0YSwgc3RhdGVJZGVudGlmaWVyKTtcblx0XHRcdFx0aWYgKHJlcGxhY2VIYXNoID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0dGhpcy5fYWRkQXBwU3RhdGVJbkhhc2goYXBwU3RhdGVLZXksIHN0YXRlSWRlbnRpZmllcik7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRMb2cuZXJyb3Iob0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHJvdXRlclByb3h5ID0gYXBwQ29tcG9uZW50LmdldFJvdXRlclByb3h5KCksXG5cdFx0XHRcdGhhc2ggPSByb3V0ZXJQcm94eS5nZXRIYXNoKCk7XG5cdFx0XHRhcHBTdGF0ZUtleSA9IHJvdXRlclByb3h5LmZpbmRBcHBTdGF0ZUluSGFzaChoYXNoKSBhcyBzdHJpbmc7XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHRhcHBTdGF0ZURhdGEsXG5cdFx0XHRhcHBTdGF0ZUtleVxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBvciB1cGRhdGVzIHRoZSBhcHBzdGF0ZS5cblx0ICogUmVwbGFjZXMgdGhlIGhhc2ggd2l0aCB0aGUgbmV3IGFwcHN0YXRlIGJhc2VkIG9uIHJlcGxhY2VIYXNoLlxuXHQgKiBAcGFyYW0gY3JlYXRlQXBwUGFyYW1ldGVycyBQYXJhbWV0ZXJzIGZvciBjcmVhdGluZyBuZXcgYXBwc3RhdGVcblx0ICogQHBhcmFtIGNyZWF0ZUFwcFBhcmFtZXRlcnMucmVwbGFjZUhhc2ggQm9vbGVhbiB3aGljaCBkZXRlcm1pbmVzIHRvIHJlcGxhY2UgdGhlIGhhc2ggd2l0aCB0aGUgbmV3IGdlbmVyYXRlZCBrZXlcblx0ICogQHBhcmFtIGNyZWF0ZUFwcFBhcmFtZXRlcnMuc2tpcE1lcmdlIEJvb2xlYW4gd2hpY2ggZGV0ZXJtaW5lcyB0byBza2lwIHRoZSBrZXkgdXNlciBzaGluZSB0aHJvdWdoXG5cdCAqIEBwYXJhbSBjcmVhdGVBcHBQYXJhbWV0ZXJzLnZpZXdJZCBJZCBvZiB0aGUgdmlldyBmb3Igd2hpY2ggd2UgbmVlZCB0byBjcmVhdGUgdGhlIGFwcCBzdGF0ZS4gVGhpcyBpcyB0byBjcmVhdGUgb3IgdXBkYXRlIHZpZXcgc3BlY2lmaWMgYXBwc3RhdGVcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHJlc29sdmluZyB0aGUgc3RvcmVkIGRhdGEgb3IgYXBwc3RhdGUga2V5XG5cdCAqL1xuXHRhc3luYyBjcmVhdGVBcHBTdGF0ZShjcmVhdGVBcHBQYXJhbWV0ZXJzPzogQ3JlYXRlQXBwUGFyYW1ldGVycyk6IFByb21pc2U8dm9pZCB8IEFwcERhdGFJbmZvPiB7XG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gdGhpcy5vQXBwQ29tcG9uZW50O1xuXHRcdGlmICghYXBwQ29tcG9uZW50LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCkuZ2V0Q2FwYWJpbGl0aWVzKCkuQXBwU3RhdGUgfHwgQnVzeUxvY2tlci5pc0xvY2tlZCh0aGlzKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCB7IHNraXBNZXJnZSA9IGZhbHNlLCB2aWV3SWQ6IHN0YXRlSWRlbnRpZmllciA9IFJFUExBQ0VfQ09NUExFVEVfQVBQU1RBVEUgfSA9IGNyZWF0ZUFwcFBhcmFtZXRlcnMgPz8ge30sXG5cdFx0XHRyb290Q29udHJvbGxlciA9IGFwcENvbXBvbmVudC5nZXRSb290Q29udHJvbCgpLmdldENvbnRyb2xsZXIoKTtcblxuXHRcdGlmICghcm9vdENvbnRyb2xsZXIudmlld1N0YXRlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYHZpZXdTdGF0ZSBjb250cm9sbGVyIGV4dGVuc2lvbiBub3QgYXZhaWxhYmxlIGZvciBjb250cm9sbGVyOiAke3Jvb3RDb250cm9sbGVyLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpfWApO1xuXHRcdH1cblxuXHRcdC8vIEluIGNhc2UsIG9uIGxvYWQgb2YgRkNMIGFwcCB3ZSBoYXZlIG11bHRpcGxlIHZpZXdzKExSLCBPUCwgc3ViLU9QLi4uKSBhbmQgdXJsIGhhcyBpQXBwU3RhdGUoMSkuXG5cdFx0Ly8gVGhlIExSIHZpZXcgbG9hZHMgd2l0aCBhcHBsaWVkIGlBcHBTdGF0ZSgxKSBhbmQgY2FsbHMgY3JlYXRlQXBwU3RhdGUoZXhhbXBsZTogb25TZWFyY2ggZXZlbnQgaW4gTFIpIGJlZm9yZSBPUCBpcyBsb2FkZWQuXG5cdFx0Ly8gVGhpcyBjcmVhdGVzIGlBcHBTdGF0ZSgyKSBiZWZvcmUgaUFwcFN0YXRlKDEpIGlzIGFwcGxpZWQgdG8gT1AuXG5cdFx0Ly8gU28sIHdlIHRyeSB0byB3YWl0IHRpbGwgdGhlIHJvdXRpbmcgaXMgY29tcGxldGUuXG5cdFx0YXdhaXQgcm9vdENvbnRyb2xsZXIucm91dGluZ0lzQ29tcGxldGUoKTtcblxuXHRcdC8vIEdldCBhcHBTdGF0ZSB0byB1cGRhdGVcblx0XHRsZXQgaW5uZXJBcHBTdGF0ZSA9IChhd2FpdCByb290Q29udHJvbGxlci52aWV3U3RhdGUucmV0cmlldmVWaWV3U3RhdGUoKSkgYXMgSW5uZXJBcHBEYXRhIHwgdW5kZWZpbmVkO1xuXHRcdGlubmVyQXBwU3RhdGUgPSB0aGlzLl9nZXRJbm5lckFwcFN0YXRlRm9yVmlldyhpbm5lckFwcFN0YXRlLCBzdGF0ZUlkZW50aWZpZXIpO1xuXHRcdGlmIChza2lwTWVyZ2UpIHtcblx0XHRcdGlubmVyQXBwU3RhdGUgPSB7IC4uLmlubmVyQXBwU3RhdGUsIC4uLnsgc2tpcE1lcmdlIH0gfTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5fZ2V0QXBwU3RhdGVJbmZvKGlubmVyQXBwU3RhdGUsIGNyZWF0ZUFwcFBhcmFtZXRlcnMpO1xuXHR9XG5cblx0X2NyZWF0ZU5hdmlnYXRpb25QYXJhbWV0ZXJzKG9BcHBEYXRhOiBBcHBEYXRhLCBzTmF2VHlwZTogc3RyaW5nKTogTmF2aWdhdGlvblBhcmFtZXRlciB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIG9BcHBEYXRhLCB7XG5cdFx0XHRzZWxlY3Rpb25WYXJpYW50RGVmYXVsdHM6IG9BcHBEYXRhLm9EZWZhdWx0ZWRTZWxlY3Rpb25WYXJpYW50LFxuXHRcdFx0c2VsZWN0aW9uVmFyaWFudDogb0FwcERhdGEub1NlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRyZXF1aXJlc1N0YW5kYXJkVmFyaWFudDogIW9BcHBEYXRhLmJOYXZTZWxWYXJIYXNEZWZhdWx0c09ubHksXG5cdFx0XHRuYXZpZ2F0aW9uVHlwZTogc05hdlR5cGVcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBSVEEgKFJ1bnRpbWUgQWRhcHRhdGlvbikgdmVyc2lvbiBhY3RpdmF0aW9uIHN0YXR1cyBmb3IgYSBzcGVjaWZpYyBJRC5cblx0ICogQHBhcmFtIGlkIFRoZSB1bmlxdWUgaWRlbnRpZmllci5cblx0ICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIFJUQSB2ZXJzaW9uIHdhcyBhY3RpdmF0ZWQuXG5cdCAqL1xuXHRzdGF0aWMgc2V0UlRBVmVyc2lvbldhc0FjdGl2YXRlZChpZDogc3RyaW5nLCB2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuXHRcdHRoaXMudmVyc2lvbkFjdGl2YXRpb25TdGF0dXNbaWRdID0gdmFsdWU7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBSVEEgKFJ1bnRpbWUgQWRhcHRhdGlvbikgdmVyc2lvbiBhY3RpdmF0aW9uIHN0YXR1cyBmb3IgYSBzcGVjaWZpYyBJRC5cblx0ICogQHBhcmFtIGlkIFRoZSB1bmlxdWUgaWRlbnRpZmllci5cblx0ICogQHJldHVybnMgVGhlIGFjdGl2YXRpb24gc3RhdHVzIG9yIHVuZGVmaW5lZCBpZiBub3Qgc2V0LlxuXHQgKi9cblx0c3RhdGljIGdldFJUQVZlcnNpb25XYXNBY3RpdmF0ZWQoaWQ6IHN0cmluZyk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLnZlcnNpb25BY3RpdmF0aW9uU3RhdHVzW2lkXTtcblx0fVxuXG5cdF9jaGVja0lmTGFzdFNlZW5SZWNvcmQodmlldz86IFZpZXcpOiBib29sZWFuIHtcblx0XHQvL2dldHRpbmcgdGhlIGludGVybmFsIG1vZGVsIGNvbnRleHQgaW4gb3JkZXIgdG8gZmV0Y2ggdGhlIHRlY2huaWNhbGtleXMgb2YgbGFzdCBzZWVuIHJlY29yZCBhbmQgY2xvc2UgY29sdW1uIGZsYWcgc2V0IGluIHRoZSBpbnRlcm5hbHJvdXRpbmcgZm9yIHJldGFpbmluZyBzZXR0aW5ncyBpbiBwZXJzaXN0ZW5jZSBtb2RlXG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSB2aWV3ICYmICh2aWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQpO1xuXHRcdGlmIChpbnRlcm5hbE1vZGVsQ29udGV4dCAmJiBpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImZjbENvbHVtbkNsb3NlZFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3QgdGVjaG5pY2FsS2V5c09iamVjdCA9IGludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwidGVjaG5pY2FsS2V5c09mTGFzdFNlZW5SZWNvcmRcIik7XG5cdFx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IHZpZXc/LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dDtcblx0XHRcdGNvbnN0IHBhdGggPSAoYmluZGluZ0NvbnRleHQgJiYgYmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpKSB8fCBcIlwiO1xuXHRcdFx0Y29uc3QgbWV0YU1vZGVsID0gYmluZGluZ0NvbnRleHQ/LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRjb25zdCBtZXRhUGF0aCA9IG1ldGFNb2RlbD8uZ2V0TWV0YVBhdGgocGF0aCk7XG5cdFx0XHRjb25zdCB0ZWNobmljYWxLZXlzID0gbWV0YU1vZGVsPy5nZXRPYmplY3QoYCR7bWV0YVBhdGh9LyRUeXBlLyRLZXlgKTtcblx0XHRcdGlmICh0ZWNobmljYWxLZXlzKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiB0ZWNobmljYWxLZXlzKSB7XG5cdFx0XHRcdFx0Y29uc3Qga2V5VmFsdWUgPSBiaW5kaW5nQ29udGV4dC5nZXRPYmplY3QoKVtlbGVtZW50XTtcblx0XHRcdFx0XHRpZiAoa2V5VmFsdWUgIT09IHRlY2huaWNhbEtleXNPYmplY3RbZWxlbWVudF0pIHtcblx0XHRcdFx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZmNsQ29sdW1uQ2xvc2VkXCIsIGZhbHNlKTtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly90aGUgcmVjb3JkIG9wZW5lZCBpcyBub3QgdGhlIGxhc3Qgc2VlbiBvbmUgOiBubyBuZWVkIHRvIHBlcnNpc3QgdGhlIGNoYW5nZXMsIHJlc2V0IHRvIGRlZmF1bHQgaW5zdGVhZFxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRfZ2V0QXBwU3RhdGVEYXRhKG9BcHBEYXRhOiBBcHBEYXRhLCB2aWV3SWQ/OiBzdHJpbmcsIG5hdlR5cGU/OiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IGtleSA9IFwiXCIsXG5cdFx0XHRpID0gMDtcblx0XHRjb25zdCBhcHBTdGF0ZURhdGEgPSBuYXZUeXBlID09PSBOYXZUeXBlLmh5YnJpZCA/IG9BcHBEYXRhLmlBcHBTdGF0ZSA6IG9BcHBEYXRhO1xuXG5cdFx0aWYgKGFwcFN0YXRlRGF0YT8uYXBwU3RhdGUpIHtcblx0XHRcdGZvciAoaTsgaSA8IE9iamVjdC5rZXlzKGFwcFN0YXRlRGF0YS5hcHBTdGF0ZSkubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKE9iamVjdC5rZXlzKGFwcFN0YXRlRGF0YS5hcHBTdGF0ZSlbaV0gPT09IHZpZXdJZCkge1xuXHRcdFx0XHRcdGtleSA9IE9iamVjdC5rZXlzKGFwcFN0YXRlRGF0YS5hcHBTdGF0ZSlbaV07XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKGFwcFN0YXRlRGF0YT8uYXBwU3RhdGUpIHtcblx0XHRcdHJldHVybiBrZXlcblx0XHRcdFx0PyB7XG5cdFx0XHRcdFx0XHRbT2JqZWN0LmtleXMoYXBwU3RhdGVEYXRhLmFwcFN0YXRlKVtpXV06IGFwcFN0YXRlRGF0YS5hcHBTdGF0ZVtrZXldIHx8IHt9XG5cdFx0XHRcdCAgfVxuXHRcdFx0XHQ6IHt9O1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBBcHBsaWVzIGFuIGFwcHN0YXRlIGJ5IGZldGNoaW5nIGFwcGRhdGEgYW5kIHBhc3NpbmcgaXQgdG8gX2FwcGx5QXBwc3RhdGVUb1BhZ2UuXG5cdCAqIEBwYXJhbSB2aWV3IFRoZSB2aWV3IGZvciB3aGljaCB0aGUgYXBwIHN0YXRlIG11c3QgYmUgYXBwbGllZC4gSWYgbm8gdmlldyBpcyBwcm92aWRlZCwgdGhlbiBhcHAgc3RhdGUgb2YgYWxsIHRoZSB2aWV3cyBpcyBhcHBsaWVkLlxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgZm9yIGFzeW5jIGhhbmRsaW5nXG5cdCAqL1xuXHRhc3luYyBhcHBseUFwcFN0YXRlKHZpZXc/OiBWaWV3KTogUHJvbWlzZTx2b2lkIHwge30+IHtcblx0XHRpZiAoQXBwU3RhdGVIYW5kbGVyLmdldFJUQVZlcnNpb25XYXNBY3RpdmF0ZWQodGhpcy5vQXBwQ29tcG9uZW50LmdldElkKCkpKSB7XG5cdFx0XHRBcHBTdGF0ZUhhbmRsZXIuc2V0UlRBVmVyc2lvbldhc0FjdGl2YXRlZCh0aGlzLm9BcHBDb21wb25lbnQuZ2V0SWQoKSwgZmFsc2UpO1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdH1cblx0XHRjb25zdCB2aWV3SWQgPSB2aWV3Py5nZXRJZCgpO1xuXHRcdGlmICghdGhpcy5vQXBwQ29tcG9uZW50LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCkuZ2V0Q2FwYWJpbGl0aWVzKCkuQXBwU3RhdGUgfHwgQnVzeUxvY2tlci5pc0xvY2tlZCh0aGlzLCB2aWV3SWQpKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY2hlY2tJZkxhc3RTZWVuUmVjb3JkID0gdGhpcy5fY2hlY2tJZkxhc3RTZWVuUmVjb3JkKHZpZXcpO1xuXHRcdGlmIChjaGVja0lmTGFzdFNlZW5SZWNvcmQgPT09IHRydWUpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9XG5cdFx0Ly8gbG9jayB0aGUgYXBwbHkgc3RhdGUgZm9yIHRoZSBjdXJyZW50IHZpZXdcblx0XHRCdXN5TG9ja2VyLmxvY2sodGhpcywgdmlld0lkKTtcblx0XHQvLyBsb2NrIHRoZSBBcHAgU3RhdGUgaGFuZGxlciwgdXNlZCB0byBhdm9pZCBhIGNyZWF0aW9uIG9mIGFwcCBzdGF0ZSBkdXJpbmcgYXBwbHlcblx0XHRCdXN5TG9ja2VyLmxvY2sodGhpcyk7XG5cdFx0Ly8gRG9uZSBmb3IgYnVzeSBpbmRpY2F0b3Jcblx0XHRCdXN5TG9ja2VyLmxvY2sodGhpcy5vQXBwQ29tcG9uZW50LmdldFJvb3RDb250cm9sKCkpO1xuXHRcdGNvbnN0IG9OYXZpZ2F0aW9uU2VydmljZSA9IHRoaXMub0FwcENvbXBvbmVudC5nZXROYXZpZ2F0aW9uU2VydmljZSgpO1xuXHRcdC8vIFRPRE8gb05hdmlnYXRpb25TZXJ2aWNlLnBhcnNlTmF2aWdhdGlvbigpIHNob3VsZCByZXR1cm4gRVM2IHByb21pc2UgaW5zdGVhZCBqUXVlcnkucHJvbWlzZVxuXHRcdHJldHVybiB0b0VTNlByb21pc2U8dW5rbm93bltdPihvTmF2aWdhdGlvblNlcnZpY2UucGFyc2VOYXZpZ2F0aW9uKCkpXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGFFcnJvckRhdGE6IHVua25vd25bXSkge1xuXHRcdFx0XHRpZiAoIWFFcnJvckRhdGEpIHtcblx0XHRcdFx0XHRhRXJyb3JEYXRhID0gW107XG5cdFx0XHRcdH1cblx0XHRcdFx0TG9nLndhcm5pbmcoXCJBUFBTVEFURTogUGFyc2UgTmF2aWdhdGlvbiBmYWlsZWRcIiwgYUVycm9yRGF0YVswXSBhcyBzdHJpbmcpO1xuXHRcdFx0XHRyZXR1cm4gW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdC8qIGFwcCBkYXRhICovXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRhRXJyb3JEYXRhWzFdLFxuXHRcdFx0XHRcdGFFcnJvckRhdGFbMl1cblx0XHRcdFx0XTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbihhc3luYyAoYVJlc3VsdHM6IHVua25vd25bXSkgPT4ge1xuXHRcdFx0XHRMb2cuaW5mbyhcIkFQUFNUQVRFOiBQYXJzZSBOYXZpZ2F0aW9uIGRvbmVcIik7XG5cblx0XHRcdFx0Ly8gYVJlc3VsdHNbMV0gPT4gb1N0YXJ0dXBQYXJhbWV0ZXJzIChub3QgZXZhbHVhdGVkKVxuXHRcdFx0XHRjb25zdCBvQXBwRGF0YSA9IChhUmVzdWx0c1swXSB8fCB7fSkgYXMgQXBwRGF0YSxcblx0XHRcdFx0XHRzTmF2VHlwZSA9IChhUmVzdWx0c1syXSBhcyBzdHJpbmcpIHx8IE5hdlR5cGUuaW5pdGlhbCxcblx0XHRcdFx0XHRvUm9vdENvbnRyb2xsZXIgPSB0aGlzLm9BcHBDb21wb25lbnQuZ2V0Um9vdENvbnRyb2woKS5nZXRDb250cm9sbGVyKCk7XG5cdFx0XHRcdC8vIGFwcGx5IHRoZSBhcHBzdGF0ZSBkZXBlbmRpbmcgdXBvbiB0aGUgdmlldyAoTFIvT1ApXG5cdFx0XHRcdGNvbnN0IGFwcFN0YXRlRGF0YSA9IHRoaXMuX2dldEFwcFN0YXRlRGF0YShvQXBwRGF0YSwgdmlld0lkLCBzTmF2VHlwZSk7XG5cdFx0XHRcdC8vIGZldGNoIHRoZSBza2lwTWVyZ2UgZmxhZyBmcm9tIGFwcFN0YXRlIGZvciBzYXZlIGFzIHRpbGVcblx0XHRcdFx0Y29uc3Qgc2tpcE1lcmdlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gb0FwcERhdGE/LmFwcFN0YXRlPy5bU0tJUF9NRVJHRV9LRVldO1xuXHRcdFx0XHR0aGlzLl9tQ3VycmVudEFwcFN0YXRlID1cblx0XHRcdFx0XHRzTmF2VHlwZSA9PT0gTmF2VHlwZS5pQXBwU3RhdGUgfHwgc05hdlR5cGUgPT09IE5hdlR5cGUuaHlicmlkID8geyAuLi50aGlzLl9tQ3VycmVudEFwcFN0YXRlLCAuLi5hcHBTdGF0ZURhdGEgfSA6IHt9O1xuXHRcdFx0XHRsZXQgc2hvdWxkQXBwbHlTdGF0ZSA9IHRydWU7XG5cblx0XHRcdFx0aWYgKCFvUm9vdENvbnRyb2xsZXIudmlld1N0YXRlKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGB2aWV3U3RhdGUgZXh0ZW5zaW9uIHJlcXVpcmVkIGZvciBjb250cm9sbGVyICR7b1Jvb3RDb250cm9sbGVyLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpfWApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvUm9vdENvbnRyb2xsZXIudmlld1N0YXRlLl9pc1N0YXRlRW1wdHlGb3JJQXBwU3RhdGVOYXZUeXBlKG9BcHBEYXRhLCBzTmF2VHlwZSkpIHtcblx0XHRcdFx0XHRpZiAoIW9Sb290Q29udHJvbGxlci52aWV3U3RhdGUuX2dldEluaXRpYWxTdGF0ZUFwcGxpZWQoKSkge1xuXHRcdFx0XHRcdFx0b1Jvb3RDb250cm9sbGVyLnZpZXdTdGF0ZS5fc2V0SW5pdGlhbFN0YXRlQXBwbGllZCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRzaG91bGRBcHBseVN0YXRlID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgYXBwbHlWaWV3U3RhdGUgPSBhd2FpdCBvUm9vdENvbnRyb2xsZXIudmlld1N0YXRlLmFwcGx5Vmlld1N0YXRlKFxuXHRcdFx0XHRcdHZpZXdJZCA/IGFwcFN0YXRlRGF0YSA6IHRoaXMuX21DdXJyZW50QXBwU3RhdGUsXG5cdFx0XHRcdFx0dGhpcy5fY3JlYXRlTmF2aWdhdGlvblBhcmFtZXRlcnMob0FwcERhdGEsIHNOYXZUeXBlKSxcblx0XHRcdFx0XHRza2lwTWVyZ2Vcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKCFzaG91bGRBcHBseVN0YXRlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHt9O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldHVybiBhcHBseVZpZXdTdGF0ZTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdExvZy5lcnJvcihcImFwcFN0YXRlIGNvdWxkIG5vdCBiZSBhcHBsaWVkXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHR0aHJvdyBvRXJyb3I7XG5cdFx0XHR9KVxuXHRcdFx0LmZpbmFsbHkoKCkgPT4ge1xuXHRcdFx0XHQvLyB1bmxvY2sgYXBwbHkgc3RhdGUgZm9yIHRoZSBjdXJyZW50IHZpZXdcblx0XHRcdFx0QnVzeUxvY2tlci51bmxvY2sodGhpcywgdmlld0lkKTtcblx0XHRcdFx0Ly8gdW5sb2NrIHRoZSBhcHAgc3RhdGUgaGFuZGxlciwgc28gdGhhdCBhcHAgc3RhdGUgY3JlYXRpb24gY2FuIGhhcHBlbiBub3cuXG5cdFx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKHRoaXMpO1xuXHRcdFx0XHQvLyB1bmxvY2sgdGhlIFJvb3RDb250cm9sIHRvIHJlbW92ZSB0aGUgYnVzeSBpbmRpY2F0b3IuXG5cdFx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKHRoaXMub0FwcENvbXBvbmVudC5nZXRSb290Q29udHJvbCgpKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIGNoZWNrIGlzIHJvdXRlIGlzIGNoYW5nZWQgYnkgY2hhbmdlIGluIHRoZSBpQVBQU3RhdGUuXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgcm91dGUgaGFzIGNobmFnZWRcblx0ICovXG5cdGNoZWNrSWZSb3V0ZUNoYW5nZWRCeUlBcHAoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuYk5vUm91dGVDaGFuZ2U7XG5cdH1cblxuXHQvKipcblx0ICogUmVzZXQgdGhlIHJvdXRlIGNoYW5nZWQgYnkgaUFQUFN0YXRlLlxuXHQgKi9cblx0cmVzZXRSb3V0ZUNoYW5nZWRCeUlBcHAoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuYk5vUm91dGVDaGFuZ2UpIHtcblx0XHRcdHRoaXMuYk5vUm91dGVDaGFuZ2UgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHQvLyBSZXNldCBhbGwgYWN0aXZhdGlvbiBzdGF0dXNlcyBpbiBBcHBTdGF0ZUhhbmRsZXIudmVyc2lvbkFjdGl2YXRpb25TdGF0dXMgdG8gZmFsc2Vcblx0c3RhdGljIHJlc2V0VmVyc2lvbkFjdGl2YXRpb25TdGF0dXMoKTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCBpZCBpbiB0aGlzLnZlcnNpb25BY3RpdmF0aW9uU3RhdHVzKSB7XG5cdFx0XHRpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMudmVyc2lvbkFjdGl2YXRpb25TdGF0dXMsIGlkKSkge1xuXHRcdFx0XHR0aGlzLnZlcnNpb25BY3RpdmF0aW9uU3RhdHVzW2lkXSA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBnbG9iYWxcbiAqL1xuZXhwb3J0IGRlZmF1bHQgQXBwU3RhdGVIYW5kbGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztFQWlCQSxNQUFNQSxPQUFPLEdBQUdDLE9BQU8sQ0FBQ0QsT0FBTztFQWMvQixNQUFNRSxjQUFjLEdBQUcsV0FBVztFQW9CbEMsTUFBTUMseUJBQXlCLEdBQUcsMkJBQTJCO0VBQUMsSUFHeERDLGVBQWUsSUFBQUMsSUFBQSxHQURwQkMsY0FBYyxDQUFDLDZCQUE2QixDQUFDLEVBQUFELElBQUEsQ0FBQUUsTUFBQSxJQUFBQyxnQkFBQSwwQkFBQUMsV0FBQTtJQWM3QyxTQUFBTCxnQkFBWU0sYUFBMkIsRUFBRTtNQUFBLElBQUFDLEtBQUE7TUFDeENBLEtBQUEsR0FBQUYsV0FBQSxDQUFBRyxJQUFBLEtBQU0sQ0FBQztNQUFDRCxLQUFBLENBUERFLGlCQUFpQixHQUFjLENBQUMsQ0FBQztNQVF4Q0YsS0FBQSxDQUFLRCxhQUFhLEdBQUdBLGFBQWE7TUFDbENDLEtBQUEsQ0FBS0csR0FBRyxHQUFHLEdBQUdKLGFBQWEsQ0FBQ0ssS0FBSyxDQUFDLENBQUMsa0JBQWtCO01BQ3JESixLQUFBLENBQUtLLHlCQUF5QixHQUFHLENBQUMsQ0FBQztNQUNuQ0wsS0FBQSxD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
366
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJOYXZUeXBlIiwibGlicmFyeSIsIlNLSVBfTUVSR0VfS0VZIiwiUkVQTEFDRV9DT01QTEVURV9BUFBTVEFURSIsIkFwcFN0YXRlSGFuZGxlciIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9jbGFzcyIsIl9BcHBTdGF0ZUhhbmRsZXIiLCJfQmFzZU9iamVjdCIsIm9BcHBDb21wb25lbnQiLCJfdGhpcyIsImNhbGwiLCJfbUN1cnJlbnRBcHBTdGF0ZSIsInNJZCIsImdldElkIiwic2ltdWx0YW5lb3VzQ3JlYXRlUmVxdWVzdCIsImJOb1JvdXRlQ2hhbmdlIiwiTG9nIiwiaW5mbyIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiX2dldElubmVyQXBwU3RhdGVGb3JWaWV3IiwiaW5uZXJBcHBTdGF0ZSIsInN0YXRlSWRlbnRpZmllciIsIl9hZGRBcHBTdGF0ZUluSGFzaCIsImFwcFN0YXRlS2V5IiwiYXBwQ29tcG9uZW50IiwibmF2aWdhdGlvblNlcnZpY2UiLCJnZXROYXZpZ2F0aW9uU2VydmljZSIsInJvdXRlclByb3h5IiwiZ2V0Um91dGVyUHJveHkiLCJoYXNoIiwiZ2V0SGFzaCIsImlzU3RpY2t5TW9kZSIsIk1vZGVsSGVscGVyIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiZ2V0TWV0YU1vZGVsIiwiaXNIaWRkZW5EcmFmdEVuYWJsZWQiLCJnZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcyIsImdldENhcGFiaWxpdGllcyIsIkhpZGRlbkRyYWZ0IiwiZW5hYmxlZCIsIm5ld0hhc2giLCJyZXBsYWNlSW5uZXJBcHBTdGF0ZUtleSIsIm5hdlRvSGFzaCIsInVuZGVmaW5lZCIsIl9jcmVhdGVBcHBTdGF0ZUtleSIsImFwcFN0YXRlRGF0YSIsInN0b3JlSW5uZXJBcHBTdGF0ZUFzeW5jIiwiX2dldEFwcFN0YXRlSW5mbyIsImNyZWF0ZUFwcFBhcmFtZXRlcnMiLCJyZXBsYWNlSGFzaCIsInZpZXdJZCIsImFwcFN0YXRlIiwiY3VycmVudFN0YXRlVG9VcGRhdGUiLCJkZWVwRXF1YWwiLCJvRXJyb3IiLCJlcnJvciIsImZpbmRBcHBTdGF0ZUluSGFzaCIsImNyZWF0ZUFwcFN0YXRlIiwiQXBwU3RhdGUiLCJCdXN5TG9ja2VyIiwiaXNMb2NrZWQiLCJza2lwTWVyZ2UiLCJyb290Q29udHJvbGxlciIsImdldFJvb3RDb250cm9sIiwiZ2V0Q29udHJvbGxlciIsInZpZXdTdGF0ZSIsIkVycm9yIiwiZ2V0TWV0YWRhdGEiLCJnZXROYW1lIiwicm91dGluZ0lzQ29tcGxldGUiLCJyZXRyaWV2ZVZpZXdTdGF0ZSIsIl9jcmVhdGVOYXZpZ2F0aW9uUGFyYW1ldGVycyIsIm9BcHBEYXRhIiwic05hdlR5cGUiLCJPYmplY3QiLCJhc3NpZ24iLCJzZWxlY3Rpb25WYXJpYW50RGVmYXVsdHMiLCJvRGVmYXVsdGVkU2VsZWN0aW9uVmFyaWFudCIsInNlbGVjdGlvblZhcmlhbnQiLCJvU2VsZWN0aW9uVmFyaWFudCIsInJlcXVpcmVzU3RhbmRhcmRWYXJpYW50IiwiYk5hdlNlbFZhckhhc0RlZmF1bHRzT25seSIsIm5hdmlnYXRpb25UeXBlIiwic2V0UlRBVmVyc2lvbldhc0FjdGl2YXRlZCIsImlkIiwidmFsdWUiLCJ2ZXJzaW9uQWN0aXZhdGlvblN0YXR1cyIsImdldFJUQVZlcnNpb25XYXNBY3RpdmF0ZWQiLCJfY2hlY2tJZkxhc3RTZWVuUmVjb3JkIiwidmlldyIsImludGVybmFsTW9kZWxDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJnZXRQcm9wZXJ0eSIsInRlY2huaWNhbEtleXNPYmplY3QiLCJiaW5kaW5nQ29udGV4dCIsImdldE9iamVjdCIsInBhdGgiLCJnZXRQYXRoIiwibWV0YU1vZGVsIiwiZ2V0TW9kZWwiLCJtZXRhUGF0aCIsImdldE1ldGFQYXRoIiwidGVjaG5pY2FsS2V5cyIsImVsZW1lbnQiLCJrZXlWYWx1ZSIsInNldFByb3BlcnR5IiwiX2dldEFwcFN0YXRlRGF0YSIsIm5hdlR5cGUiLCJrZXkiLCJpIiwiaHlicmlkIiwiaUFwcFN0YXRlIiwia2V5cyIsImxlbmd0aCIsImFwcGx5QXBwU3RhdGUiLCJQcm9taXNlIiwicmVzb2x2ZSIsImNoZWNrSWZMYXN0U2VlblJlY29yZCIsImxvY2siLCJvTmF2aWdhdGlvblNlcnZpY2UiLCJ0b0VTNlByb21pc2UiLCJwYXJzZU5hdmlnYXRpb24iLCJjYXRjaCIsImFFcnJvckRhdGEiLCJ3YXJuaW5nIiwidGhlbiIsImFSZXN1bHRzIiwiaW5pdGlhbCIsIm9Sb290Q29udHJvbGxlciIsInNob3VsZEFwcGx5U3RhdGUiLCJfaXNTdGF0ZUVtcHR5Rm9ySUFwcFN0YXRlTmF2VHlwZSIsIl9nZXRJbml0aWFsU3RhdGVBcHBsaWVkIiwiX3NldEluaXRpYWxTdGF0ZUFwcGxpZWQiLCJhcHBseVZpZXdTdGF0ZSIsImZpbmFsbHkiLCJ1bmxvY2siLCJjaGVja0lmUm91dGVDaGFuZ2VkQnlJQXBwIiwicmVzZXRSb3V0ZUNoYW5nZWRCeUlBcHAiLCJyZXNldFZlcnNpb25BY3RpdmF0aW9uU3RhdHVzIiwiaGFzT3duUHJvcGVydHkiLCJCYXNlT2JqZWN0Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJBcHBTdGF0ZUhhbmRsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgZGVlcEVxdWFsIGZyb20gXCJzYXAvYmFzZS91dGlsL2RlZXBFcXVhbFwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBOYXZpZ2F0aW9uUGFyYW1ldGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1ZpZXdTdGF0ZVwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgdG9FUzZQcm9taXNlIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1RvRVM2UHJvbWlzZVwiO1xuaW1wb3J0IHR5cGUgeyBJbm5lckFwcERhdGEgfSBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vTmF2aWdhdGlvbkhhbmRsZXJcIjtcbmltcG9ydCB0eXBlIHsgU2VsZWN0aW9uVmFyaWFudCB9IGZyb20gXCJzYXAvZmUvbmF2aWdhdGlvbi9TZWxlY3Rpb25WYXJpYW50XCI7XG5pbXBvcnQgbGlicmFyeSBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vbGlicmFyeVwiO1xuaW1wb3J0IEJhc2VPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL09iamVjdFwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgQnVzeUxvY2tlciBmcm9tIFwiLi9jb250cm9sbGVyZXh0ZW5zaW9ucy9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgdHlwZSB7IEhpZGRlbkRyYWZ0IH0gZnJvbSBcIi4vY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcIi4vaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuXG5jb25zdCBOYXZUeXBlID0gbGlicmFyeS5OYXZUeXBlO1xudHlwZSBBcHBTdGF0ZSA9IHtcblx0c2tpcE1lcmdlPzogYm9vbGVhbjtcblx0W2tleTogc3RyaW5nXTogdW5rbm93bjtcbn07XG5leHBvcnQgdHlwZSBBcHBEYXRhID0ge1xuXHRvRGVmYXVsdGVkU2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudDtcblx0b1NlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQ7XG5cdGJOYXZTZWxWYXJIYXNEZWZhdWx0c09ubHk6IGJvb2xlYW47XG5cdGFwcFN0YXRlOiBBcHBTdGF0ZTtcblx0aUFwcFN0YXRlPzoge1xuXHRcdGFwcFN0YXRlOiBBcHBTdGF0ZTtcblx0fTtcbn07XG5jb25zdCBTS0lQX01FUkdFX0tFWSA9IFwic2tpcE1lcmdlXCI7XG5leHBvcnQgdHlwZSBJQXBwU3RhdGUgPSB7XG5cdGFwcFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn07XG5cbmV4cG9ydCB0eXBlIEFwcERhdGFJbmZvID0ge1xuXHRhcHBTdGF0ZURhdGE6IHsgYXBwU3RhdGU6IG9iamVjdCB8IHVuZGVmaW5lZCB9O1xuXHRhcHBTdGF0ZUtleTogc3RyaW5nIHwgbnVsbDtcbn07XG5cbmV4cG9ydCB0eXBlIENyZWF0ZUFwcFBhcmFtZXRlcnMgPSB7XG5cdHJlcGxhY2VIYXNoPzogYm9vbGVhbjtcblx0c2tpcE1lcmdlPzogYm9vbGVhbjtcblx0dmlld0lkPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgVmVyc2lvbkFjdGl2YXRlZCA9IHtcblx0dmVyc2lvbldhc0FjdGl2YXRlZDogYm9vbGVhbjtcbn07XG5cbmNvbnN0IFJFUExBQ0VfQ09NUExFVEVfQVBQU1RBVEUgPSBcIlJFUExBQ0VfQ09NUExFVEVfQVBQU1RBVEVcIjtcblxuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuQXBwU3RhdGVIYW5kbGVyXCIpXG5jbGFzcyBBcHBTdGF0ZUhhbmRsZXIgZXh0ZW5kcyBCYXNlT2JqZWN0IHtcblx0cHVibGljIHNJZDogc3RyaW5nO1xuXG5cdHB1YmxpYyBvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7XG5cblx0cHVibGljIGJOb1JvdXRlQ2hhbmdlOiBib29sZWFuO1xuXG5cdHByaXZhdGUgX21DdXJyZW50QXBwU3RhdGU/OiBBcHBTdGF0ZSA9IHt9O1xuXG5cdHNpbXVsdGFuZW91c0NyZWF0ZVJlcXVlc3Q6IFJlY29yZDxzdHJpbmcsIG51bWJlcj47XG5cblx0c3RhdGljIHZlcnNpb25BY3RpdmF0aW9uU3RhdHVzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yKG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5vQXBwQ29tcG9uZW50ID0gb0FwcENvbXBvbmVudDtcblx0XHR0aGlzLnNJZCA9IGAke29BcHBDb21wb25lbnQuZ2V0SWQoKX0vQXBwU3RhdGVIYW5kbGVyYDtcblx0XHR0aGlzLnNpbXVsdGFuZW91c0NyZWF0ZVJlcXVlc3QgPSB7fTtcblx0XHR0aGlzLmJOb1JvdXRlQ2hhbmdlID0gZmFsc2U7XG5cdFx0TG9nLmluZm8oXCJBUFBTVEFURSA6IEFwcHN0YXRlIGhhbmRsZXIgaW5pdGlhbGl6ZWRcIik7XG5cdH1cblxuXHRnZXRJZCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLnNJZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdmlldyBzcGVjaWZpYyBhcHBzdGF0ZS5cblx0ICogQHBhcmFtIGlubmVyQXBwU3RhdGUgT3ZlcmFsbCBhcHBzdGF0ZVxuXHQgKiBAcGFyYW0gc3RhdGVJZGVudGlmaWVyIFN0YXRlIGlkZW50aWZpZXIuIElkIG9mIHRoZSBsb2NhbCB2aWV3XG5cdCAqIEByZXR1cm5zIElubmVyIGFwcHN0YXRlXG5cdCAqL1xuXHRfZ2V0SW5uZXJBcHBTdGF0ZUZvclZpZXcoaW5uZXJBcHBTdGF0ZTogSW5uZXJBcHBEYXRhIHwgdW5kZWZpbmVkLCBzdGF0ZUlkZW50aWZpZXI6IHN0cmluZyk6IElubmVyQXBwRGF0YSB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHN0YXRlSWRlbnRpZmllciA9PT0gUkVQTEFDRV9DT01QTEVURV9BUFBTVEFURSB8fCAhaW5uZXJBcHBTdGF0ZSkge1xuXHRcdFx0Ly8gb3ZlcmFsbCBhcHAgc3RhdGUgbmVlZHMgdG8gYmUgY29uc2lkZXJlZC5cblx0XHRcdHJldHVybiBpbm5lckFwcFN0YXRlO1xuXHRcdH1cblxuXHRcdC8vIHdlIHRha2UgdGhlIHN1YnNldCBvZiB0aGUgYXBwIHN0YXRlIHdydCB0byB0aGUgbG9jYWwgdmlldyBpZC5cblx0XHRyZXR1cm4ge1xuXHRcdFx0W3N0YXRlSWRlbnRpZmllcl06IGlubmVyQXBwU3RhdGVbc3RhdGVJZGVudGlmaWVyIGFzIGtleW9mIHR5cGVvZiBpbm5lckFwcFN0YXRlXSB8fCB7fVxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogQWRkIGFwcHN0YXRlIGluIGhhc2guXG5cdCAqIEBwYXJhbSBhcHBTdGF0ZUtleSBBcHBzdGF0ZSBrZXlcblx0ICogQHBhcmFtIHN0YXRlSWRlbnRpZmllciBTdGF0ZSBpZGVudGlmaWVyLiBJZCBvZiB0aGUgbG9jYWwgdmlld1xuXHQgKi9cblx0X2FkZEFwcFN0YXRlSW5IYXNoKGFwcFN0YXRlS2V5OiBzdHJpbmcsIHN0YXRlSWRlbnRpZmllcjogc3RyaW5nKTogdm9pZCB7XG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gdGhpcy5vQXBwQ29tcG9uZW50LFxuXHRcdFx0bmF2aWdhdGlvblNlcnZpY2UgPSBhcHBDb21wb25lbnQuZ2V0TmF2aWdhdGlvblNlcnZpY2UoKSxcblx0XHRcdHJvdXRlclByb3h5ID0gYXBwQ29tcG9uZW50LmdldFJvdXRlclByb3h5KCksXG5cdFx0XHRoYXNoID0gcm91dGVyUHJveHkuZ2V0SGFzaCgpLFxuXHRcdFx0aXNTdGlja3lNb2RlID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKGFwcENvbXBvbmVudC5nZXRNZXRhTW9kZWwoKSksXG5cdFx0XHRpc0hpZGRlbkRyYWZ0RW5hYmxlZCA9XG5cdFx0XHRcdCh0aGlzLm9BcHBDb21wb25lbnQuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKS5nZXRDYXBhYmlsaXRpZXMoKS5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdCk/LmVuYWJsZWQgfHwgZmFsc2UsXG5cdFx0XHRuZXdIYXNoID0gbmF2aWdhdGlvblNlcnZpY2UucmVwbGFjZUlubmVyQXBwU3RhdGVLZXkocm91dGVyUHJveHkuZ2V0SGFzaCgpLCBhcHBTdGF0ZUtleSk7XG5cblx0XHRpZiAobmV3SGFzaCAmJiB0aGlzLnNpbXVsdGFuZW91c0NyZWF0ZVJlcXVlc3Rbc3RhdGVJZGVudGlmaWVyXSA9PT0gMCAmJiBuZXdIYXNoICE9PSBoYXNoKSB7XG5cdFx0XHRyb3V0ZXJQcm94eS5uYXZUb0hhc2gobmV3SGFzaCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgaXNTdGlja3lNb2RlIHx8IGlzSGlkZGVuRHJhZnRFbmFibGVkKTtcblx0XHRcdHRoaXMuYk5vUm91dGVDaGFuZ2UgPSB0cnVlO1xuXHRcdH1cblx0XHRMb2cuaW5mbyhcIkFQUFNUQVRFOiBuYXZUb0hhc2hcIik7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlIEFwcHN0YXRlIEtleS5cblx0ICogQHBhcmFtIGFwcFN0YXRlRGF0YSBBcHBzdGF0ZVxuXHQgKiBAcGFyYW0gc3RhdGVJZGVudGlmaWVyIFN0YXRlIGlkZW50aWZpZXIuIElkIG9mIHRoZSBsb2NhbCB2aWV3XG5cdCAqIEByZXR1cm5zIEFwcHN0YXRlIEtleVxuXHQgKi9cblx0YXN5bmMgX2NyZWF0ZUFwcFN0YXRlS2V5KGFwcFN0YXRlRGF0YTogSW5uZXJBcHBEYXRhLCBzdGF0ZUlkZW50aWZpZXI6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gdGhpcy5vQXBwQ29tcG9uZW50LFxuXHRcdFx0bmF2aWdhdGlvblNlcnZpY2UgPSBhcHBDb21wb25lbnQuZ2V0TmF2aWdhdGlvblNlcnZpY2UoKTtcblxuXHRcdGlmICh0aGlzLnNpbXVsdGFuZW91c0NyZWF0ZVJlcXVlc3Rbc3RhdGVJZGVudGlmaWVyXSkge1xuXHRcdFx0Ly8gYW55IG90aGVyIHZhbHVlXG5cdFx0XHR0aGlzLnNpbXVsdGFuZW91c0NyZWF0ZVJlcXVlc3Rbc3RhdGVJZGVudGlmaWVyXSsrO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyAwIG9yIHVuZGVmaW5lZFxuXHRcdFx0dGhpcy5zaW11bHRhbmVvdXNDcmVhdGVSZXF1ZXN0W3N0YXRlSWRlbnRpZmllcl0gPSAxO1xuXHRcdH1cblxuXHRcdGNvbnN0IGFwcFN0YXRlS2V5ID0gYXdhaXQgbmF2aWdhdGlvblNlcnZpY2Uuc3RvcmVJbm5lckFwcFN0YXRlQXN5bmMoYXBwU3RhdGVEYXRhLCB0cnVlLCB0cnVlKTtcblxuXHRcdHRoaXMuc2ltdWx0YW5lb3VzQ3JlYXRlUmVxdWVzdFtzdGF0ZUlkZW50aWZpZXJdLS07XG5cblx0XHRMb2cuaW5mbyhcIkFQUFNUQVRFOiBBcHBzdGF0ZSBzdG9yZWRcIik7XG5cdFx0cmV0dXJuIGFwcFN0YXRlS2V5O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYXBwc3RhdGUgaW5mby5cblx0ICogQHBhcmFtIGlubmVyQXBwU3RhdGVcblx0ICogQHBhcmFtIGNyZWF0ZUFwcFBhcmFtZXRlcnMgUGFyYW1ldGVycyBmb3IgY3JlYXRpbmcgbmV3IGFwcHN0YXRlXG5cdCAqIEBwYXJhbSBjcmVhdGVBcHBQYXJhbWV0ZXJzLnJlcGxhY2VIYXNoIEJvb2xlYW4gd2hpY2ggZGV0ZXJtaW5lcyB0byByZXBsYWNlIHRoZSBoYXNoIHdpdGggdGhlIG5ldyBnZW5lcmF0ZWQga2V5XG5cdCAqIEBwYXJhbSBjcmVhdGVBcHBQYXJhbWV0ZXJzLnZpZXdJZCBJZCBvZiB0aGUgdmlldyBmb3Igd2hpY2ggd2UgbmVlZCB0byBjcmVhdGUgdGhlIGFwcCBzdGF0ZS4gVGhpcyBpcyB0byBjcmVhdGUgb3IgdXBkYXRlIHZpZXcgc3BlY2lmaWMgYXBwc3RhdGUuXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSByZXNvbHZpbmcgdGhlIHN0b3JlZCBkYXRhIG9yIGFwcHN0YXRlIGtleVxuXHQgKi9cblx0YXN5bmMgX2dldEFwcFN0YXRlSW5mbyhpbm5lckFwcFN0YXRlOiBJbm5lckFwcERhdGEgfCB1bmRlZmluZWQsIGNyZWF0ZUFwcFBhcmFtZXRlcnM/OiBDcmVhdGVBcHBQYXJhbWV0ZXJzKTogUHJvbWlzZTxBcHBEYXRhSW5mbz4ge1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IHRoaXMub0FwcENvbXBvbmVudDtcblx0XHRjb25zdCB7IHJlcGxhY2VIYXNoID0gdHJ1ZSwgdmlld0lkOiBzdGF0ZUlkZW50aWZpZXIgPSBSRVBMQUNFX0NPTVBMRVRFX0FQUFNUQVRFIH0gPSBjcmVhdGVBcHBQYXJhbWV0ZXJzID8/IHt9O1xuXG5cdFx0bGV0IGFwcFN0YXRlS2V5OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblx0XHRsZXQgYXBwU3RhdGVEYXRhID0geyBhcHBTdGF0ZTogdGhpcy5fbUN1cnJlbnRBcHBTdGF0ZSB9O1xuXG5cdFx0Y29uc3QgY3VycmVudFN0YXRlVG9VcGRhdGUgPSB0aGlzLl9nZXRJbm5lckFwcFN0YXRlRm9yVmlldyh0aGlzLl9tQ3VycmVudEFwcFN0YXRlLCBzdGF0ZUlkZW50aWZpZXIpO1xuXHRcdGlmIChpbm5lckFwcFN0YXRlICYmICFkZWVwRXF1YWwoY3VycmVudFN0YXRlVG9VcGRhdGUsIGlubmVyQXBwU3RhdGUpKSB7XG5cdFx0XHQvL1xuXHRcdFx0dGhpcy5fbUN1cnJlbnRBcHBTdGF0ZSA9IHsgLi4udGhpcy5fbUN1cnJlbnRBcHBTdGF0ZSwgLi4uKGlubmVyQXBwU3RhdGUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIH07XG5cdFx0XHRhcHBTdGF0ZURhdGEgPSB7IGFwcFN0YXRlOiB0aGlzLl9tQ3VycmVudEFwcFN0YXRlIH07XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRhcHBTdGF0ZUtleSA9IGF3YWl0IHRoaXMuX2NyZWF0ZUFwcFN0YXRlS2V5KGFwcFN0YXRlRGF0YSwgc3RhdGVJZGVudGlmaWVyKTtcblx0XHRcdFx0aWYgKHJlcGxhY2VIYXNoID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0dGhpcy5fYWRkQXBwU3RhdGVJbkhhc2goYXBwU3RhdGVLZXksIHN0YXRlSWRlbnRpZmllcik7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRMb2cuZXJyb3Iob0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHJvdXRlclByb3h5ID0gYXBwQ29tcG9uZW50LmdldFJvdXRlclByb3h5KCksXG5cdFx0XHRcdGhhc2ggPSByb3V0ZXJQcm94eS5nZXRIYXNoKCk7XG5cdFx0XHRhcHBTdGF0ZUtleSA9IHJvdXRlclByb3h5LmZpbmRBcHBTdGF0ZUluSGFzaChoYXNoKSBhcyBzdHJpbmc7XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHRhcHBTdGF0ZURhdGEsXG5cdFx0XHRhcHBTdGF0ZUtleVxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBvciB1cGRhdGVzIHRoZSBhcHBzdGF0ZS5cblx0ICogUmVwbGFjZXMgdGhlIGhhc2ggd2l0aCB0aGUgbmV3IGFwcHN0YXRlIGJhc2VkIG9uIHJlcGxhY2VIYXNoLlxuXHQgKiBAcGFyYW0gY3JlYXRlQXBwUGFyYW1ldGVycyBQYXJhbWV0ZXJzIGZvciBjcmVhdGluZyBuZXcgYXBwc3RhdGVcblx0ICogQHBhcmFtIGNyZWF0ZUFwcFBhcmFtZXRlcnMucmVwbGFjZUhhc2ggQm9vbGVhbiB3aGljaCBkZXRlcm1pbmVzIHRvIHJlcGxhY2UgdGhlIGhhc2ggd2l0aCB0aGUgbmV3IGdlbmVyYXRlZCBrZXlcblx0ICogQHBhcmFtIGNyZWF0ZUFwcFBhcmFtZXRlcnMuc2tpcE1lcmdlIEJvb2xlYW4gd2hpY2ggZGV0ZXJtaW5lcyB0byBza2lwIHRoZSBrZXkgdXNlciBzaGluZSB0aHJvdWdoXG5cdCAqIEBwYXJhbSBjcmVhdGVBcHBQYXJhbWV0ZXJzLnZpZXdJZCBJZCBvZiB0aGUgdmlldyBmb3Igd2hpY2ggd2UgbmVlZCB0byBjcmVhdGUgdGhlIGFwcCBzdGF0ZS4gVGhpcyBpcyB0byBjcmVhdGUgb3IgdXBkYXRlIHZpZXcgc3BlY2lmaWMgYXBwc3RhdGVcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHJlc29sdmluZyB0aGUgc3RvcmVkIGRhdGEgb3IgYXBwc3RhdGUga2V5XG5cdCAqL1xuXHRhc3luYyBjcmVhdGVBcHBTdGF0ZShjcmVhdGVBcHBQYXJhbWV0ZXJzPzogQ3JlYXRlQXBwUGFyYW1ldGVycyk6IFByb21pc2U8dm9pZCB8IEFwcERhdGFJbmZvPiB7XG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gdGhpcy5vQXBwQ29tcG9uZW50O1xuXHRcdGlmICghYXBwQ29tcG9uZW50LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCkuZ2V0Q2FwYWJpbGl0aWVzKCkuQXBwU3RhdGUgfHwgQnVzeUxvY2tlci5pc0xvY2tlZCh0aGlzKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCB7IHNraXBNZXJnZSA9IGZhbHNlLCB2aWV3SWQ6IHN0YXRlSWRlbnRpZmllciA9IFJFUExBQ0VfQ09NUExFVEVfQVBQU1RBVEUgfSA9IGNyZWF0ZUFwcFBhcmFtZXRlcnMgPz8ge30sXG5cdFx0XHRyb290Q29udHJvbGxlciA9IGFwcENvbXBvbmVudC5nZXRSb290Q29udHJvbCgpLmdldENvbnRyb2xsZXIoKTtcblxuXHRcdGlmICghcm9vdENvbnRyb2xsZXIudmlld1N0YXRlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYHZpZXdTdGF0ZSBjb250cm9sbGVyIGV4dGVuc2lvbiBub3QgYXZhaWxhYmxlIGZvciBjb250cm9sbGVyOiAke3Jvb3RDb250cm9sbGVyLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpfWApO1xuXHRcdH1cblxuXHRcdC8vIEluIGNhc2UsIG9uIGxvYWQgb2YgRkNMIGFwcCB3ZSBoYXZlIG11bHRpcGxlIHZpZXdzKExSLCBPUCwgc3ViLU9QLi4uKSBhbmQgdXJsIGhhcyBpQXBwU3RhdGUoMSkuXG5cdFx0Ly8gVGhlIExSIHZpZXcgbG9hZHMgd2l0aCBhcHBsaWVkIGlBcHBTdGF0ZSgxKSBhbmQgY2FsbHMgY3JlYXRlQXBwU3RhdGUoZXhhbXBsZTogb25TZWFyY2ggZXZlbnQgaW4gTFIpIGJlZm9yZSBPUCBpcyBsb2FkZWQuXG5cdFx0Ly8gVGhpcyBjcmVhdGVzIGlBcHBTdGF0ZSgyKSBiZWZvcmUgaUFwcFN0YXRlKDEpIGlzIGFwcGxpZWQgdG8gT1AuXG5cdFx0Ly8gU28sIHdlIHRyeSB0byB3YWl0IHRpbGwgdGhlIHJvdXRpbmcgaXMgY29tcGxldGUuXG5cdFx0YXdhaXQgcm9vdENvbnRyb2xsZXIucm91dGluZ0lzQ29tcGxldGUoKTtcblxuXHRcdC8vIEdldCBhcHBTdGF0ZSB0byB1cGRhdGVcblx0XHRsZXQgaW5uZXJBcHBTdGF0ZSA9IChhd2FpdCByb290Q29udHJvbGxlci52aWV3U3RhdGUucmV0cmlldmVWaWV3U3RhdGUoKSkgYXMgSW5uZXJBcHBEYXRhIHwgdW5kZWZpbmVkO1xuXHRcdGlubmVyQXBwU3RhdGUgPSB0aGlzLl9nZXRJbm5lckFwcFN0YXRlRm9yVmlldyhpbm5lckFwcFN0YXRlLCBzdGF0ZUlkZW50aWZpZXIpO1xuXHRcdGlmIChza2lwTWVyZ2UpIHtcblx0XHRcdGlubmVyQXBwU3RhdGUgPSB7IC4uLmlubmVyQXBwU3RhdGUsIC4uLnsgc2tpcE1lcmdlIH0gfTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5fZ2V0QXBwU3RhdGVJbmZvKGlubmVyQXBwU3RhdGUsIGNyZWF0ZUFwcFBhcmFtZXRlcnMpO1xuXHR9XG5cblx0X2NyZWF0ZU5hdmlnYXRpb25QYXJhbWV0ZXJzKG9BcHBEYXRhOiBBcHBEYXRhLCBzTmF2VHlwZTogc3RyaW5nKTogTmF2aWdhdGlvblBhcmFtZXRlciB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIG9BcHBEYXRhLCB7XG5cdFx0XHRzZWxlY3Rpb25WYXJpYW50RGVmYXVsdHM6IG9BcHBEYXRhLm9EZWZhdWx0ZWRTZWxlY3Rpb25WYXJpYW50LFxuXHRcdFx0c2VsZWN0aW9uVmFyaWFudDogb0FwcERhdGEub1NlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRyZXF1aXJlc1N0YW5kYXJkVmFyaWFudDogIW9BcHBEYXRhLmJOYXZTZWxWYXJIYXNEZWZhdWx0c09ubHksXG5cdFx0XHRuYXZpZ2F0aW9uVHlwZTogc05hdlR5cGVcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBSVEEgKFJ1bnRpbWUgQWRhcHRhdGlvbikgdmVyc2lvbiBhY3RpdmF0aW9uIHN0YXR1cyBmb3IgYSBzcGVjaWZpYyBJRC5cblx0ICogQHBhcmFtIGlkIFRoZSB1bmlxdWUgaWRlbnRpZmllci5cblx0ICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIFJUQSB2ZXJzaW9uIHdhcyBhY3RpdmF0ZWQuXG5cdCAqL1xuXHRzdGF0aWMgc2V0UlRBVmVyc2lvbldhc0FjdGl2YXRlZChpZDogc3RyaW5nLCB2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuXHRcdHRoaXMudmVyc2lvbkFjdGl2YXRpb25TdGF0dXNbaWRdID0gdmFsdWU7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBSVEEgKFJ1bnRpbWUgQWRhcHRhdGlvbikgdmVyc2lvbiBhY3RpdmF0aW9uIHN0YXR1cyBmb3IgYSBzcGVjaWZpYyBJRC5cblx0ICogQHBhcmFtIGlkIFRoZSB1bmlxdWUgaWRlbnRpZmllci5cblx0ICogQHJldHVybnMgVGhlIGFjdGl2YXRpb24gc3RhdHVzIG9yIHVuZGVmaW5lZCBpZiBub3Qgc2V0LlxuXHQgKi9cblx0c3RhdGljIGdldFJUQVZlcnNpb25XYXNBY3RpdmF0ZWQoaWQ6IHN0cmluZyk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLnZlcnNpb25BY3RpdmF0aW9uU3RhdHVzW2lkXTtcblx0fVxuXG5cdF9jaGVja0lmTGFzdFNlZW5SZWNvcmQodmlldz86IFZpZXcpOiBib29sZWFuIHtcblx0XHQvL2dldHRpbmcgdGhlIGludGVybmFsIG1vZGVsIGNvbnRleHQgaW4gb3JkZXIgdG8gZmV0Y2ggdGhlIHRlY2huaWNhbGtleXMgb2YgbGFzdCBzZWVuIHJlY29yZCBhbmQgY2xvc2UgY29sdW1uIGZsYWcgc2V0IGluIHRoZSBpbnRlcm5hbHJvdXRpbmcgZm9yIHJldGFpbmluZyBzZXR0aW5ncyBpbiBwZXJzaXN0ZW5jZSBtb2RlXG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSB2aWV3ICYmICh2aWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQpO1xuXHRcdGlmIChpbnRlcm5hbE1vZGVsQ29udGV4dCAmJiBpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImZjbENvbHVtbkNsb3NlZFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3QgdGVjaG5pY2FsS2V5c09iamVjdCA9IGludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwidGVjaG5pY2FsS2V5c09mTGFzdFNlZW5SZWNvcmRcIik7XG5cdFx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IHZpZXc/LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dDtcblx0XHRcdGlmIChiaW5kaW5nQ29udGV4dC5nZXRPYmplY3QoKSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdC8vIEFmdGVyIGV4ZWN1dGluZyBhIGJvdW5kIGFjdGlvbiBpbiBhbiBGQ0wgYXBwLCB3ZSBzZXQgdGhlIEVkaXRTdGF0ZSB0byBkaXJ0eSwgd2hpY2ggcmVmcmVzaGVzIHRoZSBMUiB0YWJsZSwgYW5kIGludmFsaWRhdGUgYWxsIGJpbmRpbmdDb250ZXh0cy5cblx0XHRcdFx0Ly8gVGhpcyBlbnN1cmUgaXQgd29uJ3QgdGhyb3cgYW4gZXJyb3IgaW4gdGhvc2UgY2FzZXMuXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHBhdGggPSAoYmluZGluZ0NvbnRleHQgJiYgYmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpKSB8fCBcIlwiO1xuXHRcdFx0Y29uc3QgbWV0YU1vZGVsID0gYmluZGluZ0NvbnRleHQ/LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRjb25zdCBtZXRhUGF0aCA9IG1ldGFNb2RlbD8uZ2V0TWV0YVBhdGgocGF0aCk7XG5cdFx0XHRjb25zdCB0ZWNobmljYWxLZXlzID0gbWV0YU1vZGVsPy5nZXRPYmplY3QoYCR7bWV0YVBhdGh9LyRUeXBlLyRLZXlgKTtcblx0XHRcdGlmICh0ZWNobmljYWxLZXlzKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiB0ZWNobmljYWxLZXlzKSB7XG5cdFx0XHRcdFx0Y29uc3Qga2V5VmFsdWUgPSBiaW5kaW5nQ29udGV4dC5nZXRPYmplY3QoKVtlbGVtZW50XTtcblx0XHRcdFx0XHRpZiAoa2V5VmFsdWUgIT09IHRlY2huaWNhbEtleXNPYmplY3RbZWxlbWVudF0pIHtcblx0XHRcdFx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZmNsQ29sdW1uQ2xvc2VkXCIsIGZhbHNlKTtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly90aGUgcmVjb3JkIG9wZW5lZCBpcyBub3QgdGhlIGxhc3Qgc2VlbiBvbmUgOiBubyBuZWVkIHRvIHBlcnNpc3QgdGhlIGNoYW5nZXMsIHJlc2V0IHRvIGRlZmF1bHQgaW5zdGVhZFxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRfZ2V0QXBwU3RhdGVEYXRhKG9BcHBEYXRhOiBBcHBEYXRhLCB2aWV3SWQ/OiBzdHJpbmcsIG5hdlR5cGU/OiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IGtleSA9IFwiXCIsXG5cdFx0XHRpID0gMDtcblx0XHRjb25zdCBhcHBTdGF0ZURhdGEgPSBuYXZUeXBlID09PSBOYXZUeXBlLmh5YnJpZCA/IG9BcHBEYXRhLmlBcHBTdGF0ZSA6IG9BcHBEYXRhO1xuXG5cdFx0aWYgKGFwcFN0YXRlRGF0YT8uYXBwU3RhdGUpIHtcblx0XHRcdGZvciAoaTsgaSA8IE9iamVjdC5rZXlzKGFwcFN0YXRlRGF0YS5hcHBTdGF0ZSkubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKE9iamVjdC5rZXlzKGFwcFN0YXRlRGF0YS5hcHBTdGF0ZSlbaV0gPT09IHZpZXdJZCkge1xuXHRcdFx0XHRcdGtleSA9IE9iamVjdC5rZXlzKGFwcFN0YXRlRGF0YS5hcHBTdGF0ZSlbaV07XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKGFwcFN0YXRlRGF0YT8uYXBwU3RhdGUpIHtcblx0XHRcdHJldHVybiBrZXlcblx0XHRcdFx0PyB7XG5cdFx0XHRcdFx0XHRbT2JqZWN0LmtleXMoYXBwU3RhdGVEYXRhLmFwcFN0YXRlKVtpXV06IGFwcFN0YXRlRGF0YS5hcHBTdGF0ZVtrZXldIHx8IHt9XG5cdFx0XHRcdCAgfVxuXHRcdFx0XHQ6IHt9O1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBBcHBsaWVzIGFuIGFwcHN0YXRlIGJ5IGZldGNoaW5nIGFwcGRhdGEgYW5kIHBhc3NpbmcgaXQgdG8gX2FwcGx5QXBwc3RhdGVUb1BhZ2UuXG5cdCAqIEBwYXJhbSB2aWV3IFRoZSB2aWV3IGZvciB3aGljaCB0aGUgYXBwIHN0YXRlIG11c3QgYmUgYXBwbGllZC4gSWYgbm8gdmlldyBpcyBwcm92aWRlZCwgdGhlbiBhcHAgc3RhdGUgb2YgYWxsIHRoZSB2aWV3cyBpcyBhcHBsaWVkLlxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgZm9yIGFzeW5jIGhhbmRsaW5nXG5cdCAqL1xuXHRhc3luYyBhcHBseUFwcFN0YXRlKHZpZXc/OiBWaWV3KTogUHJvbWlzZTx2b2lkIHwge30+IHtcblx0XHRpZiAoQXBwU3RhdGVIYW5kbGVyLmdldFJUQVZlcnNpb25XYXNBY3RpdmF0ZWQodGhpcy5vQXBwQ29tcG9uZW50LmdldElkKCkpKSB7XG5cdFx0XHRBcHBTdGF0ZUhhbmRsZXIuc2V0UlRBVmVyc2lvbldhc0FjdGl2YXRlZCh0aGlzLm9BcHBDb21wb25lbnQuZ2V0SWQoKSwgZmFsc2UpO1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdH1cblx0XHRjb25zdCB2aWV3SWQgPSB2aWV3Py5nZXRJZCgpO1xuXHRcdGlmICghdGhpcy5vQXBwQ29tcG9uZW50LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCkuZ2V0Q2FwYWJpbGl0aWVzKCkuQXBwU3RhdGUgfHwgQnVzeUxvY2tlci5pc0xvY2tlZCh0aGlzLCB2aWV3SWQpKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY2hlY2tJZkxhc3RTZWVuUmVjb3JkID0gdGhpcy5fY2hlY2tJZkxhc3RTZWVuUmVjb3JkKHZpZXcpO1xuXHRcdGlmIChjaGVja0lmTGFzdFNlZW5SZWNvcmQgPT09IHRydWUpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9XG5cdFx0Ly8gbG9jayB0aGUgYXBwbHkgc3RhdGUgZm9yIHRoZSBjdXJyZW50IHZpZXdcblx0XHRCdXN5TG9ja2VyLmxvY2sodGhpcywgdmlld0lkKTtcblx0XHQvLyBsb2NrIHRoZSBBcHAgU3RhdGUgaGFuZGxlciwgdXNlZCB0byBhdm9pZCBhIGNyZWF0aW9uIG9mIGFwcCBzdGF0ZSBkdXJpbmcgYXBwbHlcblx0XHRCdXN5TG9ja2VyLmxvY2sodGhpcyk7XG5cdFx0Ly8gRG9uZSBmb3IgYnVzeSBpbmRpY2F0b3Jcblx0XHRCdXN5TG9ja2VyLmxvY2sodGhpcy5vQXBwQ29tcG9uZW50LmdldFJvb3RDb250cm9sKCkpO1xuXHRcdGNvbnN0IG9OYXZpZ2F0aW9uU2VydmljZSA9IHRoaXMub0FwcENvbXBvbmVudC5nZXROYXZpZ2F0aW9uU2VydmljZSgpO1xuXHRcdC8vIFRPRE8gb05hdmlnYXRpb25TZXJ2aWNlLnBhcnNlTmF2aWdhdGlvbigpIHNob3VsZCByZXR1cm4gRVM2IHByb21pc2UgaW5zdGVhZCBqUXVlcnkucHJvbWlzZVxuXHRcdHJldHVybiB0b0VTNlByb21pc2U8dW5rbm93bltdPihvTmF2aWdhdGlvblNlcnZpY2UucGFyc2VOYXZpZ2F0aW9uKCkpXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGFFcnJvckRhdGE6IHVua25vd25bXSkge1xuXHRcdFx0XHRpZiAoIWFFcnJvckRhdGEpIHtcblx0XHRcdFx0XHRhRXJyb3JEYXRhID0gW107XG5cdFx0XHRcdH1cblx0XHRcdFx0TG9nLndhcm5pbmcoXCJBUFBTVEFURTogUGFyc2UgTmF2aWdhdGlvbiBmYWlsZWRcIiwgYUVycm9yRGF0YVswXSBhcyBzdHJpbmcpO1xuXHRcdFx0XHRyZXR1cm4gW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdC8qIGFwcCBkYXRhICovXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRhRXJyb3JEYXRhWzFdLFxuXHRcdFx0XHRcdGFFcnJvckRhdGFbMl1cblx0XHRcdFx0XTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbihhc3luYyAoYVJlc3VsdHM6IHVua25vd25bXSkgPT4ge1xuXHRcdFx0XHRMb2cuaW5mbyhcIkFQUFNUQVRFOiBQYXJzZSBOYXZpZ2F0aW9uIGRvbmVcIik7XG5cblx0XHRcdFx0Ly8gYVJlc3VsdHNbMV0gPT4gb1N0YXJ0dXBQYXJhbWV0ZXJzIChub3QgZXZhbHVhdGVkKVxuXHRcdFx0XHRjb25zdCBvQXBwRGF0YSA9IChhUmVzdWx0c1swXSB8fCB7fSkgYXMgQXBwRGF0YSxcblx0XHRcdFx0XHRzTmF2VHlwZSA9IChhUmVzdWx0c1syXSBhcyBzdHJpbmcpIHx8IE5hdlR5cGUuaW5pdGlhbCxcblx0XHRcdFx0XHRvUm9vdENvbnRyb2xsZXIgPSB0aGlzLm9BcHBDb21wb25lbnQuZ2V0Um9vdENvbnRyb2woKS5nZXRDb250cm9sbGVyKCk7XG5cdFx0XHRcdC8vIGFwcGx5IHRoZSBhcHBzdGF0ZSBkZXBlbmRpbmcgdXBvbiB0aGUgdmlldyAoTFIvT1ApXG5cdFx0XHRcdGNvbnN0IGFwcFN0YXRlRGF0YSA9IHRoaXMuX2dldEFwcFN0YXRlRGF0YShvQXBwRGF0YSwgdmlld0lkLCBzTmF2VHlwZSk7XG5cdFx0XHRcdC8vIGZldGNoIHRoZSBza2lwTWVyZ2UgZmxhZyBmcm9tIGFwcFN0YXRlIGZvciBzYXZlIGFzIHRpbGVcblx0XHRcdFx0Y29uc3Qgc2tpcE1lcmdlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gb0FwcERhdGE/LmFwcFN0YXRlPy5bU0tJUF9NRVJHRV9LRVldO1xuXHRcdFx0XHR0aGlzLl9tQ3VycmVudEFwcFN0YXRlID1cblx0XHRcdFx0XHRzTmF2VHlwZSA9PT0gTmF2VHlwZS5pQXBwU3RhdGUgfHwgc05hdlR5cGUgPT09IE5hdlR5cGUuaHlicmlkID8geyAuLi50aGlzLl9tQ3VycmVudEFwcFN0YXRlLCAuLi5hcHBTdGF0ZURhdGEgfSA6IHt9O1xuXHRcdFx0XHRsZXQgc2hvdWxkQXBwbHlTdGF0ZSA9IHRydWU7XG5cblx0XHRcdFx0aWYgKCFvUm9vdENvbnRyb2xsZXIudmlld1N0YXRlKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGB2aWV3U3RhdGUgZXh0ZW5zaW9uIHJlcXVpcmVkIGZvciBjb250cm9sbGVyICR7b1Jvb3RDb250cm9sbGVyLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpfWApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvUm9vdENvbnRyb2xsZXIudmlld1N0YXRlLl9pc1N0YXRlRW1wdHlGb3JJQXBwU3RhdGVOYXZUeXBlKG9BcHBEYXRhLCBzTmF2VHlwZSkpIHtcblx0XHRcdFx0XHRpZiAoIW9Sb290Q29udHJvbGxlci52aWV3U3RhdGUuX2dldEluaXRpYWxTdGF0ZUFwcGxpZWQoKSkge1xuXHRcdFx0XHRcdFx0b1Jvb3RDb250cm9sbGVyLnZpZXdTdGF0ZS5fc2V0SW5pdGlhbFN0YXRlQXBwbGllZCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRzaG91bGRBcHBseVN0YXRlID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgYXBwbHlWaWV3U3RhdGUgPSBhd2FpdCBvUm9vdENvbnRyb2xsZXIudmlld1N0YXRlLmFwcGx5Vmlld1N0YXRlKFxuXHRcdFx0XHRcdHZpZXdJZCA/IGFwcFN0YXRlRGF0YSA6IHRoaXMuX21DdXJyZW50QXBwU3RhdGUsXG5cdFx0XHRcdFx0dGhpcy5fY3JlYXRlTmF2aWdhdGlvblBhcmFtZXRlcnMob0FwcERhdGEsIHNOYXZUeXBlKSxcblx0XHRcdFx0XHRza2lwTWVyZ2Vcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKCFzaG91bGRBcHBseVN0YXRlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHt9O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldHVybiBhcHBseVZpZXdTdGF0ZTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdExvZy5lcnJvcihcImFwcFN0YXRlIGNvdWxkIG5vdCBiZSBhcHBsaWVkXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHR0aHJvdyBvRXJyb3I7XG5cdFx0XHR9KVxuXHRcdFx0LmZpbmFsbHkoKCkgPT4ge1xuXHRcdFx0XHQvLyB1bmxvY2sgYXBwbHkgc3RhdGUgZm9yIHRoZSBjdXJyZW50IHZpZXdcblx0XHRcdFx0QnVzeUxvY2tlci51bmxvY2sodGhpcywgdmlld0lkKTtcblx0XHRcdFx0Ly8gdW5sb2NrIHRoZSBhcHAgc3RhdGUgaGFuZGxlciwgc28gdGhhdCBhcHAgc3RhdGUgY3JlYXRpb24gY2FuIGhhcHBlbiBub3cuXG5cdFx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKHRoaXMpO1xuXHRcdFx0XHQvLyB1bmxvY2sgdGhlIFJvb3RDb250cm9sIHRvIHJlbW92ZSB0aGUgYnVzeSBpbmRpY2F0b3IuXG5cdFx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKHRoaXMub0FwcENvbXBvbmVudC5nZXRSb290Q29udHJvbCgpKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIGNoZWNrIGlzIHJvdXRlIGlzIGNoYW5nZWQgYnkgY2hhbmdlIGluIHRoZSBpQVBQU3RhdGUuXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgcm91dGUgaGFzIGNobmFnZWRcblx0ICovXG5cdGNoZWNrSWZSb3V0ZUNoYW5nZWRCeUlBcHAoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuYk5vUm91dGVDaGFuZ2U7XG5cdH1cblxuXHQvKipcblx0ICogUmVzZXQgdGhlIHJvdXRlIGNoYW5nZWQgYnkgaUFQUFN0YXRlLlxuXHQgKi9cblx0cmVzZXRSb3V0ZUNoYW5nZWRCeUlBcHAoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuYk5vUm91dGVDaGFuZ2UpIHtcblx0XHRcdHRoaXMuYk5vUm91dGVDaGFuZ2UgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHQvLyBSZXNldCBhbGwgYWN0aXZhdGlvbiBzdGF0dXNlcyBpbiBBcHBTdGF0ZUhhbmRsZXIudmVyc2lvbkFjdGl2YXRpb25TdGF0dXMgdG8gZmFsc2Vcblx0c3RhdGljIHJlc2V0VmVyc2lvbkFjdGl2YXRpb25TdGF0dXMoKTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCBpZCBpbiB0aGlzLnZlcnNpb25BY3RpdmF0aW9uU3RhdHVzKSB7XG5cdFx0XHRpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMudmVyc2lvbkFjdGl2YXRpb25TdGF0dXMsIGlkKSkge1xuXHRcdFx0XHR0aGlzLnZlcnNpb25BY3RpdmF0aW9uU3RhdHVzW2lkXSA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBnbG9iYWxcbiAqL1xuZXhwb3J0IGRlZmF1bHQgQXBwU3RhdGVIYW5kbGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztFQWlCQSxNQUFNQSxPQUFPLEdBQUdDLE9BQU8sQ0FBQ0QsT0FBTztFQWMvQixNQUFNRSxjQUFjLEdBQUcsV0FBVztFQW9CbEMsTUFBTUMseUJBQXlCLEdBQUcsMkJBQTJCO0VBQUMsSUFHeERDLGVBQWUsSUFBQUMsSUFBQSxHQURwQkMsY0FBYyxDQUFDLDZCQUE2QixDQUFDLEVBQUFELElBQUEsQ0FBQUUsTUFBQSxJ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
@@ -253,6 +253,11 @@ class AppStateHandler extends BaseObject {
253
253
  if (internalModelContext && internalModelContext.getProperty("fclColumnClosed") === true) {
254
254
  const technicalKeysObject = internalModelContext.getProperty("technicalKeysOfLastSeenRecord");
255
255
  const bindingContext = view?.getBindingContext() as Context;
256
+ if (bindingContext.getObject() === undefined) {
257
+ // After executing a bound action in an FCL app, we set the EditState to dirty, which refreshes the LR table, and invalidate all bindingContexts.
258
+ // This ensure it won't throw an error in those cases.
259
+ return false;
260
+ }
256
261
  const path = (bindingContext && bindingContext.getPath()) || "";
257
262
  const metaModel = bindingContext?.getModel().getMetaModel();
258
263
  const metaPath = metaModel?.getMetaPath(path);