angular-three-soba 2.0.0-beta.4 → 2.0.0-beta.40
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 +12 -8
- package/abstractions/detailed/detailed.d.ts +26 -0
- package/abstractions/edges/edges.d.ts +24 -12
- package/abstractions/grid/grid.d.ts +42 -51
- package/abstractions/index.d.ts +1 -7
- package/abstractions/text/text.d.ts +10 -4
- 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 +49 -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 +34 -15
- 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 +140 -110
- package/esm2022/abstractions/index.mjs +2 -8
- package/esm2022/abstractions/text/text.mjs +123 -122
- 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 +120 -100
- 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 +109 -85
- package/esm2022/gizmos/angular-three-soba-gizmos.mjs +5 -0
- package/esm2022/gizmos/gizmo-helper/gizmo-helper.mjs +198 -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 +151 -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 +14 -9
- package/esm2022/loaders/loader/loader.mjs +92 -87
- package/esm2022/loaders/progress/progress.mjs +31 -30
- package/esm2022/loaders/texture-loader/texture-loader.mjs +20 -15
- 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 +99 -97
- package/esm2022/materials/mesh-transmission-material/mesh-transmission-material.mjs +164 -144
- 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 +28 -23
- 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 +41 -37
- package/esm2022/misc/example/example.mjs +161 -0
- package/esm2022/misc/fbo/fbo.mjs +42 -36
- package/esm2022/misc/html/html-wrapper.mjs +478 -0
- package/esm2022/misc/html/html.mjs +305 -0
- package/esm2022/misc/index.mjs +10 -1
- package/esm2022/misc/sampler/sampler.mjs +132 -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 +204 -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 +221 -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 +327 -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 +183 -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 +32 -0
- package/esm2022/shaders/convolution-material/convolution-material.mjs +3 -2
- package/esm2022/shaders/discard-material/discard-material.mjs +1 -1
- package/esm2022/shaders/grid-material/grid-material.mjs +30 -14
- package/esm2022/shaders/index.mjs +5 -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 +3 -2
- package/esm2022/shaders/mesh-transmission-material/mesh-transmission-material.mjs +7 -4
- package/esm2022/shaders/mesh-wobble-material/mesh-wobble-material.mjs +1 -1
- package/esm2022/shaders/shader-material/shader-material.mjs +3 -5
- package/esm2022/shaders/soft-shadow-material/soft-shadow-material.mjs +18 -25
- package/esm2022/shaders/sparkles-material/sparkles-material.mjs +32 -46
- package/esm2022/shaders/spot-light-material/spot-light-material.mjs +8 -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 +161 -176
- package/esm2022/staging/accumulative-shadows/progressive-light-map.mjs +8 -8
- package/esm2022/staging/accumulative-shadows/randomized-lights.mjs +129 -129
- package/esm2022/staging/backdrop/backdrop.mjs +77 -0
- package/esm2022/staging/bb-anchor/bb-anchor.mjs +69 -0
- package/esm2022/staging/bounds/bounds.mjs +145 -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 -136
- 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 +40 -17
- 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 +267 -0
- package/esm2022/staging/spot-light/spot-light-input.mjs +67 -58
- package/esm2022/staging/spot-light/spot-light.mjs +51 -63
- 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/constants.mjs +3 -0
- package/esm2022/utils/content/content.mjs +15 -0
- package/esm2022/utils/index.mjs +3 -0
- package/fesm2022/angular-three-soba-abstractions.mjs +504 -2079
- package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
- package/fesm2022/angular-three-soba-cameras.mjs +293 -260
- package/fesm2022/angular-three-soba-cameras.mjs.map +1 -1
- package/fesm2022/angular-three-soba-controls.mjs +108 -83
- package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
- package/fesm2022/angular-three-soba-gizmos.mjs +1045 -0
- package/fesm2022/angular-three-soba-gizmos.mjs.map +1 -0
- package/fesm2022/angular-three-soba-loaders.mjs +148 -132
- package/fesm2022/angular-three-soba-loaders.mjs.map +1 -1
- package/fesm2022/angular-three-soba-materials.mjs +656 -588
- package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
- package/fesm2022/angular-three-soba-misc.mjs +2202 -99
- 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 +957 -0
- package/fesm2022/angular-three-soba-performances.mjs.map +1 -0
- package/fesm2022/angular-three-soba-shaders.mjs +508 -269
- package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
- package/fesm2022/angular-three-soba-staging.mjs +2910 -2573
- package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
- package/fesm2022/angular-three-soba-utils.mjs +25 -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 +73 -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 +15 -4
- package/loaders/loader/loader.d.ts +19 -17
- package/loaders/progress/progress.d.ts +1 -1
- package/loaders/texture-loader/texture-loader.d.ts +8 -3
- 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 +85 -0
- package/misc/fbo/fbo.d.ts +2 -2
- package/misc/html/html-wrapper.d.ts +559 -0
- package/misc/html/html.d.ts +218 -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 +36 -18
- 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 +83 -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 +96 -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 +128 -0
- package/shaders/grid-material/grid-material.d.ts +33 -0
- package/shaders/index.d.ts +4 -2
- package/shaders/mesh-distort-material/mesh-distort-material.d.ts +173 -6
- 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 +13 -0
- package/shaders/spot-light-material/spot-light-material.d.ts +11 -2
- package/shaders/star-field-material/star-field-material.d.ts +9 -0
- package/shaders/wireframe-material/wireframe-material.d.ts +58 -0
- package/staging/accumulative-shadows/accumulative-shadows.d.ts +93 -39
- package/staging/accumulative-shadows/randomized-lights.d.ts +41 -28
- package/staging/backdrop/backdrop.d.ts +30 -0
- package/staging/bb-anchor/bb-anchor.d.ts +27 -0
- package/staging/bounds/bounds.d.ts +105 -25
- package/staging/camera-shake/camera-shake.d.ts +30 -19
- package/staging/center/center.d.ts +43 -35
- package/staging/cloud/cloud.d.ts +27 -24
- package/staging/contact-shadows/contact-shadows.d.ts +43 -30
- 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 +38 -38
- 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 +15 -11
- 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 +35 -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/constants.d.ts +1 -0
- package/utils/content/content.d.ts +8 -0
- package/utils/index.d.ts +2 -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 -7
- package/plugin/src/generators/init/init.js +0 -28
- 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
|
@@ -1,68 +1,59 @@
|
|
|
1
|
-
import { CUSTOM_ELEMENTS_SCHEMA, Component,
|
|
2
|
-
import {
|
|
1
|
+
import { CUSTOM_ELEMENTS_SCHEMA, Component, Input, computed, effect, forwardRef, untracked, } from '@angular/core';
|
|
2
|
+
import { extend, getLocalState, injectBeforeRender, injectNgtRef, injectNgtStore, signalStore, } from 'angular-three';
|
|
3
3
|
import { SoftShadowMaterial } from 'angular-three-soba/shaders';
|
|
4
|
+
import { createInjectionToken } from 'ngxtension/create-injection-token';
|
|
4
5
|
import { Group, Mesh, PlaneGeometry } from 'three';
|
|
5
6
|
import { ProgressiveLightMap } from './progressive-light-map';
|
|
6
7
|
import * as i0 from "@angular/core";
|
|
7
|
-
extend({
|
|
8
|
-
export const
|
|
9
|
-
class NgtsAccumulativeShadows
|
|
8
|
+
extend({ Group, SoftShadowMaterial, Mesh, PlaneGeometry });
|
|
9
|
+
export const [injectNgtsAccumulativeShadowsApi, provideNgtsAccumulativeShadowsApi] = createInjectionToken((shadows) => shadows.api, { isRoot: false, deps: [forwardRef(() => NgtsAccumulativeShadows)] });
|
|
10
|
+
export class NgtsAccumulativeShadows {
|
|
10
11
|
/** How many frames it can render, more yields cleaner results but takes more time, 40 */
|
|
11
|
-
set
|
|
12
|
-
this.set({ frames });
|
|
12
|
+
set _frames(frames) {
|
|
13
|
+
this.inputs.set({ frames });
|
|
13
14
|
}
|
|
14
15
|
/** If frames === Infinity blend controls the refresh ratio, 100 */
|
|
15
|
-
set
|
|
16
|
-
this.set({ blend });
|
|
16
|
+
set _blend(blend) {
|
|
17
|
+
this.inputs.set({ blend });
|
|
17
18
|
}
|
|
18
19
|
/** Can limit the amount of frames rendered if frames === Infinity, usually to get some performance back once a movable scene has settled, Infinity */
|
|
19
|
-
set
|
|
20
|
-
this.set({ limit });
|
|
20
|
+
set _limit(limit) {
|
|
21
|
+
this.inputs.set({ limit });
|
|
21
22
|
}
|
|
22
23
|
/** Scale of the plane, */
|
|
23
|
-
set
|
|
24
|
-
this.set({ scale });
|
|
24
|
+
set _scale(scale) {
|
|
25
|
+
this.inputs.set({ scale });
|
|
25
26
|
}
|
|
26
27
|
/** Temporal accumulates shadows over time which is more performant but has a visual regression over instant results, false */
|
|
27
|
-
set
|
|
28
|
-
this.set({ temporal });
|
|
28
|
+
set _temporal(temporal) {
|
|
29
|
+
this.inputs.set({ temporal });
|
|
29
30
|
}
|
|
30
31
|
/** Opacity of the plane, 1 */
|
|
31
|
-
set
|
|
32
|
-
this.set({ opacity });
|
|
32
|
+
set _opacity(opacity) {
|
|
33
|
+
this.inputs.set({ opacity });
|
|
33
34
|
}
|
|
34
35
|
/** Discards alpha pixels, 0.65 */
|
|
35
|
-
set
|
|
36
|
-
this.set({ alphaTest });
|
|
36
|
+
set _alphaTest(alphaTest) {
|
|
37
|
+
this.inputs.set({ alphaTest });
|
|
37
38
|
}
|
|
38
39
|
/** Shadow color, black */
|
|
39
|
-
set
|
|
40
|
-
this.set({ color });
|
|
40
|
+
set _color(color) {
|
|
41
|
+
this.inputs.set({ color });
|
|
41
42
|
}
|
|
42
43
|
/** Colorblend, how much colors turn to black, 0 is black, 2 */
|
|
43
|
-
set
|
|
44
|
-
this.set({ colorBlend });
|
|
44
|
+
set _colorBlend(colorBlend) {
|
|
45
|
+
this.inputs.set({ colorBlend });
|
|
45
46
|
}
|
|
46
47
|
/** Buffer resolution, 1024 */
|
|
47
|
-
set
|
|
48
|
-
this.set({ resolution });
|
|
48
|
+
set _resolution(resolution) {
|
|
49
|
+
this.inputs.set({ resolution });
|
|
49
50
|
}
|
|
50
51
|
/** Texture tonemapping */
|
|
51
|
-
set
|
|
52
|
-
this.set({ toneMapped });
|
|
52
|
+
set _toneMapped(toneMapped) {
|
|
53
|
+
this.inputs.set({ toneMapped });
|
|
53
54
|
}
|
|
54
|
-
#store;
|
|
55
|
-
#gl;
|
|
56
|
-
#scene;
|
|
57
|
-
#camera;
|
|
58
|
-
#resolution;
|
|
59
|
-
#temporal;
|
|
60
|
-
#blend;
|
|
61
|
-
#frames;
|
|
62
|
-
#opacity;
|
|
63
|
-
#alphaTest;
|
|
64
55
|
constructor() {
|
|
65
|
-
|
|
56
|
+
this.inputs = signalStore({
|
|
66
57
|
frames: 40,
|
|
67
58
|
limit: Infinity,
|
|
68
59
|
blend: 20,
|
|
@@ -77,33 +68,40 @@ class NgtsAccumulativeShadows extends NgtSignalStore {
|
|
|
77
68
|
});
|
|
78
69
|
this.nullTraverse = () => null;
|
|
79
70
|
this.Math = Math;
|
|
80
|
-
this.#store = inject(NgtStore);
|
|
81
|
-
this.#gl = this.#store.select('gl');
|
|
82
|
-
this.#scene = this.#store.select('scene');
|
|
83
|
-
this.#camera = this.#store.select('camera');
|
|
84
|
-
this.#resolution = this.select('resolution');
|
|
85
|
-
this.#temporal = this.select('temporal');
|
|
86
|
-
this.#blend = this.select('blend');
|
|
87
|
-
this.#frames = this.select('frames');
|
|
88
|
-
this.#opacity = this.select('opacity');
|
|
89
|
-
this.#alphaTest = this.select('alphaTest');
|
|
90
|
-
this.accumulativeShadowsScale = this.select('scale');
|
|
91
|
-
this.accumulativeShadowsToneMapped = this.select('toneMapped');
|
|
92
|
-
this.accumulativeShadowsColor = this.select('color');
|
|
93
|
-
this.accumulativeShadowsColorBlend = this.select('colorBlend');
|
|
94
|
-
this.meshRef = injectNgtRef();
|
|
95
71
|
this.accumulativeShadowsRef = injectNgtRef();
|
|
96
|
-
this.
|
|
72
|
+
this.meshRef = injectNgtRef();
|
|
73
|
+
this.store = injectNgtStore();
|
|
74
|
+
this.gl = this.store.select('gl');
|
|
75
|
+
this.scene = this.store.select('scene');
|
|
76
|
+
this.camera = this.store.select('camera');
|
|
77
|
+
this.invalidate = this.store.select('invalidate');
|
|
78
|
+
this.resolution = this.inputs.select('resolution');
|
|
79
|
+
this.alphaTest = this.inputs.select('alphaTest');
|
|
80
|
+
this.opacity = this.inputs.select('opacity');
|
|
81
|
+
this.temporal = this.inputs.select('temporal');
|
|
82
|
+
this.blend = this.inputs.select('blend');
|
|
83
|
+
this.frames = this.inputs.select('frames');
|
|
84
|
+
this.pLM = computed(() => new ProgressiveLightMap(untracked(this.gl), untracked(this.scene), this.resolution()));
|
|
85
|
+
this.scale = this.inputs.select('scale');
|
|
86
|
+
this.toneMapped = this.inputs.select('toneMapped');
|
|
87
|
+
this.color = this.inputs.select('color');
|
|
88
|
+
this.colorBlend = this.inputs.select('colorBlend');
|
|
89
|
+
this.map = computed(() => this.pLM().progressiveLightMap2.texture);
|
|
97
90
|
this.api = computed(() => {
|
|
98
|
-
const pLM =
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
91
|
+
const [pLM, alphaTest, opacity, camera, temporal, blend, frames] = [
|
|
92
|
+
this.pLM(),
|
|
93
|
+
this.alphaTest(),
|
|
94
|
+
this.opacity(),
|
|
95
|
+
this.camera(),
|
|
96
|
+
this.temporal(),
|
|
97
|
+
this.blend(),
|
|
98
|
+
this.frames(),
|
|
99
|
+
];
|
|
100
|
+
const api = {
|
|
103
101
|
lights: new Map(),
|
|
104
|
-
temporal
|
|
105
|
-
frames: Math.max(2,
|
|
106
|
-
blend: Math.max(2,
|
|
102
|
+
temporal,
|
|
103
|
+
frames: Math.max(2, frames),
|
|
104
|
+
blend: Math.max(2, frames === Infinity ? blend : frames),
|
|
107
105
|
count: 0,
|
|
108
106
|
getMesh: () => this.meshRef.nativeElement,
|
|
109
107
|
reset: () => {
|
|
@@ -114,20 +112,20 @@ class NgtsAccumulativeShadows extends NgtSignalStore {
|
|
|
114
112
|
const material = this.meshRef.nativeElement.material;
|
|
115
113
|
material.opacity = 0;
|
|
116
114
|
material.alphaTest = 0;
|
|
117
|
-
|
|
115
|
+
api.count = 0;
|
|
118
116
|
},
|
|
119
117
|
update: (frames = 1) => {
|
|
120
118
|
if (!this.meshRef.nativeElement)
|
|
121
119
|
return;
|
|
122
120
|
// Adapt the opacity-blend ratio to the number of frames
|
|
123
121
|
const material = this.meshRef.nativeElement.material;
|
|
124
|
-
if (!
|
|
122
|
+
if (!api.temporal) {
|
|
125
123
|
material.opacity = opacity;
|
|
126
124
|
material.alphaTest = alphaTest;
|
|
127
125
|
}
|
|
128
126
|
else {
|
|
129
|
-
material.opacity = Math.min(opacity, material.opacity + opacity /
|
|
130
|
-
material.alphaTest = Math.min(alphaTest, material.alphaTest + alphaTest /
|
|
127
|
+
material.opacity = Math.min(opacity, material.opacity + opacity / api.blend);
|
|
128
|
+
material.alphaTest = Math.min(alphaTest, material.alphaTest + alphaTest / api.blend);
|
|
131
129
|
}
|
|
132
130
|
// Switch accumulative lights on
|
|
133
131
|
this.accumulativeShadowsRef.nativeElement.visible = true;
|
|
@@ -135,8 +133,8 @@ class NgtsAccumulativeShadows extends NgtSignalStore {
|
|
|
135
133
|
pLM.prepare();
|
|
136
134
|
// Update the lightmap and the accumulative lights
|
|
137
135
|
for (let i = 0; i < frames; i++) {
|
|
138
|
-
|
|
139
|
-
pLM.update(camera,
|
|
136
|
+
api.lights.forEach((light) => light().update());
|
|
137
|
+
pLM.update(camera, api.blend);
|
|
140
138
|
}
|
|
141
139
|
// Switch lights off
|
|
142
140
|
this.accumulativeShadowsRef.nativeElement.visible = false;
|
|
@@ -144,40 +142,27 @@ class NgtsAccumulativeShadows extends NgtSignalStore {
|
|
|
144
142
|
pLM.finish();
|
|
145
143
|
},
|
|
146
144
|
};
|
|
145
|
+
return api;
|
|
147
146
|
});
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
});
|
|
152
|
-
injectBeforeRender(this.#onBeforeRender.bind(this));
|
|
153
|
-
}
|
|
154
|
-
#onBeforeRender() {
|
|
155
|
-
const invalidate = this.#store.get('invalidate');
|
|
156
|
-
const limit = this.get('limit');
|
|
157
|
-
const api = this.api();
|
|
158
|
-
if ((api.temporal || api.frames === Infinity) && api.count < api.frames && api.count < limit) {
|
|
159
|
-
invalidate();
|
|
160
|
-
api.update();
|
|
161
|
-
api.count++;
|
|
162
|
-
}
|
|
147
|
+
this.configure();
|
|
148
|
+
this.resetAndUpdate();
|
|
149
|
+
this.beforeRender();
|
|
163
150
|
}
|
|
164
|
-
|
|
165
|
-
const trigger = computed(() => ({ pLM: this.pLM(), mesh: this.meshRef.nativeElement }));
|
|
151
|
+
configure() {
|
|
166
152
|
effect(() => {
|
|
167
|
-
const
|
|
153
|
+
const [pLM, mesh] = [this.pLM(), this.meshRef.nativeElement];
|
|
168
154
|
if (!mesh)
|
|
169
155
|
return;
|
|
170
156
|
pLM.configure(mesh);
|
|
171
157
|
});
|
|
172
158
|
}
|
|
173
|
-
|
|
174
|
-
const trigger = computed(() => ({
|
|
175
|
-
state: this.state(),
|
|
176
|
-
objects: getLocalState(this.#store.get('scene')).objects(),
|
|
177
|
-
mesh: this.meshRef.nativeElement,
|
|
178
|
-
}));
|
|
159
|
+
resetAndUpdate() {
|
|
179
160
|
effect(() => {
|
|
180
|
-
const
|
|
161
|
+
const [, , mesh] = [
|
|
162
|
+
this.inputs.state(),
|
|
163
|
+
getLocalState(untracked(this.scene)).objects(),
|
|
164
|
+
this.meshRef.nativeElement,
|
|
165
|
+
];
|
|
181
166
|
if (!mesh)
|
|
182
167
|
return;
|
|
183
168
|
const api = untracked(this.api);
|
|
@@ -188,96 +173,96 @@ class NgtsAccumulativeShadows extends NgtSignalStore {
|
|
|
188
173
|
api.update(api.blend);
|
|
189
174
|
});
|
|
190
175
|
}
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
`, isInline: true }); }
|
|
176
|
+
beforeRender() {
|
|
177
|
+
injectBeforeRender(() => {
|
|
178
|
+
const [api, limit] = [this.api(), this.inputs.get('limit')];
|
|
179
|
+
if ((api.temporal || api.frames === Infinity) && api.count < api.frames && api.count < limit) {
|
|
180
|
+
this.invalidate();
|
|
181
|
+
api.update();
|
|
182
|
+
api.count++;
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.3", ngImport: i0, type: NgtsAccumulativeShadows, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
187
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.3", type: NgtsAccumulativeShadows, isStandalone: true, selector: "ngts-accumulative-shadows", inputs: { accumulativeShadowsRef: "accumulativeShadowsRef", _frames: ["frames", "_frames"], _blend: ["blend", "_blend"], _limit: ["limit", "_limit"], _scale: ["scale", "_scale"], _temporal: ["temporal", "_temporal"], _opacity: ["opacity", "_opacity"], _alphaTest: ["alphaTest", "_alphaTest"], _color: ["color", "_color"], _colorBlend: ["colorBlend", "_colorBlend"], _resolution: ["resolution", "_resolution"], _toneMapped: ["toneMapped", "_toneMapped"] }, providers: [provideNgtsAccumulativeShadowsApi()], ngImport: i0, template: `
|
|
188
|
+
<ngt-group ngtCompound>
|
|
189
|
+
<ngt-group [traverse]="nullTraverse" [ref]="accumulativeShadowsRef">
|
|
190
|
+
<ng-content />
|
|
191
|
+
</ngt-group>
|
|
192
|
+
<ngt-mesh [receiveShadow]="true" [ref]="meshRef" [scale]="scale()" [rotation]="[-Math.PI / 2, 0, 0]">
|
|
193
|
+
<ngt-plane-geometry />
|
|
194
|
+
<ngt-soft-shadow-material
|
|
195
|
+
[transparent]="true"
|
|
196
|
+
[depthWrite]="false"
|
|
197
|
+
[toneMapped]="toneMapped()"
|
|
198
|
+
[color]="color()"
|
|
199
|
+
[blend]="colorBlend()"
|
|
200
|
+
[map]="map()"
|
|
201
|
+
/>
|
|
202
|
+
</ngt-mesh>
|
|
203
|
+
</ngt-group>
|
|
204
|
+
`, isInline: true }); }
|
|
221
205
|
}
|
|
222
|
-
|
|
223
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsAccumulativeShadows, decorators: [{
|
|
206
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.3", ngImport: i0, type: NgtsAccumulativeShadows, decorators: [{
|
|
224
207
|
type: Component,
|
|
225
208
|
args: [{
|
|
226
209
|
selector: 'ngts-accumulative-shadows',
|
|
227
210
|
standalone: true,
|
|
228
211
|
template: `
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
[
|
|
247
|
-
/>
|
|
248
|
-
</ngt-mesh>
|
|
249
|
-
</ngt-group>
|
|
250
|
-
`,
|
|
251
|
-
providers: [
|
|
252
|
-
{
|
|
253
|
-
provide: NGTS_ACCUMULATIVE_SHADOWS_API,
|
|
254
|
-
useFactory: (shadows) => shadows.api,
|
|
255
|
-
deps: [NgtsAccumulativeShadows],
|
|
256
|
-
},
|
|
257
|
-
],
|
|
212
|
+
<ngt-group ngtCompound>
|
|
213
|
+
<ngt-group [traverse]="nullTraverse" [ref]="accumulativeShadowsRef">
|
|
214
|
+
<ng-content />
|
|
215
|
+
</ngt-group>
|
|
216
|
+
<ngt-mesh [receiveShadow]="true" [ref]="meshRef" [scale]="scale()" [rotation]="[-Math.PI / 2, 0, 0]">
|
|
217
|
+
<ngt-plane-geometry />
|
|
218
|
+
<ngt-soft-shadow-material
|
|
219
|
+
[transparent]="true"
|
|
220
|
+
[depthWrite]="false"
|
|
221
|
+
[toneMapped]="toneMapped()"
|
|
222
|
+
[color]="color()"
|
|
223
|
+
[blend]="colorBlend()"
|
|
224
|
+
[map]="map()"
|
|
225
|
+
/>
|
|
226
|
+
</ngt-mesh>
|
|
227
|
+
</ngt-group>
|
|
228
|
+
`,
|
|
229
|
+
providers: [provideNgtsAccumulativeShadowsApi()],
|
|
258
230
|
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
259
231
|
}]
|
|
260
|
-
}], ctorParameters: function () { return []; }, propDecorators: {
|
|
261
|
-
type: Input
|
|
262
|
-
}], blend: [{
|
|
263
|
-
type: Input
|
|
264
|
-
}], limit: [{
|
|
265
|
-
type: Input
|
|
266
|
-
}], scale: [{
|
|
267
|
-
type: Input
|
|
268
|
-
}], temporal: [{
|
|
269
|
-
type: Input
|
|
270
|
-
}], opacity: [{
|
|
271
|
-
type: Input
|
|
272
|
-
}], alphaTest: [{
|
|
273
|
-
type: Input
|
|
274
|
-
}], color: [{
|
|
275
|
-
type: Input
|
|
276
|
-
}], colorBlend: [{
|
|
277
|
-
type: Input
|
|
278
|
-
}], resolution: [{
|
|
279
|
-
type: Input
|
|
280
|
-
}], toneMapped: [{
|
|
232
|
+
}], ctorParameters: function () { return []; }, propDecorators: { accumulativeShadowsRef: [{
|
|
281
233
|
type: Input
|
|
234
|
+
}], _frames: [{
|
|
235
|
+
type: Input,
|
|
236
|
+
args: [{ alias: 'frames' }]
|
|
237
|
+
}], _blend: [{
|
|
238
|
+
type: Input,
|
|
239
|
+
args: [{ alias: 'blend' }]
|
|
240
|
+
}], _limit: [{
|
|
241
|
+
type: Input,
|
|
242
|
+
args: [{ alias: 'limit' }]
|
|
243
|
+
}], _scale: [{
|
|
244
|
+
type: Input,
|
|
245
|
+
args: [{ alias: 'scale' }]
|
|
246
|
+
}], _temporal: [{
|
|
247
|
+
type: Input,
|
|
248
|
+
args: [{ alias: 'temporal' }]
|
|
249
|
+
}], _opacity: [{
|
|
250
|
+
type: Input,
|
|
251
|
+
args: [{ alias: 'opacity' }]
|
|
252
|
+
}], _alphaTest: [{
|
|
253
|
+
type: Input,
|
|
254
|
+
args: [{ alias: 'alphaTest' }]
|
|
255
|
+
}], _color: [{
|
|
256
|
+
type: Input,
|
|
257
|
+
args: [{ alias: 'color' }]
|
|
258
|
+
}], _colorBlend: [{
|
|
259
|
+
type: Input,
|
|
260
|
+
args: [{ alias: 'colorBlend' }]
|
|
261
|
+
}], _resolution: [{
|
|
262
|
+
type: Input,
|
|
263
|
+
args: [{ alias: 'resolution' }]
|
|
264
|
+
}], _toneMapped: [{
|
|
265
|
+
type: Input,
|
|
266
|
+
args: [{ alias: 'toneMapped' }]
|
|
282
267
|
}] } });
|
|
283
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjdW11bGF0aXZlLXNoYWRvd3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc3RhZ2luZy9zcmMvYWNjdW11bGF0aXZlLXNoYWRvd3MvYWNjdW11bGF0aXZlLXNoYWRvd3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHNCQUFzQixFQUN0QixTQUFTLEVBQ1QsY0FBYyxFQUNkLEtBQUssRUFFTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNILGNBQWMsRUFDZCxRQUFRLEVBQ1IsTUFBTSxFQUNOLGFBQWEsRUFDYixrQkFBa0IsRUFDbEIsWUFBWSxFQUNaLGtDQUFrQyxHQUVyQyxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQTRCLE1BQU0sNEJBQTRCLENBQUM7QUFDMUYsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOztBQUU5RCxNQUFNLENBQUMsRUFBRSxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7QUF3QzNELE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHLElBQUksY0FBYyxDQUMzRCw2QkFBNkIsQ0FDaEMsQ0FBQztBQVFGLE1BbUNhLHVCQUF3QixTQUFRLGNBQTRDO0lBSXJGLHlGQUF5RjtJQUN6RixJQUFhLE1BQU0sQ0FBQyxNQUFjO1FBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxtRUFBbUU7SUFDbkUsSUFBYSxLQUFLLENBQUMsS0FBYTtRQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FB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QixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0FzQlQ7b0JBQ0QsU0FBUyxFQUFFO3dCQUNQOzRCQUNJLE9BQU8sRUFBRSw2QkFBNkI7NEJBQ3RDLFVBQVUsRUFBRSxDQUFDLE9BQWdDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHOzRCQUM3RCxJQUFJLEVBQUUseUJBQXlCO3lCQUNsQztxQkFDSjtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztpQkFDcEM7MEVBTWdCLE1BQU07c0JBQWxCLEtBQUs7Z0JBS08sS0FBSztzQkFBakIsS0FBSztnQkFLTyxLQUFLO3NCQUFqQixLQUFLO2dCQUtPLEtBQUs7c0JBQWpCLEtBQUs7Z0JBS08sUUFBUTtzQkFBcEIsS0FBSztnQkFLTyxPQUFPO3NCQUFuQixLQUFLO2dCQUtPLFNBQVM7c0JBQXJCLEtBQUs7Z0JBS08sS0FBSztzQkFBakIsS0FBSztnQkFLTyxVQUFVO3NCQUF0QixLQUFLO2dCQUtPLFVBQVU7c0JBQXRCLEtBQUs7Z0JBS08sVUFBVTtzQkFBdEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcbiAgICBDb21wb25lbnQsXG4gICAgSW5qZWN0aW9uVG9rZW4sXG4gICAgSW5wdXQsXG4gICAgU2lnbmFsLFxuICAgIGNvbXB1dGVkLFxuICAgIGVmZmVjdCxcbiAgICBpbmplY3QsXG4gICAgdW50cmFja2VkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgTmd0U2lnbmFsU3RvcmUsXG4gICAgTmd0U3RvcmUsXG4gICAgZXh0ZW5kLFxuICAgIGdldExvY2FsU3RhdGUsXG4gICAgaW5qZWN0QmVmb3JlUmVuZGVyLFxuICAgIGluamVjdE5ndFJlZixcbiAgICByZXF1ZXN0QW5pbWF0aW9uSW5JbmplY3Rpb25Db250ZXh0LFxuICAgIHR5cGUgTmd0R3JvdXAsXG59IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgU29mdFNoYWRvd01hdGVyaWFsLCBTb2Z0U2hhZG93TWF0ZXJpYWxJbnB1dHMgfSBmcm9tICdhbmd1bGFyLXRocmVlLXNvYmEvc2hhZGVycyc7XG5pbXBvcnQgeyBHcm91cCwgTWVzaCwgUGxhbmVHZW9tZXRyeSB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IFByb2dyZXNzaXZlTGlnaHRNYXAgfSBmcm9tICcuL3Byb2dyZXNzaXZlLWxpZ2h0LW1hcCc7XG5cbmV4dGVuZCh7IFNvZnRTaGFkb3dNYXRlcmlhbCwgR3JvdXAsIE1lc2gsIFBsYW5lR2VvbWV0cnkgfSk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0c0FjY3VtdWxhdGl2ZVNoYWRvd3NTdGF0ZSB7XG4gICAgLyoqIEhvdyBtYW55IGZyYW1lcyBpdCBjYW4gcmVuZGVyLCBtb3JlIHlpZWxkcyBjbGVhbmVyIHJlc3VsdHMgYnV0IHRha2VzIG1vcmUgdGltZSwgNDAgKi9cbiAgICBmcmFtZXM6IG51bWJlcjtcbiAgICAvKiogSWYgZnJhbWVzID09PSBJbmZpbml0eSBibGVuZCBjb250cm9scyB0aGUgcmVmcmVzaCByYXRpbywgMTAwICovXG4gICAgYmxlbmQ6IG51bWJlcjtcbiAgICAvKiogQ2FuIGxpbWl0IHRoZSBhbW91bnQgb2YgZnJhbWVzIHJlbmRlcmVkIGlmIGZyYW1lcyA9PT0gSW5maW5pdHksIHVzdWFsbHkgdG8gZ2V0IHNvbWUgcGVyZm9ybWFuY2UgYmFjayBvbmNlIGEgbW92YWJsZSBzY2VuZSBoYXMgc2V0dGxlZCwgSW5maW5pdHkgKi9cbiAgICBsaW1pdDogbnVtYmVyO1xuICAgIC8qKiBTY2FsZSBvZiB0aGUgcGxhbmUsICAqL1xuICAgIHNjYWxlOiBudW1iZXI7XG4gICAgLyoqIFRlbXBvcmFsIGFjY3VtdWxhdGVzIHNoYWRvd3Mgb3ZlciB0aW1lIHdoaWNoIGlzIG1vcmUgcGVyZm9ybWFudCBidXQgaGFzIGEgdmlzdWFsIHJlZ3Jlc3Npb24gb3ZlciBpbnN0YW50IHJlc3VsdHMsIGZhbHNlICAqL1xuICAgIHRlbXBvcmFsOiBib29sZWFuO1xuICAgIC8qKiBPcGFjaXR5IG9mIHRoZSBwbGFuZSwgMSAqL1xuICAgIG9wYWNpdHk6IG51bWJlcjtcbiAgICAvKiogRGlzY2FyZHMgYWxwaGEgcGl4ZWxzLCAwLjY1ICovXG4gICAgYWxwaGFUZXN0OiBudW1iZXI7XG4gICAgLyoqIFNoYWRvdyBjb2xvciwgYmxhY2sgKi9cbiAgICBjb2xvcjogc3RyaW5nO1xuICAgIC8qKiBDb2xvcmJsZW5kLCBob3cgbXVjaCBjb2xvcnMgdHVybiB0byBibGFjaywgMCBpcyBibGFjaywgMiAqL1xuICAgIGNvbG9yQmxlbmQ6IG51bWJlcjtcbiAgICAvKiogQnVmZmVyIHJlc29sdXRpb24sIDEwMjQgKi9cbiAgICByZXNvbHV0aW9uOiBudW1iZXI7XG4gICAgLyoqIFRleHR1cmUgdG9uZW1hcHBpbmcgKi9cbiAgICB0b25lTWFwcGVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBOZ3RzQWNjdW11bGF0aXZlU2hhZG93c0xpZ2h0QXBpID0geyB1cGRhdGU6ICgpID0+IHZvaWQgfTtcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RzQWNjdW11bGF0aXZlU2hhZG93c0FwaSB7XG4gICAgbGlnaHRzOiBNYXA8c3RyaW5nLCBTaWduYWw8Tmd0c0FjY3VtdWxhdGl2ZVNoYWRvd3NMaWdodEFwaT4+O1xuICAgIHRlbXBvcmFsOiBib29sZWFuO1xuICAgIGZyYW1lczogbnVtYmVyO1xuICAgIGJsZW5kOiBudW1iZXI7XG4gICAgY291bnQ6IG51bWJlcjtcbiAgICBnZXRNZXNoOiAoKSA9PiBUSFJFRS5NZXNoPFRIUkVFLlBsYW5lR2VvbWV0cnksIFNvZnRTaGFkb3dNYXRlcmlhbElucHV0cyAmIFRIUkVFLlNoYWRlck1hdGVyaWFsPjtcbiAgICByZXNldDogKCkgPT4gdm9pZDtcbiAgICB1cGRhdGU6IChmcmFtZXM/OiBudW1iZXIpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBjb25zdCBOR1RTX0FDQ1VNVUxBVElWRV9TSEFET1dTX0FQSSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxTaWduYWw8Tmd0c0FjY3VtdWxhdGl2ZVNoYWRvd3NBcGk+PihcbiAgICAnTmd0c0FjY3VtdWxhdGl2ZVNoYWRvd3MgQVBJJ1xuKTtcblxuZGVjbGFyZSBnbG9iYWwge1xuICAgIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgICAgICAnbmd0cy1hY2N1bXVsYXRpdmUtc2hhZG93cyc6IE5ndEdyb3VwICYgTmd0c0FjY3VtdWxhdGl2ZVNoYWRvd3NTdGF0ZTtcbiAgICB9XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd0cy1hY2N1bXVsYXRpdmUtc2hhZG93cycsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmd0LWdyb3VwIG5ndENvbXBvdW5kPlxuICAgICAgICAgICAgPG5ndC1ncm91cCBbcmVmXT1cImFjY3VtdWxhdGl2ZVNoYWRvd3NSZWZcIiBbdHJhdmVyc2VdPVwibnVsbFRyYXZlcnNlXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgLz5cbiAgICAgICAgICAgIDwvbmd0LWdyb3VwPlxuICAgICAgICAgICAgPG5ndC1tZXNoXG4gICAgICAgICAgICAgICAgW3JlZl09XCJtZXNoUmVmXCJcbiAgICAgICAgICAgICAgICBbcmVjZWl2ZVNoYWRvd109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbc2NhbGVdPVwiYWNjdW11bGF0aXZlU2hhZG93c1NjYWxlKClcIlxuICAgICAgICAgICAgICAgIFtyb3RhdGlvbl09XCJbLU1hdGguUEkgLyAyLCAwLCAwXVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5ndC1wbGFuZS1nZW9tZXRyeSAvPlxuICAgICAgICAgICAgICAgIDxuZ3Qtc29mdC1zaGFkb3ctbWF0ZXJpYWxcbiAgICAgICAgICAgICAgICAgICAgW3RyYW5zcGFyZW50XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBbZGVwdGhXcml0ZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgIFt0b25lTWFwcGVkXT1cImFjY3VtdWxhdGl2ZVNoYWRvd3NUb25lTWFwcGVkKClcIlxuICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwiYWNjdW11bGF0aXZlU2hhZG93c0NvbG9yKClcIlxuICAgICAgICAgICAgICAgICAgICBbYmxlbmRdPVwiYWNjdW11bGF0aXZlU2hhZG93c0NvbG9yQmxlbmQoKVwiXG4gICAgICAgICAgICAgICAgICAgIFttYXBdPVwicExNKCkucHJvZ3Jlc3NpdmVMaWdodE1hcDIudGV4dHVyZVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbmd0LW1lc2g+XG4gICAgICAgIDwvbmd0LWdyb3VwPlxuICAgIGAsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HVFNfQUNDVU1VTEFUSVZFX1NIQURPV1NfQVBJLFxuICAgICAgICAgICAgdXNlRmFjdG9yeTogKHNoYWRvd3M6IE5ndHNBY2N1bXVsYXRpdmVTaGFkb3dzKSA9PiBzaGFkb3dzLmFwaSxcbiAgICAgICAgICAgIGRlcHM6IFtOZ3RzQWNjdW11bGF0aXZlU2hhZG93c10sXG4gICAgICAgIH0sXG4gICAgXSxcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNBY2N1bXVsYXRpdmVTaGFkb3dzIGV4dGVuZHMgTmd0U2lnbmFsU3RvcmU8Tmd0c0FjY3VtdWxhdGl2ZVNoYWRvd3NTdGF0ZT4ge1xuICAgIHJlYWRvbmx5IG51bGxUcmF2ZXJzZSA9ICgpID0+IG51bGw7XG4gICAgcmVhZG9ubHkgTWF0aCA9IE1hdGg7XG5cbiAgICAvKiogSG93IG1hbnkgZnJhbWVzIGl0IGNhbiByZW5kZXIsIG1vcmUgeWllbGRzIGNsZWFuZXIgcmVzdWx0cyBidXQgdGFrZXMgbW9yZSB0aW1lLCA0MCAqL1xuICAgIEBJbnB1dCgpIHNldCBmcmFtZXMoZnJhbWVzOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBmcmFtZXMgfSk7XG4gICAgfVxuXG4gICAgLyoqIElmIGZyYW1lcyA9PT0gSW5maW5pdHkgYmxlbmQgY29udHJvbHMgdGhlIHJlZnJlc2ggcmF0aW8sIDEwMCAqL1xuICAgIEBJbnB1dCgpIHNldCBibGVuZChibGVuZDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgYmxlbmQgfSk7XG4gICAgfVxuXG4gICAgLyoqIENhbiBsaW1pdCB0aGUgYW1vdW50IG9mIGZyYW1lcyByZW5kZXJlZCBpZiBmcmFtZXMgPT09IEluZmluaXR5LCB1c3VhbGx5IHRvIGdldCBzb21lIHBlcmZvcm1hbmNlIGJhY2sgb25jZSBhIG1vdmFibGUgc2NlbmUgaGFzIHNldHRsZWQsIEluZmluaXR5ICovXG4gICAgQElucHV0KCkgc2V0IGxpbWl0KGxpbWl0OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBsaW1pdCB9KTtcbiAgICB9XG5cbiAgICAvKiogU2NhbGUgb2YgdGhlIHBsYW5lLCAgKi9cbiAgICBASW5wdXQoKSBzZXQgc2NhbGUoc2NhbGU6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IHNjYWxlIH0pO1xuICAgIH1cblxuICAgIC8qKiBUZW1wb3JhbCBhY2N1bXVsYXRlcyBzaGFkb3dzIG92ZXIgdGltZSB3aGljaCBpcyBtb3JlIHBlcmZvcm1hbnQgYnV0IGhhcyBhIHZpc3VhbCByZWdyZXNzaW9uIG92ZXIgaW5zdGFudCByZXN1bHRzLCBmYWxzZSAgKi9cbiAgICBASW5wdXQoKSBzZXQgdGVtcG9yYWwodGVtcG9yYWw6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zZXQoeyB0ZW1wb3JhbCB9KTtcbiAgICB9XG5cbiAgICAvKiogT3BhY2l0eSBvZiB0aGUgcGxhbmUsIDEgKi9cbiAgICBASW5wdXQoKSBzZXQgb3BhY2l0eShvcGFjaXR5OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBvcGFjaXR5IH0pO1xuICAgIH1cblxuICAgIC8qKiBEaXNjYXJkcyBhbHBoYSBwaXhlbHMsIDAuNjUgKi9cbiAgICBASW5wdXQoKSBzZXQgYWxwaGFUZXN0KGFscGhhVGVzdDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgYWxwaGFUZXN0IH0pO1xuICAgIH1cblxuICAgIC8qKiBTaGFkb3cgY29sb3IsIGJsYWNrICovXG4gICAgQElucHV0KCkgc2V0IGNvbG9yKGNvbG9yOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBjb2xvciB9KTtcbiAgICB9XG5cbiAgICAvKiogQ29sb3JibGVuZCwgaG93IG11Y2ggY29sb3JzIHR1cm4gdG8gYmxhY2ssIDAgaXMgYmxhY2ssIDIgKi9cbiAgICBASW5wdXQoKSBzZXQgY29sb3JCbGVuZChjb2xvckJsZW5kOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBjb2xvckJsZW5kIH0pO1xuICAgIH1cblxuICAgIC8qKiBCdWZmZXIgcmVzb2x1dGlvbiwgMTAyNCAqL1xuICAgIEBJbnB1dCgpIHNldCByZXNvbHV0aW9uKHJlc29sdXRpb246IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IHJlc29sdXRpb24gfSk7XG4gICAgfVxuXG4gICAgLyoqIFRleHR1cmUgdG9uZW1hcHBpbmcgKi9cbiAgICBASW5wdXQoKSBzZXQgdG9uZU1hcHBlZCh0b25lTWFwcGVkOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgdG9uZU1hcHBlZCB9KTtcbiAgICB9XG5cbiAgICByZWFkb25seSAjc3RvcmUgPSBpbmplY3QoTmd0U3RvcmUpO1xuICAgIHJlYWRvbmx5ICNnbCA9IHRoaXMuI3N0b3JlLnNlbGVjdCgnZ2wnKTtcbiAgICByZWFkb25seSAjc2NlbmUgPSB0aGlzLiNzdG9yZS5zZWxlY3QoJ3NjZW5lJyk7XG4gICAgcmVhZG9ubHkgI2NhbWVyYSA9IHRoaXMuI3N0b3JlLnNlbGVjdCgnY2FtZXJhJyk7XG5cbiAgICByZWFkb25seSAjcmVzb2x1dGlvbiA9IHRoaXMuc2VsZWN0KCdyZXNvbHV0aW9uJyk7XG4gICAgcmVhZG9ubHkgI3RlbXBvcmFsID0gdGhpcy5zZWxlY3QoJ3RlbXBvcmFsJyk7XG4gICAgcmVhZG9ubHkgI2JsZW5kID0gdGhpcy5zZWxlY3QoJ2JsZW5kJyk7XG4gICAgcmVhZG9ubHkgI2ZyYW1lcyA9IHRoaXMuc2VsZWN0KCdmcmFtZXMnKTtcbiAgICByZWFkb25seSAjb3BhY2l0eSA9IHRoaXMuc2VsZWN0KCdvcGFjaXR5Jyk7XG4gICAgcmVhZG9ubHkgI2FscGhhVGVzdCA9IHRoaXMuc2VsZWN0KCdhbHBoYVRlc3QnKTtcblxuICAgIHJlYWRvbmx5IGFjY3VtdWxhdGl2ZVNoYWRvd3NTY2FsZSA9IHRoaXMuc2VsZWN0KCdzY2FsZScpO1xuICAgIHJlYWRvbmx5IGFjY3VtdWxhdGl2ZVNoYWRvd3NUb25lTWFwcGVkID0gdGhpcy5zZWxlY3QoJ3RvbmVNYXBwZWQnKTtcbiAgICByZWFkb25seSBhY2N1bXVsYXRpdmVTaGFkb3dzQ29sb3IgPSB0aGlzLnNlbGVjdCgnY29sb3InKTtcbiAgICByZWFkb25seSBhY2N1bXVsYXRpdmVTaGFkb3dzQ29sb3JCbGVuZCA9IHRoaXMuc2VsZWN0KCdjb2xvckJsZW5kJyk7XG5cbiAgICByZWFkb25seSBtZXNoUmVmID0gaW5qZWN0Tmd0UmVmPFRIUkVFLk1lc2g8VEhSRUUuUGxhbmVHZW9tZXRyeSwgU29mdFNoYWRvd01hdGVyaWFsSW5wdXRzICYgVEhSRUUuU2hhZGVyTWF0ZXJpYWw+PigpO1xuICAgIHJlYWRvbmx5IGFjY3VtdWxhdGl2ZVNoYWRvd3NSZWYgPSBpbmplY3ROZ3RSZWY8VEhSRUUuR3JvdXA+KCk7XG5cbiAgICByZWFkb25seSBwTE0gPSBjb21wdXRlZChcbiAgICAgICAgKCkgPT4gbmV3IFByb2dyZXNzaXZlTGlnaHRNYXAodW50cmFja2VkKHRoaXMuI2dsKSwgdW50cmFja2VkKHRoaXMuI3NjZW5lKSwgdGhpcy4jcmVzb2x1dGlvbigpKVxuICAgICk7XG5cbiAgICByZWFkb25seSBhcGkgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBMTSA9IHRoaXMucExNKCk7XG4gICAgICAgIGNvbnN0IGFscGhhVGVzdCA9IHRoaXMuI2FscGhhVGVzdCgpO1xuICAgICAgICBjb25zdCBvcGFjaXR5ID0gdGhpcy4jb3BhY2l0eSgpO1xuICAgICAgICBjb25zdCBjYW1lcmEgPSB0aGlzLiNjYW1lcmEoKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbGlnaHRzOiBuZXcgTWFwKCksXG4gICAgICAgICAgICB0ZW1wb3JhbDogdGhpcy4jdGVtcG9yYWwoKSxcbiAgICAgICAgICAgIGZyYW1lczogTWF0aC5tYXgoMiwgdGhpcy4jZnJhbWVzKCkpLFxuICAgICAgICAgICAgYmxlbmQ6IE1hdGgubWF4KDIsIHRoaXMuI2ZyYW1lcygpID09PSBJbmZpbml0eSA/IHRoaXMuI2JsZW5kKCkgOiB0aGlzLiNmcmFtZXMoKSksXG4gICAgICAgICAgICBjb3VudDogMCxcbiAgICAgICAgICAgIGdldE1lc2g6ICgpID0+IHRoaXMubWVzaFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgcmVzZXQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMubWVzaFJlZi5uYXRpdmVFbGVtZW50KSByZXR1cm47XG4gICAgICAgICAgICAgICAgLy8gQ2xlYXIgYnVmZmVycywgcmVzZXQgb3BhY2l0aWVzLCBzZXQgZnJhbWUgY291bnQgdG8gMFxuICAgICAgICAgICAgICAgIHBMTS5jbGVhcigpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGVyaWFsID0gdGhpcy5tZXNoUmVmLm5hdGl2ZUVsZW1lbnQubWF0ZXJpYWw7XG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwub3BhY2l0eSA9IDA7XG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuYWxwaGFUZXN0ID0gMDtcbiAgICAgICAgICAgICAgICB0aGlzLmFwaSgpLmNvdW50ID0gMDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1cGRhdGU6IChmcmFtZXMgPSAxKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm1lc2hSZWYubmF0aXZlRWxlbWVudCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIC8vIEFkYXB0IHRoZSBvcGFjaXR5LWJsZW5kIHJhdGlvIHRvIHRoZSBudW1iZXIgb2YgZnJhbWVzXG4gICAgICAgICAgICAgICAgY29uc3QgbWF0ZXJpYWwgPSB0aGlzLm1lc2hSZWYubmF0aXZlRWxlbWVudC5tYXRlcmlhbDtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYXBpKCkudGVtcG9yYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwub3BhY2l0eSA9IG9wYWNpdHk7XG4gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLmFscGhhVGVzdCA9IGFscGhhVGVzdDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5vcGFjaXR5ID0gTWF0aC5taW4ob3BhY2l0eSwgbWF0ZXJpYWwub3BhY2l0eSArIG9wYWNpdHkgLyB0aGlzLmFwaSgpLmJsZW5kKTtcbiAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuYWxwaGFUZXN0ID0gTWF0aC5taW4oYWxwaGFUZXN0LCBtYXRlcmlhbC5hbHBoYVRlc3QgKyBhbHBoYVRlc3QgLyB0aGlzLmFwaSgpLmJsZW5kKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBTd2l0Y2ggYWNjdW11bGF0aXZlIGxpZ2h0cyBvblxuICAgICAgICAgICAgICAgIHRoaXMuYWNjdW11bGF0aXZlU2hhZG93c1JlZi5uYXRpdmVFbGVtZW50LnZpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIC8vIENvbGxlY3Qgc2NlbmUgbGlnaHRzIGFuZCBtZXNoZXNcbiAgICAgICAgICAgICAgICBwTE0ucHJlcGFyZSgpO1xuXG4gICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBsaWdodG1hcCBhbmQgdGhlIGFjY3VtdWxhdGl2ZSBsaWdodHNcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZyYW1lczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXBpKCkubGlnaHRzLmZvckVhY2goKGxpZ2h0KSA9PiBsaWdodCgpLnVwZGF0ZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgcExNLnVwZGF0ZShjYW1lcmEsIHRoaXMuYXBpKCkuYmxlbmQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBTd2l0Y2ggbGlnaHRzIG9mZlxuICAgICAgICAgICAgICAgIHRoaXMuYWNjdW11bGF0aXZlU2hhZG93c1JlZi5uYXRpdmVFbGVtZW50LnZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBSZXN0b3JlIGxpZ2h0cyBhbmQgbWVzaGVzXG4gICAgICAgICAgICAgICAgcExNLmZpbmlzaCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9KTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICBmcmFtZXM6IDQwLFxuICAgICAgICAgICAgbGltaXQ6IEluZmluaXR5LFxuICAgICAgICAgICAgYmxlbmQ6IDIwLFxuICAgICAgICAgICAgc2NhbGU6IDEwLFxuICAgICAgICAgICAgb3BhY2l0eTogMSxcbiAgICAgICAgICAgIGFscGhhVGVzdDogMC43NSxcbiAgICAgICAgICAgIGNvbG9yOiAnYmxhY2snLFxuICAgICAgICAgICAgY29sb3JCbGVuZDogMixcbiAgICAgICAgICAgIHJlc29sdXRpb246IDEwMjQsXG4gICAgICAgICAgICB0b25lTWFwcGVkOiB0cnVlLFxuICAgICAgICAgICAgdGVtcG9yYWw6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkluSW5qZWN0aW9uQ29udGV4dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLiNjb25maWd1cmUoKTtcbiAgICAgICAgICAgIHRoaXMuI3Jlc2V0QW5kVXBkYXRlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpbmplY3RCZWZvcmVSZW5kZXIodGhpcy4jb25CZWZvcmVSZW5kZXIuYmluZCh0aGlzKSk7XG4gICAgfVxuXG4gICAgI29uQmVmb3JlUmVuZGVyKCkge1xuICAgICAgICBjb25zdCBpbnZhbGlkYXRlID0gdGhpcy4jc3RvcmUuZ2V0KCdpbnZhbGlkYXRlJyk7XG4gICAgICAgIGNvbnN0IGxpbWl0ID0gdGhpcy5nZXQoJ2xpbWl0Jyk7XG4gICAgICAgIGNvbnN0IGFwaSA9IHRoaXMuYXBpKCk7XG4gICAgICAgIGlmICgoYXBpLnRlbXBvcmFsIHx8IGFwaS5mcmFtZXMgPT09IEluZmluaXR5KSAmJiBhcGkuY291bnQgPCBhcGkuZnJhbWVzICYmIGFwaS5jb3VudCA8IGxpbWl0KSB7XG4gICAgICAgICAgICBpbnZhbGlkYXRlKCk7XG4gICAgICAgICAgICBhcGkudXBkYXRlKCk7XG4gICAgICAgICAgICBhcGkuY291bnQrKztcbiAgICAgICAgfVxuICAgIH1cblxuICAgICNjb25maWd1cmUoKSB7XG4gICAgICAgIGNvbnN0IHRyaWdnZXIgPSBjb21wdXRlZCgoKSA9PiAoeyBwTE06IHRoaXMucExNKCksIG1lc2g6IHRoaXMubWVzaFJlZi5uYXRpdmVFbGVtZW50IH0pKTtcbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgcExNLCBtZXNoIH0gPSB0cmlnZ2VyKCk7XG4gICAgICAgICAgICBpZiAoIW1lc2gpIHJldHVybjtcbiAgICAgICAgICAgIHBMTS5jb25maWd1cmUobWVzaCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgICNyZXNldEFuZFVwZGF0ZSgpIHtcbiAgICAgICAgY29uc3QgdHJpZ2dlciA9IGNvbXB1dGVkKCgpID0+ICh7XG4gICAgICAgICAgICBzdGF0ZTogdGhpcy5zdGF0ZSgpLFxuICAgICAgICAgICAgb2JqZWN0czogZ2V0TG9jYWxTdGF0ZSh0aGlzLiNzdG9yZS5nZXQoJ3NjZW5lJykpLm9iamVjdHMoKSxcbiAgICAgICAgICAgIG1lc2g6IHRoaXMubWVzaFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICB9KSk7XG5cbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgbWVzaCB9ID0gdHJpZ2dlcigpO1xuICAgICAgICAgICAgaWYgKCFtZXNoKSByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBhcGkgPSB1bnRyYWNrZWQodGhpcy5hcGkpO1xuICAgICAgICAgICAgLy8gUmVzZXQgaW50ZXJuYWxzLCBidWZmZXJzLCAuLi5cbiAgICAgICAgICAgIGFwaS5yZXNldCgpO1xuICAgICAgICAgICAgLy8gVXBkYXRlIGxpZ2h0bWFwXG4gICAgICAgICAgICBpZiAoIWFwaS50ZW1wb3JhbCAmJiBhcGkuZnJhbWVzICE9PSBJbmZpbml0eSkgYXBpLnVwZGF0ZShhcGkuYmxlbmQpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
|
|
268
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjdW11bGF0aXZlLXNoYWRvd3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc3RhZ2luZy9zcmMvYWNjdW11bGF0aXZlLXNoYWRvd3MvYWNjdW11bGF0aXZlLXNoYWRvd3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLHNCQUFzQixFQUN0QixTQUFTLEVBQ1QsS0FBSyxFQUNMLFFBQVEsRUFDUixNQUFNLEVBQ04sVUFBVSxFQUNWLFNBQVMsR0FFVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ04sTUFBTSxFQUNOLGFBQWEsRUFDYixrQkFBa0IsRUFDbEIsWUFBWSxFQUNaLGNBQWMsRUFDZCxXQUFXLEdBRVgsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFtQyxNQUFNLDRCQUE0QixDQUFDO0FBQ2pHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNuRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7QUFFOUQsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDO0FBc0MzRCxNQUFNLENBQUMsTUFBTSxDQUFDLGdDQUFnQyxFQUFFLGlDQUFpQyxDQUFDLEdBQUcsb0JBQW9CLENBQ3hHLENBQUMsT0FBZ0MsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFDakQsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLEVBQUUsQ0FDcEUsQ0FBQztBQTBCRixNQUFNLE9BQU8sdUJBQXVCO0lBb0JuQyx5RkFB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RSxDQUFDO29CQUNoRCxPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztpQkFDakM7MEVBbUJTLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFHMEIsT0FBTztzQkFBdEMsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7Z0JBS0ssTUFBTTtzQkFBcEMsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUU7Z0JBS00sTUFBTTtzQkFBcEMsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUU7Z0JBS00sTUFBTTtzQkFBcEMsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUU7Z0JBS1MsU0FBUztzQkFBMUMsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUU7Z0JBS0ssUUFBUTtzQkFBeEMsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7Z0JBS1EsVUFBVTtzQkFBNUMsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUU7Z0JBS0UsTUFBTTtzQkFBcEMsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUU7Z0JBS1csV0FBVztzQkFBOUMsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUU7Z0JBS00sV0FBVztzQkFBOUMsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUU7Z0JBS00sV0FBVztzQkFBOUMsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDVVNUT01fRUxFTUVOVFNfU0NIRU1BLFxuXHRDb21wb25lbnQsXG5cdElucHV0LFxuXHRjb21wdXRlZCxcblx0ZWZmZWN0LFxuXHRmb3J3YXJkUmVmLFxuXHR1bnRyYWNrZWQsXG5cdHR5cGUgU2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG5cdGV4dGVuZCxcblx0Z2V0TG9jYWxTdGF0ZSxcblx0aW5qZWN0QmVmb3JlUmVuZGVyLFxuXHRpbmplY3ROZ3RSZWYsXG5cdGluamVjdE5ndFN0b3JlLFxuXHRzaWduYWxTdG9yZSxcblx0dHlwZSBOZ3RHcm91cCxcbn0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBTb2Z0U2hhZG93TWF0ZXJpYWwsIHR5cGUgTmd0U29mdFNoYWRvd01hdGVyaWFsU3RhdGUgfSBmcm9tICdhbmd1bGFyLXRocmVlLXNvYmEvc2hhZGVycyc7XG5pbXBvcnQgeyBjcmVhdGVJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ25neHRlbnNpb24vY3JlYXRlLWluamVjdGlvbi10b2tlbic7XG5pbXBvcnQgeyBHcm91cCwgTWVzaCwgUGxhbmVHZW9tZXRyeSB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IFByb2dyZXNzaXZlTGlnaHRNYXAgfSBmcm9tICcuL3Byb2dyZXNzaXZlLWxpZ2h0LW1hcCc7XG5cbmV4dGVuZCh7IEdyb3VwLCBTb2Z0U2hhZG93TWF0ZXJpYWwsIE1lc2gsIFBsYW5lR2VvbWV0cnkgfSk7XG5cbmV4cG9ydCB0eXBlIE5ndHNBY2N1bXVsYXRpdmVTaGFkb3dzU3RhdGUgPSB7XG5cdC8qKiBIb3cgbWFueSBmcmFtZXMgaXQgY2FuIHJlbmRlciwgbW9yZSB5aWVsZHMgY2xlYW5lciByZXN1bHRzIGJ1dCB0YWtlcyBtb3JlIHRpbWUsIDQwICovXG5cdGZyYW1lczogbnVtYmVyO1xuXHQvKiogSWYgZnJhbWVzID09PSBJbmZpbml0eSBibGVuZCBjb250cm9scyB0aGUgcmVmcmVzaCByYXRpbywgMTAwICovXG5cdGJsZW5kOiBudW1iZXI7XG5cdC8qKiBDYW4gbGltaXQgdGhlIGFtb3VudCBvZiBmcmFtZXMgcmVuZGVyZWQgaWYgZnJhbWVzID09PSBJbmZpbml0eSwgdXN1YWxseSB0byBnZXQgc29tZSBwZXJmb3JtYW5jZSBiYWNrIG9uY2UgYSBtb3ZhYmxlIHNjZW5lIGhhcyBzZXR0bGVkLCBJbmZpbml0eSAqL1xuXHRsaW1pdDogbnVtYmVyO1xuXHQvKiogU2NhbGUgb2YgdGhlIHBsYW5lLCAgKi9cblx0c2NhbGU6IG51bWJlcjtcblx0LyoqIFRlbXBvcmFsIGFjY3VtdWxhdGVzIHNoYWRvd3Mgb3ZlciB0aW1lIHdoaWNoIGlzIG1vcmUgcGVyZm9ybWFudCBidXQgaGFzIGEgdmlzdWFsIHJlZ3Jlc3Npb24gb3ZlciBpbnN0YW50IHJlc3VsdHMsIGZhbHNlICAqL1xuXHR0ZW1wb3JhbDogYm9vbGVhbjtcblx0LyoqIE9wYWNpdHkgb2YgdGhlIHBsYW5lLCAxICovXG5cdG9wYWNpdHk6IG51bWJlcjtcblx0LyoqIERpc2NhcmRzIGFscGhhIHBpeGVscywgMC42NSAqL1xuXHRhbHBoYVRlc3Q6IG51bWJlcjtcblx0LyoqIFNoYWRvdyBjb2xvciwgYmxhY2sgKi9cblx0Y29sb3I6IHN0cmluZztcblx0LyoqIENvbG9yYmxlbmQsIGhvdyBtdWNoIGNvbG9ycyB0dXJuIHRvIGJsYWNrLCAwIGlzIGJsYWNrLCAyICovXG5cdGNvbG9yQmxlbmQ6IG51bWJlcjtcblx0LyoqIEJ1ZmZlciByZXNvbHV0aW9uLCAxMDI0ICovXG5cdHJlc29sdXRpb246IG51bWJlcjtcblx0LyoqIFRleHR1cmUgdG9uZW1hcHBpbmcgKi9cblx0dG9uZU1hcHBlZDogYm9vbGVhbjtcbn07XG5cbmRlY2xhcmUgZ2xvYmFsIHtcblx0aW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG5cdFx0LyoqXG5cdFx0ICogQGV4dGVuZHMgbmd0LWdyb3VwXG5cdFx0ICovXG5cdFx0J25ndHMtYWNjdW11bGF0aXZlLXNoYWRvd3MnOiBOZ3RzQWNjdW11bGF0aXZlU2hhZG93c1N0YXRlICYgTmd0R3JvdXA7XG5cdH1cbn1cblxuZXhwb3J0IHR5cGUgTmd0c0FjY3VtdWxhdGl2ZVNoYWRvd3NMaWdodEFwaSA9IHsgdXBkYXRlOiAoKSA9PiB2b2lkIH07XG5cbmV4cG9ydCBjb25zdCBbaW5qZWN0Tmd0c0FjY3VtdWxhdGl2ZVNoYWRvd3NBcGksIHByb3ZpZGVOZ3RzQWNjdW11bGF0aXZlU2hhZG93c0FwaV0gPSBjcmVhdGVJbmplY3Rpb25Ub2tlbihcblx0KHNoYWRvd3M6IE5ndHNBY2N1bXVsYXRpdmVTaGFkb3dzKSA9PiBzaGFkb3dzLmFwaSxcblx0eyBpc1Jvb3Q6IGZhbHNlLCBkZXBzOiBbZm9yd2FyZFJlZigoKSA9PiBOZ3RzQWNjdW11bGF0aXZlU2hhZG93cyldIH0sXG4pO1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLWFjY3VtdWxhdGl2ZS1zaGFkb3dzJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0LWdyb3VwIG5ndENvbXBvdW5kPlxuXHRcdFx0PG5ndC1ncm91cCBbdHJhdmVyc2VdPVwibnVsbFRyYXZlcnNlXCIgW3JlZl09XCJhY2N1bXVsYXRpdmVTaGFkb3dzUmVmXCI+XG5cdFx0XHRcdDxuZy1jb250ZW50IC8+XG5cdFx0XHQ8L25ndC1ncm91cD5cblx0XHRcdDxuZ3QtbWVzaCBbcmVjZWl2ZVNoYWRvd109XCJ0cnVlXCIgW3JlZl09XCJtZXNoUmVmXCIgW3NjYWxlXT1cInNjYWxlKClcIiBbcm90YXRpb25dPVwiWy1NYXRoLlBJIC8gMiwgMCwgMF1cIj5cblx0XHRcdFx0PG5ndC1wbGFuZS1nZW9tZXRyeSAvPlxuXHRcdFx0XHQ8bmd0LXNvZnQtc2hhZG93LW1hdGVyaWFsXG5cdFx0XHRcdFx0W3RyYW5zcGFyZW50XT1cInRydWVcIlxuXHRcdFx0XHRcdFtkZXB0aFdyaXRlXT1cImZhbHNlXCJcblx0XHRcdFx0XHRbdG9uZU1hcHBlZF09XCJ0b25lTWFwcGVkKClcIlxuXHRcdFx0XHRcdFtjb2xvcl09XCJjb2xvcigpXCJcblx0XHRcdFx0XHRbYmxlbmRdPVwiY29sb3JCbGVuZCgpXCJcblx0XHRcdFx0XHRbbWFwXT1cIm1hcCgpXCJcblx0XHRcdFx0Lz5cblx0XHRcdDwvbmd0LW1lc2g+XG5cdFx0PC9uZ3QtZ3JvdXA+XG5cdGAsXG5cdHByb3ZpZGVyczogW3Byb3ZpZGVOZ3RzQWNjdW11bGF0aXZlU2hhZG93c0FwaSgpXSxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzQWNjdW11bGF0aXZlU2hhZG93cyB7XG5cdHByaXZhdGUgaW5wdXRzID0gc2lnbmFsU3RvcmU8Tmd0c0FjY3VtdWxhdGl2ZVNoYWRvd3NTdGF0ZT4oe1xuXHRcdGZyYW1lczogNDAsXG5cdFx0bGltaXQ6IEluZmluaXR5LFxuXHRcdGJsZW5kOiAyMCxcblx0XHRzY2FsZTogMTAsXG5cdFx0b3BhY2l0eTogMSxcblx0XHRhbHBoYVRlc3Q6IDAuNzUsXG5cdFx0Y29sb3I6ICdibGFjaycsXG5cdFx0Y29sb3JCbGVuZDogMixcblx0XHRyZXNvbHV0aW9uOiAxMDI0LFxuXHRcdHRvbmVNYXBwZWQ6IHRydWUsXG5cdFx0dGVtcG9yYWw6IGZhbHNlLFxuXHR9KTtcblxuXHRudWxsVHJhdmVyc2UgPSAoKSA9PiBudWxsO1xuXHRNYXRoID0gTWF0aDtcblxuXHRASW5wdXQoKSBhY2N1bXVsYXRpdmVTaGFkb3dzUmVmID0gaW5qZWN0Tmd0UmVmPFRIUkVFLkdyb3VwPigpO1xuXG5cdC8qKiBIb3cgbWFueSBmcmFtZXMgaXQgY2FuIHJlbmRlciwgbW9yZSB5aWVsZHMgY2xlYW5lciByZXN1bHRzIGJ1dCB0YWtlcyBtb3JlIHRpbWUsIDQwICovXG5cdEBJbnB1dCh7IGFsaWFzOiAnZnJhbWVzJyB9KSBzZXQgX2ZyYW1lcyhmcmFtZXM6IG51bWJlcikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IGZyYW1lcyB9KTtcblx0fVxuXG5cdC8qKiBJZiBmcmFtZXMgPT09IEluZmluaXR5IGJsZW5kIGNvbnRyb2xzIHRoZSByZWZyZXNoIHJhdGlvLCAxMDAgKi9cblx0QElucHV0KHsgYWxpYXM6ICdibGVuZCcgfSkgc2V0IF9ibGVuZChibGVuZDogbnVtYmVyKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgYmxlbmQgfSk7XG5cdH1cblxuXHQvKiogQ2FuIGxpbWl0IHRoZSBhbW91bnQgb2YgZnJhbWVzIHJlbmRlcmVkIGlmIGZyYW1lcyA9PT0gSW5maW5pdHksIHVzdWFsbHkgdG8gZ2V0IHNvbWUgcGVyZm9ybWFuY2UgYmFjayBvbmNlIGEgbW92YWJsZSBzY2VuZSBoYXMgc2V0dGxlZCwgSW5maW5pdHkgKi9cblx0QElucHV0KHsgYWxpYXM6ICdsaW1pdCcgfSkgc2V0IF9saW1pdChsaW1pdDogbnVtYmVyKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgbGltaXQgfSk7XG5cdH1cblxuXHQvKiogU2NhbGUgb2YgdGhlIHBsYW5lLCAgKi9cblx0QElucHV0KHsgYWxpYXM6ICdzY2FsZScgfSkgc2V0IF9zY2FsZShzY2FsZTogbnVtYmVyKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgc2NhbGUgfSk7XG5cdH1cblxuXHQvKiogVGVtcG9yYWwgYWNjdW11bGF0ZXMgc2hhZG93cyBvdmVyIHRpbWUgd2hpY2ggaXMgbW9yZSBwZXJmb3JtYW50IGJ1dCBoYXMgYSB2aXN1YWwgcmVncmVzc2lvbiBvdmVyIGluc3RhbnQgcmVzdWx0cywgZmFsc2UgICovXG5cdEBJbnB1dCh7IGFsaWFzOiAndGVtcG9yYWwnIH0pIHNldCBfdGVtcG9yYWwodGVtcG9yYWw6IGJvb2xlYW4pIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyB0ZW1wb3JhbCB9KTtcblx0fVxuXG5cdC8qKiBPcGFjaXR5IG9mIHRoZSBwbGFuZSwgMSAqL1xuXHRASW5wdXQoeyBhbGlhczogJ29wYWNpdHknIH0pIHNldCBfb3BhY2l0eShvcGFjaXR5OiBudW1iZXIpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBvcGFjaXR5IH0pO1xuXHR9XG5cblx0LyoqIERpc2NhcmRzIGFscGhhIHBpeGVscywgMC42NSAqL1xuXHRASW5wdXQoeyBhbGlhczogJ2FscGhhVGVzdCcgfSkgc2V0IF9hbHBoYVRlc3QoYWxwaGFUZXN0OiBudW1iZXIpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBhbHBoYVRlc3QgfSk7XG5cdH1cblxuXHQvKiogU2hhZG93IGNvbG9yLCBibGFjayAqL1xuXHRASW5wdXQoeyBhbGlhczogJ2NvbG9yJyB9KSBzZXQgX2NvbG9yKGNvbG9yOiBzdHJpbmcpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBjb2xvciB9KTtcblx0fVxuXG5cdC8qKiBDb2xvcmJsZW5kLCBob3cgbXVjaCBjb2xvcnMgdHVybiB0byBibGFjaywgMCBpcyBibGFjaywgMiAqL1xuXHRASW5wdXQoeyBhbGlhczogJ2NvbG9yQmxlbmQnIH0pIHNldCBfY29sb3JCbGVuZChjb2xvckJsZW5kOiBudW1iZXIpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBjb2xvckJsZW5kIH0pO1xuXHR9XG5cblx0LyoqIEJ1ZmZlciByZXNvbHV0aW9uLCAxMDI0ICovXG5cdEBJbnB1dCh7IGFsaWFzOiAncmVzb2x1dGlvbicgfSkgc2V0IF9yZXNvbHV0aW9uKHJlc29sdXRpb246IG51bWJlcikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IHJlc29sdXRpb24gfSk7XG5cdH1cblxuXHQvKiogVGV4dHVyZSB0b25lbWFwcGluZyAqL1xuXHRASW5wdXQoeyBhbGlhczogJ3RvbmVNYXBwZWQnIH0pIHNldCBfdG9uZU1hcHBlZCh0b25lTWFwcGVkOiBib29sZWFuKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgdG9uZU1hcHBlZCB9KTtcblx0fVxuXG5cdG1lc2hSZWYgPSBpbmplY3ROZ3RSZWY8VEhSRUUuTWVzaDxUSFJFRS5QbGFuZUdlb21ldHJ5LCBOZ3RTb2Z0U2hhZG93TWF0ZXJpYWxTdGF0ZSAmIFRIUkVFLlNoYWRlck1hdGVyaWFsPj4oKTtcblxuXHRwcml2YXRlIHN0b3JlID0gaW5qZWN0Tmd0U3RvcmUoKTtcblx0cHJpdmF0ZSBnbCA9IHRoaXMuc3RvcmUuc2VsZWN0KCdnbCcpO1xuXHRwcml2YXRlIHNjZW5lID0gdGhpcy5zdG9yZS5zZWxlY3QoJ3NjZW5lJyk7XG5cdHByaXZhdGUgY2FtZXJhID0gdGhpcy5zdG9yZS5zZWxlY3QoJ2NhbWVyYScpO1xuXHRwcml2YXRlIGludmFsaWRhdGUgPSB0aGlzLnN0b3JlLnNlbGVjdCgnaW52YWxpZGF0ZScpO1xuXG5cdHByaXZhdGUgcmVzb2x1dGlvbiA9IHRoaXMuaW5wdXRzLnNlbGVjdCgncmVzb2x1dGlvbicpO1xuXHRwcml2YXRlIGFscGhhVGVzdCA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnYWxwaGFUZXN0Jyk7XG5cdHByaXZhdGUgb3BhY2l0eSA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnb3BhY2l0eScpO1xuXHRwcml2YXRlIHRlbXBvcmFsID0gdGhpcy5pbnB1dHMuc2VsZWN0KCd0ZW1wb3JhbCcpO1xuXHRwcml2YXRlIGJsZW5kID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdibGVuZCcpO1xuXHRwcml2YXRlIGZyYW1lcyA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnZnJhbWVzJyk7XG5cblx0cExNID0gY29tcHV0ZWQoKCkgPT4gbmV3IFByb2dyZXNzaXZlTGlnaHRNYXAodW50cmFja2VkKHRoaXMuZ2wpLCB1bnRyYWNrZWQodGhpcy5zY2VuZSksIHRoaXMucmVzb2x1dGlvbigpKSk7XG5cblx0c2NhbGUgPSB0aGlzLmlucHV0cy5zZWxlY3QoJ3NjYWxlJyk7XG5cdHRvbmVNYXBwZWQgPSB0aGlzLmlucHV0cy5zZWxlY3QoJ3RvbmVNYXBwZWQnKTtcblx0Y29sb3IgPSB0aGlzLmlucHV0cy5zZWxlY3QoJ2NvbG9yJyk7XG5cdGNvbG9yQmxlbmQgPSB0aGlzLmlucHV0cy5zZWxlY3QoJ2NvbG9yQmxlbmQnKTtcblx0bWFwID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5wTE0oKS5wcm9ncmVzc2l2ZUxpZ2h0TWFwMi50ZXh0dXJlKTtcblxuXHRhcGkgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3QgW3BMTSwgYWxwaGFUZXN0LCBvcGFjaXR5LCBjYW1lcmEsIHRlbXBvcmFsLCBibGVuZCwgZnJhbWVzXSA9IFtcblx0XHRcdHRoaXMucExNKCksXG5cdFx0XHR0aGlzLmFscGhhVGVzdCgpLFxuXHRcdFx0dGhpcy5vcGFjaXR5KCksXG5cdFx0XHR0aGlzLmNhbWVyYSgpLFxuXHRcdFx0dGhpcy50ZW1wb3JhbCgpLFxuXHRcdFx0dGhpcy5ibGVuZCgpLFxuXHRcdFx0dGhpcy5mcmFtZXMoKSxcblx0XHRdO1xuXHRcdGNvbnN0IGFwaSA9IHtcblx0XHRcdGxpZ2h0czogbmV3IE1hcDxzdHJpbmcsIFNpZ25hbDxOZ3RzQWNjdW11bGF0aXZlU2hhZG93c0xpZ2h0QXBpPj4oKSxcblx0XHRcdHRlbXBvcmFsLFxuXHRcdFx0ZnJhbWVzOiBNYXRoLm1heCgyLCBmcmFtZXMpLFxuXHRcdFx0YmxlbmQ6IE1hdGgubWF4KDIsIGZyYW1lcyA9PT0gSW5maW5pdHkgPyBibGVuZCA6IGZyYW1lcyksXG5cdFx0XHRjb3VudDogMCxcblx0XHRcdGdldE1lc2g6ICgpID0+IHRoaXMubWVzaFJlZi5uYXRpdmVFbGVtZW50LFxuXHRcdFx0cmVzZXQ6ICgpID0+IHtcblx0XHRcdFx0aWYgKCF0aGlzLm1lc2hSZWYubmF0aXZlRWxlbWVudCkgcmV0dXJuO1xuXHRcdFx0XHQvLyBDbGVhciBidWZmZXJzLCByZXNldCBvcGFjaXRpZXMsIHNldCBmcmFtZSBjb3VudCB0byAwXG5cdFx0XHRcdHBMTS5jbGVhcigpO1xuXHRcdFx0XHRjb25zdCBtYXRlcmlhbCA9IHRoaXMubWVzaFJlZi5uYXRpdmVFbGVtZW50Lm1hdGVyaWFsO1xuXHRcdFx0XHRtYXRlcmlhbC5vcGFjaXR5ID0gMDtcblx0XHRcdFx0bWF0ZXJpYWwuYWxwaGFUZXN0ID0gMDtcblx0XHRcdFx0YXBpLmNvdW50ID0gMDtcblx0XHRcdH0sXG5cdFx0XHR1cGRhdGU6IChmcmFtZXMgPSAxKSA9PiB7XG5cdFx0XHRcdGlmICghdGhpcy5tZXNoUmVmLm5hdGl2ZUVsZW1lbnQpIHJldHVybjtcblx0XHRcdFx0Ly8gQWRhcHQgdGhlIG9wYWNpdHktYmxlbmQgcmF0aW8gdG8gdGhlIG51bWJlciBvZiBmcmFtZXNcblx0XHRcdFx0Y29uc3QgbWF0ZXJpYWwgPSB0aGlzLm1lc2hSZWYubmF0aXZlRWxlbWVudC5tYXRlcmlhbDtcblx0XHRcdFx0aWYgKCFhcGkudGVtcG9yYWwpIHtcblx0XHRcdFx0XHRtYXRlcmlhbC5vcGFjaXR5ID0gb3BhY2l0eTtcblx0XHRcdFx0XHRtYXRlcmlhbC5hbHBoYVRlc3QgPSBhbHBoYVRlc3Q7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bWF0ZXJpYWwub3BhY2l0eSA9IE1hdGgubWluKG9wYWNpdHksIG1hdGVyaWFsLm9wYWNpdHkgKyBvcGFjaXR5IC8gYXBpLmJsZW5kKTtcblx0XHRcdFx0XHRtYXRlcmlhbC5hbHBoYVRlc3QgPSBNYXRoLm1pbihhbHBoYVRlc3QsIG1hdGVyaWFsLmFscGhhVGVzdCArIGFscGhhVGVzdCAvIGFwaS5ibGVuZCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBTd2l0Y2ggYWNjdW11bGF0aXZlIGxpZ2h0cyBvblxuXHRcdFx0XHR0aGlzLmFjY3VtdWxhdGl2ZVNoYWRvd3NSZWYubmF0aXZlRWxlbWVudC52aXNpYmxlID0gdHJ1ZTtcblx0XHRcdFx0Ly8gQ29sbGVjdCBzY2VuZSBsaWdodHMgYW5kIG1lc2hlc1xuXHRcdFx0XHRwTE0ucHJlcGFyZSgpO1xuXG5cdFx0XHRcdC8vIFVwZGF0ZSB0aGUgbGlnaHRtYXAgYW5kIHRoZSBhY2N1bXVsYXRpdmUgbGlnaHRzXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZnJhbWVzOyBpKyspIHtcblx0XHRcdFx0XHRhcGkubGlnaHRzLmZvckVhY2goKGxpZ2h0KSA9PiBsaWdodCgpLnVwZGF0ZSgpKTtcblx0XHRcdFx0XHRwTE0udXBkYXRlKGNhbWVyYSwgYXBpLmJsZW5kKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFN3aXRjaCBsaWdodHMgb2ZmXG5cdFx0XHRcdHRoaXMuYWNjdW11bGF0aXZlU2hhZG93c1JlZi5uYXRpdmVFbGVtZW50LnZpc2libGUgPSBmYWxzZTtcblx0XHRcdFx0Ly8gUmVzdG9yZSBsaWdodHMgYW5kIG1lc2hlc1xuXHRcdFx0XHRwTE0uZmluaXNoKCk7XG5cdFx0XHR9LFxuXHRcdH07XG5cblx0XHRyZXR1cm4gYXBpO1xuXHR9KTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmNvbmZpZ3VyZSgpO1xuXHRcdHRoaXMucmVzZXRBbmRVcGRhdGUoKTtcblx0XHR0aGlzLmJlZm9yZVJlbmRlcigpO1xuXHR9XG5cblx0cHJpdmF0ZSBjb25maWd1cmUoKSB7XG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdGNvbnN0IFtwTE0sIG1lc2hdID0gW3RoaXMucExNKCksIHRoaXMubWVzaFJlZi5uYXRpdmVFbGVtZW50XTtcblx0XHRcdGlmICghbWVzaCkgcmV0dXJuO1xuXHRcdFx0cExNLmNvbmZpZ3VyZShtZXNoKTtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgcmVzZXRBbmRVcGRhdGUoKSB7XG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdGNvbnN0IFssICwgbWVzaF0gPSBbXG5cdFx0XHRcdHRoaXMuaW5wdXRzLnN0YXRlKCksXG5cdFx0XHRcdGdldExvY2FsU3RhdGUodW50cmFja2VkKHRoaXMuc2NlbmUpKS5vYmplY3RzKCksXG5cdFx0XHRcdHRoaXMubWVzaFJlZi5uYXRpdmVFbGVtZW50LFxuXHRcdFx0XTtcblx0XHRcdGlmICghbWVzaCkgcmV0dXJuO1xuXHRcdFx0Y29uc3QgYXBpID0gdW50cmFja2VkKHRoaXMuYXBpKTtcblx0XHRcdC8vIFJlc2V0IGludGVybmFscywgYnVmZmVycywgLi4uXG5cdFx0XHRhcGkucmVzZXQoKTtcblx0XHRcdC8vIFVwZGF0ZSBsaWdodG1hcFxuXHRcdFx0aWYgKCFhcGkudGVtcG9yYWwgJiYgYXBpLmZyYW1lcyAhPT0gSW5maW5pdHkpIGFwaS51cGRhdGUoYXBpLmJsZW5kKTtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgYmVmb3JlUmVuZGVyKCkge1xuXHRcdGluamVjdEJlZm9yZVJlbmRlcigoKSA9PiB7XG5cdFx0XHRjb25zdCBbYXBpLCBsaW1pdF0gPSBbdGhpcy5hcGkoKSwgdGhpcy5pbnB1dHMuZ2V0KCdsaW1pdCcpXTtcblx0XHRcdGlmICgoYXBpLnRlbXBvcmFsIHx8IGFwaS5mcmFtZXMgPT09IEluZmluaXR5KSAmJiBhcGkuY291bnQgPCBhcGkuZnJhbWVzICYmIGFwaS5jb3VudCA8IGxpbWl0KSB7XG5cdFx0XHRcdHRoaXMuaW52YWxpZGF0ZSgpO1xuXHRcdFx0XHRhcGkudXBkYXRlKCk7XG5cdFx0XHRcdGFwaS5jb3VudCsrO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG59XG4iXX0=
|
|
@@ -19,13 +19,13 @@ export class ProgressiveLightMap {
|
|
|
19
19
|
this.clearColor = new THREE.Color();
|
|
20
20
|
this.clearAlpha = 0;
|
|
21
21
|
// Create the Progressive LightMap Texture
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
22
|
+
const textureParams = {
|
|
23
|
+
type: THREE.HalfFloatType,
|
|
24
|
+
magFilter: THREE.NearestFilter,
|
|
25
|
+
minFilter: THREE.NearestFilter,
|
|
26
|
+
};
|
|
27
|
+
this.progressiveLightMap1 = new THREE.WebGLRenderTarget(this.res, this.res, textureParams);
|
|
28
|
+
this.progressiveLightMap2 = new THREE.WebGLRenderTarget(this.res, this.res, textureParams);
|
|
29
29
|
// Inject some spicy new logic into a standard phong material
|
|
30
30
|
this.discardMat = new DiscardMaterial();
|
|
31
31
|
this.targetMat = new THREE.MeshLambertMaterial({ fog: false });
|
|
@@ -105,4 +105,4 @@ export class ProgressiveLightMap {
|
|
|
105
105
|
this.scene.background = oldBg;
|
|
106
106
|
}
|
|
107
107
|
}
|
|
108
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3NpdmUtbGlnaHQtbWFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL3N0YWdpbmcvc3JjL2FjY3VtdWxhdGl2ZS1zaGFkb3dzL3Byb2dyZXNzaXZlLWxpZ2h0LW1hcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFL0IsU0FBUyxPQUFPLENBQUMsTUFBVztJQUN4QixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUM7QUFDMUIsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLE1BQVc7SUFDM0IsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztBQUM3QixDQUFDO0FBRUQsb0ZBQW9GO0FBQ3BGLE1BQU0sT0FBTyxtQkFBbUI7SUFpQjVCLFlBQVksUUFBNkIsRUFBRSxLQUFrQixFQUFFLE1BQWMsSUFBSTtRQUM3RSxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFFcEIsMENBQTBDO1FBQzFDLE1BQU0sTUFBTSxHQUFHLDZCQUE2QixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FB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ZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUNsQyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXNjYXJkTWF0ZXJpYWwgfSBmcm9tICdhbmd1bGFyLXRocmVlLXNvYmEvc2hhZGVycyc7XG5pbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5cbmZ1bmN0aW9uIGlzTGlnaHQob2JqZWN0OiBhbnkpOiBvYmplY3QgaXMgVEhSRUUuTGlnaHQge1xuICAgIHJldHVybiBvYmplY3QuaXNMaWdodDtcbn1cblxuZnVuY3Rpb24gaXNHZW9tZXRyeShvYmplY3Q6IGFueSk6IG9iamVjdCBpcyBUSFJFRS5NZXNoIHtcbiAgICByZXR1cm4gISFvYmplY3QuZ2VvbWV0cnk7XG59XG5cbi8vIEJhc2VkIG9uIFwiUHJvZ3Jlc3NpdmUgTGlnaHQgTWFwIEFjY3VtdWxhdG9yXCIsIGJ5IFt6YWxvXShodHRwczovL2dpdGh1Yi5jb20vemFsby8pXG5leHBvcnQgY2xhc3MgUHJvZ3Jlc3NpdmVMaWdodE1hcCB7XG4gICAgcmVuZGVyZXI6IFRIUkVFLldlYkdMUmVuZGVyZXI7XG4gICAgcmVzOiBudW1iZXI7XG4gICAgc2NlbmU6IFRIUkVFLlNjZW5lO1xuICAgIG9iamVjdDogVEhSRUUuTWVzaCB8IG51bGw7XG4gICAgYnVmZmVyMUFjdGl2ZTogYm9vbGVhbjtcbiAgICBwcm9ncmVzc2l2ZUxpZ2h0TWFwMTogVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ7XG4gICAgcHJvZ3Jlc3NpdmVMaWdodE1hcDI6IFRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0O1xuICAgIGRpc2NhcmRNYXQ6IFRIUkVFLlNoYWRlck1hdGVyaWFsO1xuICAgIHRhcmdldE1hdDogVEhSRUUuTWVzaExhbWJlcnRNYXRlcmlhbDtcbiAgICBwcmV2aW91c1NoYWRvd01hcDogeyB2YWx1ZTogVEhSRUUuVGV4dHVyZSB9O1xuICAgIGF2ZXJhZ2luZ1dpbmRvdzogeyB2YWx1ZTogbnVtYmVyIH07XG4gICAgY2xlYXJDb2xvcjogVEhSRUUuQ29sb3I7XG4gICAgY2xlYXJBbHBoYTogbnVtYmVyO1xuICAgIGxpZ2h0czogeyBvYmplY3Q6IFRIUkVFLkxpZ2h0OyBpbnRlbnNpdHk6IG51bWJlciB9W107XG4gICAgbWVzaGVzOiB7IG9iamVjdDogVEhSRUUuTWVzaDsgbWF0ZXJpYWw6IFRIUkVFLk1hdGVyaWFsIHwgVEhSRUUuTWF0ZXJpYWxbXSB9W107XG5cbiAgICBjb25zdHJ1Y3RvcihyZW5kZXJlcjogVEhSRUUuV2ViR0xSZW5kZXJlciwgc2NlbmU6IFRIUkVFLlNjZW5lLCByZXM6IG51bWJlciA9IDEwMjQpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuICAgICAgICB0aGlzLnJlcyA9IHJlcztcbiAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lO1xuICAgICAgICB0aGlzLmJ1ZmZlcjFBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5saWdodHMgPSBbXTtcbiAgICAgICAgdGhpcy5tZXNoZXMgPSBbXTtcbiAgICAgICAgdGhpcy5vYmplY3QgPSBudWxsO1xuICAgICAgICB0aGlzLmNsZWFyQ29sb3IgPSBuZXcgVEhSRUUuQ29sb3IoKTtcbiAgICAgICAgdGhpcy5jbGVhckFscGhhID0gMDtcblxuICAgICAgICAvLyBDcmVhdGUgdGhlIFByb2dyZXNzaXZlIExpZ2h0TWFwIFRleHR1cmVcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gLyhBbmRyb2lkfGlQYWR8aVBob25lfGlQb2QpL2cudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSA/IFRIUkVFLkhhbGZGbG9hdFR5cGUgOiBUSFJFRS5GbG9hdFR5cGU7XG4gICAgICAgIHRoaXMucHJvZ3Jlc3NpdmVMaWdodE1hcDEgPSBuZXcgVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQodGhpcy5yZXMsIHRoaXMucmVzLCB7XG4gICAgICAgICAgICB0eXBlOiBmb3JtYXQsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnByb2dyZXNzaXZlTGlnaHRNYXAyID0gbmV3IFRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0KHRoaXMucmVzLCB0aGlzLnJlcywge1xuICAgICAgICAgICAgdHlwZTogZm9ybWF0LFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBJbmplY3Qgc29tZSBzcGljeSBuZXcgbG9naWMgaW50byBhIHN0YW5kYXJkIHBob25nIG1hdGVyaWFsXG4gICAgICAgIHRoaXMuZGlzY2FyZE1hdCA9IG5ldyBEaXNjYXJkTWF0ZXJpYWwoKTtcbiAgICAgICAgdGhpcy50YXJnZXRNYXQgPSBuZXcgVEhSRUUuTWVzaExhbWJlcnRNYXRlcmlhbCh7IGZvZzogZmFsc2UgfSk7XG4gICAgICAgIHRoaXMucHJldmlvdXNTaGFkb3dNYXAgPSB7IHZhbHVlOiB0aGlzLnByb2dyZXNzaXZlTGlnaHRNYXAxLnRleHR1cmUgfTtcbiAgICAgICAgdGhpcy5hdmVyYWdpbmdXaW5kb3cgPSB7IHZhbHVlOiAxMDAgfTtcbiAgICAgICAgdGhpcy50YXJnZXRNYXQub25CZWZvcmVDb21waWxlID0gKHNoYWRlcikgPT4ge1xuICAgICAgICAgICAgLy8gVmVydGV4IFNoYWRlcjogU2V0IFZlcnRleCBQb3NpdGlvbnMgdG8gdGhlIFVud3JhcHBlZCBVViBQb3NpdGlvbnNcbiAgICAgICAgICAgIHNoYWRlci52ZXJ0ZXhTaGFkZXIgPVxuICAgICAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlV2O1xcbicgK1xuICAgICAgICAgICAgICAgIHNoYWRlci52ZXJ0ZXhTaGFkZXIuc2xpY2UoMCwgLTEpICtcbiAgICAgICAgICAgICAgICAndlV2ID0gdXY7IGdsX1Bvc2l0aW9uID0gdmVjNCgodXYgLSAwLjUpICogMi4wLCAxLjAsIDEuMCk7IH0nO1xuXG4gICAgICAgICAgICAvLyBGcmFnbWVudCBTaGFkZXI6IFNldCBQaXhlbHMgdG8gYXZlcmFnZSBpbiB0aGUgUHJldmlvdXMgZnJhbWUncyBTaGFkb3dzXG4gICAgICAgICAgICBjb25zdCBib2R5U3RhcnQgPSBzaGFkZXIuZnJhZ21lbnRTaGFkZXIuaW5kZXhPZigndm9pZCBtYWluKCkgeycpO1xuICAgICAgICAgICAgc2hhZGVyLmZyYWdtZW50U2hhZGVyID1cbiAgICAgICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZVdjtcXG4nICtcbiAgICAgICAgICAgICAgICBzaGFkZXIuZnJhZ21lbnRTaGFkZXIuc2xpY2UoMCwgYm9keVN0YXJ0KSArXG4gICAgICAgICAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHByZXZpb3VzU2hhZG93TWFwO1xcblx0dW5pZm9ybSBmbG9hdCBhdmVyYWdpbmdXaW5kb3c7XFxuJyArXG4gICAgICAgICAgICAgICAgc2hhZGVyLmZyYWdtZW50U2hhZGVyLnNsaWNlKGJvZHlTdGFydCAtIDEsIC0xKSArXG4gICAgICAgICAgICAgICAgYFxcbnZlYzMgdGV4ZWxPbGQgPSB0ZXh0dXJlMkQocHJldmlvdXNTaGFkb3dNYXAsIHZVdikucmdiO1xuICAgICAgICBnbF9GcmFnQ29sb3IucmdiID0gbWl4KHRleGVsT2xkLCBnbF9GcmFnQ29sb3IucmdiLCAxLjAvIGF2ZXJhZ2luZ1dpbmRvdyk7XG4gICAgICB9YDtcblxuICAgICAgICAgICAgLy8gU2V0IHRoZSBQcmV2aW91cyBGcmFtZSdzIFRleHR1cmUgQnVmZmVyIGFuZCBBdmVyYWdpbmcgV2luZG93XG4gICAgICAgICAgICAvLyBTZXQgdGhlIFByZXZpb3VzIEZyYW1lJ3MgVGV4dHVyZSBCdWZmZXIgYW5kIEF2ZXJhZ2luZyBXaW5kb3dcbiAgICAgICAgICAgIHNoYWRlci51bmlmb3Jtc1sncHJldmlvdXNTaGFkb3dNYXAnXSA9IHRoaXMucHJldmlvdXNTaGFkb3dNYXA7XG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXNbJ2F2ZXJhZ2luZ1dpbmRvdyddID0gdGhpcy5hdmVyYWdpbmdXaW5kb3c7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZ2V0Q2xlYXJDb2xvcih0aGlzLmNsZWFyQ29sb3IpO1xuICAgICAgICB0aGlzLmNsZWFyQWxwaGEgPSB0aGlzLnJlbmRlcmVyLmdldENsZWFyQWxwaGEoKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRDbGVhckNvbG9yKCdibGFjaycsIDEpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFJlbmRlclRhcmdldCh0aGlzLnByb2dyZXNzaXZlTGlnaHRNYXAxKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5jbGVhcigpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFJlbmRlclRhcmdldCh0aGlzLnByb2dyZXNzaXZlTGlnaHRNYXAyKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5jbGVhcigpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFJlbmRlclRhcmdldChudWxsKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRDbGVhckNvbG9yKHRoaXMuY2xlYXJDb2xvciwgdGhpcy5jbGVhckFscGhhKTtcblxuICAgICAgICB0aGlzLmxpZ2h0cyA9IFtdO1xuICAgICAgICB0aGlzLm1lc2hlcyA9IFtdO1xuICAgICAgICB0aGlzLnNjZW5lLnRyYXZlcnNlKChvYmplY3QpID0+IHtcbiAgICAgICAgICAgIGlmIChpc0dlb21ldHJ5KG9iamVjdCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1lc2hlcy5wdXNoKHsgb2JqZWN0LCBtYXRlcmlhbDogb2JqZWN0Lm1hdGVyaWFsIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0xpZ2h0KG9iamVjdCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxpZ2h0cy5wdXNoKHsgb2JqZWN0LCBpbnRlbnNpdHk6IG9iamVjdC5pbnRlbnNpdHkgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByZXBhcmUoKSB7XG4gICAgICAgIHRoaXMubGlnaHRzLmZvckVhY2goKGxpZ2h0KSA9PiAobGlnaHQub2JqZWN0LmludGVuc2l0eSA9IDApKTtcbiAgICAgICAgdGhpcy5tZXNoZXMuZm9yRWFjaCgobWVzaCkgPT4gKG1lc2gub2JqZWN0Lm1hdGVyaWFsID0gdGhpcy5kaXNjYXJkTWF0KSk7XG4gICAgfVxuXG4gICAgZmluaXNoKCkge1xuICAgICAgICB0aGlzLmxpZ2h0cy5mb3JFYWNoKChsaWdodCkgPT4gKGxpZ2h0Lm9iamVjdC5pbnRlbnNpdHkgPSBsaWdodC5pbnRlbnNpdHkpKTtcbiAgICAgICAgdGhpcy5tZXNoZXMuZm9yRWFjaCgobWVzaCkgPT4gKG1lc2gub2JqZWN0Lm1hdGVyaWFsID0gbWVzaC5tYXRlcmlhbCkpO1xuICAgIH1cblxuICAgIGNvbmZpZ3VyZShvYmplY3Q6IFRIUkVFLk1lc2gpIHtcbiAgICAgICAgdGhpcy5vYmplY3QgPSBvYmplY3Q7XG4gICAgfVxuXG4gICAgdXBkYXRlKGNhbWVyYTogVEhSRUUuQ2FtZXJhLCBibGVuZFdpbmRvdyA9IDEwMCkge1xuICAgICAgICBpZiAoIXRoaXMub2JqZWN0KSByZXR1cm47XG4gICAgICAgIC8vIFNldCBlYWNoIG9iamVjdCdzIG1hdGVyaWFsIHRvIHRoZSBVViBVbndyYXBwZWQgU3VyZmFjZSBNYXBwaW5nIFZlcnNpb25cbiAgICAgICAgdGhpcy5hdmVyYWdpbmdXaW5kb3cudmFsdWUgPSBibGVuZFdpbmRvdztcbiAgICAgICAgdGhpcy5vYmplY3QubWF0ZXJpYWwgPSB0aGlzLnRhcmdldE1hdDtcbiAgICAgICAgLy8gUGluZy1wb25nIHR3byBzdXJmYWNlIGJ1ZmZlcnMgZm9yIHJlYWRpbmcvd3JpdGluZ1xuICAgICAgICBjb25zdCBhY3RpdmVNYXAgPSB0aGlzLmJ1ZmZlcjFBY3RpdmUgPyB0aGlzLnByb2dyZXNzaXZlTGlnaHRNYXAxIDogdGhpcy5wcm9ncmVzc2l2ZUxpZ2h0TWFwMjtcbiAgICAgICAgY29uc3QgaW5hY3RpdmVNYXAgPSB0aGlzLmJ1ZmZlcjFBY3RpdmUgPyB0aGlzLnByb2dyZXNzaXZlTGlnaHRNYXAyIDogdGhpcy5wcm9ncmVzc2l2ZUxpZ2h0TWFwMTtcbiAgICAgICAgLy8gUmVuZGVyIHRoZSBvYmplY3QncyBzdXJmYWNlIG1hcHNcbiAgICAgICAgY29uc3Qgb2xkQmcgPSB0aGlzLnNjZW5lLmJhY2tncm91bmQ7XG4gICAgICAgIHRoaXMuc2NlbmUuYmFja2dyb3VuZCA9IG51bGw7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KGFjdGl2ZU1hcCk7XG4gICAgICAgIHRoaXMucHJldmlvdXNTaGFkb3dNYXAudmFsdWUgPSBpbmFjdGl2ZU1hcC50ZXh0dXJlO1xuICAgICAgICB0aGlzLmJ1ZmZlcjFBY3RpdmUgPSAhdGhpcy5idWZmZXIxQWN0aXZlO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbmRlcih0aGlzLnNjZW5lLCBjYW1lcmEpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFJlbmRlclRhcmdldChudWxsKTtcbiAgICAgICAgdGhpcy5zY2VuZS5iYWNrZ3JvdW5kID0gb2xkQmc7XG4gICAgfVxufVxuIl19
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3NpdmUtbGlnaHQtbWFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL3N0YWdpbmcvc3JjL2FjY3VtdWxhdGl2ZS1zaGFkb3dzL3Byb2dyZXNzaXZlLWxpZ2h0LW1hcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFL0IsU0FBUyxPQUFPLENBQUMsTUFBVztJQUMzQixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUM7QUFDdkIsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLE1BQVc7SUFDOUIsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztBQUMxQixDQUFDO0FBRUQsb0ZBQW9GO0FBQ3BGLE1BQU0sT0FBTyxtQkFBbUI7SUFpQi9CLFlBQVksUUFBNkIsRUFBRSxLQUFrQixFQUFFLE1BQWMsSUFBSTtRQUNoRixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFFcEIsMENBQTBDO1FBQzFDLE1BQU0sYUFBYSxHQUFHO1lBQ3JCLElBQUksRUFBRSxLQUFLLENBQUMsYUFBYTtZQUN6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QUssQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQy9CLENBQUM7Q0FDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpc2NhcmRNYXRlcmlhbCB9IGZyb20gJ2FuZ3VsYXItdGhyZWUtc29iYS9zaGFkZXJzJztcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcblxuZnVuY3Rpb24gaXNMaWdodChvYmplY3Q6IGFueSk6IG9iamVjdCBpcyBUSFJFRS5MaWdodCB7XG5cdHJldHVybiBvYmplY3QuaXNMaWdodDtcbn1cblxuZnVuY3Rpb24gaXNHZW9tZXRyeShvYmplY3Q6IGFueSk6IG9iamVjdCBpcyBUSFJFRS5NZXNoIHtcblx0cmV0dXJuICEhb2JqZWN0Lmdlb21ldHJ5O1xufVxuXG4vLyBCYXNlZCBvbiBcIlByb2dyZXNzaXZlIExpZ2h0IE1hcCBBY2N1bXVsYXRvclwiLCBieSBbemFsb10oaHR0cHM6Ly9naXRodWIuY29tL3phbG8vKVxuZXhwb3J0IGNsYXNzIFByb2dyZXNzaXZlTGlnaHRNYXAge1xuXHRyZW5kZXJlcjogVEhSRUUuV2ViR0xSZW5kZXJlcjtcblx0cmVzOiBudW1iZXI7XG5cdHNjZW5lOiBUSFJFRS5TY2VuZTtcblx0b2JqZWN0OiBUSFJFRS5NZXNoIHwgbnVsbDtcblx0YnVmZmVyMUFjdGl2ZTogYm9vbGVhbjtcblx0cHJvZ3Jlc3NpdmVMaWdodE1hcDE6IFRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0O1xuXHRwcm9ncmVzc2l2ZUxpZ2h0TWFwMjogVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ7XG5cdGRpc2NhcmRNYXQ6IFRIUkVFLlNoYWRlck1hdGVyaWFsO1xuXHR0YXJnZXRNYXQ6IFRIUkVFLk1lc2hMYW1iZXJ0TWF0ZXJpYWw7XG5cdHByZXZpb3VzU2hhZG93TWFwOiB7IHZhbHVlOiBUSFJFRS5UZXh0dXJlIH07XG5cdGF2ZXJhZ2luZ1dpbmRvdzogeyB2YWx1ZTogbnVtYmVyIH07XG5cdGNsZWFyQ29sb3I6IFRIUkVFLkNvbG9yO1xuXHRjbGVhckFscGhhOiBudW1iZXI7XG5cdGxpZ2h0czogeyBvYmplY3Q6IFRIUkVFLkxpZ2h0OyBpbnRlbnNpdHk6IG51bWJlciB9W107XG5cdG1lc2hlczogeyBvYmplY3Q6IFRIUkVFLk1lc2g7IG1hdGVyaWFsOiBUSFJFRS5NYXRlcmlhbCB8IFRIUkVFLk1hdGVyaWFsW10gfVtdO1xuXG5cdGNvbnN0cnVjdG9yKHJlbmRlcmVyOiBUSFJFRS5XZWJHTFJlbmRlcmVyLCBzY2VuZTogVEhSRUUuU2NlbmUsIHJlczogbnVtYmVyID0gMTAyNCkge1xuXHRcdHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcblx0XHR0aGlzLnJlcyA9IHJlcztcblx0XHR0aGlzLnNjZW5lID0gc2NlbmU7XG5cdFx0dGhpcy5idWZmZXIxQWN0aXZlID0gZmFsc2U7XG5cdFx0dGhpcy5saWdodHMgPSBbXTtcblx0XHR0aGlzLm1lc2hlcyA9IFtdO1xuXHRcdHRoaXMub2JqZWN0ID0gbnVsbDtcblx0XHR0aGlzLmNsZWFyQ29sb3IgPSBuZXcgVEhSRUUuQ29sb3IoKTtcblx0XHR0aGlzLmNsZWFyQWxwaGEgPSAwO1xuXG5cdFx0Ly8gQ3JlYXRlIHRoZSBQcm9ncmVzc2l2ZSBMaWdodE1hcCBUZXh0dXJlXG5cdFx0Y29uc3QgdGV4dHVyZVBhcmFtcyA9IHtcblx0XHRcdHR5cGU6IFRIUkVFLkhhbGZGbG9hdFR5cGUsXG5cdFx0XHRtYWdGaWx0ZXI6IFRIUkVFLk5lYXJlc3RGaWx0ZXIsXG5cdFx0XHRtaW5GaWx0ZXI6IFRIUkVFLk5lYXJlc3RGaWx0ZXIsXG5cdFx0fTtcblx0XHR0aGlzLnByb2dyZXNzaXZlTGlnaHRNYXAxID0gbmV3IFRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0KHRoaXMucmVzLCB0aGlzLnJlcywgdGV4dHVyZVBhcmFtcyk7XG5cdFx0dGhpcy5wcm9ncmVzc2l2ZUxpZ2h0TWFwMiA9IG5ldyBUSFJFRS5XZWJHTFJlbmRlclRhcmdldCh0aGlzLnJlcywgdGhpcy5yZXMsIHRleHR1cmVQYXJhbXMpO1xuXG5cdFx0Ly8gSW5qZWN0IHNvbWUgc3BpY3kgbmV3IGxvZ2ljIGludG8gYSBzdGFuZGFyZCBwaG9uZyBtYXRlcmlhbFxuXHRcdHRoaXMuZGlzY2FyZE1hdCA9IG5ldyBEaXNjYXJkTWF0ZXJpYWwoKTtcblx0XHR0aGlzLnRhcmdldE1hdCA9IG5ldyBUSFJFRS5NZXNoTGFtYmVydE1hdGVyaWFsKHsgZm9nOiBmYWxzZSB9KTtcblx0XHR0aGlzLnByZXZpb3VzU2hhZG93TWFwID0geyB2YWx1ZTogdGhpcy5wcm9ncmVzc2l2ZUxpZ2h0TWFwMS50ZXh0dXJlIH07XG5cdFx0dGhpcy5hdmVyYWdpbmdXaW5kb3cgPSB7IHZhbHVlOiAxMDAgfTtcblx0XHR0aGlzLnRhcmdldE1hdC5vbkJlZm9yZUNvbXBpbGUgPSAoc2hhZGVyKSA9PiB7XG5cdFx0XHQvLyBWZXJ0ZXggU2hhZGVyOiBTZXQgVmVydGV4IFBvc2l0aW9ucyB0byB0aGUgVW53cmFwcGVkIFVWIFBvc2l0aW9uc1xuXHRcdFx0c2hhZGVyLnZlcnRleFNoYWRlciA9XG5cdFx0XHRcdCd2YXJ5aW5nIHZlYzIgdlV2O1xcbicgK1xuXHRcdFx0XHRzaGFkZXIudmVydGV4U2hhZGVyLnNsaWNlKDAsIC0xKSArXG5cdFx0XHRcdCd2VXYgPSB1djsgZ2xfUG9zaXRpb24gPSB2ZWM0KCh1diAtIDAuNSkgKiAyLjAsIDEuMCwgMS4wKTsgfSc7XG5cblx0XHRcdC8vIEZyYWdtZW50IFNoYWRlcjogU2V0IFBpeGVscyB0byBhdmVyYWdlIGluIHRoZSBQcmV2aW91cyBmcmFtZSdzIFNoYWRvd3Ncblx0XHRcdGNvbnN0IGJvZHlTdGFydCA9IHNoYWRlci5mcmFnbWVudFNoYWRlci5pbmRleE9mKCd2b2lkIG1haW4oKSB7Jyk7XG5cdFx0XHRzaGFkZXIuZnJhZ21lbnRTaGFkZXIgPVxuXHRcdFx0XHQndmFyeWluZyB2ZWMyIHZVdjtcXG4nICtcblx0XHRcdFx0c2hhZGVyLmZyYWdtZW50U2hhZGVyLnNsaWNlKDAsIGJvZHlTdGFydCkgK1xuXHRcdFx0XHQndW5pZm9ybSBzYW1wbGVyMkQgcHJldmlvdXNTaGFkb3dNYXA7XFxuXHR1bmlmb3JtIGZsb2F0IGF2ZXJhZ2luZ1dpbmRvdztcXG4nICtcblx0XHRcdFx0c2hhZGVyLmZyYWdtZW50U2hhZGVyLnNsaWNlKGJvZHlTdGFydCAtIDEsIC0xKSArXG5cdFx0XHRcdGBcXG52ZWMzIHRleGVsT2xkID0gdGV4dHVyZTJEKHByZXZpb3VzU2hhZG93TWFwLCB2VXYpLnJnYjtcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCh0ZXhlbE9sZCwgZ2xfRnJhZ0NvbG9yLnJnYiwgMS4wLyBhdmVyYWdpbmdXaW5kb3cpO1xuICAgICAgfWA7XG5cblx0XHRcdC8vIFNldCB0aGUgUHJldmlvdXMgRnJhbWUncyBUZXh0dXJlIEJ1ZmZlciBhbmQgQXZlcmFnaW5nIFdpbmRvd1xuXHRcdFx0Ly8gU2V0IHRoZSBQcmV2aW91cyBGcmFtZSdzIFRleHR1cmUgQnVmZmVyIGFuZCBBdmVyYWdpbmcgV2luZG93XG5cdFx0XHRzaGFkZXIudW5pZm9ybXNbJ3ByZXZpb3VzU2hhZG93TWFwJ10gPSB0aGlzLnByZXZpb3VzU2hhZG93TWFwO1xuXHRcdFx0c2hhZGVyLnVuaWZvcm1zWydhdmVyYWdpbmdXaW5kb3cnXSA9IHRoaXMuYXZlcmFnaW5nV2luZG93O1xuXHRcdH07XG5cdH1cblxuXHRjbGVhcigpIHtcblx0XHR0aGlzLnJlbmRlcmVyLmdldENsZWFyQ29sb3IodGhpcy5jbGVhckNvbG9yKTtcblx0XHR0aGlzLmNsZWFyQWxwaGEgPSB0aGlzLnJlbmRlcmVyLmdldENsZWFyQWxwaGEoKTtcblx0XHR0aGlzLnJlbmRlcmVyLnNldENsZWFyQ29sb3IoJ2JsYWNrJywgMSk7XG5cdFx0dGhpcy5yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQodGhpcy5wcm9ncmVzc2l2ZUxpZ2h0TWFwMSk7XG5cdFx0dGhpcy5yZW5kZXJlci5jbGVhcigpO1xuXHRcdHRoaXMucmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KHRoaXMucHJvZ3Jlc3NpdmVMaWdodE1hcDIpO1xuXHRcdHRoaXMucmVuZGVyZXIuY2xlYXIoKTtcblx0XHR0aGlzLnJlbmRlcmVyLnNldFJlbmRlclRhcmdldChudWxsKTtcblx0XHR0aGlzLnJlbmRlcmVyLnNldENsZWFyQ29sb3IodGhpcy5jbGVhckNvbG9yLCB0aGlzLmNsZWFyQWxwaGEpO1xuXG5cdFx0dGhpcy5saWdodHMgPSBbXTtcblx0XHR0aGlzLm1lc2hlcyA9IFtdO1xuXHRcdHRoaXMuc2NlbmUudHJhdmVyc2UoKG9iamVjdCkgPT4ge1xuXHRcdFx0aWYgKGlzR2VvbWV0cnkob2JqZWN0KSkge1xuXHRcdFx0XHR0aGlzLm1lc2hlcy5wdXNoKHsgb2JqZWN0LCBtYXRlcmlhbDogb2JqZWN0Lm1hdGVyaWFsIH0pO1xuXHRcdFx0fSBlbHNlIGlmIChpc0xpZ2h0KG9iamVjdCkpIHtcblx0XHRcdFx0dGhpcy5saWdodHMucHVzaCh7IG9iamVjdCwgaW50ZW5zaXR5OiBvYmplY3QuaW50ZW5zaXR5IH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cHJlcGFyZSgpIHtcblx0XHR0aGlzLmxpZ2h0cy5mb3JFYWNoKChsaWdodCkgPT4gKGxpZ2h0Lm9iamVjdC5pbnRlbnNpdHkgPSAwKSk7XG5cdFx0dGhpcy5tZXNoZXMuZm9yRWFjaCgobWVzaCkgPT4gKG1lc2gub2JqZWN0Lm1hdGVyaWFsID0gdGhpcy5kaXNjYXJkTWF0KSk7XG5cdH1cblxuXHRmaW5pc2goKSB7XG5cdFx0dGhpcy5saWdodHMuZm9yRWFjaCgobGlnaHQpID0+IChsaWdodC5vYmplY3QuaW50ZW5zaXR5ID0gbGlnaHQuaW50ZW5zaXR5KSk7XG5cdFx0dGhpcy5tZXNoZXMuZm9yRWFjaCgobWVzaCkgPT4gKG1lc2gub2JqZWN0Lm1hdGVyaWFsID0gbWVzaC5tYXRlcmlhbCkpO1xuXHR9XG5cblx0Y29uZmlndXJlKG9iamVjdDogVEhSRUUuTWVzaCkge1xuXHRcdHRoaXMub2JqZWN0ID0gb2JqZWN0O1xuXHR9XG5cblx0dXBkYXRlKGNhbWVyYTogVEhSRUUuQ2FtZXJhLCBibGVuZFdpbmRvdyA9IDEwMCkge1xuXHRcdGlmICghdGhpcy5vYmplY3QpIHJldHVybjtcblx0XHQvLyBTZXQgZWFjaCBvYmplY3QncyBtYXRlcmlhbCB0byB0aGUgVVYgVW53cmFwcGVkIFN1cmZhY2UgTWFwcGluZyBWZXJzaW9uXG5cdFx0dGhpcy5hdmVyYWdpbmdXaW5kb3cudmFsdWUgPSBibGVuZFdpbmRvdztcblx0XHR0aGlzLm9iamVjdC5tYXRlcmlhbCA9IHRoaXMudGFyZ2V0TWF0O1xuXHRcdC8vIFBpbmctcG9uZyB0d28gc3VyZmFjZSBidWZmZXJzIGZvciByZWFkaW5nL3dyaXRpbmdcblx0XHRjb25zdCBhY3RpdmVNYXAgPSB0aGlzLmJ1ZmZlcjFBY3RpdmUgPyB0aGlzLnByb2dyZXNzaXZlTGlnaHRNYXAxIDogdGhpcy5wcm9ncmVzc2l2ZUxpZ2h0TWFwMjtcblx0XHRjb25zdCBpbmFjdGl2ZU1hcCA9IHRoaXMuYnVmZmVyMUFjdGl2ZSA/IHRoaXMucHJvZ3Jlc3NpdmVMaWdodE1hcDIgOiB0aGlzLnByb2dyZXNzaXZlTGlnaHRNYXAxO1xuXHRcdC8vIFJlbmRlciB0aGUgb2JqZWN0J3Mgc3VyZmFjZSBtYXBzXG5cdFx0Y29uc3Qgb2xkQmcgPSB0aGlzLnNjZW5lLmJhY2tncm91bmQ7XG5cdFx0dGhpcy5zY2VuZS5iYWNrZ3JvdW5kID0gbnVsbDtcblx0XHR0aGlzLnJlbmRlcmVyLnNldFJlbmRlclRhcmdldChhY3RpdmVNYXApO1xuXHRcdHRoaXMucHJldmlvdXNTaGFkb3dNYXAudmFsdWUgPSBpbmFjdGl2ZU1hcC50ZXh0dXJlO1xuXHRcdHRoaXMuYnVmZmVyMUFjdGl2ZSA9ICF0aGlzLmJ1ZmZlcjFBY3RpdmU7XG5cdFx0dGhpcy5yZW5kZXJlci5yZW5kZXIodGhpcy5zY2VuZSwgY2FtZXJhKTtcblx0XHR0aGlzLnJlbmRlcmVyLnNldFJlbmRlclRhcmdldChudWxsKTtcblx0XHR0aGlzLnNjZW5lLmJhY2tncm91bmQgPSBvbGRCZztcblx0fVxufVxuIl19
|