@colijnit/homedecorator 255.1.4 → 255.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/core/enum/message-type.enum.d.ts +3 -1
- package/app/core/interface/message-with-payload.interface.d.ts +6 -0
- package/app/core/model/homedecorator-settings-options.d.ts +2 -0
- package/app/core/service/homedecorator-app-event.service.d.ts +1 -0
- package/app/core/service/homedecorator-connector-adapter.service.d.ts +2 -0
- package/app/core/service/homedecorator-connector.service.d.ts +5 -4
- package/app/core/service/homedecorator-settings.service.d.ts +2 -1
- package/app/core/service/presets.service.d.ts +3 -1
- package/app/homedecorator.component.d.ts +3 -1
- package/app/homedecorator.module.d.ts +2 -1
- package/app/plugins/core3d/service/floor-pattern.service.d.ts +1 -1
- package/app/plugins/core3d/service/floor-tile-intersection.service.d.ts +2 -1
- package/app/plugins/core3d/service/floor.service.d.ts +3 -1
- package/app/plugins/core3d/service/post-processing.service.d.ts +21 -7
- package/app/plugins/core3d/service/scene.service.d.ts +1 -1
- package/app/plugins/core3d/service/ssr.service.d.ts +0 -1
- package/app/plugins/model-uploader/model-previewer/model-preview.component.d.ts +11 -2
- package/app/plugins/model-uploader/model-previewer/model-preview.component.scss +185 -15
- package/app/plugins/model-uploader/model-uploader.module.d.ts +5 -1
- package/app/plugins/render/render-dialog/render-dialog.component.d.ts +4 -1
- package/app/plugins/render/render-dialog/render-dialog.component.scss +5 -5
- package/app/plugins/room-planner/components/floorplanner/floorplanner.component.d.ts +3 -1
- package/app/plugins/room-planner/components/floorplanner/service/room.service.d.ts +1 -0
- package/app/plugins/room-planner/components/settings/settings.component.d.ts +5 -1
- package/app/plugins/room-planner/components/texture-editor/texture-editor.component.d.ts +4 -1
- package/app/plugins/room-planner/room-planner/room-planner.component.scss +1 -0
- package/app/plugins/threedselector/threedselector/service/build-furniture.service.d.ts +1 -3
- package/app/plugins/toolbar/draw-dialog/draw-dialog.component.d.ts +2 -0
- package/app/plugins/toolbar/draw-dialog/draw-dialog.component.scss +1 -1
- package/app/plugins/toolbar/toolbar/toolbar.component.d.ts +2 -0
- package/assets/icons/dash-button.svg +7 -0
- package/assets/icons/pen-ruler.svg +1 -0
- package/assets/icons/retry-button.svg +7 -0
- package/bundles/colijnit-homedecorator.umd.js +822 -601
- package/bundles/colijnit-homedecorator.umd.js.map +1 -1
- package/esm2015/app/app.version.js +3 -3
- package/esm2015/app/core/enum/message-type.enum.js +3 -1
- package/esm2015/app/core/interface/message-with-payload.interface.js +1 -1
- package/esm2015/app/core/model/homedecorator-settings-options.js +3 -1
- package/esm2015/app/core/service/3dm-api.js +4 -4
- package/esm2015/app/core/service/homedecorator-app-event.service.js +2 -1
- package/esm2015/app/core/service/homedecorator-connector-adapter.service.js +25 -2
- package/esm2015/app/core/service/homedecorator-connector.service.js +25 -22
- package/esm2015/app/core/service/homedecorator-settings.service.js +3 -2
- package/esm2015/app/core/service/presets.service.js +13 -5
- package/esm2015/app/core/utils/material.utils.js +3 -3
- package/esm2015/app/homedecorator.component.js +26 -19
- package/esm2015/app/homedecorator.module.js +8 -4
- package/esm2015/app/plugins/core3d/core3d/components/scenecontrol/scene-control.component.js +5 -5
- package/esm2015/app/plugins/core3d/items/custom-cylinder-floor-item.js +2 -2
- package/esm2015/app/plugins/core3d/items/custom-cylinder-wall-item.js +2 -2
- package/esm2015/app/plugins/core3d/items/custom-shape-floor-item.js +2 -2
- package/esm2015/app/plugins/core3d/items/custom-shape-wall-item.js +2 -2
- package/esm2015/app/plugins/core3d/items/factory.js +3 -2
- package/esm2015/app/plugins/core3d/service/ar.service.js +2 -1
- package/esm2015/app/plugins/core3d/service/floor-pattern.service.js +24 -18
- package/esm2015/app/plugins/core3d/service/floor-tile-intersection.service.js +13 -8
- package/esm2015/app/plugins/core3d/service/floor.service.js +9 -4
- package/esm2015/app/plugins/core3d/service/light-presets.service.js +10 -8
- package/esm2015/app/plugins/core3d/service/lights.service.js +8 -1
- package/esm2015/app/plugins/core3d/service/outline.service.js +4 -6
- package/esm2015/app/plugins/core3d/service/post-processing.service.js +148 -51
- package/esm2015/app/plugins/core3d/service/scene-event.service.js +14 -7
- package/esm2015/app/plugins/core3d/service/scene.service.js +84 -74
- package/esm2015/app/plugins/core3d/service/ssr.service.js +2 -53
- package/esm2015/app/plugins/lite-selector/lite-selector/component/answers-slideout/answers-slideout.component.js +10 -5
- package/esm2015/app/plugins/lite-selector/lite-selector/lite-selector.component.js +2 -2
- package/esm2015/app/plugins/model-uploader/model-previewer/model-preview.component.js +281 -166
- package/esm2015/app/plugins/model-uploader/model-uploader.module.js +22 -3
- package/esm2015/app/plugins/render/render-controls/render-controls.component.js +3 -2
- package/esm2015/app/plugins/render/render-dialog/render-dialog.component.js +19 -14
- package/esm2015/app/plugins/render/service/new-render.service.js +4 -2
- package/esm2015/app/plugins/room-planner/components/custom-cylinder-creator/custom-cylinder-creator.component.js +4 -2
- package/esm2015/app/plugins/room-planner/components/custome-shape-creator/custom-shape-creator.component.js +2 -2
- package/esm2015/app/plugins/room-planner/components/floorplanner/floorplanner.component.js +29 -15
- package/esm2015/app/plugins/room-planner/components/floorplanner/service/room.service.js +5 -2
- package/esm2015/app/plugins/room-planner/components/settings/settings.component.js +12 -5
- package/esm2015/app/plugins/room-planner/components/texture-editor/texture-editor.component.js +31 -15
- package/esm2015/app/plugins/room-planner/room-planner/room-planner.component.js +691 -683
- package/esm2015/app/plugins/threedselector/threedselector/service/build-furniture.service.js +43 -41
- package/esm2015/app/plugins/threedselector/threedselector/threedselector.component.js +1 -1
- package/esm2015/app/plugins/toolbar/draw-dialog/draw-dialog.component.js +26 -20
- package/esm2015/app/plugins/toolbar/save-dialog/save-dialog.component.js +2 -2
- package/esm2015/app/plugins/toolbar/toolbar/toolbar.component.js +15 -8
- package/esm2015/app/shared/loading-overlay/loading-overlay.component.js +4 -2
- package/esm2015/app/shared/model-dialog/model-dialog-furniture-list.component.js +3 -3
- package/fesm2015/colijnit-homedecorator.js +1656 -1322
- package/fesm2015/colijnit-homedecorator.js.map +1 -1
- package/package.json +1 -1
|
@@ -14,7 +14,7 @@ export var FloorPatternDirection;
|
|
|
14
14
|
FloorPatternDirection[FloorPatternDirection["LYING"] = 1] = "LYING";
|
|
15
15
|
})(FloorPatternDirection || (FloorPatternDirection = {}));
|
|
16
16
|
export class FloorPatternService {
|
|
17
|
-
generatePattern(floorPattern, plankSize, floorSize, direction = FloorPatternDirection.LYING) {
|
|
17
|
+
generatePattern(floorPattern, plankSize, floorSize, direction = FloorPatternDirection.LYING, heartLine = 0) {
|
|
18
18
|
const floorRotation = direction === FloorPatternDirection.STANDING ? 90 : 0;
|
|
19
19
|
let floorWidth = floorSize.x;
|
|
20
20
|
let floorLength = floorSize.z;
|
|
@@ -22,15 +22,18 @@ export class FloorPatternService {
|
|
|
22
22
|
floorWidth = floorSize.z;
|
|
23
23
|
floorLength = floorSize.x;
|
|
24
24
|
}
|
|
25
|
+
if (heartLine < 0)
|
|
26
|
+
heartLine = heartLine * -1;
|
|
27
|
+
heartLine = heartLine % 100 / 100;
|
|
25
28
|
switch (floorPattern) {
|
|
26
29
|
case FloorPattern.NORMAL:
|
|
27
|
-
return this._normalPattern(plankSize, floorWidth, floorLength, floorRotation);
|
|
30
|
+
return this._normalPattern(plankSize, floorWidth, floorLength, floorRotation, heartLine);
|
|
28
31
|
case FloorPattern.HERRINGBONE:
|
|
29
|
-
return this._herringBone(plankSize, floorWidth, floorLength, floorRotation);
|
|
32
|
+
return this._herringBone(plankSize, floorWidth, floorLength, floorRotation, heartLine);
|
|
30
33
|
case FloorPattern.HON45:
|
|
31
|
-
return this._hon(plankSize, floorWidth, floorLength, floorRotation, 45);
|
|
34
|
+
return this._hon(plankSize, floorWidth, floorLength, floorRotation, 45, heartLine);
|
|
32
35
|
case FloorPattern.HON60:
|
|
33
|
-
return this._hon(plankSize, floorWidth, floorLength, floorRotation, 60);
|
|
36
|
+
return this._hon(plankSize, floorWidth, floorLength, floorRotation, 60, heartLine);
|
|
34
37
|
}
|
|
35
38
|
}
|
|
36
39
|
_rotatePatternOnZAxis(items, floorRotation) {
|
|
@@ -44,14 +47,15 @@ export class FloorPatternService {
|
|
|
44
47
|
});
|
|
45
48
|
}
|
|
46
49
|
}
|
|
47
|
-
_normalPattern(plankSize, floorWidth, floorLength, floorRotation) {
|
|
50
|
+
_normalPattern(plankSize, floorWidth, floorLength, floorRotation, heartLine) {
|
|
48
51
|
const items = [];
|
|
49
52
|
const stepOffsetAmount = .4;
|
|
50
53
|
const plankWidth = plankSize.x;
|
|
51
54
|
const plankLength = plankSize.z;
|
|
52
55
|
const offsetSteps = plankWidth / stepOffsetAmount;
|
|
56
|
+
const heartLineOffset = plankWidth * heartLine;
|
|
53
57
|
const rows = Math.ceil(floorLength / plankLength);
|
|
54
|
-
const columns = Math.ceil(floorWidth / plankWidth);
|
|
58
|
+
const columns = Math.ceil(floorWidth / plankWidth + heartLineOffset);
|
|
55
59
|
const centerOffsetX = (floorWidth / 2 * -1) + (plankWidth / 2);
|
|
56
60
|
const centerOffsetZ = (floorLength / 2 * -1) + (plankLength / 2);
|
|
57
61
|
let currentOffsetStep = 0;
|
|
@@ -65,7 +69,7 @@ export class FloorPatternService {
|
|
|
65
69
|
for (let col = 0; col < planks; col++) {
|
|
66
70
|
const plankPosX = (plankWidth * col) - currentOffsetAmount;
|
|
67
71
|
items.push({
|
|
68
|
-
position: new Vector3(plankPosX + centerOffsetX, 0, plankPosZ + centerOffsetZ),
|
|
72
|
+
position: new Vector3(plankPosX + centerOffsetX - heartLineOffset, 0, plankPosZ + centerOffsetZ),
|
|
69
73
|
rotation: new Vector3(0, MathUtils.degToRad(floorRotation), 0),
|
|
70
74
|
isLeft: true
|
|
71
75
|
});
|
|
@@ -75,7 +79,7 @@ export class FloorPatternService {
|
|
|
75
79
|
this._rotatePatternOnZAxis(items, floorRotation);
|
|
76
80
|
return items;
|
|
77
81
|
}
|
|
78
|
-
_herringBone(plankSize, floorWidth, floorLength, floorRotation) {
|
|
82
|
+
_herringBone(plankSize, floorWidth, floorLength, floorRotation, heartLine) {
|
|
79
83
|
const items = [];
|
|
80
84
|
const herringBoneAngle = 45;
|
|
81
85
|
const sqrt2 = Math.sqrt(2);
|
|
@@ -83,7 +87,8 @@ export class FloorPatternService {
|
|
|
83
87
|
const plankLength = plankSize.z;
|
|
84
88
|
const offsetPlankPosX = plankWidth * sqrt2;
|
|
85
89
|
const offsetPlankPosZ = plankLength * sqrt2;
|
|
86
|
-
const
|
|
90
|
+
const heartLinePosX = offsetPlankPosX * heartLine;
|
|
91
|
+
const columns = Math.ceil(floorWidth / (plankWidth * sqrt2) + heartLinePosX);
|
|
87
92
|
const rows = Math.ceil(floorLength / (plankLength * sqrt2) +
|
|
88
93
|
// add extra rows so that there isn't a gap
|
|
89
94
|
offsetPlankPosX * 2);
|
|
@@ -94,12 +99,12 @@ export class FloorPatternService {
|
|
|
94
99
|
for (let row = 0; row < rows; row++) {
|
|
95
100
|
const plankPosZ = offsetPlankPosZ * row;
|
|
96
101
|
const plankLeft = {
|
|
97
|
-
position: new Vector3(plankPosX + centerOffsetX, 0, plankPosZ + centerOffsetZ),
|
|
102
|
+
position: new Vector3(plankPosX + centerOffsetX - heartLinePosX, 0, plankPosZ + centerOffsetZ),
|
|
98
103
|
rotation: new Vector3(0, MathUtils.degToRad(floorRotation + herringBoneAngle), 0),
|
|
99
104
|
isLeft: true
|
|
100
105
|
};
|
|
101
106
|
const plankRight = {
|
|
102
|
-
position: new Vector3(plankPosX + offsetPlankPosX / 2 + centerOffsetX, 0, plankPosZ + offsetPlankPosZ / 2 + centerOffsetZ),
|
|
107
|
+
position: new Vector3(plankPosX + offsetPlankPosX / 2 + centerOffsetX - heartLinePosX, 0, plankPosZ + offsetPlankPosZ / 2 + centerOffsetZ),
|
|
103
108
|
rotation: new Vector3(0, MathUtils.degToRad(floorRotation - herringBoneAngle), 0),
|
|
104
109
|
isLeft: false
|
|
105
110
|
};
|
|
@@ -109,7 +114,7 @@ export class FloorPatternService {
|
|
|
109
114
|
this._rotatePatternOnZAxis(items, floorRotation);
|
|
110
115
|
return items;
|
|
111
116
|
}
|
|
112
|
-
_hon(plankSize, floorWidth, floorLength, floorRotation, patternAngle) {
|
|
117
|
+
_hon(plankSize, floorWidth, floorLength, floorRotation, patternAngle, heartLine) {
|
|
113
118
|
const items = [];
|
|
114
119
|
const patternAngleRad = MathUtils.degToRad(patternAngle);
|
|
115
120
|
const plankWidth = plankSize.x;
|
|
@@ -120,21 +125,22 @@ export class FloorPatternService {
|
|
|
120
125
|
const rowExtendValue = plankWidth * cos;
|
|
121
126
|
const offsetZ = plankLength * cos * 2;
|
|
122
127
|
const offsetX = plankWidth * sin;
|
|
123
|
-
const
|
|
128
|
+
const heartLinePosX = offsetX * heartLine;
|
|
129
|
+
const centerOffsetX = ((floorWidth - offsetX) / 2 + overlapValue);
|
|
124
130
|
const centerOffsetZ = (floorLength + rowExtendValue) / 2;
|
|
125
|
-
const columns = Math.ceil(floorWidth / ((offsetX - overlapValue) * 2));
|
|
131
|
+
const columns = Math.ceil(floorWidth / ((offsetX - overlapValue) * 2) + heartLinePosX);
|
|
126
132
|
const rows = Math.ceil((floorLength + rowExtendValue) / offsetZ);
|
|
127
133
|
for (let column = 0; column < columns; column++) {
|
|
128
134
|
const plankPosX = column * (offsetX - overlapValue) * 2;
|
|
129
135
|
for (let row = 0; row < rows; row++) {
|
|
130
136
|
const plankPosZ = row * offsetZ;
|
|
131
137
|
const plankLeft = {
|
|
132
|
-
position: new Vector3(plankPosX - centerOffsetX, 0, plankPosZ - centerOffsetZ),
|
|
138
|
+
position: new Vector3(plankPosX - centerOffsetX - heartLinePosX, 0, plankPosZ - centerOffsetZ),
|
|
133
139
|
rotation: new Vector3(0, MathUtils.degToRad((90 - patternAngle) + floorRotation), 0),
|
|
134
140
|
isLeft: true
|
|
135
141
|
};
|
|
136
142
|
const plankRight = {
|
|
137
|
-
position: new Vector3(plankPosX + offsetX - overlapValue - centerOffsetX, 0, plankPosZ - centerOffsetZ),
|
|
143
|
+
position: new Vector3(plankPosX + offsetX - overlapValue - centerOffsetX - heartLinePosX, 0, plankPosZ - centerOffsetZ),
|
|
138
144
|
rotation: new Vector3(0, MathUtils.degToRad((90 + patternAngle) + floorRotation), 0),
|
|
139
145
|
isLeft: false
|
|
140
146
|
};
|
|
@@ -153,4 +159,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
153
159
|
providedIn: 'root'
|
|
154
160
|
}]
|
|
155
161
|
}] });
|
|
156
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvb3ItcGF0dGVybi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hcHAvcGx1Z2lucy9jb3JlM2Qvc2VydmljZS9mbG9vci1wYXR0ZXJuLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLE9BQU8sQ0FBQzs7QUFFbEQsTUFBTSxDQUFOLElBQVksWUFLWDtBQUxELFdBQVksWUFBWTtJQUN0QixtREFBTSxDQUFBO0lBQ04sNkRBQVcsQ0FBQTtJQUNYLGlEQUFLLENBQUE7SUFDTCxpREFBSyxDQUFBO0FBQ1AsQ0FBQyxFQUxXLFlBQVksS0FBWixZQUFZLFFBS3ZCO0FBRUQsTUFBTSxDQUFOLElBQVkscUJBR1g7QUFIRCxXQUFZLHFCQUFxQjtJQUMvQix5RUFBUSxDQUFBO0lBQ1IsbUVBQUssQ0FBQTtBQUNQLENBQUMsRUFIVyxxQkFBcUIsS0FBckIscUJBQXFCLFFBR2hDO0FBV0QsTUFBTSxPQUFPLG1CQUFtQjtJQUV2QixlQUFlLENBQ3BCLFlBQTBCLEVBQzFCLFNBQWtCLEVBQ2xCLFNBQWtCLEVBQ2xCLFlBQW1DLHFCQUFxQixDQUFDLEtBQUs7UUFFOUQsTUFBTSxhQUFhLEdBQUcsU0FBUyxLQUFLLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUUsSUFBSSxVQUFVLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUM3QixJQUFJLFdBQVcsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBRTlCLElBQUksU0FBUyxLQUFLLHFCQUFxQixDQUFDLFFBQVEsRUFBRTtZQUNoRCxVQUFVLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUN6QixXQUFXLEdB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RUFBRSxDQUFDLENBQUM7b0JBQ3BGLE1BQU0sRUFBRSxJQUFJO2lCQUNiLENBQUM7Z0JBRUYsTUFBTSxVQUFVLEdBQTBCO29CQUN4QyxRQUFRLEVBQUUsSUFBSSxPQUFPLENBQUMsU0FBUyxHQUFHLE9BQU8sR0FBRyxZQUFZLEdBQUcsYUFBYSxFQUFFLENBQUMsRUFBRSxTQUFTLEdBQUcsYUFBYSxDQUFDO29CQUN2RyxRQUFRLEVBQUUsSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUUsQ0FBQyxFQUFFLEdBQUcsWUFBWSxDQUFDLEdBQUcsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUNyRixNQUFNLEVBQUUsS0FBSztpQkFDZCxDQUFDO2dCQUVGLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO2FBQ25DO1NBQ0Y7UUFDRCxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ2pELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzs7aUhBbExVLG1CQUFtQjtxSEFBbkIsbUJBQW1CLGNBRmxCLE1BQU07NEZBRVAsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7VmVjdG9yMywgTWF0aFV0aWxzLCBWZWN0b3IyfSBmcm9tICd0aHJlZSc7XHJcblxyXG5leHBvcnQgZW51bSBGbG9vclBhdHRlcm4ge1xyXG4gIE5PUk1BTCxcclxuICBIRVJSSU5HQk9ORSxcclxuICBIT042MCxcclxuICBIT040NVxyXG59XHJcblxyXG5leHBvcnQgZW51bSBGbG9vclBhdHRlcm5EaXJlY3Rpb24ge1xyXG4gIFNUQU5ESU5HLFxyXG4gIExZSU5HXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRmxvb3JQYXR0ZXJuVHJhbnNmb3JtIHtcclxuICBwb3NpdGlvbjogVmVjdG9yMztcclxuICByb3RhdGlvbjogVmVjdG9yMztcclxuICBpc0xlZnQ6IGJvb2xlYW47XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEZsb29yUGF0dGVyblNlcnZpY2Uge1xyXG5cclxuICBwdWJsaWMgZ2VuZXJhdGVQYXR0ZXJuKFxyXG4gICAgZmxvb3JQYXR0ZXJuOiBGbG9vclBhdHRlcm4sXHJcbiAgICBwbGFua1NpemU6IFZlY3RvcjMsXHJcbiAgICBmbG9vclNpemU6IFZlY3RvcjMsXHJcbiAgICBkaXJlY3Rpb246IEZsb29yUGF0dGVybkRpcmVjdGlvbiA9IEZsb29yUGF0dGVybkRpcmVjdGlvbi5MWUlOR1xyXG4gICk6IEZsb29yUGF0dGVyblRyYW5zZm9ybVtdIHtcclxuICAgIGNvbnN0IGZsb29yUm90YXRpb24gPSBkaXJlY3Rpb24gPT09IEZsb29yUGF0dGVybkRpcmVjdGlvbi5TVEFORElORyA/IDkwIDogMDtcclxuICAgIGxldCBmbG9vcldpZHRoID0gZmxvb3JTaXplLng7XHJcbiAgICBsZXQgZmxvb3JMZW5ndGggPSBmbG9vclNpemUuejtcclxuXHJcbiAgICBpZiAoZGlyZWN0aW9uID09PSBGbG9vclBhdHRlcm5EaXJlY3Rpb24uU1RBTkRJTkcpIHtcclxuICAgICAgZmxvb3JXaWR0aCA9IGZsb29yU2l6ZS56O1xyXG4gICAgICBmbG9vckxlbmd0aCA9IGZsb29yU2l6ZS54O1xyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaCAoZmxvb3JQYXR0ZXJuKSB7XHJcbiAgICAgIGNhc2UgRmxvb3JQYXR0ZXJuLk5PUk1BTDpcclxuICAgICAgICByZXR1cm4gdGhpcy5fbm9ybWFsUGF0dGVybihwbGFua1NpemUsIGZsb29yV2lkdGgsIGZsb29yTGVuZ3RoLCBmbG9vclJvdGF0aW9uKTtcclxuICAgICAgY2FzZSBGbG9vclBhdHRlcm4uSEVSUklOR0JPTkU6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hlcnJpbmdCb25lKHBsYW5rU2l6ZSwgZmxvb3JXaWR0aCwgZmxvb3JMZW5ndGgsIGZsb29yUm90YXRpb24pO1xyXG4gICAgICBjYXNlIEZsb29yUGF0dGVybi5IT040NTpcclxuICAgICAgICByZXR1cm4gdGhpcy5faG9uKHBsYW5rU2l6ZSwgZmxvb3JXaWR0aCwgZmxvb3JMZW5ndGgsIGZsb29yUm90YXRpb24sIDQ1KTtcclxuICAgICAgY2FzZSBGbG9vclBhdHRlcm4uSE9ONjA6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hvbihwbGFua1NpemUsIGZsb29yV2lkdGgsIGZsb29yTGVuZ3RoLCBmbG9vclJvdGF0aW9uLCA2MCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yb3RhdGVQYXR0ZXJuT25aQXhpcyhpdGVtczogRmxvb3JQYXR0ZXJuVHJhbnNmb3JtW10sIGZsb29yUm90YXRpb246IG51bWJlcik6IHZvaWQge1xyXG5cclxuICAgIGlmIChmbG9vclJvdGF0aW9uICUgMzYwID4gMCkge1xyXG4gICAgICBpdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGNvbnN0IHJhZGlhbnMgPSBNYXRoVXRpbHMuZGVnVG9SYWQoZmxvb3JSb3RhdGlvbik7XHJcbiAgICAgICAgY29uc3QgeCA9IGl0ZW0ucG9zaXRpb24ueDtcclxuICAgICAgICBjb25zdCB6ID0gaXRlbS5wb3NpdGlvbi56O1xyXG4gICAgICAgIGl0ZW0ucG9zaXRpb24ueCA9IHggKiBNYXRoLmNvcyhyYWRpYW5zKSAtIHogKiBNYXRoLnNpbihyYWRpYW5zKTtcclxuICAgICAgICBpdGVtLnBvc2l0aW9uLnogPSB4ICogTWF0aC5zaW4ocmFkaWFucykgKyB6ICogTWF0aC5jb3MocmFkaWFucyk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbm9ybWFsUGF0dGVybihcclxuICAgIHBsYW5rU2l6ZTogVmVjdG9yMyxcclxuICAgIGZsb29yV2lkdGg6IG51bWJlcixcclxuICAgIGZsb29yTGVuZ3RoOiBudW1iZXIsXHJcbiAgICBmbG9vclJvdGF0aW9uOiBudW1iZXJcclxuICApOiBGbG9vclBhdHRlcm5UcmFuc2Zvcm1bXSB7XHJcbiAgICBjb25zdCBpdGVtczogRmxvb3JQYXR0ZXJuVHJhbnNmb3JtW10gPSBbXTtcclxuICAgIGNvbnN0IHN0ZXBPZmZzZXRBbW91bnQgPSAuNDtcclxuICAgIGNvbnN0IHBsYW5rV2lkdGggPSBwbGFua1NpemUueDtcclxuICAgIGNvbnN0IHBsYW5rTGVuZ3RoID0gcGxhbmtTaXplLno7XHJcbiAgICBjb25zdCBvZmZzZXRTdGVwcyA9IHBsYW5rV2lkdGggLyBzdGVwT2Zmc2V0QW1vdW50O1xyXG4gICAgY29uc3Qgcm93cyA9IE1hdGguY2VpbChmbG9vckxlbmd0aCAvIHBsYW5rTGVuZ3RoKTtcclxuICAgIGNvbnN0IGNvbHVtbnMgPSBNYXRoLmNlaWwoZmxvb3JXaWR0aCAvIHBsYW5rV2lkdGgpO1xyXG5cclxuICAgIGNvbnN0IGNlbnRlck9mZnNldFggPSAoZmxvb3JXaWR0aCAvIDIgKiAtMSkgKyAocGxhbmtXaWR0aCAvIDIpO1xyXG4gICAgY29uc3QgY2VudGVyT2Zmc2V0WiA9IChmbG9vckxlbmd0aCAvIDIgKiAtMSkgKyAocGxhbmtMZW5ndGggLyAyKTtcclxuXHJcbiAgICBsZXQgIGN1cnJlbnRPZmZzZXRTdGVwID0gMDtcclxuXHJcbiAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCByb3dzOyByb3crKykge1xyXG4gICAgICBpZiAoY3VycmVudE9mZnNldFN0ZXAgPiBvZmZzZXRTdGVwcykge1xyXG4gICAgICAgIGN1cnJlbnRPZmZzZXRTdGVwID0gMDtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBwbGFua1Bvc1ogPSAocGxhbmtMZW5ndGggKiByb3cpO1xyXG4gICAgICBjb25zdCBjdXJyZW50T2Zmc2V0QW1vdW50ID0gc3RlcE9mZnNldEFtb3VudCAqIGN1cnJlbnRPZmZzZXRTdGVwO1xyXG5cclxuICAgICAgY29uc3QgcGxhbmtzID0gY3VycmVudE9mZnNldFN0ZXAgPiAwID8gY29sdW1ucyArIDEgOiBjb2x1bW5zO1xyXG5cclxuICAgICAgZm9yIChsZXQgY29sID0gMDsgY29sIDwgcGxhbmtzOyBjb2wrKykge1xyXG4gICAgICAgIGNvbnN0IHBsYW5rUG9zWCA9IChwbGFua1dpZHRoICogY29sKSAtIGN1cnJlbnRPZmZzZXRBbW91bnQ7XHJcbiAgICAgICAgaXRlbXMucHVzaCh7XHJcbiAgICAgICAgICBwb3NpdGlvbjogbmV3IFZlY3RvcjMocGxhbmtQb3NYICsgY2VudGVyT2Zmc2V0WCwgMCwgcGxhbmtQb3NaICsgY2VudGVyT2Zmc2V0WiksXHJcbiAgICAgICAgICByb3RhdGlvbjogbmV3IFZlY3RvcjMoMCwgTWF0aFV0aWxzLmRlZ1RvUmFkKGZsb29yUm90YXRpb24pLCAwKSxcclxuICAgICAgICAgIGlzTGVmdDogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGN1cnJlbnRPZmZzZXRTdGVwKys7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9yb3RhdGVQYXR0ZXJuT25aQXhpcyhpdGVtcywgZmxvb3JSb3RhdGlvbik7XHJcbiAgICByZXR1cm4gaXRlbXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9oZXJyaW5nQm9uZShcclxuICAgIHBsYW5rU2l6ZTogVmVjdG9yMyxcclxuICAgIGZsb29yV2lkdGg6IG51bWJlcixcclxuICAgIGZsb29yTGVuZ3RoOiBudW1iZXIsXHJcbiAgICBmbG9vclJvdGF0aW9uOiBudW1iZXJcclxuICApOiBGbG9vclBhdHRlcm5UcmFuc2Zvcm1bXSB7XHJcbiAgICBjb25zdCBpdGVtczogRmxvb3JQYXR0ZXJuVHJhbnNmb3JtW10gPSBbXTtcclxuICAgIGNvbnN0IGhlcnJpbmdCb25lQW5nbGUgPSA0NTtcclxuICAgIGNvbnN0IHNxcnQyID0gTWF0aC5zcXJ0KDIpO1xyXG4gICAgY29uc3QgcGxhbmtXaWR0aCA9IHBsYW5rU2l6ZS54O1xyXG4gICAgY29uc3QgcGxhbmtMZW5ndGggPSBwbGFua1NpemUuejtcclxuICAgIGNvbnN0IG9mZnNldFBsYW5rUG9zWCA9IHBsYW5rV2lkdGggKiBzcXJ0MjtcclxuICAgIGNvbnN0IG9mZnNldFBsYW5rUG9zWiA9IHBsYW5rTGVuZ3RoICogc3FydDI7XHJcbiAgICBjb25zdCBjb2x1bW5zID0gTWF0aC5jZWlsKGZsb29yV2lkdGggLyAocGxhbmtXaWR0aCAqIHNxcnQyKSk7XHJcbiAgICBjb25zdCByb3dzID0gTWF0aC5jZWlsKFxyXG4gICAgICBmbG9vckxlbmd0aCAvIChwbGFua0xlbmd0aCAqIHNxcnQyKSArXHJcbiAgICAgIC8vIGFkZCBleHRyYSByb3dzIHNvIHRoYXQgdGhlcmUgaXNuJ3QgYSBnYXBcclxuICAgICAgb2Zmc2V0UGxhbmtQb3NYICogMlxyXG4gICAgKTtcclxuICAgIGNvbnN0IGNlbnRlck9mZnNldFggPSBmbG9vcldpZHRoIC8gMiAqIC0xICsgb2Zmc2V0UGxhbmtQb3NYIC8gNCAtIG9mZnNldFBsYW5rUG9zWiAvIDQ7XHJcbiAgICBjb25zdCBjZW50ZXJPZmZzZXRaID0gZmxvb3JMZW5ndGggLyAyICogLTEgLSBvZmZzZXRQbGFua1Bvc1ggLyA0O1xyXG5cclxuICAgIGZvciAobGV0IGNvbHVtbiA9IDA7IGNvbHVtbiA8IGNvbHVtbnM7IGNvbHVtbisrKSB7XHJcbiAgICAgIGNvbnN0IHBsYW5rUG9zWCA9IG9mZnNldFBsYW5rUG9zWCAqIGNvbHVtbjtcclxuICAgICAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgcm93czsgcm93KyspIHtcclxuICAgICAgICBjb25zdCBwbGFua1Bvc1ogPSBvZmZzZXRQbGFua1Bvc1ogKiByb3c7XHJcblxyXG4gICAgICAgIGNvbnN0IHBsYW5rTGVmdDogRmxvb3JQYXR0ZXJuVHJhbnNmb3JtID0ge1xyXG4gICAgICAgICAgcG9zaXRpb246IG5ldyBWZWN0b3IzKHBsYW5rUG9zWCArIGNlbnRlck9mZnNldFgsIDAsIHBsYW5rUG9zWiArIGNlbnRlck9mZnNldFopLFxyXG4gICAgICAgICAgcm90YXRpb246IG5ldyBWZWN0b3IzKDAsIE1hdGhVdGlscy5kZWdUb1JhZChmbG9vclJvdGF0aW9uICsgaGVycmluZ0JvbmVBbmdsZSksIDApLFxyXG4gICAgICAgICAgaXNMZWZ0OiB0cnVlXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgcGxhbmtSaWdodDogRmxvb3JQYXR0ZXJuVHJhbnNmb3JtID0ge1xyXG4gICAgICAgICAgcG9zaXRpb246IG5ldyBWZWN0b3IzKFxyXG4gICAgICAgICAgICBwbGFua1Bvc1ggKyBvZmZzZXRQbGFua1Bvc1ggLyAyICsgY2VudGVyT2Zmc2V0WCxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgcGxhbmtQb3NaICsgb2Zmc2V0UGxhbmtQb3NaIC8gMiArIGNlbnRlck9mZnNldFpcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICByb3RhdGlvbjogbmV3IFZlY3RvcjMoMCwgTWF0aFV0aWxzLmRlZ1RvUmFkKGZsb29yUm90YXRpb24gLSBoZXJyaW5nQm9uZUFuZ2xlKSwgMCksXHJcbiAgICAgICAgICBpc0xlZnQ6IGZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpdGVtcy5wdXNoKHBsYW5rTGVmdCwgcGxhbmtSaWdodCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuX3JvdGF0ZVBhdHRlcm5PblpBeGlzKGl0ZW1zLCBmbG9vclJvdGF0aW9uKTtcclxuICAgIHJldHVybiBpdGVtcztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hvbiAoXHJcbiAgICBwbGFua1NpemU6IFZlY3RvcjMsXHJcbiAgICBmbG9vcldpZHRoOiBudW1iZXIsXHJcbiAgICBmbG9vckxlbmd0aDogbnVtYmVyLFxyXG4gICAgZmxvb3JSb3RhdGlvbjogbnVtYmVyLFxyXG4gICAgcGF0dGVybkFuZ2xlOiBudW1iZXJcclxuICApOiBGbG9vclBhdHRlcm5UcmFuc2Zvcm1bXSB7XHJcbiAgICBjb25zdCBpdGVtczogRmxvb3JQYXR0ZXJuVHJhbnNmb3JtW10gPSBbXTtcclxuICAgIGNvbnN0IHBhdHRlcm5BbmdsZVJhZDogbnVtYmVyID0gTWF0aFV0aWxzLmRlZ1RvUmFkKHBhdHRlcm5BbmdsZSk7XHJcbiAgICBjb25zdCBwbGFua1dpZHRoID0gcGxhbmtTaXplLng7XHJcbiAgICBjb25zdCBwbGFua0xlbmd0aCA9IHBsYW5rU2l6ZS56O1xyXG4gICAgY29uc3Qgc2luID0gTWF0aC5zaW4ocGF0dGVybkFuZ2xlUmFkKTtcclxuICAgIGNvbnN0IGNvcyAgPSBNYXRoLmNvcyhwYXR0ZXJuQW5nbGVSYWQpO1xyXG4gICAgY29uc3Qgb3ZlcmxhcFZhbHVlID0gcGxhbmtMZW5ndGggKiBjb3M7XHJcbiAgICBjb25zdCByb3dFeHRlbmRWYWx1ZSA9IHBsYW5rV2lkdGggKiBjb3M7XHJcbiAgICBjb25zdCBvZmZzZXRaID0gcGxhbmtMZW5ndGggKiBjb3MgKiAyO1xyXG4gICAgY29uc3Qgb2Zmc2V0WCA9IHBsYW5rV2lkdGggKiBzaW47XHJcblxyXG4gICAgY29uc3QgY2VudGVyT2Zmc2V0WCA9IChmbG9vcldpZHRoICAtIG9mZnNldFgpIC8gMiArIG92ZXJsYXBWYWx1ZTtcclxuICAgIGNvbnN0IGNlbnRlck9mZnNldFogPSAoZmxvb3JMZW5ndGggKyByb3dFeHRlbmRWYWx1ZSkgLyAyO1xyXG4gICAgY29uc3QgY29sdW1ucyA9IE1hdGguY2VpbChmbG9vcldpZHRoIC8gKChvZmZzZXRYIC0gb3ZlcmxhcFZhbHVlKSAqIDIpKTtcclxuICAgIGNvbnN0IHJvd3MgPSBNYXRoLmNlaWwoKGZsb29yTGVuZ3RoICsgcm93RXh0ZW5kVmFsdWUpIC8gb2Zmc2V0Wik7XHJcblxyXG4gICAgZm9yIChsZXQgY29sdW1uID0gMDsgY29sdW1uIDwgY29sdW1uczsgY29sdW1uKyspIHtcclxuICAgICAgY29uc3QgcGxhbmtQb3NYID0gY29sdW1uICogKG9mZnNldFggLSBvdmVybGFwVmFsdWUpICogMjtcclxuICAgICAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgcm93czsgcm93KyspIHtcclxuXHJcbiAgICAgICAgY29uc3QgcGxhbmtQb3NaID0gcm93ICogb2Zmc2V0WjtcclxuICAgICAgICBjb25zdCBwbGFua0xlZnQ6IEZsb29yUGF0dGVyblRyYW5zZm9ybSA9IHtcclxuICAgICAgICAgIHBvc2l0aW9uOiBuZXcgVmVjdG9yMyhwbGFua1Bvc1ggLSBjZW50ZXJPZmZzZXRYLCAwLCBwbGFua1Bvc1ogLSBjZW50ZXJPZmZzZXRaKSxcclxuICAgICAgICAgIHJvdGF0aW9uOiBuZXcgVmVjdG9yMygwLCBNYXRoVXRpbHMuZGVnVG9SYWQoKDkwIC0gcGF0dGVybkFuZ2xlKSArIGZsb29yUm90YXRpb24pLCAwKSxcclxuICAgICAgICAgIGlzTGVmdDogdHJ1ZVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IHBsYW5rUmlnaHQ6IEZsb29yUGF0dGVyblRyYW5zZm9ybSA9IHtcclxuICAgICAgICAgIHBvc2l0aW9uOiBuZXcgVmVjdG9yMyhwbGFua1Bvc1ggKyBvZmZzZXRYIC0gb3ZlcmxhcFZhbHVlIC0gY2VudGVyT2Zmc2V0WCwgMCwgcGxhbmtQb3NaIC0gY2VudGVyT2Zmc2V0WiksXHJcbiAgICAgICAgICByb3RhdGlvbjogbmV3IFZlY3RvcjMoMCwgTWF0aFV0aWxzLmRlZ1RvUmFkKCAoOTAgKyBwYXR0ZXJuQW5nbGUpICsgZmxvb3JSb3RhdGlvbiksIDApLFxyXG4gICAgICAgICAgaXNMZWZ0OiBmYWxzZVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGl0ZW1zLnB1c2gocGxhbmtMZWZ0LCBwbGFua1JpZ2h0KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5fcm90YXRlUGF0dGVybk9uWkF4aXMoaXRlbXMsIGZsb29yUm90YXRpb24pO1xyXG4gICAgcmV0dXJuIGl0ZW1zO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
162
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvb3ItcGF0dGVybi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hcHAvcGx1Z2lucy9jb3JlM2Qvc2VydmljZS9mbG9vci1wYXR0ZXJuLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLE9BQU8sQ0FBQzs7QUFFbEQsTUFBTSxDQUFOLElBQVksWUFLWDtBQUxELFdBQVksWUFBWTtJQUN0QixtREFBTSxDQUFBO0lBQ04sNkRBQVcsQ0FBQTtJQUNYLGlEQUFLLENBQUE7SUFDTCxpREFBSyxDQUFBO0FBQ1AsQ0FBQyxFQUxXLFlBQVksS0FBWixZQUFZLFFBS3ZCO0FBRUQsTUFBTSxDQUFOLElBQVkscUJBR1g7QUFIRCxXQUFZLHFCQUFxQjtJQUMvQix5RUFBUSxDQUFBO0lBQ1IsbUVBQUssQ0FBQTtBQUNQLENBQUMsRUFIVyxxQkFBcUIsS0FBckIscUJBQXFCLFFBR2hDO0FBV0QsTUFBTSxPQUFPLG1CQUFtQjtJQUV2QixlQUFlLENBQ3BCLFlBQTBCLEVBQzFCLFNBQWtCLEVBQ2xCLFNBQWtCLEVBQ2xCLFlBQW1DLHFCQUFxQixDQUFDLEtBQUssRUFDOUQsWUFBb0IsQ0FBQztRQUVyQixNQUFNLGFBQWEsR0FBRyxTQUFTLEtBQUsscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1RSxJQUFJLFVBQVUsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQzdCLElBQUksV0FBVyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFFOUIsSUFBSSxTQUFTLEtBQUsscUJBQXFCLENBQUMsUUFBUSxFQUFFO1lBQ2hELFVBQVUsR0FBRyxTQUFTLENBQUMsQ0FBQyxD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cUhBQW5CLG1CQUFtQixjQUZsQixNQUFNOzRGQUVQLG1CQUFtQjtrQkFIL0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1ZlY3RvcjMsIE1hdGhVdGlscywgVmVjdG9yMn0gZnJvbSAndGhyZWUnO1xyXG5cclxuZXhwb3J0IGVudW0gRmxvb3JQYXR0ZXJuIHtcclxuICBOT1JNQUwsXHJcbiAgSEVSUklOR0JPTkUsXHJcbiAgSE9ONjAsXHJcbiAgSE9ONDVcclxufVxyXG5cclxuZXhwb3J0IGVudW0gRmxvb3JQYXR0ZXJuRGlyZWN0aW9uIHtcclxuICBTVEFORElORyxcclxuICBMWUlOR1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZsb29yUGF0dGVyblRyYW5zZm9ybSB7XHJcbiAgcG9zaXRpb246IFZlY3RvcjM7XHJcbiAgcm90YXRpb246IFZlY3RvcjM7XHJcbiAgaXNMZWZ0OiBib29sZWFuO1xyXG59XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGbG9vclBhdHRlcm5TZXJ2aWNlIHtcclxuXHJcbiAgcHVibGljIGdlbmVyYXRlUGF0dGVybihcclxuICAgIGZsb29yUGF0dGVybjogRmxvb3JQYXR0ZXJuLFxyXG4gICAgcGxhbmtTaXplOiBWZWN0b3IzLFxyXG4gICAgZmxvb3JTaXplOiBWZWN0b3IzLFxyXG4gICAgZGlyZWN0aW9uOiBGbG9vclBhdHRlcm5EaXJlY3Rpb24gPSBGbG9vclBhdHRlcm5EaXJlY3Rpb24uTFlJTkcsXHJcbiAgICBoZWFydExpbmU6IG51bWJlciA9IDBcclxuICApOiBGbG9vclBhdHRlcm5UcmFuc2Zvcm1bXSB7XHJcbiAgICBjb25zdCBmbG9vclJvdGF0aW9uID0gZGlyZWN0aW9uID09PSBGbG9vclBhdHRlcm5EaXJlY3Rpb24uU1RBTkRJTkcgPyA5MCA6IDA7XHJcbiAgICBsZXQgZmxvb3JXaWR0aCA9IGZsb29yU2l6ZS54O1xyXG4gICAgbGV0IGZsb29yTGVuZ3RoID0gZmxvb3JTaXplLno7XHJcblxyXG4gICAgaWYgKGRpcmVjdGlvbiA9PT0gRmxvb3JQYXR0ZXJuRGlyZWN0aW9uLlNUQU5ESU5HKSB7XHJcbiAgICAgIGZsb29yV2lkdGggPSBmbG9vclNpemUuejtcclxuICAgICAgZmxvb3JMZW5ndGggPSBmbG9vclNpemUueDtcclxuICAgIH1cclxuICAgIGlmIChoZWFydExpbmUgIDwgMCkgaGVhcnRMaW5lICA9IGhlYXJ0TGluZSAqIC0xO1xyXG4gICAgaGVhcnRMaW5lID0gaGVhcnRMaW5lICUgMTAwIC8gMTAwO1xyXG5cclxuICAgIHN3aXRjaCAoZmxvb3JQYXR0ZXJuKSB7XHJcbiAgICAgIGNhc2UgRmxvb3JQYXR0ZXJuLk5PUk1BTDpcclxuICAgICAgICByZXR1cm4gdGhpcy5fbm9ybWFsUGF0dGVybihwbGFua1NpemUsIGZsb29yV2lkdGgsIGZsb29yTGVuZ3RoLCBmbG9vclJvdGF0aW9uLCBoZWFydExpbmUpO1xyXG4gICAgICBjYXNlIEZsb29yUGF0dGVybi5IRVJSSU5HQk9ORTpcclxuICAgICAgICByZXR1cm4gdGhpcy5faGVycmluZ0JvbmUocGxhbmtTaXplLCBmbG9vcldpZHRoLCBmbG9vckxlbmd0aCwgZmxvb3JSb3RhdGlvbiwgIGhlYXJ0TGluZSk7XHJcbiAgICAgIGNhc2UgRmxvb3JQYXR0ZXJuLkhPTjQ1OlxyXG4gICAgICAgIHJldHVybiB0aGlzLl9ob24ocGxhbmtTaXplLCBmbG9vcldpZHRoLCBmbG9vckxlbmd0aCwgZmxvb3JSb3RhdGlvbiwgNDUsIGhlYXJ0TGluZSk7XHJcbiAgICAgIGNhc2UgRmxvb3JQYXR0ZXJuLkhPTjYwOlxyXG4gICAgICAgIHJldHVybiB0aGlzLl9ob24ocGxhbmtTaXplLCBmbG9vcldpZHRoLCBmbG9vckxlbmd0aCwgZmxvb3JSb3RhdGlvbiwgNjAsIGhlYXJ0TGluZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yb3RhdGVQYXR0ZXJuT25aQXhpcyhpdGVtczogRmxvb3JQYXR0ZXJuVHJhbnNmb3JtW10sIGZsb29yUm90YXRpb246IG51bWJlcik6IHZvaWQge1xyXG5cclxuICAgIGlmIChmbG9vclJvdGF0aW9uICUgMzYwID4gMCkge1xyXG4gICAgICBpdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGNvbnN0IHJhZGlhbnMgPSBNYXRoVXRpbHMuZGVnVG9SYWQoZmxvb3JSb3RhdGlvbik7XHJcbiAgICAgICAgY29uc3QgeCA9IGl0ZW0ucG9zaXRpb24ueDtcclxuICAgICAgICBjb25zdCB6ID0gaXRlbS5wb3NpdGlvbi56O1xyXG4gICAgICAgIGl0ZW0ucG9zaXRpb24ueCA9IHggKiBNYXRoLmNvcyhyYWRpYW5zKSAtIHogKiBNYXRoLnNpbihyYWRpYW5zKTtcclxuICAgICAgICBpdGVtLnBvc2l0aW9uLnogPSB4ICogTWF0aC5zaW4ocmFkaWFucykgKyB6ICogTWF0aC5jb3MocmFkaWFucyk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbm9ybWFsUGF0dGVybihcclxuICAgIHBsYW5rU2l6ZTogVmVjdG9yMyxcclxuICAgIGZsb29yV2lkdGg6IG51bWJlcixcclxuICAgIGZsb29yTGVuZ3RoOiBudW1iZXIsXHJcbiAgICBmbG9vclJvdGF0aW9uOiBudW1iZXIsXHJcbiAgICBoZWFydExpbmU6IG51bWJlclxyXG4gICk6IEZsb29yUGF0dGVyblRyYW5zZm9ybVtdIHtcclxuICAgIGNvbnN0IGl0ZW1zOiBGbG9vclBhdHRlcm5UcmFuc2Zvcm1bXSA9IFtdO1xyXG4gICAgY29uc3Qgc3RlcE9mZnNldEFtb3VudCA9IC40O1xyXG4gICAgY29uc3QgcGxhbmtXaWR0aCA9IHBsYW5rU2l6ZS54O1xyXG4gICAgY29uc3QgcGxhbmtMZW5ndGggPSBwbGFua1NpemUuejtcclxuICAgIGNvbnN0IG9mZnNldFN0ZXBzID0gcGxhbmtXaWR0aCAvIHN0ZXBPZmZzZXRBbW91bnQ7XHJcbiAgICBjb25zdCBoZWFydExpbmVPZmZzZXQgPSBwbGFua1dpZHRoICogaGVhcnRMaW5lO1xyXG4gICAgY29uc3Qgcm93cyA9IE1hdGguY2VpbChmbG9vckxlbmd0aCAvIHBsYW5rTGVuZ3RoKTtcclxuICAgIGNvbnN0IGNvbHVtbnMgPSBNYXRoLmNlaWwoZmxvb3JXaWR0aCAvIHBsYW5rV2lkdGggKyBoZWFydExpbmVPZmZzZXQpO1xyXG5cclxuICAgIGNvbnN0IGNlbnRlck9mZnNldFggPSAoZmxvb3JXaWR0aCAvIDIgKiAtMSkgKyAocGxhbmtXaWR0aCAvIDIpO1xyXG4gICAgY29uc3QgY2VudGVyT2Zmc2V0WiA9IChmbG9vckxlbmd0aCAvIDIgKiAtMSkgKyAocGxhbmtMZW5ndGggLyAyKTtcclxuXHJcbiAgICBsZXQgIGN1cnJlbnRPZmZzZXRTdGVwID0gMDtcclxuXHJcbiAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCByb3dzOyByb3crKykge1xyXG4gICAgICBpZiAoY3VycmVudE9mZnNldFN0ZXAgPiBvZmZzZXRTdGVwcykge1xyXG4gICAgICAgIGN1cnJlbnRPZmZzZXRTdGVwID0gMDtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBwbGFua1Bvc1ogPSAocGxhbmtMZW5ndGggKiByb3cpO1xyXG4gICAgICBjb25zdCBjdXJyZW50T2Zmc2V0QW1vdW50ID0gc3RlcE9mZnNldEFtb3VudCAqIGN1cnJlbnRPZmZzZXRTdGVwO1xyXG5cclxuICAgICAgY29uc3QgcGxhbmtzID0gY3VycmVudE9mZnNldFN0ZXAgPiAwID8gY29sdW1ucyArIDEgOiBjb2x1bW5zO1xyXG5cclxuICAgICAgZm9yIChsZXQgY29sID0gMDsgY29sIDwgcGxhbmtzOyBjb2wrKykge1xyXG4gICAgICAgIGNvbnN0IHBsYW5rUG9zWCA9IChwbGFua1dpZHRoICogY29sKSAtIGN1cnJlbnRPZmZzZXRBbW91bnQ7XHJcbiAgICAgICAgaXRlbXMucHVzaCh7XHJcbiAgICAgICAgICBwb3NpdGlvbjogbmV3IFZlY3RvcjMocGxhbmtQb3NYICsgY2VudGVyT2Zmc2V0WCAtIGhlYXJ0TGluZU9mZnNldCwgMCwgcGxhbmtQb3NaICsgY2VudGVyT2Zmc2V0WiksXHJcbiAgICAgICAgICByb3RhdGlvbjogbmV3IFZlY3RvcjMoMCwgTWF0aFV0aWxzLmRlZ1RvUmFkKGZsb29yUm90YXRpb24pLCAwKSxcclxuICAgICAgICAgIGlzTGVmdDogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGN1cnJlbnRPZmZzZXRTdGVwKys7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9yb3RhdGVQYXR0ZXJuT25aQXhpcyhpdGVtcywgZmxvb3JSb3RhdGlvbik7XHJcbiAgICByZXR1cm4gaXRlbXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9oZXJyaW5nQm9uZShcclxuICAgIHBsYW5rU2l6ZTogVmVjdG9yMyxcclxuICAgIGZsb29yV2lkdGg6IG51bWJlcixcclxuICAgIGZsb29yTGVuZ3RoOiBudW1iZXIsXHJcbiAgICBmbG9vclJvdGF0aW9uOiBudW1iZXIsXHJcbiAgICBoZWFydExpbmU6IG51bWJlcixcclxuICApOiBGbG9vclBhdHRlcm5UcmFuc2Zvcm1bXSB7XHJcbiAgICBjb25zdCBpdGVtczogRmxvb3JQYXR0ZXJuVHJhbnNmb3JtW10gPSBbXTtcclxuICAgIGNvbnN0IGhlcnJpbmdCb25lQW5nbGUgPSA0NTtcclxuICAgIGNvbnN0IHNxcnQyID0gTWF0aC5zcXJ0KDIpO1xyXG4gICAgY29uc3QgcGxhbmtXaWR0aCA9IHBsYW5rU2l6ZS54O1xyXG4gICAgY29uc3QgcGxhbmtMZW5ndGggPSBwbGFua1NpemUuejtcclxuICAgIGNvbnN0IG9mZnNldFBsYW5rUG9zWCA9IHBsYW5rV2lkdGggKiBzcXJ0MjtcclxuICAgIGNvbnN0IG9mZnNldFBsYW5rUG9zWiA9IHBsYW5rTGVuZ3RoICogc3FydDI7XHJcbiAgICBjb25zdCBoZWFydExpbmVQb3NYID0gb2Zmc2V0UGxhbmtQb3NYICogaGVhcnRMaW5lO1xyXG4gICAgY29uc3QgY29sdW1ucyA9IE1hdGguY2VpbChmbG9vcldpZHRoIC8gKHBsYW5rV2lkdGggKiBzcXJ0MikgKyBoZWFydExpbmVQb3NYKTtcclxuICAgIGNvbnN0IHJvd3MgPSBNYXRoLmNlaWwoXHJcbiAgICAgIGZsb29yTGVuZ3RoIC8gKHBsYW5rTGVuZ3RoICogc3FydDIpICtcclxuICAgICAgLy8gYWRkIGV4dHJhIHJvd3Mgc28gdGhhdCB0aGVyZSBpc24ndCBhIGdhcFxyXG4gICAgICBvZmZzZXRQbGFua1Bvc1ggKiAyXHJcbiAgICApO1xyXG4gICAgY29uc3QgY2VudGVyT2Zmc2V0WCA9IGZsb29yV2lkdGggLyAyICogLTEgKyBvZmZzZXRQbGFua1Bvc1ggLyA0IC0gb2Zmc2V0UGxhbmtQb3NaIC8gNDtcclxuICAgIGNvbnN0IGNlbnRlck9mZnNldFogPSBmbG9vckxlbmd0aCAvIDIgKiAtMSAtIG9mZnNldFBsYW5rUG9zWCAvIDQ7XHJcblxyXG4gICAgZm9yIChsZXQgY29sdW1uID0gMDsgY29sdW1uIDwgY29sdW1uczsgY29sdW1uKyspIHtcclxuICAgICAgY29uc3QgcGxhbmtQb3NYID0gb2Zmc2V0UGxhbmtQb3NYICogY29sdW1uO1xyXG4gICAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCByb3dzOyByb3crKykge1xyXG4gICAgICAgIGNvbnN0IHBsYW5rUG9zWiA9IG9mZnNldFBsYW5rUG9zWiAqIHJvdztcclxuXHJcbiAgICAgICAgY29uc3QgcGxhbmtMZWZ0OiBGbG9vclBhdHRlcm5UcmFuc2Zvcm0gPSB7XHJcbiAgICAgICAgICBwb3NpdGlvbjogbmV3IFZlY3RvcjMocGxhbmtQb3NYICsgY2VudGVyT2Zmc2V0WCAtIGhlYXJ0TGluZVBvc1gsIDAsIHBsYW5rUG9zWiArIGNlbnRlck9mZnNldFopLFxyXG4gICAgICAgICAgcm90YXRpb246IG5ldyBWZWN0b3IzKDAsIE1hdGhVdGlscy5kZWdUb1JhZChmbG9vclJvdGF0aW9uICsgaGVycmluZ0JvbmVBbmdsZSksIDApLFxyXG4gICAgICAgICAgaXNMZWZ0OiB0cnVlXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgcGxhbmtSaWdodDogRmxvb3JQYXR0ZXJuVHJhbnNmb3JtID0ge1xyXG4gICAgICAgICAgcG9zaXRpb246IG5ldyBWZWN0b3IzKFxyXG4gICAgICAgICAgICBwbGFua1Bvc1ggKyBvZmZzZXRQbGFua1Bvc1ggLyAyICsgY2VudGVyT2Zmc2V0WCAtIGhlYXJ0TGluZVBvc1gsXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIHBsYW5rUG9zWiArIG9mZnNldFBsYW5rUG9zWiAvIDIgKyBjZW50ZXJPZmZzZXRaXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgcm90YXRpb246IG5ldyBWZWN0b3IzKDAsIE1hdGhVdGlscy5kZWdUb1JhZChmbG9vclJvdGF0aW9uIC0gaGVycmluZ0JvbmVBbmdsZSksIDApLFxyXG4gICAgICAgICAgaXNMZWZ0OiBmYWxzZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaXRlbXMucHVzaChwbGFua0xlZnQsIHBsYW5rUmlnaHQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLl9yb3RhdGVQYXR0ZXJuT25aQXhpcyhpdGVtcywgZmxvb3JSb3RhdGlvbik7XHJcbiAgICByZXR1cm4gaXRlbXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9ob24gKFxyXG4gICAgcGxhbmtTaXplOiBWZWN0b3IzLFxyXG4gICAgZmxvb3JXaWR0aDogbnVtYmVyLFxyXG4gICAgZmxvb3JMZW5ndGg6IG51bWJlcixcclxuICAgIGZsb29yUm90YXRpb246IG51bWJlcixcclxuICAgIHBhdHRlcm5BbmdsZTogbnVtYmVyLFxyXG4gICAgaGVhcnRMaW5lOiBudW1iZXIsXHJcbiAgKTogRmxvb3JQYXR0ZXJuVHJhbnNmb3JtW10ge1xyXG4gICAgY29uc3QgaXRlbXM6IEZsb29yUGF0dGVyblRyYW5zZm9ybVtdID0gW107XHJcbiAgICBjb25zdCBwYXR0ZXJuQW5nbGVSYWQ6IG51bWJlciA9IE1hdGhVdGlscy5kZWdUb1JhZChwYXR0ZXJuQW5nbGUpO1xyXG4gICAgY29uc3QgcGxhbmtXaWR0aCA9IHBsYW5rU2l6ZS54O1xyXG4gICAgY29uc3QgcGxhbmtMZW5ndGggPSBwbGFua1NpemUuejtcclxuICAgIGNvbnN0IHNpbiA9IE1hdGguc2luKHBhdHRlcm5BbmdsZVJhZCk7XHJcbiAgICBjb25zdCBjb3MgID0gTWF0aC5jb3MocGF0dGVybkFuZ2xlUmFkKTtcclxuICAgIGNvbnN0IG92ZXJsYXBWYWx1ZSA9IHBsYW5rTGVuZ3RoICogY29zO1xyXG4gICAgY29uc3Qgcm93RXh0ZW5kVmFsdWUgPSBwbGFua1dpZHRoICogY29zO1xyXG4gICAgY29uc3Qgb2Zmc2V0WiA9IHBsYW5rTGVuZ3RoICogY29zICogMjtcclxuICAgIGNvbnN0IG9mZnNldFggPSBwbGFua1dpZHRoICogc2luO1xyXG4gICAgY29uc3QgaGVhcnRMaW5lUG9zWCA9IG9mZnNldFggKiBoZWFydExpbmU7XHJcblxyXG4gICAgY29uc3QgY2VudGVyT2Zmc2V0WCA9ICgoZmxvb3JXaWR0aCAgLSBvZmZzZXRYKSAvIDIgKyBvdmVybGFwVmFsdWUpO1xyXG4gICAgY29uc3QgY2VudGVyT2Zmc2V0WiA9IChmbG9vckxlbmd0aCArIHJvd0V4dGVuZFZhbHVlKSAvIDI7XHJcbiAgICBjb25zdCBjb2x1bW5zID0gTWF0aC5jZWlsKGZsb29yV2lkdGggLyAoKG9mZnNldFggLSBvdmVybGFwVmFsdWUpICogMikgKyBoZWFydExpbmVQb3NYKTtcclxuICAgIGNvbnN0IHJvd3MgPSBNYXRoLmNlaWwoKGZsb29yTGVuZ3RoICsgcm93RXh0ZW5kVmFsdWUpIC8gb2Zmc2V0Wik7XHJcblxyXG4gICAgZm9yIChsZXQgY29sdW1uID0gMDsgY29sdW1uIDwgY29sdW1uczsgY29sdW1uKyspIHtcclxuICAgICAgY29uc3QgcGxhbmtQb3NYID0gY29sdW1uICogKG9mZnNldFggLSBvdmVybGFwVmFsdWUpICogMjtcclxuICAgICAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgcm93czsgcm93KyspIHtcclxuXHJcbiAgICAgICAgY29uc3QgcGxhbmtQb3NaID0gcm93ICogb2Zmc2V0WjtcclxuICAgICAgICBjb25zdCBwbGFua0xlZnQ6IEZsb29yUGF0dGVyblRyYW5zZm9ybSA9IHtcclxuICAgICAgICAgIHBvc2l0aW9uOiBuZXcgVmVjdG9yMyhwbGFua1Bvc1ggLSBjZW50ZXJPZmZzZXRYIC0gaGVhcnRMaW5lUG9zWCwgMCwgcGxhbmtQb3NaIC0gY2VudGVyT2Zmc2V0WiksXHJcbiAgICAgICAgICByb3RhdGlvbjogbmV3IFZlY3RvcjMoMCwgTWF0aFV0aWxzLmRlZ1RvUmFkKCg5MCAtIHBhdHRlcm5BbmdsZSkgKyBmbG9vclJvdGF0aW9uKSwgMCksXHJcbiAgICAgICAgICBpc0xlZnQ6IHRydWVcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBwbGFua1JpZ2h0OiBGbG9vclBhdHRlcm5UcmFuc2Zvcm0gPSB7XHJcbiAgICAgICAgICBwb3NpdGlvbjogbmV3IFZlY3RvcjMocGxhbmtQb3NYICsgb2Zmc2V0WCAtIG92ZXJsYXBWYWx1ZSAtIGNlbnRlck9mZnNldFggLSBoZWFydExpbmVQb3NYLCAwLCBwbGFua1Bvc1ogLSBjZW50ZXJPZmZzZXRaKSxcclxuICAgICAgICAgIHJvdGF0aW9uOiBuZXcgVmVjdG9yMygwLCBNYXRoVXRpbHMuZGVnVG9SYWQoICg5MCArIHBhdHRlcm5BbmdsZSkgKyBmbG9vclJvdGF0aW9uKSwgMCksXHJcbiAgICAgICAgICBpc0xlZnQ6IGZhbHNlXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaXRlbXMucHVzaChwbGFua0xlZnQsIHBsYW5rUmlnaHQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLl9yb3RhdGVQYXR0ZXJuT25aQXhpcyhpdGVtcywgZmxvb3JSb3RhdGlvbik7XHJcbiAgICByZXR1cm4gaXRlbXM7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -12,15 +12,14 @@ export class FloorTileIntersectionService {
|
|
|
12
12
|
toggleDebug() {
|
|
13
13
|
this._debug = !this._debug;
|
|
14
14
|
}
|
|
15
|
-
countTiles(floorMesh, floorPattern,
|
|
15
|
+
countTiles(floorMesh, floorPattern, geometryLeft, geometryRight = null, addFiltered = false) {
|
|
16
16
|
const result = {
|
|
17
17
|
left: 0,
|
|
18
18
|
right: 0,
|
|
19
19
|
edge: 0,
|
|
20
|
-
total: 0
|
|
20
|
+
total: 0
|
|
21
21
|
};
|
|
22
|
-
|
|
23
|
-
const { floorHits, edgeHits } = this._checkIntersection2(floorMesh, floorPattern, geometry);
|
|
22
|
+
const { floorHits, edgeHits } = this._checkIntersection2(floorMesh, floorPattern, geometryLeft, geometryRight);
|
|
24
23
|
for (const floorHit of floorHits) {
|
|
25
24
|
if (floorHit.isLeft) {
|
|
26
25
|
result.left += 1;
|
|
@@ -31,19 +30,25 @@ export class FloorTileIntersectionService {
|
|
|
31
30
|
}
|
|
32
31
|
result.edge = edgeHits.length;
|
|
33
32
|
result.total = floorHits.length;
|
|
33
|
+
if (addFiltered)
|
|
34
|
+
result.filtered = floorHits;
|
|
34
35
|
return result;
|
|
35
36
|
}
|
|
36
|
-
_checkIntersection2(floorMesh, floorPattern,
|
|
37
|
-
|
|
37
|
+
_checkIntersection2(floorMesh, floorPattern, geometryLeft, geometryRight) {
|
|
38
|
+
const edgeColliders = this._generateEdgeColliders(floorMesh.geometry);
|
|
38
39
|
const result = {
|
|
39
40
|
floorHits: new Array(),
|
|
40
41
|
edgeHits: new Array()
|
|
41
42
|
};
|
|
42
|
-
const
|
|
43
|
+
const bvhLeft = new MeshBVH(geometryLeft);
|
|
44
|
+
const bvhRight = (geometryRight !== null) ? new MeshBVH(geometryRight) : null;
|
|
43
45
|
const positionReference = new Object3D();
|
|
44
46
|
for (const floorItem of floorPattern) {
|
|
47
|
+
const bvh = (floorItem.isLeft) ? bvhLeft : bvhRight;
|
|
45
48
|
const pos = floorItem.position;
|
|
49
|
+
const rot = floorItem.rotation;
|
|
46
50
|
positionReference.position.set(pos.x, pos.y, pos.z);
|
|
51
|
+
positionReference.rotation.set(rot.x, rot.y, rot.z);
|
|
47
52
|
positionReference.updateMatrixWorld();
|
|
48
53
|
const floorWorldToBhv = new Matrix4()
|
|
49
54
|
.copy(positionReference.matrixWorld)
|
|
@@ -119,4 +124,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
119
124
|
providedIn: 'root'
|
|
120
125
|
}]
|
|
121
126
|
}], ctorParameters: function () { return [{ type: i1.SceneService }]; } });
|
|
122
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvb3ItdGlsZS1pbnRlcnNlY3Rpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jbGllbnQvYXBwL3BsdWdpbnMvY29yZTNkL3NlcnZpY2UvZmxvb3ItdGlsZS1pbnRlcnNlY3Rpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBRXBELE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2QyxPQUFPLEVBRUwsV0FBVyxFQUVYLEtBQUssRUFDTCxVQUFVLEVBQ1YsYUFBYSxFQUFFLE9BQU8sRUFDdEIsSUFBSSxFQUNKLGlCQUFpQixFQUFFLFFBQVEsRUFHM0IsT0FBTyxFQUVSLE1BQU0sT0FBTyxDQUFDOzs7QUFhZixNQUFNLE9BQU8sNEJBQTRCO0lBSXZDLFlBQ1UsYUFBMkI7UUFBM0Isa0JBQWEsR0FBYixhQUFhLENBQWM7UUFFbkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztJQUNuQyxDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUM3QixDQUFDO0lBRU0sVUFBVSxDQUNmLFNBQWUsRUFDZixZQUEwQyxFQUMxQyxRQUF3QjtRQUV4QixNQUFNLE1BQU0sR0FBcUI7WUFDL0IsSUFBSSxFQUFFLENBQUM7WUFDUCxLQUFLLEVBQUUsQ0FBQztZQUNSLElBQUksRUFBRSxDQUFDO1lBQ1AsS0FBSyxFQUFFLENBQUM7U0FDVCxDQUFDO1FBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDakMsTUFBTSxFQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUMsR0FBRyxJQUFJLENBQUMsbUJBQW1C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QUFDLEtBQUssQ0FBQztZQUN2QyxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRTtnQkFDeEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3JDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDakI7U0FDRjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVPLGFBQWE7UUFDbkIsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNyRSxPQUFPLElBQUksaUJBQWlCLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUcsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUVELFdBQVc7SUFDWCxDQUFDOzswSEFqSVUsNEJBQTRCOzhIQUE1Qiw0QkFBNEIsY0FGM0IsTUFBTTs0RkFFUCw0QkFBNEI7a0JBSHhDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlLCBPbkRlc3Ryb3l9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1NjZW5lU2VydmljZX0gZnJvbSAnLi9zY2VuZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtNZXNoQlZIfSBmcm9tICd0aHJlZS1tZXNoLWJ2aCc7XHJcbmltcG9ydCB7XHJcbiAgQm94MyxcclxuICBCb3hHZW9tZXRyeSxcclxuICBCdWZmZXJHZW9tZXRyeSxcclxuICBDb2xvcixcclxuICBEb3VibGVTaWRlLFxyXG4gIEVkZ2VzR2VvbWV0cnksIE1hdHJpeDQsXHJcbiAgTWVzaCxcclxuICBNZXNoQmFzaWNNYXRlcmlhbCwgT2JqZWN0M0QsIFNoYXBlLFxyXG4gIFNoYXBlR2VvbWV0cnksXHJcbiAgVHJpYW5nbGUsXHJcbiAgVmVjdG9yMixcclxuICBWZWN0b3IzXHJcbn0gZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQge0Zsb29yUGF0dGVyblRyYW5zZm9ybX0gZnJvbSAnLi9mbG9vci1wYXR0ZXJuLnNlcnZpY2UnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGbG9vckNvdW50UmVzdWx0IHtcclxuICBsZWZ0OiBudW1iZXI7XHJcbiAgcmlnaHQ6IG51bWJlcjtcclxuICBlZGdlOiBudW1iZXI7XHJcbiAgdG90YWw6IG51bWJlcjtcclxufVxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRmxvb3JUaWxlSW50ZXJzZWN0aW9uU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSBfZGVidWc6IEJvb2xlYW47XHJcbiAgcHJpdmF0ZSBfZWRnZUNvbGxpc2lvbk1hcmdpbjogbnVtYmVyO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX3NjZW5lU2VydmljZTogU2NlbmVTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLl9kZWJ1ZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5fZWRnZUNvbGxpc2lvbk1hcmdpbiA9IDAuMDU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdG9nZ2xlRGVidWcoKSB7XHJcbiAgICB0aGlzLl9kZWJ1ZyA9ICF0aGlzLl9kZWJ1ZztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb3VudFRpbGVzKFxyXG4gICAgZmxvb3JNZXNoOiBNZXNoLFxyXG4gICAgZmxvb3JQYXR0ZXJuOiBBcnJheTxGbG9vclBhdHRlcm5UcmFuc2Zvcm0+LFxyXG4gICAgZ2VvbWV0cnk6IEJ1ZmZlckdlb21ldHJ5XHJcbiAgKTogRmxvb3JDb3VudFJlc3VsdCB7XHJcbiAgICBjb25zdCByZXN1bHQ6IEZsb29yQ291bnRSZXN1bHQgPSB7XHJcbiAgICAgIGxlZnQ6IDAsXHJcbiAgICAgIHJpZ2h0OiAwLFxyXG4gICAgICBlZGdlOiAwLFxyXG4gICAgICB0b3RhbDogMCxcclxuICAgIH07XHJcbiAgICBjb25zb2xlLmxvZyhmbG9vck1lc2gucG9zaXRpb24pO1xyXG4gICBjb25zdCB7Zmxvb3JIaXRzLCBlZGdlSGl0c30gPSB0aGlzLl9jaGVja0ludGVyc2VjdGlvbjIoZmxvb3JNZXNoLCBmbG9vclBhdHRlcm4sIGdlb21ldHJ5KTtcclxuICAgIGZvciAoY29uc3QgZmxvb3JIaXQgb2YgZmxvb3JIaXRzKSB7XHJcbiAgICAgIGlmIChmbG9vckhpdC5pc0xlZnQpIHtcclxuICAgICAgICByZXN1bHQubGVmdCArPSAxO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJlc3VsdC5yaWdodCArPSAxO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXN1bHQuZWRnZSA9IGVkZ2VIaXRzLmxlbmd0aDtcclxuICAgIHJlc3VsdC50b3RhbCA9IGZsb29ySGl0cy5sZW5ndGg7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2hlY2tJbnRlcnNlY3Rpb24yKFxyXG4gICAgZmxvb3JNZXNoOiBNZXNoLFxyXG4gICAgZmxvb3JQYXR0ZXJuOiBBcnJheTxGbG9vclBhdHRlcm5UcmFuc2Zvcm0+LFxyXG4gICAgZ2VvbWV0cnk6IEJ1ZmZlckdlb21ldHJ5XHJcbiAgKSB7XHJcbiAgICAvLyBjb25zdCBlZGdlQ29sbGlkZXJzID0gdGhpcy5fZ2VuZXJhdGVFZGdlQ29sbGlkZXJzKGZsb29yTWVzaC5nZW9tZXRyeSk7XHJcbiAgICBjb25zdCByZXN1bHQgPSB7XHJcbiAgICAgIGZsb29ySGl0czogbmV3IEFycmF5PEZsb29yUGF0dGVyblRyYW5zZm9ybT4oKSxcclxuICAgICAgZWRnZUhpdHM6IG5ldyBBcnJheTxGbG9vclBhdHRlcm5UcmFuc2Zvcm0+KClcclxuICAgIH07XHJcbiAgICBjb25zdCBidmggPSBuZXcgTWVzaEJWSChnZW9tZXRyeSk7XHJcbiAgICBjb25zdCBwb3NpdGlvblJlZmVyZW5jZSA9IG5ldyBPYmplY3QzRCgpO1xyXG4gICAgZm9yIChjb25zdCBmbG9vckl0ZW0gb2YgZmxvb3JQYXR0ZXJuKSB7XHJcbiAgICAgIGNvbnN0IHBvcyA9IGZsb29ySXRlbS5wb3NpdGlvbjtcclxuICAgICAgcG9zaXRpb25SZWZlcmVuY2UucG9zaXRpb24uc2V0KHBvcy54LCBwb3MueSwgcG9zLnopO1xyXG4gICAgICBwb3NpdGlvblJlZmVyZW5jZS51cGRhdGVNYXRyaXhXb3JsZCgpO1xyXG5cclxuICAgICAgY29uc3QgZmxvb3JXb3JsZFRvQmh2ID0gbmV3IE1hdHJpeDQoKVxyXG4gICAgICAgIC5jb3B5KHBvc2l0aW9uUmVmZXJlbmNlLm1hdHJpeFdvcmxkKVxyXG4gICAgICAgIC5pbnZlcnQoKVxyXG4gICAgICAgIC5tdWx0aXBseShmbG9vck1lc2gubWF0cml4V29ybGQpO1xyXG4gICAgICBpZiAoIGJ2aC5pbnRlcnNlY3RzR2VvbWV0cnkoZmxvb3JNZXNoLmdlb21ldHJ5LCBmbG9vcldvcmxkVG9CaHYpKSB7XHJcbiAgICAgICAgcmVzdWx0LmZsb29ySGl0cy5wdXNoKGZsb29ySXRlbSk7XHJcblxyXG4gICAgICAgIC8vIFRPRE86IGZpbmQgc29sdXRpb24gZm9yIGVkZ2UgZGV0ZWN0aW9uLCB0aGlzIHNob3VsZCB3b3JrIGFzIGl0IHVzZWQgdGhlIHNhbWUgbG9naWMgYXMgZm9yIHRoZSBmbG9vci5cclxuICAgICAgICAvLyBmb3IgKGNvbnN0IGVkZ2VDb2xsaWRlciBvZiBlZGdlQ29sbGlkZXJzKSB7XHJcbiAgICAgICAgLy8gICBjb25zdCBlZGdlV29ybGRUb0JodiA9IG5ldyBNYXRyaXg0KClcclxuICAgICAgICAvLyAgICAgLmNvcHkocG9zaXRpb25SZWZlcmVuY2UubWF0cml4V29ybGQpXHJcbiAgICAgICAgLy8gICAgIC5pbnZlcnQoKVxyXG4gICAgICAgIC8vICAgICAubXVsdGlwbHkoZWRnZUNvbGxpZGVyLm1hdHJpeFdvcmxkKTtcclxuICAgICAgICAvLyAgIGlmIChidmguaW50ZXJzZWN0c0dlb21ldHJ5KGVkZ2VDb2xsaWRlci5nZW9tZXRyeSwgZWRnZVdvcmxkVG9CaHYpKSB7XHJcbiAgICAgICAgLy8gICAgIHJlc3VsdC5lZGdlSGl0cy5wdXNoKGZsb29ySXRlbSk7XHJcbiAgICAgICAgLy8gICB9XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2VuZXJhdGVFZGdlQ29sbGlkZXJzKGZsb29yR2VvbTogQnVmZmVyR2VvbWV0cnkpOiBBcnJheTxNZXNoPiB7XHJcbiAgICBjb25zdCBlZGdlTGluZXNHZW9tID0gbmV3IEVkZ2VzR2VvbWV0cnkoZmxvb3JHZW9tKTtcclxuICAgIGNvbnN0IGxpbmVQb3NpdGlvbnMgPSBlZGdlTGluZXNHZW9tLmdldEF0dHJpYnV0ZSgncG9zaXRpb24nKS5hcnJheTtcclxuICAgIGNvbnN0IGVkZ2VzID0gbmV3IEFycmF5PE1lc2g+KCk7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lUG9zaXRpb25zLmxlbmd0aDsgaSArPSA2KSB7XHJcbiAgICAgIC8vIHN0b3JlIHZlY3RvciBhIGFuZCBiICgxIGxpbmUgcGFpciksIGJlY2F1c2Ugd2Ugd29yayBpbiAyRCB3ZSBza2lwIHRoZSB5LWF4aXMgd2hpY2ggc2hvdWxkIGJlIHplcm9cclxuICAgICAgY29uc3QgdmVjdG9yQSA9IG5ldyBWZWN0b3IyKGxpbmVQb3NpdGlvbnNbaV0sIGxpbmVQb3NpdGlvbnNbaSArIDJdKTtcclxuICAgICAgY29uc3QgdmVjdG9yQiA9IG5ldyBWZWN0b3IyKGxpbmVQb3NpdGlvbnNbaSArIDNdLCBsaW5lUG9zaXRpb25zW2kgKyA1XSk7XHJcbiAgICAgIC8vIGNhbGN1bGF0ZSBjZW50ZXIgb2YgbGluZVxyXG4gICAgICBjb25zdCBwb3NpdGlvbiA9IG5ldyBWZWN0b3IyKCkubGVycFZlY3RvcnModmVjdG9yQSwgdmVjdG9yQiwgLjUpO1xyXG4gICAgICAvLyBjYWxjdWxhdGUgbGVuZ3RoXHJcbiAgICAgIGNvbnN0IGxlbmd0aCA9IHZlY3RvckEuZGlzdGFuY2VUbyh2ZWN0b3JCKTtcclxuICAgICAgLy8gY3JlYXRlIG5vcm1hbGlzZWQgb3JpZW50YXRpb25cclxuICAgICAgY29uc3QgdW5pdFZlY3RvciA9IG5ldyBWZWN0b3IyKCkuc3ViVmVjdG9ycyh2ZWN0b3JCLCB2ZWN0b3JBKS5ub3JtYWxpemUoKTtcclxuICAgICAgLy8gcm90YXRpb24gaW4gcmFkaWFuc1xyXG4gICAgICBjb25zdCByb3RhdGlvbiA9IE1hdGguYXRhbjIodW5pdFZlY3Rvci55LCB1bml0VmVjdG9yLngpO1xyXG4gICAgICAvLyBjcmVhdGUgZWRnZSBsaW5lIHdpdGggdm9sdW1lXHJcbiAgICAgIGNvbnN0IGVkZ2VHZW9tID0gbmV3IEJveEdlb21ldHJ5KGxlbmd0aCwgMC4xLCB0aGlzLl9lZGdlQ29sbGlzaW9uTWFyZ2luKTtcclxuICAgICAgY29uc3QgZWRnZSA9IG5ldyBNZXNoKGVkZ2VHZW9tKTtcclxuICAgICAgLy8gcG9zaXRpb24gZWRnZVxyXG4gICAgICBlZGdlLnJvdGF0aW9uLnkgPSByb3RhdGlvbiAqIC0xO1xyXG4gICAgICBlZGdlLnBvc2l0aW9uLnogPSBwb3NpdGlvbi55O1xyXG4gICAgICBlZGdlLnBvc2l0aW9uLnggPSBwb3NpdGlvbi54O1xyXG4gICAgICAvLyB1cGRhdGUgYm91bmRpbmcgYm94IHZhbHVlIGZvciBjb3JyZWN0IGNvbGxpc2lvblxyXG4gICAgICBlZGdlLnVwZGF0ZU1hdHJpeFdvcmxkKCk7XHJcbiAgICAgIGVkZ2UuZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KCk7XHJcbiAgICAgIGVkZ2UuZ2VvbWV0cnkuYm91bmRpbmdCb3guYXBwbHlNYXRyaXg0KGVkZ2UubWF0cml4V29ybGQpO1xyXG4gICAgICAvLyBhZGRzIG1lc2hlcyB0byBzY2VuZVxyXG5cclxuICAgICAgZWRnZXMucHVzaChlZGdlKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLl9kZWJ1Zykge1xyXG4gICAgICBjb25zdCBzY2VuZSA9IHRoaXMuX3NjZW5lU2VydmljZS5zY2VuZTtcclxuICAgICAgZm9yIChjb25zdCBlZGdlIG9mIGVkZ2VzKSB7XHJcbiAgICAgICAgZWRnZS5tYXRlcmlhbCA9IHRoaXMuX3JhbmRvbUNvbE1hdCgpO1xyXG4gICAgICAgIHNjZW5lLmFkZChlZGdlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBlZGdlcztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JhbmRvbUNvbE1hdCgpIHtcclxuICAgIGNvbnN0IGNvbG9yID0gbmV3IENvbG9yKE1hdGgucmFuZG9tKCksIE1hdGgucmFuZG9tKCksIE1hdGgucmFuZG9tKCkpO1xyXG4gICAgcmV0dXJuIG5ldyBNZXNoQmFzaWNNYXRlcmlhbCh7IGNvbG9yOiBjb2xvciwgd2lyZWZyYW1lOiBmYWxzZSAsIHNpZGU6IERvdWJsZVNpZGUgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICB9XHJcbn1cclxuIl19
|
|
127
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvb3ItdGlsZS1pbnRlcnNlY3Rpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jbGllbnQvYXBwL3BsdWdpbnMvY29yZTNkL3NlcnZpY2UvZmxvb3ItdGlsZS1pbnRlcnNlY3Rpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBRXBELE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2QyxPQUFPLEVBR0wsV0FBVyxFQUVYLEtBQUssRUFDTCxVQUFVLEVBQ1YsYUFBYSxFQUFFLE9BQU8sRUFDdEIsSUFBSSxFQUNKLGlCQUFpQixFQUFFLFFBQVEsRUFHM0IsT0FBTyxFQUVSLE1BQU0sT0FBTyxDQUFDOzs7QUFjZixNQUFNLE9BQU8sNEJBQTRCO0lBSXZDLFlBQ1UsYUFBMkI7UUFBM0Isa0JBQWEsR0FBYixhQUFhLENBQWM7UUFFbkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztJQUNuQyxDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUM3QixDQUFDO0lBRU0sVUFBVSxDQUNmLFNBQWUsRUFDZixZQUEwQyxFQUMxQyxZQUE0QixFQUM1QixnQkFBZ0MsSUFBSSxFQUNwQyxjQUF1QixLQUFLO1FBRTVCLE1BQU0sTUFBTSxHQUFxQjtZQUMvQixJQUFJLEVBQUUsQ0FBQztZQUNQLEtBQUssRUFBRSxDQUFDO1lBQ1IsSUFBSSxFQUFFLENBQUM7WUFDUCxLQUFLLEVBQUUsQ0FBQztTQUNULENBQUM7UUFFSCxNQUFNLEVBQUMsU0FBUyxFQUFFLFFBQVEsRUFBQyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUs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QUM7OzBIQXpJVSw0QkFBNEI7OEhBQTVCLDRCQUE0QixjQUYzQixNQUFNOzRGQUVQLDRCQUE0QjtrQkFIeEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIE9uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7U2NlbmVTZXJ2aWNlfSBmcm9tICcuL3NjZW5lLnNlcnZpY2UnO1xyXG5pbXBvcnQge01lc2hCVkh9IGZyb20gJ3RocmVlLW1lc2gtYnZoJztcclxuaW1wb3J0IHtcclxuICBBcnJvd0hlbHBlciwgQXhlc0hlbHBlcixcclxuICBCb3gzLFxyXG4gIEJveEdlb21ldHJ5LFxyXG4gIEJ1ZmZlckdlb21ldHJ5LFxyXG4gIENvbG9yLFxyXG4gIERvdWJsZVNpZGUsXHJcbiAgRWRnZXNHZW9tZXRyeSwgTWF0cml4NCxcclxuICBNZXNoLFxyXG4gIE1lc2hCYXNpY01hdGVyaWFsLCBPYmplY3QzRCwgU2hhcGUsXHJcbiAgU2hhcGVHZW9tZXRyeSxcclxuICBUcmlhbmdsZSxcclxuICBWZWN0b3IyLFxyXG4gIFZlY3RvcjNcclxufSBmcm9tICd0aHJlZSc7XHJcbmltcG9ydCB7Rmxvb3JQYXR0ZXJuVHJhbnNmb3JtfSBmcm9tICcuL2Zsb29yLXBhdHRlcm4uc2VydmljZSc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZsb29yQ291bnRSZXN1bHQge1xyXG4gIGxlZnQ6IG51bWJlcjtcclxuICByaWdodDogbnVtYmVyO1xyXG4gIGVkZ2U6IG51bWJlcjtcclxuICB0b3RhbDogbnVtYmVyO1xyXG4gIGZpbHRlcmVkPzogQXJyYXk8Rmxvb3JQYXR0ZXJuVHJhbnNmb3JtPjtcclxufVxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRmxvb3JUaWxlSW50ZXJzZWN0aW9uU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSBfZGVidWc6IEJvb2xlYW47XHJcbiAgcHJpdmF0ZSBfZWRnZUNvbGxpc2lvbk1hcmdpbjogbnVtYmVyO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX3NjZW5lU2VydmljZTogU2NlbmVTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLl9kZWJ1ZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5fZWRnZUNvbGxpc2lvbk1hcmdpbiA9IDAuMDU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdG9nZ2xlRGVidWcoKSB7XHJcbiAgICB0aGlzLl9kZWJ1ZyA9ICF0aGlzLl9kZWJ1ZztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb3VudFRpbGVzKFxyXG4gICAgZmxvb3JNZXNoOiBNZXNoLFxyXG4gICAgZmxvb3JQYXR0ZXJuOiBBcnJheTxGbG9vclBhdHRlcm5UcmFuc2Zvcm0+LFxyXG4gICAgZ2VvbWV0cnlMZWZ0OiBCdWZmZXJHZW9tZXRyeSxcclxuICAgIGdlb21ldHJ5UmlnaHQ6IEJ1ZmZlckdlb21ldHJ5ID0gbnVsbCxcclxuICAgIGFkZEZpbHRlcmVkOiBib29sZWFuID0gZmFsc2VcclxuICApOiBGbG9vckNvdW50UmVzdWx0IHtcclxuICAgIGNvbnN0IHJlc3VsdDogRmxvb3JDb3VudFJlc3VsdCA9IHtcclxuICAgICAgbGVmdDogMCxcclxuICAgICAgcmlnaHQ6IDAsXHJcbiAgICAgIGVkZ2U6IDAsXHJcbiAgICAgIHRvdGFsOiAwXHJcbiAgICB9O1xyXG5cclxuICAgY29uc3Qge2Zsb29ySGl0cywgZWRnZUhpdHN9ID0gdGhpcy5fY2hlY2tJbnRlcnNlY3Rpb24yKGZsb29yTWVzaCwgZmxvb3JQYXR0ZXJuLCBnZW9tZXRyeUxlZnQsIGdlb21ldHJ5UmlnaHQpO1xyXG4gICAgZm9yIChjb25zdCBmbG9vckhpdCBvZiBmbG9vckhpdHMpIHtcclxuICAgICAgaWYgKGZsb29ySGl0LmlzTGVmdCkge1xyXG4gICAgICAgIHJlc3VsdC5sZWZ0ICs9IDE7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmVzdWx0LnJpZ2h0ICs9IDE7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJlc3VsdC5lZGdlID0gZWRnZUhpdHMubGVuZ3RoO1xyXG4gICAgcmVzdWx0LnRvdGFsID0gZmxvb3JIaXRzLmxlbmd0aDtcclxuICAgIGlmIChhZGRGaWx0ZXJlZCkgcmVzdWx0LmZpbHRlcmVkID0gZmxvb3JIaXRzO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NoZWNrSW50ZXJzZWN0aW9uMihcclxuICAgIGZsb29yTWVzaDogTWVzaCxcclxuICAgIGZsb29yUGF0dGVybjogQXJyYXk8Rmxvb3JQYXR0ZXJuVHJhbnNmb3JtPixcclxuICAgIGdlb21ldHJ5TGVmdDogQnVmZmVyR2VvbWV0cnksXHJcbiAgICBnZW9tZXRyeVJpZ2h0OiBCdWZmZXJHZW9tZXRyeVxyXG4gICkge1xyXG4gICAgY29uc3QgZWRnZUNvbGxpZGVycyA9IHRoaXMuX2dlbmVyYXRlRWRnZUNvbGxpZGVycyhmbG9vck1lc2guZ2VvbWV0cnkpO1xyXG4gICAgY29uc3QgcmVzdWx0ID0ge1xyXG4gICAgICBmbG9vckhpdHM6IG5ldyBBcnJheTxGbG9vclBhdHRlcm5UcmFuc2Zvcm0+KCksXHJcbiAgICAgIGVkZ2VIaXRzOiBuZXcgQXJyYXk8Rmxvb3JQYXR0ZXJuVHJhbnNmb3JtPigpXHJcbiAgICB9O1xyXG4gICAgY29uc3QgYnZoTGVmdCA9IG5ldyBNZXNoQlZIKGdlb21ldHJ5TGVmdCk7XHJcbiAgICBjb25zdCBidmhSaWdodCA9IChnZW9tZXRyeVJpZ2h0ICE9PSBudWxsKSA/IG5ldyBNZXNoQlZIKGdlb21ldHJ5UmlnaHQpIDogbnVsbDtcclxuICAgIGNvbnN0IHBvc2l0aW9uUmVmZXJlbmNlID0gbmV3IE9iamVjdDNEKCk7XHJcbiAgICBmb3IgKGNvbnN0IGZsb29ySXRlbSBvZiBmbG9vclBhdHRlcm4pIHtcclxuICAgICAgY29uc3QgYnZoID0gKGZsb29ySXRlbS5pc0xlZnQpID8gYnZoTGVmdCA6IGJ2aFJpZ2h0O1xyXG4gICAgICBjb25zdCBwb3MgPSBmbG9vckl0ZW0ucG9zaXRpb247XHJcbiAgICAgIGNvbnN0IHJvdCA9IGZsb29ySXRlbS5yb3RhdGlvbjtcclxuICAgICAgcG9zaXRpb25SZWZlcmVuY2UucG9zaXRpb24uc2V0KHBvcy54LCBwb3MueSwgcG9zLnopO1xyXG4gICAgICBwb3NpdGlvblJlZmVyZW5jZS5yb3RhdGlvbi5zZXQocm90LngsIHJvdC55LCByb3Queik7XHJcbiAgICAgIHBvc2l0aW9uUmVmZXJlbmNlLnVwZGF0ZU1hdHJpeFdvcmxkKCk7XHJcblxyXG4gICAgICBjb25zdCBmbG9vcldvcmxkVG9CaHYgPSBuZXcgTWF0cml4NCgpXHJcbiAgICAgICAgLmNvcHkocG9zaXRpb25SZWZlcmVuY2UubWF0cml4V29ybGQpXHJcbiAgICAgICAgLmludmVydCgpXHJcbiAgICAgICAgLm11bHRpcGx5KGZsb29yTWVzaC5tYXRyaXhXb3JsZCk7XHJcbiAgICAgIGlmICggYnZoLmludGVyc2VjdHNHZW9tZXRyeShmbG9vck1lc2guZ2VvbWV0cnksIGZsb29yV29ybGRUb0JodikpIHtcclxuICAgICAgICByZXN1bHQuZmxvb3JIaXRzLnB1c2goZmxvb3JJdGVtKTtcclxuXHJcbiAgICAgICAgLy8gVE9ETzogZmluZCBzb2x1dGlvbiBmb3IgZWRnZSBkZXRlY3Rpb24sIHRoaXMgc2hvdWxkIHdvcmsgYXMgaXQgdXNlZCB0aGUgc2FtZSBsb2dpYyBhcyBmb3IgdGhlIGZsb29yLlxyXG4gICAgICAgIC8vIGZvciAoY29uc3QgZWRnZUNvbGxpZGVyIG9mIGVkZ2VDb2xsaWRlcnMpIHtcclxuICAgICAgICAvLyAgIGNvbnN0IGVkZ2VXb3JsZFRvQmh2ID0gbmV3IE1hdHJpeDQoKVxyXG4gICAgICAgIC8vICAgICAuY29weShwb3NpdGlvblJlZmVyZW5jZS5tYXRyaXhXb3JsZClcclxuICAgICAgICAvLyAgICAgLmludmVydCgpXHJcbiAgICAgICAgLy8gICAgIC5tdWx0aXBseShlZGdlQ29sbGlkZXIubWF0cml4V29ybGQpO1xyXG4gICAgICAgIC8vICAgaWYgKGJ2aC5pbnRlcnNlY3RzR2VvbWV0cnkoZWRnZUNvbGxpZGVyLmdlb21ldHJ5LCBlZGdlV29ybGRUb0JodikpIHtcclxuICAgICAgICAvLyAgICAgcmVzdWx0LmVkZ2VIaXRzLnB1c2goZmxvb3JJdGVtKTtcclxuICAgICAgICAvLyAgIH1cclxuICAgICAgICAvLyB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZW5lcmF0ZUVkZ2VDb2xsaWRlcnMoZmxvb3JHZW9tOiBCdWZmZXJHZW9tZXRyeSk6IEFycmF5PE1lc2g+IHtcclxuICAgIGNvbnN0IGVkZ2VMaW5lc0dlb20gPSBuZXcgRWRnZXNHZW9tZXRyeShmbG9vckdlb20pO1xyXG4gICAgY29uc3QgbGluZVBvc2l0aW9ucyA9IGVkZ2VMaW5lc0dlb20uZ2V0QXR0cmlidXRlKCdwb3NpdGlvbicpLmFycmF5O1xyXG4gICAgY29uc3QgZWRnZXMgPSBuZXcgQXJyYXk8TWVzaD4oKTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVQb3NpdGlvbnMubGVuZ3RoOyBpICs9IDYpIHtcclxuICAgICAgLy8gc3RvcmUgdmVjdG9yIGEgYW5kIGIgKDEgbGluZSBwYWlyKSwgYmVjYXVzZSB3ZSB3b3JrIGluIDJEIHdlIHNraXAgdGhlIHktYXhpcyB3aGljaCBzaG91bGQgYmUgemVyb1xyXG4gICAgICBjb25zdCB2ZWN0b3JBID0gbmV3IFZlY3RvcjIobGluZVBvc2l0aW9uc1tpXSwgbGluZVBvc2l0aW9uc1tpICsgMl0pO1xyXG4gICAgICBjb25zdCB2ZWN0b3JCID0gbmV3IFZlY3RvcjIobGluZVBvc2l0aW9uc1tpICsgM10sIGxpbmVQb3NpdGlvbnNbaSArIDVdKTtcclxuICAgICAgLy8gY2FsY3VsYXRlIGNlbnRlciBvZiBsaW5lXHJcbiAgICAgIGNvbnN0IHBvc2l0aW9uID0gbmV3IFZlY3RvcjIoKS5sZXJwVmVjdG9ycyh2ZWN0b3JBLCB2ZWN0b3JCLCAuNSk7XHJcbiAgICAgIC8vIGNhbGN1bGF0ZSBsZW5ndGhcclxuICAgICAgY29uc3QgbGVuZ3RoID0gdmVjdG9yQS5kaXN0YW5jZVRvKHZlY3RvckIpO1xyXG4gICAgICAvLyBjcmVhdGUgbm9ybWFsaXNlZCBvcmllbnRhdGlvblxyXG4gICAgICBjb25zdCB1bml0VmVjdG9yID0gbmV3IFZlY3RvcjIoKS5zdWJWZWN0b3JzKHZlY3RvckIsIHZlY3RvckEpLm5vcm1hbGl6ZSgpO1xyXG4gICAgICAvLyByb3RhdGlvbiBpbiByYWRpYW5zXHJcbiAgICAgIGNvbnN0IHJvdGF0aW9uID0gTWF0aC5hdGFuMih1bml0VmVjdG9yLnksIHVuaXRWZWN0b3IueCk7XHJcbiAgICAgIC8vIGNyZWF0ZSBlZGdlIGxpbmUgd2l0aCB2b2x1bWVcclxuICAgICAgY29uc3QgZWRnZUdlb20gPSBuZXcgQm94R2VvbWV0cnkobGVuZ3RoLCAwLjEsIHRoaXMuX2VkZ2VDb2xsaXNpb25NYXJnaW4pO1xyXG4gICAgICBjb25zdCBlZGdlID0gbmV3IE1lc2goZWRnZUdlb20pO1xyXG4gICAgICAvLyBwb3NpdGlvbiBlZGdlXHJcbiAgICAgIGVkZ2Uucm90YXRpb24ueSA9IHJvdGF0aW9uICogLTE7XHJcbiAgICAgIGVkZ2UucG9zaXRpb24ueiA9IHBvc2l0aW9uLnk7XHJcbiAgICAgIGVkZ2UucG9zaXRpb24ueCA9IHBvc2l0aW9uLng7XHJcbiAgICAgIC8vIHVwZGF0ZSBib3VuZGluZyBib3ggdmFsdWUgZm9yIGNvcnJlY3QgY29sbGlzaW9uXHJcbiAgICAgIGVkZ2UudXBkYXRlTWF0cml4V29ybGQoKTtcclxuICAgICAgZWRnZS5nZW9tZXRyeS5jb21wdXRlQm91bmRpbmdCb3goKTtcclxuICAgICAgZWRnZS5nZW9tZXRyeS5ib3VuZGluZ0JveC5hcHBseU1hdHJpeDQoZWRnZS5tYXRyaXhXb3JsZCk7XHJcbiAgICAgIC8vIGFkZHMgbWVzaGVzIHRvIHNjZW5lXHJcblxyXG4gICAgICBlZGdlcy5wdXNoKGVkZ2UpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuX2RlYnVnKSB7XHJcbiAgICAgIGNvbnN0IHNjZW5lID0gdGhpcy5fc2NlbmVTZXJ2aWNlLnNjZW5lO1xyXG4gICAgICBmb3IgKGNvbnN0IGVkZ2Ugb2YgZWRnZXMpIHtcclxuICAgICAgICBlZGdlLm1hdGVyaWFsID0gdGhpcy5fcmFuZG9tQ29sTWF0KCk7XHJcbiAgICAgICAgc2NlbmUuYWRkKGVkZ2UpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGVkZ2VzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmFuZG9tQ29sTWF0KCkge1xyXG4gICAgY29uc3QgY29sb3IgPSBuZXcgQ29sb3IoTWF0aC5yYW5kb20oKSwgTWF0aC5yYW5kb20oKSwgTWF0aC5yYW5kb20oKSk7XHJcbiAgICByZXR1cm4gbmV3IE1lc2hCYXNpY01hdGVyaWFsKHsgY29sb3I6IGNvbG9yLCB3aXJlZnJhbWU6IGZhbHNlICwgc2lkZTogRG91YmxlU2lkZSB9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -15,17 +15,20 @@ import { ThreeMesh } from '../items/three-mesh';
|
|
|
15
15
|
import { isNill } from '../../../core/utils/function/is-nill.function';
|
|
16
16
|
import { FloorPlaneItem } from '../items/floor-plane-item';
|
|
17
17
|
import { ItemType } from '../items/item-type';
|
|
18
|
+
import { MessageType } from '../../../core/enum/message-type.enum';
|
|
18
19
|
import * as i0 from "@angular/core";
|
|
19
20
|
import * as i1 from "./scene.service";
|
|
20
21
|
import * as i2 from "./outline.service";
|
|
21
22
|
import * as i3 from "./item.service";
|
|
22
23
|
import * as i4 from "../../../core/service/homedecorator-settings.service";
|
|
24
|
+
import * as i5 from "../../../core/service/message-bus.service";
|
|
23
25
|
export class FloorService {
|
|
24
|
-
constructor(_sceneService, _outlineService, _itemService, _settingsService) {
|
|
26
|
+
constructor(_sceneService, _outlineService, _itemService, _settingsService, _messageService) {
|
|
25
27
|
this._sceneService = _sceneService;
|
|
26
28
|
this._outlineService = _outlineService;
|
|
27
29
|
this._itemService = _itemService;
|
|
28
30
|
this._settingsService = _settingsService;
|
|
31
|
+
this._messageService = _messageService;
|
|
29
32
|
this._floors = [];
|
|
30
33
|
this._subs = [];
|
|
31
34
|
this._subs.push(this._sceneService.sceneInitialized.subscribe((initialized) => {
|
|
@@ -70,6 +73,8 @@ export class FloorService {
|
|
|
70
73
|
else {
|
|
71
74
|
this._updateFloorMaterial(this._floors[0], floorMaterial, texture);
|
|
72
75
|
}
|
|
76
|
+
// emit new texture for appearance-section
|
|
77
|
+
this._messageService.emit(MessageType.ChangeTexture, texture);
|
|
73
78
|
// room.floorColor = null;
|
|
74
79
|
});
|
|
75
80
|
}
|
|
@@ -221,12 +226,12 @@ export class FloorService {
|
|
|
221
226
|
return floorCenter;
|
|
222
227
|
}
|
|
223
228
|
}
|
|
224
|
-
FloorService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FloorService, deps: [{ token: i1.SceneService }, { token: i2.OutlineService }, { token: i3.ItemService }, { token: i4.HomedecoratorSettingsService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
229
|
+
FloorService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FloorService, deps: [{ token: i1.SceneService }, { token: i2.OutlineService }, { token: i3.ItemService }, { token: i4.HomedecoratorSettingsService }, { token: i5.MessageBusService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
225
230
|
FloorService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FloorService, providedIn: 'root' });
|
|
226
231
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FloorService, decorators: [{
|
|
227
232
|
type: Injectable,
|
|
228
233
|
args: [{
|
|
229
234
|
providedIn: 'root'
|
|
230
235
|
}]
|
|
231
|
-
}], ctorParameters: function () { return [{ type: i1.SceneService }, { type: i2.OutlineService }, { type: i3.ItemService }, { type: i4.HomedecoratorSettingsService }]; } });
|
|
232
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvb3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jbGllbnQvYXBwL3BsdWdpbnMvY29yZTNkL3NlcnZpY2UvZmxvb3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sRUFDTCxjQUFjLEVBQ2QsS0FBSyxFQUNMLFVBQVUsRUFFVixJQUFJLEVBQ0osaUJBQWlCLEVBQ2pCLG9CQUFvQixFQUNwQixJQUFJLEVBQ0osYUFBYSxFQUNiLEtBQUssRUFDTCxhQUFhLEVBQ2IsT0FBTyxFQUNQLE9BQU8sRUFDUixNQUFNLE9BQU8sQ0FBQztBQUdmLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFHcEMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBQ2pFLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUM5QyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sK0NBQStDLENBQUM7QUFHckUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7O0FBTzVDLE1BQU0sT0FBTyxZQUFZO0lBb0J2QixZQUNZLGFBQTJCLEVBQzNCLGVBQStCLEVBQy9CLFlBQXlCLEVBQzNCLGdCQUE4QztRQUg1QyxrQkFBYSxHQUFiLGFBQWEsQ0FBYztRQUMzQixvQkFBZSxHQUFmLGVBQWUsQ0FBZ0I7UUFDL0IsaUJBQVksR0FBWixZQUFZLENBQWE7UUFDM0IscUJBQWdCLEdBQWhCLGdCQUFnQixDQUE4QjtRQW5CaEQsWUFBTyxHQUFxQixFQUFFLENBQUM7UUFDL0IsVUFBSyxHQUFtQixFQUFFLENBQUM7UUFvQmpDLElBQUksQ0FBQyxLQUFL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QUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzdFLGFBQWEsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzdFLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtvQkFDbEIsYUFBYSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7b0JBQ2pDLGFBQWEsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO2lCQUMzQjthQUNGO1lBQ0QsYUFBYSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDakMsT0FBTyxhQUFhLENBQUM7UUFDdkIsQ0FBQztLQUFBO0lBRU8sZUFBZSxDQUFDLE9BQWlCO1FBQ3ZDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FDbEMsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNsQyxNQUFNLFFBQVEsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1RCxRQUFRLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUM5QixRQUFRLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM1QyxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDOzswR0FwT1UsWUFBWTs4R0FBWixZQUFZLGNBRlgsTUFBTTs0RkFFUCxZQUFZO2tCQUh4QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZSwgT25EZXN0cm95fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBCdWZmZXJHZW9tZXRyeSxcclxuICBDb2xvcixcclxuICBEb3VibGVTaWRlLFxyXG4gIE1hdGVyaWFsLFxyXG4gIE1lc2gsXHJcbiAgTWVzaEJhc2ljTWF0ZXJpYWwsXHJcbiAgTWVzaFN0YW5kYXJkTWF0ZXJpYWwsXHJcbiAgUGF0aCxcclxuICBQbGFuZUdlb21ldHJ5LFxyXG4gIFNoYXBlLFxyXG4gIFNoYXBlR2VvbWV0cnksXHJcbiAgVmVjdG9yMixcclxuICBWZWN0b3IzXHJcbn0gZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7U2NlbmVTZXJ2aWNlfSBmcm9tICcuL3NjZW5lLnNlcnZpY2UnO1xyXG5pbXBvcnQge1V0aWxzfSBmcm9tICcuLi9jb3JlL3V0aWxzJztcclxuaW1wb3J0IHtDb3JuZXIsIFJvb219IGZyb20gJy4uL2l0ZW1zL3dhbGwtb2JqZWN0cyc7XHJcbmltcG9ydCB7VGV4dHVyZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbC90ZXh0dXJlJztcclxuaW1wb3J0IHtNYXRlcmlhbFV0aWxzfSBmcm9tICcuLi8uLi8uLi9jb3JlL3V0aWxzL21hdGVyaWFsLnV0aWxzJztcclxuaW1wb3J0IHtUaHJlZU1lc2h9IGZyb20gJy4uL2l0ZW1zL3RocmVlLW1lc2gnO1xyXG5pbXBvcnQge2lzTmlsbH0gZnJvbSAnLi4vLi4vLi4vY29yZS91dGlscy9mdW5jdGlvbi9pcy1uaWxsLmZ1bmN0aW9uJztcclxuaW1wb3J0IHtPdXRsaW5lU2VydmljZX0gZnJvbSAnLi9vdXRsaW5lLnNlcnZpY2UnO1xyXG5pbXBvcnQge0l0ZW1TZXJ2aWNlfSBmcm9tICcuL2l0ZW0uc2VydmljZSc7XHJcbmltcG9ydCB7Rmxvb3JQbGFuZUl0ZW19IGZyb20gJy4uL2l0ZW1zL2Zsb29yLXBsYW5lLWl0ZW0nO1xyXG5pbXBvcnQge0l0ZW1UeXBlfSBmcm9tICcuLi9pdGVtcy9pdGVtLXR5cGUnO1xyXG5pbXBvcnQge1JlZmxlY3Rvcn0gZnJvbSAndGhyZWUvZXhhbXBsZXMvanNtL29iamVjdHMvUmVmbGVjdG9yJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yU2V0dGluZ3NTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1zZXR0aW5ncy5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEZsb29yU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcblxyXG4gIHByaXZhdGUgX2dyb3VuZFBsYW5lOiBNZXNoO1xyXG4gIHByaXZhdGUgX2Zsb29yUGxhbmU6IEZsb29yUGxhbmVJdGVtO1xyXG5cclxuICBwcml2YXRlIF9mbG9vcnM6IEZsb29yUGxhbmVJdGVtW10gPSBbXTtcclxuICBwcml2YXRlIF9zdWJzOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG5cclxuICBwcml2YXRlIF9taXJyb3JQbGFuZTogUmVmbGVjdG9yO1xyXG5cclxuICBwdWJsaWMgZ2V0IGdyb3VuZFBsYW5lKCk6IE1lc2gge1xyXG4gICAgcmV0dXJuIHRoaXMuX2dyb3VuZFBsYW5lO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBncm91bmRQbGFuZShtZXNoOiBNZXNoKSB7XHJcbiAgICB0aGlzLl9ncm91bmRQbGFuZSA9IG1lc2g7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZmxvb3JUb0NvbmZpZ3VyZTogRmxvb3JQbGFuZUl0ZW07XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgICBwcml2YXRlIF9zY2VuZVNlcnZpY2U6IFNjZW5lU2VydmljZSxcclxuICAgICAgcHJpdmF0ZSBfb3V0bGluZVNlcnZpY2U6IE91dGxpbmVTZXJ2aWNlLFxyXG4gICAgICBwcml2YXRlIF9pdGVtU2VydmljZTogSXRlbVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zZXR0aW5nc1NlcnZpY2U6IEhvbWVkZWNvcmF0b3JTZXR0aW5nc1NlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMuX3N1YnMucHVzaChcclxuICAgICAgdGhpcy5fc2NlbmVTZXJ2aWNlLnNjZW5lSW5pdGlhbGl6ZWQuc3Vic2NyaWJlKChpbml0aWFsaXplZDogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgIGlmIChpbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgdGhpcy5fY3JlYXRlR3JvdW5kUGxhbmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgd2luZG93Lm9uYmVmb3JldW5sb2FkID0gKCkgPT4gdGhpcy5uZ09uRGVzdHJveSgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWJzLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xyXG4gICAgVXRpbHMuRGlzcG9zZU9iamVjdCh0aGlzLl9ncm91bmRQbGFuZSk7XHJcbiAgICB0aGlzLl9mbG9vcnMuZm9yRWFjaChmID0+IFV0aWxzLkRpc3Bvc2VPYmplY3QoZikpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEZsb29yUGxhbmUoKTogRmxvb3JQbGFuZUl0ZW0ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Zsb29yUGxhbmU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc2V0Rmxvb3JUZXh0dXJlKHJvb206IFJvb20sIHRleHR1cmU6IFRleHR1cmUpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCBmbG9vclBsYW5lOiBGbG9vclBsYW5lSXRlbTtcclxuICAgIGlmIChyb29tKSB7XHJcbiAgICAgIGZsb29yUGxhbmUgPSByb29tLmZsb29yUGxhbmU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmbG9vclBsYW5lID0gdGhpcy5fZmxvb3JzWzBdO1xyXG4gICAgfVxyXG4gICAgZmxvb3JQbGFuZS5yZXNldEdlb21ldHJ5KCk7XHJcbiAgICBpZiAodGV4dHVyZSAmJiB0ZXh0dXJlLnNpbXBsZVBsYW5lKSB7XHJcbiAgICAgIGZsb29yUGxhbmUudXBkYXRlR2VvbWV0cnkobmV3IFBsYW5lR2VvbWV0cnkoNiwgNikpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZmxvb3JNYXRlcmlhbCA9IGF3YWl0IHRoaXMuX2NyZWF0ZUZsb29yTWF0ZXJpYWwobnVsbCwgdGV4dHVyZSk7XHJcbiAgICBpZiAocm9vbSkge1xyXG4gICAgICB0aGlzLl91cGRhdGVGbG9vck1hdGVyaWFsKHJvb20uZmxvb3JQbGFuZSwgZmxvb3JNYXRlcmlhbCwgdGV4dHVyZSk7XHJcbiAgICAgIHJvb20uZmxvb3JUZXh0dXJlID0gdGV4dHVyZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX3VwZGF0ZUZsb29yTWF0ZXJpYWwodGhpcy5fZmxvb3JzWzBdLCBmbG9vck1hdGVyaWFsLCB0ZXh0dXJlKTtcclxuICAgIH1cclxuICAgIC8vIHJvb20uZmxvb3JDb2xvciA9IG51bGw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc2V0Rmxvb3JDb2xvcihyb29tOiBSb29tLCBjb2xvcjogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAvLyBjb25zdCBmbG9vclBsYW5lID0gdGhpcy5nZW5lcmF0ZUZsb29yUGxhbmUoY29sb3IsIG51bGwsIHJvb20uY29ybmVycyk7XHJcbiAgICAvLyBmbG9vclBsYW5lLnVzZXJEYXRhID0ge3Jvb206IHJvb219O1xyXG4gICAgLy8gdGhpcy5yZW1vdmVGbG9vcihyb29tLmZsb29yUGxhbmUsIGZhbHNlKTtcclxuICAgIC8vIHJvb20uZmxvb3JQbGFuZSA9IGZsb29yUGxhbmU7XHJcbiAgICBjb25zdCBmbG9vck1hdGVyaWFsID0gYXdhaXQgdGhpcy5fY3JlYXRlRmxvb3JNYXRlcmlhbChjb2xvciwgbnVsbCk7XHJcbiAgICB0aGlzLl91cGRhdGVGbG9vck1hdGVyaWFsKHJvb20uZmxvb3JQbGFuZSwgZmxvb3JNYXRlcmlhbCk7XHJcbiAgICByb29tLmZsb29yVGV4dHVyZSA9IG51bGw7XHJcbiAgICByb29tLmZsb29yQ29sb3IgPSBjb2xvcjtcclxuICAgIHRoaXMuX3NjZW5lU2VydmljZS5uZWVkc1JlbmRlciA9IHRydWU7XHJcbiAgICB0aGlzLl9zY2VuZVNlcnZpY2UudXBkYXRlUGF0aFRyYWNlcigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhpZ2hMaWdodEZsb29yKGZsb29yT2JqZWN0OiBGbG9vclBsYW5lSXRlbSk6IHZvaWQge1xyXG4gICAgaWYgKGZsb29yT2JqZWN0ICYmIGZsb29yT2JqZWN0LnV1aWQpIHtcclxuICAgICAgY29uc3QgY3VycmVudEZsb29yOiBGbG9vclBsYW5lSXRlbSA9IHRoaXMuX2Zsb29ycy5maW5kKGYgPT4gZi51dWlkID09PSBmbG9vck9iamVjdC51dWlkKTtcclxuICAgICAgaWYgKGN1cnJlbnRGbG9vcikge1xyXG4gICAgICAgIHRoaXMuX291dGxpbmVTZXJ2aWNlLnNob3dPdXRsaW5lKGN1cnJlbnRGbG9vcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyB1bkhpZ2hMaWdodEZsb29ycygpOiB2b2lkIHtcclxuICAgIHRoaXMuX291dGxpbmVTZXJ2aWNlLmhpZGVPdXRsaW5lKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29uZmlndXJlRmxvb3IoZmxvb3JPYmplY3Q6IEZsb29yUGxhbmVJdGVtKTogdm9pZCB7XHJcbiAgICB0aGlzLmZsb29yVG9Db25maWd1cmUgPSBmbG9vck9iamVjdDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW1vdmVGbG9vcnMoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9mbG9vcnMuZm9yRWFjaChmbG9vciA9PiB7XHJcbiAgICAgIHRoaXMuX3NjZW5lU2VydmljZS5yZW1vdmVPYmplY3QoZmxvb3IpO1xyXG4gICAgICB0aGlzLl9pdGVtU2VydmljZS5yZW1vdmVJdGVtKGZsb29yKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fZmxvb3JzLmxlbmd0aCA9IDA7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2VuZXJhdGVGbG9vclBsYW5lKFxyXG4gICAgY29sb3I6IENvbG9yIHwgc3RyaW5nIHwgbnVtYmVyLCB0ZXh0dXJlPzogVGV4dHVyZSwgY29ybmVycz86IENvcm5lcltdLCBuZXN0ZWRSb29tcz86IGFueSwgZmxvb3JHZW9tZXRyeT86IEJ1ZmZlckdlb21ldHJ5KTogUHJvbWlzZTxGbG9vclBsYW5lSXRlbT4ge1xyXG4gICAgbGV0IGdlb21ldHJ5LCBzaGFwZTtcclxuICAgIGlmIChjb3JuZXJzKSB7XHJcbiAgICAgIGNvbnN0IHBvaW50cyA9IGNvcm5lcnMubWFwKGNvcm5lciA9PlxyXG4gICAgICAgIG5ldyBWZWN0b3IyKGNvcm5lci54LCBjb3JuZXIueSkpO1xyXG4gICAgICBzaGFwZSA9IG5ldyBTaGFwZShwb2ludHMpO1xyXG5cclxuICAgICAgLy8gY3JlYXRlIGhvbGVzIGZvciBuZXN0ZWQgcm9vbXNcclxuICAgICAgaWYgKG5lc3RlZFJvb21zKSB7XHJcbiAgICAgICAgbmVzdGVkUm9vbXNcclxuICAgICAgICAgIC5tYXAoKG5lc3RlZFJvb20pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIG5lc3RlZFJvb20uaW50ZXJpb3JDb3JuZXJzLm1hcChjb3JuZXIgPT5cclxuICAgICAgICAgICAgICBuZXcgVmVjdG9yMihjb3JuZXIueCwgY29ybmVyLnkpKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuZmlsdGVyKG5lc3RlZFJvb20gPT4gVXRpbHMucG9seWdvbkluc2lkZVBvbHlnb24obmVzdGVkUm9vbSwgcG9pbnRzKSlcclxuICAgICAgICAgIC5maWx0ZXIoKG5lc3RlZFJvb20sIGluZGV4LCBhcnJheSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gYXJyYXlcclxuICAgICAgICAgICAgICAuc2xpY2UoaW5kZXggKyAxKVxyXG4gICAgICAgICAgICAgIC5ldmVyeShsYXJnZXJOZXN0ZWRSb29tID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAhVXRpbHMucG9seWdvbkluc2lkZVBvbHlnb24obmVzdGVkUm9vbSwgbGFyZ2VyTmVzdGVkUm9vbSk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmZvckVhY2goaG9sZVBvaW50ID0+IHNoYXBlLmhvbGVzLnB1c2gobmV3IFBhdGgoaG9sZVBvaW50KSkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoZmxvb3JHZW9tZXRyeSkge1xyXG4gICAgICBnZW9tZXRyeSA9IGZsb29yR2VvbWV0cnk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBnZW9tZXRyeSA9IG5ldyBTaGFwZUdlb21ldHJ5KHNoYXBlKS5jZW50ZXIoKTtcclxuICAgIH1cclxuICAgIHRoaXMuX3NjZW5lU2VydmljZS5uZWVkc1JlbmRlciA9IHRydWU7XHJcbiAgICAvLyBmbG9vck1hdGVyaWFsLm1ldGFsbmVzcyA9IDA7XHJcbiAgICBnZW9tZXRyeS5yb3RhdGVYKE1hdGguUEkgLyAyKTtcclxuXHJcbiAgICBjb25zdCBmbG9vck1hdGVyaWFsID0gYXdhaXQgdGhpcy5fY3JlYXRlRmxvb3JNYXRlcmlhbChjb2xvciwgdGV4dHVyZSk7XHJcblxyXG4gICAgY29uc3QgZmxvb3JNZXNoOiBNZXNoID0gbmV3IFRocmVlTWVzaChnZW9tZXRyeSwgZmxvb3JNYXRlcmlhbCk7XHJcbiAgICBjb25zdCBmbG9vclBsYW5lOiBGbG9vclBsYW5lSXRlbSA9IG5ldyBGbG9vclBsYW5lSXRlbSh7aXRlbVR5cGU6IEl0ZW1UeXBlLkZsb29yRGVjb3JhdGlvbn0sIGZsb29yTWVzaCk7XHJcbiAgICBmbG9vclBsYW5lLm5hbWUgPSAnZmxvb3ItcGxhbmUnO1xyXG4gICAgLy8gZmxvb3JQbGFuZS5yb3RhdGlvbi5zZXQoTWF0aC5QSSAvIDIsIDAsIDApO1xyXG4gICAgZmxvb3JQbGFuZS5yZWNlaXZlU2hhZG93ID0gdHJ1ZTtcclxuICAgIGZsb29yUGxhbmUuY2FzdFNoYWRvdyA9IGZhbHNlO1xyXG4gICAgY29uc3QgZmxvb3JDZW50ZXIgPSBjb3JuZXJzID8gdGhpcy5fZ2V0Rmxvb3JDZW50ZXIoY29ybmVycykgOiBuZXcgVmVjdG9yMygwLCAwLCAwKTtcclxuICAgIGZsb29yUGxhbmUucG9zaXRpb24uc2V0KGZsb29yQ2VudGVyLngsIDAuMDAwMSwgZmxvb3JDZW50ZXIueik7XHJcbiAgICB0aGlzLl9hZGRGbG9vcihmbG9vclBsYW5lLCBmYWxzZSk7XHJcbiAgICB0aGlzLl9mbG9vclBsYW5lID0gZmxvb3JQbGFuZTtcclxuICAgIHRoaXMuX3NjZW5lU2VydmljZS5uZWVkc1JlbmRlciA9IHRydWU7XHJcbiAgICByZXR1cm4gZmxvb3JQbGFuZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRGbG9vclkoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9ncm91bmRQbGFuZS5wb3NpdGlvbi55O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbW92ZUZsb29yKGZsb29yOiBGbG9vclBsYW5lSXRlbSwgZm9yY2VSZW5kZXI6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XHJcbiAgICB0aGlzLl9mbG9vcnMuc3BsaWNlKHRoaXMuX2Zsb29ycy5pbmRleE9mKGZsb29yKSwgMSk7XHJcbiAgICB0aGlzLl9zY2VuZVNlcnZpY2UucmVtb3ZlT2JqZWN0KGZsb29yLCBmb3JjZVJlbmRlcik7XHJcbiAgICB0aGlzLl9pdGVtU2VydmljZS5yZW1vdmVJdGVtKGZsb29yKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2FkZEZsb29yKGZsb29yOiBGbG9vclBsYW5lSXRlbSwgZm9yY2VSZW5kZXI6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XHJcbiAgICB0aGlzLl9mbG9vcnMucHVzaChmbG9vcik7XHJcbiAgICB0aGlzLl9zY2VuZVNlcnZpY2UuYWRkT2JqZWN0KGZsb29yLCBmb3JjZVJlbmRlcik7XHJcbiAgICB0aGlzLl9pdGVtU2VydmljZS5hZGRJdGVtKGZsb29yLCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cGRhdGVGbG9vck1hdGVyaWFsKGZsb29yOiBGbG9vclBsYW5lSXRlbSwgZmxvb3JNYXRlcmlhbDogTWF0ZXJpYWwsIHRleHR1cmU/OiBUZXh0dXJlKTogdm9pZCB7XHJcbiAgICBVdGlscy5EaXNwb3NlTWF0ZXJpYWwoZmxvb3IuZ2V0TWF0ZXJpYWwoKSk7XHJcbiAgICBmbG9vci5mbG9vck1hdGVyaWFsID0gZmxvb3JNYXRlcmlhbDtcclxuICAgIHRoaXMuX3NjZW5lU2VydmljZS5uZWVkc1JlbmRlciA9IHRydWU7XHJcbiAgICB0aGlzLl9zY2VuZVNlcnZpY2UudXBkYXRlUGF0aFRyYWNlcigpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY3JlYXRlR3JvdW5kUGxhbmUoKTogdm9pZCB7XHJcbiAgICAvLyBncm91bmQgcGxhbmUgdXNlZCB0byBmaW5kIGludGVyc2VjdGlvbnNcclxuICAgIGNvbnN0IHNpemUgPSAxMDAwO1xyXG4gICAgdGhpcy5fZ3JvdW5kUGxhbmUgPSBuZXcgTWVzaChcclxuICAgICAgbmV3IFBsYW5lR2VvbWV0cnkoc2l6ZSwgc2l6ZSksXHJcbiAgICAgIG5ldyBNZXNoQmFzaWNNYXRlcmlhbCh7dmlzaWJsZTogZmFsc2UsIHRyYW5zcGFyZW50OiB0cnVlLCBvcGFjaXR5OiAwfSkpO1xyXG4gICAgdGhpcy5fZ3JvdW5kUGxhbmUucm90YXRpb24ueCA9IC1NYXRoLlBJIC8gMjtcclxuICAgIHRoaXMuX2dyb3VuZFBsYW5lLm5hbWUgPSAnZ3JvdW5kLXBsYW5lJztcclxuICAgIHRoaXMuX3NjZW5lU2VydmljZS5hZGRPYmplY3QodGhpcy5fZ3JvdW5kUGxhbmUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfY3JlYXRlRmxvb3JNYXRlcmlhbChjb2xvcjogQ29sb3IgfCBzdHJpbmcgfCBudW1iZXIsIHRleHR1cmU/OiBUZXh0dXJlKTogUHJvbWlzZTxNZXNoU3RhbmRhcmRNYXRlcmlhbD4ge1xyXG4gICAgY29uc3Qgb3B0aW9uczogYW55ID0ge1xyXG4gICAgICBzaWRlOiBEb3VibGVTaWRlXHJcbiAgICB9O1xyXG4gICAgaWYgKGNvbG9yKSB7XHJcbiAgICAgIG9wdGlvbnMuY29sb3IgPSBjb2xvcjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBmbG9vck1hdGVyaWFsID0gbmV3IE1lc2hTdGFuZGFyZE1hdGVyaWFsKG9wdGlvbnMpOyAvLyBUT0RPOiBUeXBlIG9mIG1hdGVyaWFsIHNob3VsZCBiZSBiYXNlZCBvbiBhdmFpbGFibGUgbWFwc1xyXG4gICAgZmxvb3JNYXRlcmlhbC5wb2x5Z29uT2Zmc2V0ID0gdHJ1ZTtcclxuICAgIGZsb29yTWF0ZXJpYWwucG9seWdvbk9mZnNldEZhY3RvciA9IDAuNTtcclxuICAgIGZsb29yTWF0ZXJpYWwubmFtZSA9ICdkZWZhdWx0X2Zsb29ybWF0ZXJpYWwnO1xyXG4gICAgaWYgKHRleHR1cmUpIHtcclxuICAgICAgYXdhaXQgTWF0ZXJpYWxVdGlscy5HZXRNYXRlcmlhbE1hcHMoZmxvb3JNYXRlcmlhbCwgdGV4dHVyZSk7XHJcbiAgICAgIC8vIFJvdWdobmVzcyB2YWx1ZSBpcyBzZXQgdG8gMC44IGlmIG5vIHZhbHVlIGlzIGRlZmluZWQsIHRoaXMgcHJldmVudHMgaGlnaGx5IHJlZmxlY3RpdmUgZmxvb3JzXHJcbiAgICAgIGlmICh0ZXh0dXJlLmNvbG9yKSB7XHJcbiAgICAgICAgZmxvb3JNYXRlcmlhbC5jb2xvciA9IG5ldyBDb2xvcihwYXJzZUludCh0ZXh0dXJlLmNvbG9yLCAwKSk7XHJcbiAgICAgIH1cclxuICAgICAgZmxvb3JNYXRlcmlhbC5yb3VnaG5lc3MgPSAhaXNOaWxsKHRleHR1cmUucm91Z2huZXNzKSA/IHRleHR1cmUucm91Z2huZXNzIDogMC44O1xyXG4gICAgICBmbG9vck1hdGVyaWFsLm1ldGFsbmVzcyA9ICFpc05pbGwodGV4dHVyZS5tZXRhbG5lc3MpID8gdGV4dHVyZS5tZXRhbG5lc3MgOiAwO1xyXG4gICAgICBmbG9vck1hdGVyaWFsLmJ1bXBTY2FsZSA9ICFpc05pbGwodGV4dHVyZS5idW1wU2NhbGUpID8gdGV4dHVyZS5idW1wU2NhbGUgOiAxO1xyXG4gICAgICBpZiAodGV4dHVyZS5taXJyb3IpIHtcclxuICAgICAgICBmbG9vck1hdGVyaWFsLnRyYW5zcGFyZW50ID0gdHJ1ZTtcclxuICAgICAgICBmbG9vck1hdGVyaWFsLm9wYWNpdHkgPSAxO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBmbG9vck1hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgIHJldHVybiBmbG9vck1hdGVyaWFsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0Rmxvb3JDZW50ZXIoY29ybmVyczogQ29ybmVyW10pOiBWZWN0b3IzIHtcclxuICAgIGNvbnN0IHBvaW50cyA9IGNvcm5lcnMubWFwKGNvcm5lciA9PlxyXG4gICAgICBuZXcgVmVjdG9yMyhjb3JuZXIueCwgMCwgY29ybmVyLnkpKTtcclxuICAgIGNvbnN0IGZsb29yQ2VudGVyID0gbmV3IFZlY3RvcjMoKTtcclxuICAgIGNvbnN0IGZsb29yR2VvID0gbmV3IEJ1ZmZlckdlb21ldHJ5KCkuc2V0RnJvbVBvaW50cyhwb2ludHMpO1xyXG4gICAgZmxvb3JHZW8uY29tcHV0ZUJvdW5kaW5nQm94KCk7XHJcbiAgICBmbG9vckdlby5ib3VuZGluZ0JveC5nZXRDZW50ZXIoZmxvb3JDZW50ZXIpO1xyXG4gICAgcmV0dXJuIGZsb29yQ2VudGVyO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
236
|
+
}], ctorParameters: function () { return [{ type: i1.SceneService }, { type: i2.OutlineService }, { type: i3.ItemService }, { type: i4.HomedecoratorSettingsService }, { type: i5.MessageBusService }]; } });
|
|
237
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvb3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jbGllbnQvYXBwL3BsdWdpbnMvY29yZTNkL3NlcnZpY2UvZmxvb3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sRUFDTCxjQUFjLEVBQ2QsS0FBSyxFQUNMLFVBQVUsRUFFVixJQUFJLEVBQ0osaUJBQWlCLEVBQ2pCLG9CQUFvQixFQUNwQixJQUFJLEVBQ0osYUFBYSxFQUNiLEtBQUssRUFDTCxhQUFhLEVBQ2IsT0FBTyxFQUNQLE9BQU8sRUFDUixNQUFNLE9BQU8sQ0FBQztBQUdmLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFHcEMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBQ2pFLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUM5QyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sK0NBQStDLENBQUM7QUFHckUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUk1QyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7QUFLakUsTUFBTSxPQUFPLFlBQVk7SUFvQnZCLFlBQ1UsYUFBMkIsRUFDM0IsZUFBK0IsRUFDL0IsWUFBeUIsRUFDekIsZ0JBQThDLEVBQzlDLGVBQWtDO1FBSmxDLGtCQUFhLEdBQWIsYUFBYSxDQUFjO1FBQzNCLG9CQUFlLEdBQWYsZUFBZSxDQUFnQjtRQUMvQixpQkFBWSxHQUFaLFlBQVksQ0FBYTtRQUN6QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQThCO1FBQzlDLG9CQUFlLEdBQWYsZUFB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QUFDOzswR0F2T1UsWUFBWTs4R0FBWixZQUFZLGNBRlgsTUFBTTs0RkFFUCxZQUFZO2tCQUh4QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZSwgT25EZXN0cm95fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBCdWZmZXJHZW9tZXRyeSxcclxuICBDb2xvcixcclxuICBEb3VibGVTaWRlLFxyXG4gIE1hdGVyaWFsLFxyXG4gIE1lc2gsXHJcbiAgTWVzaEJhc2ljTWF0ZXJpYWwsXHJcbiAgTWVzaFN0YW5kYXJkTWF0ZXJpYWwsXHJcbiAgUGF0aCxcclxuICBQbGFuZUdlb21ldHJ5LFxyXG4gIFNoYXBlLFxyXG4gIFNoYXBlR2VvbWV0cnksXHJcbiAgVmVjdG9yMixcclxuICBWZWN0b3IzXHJcbn0gZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7U2NlbmVTZXJ2aWNlfSBmcm9tICcuL3NjZW5lLnNlcnZpY2UnO1xyXG5pbXBvcnQge1V0aWxzfSBmcm9tICcuLi9jb3JlL3V0aWxzJztcclxuaW1wb3J0IHtDb3JuZXIsIFJvb219IGZyb20gJy4uL2l0ZW1zL3dhbGwtb2JqZWN0cyc7XHJcbmltcG9ydCB7VGV4dHVyZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbC90ZXh0dXJlJztcclxuaW1wb3J0IHtNYXRlcmlhbFV0aWxzfSBmcm9tICcuLi8uLi8uLi9jb3JlL3V0aWxzL21hdGVyaWFsLnV0aWxzJztcclxuaW1wb3J0IHtUaHJlZU1lc2h9IGZyb20gJy4uL2l0ZW1zL3RocmVlLW1lc2gnO1xyXG5pbXBvcnQge2lzTmlsbH0gZnJvbSAnLi4vLi4vLi4vY29yZS91dGlscy9mdW5jdGlvbi9pcy1uaWxsLmZ1bmN0aW9uJztcclxuaW1wb3J0IHtPdXRsaW5lU2VydmljZX0gZnJvbSAnLi9vdXRsaW5lLnNlcnZpY2UnO1xyXG5pbXBvcnQge0l0ZW1TZXJ2aWNlfSBmcm9tICcuL2l0ZW0uc2VydmljZSc7XHJcbmltcG9ydCB7Rmxvb3JQbGFuZUl0ZW19IGZyb20gJy4uL2l0ZW1zL2Zsb29yLXBsYW5lLWl0ZW0nO1xyXG5pbXBvcnQge0l0ZW1UeXBlfSBmcm9tICcuLi9pdGVtcy9pdGVtLXR5cGUnO1xyXG5pbXBvcnQge1JlZmxlY3Rvcn0gZnJvbSAndGhyZWUvZXhhbXBsZXMvanNtL29iamVjdHMvUmVmbGVjdG9yJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yU2V0dGluZ3NTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1zZXR0aW5ncy5zZXJ2aWNlJztcclxuaW1wb3J0IHtNZXNzYWdlQnVzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL21lc3NhZ2UtYnVzLnNlcnZpY2UnO1xyXG5pbXBvcnQge01lc3NhZ2VUeXBlfSBmcm9tICcuLi8uLi8uLi9jb3JlL2VudW0vbWVzc2FnZS10eXBlLmVudW0nO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRmxvb3JTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuXHJcbiAgcHJpdmF0ZSBfZ3JvdW5kUGxhbmU6IE1lc2g7XHJcbiAgcHJpdmF0ZSBfZmxvb3JQbGFuZTogRmxvb3JQbGFuZUl0ZW07XHJcblxyXG4gIHByaXZhdGUgX2Zsb29yczogRmxvb3JQbGFuZUl0ZW1bXSA9IFtdO1xyXG4gIHByaXZhdGUgX3N1YnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcblxyXG4gIHByaXZhdGUgX21pcnJvclBsYW5lOiBSZWZsZWN0b3I7XHJcblxyXG4gIHB1YmxpYyBnZXQgZ3JvdW5kUGxhbmUoKTogTWVzaCB7XHJcbiAgICByZXR1cm4gdGhpcy5fZ3JvdW5kUGxhbmU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGdyb3VuZFBsYW5lKG1lc2g6IE1lc2gpIHtcclxuICAgIHRoaXMuX2dyb3VuZFBsYW5lID0gbWVzaDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmbG9vclRvQ29uZmlndXJlOiBGbG9vclBsYW5lSXRlbTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9zY2VuZVNlcnZpY2U6IFNjZW5lU2VydmljZSxcclxuICAgIHByaXZhdGUgX291dGxpbmVTZXJ2aWNlOiBPdXRsaW5lU2VydmljZSxcclxuICAgIHByaXZhdGUgX2l0ZW1TZXJ2aWNlOiBJdGVtU2VydmljZSxcclxuICAgIHByaXZhdGUgX3NldHRpbmdzU2VydmljZTogSG9tZWRlY29yYXRvclNldHRpbmdzU2VydmljZSxcclxuICAgIHByaXZhdGUgX21lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlQnVzU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5fc3Vicy5wdXNoKFxyXG4gICAgICB0aGlzLl9zY2VuZVNlcnZpY2Uuc2NlbmVJbml0aWFsaXplZC5zdWJzY3JpYmUoKGluaXRpYWxpemVkOiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgaWYgKGluaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICB0aGlzLl9jcmVhdGVHcm91bmRQbGFuZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgICB3aW5kb3cub25iZWZvcmV1bmxvYWQgPSAoKSA9PiB0aGlzLm5nT25EZXN0cm95KCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3N1YnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XHJcbiAgICBVdGlscy5EaXNwb3NlT2JqZWN0KHRoaXMuX2dyb3VuZFBsYW5lKTtcclxuICAgIHRoaXMuX2Zsb29ycy5mb3JFYWNoKGYgPT4gVXRpbHMuRGlzcG9zZU9iamVjdChmKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Rmxvb3JQbGFuZSgpOiBGbG9vclBsYW5lSXRlbSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZmxvb3JQbGFuZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzZXRGbG9vclRleHR1cmUocm9vbTogUm9vbSwgdGV4dHVyZTogVGV4dHVyZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IGZsb29yUGxhbmU6IEZsb29yUGxhbmVJdGVtO1xyXG4gICAgaWYgKHJvb20pIHtcclxuICAgICAgZmxvb3JQbGFuZSA9IHJvb20uZmxvb3JQbGFuZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGZsb29yUGxhbmUgPSB0aGlzLl9mbG9vcnNbMF07XHJcbiAgICB9XHJcbiAgICBmbG9vclBsYW5lLnJlc2V0R2VvbWV0cnkoKTtcclxuICAgIGlmICh0ZXh0dXJlICYmIHRleHR1cmUuc2ltcGxlUGxhbmUpIHtcclxuICAgICAgZmxvb3JQbGFuZS51cGRhdGVHZW9tZXRyeShuZXcgUGxhbmVHZW9tZXRyeSg2LCA2KSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBmbG9vck1hdGVyaWFsID0gYXdhaXQgdGhpcy5fY3JlYXRlRmxvb3JNYXRlcmlhbChudWxsLCB0ZXh0dXJlKTtcclxuICAgIGlmIChyb29tKSB7XHJcbiAgICAgIHRoaXMuX3VwZGF0ZUZsb29yTWF0ZXJpYWwocm9vbS5mbG9vclBsYW5lLCBmbG9vck1hdGVyaWFsLCB0ZXh0dXJlKTtcclxuICAgICAgcm9vbS5mbG9vclRleHR1cmUgPSB0ZXh0dXJlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fdXBkYXRlRmxvb3JNYXRlcmlhbCh0aGlzLl9mbG9vcnNbMF0sIGZsb29yTWF0ZXJpYWwsIHRleHR1cmUpO1xyXG4gICAgfVxyXG4gICAgLy8gZW1pdCBuZXcgdGV4dHVyZSBmb3IgYXBwZWFyYW5jZS1zZWN0aW9uXHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLkNoYW5nZVRleHR1cmUsIHRleHR1cmUpO1xyXG4gICAgLy8gcm9vbS5mbG9vckNvbG9yID0gbnVsbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzZXRGbG9vckNvbG9yKHJvb206IFJvb20sIGNvbG9yOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIC8vIGNvbnN0IGZsb29yUGxhbmUgPSB0aGlzLmdlbmVyYXRlRmxvb3JQbGFuZShjb2xvciwgbnVsbCwgcm9vbS5jb3JuZXJzKTtcclxuICAgIC8vIGZsb29yUGxhbmUudXNlckRhdGEgPSB7cm9vbTogcm9vbX07XHJcbiAgICAvLyB0aGlzLnJlbW92ZUZsb29yKHJvb20uZmxvb3JQbGFuZSwgZmFsc2UpO1xyXG4gICAgLy8gcm9vbS5mbG9vclBsYW5lID0gZmxvb3JQbGFuZTtcclxuICAgIGNvbnN0IGZsb29yTWF0ZXJpYWwgPSBhd2FpdCB0aGlzLl9jcmVhdGVGbG9vck1hdGVyaWFsKGNvbG9yLCBudWxsKTtcclxuICAgIHRoaXMuX3VwZGF0ZUZsb29yTWF0ZXJpYWwocm9vbS5mbG9vclBsYW5lLCBmbG9vck1hdGVyaWFsKTtcclxuICAgIHJvb20uZmxvb3JUZXh0dXJlID0gbnVsbDtcclxuICAgIHJvb20uZmxvb3JDb2xvciA9IGNvbG9yO1xyXG4gICAgdGhpcy5fc2NlbmVTZXJ2aWNlLm5lZWRzUmVuZGVyID0gdHJ1ZTtcclxuICAgIHRoaXMuX3NjZW5lU2VydmljZS51cGRhdGVQYXRoVHJhY2VyKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGlnaExpZ2h0Rmxvb3IoZmxvb3JPYmplY3Q6IEZsb29yUGxhbmVJdGVtKTogdm9pZCB7XHJcbiAgICBpZiAoZmxvb3JPYmplY3QgJiYgZmxvb3JPYmplY3QudXVpZCkge1xyXG4gICAgICBjb25zdCBjdXJyZW50Rmxvb3I6IEZsb29yUGxhbmVJdGVtID0gdGhpcy5fZmxvb3JzLmZpbmQoZiA9PiBmLnV1aWQgPT09IGZsb29yT2JqZWN0LnV1aWQpO1xyXG4gICAgICBpZiAoY3VycmVudEZsb29yKSB7XHJcbiAgICAgICAgdGhpcy5fb3V0bGluZVNlcnZpY2Uuc2hvd091dGxpbmUoY3VycmVudEZsb29yKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHVuSGlnaExpZ2h0Rmxvb3JzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fb3V0bGluZVNlcnZpY2UuaGlkZU91dGxpbmUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb25maWd1cmVGbG9vcihmbG9vck9iamVjdDogRmxvb3JQbGFuZUl0ZW0pOiB2b2lkIHtcclxuICAgIHRoaXMuZmxvb3JUb0NvbmZpZ3VyZSA9IGZsb29yT2JqZWN0O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbW92ZUZsb29ycygpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Zsb29ycy5mb3JFYWNoKGZsb29yID0+IHtcclxuICAgICAgdGhpcy5fc2NlbmVTZXJ2aWNlLnJlbW92ZU9iamVjdChmbG9vcik7XHJcbiAgICAgIHRoaXMuX2l0ZW1TZXJ2aWNlLnJlbW92ZUl0ZW0oZmxvb3IpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9mbG9vcnMubGVuZ3RoID0gMDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZW5lcmF0ZUZsb29yUGxhbmUoXHJcbiAgICBjb2xvcjogQ29sb3IgfCBzdHJpbmcgfCBudW1iZXIsIHRleHR1cmU/OiBUZXh0dXJlLCBjb3JuZXJzPzogQ29ybmVyW10sIG5lc3RlZFJvb21zPzogYW55LCBmbG9vckdlb21ldHJ5PzogQnVmZmVyR2VvbWV0cnkpOiBQcm9taXNlPEZsb29yUGxhbmVJdGVtPiB7XHJcbiAgICBsZXQgZ2VvbWV0cnksIHNoYXBlO1xyXG4gICAgaWYgKGNvcm5lcnMpIHtcclxuICAgICAgY29uc3QgcG9pbnRzID0gY29ybmVycy5tYXAoY29ybmVyID0+XHJcbiAgICAgICAgbmV3IFZlY3RvcjIoY29ybmVyLngsIGNvcm5lci55KSk7XHJcbiAgICAgIHNoYXBlID0gbmV3IFNoYXBlKHBvaW50cyk7XHJcblxyXG4gICAgICAvLyBjcmVhdGUgaG9sZXMgZm9yIG5lc3RlZCByb29tc1xyXG4gICAgICBpZiAobmVzdGVkUm9vbXMpIHtcclxuICAgICAgICBuZXN0ZWRSb29tc1xyXG4gICAgICAgICAgLm1hcCgobmVzdGVkUm9vbSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gbmVzdGVkUm9vbS5pbnRlcmlvckNvcm5lcnMubWFwKGNvcm5lciA9PlxyXG4gICAgICAgICAgICAgIG5ldyBWZWN0b3IyKGNvcm5lci54LCBjb3JuZXIueSkpO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5maWx0ZXIobmVzdGVkUm9vbSA9PiBVdGlscy5wb2x5Z29uSW5zaWRlUG9seWdvbihuZXN0ZWRSb29tLCBwb2ludHMpKVxyXG4gICAgICAgICAgLmZpbHRlcigobmVzdGVkUm9vbSwgaW5kZXgsIGFycmF5KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBhcnJheVxyXG4gICAgICAgICAgICAgIC5zbGljZShpbmRleCArIDEpXHJcbiAgICAgICAgICAgICAgLmV2ZXJ5KGxhcmdlck5lc3RlZFJvb20gPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICFVdGlscy5wb2x5Z29uSW5zaWRlUG9seWdvbihuZXN0ZWRSb29tLCBsYXJnZXJOZXN0ZWRSb29tKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuZm9yRWFjaChob2xlUG9pbnQgPT4gc2hhcGUuaG9sZXMucHVzaChuZXcgUGF0aChob2xlUG9pbnQpKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChmbG9vckdlb21ldHJ5KSB7XHJcbiAgICAgIGdlb21ldHJ5ID0gZmxvb3JHZW9tZXRyeTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGdlb21ldHJ5ID0gbmV3IFNoYXBlR2VvbWV0cnkoc2hhcGUpLmNlbnRlcigpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fc2NlbmVTZXJ2aWNlLm5lZWRzUmVuZGVyID0gdHJ1ZTtcclxuICAgIC8vIGZsb29yTWF0ZXJpYWwubWV0YWxuZXNzID0gMDtcclxuICAgIGdlb21ldHJ5LnJvdGF0ZVgoTWF0aC5QSSAvIDIpO1xyXG5cclxuICAgIGNvbnN0IGZsb29yTWF0ZXJpYWwgPSBhd2FpdCB0aGlzLl9jcmVhdGVGbG9vck1hdGVyaWFsKGNvbG9yLCB0ZXh0dXJlKTtcclxuXHJcbiAgICBjb25zdCBmbG9vck1lc2g6IE1lc2ggPSBuZXcgVGhyZWVNZXNoKGdlb21ldHJ5LCBmbG9vck1hdGVyaWFsKTtcclxuICAgIGNvbnN0IGZsb29yUGxhbmU6IEZsb29yUGxhbmVJdGVtID0gbmV3IEZsb29yUGxhbmVJdGVtKHtpdGVtVHlwZTogSXRlbVR5cGUuRmxvb3JEZWNvcmF0aW9ufSwgZmxvb3JNZXNoKTtcclxuICAgIGZsb29yUGxhbmUubmFtZSA9ICdmbG9vci1wbGFuZSc7XHJcbiAgICAvLyBmbG9vclBsYW5lLnJvdGF0aW9uLnNldChNYXRoLlBJIC8gMiwgMCwgMCk7XHJcbiAgICBmbG9vclBsYW5lLnJlY2VpdmVTaGFkb3cgPSB0cnVlO1xyXG4gICAgZmxvb3JQbGFuZS5jYXN0U2hhZG93ID0gZmFsc2U7XHJcbiAgICBjb25zdCBmbG9vckNlbnRlciA9IGNvcm5lcnMgPyB0aGlzLl9nZXRGbG9vckNlbnRlcihjb3JuZXJzKSA6IG5ldyBWZWN0b3IzKDAsIDAsIDApO1xyXG4gICAgZmxvb3JQbGFuZS5wb3NpdGlvbi5zZXQoZmxvb3JDZW50ZXIueCwgMC4wMDAxLCBmbG9vckNlbnRlci56KTtcclxuICAgIHRoaXMuX2FkZEZsb29yKGZsb29yUGxhbmUsIGZhbHNlKTtcclxuICAgIHRoaXMuX2Zsb29yUGxhbmUgPSBmbG9vclBsYW5lO1xyXG4gICAgdGhpcy5fc2NlbmVTZXJ2aWNlLm5lZWRzUmVuZGVyID0gdHJ1ZTtcclxuICAgIHJldHVybiBmbG9vclBsYW5lO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEZsb29yWSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2dyb3VuZFBsYW5lLnBvc2l0aW9uLnk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVtb3ZlRmxvb3IoZmxvb3I6IEZsb29yUGxhbmVJdGVtLCBmb3JjZVJlbmRlcjogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Zsb29ycy5zcGxpY2UodGhpcy5fZmxvb3JzLmluZGV4T2YoZmxvb3IpLCAxKTtcclxuICAgIHRoaXMuX3NjZW5lU2VydmljZS5yZW1vdmVPYmplY3QoZmxvb3IsIGZvcmNlUmVuZGVyKTtcclxuICAgIHRoaXMuX2l0ZW1TZXJ2aWNlLnJlbW92ZUl0ZW0oZmxvb3IpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYWRkRmxvb3IoZmxvb3I6IEZsb29yUGxhbmVJdGVtLCBmb3JjZVJlbmRlcjogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Zsb29ycy5wdXNoKGZsb29yKTtcclxuICAgIHRoaXMuX3NjZW5lU2VydmljZS5hZGRPYmplY3QoZmxvb3IsIGZvcmNlUmVuZGVyKTtcclxuICAgIHRoaXMuX2l0ZW1TZXJ2aWNlLmFkZEl0ZW0oZmxvb3IsIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZUZsb29yTWF0ZXJpYWwoZmxvb3I6IEZsb29yUGxhbmVJdGVtLCBmbG9vck1hdGVyaWFsOiBNYXRlcmlhbCwgdGV4dHVyZT86IFRleHR1cmUpOiB2b2lkIHtcclxuICAgIFV0aWxzLkRpc3Bvc2VNYXRlcmlhbChmbG9vci5nZXRNYXRlcmlhbCgpKTtcclxuICAgIGZsb29yLmZsb29yTWF0ZXJpYWwgPSBmbG9vck1hdGVyaWFsO1xyXG4gICAgdGhpcy5fc2NlbmVTZXJ2aWNlLm5lZWRzUmVuZGVyID0gdHJ1ZTtcclxuICAgIHRoaXMuX3NjZW5lU2VydmljZS51cGRhdGVQYXRoVHJhY2VyKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jcmVhdGVHcm91bmRQbGFuZSgpOiB2b2lkIHtcclxuICAgIC8vIGdyb3VuZCBwbGFuZSB1c2VkIHRvIGZpbmQgaW50ZXJzZWN0aW9uc1xyXG4gICAgY29uc3Qgc2l6ZSA9IDEwMDA7XHJcbiAgICB0aGlzLl9ncm91bmRQbGFuZSA9IG5ldyBNZXNoKFxyXG4gICAgICBuZXcgUGxhbmVHZW9tZXRyeShzaXplLCBzaXplKSxcclxuICAgICAgbmV3IE1lc2hCYXNpY01hdGVyaWFsKHt2aXNpYmxlOiBmYWxzZSwgdHJhbnNwYXJlbnQ6IHRydWUsIG9wYWNpdHk6IDB9KSk7XHJcbiAgICB0aGlzLl9ncm91bmRQbGFuZS5yb3RhdGlvbi54ID0gLU1hdGguUEkgLyAyO1xyXG4gICAgdGhpcy5fZ3JvdW5kUGxhbmUubmFtZSA9ICdncm91bmQtcGxhbmUnO1xyXG4gICAgdGhpcy5fc2NlbmVTZXJ2aWNlLmFkZE9iamVjdCh0aGlzLl9ncm91bmRQbGFuZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9jcmVhdGVGbG9vck1hdGVyaWFsKGNvbG9yOiBDb2xvciB8IHN0cmluZyB8IG51bWJlciwgdGV4dHVyZT86IFRleHR1cmUpOiBQcm9taXNlPE1lc2hTdGFuZGFyZE1hdGVyaWFsPiB7XHJcbiAgICBjb25zdCBvcHRpb25zOiBhbnkgPSB7XHJcbiAgICAgIHNpZGU6IERvdWJsZVNpZGVcclxuICAgIH07XHJcbiAgICBpZiAoY29sb3IpIHtcclxuICAgICAgb3B0aW9ucy5jb2xvciA9IGNvbG9yO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGZsb29yTWF0ZXJpYWwgPSBuZXcgTWVzaFN0YW5kYXJkTWF0ZXJpYWwob3B0aW9ucyk7IC8vIFRPRE86IFR5cGUgb2YgbWF0ZXJpYWwgc2hvdWxkIGJlIGJhc2VkIG9uIGF2YWlsYWJsZSBtYXBzXHJcbiAgICBmbG9vck1hdGVyaWFsLnBvbHlnb25PZmZzZXQgPSB0cnVlO1xyXG4gICAgZmxvb3JNYXRlcmlhbC5wb2x5Z29uT2Zmc2V0RmFjdG9yID0gMC41O1xyXG4gICAgZmxvb3JNYXRlcmlhbC5uYW1lID0gJ2RlZmF1bHRfZmxvb3JtYXRlcmlhbCc7XHJcbiAgICBpZiAodGV4dHVyZSkge1xyXG4gICAgICBhd2FpdCBNYXRlcmlhbFV0aWxzLkdldE1hdGVyaWFsTWFwcyhmbG9vck1hdGVyaWFsLCB0ZXh0dXJlKTtcclxuICAgICAgLy8gUm91Z2huZXNzIHZhbHVlIGlzIHNldCB0byAwLjggaWYgbm8gdmFsdWUgaXMgZGVmaW5lZCwgdGhpcyBwcmV2ZW50cyBoaWdobHkgcmVmbGVjdGl2ZSBmbG9vcnNcclxuICAgICAgaWYgKHRleHR1cmUuY29sb3IpIHtcclxuICAgICAgICBmbG9vck1hdGVyaWFsLmNvbG9yID0gbmV3IENvbG9yKHBhcnNlSW50KHRleHR1cmUuY29sb3IsIDApKTtcclxuICAgICAgfVxyXG4gICAgICBmbG9vck1hdGVyaWFsLnJvdWdobmVzcyA9ICFpc05pbGwodGV4dHVyZS5yb3VnaG5lc3MpID8gdGV4dHVyZS5yb3VnaG5lc3MgOiAwLjg7XHJcbiAgICAgIGZsb29yTWF0ZXJpYWwubWV0YWxuZXNzID0gIWlzTmlsbCh0ZXh0dXJlLm1ldGFsbmVzcykgPyB0ZXh0dXJlLm1ldGFsbmVzcyA6IDA7XHJcbiAgICAgIGZsb29yTWF0ZXJpYWwuYnVtcFNjYWxlID0gIWlzTmlsbCh0ZXh0dXJlLmJ1bXBTY2FsZSkgPyB0ZXh0dXJlLmJ1bXBTY2FsZSA6IDE7XHJcbiAgICAgIGlmICh0ZXh0dXJlLm1pcnJvcikge1xyXG4gICAgICAgIGZsb29yTWF0ZXJpYWwudHJhbnNwYXJlbnQgPSB0cnVlO1xyXG4gICAgICAgIGZsb29yTWF0ZXJpYWwub3BhY2l0eSA9IDE7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGZsb29yTWF0ZXJpYWwubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgcmV0dXJuIGZsb29yTWF0ZXJpYWw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRGbG9vckNlbnRlcihjb3JuZXJzOiBDb3JuZXJbXSk6IFZlY3RvcjMge1xyXG4gICAgY29uc3QgcG9pbnRzID0gY29ybmVycy5tYXAoY29ybmVyID0+XHJcbiAgICAgIG5ldyBWZWN0b3IzKGNvcm5lci54LCAwLCBjb3JuZXIueSkpO1xyXG4gICAgY29uc3QgZmxvb3JDZW50ZXIgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgY29uc3QgZmxvb3JHZW8gPSBuZXcgQnVmZmVyR2VvbWV0cnkoKS5zZXRGcm9tUG9pbnRzKHBvaW50cyk7XHJcbiAgICBmbG9vckdlby5jb21wdXRlQm91bmRpbmdCb3goKTtcclxuICAgIGZsb29yR2VvLmJvdW5kaW5nQm94LmdldENlbnRlcihmbG9vckNlbnRlcik7XHJcbiAgICByZXR1cm4gZmxvb3JDZW50ZXI7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|