@smarterplan/ngx-smarterplan-core 0.4.46 → 0.4.47

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.
@@ -37,80 +37,61 @@ export class MatterportImportService {
37
37
  }
38
38
  async initSdkForModel(modelID) {
39
39
  this.stop = false;
40
- return new Promise((resolve, reject) => {
41
- // Load SDK
42
- console.log("Loading Matterport SDK");
43
- this.modelID = modelID;
44
- const iframe = document.createElement("iframe");
45
- if (!iframe) {
46
- reject(new Error("Cannot create iframe"));
47
- }
48
- this.viewerService.setTourUrl(modelID);
49
- const url = this.viewerService.getTourUrl();
50
- iframe.setAttribute("src", url);
51
- iframe.allow = "xr-spatial-tracking";
52
- iframe.height = "100%";
53
- iframe.width = "100%";
54
- iframe.id = "viewer-module";
55
- const element = document.querySelector("#viewer-frame");
56
- element.append(iframe);
57
- this.currentFrame = iframe;
40
+ // Load SDK
41
+ console.log("Loading Matterport SDK");
42
+ this.modelID = modelID;
43
+ const iframe = document.createElement("iframe");
44
+ if (!iframe) {
45
+ throw new Error("Cannot create iframe");
46
+ }
47
+ this.viewerService.setTourUrl(modelID);
48
+ const url = this.viewerService.getTourUrl();
49
+ iframe.setAttribute("src", url);
50
+ iframe.allow = "xr-spatial-tracking";
51
+ iframe.height = "100%";
52
+ iframe.width = "100%";
53
+ iframe.id = "viewer-module";
54
+ const element = document.querySelector("#viewer-frame");
55
+ element.append(iframe);
56
+ this.currentFrame = iframe;
57
+ console.log("here");
58
+ try {
58
59
  // @ts-ignore
59
- window.MP_SDK.connect(iframe, "qn9wsasuy5h2fzrbrn1nzr0id", "3.11")
60
- .then(async (sdk) => {
61
- // Instanciate sdk
62
- this.sdk = sdk;
63
- // Sibscribe to Floor data
64
- this.sdk.Floor.data.subscribe({
65
- onCollectionUpdated: function upd(collection) {
66
- // console.log("Floors", collection);
67
- this.floors = collection;
68
- }.bind(this),
69
- });
70
- // Subscribe to current Floor
71
- this.sdk.Floor.current.subscribe(function upd(currentFloor) {
72
- this.currentFloor = currentFloor;
73
- // Change to the current floor has occurred.
74
- // if (currentFloor.sequence === -1) {
75
- // console.log("Currently viewing all floors");
76
- // } else if (currentFloor.sequence === undefined) {
77
- // if (currentFloor.id === undefined) {
78
- // console.log("Current viewing an unplaced unaligned sweep");
79
- // } else {
80
- // // console.log('Currently transitioning between floors');
81
- // }
82
- // } else {
83
- // // console.log('Currently on floor', currentFloor.id);
84
- // // console.log('Current floor\'s sequence index', currentFloor.sequence);
85
- // // console.log('Current floor\'s name', currentFloor.name)
86
- // }
87
- }.bind(this));
88
- // Subscribe to Sweep data
89
- this.sdk.Sweep.data.subscribe({
90
- onCollectionUpdated: function upd(collection) {
91
- console.log("the entire up-to-date collection", collection);
92
- this.sweeps = collection;
93
- }.bind(this),
94
- });
95
- // remove labels
96
- this.sdk.Settings.update("labels", false)
97
- .then(function (data) {
98
- // Setting update complete.
99
- console.log(`Labels setting: ${data}`);
100
- })
101
- .catch(function (error) {
102
- // Setting update error.
103
- });
104
- setTimeout(async () => {
105
- console.log("init done");
106
- resolve(true);
107
- }, 5000);
60
+ this.sdk = await window.MP_SDK.connect(iframe, "qn9wsasuy5h2fzrbrn1nzr0id", "3.11");
61
+ // Subscribe to Floor data
62
+ this.sdk.Floor.data.subscribe({
63
+ onCollectionUpdated: function upd(collection) {
64
+ // console.log("Floors", collection);
65
+ this.floors = collection;
66
+ }.bind(this),
67
+ });
68
+ // Subscribe to current Floor
69
+ this.sdk.Floor.current.subscribe(function upd(currentFloor) {
70
+ this.currentFloor = currentFloor;
71
+ }.bind(this));
72
+ // Subscribe to Sweep data
73
+ this.sdk.Sweep.data.subscribe({
74
+ onCollectionUpdated: function upd(collection) {
75
+ console.log("the entire up-to-date collection", collection);
76
+ this.sweeps = collection;
77
+ }.bind(this),
78
+ });
79
+ // remove labels
80
+ this.sdk.Settings.update("labels", false)
81
+ .then(function (data) {
82
+ // Setting update complete.
83
+ console.log(`Labels setting: ${data}`);
108
84
  })
109
- .catch((error) => {
110
- console.error(error);
111
- reject(error);
85
+ .catch(function (error) {
86
+ // Setting update error.
112
87
  });
113
- });
88
+ console.log("init done");
89
+ return true;
90
+ }
91
+ catch (e) {
92
+ console.error(e);
93
+ throw new Error("error init Matterport");
94
+ }
114
95
  }
115
96
  async importData(spaceID, surface, reloading = false, node = null) {
116
97
  this.spaceID = spaceID;
@@ -334,4 +315,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
334
315
  providedIn: "root",
335
316
  }]
336
317
  }], ctorParameters: function () { return [{ type: i1.NavigationService }, { type: i2.ZoneService }, { type: i3.ViewerService }, { type: i4.LayerService }, { type: i5.BaseUserService }, { type: i6.PlanService }]; } });
