angular-three-soba 2.0.0-beta.8 → 2.0.0

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