angular-three-soba 2.0.0-beta.2 → 2.0.0-beta.21
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/abstractions/billboard/billboard.d.ts +11 -7
- package/abstractions/detailed/detailed.d.ts +26 -0
- package/abstractions/edges/edges.d.ts +24 -12
- package/abstractions/grid/grid.d.ts +50 -0
- package/abstractions/index.d.ts +2 -7
- package/abstractions/text/text.d.ts +10 -5
- package/abstractions/text-3d/text-3d.d.ts +51 -41
- package/cameras/camera/camera-content.d.ts +1 -1
- package/cameras/camera/camera.d.ts +16 -13
- package/cameras/cube-camera/cube-camera.d.ts +50 -23
- package/cameras/index.d.ts +0 -1
- package/cameras/orthographic-camera/orthographic-camera.d.ts +29 -18
- package/cameras/perspective-camera/perspective-camera.d.ts +10 -1
- package/controls/orbit-controls/orbit-controls.d.ts +31 -12
- package/esm2022/abstractions/billboard/billboard.mjs +36 -33
- package/esm2022/abstractions/detailed/detailed.mjs +64 -0
- package/esm2022/abstractions/edges/edges.mjs +58 -63
- package/esm2022/abstractions/grid/grid.mjs +180 -0
- package/esm2022/abstractions/index.mjs +3 -8
- package/esm2022/abstractions/text/text.mjs +123 -124
- package/esm2022/abstractions/text-3d/text-3d.mjs +120 -115
- package/esm2022/cameras/camera/camera-content.mjs +6 -6
- package/esm2022/cameras/camera/camera.mjs +48 -42
- package/esm2022/cameras/cube-camera/cube-camera.mjs +129 -99
- package/esm2022/cameras/index.mjs +1 -2
- package/esm2022/cameras/orthographic-camera/orthographic-camera.mjs +78 -75
- package/esm2022/cameras/perspective-camera/perspective-camera.mjs +25 -26
- package/esm2022/controls/orbit-controls/orbit-controls.mjs +105 -85
- package/esm2022/gizmos/angular-three-soba-gizmos.mjs +5 -0
- package/esm2022/gizmos/gizmo-helper/gizmo-helper.mjs +197 -0
- package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/constants.mjs +31 -0
- package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.mjs +93 -0
- package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.mjs +150 -0
- package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-input.mjs +66 -0
- package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube.mjs +71 -0
- package/esm2022/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.mjs +195 -0
- package/esm2022/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport.mjs +272 -0
- package/esm2022/gizmos/index.mjs +4 -0
- package/esm2022/loaders/gltf-loader/gltf-loader.mjs +3 -6
- package/esm2022/loaders/loader/loader.mjs +92 -87
- package/esm2022/loaders/progress/progress.mjs +29 -29
- package/esm2022/loaders/texture-loader/texture-loader.mjs +4 -4
- package/esm2022/materials/index.mjs +2 -1
- package/esm2022/materials/mesh-distort-material/mesh-distort-material.mjs +60 -51
- package/esm2022/materials/mesh-reflector-material/mesh-reflector-material.mjs +239 -255
- package/esm2022/materials/mesh-refraction-material/mesh-refraction-material.mjs +102 -99
- package/esm2022/materials/mesh-transmission-material/mesh-transmission-material.mjs +167 -146
- package/esm2022/materials/mesh-wobble-material/mesh-wobble-material.mjs +44 -42
- package/esm2022/materials/point-material/point-material.mjs +50 -0
- package/esm2022/misc/animations/animations.mjs +36 -32
- package/esm2022/misc/bake-shadows/bake-shadows.mjs +13 -13
- package/esm2022/misc/caustics/caustics.mjs +387 -0
- package/esm2022/misc/decal/decal.mjs +187 -0
- package/esm2022/misc/depth-buffer/depth-buffer.mjs +33 -35
- package/esm2022/misc/example/example.mjs +160 -0
- package/esm2022/misc/fbo/fbo.mjs +35 -35
- package/esm2022/misc/html/html-wrapper.mjs +478 -0
- package/esm2022/misc/html/html.mjs +304 -0
- package/esm2022/misc/index.mjs +10 -1
- package/esm2022/misc/sampler/sampler.mjs +142 -0
- package/esm2022/misc/shadow/shadow.mjs +111 -0
- package/esm2022/misc/stats-gl/stats-gl.mjs +61 -0
- package/esm2022/misc/trail/trail.mjs +209 -0
- package/esm2022/misc/trail-texture/inject-trail-texture.mjs +17 -0
- package/esm2022/misc/trail-texture/trail-texture.mjs +106 -0
- package/esm2022/modifiers/angular-three-soba-modifiers.mjs +5 -0
- package/esm2022/modifiers/curve-modifier/curve-modifier.mjs +64 -0
- package/esm2022/modifiers/index.mjs +2 -0
- package/esm2022/performances/adaptive-dpr/adaptive-dpr.mjs +44 -0
- package/esm2022/performances/adaptive-events/adaptive-events.mjs +27 -0
- package/esm2022/performances/angular-three-soba-performances.mjs +5 -0
- package/esm2022/performances/index.mjs +8 -0
- package/esm2022/performances/instances/instances.mjs +220 -0
- package/esm2022/performances/instances/position-mesh.mjs +52 -0
- package/esm2022/performances/points/points-input.mjs +64 -0
- package/esm2022/performances/points/points.mjs +326 -0
- package/esm2022/performances/points/position-point.mjs +54 -0
- package/esm2022/performances/segments/segment-object.mjs +9 -0
- package/esm2022/performances/segments/segments.mjs +182 -0
- package/esm2022/shaders/blur-pass/blur-pass.mjs +2 -2
- package/esm2022/shaders/caustics/caustics-material.mjs +130 -0
- package/esm2022/shaders/caustics/caustics-projection-material.mjs +31 -0
- package/esm2022/shaders/convolution-material/convolution-material.mjs +1 -1
- package/esm2022/shaders/discard-material/discard-material.mjs +1 -1
- package/esm2022/shaders/grid-material/grid-material.mjs +77 -0
- package/esm2022/shaders/index.mjs +6 -3
- package/esm2022/shaders/mesh-distort-material/mesh-distort-material.mjs +42 -41
- package/esm2022/shaders/mesh-reflector-material/mesh-reflector-material.mjs +2 -2
- package/esm2022/shaders/mesh-refraction-material/mesh-refraction-material.mjs +2 -2
- package/esm2022/shaders/mesh-transmission-material/mesh-transmission-material.mjs +4 -4
- package/esm2022/shaders/mesh-wobble-material/mesh-wobble-material.mjs +1 -1
- package/esm2022/shaders/shader-material/shader-material.mjs +1 -1
- package/esm2022/shaders/soft-shadow-material/soft-shadow-material.mjs +17 -25
- package/esm2022/shaders/sparkles-material/sparkles-material.mjs +32 -46
- package/esm2022/shaders/spot-light-material/spot-light-material.mjs +7 -7
- package/esm2022/shaders/star-field-material/star-field-material.mjs +3 -2
- package/esm2022/shaders/wireframe-material/wireframe-material.mjs +247 -0
- package/esm2022/staging/accumulative-shadows/accumulative-shadows.mjs +160 -176
- package/esm2022/staging/accumulative-shadows/progressive-light-map.mjs +1 -1
- package/esm2022/staging/accumulative-shadows/randomized-lights.mjs +126 -128
- package/esm2022/staging/backdrop/backdrop.mjs +77 -0
- package/esm2022/staging/bb-anchor/bb-anchor.mjs +69 -0
- package/esm2022/staging/bounds/bounds.mjs +144 -143
- package/esm2022/staging/camera-shake/camera-shake.mjs +86 -80
- package/esm2022/staging/center/center.mjs +129 -112
- package/esm2022/staging/cloud/cloud.mjs +118 -124
- package/esm2022/staging/contact-shadows/contact-shadows.mjs +131 -134
- package/esm2022/staging/environment/assets.mjs +12 -12
- package/esm2022/staging/environment/environment-cube.mjs +28 -30
- package/esm2022/staging/environment/environment-ground.mjs +17 -19
- package/esm2022/staging/environment/environment-input.mjs +98 -85
- package/esm2022/staging/environment/environment-map.mjs +33 -33
- package/esm2022/staging/environment/environment-portal.mjs +75 -97
- package/esm2022/staging/environment/environment.mjs +34 -51
- package/esm2022/staging/environment/utils.mjs +37 -15
- package/esm2022/staging/float/float.mjs +70 -58
- package/esm2022/staging/index.mjs +7 -3
- package/esm2022/staging/matcap-texture/matcap-texture.mjs +64 -0
- package/esm2022/staging/normal-texture/normal-texture.mjs +53 -0
- package/esm2022/staging/sky/sky.mjs +85 -80
- package/esm2022/staging/sparkles/sparkles.mjs +108 -105
- package/esm2022/staging/spot-light/shadow-mesh-input.mjs +63 -0
- package/esm2022/staging/spot-light/shadow-mesh.mjs +266 -0
- package/esm2022/staging/spot-light/spot-light-input.mjs +67 -58
- package/esm2022/staging/spot-light/spot-light.mjs +51 -64
- package/esm2022/staging/spot-light/volumetric-mesh.mjs +67 -70
- package/esm2022/staging/stage/stage.mjs +305 -290
- package/esm2022/staging/stars/stars.mjs +101 -102
- package/esm2022/staging/wireframe/wireframe-input.mjs +191 -0
- package/esm2022/staging/wireframe/wireframe.mjs +228 -0
- package/esm2022/utils/angular-three-soba-utils.mjs +5 -0
- package/esm2022/utils/content/content.mjs +15 -0
- package/esm2022/utils/index.mjs +2 -0
- package/fesm2022/angular-three-soba-abstractions.mjs +514 -1947
- package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
- package/fesm2022/angular-three-soba-cameras.mjs +302 -259
- package/fesm2022/angular-three-soba-cameras.mjs.map +1 -1
- package/fesm2022/angular-three-soba-controls.mjs +104 -83
- package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
- package/fesm2022/angular-three-soba-gizmos.mjs +1043 -0
- package/fesm2022/angular-three-soba-gizmos.mjs.map +1 -0
- package/fesm2022/angular-three-soba-loaders.mjs +121 -117
- package/fesm2022/angular-three-soba-loaders.mjs.map +1 -1
- package/fesm2022/angular-three-soba-materials.mjs +662 -592
- package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
- package/fesm2022/angular-three-soba-misc.mjs +2214 -105
- package/fesm2022/angular-three-soba-misc.mjs.map +1 -1
- package/fesm2022/angular-three-soba-modifiers.mjs +71 -0
- package/fesm2022/angular-three-soba-modifiers.mjs.map +1 -0
- package/fesm2022/angular-three-soba-performances.mjs +956 -0
- package/fesm2022/angular-three-soba-performances.mjs.map +1 -0
- package/fesm2022/angular-three-soba-shaders.mjs +549 -252
- package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
- package/fesm2022/angular-three-soba-staging.mjs +2899 -2563
- package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
- package/fesm2022/angular-three-soba-utils.mjs +22 -0
- package/fesm2022/angular-three-soba-utils.mjs.map +1 -0
- package/gizmos/README.md +3 -0
- package/gizmos/gizmo-helper/gizmo-helper.d.ts +69 -0
- package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.d.ts +22 -0
- package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.d.ts +29 -0
- package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-input.d.ts +33 -0
- package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube.d.ts +10 -0
- package/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.d.ts +40 -0
- package/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport.d.ts +30 -0
- package/gizmos/index.d.ts +3 -0
- package/loaders/gltf-loader/gltf-loader.d.ts +4 -3
- package/loaders/loader/loader.d.ts +19 -17
- package/loaders/progress/progress.d.ts +1 -1
- package/loaders/texture-loader/texture-loader.d.ts +2 -2
- package/materials/index.d.ts +1 -0
- package/materials/mesh-distort-material/mesh-distort-material.d.ts +25 -15
- package/materials/mesh-reflector-material/mesh-reflector-material.d.ts +74 -56
- package/materials/mesh-refraction-material/mesh-refraction-material.d.ts +33 -21
- package/materials/mesh-transmission-material/mesh-transmission-material.d.ts +55 -39
- package/materials/mesh-wobble-material/mesh-wobble-material.d.ts +19 -10
- package/materials/point-material/point-material.d.ts +24 -0
- package/metadata.json +1 -0
- package/misc/animations/animations.d.ts +6 -4
- package/misc/caustics/caustics.d.ts +87 -0
- package/misc/decal/decal.d.ts +49 -0
- package/misc/depth-buffer/depth-buffer.d.ts +2 -2
- package/misc/example/example.d.ts +81 -0
- package/misc/fbo/fbo.d.ts +2 -2
- package/misc/html/html-wrapper.d.ts +559 -0
- package/misc/html/html.d.ts +214 -0
- package/misc/index.d.ts +9 -0
- package/misc/sampler/sampler.d.ts +67 -0
- package/misc/shadow/shadow.d.ts +37 -0
- package/misc/stats-gl/stats-gl.d.ts +24 -0
- package/misc/trail/trail.d.ts +57 -0
- package/misc/trail-texture/inject-trail-texture.d.ts +9 -0
- package/misc/trail-texture/trail-texture.d.ts +50 -0
- package/modifiers/README.md +3 -0
- package/modifiers/curve-modifier/curve-modifier.d.ts +23 -0
- package/modifiers/index.d.ts +1 -0
- package/package.json +31 -16
- package/performances/README.md +3 -0
- package/performances/adaptive-dpr/adaptive-dpr.d.ts +14 -0
- package/{performance/adaptive → performances/adaptive-events}/adaptive-events.d.ts +3 -0
- package/performances/index.d.ts +7 -0
- package/performances/instances/instances.d.ts +79 -0
- package/{performance → performances}/instances/position-mesh.d.ts +1 -1
- package/performances/points/points-input.d.ts +32 -0
- package/performances/points/points.d.ts +92 -0
- package/performances/points/position-point.d.ts +11 -0
- package/performances/segments/segment-object.d.ts +7 -0
- package/performances/segments/segments.d.ts +124 -0
- package/shaders/grid-material/grid-material.d.ts +37 -0
- package/shaders/index.d.ts +5 -2
- package/shaders/mesh-distort-material/mesh-distort-material.d.ts +147 -2
- package/shaders/mesh-transmission-material/mesh-transmission-material.d.ts +1 -1
- package/shaders/shader-material/shader-material.d.ts +2 -2
- package/shaders/soft-shadow-material/soft-shadow-material.d.ts +10 -1
- package/shaders/sparkles-material/sparkles-material.d.ts +15 -1
- package/shaders/spot-light-material/spot-light-material.d.ts +11 -2
- package/shaders/star-field-material/star-field-material.d.ts +11 -1
- package/shaders/wireframe-material/wireframe-material.d.ts +58 -0
- package/staging/accumulative-shadows/accumulative-shadows.d.ts +89 -39
- package/staging/accumulative-shadows/randomized-lights.d.ts +40 -27
- package/staging/backdrop/backdrop.d.ts +30 -0
- package/staging/bb-anchor/bb-anchor.d.ts +27 -0
- package/staging/bounds/bounds.d.ts +100 -24
- package/staging/camera-shake/camera-shake.d.ts +30 -19
- package/staging/center/center.d.ts +43 -35
- package/staging/cloud/cloud.d.ts +26 -23
- package/staging/contact-shadows/contact-shadows.d.ts +41 -28
- package/staging/environment/assets.d.ts +9 -9
- package/staging/environment/environment-cube.d.ts +9 -5
- package/staging/environment/environment-ground.d.ts +7 -7
- package/staging/environment/environment-input.d.ts +37 -37
- package/staging/environment/environment-map.d.ts +10 -5
- package/staging/environment/environment-portal.d.ts +10 -5
- package/staging/environment/environment.d.ts +0 -4
- package/staging/environment/utils.d.ts +2 -2
- package/staging/float/float.d.ts +14 -10
- package/staging/index.d.ts +6 -2
- package/staging/matcap-texture/matcap-texture.d.ts +13 -0
- package/staging/normal-texture/normal-texture.d.ts +16 -0
- package/staging/sky/sky.d.ts +28 -21
- package/staging/sparkles/sparkles.d.ts +36 -22
- package/staging/spot-light/shadow-mesh-input.d.ts +29 -0
- package/staging/spot-light/shadow-mesh.d.ts +37 -0
- package/staging/spot-light/spot-light-input.d.ts +25 -25
- package/staging/spot-light/spot-light.d.ts +31 -15
- package/staging/spot-light/volumetric-mesh.d.ts +15 -9
- package/staging/stage/stage.d.ts +89 -65
- package/staging/stars/stars.d.ts +28 -17
- package/staging/wireframe/wireframe-input.d.ts +65 -0
- package/staging/wireframe/wireframe.d.ts +28 -0
- package/utils/README.md +3 -0
- package/utils/content/content.d.ts +8 -0
- package/utils/index.d.ts +1 -0
- package/web-types.json +1 -0
- package/abstractions/catmull-rom-line/catmull-rom-line.d.ts +0 -25
- package/abstractions/cubic-bezier-line/cubic-bezier-line.d.ts +0 -25
- package/abstractions/gizmo-helper/gizmo-helper.d.ts +0 -34
- package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.d.ts +0 -22
- package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.d.ts +0 -30
- package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.d.ts +0 -32
- package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube.d.ts +0 -14
- package/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.d.ts +0 -47
- package/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport.d.ts +0 -40
- package/abstractions/line/line-input.d.ts +0 -42
- package/abstractions/line/line.d.ts +0 -35
- package/abstractions/quadratic-bezier-line/quadratic-bezier-line.d.ts +0 -23
- package/esm2022/abstractions/catmull-rom-line/catmull-rom-line.mjs +0 -131
- package/esm2022/abstractions/cubic-bezier-line/cubic-bezier-line.mjs +0 -113
- package/esm2022/abstractions/gizmo-helper/gizmo-helper.mjs +0 -210
- package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/constants.mjs +0 -31
- package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.mjs +0 -95
- package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.mjs +0 -155
- package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.mjs +0 -62
- package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube.mjs +0 -80
- package/esm2022/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.mjs +0 -206
- package/esm2022/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport.mjs +0 -273
- package/esm2022/abstractions/line/line-input.mjs +0 -113
- package/esm2022/abstractions/line/line.mjs +0 -165
- package/esm2022/abstractions/quadratic-bezier-line/quadratic-bezier-line.mjs +0 -128
- package/esm2022/performance/adaptive/adaptive-dpr.mjs +0 -46
- package/esm2022/performance/adaptive/adaptive-events.mjs +0 -31
- package/esm2022/performance/angular-three-soba-performance.mjs +0 -5
- package/esm2022/performance/detailed/detailed.mjs +0 -61
- package/esm2022/performance/index.mjs +0 -7
- package/esm2022/performance/instances/instance.mjs +0 -48
- package/esm2022/performance/instances/instances.mjs +0 -189
- package/esm2022/performance/instances/position-mesh.mjs +0 -52
- package/esm2022/performance/stats/stats.mjs +0 -79
- package/esm2022/shaders/caustics-material/caustics-material.mjs +0 -128
- package/esm2022/shaders/caustics-material/caustics-projection-material.mjs +0 -33
- package/esm2022/staging/caustics/caustisc.mjs +0 -384
- package/esm2022/staging/spot-light/spot-light-shadow-mesh-input.mjs +0 -57
- package/esm2022/staging/spot-light/spot-light-shadow-mesh.mjs +0 -256
- package/fesm2022/angular-three-soba-performance.mjs +0 -487
- package/fesm2022/angular-three-soba-performance.mjs.map +0 -1
- package/performance/README.md +0 -3
- package/performance/adaptive/adaptive-dpr.d.ts +0 -8
- package/performance/detailed/detailed.d.ts +0 -20
- package/performance/index.d.ts +0 -6
- package/performance/instances/instance.d.ts +0 -9
- package/performance/instances/instances.d.ts +0 -35
- package/performance/stats/stats.d.ts +0 -18
- package/plugin/generators.json +0 -19
- package/plugin/libs/plugin/README.md +0 -11
- package/plugin/package.json +0 -9
- package/plugin/src/generators/init/compat.d.ts +0 -2
- package/plugin/src/generators/init/compat.js +0 -6
- package/plugin/src/generators/init/compat.js.map +0 -1
- package/plugin/src/generators/init/init.d.ts +0 -4
- package/plugin/src/generators/init/init.js +0 -22
- package/plugin/src/generators/init/init.js.map +0 -1
- package/plugin/src/generators/init/schema.json +0 -6
- package/plugin/src/index.d.ts +0 -1
- package/plugin/src/index.js +0 -6
- package/plugin/src/index.js.map +0 -1
- package/staging/caustics/caustisc.d.ts +0 -70
- package/staging/spot-light/spot-light-shadow-mesh-input.d.ts +0 -29
- package/staging/spot-light/spot-light-shadow-mesh.d.ts +0 -38
- /package/{abstractions → gizmos}/gizmo-helper/gizmo-viewcube/constants.d.ts +0 -0
- /package/shaders/{caustics-material → caustics}/caustics-material.d.ts +0 -0
- /package/shaders/{caustics-material → caustics}/caustics-projection-material.d.ts +0 -0
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
import { NgIf } from '@angular/common';
|
|
2
|
+
import { CUSTOM_ELEMENTS_SCHEMA, Component, ContentChild, EventEmitter, Input, Output, TemplateRef, computed, forwardRef, } from '@angular/core';
|
|
3
|
+
import { createInjectionToken, extend, injectNgtRef, is, signalStore, } from 'angular-three';
|
|
4
|
+
import { NgtsSobaContent } from 'angular-three-soba/utils';
|
|
5
|
+
import * as THREE from 'three';
|
|
6
|
+
import { Group, Mesh, PlaneGeometry, ShaderMaterial } from 'three';
|
|
7
|
+
import { NgtsHtmlWrapper, defaultCalculatePosition } from './html-wrapper';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
extend({ Group, PlaneGeometry, Mesh, ShaderMaterial });
|
|
10
|
+
export const [injectNgtsHtmlInputs, provideNgtsHtmlInputs] = createInjectionToken((html) => ({ state: html.inputs.state, ...html.state }), { isRoot: false, deps: [forwardRef(() => NgtsHtml)] });
|
|
11
|
+
export class NgtsHtml {
|
|
12
|
+
constructor() {
|
|
13
|
+
this.DoubleSide = THREE.DoubleSide;
|
|
14
|
+
this.inputs = signalStore({
|
|
15
|
+
as: 'div',
|
|
16
|
+
prepend: false,
|
|
17
|
+
transform: false,
|
|
18
|
+
fullscreen: false,
|
|
19
|
+
center: false,
|
|
20
|
+
sprite: false,
|
|
21
|
+
zIndexRange: [16777271, 0],
|
|
22
|
+
eps: 0.001,
|
|
23
|
+
scale: 1,
|
|
24
|
+
calculatePosition: defaultCalculatePosition,
|
|
25
|
+
pointerEvents: 'auto',
|
|
26
|
+
occlude: false,
|
|
27
|
+
castShadow: false,
|
|
28
|
+
receiveShadow: false,
|
|
29
|
+
});
|
|
30
|
+
this.groupRef = injectNgtRef();
|
|
31
|
+
this.occluded = new EventEmitter();
|
|
32
|
+
this.occlusionMeshRef = injectNgtRef();
|
|
33
|
+
this.transform = this.inputs.select('transform');
|
|
34
|
+
this.isRayCastOcclusion = computed(() => {
|
|
35
|
+
const occlude = this.occlude();
|
|
36
|
+
return ((occlude && occlude !== 'blending') || (Array.isArray(occlude) && !!occlude.length && is.ref(occlude[0])));
|
|
37
|
+
});
|
|
38
|
+
this.occlude = this.inputs.select('occlude');
|
|
39
|
+
this.castShadow = this.inputs.select('castShadow');
|
|
40
|
+
this.receiveShadow = this.inputs.select('receiveShadow');
|
|
41
|
+
this.geometry = this.inputs.select('geometry');
|
|
42
|
+
this.material = this.inputs.select('material');
|
|
43
|
+
this.scale = this.inputs.select('scale');
|
|
44
|
+
this.shaders = computed(() => {
|
|
45
|
+
const transform = this.transform();
|
|
46
|
+
return {
|
|
47
|
+
vertexShader: !transform
|
|
48
|
+
? /* glsl */ `
|
|
49
|
+
/*
|
|
50
|
+
This shader is from the THREE's SpriteMaterial.
|
|
51
|
+
We need to turn the backing plane into a Sprite
|
|
52
|
+
(make it always face the camera) if "transfrom"
|
|
53
|
+
is false.
|
|
54
|
+
*/
|
|
55
|
+
#include <common>
|
|
56
|
+
|
|
57
|
+
void main() {
|
|
58
|
+
vec2 center = vec2(0., 1.);
|
|
59
|
+
float rotation = 0.0;
|
|
60
|
+
|
|
61
|
+
// This is somewhat arbitrary, but it seems to work well
|
|
62
|
+
// Need to figure out how to derive this dynamically if it even matters
|
|
63
|
+
float size = 0.03;
|
|
64
|
+
|
|
65
|
+
vec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );
|
|
66
|
+
vec2 scale;
|
|
67
|
+
scale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );
|
|
68
|
+
scale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );
|
|
69
|
+
|
|
70
|
+
bool isPerspective = isPerspectiveMatrix( projectionMatrix );
|
|
71
|
+
if ( isPerspective ) scale *= - mvPosition.z;
|
|
72
|
+
|
|
73
|
+
vec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale * size;
|
|
74
|
+
vec2 rotatedPosition;
|
|
75
|
+
rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;
|
|
76
|
+
rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;
|
|
77
|
+
mvPosition.xy += rotatedPosition;
|
|
78
|
+
|
|
79
|
+
gl_Position = projectionMatrix * mvPosition;
|
|
80
|
+
}
|
|
81
|
+
`
|
|
82
|
+
: undefined,
|
|
83
|
+
fragmentShader: /* glsl */ `
|
|
84
|
+
void main() {
|
|
85
|
+
gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);
|
|
86
|
+
}
|
|
87
|
+
`,
|
|
88
|
+
};
|
|
89
|
+
});
|
|
90
|
+
this.state = {
|
|
91
|
+
zIndexRange: this.inputs.select('zIndexRange'),
|
|
92
|
+
prepend: this.inputs.select('prepend'),
|
|
93
|
+
transform: this.transform,
|
|
94
|
+
center: this.inputs.select('center'),
|
|
95
|
+
fullscreen: this.inputs.select('fullscreen'),
|
|
96
|
+
calculatePosition: this.inputs.select('calculatePosition'),
|
|
97
|
+
wrapperClass: this.inputs.select('wrapperClass'),
|
|
98
|
+
renderedDivClass: this.inputs.select('renderedDivClass'),
|
|
99
|
+
style: this.inputs.select('style'),
|
|
100
|
+
pointerEvents: this.inputs.select('pointerEvents'),
|
|
101
|
+
eps: this.inputs.select('eps'),
|
|
102
|
+
distanceFactor: this.inputs.select('distanceFactor'),
|
|
103
|
+
sprite: this.inputs.select('sprite'),
|
|
104
|
+
as: this.inputs.select('as'),
|
|
105
|
+
portal: this.inputs.select('portal'),
|
|
106
|
+
content: this.inputs.select('content'),
|
|
107
|
+
occlude: this.occlude,
|
|
108
|
+
isRayCastOcclusion: this.isRayCastOcclusion,
|
|
109
|
+
occlusionMeshRef: this.occlusionMeshRef,
|
|
110
|
+
occluded: this.occluded,
|
|
111
|
+
geometry: this.geometry,
|
|
112
|
+
scale: this.scale,
|
|
113
|
+
groupRef: this.groupRef,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
set content(content) {
|
|
117
|
+
this.inputs.set({ content });
|
|
118
|
+
}
|
|
119
|
+
set _as(as) {
|
|
120
|
+
this.inputs.set({ as });
|
|
121
|
+
}
|
|
122
|
+
set _zIndexRange(zIndexRange) {
|
|
123
|
+
this.inputs.set({ zIndexRange });
|
|
124
|
+
}
|
|
125
|
+
set _portal(portal) {
|
|
126
|
+
this.inputs.set({ portal });
|
|
127
|
+
}
|
|
128
|
+
set _occlude(occlude) {
|
|
129
|
+
this.inputs.set({ occlude });
|
|
130
|
+
}
|
|
131
|
+
set _castShadow(castShadow) {
|
|
132
|
+
this.inputs.set({ castShadow });
|
|
133
|
+
}
|
|
134
|
+
set _receiveShadow(receiveShadow) {
|
|
135
|
+
this.inputs.set({ receiveShadow });
|
|
136
|
+
}
|
|
137
|
+
set _material(material) {
|
|
138
|
+
this.inputs.set({ material });
|
|
139
|
+
}
|
|
140
|
+
set _geometry(geometry) {
|
|
141
|
+
this.inputs.set({ geometry });
|
|
142
|
+
}
|
|
143
|
+
set _scale(scale) {
|
|
144
|
+
this.inputs.set({ scale });
|
|
145
|
+
}
|
|
146
|
+
set _prepend(prepend) {
|
|
147
|
+
this.inputs.set({ prepend });
|
|
148
|
+
}
|
|
149
|
+
set _transform(transform) {
|
|
150
|
+
this.inputs.set({ transform });
|
|
151
|
+
}
|
|
152
|
+
set _center(center) {
|
|
153
|
+
this.inputs.set({ center });
|
|
154
|
+
}
|
|
155
|
+
set _sprite(sprite) {
|
|
156
|
+
this.inputs.set({ sprite });
|
|
157
|
+
}
|
|
158
|
+
set _fullscreen(fullscreen) {
|
|
159
|
+
this.inputs.set({ fullscreen });
|
|
160
|
+
}
|
|
161
|
+
set _eps(eps) {
|
|
162
|
+
this.inputs.set({ eps });
|
|
163
|
+
}
|
|
164
|
+
set _distanceFactor(distanceFactor) {
|
|
165
|
+
this.inputs.set({ distanceFactor });
|
|
166
|
+
}
|
|
167
|
+
set _wrapperClass(wrapperClass) {
|
|
168
|
+
this.inputs.set({ wrapperClass });
|
|
169
|
+
}
|
|
170
|
+
set _renderedDivClass(renderedDivClass) {
|
|
171
|
+
this.inputs.set({ renderedDivClass });
|
|
172
|
+
}
|
|
173
|
+
set _style(style) {
|
|
174
|
+
this.inputs.set({ style });
|
|
175
|
+
}
|
|
176
|
+
set _pointerEvents(pointerEvents) {
|
|
177
|
+
this.inputs.set({ pointerEvents });
|
|
178
|
+
}
|
|
179
|
+
set _calculatePosition(calculatePosition) {
|
|
180
|
+
this.inputs.set({ calculatePosition });
|
|
181
|
+
}
|
|
182
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: NgtsHtml, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
183
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.2", type: NgtsHtml, isStandalone: true, selector: "ngts-html", inputs: { groupRef: "groupRef", _as: ["as", "_as"], _zIndexRange: ["zIndexRange", "_zIndexRange"], _portal: ["portal", "_portal"], _occlude: ["occlude", "_occlude"], _castShadow: ["castShadow", "_castShadow"], _receiveShadow: ["receiveShadow", "_receiveShadow"], _material: ["material", "_material"], _geometry: ["geometry", "_geometry"], _scale: ["scale", "_scale"], _prepend: ["prepend", "_prepend"], _transform: ["transform", "_transform"], _center: ["center", "_center"], _sprite: ["sprite", "_sprite"], _fullscreen: ["fullscreen", "_fullscreen"], _eps: ["eps", "_eps"], _distanceFactor: ["distanceFactor", "_distanceFactor"], _wrapperClass: ["wrapperClass", "_wrapperClass"], _renderedDivClass: ["renderedDivClass", "_renderedDivClass"], _style: ["style", "_style"], _pointerEvents: ["pointerEvents", "_pointerEvents"], _calculatePosition: ["calculatePosition", "_calculatePosition"] }, outputs: { occluded: "occluded" }, providers: [provideNgtsHtmlInputs()], queries: [{ propertyName: "content", first: true, predicate: NgtsSobaContent, descendants: true, read: TemplateRef }], ngImport: i0, template: `
|
|
184
|
+
<ngt-group ngtCompound [ref]="groupRef" [scale]="scale()">
|
|
185
|
+
<ngt-mesh
|
|
186
|
+
*ngIf="occlude() && !isRayCastOcclusion()"
|
|
187
|
+
[castShadow]="castShadow()"
|
|
188
|
+
[receiveShadow]="receiveShadow()"
|
|
189
|
+
[ref]="occlusionMeshRef"
|
|
190
|
+
>
|
|
191
|
+
<ngt-plane-geometry *ngIf="geometry()" />
|
|
192
|
+
<ngt-shader-material
|
|
193
|
+
*ngIf="material()"
|
|
194
|
+
[side]="DoubleSide"
|
|
195
|
+
[vertexShader]="shaders().vertexShader"
|
|
196
|
+
[fragmentShader]="shaders().fragmentShader"
|
|
197
|
+
/>
|
|
198
|
+
</ngt-mesh>
|
|
199
|
+
</ngt-group>
|
|
200
|
+
|
|
201
|
+
<ngts-html-wrapper />
|
|
202
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: NgtsHtmlWrapper, selector: "ngts-html-wrapper" }] }); }
|
|
203
|
+
}
|
|
204
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: NgtsHtml, decorators: [{
|
|
205
|
+
type: Component,
|
|
206
|
+
args: [{
|
|
207
|
+
selector: 'ngts-html',
|
|
208
|
+
standalone: true,
|
|
209
|
+
template: `
|
|
210
|
+
<ngt-group ngtCompound [ref]="groupRef" [scale]="scale()">
|
|
211
|
+
<ngt-mesh
|
|
212
|
+
*ngIf="occlude() && !isRayCastOcclusion()"
|
|
213
|
+
[castShadow]="castShadow()"
|
|
214
|
+
[receiveShadow]="receiveShadow()"
|
|
215
|
+
[ref]="occlusionMeshRef"
|
|
216
|
+
>
|
|
217
|
+
<ngt-plane-geometry *ngIf="geometry()" />
|
|
218
|
+
<ngt-shader-material
|
|
219
|
+
*ngIf="material()"
|
|
220
|
+
[side]="DoubleSide"
|
|
221
|
+
[vertexShader]="shaders().vertexShader"
|
|
222
|
+
[fragmentShader]="shaders().fragmentShader"
|
|
223
|
+
/>
|
|
224
|
+
</ngt-mesh>
|
|
225
|
+
</ngt-group>
|
|
226
|
+
|
|
227
|
+
<ngts-html-wrapper />
|
|
228
|
+
`,
|
|
229
|
+
imports: [NgIf, NgtsHtmlWrapper],
|
|
230
|
+
providers: [provideNgtsHtmlInputs()],
|
|
231
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
232
|
+
}]
|
|
233
|
+
}], propDecorators: { content: [{
|
|
234
|
+
type: ContentChild,
|
|
235
|
+
args: [NgtsSobaContent, { read: TemplateRef }]
|
|
236
|
+
}], groupRef: [{
|
|
237
|
+
type: Input
|
|
238
|
+
}], _as: [{
|
|
239
|
+
type: Input,
|
|
240
|
+
args: [{ alias: 'as' }]
|
|
241
|
+
}], _zIndexRange: [{
|
|
242
|
+
type: Input,
|
|
243
|
+
args: [{ alias: 'zIndexRange' }]
|
|
244
|
+
}], _portal: [{
|
|
245
|
+
type: Input,
|
|
246
|
+
args: [{ alias: 'portal' }]
|
|
247
|
+
}], _occlude: [{
|
|
248
|
+
type: Input,
|
|
249
|
+
args: [{ alias: 'occlude' }]
|
|
250
|
+
}], _castShadow: [{
|
|
251
|
+
type: Input,
|
|
252
|
+
args: [{ alias: 'castShadow' }]
|
|
253
|
+
}], _receiveShadow: [{
|
|
254
|
+
type: Input,
|
|
255
|
+
args: [{ alias: 'receiveShadow' }]
|
|
256
|
+
}], _material: [{
|
|
257
|
+
type: Input,
|
|
258
|
+
args: [{ alias: 'material' }]
|
|
259
|
+
}], _geometry: [{
|
|
260
|
+
type: Input,
|
|
261
|
+
args: [{ alias: 'geometry' }]
|
|
262
|
+
}], _scale: [{
|
|
263
|
+
type: Input,
|
|
264
|
+
args: [{ alias: 'scale' }]
|
|
265
|
+
}], _prepend: [{
|
|
266
|
+
type: Input,
|
|
267
|
+
args: [{ alias: 'prepend' }]
|
|
268
|
+
}], _transform: [{
|
|
269
|
+
type: Input,
|
|
270
|
+
args: [{ alias: 'transform' }]
|
|
271
|
+
}], _center: [{
|
|
272
|
+
type: Input,
|
|
273
|
+
args: [{ alias: 'center' }]
|
|
274
|
+
}], _sprite: [{
|
|
275
|
+
type: Input,
|
|
276
|
+
args: [{ alias: 'sprite' }]
|
|
277
|
+
}], _fullscreen: [{
|
|
278
|
+
type: Input,
|
|
279
|
+
args: [{ alias: 'fullscreen' }]
|
|
280
|
+
}], _eps: [{
|
|
281
|
+
type: Input,
|
|
282
|
+
args: [{ alias: 'eps' }]
|
|
283
|
+
}], _distanceFactor: [{
|
|
284
|
+
type: Input,
|
|
285
|
+
args: [{ alias: 'distanceFactor' }]
|
|
286
|
+
}], _wrapperClass: [{
|
|
287
|
+
type: Input,
|
|
288
|
+
args: [{ alias: 'wrapperClass' }]
|
|
289
|
+
}], _renderedDivClass: [{
|
|
290
|
+
type: Input,
|
|
291
|
+
args: [{ alias: 'renderedDivClass' }]
|
|
292
|
+
}], _style: [{
|
|
293
|
+
type: Input,
|
|
294
|
+
args: [{ alias: 'style' }]
|
|
295
|
+
}], _pointerEvents: [{
|
|
296
|
+
type: Input,
|
|
297
|
+
args: [{ alias: 'pointerEvents' }]
|
|
298
|
+
}], _calculatePosition: [{
|
|
299
|
+
type: Input,
|
|
300
|
+
args: [{ alias: 'calculatePosition' }]
|
|
301
|
+
}], occluded: [{
|
|
302
|
+
type: Output
|
|
303
|
+
}] } });
|
|
304
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9taXNjL3NyYy9odG1sL2h0bWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZDLE9BQU8sRUFDTixzQkFBc0IsRUFDdEIsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixXQUFXLEVBQ1gsUUFBUSxFQUNSLFVBQVUsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ04sb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixZQUFZLEVBQ1osRUFBRSxFQUNGLFdBQVcsR0FJWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNuRSxPQUFPLEVBQUUsZUFBZSxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBRTNFLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUM7QUF3Q3ZELE1BQU0sQ0FBQyxNQUFNLENBQUMsb0JBQW9CLEVBQUUscUJBQXFCLENBQUMsR0FBRyxvQkFBb0IsQ0FDaEYsQ0FBQyxJQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFDakUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUs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RTtnQkFJTCxNQUFNO3NCQUFwQyxLQUFLO3VCQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtnQkFJYyxjQUFjO3NCQUFwRCxLQUFLO3VCQUFDLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRTtnQkFJVSxrQkFBa0I7c0JBQTVELEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsbUJBQW1CLEVBQUU7Z0JBTTNCLFFBQVE7c0JBQWpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG5cdENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG5cdENvbXBvbmVudCxcblx0Q29udGVudENoaWxkLFxuXHRFdmVudEVtaXR0ZXIsXG5cdElucHV0LFxuXHRPdXRwdXQsXG5cdFRlbXBsYXRlUmVmLFxuXHRjb21wdXRlZCxcblx0Zm9yd2FyZFJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuXHRjcmVhdGVJbmplY3Rpb25Ub2tlbixcblx0ZXh0ZW5kLFxuXHRpbmplY3ROZ3RSZWYsXG5cdGlzLFxuXHRzaWduYWxTdG9yZSxcblx0dHlwZSBOZ3RHcm91cCxcblx0dHlwZSBOZ3RSZWYsXG5cdHR5cGUgTmd0VmVjdG9yMyxcbn0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBOZ3RzU29iYUNvbnRlbnQgfSBmcm9tICdhbmd1bGFyLXRocmVlLXNvYmEvdXRpbHMnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgR3JvdXAsIE1lc2gsIFBsYW5lR2VvbWV0cnksIFNoYWRlck1hdGVyaWFsIH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgTmd0c0h0bWxXcmFwcGVyLCBkZWZhdWx0Q2FsY3VsYXRlUG9zaXRpb24gfSBmcm9tICcuL2h0bWwtd3JhcHBlcic7XG5cbmV4dGVuZCh7IEdyb3VwLCBQbGFuZUdlb21ldHJ5LCBNZXNoLCBTaGFkZXJNYXRlcmlhbCB9KTtcblxudHlwZSBQb2ludGVyRXZlbnRzUHJvcGVydGllcyA9XG5cdHwgJ2F1dG8nXG5cdHwgJ25vbmUnXG5cdHwgJ3Zpc2libGVQYWludGVkJ1xuXHR8ICd2aXNpYmxlRmlsbCdcblx0fCAndmlzaWJsZVN0cm9rZSdcblx0fCAndmlzaWJsZSdcblx0fCAncGFpbnRlZCdcblx0fCAnZmlsbCdcblx0fCAnc3Ryb2tlJ1xuXHR8ICdhbGwnXG5cdHwgJ2luaGVyaXQnO1xuXG5leHBvcnQgdHlwZSBOZ3RzSHRtbFN0YXRlID0ge1xuXHRhczoga2V5b2YgSFRNTEVsZW1lbnRUYWdOYW1lTWFwO1xuXHRwcmVwZW5kOiBib29sZWFuO1xuXHR0cmFuc2Zvcm06IGJvb2xlYW47XG5cdHpJbmRleFJhbmdlOiBBcnJheTxudW1iZXI+O1xuXHRjYWxjdWxhdGVQb3NpdGlvbjogdHlwZW9mIGRlZmF1bHRDYWxjdWxhdGVQb3NpdGlvbjtcblx0ZnVsbHNjcmVlbjogYm9vbGVhbjtcblx0Y2VudGVyOiBib29sZWFuO1xuXHRzcHJpdGU6IGJvb2xlYW47XG5cdHBvaW50ZXJFdmVudHM6IFBvaW50ZXJFdmVudHNQcm9wZXJ0aWVzO1xuXHRlcHM6IG51bWJlcjtcblx0c2NhbGU6IE5ndFZlY3RvcjM7XG5cdGNvbnRlbnQ/OiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblx0ZGlzdGFuY2VGYWN0b3I/OiBudW1iZXI7XG5cdHN0eWxlPzogQ1NTU3R5bGVEZWNsYXJhdGlvbjtcblx0cmVuZGVyZWREaXZDbGFzcz86IHN0cmluZztcblx0d3JhcHBlckNsYXNzPzogc3RyaW5nO1xuXHRwb3J0YWw/OiBOZ3RSZWY8SFRNTEVsZW1lbnQ+O1xuXHRvY2NsdWRlOiBOZ3RSZWY8VEhSRUUuT2JqZWN0M0Q+W10gfCBib29sZWFuIHwgJ3JheWNhc3QnIHwgJ2JsZW5kaW5nJztcblx0bWF0ZXJpYWw/OiBOZ3RSZWY8VEhSRUUuTWF0ZXJpYWw+O1xuXHRnZW9tZXRyeT86IE5ndFJlZjxUSFJFRS5CdWZmZXJHZW9tZXRyeT47XG5cdGNhc3RTaGFkb3c6IGJvb2xlYW47IC8vIENhc3Qgc2hhZG93IGZvciBvY2NsdXNpb24gcGxhbmVcblx0cmVjZWl2ZVNoYWRvdzogYm9vbGVhbjsgLy8gUmVjZWl2ZSBzaGFkb3cgZm9yIG9jY2x1c2lvbiBwbGFuZVxufTtcblxuZXhwb3J0IGNvbnN0IFtpbmplY3ROZ3RzSHRtbElucHV0cywgcHJvdmlkZU5ndHNIdG1sSW5wdXRzXSA9IGNyZWF0ZUluamVjdGlvblRva2VuKFxuXHQoaHRtbDogTmd0c0h0bWwpID0+ICh7IHN0YXRlOiBodG1sLmlucHV0cy5zdGF0ZSwgLi4uaHRtbC5zdGF0ZSB9KSxcblx0eyBpc1Jvb3Q6IGZhbHNlLCBkZXBzOiBbZm9yd2FyZFJlZigoKSA9PiBOZ3RzSHRtbCldIH0sXG4pO1xuXG5kZWNsYXJlIGdsb2JhbCB7XG5cdGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuXHRcdC8qKlxuXHRcdCAqIEBleHRlbmRzIG5ndC1ncm91cFxuXHRcdCAqL1xuXHRcdCduZ3RzLWh0bWwnOiBOZ3RzSHRtbFN0YXRlICYgTmd0R3JvdXA7XG5cdH1cbn1cblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cy1odG1sJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0LWdyb3VwIG5ndENvbXBvdW5kIFtyZWZdPVwiZ3JvdXBSZWZcIiBbc2NhbGVdPVwic2NhbGUoKVwiPlxuXHRcdFx0PG5ndC1tZXNoXG5cdFx0XHRcdCpuZ0lmPVwib2NjbHVkZSgpICYmICFpc1JheUNhc3RPY2NsdXNpb24oKVwiXG5cdFx0XHRcdFtjYXN0U2hhZG93XT1cImNhc3RTaGFkb3coKVwiXG5cdFx0XHRcdFtyZWNlaXZlU2hhZG93XT1cInJlY2VpdmVTaGFkb3coKVwiXG5cdFx0XHRcdFtyZWZdPVwib2NjbHVzaW9uTWVzaFJlZlwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxuZ3QtcGxhbmUtZ2VvbWV0cnkgKm5nSWY9XCJnZW9tZXRyeSgpXCIgLz5cblx0XHRcdFx0PG5ndC1zaGFkZXItbWF0ZXJpYWxcblx0XHRcdFx0XHQqbmdJZj1cIm1hdGVyaWFsKClcIlxuXHRcdFx0XHRcdFtzaWRlXT1cIkRvdWJsZVNpZGVcIlxuXHRcdFx0XHRcdFt2ZXJ0ZXhTaGFkZXJdPVwic2hhZGVycygpLnZlcnRleFNoYWRlclwiXG5cdFx0XHRcdFx0W2ZyYWdtZW50U2hhZGVyXT1cInNoYWRlcnMoKS5mcmFnbWVudFNoYWRlclwiXG5cdFx0XHRcdC8+XG5cdFx0XHQ8L25ndC1tZXNoPlxuXHRcdDwvbmd0LWdyb3VwPlxuXG5cdFx0PG5ndHMtaHRtbC13cmFwcGVyIC8+XG5cdGAsXG5cdGltcG9ydHM6IFtOZ0lmLCBOZ3RzSHRtbFdyYXBwZXJdLFxuXHRwcm92aWRlcnM6IFtwcm92aWRlTmd0c0h0bWxJbnB1dHMoKV0sXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c0h0bWwge1xuXHREb3VibGVTaWRlID0gVEhSRUUuRG91YmxlU2lkZTtcblxuXHRpbnB1dHMgPSBzaWduYWxTdG9yZTxOZ3RzSHRtbFN0YXRlPih7XG5cdFx0YXM6ICdkaXYnLFxuXHRcdHByZXBlbmQ6IGZhbHNlLFxuXHRcdHRyYW5zZm9ybTogZmFsc2UsXG5cdFx0ZnVsbHNjcmVlbjogZmFsc2UsXG5cdFx0Y2VudGVyOiBmYWxzZSxcblx0XHRzcHJpdGU6IGZhbHNlLFxuXHRcdHpJbmRleFJhbmdlOiBbMTY3NzcyNzEsIDBdLFxuXHRcdGVwczogMC4wMDEsXG5cdFx0c2NhbGU6IDEsXG5cdFx0Y2FsY3VsYXRlUG9zaXRpb246IGRlZmF1bHRDYWxjdWxhdGVQb3NpdGlvbixcblx0XHRwb2ludGVyRXZlbnRzOiAnYXV0bycsXG5cdFx0b2NjbHVkZTogZmFsc2UsXG5cdFx0Y2FzdFNoYWRvdzogZmFsc2UsXG5cdFx0cmVjZWl2ZVNoYWRvdzogZmFsc2UsXG5cdH0pO1xuXG5cdEBDb250ZW50Q2hpbGQoTmd0c1NvYmFDb250ZW50LCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pIHNldCBjb250ZW50KGNvbnRlbnQ6IFRlbXBsYXRlUmVmPHVua25vd24+KSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgY29udGVudCB9KTtcblx0fVxuXG5cdEBJbnB1dCgpIGdyb3VwUmVmID0gaW5qZWN0Tmd0UmVmPEdyb3VwPigpO1xuXG5cdEBJbnB1dCh7IGFsaWFzOiAnYXMnIH0pIHNldCBfYXMoYXM6IGtleW9mIEhUTUxFbGVtZW50VGFnTmFtZU1hcCkge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IGFzIH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICd6SW5kZXhSYW5nZScgfSkgc2V0IF96SW5kZXhSYW5nZSh6SW5kZXhSYW5nZTogQXJyYXk8bnVtYmVyPikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IHpJbmRleFJhbmdlIH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICdwb3J0YWwnIH0pIHNldCBfcG9ydGFsKHBvcnRhbDogTmd0UmVmPEhUTUxFbGVtZW50Pikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IHBvcnRhbCB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnb2NjbHVkZScgfSkgc2V0IF9vY2NsdWRlKG9jY2x1ZGU6IE5ndHNIdG1sU3RhdGVbJ29jY2x1ZGUnXSkge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IG9jY2x1ZGUgfSk7XG5cdH1cblxuXHRASW5wdXQoeyBhbGlhczogJ2Nhc3RTaGFkb3cnIH0pIHNldCBfY2FzdFNoYWRvdyhjYXN0U2hhZG93OiBOZ3RzSHRtbFN0YXRlWydjYXN0U2hhZG93J10pIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBjYXN0U2hhZG93IH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICdyZWNlaXZlU2hhZG93JyB9KSBzZXQgX3JlY2VpdmVTaGFkb3cocmVjZWl2ZVNoYWRvdzogTmd0c0h0bWxTdGF0ZVsncmVjZWl2ZVNoYWRvdyddKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgcmVjZWl2ZVNoYWRvdyB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnbWF0ZXJpYWwnIH0pIHNldCBfbWF0ZXJpYWwobWF0ZXJpYWw6IE5ndHNIdG1sU3RhdGVbJ21hdGVyaWFsJ10pIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBtYXRlcmlhbCB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnZ2VvbWV0cnknIH0pIHNldCBfZ2VvbWV0cnkoZ2VvbWV0cnk6IE5ndHNIdG1sU3RhdGVbJ2dlb21ldHJ5J10pIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBnZW9tZXRyeSB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnc2NhbGUnIH0pIHNldCBfc2NhbGUoc2NhbGU6IE5ndHNIdG1sU3RhdGVbJ3NjYWxlJ10pIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBzY2FsZSB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAncHJlcGVuZCcgfSkgc2V0IF9wcmVwZW5kKHByZXBlbmQ6IGJvb2xlYW4pIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBwcmVwZW5kIH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICd0cmFuc2Zvcm0nIH0pIHNldCBfdHJhbnNmb3JtKHRyYW5zZm9ybTogYm9vbGVhbikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IHRyYW5zZm9ybSB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnY2VudGVyJyB9KSBzZXQgX2NlbnRlcihjZW50ZXI6IGJvb2xlYW4pIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBjZW50ZXIgfSk7XG5cdH1cblxuXHRASW5wdXQoeyBhbGlhczogJ3Nwcml0ZScgfSkgc2V0IF9zcHJpdGUoc3ByaXRlOiBib29sZWFuKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgc3ByaXRlIH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICdmdWxsc2NyZWVuJyB9KSBzZXQgX2Z1bGxzY3JlZW4oZnVsbHNjcmVlbjogYm9vbGVhbikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IGZ1bGxzY3JlZW4gfSk7XG5cdH1cblxuXHRASW5wdXQoeyBhbGlhczogJ2VwcycgfSkgc2V0IF9lcHMoZXBzOiBudW1iZXIpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBlcHMgfSk7XG5cdH1cblxuXHRASW5wdXQoeyBhbGlhczogJ2Rpc3RhbmNlRmFjdG9yJyB9KSBzZXQgX2Rpc3RhbmNlRmFjdG9yKGRpc3RhbmNlRmFjdG9yOiBudW1iZXIpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBkaXN0YW5jZUZhY3RvciB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnd3JhcHBlckNsYXNzJyB9KSBzZXQgX3dyYXBwZXJDbGFzcyh3cmFwcGVyQ2xhc3M6IHN0cmluZykge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IHdyYXBwZXJDbGFzcyB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAncmVuZGVyZWREaXZDbGFzcycgfSkgc2V0IF9yZW5kZXJlZERpdkNsYXNzKHJlbmRlcmVkRGl2Q2xhc3M6IHN0cmluZykge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IHJlbmRlcmVkRGl2Q2xhc3MgfSk7XG5cdH1cblxuXHRASW5wdXQoeyBhbGlhczogJ3N0eWxlJyB9KSBzZXQgX3N0eWxlKHN0eWxlOiBDU1NTdHlsZURlY2xhcmF0aW9uKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgc3R5bGUgfSk7XG5cdH1cblxuXHRASW5wdXQoeyBhbGlhczogJ3BvaW50ZXJFdmVudHMnIH0pIHNldCBfcG9pbnRlckV2ZW50cyhwb2ludGVyRXZlbnRzOiBQb2ludGVyRXZlbnRzUHJvcGVydGllcykge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IHBvaW50ZXJFdmVudHMgfSk7XG5cdH1cblxuXHRASW5wdXQoeyBhbGlhczogJ2NhbGN1bGF0ZVBvc2l0aW9uJyB9KSBzZXQgX2NhbGN1bGF0ZVBvc2l0aW9uKFxuXHRcdGNhbGN1bGF0ZVBvc2l0aW9uOiBOZ3RzSHRtbFN0YXRlWydjYWxjdWxhdGVQb3NpdGlvbiddLFxuXHQpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBjYWxjdWxhdGVQb3NpdGlvbiB9KTtcblx0fVxuXG5cdEBPdXRwdXQoKSBvY2NsdWRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuXHRvY2NsdXNpb25NZXNoUmVmID0gaW5qZWN0Tmd0UmVmPE1lc2g+KCk7XG5cblx0cHJpdmF0ZSB0cmFuc2Zvcm0gPSB0aGlzLmlucHV0cy5zZWxlY3QoJ3RyYW5zZm9ybScpO1xuXG5cdGlzUmF5Q2FzdE9jY2x1c2lvbiA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCBvY2NsdWRlID0gdGhpcy5vY2NsdWRlKCk7XG5cdFx0cmV0dXJuIChcblx0XHRcdChvY2NsdWRlICYmIG9jY2x1ZGUgIT09ICdibGVuZGluZycpIHx8IChBcnJheS5pc0FycmF5KG9jY2x1ZGUpICYmICEhb2NjbHVkZS5sZW5ndGggJiYgaXMucmVmKG9jY2x1ZGVbMF0pKVxuXHRcdCk7XG5cdH0pO1xuXG5cdG9jY2x1ZGUgPSB0aGlzLmlucHV0cy5zZWxlY3QoJ29jY2x1ZGUnKTtcblx0Y2FzdFNoYWRvdyA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnY2FzdFNoYWRvdycpO1xuXHRyZWNlaXZlU2hhZG93ID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdyZWNlaXZlU2hhZG93Jyk7XG5cdGdlb21ldHJ5ID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdnZW9tZXRyeScpO1xuXHRtYXRlcmlhbCA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnbWF0ZXJpYWwnKTtcblx0c2NhbGUgPSB0aGlzLmlucHV0cy5zZWxlY3QoJ3NjYWxlJyk7XG5cblx0c2hhZGVycyA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCB0cmFuc2Zvcm0gPSB0aGlzLnRyYW5zZm9ybSgpO1xuXHRcdHJldHVybiB7XG5cdFx0XHR2ZXJ0ZXhTaGFkZXI6ICF0cmFuc2Zvcm1cblx0XHRcdFx0PyAvKiBnbHNsICovIGBcbiAgICAgICAgICAvKlxuICAgICAgICAgICAgVGhpcyBzaGFkZXIgaXMgZnJvbSB0aGUgVEhSRUUncyBTcHJpdGVNYXRlcmlhbC5cbiAgICAgICAgICAgIFdlIG5lZWQgdG8gdHVybiB0aGUgYmFja2luZyBwbGFuZSBpbnRvIGEgU3ByaXRlXG4gICAgICAgICAgICAobWFrZSBpdCBhbHdheXMgZmFjZSB0aGUgY2FtZXJhKSBpZiBcInRyYW5zZnJvbVwiXG4gICAgICAgICAgICBpcyBmYWxzZS5cbiAgICAgICAgICAqL1xuICAgICAgICAgICNpbmNsdWRlIDxjb21tb24+XG5cbiAgICAgICAgICB2b2lkIG1haW4oKSB7XG4gICAgICAgICAgICB2ZWMyIGNlbnRlciA9IHZlYzIoMC4sIDEuKTtcbiAgICAgICAgICAgIGZsb2F0IHJvdGF0aW9uID0gMC4wO1xuXG4gICAgICAgICAgICAvLyBUaGlzIGlzIHNvbWV3aGF0IGFyYml0cmFyeSwgYnV0IGl0IHNlZW1zIHRvIHdvcmsgd2VsbFxuICAgICAgICAgICAgLy8gTmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBkZXJpdmUgdGhpcyBkeW5hbWljYWxseSBpZiBpdCBldmVuIG1hdHRlcnNcbiAgICAgICAgICAgIGZsb2F0IHNpemUgPSAwLjAzO1xuXG4gICAgICAgICAgICB2ZWM0IG12UG9zaXRpb24gPSBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCAwLjAsIDAuMCwgMC4wLCAxLjAgKTtcbiAgICAgICAgICAgIHZlYzIgc2NhbGU7XG4gICAgICAgICAgICBzY2FsZS54ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMCBdLngsIG1vZGVsTWF0cml4WyAwIF0ueSwgbW9kZWxNYXRyaXhbIDAgXS56ICkgKTtcbiAgICAgICAgICAgIHNjYWxlLnkgPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAxIF0ueCwgbW9kZWxNYXRyaXhbIDEgXS55LCBtb2RlbE1hdHJpeFsgMSBdLnogKSApO1xuXG4gICAgICAgICAgICBib29sIGlzUGVyc3BlY3RpdmUgPSBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICk7XG4gICAgICAgICAgICBpZiAoIGlzUGVyc3BlY3RpdmUgKSBzY2FsZSAqPSAtIG12UG9zaXRpb24uejtcblxuICAgICAgICAgICAgdmVjMiBhbGlnbmVkUG9zaXRpb24gPSAoIHBvc2l0aW9uLnh5IC0gKCBjZW50ZXIgLSB2ZWMyKCAwLjUgKSApICkgKiBzY2FsZSAqIHNpemU7XG4gICAgICAgICAgICB2ZWMyIHJvdGF0ZWRQb3NpdGlvbjtcbiAgICAgICAgICAgIHJvdGF0ZWRQb3NpdGlvbi54ID0gY29zKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnggLSBzaW4oIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueTtcbiAgICAgICAgICAgIHJvdGF0ZWRQb3NpdGlvbi55ID0gc2luKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnggKyBjb3MoIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueTtcbiAgICAgICAgICAgIG12UG9zaXRpb24ueHkgKz0gcm90YXRlZFBvc2l0aW9uO1xuXG4gICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uO1xuICAgICAgICAgIH1cbiAgICAgIGBcblx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRmcmFnbWVudFNoYWRlcjogLyogZ2xzbCAqLyBgXG4gICAgICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDAuMCk7XG4gICAgICAgIH1cbiAgICAgIGAsXG5cdFx0fTtcblx0fSk7XG5cblx0c3RhdGUgPSB7XG5cdFx0ekluZGV4UmFuZ2U6IHRoaXMuaW5wdXRzLnNlbGVjdCgnekluZGV4UmFuZ2UnKSxcblx0XHRwcmVwZW5kOiB0aGlzLmlucHV0cy5zZWxlY3QoJ3ByZXBlbmQnKSxcblx0XHR0cmFuc2Zvcm06IHRoaXMudHJhbnNmb3JtLFxuXHRcdGNlbnRlcjogdGhpcy5pbnB1dHMuc2VsZWN0KCdjZW50ZXInKSxcblx0XHRmdWxsc2NyZWVuOiB0aGlzLmlucHV0cy5zZWxlY3QoJ2Z1bGxzY3JlZW4nKSxcblx0XHRjYWxjdWxhdGVQb3NpdGlvbjogdGhpcy5pbnB1dHMuc2VsZWN0KCdjYWxjdWxhdGVQb3NpdGlvbicpLFxuXHRcdHdyYXBwZXJDbGFzczogdGhpcy5pbnB1dHMuc2VsZWN0KCd3cmFwcGVyQ2xhc3MnKSxcblx0XHRyZW5kZXJlZERpdkNsYXNzOiB0aGlzLmlucHV0cy5zZWxlY3QoJ3JlbmRlcmVkRGl2Q2xhc3MnKSxcblx0XHRzdHlsZTogdGhpcy5pbnB1dHMuc2VsZWN0KCdzdHlsZScpLFxuXHRcdHBvaW50ZXJFdmVudHM6IHRoaXMuaW5wdXRzLnNlbGVjdCgncG9pbnRlckV2ZW50cycpLFxuXHRcdGVwczogdGhpcy5pbnB1dHMuc2VsZWN0KCdlcHMnKSxcblx0XHRkaXN0YW5jZUZhY3RvcjogdGhpcy5pbnB1dHMuc2VsZWN0KCdkaXN0YW5jZUZhY3RvcicpLFxuXHRcdHNwcml0ZTogdGhpcy5pbnB1dHMuc2VsZWN0KCdzcHJpdGUnKSxcblx0XHRhczogdGhpcy5pbnB1dHMuc2VsZWN0KCdhcycpLFxuXHRcdHBvcnRhbDogdGhpcy5pbnB1dHMuc2VsZWN0KCdwb3J0YWwnKSxcblx0XHRjb250ZW50OiB0aGlzLmlucHV0cy5zZWxlY3QoJ2NvbnRlbnQnKSxcblx0XHRvY2NsdWRlOiB0aGlzLm9jY2x1ZGUsXG5cdFx0aXNSYXlDYXN0T2NjbHVzaW9uOiB0aGlzLmlzUmF5Q2FzdE9jY2x1c2lvbixcblx0XHRvY2NsdXNpb25NZXNoUmVmOiB0aGlzLm9jY2x1c2lvbk1lc2hSZWYsXG5cdFx0b2NjbHVkZWQ6IHRoaXMub2NjbHVkZWQsXG5cdFx0Z2VvbWV0cnk6IHRoaXMuZ2VvbWV0cnksXG5cdFx0c2NhbGU6IHRoaXMuc2NhbGUsXG5cdFx0Z3JvdXBSZWY6IHRoaXMuZ3JvdXBSZWYsXG5cdH07XG59XG4iXX0=
|
package/esm2022/misc/index.mjs
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
export * from './animations/animations';
|
|
2
2
|
export * from './bake-shadows/bake-shadows';
|
|
3
|
+
export * from './caustics/caustics';
|
|
4
|
+
export * from './decal/decal';
|
|
3
5
|
export * from './depth-buffer/depth-buffer';
|
|
6
|
+
export * from './example/example';
|
|
4
7
|
export * from './fbo/fbo';
|
|
5
|
-
|
|
8
|
+
export * from './html/html';
|
|
9
|
+
export * from './sampler/sampler';
|
|
10
|
+
export * from './shadow/shadow';
|
|
11
|
+
export * from './stats-gl/stats-gl';
|
|
12
|
+
export * from './trail-texture/inject-trail-texture';
|
|
13
|
+
export * from './trail/trail';
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvbWlzYy9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYyxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2FuaW1hdGlvbnMvYW5pbWF0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL2Jha2Utc2hhZG93cy9iYWtlLXNoYWRvd3MnO1xuZXhwb3J0ICogZnJvbSAnLi9jYXVzdGljcy9jYXVzdGljcyc7XG5leHBvcnQgKiBmcm9tICcuL2RlY2FsL2RlY2FsJztcbmV4cG9ydCAqIGZyb20gJy4vZGVwdGgtYnVmZmVyL2RlcHRoLWJ1ZmZlcic7XG5leHBvcnQgKiBmcm9tICcuL2V4YW1wbGUvZXhhbXBsZSc7XG5leHBvcnQgKiBmcm9tICcuL2Ziby9mYm8nO1xuZXhwb3J0ICogZnJvbSAnLi9odG1sL2h0bWwnO1xuZXhwb3J0ICogZnJvbSAnLi9zYW1wbGVyL3NhbXBsZXInO1xuZXhwb3J0ICogZnJvbSAnLi9zaGFkb3cvc2hhZG93JztcbmV4cG9ydCAqIGZyb20gJy4vc3RhdHMtZ2wvc3RhdHMtZ2wnO1xuZXhwb3J0ICogZnJvbSAnLi90cmFpbC10ZXh0dXJlL2luamVjdC10cmFpbC10ZXh0dXJlJztcbmV4cG9ydCAqIGZyb20gJy4vdHJhaWwvdHJhaWwnO1xuIl19
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { CUSTOM_ELEMENTS_SCHEMA, Component, Injector, Input, computed, effect, inject, runInInjectionContext, signal, untracked, } from '@angular/core';
|
|
2
|
+
import { assertInjectionContext, checkUpdate, extend, injectNgtRef, is, signalStore, } from 'angular-three';
|
|
3
|
+
import * as THREE from 'three';
|
|
4
|
+
import { Group } from 'three';
|
|
5
|
+
import { MeshSurfaceSampler } from 'three-stdlib';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
const defaultState = {
|
|
8
|
+
count: 16,
|
|
9
|
+
};
|
|
10
|
+
export function injectNgtsSurfaceSampler(surfaceSamplerState, { injector } = {}) {
|
|
11
|
+
injector = assertInjectionContext(injectNgtsSurfaceSampler, injector);
|
|
12
|
+
return runInInjectionContext(injector, () => {
|
|
13
|
+
const state = computed(() => {
|
|
14
|
+
const _state = surfaceSamplerState();
|
|
15
|
+
if (!_state)
|
|
16
|
+
return null;
|
|
17
|
+
return { ...defaultState, ..._state };
|
|
18
|
+
});
|
|
19
|
+
const _buffer = signal((() => {
|
|
20
|
+
const arr = Array.from({ length: state()?.count || defaultState.count }, () => [
|
|
21
|
+
1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1,
|
|
22
|
+
]).flat();
|
|
23
|
+
return new THREE.InstancedBufferAttribute(Float32Array.from(arr), 16);
|
|
24
|
+
})());
|
|
25
|
+
effect(() => {
|
|
26
|
+
const _state = state();
|
|
27
|
+
if (!_state)
|
|
28
|
+
return;
|
|
29
|
+
const { mesh, count, transform, instancedMesh, weight } = _state;
|
|
30
|
+
const meshObj = is.ref(mesh) ? mesh.nativeElement : mesh;
|
|
31
|
+
if (!meshObj)
|
|
32
|
+
return;
|
|
33
|
+
const instancedMeshObj = is.ref(instancedMesh) ? instancedMesh.nativeElement : instancedMesh;
|
|
34
|
+
const buffer = untracked(_buffer);
|
|
35
|
+
const sampler = new MeshSurfaceSampler(meshObj);
|
|
36
|
+
if (weight) {
|
|
37
|
+
sampler.setWeightAttribute(weight);
|
|
38
|
+
}
|
|
39
|
+
sampler.build();
|
|
40
|
+
const position = new THREE.Vector3();
|
|
41
|
+
const normal = new THREE.Vector3();
|
|
42
|
+
const color = new THREE.Color();
|
|
43
|
+
const dummy = new THREE.Object3D();
|
|
44
|
+
meshObj.updateMatrixWorld(true);
|
|
45
|
+
for (let i = 0; i < count; i++) {
|
|
46
|
+
sampler.sample(position, normal, color);
|
|
47
|
+
if (typeof transform === 'function') {
|
|
48
|
+
transform({ dummy, sampledMesh: meshObj, position, normal, color }, i);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
dummy.position.copy(position);
|
|
52
|
+
}
|
|
53
|
+
dummy.updateMatrix();
|
|
54
|
+
if (instancedMeshObj) {
|
|
55
|
+
instancedMeshObj.setMatrixAt(i, dummy.matrix);
|
|
56
|
+
}
|
|
57
|
+
dummy.matrix.toArray(buffer.array, i * 16);
|
|
58
|
+
}
|
|
59
|
+
if (instancedMeshObj) {
|
|
60
|
+
checkUpdate(instancedMeshObj.instanceMatrix);
|
|
61
|
+
}
|
|
62
|
+
checkUpdate(buffer);
|
|
63
|
+
untracked(() => {
|
|
64
|
+
_buffer.set(buffer.clone());
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
return _buffer.asReadonly();
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
extend({ Group });
|
|
71
|
+
export class NgtsSampler {
|
|
72
|
+
set _count(count) {
|
|
73
|
+
this.inputs.set({ count });
|
|
74
|
+
}
|
|
75
|
+
set _mesh(mesh) {
|
|
76
|
+
this.inputs.set({ mesh });
|
|
77
|
+
}
|
|
78
|
+
set _transform(transform) {
|
|
79
|
+
this.inputs.set({ transform });
|
|
80
|
+
}
|
|
81
|
+
set _weight(weight) {
|
|
82
|
+
this.inputs.set({ weight });
|
|
83
|
+
}
|
|
84
|
+
set _instancedMesh(instancedMesh) {
|
|
85
|
+
this.inputs.set({ instancedMesh });
|
|
86
|
+
}
|
|
87
|
+
constructor() {
|
|
88
|
+
this.inputs = signalStore({ count: 16 });
|
|
89
|
+
this.samplerRef = injectNgtRef();
|
|
90
|
+
this.surfaceSamplerState = computed(() => {
|
|
91
|
+
const sampler = this.samplerRef.nativeElement;
|
|
92
|
+
if (!sampler)
|
|
93
|
+
return null;
|
|
94
|
+
const { count, weight, transform, mesh, instancedMesh } = this.inputs.state();
|
|
95
|
+
const instancedMeshRef = instancedMesh ??
|
|
96
|
+
sampler.children.find((child) => child.hasOwnProperty('instanceMatrix'));
|
|
97
|
+
const meshRef = mesh ?? sampler.children.find((child) => child.type === 'Mesh');
|
|
98
|
+
return { count, weight, transform, mesh: meshRef, instancedMesh: instancedMeshRef };
|
|
99
|
+
});
|
|
100
|
+
const injector = inject(Injector);
|
|
101
|
+
effect(() => {
|
|
102
|
+
injectNgtsSurfaceSampler(this.surfaceSamplerState, { injector });
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: NgtsSampler, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
106
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.2", type: NgtsSampler, isStandalone: true, selector: "ngts-sampler", inputs: { samplerRef: "samplerRef", _count: ["count", "_count"], _mesh: ["mesh", "_mesh"], _transform: ["transform", "_transform"], _weight: ["weight", "_weight"], _instancedMesh: ["instancedMesh", "_instancedMesh"] }, ngImport: i0, template: `
|
|
107
|
+
<ngt-group ngtCompound [ref]="samplerRef">
|
|
108
|
+
<ng-content />
|
|
109
|
+
</ngt-group>
|
|
110
|
+
`, isInline: true }); }
|
|
111
|
+
}
|
|
112
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: NgtsSampler, decorators: [{
|
|
113
|
+
type: Component,
|
|
114
|
+
args: [{
|
|
115
|
+
selector: 'ngts-sampler',
|
|
116
|
+
standalone: true,
|
|
117
|
+
template: `
|
|
118
|
+
<ngt-group ngtCompound [ref]="samplerRef">
|
|
119
|
+
<ng-content />
|
|
120
|
+
</ngt-group>
|
|
121
|
+
`,
|
|
122
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
123
|
+
}]
|
|
124
|
+
}], ctorParameters: function () { return []; }, propDecorators: { samplerRef: [{
|
|
125
|
+
type: Input
|
|
126
|
+
}], _count: [{
|
|
127
|
+
type: Input,
|
|
128
|
+
args: [{ alias: 'count' }]
|
|
129
|
+
}], _mesh: [{
|
|
130
|
+
type: Input,
|
|
131
|
+
args: [{ alias: 'mesh' }]
|
|
132
|
+
}], _transform: [{
|
|
133
|
+
type: Input,
|
|
134
|
+
args: [{ alias: 'transform' }]
|
|
135
|
+
}], _weight: [{
|
|
136
|
+
type: Input,
|
|
137
|
+
args: [{ alias: 'weight' }]
|
|
138
|
+
}], _instancedMesh: [{
|
|
139
|
+
type: Input,
|
|
140
|
+
args: [{ alias: 'instancedMesh' }]
|
|
141
|
+
}] } });
|
|
142
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FtcGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9taXNjL3NyYy9zYW1wbGVyL3NhbXBsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLHNCQUFzQixFQUN0QixTQUFTLEVBQ1QsUUFBUSxFQUNSLEtBQUssRUFDTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLE1BQU0sRUFDTixxQkFBcUIsRUFDckIsTUFBTSxFQUNOLFNBQVMsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ04sc0JBQXNCLEVBQ3RCLFdBQVcsRUFDWCxNQUFNLEVBQ04sWUFBWSxFQUNaLEVBQUUsRUFDRixXQUFXLEdBR1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUM5QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7O0FBMENsRCxNQUFNLFlBQVksR0FBMEM7SUFDM0QsS0FBSyxFQUFFLEVBQUU7Q0FDVCxDQUFDO0FBRUYsTUFBTSxVQUFVLHdCQUF3QixDQUN2QyxtQkFBaUgsRUFDakgsRUFBRSxRQUFRLEtBQThCLEVBQUU7SUFFMUMsUUFBUSxHQUFHLHNCQUFzQixDQUFDLHdCQUF3QixFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3RFLE9BQU8scUJBQXFCLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRTtRQUMzQyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQzNCLE1BQU0sTUFBTSxHQUFHLG1CQUFtQixFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDLE1BQU07Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFDekIsT0FBTyxFQUFFLEdBQUcsWUFBWSxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQ3JCLENBQUMsR0FBRyxFQUFFO1lBQ0wsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLElBQUksWUFBWSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO2dCQUM5RSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO2FBQzlDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLE9BQU8sSUFBSSxLQUFLLENBQUMsd0JBQXdCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN2RSxDQUFDLENBQUMsRUFBRSxDQUNKLENBQUM7UUFFRixNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1gsTUFBTSxNQUFNLEdBQUcsS0FBSyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLE1BQU07Z0JBQUUsT0FBTztZQUNwQixNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQztZQUNqRSxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDekQsSUFBSSxDQUFDLE9BQU87Z0JBQUUsT0FBTztZQUNyQixNQUFNLGdCQUFnQixHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztZQUM3RixNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFbEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUVoRCxJQUFJLE1BQU0sRUFBRTtnQkFDWCxPQUFPLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDbkM7WUFFRCxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7WUFFaEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDckMsTUFBTSxNQUFNLEdBQUcsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbkMsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDaEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFFbkMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBRWhDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQy9CLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFFeEMsSUFBSSxPQUFPLFNBQVMsS0FBSyxVQUFVLEVBQUU7b0JBQ3BDLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQ3ZFO3FCQUFNO29CQUNOLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUM5QjtnQkFFRCxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBRXJCLElBQUksZ0JBQWdCLEVBQUU7b0JBQ3JCLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUM5QztnQkFFRCxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQzthQUMzQztZQUVELElBQUksZ0JBQWdCLEVBQUU7Z0JBQ3JCLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsQ0FBQzthQUM3QztZQUVELFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUVwQixTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBb0MsQ0FBQyxDQUFDO1lBQy9ELENBQUMsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUM3QixDQUFDLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBcUJsQixNQUFNLE9BQU8sV0FBVztJQUt2QixJQUErQixNQUFNLENBQUMsS0FBYTtRQUNsRCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQThCLEtBQUssQ0FBQyxJQUF3QjtRQUMzRCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQW1DLFVBQVUsQ0FBQyxTQUF3QztRQUNyRixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQWdDLE9BQU8sQ0FBQyxNQUFjO1FBQ3JELElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBdUMsY0FBYyxDQUFDLGFBQTBDO1FBQy9GLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBZ0JEO1FBdENRLFdBQU0sR0FBRyxXQUFXLENBQTBCLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFNUQsZUFBVSxHQUFHLFlBQVksRUFBUyxDQUFDO1FBc0JwQyx3QkFBbUIsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQzNDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO1lBQzlDLElBQUksQ0FBQyxPQUFPO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQzFCLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUU5RSxNQUFNLGdCQUFnQixHQUNyQixhQUFhO2dCQUNaLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLENBQXlCLENBQUM7WUFFbkcsTUFBTSxPQUFPLEdBQUcsSUFBSSxJQUFLLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBZ0IsQ0FBQztZQUVoRyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQztRQUNyRixDQUFDLENBQUMsQ0FBQztRQUdGLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNsQyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1gsd0JBQXdCLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNsRSxDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7OEdBNUNXLFdBQVc7a0dBQVgsV0FBVyxtU0FQYjs7OztFQUlUOzsyRkFHVyxXQUFXO2tCQVZ2QixTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSxjQUFjO29CQUN4QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7O0VBSVQ7b0JBQ0QsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7aUJBQ2pDOzBFQUlTLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRXlCLE1BQU07c0JBQXBDLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO2dCQUlLLEtBQUs7c0JBQWxDLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO2dCQUlXLFVBQVU7c0JBQTVDLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFO2dCQUlHLE9BQU87c0JBQXRDLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO2dCQUlhLGNBQWM7c0JBQXBELEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcblx0Q29tcG9uZW50LFxuXHRJbmplY3Rvcixcblx0SW5wdXQsXG5cdGNvbXB1dGVkLFxuXHRlZmZlY3QsXG5cdGluamVjdCxcblx0cnVuSW5JbmplY3Rpb25Db250ZXh0LFxuXHRzaWduYWwsXG5cdHVudHJhY2tlZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuXHRhc3NlcnRJbmplY3Rpb25Db250ZXh0LFxuXHRjaGVja1VwZGF0ZSxcblx0ZXh0ZW5kLFxuXHRpbmplY3ROZ3RSZWYsXG5cdGlzLFxuXHRzaWduYWxTdG9yZSxcblx0dHlwZSBOZ3RHcm91cCxcblx0dHlwZSBOZ3RSZWYsXG59IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgR3JvdXAgfSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBNZXNoU3VyZmFjZVNhbXBsZXIgfSBmcm9tICd0aHJlZS1zdGRsaWInO1xuXG50eXBlIFNhbXBsZVBheWxvYWQgPSB7XG5cdC8qKlxuXHQgKiBUaGUgcG9zaXRpb24gb2YgdGhlIHNhbXBsZS5cblx0ICovXG5cdHBvc2l0aW9uOiBUSFJFRS5WZWN0b3IzO1xuXHQvKipcblx0ICogVGhlIG5vcm1hbCBvZiB0aGUgbWVzaCBhdCB0aGUgc2FtcGxlZCBwb3NpdGlvbi5cblx0ICovXG5cdG5vcm1hbDogVEhSRUUuVmVjdG9yMztcblx0LyoqXG5cdCAqIFRoZSB2ZXJ0ZXggY29sb3Igb2YgdGhlIG1lc2ggYXQgdGhlIHNhbXBsZWQgcG9zaXRpb24uXG5cdCAqL1xuXHRjb2xvcjogVEhSRUUuQ29sb3I7XG59O1xuXG50eXBlIFRyYW5zZm9ybVBheWxvYWQgPSBTYW1wbGVQYXlsb2FkICYge1xuXHQvKipcblx0ICogVGhlIGR1bW15IG9iamVjdCB1c2VkIHRvIHRyYW5zZm9ybSBlYWNoIGluc3RhbmNlLlxuXHQgKiBUaGlzIG9iamVjdCdzIG1hdHJpeCB3aWxsIGJlIHVwZGF0ZWQgYWZ0ZXIgdHJhbnNmb3JtaW5nICYgaXQgd2lsbCBiZSB1c2VkXG5cdCAqIHRvIHNldCB0aGUgaW5zdGFuY2UncyBtYXRyaXguXG5cdCAqL1xuXHRkdW1teTogVEhSRUUuT2JqZWN0M0Q7XG5cdC8qKlxuXHQgKiBUaGUgbWVzaCB0aGF0J3MgaW5pdGlhbGx5IHBhc3NlZCB0byB0aGUgc2FtcGxlci5cblx0ICogVXNlIHRoaXMgaWYgeW91IG5lZWQgdG8gYXBwbHkgdHJhbnNmb3JtcyBmcm9tIHlvdXIgbWVzaCB0byB5b3VyIGluc3RhbmNlc1xuXHQgKiBvciBpZiB5b3UgbmVlZCB0byBncmFiIGF0dHJpYnV0ZXMgZnJvbSB0aGUgZ2VvbWV0cnkuXG5cdCAqL1xuXHRzYW1wbGVkTWVzaDogVEhSRUUuTWVzaDtcbn07XG5cbmV4cG9ydCB0eXBlIE5ndHNTdXJmYWNlU2FtcGxlclRyYW5zZm9ybUZuID0gKHBheWxvYWQ6IFRyYW5zZm9ybVBheWxvYWQsIGk6IG51bWJlcikgPT4gdm9pZDtcblxuZXhwb3J0IHR5cGUgTmd0c1N1cmZhY2VTYW1wbGVyU3RhdGUgPSB7XG5cdGNvdW50OiBudW1iZXI7XG5cdG1lc2g6IE5ndFJlZjxUSFJFRS5NZXNoPjtcblx0dHJhbnNmb3JtPzogTmd0c1N1cmZhY2VTYW1wbGVyVHJhbnNmb3JtRm47XG5cdHdlaWdodD86IHN0cmluZztcblx0aW5zdGFuY2VkTWVzaD86IE5ndFJlZjxUSFJFRS5JbnN0YW5jZWRNZXNoPjtcbn07XG5cbmNvbnN0IGRlZmF1bHRTdGF0ZTogT21pdDxOZ3RzU3VyZmFjZVNhbXBsZXJTdGF0ZSwgJ21lc2gnPiA9IHtcblx0Y291bnQ6IDE2LFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdE5ndHNTdXJmYWNlU2FtcGxlcihcblx0c3VyZmFjZVNhbXBsZXJTdGF0ZTogKCkgPT4gKFBhcnRpYWw8T21pdDxOZ3RzU3VyZmFjZVNhbXBsZXJTdGF0ZSwgJ21lc2gnPj4gJiB7IG1lc2g6IE5ndFJlZjxUSFJFRS5NZXNoPiB9KSB8IG51bGwsXG5cdHsgaW5qZWN0b3IgfTogeyBpbmplY3Rvcj86IEluamVjdG9yIH0gPSB7fSxcbikge1xuXHRpbmplY3RvciA9IGFzc2VydEluamVjdGlvbkNvbnRleHQoaW5qZWN0Tmd0c1N1cmZhY2VTYW1wbGVyLCBpbmplY3Rvcik7XG5cdHJldHVybiBydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsICgpID0+IHtcblx0XHRjb25zdCBzdGF0ZSA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IF9zdGF0ZSA9IHN1cmZhY2VTYW1wbGVyU3RhdGUoKTtcblx0XHRcdGlmICghX3N0YXRlKSByZXR1cm4gbnVsbDtcblx0XHRcdHJldHVybiB7IC4uLmRlZmF1bHRTdGF0ZSwgLi4uX3N0YXRlIH07XG5cdFx0fSk7XG5cdFx0Y29uc3QgX2J1ZmZlciA9IHNpZ25hbChcblx0XHRcdCgoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGFyciA9IEFycmF5LmZyb20oeyBsZW5ndGg6IHN0YXRlKCk/LmNvdW50IHx8IGRlZmF1bHRTdGF0ZS5jb3VudCB9LCAoKSA9PiBbXG5cdFx0XHRcdFx0MSwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMSxcblx0XHRcdFx0XSkuZmxhdCgpO1xuXHRcdFx0XHRyZXR1cm4gbmV3IFRIUkVFLkluc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZShGbG9hdDMyQXJyYXkuZnJvbShhcnIpLCAxNik7XG5cdFx0XHR9KSgpLFxuXHRcdCk7XG5cblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0Y29uc3QgX3N0YXRlID0gc3RhdGUoKTtcblx0XHRcdGlmICghX3N0YXRlKSByZXR1cm47XG5cdFx0XHRjb25zdCB7IG1lc2gsIGNvdW50LCB0cmFuc2Zvcm0sIGluc3RhbmNlZE1lc2gsIHdlaWdodCB9ID0gX3N0YXRlO1xuXHRcdFx0Y29uc3QgbWVzaE9iaiA9IGlzLnJlZihtZXNoKSA/IG1lc2gubmF0aXZlRWxlbWVudCA6IG1lc2g7XG5cdFx0XHRpZiAoIW1lc2hPYmopIHJldHVybjtcblx0XHRcdGNvbnN0IGluc3RhbmNlZE1lc2hPYmogPSBpcy5yZWYoaW5zdGFuY2VkTWVzaCkgPyBpbnN0YW5jZWRNZXNoLm5hdGl2ZUVsZW1lbnQgOiBpbnN0YW5jZWRNZXNoO1xuXHRcdFx0Y29uc3QgYnVmZmVyID0gdW50cmFja2VkKF9idWZmZXIpO1xuXG5cdFx0XHRjb25zdCBzYW1wbGVyID0gbmV3IE1lc2hTdXJmYWNlU2FtcGxlcihtZXNoT2JqKTtcblxuXHRcdFx0aWYgKHdlaWdodCkge1xuXHRcdFx0XHRzYW1wbGVyLnNldFdlaWdodEF0dHJpYnV0ZSh3ZWlnaHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRzYW1wbGVyLmJ1aWxkKCk7XG5cblx0XHRcdGNvbnN0IHBvc2l0aW9uID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcblx0XHRcdGNvbnN0IG5vcm1hbCA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XG5cdFx0XHRjb25zdCBjb2xvciA9IG5ldyBUSFJFRS5Db2xvcigpO1xuXHRcdFx0Y29uc3QgZHVtbXkgPSBuZXcgVEhSRUUuT2JqZWN0M0QoKTtcblxuXHRcdFx0bWVzaE9iai51cGRhdGVNYXRyaXhXb3JsZCh0cnVlKTtcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG5cdFx0XHRcdHNhbXBsZXIuc2FtcGxlKHBvc2l0aW9uLCBub3JtYWwsIGNvbG9yKTtcblxuXHRcdFx0XHRpZiAodHlwZW9mIHRyYW5zZm9ybSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdHRyYW5zZm9ybSh7IGR1bW15LCBzYW1wbGVkTWVzaDogbWVzaE9iaiwgcG9zaXRpb24sIG5vcm1hbCwgY29sb3IgfSwgaSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZHVtbXkucG9zaXRpb24uY29weShwb3NpdGlvbik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkdW1teS51cGRhdGVNYXRyaXgoKTtcblxuXHRcdFx0XHRpZiAoaW5zdGFuY2VkTWVzaE9iaikge1xuXHRcdFx0XHRcdGluc3RhbmNlZE1lc2hPYmouc2V0TWF0cml4QXQoaSwgZHVtbXkubWF0cml4KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGR1bW15Lm1hdHJpeC50b0FycmF5KGJ1ZmZlci5hcnJheSwgaSAqIDE2KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGluc3RhbmNlZE1lc2hPYmopIHtcblx0XHRcdFx0Y2hlY2tVcGRhdGUoaW5zdGFuY2VkTWVzaE9iai5pbnN0YW5jZU1hdHJpeCk7XG5cdFx0XHR9XG5cblx0XHRcdGNoZWNrVXBkYXRlKGJ1ZmZlcik7XG5cblx0XHRcdHVudHJhY2tlZCgoKSA9PiB7XG5cdFx0XHRcdF9idWZmZXIuc2V0KGJ1ZmZlci5jbG9uZSgpIGFzIFRIUkVFLkluc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZSk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdHJldHVybiBfYnVmZmVyLmFzUmVhZG9ubHkoKTtcblx0fSk7XG59XG5cbmV4dGVuZCh7IEdyb3VwIH0pO1xuXG5kZWNsYXJlIGdsb2JhbCB7XG5cdGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuXHRcdC8qKlxuXHRcdCAqIEBleHRlbmRzIG5ndC1ncm91cFxuXHRcdCAqL1xuXHRcdCduZ3RzLXNhbXBsZXInOiBOZ3RzU3VyZmFjZVNhbXBsZXJTdGF0ZSAmIE5ndEdyb3VwO1xuXHR9XG59XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHMtc2FtcGxlcicsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5ndC1ncm91cCBuZ3RDb21wb3VuZCBbcmVmXT1cInNhbXBsZXJSZWZcIj5cblx0XHRcdDxuZy1jb250ZW50IC8+XG5cdFx0PC9uZ3QtZ3JvdXA+XG5cdGAsXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c1NhbXBsZXIge1xuXHRwcml2YXRlIGlucHV0cyA9IHNpZ25hbFN0b3JlPE5ndHNTdXJmYWNlU2FtcGxlclN0YXRlPih7IGNvdW50OiAxNiB9KTtcblxuXHRASW5wdXQoKSBzYW1wbGVyUmVmID0gaW5qZWN0Tmd0UmVmPEdyb3VwPigpO1xuXG5cdEBJbnB1dCh7IGFsaWFzOiAnY291bnQnIH0pIHNldCBfY291bnQoY291bnQ6IG51bWJlcikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IGNvdW50IH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICdtZXNoJyB9KSBzZXQgX21lc2gobWVzaDogTmd0UmVmPFRIUkVFLk1lc2g+KSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgbWVzaCB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAndHJhbnNmb3JtJyB9KSBzZXQgX3RyYW5zZm9ybSh0cmFuc2Zvcm06IE5ndHNTdXJmYWNlU2FtcGxlclRyYW5zZm9ybUZuKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgdHJhbnNmb3JtIH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICd3ZWlnaHQnIH0pIHNldCBfd2VpZ2h0KHdlaWdodDogc3RyaW5nKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgd2VpZ2h0IH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICdpbnN0YW5jZWRNZXNoJyB9KSBzZXQgX2luc3RhbmNlZE1lc2goaW5zdGFuY2VkTWVzaDogTmd0UmVmPFRIUkVFLkluc3RhbmNlZE1lc2g+KSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgaW5zdGFuY2VkTWVzaCB9KTtcblx0fVxuXG5cdHByaXZhdGUgc3VyZmFjZVNhbXBsZXJTdGF0ZSA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCBzYW1wbGVyID0gdGhpcy5zYW1wbGVyUmVmLm5hdGl2ZUVsZW1lbnQ7XG5cdFx0aWYgKCFzYW1wbGVyKSByZXR1cm4gbnVsbDtcblx0XHRjb25zdCB7IGNvdW50LCB3ZWlnaHQsIHRyYW5zZm9ybSwgbWVzaCwgaW5zdGFuY2VkTWVzaCB9ID0gdGhpcy5pbnB1dHMuc3RhdGUoKTtcblxuXHRcdGNvbnN0IGluc3RhbmNlZE1lc2hSZWYgPVxuXHRcdFx0aW5zdGFuY2VkTWVzaCA/P1xuXHRcdFx0KHNhbXBsZXIuY2hpbGRyZW4uZmluZCgoY2hpbGQpID0+IGNoaWxkLmhhc093blByb3BlcnR5KCdpbnN0YW5jZU1hdHJpeCcpKSBhcyBUSFJFRS5JbnN0YW5jZWRNZXNoKTtcblxuXHRcdGNvbnN0IG1lc2hSZWYgPSBtZXNoID8/IChzYW1wbGVyLmNoaWxkcmVuLmZpbmQoKGNoaWxkKSA9PiBjaGlsZC50eXBlID09PSAnTWVzaCcpIGFzIFRIUkVFLk1lc2gpO1xuXG5cdFx0cmV0dXJuIHsgY291bnQsIHdlaWdodCwgdHJhbnNmb3JtLCBtZXNoOiBtZXNoUmVmLCBpbnN0YW5jZWRNZXNoOiBpbnN0YW5jZWRNZXNoUmVmIH07XG5cdH0pO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGNvbnN0IGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0aW5qZWN0Tmd0c1N1cmZhY2VTYW1wbGVyKHRoaXMuc3VyZmFjZVNhbXBsZXJTdGF0ZSwgeyBpbmplY3RvciB9KTtcblx0XHR9KTtcblx0fVxufVxuIl19
|