angular-three-soba 2.0.0-beta.9 → 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 -49
  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
@@ -0,0 +1,286 @@
1
+ import { afterNextRender, ChangeDetectionStrategy, Component, CUSTOM_ELEMENTS_SCHEMA, input, untracked, viewChild, } from '@angular/core';
2
+ import { extend, injectBeforeRender, injectStore, is, pick } from 'angular-three';
3
+ import { injectAutoEffect } from 'ngxtension/auto-effect';
4
+ import { mergeInputs } from 'ngxtension/inject-inputs';
5
+ import { Box3, Group, Matrix4, Quaternion, Vector3 } from 'three';
6
+ import * as i0 from "@angular/core";
7
+ var AnimationState;
8
+ (function (AnimationState) {
9
+ AnimationState[AnimationState["NONE"] = 0] = "NONE";
10
+ AnimationState[AnimationState["START"] = 1] = "START";
11
+ AnimationState[AnimationState["ACTIVE"] = 2] = "ACTIVE";
12
+ })(AnimationState || (AnimationState = {}));
13
+ function isBox3(def) {
14
+ return !!def && def.isBox3;
15
+ }
16
+ function interpolateFuncDefault(t) {
17
+ // Imitates the previously used THREE.MathUtils.damp
18
+ return 1 - Math.exp(-5 * t) + 0.007 * t;
19
+ }
20
+ const defaultOptions = {
21
+ maxDuration: 1.0,
22
+ margin: 1.2,
23
+ interpolateFunc: interpolateFuncDefault,
24
+ clip: false,
25
+ fit: false,
26
+ observe: false,
27
+ };
28
+ export class NgtsBounds {
29
+ constructor() {
30
+ this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
31
+ this.groupRef = viewChild.required('group');
32
+ this.store = injectStore();
33
+ this.camera = this.store.select('camera');
34
+ this.invalidate = this.store.select('invalidate');
35
+ this.size = this.store.select('size');
36
+ this.controls = this.store.select('controls');
37
+ this.clipOption = pick(this.options, 'clip');
38
+ this.fitOption = pick(this.options, 'fit');
39
+ this.observe = pick(this.options, 'observe');
40
+ this.origin = {
41
+ camPos: new Vector3(),
42
+ camRot: new Quaternion(),
43
+ camZoom: 1,
44
+ };
45
+ this.goal = {
46
+ camPos: undefined,
47
+ camRot: undefined,
48
+ camZoom: undefined,
49
+ camUp: undefined,
50
+ target: undefined,
51
+ };
52
+ this.animationState = AnimationState.NONE;
53
+ // represent animation state from 0 to 1
54
+ this.t = 0;
55
+ this.box = new Box3();
56
+ extend({ Group });
57
+ const autoEffect = injectAutoEffect();
58
+ afterNextRender(() => {
59
+ autoEffect(() => {
60
+ const [controls, camera] = [this.controls(), untracked(this.camera)];
61
+ if (!controls)
62
+ return;
63
+ const callback = () => {
64
+ if (controls && this.goal.target && this.animationState !== AnimationState.NONE) {
65
+ const front = new Vector3().setFromMatrixColumn(camera.matrix, 2);
66
+ const d0 = this.origin.camPos.distanceTo(controls.target);
67
+ const d1 = (this.goal.camPos || this.origin.camPos).distanceTo(this.goal.target);
68
+ const d = (1 - this.t) * d0 + this.t * d1;
69
+ controls.target.copy(camera.position).addScaledVector(front, -d);
70
+ controls.update();
71
+ }
72
+ this.animationState = AnimationState.NONE;
73
+ };
74
+ controls.addEventListener('start', callback);
75
+ return () => controls.removeEventListener('start', callback);
76
+ });
77
+ let count = 0;
78
+ autoEffect(() => {
79
+ const [clip, fit, observe] = [
80
+ this.clipOption(),
81
+ this.fitOption(),
82
+ this.observe(),
83
+ this.size(),
84
+ this.camera(),
85
+ this.controls(),
86
+ ];
87
+ if (observe || count++ === 0) {
88
+ this.refresh();
89
+ if (fit)
90
+ this.reset().fit();
91
+ if (clip)
92
+ this.clip();
93
+ }
94
+ });
95
+ });
96
+ injectBeforeRender(({ delta }) => {
97
+ // This [additional animation step START] is needed to guarantee that delta used in animation isn't absurdly high (2-3 seconds) which is actually possible if rendering happens on demand...
98
+ if (this.animationState === AnimationState.START) {
99
+ this.animationState = AnimationState.ACTIVE;
100
+ this.invalidate();
101
+ }
102
+ else if (this.animationState === AnimationState.ACTIVE) {
103
+ const [{ maxDuration, interpolateFunc }, camera, controls, invalidate] = [
104
+ this.options(),
105
+ this.camera(),
106
+ this.controls(),
107
+ this.invalidate(),
108
+ ];
109
+ this.t += delta / maxDuration;
110
+ if (this.t >= 1) {
111
+ this.goal.camPos && camera.position.copy(this.goal.camPos);
112
+ this.goal.camRot && camera.quaternion.copy(this.goal.camRot);
113
+ this.goal.camUp && camera.up.copy(this.goal.camUp);
114
+ this.goal.camZoom && is.orthographicCamera(camera) && (camera.zoom = this.goal.camZoom);
115
+ camera.updateMatrixWorld();
116
+ camera.updateProjectionMatrix();
117
+ if (controls && this.goal.target) {
118
+ controls.target.copy(this.goal.target);
119
+ controls.update();
120
+ }
121
+ this.animationState = AnimationState.NONE;
122
+ }
123
+ else {
124
+ const k = interpolateFunc(this.t);
125
+ this.goal.camPos && camera.position.lerpVectors(this.origin.camPos, this.goal.camPos, k);
126
+ this.goal.camRot && camera.quaternion.slerpQuaternions(this.origin.camRot, this.goal.camRot, k);
127
+ this.goal.camUp && camera.up.set(0, 1, 0).applyQuaternion(camera.quaternion);
128
+ this.goal.camZoom &&
129
+ is.orthographicCamera(camera) &&
130
+ (camera.zoom = (1 - k) * this.origin.camZoom + k * this.goal.camZoom);
131
+ camera.updateMatrixWorld();
132
+ camera.updateProjectionMatrix();
133
+ }
134
+ invalidate();
135
+ }
136
+ });
137
+ }
138
+ getSize() {
139
+ const [camera, { margin }] = [untracked(this.camera), untracked(this.options)];
140
+ const boxSize = this.box.getSize(new Vector3());
141
+ const center = this.box.getCenter(new Vector3());
142
+ const maxSize = Math.max(boxSize.x, boxSize.y, boxSize.z);
143
+ const fitHeightDistance = is.orthographicCamera(camera)
144
+ ? maxSize * 4
145
+ : maxSize / (2 * Math.atan((Math.PI * camera.fov) / 360));
146
+ const fitWidthDistance = is.orthographicCamera(camera) ? maxSize * 4 : fitHeightDistance / camera.aspect;
147
+ const distance = margin * Math.max(fitHeightDistance, fitWidthDistance);
148
+ return { box: this.box, size: boxSize, center, distance };
149
+ }
150
+ refresh(object) {
151
+ const [group, camera] = [untracked(this.groupRef).nativeElement, untracked(this.camera)];
152
+ if (isBox3(object))
153
+ this.box.copy(object);
154
+ else {
155
+ const target = object || group;
156
+ if (!target)
157
+ return this;
158
+ target.updateWorldMatrix(true, true);
159
+ this.box.setFromObject(target);
160
+ }
161
+ if (this.box.isEmpty()) {
162
+ const max = camera.position.length() || 10;
163
+ this.box.setFromCenterAndSize(new Vector3(), new Vector3(max, max, max));
164
+ }
165
+ this.origin.camPos.copy(camera.position);
166
+ this.origin.camRot.copy(camera.quaternion);
167
+ is.orthographicCamera(camera) && (this.origin.camZoom = camera.zoom);
168
+ this.goal.camPos = undefined;
169
+ this.goal.camRot = undefined;
170
+ this.goal.camZoom = undefined;
171
+ this.goal.camUp = undefined;
172
+ this.goal.target = undefined;
173
+ return this;
174
+ }
175
+ reset() {
176
+ const [camera] = [untracked(this.camera)];
177
+ const { center, distance } = this.getSize();
178
+ const direction = camera.position.clone().sub(center).normalize();
179
+ this.goal.camPos = center.clone().addScaledVector(direction, distance);
180
+ this.goal.target = center.clone();
181
+ const mCamRot = new Matrix4().lookAt(this.goal.camPos, this.goal.target, camera.up);
182
+ this.goal.camRot = new Quaternion().setFromRotationMatrix(mCamRot);
183
+ this.animationState = AnimationState.START;
184
+ this.t = 0;
185
+ return this;
186
+ }
187
+ moveTo(position) {
188
+ this.goal.camPos = Array.isArray(position) ? new Vector3(...position) : position.clone();
189
+ this.animationState = AnimationState.START;
190
+ this.t = 0;
191
+ return this;
192
+ }
193
+ lookAt({ target, up }) {
194
+ const [camera] = [untracked(this.camera)];
195
+ this.goal.target = Array.isArray(target) ? new Vector3(...target) : target.clone();
196
+ if (up) {
197
+ this.goal.camUp = Array.isArray(up) ? new Vector3(...up) : up.clone();
198
+ }
199
+ else {
200
+ this.goal.camUp = camera.up.clone();
201
+ }
202
+ const mCamRot = new Matrix4().lookAt(this.goal.camPos || camera.position, this.goal.target, this.goal.camUp);
203
+ this.goal.camRot = new Quaternion().setFromRotationMatrix(mCamRot);
204
+ this.animationState = AnimationState.START;
205
+ this.t = 0;
206
+ return this;
207
+ }
208
+ fit() {
209
+ const [camera, controls, { margin }] = [untracked(this.camera), untracked(this.controls), untracked(this.options)];
210
+ if (!is.orthographicCamera(camera)) {
211
+ // For non-orthographic cameras, fit should behave exactly like reset
212
+ return this.reset();
213
+ }
214
+ // For orthographic cameras, fit should only modify the zoom value
215
+ let maxHeight = 0;
216
+ let maxWidth = 0;
217
+ const vertices = [
218
+ new Vector3(this.box.min.x, this.box.min.y, this.box.min.z),
219
+ new Vector3(this.box.min.x, this.box.max.y, this.box.min.z),
220
+ new Vector3(this.box.min.x, this.box.min.y, this.box.max.z),
221
+ new Vector3(this.box.min.x, this.box.max.y, this.box.max.z),
222
+ new Vector3(this.box.max.x, this.box.max.y, this.box.max.z),
223
+ new Vector3(this.box.max.x, this.box.max.y, this.box.min.z),
224
+ new Vector3(this.box.max.x, this.box.min.y, this.box.max.z),
225
+ new Vector3(this.box.max.x, this.box.min.y, this.box.min.z),
226
+ ];
227
+ // Transform the center and each corner to camera space
228
+ const pos = this.goal.camPos || camera.position;
229
+ const target = this.goal.target || controls.target;
230
+ const up = this.goal.camUp || camera.up;
231
+ const mCamWInv = target
232
+ ? new Matrix4().lookAt(pos, target, up).setPosition(pos).invert()
233
+ : camera.matrixWorldInverse;
234
+ for (const v of vertices) {
235
+ v.applyMatrix4(mCamWInv);
236
+ maxHeight = Math.max(maxHeight, Math.abs(v.y));
237
+ maxWidth = Math.max(maxWidth, Math.abs(v.x));
238
+ }
239
+ maxHeight *= 2;
240
+ maxWidth *= 2;
241
+ const zoomForHeight = (camera.top - camera.bottom) / maxHeight;
242
+ const zoomForWidth = (camera.right - camera.left) / maxWidth;
243
+ this.goal.camZoom = Math.min(zoomForHeight, zoomForWidth) / margin;
244
+ this.animationState = AnimationState.START;
245
+ this.t = 0;
246
+ return this;
247
+ }
248
+ clip() {
249
+ const [camera, controls, invalidate] = [
250
+ untracked(this.camera),
251
+ untracked(this.controls),
252
+ untracked(this.invalidate),
253
+ ];
254
+ const { distance } = this.getSize();
255
+ camera.near = distance / 100;
256
+ camera.far = distance * 100;
257
+ camera.updateProjectionMatrix();
258
+ if (controls) {
259
+ controls.maxDistance = distance * 10;
260
+ controls.update();
261
+ }
262
+ invalidate();
263
+ return this;
264
+ }
265
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsBounds, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
266
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.0", type: NgtsBounds, isStandalone: true, selector: "ngts-bounds", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "groupRef", first: true, predicate: ["group"], descendants: true, isSignal: true }], ngImport: i0, template: `
267
+ <ngt-group #group>
268
+ <ng-content />
269
+ </ngt-group>
270
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
271
+ }
272
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsBounds, decorators: [{
273
+ type: Component,
274
+ args: [{
275
+ selector: 'ngts-bounds',
276
+ standalone: true,
277
+ template: `
278
+ <ngt-group #group>
279
+ <ng-content />
280
+ </ngt-group>
281
+ `,
282
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
283
+ changeDetection: ChangeDetectionStrategy.OnPush,
284
+ }]
285
+ }], ctorParameters: () => [] });
286
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm91bmRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL3N0YWdpbmcvc3JjL2xpYi9ib3VuZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLGVBQWUsRUFDZix1QkFBdUIsRUFDdkIsU0FBUyxFQUNULHNCQUFzQixFQUV0QixLQUFLLEVBRUwsU0FBUyxFQUNULFNBQVMsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQVksSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQVksVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQzs7QUFXNUUsSUFBSyxjQUlKO0FBSkQsV0FBSyxjQUFjO0lBQ2xCLG1EQUFRLENBQUE7SUFDUixxREFBUyxDQUFBO0lBQ1QsdURBQVUsQ0FBQTtBQUNYLENBQUMsRUFKSSxjQUFjLEtBQWQsY0FBYyxRQUlsQjtBQUVELFNBQVMsTUFBTSxDQUFDLEdBQVk7SUFDM0IsT0FBTyxDQUFDLENBQUMsR0FBRyxJQUFLLEdBQVksQ0FBQyxNQUFNLENBQUM7QUFDdEMsQ0FBQztBQUVELFNBQVMsc0JBQXNCLENBQUMsQ0FBUztJQUN4QyxvREFBb0Q7SUFDcEQsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFXRCxNQUFNLGNBQWMsR0FBc0I7SUFDekMsV0FBVyxFQUFFLEdBQUc7SUFDaEIsTUFBTSxFQUFF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QyxDQUFDO1lBQzNELElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzNELElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzNELElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzNELElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQzNELENBQUM7UUFFRix1REFBdUQ7UUFDdkQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUNoRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQ25ELE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDeEMsTUFBTSxRQUFRLEdBQUcsTUFBTTtZQUN0QixDQUFDLENBQUMsSUFBSSxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFO1lBQ2pFLENBQUMsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUM7UUFDN0IsS0FBSyxNQUFNLENBQUMsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUMxQixDQUFDLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3pCLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9DLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFDRCxTQUFTLElBQUksQ0FBQyxDQUFDO1FBQ2YsUUFBUSxJQUFJLENBQUMsQ0FBQztRQUNkLE1BQU0sYUFBYSxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDO1FBQy9ELE1BQU0sWUFBWSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDO1FBRTdELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUVuRSxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUM7UUFDM0MsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFWCxPQUFPLElBQUksQ0FBQztJQUNiLENBQUM7SUFFRCxJQUFJO1FBQ0gsTUFBTSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLEdBQUc7WUFDdEMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDdEIsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDeEIsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7U0FDMUIsQ0FBQztRQUNGLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFcEMsTUFBTSxDQUFDLElBQUksR0FBRyxRQUFRLEdBQUcsR0FBRyxDQUFDO1FBQzdCLE1BQU0sQ0FBQyxHQUFHLEdBQUcsUUFBUSxHQUFHLEdBQUcsQ0FBQztRQUM1QixNQUFNLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUVoQyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2QsUUFBUSxDQUFDLFdBQVcsR0FBRyxRQUFRLEdBQUcsRUFBRSxDQUFDO1lBQ3JDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNuQixDQUFDO1FBRUQsVUFBVSxFQUFFLENBQUM7UUFFYixPQUFPLElBQUksQ0FBQztJQUNiLENBQUM7OEdBdFJXLFVBQVU7a0dBQVYsVUFBVSxvVUFSWjs7OztFQUlUOzsyRkFJVyxVQUFVO2tCQVh0QixTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSxhQUFhO29CQUN2QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7O0VBSVQ7b0JBQ0QsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7b0JBQ2pDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUMvQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdGFmdGVyTmV4dFJlbmRlcixcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcblx0RWxlbWVudFJlZixcblx0aW5wdXQsXG5cdFNpZ25hbCxcblx0dW50cmFja2VkLFxuXHR2aWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZXh0ZW5kLCBpbmplY3RCZWZvcmVSZW5kZXIsIGluamVjdFN0b3JlLCBpcywgTmd0R3JvdXAsIHBpY2sgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IGluamVjdEF1dG9FZmZlY3QgfSBmcm9tICduZ3h0ZW5zaW9uL2F1dG8tZWZmZWN0JztcbmltcG9ydCB7IG1lcmdlSW5wdXRzIH0gZnJvbSAnbmd4dGVuc2lvbi9pbmplY3QtaW5wdXRzJztcbmltcG9ydCB7IEJveDMsIEdyb3VwLCBNYXRyaXg0LCBPYmplY3QzRCwgUXVhdGVybmlvbiwgVmVjdG9yMyB9IGZyb20gJ3RocmVlJztcblxuaW50ZXJmYWNlIENvbnRyb2xzUHJvdG8ge1xuXHR1cGRhdGUoKTogdm9pZDtcblxuXHR0YXJnZXQ6IFZlY3RvcjM7XG5cdG1heERpc3RhbmNlOiBudW1iZXI7XG5cdGFkZEV2ZW50TGlzdGVuZXI6IChldmVudDogc3RyaW5nLCBjYWxsYmFjazogKGV2ZW50OiBhbnkpID0+IHZvaWQpID0+IHZvaWQ7XG5cdHJlbW92ZUV2ZW50TGlzdGVuZXI6IChldmVudDogc3RyaW5nLCBjYWxsYmFjazogKGV2ZW50OiBhbnkpID0+IHZvaWQpID0+IHZvaWQ7XG59XG5cbmVudW0gQW5pbWF0aW9uU3RhdGUge1xuXHROT05FID0gMCxcblx0U1RBUlQgPSAxLFxuXHRBQ1RJVkUgPSAyLFxufVxuXG5mdW5jdGlvbiBpc0JveDMoZGVmOiB1bmtub3duKTogZGVmIGlzIEJveDMge1xuXHRyZXR1cm4gISFkZWYgJiYgKGRlZiBhcyBCb3gzKS5pc0JveDM7XG59XG5cbmZ1bmN0aW9uIGludGVycG9sYXRlRnVuY0RlZmF1bHQodDogbnVtYmVyKSB7XG5cdC8vIEltaXRhdGVzIHRoZSBwcmV2aW91c2x5IHVzZWQgVEhSRUUuTWF0aFV0aWxzLmRhbXBcblx0cmV0dXJuIDEgLSBNYXRoLmV4cCgtNSAqIHQpICsgMC4wMDcgKiB0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHNCb3VuZHNPcHRpb25zIGV4dGVuZHMgUGFydGlhbDxOZ3RHcm91cD4ge1xuXHRtYXhEdXJhdGlvbjogbnVtYmVyO1xuXHRtYXJnaW46IG51bWJlcjtcblx0b2JzZXJ2ZTogYm9vbGVhbjtcblx0Zml0OiBib29sZWFuO1xuXHRjbGlwOiBib29sZWFuO1xuXHRpbnRlcnBvbGF0ZUZ1bmM6ICh0OiBudW1iZXIpID0+IG51bWJlcjtcbn1cblxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IE5ndHNCb3VuZHNPcHRpb25zID0ge1xuXHRtYXhEdXJhdGlvbjogMS4wLFxuXHRtYXJnaW46IDEuMixcblx0aW50ZXJwb2xhdGVGdW5jOiBpbnRlcnBvbGF0ZUZ1bmNEZWZhdWx0LFxuXHRjbGlwOiBmYWxzZSxcblx0Zml0OiBmYWxzZSxcblx0b2JzZXJ2ZTogZmFsc2UsXG59O1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLWJvdW5kcycsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5ndC1ncm91cCAjZ3JvdXA+XG5cdFx0XHQ8bmctY29udGVudCAvPlxuXHRcdDwvbmd0LWdyb3VwPlxuXHRgLFxuXHRzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzQm91bmRzIHtcblx0b3B0aW9ucyA9IGlucHV0KGRlZmF1bHRPcHRpb25zLCB7IHRyYW5zZm9ybTogbWVyZ2VJbnB1dHMoZGVmYXVsdE9wdGlvbnMpIH0pO1xuXG5cdGdyb3VwUmVmID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8R3JvdXA+PignZ3JvdXAnKTtcblxuXHRwcml2YXRlIHN0b3JlID0gaW5qZWN0U3RvcmUoKTtcblx0cHJpdmF0ZSBjYW1lcmEgPSB0aGlzLnN0b3JlLnNlbGVjdCgnY2FtZXJhJyk7XG5cdHByaXZhdGUgaW52YWxpZGF0ZSA9IHRoaXMuc3RvcmUuc2VsZWN0KCdpbnZhbGlkYXRlJyk7XG5cdHByaXZhdGUgc2l6ZSA9IHRoaXMuc3RvcmUuc2VsZWN0KCdzaXplJyk7XG5cdHByaXZhdGUgY29udHJvbHMgPSB0aGlzLnN0b3JlLnNlbGVjdCgnY29udHJvbHMnKSBhcyB1bmtub3duIGFzIFNpZ25hbDxDb250cm9sc1Byb3RvPjtcblxuXHRwcml2YXRlIGNsaXBPcHRpb24gPSBwaWNrKHRoaXMub3B0aW9ucywgJ2NsaXAnKTtcblx0cHJpdmF0ZSBmaXRPcHRpb24gPSBwaWNrKHRoaXMub3B0aW9ucywgJ2ZpdCcpO1xuXHRwcml2YXRlIG9ic2VydmUgPSBwaWNrKHRoaXMub3B0aW9ucywgJ29ic2VydmUnKTtcblxuXHRwcml2YXRlIG9yaWdpbiA9IHtcblx0XHRjYW1Qb3M6IG5ldyBWZWN0b3IzKCksXG5cdFx0Y2FtUm90OiBuZXcgUXVhdGVybmlvbigpLFxuXHRcdGNhbVpvb206IDEsXG5cdH07XG5cdHByaXZhdGUgZ29hbCA9IHtcblx0XHRjYW1Qb3M6IHVuZGVmaW5lZCBhcyBWZWN0b3IzIHwgdW5kZWZpbmVkLFxuXHRcdGNhbVJvdDogdW5kZWZpbmVkIGFzIFF1YXRlcm5pb24gfCB1bmRlZmluZWQsXG5cdFx0Y2FtWm9vbTogdW5kZWZpbmVkIGFzIG51bWJlciB8IHVuZGVmaW5lZCxcblx0XHRjYW1VcDogdW5kZWZpbmVkIGFzIFZlY3RvcjMgfCB1bmRlZmluZWQsXG5cdFx0dGFyZ2V0OiB1bmRlZmluZWQgYXMgVmVjdG9yMyB8IHVuZGVmaW5lZCxcblx0fTtcblx0cHJpdmF0ZSBhbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlLk5PTkU7XG5cblx0Ly8gcmVwcmVzZW50IGFuaW1hdGlvbiBzdGF0ZSBmcm9tIDAgdG8gMVxuXHRwcml2YXRlIHQgPSAwO1xuXHRwcml2YXRlIGJveCA9IG5ldyBCb3gzKCk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0ZXh0ZW5kKHsgR3JvdXAgfSk7XG5cblx0XHRjb25zdCBhdXRvRWZmZWN0ID0gaW5qZWN0QXV0b0VmZmVjdCgpO1xuXHRcdGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XG5cdFx0XHRhdXRvRWZmZWN0KCgpID0+IHtcblx0XHRcdFx0Y29uc3QgW2NvbnRyb2xzLCBjYW1lcmFdID0gW3RoaXMuY29udHJvbHMoKSwgdW50cmFja2VkKHRoaXMuY2FtZXJhKV07XG5cdFx0XHRcdGlmICghY29udHJvbHMpIHJldHVybjtcblx0XHRcdFx0Y29uc3QgY2FsbGJhY2sgPSAoKSA9PiB7XG5cdFx0XHRcdFx0aWYgKGNvbnRyb2xzICYmIHRoaXMuZ29hbC50YXJnZXQgJiYgdGhpcy5hbmltYXRpb25TdGF0ZSAhPT0gQW5pbWF0aW9uU3RhdGUuTk9ORSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgZnJvbnQgPSBuZXcgVmVjdG9yMygpLnNldEZyb21NYXRyaXhDb2x1bW4oY2FtZXJhLm1hdHJpeCwgMik7XG5cdFx0XHRcdFx0XHRjb25zdCBkMCA9IHRoaXMub3JpZ2luLmNhbVBvcy5kaXN0YW5jZVRvKGNvbnRyb2xzLnRhcmdldCk7XG5cdFx0XHRcdFx0XHRjb25zdCBkMSA9ICh0aGlzLmdvYWwuY2FtUG9zIHx8IHRoaXMub3JpZ2luLmNhbVBvcykuZGlzdGFuY2VUbyh0aGlzLmdvYWwudGFyZ2V0KTtcblx0XHRcdFx0XHRcdGNvbnN0IGQgPSAoMSAtIHRoaXMudCkgKiBkMCArIHRoaXMudCAqIGQxO1xuXG5cdFx0XHRcdFx0XHRjb250cm9scy50YXJnZXQuY29weShjYW1lcmEucG9zaXRpb24pLmFkZFNjYWxlZFZlY3Rvcihmcm9udCwgLWQpO1xuXHRcdFx0XHRcdFx0Y29udHJvbHMudXBkYXRlKCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dGhpcy5hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlLk5PTkU7XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Y29udHJvbHMuYWRkRXZlbnRMaXN0ZW5lcignc3RhcnQnLCBjYWxsYmFjayk7XG5cdFx0XHRcdHJldHVybiAoKSA9PiBjb250cm9scy5yZW1vdmVFdmVudExpc3RlbmVyKCdzdGFydCcsIGNhbGxiYWNrKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRsZXQgY291bnQgPSAwO1xuXHRcdFx0YXV0b0VmZmVjdCgoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IFtjbGlwLCBmaXQsIG9ic2VydmVdID0gW1xuXHRcdFx0XHRcdHRoaXMuY2xpcE9wdGlvbigpLFxuXHRcdFx0XHRcdHRoaXMuZml0T3B0aW9uKCksXG5cdFx0XHRcdFx0dGhpcy5vYnNlcnZlKCksXG5cdFx0XHRcdFx0dGhpcy5zaXplKCksXG5cdFx0XHRcdFx0dGhpcy5jYW1lcmEoKSxcblx0XHRcdFx0XHR0aGlzLmNvbnRyb2xzKCksXG5cdFx0XHRcdF07XG5cdFx0XHRcdGlmIChvYnNlcnZlIHx8IGNvdW50KysgPT09IDApIHtcblx0XHRcdFx0XHR0aGlzLnJlZnJlc2goKTtcblx0XHRcdFx0XHRpZiAoZml0KSB0aGlzLnJlc2V0KCkuZml0KCk7XG5cdFx0XHRcdFx0aWYgKGNsaXApIHRoaXMuY2xpcCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdGluamVjdEJlZm9yZVJlbmRlcigoeyBkZWx0YSB9KSA9PiB7XG5cdFx0XHQvLyBUaGlzIFthZGRpdGlvbmFsIGFuaW1hdGlvbiBzdGVwIFNUQVJUXSBpcyBuZWVkZWQgdG8gZ3VhcmFudGVlIHRoYXQgZGVsdGEgdXNlZCBpbiBhbmltYXRpb24gaXNuJ3QgYWJzdXJkbHkgaGlnaCAoMi0zIHNlY29uZHMpIHdoaWNoIGlzIGFjdHVhbGx5IHBvc3NpYmxlIGlmIHJlbmRlcmluZyBoYXBwZW5zIG9uIGRlbWFuZC4uLlxuXHRcdFx0aWYgKHRoaXMuYW5pbWF0aW9uU3RhdGUgPT09IEFuaW1hdGlvblN0YXRlLlNUQVJUKSB7XG5cdFx0XHRcdHRoaXMuYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZS5BQ1RJVkU7XG5cdFx0XHRcdHRoaXMuaW52YWxpZGF0ZSgpO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLmFuaW1hdGlvblN0YXRlID09PSBBbmltYXRpb25TdGF0ZS5BQ1RJVkUpIHtcblx0XHRcdFx0Y29uc3QgW3sgbWF4RHVyYXRpb24sIGludGVycG9sYXRlRnVuYyB9LCBjYW1lcmEsIGNvbnRyb2xzLCBpbnZhbGlkYXRlXSA9IFtcblx0XHRcdFx0XHR0aGlzLm9wdGlvbnMoKSxcblx0XHRcdFx0XHR0aGlzLmNhbWVyYSgpLFxuXHRcdFx0XHRcdHRoaXMuY29udHJvbHMoKSxcblx0XHRcdFx0XHR0aGlzLmludmFsaWRhdGUoKSxcblx0XHRcdFx0XTtcblx0XHRcdFx0dGhpcy50ICs9IGRlbHRhIC8gbWF4RHVyYXRpb247XG5cblx0XHRcdFx0aWYgKHRoaXMudCA+PSAxKSB7XG5cdFx0XHRcdFx0dGhpcy5nb2FsLmNhbVBvcyAmJiBjYW1lcmEucG9zaXRpb24uY29weSh0aGlzLmdvYWwuY2FtUG9zKTtcblx0XHRcdFx0XHR0aGlzLmdvYWwuY2FtUm90ICYmIGNhbWVyYS5xdWF0ZXJuaW9uLmNvcHkodGhpcy5nb2FsLmNhbVJvdCk7XG5cdFx0XHRcdFx0dGhpcy5nb2FsLmNhbVVwICYmIGNhbWVyYS51cC5jb3B5KHRoaXMuZ29hbC5jYW1VcCk7XG5cdFx0XHRcdFx0dGhpcy5nb2FsLmNhbVpvb20gJiYgaXMub3J0aG9ncmFwaGljQ2FtZXJhKGNhbWVyYSkgJiYgKGNhbWVyYS56b29tID0gdGhpcy5nb2FsLmNhbVpvb20pO1xuXG5cdFx0XHRcdFx0Y2FtZXJhLnVwZGF0ZU1hdHJpeFdvcmxkKCk7XG5cdFx0XHRcdFx0Y2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTtcblxuXHRcdFx0XHRcdGlmIChjb250cm9scyAmJiB0aGlzLmdvYWwudGFyZ2V0KSB7XG5cdFx0XHRcdFx0XHRjb250cm9scy50YXJnZXQuY29weSh0aGlzLmdvYWwudGFyZ2V0KTtcblx0XHRcdFx0XHRcdGNvbnRyb2xzLnVwZGF0ZSgpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHRoaXMuYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZS5OT05FO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0IGsgPSBpbnRlcnBvbGF0ZUZ1bmModGhpcy50KTtcblxuXHRcdFx0XHRcdHRoaXMuZ29hbC5jYW1Qb3MgJiYgY2FtZXJhLnBvc2l0aW9uLmxlcnBWZWN0b3JzKHRoaXMub3JpZ2luLmNhbVBvcywgdGhpcy5nb2FsLmNhbVBvcywgayk7XG5cdFx0XHRcdFx0dGhpcy5nb2FsLmNhbVJvdCAmJiBjYW1lcmEucXVhdGVybmlvbi5zbGVycFF1YXRlcm5pb25zKHRoaXMub3JpZ2luLmNhbVJvdCwgdGhpcy5nb2FsLmNhbVJvdCwgayk7XG5cdFx0XHRcdFx0dGhpcy5nb2FsLmNhbVVwICYmIGNhbWVyYS51cC5zZXQoMCwgMSwgMCkuYXBwbHlRdWF0ZXJuaW9uKGNhbWVyYS5xdWF0ZXJuaW9uKTtcblx0XHRcdFx0XHR0aGlzLmdvYWwuY2FtWm9vbSAmJlxuXHRcdFx0XHRcdFx0aXMub3J0aG9ncmFwaGljQ2FtZXJhKGNhbWVyYSkgJiZcblx0XHRcdFx0XHRcdChjYW1lcmEuem9vbSA9ICgxIC0gaykgKiB0aGlzLm9yaWdpbi5jYW1ab29tICsgayAqIHRoaXMuZ29hbC5jYW1ab29tKTtcblxuXHRcdFx0XHRcdGNhbWVyYS51cGRhdGVNYXRyaXhXb3JsZCgpO1xuXHRcdFx0XHRcdGNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpbnZhbGlkYXRlKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRnZXRTaXplKCkge1xuXHRcdGNvbnN0IFtjYW1lcmEsIHsgbWFyZ2luIH1dID0gW3VudHJhY2tlZCh0aGlzLmNhbWVyYSksIHVudHJhY2tlZCh0aGlzLm9wdGlvbnMpXTtcblxuXHRcdGNvbnN0IGJveFNpemUgPSB0aGlzLmJveC5nZXRTaXplKG5ldyBWZWN0b3IzKCkpO1xuXHRcdGNvbnN0IGNlbnRlciA9IHRoaXMuYm94LmdldENlbnRlcihuZXcgVmVjdG9yMygpKTtcblx0XHRjb25zdCBtYXhTaXplID0gTWF0aC5tYXgoYm94U2l6ZS54LCBib3hTaXplLnksIGJveFNpemUueik7XG5cdFx0Y29uc3QgZml0SGVpZ2h0RGlzdGFuY2UgPSBpcy5vcnRob2dyYXBoaWNDYW1lcmEoY2FtZXJhKVxuXHRcdFx0PyBtYXhTaXplICogNFxuXHRcdFx0OiBtYXhTaXplIC8gKDIgKiBNYXRoLmF0YW4oKE1hdGguUEkgKiBjYW1lcmEuZm92KSAvIDM2MCkpO1xuXHRcdGNvbnN0IGZpdFdpZHRoRGlzdGFuY2UgPSBpcy5vcnRob2dyYXBoaWNDYW1lcmEoY2FtZXJhKSA/IG1heFNpemUgKiA0IDogZml0SGVpZ2h0RGlzdGFuY2UgLyBjYW1lcmEuYXNwZWN0O1xuXHRcdGNvbnN0IGRpc3RhbmNlID0gbWFyZ2luICogTWF0aC5tYXgoZml0SGVpZ2h0RGlzdGFuY2UsIGZpdFdpZHRoRGlzdGFuY2UpO1xuXG5cdFx0cmV0dXJuIHsgYm94OiB0aGlzLmJveCwgc2l6ZTogYm94U2l6ZSwgY2VudGVyLCBkaXN0YW5jZSB9O1xuXHR9XG5cblx0cmVmcmVzaChvYmplY3Q/OiBPYmplY3QzRCB8IEJveDMpIHtcblx0XHRjb25zdCBbZ3JvdXAsIGNhbWVyYV0gPSBbdW50cmFja2VkKHRoaXMuZ3JvdXBSZWYpLm5hdGl2ZUVsZW1lbnQsIHVudHJhY2tlZCh0aGlzLmNhbWVyYSldO1xuXG5cdFx0aWYgKGlzQm94MyhvYmplY3QpKSB0aGlzLmJveC5jb3B5KG9iamVjdCk7XG5cdFx0ZWxzZSB7XG5cdFx0XHRjb25zdCB0YXJnZXQgPSBvYmplY3QgfHwgZ3JvdXA7XG5cdFx0XHRpZiAoIXRhcmdldCkgcmV0dXJuIHRoaXM7XG5cdFx0XHR0YXJnZXQudXBkYXRlV29ybGRNYXRyaXgodHJ1ZSwgdHJ1ZSk7XG5cdFx0XHR0aGlzLmJveC5zZXRGcm9tT2JqZWN0KHRhcmdldCk7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmJveC5pc0VtcHR5KCkpIHtcblx0XHRcdGNvbnN0IG1heCA9IGNhbWVyYS5wb3NpdGlvbi5sZW5ndGgoKSB8fCAxMDtcblx0XHRcdHRoaXMuYm94LnNldEZyb21DZW50ZXJBbmRTaXplKG5ldyBWZWN0b3IzKCksIG5ldyBWZWN0b3IzKG1heCwgbWF4LCBtYXgpKTtcblx0XHR9XG5cblx0XHR0aGlzLm9yaWdpbi5jYW1Qb3MuY29weShjYW1lcmEucG9zaXRpb24pO1xuXHRcdHRoaXMub3JpZ2luLmNhbVJvdC5jb3B5KGNhbWVyYS5xdWF0ZXJuaW9uKTtcblx0XHRpcy5vcnRob2dyYXBoaWNDYW1lcmEoY2FtZXJhKSAmJiAodGhpcy5vcmlnaW4uY2FtWm9vbSA9IGNhbWVyYS56b29tKTtcblxuXHRcdHRoaXMuZ29hbC5jYW1Qb3MgPSB1bmRlZmluZWQ7XG5cdFx0dGhpcy5nb2FsLmNhbVJvdCA9IHVuZGVmaW5lZDtcblx0XHR0aGlzLmdvYWwuY2FtWm9vbSA9IHVuZGVmaW5lZDtcblx0XHR0aGlzLmdvYWwuY2FtVXAgPSB1bmRlZmluZWQ7XG5cdFx0dGhpcy5nb2FsLnRhcmdldCA9IHVuZGVmaW5lZDtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cmVzZXQoKSB7XG5cdFx0Y29uc3QgW2NhbWVyYV0gPSBbdW50cmFja2VkKHRoaXMuY2FtZXJhKV07XG5cdFx0Y29uc3QgeyBjZW50ZXIsIGRpc3RhbmNlIH0gPSB0aGlzLmdldFNpemUoKTtcblxuXHRcdGNvbnN0IGRpcmVjdGlvbiA9IGNhbWVyYS5wb3NpdGlvbi5jbG9uZSgpLnN1YihjZW50ZXIpLm5vcm1hbGl6ZSgpO1xuXHRcdHRoaXMuZ29hbC5jYW1Qb3MgPSBjZW50ZXIuY2xvbmUoKS5hZGRTY2FsZWRWZWN0b3IoZGlyZWN0aW9uLCBkaXN0YW5jZSk7XG5cdFx0dGhpcy5nb2FsLnRhcmdldCA9IGNlbnRlci5jbG9uZSgpO1xuXHRcdGNvbnN0IG1DYW1Sb3QgPSBuZXcgTWF0cml4NCgpLmxvb2tBdCh0aGlzLmdvYWwuY2FtUG9zLCB0aGlzLmdvYWwudGFyZ2V0LCBjYW1lcmEudXApO1xuXHRcdHRoaXMuZ29hbC5jYW1Sb3QgPSBuZXcgUXVhdGVybmlvbigpLnNldEZyb21Sb3RhdGlvbk1hdHJpeChtQ2FtUm90KTtcblxuXHRcdHRoaXMuYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZS5TVEFSVDtcblx0XHR0aGlzLnQgPSAwO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRtb3ZlVG8ocG9zaXRpb246IFZlY3RvcjMgfCBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pIHtcblx0XHR0aGlzLmdvYWwuY2FtUG9zID0gQXJyYXkuaXNBcnJheShwb3NpdGlvbikgPyBuZXcgVmVjdG9yMyguLi5wb3NpdGlvbikgOiBwb3NpdGlvbi5jbG9uZSgpO1xuXG5cdFx0dGhpcy5hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlLlNUQVJUO1xuXHRcdHRoaXMudCA9IDA7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGxvb2tBdCh7IHRhcmdldCwgdXAgfTogeyB0YXJnZXQ6IFZlY3RvcjMgfCBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl07IHVwPzogVmVjdG9yMyB8IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSB9KSB7XG5cdFx0Y29uc3QgW2NhbWVyYV0gPSBbdW50cmFja2VkKHRoaXMuY2FtZXJhKV07XG5cblx0XHR0aGlzLmdvYWwudGFyZ2V0ID0gQXJyYXkuaXNBcnJheSh0YXJnZXQpID8gbmV3IFZlY3RvcjMoLi4udGFyZ2V0KSA6IHRhcmdldC5jbG9uZSgpO1xuXHRcdGlmICh1cCkge1xuXHRcdFx0dGhpcy5nb2FsLmNhbVVwID0gQXJyYXkuaXNBcnJheSh1cCkgPyBuZXcgVmVjdG9yMyguLi51cCkgOiB1cC5jbG9uZSgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmdvYWwuY2FtVXAgPSBjYW1lcmEudXAuY2xvbmUoKTtcblx0XHR9XG5cdFx0Y29uc3QgbUNhbVJvdCA9IG5ldyBNYXRyaXg0KCkubG9va0F0KHRoaXMuZ29hbC5jYW1Qb3MgfHwgY2FtZXJhLnBvc2l0aW9uLCB0aGlzLmdvYWwudGFyZ2V0LCB0aGlzLmdvYWwuY2FtVXApO1xuXHRcdHRoaXMuZ29hbC5jYW1Sb3QgPSBuZXcgUXVhdGVybmlvbigpLnNldEZyb21Sb3RhdGlvbk1hdHJpeChtQ2FtUm90KTtcblxuXHRcdHRoaXMuYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZS5TVEFSVDtcblx0XHR0aGlzLnQgPSAwO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRmaXQoKSB7XG5cdFx0Y29uc3QgW2NhbWVyYSwgY29udHJvbHMsIHsgbWFyZ2luIH1dID0gW3VudHJhY2tlZCh0aGlzLmNhbWVyYSksIHVudHJhY2tlZCh0aGlzLmNvbnRyb2xzKSwgdW50cmFja2VkKHRoaXMub3B0aW9ucyldO1xuXG5cdFx0aWYgKCFpcy5vcnRob2dyYXBoaWNDYW1lcmEoY2FtZXJhKSkge1xuXHRcdFx0Ly8gRm9yIG5vbi1vcnRob2dyYXBoaWMgY2FtZXJhcywgZml0IHNob3VsZCBiZWhhdmUgZXhhY3RseSBsaWtlIHJlc2V0XG5cdFx0XHRyZXR1cm4gdGhpcy5yZXNldCgpO1xuXHRcdH1cblxuXHRcdC8vIEZvciBvcnRob2dyYXBoaWMgY2FtZXJhcywgZml0IHNob3VsZCBvbmx5IG1vZGlmeSB0aGUgem9vbSB2YWx1ZVxuXHRcdGxldCBtYXhIZWlnaHQgPSAwO1xuXHRcdGxldCBtYXhXaWR0aCA9IDA7XG5cdFx0Y29uc3QgdmVydGljZXMgPSBbXG5cdFx0XHRuZXcgVmVjdG9yMyh0aGlzLmJveC5taW4ueCwgdGhpcy5ib3gubWluLnksIHRoaXMuYm94Lm1pbi56KSxcblx0XHRcdG5ldyBWZWN0b3IzKHRoaXMuYm94Lm1pbi54LCB0aGlzLmJveC5tYXgueSwgdGhpcy5ib3gubWluLnopLFxuXHRcdFx0bmV3IFZlY3RvcjModGhpcy5ib3gubWluLngsIHRoaXMuYm94Lm1pbi55LCB0aGlzLmJveC5tYXgueiksXG5cdFx0XHRuZXcgVmVjdG9yMyh0aGlzLmJveC5taW4ueCwgdGhpcy5ib3gubWF4LnksIHRoaXMuYm94Lm1heC56KSxcblx0XHRcdG5ldyBWZWN0b3IzKHRoaXMuYm94Lm1heC54LCB0aGlzLmJveC5tYXgueSwgdGhpcy5ib3gubWF4LnopLFxuXHRcdFx0bmV3IFZlY3RvcjModGhpcy5ib3gubWF4LngsIHRoaXMuYm94Lm1heC55LCB0aGlzLmJveC5taW4ueiksXG5cdFx0XHRuZXcgVmVjdG9yMyh0aGlzLmJveC5tYXgueCwgdGhpcy5ib3gubWluLnksIHRoaXMuYm94Lm1heC56KSxcblx0XHRcdG5ldyBWZWN0b3IzKHRoaXMuYm94Lm1heC54LCB0aGlzLmJveC5taW4ueSwgdGhpcy5ib3gubWluLnopLFxuXHRcdF07XG5cblx0XHQvLyBUcmFuc2Zvcm0gdGhlIGNlbnRlciBhbmQgZWFjaCBjb3JuZXIgdG8gY2FtZXJhIHNwYWNlXG5cdFx0Y29uc3QgcG9zID0gdGhpcy5nb2FsLmNhbVBvcyB8fCBjYW1lcmEucG9zaXRpb247XG5cdFx0Y29uc3QgdGFyZ2V0ID0gdGhpcy5nb2FsLnRhcmdldCB8fCBjb250cm9scy50YXJnZXQ7XG5cdFx0Y29uc3QgdXAgPSB0aGlzLmdvYWwuY2FtVXAgfHwgY2FtZXJhLnVwO1xuXHRcdGNvbnN0IG1DYW1XSW52ID0gdGFyZ2V0XG5cdFx0XHQ/IG5ldyBNYXRyaXg0KCkubG9va0F0KHBvcywgdGFyZ2V0LCB1cCkuc2V0UG9zaXRpb24ocG9zKS5pbnZlcnQoKVxuXHRcdFx0OiBjYW1lcmEubWF0cml4V29ybGRJbnZlcnNlO1xuXHRcdGZvciAoY29uc3QgdiBvZiB2ZXJ0aWNlcykge1xuXHRcdFx0di5hcHBseU1hdHJpeDQobUNhbVdJbnYpO1xuXHRcdFx0bWF4SGVpZ2h0ID0gTWF0aC5tYXgobWF4SGVpZ2h0LCBNYXRoLmFicyh2LnkpKTtcblx0XHRcdG1heFdpZHRoID0gTWF0aC5tYXgobWF4V2lkdGgsIE1hdGguYWJzKHYueCkpO1xuXHRcdH1cblx0XHRtYXhIZWlnaHQgKj0gMjtcblx0XHRtYXhXaWR0aCAqPSAyO1xuXHRcdGNvbnN0IHpvb21Gb3JIZWlnaHQgPSAoY2FtZXJhLnRvcCAtIGNhbWVyYS5ib3R0b20pIC8gbWF4SGVpZ2h0O1xuXHRcdGNvbnN0IHpvb21Gb3JXaWR0aCA9IChjYW1lcmEucmlnaHQgLSBjYW1lcmEubGVmdCkgLyBtYXhXaWR0aDtcblxuXHRcdHRoaXMuZ29hbC5jYW1ab29tID0gTWF0aC5taW4oem9vbUZvckhlaWdodCwgem9vbUZvcldpZHRoKSAvIG1hcmdpbjtcblxuXHRcdHRoaXMuYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZS5TVEFSVDtcblx0XHR0aGlzLnQgPSAwO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjbGlwKCkge1xuXHRcdGNvbnN0IFtjYW1lcmEsIGNvbnRyb2xzLCBpbnZhbGlkYXRlXSA9IFtcblx0XHRcdHVudHJhY2tlZCh0aGlzLmNhbWVyYSksXG5cdFx0XHR1bnRyYWNrZWQodGhpcy5jb250cm9scyksXG5cdFx0XHR1bnRyYWNrZWQodGhpcy5pbnZhbGlkYXRlKSxcblx0XHRdO1xuXHRcdGNvbnN0IHsgZGlzdGFuY2UgfSA9IHRoaXMuZ2V0U2l6ZSgpO1xuXG5cdFx0Y2FtZXJhLm5lYXIgPSBkaXN0YW5jZSAvIDEwMDtcblx0XHRjYW1lcmEuZmFyID0gZGlzdGFuY2UgKiAxMDA7XG5cdFx0Y2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTtcblxuXHRcdGlmIChjb250cm9scykge1xuXHRcdFx0Y29udHJvbHMubWF4RGlzdGFuY2UgPSBkaXN0YW5jZSAqIDEwO1xuXHRcdFx0Y29udHJvbHMudXBkYXRlKCk7XG5cdFx0fVxuXG5cdFx0aW52YWxpZGF0ZSgpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cbiJdfQ==
@@ -0,0 +1,69 @@
1
+ import { Directive, afterNextRender, input, untracked } from '@angular/core';
2
+ import { injectBeforeRender, injectStore } from 'angular-three';
3
+ import { injectAutoEffect } from 'ngxtension/auto-effect';
4
+ import { mergeInputs } from 'ngxtension/inject-inputs';
5
+ import { SimplexNoise } from 'three-stdlib';
6
+ import * as i0 from "@angular/core";
7
+ const defaultOptions = {
8
+ intensity: 1,
9
+ decayRate: 0.65,
10
+ maxYaw: 0.1,
11
+ maxPitch: 0.1,
12
+ maxRoll: 0.1,
13
+ yawFrequency: 0.1,
14
+ pitchFrequency: 0.1,
15
+ rollFrequency: 0.1,
16
+ };
17
+ export class NgtsCameraShake {
18
+ get intensity() {
19
+ return this.intensityOption;
20
+ }
21
+ set intensity(val) {
22
+ this.intensityOption = Math.min(1, Math.max(0, val));
23
+ }
24
+ constructor() {
25
+ this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
26
+ this.autoEffect = injectAutoEffect();
27
+ this.store = injectStore();
28
+ this.camera = this.store.select('camera');
29
+ this.defaultControls = this.store.select('controls');
30
+ this.initialRotation = untracked(this.camera).rotation.clone();
31
+ this.intensityOption = untracked(this.options).intensity;
32
+ this.yawNoise = new SimplexNoise();
33
+ this.pitchNoise = new SimplexNoise();
34
+ this.rollNoise = new SimplexNoise();
35
+ afterNextRender(() => {
36
+ this.autoEffect(() => {
37
+ const defaultControls = this.defaultControls();
38
+ if (!defaultControls)
39
+ return;
40
+ const camera = this.camera();
41
+ const callback = () => void (this.initialRotation = camera.rotation.clone());
42
+ defaultControls.addEventListener('change', callback);
43
+ callback();
44
+ return () => void defaultControls.removeEventListener('change', callback);
45
+ });
46
+ });
47
+ injectBeforeRender(({ delta, clock }) => {
48
+ const [{ maxYaw, yawFrequency, maxPitch, pitchFrequency, maxRoll, rollFrequency, decay, decayRate }, camera] = [
49
+ this.options(),
50
+ this.camera(),
51
+ ];
52
+ const shake = Math.pow(this.intensity, 2);
53
+ const yaw = maxYaw * shake * this.yawNoise.noise(clock.elapsedTime * yawFrequency, 1);
54
+ const pitch = maxPitch * shake * this.pitchNoise.noise(clock.elapsedTime * pitchFrequency, 1);
55
+ const roll = maxRoll * shake * this.rollNoise.noise(clock.elapsedTime * rollFrequency, 1);
56
+ camera.rotation.set(this.initialRotation.x + pitch, this.initialRotation.y + yaw, this.initialRotation.z + roll);
57
+ if (decay && this.intensity > 0) {
58
+ this.intensity -= decayRate * delta;
59
+ }
60
+ });
61
+ }
62
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsCameraShake, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
63
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.0", type: NgtsCameraShake, isStandalone: true, selector: "ngts-camera-shake", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
64
+ }
65
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsCameraShake, decorators: [{
66
+ type: Directive,
67
+ args: [{ selector: 'ngts-camera-shake', standalone: true }]
68
+ }], ctorParameters: () => [] });
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FtZXJhLXNoYWtlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL3N0YWdpbmcvc3JjL2xpYi9jYW1lcmEtc2hha2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxlQUFlLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFDOztBQXFCNUMsTUFBTSxjQUFjLEdBQTJCO0lBQzlDLFNBQVMsRUFBRSxDQUFDO0lBQ1osU0FBUyxFQUFFLElBQUk7SUFDZixNQUFNLEVBQUUsR0FBRztJQUNYLFFBQVEsRUFBRSxHQUFHO0lBQ2IsT0FBTyxFQUFFLEdBQUc7SUFDWixZQUFZLEVBQUUsR0FBRztJQUNqQixjQUFjLEVBQUUsR0FBRztJQUNuQixhQUFhLEVBQUUsR0FBRztDQUNsQixDQUFDO0FBR0YsTUFBTSxPQUFPLGVBQWU7SUFXM0IsSUFBSSxTQUFTO1FBQ1osT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFJLFNBQVMsQ0FBQyxHQUFXO1FBQ3hCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBTUQ7UUF0QkEsWUFBTyxHQUFHLEtBQUssQ0FBQyxjQUFjLEVBQUUsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLGNBQWMsQ0FBQyxFQUFF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QUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxTQUFTLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQztZQUNyQyxDQUFDO1FBQ0YsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDOzhHQXJEVyxlQUFlO2tHQUFmLGVBQWU7OzJGQUFmLGVBQWU7a0JBRDNCLFNBQVM7bUJBQUMsRUFBRSxRQUFRLEVBQUUsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgU2lnbmFsLCBhZnRlck5leHRSZW5kZXIsIGlucHV0LCB1bnRyYWNrZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGluamVjdEJlZm9yZVJlbmRlciwgaW5qZWN0U3RvcmUgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IGluamVjdEF1dG9FZmZlY3QgfSBmcm9tICduZ3h0ZW5zaW9uL2F1dG8tZWZmZWN0JztcbmltcG9ydCB7IG1lcmdlSW5wdXRzIH0gZnJvbSAnbmd4dGVuc2lvbi9pbmplY3QtaW5wdXRzJztcbmltcG9ydCB7IFZlY3RvcjMgfSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBTaW1wbGV4Tm9pc2UgfSBmcm9tICd0aHJlZS1zdGRsaWInO1xuXG5pbnRlcmZhY2UgQ29udHJvbHNQcm90byB7XG5cdHVwZGF0ZSgpOiB2b2lkO1xuXHR0YXJnZXQ6IFZlY3RvcjM7XG5cdGFkZEV2ZW50TGlzdGVuZXI6IChldmVudDogc3RyaW5nLCBjYWxsYmFjazogKGV2ZW50OiBhbnkpID0+IHZvaWQpID0+IHZvaWQ7XG5cdHJlbW92ZUV2ZW50TGlzdGVuZXI6IChldmVudDogc3RyaW5nLCBjYWxsYmFjazogKGV2ZW50OiBhbnkpID0+IHZvaWQpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0c0NhbWVyYVNoYWtlT3B0aW9ucyB7XG5cdGludGVuc2l0eTogbnVtYmVyO1xuXHRkZWNheT86IGJvb2xlYW47XG5cdGRlY2F5UmF0ZTogbnVtYmVyO1xuXHRtYXhZYXc6IG51bWJlcjtcblx0bWF4UGl0Y2g6IG51bWJlcjtcblx0bWF4Um9sbDogbnVtYmVyO1xuXHR5YXdGcmVxdWVuY3k6IG51bWJlcjtcblx0cGl0Y2hGcmVxdWVuY3k6IG51bWJlcjtcblx0cm9sbEZyZXF1ZW5jeTogbnVtYmVyO1xufVxuXG5jb25zdCBkZWZhdWx0T3B0aW9uczogTmd0c0NhbWVyYVNoYWtlT3B0aW9ucyA9IHtcblx0aW50ZW5zaXR5OiAxLFxuXHRkZWNheVJhdGU6IDAuNjUsXG5cdG1heFlhdzogMC4xLFxuXHRtYXhQaXRjaDogMC4xLFxuXHRtYXhSb2xsOiAwLjEsXG5cdHlhd0ZyZXF1ZW5jeTogMC4xLFxuXHRwaXRjaEZyZXF1ZW5jeTogMC4xLFxuXHRyb2xsRnJlcXVlbmN5OiAwLjEsXG59O1xuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICduZ3RzLWNhbWVyYS1zaGFrZScsIHN0YW5kYWxvbmU6IHRydWUgfSlcbmV4cG9ydCBjbGFzcyBOZ3RzQ2FtZXJhU2hha2Uge1xuXHRvcHRpb25zID0gaW5wdXQoZGVmYXVsdE9wdGlvbnMsIHsgdHJhbnNmb3JtOiBtZXJnZUlucHV0cyhkZWZhdWx0T3B0aW9ucykgfSk7XG5cblx0cHJpdmF0ZSBhdXRvRWZmZWN0ID0gaW5qZWN0QXV0b0VmZmVjdCgpO1xuXHRwcml2YXRlIHN0b3JlID0gaW5qZWN0U3RvcmUoKTtcblx0cHJpdmF0ZSBjYW1lcmEgPSB0aGlzLnN0b3JlLnNlbGVjdCgnY2FtZXJhJyk7XG5cdHByaXZhdGUgZGVmYXVsdENvbnRyb2xzID0gdGhpcy5zdG9yZS5zZWxlY3QoJ2NvbnRyb2xzJykgYXMgdW5rbm93biBhcyBTaWduYWw8Q29udHJvbHNQcm90bz47XG5cblx0cHJpdmF0ZSBpbml0aWFsUm90YXRpb24gPSB1bnRyYWNrZWQodGhpcy5jYW1lcmEpLnJvdGF0aW9uLmNsb25lKCk7XG5cdHByaXZhdGUgaW50ZW5zaXR5T3B0aW9uID0gdW50cmFja2VkKHRoaXMub3B0aW9ucykuaW50ZW5zaXR5O1xuXG5cdGdldCBpbnRlbnNpdHkoKSB7XG5cdFx0cmV0dXJuIHRoaXMuaW50ZW5zaXR5T3B0aW9uO1xuXHR9XG5cblx0c2V0IGludGVuc2l0eSh2YWw6IG51bWJlcikge1xuXHRcdHRoaXMuaW50ZW5zaXR5T3B0aW9uID0gTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgdmFsKSk7XG5cdH1cblxuXHRwcml2YXRlIHlhd05vaXNlID0gbmV3IFNpbXBsZXhOb2lzZSgpO1xuXHRwcml2YXRlIHBpdGNoTm9pc2UgPSBuZXcgU2ltcGxleE5vaXNlKCk7XG5cdHByaXZhdGUgcm9sbE5vaXNlID0gbmV3IFNpbXBsZXhOb2lzZSgpO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XG5cdFx0XHR0aGlzLmF1dG9FZmZlY3QoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBkZWZhdWx0Q29udHJvbHMgPSB0aGlzLmRlZmF1bHRDb250cm9scygpO1xuXHRcdFx0XHRpZiAoIWRlZmF1bHRDb250cm9scykgcmV0dXJuO1xuXHRcdFx0XHRjb25zdCBjYW1lcmEgPSB0aGlzLmNhbWVyYSgpO1xuXG5cdFx0XHRcdGNvbnN0IGNhbGxiYWNrID0gKCkgPT4gdm9pZCAodGhpcy5pbml0aWFsUm90YXRpb24gPSBjYW1lcmEucm90YXRpb24uY2xvbmUoKSk7XG5cdFx0XHRcdGRlZmF1bHRDb250cm9scy5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBjYWxsYmFjayk7XG5cdFx0XHRcdGNhbGxiYWNrKCk7XG5cdFx0XHRcdHJldHVybiAoKSA9PiB2b2lkIGRlZmF1bHRDb250cm9scy5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBjYWxsYmFjayk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdGluamVjdEJlZm9yZVJlbmRlcigoeyBkZWx0YSwgY2xvY2sgfSkgPT4ge1xuXHRcdFx0Y29uc3QgW3sgbWF4WWF3LCB5YXdGcmVxdWVuY3ksIG1heFBpdGNoLCBwaXRjaEZyZXF1ZW5jeSwgbWF4Um9sbCwgcm9sbEZyZXF1ZW5jeSwgZGVjYXksIGRlY2F5UmF0ZSB9LCBjYW1lcmFdID0gW1xuXHRcdFx0XHR0aGlzLm9wdGlvbnMoKSxcblx0XHRcdFx0dGhpcy5jYW1lcmEoKSxcblx0XHRcdF07XG5cdFx0XHRjb25zdCBzaGFrZSA9IE1hdGgucG93KHRoaXMuaW50ZW5zaXR5LCAyKTtcblx0XHRcdGNvbnN0IHlhdyA9IG1heFlhdyAqIHNoYWtlICogdGhpcy55YXdOb2lzZS5ub2lzZShjbG9jay5lbGFwc2VkVGltZSAqIHlhd0ZyZXF1ZW5jeSwgMSk7XG5cdFx0XHRjb25zdCBwaXRjaCA9IG1heFBpdGNoICogc2hha2UgKiB0aGlzLnBpdGNoTm9pc2Uubm9pc2UoY2xvY2suZWxhcHNlZFRpbWUgKiBwaXRjaEZyZXF1ZW5jeSwgMSk7XG5cdFx0XHRjb25zdCByb2xsID0gbWF4Um9sbCAqIHNoYWtlICogdGhpcy5yb2xsTm9pc2Uubm9pc2UoY2xvY2suZWxhcHNlZFRpbWUgKiByb2xsRnJlcXVlbmN5LCAxKTtcblxuXHRcdFx0Y2FtZXJhLnJvdGF0aW9uLnNldCh0aGlzLmluaXRpYWxSb3RhdGlvbi54ICsgcGl0Y2gsIHRoaXMuaW5pdGlhbFJvdGF0aW9uLnkgKyB5YXcsIHRoaXMuaW5pdGlhbFJvdGF0aW9uLnogKyByb2xsKTtcblxuXHRcdFx0aWYgKGRlY2F5ICYmIHRoaXMuaW50ZW5zaXR5ID4gMCkge1xuXHRcdFx0XHR0aGlzLmludGVuc2l0eSAtPSBkZWNheVJhdGUgKiBkZWx0YTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxufVxuIl19