@colijnit/homedecorator 258.1.13 → 258.1.14

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.
@@ -171,17 +171,21 @@ export class CustomShapeCreatorComponent {
171
171
  this.isFloorType = !this.isFloorType;
172
172
  const origScale = new Vector3(1, 1, 1).divide(this.shape.metadata.scale || new Vector3(1, 1, 1));
173
173
  if (this.isFloorType) {
174
+ this._oldWallPosition = this.shape.position.clone();
175
+ this._oldWallElevation = this.shape.elevation;
174
176
  const metadata = Object.assign(Object.assign({}, this.shape.metadata), { itemType: ItemType.CustomShape });
175
- metadata.position = undefined;
177
+ metadata.position = this._oldFloorPosition ? this._oldFloorPosition.clone() : undefined;
178
+ metadata.elevation = this._oldFloorElevation ? this._oldFloorElevation : 0;
176
179
  metadata.centerPivot = true;
177
180
  const geometry = this.shape.customMesh.geometry.clone().scale(origScale.x, origScale.y, origScale.z);
178
181
  const shapeFloor = new CustomShapeFloorItem(metadata, new Mesh(geometry, this.shape.customMesh.material));
182
+ shapeFloor.buildFinished();
179
183
  shapeFloor.scaleGeometry(this.shape.scale.x, this.shape.scale.y, this.shape.scale.z);
180
184
  shapeFloor.calculateHalfSize();
181
185
  shapeFloor.skin = this.shape.skin;
182
186
  const roomCenter = this._roomService.getRoomCenter();
183
187
  if (roomCenter) {
184
- shapeFloor.position.copy(roomCenter);
188
+ shapeFloor.position.copy(this._oldFloorPosition ? this._oldFloorPosition.clone() : roomCenter);
185
189
  }
186
190
  shapeFloor.position.y = shapeFloor.getFloorY();
187
191
  this._itemService.addItem(shapeFloor);
@@ -191,11 +195,14 @@ export class CustomShapeCreatorComponent {
191
195
  this._hudService.updateSelectedItemHud();
192
196
  }
193
197
  else {
198
+ this._oldFloorPosition = this.shape.position.clone();
199
+ this._oldFloorElevation = this.shape.elevation;
194
200
  const metadata = Object.assign(Object.assign({}, this.shape.metadata), { itemType: ItemType.CustomShapeWall });
195
- metadata.position = undefined;
201
+ metadata.position = this._oldWallPosition ? this._oldWallPosition.clone() : undefined;
196
202
  metadata.centerPivot = false;
197
203
  const geometry = this.shape.customMesh.geometry.clone().scale(origScale.x, origScale.y, origScale.z);
198
204
  const shapeWall = new CustomShapeWallItem(metadata, new Mesh(geometry, this.shape.customMesh.material));
205
+ shapeWall.buildFinished();
199
206
  shapeWall.scaleGeometry(this.shape.scale.x, this.shape.scale.y, this.shape.scale.z);
200
207
  shapeWall.calculateHalfSize();
201
208
  shapeWall.skin = this.shape.skin;
@@ -254,4 +261,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
254
261
  }], ctorParameters: function () { return [{ type: i1.HudService }, { type: i2.SceneService }, { type: i3.RoomService }, { type: i4.ItemService }, { type: i5.SceneEventService }, { type: i6.MessageBusService }]; }, propDecorators: { shape: [{
255
262
  type: Input
256
263
  }] } });
