@wavemaker/app-ng-runtime 11.15.5-rc.261 → 11.15.5-rc.263

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.
@@ -1649,17 +1649,18 @@
1649
1649
  this._clicktriggeredByUser = false;
1650
1650
  }
1651
1651
  // Expression to be evaluated in view mode of form field
1652
- evaluateExpr(object, displayField, displayExpr) {
1653
- if (!displayExpr || !displayField) {
1652
+ evaluateExpr(object, displayField, displayExpr, bindExpr) {
1653
+ // If dataset is not ready, object will be empty; nothing to evaluate yet
1654
+ if (!object || !Object.keys(object).length) {
1655
+ return;
1656
+ }
1657
+ if (!displayExpr && !displayField && !bindExpr) { // update the display Field to first key of the object if displayField, displayExpr and bindExpr are not provided
1654
1658
  displayField = Object.keys(object)[0];
1655
- // If dataset is not ready, display expression will not be defined
1656
- if (!displayField) {
1657
- return;
1658
- }
1659
1659
  }
1660
1660
  return i5.getEvaluatedData(object, {
1661
1661
  field: displayField,
1662
- expression: displayExpr
1662
+ expression: displayExpr,
1663
+ bindExpression: bindExpr
1663
1664
  }, this.viewParent);
1664
1665
  }
1665
1666
  // Expression to be evaluated in view mode of form field
@@ -1668,16 +1669,17 @@
1668
1669
  const value = this.value;
1669
1670
  const displayField = this.displayfield || this.displaylabel;
1670
1671
  const displayExpr = this.displayexpression;
1672
+ const bindExpr = this.binddisplayexpression;
1671
1673
  if (lodashEs.isObject(value)) {
1672
1674
  if (lodashEs.isArray(value)) {
1673
1675
  lodashEs.forEach(value, obj => {
1674
1676
  if (lodashEs.isObject(obj)) {
1675
- caption.push(this.evaluateExpr(obj, displayField, displayExpr));
1677
+ caption.push(this.evaluateExpr(obj, displayField, displayExpr, bindExpr));
1676
1678
  }
1677
1679
  });
1678
1680
  }
1679
1681
  else {
1680
- caption.push(this.evaluateExpr(value, displayField, displayExpr));
1682
+ caption.push(this.evaluateExpr(value, displayField, displayExpr, bindExpr));
1681
1683
  }
1682
1684
  return lodashEs.join(caption, ',');
1683
1685
  }
@@ -101,17 +101,18 @@ export class FormFieldDirective extends StylableComponent {
101
101
  this._clicktriggeredByUser = false;
102
102
  }
103
103
  // Expression to be evaluated in view mode of form field
104
- evaluateExpr(object, displayField, displayExpr) {
105
- if (!displayExpr || !displayField) {
104
+ evaluateExpr(object, displayField, displayExpr, bindExpr) {
105
+ // If dataset is not ready, object will be empty; nothing to evaluate yet
106
+ if (!object || !Object.keys(object).length) {
107
+ return;
108
+ }
109
+ if (!displayExpr && !displayField && !bindExpr) { // update the display Field to first key of the object if displayField, displayExpr and bindExpr are not provided
106
110
  displayField = Object.keys(object)[0];
107
- // If dataset is not ready, display expression will not be defined
108
- if (!displayField) {
109
- return;
110
- }
111
111
  }
112
112
  return getEvaluatedData(object, {
113
113
  field: displayField,
114
- expression: displayExpr
114
+ expression: displayExpr,
115
+ bindExpression: bindExpr
115
116
  }, this.viewParent);
116
117
  }
117
118
  // Expression to be evaluated in view mode of form field
@@ -120,16 +121,17 @@ export class FormFieldDirective extends StylableComponent {
120
121
  const value = this.value;
121
122
  const displayField = this.displayfield || this.displaylabel;
122
123
  const displayExpr = this.displayexpression;
124
+ const bindExpr = this.binddisplayexpression;
123
125
  if (isObject(value)) {
124
126
  if (isArray(value)) {
125
127
  forEach(value, obj => {
126
128
  if (isObject(obj)) {
127
- caption.push(this.evaluateExpr(obj, displayField, displayExpr));
129
+ caption.push(this.evaluateExpr(obj, displayField, displayExpr, bindExpr));
128
130
  }
129
131
  });
130
132
  }
131
133
  else {
132
- caption.push(this.evaluateExpr(value, displayField, displayExpr));
134
+ caption.push(this.evaluateExpr(value, displayField, displayExpr, bindExpr));
133
135
  }
134
136
  return join(caption, ',');
135
137
  }
@@ -607,4 +609,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
607
609
  type: HostListener,
608
610
  args: ['click', ['$event']]
609
611
  }] } });