337
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0dGVycG9ydC1pbXBvcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1jb3JlL3NyYy9saWIvc2VydmljZXMvbWF0dGVycG9ydC1pbXBvcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLHdCQUF3QixFQUFFLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxXQUFXLEVBQXVDLE1BQU0sa0JBQWtCLENBQUM7QUFLcEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7Ozs7Ozs7QUFPN0YsTUFBTSxPQUFPLHVCQUF1QjtJQXVDaEMsWUFDWSxpQkFBb0MsRUFDcEMsV0FBd0IsRUFDeEIsYUFBNEIsRUFDNUIsWUFBMEIsRUFDMUIsV0FBNEIsRUFDNUIsV0FBd0I7UUFMeEIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDNUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFkN0IsU0FBSSxHQUFHLEtBQUssQ0FBQztRQUViLG9CQUFlLEdBQXFCLElBQUksT0FBTyxFQUFXLENBQUM7UUFFM0Qsd0JBQW1CLEdBQW9CLElBQUksT0FBTyxFQUFVLENBQUM7UUFFN0QscUJBQWdCLEdBQW9CLElBQUksT0FBTyxFQUFVLENBQUM7SUFTN0QsQ0FBQztJQS9CTCxJQUFXLE9BQU87UUFDZCxPQUFPLElBQUks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QUFDLENBQUM7SUFDYixDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBWTtRQUM3QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUQsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQztRQUM1QyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsNkJBQTZCLENBQ2hFLElBQUksRUFDSixZQUFZLENBQ2YsQ0FBQztRQUNGLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDbkIsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDcEI7UUFDRCxjQUFjO1FBQ2QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLDBCQUEwQixDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztJQUM1RSxDQUFDOztvSEExYVEsdUJBQXVCO3dIQUF2Qix1QkFBdUIsY0FGcEIsTUFBTTsyRkFFVCx1QkFBdUI7a0JBSG5DLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IHJlamVjdHMgfSBmcm9tIFwiYXNzZXJ0XCI7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyByZW1vdmVOdWxsS2V5c0Zyb21PYmplY3QsIHdhaXQgfSBmcm9tIFwiLi4vaGVscGVycy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IExldmVsU3RhdHVzLCBMYXllciwgTm9kZSwgWm9uZSwgTmF2aWdhdGlvbiwgUGxhbiB9IGZyb20gXCIuLi90eXBlcy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IExheWVyU2VydmljZSB9IGZyb20gXCIuL21vZGVscy9sYXllci5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4vbW9kZWxzL25hdmlnYXRpb24uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBQbGFuU2VydmljZSB9IGZyb20gXCIuL21vZGVscy9wbGFuLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgWm9uZVNlcnZpY2UgfSBmcm9tIFwiLi9tb2RlbHMvem9uZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IHVwbG9hZEpzb25Ub1MzLCB1cGxvYWRCYXNlNjRJbWFnZSwgcmVtb3ZlQWxsRmlsZXNGcm9tRm9sZGVyUzMgfSBmcm9tIFwiLi9zMy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEJhc2VVc2VyU2VydmljZSB9IGZyb20gXCIuL3VzZXIuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBWaWV3ZXJTZXJ2aWNlIH0gZnJvbSBcIi4vdmlld2VyLnNlcnZpY2VcIjtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46IFwicm9vdFwiLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWF0dGVycG9ydEltcG9ydFNlcnZpY2Uge1xyXG4gICAgcHJpdmF0ZSBjdXJyZW50RnJhbWU7XHJcblxyXG4gICAgcHVibGljIHNkazogYW55O1xyXG5cclxuICAgIHByaXZhdGUgc3dlZXBzOiBPYmplY3Q7XHJcblxyXG4gICAgcHVibGljIGZsb29yczogT2JqZWN0O1xyXG5cclxuICAgIHByaXZhdGUgY3VycmVudEZsb29yO1xyXG5cclxuICAgIHByaXZhdGUgX21vZGVsSUQ6IHN0cmluZztcclxuXHJcbiAgICBwcml2YXRlIF9zcGFjZUlEOiBzdHJpbmc7XHJcblxyXG4gICAgcHVibGljIGdldCBzcGFjZUlEKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NwYWNlSUQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldCBzcGFjZUlEKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLl9zcGFjZUlEID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBtb2RlbElEKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21vZGVsSUQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldCBtb2RlbElEKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLl9tb2RlbElEID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0b3AgPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgaW1wb3J0aW5nSW1hZ2VzOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuXHJcbiAgICBwdWJsaWMgc3dlZXBQcm9jZXNzZWRDb3VudDogU3ViamVjdDxudW1iZXI+ID0gbmV3IFN1YmplY3Q8bnVtYmVyPigpO1xyXG5cclxuICAgIHB1YmxpYyB0b3RhbFN3ZWVwc0NvdW50OiBTdWJqZWN0PG51bWJlcj4gPSBuZXcgU3ViamVjdDxudW1iZXI+KCk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBuYXZpZ2F0aW9uU2VydmljZTogTmF2aWdhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB6b25lU2VydmljZTogWm9uZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB2aWV3ZXJTZXJ2aWNlOiBWaWV3ZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbGF5ZXJTZXJ2aWNlOiBMYXllclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB1c2VyU2VydmljZTogQmFzZVVzZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcGxhblNlcnZpY2U6IFBsYW5TZXJ2aWNlLFxyXG4gICAgKSB7IH1cclxuXHJcbiAgICBhc3luYyBpbml0U2RrRm9yTW9kZWwobW9kZWxJRDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgdGhpcy5zdG9wID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgLy8gTG9hZCBTREtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJMb2FkaW5nIE1hdHRlcnBvcnQgU0RLXCIpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsSUQgPSBtb2RlbElEO1xyXG4gICAgICAgICAgICBjb25zdCBpZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpO1xyXG4gICAgICAgICAgICBpZiAoIWlmcmFtZSkge1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIkNhbm5vdCBjcmVhdGUgaWZyYW1lXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnZpZXdlclNlcnZpY2Uuc2V0VG91clVybChtb2RlbElEKTtcclxuICAgICAgICAgICAgY29uc3QgdXJsID0gdGhpcy52aWV3ZXJTZXJ2aWNlLmdldFRvdXJVcmwoKTtcclxuICAgICAgICAgICAgaWZyYW1lLnNldEF0dHJpYnV0ZShcInNyY1wiLCB1cmwpO1xyXG4gICAgICAgICAgICBpZnJhbWUuYWxsb3cgPSBcInhyLXNwYXRpYWwtdHJhY2tpbmdcIjtcclxuICAgICAgICAgICAgaWZyYW1lLmhlaWdodCA9IFwiMTAwJVwiO1xyXG4gICAgICAgICAgICBpZnJhbWUud2lkdGggPSBcIjEwMCVcIjtcclxuICAgICAgICAgICAgaWZyYW1lLmlkID0gXCJ2aWV3ZXItbW9kdWxlXCI7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI3ZpZXdlci1mcmFtZVwiKTtcclxuICAgICAgICAgICAgZWxlbWVudC5hcHBlbmQoaWZyYW1lKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50RnJhbWUgPSBpZnJhbWU7XHJcblxyXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgIHdpbmRvdy5NUF9TREsuY29ubmVjdChpZnJhbWUsIFwicW45d3Nhc3V5NWgyZnpyYnJuMW56cjBpZFwiLCBcIjMuMTFcIilcclxuICAgICAgICAgICAgICAgIC50aGVuKGFzeW5jIChzZGspID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBJbnN0YW5jaWF0ZSBzZGtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNkayA9IHNkaztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gU2lic2NyaWJlIHRvIEZsb29yIGRhdGFcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNkay5GbG9vci5kYXRhLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29sbGVjdGlvblVwZGF0ZWQ6IGZ1bmN0aW9uIHVwZChjb2xsZWN0aW9uOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiRmxvb3JzXCIsIGNvbGxlY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mbG9vcnMgPSBjb2xsZWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gU3Vic2NyaWJlIHRvIGN1cnJlbnQgRmxvb3JcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNkay5GbG9vci5jdXJyZW50LnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gdXBkKGN1cnJlbnRGbG9vcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Rmxvb3IgPSBjdXJyZW50Rmxvb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGFuZ2UgdG8gdGhlIGN1cnJlbnQgZmxvb3IgaGFzIG9jY3VycmVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgKGN1cnJlbnRGbG9vci5zZXF1ZW5jZSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBjb25zb2xlLmxvZyhcIkN1cnJlbnRseSB2aWV3aW5nIGFsbCBmbG9vcnNcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9IGVsc2UgaWYgKGN1cnJlbnRGbG9vci5zZXF1ZW5jZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgaWYgKGN1cnJlbnRGbG9vci5pZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIGNvbnNvbGUubG9nKFwiQ3VycmVudCB2aWV3aW5nIGFuIHVucGxhY2VkIHVuYWxpZ25lZCBzd2VlcFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAvLyBjb25zb2xlLmxvZygnQ3VycmVudGx5IHRyYW5zaXRpb25pbmcgYmV0d2VlbiBmbG9vcnMnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIC8vIGNvbnNvbGUubG9nKCdDdXJyZW50bHkgb24gZmxvb3InLCBjdXJyZW50Rmxvb3IuaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIC8vIGNvbnNvbGUubG9nKCdDdXJyZW50IGZsb29yXFwncyBzZXF1ZW5jZSBpbmRleCcsIGN1cnJlbnRGbG9vci5zZXF1ZW5jZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgLy8gY29uc29sZS5sb2coJ0N1cnJlbnQgZmxvb3JcXCdzIG5hbWUnLCBjdXJyZW50Rmxvb3IubmFtZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFN1YnNjcmliZSB0byBTd2VlcCBkYXRhXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZGsuU3dlZXAuZGF0YS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNvbGxlY3Rpb25VcGRhdGVkOiBmdW5jdGlvbiB1cGQoY29sbGVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0aGUgZW50aXJlIHVwLXRvLWRhdGUgY29sbGVjdGlvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zd2VlcHMgPSBjb2xsZWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGxhYmVsc1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2RrLlNldHRpbmdzLnVwZGF0ZShcImxhYmVsc1wiLCBmYWxzZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldHRpbmcgdXBkYXRlIGNvbXBsZXRlLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYExhYmVscyBzZXR0aW5nOiAke2RhdGF9YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldHRpbmcgdXBkYXRlIGVycm9yLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiaW5pdCBkb25lXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sIDUwMDApO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaW1wb3J0RGF0YShcclxuICAgICAgICBzcGFjZUlEOiBzdHJpbmcsXHJcbiAgICAgICAgc3VyZmFjZTogbnVtYmVyLFxyXG4gICAgICAgIHJlbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlLFxyXG4gICAgICAgIG5vZGU6IE5vZGUgPSBudWxsLFxyXG4gICAgKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgdGhpcy5zcGFjZUlEID0gc3BhY2VJRDtcclxuICAgICAgICBpZiAoIXRoaXMuc3dlZXBzKSB7XHJcbiAgICAgICAgICAgIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIm5vIHN3ZWVwcyBpbml0aWFsaXplZFwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBmbG9vclpvbmVzOiBab25lW10gPSBbXTtcclxuICAgICAgICBjb25zdCB6b25lcyA9IGF3YWl0IHRoaXMuem9uZVNlcnZpY2UuZ2V0Wm9uZXNCeVNwYWNlKHNwYWNlSUQpO1xyXG4gICAgICAgIGNvbnN0IG1haW5ab25lID0gem9uZXMuZmluZCgoeikgPT4gIXoucGFyZW50SUQpO1xyXG5cclxuICAgICAgICBpZiAoIW1haW5ab25lKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJtaXNzaW5nIGRhdGEgKG5vIG1haW4gQnVpbGRpbmcgWm9uZSlcIikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zb2xlLmxvZyhcImltcG9ydGluZyBkYXRhIGZyb20gbWF0dGVycG9ydFwiKTtcclxuICAgICAgICAvLyBzYXZlIHN3ZWVwcyBkYXRhIGFzIGpzb25cclxuICAgICAgICBjb25zdCBqc29uID0gSlNPTi5zdHJpbmdpZnkoT2JqZWN0LnZhbHVlcyh0aGlzLnN3ZWVwcykpO1xyXG4gICAgICAgIGF3YWl0IHVwbG9hZEpzb25Ub1MzKFxyXG4gICAgICAgICAgICBgdmlzaXRzLyR7dGhpcy5tb2RlbElEfS9pbnZlbnRvcnkvYCxcclxuICAgICAgICAgICAganNvbixcclxuICAgICAgICAgICAgXCJkYXRhLmpzb25cIixcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChyZWxvYWRpbmcpIHtcclxuICAgICAgICAgICAgLy8gcGVyZm9ybSBvbmx5IDM2MCBpbXBvcnQgc2luY2Ugd2UgYXJlIHJlbG9hZGluZ1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmltcG9ydDM2MGltYWdlcygpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImFmdGVyIHJlbG9hZGluZ1wiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY2hlY2sgbGF5ZXIgb2YgYnVpbGRpbmcgdHlwZVxyXG4gICAgICAgIGNvbnN0IGxheWVyQnVpbGRpbmcgPSBhd2FpdCB0aGlzLmdldExheWVyQnlOYW1lKFwiQlVJTERJTkdcIik7XHJcbiAgICAgICAgY29uc3QgY3JlYXRlZERlZmF1bHRab25lID0gYXdhaXQgdGhpcy5jcmVhdGVab25lKFxyXG4gICAgICAgICAgICBub2RlLm1ldGFkYXRhLFxyXG4gICAgICAgICAgICBsYXllckJ1aWxkaW5nLmlkLFxyXG4gICAgICAgICAgICBzdXJmYWNlLFxyXG4gICAgICAgICAgICBtYWluWm9uZS5pZCxcclxuICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy5zd2VlcHMpLFxyXG4gICAgICAgICAgICBub2RlLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKCFjcmVhdGVkRGVmYXVsdFpvbmUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmZsb29ycykge1xyXG4gICAgICAgICAgICBmbG9vclpvbmVzID0gYXdhaXQgdGhpcy5pbXBvcnRGbG9vckRhdGEoXHJcbiAgICAgICAgICAgICAgICBjcmVhdGVkRGVmYXVsdFpvbmUuaWQsXHJcbiAgICAgICAgICAgICAgICBub2RlLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhmbG9vclpvbmVzKTtcclxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy5zd2VlcHMpLm1hcChhc3luYyAoa2V5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzd2VlcEluZm8gPSB0aGlzLnN3ZWVwc1trZXldO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmF2aWdhdGlvbklucHV0ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdHRlcnBvcnRTd2VlcElEOiBzd2VlcEluZm8udXVpZCxcclxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogSlNPTi5zdHJpbmdpZnkoc3dlZXBJbmZvLnBvc2l0aW9uKSxcclxuICAgICAgICAgICAgICAgICAgICByb3RhdGlvbjogSlNPTi5zdHJpbmdpZnkoc3dlZXBJbmZvLnJvdGF0aW9uKSxcclxuICAgICAgICAgICAgICAgICAgICBsZXZlbDogTGV2ZWxTdGF0dXMuTE9XLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vZGVJRDogbm9kZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICBzcGFjZUlELFxyXG4gICAgICAgICAgICAgICAgfSBhcyBOYXZpZ2F0aW9uO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmF2ID0gYXdhaXQgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5jcmVhdGVOYXZpZ2F0aW9uKFxyXG4gICAgICAgICAgICAgICAgICAgIG5hdmlnYXRpb25JbnB1dCxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIW5hdikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImNvdWxkIGNyZWF0ZSBuYXZpZ2F0aW9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRpb25JbnB1dC5pZCxcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuaW1wb3J0MzYwaW1hZ2VzKCk7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY3JlYXRlWm9uZShcclxuICAgICAgICBuYW1lOiBzdHJpbmcsXHJcbiAgICAgICAgbGF5ZXJJRDogc3RyaW5nLFxyXG4gICAgICAgIHN1cmZhY2U6IG51bWJlciA9IG51bGwsXHJcbiAgICAgICAgcGFyZW50SUQ6IHN0cmluZyA9IG51bGwsXHJcbiAgICAgICAgc3dlZXBzOiBzdHJpbmdbXSA9IFtdLFxyXG4gICAgICAgIG5vZGU6IE5vZGUgPSBudWxsLFxyXG4gICAgICAgIG1ldGFkYXRhOiBzdHJpbmcgPSBudWxsLFxyXG4gICAgKTogUHJvbWlzZTxab25lPiB7XHJcbiAgICAgICAgY29uc3Qgem9uZUlucHV0ID0ge1xyXG4gICAgICAgICAgICBuYW1lLFxyXG4gICAgICAgICAgICBzcGFjZUlEOiB0aGlzLnNwYWNlSUQsXHJcbiAgICAgICAgICAgIGxheWVySUQsXHJcbiAgICAgICAgICAgIHN3ZWVwSURzOiBzd2VlcHMsXHJcbiAgICAgICAgICAgIG5vZGVJRHM6IG5vZGUgPyBbbm9kZS5pZF0gOiBudWxsLFxyXG4gICAgICAgIH0gYXMgWm9uZTtcclxuICAgICAgICByZW1vdmVOdWxsS2V5c0Zyb21PYmplY3Qoem9uZUlucHV0KTtcclxuICAgICAgICBpZiAoc3VyZmFjZSkge1xyXG4gICAgICAgICAgICB6b25lSW5wdXQuc3VyZmFjZSA9IHN1cmZhY2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJlbnRJRCkge1xyXG4gICAgICAgICAgICB6b25lSW5wdXQucGFyZW50SUQgPSBwYXJlbnRJRDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1ldGFkYXRhKSB7XHJcbiAgICAgICAgICAgIHpvbmVJbnB1dC5tZXRhZGF0YSA9IG1ldGFkYXRhO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXdMb2NhbCA9IGF3YWl0IHRoaXMuem9uZVNlcnZpY2UuY3JlYXRlKHpvbmVJbnB1dCk7XHJcbiAgICAgICAgcmV0dXJuIG5ld0xvY2FsO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGltcG9ydDM2MGltYWdlcygpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkltcG9ydGluZyAzNjAgaW1hZ2VzXCIpO1xyXG4gICAgICAgIHRoaXMuaW1wb3J0aW5nSW1hZ2VzLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNjYW5zID0gT2JqZWN0LnZhbHVlcyh0aGlzLnN3ZWVwcyk7XHJcbiAgICAgICAgICAgIGxldCBtYXhTY2FuO1xyXG4gICAgICAgICAgICBsZXQgaW5kZXhTY2FuO1xyXG4gICAgICAgICAgICBjb25zdCBubWJTY2FucyA9IE9iamVjdC5rZXlzKHNjYW5zKS5sZW5ndGg7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiVG90YWwgbnVtYmVyIG9mIHNjYW4gcG9pbnRzIDpcIiwgbm1iU2NhbnMpO1xyXG4gICAgICAgICAgICB0aGlzLnRvdGFsU3dlZXBzQ291bnQubmV4dChubWJTY2Fucyk7XHJcbiAgICAgICAgICAgIC8vIGNoZWNrIGlmIHdlIHN0YXJ0ZWQgdG8gbG9hZCBpbWFnZXMgYWxyZWFkeVxyXG4gICAgICAgICAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJpbmRleFNjYW5Mb2FkXCIpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgICAgICAgICAgICBcInJldGFraW5nIGltcG9ydCBmcm9tIHNjYW5cIixcclxuICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImluZGV4U2NhbkxvYWRcIiksXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgaW5kZXhTY2FuID0gK2xvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaW5kZXhTY2FuTG9hZFwiKTtcclxuICAgICAgICAgICAgICAgIG5tYlNjYW5zIDwgaW5kZXhTY2FuICsgNTBcclxuICAgICAgICAgICAgICAgICAgICA/IChtYXhTY2FuID0gbm1iU2NhbnMpXHJcbiAgICAgICAgICAgICAgICAgICAgOiAobWF4U2NhbiA9IGluZGV4U2NhbiArIDUwKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGluZGV4U2NhbiA9IDA7XHJcbiAgICAgICAgICAgICAgICBubWJTY2FucyA8IDUwID8gKG1heFNjYW4gPSBubWJTY2FucykgOiAobWF4U2NhbiA9IDUwKTtcclxuICAgICAgICAgICAgICAgIG1heFNjYW47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gaW5kZXhTY2FuOyBpbmRleCA8IG1heFNjYW47IGluZGV4ICs9IDEpIHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5zdG9wKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZGsuU3dlZXAubW92ZVRvKHNjYW5zW2luZGV4XS51dWlkKTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNkay5DYW1lcmEuc2V0Um90YXRpb24oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB4OiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGltZyA9IGF3YWl0IHRoaXMuc2RrLlJlbmRlcmVyLnRha2VFcXVpcmVjdGFuZ3VsYXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgd2lkdGg6IDIwNDgsIGhlaWdodDogMTAyNCB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG1hdHRlcnRhZ3M6IGZhbHNlLCBzd2VlcHM6IHRydWUgfSxcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHVwbG9hZEJhc2U2NEltYWdlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjYW5zW2luZGV4XS51dWlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBgdmlzaXRzLyR7dGhpcy5tb2RlbElEfS9zd2VlcHMvYCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJzd2VlcFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zd2VlcFByb2Nlc3NlZENvdW50Lm5leHQoaW5kZXgpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcImluZGV4U2NhbkxvYWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQWxsRmlsZXNGcm9tRm9sZGVyUzMoYHZpc2l0cy8ke3RoaXMubW9kZWxJRH0vc3dlZXBzYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJBYmFuZG9uaW5nIGltcG9ydCBiZWFjdXNlIGl0IHdhcyBjYW5jZWxsZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG1heFNjYW4gPT09IG5tYlNjYW5zKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkltcG9ydCAzNjAgZG9uZVwiKTtcclxuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiaW5kZXhTY2FuTG9hZFwiKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRnJhbWUoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RvcCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLnN0b3ApIHtcclxuICAgICAgICAgICAgICAgIC8vIHRvIHJlc3RhcnQgdGhlIHByb2NlZHVyZSBmcm9tIHdoZXJlIHdlIGxlZnQgb2ZcclxuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiaW5kZXhTY2FuTG9hZFwiLCBtYXhTY2FuLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVGcmFtZSgpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5pbml0U2RrRm9yTW9kZWwodGhpcy5tb2RlbElEKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuaW1wb3J0RGF0YSh0aGlzLnNwYWNlSUQsIDAsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG1vdmVUb0Zsb29yKGZsb29yTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgLy8gYnkgbmFtZVxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGZsb29yTmFtZSk7XHJcbiAgICAgICAgbGV0IGZsb29yTWF0dGVycG9ydCA9IE9iamVjdC52YWx1ZXModGhpcy5mbG9vcnMpLmZpbmQoXHJcbiAgICAgICAgICAgIChmbG9vcikgPT4gZmxvb3IubmFtZSAhPT0gXCJcIiAmJiBmbG9vck5hbWUuaW5jbHVkZXMoZmxvb3IubmFtZSksXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvLyBieSBpZFxyXG4gICAgICAgIGlmICghZmxvb3JNYXR0ZXJwb3J0KSB7XHJcbiAgICAgICAgICAgIGZsb29yTWF0dGVycG9ydCA9IE9iamVjdC52YWx1ZXModGhpcy5mbG9vcnMpLmZpbmQoKGZsb29yKSA9PlxyXG4gICAgICAgICAgICAgICAgZmxvb3JOYW1lLmluY2x1ZGVzKGZsb29yLmlkKSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coZmxvb3JNYXR0ZXJwb3J0KTtcclxuICAgICAgICBpZiAoZmxvb3JNYXR0ZXJwb3J0KSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNkay5GbG9vci5tb3ZlVG8oZmxvb3JNYXR0ZXJwb3J0LnNlcXVlbmNlKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ2Fubm90IG1vdmUgdG8gRmxvb3JcIiwgZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBpbXBvcnRGbG9vckRhdGEoXHJcbiAgICAgICAgZGVmYXV0Wm9uZUlEOiBzdHJpbmcsXHJcbiAgICAgICAgbm9kZTogTm9kZSxcclxuICAgICk6IFByb21pc2U8Wm9uZVtdPiB7XHJcbiAgICAgICAgY29uc3Qgem9uZXMgPSBbXTtcclxuICAgICAgICBhd2FpdCB0aGlzLnNkay5Nb2RlLm1vdmVUbyh0aGlzLnNkay5Nb2RlLk1vZGUuRkxPT1JQTEFOKTtcclxuICAgICAgICBjb25zdCBubWJGbG9vcnMgPSBPYmplY3Qua2V5cyh0aGlzLmZsb29ycykubGVuZ3RoO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiVG90YWwgbnVtYmVyIG9mIGZsb29yc1wiLCBubWJGbG9vcnMpO1xyXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBubWJGbG9vcnM7IGluZGV4ICs9IDEpIHtcclxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWF3YWl0LWluLWxvb3BcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJJbXBvcnRpbmcgZmxvb3JcIiwgaW5kZXgpO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNkay5GbG9vci5tb3ZlVG8oaW5kZXgpLnRoZW4oYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgd2FpdCg3MDApO1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJhYm91dCB0byBzYXZlIHRoZSBmbG9vclwiLCBpbmRleCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB6b25lID0gYXdhaXQgdGhpcy5zYXZlRmxvb3IoZGVmYXV0Wm9uZUlELCBub2RlKTtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwicmVjZWl2ZWQgZmxvb3Igem9uZVwiLCB6b25lKTtcclxuICAgICAgICAgICAgICAgIHpvbmVzLnB1c2goem9uZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHpvbmVzKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIHNhdmVGbG9vcihkZWZhdXRab25lSUQ6IHN0cmluZywgbm9kZTogTm9kZSk6IFByb21pc2U8Wm9uZT4ge1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy5jdXJyZW50Rmxvb3IuaWQ7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEZsb29yLm5hbWUgIT09IFwiXCIpIHtcclxuICAgICAgICAgICAgbmFtZSA9IHRoaXMuY3VycmVudEZsb29yLm5hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGxheWVyRmxvb3IgPSBhd2FpdCB0aGlzLmdldExheWVyQnlOYW1lKFwiRkxPT1JcIik7XHJcbiAgICAgICAgY29uc3Qgc3dlZXBzSW5mbyA9IE9iamVjdC52YWx1ZXModGhpcy5zd2VlcHMpO1xyXG4gICAgICAgIGNvbnN0IHN3ZWVwc0ZvckZsb29yID0gc3dlZXBzSW5mby5maWx0ZXIoXHJcbiAgICAgICAgICAgIChzd2VlcEluZm8pID0+IHN3ZWVwSW5mby5mbG9vckluZm8uaWQgPT09IHRoaXMuY3VycmVudEZsb29yLmlkLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3Qgc3dlZXBJRHM6IHN0cmluZ1tdID0gc3dlZXBzRm9yRmxvb3IubWFwKChzd2VlcCkgPT4gc3dlZXAudXVpZCk7XHJcbiAgICAgICAgY29uc3Qgem9uZSA9IGF3YWl0IHRoaXMuY3JlYXRlWm9uZShcclxuICAgICAgICAgICAgYMOJdGFnZSAke25hbWV9IC0gJHtub2RlLm1ldGFkYXRhfWAsXHJcbiAgICAgICAgICAgIGxheWVyRmxvb3IuaWQsXHJcbiAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgIGRlZmF1dFpvbmVJRCxcclxuICAgICAgICAgICAgc3dlZXBJRHMsXHJcbiAgICAgICAgICAgIG5vZGUsXHJcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHsgbWF0dGVycG9ydEZsb29yU2VxdWVuY2U6IHRoaXMuY3VycmVudEZsb29yLnNlcXVlbmNlIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvLyBUT0RPIGxpbmsgdG8gc2NhbnNcclxuICAgICAgICBjb25zdCBiYXNlNjQgPSBhd2FpdCB0aGlzLnNkay5SZW5kZXJlci50YWtlU2NyZWVuU2hvdChcclxuICAgICAgICAgICAgeyB3aWR0aDogNDA5NiwgaGVpZ2h0OiAyMDQ4IH0sXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBzcGFjZUlEc2hvcnQgPSB0aGlzLnNwYWNlSUQuc2xpY2UoMCwgOCk7XHJcbiAgICAgICAgYXdhaXQgdXBsb2FkQmFzZTY0SW1hZ2UoXHJcbiAgICAgICAgICAgIGJhc2U2NCxcclxuICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgYHZpc2l0cy8ke3RoaXMubW9kZWxJRH0vcGxhbnMvYCxcclxuICAgICAgICAgICAgYHBsYW5fZmxvb3JfJHt0aGlzLmN1cnJlbnRGbG9vci5pZH1fJHtzcGFjZUlEc2hvcnR9YCxcclxuICAgICAgICApO1xyXG4gICAgICAgIC8vIGNyZWF0ZSBQbGFuIG9iamVjdFxyXG4gICAgICAgIGNvbnN0IHBsYW4gPSB7XHJcbiAgICAgICAgICAgIG5hbWU6IGBwbGFuX2Zsb29yXyR7dGhpcy5jdXJyZW50Rmxvb3IuaWR9YCxcclxuICAgICAgICAgICAgYW5uZXhlOiBgdmlzaXRzLyR7dGhpcy5tb2RlbElEfS9wbGFucy9wbGFuX2Zsb29yXyR7dGhpcy5jdXJyZW50Rmxvb3IuaWR9XyR7c3BhY2VJRHNob3J0fS5qcGVnYCxcclxuICAgICAgICAgICAgem9uZUlEOiB6b25lLmlkLFxyXG4gICAgICAgICAgICBzcGFjZUlEOiB0aGlzLnNwYWNlSUQsXHJcbiAgICAgICAgICAgIGlzQ3VycmVudEZvclpvbmU6IHRydWUsXHJcbiAgICAgICAgICAgIGlzTW9kaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBpc0ltcG9ydGVkTWF0dGVycG9ydDogdHJ1ZSxcclxuICAgICAgICB9IGFzIFBsYW47XHJcbiAgICAgICAgYXdhaXQgdGhpcy5wbGFuU2VydmljZS5jcmVhdGVQbGFuKHBsYW4pO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiZmxvb3Igc2F2ZWRcIik7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh6b25lKTtcclxuICAgIH1cclxuXHJcbiAgICBhYmFuZG9uKCkge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImFiYW5kb25uaW5nIGltcG9ydFwiKTtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVGcmFtZSgpO1xyXG4gICAgICAgICAgICB0aGlzLnN0b3AgPSB0cnVlO1xyXG4gICAgICAgIH0sIDE1MDApO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUZyYW1lKCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudEZyYW1lLnJlbW92ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldExheWVyQnlOYW1lKG5hbWU6IHN0cmluZyk6IFByb21pc2U8TGF5ZXI+IHtcclxuICAgICAgICBjb25zdCBtaXNzaW9uID0gdGhpcy51c2VyU2VydmljZS5jdXJyZW50TWlzc2lvbih0aGlzLnNwYWNlSUQpO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRPcmdJZCA9IG1pc3Npb24ub3JnYW5pc2F0aW9uSUQ7XHJcbiAgICAgICAgY29uc3QgbGF5ZXJzID0gYXdhaXQgdGhpcy5sYXllclNlcnZpY2UuZ2V0TGF5ZXJCeU5hbWVGb3JPcmdhbmlzYXRpb24oXHJcbiAgICAgICAgICAgIG5hbWUsXHJcbiAgICAgICAgICAgIGN1cnJlbnRPcmdJZCxcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChsYXllcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbGF5ZXJzWzBdO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjcmVhdGUgdGhlblxyXG4gICAgICAgIHJldHVybiB0aGlzLmxheWVyU2VydmljZS5jcmVhdGVMYXllckZvck9yZ2FuaXNhdGlvbihuYW1lLCBjdXJyZW50T3JnSWQpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
318
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0dGVycG9ydC1pbXBvcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1jb3JlL3NyYy9saWIvc2VydmljZXMvbWF0dGVycG9ydC1pbXBvcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLHdCQUF3QixFQUFFLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxXQUFXLEVBQXVDLE1BQU0sa0JBQWtCLENBQUM7QUFLcEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7Ozs7Ozs7QUFPN0YsTUFBTSxPQUFPLHVCQUF1QjtJQXVDaEMsWUFDWSxpQkFBb0MsRUFDcEMsV0FBd0IsRUFDeEIsYUFBNEIsRUFDNUIsWUFBMEIsRUFDMUIsV0FBNEIsRUFDNUIsV0FBd0I7UUFMeEIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDNUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFkN0IsU0FBSSxHQUFHLEtBQUssQ0FBQztRQUViLG9CQUFlLEdBQXFCLElBQUksT0FBTyxFQUFXLENBQUM7UUFFM0Qsd0JBQW1CLEdBQW9CLElBQUksT0FBTyxFQUFVLENBQUM7UUFFN0QscUJBQWdCLEdBQW9CLElBQUksT0FBTyxFQUFVLENBQUM7SUFTN0QsQ0FBQztJQS9CTCxJQUFXLE9BQU87UUFDZCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDekIsQ0FBQztJQUVELElBQVcsT0FBTyxDQUFDLEtBQWE7UUFDNUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQVcsT0FBTztRQUNkLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBVyxPQUFPLENBQUMsS0FBYTtRQUM1QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUMxQixDQUFDO0lBbUJELEtBQUssQ0FBQyxlQUFlLENBQUMsT0FBZTtRQUNqQyxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztRQUVsQixXQUFXO1FBQ1gsT0FBTyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQztTQUMzQztRQUNELElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDNUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDaEMsTUFBTSxDQUFDLEtBQUssR0FBRyxxQkFBcUIsQ0FBQztRQUNyQyxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUN2QixNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztRQUN0QixNQUFNLENBQUMsRUFBRSxHQUFHLGVBQWUsQ0FBQztRQUM1QixNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3hELE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUM7UUFDM0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQixJQUFJO1lBQ0EsYUFBYTtZQUNiLElBQUksQ0FBQyxHQUFHLEdBQUcsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FDbEMsTUFBTSxFQUFFLDJCQUEyQixFQUFFLE1BQU0sQ0FDOUMsQ0FBQztZQUNGLDBCQUEwQjtZQUMxQixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUMxQixtQkFBbUIsRUFBRSxTQUFTLEdBQUcsQ0FBQyxVQUFlO29CQUM3QyxxQ0FBcUM7b0JBQ3JDLElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDO2dCQUM3QixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQzthQUNmLENBQUMsQ0FBQztZQUNILDZCQUE2QjtZQUM3QixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUM1QixTQUFTLEdBQUcsQ0FBQyxZQUFZO2dCQUNyQixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztZQUNyQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUNmLENBQUM7WUFFRiwwQkFBMEI7WUFDMUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDMUIsbUJBQW1CLEVBQUUsU0FBUyxHQUFHLENBQUMsVUFBVTtvQkFDeEMsT0FBTyxDQUFDLEdBQUcsQ0FDUCxrQ0FBa0MsRUFDbEMsVUFBVSxDQUNiLENBQUM7b0JBQ0YsSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUM7Z0JBQzdCLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2FBQ2YsQ0FBQyxDQUFDO1lBQ0gsZ0JBQWdCO1lBQ2hCLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDO2lCQUNwQyxJQUFJLENBQUMsVUFBVSxJQUFJO2dCQUNoQiwyQkFBMkI7Z0JBQzNCLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLElBQUksRUFBRSxDQUFDLENBQUM7WUFDM0MsQ0FBQyxDQUFDO2lCQUNELEtBQUssQ0FBQyxVQUFVLEtBQUs7Z0JBQ2xCLHdCQUF3QjtZQUM1QixDQUFDLENBQUMsQ0FBQztZQUNQLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDekIsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1IsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUM7U0FDNUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVUsQ0FDWixPQUFlLEVBQ2YsT0FBZSxFQUNmLFlBQXFCLEtBQUssRUFDMUIsT0FBYSxJQUFJO1FBRWpCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2QsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUM7U0FDdEQ7UUFDRCxJQUFJLFVBQVUsR0FBVyxFQUFFLENBQUM7UUFDNUIsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM5RCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVoRCxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ1gsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUMsQ0FBQztTQUM1RTtRQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztRQUM5QywyQkFBMkI7UUFDM0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sY0FBYyxDQUNoQixVQUFVLElBQUksQ0FBQyxPQUFPLGFBQWEsRUFDbkMsSUFBSSxFQUNKLFdBQVcsQ0FDZCxDQUFDO1FBQ0YsSUFBSSxTQUFTLEVBQUU7WUFDWCxpREFBaUQ7WUFDakQsTUFBTSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDN0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQy9CLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNoQztRQUNELCtCQUErQjtRQUMvQixNQUFNLGFBQWEsR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDNUQsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQzVDLElBQUksQ0FBQyxRQUFRLEVBQ2IsYUFBYSxDQUFDLEVBQUUsRUFDaEIsT0FBTyxFQUNQLFFBQVEsQ0FBQyxFQUFFLEVBQ1gsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQ3hCLElBQUksQ0FDUCxDQUFDO1FBQ0YsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQ3JCLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNqQztRQUNELElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNiLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQ25DLGtCQUFrQixDQUFDLEVBQUUsRUFDckIsSUFBSSxDQUNQLENBQUM7U0FDTDtRQUNELDJCQUEyQjtRQUMzQixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ2IsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUN2QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ25DLE1BQU0sZUFBZSxHQUFHO2dCQUNwQixpQkFBaUIsRUFBRSxTQUFTLENBQUMsSUFBSTtnQkFDakMsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztnQkFDNUMsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztnQkFDNUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxHQUFHO2dCQUN0QixNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0JBQ2YsT0FBTzthQUNJLENBQUM7WUFDaEIsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLENBQ3JELGVBQWUsQ0FDbEIsQ0FBQztZQUNGLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQ04sT0FBTyxDQUFDLEdBQUcsQ0FDUCx5QkFBeUIsRUFDekIsZUFBZSxDQUFDLEVBQUUsQ0FDckIsQ0FBQzthQUNMO1FBQ0wsQ0FBQyxDQUFDLENBQ0wsQ0FBQztRQUNGLE1BQU0sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzdCLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVqQyxDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVUsQ0FDWixJQUFZLEVBQ1osT0FBZSxFQUNmLFVBQWtCLElBQUksRUFDdEIsV0FBbUIsSUFBSSxFQUN2QixTQUFtQixFQUFFLEVBQ3JCLE9BQWEsSUFBSSxFQUNqQixXQUFtQixJQUFJO1FBRXZCLE1BQU0sU0FBUyxHQUFHO1lBQ2QsSUFBSTtZQUNKLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixPQUFPO1lBQ1AsUUFBUSxFQUFFLE1BQU07WUFDaEIsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7U0FDM0IsQ0FBQztRQUNWLHdCQUF3QixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3BDLElBQUksT0FBTyxFQUFFO1lBQ1QsU0FBUyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7U0FDL0I7UUFDRCxJQUFJLFFBQVEsRUFBRTtZQUNWLFNBQVMsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1NBQ2pDO1FBQ0QsSUFBSSxRQUFRLEVBQUU7WUFDVixTQUFTLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztTQUNqQztRQUNELE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUQsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVELEtBQUssQ0FBQyxlQUFlO1FBQ2pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQyxPQUFPLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUNqQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN6QyxJQUFJLE9BQU8sQ0FBQztZQUNaLElBQUksU0FBUyxDQUFDO1lBQ2QsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDM0MsT0FBTyxDQUFDLEdBQUcsQ0FBQywrQkFBK0IsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUN2RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3JDLDZDQUE2QztZQUM3QyxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUU7Z0JBQ3ZDLE9BQU8sQ0FBQyxHQUFHLENBQ1AsMkJBQTJCLEVBQzNCLFlBQVksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQ3hDLENBQUM7Z0JBQ0YsU0FBUyxHQUFHLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDbkQsUUFBUSxHQUFHLFNBQVMsR0FBRyxFQUFFO29CQUNyQixDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDO29CQUN0QixDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxDQUFDO2FBQ3BDO2lCQUFNO2dCQUNILFNBQVMsR0FBRyxDQUFDLENBQUM7Z0JBQ2QsUUFBUSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxDQUFDO2dCQUN0RCxPQUFPLENBQUM7YUFDWDtZQUVELEtBQUssSUFBSSxLQUFLLEdBQUcsU0FBUyxFQUFFLEtBQUssR0FBRyxPQUFPLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRTtnQkFDckQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7b0JBQ1osTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUMvQyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQzt3QkFDOUIsQ0FBQyxFQUFFLENBQUM7d0JBQ0osQ0FBQyxFQUFFLENBQUM7cUJBQ1AsQ0FBQyxDQUFDO29CQUNILE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQ25ELEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQzdCLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQ3RDLENBQUM7b0JBQ0YsTUFBTSxpQkFBaUIsQ0FDbkIsR0FBRyxFQUNILEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQ2pCLFVBQVUsSUFBSSxDQUFDLE9BQU8sVUFBVSxFQUNoQyxPQUFPLENBQ1YsQ0FBQztvQkFDRixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUN4QztxQkFBTTtvQkFDSCxZQUFZLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDO29CQUN6QywwQkFBMEIsQ0FBQyxVQUFVLElBQUksQ0FBQyxPQUFPLFNBQVMsQ0FBQyxDQUFDO29CQUM1RCxPQUFPLENBQUMsR0FBRyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7b0JBQzFELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDZixNQUFNO2lCQUNUO2FBQ0o7WUFDRCxJQUFJLE9BQU8sS0FBSyxRQUFRLEVBQUU7Z0JBQ3RCLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztnQkFDL0IsWUFBWSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDekMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNuQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztnQkFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2pCO2lCQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUNuQixpREFBaUQ7Z0JBQ2pELFlBQVksQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUMxRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ25CLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3pDLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDN0MsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2pCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxTQUFpQjtRQUMvQixVQUFVO1FBQ1YsMEJBQTBCO1FBQzFCLElBQUksZUFBZSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FDakQsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssRUFBRSxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUNqRSxDQUFDO1FBQ0YsUUFBUTtRQUNSLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDbEIsZUFBZSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ3hELFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUMvQixDQUFDO1NBQ0w7UUFDRCxnQ0FBZ0M7UUFDaEMsSUFBSSxlQUFlLEVBQUU7WUFDakIsSUFBSTtnQkFDQSxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDekQ7WUFBQyxPQUFPLEtBQUssRUFBRTtnQkFDWixPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQzlDO1NBQ0o7SUFDTCxDQUFDO0lBRU0sS0FBSyxDQUFDLGVBQWUsQ0FDeEIsWUFBb0IsRUFDcEIsSUFBVTtRQUVWLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNqQixNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekQsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ2xELE9BQU8sQ0FBQyxHQUFHLENBQUMsd0JBQXdCLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDakQsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLFNBQVMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFO1lBQy9DLDRDQUE0QztZQUM1QyxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3RDLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTtnQkFDL0MsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2hCLGlEQUFpRDtnQkFDakQsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDdEQsNENBQTRDO2dCQUM1QyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3JCLENBQUMsQ0FBQyxDQUFDO1NBQ047UUFDRCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVPLEtBQUssQ0FBQyxTQUFTLENBQUMsWUFBb0IsRUFBRSxJQUFVO1FBQ3BELElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1FBQ2hDLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEtBQUssRUFBRSxFQUFFO1lBQy9CLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztTQUNqQztRQUNELE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0RCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QyxNQUFNLGNBQWMsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUNwQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQ2pFLENBQUM7UUFDRixNQUFNLFFBQVEsR0FBYSxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckUsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUM5QixTQUFTLElBQUksTUFBTSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQ2xDLFVBQVUsQ0FBQyxFQUFFLEVBQ2IsSUFBSSxFQUNKLFlBQVksRUFDWixRQUFRLEVBQ1IsSUFBSSxFQUNKLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSx1QkFBdUIsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQzFFLENBQUM7UUFDRixxQkFBcUI7UUFDckIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQ2pELEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQ2hDLENBQUM7UUFDRixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDOUMsTUFBTSxpQkFBaUIsQ0FDbkIsTUFBTSxFQUNOLElBQUksRUFDSixVQUFVLElBQUksQ0FBQyxPQUFPLFNBQVMsRUFDL0IsY0FBYyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsSUFBSSxZQUFZLEVBQUUsQ0FDdkQsQ0FBQztRQUNGLHFCQUFxQjtRQUNyQixNQUFNLElBQUksR0FBRztZQUNULElBQUksRUFBRSxjQUFjLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUFFO1lBQzFDLE1BQU0sRUFBRSxVQUFVLElBQUksQ0FBQyxPQUFPLHFCQUFxQixJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsSUFBSSxZQUFZLE9BQU87WUFDOUYsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ2YsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLGdCQUFnQixFQUFFLElBQUk7WUFDdEIsVUFBVSxFQUFFLEtBQUs7WUFDakIsb0JBQW9CLEVBQUUsSUFBSTtTQUNyQixDQUFDO1FBQ1YsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4Qyw4QkFBOEI7UUFDOUIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxPQUFPO1FBQ0gsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNaLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDckIsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxLQUFLLENBQUMsY0FBYyxDQUFDLElBQVk7UUFDN0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUM7UUFDNUMsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLDZCQUE2QixDQUNoRSxJQUFJLEVBQ0osWUFBWSxDQUNmLENBQUM7UUFDRixJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ25CLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3BCO1FBQ0QsY0FBYztRQUNkLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDNUUsQ0FBQzs7b0hBdFpRLHVCQUF1Qjt3SEFBdkIsdUJBQXVCLGNBRnBCLE1BQU07MkZBRVQsdUJBQXVCO2tCQUhuQyxVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyByZWplY3RzIH0gZnJvbSBcImFzc2VydFwiO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgcmVtb3ZlTnVsbEtleXNGcm9tT2JqZWN0LCB3YWl0IH0gZnJvbSBcIi4uL2hlbHBlcnMuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBMZXZlbFN0YXR1cywgTGF5ZXIsIE5vZGUsIFpvbmUsIE5hdmlnYXRpb24sIFBsYW4gfSBmcm9tIFwiLi4vdHlwZXMuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBMYXllclNlcnZpY2UgfSBmcm9tIFwiLi9tb2RlbHMvbGF5ZXIuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBOYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gXCIuL21vZGVscy9uYXZpZ2F0aW9uLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgUGxhblNlcnZpY2UgfSBmcm9tIFwiLi9tb2RlbHMvcGxhbi5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFpvbmVTZXJ2aWNlIH0gZnJvbSBcIi4vbW9kZWxzL3pvbmUuc2VydmljZVwiO1xyXG5pbXBvcnQgeyB1cGxvYWRKc29uVG9TMywgdXBsb2FkQmFzZTY0SW1hZ2UsIHJlbW92ZUFsbEZpbGVzRnJvbUZvbGRlclMzIH0gZnJvbSBcIi4vczMuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBCYXNlVXNlclNlcnZpY2UgfSBmcm9tIFwiLi91c2VyLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgVmlld2VyU2VydmljZSB9IGZyb20gXCIuL3ZpZXdlci5zZXJ2aWNlXCI7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiBcInJvb3RcIixcclxufSlcclxuZXhwb3J0IGNsYXNzIE1hdHRlcnBvcnRJbXBvcnRTZXJ2aWNlIHtcclxuICAgIHByaXZhdGUgY3VycmVudEZyYW1lO1xyXG5cclxuICAgIHB1YmxpYyBzZGs6IGFueTtcclxuXHJcbiAgICBwcml2YXRlIHN3ZWVwczogT2JqZWN0O1xyXG5cclxuICAgIHB1YmxpYyBmbG9vcnM6IE9iamVjdDtcclxuXHJcbiAgICBwcml2YXRlIGN1cnJlbnRGbG9vcjtcclxuXHJcbiAgICBwcml2YXRlIF9tb2RlbElEOiBzdHJpbmc7XHJcblxyXG4gICAgcHJpdmF0ZSBfc3BhY2VJRDogc3RyaW5nO1xyXG5cclxuICAgIHB1YmxpYyBnZXQgc3BhY2VJRCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zcGFjZUlEO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXQgc3BhY2VJRCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fc3BhY2VJRCA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgbW9kZWxJRCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tb2RlbElEO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXQgbW9kZWxJRCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fbW9kZWxJRCA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdG9wID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIGltcG9ydGluZ0ltYWdlczogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcblxyXG4gICAgcHVibGljIHN3ZWVwUHJvY2Vzc2VkQ291bnQ6IFN1YmplY3Q8bnVtYmVyPiA9IG5ldyBTdWJqZWN0PG51bWJlcj4oKTtcclxuXHJcbiAgICBwdWJsaWMgdG90YWxTd2VlcHNDb3VudDogU3ViamVjdDxudW1iZXI+ID0gbmV3IFN1YmplY3Q8bnVtYmVyPigpO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgbmF2aWdhdGlvblNlcnZpY2U6IE5hdmlnYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgem9uZVNlcnZpY2U6IFpvbmVTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgdmlld2VyU2VydmljZTogVmlld2VyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGxheWVyU2VydmljZTogTGF5ZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IEJhc2VVc2VyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHBsYW5TZXJ2aWNlOiBQbGFuU2VydmljZSxcclxuICAgICkgeyB9XHJcblxyXG4gICAgYXN5bmMgaW5pdFNka0Zvck1vZGVsKG1vZGVsSUQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHRoaXMuc3RvcCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvLyBMb2FkIFNES1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiTG9hZGluZyBNYXR0ZXJwb3J0IFNES1wiKTtcclxuICAgICAgICB0aGlzLm1vZGVsSUQgPSBtb2RlbElEO1xyXG4gICAgICAgIGNvbnN0IGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIik7XHJcbiAgICAgICAgaWYgKCFpZnJhbWUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGNyZWF0ZSBpZnJhbWVcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudmlld2VyU2VydmljZS5zZXRUb3VyVXJsKG1vZGVsSUQpO1xyXG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMudmlld2VyU2VydmljZS5nZXRUb3VyVXJsKCk7XHJcbiAgICAgICAgaWZyYW1lLnNldEF0dHJpYnV0ZShcInNyY1wiLCB1cmwpO1xyXG4gICAgICAgIGlmcmFtZS5hbGxvdyA9IFwieHItc3BhdGlhbC10cmFja2luZ1wiO1xyXG4gICAgICAgIGlmcmFtZS5oZWlnaHQgPSBcIjEwMCVcIjtcclxuICAgICAgICBpZnJhbWUud2lkdGggPSBcIjEwMCVcIjtcclxuICAgICAgICBpZnJhbWUuaWQgPSBcInZpZXdlci1tb2R1bGVcIjtcclxuICAgICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiN2aWV3ZXItZnJhbWVcIik7XHJcbiAgICAgICAgZWxlbWVudC5hcHBlbmQoaWZyYW1lKTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRGcmFtZSA9IGlmcmFtZTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcImhlcmVcIik7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICB0aGlzLnNkayA9IGF3YWl0IHdpbmRvdy5NUF9TREsuY29ubmVjdChcclxuICAgICAgICAgICAgICAgIGlmcmFtZSwgXCJxbjl3c2FzdXk1aDJmenJicm4xbnpyMGlkXCIsIFwiMy4xMVwiXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIC8vIFN1YnNjcmliZSB0byBGbG9vciBkYXRhXHJcbiAgICAgICAgICAgIHRoaXMuc2RrLkZsb29yLmRhdGEuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgIG9uQ29sbGVjdGlvblVwZGF0ZWQ6IGZ1bmN0aW9uIHVwZChjb2xsZWN0aW9uOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIkZsb29yc1wiLCBjb2xsZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZsb29ycyA9IGNvbGxlY3Rpb247XHJcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAvLyBTdWJzY3JpYmUgdG8gY3VycmVudCBGbG9vclxyXG4gICAgICAgICAgICB0aGlzLnNkay5GbG9vci5jdXJyZW50LnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHVwZChjdXJyZW50Rmxvb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRGbG9vciA9IGN1cnJlbnRGbG9vcjtcclxuICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFN1YnNjcmliZSB0byBTd2VlcCBkYXRhXHJcbiAgICAgICAgICAgIHRoaXMuc2RrLlN3ZWVwLmRhdGEuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgIG9uQ29sbGVjdGlvblVwZGF0ZWQ6IGZ1bmN0aW9uIHVwZChjb2xsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidGhlIGVudGlyZSB1cC10by1kYXRlIGNvbGxlY3Rpb25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbixcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3dlZXBzID0gY29sbGVjdGlvbjtcclxuICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIC8vIHJlbW92ZSBsYWJlbHNcclxuICAgICAgICAgICAgdGhpcy5zZGsuU2V0dGluZ3MudXBkYXRlKFwibGFiZWxzXCIsIGZhbHNlKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBTZXR0aW5nIHVwZGF0ZSBjb21wbGV0ZS5cclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgTGFiZWxzIHNldHRpbmc6ICR7ZGF0YX1gKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gU2V0dGluZyB1cGRhdGUgZXJyb3IuXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJpbml0IGRvbmVcIik7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZXJyb3IgaW5pdCBNYXR0ZXJwb3J0XCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBpbXBvcnREYXRhKFxyXG4gICAgICAgIHNwYWNlSUQ6IHN0cmluZyxcclxuICAgICAgICBzdXJmYWNlOiBudW1iZXIsXHJcbiAgICAgICAgcmVsb2FkaW5nOiBib29sZWFuID0gZmFsc2UsXHJcbiAgICAgICAgbm9kZTogTm9kZSA9IG51bGwsXHJcbiAgICApOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICB0aGlzLnNwYWNlSUQgPSBzcGFjZUlEO1xyXG4gICAgICAgIGlmICghdGhpcy5zd2VlcHMpIHtcclxuICAgICAgICAgICAgUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwibm8gc3dlZXBzIGluaXRpYWxpemVkXCIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGZsb29yWm9uZXM6IFpvbmVbXSA9IFtdO1xyXG4gICAgICAgIGNvbnN0IHpvbmVzID0gYXdhaXQgdGhpcy56b25lU2VydmljZS5nZXRab25lc0J5U3BhY2Uoc3BhY2VJRCk7XHJcbiAgICAgICAgY29uc3QgbWFpblpvbmUgPSB6b25lcy5maW5kKCh6KSA9PiAhei5wYXJlbnRJRCk7XHJcblxyXG4gICAgICAgIGlmICghbWFpblpvbmUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIm1pc3NpbmcgZGF0YSAobm8gbWFpbiBCdWlsZGluZyBab25lKVwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiaW1wb3J0aW5nIGRhdGEgZnJvbSBtYXR0ZXJwb3J0XCIpO1xyXG4gICAgICAgIC8vIHNhdmUgc3dlZXBzIGRhdGEgYXMganNvblxyXG4gICAgICAgIGNvbnN0IGpzb24gPSBKU09OLnN0cmluZ2lmeShPYmplY3QudmFsdWVzKHRoaXMuc3dlZXBzKSk7XHJcbiAgICAgICAgYXdhaXQgdXBsb2FkSnNvblRvUzMoXHJcbiAgICAgICAgICAgIGB2aXNpdHMvJHt0aGlzLm1vZGVsSUR9L2ludmVudG9yeS9gLFxyXG4gICAgICAgICAgICBqc29uLFxyXG4gICAgICAgICAgICBcImRhdGEuanNvblwiLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHJlbG9hZGluZykge1xyXG4gICAgICAgICAgICAvLyBwZXJmb3JtIG9ubHkgMzYwIGltcG9ydCBzaW5jZSB3ZSBhcmUgcmVsb2FkaW5nXHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuaW1wb3J0MzYwaW1hZ2VzKCk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiYWZ0ZXIgcmVsb2FkaW5nXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjaGVjayBsYXllciBvZiBidWlsZGluZyB0eXBlXHJcbiAgICAgICAgY29uc3QgbGF5ZXJCdWlsZGluZyA9IGF3YWl0IHRoaXMuZ2V0TGF5ZXJCeU5hbWUoXCJCVUlMRElOR1wiKTtcclxuICAgICAgICBjb25zdCBjcmVhdGVkRGVmYXVsdFpvbmUgPSBhd2FpdCB0aGlzLmNyZWF0ZVpvbmUoXHJcbiAgICAgICAgICAgIG5vZGUubWV0YWRhdGEsXHJcbiAgICAgICAgICAgIGxheWVyQnVpbGRpbmcuaWQsXHJcbiAgICAgICAgICAgIHN1cmZhY2UsXHJcbiAgICAgICAgICAgIG1haW5ab25lLmlkLFxyXG4gICAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLnN3ZWVwcyksXHJcbiAgICAgICAgICAgIG5vZGUsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoIWNyZWF0ZWREZWZhdWx0Wm9uZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZmxvb3JzKSB7XHJcbiAgICAgICAgICAgIGZsb29yWm9uZXMgPSBhd2FpdCB0aGlzLmltcG9ydEZsb29yRGF0YShcclxuICAgICAgICAgICAgICAgIGNyZWF0ZWREZWZhdWx0Wm9uZS5pZCxcclxuICAgICAgICAgICAgICAgIG5vZGUsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGZsb29yWm9uZXMpO1xyXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLnN3ZWVwcykubWFwKGFzeW5jIChrZXkpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN3ZWVwSW5mbyA9IHRoaXMuc3dlZXBzW2tleV07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuYXZpZ2F0aW9uSW5wdXQgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0dGVycG9ydFN3ZWVwSUQ6IHN3ZWVwSW5mby51dWlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBKU09OLnN0cmluZ2lmeShzd2VlcEluZm8ucG9zaXRpb24pLFxyXG4gICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uOiBKU09OLnN0cmluZ2lmeShzd2VlcEluZm8ucm90YXRpb24pLFxyXG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiBMZXZlbFN0YXR1cy5MT1csXHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZUlEOiBub2RlLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHNwYWNlSUQsXHJcbiAgICAgICAgICAgICAgICB9IGFzIE5hdmlnYXRpb247XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuYXYgPSBhd2FpdCB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmNyZWF0ZU5hdmlnYXRpb24oXHJcbiAgICAgICAgICAgICAgICAgICAgbmF2aWdhdGlvbklucHV0LFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGlmICghbmF2KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY291bGQgY3JlYXRlIG5hdmlnYXRpb25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdGlvbklucHV0LmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5pbXBvcnQzNjBpbWFnZXMoKTtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjcmVhdGVab25lKFxyXG4gICAgICAgIG5hbWU6IHN0cmluZyxcclxuICAgICAgICBsYXllcklEOiBzdHJpbmcsXHJcbiAgICAgICAgc3VyZmFjZTogbnVtYmVyID0gbnVsbCxcclxuICAgICAgICBwYXJlbnRJRDogc3RyaW5nID0gbnVsbCxcclxuICAgICAgICBzd2VlcHM6IHN0cmluZ1tdID0gW10sXHJcbiAgICAgICAgbm9kZTogTm9kZSA9IG51bGwsXHJcbiAgICAgICAgbWV0YWRhdGE6IHN0cmluZyA9IG51bGwsXHJcbiAgICApOiBQcm9taXNlPFpvbmU+IHtcclxuICAgICAgICBjb25zdCB6b25lSW5wdXQgPSB7XHJcbiAgICAgICAgICAgIG5hbWUsXHJcbiAgICAgICAgICAgIHNwYWNlSUQ6IHRoaXMuc3BhY2VJRCxcclxuICAgICAgICAgICAgbGF5ZXJJRCxcclxuICAgICAgICAgICAgc3dlZXBJRHM6IHN3ZWVwcyxcclxuICAgICAgICAgICAgbm9kZUlEczogbm9kZSA/IFtub2RlLmlkXSA6IG51bGwsXHJcbiAgICAgICAgfSBhcyBab25lO1xyXG4gICAgICAgIHJlbW92ZU51bGxLZXlzRnJvbU9iamVjdCh6b25lSW5wdXQpO1xyXG4gICAgICAgIGlmIChzdXJmYWNlKSB7XHJcbiAgICAgICAgICAgIHpvbmVJbnB1dC5zdXJmYWNlID0gc3VyZmFjZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBhcmVudElEKSB7XHJcbiAgICAgICAgICAgIHpvbmVJbnB1dC5wYXJlbnRJRCA9IHBhcmVudElEO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWV0YWRhdGEpIHtcclxuICAgICAgICAgICAgem9uZUlucHV0Lm1ldGFkYXRhID0gbWV0YWRhdGE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG5ld0xvY2FsID0gYXdhaXQgdGhpcy56b25lU2VydmljZS5jcmVhdGUoem9uZUlucHV0KTtcclxuICAgICAgICByZXR1cm4gbmV3TG9jYWw7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaW1wb3J0MzYwaW1hZ2VzKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiSW1wb3J0aW5nIDM2MCBpbWFnZXNcIik7XHJcbiAgICAgICAgdGhpcy5pbXBvcnRpbmdJbWFnZXMubmV4dCh0cnVlKTtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc2NhbnMgPSBPYmplY3QudmFsdWVzKHRoaXMuc3dlZXBzKTtcclxuICAgICAgICAgICAgbGV0IG1heFNjYW47XHJcbiAgICAgICAgICAgIGxldCBpbmRleFNjYW47XHJcbiAgICAgICAgICAgIGNvbnN0IG5tYlNjYW5zID0gT2JqZWN0LmtleXMoc2NhbnMpLmxlbmd0aDtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJUb3RhbCBudW1iZXIgb2Ygc2NhbiBwb2ludHMgOlwiLCBubWJTY2Fucyk7XHJcbiAgICAgICAgICAgIHRoaXMudG90YWxTd2VlcHNDb3VudC5uZXh0KG5tYlNjYW5zKTtcclxuICAgICAgICAgICAgLy8gY2hlY2sgaWYgd2Ugc3RhcnRlZCB0byBsb2FkIGltYWdlcyBhbHJlYWR5XHJcbiAgICAgICAgICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImluZGV4U2NhbkxvYWRcIikpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgICAgICAgICAgIFwicmV0YWtpbmcgaW1wb3J0IGZyb20gc2NhblwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaW5kZXhTY2FuTG9hZFwiKSxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBpbmRleFNjYW4gPSArbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJpbmRleFNjYW5Mb2FkXCIpO1xyXG4gICAgICAgICAgICAgICAgbm1iU2NhbnMgPCBpbmRleFNjYW4gKyA1MFxyXG4gICAgICAgICAgICAgICAgICAgID8gKG1heFNjYW4gPSBubWJTY2FucylcclxuICAgICAgICAgICAgICAgICAgICA6IChtYXhTY2FuID0gaW5kZXhTY2FuICsgNTApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaW5kZXhTY2FuID0gMDtcclxuICAgICAgICAgICAgICAgIG5tYlNjYW5zIDwgNTAgPyAobWF4U2NhbiA9IG5tYlNjYW5zKSA6IChtYXhTY2FuID0gNTApO1xyXG4gICAgICAgICAgICAgICAgbWF4U2NhbjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSBpbmRleFNjYW47IGluZGV4IDwgbWF4U2NhbjsgaW5kZXggKz0gMSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnN0b3ApIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNkay5Td2VlcC5tb3ZlVG8oc2NhbnNbaW5kZXhdLnV1aWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2RrLkNhbWVyYS5zZXRSb3RhdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1nID0gYXdhaXQgdGhpcy5zZGsuUmVuZGVyZXIudGFrZUVxdWlyZWN0YW5ndWxhcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgeyB3aWR0aDogMjA0OCwgaGVpZ2h0OiAxMDI0IH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbWF0dGVydGFnczogZmFsc2UsIHN3ZWVwczogdHJ1ZSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdXBsb2FkQmFzZTY0SW1hZ2UoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2NhbnNbaW5kZXhdLnV1aWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGB2aXNpdHMvJHt0aGlzLm1vZGVsSUR9L3N3ZWVwcy9gLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcInN3ZWVwXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN3ZWVwUHJvY2Vzc2VkQ291bnQubmV4dChpbmRleCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiaW5kZXhTY2FuTG9hZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZW1vdmVBbGxGaWxlc0Zyb21Gb2xkZXJTMyhgdmlzaXRzLyR7dGhpcy5tb2RlbElEfS9zd2VlcHNgKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkFiYW5kb25pbmcgaW1wb3J0IGJlYWN1c2UgaXQgd2FzIGNhbmNlbGxlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWF4U2NhbiA9PT0gbm1iU2NhbnMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiSW1wb3J0IDM2MCBkb25lXCIpO1xyXG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJpbmRleFNjYW5Mb2FkXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVGcmFtZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9wID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuc3RvcCkge1xyXG4gICAgICAgICAgICAgICAgLy8gdG8gcmVzdGFydCB0aGUgcHJvY2VkdXJlIGZyb20gd2hlcmUgd2UgbGVmdCBvZlxyXG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJpbmRleFNjYW5Mb2FkXCIsIG1heFNjYW4udG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUZyYW1lKCk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmluaXRTZGtGb3JNb2RlbCh0aGlzLm1vZGVsSUQpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5pbXBvcnREYXRhKHRoaXMuc3BhY2VJRCwgMCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbW92ZVRvRmxvb3IoZmxvb3JOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICAvLyBieSBuYW1lXHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coZmxvb3JOYW1lKTtcclxuICAgICAgICBsZXQgZmxvb3JNYXR0ZXJwb3J0ID0gT2JqZWN0LnZhbHVlcyh0aGlzLmZsb29ycykuZmluZChcclxuICAgICAgICAgICAgKGZsb29yKSA9PiBmbG9vci5uYW1lICE9PSBcIlwiICYmIGZsb29yTmFtZS5pbmNsdWRlcyhmbG9vci5uYW1lKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIC8vIGJ5IGlkXHJcbiAgICAgICAgaWYgKCFmbG9vck1hdHRlcnBvcnQpIHtcclxuICAgICAgICAgICAgZmxvb3JNYXR0ZXJwb3J0ID0gT2JqZWN0LnZhbHVlcyh0aGlzLmZsb29ycykuZmluZCgoZmxvb3IpID0+XHJcbiAgICAgICAgICAgICAgICBmbG9vck5hbWUuaW5jbHVkZXMoZmxvb3IuaWQpLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhmbG9vck1hdHRlcnBvcnQpO1xyXG4gICAgICAgIGlmIChmbG9vck1hdHRlcnBvcnQpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2RrLkZsb29yLm1vdmVUbyhmbG9vck1hdHRlcnBvcnQuc2VxdWVuY2UpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJDYW5ub3QgbW92ZSB0byBGbG9vclwiLCBlcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGltcG9ydEZsb29yRGF0YShcclxuICAgICAgICBkZWZhdXRab25lSUQ6IHN0cmluZyxcclxuICAgICAgICBub2RlOiBOb2RlLFxyXG4gICAgKTogUHJvbWlzZTxab25lW10+IHtcclxuICAgICAgICBjb25zdCB6b25lcyA9IFtdO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuc2RrLk1vZGUubW92ZVRvKHRoaXMuc2RrLk1vZGUuTW9kZS5GTE9PUlBMQU4pO1xyXG4gICAgICAgIGNvbnN0IG5tYkZsb29ycyA9IE9iamVjdC5rZXlzKHRoaXMuZmxvb3JzKS5sZW5ndGg7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJUb3RhbCBudW1iZXIgb2YgZmxvb3JzXCIsIG5tYkZsb29ycyk7XHJcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IG5tYkZsb29yczsgaW5kZXggKz0gMSkge1xyXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXdhaXQtaW4tbG9vcFxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkltcG9ydGluZyBmbG9vclwiLCBpbmRleCk7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc2RrLkZsb29yLm1vdmVUbyhpbmRleCkudGhlbihhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB3YWl0KDcwMCk7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcImFib3V0IHRvIHNhdmUgdGhlIGZsb29yXCIsIGluZGV4KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHpvbmUgPSBhd2FpdCB0aGlzLnNhdmVGbG9vcihkZWZhdXRab25lSUQsIG5vZGUpO1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJyZWNlaXZlZCBmbG9vciB6b25lXCIsIHpvbmUpO1xyXG4gICAgICAgICAgICAgICAgem9uZXMucHVzaCh6b25lKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoem9uZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgc2F2ZUZsb29yKGRlZmF1dFpvbmVJRDogc3RyaW5nLCBub2RlOiBOb2RlKTogUHJvbWlzZTxab25lPiB7XHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLmN1cnJlbnRGbG9vci5pZDtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50Rmxvb3IubmFtZSAhPT0gXCJcIikge1xyXG4gICAgICAgICAgICBuYW1lID0gdGhpcy5jdXJyZW50Rmxvb3IubmFtZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbGF5ZXJGbG9vciA9IGF3YWl0IHRoaXMuZ2V0TGF5ZXJCeU5hbWUoXCJGTE9PUlwiKTtcclxuICAgICAgICBjb25zdCBzd2VlcHNJbmZvID0gT2JqZWN0LnZhbHVlcyh0aGlzLnN3ZWVwcyk7XHJcbiAgICAgICAgY29uc3Qgc3dlZXBzRm9yRmxvb3IgPSBzd2VlcHNJbmZvLmZpbHRlcihcclxuICAgICAgICAgICAgKHN3ZWVwSW5mbykgPT4gc3dlZXBJbmZvLmZsb29ySW5mby5pZCA9PT0gdGhpcy5jdXJyZW50Rmxvb3IuaWQsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBzd2VlcElEczogc3RyaW5nW10gPSBzd2VlcHNGb3JGbG9vci5tYXAoKHN3ZWVwKSA9PiBzd2VlcC51dWlkKTtcclxuICAgICAgICBjb25zdCB6b25lID0gYXdhaXQgdGhpcy5jcmVhdGVab25lKFxyXG4gICAgICAgICAgICBgw4l0YWdlICR7bmFtZX0gLSAke25vZGUubWV0YWRhdGF9YCxcclxuICAgICAgICAgICAgbGF5ZXJGbG9vci5pZCxcclxuICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgZGVmYXV0Wm9uZUlELFxyXG4gICAgICAgICAgICBzd2VlcElEcyxcclxuICAgICAgICAgICAgbm9kZSxcclxuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoeyBtYXR0ZXJwb3J0Rmxvb3JTZXF1ZW5jZTogdGhpcy5jdXJyZW50Rmxvb3Iuc2VxdWVuY2UgfSlcclxuICAgICAgICApO1xyXG4gICAgICAgIC8vIFRPRE8gbGluayB0byBzY2Fuc1xyXG4gICAgICAgIGNvbnN0IGJhc2U2NCA9IGF3YWl0IHRoaXMuc2RrLlJlbmRlcmVyLnRha2VTY3JlZW5TaG90KFxyXG4gICAgICAgICAgICB7IHdpZHRoOiA0MDk2LCBoZWlnaHQ6IDIwNDggfSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHNwYWNlSURzaG9ydCA9IHRoaXMuc3BhY2VJRC5zbGljZSgwLCA4KTtcclxuICAgICAgICBhd2FpdCB1cGxvYWRCYXNlNjRJbWFnZShcclxuICAgICAgICAgICAgYmFzZTY0LFxyXG4gICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICBgdmlzaXRzLyR7dGhpcy5tb2RlbElEfS9wbGFucy9gLFxyXG4gICAgICAgICAgICBgcGxhbl9mbG9vcl8ke3RoaXMuY3VycmVudEZsb29yLmlkfV8ke3NwYWNlSURzaG9ydH1gLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gY3JlYXRlIFBsYW4gb2JqZWN0XHJcbiAgICAgICAgY29uc3QgcGxhbiA9IHtcclxuICAgICAgICAgICAgbmFtZTogYHBsYW5fZmxvb3JfJHt0aGlzLmN1cnJlbnRGbG9vci5pZH1gLFxyXG4gICAgICAgICAgICBhbm5leGU6IGB2aXNpdHMvJHt0aGlzLm1vZGVsSUR9L3BsYW5zL3BsYW5fZmxvb3JfJHt0aGlzLmN1cnJlbnRGbG9vci5pZH1fJHtzcGFjZUlEc2hvcnR9LmpwZWdgLFxyXG4gICAgICAgICAgICB6b25lSUQ6IHpvbmUuaWQsXHJcbiAgICAgICAgICAgIHNwYWNlSUQ6IHRoaXMuc3BhY2VJRCxcclxuICAgICAgICAgICAgaXNDdXJyZW50Rm9yWm9uZTogdHJ1ZSxcclxuICAgICAgICAgICAgaXNNb2RpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIGlzSW1wb3J0ZWRNYXR0ZXJwb3J0OiB0cnVlLFxyXG4gICAgICAgIH0gYXMgUGxhbjtcclxuICAgICAgICBhd2FpdCB0aGlzLnBsYW5TZXJ2aWNlLmNyZWF0ZVBsYW4ocGxhbik7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJmbG9vciBzYXZlZFwiKTtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHpvbmUpO1xyXG4gICAgfVxyXG5cclxuICAgIGFiYW5kb24oKSB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiYWJhbmRvbm5pbmcgaW1wb3J0XCIpO1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZUZyYW1lKCk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcCA9IHRydWU7XHJcbiAgICAgICAgfSwgMTUwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlRnJhbWUoKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50RnJhbWUucmVtb3ZlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0TGF5ZXJCeU5hbWUobmFtZTogc3RyaW5nKTogUHJvbWlzZTxMYXllcj4ge1xyXG4gICAgICAgIGNvbnN0IG1pc3Npb24gPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9uKHRoaXMuc3BhY2VJRCk7XHJcbiAgICAgICAgY29uc3QgY3VycmVudE9yZ0lkID0gbWlzc2lvbi5vcmdhbmlzYXRpb25JRDtcclxuICAgICAgICBjb25zdCBsYXllcnMgPSBhd2FpdCB0aGlzLmxheWVyU2VydmljZS5nZXRMYXllckJ5TmFtZUZvck9yZ2FuaXNhdGlvbihcclxuICAgICAgICAgICAgbmFtZSxcclxuICAgICAgICAgICAgY3VycmVudE9yZ0lkLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGxheWVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBsYXllcnNbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNyZWF0ZSB0aGVuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGF5ZXJTZXJ2aWNlLmNyZWF0ZUxheWVyRm9yT3JnYW5pc2F0aW9uKG5hbWUsIGN1cnJlbnRPcmdJZCk7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -9094,80 +9094,61 @@ class MatterportImportService {
9094
9094
  initSdkForModel(modelID) {
9095
9095
  return __awaiter(this, void 0, void 0, function* () {
9096
9096
  this.stop = false;
9097
- return new Promise((resolve, reject) => {
9098
- // Load SDK
9099
- console.log("Loading Matterport SDK");
9100
- this.modelID = modelID;
9101
- const iframe = document.createElement("iframe");
9102
- if (!iframe) {
9103
- reject(new Error("Cannot create iframe"));
9104
- }
9105
- this.viewerService.setTourUrl(modelID);
9106
- const url = this.viewerService.getTourUrl();
9107
- iframe.setAttribute("src", url);
9108
- iframe.allow = "xr-spatial-tracking";
9109
- iframe.height = "100%";
9110
- iframe.width = "100%";
9111
- iframe.id = "viewer-module";
9112
- const element = document.querySelector("#viewer-frame");
9113
- element.append(iframe);
9114
- this.currentFrame = iframe;
9097
+ // Load SDK
9098
+ console.log("Loading Matterport SDK");
9099
+ this.modelID = modelID;
9100
+ const iframe = document.createElement("iframe");
9101
+ if (!iframe) {
9102
+ throw new Error("Cannot create iframe");
9103
+ }
9104
+ this.viewerService.setTourUrl(modelID);
9105
+ const url = this.viewerService.getTourUrl();
9106
+ iframe.setAttribute("src", url);
9107
+ iframe.allow = "xr-spatial-tracking";
9108
+ iframe.height = "100%";
9109
+ iframe.width = "100%";
9110
+ iframe.id = "viewer-module";
9111
+ const element = document.querySelector("#viewer-frame");
9112
+ element.append(iframe);
9113
+ this.currentFrame = iframe;
9114
+ console.log("here");
9115
+ try {
9115
9116
  // @ts-ignore
9116
- window.MP_SDK.connect(iframe, "qn9wsasuy5h2fzrbrn1nzr0id", "3.11")
9117
- .then((sdk) => __awaiter(this, void 0, void 0, function* () {
9118
- // Instanciate sdk
9119
- this.sdk = sdk;
9120
- // Sibscribe to Floor data
9121
- this.sdk.Floor.data.subscribe({
9122
- onCollectionUpdated: function upd(collection) {
9123
- // console.log("Floors", collection);
9124
- this.floors = collection;
9125
- }.bind(this),
9126
- });
9127
- // Subscribe to current Floor
9128
- this.sdk.Floor.current.subscribe(function upd(currentFloor) {
9129
- this.currentFloor = currentFloor;
9130
- // Change to the current floor has occurred.
9131
- // if (currentFloor.sequence === -1) {
9132
- // console.log("Currently viewing all floors");
9133
- // } else if (currentFloor.sequence === undefined) {
9134
- // if (currentFloor.id === undefined) {
9135
- // console.log("Current viewing an unplaced unaligned sweep");
9136
- // } else {
9137
- // // console.log('Currently transitioning between floors');
9138
- // }
9139
- // } else {
9140
- // // console.log('Currently on floor', currentFloor.id);
9141
- // // console.log('Current floor\'s sequence index', currentFloor.sequence);
9142
- // // console.log('Current floor\'s name', currentFloor.name)
9143
- // }
9144
- }.bind(this));
9145
- // Subscribe to Sweep data
9146
- this.sdk.Sweep.data.subscribe({
9147
- onCollectionUpdated: function upd(collection) {
9148
- console.log("the entire up-to-date collection", collection);
9149
- this.sweeps = collection;
9150
- }.bind(this),
9151
- });
9152
- // remove labels
9153
- this.sdk.Settings.update("labels", false)
9154
- .then(function (data) {
9155
- // Setting update complete.
9156
- console.log(`Labels setting: ${data}`);
9157
- })
9158
- .catch(function (error) {
9159
- // Setting update error.
9160
- });
9161
- setTimeout(() => __awaiter(this, void 0, void 0, function* () {
9162
- console.log("init done");
9163
- resolve(true);
9164
- }), 5000);
9165
- }))
9166
- .catch((error) => {
9167
- console.error(error);
9168
- reject(error);
9117
+ this.sdk = yield window.MP_SDK.connect(iframe, "qn9wsasuy5h2fzrbrn1nzr0id", "3.11");
9118
+ // Subscribe to Floor data
9119
+ this.sdk.Floor.data.subscribe({
9120
+ onCollectionUpdated: function upd(collection) {
9121
+ // console.log("Floors", collection);
9122
+ this.floors = collection;
9123
+ }.bind(this),
9169
9124
  });
9170
- });
9125
+ // Subscribe to current Floor
9126
+ this.sdk.Floor.current.subscribe(function upd(currentFloor) {
9127
+ this.currentFloor = currentFloor;
9128
+ }.bind(this));
9129
+ // Subscribe to Sweep data
9130
+ this.sdk.Sweep.data.subscribe({
9131
+ onCollectionUpdated: function upd(collection) {
9132
+ console.log("the entire up-to-date collection", collection);
9133
+ this.sweeps = collection;
9134
+ }.bind(this),
9135
+ });
9136
+ // remove labels
9137
+ this.sdk.Settings.update("labels", false)
9138
+ .then(function (data) {
9139
+ // Setting update complete.
9140
+ console.log(`Labels setting: ${data}`);
9141
+ })
9142
+ .catch(function (error) {
9143
+ // Setting update error.
9144
+ });
9145
+ console.log("init done");
9146
+ return true;
9147
+ }
9148
+ catch (e) {
9149
+ console.error(e);
9150
+ throw new Error("error init Matterport");
9151
+ }
9171
9152
  });
9172
9153
  }
9173
9154
  importData(spaceID, surface, reloading = false, node = null) {