257
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXNoYXBlLWNyZWF0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hcHAvcGx1Z2lucy9yb29tLXBsYW5uZXIvY29tcG9uZW50cy9jdXN0b21lLXNoYXBlLWNyZWF0b3IvY3VzdG9tLXNoYXBlLWNyZWF0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hcHAvcGx1Z2lucy9yb29tLXBsYW5uZXIvY29tcG9uZW50cy9jdXN0b21lLXNoYXBlLWNyZWF0b3IvY3VzdG9tLXNoYXBlLWNyZWF0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQVMsTUFBTSxlQUFlLENBQUM7QUFDdkQsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFDLElBQUksRUFBRSxPQUFPLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFDcEMsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sK0NBQStDLENBQUM7QUFDbkYsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sOENBQThDLENBQUM7QUFDakYsT0FBTyxFQUFDLGdCQUFnQixJQUFJLFFBQVEsRUFBRSxJQUFJLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQztBQVFoRixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDM0QsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBRXpELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUNwRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sdUNBQXVDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBT3BFLE1BQU0sT0FBTywyQkFBMkI7SUF5QnRDLFlBQ1UsV0FBdUIsRUFDdkIsYUFBMkIsRUFDM0IsWUFBeUIsRUFDekIsWUFBeUIsRUFDekIsa0JBQXFDLEVBQ3JDLGtCQUFxQztRQUxyQyxnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUN2QixrQkFBYSxHQUFiLGFBQWEsQ0FBYztRQUMzQixpQkFBWSxHQUFaLFlBQVksQ0FBYTtRQUN6QixpQkFBWSxHQUFaLFlBQVksQ0FBYTtRQUN6Qix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW1CO1FBQ3JDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBbUI7UUE5Qi9CLGdCQUFXLEdBQUcsR0FBRyxDQUFDO1FBSzNCLFNBQUksR0FBVyxFQUFFLENBQUM7UUFFbEIsV0FBTSxHQUFXLENBQUMsQ0FBQztRQUNuQixVQUFLLEdBQVcsQ0FBQyxDQUFDO1FBQ2xCLFVBQUssR0FBVyxDQUFDLENBQUM7UUFDbEIsY0FBUyxHQUFXLENBQUMsQ0FBQztRQUN0QixZQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ2YsaUJBQVksR0FBUyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ2hDLG1CQUFjLEdBQUcsb0JBQW9CLENBQUM7UUFDdEMsU0FBSSxHQUFZO1lBQ3JCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFDO1lBQzVGLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFDO1lBQzlGLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFDO1lBQzdGLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFDO1lBQzdGLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFDO1lBQzlGLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFDO1lBQzNGLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFDO1NBQy9GLENBQUM7SUFVRixDQUFDO0lBRU0sUUFBUTtRQUNiLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNkLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDNUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxZQUFZLFNBQVMsQ0FBQztZQUNuRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO1lBQ3RDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUU7Z0JBQ25CLEtBQUssTUFBTSxJQUFJLElBQUksUUFBUSxFQUFFO29CQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUM7b0JBQ3BELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQztpQkFDekQ7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDbEYsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7b0JBQzVELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDO2lCQUNqRTthQUNGO1NBQ0Y7SUFDSCxDQUFDO0lBRU0sT0FBTyxDQUFDLElBQVk7UUFDekIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2QsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDcEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1NBQzFDO0lBQ0gsQ0FBQztJQUVNLFNBQVMsQ0FBQyxNQUFjO1FBQzdCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNkLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUN4RSxJQUFJLENBQUMsV0FBVyxDQUFDLHFCQUFxQixFQUFFLENBQUM7U0FDMUM7SUFDSCxDQUFDO0lBRU0sUUFBUSxDQUFDLEtBQWE7UUFDM0IsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2QsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3hFLElBQUksQ0FBQyxXQUFXLENBQUMscUJBQXFCLEVBQUUsQ0FBQztTQUMxQztJQUNILENBQUM7SUFFTSxRQUFRLENBQUMsS0FBYTtRQUMzQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDZCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDeEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1NBQzFDO0lBQ0gsQ0FBQztJQUVNLFlBQVksQ0FBQyxTQUFpQjtRQUNuQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDZCxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMsV0FBVyxDQUFDLHFCQUFxQixFQUFFLENBQUM7U0FDMUM7SUFDSCxDQUFDO0lBRU0sUUFBUSxDQUFDLEtBQWE7UUFDM0IsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDbEMsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO2dCQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7YUFDOUI7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7U0FDbkM7YUFBTTtZQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztTQUM1QztRQUNELElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNkLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztTQUN2QztJQUNILENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxLQUFpRCxFQUFFLEtBQWE7UUFDekYsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDbEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUMxRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsS0FBSyxFQUFFLEtBQUssRUFBQyxDQUFDO2dCQUMvQixLQUFLLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxFQUFDLEtBQUssRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO2FBQzVFO1lBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBQyxLQUFLLEVBQUUsS0FBSyxFQUFDLENBQUM7U0FDdkM7YUFBTTtZQUNMLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUMsS0FBSyxFQUFFLEtBQUssRUFBQyxDQUFDO1lBQy9DLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsRUFBQyxLQUFLLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztTQUM5RztJQUNILENBQUM7SUFFWSxVQUFVLENBQUMsT0FBZ0I7O1lBQ3RDLElBQUksT0FBTyxFQUFFO2dCQUNYLE9BQU8sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3ZELE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDdEQ7WUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1lBQy9DLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7WUFFMUMsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNkLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQzthQUN6RTtZQUNELElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QyxDQUFDO0tBQUE7SUFFTSxjQUFjO1FBQ25CLElBQUk7WUFDRixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNqRSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUNyQyxNQUFNLFNBQVMsR0FBWSxJQUFJLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFHLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDcEIsTUFBTSxRQUFRLG1DQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxLQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsV0FBVyxHQUFDLENBQUM7Z0JBQzFFLFFBQVEsQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO2dCQUM5QixRQUFRLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztnQkFDNUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNyRyxNQUFNLFVBQVUsR0FBRyxJQUFJLG9CQUFvQixDQUN6QyxRQUFRLEVBQ1IsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RELFVBQVUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDckYsVUFBVSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQy9CLFVBQVUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7Z0JBQ2xDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3JELElBQUksVUFBVSxFQUFFO29CQUNkLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2lCQUN0QztnQkFDRCxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQy9DLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUN0QyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDO2dCQUN4QixJQUFJLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN0RCxJQUFJLENBQUMsV0FBVyxDQUFDLHFCQUFxQixFQUFFLENBQUM7YUFDMUM7aUJBQU07Z0JBQ0wsTUFBTSxRQUFRLG1DQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxLQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsZUFBZSxHQUFDLENBQUM7Z0JBQzlFLFFBQVEsQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO2dCQUM5QixRQUFRLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztnQkFDN0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNyRyxNQUFNLFNBQVMsR0FBRyxJQUFJLG1CQUFtQixDQUN2QyxRQUFRLEVBQ1IsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RELFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDcEYsU0FBUyxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQzlCLFNBQVMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNyQyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDM0csU0FBUyxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN6QyxJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO2FBQzFDO1NBQ0Y7Z0JBQVM7WUFDUixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUNuRTtJQUNILENBQUM7SUFFYSxvQkFBb0IsQ0FBQyxLQUFpRCxFQUFFLElBQVUsRUFBRSxPQUFnQjs7WUFDaEgsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsRUFBRTtnQkFDckIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUMxRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsT0FBTyxFQUFFLE9BQU8sRUFBQyxDQUFDO29CQUNuQyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFDLENBQUMsQ0FBQztpQkFDcEc7Z0JBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBQyxPQUFPLEVBQUUsT0FBTyxFQUFDLENBQUM7YUFDM0M7aUJBQU07Z0JBQ0wsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUMxRSxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUU7d0JBQ2QsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUMsQ0FBQzt3QkFDbkMsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBQyxDQUFDLENBQUM7cUJBQ3BHO2lCQUNGO2FBQ0Y7UUFDSCxDQUFDO0tBQUE7SUFFYSxpQkFBaUIsQ0FBQyxLQUFpRCxFQUMvRSxJQUE2QixFQUFFLE9BQWdCLEVBQUUsYUFBcUIsRUFBRSxNQUFjOztZQUN0RixJQUFJLE9BQU8sRUFBRTtnQkFDWCxPQUFPLENBQUMsVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN4RixNQUFNLGdCQUFnQixHQUFrQixNQUFNLGFBQWEsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQy9FLE1BQU0sY0FBYyxtQ0FBZSxNQUFNLEtBQUUsR0FBRyxFQUFFLGdCQUFnQixHQUFDLENBQUM7Z0JBQ2xFLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxDQUFDO2FBQ3hGO1FBQ0gsQ0FBQztLQUFBOzt5SEExTlUsMkJBQTJCOzZHQUEzQiwyQkFBMkIsMkZDekJ4QywrbEhBaUdBOzRGRHhFYSwyQkFBMkI7a0JBTHZDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHlCQUF5QjtvQkFDbkMsV0FBVyxFQUFFLHVDQUF1QztvQkFDcEQsU0FBUyxFQUFFLENBQUMsdUNBQXVDLENBQUM7aUJBQ3JEO2dQQUtRLEtBQUs7c0JBRFgsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBJbnB1dCwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQge01lc2gsIFZlY3RvcjN9IGZyb20gJ3RocmVlJztcclxuaW1wb3J0IHtDdXN0b21TaGFwZUZsb29ySXRlbX0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL2l0ZW1zL2N1c3RvbS1zaGFwZS1mbG9vci1pdGVtJztcclxuaW1wb3J0IHtDdXN0b21TaGFwZVdhbGxJdGVtfSBmcm9tICcuLi8uLi8uLi9jb3JlM2QvaXRlbXMvY3VzdG9tLXNoYXBlLXdhbGwtaXRlbSc7XHJcbmltcG9ydCB7Qm94R2VvbWV0cnlGYWNlcyBhcyBCb3hGYWNlcywgRmFjZX0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL21vZGVsL2ZhY2UnO1xyXG5pbXBvcnQge1RleHR1cmVFZGl0b3JPcHRpb25zfSBmcm9tICcuLi90ZXh0dXJlLWVkaXRvci90ZXh0dXJlLWVkaXRvci5jb21wb25lbnQnO1xyXG5pbXBvcnQge0JveFNraW4sIFJlY3Rhbmd1bGFyU2tpbkZyYWdtZW50fSBmcm9tICcuLi8uLi8uLi9jb3JlM2QvbW9kZWwvc2tpbic7XHJcbmltcG9ydCB7SHVkU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL3NlcnZpY2UvaHVkLnNlcnZpY2UnO1xyXG5pbXBvcnQge1NjZW5lU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL3NlcnZpY2Uvc2NlbmUuc2VydmljZSc7XHJcbmltcG9ydCB7Um9vbVNlcnZpY2V9IGZyb20gJy4uL2Zsb29ycGxhbm5lci9zZXJ2aWNlL3Jvb20uc2VydmljZSc7XHJcbmltcG9ydCB7SXRlbVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUzZC9zZXJ2aWNlL2l0ZW0uc2VydmljZSc7XHJcbmltcG9ydCB7U2NlbmVFdmVudFNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUzZC9zZXJ2aWNlL3NjZW5lLWV2ZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQge01lc3NhZ2VCdXNTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2UvbWVzc2FnZS1idXMuc2VydmljZSc7XHJcbmltcG9ydCB7Rmxvb3JJdGVtfSBmcm9tICcuLi8uLi8uLi9jb3JlM2QvaXRlbXMvZmxvb3ItaXRlbSc7XHJcbmltcG9ydCB7SXRlbVR5cGV9IGZyb20gJy4uLy4uLy4uL2NvcmUzZC9pdGVtcy9pdGVtLXR5cGUnO1xyXG5pbXBvcnQge1RleHR1cmV9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvbW9kZWwvdGV4dHVyZSc7XHJcbmltcG9ydCB7TWVzc2FnZVR5cGV9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvZW51bS9tZXNzYWdlLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7TWF0ZXJpYWxVdGlsc30gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS91dGlscy9tYXRlcmlhbC51dGlscyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3JwLWN1c3RvbS1zaGFwZS1jcmVhdG9yJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY3VzdG9tLXNoYXBlLWNyZWF0b3IuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2N1c3RvbS1zaGFwZS1jcmVhdG9yLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEN1c3RvbVNoYXBlQ3JlYXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgcHVibGljIHJlYWRvbmx5IHNjYWxlRmFjdG9yID0gMTAwO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzaGFwZTogQ3VzdG9tU2hhcGVGbG9vckl0ZW0gfCBDdXN0b21TaGFwZVdhbGxJdGVtO1xyXG5cclxuICBwdWJsaWMgbmFtZTogc3RyaW5nID0gJyc7XHJcbiAgcHVibGljIGlzRmxvb3JUeXBlOiBib29sZWFuO1xyXG4gIHB1YmxpYyBoZWlnaHQ6IG51bWJlciA9IDA7XHJcbiAgcHVibGljIHdpZHRoOiBudW1iZXIgPSAwO1xyXG4gIHB1YmxpYyBkZXB0aDogbnVtYmVyID0gMDtcclxuICBwdWJsaWMgZWxldmF0aW9uOiBudW1iZXIgPSAwO1xyXG4gIHB1YmxpYyBmYWNlUmVmID0gRmFjZTtcclxuICBwdWJsaWMgc2VsZWN0ZWRGYWNlOiBGYWNlID0gRmFjZS5Gcm9udDtcclxuICBwdWJsaWMgdGV4dHVyZU9wdGlvbnMgPSBUZXh0dXJlRWRpdG9yT3B0aW9ucztcclxuICBwdWJsaWMgc2tpbjogQm94U2tpbiA9IHtcclxuICAgIFtGYWNlLkFsbF06IHtjb2xvcjogbnVsbCwgdGV4dHVyZTogbnVsbCwgd2lkdGg6ICgpID0+IHRoaXMud2lkdGgsIGhlaWdodDogKCkgPT4gdGhpcy5oZWlnaHR9LFxyXG4gICAgW0ZhY2UuRnJvbnRdOiB7Y29sb3I6IG51bGwsIHRleHR1cmU6IG51bGwsIHdpZHRoOiAoKSA9PiB0aGlzLndpZHRoLCBoZWlnaHQ6ICgpID0+IHRoaXMuaGVpZ2h0fSxcclxuICAgIFtGYWNlLkJhY2tdOiB7Y29sb3I6IG51bGwsIHRleHR1cmU6IG51bGwsIHdpZHRoOiAoKSA9PiB0aGlzLndpZHRoLCBoZWlnaHQ6ICgpID0+IHRoaXMuaGVpZ2h0fSxcclxuICAgIFtGYWNlLkxlZnRdOiB7Y29sb3I6IG51bGwsIHRleHR1cmU6IG51bGwsIHdpZHRoOiAoKSA9PiB0aGlzLmRlcHRoLCBoZWlnaHQ6ICgpID0+IHRoaXMuaGVpZ2h0fSxcclxuICAgIFtGYWNlLlJpZ2h0XToge2NvbG9yOiBudWxsLCB0ZXh0dXJlOiBudWxsLCB3aWR0aDogKCkgPT4gdGhpcy5kZXB0aCwgaGVpZ2h0OiAoKSA9PiB0aGlzLmhlaWdodH0sXHJcbiAgICBbRmFjZS5Ub3BdOiB7Y29sb3I6IG51bGwsIHRleHR1cmU6IG51bGwsIHdpZHRoOiAoKSA9PiB0aGlzLndpZHRoLCBoZWlnaHQ6ICgpID0+IHRoaXMuZGVwdGh9LFxyXG4gICAgW0ZhY2UuQm90dG9tXToge2NvbG9yOiBudWxsLCB0ZXh0dXJlOiBudWxsLCB3aWR0aDogKCkgPT4gdGhpcy53aWR0aCwgaGVpZ2h0OiAoKSA9PiB0aGlzLmRlcHRofVxyXG4gIH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfaHVkU2VydmljZTogSHVkU2VydmljZSxcclxuICAgIHByaXZhdGUgX3NjZW5lU2VydmljZTogU2NlbmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfcm9vbVNlcnZpY2U6IFJvb21TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaXRlbVNlcnZpY2U6IEl0ZW1TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2NlbmVFdmVudFNlcnZpY2U6IFNjZW5lRXZlbnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfbWVzc2FnZUJ1c1NlcnZpY2U6IE1lc3NhZ2VCdXNTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zaGFwZSkge1xyXG4gICAgICB0aGlzLm5hbWUgPSB0aGlzLnNoYXBlLm5hbWU7XHJcbiAgICAgIHRoaXMuaXNGbG9vclR5cGUgPSB0aGlzLnNoYXBlIGluc3RhbmNlb2YgRmxvb3JJdGVtO1xyXG4gICAgICB0aGlzLmhlaWdodCA9IHRoaXMuc2hhcGUuZ2V0SGVpZ2h0KCk7XHJcbiAgICAgIHRoaXMud2lkdGggPSB0aGlzLnNoYXBlLmdldFdpZHRoKCk7XHJcbiAgICAgIHRoaXMuZGVwdGggPSB0aGlzLnNoYXBlLmdldERlcHRoKCk7XHJcbiAgICAgIHRoaXMuZWxldmF0aW9uID0gdGhpcy5zaGFwZS5lbGV2YXRpb247XHJcbiAgICAgIGlmICh0aGlzLnNoYXBlLnNraW4pIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGZhY2Ugb2YgQm94RmFjZXMpIHtcclxuICAgICAgICAgIHRoaXMuc2tpbltmYWNlXS5jb2xvciA9IHRoaXMuc2hhcGUuc2tpbltmYWNlXS5jb2xvcjtcclxuICAgICAgICAgIHRoaXMuc2tpbltmYWNlXS50ZXh0dXJlID0gdGhpcy5zaGFwZS5za2luW2ZhY2VdLnRleHR1cmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnNraW4uaGFzT3duUHJvcGVydHkoRmFjZS5BbGwpICYmIHRoaXMuc2hhcGUuc2tpbi5oYXNPd25Qcm9wZXJ0eShGYWNlLkFsbCkpIHtcclxuICAgICAgICAgIHRoaXMuc2tpbltGYWNlLkFsbF0uY29sb3IgPSB0aGlzLnNoYXBlLnNraW5bRmFjZS5BbGxdLmNvbG9yO1xyXG4gICAgICAgICAgdGhpcy5za2luW0ZhY2UuQWxsXS50ZXh0dXJlID0gdGhpcy5zaGFwZS5za2luW0ZhY2UuQWxsXS50ZXh0dXJlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldE5hbWUobmFtZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xyXG4gICAgaWYgKHRoaXMuc2hhcGUpIHtcclxuICAgICAgdGhpcy5zaGFwZS5uYW1lID0gbmFtZTtcclxuICAgICAgdGhpcy5zaGFwZS5tZXRhZGF0YS5pdGVtTmFtZSA9IG5hbWU7XHJcbiAgICAgIHRoaXMuX2h1ZFNlcnZpY2UudXBkYXRlU2VsZWN0ZWRJdGVtSHVkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0SGVpZ2h0KGhlaWdodDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcclxuICAgIGlmICh0aGlzLnNoYXBlKSB7XHJcbiAgICAgIHRoaXMuc2hhcGUucmVzaXplKGhlaWdodCwgdGhpcy5zaGFwZS5nZXRXaWR0aCgpLCB0aGlzLnNoYXBlLmdldERlcHRoKCkpO1xyXG4gICAgICB0aGlzLl9odWRTZXJ2aWNlLnVwZGF0ZVNlbGVjdGVkSXRlbUh1ZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFdpZHRoKHdpZHRoOiBudW1iZXIpIHtcclxuICAgIHRoaXMud2lkdGggPSB3aWR0aDtcclxuICAgIGlmICh0aGlzLnNoYXBlKSB7XHJcbiAgICAgIHRoaXMuc2hhcGUucmVzaXplKHRoaXMuc2hhcGUuZ2V0SGVpZ2h0KCksIHdpZHRoLCB0aGlzLnNoYXBlLmdldERlcHRoKCkpO1xyXG4gICAgICB0aGlzLl9odWRTZXJ2aWNlLnVwZGF0ZVNlbGVjdGVkSXRlbUh1ZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldERlcHRoKGRlcHRoOiBudW1iZXIpIHtcclxuICAgIHRoaXMuZGVwdGggPSBkZXB0aDtcclxuICAgIGlmICh0aGlzLnNoYXBlKSB7XHJcbiAgICAgIHRoaXMuc2hhcGUucmVzaXplKHRoaXMuc2hhcGUuZ2V0SGVpZ2h0KCksIHRoaXMuc2hhcGUuZ2V0V2lkdGgoKSwgZGVwdGgpO1xyXG4gICAgICB0aGlzLl9odWRTZXJ2aWNlLnVwZGF0ZVNlbGVjdGVkSXRlbUh1ZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldEVsZXZhdGlvbihlbGV2YXRpb246IG51bWJlcikge1xyXG4gICAgdGhpcy5lbGV2YXRpb24gPSBlbGV2YXRpb247XHJcbiAgICBpZiAodGhpcy5zaGFwZSkge1xyXG4gICAgICB0aGlzLnNoYXBlLnNldEVsZXZhdGlvbihlbGV2YXRpb24pO1xyXG4gICAgICB0aGlzLl9odWRTZXJ2aWNlLnVwZGF0ZVNlbGVjdGVkSXRlbUh1ZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldENvbG9yKGNvbG9yOiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkRmFjZSA9PT0gRmFjZS5BbGwpIHtcclxuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5za2luKSkge1xyXG4gICAgICAgIHRoaXMuc2tpbltrZXldLnRleHR1cmUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2tpbltrZXldLmNvbG9yID0gY29sb3I7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5za2luW0ZhY2UuQWxsXS50ZXh0dXJlID0gbnVsbDtcclxuICAgICAgdGhpcy5za2luW0ZhY2UuQWxsXS5jb2xvciA9IGNvbG9yO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5za2luW3RoaXMuc2VsZWN0ZWRGYWNlXS50ZXh0dXJlID0gbnVsbDtcclxuICAgICAgdGhpcy5za2luW3RoaXMuc2VsZWN0ZWRGYWNlXS5jb2xvciA9IGNvbG9yO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2hhcGUpIHtcclxuICAgICAgdGhpcy5fdXBkYXRlU2hhcGVzQ29sb3IodGhpcy5zaGFwZSwgY29sb3IpO1xyXG4gICAgICB0aGlzLl9zY2VuZVNlcnZpY2UubmVlZHNSZW5kZXIgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlU2hhcGVzQ29sb3Ioc2hhcGU6IEN1c3RvbVNoYXBlRmxvb3JJdGVtIHwgQ3VzdG9tU2hhcGVXYWxsSXRlbSwgY29sb3I6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRGYWNlID09PSBGYWNlLkFsbCkge1xyXG4gICAgICBmb3IgKGxldCBpID0gMCwgZiA9IEJveEZhY2VzW2ldOyBpIDwgQm94RmFjZXMubGVuZ3RoOyArK2ksIGYgPSBCb3hGYWNlc1tpXSkge1xyXG4gICAgICAgIHNoYXBlLnNraW5bZl0gPSB7Y29sb3I6IGNvbG9yfTtcclxuICAgICAgICBzaGFwZS5jdXN0b21NZXNoLm1hdGVyaWFsW2ldID0gbmV3IFRIUkVFLk1lc2hQaG9uZ01hdGVyaWFsKHtjb2xvcjogY29sb3J9KTtcclxuICAgICAgfVxyXG4gICAgICBzaGFwZS5za2luW0ZhY2UuQWxsXSA9IHtjb2xvcjogY29sb3J9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc2hhcGUuc2tpblt0aGlzLnNlbGVjdGVkRmFjZV0gPSB7Y29sb3I6IGNvbG9yfTtcclxuICAgICAgc2hhcGUuY3VzdG9tTWVzaC5tYXRlcmlhbFtCb3hGYWNlcy5pbmRleE9mKHRoaXMuc2VsZWN0ZWRGYWNlKV0gPSBuZXcgVEhSRUUuTWVzaFBob25nTWF0ZXJpYWwoe2NvbG9yOiBjb2xvcn0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHNldFRleHR1cmUodGV4dHVyZTogVGV4dHVyZSkge1xyXG4gICAgaWYgKHRleHR1cmUpIHtcclxuICAgICAgdGV4dHVyZS5oZWlnaHQgPSB0aGlzLnNraW5bdGhpcy5zZWxlY3RlZEZhY2VdLmhlaWdodCgpO1xyXG4gICAgICB0ZXh0dXJlLndpZHRoID0gdGhpcy5za2luW3RoaXMuc2VsZWN0ZWRGYWNlXS53aWR0aCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2tpblt0aGlzLnNlbGVjdGVkRmFjZV0udGV4dHVyZSA9IHRleHR1cmU7XHJcbiAgICB0aGlzLnNraW5bdGhpcy5zZWxlY3RlZEZhY2VdLmNvbG9yID0gbnVsbDtcclxuXHJcbiAgICBpZiAodGhpcy5zaGFwZSkge1xyXG4gICAgICBhd2FpdCB0aGlzLl91cGRhdGVTaGFwZXNUZXh0dXJlKHRoaXMuc2hhcGUsIHRoaXMuc2VsZWN0ZWRGYWNlLCB0ZXh0dXJlKTtcclxuICAgIH1cclxuICAgIHRoaXMuX3NjZW5lU2VydmljZS5uZWVkc1JlbmRlciA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdG9nZ2xlSXRlbVR5cGUoKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLl9tZXNzYWdlQnVzU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLkJsb2NrTGVmdFNpZGViYXIsIHRydWUpO1xyXG4gICAgICB0aGlzLmlzRmxvb3JUeXBlID0gIXRoaXMuaXNGbG9vclR5cGU7XHJcbiAgICAgIGNvbnN0IG9yaWdTY2FsZTogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKDEsIDEsIDEpLmRpdmlkZSh0aGlzLnNoYXBlLm1ldGFkYXRhLnNjYWxlIHx8IG5ldyBWZWN0b3IzKDEsIDEsIDEpKTtcclxuICAgICAgaWYgKHRoaXMuaXNGbG9vclR5cGUpIHtcclxuICAgICAgICBjb25zdCBtZXRhZGF0YSA9IHsuLi50aGlzLnNoYXBlLm1ldGFkYXRhLCBpdGVtVHlwZTogSXRlbVR5cGUuQ3VzdG9tU2hhcGV9O1xyXG4gICAgICAgIG1ldGFkYXRhLnBvc2l0aW9uID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIG1ldGFkYXRhLmNlbnRlclBpdm90ID0gdHJ1ZTtcclxuICAgICAgICBjb25zdCBnZW9tZXRyeSA9IHRoaXMuc2hhcGUuY3VzdG9tTWVzaC5nZW9tZXRyeS5jbG9uZSgpLnNjYWxlKG9yaWdTY2FsZS54LCBvcmlnU2NhbGUueSwgb3JpZ1NjYWxlLnopO1xyXG4gICAgICAgIGNvbnN0IHNoYXBlRmxvb3IgPSBuZXcgQ3VzdG9tU2hhcGVGbG9vckl0ZW0oXHJcbiAgICAgICAgICBtZXRhZGF0YSxcclxuICAgICAgICAgIG5ldyBNZXNoKGdlb21ldHJ5LCB0aGlzLnNoYXBlLmN1c3RvbU1lc2gubWF0ZXJpYWwpKTtcclxuICAgICAgICBzaGFwZUZsb29yLnNjYWxlR2VvbWV0cnkodGhpcy5zaGFwZS5zY2FsZS54LCB0aGlzLnNoYXBlLnNjYWxlLnksIHRoaXMuc2hhcGUuc2NhbGUueik7XHJcbiAgICAgICAgc2hhcGVGbG9vci5jYWxjdWxhdGVIYWxmU2l6ZSgpO1xyXG4gICAgICAgIHNoYXBlRmxvb3Iuc2tpbiA9IHRoaXMuc2hhcGUuc2tpbjtcclxuICAgICAgICBjb25zdCByb29tQ2VudGVyID0gdGhpcy5fcm9vbVNlcnZpY2UuZ2V0Um9vbUNlbnRlcigpO1xyXG4gICAgICAgIGlmIChyb29tQ2VudGVyKSB7XHJcbiAgICAgICAgICBzaGFwZUZsb29yLnBvc2l0aW9uLmNvcHkocm9vbUNlbnRlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNoYXBlRmxvb3IucG9zaXRpb24ueSA9IHNoYXBlRmxvb3IuZ2V0Rmxvb3JZKCk7XHJcbiAgICAgICAgdGhpcy5faXRlbVNlcnZpY2UuYWRkSXRlbShzaGFwZUZsb29yKTtcclxuICAgICAgICB0aGlzLl9pdGVtU2VydmljZS5yZW1vdmVJdGVtKHRoaXMuc2hhcGUpO1xyXG4gICAgICAgIHRoaXMuc2hhcGUgPSBzaGFwZUZsb29yO1xyXG4gICAgICAgIHRoaXMuX3NjZW5lRXZlbnRTZXJ2aWNlLnNldFNlbGVjdGVkT2JqZWN0KHRoaXMuc2hhcGUpO1xyXG4gICAgICAgIHRoaXMuX2h1ZFNlcnZpY2UudXBkYXRlU2VsZWN0ZWRJdGVtSHVkKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgbWV0YWRhdGEgPSB7Li4udGhpcy5zaGFwZS5tZXRhZGF0YSwgaXRlbVR5cGU6IEl0ZW1UeXBlLkN1c3RvbVNoYXBlV2FsbH07XHJcbiAgICAgICAgbWV0YWRhdGEucG9zaXRpb24gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgbWV0YWRhdGEuY2VudGVyUGl2b3QgPSBmYWxzZTtcclxuICAgICAgICBjb25zdCBnZW9tZXRyeSA9IHRoaXMuc2hhcGUuY3VzdG9tTWVzaC5nZW9tZXRyeS5jbG9uZSgpLnNjYWxlKG9yaWdTY2FsZS54LCBvcmlnU2NhbGUueSwgb3JpZ1NjYWxlLnopO1xyXG4gICAgICAgIGNvbnN0IHNoYXBlV2FsbCA9IG5ldyBDdXN0b21TaGFwZVdhbGxJdGVtKFxyXG4gICAgICAgICAgbWV0YWRhdGEsXHJcbiAgICAgICAgICBuZXcgTWVzaChnZW9tZXRyeSwgdGhpcy5zaGFwZS5jdXN0b21NZXNoLm1hdGVyaWFsKSk7XHJcbiAgICAgICAgc2hhcGVXYWxsLnNjYWxlR2VvbWV0cnkodGhpcy5zaGFwZS5zY2FsZS54LCB0aGlzLnNoYXBlLnNjYWxlLnksIHRoaXMuc2hhcGUuc2NhbGUueik7XHJcbiAgICAgICAgc2hhcGVXYWxsLmNhbGN1bGF0ZUhhbGZTaXplKCk7XHJcbiAgICAgICAgc2hhcGVXYWxsLnNraW4gPSB0aGlzLnNoYXBlLnNraW47XHJcbiAgICAgICAgdGhpcy5faXRlbVNlcnZpY2UuYWRkSXRlbShzaGFwZVdhbGwpO1xyXG4gICAgICAgIGNvbnN0IGNsb3Nlc3RXYWxsRWRnZSA9IHRoaXMuX3Jvb21TZXJ2aWNlLmdldENsb3Nlc3RXYWxsRWRnZSh0aGlzLnNoYXBlLnBvc2l0aW9uLngsIHRoaXMuc2hhcGUucG9zaXRpb24ueik7XHJcbiAgICAgICAgc2hhcGVXYWxsLnBsYWNlT25FZGdlKGNsb3Nlc3RXYWxsRWRnZSk7XHJcbiAgICAgICAgdGhpcy5faXRlbVNlcnZpY2UucmVtb3ZlSXRlbSh0aGlzLnNoYXBlKTtcclxuICAgICAgICB0aGlzLnNoYXBlID0gc2hhcGVXYWxsO1xyXG4gICAgICAgIHRoaXMuX3NjZW5lRXZlbnRTZXJ2aWNlLnNldFNlbGVjdGVkT2JqZWN0KHRoaXMuc2hhcGUpO1xyXG4gICAgICAgIHRoaXMuX2h1ZFNlcnZpY2UudXBkYXRlU2VsZWN0ZWRJdGVtSHVkKCk7XHJcbiAgICAgIH1cclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VCdXNTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuQmxvY2tMZWZ0U2lkZWJhciwgZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfdXBkYXRlU2hhcGVzVGV4dHVyZShzaGFwZTogQ3VzdG9tU2hhcGVGbG9vckl0ZW0gfCBDdXN0b21TaGFwZVdhbGxJdGVtLCBmYWNlOiBGYWNlLCB0ZXh0dXJlOiBUZXh0dXJlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoZmFjZSA9PT0gRmFjZS5BbGwpIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDAsIGYgPSBCb3hGYWNlc1tpXTsgaSA8IEJveEZhY2VzLmxlbmd0aDsgKytpLCBmID0gQm94RmFjZXNbaV0pIHtcclxuICAgICAgICBzaGFwZS5za2luW2ZdID0ge3RleHR1cmU6IHRleHR1cmV9O1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX3NldFNoYXBlTWF0ZXJpYWwoc2hhcGUsIHRoaXMuc2tpbltmXSwgdGV4dHVyZSwgaSwge3RyYW5zcGFyZW50OiB0cnVlLCBhbHBoYVRlc3Q6IDAuNX0pO1xyXG4gICAgICB9XHJcbiAgICAgIHNoYXBlLnNraW5bRmFjZS5BbGxdID0ge3RleHR1cmU6IHRleHR1cmV9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDAsIGYgPSBCb3hGYWNlc1tpXTsgaSA8IEJveEZhY2VzLmxlbmd0aDsgKytpLCBmID0gQm94RmFjZXNbaV0pIHtcclxuICAgICAgICBpZiAoZiA9PT0gZmFjZSkge1xyXG4gICAgICAgICAgc2hhcGUuc2tpbltmXSA9IHt0ZXh0dXJlOiB0ZXh0dXJlfTtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuX3NldFNoYXBlTWF0ZXJpYWwoc2hhcGUsIHRoaXMuc2tpbltmXSwgdGV4dHVyZSwgaSwge3RyYW5zcGFyZW50OiB0cnVlLCBhbHBoYVRlc3Q6IDAuNX0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfc2V0U2hhcGVNYXRlcmlhbChzaGFwZTogQ3VzdG9tU2hhcGVGbG9vckl0ZW0gfCBDdXN0b21TaGFwZVdhbGxJdGVtLFxyXG4gICAgc2tpbjogUmVjdGFuZ3VsYXJTa2luRnJhZ21lbnQsIHRleHR1cmU6IFRleHR1cmUsIG1hdGVyaWFsSW5kZXg6IG51bWJlciwgcGFyYW1zOiBPYmplY3QpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0ZXh0dXJlKSB7XHJcbiAgICAgIHRleHR1cmUuZGltZW5zaW9ucyA9IG5ldyBUSFJFRS5WZWN0b3IyKHNraW4ud2lkdGgoKSwgc2tpbi5oZWlnaHQoKSkubXVsdGlwbHlTY2FsYXIoMTAwKTtcclxuICAgICAgY29uc3QgdGV4dHVyZUZyb21JbWFnZTogVEhSRUUuVGV4dHVyZSA9IGF3YWl0IE1hdGVyaWFsVXRpbHMuRnJvbUltYWdlKHRleHR1cmUpO1xyXG4gICAgICBjb25zdCBtYXRlcmlhbFBhcmFtczogT2JqZWN0ID0gey4uLnBhcmFtcywgbWFwOiB0ZXh0dXJlRnJvbUltYWdlfTtcclxuICAgICAgc2hhcGUuY3VzdG9tTWVzaC5tYXRlcmlhbFttYXRlcmlhbEluZGV4XSA9IG5ldyBUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbChtYXRlcmlhbFBhcmFtcyk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxzZWN0aW9uPlxyXG4gIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwiYXV0byBjZW50ZXJcIj5cclxuICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9XCJncm93XCI+XHJcbiAgICAgIDxpbnB1dCBtYXRJbnB1dCAjbmFtZUlucHV0UmVmXHJcbiAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgIHBsYWNlaG9sZGVyPVwie3snU0hBUEVTX05BTUUnIHwgbG9jYWxpemV9fVwiXHJcbiAgICAgICAgW3ZhbHVlXT1cIm5hbWVcIlxyXG4gICAgICA+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cclxuICAgICAgW2Rpc2FibGVkXT1cIm5hbWUgPT09IG5hbWVJbnB1dFJlZi52YWx1ZVwiXHJcbiAgICAgIChjbGljayk9XCJzZXROYW1lKG5hbWVJbnB1dFJlZi52YWx1ZSlcIlxyXG4gICAgPlxyXG4gICAgICA8bWF0LWljb24gY2xhc3M9XCJob21lZGVjb3JhdG9yLW1hdGVyaWFsLWljb25zIHNpemUtMTZcIj5jaGVjazwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXHJcbiAgICAgIFtkaXNhYmxlZF09XCJuYW1lID09PSBuYW1lSW5wdXRSZWYudmFsdWVcIlxyXG4gICAgICAoY2xpY2spPVwibmFtZUlucHV0UmVmLnZhbHVlID0gbmFtZVwiXHJcbiAgICA+XHJcbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImhvbWVkZWNvcmF0b3ItbWF0ZXJpYWwtaWNvbnMgc2l6ZS0xNlwiPmNhbmNlbDwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1iZXR3ZWVuIGNlbnRlclwiIGNsYXNzPVwic3dpdGNoZXJcIj5cclxuICAgIDxoMiBjbGFzcz1cIm1hdC1ib2R5LTJcIj57e2lzRmxvb3JUeXBlID8gKCdGTE9PUicgfCBsb2NhbGl6ZSkgOiAoJ1dBTEwnIHwgbG9jYWxpemUpfX08L2gyPlxyXG4gICAgPG1hdC1zbGlkZS10b2dnbGVcclxuICAgICAgW2NoZWNrZWRdPVwiaXNGbG9vclR5cGVcIlxyXG4gICAgICAoY2hhbmdlKT1cInRvZ2dsZUl0ZW1UeXBlKClcIlxyXG4gICAgICBbbGFiZWxQb3NpdGlvbl09XCInYmVmb3JlJ1wiXHJcbiAgICA+XHJcbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxoMyBjbGFzcz1cIm1hdC1zdWJoZWFkaW5nLTJcIj4ge3sgJ01FQVNVUkVNRU5UUycgfCBsb2NhbGl6ZX19PC9oMz5cclxuICA8ZGl2PlxyXG4gICAgICA8cnAtZGltZW5zaW9uLWlucHV0XHJcbiAgICAgIHRpdGxlPVwie3snSEVJR0hUJyB8IGxvY2FsaXplfX1cIlxyXG4gICAgICBbc291cmNlVmFsdWVdPVwiaGVpZ2h0ICogc2NhbGVGYWN0b3JcIlxyXG4gICAgICBbbWluVmFsdWVdPVwiMFwiXHJcbiAgICAgIChkaW1lbnNpb25DaGFuZ2VkKT1cInNldEhlaWdodCgkZXZlbnQgLyBzY2FsZUZhY3RvcilcIlxyXG4gICAgPlxyXG4gICAgPC9ycC1kaW1lbnNpb24taW5wdXQ+XHJcblxyXG4gICAgPHJwLWRpbWVuc2lvbi1pbnB1dFxyXG4gICAgICB0aXRsZT1cInt7J1dJRFRIJyB8IGxvY2FsaXplfX1cIlxyXG4gICAgICBbc291cmNlVmFsdWVdPVwid2lkdGggKiBzY2FsZUZhY3RvclwiXHJcbiAgICAgIFttaW5WYWx1ZV09XCIwXCJcclxuICAgICAgKGRpbWVuc2lvbkNoYW5nZWQpPVwic2V0V2lkdGgoJGV2ZW50IC8gc2NhbGVGYWN0b3IpXCJcclxuICAgID5cclxuICAgIDwvcnAtZGltZW5zaW9uLWlucHV0PlxyXG5cclxuICAgIDxycC1kaW1lbnNpb24taW5wdXRcclxuICAgICAgdGl0bGU9XCJ7eydERVBUSCcgfCBsb2NhbGl6ZX19XCJcclxuICAgICAgW3NvdXJjZVZhbHVlXT1cImRlcHRoICogc2NhbGVGYWN0b3JcIlxyXG4gICAgICBbbWluVmFsdWVdPVwiMFwiXHJcbiAgICAgIChkaW1lbnNpb25DaGFuZ2VkKT1cInNldERlcHRoKCRldmVudCAvIHNjYWxlRmFjdG9yKVwiXHJcbiAgICA+XHJcbiAgICA8L3JwLWRpbWVuc2lvbi1pbnB1dD5cclxuXHJcbiAgICA8cnAtZGltZW5zaW9uLWlucHV0XHJcbiAgICAgIHRpdGxlPVwie3snRUxFVkFUSU9OJyB8IGxvY2FsaXplfX1cIlxyXG4gICAgICBbc291cmNlVmFsdWVdPVwiZWxldmF0aW9uICogc2NhbGVGYWN0b3JcIlxyXG4gICAgICBbbWluVmFsdWVdPVwiMFwiXHJcbiAgICAgIChkaW1lbnNpb25DaGFuZ2VkKT1cInNldEVsZXZhdGlvbigkZXZlbnQgLyBzY2FsZUZhY3RvcilcIlxyXG4gICAgPlxyXG4gICAgPC9ycC1kaW1lbnNpb24taW5wdXQ+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXY+XHJcbiAgICA8aDMgY2xhc3M9XCJtYXQtc3ViaGVhZGluZy0yXCI+IHt7ICdURVhUVVJFUycgfCBsb2NhbGl6ZX19PC9oMz5cclxuICAgIDxtYXQtZm9ybS1maWVsZCBpZD1cImZhY2Utc2VsZWN0LWZvcm1cIj5cclxuICAgICAgPG1hdC1sYWJlbD57e1wiU0VMRUNUX0ZBQ0VcIiB8IGxvY2FsaXplfX08L21hdC1sYWJlbD5cclxuICAgICAgPG1hdC1zZWxlY3QgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEZhY2VcIj5cclxuICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiZmFjZVJlZi5BbGxcIj57eyAnQUxMJyB8IGxvY2FsaXplIH19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJmYWNlUmVmLlRvcFwiPnt7ICdUT1AnIHwgbG9jYWxpemUgfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cImZhY2VSZWYuQm90dG9tXCI+e3sgJ0JPVFRPTScgfCBsb2NhbGl6ZSB9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiZmFjZVJlZi5Gcm9udFwiPnt7ICdGUk9OVCcgfCBsb2NhbGl6ZSB9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiZmFjZVJlZi5CYWNrXCI+e3sgJ0JBQ0snIHwgbG9jYWxpemUgfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cImZhY2VSZWYuTGVmdFwiPnt7ICdMRUZUJyB8IGxvY2FsaXplIH19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJmYWNlUmVmLlJpZ2h0XCI+e3sgJ1JJR0hUJyB8IGxvY2FsaXplIH19PC9tYXQtb3B0aW9uPlxyXG4gICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgIDxycC1hcHBlYXJhbmNlLXNlY3Rpb25cclxuICAgICAgdHlwZT1cInNoYXBlXCJcclxuICAgICAgW2hpZGVUZXh0dXJlVGFiXT1cInRydWVcIlxyXG4gICAgICBbY29sb3JdPVwic2tpbltzZWxlY3RlZEZhY2VdLmNvbG9yXCJcclxuICAgICAgW3BsYWluVGV4dHVyZV09XCJza2luW3NlbGVjdGVkRmFjZV0udGV4dHVyZVwiXHJcbiAgICAgIFt0ZXh0dXJlV2lkdGhdPVwic2tpbltzZWxlY3RlZEZhY2VdLndpZHRoKCkgKiAxMDBcIlxyXG4gICAgICBbdGV4dHVyZUhlaWdodF09XCJza2luW3NlbGVjdGVkRmFjZV0uaGVpZ2h0KCkgKiAxMDBcIlxyXG4gICAgICBbcGhvdG9PcHRpb25zXT1cInRleHR1cmVPcHRpb25zLlRpbGVzXCJcclxuICAgICAgKHNldFRleHR1cmUpPVwic2V0VGV4dHVyZSgkZXZlbnQpXCJcclxuICAgICAgKHNldENvbG9yKT1cInNldENvbG9yKCRldmVudClcIlxyXG4gICAgPlxyXG4gICAgPC9ycC1hcHBlYXJhbmNlLXNlY3Rpb24+XHJcbiAgPC9kaXY+XHJcbjwvc2VjdGlvbj5cclxuIl19
264
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXNoYXBlLWNyZWF0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hcHAvcGx1Z2lucy9yb29tLXBsYW5uZXIvY29tcG9uZW50cy9jdXN0b21lLXNoYXBlLWNyZWF0b3IvY3VzdG9tLXNoYXBlLWNyZWF0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hcHAvcGx1Z2lucy9yb29tLXBsYW5uZXIvY29tcG9uZW50cy9jdXN0b21lLXNoYXBlLWNyZWF0b3IvY3VzdG9tLXNoYXBlLWNyZWF0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQVMsTUFBTSxlQUFlLENBQUM7QUFDdkQsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFDLElBQUksRUFBRSxPQUFPLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFDcEMsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sK0NBQStDLENBQUM7QUFDbkYsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sOENBQThDLENBQUM7QUFDakYsT0FBTyxFQUFDLGdCQUFnQixJQUFJLFFBQVEsRUFBRSxJQUFJLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQztBQVFoRixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDM0QsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBRXpELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUNwRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sdUNBQXVDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBT3BFLE1BQU0sT0FBTywyQkFBMkI7SUE4QnRDLFlBQ1UsV0FBdUIsRUFDdkIsYUFBMkIsRUFDM0IsWUFBeUIsRUFDekIsWUFBeUIsRUFDekIsa0JBQXFDLEVBQ3JDLGtCQUFxQztRQUxyQyxnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUN2QixrQkFBYSxHQUFiLGFBQWEsQ0FBYztRQUMzQixpQkFBWSxHQUFaLFlBQVksQ0FBYTtRQUN6QixpQkFBWSxHQUFaLFlBQVksQ0FBYTtRQUN6Qix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW1CO1FBQ3JDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBbUI7UUFuQy9CLGdCQUFXLEdBQUcsR0FBRyxDQUFDO1FBSzNCLFNBQUksR0FBVyxFQUFFLENBQUM7UUFFbEIsV0FBTSxHQUFXLENBQUMsQ0FBQztRQUNuQixVQUFLLEdBQVcsQ0FBQyxDQUFDO1FBQ2xCLFVBQUssR0FBVyxDQUFDLENBQUM7UUFDbEIsY0FBUyxHQUFXLENBQUMsQ0FBQztRQUN0QixZQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ2YsaUJBQVksR0FBUyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ2hDLG1CQUFjLEdBQUcsb0JBQW9CLENBQUM7UUFDdEMsU0FBSSxHQUFZO1lBQ3JCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFDO1lBQzVGLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFDO1lBQzlGLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFDO1lBQzdGLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFDO1lBQzdGLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFDO1lBQzlGLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFDO1lBQzNGLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFDO1NBQy9GLENBQUM7SUFlRixDQUFDO0lBRU0sUUFBUTtRQUNiLElBQUksSUFBSSxDQUFDLEtBQUssRUFB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TSxhQUFhLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUMvRSxNQUFNLGNBQWMsbUNBQWUsTUFBTSxLQUFFLEdBQUcsRUFBRSxnQkFBZ0IsR0FBQyxDQUFDO2dCQUNsRSxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsQ0FBQzthQUN4RjtRQUNILENBQUM7S0FBQTs7eUhBdE9VLDJCQUEyQjs2R0FBM0IsMkJBQTJCLDJGQ3pCeEMsK2xIQWlHQTs0RkR4RWEsMkJBQTJCO2tCQUx2QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx5QkFBeUI7b0JBQ25DLFdBQVcsRUFBRSx1Q0FBdUM7b0JBQ3BELFNBQVMsRUFBRSxDQUFDLHVDQUF1QyxDQUFDO2lCQUNyRDtnUEFLUSxLQUFLO3NCQURYLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5wdXQsIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcclxuaW1wb3J0IHtNZXNoLCBWZWN0b3IzfSBmcm9tICd0aHJlZSc7XHJcbmltcG9ydCB7Q3VzdG9tU2hhcGVGbG9vckl0ZW19IGZyb20gJy4uLy4uLy4uL2NvcmUzZC9pdGVtcy9jdXN0b20tc2hhcGUtZmxvb3ItaXRlbSc7XHJcbmltcG9ydCB7Q3VzdG9tU2hhcGVXYWxsSXRlbX0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL2l0ZW1zL2N1c3RvbS1zaGFwZS13YWxsLWl0ZW0nO1xyXG5pbXBvcnQge0JveEdlb21ldHJ5RmFjZXMgYXMgQm94RmFjZXMsIEZhY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUzZC9tb2RlbC9mYWNlJztcclxuaW1wb3J0IHtUZXh0dXJlRWRpdG9yT3B0aW9uc30gZnJvbSAnLi4vdGV4dHVyZS1lZGl0b3IvdGV4dHVyZS1lZGl0b3IuY29tcG9uZW50JztcclxuaW1wb3J0IHtCb3hTa2luLCBSZWN0YW5ndWxhclNraW5GcmFnbWVudH0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL21vZGVsL3NraW4nO1xyXG5pbXBvcnQge0h1ZFNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUzZC9zZXJ2aWNlL2h1ZC5zZXJ2aWNlJztcclxuaW1wb3J0IHtTY2VuZVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUzZC9zZXJ2aWNlL3NjZW5lLnNlcnZpY2UnO1xyXG5pbXBvcnQge1Jvb21TZXJ2aWNlfSBmcm9tICcuLi9mbG9vcnBsYW5uZXIvc2VydmljZS9yb29tLnNlcnZpY2UnO1xyXG5pbXBvcnQge0l0ZW1TZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlM2Qvc2VydmljZS9pdGVtLnNlcnZpY2UnO1xyXG5pbXBvcnQge1NjZW5lRXZlbnRTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlM2Qvc2VydmljZS9zY2VuZS1ldmVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHtNZXNzYWdlQnVzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlL21lc3NhZ2UtYnVzLnNlcnZpY2UnO1xyXG5pbXBvcnQge0Zsb29ySXRlbX0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL2l0ZW1zL2Zsb29yLWl0ZW0nO1xyXG5pbXBvcnQge0l0ZW1UeXBlfSBmcm9tICcuLi8uLi8uLi9jb3JlM2QvaXRlbXMvaXRlbS10eXBlJztcclxuaW1wb3J0IHtUZXh0dXJlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL21vZGVsL3RleHR1cmUnO1xyXG5pbXBvcnQge01lc3NhZ2VUeXBlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL2VudW0vbWVzc2FnZS10eXBlLmVudW0nO1xyXG5pbXBvcnQge01hdGVyaWFsVXRpbHN9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvdXRpbHMvbWF0ZXJpYWwudXRpbHMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdycC1jdXN0b20tc2hhcGUtY3JlYXRvcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2N1c3RvbS1zaGFwZS1jcmVhdG9yLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jdXN0b20tc2hhcGUtY3JlYXRvci5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDdXN0b21TaGFwZUNyZWF0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIHB1YmxpYyByZWFkb25seSBzY2FsZUZhY3RvciA9IDEwMDtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2hhcGU6IEN1c3RvbVNoYXBlRmxvb3JJdGVtIHwgQ3VzdG9tU2hhcGVXYWxsSXRlbTtcclxuXHJcbiAgcHVibGljIG5hbWU6IHN0cmluZyA9ICcnO1xyXG4gIHB1YmxpYyBpc0Zsb29yVHlwZTogYm9vbGVhbjtcclxuICBwdWJsaWMgaGVpZ2h0OiBudW1iZXIgPSAwO1xyXG4gIHB1YmxpYyB3aWR0aDogbnVtYmVyID0gMDtcclxuICBwdWJsaWMgZGVwdGg6IG51bWJlciA9IDA7XHJcbiAgcHVibGljIGVsZXZhdGlvbjogbnVtYmVyID0gMDtcclxuICBwdWJsaWMgZmFjZVJlZiA9IEZhY2U7XHJcbiAgcHVibGljIHNlbGVjdGVkRmFjZTogRmFjZSA9IEZhY2UuRnJvbnQ7XHJcbiAgcHVibGljIHRleHR1cmVPcHRpb25zID0gVGV4dHVyZUVkaXRvck9wdGlvbnM7XHJcbiAgcHVibGljIHNraW46IEJveFNraW4gPSB7XHJcbiAgICBbRmFjZS5BbGxdOiB7Y29sb3I6IG51bGwsIHRleHR1cmU6IG51bGwsIHdpZHRoOiAoKSA9PiB0aGlzLndpZHRoLCBoZWlnaHQ6ICgpID0+IHRoaXMuaGVpZ2h0fSxcclxuICAgIFtGYWNlLkZyb250XToge2NvbG9yOiBudWxsLCB0ZXh0dXJlOiBudWxsLCB3aWR0aDogKCkgPT4gdGhpcy53aWR0aCwgaGVpZ2h0OiAoKSA9PiB0aGlzLmhlaWdodH0sXHJcbiAgICBbRmFjZS5CYWNrXToge2NvbG9yOiBudWxsLCB0ZXh0dXJlOiBudWxsLCB3aWR0aDogKCkgPT4gdGhpcy53aWR0aCwgaGVpZ2h0OiAoKSA9PiB0aGlzLmhlaWdodH0sXHJcbiAgICBbRmFjZS5MZWZ0XToge2NvbG9yOiBudWxsLCB0ZXh0dXJlOiBudWxsLCB3aWR0aDogKCkgPT4gdGhpcy5kZXB0aCwgaGVpZ2h0OiAoKSA9PiB0aGlzLmhlaWdodH0sXHJcbiAgICBbRmFjZS5SaWdodF06IHtjb2xvcjogbnVsbCwgdGV4dHVyZTogbnVsbCwgd2lkdGg6ICgpID0+IHRoaXMuZGVwdGgsIGhlaWdodDogKCkgPT4gdGhpcy5oZWlnaHR9LFxyXG4gICAgW0ZhY2UuVG9wXToge2NvbG9yOiBudWxsLCB0ZXh0dXJlOiBudWxsLCB3aWR0aDogKCkgPT4gdGhpcy53aWR0aCwgaGVpZ2h0OiAoKSA9PiB0aGlzLmRlcHRofSxcclxuICAgIFtGYWNlLkJvdHRvbV06IHtjb2xvcjogbnVsbCwgdGV4dHVyZTogbnVsbCwgd2lkdGg6ICgpID0+IHRoaXMud2lkdGgsIGhlaWdodDogKCkgPT4gdGhpcy5kZXB0aH1cclxuICB9O1xyXG5cclxuICBwcml2YXRlIF9vbGRGbG9vclBvc2l0aW9uOiBWZWN0b3IzO1xyXG4gIHByaXZhdGUgX29sZEZsb29yRWxldmF0aW9uOiBudW1iZXI7XHJcbiAgcHJpdmF0ZSBfb2xkV2FsbFBvc2l0aW9uOiBWZWN0b3IzO1xyXG4gIHByaXZhdGUgX29sZFdhbGxFbGV2YXRpb246IG51bWJlcjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9odWRTZXJ2aWNlOiBIdWRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2NlbmVTZXJ2aWNlOiBTY2VuZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9yb29tU2VydmljZTogUm9vbVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9pdGVtU2VydmljZTogSXRlbVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zY2VuZUV2ZW50U2VydmljZTogU2NlbmVFdmVudFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9tZXNzYWdlQnVzU2VydmljZTogTWVzc2FnZUJ1c1NlcnZpY2VcclxuICApIHtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNoYXBlKSB7XHJcbiAgICAgIHRoaXMubmFtZSA9IHRoaXMuc2hhcGUubmFtZTtcclxuICAgICAgdGhpcy5pc0Zsb29yVHlwZSA9IHRoaXMuc2hhcGUgaW5zdGFuY2VvZiBGbG9vckl0ZW07XHJcbiAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5zaGFwZS5nZXRIZWlnaHQoKTtcclxuICAgICAgdGhpcy53aWR0aCA9IHRoaXMuc2hhcGUuZ2V0V2lkdGgoKTtcclxuICAgICAgdGhpcy5kZXB0aCA9IHRoaXMuc2hhcGUuZ2V0RGVwdGgoKTtcclxuICAgICAgdGhpcy5lbGV2YXRpb24gPSB0aGlzLnNoYXBlLmVsZXZhdGlvbjtcclxuICAgICAgaWYgKHRoaXMuc2hhcGUuc2tpbikge1xyXG4gICAgICAgIGZvciAoY29uc3QgZmFjZSBvZiBCb3hGYWNlcykge1xyXG4gICAgICAgICAgdGhpcy5za2luW2ZhY2VdLmNvbG9yID0gdGhpcy5zaGFwZS5za2luW2ZhY2VdLmNvbG9yO1xyXG4gICAgICAgICAgdGhpcy5za2luW2ZhY2VdLnRleHR1cmUgPSB0aGlzLnNoYXBlLnNraW5bZmFjZV0udGV4dHVyZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuc2tpbi5oYXNPd25Qcm9wZXJ0eShGYWNlLkFsbCkgJiYgdGhpcy5zaGFwZS5za2luLmhhc093blByb3BlcnR5KEZhY2UuQWxsKSkge1xyXG4gICAgICAgICAgdGhpcy5za2luW0ZhY2UuQWxsXS5jb2xvciA9IHRoaXMuc2hhcGUuc2tpbltGYWNlLkFsbF0uY29sb3I7XHJcbiAgICAgICAgICB0aGlzLnNraW5bRmFjZS5BbGxdLnRleHR1cmUgPSB0aGlzLnNoYXBlLnNraW5bRmFjZS5BbGxdLnRleHR1cmU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0TmFtZShuYW1lOiBzdHJpbmcpIHtcclxuICAgIHRoaXMubmFtZSA9IG5hbWU7XHJcbiAgICBpZiAodGhpcy5zaGFwZSkge1xyXG4gICAgICB0aGlzLnNoYXBlLm5hbWUgPSBuYW1lO1xyXG4gICAgICB0aGlzLnNoYXBlLm1ldGFkYXRhLml0ZW1OYW1lID0gbmFtZTtcclxuICAgICAgdGhpcy5faHVkU2VydmljZS51cGRhdGVTZWxlY3RlZEl0ZW1IdWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRIZWlnaHQoaGVpZ2h0OiBudW1iZXIpIHtcclxuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xyXG4gICAgaWYgKHRoaXMuc2hhcGUpIHtcclxuICAgICAgdGhpcy5zaGFwZS5yZXNpemUoaGVpZ2h0LCB0aGlzLnNoYXBlLmdldFdpZHRoKCksIHRoaXMuc2hhcGUuZ2V0RGVwdGgoKSk7XHJcbiAgICAgIHRoaXMuX2h1ZFNlcnZpY2UudXBkYXRlU2VsZWN0ZWRJdGVtSHVkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0V2lkdGgod2lkdGg6IG51bWJlcikge1xyXG4gICAgdGhpcy53aWR0aCA9IHdpZHRoO1xyXG4gICAgaWYgKHRoaXMuc2hhcGUpIHtcclxuICAgICAgdGhpcy5zaGFwZS5yZXNpemUodGhpcy5zaGFwZS5nZXRIZWlnaHQoKSwgd2lkdGgsIHRoaXMuc2hhcGUuZ2V0RGVwdGgoKSk7XHJcbiAgICAgIHRoaXMuX2h1ZFNlcnZpY2UudXBkYXRlU2VsZWN0ZWRJdGVtSHVkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0RGVwdGgoZGVwdGg6IG51bWJlcikge1xyXG4gICAgdGhpcy5kZXB0aCA9IGRlcHRoO1xyXG4gICAgaWYgKHRoaXMuc2hhcGUpIHtcclxuICAgICAgdGhpcy5zaGFwZS5yZXNpemUodGhpcy5zaGFwZS5nZXRIZWlnaHQoKSwgdGhpcy5zaGFwZS5nZXRXaWR0aCgpLCBkZXB0aCk7XHJcbiAgICAgIHRoaXMuX2h1ZFNlcnZpY2UudXBkYXRlU2VsZWN0ZWRJdGVtSHVkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0RWxldmF0aW9uKGVsZXZhdGlvbjogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmVsZXZhdGlvbiA9IGVsZXZhdGlvbjtcclxuICAgIGlmICh0aGlzLnNoYXBlKSB7XHJcbiAgICAgIHRoaXMuc2hhcGUuc2V0RWxldmF0aW9uKGVsZXZhdGlvbik7XHJcbiAgICAgIHRoaXMuX2h1ZFNlcnZpY2UudXBkYXRlU2VsZWN0ZWRJdGVtSHVkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0Q29sb3IoY29sb3I6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRGYWNlID09PSBGYWNlLkFsbCkge1xyXG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh0aGlzLnNraW4pKSB7XHJcbiAgICAgICAgdGhpcy5za2luW2tleV0udGV4dHVyZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5za2luW2tleV0uY29sb3IgPSBjb2xvcjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNraW5bRmFjZS5BbGxdLnRleHR1cmUgPSBudWxsO1xyXG4gICAgICB0aGlzLnNraW5bRmFjZS5BbGxdLmNvbG9yID0gY29sb3I7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNraW5bdGhpcy5zZWxlY3RlZEZhY2VdLnRleHR1cmUgPSBudWxsO1xyXG4gICAgICB0aGlzLnNraW5bdGhpcy5zZWxlY3RlZEZhY2VdLmNvbG9yID0gY29sb3I7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zaGFwZSkge1xyXG4gICAgICB0aGlzLl91cGRhdGVTaGFwZXNDb2xvcih0aGlzLnNoYXBlLCBjb2xvcik7XHJcbiAgICAgIHRoaXMuX3NjZW5lU2VydmljZS5uZWVkc1JlbmRlciA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cGRhdGVTaGFwZXNDb2xvcihzaGFwZTogQ3VzdG9tU2hhcGVGbG9vckl0ZW0gfCBDdXN0b21TaGFwZVdhbGxJdGVtLCBjb2xvcjogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZEZhY2UgPT09IEZhY2UuQWxsKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwLCBmID0gQm94RmFjZXNbaV07IGkgPCBCb3hGYWNlcy5sZW5ndGg7ICsraSwgZiA9IEJveEZhY2VzW2ldKSB7XHJcbiAgICAgICAgc2hhcGUuc2tpbltmXSA9IHtjb2xvcjogY29sb3J9O1xyXG4gICAgICAgIHNoYXBlLmN1c3RvbU1lc2gubWF0ZXJpYWxbaV0gPSBuZXcgVEhSRUUuTWVzaFBob25nTWF0ZXJpYWwoe2NvbG9yOiBjb2xvcn0pO1xyXG4gICAgICB9XHJcbiAgICAgIHNoYXBlLnNraW5bRmFjZS5BbGxdID0ge2NvbG9yOiBjb2xvcn07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzaGFwZS5za2luW3RoaXMuc2VsZWN0ZWRGYWNlXSA9IHtjb2xvcjogY29sb3J9O1xyXG4gICAgICBzaGFwZS5jdXN0b21NZXNoLm1hdGVyaWFsW0JveEZhY2VzLmluZGV4T2YodGhpcy5zZWxlY3RlZEZhY2UpXSA9IG5ldyBUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbCh7Y29sb3I6IGNvbG9yfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc2V0VGV4dHVyZSh0ZXh0dXJlOiBUZXh0dXJlKSB7XHJcbiAgICBpZiAodGV4dHVyZSkge1xyXG4gICAgICB0ZXh0dXJlLmhlaWdodCA9IHRoaXMuc2tpblt0aGlzLnNlbGVjdGVkRmFjZV0uaGVpZ2h0KCk7XHJcbiAgICAgIHRleHR1cmUud2lkdGggPSB0aGlzLnNraW5bdGhpcy5zZWxlY3RlZEZhY2VdLndpZHRoKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5za2luW3RoaXMuc2VsZWN0ZWRGYWNlXS50ZXh0dXJlID0gdGV4dHVyZTtcclxuICAgIHRoaXMuc2tpblt0aGlzLnNlbGVjdGVkRmFjZV0uY29sb3IgPSBudWxsO1xyXG5cclxuICAgIGlmICh0aGlzLnNoYXBlKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuX3VwZGF0ZVNoYXBlc1RleHR1cmUodGhpcy5zaGFwZSwgdGhpcy5zZWxlY3RlZEZhY2UsIHRleHR1cmUpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fc2NlbmVTZXJ2aWNlLm5lZWRzUmVuZGVyID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB0b2dnbGVJdGVtVHlwZSgpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VCdXNTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuQmxvY2tMZWZ0U2lkZWJhciwgdHJ1ZSk7XHJcbiAgICAgIHRoaXMuaXNGbG9vclR5cGUgPSAhdGhpcy5pc0Zsb29yVHlwZTtcclxuICAgICAgY29uc3Qgb3JpZ1NjYWxlOiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoMSwgMSwgMSkuZGl2aWRlKHRoaXMuc2hhcGUubWV0YWRhdGEuc2NhbGUgfHwgbmV3IFZlY3RvcjMoMSwgMSwgMSkpO1xyXG4gICAgICBpZiAodGhpcy5pc0Zsb29yVHlwZSkge1xyXG4gICAgICAgIHRoaXMuX29sZFdhbGxQb3NpdGlvbiA9IHRoaXMuc2hhcGUucG9zaXRpb24uY2xvbmUoKTtcclxuICAgICAgICB0aGlzLl9vbGRXYWxsRWxldmF0aW9uID0gdGhpcy5zaGFwZS5lbGV2YXRpb247XHJcbiAgICAgICAgY29uc3QgbWV0YWRhdGEgPSB7Li4udGhpcy5zaGFwZS5tZXRhZGF0YSwgaXRlbVR5cGU6IEl0ZW1UeXBlLkN1c3RvbVNoYXBlfTtcclxuICAgICAgICBtZXRhZGF0YS5wb3NpdGlvbiA9IHRoaXMuX29sZEZsb29yUG9zaXRpb24gPyB0aGlzLl9vbGRGbG9vclBvc2l0aW9uLmNsb25lKCkgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgbWV0YWRhdGEuZWxldmF0aW9uID0gdGhpcy5fb2xkRmxvb3JFbGV2YXRpb24gPyB0aGlzLl9vbGRGbG9vckVsZXZhdGlvbiA6IDA7XHJcbiAgICAgICAgbWV0YWRhdGEuY2VudGVyUGl2b3QgPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IGdlb21ldHJ5ID0gdGhpcy5zaGFwZS5jdXN0b21NZXNoLmdlb21ldHJ5LmNsb25lKCkuc2NhbGUob3JpZ1NjYWxlLngsIG9yaWdTY2FsZS55LCBvcmlnU2NhbGUueik7XHJcbiAgICAgICAgY29uc3Qgc2hhcGVGbG9vcjogQ3VzdG9tU2hhcGVGbG9vckl0ZW0gPSBuZXcgQ3VzdG9tU2hhcGVGbG9vckl0ZW0oXHJcbiAgICAgICAgICBtZXRhZGF0YSxcclxuICAgICAgICAgIG5ldyBNZXNoKGdlb21ldHJ5LCB0aGlzLnNoYXBlLmN1c3RvbU1lc2gubWF0ZXJpYWwpKTtcclxuICAgICAgICBzaGFwZUZsb29yLmJ1aWxkRmluaXNoZWQoKTtcclxuICAgICAgICBzaGFwZUZsb29yLnNjYWxlR2VvbWV0cnkodGhpcy5zaGFwZS5zY2FsZS54LCB0aGlzLnNoYXBlLnNjYWxlLnksIHRoaXMuc2hhcGUuc2NhbGUueik7XHJcbiAgICAgICAgc2hhcGVGbG9vci5jYWxjdWxhdGVIYWxmU2l6ZSgpO1xyXG4gICAgICAgIHNoYXBlRmxvb3Iuc2tpbiA9IHRoaXMuc2hhcGUuc2tpbjtcclxuICAgICAgICBjb25zdCByb29tQ2VudGVyID0gdGhpcy5fcm9vbVNlcnZpY2UuZ2V0Um9vbUNlbnRlcigpO1xyXG4gICAgICAgIGlmIChyb29tQ2VudGVyKSB7XHJcbiAgICAgICAgICBzaGFwZUZsb29yLnBvc2l0aW9uLmNvcHkodGhpcy5fb2xkRmxvb3JQb3NpdGlvbiA/IHRoaXMuX29sZEZsb29yUG9zaXRpb24uY2xvbmUoKSA6IHJvb21DZW50ZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzaGFwZUZsb29yLnBvc2l0aW9uLnkgPSBzaGFwZUZsb29yLmdldEZsb29yWSgpO1xyXG4gICAgICAgIHRoaXMuX2l0ZW1TZXJ2aWNlLmFkZEl0ZW0oc2hhcGVGbG9vcik7XHJcbiAgICAgICAgdGhpcy5faXRlbVNlcnZpY2UucmVtb3ZlSXRlbSh0aGlzLnNoYXBlKTtcclxuICAgICAgICB0aGlzLnNoYXBlID0gc2hhcGVGbG9vcjtcclxuICAgICAgICB0aGlzLl9zY2VuZUV2ZW50U2VydmljZS5zZXRTZWxlY3RlZE9iamVjdCh0aGlzLnNoYXBlKTtcclxuICAgICAgICB0aGlzLl9odWRTZXJ2aWNlLnVwZGF0ZVNlbGVjdGVkSXRlbUh1ZCgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX29sZEZsb29yUG9zaXRpb24gPSB0aGlzLnNoYXBlLnBvc2l0aW9uLmNsb25lKCk7XHJcbiAgICAgICAgdGhpcy5fb2xkRmxvb3JFbGV2YXRpb24gPSB0aGlzLnNoYXBlLmVsZXZhdGlvbjtcclxuICAgICAgICBjb25zdCBtZXRhZGF0YSA9IHsuLi50aGlzLnNoYXBlLm1ldGFkYXRhLCBpdGVtVHlwZTogSXRlbVR5cGUuQ3VzdG9tU2hhcGVXYWxsfTtcclxuICAgICAgICBtZXRhZGF0YS5wb3NpdGlvbiA9IHRoaXMuX29sZFdhbGxQb3NpdGlvbiA/IHRoaXMuX29sZFdhbGxQb3NpdGlvbi5jbG9uZSgpIDogdW5kZWZpbmVkO1xyXG4gICAgICAgIG1ldGFkYXRhLmNlbnRlclBpdm90ID0gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgZ2VvbWV0cnkgPSB0aGlzLnNoYXBlLmN1c3RvbU1lc2guZ2VvbWV0cnkuY2xvbmUoKS5zY2FsZShvcmlnU2NhbGUueCwgb3JpZ1NjYWxlLnksIG9yaWdTY2FsZS56KTtcclxuICAgICAgICBjb25zdCBzaGFwZVdhbGw6IEN1c3RvbVNoYXBlV2FsbEl0ZW0gPSBuZXcgQ3VzdG9tU2hhcGVXYWxsSXRlbShcclxuICAgICAgICAgIG1ldGFkYXRhLFxyXG4gICAgICAgICAgbmV3IE1lc2goZ2VvbWV0cnksIHRoaXMuc2hhcGUuY3VzdG9tTWVzaC5tYXRlcmlhbCkpO1xyXG4gICAgICAgIHNoYXBlV2FsbC5idWlsZEZpbmlzaGVkKCk7XHJcbiAgICAgICAgc2hhcGVXYWxsLnNjYWxlR2VvbWV0cnkodGhpcy5zaGFwZS5zY2FsZS54LCB0aGlzLnNoYXBlLnNjYWxlLnksIHRoaXMuc2hhcGUuc2NhbGUueik7XHJcbiAgICAgICAgc2hhcGVXYWxsLmNhbGN1bGF0ZUhhbGZTaXplKCk7XHJcbiAgICAgICAgc2hhcGVXYWxsLnNraW4gPSB0aGlzLnNoYXBlLnNraW47XHJcbiAgICAgICAgdGhpcy5faXRlbVNlcnZpY2UuYWRkSXRlbShzaGFwZVdhbGwpO1xyXG4gICAgICAgIGNvbnN0IGNsb3Nlc3RXYWxsRWRnZSA9IHRoaXMuX3Jvb21TZXJ2aWNlLmdldENsb3Nlc3RXYWxsRWRnZSh0aGlzLnNoYXBlLnBvc2l0aW9uLngsIHRoaXMuc2hhcGUucG9zaXRpb24ueik7XHJcbiAgICAgICAgc2hhcGVXYWxsLnBsYWNlT25FZGdlKGNsb3Nlc3RXYWxsRWRnZSk7XHJcbiAgICAgICAgdGhpcy5faXRlbVNlcnZpY2UucmVtb3ZlSXRlbSh0aGlzLnNoYXBlKTtcclxuICAgICAgICB0aGlzLnNoYXBlID0gc2hhcGVXYWxsO1xyXG4gICAgICAgIHRoaXMuX3NjZW5lRXZlbnRTZXJ2aWNlLnNldFNlbGVjdGVkT2JqZWN0KHRoaXMuc2hhcGUpO1xyXG4gICAgICAgIHRoaXMuX2h1ZFNlcnZpY2UudXBkYXRlU2VsZWN0ZWRJdGVtSHVkKCk7XHJcbiAgICAgIH1cclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VCdXNTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuQmxvY2tMZWZ0U2lkZWJhciwgZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfdXBkYXRlU2hhcGVzVGV4dHVyZShzaGFwZTogQ3VzdG9tU2hhcGVGbG9vckl0ZW0gfCBDdXN0b21TaGFwZVdhbGxJdGVtLCBmYWNlOiBGYWNlLCB0ZXh0dXJlOiBUZXh0dXJlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoZmFjZSA9PT0gRmFjZS5BbGwpIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDAsIGYgPSBCb3hGYWNlc1tpXTsgaSA8IEJveEZhY2VzLmxlbmd0aDsgKytpLCBmID0gQm94RmFjZXNbaV0pIHtcclxuICAgICAgICBzaGFwZS5za2luW2ZdID0ge3RleHR1cmU6IHRleHR1cmV9O1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX3NldFNoYXBlTWF0ZXJpYWwoc2hhcGUsIHRoaXMuc2tpbltmXSwgdGV4dHVyZSwgaSwge3RyYW5zcGFyZW50OiB0cnVlLCBhbHBoYVRlc3Q6IDAuNX0pO1xyXG4gICAgICB9XHJcbiAgICAgIHNoYXBlLnNraW5bRmFjZS5BbGxdID0ge3RleHR1cmU6IHRleHR1cmV9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDAsIGYgPSBCb3hGYWNlc1tpXTsgaSA8IEJveEZhY2VzLmxlbmd0aDsgKytpLCBmID0gQm94RmFjZXNbaV0pIHtcclxuICAgICAgICBpZiAoZiA9PT0gZmFjZSkge1xyXG4gICAgICAgICAgc2hhcGUuc2tpbltmXSA9IHt0ZXh0dXJlOiB0ZXh0dXJlfTtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuX3NldFNoYXBlTWF0ZXJpYWwoc2hhcGUsIHRoaXMuc2tpbltmXSwgdGV4dHVyZSwgaSwge3RyYW5zcGFyZW50OiB0cnVlLCBhbHBoYVRlc3Q6IDAuNX0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfc2V0U2hhcGVNYXRlcmlhbChzaGFwZTogQ3VzdG9tU2hhcGVGbG9vckl0ZW0gfCBDdXN0b21TaGFwZVdhbGxJdGVtLFxyXG4gICAgc2tpbjogUmVjdGFuZ3VsYXJTa2luRnJhZ21lbnQsIHRleHR1cmU6IFRleHR1cmUsIG1hdGVyaWFsSW5kZXg6IG51bWJlciwgcGFyYW1zOiBPYmplY3QpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0ZXh0dXJlKSB7XHJcbiAgICAgIHRleHR1cmUuZGltZW5zaW9ucyA9IG5ldyBUSFJFRS5WZWN0b3IyKHNraW4ud2lkdGgoKSwgc2tpbi5oZWlnaHQoKSkubXVsdGlwbHlTY2FsYXIoMTAwKTtcclxuICAgICAgY29uc3QgdGV4dHVyZUZyb21JbWFnZTogVEhSRUUuVGV4dHVyZSA9IGF3YWl0IE1hdGVyaWFsVXRpbHMuRnJvbUltYWdlKHRleHR1cmUpO1xyXG4gICAgICBjb25zdCBtYXRlcmlhbFBhcmFtczogT2JqZWN0ID0gey4uLnBhcmFtcywgbWFwOiB0ZXh0dXJlRnJvbUltYWdlfTtcclxuICAgICAgc2hhcGUuY3VzdG9tTWVzaC5tYXRlcmlhbFttYXRlcmlhbEluZGV4XSA9IG5ldyBUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbChtYXRlcmlhbFBhcmFtcyk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxzZWN0aW9uPlxyXG4gIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwiYXV0byBjZW50ZXJcIj5cclxuICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9XCJncm93XCI+XHJcbiAgICAgIDxpbnB1dCBtYXRJbnB1dCAjbmFtZUlucHV0UmVmXHJcbiAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgIHBsYWNlaG9sZGVyPVwie3snU0hBUEVTX05BTUUnIHwgbG9jYWxpemV9fVwiXHJcbiAgICAgICAgW3ZhbHVlXT1cIm5hbWVcIlxyXG4gICAgICA+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cclxuICAgICAgW2Rpc2FibGVkXT1cIm5hbWUgPT09IG5hbWVJbnB1dFJlZi52YWx1ZVwiXHJcbiAgICAgIChjbGljayk9XCJzZXROYW1lKG5hbWVJbnB1dFJlZi52YWx1ZSlcIlxyXG4gICAgPlxyXG4gICAgICA8bWF0LWljb24gY2xhc3M9XCJob21lZGVjb3JhdG9yLW1hdGVyaWFsLWljb25zIHNpemUtMTZcIj5jaGVjazwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXHJcbiAgICAgIFtkaXNhYmxlZF09XCJuYW1lID09PSBuYW1lSW5wdXRSZWYudmFsdWVcIlxyXG4gICAgICAoY2xpY2spPVwibmFtZUlucHV0UmVmLnZhbHVlID0gbmFtZVwiXHJcbiAgICA+XHJcbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImhvbWVkZWNvcmF0b3ItbWF0ZXJpYWwtaWNvbnMgc2l6ZS0xNlwiPmNhbmNlbDwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1iZXR3ZWVuIGNlbnRlclwiIGNsYXNzPVwic3dpdGNoZXJcIj5cclxuICAgIDxoMiBjbGFzcz1cIm1hdC1ib2R5LTJcIj57e2lzRmxvb3JUeXBlID8gKCdGTE9PUicgfCBsb2NhbGl6ZSkgOiAoJ1dBTEwnIHwgbG9jYWxpemUpfX08L2gyPlxyXG4gICAgPG1hdC1zbGlkZS10b2dnbGVcclxuICAgICAgW2NoZWNrZWRdPVwiaXNGbG9vclR5cGVcIlxyXG4gICAgICAoY2hhbmdlKT1cInRvZ2dsZUl0ZW1UeXBlKClcIlxyXG4gICAgICBbbGFiZWxQb3NpdGlvbl09XCInYmVmb3JlJ1wiXHJcbiAgICA+XHJcbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxoMyBjbGFzcz1cIm1hdC1zdWJoZWFkaW5nLTJcIj4ge3sgJ01FQVNVUkVNRU5UUycgfCBsb2NhbGl6ZX19PC9oMz5cclxuICA8ZGl2PlxyXG4gICAgICA8cnAtZGltZW5zaW9uLWlucHV0XHJcbiAgICAgIHRpdGxlPVwie3snSEVJR0hUJyB8IGxvY2FsaXplfX1cIlxyXG4gICAgICBbc291cmNlVmFsdWVdPVwiaGVpZ2h0ICogc2NhbGVGYWN0b3JcIlxyXG4gICAgICBbbWluVmFsdWVdPVwiMFwiXHJcbiAgICAgIChkaW1lbnNpb25DaGFuZ2VkKT1cInNldEhlaWdodCgkZXZlbnQgLyBzY2FsZUZhY3RvcilcIlxyXG4gICAgPlxyXG4gICAgPC9ycC1kaW1lbnNpb24taW5wdXQ+XHJcblxyXG4gICAgPHJwLWRpbWVuc2lvbi1pbnB1dFxyXG4gICAgICB0aXRsZT1cInt7J1dJRFRIJyB8IGxvY2FsaXplfX1cIlxyXG4gICAgICBbc291cmNlVmFsdWVdPVwid2lkdGggKiBzY2FsZUZhY3RvclwiXHJcbiAgICAgIFttaW5WYWx1ZV09XCIwXCJcclxuICAgICAgKGRpbWVuc2lvbkNoYW5nZWQpPVwic2V0V2lkdGgoJGV2ZW50IC8gc2NhbGVGYWN0b3IpXCJcclxuICAgID5cclxuICAgIDwvcnAtZGltZW5zaW9uLWlucHV0PlxyXG5cclxuICAgIDxycC1kaW1lbnNpb24taW5wdXRcclxuICAgICAgdGl0bGU9XCJ7eydERVBUSCcgfCBsb2NhbGl6ZX19XCJcclxuICAgICAgW3NvdXJjZVZhbHVlXT1cImRlcHRoICogc2NhbGVGYWN0b3JcIlxyXG4gICAgICBbbWluVmFsdWVdPVwiMFwiXHJcbiAgICAgIChkaW1lbnNpb25DaGFuZ2VkKT1cInNldERlcHRoKCRldmVudCAvIHNjYWxlRmFjdG9yKVwiXHJcbiAgICA+XHJcbiAgICA8L3JwLWRpbWVuc2lvbi1pbnB1dD5cclxuXHJcbiAgICA8cnAtZGltZW5zaW9uLWlucHV0XHJcbiAgICAgIHRpdGxlPVwie3snRUxFVkFUSU9OJyB8IGxvY2FsaXplfX1cIlxyXG4gICAgICBbc291cmNlVmFsdWVdPVwiZWxldmF0aW9uICogc2NhbGVGYWN0b3JcIlxyXG4gICAgICBbbWluVmFsdWVdPVwiMFwiXHJcbiAgICAgIChkaW1lbnNpb25DaGFuZ2VkKT1cInNldEVsZXZhdGlvbigkZXZlbnQgLyBzY2FsZUZhY3RvcilcIlxyXG4gICAgPlxyXG4gICAgPC9ycC1kaW1lbnNpb24taW5wdXQ+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXY+XHJcbiAgICA8aDMgY2xhc3M9XCJtYXQtc3ViaGVhZGluZy0yXCI+IHt7ICdURVhUVVJFUycgfCBsb2NhbGl6ZX19PC9oMz5cclxuICAgIDxtYXQtZm9ybS1maWVsZCBpZD1cImZhY2Utc2VsZWN0LWZvcm1cIj5cclxuICAgICAgPG1hdC1sYWJlbD57e1wiU0VMRUNUX0ZBQ0VcIiB8IGxvY2FsaXplfX08L21hdC1sYWJlbD5cclxuICAgICAgPG1hdC1zZWxlY3QgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEZhY2VcIj5cclxuICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiZmFjZVJlZi5BbGxcIj57eyAnQUxMJyB8IGxvY2FsaXplIH19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJmYWNlUmVmLlRvcFwiPnt7ICdUT1AnIHwgbG9jYWxpemUgfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cImZhY2VSZWYuQm90dG9tXCI+e3sgJ0JPVFRPTScgfCBsb2NhbGl6ZSB9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiZmFjZVJlZi5Gcm9udFwiPnt7ICdGUk9OVCcgfCBsb2NhbGl6ZSB9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiZmFjZVJlZi5CYWNrXCI+e3sgJ0JBQ0snIHwgbG9jYWxpemUgfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cImZhY2VSZWYuTGVmdFwiPnt7ICdMRUZUJyB8IGxvY2FsaXplIH19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJmYWNlUmVmLlJpZ2h0XCI+e3sgJ1JJR0hUJyB8IGxvY2FsaXplIH19PC9tYXQtb3B0aW9uPlxyXG4gICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgIDxycC1hcHBlYXJhbmNlLXNlY3Rpb25cclxuICAgICAgdHlwZT1cInNoYXBlXCJcclxuICAgICAgW2hpZGVUZXh0dXJlVGFiXT1cInRydWVcIlxyXG4gICAgICBbY29sb3JdPVwic2tpbltzZWxlY3RlZEZhY2VdLmNvbG9yXCJcclxuICAgICAgW3BsYWluVGV4dHVyZV09XCJza2luW3NlbGVjdGVkRmFjZV0udGV4dHVyZVwiXHJcbiAgICAgIFt0ZXh0dXJlV2lkdGhdPVwic2tpbltzZWxlY3RlZEZhY2VdLndpZHRoKCkgKiAxMDBcIlxyXG4gICAgICBbdGV4dHVyZUhlaWdodF09XCJza2luW3NlbGVjdGVkRmFjZV0uaGVpZ2h0KCkgKiAxMDBcIlxyXG4gICAgICBbcGhvdG9PcHRpb25zXT1cInRleHR1cmVPcHRpb25zLlRpbGVzXCJcclxuICAgICAgKHNldFRleHR1cmUpPVwic2V0VGV4dHVyZSgkZXZlbnQpXCJcclxuICAgICAgKHNldENvbG9yKT1cInNldENvbG9yKCRldmVudClcIlxyXG4gICAgPlxyXG4gICAgPC9ycC1hcHBlYXJhbmNlLXNlY3Rpb24+XHJcbiAgPC9kaXY+XHJcbjwvc2VjdGlvbj5cclxuIl19
@@ -176,6 +176,9 @@ export class RoomService {
176
176
  this._assignOrphanEdges();
177
177
  yield this.updateFloorsAndEdges();
178
178
  this.walls.forEach(wall => wall.updateWallItems());
179
+ if (this.walls && this.walls.length > 0 && this._viewModeService.is3dViewActive()) {
180
+ this._updateEdgeVisibility(this._cameraService.camera.position);
181
+ }
179
182
  });