610
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvZGF0YS9mb3JtL3NyYy9mb3JtLWZpZWxkL2Zvcm0tZmllbGQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLFFBQVEsRUFHUixRQUFRLEVBQ1IsSUFBSSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxXQUFXLEVBQWEsaUJBQWlCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUMsT0FBTyxFQUNILGtCQUFrQixFQUNsQixHQUFHLEVBQ0gsUUFBUSxFQUNSLGNBQWMsRUFDZCxjQUFjLEVBQ2QsU0FBUyxFQUNULFFBQVEsRUFDUixJQUFJLEVBQ0osUUFBUSxFQUNYLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFDSCxvQkFBb0IsRUFDcEIsT0FBTyxFQUNQLHdCQUF3QixFQUN4QixnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULGtCQUFrQixFQUNsQixpQkFBaUIsRUFDcEIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFFdkQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRCxPQUFPLEVBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBQyxNQUFNLFdBQVcsQ0FBQzs7Ozs7O0FBSWhFLG9GQUFvRjtBQUNwRixNQUFNLGlCQUFpQixHQUFHLEdBQUcs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QVM7MkJBQUMsZ0JBQWdCOzswQkFDMUIsU0FBUzsyQkFBQyxnQkFBZ0I7OzBCQUMxQixJQUFJOzswQkFBSSxNQUFNOzJCQUFDLE9BQU87OzBCQUN0QixNQUFNOzJCQUFDLGtCQUFrQjs7MEJBQUcsUUFBUTt5Q0E5RkcsVUFBVTtzQkFBckQsWUFBWTt1QkFBQyxZQUFZLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDO2dCQUNYLGFBQWE7c0JBQTNDLFlBQVk7dUJBQUMsZUFBZTtnQkFnRVEsZ0JBQWdCO3NCQUFwRCxZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFJQSxXQUFXO3NCQUE3QyxZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBBdHRyaWJ1dGUsXG4gICAgQ29udGVudENoaWxkLFxuICAgIERpcmVjdGl2ZSxcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5qZWN0LFxuICAgIEluamVjdG9yLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgU2VsZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Rm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgTkdfVkFMVUVfQUNDRVNTT1J9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHtkZWJvdW5jZVRpbWV9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtcbiAgICBhZGRGb3JJZEF0dHJpYnV0ZXMsXG4gICAgQXBwLFxuICAgIGRlYm91bmNlLFxuICAgIEZvcm1XaWRnZXRUeXBlLFxuICAgIGlzRGF0ZVRpbWVUeXBlLFxuICAgIGlzRGVmaW5lZCxcbiAgICBpc01vYmlsZSxcbiAgICBub29wLFxuICAgIFZpZXdwb3J0XG59IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7XG4gICAgQmFzZUZpZWxkVmFsaWRhdGlvbnMsXG4gICAgQ29udGV4dCxcbiAgICBnZXREZWZhdWx0Vmlld01vZGVXaWRnZXQsXG4gICAgZ2V0RXZhbHVhdGVkRGF0YSxcbiAgICBwcm92aWRlQXMsXG4gICAgcHJvdmlkZUFzV2lkZ2V0UmVmLFxuICAgIFN0eWxhYmxlQ29tcG9uZW50XG59IGZyb20gJ0B3bS9jb21wb25lbnRzL2Jhc2UnO1xuaW1wb3J0IHtMaXN0Q29tcG9uZW50fSBmcm9tICdAd20vY29tcG9uZW50cy9kYXRhL2xpc3QnO1xuXG5pbXBvcnQge3JlZ2lzdGVyUHJvcHN9IGZyb20gJy4vZm9ybS1maWVsZC5wcm9wcyc7XG5pbXBvcnQge0Zvcm1Db21wb25lbnR9IGZyb20gJy4uL2Zvcm0uY29tcG9uZW50JztcbmltcG9ydCB7Zm9yRWFjaCwgZ2V0LCBpc0FycmF5LCBpc09iamVjdCwgam9pbn0gZnJvbSBcImxvZGFzaC1lc1wiO1xuXG5kZWNsYXJlIGNvbnN0ICQ7XG5cbi8vIEN1c3RvbSB2YWxpZGF0b3IgdG8gc2hvdyB2YWxpZGF0aW9uIGVycm9yLCBpZiBzZXRWYWxpZGF0aW9uTWVzc2FnZSBtZXRob2QgaXMgdXNlZFxuY29uc3QgY3VzdG9tVmFsaWRhdG9yRm4gPSAoKSA9PiB7XG4gICAgcmV0dXJuIHsgY3VzdG9tOiB0cnVlIH07XG59O1xuXG5jb25zdCBGSUxFX1RZUEVTID0ge1xuICAgICdpbWFnZScgOiAnaW1hZ2UvKicsXG4gICAgJ3ZpZGVvJyA6ICd2aWRlby8qJyxcbiAgICAnYXVkaW8nIDogJ2F1ZGlvLyonXG59O1xuXG5ARGlyZWN0aXZlKHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ1t3bUZvcm1GaWVsZF0nLFxuICAgIGV4cG9ydEFzOiAnd21Gb3JtRmllbGQnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBwcm92aWRlQXNXaWRnZXRSZWYoRm9ybUZpZWxkRGlyZWN0aXZlKSxcbiAgICAgICAgcHJvdmlkZUFzKEZvcm1GaWVsZERpcmVjdGl2ZSwgTkdfVkFMVUVfQUNDRVNTT1IsIHRydWUpLFxuICAgICAgICB7cHJvdmlkZTogQ29udGV4dCwgdXNlRmFjdG9yeTogKCkgPT4geyByZXR1cm4ge30gfSwgbXVsdGk6IHRydWV9XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBGb3JtRmllbGREaXJlY3RpdmUgZXh0ZW5kcyBTdHlsYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95IHtcbiAgICBzdGF0aWMgaW5pdGlhbGl6ZVByb3BzID0gcmVnaXN0ZXJQcm9wcygpO1xuXG4gICAgQENvbnRlbnRDaGlsZCgnZm9ybVdpZGdldCcsIHtzdGF0aWM6IHRydWV9KSBmb3JtV2lkZ2V0O1xuICAgIEBDb250ZW50Q2hpbGQoJ2Zvcm1XaWRnZXRNYXgnKSBmb3JtV2lkZ2V0TWF4O1xuXG4gICAgcHJpdmF0ZSBmYjtcbiAgICBwcml2YXRlIHZpZXdwb3J0O1xuXG4gICAgLy8gZXhjbHVkZVByb3BzIGlzIHVzZWQgdG8gc3RvcmUgdGhlIHByb3BzIHRoYXQgc2hvdWxkIG5vdCBiZSBhcHBsaWVkIG9uIGlubmVyIHdpZGdldFxuICAgIHByaXZhdGUgZXhjbHVkZVByb3BzO1xuICAgIHByaXZhdGUgX3ZhbGlkYXRvcnM7XG4gICAgcHJpdmF0ZSBfb2xkVXBsb2FkVmFsO1xuXG4gICAgbmdmb3JtOiBGb3JtR3JvdXA7XG4gICAgZGVmYXVsdHZhbHVlO1xuICAgIGRpc3BsYXlleHByZXNzaW9uO1xuICAgIGRpc3BsYXlmaWVsZDtcbiAgICBkaXNwbGF5bGFiZWw7XG4gICAgZGlzcGxheW5hbWU7XG4gICAgZ2VuZXJhdG9yO1xuICAgIGtleTtcbiAgICB0YXJnZXQ7XG4gICAgYmluZGluZztcbiAgICB3aWRnZXR0eXBlO1xuICAgIGNsYXNzO1xuICAgIHJlYWRvbmx5O1xuICAgIHNob3c7XG4gICAgdHlwZTtcbiAgICBpc0RhdGFTZXRCb3VuZDtcbiAgICB2aWV3bW9kZXdpZGdldDtcbiAgICBiaW5kZGF0YXNldDtcbiAgICBiaW5kZGlzcGxheWV4cHJlc3Npb247XG4gICAgYmluZENoaXBjbGFzcztcbiAgICBkaXNwbGF5aW1hZ2VzcmM6IHN0cmluZztcbiAgICBiaW5kZGlzcGxheWltYWdlc3JjO1xuICAgIGJpbmRkaXNwbGF5bGFiZWw7XG4gICAgZm9ybTtcbiAgICBmaWxldHlwZTtcbiAgICBleHRlbnNpb25zO1xuICAgIHBlcm1pdHRlZDtcbiAgICBwZXJpb2Q7XG4gICAgaXNSYW5nZTtcbiAgICBuYW1lO1xuICAgIC8vIFZhbGlkYXRpb24gcHJvcGVydGllc1xuICAgIHJlcXVpcmVkO1xuICAgIG1heGNoYXJzO1xuICAgIG1pbnZhbHVlO1xuICAgIG1heHZhbHVlO1xuICAgIHJlZ2V4cDtcbiAgICBmaWVsZERlZkNvbmZpZztcbiAgICBwbGFjZWhvbGRlcjtcbiAgICBpbnB1dHR5cGU7XG4gICAgdmFsaWRhdGlvbm1lc3NhZ2U7XG5cbiAgICBwdWJsaWMgX2ZpZWxkTmFtZTtcblxuICAgIHByaXZhdGUgX2RlYm91bmNlU2V0VXBWYWxpZGF0b3JzO1xuICAgIHByaXZhdGUgX2luaXRQcm9wc1JlcztcbiAgICBwcml2YXRlIHBhcmVudExpc3Q7XG4gICAgcHJpdmF0ZSBzaG93UGVuZGluZ1NwaW5uZXI6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBfYWN0aXZlRmllbGQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBub3RpZnlGb3JGaWVsZHM6IGFueTtcbiAgICBwcml2YXRlIGZpZWxkVmFsaWRhdGlvbnM7XG4gICAgcHJpdmF0ZSBfdHJpZ2dlcmVkQnlVc2VyOiBib29sZWFuO1xuICAgIHByaXZhdGUgX2NsaWNrdHJpZ2dlcmVkQnlVc2VyOiBib29sZWFuO1xuICAgIHByaXZhdGUgYXBwOiBBcHA7XG5cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSkgb25LZXlkb3duSGFuZGxlcihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICB0aGlzLl90cmlnZ2VyZWRCeVVzZXIgPSB0cnVlO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSkgaGFuZGxlQ2xpY2soZXZlbnQpIHtcbiAgICAgICAgdGhpcy5fY2xpY2t0cmlnZ2VyZWRCeVVzZXIgPSB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNGb2N1c2VkO1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBpbmo6IEluamVjdG9yLFxuICAgICAgICBmb3JtOiBGb3JtQ29tcG9uZW50LFxuICAgICAgICBmYjogRm9ybUJ1aWxkZXIsXG4gICAgICAgIHZpZXdwb3J0OiBWaWV3cG9ydCxcbiAgICAgICAgYXBwOiBBcHAsXG4gICAgICAgIEBPcHRpb25hbCgpIHBhcmVudExpc3Q6IExpc3RDb21wb25lbnQsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2NoaXBjbGFzcy5iaW5kJykgYmluZENoaXBjbGFzczogc3RyaW5nLFxuICAgICAgICBAQXR0cmlidXRlKCdkYXRhc2V0LmJpbmQnKSBiaW5kZGF0YXNldCxcbiAgICAgICAgQEF0dHJpYnV0ZSgnZGlzcGxheWV4cHJlc3Npb24uYmluZCcpIGJpbmRkaXNwbGF5ZXhwcmVzc2lvbjogc3RyaW5nLFxuICAgICAgICBAQXR0cmlidXRlKCdkaXNwbGF5bGFiZWwuYmluZCcpIGJpbmRkaXNwbGF5bGFiZWw6IHN0cmluZyxcbiAgICAgICAgQEF0dHJpYnV0ZSgnd2lkZ2V0dHlwZScpIF93aWRnZXRUeXBlLFxuICAgICAgICBAQXR0cmlidXRlKCduYW1lJykgbmFtZSxcbiAgICAgICAgQEF0dHJpYnV0ZSgnZGlzcGxheWltYWdlc3JjLmJpbmQnKSBiaW5kZGlzcGxheWltYWdlc3JjOiBTdHJpbmcsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2tleScpIGtleSxcbiAgICAgICAgQEF0dHJpYnV0ZSgnaXMtcmFuZ2UnKSBpc1JhbmdlLFxuICAgICAgICBAQXR0cmlidXRlKCdwYy1kaXNwbGF5JykgcGNEaXNwbGF5LFxuICAgICAgICBAQXR0cmlidXRlKCdtb2JpbGUtZGlzcGxheScpIG1vYmlsZURpc3BsYXksXG4gICAgICAgIEBBdHRyaWJ1dGUoJ3RhYmxldC1kaXNwbGF5JykgdGFibGV0RGlzcGxheSxcbiAgICAgICAgQFNlbGYoKSBASW5qZWN0KENvbnRleHQpIGNvbnRleHRzOiBBcnJheTxhbnk+LFxuICAgICAgICBASW5qZWN0KCdFWFBMSUNJVF9DT05URVhUJykgQE9wdGlvbmFsKCkgZXhwbGljaXRDb250ZXh0OiBhbnlcbiAgICApIHtcbiAgICAgICAgY29uc3QgV0lER0VUX0NPTkZJRyA9IHtcbiAgICAgICAgICAgIHdpZGdldFR5cGU6ICd3bS1mb3JtLWZpZWxkJyxcbiAgICAgICAgICAgIGhvc3RDbGFzczogJycsXG4gICAgICAgICAgICB3aWRnZXRTdWJUeXBlOiAnd20tZm9ybS1maWVsZC0nICsgKF93aWRnZXRUeXBlIHx8IEZvcm1XaWRnZXRUeXBlLlRFWFQpLnRyaW0oKVxuICAgICAgICB9O1xuICAgICAgICBsZXQgcmVzb2x2ZUZuOiBGdW5jdGlvbiA9IG5vb3A7XG5cbiAgICAgICAgc3VwZXIoaW5qLCBXSURHRVRfQ09ORklHLCBleHBsaWNpdENvbnRleHQsIG5ldyBQcm9taXNlKHJlcyA9PiByZXNvbHZlRm4gPSByZXMpKTtcbiAgICAgICAgdGhpcy5faW5pdFByb3BzUmVzID0gcmVzb2x2ZUZuO1xuICAgICAgICB0aGlzLmFwcCA9IGFwcDtcbiAgICAgICAgdGhpcy5maWVsZERlZkNvbmZpZyA9IHt9O1xuICAgICAgICB0aGlzLmNsYXNzID0gJyc7XG4gICAgICAgIHRoaXMuYmluZGRhdGFzZXQgPSBiaW5kZGF0YXNldDtcbiAgICAgICAgdGhpcy5iaW5kZGlzcGxheWltYWdlc3JjID0gYmluZGRpc3BsYXlpbWFnZXNyYztcbiAgICAgICAgdGhpcy5iaW5kZGlzcGxheWV4cHJlc3Npb24gPSBiaW5kZGlzcGxheWV4cHJlc3Npb247XG4gICAgICAgIHRoaXMuYmluZENoaXBjbGFzcyA9IGJpbmRDaGlwY2xhc3M7XG4gICAgICAgIHRoaXMuYmluZGRpc3BsYXlsYWJlbCA9IGJpbmRkaXNwbGF5bGFiZWw7XG4gICAgICAgIHRoaXMuZm9ybSA9IGZvcm07XG4gICAgICAgIHRoaXMuZmIgPSBmYjtcbiAgICAgICAgdGhpcy52aWV3cG9ydCA9IHZpZXdwb3J0O1xuICAgICAgICB0aGlzLl9maWVsZE5hbWUgPSBrZXkgfHwgbmFtZTtcbiAgICAgICAgdGhpcy5pc1JhbmdlID0gaXNSYW5nZTtcbiAgICAgICAgdGhpcy5leGNsdWRlUHJvcHMgPSBuZXcgU2V0KFsndHlwZScsICduYW1lJ10pO1xuICAgICAgICB0aGlzLndpZGdldHR5cGUgPSBfd2lkZ2V0VHlwZTtcbiAgICAgICAgdGhpcy5wYXJlbnRMaXN0ID0gcGFyZW50TGlzdDtcbiAgICAgICAgdGhpcy5ub3RpZnlGb3JGaWVsZHMgPSBbXTtcblxuICAgICAgICBpZiAodGhpcy5iaW5kZGF0YXNldCB8fCB0aGlzLiRlbGVtZW50LmF0dHIoJ2RhdGFzZXQnKSkge1xuICAgICAgICAgICAgdGhpcy5pc0RhdGFTZXRCb3VuZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0c1swXS5fb25Gb2N1c0ZpZWxkID0gdGhpcy5fb25Gb2N1c0ZpZWxkLmJpbmQodGhpcyk7XG4gICAgICAgIGNvbnRleHRzWzBdLl9vbkJsdXJGaWVsZCA9IHRoaXMuX29uQmx1ckZpZWxkLmJpbmQodGhpcyk7XG5cbiAgICAgICAgdGhpcy5fZGVib3VuY2VTZXRVcFZhbGlkYXRvcnMgPSBkZWJvdW5jZSgoKSA9PiB0aGlzLnNldFVwVmFsaWRhdG9ycygpLCA1MDApO1xuICAgIH1cblxuICAgIF9vbkZvY3VzRmllbGQoJGV2dCkge1xuICAgICAgICB0aGlzLl9hY3RpdmVGaWVsZCA9IHRydWU7XG4gICAgICAgICQoJGV2dC50YXJnZXQpLmNsb3Nlc3QoJy5saXZlLWZpZWxkJykuYWRkQ2xhc3MoJ2FjdGl2ZScpO1xuXG4gICAgfVxuXG4gICAgLy8gRnVuY3Rpb24gdG8gZ2V0IHRoZSBhY3RpdmUgZWxlbWVudCBtYXJrdXAgYmFzZWQgb24gd2lkZ2V0IHR5cGVcbiAgICBnZXRBY3RpdmVFbGVtZW50KCkge1xuICAgICAgICBjb25zdCB3aWRnZXRUeXBlID0gdGhpcy5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnd2lkZ2V0dHlwZScpO1xuICAgICAgICBzd2l0Y2ggKHdpZGdldFR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdzZWxlY3QnKTtcbiAgICAgICAgICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ3RleHRhcmVhJyk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldEFyaWFBdHRyaWJ1dGVzKCkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5nZXRBY3RpdmVFbGVtZW50KCk7XG4gICAgICAgIGlmICh0aGlzLm5nZm9ybS5jb250cm9sc1t0aGlzLl9maWVsZE5hbWVdLmludmFsaWQgJiYgdGhpcy5uZ2Zvcm0uY29udHJvbHNbdGhpcy5fZmllbGROYW1lXS50b3VjaGVkICYmIHRoaXMuZm9ybS5pc1VwZGF0ZU1vZGUpIHtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ19fZXJyb3Jtc2cnLCBgJHt0aGlzLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdfX3ZhbGlkYXRpb25JZCcpfWApO1xuICAgICAgICAgICAgZWxlbWVudD8uc2V0QXR0cmlidXRlKCdhcmlhLWludmFsaWQnLCBgJHt0aGlzLm5nZm9ybS5jb250cm9sc1t0aGlzLl9maWVsZE5hbWVdLmludmFsaWR9YCk7XG4gICAgICAgICAgICBlbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknLCBgJHt0aGlzLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdfX3ZhbGlkYXRpb25JZCcpfWApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnX19lcnJvcm1zZycpO1xuICAgICAgICAgICAgZWxlbWVudD8ucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWludmFsaWQnKTtcbiAgICAgICAgICAgIGVsZW1lbnQ/LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX29uQmx1ckZpZWxkKCRldnQpIHtcbiAgICAgICAgJCgkZXZ0LnRhcmdldCkuY2xvc2VzdCgnLmxpdmUtZmllbGQnKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XG4gICAgICAgIGNvbnN0IGVsZSA9IHRoaXMubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdwLnRleHQtZGFuZ2VyJyk7XG4gICAgICAgIC8vIEZpeCBmb3IgW1dNUy0yMzk1OV06IEFEQSBpc3N1ZSAtIGFkZGluZyBhcmlhLWRlc2NyaWJlZGJ5LCBhcmlhLWludmFsaWQsIF9fZXJyb3Jtc2cgYXR0cmlidXRlcyBvbmx5IHdoZW4gdGhlIGZvcm0gZmllbGQgaXMgaW52YWxpZCAsIGVsc2UgcmVtb3ZpbmcgdGhlIGF0dHJpYnV0ZXNcbiAgICAgICAgdGhpcy5zZXRBcmlhQXR0cmlidXRlcygpO1xuICAgICAgICB0aGlzLl9hY3RpdmVGaWVsZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl90cmlnZ2VyZWRCeVVzZXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2xpY2t0cmlnZ2VyZWRCeVVzZXIgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBFeHByZXNzaW9uIHRvIGJlIGV2YWx1YXRlZCBpbiB2aWV3IG1vZGUgb2YgZm9ybSBmaWVsZFxuICAgIGV2YWx1YXRlRXhwcihvYmplY3QsIGRpc3BsYXlGaWVsZCwgZGlzcGxheUV4cHIpIHtcbiAgICAgICAgaWYgKCFkaXNwbGF5RXhwciB8fCAhZGlzcGxheUZpZWxkKSB7XG4gICAgICAgICAgICBkaXNwbGF5RmllbGQgPSBPYmplY3Qua2V5cyhvYmplY3QpWzBdO1xuICAgICAgICAgICAgLy8gSWYgZGF0YXNldCBpcyBub3QgcmVhZHksIGRpc3BsYXkgZXhwcmVzc2lvbiB3aWxsIG5vdCBiZSBkZWZpbmVkXG4gICAgICAgICAgICBpZiAoIWRpc3BsYXlGaWVsZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2V0RXZhbHVhdGVkRGF0YShvYmplY3QsIHtcbiAgICAgICAgICAgIGZpZWxkOiBkaXNwbGF5RmllbGQsXG4gICAgICAgICAgICBleHByZXNzaW9uOiBkaXNwbGF5RXhwclxuICAgICAgICB9LCB0aGlzLnZpZXdQYXJlbnQpO1xuICAgIH1cblxuICAgIC8vIEV4cHJlc3Npb24gdG8gYmUgZXZhbHVhdGVkIGluIHZpZXcgbW9kZSBvZiBmb3JtIGZpZWxkXG4gICAgZ2V0RGlzcGxheUV4cHIoKSB7XG4gICAgICAgIGNvbnN0IGNhcHRpb24gPSBbXTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgICBjb25zdCBkaXNwbGF5RmllbGQgPSB0aGlzLmRpc3BsYXlmaWVsZCB8fCB0aGlzLmRpc3BsYXlsYWJlbFxuICAgICAgICBjb25zdCBkaXNwbGF5RXhwciA9IHRoaXMuZGlzcGxheWV4cHJlc3Npb247XG4gICAgICAgIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGZvckVhY2godmFsdWUsIG9iaiA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc09iamVjdChvYmopKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXB0aW9uLnB1c2godGhpcy5ldmFsdWF0ZUV4cHIob2JqLCBkaXNwbGF5RmllbGQsIGRpc3BsYXlFeHByKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FwdGlvbi5wdXNoKHRoaXMuZXZhbHVhdGVFeHByKHZhbHVlLCBkaXNwbGF5RmllbGQsIGRpc3BsYXlFeHByKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gam9pbihjYXB0aW9uLCAnLCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkgPyAnJyA6IHRoaXMudmFsdWU7XG4gICAgfVxuXG4gICAgZ2V0Q2FwdGlvbigpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLnZhbHVlID09PSB1bmRlZmluZWQgfHwgdGhpcy52YWx1ZSA9PT0gbnVsbCkgPyAoZ2V0KHRoaXMuZm9ybS5kYXRhb3V0cHV0LCB0aGlzLl9maWVsZE5hbWUpIHx8ICcnKSA6IHRoaXMudmFsdWU7XG4gICAgfVxuXG4gICAgLy8gTm90aWZpZXMgY2hhbmdlcyB0byBvYnNlcnZpbmcgdmFsaWRhdGlvbiBmaWVsZHNcbiAgICBub3RpZnlDaGFuZ2VzKCkge1xuICAgICAgICBmb3JFYWNoKHRoaXMubm90aWZ5Rm9yRmllbGRzLCBmaWVsZCA9PiB7XG4gICAgICAgICAgICBmaWVsZC5maWVsZFZhbGlkYXRpb25zLnZhbGlkYXRlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFJlZ2lzdGVycyBvYnNlcnZlciBvZiB2YWxpZGF0aW9uIGZpZWxkc1xuICAgIG9ic2VydmVPbihmaWVsZHMpIHtcbiAgICAgICAgdGhpcy5maWVsZFZhbGlkYXRpb25zLm9ic2VydmVPbihmaWVsZHMsICdmb3JtZmllbGRzJyk7XG4gICAgfVxuXG4gICAgLy8gTWV0aG9kIHRvIHNldHVwIHZhbGlkYXRvcnMgZm9yIHJlYWN0aXZlIGZvcm0gY29udHJvbFxuICAgIHNldFVwVmFsaWRhdG9ycyhjdXN0b21WYWxpZGF0b3I/KSB7XG4gICAgICAgIHRoaXMuZmllbGRWYWxpZGF0aW9ucy5zZXRVcFZhbGlkYXRvcnMoY3VzdG9tVmFsaWRhdG9yKTtcbiAgICB9XG5cbiAgICAvLyBzZXRzIHRoZSBjdXN0b20gYXN5bmMgdmFsaWRhdGlvbiBvbiB0aGUgZm9ybSBmaWVsZFxuICAgIHNldEFzeW5jVmFsaWRhdG9ycyh2YWxpZGF0b3JzKSB7XG4gICAgICAgIHRoaXMuZmllbGRWYWxpZGF0aW9ucy5zZXRBc3luY1ZhbGlkYXRvcnModmFsaWRhdG9ycyk7XG4gICAgfVxuXG4gICAgLy8gc2V0cyB0aGUgZGVmYXVsdCBhbmQgY3VzdG9tIHN5bmMgdmFsaWRhdGlvbiBvbiB0aGUgZm9ybSBmaWVsZFxuICAgIHNldFZhbGlkYXRvcnModmFsaWRhdG9ycykge1xuICAgICAgICB0aGlzLmZpZWxkVmFsaWRhdGlvbnMuc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JzKTtcbiAgICB9XG5cbiAgICAvLyBNZXRob2QgdG8gc2V0IHRoZSBwcm9wZXJ0aWVzIG9uIGlubmVyIGZvcm0gd2lkZ2V0XG4gICAgc2V0Rm9ybVdpZGdldChrZXksIHZhbCkge1xuICAgICAgICBpZiAodGhpcy5mb3JtV2lkZ2V0ICYmIHRoaXMuZm9ybVdpZGdldC53aWRnZXQpIHtcbiAgICAgICAgICAgIGlmKGtleSA9PT0gJ2lucHV0dHlwZScgJiYgdGhpcy53aWRnZXR0eXBlID09PSBGb3JtV2lkZ2V0VHlwZS5URVhUKSB7XG4gICAgICAgICAgICAgICAga2V5ID0gJ3R5cGUnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5mb3JtV2lkZ2V0LndpZGdldFtrZXldID0gdmFsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYm91bmRGbihmbikge1xuICAgICAgICByZXR1cm4gZm4oKTtcbiAgICB9XG5cbiAgICAvLyBNZXRob2QgdG8gc2V0IHRoZSBwcm9wZXJ0aWVzIG9uIGlubmVyIG1heCBmb3JtIHdpZGdldCAod2hlbiByYW5nZSBpcyBzZWxlY3RlZClcbiAgICBzZXRNYXhGb3JtV2lkZ2V0KGtleSwgdmFsKSB7XG4gICAgICAgIGlmICh0aGlzLmZvcm1XaWRnZXRNYXgpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybVdpZGdldE1heC53aWRnZXRba2V5XSA9IHZhbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUHJvcGVydHlDaGFuZ2Uoa2V5LCBudiwgb3Y/KSB7XG4gICAgICAgIGNvbnN0IGlzRm9ybURpcnR5ID0gdGhpcy5mb3JtLmRpcnR5O1xuXG4gICAgICAgIGlmIChrZXkgIT09ICd0YWJpbmRleCcpIHtcbiAgICAgICAgICAgIHN1cGVyLm9uUHJvcGVydHlDaGFuZ2Uoa2V5LCBudiwgb3YpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZXhjbHVkZVByb3BzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBcyB1cGxvYWQgd2lkZ2V0IGlzIGFuIEhUTUwgd2lkZ2V0LCBvbmx5IHJlcXVpcmVkIHByb3BlcnR5IGlzIHNldHVwXG4gICAgICAgIGlmICh0aGlzLndpZGdldHR5cGUgPT09IEZvcm1XaWRnZXRUeXBlLlVQTE9BRCkge1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gJ3JlcXVpcmVkJykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RlYm91bmNlU2V0VXBWYWxpZGF0b3JzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdXBlci5vblByb3BlcnR5Q2hhbmdlKGtleSwgbnYsIG92KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChrZXkgIT09ICdzaG93Jykge1xuICAgICAgICAgICAgdGhpcy5zZXRGb3JtV2lkZ2V0KGtleSwgbnYpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUGxhY2Vob2xkZXIgc2hvdWxkIG5vdCBiZSBzZXR1cCBvbiBtYXggd2lkZ2V0XG4gICAgICAgIGlmIChrZXkgIT09ICdwbGFjZWhvbGRlcicgJiYga2V5ICE9PSAnc2hvdycpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0TWF4Rm9ybVdpZGdldChrZXksIG52KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdkZWZhdWx0dmFsdWUnOlxuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5vbkZpZWxkRGVmYXVsdFZhbHVlQ2hhbmdlKHRoaXMsIG52KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21heGRlZmF1bHR2YWx1ZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5tYXhWYWx1ZSA9IG52O1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0TWF4Rm9ybVdpZGdldCgnZGF0YXZhbHVlJywgbnYpO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5vbk1heERlZmF1bHRWYWx1ZUNoYW5nZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbWF4cGxhY2Vob2xkZXInOlxuICAgICAgICAgICAgICAgIHRoaXMuc2V0TWF4Rm9ybVdpZGdldCgncGxhY2Vob2xkZXInLCBudik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdyZXF1aXJlZCc6XG4gICAgICAgICAgICAgICAgLy8gV01TLTE4OTA2IDogRG8gbm90IG1ha2UgZm9ybSBhcyBkaXJ0eSBkdXJpbmcgcmVxdWlyZWQgcHJvcCBpbml0aWFsaXphdGlvblxuICAgICAgICAgICAgICAgIGlmIChpc0Zvcm1EaXJ0eSAhPT0gdGhpcy5mb3JtLmRpcnR5KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ21heGNoYXJzJzpcbiAgICAgICAgICAgIGNhc2UgJ21pbnZhbHVlJzpcbiAgICAgICAgICAgIGNhc2UgJ21heHZhbHVlJzpcbiAgICAgICAgICAgIGNhc2UgJ3JlZ2V4cCc6XG4gICAgICAgICAgICBjYXNlICdzaG93JzpcbiAgICAgICAgICAgICAgICB0aGlzLl9kZWJvdW5jZVNldFVwVmFsaWRhdG9ycygpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncHJpbWFyeS1rZXknOlxuICAgICAgICAgICAgICAgIGlmIChudikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uc2V0UHJpbWFyeUtleSh0aGlzLl9maWVsZE5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2Rpc3BsYXktbmFtZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5bmFtZSA9IG52O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncmVhZG9ubHknOlxuICAgICAgICAgICAgICAgdGhpcy5zZXRSZWFkT25seVN0YXRlKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblN0eWxlQ2hhbmdlKGtleSwgbnYsIG92Pykge1xuICAgICAgICB0aGlzLnNldEZvcm1XaWRnZXQoa2V5LCBudik7XG4gICAgICAgIHRoaXMuc2V0TWF4Rm9ybVdpZGdldChrZXksIG52KTtcbiAgICAgICAgc3VwZXIub25TdHlsZUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgfVxuXG4gICAgZ2V0IGRhdGF2YWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybVdpZGdldCAmJiB0aGlzLmZvcm1XaWRnZXQuZGF0YXZhbHVlO1xuICAgIH1cblxuICAgIHNldCBkYXRhdmFsdWUodmFsKSB7XG4gICAgICAgIGlmICh0aGlzLl9jb250cm9sICYmIHRoaXMud2lkZ2V0dHlwZSAhPT0gRm9ybVdpZGdldFR5cGUuVVBMT0FEKSB7XG4gICAgICAgICAgICB0aGlzLl9jb250cm9sLnNldFZhbHVlKHZhbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgdmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGF2YWx1ZTtcbiAgICB9XG5cbiAgICBzZXQgdmFsdWUodmFsKSB7XG4gICAgICAgIHRoaXMuZGF0YXZhbHVlID0gdmFsO1xuICAgIH1cblxuICAgIGdldCBtYXhWYWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybVdpZGdldE1heCAmJiB0aGlzLmZvcm1XaWRnZXRNYXguZGF0YXZhbHVlO1xuICAgIH1cblxuICAgIHNldCBtYXhWYWx1ZSh2YWwpIHtcbiAgICAgICAgaWYgKHRoaXMuX21heENvbnRyb2wpIHtcbiAgICAgICAgICAgIHRoaXMuX21heENvbnRyb2wuc2V0VmFsdWUodmFsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBtaW5WYWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgfVxuXG4gICAgc2V0IG1pblZhbHVlKHZhbCkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsO1xuICAgIH1cblxuICAgIC8vIEdldCB0aGUgcmVhY3RpdmUgZm9ybSBjb250cm9sXG4gICAgZ2V0IF9jb250cm9sKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uZ2Zvcm0gJiYgdGhpcy5uZ2Zvcm0uY29udHJvbHNbdGhpcy5fZmllbGROYW1lXTtcbiAgICB9XG5cbiAgICAvLyBHZXQgdGhlIHJlYWN0aXZlIG1heCBmb3JtIGNvbnRyb2xcbiAgICBnZXQgX21heENvbnRyb2woKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5nZm9ybSAmJiB0aGlzLm5nZm9ybS5jb250cm9sc1t0aGlzLl9maWVsZE5hbWUgKyAnX21heCddO1xuICAgIH1cblxuICAgIC8vIEdldCB0aGUgZGlzcGxheVZhbHVlXG4gICAgZ2V0IGRpc3BsYXlWYWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybVdpZGdldCAmJiB0aGlzLmZvcm1XaWRnZXQuZGlzcGxheVZhbHVlO1xuICAgIH1cblxuICAgIC8vR2V0IHRoZSB0aW1lc3RhbXBcbiAgICBnZXQgdGltZXN0YW1wKCl7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1XaWRnZXQgJiYgdGhpcy5mb3JtV2lkZ2V0LnRpbWVzdGFtcDtcbiAgICB9XG5cbiAgICAvL0dldCB0aGUgY2hhcmxlbmd0aFxuICAgIGdldCBjaGFybGVuZ3RoKCl7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1XaWRnZXQgJiYgdGhpcy5mb3JtV2lkZ2V0LmNoYXJsZW5ndGg7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIHRoZSByZWFjdGl2ZSBmb3JtIGNvbnRyb2xcbiAgICBjcmVhdGVDb250cm9sKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mYi5jb250cm9sKHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgdmFsaWRhdG9yczogdGhpcy5fdmFsaWRhdG9yc1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBPbiBmaWVsZCB2YWx1ZSBjaGFuZ2UsIHByb3BhZ2F0ZSBldmVudCB0byBwYXJlbnQgZm9ybVxuICAgIG9uVmFsdWVDaGFuZ2UodmFsKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0Rlc3Ryb3llZCkge1xuICAgICAgICAgICAgY29uc3QgY2FwdGlvbkVsID0gICQodGhpcy5uYXRpdmVFbGVtZW50KS5maW5kKCcuY2FwdGlvbi1mbG9hdGluZycpO1xuICAgICAgICAgICAgaWYgKGNhcHRpb25FbC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgLy8gaGFzVmFsdWUgY2hlY2sgd2hldGhlciBmb3JtLWZpZWxkIGhhcyBhIHZhbHVlIGZyb20gcGFzc2VkIHZhbCBhdHRyaWJ1dGVcbiAgICAgICAgICAgICAgICAvLyBBZGRlZCBzYW5pdHkgY2hlY2sgb24gdmFsIHRvIHN1cHBvcnQgdmFsdWVzIGxpa2VkIDAsIGZhbHNlIGV0YyBhcyBpbnB1dCB2YWwgLSBXTVMtMjAwODRcbiAgICAgICAgICAgICAgICAvLyBleHBsaWNpdGx5IGNoZWNraW5nIGZvciBpbnB1dCB2YWx1ZSBvciAtd2Via2l0LWF1dG9maWxsIHRvIHNlZSB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgYXV0b2ZpbGxlZCBmaWVsZHMgLSBXTVMtMjAxNDFcblxuICAgICAgICAgICAgICAgIGNvbnN0IGhhc1ZhbHVlID0gKChpc0RlZmluZWQodmFsKSAmJiB2YWwgIT09ICcnICYmIHZhbCAhPT0gbnVsbCkgfHwgY2FwdGlvbkVsLmZpbmQoJ2lucHV0JykudmFsKCkpIHx8IGNhcHRpb25FbC5maW5kKCdpbnB1dDotd2Via2l0LWF1dG9maWxsJykubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5hcHAubm90aWZ5KCdjYXB0aW9uUG9zaXRpb25BbmltYXRlJywge1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5VmFsOiBoYXNWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgbmF0aXZlRWw6IGNhcHRpb25FbCxcbiAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RNdWx0aXBsZTogdGhpcy5mb3JtV2lkZ2V0ICYmIHRoaXMuZm9ybVdpZGdldC5tdWx0aXBsZSxcbiAgICAgICAgICAgICAgICAgICAgaXNGb2N1c2VkOiB0aGlzLl9hY3RpdmVGaWVsZFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAvLyBGaXggZm9yIFtXTVMtMjM5NTldOiBBREEgaXNzdWUgLSBhZGRpbmcgYXJpYS1kZXNjcmliZWRieSwgYXJpYS1pbnZhbGlkLCBfX2Vycm9ybXNnIGF0dHJpYnV0ZXMgb25seSB3aGVuIHRoZSBmb3JtIGZpZWxkIGlzIGludmFsaWQgLCBlbHNlIHJlbW92aW5nIHRoZSBhdHRyaWJ1dGVzXG4gICAgICAgICAgICB0aGlzLnNldEFyaWFBdHRyaWJ1dGVzKCk7XG4gICAgICAgICAgICB0aGlzLmZvcm0ub25GaWVsZFZhbHVlQ2hhbmdlKHRoaXMsIHZhbCk7XG4gICAgICAgICAgICB0aGlzLm5vdGlmeUNoYW5nZXMoKTtcbiAgICAgICAgICAgIC8vIERvIG1hcmsgYXMgdG91Y2hlZCwgb25seSBpbmNhc2Ugd2hlbiB1c2VyIGhhcyBlbnRlcmVkIGFuIGlucHV0IGJ1dCBub3QgdGhyb3VnaCB0aGUgc2NyaXB0LiBIZW5jZSBhZGRlZCBtb3VzZWRvd24gZXZlbnQgY2hlY2tcbiAgICAgICAgICAgIC8vIGFjdGl2ZSBjbGFzcyBjaGVja3Mgd2hldGhlciB1c2VyIGlzIG9uIHRoZSBjdXJyZW50IGZpZWxkLCBpZiBzbyBtYXJraW5nIHRoZSBmaWVsZCBhcyB0b3VjaGVkLiBBbmQgZm9ybSBmaWVsZCB2YWxpZGF0aW9uIGhhcHBlbnMgb25jZSBhIGZpZWxkIGlzIHRvdWNoZWRcbiAgICAgICAgICAgIC8vIF90cmlnZ2VyZWRCeVVzZXIgY2hlY2tzIHdoZXRoZXIgdGhlIGZpZWxkIGlzIHRvdWNoZWQgYnkgdGhlIHVzZXIgb3IgdHJpZ2dlcmVkIGZyb20gZXh0ZXJuYWwgc2NyaXB0XG4gICAgICAgICAgICAvLyBXTVMtMjI0NTY6IF9jbGlja3RyaWdnZXJlZEJ5VXNlciBjaGVja3Mgd2hlbiB1c2VyIHNlbGVjdHMgZGF0ZXRpbWV0eXBlIGZyb20gcGlja2VyLCBtYXJrIHRoZSBmaWVsZCBhcyB0b3VjaGVkIHRvIHNob3cgdmFsaWRhdGlvbiBlcnJvcnMgaW4gbW9iaWxlXG5cbiAgICAgICAgICAgIGlmICh0aGlzLiRlbGVtZW50LmZpbmQoJy5hY3RpdmUnKS5sZW5ndGggPiAwIHx8IHRoaXMuZm9ybS50b3VjaGVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RyaWdnZXJlZEJ5VXNlciB8fCAoaXNNb2JpbGUoKSAmJiB0aGlzLl9jbGlja3RyaWdnZXJlZEJ5VXNlciAmJiBpc0RhdGVUaW1lVHlwZSh0aGlzLndpZGdldHR5cGUpKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5nZm9ybS5jb250cm9sc1t0aGlzLl9maWVsZE5hbWVdLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5maWVsZFZhbGlkYXRpb25zLnNldEN1c3RvbVZhbGlkYXRpb25NZXNzYWdlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblN0YXR1c0NoYW5nZShzdGF0dXMpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRGVzdHJveWVkKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dQZW5kaW5nU3Bpbm5lciA9IChzdGF0dXMgPT09ICdQRU5ESU5HJyk7XG4gICAgICAgICAgICAvLyB3aGlsZSBydW5uaW5nIHZhbGlkYXRpb24sIHdpZGdldCBpcyBkaXNhYmxlZCBhbmQgc3Bpbm5lciBpcyBzaG93blxuICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGZvcm1XaWRnZXQgZGlzYWJsZWQgc3RhdGUgaXMgcmVzZXQgdG8gdGhlIHN0YXRlIG9mIHRoZSBmb3JtRmllbGQuXG4gICAgICAgICAgICBpZiAoc3RhdHVzID09PSAnUEVORElORycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1XaWRnZXQuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmZvcm1XaWRnZXQuZGlzYWJsZWQgIT09ICh0aGlzIGFzIGFueSkuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1XaWRnZXQuZGlzYWJsZWQgPSAodGhpcyBhcyBhbnkpLmRpc2FibGVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTWV0aG9kIHRvIGV4cG9zZSB2YWxpZGF0aW9uIG1lc3NhZ2UgYW5kIHNldCBjb250cm9sIHRvIGludmFsaWRcbiAgICBzZXRWYWxpZGF0aW9uTWVzc2FnZSh2YWwpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25tZXNzYWdlID0gdmFsO1xuICAgICAgICAgICAgdGhpcy5zZXRVcFZhbGlkYXRvcnMoY3VzdG9tVmFsaWRhdG9yRm4pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzZXRSZWFkT25seVN0YXRlKCkge1xuICAgICAgICBsZXQgcmVhZE9ubHk7XG4gICAgICAgIGlmICh0aGlzLmZvcm0uaXNVcGRhdGVNb2RlKSB7XG4gICAgICAgICAgICBpZiAodGhpc1sncHJpbWFyeS1rZXknXSAmJiAhdGhpc1snaXMtcmVsYXRlZCddICYmICF0aGlzLnBlcmlvZCkge1xuICAgICAgICAgICAgICAgIC8qSWYgdGhlIGZpZWxkIGlzIHByaW1hcnkgYnV0IGlzIGFzc2lnbmVkIHNldCByZWFkb25seSBmYWxzZS5cbiAgICAgICAgICAgICAgICAgICBBc3NpZ25lZCBpcyB3aGVyZSB0aGUgdXNlciBpbnB1dHMgdGhlIHZhbHVlIHdoaWxlIGEgbmV3IGVudHJ5LlxuICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgbm90IGVkaXRhYmxlKGluIHVwZGF0ZSBtb2RlKSBvbmNlIGVudHJ5IGlzIHN1Y2Nlc3NmdWwqL1xuICAgICAgICAgICAgICAgIHJlYWRPbmx5ID0gISh0aGlzLmdlbmVyYXRvciA9PT0gJ2Fzc2lnbmVkJyAmJiB0aGlzLmZvcm0ub3BlcmF0aW9uVHlwZSAhPT0gJ3VwZGF0ZScpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZWFkT25seSA9IHRoaXMucmVhZG9ubHk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJbiB2aWV3IG1vZGUsIHNldCB3aWRnZXQgc3RhdGUgdG8gcmVhZG9ubHkgYWx3YXlzXG4gICAgICAgICAgICByZWFkT25seSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmVhZE9ubHkgPSByZWFkT25seSB8fCB0aGlzLmZvcm0ucmVhZG9ubHk7XG4gICAgICAgIHRoaXMuc2V0Rm9ybVdpZGdldCgncmVhZG9ubHknLCByZWFkT25seSk7XG4gICAgfVxuXG4gICAgcmVzZXREaXNwbGF5SW5wdXQoKSB7XG4gICAgICAgIGlmICgoIWlzRGVmaW5lZCh0aGlzLnZhbHVlKSB8fCB0aGlzLnZhbHVlID09PSAnJykpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybVdpZGdldCAmJiB0aGlzLmZvcm1XaWRnZXQucmVzZXREaXNwbGF5SW5wdXQgJiYgdGhpcy5mb3JtV2lkZ2V0LnJlc2V0RGlzcGxheUlucHV0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXNldCgpIHtcbiAgICAgIGlmKHRoaXMuX2NvbnRyb2wpXG4gICAgICAgIHRoaXMuX2NvbnRyb2wucmVzZXQoKTtcbiAgICB9XG5cbiAgICB0cmlnZ2VyVXBsb2FkRXZlbnQoJGV2ZW50LCBldmVudE5hbWUpIHtcbiAgICAgICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7ICRldmVudCB9O1xuICAgICAgICBpZiAoZXZlbnROYW1lID09PSAnY2hhbmdlJykge1xuICAgICAgICAgICAgcGFyYW1zLm5ld1ZhbCA9ICRldmVudC50YXJnZXQuZmlsZXM7XG4gICAgICAgICAgICBwYXJhbXMub2xkVmFsID0gdGhpcy5fb2xkVXBsb2FkVmFsO1xuICAgICAgICAgICAgdGhpcy5fb2xkVXBsb2FkVmFsID0gcGFyYW1zLm5ld1ZhbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soZXZlbnROYW1lLCBwYXJhbXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVnaXN0ZXJGb3JtRmllbGQoKSB7XG5cbiAgICAgICAgY29uc3QgZmllbGROYW1lID0gdGhpcy5fZmllbGROYW1lO1xuXG4gICAgICAgIGlmICh0aGlzLnBhcmVudExpc3QgJiYgISh0aGlzLmZvcm0ucGFyZW50TGlzdCA9PT0gdGhpcy5wYXJlbnRMaXN0KSkge1xuICAgICAgICAgICAgbGV0IGNvdW50ZXIgPSAxO1xuICAgICAgICAgICAgbGV0IF9maWVsZE5hbWUgPSBmaWVsZE5hbWU7XG4gICAgICAgICAgICB3aGlsZSAodGhpcy5uZ2Zvcm0uY29udHJvbHMuaGFzT3duUHJvcGVydHkoX2ZpZWxkTmFtZSkpIHtcbiAgICAgICAgICAgICAgICBfZmllbGROYW1lID0gYCR7ZmllbGROYW1lfV8ke2NvdW50ZXJ9YDtcbiAgICAgICAgICAgICAgICBjb3VudGVyKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm5nZm9ybS5hZGRDb250cm9sKF9maWVsZE5hbWUsIHRoaXMuY3JlYXRlQ29udHJvbCgpKTtcbiAgICAgICAgICAgIHRoaXMuX2ZpZWxkTmFtZSA9IF9maWVsZE5hbWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm5nZm9ybS5hZGRDb250cm9sKGZpZWxkTmFtZSwgdGhpcy5jcmVhdGVDb250cm9sKCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9uVmFsdWVDaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLl9jb250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDIwMCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHRoaXMub25WYWx1ZUNoYW5nZS5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcigoKSA9PiBvblZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpO1xuXG4gICAgICAgIGNvbnN0IG9uU3RhdHVzQ2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy5fY29udHJvbC5zdGF0dXNDaGFuZ2VzXG4gICAgICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMTAwKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUodGhpcy5vblN0YXR1c0NoYW5nZS5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcigoKSA9PiBvblN0YXR1c0NoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpKTtcblxuICAgICAgICBpZiAodGhpcy5pc1JhbmdlID09PSAndHJ1ZScpIHtcbiAgICAgICAgICAgIHRoaXMubmdmb3JtLmFkZENvbnRyb2woZmllbGROYW1lICsgJ19tYXgnLCB0aGlzLmNyZWF0ZUNvbnRyb2woKSk7XG4gICAgICAgICAgICAvLyByZWdpc3RlcmluZyBmb3IgdmFsdWVDaGFuZ2VzIG9uIE1heGZvcm1XaWRnZXRcbiAgICAgICAgICAgIGNvbnN0IG9uTWF4VmFsdWVDaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLl9tYXhDb250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSgyMDApKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUodGhpcy5vblZhbHVlQ2hhbmdlLmJpbmQodGhpcykpO1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcigoKSA9PiBvbk1heFZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsdWUgPSBnZXQodGhpcy5mb3JtLmZvcm1kYXRhLCB0aGlzLl9maWVsZE5hbWUpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLm5nZm9ybSA9IHRoaXMuZm9ybS5uZ2Zvcm07XG4gICAgICAgIHRoaXMucmVnaXN0ZXJGb3JtRmllbGQoKTtcbiAgICAgICAgLy8gSW5zdGFudGlhdGUgY3VzdG9tIHZhbGlkYXRvcnMgY2xhc3MgZm9yIGZvcm0gZmllbGRcbiAgICAgICAgdGhpcy5maWVsZFZhbGlkYXRpb25zID0gbmV3IEJhc2VGaWVsZFZhbGlkYXRpb25zKHRoaXMsIHRoaXMuZm9ybVdpZGdldCwgdGhpcy53aWRnZXR0eXBlLCB0aGlzLl9jb250cm9sLCB0aGlzLmZvcm0pO1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIH1cblxuICAgIHByZXBhcmVGb3JtV2lkZ2V0KCkge1xuICAgICAgICB0aGlzLl9pbml0UHJvcHNSZXMoKTtcblxuICAgICAgICAvLyBzZXR0aW5nIGRpc3BsYXlFeHByZXNzaW9ucyBvbiB0aGUgZm9ybXdpZGdldCBleHBsaWNpdGx5IGFzIGV4cHIgd2FzIGV2YWx1YXRlZCB0byBcIlwiLlxuICAgICAgICB0aGlzLnNldEZvcm1XaWRnZXQoJ2JpbmRkaXNwbGF5bGFiZWwnLCB0aGlzLmJpbmRkaXNwbGF5bGFiZWwpO1xuICAgICAgICB0aGlzLnNldEZvcm1XaWRnZXQoJ2JpbmRkaXNwbGF5ZXhwcmVzc2lvbicsIHRoaXMuYmluZGRpc3BsYXlleHByZXNzaW9uKTtcbiAgICAgICAgdGhpcy5zZXRGb3JtV2lkZ2V0KCdiaW5kZGlzcGxheWltYWdlc3JjJywgdGhpcy5iaW5kZGlzcGxheWltYWdlc3JjKTtcbiAgICAgICAgdGhpcy5zZXRGb3JtV2lkZ2V0KCdiaW5kQ2hpcGNsYXNzJywgdGhpcy5iaW5kQ2hpcGNsYXNzKTtcbiAgICAgICAgdGhpcy5zZXRGb3JtV2lkZ2V0KCdiaW5kZGF0YXNldCcsIHRoaXMuYmluZGRhdGFzZXQpO1xuXG4gICAgICAgIHRoaXMucmVnaXN0ZXJSZWFkeVN0YXRlTGlzdGVuZXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5rZXkgPSB0aGlzLl9maWVsZE5hbWUgfHwgdGhpcy50YXJnZXQgfHwgdGhpcy5iaW5kaW5nO1xuICAgICAgICAgICAgdGhpcy52aWV3bW9kZXdpZGdldCA9IHRoaXMudmlld21vZGV3aWRnZXQgfHwgZ2V0RGVmYXVsdFZpZXdNb2RlV2lkZ2V0KHRoaXMud2lkZ2V0dHlwZSk7XG5cbiAgICAgICAgICAgIC8vIEZvciB1cGxvYWQgd2lkZ2V0LCBnZW5lcmF0ZSB0aGUgcGVybWl0dGVkIGZpZWxkXG4gICAgICAgICAgICBpZiAodGhpcy53aWRnZXR0eXBlID09PSBGb3JtV2lkZ2V0VHlwZS5VUExPQUQpIHtcbiAgICAgICAgICAgICAgICBsZXQgZmlsZVR5cGU7XG4gICAgICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBhY2NlcHRzIHN0cmluZyBmcm9tIGZpbGUgdHlwZSBhbmQgZXh0ZW5zaW9uc1xuICAgICAgICAgICAgICAgIGZpbGVUeXBlID0gdGhpcy5maWxldHlwZSA/IEZJTEVfVFlQRVNbdGhpcy5maWxldHlwZV0gOiAnJztcbiAgICAgICAgICAgICAgICB0aGlzLnBlcm1pdHRlZCA9IGZpbGVUeXBlICsgKHRoaXMuZXh0ZW5zaW9ucyA/IChmaWxlVHlwZSA/ICcsJyA6ICcnKSArIHRoaXMuZXh0ZW5zaW9ucyA6ICcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc01vYmlsZSgpICYmIHRoaXMudmlld3BvcnQuaXNNb2JpbGVUeXBlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzWydtb2JpbGUtZGlzcGxheSddKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2lkZ2V0LnNob3cgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmlld3BvcnQuaXNUYWJsZXRUeXBlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzWyd0YWJsZXQtZGlzcGxheSddKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2lkZ2V0LnNob3cgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghdGhpc1sncGMtZGlzcGxheSddKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2lkZ2V0LnNob3cgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZmllbGREZWZDb25maWcuZGlzcGxhbmFtZSA9IHRoaXMuZGlzcGxheW5hbWU7XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmQ29uZmlnLnNob3cgPSB0aGlzLnNob3c7XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmQ29uZmlnLmlzUmVsYXRlZCA9IHRoaXNbJ2lzLXJlbGF0ZWQnXTtcbiAgICAgICAgICAgIHRoaXMuZmllbGREZWZDb25maWcuaW5wdXR0eXBlID0gdGhpcy5pbnB1dHR5cGU7XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmQ29uZmlnLmdlbmVyYXRvciA9IHRoaXMuZ2VuZXJhdG9yO1xuICAgICAgICAgICAgdGhpcy5maWVsZERlZkNvbmZpZy5wbGFjZWhvbGRlciA9IHRoaXMucGxhY2Vob2xkZXI7XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmQ29uZmlnLnByaW1hcnlLZXkgPSB0aGlzWydwcmltYXJ5LWtleSddO1xuICAgICAgICAgICAgdGhpcy5maWVsZERlZkNvbmZpZy5yZXF1aXJlZCA9IHRoaXMucmVxdWlyZWQ7XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmQ29uZmlnLl9yZWFkb25seSA9IHRoaXMucmVhZG9ubHk7XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmQ29uZmlnLnJlZ2V4cCA9IHRoaXMucmVnZXhwO1xuICAgICAgICAgICAgdGhpcy5maWVsZERlZkNvbmZpZy50eXBlID0gdGhpcy50eXBlO1xuICAgICAgICAgICAgdGhpcy5maWVsZERlZkNvbmZpZy5rZXkgPSB0aGlzLmtleTtcbiAgICAgICAgICAgIHRoaXMuZmllbGREZWZDb25maWcubW9iaWxlRGlzcGxheSA9IHRoaXNbJ21vYmlsZS1kaXNwbGF5J107XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmQ29uZmlnLm5hbWUgPSB0aGlzLm5hbWU7XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmQ29uZmlnLnBjRGlzcGxheSA9IHRoaXNbJ3BjLWRpc3BsYXknXTtcbiAgICAgICAgICAgIHRoaXMuZmllbGREZWZDb25maWcudGFibGV0RGlzcGxheSA9IHRoaXNbJ3RhYmxldC1kaXNwbGF5J107XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmQ29uZmlnLnZhbGlkYXRpb25tZXNzYWdlID0gdGhpcy52YWxpZGF0aW9ubWVzc2FnZTtcbiAgICAgICAgICAgIHRoaXMuZmllbGREZWZDb25maWcudmlld21vZGV3aWRnZXQgPSB0aGlzLnZpZXdtb2Rld2lkZ2V0O1xuICAgICAgICAgICAgdGhpcy5maWVsZERlZkNvbmZpZy53aWRnZXQgPSB0aGlzLndpZGdldHR5cGU7XG5cbiAgICAgICAgICAgIC8vIFJlZ2lzdGVyIHRoZSBmb3JtIGZpZWxkIHdpdGggcGFyZW50IGZvcm1cbiAgICAgICAgICAgIHRoaXMuZm9ybS5yZWdpc3RlckZvcm1GaWVsZHModGhpcy53aWRnZXQpO1xuXG4gICAgICAgICAgICBhZGRGb3JJZEF0dHJpYnV0ZXModGhpcy5uYXRpdmVFbGVtZW50KTtcblxuICAgICAgICAgICAgdGhpcy5zZXRSZWFkT25seVN0YXRlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdBZnRlckNvbnRlbnRJbml0KCk7XG4gICAgICAgIGlmKHRoaXMud2lkZ2V0U3ViVHlwZSA9PT0gXCJ3bS1mb3JtLWZpZWxkLWN1c3RvbS13aWRnZXRcIiAmJiB0aGlzLmZvcm1XaWRnZXQubmF0aXZlRWxlbWVudClcbiAgICAgICAgICAgIHRoaXMuZm9ybVdpZGdldCA9IHRoaXMuZm9ybVdpZGdldC5uYXRpdmVFbGVtZW50LndpZGdldDtcbiAgICAgICAgaWYgKHRoaXMuZm9ybVdpZGdldCkge1xuICAgICAgICAgICAgaWYodGhpcy53aWRnZXRTdWJUeXBlID09PSBcIndtLWZvcm0tZmllbGQtY3VzdG9tLXdpZGdldFwiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtV2lkZ2V0LmNvbmZpZ1N1YmplY3QuYXNPYnNlcnZhYmxlKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmVwYXJlRm9ybVdpZGdldCgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXBhcmVGb3JtV2lkZ2V0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBEZXN0cm95IEJhc2VGaWVsZFZhbGlkYXRpb25zIGluc3RhbmNlXG4gICAgICAgIGlmICh0aGlzLmZpZWxkVmFsaWRhdGlvbnMpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWVsZFZhbGlkYXRpb25zLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAvLyBTaWxlbnRseSBoYW5kbGUgY2xlYW51cCBlcnJvcnNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZmllbGRWYWxpZGF0aW9ucyA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNRU1PUlkgTEVBSyBGSVg6IENsZWFyIG5vdGlmeUZvckZpZWxkcyBhcnJheVxuICAgICAgICBpZiAodGhpcy5ub3RpZnlGb3JGaWVsZHMpIHtcbiAgICAgICAgICAgIHRoaXMubm90aWZ5Rm9yRmllbGRzID0gW107XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNRU1PUlkgTEVBSyBGSVg6IE51bGxpZnkgZGVib3VuY2VkIGZ1bmN0aW9uIGNsb3N1cmVcbiAgICAgICAgdGhpcy5fZGVib3VuY2VTZXRVcFZhbGlkYXRvcnMgPSBudWxsO1xuXG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogQ2xlYXIgZm9ybSB3aWRnZXQgcmVmZXJlbmNlc1xuICAgICAgICB0aGlzLmZvcm1XaWRnZXQgPSBudWxsO1xuICAgICAgICB0aGlzLmZvcm1XaWRnZXRNYXggPSBudWxsO1xuXG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogQ2xlYXIgZmllbGQgZGVmaW5pdGlvbiBjb25maWdcbiAgICAgICAgaWYgKHRoaXMuZmllbGREZWZDb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuZmllbGREZWZDb25maWcgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENhbGwgcGFyZW50IG5nT25EZXN0cm95IChTdHlsYWJsZUNvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQgd2hpY2ggaGFzIGNsZWFudXApXG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgfVxufVxuIl19
612
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvZGF0YS9mb3JtL3NyYy9mb3JtLWZpZWxkL2Zvcm0tZmllbGQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLFFBQVEsRUFHUixRQUFRLEVBQ1IsSUFBSSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxXQUFXLEVBQWEsaUJBQWlCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUMsT0FBTyxFQUNILGtCQUFrQixFQUNsQixHQUFHLEVBQ0gsUUFBUSxFQUNSLGNBQWMsRUFDZCxjQUFjLEVBQ2QsU0FBUyxFQUNULFFBQVEsRUFDUixJQUFJLEVBQ0osUUFBUSxFQUNYLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFDSCxvQkFBb0IsRUFDcEIsT0FBTyxFQUNQLHdCQUF3QixFQUN4QixnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULGtCQUFrQixFQUNsQixpQkFBaUIsRUFDcEIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFFdkQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRCxPQUFPLEVBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBQyxNQUFNLFdBQVcsQ0FBQzs7Ozs7O0FBSWhFLG9GQUFvRjtBQUNwRixNQUFNLGlCQUFpQixHQUFHLEdBQUcs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UzsyQkFBQyxtQkFBbUI7OzBCQUM3QixTQUFTOzJCQUFDLFlBQVk7OzBCQUN0QixTQUFTOzJCQUFDLE1BQU07OzBCQUNoQixTQUFTOzJCQUFDLHNCQUFzQjs7MEJBQ2hDLFNBQVM7MkJBQUMsS0FBSzs7MEJBQ2YsU0FBUzsyQkFBQyxVQUFVOzswQkFDcEIsU0FBUzsyQkFBQyxZQUFZOzswQkFDdEIsU0FBUzsyQkFBQyxnQkFBZ0I7OzBCQUMxQixTQUFTOzJCQUFDLGdCQUFnQjs7MEJBQzFCLElBQUk7OzBCQUFJLE1BQU07MkJBQUMsT0FBTzs7MEJBQ3RCLE1BQU07MkJBQUMsa0JBQWtCOzswQkFBRyxRQUFRO3lDQTlGRyxVQUFVO3NCQUFyRCxZQUFZO3VCQUFDLFlBQVksRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBQ1gsYUFBYTtzQkFBM0MsWUFBWTt1QkFBQyxlQUFlO2dCQWdFUSxnQkFBZ0I7c0JBQXBELFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQUlBLFdBQVc7c0JBQTdDLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIEF0dHJpYnV0ZSxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgRGlyZWN0aXZlLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbmplY3QsXG4gICAgSW5qZWN0b3IsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBTZWxmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBOR19WQUxVRV9BQ0NFU1NPUn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQge2RlYm91bmNlVGltZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge1xuICAgIGFkZEZvcklkQXR0cmlidXRlcyxcbiAgICBBcHAsXG4gICAgZGVib3VuY2UsXG4gICAgRm9ybVdpZGdldFR5cGUsXG4gICAgaXNEYXRlVGltZVR5cGUsXG4gICAgaXNEZWZpbmVkLFxuICAgIGlzTW9iaWxlLFxuICAgIG5vb3AsXG4gICAgVmlld3BvcnRcbn0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBCYXNlRmllbGRWYWxpZGF0aW9ucyxcbiAgICBDb250ZXh0LFxuICAgIGdldERlZmF1bHRWaWV3TW9kZVdpZGdldCxcbiAgICBnZXRFdmFsdWF0ZWREYXRhLFxuICAgIHByb3ZpZGVBcyxcbiAgICBwcm92aWRlQXNXaWRnZXRSZWYsXG4gICAgU3R5bGFibGVDb21wb25lbnRcbn0gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzZSc7XG5pbXBvcnQge0xpc3RDb21wb25lbnR9IGZyb20gJ0B3bS9jb21wb25lbnRzL2RhdGEvbGlzdCc7XG5cbmltcG9ydCB7cmVnaXN0ZXJQcm9wc30gZnJvbSAnLi9mb3JtLWZpZWxkLnByb3BzJztcbmltcG9ydCB7Rm9ybUNvbXBvbmVudH0gZnJvbSAnLi4vZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHtmb3JFYWNoLCBnZXQsIGlzQXJyYXksIGlzT2JqZWN0LCBqb2lufSBmcm9tIFwibG9kYXNoLWVzXCI7XG5cbmRlY2xhcmUgY29uc3QgJDtcblxuLy8gQ3VzdG9tIHZhbGlkYXRvciB0byBzaG93IHZhbGlkYXRpb24gZXJyb3IsIGlmIHNldFZhbGlkYXRpb25NZXNzYWdlIG1ldGhvZCBpcyB1c2VkXG5jb25zdCBjdXN0b21WYWxpZGF0b3JGbiA9ICgpID0+IHtcbiAgICByZXR1cm4geyBjdXN0b206IHRydWUgfTtcbn07XG5cbmNvbnN0IEZJTEVfVFlQRVMgPSB7XG4gICAgJ2ltYWdlJyA6ICdpbWFnZS8qJyxcbiAgICAndmlkZW8nIDogJ3ZpZGVvLyonLFxuICAgICdhdWRpbycgOiAnYXVkaW8vKidcbn07XG5cbkBEaXJlY3RpdmUoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnW3dtRm9ybUZpZWxkXScsXG4gICAgZXhwb3J0QXM6ICd3bUZvcm1GaWVsZCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHByb3ZpZGVBc1dpZGdldFJlZihGb3JtRmllbGREaXJlY3RpdmUpLFxuICAgICAgICBwcm92aWRlQXMoRm9ybUZpZWxkRGlyZWN0aXZlLCBOR19WQUxVRV9BQ0NFU1NPUiwgdHJ1ZSksXG4gICAgICAgIHtwcm92aWRlOiBDb250ZXh0LCB1c2VGYWN0b3J5OiAoKSA9PiB7IHJldHVybiB7fSB9LCBtdWx0aTogdHJ1ZX1cbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1GaWVsZERpcmVjdGl2ZSBleHRlbmRzIFN0eWxhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3kge1xuICAgIHN0YXRpYyBpbml0aWFsaXplUHJvcHMgPSByZWdpc3RlclByb3BzKCk7XG5cbiAgICBAQ29udGVudENoaWxkKCdmb3JtV2lkZ2V0Jywge3N0YXRpYzogdHJ1ZX0pIGZvcm1XaWRnZXQ7XG4gICAgQENvbnRlbnRDaGlsZCgnZm9ybVdpZGdldE1heCcpIGZvcm1XaWRnZXRNYXg7XG5cbiAgICBwcml2YXRlIGZiO1xuICAgIHByaXZhdGUgdmlld3BvcnQ7XG5cbiAgICAvLyBleGNsdWRlUHJvcHMgaXMgdXNlZCB0byBzdG9yZSB0aGUgcHJvcHMgdGhhdCBzaG91bGQgbm90IGJlIGFwcGxpZWQgb24gaW5uZXIgd2lkZ2V0XG4gICAgcHJpdmF0ZSBleGNsdWRlUHJvcHM7XG4gICAgcHJpdmF0ZSBfdmFsaWRhdG9ycztcbiAgICBwcml2YXRlIF9vbGRVcGxvYWRWYWw7XG5cbiAgICBuZ2Zvcm06IEZvcm1Hcm91cDtcbiAgICBkZWZhdWx0dmFsdWU7XG4gICAgZGlzcGxheWV4cHJlc3Npb247XG4gICAgZGlzcGxheWZpZWxkO1xuICAgIGRpc3BsYXlsYWJlbDtcbiAgICBkaXNwbGF5bmFtZTtcbiAgICBnZW5lcmF0b3I7XG4gICAga2V5O1xuICAgIHRhcmdldDtcbiAgICBiaW5kaW5nO1xuICAgIHdpZGdldHR5cGU7XG4gICAgY2xhc3M7XG4gICAgcmVhZG9ubHk7XG4gICAgc2hvdztcbiAgICB0eXBlO1xuICAgIGlzRGF0YVNldEJvdW5kO1xuICAgIHZpZXdtb2Rld2lkZ2V0O1xuICAgIGJpbmRkYXRhc2V0O1xuICAgIGJpbmRkaXNwbGF5ZXhwcmVzc2lvbjtcbiAgICBiaW5kQ2hpcGNsYXNzO1xuICAgIGRpc3BsYXlpbWFnZXNyYzogc3RyaW5nO1xuICAgIGJpbmRkaXNwbGF5aW1hZ2VzcmM7XG4gICAgYmluZGRpc3BsYXlsYWJlbDtcbiAgICBmb3JtO1xuICAgIGZpbGV0eXBlO1xuICAgIGV4dGVuc2lvbnM7XG4gICAgcGVybWl0dGVkO1xuICAgIHBlcmlvZDtcbiAgICBpc1JhbmdlO1xuICAgIG5hbWU7XG4gICAgLy8gVmFsaWRhdGlvbiBwcm9wZXJ0aWVzXG4gICAgcmVxdWlyZWQ7XG4gICAgbWF4Y2hhcnM7XG4gICAgbWludmFsdWU7XG4gICAgbWF4dmFsdWU7XG4gICAgcmVnZXhwO1xuICAgIGZpZWxkRGVmQ29uZmlnO1xuICAgIHBsYWNlaG9sZGVyO1xuICAgIGlucHV0dHlwZTtcbiAgICB2YWxpZGF0aW9ubWVzc2FnZTtcblxuICAgIHB1YmxpYyBfZmllbGROYW1lO1xuXG4gICAgcHJpdmF0ZSBfZGVib3VuY2VTZXRVcFZhbGlkYXRvcnM7XG4gICAgcHJpdmF0ZSBfaW5pdFByb3BzUmVzO1xuICAgIHByaXZhdGUgcGFyZW50TGlzdDtcbiAgICBwcml2YXRlIHNob3dQZW5kaW5nU3Bpbm5lcjogYm9vbGVhbjtcbiAgICBwcml2YXRlIF9hY3RpdmVGaWVsZDogYm9vbGVhbjtcbiAgICBwcml2YXRlIG5vdGlmeUZvckZpZWxkczogYW55O1xuICAgIHByaXZhdGUgZmllbGRWYWxpZGF0aW9ucztcbiAgICBwcml2YXRlIF90cmlnZ2VyZWRCeVVzZXI6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBfY2xpY2t0cmlnZ2VyZWRCeVVzZXI6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBhcHA6IEFwcDtcblxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKSBvbktleWRvd25IYW5kbGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIHRoaXMuX3RyaWdnZXJlZEJ5VXNlciA9IHRydWU7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKSBoYW5kbGVDbGljayhldmVudCkge1xuICAgICAgICB0aGlzLl9jbGlja3RyaWdnZXJlZEJ5VXNlciA9IHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0ZvY3VzZWQ7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGluajogSW5qZWN0b3IsXG4gICAgICAgIGZvcm06IEZvcm1Db21wb25lbnQsXG4gICAgICAgIGZiOiBGb3JtQnVpbGRlcixcbiAgICAgICAgdmlld3BvcnQ6IFZpZXdwb3J0LFxuICAgICAgICBhcHA6IEFwcCxcbiAgICAgICAgQE9wdGlvbmFsKCkgcGFyZW50TGlzdDogTGlzdENvbXBvbmVudCxcbiAgICAgICAgQEF0dHJpYnV0ZSgnY2hpcGNsYXNzLmJpbmQnKSBiaW5kQ2hpcGNsYXNzOiBzdHJpbmcsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2RhdGFzZXQuYmluZCcpIGJpbmRkYXRhc2V0LFxuICAgICAgICBAQXR0cmlidXRlKCdkaXNwbGF5ZXhwcmVzc2lvbi5iaW5kJykgYmluZGRpc3BsYXlleHByZXNzaW9uOiBzdHJpbmcsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2Rpc3BsYXlsYWJlbC5iaW5kJykgYmluZGRpc3BsYXlsYWJlbDogc3RyaW5nLFxuICAgICAgICBAQXR0cmlidXRlKCd3aWRnZXR0eXBlJykgX3dpZGdldFR5cGUsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ25hbWUnKSBuYW1lLFxuICAgICAgICBAQXR0cmlidXRlKCdkaXNwbGF5aW1hZ2VzcmMuYmluZCcpIGJpbmRkaXNwbGF5aW1hZ2VzcmM6IFN0cmluZyxcbiAgICAgICAgQEF0dHJpYnV0ZSgna2V5Jykga2V5LFxuICAgICAgICBAQXR0cmlidXRlKCdpcy1yYW5nZScpIGlzUmFuZ2UsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ3BjLWRpc3BsYXknKSBwY0Rpc3BsYXksXG4gICAgICAgIEBBdHRyaWJ1dGUoJ21vYmlsZS1kaXNwbGF5JykgbW9iaWxlRGlzcGxheSxcbiAgICAgICAgQEF0dHJpYnV0ZSgndGFibGV0LWRpc3BsYXknKSB0YWJsZXREaXNwbGF5LFxuICAgICAgICBAU2VsZigpIEBJbmplY3QoQ29udGV4dCkgY29udGV4dHM6IEFycmF5PGFueT4sXG4gICAgICAgIEBJbmplY3QoJ0VYUExJQ0lUX0NPTlRFWFQnKSBAT3B0aW9uYWwoKSBleHBsaWNpdENvbnRleHQ6IGFueVxuICAgICkge1xuICAgICAgICBjb25zdCBXSURHRVRfQ09ORklHID0ge1xuICAgICAgICAgICAgd2lkZ2V0VHlwZTogJ3dtLWZvcm0tZmllbGQnLFxuICAgICAgICAgICAgaG9zdENsYXNzOiAnJyxcbiAgICAgICAgICAgIHdpZGdldFN1YlR5cGU6ICd3bS1mb3JtLWZpZWxkLScgKyAoX3dpZGdldFR5cGUgfHwgRm9ybVdpZGdldFR5cGUuVEVYVCkudHJpbSgpXG4gICAgICAgIH07XG4gICAgICAgIGxldCByZXNvbHZlRm46IEZ1bmN0aW9uID0gbm9vcDtcblxuICAgICAgICBzdXBlcihpbmosIFdJREdFVF9DT05GSUcsIGV4cGxpY2l0Q29udGV4dCwgbmV3IFByb21pc2UocmVzID0+IHJlc29sdmVGbiA9IHJlcykpO1xuICAgICAgICB0aGlzLl9pbml0UHJvcHNSZXMgPSByZXNvbHZlRm47XG4gICAgICAgIHRoaXMuYXBwID0gYXBwO1xuICAgICAgICB0aGlzLmZpZWxkRGVmQ29uZmlnID0ge307XG4gICAgICAgIHRoaXMuY2xhc3MgPSAnJztcbiAgICAgICAgdGhpcy5iaW5kZGF0YXNldCA9IGJpbmRkYXRhc2V0O1xuICAgICAgICB0aGlzLmJpbmRkaXNwbGF5aW1hZ2VzcmMgPSBiaW5kZGlzcGxheWltYWdlc3JjO1xuICAgICAgICB0aGlzLmJpbmRkaXNwbGF5ZXhwcmVzc2lvbiA9IGJpbmRkaXNwbGF5ZXhwcmVzc2lvbjtcbiAgICAgICAgdGhpcy5iaW5kQ2hpcGNsYXNzID0gYmluZENoaXBjbGFzcztcbiAgICAgICAgdGhpcy5iaW5kZGlzcGxheWxhYmVsID0gYmluZGRpc3BsYXlsYWJlbDtcbiAgICAgICAgdGhpcy5mb3JtID0gZm9ybTtcbiAgICAgICAgdGhpcy5mYiA9IGZiO1xuICAgICAgICB0aGlzLnZpZXdwb3J0ID0gdmlld3BvcnQ7XG4gICAgICAgIHRoaXMuX2ZpZWxkTmFtZSA9IGtleSB8fCBuYW1lO1xuICAgICAgICB0aGlzLmlzUmFuZ2UgPSBpc1JhbmdlO1xuICAgICAgICB0aGlzLmV4Y2x1ZGVQcm9wcyA9IG5ldyBTZXQoWyd0eXBlJywgJ25hbWUnXSk7XG4gICAgICAgIHRoaXMud2lkZ2V0dHlwZSA9IF93aWRnZXRUeXBlO1xuICAgICAgICB0aGlzLnBhcmVudExpc3QgPSBwYXJlbnRMaXN0O1xuICAgICAgICB0aGlzLm5vdGlmeUZvckZpZWxkcyA9IFtdO1xuXG4gICAgICAgIGlmICh0aGlzLmJpbmRkYXRhc2V0IHx8IHRoaXMuJGVsZW1lbnQuYXR0cignZGF0YXNldCcpKSB7XG4gICAgICAgICAgICB0aGlzLmlzRGF0YVNldEJvdW5kID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHRzWzBdLl9vbkZvY3VzRmllbGQgPSB0aGlzLl9vbkZvY3VzRmllbGQuYmluZCh0aGlzKTtcbiAgICAgICAgY29udGV4dHNbMF0uX29uQmx1ckZpZWxkID0gdGhpcy5fb25CbHVyRmllbGQuYmluZCh0aGlzKTtcblxuICAgICAgICB0aGlzLl9kZWJvdW5jZVNldFVwVmFsaWRhdG9ycyA9IGRlYm91bmNlKCgpID0+IHRoaXMuc2V0VXBWYWxpZGF0b3JzKCksIDUwMCk7XG4gICAgfVxuXG4gICAgX29uRm9jdXNGaWVsZCgkZXZ0KSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZUZpZWxkID0gdHJ1ZTtcbiAgICAgICAgJCgkZXZ0LnRhcmdldCkuY2xvc2VzdCgnLmxpdmUtZmllbGQnKS5hZGRDbGFzcygnYWN0aXZlJyk7XG5cbiAgICB9XG5cbiAgICAvLyBGdW5jdGlvbiB0byBnZXQgdGhlIGFjdGl2ZSBlbGVtZW50IG1hcmt1cCBiYXNlZCBvbiB3aWRnZXQgdHlwZVxuICAgIGdldEFjdGl2ZUVsZW1lbnQoKSB7XG4gICAgICAgIGNvbnN0IHdpZGdldFR5cGUgPSB0aGlzLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCd3aWRnZXR0eXBlJyk7XG4gICAgICAgIHN3aXRjaCAod2lkZ2V0VHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ3NlbGVjdCcpO1xuICAgICAgICAgICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigndGV4dGFyZWEnKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0QXJpYUF0dHJpYnV0ZXMoKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmdldEFjdGl2ZUVsZW1lbnQoKTtcbiAgICAgICAgaWYgKHRoaXMubmdmb3JtLmNvbnRyb2xzW3RoaXMuX2ZpZWxkTmFtZV0uaW52YWxpZCAmJiB0aGlzLm5nZm9ybS5jb250cm9sc1t0aGlzLl9maWVsZE5hbWVdLnRvdWNoZWQgJiYgdGhpcy5mb3JtLmlzVXBkYXRlTW9kZSkge1xuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnX19lcnJvcm1zZycsIGAke3RoaXMubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ19fdmFsaWRhdGlvbklkJyl9YCk7XG4gICAgICAgICAgICBlbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ2FyaWEtaW52YWxpZCcsIGAke3RoaXMubmdmb3JtLmNvbnRyb2xzW3RoaXMuX2ZpZWxkTmFtZV0uaW52YWxpZH1gKTtcbiAgICAgICAgICAgIGVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScsIGAke3RoaXMubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ19fdmFsaWRhdGlvbklkJyl9YCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdfX2Vycm9ybXNnJyk7XG4gICAgICAgICAgICBlbGVtZW50Py5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtaW52YWxpZCcpO1xuICAgICAgICAgICAgZWxlbWVudD8ucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5Jyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfb25CbHVyRmllbGQoJGV2dCkge1xuICAgICAgICAkKCRldnQudGFyZ2V0KS5jbG9zZXN0KCcubGl2ZS1maWVsZCcpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcbiAgICAgICAgY29uc3QgZWxlID0gdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ3AudGV4dC1kYW5nZXInKTtcbiAgICAgICAgLy8gRml4IGZvciBbV01TLTIzOTU5XTogQURBIGlzc3VlIC0gYWRkaW5nIGFyaWEtZGVzY3JpYmVkYnksIGFyaWEtaW52YWxpZCwgX19lcnJvcm1zZyBhdHRyaWJ1dGVzIG9ubHkgd2hlbiB0aGUgZm9ybSBmaWVsZCBpcyBpbnZhbGlkICwgZWxzZSByZW1vdmluZyB0aGUgYXR0cmlidXRlc1xuICAgICAgICB0aGlzLnNldEFyaWFBdHRyaWJ1dGVzKCk7XG4gICAgICAgIHRoaXMuX2FjdGl2ZUZpZWxkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3RyaWdnZXJlZEJ5VXNlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jbGlja3RyaWdnZXJlZEJ5VXNlciA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIEV4cHJlc3Npb24gdG8gYmUgZXZhbHVhdGVkIGluIHZpZXcgbW9kZSBvZiBmb3JtIGZpZWxkXG4gICAgZXZhbHVhdGVFeHByKG9iamVjdCwgZGlzcGxheUZpZWxkLCBkaXNwbGF5RXhwciwgYmluZEV4cHI/KSB7XG4gICAgICAgIC8vIElmIGRhdGFzZXQgaXMgbm90IHJlYWR5LCBvYmplY3Qgd2lsbCBiZSBlbXB0eTsgbm90aGluZyB0byBldmFsdWF0ZSB5ZXRcbiAgICAgICAgaWYgKCFvYmplY3QgfHwgIU9iamVjdC5rZXlzKG9iamVjdCkubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFkaXNwbGF5RXhwciAmJiAhZGlzcGxheUZpZWxkICYmICFiaW5kRXhwcikgeyAvLyB1cGRhdGUgdGhlIGRpc3BsYXkgRmllbGQgdG8gZmlyc3Qga2V5IG9mIHRoZSBvYmplY3QgaWYgZGlzcGxheUZpZWxkLCBkaXNwbGF5RXhwciBhbmQgYmluZEV4cHIgYXJlIG5vdCBwcm92aWRlZFxuICAgICAgICAgICAgZGlzcGxheUZpZWxkID0gT2JqZWN0LmtleXMob2JqZWN0KVswXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2V0RXZhbHVhdGVkRGF0YShvYmplY3QsIHtcbiAgICAgICAgICAgIGZpZWxkOiBkaXNwbGF5RmllbGQsXG4gICAgICAgICAgICBleHByZXNzaW9uOiBkaXNwbGF5RXhwcixcbiAgICAgICAgICAgIGJpbmRFeHByZXNzaW9uOiBiaW5kRXhwclxuICAgICAgICB9LCB0aGlzLnZpZXdQYXJlbnQpO1xuICAgIH1cblxuICAgIC8vIEV4cHJlc3Npb24gdG8gYmUgZXZhbHVhdGVkIGluIHZpZXcgbW9kZSBvZiBmb3JtIGZpZWxkXG4gICAgZ2V0RGlzcGxheUV4cHIoKSB7XG4gICAgICAgIGNvbnN0IGNhcHRpb24gPSBbXTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgICBjb25zdCBkaXNwbGF5RmllbGQgPSB0aGlzLmRpc3BsYXlmaWVsZCB8fCB0aGlzLmRpc3BsYXlsYWJlbFxuICAgICAgICBjb25zdCBkaXNwbGF5RXhwciA9IHRoaXMuZGlzcGxheWV4cHJlc3Npb247XG4gICAgICAgIGNvbnN0IGJpbmRFeHByID0gdGhpcy5iaW5kZGlzcGxheWV4cHJlc3Npb247XG4gICAgICAgIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGZvckVhY2godmFsdWUsIG9iaiA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc09iamVjdChvYmopKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXB0aW9uLnB1c2godGhpcy5ldmFsdWF0ZUV4cHIob2JqLCBkaXNwbGF5RmllbGQsIGRpc3BsYXlFeHByLCBiaW5kRXhwcikpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhcHRpb24ucHVzaCh0aGlzLmV2YWx1YXRlRXhwcih2YWx1ZSwgZGlzcGxheUZpZWxkLCBkaXNwbGF5RXhwciwgYmluZEV4cHIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBqb2luKGNhcHRpb24sICcsJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSA/ICcnIDogdGhpcy52YWx1ZTtcbiAgICB9XG5cbiAgICBnZXRDYXB0aW9uKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMudmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0aGlzLnZhbHVlID09PSBudWxsKSA/IChnZXQodGhpcy5mb3JtLmRhdGFvdXRwdXQsIHRoaXMuX2ZpZWxkTmFtZSkgfHwgJycpIDogdGhpcy52YWx1ZTtcbiAgICB9XG5cbiAgICAvLyBOb3RpZmllcyBjaGFuZ2VzIHRvIG9ic2VydmluZyB2YWxpZGF0aW9uIGZpZWxkc1xuICAgIG5vdGlmeUNoYW5nZXMoKSB7XG4gICAgICAgIGZvckVhY2godGhpcy5ub3RpZnlGb3JGaWVsZHMsIGZpZWxkID0+IHtcbiAgICAgICAgICAgIGZpZWxkLmZpZWxkVmFsaWRhdGlvbnMudmFsaWRhdGUoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gUmVnaXN0ZXJzIG9ic2VydmVyIG9mIHZhbGlkYXRpb24gZmllbGRzXG4gICAgb2JzZXJ2ZU9uKGZpZWxkcykge1xuICAgICAgICB0aGlzLmZpZWxkVmFsaWRhdGlvbnMub2JzZXJ2ZU9uKGZpZWxkcywgJ2Zvcm1maWVsZHMnKTtcbiAgICB9XG5cbiAgICAvLyBNZXRob2QgdG8gc2V0dXAgdmFsaWRhdG9ycyBmb3IgcmVhY3RpdmUgZm9ybSBjb250cm9sXG4gICAgc2V0VXBWYWxpZGF0b3JzKGN1c3RvbVZhbGlkYXRvcj8pIHtcbiAgICAgICAgdGhpcy5maWVsZFZhbGlkYXRpb25zLnNldFVwVmFsaWRhdG9ycyhjdXN0b21WYWxpZGF0b3IpO1xuICAgIH1cblxuICAgIC8vIHNldHMgdGhlIGN1c3RvbSBhc3luYyB2YWxpZGF0aW9uIG9uIHRoZSBmb3JtIGZpZWxkXG4gICAgc2V0QXN5bmNWYWxpZGF0b3JzKHZhbGlkYXRvcnMpIHtcbiAgICAgICAgdGhpcy5maWVsZFZhbGlkYXRpb25zLnNldEFzeW5jVmFsaWRhdG9ycyh2YWxpZGF0b3JzKTtcbiAgICB9XG5cbiAgICAvLyBzZXRzIHRoZSBkZWZhdWx0IGFuZCBjdXN0b20gc3luYyB2YWxpZGF0aW9uIG9uIHRoZSBmb3JtIGZpZWxkXG4gICAgc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JzKSB7XG4gICAgICAgIHRoaXMuZmllbGRWYWxpZGF0aW9ucy5zZXRWYWxpZGF0b3JzKHZhbGlkYXRvcnMpO1xuICAgIH1cblxuICAgIC8vIE1ldGhvZCB0byBzZXQgdGhlIHByb3BlcnRpZXMgb24gaW5uZXIgZm9ybSB3aWRnZXRcbiAgICBzZXRGb3JtV2lkZ2V0KGtleSwgdmFsKSB7XG4gICAgICAgIGlmICh0aGlzLmZvcm1XaWRnZXQgJiYgdGhpcy5mb3JtV2lkZ2V0LndpZGdldCkge1xuICAgICAgICAgICAgaWYoa2V5ID09PSAnaW5wdXR0eXBlJyAmJiB0aGlzLndpZGdldHR5cGUgPT09IEZvcm1XaWRnZXRUeXBlLlRFWFQpIHtcbiAgICAgICAgICAgICAgICBrZXkgPSAndHlwZSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmZvcm1XaWRnZXQud2lkZ2V0W2tleV0gPSB2YWw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBib3VuZEZuKGZuKSB7XG4gICAgICAgIHJldHVybiBmbigpO1xuICAgIH1cblxuICAgIC8vIE1ldGhvZCB0byBzZXQgdGhlIHByb3BlcnRpZXMgb24gaW5uZXIgbWF4IGZvcm0gd2lkZ2V0ICh3aGVuIHJhbmdlIGlzIHNlbGVjdGVkKVxuICAgIHNldE1heEZvcm1XaWRnZXQoa2V5LCB2YWwpIHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybVdpZGdldE1heCkge1xuICAgICAgICAgICAgdGhpcy5mb3JtV2lkZ2V0TWF4LndpZGdldFtrZXldID0gdmFsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdj8pIHtcbiAgICAgICAgY29uc3QgaXNGb3JtRGlydHkgPSB0aGlzLmZvcm0uZGlydHk7XG5cbiAgICAgICAgaWYgKGtleSAhPT0gJ3RhYmluZGV4Jykge1xuICAgICAgICAgICAgc3VwZXIub25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5leGNsdWRlUHJvcHMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFzIHVwbG9hZCB3aWRnZXQgaXMgYW4gSFRNTCB3aWRnZXQsIG9ubHkgcmVxdWlyZWQgcHJvcGVydHkgaXMgc2V0dXBcbiAgICAgICAgaWYgKHRoaXMud2lkZ2V0dHlwZSA9PT0gRm9ybVdpZGdldFR5cGUuVVBMT0FEKSB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSAncmVxdWlyZWQnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGVib3VuY2VTZXRVcFZhbGlkYXRvcnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN1cGVyLm9uUHJvcGVydHlDaGFuZ2Uoa2V5LCBudiwgb3YpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGtleSAhPT0gJ3Nob3cnKSB7XG4gICAgICAgICAgICB0aGlzLnNldEZvcm1XaWRnZXQoa2V5LCBudik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQbGFjZWhvbGRlciBzaG91bGQgbm90IGJlIHNldHVwIG9uIG1heCB3aWRnZXRcbiAgICAgICAgaWYgKGtleSAhPT0gJ3BsYWNlaG9sZGVyJyAmJiBrZXkgIT09ICdzaG93Jykge1xuICAgICAgICAgICAgdGhpcy5zZXRNYXhGb3JtV2lkZ2V0KGtleSwgbnYpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ2RlZmF1bHR2YWx1ZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLm9uRmllbGREZWZhdWx0VmFsdWVDaGFuZ2UodGhpcywgbnYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbWF4ZGVmYXVsdHZhbHVlJzpcbiAgICAgICAgICAgICAgICB0aGlzLm1heFZhbHVlID0gbnY7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRNYXhGb3JtV2lkZ2V0KCdkYXRhdmFsdWUnLCBudik7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLm9uTWF4RGVmYXVsdFZhbHVlQ2hhbmdlKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtYXhwbGFjZWhvbGRlcic6XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRNYXhGb3JtV2lkZ2V0KCdwbGFjZWhvbGRlcicsIG52KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3JlcXVpcmVkJzpcbiAgICAgICAgICAgICAgICAvLyBXTVMtMTg5MDYgOiBEbyBub3QgbWFrZSBmb3JtIGFzIGRpcnR5IGR1cmluZyByZXF1aXJlZCBwcm9wIGluaXRpYWxpemF0aW9uXG4gICAgICAgICAgICAgICAgaWYgKGlzRm9ybURpcnR5ICE9PSB0aGlzLmZvcm0uZGlydHkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnbWF4Y2hhcnMnOlxuICAgICAgICAgICAgY2FzZSAnbWludmFsdWUnOlxuICAgICAgICAgICAgY2FzZSAnbWF4dmFsdWUnOlxuICAgICAgICAgICAgY2FzZSAncmVnZXhwJzpcbiAgICAgICAgICAgIGNhc2UgJ3Nob3cnOlxuICAgICAgICAgICAgICAgIHRoaXMuX2RlYm91bmNlU2V0VXBWYWxpZGF0b3JzKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdwcmltYXJ5LWtleSc6XG4gICAgICAgICAgICAgICAgaWYgKG52KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5zZXRQcmltYXJ5S2V5KHRoaXMuX2ZpZWxkTmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZGlzcGxheS1uYW1lJzpcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXluYW1lID0gbnY7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdyZWFkb25seSc6XG4gICAgICAgICAgICAgICB0aGlzLnNldFJlYWRPbmx5U3RhdGUoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uU3R5bGVDaGFuZ2Uoa2V5LCBudiwgb3Y/KSB7XG4gICAgICAgIHRoaXMuc2V0Rm9ybVdpZGdldChrZXksIG52KTtcbiAgICAgICAgdGhpcy5zZXRNYXhGb3JtV2lkZ2V0KGtleSwgbnYpO1xuICAgICAgICBzdXBlci5vblN0eWxlQ2hhbmdlKGtleSwgbnYsIG92KTtcbiAgICB9XG5cbiAgICBnZXQgZGF0YXZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtV2lkZ2V0ICYmIHRoaXMuZm9ybVdpZGdldC5kYXRhdmFsdWU7XG4gICAgfVxuXG4gICAgc2V0IGRhdGF2YWx1ZSh2YWwpIHtcbiAgICAgICAgaWYgKHRoaXMuX2NvbnRyb2wgJiYgdGhpcy53aWRnZXR0eXBlICE9PSBGb3JtV2lkZ2V0VHlwZS5VUExPQUQpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRyb2wuc2V0VmFsdWUodmFsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCB2YWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YXZhbHVlO1xuICAgIH1cblxuICAgIHNldCB2YWx1ZSh2YWwpIHtcbiAgICAgICAgdGhpcy5kYXRhdmFsdWUgPSB2YWw7XG4gICAgfVxuXG4gICAgZ2V0IG1heFZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtV2lkZ2V0TWF4ICYmIHRoaXMuZm9ybVdpZGdldE1heC5kYXRhdmFsdWU7XG4gICAgfVxuXG4gICAgc2V0IG1heFZhbHVlKHZhbCkge1xuICAgICAgICBpZiAodGhpcy5fbWF4Q29udHJvbCkge1xuICAgICAgICAgICAgdGhpcy5fbWF4Q29udHJvbC5zZXRWYWx1ZSh2YWwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IG1pblZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICB9XG5cbiAgICBzZXQgbWluVmFsdWUodmFsKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWw7XG4gICAgfVxuXG4gICAgLy8gR2V0IHRoZSByZWFjdGl2ZSBmb3JtIGNvbnRyb2xcbiAgICBnZXQgX2NvbnRyb2woKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5nZm9ybSAmJiB0aGlzLm5nZm9ybS5jb250cm9sc1t0aGlzLl9maWVsZE5hbWVdO1xuICAgIH1cblxuICAgIC8vIEdldCB0aGUgcmVhY3RpdmUgbWF4IGZvcm0gY29udHJvbFxuICAgIGdldCBfbWF4Q29udHJvbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmdmb3JtICYmIHRoaXMubmdmb3JtLmNvbnRyb2xzW3RoaXMuX2ZpZWxkTmFtZSArICdfbWF4J107XG4gICAgfVxuXG4gICAgLy8gR2V0IHRoZSBkaXNwbGF5VmFsdWVcbiAgICBnZXQgZGlzcGxheVZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtV2lkZ2V0ICYmIHRoaXMuZm9ybVdpZGdldC5kaXNwbGF5VmFsdWU7XG4gICAgfVxuXG4gICAgLy9HZXQgdGhlIHRpbWVzdGFtcFxuICAgIGdldCB0aW1lc3RhbXAoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybVdpZGdldCAmJiB0aGlzLmZvcm1XaWRnZXQudGltZXN0YW1wO1xuICAgIH1cblxuICAgIC8vR2V0IHRoZSBjaGFybGVuZ3RoXG4gICAgZ2V0IGNoYXJsZW5ndGgoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybVdpZGdldCAmJiB0aGlzLmZvcm1XaWRnZXQuY2hhcmxlbmd0aDtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgdGhlIHJlYWN0aXZlIGZvcm0gY29udHJvbFxuICAgIGNyZWF0ZUNvbnRyb2woKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZiLmNvbnRyb2wodW5kZWZpbmVkLCB7XG4gICAgICAgICAgICB2YWxpZGF0b3JzOiB0aGlzLl92YWxpZGF0b3JzXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIE9uIGZpZWxkIHZhbHVlIGNoYW5nZSwgcHJvcGFnYXRlIGV2ZW50IHRvIHBhcmVudCBmb3JtXG4gICAgb25WYWx1ZUNoYW5nZSh2YWwpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRGVzdHJveWVkKSB7XG4gICAgICAgICAgICBjb25zdCBjYXB0aW9uRWwgPSAgJCh0aGlzLm5hdGl2ZUVsZW1lbnQpLmZpbmQoJy5jYXB0aW9uLWZsb2F0aW5nJyk7XG4gICAgICAgICAgICBpZiAoY2FwdGlvbkVsLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyBoYXNWYWx1ZSBjaGVjayB3aGV0aGVyIGZvcm0tZmllbGQgaGFzIGEgdmFsdWUgZnJvbSBwYXNzZWQgdmFsIGF0dHJpYnV0ZVxuICAgICAgICAgICAgICAgIC8vIEFkZGVkIHNhbml0eSBjaGVjayBvbiB2YWwgdG8gc3VwcG9ydCB2YWx1ZXMgbGlrZWQgMCwgZmFsc2UgZXRjIGFzIGlucHV0IHZhbCAtIFdNUy0yMDA4NFxuICAgICAgICAgICAgICAgIC8vIGV4cGxpY2l0bHkgY2hlY2tpbmcgZm9yIGlucHV0IHZhbHVlIG9yIC13ZWJraXQtYXV0b2ZpbGwgdG8gc2VlIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBhdXRvZmlsbGVkIGZpZWxkcyAtIFdNUy0yMDE0MVxuXG4gICAgICAgICAgICAgICAgY29uc3QgaGFzVmFsdWUgPSAoKGlzRGVmaW5lZCh2YWwpICYmIHZhbCAhPT0gJycgJiYgdmFsICE9PSBudWxsKSB8fCBjYXB0aW9uRWwuZmluZCgnaW5wdXQnKS52YWwoKSkgfHwgY2FwdGlvbkVsLmZpbmQoJ2lucHV0Oi13ZWJraXQtYXV0b2ZpbGwnKS5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmFwcC5ub3RpZnkoJ2NhcHRpb25Qb3NpdGlvbkFuaW1hdGUnLCB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXlWYWw6IGhhc1ZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBuYXRpdmVFbDogY2FwdGlvbkVsLFxuICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdE11bHRpcGxlOiB0aGlzLmZvcm1XaWRnZXQgJiYgdGhpcy5mb3JtV2lkZ2V0Lm11bHRpcGxlLFxuICAgICAgICAgICAgICAgICAgICBpc0ZvY3VzZWQ6IHRoaXMuX2FjdGl2ZUZpZWxkXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgIC8vIEZpeCBmb3IgW1dNUy0yMzk1OV06IEFEQSBpc3N1ZSAtIGFkZGluZyBhcmlhLWRlc2NyaWJlZGJ5LCBhcmlhLWludmFsaWQsIF9fZXJyb3Jtc2cgYXR0cmlidXRlcyBvbmx5IHdoZW4gdGhlIGZvcm0gZmllbGQgaXMgaW52YWxpZCAsIGVsc2UgcmVtb3ZpbmcgdGhlIGF0dHJpYnV0ZXNcbiAgICAgICAgICAgIHRoaXMuc2V0QXJpYUF0dHJpYnV0ZXMoKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5vbkZpZWxkVmFsdWVDaGFuZ2UodGhpcywgdmFsKTtcbiAgICAgICAgICAgIHRoaXMubm90aWZ5Q2hhbmdlcygpO1xuICAgICAgICAgICAgLy8gRG8gbWFyayBhcyB0b3VjaGVkLCBvbmx5IGluY2FzZSB3aGVuIHVzZXIgaGFzIGVudGVyZWQgYW4gaW5wdXQgYnV0IG5vdCB0aHJvdWdoIHRoZSBzY3JpcHQuIEhlbmNlIGFkZGVkIG1vdXNlZG93biBldmVudCBjaGVja1xuICAgICAgICAgICAgLy8gYWN0aXZlIGNsYXNzIGNoZWNrcyB3aGV0aGVyIHVzZXIgaXMgb24gdGhlIGN1cnJlbnQgZmllbGQsIGlmIHNvIG1hcmtpbmcgdGhlIGZpZWxkIGFzIHRvdWNoZWQuIEFuZCBmb3JtIGZpZWxkIHZhbGlkYXRpb24gaGFwcGVucyBvbmNlIGEgZmllbGQgaXMgdG91Y2hlZFxuICAgICAgICAgICAgLy8gX3RyaWdnZXJlZEJ5VXNlciBjaGVja3Mgd2hldGhlciB0aGUgZmllbGQgaXMgdG91Y2hlZCBieSB0aGUgdXNlciBvciB0cmlnZ2VyZWQgZnJvbSBleHRlcm5hbCBzY3JpcHRcbiAgICAgICAgICAgIC8vIFdNUy0yMjQ1NjogX2NsaWNrdHJpZ2dlcmVkQnlVc2VyIGNoZWNrcyB3aGVuIHVzZXIgc2VsZWN0cyBkYXRldGltZXR5cGUgZnJvbSBwaWNrZXIsIG1hcmsgdGhlIGZpZWxkIGFzIHRvdWNoZWQgdG8gc2hvdyB2YWxpZGF0aW9uIGVycm9ycyBpbiBtb2JpbGVcblxuICAgICAgICAgICAgaWYgKHRoaXMuJGVsZW1lbnQuZmluZCgnLmFjdGl2ZScpLmxlbmd0aCA+IDAgfHwgdGhpcy5mb3JtLnRvdWNoZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdHJpZ2dlcmVkQnlVc2VyIHx8IChpc01vYmlsZSgpICYmIHRoaXMuX2NsaWNrdHJpZ2dlcmVkQnlVc2VyICYmIGlzRGF0ZVRpbWVUeXBlKHRoaXMud2lkZ2V0dHlwZSkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmdmb3JtLmNvbnRyb2xzW3RoaXMuX2ZpZWxkTmFtZV0ubWFya0FzVG91Y2hlZCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmZpZWxkVmFsaWRhdGlvbnMuc2V0Q3VzdG9tVmFsaWRhdGlvbk1lc3NhZ2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uU3RhdHVzQ2hhbmdlKHN0YXR1cykge1xuICAgICAgICBpZiAoIXRoaXMuaXNEZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1BlbmRpbmdTcGlubmVyID0gKHN0YXR1cyA9PT0gJ1BFTkRJTkcnKTtcbiAgICAgICAgICAgIC8vIHdoaWxlIHJ1bm5pbmcgdmFsaWRhdGlvbiwgd2lkZ2V0IGlzIGRpc2FibGVkIGFuZCBzcGlubmVyIGlzIHNob3duXG4gICAgICAgICAgICAvLyBvdGhlcndpc2UgZm9ybVdpZGdldCBkaXNhYmxlZCBzdGF0ZSBpcyByZXNldCB0byB0aGUgc3RhdGUgb2YgdGhlIGZvcm1GaWVsZC5cbiAgICAgICAgICAgIGlmIChzdGF0dXMgPT09ICdQRU5ESU5HJykge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybVdpZGdldC5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZm9ybVdpZGdldC5kaXNhYmxlZCAhPT0gKHRoaXMgYXMgYW55KS5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybVdpZGdldC5kaXNhYmxlZCA9ICh0aGlzIGFzIGFueSkuZGlzYWJsZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNZXRob2QgdG8gZXhwb3NlIHZhbGlkYXRpb24gbWVzc2FnZSBhbmQgc2V0IGNvbnRyb2wgdG8gaW52YWxpZFxuICAgIHNldFZhbGlkYXRpb25NZXNzYWdlKHZhbCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbm1lc3NhZ2UgPSB2YWw7XG4gICAgICAgICAgICB0aGlzLnNldFVwVmFsaWRhdG9ycyhjdXN0b21WYWxpZGF0b3JGbik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNldFJlYWRPbmx5U3RhdGUoKSB7XG4gICAgICAgIGxldCByZWFkT25seTtcbiAgICAgICAgaWYgKHRoaXMuZm9ybS5pc1VwZGF0ZU1vZGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzWydwcmltYXJ5LWtleSddICYmICF0aGlzWydpcy1yZWxhdGVkJ10gJiYgIXRoaXMucGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgLypJZiB0aGUgZmllbGQgaXMgcHJpbWFyeSBidXQgaXMgYXNzaWduZWQgc2V0IHJlYWRvbmx5IGZhbHNlLlxuICAgICAgICAgICAgICAgICAgIEFzc2lnbmVkIGlzIHdoZXJlIHRoZSB1c2VyIGlucHV0cyB0aGUgdmFsdWUgd2hpbGUgYSBuZXcgZW50cnkuXG4gICAgICAgICAgICAgICAgICAgVGhpcyBpcyBub3QgZWRpdGFibGUoaW4gdXBkYXRlIG1vZGUpIG9uY2UgZW50cnkgaXMgc3VjY2Vzc2Z1bCovXG4gICAgICAgICAgICAgICAgcmVhZE9ubHkgPSAhKHRoaXMuZ2VuZXJhdG9yID09PSAnYXNzaWduZWQnICYmIHRoaXMuZm9ybS5vcGVyYXRpb25UeXBlICE9PSAndXBkYXRlJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlYWRPbmx5ID0gdGhpcy5yZWFkb25seTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEluIHZpZXcgbW9kZSwgc2V0IHdpZGdldCBzdGF0ZSB0byByZWFkb25seSBhbHdheXNcbiAgICAgICAgICAgIHJlYWRPbmx5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZWFkT25seSA9IHJlYWRPbmx5IHx8IHRoaXMuZm9ybS5yZWFkb25seTtcbiAgICAgICAgdGhpcy5zZXRGb3JtV2lkZ2V0KCdyZWFkb25seScsIHJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICByZXNldERpc3BsYXlJbnB1dCgpIHtcbiAgICAgICAgaWYgKCghaXNEZWZpbmVkKHRoaXMudmFsdWUpIHx8IHRoaXMudmFsdWUgPT09ICcnKSkge1xuICAgICAgICAgICAgdGhpcy5mb3JtV2lkZ2V0ICYmIHRoaXMuZm9ybVdpZGdldC5yZXNldERpc3BsYXlJbnB1dCAmJiB0aGlzLmZvcm1XaWRnZXQucmVzZXREaXNwbGF5SW5wdXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlc2V0KCkge1xuICAgICAgaWYodGhpcy5fY29udHJvbClcbiAgICAgICAgdGhpcy5fY29udHJvbC5yZXNldCgpO1xuICAgIH1cblxuICAgIHRyaWdnZXJVcGxvYWRFdmVudCgkZXZlbnQsIGV2ZW50TmFtZSkge1xuICAgICAgICBjb25zdCBwYXJhbXM6IGFueSA9IHsgJGV2ZW50IH07XG4gICAgICAgIGlmIChldmVudE5hbWUgPT09ICdjaGFuZ2UnKSB7XG4gICAgICAgICAgICBwYXJhbXMubmV3VmFsID0gJGV2ZW50LnRhcmdldC5maWxlcztcbiAgICAgICAgICAgIHBhcmFtcy5vbGRWYWwgPSB0aGlzLl9vbGRVcGxvYWRWYWw7XG4gICAgICAgICAgICB0aGlzLl9vbGRVcGxvYWRWYWwgPSBwYXJhbXMubmV3VmFsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjayhldmVudE5hbWUsIHBhcmFtcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWdpc3RlckZvcm1GaWVsZCgpIHtcblxuICAgICAgICBjb25zdCBmaWVsZE5hbWUgPSB0aGlzLl9maWVsZE5hbWU7XG5cbiAgICAgICAgaWYgKHRoaXMucGFyZW50TGlzdCAmJiAhKHRoaXMuZm9ybS5wYXJlbnRMaXN0ID09PSB0aGlzLnBhcmVudExpc3QpKSB7XG4gICAgICAgICAgICBsZXQgY291bnRlciA9IDE7XG4gICAgICAgICAgICBsZXQgX2ZpZWxkTmFtZSA9IGZpZWxkTmFtZTtcbiAgICAgICAgICAgIHdoaWxlICh0aGlzLm5nZm9ybS5jb250cm9scy5oYXNPd25Qcm9wZXJ0eShfZmllbGROYW1lKSkge1xuICAgICAgICAgICAgICAgIF9maWVsZE5hbWUgPSBgJHtmaWVsZE5hbWV9XyR7Y291bnRlcn1gO1xuICAgICAgICAgICAgICAgIGNvdW50ZXIrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubmdmb3JtLmFkZENvbnRyb2woX2ZpZWxkTmFtZSwgdGhpcy5jcmVhdGVDb250cm9sKCkpO1xuICAgICAgICAgICAgdGhpcy5fZmllbGROYW1lID0gX2ZpZWxkTmFtZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubmdmb3JtLmFkZENvbnRyb2woZmllbGROYW1lLCB0aGlzLmNyZWF0ZUNvbnRyb2woKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb25WYWx1ZUNoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMuX2NvbnRyb2wudmFsdWVDaGFuZ2VzXG4gICAgICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMjAwKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUodGhpcy5vblZhbHVlQ2hhbmdlLmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKCgpID0+IG9uVmFsdWVDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XG5cbiAgICAgICAgY29uc3Qgb25TdGF0dXNDaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLl9jb250cm9sLnN0YXR1c0NoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSgxMDApKVxuICAgICAgICAgICAgLnN1YnNjcmliZSh0aGlzLm9uU3RhdHVzQ2hhbmdlLmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKCgpID0+IG9uU3RhdHVzQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpO1xuXG4gICAgICAgIGlmICh0aGlzLmlzUmFuZ2UgPT09ICd0cnVlJykge1xuICAgICAgICAgICAgdGhpcy5uZ2Zvcm0uYWRkQ29udHJvbChmaWVsZE5hbWUgKyAnX21heCcsIHRoaXMuY3JlYXRlQ29udHJvbCgpKTtcbiAgICAgICAgICAgIC8vIHJlZ2lzdGVyaW5nIGZvciB2YWx1ZUNoYW5nZXMgb24gTWF4Zm9ybVdpZGdldFxuICAgICAgICAgICAgY29uc3Qgb25NYXhWYWx1ZUNoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMuX21heENvbnRyb2wudmFsdWVDaGFuZ2VzXG4gICAgICAgICAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDIwMCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSh0aGlzLm9uVmFsdWVDaGFuZ2UuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKCgpID0+IG9uTWF4VmFsdWVDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWx1ZSA9IGdldCh0aGlzLmZvcm0uZm9ybWRhdGEsIHRoaXMuX2ZpZWxkTmFtZSk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMubmdmb3JtID0gdGhpcy5mb3JtLm5nZm9ybTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckZvcm1GaWVsZCgpO1xuICAgICAgICAvLyBJbnN0YW50aWF0ZSBjdXN0b20gdmFsaWRhdG9ycyBjbGFzcyBmb3IgZm9ybSBmaWVsZFxuICAgICAgICB0aGlzLmZpZWxkVmFsaWRhdGlvbnMgPSBuZXcgQmFzZUZpZWxkVmFsaWRhdGlvbnModGhpcywgdGhpcy5mb3JtV2lkZ2V0LCB0aGlzLndpZGdldHR5cGUsIHRoaXMuX2NvbnRyb2wsIHRoaXMuZm9ybSk7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgfVxuXG4gICAgcHJlcGFyZUZvcm1XaWRnZXQoKSB7XG4gICAgICAgIHRoaXMuX2luaXRQcm9wc1JlcygpO1xuXG4gICAgICAgIC8vIHNldHRpbmcgZGlzcGxheUV4cHJlc3Npb25zIG9uIHRoZSBmb3Jtd2lkZ2V0IGV4cGxpY2l0bHkgYXMgZXhwciB3YXMgZXZhbHVhdGVkIHRvIFwiXCIuXG4gICAgICAgIHRoaXMuc2V0Rm9ybVdpZGdldCgnYmluZGRpc3BsYXlsYWJlbCcsIHRoaXMuYmluZGRpc3BsYXlsYWJlbCk7XG4gICAgICAgIHRoaXMuc2V0Rm9ybVdpZGdldCgnYmluZGRpc3BsYXlleHByZXNzaW9uJywgdGhpcy5iaW5kZGlzcGxheWV4cHJlc3Npb24pO1xuICAgICAgICB0aGlzLnNldEZvcm1XaWRnZXQoJ2JpbmRkaXNwbGF5aW1hZ2VzcmMnLCB0aGlzLmJpbmRkaXNwbGF5aW1hZ2VzcmMpO1xuICAgICAgICB0aGlzLnNldEZvcm1XaWRnZXQoJ2JpbmRDaGlwY2xhc3MnLCB0aGlzLmJpbmRDaGlwY2xhc3MpO1xuICAgICAgICB0aGlzLnNldEZvcm1XaWRnZXQoJ2JpbmRkYXRhc2V0JywgdGhpcy5iaW5kZGF0YXNldCk7XG5cbiAgICAgICAgdGhpcy5yZWdpc3RlclJlYWR5U3RhdGVMaXN0ZW5lcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmtleSA9IHRoaXMuX2ZpZWxkTmFtZSB8fCB0aGlzLnRhcmdldCB8fCB0aGlzLmJpbmRpbmc7XG4gICAgICAgICAgICB0aGlzLnZpZXdtb2Rld2lkZ2V0ID0gdGhpcy52aWV3bW9kZXdpZGdldCB8fCBnZXREZWZhdWx0Vmlld01vZGVXaWRnZXQodGhpcy53aWRnZXR0eXBlKTtcblxuICAgICAgICAgICAgLy8gRm9yIHVwbG9hZCB3aWRnZXQsIGdlbmVyYXRlIHRoZSBwZXJtaXR0ZWQgZmllbGRcbiAgICAgICAgICAgIGlmICh0aGlzLndpZGdldHR5cGUgPT09IEZvcm1XaWRnZXRUeXBlLlVQTE9BRCkge1xuICAgICAgICAgICAgICAgIGxldCBmaWxlVHlwZTtcbiAgICAgICAgICAgICAgICAvLyBDcmVhdGUgdGhlIGFjY2VwdHMgc3RyaW5nIGZyb20gZmlsZSB0eXBlIGFuZCBleHRlbnNpb25zXG4gICAgICAgICAgICAgICAgZmlsZVR5cGUgPSB0aGlzLmZpbGV0eXBlID8gRklMRV9UWVBFU1t0aGlzLmZpbGV0eXBlXSA6ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMucGVybWl0dGVkID0gZmlsZVR5cGUgKyAodGhpcy5leHRlbnNpb25zID8gKGZpbGVUeXBlID8gJywnIDogJycpICsgdGhpcy5leHRlbnNpb25zIDogJycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzTW9iaWxlKCkgJiYgdGhpcy52aWV3cG9ydC5pc01vYmlsZVR5cGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXNbJ21vYmlsZS1kaXNwbGF5J10pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53aWRnZXQuc2hvdyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52aWV3cG9ydC5pc1RhYmxldFR5cGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXNbJ3RhYmxldC1kaXNwbGF5J10pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53aWRnZXQuc2hvdyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzWydwYy1kaXNwbGF5J10pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53aWRnZXQuc2hvdyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5maWVsZERlZkNvbmZpZy5kaXNwbGFuYW1lID0gdGhpcy5kaXNwbGF5bmFtZTtcbiAgICAgICAgICAgIHRoaXMuZmllbGREZWZDb25maWcuc2hvdyA9IHRoaXMuc2hvdztcbiAgICAgICAgICAgIHRoaXMuZmllbGREZWZDb25maWcuaXNSZWxhdGVkID0gdGhpc1snaXMtcmVsYXRlZCddO1xuICAgICAgICAgICAgdGhpcy5maWVsZERlZkNvbmZpZy5pbnB1dHR5cGUgPSB0aGlzLmlucHV0dHlwZTtcbiAgICAgICAgICAgIHRoaXMuZmllbGREZWZDb25maWcuZ2VuZXJhdG9yID0gdGhpcy5nZW5lcmF0b3I7XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmQ29uZmlnLnBsYWNlaG9sZGVyID0gdGhpcy5wbGFjZWhvbGRlcjtcbiAgICAgICAgICAgIHRoaXMuZmllbGREZWZDb25maWcucHJpbWFyeUtleSA9IHRoaXNbJ3ByaW1hcnkta2V5J107XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmQ29uZmlnLnJlcXVpcmVkID0gdGhpcy5yZXF1aXJlZDtcbiAgICAgICAgICAgIHRoaXMuZmllbGREZWZDb25maWcuX3JlYWRvbmx5ID0gdGhpcy5yZWFkb25seTtcbiAgICAgICAgICAgIHRoaXMuZmllbGREZWZDb25maWcucmVnZXhwID0gdGhpcy5yZWdleHA7XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmQ29uZmlnLnR5cGUgPSB0aGlzLnR5cGU7XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmQ29uZmlnLmtleSA9IHRoaXMua2V5O1xuICAgICAgICAgICAgdGhpcy5maWVsZERlZkNvbmZpZy5tb2JpbGVEaXNwbGF5ID0gdGhpc1snbW9iaWxlLWRpc3BsYXknXTtcbiAgICAgICAgICAgIHRoaXMuZmllbGREZWZDb25maWcubmFtZSA9IHRoaXMubmFtZTtcbiAgICAgICAgICAgIHRoaXMuZmllbGREZWZDb25maWcucGNEaXNwbGF5ID0gdGhpc1sncGMtZGlzcGxheSddO1xuICAgICAgICAgICAgdGhpcy5maWVsZERlZkNvbmZpZy50YWJsZXREaXNwbGF5ID0gdGhpc1sndGFibGV0LWRpc3BsYXknXTtcbiAgICAgICAgICAgIHRoaXMuZmllbGREZWZDb25maWcudmFsaWRhdGlvbm1lc3NhZ2UgPSB0aGlzLnZhbGlkYXRpb25tZXNzYWdlO1xuICAgICAgICAgICAgdGhpcy5maWVsZERlZkNvbmZpZy52aWV3bW9kZXdpZGdldCA9IHRoaXMudmlld21vZGV3aWRnZXQ7XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmQ29uZmlnLndpZGdldCA9IHRoaXMud2lkZ2V0dHlwZTtcblxuICAgICAgICAgICAgLy8gUmVnaXN0ZXIgdGhlIGZvcm0gZmllbGQgd2l0aCBwYXJlbnQgZm9ybVxuICAgICAgICAgICAgdGhpcy5mb3JtLnJlZ2lzdGVyRm9ybUZpZWxkcyh0aGlzLndpZGdldCk7XG5cbiAgICAgICAgICAgIGFkZEZvcklkQXR0cmlidXRlcyh0aGlzLm5hdGl2ZUVsZW1lbnQpO1xuXG4gICAgICAgICAgICB0aGlzLnNldFJlYWRPbmx5U3RhdGUoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICBzdXBlci5uZ0FmdGVyQ29udGVudEluaXQoKTtcbiAgICAgICAgaWYodGhpcy53aWRnZXRTdWJUeXBlID09PSBcIndtLWZvcm0tZmllbGQtY3VzdG9tLXdpZGdldFwiICYmIHRoaXMuZm9ybVdpZGdldC5uYXRpdmVFbGVtZW50KVxuICAgICAgICAgICAgdGhpcy5mb3JtV2lkZ2V0ID0gdGhpcy5mb3JtV2lkZ2V0Lm5hdGl2ZUVsZW1lbnQud2lkZ2V0O1xuICAgICAgICBpZiAodGhpcy5mb3JtV2lkZ2V0KSB7XG4gICAgICAgICAgICBpZih0aGlzLndpZGdldFN1YlR5cGUgPT09IFwid20tZm9ybS1maWVsZC1jdXN0b20td2lkZ2V0XCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1XaWRnZXQuY29uZmlnU3ViamVjdC5hc09ic2VydmFibGUoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByZXBhcmVGb3JtV2lkZ2V0KCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucHJlcGFyZUZvcm1XaWRnZXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICAvLyBNRU1PUlkgTEVBSyBGSVg6IERlc3Ryb3kgQmFzZUZpZWxkVmFsaWRhdGlvbnMgaW5zdGFuY2VcbiAgICAgICAgaWYgKHRoaXMuZmllbGRWYWxpZGF0aW9ucykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpZWxkVmFsaWRhdGlvbnMuZGVzdHJveSgpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8vIFNpbGVudGx5IGhhbmRsZSBjbGVhbnVwIGVycm9yc1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5maWVsZFZhbGlkYXRpb25zID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogQ2xlYXIgbm90aWZ5Rm9yRmllbGRzIGFycmF5XG4gICAgICAgIGlmICh0aGlzLm5vdGlmeUZvckZpZWxkcykge1xuICAgICAgICAgICAgdGhpcy5ub3RpZnlGb3JGaWVsZHMgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogTnVsbGlmeSBkZWJvdW5jZWQgZnVuY3Rpb24gY2xvc3VyZVxuICAgICAgICB0aGlzLl9kZWJvdW5jZVNldFVwVmFsaWRhdG9ycyA9IG51bGw7XG5cbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBDbGVhciBmb3JtIHdpZGdldCByZWZlcmVuY2VzXG4gICAgICAgIHRoaXMuZm9ybVdpZGdldCA9IG51bGw7XG4gICAgICAgIHRoaXMuZm9ybVdpZGdldE1heCA9IG51bGw7XG5cbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBDbGVhciBmaWVsZCBkZWZpbml0aW9uIGNvbmZpZ1xuICAgICAgICBpZiAodGhpcy5maWVsZERlZkNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5maWVsZERlZkNvbmZpZyA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2FsbCBwYXJlbnQgbmdPbkRlc3Ryb3kgKFN0eWxhYmxlQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB3aGljaCBoYXMgY2xlYW51cClcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG59XG4iXX0=
@@ -1640,17 +1640,18 @@ class FormFieldDirective extends StylableComponent {
1640
1640
  this._clicktriggeredByUser = false;
1641
1641
  }
