three-nebula 10.0.3 → 11.1.0
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/.claude/rules/no-coauthor.md +4 -0
- package/CHANGELOG.md +33 -0
- package/dist/three-nebula.cjs +109 -0
- package/dist/three-nebula.cjs.map +1 -0
- package/dist/three-nebula.mjs +2968 -0
- package/dist/three-nebula.mjs.map +1 -0
- package/dist/three-nebula.umd.js +109 -0
- package/dist/three-nebula.umd.js.map +1 -0
- package/package.json +32 -56
- package/specs/01-emitter-hierarchy.md +200 -0
- package/specs/02-determinism-scrubbing.md +188 -0
- package/specs/03-sound-renderer.md +183 -0
- package/specs/04-schema-versioning.md +140 -0
- package/specs/05-content-addressed-assets.md +288 -0
- package/specs/README.md +80 -0
- package/build/cjs/behaviour/Alpha.js +0 -189
- package/build/cjs/behaviour/Attraction.js +0 -189
- package/build/cjs/behaviour/Behaviour.js +0 -253
- package/build/cjs/behaviour/Collision.js +0 -146
- package/build/cjs/behaviour/Color.js +0 -148
- package/build/cjs/behaviour/CrossZone.js +0 -141
- package/build/cjs/behaviour/Force.js +0 -126
- package/build/cjs/behaviour/Gravity.js +0 -78
- package/build/cjs/behaviour/RandomDrift.js +0 -153
- package/build/cjs/behaviour/Repulsion.js +0 -123
- package/build/cjs/behaviour/Rotate.js +0 -265
- package/build/cjs/behaviour/Scale.js +0 -177
- package/build/cjs/behaviour/Spring.js +0 -133
- package/build/cjs/behaviour/constants.js +0 -28
- package/build/cjs/behaviour/index.js +0 -112
- package/build/cjs/behaviour/types.js +0 -33
- package/build/cjs/constants/index.js +0 -61
- package/build/cjs/core/Particle.js +0 -390
- package/build/cjs/core/Pool.js +0 -203
- package/build/cjs/core/System.js +0 -366
- package/build/cjs/core/constants.js +0 -163
- package/build/cjs/core/fromJSON.js +0 -128
- package/build/cjs/core/fromJSONAsync.js +0 -239
- package/build/cjs/core/index.js +0 -32
- package/build/cjs/core/three/Euler.js +0 -233
- package/build/cjs/core/three/Math.js +0 -91
- package/build/cjs/core/three/Matrix4.js +0 -745
- package/build/cjs/core/three/Quaternion.js +0 -451
- package/build/cjs/core/three/Vector3.js +0 -464
- package/build/cjs/core/three/constants.js +0 -298
- package/build/cjs/core/three/index.js +0 -48
- package/build/cjs/core/types.js +0 -13
- package/build/cjs/debug/Debug.js +0 -209
- package/build/cjs/debug/constants.js +0 -19
- package/build/cjs/debug/index.js +0 -24
- package/build/cjs/debug/log.js +0 -38
- package/build/cjs/ease/index.js +0 -149
- package/build/cjs/emitter/Emitter.js +0 -791
- package/build/cjs/emitter/FollowEmitter.js +0 -146
- package/build/cjs/emitter/constants.js +0 -20
- package/build/cjs/emitter/index.js +0 -24
- package/build/cjs/emitter/types.js +0 -11
- package/build/cjs/events/EventDispatcher.js +0 -105
- package/build/cjs/events/constants.js +0 -23
- package/build/cjs/events/index.js +0 -27
- package/build/cjs/index.js +0 -151
- package/build/cjs/initializer/Body.js +0 -122
- package/build/cjs/initializer/BodySprite.js +0 -146
- package/build/cjs/initializer/Initializer.js +0 -109
- package/build/cjs/initializer/InitializerUtil.js +0 -54
- package/build/cjs/initializer/Life.js +0 -106
- package/build/cjs/initializer/Mass.js +0 -101
- package/build/cjs/initializer/Position.js +0 -152
- package/build/cjs/initializer/Radius.js +0 -118
- package/build/cjs/initializer/Rate.js +0 -150
- package/build/cjs/initializer/Texture.js +0 -139
- package/build/cjs/initializer/Velocity/PolarVelocity.js +0 -102
- package/build/cjs/initializer/Velocity/RadialVelocity.js +0 -111
- package/build/cjs/initializer/Velocity/VectorVelocity.js +0 -108
- package/build/cjs/initializer/Velocity/Velocity.js +0 -94
- package/build/cjs/initializer/Velocity/index.js +0 -32
- package/build/cjs/initializer/constants.js +0 -43
- package/build/cjs/initializer/index.js +0 -100
- package/build/cjs/initializer/types.js +0 -35
- package/build/cjs/math/ArraySpan.js +0 -103
- package/build/cjs/math/Box.js +0 -46
- package/build/cjs/math/ColorSpan.js +0 -113
- package/build/cjs/math/MathUtils.js +0 -57
- package/build/cjs/math/Polar3D.js +0 -115
- package/build/cjs/math/Span.js +0 -88
- package/build/cjs/math/Vector3D.js +0 -76
- package/build/cjs/math/constants.js +0 -35
- package/build/cjs/math/index.js +0 -122
- package/build/cjs/math/integration.js +0 -59
- package/build/cjs/math/types.js +0 -19
- package/build/cjs/renderer/BaseRenderer.js +0 -108
- package/build/cjs/renderer/CustomRenderer.js +0 -65
- package/build/cjs/renderer/GPURenderer/Desktop/index.js +0 -350
- package/build/cjs/renderer/GPURenderer/Desktop/shaders/fragmentShader.js +0 -13
- package/build/cjs/renderer/GPURenderer/Desktop/shaders/index.js +0 -22
- package/build/cjs/renderer/GPURenderer/Desktop/shaders/vertexShader.js +0 -17
- package/build/cjs/renderer/GPURenderer/Mobile/index.js +0 -364
- package/build/cjs/renderer/GPURenderer/Mobile/shaders/fragmentShader.js +0 -13
- package/build/cjs/renderer/GPURenderer/Mobile/shaders/index.js +0 -22
- package/build/cjs/renderer/GPURenderer/Mobile/shaders/vertexShader.js +0 -15
- package/build/cjs/renderer/GPURenderer/common/ParticleBuffer/constants.js +0 -53
- package/build/cjs/renderer/GPURenderer/common/ParticleBuffer/index.js +0 -93
- package/build/cjs/renderer/GPURenderer/common/TextureAtlas/constants.js +0 -9
- package/build/cjs/renderer/GPURenderer/common/TextureAtlas/index.js +0 -221
- package/build/cjs/renderer/GPURenderer/common/constants.js +0 -22
- package/build/cjs/renderer/GPURenderer/common/index.js +0 -38
- package/build/cjs/renderer/GPURenderer/common/shaders/constants.js +0 -9
- package/build/cjs/renderer/GPURenderer/common/stores/Target.js +0 -43
- package/build/cjs/renderer/GPURenderer/common/stores/UniqueList.js +0 -51
- package/build/cjs/renderer/GPURenderer/common/stores/index.js +0 -22
- package/build/cjs/renderer/GPURenderer/index.js +0 -97
- package/build/cjs/renderer/MeshRenderer.js +0 -136
- package/build/cjs/renderer/SpriteRenderer.js +0 -63
- package/build/cjs/renderer/index.js +0 -40
- package/build/cjs/renderer/types.js +0 -21
- package/build/cjs/utils/ColorUtil.js +0 -39
- package/build/cjs/utils/PUID.js +0 -26
- package/build/cjs/utils/THREEUtil.js +0 -40
- package/build/cjs/utils/Util.js +0 -69
- package/build/cjs/utils/index.js +0 -61
- package/build/cjs/utils/uid.js +0 -14
- package/build/cjs/zone/BoxZone.js +0 -178
- package/build/cjs/zone/LineZone.js +0 -101
- package/build/cjs/zone/MeshZone.js +0 -101
- package/build/cjs/zone/PointZone.js +0 -99
- package/build/cjs/zone/ScreenZone.js +0 -164
- package/build/cjs/zone/SphereZone.js +0 -155
- package/build/cjs/zone/Zone.js +0 -172
- package/build/cjs/zone/index.js +0 -56
- package/build/cjs/zone/types.js +0 -21
- package/build/esm/behaviour/Alpha.js +0 -134
- package/build/esm/behaviour/Attraction.js +0 -135
- package/build/esm/behaviour/Behaviour.js +0 -215
- package/build/esm/behaviour/Collision.js +0 -100
- package/build/esm/behaviour/Color.js +0 -101
- package/build/esm/behaviour/CrossZone.js +0 -82
- package/build/esm/behaviour/Force.js +0 -83
- package/build/esm/behaviour/Gravity.js +0 -40
- package/build/esm/behaviour/RandomDrift.js +0 -97
- package/build/esm/behaviour/Repulsion.js +0 -81
- package/build/esm/behaviour/Rotate.js +0 -214
- package/build/esm/behaviour/Scale.js +0 -131
- package/build/esm/behaviour/Spring.js +0 -90
- package/build/esm/behaviour/constants.js +0 -11
- package/build/esm/behaviour/index.js +0 -14
- package/build/esm/behaviour/types.js +0 -14
- package/build/esm/constants/index.js +0 -42
- package/build/esm/core/Particle.js +0 -357
- package/build/esm/core/Pool.js +0 -161
- package/build/esm/core/System.js +0 -320
- package/build/esm/core/constants.js +0 -127
- package/build/esm/core/fromJSON.js +0 -107
- package/build/esm/core/fromJSONAsync.js +0 -210
- package/build/esm/core/index.js +0 -4
- package/build/esm/core/three/Euler.js +0 -224
- package/build/esm/core/three/Math.js +0 -84
- package/build/esm/core/three/Matrix4.js +0 -739
- package/build/esm/core/three/Quaternion.js +0 -445
- package/build/esm/core/three/Vector3.js +0 -457
- package/build/esm/core/three/constants.js +0 -148
- package/build/esm/core/three/index.js +0 -5
- package/build/esm/core/types.js +0 -4
- package/build/esm/debug/Debug.js +0 -195
- package/build/esm/debug/constants.js +0 -7
- package/build/esm/debug/index.js +0 -3
- package/build/esm/debug/log.js +0 -31
- package/build/esm/ease/index.js +0 -113
- package/build/esm/emitter/Emitter.js +0 -701
- package/build/esm/emitter/FollowEmitter.js +0 -97
- package/build/esm/emitter/constants.js +0 -7
- package/build/esm/emitter/index.js +0 -3
- package/build/esm/emitter/types.js +0 -3
- package/build/esm/events/EventDispatcher.js +0 -82
- package/build/esm/events/constants.js +0 -9
- package/build/esm/events/index.js +0 -4
- package/build/esm/index.js +0 -13
- package/build/esm/initializer/Body.js +0 -83
- package/build/esm/initializer/BodySprite.js +0 -108
- package/build/esm/initializer/Initializer.js +0 -84
- package/build/esm/initializer/InitializerUtil.js +0 -48
- package/build/esm/initializer/Life.js +0 -66
- package/build/esm/initializer/Mass.js +0 -60
- package/build/esm/initializer/Position.js +0 -98
- package/build/esm/initializer/Radius.js +0 -75
- package/build/esm/initializer/Rate.js +0 -107
- package/build/esm/initializer/Texture.js +0 -101
- package/build/esm/initializer/Velocity/PolarVelocity.js +0 -63
- package/build/esm/initializer/Velocity/RadialVelocity.js +0 -72
- package/build/esm/initializer/Velocity/VectorVelocity.js +0 -69
- package/build/esm/initializer/Velocity/Velocity.js +0 -52
- package/build/esm/initializer/Velocity/index.js +0 -4
- package/build/esm/initializer/constants.js +0 -26
- package/build/esm/initializer/index.js +0 -11
- package/build/esm/initializer/types.js +0 -15
- package/build/esm/math/ArraySpan.js +0 -62
- package/build/esm/math/Box.js +0 -25
- package/build/esm/math/ColorSpan.js +0 -71
- package/build/esm/math/MathUtils.js +0 -48
- package/build/esm/math/Polar3D.js +0 -81
- package/build/esm/math/Span.js +0 -63
- package/build/esm/math/Vector3D.js +0 -34
- package/build/esm/math/constants.js +0 -24
- package/build/esm/math/index.js +0 -10
- package/build/esm/math/integration.js +0 -47
- package/build/esm/math/types.js +0 -7
- package/build/esm/renderer/BaseRenderer.js +0 -78
- package/build/esm/renderer/CustomRenderer.js +0 -23
- package/build/esm/renderer/GPURenderer/Desktop/index.js +0 -331
- package/build/esm/renderer/GPURenderer/Desktop/shaders/fragmentShader.js +0 -23
- package/build/esm/renderer/GPURenderer/Desktop/shaders/index.js +0 -3
- package/build/esm/renderer/GPURenderer/Desktop/shaders/vertexShader.js +0 -33
- package/build/esm/renderer/GPURenderer/Mobile/index.js +0 -349
- package/build/esm/renderer/GPURenderer/Mobile/shaders/fragmentShader.js +0 -20
- package/build/esm/renderer/GPURenderer/Mobile/shaders/index.js +0 -3
- package/build/esm/renderer/GPURenderer/Mobile/shaders/vertexShader.js +0 -30
- package/build/esm/renderer/GPURenderer/common/ParticleBuffer/constants.js +0 -27
- package/build/esm/renderer/GPURenderer/common/ParticleBuffer/index.js +0 -70
- package/build/esm/renderer/GPURenderer/common/TextureAtlas/constants.js +0 -2
- package/build/esm/renderer/GPURenderer/common/TextureAtlas/index.js +0 -206
- package/build/esm/renderer/GPURenderer/common/constants.js +0 -13
- package/build/esm/renderer/GPURenderer/common/index.js +0 -4
- package/build/esm/renderer/GPURenderer/common/shaders/constants.js +0 -2
- package/build/esm/renderer/GPURenderer/common/stores/Target.js +0 -24
- package/build/esm/renderer/GPURenderer/common/stores/UniqueList.js +0 -29
- package/build/esm/renderer/GPURenderer/common/stores/index.js +0 -3
- package/build/esm/renderer/GPURenderer/index.js +0 -57
- package/build/esm/renderer/MeshRenderer.js +0 -94
- package/build/esm/renderer/SpriteRenderer.js +0 -26
- package/build/esm/renderer/index.js +0 -5
- package/build/esm/renderer/types.js +0 -8
- package/build/esm/utils/ColorUtil.js +0 -32
- package/build/esm/utils/PUID.js +0 -19
- package/build/esm/utils/THREEUtil.js +0 -31
- package/build/esm/utils/Util.js +0 -60
- package/build/esm/utils/index.js +0 -13
- package/build/esm/utils/uid.js +0 -3
- package/build/esm/zone/BoxZone.js +0 -133
- package/build/esm/zone/LineZone.js +0 -61
- package/build/esm/zone/MeshZone.js +0 -60
- package/build/esm/zone/PointZone.js +0 -59
- package/build/esm/zone/ScreenZone.js +0 -116
- package/build/esm/zone/SphereZone.js +0 -113
- package/build/esm/zone/Zone.js +0 -141
- package/build/esm/zone/index.js +0 -7
- package/build/esm/zone/types.js +0 -8
- package/build/three-nebula.js +0 -2
- package/build/three-nebula.js.map +0 -1
|
@@ -1,464 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.Vector3 = Vector3;
|
|
7
|
-
|
|
8
|
-
var _Math2 = require("./Math.js");
|
|
9
|
-
|
|
10
|
-
var _Quaternion = require("./Quaternion.js");
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* @author mrdoob / http://mrdoob.com/
|
|
14
|
-
* @author kile / http://kile.stravaganza.org/
|
|
15
|
-
* @author philogb / http://blog.thejit.org/
|
|
16
|
-
* @author mikael emtinger / http://gomo.se/
|
|
17
|
-
* @author egraether / http://egraether.com/
|
|
18
|
-
* @author WestLangley / http://github.com/WestLangley
|
|
19
|
-
*/
|
|
20
|
-
function Vector3(x, y, z) {
|
|
21
|
-
this.x = x || 0;
|
|
22
|
-
this.y = y || 0;
|
|
23
|
-
this.z = z || 0;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
Object.assign(Vector3.prototype, {
|
|
27
|
-
isVector3: true,
|
|
28
|
-
set: function set(x, y, z) {
|
|
29
|
-
this.x = x;
|
|
30
|
-
this.y = y;
|
|
31
|
-
this.z = z;
|
|
32
|
-
return this;
|
|
33
|
-
},
|
|
34
|
-
setScalar: function setScalar(scalar) {
|
|
35
|
-
this.x = scalar;
|
|
36
|
-
this.y = scalar;
|
|
37
|
-
this.z = scalar;
|
|
38
|
-
return this;
|
|
39
|
-
},
|
|
40
|
-
setX: function setX(x) {
|
|
41
|
-
this.x = x;
|
|
42
|
-
return this;
|
|
43
|
-
},
|
|
44
|
-
setY: function setY(y) {
|
|
45
|
-
this.y = y;
|
|
46
|
-
return this;
|
|
47
|
-
},
|
|
48
|
-
setZ: function setZ(z) {
|
|
49
|
-
this.z = z;
|
|
50
|
-
return this;
|
|
51
|
-
},
|
|
52
|
-
setComponent: function setComponent(index, value) {
|
|
53
|
-
switch (index) {
|
|
54
|
-
case 0:
|
|
55
|
-
this.x = value;
|
|
56
|
-
break;
|
|
57
|
-
|
|
58
|
-
case 1:
|
|
59
|
-
this.y = value;
|
|
60
|
-
break;
|
|
61
|
-
|
|
62
|
-
case 2:
|
|
63
|
-
this.z = value;
|
|
64
|
-
break;
|
|
65
|
-
|
|
66
|
-
default:
|
|
67
|
-
throw new Error('index is out of range: ' + index);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
return this;
|
|
71
|
-
},
|
|
72
|
-
getComponent: function getComponent(index) {
|
|
73
|
-
switch (index) {
|
|
74
|
-
case 0:
|
|
75
|
-
return this.x;
|
|
76
|
-
|
|
77
|
-
case 1:
|
|
78
|
-
return this.y;
|
|
79
|
-
|
|
80
|
-
case 2:
|
|
81
|
-
return this.z;
|
|
82
|
-
|
|
83
|
-
default:
|
|
84
|
-
throw new Error('index is out of range: ' + index);
|
|
85
|
-
}
|
|
86
|
-
},
|
|
87
|
-
clone: function clone() {
|
|
88
|
-
return new this.constructor(this.x, this.y, this.z);
|
|
89
|
-
},
|
|
90
|
-
copy: function copy(v) {
|
|
91
|
-
this.x = v.x;
|
|
92
|
-
this.y = v.y;
|
|
93
|
-
this.z = v.z;
|
|
94
|
-
return this;
|
|
95
|
-
},
|
|
96
|
-
add: function add(v, w) {
|
|
97
|
-
if (w !== undefined) {
|
|
98
|
-
console.warn('THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.');
|
|
99
|
-
return this.addVectors(v, w);
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
this.x += v.x;
|
|
103
|
-
this.y += v.y;
|
|
104
|
-
this.z += v.z;
|
|
105
|
-
return this;
|
|
106
|
-
},
|
|
107
|
-
addScalar: function addScalar(s) {
|
|
108
|
-
this.x += s;
|
|
109
|
-
this.y += s;
|
|
110
|
-
this.z += s;
|
|
111
|
-
return this;
|
|
112
|
-
},
|
|
113
|
-
addVectors: function addVectors(a, b) {
|
|
114
|
-
this.x = a.x + b.x;
|
|
115
|
-
this.y = a.y + b.y;
|
|
116
|
-
this.z = a.z + b.z;
|
|
117
|
-
return this;
|
|
118
|
-
},
|
|
119
|
-
addScaledVector: function addScaledVector(v, s) {
|
|
120
|
-
this.x += v.x * s;
|
|
121
|
-
this.y += v.y * s;
|
|
122
|
-
this.z += v.z * s;
|
|
123
|
-
return this;
|
|
124
|
-
},
|
|
125
|
-
sub: function sub(v, w) {
|
|
126
|
-
if (w !== undefined) {
|
|
127
|
-
console.warn('THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.');
|
|
128
|
-
return this.subVectors(v, w);
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
this.x -= v.x;
|
|
132
|
-
this.y -= v.y;
|
|
133
|
-
this.z -= v.z;
|
|
134
|
-
return this;
|
|
135
|
-
},
|
|
136
|
-
subScalar: function subScalar(s) {
|
|
137
|
-
this.x -= s;
|
|
138
|
-
this.y -= s;
|
|
139
|
-
this.z -= s;
|
|
140
|
-
return this;
|
|
141
|
-
},
|
|
142
|
-
subVectors: function subVectors(a, b) {
|
|
143
|
-
this.x = a.x - b.x;
|
|
144
|
-
this.y = a.y - b.y;
|
|
145
|
-
this.z = a.z - b.z;
|
|
146
|
-
return this;
|
|
147
|
-
},
|
|
148
|
-
multiply: function multiply(v, w) {
|
|
149
|
-
if (w !== undefined) {
|
|
150
|
-
console.warn('THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.');
|
|
151
|
-
return this.multiplyVectors(v, w);
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
this.x *= v.x;
|
|
155
|
-
this.y *= v.y;
|
|
156
|
-
this.z *= v.z;
|
|
157
|
-
return this;
|
|
158
|
-
},
|
|
159
|
-
multiplyScalar: function multiplyScalar(scalar) {
|
|
160
|
-
this.x *= scalar;
|
|
161
|
-
this.y *= scalar;
|
|
162
|
-
this.z *= scalar;
|
|
163
|
-
return this;
|
|
164
|
-
},
|
|
165
|
-
multiplyVectors: function multiplyVectors(a, b) {
|
|
166
|
-
this.x = a.x * b.x;
|
|
167
|
-
this.y = a.y * b.y;
|
|
168
|
-
this.z = a.z * b.z;
|
|
169
|
-
return this;
|
|
170
|
-
},
|
|
171
|
-
applyEuler: function () {
|
|
172
|
-
var quaternion = new _Quaternion.Quaternion();
|
|
173
|
-
return function applyEuler(euler) {
|
|
174
|
-
if (!(euler && euler.isEuler)) {
|
|
175
|
-
console.error('THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.');
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
return this.applyQuaternion(quaternion.setFromEuler(euler));
|
|
179
|
-
};
|
|
180
|
-
}(),
|
|
181
|
-
applyAxisAngle: function () {
|
|
182
|
-
var quaternion = new _Quaternion.Quaternion();
|
|
183
|
-
return function applyAxisAngle(axis, angle) {
|
|
184
|
-
return this.applyQuaternion(quaternion.setFromAxisAngle(axis, angle));
|
|
185
|
-
};
|
|
186
|
-
}(),
|
|
187
|
-
applyMatrix3: function applyMatrix3(m) {
|
|
188
|
-
var x = this.x,
|
|
189
|
-
y = this.y,
|
|
190
|
-
z = this.z;
|
|
191
|
-
var e = m.elements;
|
|
192
|
-
this.x = e[0] * x + e[3] * y + e[6] * z;
|
|
193
|
-
this.y = e[1] * x + e[4] * y + e[7] * z;
|
|
194
|
-
this.z = e[2] * x + e[5] * y + e[8] * z;
|
|
195
|
-
return this;
|
|
196
|
-
},
|
|
197
|
-
applyMatrix4: function applyMatrix4(m) {
|
|
198
|
-
var x = this.x,
|
|
199
|
-
y = this.y,
|
|
200
|
-
z = this.z;
|
|
201
|
-
var e = m.elements;
|
|
202
|
-
var w = 1 / (e[3] * x + e[7] * y + e[11] * z + e[15]);
|
|
203
|
-
this.x = (e[0] * x + e[4] * y + e[8] * z + e[12]) * w;
|
|
204
|
-
this.y = (e[1] * x + e[5] * y + e[9] * z + e[13]) * w;
|
|
205
|
-
this.z = (e[2] * x + e[6] * y + e[10] * z + e[14]) * w;
|
|
206
|
-
return this;
|
|
207
|
-
},
|
|
208
|
-
applyQuaternion: function applyQuaternion(q) {
|
|
209
|
-
var x = this.x,
|
|
210
|
-
y = this.y,
|
|
211
|
-
z = this.z;
|
|
212
|
-
var qx = q.x,
|
|
213
|
-
qy = q.y,
|
|
214
|
-
qz = q.z,
|
|
215
|
-
qw = q.w; // calculate quat * vector
|
|
216
|
-
|
|
217
|
-
var ix = qw * x + qy * z - qz * y;
|
|
218
|
-
var iy = qw * y + qz * x - qx * z;
|
|
219
|
-
var iz = qw * z + qx * y - qy * x;
|
|
220
|
-
var iw = -qx * x - qy * y - qz * z; // calculate result * inverse quat
|
|
221
|
-
|
|
222
|
-
this.x = ix * qw + iw * -qx + iy * -qz - iz * -qy;
|
|
223
|
-
this.y = iy * qw + iw * -qy + iz * -qx - ix * -qz;
|
|
224
|
-
this.z = iz * qw + iw * -qz + ix * -qy - iy * -qx;
|
|
225
|
-
return this;
|
|
226
|
-
},
|
|
227
|
-
project: function project(camera) {
|
|
228
|
-
return this.applyMatrix4(camera.matrixWorldInverse).applyMatrix4(camera.projectionMatrix);
|
|
229
|
-
},
|
|
230
|
-
unproject: function unproject(camera) {
|
|
231
|
-
return this.applyMatrix4(camera.projectionMatrixInverse).applyMatrix4(camera.matrixWorld);
|
|
232
|
-
},
|
|
233
|
-
transformDirection: function transformDirection(m) {
|
|
234
|
-
// input: THREE.Matrix4 affine matrix
|
|
235
|
-
// vector interpreted as a direction
|
|
236
|
-
var x = this.x,
|
|
237
|
-
y = this.y,
|
|
238
|
-
z = this.z;
|
|
239
|
-
var e = m.elements;
|
|
240
|
-
this.x = e[0] * x + e[4] * y + e[8] * z;
|
|
241
|
-
this.y = e[1] * x + e[5] * y + e[9] * z;
|
|
242
|
-
this.z = e[2] * x + e[6] * y + e[10] * z;
|
|
243
|
-
return this.normalize();
|
|
244
|
-
},
|
|
245
|
-
divide: function divide(v) {
|
|
246
|
-
this.x /= v.x;
|
|
247
|
-
this.y /= v.y;
|
|
248
|
-
this.z /= v.z;
|
|
249
|
-
return this;
|
|
250
|
-
},
|
|
251
|
-
divideScalar: function divideScalar(scalar) {
|
|
252
|
-
return this.multiplyScalar(1 / scalar);
|
|
253
|
-
},
|
|
254
|
-
min: function min(v) {
|
|
255
|
-
this.x = Math.min(this.x, v.x);
|
|
256
|
-
this.y = Math.min(this.y, v.y);
|
|
257
|
-
this.z = Math.min(this.z, v.z);
|
|
258
|
-
return this;
|
|
259
|
-
},
|
|
260
|
-
max: function max(v) {
|
|
261
|
-
this.x = Math.max(this.x, v.x);
|
|
262
|
-
this.y = Math.max(this.y, v.y);
|
|
263
|
-
this.z = Math.max(this.z, v.z);
|
|
264
|
-
return this;
|
|
265
|
-
},
|
|
266
|
-
clamp: function clamp(min, max) {
|
|
267
|
-
// assumes min < max, componentwise
|
|
268
|
-
this.x = Math.max(min.x, Math.min(max.x, this.x));
|
|
269
|
-
this.y = Math.max(min.y, Math.min(max.y, this.y));
|
|
270
|
-
this.z = Math.max(min.z, Math.min(max.z, this.z));
|
|
271
|
-
return this;
|
|
272
|
-
},
|
|
273
|
-
clampScalar: function clampScalar(minVal, maxVal) {
|
|
274
|
-
this.x = Math.max(minVal, Math.min(maxVal, this.x));
|
|
275
|
-
this.y = Math.max(minVal, Math.min(maxVal, this.y));
|
|
276
|
-
this.z = Math.max(minVal, Math.min(maxVal, this.z));
|
|
277
|
-
return this;
|
|
278
|
-
},
|
|
279
|
-
clampLength: function clampLength(min, max) {
|
|
280
|
-
var length = this.length();
|
|
281
|
-
return this.divideScalar(length || 1).multiplyScalar(Math.max(min, Math.min(max, length)));
|
|
282
|
-
},
|
|
283
|
-
floor: function floor() {
|
|
284
|
-
this.x = Math.floor(this.x);
|
|
285
|
-
this.y = Math.floor(this.y);
|
|
286
|
-
this.z = Math.floor(this.z);
|
|
287
|
-
return this;
|
|
288
|
-
},
|
|
289
|
-
ceil: function ceil() {
|
|
290
|
-
this.x = Math.ceil(this.x);
|
|
291
|
-
this.y = Math.ceil(this.y);
|
|
292
|
-
this.z = Math.ceil(this.z);
|
|
293
|
-
return this;
|
|
294
|
-
},
|
|
295
|
-
round: function round() {
|
|
296
|
-
this.x = Math.round(this.x);
|
|
297
|
-
this.y = Math.round(this.y);
|
|
298
|
-
this.z = Math.round(this.z);
|
|
299
|
-
return this;
|
|
300
|
-
},
|
|
301
|
-
roundToZero: function roundToZero() {
|
|
302
|
-
this.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x);
|
|
303
|
-
this.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y);
|
|
304
|
-
this.z = this.z < 0 ? Math.ceil(this.z) : Math.floor(this.z);
|
|
305
|
-
return this;
|
|
306
|
-
},
|
|
307
|
-
negate: function negate() {
|
|
308
|
-
this.x = -this.x;
|
|
309
|
-
this.y = -this.y;
|
|
310
|
-
this.z = -this.z;
|
|
311
|
-
return this;
|
|
312
|
-
},
|
|
313
|
-
dot: function dot(v) {
|
|
314
|
-
return this.x * v.x + this.y * v.y + this.z * v.z;
|
|
315
|
-
},
|
|
316
|
-
// TODO lengthSquared?
|
|
317
|
-
lengthSq: function lengthSq() {
|
|
318
|
-
return this.x * this.x + this.y * this.y + this.z * this.z;
|
|
319
|
-
},
|
|
320
|
-
length: function length() {
|
|
321
|
-
return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z);
|
|
322
|
-
},
|
|
323
|
-
manhattanLength: function manhattanLength() {
|
|
324
|
-
return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z);
|
|
325
|
-
},
|
|
326
|
-
normalize: function normalize() {
|
|
327
|
-
return this.divideScalar(this.length() || 1);
|
|
328
|
-
},
|
|
329
|
-
setLength: function setLength(length) {
|
|
330
|
-
return this.normalize().multiplyScalar(length);
|
|
331
|
-
},
|
|
332
|
-
lerp: function lerp(v, alpha) {
|
|
333
|
-
this.x += (v.x - this.x) * alpha;
|
|
334
|
-
this.y += (v.y - this.y) * alpha;
|
|
335
|
-
this.z += (v.z - this.z) * alpha;
|
|
336
|
-
return this;
|
|
337
|
-
},
|
|
338
|
-
lerpVectors: function lerpVectors(v1, v2, alpha) {
|
|
339
|
-
return this.subVectors(v2, v1).multiplyScalar(alpha).add(v1);
|
|
340
|
-
},
|
|
341
|
-
cross: function cross(v, w) {
|
|
342
|
-
if (w !== undefined) {
|
|
343
|
-
console.warn('THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.');
|
|
344
|
-
return this.crossVectors(v, w);
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
return this.crossVectors(this, v);
|
|
348
|
-
},
|
|
349
|
-
crossVectors: function crossVectors(a, b) {
|
|
350
|
-
var ax = a.x,
|
|
351
|
-
ay = a.y,
|
|
352
|
-
az = a.z;
|
|
353
|
-
var bx = b.x,
|
|
354
|
-
by = b.y,
|
|
355
|
-
bz = b.z;
|
|
356
|
-
this.x = ay * bz - az * by;
|
|
357
|
-
this.y = az * bx - ax * bz;
|
|
358
|
-
this.z = ax * by - ay * bx;
|
|
359
|
-
return this;
|
|
360
|
-
},
|
|
361
|
-
projectOnVector: function projectOnVector(vector) {
|
|
362
|
-
var scalar = vector.dot(this) / vector.lengthSq();
|
|
363
|
-
return this.copy(vector).multiplyScalar(scalar);
|
|
364
|
-
},
|
|
365
|
-
projectOnPlane: function () {
|
|
366
|
-
var v1 = new Vector3();
|
|
367
|
-
return function projectOnPlane(planeNormal) {
|
|
368
|
-
v1.copy(this).projectOnVector(planeNormal);
|
|
369
|
-
return this.sub(v1);
|
|
370
|
-
};
|
|
371
|
-
}(),
|
|
372
|
-
reflect: function () {
|
|
373
|
-
// reflect incident vector off plane orthogonal to normal
|
|
374
|
-
// normal is assumed to have unit length
|
|
375
|
-
var v1 = new Vector3();
|
|
376
|
-
return function reflect(normal) {
|
|
377
|
-
return this.sub(v1.copy(normal).multiplyScalar(2 * this.dot(normal)));
|
|
378
|
-
};
|
|
379
|
-
}(),
|
|
380
|
-
angleTo: function angleTo(v) {
|
|
381
|
-
var theta = this.dot(v) / Math.sqrt(this.lengthSq() * v.lengthSq()); // clamp, to handle numerical problems
|
|
382
|
-
|
|
383
|
-
return Math.acos(_Math2._Math.clamp(theta, -1, 1));
|
|
384
|
-
},
|
|
385
|
-
distanceTo: function distanceTo(v) {
|
|
386
|
-
return Math.sqrt(this.distanceToSquared(v));
|
|
387
|
-
},
|
|
388
|
-
distanceToSquared: function distanceToSquared(v) {
|
|
389
|
-
var dx = this.x - v.x,
|
|
390
|
-
dy = this.y - v.y,
|
|
391
|
-
dz = this.z - v.z;
|
|
392
|
-
return dx * dx + dy * dy + dz * dz;
|
|
393
|
-
},
|
|
394
|
-
manhattanDistanceTo: function manhattanDistanceTo(v) {
|
|
395
|
-
return Math.abs(this.x - v.x) + Math.abs(this.y - v.y) + Math.abs(this.z - v.z);
|
|
396
|
-
},
|
|
397
|
-
setFromSpherical: function setFromSpherical(s) {
|
|
398
|
-
return this.setFromSphericalCoords(s.radius, s.phi, s.theta);
|
|
399
|
-
},
|
|
400
|
-
setFromSphericalCoords: function setFromSphericalCoords(radius, phi, theta) {
|
|
401
|
-
var sinPhiRadius = Math.sin(phi) * radius;
|
|
402
|
-
this.x = sinPhiRadius * Math.sin(theta);
|
|
403
|
-
this.y = Math.cos(phi) * radius;
|
|
404
|
-
this.z = sinPhiRadius * Math.cos(theta);
|
|
405
|
-
return this;
|
|
406
|
-
},
|
|
407
|
-
setFromCylindrical: function setFromCylindrical(c) {
|
|
408
|
-
return this.setFromCylindricalCoords(c.radius, c.theta, c.y);
|
|
409
|
-
},
|
|
410
|
-
setFromCylindricalCoords: function setFromCylindricalCoords(radius, theta, y) {
|
|
411
|
-
this.x = radius * Math.sin(theta);
|
|
412
|
-
this.y = y;
|
|
413
|
-
this.z = radius * Math.cos(theta);
|
|
414
|
-
return this;
|
|
415
|
-
},
|
|
416
|
-
setFromMatrixPosition: function setFromMatrixPosition(m) {
|
|
417
|
-
var e = m.elements;
|
|
418
|
-
this.x = e[12];
|
|
419
|
-
this.y = e[13];
|
|
420
|
-
this.z = e[14];
|
|
421
|
-
return this;
|
|
422
|
-
},
|
|
423
|
-
setFromMatrixScale: function setFromMatrixScale(m) {
|
|
424
|
-
var sx = this.setFromMatrixColumn(m, 0).length();
|
|
425
|
-
var sy = this.setFromMatrixColumn(m, 1).length();
|
|
426
|
-
var sz = this.setFromMatrixColumn(m, 2).length();
|
|
427
|
-
this.x = sx;
|
|
428
|
-
this.y = sy;
|
|
429
|
-
this.z = sz;
|
|
430
|
-
return this;
|
|
431
|
-
},
|
|
432
|
-
setFromMatrixColumn: function setFromMatrixColumn(m, index) {
|
|
433
|
-
return this.fromArray(m.elements, index * 4);
|
|
434
|
-
},
|
|
435
|
-
equals: function equals(v) {
|
|
436
|
-
return v.x === this.x && v.y === this.y && v.z === this.z;
|
|
437
|
-
},
|
|
438
|
-
fromArray: function fromArray(array, offset) {
|
|
439
|
-
if (offset === undefined) offset = 0;
|
|
440
|
-
this.x = array[offset];
|
|
441
|
-
this.y = array[offset + 1];
|
|
442
|
-
this.z = array[offset + 2];
|
|
443
|
-
return this;
|
|
444
|
-
},
|
|
445
|
-
toArray: function toArray(array, offset) {
|
|
446
|
-
if (array === undefined) array = [];
|
|
447
|
-
if (offset === undefined) offset = 0;
|
|
448
|
-
array[offset] = this.x;
|
|
449
|
-
array[offset + 1] = this.y;
|
|
450
|
-
array[offset + 2] = this.z;
|
|
451
|
-
return array;
|
|
452
|
-
},
|
|
453
|
-
fromBufferAttribute: function fromBufferAttribute(attribute, index, offset) {
|
|
454
|
-
if (offset !== undefined) {
|
|
455
|
-
console.warn('THREE.Vector3: offset has been removed from .fromBufferAttribute().');
|
|
456
|
-
}
|
|
457
|
-
|
|
458
|
-
this.x = attribute.getX(index);
|
|
459
|
-
this.y = attribute.getY(index);
|
|
460
|
-
this.z = attribute.getZ(index);
|
|
461
|
-
return this;
|
|
462
|
-
}
|
|
463
|
-
});
|
|
464
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb3JlL3RocmVlL1ZlY3RvcjMuanMiXSwibmFtZXMiOlsiVmVjdG9yMyIsIngiLCJ5IiwieiIsIk9iamVjdCIsImFzc2lnbiIsInByb3RvdHlwZSIsImlzVmVjdG9yMyIsInNldCIsInNldFNjYWxhciIsInNjYWxhciIsInNldFgiLCJzZXRZIiwic2V0WiIsInNldENvbXBvbmVudCIsImluZGV4IiwidmFsdWUiLCJFcnJvciIsImdldENvbXBvbmVudCIsImNsb25lIiwiY29uc3RydWN0b3IiLCJjb3B5IiwidiIsImFkZCIsInciLCJ1bmRlZmluZWQiLCJjb25zb2xlIiwid2FybiIsImFkZFZlY3RvcnMiLCJhZGRTY2FsYXIiLCJzIiwiYSIsImIiLCJhZGRTY2FsZWRWZWN0b3IiLCJzdWIiLCJzdWJWZWN0b3JzIiwic3ViU2NhbGFyIiwibXVsdGlwbHkiLCJtdWx0aXBseVZlY3RvcnMiLCJtdWx0aXBseVNjYWxhciIsImFwcGx5RXVsZXIiLCJxdWF0ZXJuaW9uIiwiUXVhdGVybmlvbiIsImV1bGVyIiwiaXNFdWxlciIsImVycm9yIiwiYXBwbHlRdWF0ZXJuaW9uIiwic2V0RnJvbUV1bGVyIiwiYXBwbHlBeGlzQW5nbGUiLCJheGlzIiwiYW5nbGUiLCJzZXRGcm9tQXhpc0FuZ2xlIiwiYXBwbHlNYXRyaXgzIiwibSIsImUiLCJlbGVtZW50cyIsImFwcGx5TWF0cml4NCIsInEiLCJxeCIsInF5IiwicXoiLCJxdyIsIml4IiwiaXkiLCJpeiIsIml3IiwicHJvamVjdCIsImNhbWVyYSIsIm1hdHJpeFdvcmxkSW52ZXJzZSIsInByb2plY3Rpb25NYXRyaXgiLCJ1bnByb2plY3QiLCJwcm9qZWN0aW9uTWF0cml4SW52ZXJzZSIsIm1hdHJpeFdvcmxkIiwidHJhbnNmb3JtRGlyZWN0aW9uIiwibm9ybWFsaXplIiwiZGl2aWRlIiwiZGl2aWRlU2NhbGFyIiwibWluIiwiTWF0aCIsIm1heCIsImNsYW1wIiwiY2xhbXBTY2FsYXIiLCJtaW5WYWwiLCJtYXhWYWwiLCJjbGFtcExlbmd0aCIsImxlbmd0aCIsImZsb29yIiwiY2VpbCIsInJvdW5kIiwicm91bmRUb1plcm8iLCJuZWdhdGUiLCJkb3QiLCJsZW5ndGhTcSIsInNxcnQiLCJtYW5oYXR0YW5MZW5ndGgiLCJhYnMiLCJzZXRMZW5ndGgiLCJsZXJwIiwiYWxwaGEiLCJsZXJwVmVjdG9ycyIsInYxIiwidjIiLCJjcm9zcyIsImNyb3NzVmVjdG9ycyIsImF4IiwiYXkiLCJheiIsImJ4IiwiYnkiLCJieiIsInByb2plY3RPblZlY3RvciIsInZlY3RvciIsInByb2plY3RPblBsYW5lIiwicGxhbmVOb3JtYWwiLCJyZWZsZWN0Iiwibm9ybWFsIiwiYW5nbGVUbyIsInRoZXRhIiwiYWNvcyIsIl9NYXRoIiwiZGlzdGFuY2VUbyIsImRpc3RhbmNlVG9TcXVhcmVkIiwiZHgiLCJkeSIsImR6IiwibWFuaGF0dGFuRGlzdGFuY2VUbyIsInNldEZyb21TcGhlcmljYWwiLCJzZXRGcm9tU3BoZXJpY2FsQ29vcmRzIiwicmFkaXVzIiwicGhpIiwic2luUGhpUmFkaXVzIiwic2luIiwiY29zIiwic2V0RnJvbUN5bGluZHJpY2FsIiwiYyIsInNldEZyb21DeWxpbmRyaWNhbENvb3JkcyIsInNldEZyb21NYXRyaXhQb3NpdGlvbiIsInNldEZyb21NYXRyaXhTY2FsZSIsInN4Iiwic2V0RnJvbU1hdHJpeENvbHVtbiIsInN5Iiwic3oiLCJmcm9tQXJyYXkiLCJlcXVhbHMiLCJhcnJheSIsIm9mZnNldCIsInRvQXJyYXkiLCJmcm9tQnVmZmVyQXR0cmlidXRlIiwiYXR0cmlidXRlIiwiZ2V0WCIsImdldFkiLCJnZXRaIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLFNBQVNBLE9BQVQsQ0FBa0JDLENBQWxCLEVBQXFCQyxDQUFyQixFQUF3QkMsQ0FBeEIsRUFBNEI7QUFFM0IsT0FBS0YsQ0FBTCxHQUFTQSxDQUFDLElB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cEJqQ0MsRUFBQUEsT0FBTyxFQUFFLGlCQUFXRixLQUFYLEVBQWtCQyxNQUFsQixFQUEyQjtBQUVuQyxRQUFLRCxLQUFLLEtBQUt2SCxTQUFmLEVBQTJCdUgsS0FBSyxHQUFHLEVBQVI7QUFDM0IsUUFBS0MsTUFBTSxLQUFLeEgsU0FBaEIsRUFBNEJ3SCxNQUFNLEdBQUcsQ0FBVDtBQUU1QkQsSUFBQUEsS0FBSyxDQUFFQyxNQUFGLENBQUwsR0FBa0IsS0FBS2hKLENBQXZCO0FBQ0ErSSxJQUFBQSxLQUFLLENBQUVDLE1BQU0sR0FBRyxDQUFYLENBQUwsR0FBc0IsS0FBSy9JLENBQTNCO0FBQ0E4SSxJQUFBQSxLQUFLLENBQUVDLE1BQU0sR0FBRyxDQUFYLENBQUwsR0FBc0IsS0FBSzlJLENBQTNCO0FBRUEsV0FBTzZJLEtBQVA7QUFFQSxHQXZxQmdDO0FBeXFCakNHLEVBQUFBLG1CQUFtQixFQUFFLDZCQUFXQyxTQUFYLEVBQXNCckksS0FBdEIsRUFBNkJrSSxNQUE3QixFQUFzQztBQUUxRCxRQUFLQSxNQUFNLEtBQUt4SCxTQUFoQixFQUE0QjtBQUUzQkMsTUFBQUEsT0FBTyxDQUFDQyxJQUFSLENBQWMscUVBQWQ7QUFFQTs7QUFFRCxTQUFLMUIsQ0FBTCxHQUFTbUosU0FBUyxDQUFDQyxJQUFWLENBQWdCdEksS0FBaEIsQ0FBVDtBQUNBLFNBQUtiLENBQUwsR0FBU2tKLFNBQVMsQ0FBQ0UsSUFBVixDQUFnQnZJLEtBQWhCLENBQVQ7QUFDQSxTQUFLWixDQUFMLEdBQVNpSixTQUFTLENBQUNHLElBQVYsQ0FBZ0J4SSxLQUFoQixDQUFUO0FBRUEsV0FBTyxJQUFQO0FBRUE7QUF2ckJnQyxDQUFsQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IF9NYXRoIH0gZnJvbSAnLi9NYXRoLmpzJztcbmltcG9ydCB7IFF1YXRlcm5pb24gfSBmcm9tICcuL1F1YXRlcm5pb24uanMnO1xuXG4vKipcbiAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vXG4gKiBAYXV0aG9yIGtpbGUgLyBodHRwOi8va2lsZS5zdHJhdmFnYW56YS5vcmcvXG4gKiBAYXV0aG9yIHBoaWxvZ2IgLyBodHRwOi8vYmxvZy50aGVqaXQub3JnL1xuICogQGF1dGhvciBtaWthZWwgZW10aW5nZXIgLyBodHRwOi8vZ29tby5zZS9cbiAqIEBhdXRob3IgZWdyYWV0aGVyIC8gaHR0cDovL2VncmFldGhlci5jb20vXG4gKiBAYXV0aG9yIFdlc3RMYW5nbGV5IC8gaHR0cDovL2dpdGh1Yi5jb20vV2VzdExhbmdsZXlcbiAqL1xuXG5mdW5jdGlvbiBWZWN0b3IzKCB4LCB5LCB6ICkge1xuXG5cdHRoaXMueCA9IHggfHwgMDtcblx0dGhpcy55ID0geSB8fCAwO1xuXHR0aGlzLnogPSB6IHx8IDA7XG5cbn1cblxuT2JqZWN0LmFzc2lnbiggVmVjdG9yMy5wcm90b3R5cGUsIHtcblxuXHRpc1ZlY3RvcjM6IHRydWUsXG5cblx0c2V0OiBmdW5jdGlvbiAoIHgsIHksIHogKSB7XG5cblx0XHR0aGlzLnggPSB4O1xuXHRcdHRoaXMueSA9IHk7XG5cdFx0dGhpcy56ID0gejtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0c2V0U2NhbGFyOiBmdW5jdGlvbiAoIHNjYWxhciApIHtcblxuXHRcdHRoaXMueCA9IHNjYWxhcjtcblx0XHR0aGlzLnkgPSBzY2FsYXI7XG5cdFx0dGhpcy56ID0gc2NhbGFyO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRzZXRYOiBmdW5jdGlvbiAoIHggKSB7XG5cblx0XHR0aGlzLnggPSB4O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRzZXRZOiBmdW5jdGlvbiAoIHkgKSB7XG5cblx0XHR0aGlzLnkgPSB5O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRzZXRaOiBmdW5jdGlvbiAoIHogKSB7XG5cblx0XHR0aGlzLnogPSB6O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRzZXRDb21wb25lbnQ6IGZ1bmN0aW9uICggaW5kZXgsIHZhbHVlICkge1xuXG5cdFx0c3dpdGNoICggaW5kZXggKSB7XG5cblx0XHRcdGNhc2UgMDogdGhpcy54ID0gdmFsdWU7IGJyZWFrO1xuXHRcdFx0Y2FzZSAxOiB0aGlzLnkgPSB2YWx1ZTsgYnJlYWs7XG5cdFx0XHRjYXNlIDI6IHRoaXMueiA9IHZhbHVlOyBicmVhaztcblx0XHRcdGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvciggJ2luZGV4IGlzIG91dCBvZiByYW5nZTogJyArIGluZGV4ICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9LFxuXG5cdGdldENvbXBvbmVudDogZnVuY3Rpb24gKCBpbmRleCApIHtcblxuXHRcdHN3aXRjaCAoIGluZGV4ICkge1xuXG5cdFx0XHRjYXNlIDA6IHJldHVybiB0aGlzLng7XG5cdFx0XHRjYXNlIDE6IHJldHVybiB0aGlzLnk7XG5cdFx0XHRjYXNlIDI6IHJldHVybiB0aGlzLno7XG5cdFx0XHRkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoICdpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICcgKyBpbmRleCApO1xuXG5cdFx0fVxuXG5cdH0sXG5cblx0Y2xvbmU6IGZ1bmN0aW9uICgpIHtcblxuXHRcdHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvciggdGhpcy54LCB0aGlzLnksIHRoaXMueiApO1xuXG5cdH0sXG5cblx0Y29weTogZnVuY3Rpb24gKCB2ICkge1xuXG5cdFx0dGhpcy54ID0gdi54O1xuXHRcdHRoaXMueSA9IHYueTtcblx0XHR0aGlzLnogPSB2Lno7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9LFxuXG5cdGFkZDogZnVuY3Rpb24gKCB2LCB3ICkge1xuXG5cdFx0aWYgKCB3ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLlZlY3RvcjM6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4nICk7XG5cdFx0XHRyZXR1cm4gdGhpcy5hZGRWZWN0b3JzKCB2LCB3ICk7XG5cblx0XHR9XG5cblx0XHR0aGlzLnggKz0gdi54O1xuXHRcdHRoaXMueSArPSB2Lnk7XG5cdFx0dGhpcy56ICs9IHYuejtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0YWRkU2NhbGFyOiBmdW5jdGlvbiAoIHMgKSB7XG5cblx0XHR0aGlzLnggKz0gcztcblx0XHR0aGlzLnkgKz0gcztcblx0XHR0aGlzLnogKz0gcztcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0YWRkVmVjdG9yczogZnVuY3Rpb24gKCBhLCBiICkge1xuXG5cdFx0dGhpcy54ID0gYS54ICsgYi54O1xuXHRcdHRoaXMueSA9IGEueSArIGIueTtcblx0XHR0aGlzLnogPSBhLnogKyBiLno7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9LFxuXG5cdGFkZFNjYWxlZFZlY3RvcjogZnVuY3Rpb24gKCB2LCBzICkge1xuXG5cdFx0dGhpcy54ICs9IHYueCAqIHM7XG5cdFx0dGhpcy55ICs9IHYueSAqIHM7XG5cdFx0dGhpcy56ICs9IHYueiAqIHM7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9LFxuXG5cdHN1YjogZnVuY3Rpb24gKCB2LCB3ICkge1xuXG5cdFx0aWYgKCB3ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLlZlY3RvcjM6IC5zdWIoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5zdWJWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4nICk7XG5cdFx0XHRyZXR1cm4gdGhpcy5zdWJWZWN0b3JzKCB2LCB3ICk7XG5cblx0XHR9XG5cblx0XHR0aGlzLnggLT0gdi54O1xuXHRcdHRoaXMueSAtPSB2Lnk7XG5cdFx0dGhpcy56IC09IHYuejtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0c3ViU2NhbGFyOiBmdW5jdGlvbiAoIHMgKSB7XG5cblx0XHR0aGlzLnggLT0gcztcblx0XHR0aGlzLnkgLT0gcztcblx0XHR0aGlzLnogLT0gcztcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0c3ViVmVjdG9yczogZnVuY3Rpb24gKCBhLCBiICkge1xuXG5cdFx0dGhpcy54ID0gYS54IC0gYi54O1xuXHRcdHRoaXMueSA9IGEueSAtIGIueTtcblx0XHR0aGlzLnogPSBhLnogLSBiLno7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9LFxuXG5cdG11bHRpcGx5OiBmdW5jdGlvbiAoIHYsIHcgKSB7XG5cblx0XHRpZiAoIHcgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuVmVjdG9yMzogLm11bHRpcGx5KCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAubXVsdGlwbHlWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4nICk7XG5cdFx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseVZlY3RvcnMoIHYsIHcgKTtcblxuXHRcdH1cblxuXHRcdHRoaXMueCAqPSB2Lng7XG5cdFx0dGhpcy55ICo9IHYueTtcblx0XHR0aGlzLnogKj0gdi56O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRtdWx0aXBseVNjYWxhcjogZnVuY3Rpb24gKCBzY2FsYXIgKSB7XG5cblx0XHR0aGlzLnggKj0gc2NhbGFyO1xuXHRcdHRoaXMueSAqPSBzY2FsYXI7XG5cdFx0dGhpcy56ICo9IHNjYWxhcjtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0bXVsdGlwbHlWZWN0b3JzOiBmdW5jdGlvbiAoIGEsIGIgKSB7XG5cblx0XHR0aGlzLnggPSBhLnggKiBiLng7XG5cdFx0dGhpcy55ID0gYS55ICogYi55O1xuXHRcdHRoaXMueiA9IGEueiAqIGIuejtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0YXBwbHlFdWxlcjogZnVuY3Rpb24gKCkge1xuXG5cdFx0dmFyIHF1YXRlcm5pb24gPSBuZXcgUXVhdGVybmlvbigpO1xuXG5cdFx0cmV0dXJuIGZ1bmN0aW9uIGFwcGx5RXVsZXIoIGV1bGVyICkge1xuXG5cdFx0XHRpZiAoICEgKCBldWxlciAmJiBldWxlci5pc0V1bGVyICkgKSB7XG5cblx0XHRcdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLlZlY3RvcjM6IC5hcHBseUV1bGVyKCkgbm93IGV4cGVjdHMgYW4gRXVsZXIgcm90YXRpb24gcmF0aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4nICk7XG5cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRoaXMuYXBwbHlRdWF0ZXJuaW9uKCBxdWF0ZXJuaW9uLnNldEZyb21FdWxlciggZXVsZXIgKSApO1xuXG5cdFx0fTtcblxuXHR9KCksXG5cblx0YXBwbHlBeGlzQW5nbGU6IGZ1bmN0aW9uICgpIHtcblxuXHRcdHZhciBxdWF0ZXJuaW9uID0gbmV3IFF1YXRlcm5pb24oKTtcblxuXHRcdHJldHVybiBmdW5jdGlvbiBhcHBseUF4aXNBbmdsZSggYXhpcywgYW5nbGUgKSB7XG5cblx0XHRcdHJldHVybiB0aGlzLmFwcGx5UXVhdGVybmlvbiggcXVhdGVybmlvbi5zZXRGcm9tQXhpc0FuZ2xlKCBheGlzLCBhbmdsZSApICk7XG5cblx0XHR9O1xuXG5cdH0oKSxcblxuXHRhcHBseU1hdHJpeDM6IGZ1bmN0aW9uICggbSApIHtcblxuXHRcdHZhciB4ID0gdGhpcy54LCB5ID0gdGhpcy55LCB6ID0gdGhpcy56O1xuXHRcdHZhciBlID0gbS5lbGVtZW50cztcblxuXHRcdHRoaXMueCA9IGVbIDAgXSAqIHggKyBlWyAzIF0gKiB5ICsgZVsgNiBdICogejtcblx0XHR0aGlzLnkgPSBlWyAxIF0gKiB4ICsgZVsgNCBdICogeSArIGVbIDcgXSAqIHo7XG5cdFx0dGhpcy56ID0gZVsgMiBdICogeCArIGVbIDUgXSAqIHkgKyBlWyA4IF0gKiB6O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRhcHBseU1hdHJpeDQ6IGZ1bmN0aW9uICggbSApIHtcblxuXHRcdHZhciB4ID0gdGhpcy54LCB5ID0gdGhpcy55LCB6ID0gdGhpcy56O1xuXHRcdHZhciBlID0gbS5lbGVtZW50cztcblxuXHRcdHZhciB3ID0gMSAvICggZVsgMyBdICogeCArIGVbIDcgXSAqIHkgKyBlWyAxMSBdICogeiArIGVbIDE1IF0gKTtcblxuXHRcdHRoaXMueCA9ICggZVsgMCBdICogeCArIGVbIDQgXSAqIHkgKyBlWyA4IF0gKiB6ICsgZVsgMTIgXSApICogdztcblx0XHR0aGlzLnkgPSAoIGVbIDEgXSAqIHggKyBlWyA1IF0gKiB5ICsgZVsgOSBdICogeiArIGVbIDEzIF0gKSAqIHc7XG5cdFx0dGhpcy56ID0gKCBlWyAyIF0gKiB4ICsgZVsgNiBdICogeSArIGVbIDEwIF0gKiB6ICsgZVsgMTQgXSApICogdztcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0YXBwbHlRdWF0ZXJuaW9uOiBmdW5jdGlvbiAoIHEgKSB7XG5cblx0XHR2YXIgeCA9IHRoaXMueCwgeSA9IHRoaXMueSwgeiA9IHRoaXMuejtcblx0XHR2YXIgcXggPSBxLngsIHF5ID0gcS55LCBxeiA9IHEueiwgcXcgPSBxLnc7XG5cblx0XHQvLyBjYWxjdWxhdGUgcXVhdCAqIHZlY3RvclxuXG5cdFx0dmFyIGl4ID0gcXcgKiB4ICsgcXkgKiB6IC0gcXogKiB5O1xuXHRcdHZhciBpeSA9IHF3ICogeSArIHF6ICogeCAtIHF4ICogejtcblx0XHR2YXIgaXogPSBxdyAqIHogKyBxeCAqIHkgLSBxeSAqIHg7XG5cdFx0dmFyIGl3ID0gLSBxeCAqIHggLSBxeSAqIHkgLSBxeiAqIHo7XG5cblx0XHQvLyBjYWxjdWxhdGUgcmVzdWx0ICogaW52ZXJzZSBxdWF0XG5cblx0XHR0aGlzLnggPSBpeCAqIHF3ICsgaXcgKiAtIHF4ICsgaXkgKiAtIHF6IC0gaXogKiAtIHF5O1xuXHRcdHRoaXMueSA9IGl5ICogcXcgKyBpdyAqIC0gcXkgKyBpeiAqIC0gcXggLSBpeCAqIC0gcXo7XG5cdFx0dGhpcy56ID0gaXogKiBxdyArIGl3ICogLSBxeiArIGl4ICogLSBxeSAtIGl5ICogLSBxeDtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0cHJvamVjdDogZnVuY3Rpb24gKCBjYW1lcmEgKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQoIGNhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UgKS5hcHBseU1hdHJpeDQoIGNhbWVyYS5wcm9qZWN0aW9uTWF0cml4ICk7XG5cblx0fSxcblxuXHR1bnByb2plY3Q6IGZ1bmN0aW9uICggY2FtZXJhICkge1xuXG5cdFx0cmV0dXJuIHRoaXMuYXBwbHlNYXRyaXg0KCBjYW1lcmEucHJvamVjdGlvbk1hdHJpeEludmVyc2UgKS5hcHBseU1hdHJpeDQoIGNhbWVyYS5tYXRyaXhXb3JsZCApO1xuXG5cdH0sXG5cblx0dHJhbnNmb3JtRGlyZWN0aW9uOiBmdW5jdGlvbiAoIG0gKSB7XG5cblx0XHQvLyBpbnB1dDogVEhSRUUuTWF0cml4NCBhZmZpbmUgbWF0cml4XG5cdFx0Ly8gdmVjdG9yIGludGVycHJldGVkIGFzIGEgZGlyZWN0aW9uXG5cblx0XHR2YXIgeCA9IHRoaXMueCwgeSA9IHRoaXMueSwgeiA9IHRoaXMuejtcblx0XHR2YXIgZSA9IG0uZWxlbWVudHM7XG5cblx0XHR0aGlzLnggPSBlWyAwIF0gKiB4ICsgZVsgNCBdICogeSArIGVbIDggXSAqIHo7XG5cdFx0dGhpcy55ID0gZVsgMSBdICogeCArIGVbIDUgXSAqIHkgKyBlWyA5IF0gKiB6O1xuXHRcdHRoaXMueiA9IGVbIDIgXSAqIHggKyBlWyA2IF0gKiB5ICsgZVsgMTAgXSAqIHo7XG5cblx0XHRyZXR1cm4gdGhpcy5ub3JtYWxpemUoKTtcblxuXHR9LFxuXG5cdGRpdmlkZTogZnVuY3Rpb24gKCB2ICkge1xuXG5cdFx0dGhpcy54IC89IHYueDtcblx0XHR0aGlzLnkgLz0gdi55O1xuXHRcdHRoaXMueiAvPSB2Lno7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9LFxuXG5cdGRpdmlkZVNjYWxhcjogZnVuY3Rpb24gKCBzY2FsYXIgKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhciggMSAvIHNjYWxhciApO1xuXG5cdH0sXG5cblx0bWluOiBmdW5jdGlvbiAoIHYgKSB7XG5cblx0XHR0aGlzLnggPSBNYXRoLm1pbiggdGhpcy54LCB2LnggKTtcblx0XHR0aGlzLnkgPSBNYXRoLm1pbiggdGhpcy55LCB2LnkgKTtcblx0XHR0aGlzLnogPSBNYXRoLm1pbiggdGhpcy56LCB2LnogKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0bWF4OiBmdW5jdGlvbiAoIHYgKSB7XG5cblx0XHR0aGlzLnggPSBNYXRoLm1heCggdGhpcy54LCB2LnggKTtcblx0XHR0aGlzLnkgPSBNYXRoLm1heCggdGhpcy55LCB2LnkgKTtcblx0XHR0aGlzLnogPSBNYXRoLm1heCggdGhpcy56LCB2LnogKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0Y2xhbXA6IGZ1bmN0aW9uICggbWluLCBtYXggKSB7XG5cblx0XHQvLyBhc3N1bWVzIG1pbiA8IG1heCwgY29tcG9uZW50d2lzZVxuXG5cdFx0dGhpcy54ID0gTWF0aC5tYXgoIG1pbi54LCBNYXRoLm1pbiggbWF4LngsIHRoaXMueCApICk7XG5cdFx0dGhpcy55ID0gTWF0aC5tYXgoIG1pbi55LCBNYXRoLm1pbiggbWF4LnksIHRoaXMueSApICk7XG5cdFx0dGhpcy56ID0gTWF0aC5tYXgoIG1pbi56LCBNYXRoLm1pbiggbWF4LnosIHRoaXMueiApICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9LFxuXG5cdGNsYW1wU2NhbGFyOiBmdW5jdGlvbiAoIG1pblZhbCwgbWF4VmFsICkge1xuXG5cdFx0dGhpcy54ID0gTWF0aC5tYXgoIG1pblZhbCwgTWF0aC5taW4oIG1heFZhbCwgdGhpcy54ICkgKTtcblx0XHR0aGlzLnkgPSBNYXRoLm1heCggbWluVmFsLCBNYXRoLm1pbiggbWF4VmFsLCB0aGlzLnkgKSApO1xuXHRcdHRoaXMueiA9IE1hdGgubWF4KCBtaW5WYWwsIE1hdGgubWluKCBtYXhWYWwsIHRoaXMueiApICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9LFxuXG5cdGNsYW1wTGVuZ3RoOiBmdW5jdGlvbiAoIG1pbiwgbWF4ICkge1xuXG5cdFx0dmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoKCk7XG5cblx0XHRyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIoIGxlbmd0aCB8fCAxICkubXVsdGlwbHlTY2FsYXIoIE1hdGgubWF4KCBtaW4sIE1hdGgubWluKCBtYXgsIGxlbmd0aCApICkgKTtcblxuXHR9LFxuXG5cdGZsb29yOiBmdW5jdGlvbiAoKSB7XG5cblx0XHR0aGlzLnggPSBNYXRoLmZsb29yKCB0aGlzLnggKTtcblx0XHR0aGlzLnkgPSBNYXRoLmZsb29yKCB0aGlzLnkgKTtcblx0XHR0aGlzLnogPSBNYXRoLmZsb29yKCB0aGlzLnogKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0Y2VpbDogZnVuY3Rpb24gKCkge1xuXG5cdFx0dGhpcy54ID0gTWF0aC5jZWlsKCB0aGlzLnggKTtcblx0XHR0aGlzLnkgPSBNYXRoLmNlaWwoIHRoaXMueSApO1xuXHRcdHRoaXMueiA9IE1hdGguY2VpbCggdGhpcy56ICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9LFxuXG5cdHJvdW5kOiBmdW5jdGlvbiAoKSB7XG5cblx0XHR0aGlzLnggPSBNYXRoLnJvdW5kKCB0aGlzLnggKTtcblx0XHR0aGlzLnkgPSBNYXRoLnJvdW5kKCB0aGlzLnkgKTtcblx0XHR0aGlzLnogPSBNYXRoLnJvdW5kKCB0aGlzLnogKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0cm91bmRUb1plcm86IGZ1bmN0aW9uICgpIHtcblxuXHRcdHRoaXMueCA9ICggdGhpcy54IDwgMCApID8gTWF0aC5jZWlsKCB0aGlzLnggKSA6IE1hdGguZmxvb3IoIHRoaXMueCApO1xuXHRcdHRoaXMueSA9ICggdGhpcy55IDwgMCApID8gTWF0aC5jZWlsKCB0aGlzLnkgKSA6IE1hdGguZmxvb3IoIHRoaXMueSApO1xuXHRcdHRoaXMueiA9ICggdGhpcy56IDwgMCApID8gTWF0aC5jZWlsKCB0aGlzLnogKSA6IE1hdGguZmxvb3IoIHRoaXMueiApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRuZWdhdGU6IGZ1bmN0aW9uICgpIHtcblxuXHRcdHRoaXMueCA9IC0gdGhpcy54O1xuXHRcdHRoaXMueSA9IC0gdGhpcy55O1xuXHRcdHRoaXMueiA9IC0gdGhpcy56O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRkb3Q6IGZ1bmN0aW9uICggdiApIHtcblxuXHRcdHJldHVybiB0aGlzLnggKiB2LnggKyB0aGlzLnkgKiB2LnkgKyB0aGlzLnogKiB2Lno7XG5cblx0fSxcblxuXHQvLyBUT0RPIGxlbmd0aFNxdWFyZWQ/XG5cblx0bGVuZ3RoU3E6IGZ1bmN0aW9uICgpIHtcblxuXHRcdHJldHVybiB0aGlzLnggKiB0aGlzLnggKyB0aGlzLnkgKiB0aGlzLnkgKyB0aGlzLnogKiB0aGlzLno7XG5cblx0fSxcblxuXHRsZW5ndGg6IGZ1bmN0aW9uICgpIHtcblxuXHRcdHJldHVybiBNYXRoLnNxcnQoIHRoaXMueCAqIHRoaXMueCArIHRoaXMueSAqIHRoaXMueSArIHRoaXMueiAqIHRoaXMueiApO1xuXG5cdH0sXG5cblx0bWFuaGF0dGFuTGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG5cblx0XHRyZXR1cm4gTWF0aC5hYnMoIHRoaXMueCApICsgTWF0aC5hYnMoIHRoaXMueSApICsgTWF0aC5hYnMoIHRoaXMueiApO1xuXG5cdH0sXG5cblx0bm9ybWFsaXplOiBmdW5jdGlvbiAoKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIoIHRoaXMubGVuZ3RoKCkgfHwgMSApO1xuXG5cdH0sXG5cblx0c2V0TGVuZ3RoOiBmdW5jdGlvbiAoIGxlbmd0aCApIHtcblxuXHRcdHJldHVybiB0aGlzLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKCBsZW5ndGggKTtcblxuXHR9LFxuXG5cdGxlcnA6IGZ1bmN0aW9uICggdiwgYWxwaGEgKSB7XG5cblx0XHR0aGlzLnggKz0gKCB2LnggLSB0aGlzLnggKSAqIGFscGhhO1xuXHRcdHRoaXMueSArPSAoIHYueSAtIHRoaXMueSApICogYWxwaGE7XG5cdFx0dGhpcy56ICs9ICggdi56IC0gdGhpcy56ICkgKiBhbHBoYTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0bGVycFZlY3RvcnM6IGZ1bmN0aW9uICggdjEsIHYyLCBhbHBoYSApIHtcblxuXHRcdHJldHVybiB0aGlzLnN1YlZlY3RvcnMoIHYyLCB2MSApLm11bHRpcGx5U2NhbGFyKCBhbHBoYSApLmFkZCggdjEgKTtcblxuXHR9LFxuXG5cdGNyb3NzOiBmdW5jdGlvbiAoIHYsIHcgKSB7XG5cblx0XHRpZiAoIHcgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuVmVjdG9yMzogLmNyb3NzKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuY3Jvc3NWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4nICk7XG5cdFx0XHRyZXR1cm4gdGhpcy5jcm9zc1ZlY3RvcnMoIHYsIHcgKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmNyb3NzVmVjdG9ycyggdGhpcywgdiApO1xuXG5cdH0sXG5cblx0Y3Jvc3NWZWN0b3JzOiBmdW5jdGlvbiAoIGEsIGIgKSB7XG5cblx0XHR2YXIgYXggPSBhLngsIGF5ID0gYS55LCBheiA9IGEuejtcblx0XHR2YXIgYnggPSBiLngsIGJ5ID0gYi55LCBieiA9IGIuejtcblxuXHRcdHRoaXMueCA9IGF5ICogYnogLSBheiAqIGJ5O1xuXHRcdHRoaXMueSA9IGF6ICogYnggLSBheCAqIGJ6O1xuXHRcdHRoaXMueiA9IGF4ICogYnkgLSBheSAqIGJ4O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRwcm9qZWN0T25WZWN0b3I6IGZ1bmN0aW9uICggdmVjdG9yICkge1xuXG5cdFx0dmFyIHNjYWxhciA9IHZlY3Rvci5kb3QoIHRoaXMgKSAvIHZlY3Rvci5sZW5ndGhTcSgpO1xuXG5cdFx0cmV0dXJuIHRoaXMuY29weSggdmVjdG9yICkubXVsdGlwbHlTY2FsYXIoIHNjYWxhciApO1xuXG5cdH0sXG5cblx0cHJvamVjdE9uUGxhbmU6IGZ1bmN0aW9uICgpIHtcblxuXHRcdHZhciB2MSA9IG5ldyBWZWN0b3IzKCk7XG5cblx0XHRyZXR1cm4gZnVuY3Rpb24gcHJvamVjdE9uUGxhbmUoIHBsYW5lTm9ybWFsICkge1xuXG5cdFx0XHR2MS5jb3B5KCB0aGlzICkucHJvamVjdE9uVmVjdG9yKCBwbGFuZU5vcm1hbCApO1xuXG5cdFx0XHRyZXR1cm4gdGhpcy5zdWIoIHYxICk7XG5cblx0XHR9O1xuXG5cdH0oKSxcblxuXHRyZWZsZWN0OiBmdW5jdGlvbiAoKSB7XG5cblx0XHQvLyByZWZsZWN0IGluY2lkZW50IHZlY3RvciBvZmYgcGxhbmUgb3J0aG9nb25hbCB0byBub3JtYWxcblx0XHQvLyBub3JtYWwgaXMgYXNzdW1lZCB0byBoYXZlIHVuaXQgbGVuZ3RoXG5cblx0XHR2YXIgdjEgPSBuZXcgVmVjdG9yMygpO1xuXG5cdFx0cmV0dXJuIGZ1bmN0aW9uIHJlZmxlY3QoIG5vcm1hbCApIHtcblxuXHRcdFx0cmV0dXJuIHRoaXMuc3ViKCB2MS5jb3B5KCBub3JtYWwgKS5tdWx0aXBseVNjYWxhciggMiAqIHRoaXMuZG90KCBub3JtYWwgKSApICk7XG5cblx0XHR9O1xuXG5cdH0oKSxcblxuXHRhbmdsZVRvOiBmdW5jdGlvbiAoIHYgKSB7XG5cblx0XHR2YXIgdGhldGEgPSB0aGlzLmRvdCggdiApIC8gKCBNYXRoLnNxcnQoIHRoaXMubGVuZ3RoU3EoKSAqIHYubGVuZ3RoU3EoKSApICk7XG5cblx0XHQvLyBjbGFtcCwgdG8gaGFuZGxlIG51bWVyaWNhbCBwcm9ibGVtc1xuXG5cdFx0cmV0dXJuIE1hdGguYWNvcyggX01hdGguY2xhbXAoIHRoZXRhLCAtIDEsIDEgKSApO1xuXG5cdH0sXG5cblx0ZGlzdGFuY2VUbzogZnVuY3Rpb24gKCB2ICkge1xuXG5cdFx0cmV0dXJuIE1hdGguc3FydCggdGhpcy5kaXN0YW5jZVRvU3F1YXJlZCggdiApICk7XG5cblx0fSxcblxuXHRkaXN0YW5jZVRvU3F1YXJlZDogZnVuY3Rpb24gKCB2ICkge1xuXG5cdFx0dmFyIGR4ID0gdGhpcy54IC0gdi54LCBkeSA9IHRoaXMueSAtIHYueSwgZHogPSB0aGlzLnogLSB2Lno7XG5cblx0XHRyZXR1cm4gZHggKiBkeCArIGR5ICogZHkgKyBkeiAqIGR6O1xuXG5cdH0sXG5cblx0bWFuaGF0dGFuRGlzdGFuY2VUbzogZnVuY3Rpb24gKCB2ICkge1xuXG5cdFx0cmV0dXJuIE1hdGguYWJzKCB0aGlzLnggLSB2LnggKSArIE1hdGguYWJzKCB0aGlzLnkgLSB2LnkgKSArIE1hdGguYWJzKCB0aGlzLnogLSB2LnogKTtcblxuXHR9LFxuXG5cdHNldEZyb21TcGhlcmljYWw6IGZ1bmN0aW9uICggcyApIHtcblxuXHRcdHJldHVybiB0aGlzLnNldEZyb21TcGhlcmljYWxDb29yZHMoIHMucmFkaXVzLCBzLnBoaSwgcy50aGV0YSApO1xuXG5cdH0sXG5cblx0c2V0RnJvbVNwaGVyaWNhbENvb3JkczogZnVuY3Rpb24gKCByYWRpdXMsIHBoaSwgdGhldGEgKSB7XG5cblx0XHR2YXIgc2luUGhpUmFkaXVzID0gTWF0aC5zaW4oIHBoaSApICogcmFkaXVzO1xuXG5cdFx0dGhpcy54ID0gc2luUGhpUmFkaXVzICogTWF0aC5zaW4oIHRoZXRhICk7XG5cdFx0dGhpcy55ID0gTWF0aC5jb3MoIHBoaSApICogcmFkaXVzO1xuXHRcdHRoaXMueiA9IHNpblBoaVJhZGl1cyAqIE1hdGguY29zKCB0aGV0YSApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRzZXRGcm9tQ3lsaW5kcmljYWw6IGZ1bmN0aW9uICggYyApIHtcblxuXHRcdHJldHVybiB0aGlzLnNldEZyb21DeWxpbmRyaWNhbENvb3JkcyggYy5yYWRpdXMsIGMudGhldGEsIGMueSApO1xuXG5cdH0sXG5cblx0c2V0RnJvbUN5bGluZHJpY2FsQ29vcmRzOiBmdW5jdGlvbiAoIHJhZGl1cywgdGhldGEsIHkgKSB7XG5cblx0XHR0aGlzLnggPSByYWRpdXMgKiBNYXRoLnNpbiggdGhldGEgKTtcblx0XHR0aGlzLnkgPSB5O1xuXHRcdHRoaXMueiA9IHJhZGl1cyAqIE1hdGguY29zKCB0aGV0YSApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRzZXRGcm9tTWF0cml4UG9zaXRpb246IGZ1bmN0aW9uICggbSApIHtcblxuXHRcdHZhciBlID0gbS5lbGVtZW50cztcblxuXHRcdHRoaXMueCA9IGVbIDEyIF07XG5cdFx0dGhpcy55ID0gZVsgMTMgXTtcblx0XHR0aGlzLnogPSBlWyAxNCBdO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRzZXRGcm9tTWF0cml4U2NhbGU6IGZ1bmN0aW9uICggbSApIHtcblxuXHRcdHZhciBzeCA9IHRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbiggbSwgMCApLmxlbmd0aCgpO1xuXHRcdHZhciBzeSA9IHRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbiggbSwgMSApLmxlbmd0aCgpO1xuXHRcdHZhciBzeiA9IHRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbiggbSwgMiApLmxlbmd0aCgpO1xuXG5cdFx0dGhpcy54ID0gc3g7XG5cdFx0dGhpcy55ID0gc3k7XG5cdFx0dGhpcy56ID0gc3o7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9LFxuXG5cdHNldEZyb21NYXRyaXhDb2x1bW46IGZ1bmN0aW9uICggbSwgaW5kZXggKSB7XG5cblx0XHRyZXR1cm4gdGhpcy5mcm9tQXJyYXkoIG0uZWxlbWVudHMsIGluZGV4ICogNCApO1xuXG5cdH0sXG5cblx0ZXF1YWxzOiBmdW5jdGlvbiAoIHYgKSB7XG5cblx0XHRyZXR1cm4gKCAoIHYueCA9PT0gdGhpcy54ICkgJiYgKCB2LnkgPT09IHRoaXMueSApICYmICggdi56ID09PSB0aGlzLnogKSApO1xuXG5cdH0sXG5cblx0ZnJvbUFycmF5OiBmdW5jdGlvbiAoIGFycmF5LCBvZmZzZXQgKSB7XG5cblx0XHRpZiAoIG9mZnNldCA9PT0gdW5kZWZpbmVkICkgb2Zmc2V0ID0gMDtcblxuXHRcdHRoaXMueCA9IGFycmF5WyBvZmZzZXQgXTtcblx0XHR0aGlzLnkgPSBhcnJheVsgb2Zmc2V0ICsgMSBdO1xuXHRcdHRoaXMueiA9IGFycmF5WyBvZmZzZXQgKyAyIF07XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9LFxuXG5cdHRvQXJyYXk6IGZ1bmN0aW9uICggYXJyYXksIG9mZnNldCApIHtcblxuXHRcdGlmICggYXJyYXkgPT09IHVuZGVmaW5lZCApIGFycmF5ID0gW107XG5cdFx0aWYgKCBvZmZzZXQgPT09IHVuZGVmaW5lZCApIG9mZnNldCA9IDA7XG5cblx0XHRhcnJheVsgb2Zmc2V0IF0gPSB0aGlzLng7XG5cdFx0YXJyYXlbIG9mZnNldCArIDEgXSA9IHRoaXMueTtcblx0XHRhcnJheVsgb2Zmc2V0ICsgMiBdID0gdGhpcy56O1xuXG5cdFx0cmV0dXJuIGFycmF5O1xuXG5cdH0sXG5cblx0ZnJvbUJ1ZmZlckF0dHJpYnV0ZTogZnVuY3Rpb24gKCBhdHRyaWJ1dGUsIGluZGV4LCBvZmZzZXQgKSB7XG5cblx0XHRpZiAoIG9mZnNldCAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5WZWN0b3IzOiBvZmZzZXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuJyApO1xuXG5cdFx0fVxuXG5cdFx0dGhpcy54ID0gYXR0cmlidXRlLmdldFgoIGluZGV4ICk7XG5cdFx0dGhpcy55ID0gYXR0cmlidXRlLmdldFkoIGluZGV4ICk7XG5cdFx0dGhpcy56ID0gYXR0cmlidXRlLmdldFooIGluZGV4ICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9XG5cbn0gKTtcblxuXG5leHBvcnQgeyBWZWN0b3IzIH07Il19
|