180
183
  }
181
184
  reset() {
@@ -335,4 +338,4 @@ RoomService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version:
335
338
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RoomService, decorators: [{
336
339
  type: Injectable
337
340
  }], ctorParameters: function () { return [{ type: i1.HomedecoratorAppService }, { type: i2.SceneService }, { type: i3.FloorService }, { type: i4.CeilingService }, { type: i5.CameraService }, { type: i6.ItemService }, { type: i7.ConfigurationService }, { type: i8.ViewModeService }, { type: i9.PresetsService }, { type: i10.ArService }]; } });
338
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vbS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hcHAvcGx1Z2lucy9yb29tLXBsYW5uZXIvY29tcG9uZW50cy9mbG9vcnBsYW5uZXIvc2VydmljZS9yb29tLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUdwRCxPQUFPLEVBQUMsT0FBTyxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBUyxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQWV6RixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFFakUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0saURBQWlELENBQUM7QUFDakYsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLCtCQUErQixDQUFDOzs7Ozs7Ozs7Ozs7QUFNcEQsTUFBTSxPQUFPLFdBQVc7SUFnQnRCLFlBQ1UsV0FBb0MsRUFDcEMsYUFBMkIsRUFDM0IsYUFBMkIsRUFDM0IsZUFBK0IsRUFDL0IsY0FBNkIsRUFDN0IsWUFBeUIsRUFDekIscUJBQTJDLEVBQzNDLGdCQUFpQyxFQUNqQyxjQUE4QixFQUM5QixVQUFxQjtRQVRyQixnQkFBVyxHQUFYLFdBQVcsQ0FBeUI7UUFDcEMsa0JBQWEsR0FBYixhQUFhLENBQWM7UUFDM0Isa0JBQWEsR0FBYixhQUFhLENBQWM7UUFDM0Isb0JBQWUsR0FBZixlQUFlLENBQWdCO1FBQy9CLG1CQUFjLEdBQWQsY0FBYyxDQUFlO1FBQzdCLGlCQUFZLEdBQVosWUFBWSxDQUFhO1FBQ3pCLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBc0I7UUFDM0MscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFpQjtRQUNqQyxtQkFBYyxHQUFk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LEtBQUssR0FBRyxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUM3QyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2dCQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUM3QjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7eUdBdFdVLFdBQVc7NkdBQVgsV0FBVzs0RkFBWCxXQUFXO2tCQUR2QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlLCBPbkRlc3Ryb3l9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XHJcbmltcG9ydCB7TWVzaCwgVmVjdG9yM30gZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQge1N1YmplY3QsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7Q29ybmVyLCBFZGdlLCBIYWxmRWRnZSwgUm9vbSwgV2FsbH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZTNkL2l0ZW1zL3dhbGwtb2JqZWN0cyc7XHJcbmltcG9ydCB7U2VsZWN0ZWRXYWxsRXZlbnR9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvcmUvaW50ZXJmYWNlL3NlbGVjdGVkLXdhbGwtZXZlbnQuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtTZWxlY3RlZEZsb29yRXZlbnR9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvcmUvaW50ZXJmYWNlL3NlbGVjdGVkLWZsb29yLWV2ZW50LmludGVyZmFjZSc7XHJcbmltcG9ydCB7RWRnZVZpc2liaWxpdHlDaGFuZ2VzfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlM2QvaW50ZXJmYWNlL2VkZ2UtdmlzaWJpbGl0eS1jaGFuZ2VzJztcclxuaW1wb3J0IHtUZXh0dXJlfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb3JlL21vZGVsL3RleHR1cmUnO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JBcHBTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1hcHAuc2VydmljZSc7XHJcbmltcG9ydCB7U2NlbmVTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlM2Qvc2VydmljZS9zY2VuZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtGbG9vclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUzZC9zZXJ2aWNlL2Zsb29yLnNlcnZpY2UnO1xyXG5pbXBvcnQge0NlaWxpbmdTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlM2Qvc2VydmljZS9jZWlsaW5nLnNlcnZpY2UnO1xyXG5pbXBvcnQge0NhbWVyYVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUzZC9zZXJ2aWNlL2NhbWVyYS5zZXJ2aWNlJztcclxuaW1wb3J0IHtJdGVtU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZTNkL3NlcnZpY2UvaXRlbS5zZXJ2aWNlJztcclxuaW1wb3J0IHtDb25maWd1cmF0aW9uU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2NvbmZpZ3VyYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7Vmlld01vZGVTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2Uvdmlldy1tb2RlLnNlcnZpY2UnO1xyXG5pbXBvcnQge1ByZXNldHNTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2UvcHJlc2V0cy5zZXJ2aWNlJztcclxuaW1wb3J0IHtBclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUzZC9zZXJ2aWNlL2FyLnNlcnZpY2UnO1xyXG5pbXBvcnQge1ZpZXdNb2RlfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb3JlL2VudW0vdmlldy1tb2RlLmVudW0nO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRpb25EYXRhfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb3JlL2ludGVyZmFjZS9jb25maWd1cmF0aW9uLWRhdGEuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtDb25maWd1cmF0aW9uS2V5fSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb3JlL2VudW0vY29uZmlndXJhdGlvbi1rZXkuZW51bSc7XHJcbmltcG9ydCB7VXRpbHN9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUzZC9jb3JlL3V0aWxzJztcclxuaW1wb3J0IHtUaHJlZU1lc2h9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUzZC9pdGVtcy90aHJlZS1tZXNoJztcclxuaW1wb3J0IHtGbG9vclBsYW5lSXRlbX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZTNkL2l0ZW1zL2Zsb29yLXBsYW5lLWl0ZW0nO1xyXG5pbXBvcnQge01ldGFkYXRhfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlM2QvaXRlbXMvbWV0YWRhdGEnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgUm9vbVNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG5cclxuICBwdWJsaWMgcm9vbXM6IFJvb21bXSA9IFtdO1xyXG4gIHB1YmxpYyB3YWxsczogV2FsbFtdID0gW107XHJcbiAgcHVibGljIG9ycGhhbldhbGxzOiBXYWxsW10gPSBbXTtcclxuICBwdWJsaWMgZmxvb3JUZXh0dXJlczoge307XHJcbiAgcHVibGljIGZsb29yQ29sb3JzOiB7fTtcclxuXHJcbiAgcHVibGljIHdhbGxTZWxlY3RlZDogU3ViamVjdDxTZWxlY3RlZFdhbGxFdmVudD4gPSBuZXcgU3ViamVjdDxTZWxlY3RlZFdhbGxFdmVudD4oKTtcclxuICBwdWJsaWMgZmxvb3JTZWxlY3RlZDogU3ViamVjdDxTZWxlY3RlZEZsb29yRXZlbnQ+ID0gbmV3IFN1YmplY3Q8U2VsZWN0ZWRGbG9vckV2ZW50PigpO1xyXG4gIHB1YmxpYyBlZGdlVmlzaWJpbGl0eUNoYW5nZWQ6IFN1YmplY3Q8RWRnZVZpc2liaWxpdHlDaGFuZ2VzPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIHByaXZhdGUgX2VkZ2VzOiBFZGdlW10gPSBbXTtcclxuICBwcml2YXRlIF9zdWJzOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG4gIHByaXZhdGUgX2RlZmF1bHRGbG9vclRleHR1cmU6IFRleHR1cmU7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfYXBwU2VydmljZTogSG9tZWRlY29yYXRvckFwcFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zY2VuZVNlcnZpY2U6IFNjZW5lU2VydmljZSxcclxuICAgIHByaXZhdGUgX2Zsb29yU2VydmljZTogRmxvb3JTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY2VpbGluZ1NlcnZpY2U6IENlaWxpbmdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY2FtZXJhU2VydmljZTogQ2FtZXJhU2VydmljZSxcclxuICAgIHByaXZhdGUgX2l0ZW1TZXJ2aWNlOiBJdGVtU2VydmljZSxcclxuICAgIHByaXZhdGUgX2NvbmZpZ3VyYXRpb25TZXJ2aWNlOiBDb25maWd1cmF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX3ZpZXdNb2RlU2VydmljZTogVmlld01vZGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfcHJlc2V0U2VydmljZTogUHJlc2V0c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9hclNlcnZpY2U6IEFyU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5fc3Vicy5wdXNoKFxyXG4gICAgICB0aGlzLl9hcHBTZXJ2aWNlLmZsb29yVGV4dHVyZXNMb2FkZWQuc3Vic2NyaWJlKChmbG9vcnM6IFRleHR1cmVbXSkgPT4ge1xyXG4gICAgICAgIGlmIChmbG9vcnMpIHtcclxuICAgICAgICAgIHRoaXMuX2RlZmF1bHRGbG9vclRleHR1cmUgPSBmbG9vcnMuZmluZChmID0+IGYuZGVmYXVsdCA9PT0gdHJ1ZSAmJiAhZi51c2VTdGFuZGFsb25lKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICB0aGlzLl9jYW1lcmFTZXJ2aWNlLmNhbWVyYU1vdmVtZW50Q2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fdXBkYXRlRWRnZVZpc2liaWxpdHkodGhpcy5fY2FtZXJhU2VydmljZS5jYW1lcmEucG9zaXRpb24pKSxcclxuICAgICAgdGhpcy5fcHJlc2V0U2VydmljZS5hZnRlckxvYWQuc3Vic2NyaWJlKCgpID0+IHRoaXMuX3VwZGF0ZUVkZ2VWaXNpYmlsaXR5KHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhLnBvc2l0aW9uKSksXHJcbiAgICAgIHRoaXMuX3ZpZXdNb2RlU2VydmljZS52aWV3TW9kZUNoYW5nZWQuc3Vic2NyaWJlKGFzeW5jIG1vZGUgPT4ge1xyXG4gICAgICAgIGlmICgobW9kZSA9PT0gVmlld01vZGUuUm9vbVBsYW4zRCB8fCBtb2RlID09PSBWaWV3TW9kZS5Ub3BWaWV3KSAmJiAhX2FyU2VydmljZS5hck1vZGVIYXNCZWVuQWN0aXZlKCkpIHtcclxuICAgICAgICAgIGF3YWl0IHRoaXMudXBkYXRlRmxvb3JzQW5kRWRnZXMoKTtcclxuICAgICAgICAgIHRoaXMuX3ZpZXdNb2RlU2VydmljZS5yb29tM0RVcGRhdGVkLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChtb2RlID09PSBWaWV3TW9kZS5WUikge1xyXG4gICAgICAgICAgdGhpcy5fc2V0QWxsRWRnZXNWaXNpYmxlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgdGhpcy5fY29uZmlndXJhdGlvblNlcnZpY2Uub25DaGFuZ2Uuc3Vic2NyaWJlKChjaGFuZ2VkOiBDb25maWd1cmF0aW9uRGF0YSkgPT4ge1xyXG4gICAgICAgICAgaWYgKENvbmZpZ3VyYXRpb25LZXkuU2hvd1dhbGxzIGluIGNoYW5nZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2hvd0hpZGVXYWxscyhjaGFuZ2VkW0NvbmZpZ3VyYXRpb25LZXkuU2hvd1dhbGxzXSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc3Vicy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRGaWxsZXJQbGFuZXMoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLl9lZGdlcy5yZWR1Y2UoKHBsYW5lcywgZWRnZSkgPT4ge1xyXG4gICAgICBjb25zdCBmaWxsZXJzID0gZWRnZS5nZXRUb3BTaWRlRmlsbGVycygpO1xyXG4gICAgICByZXR1cm4gcGxhbmVzLmNvbmNhdChmaWxsZXJzKTtcclxuICAgIH0sIFtdKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmbG9vclBsYW5lcygpOiBUSFJFRS5NZXNoW10ge1xyXG4gICAgcmV0dXJuIFV0aWxzLm1hcCh0aGlzLnJvb21zLCAocm9vbTogUm9vbSkgPT4ge1xyXG4gICAgICByZXR1cm4gcm9vbS5mbG9vclBsYW5lO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Rmxvb3JUZXh0dXJlKHV1aWQ6IHN0cmluZyk6IFRleHR1cmUge1xyXG4gICAgcmV0dXJuIHRoaXMuZmxvb3JUZXh0dXJlc1t1dWlkXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRGbG9vclRleHR1cmUocm9vbTogUm9vbSwgdGV4dHVyZTogVGV4dHVyZSk6IHZvaWQge1xyXG4gICAgdGhpcy5mbG9vclRleHR1cmVzW3Jvb20uZ2V0VXVpZCgpXSA9IHRleHR1cmU7XHJcbiAgICB0aGlzLmRlbGV0ZUZsb29yQ29sb3Iocm9vbS5nZXRVdWlkKCkpO1xyXG4gICAgdGhpcy5fZmxvb3JTZXJ2aWNlLnNldEZsb29yVGV4dHVyZShyb29tLCB0ZXh0dXJlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBkZWxldGVGbG9vclRleHR1cmUodXVpZDogc3RyaW5nKSB7XHJcbiAgICBkZWxldGUgdGhpcy5mbG9vclRleHR1cmVzW3V1aWRdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEZsb29yQ29sb3IodXVpZDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mbG9vckNvbG9yc1t1dWlkXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRGbG9vckNvbG9yKHJvb206IFJvb20sIGNvbG9yOiBudW1iZXIpIHtcclxuICAgIHRoaXMuZmxvb3JDb2xvcnNbcm9vbS5nZXRVdWlkKCldID0gY29sb3I7XHJcbiAgICB0aGlzLmRlbGV0ZUZsb29yVGV4dHVyZShyb29tLmdldFV1aWQoKSk7XHJcbiAgICB0aGlzLl9mbG9vclNlcnZpY2Uuc2V0Rmxvb3JDb2xvcihyb29tLCBjb2xvcik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZGVsZXRlRmxvb3JDb2xvcih1dWlkOiBzdHJpbmcpIHtcclxuICAgIGRlbGV0ZSB0aGlzLmZsb29yQ29sb3JzW3V1aWRdO1xyXG4gIH1cclxuXHJcbiAgLy8gaGFja1xyXG4gIHB1YmxpYyB3YWxsRWRnZXMoKTogSGFsZkVkZ2VbXSB7XHJcbiAgICBjb25zdCBlZGdlcyA9IFtdO1xyXG5cclxuICAgIHRoaXMud2FsbHMuZm9yRWFjaCgod2FsbCkgPT4ge1xyXG4gICAgICBpZiAod2FsbC5mcm9udEVkZ2UpIHtcclxuICAgICAgICBlZGdlcy5wdXNoKHdhbGwuZnJvbnRFZGdlKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAod2FsbC5iYWNrRWRnZSkge1xyXG4gICAgICAgIGVkZ2VzLnB1c2god2FsbC5iYWNrRWRnZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGVkZ2VzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldENsb3Nlc3RXYWxsRWRnZShpdGVtWDogbnVtYmVyLCBpdGVtWjogbnVtYmVyKTogSGFsZkVkZ2Uge1xyXG4gICAgY29uc3Qgd2FsbEVkZ2VzID0gdGhpcy53YWxsRWRnZXMoKTtcclxuXHJcbiAgICBsZXQgd2FsbEVkZ2UgPSBudWxsO1xyXG4gICAgbGV0IG1pbkRpc3RhbmNlID0gbnVsbDtcclxuXHJcbiAgICB3YWxsRWRnZXMuZm9yRWFjaCgoZWRnZTogSGFsZkVkZ2UpID0+IHtcclxuICAgICAgY29uc3QgZGlzdGFuY2UgPSBlZGdlLmRpc3RhbmNlVG8oaXRlbVgsIGl0ZW1aKTtcclxuICAgICAgaWYgKG1pbkRpc3RhbmNlID09PSBudWxsIHx8IGRpc3RhbmNlIDwgbWluRGlzdGFuY2UpIHtcclxuICAgICAgICBtaW5EaXN0YW5jZSA9IGRpc3RhbmNlO1xyXG4gICAgICAgIHdhbGxFZGdlID0gZWRnZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHdhbGxFZGdlO1xyXG4gIH1cclxuXHJcbiAgLy8gaGFja1xyXG4gIHB1YmxpYyB3YWxsRWRnZVBsYW5lcygpOiBUSFJFRS5NZXNoW10ge1xyXG4gICAgY29uc3QgcGxhbmVzID0gW107XHJcbiAgICB0aGlzLndhbGxzLmZvckVhY2goKHdhbGwpID0+IHtcclxuICAgICAgaWYgKHdhbGwuZnJvbnRFZGdlKSB7XHJcbiAgICAgICAgcGxhbmVzLnB1c2god2FsbC5mcm9udEVkZ2UucGxhbmUpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh3YWxsLmJhY2tFZGdlKSB7XHJcbiAgICAgICAgcGxhbmVzLnB1c2god2FsbC5iYWNrRWRnZS5wbGFuZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHBsYW5lcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjZWlsaW5nUGxhbmVzKCk6IE1lc2hbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2VpbGluZ1NlcnZpY2UucGxhbmVzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHdhbGxSZW1vdmVkKHdhbGw6IFdhbGwpOiB2b2lkIHtcclxuICAgIHdhbGwuaXRlbXMuZm9yRWFjaChpID0+IHRoaXMuX3NjZW5lU2VydmljZS5yZW1vdmVPYmplY3QoaSkpO1xyXG4gICAgd2FsbC5vbkl0ZW1zLmZvckVhY2goaSA9PiB0aGlzLl9zY2VuZVNlcnZpY2UucmVtb3ZlT2JqZWN0KGkpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjcmVhdGVXYWxsKHN0YXJ0OiBDb3JuZXIsIGVuZDogQ29ybmVyKTogV2FsbCB7XHJcbiAgICBjb25zdCB3YWxsID0gbmV3IFdhbGwoc3RhcnQsIGVuZCk7XHJcbiAgICB3YWxsLmhlaWdodCA9IHRoaXMuX2NvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldFZhbHVlKENvbmZpZ3VyYXRpb25LZXkuV2FsbEhlaWdodCkgLyAxMDA7XHJcbiAgICB3YWxsLnRoaWNrbmVzcyA9IHRoaXMuX2NvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldFZhbHVlKENvbmZpZ3VyYXRpb25LZXkuV2FsbFRoaWNrbmVzcykgLyAxMDA7XHJcbiAgICB0aGlzLndhbGxzLnB1c2god2FsbCk7XHJcbiAgICByZXR1cm4gd2FsbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW1vdmVXYWxsKHdhbGw6IFdhbGwpOiB2b2lkIHtcclxuICAgIHdhbGwuaXRlbXMuZm9yRWFjaChpID0+IHRoaXMuX2l0ZW1TZXJ2aWNlLnJlbW92ZUl0ZW0oaSkpO1xyXG4gICAgd2FsbC5vbkl0ZW1zLmZvckVhY2goaSA9PiB0aGlzLl9pdGVtU2VydmljZS5yZW1vdmVJdGVtKGkpKTtcclxuICAgIFV0aWxzLnJlbW92ZVZhbHVlKHRoaXMud2FsbHMsIHdhbGwpO1xyXG4gICAgd2FsbC5yZW1vdmUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGVXYWxsSGVpZ2h0cyhuZXdIZWlnaHQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy53YWxscy5mb3JFYWNoKHdhbGwgPT4ge1xyXG4gICAgICB3YWxsLmhlaWdodCA9IG5ld0hlaWdodCAvIDEwMDtcclxuICAgICAgd2FsbC5maXJlUmVkcmF3KCk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMudXBkYXRlQ2VpbGluZ3MoKTtcclxuICAgIHRoaXMuX3NjZW5lU2VydmljZS5uZWVkc1JlbmRlciA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgdXBkYXRlUm9vbXMocm9vbUNvcm5lcnM6IENvcm5lcltdW10pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMud2FsbHMuZm9yRWFjaCh3YWxsID0+IHdhbGwucmVzZXRGcm9udEJhY2soKSk7XHJcbiAgICB0aGlzLnJvb21zLmZvckVhY2gociA9PiByLmRpc3Bvc2UoKSk7XHJcbiAgICB0aGlzLnJvb21zID0gW107XHJcbiAgICByb29tQ29ybmVycy5mb3JFYWNoKChjb3JuZXJzOiBDb3JuZXJbXSkgPT4ge1xyXG4gICAgICB0aGlzLnJvb21zLnB1c2gobmV3IFJvb20oY29ybmVycywgIHRoaXMuX2RlZmF1bHRGbG9vclRleHR1cmUpKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fYXNzaWduT3JwaGFuRWRnZXMoKTtcclxuICAgIGF3YWl0IHRoaXMudXBkYXRlRmxvb3JzQW5kRWRnZXMoKTtcclxuICAgIHRoaXMud2FsbHMuZm9yRWFjaCh3YWxsID0+IHdhbGwudXBkYXRlV2FsbEl0ZW1zKCkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlc2V0KCk6IHZvaWQge1xyXG4gICAgdGhpcy53YWxscy5mb3JFYWNoKCh3YWxsKSA9PiB7XHJcbiAgICAgIHRoaXMucmVtb3ZlV2FsbCh3YWxsKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy53YWxscy5sZW5ndGggPSAwO1xyXG4gICAgdGhpcy5mbG9vckNvbG9ycyA9IHt9O1xyXG4gICAgdGhpcy5mbG9vclRleHR1cmVzID0ge307XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2VsZWN0V2FsbChldmVudDogTW91c2VFdmVudCwgd2FsbDogV2FsbCwgZWRnZTogSGFsZkVkZ2UpOiB2b2lkIHtcclxuICAgIHRoaXMud2FsbFNlbGVjdGVkLm5leHQoe2V2ZW50OiBldmVudCwgd2FsbDogd2FsbCwgZWRnZTogZWRnZX0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlbGVjdEZsb29yKGV2ZW50OiBNb3VzZUV2ZW50LCByb29tOiBSb29tKTogdm9pZCB7XHJcbiAgICB0aGlzLmZsb29yU2VsZWN0ZWQubmV4dCh7ZXZlbnQ6IGV2ZW50LCByb29tOiByb29tfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Um9vbUNlbnRlcigpOiBWZWN0b3IzIHtcclxuICAgIGNvbnN0IGZsb29ycyA9IHRoaXMuZmxvb3JQbGFuZXMoKTtcclxuICAgIHJldHVybiBmbG9vcnMgJiYgZmxvb3JzLmxlbmd0aCA+IDAgPyBmbG9vcnNbMF0ucG9zaXRpb24gOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHVwZGF0ZUZsb29yc0FuZEVkZ2VzKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5fZmxvb3JTZXJ2aWNlLnJlbW92ZUZsb29ycygpO1xyXG4gICAgdGhpcy5fZWRnZXMuZm9yRWFjaCgoZWRnZTogRWRnZSkgPT4ge1xyXG4gICAgICBlZGdlLmdldFBsYW5lcygpLmZvckVhY2goKHBsYW5lOiBNZXNoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2NlbmVTZXJ2aWNlLnJlbW92ZU9iamVjdChwbGFuZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9lZGdlcy5sZW5ndGggPSAwO1xyXG5cclxuICAgIC8vIGRyYXcgZmxvb3JzXHJcbiAgICBjb25zdCBzb3J0ZWRSb29tczogUm9vbVtdID0gdGhpcy5yb29tcy5zb3J0KChhLCBiKSA9PiBhLmFyZWEgLSBiLmFyZWEpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3J0ZWRSb29tcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCByb29tOiBSb29tID0gc29ydGVkUm9vbXNbaV07XHJcbiAgICAgIGNvbnN0IHN0b3JlZENvbG9yID0gdGhpcy5nZXRGbG9vckNvbG9yKHJvb20uZ2V0VXVpZCgpKTtcclxuICAgICAgY29uc3Qgc3RvcmVkVGV4dHVyZTogVGV4dHVyZSA9IHRoaXMuZ2V0Rmxvb3JUZXh0dXJlKHJvb20uZ2V0VXVpZCgpKTtcclxuICAgICAgY29uc3QgY29sb3IgPSBzdG9yZWRDb2xvciA/IHN0b3JlZENvbG9yIDogcm9vbS5mbG9vckNvbG9yO1xyXG4gICAgICBjb25zdCB0ZXh0dXJlOiBUZXh0dXJlID0gc3RvcmVkVGV4dHVyZSA/IHN0b3JlZFRleHR1cmUgOiAocm9vbS5mbG9vclRleHR1cmUgPyByb29tLmZsb29yVGV4dHVyZSA6IHVuZGVmaW5lZCk7XHJcblxyXG4gICAgICBsZXQgbWV0YWRhdGE6IE1ldGFkYXRhO1xyXG4gICAgICBpZiAoc3RvcmVkVGV4dHVyZSAhPT0gdW5kZWZpbmVkICYmICdtZXRhZGF0YScgaW4gc3RvcmVkVGV4dHVyZSkge1xyXG4gICAgICAgIG1ldGFkYXRhID0gc3RvcmVkVGV4dHVyZS5tZXRhZGF0YTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBtZXRhZGF0YSA9IG51bGw7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGZsb29yUGxhbmU6IEZsb29yUGxhbmVJdGVtID0gYXdhaXQgdGhpcy5fZmxvb3JTZXJ2aWNlLmdlbmVyYXRlRmxvb3JQbGFuZShcclxuICAgICAgICBzdG9yZWRUZXh0dXJlID8gbnVsbCA6IGNvbG9yLFxyXG4gICAgICAgIHN0b3JlZENvbG9yID8gKHN0b3JlZFRleHR1cmUgPyB0ZXh0dXJlIDogbnVsbCkgOiB0ZXh0dXJlLFxyXG4gICAgICAgIG1ldGFkYXRhID8gbWV0YWRhdGEgOiBudWxsLFxyXG4gICAgICAgIHJvb20uaW50ZXJpb3JDb3JuZXJzLFxyXG4gICAgICAgIHNvcnRlZFJvb21zLnNsaWNlKDAsIGkpXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBmbG9vclBsYW5lLmNoaWxkcmVuWzBdLnVzZXJEYXRhLnJvb20gPSByb29tO1xyXG4gICAgICByb29tLmZsb29yVGV4dHVyZSA9IHRleHR1cmU7XHJcbiAgICAgIHJvb20uZmxvb3JDb2xvciA9IGNvbG9yO1xyXG4gICAgICByb29tLmZsb29yUGxhbmUgPSBmbG9vclBsYW5lO1xyXG4gICAgfVxyXG4gICAgLy8gYXdhaXQgdGhpcy5yb29tc1xyXG4gICAgLy8gICAuc29ydCgoYSwgYikgPT4gYS5hcmVhIC0gYi5hcmVhKVxyXG4gICAgLy8gICAuZm9yRWFjaChhc3luYyAocm9vbSwgaW5kZXgsIGFycmF5KSA9PiB7XHJcbiAgICAvLyAgICAgY29uc3Qgc3RvcmVkQ29sb3IgPSB0aGlzLmdldEZsb29yQ29sb3Iocm9vbS5nZXRVdWlkKCkpO1xyXG4gICAgLy8gICAgIGNvbnN0IHN0b3JlZFRleHR1cmUgPSB0aGlzLmdldEZsb29yVGV4dHVyZShyb29tLmdldFV1aWQoKSk7XHJcbiAgICAvLyAgICAgY29uc3QgY29sb3IgPSBzdG9yZWRDb2xvciA/IHN0b3JlZENvbG9yIDogcm9vbS5mbG9vckNvbG9yO1xyXG4gICAgLy8gICAgIGNvbnN0IHRleHR1cmUgPSBzdG9yZWRUZXh0dXJlID8gc3RvcmVkVGV4dHVyZSA6IChyb29tLmZsb29yVGV4dHVyZSA/IHJvb20uZmxvb3JUZXh0dXJlIDogdW5kZWZpbmVkKTtcclxuICAgIC8vICAgICBjb25zdCBmbG9vclBsYW5lOiBGbG9vclBsYW5lSXRlbSA9IGF3YWl0IHRoaXMuX2Zsb29yU2VydmljZS5nZW5lcmF0ZUZsb29yUGxhbmUoXHJcbiAgICAvLyAgICAgICBzdG9yZWRUZXh0dXJlID8gbnVsbCA6IGNvbG9yLCBzdG9yZWRDb2xvciA/IChzdG9yZWRUZXh0dXJlID8gdGV4dHVyZSA6IG51bGwpIDogdGV4dHVyZSwgcm9vbS5pbnRlcmlvckNvcm5lcnMsIGFycmF5LnNsaWNlKDAsIGluZGV4KSk7XHJcbiAgICAvLyAgICAgZmxvb3JQbGFuZS51c2VyRGF0YS5yb29tID0gcm9vbTtcclxuICAgIC8vICAgICByb29tLmZsb29yVGV4dHVyZSA9IHRleHR1cmU7XHJcbiAgICAvLyAgICAgcm9vbS5mbG9vckNvbG9yID0gY29sb3I7XHJcbiAgICAvLyAgICAgcm9vbS5mbG9vclBsYW5lID0gZmxvb3JQbGFuZTtcclxuICAgIC8vICAgfSk7XHJcbiAgICAvL1xyXG4gICAgLy8gZHJhdyBlZGdlc1xyXG4gICAgY29uc3QgZWRnZXMgPSB0aGlzLndhbGxFZGdlcygpO1xyXG4gICAgaWYgKGVkZ2VzICYmIGVkZ2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlZGdlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGhhbGZFZGdlID0gZWRnZXNbaV07XHJcbiAgICAgICAgY29uc3QgbmV3RWRnZTogRWRnZSA9IG5ldyBFZGdlKGhhbGZFZGdlKTtcclxuICAgICAgICBhd2FpdCBuZXdFZGdlLmluaXQoKTtcclxuICAgICAgICBoYWxmRWRnZS5lZGdlcy5wdXNoKG5ld0VkZ2UpO1xyXG4gICAgICAgIHRoaXMuX2VkZ2VzLnB1c2gobmV3RWRnZSk7XHJcbiAgICAgICAgY29uc3QgcGxhbmVzID0gbmV3RWRnZS5nZXRQbGFuZXMoKTtcclxuICAgICAgICBwbGFuZXMuZm9yRWFjaCgocGxhbmUpID0+IHtcclxuICAgICAgICAgIHRoaXMuX3NjZW5lU2VydmljZS5hZGRPYmplY3QocGxhbmUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZHJhdyBjZWlsaW5nc1xyXG4gICAgdGhpcy51cGRhdGVDZWlsaW5ncygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHVwZGF0ZUNlaWxpbmdzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fY2VpbGluZ1NlcnZpY2UucmVtb3ZlQ2VpbGluZ3MoKTtcclxuICAgIHRoaXMucm9vbXNcclxuICAgICAgLnNvcnQoKGEsIGIpID0+IGEuYXJlYSAtIGIuYXJlYSlcclxuICAgICAgLmZvckVhY2goKHJvb206IFJvb20pID0+IHtcclxuICAgICAgICByb29tLnVwZGF0ZVdhbGxIZWlnaHRzKCk7XHJcbiAgICAgICAgY29uc3QgY2VpbGluZzogVGhyZWVNZXNoID0gdGhpcy5fY2VpbGluZ1NlcnZpY2UuZ2VuZXJhdGVDZWlsaW5nUGxhbmUoMHhlNWU1ZTUsIHJvb20uaW50ZXJpb3JDb3JuZXJzLCByb29tLmVkZ2VIZWlnaHRzKTtcclxuICAgICAgICBpZiAoY2VpbGluZykge1xyXG4gICAgICAgICAgY2VpbGluZy51c2VyRGF0YS5yb29tID0gcm9vbTtcclxuICAgICAgICAgIHJvb20uY2VpbGluZ1BsYW5lID0gY2VpbGluZztcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlc2V0QWxsUm9vbXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnJvb21zID0gW107XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zaG93SGlkZVdhbGxzKHNob3c6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMud2FsbHMuZm9yRWFjaCh3ID0+IHcuc2hvd0hpZGVXYWxsKHNob3cpKTtcclxuICAgIHRoaXMuX3NjZW5lU2VydmljZS5uZWVkc1JlbmRlciA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cGRhdGVFZGdlVmlzaWJpbGl0eShjYW1lcmFQb3NpdGlvbjogVmVjdG9yMyk6IHZvaWQge1xyXG4gICAgdGhpcy53YWxsRWRnZXMoKS5mb3JFYWNoKGUgPT4ge1xyXG4gICAgICBjb25zdCB2aXNpYmlsaXR5Q2hhbmdlID0gZS51cGRhdGVWaXNpYmlsaXR5KGNhbWVyYVBvc2l0aW9uKTtcclxuICAgICAgaWYgKHZpc2liaWxpdHlDaGFuZ2UgIT09IG51bGwpIHtcclxuICAgICAgICBjb25zdCBlZGdlVmlzaWJpbGl0eUNoYW5nZXM6IEVkZ2VWaXNpYmlsaXR5Q2hhbmdlcyA9IHtcclxuICAgICAgICAgIGVkZ2U6IGUsXHJcbiAgICAgICAgICB2aXNpYmlsaXR5OiB2aXNpYmlsaXR5Q2hhbmdlXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmVkZ2VWaXNpYmlsaXR5Q2hhbmdlZC5uZXh0KGVkZ2VWaXNpYmlsaXR5Q2hhbmdlcyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2V0QWxsRWRnZXNWaXNpYmxlKCkge1xyXG4gICAgdGhpcy53YWxsRWRnZXMoKS5mb3JFYWNoKChlOiBIYWxmRWRnZSkgPT4ge1xyXG4gICAgICBlLnVwZGF0ZVZpc2libGl0eSh0cnVlKTtcclxuICAgICAgY29uc3QgZWRnZVZpc2liaWxpdHlDaGFuZ2VzOiBFZGdlVmlzaWJpbGl0eUNoYW5nZXMgPSB7XHJcbiAgICAgICAgZWRnZTogZSxcclxuICAgICAgICB2aXNpYmlsaXR5OiB0cnVlXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMuZWRnZVZpc2liaWxpdHlDaGFuZ2VkLm5leHQoZWRnZVZpc2liaWxpdHlDaGFuZ2VzKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlRmxvb3JUZXh0dXJlcygpIHtcclxuICAgIGNvbnN0IHV1aWRzID0gVXRpbHMubWFwKHRoaXMucm9vbXMsIGZ1bmN0aW9uIChyb29tKSB7XHJcbiAgICAgIHJldHVybiByb29tLmdldFV1aWQoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGZvciAoY29uc3QgdXVpZCBpbiB0aGlzLmZsb29yVGV4dHVyZXMpIHtcclxuICAgICAgaWYgKCFVdGlscy5oYXNWYWx1ZSh1dWlkcywgdXVpZCkpIHtcclxuICAgICAgICBkZWxldGUgdGhpcy5mbG9vclRleHR1cmVzW3V1aWRdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9hc3NpZ25PcnBoYW5FZGdlcygpIHtcclxuICAgIC8vIGtpbmRhIGhhY2t5XHJcbiAgICAvLyBmaW5kIG9ycGhhbmVkIHdhbGwgc2VnbWVudHMgKGkuZS4gbm90IHBhcnQgb2Ygcm9vbXMpIGFuZFxyXG4gICAgLy8gZ2l2ZSB0aGVtIGVkZ2VzXHJcbiAgICB0aGlzLm9ycGhhbldhbGxzID0gW107XHJcbiAgICB0aGlzLndhbGxzLmZvckVhY2goKHdhbGwpID0+IHtcclxuICAgICAgaWYgKCF3YWxsLmJhY2tFZGdlICYmICF3YWxsLmZyb250RWRnZSkge1xyXG4gICAgICAgIHdhbGwub3JwaGFuID0gdHJ1ZTtcclxuICAgICAgICBjb25zdCBiYWNrID0gbmV3IEhhbGZFZGdlKG51bGwsIHdhbGwsIGZhbHNlKTtcclxuICAgICAgICBiYWNrLmdlbmVyYXRlUGxhbmUoKTtcclxuICAgICAgICBjb25zdCBmcm9udCA9IG5ldyBIYWxmRWRnZShudWxsLCB3YWxsLCB0cnVlKTtcclxuICAgICAgICBmcm9udC5nZW5lcmF0ZVBsYW5lKCk7XHJcbiAgICAgICAgd2FsbC51cGRhdGVJbldhbGxJdGVtcygpO1xyXG4gICAgICAgIHRoaXMub3JwaGFuV2FsbHMucHVzaCh3YWxsKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
341
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vbS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hcHAvcGx1Z2lucy9yb29tLXBsYW5uZXIvY29tcG9uZW50cy9mbG9vcnBsYW5uZXIvc2VydmljZS9yb29tLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUdwRCxPQUFPLEVBQUMsT0FBTyxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBUyxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQWV6RixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFFakUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0saURBQWlELENBQUM7QUFDakYsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLCtCQUErQixDQUFDOzs7Ozs7Ozs7Ozs7QUFNcEQsTUFBTSxPQUFPLFdBQVc7SUFnQnRCLFlBQ1UsV0FBb0MsRUFDcEMsYUFBMkIsRUFDM0IsYUFBMkIsRUFDM0IsZUFBK0IsRUFDL0IsY0FBNkIsRUFDN0IsWUFBeUIsRUFDekIscUJBQTJDLEVBQzNDLGdCQUFpQyxFQUNqQyxjQUE4QixFQUM5QixVQUFxQjtRQVRyQixnQkFBVyxHQUFYLFdBQVcsQ0FBeUI7UUFDcEMsa0JBQWEsR0FBYixhQUFhLENBQWM7UUFDM0Isa0JBQWEsR0FBYixhQUFhLENBQWM7UUFDM0Isb0JBQWUsR0FBZixlQUFlLENBQWdCO1FBQy9CLG1CQUFjLEdBQWQsY0FBYyxDQUFlO1FBQzdCLGlCQUFZLEdBQVosWUFBWSxDQUFhO1FBQ3pCLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBc0I7UUFDM0MscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFpQjtRQUNqQyxtQkFBYyxHQUFk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UUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDckMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Z0JBQ25CLE1BQU0sSUFBSSxHQUFHLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQzdDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDckIsTUFBTSxLQUFLLEdBQUcsSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDN0MsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUN0QixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDN0I7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7O3lHQXpXVSxXQUFXOzZHQUFYLFdBQVc7NEZBQVgsV0FBVztrQkFEdkIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZSwgT25EZXN0cm95fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQge01lc2gsIFZlY3RvcjN9IGZyb20gJ3RocmVlJztcclxuaW1wb3J0IHtTdWJqZWN0LCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge0Nvcm5lciwgRWRnZSwgSGFsZkVkZ2UsIFJvb20sIFdhbGx9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUzZC9pdGVtcy93YWxsLW9iamVjdHMnO1xyXG5pbXBvcnQge1NlbGVjdGVkV2FsbEV2ZW50fSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb3JlL2ludGVyZmFjZS9zZWxlY3RlZC13YWxsLWV2ZW50LmludGVyZmFjZSc7XHJcbmltcG9ydCB7U2VsZWN0ZWRGbG9vckV2ZW50fSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb3JlL2ludGVyZmFjZS9zZWxlY3RlZC1mbG9vci1ldmVudC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge0VkZ2VWaXNpYmlsaXR5Q2hhbmdlc30gZnJvbSAnLi4vLi4vLi4vLi4vY29yZTNkL2ludGVyZmFjZS9lZGdlLXZpc2liaWxpdHktY2hhbmdlcyc7XHJcbmltcG9ydCB7VGV4dHVyZX0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29yZS9tb2RlbC90ZXh0dXJlJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yQXBwU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3ItYXBwLnNlcnZpY2UnO1xyXG5pbXBvcnQge1NjZW5lU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZTNkL3NlcnZpY2Uvc2NlbmUuc2VydmljZSc7XHJcbmltcG9ydCB7Rmxvb3JTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlM2Qvc2VydmljZS9mbG9vci5zZXJ2aWNlJztcclxuaW1wb3J0IHtDZWlsaW5nU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZTNkL3NlcnZpY2UvY2VpbGluZy5zZXJ2aWNlJztcclxuaW1wb3J0IHtDYW1lcmFTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlM2Qvc2VydmljZS9jYW1lcmEuc2VydmljZSc7XHJcbmltcG9ydCB7SXRlbVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUzZC9zZXJ2aWNlL2l0ZW0uc2VydmljZSc7XHJcbmltcG9ydCB7Q29uZmlndXJhdGlvblNlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvcmUvc2VydmljZS9jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQge1ZpZXdNb2RlU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlL3ZpZXctbW9kZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtQcmVzZXRzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlL3ByZXNldHMuc2VydmljZSc7XHJcbmltcG9ydCB7QXJTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlM2Qvc2VydmljZS9hci5zZXJ2aWNlJztcclxuaW1wb3J0IHtWaWV3TW9kZX0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29yZS9lbnVtL3ZpZXctbW9kZS5lbnVtJztcclxuaW1wb3J0IHtDb25maWd1cmF0aW9uRGF0YX0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29yZS9pbnRlcmZhY2UvY29uZmlndXJhdGlvbi1kYXRhLmludGVyZmFjZSc7XHJcbmltcG9ydCB7Q29uZmlndXJhdGlvbktleX0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29yZS9lbnVtL2NvbmZpZ3VyYXRpb24ta2V5LmVudW0nO1xyXG5pbXBvcnQge1V0aWxzfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlM2QvY29yZS91dGlscyc7XHJcbmltcG9ydCB7VGhyZWVNZXNofSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlM2QvaXRlbXMvdGhyZWUtbWVzaCc7XHJcbmltcG9ydCB7Rmxvb3JQbGFuZUl0ZW19IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUzZC9pdGVtcy9mbG9vci1wbGFuZS1pdGVtJztcclxuaW1wb3J0IHtNZXRhZGF0YX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZTNkL2l0ZW1zL21ldGFkYXRhJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFJvb21TZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuXHJcbiAgcHVibGljIHJvb21zOiBSb29tW10gPSBbXTtcclxuICBwdWJsaWMgd2FsbHM6IFdhbGxbXSA9IFtdO1xyXG4gIHB1YmxpYyBvcnBoYW5XYWxsczogV2FsbFtdID0gW107XHJcbiAgcHVibGljIGZsb29yVGV4dHVyZXM6IHt9O1xyXG4gIHB1YmxpYyBmbG9vckNvbG9yczoge307XHJcblxyXG4gIHB1YmxpYyB3YWxsU2VsZWN0ZWQ6IFN1YmplY3Q8U2VsZWN0ZWRXYWxsRXZlbnQ+ID0gbmV3IFN1YmplY3Q8U2VsZWN0ZWRXYWxsRXZlbnQ+KCk7XHJcbiAgcHVibGljIGZsb29yU2VsZWN0ZWQ6IFN1YmplY3Q8U2VsZWN0ZWRGbG9vckV2ZW50PiA9IG5ldyBTdWJqZWN0PFNlbGVjdGVkRmxvb3JFdmVudD4oKTtcclxuICBwdWJsaWMgZWRnZVZpc2liaWxpdHlDaGFuZ2VkOiBTdWJqZWN0PEVkZ2VWaXNpYmlsaXR5Q2hhbmdlcz4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBwcml2YXRlIF9lZGdlczogRWRnZVtdID0gW107XHJcbiAgcHJpdmF0ZSBfc3ViczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuICBwcml2YXRlIF9kZWZhdWx0Rmxvb3JUZXh0dXJlOiBUZXh0dXJlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX2FwcFNlcnZpY2U6IEhvbWVkZWNvcmF0b3JBcHBTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2NlbmVTZXJ2aWNlOiBTY2VuZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9mbG9vclNlcnZpY2U6IEZsb29yU2VydmljZSxcclxuICAgIHByaXZhdGUgX2NlaWxpbmdTZXJ2aWNlOiBDZWlsaW5nU2VydmljZSxcclxuICAgIHByaXZhdGUgX2NhbWVyYVNlcnZpY2U6IENhbWVyYVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9pdGVtU2VydmljZTogSXRlbVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jb25maWd1cmF0aW9uU2VydmljZTogQ29uZmlndXJhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF92aWV3TW9kZVNlcnZpY2U6IFZpZXdNb2RlU2VydmljZSxcclxuICAgIHByaXZhdGUgX3ByZXNldFNlcnZpY2U6IFByZXNldHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfYXJTZXJ2aWNlOiBBclNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMuX3N1YnMucHVzaChcclxuICAgICAgdGhpcy5fYXBwU2VydmljZS5mbG9vclRleHR1cmVzTG9hZGVkLnN1YnNjcmliZSgoZmxvb3JzOiBUZXh0dXJlW10pID0+IHtcclxuICAgICAgICBpZiAoZmxvb3JzKSB7XHJcbiAgICAgICAgICB0aGlzLl9kZWZhdWx0Rmxvb3JUZXh0dXJlID0gZmxvb3JzLmZpbmQoZiA9PiBmLmRlZmF1bHQgPT09IHRydWUgJiYgIWYudXNlU3RhbmRhbG9uZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgdGhpcy5fY2FtZXJhU2VydmljZS5jYW1lcmFNb3ZlbWVudENoYW5nZWQuc3Vic2NyaWJlKCgpID0+IHRoaXMuX3VwZGF0ZUVkZ2VWaXNpYmlsaXR5KHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhLnBvc2l0aW9uKSksXHJcbiAgICAgIHRoaXMuX3ByZXNldFNlcnZpY2UuYWZ0ZXJMb2FkLnN1YnNjcmliZSgoKSA9PiB0aGlzLl91cGRhdGVFZGdlVmlzaWJpbGl0eSh0aGlzLl9jYW1lcmFTZXJ2aWNlLmNhbWVyYS5wb3NpdGlvbikpLFxyXG4gICAgICB0aGlzLl92aWV3TW9kZVNlcnZpY2Uudmlld01vZGVDaGFuZ2VkLnN1YnNjcmliZShhc3luYyBtb2RlID0+IHtcclxuICAgICAgICBpZiAoKG1vZGUgPT09IFZpZXdNb2RlLlJvb21QbGFuM0QgfHwgbW9kZSA9PT0gVmlld01vZGUuVG9wVmlldykgJiYgIV9hclNlcnZpY2UuYXJNb2RlSGFzQmVlbkFjdGl2ZSgpKSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUZsb29yc0FuZEVkZ2VzKCk7XHJcbiAgICAgICAgICB0aGlzLl92aWV3TW9kZVNlcnZpY2Uucm9vbTNEVXBkYXRlZC5uZXh0KHRydWUpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobW9kZSA9PT0gVmlld01vZGUuVlIpIHtcclxuICAgICAgICAgIHRoaXMuX3NldEFsbEVkZ2VzVmlzaWJsZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIHRoaXMuX2NvbmZpZ3VyYXRpb25TZXJ2aWNlLm9uQ2hhbmdlLnN1YnNjcmliZSgoY2hhbmdlZDogQ29uZmlndXJhdGlvbkRhdGEpID0+IHtcclxuICAgICAgICAgIGlmIChDb25maWd1cmF0aW9uS2V5LlNob3dXYWxscyBpbiBjaGFuZ2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Nob3dIaWRlV2FsbHMoY2hhbmdlZFtDb25maWd1cmF0aW9uS2V5LlNob3dXYWxsc10pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3N1YnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0RmlsbGVyUGxhbmVzKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZWRnZXMucmVkdWNlKChwbGFuZXMsIGVkZ2UpID0+IHtcclxuICAgICAgY29uc3QgZmlsbGVycyA9IGVkZ2UuZ2V0VG9wU2lkZUZpbGxlcnMoKTtcclxuICAgICAgcmV0dXJuIHBsYW5lcy5jb25jYXQoZmlsbGVycyk7XHJcbiAgICB9LCBbXSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZmxvb3JQbGFuZXMoKTogVEhSRUUuTWVzaFtdIHtcclxuICAgIHJldHVybiBVdGlscy5tYXAodGhpcy5yb29tcywgKHJvb206IFJvb20pID0+IHtcclxuICAgICAgcmV0dXJuIHJvb20uZmxvb3JQbGFuZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEZsb29yVGV4dHVyZSh1dWlkOiBzdHJpbmcpOiBUZXh0dXJlIHtcclxuICAgIHJldHVybiB0aGlzLmZsb29yVGV4dHVyZXNbdXVpZF07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0Rmxvb3JUZXh0dXJlKHJvb206IFJvb20sIHRleHR1cmU6IFRleHR1cmUpOiB2b2lkIHtcclxuICAgIHRoaXMuZmxvb3JUZXh0dXJlc1tyb29tLmdldFV1aWQoKV0gPSB0ZXh0dXJlO1xyXG4gICAgdGhpcy5kZWxldGVGbG9vckNvbG9yKHJvb20uZ2V0VXVpZCgpKTtcclxuICAgIHRoaXMuX2Zsb29yU2VydmljZS5zZXRGbG9vclRleHR1cmUocm9vbSwgdGV4dHVyZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZGVsZXRlRmxvb3JUZXh0dXJlKHV1aWQ6IHN0cmluZykge1xyXG4gICAgZGVsZXRlIHRoaXMuZmxvb3JUZXh0dXJlc1t1dWlkXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRGbG9vckNvbG9yKHV1aWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuZmxvb3JDb2xvcnNbdXVpZF07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0Rmxvb3JDb2xvcihyb29tOiBSb29tLCBjb2xvcjogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmZsb29yQ29sb3JzW3Jvb20uZ2V0VXVpZCgpXSA9IGNvbG9yO1xyXG4gICAgdGhpcy5kZWxldGVGbG9vclRleHR1cmUocm9vbS5nZXRVdWlkKCkpO1xyXG4gICAgdGhpcy5fZmxvb3JTZXJ2aWNlLnNldEZsb29yQ29sb3Iocm9vbSwgY29sb3IpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGRlbGV0ZUZsb29yQ29sb3IodXVpZDogc3RyaW5nKSB7XHJcbiAgICBkZWxldGUgdGhpcy5mbG9vckNvbG9yc1t1dWlkXTtcclxuICB9XHJcblxyXG4gIC8vIGhhY2tcclxuICBwdWJsaWMgd2FsbEVkZ2VzKCk6IEhhbGZFZGdlW10ge1xyXG4gICAgY29uc3QgZWRnZXMgPSBbXTtcclxuXHJcbiAgICB0aGlzLndhbGxzLmZvckVhY2goKHdhbGwpID0+IHtcclxuICAgICAgaWYgKHdhbGwuZnJvbnRFZGdlKSB7XHJcbiAgICAgICAgZWRnZXMucHVzaCh3YWxsLmZyb250RWRnZSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHdhbGwuYmFja0VkZ2UpIHtcclxuICAgICAgICBlZGdlcy5wdXNoKHdhbGwuYmFja0VkZ2UpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBlZGdlcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRDbG9zZXN0V2FsbEVkZ2UoaXRlbVg6IG51bWJlciwgaXRlbVo6IG51bWJlcik6IEhhbGZFZGdlIHtcclxuICAgIGNvbnN0IHdhbGxFZGdlcyA9IHRoaXMud2FsbEVkZ2VzKCk7XHJcblxyXG4gICAgbGV0IHdhbGxFZGdlID0gbnVsbDtcclxuICAgIGxldCBtaW5EaXN0YW5jZSA9IG51bGw7XHJcblxyXG4gICAgd2FsbEVkZ2VzLmZvckVhY2goKGVkZ2U6IEhhbGZFZGdlKSA9PiB7XHJcbiAgICAgIGNvbnN0IGRpc3RhbmNlID0gZWRnZS5kaXN0YW5jZVRvKGl0ZW1YLCBpdGVtWik7XHJcbiAgICAgIGlmIChtaW5EaXN0YW5jZSA9PT0gbnVsbCB8fCBkaXN0YW5jZSA8IG1pbkRpc3RhbmNlKSB7XHJcbiAgICAgICAgbWluRGlzdGFuY2UgPSBkaXN0YW5jZTtcclxuICAgICAgICB3YWxsRWRnZSA9IGVkZ2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB3YWxsRWRnZTtcclxuICB9XHJcblxyXG4gIC8vIGhhY2tcclxuICBwdWJsaWMgd2FsbEVkZ2VQbGFuZXMoKTogVEhSRUUuTWVzaFtdIHtcclxuICAgIGNvbnN0IHBsYW5lcyA9IFtdO1xyXG4gICAgdGhpcy53YWxscy5mb3JFYWNoKCh3YWxsKSA9PiB7XHJcbiAgICAgIGlmICh3YWxsLmZyb250RWRnZSkge1xyXG4gICAgICAgIHBsYW5lcy5wdXNoKHdhbGwuZnJvbnRFZGdlLnBsYW5lKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAod2FsbC5iYWNrRWRnZSkge1xyXG4gICAgICAgIHBsYW5lcy5wdXNoKHdhbGwuYmFja0VkZ2UucGxhbmUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBwbGFuZXM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2VpbGluZ1BsYW5lcygpOiBNZXNoW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NlaWxpbmdTZXJ2aWNlLnBsYW5lcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyB3YWxsUmVtb3ZlZCh3YWxsOiBXYWxsKTogdm9pZCB7XHJcbiAgICB3YWxsLml0ZW1zLmZvckVhY2goaSA9PiB0aGlzLl9zY2VuZVNlcnZpY2UucmVtb3ZlT2JqZWN0KGkpKTtcclxuICAgIHdhbGwub25JdGVtcy5mb3JFYWNoKGkgPT4gdGhpcy5fc2NlbmVTZXJ2aWNlLnJlbW92ZU9iamVjdChpKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY3JlYXRlV2FsbChzdGFydDogQ29ybmVyLCBlbmQ6IENvcm5lcik6IFdhbGwge1xyXG4gICAgY29uc3Qgd2FsbCA9IG5ldyBXYWxsKHN0YXJ0LCBlbmQpO1xyXG4gICAgd2FsbC5oZWlnaHQgPSB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5nZXRWYWx1ZShDb25maWd1cmF0aW9uS2V5LldhbGxIZWlnaHQpIC8gMTAwO1xyXG4gICAgd2FsbC50aGlja25lc3MgPSB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5nZXRWYWx1ZShDb25maWd1cmF0aW9uS2V5LldhbGxUaGlja25lc3MpIC8gMTAwO1xyXG4gICAgdGhpcy53YWxscy5wdXNoKHdhbGwpO1xyXG4gICAgcmV0dXJuIHdhbGw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVtb3ZlV2FsbCh3YWxsOiBXYWxsKTogdm9pZCB7XHJcbiAgICB3YWxsLml0ZW1zLmZvckVhY2goaSA9PiB0aGlzLl9pdGVtU2VydmljZS5yZW1vdmVJdGVtKGkpKTtcclxuICAgIHdhbGwub25JdGVtcy5mb3JFYWNoKGkgPT4gdGhpcy5faXRlbVNlcnZpY2UucmVtb3ZlSXRlbShpKSk7XHJcbiAgICBVdGlscy5yZW1vdmVWYWx1ZSh0aGlzLndhbGxzLCB3YWxsKTtcclxuICAgIHdhbGwucmVtb3ZlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlV2FsbEhlaWdodHMobmV3SGVpZ2h0OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMud2FsbHMuZm9yRWFjaCh3YWxsID0+IHtcclxuICAgICAgd2FsbC5oZWlnaHQgPSBuZXdIZWlnaHQgLyAxMDA7XHJcbiAgICAgIHdhbGwuZmlyZVJlZHJhdygpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnVwZGF0ZUNlaWxpbmdzKCk7XHJcbiAgICB0aGlzLl9zY2VuZVNlcnZpY2UubmVlZHNSZW5kZXIgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHVwZGF0ZVJvb21zKHJvb21Db3JuZXJzOiBDb3JuZXJbXVtdKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLndhbGxzLmZvckVhY2god2FsbCA9PiB3YWxsLnJlc2V0RnJvbnRCYWNrKCkpO1xyXG4gICAgdGhpcy5yb29tcy5mb3JFYWNoKHIgPT4gci5kaXNwb3NlKCkpO1xyXG4gICAgdGhpcy5yb29tcyA9IFtdO1xyXG4gICAgcm9vbUNvcm5lcnMuZm9yRWFjaCgoY29ybmVyczogQ29ybmVyW10pID0+IHtcclxuICAgICAgdGhpcy5yb29tcy5wdXNoKG5ldyBSb29tKGNvcm5lcnMsICB0aGlzLl9kZWZhdWx0Rmxvb3JUZXh0dXJlKSk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuX2Fzc2lnbk9ycGhhbkVkZ2VzKCk7XHJcbiAgICBhd2FpdCB0aGlzLnVwZGF0ZUZsb29yc0FuZEVkZ2VzKCk7XHJcbiAgICB0aGlzLndhbGxzLmZvckVhY2god2FsbCA9PiB3YWxsLnVwZGF0ZVdhbGxJdGVtcygpKTtcclxuICAgIGlmICh0aGlzLndhbGxzICYmIHRoaXMud2FsbHMubGVuZ3RoID4gMCAmJiB0aGlzLl92aWV3TW9kZVNlcnZpY2UuaXMzZFZpZXdBY3RpdmUoKSkge1xyXG4gICAgICB0aGlzLl91cGRhdGVFZGdlVmlzaWJpbGl0eSh0aGlzLl9jYW1lcmFTZXJ2aWNlLmNhbWVyYS5wb3NpdGlvbik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVzZXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLndhbGxzLmZvckVhY2goKHdhbGwpID0+IHtcclxuICAgICAgdGhpcy5yZW1vdmVXYWxsKHdhbGwpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLndhbGxzLmxlbmd0aCA9IDA7XHJcbiAgICB0aGlzLmZsb29yQ29sb3JzID0ge307XHJcbiAgICB0aGlzLmZsb29yVGV4dHVyZXMgPSB7fTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWxlY3RXYWxsKGV2ZW50OiBNb3VzZUV2ZW50LCB3YWxsOiBXYWxsLCBlZGdlOiBIYWxmRWRnZSk6IHZvaWQge1xyXG4gICAgdGhpcy53YWxsU2VsZWN0ZWQubmV4dCh7ZXZlbnQ6IGV2ZW50LCB3YWxsOiB3YWxsLCBlZGdlOiBlZGdlfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2VsZWN0Rmxvb3IoZXZlbnQ6IE1vdXNlRXZlbnQsIHJvb206IFJvb20pOiB2b2lkIHtcclxuICAgIHRoaXMuZmxvb3JTZWxlY3RlZC5uZXh0KHtldmVudDogZXZlbnQsIHJvb206IHJvb219KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRSb29tQ2VudGVyKCk6IFZlY3RvcjMge1xyXG4gICAgY29uc3QgZmxvb3JzID0gdGhpcy5mbG9vclBsYW5lcygpO1xyXG4gICAgcmV0dXJuIGZsb29ycyAmJiBmbG9vcnMubGVuZ3RoID4gMCA/IGZsb29yc1swXS5wb3NpdGlvbiA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgdXBkYXRlRmxvb3JzQW5kRWRnZXMoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLl9mbG9vclNlcnZpY2UucmVtb3ZlRmxvb3JzKCk7XHJcbiAgICB0aGlzLl9lZGdlcy5mb3JFYWNoKChlZGdlOiBFZGdlKSA9PiB7XHJcbiAgICAgIGVkZ2UuZ2V0UGxhbmVzKCkuZm9yRWFjaCgocGxhbmU6IE1lc2gpID0+IHtcclxuICAgICAgICB0aGlzLl9zY2VuZVNlcnZpY2UucmVtb3ZlT2JqZWN0KHBsYW5lKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuX2VkZ2VzLmxlbmd0aCA9IDA7XHJcblxyXG4gICAgLy8gZHJhdyBmbG9vcnNcclxuICAgIGNvbnN0IHNvcnRlZFJvb21zOiBSb29tW10gPSB0aGlzLnJvb21zLnNvcnQoKGEsIGIpID0+IGEuYXJlYSAtIGIuYXJlYSk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNvcnRlZFJvb21zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IHJvb206IFJvb20gPSBzb3J0ZWRSb29tc1tpXTtcclxuICAgICAgY29uc3Qgc3RvcmVkQ29sb3IgPSB0aGlzLmdldEZsb29yQ29sb3Iocm9vbS5nZXRVdWlkKCkpO1xyXG4gICAgICBjb25zdCBzdG9yZWRUZXh0dXJlOiBUZXh0dXJlID0gdGhpcy5nZXRGbG9vclRleHR1cmUocm9vbS5nZXRVdWlkKCkpO1xyXG4gICAgICBjb25zdCBjb2xvciA9IHN0b3JlZENvbG9yID8gc3RvcmVkQ29sb3IgOiByb29tLmZsb29yQ29sb3I7XHJcbiAgICAgIGNvbnN0IHRleHR1cmU6IFRleHR1cmUgPSBzdG9yZWRUZXh0dXJlID8gc3RvcmVkVGV4dHVyZSA6IChyb29tLmZsb29yVGV4dHVyZSA/IHJvb20uZmxvb3JUZXh0dXJlIDogdW5kZWZpbmVkKTtcclxuXHJcbiAgICAgIGxldCBtZXRhZGF0YTogTWV0YWRhdGE7XHJcbiAgICAgIGlmIChzdG9yZWRUZXh0dXJlICE9PSB1bmRlZmluZWQgJiYgJ21ldGFkYXRhJyBpbiBzdG9yZWRUZXh0dXJlKSB7XHJcbiAgICAgICAgbWV0YWRhdGEgPSBzdG9yZWRUZXh0dXJlLm1ldGFkYXRhO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG1ldGFkYXRhID0gbnVsbDtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgZmxvb3JQbGFuZTogRmxvb3JQbGFuZUl0ZW0gPSBhd2FpdCB0aGlzLl9mbG9vclNlcnZpY2UuZ2VuZXJhdGVGbG9vclBsYW5lKFxyXG4gICAgICAgIHN0b3JlZFRleHR1cmUgPyBudWxsIDogY29sb3IsXHJcbiAgICAgICAgc3RvcmVkQ29sb3IgPyAoc3RvcmVkVGV4dHVyZSA/IHRleHR1cmUgOiBudWxsKSA6IHRleHR1cmUsXHJcbiAgICAgICAgbWV0YWRhdGEgPyBtZXRhZGF0YSA6IG51bGwsXHJcbiAgICAgICAgcm9vbS5pbnRlcmlvckNvcm5lcnMsXHJcbiAgICAgICAgc29ydGVkUm9vbXMuc2xpY2UoMCwgaSlcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGZsb29yUGxhbmUuY2hpbGRyZW5bMF0udXNlckRhdGEucm9vbSA9IHJvb207XHJcbiAgICAgIHJvb20uZmxvb3JUZXh0dXJlID0gdGV4dHVyZTtcclxuICAgICAgcm9vbS5mbG9vckNvbG9yID0gY29sb3I7XHJcbiAgICAgIHJvb20uZmxvb3JQbGFuZSA9IGZsb29yUGxhbmU7XHJcbiAgICB9XHJcbiAgICAvLyBhd2FpdCB0aGlzLnJvb21zXHJcbiAgICAvLyAgIC5zb3J0KChhLCBiKSA9PiBhLmFyZWEgLSBiLmFyZWEpXHJcbiAgICAvLyAgIC5mb3JFYWNoKGFzeW5jIChyb29tLCBpbmRleCwgYXJyYXkpID0+IHtcclxuICAgIC8vICAgICBjb25zdCBzdG9yZWRDb2xvciA9IHRoaXMuZ2V0Rmxvb3JDb2xvcihyb29tLmdldFV1aWQoKSk7XHJcbiAgICAvLyAgICAgY29uc3Qgc3RvcmVkVGV4dHVyZSA9IHRoaXMuZ2V0Rmxvb3JUZXh0dXJlKHJvb20uZ2V0VXVpZCgpKTtcclxuICAgIC8vICAgICBjb25zdCBjb2xvciA9IHN0b3JlZENvbG9yID8gc3RvcmVkQ29sb3IgOiByb29tLmZsb29yQ29sb3I7XHJcbiAgICAvLyAgICAgY29uc3QgdGV4dHVyZSA9IHN0b3JlZFRleHR1cmUgPyBzdG9yZWRUZXh0dXJlIDogKHJvb20uZmxvb3JUZXh0dXJlID8gcm9vbS5mbG9vclRleHR1cmUgOiB1bmRlZmluZWQpO1xyXG4gICAgLy8gICAgIGNvbnN0IGZsb29yUGxhbmU6IEZsb29yUGxhbmVJdGVtID0gYXdhaXQgdGhpcy5fZmxvb3JTZXJ2aWNlLmdlbmVyYXRlRmxvb3JQbGFuZShcclxuICAgIC8vICAgICAgIHN0b3JlZFRleHR1cmUgPyBudWxsIDogY29sb3IsIHN0b3JlZENvbG9yID8gKHN0b3JlZFRleHR1cmUgPyB0ZXh0dXJlIDogbnVsbCkgOiB0ZXh0dXJlLCByb29tLmludGVyaW9yQ29ybmVycywgYXJyYXkuc2xpY2UoMCwgaW5kZXgpKTtcclxuICAgIC8vICAgICBmbG9vclBsYW5lLnVzZXJEYXRhLnJvb20gPSByb29tO1xyXG4gICAgLy8gICAgIHJvb20uZmxvb3JUZXh0dXJlID0gdGV4dHVyZTtcclxuICAgIC8vICAgICByb29tLmZsb29yQ29sb3IgPSBjb2xvcjtcclxuICAgIC8vICAgICByb29tLmZsb29yUGxhbmUgPSBmbG9vclBsYW5lO1xyXG4gICAgLy8gICB9KTtcclxuICAgIC8vXHJcbiAgICAvLyBkcmF3IGVkZ2VzXHJcbiAgICBjb25zdCBlZGdlcyA9IHRoaXMud2FsbEVkZ2VzKCk7XHJcbiAgICBpZiAoZWRnZXMgJiYgZWRnZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVkZ2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgaGFsZkVkZ2UgPSBlZGdlc1tpXTtcclxuICAgICAgICBjb25zdCBuZXdFZGdlOiBFZGdlID0gbmV3IEVkZ2UoaGFsZkVkZ2UpO1xyXG4gICAgICAgIGF3YWl0IG5ld0VkZ2UuaW5pdCgpO1xyXG4gICAgICAgIGhhbGZFZGdlLmVkZ2VzLnB1c2gobmV3RWRnZSk7XHJcbiAgICAgICAgdGhpcy5fZWRnZXMucHVzaChuZXdFZGdlKTtcclxuICAgICAgICBjb25zdCBwbGFuZXMgPSBuZXdFZGdlLmdldFBsYW5lcygpO1xyXG4gICAgICAgIHBsYW5lcy5mb3JFYWNoKChwbGFuZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fc2NlbmVTZXJ2aWNlLmFkZE9iamVjdChwbGFuZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBkcmF3IGNlaWxpbmdzXHJcbiAgICB0aGlzLnVwZGF0ZUNlaWxpbmdzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlQ2VpbGluZ3MoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jZWlsaW5nU2VydmljZS5yZW1vdmVDZWlsaW5ncygpO1xyXG4gICAgdGhpcy5yb29tc1xyXG4gICAgICAuc29ydCgoYSwgYikgPT4gYS5hcmVhIC0gYi5hcmVhKVxyXG4gICAgICAuZm9yRWFjaCgocm9vbTogUm9vbSkgPT4ge1xyXG4gICAgICAgIHJvb20udXBkYXRlV2FsbEhlaWdodHMoKTtcclxuICAgICAgICBjb25zdCBjZWlsaW5nOiBUaHJlZU1lc2ggPSB0aGlzLl9jZWlsaW5nU2VydmljZS5nZW5lcmF0ZUNlaWxpbmdQbGFuZSgweGU1ZTVlNSwgcm9vbS5pbnRlcmlvckNvcm5lcnMsIHJvb20uZWRnZUhlaWdodHMpO1xyXG4gICAgICAgIGlmIChjZWlsaW5nKSB7XHJcbiAgICAgICAgICBjZWlsaW5nLnVzZXJEYXRhLnJvb20gPSByb29tO1xyXG4gICAgICAgICAgcm9vbS5jZWlsaW5nUGxhbmUgPSBjZWlsaW5nO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVzZXRBbGxSb29tcygpOiB2b2lkIHtcclxuICAgIHRoaXMucm9vbXMgPSBbXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3Nob3dIaWRlV2FsbHMoc2hvdzogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy53YWxscy5mb3JFYWNoKHcgPT4gdy5zaG93SGlkZVdhbGwoc2hvdykpO1xyXG4gICAgdGhpcy5fc2NlbmVTZXJ2aWNlLm5lZWRzUmVuZGVyID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZUVkZ2VWaXNpYmlsaXR5KGNhbWVyYVBvc2l0aW9uOiBWZWN0b3IzKTogdm9pZCB7XHJcbiAgICB0aGlzLndhbGxFZGdlcygpLmZvckVhY2goZSA9PiB7XHJcbiAgICAgIGNvbnN0IHZpc2liaWxpdHlDaGFuZ2UgPSBlLnVwZGF0ZVZpc2liaWxpdHkoY2FtZXJhUG9zaXRpb24pO1xyXG4gICAgICBpZiAodmlzaWJpbGl0eUNoYW5nZSAhPT0gbnVsbCkge1xyXG4gICAgICAgIGNvbnN0IGVkZ2VWaXNpYmlsaXR5Q2hhbmdlczogRWRnZVZpc2liaWxpdHlDaGFuZ2VzID0ge1xyXG4gICAgICAgICAgZWRnZTogZSxcclxuICAgICAgICAgIHZpc2liaWxpdHk6IHZpc2liaWxpdHlDaGFuZ2VcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuZWRnZVZpc2liaWxpdHlDaGFuZ2VkLm5leHQoZWRnZVZpc2liaWxpdHlDaGFuZ2VzKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZXRBbGxFZGdlc1Zpc2libGUoKSB7XHJcbiAgICB0aGlzLndhbGxFZGdlcygpLmZvckVhY2goKGU6IEhhbGZFZGdlKSA9PiB7XHJcbiAgICAgIGUudXBkYXRlVmlzaWJsaXR5KHRydWUpO1xyXG4gICAgICBjb25zdCBlZGdlVmlzaWJpbGl0eUNoYW5nZXM6IEVkZ2VWaXNpYmlsaXR5Q2hhbmdlcyA9IHtcclxuICAgICAgICBlZGdlOiBlLFxyXG4gICAgICAgIHZpc2liaWxpdHk6IHRydWVcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5lZGdlVmlzaWJpbGl0eUNoYW5nZWQubmV4dChlZGdlVmlzaWJpbGl0eUNoYW5nZXMpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cGRhdGVGbG9vclRleHR1cmVzKCkge1xyXG4gICAgY29uc3QgdXVpZHMgPSBVdGlscy5tYXAodGhpcy5yb29tcywgZnVuY3Rpb24gKHJvb20pIHtcclxuICAgICAgcmV0dXJuIHJvb20uZ2V0VXVpZCgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgZm9yIChjb25zdCB1dWlkIGluIHRoaXMuZmxvb3JUZXh0dXJlcykge1xyXG4gICAgICBpZiAoIVV0aWxzLmhhc1ZhbHVlKHV1aWRzLCB1dWlkKSkge1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLmZsb29yVGV4dHVyZXNbdXVpZF07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Fzc2lnbk9ycGhhbkVkZ2VzKCkge1xyXG4gICAgLy8ga2luZGEgaGFja3lcclxuICAgIC8vIGZpbmQgb3JwaGFuZWQgd2FsbCBzZWdtZW50cyAoaS5lLiBub3QgcGFydCBvZiByb29tcykgYW5kXHJcbiAgICAvLyBnaXZlIHRoZW0gZWRnZXNcclxuICAgIHRoaXMub3JwaGFuV2FsbHMgPSBbXTtcclxuICAgIHRoaXMud2FsbHMuZm9yRWFjaCgod2FsbCkgPT4ge1xyXG4gICAgICBpZiAoIXdhbGwuYmFja0VkZ2UgJiYgIXdhbGwuZnJvbnRFZGdlKSB7XHJcbiAgICAgICAgd2FsbC5vcnBoYW4gPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IGJhY2sgPSBuZXcgSGFsZkVkZ2UobnVsbCwgd2FsbCwgZmFsc2UpO1xyXG4gICAgICAgIGJhY2suZ2VuZXJhdGVQbGFuZSgpO1xyXG4gICAgICAgIGNvbnN0IGZyb250ID0gbmV3IEhhbGZFZGdlKG51bGwsIHdhbGwsIHRydWUpO1xyXG4gICAgICAgIGZyb250LmdlbmVyYXRlUGxhbmUoKTtcclxuICAgICAgICB3YWxsLnVwZGF0ZUluV2FsbEl0ZW1zKCk7XHJcbiAgICAgICAgdGhpcy5vcnBoYW5XYWxscy5wdXNoKHdhbGwpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIl19
@@ -12750,6 +12750,7 @@ class InWallFloorItem extends InWallItem {
12750
12750
  }
