mage-engine 3.16.0 → 3.16.4
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/dist/mage.js +557 -641
- package/package.json +10 -10
package/dist/mage.js
CHANGED
|
@@ -1,17 +1,37 @@
|
|
|
1
|
-
function
|
|
2
|
-
|
|
1
|
+
function ownKeys(object, enumerableOnly) {
|
|
2
|
+
var keys = Object.keys(object);
|
|
3
3
|
|
|
4
|
-
if (
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
4
|
+
if (Object.getOwnPropertySymbols) {
|
|
5
|
+
var symbols = Object.getOwnPropertySymbols(object);
|
|
6
|
+
enumerableOnly && (symbols = symbols.filter(function (sym) {
|
|
7
|
+
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
|
8
|
+
})), keys.push.apply(keys, symbols);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
return keys;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function _objectSpread2(target) {
|
|
15
|
+
for (var i = 1; i < arguments.length; i++) {
|
|
16
|
+
var source = null != arguments[i] ? arguments[i] : {};
|
|
17
|
+
i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {
|
|
18
|
+
_defineProperty(target, key, source[key]);
|
|
19
|
+
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {
|
|
20
|
+
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
|
21
|
+
});
|
|
12
22
|
}
|
|
13
23
|
|
|
14
|
-
return
|
|
24
|
+
return target;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function _typeof(obj) {
|
|
28
|
+
"@babel/helpers - typeof";
|
|
29
|
+
|
|
30
|
+
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
|
|
31
|
+
return typeof obj;
|
|
32
|
+
} : function (obj) {
|
|
33
|
+
return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
|
|
34
|
+
}, _typeof(obj);
|
|
15
35
|
}
|
|
16
36
|
|
|
17
37
|
function _classCallCheck(instance, Constructor) {
|
|
@@ -33,6 +53,9 @@ function _defineProperties(target, props) {
|
|
|
33
53
|
function _createClass(Constructor, protoProps, staticProps) {
|
|
34
54
|
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
35
55
|
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
56
|
+
Object.defineProperty(Constructor, "prototype", {
|
|
57
|
+
writable: false
|
|
58
|
+
});
|
|
36
59
|
return Constructor;
|
|
37
60
|
}
|
|
38
61
|
|
|
@@ -51,40 +74,6 @@ function _defineProperty(obj, key, value) {
|
|
|
51
74
|
return obj;
|
|
52
75
|
}
|
|
53
76
|
|
|
54
|
-
function ownKeys(object, enumerableOnly) {
|
|
55
|
-
var keys = Object.keys(object);
|
|
56
|
-
|
|
57
|
-
if (Object.getOwnPropertySymbols) {
|
|
58
|
-
var symbols = Object.getOwnPropertySymbols(object);
|
|
59
|
-
if (enumerableOnly) symbols = symbols.filter(function (sym) {
|
|
60
|
-
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
|
61
|
-
});
|
|
62
|
-
keys.push.apply(keys, symbols);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
return keys;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
function _objectSpread2(target) {
|
|
69
|
-
for (var i = 1; i < arguments.length; i++) {
|
|
70
|
-
var source = arguments[i] != null ? arguments[i] : {};
|
|
71
|
-
|
|
72
|
-
if (i % 2) {
|
|
73
|
-
ownKeys(Object(source), true).forEach(function (key) {
|
|
74
|
-
_defineProperty(target, key, source[key]);
|
|
75
|
-
});
|
|
76
|
-
} else if (Object.getOwnPropertyDescriptors) {
|
|
77
|
-
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
|
78
|
-
} else {
|
|
79
|
-
ownKeys(Object(source)).forEach(function (key) {
|
|
80
|
-
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
return target;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
77
|
function _inherits(subClass, superClass) {
|
|
89
78
|
if (typeof superClass !== "function" && superClass !== null) {
|
|
90
79
|
throw new TypeError("Super expression must either be null or a function");
|
|
@@ -97,6 +86,9 @@ function _inherits(subClass, superClass) {
|
|
|
97
86
|
configurable: true
|
|
98
87
|
}
|
|
99
88
|
});
|
|
89
|
+
Object.defineProperty(subClass, "prototype", {
|
|
90
|
+
writable: false
|
|
91
|
+
});
|
|
100
92
|
if (superClass) _setPrototypeOf(subClass, superClass);
|
|
101
93
|
}
|
|
102
94
|
|
|
@@ -122,7 +114,7 @@ function _isNativeReflectConstruct() {
|
|
|
122
114
|
if (typeof Proxy === "function") return true;
|
|
123
115
|
|
|
124
116
|
try {
|
|
125
|
-
|
|
117
|
+
Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
|
|
126
118
|
return true;
|
|
127
119
|
} catch (e) {
|
|
128
120
|
return false;
|
|
@@ -176,6 +168,8 @@ function _assertThisInitialized(self) {
|
|
|
176
168
|
function _possibleConstructorReturn(self, call) {
|
|
177
169
|
if (call && (typeof call === "object" || typeof call === "function")) {
|
|
178
170
|
return call;
|
|
171
|
+
} else if (call !== void 0) {
|
|
172
|
+
throw new TypeError("Derived constructors may only return object or undefined");
|
|
179
173
|
}
|
|
180
174
|
|
|
181
175
|
return _assertThisInitialized(self);
|
|
@@ -209,7 +203,7 @@ function _superPropBase(object, property) {
|
|
|
209
203
|
return object;
|
|
210
204
|
}
|
|
211
205
|
|
|
212
|
-
function _get(
|
|
206
|
+
function _get() {
|
|
213
207
|
if (typeof Reflect !== "undefined" && Reflect.get) {
|
|
214
208
|
_get = Reflect.get;
|
|
215
209
|
} else {
|
|
@@ -220,14 +214,14 @@ function _get(target, property, receiver) {
|
|
|
220
214
|
var desc = Object.getOwnPropertyDescriptor(base, property);
|
|
221
215
|
|
|
222
216
|
if (desc.get) {
|
|
223
|
-
return desc.get.call(receiver);
|
|
217
|
+
return desc.get.call(arguments.length < 3 ? target : receiver);
|
|
224
218
|
}
|
|
225
219
|
|
|
226
220
|
return desc.value;
|
|
227
221
|
};
|
|
228
222
|
}
|
|
229
223
|
|
|
230
|
-
return _get(
|
|
224
|
+
return _get.apply(this, arguments);
|
|
231
225
|
}
|
|
232
226
|
|
|
233
227
|
function _toConsumableArray(arr) {
|
|
@@ -239,7 +233,7 @@ function _arrayWithoutHoles(arr) {
|
|
|
239
233
|
}
|
|
240
234
|
|
|
241
235
|
function _iterableToArray(iter) {
|
|
242
|
-
if (typeof Symbol !== "undefined" && Symbol.iterator
|
|
236
|
+
if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
|
|
243
237
|
}
|
|
244
238
|
|
|
245
239
|
function _unsupportedIterableToArray(o, minLen) {
|
|
@@ -261,6 +255,63 @@ function _arrayLikeToArray(arr, len) {
|
|
|
261
255
|
|
|
262
256
|
function _nonIterableSpread() {
|
|
263
257
|
throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
function _createForOfIteratorHelper(o, allowArrayLike) {
|
|
261
|
+
var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
|
|
262
|
+
|
|
263
|
+
if (!it) {
|
|
264
|
+
if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
|
|
265
|
+
if (it) o = it;
|
|
266
|
+
var i = 0;
|
|
267
|
+
|
|
268
|
+
var F = function () {};
|
|
269
|
+
|
|
270
|
+
return {
|
|
271
|
+
s: F,
|
|
272
|
+
n: function () {
|
|
273
|
+
if (i >= o.length) return {
|
|
274
|
+
done: true
|
|
275
|
+
};
|
|
276
|
+
return {
|
|
277
|
+
done: false,
|
|
278
|
+
value: o[i++]
|
|
279
|
+
};
|
|
280
|
+
},
|
|
281
|
+
e: function (e) {
|
|
282
|
+
throw e;
|
|
283
|
+
},
|
|
284
|
+
f: F
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
var normalCompletion = true,
|
|
292
|
+
didErr = false,
|
|
293
|
+
err;
|
|
294
|
+
return {
|
|
295
|
+
s: function () {
|
|
296
|
+
it = it.call(o);
|
|
297
|
+
},
|
|
298
|
+
n: function () {
|
|
299
|
+
var step = it.next();
|
|
300
|
+
normalCompletion = step.done;
|
|
301
|
+
return step;
|
|
302
|
+
},
|
|
303
|
+
e: function (e) {
|
|
304
|
+
didErr = true;
|
|
305
|
+
err = e;
|
|
306
|
+
},
|
|
307
|
+
f: function () {
|
|
308
|
+
try {
|
|
309
|
+
if (!normalCompletion && it.return != null) it.return();
|
|
310
|
+
} finally {
|
|
311
|
+
if (didErr) throw err;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
};
|
|
264
315
|
}var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
|
|
265
316
|
|
|
266
317
|
function createCommonjsModule(fn, basedir, module) {
|
|
@@ -53474,9 +53525,7 @@ if ( typeof window !== 'undefined' ) {
|
|
|
53474
53525
|
|
|
53475
53526
|
}
|
|
53476
53527
|
|
|
53477
|
-
}var three_module=/*#__PURE__*/Object.freeze({__proto__:null,ACESFilmicToneMapping: ACESFilmicToneMapping,AddEquation: AddEquation,AddOperation: AddOperation,AdditiveAnimationBlendMode: AdditiveAnimationBlendMode,AdditiveBlending: AdditiveBlending,AlphaFormat: AlphaFormat,AlwaysDepth: AlwaysDepth,AlwaysStencilFunc: AlwaysStencilFunc,AmbientLight: AmbientLight,AmbientLightProbe: AmbientLightProbe,AnimationClip: AnimationClip,AnimationLoader: AnimationLoader,AnimationMixer: AnimationMixer,AnimationObjectGroup: AnimationObjectGroup,AnimationUtils: AnimationUtils,ArcCurve: ArcCurve,ArrayCamera: ArrayCamera,ArrowHelper: ArrowHelper,Audio: Audio,AudioAnalyser: AudioAnalyser,AudioContext: AudioContext,AudioListener: AudioListener,AudioLoader: AudioLoader,AxesHelper: AxesHelper,AxisHelper: AxisHelper,BackSide: BackSide,BasicDepthPacking: BasicDepthPacking,BasicShadowMap: BasicShadowMap,BinaryTextureLoader: BinaryTextureLoader,Bone: Bone,BooleanKeyframeTrack: BooleanKeyframeTrack,BoundingBoxHelper: BoundingBoxHelper,Box2: Box2,Box3: Box3,Box3Helper: Box3Helper,BoxBufferGeometry: BoxGeometry,BoxGeometry: BoxGeometry,BoxHelper: BoxHelper,BufferAttribute: BufferAttribute,BufferGeometry: BufferGeometry,BufferGeometryLoader: BufferGeometryLoader,ByteType: ByteType,Cache: Cache,Camera: Camera,CameraHelper: CameraHelper,CanvasRenderer: CanvasRenderer,CanvasTexture: CanvasTexture,CatmullRomCurve3: CatmullRomCurve3,CineonToneMapping: CineonToneMapping,CircleBufferGeometry: CircleGeometry,CircleGeometry: CircleGeometry,ClampToEdgeWrapping: ClampToEdgeWrapping,Clock: Clock,Color: Color,ColorKeyframeTrack: ColorKeyframeTrack,CompressedTexture: CompressedTexture,CompressedTextureLoader: CompressedTextureLoader,ConeBufferGeometry: ConeGeometry,ConeGeometry: ConeGeometry,CubeCamera: CubeCamera,CubeReflectionMapping: CubeReflectionMapping,CubeRefractionMapping: CubeRefractionMapping,CubeTexture: CubeTexture,CubeTextureLoader: CubeTextureLoader,CubeUVReflectionMapping: CubeUVReflectionMapping,CubeUVRefractionMapping: CubeUVRefractionMapping,CubicBezierCurve: CubicBezierCurve,CubicBezierCurve3: CubicBezierCurve3,CubicInterpolant: CubicInterpolant,CullFaceBack: CullFaceBack,CullFaceFront: CullFaceFront,CullFaceFrontBack: CullFaceFrontBack,CullFaceNone: CullFaceNone,Curve: Curve,CurvePath: CurvePath,CustomBlending: CustomBlending,CustomToneMapping: CustomToneMapping,CylinderBufferGeometry: CylinderGeometry,CylinderGeometry: CylinderGeometry,Cylindrical: Cylindrical,DataTexture: DataTexture,DataTexture2DArray: DataTexture2DArray,DataTexture3D: DataTexture3D,DataTextureLoader: DataTextureLoader,DataUtils: DataUtils,DecrementStencilOp: DecrementStencilOp,DecrementWrapStencilOp: DecrementWrapStencilOp,DefaultLoadingManager: DefaultLoadingManager,DepthFormat: DepthFormat,DepthStencilFormat: DepthStencilFormat,DepthTexture: DepthTexture,DirectionalLight: DirectionalLight,DirectionalLightHelper: DirectionalLightHelper,DiscreteInterpolant: DiscreteInterpolant,DodecahedronBufferGeometry: DodecahedronGeometry,DodecahedronGeometry: DodecahedronGeometry,DoubleSide: DoubleSide,DstAlphaFactor: DstAlphaFactor,DstColorFactor: DstColorFactor,DynamicBufferAttribute: DynamicBufferAttribute,DynamicCopyUsage: DynamicCopyUsage,DynamicDrawUsage: DynamicDrawUsage,DynamicReadUsage: DynamicReadUsage,EdgesGeometry: EdgesGeometry,EdgesHelper: EdgesHelper,EllipseCurve: EllipseCurve,EqualDepth: EqualDepth,EqualStencilFunc: EqualStencilFunc,EquirectangularReflectionMapping: EquirectangularReflectionMapping,EquirectangularRefractionMapping: EquirectangularRefractionMapping,Euler: Euler,EventDispatcher: EventDispatcher,ExtrudeBufferGeometry: ExtrudeGeometry,ExtrudeGeometry: ExtrudeGeometry,FaceColors: FaceColors,FileLoader: FileLoader,FlatShading: FlatShading,Float16BufferAttribute: Float16BufferAttribute,Float32Attribute: Float32Attribute,Float32BufferAttribute: Float32BufferAttribute,Float64Attribute: Float64Attribute,Float64BufferAttribute: Float64BufferAttribute,FloatType: FloatType$1,Fog: Fog,FogExp2: FogExp2,Font: Font,FontLoader: FontLoader,FrontSide: FrontSide,Frustum: Frustum,GLBufferAttribute: GLBufferAttribute,GLSL1: GLSL1,GLSL3: GLSL3,GammaEncoding: GammaEncoding,GreaterDepth: GreaterDepth,GreaterEqualDepth: GreaterEqualDepth,GreaterEqualStencilFunc: GreaterEqualStencilFunc,GreaterStencilFunc: GreaterStencilFunc,GridHelper: GridHelper,Group: Group,HalfFloatType: HalfFloatType,HemisphereLight: HemisphereLight,HemisphereLightHelper: HemisphereLightHelper,HemisphereLightProbe: HemisphereLightProbe,IcosahedronBufferGeometry: IcosahedronGeometry,IcosahedronGeometry: IcosahedronGeometry,ImageBitmapLoader: ImageBitmapLoader,ImageLoader: ImageLoader,ImageUtils: ImageUtils,ImmediateRenderObject: ImmediateRenderObject,IncrementStencilOp: IncrementStencilOp,IncrementWrapStencilOp: IncrementWrapStencilOp,InstancedBufferAttribute: InstancedBufferAttribute,InstancedBufferGeometry: InstancedBufferGeometry,InstancedInterleavedBuffer: InstancedInterleavedBuffer,InstancedMesh: InstancedMesh,Int16Attribute: Int16Attribute,Int16BufferAttribute: Int16BufferAttribute,Int32Attribute: Int32Attribute,Int32BufferAttribute: Int32BufferAttribute,Int8Attribute: Int8Attribute,Int8BufferAttribute: Int8BufferAttribute,IntType: IntType,InterleavedBuffer: InterleavedBuffer,InterleavedBufferAttribute: InterleavedBufferAttribute,Interpolant: Interpolant,InterpolateDiscrete: InterpolateDiscrete,InterpolateLinear: InterpolateLinear,InterpolateSmooth: InterpolateSmooth,InvertStencilOp: InvertStencilOp,JSONLoader: JSONLoader,KeepStencilOp: KeepStencilOp,KeyframeTrack: KeyframeTrack,LOD: LOD,LatheBufferGeometry: LatheGeometry,LatheGeometry: LatheGeometry,Layers: Layers,LensFlare: LensFlare,LessDepth: LessDepth,LessEqualDepth: LessEqualDepth,LessEqualStencilFunc: LessEqualStencilFunc,LessStencilFunc: LessStencilFunc,Light: Light,LightProbe: LightProbe,Line: Line,Line3: Line3,LineBasicMaterial: LineBasicMaterial,LineCurve: LineCurve,LineCurve3: LineCurve3,LineDashedMaterial: LineDashedMaterial,LineLoop: LineLoop,LinePieces: LinePieces,LineSegments: LineSegments,LineStrip: LineStrip,LinearEncoding: LinearEncoding,LinearFilter: LinearFilter,LinearInterpolant: LinearInterpolant,LinearMipMapLinearFilter: LinearMipMapLinearFilter,LinearMipMapNearestFilter: LinearMipMapNearestFilter,LinearMipmapLinearFilter: LinearMipmapLinearFilter,LinearMipmapNearestFilter: LinearMipmapNearestFilter,LinearToneMapping: LinearToneMapping,Loader: Loader,LoaderUtils: LoaderUtils,LoadingManager: LoadingManager,LogLuvEncoding: LogLuvEncoding,LoopOnce: LoopOnce,LoopPingPong: LoopPingPong,LoopRepeat: LoopRepeat,LuminanceAlphaFormat: LuminanceAlphaFormat,LuminanceFormat: LuminanceFormat,MOUSE: MOUSE,Material: Material,MaterialLoader: MaterialLoader,Math: MathUtils,MathUtils: MathUtils,Matrix3: Matrix3,Matrix4: Matrix4,MaxEquation: MaxEquation,Mesh: Mesh,MeshBasicMaterial: MeshBasicMaterial,MeshDepthMaterial: MeshDepthMaterial,MeshDistanceMaterial: MeshDistanceMaterial,MeshFaceMaterial: MeshFaceMaterial,MeshLambertMaterial: MeshLambertMaterial,MeshMatcapMaterial: MeshMatcapMaterial,MeshNormalMaterial: MeshNormalMaterial,MeshPhongMaterial: MeshPhongMaterial,MeshPhysicalMaterial: MeshPhysicalMaterial,MeshStandardMaterial: MeshStandardMaterial,MeshToonMaterial: MeshToonMaterial,MinEquation: MinEquation,MirroredRepeatWrapping: MirroredRepeatWrapping,MixOperation: MixOperation,MultiMaterial: MultiMaterial,MultiplyBlending: MultiplyBlending,MultiplyOperation: MultiplyOperation,NearestFilter: NearestFilter,NearestMipMapLinearFilter: NearestMipMapLinearFilter,NearestMipMapNearestFilter: NearestMipMapNearestFilter,NearestMipmapLinearFilter: NearestMipmapLinearFilter,NearestMipmapNearestFilter: NearestMipmapNearestFilter,NeverDepth: NeverDepth,NeverStencilFunc: NeverStencilFunc,NoBlending: NoBlending,NoColors: NoColors,NoToneMapping: NoToneMapping,NormalAnimationBlendMode: NormalAnimationBlendMode,NormalBlending: NormalBlending,NotEqualDepth: NotEqualDepth,NotEqualStencilFunc: NotEqualStencilFunc,NumberKeyframeTrack: NumberKeyframeTrack,Object3D: Object3D,ObjectLoader: ObjectLoader,ObjectSpaceNormalMap: ObjectSpaceNormalMap,OctahedronBufferGeometry: OctahedronGeometry,OctahedronGeometry: OctahedronGeometry,OneFactor: OneFactor,OneMinusDstAlphaFactor: OneMinusDstAlphaFactor,OneMinusDstColorFactor: OneMinusDstColorFactor,OneMinusSrcAlphaFactor: OneMinusSrcAlphaFactor,OneMinusSrcColorFactor: OneMinusSrcColorFactor,OrthographicCamera: OrthographicCamera,PCFShadowMap: PCFShadowMap,PCFSoftShadowMap: PCFSoftShadowMap,PMREMGenerator: PMREMGenerator,ParametricBufferGeometry: ParametricGeometry,ParametricGeometry: ParametricGeometry,Particle: Particle,ParticleBasicMaterial: ParticleBasicMaterial,ParticleSystem: ParticleSystem,ParticleSystemMaterial: ParticleSystemMaterial,Path: Path,PerspectiveCamera: PerspectiveCamera,Plane: Plane,PlaneBufferGeometry: PlaneGeometry,PlaneGeometry: PlaneGeometry,PlaneHelper: PlaneHelper,PointCloud: PointCloud,PointCloudMaterial: PointCloudMaterial,PointLight: PointLight,PointLightHelper: PointLightHelper,Points: Points,PointsMaterial: PointsMaterial,PolarGridHelper: PolarGridHelper,PolyhedronBufferGeometry: PolyhedronGeometry,PolyhedronGeometry: PolyhedronGeometry,PositionalAudio: PositionalAudio,PropertyBinding: PropertyBinding,PropertyMixer: PropertyMixer,QuadraticBezierCurve: QuadraticBezierCurve,QuadraticBezierCurve3: QuadraticBezierCurve3,Quaternion: Quaternion,QuaternionKeyframeTrack: QuaternionKeyframeTrack,QuaternionLinearInterpolant: QuaternionLinearInterpolant,REVISION: REVISION,RGBADepthPacking: RGBADepthPacking,RGBAFormat: RGBAFormat,RGBAIntegerFormat: RGBAIntegerFormat,RGBA_ASTC_10x10_Format: RGBA_ASTC_10x10_Format,RGBA_ASTC_10x5_Format: RGBA_ASTC_10x5_Format,RGBA_ASTC_10x6_Format: RGBA_ASTC_10x6_Format,RGBA_ASTC_10x8_Format: RGBA_ASTC_10x8_Format,RGBA_ASTC_12x10_Format: RGBA_ASTC_12x10_Format,RGBA_ASTC_12x12_Format: RGBA_ASTC_12x12_Format,RGBA_ASTC_4x4_Format: RGBA_ASTC_4x4_Format,RGBA_ASTC_5x4_Format: RGBA_ASTC_5x4_Format,RGBA_ASTC_5x5_Format: RGBA_ASTC_5x5_Format,RGBA_ASTC_6x5_Format: RGBA_ASTC_6x5_Format,RGBA_ASTC_6x6_Format: RGBA_ASTC_6x6_Format,RGBA_ASTC_8x5_Format: RGBA_ASTC_8x5_Format,RGBA_ASTC_8x6_Format: RGBA_ASTC_8x6_Format,RGBA_ASTC_8x8_Format: RGBA_ASTC_8x8_Format,RGBA_BPTC_Format: RGBA_BPTC_Format,RGBA_ETC2_EAC_Format: RGBA_ETC2_EAC_Format,RGBA_PVRTC_2BPPV1_Format: RGBA_PVRTC_2BPPV1_Format,RGBA_PVRTC_4BPPV1_Format: RGBA_PVRTC_4BPPV1_Format,RGBA_S3TC_DXT1_Format: RGBA_S3TC_DXT1_Format,RGBA_S3TC_DXT3_Format: RGBA_S3TC_DXT3_Format,RGBA_S3TC_DXT5_Format: RGBA_S3TC_DXT5_Format,RGBDEncoding: RGBDEncoding,RGBEEncoding: RGBEEncoding,RGBEFormat: RGBEFormat,RGBFormat: RGBFormat,RGBIntegerFormat: RGBIntegerFormat,RGBM16Encoding: RGBM16Encoding,RGBM7Encoding: RGBM7Encoding,RGB_ETC1_Format: RGB_ETC1_Format,RGB_ETC2_Format: RGB_ETC2_Format,RGB_PVRTC_2BPPV1_Format: RGB_PVRTC_2BPPV1_Format,RGB_PVRTC_4BPPV1_Format: RGB_PVRTC_4BPPV1_Format,RGB_S3TC_DXT1_Format: RGB_S3TC_DXT1_Format,RGFormat: RGFormat,RGIntegerFormat: RGIntegerFormat,RawShaderMaterial: RawShaderMaterial,Ray: Ray,Raycaster: Raycaster,RectAreaLight: RectAreaLight,RedFormat: RedFormat,RedIntegerFormat: RedIntegerFormat,ReinhardToneMapping: ReinhardToneMapping,RepeatWrapping: RepeatWrapping$1,ReplaceStencilOp: ReplaceStencilOp,ReverseSubtractEquation: ReverseSubtractEquation,RingBufferGeometry: RingGeometry,RingGeometry: RingGeometry,SRGB8_ALPHA8_ASTC_10x10_Format: SRGB8_ALPHA8_ASTC_10x10_Format,SRGB8_ALPHA8_ASTC_10x5_Format: SRGB8_ALPHA8_ASTC_10x5_Format,SRGB8_ALPHA8_ASTC_10x6_Format: SRGB8_ALPHA8_ASTC_10x6_Format,SRGB8_ALPHA8_ASTC_10x8_Format: SRGB8_ALPHA8_ASTC_10x8_Format,SRGB8_ALPHA8_ASTC_12x10_Format: SRGB8_ALPHA8_ASTC_12x10_Format,SRGB8_ALPHA8_ASTC_12x12_Format: SRGB8_ALPHA8_ASTC_12x12_Format,SRGB8_ALPHA8_ASTC_4x4_Format: SRGB8_ALPHA8_ASTC_4x4_Format,SRGB8_ALPHA8_ASTC_5x4_Format: SRGB8_ALPHA8_ASTC_5x4_Format,SRGB8_ALPHA8_ASTC_5x5_Format: SRGB8_ALPHA8_ASTC_5x5_Format,SRGB8_ALPHA8_ASTC_6x5_Format: SRGB8_ALPHA8_ASTC_6x5_Format,SRGB8_ALPHA8_ASTC_6x6_Format: SRGB8_ALPHA8_ASTC_6x6_Format,SRGB8_ALPHA8_ASTC_8x5_Format: SRGB8_ALPHA8_ASTC_8x5_Format,SRGB8_ALPHA8_ASTC_8x6_Format: SRGB8_ALPHA8_ASTC_8x6_Format,SRGB8_ALPHA8_ASTC_8x8_Format: SRGB8_ALPHA8_ASTC_8x8_Format,Scene: Scene,SceneUtils: SceneUtils,ShaderChunk: ShaderChunk,ShaderLib: ShaderLib,ShaderMaterial: ShaderMaterial,ShadowMaterial: ShadowMaterial,Shape: Shape,ShapeBufferGeometry: ShapeGeometry,ShapeGeometry: ShapeGeometry,ShapePath: ShapePath,ShapeUtils: ShapeUtils,ShortType: ShortType,Skeleton: Skeleton,SkeletonHelper: SkeletonHelper,SkinnedMesh: SkinnedMesh,SmoothShading: SmoothShading,Sphere: Sphere,SphereBufferGeometry: SphereGeometry,SphereGeometry: SphereGeometry,Spherical: Spherical,SphericalHarmonics3: SphericalHarmonics3,SplineCurve: SplineCurve,SpotLight: SpotLight,SpotLightHelper: SpotLightHelper,Sprite: Sprite,SpriteMaterial: SpriteMaterial,SrcAlphaFactor: SrcAlphaFactor,SrcAlphaSaturateFactor: SrcAlphaSaturateFactor,SrcColorFactor: SrcColorFactor,StaticCopyUsage: StaticCopyUsage,StaticDrawUsage: StaticDrawUsage,StaticReadUsage: StaticReadUsage,StereoCamera: StereoCamera,StreamCopyUsage: StreamCopyUsage,StreamDrawUsage: StreamDrawUsage,StreamReadUsage: StreamReadUsage,StringKeyframeTrack: StringKeyframeTrack,SubtractEquation: SubtractEquation,SubtractiveBlending: SubtractiveBlending,TOUCH: TOUCH,TangentSpaceNormalMap: TangentSpaceNormalMap,TetrahedronBufferGeometry: TetrahedronGeometry,TetrahedronGeometry: TetrahedronGeometry,TextBufferGeometry: TextGeometry,TextGeometry: TextGeometry,Texture: Texture,TextureLoader: TextureLoader,TorusBufferGeometry: TorusGeometry,TorusGeometry: TorusGeometry,TorusKnotBufferGeometry: TorusKnotGeometry,TorusKnotGeometry: TorusKnotGeometry,Triangle: Triangle,TriangleFanDrawMode: TriangleFanDrawMode,TriangleStripDrawMode: TriangleStripDrawMode,TrianglesDrawMode: TrianglesDrawMode,TubeBufferGeometry: TubeGeometry,TubeGeometry: TubeGeometry,UVMapping: UVMapping,Uint16Attribute: Uint16Attribute,Uint16BufferAttribute: Uint16BufferAttribute,Uint32Attribute: Uint32Attribute,Uint32BufferAttribute: Uint32BufferAttribute,Uint8Attribute: Uint8Attribute,Uint8BufferAttribute: Uint8BufferAttribute,Uint8ClampedAttribute: Uint8ClampedAttribute,Uint8ClampedBufferAttribute: Uint8ClampedBufferAttribute,Uniform: Uniform,UniformsLib: UniformsLib,UniformsUtils: UniformsUtils,UnsignedByteType: UnsignedByteType,UnsignedInt248Type: UnsignedInt248Type,UnsignedIntType: UnsignedIntType,UnsignedShort4444Type: UnsignedShort4444Type,UnsignedShort5551Type: UnsignedShort5551Type,UnsignedShort565Type: UnsignedShort565Type,UnsignedShortType: UnsignedShortType,VSMShadowMap: VSMShadowMap,Vector2: Vector2,Vector3: Vector3$1,Vector4: Vector4,VectorKeyframeTrack: VectorKeyframeTrack,Vertex: Vertex,VertexColors: VertexColors,VideoTexture: VideoTexture,WebGL1Renderer: WebGL1Renderer,WebGLCubeRenderTarget: WebGLCubeRenderTarget,WebGLMultisampleRenderTarget: WebGLMultisampleRenderTarget,WebGLRenderTarget: WebGLRenderTarget,WebGLRenderTargetCube: WebGLRenderTargetCube,WebGLRenderer: WebGLRenderer,WebGLUtils: WebGLUtils,WireframeGeometry: WireframeGeometry,WireframeHelper: WireframeHelper,WrapAroundEnding: WrapAroundEnding,XHRLoader: XHRLoader,ZeroCurvatureEnding: ZeroCurvatureEnding,ZeroFactor: ZeroFactor,ZeroSlopeEnding: ZeroSlopeEnding,ZeroStencilOp: ZeroStencilOp,sRGBEncoding: sRGBEncoding});var BaseScript =
|
|
53478
|
-
/*#__PURE__*/
|
|
53479
|
-
function () {
|
|
53528
|
+
}var three_module=/*#__PURE__*/Object.freeze({__proto__:null,ACESFilmicToneMapping: ACESFilmicToneMapping,AddEquation: AddEquation,AddOperation: AddOperation,AdditiveAnimationBlendMode: AdditiveAnimationBlendMode,AdditiveBlending: AdditiveBlending,AlphaFormat: AlphaFormat,AlwaysDepth: AlwaysDepth,AlwaysStencilFunc: AlwaysStencilFunc,AmbientLight: AmbientLight,AmbientLightProbe: AmbientLightProbe,AnimationClip: AnimationClip,AnimationLoader: AnimationLoader,AnimationMixer: AnimationMixer,AnimationObjectGroup: AnimationObjectGroup,AnimationUtils: AnimationUtils,ArcCurve: ArcCurve,ArrayCamera: ArrayCamera,ArrowHelper: ArrowHelper,Audio: Audio,AudioAnalyser: AudioAnalyser,AudioContext: AudioContext,AudioListener: AudioListener,AudioLoader: AudioLoader,AxesHelper: AxesHelper,AxisHelper: AxisHelper,BackSide: BackSide,BasicDepthPacking: BasicDepthPacking,BasicShadowMap: BasicShadowMap,BinaryTextureLoader: BinaryTextureLoader,Bone: Bone,BooleanKeyframeTrack: BooleanKeyframeTrack,BoundingBoxHelper: BoundingBoxHelper,Box2: Box2,Box3: Box3,Box3Helper: Box3Helper,BoxBufferGeometry: BoxGeometry,BoxGeometry: BoxGeometry,BoxHelper: BoxHelper,BufferAttribute: BufferAttribute,BufferGeometry: BufferGeometry,BufferGeometryLoader: BufferGeometryLoader,ByteType: ByteType,Cache: Cache,Camera: Camera,CameraHelper: CameraHelper,CanvasRenderer: CanvasRenderer,CanvasTexture: CanvasTexture,CatmullRomCurve3: CatmullRomCurve3,CineonToneMapping: CineonToneMapping,CircleBufferGeometry: CircleGeometry,CircleGeometry: CircleGeometry,ClampToEdgeWrapping: ClampToEdgeWrapping,Clock: Clock,Color: Color,ColorKeyframeTrack: ColorKeyframeTrack,CompressedTexture: CompressedTexture,CompressedTextureLoader: CompressedTextureLoader,ConeBufferGeometry: ConeGeometry,ConeGeometry: ConeGeometry,CubeCamera: CubeCamera,CubeReflectionMapping: CubeReflectionMapping,CubeRefractionMapping: CubeRefractionMapping,CubeTexture: CubeTexture,CubeTextureLoader: CubeTextureLoader,CubeUVReflectionMapping: CubeUVReflectionMapping,CubeUVRefractionMapping: CubeUVRefractionMapping,CubicBezierCurve: CubicBezierCurve,CubicBezierCurve3: CubicBezierCurve3,CubicInterpolant: CubicInterpolant,CullFaceBack: CullFaceBack,CullFaceFront: CullFaceFront,CullFaceFrontBack: CullFaceFrontBack,CullFaceNone: CullFaceNone,Curve: Curve,CurvePath: CurvePath,CustomBlending: CustomBlending,CustomToneMapping: CustomToneMapping,CylinderBufferGeometry: CylinderGeometry,CylinderGeometry: CylinderGeometry,Cylindrical: Cylindrical,DataTexture: DataTexture,DataTexture2DArray: DataTexture2DArray,DataTexture3D: DataTexture3D,DataTextureLoader: DataTextureLoader,DataUtils: DataUtils,DecrementStencilOp: DecrementStencilOp,DecrementWrapStencilOp: DecrementWrapStencilOp,DefaultLoadingManager: DefaultLoadingManager,DepthFormat: DepthFormat,DepthStencilFormat: DepthStencilFormat,DepthTexture: DepthTexture,DirectionalLight: DirectionalLight,DirectionalLightHelper: DirectionalLightHelper,DiscreteInterpolant: DiscreteInterpolant,DodecahedronBufferGeometry: DodecahedronGeometry,DodecahedronGeometry: DodecahedronGeometry,DoubleSide: DoubleSide,DstAlphaFactor: DstAlphaFactor,DstColorFactor: DstColorFactor,DynamicBufferAttribute: DynamicBufferAttribute,DynamicCopyUsage: DynamicCopyUsage,DynamicDrawUsage: DynamicDrawUsage,DynamicReadUsage: DynamicReadUsage,EdgesGeometry: EdgesGeometry,EdgesHelper: EdgesHelper,EllipseCurve: EllipseCurve,EqualDepth: EqualDepth,EqualStencilFunc: EqualStencilFunc,EquirectangularReflectionMapping: EquirectangularReflectionMapping,EquirectangularRefractionMapping: EquirectangularRefractionMapping,Euler: Euler,EventDispatcher: EventDispatcher,ExtrudeBufferGeometry: ExtrudeGeometry,ExtrudeGeometry: ExtrudeGeometry,FaceColors: FaceColors,FileLoader: FileLoader,FlatShading: FlatShading,Float16BufferAttribute: Float16BufferAttribute,Float32Attribute: Float32Attribute,Float32BufferAttribute: Float32BufferAttribute,Float64Attribute: Float64Attribute,Float64BufferAttribute: Float64BufferAttribute,FloatType: FloatType$1,Fog: Fog,FogExp2: FogExp2,Font: Font,FontLoader: FontLoader,FrontSide: FrontSide,Frustum: Frustum,GLBufferAttribute: GLBufferAttribute,GLSL1: GLSL1,GLSL3: GLSL3,GammaEncoding: GammaEncoding,GreaterDepth: GreaterDepth,GreaterEqualDepth: GreaterEqualDepth,GreaterEqualStencilFunc: GreaterEqualStencilFunc,GreaterStencilFunc: GreaterStencilFunc,GridHelper: GridHelper,Group: Group,HalfFloatType: HalfFloatType,HemisphereLight: HemisphereLight,HemisphereLightHelper: HemisphereLightHelper,HemisphereLightProbe: HemisphereLightProbe,IcosahedronBufferGeometry: IcosahedronGeometry,IcosahedronGeometry: IcosahedronGeometry,ImageBitmapLoader: ImageBitmapLoader,ImageLoader: ImageLoader,ImageUtils: ImageUtils,ImmediateRenderObject: ImmediateRenderObject,IncrementStencilOp: IncrementStencilOp,IncrementWrapStencilOp: IncrementWrapStencilOp,InstancedBufferAttribute: InstancedBufferAttribute,InstancedBufferGeometry: InstancedBufferGeometry,InstancedInterleavedBuffer: InstancedInterleavedBuffer,InstancedMesh: InstancedMesh,Int16Attribute: Int16Attribute,Int16BufferAttribute: Int16BufferAttribute,Int32Attribute: Int32Attribute,Int32BufferAttribute: Int32BufferAttribute,Int8Attribute: Int8Attribute,Int8BufferAttribute: Int8BufferAttribute,IntType: IntType,InterleavedBuffer: InterleavedBuffer,InterleavedBufferAttribute: InterleavedBufferAttribute,Interpolant: Interpolant,InterpolateDiscrete: InterpolateDiscrete,InterpolateLinear: InterpolateLinear,InterpolateSmooth: InterpolateSmooth,InvertStencilOp: InvertStencilOp,JSONLoader: JSONLoader,KeepStencilOp: KeepStencilOp,KeyframeTrack: KeyframeTrack,LOD: LOD,LatheBufferGeometry: LatheGeometry,LatheGeometry: LatheGeometry,Layers: Layers,LensFlare: LensFlare,LessDepth: LessDepth,LessEqualDepth: LessEqualDepth,LessEqualStencilFunc: LessEqualStencilFunc,LessStencilFunc: LessStencilFunc,Light: Light,LightProbe: LightProbe,Line: Line,Line3: Line3,LineBasicMaterial: LineBasicMaterial,LineCurve: LineCurve,LineCurve3: LineCurve3,LineDashedMaterial: LineDashedMaterial,LineLoop: LineLoop,LinePieces: LinePieces,LineSegments: LineSegments,LineStrip: LineStrip,LinearEncoding: LinearEncoding,LinearFilter: LinearFilter,LinearInterpolant: LinearInterpolant,LinearMipMapLinearFilter: LinearMipMapLinearFilter,LinearMipMapNearestFilter: LinearMipMapNearestFilter,LinearMipmapLinearFilter: LinearMipmapLinearFilter,LinearMipmapNearestFilter: LinearMipmapNearestFilter,LinearToneMapping: LinearToneMapping,Loader: Loader,LoaderUtils: LoaderUtils,LoadingManager: LoadingManager,LogLuvEncoding: LogLuvEncoding,LoopOnce: LoopOnce,LoopPingPong: LoopPingPong,LoopRepeat: LoopRepeat,LuminanceAlphaFormat: LuminanceAlphaFormat,LuminanceFormat: LuminanceFormat,MOUSE: MOUSE,Material: Material,MaterialLoader: MaterialLoader,Math: MathUtils,MathUtils: MathUtils,Matrix3: Matrix3,Matrix4: Matrix4,MaxEquation: MaxEquation,Mesh: Mesh,MeshBasicMaterial: MeshBasicMaterial,MeshDepthMaterial: MeshDepthMaterial,MeshDistanceMaterial: MeshDistanceMaterial,MeshFaceMaterial: MeshFaceMaterial,MeshLambertMaterial: MeshLambertMaterial,MeshMatcapMaterial: MeshMatcapMaterial,MeshNormalMaterial: MeshNormalMaterial,MeshPhongMaterial: MeshPhongMaterial,MeshPhysicalMaterial: MeshPhysicalMaterial,MeshStandardMaterial: MeshStandardMaterial,MeshToonMaterial: MeshToonMaterial,MinEquation: MinEquation,MirroredRepeatWrapping: MirroredRepeatWrapping,MixOperation: MixOperation,MultiMaterial: MultiMaterial,MultiplyBlending: MultiplyBlending,MultiplyOperation: MultiplyOperation,NearestFilter: NearestFilter,NearestMipMapLinearFilter: NearestMipMapLinearFilter,NearestMipMapNearestFilter: NearestMipMapNearestFilter,NearestMipmapLinearFilter: NearestMipmapLinearFilter,NearestMipmapNearestFilter: NearestMipmapNearestFilter,NeverDepth: NeverDepth,NeverStencilFunc: NeverStencilFunc,NoBlending: NoBlending,NoColors: NoColors,NoToneMapping: NoToneMapping,NormalAnimationBlendMode: NormalAnimationBlendMode,NormalBlending: NormalBlending,NotEqualDepth: NotEqualDepth,NotEqualStencilFunc: NotEqualStencilFunc,NumberKeyframeTrack: NumberKeyframeTrack,Object3D: Object3D,ObjectLoader: ObjectLoader,ObjectSpaceNormalMap: ObjectSpaceNormalMap,OctahedronBufferGeometry: OctahedronGeometry,OctahedronGeometry: OctahedronGeometry,OneFactor: OneFactor,OneMinusDstAlphaFactor: OneMinusDstAlphaFactor,OneMinusDstColorFactor: OneMinusDstColorFactor,OneMinusSrcAlphaFactor: OneMinusSrcAlphaFactor,OneMinusSrcColorFactor: OneMinusSrcColorFactor,OrthographicCamera: OrthographicCamera,PCFShadowMap: PCFShadowMap,PCFSoftShadowMap: PCFSoftShadowMap,PMREMGenerator: PMREMGenerator,ParametricBufferGeometry: ParametricGeometry,ParametricGeometry: ParametricGeometry,Particle: Particle,ParticleBasicMaterial: ParticleBasicMaterial,ParticleSystem: ParticleSystem,ParticleSystemMaterial: ParticleSystemMaterial,Path: Path,PerspectiveCamera: PerspectiveCamera,Plane: Plane,PlaneBufferGeometry: PlaneGeometry,PlaneGeometry: PlaneGeometry,PlaneHelper: PlaneHelper,PointCloud: PointCloud,PointCloudMaterial: PointCloudMaterial,PointLight: PointLight,PointLightHelper: PointLightHelper,Points: Points,PointsMaterial: PointsMaterial,PolarGridHelper: PolarGridHelper,PolyhedronBufferGeometry: PolyhedronGeometry,PolyhedronGeometry: PolyhedronGeometry,PositionalAudio: PositionalAudio,PropertyBinding: PropertyBinding,PropertyMixer: PropertyMixer,QuadraticBezierCurve: QuadraticBezierCurve,QuadraticBezierCurve3: QuadraticBezierCurve3,Quaternion: Quaternion,QuaternionKeyframeTrack: QuaternionKeyframeTrack,QuaternionLinearInterpolant: QuaternionLinearInterpolant,REVISION: REVISION,RGBADepthPacking: RGBADepthPacking,RGBAFormat: RGBAFormat,RGBAIntegerFormat: RGBAIntegerFormat,RGBA_ASTC_10x10_Format: RGBA_ASTC_10x10_Format,RGBA_ASTC_10x5_Format: RGBA_ASTC_10x5_Format,RGBA_ASTC_10x6_Format: RGBA_ASTC_10x6_Format,RGBA_ASTC_10x8_Format: RGBA_ASTC_10x8_Format,RGBA_ASTC_12x10_Format: RGBA_ASTC_12x10_Format,RGBA_ASTC_12x12_Format: RGBA_ASTC_12x12_Format,RGBA_ASTC_4x4_Format: RGBA_ASTC_4x4_Format,RGBA_ASTC_5x4_Format: RGBA_ASTC_5x4_Format,RGBA_ASTC_5x5_Format: RGBA_ASTC_5x5_Format,RGBA_ASTC_6x5_Format: RGBA_ASTC_6x5_Format,RGBA_ASTC_6x6_Format: RGBA_ASTC_6x6_Format,RGBA_ASTC_8x5_Format: RGBA_ASTC_8x5_Format,RGBA_ASTC_8x6_Format: RGBA_ASTC_8x6_Format,RGBA_ASTC_8x8_Format: RGBA_ASTC_8x8_Format,RGBA_BPTC_Format: RGBA_BPTC_Format,RGBA_ETC2_EAC_Format: RGBA_ETC2_EAC_Format,RGBA_PVRTC_2BPPV1_Format: RGBA_PVRTC_2BPPV1_Format,RGBA_PVRTC_4BPPV1_Format: RGBA_PVRTC_4BPPV1_Format,RGBA_S3TC_DXT1_Format: RGBA_S3TC_DXT1_Format,RGBA_S3TC_DXT3_Format: RGBA_S3TC_DXT3_Format,RGBA_S3TC_DXT5_Format: RGBA_S3TC_DXT5_Format,RGBDEncoding: RGBDEncoding,RGBEEncoding: RGBEEncoding,RGBEFormat: RGBEFormat,RGBFormat: RGBFormat,RGBIntegerFormat: RGBIntegerFormat,RGBM16Encoding: RGBM16Encoding,RGBM7Encoding: RGBM7Encoding,RGB_ETC1_Format: RGB_ETC1_Format,RGB_ETC2_Format: RGB_ETC2_Format,RGB_PVRTC_2BPPV1_Format: RGB_PVRTC_2BPPV1_Format,RGB_PVRTC_4BPPV1_Format: RGB_PVRTC_4BPPV1_Format,RGB_S3TC_DXT1_Format: RGB_S3TC_DXT1_Format,RGFormat: RGFormat,RGIntegerFormat: RGIntegerFormat,RawShaderMaterial: RawShaderMaterial,Ray: Ray,Raycaster: Raycaster,RectAreaLight: RectAreaLight,RedFormat: RedFormat,RedIntegerFormat: RedIntegerFormat,ReinhardToneMapping: ReinhardToneMapping,RepeatWrapping: RepeatWrapping$1,ReplaceStencilOp: ReplaceStencilOp,ReverseSubtractEquation: ReverseSubtractEquation,RingBufferGeometry: RingGeometry,RingGeometry: RingGeometry,SRGB8_ALPHA8_ASTC_10x10_Format: SRGB8_ALPHA8_ASTC_10x10_Format,SRGB8_ALPHA8_ASTC_10x5_Format: SRGB8_ALPHA8_ASTC_10x5_Format,SRGB8_ALPHA8_ASTC_10x6_Format: SRGB8_ALPHA8_ASTC_10x6_Format,SRGB8_ALPHA8_ASTC_10x8_Format: SRGB8_ALPHA8_ASTC_10x8_Format,SRGB8_ALPHA8_ASTC_12x10_Format: SRGB8_ALPHA8_ASTC_12x10_Format,SRGB8_ALPHA8_ASTC_12x12_Format: SRGB8_ALPHA8_ASTC_12x12_Format,SRGB8_ALPHA8_ASTC_4x4_Format: SRGB8_ALPHA8_ASTC_4x4_Format,SRGB8_ALPHA8_ASTC_5x4_Format: SRGB8_ALPHA8_ASTC_5x4_Format,SRGB8_ALPHA8_ASTC_5x5_Format: SRGB8_ALPHA8_ASTC_5x5_Format,SRGB8_ALPHA8_ASTC_6x5_Format: SRGB8_ALPHA8_ASTC_6x5_Format,SRGB8_ALPHA8_ASTC_6x6_Format: SRGB8_ALPHA8_ASTC_6x6_Format,SRGB8_ALPHA8_ASTC_8x5_Format: SRGB8_ALPHA8_ASTC_8x5_Format,SRGB8_ALPHA8_ASTC_8x6_Format: SRGB8_ALPHA8_ASTC_8x6_Format,SRGB8_ALPHA8_ASTC_8x8_Format: SRGB8_ALPHA8_ASTC_8x8_Format,Scene: Scene,SceneUtils: SceneUtils,ShaderChunk: ShaderChunk,ShaderLib: ShaderLib,ShaderMaterial: ShaderMaterial,ShadowMaterial: ShadowMaterial,Shape: Shape,ShapeBufferGeometry: ShapeGeometry,ShapeGeometry: ShapeGeometry,ShapePath: ShapePath,ShapeUtils: ShapeUtils,ShortType: ShortType,Skeleton: Skeleton,SkeletonHelper: SkeletonHelper,SkinnedMesh: SkinnedMesh,SmoothShading: SmoothShading,Sphere: Sphere,SphereBufferGeometry: SphereGeometry,SphereGeometry: SphereGeometry,Spherical: Spherical,SphericalHarmonics3: SphericalHarmonics3,SplineCurve: SplineCurve,SpotLight: SpotLight,SpotLightHelper: SpotLightHelper,Sprite: Sprite,SpriteMaterial: SpriteMaterial,SrcAlphaFactor: SrcAlphaFactor,SrcAlphaSaturateFactor: SrcAlphaSaturateFactor,SrcColorFactor: SrcColorFactor,StaticCopyUsage: StaticCopyUsage,StaticDrawUsage: StaticDrawUsage,StaticReadUsage: StaticReadUsage,StereoCamera: StereoCamera,StreamCopyUsage: StreamCopyUsage,StreamDrawUsage: StreamDrawUsage,StreamReadUsage: StreamReadUsage,StringKeyframeTrack: StringKeyframeTrack,SubtractEquation: SubtractEquation,SubtractiveBlending: SubtractiveBlending,TOUCH: TOUCH,TangentSpaceNormalMap: TangentSpaceNormalMap,TetrahedronBufferGeometry: TetrahedronGeometry,TetrahedronGeometry: TetrahedronGeometry,TextBufferGeometry: TextGeometry,TextGeometry: TextGeometry,Texture: Texture,TextureLoader: TextureLoader,TorusBufferGeometry: TorusGeometry,TorusGeometry: TorusGeometry,TorusKnotBufferGeometry: TorusKnotGeometry,TorusKnotGeometry: TorusKnotGeometry,Triangle: Triangle,TriangleFanDrawMode: TriangleFanDrawMode,TriangleStripDrawMode: TriangleStripDrawMode,TrianglesDrawMode: TrianglesDrawMode,TubeBufferGeometry: TubeGeometry,TubeGeometry: TubeGeometry,UVMapping: UVMapping,Uint16Attribute: Uint16Attribute,Uint16BufferAttribute: Uint16BufferAttribute,Uint32Attribute: Uint32Attribute,Uint32BufferAttribute: Uint32BufferAttribute,Uint8Attribute: Uint8Attribute,Uint8BufferAttribute: Uint8BufferAttribute,Uint8ClampedAttribute: Uint8ClampedAttribute,Uint8ClampedBufferAttribute: Uint8ClampedBufferAttribute,Uniform: Uniform,UniformsLib: UniformsLib,UniformsUtils: UniformsUtils,UnsignedByteType: UnsignedByteType,UnsignedInt248Type: UnsignedInt248Type,UnsignedIntType: UnsignedIntType,UnsignedShort4444Type: UnsignedShort4444Type,UnsignedShort5551Type: UnsignedShort5551Type,UnsignedShort565Type: UnsignedShort565Type,UnsignedShortType: UnsignedShortType,VSMShadowMap: VSMShadowMap,Vector2: Vector2,Vector3: Vector3$1,Vector4: Vector4,VectorKeyframeTrack: VectorKeyframeTrack,Vertex: Vertex,VertexColors: VertexColors,VideoTexture: VideoTexture,WebGL1Renderer: WebGL1Renderer,WebGLCubeRenderTarget: WebGLCubeRenderTarget,WebGLMultisampleRenderTarget: WebGLMultisampleRenderTarget,WebGLRenderTarget: WebGLRenderTarget,WebGLRenderTargetCube: WebGLRenderTargetCube,WebGLRenderer: WebGLRenderer,WebGLUtils: WebGLUtils,WireframeGeometry: WireframeGeometry,WireframeHelper: WireframeHelper,WrapAroundEnding: WrapAroundEnding,XHRLoader: XHRLoader,ZeroCurvatureEnding: ZeroCurvatureEnding,ZeroFactor: ZeroFactor,ZeroSlopeEnding: ZeroSlopeEnding,ZeroStencilOp: ZeroStencilOp,sRGBEncoding: sRGBEncoding});var BaseScript = /*#__PURE__*/function () {
|
|
53480
53529
|
_createClass(BaseScript, [{
|
|
53481
53530
|
key: "__check",
|
|
53482
53531
|
value: function __check() {
|
|
@@ -54104,9 +54153,7 @@ var AUDIO_UNABLE_TO_LOAD_SOUND = "".concat(PREFIX, " Unable to load sound, sorry
|
|
|
54104
54153
|
};
|
|
54105
54154
|
var COMBINATION_DIVIDER = '+';
|
|
54106
54155
|
|
|
54107
|
-
var Keyboard =
|
|
54108
|
-
/*#__PURE__*/
|
|
54109
|
-
function () {
|
|
54156
|
+
var Keyboard = /*#__PURE__*/function () {
|
|
54110
54157
|
function Keyboard() {
|
|
54111
54158
|
var _this = this;
|
|
54112
54159
|
|
|
@@ -54245,9 +54292,7 @@ var createElementFromSelector = function createElementFromSelector(selector) {
|
|
|
54245
54292
|
var DEFAULT_WIDTH = 800;
|
|
54246
54293
|
var DEFAULT_RATIO = DEFAULT_WIDTH / DEFAULT_HEIGHT;
|
|
54247
54294
|
|
|
54248
|
-
var Config =
|
|
54249
|
-
/*#__PURE__*/
|
|
54250
|
-
function () {
|
|
54295
|
+
var Config = /*#__PURE__*/function () {
|
|
54251
54296
|
function Config() {
|
|
54252
54297
|
_classCallCheck(this, Config);
|
|
54253
54298
|
|
|
@@ -54295,9 +54340,9 @@ function () {
|
|
|
54295
54340
|
value: function setConfig(config) {
|
|
54296
54341
|
if (this.isDefault) {
|
|
54297
54342
|
this.isDefault = false;
|
|
54298
|
-
this.config = _objectSpread2({}, this.default,
|
|
54343
|
+
this.config = _objectSpread2(_objectSpread2({}, this.default), config);
|
|
54299
54344
|
} else {
|
|
54300
|
-
this.config = _objectSpread2({}, this.config, {
|
|
54345
|
+
this.config = _objectSpread2(_objectSpread2({}, this.config), {}, {
|
|
54301
54346
|
config: config
|
|
54302
54347
|
});
|
|
54303
54348
|
}
|
|
@@ -54374,7 +54419,7 @@ function () {
|
|
|
54374
54419
|
w = _ref.w,
|
|
54375
54420
|
ratio = _ref.ratio;
|
|
54376
54421
|
|
|
54377
|
-
this.config.screen = _objectSpread2({}, this.config.screen, {
|
|
54422
|
+
this.config.screen = _objectSpread2(_objectSpread2({}, this.config.screen), {}, {
|
|
54378
54423
|
h: h,
|
|
54379
54424
|
w: w,
|
|
54380
54425
|
ratio: ratio,
|
|
@@ -54402,9 +54447,7 @@ function () {
|
|
|
54402
54447
|
return Config;
|
|
54403
54448
|
}();
|
|
54404
54449
|
|
|
54405
|
-
var Config$1 = new Config();var Universe =
|
|
54406
|
-
/*#__PURE__*/
|
|
54407
|
-
function () {
|
|
54450
|
+
var Config$1 = new Config();var Universe = /*#__PURE__*/function () {
|
|
54408
54451
|
function Universe() {
|
|
54409
54452
|
var _this = this;
|
|
54410
54453
|
|
|
@@ -54632,9 +54675,7 @@ var HASH_CHANGE = 'hashchange';var lib_constants=/*#__PURE__*/Object.freeze({__p
|
|
|
54632
54675
|
};
|
|
54633
54676
|
var isLevelName = function isLevelName(level) {
|
|
54634
54677
|
return level.startsWith(DIVIDER);
|
|
54635
|
-
};var Images =
|
|
54636
|
-
/*#__PURE__*/
|
|
54637
|
-
function () {
|
|
54678
|
+
};var Images = /*#__PURE__*/function () {
|
|
54638
54679
|
function Images() {
|
|
54639
54680
|
var _this = this;
|
|
54640
54681
|
|
|
@@ -54767,9 +54808,7 @@ var Images$1 = new Images();var mapShadowTypeToShadowMap = function mapShadowTyp
|
|
|
54767
54808
|
|
|
54768
54809
|
var shadowType = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_SHADOWTYPE;
|
|
54769
54810
|
return (_SHADOW_TYPES$BASIC$S = {}, _defineProperty(_SHADOW_TYPES$BASIC$S, SHADOW_TYPES.BASIC, BasicShadowMap), _defineProperty(_SHADOW_TYPES$BASIC$S, SHADOW_TYPES.SOFT, PCFSoftShadowMap), _defineProperty(_SHADOW_TYPES$BASIC$S, SHADOW_TYPES.HARD, PCFShadowMap), _SHADOW_TYPES$BASIC$S)[shadowType] || BasicShadowMap;
|
|
54770
|
-
};var Scene$1 =
|
|
54771
|
-
/*#__PURE__*/
|
|
54772
|
-
function () {
|
|
54811
|
+
};var Scene$1 = /*#__PURE__*/function () {
|
|
54773
54812
|
function Scene$1() {
|
|
54774
54813
|
var _this = this;
|
|
54775
54814
|
|
|
@@ -55074,9 +55113,7 @@ var MOUSE_MOVE = 'mouseMove';
|
|
|
55074
55113
|
var ELEMENT_CLICK = 'elementClick';
|
|
55075
55114
|
var ELEMENT_DESELECT = 'elementDeselect';
|
|
55076
55115
|
|
|
55077
|
-
var Mouse =
|
|
55078
|
-
/*#__PURE__*/
|
|
55079
|
-
function (_EventDispatcher) {
|
|
55116
|
+
var Mouse = /*#__PURE__*/function (_EventDispatcher) {
|
|
55080
55117
|
_inherits(Mouse, _EventDispatcher);
|
|
55081
55118
|
|
|
55082
55119
|
var _super = _createSuper(Mouse);
|
|
@@ -55265,9 +55302,7 @@ function (_EventDispatcher) {
|
|
|
55265
55302
|
GAMEPADAPI: 'gamepadapi',
|
|
55266
55303
|
MEMORY: 'memory'
|
|
55267
55304
|
};
|
|
55268
|
-
var Features =
|
|
55269
|
-
/*#__PURE__*/
|
|
55270
|
-
function () {
|
|
55305
|
+
var Features = /*#__PURE__*/function () {
|
|
55271
55306
|
function Features() {
|
|
55272
55307
|
_classCallCheck(this, Features);
|
|
55273
55308
|
|
|
@@ -56199,7 +56234,7 @@ function applyMiddleware() {
|
|
|
56199
56234
|
|
|
56200
56235
|
var thunk = createThunkMiddleware();
|
|
56201
56236
|
thunk.withExtraArgument = createThunkMiddleware;var name = "mage-engine";
|
|
56202
|
-
var version = "3.16.
|
|
56237
|
+
var version = "3.16.4";
|
|
56203
56238
|
var description = "A WebGL Javascript Game Engine, built on top of THREE.js and many other libraries.";
|
|
56204
56239
|
var main = "dist/mage.js";
|
|
56205
56240
|
var author = {
|
|
@@ -56256,20 +56291,20 @@ var dependencies = {
|
|
|
56256
56291
|
xstate: "^4.8.0"
|
|
56257
56292
|
};
|
|
56258
56293
|
var devDependencies = {
|
|
56259
|
-
"@babel/cli": "
|
|
56260
|
-
"@babel/core": "
|
|
56261
|
-
"@babel/node": "7.
|
|
56262
|
-
"@babel/plugin-proposal-class-properties": "7.
|
|
56263
|
-
"@babel/polyfill": "7.
|
|
56264
|
-
"@babel/preset-env": "7.
|
|
56265
|
-
"@babel/register": "7.
|
|
56294
|
+
"@babel/cli": "7.17.3",
|
|
56295
|
+
"@babel/core": "7.17.5",
|
|
56296
|
+
"@babel/node": "7.16.8",
|
|
56297
|
+
"@babel/plugin-proposal-class-properties": "7.16.7",
|
|
56298
|
+
"@babel/polyfill": "7.12.1",
|
|
56299
|
+
"@babel/preset-env": "7.16.11",
|
|
56300
|
+
"@babel/register": "7.17.0",
|
|
56266
56301
|
"@rollup/plugin-babel": "^5.2.1",
|
|
56267
56302
|
"@rollup/plugin-commonjs": "^16.0.0",
|
|
56268
56303
|
"@rollup/plugin-json": "4.0.1",
|
|
56269
56304
|
"@rollup/plugin-node-resolve": "^10.0.0",
|
|
56270
56305
|
"@rollup/plugin-replace": "^2.3.4",
|
|
56271
|
-
"babel-loader": "8.
|
|
56272
|
-
"babel-plugin-inferno": "6.
|
|
56306
|
+
"babel-loader": "8.2.3",
|
|
56307
|
+
"babel-plugin-inferno": "6.3.0",
|
|
56273
56308
|
concurrently: "^5.3.0",
|
|
56274
56309
|
"http-server": "^0.12.3",
|
|
56275
56310
|
rimraf: "^3.0.0",
|
|
@@ -56310,12 +56345,12 @@ var storage = (function () {
|
|
|
56310
56345
|
|
|
56311
56346
|
switch (action.type) {
|
|
56312
56347
|
case SAVE_STARTED:
|
|
56313
|
-
return _objectSpread2({}, state, {
|
|
56348
|
+
return _objectSpread2(_objectSpread2({}, state), {}, {
|
|
56314
56349
|
saving: true
|
|
56315
56350
|
});
|
|
56316
56351
|
|
|
56317
56352
|
case SAVE_COMPLETED:
|
|
56318
|
-
return _objectSpread2({}, state, {
|
|
56353
|
+
return _objectSpread2(_objectSpread2({}, state), {}, {
|
|
56319
56354
|
saving: false,
|
|
56320
56355
|
error: false,
|
|
56321
56356
|
sceneName: action.currentScene,
|
|
@@ -56324,25 +56359,25 @@ var storage = (function () {
|
|
|
56324
56359
|
});
|
|
56325
56360
|
|
|
56326
56361
|
case SAVE_ERROR:
|
|
56327
|
-
return _objectSpread2({}, state, {
|
|
56362
|
+
return _objectSpread2(_objectSpread2({}, state), {}, {
|
|
56328
56363
|
saving: false,
|
|
56329
56364
|
error: true,
|
|
56330
56365
|
errorDetails: action.errorDetails
|
|
56331
56366
|
});
|
|
56332
56367
|
|
|
56333
56368
|
case LOAD_STARTED:
|
|
56334
|
-
return _objectSpread2({}, state, {
|
|
56369
|
+
return _objectSpread2(_objectSpread2({}, state), {}, {
|
|
56335
56370
|
loading: true
|
|
56336
56371
|
});
|
|
56337
56372
|
|
|
56338
56373
|
case LOAD_COMPLETED:
|
|
56339
|
-
return _objectSpread2({}, state, {
|
|
56374
|
+
return _objectSpread2(_objectSpread2({}, state), {}, {
|
|
56340
56375
|
loading: false,
|
|
56341
56376
|
error: false
|
|
56342
56377
|
});
|
|
56343
56378
|
|
|
56344
56379
|
case LOAD_ERROR:
|
|
56345
|
-
return _objectSpread2({}, state, {
|
|
56380
|
+
return _objectSpread2(_objectSpread2({}, state), {}, {
|
|
56346
56381
|
loading: false,
|
|
56347
56382
|
error: true,
|
|
56348
56383
|
errorDetails: action.errorDetails
|
|
@@ -56363,52 +56398,52 @@ var input = (function () {
|
|
|
56363
56398
|
|
|
56364
56399
|
switch (action.type) {
|
|
56365
56400
|
case INPUT_ENABLED:
|
|
56366
|
-
return _objectSpread2({}, state, {
|
|
56401
|
+
return _objectSpread2(_objectSpread2({}, state), {}, {
|
|
56367
56402
|
keyboard: true,
|
|
56368
56403
|
mouse: true,
|
|
56369
56404
|
gamepad: true
|
|
56370
56405
|
});
|
|
56371
56406
|
|
|
56372
56407
|
case KEYBOARD_ENABLED:
|
|
56373
|
-
return _objectSpread2({}, state, {
|
|
56408
|
+
return _objectSpread2(_objectSpread2({}, state), {}, {
|
|
56374
56409
|
keyboard: true
|
|
56375
56410
|
});
|
|
56376
56411
|
|
|
56377
56412
|
case MOUSE_ENABLED:
|
|
56378
|
-
return _objectSpread2({}, state, {
|
|
56413
|
+
return _objectSpread2(_objectSpread2({}, state), {}, {
|
|
56379
56414
|
mouse: true
|
|
56380
56415
|
});
|
|
56381
56416
|
|
|
56382
56417
|
case GAMEPAD_ENABLED:
|
|
56383
|
-
return _objectSpread2({}, state, {
|
|
56418
|
+
return _objectSpread2(_objectSpread2({}, state), {}, {
|
|
56384
56419
|
gamepad: true
|
|
56385
56420
|
});
|
|
56386
56421
|
|
|
56387
56422
|
case INPUT_DISABLED:
|
|
56388
|
-
return _objectSpread2({}, state, {
|
|
56423
|
+
return _objectSpread2(_objectSpread2({}, state), {}, {
|
|
56389
56424
|
keyboard: false,
|
|
56390
56425
|
mouse: false,
|
|
56391
56426
|
gamepad: false
|
|
56392
56427
|
});
|
|
56393
56428
|
|
|
56394
56429
|
case KEYBOARD_DISABLED:
|
|
56395
|
-
return _objectSpread2({}, state, {
|
|
56430
|
+
return _objectSpread2(_objectSpread2({}, state), {}, {
|
|
56396
56431
|
keyboard: false
|
|
56397
56432
|
});
|
|
56398
56433
|
|
|
56399
56434
|
case MOUSE_DISABLED:
|
|
56400
|
-
return _objectSpread2({}, state, {
|
|
56435
|
+
return _objectSpread2(_objectSpread2({}, state), {}, {
|
|
56401
56436
|
mouse: false
|
|
56402
56437
|
});
|
|
56403
56438
|
|
|
56404
56439
|
case GAMEPAD_DISABLED:
|
|
56405
|
-
return _objectSpread2({}, state, {
|
|
56440
|
+
return _objectSpread2(_objectSpread2({}, state), {}, {
|
|
56406
56441
|
gamepad: false
|
|
56407
56442
|
});
|
|
56408
56443
|
|
|
56409
56444
|
case GAMEPAD_CONNECTED:
|
|
56410
56445
|
case GAMEPAD_DISCONNECTED:
|
|
56411
|
-
return _objectSpread2({}, state, {
|
|
56446
|
+
return _objectSpread2(_objectSpread2({}, state), {}, {
|
|
56412
56447
|
gamepads: action.gamepads
|
|
56413
56448
|
});
|
|
56414
56449
|
|
|
@@ -56424,7 +56459,7 @@ var network = (function () {
|
|
|
56424
56459
|
|
|
56425
56460
|
switch (action.type) {
|
|
56426
56461
|
case NETWORK_CHANGED:
|
|
56427
|
-
return _objectSpread2({}, state, {
|
|
56462
|
+
return _objectSpread2(_objectSpread2({}, state), {}, {
|
|
56428
56463
|
isOnline: action.isOnline
|
|
56429
56464
|
});
|
|
56430
56465
|
|
|
@@ -56440,7 +56475,7 @@ var ui = (function () {
|
|
|
56440
56475
|
|
|
56441
56476
|
switch (action.type) {
|
|
56442
56477
|
case UI_LOADING_SCREEN:
|
|
56443
|
-
return _objectSpread2({}, state, {
|
|
56478
|
+
return _objectSpread2(_objectSpread2({}, state), {}, {
|
|
56444
56479
|
loadingScreenVisible: action.loadingScreenVisible
|
|
56445
56480
|
});
|
|
56446
56481
|
|
|
@@ -56456,7 +56491,7 @@ var location$1 = (function () {
|
|
|
56456
56491
|
|
|
56457
56492
|
switch (action.type) {
|
|
56458
56493
|
case LOCATION_PATH_CHANGE:
|
|
56459
|
-
return _objectSpread2({}, state, {
|
|
56494
|
+
return _objectSpread2(_objectSpread2({}, state), {}, {
|
|
56460
56495
|
path: action.path
|
|
56461
56496
|
});
|
|
56462
56497
|
|
|
@@ -56468,7 +56503,7 @@ var location$1 = (function () {
|
|
|
56468
56503
|
switch (action.type) {
|
|
56469
56504
|
case RESET:
|
|
56470
56505
|
if (Object.keys(action.state).length > 0) {
|
|
56471
|
-
return _objectSpread2({}, state,
|
|
56506
|
+
return _objectSpread2(_objectSpread2({}, state), action.state);
|
|
56472
56507
|
} else {
|
|
56473
56508
|
return state;
|
|
56474
56509
|
}
|
|
@@ -56518,7 +56553,7 @@ var defaultMiddleware = function defaultMiddleware() {
|
|
|
56518
56553
|
|
|
56519
56554
|
var combineReducers$1 = function combineReducers$1() {
|
|
56520
56555
|
var reducers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
56521
|
-
return combineReducers(_objectSpread2({}, reducers,
|
|
56556
|
+
return combineReducers(_objectSpread2(_objectSpread2({}, reducers), DEFAULT_REDUCERS));
|
|
56522
56557
|
};
|
|
56523
56558
|
|
|
56524
56559
|
var getState = function getState() {
|
|
@@ -56577,12 +56612,12 @@ var getConnectedGamepads = function getConnectedGamepads() {
|
|
|
56577
56612
|
var list = navigator.getGamepads ? navigator.getGamepads() : navigator.webkitGetGamepads ? navigator.webkitGetGamepads() : [];
|
|
56578
56613
|
if (typeof list === 'array') return list;
|
|
56579
56614
|
var gamepads = [];
|
|
56580
|
-
|
|
56581
|
-
var
|
|
56582
|
-
|
|
56615
|
+
|
|
56616
|
+
var _iterator = _createForOfIteratorHelper(navigator.getGamepads()),
|
|
56617
|
+
_step;
|
|
56583
56618
|
|
|
56584
56619
|
try {
|
|
56585
|
-
for (
|
|
56620
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
56586
56621
|
var gamepad = _step.value;
|
|
56587
56622
|
|
|
56588
56623
|
if (isValidGamepad(gamepad)) {
|
|
@@ -56590,18 +56625,9 @@ var getConnectedGamepads = function getConnectedGamepads() {
|
|
|
56590
56625
|
}
|
|
56591
56626
|
}
|
|
56592
56627
|
} catch (err) {
|
|
56593
|
-
|
|
56594
|
-
_iteratorError = err;
|
|
56628
|
+
_iterator.e(err);
|
|
56595
56629
|
} finally {
|
|
56596
|
-
|
|
56597
|
-
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
56598
|
-
_iterator.return();
|
|
56599
|
-
}
|
|
56600
|
-
} finally {
|
|
56601
|
-
if (_didIteratorError) {
|
|
56602
|
-
throw _iteratorError;
|
|
56603
|
-
}
|
|
56604
|
-
}
|
|
56630
|
+
_iterator.f();
|
|
56605
56631
|
}
|
|
56606
56632
|
|
|
56607
56633
|
return gamepads;
|
|
@@ -56626,9 +56652,7 @@ var parseButton = function parseButton(button, index) {
|
|
|
56626
56652
|
};
|
|
56627
56653
|
};
|
|
56628
56654
|
|
|
56629
|
-
var Gamepad =
|
|
56630
|
-
/*#__PURE__*/
|
|
56631
|
-
function (_EventDispatcher) {
|
|
56655
|
+
var Gamepad = /*#__PURE__*/function (_EventDispatcher) {
|
|
56632
56656
|
_inherits(Gamepad, _EventDispatcher);
|
|
56633
56657
|
|
|
56634
56658
|
var _super = _createSuper(Gamepad);
|
|
@@ -56834,9 +56858,7 @@ var INPUT_EVENTS = (_INPUT_EVENTS = {
|
|
|
56834
56858
|
MOUSE_DOWN: MOUSE_DOWN,
|
|
56835
56859
|
MOUSE_UP: MOUSE_UP
|
|
56836
56860
|
}, _defineProperty(_INPUT_EVENTS, "MOUSE_DOWN", MOUSE_DOWN), _defineProperty(_INPUT_EVENTS, "MOUSE_MOVE", MOUSE_MOVE), _defineProperty(_INPUT_EVENTS, "ELEMENT_CLICK", ELEMENT_CLICK), _defineProperty(_INPUT_EVENTS, "ELEMENT_DESELECT", ELEMENT_DESELECT), _defineProperty(_INPUT_EVENTS, "GAMEPAD_CONNECTED_EVENT", GAMEPAD_CONNECTED_EVENT), _defineProperty(_INPUT_EVENTS, "GAMEPAD_DISCONNECTED_EVENT", GAMEPAD_DISCONNECTED_EVENT), _defineProperty(_INPUT_EVENTS, "BUTTON_PRESSED_EVENT", BUTTON_PRESSED_EVENT), _defineProperty(_INPUT_EVENTS, "BUTTON_RELEASED_EVENT", BUTTON_RELEASED_EVENT), _defineProperty(_INPUT_EVENTS, "AXIS_CHANGE_EVENT", AXIS_CHANGE_EVENT), _INPUT_EVENTS);
|
|
56837
|
-
var Input =
|
|
56838
|
-
/*#__PURE__*/
|
|
56839
|
-
function (_EventDispatcher) {
|
|
56861
|
+
var Input = /*#__PURE__*/function (_EventDispatcher) {
|
|
56840
56862
|
_inherits(Input, _EventDispatcher);
|
|
56841
56863
|
|
|
56842
56864
|
var _super = _createSuper(Input);
|
|
@@ -56856,20 +56878,20 @@ function (_EventDispatcher) {
|
|
|
56856
56878
|
if (event.type === Keyboard.KEYDOWN) {
|
|
56857
56879
|
_this.dispatchEvent({
|
|
56858
56880
|
type: KEY_DOWN,
|
|
56859
|
-
event: _objectSpread2({}, event,
|
|
56881
|
+
event: _objectSpread2(_objectSpread2({}, event), handler)
|
|
56860
56882
|
});
|
|
56861
56883
|
}
|
|
56862
56884
|
|
|
56863
56885
|
if (event.type === Keyboard.KEYUP) {
|
|
56864
56886
|
_this.dispatchEvent({
|
|
56865
56887
|
type: KEY_UP,
|
|
56866
|
-
event: _objectSpread2({}, event,
|
|
56888
|
+
event: _objectSpread2(_objectSpread2({}, event), handler)
|
|
56867
56889
|
});
|
|
56868
56890
|
}
|
|
56869
56891
|
|
|
56870
56892
|
_this.dispatchEvent({
|
|
56871
56893
|
type: KEY_PRESS,
|
|
56872
|
-
event: _objectSpread2({}, event,
|
|
56894
|
+
event: _objectSpread2(_objectSpread2({}, event), handler)
|
|
56873
56895
|
});
|
|
56874
56896
|
});
|
|
56875
56897
|
|
|
@@ -57526,7 +57548,7 @@ function createBase64WorkerFactory(base64, sourcemapArg, enableUnicodeArg) {
|
|
|
57526
57548
|
url = url || createURL(base64, sourcemapArg, enableUnicodeArg);
|
|
57527
57549
|
return new Worker(url, options);
|
|
57528
57550
|
};
|
|
57529
|
-
}var WorkerFactory = createBase64WorkerFactory('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwooZnVuY3Rpb24gKCkgewogICAgJ3VzZSBzdHJpY3QnOwoKICAgIHZhciBMSUJSQVJZX05BTUUgPSAnYW1tby5qcyc7CiAgICB2YXIgVFlQRVMgPSB7CiAgICAgIEJPWDogJ0JPWCcsCiAgICAgIFNQSEVSRTogJ1NQSEVSRScsCiAgICAgIFZFSElDTEU6ICdWRUhJQ0xFJywKICAgICAgTUVTSDogJ01FU0gnLAogICAgICBQTEFZRVI6ICdQTEFZRVInCiAgICB9OwogICAgdmFyIERFRkFVTFRfVkVISUNMRV9TVEFURSA9IHsKICAgICAgdmVoaWNsZVN0ZWVyaW5nOiAwLAogICAgICBhY2NlbGVyYXRpb246IGZhbHNlLAogICAgICBicmVha2luZzogZmFsc2UsCiAgICAgIHJpZ2h0OiBmYWxzZSwKICAgICAgbGVmdDogZmFsc2UKICAgIH07CiAgICB2YXIgREVGQVVMVF9SSUdJREJPRFlfU1RBVEUgPSB7CiAgICAgIHZlbG9jaXR5OiB7CiAgICAgICAgeDogMCwKICAgICAgICB5OiAwLAogICAgICAgIHo6IDAKICAgICAgfSwKICAgICAgbW92ZW1lbnQ6IHsKICAgICAgICBmb3J3YXJkOiBmYWxzZSwKICAgICAgICBiYWNrd2FyZHM6IGZhbHNlLAogICAgICAgIGxlZnQ6IGZhbHNlLAogICAgICAgIHJpZ2h0OiBmYWxzZQogICAgICB9LAogICAgICBkaXJlY3Rpb246IHsKICAgICAgICB4OiAwLAogICAgICAgIHk6IDAsCiAgICAgICAgejogMAogICAgICB9CiAgICB9OwogICAgdmFyIERFRkFVTFRfU0NBTEUgPSB7CiAgICAgIHg6IDEsCiAgICAgIHk6IDEsCiAgICAgIHo6IDEKICAgIH07CiAgICB2YXIgREVGQVVMVF9MSU5FQVJfVkVMT0NJVFkgPSB7CiAgICAgIHg6IDAsCiAgICAgIHk6IDAsCiAgICAgIHo6IDAKICAgIH07CiAgICB2YXIgREVGQVVMVF9JTVBVTFNFID0gewogICAgICB4OiAwLAogICAgICB5OiAwLAogICAgICB6OiAwCiAgICB9OwogICAgdmFyIERJU0FCTEVfREVBQ1RJVkFUSU9OID0gNDsKICAgIHZhciBHUkFWSVRZID0gewogICAgICB4OiAwLAogICAgICB5OiAtMTAsCiAgICAgIHo6IDAKICAgIH07CiAgICB2YXIgRlJPTlRfTEVGVCA9IDA7CiAgICB2YXIgRlJPTlRfUklHSFQgPSAxOwogICAgdmFyIEJBQ0tfTEVGVCA9IDI7CiAgICB2YXIgQkFDS19SSUdIVCA9IDM7CiAgICB2YXIgREVGQVVMVF9TVEVFUklOR19JTkNSRU1FTlQgPSAuMDQ7CiAgICB2YXIgREVGQVVMVF9TVEVFUklOR19DTEFNUCA9IC41OwogICAgdmFyIERFRkFVTFRfTUFYX0VOR0lORV9GT1JDRSA9IDIwMDA7CiAgICB2YXIgREVGQVVMVF9NQVhfQlJFQUtJTkdfRk9SQ0UgPSAxMDA7CiAgICB2YXIgRVhQTE9TSU9OX1NJWkVTID0gewogICAgICBTTUFMTDogNCwKICAgICAgTUVESVVNOiA2LAogICAgICBMQVJHRTogOCwKICAgICAgTUFTU0lWRTogMTIKICAgIH07CiAgICB2YXIgRVhQTE9TSU9OX1NUUkVOR1RIUyA9IHsKICAgICAgVkVSWV9XRUFLOiAyLAogICAgICBXRUFLOiA0LAogICAgICBNRURJVU06IDgsCiAgICAgIExBUkdFOiAxNiwKICAgICAgTUFTU0lWRTogMzIsCiAgICAgIE9LX05POiA2NAogICAgfTsKCiAgICB2YXIgUEhZU0lDU19FVkVOVFMgPSB7CiAgICAgIERJU1BBVENIOiAncGh5c2ljczpkaXNwYXRjaCcsCiAgICAgIFRFUk1JTkFURTogJ3BoeXNpY3M6dGVybWluYXRlJywKICAgICAgTE9BRDogewogICAgICAgIEFNTU86ICdwaHlzaWNzOmxvYWQ6YW1tbycKICAgICAgfSwKICAgICAgUkVBRFk6ICdwaHlzaWNzOnJlYWR5JywKICAgICAgSU5JVDogJ3BoeXNpY3M6aW5pdCcsCiAgICAgIFVQREFURTogJ3BoeXNpY3M6dXBkYXRlJywKICAgICAgQUREOiB7CiAgICAgICAgQk9YOiAncGh5c2ljczphZGQ6Ym94JywKICAgICAgICBWRUhJQ0xFOiAncGh5c2ljczphZGQ6dmVoaWNsZScsCiAgICAgICAgTU9ERUw6ICdwaHlzaWNzOmFkZDptb2RlbCcsCiAgICAgICAgUExBWUVSOiAncGh5c2ljczphZGQ6cGxheWVyJywKICAgICAgICBTUEhFUkU6ICdwaHlzaWNzOmFkZDpzcGhlcmUnCiAgICAgIH0sCiAgICAgIEVMRU1FTlQ6IHsKICAgICAgICBESVNQT1NFOiAncGh5c2ljczplbGVtZW50OmRpc3Bvc2UnLAogICAgICAgIENPTExJU0lPTjogJ3BoeXNpY3M6ZWxlbWVudDpjb2xsaXNpb24nLAogICAgICAgIFVQREFURTogJ3BoeXNpY3M6ZWxlbWVudDp1cGRhdGUnLAogICAgICAgIENSRUFURUQ6ICdwaHlzaWNzOmVsZW1lbnQ6Y3JlYXRlZCcsCiAgICAgICAgU0VUOiB7CiAgICAgICAgICBQT1NJVElPTjogJ3BoeXNpY3M6ZWxlbWVudDpzZXQ6cG9zaXRpb24nLAogICAgICAgICAgUVVBVEVSTklPTjogJ3BoeXNpY3M6ZWxlbWVudDpzZXQ6cXVhdGVybmlvbicsCiAgICAgICAgICBMSU5FQVJfVkVMT0NJVFk6ICdwaHlzaWNzOmVsZW1lbnQ6c2V0OmxpbmVhcl92ZWxvY2l0eScKICAgICAgICB9LAogICAgICAgIEFQUExZOiB7CiAgICAgICAgICBJTVBVTFNFOiAncGh5c2ljczplbGVtZW50OmFwcGx5OmltcHVsc2UnCiAgICAgICAgfQogICAgICB9LAogICAgICBWRUhJQ0xFOiB7CiAgICAgICAgU0VUOiB7CiAgICAgICAgICBQT1NJVElPTjogJ3BoeXNpY3M6dmVoaWNsZTpzZXQ6cG9zaXRpb24nLAogICAgICAgICAgUVVBVEVSTklPTjogJ3BoeXNpY3M6dmVoaWNsZTpzZXQ6cXVhdGVybmlvbicKICAgICAgICB9LAogICAgICAgIFJFU0VUOiAncGh5c2ljczp2ZWhpY2xlOnJlc2V0JywKICAgICAgICBTUEVFRDogJ3BoeXNpY3M6dmVoaWNsZTpzcGVlZCcsCiAgICAgICAgRElSRUNUSU9OOiAncGh5c2ljczp2ZWhpY2xlOmRpcmVjdGlvbicKICAgICAgfSwKICAgICAgRUZGRUNUUzogewogICAgICAgIEVYUExPU0lPTjogJ3BoeXNpY3M6ZWZmZWN0czpleHBsb3Npb24nCiAgICAgIH0KICAgIH07CgogICAgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgewogICAgICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpOwogICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsKICAgICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7CiAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOwogICAgICAgIGlmICgidmFsdWUiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOwogICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsKICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsKICAgICAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7CiAgICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsKICAgICAgcmV0dXJuIENvbnN0cnVjdG9yOwogICAgfQoKICAgIGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsKICAgICAgaWYgKGtleSBpbiBvYmopIHsKICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsKICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICB3cml0YWJsZTogdHJ1ZQogICAgICAgIH0pOwogICAgICB9IGVsc2UgewogICAgICAgIG9ialtrZXldID0gdmFsdWU7CiAgICAgIH0KCiAgICAgIHJldHVybiBvYmo7CiAgICB9CgogICAgZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7CiAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsKCiAgICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7CiAgICAgICAgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7CiAgICAgICAgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgewogICAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7CiAgICAgICAgfSk7CiAgICAgICAga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOwogICAgICB9CgogICAgICByZXR1cm4ga2V5czsKICAgIH0KCiAgICBmdW5jdGlvbiBfb2JqZWN0U3ByZWFkMih0YXJnZXQpIHsKICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsKCiAgICAgICAgaWYgKGkgJSAyKSB7CiAgICAgICAgICBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsKICAgICAgICAgICAgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7CiAgICAgICAgICB9KTsKICAgICAgICB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsKICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHJldHVybiB0YXJnZXQ7CiAgICB9CgogICAgdmFyIERpc3BhdGNoZXIgPSBmdW5jdGlvbiBEaXNwYXRjaGVyKCkgewogICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRGlzcGF0Y2hlcik7CgogICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgInNlbmRQaHlzaWNzVXBkYXRlIiwgZnVuY3Rpb24gKGR0KSB7CiAgICAgICAgcmV0dXJuIHBvc3RNZXNzYWdlKHsKICAgICAgICAgIGV2ZW50OiBQSFlTSUNTX0VWRU5UUy5VUERBVEUsCiAgICAgICAgICBkdDogZHQKICAgICAgICB9KTsKICAgICAgfSk7CgogICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgInNlbmRSZWFkeUV2ZW50IiwgZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVybiBwb3N0TWVzc2FnZSh7CiAgICAgICAgICBldmVudDogUEhZU0lDU19FVkVOVFMuUkVBRFkKICAgICAgICB9KTsKICAgICAgfSk7CgogICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgInNlbmRUZXJtaW5hdGVFdmVudCIsIGZ1bmN0aW9uICgpIHsKICAgICAgICByZXR1cm4gcG9zdE1lc3NhZ2UoewogICAgICAgICAgZXZlbnQ6IFBIWVNJQ1NfRVZFTlRTLlRFUk1JTkFURQogICAgICAgIH0pOwogICAgICB9KTsKCiAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAic2VuZEJvZHlVcGRhdGUiLCBmdW5jdGlvbiAodXVpZCwgcG9zaXRpb24sIHJvdGF0aW9uLCBkdCkgewogICAgICAgIHJldHVybiBwb3N0TWVzc2FnZSh7CiAgICAgICAgICBldmVudDogUEhZU0lDU19FVkVOVFMuRUxFTUVOVC5VUERBVEUsCiAgICAgICAgICB1dWlkOiB1dWlkLAogICAgICAgICAgcG9zaXRpb246IHsKICAgICAgICAgICAgeDogcG9zaXRpb24ueCgpLAogICAgICAgICAgICB5OiBwb3NpdGlvbi55KCksCiAgICAgICAgICAgIHo6IHBvc2l0aW9uLnooKQogICAgICAgICAgfSwKICAgICAgICAgIHF1YXRlcm5pb246IHsKICAgICAgICAgICAgeDogcm90YXRpb24ueCgpLAogICAgICAgICAgICB5OiByb3RhdGlvbi55KCksCiAgICAgICAgICAgIHo6IHJvdGF0aW9uLnooKSwKICAgICAgICAgICAgdzogcm90YXRpb24udygpCiAgICAgICAgICB9LAogICAgICAgICAgZHQ6IGR0CiAgICAgICAgfSk7CiAgICAgIH0pOwoKICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJzZW5kRGlzcGF0Y2hFdmVudCIsIGZ1bmN0aW9uICh1dWlkLCBldmVudE5hbWUsIGV2ZW50RGF0YSkgewogICAgICAgIHJldHVybiBwb3N0TWVzc2FnZSh7CiAgICAgICAgICBldmVudDogUEhZU0lDU19FVkVOVFMuRElTUEFUQ0gsCiAgICAgICAgICB1dWlkOiB1dWlkLAogICAgICAgICAgZXZlbnROYW1lOiBldmVudE5hbWUsCiAgICAgICAgICBldmVudERhdGE6IGV2ZW50RGF0YQogICAgICAgIH0pOwogICAgICB9KTsKICAgIH07CiAgICB2YXIgZGlzcGF0Y2hlciQxID0gbmV3IERpc3BhdGNoZXIoKTsKCiAgICB2YXIgYXBwbHlNYXRyaXg0VG9WZWN0b3IzID0gZnVuY3Rpb24gYXBwbHlNYXRyaXg0VG9WZWN0b3IzKF9yZWYpIHsKICAgICAgdmFyIF9yZWYkeCA9IF9yZWYueCwKICAgICAgICAgIHggPSBfcmVmJHggPT09IHZvaWQgMCA/IDAgOiBfcmVmJHgsCiAgICAgICAgICBfcmVmJHkgPSBfcmVmLnksCiAgICAgICAgICB5ID0gX3JlZiR5ID09PSB2b2lkIDAgPyAwIDogX3JlZiR5LAogICAgICAgICAgX3JlZiR6ID0gX3JlZi56LAogICAgICAgICAgeiA9IF9yZWYkeiA9PT0gdm9pZCAwID8gMCA6IF9yZWYkejsKICAgICAgdmFyIG1hdHJpeCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogW107CiAgICAgIHZhciB3ID0gMSAvIChtYXRyaXhbM10gKiB4ICsgbWF0cml4WzddICogeSArIG1hdHJpeFsxMV0gKiB6ICsgbWF0cml4WzE1XSk7CiAgICAgIHJldHVybiB7CiAgICAgICAgeDogKG1hdHJpeFswXSAqIHggKyBtYXRyaXhbNF0gKiB5ICsgbWF0cml4WzhdICogeiArIG1hdHJpeFsxMl0pICogdywKICAgICAgICB5OiAobWF0cml4WzFdICogeCArIG1hdHJpeFs1XSAqIHkgKyBtYXRyaXhbOV0gKiB6ICsgbWF0cml4WzEzXSkgKiB3LAogICAgICAgIHo6IChtYXRyaXhbMl0gKiB4ICsgbWF0cml4WzZdICogeSArIG1hdHJpeFsxMF0gKiB6ICsgbWF0cml4WzE0XSkgKiB3CiAgICAgIH07CiAgICB9OwoKICAgIHZhciBjcmVhdGVSaWdpZEJvZHkgPSBmdW5jdGlvbiBjcmVhdGVSaWdpZEJvZHkoc2hhcGUsIG9wdGlvbnMpIHsKICAgICAgdmFyIHV1aWQgPSBvcHRpb25zLnV1aWQsCiAgICAgICAgICBwb3NpdGlvbiA9IG9wdGlvbnMucG9zaXRpb24sCiAgICAgICAgICBxdWF0ZXJuaW9uID0gb3B0aW9ucy5xdWF0ZXJuaW9uLAogICAgICAgICAgbWFzcyA9IG9wdGlvbnMubWFzcywKICAgICAgICAgIGZyaWN0aW9uID0gb3B0aW9ucy5mcmljdGlvbiwKICAgICAgICAgIF9vcHRpb25zJHJlc3RpdHV0aW9uID0gb3B0aW9ucy5yZXN0aXR1dGlvbiwKICAgICAgICAgIHJlc3RpdHV0aW9uID0gX29wdGlvbnMkcmVzdGl0dXRpb24gPT09IHZvaWQgMCA/IC45IDogX29wdGlvbnMkcmVzdGl0dXRpb24sCiAgICAgICAgICBfb3B0aW9ucyRkYW1waW5nID0gb3B0aW9ucy5kYW1waW5nLAogICAgICAgICAgZGFtcGluZyA9IF9vcHRpb25zJGRhbXBpbmcgPT09IHZvaWQgMCA/IHsKICAgICAgICBsaW5lYXI6IDAuMiwKICAgICAgICBhbmd1bGFyOiAwLjIKICAgICAgfSA6IF9vcHRpb25zJGRhbXBpbmc7CiAgICAgIHZhciB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpOwogICAgICB0cmFuc2Zvcm0uc2V0SWRlbnRpdHkoKTsKICAgICAgdHJhbnNmb3JtLnNldE9yaWdpbihuZXcgQW1tby5idFZlY3RvcjMocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueikpOwogICAgICB0cmFuc2Zvcm0uc2V0Um90YXRpb24obmV3IEFtbW8uYnRRdWF0ZXJuaW9uKHF1YXRlcm5pb24ueCwgcXVhdGVybmlvbi55LCBxdWF0ZXJuaW9uLnosIHF1YXRlcm5pb24udykpOwogICAgICB2YXIgbW90aW9uU3RhdGUgPSBuZXcgQW1tby5idERlZmF1bHRNb3Rpb25TdGF0ZSh0cmFuc2Zvcm0pOwogICAgICB2YXIgbG9jYWxJbmVydGlhID0gbmV3IEFtbW8uYnRWZWN0b3IzKDAsIDAsIDApOwogICAgICBzaGFwZS5jYWxjdWxhdGVMb2NhbEluZXJ0aWEobWFzcywgbG9jYWxJbmVydGlhKTsKICAgICAgdmFyIHJiSW5mbyA9IG5ldyBBbW1vLmJ0UmlnaWRCb2R5Q29uc3RydWN0aW9uSW5mbyhtYXNzLCBtb3Rpb25TdGF0ZSwgc2hhcGUsIGxvY2FsSW5lcnRpYSk7CiAgICAgIHZhciBib2R5ID0gbmV3IEFtbW8uYnRSaWdpZEJvZHkocmJJbmZvKTsKCiAgICAgIGlmIChtYXNzID4gMCkgewogICAgICAgIGJvZHkuc2V0RnJpY3Rpb24oZnJpY3Rpb24pOwogICAgICAgIGJvZHkuc2V0UmVzdGl0dXRpb24ocmVzdGl0dXRpb24pOwogICAgICAgIGJvZHkuc2V0RGFtcGluZyhkYW1waW5nLmxpbmVhciwgZGFtcGluZy5hbmd1bGFyKTsKICAgICAgICBib2R5LnNldEFjdGl2YXRpb25TdGF0ZShESVNBQkxFX0RFQUNUSVZBVElPTik7CiAgICAgIH0gLy8gc3RvcmluZyB1dWlkIGZvciBmdXR1cmUgcmVmZXJlbmNlCgoKICAgICAgYm9keS51dWlkID0gdXVpZDsKICAgICAgd29ybGQuYWRkUmlnaWRCb2R5KGJvZHkpOwogICAgICByZXR1cm4gYm9keTsKICAgIH07CiAgICB2YXIgYWRkTW9kZWwgPSBmdW5jdGlvbiBhZGRNb2RlbChvcHRpb25zKSB7CiAgICAgIHZhciB1dWlkID0gb3B0aW9ucy51dWlkLAogICAgICAgICAgdmVydGljZXMgPSBvcHRpb25zLnZlcnRpY2VzLAogICAgICAgICAgbWF0cmljZXMgPSBvcHRpb25zLm1hdHJpY2VzLAogICAgICAgICAgaW5kZXhlcyA9IG9wdGlvbnMuaW5kZXhlcywKICAgICAgICAgIHBvc2l0aW9uID0gb3B0aW9ucy5wb3NpdGlvbiwKICAgICAgICAgIHF1YXRlcm5pb24gPSBvcHRpb25zLnF1YXRlcm5pb24sCiAgICAgICAgICBfb3B0aW9ucyRtYXNzID0gb3B0aW9ucy5tYXNzLAogICAgICAgICAgbWFzcyA9IF9vcHRpb25zJG1hc3MgPT09IHZvaWQgMCA/IDAgOiBfb3B0aW9ucyRtYXNzLAogICAgICAgICAgX29wdGlvbnMkZnJpY3Rpb24gPSBvcHRpb25zLmZyaWN0aW9uLAogICAgICAgICAgZnJpY3Rpb24gPSBfb3B0aW9ucyRmcmljdGlvbiA9PT0gdm9pZCAwID8gMiA6IF9vcHRpb25zJGZyaWN0aW9uOwogICAgICB2YXIgc2NhbGUgPSBERUZBVUxUX1NDQUxFOwogICAgICB2YXIgYnRhID0gbmV3IEFtbW8uYnRWZWN0b3IzKCk7CiAgICAgIHZhciBidGIgPSBuZXcgQW1tby5idFZlY3RvcjMoKTsKICAgICAgdmFyIGJ0YyA9IG5ldyBBbW1vLmJ0VmVjdG9yMygpOwogICAgICB2YXIgdHJpTWVzaCA9IG5ldyBBbW1vLmJ0VHJpYW5nbGVNZXNoKHRydWUsIGZhbHNlKTsKCiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmVydGljZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgY29tcG9uZW50cyA9IHZlcnRpY2VzW2ldOwogICAgICAgIHZhciBpbmRleCA9IGluZGV4ZXNbaV0gPyBpbmRleGVzW2ldIDogbnVsbDsKICAgICAgICB2YXIgbWF0cml4ID0gQXJyYXkuZnJvbShtYXRyaWNlc1tpXSk7CgogICAgICAgIGlmIChpbmRleCkgewogICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpbmRleC5sZW5ndGg7IGogKz0gMykgewogICAgICAgICAgICB2YXIgYWkgPSBpbmRleFtqXSAqIDM7CiAgICAgICAgICAgIHZhciBiaSA9IGluZGV4W2ogKyAxXSAqIDM7CiAgICAgICAgICAgIHZhciBjaSA9IGluZGV4W2ogKyAyXSAqIDM7CiAgICAgICAgICAgIHZhciB2YSA9IGFwcGx5TWF0cml4NFRvVmVjdG9yMyh7CiAgICAgICAgICAgICAgeDogY29tcG9uZW50c1thaV0sCiAgICAgICAgICAgICAgeTogY29tcG9uZW50c1thaSArIDFdLAogICAgICAgICAgICAgIHo6IGNvbXBvbmVudHNbYWkgKyAyXQogICAgICAgICAgICB9LCBtYXRyaXgpOwogICAgICAgICAgICB2YXIgdmIgPSBhcHBseU1hdHJpeDRUb1ZlY3RvcjMoewogICAgICAgICAgICAgIHg6IGNvbXBvbmVudHNbYmldLAogICAgICAgICAgICAgIHk6IGNvbXBvbmVudHNbYmkgKyAxXSwKICAgICAgICAgICAgICB6OiBjb21wb25lbnRzW2JpICsgMl0KICAgICAgICAgICAgfSwgbWF0cml4KTsKICAgICAgICAgICAgdmFyIHZjID0gYXBwbHlNYXRyaXg0VG9WZWN0b3IzKHsKICAgICAgICAgICAgICB4OiBjb21wb25lbnRzW2NpXSwKICAgICAgICAgICAgICB5OiBjb21wb25lbnRzW2NpICsgMV0sCiAgICAgICAgICAgICAgejogY29tcG9uZW50c1tjaSArIDJdCiAgICAgICAgICAgIH0sIG1hdHJpeCk7CiAgICAgICAgICAgIGJ0YS5zZXRWYWx1ZSh2YS54LCB2YS55LCB2YS56KTsKICAgICAgICAgICAgYnRiLnNldFZhbHVlKHZiLngsIHZiLnksIHZiLnopOwogICAgICAgICAgICBidGMuc2V0VmFsdWUodmMueCwgdmMueSwgdmMueik7CiAgICAgICAgICAgIHRyaU1lc2guYWRkVHJpYW5nbGUoYnRhLCBidGIsIGJ0YywgZmFsc2UpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBmb3IgKHZhciBfaiA9IDA7IF9qIDwgY29tcG9uZW50cy5sZW5ndGg7IF9qICs9IDkpIHsKICAgICAgICAgICAgdmFyIF92YSA9IGFwcGx5TWF0cml4NFRvVmVjdG9yMyh7CiAgICAgICAgICAgICAgeDogY29tcG9uZW50c1tfaiArIDBdLAogICAgICAgICAgICAgIHk6IGNvbXBvbmVudHNbX2ogKyAxXSwKICAgICAgICAgICAgICB6OiBjb21wb25lbnRzW19qICsgMl0KICAgICAgICAgICAgfSwgbWF0cml4KTsKCiAgICAgICAgICAgIHZhciBfdmIgPSBhcHBseU1hdHJpeDRUb1ZlY3RvcjMoewogICAgICAgICAgICAgIHg6IGNvbXBvbmVudHNbX2ogKyAzXSwKICAgICAgICAgICAgICB5OiBjb21wb25lbnRzW19qICsgNF0sCiAgICAgICAgICAgICAgejogY29tcG9uZW50c1tfaiArIDVdCiAgICAgICAgICAgIH0sIG1hdHJpeCk7CgogICAgICAgICAgICB2YXIgX3ZjID0gYXBwbHlNYXRyaXg0VG9WZWN0b3IzKHsKICAgICAgICAgICAgICB4OiBjb21wb25lbnRzW19qICsgNl0sCiAgICAgICAgICAgICAgeTogY29tcG9uZW50c1tfaiArIDddLAogICAgICAgICAgICAgIHo6IGNvbXBvbmVudHNbX2ogKyA4XQogICAgICAgICAgICB9LCBtYXRyaXgpOwoKICAgICAgICAgICAgYnRhLnNldFZhbHVlKF92YS54LCBfdmEueSwgX3ZhLnopOwogICAgICAgICAgICBidGIuc2V0VmFsdWUoX3ZiLngsIF92Yi55LCBfdmIueik7CiAgICAgICAgICAgIGJ0Yy5zZXRWYWx1ZShfdmMueCwgX3ZjLnksIF92Yy56KTsKICAgICAgICAgICAgdHJpTWVzaC5hZGRUcmlhbmdsZShidGEsIGJ0YiwgYnRjLCBmYWxzZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CgogICAgICB2YXIgbG9jYWxTY2FsZSA9IG5ldyBBbW1vLmJ0VmVjdG9yMyhzY2FsZS54LCBzY2FsZS55LCBzY2FsZS56KTsKICAgICAgdHJpTWVzaC5zZXRTY2FsaW5nKGxvY2FsU2NhbGUpOwogICAgICBBbW1vLmRlc3Ryb3kobG9jYWxTY2FsZSk7CiAgICAgIHZhciBjb2xsaXNpb25TaGFwZSA9IG5ldyBBbW1vLmJ0QnZoVHJpYW5nbGVNZXNoU2hhcGUodHJpTWVzaCwgdHJ1ZSwgdHJ1ZSk7CiAgICAgIGNvbGxpc2lvblNoYXBlLnJlc291cmNlcyA9IFt0cmlNZXNoXTsKICAgICAgQW1tby5kZXN0cm95KGJ0YSk7CiAgICAgIEFtbW8uZGVzdHJveShidGIpOwogICAgICBBbW1vLmRlc3Ryb3koYnRjKTsKICAgICAgdmFyIGJvZHkgPSBjcmVhdGVSaWdpZEJvZHkoY29sbGlzaW9uU2hhcGUsIHsKICAgICAgICB1dWlkOiB1dWlkLAogICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbiwKICAgICAgICBxdWF0ZXJuaW9uOiBxdWF0ZXJuaW9uLAogICAgICAgIG1hc3M6IG1hc3MsCiAgICAgICAgZnJpY3Rpb246IGZyaWN0aW9uCiAgICAgIH0pOwogICAgICB3b3JsZC5zZXRCb2R5KHsKICAgICAgICB1dWlkOiB1dWlkLAogICAgICAgIGJvZHk6IGJvZHksCiAgICAgICAgdHlwZTogVFlQRVMuTUVTSCwKICAgICAgICBzdGF0ZTogREVGQVVMVF9SSUdJREJPRFlfU1RBVEUKICAgICAgfSk7CiAgICB9OwogICAgdmFyIGFkZEJveCA9IGZ1bmN0aW9uIGFkZEJveChkYXRhKSB7CiAgICAgIHZhciB1dWlkID0gZGF0YS51dWlkLAogICAgICAgICAgd2lkdGggPSBkYXRhLndpZHRoLAogICAgICAgICAgbGVuZ3RoID0gZGF0YS5sZW5ndGgsCiAgICAgICAgICBoZWlnaHQgPSBkYXRhLmhlaWdodCwKICAgICAgICAgIHBvc2l0aW9uID0gZGF0YS5wb3NpdGlvbiwKICAgICAgICAgIHF1YXRlcm5pb24gPSBkYXRhLnF1YXRlcm5pb24sCiAgICAgICAgICBfZGF0YSRtYXNzID0gZGF0YS5tYXNzLAogICAgICAgICAgbWFzcyA9IF9kYXRhJG1hc3MgPT09IHZvaWQgMCA/IDAgOiBfZGF0YSRtYXNzLAogICAgICAgICAgX2RhdGEkZnJpY3Rpb24gPSBkYXRhLmZyaWN0aW9uLAogICAgICAgICAgZnJpY3Rpb24gPSBfZGF0YSRmcmljdGlvbiA9PT0gdm9pZCAwID8gMiA6IF9kYXRhJGZyaWN0aW9uOwogICAgICB2YXIgZ2VvbWV0cnkgPSBuZXcgQW1tby5idEJveFNoYXBlKG5ldyBBbW1vLmJ0VmVjdG9yMyh3aWR0aCAqIDAuNSwgaGVpZ2h0ICogMC41LCBsZW5ndGggKiAwLjUpKTsKICAgICAgdmFyIGJvZHkgPSBjcmVhdGVSaWdpZEJvZHkoZ2VvbWV0cnksIHsKICAgICAgICB1dWlkOiB1dWlkLAogICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbiwKICAgICAgICBxdWF0ZXJuaW9uOiBxdWF0ZXJuaW9uLAogICAgICAgIG1hc3M6IG1hc3MsCiAgICAgICAgZnJpY3Rpb246IGZyaWN0aW9uCiAgICAgIH0pOwogICAgICB3b3JsZC5zZXRCb2R5KHsKICAgICAgICB1dWlkOiB1dWlkLAogICAgICAgIGJvZHk6IGJvZHksCiAgICAgICAgdHlwZTogVFlQRVMuQk9YLAogICAgICAgIHN0YXRlOiBERUZBVUxUX1JJR0lEQk9EWV9TVEFURQogICAgICB9KTsKICAgIH07CiAgICB2YXIgYWRkU3BoZXJlID0gZnVuY3Rpb24gYWRkU3BoZXJlKGRhdGEpIHsKICAgICAgdmFyIHV1aWQgPSBkYXRhLnV1aWQsCiAgICAgICAgICByYWRpdXMgPSBkYXRhLnJhZGl1cywKICAgICAgICAgIHBvc2l0aW9uID0gZGF0YS5wb3NpdGlvbiwKICAgICAgICAgIHF1YXRlcm5pb24gPSBkYXRhLnF1YXRlcm5pb24sCiAgICAgICAgICBfZGF0YSRtYXNzMiA9IGRhdGEubWFzcywKICAgICAgICAgIG1hc3MgPSBfZGF0YSRtYXNzMiA9PT0gdm9pZCAwID8gMCA6IF9kYXRhJG1hc3MyLAogICAgICAgICAgX2RhdGEkZnJpY3Rpb24yID0gZGF0YS5mcmljdGlvbiwKICAgICAgICAgIGZyaWN0aW9uID0gX2RhdGEkZnJpY3Rpb24yID09PSB2b2lkIDAgPyAyIDogX2RhdGEkZnJpY3Rpb24yOwogICAgICB2YXIgZ2VvbWV0cnkgPSBuZXcgQW1tby5idFNwaGVyZVNoYXBlKHJhZGl1cyk7CiAgICAgIHZhciBib2R5ID0gY3JlYXRlUmlnaWRCb2R5KGdlb21ldHJ5LCB7CiAgICAgICAgdXVpZDogdXVpZCwKICAgICAgICBwb3NpdGlvbjogcG9zaXRpb24sCiAgICAgICAgcXVhdGVybmlvbjogcXVhdGVybmlvbiwKICAgICAgICBtYXNzOiBtYXNzLAogICAgICAgIGZyaWN0aW9uOiBmcmljdGlvbgogICAgICB9KTsKICAgICAgd29ybGQuc2V0Qm9keSh7CiAgICAgICAgdXVpZDogdXVpZCwKICAgICAgICBib2R5OiBib2R5LAogICAgICAgIHR5cGU6IFRZUEVTLlNQSEVSRSwKICAgICAgICBzdGF0ZTogREVGQVVMVF9SSUdJREJPRFlfU1RBVEUKICAgICAgfSk7CiAgICB9OwogICAgdmFyIHNldExpbmVhclZlbG9jaXR5ID0gZnVuY3Rpb24gc2V0TGluZWFyVmVsb2NpdHkoZGF0YSkgewogICAgICB2YXIgdXVpZCA9IGRhdGEudXVpZCwKICAgICAgICAgIF9kYXRhJHZlbG9jaXR5ID0gZGF0YS52ZWxvY2l0eSwKICAgICAgICAgIHZlbG9jaXR5ID0gX2RhdGEkdmVsb2NpdHkgPT09IHZvaWQgMCA/IERFRkFVTFRfTElORUFSX1ZFTE9DSVRZIDogX2RhdGEkdmVsb2NpdHk7CgogICAgICB2YXIgX3dvcmxkJGdldEVsZW1lbnQgPSB3b3JsZC5nZXRFbGVtZW50KHV1aWQpLAogICAgICAgICAgYm9keSA9IF93b3JsZCRnZXRFbGVtZW50LmJvZHk7CgogICAgICB2YXIgbW90aW9uU3RhdGUgPSBib2R5LmdldE1vdGlvblN0YXRlKCk7CgogICAgICBpZiAobW90aW9uU3RhdGUpIHsKICAgICAgICB2YXIgbGluZWFyVmVsb2NpdHkgPSBuZXcgQW1tby5idFZlY3RvcjModmVsb2NpdHkueCwgdmVsb2NpdHkueSwgdmVsb2NpdHkueik7CiAgICAgICAgYm9keS5zZXRMaW5lYXJWZWxvY2l0eShsaW5lYXJWZWxvY2l0eSk7CiAgICAgICAgQW1tby5kZXN0cm95KGxpbmVhclZlbG9jaXR5KTsKICAgICAgfQogICAgfTsKICAgIHZhciBzZXRQb3NpdGlvbiA9IGZ1bmN0aW9uIHNldFBvc2l0aW9uKGRhdGEpIHsKICAgICAgdmFyIHV1aWQgPSBkYXRhLnV1aWQsCiAgICAgICAgICBwb3NpdGlvbiA9IGRhdGEucG9zaXRpb247CgogICAgICB2YXIgX3dvcmxkJGdldEVsZW1lbnQyID0gd29ybGQuZ2V0RWxlbWVudCh1dWlkKSwKICAgICAgICAgIGJvZHkgPSBfd29ybGQkZ2V0RWxlbWVudDIuYm9keTsKCiAgICAgIHZhciB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpOwogICAgICBib2R5LmdldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7CiAgICAgIHRyYW5zZm9ybS5zZXRPcmlnaW4obmV3IEFtbW8uYnRWZWN0b3IzKHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHBvc2l0aW9uLnopKTsKICAgICAgYm9keS5zZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgfTsKICAgIHZhciBhcHBseUltcHVzZSA9IGZ1bmN0aW9uIGFwcGx5SW1wdXNlKF9yZWYpIHsKICAgICAgdmFyIHV1aWQgPSBfcmVmLnV1aWQsCiAgICAgICAgICBfcmVmJGltcHVsc2UgPSBfcmVmLmltcHVsc2UsCiAgICAgICAgICBpbXB1bHNlID0gX3JlZiRpbXB1bHNlID09PSB2b2lkIDAgPyBERUZBVUxUX0lNUFVMU0UgOiBfcmVmJGltcHVsc2U7CgogICAgICB2YXIgX3dvcmxkJGdldEVsZW1lbnQzID0gd29ybGQuZ2V0RWxlbWVudCh1dWlkKSwKICAgICAgICAgIGJvZHkgPSBfd29ybGQkZ2V0RWxlbWVudDMuYm9keTsKCiAgICAgIHZhciBtb3Rpb25TdGF0ZSA9IGJvZHkuZ2V0TW90aW9uU3RhdGUoKTsKCiAgICAgIGlmIChtb3Rpb25TdGF0ZSkgewogICAgICAgIHZhciBpbXB1bHNlVmVjdG9yID0gbmV3IEFtbW8uYnRWZWN0b3IzKGltcHVsc2UueCwgaW1wdWxzZS55LCBpbXB1bHNlLnopOwogICAgICAgIGJvZHkuYXBwbHlDZW50cmFsSW1wdWxzZShpbXB1bHNlVmVjdG9yKTsKICAgICAgICBBbW1vLmRlc3Ryb3koaW1wdWxzZVZlY3Rvcik7CiAgICAgIH0KICAgIH07CiAgICB2YXIgaGFuZGxlRWxlbWVudFVwZGF0ZSA9IGZ1bmN0aW9uIGhhbmRsZUVsZW1lbnRVcGRhdGUoX3JlZjIsIGR0KSB7CiAgICAgIHZhciBib2R5ID0gX3JlZjIuYm9keSwKICAgICAgICAgIHV1aWQgPSBfcmVmMi51dWlkLAogICAgICAgICAgX3JlZjIkc3RhdGUgPSBfcmVmMi5zdGF0ZTsKICAgICAgdmFyIG1vdGlvblN0YXRlID0gYm9keS5nZXRNb3Rpb25TdGF0ZSgpOwoKICAgICAgaWYgKG1vdGlvblN0YXRlKSB7CiAgICAgICAgdmFyIHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7CiAgICAgICAgbW90aW9uU3RhdGUuZ2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKICAgICAgICB2YXIgb3JpZ2luID0gdHJhbnNmb3JtLmdldE9yaWdpbigpOwogICAgICAgIHZhciByb3RhdGlvbiA9IHRyYW5zZm9ybS5nZXRSb3RhdGlvbigpOwogICAgICAgIGRpc3BhdGNoZXIkMS5zZW5kQm9keVVwZGF0ZSh1dWlkLCBvcmlnaW4sIHJvdGF0aW9uLCBkdCk7CiAgICAgICAgQW1tby5kZXN0cm95KHRyYW5zZm9ybSk7CiAgICAgIH0KICAgIH07CgogICAgdmFyIGFkZFBsYXllciA9IGZ1bmN0aW9uIGFkZFBsYXllcihkYXRhKSB7CiAgICAgIHZhciB1dWlkID0gZGF0YS51dWlkLAogICAgICAgICAgd2lkdGggPSBkYXRhLndpZHRoLAogICAgICAgICAgaGVpZ2h0ID0gZGF0YS5oZWlnaHQsCiAgICAgICAgICBwb3NpdGlvbiA9IGRhdGEucG9zaXRpb24sCiAgICAgICAgICBxdWF0ZXJuaW9uID0gZGF0YS5xdWF0ZXJuaW9uLAogICAgICAgICAgbWFzcyA9IGRhdGEubWFzcywKICAgICAgICAgIGZyaWN0aW9uID0gZGF0YS5mcmljdGlvbjsKICAgICAgdmFyIGNhcHN1bGUgPSBuZXcgQW1tby5idENhcHN1bGVTaGFwZSh3aWR0aCwgaGVpZ2h0KTsKICAgICAgdmFyIGJvZHkgPSBjcmVhdGVSaWdpZEJvZHkoY2Fwc3VsZSwgewogICAgICAgIHV1aWQ6IHV1aWQsCiAgICAgICAgcG9zaXRpb246IHBvc2l0aW9uLAogICAgICAgIHF1YXRlcm5pb246IHF1YXRlcm5pb24sCiAgICAgICAgbWFzczogbWFzcywKICAgICAgICBmcmljdGlvbjogZnJpY3Rpb24KICAgICAgfSk7IC8vIGRpc2FibGlpbmcgcm90YXRpb24gZm9yIGNvbGxpc2lvbnMKCiAgICAgIGJvZHkuc2V0QW5ndWxhckZhY3RvcigwKTsKICAgICAgd29ybGQuYWRkUmlnaWRCb2R5KGJvZHkpOwogICAgICB3b3JsZC5zZXRCb2R5KHsKICAgICAgICB1dWlkOiB1dWlkLAogICAgICAgIGJvZHk6IGJvZHksCiAgICAgICAgdHlwZTogVFlQRVMuUExBWUVSLAogICAgICAgIHN0YXRlOiBERUZBVUxUX1JJR0lEQk9EWV9TVEFURQogICAgICB9KTsKICAgIH07CiAgICB2YXIgaGFuZGxlUGxheWVyVXBkYXRlID0gZnVuY3Rpb24gaGFuZGxlUGxheWVyVXBkYXRlKF9yZWYsIGR0KSB7CiAgICAgIHZhciBib2R5ID0gX3JlZi5ib2R5LAogICAgICAgICAgdXVpZCA9IF9yZWYudXVpZCwKICAgICAgICAgIF9yZWYkc3RhdGUgPSBfcmVmLnN0YXRlLAogICAgICAgICAgc3RhdGUgPSBfcmVmJHN0YXRlID09PSB2b2lkIDAgPyBERUZBVUxUX1JJR0lEQk9EWV9TVEFURSA6IF9yZWYkc3RhdGU7CiAgICAgIHZhciBtb3ZlbWVudCA9IHN0YXRlLm1vdmVtZW50LAogICAgICAgICAgZGlyZWN0aW9uID0gc3RhdGUuZGlyZWN0aW9uLAogICAgICAgICAgY2FtZXJhRGlyZWN0aW9uID0gc3RhdGUuY2FtZXJhRGlyZWN0aW9uLAogICAgICAgICAgcXVhdGVybmlvbiA9IHN0YXRlLnF1YXRlcm5pb24sCiAgICAgICAgICBwb3NpdGlvbiA9IHN0YXRlLnBvc2l0aW9uOwogICAgICB2YXIgTUFYX1NQRUVEID0gMTsKICAgICAgdmFyIHdhbGtWZWxvY2l0eSA9IC4xOwogICAgICB2YXIgbW90aW9uU3RhdGUgPSBib2R5LmdldE1vdGlvblN0YXRlKCk7CgogICAgICBpZiAobW90aW9uU3RhdGUpIHsKICAgICAgICB2YXIgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTsKICAgICAgICBtb3Rpb25TdGF0ZS5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgICAgIHZhciBsaW5lYXJWZWxvY2l0eSA9IGJvZHkuZ2V0TGluZWFyVmVsb2NpdHkoKTsKICAgICAgICB2YXIgc3BlZWQgPSBsaW5lYXJWZWxvY2l0eS5sZW5ndGgoKTsKICAgICAgICB2YXIgZm9yd2FyZERpciA9IHRyYW5zZm9ybS5nZXRCYXNpcygpLmdldFJvdygyKTsKICAgICAgICBmb3J3YXJkRGlyLm5vcm1hbGl6ZSgpOwogICAgICAgIHZhciB3YWxrRGlyZWN0aW9uID0gbmV3IEFtbW8uYnRWZWN0b3IzKDAuMCwgMC4wLCAwLjApOwogICAgICAgIHZhciB3YWxrU3BlZWQgPSB3YWxrVmVsb2NpdHkgKiBkdDsKCiAgICAgICAgaWYgKG1vdmVtZW50LmZvcndhcmQpIHsKICAgICAgICAgIHdhbGtEaXJlY3Rpb24uc2V0WCh3YWxrRGlyZWN0aW9uLngoKSArIGZvcndhcmREaXIueCgpKTsgLy93YWxrRGlyZWN0aW9uLnNldFkoIHdhbGtEaXJlY3Rpb24ueSgpICsgZm9yd2FyZERpci55KCkpOwoKICAgICAgICAgIHdhbGtEaXJlY3Rpb24uc2V0Wih3YWxrRGlyZWN0aW9uLnooKSArIGZvcndhcmREaXIueigpKTsKICAgICAgICB9CgogICAgICAgIGlmIChtb3ZlbWVudC5iYWNrd2FyZHMpIHsKICAgICAgICAgIHdhbGtEaXJlY3Rpb24uc2V0WCh3YWxrRGlyZWN0aW9uLngoKSAtIGZvcndhcmREaXIueCgpKTsgLy93YWxrRGlyZWN0aW9uLnNldFkoIHdhbGtEaXJlY3Rpb24ueSgpIC0gZm9yd2FyZERpci55KCkpOwoKICAgICAgICAgIHdhbGtEaXJlY3Rpb24uc2V0Wih3YWxrRGlyZWN0aW9uLnooKSAtIGZvcndhcmREaXIueigpKTsKICAgICAgICB9CgogICAgICAgIGlmICghbW92ZW1lbnQuZm9yd2FyZCAmJiAhbW92ZW1lbnQuYmFja3dhcmRzKSB7CiAgICAgICAgICBsaW5lYXJWZWxvY2l0eS5zZXRYKGxpbmVhclZlbG9jaXR5LngoKSAqIDAuMik7CiAgICAgICAgICBsaW5lYXJWZWxvY2l0eS5zZXRaKGxpbmVhclZlbG9jaXR5LnooKSAqIDAuMik7CiAgICAgICAgfSBlbHNlIGlmIChzcGVlZCA8IE1BWF9TUEVFRCkgewogICAgICAgICAgbGluZWFyVmVsb2NpdHkuc2V0WChsaW5lYXJWZWxvY2l0eS54KCkgKyBjYW1lcmFEaXJlY3Rpb24ueCAqIHdhbGtTcGVlZCk7CiAgICAgICAgICBsaW5lYXJWZWxvY2l0eS5zZXRaKGxpbmVhclZlbG9jaXR5LnooKSArIGNhbWVyYURpcmVjdGlvbi56ICogd2Fsa1NwZWVkKTsKICAgICAgICB9CgogICAgICAgIGJvZHkuc2V0TGluZWFyVmVsb2NpdHkobGluZWFyVmVsb2NpdHkpOwogICAgICAgIGJvZHkuZ2V0TW90aW9uU3RhdGUoKS5zZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgICAgIGJvZHkuc2V0Q2VudGVyT2ZNYXNzVHJhbnNmb3JtKHRyYW5zZm9ybSk7CiAgICAgICAgdmFyIG9yaWdpbiA9IHRyYW5zZm9ybS5nZXRPcmlnaW4oKTsKICAgICAgICB2YXIgcm90YXRpb24gPSB0cmFuc2Zvcm0uZ2V0Um90YXRpb24oKTsKICAgICAgICBkaXNwYXRjaGVyLnNlbmRCb2R5VXBkYXRlKHV1aWQsIG9yaWdpbiwgcm90YXRpb24sIGR0KTsKICAgICAgfQogICAgfTsKCiAgICB2YXIgQ2xvY2sgPQogICAgLyojX19QVVJFX18qLwogICAgZnVuY3Rpb24gKCkgewogICAgICBmdW5jdGlvbiBDbG9jaygpIHsKICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ2xvY2spOwoKICAgICAgICB0aGlzLnRpbWVzdGFtcCA9IG51bGw7CiAgICAgIH0KCiAgICAgIF9jcmVhdGVDbGFzcyhDbG9jaywgW3sKICAgICAgICBrZXk6ICJnZXREZWx0YSIsCiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldERlbHRhKCkgewogICAgICAgICAgdmFyIHRpbWUgPSBEYXRlLm5vdygpOwoKICAgICAgICAgIGlmICh0aGlzLnRpbWVzdGFtcCkgewogICAgICAgICAgICB2YXIgZGVsdGEgPSB0aW1lIC0gdGhpcy50aW1lc3RhbXA7CiAgICAgICAgICAgIHRoaXMudGltZXN0YW1wID0gdGltZTsKICAgICAgICAgICAgcmV0dXJuIGRlbHRhOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy50aW1lc3RhbXAgPSB0aW1lOwogICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH1dKTsKCiAgICAgIHJldHVybiBDbG9jazsKICAgIH0oKTsKCiAgICB2YXIgV29ybGQgPQogICAgLyojX19QVVJFX18qLwogICAgZnVuY3Rpb24gKCkgewogICAgICBmdW5jdGlvbiBXb3JsZCgpIHsKICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwoKICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgV29ybGQpOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgImluaXQiLCBmdW5jdGlvbiAob3B0aW9ucykgewogICAgICAgICAgdmFyIF9vcHRpb25zJGdyYXZpdHkgPSBvcHRpb25zLmdyYXZpdHksCiAgICAgICAgICAgICAgZ3Jhdml0eSA9IF9vcHRpb25zJGdyYXZpdHkgPT09IHZvaWQgMCA/IEdSQVZJVFkgOiBfb3B0aW9ucyRncmF2aXR5OwogICAgICAgICAgX3RoaXMuY29sbGlzaW9uQ29uZmlndXJhdGlvbiA9IG5ldyBBbW1vLmJ0RGVmYXVsdENvbGxpc2lvbkNvbmZpZ3VyYXRpb24oKTsKICAgICAgICAgIF90aGlzLmRpc3BhdGNoZXIgPSBuZXcgQW1tby5idENvbGxpc2lvbkRpc3BhdGNoZXIoX3RoaXMuY29sbGlzaW9uQ29uZmlndXJhdGlvbik7CiAgICAgICAgICBfdGhpcy5icm9hZHBoYXNlID0gbmV3IEFtbW8uYnREYnZ0QnJvYWRwaGFzZSgpOwogICAgICAgICAgX3RoaXMuc29sdmVyID0gbmV3IEFtbW8uYnRTZXF1ZW50aWFsSW1wdWxzZUNvbnN0cmFpbnRTb2x2ZXIoKTsKICAgICAgICAgIF90aGlzLmR5bmFtaWNzV29ybGQgPSBuZXcgQW1tby5idERpc2NyZXRlRHluYW1pY3NXb3JsZChfdGhpcy5kaXNwYXRjaGVyLCBfdGhpcy5icm9hZHBoYXNlLCBfdGhpcy5zb2x2ZXIsIF90aGlzLmNvbGxpc2lvbkNvbmZpZ3VyYXRpb24pOwoKICAgICAgICAgIF90aGlzLmR5bmFtaWNzV29ybGQuc2V0R3Jhdml0eShuZXcgQW1tby5idFZlY3RvcjMoZ3Jhdml0eS54LCBncmF2aXR5LnksIGdyYXZpdHkueikpOyAvLyB0aGlzIGlzIG5lZWRlZCBmb3IgZ2hvc3RPYmplY3QgY29sbGlzaW9ucwoKCiAgICAgICAgICBfdGhpcy5keW5hbWljc1dvcmxkLmdldEJyb2FkcGhhc2UoKS5nZXRPdmVybGFwcGluZ1BhaXJDYWNoZSgpLnNldEludGVybmFsR2hvc3RQYWlyQ2FsbGJhY2sobmV3IEFtbW8uYnRHaG9zdFBhaXJDYWxsYmFjaygpKTsKCiAgICAgICAgICBfdGhpcy5pbml0aWFsaXNlZCA9IHRydWU7CiAgICAgICAgfSk7CgogICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAicmVtb3ZlRWxlbWVudCIsIGZ1bmN0aW9uICh1dWlkKSB7CiAgICAgICAgICBpZiAoX3RoaXMuaGFzRWxlbWVudCh1dWlkKSkgewogICAgICAgICAgICBfdGhpcy5lbGVtZW50c1t1dWlkXS5kZWxldGVkID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJyZW1vdmVEZWxldGVkRWxlbWVudHMiLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoX3RoaXMuZWxlbWVudHMpLmZpbHRlcihmdW5jdGlvbiAodXVpZCkgewogICAgICAgICAgICByZXR1cm4gX3RoaXMuZWxlbWVudHNbdXVpZF0uZGVsZXRlZDsKICAgICAgICAgIH0pLmZvckVhY2goZnVuY3Rpb24gKHV1aWQpIHsKICAgICAgICAgICAgZGVsZXRlIF90aGlzLmVsZW1lbnRzW3V1aWRdOwogICAgICAgICAgfSk7CiAgICAgICAgfSk7CgogICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiaGFzRWxlbWVudCIsIGZ1bmN0aW9uICh1dWlkKSB7CiAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoX3RoaXMuZWxlbWVudHMpLmluY2x1ZGVzKHV1aWQpOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgImdldEVsZW1lbnQiLCBmdW5jdGlvbiAodXVpZCkgewogICAgICAgICAgcmV0dXJuIF90aGlzLmVsZW1lbnRzW3V1aWRdOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgImlzSW5pdGlhbGlzZWQiLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gX3RoaXMuaW5pdGlhbGlzZWQ7CiAgICAgICAgfSk7CgogICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiZ2V0RHluYW1pY3NXb3JsZCIsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHJldHVybiBfdGhpcy5keW5hbWljc1dvcmxkOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgImFkZFJpZ2lkQm9keSIsIGZ1bmN0aW9uIChib2R5KSB7CiAgICAgICAgICBfdGhpcy5keW5hbWljc1dvcmxkLmFkZFJpZ2lkQm9keShib2R5KTsKICAgICAgICB9KTsKCiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJhZGRBY3Rpb24iLCBmdW5jdGlvbiAoYWN0aW9uKSB7CiAgICAgICAgICBfdGhpcy5keW5hbWljc1dvcmxkLmFkZEFjdGlvbihhY3Rpb24pOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgImFkZENvbGxpc2lvbk9iamVjdCIsIGZ1bmN0aW9uIChjb2xsaXNpb25PYmplY3QpIHsKICAgICAgICAgIF90aGlzLmR5bmFtaWNzV29ybGQuYWRkQ29sbGlzaW9uT2JqZWN0KGNvbGxpc2lvbk9iamVjdCk7CiAgICAgICAgfSk7CgogICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAic3RlcFNpbXVsYXRpb24iLCBmdW5jdGlvbiAoZHQpIHsKICAgICAgICAgIF90aGlzLmR5bmFtaWNzV29ybGQuc3RlcFNpbXVsYXRpb24oZHQpOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgInNpbXVsYXRlIiwgZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIGR0ID0gX3RoaXMuY2xvY2suZ2V0RGVsdGEoKTsKCiAgICAgICAgICBfdGhpcy5zdGVwU2ltdWxhdGlvbihkdCk7CgogICAgICAgICAgT2JqZWN0LmtleXMoX3RoaXMuZWxlbWVudHMpLmZvckVhY2goZnVuY3Rpb24gKHV1aWQpIHsKICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBfdGhpcy5nZXRFbGVtZW50KHV1aWQpOwoKICAgICAgICAgICAgaWYgKGVsZW1lbnQpIHsKICAgICAgICAgICAgICBzd2l0Y2ggKGVsZW1lbnQudHlwZSkgewogICAgICAgICAgICAgICAgY2FzZSBUWVBFUy5CT1g6CiAgICAgICAgICAgICAgICBjYXNlIFRZUEVTLlNQSEVSRToKICAgICAgICAgICAgICAgIGNhc2UgVFlQRVMuTUVTSDoKICAgICAgICAgICAgICAgICAgaGFuZGxlRWxlbWVudFVwZGF0ZShlbGVtZW50LCBkdCk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgVFlQRVMuUExBWUVSOgogICAgICAgICAgICAgICAgICBoYW5kbGVQbGF5ZXJVcGRhdGUoZWxlbWVudCwgZHQpOwogICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIFRZUEVTLlZFSElDTEU6CiAgICAgICAgICAgICAgICAgIGhhbmRsZVZlaGljbGVVcGRhdGUoZWxlbWVudCwgZHQpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwoKICAgICAgICAgIF90aGlzLmNhbGN1bGF0ZUNvbGxpc2lvbnMoKTsKCiAgICAgICAgICBfdGhpcy5yZW1vdmVEZWxldGVkRWxlbWVudHMoKTsKCiAgICAgICAgICBkaXNwYXRjaGVyJDEuc2VuZFBoeXNpY3NVcGRhdGUoZHQpOwogICAgICAgICAgX3RoaXMucmVxdWVzdEFuaW1hdGlvbkZyYW1lSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoX3RoaXMuc2ltdWxhdGUuYmluZChfdGhpcykpOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgImNhbGN1bGF0ZUNvbGxpc2lvbnMiLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB2YXIgYW1tb0Rpc3BhdGNoZXIgPSBfdGhpcy5keW5hbWljc1dvcmxkLmdldERpc3BhdGNoZXIoKTsKCiAgICAgICAgICB2YXIgbnVtTWFuaWZvbGRzID0gYW1tb0Rpc3BhdGNoZXIuZ2V0TnVtTWFuaWZvbGRzKCk7CgogICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1NYW5pZm9sZHM7IGkrKykgewogICAgICAgICAgICB2YXIgY29udGFjdE1hbmlmb2xkID0gYW1tb0Rpc3BhdGNoZXIuZ2V0TWFuaWZvbGRCeUluZGV4SW50ZXJuYWwoaSk7CiAgICAgICAgICAgIHZhciByYjAgPSBBbW1vLmNhc3RPYmplY3QoY29udGFjdE1hbmlmb2xkLmdldEJvZHkwKCksIEFtbW8uYnRSaWdpZEJvZHkpOwogICAgICAgICAgICB2YXIgcmIxID0gQW1tby5jYXN0T2JqZWN0KGNvbnRhY3RNYW5pZm9sZC5nZXRCb2R5MSgpLCBBbW1vLmJ0UmlnaWRCb2R5KTsKICAgICAgICAgICAgdmFyIG51bUNvbnRhY3RzID0gY29udGFjdE1hbmlmb2xkLmdldE51bUNvbnRhY3RzKCk7IC8vIHRoaXMgaXRlcmF0aW9uIGRvZXNuJ3QgaGF2ZSB1dWlkcwoKICAgICAgICAgICAgaWYgKCFyYjAudXVpZCB8fCAhcmIxLnV1aWQpIGNvbnRpbnVlOwogICAgICAgICAgICB2YXIgY29udGFjdHMgPSBbXTsKCiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbnVtQ29udGFjdHM7IGorKykgewogICAgICAgICAgICAgIHZhciBjb250YWN0UG9pbnQgPSBjb250YWN0TWFuaWZvbGQuZ2V0Q29udGFjdFBvaW50KGopOwogICAgICAgICAgICAgIHZhciBkaXN0YW5jZSA9IGNvbnRhY3RQb2ludC5nZXREaXN0YW5jZSgpOwogICAgICAgICAgICAgIGlmIChkaXN0YW5jZSA+IDAuMCkgY29udGludWU7CiAgICAgICAgICAgICAgdmFyIHZlbG9jaXR5MCA9IHJiMC5nZXRMaW5lYXJWZWxvY2l0eSgpOwogICAgICAgICAgICAgIHZhciB2ZWxvY2l0eTEgPSByYjEuZ2V0TGluZWFyVmVsb2NpdHkoKTsKICAgICAgICAgICAgICB2YXIgd29ybGRQb3MwID0gY29udGFjdFBvaW50LmdldF9tX3Bvc2l0aW9uV29ybGRPbkEoKTsKICAgICAgICAgICAgICB2YXIgd29ybGRQb3MxID0gY29udGFjdFBvaW50LmdldF9tX3Bvc2l0aW9uV29ybGRPbkIoKTsKICAgICAgICAgICAgICB2YXIgbG9jYWxQb3MwID0gY29udGFjdFBvaW50LmdldF9tX2xvY2FsUG9pbnRBKCk7CiAgICAgICAgICAgICAgdmFyIGxvY2FsUG9zMSA9IGNvbnRhY3RQb2ludC5nZXRfbV9sb2NhbFBvaW50QigpOwogICAgICAgICAgICAgIGNvbnRhY3RzLnB1c2goewogICAgICAgICAgICAgICAgZGlzdGFuY2U6IGRpc3RhbmNlLAogICAgICAgICAgICAgICAgZWxlbWVudHM6IFt7CiAgICAgICAgICAgICAgICAgIHV1aWQ6IHJiMC51dWlkLAogICAgICAgICAgICAgICAgICB2ZWxvY2l0eTogewogICAgICAgICAgICAgICAgICAgIHg6IHZlbG9jaXR5MC54KCksCiAgICAgICAgICAgICAgICAgICAgeTogdmVsb2NpdHkwLnkoKSwKICAgICAgICAgICAgICAgICAgICB6OiB2ZWxvY2l0eTAueigpCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIHdvcmxkUG9zOiB7CiAgICAgICAgICAgICAgICAgICAgeDogd29ybGRQb3MwLngoKSwKICAgICAgICAgICAgICAgICAgICB5OiB3b3JsZFBvczAueSgpLAogICAgICAgICAgICAgICAgICAgIHo6IHdvcmxkUG9zMC56KCkKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgbG9jYWxQb3M6IHsKICAgICAgICAgICAgICAgICAgICB4OiBsb2NhbFBvczAueCgpLAogICAgICAgICAgICAgICAgICAgIHk6IGxvY2FsUG9zMC55KCksCiAgICAgICAgICAgICAgICAgICAgejogbG9jYWxQb3MwLnooKQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgIHV1aWQ6IHJiMS51dWlkLAogICAgICAgICAgICAgICAgICB2ZWxvY2l0eTogewogICAgICAgICAgICAgICAgICAgIHg6IHZlbG9jaXR5MS54KCksCiAgICAgICAgICAgICAgICAgICAgeTogdmVsb2NpdHkxLnkoKSwKICAgICAgICAgICAgICAgICAgICB6OiB2ZWxvY2l0eTEueigpCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIHdvcmxkUG9zOiB7CiAgICAgICAgICAgICAgICAgICAgeDogd29ybGRQb3MxLngoKSwKICAgICAgICAgICAgICAgICAgICB5OiB3b3JsZFBvczEueSgpLAogICAgICAgICAgICAgICAgICAgIHo6IHdvcmxkUG9zMS56KCkKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgbG9jYWxQb3M6IHsKICAgICAgICAgICAgICAgICAgICB4OiBsb2NhbFBvczEueCgpLAogICAgICAgICAgICAgICAgICAgIHk6IGxvY2FsUG9zMS55KCksCiAgICAgICAgICAgICAgICAgICAgejogbG9jYWxQb3MxLnooKQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9XQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICBkaXNwYXRjaGVyJDEuc2VuZERpc3BhdGNoRXZlbnQocmIwLnV1aWQsIFBIWVNJQ1NfRVZFTlRTLkVMRU1FTlQuQ09MTElTSU9OLCB7CiAgICAgICAgICAgICAgY29udGFjdHM6IGNvbnRhY3RzCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBkaXNwYXRjaGVyJDEuc2VuZERpc3BhdGNoRXZlbnQocmIxLnV1aWQsIFBIWVNJQ1NfRVZFTlRTLkVMRU1FTlQuQ09MTElTSU9OLCB7CiAgICAgICAgICAgICAgY29udGFjdHM6IGNvbnRhY3RzCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgImFkZEVsZW1lbnQiLCBmdW5jdGlvbiAoZGF0YSkgewogICAgICAgICAgX3RoaXMuZWxlbWVudHNbZGF0YS51dWlkXSA9IGRhdGE7CiAgICAgICAgfSk7CgogICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAidXBkYXRlQm9keVN0YXRlIiwgZnVuY3Rpb24gKF9yZWYpIHsKICAgICAgICAgIHZhciB1dWlkID0gX3JlZi51dWlkLAogICAgICAgICAgICAgIHN0YXRlID0gX3JlZi5zdGF0ZTsKICAgICAgICAgIF90aGlzLmVsZW1lbnRzW3V1aWRdLnN0YXRlID0gX29iamVjdFNwcmVhZDIoe30sIF90aGlzLmVsZW1lbnRzW3V1aWRdLnN0YXRlLCB7fSwgc3RhdGUpOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgInRlcm1pbmF0ZSIsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFtbW8uZGVzdHJveShfdGhpcy5keW5hbWljc1dvcmxkKTsKICAgICAgICAgIEFtbW8uZGVzdHJveShfdGhpcy5zb2x2ZXIpOwogICAgICAgICAgQW1tby5kZXN0cm95KF90aGlzLmRpc3BhdGNoZXIpOwogICAgICAgICAgQW1tby5kZXN0cm95KF90aGlzLmNvbGxpc2lvbkNvbmZpZ3VyYXRpb24pOwogICAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoX3RoaXMucmVxdWVzdEFuaW1hdGlvbkZyYW1lSWQpOwogICAgICAgICAgZGlzcGF0Y2hlciQxLnNlbmRUZXJtaW5hdGVFdmVudCgpOwogICAgICAgIH0pOwoKICAgICAgICB0aGlzLmVsZW1lbnRzID0ge307CiAgICAgICAgdGhpcy5pbml0aWFsaXNlZCA9IGZhbHNlOwogICAgICAgIHRoaXMuY29sbGlzaW9uQ29uZmlndXJhdGlvbiA9IHVuZGVmaW5lZDsKICAgICAgICB0aGlzLmRpc3BhdGNoZXIgPSB1bmRlZmluZWQ7CiAgICAgICAgdGhpcy5icm9hZHBoYXNlID0gdW5kZWZpbmVkOwogICAgICAgIHRoaXMuc29sdmVyID0gdW5kZWZpbmVkOwogICAgICAgIHRoaXMuZHluYW1pY3NXb3JsZCA9IHVuZGVmaW5lZDsKICAgICAgICB0aGlzLnJlcXVlc3RBbmltYXRpb25GcmFtZUlkID0gbnVsbDsKICAgICAgICB0aGlzLmNsb2NrID0gbmV3IENsb2NrKCk7CiAgICAgIH0KCiAgICAgIF9jcmVhdGVDbGFzcyhXb3JsZCwgW3sKICAgICAgICBrZXk6ICJkaXNwb3NlQm9keSIsCiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGRpc3Bvc2VCb2R5KF9yZWYyKSB7CiAgICAgICAgICB2YXIgdXVpZCA9IF9yZWYyLnV1aWQ7CiAgICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXMuZ2V0RWxlbWVudCh1dWlkKTsKICAgICAgICAgIHRoaXMuZHluYW1pY3NXb3JsZC5yZW1vdmVSaWdpZEJvZHkoZWxlbWVudC5ib2R5KTsKICAgICAgICAgIHRoaXMucmVtb3ZlRWxlbWVudCh1dWlkKTsKICAgICAgICAgIGRpc3BhdGNoZXIkMS5zZW5kRWxlbWVudERpc3Bvc2VkKHsKICAgICAgICAgICAgdXVpZDogdXVpZAogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9XSk7CgogICAgICByZXR1cm4gV29ybGQ7CiAgICB9KCk7CiAgICB2YXIgd29ybGQgPSBuZXcgV29ybGQoKTsKCiAgICB2YXIgREVGQVVMVF9ST0xMX0lORkxVRU5DRSA9IDAuMjsKICAgIHZhciBERUZBVUxUX0ZSSUNUSU9OID0gMTAwMDsKICAgIHZhciBERUZBVUxUX01BU1MgPSA4MDA7CiAgICB2YXIgYWRkVmVoaWNsZSA9IGZ1bmN0aW9uIGFkZFZlaGljbGUoZGF0YSkgewogICAgICB2YXIgcG9zaXRpb24gPSBkYXRhLnBvc2l0aW9uLAogICAgICAgICAgcXVhdGVybmlvbiA9IGRhdGEucXVhdGVybmlvbiwKICAgICAgICAgIHV1aWQgPSBkYXRhLnV1aWQsCiAgICAgICAgICB3aGVlbHMgPSBkYXRhLndoZWVscywKICAgICAgICAgIF9kYXRhJG1hc3MgPSBkYXRhLm1hc3MsCiAgICAgICAgICBtYXNzID0gX2RhdGEkbWFzcyA9PT0gdm9pZCAwID8gREVGQVVMVF9NQVNTIDogX2RhdGEkbWFzcywKICAgICAgICAgIF9kYXRhJHdpZHRoID0gZGF0YS53aWR0aCwKICAgICAgICAgIHdpZHRoID0gX2RhdGEkd2lkdGggPT09IHZvaWQgMCA/IDEuOCA6IF9kYXRhJHdpZHRoLAogICAgICAgICAgX2RhdGEkaGVpZ2h0ID0gZGF0YS5oZWlnaHQsCiAgICAgICAgICBoZWlnaHQgPSBfZGF0YSRoZWlnaHQgPT09IHZvaWQgMCA/IC42IDogX2RhdGEkaGVpZ2h0LAogICAgICAgICAgX2RhdGEkbGVuZ3RoID0gZGF0YS5sZW5ndGgsCiAgICAgICAgICBsZW5ndGggPSBfZGF0YSRsZW5ndGggPT09IHZvaWQgMCA/IDQgOiBfZGF0YSRsZW5ndGgsCiAgICAgICAgICBfZGF0YSRmcmljdGlvbiA9IGRhdGEuZnJpY3Rpb24sCiAgICAgICAgICBmcmljdGlvbiA9IF9kYXRhJGZyaWN0aW9uID09PSB2b2lkIDAgPyBERUZBVUxUX0ZSSUNUSU9OIDogX2RhdGEkZnJpY3Rpb24sCiAgICAgICAgICBfZGF0YSRyb2xsSW5mbHVlbmNlID0gZGF0YS5yb2xsSW5mbHVlbmNlLAogICAgICAgICAgcm9sbEluZmx1ZW5jZSA9IF9kYXRhJHJvbGxJbmZsdWVuY2UgPT09IHZvaWQgMCA/IERFRkFVTFRfUk9MTF9JTkZMVUVOQ0UgOiBfZGF0YSRyb2xsSW5mbHVlbmNlLAogICAgICAgICAgX2RhdGEkd2hlZWxzT3B0aW9ucyA9IGRhdGEud2hlZWxzT3B0aW9ucywKICAgICAgICAgIHdoZWVsc09wdGlvbnMgPSBfZGF0YSR3aGVlbHNPcHRpb25zID09PSB2b2lkIDAgPyB7fSA6IF9kYXRhJHdoZWVsc09wdGlvbnMsCiAgICAgICAgICBfZGF0YSRzdXNwZW5zaW9ucyA9IGRhdGEuc3VzcGVuc2lvbnMsCiAgICAgICAgICBzdXNwZW5zaW9ucyA9IF9kYXRhJHN1c3BlbnNpb25zID09PSB2b2lkIDAgPyB7fSA6IF9kYXRhJHN1c3BlbnNpb25zOwogICAgICB2YXIgX3doZWVsc09wdGlvbnMkYmFjayA9IHdoZWVsc09wdGlvbnMuYmFjaywKICAgICAgICAgIGJhY2sgPSBfd2hlZWxzT3B0aW9ucyRiYWNrID09PSB2b2lkIDAgPyB7fSA6IF93aGVlbHNPcHRpb25zJGJhY2ssCiAgICAgICAgICBfd2hlZWxzT3B0aW9ucyRmcm9udCA9IHdoZWVsc09wdGlvbnMuZnJvbnQsCiAgICAgICAgICBmcm9udCA9IF93aGVlbHNPcHRpb25zJGZyb250ID09PSB2b2lkIDAgPyB7fSA6IF93aGVlbHNPcHRpb25zJGZyb250OwogICAgICB2YXIgX2JhY2skYXhpc1Bvc2l0aW9uID0gYmFjay5heGlzUG9zaXRpb24sCiAgICAgICAgICBheGlzUG9zaXRpb25CYWNrID0gX2JhY2skYXhpc1Bvc2l0aW9uID09PSB2b2lkIDAgPyAtMSA6IF9iYWNrJGF4aXNQb3NpdGlvbiwKICAgICAgICAgIF9iYWNrJHJhZGl1cyA9IGJhY2sucmFkaXVzLAogICAgICAgICAgd2hlZWxSYWRpdXNCYWNrID0gX2JhY2skcmFkaXVzID09PSB2b2lkIDAgPyAuNCA6IF9iYWNrJHJhZGl1cywKICAgICAgICAgIF9iYWNrJGhhbGZUcmFjayA9IGJhY2suaGFsZlRyYWNrLAogICAgICAgICAgd2hlZWxIYWxmVHJhY2tCYWNrID0gX2JhY2skaGFsZlRyYWNrID09PSB2b2lkIDAgPyAxIDogX2JhY2skaGFsZlRyYWNrLAogICAgICAgICAgX2JhY2skYXhpc0hlaWdodCA9IGJhY2suYXhpc0hlaWdodCwKICAgICAgICAgIHdoZWVsQXhpc0hlaWdodEJhY2sgPSBfYmFjayRheGlzSGVpZ2h0ID09PSB2b2lkIDAgPyAuMyA6IF9iYWNrJGF4aXNIZWlnaHQ7CiAgICAgIHZhciBfZnJvbnQkYXhpc1Bvc2l0aW9uID0gZnJvbnQuYXhpc1Bvc2l0aW9uLAogICAgICAgICAgYXhpc1Bvc2l0aW9uRnJvbnQgPSBfZnJvbnQkYXhpc1Bvc2l0aW9uID09PSB2b2lkIDAgPyAxLjcgOiBfZnJvbnQkYXhpc1Bvc2l0aW9uLAogICAgICAgICAgX2Zyb250JHJhZGl1cyA9IGZyb250LnJhZGl1cywKICAgICAgICAgIHdoZWVsUmFkaXVzRnJvbnQgPSBfZnJvbnQkcmFkaXVzID09PSB2b2lkIDAgPyAuNCA6IF9mcm9udCRyYWRpdXMsCiAgICAgICAgICBfZnJvbnQkaGFsZlRyYWNrID0gZnJvbnQuaGFsZlRyYWNrLAogICAgICAgICAgd2hlZWxIYWxmVHJhY2tGcm9udCA9IF9mcm9udCRoYWxmVHJhY2sgPT09IHZvaWQgMCA/IDEgOiBfZnJvbnQkaGFsZlRyYWNrLAogICAgICAgICAgX2Zyb250JGF4aXNIZWlnaHQgPSBmcm9udC5heGlzSGVpZ2h0LAogICAgICAgICAgd2hlZWxBeGlzSGVpZ2h0RnJvbnQgPSBfZnJvbnQkYXhpc0hlaWdodCA9PT0gdm9pZCAwID8gLjMgOiBfZnJvbnQkYXhpc0hlaWdodDsKICAgICAgdmFyIF9zdXNwZW5zaW9ucyRzdGlmZm5lcyA9IHN1c3BlbnNpb25zLnN0aWZmbmVzcywKICAgICAgICAgIHN0aWZmbmVzcyA9IF9zdXNwZW5zaW9ucyRzdGlmZm5lcyA9PT0gdm9pZCAwID8gMjAuMCA6IF9zdXNwZW5zaW9ucyRzdGlmZm5lcywKICAgICAgICAgIF9zdXNwZW5zaW9ucyRkYW1waW5nID0gc3VzcGVuc2lvbnMuZGFtcGluZywKICAgICAgICAgIGRhbXBpbmcgPSBfc3VzcGVuc2lvbnMkZGFtcGluZyA9PT0gdm9pZCAwID8gMi4zIDogX3N1c3BlbnNpb25zJGRhbXBpbmcsCiAgICAgICAgICBfc3VzcGVuc2lvbnMkY29tcHJlc3MgPSBzdXNwZW5zaW9ucy5jb21wcmVzc2lvbiwKICAgICAgICAgIGNvbXByZXNzaW9uID0gX3N1c3BlbnNpb25zJGNvbXByZXNzID09PSB2b2lkIDAgPyA0LjQgOiBfc3VzcGVuc2lvbnMkY29tcHJlc3MsCiAgICAgICAgICBfc3VzcGVuc2lvbnMkcmVzdExlbmcgPSBzdXNwZW5zaW9ucy5yZXN0TGVuZ3RoLAogICAgICAgICAgcmVzdExlbmd0aCA9IF9zdXNwZW5zaW9ucyRyZXN0TGVuZyA9PT0gdm9pZCAwID8gMC42IDogX3N1c3BlbnNpb25zJHJlc3RMZW5nOyAvLyBDaGFzc2lzCgogICAgICB2YXIgZ2VvbWV0cnkgPSBuZXcgQW1tby5idEJveFNoYXBlKG5ldyBBbW1vLmJ0VmVjdG9yMyh3aWR0aCAqIC41LCBoZWlnaHQgKiAuNSwgbGVuZ3RoICogLjUpKTsKICAgICAgdmFyIHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7CiAgICAgIHRyYW5zZm9ybS5zZXRJZGVudGl0eSgpOwogICAgICB0cmFuc2Zvcm0uc2V0T3JpZ2luKG5ldyBBbW1vLmJ0VmVjdG9yMyhwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56KSk7CiAgICAgIHRyYW5zZm9ybS5zZXRSb3RhdGlvbihuZXcgQW1tby5idFF1YXRlcm5pb24ocXVhdGVybmlvbi54LCBxdWF0ZXJuaW9uLnksIHF1YXRlcm5pb24ueiwgcXVhdGVybmlvbi53KSk7CiAgICAgIHZhciBtb3Rpb25TdGF0ZSA9IG5ldyBBbW1vLmJ0RGVmYXVsdE1vdGlvblN0YXRlKHRyYW5zZm9ybSk7CiAgICAgIHZhciBsb2NhbEluZXJ0aWEgPSBuZXcgQW1tby5idFZlY3RvcjMoMCwgMCwgMCk7CiAgICAgIGdlb21ldHJ5LmNhbGN1bGF0ZUxvY2FsSW5lcnRpYShtYXNzLCBsb2NhbEluZXJ0aWEpOwogICAgICB2YXIgY2hhc3NpcyA9IG5ldyBBbW1vLmJ0UmlnaWRCb2R5KG5ldyBBbW1vLmJ0UmlnaWRCb2R5Q29uc3RydWN0aW9uSW5mbyhtYXNzLCBtb3Rpb25TdGF0ZSwgZ2VvbWV0cnksIGxvY2FsSW5lcnRpYSkpOwogICAgICBjaGFzc2lzLnNldEFjdGl2YXRpb25TdGF0ZShESVNBQkxFX0RFQUNUSVZBVElPTik7CiAgICAgIHdvcmxkLmFkZFJpZ2lkQm9keShjaGFzc2lzKTsgLy8gUmF5Y2FzdCBWZWhpY2xlCgogICAgICB2YXIgdHVuaW5nID0gbmV3IEFtbW8uYnRWZWhpY2xlVHVuaW5nKCk7CiAgICAgIHZhciByYXlDYXN0ZXIgPSBuZXcgQW1tby5idERlZmF1bHRWZWhpY2xlUmF5Y2FzdGVyKHdvcmxkLmdldER5bmFtaWNzV29ybGQoKSk7CiAgICAgIHZhciB2ZWhpY2xlID0gbmV3IEFtbW8uYnRSYXljYXN0VmVoaWNsZSh0dW5pbmcsIGNoYXNzaXMsIHJheUNhc3Rlcik7CiAgICAgIHZlaGljbGUuc2V0Q29vcmRpbmF0ZVN5c3RlbSgwLCAxLCAyKTsKICAgICAgd29ybGQuYWRkQWN0aW9uKHZlaGljbGUpOwogICAgICB2YXIgd2hlZWxEaXJlY3Rpb25DUzAgPSBuZXcgQW1tby5idFZlY3RvcjMoMCwgLTEsIDApOwogICAgICB2YXIgd2hlZWxBeGxlQ1MgPSBuZXcgQW1tby5idFZlY3RvcjMoLTEsIDAsIDApOwoKICAgICAgdmFyIGFkZFdoZWVsID0gZnVuY3Rpb24gYWRkV2hlZWwoaXNGcm9udCwgcG9zLCByYWRpdXMpIHsKICAgICAgICB2YXIgd2hlZWxJbmZvID0gdmVoaWNsZS5hZGRXaGVlbChwb3MsIHdoZWVsRGlyZWN0aW9uQ1MwLCB3aGVlbEF4bGVDUywgcmVzdExlbmd0aCwgcmFkaXVzLCB0dW5pbmcsIGlzRnJvbnQpOwogICAgICAgIHdoZWVsSW5mby5zZXRfbV9zdXNwZW5zaW9uU3RpZmZuZXNzKHN0aWZmbmVzcyk7CiAgICAgICAgd2hlZWxJbmZvLnNldF9tX3doZWVsc0RhbXBpbmdSZWxheGF0aW9uKGRhbXBpbmcpOwogICAgICAgIHdoZWVsSW5mby5zZXRfbV93aGVlbHNEYW1waW5nQ29tcHJlc3Npb24oY29tcHJlc3Npb24pOwogICAgICAgIHdoZWVsSW5mby5zZXRfbV9mcmljdGlvblNsaXAoZnJpY3Rpb24pOwogICAgICAgIHdoZWVsSW5mby5zZXRfbV9yb2xsSW5mbHVlbmNlKHJvbGxJbmZsdWVuY2UpOwogICAgICB9OwoKICAgICAgYWRkV2hlZWwodHJ1ZSwgbmV3IEFtbW8uYnRWZWN0b3IzKHdoZWVsSGFsZlRyYWNrRnJvbnQsIHdoZWVsQXhpc0hlaWdodEZyb250LCBheGlzUG9zaXRpb25Gcm9udCksIHdoZWVsUmFkaXVzRnJvbnQpOwogICAgICBhZGRXaGVlbCh0cnVlLCBuZXcgQW1tby5idFZlY3RvcjMoLXdoZWVsSGFsZlRyYWNrRnJvbnQsIHdoZWVsQXhpc0hlaWdodEZyb250LCBheGlzUG9zaXRpb25Gcm9udCksIHdoZWVsUmFkaXVzRnJvbnQpOwogICAgICBhZGRXaGVlbChmYWxzZSwgbmV3IEFtbW8uYnRWZWN0b3IzKC13aGVlbEhhbGZUcmFja0JhY2ssIHdoZWVsQXhpc0hlaWdodEJhY2ssIGF4aXNQb3NpdGlvbkJhY2spLCB3aGVlbFJhZGl1c0JhY2spOwogICAgICBhZGRXaGVlbChmYWxzZSwgbmV3IEFtbW8uYnRWZWN0b3IzKHdoZWVsSGFsZlRyYWNrQmFjaywgd2hlZWxBeGlzSGVpZ2h0QmFjaywgYXhpc1Bvc2l0aW9uQmFjayksIHdoZWVsUmFkaXVzQmFjayk7CiAgICAgIHZlaGljbGUudXVpZCA9IHV1aWQ7CiAgICAgIHdvcmxkLnNldEJvZHkoewogICAgICAgIHR5cGU6IFRZUEVTLlZFSElDTEUsCiAgICAgICAgdXVpZDogdXVpZCwKICAgICAgICB2ZWhpY2xlOiB2ZWhpY2xlLAogICAgICAgIHdoZWVsczogd2hlZWxzLAogICAgICAgIG9wdGlvbnM6IGRhdGEsCiAgICAgICAgc3RhdGU6IERFRkFVTFRfVkVISUNMRV9TVEFURQogICAgICB9KTsKICAgIH07CiAgICB2YXIgc2V0VmVoaWNsZVBvc2l0aW9uID0gZnVuY3Rpb24gc2V0VmVoaWNsZVBvc2l0aW9uKGRhdGEpIHsKICAgICAgdmFyIHV1aWQgPSBkYXRhLnV1aWQsCiAgICAgICAgICBwb3NpdGlvbiA9IGRhdGEucG9zaXRpb247CiAgICAgIHZhciBlbGVtZW50ID0gd29ybGQuZ2V0RWxlbWVudCh1dWlkKTsKCiAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09IFRZUEVTLlZFSElDTEUpIHsKICAgICAgICB2YXIgYm9keSA9IGVsZW1lbnQudmVoaWNsZS5nZXRSaWdpZEJvZHkoKTsKICAgICAgICB2YXIgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTsKICAgICAgICBib2R5LmdldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7CiAgICAgICAgdHJhbnNmb3JtLnNldE9yaWdpbihuZXcgQW1tby5idFZlY3RvcjMocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueikpOwogICAgICAgIGJvZHkuc2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKICAgICAgfQogICAgfTsKICAgIHZhciBzZXRWZWhpY2xlUXVhdGVybmlvbiA9IGZ1bmN0aW9uIHNldFZlaGljbGVRdWF0ZXJuaW9uKGRhdGEpIHsKICAgICAgdmFyIHV1aWQgPSBkYXRhLnV1aWQsCiAgICAgICAgICBxdWF0ZXJuaW9uID0gZGF0YS5xdWF0ZXJuaW9uOwogICAgICB2YXIgZWxlbWVudCA9IHdvcmxkLmdldEVsZW1lbnQodXVpZCk7CgogICAgICBpZiAoZWxlbWVudC50eXBlID09PSBUWVBFUy5WRUhJQ0xFKSB7CiAgICAgICAgdmFyIGJvZHkgPSBlbGVtZW50LnZlaGljbGUuZ2V0UmlnaWRCb2R5KCk7CiAgICAgICAgdmFyIHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7CiAgICAgICAgYm9keS5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgICAgIHRyYW5zZm9ybS5zZXRSb3RhdGlvbihuZXcgQW1tby5idFF1YXRlcm5pb24ocXVhdGVybmlvbi54LCBxdWF0ZXJuaW9uLnksIHF1YXRlcm5pb24ueiwgcXVhdGVybmlvbi53KSk7CiAgICAgICAgYm9keS5zZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgICB9CiAgICB9OwogICAgdmFyIHJlc2V0VmVoaWNsZSA9IGZ1bmN0aW9uIHJlc2V0VmVoaWNsZShkYXRhKSB7CiAgICAgIHZhciB1dWlkID0gZGF0YS51dWlkLAogICAgICAgICAgcXVhdGVybmlvbiA9IGRhdGEucXVhdGVybmlvbiwKICAgICAgICAgIHBvc2l0aW9uID0gZGF0YS5wb3NpdGlvbjsKICAgICAgdmFyIGVsZW1lbnQgPSB3b3JsZC5nZXRFbGVtZW50KHV1aWQpOwoKICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gVFlQRVMuVkVISUNMRSkgewogICAgICAgIHZhciBib2R5ID0gZWxlbWVudC52ZWhpY2xlLmdldFJpZ2lkQm9keSgpOwogICAgICAgIHZhciB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpOwogICAgICAgIGJvZHkuZ2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKICAgICAgICB0cmFuc2Zvcm0uc2V0SWRlbnRpdHkoKTsKICAgICAgICB0cmFuc2Zvcm0uc2V0T3JpZ2luKG5ldyBBbW1vLmJ0VmVjdG9yMyhwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56KSk7CiAgICAgICAgdHJhbnNmb3JtLnNldFJvdGF0aW9uKG5ldyBBbW1vLmJ0UXVhdGVybmlvbihxdWF0ZXJuaW9uLngsIHF1YXRlcm5pb24ueSwgcXVhdGVybmlvbi56LCBxdWF0ZXJuaW9uLncpKTsKICAgICAgICBib2R5LnNldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7CiAgICAgIH0KICAgIH07CiAgICB2YXIgaGFuZGxlVmVoaWNsZVVwZGF0ZSA9IGZ1bmN0aW9uIGhhbmRsZVZlaGljbGVVcGRhdGUoX3JlZiwgZHQpIHsKICAgICAgdmFyIHZlaGljbGUgPSBfcmVmLnZlaGljbGUsCiAgICAgICAgICB3aGVlbHMgPSBfcmVmLndoZWVscywKICAgICAgICAgIHV1aWQgPSBfcmVmLnV1aWQsCiAgICAgICAgICBfcmVmJHN0YXRlID0gX3JlZi5zdGF0ZSwKICAgICAgICAgIHN0YXRlID0gX3JlZiRzdGF0ZSA9PT0gdm9pZCAwID8gREVGQVVMVF9WRUhJQ0xFX1NUQVRFIDogX3JlZiRzdGF0ZSwKICAgICAgICAgIF9yZWYkb3B0aW9ucyA9IF9yZWYub3B0aW9ucywKICAgICAgICAgIG9wdGlvbnMgPSBfcmVmJG9wdGlvbnMgPT09IHZvaWQgMCA/IHt9IDogX3JlZiRvcHRpb25zOwogICAgICB2YXIgc3BlZWQgPSB2ZWhpY2xlLmdldEN1cnJlbnRTcGVlZEttSG91cigpOwogICAgICBkaXNwYXRjaGVyJDEuc2VuZERpc3BhdGNoRXZlbnQodXVpZCwgUEhZU0lDU19FVkVOVFMuVkVISUNMRS5TUEVFRCwgewogICAgICAgIHNwZWVkOiBzcGVlZAogICAgICB9KTsKICAgICAgdmFyIGJyZWFraW5nRm9yY2UgPSAwOwogICAgICB2YXIgZW5naW5lRm9yY2UgPSAwOwogICAgICB2YXIgX29wdGlvbnMkc3RlZXJpbmdDbGFtID0gb3B0aW9ucy5zdGVlcmluZ0NsYW1wLAogICAgICAgICAgc3RlZXJpbmdDbGFtcCA9IF9vcHRpb25zJHN0ZWVyaW5nQ2xhbSA9PT0gdm9pZCAwID8gREVGQVVMVF9TVEVFUklOR19DTEFNUCA6IF9vcHRpb25zJHN0ZWVyaW5nQ2xhbSwKICAgICAgICAgIF9vcHRpb25zJHN0ZWVyaW5nSW5jciA9IG9wdGlvbnMuc3RlZXJpbmdJbmNyZW1lbnQsCiAgICAgICAgICBzdGVlcmluZ0luY3JlbWVudCA9IF9vcHRpb25zJHN0ZWVyaW5nSW5jciA9PT0gdm9pZCAwID8gREVGQVVMVF9TVEVFUklOR19JTkNSRU1FTlQgOiBfb3B0aW9ucyRzdGVlcmluZ0luY3IsCiAgICAgICAgICBfb3B0aW9ucyRtYXhFbmdpbmVGb3IgPSBvcHRpb25zLm1heEVuZ2luZUZvcmNlLAogICAgICAgICAgbWF4RW5naW5lRm9yY2UgPSBfb3B0aW9ucyRtYXhFbmdpbmVGb3IgPT09IHZvaWQgMCA/IERFRkFVTFRfTUFYX0VOR0lORV9GT1JDRSA6IF9vcHRpb25zJG1heEVuZ2luZUZvciwKICAgICAgICAgIF9vcHRpb25zJG1heEJyZWFraW5nRiA9IG9wdGlvbnMubWF4QnJlYWtpbmdGb3JjZSwKICAgICAgICAgIG1heEJyZWFraW5nRm9yY2UgPSBfb3B0aW9ucyRtYXhCcmVha2luZ0YgPT09IHZvaWQgMCA/IERFRkFVTFRfTUFYX0JSRUFLSU5HX0ZPUkNFIDogX29wdGlvbnMkbWF4QnJlYWtpbmdGOwoKICAgICAgaWYgKHN0YXRlLmFjY2VsZXJhdGlvbikgewogICAgICAgIGlmIChzcGVlZCA8IC0xKSBicmVha2luZ0ZvcmNlID0gbWF4QnJlYWtpbmdGb3JjZTtlbHNlIGVuZ2luZUZvcmNlID0gbWF4RW5naW5lRm9yY2U7CiAgICAgIH0KCiAgICAgIGlmIChzdGF0ZS5icmFraW5nKSB7CiAgICAgICAgaWYgKHNwZWVkID4gMSkgYnJlYWtpbmdGb3JjZSA9IG1heEJyZWFraW5nRm9yY2U7ZWxzZSBlbmdpbmVGb3JjZSA9IC1tYXhFbmdpbmVGb3JjZSAvIDI7CiAgICAgIH0KCiAgICAgIGlmIChzdGF0ZS5sZWZ0KSB7CiAgICAgICAgaWYgKHN0YXRlLnZlaGljbGVTdGVlcmluZyA8IHN0ZWVyaW5nQ2xhbXApIHN0YXRlLnZlaGljbGVTdGVlcmluZyArPSBzdGVlcmluZ0luY3JlbWVudDsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoc3RhdGUucmlnaHQpIHsKICAgICAgICAgIGlmIChzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgPiAtc3RlZXJpbmdDbGFtcCkgc3RhdGUudmVoaWNsZVN0ZWVyaW5nIC09IHN0ZWVyaW5nSW5jcmVtZW50OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoc3RhdGUudmVoaWNsZVN0ZWVyaW5nIDwgLXN0ZWVyaW5nSW5jcmVtZW50KSBzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgKz0gc3RlZXJpbmdJbmNyZW1lbnQ7ZWxzZSB7CiAgICAgICAgICAgIGlmIChzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgPiBzdGVlcmluZ0luY3JlbWVudCkgc3RhdGUudmVoaWNsZVN0ZWVyaW5nIC09IHN0ZWVyaW5nSW5jcmVtZW50O2Vsc2UgewogICAgICAgICAgICAgIHN0YXRlLnZlaGljbGVTdGVlcmluZyA9IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KCiAgICAgIHZlaGljbGUuYXBwbHlFbmdpbmVGb3JjZShlbmdpbmVGb3JjZSwgQkFDS19MRUZUKTsKICAgICAgdmVoaWNsZS5hcHBseUVuZ2luZUZvcmNlKGVuZ2luZUZvcmNlLCBCQUNLX1JJR0hUKTsKICAgICAgdmVoaWNsZS5zZXRCcmFrZShicmVha2luZ0ZvcmNlIC8gMiwgRlJPTlRfTEVGVCk7CiAgICAgIHZlaGljbGUuc2V0QnJha2UoYnJlYWtpbmdGb3JjZSAvIDIsIEZST05UX1JJR0hUKTsKICAgICAgdmVoaWNsZS5zZXRCcmFrZShicmVha2luZ0ZvcmNlLCBCQUNLX0xFRlQpOwogICAgICB2ZWhpY2xlLnNldEJyYWtlKGJyZWFraW5nRm9yY2UsIEJBQ0tfUklHSFQpOwogICAgICB2ZWhpY2xlLnNldFN0ZWVyaW5nVmFsdWUoc3RhdGUudmVoaWNsZVN0ZWVyaW5nLCBGUk9OVF9MRUZUKTsKICAgICAgdmVoaWNsZS5zZXRTdGVlcmluZ1ZhbHVlKHN0YXRlLnZlaGljbGVTdGVlcmluZywgRlJPTlRfUklHSFQpOwogICAgICB2YXIgdG0sIHAsIHEsIGk7CiAgICAgIHZhciBuID0gdmVoaWNsZS5nZXROdW1XaGVlbHMoKTsKCiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICB2ZWhpY2xlLnVwZGF0ZVdoZWVsVHJhbnNmb3JtKGksIHRydWUpOwogICAgICAgIHRtID0gdmVoaWNsZS5nZXRXaGVlbFRyYW5zZm9ybVdTKGkpOwogICAgICAgIHAgPSB0bS5nZXRPcmlnaW4oKTsKICAgICAgICBxID0gdG0uZ2V0Um90YXRpb24oKTsKICAgICAgICB2YXIgd2hlZWxVVUlEID0gd2hlZWxzW2ldOwogICAgICAgIGRpc3BhdGNoZXIkMS5zZW5kQm9keVVwZGF0ZSh3aGVlbFVVSUQsIHAsIHEsIGR0KTsKICAgICAgfQoKICAgICAgdG0gPSB2ZWhpY2xlLmdldENoYXNzaXNXb3JsZFRyYW5zZm9ybSgpOwogICAgICBwID0gdG0uZ2V0T3JpZ2luKCk7CiAgICAgIHEgPSB0bS5nZXRSb3RhdGlvbigpOwogICAgICB2YXIgZGlyZWN0aW9uID0gdmVoaWNsZS5nZXRGb3J3YXJkVmVjdG9yKCk7CiAgICAgIGRpc3BhdGNoZXIkMS5zZW5kRGlzcGF0Y2hFdmVudCh1dWlkLCBQSFlTSUNTX0VWRU5UUy5WRUhJQ0xFLkRJUkVDVElPTiwgewogICAgICAgIGRpcmVjdGlvbjogewogICAgICAgICAgeDogZGlyZWN0aW9uLngoKSwKICAgICAgICAgIHk6IGRpcmVjdGlvbi55KCksCiAgICAgICAgICB6OiBkaXJlY3Rpb24ueigpCiAgICAgICAgfQogICAgICB9KTsKICAgICAgZGlzcGF0Y2hlciQxLnNlbmRCb2R5VXBkYXRlKHV1aWQsIHAsIHEsIGR0KTsKICAgICAgd29ybGQudXBkYXRlQm9keVN0YXRlKHV1aWQsIHN0YXRlKTsKICAgIH07CgogICAgdmFyIGNyZWF0ZUdob3N0Q29sbGlkZXIgPSBmdW5jdGlvbiBjcmVhdGVHaG9zdENvbGxpZGVyKHJhZGl1cywgcG9zaXRpb24pIHsKICAgICAgdmFyIGdob3N0Q29sbGlkZXIgPSBuZXcgQW1tby5idEdob3N0T2JqZWN0KCk7CiAgICAgIHZhciB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpOwogICAgICBnaG9zdENvbGxpZGVyLnNldENvbGxpc2lvblNoYXBlKG5ldyBBbW1vLmJ0U3BoZXJlU2hhcGUocmFkaXVzKSk7CiAgICAgIGdob3N0Q29sbGlkZXIuZ2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKICAgICAgdHJhbnNmb3JtLnNldElkZW50aXR5KCk7CiAgICAgIHRyYW5zZm9ybS5zZXRPcmlnaW4ocG9zaXRpb24pOwogICAgICB0cmFuc2Zvcm0uc2V0Um90YXRpb24obmV3IEFtbW8uYnRRdWF0ZXJuaW9uKDAsIDAsIDAsIDEpKTsKICAgICAgZ2hvc3RDb2xsaWRlci5zZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgICByZXR1cm4gewogICAgICAgIGdob3N0Q29sbGlkZXI6IGdob3N0Q29sbGlkZXIsCiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2Zvcm0KICAgICAgfTsKICAgIH07CiAgICB2YXIgZm9yRWFjaEdob3N0Q29sbGlzaW9uID0gZnVuY3Rpb24gZm9yRWFjaEdob3N0Q29sbGlzaW9uKGdob3N0Q29sbGlkZXIpIHsKICAgICAgdmFyIGZvckVhY2hDYWxsYmFjayA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZnVuY3Rpb24gKCkge307CiAgICAgIHZhciBjb2xsaXNpb25zID0gZ2hvc3RDb2xsaWRlci5nZXROdW1PdmVybGFwcGluZ09iamVjdHMoKTsKCiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29sbGlzaW9uczsgaSsrKSB7CiAgICAgICAgdmFyIG9iamVjdCA9IEFtbW8uY2FzdE9iamVjdChnaG9zdENvbGxpZGVyLmdldE92ZXJsYXBwaW5nT2JqZWN0KGkpLCBBbW1vLmJ0UmlnaWRCb2R5KTsKICAgICAgICB2YXIgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTsKICAgICAgICBvYmplY3QuZ2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKICAgICAgICBmb3JFYWNoQ2FsbGJhY2sob2JqZWN0LCB0cmFuc2Zvcm0sIGkpOwogICAgICAgIEFtbW8uZGVzdHJveSh0cmFuc2Zvcm0pOwogICAgICB9CiAgICB9OwogICAgdmFyIGdldEV4cGxvc2lvblBvc2l0aW9uID0gZnVuY3Rpb24gZ2V0RXhwbG9zaW9uUG9zaXRpb24odXVpZCwgcG9zaXRpb24pIHsKICAgICAgdmFyIGV4cGxvc2lvblBvc2l0aW9uID0gcG9zaXRpb247CgogICAgICBpZiAoIWV4cGxvc2lvblBvc2l0aW9uKSB7CiAgICAgICAgdmFyIF93b3JsZCRnZXRFbGVtZW50ID0gd29ybGQuZ2V0RWxlbWVudCh1dWlkKSwKICAgICAgICAgICAgYm9keSA9IF93b3JsZCRnZXRFbGVtZW50LmJvZHk7CgogICAgICAgIHZhciBtb3Rpb25TdGF0ZSA9IGJvZHkuZ2V0TW90aW9uU3RhdGUoKTsKICAgICAgICB2YXIgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTsKICAgICAgICBtb3Rpb25TdGF0ZS5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgICAgIGV4cGxvc2lvblBvc2l0aW9uID0gdHJhbnNmb3JtLmdldE9yaWdpbigpOwogICAgICB9CgogICAgICByZXR1cm4gZXhwbG9zaW9uUG9zaXRpb247CiAgICB9OwogICAgdmFyIGdldEV4cGxvc2lvbkltcHVsc2UgPSBmdW5jdGlvbiBnZXRFeHBsb3Npb25JbXB1bHNlKHBvc2l0aW9uLCBleHBsb3Npb25Qb3NpdGlvbiwgc3RyZW5ndGgpIHsKICAgICAgdmFyIGRpc3RhbmNlID0gcG9zaXRpb24ub3Bfc3ViKGV4cGxvc2lvblBvc2l0aW9uKTsKICAgICAgZGlzdGFuY2Uubm9ybWFsaXplKCk7CiAgICAgIHZhciBpbXB1bHNlID0gZGlzdGFuY2Uub3BfbXVsKHN0cmVuZ3RoKTsKICAgICAgaW1wdWxzZS5zZXRZKGltcHVsc2UueSgpICsgc3RyZW5ndGgpOwogICAgICByZXR1cm4gaW1wdWxzZTsKICAgIH07CiAgICB2YXIgY3JlYXRlRXhwbG9zaW9uID0gZnVuY3Rpb24gY3JlYXRlRXhwbG9zaW9uKF9yZWYpIHsKICAgICAgdmFyIHV1aWQgPSBfcmVmLnV1aWQsCiAgICAgICAgICBwb3NpdGlvbiA9IF9yZWYucG9zaXRpb24sCiAgICAgICAgICBfcmVmJHJhZGl1cyA9IF9yZWYucmFkaXVzLAogICAgICAgICAgcmFkaXVzID0gX3JlZiRyYWRpdXMgPT09IHZvaWQgMCA/IEVYUExPU0lPTl9TSVpFUy5TTUFMTCA6IF9yZWYkcmFkaXVzLAogICAgICAgICAgX3JlZiRzdHJlbmd0aCA9IF9yZWYuc3RyZW5ndGgsCiAgICAgICAgICBzdHJlbmd0aCA9IF9yZWYkc3RyZW5ndGggPT09IHZvaWQgMCA/IEVYUExPU0lPTl9TVFJFTkdUSFMuTUVESVVNIDogX3JlZiRzdHJlbmd0aDsKCiAgICAgIHRyeSB7CiAgICAgICAgdmFyIGV4cGxvc2lvblBvc2l0aW9uID0gZ2V0RXhwbG9zaW9uUG9zaXRpb24odXVpZCwgcG9zaXRpb24pOwoKICAgICAgICB2YXIgX2NyZWF0ZUdob3N0Q29sbGlkZXIgPSBjcmVhdGVHaG9zdENvbGxpZGVyKHJhZGl1cywgZXhwbG9zaW9uUG9zaXRpb24pLAogICAgICAgICAgICBnaG9zdENvbGxpZGVyID0gX2NyZWF0ZUdob3N0Q29sbGlkZXIuZ2hvc3RDb2xsaWRlciwKICAgICAgICAgICAgdHJhbnNmb3JtID0gX2NyZWF0ZUdob3N0Q29sbGlkZXIudHJhbnNmb3JtOwoKICAgICAgICB3b3JsZC5hZGRDb2xsaXNpb25PYmplY3QoZ2hvc3RDb2xsaWRlcik7CiAgICAgICAgZm9yRWFjaEdob3N0Q29sbGlzaW9uKGdob3N0Q29sbGlkZXIsIGZ1bmN0aW9uIChvYmplY3QsIG9iamVjdFRyYW5zZm9ybSkgewogICAgICAgICAgdmFyIG9yaWdpbiA9IG9iamVjdFRyYW5zZm9ybS5nZXRPcmlnaW4oKTsKICAgICAgICAgIG9iamVjdC5hY3RpdmF0ZSh0cnVlKTsKICAgICAgICAgIG9iamVjdC5hcHBseUNlbnRyYWxJbXB1bHNlKGdldEV4cGxvc2lvbkltcHVsc2Uob3JpZ2luLCBleHBsb3Npb25Qb3NpdGlvbiwgc3RyZW5ndGgpKTsKICAgICAgICB9KTsKICAgICAgICB3b3JsZC5nZXREeW5hbWljc1dvcmxkKCkucmVtb3ZlQ29sbGlzaW9uT2JqZWN0KGdob3N0Q29sbGlkZXIpOwogICAgICAgIEFtbW8uZGVzdHJveShnaG9zdENvbGxpZGVyKTsKICAgICAgICBBbW1vLmRlc3Ryb3kodHJhbnNmb3JtKTsKICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIGNvbnNvbGUubG9nKGUpOwogICAgICB9CiAgICB9OwoKICAgIHZhciBoYW5kbGVMb2FkRXZlbnQgPSBmdW5jdGlvbiBoYW5kbGVMb2FkRXZlbnQob3B0aW9ucykgewogICAgICByZXR1cm4gZnVuY3Rpb24gKEFtbW8pIHsKICAgICAgICBzZWxmLkFtbW8gPSBBbW1vOwoKICAgICAgICBvbm1lc3NhZ2UgPSBmdW5jdGlvbiBvbm1lc3NhZ2UoX3JlZikgewogICAgICAgICAgdmFyIGRhdGEgPSBfcmVmLmRhdGE7CgogICAgICAgICAgc3dpdGNoIChkYXRhLmV2ZW50KSB7CiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuQURELkJPWDoKICAgICAgICAgICAgICBhZGRCb3goZGF0YSk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkFERC5TUEhFUkU6CiAgICAgICAgICAgICAgYWRkU3BoZXJlKGRhdGEpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5BREQuVkVISUNMRToKICAgICAgICAgICAgICBhZGRWZWhpY2xlKGRhdGEpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5BREQuTU9ERUw6CiAgICAgICAgICAgICAgYWRkTW9kZWwoZGF0YSk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkFERC5QTEFZRVI6CiAgICAgICAgICAgICAgYWRkUGxheWVyKGRhdGEpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5FTEVNRU5ULlNFVC5MSU5FQVJfVkVMT0NJVFk6CiAgICAgICAgICAgICAgc2V0TGluZWFyVmVsb2NpdHkoZGF0YSk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkVMRU1FTlQuU0VULlBPU0lUSU9OOgogICAgICAgICAgICAgIHNldFBvc2l0aW9uKGRhdGEpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5WRUhJQ0xFLlNFVC5QT1NJVElPTjoKICAgICAgICAgICAgICBzZXRWZWhpY2xlUG9zaXRpb24oZGF0YSk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLlZFSElDTEUuU0VULlFVQVRFUk5JT046CiAgICAgICAgICAgICAgc2V0VmVoaWNsZVF1YXRlcm5pb24oZGF0YSk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLlZFSElDTEUuUkVTRVQ6CiAgICAgICAgICAgICAgcmVzZXRWZWhpY2xlKGRhdGEpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5FTEVNRU5ULkFQUExZLklNUFVMU0U6CiAgICAgICAgICAgICAgYXBwbHlJbXB1c2UoZGF0YSk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkVMRU1FTlQuVVBEQVRFOgogICAgICAgICAgICAgIHdvcmxkLnVwZGF0ZUJvZHlTdGF0ZShkYXRhKTsKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuRUxFTUVOVC5ESVNQT1NFOgogICAgICAgICAgICAgIHdvcmxkLmRpc3Bvc2VCb2R5KGRhdGEpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5FRkZFQ1RTLkVYUExPU0lPTjoKICAgICAgICAgICAgICBjcmVhdGVFeHBsb3Npb24oZGF0YSk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLlRFUk1JTkFURToKICAgICAgICAgICAgICB3b3JsZC50ZXJtaW5hdGUoKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICB3b3JsZC5pbml0KG9wdGlvbnMpOwogICAgICAgIGRpc3BhdGNoZXIkMS5zZW5kUmVhZHlFdmVudCgpOwogICAgICAgIHdvcmxkLnNpbXVsYXRlKCk7CiAgICAgIH07CiAgICB9OwoKICAgIHZhciBsb2FkQW1tbyA9IGZ1bmN0aW9uIGxvYWRBbW1vKG9wdGlvbnMpIHsKICAgICAgdmFyIHNjcmlwdFVybCA9IG9wdGlvbnMuaG9zdCArICcvJyArIChvcHRpb25zLnBhdGggfHwgTElCUkFSWV9OQU1FKTsKICAgICAgaW1wb3J0U2NyaXB0cyhzY3JpcHRVcmwpOwogICAgICBBbW1vKCkudGhlbihoYW5kbGVMb2FkRXZlbnQob3B0aW9ucykpOwogICAgfTsKCiAgICBvbm1lc3NhZ2UgPSBmdW5jdGlvbiBvbm1lc3NhZ2UoX3JlZjIpIHsKICAgICAgdmFyIGRhdGEgPSBfcmVmMi5kYXRhOwoKICAgICAgc3dpdGNoIChkYXRhLmV2ZW50KSB7CiAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5MT0FELkFNTU86CiAgICAgICAgICBsb2FkQW1tbyhkYXRhKTsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9OwoKfSgpKTsKCg==', 'data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIndvcmtlcjovL3dlYi13b3JrZXIvcGh5c2ljcy9jb25zdGFudHMuanMiLCJ3b3JrZXI6Ly93ZWItd29ya2VyL3BoeXNpY3MvbWVzc2FnZXMuanMiLCJ3b3JrZXI6Ly93ZWItd29ya2VyL3BoeXNpY3Mvd29ya2VyL2xpYi9kaXNwYXRjaGVyLmpzIiwid29ya2VyOi8vd2ViLXdvcmtlci9waHlzaWNzL3dvcmtlci9saWIvbWF0aC5qcyIsIndvcmtlcjovL3dlYi13b3JrZXIvcGh5c2ljcy93b3JrZXIvZWxlbWVudHMuanMiLCJ3b3JrZXI6Ly93ZWItd29ya2VyL3BoeXNpY3Mvd29ya2VyL3BsYXllci5qcyIsIndvcmtlcjovL3dlYi13b3JrZXIvcGh5c2ljcy93b3JrZXIvd29ybGQuanMiLCJ3b3JrZXI6Ly93ZWItd29ya2VyL3BoeXNpY3Mvd29ya2VyL3ZlaGljbGVzLmpzIiwid29ya2VyOi8vd2ViLXdvcmtlci9waHlzaWNzL3dvcmtlci9lZmZlY3RzLmpzIiwid29ya2VyOi8vd2ViLXdvcmtlci9waHlzaWNzL3dvcmtlci9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgTElCUkFSWV9OQU1FID0gJ2FtbW8uanMnO1xuXG5leHBvcnQgY29uc3QgVFlQRVMgPSB7XG4gICAgQk9YOiAnQk9YJyxcbiAgICBTUEhFUkU6ICdTUEhFUkUnLFxuICAgIFZFSElDTEU6ICdWRUhJQ0xFJyxcbiAgICBNRVNIOiAnTUVTSCcsXG4gICAgUExBWUVSOiAnUExBWUVSJ1xufTtcblxuZXhwb3J0IGNvbnN0IENPTExJREVSX1RZUEVTID0ge1xuICAgIEJPWDogJ0JPWCcsXG4gICAgVkVISUNMRTogJ1ZFSElDTEUnLFxuICAgIFBMQVlFUjogJ1BMQVlFUicsXG4gICAgU1BIRVJFOiAnU1BIRVJFJ1xufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfVkVISUNMRV9TVEFURSA9IHtcbiAgICB2ZWhpY2xlU3RlZXJpbmc6IDAsXG4gICAgYWNjZWxlcmF0aW9uOiBmYWxzZSxcbiAgICBicmVha2luZzogZmFsc2UsXG4gICAgcmlnaHQ6IGZhbHNlLFxuICAgIGxlZnQ6IGZhbHNlXG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9SSUdJREJPRFlfU1RBVEUgPSB7XG4gICAgdmVsb2NpdHk6IHsgeDogMCwgeTogMCwgejogMCB9LFxuICAgIG1vdmVtZW50OiB7XG4gICAgICAgIGZvcndhcmQ6IGZhbHNlLFxuICAgICAgICBiYWNrd2FyZHM6IGZhbHNlLFxuICAgICAgICBsZWZ0OiBmYWxzZSxcbiAgICAgICAgcmlnaHQ6IGZhbHNlXG4gICAgfSxcbiAgICBkaXJlY3Rpb246IHtcbiAgICAgICAgeDogMCxcbiAgICAgICAgeTogMCxcbiAgICAgICAgejogMFxuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1NDQUxFID0geyB4OiAxLCB5OiAxLCB6OiAxIH07XG5leHBvcnQgY29uc3QgREVGQVVMVF9RVUFURVJOSU9OID0geyB4OiAwLCB5OiAwLCB6OiAwLCB3OiAxIH07XG5leHBvcnQgY29uc3QgREVGQVVMVF9QT1NJVElPTiA9IHsgeDogMCwgeTogMCwgejogMCB9O1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTElORUFSX1ZFTE9DSVRZID0geyB4OiAwLCB5OiAwLCB6OiAwIH07XG5leHBvcnQgY29uc3QgREVGQVVMVF9JTVBVTFNFID0geyB4OiAwLCB5OiAwLCB6OiAwIH07XG5cbmV4cG9ydCBjb25zdCBESVNBQkxFX0RFQUNUSVZBVElPTiA9IDQ7XG5leHBvcnQgY29uc3QgR1JBVklUWSA9IHsgeDogMCwgeTogLTEwLCB6OiAwIH07XG5cbmV4cG9ydCBjb25zdCBGUk9OVF9MRUZUID0gMDtcbmV4cG9ydCBjb25zdCBGUk9OVF9SSUdIVCA9IDE7XG5leHBvcnQgY29uc3QgQkFDS19MRUZUID0gMjtcbmV4cG9ydCBjb25zdCBCQUNLX1JJR0hUID0gMztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfU1RFRVJJTkdfSU5DUkVNRU5UID0gLjA0O1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfU1RFRVJJTkdfQ0xBTVAgPSAuNTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX01BWF9FTkdJTkVfRk9SQ0UgPSAyMDAwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTUFYX0JSRUFLSU5HX0ZPUkNFID0gMTAwO1xuXG5leHBvcnQgY29uc3QgRVhQTE9TSU9OX1NJWkVTID0ge1xuICAgIFNNQUxMOiA0LFxuICAgIE1FRElVTTogNixcbiAgICBMQVJHRTogOCxcbiAgICBNQVNTSVZFOiAxMlxufTtcblxuZXhwb3J0IGNvbnN0IEVYUExPU0lPTl9TVFJFTkdUSFMgPSB7XG4gICAgVkVSWV9XRUFLOiAyLFxuICAgIFdFQUs6IDQsXG4gICAgTUVESVVNOiA4LFxuICAgIExBUkdFOiAxNixcbiAgICBNQVNTSVZFOiAzMixcbiAgICBPS19OTzogNjRcbn07IiwiZXhwb3J0IGNvbnN0IFBIWVNJQ1NfRVZFTlRTID0ge1xuICAgIERJU1BBVENIOiAncGh5c2ljczpkaXNwYXRjaCcsXG4gICAgVEVSTUlOQVRFOiAncGh5c2ljczp0ZXJtaW5hdGUnLFxuICAgIExPQUQ6IHtcbiAgICAgICAgQU1NTzogJ3BoeXNpY3M6bG9hZDphbW1vJyxcbiAgICB9LFxuICAgIFJFQURZOiAncGh5c2ljczpyZWFkeScsXG4gICAgSU5JVDogJ3BoeXNpY3M6aW5pdCcsXG4gICAgVVBEQVRFOiAncGh5c2ljczp1cGRhdGUnLFxuICAgIFxuICAgIEFERDoge1xuICAgICAgICBCT1g6ICdwaHlzaWNzOmFkZDpib3gnLFxuICAgICAgICBWRUhJQ0xFOiAncGh5c2ljczphZGQ6dmVoaWNsZScsXG4gICAgICAgIE1PREVMOiAncGh5c2ljczphZGQ6bW9kZWwnLFxuICAgICAgICBQTEFZRVI6ICdwaHlzaWNzOmFkZDpwbGF5ZXInLFxuICAgICAgICBTUEhFUkU6ICdwaHlzaWNzOmFkZDpzcGhlcmUnLFxuICAgIH0sXG5cbiAgICBFTEVNRU5UOiB7XG4gICAgICAgIERJU1BPU0U6ICdwaHlzaWNzOmVsZW1lbnQ6ZGlzcG9zZScsXG4gICAgICAgIENPTExJU0lPTjogJ3BoeXNpY3M6ZWxlbWVudDpjb2xsaXNpb24nLFxuICAgICAgICBVUERBVEU6ICdwaHlzaWNzOmVsZW1lbnQ6dXBkYXRlJyxcbiAgICAgICAgQ1JFQVRFRDogJ3BoeXNpY3M6ZWxlbWVudDpjcmVhdGVkJyxcblxuICAgICAgICBTRVQ6IHtcbiAgICAgICAgICAgIFBPU0lUSU9OOiAncGh5c2ljczplbGVtZW50OnNldDpwb3NpdGlvbicsXG4gICAgICAgICAgICBRVUFURVJOSU9OOiAncGh5c2ljczplbGVtZW50OnNldDpxdWF0ZXJuaW9uJyxcbiAgICAgICAgICAgIExJTkVBUl9WRUxPQ0lUWTogJ3BoeXNpY3M6ZWxlbWVudDpzZXQ6bGluZWFyX3ZlbG9jaXR5J1xuICAgICAgICB9LFxuXG4gICAgICAgIEFQUExZOiB7XG4gICAgICAgICAgICBJTVBVTFNFOiAncGh5c2ljczplbGVtZW50OmFwcGx5OmltcHVsc2UnXG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgVkVISUNMRToge1xuICAgICAgICBTRVQ6IHtcbiAgICAgICAgICAgIFBPU0lUSU9OOiAncGh5c2ljczp2ZWhpY2xlOnNldDpwb3NpdGlvbicsXG4gICAgICAgICAgICBRVUFURVJOSU9OOiAncGh5c2ljczp2ZWhpY2xlOnNldDpxdWF0ZXJuaW9uJ1xuICAgICAgICB9LFxuICAgICAgICBSRVNFVDogJ3BoeXNpY3M6dmVoaWNsZTpyZXNldCcsXG4gICAgICAgIFxuICAgICAgICBTUEVFRDogJ3BoeXNpY3M6dmVoaWNsZTpzcGVlZCcsXG4gICAgICAgIERJUkVDVElPTjogJ3BoeXNpY3M6dmVoaWNsZTpkaXJlY3Rpb24nXG4gICAgfSxcblxuICAgIEVGRkVDVFM6IHtcbiAgICAgICAgRVhQTE9TSU9OOiAncGh5c2ljczplZmZlY3RzOmV4cGxvc2lvbidcbiAgICB9XG59OyIsImltcG9ydCB7IFBIWVNJQ1NfRVZFTlRTIH0gZnJvbSAnLi4vLi4vbWVzc2FnZXMnO1xuXG5leHBvcnQgY2xhc3MgRGlzcGF0Y2hlciB7XG5cbiAgICBzZW5kUGh5c2ljc1VwZGF0ZSA9IGR0ID0+IHBvc3RNZXNzYWdlKHsgZXZlbnQ6IFBIWVNJQ1NfRVZFTlRTLlVQREFURSwgZHQgfSlcbiAgICBzZW5kUmVhZHlFdmVudCA9ICgpID0+IHBvc3RNZXNzYWdlKHsgZXZlbnQ6IFBIWVNJQ1NfRVZFTlRTLlJFQURZIH0pO1xuICAgIHNlbmRUZXJtaW5hdGVFdmVudCA9ICgpID0+IHBvc3RNZXNzYWdlKHsgZXZlbnQ6IFBIWVNJQ1NfRVZFTlRTLlRFUk1JTkFURSB9KTtcblxuICAgIHNlbmRCb2R5VXBkYXRlID0gKHV1aWQsIHBvc2l0aW9uLCByb3RhdGlvbiwgZHQpID0+IHBvc3RNZXNzYWdlKHtcbiAgICAgICAgZXZlbnQ6IFBIWVNJQ1NfRVZFTlRTLkVMRU1FTlQuVVBEQVRFLFxuICAgICAgICB1dWlkLFxuICAgICAgICBwb3NpdGlvbjogeyB4OiBwb3NpdGlvbi54KCksIHk6IHBvc2l0aW9uLnkoKSwgejogcG9zaXRpb24ueigpIH0sXG4gICAgICAgIHF1YXRlcm5pb246IHsgeDogcm90YXRpb24ueCgpLCB5OiByb3RhdGlvbi55KCksIHo6IHJvdGF0aW9uLnooKSwgdzogcm90YXRpb24udygpIH0sXG4gICAgICAgIGR0XG4gICAgfSk7XG5cbiAgICBzZW5kRGlzcGF0Y2hFdmVudCA9ICh1dWlkLCBldmVudE5hbWUsIGV2ZW50RGF0YSkgPT4gcG9zdE1lc3NhZ2Uoe1xuICAgICAgICBldmVudDogUEhZU0lDU19FVkVOVFMuRElTUEFUQ0gsXG4gICAgICAgIHV1aWQsXG4gICAgICAgIGV2ZW50TmFtZSxcbiAgICAgICAgZXZlbnREYXRhXG4gICAgfSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBuZXcgRGlzcGF0Y2hlcigpOyIsImV4cG9ydCBjb25zdCBhcHBseU1hdHJpeDRUb1ZlY3RvcjMgPSAoeyB4ID0gMCwgeSA9IDAsIHogPSAwIH0sIG1hdHJpeCA9IFtdKSA9PiB7XG4gICAgY29uc3QgdyA9IDEgLyAoIG1hdHJpeFsgMyBdICogeCArIG1hdHJpeFsgNyBdICogeSArIG1hdHJpeFsgMTEgXSAqIHogKyBtYXRyaXhbIDE1IF0gKTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIHg6ICggbWF0cml4WyAwIF0gKiB4ICsgbWF0cml4WyA0IF0gKiB5ICsgbWF0cml4WyA4IF0gKiB6ICsgbWF0cml4WyAxMiBdICkgKiB3LFxuICAgICAgICB5OiAoIG1hdHJpeFsgMSBdICogeCArIG1hdHJpeFsgNSBdICogeSArIG1hdHJpeFsgOSBdICogeiArIG1hdHJpeFsgMTMgXSApICogdyxcbiAgICAgICAgejogKCBtYXRyaXhbIDIgXSAqIHggKyBtYXRyaXhbIDYgXSAqIHkgKyBtYXRyaXhbIDEwIF0gKiB6ICsgbWF0cml4WyAxNCBdICkgKiB3LFxuICAgIH1cbn07IiwiaW1wb3J0IGRpc3BhdGNoZXIgZnJvbSAnLi9saWIvZGlzcGF0Y2hlcic7XG5pbXBvcnQgd29ybGQgZnJvbSAnLi93b3JsZCc7XG5cbmltcG9ydCB7XG4gICAgYXBwbHlNYXRyaXg0VG9WZWN0b3IzXG59IGZyb20gJy4vbGliL21hdGgnO1xuXG5pbXBvcnQge1xuICAgIERFRkFVTFRfUklHSURCT0RZX1NUQVRFLFxuICAgIFRZUEVTLFxuICAgIERFRkFVTFRfU0NBTEUsXG4gICAgRElTQUJMRV9ERUFDVElWQVRJT04sXG4gICAgREVGQVVMVF9MSU5FQVJfVkVMT0NJVFksXG4gICAgREVGQVVMVF9JTVBVTFNFXG59IGZyb20gJy4uL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVSaWdpZEJvZHkgPSAoc2hhcGUsIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICAgIHV1aWQsXG4gICAgICAgIHBvc2l0aW9uLFxuICAgICAgICBxdWF0ZXJuaW9uLFxuICAgICAgICBtYXNzLFxuICAgICAgICBmcmljdGlvbixcbiAgICAgICAgcmVzdGl0dXRpb24gPSAuOSxcbiAgICAgICAgZGFtcGluZyA9IHsgbGluZWFyOiAwLjIsIGFuZ3VsYXI6IDAuMiB9XG4gICAgfSA9IG9wdGlvbnM7XG5cbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpO1xuXG4gICAgdHJhbnNmb3JtLnNldElkZW50aXR5KCk7XG4gICAgdHJhbnNmb3JtLnNldE9yaWdpbihuZXcgQW1tby5idFZlY3RvcjMocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueikpO1xuICAgIHRyYW5zZm9ybS5zZXRSb3RhdGlvbihuZXcgQW1tby5idFF1YXRlcm5pb24ocXVhdGVybmlvbi54LCBxdWF0ZXJuaW9uLnksIHF1YXRlcm5pb24ueiwgcXVhdGVybmlvbi53KSk7XG4gICAgY29uc3QgbW90aW9uU3RhdGUgPSBuZXcgQW1tby5idERlZmF1bHRNb3Rpb25TdGF0ZSh0cmFuc2Zvcm0pO1xuICAgIGNvbnN0IGxvY2FsSW5lcnRpYSA9IG5ldyBBbW1vLmJ0VmVjdG9yMygwLCAwLCAwKTtcbiAgICBzaGFwZS5jYWxjdWxhdGVMb2NhbEluZXJ0aWEobWFzcywgbG9jYWxJbmVydGlhKTtcblxuICAgIGNvbnN0IHJiSW5mbyA9IG5ldyBBbW1vLmJ0UmlnaWRCb2R5Q29uc3RydWN0aW9uSW5mbyhtYXNzLCBtb3Rpb25TdGF0ZSwgc2hhcGUsIGxvY2FsSW5lcnRpYSk7XG4gICAgY29uc3QgYm9keSA9IG5ldyBBbW1vLmJ0UmlnaWRCb2R5KHJiSW5mbyk7XG5cbiAgICBcblxuICAgIGlmIChtYXNzID4gMCkge1xuICAgICAgICBib2R5LnNldEZyaWN0aW9uKGZyaWN0aW9uKTtcbiAgICAgICAgYm9keS5zZXRSZXN0aXR1dGlvbihyZXN0aXR1dGlvbik7XG4gICAgICAgIGJvZHkuc2V0RGFtcGluZyhkYW1waW5nLmxpbmVhciwgZGFtcGluZy5hbmd1bGFyKTtcbiAgICAgICAgYm9keS5zZXRBY3RpdmF0aW9uU3RhdGUoRElTQUJMRV9ERUFDVElWQVRJT04pO1xuICAgIH1cblxuICAgIC8vIHN0b3JpbmcgdXVpZCBmb3IgZnV0dXJlIHJlZmVyZW5jZVxuICAgIGJvZHkudXVpZCA9IHV1aWQ7XG5cbiAgICB3b3JsZC5hZGRSaWdpZEJvZHkoYm9keSk7XG5cbiAgICByZXR1cm4gYm9keTtcbn1cblxuZXhwb3J0IGNvbnN0IGFkZE1vZGVsID0gKG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICAgIHV1aWQsXG4gICAgICAgIHZlcnRpY2VzLFxuICAgICAgICBtYXRyaWNlcyxcbiAgICAgICAgaW5kZXhlcyxcbiAgICAgICAgcG9zaXRpb24sXG4gICAgICAgIHF1YXRlcm5pb24sXG4gICAgICAgIG1hc3MgPSAwLFxuICAgICAgICBmcmljdGlvbiA9IDJcbiAgICB9ID0gb3B0aW9ucztcblxuICAgIGNvbnN0IHNjYWxlID0gREVGQVVMVF9TQ0FMRTtcblxuICAgIGNvbnN0IGJ0YSA9IG5ldyBBbW1vLmJ0VmVjdG9yMygpO1xuICAgIGNvbnN0IGJ0YiA9IG5ldyBBbW1vLmJ0VmVjdG9yMygpO1xuICAgIGNvbnN0IGJ0YyA9IG5ldyBBbW1vLmJ0VmVjdG9yMygpO1xuICAgIGNvbnN0IHRyaU1lc2ggPSBuZXcgQW1tby5idFRyaWFuZ2xlTWVzaCh0cnVlLCBmYWxzZSk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZlcnRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB2ZXJ0aWNlc1tpXTtcbiAgICAgICAgY29uc3QgaW5kZXggPSBpbmRleGVzW2ldID8gaW5kZXhlc1tpXSA6IG51bGw7XG4gICAgICAgIGNvbnN0IG1hdHJpeCA9IEFycmF5LmZyb20obWF0cmljZXNbaV0pO1xuXG4gICAgICAgIGlmIChpbmRleCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBpbmRleC5sZW5ndGg7IGogKz0gMykge1xuICAgICAgICAgICAgY29uc3QgYWkgPSBpbmRleFtqXSAqIDM7XG4gICAgICAgICAgICBjb25zdCBiaSA9IGluZGV4W2ogKyAxXSAqIDM7XG4gICAgICAgICAgICBjb25zdCBjaSA9IGluZGV4W2ogKyAyXSAqIDM7XG5cbiAgICAgICAgICAgIGNvbnN0IHZhID0gYXBwbHlNYXRyaXg0VG9WZWN0b3IzKHsgeDogY29tcG9uZW50c1thaV0sIHk6IGNvbXBvbmVudHNbYWkgKyAxXSwgejogY29tcG9uZW50c1thaSArIDJdIH0sIG1hdHJpeCk7XG4gICAgICAgICAgICBjb25zdCB2YiA9IGFwcGx5TWF0cml4NFRvVmVjdG9yMyh7IHg6IGNvbXBvbmVudHNbYmldLCB5OiBjb21wb25lbnRzW2JpICsgMV0sIHo6IGNvbXBvbmVudHNbYmkgKyAyXSB9LCBtYXRyaXgpO1xuICAgICAgICAgICAgY29uc3QgdmMgPSBhcHBseU1hdHJpeDRUb1ZlY3RvcjMoeyB4OiBjb21wb25lbnRzW2NpXSwgeTogY29tcG9uZW50c1tjaSArIDFdLCB6OiBjb21wb25lbnRzW2NpICsgMl0gfSwgbWF0cml4KTtcblxuICAgICAgICAgICAgYnRhLnNldFZhbHVlKHZhLngsIHZhLnksIHZhLnopO1xuICAgICAgICAgICAgYnRiLnNldFZhbHVlKHZiLngsIHZiLnksIHZiLnopO1xuICAgICAgICAgICAgYnRjLnNldFZhbHVlKHZjLngsIHZjLnksIHZjLnopO1xuICAgICAgICAgICAgdHJpTWVzaC5hZGRUcmlhbmdsZShidGEsIGJ0YiwgYnRjLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbXBvbmVudHMubGVuZ3RoOyBqICs9IDkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YSA9IGFwcGx5TWF0cml4NFRvVmVjdG9yMyh7IHg6IGNvbXBvbmVudHNbaiArIDBdLCB5OiBjb21wb25lbnRzW2ogKyAxXSwgejogY29tcG9uZW50c1tqICsgMl0gfSwgbWF0cml4KTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YiA9IGFwcGx5TWF0cml4NFRvVmVjdG9yMyh7IHg6IGNvbXBvbmVudHNbaiArIDNdLCB5OiBjb21wb25lbnRzW2ogKyA0XSwgejogY29tcG9uZW50c1tqICsgNV0gfSwgbWF0cml4KTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YyA9IGFwcGx5TWF0cml4NFRvVmVjdG9yMyh7IHg6IGNvbXBvbmVudHNbaiArIDZdLCB5OiBjb21wb25lbnRzW2ogKyA3XSwgejogY29tcG9uZW50c1tqICsgOF0gfSwgbWF0cml4KTtcblxuICAgICAgICAgICAgICAgIGJ0YS5zZXRWYWx1ZSh2YS54LCB2YS55LCB2YS56KTtcbiAgICAgICAgICAgICAgICBidGIuc2V0VmFsdWUodmIueCwgdmIueSwgdmIueik7XG4gICAgICAgICAgICAgICAgYnRjLnNldFZhbHVlKHZjLngsIHZjLnksIHZjLnopO1xuICAgICAgICAgICAgICAgIHRyaU1lc2guYWRkVHJpYW5nbGUoYnRhLCBidGIsIGJ0YywgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbG9jYWxTY2FsZSA9IG5ldyBBbW1vLmJ0VmVjdG9yMyhzY2FsZS54LCBzY2FsZS55LCBzY2FsZS56KTtcbiAgICB0cmlNZXNoLnNldFNjYWxpbmcobG9jYWxTY2FsZSk7XG4gICAgQW1tby5kZXN0cm95KGxvY2FsU2NhbGUpO1xuXG4gICAgY29uc3QgY29sbGlzaW9uU2hhcGUgPSBuZXcgQW1tby5idEJ2aFRyaWFuZ2xlTWVzaFNoYXBlKHRyaU1lc2gsIHRydWUsIHRydWUpO1xuICAgIGNvbGxpc2lvblNoYXBlLnJlc291cmNlcyA9IFt0cmlNZXNoXTtcblxuICAgIEFtbW8uZGVzdHJveShidGEpO1xuICAgIEFtbW8uZGVzdHJveShidGIpO1xuICAgIEFtbW8uZGVzdHJveShidGMpO1xuXG4gICAgY29uc3QgYm9keSA9IGNyZWF0ZVJpZ2lkQm9keShjb2xsaXNpb25TaGFwZSwgeyB1dWlkLCBwb3NpdGlvbiwgcXVhdGVybmlvbiwgbWFzcywgZnJpY3Rpb24gfSk7XG4gICAgd29ybGQuc2V0Qm9keSh7IHV1aWQsIGJvZHksIHR5cGU6IFRZUEVTLk1FU0gsIHN0YXRlOiBERUZBVUxUX1JJR0lEQk9EWV9TVEFURSB9KTtcbn1cblxuZXhwb3J0IGNvbnN0IGFkZEJveCA9IChkYXRhKSA9PiB7XG4gICAgY29uc3QgeyB1dWlkLCB3aWR0aCwgbGVuZ3RoLCBoZWlnaHQsIHBvc2l0aW9uLCBxdWF0ZXJuaW9uLCBtYXNzID0gMCwgZnJpY3Rpb24gPSAyIH0gPSBkYXRhO1xuXG4gICAgY29uc3QgZ2VvbWV0cnkgPSBuZXcgQW1tby5idEJveFNoYXBlKG5ldyBBbW1vLmJ0VmVjdG9yMyh3aWR0aCAqIDAuNSwgaGVpZ2h0ICogMC41LCBsZW5ndGggKiAwLjUpKTtcbiAgICBjb25zdCBib2R5ID0gY3JlYXRlUmlnaWRCb2R5KGdlb21ldHJ5LCB7IHV1aWQsIHBvc2l0aW9uLCBxdWF0ZXJuaW9uLCBtYXNzLCBmcmljdGlvbiB9KTtcblxuICAgIHdvcmxkLnNldEJvZHkoeyB1dWlkLCBib2R5LCB0eXBlOiBUWVBFUy5CT1gsIHN0YXRlOiBERUZBVUxUX1JJR0lEQk9EWV9TVEFURSB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRTcGhlcmUgPSBkYXRhID0+IHtcbiAgICBjb25zdCB7IHV1aWQsIHJhZGl1cywgcG9zaXRpb24sIHF1YXRlcm5pb24sIG1hc3MgPSAwLCBmcmljdGlvbiA9IDIgfSA9IGRhdGE7XG5cbiAgICBjb25zdCBnZW9tZXRyeSA9IG5ldyBBbW1vLmJ0U3BoZXJlU2hhcGUocmFkaXVzKTtcbiAgICBjb25zdCBib2R5ID0gY3JlYXRlUmlnaWRCb2R5KGdlb21ldHJ5LCB7IHV1aWQsIHBvc2l0aW9uLCBxdWF0ZXJuaW9uLCBtYXNzLCBmcmljdGlvbiB9KTtcblxuICAgIHdvcmxkLnNldEJvZHkoeyB1dWlkLCBib2R5LCB0eXBlOiBUWVBFUy5TUEhFUkUsIHN0YXRlOiBERUZBVUxUX1JJR0lEQk9EWV9TVEFURSB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRMaW5lYXJWZWxvY2l0eSA9IChkYXRhKSA9PiB7XG4gICAgY29uc3QgeyB1dWlkLCB2ZWxvY2l0eSA9IERFRkFVTFRfTElORUFSX1ZFTE9DSVRZIH0gPSBkYXRhO1xuICAgIGNvbnN0IHsgYm9keSB9ID0gd29ybGQuZ2V0RWxlbWVudCh1dWlkKTtcbiAgICBjb25zdCBtb3Rpb25TdGF0ZSA9IGJvZHkuZ2V0TW90aW9uU3RhdGUoKTtcblxuICAgIGlmIChtb3Rpb25TdGF0ZSkge1xuICAgICAgICBjb25zdCBsaW5lYXJWZWxvY2l0eSA9IG5ldyBBbW1vLmJ0VmVjdG9yMyh2ZWxvY2l0eS54LCB2ZWxvY2l0eS55LCB2ZWxvY2l0eS56KTtcbiAgICAgICAgYm9keS5zZXRMaW5lYXJWZWxvY2l0eShsaW5lYXJWZWxvY2l0eSk7XG4gICAgICAgIEFtbW8uZGVzdHJveShsaW5lYXJWZWxvY2l0eSk7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHNldFBvc2l0aW9uID0gZGF0YSA9PiB7XG4gICAgY29uc3QgeyB1dWlkLCBwb3NpdGlvbiB9ID0gZGF0YTtcbiAgICBjb25zdCB7IGJvZHkgfSA9IHdvcmxkLmdldEVsZW1lbnQodXVpZCk7XG5cbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpO1xuXG4gICAgYm9keS5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pO1xuICAgIHRyYW5zZm9ybS5zZXRPcmlnaW4obmV3IEFtbW8uYnRWZWN0b3IzKHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHBvc2l0aW9uLnogKSk7XG5cbiAgICBib2R5LnNldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7XG59XG5cbmV4cG9ydCBjb25zdCBhcHBseUltcHVzZSA9ICh7IHV1aWQsIGltcHVsc2UgPSBERUZBVUxUX0lNUFVMU0UgfSkgPT4ge1xuICAgIGNvbnN0IHsgYm9keSB9ID0gd29ybGQuZ2V0RWxlbWVudCh1dWlkKTtcbiAgICBjb25zdCBtb3Rpb25TdGF0ZSA9IGJvZHkuZ2V0TW90aW9uU3RhdGUoKTtcblxuICAgIGlmIChtb3Rpb25TdGF0ZSkge1xuICAgICAgICBjb25zdCBpbXB1bHNlVmVjdG9yID0gbmV3IEFtbW8uYnRWZWN0b3IzKGltcHVsc2UueCwgaW1wdWxzZS55LCBpbXB1bHNlLnopO1xuICAgICAgICBib2R5LmFwcGx5Q2VudHJhbEltcHVsc2UoaW1wdWxzZVZlY3Rvcik7XG4gICAgICAgIEFtbW8uZGVzdHJveShpbXB1bHNlVmVjdG9yKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVFbGVtZW50VXBkYXRlID0gKHsgYm9keSwgdXVpZCwgc3RhdGUgPSBERUZBVUxUX1JJR0lEQk9EWV9TVEFURSB9LCBkdCkgPT4ge1xuICAgIGNvbnN0IG1vdGlvblN0YXRlID0gYm9keS5nZXRNb3Rpb25TdGF0ZSgpO1xuXG4gICAgaWYgKG1vdGlvblN0YXRlKSB7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7XG5cbiAgICAgICAgbW90aW9uU3RhdGUuZ2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTtcbiAgICAgICAgbGV0IG9yaWdpbiA9IHRyYW5zZm9ybS5nZXRPcmlnaW4oKTtcbiAgICAgICAgbGV0IHJvdGF0aW9uID0gdHJhbnNmb3JtLmdldFJvdGF0aW9uKCk7XG5cbiAgICAgICAgZGlzcGF0Y2hlci5zZW5kQm9keVVwZGF0ZSh1dWlkLCBvcmlnaW4sIHJvdGF0aW9uLCBkdCk7XG4gICAgICAgIEFtbW8uZGVzdHJveSh0cmFuc2Zvcm0pO1xuICAgIH1cbn0iLCJpbXBvcnQgeyBjcmVhdGVSaWdpZEJvZHkgfSBmcm9tICcuL2VsZW1lbnRzJztcbmltcG9ydCB3b3JsZCBmcm9tICcuL3dvcmxkJztcblxuaW1wb3J0IHtcbiAgICBUWVBFUyxcbiAgICBERUZBVUxUX1JJR0lEQk9EWV9TVEFURVxufSBmcm9tICcuLi9jb25zdGFudHMnO1xuXG5leHBvcnQgY29uc3QgYWRkUGxheWVyID0gKGRhdGEpID0+IHtcbiAgICBjb25zdCB7IHV1aWQsIHdpZHRoLCBoZWlnaHQsIHBvc2l0aW9uLCBxdWF0ZXJuaW9uLCBtYXNzLCBmcmljdGlvbiB9ID0gZGF0YTtcblxuICAgIGNvbnN0IGNhcHN1bGUgPSBuZXcgQW1tby5idENhcHN1bGVTaGFwZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICBjb25zdCBib2R5ID0gY3JlYXRlUmlnaWRCb2R5KGNhcHN1bGUsIHsgdXVpZCwgcG9zaXRpb24sIHF1YXRlcm5pb24sIG1hc3MsIGZyaWN0aW9uIH0pO1xuXG4gICAgLy8gZGlzYWJsaWluZyByb3RhdGlvbiBmb3IgY29sbGlzaW9uc1xuICAgIGJvZHkuc2V0QW5ndWxhckZhY3RvcigwKTtcblxuICAgIHdvcmxkLmFkZFJpZ2lkQm9keShib2R5KTtcbiAgICB3b3JsZC5zZXRCb2R5KHsgdXVpZCwgYm9keSwgdHlwZTogVFlQRVMuUExBWUVSLCBzdGF0ZTogREVGQVVMVF9SSUdJREJPRFlfU1RBVEUgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgaGFuZGxlUGxheWVyVXBkYXRlID0gKHsgYm9keSwgdXVpZCwgc3RhdGUgPSBERUZBVUxUX1JJR0lEQk9EWV9TVEFURSB9LCBkdCkgPT4ge1xuICAgIGNvbnN0IHsgbW92ZW1lbnQsIGRpcmVjdGlvbiwgY2FtZXJhRGlyZWN0aW9uLCBxdWF0ZXJuaW9uLCBwb3NpdGlvbiB9ID0gc3RhdGU7XG5cbiAgICBjb25zdCBNQVhfU1BFRUQgPSAxO1xuICAgIGNvbnN0IHdhbGtWZWxvY2l0eSA9IC4xO1xuXG4gICAgY29uc3QgbW90aW9uU3RhdGUgPSBib2R5LmdldE1vdGlvblN0YXRlKCk7XG5cbiAgICBpZiAobW90aW9uU3RhdGUpIHtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTtcbiAgICAgICAgbW90aW9uU3RhdGUuZ2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTtcblxuICAgICAgICBjb25zdCBsaW5lYXJWZWxvY2l0eSA9IGJvZHkuZ2V0TGluZWFyVmVsb2NpdHkoKTtcbiAgICAgICAgY29uc3Qgc3BlZWQgPSBsaW5lYXJWZWxvY2l0eS5sZW5ndGgoKTtcblxuICAgICAgICBjb25zdCBmb3J3YXJkRGlyID0gdHJhbnNmb3JtLmdldEJhc2lzKCkuZ2V0Um93KDIpO1xuICAgICAgICBmb3J3YXJkRGlyLm5vcm1hbGl6ZSgpO1xuICAgICAgICBjb25zdCB3YWxrRGlyZWN0aW9uID0gbmV3IEFtbW8uYnRWZWN0b3IzKDAuMCwgMC4wLCAwLjApO1xuXG4gICAgICAgIGNvbnN0IHdhbGtTcGVlZCA9IHdhbGtWZWxvY2l0eSAqIGR0O1xuXG4gICAgICAgIGlmIChtb3ZlbWVudC5mb3J3YXJkKSB7XG4gICAgICAgICAgICB3YWxrRGlyZWN0aW9uLnNldFgoIHdhbGtEaXJlY3Rpb24ueCgpICsgZm9yd2FyZERpci54KCkpO1xuICAgICAgICAgICAgLy93YWxrRGlyZWN0aW9uLnNldFkoIHdhbGtEaXJlY3Rpb24ueSgpICsgZm9yd2FyZERpci55KCkpO1xuICAgICAgICAgICAgd2Fsa0RpcmVjdGlvbi5zZXRaKCB3YWxrRGlyZWN0aW9uLnooKSArIGZvcndhcmREaXIueigpKTtcbiAgICAgICAgfVxuICAgIFxuICAgICAgICBpZiAobW92ZW1lbnQuYmFja3dhcmRzKSB7XG4gICAgICAgICAgICB3YWxrRGlyZWN0aW9uLnNldFgoIHdhbGtEaXJlY3Rpb24ueCgpIC0gZm9yd2FyZERpci54KCkpO1xuICAgICAgICAgICAgLy93YWxrRGlyZWN0aW9uLnNldFkoIHdhbGtEaXJlY3Rpb24ueSgpIC0gZm9yd2FyZERpci55KCkpO1xuICAgICAgICAgICAgd2Fsa0RpcmVjdGlvbi5zZXRaKCB3YWxrRGlyZWN0aW9uLnooKSAtIGZvcndhcmREaXIueigpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbW92ZW1lbnQuZm9yd2FyZCAmJiAhbW92ZW1lbnQuYmFja3dhcmRzKSB7XG4gICAgICAgICAgICBsaW5lYXJWZWxvY2l0eS5zZXRYKGxpbmVhclZlbG9jaXR5LngoKSAqIDAuMik7XG4gICAgICAgICAgICBsaW5lYXJWZWxvY2l0eS5zZXRaKGxpbmVhclZlbG9jaXR5LnooKSAqIDAuMik7XG4gICAgICAgIH0gZWxzZSBpZiAoc3BlZWQgPCBNQVhfU1BFRUQpIHtcbiAgICAgICAgICAgIGxpbmVhclZlbG9jaXR5LnNldFgobGluZWFyVmVsb2NpdHkueCgpICsgY2FtZXJhRGlyZWN0aW9uLnggKiB3YWxrU3BlZWQpO1xuICAgICAgICAgICAgbGluZWFyVmVsb2NpdHkuc2V0WihsaW5lYXJWZWxvY2l0eS56KCkgKyBjYW1lcmFEaXJlY3Rpb24ueiAqIHdhbGtTcGVlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBib2R5LnNldExpbmVhclZlbG9jaXR5KGxpbmVhclZlbG9jaXR5KTtcblxuICAgICAgICBib2R5LmdldE1vdGlvblN0YXRlKCkuc2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTtcbiAgICAgICAgYm9keS5zZXRDZW50ZXJPZk1hc3NUcmFuc2Zvcm0odHJhbnNmb3JtKTtcblxuICAgICAgICBsZXQgb3JpZ2luID0gdHJhbnNmb3JtLmdldE9yaWdpbigpO1xuICAgICAgICBsZXQgcm90YXRpb24gPSB0cmFuc2Zvcm0uZ2V0Um90YXRpb24oKTtcblxuICAgICAgICBkaXNwYXRjaGVyLnNlbmRCb2R5VXBkYXRlKHV1aWQsIG9yaWdpbiwgcm90YXRpb24sIGR0KTtcbiAgICB9XG59OyIsImltcG9ydCB7XG4gICAgR1JBVklUWSxcbiAgICBUWVBFU1xufSBmcm9tICcuLi9jb25zdGFudHMnO1xuXG5pbXBvcnQgeyBoYW5kbGVFbGVtZW50VXBkYXRlIH0gZnJvbSAnLi9lbGVtZW50cyc7XG5pbXBvcnQgeyBoYW5kbGVWZWhpY2xlVXBkYXRlIH0gZnJvbSAnLi92ZWhpY2xlcyc7XG5pbXBvcnQgeyBoYW5kbGVQbGF5ZXJVcGRhdGUgfSBmcm9tICcuL3BsYXllcic7XG5cbmltcG9ydCBkaXNwYXRjaGVyIGZyb20gJy4vbGliL2Rpc3BhdGNoZXInO1xuaW1wb3J0IHsgUEhZU0lDU19FVkVOVFMgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5cbmNsYXNzIENsb2NrIHtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnRpbWVzdGFtcCA9IG51bGw7XG4gICAgfVxuXG4gICAgZ2V0RGVsdGEoKSB7XG4gICAgICAgIGNvbnN0IHRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICBpZiAodGhpcy50aW1lc3RhbXApIHtcbiAgICAgICAgICAgIGNvbnN0IGRlbHRhID0gdGltZSAtIHRoaXMudGltZXN0YW1wO1xuICAgICAgICAgICAgdGhpcy50aW1lc3RhbXAgPSB0aW1lO1xuXG4gICAgICAgICAgICByZXR1cm4gZGVsdGE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRpbWVzdGFtcCA9IHRpbWU7XG5cbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIFdvcmxkIHtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmVsZW1lbnRzID0ge307XG4gICAgICAgIHRoaXMuaW5pdGlhbGlzZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmNvbGxpc2lvbkNvbmZpZ3VyYXRpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5icm9hZHBoYXNlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnNvbHZlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5keW5hbWljc1dvcmxkID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHRoaXMucmVxdWVzdEFuaW1hdGlvbkZyYW1lSWQgPSBudWxsO1xuICAgICAgICB0aGlzLmNsb2NrID0gbmV3IENsb2NrKCk7XG4gICAgfVxuXG4gICAgaW5pdCA9IChvcHRpb25zKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgZ3Jhdml0eSA9IEdSQVZJVFkgfSA9IG9wdGlvbnM7XG5cbiAgICAgICAgdGhpcy5jb2xsaXNpb25Db25maWd1cmF0aW9uID0gbmV3IEFtbW8uYnREZWZhdWx0Q29sbGlzaW9uQ29uZmlndXJhdGlvbigpO1xuICAgICAgICB0aGlzLmRpc3BhdGNoZXIgPSBuZXcgQW1tby5idENvbGxpc2lvbkRpc3BhdGNoZXIodGhpcy5jb2xsaXNpb25Db25maWd1cmF0aW9uKTtcbiAgICAgICAgdGhpcy5icm9hZHBoYXNlID0gbmV3IEFtbW8uYnREYnZ0QnJvYWRwaGFzZSgpO1xuICAgICAgICB0aGlzLnNvbHZlciA9IG5ldyBBbW1vLmJ0U2VxdWVudGlhbEltcHVsc2VDb25zdHJhaW50U29sdmVyKCk7XG4gICAgICAgIHRoaXMuZHluYW1pY3NXb3JsZCA9IG5ldyBBbW1vLmJ0RGlzY3JldGVEeW5hbWljc1dvcmxkKHRoaXMuZGlzcGF0Y2hlciwgdGhpcy5icm9hZHBoYXNlLCB0aGlzLnNvbHZlciwgdGhpcy5jb2xsaXNpb25Db25maWd1cmF0aW9uKTtcbiAgICAgICAgdGhpcy5keW5hbWljc1dvcmxkLnNldEdyYXZpdHkobmV3IEFtbW8uYnRWZWN0b3IzKGdyYXZpdHkueCwgZ3Jhdml0eS55LCBncmF2aXR5LnopKTtcblxuICAgICAgICAvLyB0aGlzIGlzIG5lZWRlZCBmb3IgZ2hvc3RPYmplY3QgY29sbGlzaW9uc1xuICAgICAgICB0aGlzLmR5bmFtaWNzV29ybGRcbiAgICAgICAgICAgIC5nZXRCcm9hZHBoYXNlKClcbiAgICAgICAgICAgIC5nZXRPdmVybGFwcGluZ1BhaXJDYWNoZSgpXG4gICAgICAgICAgICAuc2V0SW50ZXJuYWxHaG9zdFBhaXJDYWxsYmFjayhuZXcgQW1tby5idEdob3N0UGFpckNhbGxiYWNrKCkpXG5cbiAgICAgICAgdGhpcy5pbml0aWFsaXNlZCA9IHRydWU7XG4gICAgfTtcblxuICAgIHJlbW92ZUVsZW1lbnQgPSB1dWlkID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaGFzRWxlbWVudCh1dWlkKSkge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50c1t1dWlkXS5kZWxldGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbW92ZURlbGV0ZWRFbGVtZW50cyA9ICgpID0+IChcbiAgICAgICAgT2JqZWN0XG4gICAgICAgICAgICAua2V5cyh0aGlzLmVsZW1lbnRzKVxuICAgICAgICAgICAgLmZpbHRlcih1dWlkID0+IHRoaXMuZWxlbWVudHNbdXVpZF0uZGVsZXRlZClcbiAgICAgICAgICAgIC5mb3JFYWNoKHV1aWQgPT4ge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmVsZW1lbnRzW3V1aWRdO1xuICAgICAgICAgICAgfSlcbiAgICApO1xuXG4gICAgaGFzRWxlbWVudCA9IHV1aWQgPT4ge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5lbGVtZW50cykuaW5jbHVkZXModXVpZCk7XG4gICAgfVxuXG4gICAgZ2V0RWxlbWVudCA9IHV1aWQgPT4gdGhpcy5lbGVtZW50c1t1dWlkXTtcblxuICAgIGlzSW5pdGlhbGlzZWQgPSAoKSA9PiB0aGlzLmluaXRpYWxpc2VkO1xuXG4gICAgZ2V0RHluYW1pY3NXb3JsZCA9ICgpID0+IHRoaXMuZHluYW1pY3NXb3JsZDtcblxuICAgIGFkZFJpZ2lkQm9keSA9IGJvZHkgPT4ge1xuICAgICAgICB0aGlzLmR5bmFtaWNzV29ybGQuYWRkUmlnaWRCb2R5KGJvZHkpO1xuICAgIH1cblxuICAgIGFkZEFjdGlvbiA9IGFjdGlvbiA9PiB7XG4gICAgICAgIHRoaXMuZHluYW1pY3NXb3JsZC5hZGRBY3Rpb24oYWN0aW9uKTtcbiAgICB9XG5cbiAgICBhZGRDb2xsaXNpb25PYmplY3QgPSBjb2xsaXNpb25PYmplY3QgPT4ge1xuICAgICAgICB0aGlzLmR5bmFtaWNzV29ybGQuYWRkQ29sbGlzaW9uT2JqZWN0KGNvbGxpc2lvbk9iamVjdCk7XG4gICAgfVxuXG4gICAgc3RlcFNpbXVsYXRpb24gPSBkdCA9PiB7XG4gICAgICAgIHRoaXMuZHluYW1pY3NXb3JsZC5zdGVwU2ltdWxhdGlvbihkdCk7XG4gICAgfVxuXG4gICAgc2ltdWxhdGUgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGR0ID0gdGhpcy5jbG9jay5nZXREZWx0YSgpO1xuICAgICAgICB0aGlzLnN0ZXBTaW11bGF0aW9uKGR0KTtcblxuICAgICAgICBPYmplY3RcbiAgICAgICAgICAgIC5rZXlzKHRoaXMuZWxlbWVudHMpXG4gICAgICAgICAgICAuZm9yRWFjaCh1dWlkID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5nZXRFbGVtZW50KHV1aWQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoKGVsZW1lbnQudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUWVBFUy5CT1g6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRZUEVTLlNQSEVSRTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVFlQRVMuTUVTSDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVFbGVtZW50VXBkYXRlKGVsZW1lbnQsIGR0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVFlQRVMuUExBWUVSOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVBsYXllclVwZGF0ZShlbGVtZW50LCBkdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRZUEVTLlZFSElDTEU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlVmVoaWNsZVVwZGF0ZShlbGVtZW50LCBkdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5jYWxjdWxhdGVDb2xsaXNpb25zKCk7XG4gICAgICAgIHRoaXMucmVtb3ZlRGVsZXRlZEVsZW1lbnRzKCk7XG5cbiAgICAgICAgZGlzcGF0Y2hlci5zZW5kUGh5c2ljc1VwZGF0ZShkdCk7XG5cbiAgICAgICAgdGhpcy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLnNpbXVsYXRlLmJpbmQodGhpcykpO1xuICAgIH1cblxuICAgIGNhbGN1bGF0ZUNvbGxpc2lvbnMgPSAoKSA9PiB7XG4gICAgICAgIGxldCBhbW1vRGlzcGF0Y2hlciA9IHRoaXMuZHluYW1pY3NXb3JsZC5nZXREaXNwYXRjaGVyKCk7XG4gICAgICAgIGxldCBudW1NYW5pZm9sZHMgPSBhbW1vRGlzcGF0Y2hlci5nZXROdW1NYW5pZm9sZHMoKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bU1hbmlmb2xkczsgaSsrKSB7XG5cbiAgICAgICAgICAgIGxldCBjb250YWN0TWFuaWZvbGQgPSBhbW1vRGlzcGF0Y2hlci5nZXRNYW5pZm9sZEJ5SW5kZXhJbnRlcm5hbChpKTtcblxuICAgICAgICAgICAgbGV0IHJiMCA9IEFtbW8uY2FzdE9iamVjdChjb250YWN0TWFuaWZvbGQuZ2V0Qm9keTAoKSwgQW1tby5idFJpZ2lkQm9keSk7XG4gICAgICAgICAgICBsZXQgcmIxID0gQW1tby5jYXN0T2JqZWN0KGNvbnRhY3RNYW5pZm9sZC5nZXRCb2R5MSgpLCBBbW1vLmJ0UmlnaWRCb2R5KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgbGV0IG51bUNvbnRhY3RzID0gY29udGFjdE1hbmlmb2xkLmdldE51bUNvbnRhY3RzKCk7XG5cbiAgICAgICAgICAgIC8vIHRoaXMgaXRlcmF0aW9uIGRvZXNuJ3QgaGF2ZSB1dWlkc1xuICAgICAgICAgICAgaWYgKCFyYjAudXVpZCB8fCAhcmIxLnV1aWQpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBsZXQgY29udGFjdHMgPSBbXTtcblxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBudW1Db250YWN0czsgaisrKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgY29udGFjdFBvaW50ID0gY29udGFjdE1hbmlmb2xkLmdldENvbnRhY3RQb2ludChqKTtcbiAgICAgICAgICAgICAgICBsZXQgZGlzdGFuY2UgPSBjb250YWN0UG9pbnQuZ2V0RGlzdGFuY2UoKTtcblxuICAgICAgICAgICAgICAgIGlmKCBkaXN0YW5jZSA+IDAuMCkgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICBsZXQgdmVsb2NpdHkwID0gcmIwLmdldExpbmVhclZlbG9jaXR5KCk7XG4gICAgICAgICAgICAgICAgbGV0IHZlbG9jaXR5MSA9IHJiMS5nZXRMaW5lYXJWZWxvY2l0eSgpO1xuICAgICAgICAgICAgICAgIGxldCB3b3JsZFBvczAgPSBjb250YWN0UG9pbnQuZ2V0X21fcG9zaXRpb25Xb3JsZE9uQSgpO1xuICAgICAgICAgICAgICAgIGxldCB3b3JsZFBvczEgPSBjb250YWN0UG9pbnQuZ2V0X21fcG9zaXRpb25Xb3JsZE9uQigpO1xuICAgICAgICAgICAgICAgIGxldCBsb2NhbFBvczAgPSBjb250YWN0UG9pbnQuZ2V0X21fbG9jYWxQb2ludEEoKTtcbiAgICAgICAgICAgICAgICBsZXQgbG9jYWxQb3MxID0gY29udGFjdFBvaW50LmdldF9tX2xvY2FsUG9pbnRCKCk7XG5cbiAgICAgICAgICAgICAgICBjb250YWN0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2UsXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzOltcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dWlkOiByYjAudXVpZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWxvY2l0eTogeyB4OiB2ZWxvY2l0eTAueCgpLCB5OiB2ZWxvY2l0eTAueSgpLCB6OiB2ZWxvY2l0eTAueigpIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ybGRQb3M6IHsgeDogd29ybGRQb3MwLngoKSwgeTogd29ybGRQb3MwLnkoKSwgejogd29ybGRQb3MwLnooKSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsUG9zOiB7IHg6IGxvY2FsUG9zMC54KCksIHk6IGxvY2FsUG9zMC55KCksIHo6IGxvY2FsUG9zMC56KCkgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dWlkOiByYjEudXVpZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWxvY2l0eTogeyB4OiB2ZWxvY2l0eTEueCgpLCB5OiB2ZWxvY2l0eTEueSgpLCB6OiB2ZWxvY2l0eTEueigpIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ybGRQb3M6IHsgeDogd29ybGRQb3MxLngoKSwgeTogd29ybGRQb3MxLnkoKSwgejogd29ybGRQb3MxLnooKSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsUG9zOiB7IHg6IGxvY2FsUG9zMS54KCksIHk6IGxvY2FsUG9zMS55KCksIHo6IGxvY2FsUG9zMS56KCkgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRpc3BhdGNoZXIuc2VuZERpc3BhdGNoRXZlbnQocmIwLnV1aWQsIFBIWVNJQ1NfRVZFTlRTLkVMRU1FTlQuQ09MTElTSU9OLCB7IGNvbnRhY3RzIH0pO1xuICAgICAgICAgICAgZGlzcGF0Y2hlci5zZW5kRGlzcGF0Y2hFdmVudChyYjEudXVpZCwgUEhZU0lDU19FVkVOVFMuRUxFTUVOVC5DT0xMSVNJT04sIHsgY29udGFjdHMgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZGRFbGVtZW50ID0gZGF0YSA9PiB7XG4gICAgICAgIHRoaXMuZWxlbWVudHNbZGF0YS51dWlkXSA9IGRhdGE7XG4gICAgfVxuXG4gICAgdXBkYXRlQm9keVN0YXRlID0gKHsgdXVpZCwgc3RhdGUgfSkgPT4ge1xuICAgICAgICB0aGlzLmVsZW1lbnRzW3V1aWRdLnN0YXRlID0ge1xuICAgICAgICAgICAgLi4udGhpcy5lbGVtZW50c1t1dWlkXS5zdGF0ZSxcbiAgICAgICAgICAgIC4uLnN0YXRlXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZGlzcG9zZUJvZHkoeyB1dWlkIH0pIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZ2V0RWxlbWVudCh1dWlkKTtcbiAgICAgICAgdGhpcy5keW5hbWljc1dvcmxkLnJlbW92ZVJpZ2lkQm9keShlbGVtZW50LmJvZHkpO1xuICAgICAgICB0aGlzLnJlbW92ZUVsZW1lbnQodXVpZCk7XG5cbiAgICAgICAgZGlzcGF0Y2hlci5zZW5kRWxlbWVudERpc3Bvc2VkKHsgdXVpZCB9KTtcbiAgICB9XG5cbiAgICB0ZXJtaW5hdGUgPSAoKSA9PiB7XG4gICAgICAgIEFtbW8uZGVzdHJveSh0aGlzLmR5bmFtaWNzV29ybGQpO1xuICAgICAgICBBbW1vLmRlc3Ryb3kodGhpcy5zb2x2ZXIpO1xuICAgICAgICBBbW1vLmRlc3Ryb3kodGhpcy5kaXNwYXRjaGVyKTtcbiAgICAgICAgQW1tby5kZXN0cm95KHRoaXMuY29sbGlzaW9uQ29uZmlndXJhdGlvbik7XG5cbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZCk7XG5cbiAgICAgICAgZGlzcGF0Y2hlci5zZW5kVGVybWluYXRlRXZlbnQoKTtcbiAgICB9XG59O1xuXG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBXb3JsZCgpOyIsImltcG9ydCB7XG4gICAgRElTQUJMRV9ERUFDVElWQVRJT04sXG4gICAgVFlQRVMsXG4gICAgREVGQVVMVF9WRUhJQ0xFX1NUQVRFLFxuICAgIEJBQ0tfTEVGVCxcbiAgICBCQUNLX1JJR0hULFxuICAgIEZST05UX0xFRlQsXG4gICAgRlJPTlRfUklHSFQsXG4gICAgREVGQVVMVF9NQVhfRU5HSU5FX0ZPUkNFLFxuICAgIERFRkFVTFRfTUFYX0JSRUFLSU5HX0ZPUkNFLFxuICAgIERFRkFVTFRfU1RFRVJJTkdfQ0xBTVAsXG4gICAgREVGQVVMVF9TVEVFUklOR19JTkNSRU1FTlRcbn0gZnJvbSAnLi4vY29uc3RhbnRzJztcblxuaW1wb3J0IHtcbiAgICBQSFlTSUNTX0VWRU5UU1xufSBmcm9tICcuLi9tZXNzYWdlcyc7XG5cbmltcG9ydCB3b3JsZCBmcm9tICcuL3dvcmxkJztcbmltcG9ydCBkaXNwYXRjaGVyIGZyb20gJy4vbGliL2Rpc3BhdGNoZXInO1xuXG5jb25zdCBERUZBVUxUX1JPTExfSU5GTFVFTkNFID0gMC4yO1xuY29uc3QgREVGQVVMVF9GUklDVElPTiA9IDEwMDA7XG5jb25zdCBERUZBVUxUX01BU1MgPSA4MDA7XG5cbmV4cG9ydCBjb25zdCBhZGRWZWhpY2xlID0gZGF0YSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgICBwb3NpdGlvbixcbiAgICAgICAgcXVhdGVybmlvbixcbiAgICAgICAgdXVpZCxcbiAgICAgICAgd2hlZWxzLFxuICAgICAgICBtYXNzID0gREVGQVVMVF9NQVNTLFxuICAgICAgICB3aWR0aCA9IDEuOCxcbiAgICAgICAgaGVpZ2h0ID0gLjYsXG4gICAgICAgIGxlbmd0aCA9IDQsXG4gICAgICAgIGZyaWN0aW9uID0gREVGQVVMVF9GUklDVElPTixcbiAgICAgICAgcm9sbEluZmx1ZW5jZSA9IERFRkFVTFRfUk9MTF9JTkZMVUVOQ0UsXG4gICAgICAgIHdoZWVsc09wdGlvbnMgPSB7fSxcbiAgICAgICAgc3VzcGVuc2lvbnMgPSB7fVxuICAgIH0gPSBkYXRhO1xuXG4gICAgY29uc3QgeyBiYWNrID0ge30sIGZyb250ID0ge30gfSA9IHdoZWVsc09wdGlvbnM7XG4gICAgY29uc3Qge1xuICAgICAgICBheGlzUG9zaXRpb246IGF4aXNQb3NpdGlvbkJhY2sgPSAtMSxcbiAgICAgICAgcmFkaXVzOiB3aGVlbFJhZGl1c0JhY2sgPSAuNCxcbiAgICAgICAgaGFsZlRyYWNrOiB3aGVlbEhhbGZUcmFja0JhY2sgPSAxLFxuICAgICAgICBheGlzSGVpZ2h0OiB3aGVlbEF4aXNIZWlnaHRCYWNrID0gLjNcbiAgICB9ID0gYmFjaztcblxuICAgIGNvbnN0IHtcbiAgICAgICAgYXhpc1Bvc2l0aW9uOiBheGlzUG9zaXRpb25Gcm9udCA9IDEuNyxcbiAgICAgICAgcmFkaXVzOiB3aGVlbFJhZGl1c0Zyb250ID0gLjQsXG4gICAgICAgIGhhbGZUcmFjazogd2hlZWxIYWxmVHJhY2tGcm9udCA9IDEsXG4gICAgICAgIGF4aXNIZWlnaHQ6IHdoZWVsQXhpc0hlaWdodEZyb250ID0gLjNcbiAgICB9ID0gZnJvbnQ7XG5cbiAgICBjb25zdCB7IHN0aWZmbmVzcyA9IDIwLjAsIGRhbXBpbmcgPSAyLjMsIGNvbXByZXNzaW9uID0gNC40LCByZXN0TGVuZ3RoID0gMC42IH0gPSBzdXNwZW5zaW9ucztcblxuXG4gICAgLy8gQ2hhc3Npc1xuICAgIGNvbnN0IGdlb21ldHJ5ID0gbmV3IEFtbW8uYnRCb3hTaGFwZShuZXcgQW1tby5idFZlY3RvcjMod2lkdGggKiAuNSwgaGVpZ2h0ICogLjUsIGxlbmd0aCAqIC41KSk7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTtcbiAgICB0cmFuc2Zvcm0uc2V0SWRlbnRpdHkoKTtcbiAgICB0cmFuc2Zvcm0uc2V0T3JpZ2luKG5ldyBBbW1vLmJ0VmVjdG9yMyhwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56KSk7XG4gICAgdHJhbnNmb3JtLnNldFJvdGF0aW9uKG5ldyBBbW1vLmJ0UXVhdGVybmlvbihxdWF0ZXJuaW9uLngsIHF1YXRlcm5pb24ueSwgcXVhdGVybmlvbi56LCBxdWF0ZXJuaW9uLncpKTtcbiAgICBjb25zdCBtb3Rpb25TdGF0ZSA9IG5ldyBBbW1vLmJ0RGVmYXVsdE1vdGlvblN0YXRlKHRyYW5zZm9ybSk7XG4gICAgY29uc3QgbG9jYWxJbmVydGlhID0gbmV3IEFtbW8uYnRWZWN0b3IzKDAsIDAsIDApO1xuICAgIGdlb21ldHJ5LmNhbGN1bGF0ZUxvY2FsSW5lcnRpYShtYXNzLCBsb2NhbEluZXJ0aWEpO1xuICAgIGNvbnN0IGNoYXNzaXMgPSBuZXcgQW1tby5idFJpZ2lkQm9keShuZXcgQW1tby5idFJpZ2lkQm9keUNvbnN0cnVjdGlvbkluZm8obWFzcywgbW90aW9uU3RhdGUsIGdlb21ldHJ5LCBsb2NhbEluZXJ0aWEpKTtcbiAgICBjaGFzc2lzLnNldEFjdGl2YXRpb25TdGF0ZShESVNBQkxFX0RFQUNUSVZBVElPTik7XG4gICAgd29ybGQuYWRkUmlnaWRCb2R5KGNoYXNzaXMpO1xuXG5cbiAgICAvLyBSYXljYXN0IFZlaGljbGVcbiAgICBjb25zdCB0dW5pbmcgPSBuZXcgQW1tby5idFZlaGljbGVUdW5pbmcoKTtcbiAgICBjb25zdCByYXlDYXN0ZXIgPSBuZXcgQW1tby5idERlZmF1bHRWZWhpY2xlUmF5Y2FzdGVyKHdvcmxkLmdldER5bmFtaWNzV29ybGQoKSk7XG4gICAgY29uc3QgdmVoaWNsZSA9IG5ldyBBbW1vLmJ0UmF5Y2FzdFZlaGljbGUodHVuaW5nLCBjaGFzc2lzLCByYXlDYXN0ZXIpO1xuICAgIHZlaGljbGUuc2V0Q29vcmRpbmF0ZVN5c3RlbSgwLCAxLCAyKTtcbiAgICB3b3JsZC5hZGRBY3Rpb24odmVoaWNsZSk7XG5cbiAgICBjb25zdCB3aGVlbERpcmVjdGlvbkNTMCA9IG5ldyBBbW1vLmJ0VmVjdG9yMygwLCAtMSwgMCk7XG4gICAgY29uc3Qgd2hlZWxBeGxlQ1MgPSBuZXcgQW1tby5idFZlY3RvcjMoLTEsIDAsIDApO1xuXG4gICAgY29uc3QgYWRkV2hlZWwgPSAoaXNGcm9udCwgcG9zLCByYWRpdXMpID0+IHtcblxuICAgICAgICB2YXIgd2hlZWxJbmZvID0gdmVoaWNsZS5hZGRXaGVlbChcbiAgICAgICAgICAgIHBvcyxcbiAgICAgICAgICAgIHdoZWVsRGlyZWN0aW9uQ1MwLFxuICAgICAgICAgICAgd2hlZWxBeGxlQ1MsXG4gICAgICAgICAgICByZXN0TGVuZ3RoLFxuICAgICAgICAgICAgcmFkaXVzLFxuICAgICAgICAgICAgdHVuaW5nLFxuICAgICAgICAgICAgaXNGcm9udCk7XG5cbiAgICAgICAgd2hlZWxJbmZvLnNldF9tX3N1c3BlbnNpb25TdGlmZm5lc3Moc3RpZmZuZXNzKTtcbiAgICAgICAgd2hlZWxJbmZvLnNldF9tX3doZWVsc0RhbXBpbmdSZWxheGF0aW9uKGRhbXBpbmcpO1xuICAgICAgICB3aGVlbEluZm8uc2V0X21fd2hlZWxzRGFtcGluZ0NvbXByZXNzaW9uKGNvbXByZXNzaW9uKTtcbiAgICAgICAgd2hlZWxJbmZvLnNldF9tX2ZyaWN0aW9uU2xpcChmcmljdGlvbik7XG4gICAgICAgIHdoZWVsSW5mby5zZXRfbV9yb2xsSW5mbHVlbmNlKHJvbGxJbmZsdWVuY2UpO1xuICAgIH1cblxuICAgIGFkZFdoZWVsKHRydWUsIG5ldyBBbW1vLmJ0VmVjdG9yMyh3aGVlbEhhbGZUcmFja0Zyb250LCB3aGVlbEF4aXNIZWlnaHRGcm9udCwgYXhpc1Bvc2l0aW9uRnJvbnQpLCB3aGVlbFJhZGl1c0Zyb250KTtcbiAgICBhZGRXaGVlbCh0cnVlLCBuZXcgQW1tby5idFZlY3RvcjMoLXdoZWVsSGFsZlRyYWNrRnJvbnQsIHdoZWVsQXhpc0hlaWdodEZyb250LCBheGlzUG9zaXRpb25Gcm9udCksIHdoZWVsUmFkaXVzRnJvbnQpO1xuICAgIGFkZFdoZWVsKGZhbHNlLCBuZXcgQW1tby5idFZlY3RvcjMoLXdoZWVsSGFsZlRyYWNrQmFjaywgd2hlZWxBeGlzSGVpZ2h0QmFjaywgYXhpc1Bvc2l0aW9uQmFjayksIHdoZWVsUmFkaXVzQmFjayk7XG4gICAgYWRkV2hlZWwoZmFsc2UsIG5ldyBBbW1vLmJ0VmVjdG9yMyh3aGVlbEhhbGZUcmFja0JhY2ssIHdoZWVsQXhpc0hlaWdodEJhY2ssIGF4aXNQb3NpdGlvbkJhY2spLCB3aGVlbFJhZGl1c0JhY2spO1xuXG4gICAgdmVoaWNsZS51dWlkID0gdXVpZDtcblxuICAgIHdvcmxkLnNldEJvZHkoe1xuICAgICAgICB0eXBlOiBUWVBFUy5WRUhJQ0xFLFxuICAgICAgICB1dWlkLFxuICAgICAgICB2ZWhpY2xlOiB2ZWhpY2xlLFxuICAgICAgICB3aGVlbHMsXG4gICAgICAgIG9wdGlvbnM6IGRhdGEsXG4gICAgICAgIHN0YXRlOiBERUZBVUxUX1ZFSElDTEVfU1RBVEVcbiAgICB9KTtcbn1cblxuZXhwb3J0IGNvbnN0IHNldFZlaGljbGVQb3NpdGlvbiA9IGRhdGEgPT4ge1xuICAgIGNvbnN0IHsgdXVpZCwgcG9zaXRpb24gfSA9IGRhdGE7XG4gICAgY29uc3QgZWxlbWVudCA9IHdvcmxkLmdldEVsZW1lbnQodXVpZCk7XG5cbiAgICBpZiAoZWxlbWVudC50eXBlID09PSBUWVBFUy5WRUhJQ0xFKSB7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBlbGVtZW50LnZlaGljbGUuZ2V0UmlnaWRCb2R5KCk7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7XG5cbiAgICAgICAgYm9keS5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pO1xuICAgICAgICB0cmFuc2Zvcm0uc2V0T3JpZ2luKG5ldyBBbW1vLmJ0VmVjdG9yMyhwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56ICkpO1xuXG4gICAgICAgIGJvZHkuc2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0VmVoaWNsZVF1YXRlcm5pb24gPSBkYXRhID0+IHtcbiAgICBjb25zdCB7IHV1aWQsIHF1YXRlcm5pb24gfSA9IGRhdGE7XG4gICAgY29uc3QgZWxlbWVudCA9IHdvcmxkLmdldEVsZW1lbnQodXVpZCk7XG5cbiAgICBpZiAoZWxlbWVudC50eXBlID09PSBUWVBFUy5WRUhJQ0xFKSB7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBlbGVtZW50LnZlaGljbGUuZ2V0UmlnaWRCb2R5KCk7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7XG5cbiAgICAgICAgYm9keS5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pO1xuICAgICAgICB0cmFuc2Zvcm0uc2V0Um90YXRpb24obmV3IEFtbW8uYnRRdWF0ZXJuaW9uKHF1YXRlcm5pb24ueCwgcXVhdGVybmlvbi55LCBxdWF0ZXJuaW9uLnosIHF1YXRlcm5pb24udykpO1xuXG4gICAgICAgIGJvZHkuc2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgcmVzZXRWZWhpY2xlID0gZGF0YSA9PiB7XG4gICAgY29uc3QgeyB1dWlkLCBxdWF0ZXJuaW9uLCBwb3NpdGlvbiB9ID0gZGF0YTtcbiAgICBjb25zdCBlbGVtZW50ID0gd29ybGQuZ2V0RWxlbWVudCh1dWlkKTtcblxuICAgIGlmIChlbGVtZW50LnR5cGUgPT09IFRZUEVTLlZFSElDTEUpIHtcbiAgICAgICAgY29uc3QgYm9keSA9IGVsZW1lbnQudmVoaWNsZS5nZXRSaWdpZEJvZHkoKTtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTtcbiAgICAgICAgXG4gICAgICAgIGJvZHkuZ2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTtcblxuICAgICAgICB0cmFuc2Zvcm0uc2V0SWRlbnRpdHkoKTtcbiAgICAgICAgdHJhbnNmb3JtLnNldE9yaWdpbihuZXcgQW1tby5idFZlY3RvcjMocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueiApKTtcbiAgICAgICAgdHJhbnNmb3JtLnNldFJvdGF0aW9uKG5ldyBBbW1vLmJ0UXVhdGVybmlvbihxdWF0ZXJuaW9uLngsIHF1YXRlcm5pb24ueSwgcXVhdGVybmlvbi56LCBxdWF0ZXJuaW9uLncpKTtcblxuICAgICAgICBib2R5LnNldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7XG4gICAgfVxufVxuXG5leHBvcnQgY29uc3QgaGFuZGxlVmVoaWNsZVVwZGF0ZSA9ICh7IHZlaGljbGUsIHdoZWVscywgdXVpZCwgc3RhdGUgPSBERUZBVUxUX1ZFSElDTEVfU1RBVEUsIG9wdGlvbnMgPSB7fSB9LCBkdCkgPT4ge1xuICAgIGNvbnN0IHNwZWVkID0gdmVoaWNsZS5nZXRDdXJyZW50U3BlZWRLbUhvdXIoKTtcblxuICAgIGRpc3BhdGNoZXIuc2VuZERpc3BhdGNoRXZlbnQodXVpZCwgUEhZU0lDU19FVkVOVFMuVkVISUNMRS5TUEVFRCwgeyBzcGVlZCB9KTtcblxuICAgIGxldCBicmVha2luZ0ZvcmNlID0gMDtcbiAgICBsZXQgZW5naW5lRm9yY2UgPSAwO1xuXG4gICAgY29uc3Qge1xuICAgICAgICBzdGVlcmluZ0NsYW1wID0gREVGQVVMVF9TVEVFUklOR19DTEFNUCxcbiAgICAgICAgc3RlZXJpbmdJbmNyZW1lbnQgPSBERUZBVUxUX1NURUVSSU5HX0lOQ1JFTUVOVCxcbiAgICAgICAgbWF4RW5naW5lRm9yY2UgPSBERUZBVUxUX01BWF9FTkdJTkVfRk9SQ0UsXG4gICAgICAgIG1heEJyZWFraW5nRm9yY2UgPSBERUZBVUxUX01BWF9CUkVBS0lOR19GT1JDRVxuICAgIH0gPSBvcHRpb25zO1xuXG4gICAgaWYgKHN0YXRlLmFjY2VsZXJhdGlvbikge1xuICAgICAgICBpZiAoc3BlZWQgPCAtMSlcbiAgICAgICAgICAgIGJyZWFraW5nRm9yY2UgPSBtYXhCcmVha2luZ0ZvcmNlO1xuICAgICAgICBlbHNlIGVuZ2luZUZvcmNlID0gbWF4RW5naW5lRm9yY2U7XG4gICAgfVxuICAgIGlmIChzdGF0ZS5icmFraW5nKSB7XG4gICAgICAgIGlmIChzcGVlZCA+IDEpXG4gICAgICAgICAgICBicmVha2luZ0ZvcmNlID0gbWF4QnJlYWtpbmdGb3JjZTtcbiAgICAgICAgZWxzZSBlbmdpbmVGb3JjZSA9IC1tYXhFbmdpbmVGb3JjZSAvIDI7XG4gICAgfVxuICAgIGlmIChzdGF0ZS5sZWZ0KSB7XG4gICAgICAgIGlmIChzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgPCBzdGVlcmluZ0NsYW1wKVxuICAgICAgICAgICAgc3RhdGUudmVoaWNsZVN0ZWVyaW5nICs9IHN0ZWVyaW5nSW5jcmVtZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChzdGF0ZS5yaWdodCkge1xuICAgICAgICAgICAgaWYgKHN0YXRlLnZlaGljbGVTdGVlcmluZyA+IC1zdGVlcmluZ0NsYW1wKVxuICAgICAgICAgICAgICAgIHN0YXRlLnZlaGljbGVTdGVlcmluZyAtPSBzdGVlcmluZ0luY3JlbWVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgPCAtc3RlZXJpbmdJbmNyZW1lbnQpXG4gICAgICAgICAgICAgICAgc3RhdGUudmVoaWNsZVN0ZWVyaW5nICs9IHN0ZWVyaW5nSW5jcmVtZW50O1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLnZlaGljbGVTdGVlcmluZyA+IHN0ZWVyaW5nSW5jcmVtZW50KVxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgLT0gc3RlZXJpbmdJbmNyZW1lbnQ7XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnZlaGljbGVTdGVlcmluZyA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmVoaWNsZS5hcHBseUVuZ2luZUZvcmNlKGVuZ2luZUZvcmNlLCBCQUNLX0xFRlQpO1xuICAgIHZlaGljbGUuYXBwbHlFbmdpbmVGb3JjZShlbmdpbmVGb3JjZSwgQkFDS19SSUdIVCk7XG5cbiAgICB2ZWhpY2xlLnNldEJyYWtlKGJyZWFraW5nRm9yY2UgLyAyLCBGUk9OVF9MRUZUKTtcbiAgICB2ZWhpY2xlLnNldEJyYWtlKGJyZWFraW5nRm9yY2UgLyAyLCBGUk9OVF9SSUdIVCk7XG4gICAgdmVoaWNsZS5zZXRCcmFrZShicmVha2luZ0ZvcmNlLCBCQUNLX0xFRlQpO1xuICAgIHZlaGljbGUuc2V0QnJha2UoYnJlYWtpbmdGb3JjZSwgQkFDS19SSUdIVCk7XG5cbiAgICB2ZWhpY2xlLnNldFN0ZWVyaW5nVmFsdWUoc3RhdGUudmVoaWNsZVN0ZWVyaW5nLCBGUk9OVF9MRUZUKTtcbiAgICB2ZWhpY2xlLnNldFN0ZWVyaW5nVmFsdWUoc3RhdGUudmVoaWNsZVN0ZWVyaW5nLCBGUk9OVF9SSUdIVCk7XG5cbiAgICBsZXQgdG0sIHAsIHEsIGk7XG4gICAgY29uc3QgbiA9IHZlaGljbGUuZ2V0TnVtV2hlZWxzKCk7XG4gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICB2ZWhpY2xlLnVwZGF0ZVdoZWVsVHJhbnNmb3JtKGksIHRydWUpO1xuICAgICAgICB0bSA9IHZlaGljbGUuZ2V0V2hlZWxUcmFuc2Zvcm1XUyhpKTtcbiAgICAgICAgcCA9IHRtLmdldE9yaWdpbigpO1xuICAgICAgICBxID0gdG0uZ2V0Um90YXRpb24oKTtcblxuICAgICAgICBjb25zdCB3aGVlbFVVSUQgPSB3aGVlbHNbaV07XG4gICAgICAgIGRpc3BhdGNoZXIuc2VuZEJvZHlVcGRhdGUod2hlZWxVVUlELCBwLCBxLCBkdCk7XG4gICAgfVxuXG4gICAgdG0gPSB2ZWhpY2xlLmdldENoYXNzaXNXb3JsZFRyYW5zZm9ybSgpO1xuICAgIHAgPSB0bS5nZXRPcmlnaW4oKTtcbiAgICBxID0gdG0uZ2V0Um90YXRpb24oKTtcblxuICAgIGNvbnN0IGRpcmVjdGlvbiA9IHZlaGljbGUuZ2V0Rm9yd2FyZFZlY3RvcigpO1xuICAgIGRpc3BhdGNoZXIuc2VuZERpc3BhdGNoRXZlbnQodXVpZCwgUEhZU0lDU19FVkVOVFMuVkVISUNMRS5ESVJFQ1RJT04sIHtcbiAgICAgICAgZGlyZWN0aW9uOiB7XG4gICAgICAgICAgICB4OiBkaXJlY3Rpb24ueCgpLFxuICAgICAgICAgICAgeTogZGlyZWN0aW9uLnkoKSxcbiAgICAgICAgICAgIHo6IGRpcmVjdGlvbi56KClcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgZGlzcGF0Y2hlci5zZW5kQm9keVVwZGF0ZSh1dWlkLCBwLCBxLCBkdCk7XG4gICAgd29ybGQudXBkYXRlQm9keVN0YXRlKHV1aWQsIHN0YXRlKTtcbn0iLCJpbXBvcnQgeyBFWFBMT1NJT05fU0laRVMsIEVYUExPU0lPTl9TVFJFTkdUSFMgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgd29ybGQgZnJvbSBcIi4vd29ybGRcIjtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUdob3N0Q29sbGlkZXIgPSAocmFkaXVzLCBwb3NpdGlvbikgPT4ge1xuICAgIGNvbnN0IGdob3N0Q29sbGlkZXIgPSBuZXcgQW1tby5idEdob3N0T2JqZWN0KCk7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTtcblxuICAgIGdob3N0Q29sbGlkZXIuc2V0Q29sbGlzaW9uU2hhcGUobmV3IEFtbW8uYnRTcGhlcmVTaGFwZShyYWRpdXMpKTtcbiAgICBnaG9zdENvbGxpZGVyLmdldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7XG5cbiAgICB0cmFuc2Zvcm0uc2V0SWRlbnRpdHkoKTtcbiAgICB0cmFuc2Zvcm0uc2V0T3JpZ2luKHBvc2l0aW9uKTtcbiAgICB0cmFuc2Zvcm0uc2V0Um90YXRpb24obmV3IEFtbW8uYnRRdWF0ZXJuaW9uKDAsIDAsIDAsIDEpKTtcblxuICAgIGdob3N0Q29sbGlkZXIuc2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTtcblxuICAgIHJldHVybiB7IGdob3N0Q29sbGlkZXIsIHRyYW5zZm9ybSB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGZvckVhY2hHaG9zdENvbGxpc2lvbiA9IChnaG9zdENvbGxpZGVyLCBmb3JFYWNoQ2FsbGJhY2sgPSAoKSA9PiB7fSkgPT4ge1xuICAgIGNvbnN0IGNvbGxpc2lvbnMgPSBnaG9zdENvbGxpZGVyLmdldE51bU92ZXJsYXBwaW5nT2JqZWN0cygpO1xuICAgIGZvciAobGV0IGk9MDsgaTxjb2xsaXNpb25zOyBpKyspIHtcbiAgICAgICAgY29uc3Qgb2JqZWN0ID0gQW1tby5jYXN0T2JqZWN0KGdob3N0Q29sbGlkZXIuZ2V0T3ZlcmxhcHBpbmdPYmplY3QoaSksIEFtbW8uYnRSaWdpZEJvZHkpO1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpO1xuXG4gICAgICAgIG9iamVjdC5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pO1xuICAgICAgICBmb3JFYWNoQ2FsbGJhY2sob2JqZWN0LCB0cmFuc2Zvcm0sIGkpO1xuXG4gICAgICAgIEFtbW8uZGVzdHJveSh0cmFuc2Zvcm0pO1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IGdldEV4cGxvc2lvblBvc2l0aW9uID0gKHV1aWQsIHBvc2l0aW9uKSA9PiB7XG4gICAgbGV0IGV4cGxvc2lvblBvc2l0aW9uID0gcG9zaXRpb247XG4gICAgaWYgKCFleHBsb3Npb25Qb3NpdGlvbikge1xuICAgICAgICBjb25zdCB7IGJvZHkgfSA9IHdvcmxkLmdldEVsZW1lbnQodXVpZCk7XG4gICAgICAgIGNvbnN0IG1vdGlvblN0YXRlID0gYm9keS5nZXRNb3Rpb25TdGF0ZSgpO1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpO1xuXG4gICAgICAgIG1vdGlvblN0YXRlLmdldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7XG4gICAgICAgIGV4cGxvc2lvblBvc2l0aW9uID0gdHJhbnNmb3JtLmdldE9yaWdpbigpO1xuICAgIH1cblxuICAgIHJldHVybiBleHBsb3Npb25Qb3NpdGlvbjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRFeHBsb3Npb25JbXB1bHNlID0gKHBvc2l0aW9uLCBleHBsb3Npb25Qb3NpdGlvbiwgc3RyZW5ndGgpID0+IHtcbiAgICBjb25zdCBkaXN0YW5jZSA9IHBvc2l0aW9uLm9wX3N1YihleHBsb3Npb25Qb3NpdGlvbik7XG4gICAgZGlzdGFuY2Uubm9ybWFsaXplKCk7XG4gICAgY29uc3QgaW1wdWxzZSA9IGRpc3RhbmNlLm9wX211bChzdHJlbmd0aCk7XG5cbiAgICBpbXB1bHNlLnNldFkoaW1wdWxzZS55KCkgKyBzdHJlbmd0aCk7XG5cbiAgICByZXR1cm4gaW1wdWxzZTtcbn1cblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUV4cGxvc2lvbiA9ICh7XG4gICAgdXVpZCxcbiAgICBwb3NpdGlvbixcbiAgICByYWRpdXMgPSBFWFBMT1NJT05fU0laRVMuU01BTEwsXG4gICAgc3RyZW5ndGggPSBFWFBMT1NJT05fU1RSRU5HVEhTLk1FRElVTVxufSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGV4cGxvc2lvblBvc2l0aW9uID0gZ2V0RXhwbG9zaW9uUG9zaXRpb24odXVpZCwgcG9zaXRpb24pO1xuICAgICAgICBjb25zdCB7IGdob3N0Q29sbGlkZXIsIHRyYW5zZm9ybSB9ID0gY3JlYXRlR2hvc3RDb2xsaWRlcihyYWRpdXMsIGV4cGxvc2lvblBvc2l0aW9uKTtcblxuICAgICAgICB3b3JsZC5hZGRDb2xsaXNpb25PYmplY3QoZ2hvc3RDb2xsaWRlcik7XG5cbiAgICAgICAgZm9yRWFjaEdob3N0Q29sbGlzaW9uKGdob3N0Q29sbGlkZXIsIChvYmplY3QsIG9iamVjdFRyYW5zZm9ybSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luID0gb2JqZWN0VHJhbnNmb3JtLmdldE9yaWdpbigpO1xuICAgICAgICAgICAgb2JqZWN0LmFjdGl2YXRlKHRydWUpO1xuICAgICAgICAgICAgb2JqZWN0LmFwcGx5Q2VudHJhbEltcHVsc2UoZ2V0RXhwbG9zaW9uSW1wdWxzZShvcmlnaW4sIGV4cGxvc2lvblBvc2l0aW9uLCBzdHJlbmd0aCkpO1xuICAgICAgICB9KTtcblxuICAgICAgICB3b3JsZC5nZXREeW5hbWljc1dvcmxkKCkucmVtb3ZlQ29sbGlzaW9uT2JqZWN0KGdob3N0Q29sbGlkZXIpO1xuICAgICAgICBBbW1vLmRlc3Ryb3koZ2hvc3RDb2xsaWRlcik7XG4gICAgICAgIEFtbW8uZGVzdHJveSh0cmFuc2Zvcm0pO1xuICAgIH0gY2F0Y2goZSkge1xuICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICB9XG59IiwiaW1wb3J0IHtcbiAgICBMSUJSQVJZX05BTUVcbn0gZnJvbSAnLi4vY29uc3RhbnRzJztcblxuaW1wb3J0IHsgYWRkVmVoaWNsZSwgcmVzZXRWZWhpY2xlLCBzZXRWZWhpY2xlUG9zaXRpb24sIHNldFZlaGljbGVRdWF0ZXJuaW9uIH0gZnJvbSAnLi92ZWhpY2xlcyc7XG5pbXBvcnQgeyBhZGRCb3gsIGFkZE1vZGVsLCBzZXRMaW5lYXJWZWxvY2l0eSwgYXBwbHlJbXB1c2UsIGFkZFNwaGVyZSwgc2V0UG9zaXRpb24gfSBmcm9tICcuL2VsZW1lbnRzJztcbmltcG9ydCB7IGNyZWF0ZUV4cGxvc2lvbiB9IGZyb20gJy4vZWZmZWN0cyc7XG5pbXBvcnQgeyBhZGRQbGF5ZXIgfSBmcm9tICcuL3BsYXllcic7XG5cbmltcG9ydCBkaXNwYXRjaGVyIGZyb20gJy4vbGliL2Rpc3BhdGNoZXInO1xuaW1wb3J0IHdvcmxkIGZyb20gJy4vd29ybGQnO1xuaW1wb3J0IHsgUEhZU0lDU19FVkVOVFMgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5cbmNvbnN0IGhhbmRsZUxvYWRFdmVudCA9IG9wdGlvbnMgPT4gQW1tbyA9PiB7XG4gICAgc2VsZi5BbW1vID0gQW1tbztcblxuICAgIG9ubWVzc2FnZSA9ICh7IGRhdGEgfSkgPT4ge1xuICAgICAgICBzd2l0Y2goZGF0YS5ldmVudCkge1xuICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5BREQuQk9YOlxuICAgICAgICAgICAgICAgIGFkZEJveChkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuQURELlNQSEVSRTpcbiAgICAgICAgICAgICAgICBhZGRTcGhlcmUoZGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkFERC5WRUhJQ0xFOlxuICAgICAgICAgICAgICAgIGFkZFZlaGljbGUoZGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkFERC5NT0RFTDpcbiAgICAgICAgICAgICAgICBhZGRNb2RlbChkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuQURELlBMQVlFUjpcbiAgICAgICAgICAgICAgICBhZGRQbGF5ZXIoZGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkVMRU1FTlQuU0VULkxJTkVBUl9WRUxPQ0lUWTpcbiAgICAgICAgICAgICAgICBzZXRMaW5lYXJWZWxvY2l0eShkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuRUxFTUVOVC5TRVQuUE9TSVRJT046XG4gICAgICAgICAgICAgICAgc2V0UG9zaXRpb24oZGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLlZFSElDTEUuU0VULlBPU0lUSU9OOlxuICAgICAgICAgICAgICAgIHNldFZlaGljbGVQb3NpdGlvbihkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuVkVISUNMRS5TRVQuUVVBVEVSTklPTjpcbiAgICAgICAgICAgICAgICBzZXRWZWhpY2xlUXVhdGVybmlvbihkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuVkVISUNMRS5SRVNFVDpcbiAgICAgICAgICAgICAgICByZXNldFZlaGljbGUoZGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkVMRU1FTlQuQVBQTFkuSU1QVUxTRTpcbiAgICAgICAgICAgICAgICBhcHBseUltcHVzZShkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuRUxFTUVOVC5VUERBVEU6XG4gICAgICAgICAgICAgICAgd29ybGQudXBkYXRlQm9keVN0YXRlKGRhdGEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5FTEVNRU5ULkRJU1BPU0U6XG4gICAgICAgICAgICAgICAgd29ybGQuZGlzcG9zZUJvZHkoZGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkVGRkVDVFMuRVhQTE9TSU9OOlxuICAgICAgICAgICAgICAgIGNyZWF0ZUV4cGxvc2lvbihkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuVEVSTUlOQVRFOlxuICAgICAgICAgICAgICAgIHdvcmxkLnRlcm1pbmF0ZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgd29ybGQuaW5pdChvcHRpb25zKTtcbiAgICBkaXNwYXRjaGVyLnNlbmRSZWFkeUV2ZW50KCk7XG4gICAgd29ybGQuc2ltdWxhdGUoKVxufTtcblxuY29uc3QgbG9hZEFtbW8gPSAob3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IHNjcmlwdFVybCA9IG9wdGlvbnMuaG9zdCArICcvJyArIChvcHRpb25zLnBhdGggfHwgTElCUkFSWV9OQU1FKTtcbiAgICBpbXBvcnRTY3JpcHRzKHNjcmlwdFVybCk7XG5cbiAgICBBbW1vKCkudGhlbihoYW5kbGVMb2FkRXZlbnQob3B0aW9ucykpO1xufTtcblxub25tZXNzYWdlID0gKHsgZGF0YSB9KSA9PiB7XG4gICAgc3dpdGNoKGRhdGEuZXZlbnQpIHtcbiAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5MT0FELkFNTU86XG4gICAgICAgICAgICBsb2FkQW1tbyhkYXRhKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxufSJdLCJuYW1lcyI6WyJMSUJSQVJZX05BTUUiLCJUWVBFUyIsIkJPWCIsIlNQSEVSRSIsIlZFSElDTEUiLCJNRVNIIiwiUExBWUVSIiwiREVGQVVMVF9WRUhJQ0xFX1NUQVRFIiwidmVoaWNsZVN0ZWVyaW5nIiwiYWNjZWxlcmF0aW9uIiwiYnJlYWtpbmciLCJyaWdodCIsImxlZnQiLCJERUZBVUxUX1JJR0lEQk9EWV9TVEFURSIsInZlbG9jaXR5IiwieCIsInkiLCJ6IiwibW92ZW1lbnQiLCJmb3J3YXJkIiwiYmFja3dhcmRzIiwiZGlyZWN0aW9uIiwiREVGQVVMVF9TQ0FMRSIsIkRFRkFVTFRfTElORUFSX1ZFTE9DSVRZIiwiREVGQVVMVF9JTVBVTFNFIiwiRElTQUJMRV9ERUFDVElWQVRJT04iLCJHUkFWSVRZIiwiRlJPTlRfTEVGVCIsIkZST05UX1JJR0hUIiwiQkFDS19MRUZUIiwiQkFDS19SSUdIVCIsIkRFRkFVTFRfU1RFRVJJTkdfSU5DUkVNRU5UIiwiREVGQVVMVF9TVEVFUklOR19DTEFNUCIsIkRFRkFVTFRfTUFYX0VOR0lORV9GT1JDRSIsIkRFRkFVTFRfTUFYX0JSRUFLSU5HX0ZPUkNFIiwiRVhQTE9TSU9OX1NJWkVTIiwiU01BTEwiLCJNRURJVU0iLCJMQVJHRSIsIk1BU1NJVkUiLCJFWFBMT1NJT05fU1RSRU5HVEhTIiwiVkVSWV9XRUFLIiwiV0VBSyIsIk9LX05PIiwiUEhZU0lDU19FVkVOVFMiLCJESVNQQVRDSCIsIlRFUk1JTkFURSIsIkxPQUQiLCJBTU1PIiwiUkVBRFkiLCJJTklUIiwiVVBEQVRFIiwiQUREIiwiTU9ERUwiLCJFTEVNRU5UIiwiRElTUE9TRSIsIkNPTExJU0lPTiIsIkNSRUFURUQiLCJTRVQiLCJQT1NJVElPTiIsIlFVQVRFUk5JT04iLCJMSU5FQVJfVkVMT0NJVFkiLCJBUFBMWSIsIklNUFVMU0UiLCJSRVNFVCIsIlNQRUVEIiwiRElSRUNUSU9OIiwiRUZGRUNUUyIsIkVYUExPU0lPTiIsIkRpc3BhdGNoZXIiLCJkdCIsInBvc3RNZXNzYWdlIiwiZXZlbnQiLCJ1dWlkIiwicG9zaXRpb24iLCJyb3RhdGlvbiIsInF1YXRlcm5pb24iLCJ3IiwiZXZlbnROYW1lIiwiZXZlbnREYXRhIiwiYXBwbHlNYXRyaXg0VG9WZWN0b3IzIiwibWF0cml4IiwiY3JlYXRlUmlnaWRCb2R5Iiwic2hhcGUiLCJvcHRpb25zIiwibWFzcyIsImZyaWN0aW9uIiwicmVzdGl0dXRpb24iLCJkYW1waW5nIiwibGluZWFyIiwiYW5ndWxhciIsInRyYW5zZm9ybSIsIkFtbW8iLCJidFRyYW5zZm9ybSIsInNldElkZW50aXR5Iiwic2V0T3JpZ2luIiwiYnRWZWN0b3IzIiwic2V0Um90YXRpb24iLCJidFF1YXRlcm5pb24iLCJtb3Rpb25TdGF0ZSIsImJ0RGVmYXVsdE1vdGlvblN0YXRlIiwibG9jYWxJbmVydGlhIiwiY2FsY3VsYXRlTG9jYWxJbmVydGlhIiwicmJJbmZvIiwiYnRSaWdpZEJvZHlDb25zdHJ1Y3Rpb25JbmZvIiwiYm9keSIsImJ0UmlnaWRCb2R5Iiwic2V0RnJpY3Rpb24iLCJzZXRSZXN0aXR1dGlvbiIsInNldERhbXBpbmciLCJzZXRBY3RpdmF0aW9uU3RhdGUiLCJ3b3JsZCIsImFkZFJpZ2lkQm9keSIsImFkZE1vZGVsIiwidmVydGljZXMiLCJtYXRyaWNlcyIsImluZGV4ZXMiLCJzY2FsZSIsImJ0YSIsImJ0YiIsImJ0YyIsInRyaU1lc2giLCJidFRyaWFuZ2xlTWVzaCIsImkiLCJsZW5ndGgiLCJjb21wb25lbnRzIiwiaW5kZXgiLCJBcnJheSIsImZyb20iLCJqIiwiYWkiLCJiaSIsImNpIiwidmEiLCJ2YiIsInZjIiwic2V0VmFsdWUiLCJhZGRUcmlhbmdsZSIsImxvY2FsU2NhbGUiLCJzZXRTY2FsaW5nIiwiZGVzdHJveSIsImNvbGxpc2lvblNoYXBlIiwiYnRCdmhUcmlhbmdsZU1lc2hTaGFwZSIsInJlc291cmNlcyIsInNldEJvZHkiLCJ0eXBlIiwic3RhdGUiLCJhZGRCb3giLCJkYXRhIiwid2lkdGgiLCJoZWlnaHQiLCJnZW9tZXRyeSIsImJ0Qm94U2hhcGUiLCJhZGRTcGhlcmUiLCJyYWRpdXMiLCJidFNwaGVyZVNoYXBlIiwic2V0TGluZWFyVmVsb2NpdHkiLCJnZXRFbGVtZW50IiwiZ2V0TW90aW9uU3RhdGUiLCJsaW5lYXJWZWxvY2l0eSIsInNldFBvc2l0aW9uIiwiZ2V0V29ybGRUcmFuc2Zvcm0iLCJzZXRXb3JsZFRyYW5zZm9ybSIsImFwcGx5SW1wdXNlIiwiaW1wdWxzZSIsImltcHVsc2VWZWN0b3IiLCJhcHBseUNlbnRyYWxJbXB1bHNlIiwiaGFuZGxlRWxlbWVudFVwZGF0ZSIsIm9yaWdpbiIsImdldE9yaWdpbiIsImdldFJvdGF0aW9uIiwiZGlzcGF0Y2hlciIsInNlbmRCb2R5VXBkYXRlIiwiYWRkUGxheWVyIiwiY2Fwc3VsZSIsImJ0Q2Fwc3VsZVNoYXBlIiwic2V0QW5ndWxhckZhY3RvciIsImhhbmRsZVBsYXllclVwZGF0ZSIsImNhbWVyYURpcmVjdGlvbiIsIk1BWF9TUEVFRCIsIndhbGtWZWxvY2l0eSIsImdldExpbmVhclZlbG9jaXR5Iiwic3BlZWQiLCJmb3J3YXJkRGlyIiwiZ2V0QmFzaXMiLCJnZXRSb3ciLCJub3JtYWxpemUiLCJ3YWxrRGlyZWN0aW9uIiwid2Fsa1NwZWVkIiwic2V0WCIsInNldFoiLCJzZXRDZW50ZXJPZk1hc3NUcmFuc2Zvcm0iLCJDbG9jayIsInRpbWVzdGFtcCIsInRpbWUiLCJEYXRlIiwibm93IiwiZGVsdGEiLCJXb3JsZCIsImdyYXZpdHkiLCJjb2xsaXNpb25Db25maWd1cmF0aW9uIiwiYnREZWZhdWx0Q29sbGlzaW9uQ29uZmlndXJhdGlvbiIsImJ0Q29sbGlzaW9uRGlzcGF0Y2hlciIsImJyb2FkcGhhc2UiLCJidERidnRCcm9hZHBoYXNlIiwic29sdmVyIiwiYnRTZXF1ZW50aWFsSW1wdWxzZUNvbnN0cmFpbnRTb2x2ZXIiLCJkeW5hbWljc1dvcmxkIiwiYnREaXNjcmV0ZUR5bmFtaWNzV29ybGQiLCJzZXRHcmF2aXR5IiwiZ2V0QnJvYWRwaGFzZSIsImdldE92ZXJsYXBwaW5nUGFpckNhY2hlIiwic2V0SW50ZXJuYWxHaG9zdFBhaXJDYWxsYmFjayIsImJ0R2hvc3RQYWlyQ2FsbGJhY2siLCJpbml0aWFsaXNlZCIsImhhc0VsZW1lbnQiLCJlbGVtZW50cyIsImRlbGV0ZWQiLCJPYmplY3QiLCJrZXlzIiwiZmlsdGVyIiwiZm9yRWFjaCIsImluY2x1ZGVzIiwiYWN0aW9uIiwiYWRkQWN0aW9uIiwiY29sbGlzaW9uT2JqZWN0IiwiYWRkQ29sbGlzaW9uT2JqZWN0Iiwic3RlcFNpbXVsYXRpb24iLCJjbG9jayIsImdldERlbHRhIiwiZWxlbWVudCIsImhhbmRsZVZlaGljbGVVcGRhdGUiLCJjYWxjdWxhdGVDb2xsaXNpb25zIiwicmVtb3ZlRGVsZXRlZEVsZW1lbnRzIiwic2VuZFBoeXNpY3NVcGRhdGUiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZCIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsInNpbXVsYXRlIiwiYmluZCIsImFtbW9EaXNwYXRjaGVyIiwiZ2V0RGlzcGF0Y2hlciIsIm51bU1hbmlmb2xkcyIsImdldE51bU1hbmlmb2xkcyIsImNvbnRhY3RNYW5pZm9sZCIsImdldE1hbmlmb2xkQnlJbmRleEludGVybmFsIiwicmIwIiwiY2FzdE9iamVjdCIsImdldEJvZHkwIiwicmIxIiwiZ2V0Qm9keTEiLCJudW1Db250YWN0cyIsImdldE51bUNvbnRhY3RzIiwiY29udGFjdHMiLCJjb250YWN0UG9pbnQiLCJnZXRDb250YWN0UG9pbnQiLCJkaXN0YW5jZSIsImdldERpc3RhbmNlIiwidmVsb2NpdHkwIiwidmVsb2NpdHkxIiwid29ybGRQb3MwIiwiZ2V0X21fcG9zaXRpb25Xb3JsZE9uQSIsIndvcmxkUG9zMSIsImdldF9tX3Bvc2l0aW9uV29ybGRPbkIiLCJsb2NhbFBvczAiLCJnZXRfbV9sb2NhbFBvaW50QSIsImxvY2FsUG9zMSIsImdldF9tX2xvY2FsUG9pbnRCIiwicHVzaCIsIndvcmxkUG9zIiwibG9jYWxQb3MiLCJzZW5kRGlzcGF0Y2hFdmVudCIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwic2VuZFRlcm1pbmF0ZUV2ZW50IiwidW5kZWZpbmVkIiwicmVtb3ZlUmlnaWRCb2R5IiwicmVtb3ZlRWxlbWVudCIsInNlbmRFbGVtZW50RGlzcG9zZWQiLCJERUZBVUxUX1JPTExfSU5GTFVFTkNFIiwiREVGQVVMVF9GUklDVElPTiIsIkRFRkFVTFRfTUFTUyIsImFkZFZlaGljbGUiLCJ3aGVlbHMiLCJyb2xsSW5mbHVlbmNlIiwid2hlZWxzT3B0aW9ucyIsInN1c3BlbnNpb25zIiwiYmFjayIsImZyb250IiwiYXhpc1Bvc2l0aW9uIiwiYXhpc1Bvc2l0aW9uQmFjayIsIndoZWVsUmFkaXVzQmFjayIsImhhbGZUcmFjayIsIndoZWVsSGFsZlRyYWNrQmFjayIsImF4aXNIZWlnaHQiLCJ3aGVlbEF4aXNIZWlnaHRCYWNrIiwiYXhpc1Bvc2l0aW9uRnJvbnQiLCJ3aGVlbFJhZGl1c0Zyb250Iiwid2hlZWxIYWxmVHJhY2tGcm9udCIsIndoZWVsQXhpc0hlaWdodEZyb250Iiwic3RpZmZuZXNzIiwiY29tcHJlc3Npb24iLCJyZXN0TGVuZ3RoIiwiY2hhc3NpcyIsInR1bmluZyIsImJ0VmVoaWNsZVR1bmluZyIsInJheUNhc3RlciIsImJ0RGVmYXVsdFZlaGljbGVSYXljYXN0ZXIiLCJnZXREeW5hbWljc1dvcmxkIiwidmVoaWNsZSIsImJ0UmF5Y2FzdFZlaGljbGUiLCJzZXRDb29yZGluYXRlU3lzdGVtIiwid2hlZWxEaXJlY3Rpb25DUzAiLCJ3aGVlbEF4bGVDUyIsImFkZFdoZWVsIiwiaXNGcm9udCIsInBvcyIsIndoZWVsSW5mbyIsInNldF9tX3N1c3BlbnNpb25TdGlmZm5lc3MiLCJzZXRfbV93aGVlbHNEYW1waW5nUmVsYXhhdGlvbiIsInNldF9tX3doZWVsc0RhbXBpbmdDb21wcmVzc2lvbiIsInNldF9tX2ZyaWN0aW9uU2xpcCIsInNldF9tX3JvbGxJbmZsdWVuY2UiLCJzZXRWZWhpY2xlUG9zaXRpb24iLCJnZXRSaWdpZEJvZHkiLCJzZXRWZWhpY2xlUXVhdGVybmlvbiIsInJlc2V0VmVoaWNsZSIsImdldEN1cnJlbnRTcGVlZEttSG91ciIsImJyZWFraW5nRm9yY2UiLCJlbmdpbmVGb3JjZSIsInN0ZWVyaW5nQ2xhbXAiLCJzdGVlcmluZ0luY3JlbWVudCIsIm1heEVuZ2luZUZvcmNlIiwibWF4QnJlYWtpbmdGb3JjZSIsImJyYWtpbmciLCJhcHBseUVuZ2luZUZvcmNlIiwic2V0QnJha2UiLCJzZXRTdGVlcmluZ1ZhbHVlIiwidG0iLCJwIiwicSIsIm4iLCJnZXROdW1XaGVlbHMiLCJ1cGRhdGVXaGVlbFRyYW5zZm9ybSIsImdldFdoZWVsVHJhbnNmb3JtV1MiLCJ3aGVlbFVVSUQiLCJnZXRDaGFzc2lzV29ybGRUcmFuc2Zvcm0iLCJnZXRGb3J3YXJkVmVjdG9yIiwidXBkYXRlQm9keVN0YXRlIiwiY3JlYXRlR2hvc3RDb2xsaWRlciIsImdob3N0Q29sbGlkZXIiLCJidEdob3N0T2JqZWN0Iiwic2V0Q29sbGlzaW9uU2hhcGUiLCJmb3JFYWNoR2hvc3RDb2xsaXNpb24iLCJmb3JFYWNoQ2FsbGJhY2siLCJjb2xsaXNpb25zIiwiZ2V0TnVtT3ZlcmxhcHBpbmdPYmplY3RzIiwib2JqZWN0IiwiZ2V0T3ZlcmxhcHBpbmdPYmplY3QiLCJnZXRFeHBsb3Npb25Qb3NpdGlvbiIsImV4cGxvc2lvblBvc2l0aW9uIiwiZ2V0RXhwbG9zaW9uSW1wdWxzZSIsInN0cmVuZ3RoIiwib3Bfc3ViIiwib3BfbXVsIiwic2V0WSIsImNyZWF0ZUV4cGxvc2lvbiIsIm9iamVjdFRyYW5zZm9ybSIsImFjdGl2YXRlIiwicmVtb3ZlQ29sbGlzaW9uT2JqZWN0IiwiZSIsImNvbnNvbGUiLCJsb2ciLCJoYW5kbGVMb2FkRXZlbnQiLCJzZWxmIiwib25tZXNzYWdlIiwiZGlzcG9zZUJvZHkiLCJ0ZXJtaW5hdGUiLCJpbml0Iiwic2VuZFJlYWR5RXZlbnQiLCJsb2FkQW1tbyIsInNjcmlwdFVybCIsImhvc3QiLCJwYXRoIiwiaW1wb3J0U2NyaXB0cyIsInRoZW4iXSwibWFwcGluZ3MiOiI7OztJQUFPLElBQU1BLFlBQVksR0FBRyxTQUFyQjtJQUVBLElBQU1DLEtBQUssR0FBRztJQUNqQkMsRUFBQUEsR0FBRyxFQUFFLEtBRFk7SUFFakJDLEVBQUFBLE1BQU0sRUFBRSxRQUZTO0lBR2pCQyxFQUFBQSxPQUFPLEVBQUUsU0FIUTtJQUlqQkMsRUFBQUEsSUFBSSxFQUFFLE1BSlc7SUFLakJDLEVBQUFBLE1BQU0sRUFBRTtJQUxTLENBQWQ7SUFlQSxJQUFNQyxxQkFBcUIsR0FBRztJQUNqQ0MsRUFBQUEsZUFBZSxFQUFFLENBRGdCO0lBRWpDQyxFQUFBQSxZQUFZLEVBQUUsS0FGbUI7SUFHakNDLEVBQUFBLFFBQVEsRUFBRSxLQUh1QjtJQUlqQ0MsRUFBQUEsS0FBSyxFQUFFLEtBSjBCO0lBS2pDQyxFQUFBQSxJQUFJLEVBQUU7SUFMMkIsQ0FBOUI7SUFRQSxJQUFNQyx1QkFBdUIsR0FBRztJQUNuQ0MsRUFBQUEsUUFBUSxFQUFFO0lBQUVDLElBQUFBLENBQUMsRUFBRSxDQUFMO0lBQVFDLElBQUFBLENBQUMsRUFBRSxDQUFYO0lBQWNDLElBQUFBLENBQUMsRUFBRTtJQUFqQixHQUR5QjtJQUVuQ0MsRUFBQUEsUUFBUSxFQUFFO0lBQ05DLElBQUFBLE9BQU8sRUFBRSxLQURIO0lBRU5DLElBQUFBLFNBQVMsRUFBRSxLQUZMO0lBR05SLElBQUFBLElBQUksRUFBRSxLQUhBO0lBSU5ELElBQUFBLEtBQUssRUFB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', false);
|
|
57551
|
+
}var WorkerFactory = createBase64WorkerFactory('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwooZnVuY3Rpb24gKCkgewogICAgJ3VzZSBzdHJpY3QnOwoKICAgIHZhciBMSUJSQVJZX05BTUUgPSAnYW1tby5qcyc7CiAgICB2YXIgVFlQRVMgPSB7CiAgICAgIEJPWDogJ0JPWCcsCiAgICAgIFNQSEVSRTogJ1NQSEVSRScsCiAgICAgIFZFSElDTEU6ICdWRUhJQ0xFJywKICAgICAgTUVTSDogJ01FU0gnLAogICAgICBQTEFZRVI6ICdQTEFZRVInCiAgICB9OwogICAgdmFyIERFRkFVTFRfVkVISUNMRV9TVEFURSA9IHsKICAgICAgdmVoaWNsZVN0ZWVyaW5nOiAwLAogICAgICBhY2NlbGVyYXRpb246IGZhbHNlLAogICAgICBicmVha2luZzogZmFsc2UsCiAgICAgIHJpZ2h0OiBmYWxzZSwKICAgICAgbGVmdDogZmFsc2UKICAgIH07CiAgICB2YXIgREVGQVVMVF9SSUdJREJPRFlfU1RBVEUgPSB7CiAgICAgIHZlbG9jaXR5OiB7CiAgICAgICAgeDogMCwKICAgICAgICB5OiAwLAogICAgICAgIHo6IDAKICAgICAgfSwKICAgICAgbW92ZW1lbnQ6IHsKICAgICAgICBmb3J3YXJkOiBmYWxzZSwKICAgICAgICBiYWNrd2FyZHM6IGZhbHNlLAogICAgICAgIGxlZnQ6IGZhbHNlLAogICAgICAgIHJpZ2h0OiBmYWxzZQogICAgICB9LAogICAgICBkaXJlY3Rpb246IHsKICAgICAgICB4OiAwLAogICAgICAgIHk6IDAsCiAgICAgICAgejogMAogICAgICB9CiAgICB9OwogICAgdmFyIERFRkFVTFRfU0NBTEUgPSB7CiAgICAgIHg6IDEsCiAgICAgIHk6IDEsCiAgICAgIHo6IDEKICAgIH07CiAgICB2YXIgREVGQVVMVF9MSU5FQVJfVkVMT0NJVFkgPSB7CiAgICAgIHg6IDAsCiAgICAgIHk6IDAsCiAgICAgIHo6IDAKICAgIH07CiAgICB2YXIgREVGQVVMVF9JTVBVTFNFID0gewogICAgICB4OiAwLAogICAgICB5OiAwLAogICAgICB6OiAwCiAgICB9OwogICAgdmFyIERJU0FCTEVfREVBQ1RJVkFUSU9OID0gNDsKICAgIHZhciBHUkFWSVRZID0gewogICAgICB4OiAwLAogICAgICB5OiAtMTAsCiAgICAgIHo6IDAKICAgIH07CiAgICB2YXIgRlJPTlRfTEVGVCA9IDA7CiAgICB2YXIgRlJPTlRfUklHSFQgPSAxOwogICAgdmFyIEJBQ0tfTEVGVCA9IDI7CiAgICB2YXIgQkFDS19SSUdIVCA9IDM7CiAgICB2YXIgREVGQVVMVF9TVEVFUklOR19JTkNSRU1FTlQgPSAuMDQ7CiAgICB2YXIgREVGQVVMVF9TVEVFUklOR19DTEFNUCA9IC41OwogICAgdmFyIERFRkFVTFRfTUFYX0VOR0lORV9GT1JDRSA9IDIwMDA7CiAgICB2YXIgREVGQVVMVF9NQVhfQlJFQUtJTkdfRk9SQ0UgPSAxMDA7CiAgICB2YXIgRVhQTE9TSU9OX1NJWkVTID0gewogICAgICBTTUFMTDogNCwKICAgICAgTUVESVVNOiA2LAogICAgICBMQVJHRTogOCwKICAgICAgTUFTU0lWRTogMTIKICAgIH07CiAgICB2YXIgRVhQTE9TSU9OX1NUUkVOR1RIUyA9IHsKICAgICAgVkVSWV9XRUFLOiAyLAogICAgICBXRUFLOiA0LAogICAgICBNRURJVU06IDgsCiAgICAgIExBUkdFOiAxNiwKICAgICAgTUFTU0lWRTogMzIsCiAgICAgIE9LX05POiA2NAogICAgfTsKCiAgICB2YXIgUEhZU0lDU19FVkVOVFMgPSB7CiAgICAgIERJU1BBVENIOiAncGh5c2ljczpkaXNwYXRjaCcsCiAgICAgIFRFUk1JTkFURTogJ3BoeXNpY3M6dGVybWluYXRlJywKICAgICAgTE9BRDogewogICAgICAgIEFNTU86ICdwaHlzaWNzOmxvYWQ6YW1tbycKICAgICAgfSwKICAgICAgUkVBRFk6ICdwaHlzaWNzOnJlYWR5JywKICAgICAgSU5JVDogJ3BoeXNpY3M6aW5pdCcsCiAgICAgIFVQREFURTogJ3BoeXNpY3M6dXBkYXRlJywKICAgICAgQUREOiB7CiAgICAgICAgQk9YOiAncGh5c2ljczphZGQ6Ym94JywKICAgICAgICBWRUhJQ0xFOiAncGh5c2ljczphZGQ6dmVoaWNsZScsCiAgICAgICAgTU9ERUw6ICdwaHlzaWNzOmFkZDptb2RlbCcsCiAgICAgICAgUExBWUVSOiAncGh5c2ljczphZGQ6cGxheWVyJywKICAgICAgICBTUEhFUkU6ICdwaHlzaWNzOmFkZDpzcGhlcmUnCiAgICAgIH0sCiAgICAgIEVMRU1FTlQ6IHsKICAgICAgICBESVNQT1NFOiAncGh5c2ljczplbGVtZW50OmRpc3Bvc2UnLAogICAgICAgIENPTExJU0lPTjogJ3BoeXNpY3M6ZWxlbWVudDpjb2xsaXNpb24nLAogICAgICAgIFVQREFURTogJ3BoeXNpY3M6ZWxlbWVudDp1cGRhdGUnLAogICAgICAgIENSRUFURUQ6ICdwaHlzaWNzOmVsZW1lbnQ6Y3JlYXRlZCcsCiAgICAgICAgU0VUOiB7CiAgICAgICAgICBQT1NJVElPTjogJ3BoeXNpY3M6ZWxlbWVudDpzZXQ6cG9zaXRpb24nLAogICAgICAgICAgUVVBVEVSTklPTjogJ3BoeXNpY3M6ZWxlbWVudDpzZXQ6cXVhdGVybmlvbicsCiAgICAgICAgICBMSU5FQVJfVkVMT0NJVFk6ICdwaHlzaWNzOmVsZW1lbnQ6c2V0OmxpbmVhcl92ZWxvY2l0eScKICAgICAgICB9LAogICAgICAgIEFQUExZOiB7CiAgICAgICAgICBJTVBVTFNFOiAncGh5c2ljczplbGVtZW50OmFwcGx5OmltcHVsc2UnCiAgICAgICAgfQogICAgICB9LAogICAgICBWRUhJQ0xFOiB7CiAgICAgICAgU0VUOiB7CiAgICAgICAgICBQT1NJVElPTjogJ3BoeXNpY3M6dmVoaWNsZTpzZXQ6cG9zaXRpb24nLAogICAgICAgICAgUVVBVEVSTklPTjogJ3BoeXNpY3M6dmVoaWNsZTpzZXQ6cXVhdGVybmlvbicKICAgICAgICB9LAogICAgICAgIFJFU0VUOiAncGh5c2ljczp2ZWhpY2xlOnJlc2V0JywKICAgICAgICBTUEVFRDogJ3BoeXNpY3M6dmVoaWNsZTpzcGVlZCcsCiAgICAgICAgRElSRUNUSU9OOiAncGh5c2ljczp2ZWhpY2xlOmRpcmVjdGlvbicKICAgICAgfSwKICAgICAgRUZGRUNUUzogewogICAgICAgIEVYUExPU0lPTjogJ3BoeXNpY3M6ZWZmZWN0czpleHBsb3Npb24nCiAgICAgIH0KICAgIH07CgogICAgZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7CiAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsKCiAgICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7CiAgICAgICAgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7CiAgICAgICAgZW51bWVyYWJsZU9ubHkgJiYgKHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7CiAgICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsKICAgICAgICB9KSksIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsKICAgICAgfQoKICAgICAgcmV0dXJuIGtleXM7CiAgICB9CgogICAgZnVuY3Rpb24gX29iamVjdFNwcmVhZDIodGFyZ2V0KSB7CiAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIHNvdXJjZSA9IG51bGwgIT0gYXJndW1lbnRzW2ldID8gYXJndW1lbnRzW2ldIDoge307CiAgICAgICAgaSAlIDIgPyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7CiAgICAgICAgICBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsKICAgICAgICB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKSA6IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgewogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7CiAgICAgICAgfSk7CiAgICAgIH0KCiAgICAgIHJldHVybiB0YXJnZXQ7CiAgICB9CgogICAgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgewogICAgICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpOwogICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsKICAgICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7CiAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOwogICAgICAgIGlmICgidmFsdWUiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOwogICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsKICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsKICAgICAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7CiAgICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbnN0cnVjdG9yLCAicHJvdG90eXBlIiwgewogICAgICAgIHdyaXRhYmxlOiBmYWxzZQogICAgICB9KTsKICAgICAgcmV0dXJuIENvbnN0cnVjdG9yOwogICAgfQoKICAgIGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsKICAgICAgaWYgKGtleSBpbiBvYmopIHsKICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsKICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICB3cml0YWJsZTogdHJ1ZQogICAgICAgIH0pOwogICAgICB9IGVsc2UgewogICAgICAgIG9ialtrZXldID0gdmFsdWU7CiAgICAgIH0KCiAgICAgIHJldHVybiBvYmo7CiAgICB9CgogICAgdmFyIERpc3BhdGNoZXIgPSBmdW5jdGlvbiBEaXNwYXRjaGVyKCkgewogICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRGlzcGF0Y2hlcik7CgogICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgInNlbmRQaHlzaWNzVXBkYXRlIiwgZnVuY3Rpb24gKGR0KSB7CiAgICAgICAgcmV0dXJuIHBvc3RNZXNzYWdlKHsKICAgICAgICAgIGV2ZW50OiBQSFlTSUNTX0VWRU5UUy5VUERBVEUsCiAgICAgICAgICBkdDogZHQKICAgICAgICB9KTsKICAgICAgfSk7CgogICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgInNlbmRSZWFkeUV2ZW50IiwgZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVybiBwb3N0TWVzc2FnZSh7CiAgICAgICAgICBldmVudDogUEhZU0lDU19FVkVOVFMuUkVBRFkKICAgICAgICB9KTsKICAgICAgfSk7CgogICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgInNlbmRUZXJtaW5hdGVFdmVudCIsIGZ1bmN0aW9uICgpIHsKICAgICAgICByZXR1cm4gcG9zdE1lc3NhZ2UoewogICAgICAgICAgZXZlbnQ6IFBIWVNJQ1NfRVZFTlRTLlRFUk1JTkFURQogICAgICAgIH0pOwogICAgICB9KTsKCiAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAic2VuZEJvZHlVcGRhdGUiLCBmdW5jdGlvbiAodXVpZCwgcG9zaXRpb24sIHJvdGF0aW9uLCBkdCwgZXh0cmFEYXRhKSB7CiAgICAgICAgcmV0dXJuIHBvc3RNZXNzYWdlKF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHsKICAgICAgICAgIGV2ZW50OiBQSFlTSUNTX0VWRU5UUy5FTEVNRU5ULlVQREFURSwKICAgICAgICAgIHV1aWQ6IHV1aWQsCiAgICAgICAgICBwb3NpdGlvbjogewogICAgICAgICAgICB4OiBwb3NpdGlvbi54KCksCiAgICAgICAgICAgIHk6IHBvc2l0aW9uLnkoKSwKICAgICAgICAgICAgejogcG9zaXRpb24ueigpCiAgICAgICAgICB9LAogICAgICAgICAgcXVhdGVybmlvbjogewogICAgICAgICAgICB4OiByb3RhdGlvbi54KCksCiAgICAgICAgICAgIHk6IHJvdGF0aW9uLnkoKSwKICAgICAgICAgICAgejogcm90YXRpb24ueigpLAogICAgICAgICAgICB3OiByb3RhdGlvbi53KCkKICAgICAgICAgIH0KICAgICAgICB9LCBleHRyYURhdGEpLCB7fSwgewogICAgICAgICAgZHQ6IGR0CiAgICAgICAgfSkpOwogICAgICB9KTsKCiAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAic2VuZERpc3BhdGNoRXZlbnQiLCBmdW5jdGlvbiAodXVpZCwgZXZlbnROYW1lLCBldmVudERhdGEpIHsKICAgICAgICByZXR1cm4gcG9zdE1lc3NhZ2UoewogICAgICAgICAgZXZlbnQ6IFBIWVNJQ1NfRVZFTlRTLkRJU1BBVENILAogICAgICAgICAgdXVpZDogdXVpZCwKICAgICAgICAgIGV2ZW50TmFtZTogZXZlbnROYW1lLAogICAgICAgICAgZXZlbnREYXRhOiBldmVudERhdGEKICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9OwogICAgdmFyIGRpc3BhdGNoZXIkMSA9IG5ldyBEaXNwYXRjaGVyKCk7CgogICAgdmFyIGFwcGx5TWF0cml4NFRvVmVjdG9yMyA9IGZ1bmN0aW9uIGFwcGx5TWF0cml4NFRvVmVjdG9yMyhfcmVmKSB7CiAgICAgIHZhciBfcmVmJHggPSBfcmVmLngsCiAgICAgICAgICB4ID0gX3JlZiR4ID09PSB2b2lkIDAgPyAwIDogX3JlZiR4LAogICAgICAgICAgX3JlZiR5ID0gX3JlZi55LAogICAgICAgICAgeSA9IF9yZWYkeSA9PT0gdm9pZCAwID8gMCA6IF9yZWYkeSwKICAgICAgICAgIF9yZWYkeiA9IF9yZWYueiwKICAgICAgICAgIHogPSBfcmVmJHogPT09IHZvaWQgMCA/IDAgOiBfcmVmJHo7CiAgICAgIHZhciBtYXRyaXggPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IFtdOwogICAgICB2YXIgdyA9IDEgLyAobWF0cml4WzNdICogeCArIG1hdHJpeFs3XSAqIHkgKyBtYXRyaXhbMTFdICogeiArIG1hdHJpeFsxNV0pOwogICAgICByZXR1cm4gewogICAgICAgIHg6IChtYXRyaXhbMF0gKiB4ICsgbWF0cml4WzRdICogeSArIG1hdHJpeFs4XSAqIHogKyBtYXRyaXhbMTJdKSAqIHcsCiAgICAgICAgeTogKG1hdHJpeFsxXSAqIHggKyBtYXRyaXhbNV0gKiB5ICsgbWF0cml4WzldICogeiArIG1hdHJpeFsxM10pICogdywKICAgICAgICB6OiAobWF0cml4WzJdICogeCArIG1hdHJpeFs2XSAqIHkgKyBtYXRyaXhbMTBdICogeiArIG1hdHJpeFsxNF0pICogdwogICAgICB9OwogICAgfTsKCiAgICB2YXIgY3JlYXRlUmlnaWRCb2R5ID0gZnVuY3Rpb24gY3JlYXRlUmlnaWRCb2R5KHNoYXBlLCBvcHRpb25zKSB7CiAgICAgIHZhciB1dWlkID0gb3B0aW9ucy51dWlkLAogICAgICAgICAgcG9zaXRpb24gPSBvcHRpb25zLnBvc2l0aW9uLAogICAgICAgICAgcXVhdGVybmlvbiA9IG9wdGlvbnMucXVhdGVybmlvbiwKICAgICAgICAgIG1hc3MgPSBvcHRpb25zLm1hc3MsCiAgICAgICAgICBmcmljdGlvbiA9IG9wdGlvbnMuZnJpY3Rpb24sCiAgICAgICAgICBfb3B0aW9ucyRyZXN0aXR1dGlvbiA9IG9wdGlvbnMucmVzdGl0dXRpb24sCiAgICAgICAgICByZXN0aXR1dGlvbiA9IF9vcHRpb25zJHJlc3RpdHV0aW9uID09PSB2b2lkIDAgPyAuOSA6IF9vcHRpb25zJHJlc3RpdHV0aW9uLAogICAgICAgICAgX29wdGlvbnMkZGFtcGluZyA9IG9wdGlvbnMuZGFtcGluZywKICAgICAgICAgIGRhbXBpbmcgPSBfb3B0aW9ucyRkYW1waW5nID09PSB2b2lkIDAgPyB7CiAgICAgICAgbGluZWFyOiAwLjIsCiAgICAgICAgYW5ndWxhcjogMC4yCiAgICAgIH0gOiBfb3B0aW9ucyRkYW1waW5nOwogICAgICB2YXIgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTsKICAgICAgdHJhbnNmb3JtLnNldElkZW50aXR5KCk7CiAgICAgIHRyYW5zZm9ybS5zZXRPcmlnaW4obmV3IEFtbW8uYnRWZWN0b3IzKHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHBvc2l0aW9uLnopKTsKICAgICAgdHJhbnNmb3JtLnNldFJvdGF0aW9uKG5ldyBBbW1vLmJ0UXVhdGVybmlvbihxdWF0ZXJuaW9uLngsIHF1YXRlcm5pb24ueSwgcXVhdGVybmlvbi56LCBxdWF0ZXJuaW9uLncpKTsKICAgICAgdmFyIG1vdGlvblN0YXRlID0gbmV3IEFtbW8uYnREZWZhdWx0TW90aW9uU3RhdGUodHJhbnNmb3JtKTsKICAgICAgdmFyIGxvY2FsSW5lcnRpYSA9IG5ldyBBbW1vLmJ0VmVjdG9yMygwLCAwLCAwKTsKICAgICAgc2hhcGUuY2FsY3VsYXRlTG9jYWxJbmVydGlhKG1hc3MsIGxvY2FsSW5lcnRpYSk7CiAgICAgIHZhciByYkluZm8gPSBuZXcgQW1tby5idFJpZ2lkQm9keUNvbnN0cnVjdGlvbkluZm8obWFzcywgbW90aW9uU3RhdGUsIHNoYXBlLCBsb2NhbEluZXJ0aWEpOwogICAgICB2YXIgYm9keSA9IG5ldyBBbW1vLmJ0UmlnaWRCb2R5KHJiSW5mbyk7CgogICAgICBpZiAobWFzcyA+IDApIHsKICAgICAgICBib2R5LnNldEZyaWN0aW9uKGZyaWN0aW9uKTsKICAgICAgICBib2R5LnNldFJlc3RpdHV0aW9uKHJlc3RpdHV0aW9uKTsKICAgICAgICBib2R5LnNldERhbXBpbmcoZGFtcGluZy5saW5lYXIsIGRhbXBpbmcuYW5ndWxhcik7CiAgICAgICAgYm9keS5zZXRBY3RpdmF0aW9uU3RhdGUoRElTQUJMRV9ERUFDVElWQVRJT04pOwogICAgICB9IC8vIHN0b3JpbmcgdXVpZCBmb3IgZnV0dXJlIHJlZmVyZW5jZQoKCiAgICAgIGJvZHkudXVpZCA9IHV1aWQ7CiAgICAgIHdvcmxkLmFkZFJpZ2lkQm9keShib2R5KTsKICAgICAgcmV0dXJuIGJvZHk7CiAgICB9OwogICAgdmFyIGFkZE1vZGVsID0gZnVuY3Rpb24gYWRkTW9kZWwob3B0aW9ucykgewogICAgICB2YXIgdXVpZCA9IG9wdGlvbnMudXVpZCwKICAgICAgICAgIHZlcnRpY2VzID0gb3B0aW9ucy52ZXJ0aWNlcywKICAgICAgICAgIG1hdHJpY2VzID0gb3B0aW9ucy5tYXRyaWNlcywKICAgICAgICAgIGluZGV4ZXMgPSBvcHRpb25zLmluZGV4ZXMsCiAgICAgICAgICBwb3NpdGlvbiA9IG9wdGlvbnMucG9zaXRpb24sCiAgICAgICAgICBxdWF0ZXJuaW9uID0gb3B0aW9ucy5xdWF0ZXJuaW9uLAogICAgICAgICAgX29wdGlvbnMkbWFzcyA9IG9wdGlvbnMubWFzcywKICAgICAgICAgIG1hc3MgPSBfb3B0aW9ucyRtYXNzID09PSB2b2lkIDAgPyAwIDogX29wdGlvbnMkbWFzcywKICAgICAgICAgIF9vcHRpb25zJGZyaWN0aW9uID0gb3B0aW9ucy5mcmljdGlvbiwKICAgICAgICAgIGZyaWN0aW9uID0gX29wdGlvbnMkZnJpY3Rpb24gPT09IHZvaWQgMCA/IDIgOiBfb3B0aW9ucyRmcmljdGlvbjsKICAgICAgdmFyIHNjYWxlID0gREVGQVVMVF9TQ0FMRTsKICAgICAgdmFyIGJ0YSA9IG5ldyBBbW1vLmJ0VmVjdG9yMygpOwogICAgICB2YXIgYnRiID0gbmV3IEFtbW8uYnRWZWN0b3IzKCk7CiAgICAgIHZhciBidGMgPSBuZXcgQW1tby5idFZlY3RvcjMoKTsKICAgICAgdmFyIHRyaU1lc2ggPSBuZXcgQW1tby5idFRyaWFuZ2xlTWVzaCh0cnVlLCBmYWxzZSk7CgogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZlcnRpY2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIGNvbXBvbmVudHMgPSB2ZXJ0aWNlc1tpXTsKICAgICAgICB2YXIgaW5kZXggPSBpbmRleGVzW2ldID8gaW5kZXhlc1tpXSA6IG51bGw7CiAgICAgICAgdmFyIG1hdHJpeCA9IEFycmF5LmZyb20obWF0cmljZXNbaV0pOwoKICAgICAgICBpZiAoaW5kZXgpIHsKICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaW5kZXgubGVuZ3RoOyBqICs9IDMpIHsKICAgICAgICAgICAgdmFyIGFpID0gaW5kZXhbal0gKiAzOwogICAgICAgICAgICB2YXIgYmkgPSBpbmRleFtqICsgMV0gKiAzOwogICAgICAgICAgICB2YXIgY2kgPSBpbmRleFtqICsgMl0gKiAzOwogICAgICAgICAgICB2YXIgdmEgPSBhcHBseU1hdHJpeDRUb1ZlY3RvcjMoewogICAgICAgICAgICAgIHg6IGNvbXBvbmVudHNbYWldLAogICAgICAgICAgICAgIHk6IGNvbXBvbmVudHNbYWkgKyAxXSwKICAgICAgICAgICAgICB6OiBjb21wb25lbnRzW2FpICsgMl0KICAgICAgICAgICAgfSwgbWF0cml4KTsKICAgICAgICAgICAgdmFyIHZiID0gYXBwbHlNYXRyaXg0VG9WZWN0b3IzKHsKICAgICAgICAgICAgICB4OiBjb21wb25lbnRzW2JpXSwKICAgICAgICAgICAgICB5OiBjb21wb25lbnRzW2JpICsgMV0sCiAgICAgICAgICAgICAgejogY29tcG9uZW50c1tiaSArIDJdCiAgICAgICAgICAgIH0sIG1hdHJpeCk7CiAgICAgICAgICAgIHZhciB2YyA9IGFwcGx5TWF0cml4NFRvVmVjdG9yMyh7CiAgICAgICAgICAgICAgeDogY29tcG9uZW50c1tjaV0sCiAgICAgICAgICAgICAgeTogY29tcG9uZW50c1tjaSArIDFdLAogICAgICAgICAgICAgIHo6IGNvbXBvbmVudHNbY2kgKyAyXQogICAgICAgICAgICB9LCBtYXRyaXgpOwogICAgICAgICAgICBidGEuc2V0VmFsdWUodmEueCwgdmEueSwgdmEueik7CiAgICAgICAgICAgIGJ0Yi5zZXRWYWx1ZSh2Yi54LCB2Yi55LCB2Yi56KTsKICAgICAgICAgICAgYnRjLnNldFZhbHVlKHZjLngsIHZjLnksIHZjLnopOwogICAgICAgICAgICB0cmlNZXNoLmFkZFRyaWFuZ2xlKGJ0YSwgYnRiLCBidGMsIGZhbHNlKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgZm9yICh2YXIgX2ogPSAwOyBfaiA8IGNvbXBvbmVudHMubGVuZ3RoOyBfaiArPSA5KSB7CiAgICAgICAgICAgIHZhciBfdmEgPSBhcHBseU1hdHJpeDRUb1ZlY3RvcjMoewogICAgICAgICAgICAgIHg6IGNvbXBvbmVudHNbX2ogKyAwXSwKICAgICAgICAgICAgICB5OiBjb21wb25lbnRzW19qICsgMV0sCiAgICAgICAgICAgICAgejogY29tcG9uZW50c1tfaiArIDJdCiAgICAgICAgICAgIH0sIG1hdHJpeCk7CgogICAgICAgICAgICB2YXIgX3ZiID0gYXBwbHlNYXRyaXg0VG9WZWN0b3IzKHsKICAgICAgICAgICAgICB4OiBjb21wb25lbnRzW19qICsgM10sCiAgICAgICAgICAgICAgeTogY29tcG9uZW50c1tfaiArIDRdLAogICAgICAgICAgICAgIHo6IGNvbXBvbmVudHNbX2ogKyA1XQogICAgICAgICAgICB9LCBtYXRyaXgpOwoKICAgICAgICAgICAgdmFyIF92YyA9IGFwcGx5TWF0cml4NFRvVmVjdG9yMyh7CiAgICAgICAgICAgICAgeDogY29tcG9uZW50c1tfaiArIDZdLAogICAgICAgICAgICAgIHk6IGNvbXBvbmVudHNbX2ogKyA3XSwKICAgICAgICAgICAgICB6OiBjb21wb25lbnRzW19qICsgOF0KICAgICAgICAgICAgfSwgbWF0cml4KTsKCiAgICAgICAgICAgIGJ0YS5zZXRWYWx1ZShfdmEueCwgX3ZhLnksIF92YS56KTsKICAgICAgICAgICAgYnRiLnNldFZhbHVlKF92Yi54LCBfdmIueSwgX3ZiLnopOwogICAgICAgICAgICBidGMuc2V0VmFsdWUoX3ZjLngsIF92Yy55LCBfdmMueik7CiAgICAgICAgICAgIHRyaU1lc2guYWRkVHJpYW5nbGUoYnRhLCBidGIsIGJ0YywgZmFsc2UpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgICAgdmFyIGxvY2FsU2NhbGUgPSBuZXcgQW1tby5idFZlY3RvcjMoc2NhbGUueCwgc2NhbGUueSwgc2NhbGUueik7CiAgICAgIHRyaU1lc2guc2V0U2NhbGluZyhsb2NhbFNjYWxlKTsKICAgICAgQW1tby5kZXN0cm95KGxvY2FsU2NhbGUpOwogICAgICB2YXIgY29sbGlzaW9uU2hhcGUgPSBuZXcgQW1tby5idEJ2aFRyaWFuZ2xlTWVzaFNoYXBlKHRyaU1lc2gsIHRydWUsIHRydWUpOwogICAgICBjb2xsaXNpb25TaGFwZS5yZXNvdXJjZXMgPSBbdHJpTWVzaF07CiAgICAgIEFtbW8uZGVzdHJveShidGEpOwogICAgICBBbW1vLmRlc3Ryb3koYnRiKTsKICAgICAgQW1tby5kZXN0cm95KGJ0Yyk7CiAgICAgIHZhciBib2R5ID0gY3JlYXRlUmlnaWRCb2R5KGNvbGxpc2lvblNoYXBlLCB7CiAgICAgICAgdXVpZDogdXVpZCwKICAgICAgICBwb3NpdGlvbjogcG9zaXRpb24sCiAgICAgICAgcXVhdGVybmlvbjogcXVhdGVybmlvbiwKICAgICAgICBtYXNzOiBtYXNzLAogICAgICAgIGZyaWN0aW9uOiBmcmljdGlvbgogICAgICB9KTsKICAgICAgd29ybGQuYWRkRWxlbWVudCh7CiAgICAgICAgdXVpZDogdXVpZCwKICAgICAgICBib2R5OiBib2R5LAogICAgICAgIHR5cGU6IFRZUEVTLk1FU0gsCiAgICAgICAgc3RhdGU6IERFRkFVTFRfUklHSURCT0RZX1NUQVRFCiAgICAgIH0pOwogICAgfTsKICAgIHZhciBhZGRCb3ggPSBmdW5jdGlvbiBhZGRCb3goZGF0YSkgewogICAgICB2YXIgdXVpZCA9IGRhdGEudXVpZCwKICAgICAgICAgIHdpZHRoID0gZGF0YS53aWR0aCwKICAgICAgICAgIGxlbmd0aCA9IGRhdGEubGVuZ3RoLAogICAgICAgICAgaGVpZ2h0ID0gZGF0YS5oZWlnaHQsCiAgICAgICAgICBwb3NpdGlvbiA9IGRhdGEucG9zaXRpb24sCiAgICAgICAgICBxdWF0ZXJuaW9uID0gZGF0YS5xdWF0ZXJuaW9uLAogICAgICAgICAgX2RhdGEkbWFzcyA9IGRhdGEubWFzcywKICAgICAgICAgIG1hc3MgPSBfZGF0YSRtYXNzID09PSB2b2lkIDAgPyAwIDogX2RhdGEkbWFzcywKICAgICAgICAgIF9kYXRhJGZyaWN0aW9uID0gZGF0YS5mcmljdGlvbiwKICAgICAgICAgIGZyaWN0aW9uID0gX2RhdGEkZnJpY3Rpb24gPT09IHZvaWQgMCA/IDIgOiBfZGF0YSRmcmljdGlvbjsKICAgICAgdmFyIGdlb21ldHJ5ID0gbmV3IEFtbW8uYnRCb3hTaGFwZShuZXcgQW1tby5idFZlY3RvcjMod2lkdGggKiAwLjUsIGhlaWdodCAqIDAuNSwgbGVuZ3RoICogMC41KSk7CiAgICAgIHZhciBib2R5ID0gY3JlYXRlUmlnaWRCb2R5KGdlb21ldHJ5LCB7CiAgICAgICAgdXVpZDogdXVpZCwKICAgICAgICBwb3NpdGlvbjogcG9zaXRpb24sCiAgICAgICAgcXVhdGVybmlvbjogcXVhdGVybmlvbiwKICAgICAgICBtYXNzOiBtYXNzLAogICAgICAgIGZyaWN0aW9uOiBmcmljdGlvbgogICAgICB9KTsKICAgICAgd29ybGQuYWRkRWxlbWVudCh7CiAgICAgICAgdXVpZDogdXVpZCwKICAgICAgICBib2R5OiBib2R5LAogICAgICAgIHR5cGU6IFRZUEVTLkJPWCwKICAgICAgICBzdGF0ZTogREVGQVVMVF9SSUdJREJPRFlfU1RBVEUKICAgICAgfSk7CiAgICB9OwogICAgdmFyIGFkZFNwaGVyZSA9IGZ1bmN0aW9uIGFkZFNwaGVyZShkYXRhKSB7CiAgICAgIHZhciB1dWlkID0gZGF0YS51dWlkLAogICAgICAgICAgcmFkaXVzID0gZGF0YS5yYWRpdXMsCiAgICAgICAgICBwb3NpdGlvbiA9IGRhdGEucG9zaXRpb24sCiAgICAgICAgICBxdWF0ZXJuaW9uID0gZGF0YS5xdWF0ZXJuaW9uLAogICAgICAgICAgX2RhdGEkbWFzczIgPSBkYXRhLm1hc3MsCiAgICAgICAgICBtYXNzID0gX2RhdGEkbWFzczIgPT09IHZvaWQgMCA/IDAgOiBfZGF0YSRtYXNzMiwKICAgICAgICAgIF9kYXRhJGZyaWN0aW9uMiA9IGRhdGEuZnJpY3Rpb24sCiAgICAgICAgICBmcmljdGlvbiA9IF9kYXRhJGZyaWN0aW9uMiA9PT0gdm9pZCAwID8gMiA6IF9kYXRhJGZyaWN0aW9uMjsKICAgICAgdmFyIGdlb21ldHJ5ID0gbmV3IEFtbW8uYnRTcGhlcmVTaGFwZShyYWRpdXMpOwogICAgICB2YXIgYm9keSA9IGNyZWF0ZVJpZ2lkQm9keShnZW9tZXRyeSwgewogICAgICAgIHV1aWQ6IHV1aWQsCiAgICAgICAgcG9zaXRpb246IHBvc2l0aW9uLAogICAgICAgIHF1YXRlcm5pb246IHF1YXRlcm5pb24sCiAgICAgICAgbWFzczogbWFzcywKICAgICAgICBmcmljdGlvbjogZnJpY3Rpb24KICAgICAgfSk7CiAgICAgIHdvcmxkLmFkZEVsZW1lbnQoewogICAgICAgIHV1aWQ6IHV1aWQsCiAgICAgICAgYm9keTogYm9keSwKICAgICAgICB0eXBlOiBUWVBFUy5TUEhFUkUsCiAgICAgICAgc3RhdGU6IERFRkFVTFRfUklHSURCT0RZX1NUQVRFCiAgICAgIH0pOwogICAgfTsKICAgIHZhciBzZXRMaW5lYXJWZWxvY2l0eSA9IGZ1bmN0aW9uIHNldExpbmVhclZlbG9jaXR5KGRhdGEpIHsKICAgICAgdmFyIHV1aWQgPSBkYXRhLnV1aWQsCiAgICAgICAgICBfZGF0YSR2ZWxvY2l0eSA9IGRhdGEudmVsb2NpdHksCiAgICAgICAgICB2ZWxvY2l0eSA9IF9kYXRhJHZlbG9jaXR5ID09PSB2b2lkIDAgPyBERUZBVUxUX0xJTkVBUl9WRUxPQ0lUWSA6IF9kYXRhJHZlbG9jaXR5OwoKICAgICAgdmFyIF93b3JsZCRnZXRFbGVtZW50ID0gd29ybGQuZ2V0RWxlbWVudCh1dWlkKSwKICAgICAgICAgIGJvZHkgPSBfd29ybGQkZ2V0RWxlbWVudC5ib2R5OwoKICAgICAgdmFyIG1vdGlvblN0YXRlID0gYm9keS5nZXRNb3Rpb25TdGF0ZSgpOwoKICAgICAgaWYgKG1vdGlvblN0YXRlKSB7CiAgICAgICAgdmFyIGxpbmVhclZlbG9jaXR5ID0gbmV3IEFtbW8uYnRWZWN0b3IzKHZlbG9jaXR5LngsIHZlbG9jaXR5LnksIHZlbG9jaXR5LnopOwogICAgICAgIGJvZHkuc2V0TGluZWFyVmVsb2NpdHkobGluZWFyVmVsb2NpdHkpOwogICAgICAgIEFtbW8uZGVzdHJveShsaW5lYXJWZWxvY2l0eSk7CiAgICAgIH0KICAgIH07CiAgICB2YXIgc2V0UG9zaXRpb24gPSBmdW5jdGlvbiBzZXRQb3NpdGlvbihkYXRhKSB7CiAgICAgIHZhciB1dWlkID0gZGF0YS51dWlkLAogICAgICAgICAgcG9zaXRpb24gPSBkYXRhLnBvc2l0aW9uOwoKICAgICAgdmFyIF93b3JsZCRnZXRFbGVtZW50MiA9IHdvcmxkLmdldEVsZW1lbnQodXVpZCksCiAgICAgICAgICBib2R5ID0gX3dvcmxkJGdldEVsZW1lbnQyLmJvZHk7CgogICAgICB2YXIgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTsKICAgICAgYm9keS5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgICB0cmFuc2Zvcm0uc2V0T3JpZ2luKG5ldyBBbW1vLmJ0VmVjdG9yMyhwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56KSk7CiAgICAgIGJvZHkuc2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKICAgIH07CiAgICB2YXIgYXBwbHlJbXB1c2UgPSBmdW5jdGlvbiBhcHBseUltcHVzZShfcmVmKSB7CiAgICAgIHZhciB1dWlkID0gX3JlZi51dWlkLAogICAgICAgICAgX3JlZiRpbXB1bHNlID0gX3JlZi5pbXB1bHNlLAogICAgICAgICAgaW1wdWxzZSA9IF9yZWYkaW1wdWxzZSA9PT0gdm9pZCAwID8gREVGQVVMVF9JTVBVTFNFIDogX3JlZiRpbXB1bHNlOwoKICAgICAgdmFyIF93b3JsZCRnZXRFbGVtZW50MyA9IHdvcmxkLmdldEVsZW1lbnQodXVpZCksCiAgICAgICAgICBib2R5ID0gX3dvcmxkJGdldEVsZW1lbnQzLmJvZHk7CgogICAgICB2YXIgbW90aW9uU3RhdGUgPSBib2R5LmdldE1vdGlvblN0YXRlKCk7CgogICAgICBpZiAobW90aW9uU3RhdGUpIHsKICAgICAgICB2YXIgaW1wdWxzZVZlY3RvciA9IG5ldyBBbW1vLmJ0VmVjdG9yMyhpbXB1bHNlLngsIGltcHVsc2UueSwgaW1wdWxzZS56KTsKICAgICAgICBib2R5LmFwcGx5Q2VudHJhbEltcHVsc2UoaW1wdWxzZVZlY3Rvcik7CiAgICAgICAgQW1tby5kZXN0cm95KGltcHVsc2VWZWN0b3IpOwogICAgICB9CiAgICB9OwogICAgdmFyIGhhbmRsZUVsZW1lbnRVcGRhdGUgPSBmdW5jdGlvbiBoYW5kbGVFbGVtZW50VXBkYXRlKF9yZWYyLCBkdCkgewogICAgICB2YXIgYm9keSA9IF9yZWYyLmJvZHksCiAgICAgICAgICB1dWlkID0gX3JlZjIudXVpZCwKICAgICAgICAgIF9yZWYyJHN0YXRlID0gX3JlZjIuc3RhdGU7CiAgICAgIHZhciBtb3Rpb25TdGF0ZSA9IGJvZHkuZ2V0TW90aW9uU3RhdGUoKTsKCiAgICAgIGlmIChtb3Rpb25TdGF0ZSkgewogICAgICAgIHZhciB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpOwogICAgICAgIG1vdGlvblN0YXRlLmdldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7CiAgICAgICAgdmFyIG9yaWdpbiA9IHRyYW5zZm9ybS5nZXRPcmlnaW4oKTsKICAgICAgICB2YXIgcm90YXRpb24gPSB0cmFuc2Zvcm0uZ2V0Um90YXRpb24oKTsKICAgICAgICBkaXNwYXRjaGVyJDEuc2VuZEJvZHlVcGRhdGUodXVpZCwgb3JpZ2luLCByb3RhdGlvbiwgZHQpOwogICAgICAgIEFtbW8uZGVzdHJveSh0cmFuc2Zvcm0pOwogICAgICB9CiAgICB9OwoKICAgIHZhciBhZGRQbGF5ZXIgPSBmdW5jdGlvbiBhZGRQbGF5ZXIoZGF0YSkgewogICAgICB2YXIgdXVpZCA9IGRhdGEudXVpZCwKICAgICAgICAgIHdpZHRoID0gZGF0YS53aWR0aCwKICAgICAgICAgIGhlaWdodCA9IGRhdGEuaGVpZ2h0LAogICAgICAgICAgcG9zaXRpb24gPSBkYXRhLnBvc2l0aW9uLAogICAgICAgICAgcXVhdGVybmlvbiA9IGRhdGEucXVhdGVybmlvbiwKICAgICAgICAgIG1hc3MgPSBkYXRhLm1hc3MsCiAgICAgICAgICBmcmljdGlvbiA9IGRhdGEuZnJpY3Rpb247CiAgICAgIHZhciBjYXBzdWxlID0gbmV3IEFtbW8uYnRDYXBzdWxlU2hhcGUod2lkdGgsIGhlaWdodCk7CiAgICAgIHZhciBib2R5ID0gY3JlYXRlUmlnaWRCb2R5KGNhcHN1bGUsIHsKICAgICAgICB1dWlkOiB1dWlkLAogICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbiwKICAgICAgICBxdWF0ZXJuaW9uOiBxdWF0ZXJuaW9uLAogICAgICAgIG1hc3M6IG1hc3MsCiAgICAgICAgZnJpY3Rpb246IGZyaWN0aW9uCiAgICAgIH0pOyAvLyBkaXNhYmxpaW5nIHJvdGF0aW9uIGZvciBjb2xsaXNpb25zCgogICAgICBib2R5LnNldEFuZ3VsYXJGYWN0b3IoMCk7CiAgICAgIHdvcmxkLmFkZFJpZ2lkQm9keShib2R5KTsKICAgICAgd29ybGQuYWRkRWxlbWVudCh7CiAgICAgICAgdXVpZDogdXVpZCwKICAgICAgICBib2R5OiBib2R5LAogICAgICAgIHR5cGU6IFRZUEVTLlBMQVlFUiwKICAgICAgICBzdGF0ZTogREVGQVVMVF9SSUdJREJPRFlfU1RBVEUKICAgICAgfSk7CiAgICB9OwogICAgdmFyIGhhbmRsZVBsYXllclVwZGF0ZSA9IGZ1bmN0aW9uIGhhbmRsZVBsYXllclVwZGF0ZShfcmVmLCBkdCkgewogICAgICB2YXIgYm9keSA9IF9yZWYuYm9keSwKICAgICAgICAgIHV1aWQgPSBfcmVmLnV1aWQsCiAgICAgICAgICBfcmVmJHN0YXRlID0gX3JlZi5zdGF0ZSwKICAgICAgICAgIHN0YXRlID0gX3JlZiRzdGF0ZSA9PT0gdm9pZCAwID8gREVGQVVMVF9SSUdJREJPRFlfU1RBVEUgOiBfcmVmJHN0YXRlOwogICAgICB2YXIgbW92ZW1lbnQgPSBzdGF0ZS5tb3ZlbWVudCwKICAgICAgICAgIGRpcmVjdGlvbiA9IHN0YXRlLmRpcmVjdGlvbiwKICAgICAgICAgIGNhbWVyYURpcmVjdGlvbiA9IHN0YXRlLmNhbWVyYURpcmVjdGlvbiwKICAgICAgICAgIHF1YXRlcm5pb24gPSBzdGF0ZS5xdWF0ZXJuaW9uLAogICAgICAgICAgcG9zaXRpb24gPSBzdGF0ZS5wb3NpdGlvbjsKICAgICAgdmFyIE1BWF9TUEVFRCA9IDE7CiAgICAgIHZhciB3YWxrVmVsb2NpdHkgPSAuMTsKICAgICAgdmFyIG1vdGlvblN0YXRlID0gYm9keS5nZXRNb3Rpb25TdGF0ZSgpOwoKICAgICAgaWYgKG1vdGlvblN0YXRlKSB7CiAgICAgICAgdmFyIHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7CiAgICAgICAgbW90aW9uU3RhdGUuZ2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKICAgICAgICB2YXIgbGluZWFyVmVsb2NpdHkgPSBib2R5LmdldExpbmVhclZlbG9jaXR5KCk7CiAgICAgICAgdmFyIHNwZWVkID0gbGluZWFyVmVsb2NpdHkubGVuZ3RoKCk7CiAgICAgICAgdmFyIGZvcndhcmREaXIgPSB0cmFuc2Zvcm0uZ2V0QmFzaXMoKS5nZXRSb3coMik7CiAgICAgICAgZm9yd2FyZERpci5ub3JtYWxpemUoKTsKICAgICAgICB2YXIgd2Fsa0RpcmVjdGlvbiA9IG5ldyBBbW1vLmJ0VmVjdG9yMygwLjAsIDAuMCwgMC4wKTsKICAgICAgICB2YXIgd2Fsa1NwZWVkID0gd2Fsa1ZlbG9jaXR5ICogZHQ7CgogICAgICAgIGlmIChtb3ZlbWVudC5mb3J3YXJkKSB7CiAgICAgICAgICB3YWxrRGlyZWN0aW9uLnNldFgod2Fsa0RpcmVjdGlvbi54KCkgKyBmb3J3YXJkRGlyLngoKSk7IC8vd2Fsa0RpcmVjdGlvbi5zZXRZKCB3YWxrRGlyZWN0aW9uLnkoKSArIGZvcndhcmREaXIueSgpKTsKCiAgICAgICAgICB3YWxrRGlyZWN0aW9uLnNldFood2Fsa0RpcmVjdGlvbi56KCkgKyBmb3J3YXJkRGlyLnooKSk7CiAgICAgICAgfQoKICAgICAgICBpZiAobW92ZW1lbnQuYmFja3dhcmRzKSB7CiAgICAgICAgICB3YWxrRGlyZWN0aW9uLnNldFgod2Fsa0RpcmVjdGlvbi54KCkgLSBmb3J3YXJkRGlyLngoKSk7IC8vd2Fsa0RpcmVjdGlvbi5zZXRZKCB3YWxrRGlyZWN0aW9uLnkoKSAtIGZvcndhcmREaXIueSgpKTsKCiAgICAgICAgICB3YWxrRGlyZWN0aW9uLnNldFood2Fsa0RpcmVjdGlvbi56KCkgLSBmb3J3YXJkRGlyLnooKSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoIW1vdmVtZW50LmZvcndhcmQgJiYgIW1vdmVtZW50LmJhY2t3YXJkcykgewogICAgICAgICAgbGluZWFyVmVsb2NpdHkuc2V0WChsaW5lYXJWZWxvY2l0eS54KCkgKiAwLjIpOwogICAgICAgICAgbGluZWFyVmVsb2NpdHkuc2V0WihsaW5lYXJWZWxvY2l0eS56KCkgKiAwLjIpOwogICAgICAgIH0gZWxzZSBpZiAoc3BlZWQgPCBNQVhfU1BFRUQpIHsKICAgICAgICAgIGxpbmVhclZlbG9jaXR5LnNldFgobGluZWFyVmVsb2NpdHkueCgpICsgY2FtZXJhRGlyZWN0aW9uLnggKiB3YWxrU3BlZWQpOwogICAgICAgICAgbGluZWFyVmVsb2NpdHkuc2V0WihsaW5lYXJWZWxvY2l0eS56KCkgKyBjYW1lcmFEaXJlY3Rpb24ueiAqIHdhbGtTcGVlZCk7CiAgICAgICAgfQoKICAgICAgICBib2R5LnNldExpbmVhclZlbG9jaXR5KGxpbmVhclZlbG9jaXR5KTsKICAgICAgICBib2R5LmdldE1vdGlvblN0YXRlKCkuc2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKICAgICAgICBib2R5LnNldENlbnRlck9mTWFzc1RyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgICAgIHZhciBvcmlnaW4gPSB0cmFuc2Zvcm0uZ2V0T3JpZ2luKCk7CiAgICAgICAgdmFyIHJvdGF0aW9uID0gdHJhbnNmb3JtLmdldFJvdGF0aW9uKCk7CiAgICAgICAgZGlzcGF0Y2hlci5zZW5kQm9keVVwZGF0ZSh1dWlkLCBvcmlnaW4sIHJvdGF0aW9uLCBkdCk7CiAgICAgIH0KICAgIH07CgogICAgdmFyIENsb2NrID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHsKICAgICAgZnVuY3Rpb24gQ2xvY2soKSB7CiAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENsb2NrKTsKCiAgICAgICAgdGhpcy50aW1lc3RhbXAgPSBudWxsOwogICAgICB9CgogICAgICBfY3JlYXRlQ2xhc3MoQ2xvY2ssIFt7CiAgICAgICAga2V5OiAiZ2V0RGVsdGEiLAogICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXREZWx0YSgpIHsKICAgICAgICAgIHZhciB0aW1lID0gRGF0ZS5ub3coKTsKCiAgICAgICAgICBpZiAodGhpcy50aW1lc3RhbXApIHsKICAgICAgICAgICAgdmFyIGRlbHRhID0gdGltZSAtIHRoaXMudGltZXN0YW1wOwogICAgICAgICAgICB0aGlzLnRpbWVzdGFtcCA9IHRpbWU7CiAgICAgICAgICAgIHJldHVybiBkZWx0YTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMudGltZXN0YW1wID0gdGltZTsKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9XSk7CgogICAgICByZXR1cm4gQ2xvY2s7CiAgICB9KCk7CgogICAgdmFyIFdvcmxkID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHsKICAgICAgZnVuY3Rpb24gV29ybGQoKSB7CiAgICAgICAgdmFyIF90aGlzID0gdGhpczsKCiAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFdvcmxkKTsKCiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJpbml0IiwgZnVuY3Rpb24gKG9wdGlvbnMpIHsKICAgICAgICAgIHZhciBfb3B0aW9ucyRncmF2aXR5ID0gb3B0aW9ucy5ncmF2aXR5LAogICAgICAgICAgICAgIGdyYXZpdHkgPSBfb3B0aW9ucyRncmF2aXR5ID09PSB2b2lkIDAgPyBHUkFWSVRZIDogX29wdGlvbnMkZ3Jhdml0eTsKICAgICAgICAgIF90aGlzLmNvbGxpc2lvbkNvbmZpZ3VyYXRpb24gPSBuZXcgQW1tby5idERlZmF1bHRDb2xsaXNpb25Db25maWd1cmF0aW9uKCk7CiAgICAgICAgICBfdGhpcy5kaXNwYXRjaGVyID0gbmV3IEFtbW8uYnRDb2xsaXNpb25EaXNwYXRjaGVyKF90aGlzLmNvbGxpc2lvbkNvbmZpZ3VyYXRpb24pOwogICAgICAgICAgX3RoaXMuYnJvYWRwaGFzZSA9IG5ldyBBbW1vLmJ0RGJ2dEJyb2FkcGhhc2UoKTsKICAgICAgICAgIF90aGlzLnNvbHZlciA9IG5ldyBBbW1vLmJ0U2VxdWVudGlhbEltcHVsc2VDb25zdHJhaW50U29sdmVyKCk7CiAgICAgICAgICBfdGhpcy5keW5hbWljc1dvcmxkID0gbmV3IEFtbW8uYnREaXNjcmV0ZUR5bmFtaWNzV29ybGQoX3RoaXMuZGlzcGF0Y2hlciwgX3RoaXMuYnJvYWRwaGFzZSwgX3RoaXMuc29sdmVyLCBfdGhpcy5jb2xsaXNpb25Db25maWd1cmF0aW9uKTsKCiAgICAgICAgICBfdGhpcy5keW5hbWljc1dvcmxkLnNldEdyYXZpdHkobmV3IEFtbW8uYnRWZWN0b3IzKGdyYXZpdHkueCwgZ3Jhdml0eS55LCBncmF2aXR5LnopKTsgLy8gdGhpcyBpcyBuZWVkZWQgZm9yIGdob3N0T2JqZWN0IGNvbGxpc2lvbnMKCgogICAgICAgICAgX3RoaXMuZHluYW1pY3NXb3JsZC5nZXRCcm9hZHBoYXNlKCkuZ2V0T3ZlcmxhcHBpbmdQYWlyQ2FjaGUoKS5zZXRJbnRlcm5hbEdob3N0UGFpckNhbGxiYWNrKG5ldyBBbW1vLmJ0R2hvc3RQYWlyQ2FsbGJhY2soKSk7CgogICAgICAgICAgX3RoaXMuaW5pdGlhbGlzZWQgPSB0cnVlOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgInJlbW92ZUVsZW1lbnQiLCBmdW5jdGlvbiAodXVpZCkgewogICAgICAgICAgaWYgKF90aGlzLmhhc0VsZW1lbnQodXVpZCkpIHsKICAgICAgICAgICAgX3RoaXMuZWxlbWVudHNbdXVpZF0uZGVsZXRlZCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAicmVtb3ZlRGVsZXRlZEVsZW1lbnRzIiwgZnVuY3Rpb24gKCkgewogICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKF90aGlzLmVsZW1lbnRzKS5maWx0ZXIoZnVuY3Rpb24gKHV1aWQpIHsKICAgICAgICAgICAgcmV0dXJuIF90aGlzLmVsZW1lbnRzW3V1aWRdLmRlbGV0ZWQ7CiAgICAgICAgICB9KS5mb3JFYWNoKGZ1bmN0aW9uICh1dWlkKSB7CiAgICAgICAgICAgIGRlbGV0ZSBfdGhpcy5lbGVtZW50c1t1dWlkXTsKICAgICAgICAgIH0pOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgImhhc0VsZW1lbnQiLCBmdW5jdGlvbiAodXVpZCkgewogICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKF90aGlzLmVsZW1lbnRzKS5pbmNsdWRlcyh1dWlkKTsKICAgICAgICB9KTsKCiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJnZXRFbGVtZW50IiwgZnVuY3Rpb24gKHV1aWQpIHsKICAgICAgICAgIHJldHVybiBfdGhpcy5lbGVtZW50c1t1dWlkXTsKICAgICAgICB9KTsKCiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJpc0luaXRpYWxpc2VkIiwgZnVuY3Rpb24gKCkgewogICAgICAgICAgcmV0dXJuIF90aGlzLmluaXRpYWxpc2VkOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgImdldER5bmFtaWNzV29ybGQiLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gX3RoaXMuZHluYW1pY3NXb3JsZDsKICAgICAgICB9KTsKCiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJhZGRSaWdpZEJvZHkiLCBmdW5jdGlvbiAoYm9keSkgewogICAgICAgICAgX3RoaXMuZHluYW1pY3NXb3JsZC5hZGRSaWdpZEJvZHkoYm9keSk7CiAgICAgICAgfSk7CgogICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiYWRkQWN0aW9uIiwgZnVuY3Rpb24gKGFjdGlvbikgewogICAgICAgICAgX3RoaXMuZHluYW1pY3NXb3JsZC5hZGRBY3Rpb24oYWN0aW9uKTsKICAgICAgICB9KTsKCiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJhZGRDb2xsaXNpb25PYmplY3QiLCBmdW5jdGlvbiAoY29sbGlzaW9uT2JqZWN0KSB7CiAgICAgICAgICBfdGhpcy5keW5hbWljc1dvcmxkLmFkZENvbGxpc2lvbk9iamVjdChjb2xsaXNpb25PYmplY3QpOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgInN0ZXBTaW11bGF0aW9uIiwgZnVuY3Rpb24gKGR0KSB7CiAgICAgICAgICBfdGhpcy5keW5hbWljc1dvcmxkLnN0ZXBTaW11bGF0aW9uKGR0KTsKICAgICAgICB9KTsKCiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJzaW11bGF0ZSIsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBkdCA9IF90aGlzLmNsb2NrLmdldERlbHRhKCk7CgogICAgICAgICAgX3RoaXMuc3RlcFNpbXVsYXRpb24oZHQpOwoKICAgICAgICAgIE9iamVjdC5rZXlzKF90aGlzLmVsZW1lbnRzKS5mb3JFYWNoKGZ1bmN0aW9uICh1dWlkKSB7CiAgICAgICAgICAgIHZhciBlbGVtZW50ID0gX3RoaXMuZ2V0RWxlbWVudCh1dWlkKTsKCiAgICAgICAgICAgIGlmIChlbGVtZW50KSB7CiAgICAgICAgICAgICAgc3dpdGNoIChlbGVtZW50LnR5cGUpIHsKICAgICAgICAgICAgICAgIGNhc2UgVFlQRVMuQk9YOgogICAgICAgICAgICAgICAgY2FzZSBUWVBFUy5TUEhFUkU6CiAgICAgICAgICAgICAgICBjYXNlIFRZUEVTLk1FU0g6CiAgICAgICAgICAgICAgICAgIGhhbmRsZUVsZW1lbnRVcGRhdGUoZWxlbWVudCwgZHQpOwogICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIFRZUEVTLlBMQVlFUjoKICAgICAgICAgICAgICAgICAgaGFuZGxlUGxheWVyVXBkYXRlKGVsZW1lbnQsIGR0KTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSBUWVBFUy5WRUhJQ0xFOgogICAgICAgICAgICAgICAgICBoYW5kbGVWZWhpY2xlVXBkYXRlKGVsZW1lbnQsIGR0KTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKCiAgICAgICAgICBfdGhpcy5jYWxjdWxhdGVDb2xsaXNpb25zKCk7CgogICAgICAgICAgX3RoaXMucmVtb3ZlRGVsZXRlZEVsZW1lbnRzKCk7CgogICAgICAgICAgZGlzcGF0Y2hlciQxLnNlbmRQaHlzaWNzVXBkYXRlKGR0KTsKICAgICAgICAgIF90aGlzLnJlcXVlc3RBbmltYXRpb25GcmFtZUlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKF90aGlzLnNpbXVsYXRlLmJpbmQoX3RoaXMpKTsKICAgICAgICB9KTsKCiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJjYWxjdWxhdGVDb2xsaXNpb25zIiwgZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIGFtbW9EaXNwYXRjaGVyID0gX3RoaXMuZHluYW1pY3NXb3JsZC5nZXREaXNwYXRjaGVyKCk7CgogICAgICAgICAgdmFyIG51bU1hbmlmb2xkcyA9IGFtbW9EaXNwYXRjaGVyLmdldE51bU1hbmlmb2xkcygpOwoKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtTWFuaWZvbGRzOyBpKyspIHsKICAgICAgICAgICAgdmFyIGNvbnRhY3RNYW5pZm9sZCA9IGFtbW9EaXNwYXRjaGVyLmdldE1hbmlmb2xkQnlJbmRleEludGVybmFsKGkpOwogICAgICAgICAgICB2YXIgcmIwID0gQW1tby5jYXN0T2JqZWN0KGNvbnRhY3RNYW5pZm9sZC5nZXRCb2R5MCgpLCBBbW1vLmJ0UmlnaWRCb2R5KTsKICAgICAgICAgICAgdmFyIHJiMSA9IEFtbW8uY2FzdE9iamVjdChjb250YWN0TWFuaWZvbGQuZ2V0Qm9keTEoKSwgQW1tby5idFJpZ2lkQm9keSk7CiAgICAgICAgICAgIHZhciBudW1Db250YWN0cyA9IGNvbnRhY3RNYW5pZm9sZC5nZXROdW1Db250YWN0cygpOyAvLyB0aGlzIGl0ZXJhdGlvbiBkb2Vzbid0IGhhdmUgdXVpZHMKCiAgICAgICAgICAgIGlmICghcmIwLnV1aWQgfHwgIXJiMS51dWlkKSBjb250aW51ZTsKICAgICAgICAgICAgdmFyIGNvbnRhY3RzID0gW107CgogICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG51bUNvbnRhY3RzOyBqKyspIHsKICAgICAgICAgICAgICB2YXIgY29udGFjdFBvaW50ID0gY29udGFjdE1hbmlmb2xkLmdldENvbnRhY3RQb2ludChqKTsKICAgICAgICAgICAgICB2YXIgZGlzdGFuY2UgPSBjb250YWN0UG9pbnQuZ2V0RGlzdGFuY2UoKTsKICAgICAgICAgICAgICBpZiAoZGlzdGFuY2UgPiAwLjApIGNvbnRpbnVlOwogICAgICAgICAgICAgIHZhciB2ZWxvY2l0eTAgPSByYjAuZ2V0TGluZWFyVmVsb2NpdHkoKTsKICAgICAgICAgICAgICB2YXIgdmVsb2NpdHkxID0gcmIxLmdldExpbmVhclZlbG9jaXR5KCk7CiAgICAgICAgICAgICAgdmFyIHdvcmxkUG9zMCA9IGNvbnRhY3RQb2ludC5nZXRfbV9wb3NpdGlvbldvcmxkT25BKCk7CiAgICAgICAgICAgICAgdmFyIHdvcmxkUG9zMSA9IGNvbnRhY3RQb2ludC5nZXRfbV9wb3NpdGlvbldvcmxkT25CKCk7CiAgICAgICAgICAgICAgdmFyIGxvY2FsUG9zMCA9IGNvbnRhY3RQb2ludC5nZXRfbV9sb2NhbFBvaW50QSgpOwogICAgICAgICAgICAgIHZhciBsb2NhbFBvczEgPSBjb250YWN0UG9pbnQuZ2V0X21fbG9jYWxQb2ludEIoKTsKICAgICAgICAgICAgICBjb250YWN0cy5wdXNoKHsKICAgICAgICAgICAgICAgIGRpc3RhbmNlOiBkaXN0YW5jZSwKICAgICAgICAgICAgICAgIGVsZW1lbnRzOiBbewogICAgICAgICAgICAgICAgICB1dWlkOiByYjAudXVpZCwKICAgICAgICAgICAgICAgICAgdmVsb2NpdHk6IHsKICAgICAgICAgICAgICAgICAgICB4OiB2ZWxvY2l0eTAueCgpLAogICAgICAgICAgICAgICAgICAgIHk6IHZlbG9jaXR5MC55KCksCiAgICAgICAgICAgICAgICAgICAgejogdmVsb2NpdHkwLnooKQogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICB3b3JsZFBvczogewogICAgICAgICAgICAgICAgICAgIHg6IHdvcmxkUG9zMC54KCksCiAgICAgICAgICAgICAgICAgICAgeTogd29ybGRQb3MwLnkoKSwKICAgICAgICAgICAgICAgICAgICB6OiB3b3JsZFBvczAueigpCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIGxvY2FsUG9zOiB7CiAgICAgICAgICAgICAgICAgICAgeDogbG9jYWxQb3MwLngoKSwKICAgICAgICAgICAgICAgICAgICB5OiBsb2NhbFBvczAueSgpLAogICAgICAgICAgICAgICAgICAgIHo6IGxvY2FsUG9zMC56KCkKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICB1dWlkOiByYjEudXVpZCwKICAgICAgICAgICAgICAgICAgdmVsb2NpdHk6IHsKICAgICAgICAgICAgICAgICAgICB4OiB2ZWxvY2l0eTEueCgpLAogICAgICAgICAgICAgICAgICAgIHk6IHZlbG9jaXR5MS55KCksCiAgICAgICAgICAgICAgICAgICAgejogdmVsb2NpdHkxLnooKQogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICB3b3JsZFBvczogewogICAgICAgICAgICAgICAgICAgIHg6IHdvcmxkUG9zMS54KCksCiAgICAgICAgICAgICAgICAgICAgeTogd29ybGRQb3MxLnkoKSwKICAgICAgICAgICAgICAgICAgICB6OiB3b3JsZFBvczEueigpCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIGxvY2FsUG9zOiB7CiAgICAgICAgICAgICAgICAgICAgeDogbG9jYWxQb3MxLngoKSwKICAgICAgICAgICAgICAgICAgICB5OiBsb2NhbFBvczEueSgpLAogICAgICAgICAgICAgICAgICAgIHo6IGxvY2FsUG9zMS56KCkKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfV0KICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZGlzcGF0Y2hlciQxLnNlbmREaXNwYXRjaEV2ZW50KHJiMC51dWlkLCBQSFlTSUNTX0VWRU5UUy5FTEVNRU5ULkNPTExJU0lPTiwgewogICAgICAgICAgICAgIGNvbnRhY3RzOiBjb250YWN0cwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgZGlzcGF0Y2hlciQxLnNlbmREaXNwYXRjaEV2ZW50KHJiMS51dWlkLCBQSFlTSUNTX0VWRU5UUy5FTEVNRU5ULkNPTExJU0lPTiwgewogICAgICAgICAgICAgIGNvbnRhY3RzOiBjb250YWN0cwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJhZGRFbGVtZW50IiwgZnVuY3Rpb24gKGRhdGEpIHsKICAgICAgICAgIF90aGlzLmVsZW1lbnRzW2RhdGEudXVpZF0gPSBkYXRhOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgInVwZGF0ZUJvZHlTdGF0ZSIsIGZ1bmN0aW9uIChfcmVmKSB7CiAgICAgICAgICB2YXIgdXVpZCA9IF9yZWYudXVpZCwKICAgICAgICAgICAgICBzdGF0ZSA9IF9yZWYuc3RhdGU7CgogICAgICAgICAgaWYgKF90aGlzLmhhc0VsZW1lbnQodXVpZCkpIHsKICAgICAgICAgICAgX3RoaXMuZWxlbWVudHNbdXVpZF0uc3RhdGUgPSBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgX3RoaXMuZWxlbWVudHNbdXVpZF0uc3RhdGUpLCBzdGF0ZSk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAidGVybWluYXRlIiwgZnVuY3Rpb24gKCkgewogICAgICAgICAgQW1tby5kZXN0cm95KF90aGlzLmR5bmFtaWNzV29ybGQpOwogICAgICAgICAgQW1tby5kZXN0cm95KF90aGlzLnNvbHZlcik7CiAgICAgICAgICBBbW1vLmRlc3Ryb3koX3RoaXMuZGlzcGF0Y2hlcik7CiAgICAgICAgICBBbW1vLmRlc3Ryb3koX3RoaXMuY29sbGlzaW9uQ29uZmlndXJhdGlvbik7CiAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShfdGhpcy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZCk7CiAgICAgICAgICBkaXNwYXRjaGVyJDEuc2VuZFRlcm1pbmF0ZUV2ZW50KCk7CiAgICAgICAgfSk7CgogICAgICAgIHRoaXMuZWxlbWVudHMgPSB7fTsKICAgICAgICB0aGlzLmluaXRpYWxpc2VkID0gZmFsc2U7CiAgICAgICAgdGhpcy5jb2xsaXNpb25Db25maWd1cmF0aW9uID0gdW5kZWZpbmVkOwogICAgICAgIHRoaXMuZGlzcGF0Y2hlciA9IHVuZGVmaW5lZDsKICAgICAgICB0aGlzLmJyb2FkcGhhc2UgPSB1bmRlZmluZWQ7CiAgICAgICAgdGhpcy5zb2x2ZXIgPSB1bmRlZmluZWQ7CiAgICAgICAgdGhpcy5keW5hbWljc1dvcmxkID0gdW5kZWZpbmVkOwogICAgICAgIHRoaXMucmVxdWVzdEFuaW1hdGlvbkZyYW1lSWQgPSBudWxsOwogICAgICAgIHRoaXMuY2xvY2sgPSBuZXcgQ2xvY2soKTsKICAgICAgfQoKICAgICAgX2NyZWF0ZUNsYXNzKFdvcmxkLCBbewogICAgICAgIGtleTogImRpc3Bvc2VCb2R5IiwKICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZGlzcG9zZUJvZHkoX3JlZjIpIHsKICAgICAgICAgIHZhciB1dWlkID0gX3JlZjIudXVpZDsKICAgICAgICAgIHZhciBlbGVtZW50ID0gdGhpcy5nZXRFbGVtZW50KHV1aWQpOwogICAgICAgICAgdGhpcy5keW5hbWljc1dvcmxkLnJlbW92ZVJpZ2lkQm9keShlbGVtZW50LmJvZHkpOwogICAgICAgICAgdGhpcy5yZW1vdmVFbGVtZW50KHV1aWQpOwogICAgICAgICAgZGlzcGF0Y2hlciQxLnNlbmRFbGVtZW50RGlzcG9zZWQoewogICAgICAgICAgICB1dWlkOiB1dWlkCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH1dKTsKCiAgICAgIHJldHVybiBXb3JsZDsKICAgIH0oKTsKICAgIHZhciB3b3JsZCA9IG5ldyBXb3JsZCgpOwoKICAgIHZhciBERUZBVUxUX1JPTExfSU5GTFVFTkNFID0gMC4yOwogICAgdmFyIERFRkFVTFRfRlJJQ1RJT04gPSAxMDAwOwogICAgdmFyIERFRkFVTFRfTUFTUyA9IDgwMDsKICAgIHZhciBhZGRWZWhpY2xlID0gZnVuY3Rpb24gYWRkVmVoaWNsZShkYXRhKSB7CiAgICAgIHZhciBwb3NpdGlvbiA9IGRhdGEucG9zaXRpb24sCiAgICAgICAgICBxdWF0ZXJuaW9uID0gZGF0YS5xdWF0ZXJuaW9uLAogICAgICAgICAgdXVpZCA9IGRhdGEudXVpZCwKICAgICAgICAgIHdoZWVscyA9IGRhdGEud2hlZWxzLAogICAgICAgICAgX2RhdGEkbWFzcyA9IGRhdGEubWFzcywKICAgICAgICAgIG1hc3MgPSBfZGF0YSRtYXNzID09PSB2b2lkIDAgPyBERUZBVUxUX01BU1MgOiBfZGF0YSRtYXNzLAogICAgICAgICAgX2RhdGEkd2lkdGggPSBkYXRhLndpZHRoLAogICAgICAgICAgd2lkdGggPSBfZGF0YSR3aWR0aCA9PT0gdm9pZCAwID8gMS44IDogX2RhdGEkd2lkdGgsCiAgICAgICAgICBfZGF0YSRoZWlnaHQgPSBkYXRhLmhlaWdodCwKICAgICAgICAgIGhlaWdodCA9IF9kYXRhJGhlaWdodCA9PT0gdm9pZCAwID8gLjYgOiBfZGF0YSRoZWlnaHQsCiAgICAgICAgICBfZGF0YSRsZW5ndGggPSBkYXRhLmxlbmd0aCwKICAgICAgICAgIGxlbmd0aCA9IF9kYXRhJGxlbmd0aCA9PT0gdm9pZCAwID8gNCA6IF9kYXRhJGxlbmd0aCwKICAgICAgICAgIF9kYXRhJGZyaWN0aW9uID0gZGF0YS5mcmljdGlvbiwKICAgICAgICAgIGZyaWN0aW9uID0gX2RhdGEkZnJpY3Rpb24gPT09IHZvaWQgMCA/IERFRkFVTFRfRlJJQ1RJT04gOiBfZGF0YSRmcmljdGlvbiwKICAgICAgICAgIF9kYXRhJHJvbGxJbmZsdWVuY2UgPSBkYXRhLnJvbGxJbmZsdWVuY2UsCiAgICAgICAgICByb2xsSW5mbHVlbmNlID0gX2RhdGEkcm9sbEluZmx1ZW5jZSA9PT0gdm9pZCAwID8gREVGQVVMVF9ST0xMX0lORkxVRU5DRSA6IF9kYXRhJHJvbGxJbmZsdWVuY2UsCiAgICAgICAgICBfZGF0YSR3aGVlbHNPcHRpb25zID0gZGF0YS53aGVlbHNPcHRpb25zLAogICAgICAgICAgd2hlZWxzT3B0aW9ucyA9IF9kYXRhJHdoZWVsc09wdGlvbnMgPT09IHZvaWQgMCA/IHt9IDogX2RhdGEkd2hlZWxzT3B0aW9ucywKICAgICAgICAgIF9kYXRhJHN1c3BlbnNpb25zID0gZGF0YS5zdXNwZW5zaW9ucywKICAgICAgICAgIHN1c3BlbnNpb25zID0gX2RhdGEkc3VzcGVuc2lvbnMgPT09IHZvaWQgMCA/IHt9IDogX2RhdGEkc3VzcGVuc2lvbnM7CiAgICAgIHZhciBfd2hlZWxzT3B0aW9ucyRiYWNrID0gd2hlZWxzT3B0aW9ucy5iYWNrLAogICAgICAgICAgYmFjayA9IF93aGVlbHNPcHRpb25zJGJhY2sgPT09IHZvaWQgMCA/IHt9IDogX3doZWVsc09wdGlvbnMkYmFjaywKICAgICAgICAgIF93aGVlbHNPcHRpb25zJGZyb250ID0gd2hlZWxzT3B0aW9ucy5mcm9udCwKICAgICAgICAgIGZyb250ID0gX3doZWVsc09wdGlvbnMkZnJvbnQgPT09IHZvaWQgMCA/IHt9IDogX3doZWVsc09wdGlvbnMkZnJvbnQ7CiAgICAgIHZhciBfYmFjayRheGlzUG9zaXRpb24gPSBiYWNrLmF4aXNQb3NpdGlvbiwKICAgICAgICAgIGF4aXNQb3NpdGlvbkJhY2sgPSBfYmFjayRheGlzUG9zaXRpb24gPT09IHZvaWQgMCA/IC0xIDogX2JhY2skYXhpc1Bvc2l0aW9uLAogICAgICAgICAgX2JhY2skcmFkaXVzID0gYmFjay5yYWRpdXMsCiAgICAgICAgICB3aGVlbFJhZGl1c0JhY2sgPSBfYmFjayRyYWRpdXMgPT09IHZvaWQgMCA/IC40IDogX2JhY2skcmFkaXVzLAogICAgICAgICAgX2JhY2skaGFsZlRyYWNrID0gYmFjay5oYWxmVHJhY2ssCiAgICAgICAgICB3aGVlbEhhbGZUcmFja0JhY2sgPSBfYmFjayRoYWxmVHJhY2sgPT09IHZvaWQgMCA/IDEgOiBfYmFjayRoYWxmVHJhY2ssCiAgICAgICAgICBfYmFjayRheGlzSGVpZ2h0ID0gYmFjay5heGlzSGVpZ2h0LAogICAgICAgICAgd2hlZWxBeGlzSGVpZ2h0QmFjayA9IF9iYWNrJGF4aXNIZWlnaHQgPT09IHZvaWQgMCA/IC4zIDogX2JhY2skYXhpc0hlaWdodDsKICAgICAgdmFyIF9mcm9udCRheGlzUG9zaXRpb24gPSBmcm9udC5heGlzUG9zaXRpb24sCiAgICAgICAgICBheGlzUG9zaXRpb25Gcm9udCA9IF9mcm9udCRheGlzUG9zaXRpb24gPT09IHZvaWQgMCA/IDEuNyA6IF9mcm9udCRheGlzUG9zaXRpb24sCiAgICAgICAgICBfZnJvbnQkcmFkaXVzID0gZnJvbnQucmFkaXVzLAogICAgICAgICAgd2hlZWxSYWRpdXNGcm9udCA9IF9mcm9udCRyYWRpdXMgPT09IHZvaWQgMCA/IC40IDogX2Zyb250JHJhZGl1cywKICAgICAgICAgIF9mcm9udCRoYWxmVHJhY2sgPSBmcm9udC5oYWxmVHJhY2ssCiAgICAgICAgICB3aGVlbEhhbGZUcmFja0Zyb250ID0gX2Zyb250JGhhbGZUcmFjayA9PT0gdm9pZCAwID8gMSA6IF9mcm9udCRoYWxmVHJhY2ssCiAgICAgICAgICBfZnJvbnQkYXhpc0hlaWdodCA9IGZyb250LmF4aXNIZWlnaHQsCiAgICAgICAgICB3aGVlbEF4aXNIZWlnaHRGcm9udCA9IF9mcm9udCRheGlzSGVpZ2h0ID09PSB2b2lkIDAgPyAuMyA6IF9mcm9udCRheGlzSGVpZ2h0OwogICAgICB2YXIgX3N1c3BlbnNpb25zJHN0aWZmbmVzID0gc3VzcGVuc2lvbnMuc3RpZmZuZXNzLAogICAgICAgICAgc3RpZmZuZXNzID0gX3N1c3BlbnNpb25zJHN0aWZmbmVzID09PSB2b2lkIDAgPyAyMC4wIDogX3N1c3BlbnNpb25zJHN0aWZmbmVzLAogICAgICAgICAgX3N1c3BlbnNpb25zJGRhbXBpbmcgPSBzdXNwZW5zaW9ucy5kYW1waW5nLAogICAgICAgICAgZGFtcGluZyA9IF9zdXNwZW5zaW9ucyRkYW1waW5nID09PSB2b2lkIDAgPyAyLjMgOiBfc3VzcGVuc2lvbnMkZGFtcGluZywKICAgICAgICAgIF9zdXNwZW5zaW9ucyRjb21wcmVzcyA9IHN1c3BlbnNpb25zLmNvbXByZXNzaW9uLAogICAgICAgICAgY29tcHJlc3Npb24gPSBfc3VzcGVuc2lvbnMkY29tcHJlc3MgPT09IHZvaWQgMCA/IDQuNCA6IF9zdXNwZW5zaW9ucyRjb21wcmVzcywKICAgICAgICAgIF9zdXNwZW5zaW9ucyRyZXN0TGVuZyA9IHN1c3BlbnNpb25zLnJlc3RMZW5ndGgsCiAgICAgICAgICByZXN0TGVuZ3RoID0gX3N1c3BlbnNpb25zJHJlc3RMZW5nID09PSB2b2lkIDAgPyAwLjYgOiBfc3VzcGVuc2lvbnMkcmVzdExlbmc7IC8vIENoYXNzaXMKCiAgICAgIHZhciBnZW9tZXRyeSA9IG5ldyBBbW1vLmJ0Qm94U2hhcGUobmV3IEFtbW8uYnRWZWN0b3IzKHdpZHRoICogLjUsIGhlaWdodCAqIC41LCBsZW5ndGggKiAuNSkpOwogICAgICB2YXIgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTsKICAgICAgdHJhbnNmb3JtLnNldElkZW50aXR5KCk7CiAgICAgIHRyYW5zZm9ybS5zZXRPcmlnaW4obmV3IEFtbW8uYnRWZWN0b3IzKHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHBvc2l0aW9uLnopKTsKICAgICAgdHJhbnNmb3JtLnNldFJvdGF0aW9uKG5ldyBBbW1vLmJ0UXVhdGVybmlvbihxdWF0ZXJuaW9uLngsIHF1YXRlcm5pb24ueSwgcXVhdGVybmlvbi56LCBxdWF0ZXJuaW9uLncpKTsKICAgICAgdmFyIG1vdGlvblN0YXRlID0gbmV3IEFtbW8uYnREZWZhdWx0TW90aW9uU3RhdGUodHJhbnNmb3JtKTsKICAgICAgdmFyIGxvY2FsSW5lcnRpYSA9IG5ldyBBbW1vLmJ0VmVjdG9yMygwLCAwLCAwKTsKICAgICAgZ2VvbWV0cnkuY2FsY3VsYXRlTG9jYWxJbmVydGlhKG1hc3MsIGxvY2FsSW5lcnRpYSk7CiAgICAgIHZhciBjaGFzc2lzID0gbmV3IEFtbW8uYnRSaWdpZEJvZHkobmV3IEFtbW8uYnRSaWdpZEJvZHlDb25zdHJ1Y3Rpb25JbmZvKG1hc3MsIG1vdGlvblN0YXRlLCBnZW9tZXRyeSwgbG9jYWxJbmVydGlhKSk7CiAgICAgIGNoYXNzaXMuc2V0QWN0aXZhdGlvblN0YXRlKERJU0FCTEVfREVBQ1RJVkFUSU9OKTsKICAgICAgd29ybGQuYWRkUmlnaWRCb2R5KGNoYXNzaXMpOyAvLyBSYXljYXN0IFZlaGljbGUKCiAgICAgIHZhciB0dW5pbmcgPSBuZXcgQW1tby5idFZlaGljbGVUdW5pbmcoKTsKICAgICAgdmFyIHJheUNhc3RlciA9IG5ldyBBbW1vLmJ0RGVmYXVsdFZlaGljbGVSYXljYXN0ZXIod29ybGQuZ2V0RHluYW1pY3NXb3JsZCgpKTsKICAgICAgdmFyIHZlaGljbGUgPSBuZXcgQW1tby5idFJheWNhc3RWZWhpY2xlKHR1bmluZywgY2hhc3NpcywgcmF5Q2FzdGVyKTsKICAgICAgdmVoaWNsZS5zZXRDb29yZGluYXRlU3lzdGVtKDAsIDEsIDIpOwogICAgICB3b3JsZC5hZGRBY3Rpb24odmVoaWNsZSk7CiAgICAgIHZhciB3aGVlbERpcmVjdGlvbkNTMCA9IG5ldyBBbW1vLmJ0VmVjdG9yMygwLCAtMSwgMCk7CiAgICAgIHZhciB3aGVlbEF4bGVDUyA9IG5ldyBBbW1vLmJ0VmVjdG9yMygtMSwgMCwgMCk7CgogICAgICB2YXIgYWRkV2hlZWwgPSBmdW5jdGlvbiBhZGRXaGVlbChpc0Zyb250LCBwb3MsIHJhZGl1cykgewogICAgICAgIHZhciB3aGVlbEluZm8gPSB2ZWhpY2xlLmFkZFdoZWVsKHBvcywgd2hlZWxEaXJlY3Rpb25DUzAsIHdoZWVsQXhsZUNTLCByZXN0TGVuZ3RoLCByYWRpdXMsIHR1bmluZywgaXNGcm9udCk7CiAgICAgICAgd2hlZWxJbmZvLnNldF9tX3N1c3BlbnNpb25TdGlmZm5lc3Moc3RpZmZuZXNzKTsKICAgICAgICB3aGVlbEluZm8uc2V0X21fd2hlZWxzRGFtcGluZ1JlbGF4YXRpb24oZGFtcGluZyk7CiAgICAgICAgd2hlZWxJbmZvLnNldF9tX3doZWVsc0RhbXBpbmdDb21wcmVzc2lvbihjb21wcmVzc2lvbik7CiAgICAgICAgd2hlZWxJbmZvLnNldF9tX2ZyaWN0aW9uU2xpcChmcmljdGlvbik7CiAgICAgICAgd2hlZWxJbmZvLnNldF9tX3JvbGxJbmZsdWVuY2Uocm9sbEluZmx1ZW5jZSk7CiAgICAgIH07CgogICAgICBhZGRXaGVlbCh0cnVlLCBuZXcgQW1tby5idFZlY3RvcjMod2hlZWxIYWxmVHJhY2tGcm9udCwgd2hlZWxBeGlzSGVpZ2h0RnJvbnQsIGF4aXNQb3NpdGlvbkZyb250KSwgd2hlZWxSYWRpdXNGcm9udCk7CiAgICAgIGFkZFdoZWVsKHRydWUsIG5ldyBBbW1vLmJ0VmVjdG9yMygtd2hlZWxIYWxmVHJhY2tGcm9udCwgd2hlZWxBeGlzSGVpZ2h0RnJvbnQsIGF4aXNQb3NpdGlvbkZyb250KSwgd2hlZWxSYWRpdXNGcm9udCk7CiAgICAgIGFkZFdoZWVsKGZhbHNlLCBuZXcgQW1tby5idFZlY3RvcjMoLXdoZWVsSGFsZlRyYWNrQmFjaywgd2hlZWxBeGlzSGVpZ2h0QmFjaywgYXhpc1Bvc2l0aW9uQmFjayksIHdoZWVsUmFkaXVzQmFjayk7CiAgICAgIGFkZFdoZWVsKGZhbHNlLCBuZXcgQW1tby5idFZlY3RvcjMod2hlZWxIYWxmVHJhY2tCYWNrLCB3aGVlbEF4aXNIZWlnaHRCYWNrLCBheGlzUG9zaXRpb25CYWNrKSwgd2hlZWxSYWRpdXNCYWNrKTsKICAgICAgdmVoaWNsZS51dWlkID0gdXVpZDsKICAgICAgd29ybGQuYWRkRWxlbWVudCh7CiAgICAgICAgdHlwZTogVFlQRVMuVkVISUNMRSwKICAgICAgICB1dWlkOiB1dWlkLAogICAgICAgIHZlaGljbGU6IHZlaGljbGUsCiAgICAgICAgd2hlZWxzOiB3aGVlbHMsCiAgICAgICAgb3B0aW9uczogZGF0YSwKICAgICAgICBzdGF0ZTogREVGQVVMVF9WRUhJQ0xFX1NUQVRFCiAgICAgIH0pOwogICAgfTsKICAgIHZhciBzZXRWZWhpY2xlUG9zaXRpb24gPSBmdW5jdGlvbiBzZXRWZWhpY2xlUG9zaXRpb24oZGF0YSkgewogICAgICB2YXIgdXVpZCA9IGRhdGEudXVpZCwKICAgICAgICAgIHBvc2l0aW9uID0gZGF0YS5wb3NpdGlvbjsKICAgICAgdmFyIGVsZW1lbnQgPSB3b3JsZC5nZXRFbGVtZW50KHV1aWQpOwoKICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gVFlQRVMuVkVISUNMRSkgewogICAgICAgIHZhciBib2R5ID0gZWxlbWVudC52ZWhpY2xlLmdldFJpZ2lkQm9keSgpOwogICAgICAgIHZhciB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpOwogICAgICAgIGJvZHkuZ2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKICAgICAgICB0cmFuc2Zvcm0uc2V0T3JpZ2luKG5ldyBBbW1vLmJ0VmVjdG9yMyhwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56KSk7CiAgICAgICAgYm9keS5zZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgICB9CiAgICB9OwogICAgdmFyIHNldFZlaGljbGVRdWF0ZXJuaW9uID0gZnVuY3Rpb24gc2V0VmVoaWNsZVF1YXRlcm5pb24oZGF0YSkgewogICAgICB2YXIgdXVpZCA9IGRhdGEudXVpZCwKICAgICAgICAgIHF1YXRlcm5pb24gPSBkYXRhLnF1YXRlcm5pb247CiAgICAgIHZhciBlbGVtZW50ID0gd29ybGQuZ2V0RWxlbWVudCh1dWlkKTsKCiAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09IFRZUEVTLlZFSElDTEUpIHsKICAgICAgICB2YXIgYm9keSA9IGVsZW1lbnQudmVoaWNsZS5nZXRSaWdpZEJvZHkoKTsKICAgICAgICB2YXIgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTsKICAgICAgICBib2R5LmdldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7CiAgICAgICAgdHJhbnNmb3JtLnNldFJvdGF0aW9uKG5ldyBBbW1vLmJ0UXVhdGVybmlvbihxdWF0ZXJuaW9uLngsIHF1YXRlcm5pb24ueSwgcXVhdGVybmlvbi56LCBxdWF0ZXJuaW9uLncpKTsKICAgICAgICBib2R5LnNldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7CiAgICAgIH0KICAgIH07CiAgICB2YXIgcmVzZXRWZWhpY2xlID0gZnVuY3Rpb24gcmVzZXRWZWhpY2xlKGRhdGEpIHsKICAgICAgdmFyIHV1aWQgPSBkYXRhLnV1aWQsCiAgICAgICAgICBxdWF0ZXJuaW9uID0gZGF0YS5xdWF0ZXJuaW9uLAogICAgICAgICAgcG9zaXRpb24gPSBkYXRhLnBvc2l0aW9uOwogICAgICB2YXIgZWxlbWVudCA9IHdvcmxkLmdldEVsZW1lbnQodXVpZCk7CgogICAgICBpZiAoZWxlbWVudC50eXBlID09PSBUWVBFUy5WRUhJQ0xFKSB7CiAgICAgICAgdmFyIGJvZHkgPSBlbGVtZW50LnZlaGljbGUuZ2V0UmlnaWRCb2R5KCk7CiAgICAgICAgdmFyIHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7CiAgICAgICAgYm9keS5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgICAgIHRyYW5zZm9ybS5zZXRJZGVudGl0eSgpOwogICAgICAgIHRyYW5zZm9ybS5zZXRPcmlnaW4obmV3IEFtbW8uYnRWZWN0b3IzKHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHBvc2l0aW9uLnopKTsKICAgICAgICB0cmFuc2Zvcm0uc2V0Um90YXRpb24obmV3IEFtbW8uYnRRdWF0ZXJuaW9uKHF1YXRlcm5pb24ueCwgcXVhdGVybmlvbi55LCBxdWF0ZXJuaW9uLnosIHF1YXRlcm5pb24udykpOwogICAgICAgIGJvZHkuc2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKICAgICAgfQogICAgfTsKICAgIHZhciBoYW5kbGVWZWhpY2xlVXBkYXRlID0gZnVuY3Rpb24gaGFuZGxlVmVoaWNsZVVwZGF0ZShfcmVmLCBkdCkgewogICAgICB2YXIgdmVoaWNsZSA9IF9yZWYudmVoaWNsZSwKICAgICAgICAgIHdoZWVscyA9IF9yZWYud2hlZWxzLAogICAgICAgICAgdXVpZCA9IF9yZWYudXVpZCwKICAgICAgICAgIF9yZWYkc3RhdGUgPSBfcmVmLnN0YXRlLAogICAgICAgICAgc3RhdGUgPSBfcmVmJHN0YXRlID09PSB2b2lkIDAgPyBERUZBVUxUX1ZFSElDTEVfU1RBVEUgOiBfcmVmJHN0YXRlLAogICAgICAgICAgX3JlZiRvcHRpb25zID0gX3JlZi5vcHRpb25zLAogICAgICAgICAgb3B0aW9ucyA9IF9yZWYkb3B0aW9ucyA9PT0gdm9pZCAwID8ge30gOiBfcmVmJG9wdGlvbnM7CiAgICAgIHZhciBicmVha2luZ0ZvcmNlID0gMDsKICAgICAgdmFyIGVuZ2luZUZvcmNlID0gMDsKICAgICAgdmFyIF9vcHRpb25zJHN0ZWVyaW5nQ2xhbSA9IG9wdGlvbnMuc3RlZXJpbmdDbGFtcCwKICAgICAgICAgIHN0ZWVyaW5nQ2xhbXAgPSBfb3B0aW9ucyRzdGVlcmluZ0NsYW0gPT09IHZvaWQgMCA/IERFRkFVTFRfU1RFRVJJTkdfQ0xBTVAgOiBfb3B0aW9ucyRzdGVlcmluZ0NsYW0sCiAgICAgICAgICBfb3B0aW9ucyRzdGVlcmluZ0luY3IgPSBvcHRpb25zLnN0ZWVyaW5nSW5jcmVtZW50LAogICAgICAgICAgc3RlZXJpbmdJbmNyZW1lbnQgPSBfb3B0aW9ucyRzdGVlcmluZ0luY3IgPT09IHZvaWQgMCA/IERFRkFVTFRfU1RFRVJJTkdfSU5DUkVNRU5UIDogX29wdGlvbnMkc3RlZXJpbmdJbmNyLAogICAgICAgICAgX29wdGlvbnMkbWF4RW5naW5lRm9yID0gb3B0aW9ucy5tYXhFbmdpbmVGb3JjZSwKICAgICAgICAgIG1heEVuZ2luZUZvcmNlID0gX29wdGlvbnMkbWF4RW5naW5lRm9yID09PSB2b2lkIDAgPyBERUZBVUxUX01BWF9FTkdJTkVfRk9SQ0UgOiBfb3B0aW9ucyRtYXhFbmdpbmVGb3IsCiAgICAgICAgICBfb3B0aW9ucyRtYXhCcmVha2luZ0YgPSBvcHRpb25zLm1heEJyZWFraW5nRm9yY2UsCiAgICAgICAgICBtYXhCcmVha2luZ0ZvcmNlID0gX29wdGlvbnMkbWF4QnJlYWtpbmdGID09PSB2b2lkIDAgPyBERUZBVUxUX01BWF9CUkVBS0lOR19GT1JDRSA6IF9vcHRpb25zJG1heEJyZWFraW5nRjsKCiAgICAgIGlmIChzdGF0ZS5hY2NlbGVyYXRpb24pIHsKICAgICAgICBpZiAoc3BlZWQgPCAtMSkgYnJlYWtpbmdGb3JjZSA9IG1heEJyZWFraW5nRm9yY2U7ZWxzZSBlbmdpbmVGb3JjZSA9IG1heEVuZ2luZUZvcmNlOwogICAgICB9CgogICAgICBpZiAoc3RhdGUuYnJha2luZykgewogICAgICAgIGlmIChzcGVlZCA+IDEpIGJyZWFraW5nRm9yY2UgPSBtYXhCcmVha2luZ0ZvcmNlO2Vsc2UgZW5naW5lRm9yY2UgPSAtbWF4RW5naW5lRm9yY2UgLyAyOwogICAgICB9CgogICAgICBpZiAoc3RhdGUubGVmdCkgewogICAgICAgIGlmIChzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgPCBzdGVlcmluZ0NsYW1wKSBzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgKz0gc3RlZXJpbmdJbmNyZW1lbnQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKHN0YXRlLnJpZ2h0KSB7CiAgICAgICAgICBpZiAoc3RhdGUudmVoaWNsZVN0ZWVyaW5nID4gLXN0ZWVyaW5nQ2xhbXApIHN0YXRlLnZlaGljbGVTdGVlcmluZyAtPSBzdGVlcmluZ0luY3JlbWVudDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKHN0YXRlLnZlaGljbGVTdGVlcmluZyA8IC1zdGVlcmluZ0luY3JlbWVudCkgc3RhdGUudmVoaWNsZVN0ZWVyaW5nICs9IHN0ZWVyaW5nSW5jcmVtZW50O2Vsc2UgewogICAgICAgICAgICBpZiAoc3RhdGUudmVoaWNsZVN0ZWVyaW5nID4gc3RlZXJpbmdJbmNyZW1lbnQpIHN0YXRlLnZlaGljbGVTdGVlcmluZyAtPSBzdGVlcmluZ0luY3JlbWVudDtlbHNlIHsKICAgICAgICAgICAgICBzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgPSAwOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CgogICAgICB2ZWhpY2xlLmFwcGx5RW5naW5lRm9yY2UoZW5naW5lRm9yY2UsIEJBQ0tfTEVGVCk7CiAgICAgIHZlaGljbGUuYXBwbHlFbmdpbmVGb3JjZShlbmdpbmVGb3JjZSwgQkFDS19SSUdIVCk7CiAgICAgIHZlaGljbGUuc2V0QnJha2UoYnJlYWtpbmdGb3JjZSAvIDIsIEZST05UX0xFRlQpOwogICAgICB2ZWhpY2xlLnNldEJyYWtlKGJyZWFraW5nRm9yY2UgLyAyLCBGUk9OVF9SSUdIVCk7CiAgICAgIHZlaGljbGUuc2V0QnJha2UoYnJlYWtpbmdGb3JjZSwgQkFDS19MRUZUKTsKICAgICAgdmVoaWNsZS5zZXRCcmFrZShicmVha2luZ0ZvcmNlLCBCQUNLX1JJR0hUKTsKICAgICAgdmVoaWNsZS5zZXRTdGVlcmluZ1ZhbHVlKHN0YXRlLnZlaGljbGVTdGVlcmluZywgRlJPTlRfTEVGVCk7CiAgICAgIHZlaGljbGUuc2V0U3RlZXJpbmdWYWx1ZShzdGF0ZS52ZWhpY2xlU3RlZXJpbmcsIEZST05UX1JJR0hUKTsKICAgICAgdmFyIHRtLCBwLCBxLCBpOwogICAgICB2YXIgbiA9IHZlaGljbGUuZ2V0TnVtV2hlZWxzKCk7CgogICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgdmVoaWNsZS51cGRhdGVXaGVlbFRyYW5zZm9ybShpLCB0cnVlKTsKICAgICAgICB0bSA9IHZlaGljbGUuZ2V0V2hlZWxUcmFuc2Zvcm1XUyhpKTsKICAgICAgICBwID0gdG0uZ2V0T3JpZ2luKCk7CiAgICAgICAgcSA9IHRtLmdldFJvdGF0aW9uKCk7CiAgICAgICAgdmFyIHdoZWVsVVVJRCA9IHdoZWVsc1tpXTsKICAgICAgICBkaXNwYXRjaGVyJDEuc2VuZEJvZHlVcGRhdGUod2hlZWxVVUlELCBwLCBxLCBkdCk7CiAgICAgIH0KCiAgICAgIHRtID0gdmVoaWNsZS5nZXRDaGFzc2lzV29ybGRUcmFuc2Zvcm0oKTsKICAgICAgcCA9IHRtLmdldE9yaWdpbigpOwogICAgICBxID0gdG0uZ2V0Um90YXRpb24oKTsKICAgICAgdmFyIGRpcmVjdGlvbiA9IHZlaGljbGUuZ2V0Rm9yd2FyZFZlY3RvcigpOwogICAgICB2YXIgc3BlZWQgPSB2ZWhpY2xlLmdldEN1cnJlbnRTcGVlZEttSG91cigpOwogICAgICB2YXIgZXh0cmFEYXRhID0gewogICAgICAgIGRpcmVjdGlvbjogewogICAgICAgICAgeDogZGlyZWN0aW9uLngoKSwKICAgICAgICAgIHk6IGRpcmVjdGlvbi55KCksCiAgICAgICAgICB6OiBkaXJlY3Rpb24ueigpCiAgICAgICAgfSwKICAgICAgICBzcGVlZDogc3BlZWQKICAgICAgfTsKICAgICAgZGlzcGF0Y2hlciQxLnNlbmRCb2R5VXBkYXRlKHV1aWQsIHAsIHEsIGR0LCBleHRyYURhdGEpOwogICAgICB3b3JsZC51cGRhdGVCb2R5U3RhdGUodXVpZCwgc3RhdGUpOwogICAgfTsKCiAgICB2YXIgY3JlYXRlR2hvc3RDb2xsaWRlciA9IGZ1bmN0aW9uIGNyZWF0ZUdob3N0Q29sbGlkZXIocmFkaXVzLCBwb3NpdGlvbikgewogICAgICB2YXIgZ2hvc3RDb2xsaWRlciA9IG5ldyBBbW1vLmJ0R2hvc3RPYmplY3QoKTsKICAgICAgdmFyIHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7CiAgICAgIGdob3N0Q29sbGlkZXIuc2V0Q29sbGlzaW9uU2hhcGUobmV3IEFtbW8uYnRTcGhlcmVTaGFwZShyYWRpdXMpKTsKICAgICAgZ2hvc3RDb2xsaWRlci5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgICB0cmFuc2Zvcm0uc2V0SWRlbnRpdHkoKTsKICAgICAgdHJhbnNmb3JtLnNldE9yaWdpbihwb3NpdGlvbik7CiAgICAgIHRyYW5zZm9ybS5zZXRSb3RhdGlvbihuZXcgQW1tby5idFF1YXRlcm5pb24oMCwgMCwgMCwgMSkpOwogICAgICBnaG9zdENvbGxpZGVyLnNldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7CiAgICAgIHJldHVybiB7CiAgICAgICAgZ2hvc3RDb2xsaWRlcjogZ2hvc3RDb2xsaWRlciwKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zZm9ybQogICAgICB9OwogICAgfTsKICAgIHZhciBmb3JFYWNoR2hvc3RDb2xsaXNpb24gPSBmdW5jdGlvbiBmb3JFYWNoR2hvc3RDb2xsaXNpb24oZ2hvc3RDb2xsaWRlcikgewogICAgICB2YXIgZm9yRWFjaENhbGxiYWNrID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoKSB7fTsKICAgICAgdmFyIGNvbGxpc2lvbnMgPSBnaG9zdENvbGxpZGVyLmdldE51bU92ZXJsYXBwaW5nT2JqZWN0cygpOwoKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2xsaXNpb25zOyBpKyspIHsKICAgICAgICB2YXIgb2JqZWN0ID0gQW1tby5jYXN0T2JqZWN0KGdob3N0Q29sbGlkZXIuZ2V0T3ZlcmxhcHBpbmdPYmplY3QoaSksIEFtbW8uYnRSaWdpZEJvZHkpOwogICAgICAgIHZhciB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpOwogICAgICAgIG9iamVjdC5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgICAgIGZvckVhY2hDYWxsYmFjayhvYmplY3QsIHRyYW5zZm9ybSwgaSk7CiAgICAgICAgQW1tby5kZXN0cm95KHRyYW5zZm9ybSk7CiAgICAgIH0KICAgIH07CiAgICB2YXIgZ2V0RXhwbG9zaW9uUG9zaXRpb24gPSBmdW5jdGlvbiBnZXRFeHBsb3Npb25Qb3NpdGlvbih1dWlkLCBwb3NpdGlvbikgewogICAgICB2YXIgZXhwbG9zaW9uUG9zaXRpb24gPSBwb3NpdGlvbjsKCiAgICAgIGlmICghZXhwbG9zaW9uUG9zaXRpb24pIHsKICAgICAgICB2YXIgX3dvcmxkJGdldEVsZW1lbnQgPSB3b3JsZC5nZXRFbGVtZW50KHV1aWQpLAogICAgICAgICAgICBib2R5ID0gX3dvcmxkJGdldEVsZW1lbnQuYm9keTsKCiAgICAgICAgdmFyIG1vdGlvblN0YXRlID0gYm9keS5nZXRNb3Rpb25TdGF0ZSgpOwogICAgICAgIHZhciB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpOwogICAgICAgIG1vdGlvblN0YXRlLmdldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7CiAgICAgICAgZXhwbG9zaW9uUG9zaXRpb24gPSB0cmFuc2Zvcm0uZ2V0T3JpZ2luKCk7CiAgICAgIH0KCiAgICAgIHJldHVybiBleHBsb3Npb25Qb3NpdGlvbjsKICAgIH07CiAgICB2YXIgZ2V0RXhwbG9zaW9uSW1wdWxzZSA9IGZ1bmN0aW9uIGdldEV4cGxvc2lvbkltcHVsc2UocG9zaXRpb24sIGV4cGxvc2lvblBvc2l0aW9uLCBzdHJlbmd0aCkgewogICAgICB2YXIgZGlzdGFuY2UgPSBwb3NpdGlvbi5vcF9zdWIoZXhwbG9zaW9uUG9zaXRpb24pOwogICAgICBkaXN0YW5jZS5ub3JtYWxpemUoKTsKICAgICAgdmFyIGltcHVsc2UgPSBkaXN0YW5jZS5vcF9tdWwoc3RyZW5ndGgpOwogICAgICBpbXB1bHNlLnNldFkoaW1wdWxzZS55KCkgKyBzdHJlbmd0aCk7CiAgICAgIHJldHVybiBpbXB1bHNlOwogICAgfTsKICAgIHZhciBjcmVhdGVFeHBsb3Npb24gPSBmdW5jdGlvbiBjcmVhdGVFeHBsb3Npb24oX3JlZikgewogICAgICB2YXIgdXVpZCA9IF9yZWYudXVpZCwKICAgICAgICAgIHBvc2l0aW9uID0gX3JlZi5wb3NpdGlvbiwKICAgICAgICAgIF9yZWYkcmFkaXVzID0gX3JlZi5yYWRpdXMsCiAgICAgICAgICByYWRpdXMgPSBfcmVmJHJhZGl1cyA9PT0gdm9pZCAwID8gRVhQTE9TSU9OX1NJWkVTLlNNQUxMIDogX3JlZiRyYWRpdXMsCiAgICAgICAgICBfcmVmJHN0cmVuZ3RoID0gX3JlZi5zdHJlbmd0aCwKICAgICAgICAgIHN0cmVuZ3RoID0gX3JlZiRzdHJlbmd0aCA9PT0gdm9pZCAwID8gRVhQTE9TSU9OX1NUUkVOR1RIUy5NRURJVU0gOiBfcmVmJHN0cmVuZ3RoOwoKICAgICAgdHJ5IHsKICAgICAgICB2YXIgZXhwbG9zaW9uUG9zaXRpb24gPSBnZXRFeHBsb3Npb25Qb3NpdGlvbih1dWlkLCBwb3NpdGlvbik7CgogICAgICAgIHZhciBfY3JlYXRlR2hvc3RDb2xsaWRlciA9IGNyZWF0ZUdob3N0Q29sbGlkZXIocmFkaXVzLCBleHBsb3Npb25Qb3NpdGlvbiksCiAgICAgICAgICAgIGdob3N0Q29sbGlkZXIgPSBfY3JlYXRlR2hvc3RDb2xsaWRlci5naG9zdENvbGxpZGVyLAogICAgICAgICAgICB0cmFuc2Zvcm0gPSBfY3JlYXRlR2hvc3RDb2xsaWRlci50cmFuc2Zvcm07CgogICAgICAgIHdvcmxkLmFkZENvbGxpc2lvbk9iamVjdChnaG9zdENvbGxpZGVyKTsKICAgICAgICBmb3JFYWNoR2hvc3RDb2xsaXNpb24oZ2hvc3RDb2xsaWRlciwgZnVuY3Rpb24gKG9iamVjdCwgb2JqZWN0VHJhbnNmb3JtKSB7CiAgICAgICAgICB2YXIgb3JpZ2luID0gb2JqZWN0VHJhbnNmb3JtLmdldE9yaWdpbigpOwogICAgICAgICAgb2JqZWN0LmFjdGl2YXRlKHRydWUpOwogICAgICAgICAgb2JqZWN0LmFwcGx5Q2VudHJhbEltcHVsc2UoZ2V0RXhwbG9zaW9uSW1wdWxzZShvcmlnaW4sIGV4cGxvc2lvblBvc2l0aW9uLCBzdHJlbmd0aCkpOwogICAgICAgIH0pOwogICAgICAgIHdvcmxkLmdldER5bmFtaWNzV29ybGQoKS5yZW1vdmVDb2xsaXNpb25PYmplY3QoZ2hvc3RDb2xsaWRlcik7CiAgICAgICAgQW1tby5kZXN0cm95KGdob3N0Q29sbGlkZXIpOwogICAgICAgIEFtbW8uZGVzdHJveSh0cmFuc2Zvcm0pOwogICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgY29uc29sZS5sb2coZSk7CiAgICAgIH0KICAgIH07CgogICAgdmFyIGhhbmRsZUxvYWRFdmVudCA9IGZ1bmN0aW9uIGhhbmRsZUxvYWRFdmVudChvcHRpb25zKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbiAoQW1tbykgewogICAgICAgIHNlbGYuQW1tbyA9IEFtbW87CgogICAgICAgIG9ubWVzc2FnZSA9IGZ1bmN0aW9uIG9ubWVzc2FnZShfcmVmKSB7CiAgICAgICAgICB2YXIgZGF0YSA9IF9yZWYuZGF0YTsKCiAgICAgICAgICBzd2l0Y2ggKGRhdGEuZXZlbnQpIHsKICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5BREQuQk9YOgogICAgICAgICAgICAgIGFkZEJveChkYXRhKTsKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuQURELlNQSEVSRToKICAgICAgICAgICAgICBhZGRTcGhlcmUoZGF0YSk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkFERC5WRUhJQ0xFOgogICAgICAgICAgICAgIGFkZFZlaGljbGUoZGF0YSk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkFERC5NT0RFTDoKICAgICAgICAgICAgICBhZGRNb2RlbChkYXRhKTsKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuQURELlBMQVlFUjoKICAgICAgICAgICAgICBhZGRQbGF5ZXIoZGF0YSk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkVMRU1FTlQuU0VULkxJTkVBUl9WRUxPQ0lUWToKICAgICAgICAgICAgICBzZXRMaW5lYXJWZWxvY2l0eShkYXRhKTsKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuRUxFTUVOVC5TRVQuUE9TSVRJT046CiAgICAgICAgICAgICAgc2V0UG9zaXRpb24oZGF0YSk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLlZFSElDTEUuU0VULlBPU0lUSU9OOgogICAgICAgICAgICAgIHNldFZlaGljbGVQb3NpdGlvbihkYXRhKTsKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuVkVISUNMRS5TRVQuUVVBVEVSTklPTjoKICAgICAgICAgICAgICBzZXRWZWhpY2xlUXVhdGVybmlvbihkYXRhKTsKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuVkVISUNMRS5SRVNFVDoKICAgICAgICAgICAgICByZXNldFZlaGljbGUoZGF0YSk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkVMRU1FTlQuQVBQTFkuSU1QVUxTRToKICAgICAgICAgICAgICBhcHBseUltcHVzZShkYXRhKTsKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuRUxFTUVOVC5VUERBVEU6CiAgICAgICAgICAgICAgd29ybGQudXBkYXRlQm9keVN0YXRlKGRhdGEpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5FTEVNRU5ULkRJU1BPU0U6CiAgICAgICAgICAgICAgd29ybGQuZGlzcG9zZUJvZHkoZGF0YSk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkVGRkVDVFMuRVhQTE9TSU9OOgogICAgICAgICAgICAgIGNyZWF0ZUV4cGxvc2lvbihkYXRhKTsKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuVEVSTUlOQVRFOgogICAgICAgICAgICAgIHdvcmxkLnRlcm1pbmF0ZSgpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH07CgogICAgICAgIHdvcmxkLmluaXQob3B0aW9ucyk7CiAgICAgICAgZGlzcGF0Y2hlciQxLnNlbmRSZWFkeUV2ZW50KCk7CiAgICAgICAgd29ybGQuc2ltdWxhdGUoKTsKICAgICAgfTsKICAgIH07CgogICAgdmFyIGxvYWRBbW1vID0gZnVuY3Rpb24gbG9hZEFtbW8ob3B0aW9ucykgewogICAgICB2YXIgc2NyaXB0VXJsID0gb3B0aW9ucy5ob3N0ICsgJy8nICsgKG9wdGlvbnMucGF0aCB8fCBMSUJSQVJZX05BTUUpOwogICAgICBpbXBvcnRTY3JpcHRzKHNjcmlwdFVybCk7CiAgICAgIEFtbW8oKS50aGVuKGhhbmRsZUxvYWRFdmVudChvcHRpb25zKSk7CiAgICB9OwoKICAgIG9ubWVzc2FnZSA9IGZ1bmN0aW9uIG9ubWVzc2FnZShfcmVmMikgewogICAgICB2YXIgZGF0YSA9IF9yZWYyLmRhdGE7CgogICAgICBzd2l0Y2ggKGRhdGEuZXZlbnQpIHsKICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkxPQUQuQU1NTzoKICAgICAgICAgIGxvYWRBbW1vKGRhdGEpOwogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH07Cgp9KCkpOwoK', 'data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIndvcmtlcjovL3dlYi13b3JrZXIvcGh5c2ljcy9jb25zdGFudHMuanMiLCJ3b3JrZXI6Ly93ZWItd29ya2VyL3BoeXNpY3MvbWVzc2FnZXMuanMiLCJ3b3JrZXI6Ly93ZWItd29ya2VyL3BoeXNpY3Mvd29ya2VyL2xpYi9kaXNwYXRjaGVyLmpzIiwid29ya2VyOi8vd2ViLXdvcmtlci9waHlzaWNzL3dvcmtlci9saWIvbWF0aC5qcyIsIndvcmtlcjovL3dlYi13b3JrZXIvcGh5c2ljcy93b3JrZXIvZWxlbWVudHMuanMiLCJ3b3JrZXI6Ly93ZWItd29ya2VyL3BoeXNpY3Mvd29ya2VyL3BsYXllci5qcyIsIndvcmtlcjovL3dlYi13b3JrZXIvcGh5c2ljcy93b3JrZXIvd29ybGQuanMiLCJ3b3JrZXI6Ly93ZWItd29ya2VyL3BoeXNpY3Mvd29ya2VyL3ZlaGljbGVzLmpzIiwid29ya2VyOi8vd2ViLXdvcmtlci9waHlzaWNzL3dvcmtlci9lZmZlY3RzLmpzIiwid29ya2VyOi8vd2ViLXdvcmtlci9waHlzaWNzL3dvcmtlci9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgTElCUkFSWV9OQU1FID0gJ2FtbW8uanMnO1xuXG5leHBvcnQgY29uc3QgVFlQRVMgPSB7XG4gICAgQk9YOiAnQk9YJyxcbiAgICBTUEhFUkU6ICdTUEhFUkUnLFxuICAgIFZFSElDTEU6ICdWRUhJQ0xFJyxcbiAgICBNRVNIOiAnTUVTSCcsXG4gICAgUExBWUVSOiAnUExBWUVSJ1xufTtcblxuZXhwb3J0IGNvbnN0IENPTExJREVSX1RZUEVTID0ge1xuICAgIEJPWDogJ0JPWCcsXG4gICAgVkVISUNMRTogJ1ZFSElDTEUnLFxuICAgIFBMQVlFUjogJ1BMQVlFUicsXG4gICAgU1BIRVJFOiAnU1BIRVJFJ1xufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfVkVISUNMRV9TVEFURSA9IHtcbiAgICB2ZWhpY2xlU3RlZXJpbmc6IDAsXG4gICAgYWNjZWxlcmF0aW9uOiBmYWxzZSxcbiAgICBicmVha2luZzogZmFsc2UsXG4gICAgcmlnaHQ6IGZhbHNlLFxuICAgIGxlZnQ6IGZhbHNlXG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9SSUdJREJPRFlfU1RBVEUgPSB7XG4gICAgdmVsb2NpdHk6IHsgeDogMCwgeTogMCwgejogMCB9LFxuICAgIG1vdmVtZW50OiB7XG4gICAgICAgIGZvcndhcmQ6IGZhbHNlLFxuICAgICAgICBiYWNrd2FyZHM6IGZhbHNlLFxuICAgICAgICBsZWZ0OiBmYWxzZSxcbiAgICAgICAgcmlnaHQ6IGZhbHNlXG4gICAgfSxcbiAgICBkaXJlY3Rpb246IHtcbiAgICAgICAgeDogMCxcbiAgICAgICAgeTogMCxcbiAgICAgICAgejogMFxuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1NDQUxFID0geyB4OiAxLCB5OiAxLCB6OiAxIH07XG5leHBvcnQgY29uc3QgREVGQVVMVF9RVUFURVJOSU9OID0geyB4OiAwLCB5OiAwLCB6OiAwLCB3OiAxIH07XG5leHBvcnQgY29uc3QgREVGQVVMVF9QT1NJVElPTiA9IHsgeDogMCwgeTogMCwgejogMCB9O1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTElORUFSX1ZFTE9DSVRZID0geyB4OiAwLCB5OiAwLCB6OiAwIH07XG5leHBvcnQgY29uc3QgREVGQVVMVF9JTVBVTFNFID0geyB4OiAwLCB5OiAwLCB6OiAwIH07XG5cbmV4cG9ydCBjb25zdCBESVNBQkxFX0RFQUNUSVZBVElPTiA9IDQ7XG5leHBvcnQgY29uc3QgR1JBVklUWSA9IHsgeDogMCwgeTogLTEwLCB6OiAwIH07XG5cbmV4cG9ydCBjb25zdCBGUk9OVF9MRUZUID0gMDtcbmV4cG9ydCBjb25zdCBGUk9OVF9SSUdIVCA9IDE7XG5leHBvcnQgY29uc3QgQkFDS19MRUZUID0gMjtcbmV4cG9ydCBjb25zdCBCQUNLX1JJR0hUID0gMztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfU1RFRVJJTkdfSU5DUkVNRU5UID0gLjA0O1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfU1RFRVJJTkdfQ0xBTVAgPSAuNTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX01BWF9FTkdJTkVfRk9SQ0UgPSAyMDAwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTUFYX0JSRUFLSU5HX0ZPUkNFID0gMTAwO1xuXG5leHBvcnQgY29uc3QgRVhQTE9TSU9OX1NJWkVTID0ge1xuICAgIFNNQUxMOiA0LFxuICAgIE1FRElVTTogNixcbiAgICBMQVJHRTogOCxcbiAgICBNQVNTSVZFOiAxMlxufTtcblxuZXhwb3J0IGNvbnN0IEVYUExPU0lPTl9TVFJFTkdUSFMgPSB7XG4gICAgVkVSWV9XRUFLOiAyLFxuICAgIFdFQUs6IDQsXG4gICAgTUVESVVNOiA4LFxuICAgIExBUkdFOiAxNixcbiAgICBNQVNTSVZFOiAzMixcbiAgICBPS19OTzogNjRcbn07IiwiZXhwb3J0IGNvbnN0IFBIWVNJQ1NfRVZFTlRTID0ge1xuICAgIERJU1BBVENIOiAncGh5c2ljczpkaXNwYXRjaCcsXG4gICAgVEVSTUlOQVRFOiAncGh5c2ljczp0ZXJtaW5hdGUnLFxuICAgIExPQUQ6IHtcbiAgICAgICAgQU1NTzogJ3BoeXNpY3M6bG9hZDphbW1vJyxcbiAgICB9LFxuICAgIFJFQURZOiAncGh5c2ljczpyZWFkeScsXG4gICAgSU5JVDogJ3BoeXNpY3M6aW5pdCcsXG4gICAgVVBEQVRFOiAncGh5c2ljczp1cGRhdGUnLFxuICAgIFxuICAgIEFERDoge1xuICAgICAgICBCT1g6ICdwaHlzaWNzOmFkZDpib3gnLFxuICAgICAgICBWRUhJQ0xFOiAncGh5c2ljczphZGQ6dmVoaWNsZScsXG4gICAgICAgIE1PREVMOiAncGh5c2ljczphZGQ6bW9kZWwnLFxuICAgICAgICBQTEFZRVI6ICdwaHlzaWNzOmFkZDpwbGF5ZXInLFxuICAgICAgICBTUEhFUkU6ICdwaHlzaWNzOmFkZDpzcGhlcmUnLFxuICAgIH0sXG5cbiAgICBFTEVNRU5UOiB7XG4gICAgICAgIERJU1BPU0U6ICdwaHlzaWNzOmVsZW1lbnQ6ZGlzcG9zZScsXG4gICAgICAgIENPTExJU0lPTjogJ3BoeXNpY3M6ZWxlbWVudDpjb2xsaXNpb24nLFxuICAgICAgICBVUERBVEU6ICdwaHlzaWNzOmVsZW1lbnQ6dXBkYXRlJyxcbiAgICAgICAgQ1JFQVRFRDogJ3BoeXNpY3M6ZWxlbWVudDpjcmVhdGVkJyxcblxuICAgICAgICBTRVQ6IHtcbiAgICAgICAgICAgIFBPU0lUSU9OOiAncGh5c2ljczplbGVtZW50OnNldDpwb3NpdGlvbicsXG4gICAgICAgICAgICBRVUFURVJOSU9OOiAncGh5c2ljczplbGVtZW50OnNldDpxdWF0ZXJuaW9uJyxcbiAgICAgICAgICAgIExJTkVBUl9WRUxPQ0lUWTogJ3BoeXNpY3M6ZWxlbWVudDpzZXQ6bGluZWFyX3ZlbG9jaXR5J1xuICAgICAgICB9LFxuXG4gICAgICAgIEFQUExZOiB7XG4gICAgICAgICAgICBJTVBVTFNFOiAncGh5c2ljczplbGVtZW50OmFwcGx5OmltcHVsc2UnXG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgVkVISUNMRToge1xuICAgICAgICBTRVQ6IHtcbiAgICAgICAgICAgIFBPU0lUSU9OOiAncGh5c2ljczp2ZWhpY2xlOnNldDpwb3NpdGlvbicsXG4gICAgICAgICAgICBRVUFURVJOSU9OOiAncGh5c2ljczp2ZWhpY2xlOnNldDpxdWF0ZXJuaW9uJ1xuICAgICAgICB9LFxuICAgICAgICBSRVNFVDogJ3BoeXNpY3M6dmVoaWNsZTpyZXNldCcsXG4gICAgICAgIFxuICAgICAgICBTUEVFRDogJ3BoeXNpY3M6dmVoaWNsZTpzcGVlZCcsXG4gICAgICAgIERJUkVDVElPTjogJ3BoeXNpY3M6dmVoaWNsZTpkaXJlY3Rpb24nXG4gICAgfSxcblxuICAgIEVGRkVDVFM6IHtcbiAgICAgICAgRVhQTE9TSU9OOiAncGh5c2ljczplZmZlY3RzOmV4cGxvc2lvbidcbiAgICB9XG59OyIsImltcG9ydCB7IFBIWVNJQ1NfRVZFTlRTIH0gZnJvbSAnLi4vLi4vbWVzc2FnZXMnO1xuXG5leHBvcnQgY2xhc3MgRGlzcGF0Y2hlciB7XG5cbiAgICBzZW5kUGh5c2ljc1VwZGF0ZSA9IGR0ID0+IHBvc3RNZXNzYWdlKHsgZXZlbnQ6IFBIWVNJQ1NfRVZFTlRTLlVQREFURSwgZHQgfSlcbiAgICBzZW5kUmVhZHlFdmVudCA9ICgpID0+IHBvc3RNZXNzYWdlKHsgZXZlbnQ6IFBIWVNJQ1NfRVZFTlRTLlJFQURZIH0pO1xuICAgIHNlbmRUZXJtaW5hdGVFdmVudCA9ICgpID0+IHBvc3RNZXNzYWdlKHsgZXZlbnQ6IFBIWVNJQ1NfRVZFTlRTLlRFUk1JTkFURSB9KTtcblxuICAgIHNlbmRCb2R5VXBkYXRlID0gKHV1aWQsIHBvc2l0aW9uLCByb3RhdGlvbiwgZHQsIGV4dHJhRGF0YSkgPT4gcG9zdE1lc3NhZ2Uoe1xuICAgICAgICBldmVudDogUEhZU0lDU19FVkVOVFMuRUxFTUVOVC5VUERBVEUsXG4gICAgICAgIHV1aWQsXG4gICAgICAgIHBvc2l0aW9uOiB7IHg6IHBvc2l0aW9uLngoKSwgeTogcG9zaXRpb24ueSgpLCB6OiBwb3NpdGlvbi56KCkgfSxcbiAgICAgICAgcXVhdGVybmlvbjogeyB4OiByb3RhdGlvbi54KCksIHk6IHJvdGF0aW9uLnkoKSwgejogcm90YXRpb24ueigpLCB3OiByb3RhdGlvbi53KCkgfSxcbiAgICAgICAgLi4uZXh0cmFEYXRhLFxuICAgICAgICBkdFxuICAgIH0pO1xuXG4gICAgc2VuZERpc3BhdGNoRXZlbnQgPSAodXVpZCwgZXZlbnROYW1lLCBldmVudERhdGEpID0+IHBvc3RNZXNzYWdlKHtcbiAgICAgICAgZXZlbnQ6IFBIWVNJQ1NfRVZFTlRTLkRJU1BBVENILFxuICAgICAgICB1dWlkLFxuICAgICAgICBldmVudE5hbWUsXG4gICAgICAgIGV2ZW50RGF0YVxuICAgIH0pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgbmV3IERpc3BhdGNoZXIoKTsiLCJleHBvcnQgY29uc3QgYXBwbHlNYXRyaXg0VG9WZWN0b3IzID0gKHsgeCA9IDAsIHkgPSAwLCB6ID0gMCB9LCBtYXRyaXggPSBbXSkgPT4ge1xuICAgIGNvbnN0IHcgPSAxIC8gKCBtYXRyaXhbIDMgXSAqIHggKyBtYXRyaXhbIDcgXSAqIHkgKyBtYXRyaXhbIDExIF0gKiB6ICsgbWF0cml4WyAxNSBdICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB4OiAoIG1hdHJpeFsgMCBdICogeCArIG1hdHJpeFsgNCBdICogeSArIG1hdHJpeFsgOCBdICogeiArIG1hdHJpeFsgMTIgXSApICogdyxcbiAgICAgICAgeTogKCBtYXRyaXhbIDEgXSAqIHggKyBtYXRyaXhbIDUgXSAqIHkgKyBtYXRyaXhbIDkgXSAqIHogKyBtYXRyaXhbIDEzIF0gKSAqIHcsXG4gICAgICAgIHo6ICggbWF0cml4WyAyIF0gKiB4ICsgbWF0cml4WyA2IF0gKiB5ICsgbWF0cml4WyAxMCBdICogeiArIG1hdHJpeFsgMTQgXSApICogdyxcbiAgICB9XG59OyIsImltcG9ydCBkaXNwYXRjaGVyIGZyb20gJy4vbGliL2Rpc3BhdGNoZXInO1xuaW1wb3J0IHdvcmxkIGZyb20gJy4vd29ybGQnO1xuXG5pbXBvcnQge1xuICAgIGFwcGx5TWF0cml4NFRvVmVjdG9yM1xufSBmcm9tICcuL2xpYi9tYXRoJztcblxuaW1wb3J0IHtcbiAgICBERUZBVUxUX1JJR0lEQk9EWV9TVEFURSxcbiAgICBUWVBFUyxcbiAgICBERUZBVUxUX1NDQUxFLFxuICAgIERJU0FCTEVfREVBQ1RJVkFUSU9OLFxuICAgIERFRkFVTFRfTElORUFSX1ZFTE9DSVRZLFxuICAgIERFRkFVTFRfSU1QVUxTRVxufSBmcm9tICcuLi9jb25zdGFudHMnO1xuXG5leHBvcnQgY29uc3QgY3JlYXRlUmlnaWRCb2R5ID0gKHNoYXBlLCBvcHRpb25zKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgICB1dWlkLFxuICAgICAgICBwb3NpdGlvbixcbiAgICAgICAgcXVhdGVybmlvbixcbiAgICAgICAgbWFzcyxcbiAgICAgICAgZnJpY3Rpb24sXG4gICAgICAgIHJlc3RpdHV0aW9uID0gLjksXG4gICAgICAgIGRhbXBpbmcgPSB7IGxpbmVhcjogMC4yLCBhbmd1bGFyOiAwLjIgfVxuICAgIH0gPSBvcHRpb25zO1xuXG4gICAgY29uc3QgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTtcblxuICAgIHRyYW5zZm9ybS5zZXRJZGVudGl0eSgpO1xuICAgIHRyYW5zZm9ybS5zZXRPcmlnaW4obmV3IEFtbW8uYnRWZWN0b3IzKHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHBvc2l0aW9uLnopKTtcbiAgICB0cmFuc2Zvcm0uc2V0Um90YXRpb24obmV3IEFtbW8uYnRRdWF0ZXJuaW9uKHF1YXRlcm5pb24ueCwgcXVhdGVybmlvbi55LCBxdWF0ZXJuaW9uLnosIHF1YXRlcm5pb24udykpO1xuICAgIGNvbnN0IG1vdGlvblN0YXRlID0gbmV3IEFtbW8uYnREZWZhdWx0TW90aW9uU3RhdGUodHJhbnNmb3JtKTtcbiAgICBjb25zdCBsb2NhbEluZXJ0aWEgPSBuZXcgQW1tby5idFZlY3RvcjMoMCwgMCwgMCk7XG4gICAgc2hhcGUuY2FsY3VsYXRlTG9jYWxJbmVydGlhKG1hc3MsIGxvY2FsSW5lcnRpYSk7XG5cbiAgICBjb25zdCByYkluZm8gPSBuZXcgQW1tby5idFJpZ2lkQm9keUNvbnN0cnVjdGlvbkluZm8obWFzcywgbW90aW9uU3RhdGUsIHNoYXBlLCBsb2NhbEluZXJ0aWEpO1xuICAgIGNvbnN0IGJvZHkgPSBuZXcgQW1tby5idFJpZ2lkQm9keShyYkluZm8pO1xuXG4gICAgXG5cbiAgICBpZiAobWFzcyA+IDApIHtcbiAgICAgICAgYm9keS5zZXRGcmljdGlvbihmcmljdGlvbik7XG4gICAgICAgIGJvZHkuc2V0UmVzdGl0dXRpb24ocmVzdGl0dXRpb24pO1xuICAgICAgICBib2R5LnNldERhbXBpbmcoZGFtcGluZy5saW5lYXIsIGRhbXBpbmcuYW5ndWxhcik7XG4gICAgICAgIGJvZHkuc2V0QWN0aXZhdGlvblN0YXRlKERJU0FCTEVfREVBQ1RJVkFUSU9OKTtcbiAgICB9XG5cbiAgICAvLyBzdG9yaW5nIHV1aWQgZm9yIGZ1dHVyZSByZWZlcmVuY2VcbiAgICBib2R5LnV1aWQgPSB1dWlkO1xuXG4gICAgd29ybGQuYWRkUmlnaWRCb2R5KGJvZHkpO1xuXG4gICAgcmV0dXJuIGJvZHk7XG59XG5cbmV4cG9ydCBjb25zdCBhZGRNb2RlbCA9IChvcHRpb25zKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgICB1dWlkLFxuICAgICAgICB2ZXJ0aWNlcyxcbiAgICAgICAgbWF0cmljZXMsXG4gICAgICAgIGluZGV4ZXMsXG4gICAgICAgIHBvc2l0aW9uLFxuICAgICAgICBxdWF0ZXJuaW9uLFxuICAgICAgICBtYXNzID0gMCxcbiAgICAgICAgZnJpY3Rpb24gPSAyXG4gICAgfSA9IG9wdGlvbnM7XG5cbiAgICBjb25zdCBzY2FsZSA9IERFRkFVTFRfU0NBTEU7XG5cbiAgICBjb25zdCBidGEgPSBuZXcgQW1tby5idFZlY3RvcjMoKTtcbiAgICBjb25zdCBidGIgPSBuZXcgQW1tby5idFZlY3RvcjMoKTtcbiAgICBjb25zdCBidGMgPSBuZXcgQW1tby5idFZlY3RvcjMoKTtcbiAgICBjb25zdCB0cmlNZXNoID0gbmV3IEFtbW8uYnRUcmlhbmdsZU1lc2godHJ1ZSwgZmFsc2UpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2ZXJ0aWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdmVydGljZXNbaV07XG4gICAgICAgIGNvbnN0IGluZGV4ID0gaW5kZXhlc1tpXSA/IGluZGV4ZXNbaV0gOiBudWxsO1xuICAgICAgICBjb25zdCBtYXRyaXggPSBBcnJheS5mcm9tKG1hdHJpY2VzW2ldKTtcblxuICAgICAgICBpZiAoaW5kZXgpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgaW5kZXgubGVuZ3RoOyBqICs9IDMpIHtcbiAgICAgICAgICAgIGNvbnN0IGFpID0gaW5kZXhbal0gKiAzO1xuICAgICAgICAgICAgY29uc3QgYmkgPSBpbmRleFtqICsgMV0gKiAzO1xuICAgICAgICAgICAgY29uc3QgY2kgPSBpbmRleFtqICsgMl0gKiAzO1xuXG4gICAgICAgICAgICBjb25zdCB2YSA9IGFwcGx5TWF0cml4NFRvVmVjdG9yMyh7IHg6IGNvbXBvbmVudHNbYWldLCB5OiBjb21wb25lbnRzW2FpICsgMV0sIHo6IGNvbXBvbmVudHNbYWkgKyAyXSB9LCBtYXRyaXgpO1xuICAgICAgICAgICAgY29uc3QgdmIgPSBhcHBseU1hdHJpeDRUb1ZlY3RvcjMoeyB4OiBjb21wb25lbnRzW2JpXSwgeTogY29tcG9uZW50c1tiaSArIDFdLCB6OiBjb21wb25lbnRzW2JpICsgMl0gfSwgbWF0cml4KTtcbiAgICAgICAgICAgIGNvbnN0IHZjID0gYXBwbHlNYXRyaXg0VG9WZWN0b3IzKHsgeDogY29tcG9uZW50c1tjaV0sIHk6IGNvbXBvbmVudHNbY2kgKyAxXSwgejogY29tcG9uZW50c1tjaSArIDJdIH0sIG1hdHJpeCk7XG5cbiAgICAgICAgICAgIGJ0YS5zZXRWYWx1ZSh2YS54LCB2YS55LCB2YS56KTtcbiAgICAgICAgICAgIGJ0Yi5zZXRWYWx1ZSh2Yi54LCB2Yi55LCB2Yi56KTtcbiAgICAgICAgICAgIGJ0Yy5zZXRWYWx1ZSh2Yy54LCB2Yy55LCB2Yy56KTtcbiAgICAgICAgICAgIHRyaU1lc2guYWRkVHJpYW5nbGUoYnRhLCBidGIsIGJ0YywgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb21wb25lbnRzLmxlbmd0aDsgaiArPSA5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmEgPSBhcHBseU1hdHJpeDRUb1ZlY3RvcjMoeyB4OiBjb21wb25lbnRzW2ogKyAwXSwgeTogY29tcG9uZW50c1tqICsgMV0sIHo6IGNvbXBvbmVudHNbaiArIDJdIH0sIG1hdHJpeCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdmIgPSBhcHBseU1hdHJpeDRUb1ZlY3RvcjMoeyB4OiBjb21wb25lbnRzW2ogKyAzXSwgeTogY29tcG9uZW50c1tqICsgNF0sIHo6IGNvbXBvbmVudHNbaiArIDVdIH0sIG1hdHJpeCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdmMgPSBhcHBseU1hdHJpeDRUb1ZlY3RvcjMoeyB4OiBjb21wb25lbnRzW2ogKyA2XSwgeTogY29tcG9uZW50c1tqICsgN10sIHo6IGNvbXBvbmVudHNbaiArIDhdIH0sIG1hdHJpeCk7XG5cbiAgICAgICAgICAgICAgICBidGEuc2V0VmFsdWUodmEueCwgdmEueSwgdmEueik7XG4gICAgICAgICAgICAgICAgYnRiLnNldFZhbHVlKHZiLngsIHZiLnksIHZiLnopO1xuICAgICAgICAgICAgICAgIGJ0Yy5zZXRWYWx1ZSh2Yy54LCB2Yy55LCB2Yy56KTtcbiAgICAgICAgICAgICAgICB0cmlNZXNoLmFkZFRyaWFuZ2xlKGJ0YSwgYnRiLCBidGMsIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGxvY2FsU2NhbGUgPSBuZXcgQW1tby5idFZlY3RvcjMoc2NhbGUueCwgc2NhbGUueSwgc2NhbGUueik7XG4gICAgdHJpTWVzaC5zZXRTY2FsaW5nKGxvY2FsU2NhbGUpO1xuICAgIEFtbW8uZGVzdHJveShsb2NhbFNjYWxlKTtcblxuICAgIGNvbnN0IGNvbGxpc2lvblNoYXBlID0gbmV3IEFtbW8uYnRCdmhUcmlhbmdsZU1lc2hTaGFwZSh0cmlNZXNoLCB0cnVlLCB0cnVlKTtcbiAgICBjb2xsaXNpb25TaGFwZS5yZXNvdXJjZXMgPSBbdHJpTWVzaF07XG5cbiAgICBBbW1vLmRlc3Ryb3koYnRhKTtcbiAgICBBbW1vLmRlc3Ryb3koYnRiKTtcbiAgICBBbW1vLmRlc3Ryb3koYnRjKTtcblxuICAgIGNvbnN0IGJvZHkgPSBjcmVhdGVSaWdpZEJvZHkoY29sbGlzaW9uU2hhcGUsIHsgdXVpZCwgcG9zaXRpb24sIHF1YXRlcm5pb24sIG1hc3MsIGZyaWN0aW9uIH0pO1xuICAgIHdvcmxkLmFkZEVsZW1lbnQoeyB1dWlkLCBib2R5LCB0eXBlOiBUWVBFUy5NRVNILCBzdGF0ZTogREVGQVVMVF9SSUdJREJPRFlfU1RBVEUgfSk7XG59XG5cbmV4cG9ydCBjb25zdCBhZGRCb3ggPSAoZGF0YSkgPT4ge1xuICAgIGNvbnN0IHsgdXVpZCwgd2lkdGgsIGxlbmd0aCwgaGVpZ2h0LCBwb3NpdGlvbiwgcXVhdGVybmlvbiwgbWFzcyA9IDAsIGZyaWN0aW9uID0gMiB9ID0gZGF0YTtcblxuICAgIGNvbnN0IGdlb21ldHJ5ID0gbmV3IEFtbW8uYnRCb3hTaGFwZShuZXcgQW1tby5idFZlY3RvcjMod2lkdGggKiAwLjUsIGhlaWdodCAqIDAuNSwgbGVuZ3RoICogMC41KSk7XG4gICAgY29uc3QgYm9keSA9IGNyZWF0ZVJpZ2lkQm9keShnZW9tZXRyeSwgeyB1dWlkLCBwb3NpdGlvbiwgcXVhdGVybmlvbiwgbWFzcywgZnJpY3Rpb24gfSk7XG5cbiAgICB3b3JsZC5hZGRFbGVtZW50KHsgdXVpZCwgYm9keSwgdHlwZTogVFlQRVMuQk9YLCBzdGF0ZTogREVGQVVMVF9SSUdJREJPRFlfU1RBVEUgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkU3BoZXJlID0gZGF0YSA9PiB7XG4gICAgY29uc3QgeyB1dWlkLCByYWRpdXMsIHBvc2l0aW9uLCBxdWF0ZXJuaW9uLCBtYXNzID0gMCwgZnJpY3Rpb24gPSAyIH0gPSBkYXRhO1xuXG4gICAgY29uc3QgZ2VvbWV0cnkgPSBuZXcgQW1tby5idFNwaGVyZVNoYXBlKHJhZGl1cyk7XG4gICAgY29uc3QgYm9keSA9IGNyZWF0ZVJpZ2lkQm9keShnZW9tZXRyeSwgeyB1dWlkLCBwb3NpdGlvbiwgcXVhdGVybmlvbiwgbWFzcywgZnJpY3Rpb24gfSk7XG5cbiAgICB3b3JsZC5hZGRFbGVtZW50KHsgdXVpZCwgYm9keSwgdHlwZTogVFlQRVMuU1BIRVJFLCBzdGF0ZTogREVGQVVMVF9SSUdJREJPRFlfU1RBVEUgfSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0TGluZWFyVmVsb2NpdHkgPSAoZGF0YSkgPT4ge1xuICAgIGNvbnN0IHsgdXVpZCwgdmVsb2NpdHkgPSBERUZBVUxUX0xJTkVBUl9WRUxPQ0lUWSB9ID0gZGF0YTtcbiAgICBjb25zdCB7IGJvZHkgfSA9IHdvcmxkLmdldEVsZW1lbnQodXVpZCk7XG4gICAgY29uc3QgbW90aW9uU3RhdGUgPSBib2R5LmdldE1vdGlvblN0YXRlKCk7XG5cbiAgICBpZiAobW90aW9uU3RhdGUpIHtcbiAgICAgICAgY29uc3QgbGluZWFyVmVsb2NpdHkgPSBuZXcgQW1tby5idFZlY3RvcjModmVsb2NpdHkueCwgdmVsb2NpdHkueSwgdmVsb2NpdHkueik7XG4gICAgICAgIGJvZHkuc2V0TGluZWFyVmVsb2NpdHkobGluZWFyVmVsb2NpdHkpO1xuICAgICAgICBBbW1vLmRlc3Ryb3kobGluZWFyVmVsb2NpdHkpO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBzZXRQb3NpdGlvbiA9IGRhdGEgPT4ge1xuICAgIGNvbnN0IHsgdXVpZCwgcG9zaXRpb24gfSA9IGRhdGE7XG4gICAgY29uc3QgeyBib2R5IH0gPSB3b3JsZC5nZXRFbGVtZW50KHV1aWQpO1xuXG4gICAgY29uc3QgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTtcblxuICAgIGJvZHkuZ2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTtcbiAgICB0cmFuc2Zvcm0uc2V0T3JpZ2luKG5ldyBBbW1vLmJ0VmVjdG9yMyhwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56ICkpO1xuXG4gICAgYm9keS5zZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pO1xufVxuXG5leHBvcnQgY29uc3QgYXBwbHlJbXB1c2UgPSAoeyB1dWlkLCBpbXB1bHNlID0gREVGQVVMVF9JTVBVTFNFIH0pID0+IHtcbiAgICBjb25zdCB7IGJvZHkgfSA9IHdvcmxkLmdldEVsZW1lbnQodXVpZCk7XG4gICAgY29uc3QgbW90aW9uU3RhdGUgPSBib2R5LmdldE1vdGlvblN0YXRlKCk7XG5cbiAgICBpZiAobW90aW9uU3RhdGUpIHtcbiAgICAgICAgY29uc3QgaW1wdWxzZVZlY3RvciA9IG5ldyBBbW1vLmJ0VmVjdG9yMyhpbXB1bHNlLngsIGltcHVsc2UueSwgaW1wdWxzZS56KTtcbiAgICAgICAgYm9keS5hcHBseUNlbnRyYWxJbXB1bHNlKGltcHVsc2VWZWN0b3IpO1xuICAgICAgICBBbW1vLmRlc3Ryb3koaW1wdWxzZVZlY3Rvcik7XG4gICAgfVxufVxuXG5leHBvcnQgY29uc3QgaGFuZGxlRWxlbWVudFVwZGF0ZSA9ICh7IGJvZHksIHV1aWQsIHN0YXRlID0gREVGQVVMVF9SSUdJREJPRFlfU1RBVEUgfSwgZHQpID0+IHtcbiAgICBjb25zdCBtb3Rpb25TdGF0ZSA9IGJvZHkuZ2V0TW90aW9uU3RhdGUoKTtcblxuICAgIGlmIChtb3Rpb25TdGF0ZSkge1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpO1xuXG4gICAgICAgIG1vdGlvblN0YXRlLmdldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7XG4gICAgICAgIGxldCBvcmlnaW4gPSB0cmFuc2Zvcm0uZ2V0T3JpZ2luKCk7XG4gICAgICAgIGxldCByb3RhdGlvbiA9IHRyYW5zZm9ybS5nZXRSb3RhdGlvbigpO1xuXG4gICAgICAgIGRpc3BhdGNoZXIuc2VuZEJvZHlVcGRhdGUodXVpZCwgb3JpZ2luLCByb3RhdGlvbiwgZHQpO1xuICAgICAgICBBbW1vLmRlc3Ryb3kodHJhbnNmb3JtKTtcbiAgICB9XG59IiwiaW1wb3J0IHsgY3JlYXRlUmlnaWRCb2R5IH0gZnJvbSAnLi9lbGVtZW50cyc7XG5pbXBvcnQgd29ybGQgZnJvbSAnLi93b3JsZCc7XG5cbmltcG9ydCB7XG4gICAgVFlQRVMsXG4gICAgREVGQVVMVF9SSUdJREJPRFlfU1RBVEVcbn0gZnJvbSAnLi4vY29uc3RhbnRzJztcblxuZXhwb3J0IGNvbnN0IGFkZFBsYXllciA9IChkYXRhKSA9PiB7XG4gICAgY29uc3QgeyB1dWlkLCB3aWR0aCwgaGVpZ2h0LCBwb3NpdGlvbiwgcXVhdGVybmlvbiwgbWFzcywgZnJpY3Rpb24gfSA9IGRhdGE7XG5cbiAgICBjb25zdCBjYXBzdWxlID0gbmV3IEFtbW8uYnRDYXBzdWxlU2hhcGUod2lkdGgsIGhlaWdodCk7XG4gICAgY29uc3QgYm9keSA9IGNyZWF0ZVJpZ2lkQm9keShjYXBzdWxlLCB7IHV1aWQsIHBvc2l0aW9uLCBxdWF0ZXJuaW9uLCBtYXNzLCBmcmljdGlvbiB9KTtcblxuICAgIC8vIGRpc2FibGlpbmcgcm90YXRpb24gZm9yIGNvbGxpc2lvbnNcbiAgICBib2R5LnNldEFuZ3VsYXJGYWN0b3IoMCk7XG5cbiAgICB3b3JsZC5hZGRSaWdpZEJvZHkoYm9keSk7XG4gICAgd29ybGQuYWRkRWxlbWVudCh7IHV1aWQsIGJvZHksIHR5cGU6IFRZUEVTLlBMQVlFUiwgc3RhdGU6IERFRkFVTFRfUklHSURCT0RZX1NUQVRFIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGhhbmRsZVBsYXllclVwZGF0ZSA9ICh7IGJvZHksIHV1aWQsIHN0YXRlID0gREVGQVVMVF9SSUdJREJPRFlfU1RBVEUgfSwgZHQpID0+IHtcbiAgICBjb25zdCB7IG1vdmVtZW50LCBkaXJlY3Rpb24sIGNhbWVyYURpcmVjdGlvbiwgcXVhdGVybmlvbiwgcG9zaXRpb24gfSA9IHN0YXRlO1xuXG4gICAgY29uc3QgTUFYX1NQRUVEID0gMTtcbiAgICBjb25zdCB3YWxrVmVsb2NpdHkgPSAuMTtcblxuICAgIGNvbnN0IG1vdGlvblN0YXRlID0gYm9keS5nZXRNb3Rpb25TdGF0ZSgpO1xuXG4gICAgaWYgKG1vdGlvblN0YXRlKSB7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7XG4gICAgICAgIG1vdGlvblN0YXRlLmdldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7XG5cbiAgICAgICAgY29uc3QgbGluZWFyVmVsb2NpdHkgPSBib2R5LmdldExpbmVhclZlbG9jaXR5KCk7XG4gICAgICAgIGNvbnN0IHNwZWVkID0gbGluZWFyVmVsb2NpdHkubGVuZ3RoKCk7XG5cbiAgICAgICAgY29uc3QgZm9yd2FyZERpciA9IHRyYW5zZm9ybS5nZXRCYXNpcygpLmdldFJvdygyKTtcbiAgICAgICAgZm9yd2FyZERpci5ub3JtYWxpemUoKTtcbiAgICAgICAgY29uc3Qgd2Fsa0RpcmVjdGlvbiA9IG5ldyBBbW1vLmJ0VmVjdG9yMygwLjAsIDAuMCwgMC4wKTtcblxuICAgICAgICBjb25zdCB3YWxrU3BlZWQgPSB3YWxrVmVsb2NpdHkgKiBkdDtcblxuICAgICAgICBpZiAobW92ZW1lbnQuZm9yd2FyZCkge1xuICAgICAgICAgICAgd2Fsa0RpcmVjdGlvbi5zZXRYKCB3YWxrRGlyZWN0aW9uLngoKSArIGZvcndhcmREaXIueCgpKTtcbiAgICAgICAgICAgIC8vd2Fsa0RpcmVjdGlvbi5zZXRZKCB3YWxrRGlyZWN0aW9uLnkoKSArIGZvcndhcmREaXIueSgpKTtcbiAgICAgICAgICAgIHdhbGtEaXJlY3Rpb24uc2V0Wiggd2Fsa0RpcmVjdGlvbi56KCkgKyBmb3J3YXJkRGlyLnooKSk7XG4gICAgICAgIH1cbiAgICBcbiAgICAgICAgaWYgKG1vdmVtZW50LmJhY2t3YXJkcykge1xuICAgICAgICAgICAgd2Fsa0RpcmVjdGlvbi5zZXRYKCB3YWxrRGlyZWN0aW9uLngoKSAtIGZvcndhcmREaXIueCgpKTtcbiAgICAgICAgICAgIC8vd2Fsa0RpcmVjdGlvbi5zZXRZKCB3YWxrRGlyZWN0aW9uLnkoKSAtIGZvcndhcmREaXIueSgpKTtcbiAgICAgICAgICAgIHdhbGtEaXJlY3Rpb24uc2V0Wiggd2Fsa0RpcmVjdGlvbi56KCkgLSBmb3J3YXJkRGlyLnooKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW1vdmVtZW50LmZvcndhcmQgJiYgIW1vdmVtZW50LmJhY2t3YXJkcykge1xuICAgICAgICAgICAgbGluZWFyVmVsb2NpdHkuc2V0WChsaW5lYXJWZWxvY2l0eS54KCkgKiAwLjIpO1xuICAgICAgICAgICAgbGluZWFyVmVsb2NpdHkuc2V0WihsaW5lYXJWZWxvY2l0eS56KCkgKiAwLjIpO1xuICAgICAgICB9IGVsc2UgaWYgKHNwZWVkIDwgTUFYX1NQRUVEKSB7XG4gICAgICAgICAgICBsaW5lYXJWZWxvY2l0eS5zZXRYKGxpbmVhclZlbG9jaXR5LngoKSArIGNhbWVyYURpcmVjdGlvbi54ICogd2Fsa1NwZWVkKTtcbiAgICAgICAgICAgIGxpbmVhclZlbG9jaXR5LnNldFoobGluZWFyVmVsb2NpdHkueigpICsgY2FtZXJhRGlyZWN0aW9uLnogKiB3YWxrU3BlZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgYm9keS5zZXRMaW5lYXJWZWxvY2l0eShsaW5lYXJWZWxvY2l0eSk7XG5cbiAgICAgICAgYm9keS5nZXRNb3Rpb25TdGF0ZSgpLnNldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7XG4gICAgICAgIGJvZHkuc2V0Q2VudGVyT2ZNYXNzVHJhbnNmb3JtKHRyYW5zZm9ybSk7XG5cbiAgICAgICAgbGV0IG9yaWdpbiA9IHRyYW5zZm9ybS5nZXRPcmlnaW4oKTtcbiAgICAgICAgbGV0IHJvdGF0aW9uID0gdHJhbnNmb3JtLmdldFJvdGF0aW9uKCk7XG5cbiAgICAgICAgZGlzcGF0Y2hlci5zZW5kQm9keVVwZGF0ZSh1dWlkLCBvcmlnaW4sIHJvdGF0aW9uLCBkdCk7XG4gICAgfVxufTsiLCJpbXBvcnQge1xuICAgIEdSQVZJVFksXG4gICAgVFlQRVNcbn0gZnJvbSAnLi4vY29uc3RhbnRzJztcblxuaW1wb3J0IHsgaGFuZGxlRWxlbWVudFVwZGF0ZSB9IGZyb20gJy4vZWxlbWVudHMnO1xuaW1wb3J0IHsgaGFuZGxlVmVoaWNsZVVwZGF0ZSB9IGZyb20gJy4vdmVoaWNsZXMnO1xuaW1wb3J0IHsgaGFuZGxlUGxheWVyVXBkYXRlIH0gZnJvbSAnLi9wbGF5ZXInO1xuXG5pbXBvcnQgZGlzcGF0Y2hlciBmcm9tICcuL2xpYi9kaXNwYXRjaGVyJztcbmltcG9ydCB7IFBIWVNJQ1NfRVZFTlRTIH0gZnJvbSAnLi4vbWVzc2FnZXMnO1xuXG5jbGFzcyBDbG9jayB7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy50aW1lc3RhbXAgPSBudWxsO1xuICAgIH1cblxuICAgIGdldERlbHRhKCkge1xuICAgICAgICBjb25zdCB0aW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgaWYgKHRoaXMudGltZXN0YW1wKSB7XG4gICAgICAgICAgICBjb25zdCBkZWx0YSA9IHRpbWUgLSB0aGlzLnRpbWVzdGFtcDtcbiAgICAgICAgICAgIHRoaXMudGltZXN0YW1wID0gdGltZTtcblxuICAgICAgICAgICAgcmV0dXJuIGRlbHRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50aW1lc3RhbXAgPSB0aW1lO1xuXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBXb3JsZCB7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50cyA9IHt9O1xuICAgICAgICB0aGlzLmluaXRpYWxpc2VkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5jb2xsaXNpb25Db25maWd1cmF0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmRpc3BhdGNoZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuYnJvYWRwaGFzZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5zb2x2ZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuZHluYW1pY3NXb3JsZCA9IHVuZGVmaW5lZDtcblxuICAgICAgICB0aGlzLnJlcXVlc3RBbmltYXRpb25GcmFtZUlkID0gbnVsbDtcbiAgICAgICAgdGhpcy5jbG9jayA9IG5ldyBDbG9jaygpO1xuICAgIH1cblxuICAgIGluaXQgPSAob3B0aW9ucykgPT4ge1xuICAgICAgICBjb25zdCB7IGdyYXZpdHkgPSBHUkFWSVRZIH0gPSBvcHRpb25zO1xuXG4gICAgICAgIHRoaXMuY29sbGlzaW9uQ29uZmlndXJhdGlvbiA9IG5ldyBBbW1vLmJ0RGVmYXVsdENvbGxpc2lvbkNvbmZpZ3VyYXRpb24oKTtcbiAgICAgICAgdGhpcy5kaXNwYXRjaGVyID0gbmV3IEFtbW8uYnRDb2xsaXNpb25EaXNwYXRjaGVyKHRoaXMuY29sbGlzaW9uQ29uZmlndXJhdGlvbik7XG4gICAgICAgIHRoaXMuYnJvYWRwaGFzZSA9IG5ldyBBbW1vLmJ0RGJ2dEJyb2FkcGhhc2UoKTtcbiAgICAgICAgdGhpcy5zb2x2ZXIgPSBuZXcgQW1tby5idFNlcXVlbnRpYWxJbXB1bHNlQ29uc3RyYWludFNvbHZlcigpO1xuICAgICAgICB0aGlzLmR5bmFtaWNzV29ybGQgPSBuZXcgQW1tby5idERpc2NyZXRlRHluYW1pY3NXb3JsZCh0aGlzLmRpc3BhdGNoZXIsIHRoaXMuYnJvYWRwaGFzZSwgdGhpcy5zb2x2ZXIsIHRoaXMuY29sbGlzaW9uQ29uZmlndXJhdGlvbik7XG4gICAgICAgIHRoaXMuZHluYW1pY3NXb3JsZC5zZXRHcmF2aXR5KG5ldyBBbW1vLmJ0VmVjdG9yMyhncmF2aXR5LngsIGdyYXZpdHkueSwgZ3Jhdml0eS56KSk7XG5cbiAgICAgICAgLy8gdGhpcyBpcyBuZWVkZWQgZm9yIGdob3N0T2JqZWN0IGNvbGxpc2lvbnNcbiAgICAgICAgdGhpcy5keW5hbWljc1dvcmxkXG4gICAgICAgICAgICAuZ2V0QnJvYWRwaGFzZSgpXG4gICAgICAgICAgICAuZ2V0T3ZlcmxhcHBpbmdQYWlyQ2FjaGUoKVxuICAgICAgICAgICAgLnNldEludGVybmFsR2hvc3RQYWlyQ2FsbGJhY2sobmV3IEFtbW8uYnRHaG9zdFBhaXJDYWxsYmFjaygpKVxuXG4gICAgICAgIHRoaXMuaW5pdGlhbGlzZWQgPSB0cnVlO1xuICAgIH07XG5cbiAgICByZW1vdmVFbGVtZW50ID0gdXVpZCA9PiB7XG4gICAgICAgIGlmICh0aGlzLmhhc0VsZW1lbnQodXVpZCkpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudHNbdXVpZF0uZGVsZXRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW1vdmVEZWxldGVkRWxlbWVudHMgPSAoKSA9PiAoXG4gICAgICAgIE9iamVjdFxuICAgICAgICAgICAgLmtleXModGhpcy5lbGVtZW50cylcbiAgICAgICAgICAgIC5maWx0ZXIodXVpZCA9PiB0aGlzLmVsZW1lbnRzW3V1aWRdLmRlbGV0ZWQpXG4gICAgICAgICAgICAuZm9yRWFjaCh1dWlkID0+IHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5lbGVtZW50c1t1dWlkXTtcbiAgICAgICAgICAgIH0pXG4gICAgKTtcblxuICAgIGhhc0VsZW1lbnQgPSB1dWlkID0+IHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuZWxlbWVudHMpLmluY2x1ZGVzKHV1aWQpO1xuICAgIH1cblxuICAgIGdldEVsZW1lbnQgPSB1dWlkID0+IHRoaXMuZWxlbWVudHNbdXVpZF07XG5cbiAgICBpc0luaXRpYWxpc2VkID0gKCkgPT4gdGhpcy5pbml0aWFsaXNlZDtcblxuICAgIGdldER5bmFtaWNzV29ybGQgPSAoKSA9PiB0aGlzLmR5bmFtaWNzV29ybGQ7XG5cbiAgICBhZGRSaWdpZEJvZHkgPSBib2R5ID0+IHtcbiAgICAgICAgdGhpcy5keW5hbWljc1dvcmxkLmFkZFJpZ2lkQm9keShib2R5KTtcbiAgICB9XG5cbiAgICBhZGRBY3Rpb24gPSBhY3Rpb24gPT4ge1xuICAgICAgICB0aGlzLmR5bmFtaWNzV29ybGQuYWRkQWN0aW9uKGFjdGlvbik7XG4gICAgfVxuXG4gICAgYWRkQ29sbGlzaW9uT2JqZWN0ID0gY29sbGlzaW9uT2JqZWN0ID0+IHtcbiAgICAgICAgdGhpcy5keW5hbWljc1dvcmxkLmFkZENvbGxpc2lvbk9iamVjdChjb2xsaXNpb25PYmplY3QpO1xuICAgIH1cblxuICAgIHN0ZXBTaW11bGF0aW9uID0gZHQgPT4ge1xuICAgICAgICB0aGlzLmR5bmFtaWNzV29ybGQuc3RlcFNpbXVsYXRpb24oZHQpO1xuICAgIH1cblxuICAgIHNpbXVsYXRlID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBkdCA9IHRoaXMuY2xvY2suZ2V0RGVsdGEoKTtcbiAgICAgICAgdGhpcy5zdGVwU2ltdWxhdGlvbihkdCk7XG5cbiAgICAgICAgT2JqZWN0XG4gICAgICAgICAgICAua2V5cyh0aGlzLmVsZW1lbnRzKVxuICAgICAgICAgICAgLmZvckVhY2godXVpZCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZ2V0RWxlbWVudCh1dWlkKTtcblxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaChlbGVtZW50LnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVFlQRVMuQk9YOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUWVBFUy5TUEhFUkU6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRZUEVTLk1FU0g6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlRWxlbWVudFVwZGF0ZShlbGVtZW50LCBkdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRZUEVTLlBMQVlFUjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVQbGF5ZXJVcGRhdGUoZWxlbWVudCwgZHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUWVBFUy5WRUhJQ0xFOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVZlaGljbGVVcGRhdGUoZWxlbWVudCwgZHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuY2FsY3VsYXRlQ29sbGlzaW9ucygpO1xuICAgICAgICB0aGlzLnJlbW92ZURlbGV0ZWRFbGVtZW50cygpO1xuXG4gICAgICAgIGRpc3BhdGNoZXIuc2VuZFBoeXNpY3NVcGRhdGUoZHQpO1xuXG4gICAgICAgIHRoaXMucmVxdWVzdEFuaW1hdGlvbkZyYW1lSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5zaW11bGF0ZS5iaW5kKHRoaXMpKTtcbiAgICB9XG5cbiAgICBjYWxjdWxhdGVDb2xsaXNpb25zID0gKCkgPT4ge1xuICAgICAgICBsZXQgYW1tb0Rpc3BhdGNoZXIgPSB0aGlzLmR5bmFtaWNzV29ybGQuZ2V0RGlzcGF0Y2hlcigpO1xuICAgICAgICBsZXQgbnVtTWFuaWZvbGRzID0gYW1tb0Rpc3BhdGNoZXIuZ2V0TnVtTWFuaWZvbGRzKCk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1NYW5pZm9sZHM7IGkrKykge1xuXG4gICAgICAgICAgICBsZXQgY29udGFjdE1hbmlmb2xkID0gYW1tb0Rpc3BhdGNoZXIuZ2V0TWFuaWZvbGRCeUluZGV4SW50ZXJuYWwoaSk7XG5cbiAgICAgICAgICAgIGxldCByYjAgPSBBbW1vLmNhc3RPYmplY3QoY29udGFjdE1hbmlmb2xkLmdldEJvZHkwKCksIEFtbW8uYnRSaWdpZEJvZHkpO1xuICAgICAgICAgICAgbGV0IHJiMSA9IEFtbW8uY2FzdE9iamVjdChjb250YWN0TWFuaWZvbGQuZ2V0Qm9keTEoKSwgQW1tby5idFJpZ2lkQm9keSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGxldCBudW1Db250YWN0cyA9IGNvbnRhY3RNYW5pZm9sZC5nZXROdW1Db250YWN0cygpO1xuXG4gICAgICAgICAgICAvLyB0aGlzIGl0ZXJhdGlvbiBkb2Vzbid0IGhhdmUgdXVpZHNcbiAgICAgICAgICAgIGlmICghcmIwLnV1aWQgfHwgIXJiMS51dWlkKSBjb250aW51ZTtcblxuICAgICAgICAgICAgbGV0IGNvbnRhY3RzID0gW107XG5cbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbnVtQ29udGFjdHM7IGorKykge1xuXG4gICAgICAgICAgICAgICAgbGV0IGNvbnRhY3RQb2ludCA9IGNvbnRhY3RNYW5pZm9sZC5nZXRDb250YWN0UG9pbnQoaik7XG4gICAgICAgICAgICAgICAgbGV0IGRpc3RhbmNlID0gY29udGFjdFBvaW50LmdldERpc3RhbmNlKCk7XG5cbiAgICAgICAgICAgICAgICBpZiggZGlzdGFuY2UgPiAwLjApIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgbGV0IHZlbG9jaXR5MCA9IHJiMC5nZXRMaW5lYXJWZWxvY2l0eSgpO1xuICAgICAgICAgICAgICAgIGxldCB2ZWxvY2l0eTEgPSByYjEuZ2V0TGluZWFyVmVsb2NpdHkoKTtcbiAgICAgICAgICAgICAgICBsZXQgd29ybGRQb3MwID0gY29udGFjdFBvaW50LmdldF9tX3Bvc2l0aW9uV29ybGRPbkEoKTtcbiAgICAgICAgICAgICAgICBsZXQgd29ybGRQb3MxID0gY29udGFjdFBvaW50LmdldF9tX3Bvc2l0aW9uV29ybGRPbkIoKTtcbiAgICAgICAgICAgICAgICBsZXQgbG9jYWxQb3MwID0gY29udGFjdFBvaW50LmdldF9tX2xvY2FsUG9pbnRBKCk7XG4gICAgICAgICAgICAgICAgbGV0IGxvY2FsUG9zMSA9IGNvbnRhY3RQb2ludC5nZXRfbV9sb2NhbFBvaW50QigpO1xuXG4gICAgICAgICAgICAgICAgY29udGFjdHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGRpc3RhbmNlLFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50czpbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXVpZDogcmIwLnV1aWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVsb2NpdHk6IHsgeDogdmVsb2NpdHkwLngoKSwgeTogdmVsb2NpdHkwLnkoKSwgejogdmVsb2NpdHkwLnooKSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmxkUG9zOiB7IHg6IHdvcmxkUG9zMC54KCksIHk6IHdvcmxkUG9zMC55KCksIHo6IHdvcmxkUG9zMC56KCkgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFBvczogeyB4OiBsb2NhbFBvczAueCgpLCB5OiBsb2NhbFBvczAueSgpLCB6OiBsb2NhbFBvczAueigpIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXVpZDogcmIxLnV1aWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVsb2NpdHk6IHsgeDogdmVsb2NpdHkxLngoKSwgeTogdmVsb2NpdHkxLnkoKSwgejogdmVsb2NpdHkxLnooKSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmxkUG9zOiB7IHg6IHdvcmxkUG9zMS54KCksIHk6IHdvcmxkUG9zMS55KCksIHo6IHdvcmxkUG9zMS56KCkgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFBvczogeyB4OiBsb2NhbFBvczEueCgpLCB5OiBsb2NhbFBvczEueSgpLCB6OiBsb2NhbFBvczEueigpIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkaXNwYXRjaGVyLnNlbmREaXNwYXRjaEV2ZW50KHJiMC51dWlkLCBQSFlTSUNTX0VWRU5UUy5FTEVNRU5ULkNPTExJU0lPTiwgeyBjb250YWN0cyB9KTtcbiAgICAgICAgICAgIGRpc3BhdGNoZXIuc2VuZERpc3BhdGNoRXZlbnQocmIxLnV1aWQsIFBIWVNJQ1NfRVZFTlRTLkVMRU1FTlQuQ09MTElTSU9OLCB7IGNvbnRhY3RzIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkRWxlbWVudCA9IGRhdGEgPT4ge1xuICAgICAgICB0aGlzLmVsZW1lbnRzW2RhdGEudXVpZF0gPSBkYXRhO1xuICAgIH1cblxuICAgIHVwZGF0ZUJvZHlTdGF0ZSA9ICh7IHV1aWQsIHN0YXRlIH0pID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaGFzRWxlbWVudCh1dWlkKSkge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50c1t1dWlkXS5zdGF0ZSA9IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLmVsZW1lbnRzW3V1aWRdLnN0YXRlLFxuICAgICAgICAgICAgICAgIC4uLnN0YXRlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGlzcG9zZUJvZHkoeyB1dWlkIH0pIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZ2V0RWxlbWVudCh1dWlkKTtcbiAgICAgICAgdGhpcy5keW5hbWljc1dvcmxkLnJlbW92ZVJpZ2lkQm9keShlbGVtZW50LmJvZHkpO1xuICAgICAgICB0aGlzLnJlbW92ZUVsZW1lbnQodXVpZCk7XG5cbiAgICAgICAgZGlzcGF0Y2hlci5zZW5kRWxlbWVudERpc3Bvc2VkKHsgdXVpZCB9KTtcbiAgICB9XG5cbiAgICB0ZXJtaW5hdGUgPSAoKSA9PiB7XG4gICAgICAgIEFtbW8uZGVzdHJveSh0aGlzLmR5bmFtaWNzV29ybGQpO1xuICAgICAgICBBbW1vLmRlc3Ryb3kodGhpcy5zb2x2ZXIpO1xuICAgICAgICBBbW1vLmRlc3Ryb3kodGhpcy5kaXNwYXRjaGVyKTtcbiAgICAgICAgQW1tby5kZXN0cm95KHRoaXMuY29sbGlzaW9uQ29uZmlndXJhdGlvbik7XG5cbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZCk7XG5cbiAgICAgICAgZGlzcGF0Y2hlci5zZW5kVGVybWluYXRlRXZlbnQoKTtcbiAgICB9XG59O1xuXG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBXb3JsZCgpOyIsImltcG9ydCB7XG4gICAgRElTQUJMRV9ERUFDVElWQVRJT04sXG4gICAgVFlQRVMsXG4gICAgREVGQVVMVF9WRUhJQ0xFX1NUQVRFLFxuICAgIEJBQ0tfTEVGVCxcbiAgICBCQUNLX1JJR0hULFxuICAgIEZST05UX0xFRlQsXG4gICAgRlJPTlRfUklHSFQsXG4gICAgREVGQVVMVF9NQVhfRU5HSU5FX0ZPUkNFLFxuICAgIERFRkFVTFRfTUFYX0JSRUFLSU5HX0ZPUkNFLFxuICAgIERFRkFVTFRfU1RFRVJJTkdfQ0xBTVAsXG4gICAgREVGQVVMVF9TVEVFUklOR19JTkNSRU1FTlRcbn0gZnJvbSAnLi4vY29uc3RhbnRzJztcblxuaW1wb3J0IHtcbiAgICBQSFlTSUNTX0VWRU5UU1xufSBmcm9tICcuLi9tZXNzYWdlcyc7XG5cbmltcG9ydCB3b3JsZCBmcm9tICcuL3dvcmxkJztcbmltcG9ydCBkaXNwYXRjaGVyIGZyb20gJy4vbGliL2Rpc3BhdGNoZXInO1xuXG5jb25zdCBERUZBVUxUX1JPTExfSU5GTFVFTkNFID0gMC4yO1xuY29uc3QgREVGQVVMVF9GUklDVElPTiA9IDEwMDA7XG5jb25zdCBERUZBVUxUX01BU1MgPSA4MDA7XG5cbmV4cG9ydCBjb25zdCBhZGRWZWhpY2xlID0gZGF0YSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgICBwb3NpdGlvbixcbiAgICAgICAgcXVhdGVybmlvbixcbiAgICAgICAgdXVpZCxcbiAgICAgICAgd2hlZWxzLFxuICAgICAgICBtYXNzID0gREVGQVVMVF9NQVNTLFxuICAgICAgICB3aWR0aCA9IDEuOCxcbiAgICAgICAgaGVpZ2h0ID0gLjYsXG4gICAgICAgIGxlbmd0aCA9IDQsXG4gICAgICAgIGZyaWN0aW9uID0gREVGQVVMVF9GUklDVElPTixcbiAgICAgICAgcm9sbEluZmx1ZW5jZSA9IERFRkFVTFRfUk9MTF9JTkZMVUVOQ0UsXG4gICAgICAgIHdoZWVsc09wdGlvbnMgPSB7fSxcbiAgICAgICAgc3VzcGVuc2lvbnMgPSB7fVxuICAgIH0gPSBkYXRhO1xuXG4gICAgY29uc3QgeyBiYWNrID0ge30sIGZyb250ID0ge30gfSA9IHdoZWVsc09wdGlvbnM7XG4gICAgY29uc3Qge1xuICAgICAgICBheGlzUG9zaXRpb246IGF4aXNQb3NpdGlvbkJhY2sgPSAtMSxcbiAgICAgICAgcmFkaXVzOiB3aGVlbFJhZGl1c0JhY2sgPSAuNCxcbiAgICAgICAgaGFsZlRyYWNrOiB3aGVlbEhhbGZUcmFja0JhY2sgPSAxLFxuICAgICAgICBheGlzSGVpZ2h0OiB3aGVlbEF4aXNIZWlnaHRCYWNrID0gLjNcbiAgICB9ID0gYmFjaztcblxuICAgIGNvbnN0IHtcbiAgICAgICAgYXhpc1Bvc2l0aW9uOiBheGlzUG9zaXRpb25Gcm9udCA9IDEuNyxcbiAgICAgICAgcmFkaXVzOiB3aGVlbFJhZGl1c0Zyb250ID0gLjQsXG4gICAgICAgIGhhbGZUcmFjazogd2hlZWxIYWxmVHJhY2tGcm9udCA9IDEsXG4gICAgICAgIGF4aXNIZWlnaHQ6IHdoZWVsQXhpc0hlaWdodEZyb250ID0gLjNcbiAgICB9ID0gZnJvbnQ7XG5cbiAgICBjb25zdCB7IHN0aWZmbmVzcyA9IDIwLjAsIGRhbXBpbmcgPSAyLjMsIGNvbXByZXNzaW9uID0gNC40LCByZXN0TGVuZ3RoID0gMC42IH0gPSBzdXNwZW5zaW9ucztcblxuXG4gICAgLy8gQ2hhc3Npc1xuICAgIGNvbnN0IGdlb21ldHJ5ID0gbmV3IEFtbW8uYnRCb3hTaGFwZShuZXcgQW1tby5idFZlY3RvcjMod2lkdGggKiAuNSwgaGVpZ2h0ICogLjUsIGxlbmd0aCAqIC41KSk7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTtcbiAgICB0cmFuc2Zvcm0uc2V0SWRlbnRpdHkoKTtcbiAgICB0cmFuc2Zvcm0uc2V0T3JpZ2luKG5ldyBBbW1vLmJ0VmVjdG9yMyhwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56KSk7XG4gICAgdHJhbnNmb3JtLnNldFJvdGF0aW9uKG5ldyBBbW1vLmJ0UXVhdGVybmlvbihxdWF0ZXJuaW9uLngsIHF1YXRlcm5pb24ueSwgcXVhdGVybmlvbi56LCBxdWF0ZXJuaW9uLncpKTtcbiAgICBjb25zdCBtb3Rpb25TdGF0ZSA9IG5ldyBBbW1vLmJ0RGVmYXVsdE1vdGlvblN0YXRlKHRyYW5zZm9ybSk7XG4gICAgY29uc3QgbG9jYWxJbmVydGlhID0gbmV3IEFtbW8uYnRWZWN0b3IzKDAsIDAsIDApO1xuICAgIGdlb21ldHJ5LmNhbGN1bGF0ZUxvY2FsSW5lcnRpYShtYXNzLCBsb2NhbEluZXJ0aWEpO1xuICAgIGNvbnN0IGNoYXNzaXMgPSBuZXcgQW1tby5idFJpZ2lkQm9keShuZXcgQW1tby5idFJpZ2lkQm9keUNvbnN0cnVjdGlvbkluZm8obWFzcywgbW90aW9uU3RhdGUsIGdlb21ldHJ5LCBsb2NhbEluZXJ0aWEpKTtcbiAgICBjaGFzc2lzLnNldEFjdGl2YXRpb25TdGF0ZShESVNBQkxFX0RFQUNUSVZBVElPTik7XG4gICAgd29ybGQuYWRkUmlnaWRCb2R5KGNoYXNzaXMpO1xuXG5cbiAgICAvLyBSYXljYXN0IFZlaGljbGVcbiAgICBjb25zdCB0dW5pbmcgPSBuZXcgQW1tby5idFZlaGljbGVUdW5pbmcoKTtcbiAgICBjb25zdCByYXlDYXN0ZXIgPSBuZXcgQW1tby5idERlZmF1bHRWZWhpY2xlUmF5Y2FzdGVyKHdvcmxkLmdldER5bmFtaWNzV29ybGQoKSk7XG4gICAgY29uc3QgdmVoaWNsZSA9IG5ldyBBbW1vLmJ0UmF5Y2FzdFZlaGljbGUodHVuaW5nLCBjaGFzc2lzLCByYXlDYXN0ZXIpO1xuICAgIHZlaGljbGUuc2V0Q29vcmRpbmF0ZVN5c3RlbSgwLCAxLCAyKTtcbiAgICB3b3JsZC5hZGRBY3Rpb24odmVoaWNsZSk7XG5cbiAgICBjb25zdCB3aGVlbERpcmVjdGlvbkNTMCA9IG5ldyBBbW1vLmJ0VmVjdG9yMygwLCAtMSwgMCk7XG4gICAgY29uc3Qgd2hlZWxBeGxlQ1MgPSBuZXcgQW1tby5idFZlY3RvcjMoLTEsIDAsIDApO1xuXG4gICAgY29uc3QgYWRkV2hlZWwgPSAoaXNGcm9udCwgcG9zLCByYWRpdXMpID0+IHtcblxuICAgICAgICB2YXIgd2hlZWxJbmZvID0gdmVoaWNsZS5hZGRXaGVlbChcbiAgICAgICAgICAgIHBvcyxcbiAgICAgICAgICAgIHdoZWVsRGlyZWN0aW9uQ1MwLFxuICAgICAgICAgICAgd2hlZWxBeGxlQ1MsXG4gICAgICAgICAgICByZXN0TGVuZ3RoLFxuICAgICAgICAgICAgcmFkaXVzLFxuICAgICAgICAgICAgdHVuaW5nLFxuICAgICAgICAgICAgaXNGcm9udCk7XG5cbiAgICAgICAgd2hlZWxJbmZvLnNldF9tX3N1c3BlbnNpb25TdGlmZm5lc3Moc3RpZmZuZXNzKTtcbiAgICAgICAgd2hlZWxJbmZvLnNldF9tX3doZWVsc0RhbXBpbmdSZWxheGF0aW9uKGRhbXBpbmcpO1xuICAgICAgICB3aGVlbEluZm8uc2V0X21fd2hlZWxzRGFtcGluZ0NvbXByZXNzaW9uKGNvbXByZXNzaW9uKTtcbiAgICAgICAgd2hlZWxJbmZvLnNldF9tX2ZyaWN0aW9uU2xpcChmcmljdGlvbik7XG4gICAgICAgIHdoZWVsSW5mby5zZXRfbV9yb2xsSW5mbHVlbmNlKHJvbGxJbmZsdWVuY2UpO1xuICAgIH1cblxuICAgIGFkZFdoZWVsKHRydWUsIG5ldyBBbW1vLmJ0VmVjdG9yMyh3aGVlbEhhbGZUcmFja0Zyb250LCB3aGVlbEF4aXNIZWlnaHRGcm9udCwgYXhpc1Bvc2l0aW9uRnJvbnQpLCB3aGVlbFJhZGl1c0Zyb250KTtcbiAgICBhZGRXaGVlbCh0cnVlLCBuZXcgQW1tby5idFZlY3RvcjMoLXdoZWVsSGFsZlRyYWNrRnJvbnQsIHdoZWVsQXhpc0hlaWdodEZyb250LCBheGlzUG9zaXRpb25Gcm9udCksIHdoZWVsUmFkaXVzRnJvbnQpO1xuICAgIGFkZFdoZWVsKGZhbHNlLCBuZXcgQW1tby5idFZlY3RvcjMoLXdoZWVsSGFsZlRyYWNrQmFjaywgd2hlZWxBeGlzSGVpZ2h0QmFjaywgYXhpc1Bvc2l0aW9uQmFjayksIHdoZWVsUmFkaXVzQmFjayk7XG4gICAgYWRkV2hlZWwoZmFsc2UsIG5ldyBBbW1vLmJ0VmVjdG9yMyh3aGVlbEhhbGZUcmFja0JhY2ssIHdoZWVsQXhpc0hlaWdodEJhY2ssIGF4aXNQb3NpdGlvbkJhY2spLCB3aGVlbFJhZGl1c0JhY2spO1xuXG4gICAgdmVoaWNsZS51dWlkID0gdXVpZDtcblxuICAgIHdvcmxkLmFkZEVsZW1lbnQoe1xuICAgICAgICB0eXBlOiBUWVBFUy5WRUhJQ0xFLFxuICAgICAgICB1dWlkLFxuICAgICAgICB2ZWhpY2xlOiB2ZWhpY2xlLFxuICAgICAgICB3aGVlbHMsXG4gICAgICAgIG9wdGlvbnM6IGRhdGEsXG4gICAgICAgIHN0YXRlOiBERUZBVUxUX1ZFSElDTEVfU1RBVEVcbiAgICB9KTtcbn1cblxuZXhwb3J0IGNvbnN0IHNldFZlaGljbGVQb3NpdGlvbiA9IGRhdGEgPT4ge1xuICAgIGNvbnN0IHsgdXVpZCwgcG9zaXRpb24gfSA9IGRhdGE7XG4gICAgY29uc3QgZWxlbWVudCA9IHdvcmxkLmdldEVsZW1lbnQodXVpZCk7XG5cbiAgICBpZiAoZWxlbWVudC50eXBlID09PSBUWVBFUy5WRUhJQ0xFKSB7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBlbGVtZW50LnZlaGljbGUuZ2V0UmlnaWRCb2R5KCk7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7XG5cbiAgICAgICAgYm9keS5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pO1xuICAgICAgICB0cmFuc2Zvcm0uc2V0T3JpZ2luKG5ldyBBbW1vLmJ0VmVjdG9yMyhwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56ICkpO1xuXG4gICAgICAgIGJvZHkuc2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0VmVoaWNsZVF1YXRlcm5pb24gPSBkYXRhID0+IHtcbiAgICBjb25zdCB7IHV1aWQsIHF1YXRlcm5pb24gfSA9IGRhdGE7XG4gICAgY29uc3QgZWxlbWVudCA9IHdvcmxkLmdldEVsZW1lbnQodXVpZCk7XG5cbiAgICBpZiAoZWxlbWVudC50eXBlID09PSBUWVBFUy5WRUhJQ0xFKSB7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBlbGVtZW50LnZlaGljbGUuZ2V0UmlnaWRCb2R5KCk7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7XG5cbiAgICAgICAgYm9keS5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pO1xuICAgICAgICB0cmFuc2Zvcm0uc2V0Um90YXRpb24obmV3IEFtbW8uYnRRdWF0ZXJuaW9uKHF1YXRlcm5pb24ueCwgcXVhdGVybmlvbi55LCBxdWF0ZXJuaW9uLnosIHF1YXRlcm5pb24udykpO1xuXG4gICAgICAgIGJvZHkuc2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgcmVzZXRWZWhpY2xlID0gZGF0YSA9PiB7XG4gICAgY29uc3QgeyB1dWlkLCBxdWF0ZXJuaW9uLCBwb3NpdGlvbiB9ID0gZGF0YTtcbiAgICBjb25zdCBlbGVtZW50ID0gd29ybGQuZ2V0RWxlbWVudCh1dWlkKTtcblxuICAgIGlmIChlbGVtZW50LnR5cGUgPT09IFRZUEVTLlZFSElDTEUpIHtcbiAgICAgICAgY29uc3QgYm9keSA9IGVsZW1lbnQudmVoaWNsZS5nZXRSaWdpZEJvZHkoKTtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTtcbiAgICAgICAgXG4gICAgICAgIGJvZHkuZ2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTtcblxuICAgICAgICB0cmFuc2Zvcm0uc2V0SWRlbnRpdHkoKTtcbiAgICAgICAgdHJhbnNmb3JtLnNldE9yaWdpbihuZXcgQW1tby5idFZlY3RvcjMocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueiApKTtcbiAgICAgICAgdHJhbnNmb3JtLnNldFJvdGF0aW9uKG5ldyBBbW1vLmJ0UXVhdGVybmlvbihxdWF0ZXJuaW9uLngsIHF1YXRlcm5pb24ueSwgcXVhdGVybmlvbi56LCBxdWF0ZXJuaW9uLncpKTtcblxuICAgICAgICBib2R5LnNldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7XG4gICAgfVxufVxuXG5leHBvcnQgY29uc3QgaGFuZGxlVmVoaWNsZVVwZGF0ZSA9ICh7IHZlaGljbGUsIHdoZWVscywgdXVpZCwgc3RhdGUgPSBERUZBVUxUX1ZFSElDTEVfU1RBVEUsIG9wdGlvbnMgPSB7fSB9LCBkdCkgPT4ge1xuICAgIGxldCBicmVha2luZ0ZvcmNlID0gMDtcbiAgICBsZXQgZW5naW5lRm9yY2UgPSAwO1xuXG4gICAgY29uc3Qge1xuICAgICAgICBzdGVlcmluZ0NsYW1wID0gREVGQVVMVF9TVEVFUklOR19DTEFNUCxcbiAgICAgICAgc3RlZXJpbmdJbmNyZW1lbnQgPSBERUZBVUxUX1NURUVSSU5HX0lOQ1JFTUVOVCxcbiAgICAgICAgbWF4RW5naW5lRm9yY2UgPSBERUZBVUxUX01BWF9FTkdJTkVfRk9SQ0UsXG4gICAgICAgIG1heEJyZWFraW5nRm9yY2UgPSBERUZBVUxUX01BWF9CUkVBS0lOR19GT1JDRVxuICAgIH0gPSBvcHRpb25zO1xuXG4gICAgaWYgKHN0YXRlLmFjY2VsZXJhdGlvbikge1xuICAgICAgICBpZiAoc3BlZWQgPCAtMSlcbiAgICAgICAgICAgIGJyZWFraW5nRm9yY2UgPSBtYXhCcmVha2luZ0ZvcmNlO1xuICAgICAgICBlbHNlIGVuZ2luZUZvcmNlID0gbWF4RW5naW5lRm9yY2U7XG4gICAgfVxuICAgIGlmIChzdGF0ZS5icmFraW5nKSB7XG4gICAgICAgIGlmIChzcGVlZCA+IDEpXG4gICAgICAgICAgICBicmVha2luZ0ZvcmNlID0gbWF4QnJlYWtpbmdGb3JjZTtcbiAgICAgICAgZWxzZSBlbmdpbmVGb3JjZSA9IC1tYXhFbmdpbmVGb3JjZSAvIDI7XG4gICAgfVxuICAgIGlmIChzdGF0ZS5sZWZ0KSB7XG4gICAgICAgIGlmIChzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgPCBzdGVlcmluZ0NsYW1wKVxuICAgICAgICAgICAgc3RhdGUudmVoaWNsZVN0ZWVyaW5nICs9IHN0ZWVyaW5nSW5jcmVtZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChzdGF0ZS5yaWdodCkge1xuICAgICAgICAgICAgaWYgKHN0YXRlLnZlaGljbGVTdGVlcmluZyA+IC1zdGVlcmluZ0NsYW1wKVxuICAgICAgICAgICAgICAgIHN0YXRlLnZlaGljbGVTdGVlcmluZyAtPSBzdGVlcmluZ0luY3JlbWVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgPCAtc3RlZXJpbmdJbmNyZW1lbnQpXG4gICAgICAgICAgICAgICAgc3RhdGUudmVoaWNsZVN0ZWVyaW5nICs9IHN0ZWVyaW5nSW5jcmVtZW50O1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLnZlaGljbGVTdGVlcmluZyA+IHN0ZWVyaW5nSW5jcmVtZW50KVxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgLT0gc3RlZXJpbmdJbmNyZW1lbnQ7XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnZlaGljbGVTdGVlcmluZyA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmVoaWNsZS5hcHBseUVuZ2luZUZvcmNlKGVuZ2luZUZvcmNlLCBCQUNLX0xFRlQpO1xuICAgIHZlaGljbGUuYXBwbHlFbmdpbmVGb3JjZShlbmdpbmVGb3JjZSwgQkFDS19SSUdIVCk7XG5cbiAgICB2ZWhpY2xlLnNldEJyYWtlKGJyZWFraW5nRm9yY2UgLyAyLCBGUk9OVF9MRUZUKTtcbiAgICB2ZWhpY2xlLnNldEJyYWtlKGJyZWFraW5nRm9yY2UgLyAyLCBGUk9OVF9SSUdIVCk7XG4gICAgdmVoaWNsZS5zZXRCcmFrZShicmVha2luZ0ZvcmNlLCBCQUNLX0xFRlQpO1xuICAgIHZlaGljbGUuc2V0QnJha2UoYnJlYWtpbmdGb3JjZSwgQkFDS19SSUdIVCk7XG5cbiAgICB2ZWhpY2xlLnNldFN0ZWVyaW5nVmFsdWUoc3RhdGUudmVoaWNsZVN0ZWVyaW5nLCBGUk9OVF9MRUZUKTtcbiAgICB2ZWhpY2xlLnNldFN0ZWVyaW5nVmFsdWUoc3RhdGUudmVoaWNsZVN0ZWVyaW5nLCBGUk9OVF9SSUdIVCk7XG5cbiAgICBsZXQgdG0sIHAsIHEsIGk7XG4gICAgY29uc3QgbiA9IHZlaGljbGUuZ2V0TnVtV2hlZWxzKCk7XG4gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICB2ZWhpY2xlLnVwZGF0ZVdoZWVsVHJhbnNmb3JtKGksIHRydWUpO1xuICAgICAgICB0bSA9IHZlaGljbGUuZ2V0V2hlZWxUcmFuc2Zvcm1XUyhpKTtcbiAgICAgICAgcCA9IHRtLmdldE9yaWdpbigpO1xuICAgICAgICBxID0gdG0uZ2V0Um90YXRpb24oKTtcblxuICAgICAgICBjb25zdCB3aGVlbFVVSUQgPSB3aGVlbHNbaV07XG4gICAgICAgIGRpc3BhdGNoZXIuc2VuZEJvZHlVcGRhdGUod2hlZWxVVUlELCBwLCBxLCBkdCk7XG4gICAgfVxuXG4gICAgdG0gPSB2ZWhpY2xlLmdldENoYXNzaXNXb3JsZFRyYW5zZm9ybSgpO1xuICAgIHAgPSB0bS5nZXRPcmlnaW4oKTtcbiAgICBxID0gdG0uZ2V0Um90YXRpb24oKTtcblxuICAgIGNvbnN0IGRpcmVjdGlvbiA9IHZlaGljbGUuZ2V0Rm9yd2FyZFZlY3RvcigpO1xuICAgIGNvbnN0IHNwZWVkID0gdmVoaWNsZS5nZXRDdXJyZW50U3BlZWRLbUhvdXIoKTtcblxuICAgIGNvbnN0IGV4dHJhRGF0YSA9IHtcbiAgICAgICAgZGlyZWN0aW9uOiB7XG4gICAgICAgICAgICB4OiBkaXJlY3Rpb24ueCgpLFxuICAgICAgICAgICAgeTogZGlyZWN0aW9uLnkoKSxcbiAgICAgICAgICAgIHo6IGRpcmVjdGlvbi56KClcbiAgICAgICAgfSxcbiAgICAgICAgc3BlZWRcbiAgICB9XG5cblxuICAgIGRpc3BhdGNoZXIuc2VuZEJvZHlVcGRhdGUodXVpZCwgcCwgcSwgZHQsIGV4dHJhRGF0YSk7XG4gICAgd29ybGQudXBkYXRlQm9keVN0YXRlKHV1aWQsIHN0YXRlKTtcbn0iLCJpbXBvcnQgeyBFWFBMT1NJT05fU0laRVMsIEVYUExPU0lPTl9TVFJFTkdUSFMgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgd29ybGQgZnJvbSBcIi4vd29ybGRcIjtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUdob3N0Q29sbGlkZXIgPSAocmFkaXVzLCBwb3NpdGlvbikgPT4ge1xuICAgIGNvbnN0IGdob3N0Q29sbGlkZXIgPSBuZXcgQW1tby5idEdob3N0T2JqZWN0KCk7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTtcblxuICAgIGdob3N0Q29sbGlkZXIuc2V0Q29sbGlzaW9uU2hhcGUobmV3IEFtbW8uYnRTcGhlcmVTaGFwZShyYWRpdXMpKTtcbiAgICBnaG9zdENvbGxpZGVyLmdldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7XG5cbiAgICB0cmFuc2Zvcm0uc2V0SWRlbnRpdHkoKTtcbiAgICB0cmFuc2Zvcm0uc2V0T3JpZ2luKHBvc2l0aW9uKTtcbiAgICB0cmFuc2Zvcm0uc2V0Um90YXRpb24obmV3IEFtbW8uYnRRdWF0ZXJuaW9uKDAsIDAsIDAsIDEpKTtcblxuICAgIGdob3N0Q29sbGlkZXIuc2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTtcblxuICAgIHJldHVybiB7IGdob3N0Q29sbGlkZXIsIHRyYW5zZm9ybSB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGZvckVhY2hHaG9zdENvbGxpc2lvbiA9IChnaG9zdENvbGxpZGVyLCBmb3JFYWNoQ2FsbGJhY2sgPSAoKSA9PiB7fSkgPT4ge1xuICAgIGNvbnN0IGNvbGxpc2lvbnMgPSBnaG9zdENvbGxpZGVyLmdldE51bU92ZXJsYXBwaW5nT2JqZWN0cygpO1xuICAgIGZvciAobGV0IGk9MDsgaTxjb2xsaXNpb25zOyBpKyspIHtcbiAgICAgICAgY29uc3Qgb2JqZWN0ID0gQW1tby5jYXN0T2JqZWN0KGdob3N0Q29sbGlkZXIuZ2V0T3ZlcmxhcHBpbmdPYmplY3QoaSksIEFtbW8uYnRSaWdpZEJvZHkpO1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpO1xuXG4gICAgICAgIG9iamVjdC5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pO1xuICAgICAgICBmb3JFYWNoQ2FsbGJhY2sob2JqZWN0LCB0cmFuc2Zvcm0sIGkpO1xuXG4gICAgICAgIEFtbW8uZGVzdHJveSh0cmFuc2Zvcm0pO1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IGdldEV4cGxvc2lvblBvc2l0aW9uID0gKHV1aWQsIHBvc2l0aW9uKSA9PiB7XG4gICAgbGV0IGV4cGxvc2lvblBvc2l0aW9uID0gcG9zaXRpb247XG4gICAgaWYgKCFleHBsb3Npb25Qb3NpdGlvbikge1xuICAgICAgICBjb25zdCB7IGJvZHkgfSA9IHdvcmxkLmdldEVsZW1lbnQodXVpZCk7XG4gICAgICAgIGNvbnN0IG1vdGlvblN0YXRlID0gYm9keS5nZXRNb3Rpb25TdGF0ZSgpO1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpO1xuXG4gICAgICAgIG1vdGlvblN0YXRlLmdldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7XG4gICAgICAgIGV4cGxvc2lvblBvc2l0aW9uID0gdHJhbnNmb3JtLmdldE9yaWdpbigpO1xuICAgIH1cblxuICAgIHJldHVybiBleHBsb3Npb25Qb3NpdGlvbjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRFeHBsb3Npb25JbXB1bHNlID0gKHBvc2l0aW9uLCBleHBsb3Npb25Qb3NpdGlvbiwgc3RyZW5ndGgpID0+IHtcbiAgICBjb25zdCBkaXN0YW5jZSA9IHBvc2l0aW9uLm9wX3N1YihleHBsb3Npb25Qb3NpdGlvbik7XG4gICAgZGlzdGFuY2Uubm9ybWFsaXplKCk7XG4gICAgY29uc3QgaW1wdWxzZSA9IGRpc3RhbmNlLm9wX211bChzdHJlbmd0aCk7XG5cbiAgICBpbXB1bHNlLnNldFkoaW1wdWxzZS55KCkgKyBzdHJlbmd0aCk7XG5cbiAgICByZXR1cm4gaW1wdWxzZTtcbn1cblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUV4cGxvc2lvbiA9ICh7XG4gICAgdXVpZCxcbiAgICBwb3NpdGlvbixcbiAgICByYWRpdXMgPSBFWFBMT1NJT05fU0laRVMuU01BTEwsXG4gICAgc3RyZW5ndGggPSBFWFBMT1NJT05fU1RSRU5HVEhTLk1FRElVTVxufSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGV4cGxvc2lvblBvc2l0aW9uID0gZ2V0RXhwbG9zaW9uUG9zaXRpb24odXVpZCwgcG9zaXRpb24pO1xuICAgICAgICBjb25zdCB7IGdob3N0Q29sbGlkZXIsIHRyYW5zZm9ybSB9ID0gY3JlYXRlR2hvc3RDb2xsaWRlcihyYWRpdXMsIGV4cGxvc2lvblBvc2l0aW9uKTtcblxuICAgICAgICB3b3JsZC5hZGRDb2xsaXNpb25PYmplY3QoZ2hvc3RDb2xsaWRlcik7XG5cbiAgICAgICAgZm9yRWFjaEdob3N0Q29sbGlzaW9uKGdob3N0Q29sbGlkZXIsIChvYmplY3QsIG9iamVjdFRyYW5zZm9ybSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luID0gb2JqZWN0VHJhbnNmb3JtLmdldE9yaWdpbigpO1xuICAgICAgICAgICAgb2JqZWN0LmFjdGl2YXRlKHRydWUpO1xuICAgICAgICAgICAgb2JqZWN0LmFwcGx5Q2VudHJhbEltcHVsc2UoZ2V0RXhwbG9zaW9uSW1wdWxzZShvcmlnaW4sIGV4cGxvc2lvblBvc2l0aW9uLCBzdHJlbmd0aCkpO1xuICAgICAgICB9KTtcblxuICAgICAgICB3b3JsZC5nZXREeW5hbWljc1dvcmxkKCkucmVtb3ZlQ29sbGlzaW9uT2JqZWN0KGdob3N0Q29sbGlkZXIpO1xuICAgICAgICBBbW1vLmRlc3Ryb3koZ2hvc3RDb2xsaWRlcik7XG4gICAgICAgIEFtbW8uZGVzdHJveSh0cmFuc2Zvcm0pO1xuICAgIH0gY2F0Y2goZSkge1xuICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICB9XG59IiwiaW1wb3J0IHtcbiAgICBMSUJSQVJZX05BTUVcbn0gZnJvbSAnLi4vY29uc3RhbnRzJztcblxuaW1wb3J0IHsgYWRkVmVoaWNsZSwgcmVzZXRWZWhpY2xlLCBzZXRWZWhpY2xlUG9zaXRpb24sIHNldFZlaGljbGVRdWF0ZXJuaW9uIH0gZnJvbSAnLi92ZWhpY2xlcyc7XG5pbXBvcnQgeyBhZGRCb3gsIGFkZE1vZGVsLCBzZXRMaW5lYXJWZWxvY2l0eSwgYXBwbHlJbXB1c2UsIGFkZFNwaGVyZSwgc2V0UG9zaXRpb24gfSBmcm9tICcuL2VsZW1lbnRzJztcbmltcG9ydCB7IGNyZWF0ZUV4cGxvc2lvbiB9IGZyb20gJy4vZWZmZWN0cyc7XG5pbXBvcnQgeyBhZGRQbGF5ZXIgfSBmcm9tICcuL3BsYXllcic7XG5cbmltcG9ydCBkaXNwYXRjaGVyIGZyb20gJy4vbGliL2Rpc3BhdGNoZXInO1xuaW1wb3J0IHdvcmxkIGZyb20gJy4vd29ybGQnO1xuaW1wb3J0IHsgUEhZU0lDU19FVkVOVFMgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5cbmNvbnN0IGhhbmRsZUxvYWRFdmVudCA9IG9wdGlvbnMgPT4gQW1tbyA9PiB7XG4gICAgc2VsZi5BbW1vID0gQW1tbztcblxuICAgIG9ubWVzc2FnZSA9ICh7IGRhdGEgfSkgPT4ge1xuICAgICAgICBzd2l0Y2goZGF0YS5ldmVudCkge1xuICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5BREQuQk9YOlxuICAgICAgICAgICAgICAgIGFkZEJveChkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuQURELlNQSEVSRTpcbiAgICAgICAgICAgICAgICBhZGRTcGhlcmUoZGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkFERC5WRUhJQ0xFOlxuICAgICAgICAgICAgICAgIGFkZFZlaGljbGUoZGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkFERC5NT0RFTDpcbiAgICAgICAgICAgICAgICBhZGRNb2RlbChkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuQURELlBMQVlFUjpcbiAgICAgICAgICAgICAgICBhZGRQbGF5ZXIoZGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkVMRU1FTlQuU0VULkxJTkVBUl9WRUxPQ0lUWTpcbiAgICAgICAgICAgICAgICBzZXRMaW5lYXJWZWxvY2l0eShkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuRUxFTUVOVC5TRVQuUE9TSVRJT046XG4gICAgICAgICAgICAgICAgc2V0UG9zaXRpb24oZGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLlZFSElDTEUuU0VULlBPU0lUSU9OOlxuICAgICAgICAgICAgICAgIHNldFZlaGljbGVQb3NpdGlvbihkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuVkVISUNMRS5TRVQuUVVBVEVSTklPTjpcbiAgICAgICAgICAgICAgICBzZXRWZWhpY2xlUXVhdGVybmlvbihkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuVkVISUNMRS5SRVNFVDpcbiAgICAgICAgICAgICAgICByZXNldFZlaGljbGUoZGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkVMRU1FTlQuQVBQTFkuSU1QVUxTRTpcbiAgICAgICAgICAgICAgICBhcHBseUltcHVzZShkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuRUxFTUVOVC5VUERBVEU6XG4gICAgICAgICAgICAgICAgd29ybGQudXBkYXRlQm9keVN0YXRlKGRhdGEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5FTEVNRU5ULkRJU1BPU0U6XG4gICAgICAgICAgICAgICAgd29ybGQuZGlzcG9zZUJvZHkoZGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkVGRkVDVFMuRVhQTE9TSU9OOlxuICAgICAgICAgICAgICAgIGNyZWF0ZUV4cGxvc2lvbihkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuVEVSTUlOQVRFOlxuICAgICAgICAgICAgICAgIHdvcmxkLnRlcm1pbmF0ZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgd29ybGQuaW5pdChvcHRpb25zKTtcbiAgICBkaXNwYXRjaGVyLnNlbmRSZWFkeUV2ZW50KCk7XG4gICAgd29ybGQuc2ltdWxhdGUoKVxufTtcblxuY29uc3QgbG9hZEFtbW8gPSAob3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IHNjcmlwdFVybCA9IG9wdGlvbnMuaG9zdCArICcvJyArIChvcHRpb25zLnBhdGggfHwgTElCUkFSWV9OQU1FKTtcbiAgICBpbXBvcnRTY3JpcHRzKHNjcmlwdFVybCk7XG5cbiAgICBBbW1vKCkudGhlbihoYW5kbGVMb2FkRXZlbnQob3B0aW9ucykpO1xufTtcblxub25tZXNzYWdlID0gKHsgZGF0YSB9KSA9PiB7XG4gICAgc3dpdGNoKGRhdGEuZXZlbnQpIHtcbiAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5MT0FELkFNTU86XG4gICAgICAgICAgICBsb2FkQW1tbyhkYXRhKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxufSJdLCJuYW1lcyI6WyJMSUJSQVJZX05BTUUiLCJUWVBFUyIsIkJPWCIsIlNQSEVSRSIsIlZFSElDTEUiLCJNRVNIIiwiUExBWUVSIiwiREVGQVVMVF9WRUhJQ0xFX1NUQVRFIiwidmVoaWNsZVN0ZWVyaW5nIiwiYWNjZWxlcmF0aW9uIiwiYnJlYWtpbmciLCJyaWdodCIsImxlZnQiLCJERUZBVUxUX1JJR0lEQk9EWV9TVEFURSIsInZlbG9jaXR5IiwieCIsInkiLCJ6IiwibW92ZW1lbnQiLCJmb3J3YXJkIiwiYmFja3dhcmRzIiwiZGlyZWN0aW9uIiwiREVGQVVMVF9TQ0FMRSIsIkRFRkFVTFRfTElORUFSX1ZFTE9DSVRZIiwiREVGQVVMVF9JTVBVTFNFIiwiRElTQUJMRV9ERUFDVElWQVRJT04iLCJHUkFWSVRZIiwiRlJPTlRfTEVGVCIsIkZST05UX1JJR0hUIiwiQkFDS19MRUZUIiwiQkFDS19SSUdIVCIsIkRFRkFVTFRfU1RFRVJJTkdfSU5DUkVNRU5UIiwiREVGQVVMVF9TVEVFUklOR19DTEFNUCIsIkRFRkFVTFRfTUFYX0VOR0lORV9GT1JDRSIsIkRFRkFVTFRfTUFYX0JSRUFLSU5HX0ZPUkNFIiwiRVhQTE9TSU9OX1NJWkVTIiwiU01BTEwiLCJNRURJVU0iLCJMQVJHRSIsIk1BU1NJVkUiLCJFWFBMT1NJT05fU1RSRU5HVEhTIiwiVkVSWV9XRUFLIiwiV0VBSyIsIk9LX05PIiwiUEhZU0lDU19FVkVOVFMiLCJESVNQQVRDSCIsIlRFUk1JTkFURSIsIkxPQUQiLCJBTU1PIiwiUkVBRFkiLCJJTklUIiwiVVBEQVRFIiwiQUREIiwiTU9ERUwiLCJFTEVNRU5UIiwiRElTUE9TRSIsIkNPTExJU0lPTiIsIkNSRUFURUQiLCJTRVQiLCJQT1NJVElPTiIsIlFVQVRFUk5JT04iLCJMSU5FQVJfVkVMT0NJVFkiLCJBUFBMWSIsIklNUFVMU0UiLCJSRVNFVCIsIlNQRUVEIiwiRElSRUNUSU9OIiwiRUZGRUNUUyIsIkVYUExPU0lPTiIsIkRpc3BhdGNoZXIiLCJkdCIsInBvc3RNZXNzYWdlIiwiZXZlbnQiLCJ1dWlkIiwicG9zaXRpb24iLCJyb3RhdGlvbiIsImV4dHJhRGF0YSIsInF1YXRlcm5pb24iLCJ3IiwiZXZlbnROYW1lIiwiZXZlbnREYXRhIiwiYXBwbHlNYXRyaXg0VG9WZWN0b3IzIiwibWF0cml4IiwiY3JlYXRlUmlnaWRCb2R5Iiwic2hhcGUiLCJvcHRpb25zIiwibWFzcyIsImZyaWN0aW9uIiwicmVzdGl0dXRpb24iLCJkYW1waW5nIiwibGluZWFyIiwiYW5ndWxhciIsInRyYW5zZm9ybSIsIkFtbW8iLCJidFRyYW5zZm9ybSIsInNldElkZW50aXR5Iiwic2V0T3JpZ2luIiwiYnRWZWN0b3IzIiwic2V0Um90YXRpb24iLCJidFF1YXRlcm5pb24iLCJtb3Rpb25TdGF0ZSIsImJ0RGVmYXVsdE1vdGlvblN0YXRlIiwibG9jYWxJbmVydGlhIiwiY2FsY3VsYXRlTG9jYWxJbmVydGlhIiwicmJJbmZvIiwiYnRSaWdpZEJvZHlDb25zdHJ1Y3Rpb25JbmZvIiwiYm9keSIsImJ0UmlnaWRCb2R5Iiwic2V0RnJpY3Rpb24iLCJzZXRSZXN0aXR1dGlvbiIsInNldERhbXBpbmciLCJzZXRBY3RpdmF0aW9uU3RhdGUiLCJ3b3JsZCIsImFkZFJpZ2lkQm9keSIsImFkZE1vZGVsIiwidmVydGljZXMiLCJtYXRyaWNlcyIsImluZGV4ZXMiLCJzY2FsZSIsImJ0YSIsImJ0YiIsImJ0YyIsInRyaU1lc2giLCJidFRyaWFuZ2xlTWVzaCIsImkiLCJsZW5ndGgiLCJjb21wb25lbnRzIiwiaW5kZXgiLCJBcnJheSIsImZyb20iLCJqIiwiYWkiLCJiaSIsImNpIiwidmEiLCJ2YiIsInZjIiwic2V0VmFsdWUiLCJhZGRUcmlhbmdsZSIsImxvY2FsU2NhbGUiLCJzZXRTY2FsaW5nIiwiZGVzdHJveSIsImNvbGxpc2lvblNoYXBlIiwiYnRCdmhUcmlhbmdsZU1lc2hTaGFwZSIsInJlc291cmNlcyIsImFkZEVsZW1lbnQiLCJ0eXBlIiwic3RhdGUiLCJhZGRCb3giLCJkYXRhIiwid2lkdGgiLCJoZWlnaHQiLCJnZW9tZXRyeSIsImJ0Qm94U2hhcGUiLCJhZGRTcGhlcmUiLCJyYWRpdXMiLCJidFNwaGVyZVNoYXBlIiwic2V0TGluZWFyVmVsb2NpdHkiLCJnZXRFbGVtZW50IiwiZ2V0TW90aW9uU3RhdGUiLCJsaW5lYXJWZWxvY2l0eSIsInNldFBvc2l0aW9uIiwiZ2V0V29ybGRUcmFuc2Zvcm0iLCJzZXRXb3JsZFRyYW5zZm9ybSIsImFwcGx5SW1wdXNlIiwiaW1wdWxzZSIsImltcHVsc2VWZWN0b3IiLCJhcHBseUNlbnRyYWxJbXB1bHNlIiwiaGFuZGxlRWxlbWVudFVwZGF0ZSIsIm9yaWdpbiIsImdldE9yaWdpbiIsImdldFJvdGF0aW9uIiwiZGlzcGF0Y2hlciIsInNlbmRCb2R5VXBkYXRlIiwiYWRkUGxheWVyIiwiY2Fwc3VsZSIsImJ0Q2Fwc3VsZVNoYXBlIiwic2V0QW5ndWxhckZhY3RvciIsImhhbmRsZVBsYXllclVwZGF0ZSIsImNhbWVyYURpcmVjdGlvbiIsIk1BWF9TUEVFRCIsIndhbGtWZWxvY2l0eSIsImdldExpbmVhclZlbG9jaXR5Iiwic3BlZWQiLCJmb3J3YXJkRGlyIiwiZ2V0QmFzaXMiLCJnZXRSb3ciLCJub3JtYWxpemUiLCJ3YWxrRGlyZWN0aW9uIiwid2Fsa1NwZWVkIiwic2V0WCIsInNldFoiLCJzZXRDZW50ZXJPZk1hc3NUcmFuc2Zvcm0iLCJDbG9jayIsInRpbWVzdGFtcCIsInRpbWUiLCJEYXRlIiwibm93IiwiZGVsdGEiLCJXb3JsZCIsImdyYXZpdHkiLCJjb2xsaXNpb25Db25maWd1cmF0aW9uIiwiYnREZWZhdWx0Q29sbGlzaW9uQ29uZmlndXJhdGlvbiIsImJ0Q29sbGlzaW9uRGlzcGF0Y2hlciIsImJyb2FkcGhhc2UiLCJidERidnRCcm9hZHBoYXNlIiwic29sdmVyIiwiYnRTZXF1ZW50aWFsSW1wdWxzZUNvbnN0cmFpbnRTb2x2ZXIiLCJkeW5hbWljc1dvcmxkIiwiYnREaXNjcmV0ZUR5bmFtaWNzV29ybGQiLCJzZXRHcmF2aXR5IiwiZ2V0QnJvYWRwaGFzZSIsImdldE92ZXJsYXBwaW5nUGFpckNhY2hlIiwic2V0SW50ZXJuYWxHaG9zdFBhaXJDYWxsYmFjayIsImJ0R2hvc3RQYWlyQ2FsbGJhY2siLCJpbml0aWFsaXNlZCIsImhhc0VsZW1lbnQiLCJlbGVtZW50cyIsImRlbGV0ZWQiLCJPYmplY3QiLCJrZXlzIiwiZmlsdGVyIiwiZm9yRWFjaCIsImluY2x1ZGVzIiwiYWN0aW9uIiwiYWRkQWN0aW9uIiwiY29sbGlzaW9uT2JqZWN0IiwiYWRkQ29sbGlzaW9uT2JqZWN0Iiwic3RlcFNpbXVsYXRpb24iLCJjbG9jayIsImdldERlbHRhIiwiZWxlbWVudCIsImhhbmRsZVZlaGljbGVVcGRhdGUiLCJjYWxjdWxhdGVDb2xsaXNpb25zIiwicmVtb3ZlRGVsZXRlZEVsZW1lbnRzIiwic2VuZFBoeXNpY3NVcGRhdGUiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZCIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsInNpbXVsYXRlIiwiYmluZCIsImFtbW9EaXNwYXRjaGVyIiwiZ2V0RGlzcGF0Y2hlciIsIm51bU1hbmlmb2xkcyIsImdldE51bU1hbmlmb2xkcyIsImNvbnRhY3RNYW5pZm9sZCIsImdldE1hbmlmb2xkQnlJbmRleEludGVybmFsIiwicmIwIiwiY2FzdE9iamVjdCIsImdldEJvZHkwIiwicmIxIiwiZ2V0Qm9keTEiLCJudW1Db250YWN0cyIsImdldE51bUNvbnRhY3RzIiwiY29udGFjdHMiLCJjb250YWN0UG9pbnQiLCJnZXRDb250YWN0UG9pbnQiLCJkaXN0YW5jZSIsImdldERpc3RhbmNlIiwidmVsb2NpdHkwIiwidmVsb2NpdHkxIiwid29ybGRQb3MwIiwiZ2V0X21fcG9zaXRpb25Xb3JsZE9uQSIsIndvcmxkUG9zMSIsImdldF9tX3Bvc2l0aW9uV29ybGRPbkIiLCJsb2NhbFBvczAiLCJnZXRfbV9sb2NhbFBvaW50QSIsImxvY2FsUG9zMSIsImdldF9tX2xvY2FsUG9pbnRCIiwicHVzaCIsIndvcmxkUG9zIiwibG9jYWxQb3MiLCJzZW5kRGlzcGF0Y2hFdmVudCIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwic2VuZFRlcm1pbmF0ZUV2ZW50IiwidW5kZWZpbmVkIiwicmVtb3ZlUmlnaWRCb2R5IiwicmVtb3ZlRWxlbWVudCIsInNlbmRFbGVtZW50RGlzcG9zZWQiLCJERUZBVUxUX1JPTExfSU5GTFVFTkNFIiwiREVGQVVMVF9GUklDVElPTiIsIkRFRkFVTFRfTUFTUyIsImFkZFZlaGljbGUiLCJ3aGVlbHMiLCJyb2xsSW5mbHVlbmNlIiwid2hlZWxzT3B0aW9ucyIsInN1c3BlbnNpb25zIiwiYmFjayIsImZyb250IiwiYXhpc1Bvc2l0aW9uIiwiYXhpc1Bvc2l0aW9uQmFjayIsIndoZWVsUmFkaXVzQmFjayIsImhhbGZUcmFjayIsIndoZWVsSGFsZlRyYWNrQmFjayIsImF4aXNIZWlnaHQiLCJ3aGVlbEF4aXNIZWlnaHRCYWNrIiwiYXhpc1Bvc2l0aW9uRnJvbnQiLCJ3aGVlbFJhZGl1c0Zyb250Iiwid2hlZWxIYWxmVHJhY2tGcm9udCIsIndoZWVsQXhpc0hlaWdodEZyb250Iiwic3RpZmZuZXNzIiwiY29tcHJlc3Npb24iLCJyZXN0TGVuZ3RoIiwiY2hhc3NpcyIsInR1bmluZyIsImJ0VmVoaWNsZVR1bmluZyIsInJheUNhc3RlciIsImJ0RGVmYXVsdFZlaGljbGVSYXljYXN0ZXIiLCJnZXREeW5hbWljc1dvcmxkIiwidmVoaWNsZSIsImJ0UmF5Y2FzdFZlaGljbGUiLCJzZXRDb29yZGluYXRlU3lzdGVtIiwid2hlZWxEaXJlY3Rpb25DUzAiLCJ3aGVlbEF4bGVDUyIsImFkZFdoZWVsIiwiaXNGcm9udCIsInBvcyIsIndoZWVsSW5mbyIsInNldF9tX3N1c3BlbnNpb25TdGlmZm5lc3MiLCJzZXRfbV93aGVlbHNEYW1waW5nUmVsYXhhdGlvbiIsInNldF9tX3doZWVsc0RhbXBpbmdDb21wcmVzc2lvbiIsInNldF9tX2ZyaWN0aW9uU2xpcCIsInNldF9tX3JvbGxJbmZsdWVuY2UiLCJzZXRWZWhpY2xlUG9zaXRpb24iLCJnZXRSaWdpZEJvZHkiLCJzZXRWZWhpY2xlUXVhdGVybmlvbiIsInJlc2V0VmVoaWNsZSIsImJyZWFraW5nRm9yY2UiLCJlbmdpbmVGb3JjZSIsInN0ZWVyaW5nQ2xhbXAiLCJzdGVlcmluZ0luY3JlbWVudCIsIm1heEVuZ2luZUZvcmNlIiwibWF4QnJlYWtpbmdGb3JjZSIsImJyYWtpbmciLCJhcHBseUVuZ2luZUZvcmNlIiwic2V0QnJha2UiLCJzZXRTdGVlcmluZ1ZhbHVlIiwidG0iLCJwIiwicSIsIm4iLCJnZXROdW1XaGVlbHMiLCJ1cGRhdGVXaGVlbFRyYW5zZm9ybSIsImdldFdoZWVsVHJhbnNmb3JtV1MiLCJ3aGVlbFVVSUQiLCJnZXRDaGFzc2lzV29ybGRUcmFuc2Zvcm0iLCJnZXRGb3J3YXJkVmVjdG9yIiwiZ2V0Q3VycmVudFNwZWVkS21Ib3VyIiwidXBkYXRlQm9keVN0YXRlIiwiY3JlYXRlR2hvc3RDb2xsaWRlciIsImdob3N0Q29sbGlkZXIiLCJidEdob3N0T2JqZWN0Iiwic2V0Q29sbGlzaW9uU2hhcGUiLCJmb3JFYWNoR2hvc3RDb2xsaXNpb24iLCJmb3JFYWNoQ2FsbGJhY2siLCJjb2xsaXNpb25zIiwiZ2V0TnVtT3ZlcmxhcHBpbmdPYmplY3RzIiwib2JqZWN0IiwiZ2V0T3ZlcmxhcHBpbmdPYmplY3QiLCJnZXRFeHBsb3Npb25Qb3NpdGlvbiIsImV4cGxvc2lvblBvc2l0aW9uIiwiZ2V0RXhwbG9zaW9uSW1wdWxzZSIsInN0cmVuZ3RoIiwib3Bfc3ViIiwib3BfbXVsIiwic2V0WSIsImNyZWF0ZUV4cGxvc2lvbiIsIm9iamVjdFRyYW5zZm9ybSIsImFjdGl2YXRlIiwicmVtb3ZlQ29sbGlzaW9uT2JqZWN0IiwiZSIsImNvbnNvbGUiLCJsb2ciLCJoYW5kbGVMb2FkRXZlbnQiLCJzZWxmIiwib25tZXNzYWdlIiwiZGlzcG9zZUJvZHkiLCJ0ZXJtaW5hdGUiLCJpbml0Iiwic2VuZFJlYWR5RXZlbnQiLCJsb2FkQW1tbyIsInNjcmlwdFVybCIsImhvc3QiLCJwYXRoIiwiaW1wb3J0U2NyaXB0cyIsInRoZW4iXSwibWFwcGluZ3MiOiI7OztJQUFPLElBQU1BLFlBQVksR0FBRyxTQUFyQjtJQUVBLElBQU1DLEtBQUssR0FBRztJQUNqQkMsRUFBQUEsR0FBRyxFQUFFLEtBRFk7SUFFakJDLEVBQUFBLE1BQU0sRUFBRSxRQUZTO0lBR2pCQyxFQUFBQSxPQUFPLEVBQUUsU0FIUTtJQUlqQkMsRUFBQUEsSUFBSSxFQUFFLE1BSlc7SUFLakJDLEVBQUFBLE1BQU0sRUFBRTtJQUxTLENBQWQ7SUFlQSxJQUFNQyxxQkFBcUIsR0FBRztJQUNqQ0MsRUFBQUEsZUFBZSxFQUFFLENBRGdCO0lBRWpDQyxFQUFBQSxZQUFZLEVBQUUsS0FGbUI7SUFHakNDLEVBQUFBLFFBQVEsRUFBRSxLQUh1QjtJQUlqQ0MsRUFBQUEsS0FBSyxFQUFFLEtBSjBCO0lBS2pDQyxFQUFBQSxJQUFJLEVBQUU7SUFMMkIsQ0FBOUI7SUFRQSxJQUFNQyx1QkFBdUIsR0FBRztJQUNuQ0MsRUFBQUEsUUFBUSxFQUFFO0lBQUVDLElBQUFBLENBQUMsRUFBRSxDQUFMO0lBQVFDLElBQUFBLENBQUMsRUFBRSxDQUFYO0lBQWNDLElBQUFBLENBQUMsRUFBRTtJQUFqQixHQUR5QjtJQUVuQ0MsRUFBQUEsUUFBUSxFQUFFO0lBQ05DLElBQUFBLE9BQU8sRUFBRSxLQURIO0lBRU5DLElBQUFBLFNBQVMsRUFBRSxLQUZMO0lBR05SLElBQUFBLElBQUksRUFBRSxLQUhB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', false);
|
|
57530
57552
|
/* eslint-enable */var PHYSICS_EVENTS = {
|
|
57531
57553
|
DISPATCH: 'physics:dispatch',
|
|
57532
57554
|
TERMINATE: 'physics:terminate',
|
|
@@ -57583,6 +57605,10 @@ var getProportion = function getProportion(max1, b, max2) {
|
|
|
57583
57605
|
var clamp = function clamp(value, min, max) {
|
|
57584
57606
|
return value < min ? min : value > max ? max : value;
|
|
57585
57607
|
};
|
|
57608
|
+
var randomIntFromInterval = function randomIntFromInterval(min, max) {
|
|
57609
|
+
// min and max included
|
|
57610
|
+
return Math.floor(Math.random() * (max - min + 1) + min);
|
|
57611
|
+
};
|
|
57586
57612
|
var getDistance = function getDistance() {
|
|
57587
57613
|
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
|
57588
57614
|
_ref$x = _ref.x,
|
|
@@ -57692,7 +57718,7 @@ var smoothDampAngle = function smoothDampAngle(current, target, currentVelocity,
|
|
|
57692
57718
|
var dt = arguments.length > 5 ? arguments[5] : undefined;
|
|
57693
57719
|
target = current + deltaAngle(current, target);
|
|
57694
57720
|
return smoothDamp(current, target, currentVelocity, smoothTime, maxSpeed, dt);
|
|
57695
|
-
};var math=/*#__PURE__*/Object.freeze({__proto__:null,PI: PI,PI_2: PI_2,pickRandom: pickRandom,degToRad: degToRad,getProportion: getProportion,clamp: clamp,getDistance: getDistance,findPointBetweenAtDistance: findPointBetweenAtDistance,lerpVectors: lerpVectors,lerp: lerp,scaleVector: scaleVector,getSphereVolume: getSphereVolume,repeat: repeat,deltaAngle: deltaAngle,smoothDamp: smoothDamp,smoothDampAngle: smoothDampAngle});var LIBRARY_NAME = 'ammo.js';
|
|
57721
|
+
};var math=/*#__PURE__*/Object.freeze({__proto__:null,PI: PI,PI_2: PI_2,pickRandom: pickRandom,degToRad: degToRad,getProportion: getProportion,clamp: clamp,randomIntFromInterval: randomIntFromInterval,getDistance: getDistance,findPointBetweenAtDistance: findPointBetweenAtDistance,lerpVectors: lerpVectors,lerp: lerp,scaleVector: scaleVector,getSphereVolume: getSphereVolume,repeat: repeat,deltaAngle: deltaAngle,smoothDamp: smoothDamp,smoothDampAngle: smoothDampAngle});var LIBRARY_NAME = 'ammo.js';
|
|
57696
57722
|
var TYPES = {
|
|
57697
57723
|
BOX: 'BOX',
|
|
57698
57724
|
SPHERE: 'SPHERE',
|
|
@@ -57791,14 +57817,14 @@ var EXPLOSION_STRENGTHS = {
|
|
|
57791
57817
|
position: DEFAULT_POSITION
|
|
57792
57818
|
};
|
|
57793
57819
|
|
|
57794
|
-
var DEFAULT_BOX_DESCRIPTION = _objectSpread2({}, DEFAULT_DESCRIPTION, {
|
|
57820
|
+
var DEFAULT_BOX_DESCRIPTION = _objectSpread2(_objectSpread2({}, DEFAULT_DESCRIPTION), {}, {
|
|
57795
57821
|
width: 2,
|
|
57796
57822
|
length: 2,
|
|
57797
57823
|
height: 2,
|
|
57798
57824
|
collider: COLLIDER_TYPES.BOX
|
|
57799
57825
|
});
|
|
57800
57826
|
|
|
57801
|
-
var DEFAULT_SPHERE_DESCRIPTION = _objectSpread2({}, DEFAULT_DESCRIPTION, {
|
|
57827
|
+
var DEFAULT_SPHERE_DESCRIPTION = _objectSpread2(_objectSpread2({}, DEFAULT_DESCRIPTION), {}, {
|
|
57802
57828
|
radius: 2,
|
|
57803
57829
|
collider: COLLIDER_TYPES.SPHERE
|
|
57804
57830
|
});
|
|
@@ -57905,10 +57931,10 @@ var extractSphereDescription = function extractSphereDescription(element) {
|
|
|
57905
57931
|
}, extractPositionAndQuaternion(element));
|
|
57906
57932
|
};
|
|
57907
57933
|
var getBoxDescriptionForElement = function getBoxDescriptionForElement(element) {
|
|
57908
|
-
return _objectSpread2({}, DEFAULT_BOX_DESCRIPTION,
|
|
57934
|
+
return _objectSpread2(_objectSpread2({}, DEFAULT_BOX_DESCRIPTION), extractBoxDescription(element));
|
|
57909
57935
|
};
|
|
57910
57936
|
var getSphereDescriptionForElement = function getSphereDescriptionForElement(element) {
|
|
57911
|
-
return _objectSpread2({}, DEFAULT_SPHERE_DESCRIPTION,
|
|
57937
|
+
return _objectSpread2(_objectSpread2({}, DEFAULT_SPHERE_DESCRIPTION), extractSphereDescription(element));
|
|
57912
57938
|
};
|
|
57913
57939
|
var mapColliderTypeToDescription = function mapColliderTypeToDescription() {
|
|
57914
57940
|
var _COLLIDER_TYPES$BOX$C2;
|
|
@@ -57952,7 +57978,8 @@ var convertAmmoVector = function convertAmmoVector(_ref2) {
|
|
|
57952
57978
|
};
|
|
57953
57979
|
};var utils=/*#__PURE__*/Object.freeze({__proto__:null,DEFAULT_DESCRIPTION: DEFAULT_DESCRIPTION,mapColliderTypeToAddEvent: mapColliderTypeToAddEvent,extractBoundingBox: extractBoundingBox,extractBiggestBoundingBox: extractBiggestBoundingBox,extractBoundingSphere: extractBoundingSphere,extractBiggestBoundingSphere: extractBiggestBoundingSphere,parseBoundingBoxSize: parseBoundingBoxSize,extractPositionAndQuaternion: extractPositionAndQuaternion,extractBoxDescription: extractBoxDescription,extractSphereDescription: extractSphereDescription,getBoxDescriptionForElement: getBoxDescriptionForElement,getSphereDescriptionForElement: getSphereDescriptionForElement,mapColliderTypeToDescription: mapColliderTypeToDescription,iterateGeometries: iterateGeometries,convertAmmoVector: convertAmmoVector});var getHostURL = function getHostURL() {
|
|
57954
57980
|
return "".concat(document.location.protocol, "//").concat(document.location.host);
|
|
57955
|
-
};var
|
|
57981
|
+
};var _excluded = ["uuid"];
|
|
57982
|
+
var COLLIDER_TYPES$1 = COLLIDER_TYPES;
|
|
57956
57983
|
var getBoxDescriptionForElement$1 = getBoxDescriptionForElement,
|
|
57957
57984
|
extractPositionAndQuaternion$1 = extractPositionAndQuaternion,
|
|
57958
57985
|
mapColliderTypeToDescription$1 = mapColliderTypeToDescription,
|
|
@@ -57960,9 +57987,7 @@ var getBoxDescriptionForElement$1 = getBoxDescriptionForElement,
|
|
|
57960
57987
|
mapColliderTypeToAddEvent$1 = mapColliderTypeToAddEvent,
|
|
57961
57988
|
DEFAULT_DESCRIPTION$1 = DEFAULT_DESCRIPTION;
|
|
57962
57989
|
var WORKER_READY_TIMEOUT = 200;
|
|
57963
|
-
var Physics =
|
|
57964
|
-
/*#__PURE__*/
|
|
57965
|
-
function (_EventDispatcher) {
|
|
57990
|
+
var Physics = /*#__PURE__*/function (_EventDispatcher) {
|
|
57966
57991
|
_inherits(Physics, _EventDispatcher);
|
|
57967
57992
|
|
|
57968
57993
|
var _super = _createSuper(Physics);
|
|
@@ -58014,20 +58039,18 @@ function (_EventDispatcher) {
|
|
|
58014
58039
|
});
|
|
58015
58040
|
|
|
58016
58041
|
_defineProperty(_assertThisInitialized(_this), "handleBodyUpdate", function (_ref3) {
|
|
58017
|
-
var
|
|
58018
|
-
|
|
58019
|
-
|
|
58042
|
+
var uuid = _ref3.uuid,
|
|
58043
|
+
data = _objectWithoutProperties(_ref3, _excluded);
|
|
58044
|
+
|
|
58020
58045
|
var element = Universe$1.getByUUID(uuid);
|
|
58021
58046
|
|
|
58022
58047
|
if (element) {
|
|
58023
58048
|
if (element.getPhysicsOptions('applyPhysicsUpdate')) {
|
|
58024
|
-
element.handlePhysicsUpdate(
|
|
58049
|
+
element.handlePhysicsUpdate(data);
|
|
58025
58050
|
} else {
|
|
58026
|
-
element.dispatchEvent({
|
|
58027
|
-
type: PHYSICS_EVENTS.ELEMENT.UPDATE
|
|
58028
|
-
|
|
58029
|
-
quaternion: quaternion
|
|
58030
|
-
});
|
|
58051
|
+
element.dispatchEvent(_objectSpread2({
|
|
58052
|
+
type: PHYSICS_EVENTS.ELEMENT.UPDATE
|
|
58053
|
+
}, data));
|
|
58031
58054
|
}
|
|
58032
58055
|
}
|
|
58033
58056
|
});
|
|
@@ -58198,9 +58221,9 @@ function (_EventDispatcher) {
|
|
|
58198
58221
|
|
|
58199
58222
|
if (Config$1.physics().enabled) {
|
|
58200
58223
|
this.createWorker();
|
|
58201
|
-
this.worker.postMessage(_objectSpread2({
|
|
58224
|
+
this.worker.postMessage(_objectSpread2(_objectSpread2({
|
|
58202
58225
|
event: PHYSICS_EVENTS.LOAD.AMMO
|
|
58203
|
-
}, Config$1.physics(), {
|
|
58226
|
+
}, Config$1.physics()), {}, {
|
|
58204
58227
|
host: getHostURL()
|
|
58205
58228
|
}));
|
|
58206
58229
|
return new Promise(function (resolve) {
|
|
@@ -58246,12 +58269,12 @@ function (_EventDispatcher) {
|
|
|
58246
58269
|
colliderType = _options$colliderType === void 0 ? COLLIDER_TYPES$1.BOX : _options$colliderType;
|
|
58247
58270
|
var uuid = element.uuid();
|
|
58248
58271
|
|
|
58249
|
-
var description = _objectSpread2({}, mapColliderTypeToDescription$1(colliderType)(element),
|
|
58272
|
+
var description = _objectSpread2(_objectSpread2({}, mapColliderTypeToDescription$1(colliderType)(element)), options);
|
|
58250
58273
|
|
|
58251
58274
|
this.storeElement(element, options);
|
|
58252
|
-
this.worker.postMessage(_objectSpread2({
|
|
58275
|
+
this.worker.postMessage(_objectSpread2(_objectSpread2({
|
|
58253
58276
|
event: mapColliderTypeToAddEvent$1(description.collider)
|
|
58254
|
-
}, description, {
|
|
58277
|
+
}, description), {}, {
|
|
58255
58278
|
uuid: uuid
|
|
58256
58279
|
}));
|
|
58257
58280
|
}
|
|
@@ -58263,10 +58286,10 @@ function (_EventDispatcher) {
|
|
|
58263
58286
|
var uuid = element.uuid();
|
|
58264
58287
|
var description = getBoxDescriptionForElement$1(element);
|
|
58265
58288
|
this.storeElement(element, options);
|
|
58266
|
-
this.worker.postMessage(_objectSpread2({
|
|
58289
|
+
this.worker.postMessage(_objectSpread2(_objectSpread2({
|
|
58267
58290
|
event: PHYSICS_EVENTS.ADD.VEHICLE,
|
|
58268
58291
|
uuid: uuid
|
|
58269
|
-
}, description,
|
|
58292
|
+
}, description), options));
|
|
58270
58293
|
}
|
|
58271
58294
|
}
|
|
58272
58295
|
}, {
|
|
@@ -58283,13 +58306,13 @@ function (_EventDispatcher) {
|
|
|
58283
58306
|
indexes.push(indexArray);
|
|
58284
58307
|
});
|
|
58285
58308
|
this.storeElement(model, options);
|
|
58286
|
-
this.worker.postMessage(_objectSpread2({
|
|
58309
|
+
this.worker.postMessage(_objectSpread2(_objectSpread2(_objectSpread2({
|
|
58287
58310
|
event: PHYSICS_EVENTS.ADD.MODEL,
|
|
58288
58311
|
uuid: uuid,
|
|
58289
58312
|
vertices: vertices,
|
|
58290
58313
|
matrices: matrices,
|
|
58291
58314
|
indexes: indexes
|
|
58292
|
-
}, DEFAULT_DESCRIPTION$1,
|
|
58315
|
+
}, DEFAULT_DESCRIPTION$1), extractPositionAndQuaternion$1(model)), options));
|
|
58293
58316
|
}
|
|
58294
58317
|
}
|
|
58295
58318
|
}, {
|
|
@@ -58308,9 +58331,9 @@ function (_EventDispatcher) {
|
|
|
58308
58331
|
|
|
58309
58332
|
return Physics;
|
|
58310
58333
|
}(EventDispatcher);
|
|
58311
|
-
var Physics$1 = new Physics();var
|
|
58312
|
-
|
|
58313
|
-
function (_BaseScript) {
|
|
58334
|
+
var Physics$1 = new Physics();var _excluded$1 = ["wheels", "accelerationKey", "brakingKey", "rightKey", "leftKey", "debug"];
|
|
58335
|
+
|
|
58336
|
+
var BaseCar = /*#__PURE__*/function (_BaseScript) {
|
|
58314
58337
|
_inherits(BaseCar, _BaseScript);
|
|
58315
58338
|
|
|
58316
58339
|
var _super = _createSuper(BaseCar);
|
|
@@ -58335,7 +58358,7 @@ function (_BaseScript) {
|
|
|
58335
58358
|
leftKey = _options$leftKey === void 0 ? 'a' : _options$leftKey,
|
|
58336
58359
|
_options$debug = options.debug,
|
|
58337
58360
|
debug = _options$debug === void 0 ? false : _options$debug,
|
|
58338
|
-
physicsOptions = _objectWithoutProperties(options,
|
|
58361
|
+
physicsOptions = _objectWithoutProperties(options, _excluded$1);
|
|
58339
58362
|
|
|
58340
58363
|
this.car = element;
|
|
58341
58364
|
this.wheels = wheels;
|
|
@@ -58386,9 +58409,7 @@ function (_BaseScript) {
|
|
|
58386
58409
|
var index=/*#__PURE__*/Object.freeze({__proto__:null,Emitter: k$1,Particle: P,ParticlesSystem: E,Randomizers: N,Utils: b});var PARTICLE_EMITTER_TYPES = {
|
|
58387
58410
|
SINGLE: 'SINGLE',
|
|
58388
58411
|
GROUP: 'GROUP'
|
|
58389
|
-
};var ParticleEmitter =
|
|
58390
|
-
/*#__PURE__*/
|
|
58391
|
-
function (_EventDispatcher) {
|
|
58412
|
+
};var ParticleEmitter = /*#__PURE__*/function (_EventDispatcher) {
|
|
58392
58413
|
_inherits(ParticleEmitter, _EventDispatcher);
|
|
58393
58414
|
|
|
58394
58415
|
var _super = _createSuper(ParticleEmitter);
|
|
@@ -58474,7 +58495,7 @@ function (_EventDispatcher) {
|
|
|
58474
58495
|
}, {
|
|
58475
58496
|
key: "setPosition",
|
|
58476
58497
|
value: function setPosition(where) {
|
|
58477
|
-
var position = _objectSpread2({}, this.getPosition(),
|
|
58498
|
+
var position = _objectSpread2(_objectSpread2({}, this.getPosition()), where);
|
|
58478
58499
|
|
|
58479
58500
|
this.system.particleSystem.position.set(position.x, position.y, position.z);
|
|
58480
58501
|
}
|
|
@@ -58490,7 +58511,7 @@ function (_EventDispatcher) {
|
|
|
58490
58511
|
}, {
|
|
58491
58512
|
key: "setRotation",
|
|
58492
58513
|
value: function setRotation(howmuch) {
|
|
58493
|
-
var rotation = _objectSpread2({}, this.getRotation(),
|
|
58514
|
+
var rotation = _objectSpread2(_objectSpread2({}, this.getRotation()), howmuch);
|
|
58494
58515
|
|
|
58495
58516
|
this.system.particleSystem.rotation.set(rotation.x, rotation.y, rotation.z);
|
|
58496
58517
|
}
|
|
@@ -58524,9 +58545,7 @@ function (_EventDispatcher) {
|
|
|
58524
58545
|
}]);
|
|
58525
58546
|
|
|
58526
58547
|
return ParticleEmitter;
|
|
58527
|
-
}(EventDispatcher);var Fountain =
|
|
58528
|
-
/*#__PURE__*/
|
|
58529
|
-
function (_ParticleEmitter) {
|
|
58548
|
+
}(EventDispatcher);var Fountain = /*#__PURE__*/function (_ParticleEmitter) {
|
|
58530
58549
|
_inherits(Fountain, _ParticleEmitter);
|
|
58531
58550
|
|
|
58532
58551
|
var _super = _createSuper(Fountain);
|
|
@@ -58590,9 +58609,7 @@ function (_ParticleEmitter) {
|
|
|
58590
58609
|
*
|
|
58591
58610
|
*/
|
|
58592
58611
|
(function(a,b){module.exports=b(require$$0);})(commonjsGlobal,function(a){function bd(a,b,c,d){bd._super_.call(this),this.camera=a,this.renderer=b,this.dis=c||20,d=d||"1234";for(var e=1;e<5;e++)this["d"+e]=d.indexOf(e+"")>=0;this.name="ScreenZone";}function bc(a,c,d,e,f,g){var h,i,j,k,l,e;bc._super_.call(this),b.Util.isUndefined(c,d,e,f,g)?(h=i=j=0,k=l=e=a||100):b.Util.isUndefined(e,f,g)?(h=i=j=0,k=a,l=c,e=d):(h=a,i=c,j=d,k=e,l=f,e=g),this.x=h,this.y=i,this.z=j,this.width=k,this.height=l,this.depth=e,this.friction=.85,this.max=6;}function bb(a,c,d){var e,f,g;bb._super_.call(this),b.Util.isUndefined(a,c,d)?e=f=g=0:(e=a,f=c,g=d),this.x=e,this.y=f,this.z=g;}function ba(b,c){ba._super_.call(this),b instanceof a.Geometry?this.geometry=b:this.geometry=b.geometry,this.scale=c||1;}function _(a,c,d,e){var f,g,h,i;_._super_.call(this),b.Util.isUndefined(c,d,e)?(f=g=h=0,i=a||100):(f=a,g=c,h=d,i=e),this.x=f,this.y=f,this.z=f,this.radius=i,this.tha=this.phi=0;}function $(a,c,d,e,f,g){$._super_.call(this),a instanceof b.Vector3D?(this.x1=a.x,this.y1=a.y,this.z1=a.z,this.x2=e.x,this.y2=e.y,this.z2=e.z):(this.x1=a,this.y1=c,this.z1=d,this.x2=e,this.y2=f,this.z2=g);}function Z(){this.vector=new b.Vector3D(0,0,0),this.random=0,this.crossType="dead",this.log=!0;}function Y(){Y._super_.call(this),this.targetPool=new b.Pool,this.materialPool=new b.Pool,this.name="CustomRender";}function X(b){X._super_.call(this,b),this._body=new a.Sprite(new a.SpriteMaterial({color:16777215})),this.name="SpriteRender";}function W(a){W._super_.call(this),this.points=a,this.name="PointsRender";}function V(c){V._super_.call(this),this.container=c,this._targetPool=new b.Pool,this._materialPool=new b.Pool,this._body=new a.Mesh(new a.BoxGeometry(50,50,50),new a.MeshLambertMaterial({color:"#ff0000"})),this.name="MeshRender";}function U(){this.name="BaseRender";}function R(a,c,d){this.mouseTarget=b.Util.initValue(a,window),this.ease=b.Util.initValue(c,.7),this._allowEmitting=!1,this.mouse=new b.Vector3D,this.initEventHandler(),R._super_.call(this,d);}function Q(a){this.selfBehaviours=[],Q._super_.call(this,a);}function P(a){this.initializes=[],this.particles=[],this.behaviours=[],this.currentEmitTime=0,this.totalEmitTimes=-1,this.damping=.006,this.bindEmitter=!0,this.rate=new b.Rate(1,.1),P._super_.call(this,a),this.id="emitter_"+P.ID++,this.cID=0,this.name="Emitter";}function O(a,b,c,d,e,f,g){O._super_.call(this,f,g),O.prototype.reset(a,b,c,d,e),this.name="Spring";}function N(a,b,c,d){N._super_.call(this,c,d),this.reset(a,b),this.name="Color";}function M(a,b,c,d,e){M._super_.call(this,d,e),this.reset(a,b,c),this.name="Rotate";}function L(a,b,c,d){L._super_.call(this,c,d),this.reset(a,b),this.name="Scale";}function K(a,b,c,d){K._super_.call(this,c,d),this.reset(a,b),this.name="Alpha";}function J(a,b,c,d){J._super_.call(this,c,d),this.reset(a,b),this.name="CrossZone";}function I(a,b,c,d,e){I._super_.call(this,d,e),this.reset(a,b,c),this.name="Collision";}function H(a,b,c){H._super_.call(this,0,-a,0,b,c),this.name="Gravity";}function G(a,b,c,d,e){G._super_.call(this,a,b,c,d,e),this.force*=-1,this.name="Repulsion";}function F(a,b,c,d,e,f){F._super_.call(this,e,f),this.reset(a,b,c,d),this.time=0,this.name="RandomDrift";}function E(a,c,d,e,f){E._super_.call(this,e,f),this.targetPosition=b.Util.initValue(a,new b.Vector3D),this.radius=b.Util.initValue(d,1e3),this.force=b.Util.initValue(this.normalizeValue(c),100),this.radiusSq=this.radius*this.radius,this.attractionForce=new b.Vector3D,this.lengthSq=0,this.name="Attraction";}function D(a,b,c,d,e){D._super_.call(this,d,e),D.prototype.reset.call(this,a,b,c),this.name="Force";}function C(a,c,d){C._super_.call(this),this.body=b.createArraySpan(a),this.w=c,this.h=b.Util.initValue(d,this.w);}function B(a,c,d){B._super_.call(this),this.radius=b.createSpan(a,c,d);}function A(a,c,d){A._super_.call(this),this.massPan=b.createSpan(a,c,d);}function z(a,c,d){z._super_.call(this),this.reset(a,c,d),this.dirVec=new b.Vector3D(0,0,0),this.name="Velocity";}function y(){y._super_.call(this),this.reset.apply(this,arguments);}function x(a,c,d){x._super_.call(this),this.lifePan=b.createSpan(a,c,d);}function v(){this.name="Initialize";}function u(a,c){this.numPan=b.createSpan(b.Util.initValue(a,1)),this.timePan=b.createSpan(b.Util.initValue(c,1)),this.startTime=0,this.nextTime=0,this.init();}function t(a,c){this.id="Behaviour_"+t.id++,this.life=b.Util.initValue(a,Infinity),this.easing=b.Util.initValue(c,b.ease.setEasingByName(b.ease.easeLinear)),this.age=0,this.energy=1,this.dead=!1,this.name="Behaviour";}function s(a,b,c,d,e,f){this.x=a,this.y=b,this.z=c,this.width=d,this.height=e,this.depth=f,this.bottom=this.y+this.height,this.right=this.x+this.width,this.right=this.x+this.width;}function q(a){this._arr=b.Util.isArray(a)?a:[a];}function p(a,c,d){this._isArray=!1,b.Util.isArray(a)?(this._isArray=!0,this.a=a):(this.a=b.Util.initValue(a,1),this.b=b.Util.initValue(c,this.a),this._center=b.Util.initValue(d,!1));}function j(){this.cID=0,this.list={};}function i(a){this.id="particle_"+i.ID++,this.name="Particle",this.reset("init"),b.Util.setPrototypeByObj(this,a);}function c(){this.initialize();}function b(a,c){this.preParticles=b.Util.initValue(a,b.POOL_MAX),this.integrationType=b.Util.initValue(c,b.EULER),this.emitters=[],this.renderers=[],this.pool=new b.Pool,b.integrator=new b.Integration(this.integrationType);}b.POOL_MAX=500,b.TIME_STEP=60,b.PI=3.142,b.DR=b.PI/180,b.MEASURE=100,b.EULER="euler",b.RK2="runge-kutta2",b.RK4="runge-kutta4",b.VERLET="verlet",b.PARTICLE_CREATED="partilcleCreated",b.PARTICLE_UPDATE="partilcleUpdate",b.PARTICLE_SLEEP="particleSleep",b.PARTICLE_DEAD="partilcleDead",b.PROTON_UPDATE="protonUpdate",b.PROTON_UPDATE_AFTER="protonUpdateAfter",b.EMITTER_ADDED="emitterAdded",b.EMITTER_REMOVED="emitterRemoved",b.bindEmtterEvent=!1,b.prototype={addRender:function(a){this.renderers.push(a),a.init(this);},removeRender:function(a){this.renderers.splice(this.renderers.indexOf(a),1),a.remove(this);},addEmitter:function(a){this.emitters.push(a),a.parent=this,this.dispatchEvent("EMITTER_ADDED",a);},removeEmitter:function(a){a.parent==this&&(this.emitters.splice(this.emitters.indexOf(a),1),a.parent=null,this.dispatchEvent("EMITTER_REMOVED",a));},update:function(a){this.dispatchEvent("PROTON_UPDATE",this);var b=a||.0167;if(b>0){var c=this.emitters.length;while(c--)this.emitters[c].update(b);}this.dispatchEvent("PROTON_UPDATE_AFTER",this);},getCount:function(){var a=0,b,c=this.emitters.length;for(b=0;b<c;b++)a+=this.emitters[b].particles.length;return a},destroy:function(){var a=0,b=this.emitters.length;for(a;a<b;a++)this.emitters[a].destroy(),delete this.emitters[a];this.emitters.length=0,this.pool.destroy();}},c.initialize=function(a){a.addEventListener=d.addEventListener,a.removeEventListener=d.removeEventListener,a.removeAllEventListeners=d.removeAllEventListeners,a.hasEventListener=d.hasEventListener,a.dispatchEvent=d.dispatchEvent;};var d=c.prototype;d._listeners=null,d.initialize=function(){},d.addEventListener=function(a,b){this._listeners?this.removeEventListener(a,b):this._listeners={},this._listeners[a]||(this._listeners[a]=[]),this._listeners[a].push(b);return b},d.removeEventListener=function(a,b){if(!!this._listeners){if(!this._listeners[a])return;var c=this._listeners[a];for(var d=0,e=c.length;d<e;d++)if(c[d]==b){e==1?delete this._listeners[a]:c.splice(d,1);break}}},d.removeAllEventListeners=function(a){a?this._listeners&&delete this._listeners[a]:this._listeners=null;},d.dispatchEvent=function(a,b){var c=!1,d=this._listeners;if(a&&d){var e=d[a];if(!e)return c;e=e.slice();var f,g=e.length;while(g--){var f=e[g];c=c||f(b);}}return !!c},d.hasEventListener=function(a){var b=this._listeners;return !!b&&!!b[a]},c.initialize(b.prototype),b.EventDispatcher=c;var e=e||{initValue:function(a,b){var a=a!=null&&a!=undefined?a:b;return a},isArray:function(a){return Object.prototype.toString.call(a)==="[object Array]"},destroyArray:function(a){a.length=0;},destroyObject:function(a){for(var b in a)delete a[b];},isUndefined:function(){for(var a in arguments){var b=arguments[a];if(b!==undefined)return !1}return !0},setVectorByObj:function(a,b){b.x!==undefined&&(a.p.x=b.x),b.y!==undefined&&(a.p.y=b.y),b.z!==undefined&&(a.p.z=b.z),b.vx!==undefined&&(a.v.x=b.vx),b.vy!==undefined&&(a.v.y=b.vy),b.vz!==undefined&&(a.v.z=b.vz),b.ax!==undefined&&(a.a.x=b.ax),b.ay!==undefined&&(a.a.y=b.ay),b.az!==undefined&&(a.a.z=b.az),b.p!==undefined&&a.p.copy(b.p),b.v!==undefined&&a.v.copy(b.v),b.a!==undefined&&a.a.copy(b.a),b.position!==undefined&&a.p.copy(b.position),b.velocity!==undefined&&a.v.copy(b.velocity),b.accelerate!==undefined&&a.a.copy(b.accelerate);},setPrototypeByObj:function(a,b,c){for(var d in b)a.hasOwnProperty(d)&&(c?c.indexOf(d)<0&&(a[d]=e._getValue(b[d])):a[d]=e._getValue(b[d]));return a},_getValue:function(a){return a instanceof p?a.getValue():a},inherits:function(a,b){a._super_=b;if(Object.create)a.prototype=Object.create(b.prototype,{constructor:{value:a}});else {var c=function(){};c.prototype=b.prototype,a.prototype=new c,a.prototype.constructor=a;}}};b.Util=e;var f=f||{getRGB:function(b){var c={};if(typeof b=="number")e=Math.floor(b),c.r=(b>>16&255)/255,c.g=(b>>8&255)/255,c.b=(b&255)/255;else if(typeof b=="string"){var d;if(d=/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(b))c.r=Math.min(255,parseInt(d[1],10))/255,c.g=Math.min(255,parseInt(d[2],10))/255,c.b=Math.min(255,parseInt(d[3],10))/255;else if(d=/^\#([A-Fa-f0-9]+)$/.exec(b)){var e=d[1];c.r=parseInt(e.charAt(0)+e.charAt(1),16)/255,c.g=parseInt(e.charAt(2)+e.charAt(3),16)/255,c.b=parseInt(e.charAt(4)+e.charAt(5),16)/255;}}else b instanceof a.Color&&(c.r=b.r,c.g=b.g,c.b=b.b);return c}};b.ColorUtil=f;var g={toScreenPos:function(){var b=new a.Vector3;return function(a,c,d){b.copy(a),b.project(c),b.x=Math.round((b.x+1)*d.width/2),b.y=Math.round((-b.y+1)*d.height/2),b.z=0;return b}}(),toSpacePos:function(){var b=new a.Vector3,c=new a.Vector3,d;return function(a,e,f){b.set(a.x/f.width*2-1,-(a.y/f.height)*2+1,.5),b.unproject(e),c.copy(b.sub(e.position).normalize()),d=-e.position.z/c.z,b.copy(e.position),b.add(c.multiplyScalar(d));return b}}(),getTexture:function(){var c={};return function(d){if(d instanceof a.Texture)return d;if(typeof d=="string"){var e=b.PUID.hash(d);c[e]||(c[e]=new a.Texture(d));return c[e]}if(d instanceof Image){var e=b.PUID.hash(d.src);c[e]||(c[e]=new a.Texture(d));return c[e]}}}()};b.THREEUtil=g;var h=h||{_id:0,_uids:{},id:function(a){for(var b in this._uids)if(this._uids[b]==a)return b;var c="PUID_"+this._id++;this._uids[c]=a;return c},hash:function(a){return}};b.PUID=h,i.ID=0,i.prototype={getDirection:function(){return Math.atan2(this.v.x,-this.v.y)*(180/b.PI)},reset:function(a){this.life=Infinity,this.age=0,this.energy=1,this.dead=!1,this.sleep=!1,this.body=null,this.parent=null,this.mass=1,this.radius=10,this.alpha=1,this.scale=1,this.useColor=!1,this.useAlpha=!1,this.easing=b.ease.setEasingByName(b.ease.easeLinear),a?(this.p=new b.Vector3D,this.v=new b.Vector3D,this.a=new b.Vector3D,this.old={},this.old.p=this.p.clone(),this.old.v=this.v.clone(),this.old.a=this.a.clone(),this.behaviours=[],this.transform={},this.color={r:0,g:0,b:0},this.rotation=new b.Vector3D):(this.p.set(0,0,0),this.v.set(0,0,0),this.a.set(0,0,0),this.old.p.set(0,0,0),this.old.v.set(0,0,0),this.old.a.set(0,0,0),this.color.r=0,this.color.g=0,this.color.b=0,this.rotation.clear(),b.Util.destroyObject(this.transform),this.removeAllBehaviours());return this},update:function(a,b){if(!this.sleep){this.age+=a;var c=this.behaviours.length;while(c--)this.behaviours[c]&&this.behaviours[c].applyBehaviour(this,a,b);}if(this.age>=this.life)this.destroy();else {var d=this.easing(this.age/this.life);this.energy=Math.max(1-d,0);}},addBehaviour:function(a){this.behaviours.push(a),a.initialize(this);},addBehaviours:function(a){var b=a.length;while(b--)this.addBehaviour(a[b]);},removeBehaviour:function(a){var b=this.behaviours.indexOf(a);b>-1&&this.behaviours.splice(b,1);},removeAllBehaviours:function(){b.Util.destroyArray(this.behaviours);},destroy:function(){this.removeAllBehaviours(),this.energy=0,this.dead=!0,this.parent=null;}},b.Particle=i,j.prototype={create:function(a){this.cID++;return typeof a=="function"?new a:a.clone()},getCount:function(){var a=0;for(var b in this.list)a+=this.list[b].length;return a++},get:function(a){var c,d=a.__puid||b.PUID.id(a);this.list[d]&&this.list[d].length>0?c=this.list[d].pop():c=this.create(a),c.__puid=a.__puid||d;return c},expire:function(a){return this._getList(a.__puid).push(a)},destroy:function(){for(var a in this.list)this.list[a].length=0,delete this.list[a];},_getList:function(a){a=a||"default",this.list[a]||(this.list[a]=[]);return this.list[a]}},b.Pool=j;var k={randomAToB:function(a,b,c){return c?(Math.random()*(b-a)>>0)+a:a+Math.random()*(b-a)},randomFloating:function(a,b,c){return k.randomAToB(a-b,a+b,c)},randomZone:function(a){},degreeTransform:function(a){return a*b.PI/180},toColor16:function(a){return "#"+a.toString(16)},randomColor:function(){return "#"+("00000"+(Math.random()*16777216<<0).toString(16)).slice(-6)},lerp:function(a,b,c){return b+(a-b)*c},getNormal:function(a,b){a.x==0&&a.y==0?a.z==0?b.set(1,0,1):b.set(1,1,-a.y/a.z):a.x==0?b.set(1,0,1):b.set(-a.y/a.x,1,1);return b.normalize()},axisRotate:function(a,b,c,d){var e=Math.cos(d),f=Math.sin(d),g=c.dot(b)*(1-e);a.copy(c),a.cross(b).scalar(f),a.addValue(b.x*e,b.y*e,b.z*e),a.addValue(c.x*g,c.y*g,c.z*g);}};b.MathUtils=k;var m=function(a){this.type=b.Util.initValue(a,b.EULER);};m.prototype={integrate:function(a,b,c){this.euler(a,b,c);},euler:function(a,b,c){a.sleep||(a.old.p.copy(a.p),a.old.v.copy(a.v),a.a.scalar(1/a.mass),a.v.add(a.a.scalar(b)),a.p.add(a.old.v.scalar(b)),c&&a.v.scalar(c),a.a.clear());}},b.Integration=m;var n=function(a,b,c){this.x=a||0,this.y=b||0,this.z=c||0;};n.prototype={set:function(a,b,c){this.x=a,this.y=b,this.z=c;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},getGradient:function(){if(this.x!=0)return Math.atan2(this.y,this.x);if(this.y>0)return b.PI/2;if(this.y<0)return -b.PI/2},copy:function(a){this.x=a.x,this.y=a.y,this.z=a.z;return this},add:function(a,b){if(b!==undefined)return this.addVectors(a,b);this.x+=a.x,this.y+=a.y,this.z+=a.z;return this},addValue:function(a,b,c){this.x+=a,this.y+=b,this.z+=c;return this},addVectors:function(a,b){this.x=a.x+b.x,this.y=a.y+b.y,this.z=a.z+b.z;return this},addScalar:function(a){this.x+=a,this.y+=a,this.z+=a;return this},sub:function(a,b){if(b!==undefined)return this.subVectors(a,b);this.x-=a.x,this.y-=a.y,this.z-=a.z;return this},subVectors:function(a,b){this.x=a.x-b.x,this.y=a.y-b.y,this.z=a.z-b.z;return this},scalar:function(a){this.x*=a,this.y*=a,this.z*=a;return this},divideScalar:function(a){a!==0?(this.x/=a,this.y/=a,this.z/=a):this.set(0,0,0);return this},negate:function(){return this.scalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},cross:function(a){var b=this.x,c=this.y,d=this.z;this.x=c*a.z-d*a.y,this.y=d*a.x-b*a.z,this.z=b*a.y-c*a.x;return this},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.lengthSq())},normalize:function(){return this.divideScalar(this.length())},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},crossVectors:function(a,b){var c=a.x,d=a.y,e=a.z,f=b.x,g=b.y,h=b.z;this.x=d*h-e*g,this.y=e*f-c*h,this.z=c*g-d*f;return this},eulerFromDir:function(a){},applyEuler:function(){var a;return function(c){a===undefined&&(a=new b.Quaternion),this.applyQuaternion(a.setFromEuler(c));return this}}(),applyAxisAngle:function(){var a;return function(c,d){a===undefined&&(a=new b.Quaternion),this.applyQuaternion(a.setFromAxisAngle(c,d));return this}}(),applyQuaternion:function(a){var b=this.x,c=this.y,d=this.z,e=a.x,f=a.y,g=a.z,h=a.w,i=h*b+f*d-g*c,j=h*c+g*b-e*d,k=h*d+e*c-f*b,l=-e*b-f*c-g*d;this.x=i*h+l*-e+j*-g-k*-f,this.y=j*h+l*-f+k*-e-i*-g,this.z=k*h+l*-g+i*-f-j*-e;return this},distanceToSquared:function(a){var b=this.x-a.x,c=this.y-a.y,d=this.z-a.z;return b*b+c*c+d*d},lerp:function(a,b){this.x+=(a.x-this.x)*b,this.y+=(a.y-this.y)*b,this.z+=(a.z-this.z)*b;return this},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z},clear:function(){this.x=0,this.y=0,this.z=0;return this},clone:function(){return new b.Vector3D(this.x,this.y,this.z)},toString:function(){return "x:"+this.x+"y:"+this.y+"z:"+this.z}},b.Vector3D=n;var o=function(a,b,c){this.radius=a||1,this.phi=c||0,this.theta=b||0;};o.prototype={set:function(a,b,c){this.radius=a||1,this.phi=c||0,this.theta=b||0;return this},setRadius:function(a){this.radius=a;return this},setPhi:function(a){this.phi=a;return this},setTheta:function(a){this.theta=a;return this},copy:function(a){this.radius=a.radius,this.phi=a.phi,this.theta=a.theta;return this},toVector3D:function(){return new b.Vector3D(this.getX(),this.getY(),this.getZ())},getX:function(){return this.radius*Math.sin(this.theta)*Math.cos(this.phi)},getY:function(){return -this.radius*Math.sin(this.theta)*Math.sin(this.phi)},getZ:function(){return this.radius*Math.cos(this.theta)},normalize:function(){this.radius=1;return this},equals:function(a){return a.radius===this.radius&&a.phi===this.phi&&a.theta===this.theta},clear:function(){this.radius=0,this.phi=0,this.theta=0;return this},clone:function(){return new o(this.radius,this.phi,this.theta)}},b.Polar3D=o,p.prototype={getValue:function(a){return this._isArray?this.a[this.a.length*Math.random()>>0]:this._center?b.MathUtils.randomFloating(this.a,this.b,a):b.MathUtils.randomAToB(this.a,this.b,a)}},b.createSpan=function(a,b,c){if(a instanceof p)return a;return b===undefined?new p(a):c===undefined?new p(a,b):new p(a,b,c)},b.Span=p,b.Util.inherits(q,b.Span),q.prototype.getValue=function(){var a=this._arr[this._arr.length*Math.random()>>0];return a=="random"||a=="Random"?b.MathUtils.randomColor():a},b.createArraySpan=function(a){if(!a)return null;return a instanceof b.ArraySpan?a:new b.ArraySpan(a)},b.ArraySpan=q;var r=function(a,b,c,d){this.x=a||0,this.y=b||0,this.z=c||0,this.w=d!==undefined?d:1;};r.prototype={set:function(a,b,c,d){this.x=a,this.y=b,this.z=c,this.w=d;return this},clone:function(){return new b.Quaternion(this.x,this.y,this.z,this.w)},copy:function(a){this.x=a.x,this.y=a.y,this.z=a.z,this.w=a.w;return this},setFromEuler:function(a){var b=Math.cos(a.x/2),c=Math.cos(a.y/2),d=Math.cos(a.z/2),e=Math.sin(a.x/2),f=Math.sin(a.y/2),g=Math.sin(a.z/2);this.x=e*c*d+b*f*g,this.y=b*f*d-e*c*g,this.z=b*c*g+e*f*d,this.w=b*c*d-e*f*g;return this},setFromAxisAngle:function(a,b){var c=b/2,d=Math.sin(c);this.x=a.x*d,this.y=a.y*d,this.z=a.z*d,this.w=Math.cos(c);return this},normalize:function(){var a=this.length();a===0?(this.x=0,this.y=0,this.z=0,this.w=1):(a=1/a,this.x*=a,this.y*=a,this.z*=a,this.w*=a);return this},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w}},b.Quaternion=r,s.prototype={contains:function(a,b,c){return a<=this.right&&a>=this.x&&b<=this.bottom&&b>=this.y&&c<=this.depth&&c>=this.z?!0:!1}},b.Box=s,t.id=0,t.prototype={reset:function(a,c){this.life=b.Util.initValue(a,Infinity),this.easing=b.Util.initValue(c,b.ease.setEasingByName(b.ease.easeLinear));},normalizeForce:function(a){return a.scalar(b.MEASURE)},normalizeValue:function(a){return a*b.MEASURE},initialize:function(a){},applyBehaviour:function(a,b,c){if(!this.dead){this.age+=b;if(this.age>=this.life){this.energy=0,this.dead=!0;return}var d=this.easing(a.age/a.life);this.energy=Math.max(1-d,0);}},destroy:function(){}},b.Behaviour=t,u.prototype={init:function(){this.startTime=0,this.nextTime=this.timePan.getValue();},getValue:function(a){this.startTime+=a;if(this.startTime>=this.nextTime){this.init();return this.numPan.b==1?this.numPan.getValue("Float")>.5?1:0:this.numPan.getValue("Int")}return 0}},b.Rate=u,v.prototype.reset=function(){},v.prototype.init=function(a,b){b?this.initialize(b):this.initialize(a);},v.prototype.initialize=function(a){},b.Initialize=v;var w={initialize:function(a,c,d){var e=d.length;while(e--){var f=d[e];f instanceof b.Initialize?f.init(a,c):w.init(a,c,f);}w.bindEmitter(a,c);},init:function(a,c,d){b.Util.setPrototypeByObj(c,d),b.Util.setVectorByObj(c,d);},bindEmitter:function(a,b){a.bindEmitter&&(b.p.add(a.p),b.v.add(a.v),b.a.add(a.a),b.v.applyEuler(a.rotation));}};b.InitializeUtil=w,b.Util.inherits(x,b.Initialize),x.prototype.initialize=function(a){this.lifePan.a==Infinity||this.lifePan.a=="infi"?a.life=Infinity:a.life=this.lifePan.getValue();},b.Life=x,b.Util.inherits(y,b.Initialize),y.prototype.reset=function(){this.zones?this.zones.length=0:this.zones=[];var a=Array.prototype.slice.call(arguments);this.zones=this.zones.concat(a);},y.prototype.addZone=function(){var a=Array.prototype.slice.call(arguments);this.zones=this.zones.concat(a);},y.prototype.initialize=function(){return function(a){var b=this.zones[Math.random()*this.zones.length>>0];b.getPosition(),a.p.x=b.vector.x,a.p.y=b.vector.y,a.p.z=b.vector.z;}}(),b.Position=y,b.P=y,b.Util.inherits(z,b.Initialize),z.prototype.reset=function(a,c,d){a instanceof b.Vector3D?(this.radiusPan=b.createSpan(1),this.dir=a.clone(),this.tha=c*b.DR,this._useV=!0):a instanceof b.Polar3D?(this.tha=c*b.DR,this.dirVec=a.toVector3D(),this._useV=!1):(this.radiusPan=b.createSpan(a),this.dir=c.clone().normalize(),this.tha=d*b.DR,this._useV=!0);},z.prototype.normalize=function(a){return a*b.MEASURE},z.prototype.initialize=function(){var a,c=new b.Vector3D(0,0,1),d=new b.Vector3D(0,0,0);return function(e){a=this.tha*Math.random(),this._useV&&this.dirVec.copy(this.dir).scalar(this.radiusPan.getValue()),b.MathUtils.getNormal(this.dirVec,c),d.copy(this.dirVec).applyAxisAngle(c,a),d.applyAxisAngle(this.dirVec.normalize(),Math.random()*b.PI*2),e.v.copy(d);return this}}(),b.Velocity=z,b.V=z,b.Util.inherits(A,b.Initialize),A.prototype.initialize=function(a){a.mass=this.massPan.getValue();},b.Mass=A,b.Util.inherits(B,b.Initialize),B.prototype.reset=function(a,c,d){this.radius=b.createSpan(a,c,d);},B.prototype.initialize=function(a){a.radius=this.radius.getValue(),a.transform.oldRadius=a.radius;},b.Radius=B,b.Util.inherits(C,b.Initialize),C.prototype.initialize=function(a){var b=this.body.getValue();this.w?a.body={width:this.w,height:this.h,body:b}:a.body=b;},b.Body=C,b.Util.inherits(D,b.Behaviour),D.prototype.reset=function(a,c,d){this.force=this.normalizeForce(new b.Vector3D(a,c,d)),this.force.id=Math.random();},D.prototype.applyBehaviour=function(a,b,c){D._super_.prototype.applyBehaviour.call(this,a,b,c),a.a.add(this.force);},b.F=b.Force=D,b.Util.inherits(E,b.Behaviour),E.prototype.reset=function(a,c,d,e,f){this.targetPosition=b.Util.initValue(a,new b.Vector3D),this.radius=b.Util.initValue(d,1e3),this.force=b.Util.initValue(this.normalizeValue(c),100),this.radiusSq=this.radius*this.radius,this.attractionForce=new b.Vector3D,this.lengthSq=0,e&&E._super_.prototype.reset.call(this,e,f);},E.prototype.applyBehaviour=function(a,b,c){E._super_.prototype.applyBehaviour.call(this,a,b,c),this.attractionForce.copy(this.targetPosition),this.attractionForce.sub(a.p),this.lengthSq=this.attractionForce.lengthSq(),this.lengthSq>4e-6&&this.lengthSq<this.radiusSq&&(this.attractionForce.normalize(),this.attractionForce.scalar(1-this.lengthSq/this.radiusSq),this.attractionForce.scalar(this.force),a.a.add(this.attractionForce));},b.Attraction=E,b.Util.inherits(F,b.Behaviour),F.prototype.reset=function(a,c,d,e,f,g){this.randomFoce=this.normalizeForce(new b.Vector3D(a,c,d)),this.delayPan=b.createSpan(e||.03),this.time=0,f&&F._super_.prototype.reset.call(this,f,g);},F.prototype.applyBehaviour=function(a,c,d){F._super_.prototype.applyBehaviour.call(this,a,c,d),this.time+=c;if(this.time>=this.delayPan.getValue()){var e=b.MathUtils.randomAToB(-this.randomFoce.x,this.randomFoce.x),f=b.MathUtils.randomAToB(-this.randomFoce.y,this.randomFoce.y),g=b.MathUtils.randomAToB(-this.randomFoce.z,this.randomFoce.z);a.a.addValue(e,f,g),this.time=0;}},b.RandomDrift=F,b.Util.inherits(G,b.Attraction),G.prototype.reset=function(a,b,c,d,e){G._super_.prototype.reset.call(this,a,b,c,d,e),this.force*=-1;},b.Repulsion=G,b.Util.inherits(H,b.Force),H.prototype.reset=function(a,b,c){H._super_.prototype.reset.call(this,0,-a,0,b,c);},b.Gravity=H,b.G=H,b.Util.inherits(I,b.Behaviour),I.prototype.reset=function(a,c,d,e,f){this.emitter=a,this.useMass=c,this.callback=d,this.particles=[],this.delta=new b.Vector3D,e&&I._super_.prototype.reset.call(this,e,f);},I.prototype.applyBehaviour=function(a,b,c){var d=this.emitter?this.emitter.particles.slice(c):this.particles.slice(c),e,f,g,h,i,j,k=d.length;while(k--){e=d[k];if(e==a)continue;this.delta.copy(e.p).sub(a.p),f=this.delta.lengthSq(),h=a.radius+e.radius,f<=h*h&&(g=h-Math.sqrt(f),g+=.5,i=this._getAverageMass(a,e),j=this._getAverageMass(e,a),a.p.add(this.delta.clone().normalize().scalar(g*-i)),e.p.add(this.delta.normalize().scalar(g*j)),this.callback&&this.callback(a,e));}},I.prototype._getAverageMass=function(a,b){return this.useMass?b.mass/(a.mass+b.mass):.5},b.Collision=I,b.Util.inherits(J,b.Behaviour),J.prototype.reset=function(a,c,d,e){var f,g;typeof a=="string"?(g=a,f=c):(g=c,f=a),this.zone=f,this.zone.crossType=b.Util.initValue(g,"dead"),d&&J._super_.prototype.reset.call(this,d,e);},J.prototype.applyBehaviour=function(a,b,c){J._super_.prototype.applyBehaviour.call(this,a,b,c),this.zone.crossing.call(this.zone,a);},b.CrossZone=J,b.Util.inherits(K,b.Behaviour),K.prototype.reset=function(a,c,d,e){c==null||c==undefined?this._same=!0:this._same=!1,this.a=b.createSpan(b.Util.initValue(a,1)),this.b=b.createSpan(c),d&&K._super_.prototype.reset.call(this,d,e);},K.prototype.initialize=function(a){a.useAlpha=!0,a.transform.alphaA=this.a.getValue(),this._same?a.transform.alphaB=a.transform.alphaA:a.transform.alphaB=this.b.getValue();},K.prototype.applyBehaviour=function(a,c,d){K._super_.prototype.applyBehaviour.call(this,a,c,d),a.alpha=b.MathUtils.lerp(a.transform.alphaA,a.transform.alphaB,this.energy),a.alpha<.002&&(a.alpha=0);},b.Alpha=K,b.Util.inherits(L,b.Behaviour),L.prototype.reset=function(a,c,d,e){c==null||c==undefined?this._same=!0:this._same=!1,this.a=b.createSpan(b.Util.initValue(a,1)),this.b=b.createSpan(c),d&&L._super_.prototype.reset.call(this,d,e);},L.prototype.initialize=function(a){a.transform.scaleA=this.a.getValue(),a.transform.oldRadius=a.radius,this._same?a.transform.scaleB=a.transform.scaleA:a.transform.scaleB=this.b.getValue();},L.prototype.applyBehaviour=function(a,c,d){L._super_.prototype.applyBehaviour.call(this,a,c,d),a.scale=b.MathUtils.lerp(a.transform.scaleA,a.transform.scaleB,this.energy),a.scale<5e-4&&(a.scale=0),a.radius=a.transform.oldRadius*a.scale;},b.Scale=L,b.Util.inherits(M,b.Behaviour),M.prototype.reset=function(a,c,d,e,f){this.a=a||0,this.b=c||0,this.c=d||0,a===undefined||a=="same"?this._type="same":c==undefined?this._type="set":d===undefined?this._type="to":(this._type="add",this.a=b.createSpan(this.a*b.DR),this.b=b.createSpan(this.b*b.DR),this.c=b.createSpan(this.c*b.DR)),e&&M._super_.prototype.reset.call(this,e,f);},M.prototype.initialize=function(a){switch(this._type){case"same":break;case"set":this._setRotation(a.rotation,this.a);break;case"to":a.transform.fR=a.transform.fR||new b.Vector3D,a.transform.tR=a.transform.tR||new b.Vector3D,this._setRotation(a.transform.fR,this.a),this._setRotation(a.transform.tR,this.b);break;case"add":a.transform.addR=new b.Vector3D(this.a.getValue(),this.b.getValue(),this.c.getValue());}},M.prototype._setRotation=function(a,c){a=a||new b.Vector3D;if(c=="random"){var d=b.MathUtils.randomAToB(-b.PI,b.PI),e=b.MathUtils.randomAToB(-b.PI,b.PI),f=b.MathUtils.randomAToB(-b.PI,b.PI);a.set(d,e,f);}else c instanceof b.Vector3D&&a.copy(c);},M.prototype.applyBehaviour=function(a,c,d){M._super_.prototype.applyBehaviour.call(this,a,c,d);switch(this._type){case"same":a.rotation||(a.rotation=new b.Vector3D),a.rotation.eulerFromDir(a.v);break;case"set":break;case"to":a.rotation.x=b.MathUtils.lerp(a.transform.fR.x,a.transform.tR.x,this.energy),a.rotation.y=b.MathUtils.lerp(a.transform.fR.y,a.transform.tR.y,this.energy),a.rotation.z=b.MathUtils.lerp(a.transform.fR.z,a.transform.tR.z,this.energy);break;case"add":a.rotation.add(a.transform.addR);}},b.Rotate=M,b.Util.inherits(N,b.Behaviour),N.prototype.reset=function(a,c,d,e){c==null||c==undefined?this._same=!0:this._same=!1,this.a=b.createArraySpan(a),this.b=b.createArraySpan(c),d&&N._super_.prototype.reset.call(this,d,e);},N.prototype.initialize=function(a){a.transform.colorA=b.ColorUtil.getRGB(this.a.getValue()),a.useColor=!0,this._same?a.transform.colorB=a.transform.colorA:a.transform.colorB=b.ColorUtil.getRGB(this.b.getValue());},N.prototype.applyBehaviour=function(a,c,d){N._super_.prototype.applyBehaviour.call(this,a,c,d),this._same?(a.color.r=a.transform.colorA.r,a.color.g=a.transform.colorA.g,a.color.b=a.transform.colorA.b):(a.color.r=b.MathUtils.lerp(a.transform.colorA.r,a.transform.colorB.r,this.energy),a.color.g=b.MathUtils.lerp(a.transform.colorA.g,a.transform.colorB.g,this.energy),a.color.b=b.MathUtils.lerp(a.transform.colorA.b,a.transform.colorB.b,this.energy));},b.Color=N,b.Util.inherits(O,b.Behaviour),O.prototype.reset=function(a,c,d,e,f){this.pos?this.pos.set(a,c,d):this.pos=new b.Vector3D(a,c,d),this.spring=e||.1,this.friction=f||.98;},O.prototype.applyBehaviour=function(a,b,c){O._super_.prototype.applyBehaviour.call(this,a,b,c),a.v.x+=(this.pos.x-a.p.x)*this.spring,a.v.y+=(this.pos.y-a.p.y)*this.spring,a.v.z+=(this.pos.z-a.p.z)*this.spring;},b.Spring=O,P.ID=0,b.Util.inherits(P,b.Particle),b.EventDispatcher.initialize(P.prototype),P.prototype.emit=function(a,c){this.currentEmitTime=0,this.totalEmitTimes=b.Util.initValue(a,Infinity),c==!0||c=="life"||c=="destroy"?this.life=a=="once"?1:this.totalEmitTimes:isNaN(c)||(this.life=c),this.rate.init();},P.prototype.stopEmit=function(){this.totalEmitTimes=-1,this.currentEmitTime=0;},P.prototype.removeAllParticles=function(){var a=this.particles.length;while(a--)this.particles[a].dead=!0;},P.prototype.createParticle=function(a,c){var d=this.parent.pool.get(b.Particle);this.setupParticle(d,a,c),this.parent&&this.parent.dispatchEvent("PARTICLE_CREATED",d),b.bindEmtterEvent&&this.dispatchEvent("PARTICLE_CREATED",d);return d},P.prototype.addSelfInitialize=function(a){a.init?a.init(this):this.initAll();},P.prototype.addInitialize=function(){var a=arguments.length;while(a--)this.initializes.push(arguments[a]);},P.prototype.removeInitialize=function(a){var b=this.initializes.indexOf(a);b>-1&&this.initializes.splice(b,1);},P.prototype.removeInitializers=function(){b.Util.destroyArray(this.initializes);},P.prototype.addBehaviour=function(){var a=arguments.length;while(a--)this.behaviours.push(arguments[a]);},P.prototype.removeBehaviour=function(a){var b=this.behaviours.indexOf(a);b>-1&&this.behaviours.splice(b,1);},P.prototype.removeAllBehaviours=function(){b.Util.destroyArray(this.behaviours);},P.prototype.integrate=function(a){var c=1-this.damping;b.integrator.integrate(this,a,c);var d=this.particles.length;while(d--){var e=this.particles[d];e.update(a,d),b.integrator.integrate(e,a,c),this.parent&&this.parent.dispatchEvent("PARTICLE_UPDATE",e),b.bindEmtterEvent&&this.dispatchEvent("PARTICLE_UPDATE",e);}},P.prototype.emitting=function(a){if(this.totalEmitTimes=="once"){var b=this.rate.getValue(99999);b>0&&(this.cID=b);while(b--)this.createParticle();this.totalEmitTimes="none";}else if(!isNaN(this.totalEmitTimes)){this.currentEmitTime+=a;if(this.currentEmitTime<this.totalEmitTimes){var b=this.rate.getValue(a);b>0&&(this.cID=b);while(b--)this.createParticle();}}},P.prototype.update=function(a){this.age+=a,(this.dead||this.age>=this.life)&&this.destroy(),this.emitting(a),this.integrate(a);var c,d=this.particles.length;while(d--)c=this.particles[d],c.dead&&(this.parent&&this.parent.dispatchEvent("PARTICLE_DEAD",c),b.bindEmtterEvent&&this.dispatchEvent("PARTICLE_DEAD",c),this.parent.pool.expire(c.reset()),this.particles.splice(d,1));},P.prototype.setupParticle=function(a,c,d){var e=this.initializes,f=this.behaviours;c&&(b.Util.isArray(c)?e=c:e=[c]),d&&(b.Util.isArray(d)?f=d:f=[d]),b.InitializeUtil.initialize(this,a,e),a.addBehaviours(f),a.parent=this,this.particles.push(a);},P.prototype.destroy=function(){this.dead=!0,this.energy=0,this.totalEmitTimes=-1,this.particles.length==0&&(this.removeInitializers(),this.removeAllBehaviours(),this.parent&&this.parent.removeEmitter(this));},b.Emitter=P,b.Util.inherits(Q,b.Emitter),Q.prototype.addSelfBehaviour=function(){var a=arguments.length,b;for(b=0;b<a;b++)this.selfBehaviours.push(arguments[b]);},Q.prototype.removeSelfBehaviour=function(a){var b=this.selfBehaviours.indexOf(a);b>-1&&this.selfBehaviours.splice(b,1);},Q.prototype.update=function(a){Q._super_.prototype.update.call(this,a);if(!this.sleep){var b=this.selfBehaviours.length,c;for(c=0;c<b;c++)this.selfBehaviours[c].applyBehaviour(this,a,c);}},b.BehaviourEmitter=Q,b.Util.inherits(R,b.Emitter),R.prototype.initEventHandler=function(){var a=this;this.mousemoveHandler=function(b){a.mousemove.call(a,b);},this.mousedownHandler=function(b){a.mousedown.call(a,b);},this.mouseupHandler=function(b){a.mouseup.call(a,b);},this.mouseTarget.addEventListener("mousemove",this.mousemoveHandler,!1);},R.prototype.emit=function(){this._allowEmitting=!0;},R.prototype.stopEmit=function(){this._allowEmitting=!1;},R.prototype.setCameraAndCanvas=function(a,b){this.camera=a,this.canvas=b;},R.prototype.setCameraAndRenderer=function(a,b){this.camera=a,this.renderer=b,this.canvas=b.domElement;},R.prototype.mousemove=function(a){var c=this.canvas.getBoundingClientRect(),d=a.clientX-c.left,e=a.clientY-c.top,f=this.renderer?this.renderer.getPixelRatio():1;d*=f,e*=f,this.mouse.x+=(d-this.mouse.x)*this.ease,this.mouse.y+=(e-this.mouse.y)*this.ease,this.p.copy(b.THREEUtil.toSpacePos(this.mouse,this.camera,this.canvas,this.renderer)),this._allowEmitting&&R._super_.prototype.emit.call(this,"once");},R.prototype.destroy=function(){R._super_.prototype.destroy.call(this),this.mouseTarget.removeEventListener("mousemove",this.mousemoveHandler,!1);},b.FollowEmitter=R;var S=S||{easeLinear:function(a){return a},easeInQuad:function(a){return Math.pow(a,2)},easeOutQuad:function(a){return -(Math.pow(a-1,2)-1)},easeInOutQuad:function(a){if((a/=.5)<1)return .5*Math.pow(a,2);return -0.5*((a-=2)*a-2)},easeInCubic:function(a){return Math.pow(a,3)},easeOutCubic:function(a){return Math.pow(a-1,3)+1},easeInOutCubic:function(a){if((a/=.5)<1)return .5*Math.pow(a,3);return .5*(Math.pow(a-2,3)+2)},easeInQuart:function(a){return Math.pow(a,4)},easeOutQuart:function(a){return -(Math.pow(a-1,4)-1)},easeInOutQuart:function(a){if((a/=.5)<1)return .5*Math.pow(a,4);return -0.5*((a-=2)*Math.pow(a,3)-2)},easeInSine:function(a){return -Math.cos(a*(b.PI/2))+1},easeOutSine:function(a){return Math.sin(a*(b.PI/2))},easeInOutSine:function(a){return -0.5*(Math.cos(b.PI*a)-1)},easeInExpo:function(a){return a===0?0:Math.pow(2,10*(a-1))},easeOutExpo:function(a){return a===1?1:-Math.pow(2,-10*a)+1},easeInOutExpo:function(a){if(a===0)return 0;if(a===1)return 1;if((a/=.5)<1)return .5*Math.pow(2,10*(a-1));return .5*(-Math.pow(2,-10*--a)+2)},easeInCirc:function(a){return -(Math.sqrt(1-a*a)-1)},easeOutCirc:function(a){return Math.sqrt(1-Math.pow(a-1,2))},easeInOutCirc:function(a){if((a/=.5)<1)return -0.5*(Math.sqrt(1-a*a)-1);return .5*(Math.sqrt(1-(a-=2)*a)+1)},easeInBack:function(a){var b=1.70158;return a*a*((b+1)*a-b)},easeOutBack:function(a){var b=1.70158;return (a=a-1)*a*((b+1)*a+b)+1},easeInOutBack:function(a){var b=1.70158;if((a/=.5)<1)return .5*a*a*(((b*=1.525)+1)*a-b);return .5*((a-=2)*a*(((b*=1.525)+1)*a+b)+2)},setEasingByName:function(a){return S[a]?S[a]:S.easeLinear}};for(var T in S)T!="setEasingByName"&&(b[T]=S[T]);b.ease=S,U.prototype={init:function(a){var b=this;this.proton=a,this.proton.addEventListener("PROTON_UPDATE",function(a){b.onProtonUpdate.call(b,a);}),this.proton.addEventListener("PARTICLE_CREATED",function(a){b.onParticleCreated.call(b,a);}),this.proton.addEventListener("PARTICLE_UPDATE",function(a){b.onParticleUpdate.call(b,a);}),this.proton.addEventListener("PARTICLE_DEAD",function(a){b.onParticleDead.call(b,a);});},remove:function(a){this.proton=null;},onParticleCreated:function(a){},onParticleUpdate:function(a){},onParticleDead:function(a){},onProtonUpdate:function(a){}},b.BaseRender=U,b.Util.inherits(V,b.BaseRender),V.prototype.onProtonUpdate=function(){},V.prototype.onParticleCreated=function(a){if(!a.target){a.body||(a.body=this._body),a.target=this._targetPool.get(a.body);if(a.useAlpha||a.useColor)a.target.material.__puid=b.PUID.id(a.body.material),a.target.material=this._materialPool.get(a.target.material);}a.target&&(a.target.position.copy(a.p),this.container.add(a.target));},V.prototype.onParticleUpdate=function(a){a.target&&(a.target.position.copy(a.p),a.target.rotation.set(a.rotation.x,a.rotation.y,a.rotation.z),this.scale(a),a.useAlpha&&(a.target.material.opacity=a.alpha,a.target.material.transparent=!0),a.useColor&&a.target.material.color.copy(a.color));},V.prototype.scale=function(a){a.target.scale.set(a.scale,a.scale,a.scale);},V.prototype.onParticleDead=function(a){a.target&&((a.useAlpha||a.useColor)&&this._materialPool.expire(a.target.material),this._targetPool.expire(a.target),this.container.remove(a.target),a.target=null);},b.MeshRender=V,b.Util.inherits(W,b.BaseRender),W.prototype.onProtonUpdate=function(){},W.prototype.onParticleCreated=function(b){b.target||(b.target=new a.Vector3),b.target.copy(b.p),this.points.geometry.vertices.push(b.target);},W.prototype.onParticleUpdate=function(a){a.target&&a.target.copy(a.p);},W.prototype.onParticleDead=function(a){if(a.target){var b=this.points.geometry.vertices.indexOf(a.target);b>-1&&this.points.geometry.vertices.splice(b,1),a.target=null;}},b.PointsRender=W,b.Util.inherits(X,b.MeshRender),X.prototype.scale=function(a){a.target.scale.set(a.scale*a.radius,a.scale*a.radius,1);},b.SpriteRender=X,b.Util.inherits(Y,b.BaseRender),Y.prototype.onProtonUpdate=function(){},Y.prototype.onParticleCreated=function(a){},Y.prototype.onParticleUpdate=function(a){},Y.prototype.onParticleDead=function(a){},b.CustomRender=Y,Z.prototype={getPosition:function(){return null},crossing:function(a){switch(this.crossType){case"bound":this._bound(a);break;case"cross":this._cross(a);break;case"dead":this._dead(a);}},_dead:function(a){},_bound:function(a){},_cross:function(a){}},b.Zone=Z,b.Util.inherits($,b.Zone),$.prototype.getPosition=function(){this.random=Math.random(),this.vector.x=this.x1+this.random*(this.x2-this.x1),this.vector.y=this.y1+this.random*(this.y2-this.y1),this.vector.z=this.z1+this.random*(this.z2-this.z1);return this.vector},$.prototype.crossing=function(a){this.log&&(console.error("Sorry LineZone does not support crossing method"),this.log=!1);},b.LineZone=$,b.Util.inherits(_,b.Zone),_.prototype.getPosition=function(){var a,c,d;return function(){this.random=Math.random(),d=this.random*this.radius,a=b.PI*Math.random(),c=b.PI*2*Math.random(),this.vector.x=this.x+d*Math.sin(a)*Math.cos(c),this.vector.y=this.y+d*Math.sin(c)*Math.sin(a),this.vector.z=this.z+d*Math.cos(a);return this.vector}}(),_.prototype._dead=function(a){var b=a.p.distanceTo(this);b-a.radius>this.radius&&(a.dead=!0);},_.prototype._bound=function(){var a=new b.Vector3D,c=new b.Vector3D,d;return function(b){var e=b.p.distanceTo(this);e+b.radius>=this.radius&&(a.copy(b.p).sub(this).normalize(),c.copy(b.v),d=2*c.dot(a),b.v.sub(a.scalar(d)));}}(),_.prototype._cross=function(a){this.log&&(console.error("Sorry SphereZone does not support _cross method"),this.log=!1);},b.SphereZone=_,b.Util.inherits(ba,b.Zone),ba.prototype.getPosition=function(){var a=this.geometry.vertices,b=a[a.length*Math.random()>>0];this.vector.x=b.x*this.scale,this.vector.y=b.y*this.scale,this.vector.z=b.z*this.scale;return this.vector},ba.prototype.crossing=function(a){this.log&&(console.error("Sorry MeshZone does not support crossing method"),this.log=!1);},b.MeshZone=ba,b.Util.inherits(bb,b.Zone),bb.prototype.getPosition=function(){this.vector.x=this.x,this.vector.y=this.y,this.vector.z=this.z;return this.vector},bb.prototype.crossing=function(a){this.log&&(console.error("Sorry PointZone does not support crossing method"),this.log=!1);},b.PointZone=bb,b.Util.inherits(bc,b.Zone),bc.prototype.getPosition=function(){this.vector.x=this.x+b.MathUtils.randomAToB(-0.5,.5)*this.width,this.vector.y=this.y+b.MathUtils.randomAToB(-0.5,.5)*this.height,this.vector.z=this.z+b.MathUtils.randomAToB(-0.5,.5)*this.depth;return this.vector},bc.prototype._dead=function(a){a.p.x+a.radius<this.x-this.width/2?a.dead=!0:a.p.x-a.radius>this.x+this.width/2&&(a.dead=!0),a.p.y+a.radius<this.y-this.height/2?a.dead=!0:a.p.y-a.radius>this.y+this.height/2&&(a.dead=!0),a.p.z+a.radius<this.z-this.depth/2?a.dead=!0:a.p.z-a.radius>this.z+this.depth/2&&(a.dead=!0);},bc.prototype._bound=function(a){a.p.x-a.radius<this.x-this.width/2?(a.p.x=this.x-this.width/2+a.radius,a.v.x*=-this.friction,this._static(a,"x")):a.p.x+a.radius>this.x+this.width/2&&(a.p.x=this.x+this.width/2-a.radius,a.v.x*=-this.friction,this._static(a,"x")),a.p.y-a.radius<this.y-this.height/2?(a.p.y=this.y-this.height/2+a.radius,a.v.y*=-this.friction,this._static(a,"y")):a.p.y+a.radius>this.y+this.height/2&&(a.p.y=this.y+this.height/2-a.radius,a.v.y*=-this.friction,this._static(a,"y")),a.p.z-a.radius<this.z-this.depth/2?(a.p.z=this.z-this.depth/2+a.radius,a.v.z*=-this.friction,this._static(a,"z")):a.p.z+a.radius>this.z+this.depth/2&&(a.p.z=this.z+this.depth/2-a.radius,a.v.z*=-this.friction,this._static(a,"z"));},bc.prototype._static=function(a,b){a.v[b]*a.a[b]>0||Math.abs(a.v[b])<Math.abs(a.a[b])*.0167*this.max&&(a.v[b]=0,a.a[b]=0);},bc.prototype._cross=function(a){a.p.x+a.radius<this.x-this.width/2&&a.v.x<=0?a.p.x=this.x+this.width/2+a.radius:a.p.x-a.radius>this.x+this.width/2&&a.v.x>=0&&(a.p.x=this.x-this.width/2-a.radius),a.p.y+a.radius<this.y-this.height/2&&a.v.y<=0?a.p.y=this.y+this.height/2+a.radius:a.p.y-a.radius>this.y+this.height/2&&a.v.y>=0&&(a.p.y=this.y-this.height/2-a.radius),a.p.z+a.radius<this.z-this.depth/2&&a.v.z<=0?a.p.z=this.z+this.depth/2+a.radius:a.p.z-a.radius>this.z+this.depth/2&&a.v.z>=0&&(a.p.z=this.z-this.depth/2-a.radius);},b.BoxZone=bc,b.Util.inherits(bd,b.Zone),bd.prototype.getPosition=function(){var a=new b.Vector3D,c;return function(){c=this.renderer.domElement,a.x=Math.random()*c.width,a.y=Math.random()*c.height,this.vector.copy(b.THREEUtil.toSpacePos(a,this.camera,c));return this.vector}}(),bd.prototype._dead=function(a){var c=b.THREEUtil.toScreenPos(a.p,this.camera,this.renderer.domElement),d=this.renderer.domElement;c.y+a.radius<-this.dis&&this.d1?a.dead=!0:c.y-a.radius>d.height+this.dis&&this.d3&&(a.dead=!0),c.x+a.radius<-this.dis&&this.d4?a.dead=!0:c.x-a.radius>d.width+this.dis&&this.d2&&(a.dead=!0);},bd.prototype._cross=function(){var a=new b.Vector3D;return function(c){var d=b.THREEUtil.toScreenPos(c.p,this.camera,this.renderer.domElement),e=this.renderer.domElement;d.y+c.radius<-this.dis?(a.x=d.x,a.y=e.height+this.dis+c.radius,c.p.y=b.THREEUtil.toSpacePos(a,this.camera,e).y):d.y-c.radius>e.height+this.dis&&(a.x=d.x,a.y=-this.dis-c.radius,c.p.y=b.THREEUtil.toSpacePos(a,this.camera,e).y),d.x+c.radius<-this.dis?(a.y=d.y,a.x=e.width+this.dis+c.radius,c.p.x=b.THREEUtil.toSpacePos(a,this.camera,e).x):d.x-c.radius>e.width+this.dis&&(a.y=d.y,a.x=-this.dis-c.radius,c.p.x=b.THREEUtil.toSpacePos(a,this.camera,e).x);}}(),bd.prototype._bound=function(a){var c=b.THREEUtil.toScreenPos(a.p,this.camera,this.renderer.domElement),d=this.renderer.domElement;c.y+a.radius<-this.dis?a.v.y*=-1:c.y-a.radius>d.height+this.dis&&(a.v.y*=-1),c.x+a.radius<-this.dis?a.v.y*=-1:c.x-a.radius>d.width+this.dis&&(a.v.y*=-1);},b.ScreenZone=bd;var be=function(){if(window.console&&window.console.trace){var a=Array.prototype.slice.call(arguments),b=arguments[0]+"";if(b.indexOf("+")==0){var c=parseInt(arguments[0]);be.once<c&&(a.shift(),console.trace.apply(console,a),be.once++);}else a.unshift("+15"),be.apply(console,a);}};be.once=0,b.log=be;var bf=bf||{addEventListener:function(a,b){a.addEventListener("PROTON_UPDATE",function(a){b(a);});},drawZone:function(c,d,e){var f,g,h;e instanceof b.PointZone?f=new a.SphereGeometry(15):e instanceof b.LineZone||(e instanceof b.BoxZone?f=new a.BoxGeometry(e.width,e.height,e.depth):e instanceof b.SphereZone?f=new a.SphereGeometry(e.radius,10,10):e instanceof b.MeshZone&&(e.geometry instanceof a.Geometry?f=e.geometry:f=e.geometry.geometry,f=new a.SphereGeometry(e.radius,10,10))),g=new a.MeshBasicMaterial({color:"#2194ce",wireframe:!0}),h=new a.Mesh(f,g),d.add(h),this.addEventListener(c,function(a){h.position.set(e.x,e.y,e.z);});},drawEmitter:function(b,c,d,e){var f=new a.OctahedronGeometry(15),g=new a.MeshBasicMaterial({color:e||"#aaa",wireframe:!0}),h=new a.Mesh(f,g);c.add(h),this.addEventListener(b,function(){h.position.copy(d.p),h.rotation.set(d.rotation.x,d.rotation.y,d.rotation.z);});},renderInfo:function(){function b(a){var b=a.emitters[0];return Math.round(b.p.x)+","+Math.round(b.p.y)+","+Math.round(b.p.z)}function a(a,b){var c=b=="material"?"_materialPool":"_targetPool",d=a.renderers[0];return d[c].cID}return function(c,d){this.addInfo(d);var e="";switch(this._infoType){case 2:e+="emitter:"+c.emitters.length+"<br>",e+="em speed:"+c.emitters[0].cID+"<br>",e+="pos:"+b(c);break;case 3:e+=c.renderers[0].name+"<br>",e+="target:"+a(c,"target")+"<br>",e+="material:"+a(c,"material");break;default:e+="particles:"+c.getCount()+"<br>",e+="pool:"+c.pool.getCount()+"<br>",e+="total:"+(c.getCount()+c.pool.getCount());}this._infoCon.innerHTML=e;}}(),addInfo:function(){return function(a){var b=this;if(!this._infoCon){this._infoCon=document.createElement("div"),this._infoCon.style.cssText=["position:fixed;bottom:0px;left:0;cursor:pointer;","opacity:0.9;z-index:10000;padding:10px;font-size:12px;","width:120px;height:50px;background-color:#002;color:#0ff;"].join(""),this._infoType=1,this._infoCon.addEventListener("click",function(a){b._infoType++,b._infoType>3&&(b._infoType=1);},!1);var c,d;switch(a){case 2:c="#201",d="#f08";break;case 3:c="#020",d="#0f0";break;default:c="#002",d="#0ff";}this._infoCon.style["background-color"]=c,this._infoCon.style.color=d;}this._infoCon.parentNode||document.body.appendChild(this._infoCon);}}()};b.Debug=bf;return b});
|
|
58593
|
-
});var ParticleEmitterGroup =
|
|
58594
|
-
/*#__PURE__*/
|
|
58595
|
-
function (_EventDispatcher) {
|
|
58612
|
+
});var ParticleEmitterGroup = /*#__PURE__*/function (_EventDispatcher) {
|
|
58596
58613
|
_inherits(ParticleEmitterGroup, _EventDispatcher);
|
|
58597
58614
|
|
|
58598
58615
|
var _super = _createSuper(ParticleEmitterGroup);
|
|
@@ -58700,7 +58717,7 @@ function (_EventDispatcher) {
|
|
|
58700
58717
|
var _this5 = this;
|
|
58701
58718
|
|
|
58702
58719
|
if (this.hasSystem()) {
|
|
58703
|
-
var position = _objectSpread2({}, this.getPosition(),
|
|
58720
|
+
var position = _objectSpread2(_objectSpread2({}, this.getPosition()), where);
|
|
58704
58721
|
|
|
58705
58722
|
Object.keys(this.system).forEach(function (emitterId) {
|
|
58706
58723
|
return _this5.system[emitterId].setPosition(position);
|
|
@@ -58723,7 +58740,7 @@ function (_EventDispatcher) {
|
|
|
58723
58740
|
var _this6 = this;
|
|
58724
58741
|
|
|
58725
58742
|
if (this.hasSystem()) {
|
|
58726
|
-
var rotation = _objectSpread2({}, this.getRotation(),
|
|
58743
|
+
var rotation = _objectSpread2(_objectSpread2({}, this.getRotation()), howmuch);
|
|
58727
58744
|
|
|
58728
58745
|
Object.keys(this.system).forEach(function (emitterId) {
|
|
58729
58746
|
return _this6.system[emitterId].setRotation(rotation);
|
|
@@ -58784,7 +58801,21 @@ function (_EventDispatcher) {
|
|
|
58784
58801
|
* THANKS TO https://flatuicolors.com/ for providing the palettes below.
|
|
58785
58802
|
*/
|
|
58786
58803
|
var BASE = {
|
|
58787
|
-
|
|
58804
|
+
WHITE: 0XFFFFFF,
|
|
58805
|
+
BLACK: 0x000000,
|
|
58806
|
+
RED: 0xFF0000,
|
|
58807
|
+
GREEN: 0x00FF00,
|
|
58808
|
+
BLUE: 0x0000FF,
|
|
58809
|
+
YELLOW: 0xFFFF00,
|
|
58810
|
+
CYAN: 0x00FFFF,
|
|
58811
|
+
MAGENTA: 0xFF00FF,
|
|
58812
|
+
SILVER: 0xC0C0C0,
|
|
58813
|
+
GRAY: 0x808080,
|
|
58814
|
+
MAROON: 0x800000,
|
|
58815
|
+
OLIVE: 0x808000,
|
|
58816
|
+
PURPLE: 0x800080,
|
|
58817
|
+
TEAL: 0x008080,
|
|
58818
|
+
NAVY: 0x000080
|
|
58788
58819
|
};
|
|
58789
58820
|
var FRENCH_PALETTE = {
|
|
58790
58821
|
/**
|
|
@@ -58813,12 +58844,11 @@ var FRENCH_PALETTE = {
|
|
|
58813
58844
|
};
|
|
58814
58845
|
var PALETTES = {
|
|
58815
58846
|
BASE: BASE,
|
|
58816
|
-
FRENCH_PALETTE: FRENCH_PALETTE
|
|
58847
|
+
FRENCH_PALETTE: FRENCH_PALETTE,
|
|
58848
|
+
FRENCH: FRENCH_PALETTE
|
|
58817
58849
|
};var DEFAULT_PARTICLE_COLOR = PALETTES.BASE.BLACK;
|
|
58818
58850
|
|
|
58819
|
-
var ProtonParticleEmitter =
|
|
58820
|
-
/*#__PURE__*/
|
|
58821
|
-
function (_ParticleEmitter) {
|
|
58851
|
+
var ProtonParticleEmitter = /*#__PURE__*/function (_ParticleEmitter) {
|
|
58822
58852
|
_inherits(ProtonParticleEmitter, _ParticleEmitter);
|
|
58823
58853
|
|
|
58824
58854
|
var _super = _createSuper(ProtonParticleEmitter);
|
|
@@ -58901,7 +58931,7 @@ function (_ParticleEmitter) {
|
|
|
58901
58931
|
value: function setPosition() {
|
|
58902
58932
|
var where = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
58903
58933
|
|
|
58904
|
-
var position = _objectSpread2({}, this.getPosition(),
|
|
58934
|
+
var position = _objectSpread2(_objectSpread2({}, this.getPosition()), where);
|
|
58905
58935
|
|
|
58906
58936
|
this.system.p.x = position.x;
|
|
58907
58937
|
this.system.p.y = position.y;
|
|
@@ -58920,7 +58950,7 @@ function (_ParticleEmitter) {
|
|
|
58920
58950
|
}, {
|
|
58921
58951
|
key: "setRotation",
|
|
58922
58952
|
value: function setRotation(howmuch) {
|
|
58923
|
-
var rotation = _objectSpread2({}, this.getRotation(),
|
|
58953
|
+
var rotation = _objectSpread2(_objectSpread2({}, this.getRotation()), howmuch);
|
|
58924
58954
|
|
|
58925
58955
|
this.system.rotation.x = rotation.x;
|
|
58926
58956
|
this.system.rotation.y = rotation.y;
|
|
@@ -59003,9 +59033,7 @@ var getFireBehaviours = function getFireBehaviours() {
|
|
|
59003
59033
|
return [new three_proton_min.Scale(1, 2), new three_proton_min.Color('#c0392b', '#f1c40f')];
|
|
59004
59034
|
};
|
|
59005
59035
|
|
|
59006
|
-
var Explosion =
|
|
59007
|
-
/*#__PURE__*/
|
|
59008
|
-
function (_ParticleEmitterGroup) {
|
|
59036
|
+
var Explosion = /*#__PURE__*/function (_ParticleEmitterGroup) {
|
|
59009
59037
|
_inherits(Explosion, _ParticleEmitterGroup);
|
|
59010
59038
|
|
|
59011
59039
|
var _super = _createSuper(Explosion);
|
|
@@ -59065,9 +59093,7 @@ var getFireBehaviours$1 = function getFireBehaviours(direction, strength) {
|
|
|
59065
59093
|
return [new three_proton_min.Scale(new three_proton_min.Span(2, 2.5), 0), new three_proton_min.G(strength / 100), new three_proton_min.Color('#FF0026', ['#ffff00', '#ffff11'], Infinity, three_proton_min.easeOutSine), new three_proton_min.RandomDrift(direction.x / 100, direction.y / 100, direction.z / 100, 2.5)];
|
|
59066
59094
|
};
|
|
59067
59095
|
|
|
59068
|
-
var Fire =
|
|
59069
|
-
/*#__PURE__*/
|
|
59070
|
-
function (_ProtonParticleEmitte) {
|
|
59096
|
+
var Fire = /*#__PURE__*/function (_ProtonParticleEmitte) {
|
|
59071
59097
|
_inherits(Fire, _ProtonParticleEmitte);
|
|
59072
59098
|
|
|
59073
59099
|
var _super = _createSuper(Fire);
|
|
@@ -59092,9 +59118,7 @@ function (_ProtonParticleEmitte) {
|
|
|
59092
59118
|
}
|
|
59093
59119
|
|
|
59094
59120
|
return Fire;
|
|
59095
|
-
}(ProtonParticleEmitter);var Rain =
|
|
59096
|
-
/*#__PURE__*/
|
|
59097
|
-
function (_ParticleEmitter) {
|
|
59121
|
+
}(ProtonParticleEmitter);var Rain = /*#__PURE__*/function (_ParticleEmitter) {
|
|
59098
59122
|
_inherits(Rain, _ParticleEmitter);
|
|
59099
59123
|
|
|
59100
59124
|
var _super = _createSuper(Rain);
|
|
@@ -59140,9 +59164,7 @@ function (_ParticleEmitter) {
|
|
|
59140
59164
|
}
|
|
59141
59165
|
|
|
59142
59166
|
return Rain;
|
|
59143
|
-
}(ParticleEmitter);var Snow =
|
|
59144
|
-
/*#__PURE__*/
|
|
59145
|
-
function (_ParticleEmitter) {
|
|
59167
|
+
}(ParticleEmitter);var Snow = /*#__PURE__*/function (_ParticleEmitter) {
|
|
59146
59168
|
_inherits(Snow, _ParticleEmitter);
|
|
59147
59169
|
|
|
59148
59170
|
var _super = _createSuper(Snow);
|
|
@@ -59202,9 +59224,7 @@ var getTrailBehaviour = function getTrailBehaviour() {
|
|
|
59202
59224
|
return [new three_proton_min.Alpha(1, 0), new three_proton_min.Color("#ffffff"), new three_proton_min.Scale(.5, 0.1)];
|
|
59203
59225
|
};
|
|
59204
59226
|
|
|
59205
|
-
var Trail =
|
|
59206
|
-
/*#__PURE__*/
|
|
59207
|
-
function (_ParticleEmitterGroup) {
|
|
59227
|
+
var Trail = /*#__PURE__*/function (_ParticleEmitterGroup) {
|
|
59208
59228
|
_inherits(Trail, _ParticleEmitterGroup);
|
|
59209
59229
|
|
|
59210
59230
|
var _super = _createSuper(Trail);
|
|
@@ -59242,9 +59262,7 @@ function (_ParticleEmitterGroup) {
|
|
|
59242
59262
|
TRAIL: 'trail'
|
|
59243
59263
|
};
|
|
59244
59264
|
var GROUP = PARTICLE_EMITTER_TYPES.GROUP;
|
|
59245
|
-
var Particles =
|
|
59246
|
-
/*#__PURE__*/
|
|
59247
|
-
function () {
|
|
59265
|
+
var Particles = /*#__PURE__*/function () {
|
|
59248
59266
|
function Particles() {
|
|
59249
59267
|
var _this = this,
|
|
59250
59268
|
_this$map;
|
|
@@ -59387,9 +59405,7 @@ function () {
|
|
|
59387
59405
|
|
|
59388
59406
|
return Particles;
|
|
59389
59407
|
}();
|
|
59390
|
-
var Particles$1 = new Particles();var Trails =
|
|
59391
|
-
/*#__PURE__*/
|
|
59392
|
-
function (_BaseScript) {
|
|
59408
|
+
var Particles$1 = new Particles();var Trails = /*#__PURE__*/function (_BaseScript) {
|
|
59393
59409
|
_inherits(Trails, _BaseScript);
|
|
59394
59410
|
|
|
59395
59411
|
var _super = _createSuper(Trails);
|
|
@@ -59426,13 +59442,89 @@ function (_BaseScript) {
|
|
|
59426
59442
|
}]);
|
|
59427
59443
|
|
|
59428
59444
|
return Trails;
|
|
59445
|
+
}(BaseScript);var DEFAULT_DISTANCE = 5.0;
|
|
59446
|
+
var DEFAULT_HEIGHT$1 = 3.0;
|
|
59447
|
+
var DEFAULT_HEIGHT_DAMPING = 2.0;
|
|
59448
|
+
var DEFAULT_LOOK_AT_HEIGHT = 1;
|
|
59449
|
+
var DEFAULT_ROTATION_SNAP_TIME = 0.3;
|
|
59450
|
+
var DEFAULT_DISTANCE_SNAP_TIME = 0.5;
|
|
59451
|
+
var DEFAULT_DISTANCE_MULTIPLIER = 1;
|
|
59452
|
+
|
|
59453
|
+
var SmoothCarFollow = /*#__PURE__*/function (_BaseScript) {
|
|
59454
|
+
_inherits(SmoothCarFollow, _BaseScript);
|
|
59455
|
+
|
|
59456
|
+
var _super = _createSuper(SmoothCarFollow);
|
|
59457
|
+
|
|
59458
|
+
function SmoothCarFollow() {
|
|
59459
|
+
_classCallCheck(this, SmoothCarFollow);
|
|
59460
|
+
|
|
59461
|
+
return _super.call(this, 'SmoothCarFollow');
|
|
59462
|
+
}
|
|
59463
|
+
|
|
59464
|
+
_createClass(SmoothCarFollow, [{
|
|
59465
|
+
key: "start",
|
|
59466
|
+
value: function start(camera, options) {
|
|
59467
|
+
var target = options.target,
|
|
59468
|
+
_options$height = options.height,
|
|
59469
|
+
height = _options$height === void 0 ? DEFAULT_HEIGHT$1 : _options$height,
|
|
59470
|
+
_options$heightDampin = options.heightDamping,
|
|
59471
|
+
heightDamping = _options$heightDampin === void 0 ? DEFAULT_HEIGHT_DAMPING : _options$heightDampin,
|
|
59472
|
+
_options$lookAtHeight = options.lookAtHeight,
|
|
59473
|
+
lookAtHeight = _options$lookAtHeight === void 0 ? DEFAULT_LOOK_AT_HEIGHT : _options$lookAtHeight,
|
|
59474
|
+
_options$distance = options.distance,
|
|
59475
|
+
distance = _options$distance === void 0 ? DEFAULT_DISTANCE : _options$distance,
|
|
59476
|
+
_options$rotationSnap = options.rotationSnapTime,
|
|
59477
|
+
rotationSnapTime = _options$rotationSnap === void 0 ? DEFAULT_ROTATION_SNAP_TIME : _options$rotationSnap,
|
|
59478
|
+
_options$distanceSnap = options.distanceSnapTime,
|
|
59479
|
+
distanceSnapTime = _options$distanceSnap === void 0 ? DEFAULT_DISTANCE_SNAP_TIME : _options$distanceSnap,
|
|
59480
|
+
_options$distanceMult = options.distanceMultiplier,
|
|
59481
|
+
distanceMultiplier = _options$distanceMult === void 0 ? DEFAULT_DISTANCE_MULTIPLIER : _options$distanceMult;
|
|
59482
|
+
this.camera = camera;
|
|
59483
|
+
this.target = target;
|
|
59484
|
+
this.height = height;
|
|
59485
|
+
this.heightDamping = heightDamping;
|
|
59486
|
+
this.distance = distance;
|
|
59487
|
+
this.rotationSnapTime = rotationSnapTime;
|
|
59488
|
+
this.distanceSnapTime = distanceSnapTime;
|
|
59489
|
+
this.distanceMultiplier = distanceMultiplier;
|
|
59490
|
+
this.lookAtVector = new Vector3$1(0, lookAtHeight, 0);
|
|
59491
|
+
}
|
|
59492
|
+
}, {
|
|
59493
|
+
key: "followCar",
|
|
59494
|
+
value: function followCar(dt) {
|
|
59495
|
+
var direction = this.target.getPhysicsState('direction');
|
|
59496
|
+
|
|
59497
|
+
if (direction) {
|
|
59498
|
+
var x = direction.x,
|
|
59499
|
+
y = direction.y,
|
|
59500
|
+
z = direction.z;
|
|
59501
|
+
var cameraPosition = this.camera.getPosition();
|
|
59502
|
+
var targetPosition = this.target.getPosition();
|
|
59503
|
+
var vector = new Vector3$1(x, y, z).negate().normalize().multiplyScalar(this.distance);
|
|
59504
|
+
vector.y = y + this.height;
|
|
59505
|
+
var desiredPosition = targetPosition.add(vector); // const lerpFactor = 1 - Math.pow(0.1, dt);
|
|
59506
|
+
|
|
59507
|
+
cameraPosition.lerpVectors(cameraPosition, desiredPosition, dt);
|
|
59508
|
+
this.camera.setPosition(cameraPosition);
|
|
59509
|
+
var lookAtTarget = new Vector3$1();
|
|
59510
|
+
lookAtTarget.copy(this.target.getPosition().add(this.lookAtVector));
|
|
59511
|
+
this.camera.lookAt(lookAtTarget);
|
|
59512
|
+
}
|
|
59513
|
+
}
|
|
59514
|
+
}, {
|
|
59515
|
+
key: "update",
|
|
59516
|
+
value: function update(dt) {
|
|
59517
|
+
this.followCar(dt);
|
|
59518
|
+
}
|
|
59519
|
+
}]);
|
|
59520
|
+
|
|
59521
|
+
return SmoothCarFollow;
|
|
59429
59522
|
}(BaseScript);var BUILTIN = {
|
|
59430
59523
|
BASECAR: 'BaseCar',
|
|
59431
|
-
TRAILS: 'Trails'
|
|
59524
|
+
TRAILS: 'Trails',
|
|
59525
|
+
SMOOTH_CAR_FOLLOW: 'SmoothCarFollow'
|
|
59432
59526
|
};
|
|
59433
|
-
var Scripts =
|
|
59434
|
-
/*#__PURE__*/
|
|
59435
|
-
function () {
|
|
59527
|
+
var Scripts = /*#__PURE__*/function () {
|
|
59436
59528
|
function Scripts() {
|
|
59437
59529
|
var _this = this,
|
|
59438
59530
|
_this$map;
|
|
@@ -59465,7 +59557,7 @@ function () {
|
|
|
59465
59557
|
});
|
|
59466
59558
|
});
|
|
59467
59559
|
|
|
59468
|
-
this.map = (_this$map = {}, _defineProperty(_this$map, BUILTIN.BASECAR, BaseCar), _defineProperty(_this$map, BUILTIN.TRAILS, Trails), _this$map);
|
|
59560
|
+
this.map = (_this$map = {}, _defineProperty(_this$map, BUILTIN.BASECAR, BaseCar), _defineProperty(_this$map, BUILTIN.TRAILS, Trails), _defineProperty(_this$map, BUILTIN.SMOOTH_CAR_FOLLOW, SmoothCarFollow), _this$map);
|
|
59469
59561
|
}
|
|
59470
59562
|
|
|
59471
59563
|
_createClass(Scripts, [{
|
|
@@ -59516,6 +59608,11 @@ function () {
|
|
|
59516
59608
|
console.error('[Mage] Script not provided.');
|
|
59517
59609
|
}
|
|
59518
59610
|
}
|
|
59611
|
+
}, {
|
|
59612
|
+
key: "BUILTIN",
|
|
59613
|
+
get: function get() {
|
|
59614
|
+
return BUILTIN;
|
|
59615
|
+
}
|
|
59519
59616
|
}]);
|
|
59520
59617
|
|
|
59521
59618
|
return Scripts;
|
|
@@ -59529,9 +59626,7 @@ var AUDIO_RAMPS = {
|
|
|
59529
59626
|
LINEAR: 'LINEAR',
|
|
59530
59627
|
EXPONENTIAL: 'EXPONENTIAL'
|
|
59531
59628
|
};
|
|
59532
|
-
var Audio$1 =
|
|
59533
|
-
/*#__PURE__*/
|
|
59534
|
-
function () {
|
|
59629
|
+
var Audio$1 = /*#__PURE__*/function () {
|
|
59535
59630
|
function Audio() {
|
|
59536
59631
|
var _this = this;
|
|
59537
59632
|
|
|
@@ -59719,9 +59814,7 @@ function () {
|
|
|
59719
59814
|
|
|
59720
59815
|
return Audio;
|
|
59721
59816
|
}();
|
|
59722
|
-
var Audio$2 = new Audio$1();var Beat =
|
|
59723
|
-
/*#__PURE__*/
|
|
59724
|
-
function () {
|
|
59817
|
+
var Audio$2 = new Audio$1();var Beat = /*#__PURE__*/function () {
|
|
59725
59818
|
function Beat(name) {
|
|
59726
59819
|
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
59727
59820
|
|
|
@@ -59866,9 +59959,7 @@ function () {
|
|
|
59866
59959
|
}]);
|
|
59867
59960
|
|
|
59868
59961
|
return Beat;
|
|
59869
|
-
}();var Sound =
|
|
59870
|
-
/*#__PURE__*/
|
|
59871
|
-
function (_Beat) {
|
|
59962
|
+
}();var Sound = /*#__PURE__*/function (_Beat) {
|
|
59872
59963
|
_inherits(Sound, _Beat);
|
|
59873
59964
|
|
|
59874
59965
|
var _super = _createSuper(Sound);
|
|
@@ -59992,9 +60083,7 @@ function (_Beat) {
|
|
|
59992
60083
|
}]);
|
|
59993
60084
|
|
|
59994
60085
|
return Sound;
|
|
59995
|
-
}(Beat);var Sound$1 =
|
|
59996
|
-
/*#__PURE__*/
|
|
59997
|
-
function (_Beat) {
|
|
60086
|
+
}(Beat);var Sound$1 = /*#__PURE__*/function (_Beat) {
|
|
59998
60087
|
_inherits(Sound, _Beat);
|
|
59999
60088
|
|
|
60000
60089
|
var _super = _createSuper(Sound);
|
|
@@ -60118,9 +60207,7 @@ function (_Beat) {
|
|
|
60118
60207
|
}]);
|
|
60119
60208
|
|
|
60120
60209
|
return Sound;
|
|
60121
|
-
}(Beat);var DirectionalSound =
|
|
60122
|
-
/*#__PURE__*/
|
|
60123
|
-
function (_Sound) {
|
|
60210
|
+
}(Beat);var DirectionalSound = /*#__PURE__*/function (_Sound) {
|
|
60124
60211
|
_inherits(DirectionalSound, _Sound);
|
|
60125
60212
|
|
|
60126
60213
|
var _super = _createSuper(DirectionalSound);
|
|
@@ -60180,7 +60267,9 @@ function (_Sound) {
|
|
|
60180
60267
|
}]);
|
|
60181
60268
|
|
|
60182
60269
|
return DirectionalSound;
|
|
60183
|
-
}(Sound$1);var
|
|
60270
|
+
}(Sound$1);var _excluded$2 = ["autoplay"],
|
|
60271
|
+
_excluded2 = ["autoplay"];
|
|
60272
|
+
var DEFAULT_POSITION$1 = {
|
|
60184
60273
|
x: 0,
|
|
60185
60274
|
y: 0,
|
|
60186
60275
|
z: 0
|
|
@@ -60214,9 +60303,7 @@ var ENTITY_EVENTS = {
|
|
|
60214
60303
|
};
|
|
60215
60304
|
var DEFAULT_TAG = 'all';
|
|
60216
60305
|
|
|
60217
|
-
var Entity =
|
|
60218
|
-
/*#__PURE__*/
|
|
60219
|
-
function (_EventDispatcher) {
|
|
60306
|
+
var Entity = /*#__PURE__*/function (_EventDispatcher) {
|
|
60220
60307
|
_inherits(Entity, _EventDispatcher);
|
|
60221
60308
|
|
|
60222
60309
|
var _super = _createSuper(Entity);
|
|
@@ -60325,6 +60412,11 @@ function (_EventDispatcher) {
|
|
|
60325
60412
|
value: function getBody() {
|
|
60326
60413
|
return this.body;
|
|
60327
60414
|
}
|
|
60415
|
+
}, {
|
|
60416
|
+
key: "setBody",
|
|
60417
|
+
value: function setBody(body) {
|
|
60418
|
+
this.body = body;
|
|
60419
|
+
}
|
|
60328
60420
|
}, {
|
|
60329
60421
|
key: "add",
|
|
60330
60422
|
value: function add(element) {
|
|
@@ -60614,7 +60706,7 @@ function (_EventDispatcher) {
|
|
|
60614
60706
|
value: function addSound(name, options) {
|
|
60615
60707
|
var _options$autoplay = options.autoplay,
|
|
60616
60708
|
autoplay = _options$autoplay === void 0 ? false : _options$autoplay,
|
|
60617
|
-
opts = _objectWithoutProperties(options,
|
|
60709
|
+
opts = _objectWithoutProperties(options, _excluded$2);
|
|
60618
60710
|
|
|
60619
60711
|
this.isPlayingSound = autoplay;
|
|
60620
60712
|
this.sound = new Sound(name, _objectSpread2({
|
|
@@ -60628,7 +60720,7 @@ function (_EventDispatcher) {
|
|
|
60628
60720
|
value: function addDirectionalSound(name, options) {
|
|
60629
60721
|
var _options$autoplay2 = options.autoplay,
|
|
60630
60722
|
autoplay = _options$autoplay2 === void 0 ? false : _options$autoplay2,
|
|
60631
|
-
opts = _objectWithoutProperties(options,
|
|
60723
|
+
opts = _objectWithoutProperties(options, _excluded2);
|
|
60632
60724
|
|
|
60633
60725
|
this.isPlayingSound = autoplay;
|
|
60634
60726
|
this.sound = new DirectionalSound(name, _objectSpread2({
|
|
@@ -60691,7 +60783,7 @@ function (_EventDispatcher) {
|
|
|
60691
60783
|
key: "setScale",
|
|
60692
60784
|
value: function setScale(howbig) {
|
|
60693
60785
|
if (this.hasBody()) {
|
|
60694
|
-
var scale = _objectSpread2({}, this.getScale(),
|
|
60786
|
+
var scale = _objectSpread2(_objectSpread2({}, this.getScale()), howbig);
|
|
60695
60787
|
|
|
60696
60788
|
this.body.scale.set(scale.x, scale.y, scale.z);
|
|
60697
60789
|
}
|
|
@@ -60948,9 +61040,7 @@ function (_EventDispatcher) {
|
|
|
60948
61040
|
}]);
|
|
60949
61041
|
|
|
60950
61042
|
return Entity;
|
|
60951
|
-
}(EventDispatcher);var AnimationHandler =
|
|
60952
|
-
/*#__PURE__*/
|
|
60953
|
-
function (_EventDispatcher) {
|
|
61043
|
+
}(EventDispatcher);var AnimationHandler = /*#__PURE__*/function (_EventDispatcher) {
|
|
60954
61044
|
_inherits(AnimationHandler, _EventDispatcher);
|
|
60955
61045
|
|
|
60956
61046
|
var _super = _createSuper(AnimationHandler);
|
|
@@ -61067,9 +61157,7 @@ function (_EventDispatcher) {
|
|
|
61067
61157
|
return AnimationHandler;
|
|
61068
61158
|
}(EventDispatcher);var inverseProjectionMatrix = new Matrix4();
|
|
61069
61159
|
|
|
61070
|
-
var Frustum$1 =
|
|
61071
|
-
/*#__PURE__*/
|
|
61072
|
-
function () {
|
|
61160
|
+
var Frustum$1 = /*#__PURE__*/function () {
|
|
61073
61161
|
function Frustum(data) {
|
|
61074
61162
|
_classCallCheck(this, Frustum);
|
|
61075
61163
|
|
|
@@ -61186,9 +61274,7 @@ var DEFAULT_INTENSITY = 1;
|
|
|
61186
61274
|
var DEFAULT_NEAR = 1;
|
|
61187
61275
|
var DEFAULT_FAR = 2000;
|
|
61188
61276
|
var DEFAULT_MARGIN = 200;
|
|
61189
|
-
var CascadeShadowMaps =
|
|
61190
|
-
/*#__PURE__*/
|
|
61191
|
-
function () {
|
|
61277
|
+
var CascadeShadowMaps = /*#__PURE__*/function () {
|
|
61192
61278
|
function CascadeShadowMaps(_ref) {
|
|
61193
61279
|
var _ref$camera = _ref.camera,
|
|
61194
61280
|
camera = _ref$camera === void 0 ? Scene$2.getCameraBody() : _ref$camera,
|
|
@@ -61524,9 +61610,7 @@ var SUNLIGHT = 'sunlight';
|
|
|
61524
61610
|
var SPOTLIGHT = 'spotlight';
|
|
61525
61611
|
var HEMISPHERELIGHT = 'hemisphere';
|
|
61526
61612
|
var TIME_TO_UPDATE = 100;
|
|
61527
|
-
var Lights =
|
|
61528
|
-
/*#__PURE__*/
|
|
61529
|
-
function () {
|
|
61613
|
+
var Lights = /*#__PURE__*/function () {
|
|
61530
61614
|
function Lights() {
|
|
61531
61615
|
_classCallCheck(this, Lights);
|
|
61532
61616
|
|
|
@@ -61615,9 +61699,7 @@ var Lights$1 = new Lights();var ToonShader = {
|
|
|
61615
61699
|
"float diffuse = dot( normal, lVector );", "if ( diffuse > 0.6 ) { diffuse = 1.0; }", "else if ( diffuse > -0.2 ) { diffuse = 0.7; }", "else { diffuse = 0.3; }", "gl_FragColor = vec4( uKd * uMaterialColor * uDirLightColor * diffuse, 1.0 );", "}"].join("\n")
|
|
61616
61700
|
};
|
|
61617
61701
|
|
|
61618
|
-
var ToonMaterial =
|
|
61619
|
-
/*#__PURE__*/
|
|
61620
|
-
function (_ShaderMaterial) {
|
|
61702
|
+
var ToonMaterial = /*#__PURE__*/function (_ShaderMaterial) {
|
|
61621
61703
|
_inherits(ToonMaterial, _ShaderMaterial);
|
|
61622
61704
|
|
|
61623
61705
|
var _super = _createSuper(ToonMaterial);
|
|
@@ -61795,17 +61877,21 @@ var mapColliderTypeToHitbox = function mapColliderTypeToHitbox() {
|
|
|
61795
61877
|
|
|
61796
61878
|
var colliderType = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : COLLIDER_TYPES.BOX;
|
|
61797
61879
|
return (_COLLIDER_TYPES$BOX$C = {}, _defineProperty(_COLLIDER_TYPES$BOX$C, COLLIDER_TYPES.BOX, getBoxHitbox), _defineProperty(_COLLIDER_TYPES$BOX$C, COLLIDER_TYPES.SPHERE, getSphereHitbox), _COLLIDER_TYPES$BOX$C)[colliderType] || getBoxHitbox;
|
|
61798
|
-
};var
|
|
61880
|
+
};var _excluded$3 = ["position", "quaternion"],
|
|
61881
|
+
_excluded2$1 = ["applyPhysicsUpdate"],
|
|
61882
|
+
_excluded3 = ["dt", "event"];
|
|
61883
|
+
var COLLIDER_TAG = 'collider';
|
|
61799
61884
|
var COLLIDER_COLOR = 0xff0000;
|
|
61800
61885
|
var DEFAULT_COLLIDER_OFFSET = {
|
|
61801
61886
|
x: 0,
|
|
61802
61887
|
y: 0,
|
|
61803
61888
|
z: 0
|
|
61804
61889
|
};
|
|
61890
|
+
var DEFAULT_PHYSICS_OPTIONS = {
|
|
61891
|
+
applyPhysicsUpdate: true
|
|
61892
|
+
};
|
|
61805
61893
|
|
|
61806
|
-
var Element =
|
|
61807
|
-
/*#__PURE__*/
|
|
61808
|
-
function (_Entity) {
|
|
61894
|
+
var Element = /*#__PURE__*/function (_Entity) {
|
|
61809
61895
|
_inherits(Element, _Entity);
|
|
61810
61896
|
|
|
61811
61897
|
var _super = _createSuper(Element);
|
|
@@ -61891,7 +61977,7 @@ function (_Entity) {
|
|
|
61891
61977
|
var type = _ref2.type,
|
|
61892
61978
|
vector = _ref2.vector;
|
|
61893
61979
|
|
|
61894
|
-
var parsedOffset = _objectSpread2({}, DEFAULT_COLLIDER_OFFSET,
|
|
61980
|
+
var parsedOffset = _objectSpread2(_objectSpread2({}, DEFAULT_COLLIDER_OFFSET), offset);
|
|
61895
61981
|
|
|
61896
61982
|
var position = _this.body.position.clone().add(new Vector3$1(parsedOffset.x, parsedOffset.y, parsedOffset.z));
|
|
61897
61983
|
|
|
@@ -62033,10 +62119,16 @@ function (_Entity) {
|
|
|
62033
62119
|
}
|
|
62034
62120
|
});
|
|
62035
62121
|
|
|
62036
|
-
_defineProperty(_assertThisInitialized(_this), "handlePhysicsUpdate", function (
|
|
62122
|
+
_defineProperty(_assertThisInitialized(_this), "handlePhysicsUpdate", function (_ref6) {
|
|
62123
|
+
var position = _ref6.position,
|
|
62124
|
+
quaternion = _ref6.quaternion,
|
|
62125
|
+
data = _objectWithoutProperties(_ref6, _excluded$3);
|
|
62126
|
+
|
|
62037
62127
|
_this.setPosition(position);
|
|
62038
62128
|
|
|
62039
62129
|
_this.setQuaternion(quaternion);
|
|
62130
|
+
|
|
62131
|
+
_this.setPhysicsState(data);
|
|
62040
62132
|
});
|
|
62041
62133
|
|
|
62042
62134
|
_defineProperty(_assertThisInitialized(_this), "equals", function (object) {
|
|
@@ -62052,10 +62144,11 @@ function (_Entity) {
|
|
|
62052
62144
|
|
|
62053
62145
|
_this.texture = undefined;
|
|
62054
62146
|
_this.opacity = 1;
|
|
62055
|
-
_this.options = _objectSpread2({}, _options, {
|
|
62147
|
+
_this.options = _objectSpread2(_objectSpread2({}, _options), {}, {
|
|
62056
62148
|
name: _name
|
|
62057
62149
|
});
|
|
62058
|
-
_this.physicsOptions =
|
|
62150
|
+
_this.physicsOptions = DEFAULT_PHYSICS_OPTIONS;
|
|
62151
|
+
_this.physicsState = {};
|
|
62059
62152
|
|
|
62060
62153
|
_this.setBody({
|
|
62061
62154
|
geometry: geometry,
|
|
@@ -62082,10 +62175,10 @@ function (_Entity) {
|
|
|
62082
62175
|
}
|
|
62083
62176
|
}, {
|
|
62084
62177
|
key: "setBody",
|
|
62085
|
-
value: function setBody(
|
|
62086
|
-
var body =
|
|
62087
|
-
geometry =
|
|
62088
|
-
material =
|
|
62178
|
+
value: function setBody(_ref7) {
|
|
62179
|
+
var body = _ref7.body,
|
|
62180
|
+
geometry = _ref7.geometry,
|
|
62181
|
+
material = _ref7.material;
|
|
62089
62182
|
|
|
62090
62183
|
if (body) {
|
|
62091
62184
|
this.body = body;
|
|
@@ -62148,9 +62241,9 @@ function (_Entity) {
|
|
|
62148
62241
|
}, {
|
|
62149
62242
|
key: "setName",
|
|
62150
62243
|
value: function setName(name) {
|
|
62151
|
-
var
|
|
62152
|
-
|
|
62153
|
-
replace =
|
|
62244
|
+
var _ref8 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
|
|
62245
|
+
_ref8$replace = _ref8.replace,
|
|
62246
|
+
replace = _ref8$replace === void 0 ? false : _ref8$replace;
|
|
62154
62247
|
|
|
62155
62248
|
_get(_getPrototypeOf(Element.prototype), "setName", this).call(this, name);
|
|
62156
62249
|
|
|
@@ -62259,10 +62352,11 @@ function (_Entity) {
|
|
|
62259
62352
|
}
|
|
62260
62353
|
}, {
|
|
62261
62354
|
key: "setPhysicsOptions",
|
|
62262
|
-
value: function setPhysicsOptions(
|
|
62263
|
-
var
|
|
62264
|
-
|
|
62265
|
-
|
|
62355
|
+
value: function setPhysicsOptions() {
|
|
62356
|
+
var _ref9 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_PHYSICS_OPTIONS,
|
|
62357
|
+
_ref9$applyPhysicsUpd = _ref9.applyPhysicsUpdate,
|
|
62358
|
+
applyPhysicsUpdate = _ref9$applyPhysicsUpd === void 0 ? true : _ref9$applyPhysicsUpd,
|
|
62359
|
+
rest = _objectWithoutProperties(_ref9, _excluded2$1);
|
|
62266
62360
|
|
|
62267
62361
|
var parsedOptions = _objectSpread2({
|
|
62268
62362
|
applyPhysicsUpdate: applyPhysicsUpdate
|
|
@@ -62275,6 +62369,23 @@ function (_Entity) {
|
|
|
62275
62369
|
value: function getPhysicsOptions(option) {
|
|
62276
62370
|
return option ? this.physicsOptions[option] : this.physicsOptions;
|
|
62277
62371
|
}
|
|
62372
|
+
}, {
|
|
62373
|
+
key: "setPhysicsState",
|
|
62374
|
+
value: function setPhysicsState() {
|
|
62375
|
+
var _ref10 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
|
62376
|
+
dt = _ref10.dt,
|
|
62377
|
+
event = _ref10.event,
|
|
62378
|
+
data = _objectWithoutProperties(_ref10, _excluded3);
|
|
62379
|
+
|
|
62380
|
+
var physicsState = _objectSpread2(_objectSpread2({}, this.physicsState), data);
|
|
62381
|
+
|
|
62382
|
+
this.physicsState = physicsState;
|
|
62383
|
+
}
|
|
62384
|
+
}, {
|
|
62385
|
+
key: "getPhysicsState",
|
|
62386
|
+
value: function getPhysicsState(key) {
|
|
62387
|
+
return key ? this.physicsState[key] : this.physicsState;
|
|
62388
|
+
}
|
|
62278
62389
|
}, {
|
|
62279
62390
|
key: "enablePhysics",
|
|
62280
62391
|
value: function enablePhysics() {
|
|
@@ -62304,8 +62415,8 @@ function (_Entity) {
|
|
|
62304
62415
|
}, {
|
|
62305
62416
|
key: "isCollidingOnDirection",
|
|
62306
62417
|
value: function isCollidingOnDirection(direction) {
|
|
62307
|
-
var collider = this.colliders.filter(function (
|
|
62308
|
-
var type =
|
|
62418
|
+
var collider = this.colliders.filter(function (_ref11) {
|
|
62419
|
+
var type = _ref11.type;
|
|
62309
62420
|
return type === direction;
|
|
62310
62421
|
})[0];
|
|
62311
62422
|
var emptyCollision = {
|
|
@@ -62501,7 +62612,7 @@ function (_Entity) {
|
|
|
62501
62612
|
key: "toJSON",
|
|
62502
62613
|
value: function toJSON() {
|
|
62503
62614
|
if (this.serializable) {
|
|
62504
|
-
return _objectSpread2({}, _get(_getPrototypeOf(Element.prototype), "toJSON", this).call(this), {
|
|
62615
|
+
return _objectSpread2(_objectSpread2({}, _get(_getPrototypeOf(Element.prototype), "toJSON", this).call(this)), {}, {
|
|
62505
62616
|
body: this.body.toJSON(),
|
|
62506
62617
|
scripts: this.mapScriptsToJSON(),
|
|
62507
62618
|
texture: this.texture
|
|
@@ -62511,9 +62622,7 @@ function (_Entity) {
|
|
|
62511
62622
|
}]);
|
|
62512
62623
|
|
|
62513
62624
|
return Element;
|
|
62514
|
-
}(Entity);var Camera$1 =
|
|
62515
|
-
/*#__PURE__*/
|
|
62516
|
-
function (_Entity) {
|
|
62625
|
+
}(Entity);var Camera$1 = /*#__PURE__*/function (_Entity) {
|
|
62517
62626
|
_inherits(Camera, _Entity);
|
|
62518
62627
|
|
|
62519
62628
|
var _super = _createSuper(Camera);
|
|
@@ -62528,7 +62637,9 @@ function (_Entity) {
|
|
|
62528
62637
|
name: name
|
|
62529
62638
|
});
|
|
62530
62639
|
_this.options = options;
|
|
62531
|
-
|
|
62640
|
+
|
|
62641
|
+
_this.setBody(new PerspectiveCamera(options.fov, options.ratio, options.near, options.far));
|
|
62642
|
+
|
|
62532
62643
|
return _this;
|
|
62533
62644
|
}
|
|
62534
62645
|
|
|
@@ -62568,28 +62679,41 @@ function (_Entity) {
|
|
|
62568
62679
|
}]);
|
|
62569
62680
|
|
|
62570
62681
|
return Camera;
|
|
62571
|
-
}(Entity);var Grid =
|
|
62572
|
-
|
|
62573
|
-
|
|
62682
|
+
}(Entity);var Grid = /*#__PURE__*/function (_Element) {
|
|
62683
|
+
_inherits(Grid, _Element);
|
|
62684
|
+
|
|
62685
|
+
var _super = _createSuper(Grid);
|
|
62686
|
+
|
|
62574
62687
|
function Grid(size, division, color1, color2) {
|
|
62688
|
+
var _this;
|
|
62689
|
+
|
|
62575
62690
|
_classCallCheck(this, Grid);
|
|
62576
62691
|
|
|
62577
|
-
|
|
62578
|
-
|
|
62692
|
+
var options = {
|
|
62693
|
+
size: size,
|
|
62694
|
+
division: division,
|
|
62695
|
+
color1: color1,
|
|
62696
|
+
color2: color2
|
|
62697
|
+
};
|
|
62698
|
+
_this = _super.call(this, null, null, options);
|
|
62699
|
+
_this.body = new GridHelper(size, division, color1, color2);
|
|
62700
|
+
|
|
62701
|
+
_this.setBody({
|
|
62702
|
+
body: body
|
|
62703
|
+
});
|
|
62704
|
+
|
|
62705
|
+
_this.setEntityType(ENTITY_TYPES.MESH);
|
|
62706
|
+
|
|
62707
|
+
return _this;
|
|
62579
62708
|
}
|
|
62580
62709
|
|
|
62581
62710
|
_createClass(Grid, [{
|
|
62582
62711
|
key: "update",
|
|
62583
62712
|
value: function update() {}
|
|
62584
|
-
}, {
|
|
62585
|
-
key: "render",
|
|
62586
|
-
value: function render() {}
|
|
62587
62713
|
}]);
|
|
62588
62714
|
|
|
62589
62715
|
return Grid;
|
|
62590
|
-
}();var Cube =
|
|
62591
|
-
/*#__PURE__*/
|
|
62592
|
-
function (_Element) {
|
|
62716
|
+
}(Element);var Cube = /*#__PURE__*/function (_Element) {
|
|
62593
62717
|
_inherits(Cube, _Element);
|
|
62594
62718
|
|
|
62595
62719
|
var _super = _createSuper(Cube);
|
|
@@ -62621,9 +62745,7 @@ function (_Element) {
|
|
|
62621
62745
|
}
|
|
62622
62746
|
|
|
62623
62747
|
return Cube;
|
|
62624
|
-
}(Element);var Sphere$1 =
|
|
62625
|
-
/*#__PURE__*/
|
|
62626
|
-
function (_Element) {
|
|
62748
|
+
}(Element);var Sphere$1 = /*#__PURE__*/function (_Element) {
|
|
62627
62749
|
_inherits(Sphere, _Element);
|
|
62628
62750
|
|
|
62629
62751
|
var _super = _createSuper(Sphere);
|
|
@@ -62656,9 +62778,7 @@ function (_Element) {
|
|
|
62656
62778
|
}
|
|
62657
62779
|
|
|
62658
62780
|
return Sphere;
|
|
62659
|
-
}(Element);var Cylinder =
|
|
62660
|
-
/*#__PURE__*/
|
|
62661
|
-
function (_Element) {
|
|
62781
|
+
}(Element);var Cylinder = /*#__PURE__*/function (_Element) {
|
|
62662
62782
|
_inherits(Cylinder, _Element);
|
|
62663
62783
|
|
|
62664
62784
|
var _super = _createSuper(Cylinder);
|
|
@@ -62696,9 +62816,7 @@ function (_Element) {
|
|
|
62696
62816
|
}(Element);var DEFAULT_LINE_COLOR = 0xffffff;
|
|
62697
62817
|
var DEFAULT_LINE_THICKNESS = 2;
|
|
62698
62818
|
|
|
62699
|
-
var Line$1 =
|
|
62700
|
-
/*#__PURE__*/
|
|
62701
|
-
function (_Element) {
|
|
62819
|
+
var Line$1 = /*#__PURE__*/function (_Element) {
|
|
62702
62820
|
_inherits(Line$1, _Element);
|
|
62703
62821
|
|
|
62704
62822
|
var _super = _createSuper(Line$1);
|
|
@@ -62797,9 +62915,7 @@ function (_Element) {
|
|
|
62797
62915
|
return Line$1;
|
|
62798
62916
|
}(Element);var DEFAULT_CURVE_LINE_DIVISIONS = 20;
|
|
62799
62917
|
|
|
62800
|
-
var CurveLine =
|
|
62801
|
-
/*#__PURE__*/
|
|
62802
|
-
function (_Line) {
|
|
62918
|
+
var CurveLine = /*#__PURE__*/function (_Line) {
|
|
62803
62919
|
_inherits(CurveLine, _Line);
|
|
62804
62920
|
|
|
62805
62921
|
var _super = _createSuper(CurveLine);
|
|
@@ -62836,9 +62952,7 @@ function (_Line) {
|
|
|
62836
62952
|
}(Line$1);var UP$1 = new Vector3$1(0, 1, 0);
|
|
62837
62953
|
var DOWN$1 = new Vector3$1(0, -1, 0);
|
|
62838
62954
|
|
|
62839
|
-
var Plane$1 =
|
|
62840
|
-
/*#__PURE__*/
|
|
62841
|
-
function (_Element) {
|
|
62955
|
+
var Plane$1 = /*#__PURE__*/function (_Element) {
|
|
62842
62956
|
_inherits(Plane, _Element);
|
|
62843
62957
|
|
|
62844
62958
|
var _super = _createSuper(Plane);
|
|
@@ -62894,9 +63008,7 @@ function (_Element) {
|
|
|
62894
63008
|
}]);
|
|
62895
63009
|
|
|
62896
63010
|
return Plane;
|
|
62897
|
-
}(Element);var Box =
|
|
62898
|
-
/*#__PURE__*/
|
|
62899
|
-
function (_Element) {
|
|
63011
|
+
}(Element);var Box = /*#__PURE__*/function (_Element) {
|
|
62900
63012
|
_inherits(Box, _Element);
|
|
62901
63013
|
|
|
62902
63014
|
var _super = _createSuper(Box);
|
|
@@ -62930,14 +63042,14 @@ function (_Element) {
|
|
|
62930
63042
|
}
|
|
62931
63043
|
|
|
62932
63044
|
return Box;
|
|
62933
|
-
}(Element);var
|
|
63045
|
+
}(Element);var _excluded$4 = ["anisotropy"];
|
|
63046
|
+
|
|
63047
|
+
var validateAnisotropy = function validateAnisotropy(anisotropy) {
|
|
62934
63048
|
var max = Scene$2.getRenderer().capabilities.getMaxAnisotropy();
|
|
62935
63049
|
return anisotropy > max ? max : anisotropy;
|
|
62936
63050
|
};
|
|
62937
63051
|
|
|
62938
|
-
var Sprite$1 =
|
|
62939
|
-
/*#__PURE__*/
|
|
62940
|
-
function (_Element) {
|
|
63052
|
+
var Sprite$1 = /*#__PURE__*/function (_Element) {
|
|
62941
63053
|
_inherits(Sprite$1, _Element);
|
|
62942
63054
|
|
|
62943
63055
|
var _super = _createSuper(Sprite$1);
|
|
@@ -62956,7 +63068,7 @@ function (_Element) {
|
|
|
62956
63068
|
|
|
62957
63069
|
var _options$anisotropy = options.anisotropy,
|
|
62958
63070
|
anisotropy = _options$anisotropy === void 0 ? 1 : _options$anisotropy,
|
|
62959
|
-
rest = _objectWithoutProperties(options,
|
|
63071
|
+
rest = _objectWithoutProperties(options, _excluded$4);
|
|
62960
63072
|
|
|
62961
63073
|
var texture = Images$1.get(spriteTexture);
|
|
62962
63074
|
texture.anisotropy = validateAnisotropy(anisotropy);
|
|
@@ -62990,9 +63102,7 @@ function (_Element) {
|
|
|
62990
63102
|
}]);
|
|
62991
63103
|
|
|
62992
63104
|
return Sprite$1;
|
|
62993
|
-
}(Element);var BackgroundSound =
|
|
62994
|
-
/*#__PURE__*/
|
|
62995
|
-
function (_Sound) {
|
|
63105
|
+
}(Element);var BackgroundSound = /*#__PURE__*/function (_Sound) {
|
|
62996
63106
|
_inherits(BackgroundSound, _Sound);
|
|
62997
63107
|
|
|
62998
63108
|
var _super = _createSuper(BackgroundSound);
|
|
@@ -63034,9 +63144,7 @@ function (_Sound) {
|
|
|
63034
63144
|
}]);
|
|
63035
63145
|
|
|
63036
63146
|
return BackgroundSound;
|
|
63037
|
-
}(Sound$1);var Video =
|
|
63038
|
-
/*#__PURE__*/
|
|
63039
|
-
function () {
|
|
63147
|
+
}(Sound$1);var Video = /*#__PURE__*/function () {
|
|
63040
63148
|
function Video() {
|
|
63041
63149
|
_classCallCheck(this, Video);
|
|
63042
63150
|
}
|
|
@@ -65564,19 +65672,11 @@ for (var i = 0; i < 32; ++i) {
|
|
|
65564
65672
|
} // fixed length map
|
|
65565
65673
|
|
|
65566
65674
|
|
|
65567
|
-
var flm =
|
|
65568
|
-
/*#__PURE__*/
|
|
65569
|
-
hMap(flt, 9, 0),
|
|
65570
|
-
flrm =
|
|
65571
|
-
/*#__PURE__*/
|
|
65572
|
-
hMap(flt, 9, 1); // fixed distance map
|
|
65675
|
+
var flm = /*#__PURE__*/hMap(flt, 9, 0),
|
|
65676
|
+
flrm = /*#__PURE__*/hMap(flt, 9, 1); // fixed distance map
|
|
65573
65677
|
|
|
65574
|
-
var fdm =
|
|
65575
|
-
/*#__PURE__*/
|
|
65576
|
-
hMap(fdt, 5, 0),
|
|
65577
|
-
fdrm =
|
|
65578
|
-
/*#__PURE__*/
|
|
65579
|
-
hMap(fdt, 5, 1); // find max of array
|
|
65678
|
+
var fdm = /*#__PURE__*/hMap(fdt, 5, 0),
|
|
65679
|
+
fdrm = /*#__PURE__*/hMap(fdt, 5, 1); // find max of array
|
|
65580
65680
|
|
|
65581
65681
|
var max = function max(a) {
|
|
65582
65682
|
var m = a[0];
|
|
@@ -66116,13 +66216,9 @@ var wblk = function wblk(dat, out, final, syms, lf, df, eb, li, bs, bl, p) {
|
|
|
66116
66216
|
}; // deflate options (nice << 13) | chain
|
|
66117
66217
|
|
|
66118
66218
|
|
|
66119
|
-
var deo =
|
|
66120
|
-
/*#__PURE__*/
|
|
66121
|
-
new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]); // empty
|
|
66219
|
+
var deo = /*#__PURE__*/new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]); // empty
|
|
66122
66220
|
|
|
66123
|
-
var et =
|
|
66124
|
-
/*#__PURE__*/
|
|
66125
|
-
new u8(0); // compresses data into a raw DEFLATE buffer
|
|
66221
|
+
var et = /*#__PURE__*/new u8(0); // compresses data into a raw DEFLATE buffer
|
|
66126
66222
|
|
|
66127
66223
|
var dflt = function dflt(dat, lvl, plvl, pre, post, lst) {
|
|
66128
66224
|
var s = dat.length;
|
|
@@ -66275,9 +66371,7 @@ var dflt = function dflt(dat, lvl, plvl, pre, post, lst) {
|
|
|
66275
66371
|
}; // CRC32 table
|
|
66276
66372
|
|
|
66277
66373
|
|
|
66278
|
-
var crct =
|
|
66279
|
-
/*#__PURE__*/
|
|
66280
|
-
function () {
|
|
66374
|
+
var crct = /*#__PURE__*/function () {
|
|
66281
66375
|
var t = new u32(256);
|
|
66282
66376
|
|
|
66283
66377
|
for (var i = 0; i < 256; ++i) {
|
|
@@ -66604,9 +66698,7 @@ function AsyncCmpStrm(opts, cb) {
|
|
|
66604
66698
|
*/
|
|
66605
66699
|
|
|
66606
66700
|
|
|
66607
|
-
var Deflate =
|
|
66608
|
-
/*#__PURE__*/
|
|
66609
|
-
function () {
|
|
66701
|
+
var Deflate = /*#__PURE__*/function () {
|
|
66610
66702
|
function Deflate(opts, cb) {
|
|
66611
66703
|
if (!cb && typeof opts == 'function') cb = opts, opts = {};
|
|
66612
66704
|
this.ondata = cb;
|
|
@@ -66636,9 +66728,7 @@ function () {
|
|
|
66636
66728
|
* Asynchronous streaming DEFLATE compression
|
|
66637
66729
|
*/
|
|
66638
66730
|
|
|
66639
|
-
var AsyncDeflate =
|
|
66640
|
-
/*#__PURE__*/
|
|
66641
|
-
function () {
|
|
66731
|
+
var AsyncDeflate = /*#__PURE__*/function () {
|
|
66642
66732
|
function AsyncDeflate(opts, cb) {
|
|
66643
66733
|
astrmify([bDflt, function () {
|
|
66644
66734
|
return [astrm, Deflate];
|
|
@@ -66671,9 +66761,7 @@ function deflateSync(data, opts) {
|
|
|
66671
66761
|
* Streaming DEFLATE decompression
|
|
66672
66762
|
*/
|
|
66673
66763
|
|
|
66674
|
-
var Inflate =
|
|
66675
|
-
/*#__PURE__*/
|
|
66676
|
-
function () {
|
|
66764
|
+
var Inflate = /*#__PURE__*/function () {
|
|
66677
66765
|
/**
|
|
66678
66766
|
* Creates an inflation stream
|
|
66679
66767
|
* @param cb The callback to call whenever data is inflated
|
|
@@ -66717,9 +66805,7 @@ function () {
|
|
|
66717
66805
|
* Asynchronous streaming DEFLATE decompression
|
|
66718
66806
|
*/
|
|
66719
66807
|
|
|
66720
|
-
var AsyncInflate =
|
|
66721
|
-
/*#__PURE__*/
|
|
66722
|
-
function () {
|
|
66808
|
+
var AsyncInflate = /*#__PURE__*/function () {
|
|
66723
66809
|
/**
|
|
66724
66810
|
* Creates an asynchronous inflation stream
|
|
66725
66811
|
* @param cb The callback to call whenever data is deflated
|
|
@@ -66758,9 +66844,7 @@ function inflateSync(data, out) {
|
|
|
66758
66844
|
* Streaming GZIP compression
|
|
66759
66845
|
*/
|
|
66760
66846
|
|
|
66761
|
-
var Gzip =
|
|
66762
|
-
/*#__PURE__*/
|
|
66763
|
-
function () {
|
|
66847
|
+
var Gzip = /*#__PURE__*/function () {
|
|
66764
66848
|
function Gzip(opts, cb) {
|
|
66765
66849
|
this.c = crc();
|
|
66766
66850
|
this.l = 0;
|
|
@@ -66793,9 +66877,7 @@ function () {
|
|
|
66793
66877
|
* Asynchronous streaming GZIP compression
|
|
66794
66878
|
*/
|
|
66795
66879
|
|
|
66796
|
-
var AsyncGzip =
|
|
66797
|
-
/*#__PURE__*/
|
|
66798
|
-
function () {
|
|
66880
|
+
var AsyncGzip = /*#__PURE__*/function () {
|
|
66799
66881
|
function AsyncGzip(opts, cb) {
|
|
66800
66882
|
astrmify([bDflt, gze, function () {
|
|
66801
66883
|
return [astrm, Deflate, Gzip];
|
|
@@ -66836,9 +66918,7 @@ function gzipSync(data, opts) {
|
|
|
66836
66918
|
* Streaming GZIP decompression
|
|
66837
66919
|
*/
|
|
66838
66920
|
|
|
66839
|
-
var Gunzip =
|
|
66840
|
-
/*#__PURE__*/
|
|
66841
|
-
function () {
|
|
66921
|
+
var Gunzip = /*#__PURE__*/function () {
|
|
66842
66922
|
/**
|
|
66843
66923
|
* Creates a GUNZIP stream
|
|
66844
66924
|
* @param cb The callback to call whenever data is inflated
|
|
@@ -66879,9 +66959,7 @@ function () {
|
|
|
66879
66959
|
* Asynchronous streaming GZIP decompression
|
|
66880
66960
|
*/
|
|
66881
66961
|
|
|
66882
|
-
var AsyncGunzip =
|
|
66883
|
-
/*#__PURE__*/
|
|
66884
|
-
function () {
|
|
66962
|
+
var AsyncGunzip = /*#__PURE__*/function () {
|
|
66885
66963
|
/**
|
|
66886
66964
|
* Creates an asynchronous GUNZIP stream
|
|
66887
66965
|
* @param cb The callback to call whenever data is deflated
|
|
@@ -66921,9 +66999,7 @@ function gunzipSync(data, out) {
|
|
|
66921
66999
|
* Streaming Zlib compression
|
|
66922
67000
|
*/
|
|
66923
67001
|
|
|
66924
|
-
var Zlib =
|
|
66925
|
-
/*#__PURE__*/
|
|
66926
|
-
function () {
|
|
67002
|
+
var Zlib = /*#__PURE__*/function () {
|
|
66927
67003
|
function Zlib(opts, cb) {
|
|
66928
67004
|
this.c = adler();
|
|
66929
67005
|
this.v = 1;
|
|
@@ -66954,9 +67030,7 @@ function () {
|
|
|
66954
67030
|
* Asynchronous streaming Zlib compression
|
|
66955
67031
|
*/
|
|
66956
67032
|
|
|
66957
|
-
var AsyncZlib =
|
|
66958
|
-
/*#__PURE__*/
|
|
66959
|
-
function () {
|
|
67033
|
+
var AsyncZlib = /*#__PURE__*/function () {
|
|
66960
67034
|
function AsyncZlib(opts, cb) {
|
|
66961
67035
|
astrmify([bDflt, zle, function () {
|
|
66962
67036
|
return [astrm, Deflate, Zlib];
|
|
@@ -66995,9 +67069,7 @@ function zlibSync(data, opts) {
|
|
|
66995
67069
|
* Streaming Zlib decompression
|
|
66996
67070
|
*/
|
|
66997
67071
|
|
|
66998
|
-
var Unzlib =
|
|
66999
|
-
/*#__PURE__*/
|
|
67000
|
-
function () {
|
|
67072
|
+
var Unzlib = /*#__PURE__*/function () {
|
|
67001
67073
|
/**
|
|
67002
67074
|
* Creates a Zlib decompression stream
|
|
67003
67075
|
* @param cb The callback to call whenever data is inflated
|
|
@@ -67037,9 +67109,7 @@ function () {
|
|
|
67037
67109
|
* Asynchronous streaming Zlib decompression
|
|
67038
67110
|
*/
|
|
67039
67111
|
|
|
67040
|
-
var AsyncUnzlib =
|
|
67041
|
-
/*#__PURE__*/
|
|
67042
|
-
function () {
|
|
67112
|
+
var AsyncUnzlib = /*#__PURE__*/function () {
|
|
67043
67113
|
/**
|
|
67044
67114
|
* Creates an asynchronous Zlib decompression stream
|
|
67045
67115
|
* @param cb The callback to call whenever data is deflated
|
|
@@ -67079,9 +67149,7 @@ function unzlibSync(data, out) {
|
|
|
67079
67149
|
* Streaming GZIP, Zlib, or raw DEFLATE decompression
|
|
67080
67150
|
*/
|
|
67081
67151
|
|
|
67082
|
-
var Decompress =
|
|
67083
|
-
/*#__PURE__*/
|
|
67084
|
-
function () {
|
|
67152
|
+
var Decompress = /*#__PURE__*/function () {
|
|
67085
67153
|
/**
|
|
67086
67154
|
* Creates a decompression stream
|
|
67087
67155
|
* @param cb The callback to call whenever data is decompressed
|
|
@@ -67128,9 +67196,7 @@ function () {
|
|
|
67128
67196
|
* Asynchronous streaming GZIP, Zlib, or raw DEFLATE decompression
|
|
67129
67197
|
*/
|
|
67130
67198
|
|
|
67131
|
-
var AsyncDecompress =
|
|
67132
|
-
/*#__PURE__*/
|
|
67133
|
-
function () {
|
|
67199
|
+
var AsyncDecompress = /*#__PURE__*/function () {
|
|
67134
67200
|
/**
|
|
67135
67201
|
* Creates an asynchronous decompression stream
|
|
67136
67202
|
* @param cb The callback to call whenever data is decompressed
|
|
@@ -67179,13 +67245,9 @@ var fltn = function fltn(d, p, t, o) {
|
|
|
67179
67245
|
}; // text encoder
|
|
67180
67246
|
|
|
67181
67247
|
|
|
67182
|
-
var te = typeof TextEncoder != 'undefined' &&
|
|
67183
|
-
/*#__PURE__*/
|
|
67184
|
-
new TextEncoder(); // text decoder
|
|
67248
|
+
var te = typeof TextEncoder != 'undefined' && /*#__PURE__*/new TextEncoder(); // text decoder
|
|
67185
67249
|
|
|
67186
|
-
var td = typeof TextDecoder != 'undefined' &&
|
|
67187
|
-
/*#__PURE__*/
|
|
67188
|
-
new TextDecoder(); // text decoder stream
|
|
67250
|
+
var td = typeof TextDecoder != 'undefined' && /*#__PURE__*/new TextDecoder(); // text decoder stream
|
|
67189
67251
|
|
|
67190
67252
|
var tds = 0;
|
|
67191
67253
|
|
|
@@ -67212,9 +67274,7 @@ var dutf8 = function dutf8(d) {
|
|
|
67212
67274
|
*/
|
|
67213
67275
|
|
|
67214
67276
|
|
|
67215
|
-
var DecodeUTF8 =
|
|
67216
|
-
/*#__PURE__*/
|
|
67217
|
-
function () {
|
|
67277
|
+
var DecodeUTF8 = /*#__PURE__*/function () {
|
|
67218
67278
|
/**
|
|
67219
67279
|
* Creates a UTF-8 decoding stream
|
|
67220
67280
|
* @param cb The callback to call whenever data is decoded
|
|
@@ -67270,9 +67330,7 @@ function () {
|
|
|
67270
67330
|
* Streaming UTF-8 encoding
|
|
67271
67331
|
*/
|
|
67272
67332
|
|
|
67273
|
-
var EncodeUTF8 =
|
|
67274
|
-
/*#__PURE__*/
|
|
67275
|
-
function () {
|
|
67333
|
+
var EncodeUTF8 = /*#__PURE__*/function () {
|
|
67276
67334
|
/**
|
|
67277
67335
|
* Creates a UTF-8 decoding stream
|
|
67278
67336
|
* @param cb The callback to call whenever data is encoded
|
|
@@ -67473,9 +67531,7 @@ var wzf = function wzf(o, b, c, d, e) {
|
|
|
67473
67531
|
*/
|
|
67474
67532
|
|
|
67475
67533
|
|
|
67476
|
-
var ZipPassThrough =
|
|
67477
|
-
/*#__PURE__*/
|
|
67478
|
-
function () {
|
|
67534
|
+
var ZipPassThrough = /*#__PURE__*/function () {
|
|
67479
67535
|
/**
|
|
67480
67536
|
* Creates a pass-through stream that can be added to ZIP archives
|
|
67481
67537
|
* @param filename The filename to associate with this data stream
|
|
@@ -67524,9 +67580,7 @@ function () {
|
|
|
67524
67580
|
* for better performance
|
|
67525
67581
|
*/
|
|
67526
67582
|
|
|
67527
|
-
var ZipDeflate =
|
|
67528
|
-
/*#__PURE__*/
|
|
67529
|
-
function () {
|
|
67583
|
+
var ZipDeflate = /*#__PURE__*/function () {
|
|
67530
67584
|
/**
|
|
67531
67585
|
* Creates a DEFLATE stream that can be added to ZIP archives
|
|
67532
67586
|
* @param filename The filename to associate with this data stream
|
|
@@ -67568,9 +67622,7 @@ function () {
|
|
|
67568
67622
|
* Asynchronous streaming DEFLATE compression for ZIP archives
|
|
67569
67623
|
*/
|
|
67570
67624
|
|
|
67571
|
-
var AsyncZipDeflate =
|
|
67572
|
-
/*#__PURE__*/
|
|
67573
|
-
function () {
|
|
67625
|
+
var AsyncZipDeflate = /*#__PURE__*/function () {
|
|
67574
67626
|
/**
|
|
67575
67627
|
* Creates a DEFLATE stream that can be added to ZIP archives
|
|
67576
67628
|
* @param filename The filename to associate with this data stream
|
|
@@ -67610,9 +67662,7 @@ function () {
|
|
|
67610
67662
|
* A zippable archive to which files can incrementally be added
|
|
67611
67663
|
*/
|
|
67612
67664
|
|
|
67613
|
-
var Zip =
|
|
67614
|
-
/*#__PURE__*/
|
|
67615
|
-
function () {
|
|
67665
|
+
var Zip = /*#__PURE__*/function () {
|
|
67616
67666
|
/**
|
|
67617
67667
|
* Creates an empty ZIP archive to which files can be added
|
|
67618
67668
|
* @param cb The callback to call whenever data for the generated ZIP archive
|
|
@@ -67934,9 +67984,7 @@ function zipSync(data, opts) {
|
|
|
67934
67984
|
* Streaming pass-through decompression for ZIP archives
|
|
67935
67985
|
*/
|
|
67936
67986
|
|
|
67937
|
-
var UnzipPassThrough =
|
|
67938
|
-
/*#__PURE__*/
|
|
67939
|
-
function () {
|
|
67987
|
+
var UnzipPassThrough = /*#__PURE__*/function () {
|
|
67940
67988
|
function UnzipPassThrough() {}
|
|
67941
67989
|
|
|
67942
67990
|
UnzipPassThrough.prototype.push = function (data, final) {
|
|
@@ -67951,9 +67999,7 @@ function () {
|
|
|
67951
67999
|
* better performance.
|
|
67952
68000
|
*/
|
|
67953
68001
|
|
|
67954
|
-
var UnzipInflate =
|
|
67955
|
-
/*#__PURE__*/
|
|
67956
|
-
function () {
|
|
68002
|
+
var UnzipInflate = /*#__PURE__*/function () {
|
|
67957
68003
|
/**
|
|
67958
68004
|
* Creates a DEFLATE decompression that can be used in ZIP archives
|
|
67959
68005
|
*/
|
|
@@ -67980,9 +68026,7 @@ function () {
|
|
|
67980
68026
|
* Asynchronous streaming DEFLATE decompression for ZIP archives
|
|
67981
68027
|
*/
|
|
67982
68028
|
|
|
67983
|
-
var AsyncUnzipInflate =
|
|
67984
|
-
/*#__PURE__*/
|
|
67985
|
-
function () {
|
|
68029
|
+
var AsyncUnzipInflate = /*#__PURE__*/function () {
|
|
67986
68030
|
/**
|
|
67987
68031
|
* Creates a DEFLATE decompression that can be used in ZIP archives
|
|
67988
68032
|
*/
|
|
@@ -68013,9 +68057,7 @@ function () {
|
|
|
68013
68057
|
* A ZIP archive decompression stream that emits files as they are discovered
|
|
68014
68058
|
*/
|
|
68015
68059
|
|
|
68016
|
-
var Unzip =
|
|
68017
|
-
/*#__PURE__*/
|
|
68018
|
-
function () {
|
|
68060
|
+
var Unzip = /*#__PURE__*/function () {
|
|
68019
68061
|
/**
|
|
68020
68062
|
* Creates a ZIP decompression stream
|
|
68021
68063
|
* @param cb The callback to call whenever a file in the ZIP archive is found
|
|
@@ -68651,9 +68693,7 @@ function calcNURBSDerivatives(p, U, P, u, nd) {
|
|
|
68651
68693
|
*
|
|
68652
68694
|
**/
|
|
68653
68695
|
|
|
68654
|
-
var NURBSCurve =
|
|
68655
|
-
/*#__PURE__*/
|
|
68656
|
-
function (_Curve) {
|
|
68696
|
+
var NURBSCurve = /*#__PURE__*/function (_Curve) {
|
|
68657
68697
|
_inherits(NURBSCurve, _Curve);
|
|
68658
68698
|
|
|
68659
68699
|
var _super = _createSuper(NURBSCurve);
|
|
@@ -68738,9 +68778,7 @@ var fbxTree;
|
|
|
68738
68778
|
var connections;
|
|
68739
68779
|
var sceneGraph;
|
|
68740
68780
|
|
|
68741
|
-
var FBXLoader =
|
|
68742
|
-
/*#__PURE__*/
|
|
68743
|
-
function (_Loader) {
|
|
68781
|
+
var FBXLoader = /*#__PURE__*/function (_Loader) {
|
|
68744
68782
|
_inherits(FBXLoader, _Loader);
|
|
68745
68783
|
|
|
68746
68784
|
var _super = _createSuper(FBXLoader);
|
|
@@ -68804,9 +68842,7 @@ function (_Loader) {
|
|
|
68804
68842
|
}(Loader); // Parse the FBXTree object returned by the BinaryParser or TextParser and return a Group
|
|
68805
68843
|
|
|
68806
68844
|
|
|
68807
|
-
var FBXTreeParser =
|
|
68808
|
-
/*#__PURE__*/
|
|
68809
|
-
function () {
|
|
68845
|
+
var FBXTreeParser = /*#__PURE__*/function () {
|
|
68810
68846
|
function FBXTreeParser(textureLoader, manager) {
|
|
68811
68847
|
_classCallCheck(this, FBXTreeParser);
|
|
68812
68848
|
|
|
@@ -69804,9 +69840,7 @@ function () {
|
|
|
69804
69840
|
}(); // parse Geometry data from FBXTree and return map of BufferGeometries
|
|
69805
69841
|
|
|
69806
69842
|
|
|
69807
|
-
var GeometryParser =
|
|
69808
|
-
/*#__PURE__*/
|
|
69809
|
-
function () {
|
|
69843
|
+
var GeometryParser = /*#__PURE__*/function () {
|
|
69810
69844
|
function GeometryParser() {
|
|
69811
69845
|
_classCallCheck(this, GeometryParser);
|
|
69812
69846
|
}
|
|
@@ -70416,9 +70450,7 @@ function () {
|
|
|
70416
70450
|
}(); // parse animation data from FBXTree
|
|
70417
70451
|
|
|
70418
70452
|
|
|
70419
|
-
var AnimationParser =
|
|
70420
|
-
/*#__PURE__*/
|
|
70421
|
-
function () {
|
|
70453
|
+
var AnimationParser = /*#__PURE__*/function () {
|
|
70422
70454
|
function AnimationParser() {
|
|
70423
70455
|
_classCallCheck(this, AnimationParser);
|
|
70424
70456
|
}
|
|
@@ -70852,9 +70884,7 @@ function () {
|
|
|
70852
70884
|
}(); // parse an FBX file in ASCII format
|
|
70853
70885
|
|
|
70854
70886
|
|
|
70855
|
-
var TextParser =
|
|
70856
|
-
/*#__PURE__*/
|
|
70857
|
-
function () {
|
|
70887
|
+
var TextParser = /*#__PURE__*/function () {
|
|
70858
70888
|
function TextParser() {
|
|
70859
70889
|
_classCallCheck(this, TextParser);
|
|
70860
70890
|
}
|
|
@@ -71109,9 +71139,7 @@ function () {
|
|
|
71109
71139
|
}(); // Parse an FBX file in Binary format
|
|
71110
71140
|
|
|
71111
71141
|
|
|
71112
|
-
var BinaryParser =
|
|
71113
|
-
/*#__PURE__*/
|
|
71114
|
-
function () {
|
|
71142
|
+
var BinaryParser = /*#__PURE__*/function () {
|
|
71115
71143
|
function BinaryParser() {
|
|
71116
71144
|
_classCallCheck(this, BinaryParser);
|
|
71117
71145
|
}
|
|
@@ -71366,9 +71394,7 @@ function () {
|
|
|
71366
71394
|
return BinaryParser;
|
|
71367
71395
|
}();
|
|
71368
71396
|
|
|
71369
|
-
var BinaryReader =
|
|
71370
|
-
/*#__PURE__*/
|
|
71371
|
-
function () {
|
|
71397
|
+
var BinaryReader = /*#__PURE__*/function () {
|
|
71372
71398
|
function BinaryReader(buffer, littleEndian) {
|
|
71373
71399
|
_classCallCheck(this, BinaryReader);
|
|
71374
71400
|
|
|
@@ -71570,9 +71596,7 @@ function () {
|
|
|
71570
71596
|
// and BinaryParser( FBX Binary format)
|
|
71571
71597
|
|
|
71572
71598
|
|
|
71573
|
-
var FBXTree =
|
|
71574
|
-
/*#__PURE__*/
|
|
71575
|
-
function () {
|
|
71599
|
+
var FBXTree = /*#__PURE__*/function () {
|
|
71576
71600
|
function FBXTree() {
|
|
71577
71601
|
_classCallCheck(this, FBXTree);
|
|
71578
71602
|
}
|
|
@@ -72194,9 +72218,7 @@ function parallelTraverse(a, b, callback) {
|
|
|
72194
72218
|
* Loads a Wavefront .mtl file specifying materials
|
|
72195
72219
|
*/
|
|
72196
72220
|
|
|
72197
|
-
var MTLLoader =
|
|
72198
|
-
/*#__PURE__*/
|
|
72199
|
-
function (_Loader) {
|
|
72221
|
+
var MTLLoader = /*#__PURE__*/function (_Loader) {
|
|
72200
72222
|
_inherits(MTLLoader, _Loader);
|
|
72201
72223
|
|
|
72202
72224
|
var _super = _createSuper(MTLLoader);
|
|
@@ -72327,9 +72349,7 @@ function (_Loader) {
|
|
|
72327
72349
|
*/
|
|
72328
72350
|
|
|
72329
72351
|
|
|
72330
|
-
var MaterialCreator =
|
|
72331
|
-
/*#__PURE__*/
|
|
72332
|
-
function () {
|
|
72352
|
+
var MaterialCreator = /*#__PURE__*/function () {
|
|
72333
72353
|
function MaterialCreator() {
|
|
72334
72354
|
var baseUrl = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
72335
72355
|
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
@@ -72898,9 +72918,7 @@ function ParserState() {
|
|
|
72898
72918
|
} //
|
|
72899
72919
|
|
|
72900
72920
|
|
|
72901
|
-
var OBJLoader =
|
|
72902
|
-
/*#__PURE__*/
|
|
72903
|
-
function (_Loader) {
|
|
72921
|
+
var OBJLoader = /*#__PURE__*/function (_Loader) {
|
|
72904
72922
|
_inherits(OBJLoader, _Loader);
|
|
72905
72923
|
|
|
72906
72924
|
var _super = _createSuper(OBJLoader);
|
|
@@ -73239,9 +73257,7 @@ function (_Loader) {
|
|
|
73239
73257
|
MTL: '.mtl'
|
|
73240
73258
|
};
|
|
73241
73259
|
|
|
73242
|
-
var OBJMTLLoader =
|
|
73243
|
-
/*#__PURE__*/
|
|
73244
|
-
function () {
|
|
73260
|
+
var OBJMTLLoader = /*#__PURE__*/function () {
|
|
73245
73261
|
function OBJMTLLoader() {
|
|
73246
73262
|
_classCallCheck(this, OBJMTLLoader);
|
|
73247
73263
|
|
|
@@ -73476,9 +73492,7 @@ var DEFAULT_ASSETS = {
|
|
|
73476
73492
|
common: DEFAULT_COMMON_ASSETS,
|
|
73477
73493
|
levels: {}
|
|
73478
73494
|
};
|
|
73479
|
-
var Assets =
|
|
73480
|
-
/*#__PURE__*/
|
|
73481
|
-
function () {
|
|
73495
|
+
var Assets = /*#__PURE__*/function () {
|
|
73482
73496
|
function Assets() {
|
|
73483
73497
|
var _this = this;
|
|
73484
73498
|
|
|
@@ -73626,7 +73640,7 @@ function () {
|
|
|
73626
73640
|
group.common[lowerCaseType] = assets[assetType];
|
|
73627
73641
|
} else if (isLevelName(lowerCaseType)) {
|
|
73628
73642
|
var levelAssets = assets[assetType] || {};
|
|
73629
|
-
group.levels[lowerCaseType] = _objectSpread2({}, DEFAULT_COMMON_ASSETS,
|
|
73643
|
+
group.levels[lowerCaseType] = _objectSpread2(_objectSpread2({}, DEFAULT_COMMON_ASSETS), levelAssets);
|
|
73630
73644
|
}
|
|
73631
73645
|
|
|
73632
73646
|
return group;
|
|
@@ -74419,9 +74433,7 @@ var AnonymousSubject = /*@__PURE__*/ (function (_super) {
|
|
|
74419
74433
|
return AnonymousSubject;
|
|
74420
74434
|
}(Subject));var ONE_MB = 1048576;
|
|
74421
74435
|
|
|
74422
|
-
var Stats =
|
|
74423
|
-
/*#__PURE__*/
|
|
74424
|
-
function () {
|
|
74436
|
+
var Stats = /*#__PURE__*/function () {
|
|
74425
74437
|
function Stats() {
|
|
74426
74438
|
_classCallCheck(this, Stats);
|
|
74427
74439
|
|
|
@@ -74493,9 +74505,7 @@ function () {
|
|
|
74493
74505
|
return Stats;
|
|
74494
74506
|
}();
|
|
74495
74507
|
|
|
74496
|
-
var Stats$1 = new Stats();var Loader$1 =
|
|
74497
|
-
/*#__PURE__*/
|
|
74498
|
-
function () {
|
|
74508
|
+
var Stats$1 = new Stats();var Loader$1 = /*#__PURE__*/function () {
|
|
74499
74509
|
function Loader() {
|
|
74500
74510
|
_classCallCheck(this, Loader);
|
|
74501
74511
|
|
|
@@ -74508,9 +74518,8 @@ function () {
|
|
|
74508
74518
|
}]);
|
|
74509
74519
|
|
|
74510
74520
|
return Loader;
|
|
74511
|
-
}();var
|
|
74512
|
-
/*#__PURE__*/
|
|
74513
|
-
function (_Loader) {
|
|
74521
|
+
}();var _excluded$5 = ["mesh", "scripts", "texture"];
|
|
74522
|
+
var MeshLoader = /*#__PURE__*/function (_Loader) {
|
|
74514
74523
|
_inherits(MeshLoader, _Loader);
|
|
74515
74524
|
|
|
74516
74525
|
var _super = _createSuper(MeshLoader);
|
|
@@ -74535,7 +74544,7 @@ function (_Loader) {
|
|
|
74535
74544
|
var mesh = _ref.mesh,
|
|
74536
74545
|
scripts = _ref.scripts,
|
|
74537
74546
|
texture = _ref.texture,
|
|
74538
|
-
opts = _objectWithoutProperties(_ref,
|
|
74547
|
+
opts = _objectWithoutProperties(_ref, _excluded$5);
|
|
74539
74548
|
|
|
74540
74549
|
return _this.loadMesh(_this.parseMesh(mesh), scripts, texture, opts);
|
|
74541
74550
|
});
|
|
@@ -74571,9 +74580,7 @@ function (_Loader) {
|
|
|
74571
74580
|
}(Loader$1);
|
|
74572
74581
|
var MeshLoader$1 = new MeshLoader();var LAMP_COLOR = 0Xf1c40f;
|
|
74573
74582
|
|
|
74574
|
-
var Light$1 =
|
|
74575
|
-
/*#__PURE__*/
|
|
74576
|
-
function (_Entity) {
|
|
74583
|
+
var Light$1 = /*#__PURE__*/function (_Entity) {
|
|
74577
74584
|
_inherits(Light, _Entity);
|
|
74578
74585
|
|
|
74579
74586
|
var _super = _createSuper(Light);
|
|
@@ -74666,7 +74673,7 @@ function (_Entity) {
|
|
|
74666
74673
|
_ref2$updateHolder = _ref2.updateHolder,
|
|
74667
74674
|
updateHolder = _ref2$updateHolder === void 0 ? true : _ref2$updateHolder;
|
|
74668
74675
|
|
|
74669
|
-
var position = _objectSpread2({}, this.getPosition(),
|
|
74676
|
+
var position = _objectSpread2(_objectSpread2({}, this.getPosition()), where);
|
|
74670
74677
|
|
|
74671
74678
|
var x = position.x,
|
|
74672
74679
|
y = position.y,
|
|
@@ -74783,9 +74790,7 @@ var DEFAULT_MAP_SIZE = 512;
|
|
|
74783
74790
|
var DEFAULT_BIAS$1 = -0.0001;
|
|
74784
74791
|
var WHITE = 0xffffff;
|
|
74785
74792
|
|
|
74786
|
-
var SunLight =
|
|
74787
|
-
/*#__PURE__*/
|
|
74788
|
-
function (_Light) {
|
|
74793
|
+
var SunLight = /*#__PURE__*/function (_Light) {
|
|
74789
74794
|
_inherits(SunLight, _Light);
|
|
74790
74795
|
|
|
74791
74796
|
var _super = _createSuper(SunLight);
|
|
@@ -74827,9 +74832,9 @@ function (_Light) {
|
|
|
74827
74832
|
intensity = _ref$intensity === void 0 ? DEFAULT_INTENSITY$1 : _ref$intensity;
|
|
74828
74833
|
|
|
74829
74834
|
if (light) {
|
|
74830
|
-
this.
|
|
74835
|
+
this.setBody(light);
|
|
74831
74836
|
} else {
|
|
74832
|
-
this.
|
|
74837
|
+
this.setBody(new DirectionalLight(color, intensity));
|
|
74833
74838
|
}
|
|
74834
74839
|
|
|
74835
74840
|
if (this.hasBody()) {
|
|
@@ -74935,7 +74940,7 @@ function (_Light) {
|
|
|
74935
74940
|
}, {
|
|
74936
74941
|
key: "toJSON",
|
|
74937
74942
|
value: function toJSON() {
|
|
74938
|
-
return _objectSpread2({}, _get(_getPrototypeOf(SunLight.prototype), "toJSON", this).call(this), {
|
|
74943
|
+
return _objectSpread2(_objectSpread2({}, _get(_getPrototypeOf(SunLight.prototype), "toJSON", this).call(this)), {}, {
|
|
74939
74944
|
type: SUNLIGHT
|
|
74940
74945
|
});
|
|
74941
74946
|
}
|
|
@@ -74950,17 +74955,15 @@ function (_Light) {
|
|
|
74950
74955
|
var DEFAULT_INTENSITY$2 = 0.5;
|
|
74951
74956
|
var WHITE$1 = 0xffffff;
|
|
74952
74957
|
|
|
74953
|
-
var
|
|
74954
|
-
|
|
74955
|
-
function (_Light) {
|
|
74956
|
-
_inherits(LightAmbient, _Light);
|
|
74958
|
+
var AmbientLight$1 = /*#__PURE__*/function (_Light) {
|
|
74959
|
+
_inherits(AmbientLight$1, _Light);
|
|
74957
74960
|
|
|
74958
|
-
var _super = _createSuper(
|
|
74961
|
+
var _super = _createSuper(AmbientLight$1);
|
|
74959
74962
|
|
|
74960
|
-
function
|
|
74963
|
+
function AmbientLight$1(options) {
|
|
74961
74964
|
var _this;
|
|
74962
74965
|
|
|
74963
|
-
_classCallCheck(this,
|
|
74966
|
+
_classCallCheck(this, AmbientLight$1);
|
|
74964
74967
|
|
|
74965
74968
|
var _options$color = options.color,
|
|
74966
74969
|
color = _options$color === void 0 ? WHITE$1 : _options$color,
|
|
@@ -74982,7 +74985,7 @@ function (_Light) {
|
|
|
74982
74985
|
return _this;
|
|
74983
74986
|
}
|
|
74984
74987
|
|
|
74985
|
-
_createClass(
|
|
74988
|
+
_createClass(AmbientLight$1, [{
|
|
74986
74989
|
key: "setLight",
|
|
74987
74990
|
value: function setLight(_ref) {
|
|
74988
74991
|
var light = _ref.light,
|
|
@@ -74992,9 +74995,9 @@ function (_Light) {
|
|
|
74992
74995
|
intensity = _ref$intensity === void 0 ? DEFAULT_INTENSITY$2 : _ref$intensity;
|
|
74993
74996
|
|
|
74994
74997
|
if (light) {
|
|
74995
|
-
this.light
|
|
74998
|
+
this.setBody(light);
|
|
74996
74999
|
} else {
|
|
74997
|
-
this.
|
|
75000
|
+
this.setBody(new AmbientLight(color, intensity));
|
|
74998
75001
|
}
|
|
74999
75002
|
|
|
75000
75003
|
if (this.hasBody()) {
|
|
@@ -75007,6 +75010,7 @@ function (_Light) {
|
|
|
75007
75010
|
var _this$options$positio = this.options.position,
|
|
75008
75011
|
position = _this$options$positio === void 0 ? DEFAULT_POSITION$3 : _this$options$positio;
|
|
75009
75012
|
this.setPosition(position);
|
|
75013
|
+
console.log('about to add ambientlight to scene', this.body);
|
|
75010
75014
|
this.addToScene();
|
|
75011
75015
|
}
|
|
75012
75016
|
}, {
|
|
@@ -75018,7 +75022,7 @@ function (_Light) {
|
|
|
75018
75022
|
}, {
|
|
75019
75023
|
key: "update",
|
|
75020
75024
|
value: function update(dt) {
|
|
75021
|
-
_get(_getPrototypeOf(
|
|
75025
|
+
_get(_getPrototypeOf(AmbientLight$1.prototype), "update", this).call(this, dt);
|
|
75022
75026
|
|
|
75023
75027
|
if (this.hasHelper()) {
|
|
75024
75028
|
this.setPosition(this.holder.getPosition(), {
|
|
@@ -75029,13 +75033,13 @@ function (_Light) {
|
|
|
75029
75033
|
}, {
|
|
75030
75034
|
key: "toJSON",
|
|
75031
75035
|
value: function toJSON() {
|
|
75032
|
-
return _objectSpread2({}, _get(_getPrototypeOf(
|
|
75036
|
+
return _objectSpread2(_objectSpread2({}, _get(_getPrototypeOf(AmbientLight$1.prototype), "toJSON", this).call(this)), {}, {
|
|
75033
75037
|
type: AMBIENTLIGHT
|
|
75034
75038
|
});
|
|
75035
75039
|
}
|
|
75036
75040
|
}]);
|
|
75037
75041
|
|
|
75038
|
-
return
|
|
75042
|
+
return AmbientLight$1;
|
|
75039
75043
|
}(Light$1);var DEFAULT_NEAR$2 = 0.1;
|
|
75040
75044
|
var DEFAULT_FAR$2 = 100;
|
|
75041
75045
|
var DEFAULT_POSITION$4 = {
|
|
@@ -75044,16 +75048,14 @@ var DEFAULT_POSITION$4 = {
|
|
|
75044
75048
|
z: 0
|
|
75045
75049
|
};
|
|
75046
75050
|
var DEFAULT_INTENSITY$3 = 0.5;
|
|
75047
|
-
var DEFAULT_DISTANCE = 0;
|
|
75051
|
+
var DEFAULT_DISTANCE$1 = 0;
|
|
75048
75052
|
var DEFAULT_DECAY = 1;
|
|
75049
75053
|
var DEFAULT_MAP_SIZE$1 = 2048;
|
|
75050
75054
|
var DEFAULT_BIAS$2 = -0.0001;
|
|
75051
75055
|
var WHITE$2 = 0xffffff;
|
|
75052
75056
|
var GREEN = 0x2ecc71;
|
|
75053
75057
|
|
|
75054
|
-
var PointLight$1 =
|
|
75055
|
-
/*#__PURE__*/
|
|
75056
|
-
function (_Light) {
|
|
75058
|
+
var PointLight$1 = /*#__PURE__*/function (_Light) {
|
|
75057
75059
|
_inherits(PointLight$1, _Light);
|
|
75058
75060
|
|
|
75059
75061
|
var _super = _createSuper(PointLight$1);
|
|
@@ -75096,14 +75098,14 @@ function (_Light) {
|
|
|
75096
75098
|
_ref$intensity = _ref.intensity,
|
|
75097
75099
|
intensity = _ref$intensity === void 0 ? DEFAULT_INTENSITY$3 : _ref$intensity,
|
|
75098
75100
|
_ref$distance = _ref.distance,
|
|
75099
|
-
distance = _ref$distance === void 0 ? DEFAULT_DISTANCE : _ref$distance,
|
|
75101
|
+
distance = _ref$distance === void 0 ? DEFAULT_DISTANCE$1 : _ref$distance,
|
|
75100
75102
|
_ref$decay = _ref.decay,
|
|
75101
75103
|
decay = _ref$decay === void 0 ? DEFAULT_DECAY : _ref$decay;
|
|
75102
75104
|
|
|
75103
75105
|
if (light) {
|
|
75104
|
-
this.
|
|
75106
|
+
this.setBody(light);
|
|
75105
75107
|
} else {
|
|
75106
|
-
this.
|
|
75108
|
+
this.setBody(new PointLight(color, intensity, distance, decay));
|
|
75107
75109
|
}
|
|
75108
75110
|
|
|
75109
75111
|
if (this.hasBody()) {
|
|
@@ -75174,7 +75176,7 @@ function (_Light) {
|
|
|
75174
75176
|
}, {
|
|
75175
75177
|
key: "toJSON",
|
|
75176
75178
|
value: function toJSON() {
|
|
75177
|
-
return _objectSpread2({}, _get(_getPrototypeOf(PointLight$1.prototype), "toJSON", this).call(this), {
|
|
75179
|
+
return _objectSpread2(_objectSpread2({}, _get(_getPrototypeOf(PointLight$1.prototype), "toJSON", this).call(this)), {}, {
|
|
75178
75180
|
distance: this.distance,
|
|
75179
75181
|
type: POINTLIGHT
|
|
75180
75182
|
});
|
|
@@ -75182,9 +75184,7 @@ function (_Light) {
|
|
|
75182
75184
|
}]);
|
|
75183
75185
|
|
|
75184
75186
|
return PointLight$1;
|
|
75185
|
-
}(Light$1);var LightLoader =
|
|
75186
|
-
/*#__PURE__*/
|
|
75187
|
-
function (_Loader) {
|
|
75187
|
+
}(Light$1);var LightLoader = /*#__PURE__*/function (_Loader) {
|
|
75188
75188
|
_inherits(LightLoader, _Loader);
|
|
75189
75189
|
|
|
75190
75190
|
var _super = _createSuper(LightLoader);
|
|
@@ -75253,7 +75253,7 @@ function (_Loader) {
|
|
|
75253
75253
|
intensity = _ref3.intensity,
|
|
75254
75254
|
position = _ref3.position,
|
|
75255
75255
|
name = _ref3.name;
|
|
75256
|
-
return new
|
|
75256
|
+
return new AmbientLight$1({
|
|
75257
75257
|
color: color,
|
|
75258
75258
|
intensity: intensity,
|
|
75259
75259
|
position: position,
|
|
@@ -75280,9 +75280,7 @@ function (_Loader) {
|
|
|
75280
75280
|
|
|
75281
75281
|
return LightLoader;
|
|
75282
75282
|
}(Loader$1);
|
|
75283
|
-
var LightLoader$1 = new LightLoader();var Pass =
|
|
75284
|
-
/*#__PURE__*/
|
|
75285
|
-
function () {
|
|
75283
|
+
var LightLoader$1 = new LightLoader();var Pass = /*#__PURE__*/function () {
|
|
75286
75284
|
function Pass() {
|
|
75287
75285
|
_classCallCheck(this, Pass);
|
|
75288
75286
|
|
|
@@ -75335,9 +75333,7 @@ Pass.FullScreenQuad = function () {
|
|
|
75335
75333
|
}
|
|
75336
75334
|
});
|
|
75337
75335
|
return FullScreenQuad;
|
|
75338
|
-
}();var ShaderPass =
|
|
75339
|
-
/*#__PURE__*/
|
|
75340
|
-
function (_Pass) {
|
|
75336
|
+
}();var ShaderPass = /*#__PURE__*/function (_Pass) {
|
|
75341
75337
|
_inherits(ShaderPass, _Pass);
|
|
75342
75338
|
|
|
75343
75339
|
var _super = _createSuper(ShaderPass);
|
|
@@ -75405,9 +75401,7 @@ var CopyShader = {
|
|
|
75405
75401
|
},
|
|
75406
75402
|
vertexShader: ["varying vec2 vUv;", "void main() {", " vUv = uv;", " gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );", "}"].join("\n"),
|
|
75407
75403
|
fragmentShader: ["uniform float opacity;", "uniform sampler2D tDiffuse;", "varying vec2 vUv;", "void main() {", " vec4 texel = texture2D( tDiffuse, vUv );", " gl_FragColor = opacity * texel;", "}"].join("\n")
|
|
75408
|
-
};var MaskPass =
|
|
75409
|
-
/*#__PURE__*/
|
|
75410
|
-
function (_Pass) {
|
|
75404
|
+
};var MaskPass = /*#__PURE__*/function (_Pass) {
|
|
75411
75405
|
_inherits(MaskPass, _Pass);
|
|
75412
75406
|
|
|
75413
75407
|
var _super = _createSuper(MaskPass);
|
|
@@ -75473,9 +75467,7 @@ function (_Pass) {
|
|
|
75473
75467
|
}]);
|
|
75474
75468
|
|
|
75475
75469
|
return MaskPass;
|
|
75476
|
-
}(Pass);var ClearMaskPass =
|
|
75477
|
-
/*#__PURE__*/
|
|
75478
|
-
function (_Pass) {
|
|
75470
|
+
}(Pass);var ClearMaskPass = /*#__PURE__*/function (_Pass) {
|
|
75479
75471
|
_inherits(ClearMaskPass, _Pass);
|
|
75480
75472
|
|
|
75481
75473
|
var _super = _createSuper(ClearMaskPass);
|
|
@@ -75499,9 +75491,7 @@ function (_Pass) {
|
|
|
75499
75491
|
}]);
|
|
75500
75492
|
|
|
75501
75493
|
return ClearMaskPass;
|
|
75502
|
-
}(Pass);var EffectComposer =
|
|
75503
|
-
/*#__PURE__*/
|
|
75504
|
-
function () {
|
|
75494
|
+
}(Pass);var EffectComposer = /*#__PURE__*/function () {
|
|
75505
75495
|
function EffectComposer(renderer, renderTarget) {
|
|
75506
75496
|
var _this = this;
|
|
75507
75497
|
|
|
@@ -75679,9 +75669,7 @@ function () {
|
|
|
75679
75669
|
}]);
|
|
75680
75670
|
|
|
75681
75671
|
return EffectComposer;
|
|
75682
|
-
}();var RenderPass =
|
|
75683
|
-
/*#__PURE__*/
|
|
75684
|
-
function (_Pass) {
|
|
75672
|
+
}();var RenderPass = /*#__PURE__*/function (_Pass) {
|
|
75685
75673
|
_inherits(RenderPass, _Pass);
|
|
75686
75674
|
|
|
75687
75675
|
var _super = _createSuper(RenderPass);
|
|
@@ -75859,9 +75847,7 @@ var ConvolutionShader = {
|
|
|
75859
75847
|
};var BLUR_X = new Vector2(0.001953125, 0.0);
|
|
75860
75848
|
var BLUR_Y = new Vector2(0.0, 0.001953125);
|
|
75861
75849
|
|
|
75862
|
-
var BloomPass =
|
|
75863
|
-
/*#__PURE__*/
|
|
75864
|
-
function (_Pass) {
|
|
75850
|
+
var BloomPass = /*#__PURE__*/function (_Pass) {
|
|
75865
75851
|
_inherits(BloomPass, _Pass);
|
|
75866
75852
|
|
|
75867
75853
|
var _super = _createSuper(BloomPass);
|
|
@@ -75996,9 +75982,7 @@ var BokehShader = {
|
|
|
75996
75982
|
'uniform float aperture;', // aperture - bigger values for shallower depth of field
|
|
75997
75983
|
'uniform float nearClip;', 'uniform float farClip;', 'uniform float focus;', 'uniform float aspect;', '#include <packing>', 'float getDepth( const in vec2 screenPosition ) {', ' #if DEPTH_PACKING == 1', ' return unpackRGBAToDepth( texture2D( tDepth, screenPosition ) );', ' #else', ' return texture2D( tDepth, screenPosition ).x;', ' #endif', '}', 'float getViewZ( const in float depth ) {', ' #if PERSPECTIVE_CAMERA == 1', ' return perspectiveDepthToViewZ( depth, nearClip, farClip );', ' #else', ' return orthographicDepthToViewZ( depth, nearClip, farClip );', ' #endif', '}', 'void main() {', ' vec2 aspectcorrect = vec2( 1.0, aspect );', ' float viewZ = getViewZ( getDepth( vUv ) );', ' float factor = ( focus + viewZ );', // viewZ is <= 0, so this is a difference equation
|
|
75998
75984
|
' vec2 dofblur = vec2 ( clamp( factor * aperture, -maxblur, maxblur ) );', ' vec2 dofblur9 = dofblur * 0.9;', ' vec2 dofblur7 = dofblur * 0.7;', ' vec2 dofblur4 = dofblur * 0.4;', ' vec4 col = vec4( 0.0 );', ' col += texture2D( tColor, vUv.xy );', ' col += texture2D( tColor, vUv.xy + ( vec2( 0.0, 0.4 ) * aspectcorrect ) * dofblur );', ' col += texture2D( tColor, vUv.xy + ( vec2( 0.15, 0.37 ) * aspectcorrect ) * dofblur );', ' col += texture2D( tColor, vUv.xy + ( vec2( 0.29, 0.29 ) * aspectcorrect ) * dofblur );', ' col += texture2D( tColor, vUv.xy + ( vec2( -0.37, 0.15 ) * aspectcorrect ) * dofblur );', ' col += texture2D( tColor, vUv.xy + ( vec2( 0.40, 0.0 ) * aspectcorrect ) * dofblur );', ' col += texture2D( tColor, vUv.xy + ( vec2( 0.37, -0.15 ) * aspectcorrect ) * dofblur );', ' col += texture2D( tColor, vUv.xy + ( vec2( 0.29, -0.29 ) * aspectcorrect ) * dofblur );', ' col += texture2D( tColor, vUv.xy + ( vec2( -0.15, -0.37 ) * aspectcorrect ) * dofblur );', ' col += texture2D( tColor, vUv.xy + ( vec2( 0.0, -0.4 ) * aspectcorrect ) * dofblur );', ' col += texture2D( tColor, vUv.xy + ( vec2( -0.15, 0.37 ) * aspectcorrect ) * dofblur );', ' col += texture2D( tColor, vUv.xy + ( vec2( -0.29, 0.29 ) * aspectcorrect ) * dofblur );', ' col += texture2D( tColor, vUv.xy + ( vec2( 0.37, 0.15 ) * aspectcorrect ) * dofblur );', ' col += texture2D( tColor, vUv.xy + ( vec2( -0.4, 0.0 ) * aspectcorrect ) * dofblur );', ' col += texture2D( tColor, vUv.xy + ( vec2( -0.37, -0.15 ) * aspectcorrect ) * dofblur );', ' col += texture2D( tColor, vUv.xy + ( vec2( -0.29, -0.29 ) * aspectcorrect ) * dofblur );', ' col += texture2D( tColor, vUv.xy + ( vec2( 0.15, -0.37 ) * aspectcorrect ) * dofblur );', ' col += texture2D( tColor, vUv.xy + ( vec2( 0.15, 0.37 ) * aspectcorrect ) * dofblur9 );', ' col += texture2D( tColor, vUv.xy + ( vec2( -0.37, 0.15 ) * aspectcorrect ) * dofblur9 );', ' col += texture2D( tColor, vUv.xy + ( vec2( 0.37, -0.15 ) * aspectcorrect ) * dofblur9 );', ' col += texture2D( tColor, vUv.xy + ( vec2( -0.15, -0.37 ) * aspectcorrect ) * dofblur9 );', ' col += texture2D( tColor, vUv.xy + ( vec2( -0.15, 0.37 ) * aspectcorrect ) * dofblur9 );', ' col += texture2D( tColor, vUv.xy + ( vec2( 0.37, 0.15 ) * aspectcorrect ) * dofblur9 );', ' col += texture2D( tColor, vUv.xy + ( vec2( -0.37, -0.15 ) * aspectcorrect ) * dofblur9 );', ' col += texture2D( tColor, vUv.xy + ( vec2( 0.15, -0.37 ) * aspectcorrect ) * dofblur9 );', ' col += texture2D( tColor, vUv.xy + ( vec2( 0.29, 0.29 ) * aspectcorrect ) * dofblur7 );', ' col += texture2D( tColor, vUv.xy + ( vec2( 0.40, 0.0 ) * aspectcorrect ) * dofblur7 );', ' col += texture2D( tColor, vUv.xy + ( vec2( 0.29, -0.29 ) * aspectcorrect ) * dofblur7 );', ' col += texture2D( tColor, vUv.xy + ( vec2( 0.0, -0.4 ) * aspectcorrect ) * dofblur7 );', ' col += texture2D( tColor, vUv.xy + ( vec2( -0.29, 0.29 ) * aspectcorrect ) * dofblur7 );', ' col += texture2D( tColor, vUv.xy + ( vec2( -0.4, 0.0 ) * aspectcorrect ) * dofblur7 );', ' col += texture2D( tColor, vUv.xy + ( vec2( -0.29, -0.29 ) * aspectcorrect ) * dofblur7 );', ' col += texture2D( tColor, vUv.xy + ( vec2( 0.0, 0.4 ) * aspectcorrect ) * dofblur7 );', ' col += texture2D( tColor, vUv.xy + ( vec2( 0.29, 0.29 ) * aspectcorrect ) * dofblur4 );', ' col += texture2D( tColor, vUv.xy + ( vec2( 0.4, 0.0 ) * aspectcorrect ) * dofblur4 );', ' col += texture2D( tColor, vUv.xy + ( vec2( 0.29, -0.29 ) * aspectcorrect ) * dofblur4 );', ' col += texture2D( tColor, vUv.xy + ( vec2( 0.0, -0.4 ) * aspectcorrect ) * dofblur4 );', ' col += texture2D( tColor, vUv.xy + ( vec2( -0.29, 0.29 ) * aspectcorrect ) * dofblur4 );', ' col += texture2D( tColor, vUv.xy + ( vec2( -0.4, 0.0 ) * aspectcorrect ) * dofblur4 );', ' col += texture2D( tColor, vUv.xy + ( vec2( -0.29, -0.29 ) * aspectcorrect ) * dofblur4 );', ' col += texture2D( tColor, vUv.xy + ( vec2( 0.0, 0.4 ) * aspectcorrect ) * dofblur4 );', ' gl_FragColor = col / 41.0;', ' gl_FragColor.a = 1.0;', '}'].join('\n')
|
|
75999
|
-
};var BokehPass =
|
|
76000
|
-
/*#__PURE__*/
|
|
76001
|
-
function (_Pass) {
|
|
75985
|
+
};var BokehPass = /*#__PURE__*/function (_Pass) {
|
|
76002
75986
|
_inherits(BokehPass, _Pass);
|
|
76003
75987
|
|
|
76004
75988
|
var _super = _createSuper(BokehPass);
|
|
@@ -76109,9 +76093,7 @@ function (_Pass) {
|
|
|
76109
76093
|
}]);
|
|
76110
76094
|
|
|
76111
76095
|
return BokehPass;
|
|
76112
|
-
}(Pass);var DepthOfField =
|
|
76113
|
-
/*#__PURE__*/
|
|
76114
|
-
function (_BokehPass) {
|
|
76096
|
+
}(Pass);var DepthOfField = /*#__PURE__*/function (_BokehPass) {
|
|
76115
76097
|
_inherits(DepthOfField, _BokehPass);
|
|
76116
76098
|
|
|
76117
76099
|
var _super = _createSuper(DepthOfField);
|
|
@@ -76124,7 +76106,7 @@ function (_BokehPass) {
|
|
|
76124
76106
|
height = _config$screen.h,
|
|
76125
76107
|
aspect = _config$screen.ratio;
|
|
76126
76108
|
|
|
76127
|
-
return _super.call(this, Scene$2.scene, Scene$2.getCameraBody(), _objectSpread2({}, params, {
|
|
76109
|
+
return _super.call(this, Scene$2.scene, Scene$2.getCameraBody(), _objectSpread2(_objectSpread2({}, params), {}, {
|
|
76128
76110
|
width: width,
|
|
76129
76111
|
height: height,
|
|
76130
76112
|
aspect: aspect
|
|
@@ -76188,9 +76170,7 @@ var DigitalGlitch = {
|
|
|
76188
76170
|
" vec4 normal = texture2D (tDisp, p*seed*seed);", " if(p.y<distortion_x+col_s && p.y>distortion_x-col_s*seed) {", " if(seed_x>0.){", " p.y = 1. - (p.y + distortion_y);", " }", " else {", " p.y = distortion_y;", " }", " }", " if(p.x<distortion_y+col_s && p.x>distortion_y-col_s*seed) {", " if(seed_y>0.){", " p.x=distortion_x;", " }", " else {", " p.x = 1. - (p.x + distortion_x);", " }", " }", " p.x+=normal.x*seed_x*(seed/5.);", " p.y+=normal.y*seed_y*(seed/5.);", //base from RGB shift shader
|
|
76189
76171
|
" vec2 offset = amount * vec2( cos(angle), sin(angle));", " vec4 cr = texture2D(tDiffuse, p + offset);", " vec4 cga = texture2D(tDiffuse, p);", " vec4 cb = texture2D(tDiffuse, p - offset);", " gl_FragColor = vec4(cr.r, cga.g, cb.b, cga.a);", //add noise
|
|
76190
76172
|
" vec4 snow = 200.*amount*vec4(rand(vec2(xs * seed,ys * seed*50.))*0.2);", " gl_FragColor = gl_FragColor+ snow;", " }", " else {", " gl_FragColor=texture2D (tDiffuse, vUv);", " }", "}"].join("\n")
|
|
76191
|
-
};var GlitchEffect =
|
|
76192
|
-
/*#__PURE__*/
|
|
76193
|
-
function (_Pass) {
|
|
76173
|
+
};var GlitchEffect = /*#__PURE__*/function (_Pass) {
|
|
76194
76174
|
_inherits(GlitchEffect, _Pass);
|
|
76195
76175
|
|
|
76196
76176
|
var _super = _createSuper(GlitchEffect);
|
|
@@ -76303,9 +76283,7 @@ function (_Pass) {
|
|
|
76303
76283
|
fragmentShader: ["uniform sampler2D tDiffuse;", "uniform float pixelSize;", "uniform vec2 resolution;", "varying highp vec2 vUv;", "void main(){", "vec2 dxy = pixelSize / resolution;", "vec2 coord = dxy * floor( vUv / dxy );", "gl_FragColor = texture2D(tDiffuse, coord);", "}"].join("\n")
|
|
76304
76284
|
};
|
|
76305
76285
|
|
|
76306
|
-
var PixelEffect =
|
|
76307
|
-
/*#__PURE__*/
|
|
76308
|
-
function (_ShaderPass) {
|
|
76286
|
+
var PixelEffect = /*#__PURE__*/function (_ShaderPass) {
|
|
76309
76287
|
_inherits(PixelEffect, _ShaderPass);
|
|
76310
76288
|
|
|
76311
76289
|
var _super = _createSuper(PixelEffect);
|
|
@@ -76415,9 +76393,7 @@ var DEFAULT_COLOR = 0x000000;
|
|
|
76415
76393
|
var DEFAULT_ALPHA = 1.0;
|
|
76416
76394
|
var DEFAULT_KEEPALIVE = false;
|
|
76417
76395
|
|
|
76418
|
-
var OutlineEffect =
|
|
76419
|
-
/*#__PURE__*/
|
|
76420
|
-
function () {
|
|
76396
|
+
var OutlineEffect = /*#__PURE__*/function () {
|
|
76421
76397
|
function OutlineEffect(_ref) {
|
|
76422
76398
|
var _this = this;
|
|
76423
76399
|
|
|
@@ -76762,9 +76738,7 @@ function () {
|
|
|
76762
76738
|
}]);
|
|
76763
76739
|
|
|
76764
76740
|
return OutlineEffect;
|
|
76765
|
-
}();var PostProcessing =
|
|
76766
|
-
/*#__PURE__*/
|
|
76767
|
-
function () {
|
|
76741
|
+
}();var PostProcessing = /*#__PURE__*/function () {
|
|
76768
76742
|
function PostProcessing() {
|
|
76769
76743
|
var _this = this,
|
|
76770
76744
|
_this$map;
|
|
@@ -76900,9 +76874,7 @@ function () {
|
|
|
76900
76874
|
|
|
76901
76875
|
return PostProcessing;
|
|
76902
76876
|
}();
|
|
76903
|
-
var PostProcessing$1 = new PostProcessing();var Orbit =
|
|
76904
|
-
/*#__PURE__*/
|
|
76905
|
-
function (_EventDispatcher) {
|
|
76877
|
+
var PostProcessing$1 = new PostProcessing();var Orbit = /*#__PURE__*/function (_EventDispatcher) {
|
|
76906
76878
|
_inherits(Orbit, _EventDispatcher);
|
|
76907
76879
|
|
|
76908
76880
|
var _super = _createSuper(Orbit);
|
|
@@ -77650,9 +77622,7 @@ function (_EventDispatcher) {
|
|
|
77650
77622
|
}]);
|
|
77651
77623
|
|
|
77652
77624
|
return Orbit;
|
|
77653
|
-
}(EventDispatcher);var Gizmo =
|
|
77654
|
-
/*#__PURE__*/
|
|
77655
|
-
function (_Object3D) {
|
|
77625
|
+
}(EventDispatcher);var Gizmo = /*#__PURE__*/function (_Object3D) {
|
|
77656
77626
|
_inherits(Gizmo, _Object3D);
|
|
77657
77627
|
|
|
77658
77628
|
var _super = _createSuper(Gizmo);
|
|
@@ -78229,9 +78199,7 @@ function (_Object3D) {
|
|
|
78229
78199
|
}]);
|
|
78230
78200
|
|
|
78231
78201
|
return Gizmo;
|
|
78232
|
-
}(Object3D);var TransformControlsPlane =
|
|
78233
|
-
/*#__PURE__*/
|
|
78234
|
-
function (_Mesh) {
|
|
78202
|
+
}(Object3D);var TransformControlsPlane = /*#__PURE__*/function (_Mesh) {
|
|
78235
78203
|
_inherits(TransformControlsPlane, _Mesh);
|
|
78236
78204
|
|
|
78237
78205
|
var _super = _createSuper(TransformControlsPlane);
|
|
@@ -78333,9 +78301,7 @@ function (_Mesh) {
|
|
|
78333
78301
|
}]);
|
|
78334
78302
|
|
|
78335
78303
|
return TransformControlsPlane;
|
|
78336
|
-
}(Mesh);var TransformControls =
|
|
78337
|
-
/*#__PURE__*/
|
|
78338
|
-
function (_Object3D) {
|
|
78304
|
+
}(Mesh);var TransformControls = /*#__PURE__*/function (_Object3D) {
|
|
78339
78305
|
_inherits(TransformControls, _Object3D);
|
|
78340
78306
|
|
|
78341
78307
|
var _super = _createSuper(TransformControls);
|
|
@@ -79282,9 +79248,7 @@ var UNLOCK_EVENT = {
|
|
|
79282
79248
|
};
|
|
79283
79249
|
var PI_2$1 = Math.PI / 2;
|
|
79284
79250
|
|
|
79285
|
-
var FirstPersonControl =
|
|
79286
|
-
/*#__PURE__*/
|
|
79287
|
-
function (_EventDispatcher) {
|
|
79251
|
+
var FirstPersonControl = /*#__PURE__*/function (_EventDispatcher) {
|
|
79288
79252
|
_inherits(FirstPersonControl, _EventDispatcher);
|
|
79289
79253
|
|
|
79290
79254
|
var _super = _createSuper(FirstPersonControl);
|
|
@@ -79650,9 +79614,7 @@ function (_EventDispatcher) {
|
|
|
79650
79614
|
}]);
|
|
79651
79615
|
|
|
79652
79616
|
return FirstPersonControl;
|
|
79653
|
-
}(EventDispatcher);var FlyControl =
|
|
79654
|
-
/*#__PURE__*/
|
|
79655
|
-
function (_EventDispatcher) {
|
|
79617
|
+
}(EventDispatcher);var FlyControl = /*#__PURE__*/function (_EventDispatcher) {
|
|
79656
79618
|
_inherits(FlyControl, _EventDispatcher);
|
|
79657
79619
|
|
|
79658
79620
|
var _super = _createSuper(FlyControl);
|
|
@@ -80007,9 +79969,7 @@ var EVENTS = {
|
|
|
80007
79969
|
CHANGE: 'change',
|
|
80008
79970
|
DRAGGING_CHANGE: 'dragging-changed'
|
|
80009
79971
|
};
|
|
80010
|
-
var Controls =
|
|
80011
|
-
/*#__PURE__*/
|
|
80012
|
-
function () {
|
|
79972
|
+
var Controls = /*#__PURE__*/function () {
|
|
80013
79973
|
function Controls() {
|
|
80014
79974
|
var _this = this,
|
|
80015
79975
|
_this$controls;
|
|
@@ -80115,9 +80075,7 @@ var Controls$1 = new Controls();var author$1 = {
|
|
|
80115
80075
|
email: 'mrc.stagni@gmail.com',
|
|
80116
80076
|
website: 'http://mage.studio'
|
|
80117
80077
|
};
|
|
80118
|
-
var Level =
|
|
80119
|
-
/*#__PURE__*/
|
|
80120
|
-
function (_EventDispatcher) {
|
|
80078
|
+
var Level = /*#__PURE__*/function (_EventDispatcher) {
|
|
80121
80079
|
_inherits(Level, _EventDispatcher);
|
|
80122
80080
|
|
|
80123
80081
|
var _super = _createSuper(Level);
|
|
@@ -80312,14 +80270,12 @@ function (_EventDispatcher) {
|
|
|
80312
80270
|
}, {
|
|
80313
80271
|
key: "toJSON",
|
|
80314
80272
|
value: function toJSON() {
|
|
80315
|
-
return _objectSpread2({}, Lights$1.toJSON(),
|
|
80273
|
+
return _objectSpread2(_objectSpread2({}, Lights$1.toJSON()), Universe$1.toJSON());
|
|
80316
80274
|
}
|
|
80317
80275
|
}]);
|
|
80318
80276
|
|
|
80319
80277
|
return Level;
|
|
80320
|
-
}(EventDispatcher);var Color$1 =
|
|
80321
|
-
/*#__PURE__*/
|
|
80322
|
-
function () {
|
|
80278
|
+
}(EventDispatcher);var Color$1 = /*#__PURE__*/function () {
|
|
80323
80279
|
_createClass(Color$1, null, [{
|
|
80324
80280
|
key: "randomColor",
|
|
80325
80281
|
value: function randomColor() {
|
|
@@ -80406,9 +80362,7 @@ var STATE_SNAPSHOT = 'STATE_SNAPSHOT';
|
|
|
80406
80362
|
var TIMESTAMP = 'TIMESTAMP';
|
|
80407
80363
|
var CURRENT_SCENE_JSON = 'CURRENT_SCENE_JSON';
|
|
80408
80364
|
var CURRENT_PATH = 'CURRENT_PATH';
|
|
80409
|
-
var Storage =
|
|
80410
|
-
/*#__PURE__*/
|
|
80411
|
-
function () {
|
|
80365
|
+
var Storage = /*#__PURE__*/function () {
|
|
80412
80366
|
function Storage() {
|
|
80413
80367
|
_classCallCheck(this, Storage);
|
|
80414
80368
|
}
|
|
@@ -80489,9 +80443,7 @@ function () {
|
|
|
80489
80443
|
|
|
80490
80444
|
return Storage;
|
|
80491
80445
|
}();
|
|
80492
|
-
var storage$1 = new Storage();var GameRunner =
|
|
80493
|
-
/*#__PURE__*/
|
|
80494
|
-
function () {
|
|
80446
|
+
var storage$1 = new Storage();var GameRunner = /*#__PURE__*/function () {
|
|
80495
80447
|
function GameRunner() {
|
|
80496
80448
|
var _this = this;
|
|
80497
80449
|
|
|
@@ -80500,7 +80452,7 @@ function () {
|
|
|
80500
80452
|
_defineProperty(this, "createNewScene", function (path, options) {
|
|
80501
80453
|
var classname = _this.get(path);
|
|
80502
80454
|
|
|
80503
|
-
var scene = new classname(_objectSpread2({}, options, {
|
|
80455
|
+
var scene = new classname(_objectSpread2(_objectSpread2({}, options), {}, {
|
|
80504
80456
|
path: path
|
|
80505
80457
|
}));
|
|
80506
80458
|
subscribe(scene);
|
|
@@ -80655,7 +80607,7 @@ var parseQuery = function parseQuery(queryString) {
|
|
|
80655
80607
|
var split = couple.split(EQUALS);
|
|
80656
80608
|
return _defineProperty({}, split[0], split[1]);
|
|
80657
80609
|
}).reduce(function (acc, param) {
|
|
80658
|
-
return _objectSpread2({}, acc,
|
|
80610
|
+
return _objectSpread2(_objectSpread2({}, acc), param);
|
|
80659
80611
|
}, {}) : EMPTY_QUERY;
|
|
80660
80612
|
};var isArray$2 = Array.isArray;
|
|
80661
80613
|
function isStringOrNumber(o) {
|
|
@@ -85926,9 +85878,7 @@ var setLocationHash = function setLocationHash(hash) {
|
|
|
85926
85878
|
if (hasLocation()) {
|
|
85927
85879
|
location.hash = hash;
|
|
85928
85880
|
}
|
|
85929
|
-
};var Router =
|
|
85930
|
-
/*#__PURE__*/
|
|
85931
|
-
function () {
|
|
85881
|
+
};var Router = /*#__PURE__*/function () {
|
|
85932
85882
|
function Router() {
|
|
85933
85883
|
var _this = this;
|
|
85934
85884
|
|
|
@@ -86100,9 +86050,7 @@ var DEFAULT_BIAS$3 = -0.0001;
|
|
|
86100
86050
|
var WHITE$3 = 0xffffff;
|
|
86101
86051
|
var GREEN$1 = 0x2ecc71;
|
|
86102
86052
|
|
|
86103
|
-
var SpotLight$1 =
|
|
86104
|
-
/*#__PURE__*/
|
|
86105
|
-
function (_Light) {
|
|
86053
|
+
var SpotLight$1 = /*#__PURE__*/function (_Light) {
|
|
86106
86054
|
_inherits(SpotLight$1, _Light);
|
|
86107
86055
|
|
|
86108
86056
|
var _super = _createSuper(SpotLight$1);
|
|
@@ -86154,9 +86102,9 @@ function (_Light) {
|
|
|
86154
86102
|
intensity = _ref$intensity === void 0 ? DEFAULT_INTENSITY$4 : _ref$intensity;
|
|
86155
86103
|
|
|
86156
86104
|
if (light) {
|
|
86157
|
-
this.
|
|
86105
|
+
this.setBody(light);
|
|
86158
86106
|
} else {
|
|
86159
|
-
this.
|
|
86107
|
+
this.setBody(new SpotLight(color, intensity));
|
|
86160
86108
|
}
|
|
86161
86109
|
|
|
86162
86110
|
if (this.hasBody()) {
|
|
@@ -86207,7 +86155,7 @@ function (_Light) {
|
|
|
86207
86155
|
key: "setTargetPosition",
|
|
86208
86156
|
value: function setTargetPosition() {
|
|
86209
86157
|
var position = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
86210
|
-
this.target = _objectSpread2({}, this.target,
|
|
86158
|
+
this.target = _objectSpread2(_objectSpread2({}, this.target), position);
|
|
86211
86159
|
var _this$target = this.target,
|
|
86212
86160
|
_this$target$x = _this$target.x,
|
|
86213
86161
|
x = _this$target$x === void 0 ? 0 : _this$target$x,
|
|
@@ -86255,7 +86203,7 @@ function (_Light) {
|
|
|
86255
86203
|
}, {
|
|
86256
86204
|
key: "toJSON",
|
|
86257
86205
|
value: function toJSON() {
|
|
86258
|
-
return _objectSpread2({}, _get(_getPrototypeOf(SpotLight$1.prototype), "toJSON", this).call(this), {
|
|
86206
|
+
return _objectSpread2(_objectSpread2({}, _get(_getPrototypeOf(SpotLight$1.prototype), "toJSON", this).call(this)), {}, {
|
|
86259
86207
|
type: SPOTLIGHT
|
|
86260
86208
|
});
|
|
86261
86209
|
}
|
|
@@ -86267,9 +86215,7 @@ var DEFAULT_SKY_COLOR = 0xffffff;
|
|
|
86267
86215
|
var DEFAULT_GROUND_COLOR = 0x555555;
|
|
86268
86216
|
var GREEN$2 = 0x2ecc71;
|
|
86269
86217
|
|
|
86270
|
-
var HemisphereLight$1 =
|
|
86271
|
-
/*#__PURE__*/
|
|
86272
|
-
function (_Light) {
|
|
86218
|
+
var HemisphereLight$1 = /*#__PURE__*/function (_Light) {
|
|
86273
86219
|
_inherits(HemisphereLight$1, _Light);
|
|
86274
86220
|
|
|
86275
86221
|
var _super = _createSuper(HemisphereLight$1);
|
|
@@ -86315,13 +86261,13 @@ function (_Light) {
|
|
|
86315
86261
|
intensity = _ref$intensity === void 0 ? DEFAULT_INTENSITY$5 : _ref$intensity;
|
|
86316
86262
|
|
|
86317
86263
|
if (light) {
|
|
86318
|
-
this.
|
|
86264
|
+
this.setBody(light);
|
|
86319
86265
|
} else {
|
|
86320
86266
|
var _color$sky = color.sky,
|
|
86321
86267
|
sky = _color$sky === void 0 ? DEFAULT_SKY_COLOR : _color$sky,
|
|
86322
86268
|
_color$ground = color.ground,
|
|
86323
86269
|
ground = _color$ground === void 0 ? DEFAULT_GROUND_COLOR : _color$ground;
|
|
86324
|
-
this.
|
|
86270
|
+
this.setBody(new HemisphereLight(sky, ground, intensity));
|
|
86325
86271
|
}
|
|
86326
86272
|
|
|
86327
86273
|
if (this.hasBody()) {
|
|
@@ -86337,16 +86283,14 @@ function (_Light) {
|
|
|
86337
86283
|
}, {
|
|
86338
86284
|
key: "toJSON",
|
|
86339
86285
|
value: function toJSON() {
|
|
86340
|
-
return _objectSpread2({}, _get(_getPrototypeOf(HemisphereLight$1.prototype), "toJSON", this).call(this), {
|
|
86286
|
+
return _objectSpread2(_objectSpread2({}, _get(_getPrototypeOf(HemisphereLight$1.prototype), "toJSON", this).call(this)), {}, {
|
|
86341
86287
|
type: HEMISPHERELIGHT
|
|
86342
86288
|
});
|
|
86343
86289
|
}
|
|
86344
86290
|
}]);
|
|
86345
86291
|
|
|
86346
86292
|
return HemisphereLight$1;
|
|
86347
|
-
}(Light$1);var Atmosphere =
|
|
86348
|
-
/*#__PURE__*/
|
|
86349
|
-
function () {
|
|
86293
|
+
}(Light$1);var Atmosphere = /*#__PURE__*/function () {
|
|
86350
86294
|
function Atmosphere() {
|
|
86351
86295
|
_classCallCheck(this, Atmosphere);
|
|
86352
86296
|
|
|
@@ -86390,9 +86334,7 @@ function () {
|
|
|
86390
86334
|
}]);
|
|
86391
86335
|
|
|
86392
86336
|
return Atmosphere;
|
|
86393
|
-
}();var Mirror =
|
|
86394
|
-
/*#__PURE__*/
|
|
86395
|
-
function (_Object3D) {
|
|
86337
|
+
}();var Mirror = /*#__PURE__*/function (_Object3D) {
|
|
86396
86338
|
_inherits(Mirror, _Object3D);
|
|
86397
86339
|
|
|
86398
86340
|
var _super = _createSuper(Mirror);
|
|
@@ -86621,9 +86563,7 @@ function (_Object3D) {
|
|
|
86621
86563
|
}]);
|
|
86622
86564
|
|
|
86623
86565
|
return Mirror;
|
|
86624
|
-
}(Object3D);var OceanMain =
|
|
86625
|
-
/*#__PURE__*/
|
|
86626
|
-
function () {
|
|
86566
|
+
}(Object3D);var OceanMain = /*#__PURE__*/function () {
|
|
86627
86567
|
function OceanMain() {
|
|
86628
86568
|
_classCallCheck(this, OceanMain);
|
|
86629
86569
|
}
|
|
@@ -86704,9 +86644,7 @@ function () {
|
|
|
86704
86644
|
|
|
86705
86645
|
return OceanMain;
|
|
86706
86646
|
}();
|
|
86707
|
-
var OceanNormals =
|
|
86708
|
-
/*#__PURE__*/
|
|
86709
|
-
function () {
|
|
86647
|
+
var OceanNormals = /*#__PURE__*/function () {
|
|
86710
86648
|
function OceanNormals() {
|
|
86711
86649
|
_classCallCheck(this, OceanNormals);
|
|
86712
86650
|
}
|
|
@@ -86747,9 +86685,7 @@ function () {
|
|
|
86747
86685
|
|
|
86748
86686
|
return OceanNormals;
|
|
86749
86687
|
}();
|
|
86750
|
-
var OceanSpectrum =
|
|
86751
|
-
/*#__PURE__*/
|
|
86752
|
-
function () {
|
|
86688
|
+
var OceanSpectrum = /*#__PURE__*/function () {
|
|
86753
86689
|
function OceanSpectrum() {
|
|
86754
86690
|
_classCallCheck(this, OceanSpectrum);
|
|
86755
86691
|
}
|
|
@@ -86799,9 +86735,7 @@ function () {
|
|
|
86799
86735
|
|
|
86800
86736
|
return OceanSpectrum;
|
|
86801
86737
|
}();
|
|
86802
|
-
var OceanPhase =
|
|
86803
|
-
/*#__PURE__*/
|
|
86804
|
-
function () {
|
|
86738
|
+
var OceanPhase = /*#__PURE__*/function () {
|
|
86805
86739
|
function OceanPhase() {
|
|
86806
86740
|
_classCallCheck(this, OceanPhase);
|
|
86807
86741
|
}
|
|
@@ -86846,9 +86780,7 @@ function () {
|
|
|
86846
86780
|
|
|
86847
86781
|
return OceanPhase;
|
|
86848
86782
|
}();
|
|
86849
|
-
var OceanInitialSpectrum =
|
|
86850
|
-
/*#__PURE__*/
|
|
86851
|
-
function () {
|
|
86783
|
+
var OceanInitialSpectrum = /*#__PURE__*/function () {
|
|
86852
86784
|
function OceanInitialSpectrum() {
|
|
86853
86785
|
_classCallCheck(this, OceanInitialSpectrum);
|
|
86854
86786
|
}
|
|
@@ -86881,9 +86813,7 @@ function () {
|
|
|
86881
86813
|
|
|
86882
86814
|
return OceanInitialSpectrum;
|
|
86883
86815
|
}();
|
|
86884
|
-
var OceanSubTransform =
|
|
86885
|
-
/*#__PURE__*/
|
|
86886
|
-
function () {
|
|
86816
|
+
var OceanSubTransform = /*#__PURE__*/function () {
|
|
86887
86817
|
function OceanSubTransform() {
|
|
86888
86818
|
_classCallCheck(this, OceanSubTransform);
|
|
86889
86819
|
}
|
|
@@ -86926,9 +86856,7 @@ function () {
|
|
|
86926
86856
|
|
|
86927
86857
|
return OceanSubTransform;
|
|
86928
86858
|
}();
|
|
86929
|
-
var OceanSimVertex =
|
|
86930
|
-
/*#__PURE__*/
|
|
86931
|
-
function () {
|
|
86859
|
+
var OceanSimVertex = /*#__PURE__*/function () {
|
|
86932
86860
|
function OceanSimVertex() {
|
|
86933
86861
|
_classCallCheck(this, OceanSimVertex);
|
|
86934
86862
|
}
|
|
@@ -86951,9 +86879,7 @@ function () {
|
|
|
86951
86879
|
|
|
86952
86880
|
return OceanSimVertex;
|
|
86953
86881
|
}();
|
|
86954
|
-
var OceanShaders = {};var OceanShader =
|
|
86955
|
-
/*#__PURE__*/
|
|
86956
|
-
function () {
|
|
86882
|
+
var OceanShaders = {};var OceanShader = /*#__PURE__*/function () {
|
|
86957
86883
|
function OceanShader(renderer, camera, scene, options) {
|
|
86958
86884
|
_classCallCheck(this, OceanShader);
|
|
86959
86885
|
|
|
@@ -87310,9 +87236,7 @@ function () {
|
|
|
87310
87236
|
return OceanShader;
|
|
87311
87237
|
}();
|
|
87312
87238
|
|
|
87313
|
-
var Ocean =
|
|
87314
|
-
/*#__PURE__*/
|
|
87315
|
-
function () {
|
|
87239
|
+
var Ocean = /*#__PURE__*/function () {
|
|
87316
87240
|
function Ocean() {
|
|
87317
87241
|
_classCallCheck(this, Ocean);
|
|
87318
87242
|
|
|
@@ -87576,9 +87500,7 @@ var DEFAULT_WATER_WIDTH = 512;
|
|
|
87576
87500
|
var DEFAULT_WATER_ALPHA = 1.0;
|
|
87577
87501
|
var DEFAULT_WATER_DISTORTION_SCALE = 3.7;
|
|
87578
87502
|
|
|
87579
|
-
var Water =
|
|
87580
|
-
/*#__PURE__*/
|
|
87581
|
-
function (_Element) {
|
|
87503
|
+
var Water = /*#__PURE__*/function (_Element) {
|
|
87582
87504
|
_inherits(Water, _Element);
|
|
87583
87505
|
|
|
87584
87506
|
var _super = _createSuper(Water);
|
|
@@ -87647,9 +87569,7 @@ function (_Element) {
|
|
|
87647
87569
|
}]);
|
|
87648
87570
|
|
|
87649
87571
|
return Water;
|
|
87650
|
-
}(Element);var SkyShader =
|
|
87651
|
-
/*#__PURE__*/
|
|
87652
|
-
function () {
|
|
87572
|
+
}(Element);var SkyShader = /*#__PURE__*/function () {
|
|
87653
87573
|
function SkyShader() {
|
|
87654
87574
|
_classCallCheck(this, SkyShader);
|
|
87655
87575
|
}
|
|
@@ -87730,9 +87650,7 @@ var DEFAULT_SUN_INCLINATION = .49;
|
|
|
87730
87650
|
var DEFAULT_SUN_AZIMUTH = 0.205;
|
|
87731
87651
|
var DEFAULT_SUN_DISTANCE = 100;
|
|
87732
87652
|
|
|
87733
|
-
var Sky =
|
|
87734
|
-
/*#__PURE__*/
|
|
87735
|
-
function (_Element) {
|
|
87653
|
+
var Sky = /*#__PURE__*/function (_Element) {
|
|
87736
87654
|
_inherits(Sky, _Element);
|
|
87737
87655
|
|
|
87738
87656
|
var _super = _createSuper(Sky);
|
|
@@ -87834,9 +87752,9 @@ function (_Element) {
|
|
|
87834
87752
|
}]);
|
|
87835
87753
|
|
|
87836
87754
|
return Sky;
|
|
87837
|
-
}(Element);var
|
|
87838
|
-
|
|
87839
|
-
function (_Element) {
|
|
87755
|
+
}(Element);var _excluded$6 = ["name", "texture"];
|
|
87756
|
+
|
|
87757
|
+
var Skybox = /*#__PURE__*/function (_Element) {
|
|
87840
87758
|
_inherits(Skybox, _Element);
|
|
87841
87759
|
|
|
87842
87760
|
var _super = _createSuper(Skybox);
|
|
@@ -87850,7 +87768,7 @@ function (_Element) {
|
|
|
87850
87768
|
name = _options$name === void 0 ? "skybox_".concat(generateUUID()) : _options$name,
|
|
87851
87769
|
_options$texture = options.texture,
|
|
87852
87770
|
texture = _options$texture === void 0 ? 'skybox' : _options$texture,
|
|
87853
|
-
rest = _objectWithoutProperties(options,
|
|
87771
|
+
rest = _objectWithoutProperties(options, _excluded$6);
|
|
87854
87772
|
|
|
87855
87773
|
_this = _super.call(this, null, null, _objectSpread2({
|
|
87856
87774
|
name: name,
|
|
@@ -87872,9 +87790,7 @@ function (_Element) {
|
|
|
87872
87790
|
}
|
|
87873
87791
|
|
|
87874
87792
|
return Skybox;
|
|
87875
|
-
}(Element);var Shaders =
|
|
87876
|
-
/*#__PURE__*/
|
|
87877
|
-
function () {
|
|
87793
|
+
}(Element);var Shaders = /*#__PURE__*/function () {
|
|
87878
87794
|
function Shaders() {
|
|
87879
87795
|
var _this = this;
|
|
87880
87796
|
|
|
@@ -87950,4 +87866,4 @@ var Shaders$1 = new Shaders();var Shader$1 = function Shader(name, attributes, u
|
|
|
87950
87866
|
} else {
|
|
87951
87867
|
this.instance = this.shader.instance;
|
|
87952
87868
|
}
|
|
87953
|
-
};var constants$1 = _objectSpread2({}, lib_constants,
|
|
87869
|
+
};var constants$1 = _objectSpread2(_objectSpread2({}, lib_constants), light_contants);export{AUDIO_RAMPS,AmbientLight$1 as AmbientLight,Atmosphere,Audio$2 as Audio,BUILTIN,BackgroundSound,BaseScript,Box,Camera$1 as Camera,Color$1 as Color,Config$1 as Config,Controls$1 as Controls,Cube,CurveLine,Cylinder,DirectionalSound,ENTITY_EVENTS,ENTITY_TYPES,Element,EventDispatcher,FEATURES,Features$1 as Features,GameRunner$1 as GameRunner,Grid,HemisphereLight$1 as HemisphereLight,INPUT_EVENTS,Images$1 as Images,Input$1 as Input,Level,LightLoader$1 as LightLoader,Lights$1 as Lights,Line$1 as Line,MeshLoader$1 as MeshLoader,Mirror,Models$1 as Models,Ocean,PALETTES,PARTICLES,constants as PHYSICS_CONSTANTS,PHYSICS_EVENTS,ParticleEmitter as ParticlEmitter,Particles$1 as Particles,index as Partykals,Physics$1 as Physics,Plane$1 as Plane,PointLight$1 as PointLight,PostProcessing$1 as PostProcessing,Provider,Router$1 as Router,Scene$2 as Scene,Scripts$1 as Scripts,Shader$1 as Shader,Sky,Skybox,Sound,Sphere$1 as Sphere,SpotLight$1 as SpotLight,Sprite$1 as Sprite,Stats$1 as Stats,SunLight,three_module as THREE,Universe$1 as Universe,Vector3$1 as Vector3,Water,author$1 as author,connect,constants$1 as constants,functions,math,utils as physicsUtils,index$1 as store,strings,uuid,workers};
|