1642
1642
  // Expression to be evaluated in view mode of form field
1643
- evaluateExpr(object, displayField, displayExpr) {
1644
- if (!displayExpr || !displayField) {
1643
+ evaluateExpr(object, displayField, displayExpr, bindExpr) {
1644
+ // If dataset is not ready, object will be empty; nothing to evaluate yet
1645
+ if (!object || !Object.keys(object).length) {
1646
+ return;
1647
+ }
1648
+ if (!displayExpr && !displayField && !bindExpr) { // update the display Field to first key of the object if displayField, displayExpr and bindExpr are not provided
1645
1649
  displayField = Object.keys(object)[0];
1646
- // If dataset is not ready, display expression will not be defined
1647
- if (!displayField) {
1648
- return;
1649
- }
1650
1650
  }
1651
1651
  return getEvaluatedData(object, {
1652
1652
  field: displayField,
1653
- expression: displayExpr
1653
+ expression: displayExpr,
1654
+ bindExpression: bindExpr
1654
1655
  }, this.viewParent);
1655
1656
  }
1656
1657
  // Expression to be evaluated in view mode of form field
@@ -1659,16 +1660,17 @@ class FormFieldDirective extends StylableComponent {
1659
1660
  const value = this.value;
1660
1661
  const displayField = this.displayfield || this.displaylabel;
1661
1662
  const displayExpr = this.displayexpression;
1663
+ const bindExpr = this.binddisplayexpression;
1662
1664
  if (isObject(value)) {
1663
1665
  if (isArray(value)) {
1664
1666
  forEach(value, obj => {
1665
1667
  if (isObject(obj)) {
1666
- caption.push(this.evaluateExpr(obj, displayField, displayExpr));
1668
+ caption.push(this.evaluateExpr(obj, displayField, displayExpr, bindExpr));
1667
1669
  }
1668
1670
  });
1669
1671
  }
1670
1672
  else {
1671
- caption.push(this.evaluateExpr(value, displayField, displayExpr));
1673
+ caption.push(this.evaluateExpr(value, displayField, displayExpr, bindExpr));
1672
1674
  }
1673
1675
  return join(caption, ',');
1674
1676
  }