12751
12751
  createClass() {
12752
12752
  const clazz = new InWallFloorItem(this.metadata, new Mesh(new BoxGeometry(this.halfSize.x * 2, this.halfSize.y * 2, this.halfSize.z * 2)));
12753
+ clazz.buildFinished();
12753
12754
  return clazz;
12754
12755
  }
12755
12756
  }
@@ -12840,6 +12841,7 @@ class CustomShapeFloorItem extends FloorItem {
12840
12841
  const metadata = Object.assign({}, this.metadata);
12841
12842
  metadata.skin = Object.assign({}, this.skin);
12842
12843
  const copy = new CustomShapeFloorItem(metadata, new Mesh(this.customMesh.geometry.clone().scale(origScale.x, origScale.y, origScale.z), materialsCloned));
12844
+ copy.buildFinished();
12843
12845
  copy.scaleGeometry(this.scale.x, this.scale.y, this.scale.z);
12844
12846
  copy.calculateHalfSize();
12845
12847
  return copy;
@@ -12886,6 +12888,7 @@ class CustomCylinderFloorItem extends FloorItem {
12886
12888
  const metadata = Object.assign({}, this.metadata);
12887
12889
  metadata.skin = Object.assign({}, this.skin);
12888
12890
  const copy = new CustomCylinderFloorItem(metadata, new Mesh(this.customMesh.geometry.clone().scale(origScale.x, origScale.y, origScale.z), materialsCloned));
12891
+ copy.buildFinished();
12889
12892
  copy.scaleGeometry(this.scale.x, this.scale.y, this.scale.z);
12890
12893
  copy.calculateHalfSize();
12891
12894
  return copy;
@@ -17216,6 +17219,9 @@ class RoomService {
17216
17219
  this._assignOrphanEdges();
17217
17220
  yield this.updateFloorsAndEdges();
17218
17221
  this.walls.forEach(wall => wall.updateWallItems());
17222
+ if (this.walls && this.walls.length > 0 && this._viewModeService.is3dViewActive()) {
17223
+ this._updateEdgeVisibility(this._cameraService.camera.position);
17224
+ }
17219
17225
  });
17220
17226
  }
