angular-three-soba 2.0.0-beta.8 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +62 -4
- package/abstractions/README.md +279 -2
- package/abstractions/index.d.ts +13 -6
- package/abstractions/lib/billboard.d.ts +19 -0
- package/abstractions/lib/catmull-rom-line.d.ts +617 -0
- package/abstractions/lib/cubic-bezier-line.d.ts +19 -0
- package/abstractions/lib/edges.d.ts +800 -0
- package/abstractions/lib/gradient-texture.d.ts +24 -0
- package/abstractions/lib/grid.d.ts +315 -0
- package/abstractions/lib/helper.d.ts +25 -0
- package/abstractions/lib/line.d.ts +41 -0
- package/abstractions/lib/prism-geometry.d.ts +32 -0
- package/abstractions/lib/quadratic-bezier-line.d.ts +21 -0
- package/abstractions/lib/rounded-box.d.ts +41 -0
- package/abstractions/lib/text-3d.d.ts +314 -0
- package/abstractions/lib/text.d.ts +54 -0
- package/cameras/README.md +91 -2
- package/cameras/index.d.ts +4 -4
- package/cameras/lib/camera-content.d.ts +10 -0
- package/cameras/lib/cube-camera.d.ts +38 -0
- package/cameras/lib/orthographic-camera.d.ts +40 -0
- package/cameras/lib/perspective-camera.d.ts +36 -0
- package/controls/README.md +96 -2
- package/controls/index.d.ts +4 -1
- package/controls/lib/camera-controls.d.ts +31 -0
- package/controls/lib/orbit-controls.d.ts +38 -0
- package/controls/lib/pivot-controls/axis-arrow.d.ts +31 -0
- package/controls/lib/pivot-controls/axis-rotator.d.ts +30 -0
- package/controls/lib/pivot-controls/pivot-controls.d.ts +110 -0
- package/controls/lib/pivot-controls/plane-slider.d.ts +32 -0
- package/controls/lib/pivot-controls/scaling-sphere.d.ts +32 -0
- package/controls/lib/scroll-controls.d.ts +78 -0
- package/esm2022/abstractions/index.mjs +14 -7
- package/esm2022/abstractions/lib/billboard.mjs +69 -0
- package/esm2022/abstractions/lib/catmull-rom-line.mjs +76 -0
- package/esm2022/abstractions/lib/cubic-bezier-line.mjs +51 -0
- package/esm2022/abstractions/lib/edges.mjs +70 -0
- package/esm2022/abstractions/lib/gradient-texture.mjs +91 -0
- package/esm2022/abstractions/lib/grid.mjs +103 -0
- package/esm2022/abstractions/lib/helper.mjs +76 -0
- package/esm2022/abstractions/lib/line.mjs +126 -0
- package/esm2022/abstractions/lib/prism-geometry.mjs +46 -0
- package/esm2022/abstractions/lib/quadratic-bezier-line.mjs +73 -0
- package/esm2022/abstractions/lib/rounded-box.mjs +111 -0
- package/esm2022/abstractions/lib/text-3d.mjs +98 -0
- package/esm2022/abstractions/lib/text.mjs +91 -0
- package/esm2022/cameras/index.mjs +5 -5
- package/esm2022/cameras/lib/camera-content.mjs +14 -0
- package/esm2022/cameras/lib/cube-camera.mjs +111 -0
- package/esm2022/cameras/lib/orthographic-camera.mjs +131 -0
- package/esm2022/cameras/lib/perspective-camera.mjs +104 -0
- package/esm2022/controls/index.mjs +5 -2
- package/esm2022/controls/lib/camera-controls.mjs +127 -0
- package/esm2022/controls/lib/orbit-controls.mjs +132 -0
- package/esm2022/controls/lib/pivot-controls/axis-arrow.mjs +263 -0
- package/esm2022/controls/lib/pivot-controls/axis-rotator.mjs +264 -0
- package/esm2022/controls/lib/pivot-controls/pivot-controls.mjs +340 -0
- package/esm2022/controls/lib/pivot-controls/plane-slider.mjs +266 -0
- package/esm2022/controls/lib/pivot-controls/scaling-sphere.mjs +232 -0
- package/esm2022/controls/lib/scroll-controls.mjs +268 -0
- package/esm2022/loaders/index.mjs +6 -5
- package/esm2022/loaders/lib/font-loader.mjs +49 -0
- package/esm2022/loaders/lib/gltf-loader.mjs +51 -0
- package/esm2022/loaders/lib/loader.mjs +109 -0
- package/esm2022/loaders/lib/progress.mjs +51 -0
- package/esm2022/loaders/lib/texture-loader.mjs +32 -0
- package/esm2022/materials/index.mjs +8 -7
- package/esm2022/materials/lib/custom-shader-material.mjs +71 -0
- package/esm2022/materials/lib/mesh-distort-material.mjs +42 -0
- package/esm2022/materials/lib/mesh-reflector-material.mjs +278 -0
- package/esm2022/materials/lib/mesh-refraction-material.mjs +144 -0
- package/esm2022/materials/lib/mesh-transmission-material.mjs +188 -0
- package/esm2022/materials/lib/mesh-wobble-material.mjs +42 -0
- package/esm2022/materials/lib/point-material.mjs +33 -0
- package/esm2022/misc/index.mjs +14 -14
- package/esm2022/misc/lib/animations.mjs +71 -0
- package/esm2022/misc/lib/bake-shadows.mjs +26 -0
- package/esm2022/misc/lib/computed-attribute.mjs +55 -0
- package/esm2022/misc/lib/constants.mjs +5 -0
- package/esm2022/misc/lib/decal.mjs +139 -0
- package/esm2022/misc/lib/deprecated.mjs +15 -0
- package/esm2022/misc/lib/depth-buffer.mjs +39 -0
- package/esm2022/misc/lib/fbo.mjs +86 -0
- package/esm2022/misc/lib/html/html-content.mjs +327 -0
- package/esm2022/misc/lib/html/html.mjs +129 -0
- package/esm2022/misc/lib/html/utils.mjs +74 -0
- package/esm2022/misc/lib/intersect.mjs +52 -0
- package/esm2022/misc/lib/sampler.mjs +122 -0
- package/esm2022/misc/lib/scale-factor.mjs +29 -0
- package/esm2022/performances/index.mjs +7 -6
- package/esm2022/performances/lib/adaptive-dpr.mjs +52 -0
- package/esm2022/performances/lib/adaptive-events.mjs +28 -0
- package/esm2022/performances/lib/detailed.mjs +57 -0
- package/esm2022/performances/lib/instances/instances.mjs +183 -0
- package/esm2022/performances/lib/instances/position-mesh.mjs +51 -0
- package/esm2022/performances/lib/points/points.mjs +278 -0
- package/esm2022/performances/lib/points/position-point.mjs +53 -0
- package/esm2022/performances/lib/segments/segment-object.mjs +9 -0
- package/esm2022/performances/lib/segments/segments.mjs +129 -0
- package/esm2022/shaders/index.mjs +4 -18
- package/esm2022/shaders/lib/grid-material.mjs +81 -0
- package/esm2022/shaders/lib/mesh-refraction-material.mjs +163 -0
- package/esm2022/shaders/lib/point-material.mjs +24 -0
- package/esm2022/staging/index.mjs +19 -22
- package/esm2022/staging/lib/accumulative-shadows.mjs +182 -0
- package/esm2022/staging/lib/backdrop.mjs +73 -0
- package/esm2022/staging/lib/bb-anchor.mjs +58 -0
- package/esm2022/staging/lib/bounds.mjs +286 -0
- package/esm2022/staging/lib/camera-shake.mjs +69 -0
- package/esm2022/staging/lib/caustics.mjs +188 -0
- package/esm2022/staging/lib/center.mjs +118 -0
- package/esm2022/staging/lib/contact-shadows.mjs +214 -0
- package/esm2022/staging/lib/environment.mjs +481 -0
- package/esm2022/staging/lib/float.mjs +70 -0
- package/esm2022/staging/lib/lightformer.mjs +107 -0
- package/esm2022/staging/lib/matcap-texture.mjs +81 -0
- package/esm2022/staging/lib/normal-texture.mjs +81 -0
- package/esm2022/staging/lib/randomized-lights.mjs +104 -0
- package/esm2022/staging/lib/render-texture.mjs +203 -0
- package/esm2022/staging/lib/sky.mjs +86 -0
- package/esm2022/staging/lib/spot-light.mjs +453 -0
- package/esm2022/staging/lib/stage.mjs +236 -0
- package/esm2022/{utils/angular-three-soba-utils.mjs → stats/angular-three-soba-stats.mjs} +1 -1
- package/esm2022/stats/index.mjs +2 -0
- package/esm2022/stats/lib/stats.mjs +63 -0
- package/esm2022/vanilla-exports/angular-three-soba-vanilla-exports.mjs +5 -0
- package/esm2022/vanilla-exports/index.mjs +3 -0
- package/fesm2022/angular-three-soba-abstractions.mjs +884 -697
- package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
- package/fesm2022/angular-three-soba-cameras.mjs +261 -308
- package/fesm2022/angular-three-soba-cameras.mjs.map +1 -1
- package/fesm2022/angular-three-soba-controls.mjs +1776 -109
- package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
- package/fesm2022/angular-three-soba-loaders.mjs +191 -145
- package/fesm2022/angular-three-soba-loaders.mjs.map +1 -1
- package/fesm2022/angular-three-soba-materials.mjs +527 -748
- package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
- package/fesm2022/angular-three-soba-misc.mjs +783 -1935
- package/fesm2022/angular-three-soba-misc.mjs.map +1 -1
- package/fesm2022/angular-three-soba-performances.mjs +591 -475
- package/fesm2022/angular-three-soba-performances.mjs.map +1 -1
- package/fesm2022/angular-three-soba-shaders.mjs +51 -1369
- package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
- package/fesm2022/angular-three-soba-staging.mjs +2350 -3521
- package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
- package/fesm2022/angular-three-soba-stats.mjs +70 -0
- package/fesm2022/angular-three-soba-stats.mjs.map +1 -0
- package/fesm2022/angular-three-soba-vanilla-exports.mjs +6 -0
- package/fesm2022/angular-three-soba-vanilla-exports.mjs.map +1 -0
- package/loaders/README.md +130 -2
- package/loaders/index.d.ts +5 -4
- package/loaders/lib/font-loader.d.ts +27 -0
- package/loaders/lib/gltf-loader.d.ts +24 -0
- package/loaders/lib/loader.d.ts +29 -0
- package/loaders/lib/progress.d.ts +9 -0
- package/loaders/lib/texture-loader.d.ts +13 -0
- package/materials/README.md +160 -2
- package/materials/index.d.ts +7 -6
- package/materials/lib/custom-shader-material.d.ts +20 -0
- package/materials/lib/mesh-distort-material.d.ts +17 -0
- package/materials/lib/mesh-reflector-material.d.ts +51 -0
- package/materials/lib/mesh-refraction-material.d.ts +42 -0
- package/materials/lib/mesh-transmission-material.d.ts +77 -0
- package/materials/lib/mesh-wobble-material.d.ts +15 -0
- package/materials/lib/point-material.d.ts +11 -0
- package/metadata.json +1 -1
- package/misc/README.md +217 -2
- package/misc/index.d.ts +13 -13
- package/misc/lib/animations.d.ts +17 -0
- package/misc/lib/computed-attribute.d.ts +64 -0
- package/misc/lib/constants.d.ts +1 -0
- package/misc/lib/decal.d.ts +27 -0
- package/misc/lib/deprecated.d.ts +14 -0
- package/misc/lib/depth-buffer.d.ts +8 -0
- package/misc/lib/fbo.d.ts +46 -0
- package/misc/lib/html/html-content.d.ts +47 -0
- package/misc/lib/html/html.d.ts +30 -0
- package/misc/lib/html/utils.d.ts +14 -0
- package/misc/lib/intersect.d.ts +13 -0
- package/misc/lib/sampler.d.ts +73 -0
- package/misc/lib/scale-factor.d.ts +3 -0
- package/package.json +89 -48
- package/performances/index.d.ts +6 -5
- package/performances/lib/adaptive-dpr.d.ts +7 -0
- package/performances/{adaptive-events → lib}/adaptive-events.d.ts +0 -3
- package/performances/lib/detailed.d.ts +17 -0
- package/performances/lib/instances/instances.d.ts +122 -0
- package/performances/lib/instances/position-mesh.d.ts +20 -0
- package/performances/lib/points/points.d.ts +224 -0
- package/performances/lib/points/position-point.d.ts +21 -0
- package/performances/lib/segments/segment-object.d.ts +17 -0
- package/performances/lib/segments/segments.d.ts +97 -0
- package/shaders/index.d.ts +3 -17
- package/shaders/lib/grid-material.d.ts +69 -0
- package/shaders/lib/mesh-refraction-material.d.ts +11 -0
- package/shaders/lib/point-material.d.ts +14 -0
- package/staging/README.md +473 -2
- package/staging/index.d.ts +18 -21
- package/staging/lib/accumulative-shadows.d.ts +75 -0
- package/staging/lib/backdrop.d.ts +22 -0
- package/staging/lib/bb-anchor.d.ts +17 -0
- package/staging/lib/bounds.d.ts +47 -0
- package/staging/lib/camera-shake.d.ts +29 -0
- package/staging/lib/caustics.d.ts +53 -0
- package/staging/lib/center.d.ts +390 -0
- package/staging/lib/contact-shadows.d.ts +55 -0
- package/staging/lib/environment.d.ts +132 -0
- package/staging/lib/float.d.ts +20 -0
- package/staging/lib/lightformer.d.ts +310 -0
- package/staging/lib/matcap-texture.d.ts +32 -0
- package/staging/lib/normal-texture.d.ts +37 -0
- package/staging/lib/randomized-lights.d.ts +54 -0
- package/staging/lib/render-texture.d.ts +64 -0
- package/staging/lib/sky.d.ts +32 -0
- package/staging/lib/spot-light.d.ts +119 -0
- package/staging/lib/stage.d.ts +352 -0
- package/stats/README.md +3 -0
- package/stats/index.d.ts +1 -0
- package/stats/lib/stats.d.ts +14 -0
- package/vanilla-exports/README.md +3 -0
- package/vanilla-exports/index.d.ts +27 -0
- package/web-types.json +1 -1
- package/abstractions/billboard/billboard.d.ts +0 -28
- package/abstractions/detailed/detailed.d.ts +0 -26
- package/abstractions/edges/edges.d.ts +0 -34
- package/abstractions/grid/grid.d.ts +0 -50
- package/abstractions/text/text.d.ts +0 -82
- package/abstractions/text-3d/text-3d.d.ts +0 -81
- package/assets/distort.vert.glsl +0 -1
- package/cameras/camera/camera-content.d.ts +0 -13
- package/cameras/camera/camera.d.ts +0 -26
- package/cameras/cube-camera/cube-camera.d.ts +0 -69
- package/cameras/orthographic-camera/orthographic-camera.d.ts +0 -37
- package/cameras/perspective-camera/perspective-camera.d.ts +0 -18
- package/controls/orbit-controls/orbit-controls.d.ts +0 -54
- package/esm2022/abstractions/billboard/billboard.mjs +0 -74
- package/esm2022/abstractions/detailed/detailed.mjs +0 -64
- package/esm2022/abstractions/edges/edges.mjs +0 -88
- package/esm2022/abstractions/grid/grid.mjs +0 -180
- package/esm2022/abstractions/text/text.mjs +0 -274
- package/esm2022/abstractions/text-3d/text-3d.mjs +0 -165
- package/esm2022/cameras/camera/camera-content.mjs +0 -20
- package/esm2022/cameras/camera/camera.mjs +0 -77
- package/esm2022/cameras/cube-camera/cube-camera.mjs +0 -161
- package/esm2022/cameras/orthographic-camera/orthographic-camera.mjs +0 -102
- package/esm2022/cameras/perspective-camera/perspective-camera.mjs +0 -46
- package/esm2022/controls/orbit-controls/orbit-controls.mjs +0 -181
- package/esm2022/loaders/gltf-loader/gltf-loader.mjs +0 -30
- package/esm2022/loaders/loader/loader.mjs +0 -138
- package/esm2022/loaders/progress/progress.mjs +0 -45
- package/esm2022/loaders/texture-loader/texture-loader.mjs +0 -28
- package/esm2022/materials/mesh-distort-material/mesh-distort-material.mjs +0 -82
- package/esm2022/materials/mesh-reflector-material/mesh-reflector-material.mjs +0 -367
- package/esm2022/materials/mesh-refraction-material/mesh-refraction-material.mjs +0 -171
- package/esm2022/materials/mesh-transmission-material/mesh-transmission-material.mjs +0 -278
- package/esm2022/materials/mesh-wobble-material/mesh-wobble-material.mjs +0 -68
- package/esm2022/materials/point-material/point-material.mjs +0 -46
- package/esm2022/misc/animations/animations.mjs +0 -59
- package/esm2022/misc/bake-shadows/bake-shadows.mjs +0 -24
- package/esm2022/misc/caustics/caustics.mjs +0 -387
- package/esm2022/misc/decal/decal.mjs +0 -187
- package/esm2022/misc/depth-buffer/depth-buffer.mjs +0 -44
- package/esm2022/misc/example/example.mjs +0 -160
- package/esm2022/misc/fbo/fbo.mjs +0 -47
- package/esm2022/misc/html/html-wrapper.mjs +0 -478
- package/esm2022/misc/html/html.mjs +0 -304
- package/esm2022/misc/sampler/sampler.mjs +0 -142
- package/esm2022/misc/shadow/shadow.mjs +0 -111
- package/esm2022/misc/stats-gl/stats-gl.mjs +0 -61
- package/esm2022/misc/trail/trail.mjs +0 -209
- package/esm2022/misc/trail-texture/inject-trail-texture.mjs +0 -17
- package/esm2022/misc/trail-texture/trail-texture.mjs +0 -106
- package/esm2022/modifiers/angular-three-soba-modifiers.mjs +0 -5
- package/esm2022/modifiers/curve-modifier/curve-modifier.mjs +0 -64
- package/esm2022/modifiers/index.mjs +0 -2
- package/esm2022/performances/adaptive-dpr/adaptive-dpr.mjs +0 -44
- package/esm2022/performances/adaptive-events/adaptive-events.mjs +0 -27
- package/esm2022/performances/points/points-input.mjs +0 -64
- package/esm2022/performances/points/points.mjs +0 -329
- package/esm2022/performances/points/position-point.mjs +0 -54
- package/esm2022/performances/segments/segment-object.mjs +0 -9
- package/esm2022/performances/segments/segments.mjs +0 -182
- package/esm2022/shaders/blur-pass/blur-pass.mjs +0 -61
- package/esm2022/shaders/caustics/caustics-material.mjs +0 -130
- package/esm2022/shaders/caustics/caustics-projection-material.mjs +0 -31
- package/esm2022/shaders/convolution-material/convolution-material.mjs +0 -94
- package/esm2022/shaders/discard-material/discard-material.mjs +0 -3
- package/esm2022/shaders/grid-material/grid-material.mjs +0 -77
- package/esm2022/shaders/mesh-distort-material/mesh-distort-material.mjs +0 -56
- package/esm2022/shaders/mesh-reflector-material/mesh-reflector-material.mjs +0 -223
- package/esm2022/shaders/mesh-refraction-material/mesh-refraction-material.mjs +0 -170
- package/esm2022/shaders/mesh-transmission-material/mesh-transmission-material.mjs +0 -268
- package/esm2022/shaders/mesh-wobble-material/mesh-wobble-material.mjs +0 -37
- package/esm2022/shaders/shader-material/shader-material.mjs +0 -34
- package/esm2022/shaders/soft-shadow-material/soft-shadow-material.mjs +0 -25
- package/esm2022/shaders/sparkles-material/sparkles-material.mjs +0 -33
- package/esm2022/shaders/spot-light-material/spot-light-material.mjs +0 -86
- package/esm2022/shaders/star-field-material/star-field-material.mjs +0 -33
- package/esm2022/shaders/wireframe-material/wireframe-material.mjs +0 -247
- package/esm2022/staging/accumulative-shadows/accumulative-shadows.mjs +0 -267
- package/esm2022/staging/accumulative-shadows/progressive-light-map.mjs +0 -108
- package/esm2022/staging/accumulative-shadows/randomized-lights.mjs +0 -206
- package/esm2022/staging/backdrop/backdrop.mjs +0 -77
- package/esm2022/staging/bb-anchor/bb-anchor.mjs +0 -70
- package/esm2022/staging/bounds/bounds.mjs +0 -308
- package/esm2022/staging/camera-shake/camera-shake.mjs +0 -123
- package/esm2022/staging/center/center.mjs +0 -163
- package/esm2022/staging/cloud/cloud.mjs +0 -158
- package/esm2022/staging/contact-shadows/contact-shadows.mjs +0 -246
- package/esm2022/staging/environment/assets.mjs +0 -13
- package/esm2022/staging/environment/environment-cube.mjs +0 -47
- package/esm2022/staging/environment/environment-ground.mjs +0 -41
- package/esm2022/staging/environment/environment-input.mjs +0 -119
- package/esm2022/staging/environment/environment-map.mjs +0 -53
- package/esm2022/staging/environment/environment-portal.mjs +0 -113
- package/esm2022/staging/environment/environment.mjs +0 -61
- package/esm2022/staging/environment/utils.mjs +0 -105
- package/esm2022/staging/float/float.mjs +0 -94
- package/esm2022/staging/matcap-texture/matcap-texture.mjs +0 -64
- package/esm2022/staging/normal-texture/normal-texture.mjs +0 -53
- package/esm2022/staging/sky/sky.mjs +0 -119
- package/esm2022/staging/sparkles/sparkles.mjs +0 -164
- package/esm2022/staging/spot-light/shadow-mesh-input.mjs +0 -63
- package/esm2022/staging/spot-light/shadow-mesh.mjs +0 -266
- package/esm2022/staging/spot-light/spot-light-input.mjs +0 -84
- package/esm2022/staging/spot-light/spot-light.mjs +0 -81
- package/esm2022/staging/spot-light/volumetric-mesh.mjs +0 -98
- package/esm2022/staging/stage/stage.mjs +0 -388
- package/esm2022/staging/stars/stars.mjs +0 -147
- package/esm2022/staging/wireframe/wireframe-input.mjs +0 -191
- package/esm2022/staging/wireframe/wireframe.mjs +0 -224
- package/esm2022/utils/content/content.mjs +0 -15
- package/esm2022/utils/index.mjs +0 -2
- package/fesm2022/angular-three-soba-modifiers.mjs +0 -71
- package/fesm2022/angular-three-soba-modifiers.mjs.map +0 -1
- package/fesm2022/angular-three-soba-utils.mjs +0 -22
- package/fesm2022/angular-three-soba-utils.mjs.map +0 -1
- package/loaders/gltf-loader/gltf-loader.d.ts +0 -10
- package/loaders/loader/loader.d.ts +0 -33
- package/loaders/progress/progress.d.ts +0 -9
- package/loaders/texture-loader/texture-loader.d.ts +0 -7
- package/materials/mesh-distort-material/mesh-distort-material.d.ts +0 -40
- package/materials/mesh-reflector-material/mesh-reflector-material.d.ts +0 -99
- package/materials/mesh-refraction-material/mesh-refraction-material.d.ts +0 -62
- package/materials/mesh-transmission-material/mesh-transmission-material.d.ts +0 -107
- package/materials/mesh-wobble-material/mesh-wobble-material.d.ts +0 -29
- package/materials/point-material/point-material.d.ts +0 -24
- package/misc/animations/animations.d.ts +0 -15
- package/misc/caustics/caustics.d.ts +0 -87
- package/misc/decal/decal.d.ts +0 -49
- package/misc/depth-buffer/depth-buffer.d.ts +0 -9
- package/misc/example/example.d.ts +0 -81
- package/misc/fbo/fbo.d.ts +0 -17
- package/misc/html/html-wrapper.d.ts +0 -559
- package/misc/html/html.d.ts +0 -214
- package/misc/sampler/sampler.d.ts +0 -67
- package/misc/shadow/shadow.d.ts +0 -37
- package/misc/stats-gl/stats-gl.d.ts +0 -24
- package/misc/trail/trail.d.ts +0 -57
- package/misc/trail-texture/inject-trail-texture.d.ts +0 -9
- package/misc/trail-texture/trail-texture.d.ts +0 -50
- package/modifiers/README.md +0 -3
- package/modifiers/curve-modifier/curve-modifier.d.ts +0 -23
- package/modifiers/index.d.ts +0 -1
- package/performances/adaptive-dpr/adaptive-dpr.d.ts +0 -14
- package/performances/points/points-input.d.ts +0 -32
- package/performances/points/points.d.ts +0 -92
- package/performances/points/position-point.d.ts +0 -11
- package/performances/segments/segment-object.d.ts +0 -7
- package/performances/segments/segments.d.ts +0 -124
- package/shaders/blur-pass/blur-pass.d.ts +0 -23
- package/shaders/caustics/caustics-material.d.ts +0 -4
- package/shaders/caustics/caustics-projection-material.d.ts +0 -4
- package/shaders/convolution-material/convolution-material.d.ts +0 -7
- package/shaders/discard-material/discard-material.d.ts +0 -3
- package/shaders/grid-material/grid-material.d.ts +0 -37
- package/shaders/mesh-distort-material/mesh-distort-material.d.ts +0 -295
- package/shaders/mesh-reflector-material/mesh-reflector-material.d.ts +0 -50
- package/shaders/mesh-refraction-material/mesh-refraction-material.d.ts +0 -4
- package/shaders/mesh-transmission-material/mesh-transmission-material.d.ts +0 -25
- package/shaders/mesh-wobble-material/mesh-wobble-material.d.ts +0 -16
- package/shaders/shader-material/shader-material.d.ts +0 -6
- package/shaders/soft-shadow-material/soft-shadow-material.d.ts +0 -19
- package/shaders/sparkles-material/sparkles-material.d.ts +0 -17
- package/shaders/spot-light-material/spot-light-material.d.ts +0 -13
- package/shaders/star-field-material/star-field-material.d.ts +0 -13
- package/shaders/wireframe-material/wireframe-material.d.ts +0 -58
- package/staging/accumulative-shadows/accumulative-shadows.d.ts +0 -146
- package/staging/accumulative-shadows/progressive-light-map.d.ts +0 -34
- package/staging/accumulative-shadows/randomized-lights.d.ts +0 -90
- package/staging/backdrop/backdrop.d.ts +0 -30
- package/staging/bb-anchor/bb-anchor.d.ts +0 -27
- package/staging/bounds/bounds.d.ts +0 -134
- package/staging/camera-shake/camera-shake.d.ts +0 -43
- package/staging/center/center.d.ts +0 -70
- package/staging/cloud/cloud.d.ts +0 -51
- package/staging/contact-shadows/contact-shadows.d.ts +0 -70
- package/staging/environment/assets.d.ts +0 -13
- package/staging/environment/environment-cube.d.ts +0 -15
- package/staging/environment/environment-ground.d.ts +0 -13
- package/staging/environment/environment-input.d.ts +0 -68
- package/staging/environment/environment-map.d.ts +0 -16
- package/staging/environment/environment-portal.d.ts +0 -18
- package/staging/environment/environment.d.ts +0 -8
- package/staging/environment/utils.d.ts +0 -7
- package/staging/float/float.d.ts +0 -31
- package/staging/matcap-texture/matcap-texture.d.ts +0 -13
- package/staging/normal-texture/normal-texture.d.ts +0 -16
- package/staging/sky/sky.d.ts +0 -48
- package/staging/sparkles/sparkles.d.ts +0 -63
- package/staging/spot-light/shadow-mesh-input.d.ts +0 -29
- package/staging/spot-light/shadow-mesh.d.ts +0 -37
- package/staging/spot-light/spot-light-input.d.ts +0 -38
- package/staging/spot-light/spot-light.d.ts +0 -39
- package/staging/spot-light/volumetric-mesh.d.ts +0 -24
- package/staging/stage/stage.d.ts +0 -130
- package/staging/stars/stars.d.ts +0 -45
- package/staging/wireframe/wireframe-input.d.ts +0 -65
- package/staging/wireframe/wireframe.d.ts +0 -28
- package/utils/README.md +0 -3
- package/utils/content/content.d.ts +0 -8
- package/utils/index.d.ts +0 -1
- /package/misc/{bake-shadows → lib}/bake-shadows.d.ts +0 -0
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import { Component, CUSTOM_ELEMENTS_SCHEMA, Input } from '@angular/core';
|
|
2
|
-
import { injectBeforeRender, injectNgtRef, NgtArgs, signalStore } from 'angular-three';
|
|
3
|
-
import { injectNgtsMeshDistortMaterial } from 'angular-three-soba/shaders';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
export class NgtsMeshDistortMaterial {
|
|
6
|
-
set _time(time) {
|
|
7
|
-
this.inputs.set({ time });
|
|
8
|
-
}
|
|
9
|
-
set _distort(distort) {
|
|
10
|
-
this.inputs.set({ distort });
|
|
11
|
-
}
|
|
12
|
-
set _radius(radius) {
|
|
13
|
-
this.inputs.set({ radius });
|
|
14
|
-
}
|
|
15
|
-
set _speed(speed) {
|
|
16
|
-
this.inputs.set({ speed });
|
|
17
|
-
}
|
|
18
|
-
constructor() {
|
|
19
|
-
this.inputs = signalStore({
|
|
20
|
-
speed: 1,
|
|
21
|
-
time: 0,
|
|
22
|
-
distort: 0.4,
|
|
23
|
-
radius: 1,
|
|
24
|
-
});
|
|
25
|
-
this.materialRef = injectNgtRef();
|
|
26
|
-
this.MeshDistortMaterial = injectNgtsMeshDistortMaterial();
|
|
27
|
-
this.material = new this.MeshDistortMaterial();
|
|
28
|
-
this.time = this.inputs.select('time');
|
|
29
|
-
this.distort = this.inputs.select('distort');
|
|
30
|
-
this.radius = this.inputs.select('radius');
|
|
31
|
-
injectBeforeRender(({ clock }) => {
|
|
32
|
-
this.material.time = clock.getElapsedTime() * this.inputs.get('speed');
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NgtsMeshDistortMaterial, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
36
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: NgtsMeshDistortMaterial, isStandalone: true, selector: "ngts-mesh-distort-material", inputs: { materialRef: "materialRef", _time: ["time", "_time"], _distort: ["distort", "_distort"], _radius: ["radius", "_radius"], _speed: ["speed", "_speed"] }, ngImport: i0, template: `
|
|
37
|
-
<ngt-primitive
|
|
38
|
-
*args="[material]"
|
|
39
|
-
[ref]="materialRef"
|
|
40
|
-
[time]="time()"
|
|
41
|
-
[distort]="distort()"
|
|
42
|
-
[radius]="radius()"
|
|
43
|
-
ngtCompound
|
|
44
|
-
attach="material"
|
|
45
|
-
/>
|
|
46
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }] }); }
|
|
47
|
-
}
|
|
48
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NgtsMeshDistortMaterial, decorators: [{
|
|
49
|
-
type: Component,
|
|
50
|
-
args: [{
|
|
51
|
-
selector: 'ngts-mesh-distort-material',
|
|
52
|
-
standalone: true,
|
|
53
|
-
template: `
|
|
54
|
-
<ngt-primitive
|
|
55
|
-
*args="[material]"
|
|
56
|
-
[ref]="materialRef"
|
|
57
|
-
[time]="time()"
|
|
58
|
-
[distort]="distort()"
|
|
59
|
-
[radius]="radius()"
|
|
60
|
-
ngtCompound
|
|
61
|
-
attach="material"
|
|
62
|
-
/>
|
|
63
|
-
`,
|
|
64
|
-
imports: [NgtArgs],
|
|
65
|
-
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
66
|
-
}]
|
|
67
|
-
}], ctorParameters: function () { return []; }, propDecorators: { materialRef: [{
|
|
68
|
-
type: Input
|
|
69
|
-
}], _time: [{
|
|
70
|
-
type: Input,
|
|
71
|
-
args: [{ alias: 'time' }]
|
|
72
|
-
}], _distort: [{
|
|
73
|
-
type: Input,
|
|
74
|
-
args: [{ alias: 'distort' }]
|
|
75
|
-
}], _radius: [{
|
|
76
|
-
type: Input,
|
|
77
|
-
args: [{ alias: 'radius' }]
|
|
78
|
-
}], _speed: [{
|
|
79
|
-
type: Input,
|
|
80
|
-
args: [{ alias: 'speed' }]
|
|
81
|
-
}] } });
|
|
82
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaC1kaXN0b3J0LW1hdGVyaWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL21hdGVyaWFscy9zcmMvbWVzaC1kaXN0b3J0LW1hdGVyaWFsL21lc2gtZGlzdG9ydC1tYXRlcmlhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLHNCQUFzQixFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQWdDLE1BQU0sZUFBZSxDQUFDO0FBQ3JILE9BQU8sRUFBRSw2QkFBNkIsRUFBdUIsTUFBTSw0QkFBNEIsQ0FBQzs7QUFtQ2hHLE1BQU0sT0FBTyx1QkFBdUI7SUFVbkMsSUFBOEIsS0FBSyxDQUFDLElBQVk7UUFDL0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFpQyxRQUFRLENBQUMsT0FBZTtRQUN4RCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQWdDLE9BQU8sQ0FBQyxNQUFjO1FBQ3JELElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBK0IsTUFBTSxDQUFDLEtBQWE7UUFDbEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFTRDtRQWhDUSxXQUFNLEdBQUcsV0FBVyxDQUErQjtZQUMxRCxLQUFLLEVBQUUsQ0FBQztZQUNSLElBQUksRUFBRSxDQUFDO1lBQ1AsT0FBTyxFQUFFLEdBQUc7WUFDWixNQUFNLEVBQUUsQ0FBQztTQUNULENBQUMsQ0FBQztRQUVNLGdCQUFXLEdBQUcsWUFBWSxFQUFxQyxDQUFDO1FBa0JqRSx3QkFBbUIsR0FBRyw2QkFBNkIsRUFBRSxDQUFDO1FBQzlELGFBQVEsR0FBRyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBRTFDLFNBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsQyxZQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEMsV0FBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBR3JDLGtCQUFrQixDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2hDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxjQUFjLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4RSxDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7OEdBckNXLHVCQUF1QjtrR0FBdkIsdUJBQXVCLHdQQWR6Qjs7Ozs7Ozs7OztFQVVULDREQUNTLE9BQU87OzJGQUdMLHVCQUF1QjtrQkFqQm5DLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLDRCQUE0QjtvQkFDdEMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7Ozs7Ozs7OztFQVVUO29CQUNELE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQztvQkFDbEIsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7aUJBQ2pDOzBFQVNTLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRXdCLEtBQUs7c0JBQWxDLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO2dCQUlTLFFBQVE7c0JBQXhDLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO2dCQUlLLE9BQU87c0JBQXRDLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO2dCQUlLLE1BQU07c0JBQXBDLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaW5qZWN0QmVmb3JlUmVuZGVyLCBpbmplY3ROZ3RSZWYsIE5ndEFyZ3MsIHNpZ25hbFN0b3JlLCB0eXBlIE5ndE1lc2hQaHlzaWNhbE1hdGVyaWFsIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBpbmplY3ROZ3RzTWVzaERpc3RvcnRNYXRlcmlhbCwgTWVzaERpc3RvcnRNYXRlcmlhbCB9IGZyb20gJ2FuZ3VsYXItdGhyZWUtc29iYS9zaGFkZXJzJztcblxuZXhwb3J0IHR5cGUgTmd0c01lc2hEaXN0b3J0TWF0ZXJpYWxTdGF0ZSA9IHtcblx0dGltZTogbnVtYmVyO1xuXHRkaXN0b3J0OiBudW1iZXI7XG5cdHJhZGl1czogbnVtYmVyO1xuXHRzcGVlZDogbnVtYmVyO1xufTtcblxuZGVjbGFyZSBnbG9iYWwge1xuXHRpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcblx0XHQvKipcblx0XHQgKiBAZXh0ZW5kcyBuZ3QtbWVzaC1waHlzaWNhbC1tYXRlcmlhbFxuXHRcdCAqL1xuXHRcdCduZ3RzLW1lc2gtZGlzdG9ydC1tYXRlcmlhbCc6IE5ndHNNZXNoRGlzdG9ydE1hdGVyaWFsU3RhdGUgJiBOZ3RNZXNoUGh5c2ljYWxNYXRlcmlhbDtcblx0fVxufVxuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLW1lc2gtZGlzdG9ydC1tYXRlcmlhbCcsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5ndC1wcmltaXRpdmVcblx0XHRcdCphcmdzPVwiW21hdGVyaWFsXVwiXG5cdFx0XHRbcmVmXT1cIm1hdGVyaWFsUmVmXCJcblx0XHRcdFt0aW1lXT1cInRpbWUoKVwiXG5cdFx0XHRbZGlzdG9ydF09XCJkaXN0b3J0KClcIlxuXHRcdFx0W3JhZGl1c109XCJyYWRpdXMoKVwiXG5cdFx0XHRuZ3RDb21wb3VuZFxuXHRcdFx0YXR0YWNoPVwibWF0ZXJpYWxcIlxuXHRcdC8+XG5cdGAsXG5cdGltcG9ydHM6IFtOZ3RBcmdzXSxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzTWVzaERpc3RvcnRNYXRlcmlhbCB7XG5cdHByaXZhdGUgaW5wdXRzID0gc2lnbmFsU3RvcmU8Tmd0c01lc2hEaXN0b3J0TWF0ZXJpYWxTdGF0ZT4oe1xuXHRcdHNwZWVkOiAxLFxuXHRcdHRpbWU6IDAsXG5cdFx0ZGlzdG9ydDogMC40LFxuXHRcdHJhZGl1czogMSxcblx0fSk7XG5cblx0QElucHV0KCkgbWF0ZXJpYWxSZWYgPSBpbmplY3ROZ3RSZWY8SW5zdGFuY2VUeXBlPE1lc2hEaXN0b3J0TWF0ZXJpYWw+PigpO1xuXG5cdEBJbnB1dCh7IGFsaWFzOiAndGltZScgfSkgc2V0IF90aW1lKHRpbWU6IG51bWJlcikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IHRpbWUgfSk7XG5cdH1cblxuXHRASW5wdXQoeyBhbGlhczogJ2Rpc3RvcnQnIH0pIHNldCBfZGlzdG9ydChkaXN0b3J0OiBudW1iZXIpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBkaXN0b3J0IH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICdyYWRpdXMnIH0pIHNldCBfcmFkaXVzKHJhZGl1czogbnVtYmVyKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgcmFkaXVzIH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICdzcGVlZCcgfSkgc2V0IF9zcGVlZChzcGVlZDogbnVtYmVyKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgc3BlZWQgfSk7XG5cdH1cblxuXHRwcml2YXRlIE1lc2hEaXN0b3J0TWF0ZXJpYWwgPSBpbmplY3ROZ3RzTWVzaERpc3RvcnRNYXRlcmlhbCgpO1xuXHRtYXRlcmlhbCA9IG5ldyB0aGlzLk1lc2hEaXN0b3J0TWF0ZXJpYWwoKTtcblxuXHR0aW1lID0gdGhpcy5pbnB1dHMuc2VsZWN0KCd0aW1lJyk7XG5cdGRpc3RvcnQgPSB0aGlzLmlucHV0cy5zZWxlY3QoJ2Rpc3RvcnQnKTtcblx0cmFkaXVzID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdyYWRpdXMnKTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRpbmplY3RCZWZvcmVSZW5kZXIoKHsgY2xvY2sgfSkgPT4ge1xuXHRcdFx0dGhpcy5tYXRlcmlhbC50aW1lID0gY2xvY2suZ2V0RWxhcHNlZFRpbWUoKSAqIHRoaXMuaW5wdXRzLmdldCgnc3BlZWQnKTtcblx0XHR9KTtcblx0fVxufVxuIl19
|
|
@@ -1,367 +0,0 @@
|
|
|
1
|
-
import { NgIf } from '@angular/common';
|
|
2
|
-
import { Component, computed, CUSTOM_ELEMENTS_SCHEMA, Input } from '@angular/core';
|
|
3
|
-
import { extend, getLocalState, injectBeforeRender, injectNgtRef, injectNgtStore, NgtKey, signalStore, } from 'angular-three';
|
|
4
|
-
import { BlurPass, MeshReflectorMaterial } from 'angular-three-soba/shaders';
|
|
5
|
-
import * as THREE from 'three';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
extend({ MeshReflectorMaterial });
|
|
8
|
-
export class NgtsMeshReflectorMaterial {
|
|
9
|
-
set _resolution(resolution) {
|
|
10
|
-
this.inputs.set({ resolution });
|
|
11
|
-
}
|
|
12
|
-
set _mixBlur(mixBlur) {
|
|
13
|
-
this.inputs.set({ mixBlur });
|
|
14
|
-
}
|
|
15
|
-
set _mixStrength(mixStrength) {
|
|
16
|
-
this.inputs.set({ mixStrength });
|
|
17
|
-
}
|
|
18
|
-
set _blur(blur) {
|
|
19
|
-
this.inputs.set({ blur });
|
|
20
|
-
}
|
|
21
|
-
set _mirror(mirror) {
|
|
22
|
-
this.inputs.set({ mirror });
|
|
23
|
-
}
|
|
24
|
-
set _minDepthThreshold(minDepthThreshold) {
|
|
25
|
-
this.inputs.set({ minDepthThreshold });
|
|
26
|
-
}
|
|
27
|
-
set _maxDepthThreshold(maxDepthThreshold) {
|
|
28
|
-
this.inputs.set({ maxDepthThreshold });
|
|
29
|
-
}
|
|
30
|
-
set _depthScale(depthScale) {
|
|
31
|
-
this.inputs.set({ depthScale });
|
|
32
|
-
}
|
|
33
|
-
set _depthToBlurRatioBias(depthToBlurRatioBias) {
|
|
34
|
-
this.inputs.set({ depthToBlurRatioBias });
|
|
35
|
-
}
|
|
36
|
-
set _distortionMap(distortionMap) {
|
|
37
|
-
this.inputs.set({ distortionMap });
|
|
38
|
-
}
|
|
39
|
-
set _distortion(distortion) {
|
|
40
|
-
this.inputs.set({ distortion });
|
|
41
|
-
}
|
|
42
|
-
set _mixContrast(mixContrast) {
|
|
43
|
-
this.inputs.set({ mixContrast });
|
|
44
|
-
}
|
|
45
|
-
set _reflectorOffset(reflectorOffset) {
|
|
46
|
-
this.inputs.set({ reflectorOffset });
|
|
47
|
-
}
|
|
48
|
-
constructor() {
|
|
49
|
-
this.inputs = signalStore({
|
|
50
|
-
mixBlur: 0,
|
|
51
|
-
mixStrength: 1,
|
|
52
|
-
resolution: 256,
|
|
53
|
-
blur: [0, 0],
|
|
54
|
-
minDepthThreshold: 0.9,
|
|
55
|
-
maxDepthThreshold: 1,
|
|
56
|
-
depthScale: 0,
|
|
57
|
-
depthToBlurRatioBias: 0.25,
|
|
58
|
-
mirror: 0,
|
|
59
|
-
distortion: 1,
|
|
60
|
-
mixContrast: 1,
|
|
61
|
-
reflectorOffset: 0,
|
|
62
|
-
});
|
|
63
|
-
this.materialRef = injectNgtRef();
|
|
64
|
-
this.reflectorProps = computed(() => this.states().reflectorProps);
|
|
65
|
-
this.defines = computed(() => this.reflectorProps().defines);
|
|
66
|
-
this.mirror = computed(() => this.reflectorProps().mirror);
|
|
67
|
-
this.textureMatrix = computed(() => this.reflectorProps().textureMatrix);
|
|
68
|
-
this.mixBlur = computed(() => this.reflectorProps().mixBlur);
|
|
69
|
-
this.tDiffuse = computed(() => this.reflectorProps().tDiffuse);
|
|
70
|
-
this.tDepth = computed(() => this.reflectorProps().tDepth);
|
|
71
|
-
this.tDiffuseBlur = computed(() => this.reflectorProps().tDiffuseBlur);
|
|
72
|
-
this.hasBlur = computed(() => this.reflectorProps().hasBlur);
|
|
73
|
-
this.mixStrength = computed(() => this.reflectorProps().mixStrength);
|
|
74
|
-
this.minDepthThreshold = computed(() => this.reflectorProps().minDepthThreshold);
|
|
75
|
-
this.maxDepthThreshold = computed(() => this.reflectorProps().maxDepthThreshold);
|
|
76
|
-
this.depthScale = computed(() => this.reflectorProps().depthScale);
|
|
77
|
-
this.depthToBlurRatioBias = computed(() => this.reflectorProps().depthToBlurRatioBias);
|
|
78
|
-
this.distortion = computed(() => this.reflectorProps().distortion);
|
|
79
|
-
this.distortionMap = computed(() => this.reflectorProps().distortionMap);
|
|
80
|
-
this.mixContrast = computed(() => this.reflectorProps().mixContrast);
|
|
81
|
-
this.store = injectNgtStore();
|
|
82
|
-
this.gl = this.store.select('gl');
|
|
83
|
-
this.reflectorPlane = new THREE.Plane();
|
|
84
|
-
this.normal = new THREE.Vector3();
|
|
85
|
-
this.reflectorWorldPosition = new THREE.Vector3();
|
|
86
|
-
this.cameraWorldPosition = new THREE.Vector3();
|
|
87
|
-
this.rotationMatrix = new THREE.Matrix4();
|
|
88
|
-
this.lookAtPosition = new THREE.Vector3(0, 0, -1);
|
|
89
|
-
this.clipPlane = new THREE.Vector4();
|
|
90
|
-
this.view = new THREE.Vector3();
|
|
91
|
-
this.target = new THREE.Vector3();
|
|
92
|
-
this.q = new THREE.Vector4();
|
|
93
|
-
this.virtualCamera = new THREE.PerspectiveCamera();
|
|
94
|
-
this._textureMatrix = new THREE.Matrix4();
|
|
95
|
-
this.__blur = this.inputs.select('blur');
|
|
96
|
-
this.__resolution = this.inputs.select('resolution');
|
|
97
|
-
this.__mirror = this.inputs.select('mirror');
|
|
98
|
-
this.__mixBlur = this.inputs.select('mixBlur');
|
|
99
|
-
this.__mixStrength = this.inputs.select('mixStrength');
|
|
100
|
-
this.__minDepthThreshold = this.inputs.select('minDepthThreshold');
|
|
101
|
-
this.__maxDepthThreshold = this.inputs.select('maxDepthThreshold');
|
|
102
|
-
this.__depthScale = this.inputs.select('depthScale');
|
|
103
|
-
this.__depthToBlurRatioBias = this.inputs.select('depthToBlurRatioBias');
|
|
104
|
-
this.__distortion = this.inputs.select('distortion');
|
|
105
|
-
this.__distortionMap = this.inputs.select('distortionMap');
|
|
106
|
-
this.__mixContrast = this.inputs.select('mixContrast');
|
|
107
|
-
this.normalizedBlur = computed(() => {
|
|
108
|
-
const blur = this.__blur();
|
|
109
|
-
return Array.isArray(blur) ? blur : [blur, blur];
|
|
110
|
-
});
|
|
111
|
-
this.__hasBlur = computed(() => {
|
|
112
|
-
const [x, y] = this.normalizedBlur();
|
|
113
|
-
return x + y > 0;
|
|
114
|
-
});
|
|
115
|
-
this.states = computed(() => {
|
|
116
|
-
const gl = this.gl();
|
|
117
|
-
const resolution = this.__resolution();
|
|
118
|
-
const blur = this.normalizedBlur();
|
|
119
|
-
const minDepthThreshold = this.__minDepthThreshold();
|
|
120
|
-
const maxDepthThreshold = this.__maxDepthThreshold();
|
|
121
|
-
const depthScale = this.__depthScale();
|
|
122
|
-
const depthToBlurRatioBias = this.__depthToBlurRatioBias();
|
|
123
|
-
const mirror = this.__mirror();
|
|
124
|
-
const mixBlur = this.__mixBlur();
|
|
125
|
-
const mixStrength = this.__mixStrength();
|
|
126
|
-
const mixContrast = this.__mixContrast();
|
|
127
|
-
const distortion = this.__distortion();
|
|
128
|
-
const distortionMap = this.__distortionMap();
|
|
129
|
-
const hasBlur = this.__hasBlur();
|
|
130
|
-
const parameters = {
|
|
131
|
-
minFilter: THREE.LinearFilter,
|
|
132
|
-
magFilter: THREE.LinearFilter,
|
|
133
|
-
type: THREE.HalfFloatType,
|
|
134
|
-
};
|
|
135
|
-
const fbo1 = new THREE.WebGLRenderTarget(resolution, resolution, parameters);
|
|
136
|
-
fbo1.depthBuffer = true;
|
|
137
|
-
fbo1.depthTexture = new THREE.DepthTexture(resolution, resolution);
|
|
138
|
-
fbo1.depthTexture.format = THREE.DepthFormat;
|
|
139
|
-
fbo1.depthTexture.type = THREE.UnsignedShortType;
|
|
140
|
-
const fbo2 = new THREE.WebGLRenderTarget(resolution, resolution, parameters);
|
|
141
|
-
const blurPass = new BlurPass({
|
|
142
|
-
gl,
|
|
143
|
-
resolution,
|
|
144
|
-
width: blur[0],
|
|
145
|
-
height: blur[1],
|
|
146
|
-
minDepthThreshold,
|
|
147
|
-
maxDepthThreshold,
|
|
148
|
-
depthScale,
|
|
149
|
-
depthToBlurRatioBias,
|
|
150
|
-
});
|
|
151
|
-
const reflectorProps = {
|
|
152
|
-
mirror,
|
|
153
|
-
textureMatrix: this._textureMatrix,
|
|
154
|
-
mixBlur,
|
|
155
|
-
tDiffuse: fbo1.texture,
|
|
156
|
-
tDepth: fbo1.depthTexture,
|
|
157
|
-
tDiffuseBlur: fbo2.texture,
|
|
158
|
-
hasBlur,
|
|
159
|
-
mixStrength,
|
|
160
|
-
minDepthThreshold,
|
|
161
|
-
maxDepthThreshold,
|
|
162
|
-
depthScale,
|
|
163
|
-
depthToBlurRatioBias,
|
|
164
|
-
distortion,
|
|
165
|
-
distortionMap,
|
|
166
|
-
mixContrast,
|
|
167
|
-
defines: {
|
|
168
|
-
USE_BLUR: hasBlur ? '' : undefined,
|
|
169
|
-
USE_DEPTH: depthScale > 0 ? '' : undefined,
|
|
170
|
-
USE_DISTORTION: distortionMap ? '' : undefined,
|
|
171
|
-
},
|
|
172
|
-
};
|
|
173
|
-
return { fbo1, fbo2, blurPass, reflectorProps };
|
|
174
|
-
});
|
|
175
|
-
injectBeforeRender(this.onBeforeRender.bind(this));
|
|
176
|
-
}
|
|
177
|
-
onBeforeRender(state) {
|
|
178
|
-
if (!this.materialRef.nativeElement)
|
|
179
|
-
return;
|
|
180
|
-
const parent = getLocalState(this.materialRef.nativeElement).parent?.();
|
|
181
|
-
if (!parent)
|
|
182
|
-
return;
|
|
183
|
-
const { gl, scene } = state;
|
|
184
|
-
const hasBlur = this.__hasBlur();
|
|
185
|
-
const { fbo1, fbo2, blurPass } = this.states();
|
|
186
|
-
if (fbo1 && fbo2 && blurPass) {
|
|
187
|
-
parent.visible = false;
|
|
188
|
-
const currentXrEnabled = gl.xr.enabled;
|
|
189
|
-
const currentShadowAutoUpdate = gl.shadowMap.autoUpdate;
|
|
190
|
-
this.beforeRender(state);
|
|
191
|
-
gl.xr.enabled = false;
|
|
192
|
-
gl.shadowMap.autoUpdate = false;
|
|
193
|
-
gl.setRenderTarget(fbo1);
|
|
194
|
-
gl.state.buffers.depth.setMask(true);
|
|
195
|
-
if (!gl.autoClear)
|
|
196
|
-
gl.clear();
|
|
197
|
-
gl.render(scene, this.virtualCamera);
|
|
198
|
-
if (hasBlur)
|
|
199
|
-
blurPass.render(gl, fbo1, fbo2);
|
|
200
|
-
gl.xr.enabled = currentXrEnabled;
|
|
201
|
-
gl.shadowMap.autoUpdate = currentShadowAutoUpdate;
|
|
202
|
-
parent.visible = true;
|
|
203
|
-
gl.setRenderTarget(null);
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
beforeRender(state) {
|
|
207
|
-
const parent = getLocalState(this.materialRef.nativeElement).parent?.();
|
|
208
|
-
if (!parent)
|
|
209
|
-
return;
|
|
210
|
-
const { camera } = state;
|
|
211
|
-
this.reflectorWorldPosition.setFromMatrixPosition(parent.matrixWorld);
|
|
212
|
-
this.cameraWorldPosition.setFromMatrixPosition(camera.matrixWorld);
|
|
213
|
-
this.rotationMatrix.extractRotation(parent.matrixWorld);
|
|
214
|
-
this.normal.set(0, 0, 1);
|
|
215
|
-
this.normal.applyMatrix4(this.rotationMatrix);
|
|
216
|
-
this.reflectorWorldPosition.addScaledVector(this.normal, this.inputs.get('reflectorOffset'));
|
|
217
|
-
this.view.subVectors(this.reflectorWorldPosition, this.cameraWorldPosition);
|
|
218
|
-
// Avoid rendering when reflector is facing away
|
|
219
|
-
if (this.view.dot(this.normal) > 0)
|
|
220
|
-
return;
|
|
221
|
-
this.view.reflect(this.normal).negate();
|
|
222
|
-
this.view.add(this.reflectorWorldPosition);
|
|
223
|
-
this.rotationMatrix.extractRotation(camera.matrixWorld);
|
|
224
|
-
this.lookAtPosition.set(0, 0, -1);
|
|
225
|
-
this.lookAtPosition.applyMatrix4(this.rotationMatrix);
|
|
226
|
-
this.lookAtPosition.add(this.cameraWorldPosition);
|
|
227
|
-
this.target.subVectors(this.reflectorWorldPosition, this.lookAtPosition);
|
|
228
|
-
this.target.reflect(this.normal).negate();
|
|
229
|
-
this.target.add(this.reflectorWorldPosition);
|
|
230
|
-
this.virtualCamera.position.copy(this.view);
|
|
231
|
-
this.virtualCamera.up.set(0, 1, 0);
|
|
232
|
-
this.virtualCamera.up.applyMatrix4(this.rotationMatrix);
|
|
233
|
-
this.virtualCamera.up.reflect(this.normal);
|
|
234
|
-
this.virtualCamera.lookAt(this.target);
|
|
235
|
-
this.virtualCamera.far = camera.far; // Used in WebGLBackground
|
|
236
|
-
this.virtualCamera.updateMatrixWorld();
|
|
237
|
-
this.virtualCamera.projectionMatrix.copy(camera.projectionMatrix);
|
|
238
|
-
// Update the texture matrix
|
|
239
|
-
this._textureMatrix.set(0.5, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0, 0.5, 0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.0, 1.0);
|
|
240
|
-
this._textureMatrix.multiply(this.virtualCamera.projectionMatrix);
|
|
241
|
-
this._textureMatrix.multiply(this.virtualCamera.matrixWorldInverse);
|
|
242
|
-
this._textureMatrix.multiply(parent.matrixWorld);
|
|
243
|
-
// Now update projection matrix with new clip plane, implementing code from: http://www.terathon.com/code/oblique.html
|
|
244
|
-
// Paper explaining this technique: http://www.terathon.com/lengyel/Lengyel-Oblique.pdf
|
|
245
|
-
this.reflectorPlane.setFromNormalAndCoplanarPoint(this.normal, this.reflectorWorldPosition);
|
|
246
|
-
this.reflectorPlane.applyMatrix4(this.virtualCamera.matrixWorldInverse);
|
|
247
|
-
this.clipPlane.set(this.reflectorPlane.normal.x, this.reflectorPlane.normal.y, this.reflectorPlane.normal.z, this.reflectorPlane.constant);
|
|
248
|
-
const projectionMatrix = this.virtualCamera.projectionMatrix;
|
|
249
|
-
this.q.x = (Math.sign(this.clipPlane.x) + projectionMatrix.elements[8]) / projectionMatrix.elements[0];
|
|
250
|
-
this.q.y = (Math.sign(this.clipPlane.y) + projectionMatrix.elements[9]) / projectionMatrix.elements[5];
|
|
251
|
-
this.q.z = -1.0;
|
|
252
|
-
this.q.w = (1.0 + projectionMatrix.elements[10]) / projectionMatrix.elements[14];
|
|
253
|
-
// Calculate the scaled plane vector
|
|
254
|
-
this.clipPlane.multiplyScalar(2.0 / this.clipPlane.dot(this.q));
|
|
255
|
-
// Replacing the third row of the projection matrix
|
|
256
|
-
projectionMatrix.elements[2] = this.clipPlane.x;
|
|
257
|
-
projectionMatrix.elements[6] = this.clipPlane.y;
|
|
258
|
-
projectionMatrix.elements[10] = this.clipPlane.z + 1.0;
|
|
259
|
-
projectionMatrix.elements[14] = this.clipPlane.w;
|
|
260
|
-
}
|
|
261
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NgtsMeshReflectorMaterial, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
262
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: NgtsMeshReflectorMaterial, isStandalone: true, selector: "ngts-mesh-reflector-material", inputs: { materialRef: "materialRef", _resolution: ["resolution", "_resolution"], _mixBlur: ["mixBlur", "_mixBlur"], _mixStrength: ["mixStrength", "_mixStrength"], _blur: ["blur", "_blur"], _mirror: ["mirror", "_mirror"], _minDepthThreshold: ["minDepthThreshold", "_minDepthThreshold"], _maxDepthThreshold: ["maxDepthThreshold", "_maxDepthThreshold"], _depthScale: ["depthScale", "_depthScale"], _depthToBlurRatioBias: ["depthToBlurRatioBias", "_depthToBlurRatioBias"], _distortionMap: ["distortionMap", "_distortionMap"], _distortion: ["distortion", "_distortion"], _mixContrast: ["mixContrast", "_mixContrast"], _reflectorOffset: ["reflectorOffset", "_reflectorOffset"] }, ngImport: i0, template: `
|
|
263
|
-
<ngt-mesh-reflector-material
|
|
264
|
-
*ngIf="defines() as defines"
|
|
265
|
-
[key]="defines"
|
|
266
|
-
ngtCompound
|
|
267
|
-
attach="material"
|
|
268
|
-
[ref]="materialRef"
|
|
269
|
-
[defines]="defines"
|
|
270
|
-
[mirror]="mirror()"
|
|
271
|
-
[textureMatrix]="textureMatrix()"
|
|
272
|
-
[mixBlur]="mixBlur()"
|
|
273
|
-
[tDiffuse]="tDiffuse()"
|
|
274
|
-
[tDepth]="tDepth()"
|
|
275
|
-
[tDiffuseBlur]="tDiffuseBlur()"
|
|
276
|
-
[hasBlur]="hasBlur()"
|
|
277
|
-
[mixStrength]="mixStrength()"
|
|
278
|
-
[minDepthThreshold]="minDepthThreshold()"
|
|
279
|
-
[maxDepthThreshold]="maxDepthThreshold()"
|
|
280
|
-
[depthScale]="depthScale()"
|
|
281
|
-
[depthToBlurRatioBias]="depthToBlurRatioBias()"
|
|
282
|
-
[distortion]="distortion()"
|
|
283
|
-
[distortionMap]="distortionMap()"
|
|
284
|
-
[mixContrast]="mixContrast()"
|
|
285
|
-
>
|
|
286
|
-
<ng-content />
|
|
287
|
-
</ngt-mesh-reflector-material>
|
|
288
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
|
|
289
|
-
}
|
|
290
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NgtsMeshReflectorMaterial, decorators: [{
|
|
291
|
-
type: Component,
|
|
292
|
-
args: [{
|
|
293
|
-
selector: 'ngts-mesh-reflector-material',
|
|
294
|
-
standalone: true,
|
|
295
|
-
template: `
|
|
296
|
-
<ngt-mesh-reflector-material
|
|
297
|
-
*ngIf="defines() as defines"
|
|
298
|
-
[key]="defines"
|
|
299
|
-
ngtCompound
|
|
300
|
-
attach="material"
|
|
301
|
-
[ref]="materialRef"
|
|
302
|
-
[defines]="defines"
|
|
303
|
-
[mirror]="mirror()"
|
|
304
|
-
[textureMatrix]="textureMatrix()"
|
|
305
|
-
[mixBlur]="mixBlur()"
|
|
306
|
-
[tDiffuse]="tDiffuse()"
|
|
307
|
-
[tDepth]="tDepth()"
|
|
308
|
-
[tDiffuseBlur]="tDiffuseBlur()"
|
|
309
|
-
[hasBlur]="hasBlur()"
|
|
310
|
-
[mixStrength]="mixStrength()"
|
|
311
|
-
[minDepthThreshold]="minDepthThreshold()"
|
|
312
|
-
[maxDepthThreshold]="maxDepthThreshold()"
|
|
313
|
-
[depthScale]="depthScale()"
|
|
314
|
-
[depthToBlurRatioBias]="depthToBlurRatioBias()"
|
|
315
|
-
[distortion]="distortion()"
|
|
316
|
-
[distortionMap]="distortionMap()"
|
|
317
|
-
[mixContrast]="mixContrast()"
|
|
318
|
-
>
|
|
319
|
-
<ng-content />
|
|
320
|
-
</ngt-mesh-reflector-material>
|
|
321
|
-
`,
|
|
322
|
-
imports: [NgIf, NgtKey],
|
|
323
|
-
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
324
|
-
}]
|
|
325
|
-
}], ctorParameters: function () { return []; }, propDecorators: { materialRef: [{
|
|
326
|
-
type: Input
|
|
327
|
-
}], _resolution: [{
|
|
328
|
-
type: Input,
|
|
329
|
-
args: [{ alias: 'resolution' }]
|
|
330
|
-
}], _mixBlur: [{
|
|
331
|
-
type: Input,
|
|
332
|
-
args: [{ alias: 'mixBlur' }]
|
|
333
|
-
}], _mixStrength: [{
|
|
334
|
-
type: Input,
|
|
335
|
-
args: [{ alias: 'mixStrength' }]
|
|
336
|
-
}], _blur: [{
|
|
337
|
-
type: Input,
|
|
338
|
-
args: [{ alias: 'blur' }]
|
|
339
|
-
}], _mirror: [{
|
|
340
|
-
type: Input,
|
|
341
|
-
args: [{ alias: 'mirror' }]
|
|
342
|
-
}], _minDepthThreshold: [{
|
|
343
|
-
type: Input,
|
|
344
|
-
args: [{ alias: 'minDepthThreshold' }]
|
|
345
|
-
}], _maxDepthThreshold: [{
|
|
346
|
-
type: Input,
|
|
347
|
-
args: [{ alias: 'maxDepthThreshold' }]
|
|
348
|
-
}], _depthScale: [{
|
|
349
|
-
type: Input,
|
|
350
|
-
args: [{ alias: 'depthScale' }]
|
|
351
|
-
}], _depthToBlurRatioBias: [{
|
|
352
|
-
type: Input,
|
|
353
|
-
args: [{ alias: 'depthToBlurRatioBias' }]
|
|
354
|
-
}], _distortionMap: [{
|
|
355
|
-
type: Input,
|
|
356
|
-
args: [{ alias: 'distortionMap' }]
|
|
357
|
-
}], _distortion: [{
|
|
358
|
-
type: Input,
|
|
359
|
-
args: [{ alias: 'distortion' }]
|
|
360
|
-
}], _mixContrast: [{
|
|
361
|
-
type: Input,
|
|
362
|
-
args: [{ alias: 'mixContrast' }]
|
|
363
|
-
}], _reflectorOffset: [{
|
|
364
|
-
type: Input,
|
|
365
|
-
args: [{ alias: 'reflectorOffset' }]
|
|
366
|
-
}] } });
|
|
367
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaC1yZWZsZWN0b3ItbWF0ZXJpYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvbWF0ZXJpYWxzL3NyYy9tZXNoLXJlZmxlY3Rvci1tYXRlcmlhbC9tZXNoLXJlZmxlY3Rvci1tYXRlcmlhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25GLE9BQU8sRUFDTixNQUFNLEVBQ04sYUFBYSxFQUNiLGtCQUFrQixFQUNsQixZQUFZLEVBQ1osY0FBYyxFQUNkLE1BQU0sRUFHTixXQUFXLEdBQ1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdFLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDOztBQUUvQixNQUFNLENBQUMsRUFBRSxxQkFBcUIsRUFBRSxDQUFDLENBQUM7QUE0RGxDLE1BQU0sT0FBTyx5QkFBeUI7SUFrQnJDLElBQW9DLFdBQVcsQ0FBQyxVQUFrQjtRQUNqRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELElBQWlDLFFBQVEsQ0FBQyxPQUFlO1FBQ3hELElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBcUMsWUFBWSxDQUFDLFdBQW1CO1FBQ3BFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsSUFBOEIsS0FBSyxDQUFDLElBQStCO1FB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aUIsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG5cdGV4dGVuZCxcblx0Z2V0TG9jYWxTdGF0ZSxcblx0aW5qZWN0QmVmb3JlUmVuZGVyLFxuXHRpbmplY3ROZ3RSZWYsXG5cdGluamVjdE5ndFN0b3JlLFxuXHROZ3RLZXksXG5cdE5ndE1lc2hTdGFuZGFyZE1hdGVyaWFsLFxuXHROZ3RSZW5kZXJTdGF0ZSxcblx0c2lnbmFsU3RvcmUsXG59IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgQmx1clBhc3MsIE1lc2hSZWZsZWN0b3JNYXRlcmlhbCB9IGZyb20gJ2FuZ3VsYXItdGhyZWUtc29iYS9zaGFkZXJzJztcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcblxuZXh0ZW5kKHsgTWVzaFJlZmxlY3Rvck1hdGVyaWFsIH0pO1xuXG5leHBvcnQgdHlwZSBOZ3RzTWVzaFJlZmxlY3Rvck1hdGVyaWFsU3RhdGUgPSB7XG5cdHJlc29sdXRpb246IG51bWJlcjtcblx0bWl4Qmx1cjogbnVtYmVyO1xuXHRtaXhTdHJlbmd0aDogbnVtYmVyO1xuXHRibHVyOiBbbnVtYmVyLCBudW1iZXJdIHwgbnVtYmVyO1xuXHRtaXJyb3I6IG51bWJlcjtcblx0bWluRGVwdGhUaHJlc2hvbGQ6IG51bWJlcjtcblx0bWF4RGVwdGhUaHJlc2hvbGQ6IG51bWJlcjtcblx0ZGVwdGhTY2FsZTogbnVtYmVyO1xuXHRkZXB0aFRvQmx1clJhdGlvQmlhczogbnVtYmVyO1xuXHRkaXN0b3J0aW9uTWFwPzogVEhSRUUuVGV4dHVyZTtcblx0ZGlzdG9ydGlvbjogbnVtYmVyO1xuXHRtaXhDb250cmFzdDogbnVtYmVyO1xuXHRyZWZsZWN0b3JPZmZzZXQ6IG51bWJlcjtcbn07XG5cbmRlY2xhcmUgZ2xvYmFsIHtcblx0aW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG5cdFx0LyoqXG5cdFx0ICogQGV4dGVuZHMgbmd0LW1lc2gtc3RhbmRhcmQtbWF0ZXJpYWxcblx0XHQgKi9cblx0XHQnbmd0cy1tZXNoLXJlZmxlY3Rvci1tYXRlcmlhbCc6IE5ndHNNZXNoUmVmbGVjdG9yTWF0ZXJpYWxTdGF0ZSAmIE5ndE1lc2hTdGFuZGFyZE1hdGVyaWFsO1xuXHR9XG59XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHMtbWVzaC1yZWZsZWN0b3ItbWF0ZXJpYWwnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZ3QtbWVzaC1yZWZsZWN0b3ItbWF0ZXJpYWxcblx0XHRcdCpuZ0lmPVwiZGVmaW5lcygpIGFzIGRlZmluZXNcIlxuXHRcdFx0W2tleV09XCJkZWZpbmVzXCJcblx0XHRcdG5ndENvbXBvdW5kXG5cdFx0XHRhdHRhY2g9XCJtYXRlcmlhbFwiXG5cdFx0XHRbcmVmXT1cIm1hdGVyaWFsUmVmXCJcblx0XHRcdFtkZWZpbmVzXT1cImRlZmluZXNcIlxuXHRcdFx0W21pcnJvcl09XCJtaXJyb3IoKVwiXG5cdFx0XHRbdGV4dHVyZU1hdHJpeF09XCJ0ZXh0dXJlTWF0cml4KClcIlxuXHRcdFx0W21peEJsdXJdPVwibWl4Qmx1cigpXCJcblx0XHRcdFt0RGlmZnVzZV09XCJ0RGlmZnVzZSgpXCJcblx0XHRcdFt0RGVwdGhdPVwidERlcHRoKClcIlxuXHRcdFx0W3REaWZmdXNlQmx1cl09XCJ0RGlmZnVzZUJsdXIoKVwiXG5cdFx0XHRbaGFzQmx1cl09XCJoYXNCbHVyKClcIlxuXHRcdFx0W21peFN0cmVuZ3RoXT1cIm1peFN0cmVuZ3RoKClcIlxuXHRcdFx0W21pbkRlcHRoVGhyZXNob2xkXT1cIm1pbkRlcHRoVGhyZXNob2xkKClcIlxuXHRcdFx0W21heERlcHRoVGhyZXNob2xkXT1cIm1heERlcHRoVGhyZXNob2xkKClcIlxuXHRcdFx0W2RlcHRoU2NhbGVdPVwiZGVwdGhTY2FsZSgpXCJcblx0XHRcdFtkZXB0aFRvQmx1clJhdGlvQmlhc109XCJkZXB0aFRvQmx1clJhdGlvQmlhcygpXCJcblx0XHRcdFtkaXN0b3J0aW9uXT1cImRpc3RvcnRpb24oKVwiXG5cdFx0XHRbZGlzdG9ydGlvbk1hcF09XCJkaXN0b3J0aW9uTWFwKClcIlxuXHRcdFx0W21peENvbnRyYXN0XT1cIm1peENvbnRyYXN0KClcIlxuXHRcdD5cblx0XHRcdDxuZy1jb250ZW50IC8+XG5cdFx0PC9uZ3QtbWVzaC1yZWZsZWN0b3ItbWF0ZXJpYWw+XG5cdGAsXG5cdGltcG9ydHM6IFtOZ0lmLCBOZ3RLZXldLFxuXHRzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNNZXNoUmVmbGVjdG9yTWF0ZXJpYWwge1xuXHRwcml2YXRlIGlucHV0cyA9IHNpZ25hbFN0b3JlPE5ndHNNZXNoUmVmbGVjdG9yTWF0ZXJpYWxTdGF0ZT4oe1xuXHRcdG1peEJsdXI6IDAsXG5cdFx0bWl4U3RyZW5ndGg6IDEsXG5cdFx0cmVzb2x1dGlvbjogMjU2LFxuXHRcdGJsdXI6IFswLCAwXSxcblx0XHRtaW5EZXB0aFRocmVzaG9sZDogMC45LFxuXHRcdG1heERlcHRoVGhyZXNob2xkOiAxLFxuXHRcdGRlcHRoU2NhbGU6IDAsXG5cdFx0ZGVwdGhUb0JsdXJSYXRpb0JpYXM6IDAuMjUsXG5cdFx0bWlycm9yOiAwLFxuXHRcdGRpc3RvcnRpb246IDEsXG5cdFx0bWl4Q29udHJhc3Q6IDEsXG5cdFx0cmVmbGVjdG9yT2Zmc2V0OiAwLFxuXHR9KTtcblxuXHRASW5wdXQoKSBtYXRlcmlhbFJlZiA9IGluamVjdE5ndFJlZjxNZXNoUmVmbGVjdG9yTWF0ZXJpYWw+KCk7XG5cblx0QElucHV0KHsgYWxpYXM6ICdyZXNvbHV0aW9uJyB9KSBzZXQgX3Jlc29sdXRpb24ocmVzb2x1dGlvbjogbnVtYmVyKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgcmVzb2x1dGlvbiB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnbWl4Qmx1cicgfSkgc2V0IF9taXhCbHVyKG1peEJsdXI6IG51bWJlcikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IG1peEJsdXIgfSk7XG5cdH1cblxuXHRASW5wdXQoeyBhbGlhczogJ21peFN0cmVuZ3RoJyB9KSBzZXQgX21peFN0cmVuZ3RoKG1peFN0cmVuZ3RoOiBudW1iZXIpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBtaXhTdHJlbmd0aCB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnYmx1cicgfSkgc2V0IF9ibHVyKGJsdXI6IFtudW1iZXIsIG51bWJlcl0gfCBudW1iZXIpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBibHVyIH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICdtaXJyb3InIH0pIHNldCBfbWlycm9yKG1pcnJvcjogbnVtYmVyKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgbWlycm9yIH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICdtaW5EZXB0aFRocmVzaG9sZCcgfSkgc2V0IF9taW5EZXB0aFRocmVzaG9sZChtaW5EZXB0aFRocmVzaG9sZDogbnVtYmVyKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgbWluRGVwdGhUaHJlc2hvbGQgfSk7XG5cdH1cblxuXHRASW5wdXQoeyBhbGlhczogJ21heERlcHRoVGhyZXNob2xkJyB9KSBzZXQgX21heERlcHRoVGhyZXNob2xkKG1heERlcHRoVGhyZXNob2xkOiBudW1iZXIpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBtYXhEZXB0aFRocmVzaG9sZCB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnZGVwdGhTY2FsZScgfSkgc2V0IF9kZXB0aFNjYWxlKGRlcHRoU2NhbGU6IG51bWJlcikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IGRlcHRoU2NhbGUgfSk7XG5cdH1cblxuXHRASW5wdXQoeyBhbGlhczogJ2RlcHRoVG9CbHVyUmF0aW9CaWFzJyB9KSBzZXQgX2RlcHRoVG9CbHVyUmF0aW9CaWFzKGRlcHRoVG9CbHVyUmF0aW9CaWFzOiBudW1iZXIpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBkZXB0aFRvQmx1clJhdGlvQmlhcyB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnZGlzdG9ydGlvbk1hcCcgfSkgc2V0IF9kaXN0b3J0aW9uTWFwKGRpc3RvcnRpb25NYXA6IFRIUkVFLlRleHR1cmUpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBkaXN0b3J0aW9uTWFwIH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICdkaXN0b3J0aW9uJyB9KSBzZXQgX2Rpc3RvcnRpb24oZGlzdG9ydGlvbjogbnVtYmVyKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgZGlzdG9ydGlvbiB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnbWl4Q29udHJhc3QnIH0pIHNldCBfbWl4Q29udHJhc3QobWl4Q29udHJhc3Q6IG51bWJlcikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IG1peENvbnRyYXN0IH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICdyZWZsZWN0b3JPZmZzZXQnIH0pIHNldCBfcmVmbGVjdG9yT2Zmc2V0KHJlZmxlY3Rvck9mZnNldDogbnVtYmVyKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgcmVmbGVjdG9yT2Zmc2V0IH0pO1xuXHR9XG5cblx0cHJpdmF0ZSByZWZsZWN0b3JQcm9wcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc3RhdGVzKCkucmVmbGVjdG9yUHJvcHMpO1xuXHRkZWZpbmVzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5yZWZsZWN0b3JQcm9wcygpLmRlZmluZXMpO1xuXHRtaXJyb3IgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJlZmxlY3RvclByb3BzKCkubWlycm9yKTtcblx0dGV4dHVyZU1hdHJpeCA9IGNvbXB1dGVkKCgpID0+IHRoaXMucmVmbGVjdG9yUHJvcHMoKS50ZXh0dXJlTWF0cml4KTtcblx0bWl4Qmx1ciA9IGNvbXB1dGVkKCgpID0+IHRoaXMucmVmbGVjdG9yUHJvcHMoKS5taXhCbHVyKTtcblx0dERpZmZ1c2UgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJlZmxlY3RvclByb3BzKCkudERpZmZ1c2UpO1xuXHR0RGVwdGggPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJlZmxlY3RvclByb3BzKCkudERlcHRoKTtcblx0dERpZmZ1c2VCbHVyID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5yZWZsZWN0b3JQcm9wcygpLnREaWZmdXNlQmx1cik7XG5cdGhhc0JsdXIgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJlZmxlY3RvclByb3BzKCkuaGFzQmx1cik7XG5cdG1peFN0cmVuZ3RoID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5yZWZsZWN0b3JQcm9wcygpLm1peFN0cmVuZ3RoKTtcblx0bWluRGVwdGhUaHJlc2hvbGQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJlZmxlY3RvclByb3BzKCkubWluRGVwdGhUaHJlc2hvbGQpO1xuXHRtYXhEZXB0aFRocmVzaG9sZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMucmVmbGVjdG9yUHJvcHMoKS5tYXhEZXB0aFRocmVzaG9sZCk7XG5cdGRlcHRoU2NhbGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJlZmxlY3RvclByb3BzKCkuZGVwdGhTY2FsZSk7XG5cdGRlcHRoVG9CbHVyUmF0aW9CaWFzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5yZWZsZWN0b3JQcm9wcygpLmRlcHRoVG9CbHVyUmF0aW9CaWFzKTtcblx0ZGlzdG9ydGlvbiA9IGNvbXB1dGVkKCgpID0+IHRoaXMucmVmbGVjdG9yUHJvcHMoKS5kaXN0b3J0aW9uKTtcblx0ZGlzdG9ydGlvbk1hcCA9IGNvbXB1dGVkKCgpID0+IHRoaXMucmVmbGVjdG9yUHJvcHMoKS5kaXN0b3J0aW9uTWFwKTtcblx0bWl4Q29udHJhc3QgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJlZmxlY3RvclByb3BzKCkubWl4Q29udHJhc3QpO1xuXG5cdHByaXZhdGUgc3RvcmUgPSBpbmplY3ROZ3RTdG9yZSgpO1xuXHRwcml2YXRlIGdsID0gdGhpcy5zdG9yZS5zZWxlY3QoJ2dsJyk7XG5cblx0cHJpdmF0ZSByZWZsZWN0b3JQbGFuZSA9IG5ldyBUSFJFRS5QbGFuZSgpO1xuXHRwcml2YXRlIG5vcm1hbCA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XG5cdHByaXZhdGUgcmVmbGVjdG9yV29ybGRQb3NpdGlvbiA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XG5cdHByaXZhdGUgY2FtZXJhV29ybGRQb3NpdGlvbiA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XG5cdHByaXZhdGUgcm90YXRpb25NYXRyaXggPSBuZXcgVEhSRUUuTWF0cml4NCgpO1xuXHRwcml2YXRlIGxvb2tBdFBvc2l0aW9uID0gbmV3IFRIUkVFLlZlY3RvcjMoMCwgMCwgLTEpO1xuXHRwcml2YXRlIGNsaXBQbGFuZSA9IG5ldyBUSFJFRS5WZWN0b3I0KCk7XG5cdHByaXZhdGUgdmlldyA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XG5cdHByaXZhdGUgdGFyZ2V0ID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcblx0cHJpdmF0ZSBxID0gbmV3IFRIUkVFLlZlY3RvcjQoKTtcblx0cHJpdmF0ZSB2aXJ0dWFsQ2FtZXJhID0gbmV3IFRIUkVFLlBlcnNwZWN0aXZlQ2FtZXJhKCk7XG5cdHByaXZhdGUgX3RleHR1cmVNYXRyaXggPSBuZXcgVEhSRUUuTWF0cml4NCgpO1xuXG5cdHByaXZhdGUgX19ibHVyID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdibHVyJyk7XG5cdHByaXZhdGUgX19yZXNvbHV0aW9uID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdyZXNvbHV0aW9uJyk7XG5cdHByaXZhdGUgX19taXJyb3IgPSB0aGlzLmlucHV0cy5zZWxlY3QoJ21pcnJvcicpO1xuXHRwcml2YXRlIF9fbWl4Qmx1ciA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnbWl4Qmx1cicpO1xuXHRwcml2YXRlIF9fbWl4U3RyZW5ndGggPSB0aGlzLmlucHV0cy5zZWxlY3QoJ21peFN0cmVuZ3RoJyk7XG5cdHByaXZhdGUgX19taW5EZXB0aFRocmVzaG9sZCA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnbWluRGVwdGhUaHJlc2hvbGQnKTtcblx0cHJpdmF0ZSBfX21heERlcHRoVGhyZXNob2xkID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdtYXhEZXB0aFRocmVzaG9sZCcpO1xuXHRwcml2YXRlIF9fZGVwdGhTY2FsZSA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnZGVwdGhTY2FsZScpO1xuXHRwcml2YXRlIF9fZGVwdGhUb0JsdXJSYXRpb0JpYXMgPSB0aGlzLmlucHV0cy5zZWxlY3QoJ2RlcHRoVG9CbHVyUmF0aW9CaWFzJyk7XG5cdHByaXZhdGUgX19kaXN0b3J0aW9uID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdkaXN0b3J0aW9uJyk7XG5cdHByaXZhdGUgX19kaXN0b3J0aW9uTWFwID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdkaXN0b3J0aW9uTWFwJyk7XG5cdHByaXZhdGUgX19taXhDb250cmFzdCA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnbWl4Q29udHJhc3QnKTtcblxuXHRwcml2YXRlIG5vcm1hbGl6ZWRCbHVyID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IGJsdXIgPSB0aGlzLl9fYmx1cigpO1xuXHRcdHJldHVybiBBcnJheS5pc0FycmF5KGJsdXIpID8gYmx1ciA6IFtibHVyLCBibHVyXTtcblx0fSk7XG5cblx0cHJpdmF0ZSBfX2hhc0JsdXIgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3QgW3gsIHldID0gdGhpcy5ub3JtYWxpemVkQmx1cigpO1xuXHRcdHJldHVybiB4ICsgeSA+IDA7XG5cdH0pO1xuXG5cdHByaXZhdGUgc3RhdGVzID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IGdsID0gdGhpcy5nbCgpO1xuXHRcdGNvbnN0IHJlc29sdXRpb24gPSB0aGlzLl9fcmVzb2x1dGlvbigpO1xuXHRcdGNvbnN0IGJsdXIgPSB0aGlzLm5vcm1hbGl6ZWRCbHVyKCk7XG5cdFx0Y29uc3QgbWluRGVwdGhUaHJlc2hvbGQgPSB0aGlzLl9fbWluRGVwdGhUaHJlc2hvbGQoKTtcblx0XHRjb25zdCBtYXhEZXB0aFRocmVzaG9sZCA9IHRoaXMuX19tYXhEZXB0aFRocmVzaG9sZCgpO1xuXHRcdGNvbnN0IGRlcHRoU2NhbGUgPSB0aGlzLl9fZGVwdGhTY2FsZSgpO1xuXHRcdGNvbnN0IGRlcHRoVG9CbHVyUmF0aW9CaWFzID0gdGhpcy5fX2RlcHRoVG9CbHVyUmF0aW9CaWFzKCk7XG5cdFx0Y29uc3QgbWlycm9yID0gdGhpcy5fX21pcnJvcigpO1xuXHRcdGNvbnN0IG1peEJsdXIgPSB0aGlzLl9fbWl4Qmx1cigpO1xuXHRcdGNvbnN0IG1peFN0cmVuZ3RoID0gdGhpcy5fX21peFN0cmVuZ3RoKCk7XG5cdFx0Y29uc3QgbWl4Q29udHJhc3QgPSB0aGlzLl9fbWl4Q29udHJhc3QoKTtcblx0XHRjb25zdCBkaXN0b3J0aW9uID0gdGhpcy5fX2Rpc3RvcnRpb24oKTtcblx0XHRjb25zdCBkaXN0b3J0aW9uTWFwID0gdGhpcy5fX2Rpc3RvcnRpb25NYXAoKTtcblx0XHRjb25zdCBoYXNCbHVyID0gdGhpcy5fX2hhc0JsdXIoKTtcblxuXHRcdGNvbnN0IHBhcmFtZXRlcnMgPSB7XG5cdFx0XHRtaW5GaWx0ZXI6IFRIUkVFLkxpbmVhckZpbHRlcixcblx0XHRcdG1hZ0ZpbHRlcjogVEhSRUUuTGluZWFyRmlsdGVyLFxuXHRcdFx0dHlwZTogVEhSRUUuSGFsZkZsb2F0VHlwZSxcblx0XHR9O1xuXHRcdGNvbnN0IGZibzEgPSBuZXcgVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQocmVzb2x1dGlvbiwgcmVzb2x1dGlvbiwgcGFyYW1ldGVycyk7XG5cdFx0ZmJvMS5kZXB0aEJ1ZmZlciA9IHRydWU7XG5cdFx0ZmJvMS5kZXB0aFRleHR1cmUgPSBuZXcgVEhSRUUuRGVwdGhUZXh0dXJlKHJlc29sdXRpb24sIHJlc29sdXRpb24pO1xuXHRcdGZibzEuZGVwdGhUZXh0dXJlLmZvcm1hdCA9IFRIUkVFLkRlcHRoRm9ybWF0O1xuXHRcdGZibzEuZGVwdGhUZXh0dXJlLnR5cGUgPSBUSFJFRS5VbnNpZ25lZFNob3J0VHlwZTtcblxuXHRcdGNvbnN0IGZibzIgPSBuZXcgVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQocmVzb2x1dGlvbiwgcmVzb2x1dGlvbiwgcGFyYW1ldGVycyk7XG5cdFx0Y29uc3QgYmx1clBhc3MgPSBuZXcgQmx1clBhc3Moe1xuXHRcdFx0Z2wsXG5cdFx0XHRyZXNvbHV0aW9uLFxuXHRcdFx0d2lkdGg6IGJsdXJbMF0sXG5cdFx0XHRoZWlnaHQ6IGJsdXJbMV0sXG5cdFx0XHRtaW5EZXB0aFRocmVzaG9sZCxcblx0XHRcdG1heERlcHRoVGhyZXNob2xkLFxuXHRcdFx0ZGVwdGhTY2FsZSxcblx0XHRcdGRlcHRoVG9CbHVyUmF0aW9CaWFzLFxuXHRcdH0pO1xuXHRcdGNvbnN0IHJlZmxlY3RvclByb3BzID0ge1xuXHRcdFx0bWlycm9yLFxuXHRcdFx0dGV4dHVyZU1hdHJpeDogdGhpcy5fdGV4dHVyZU1hdHJpeCxcblx0XHRcdG1peEJsdXIsXG5cdFx0XHR0RGlmZnVzZTogZmJvMS50ZXh0dXJlLFxuXHRcdFx0dERlcHRoOiBmYm8xLmRlcHRoVGV4dHVyZSxcblx0XHRcdHREaWZmdXNlQmx1cjogZmJvMi50ZXh0dXJlLFxuXHRcdFx0aGFzQmx1cixcblx0XHRcdG1peFN0cmVuZ3RoLFxuXHRcdFx0bWluRGVwdGhUaHJlc2hvbGQsXG5cdFx0XHRtYXhEZXB0aFRocmVzaG9sZCxcblx0XHRcdGRlcHRoU2NhbGUsXG5cdFx0XHRkZXB0aFRvQmx1clJhdGlvQmlhcyxcblx0XHRcdGRpc3RvcnRpb24sXG5cdFx0XHRkaXN0b3J0aW9uTWFwLFxuXHRcdFx0bWl4Q29udHJhc3QsXG5cdFx0XHRkZWZpbmVzOiB7XG5cdFx0XHRcdFVTRV9CTFVSOiBoYXNCbHVyID8gJycgOiB1bmRlZmluZWQsXG5cdFx0XHRcdFVTRV9ERVBUSDogZGVwdGhTY2FsZSA+IDAgPyAnJyA6IHVuZGVmaW5lZCxcblx0XHRcdFx0VVNFX0RJU1RPUlRJT046IGRpc3RvcnRpb25NYXAgPyAnJyA6IHVuZGVmaW5lZCxcblx0XHRcdH0sXG5cdFx0fTtcblxuXHRcdHJldHVybiB7IGZibzEsIGZibzIsIGJsdXJQYXNzLCByZWZsZWN0b3JQcm9wcyB9O1xuXHR9KTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRpbmplY3RCZWZvcmVSZW5kZXIodGhpcy5vbkJlZm9yZVJlbmRlci5iaW5kKHRoaXMpKTtcblx0fVxuXG5cdHByaXZhdGUgb25CZWZvcmVSZW5kZXIoc3RhdGU6IE5ndFJlbmRlclN0YXRlKSB7XG5cdFx0aWYgKCF0aGlzLm1hdGVyaWFsUmVmLm5hdGl2ZUVsZW1lbnQpIHJldHVybjtcblx0XHRjb25zdCBwYXJlbnQgPSBnZXRMb2NhbFN0YXRlKHRoaXMubWF0ZXJpYWxSZWYubmF0aXZlRWxlbWVudCkucGFyZW50Py4oKTtcblx0XHRpZiAoIXBhcmVudCkgcmV0dXJuO1xuXG5cdFx0Y29uc3QgeyBnbCwgc2NlbmUgfSA9IHN0YXRlO1xuXHRcdGNvbnN0IGhhc0JsdXIgPSB0aGlzLl9faGFzQmx1cigpO1xuXHRcdGNvbnN0IHsgZmJvMSwgZmJvMiwgYmx1clBhc3MgfSA9IHRoaXMuc3RhdGVzKCk7XG5cblx0XHRpZiAoZmJvMSAmJiBmYm8yICYmIGJsdXJQYXNzKSB7XG5cdFx0XHRwYXJlbnQudmlzaWJsZSA9IGZhbHNlO1xuXHRcdFx0Y29uc3QgY3VycmVudFhyRW5hYmxlZCA9IGdsLnhyLmVuYWJsZWQ7XG5cdFx0XHRjb25zdCBjdXJyZW50U2hhZG93QXV0b1VwZGF0ZSA9IGdsLnNoYWRvd01hcC5hdXRvVXBkYXRlO1xuXHRcdFx0dGhpcy5iZWZvcmVSZW5kZXIoc3RhdGUpO1xuXHRcdFx0Z2wueHIuZW5hYmxlZCA9IGZhbHNlO1xuXHRcdFx0Z2wuc2hhZG93TWFwLmF1dG9VcGRhdGUgPSBmYWxzZTtcblx0XHRcdGdsLnNldFJlbmRlclRhcmdldChmYm8xKTtcblx0XHRcdGdsLnN0YXRlLmJ1ZmZlcnMuZGVwdGguc2V0TWFzayh0cnVlKTtcblx0XHRcdGlmICghZ2wuYXV0b0NsZWFyKSBnbC5jbGVhcigpO1xuXHRcdFx0Z2wucmVuZGVyKHNjZW5lLCB0aGlzLnZpcnR1YWxDYW1lcmEpO1xuXHRcdFx0aWYgKGhhc0JsdXIpIGJsdXJQYXNzLnJlbmRlcihnbCwgZmJvMSwgZmJvMik7XG5cdFx0XHRnbC54ci5lbmFibGVkID0gY3VycmVudFhyRW5hYmxlZDtcblx0XHRcdGdsLnNoYWRvd01hcC5hdXRvVXBkYXRlID0gY3VycmVudFNoYWRvd0F1dG9VcGRhdGU7XG5cdFx0XHRwYXJlbnQudmlzaWJsZSA9IHRydWU7XG5cdFx0XHRnbC5zZXRSZW5kZXJUYXJnZXQobnVsbCk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBiZWZvcmVSZW5kZXIoc3RhdGU6IE5ndFJlbmRlclN0YXRlKSB7XG5cdFx0Y29uc3QgcGFyZW50ID0gZ2V0TG9jYWxTdGF0ZSh0aGlzLm1hdGVyaWFsUmVmLm5hdGl2ZUVsZW1lbnQpLnBhcmVudD8uKCk7XG5cdFx0aWYgKCFwYXJlbnQpIHJldHVybjtcblxuXHRcdGNvbnN0IHsgY2FtZXJhIH0gPSBzdGF0ZTtcblxuXHRcdHRoaXMucmVmbGVjdG9yV29ybGRQb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24ocGFyZW50Lm1hdHJpeFdvcmxkKTtcblx0XHR0aGlzLmNhbWVyYVdvcmxkUG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGNhbWVyYS5tYXRyaXhXb3JsZCk7XG5cdFx0dGhpcy5yb3RhdGlvbk1hdHJpeC5leHRyYWN0Um90YXRpb24ocGFyZW50Lm1hdHJpeFdvcmxkKTtcblx0XHR0aGlzLm5vcm1hbC5zZXQoMCwgMCwgMSk7XG5cdFx0dGhpcy5ub3JtYWwuYXBwbHlNYXRyaXg0KHRoaXMucm90YXRpb25NYXRyaXgpO1xuXHRcdHRoaXMucmVmbGVjdG9yV29ybGRQb3NpdGlvbi5hZGRTY2FsZWRWZWN0b3IodGhpcy5ub3JtYWwsIHRoaXMuaW5wdXRzLmdldCgncmVmbGVjdG9yT2Zmc2V0JykpO1xuXHRcdHRoaXMudmlldy5zdWJWZWN0b3JzKHRoaXMucmVmbGVjdG9yV29ybGRQb3NpdGlvbiwgdGhpcy5jYW1lcmFXb3JsZFBvc2l0aW9uKTtcblx0XHQvLyBBdm9pZCByZW5kZXJpbmcgd2hlbiByZWZsZWN0b3IgaXMgZmFjaW5nIGF3YXlcblx0XHRpZiAodGhpcy52aWV3LmRvdCh0aGlzLm5vcm1hbCkgPiAwKSByZXR1cm47XG5cdFx0dGhpcy52aWV3LnJlZmxlY3QodGhpcy5ub3JtYWwpLm5lZ2F0ZSgpO1xuXHRcdHRoaXMudmlldy5hZGQodGhpcy5yZWZsZWN0b3JXb3JsZFBvc2l0aW9uKTtcblx0XHR0aGlzLnJvdGF0aW9uTWF0cml4LmV4dHJhY3RSb3RhdGlvbihjYW1lcmEubWF0cml4V29ybGQpO1xuXHRcdHRoaXMubG9va0F0UG9zaXRpb24uc2V0KDAsIDAsIC0xKTtcblx0XHR0aGlzLmxvb2tBdFBvc2l0aW9uLmFwcGx5TWF0cml4NCh0aGlzLnJvdGF0aW9uTWF0cml4KTtcblx0XHR0aGlzLmxvb2tBdFBvc2l0aW9uLmFkZCh0aGlzLmNhbWVyYVdvcmxkUG9zaXRpb24pO1xuXHRcdHRoaXMudGFyZ2V0LnN1YlZlY3RvcnModGhpcy5yZWZsZWN0b3JXb3JsZFBvc2l0aW9uLCB0aGlzLmxvb2tBdFBvc2l0aW9uKTtcblx0XHR0aGlzLnRhcmdldC5yZWZsZWN0KHRoaXMubm9ybWFsKS5uZWdhdGUoKTtcblx0XHR0aGlzLnRhcmdldC5hZGQodGhpcy5yZWZsZWN0b3JXb3JsZFBvc2l0aW9uKTtcblx0XHR0aGlzLnZpcnR1YWxDYW1lcmEucG9zaXRpb24uY29weSh0aGlzLnZpZXcpO1xuXHRcdHRoaXMudmlydHVhbENhbWVyYS51cC5zZXQoMCwgMSwgMCk7XG5cdFx0dGhpcy52aXJ0dWFsQ2FtZXJhLnVwLmFwcGx5TWF0cml4NCh0aGlzLnJvdGF0aW9uTWF0cml4KTtcblx0XHR0aGlzLnZpcnR1YWxDYW1lcmEudXAucmVmbGVjdCh0aGlzLm5vcm1hbCk7XG5cdFx0dGhpcy52aXJ0dWFsQ2FtZXJhLmxvb2tBdCh0aGlzLnRhcmdldCk7XG5cdFx0dGhpcy52aXJ0dWFsQ2FtZXJhLmZhciA9IGNhbWVyYS5mYXI7IC8vIFVzZWQgaW4gV2ViR0xCYWNrZ3JvdW5kXG5cdFx0dGhpcy52aXJ0dWFsQ2FtZXJhLnVwZGF0ZU1hdHJpeFdvcmxkKCk7XG5cdFx0dGhpcy52aXJ0dWFsQ2FtZXJhLnByb2plY3Rpb25NYXRyaXguY29weShjYW1lcmEucHJvamVjdGlvbk1hdHJpeCk7XG5cdFx0Ly8gVXBkYXRlIHRoZSB0ZXh0dXJlIG1hdHJpeFxuXHRcdHRoaXMuX3RleHR1cmVNYXRyaXguc2V0KDAuNSwgMC4wLCAwLjAsIDAuNSwgMC4wLCAwLjUsIDAuMCwgMC41LCAwLjAsIDAuMCwgMC41LCAwLjUsIDAuMCwgMC4wLCAwLjAsIDEuMCk7XG5cdFx0dGhpcy5fdGV4dHVyZU1hdHJpeC5tdWx0aXBseSh0aGlzLnZpcnR1YWxDYW1lcmEucHJvamVjdGlvbk1hdHJpeCk7XG5cdFx0dGhpcy5fdGV4dHVyZU1hdHJpeC5tdWx0aXBseSh0aGlzLnZpcnR1YWxDYW1lcmEubWF0cml4V29ybGRJbnZlcnNlKTtcblx0XHR0aGlzLl90ZXh0dXJlTWF0cml4Lm11bHRpcGx5KHBhcmVudC5tYXRyaXhXb3JsZCk7XG5cdFx0Ly8gTm93IHVwZGF0ZSBwcm9qZWN0aW9uIG1hdHJpeCB3aXRoIG5ldyBjbGlwIHBsYW5lLCBpbXBsZW1lbnRpbmcgY29kZSBmcm9tOiBodHRwOi8vd3d3LnRlcmF0aG9uLmNvbS9jb2RlL29ibGlxdWUuaHRtbFxuXHRcdC8vIFBhcGVyIGV4cGxhaW5pbmcgdGhpcyB0ZWNobmlxdWU6IGh0dHA6Ly93d3cudGVyYXRob24uY29tL2xlbmd5ZWwvTGVuZ3llbC1PYmxpcXVlLnBkZlxuXHRcdHRoaXMucmVmbGVjdG9yUGxhbmUuc2V0RnJvbU5vcm1hbEFuZENvcGxhbmFyUG9pbnQodGhpcy5ub3JtYWwsIHRoaXMucmVmbGVjdG9yV29ybGRQb3NpdGlvbik7XG5cdFx0dGhpcy5yZWZsZWN0b3JQbGFuZS5hcHBseU1hdHJpeDQodGhpcy52aXJ0dWFsQ2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSk7XG5cdFx0dGhpcy5jbGlwUGxhbmUuc2V0KFxuXHRcdFx0dGhpcy5yZWZsZWN0b3JQbGFuZS5ub3JtYWwueCxcblx0XHRcdHRoaXMucmVmbGVjdG9yUGxhbmUubm9ybWFsLnksXG5cdFx0XHR0aGlzLnJlZmxlY3RvclBsYW5lLm5vcm1hbC56LFxuXHRcdFx0dGhpcy5yZWZsZWN0b3JQbGFuZS5jb25zdGFudCxcblx0XHQpO1xuXHRcdGNvbnN0IHByb2plY3Rpb25NYXRyaXggPSB0aGlzLnZpcnR1YWxDYW1lcmEucHJvamVjdGlvbk1hdHJpeDtcblx0XHR0aGlzLnEueCA9IChNYXRoLnNpZ24odGhpcy5jbGlwUGxhbmUueCkgKyBwcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzhdKSAvIHByb2plY3Rpb25NYXRyaXguZWxlbWVudHNbMF07XG5cdFx0dGhpcy5xLnkgPSAoTWF0aC5zaWduKHRoaXMuY2xpcFBsYW5lLnkpICsgcHJvamVjdGlvbk1hdHJpeC5lbGVtZW50c1s5XSkgLyBwcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzVdO1xuXHRcdHRoaXMucS56ID0gLTEuMDtcblx0XHR0aGlzLnEudyA9ICgxLjAgKyBwcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzEwXSkgLyBwcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzE0XTtcblx0XHQvLyBDYWxjdWxhdGUgdGhlIHNjYWxlZCBwbGFuZSB2ZWN0b3Jcblx0XHR0aGlzLmNsaXBQbGFuZS5tdWx0aXBseVNjYWxhcigyLjAgLyB0aGlzLmNsaXBQbGFuZS5kb3QodGhpcy5xKSk7XG5cdFx0Ly8gUmVwbGFjaW5nIHRoZSB0aGlyZCByb3cgb2YgdGhlIHByb2plY3Rpb24gbWF0cml4XG5cdFx0cHJvamVjdGlvbk1hdHJpeC5lbGVtZW50c1syXSA9IHRoaXMuY2xpcFBsYW5lLng7XG5cdFx0cHJvamVjdGlvbk1hdHJpeC5lbGVtZW50c1s2XSA9IHRoaXMuY2xpcFBsYW5lLnk7XG5cdFx0cHJvamVjdGlvbk1hdHJpeC5lbGVtZW50c1sxMF0gPSB0aGlzLmNsaXBQbGFuZS56ICsgMS4wO1xuXHRcdHByb2plY3Rpb25NYXRyaXguZWxlbWVudHNbMTRdID0gdGhpcy5jbGlwUGxhbmUudztcblx0fVxufVxuIl19
|