17221
17227
  reset() {
@@ -18619,6 +18625,7 @@ class CustomShapeWallItem extends WallItem {
18619
18625
  const metadata = Object.assign({}, this.metadata);
18620
18626
  metadata.skin = Object.assign({}, this.skin);
18621
18627
  const copy = new CustomShapeWallItem(metadata, new Mesh(this.customMesh.geometry.clone().scale(origScale.x, origScale.y, origScale.z), materialsCloned));
18628
+ copy.buildFinished();
18622
18629
  copy.scaleGeometry(this.scale.x, this.scale.y, this.scale.z);
18623
18630
  copy.calculateHalfSize();
18624
18631
  return copy;
@@ -18663,6 +18670,7 @@ class CustomCylinderWallItem extends WallItem {
18663
18670
  const metadata = Object.assign({}, this.metadata);
18664
18671
  metadata.skin = Object.assign({}, this.skin);
18665
18672
  const copy = new CustomCylinderWallItem(metadata, new Mesh(this.customMesh.geometry.clone().scale(origScale.x, origScale.y, origScale.z), materialsCloned));
18673
+ copy.buildFinished();
18666
18674
  copy.scaleGeometry(this.scale.x, this.scale.y, this.scale.z);
18667
18675
  copy.calculateHalfSize();
18668
18676
  return copy;
@@ -40717,17 +40725,21 @@ class CustomShapeCreatorComponent {
40717
40725
  this.isFloorType = !this.isFloorType;
40718
40726
  const origScale = new Vector3(1, 1, 1).divide(this.shape.metadata.scale || new Vector3(1, 1, 1));
40719
40727
  if (this.isFloorType) {
40728
+ this._oldWallPosition = this.shape.position.clone();
40729
+ this._oldWallElevation = this.shape.elevation;
40720
40730
  const metadata = Object.assign(Object.assign({}, this.shape.metadata), { itemType: ItemType.CustomShape });
40721
- metadata.position = undefined;
40731
+ metadata.position = this._oldFloorPosition ? this._oldFloorPosition.clone() : undefined;
40732
+ metadata.elevation = this._oldFloorElevation ? this._oldFloorElevation : 0;
40722
40733
  metadata.centerPivot = true;
40723
40734
  const geometry = this.shape.customMesh.geometry.clone().scale(origScale.x, origScale.y, origScale.z);
40724
40735
  const shapeFloor = new CustomShapeFloorItem(metadata, new Mesh(geometry, this.shape.customMesh.material));
40736
+ shapeFloor.buildFinished();
40725
40737
  shapeFloor.scaleGeometry(this.shape.scale.x, this.shape.scale.y, this.shape.scale.z);
40726
40738
  shapeFloor.calculateHalfSize();
40727
40739
  shapeFloor.skin = this.shape.skin;
40728
40740
  const roomCenter = this._roomService.getRoomCenter();
40729
40741
  if (roomCenter) {
40730
- shapeFloor.position.copy(roomCenter);
40742
+ shapeFloor.position.copy(this._oldFloorPosition ? this._oldFloorPosition.clone() : roomCenter);
40731
40743
  }
40732
40744
  shapeFloor.position.y = shapeFloor.getFloorY();
40733
40745
  this._itemService.addItem(shapeFloor);
@@ -40737,11 +40749,14 @@ class CustomShapeCreatorComponent {
40737
40749
  this._hudService.updateSelectedItemHud();
40738
40750
  }
40739
40751
  else {
40752
+ this._oldFloorPosition = this.shape.position.clone();
40753
+ this._oldFloorElevation = this.shape.elevation;
40740
40754
  const metadata = Object.assign(Object.assign({}, this.shape.metadata), { itemType: ItemType.CustomShapeWall });
40741
- metadata.position = undefined;
40755
+ metadata.position = this._oldWallPosition ? this._oldWallPosition.clone() : undefined;
40742
40756
  metadata.centerPivot = false;
40743
40757
  const geometry = this.shape.customMesh.geometry.clone().scale(origScale.x, origScale.y, origScale.z);
40744
40758
  const shapeWall = new CustomShapeWallItem(metadata, new Mesh(geometry, this.shape.customMesh.material));
40759
+ shapeWall.buildFinished();
40745
40760
  shapeWall.scaleGeometry(this.shape.scale.x, this.shape.scale.y, this.shape.scale.z);
40746
40761
  shapeWall.calculateHalfSize();
40747
40762
  shapeWall.skin = this.shape.skin;
@@ -40915,6 +40930,7 @@ class CustomCylinderCreatorComponent {
40915
40930
  const geometry = this.shape.customMesh.geometry.clone().scale(origScale.x, origScale.y, origScale.z);
40916
40931
  geometry.rotateX(-Math.PI / 2);
40917
40932
  const shapeFloor = new CustomCylinderFloorItem(metadata, new Mesh(geometry, this.shape.customMesh.material));
40933
+ shapeFloor.buildFinished();
40918
40934
  shapeFloor.scaleGeometry(this.shape.scale.x, this.shape.scale.y, this.shape.scale.z);
40919
40935
  shapeFloor.calculateHalfSize();
40920
40936
  shapeFloor.skin = this.shape.skin;
@@ -40936,6 +40952,7 @@ class CustomCylinderCreatorComponent {
40936
40952
  const position = this.shape.position.clone();
40937
40953
  const geometry = this.shape.customMesh.geometry.clone().scale(origScale.x, origScale.y, origScale.z);
40938
40954
  const shapeWall = new CustomCylinderWallItem(metadata, new Mesh(geometry, this.shape.customMesh.material));
40955
+ shapeWall.buildFinished();
40939
40956
  shapeWall.scaleGeometry(this.shape.scale.x, this.shape.scale.y, this.shape.scale.z);
40940
40957
  shapeWall.customMesh.geometry.rotateX(Math.PI / 2);
40941
40958
  shapeWall.calculateHalfSize();
@@ -43676,6 +43693,7 @@ class FurnitureManagerComponent {
43676
43693
  itemSelected: this.itemSelected.bind(this),
43677
43694
  itemUnselected: this.itemUnselected.bind(this)
43678
43695
  });
43696
+ item.buildFinished();
43679
43697
  this._itemService.addItem(item);
43680
43698
  return item;
43681
43699
  });
@@ -43759,6 +43777,7 @@ class FurnitureManagerComponent {
43759
43777
  };
43760
43778
  metadata.scale = model.scale;
43761
43779
  const item = new FloorItem(metadata, model.object, null, handlers);
43780
+ item.buildFinished();
43762
43781
  if (object.itemGroup) {
43763
43782
  this._groupService.reattachToItemGroup(item, object.itemGroup, position);
43764
43783
  }
@@ -43779,6 +43798,7 @@ class FurnitureManagerComponent {
43779
43798
  materials.push(material);
43780
43799
  }
43781
43800
  const item = new CustomShapeFloorItem(metadata, new Mesh(geometry, materials), object.texture);
43801
+ item.buildFinished();
43782
43802
  if (object.itemGroup) {
43783
43803
  this._groupService.reattachToItemGroup(item, object.itemGroup, position);
43784
43804
  }
@@ -43795,6 +43815,7 @@ class FurnitureManagerComponent {
43795
43815
  materials.push(material);
43796
43816
  }
43797
43817
  const item = new CustomShapeWallItem(metadata, new Mesh(geometry, materials), object.texture);
43818
+ item.buildFinished();
43798
43819
  const closestWallEdge = this._roomService.getClosestWallEdge(position.x, position.z);
43799
43820
  item.placeOnEdge(closestWallEdge);
43800
43821
  if (object.itemGroup) {
@@ -43813,6 +43834,7 @@ class FurnitureManagerComponent {
43813
43834
  materials.push(material);
43814
43835
  }
43815
43836
  const item = new CustomCylinderFloorItem(metadata, new Mesh(geometry, materials), object.texture);
43837
+ item.buildFinished();
43816
43838
  if (object.itemGroup) {
43817
43839
  this._groupService.reattachToItemGroup(item, object.itemGroup, position);
43818
43840
  }
@@ -43830,6 +43852,7 @@ class FurnitureManagerComponent {
43830
43852
  materials.push(material);
43831
43853
  }
43832
43854
  const item = new CustomCylinderWallItem(metadata, new Mesh(geometry, materials), object.texture);
43855
+ item.buildFinished();
43833
43856
  const closestWallEdge = this._roomService.getClosestWallEdge(position.x, position.z);
43834
43857
  item.placeOnEdge(closestWallEdge);
43835
43858
  if (object.itemGroup) {