angular-three-soba 1.14.1 → 2.0.0-beta.11

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 (426) hide show
  1. package/README.md +2 -2
  2. package/abstractions/billboard/billboard.d.ts +28 -0
  3. package/abstractions/detailed/detailed.d.ts +26 -0
  4. package/abstractions/edges/edges.d.ts +34 -0
  5. package/abstractions/grid/grid.d.ts +50 -0
  6. package/abstractions/index.d.ts +6 -11
  7. package/abstractions/text/text.d.ts +82 -0
  8. package/abstractions/text-3d/text-3d.d.ts +81 -0
  9. package/cameras/{lib/camera → camera}/camera-content.d.ts +2 -2
  10. package/cameras/camera/camera.d.ts +26 -0
  11. package/cameras/cube-camera/cube-camera.d.ts +69 -0
  12. package/cameras/index.d.ts +4 -4
  13. package/cameras/orthographic-camera/orthographic-camera.d.ts +37 -0
  14. package/cameras/{lib/perspective-camera → perspective-camera}/perspective-camera.d.ts +10 -1
  15. package/controls/index.d.ts +1 -1
  16. package/controls/orbit-controls/orbit-controls.d.ts +54 -0
  17. package/esm2022/abstractions/angular-three-soba-abstractions.mjs +1 -1
  18. package/esm2022/abstractions/billboard/billboard.mjs +74 -0
  19. package/esm2022/abstractions/detailed/detailed.mjs +64 -0
  20. package/esm2022/abstractions/edges/edges.mjs +88 -0
  21. package/esm2022/abstractions/grid/grid.mjs +180 -0
  22. package/esm2022/abstractions/index.mjs +7 -12
  23. package/esm2022/abstractions/text/text.mjs +274 -0
  24. package/esm2022/abstractions/text-3d/text-3d.mjs +165 -0
  25. package/esm2022/angular-three-soba.mjs +1 -1
  26. package/esm2022/cameras/angular-three-soba-cameras.mjs +1 -1
  27. package/esm2022/cameras/camera/camera-content.mjs +20 -0
  28. package/esm2022/cameras/camera/camera.mjs +77 -0
  29. package/esm2022/cameras/cube-camera/cube-camera.mjs +161 -0
  30. package/esm2022/cameras/index.mjs +5 -5
  31. package/esm2022/cameras/orthographic-camera/orthographic-camera.mjs +102 -0
  32. package/esm2022/cameras/perspective-camera/perspective-camera.mjs +46 -0
  33. package/esm2022/controls/angular-three-soba-controls.mjs +1 -1
  34. package/esm2022/controls/index.mjs +2 -2
  35. package/esm2022/controls/orbit-controls/orbit-controls.mjs +181 -0
  36. package/esm2022/index.mjs +1 -1
  37. package/esm2022/loaders/angular-three-soba-loaders.mjs +1 -1
  38. package/esm2022/loaders/gltf-loader/gltf-loader.mjs +30 -0
  39. package/esm2022/loaders/index.mjs +5 -6
  40. package/esm2022/loaders/loader/loader.mjs +138 -0
  41. package/esm2022/loaders/progress/progress.mjs +45 -0
  42. package/esm2022/loaders/texture-loader/texture-loader.mjs +28 -0
  43. package/esm2022/materials/angular-three-soba-materials.mjs +1 -1
  44. package/esm2022/materials/index.mjs +7 -6
  45. package/esm2022/materials/mesh-distort-material/mesh-distort-material.mjs +82 -0
  46. package/esm2022/materials/mesh-reflector-material/mesh-reflector-material.mjs +367 -0
  47. package/esm2022/materials/mesh-refraction-material/mesh-refraction-material.mjs +171 -0
  48. package/esm2022/materials/mesh-transmission-material/mesh-transmission-material.mjs +278 -0
  49. package/esm2022/materials/mesh-wobble-material/mesh-wobble-material.mjs +68 -0
  50. package/esm2022/materials/point-material/point-material.mjs +46 -0
  51. package/esm2022/misc/angular-three-soba-misc.mjs +1 -1
  52. package/esm2022/misc/animations/animations.mjs +59 -0
  53. package/esm2022/misc/bake-shadows/bake-shadows.mjs +24 -0
  54. package/esm2022/misc/caustics/caustics.mjs +387 -0
  55. package/esm2022/misc/decal/decal.mjs +187 -0
  56. package/esm2022/misc/depth-buffer/depth-buffer.mjs +44 -0
  57. package/esm2022/misc/example/example.mjs +160 -0
  58. package/esm2022/misc/fbo/fbo.mjs +47 -0
  59. package/esm2022/misc/html/html-wrapper.mjs +478 -0
  60. package/esm2022/misc/html/html.mjs +304 -0
  61. package/esm2022/misc/index.mjs +14 -5
  62. package/esm2022/misc/sampler/sampler.mjs +142 -0
  63. package/esm2022/misc/shadow/shadow.mjs +111 -0
  64. package/esm2022/misc/stats-gl/stats-gl.mjs +61 -0
  65. package/esm2022/misc/trail/trail.mjs +209 -0
  66. package/esm2022/misc/trail-texture/inject-trail-texture.mjs +17 -0
  67. package/esm2022/misc/trail-texture/trail-texture.mjs +106 -0
  68. package/esm2022/modifiers/angular-three-soba-modifiers.mjs +5 -0
  69. package/esm2022/modifiers/curve-modifier/curve-modifier.mjs +64 -0
  70. package/esm2022/modifiers/index.mjs +2 -0
  71. package/esm2022/performances/adaptive-dpr/adaptive-dpr.mjs +44 -0
  72. package/esm2022/performances/adaptive-events/adaptive-events.mjs +27 -0
  73. package/esm2022/performances/angular-three-soba-performances.mjs +5 -0
  74. package/esm2022/performances/index.mjs +6 -0
  75. package/esm2022/performances/points/points-input.mjs +64 -0
  76. package/esm2022/performances/points/points.mjs +329 -0
  77. package/esm2022/performances/points/position-point.mjs +54 -0
  78. package/esm2022/performances/segments/segment-object.mjs +9 -0
  79. package/esm2022/performances/segments/segments.mjs +182 -0
  80. package/esm2022/shaders/angular-three-soba-shaders.mjs +1 -1
  81. package/esm2022/shaders/blur-pass/blur-pass.mjs +61 -0
  82. package/esm2022/shaders/caustics/caustics-material.mjs +130 -0
  83. package/esm2022/shaders/caustics/caustics-projection-material.mjs +31 -0
  84. package/esm2022/shaders/convolution-material/convolution-material.mjs +94 -0
  85. package/esm2022/shaders/discard-material/discard-material.mjs +3 -0
  86. package/esm2022/shaders/grid-material/grid-material.mjs +77 -0
  87. package/esm2022/shaders/index.mjs +18 -15
  88. package/esm2022/shaders/mesh-distort-material/mesh-distort-material.mjs +56 -0
  89. package/esm2022/shaders/mesh-reflector-material/mesh-reflector-material.mjs +223 -0
  90. package/esm2022/shaders/mesh-refraction-material/mesh-refraction-material.mjs +170 -0
  91. package/esm2022/shaders/mesh-transmission-material/mesh-transmission-material.mjs +268 -0
  92. package/esm2022/shaders/mesh-wobble-material/mesh-wobble-material.mjs +37 -0
  93. package/esm2022/shaders/shader-material/shader-material.mjs +34 -0
  94. package/esm2022/shaders/soft-shadow-material/soft-shadow-material.mjs +25 -0
  95. package/esm2022/shaders/sparkles-material/sparkles-material.mjs +33 -0
  96. package/esm2022/shaders/spot-light-material/spot-light-material.mjs +86 -0
  97. package/esm2022/shaders/star-field-material/star-field-material.mjs +33 -0
  98. package/esm2022/shaders/wireframe-material/wireframe-material.mjs +247 -0
  99. package/esm2022/staging/accumulative-shadows/accumulative-shadows.mjs +267 -0
  100. package/esm2022/staging/accumulative-shadows/progressive-light-map.mjs +108 -0
  101. package/esm2022/staging/accumulative-shadows/randomized-lights.mjs +206 -0
  102. package/esm2022/staging/angular-three-soba-staging.mjs +1 -1
  103. package/esm2022/staging/backdrop/backdrop.mjs +77 -0
  104. package/esm2022/staging/bb-anchor/bb-anchor.mjs +69 -0
  105. package/esm2022/staging/bounds/bounds.mjs +308 -0
  106. package/esm2022/staging/camera-shake/camera-shake.mjs +123 -0
  107. package/esm2022/staging/center/center.mjs +163 -0
  108. package/esm2022/staging/cloud/cloud.mjs +158 -0
  109. package/esm2022/staging/contact-shadows/contact-shadows.mjs +246 -0
  110. package/esm2022/staging/environment/assets.mjs +13 -0
  111. package/esm2022/staging/environment/environment-cube.mjs +47 -0
  112. package/esm2022/staging/environment/environment-ground.mjs +41 -0
  113. package/esm2022/staging/environment/environment-input.mjs +119 -0
  114. package/esm2022/staging/environment/environment-map.mjs +53 -0
  115. package/esm2022/staging/environment/environment-portal.mjs +113 -0
  116. package/esm2022/staging/environment/environment.mjs +61 -0
  117. package/esm2022/staging/environment/utils.mjs +105 -0
  118. package/esm2022/staging/float/float.mjs +94 -0
  119. package/esm2022/staging/index.mjs +22 -18
  120. package/esm2022/staging/matcap-texture/matcap-texture.mjs +64 -0
  121. package/esm2022/staging/normal-texture/normal-texture.mjs +53 -0
  122. package/esm2022/staging/sky/sky.mjs +119 -0
  123. package/esm2022/staging/sparkles/sparkles.mjs +164 -0
  124. package/esm2022/staging/spot-light/shadow-mesh-input.mjs +63 -0
  125. package/esm2022/staging/spot-light/shadow-mesh.mjs +266 -0
  126. package/esm2022/staging/spot-light/spot-light-input.mjs +84 -0
  127. package/esm2022/staging/spot-light/spot-light.mjs +81 -0
  128. package/esm2022/staging/spot-light/volumetric-mesh.mjs +98 -0
  129. package/esm2022/staging/stage/stage.mjs +388 -0
  130. package/esm2022/staging/stars/stars.mjs +147 -0
  131. package/esm2022/staging/wireframe/wireframe-input.mjs +191 -0
  132. package/esm2022/staging/wireframe/wireframe.mjs +224 -0
  133. package/esm2022/utils/angular-three-soba-utils.mjs +5 -0
  134. package/esm2022/utils/content/content.mjs +15 -0
  135. package/esm2022/utils/index.mjs +2 -0
  136. package/fesm2022/angular-three-soba-abstractions.mjs +668 -1882
  137. package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
  138. package/fesm2022/angular-three-soba-cameras.mjs +279 -232
  139. package/fesm2022/angular-three-soba-cameras.mjs.map +1 -1
  140. package/fesm2022/angular-three-soba-controls.mjs +104 -69
  141. package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
  142. package/fesm2022/angular-three-soba-loaders.mjs +177 -164
  143. package/fesm2022/angular-three-soba-loaders.mjs.map +1 -1
  144. package/fesm2022/angular-three-soba-materials.mjs +630 -482
  145. package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
  146. package/fesm2022/angular-three-soba-misc.mjs +2248 -122
  147. package/fesm2022/angular-three-soba-misc.mjs.map +1 -1
  148. package/fesm2022/angular-three-soba-modifiers.mjs +71 -0
  149. package/fesm2022/angular-three-soba-modifiers.mjs.map +1 -0
  150. package/fesm2022/angular-three-soba-performances.mjs +697 -0
  151. package/fesm2022/angular-three-soba-performances.mjs.map +1 -0
  152. package/fesm2022/angular-three-soba-shaders.mjs +554 -209
  153. package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
  154. package/fesm2022/angular-three-soba-staging.mjs +3230 -2852
  155. package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
  156. package/fesm2022/angular-three-soba-utils.mjs +22 -0
  157. package/fesm2022/angular-three-soba-utils.mjs.map +1 -0
  158. package/fesm2022/angular-three-soba.mjs.map +1 -1
  159. package/loaders/gltf-loader/gltf-loader.d.ts +10 -0
  160. package/loaders/index.d.ts +4 -5
  161. package/loaders/loader/loader.d.ts +33 -0
  162. package/loaders/progress/progress.d.ts +9 -0
  163. package/loaders/texture-loader/texture-loader.d.ts +7 -0
  164. package/materials/index.d.ts +6 -5
  165. package/materials/mesh-distort-material/mesh-distort-material.d.ts +40 -0
  166. package/materials/mesh-reflector-material/mesh-reflector-material.d.ts +99 -0
  167. package/materials/mesh-refraction-material/mesh-refraction-material.d.ts +62 -0
  168. package/materials/mesh-transmission-material/mesh-transmission-material.d.ts +107 -0
  169. package/materials/mesh-wobble-material/mesh-wobble-material.d.ts +29 -0
  170. package/materials/point-material/point-material.d.ts +24 -0
  171. package/metadata.json +1 -0
  172. package/misc/animations/animations.d.ts +15 -0
  173. package/misc/{lib/bake-shadows → bake-shadows}/bake-shadows.d.ts +2 -5
  174. package/misc/caustics/caustics.d.ts +87 -0
  175. package/misc/decal/decal.d.ts +49 -0
  176. package/misc/depth-buffer/depth-buffer.d.ts +9 -0
  177. package/misc/example/example.d.ts +81 -0
  178. package/misc/{lib/fbo → fbo}/fbo.d.ts +4 -2
  179. package/misc/html/html-wrapper.d.ts +559 -0
  180. package/misc/html/html.d.ts +214 -0
  181. package/misc/index.d.ts +13 -4
  182. package/misc/sampler/sampler.d.ts +67 -0
  183. package/misc/shadow/shadow.d.ts +37 -0
  184. package/misc/stats-gl/stats-gl.d.ts +24 -0
  185. package/misc/trail/trail.d.ts +57 -0
  186. package/misc/trail-texture/inject-trail-texture.d.ts +9 -0
  187. package/misc/trail-texture/trail-texture.d.ts +50 -0
  188. package/modifiers/README.md +3 -0
  189. package/modifiers/curve-modifier/curve-modifier.d.ts +23 -0
  190. package/modifiers/index.d.ts +1 -0
  191. package/package.json +43 -32
  192. package/performances/README.md +3 -0
  193. package/performances/adaptive-dpr/adaptive-dpr.d.ts +14 -0
  194. package/{performance/lib/adaptive → performances/adaptive-events}/adaptive-events.d.ts +5 -6
  195. package/performances/index.d.ts +5 -0
  196. package/performances/points/points-input.d.ts +32 -0
  197. package/performances/points/points.d.ts +92 -0
  198. package/performances/points/position-point.d.ts +11 -0
  199. package/performances/segments/segment-object.d.ts +7 -0
  200. package/performances/segments/segments.d.ts +124 -0
  201. package/shaders/{lib/blur-pass → blur-pass}/blur-pass.d.ts +2 -2
  202. package/shaders/grid-material/grid-material.d.ts +37 -0
  203. package/shaders/index.d.ts +17 -14
  204. package/shaders/{lib/mesh-distort-material → mesh-distort-material}/mesh-distort-material.d.ts +147 -2
  205. package/shaders/{lib/mesh-transmission-material → mesh-transmission-material}/mesh-transmission-material.d.ts +1 -1
  206. package/shaders/{lib/mesh-wobble-material → mesh-wobble-material}/mesh-wobble-material.d.ts +1 -0
  207. package/shaders/{lib/shader-material → shader-material}/shader-material.d.ts +2 -2
  208. package/shaders/soft-shadow-material/soft-shadow-material.d.ts +19 -0
  209. package/shaders/sparkles-material/sparkles-material.d.ts +17 -0
  210. package/shaders/spot-light-material/spot-light-material.d.ts +13 -0
  211. package/shaders/star-field-material/star-field-material.d.ts +13 -0
  212. package/shaders/wireframe-material/wireframe-material.d.ts +58 -0
  213. package/staging/accumulative-shadows/accumulative-shadows.d.ts +146 -0
  214. package/staging/{lib/accumulative-shadows → accumulative-shadows}/progressive-light-map.d.ts +2 -2
  215. package/staging/accumulative-shadows/randomized-lights.d.ts +90 -0
  216. package/staging/backdrop/backdrop.d.ts +30 -0
  217. package/staging/bb-anchor/bb-anchor.d.ts +27 -0
  218. package/staging/bounds/bounds.d.ts +134 -0
  219. package/staging/camera-shake/camera-shake.d.ts +43 -0
  220. package/staging/center/center.d.ts +70 -0
  221. package/staging/cloud/cloud.d.ts +51 -0
  222. package/staging/contact-shadows/contact-shadows.d.ts +70 -0
  223. package/staging/{lib/environment → environment}/assets.d.ts +9 -9
  224. package/staging/environment/environment-cube.d.ts +15 -0
  225. package/staging/environment/environment-ground.d.ts +13 -0
  226. package/staging/environment/environment-input.d.ts +68 -0
  227. package/staging/environment/environment-map.d.ts +16 -0
  228. package/staging/environment/environment-portal.d.ts +18 -0
  229. package/staging/{lib/environment → environment}/environment.d.ts +2 -6
  230. package/staging/environment/utils.d.ts +7 -0
  231. package/staging/float/float.d.ts +31 -0
  232. package/staging/index.d.ts +21 -17
  233. package/staging/matcap-texture/matcap-texture.d.ts +13 -0
  234. package/staging/normal-texture/normal-texture.d.ts +16 -0
  235. package/staging/sky/sky.d.ts +48 -0
  236. package/staging/sparkles/sparkles.d.ts +63 -0
  237. package/staging/spot-light/shadow-mesh-input.d.ts +29 -0
  238. package/staging/spot-light/shadow-mesh.d.ts +37 -0
  239. package/staging/spot-light/spot-light-input.d.ts +38 -0
  240. package/staging/spot-light/spot-light.d.ts +39 -0
  241. package/staging/spot-light/volumetric-mesh.d.ts +24 -0
  242. package/staging/stage/stage.d.ts +130 -0
  243. package/staging/stars/stars.d.ts +45 -0
  244. package/staging/wireframe/wireframe-input.d.ts +65 -0
  245. package/staging/wireframe/wireframe.d.ts +28 -0
  246. package/utils/README.md +3 -0
  247. package/utils/content/content.d.ts +8 -0
  248. package/utils/index.d.ts +1 -0
  249. package/web-types.json +1 -0
  250. package/abstractions/lib/billboard/billboard.d.ts +0 -14
  251. package/abstractions/lib/catmull-rom-line/catmull-rom-line.d.ts +0 -15
  252. package/abstractions/lib/cubic-bezier-line/cubic-bezier-line.d.ts +0 -15
  253. package/abstractions/lib/edges/edges.d.ts +0 -18
  254. package/abstractions/lib/gizmo-helper/gizmo-helper.d.ts +0 -41
  255. package/abstractions/lib/gizmo-helper/gizmo-viewcube/constants.d.ts +0 -12
  256. package/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.d.ts +0 -16
  257. package/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.d.ts +0 -24
  258. package/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.d.ts +0 -14
  259. package/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube.d.ts +0 -15
  260. package/abstractions/lib/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.d.ts +0 -28
  261. package/abstractions/lib/gizmo-helper/gizmo-viewport/gizmo-viewport.d.ts +0 -21
  262. package/abstractions/lib/line/line-input.d.ts +0 -19
  263. package/abstractions/lib/line/line.d.ts +0 -21
  264. package/abstractions/lib/quadratic-bezier-line/quadratic-bezier-line.d.ts +0 -19
  265. package/abstractions/lib/text/text.d.ts +0 -21
  266. package/abstractions/lib/text-3d/text-3d.d.ts +0 -39
  267. package/assets/default-spot-light-shadow.glsl +0 -10
  268. package/cameras/lib/camera/camera.d.ts +0 -19
  269. package/cameras/lib/cube-camera/cube-camera.d.ts +0 -27
  270. package/cameras/lib/orthographic-camera/orthographic-camera.d.ts +0 -17
  271. package/controls/lib/orbit-controls/orbit-controls.d.ts +0 -27
  272. package/esm2022/abstractions/lib/billboard/billboard.mjs +0 -74
  273. package/esm2022/abstractions/lib/catmull-rom-line/catmull-rom-line.mjs +0 -120
  274. package/esm2022/abstractions/lib/cubic-bezier-line/cubic-bezier-line.mjs +0 -99
  275. package/esm2022/abstractions/lib/edges/edges.mjs +0 -96
  276. package/esm2022/abstractions/lib/gizmo-helper/gizmo-helper.mjs +0 -213
  277. package/esm2022/abstractions/lib/gizmo-helper/gizmo-viewcube/constants.mjs +0 -31
  278. package/esm2022/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.mjs +0 -92
  279. package/esm2022/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.mjs +0 -184
  280. package/esm2022/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.mjs +0 -46
  281. package/esm2022/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube.mjs +0 -134
  282. package/esm2022/abstractions/lib/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.mjs +0 -195
  283. package/esm2022/abstractions/lib/gizmo-helper/gizmo-viewport/gizmo-viewport.mjs +0 -267
  284. package/esm2022/abstractions/lib/line/line-input.mjs +0 -76
  285. package/esm2022/abstractions/lib/line/line.mjs +0 -133
  286. package/esm2022/abstractions/lib/quadratic-bezier-line/quadratic-bezier-line.mjs +0 -128
  287. package/esm2022/abstractions/lib/text/text.mjs +0 -115
  288. package/esm2022/abstractions/lib/text-3d/text-3d.mjs +0 -145
  289. package/esm2022/cameras/lib/camera/camera-content.mjs +0 -21
  290. package/esm2022/cameras/lib/camera/camera.mjs +0 -75
  291. package/esm2022/cameras/lib/cube-camera/cube-camera.mjs +0 -131
  292. package/esm2022/cameras/lib/orthographic-camera/orthographic-camera.mjs +0 -93
  293. package/esm2022/cameras/lib/perspective-camera/perspective-camera.mjs +0 -47
  294. package/esm2022/controls/lib/orbit-controls/orbit-controls.mjs +0 -147
  295. package/esm2022/loaders/lib/cube-texture-loader/cube-texture-loader.mjs +0 -10
  296. package/esm2022/loaders/lib/gltf-loader/gltf-loader.mjs +0 -32
  297. package/esm2022/loaders/lib/loader/loader.mjs +0 -134
  298. package/esm2022/loaders/lib/progress/progress.mjs +0 -39
  299. package/esm2022/loaders/lib/texture-loader/texture-loader.mjs +0 -19
  300. package/esm2022/materials/lib/mesh-distort-material/mesh-distort-material.mjs +0 -75
  301. package/esm2022/materials/lib/mesh-reflector-material/mesh-reflector-material.mjs +0 -328
  302. package/esm2022/materials/lib/mesh-refraction-material/mesh-refraction-material.mjs +0 -158
  303. package/esm2022/materials/lib/mesh-transmission-material/mesh-transmission-material.mjs +0 -238
  304. package/esm2022/materials/lib/mesh-wobble-material/mesh-wobble-material.mjs +0 -68
  305. package/esm2022/misc/lib/animations/animations.mjs +0 -52
  306. package/esm2022/misc/lib/bake-shadows/bake-shadows.mjs +0 -26
  307. package/esm2022/misc/lib/depth-buffer/depth-buffer.mjs +0 -39
  308. package/esm2022/misc/lib/fbo/fbo.mjs +0 -39
  309. package/esm2022/performance/angular-three-soba-performance.mjs +0 -5
  310. package/esm2022/performance/index.mjs +0 -5
  311. package/esm2022/performance/lib/adaptive/adaptive-dpr.mjs +0 -47
  312. package/esm2022/performance/lib/adaptive/adaptive-events.mjs +0 -37
  313. package/esm2022/performance/lib/detailed/detailed.mjs +0 -54
  314. package/esm2022/performance/lib/stats/stats.mjs +0 -80
  315. package/esm2022/shaders/lib/blur-pass/blur-pass.mjs +0 -61
  316. package/esm2022/shaders/lib/caustics-material/caustics-material.mjs +0 -128
  317. package/esm2022/shaders/lib/caustics-projection-material/caustics-projection-material.mjs +0 -33
  318. package/esm2022/shaders/lib/convolution-material/convolution-material.mjs +0 -94
  319. package/esm2022/shaders/lib/discard-material/discard-material.mjs +0 -3
  320. package/esm2022/shaders/lib/mesh-distort-material/mesh-distort-material.mjs +0 -55
  321. package/esm2022/shaders/lib/mesh-reflector-material/mesh-reflector-material.mjs +0 -223
  322. package/esm2022/shaders/lib/mesh-refraction-material/mesh-refraction-material.mjs +0 -169
  323. package/esm2022/shaders/lib/mesh-transmission-material/mesh-transmission-material.mjs +0 -268
  324. package/esm2022/shaders/lib/mesh-wobble-material/mesh-wobble-material.mjs +0 -37
  325. package/esm2022/shaders/lib/shader-material/shader-material.mjs +0 -34
  326. package/esm2022/shaders/lib/soft-shadow-material/soft-shadow-material.mjs +0 -33
  327. package/esm2022/shaders/lib/spot-light-material/spot-light-material.mjs +0 -86
  328. package/esm2022/shaders/lib/star-field-material/star-field-material.mjs +0 -32
  329. package/esm2022/staging/lib/accumulative-shadows/accumulative-shadows.mjs +0 -249
  330. package/esm2022/staging/lib/accumulative-shadows/progressive-light-map.mjs +0 -108
  331. package/esm2022/staging/lib/accumulative-shadows/randomized-lights.mjs +0 -201
  332. package/esm2022/staging/lib/bounds/bounds.mjs +0 -284
  333. package/esm2022/staging/lib/camera-shake/camera-shake.mjs +0 -122
  334. package/esm2022/staging/lib/caustics/caustics.mjs +0 -364
  335. package/esm2022/staging/lib/center/center.mjs +0 -143
  336. package/esm2022/staging/lib/cloud/cloud.mjs +0 -160
  337. package/esm2022/staging/lib/contact-shadows/contact-shadows.mjs +0 -228
  338. package/esm2022/staging/lib/environment/assets.mjs +0 -13
  339. package/esm2022/staging/lib/environment/environment-cube.mjs +0 -41
  340. package/esm2022/staging/lib/environment/environment-ground.mjs +0 -67
  341. package/esm2022/staging/lib/environment/environment-inputs.mjs +0 -87
  342. package/esm2022/staging/lib/environment/environment-map.mjs +0 -39
  343. package/esm2022/staging/lib/environment/environment-portal.mjs +0 -111
  344. package/esm2022/staging/lib/environment/environment.mjs +0 -165
  345. package/esm2022/staging/lib/environment/utils.mjs +0 -70
  346. package/esm2022/staging/lib/float/float.mjs +0 -77
  347. package/esm2022/staging/lib/sky/sky.mjs +0 -109
  348. package/esm2022/staging/lib/sparkles/sparkles.mjs +0 -210
  349. package/esm2022/staging/lib/spot-light/common.mjs +0 -42
  350. package/esm2022/staging/lib/spot-light/shadow-mesh-input.mjs +0 -51
  351. package/esm2022/staging/lib/spot-light/spot-light-input.mjs +0 -62
  352. package/esm2022/staging/lib/spot-light/spot-light-shadow-no-shader.mjs +0 -74
  353. package/esm2022/staging/lib/spot-light/spot-light-shadow-shader.mjs +0 -126
  354. package/esm2022/staging/lib/spot-light/spot-light-shadow.mjs +0 -63
  355. package/esm2022/staging/lib/spot-light/spot-light.mjs +0 -117
  356. package/esm2022/staging/lib/spot-light/volumetric-mesh.mjs +0 -86
  357. package/esm2022/staging/lib/stage/stage.mjs +0 -368
  358. package/esm2022/staging/lib/stars/stars.mjs +0 -140
  359. package/fesm2022/angular-three-soba-performance.mjs +0 -210
  360. package/fesm2022/angular-three-soba-performance.mjs.map +0 -1
  361. package/loaders/lib/cube-texture-loader/cube-texture-loader.d.ts +0 -3
  362. package/loaders/lib/gltf-loader/gltf-loader.d.ts +0 -8
  363. package/loaders/lib/loader/loader.d.ts +0 -26
  364. package/loaders/lib/progress/progress.d.ts +0 -16
  365. package/loaders/lib/texture-loader/texture-loader.d.ts +0 -5
  366. package/materials/lib/mesh-distort-material/mesh-distort-material.d.ts +0 -24
  367. package/materials/lib/mesh-reflector-material/mesh-reflector-material.d.ts +0 -41
  368. package/materials/lib/mesh-refraction-material/mesh-refraction-material.d.ts +0 -28
  369. package/materials/lib/mesh-transmission-material/mesh-transmission-material.d.ts +0 -46
  370. package/materials/lib/mesh-wobble-material/mesh-wobble-material.d.ts +0 -14
  371. package/misc/lib/animations/animations.d.ts +0 -13
  372. package/misc/lib/depth-buffer/depth-buffer.d.ts +0 -7
  373. package/performance/README.md +0 -3
  374. package/performance/index.d.ts +0 -4
  375. package/performance/lib/adaptive/adaptive-dpr.d.ts +0 -11
  376. package/performance/lib/detailed/detailed.d.ts +0 -13
  377. package/performance/lib/stats/stats.d.ts +0 -15
  378. package/plugin/README.md +0 -11
  379. package/plugin/generators.json +0 -19
  380. package/plugin/package.json +0 -9
  381. package/plugin/src/generators/init/compat.d.ts +0 -2
  382. package/plugin/src/generators/init/compat.js +0 -6
  383. package/plugin/src/generators/init/compat.js.map +0 -1
  384. package/plugin/src/generators/init/init.d.ts +0 -4
  385. package/plugin/src/generators/init/init.js +0 -22
  386. package/plugin/src/generators/init/init.js.map +0 -1
  387. package/plugin/src/generators/init/schema.json +0 -6
  388. package/plugin/src/index.d.ts +0 -1
  389. package/plugin/src/index.js +0 -6
  390. package/plugin/src/index.js.map +0 -1
  391. package/shaders/lib/soft-shadow-material/soft-shadow-material.d.ts +0 -10
  392. package/shaders/lib/spot-light-material/spot-light-material.d.ts +0 -4
  393. package/shaders/lib/star-field-material/star-field-material.d.ts +0 -3
  394. package/staging/lib/accumulative-shadows/accumulative-shadows.d.ts +0 -58
  395. package/staging/lib/accumulative-shadows/randomized-lights.d.ts +0 -42
  396. package/staging/lib/bounds/bounds.d.ts +0 -48
  397. package/staging/lib/camera-shake/camera-shake.d.ts +0 -28
  398. package/staging/lib/caustics/caustics.d.ts +0 -47
  399. package/staging/lib/center/center.d.ts +0 -40
  400. package/staging/lib/cloud/cloud.d.ts +0 -23
  401. package/staging/lib/contact-shadows/contact-shadows.d.ts +0 -29
  402. package/staging/lib/environment/environment-cube.d.ts +0 -11
  403. package/staging/lib/environment/environment-ground.d.ts +0 -9
  404. package/staging/lib/environment/environment-inputs.d.ts +0 -28
  405. package/staging/lib/environment/environment-map.d.ts +0 -10
  406. package/staging/lib/environment/environment-portal.d.ts +0 -15
  407. package/staging/lib/environment/utils.d.ts +0 -8
  408. package/staging/lib/float/float.d.ts +0 -16
  409. package/staging/lib/sky/sky.d.ts +0 -20
  410. package/staging/lib/sparkles/sparkles.d.ts +0 -29
  411. package/staging/lib/spot-light/common.d.ts +0 -3
  412. package/staging/lib/spot-light/shadow-mesh-input.d.ts +0 -14
  413. package/staging/lib/spot-light/spot-light-input.d.ts +0 -16
  414. package/staging/lib/spot-light/spot-light-shadow-no-shader.d.ts +0 -14
  415. package/staging/lib/spot-light/spot-light-shadow-shader.d.ts +0 -25
  416. package/staging/lib/spot-light/spot-light-shadow.d.ts +0 -6
  417. package/staging/lib/spot-light/spot-light.d.ts +0 -17
  418. package/staging/lib/spot-light/volumetric-mesh.d.ts +0 -15
  419. package/staging/lib/stage/stage.d.ts +0 -87
  420. package/staging/lib/stars/stars.d.ts +0 -20
  421. /package/shaders/{lib/caustics-material → caustics}/caustics-material.d.ts +0 -0
  422. /package/shaders/{lib/caustics-projection-material → caustics}/caustics-projection-material.d.ts +0 -0
  423. /package/shaders/{lib/convolution-material → convolution-material}/convolution-material.d.ts +0 -0
  424. /package/shaders/{lib/discard-material → discard-material}/discard-material.d.ts +0 -0
  425. /package/shaders/{lib/mesh-reflector-material → mesh-reflector-material}/mesh-reflector-material.d.ts +0 -0
  426. /package/shaders/{lib/mesh-refraction-material → mesh-refraction-material}/mesh-refraction-material.d.ts +0 -0
@@ -1,268 +0,0 @@
1
- import * as THREE from 'three';
2
- export class MeshTransmissionMaterial extends THREE.MeshPhysicalMaterial {
3
- constructor(samples = 6, transmissionSampler = false) {
4
- super();
5
- this.uniforms = {
6
- chromaticAberration: { value: 0.05 },
7
- // Transmission must always be 0, unless transmissionSampler is being used
8
- transmission: { value: 0 },
9
- // Instead a workaround is used, see below for reasons why
10
- _transmission: { value: 1 },
11
- transmissionMap: { value: null },
12
- // Roughness is 1 in THREE.MeshPhysicalMaterial but it makes little sense in a transmission material
13
- roughness: { value: 0 },
14
- thickness: { value: 0 },
15
- thicknessMap: { value: null },
16
- attenuationDistance: { value: Infinity },
17
- attenuationColor: { value: new THREE.Color('white') },
18
- anisotropy: { value: 0.1 },
19
- time: { value: 0 },
20
- distortion: { value: 0.0 },
21
- distortionScale: { value: 0.5 },
22
- temporalDistortion: { value: 0.0 },
23
- buffer: { value: null },
24
- };
25
- this.onBeforeCompile = (shader) => {
26
- shader.uniforms = {
27
- ...shader.uniforms,
28
- ...this.uniforms,
29
- };
30
- // If the transmission sampler is active inject a flag
31
- if (transmissionSampler)
32
- shader.defines['USE_SAMPLER'] = '';
33
- // Otherwise we do use use .transmission and must therefore force USE_TRANSMISSION
34
- // because threejs won't inject it for us
35
- else
36
- shader.defines['USE_TRANSMISSION'] = '';
37
- // Head
38
- shader.fragmentShader =
39
- /*glsl*/ `
40
- uniform float chromaticAberration;
41
- uniform float anisotropy;
42
- uniform float time;
43
- uniform float distortion;
44
- uniform float distortionScale;
45
- uniform float temporalDistortion;
46
- uniform sampler2D buffer;
47
-
48
- vec3 random3(vec3 c) {
49
- float j = 4096.0*sin(dot(c,vec3(17.0, 59.4, 15.0)));
50
- vec3 r;
51
- r.z = fract(512.0*j);
52
- j *= .125;
53
- r.x = fract(512.0*j);
54
- j *= .125;
55
- r.y = fract(512.0*j);
56
- return r-0.5;
57
- }
58
-
59
- float seed = 0.0;
60
- uint hash( uint x ) {
61
- x += ( x << 10u );
62
- x ^= ( x >> 6u );
63
- x += ( x << 3u );
64
- x ^= ( x >> 11u );
65
- x += ( x << 15u );
66
- return x;
67
- }
68
-
69
- // Compound versions of the hashing algorithm I whipped together.
70
- uint hash( uvec2 v ) { return hash( v.x ^ hash(v.y) ); }
71
- uint hash( uvec3 v ) { return hash( v.x ^ hash(v.y) ^ hash(v.z) ); }
72
- uint hash( uvec4 v ) { return hash( v.x ^ hash(v.y) ^ hash(v.z) ^ hash(v.w) ); }
73
-
74
- // Construct a float with half-open range [0:1] using low 23 bits.
75
- // All zeroes yields 0.0, all ones yields the next smallest representable value below 1.0.
76
- float floatConstruct( uint m ) {
77
- const uint ieeeMantissa = 0x007FFFFFu; // binary32 mantissa bitmask
78
- const uint ieeeOne = 0x3F800000u; // 1.0 in IEEE binary32
79
- m &= ieeeMantissa; // Keep only mantissa bits (fractional part)
80
- m |= ieeeOne; // Add fractional part to 1.0
81
- float f = uintBitsToFloat( m ); // Range [1:2]
82
- return f - 1.0; // Range [0:1]
83
- }
84
-
85
- // Pseudo-random value in half-open range [0:1].
86
- float random( float x ) { return floatConstruct(hash(floatBitsToUint(x))); }
87
- float random( vec2 v ) { return floatConstruct(hash(floatBitsToUint(v))); }
88
- float random( vec3 v ) { return floatConstruct(hash(floatBitsToUint(v))); }
89
- float random( vec4 v ) { return floatConstruct(hash(floatBitsToUint(v))); }
90
-
91
- float rand() {
92
- float result = random(vec3(gl_FragCoord.xy, seed));
93
- seed += 1.0;
94
- return result;
95
- }
96
-
97
- const float F3 = 0.3333333;
98
- const float G3 = 0.1666667;
99
-
100
- float snoise(vec3 p) {
101
- vec3 s = floor(p + dot(p, vec3(F3)));
102
- vec3 x = p - s + dot(s, vec3(G3));
103
- vec3 e = step(vec3(0.0), x - x.yzx);
104
- vec3 i1 = e*(1.0 - e.zxy);
105
- vec3 i2 = 1.0 - e.zxy*(1.0 - e);
106
- vec3 x1 = x - i1 + G3;
107
- vec3 x2 = x - i2 + 2.0*G3;
108
- vec3 x3 = x - 1.0 + 3.0*G3;
109
- vec4 w, d;
110
- w.x = dot(x, x);
111
- w.y = dot(x1, x1);
112
- w.z = dot(x2, x2);
113
- w.w = dot(x3, x3);
114
- w = max(0.6 - w, 0.0);
115
- d.x = dot(random3(s), x);
116
- d.y = dot(random3(s + i1), x1);
117
- d.z = dot(random3(s + i2), x2);
118
- d.w = dot(random3(s + 1.0), x3);
119
- w *= w;
120
- w *= w;
121
- d *= w;
122
- return dot(d, vec4(52.0));
123
- }
124
-
125
- float snoiseFractal(vec3 m) {
126
- return 0.5333333* snoise(m)
127
- +0.2666667* snoise(2.0*m)
128
- +0.1333333* snoise(4.0*m)
129
- +0.0666667* snoise(8.0*m);
130
- }\n` + shader.fragmentShader;
131
- // Remove transmission
132
- shader.fragmentShader = shader.fragmentShader.replace('#include <transmission_pars_fragment>',
133
- /*glsl*/ `
134
- #ifdef USE_TRANSMISSION
135
- // Transmission code is based on glTF-Sampler-Viewer
136
- // https://github.com/KhronosGroup/glTF-Sample-Viewer
137
- uniform float _transmission;
138
- uniform float thickness;
139
- uniform float attenuationDistance;
140
- uniform vec3 attenuationColor;
141
- #ifdef USE_TRANSMISSIONMAP
142
- uniform sampler2D transmissionMap;
143
- #endif
144
- #ifdef USE_THICKNESSMAP
145
- uniform sampler2D thicknessMap;
146
- #endif
147
- uniform vec2 transmissionSamplerSize;
148
- uniform sampler2D transmissionSamplerMap;
149
- uniform mat4 modelMatrix;
150
- uniform mat4 projectionMatrix;
151
- varying vec3 vWorldPosition;
152
- vec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) {
153
- // Direction of refracted light.
154
- vec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );
155
- // Compute rotation-independant scaling of the model matrix.
156
- vec3 modelScale;
157
- modelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );
158
- modelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );
159
- modelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );
160
- // The thickness is specified in local space.
161
- return normalize( refractionVector ) * thickness * modelScale;
162
- }
163
- float applyIorToRoughness( const in float roughness, const in float ior ) {
164
- // Scale roughness with IOR so that an IOR of 1.0 results in no microfacet refraction and
165
- // an IOR of 1.5 results in the default amount of microfacet refraction.
166
- return roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );
167
- }
168
- vec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) {
169
- float framebufferLod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );
170
- #ifdef USE_SAMPLER
171
- #ifdef texture2DLodEXT
172
- return texture2DLodEXT(transmissionSamplerMap, fragCoord.xy, framebufferLod);
173
- #else
174
- return texture2D(transmissionSamplerMap, fragCoord.xy, framebufferLod);
175
- #endif
176
- #else
177
- return texture2D(buffer, fragCoord.xy);
178
- #endif
179
- }
180
- vec3 applyVolumeAttenuation( const in vec3 radiance, const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) {
181
- if ( isinf( attenuationDistance ) ) {
182
- // Attenuation distance is +∞, i.e. the transmitted color is not attenuated at all.
183
- return radiance;
184
- } else {
185
- // Compute light attenuation using Beer's law.
186
- vec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;
187
- vec3 transmittance = exp( - attenuationCoefficient * transmissionDistance ); // Beer's law
188
- return transmittance * radiance;
189
- }
190
- }
191
- vec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor,
192
- const in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix,
193
- const in mat4 viewMatrix, const in mat4 projMatrix, const in float ior, const in float thickness,
194
- const in vec3 attenuationColor, const in float attenuationDistance ) {
195
- vec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );
196
- vec3 refractedRayExit = position + transmissionRay;
197
- // Project refracted vector on the framebuffer, while mapping to normalized device coordinates.
198
- vec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );
199
- vec2 refractionCoords = ndcPos.xy / ndcPos.w;
200
- refractionCoords += 1.0;
201
- refractionCoords /= 2.0;
202
- // Sample framebuffer to get pixel the refracted ray hits.
203
- vec4 transmittedLight = getTransmissionSample( refractionCoords, roughness, ior );
204
- vec3 attenuatedColor = applyVolumeAttenuation( transmittedLight.rgb, length( transmissionRay ), attenuationColor, attenuationDistance );
205
- // Get the specular component.
206
- vec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );
207
- return vec4( ( 1.0 - F ) * attenuatedColor * diffuseColor, transmittedLight.a );
208
- }
209
- #endif\n`);
210
- // Add refraction
211
- shader.fragmentShader = shader.fragmentShader.replace('#include <transmission_fragment>',
212
- /*glsl*/ `
213
- // Improve the refraction to use the world pos
214
- material.transmission = _transmission;
215
- material.transmissionAlpha = 1.0;
216
- material.thickness = thickness;
217
- material.attenuationDistance = attenuationDistance;
218
- material.attenuationColor = attenuationColor;
219
- #ifdef USE_TRANSMISSIONMAP
220
- material.transmission *= texture2D( transmissionMap, vUv ).r;
221
- #endif
222
- #ifdef USE_THICKNESSMAP
223
- material.thickness *= texture2D( thicknessMap, vUv ).g;
224
- #endif
225
-
226
- vec3 pos = vWorldPosition;
227
- vec3 v = normalize( cameraPosition - pos );
228
- vec3 n = inverseTransformDirection( normal, viewMatrix );
229
- vec3 transmission = vec3(0.0);
230
- float transmissionR, transmissionB, transmissionG;
231
- float randomCoords = rand();
232
- float thickness_smear = thickness * max(pow(roughnessFactor, 0.33), anisotropy);
233
- vec3 distortionNormal = vec3(0.0);
234
- vec3 temporalOffset = vec3(time, -time, -time) * temporalDistortion;
235
- if (distortion > 0.0) {
236
- distortionNormal = distortion * vec3(snoiseFractal(vec3((pos * distortionScale + temporalOffset))), snoiseFractal(vec3(pos.zxy * distortionScale - temporalOffset)), snoiseFractal(vec3(pos.yxz * distortionScale + temporalOffset)));
237
- }
238
- for (float i = 0.0; i < ${samples}.0; i ++) {
239
- vec3 sampleNorm = normalize(n + roughnessFactor * roughnessFactor * 2.0 * normalize(vec3(rand() - 0.5, rand() - 0.5, rand() - 0.5)) * pow(rand(), 0.33) + distortionNormal);
240
- transmissionR = getIBLVolumeRefraction(
241
- sampleNorm, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90,
242
- pos, modelMatrix, viewMatrix, projectionMatrix, material.ior, material.thickness + thickness_smear * (i + randomCoords) / float(${samples}),
243
- material.attenuationColor, material.attenuationDistance
244
- ).r;
245
- transmissionG = getIBLVolumeRefraction(
246
- sampleNorm, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90,
247
- pos, modelMatrix, viewMatrix, projectionMatrix, material.ior * (1.0 + chromaticAberration * (i + randomCoords) / float(${samples})) , material.thickness + thickness_smear * (i + randomCoords) / float(${samples}),
248
- material.attenuationColor, material.attenuationDistance
249
- ).g;
250
- transmissionB = getIBLVolumeRefraction(
251
- sampleNorm, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90,
252
- pos, modelMatrix, viewMatrix, projectionMatrix, material.ior * (1.0 + 2.0 * chromaticAberration * (i + randomCoords) / float(${samples})), material.thickness + thickness_smear * (i + randomCoords) / float(${samples}),
253
- material.attenuationColor, material.attenuationDistance
254
- ).b;
255
- transmission.r += transmissionR;
256
- transmission.g += transmissionG;
257
- transmission.b += transmissionB;
258
- }
259
- transmission /= ${samples}.0;
260
- totalDiffuse = mix( totalDiffuse, transmission.rgb, material.transmission );\n`);
261
- };
262
- Object.keys(this.uniforms).forEach((name) => Object.defineProperty(this, name, {
263
- get: () => this.uniforms[name].value,
264
- set: (v) => (this.uniforms[name].value = v),
265
- }));
266
- }
267
- }
268
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaC10cmFuc21pc3Npb24tbWF0ZXJpYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9zaGFkZXJzL3NyYy9saWIvbWVzaC10cmFuc21pc3Npb24tbWF0ZXJpYWwvbWVzaC10cmFuc21pc3Npb24tbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFNL0IsTUFBTSxPQUFPLHdCQUF5QixTQUFRLEtBQUssQ0FBQyxvQkFBb0I7SUFtQnBFLFlBQVksT0FBTyxHQUFHLENBQUMsRUFBRSxtQkFBbUIsR0FBRyxLQUFLO1FBQ2hELEtBQUssRUFBRSxDQUFDO1FBRVIsSUFBSSxDQUFDLFFBQVEsR0FBRztZQUNaLG1CQUFtQixFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtZQUNwQywwRUFBMEU7WUFDMUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtZQUMxQiwwREFBMEQ7WUFDMUQsYUFBYSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtZQUMzQixlQUFlLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO1lBQ2hDLG9HQUFvRztZQUNwRyxTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO1lBQ3ZCLFNBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7WUFDdkIsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtZQUM3QixtQkFBbUIsRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7WUFDeEMsZ0JBQWdCLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3JELFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7WUFDMUIsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtZQUNsQixVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFO1lBQzFCLGVBQWUsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7WUFDL0Isa0JBQWtCLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFO1lBQ2xDLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7U0FDMUIsQ0FBQztRQUVGLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxNQUE2RCxFQUFFLEVBQUU7WUFDckYsTUFBTSxDQUFDLFFBQVEsR0FBRztnQkFDZCxHQUFHLE1BQU0sQ0FBQyxRQUFRO2dCQUNsQixHQUFHLElBQUksQ0FBQyxRQUFRO2FBQ25CLENBQUM7WUFFRixzREFBc0Q7WUFDdEQsSUFBSSxtQkFBbUI7Z0JBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDNUQsa0ZBQWtGO1lBQ2xGLHlDQUF5Qzs7Z0JBQ3BDLE1BQU0sQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLENBQUM7WUFFN0MsT0FBTztZQUNQLE1BQU0sQ0FBQyxjQUFjO2dCQUNqQixRQUFRLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7VUEyRmYsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDO1lBRXZCLHNCQUFzQjtZQUN0QixNQUFNLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUNqRCx1Q0FBdUM7WUFDdkMsUUFBUSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2lCQTRFUixDQUNKLENBQUM7WUFFRixpQkFBaUI7WUFDakIsTUFBTSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FDakQsa0NBQWtDO1lBQ2xDLFFBQVEsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7a0NBMEJTLE9BQU87Ozs7K0lBSXNHLE9BQU87Ozs7O3NJQUtoQixPQUFPLDBFQUEwRSxPQUFPOzs7OzsySUFLbkYsT0FBTyx5RUFBeUUsT0FBTzs7Ozs7OzswQkFPeE0sT0FBTzt1RkFDc0QsQ0FDMUUsQ0FBQztRQUNOLENBQUMsQ0FBQztRQUVGLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQ3hDLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRTtZQUM5QixHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUUsSUFBSSxDQUFDLFFBQXlCLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSztZQUN0RCxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUUsSUFBSSxDQUFDLFFBQXlCLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztTQUNoRSxDQUFDLENBQ0wsQ0FBQztJQUNOLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5ndEFueVJlY29yZCB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuXG5pbnRlcmZhY2UgVW5pZm9ybTxUPiB7XG4gICAgdmFsdWU6IFQ7XG59XG5cbmV4cG9ydCBjbGFzcyBNZXNoVHJhbnNtaXNzaW9uTWF0ZXJpYWwgZXh0ZW5kcyBUSFJFRS5NZXNoUGh5c2ljYWxNYXRlcmlhbCB7XG4gICAgdW5pZm9ybXM6IHtcbiAgICAgICAgY2hyb21hdGljQWJlcnJhdGlvbjogVW5pZm9ybTxudW1iZXI+O1xuICAgICAgICB0cmFuc21pc3Npb246IFVuaWZvcm08bnVtYmVyPjtcbiAgICAgICAgdHJhbnNtaXNzaW9uTWFwOiBVbmlmb3JtPFRIUkVFLlRleHR1cmUgfCBudWxsPjtcbiAgICAgICAgX3RyYW5zbWlzc2lvbjogVW5pZm9ybTxudW1iZXI+O1xuICAgICAgICB0aGlja25lc3M6IFVuaWZvcm08bnVtYmVyPjtcbiAgICAgICAgcm91Z2huZXNzOiBVbmlmb3JtPG51bWJlcj47XG4gICAgICAgIHRoaWNrbmVzc01hcDogVW5pZm9ybTxUSFJFRS5UZXh0dXJlIHwgbnVsbD47XG4gICAgICAgIGF0dGVudWF0aW9uRGlzdGFuY2U6IFVuaWZvcm08bnVtYmVyPjtcbiAgICAgICAgYXR0ZW51YXRpb25Db2xvcjogVW5pZm9ybTxUSFJFRS5Db2xvcj47XG4gICAgICAgIGFuaXNvdHJvcHk6IFVuaWZvcm08bnVtYmVyPjtcbiAgICAgICAgdGltZTogVW5pZm9ybTxudW1iZXI+O1xuICAgICAgICBkaXN0b3J0aW9uOiBVbmlmb3JtPG51bWJlcj47XG4gICAgICAgIGRpc3RvcnRpb25TY2FsZTogVW5pZm9ybTxudW1iZXI+O1xuICAgICAgICB0ZW1wb3JhbERpc3RvcnRpb246IFVuaWZvcm08bnVtYmVyPjtcbiAgICAgICAgYnVmZmVyOiBVbmlmb3JtPFRIUkVFLlRleHR1cmUgfCBudWxsPjtcbiAgICB9O1xuXG4gICAgY29uc3RydWN0b3Ioc2FtcGxlcyA9IDYsIHRyYW5zbWlzc2lvblNhbXBsZXIgPSBmYWxzZSkge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIHRoaXMudW5pZm9ybXMgPSB7XG4gICAgICAgICAgICBjaHJvbWF0aWNBYmVycmF0aW9uOiB7IHZhbHVlOiAwLjA1IH0sXG4gICAgICAgICAgICAvLyBUcmFuc21pc3Npb24gbXVzdCBhbHdheXMgYmUgMCwgdW5sZXNzIHRyYW5zbWlzc2lvblNhbXBsZXIgaXMgYmVpbmcgdXNlZFxuICAgICAgICAgICAgdHJhbnNtaXNzaW9uOiB7IHZhbHVlOiAwIH0sXG4gICAgICAgICAgICAvLyBJbnN0ZWFkIGEgd29ya2Fyb3VuZCBpcyB1c2VkLCBzZWUgYmVsb3cgZm9yIHJlYXNvbnMgd2h5XG4gICAgICAgICAgICBfdHJhbnNtaXNzaW9uOiB7IHZhbHVlOiAxIH0sXG4gICAgICAgICAgICB0cmFuc21pc3Npb25NYXA6IHsgdmFsdWU6IG51bGwgfSxcbiAgICAgICAgICAgIC8vIFJvdWdobmVzcyBpcyAxIGluIFRIUkVFLk1lc2hQaHlzaWNhbE1hdGVyaWFsIGJ1dCBpdCBtYWtlcyBsaXR0bGUgc2Vuc2UgaW4gYSB0cmFuc21pc3Npb24gbWF0ZXJpYWxcbiAgICAgICAgICAgIHJvdWdobmVzczogeyB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgdGhpY2tuZXNzOiB7IHZhbHVlOiAwIH0sXG4gICAgICAgICAgICB0aGlja25lc3NNYXA6IHsgdmFsdWU6IG51bGwgfSxcbiAgICAgICAgICAgIGF0dGVudWF0aW9uRGlzdGFuY2U6IHsgdmFsdWU6IEluZmluaXR5IH0sXG4gICAgICAgICAgICBhdHRlbnVhdGlvbkNvbG9yOiB7IHZhbHVlOiBuZXcgVEhSRUUuQ29sb3IoJ3doaXRlJykgfSxcbiAgICAgICAgICAgIGFuaXNvdHJvcHk6IHsgdmFsdWU6IDAuMSB9LFxuICAgICAgICAgICAgdGltZTogeyB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgZGlzdG9ydGlvbjogeyB2YWx1ZTogMC4wIH0sXG4gICAgICAgICAgICBkaXN0b3J0aW9uU2NhbGU6IHsgdmFsdWU6IDAuNSB9LFxuICAgICAgICAgICAgdGVtcG9yYWxEaXN0b3J0aW9uOiB7IHZhbHVlOiAwLjAgfSxcbiAgICAgICAgICAgIGJ1ZmZlcjogeyB2YWx1ZTogbnVsbCB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMub25CZWZvcmVDb21waWxlID0gKHNoYWRlcjogVEhSRUUuU2hhZGVyICYgeyBkZWZpbmVzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IH0pID0+IHtcbiAgICAgICAgICAgIHNoYWRlci51bmlmb3JtcyA9IHtcbiAgICAgICAgICAgICAgICAuLi5zaGFkZXIudW5pZm9ybXMsXG4gICAgICAgICAgICAgICAgLi4udGhpcy51bmlmb3JtcyxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIC8vIElmIHRoZSB0cmFuc21pc3Npb24gc2FtcGxlciBpcyBhY3RpdmUgaW5qZWN0IGEgZmxhZ1xuICAgICAgICAgICAgaWYgKHRyYW5zbWlzc2lvblNhbXBsZXIpIHNoYWRlci5kZWZpbmVzWydVU0VfU0FNUExFUiddID0gJyc7XG4gICAgICAgICAgICAvLyBPdGhlcndpc2Ugd2UgZG8gdXNlIHVzZSAudHJhbnNtaXNzaW9uIGFuZCBtdXN0IHRoZXJlZm9yZSBmb3JjZSBVU0VfVFJBTlNNSVNTSU9OXG4gICAgICAgICAgICAvLyBiZWNhdXNlIHRocmVlanMgd29uJ3QgaW5qZWN0IGl0IGZvciB1c1xuICAgICAgICAgICAgZWxzZSBzaGFkZXIuZGVmaW5lc1snVVNFX1RSQU5TTUlTU0lPTiddID0gJyc7XG5cbiAgICAgICAgICAgIC8vIEhlYWRcbiAgICAgICAgICAgIHNoYWRlci5mcmFnbWVudFNoYWRlciA9XG4gICAgICAgICAgICAgICAgLypnbHNsKi8gYFxuICAgICAgdW5pZm9ybSBmbG9hdCBjaHJvbWF0aWNBYmVycmF0aW9uO1xuICAgICAgdW5pZm9ybSBmbG9hdCBhbmlzb3Ryb3B5O1xuICAgICAgdW5pZm9ybSBmbG9hdCB0aW1lO1xuICAgICAgdW5pZm9ybSBmbG9hdCBkaXN0b3J0aW9uO1xuICAgICAgdW5pZm9ybSBmbG9hdCBkaXN0b3J0aW9uU2NhbGU7XG4gICAgICB1bmlmb3JtIGZsb2F0IHRlbXBvcmFsRGlzdG9ydGlvbjtcbiAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIGJ1ZmZlcjtcblxuICAgICAgdmVjMyByYW5kb20zKHZlYzMgYykge1xuICAgICAgICBmbG9hdCBqID0gNDA5Ni4wKnNpbihkb3QoYyx2ZWMzKDE3LjAsIDU5LjQsIDE1LjApKSk7XG4gICAgICAgIHZlYzMgcjtcbiAgICAgICAgci56ID0gZnJhY3QoNTEyLjAqaik7XG4gICAgICAgIGogKj0gLjEyNTtcbiAgICAgICAgci54ID0gZnJhY3QoNTEyLjAqaik7XG4gICAgICAgIGogKj0gLjEyNTtcbiAgICAgICAgci55ID0gZnJhY3QoNTEyLjAqaik7XG4gICAgICAgIHJldHVybiByLTAuNTtcbiAgICAgIH1cblxuICAgICAgZmxvYXQgc2VlZCA9IDAuMDtcbiAgICAgIHVpbnQgaGFzaCggdWludCB4ICkge1xuICAgICAgICB4ICs9ICggeCA8PCAxMHUgKTtcbiAgICAgICAgeCBePSAoIHggPj4gIDZ1ICk7XG4gICAgICAgIHggKz0gKCB4IDw8ICAzdSApO1xuICAgICAgICB4IF49ICggeCA+PiAxMXUgKTtcbiAgICAgICAgeCArPSAoIHggPDwgMTV1ICk7XG4gICAgICAgIHJldHVybiB4O1xuICAgICAgfVxuXG4gICAgICAvLyBDb21wb3VuZCB2ZXJzaW9ucyBvZiB0aGUgaGFzaGluZyBhbGdvcml0aG0gSSB3aGlwcGVkIHRvZ2V0aGVyLlxuICAgICAgdWludCBoYXNoKCB1dmVjMiB2ICkgeyByZXR1cm4gaGFzaCggdi54IF4gaGFzaCh2LnkpICAgICAgICAgICAgICAgICAgICAgICAgICk7IH1cbiAgICAgIHVpbnQgaGFzaCggdXZlYzMgdiApIHsgcmV0dXJuIGhhc2goIHYueCBeIGhhc2godi55KSBeIGhhc2godi56KSAgICAgICAgICAgICApOyB9XG4gICAgICB1aW50IGhhc2goIHV2ZWM0IHYgKSB7IHJldHVybiBoYXNoKCB2LnggXiBoYXNoKHYueSkgXiBoYXNoKHYueikgXiBoYXNoKHYudykgKTsgfVxuXG4gICAgICAvLyBDb25zdHJ1Y3QgYSBmbG9hdCB3aXRoIGhhbGYtb3BlbiByYW5nZSBbMDoxXSB1c2luZyBsb3cgMjMgYml0cy5cbiAgICAgIC8vIEFsbCB6ZXJvZXMgeWllbGRzIDAuMCwgYWxsIG9uZXMgeWllbGRzIHRoZSBuZXh0IHNtYWxsZXN0IHJlcHJlc2VudGFibGUgdmFsdWUgYmVsb3cgMS4wLlxuICAgICAgZmxvYXQgZmxvYXRDb25zdHJ1Y3QoIHVpbnQgbSApIHtcbiAgICAgICAgY29uc3QgdWludCBpZWVlTWFudGlzc2EgPSAweDAwN0ZGRkZGdTsgLy8gYmluYXJ5MzIgbWFudGlzc2EgYml0bWFza1xuICAgICAgICBjb25zdCB1aW50IGllZWVPbmUgICAgICA9IDB4M0Y4MDAwMDB1OyAvLyAxLjAgaW4gSUVFRSBiaW5hcnkzMlxuICAgICAgICBtICY9IGllZWVNYW50aXNzYTsgICAgICAgICAgICAgICAgICAgICAvLyBLZWVwIG9ubHkgbWFudGlzc2EgYml0cyAoZnJhY3Rpb25hbCBwYXJ0KVxuICAgICAgICBtIHw9IGllZWVPbmU7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgZnJhY3Rpb25hbCBwYXJ0IHRvIDEuMFxuICAgICAgICBmbG9hdCAgZiA9IHVpbnRCaXRzVG9GbG9hdCggbSApOyAgICAgICAvLyBSYW5nZSBbMToyXVxuICAgICAgICByZXR1cm4gZiAtIDEuMDsgICAgICAgICAgICAgICAgICAgICAgICAvLyBSYW5nZSBbMDoxXVxuICAgICAgfVxuXG4gICAgICAvLyBQc2V1ZG8tcmFuZG9tIHZhbHVlIGluIGhhbGYtb3BlbiByYW5nZSBbMDoxXS5cbiAgICAgIGZsb2F0IHJhbmRvbSggZmxvYXQgeCApIHsgcmV0dXJuIGZsb2F0Q29uc3RydWN0KGhhc2goZmxvYXRCaXRzVG9VaW50KHgpKSk7IH1cbiAgICAgIGZsb2F0IHJhbmRvbSggdmVjMiAgdiApIHsgcmV0dXJuIGZsb2F0Q29uc3RydWN0KGhhc2goZmxvYXRCaXRzVG9VaW50KHYpKSk7IH1cbiAgICAgIGZsb2F0IHJhbmRvbSggdmVjMyAgdiApIHsgcmV0dXJuIGZsb2F0Q29uc3RydWN0KGhhc2goZmxvYXRCaXRzVG9VaW50KHYpKSk7IH1cbiAgICAgIGZsb2F0IHJhbmRvbSggdmVjNCAgdiApIHsgcmV0dXJuIGZsb2F0Q29uc3RydWN0KGhhc2goZmxvYXRCaXRzVG9VaW50KHYpKSk7IH1cblxuICAgICAgZmxvYXQgcmFuZCgpIHtcbiAgICAgICAgZmxvYXQgcmVzdWx0ID0gcmFuZG9tKHZlYzMoZ2xfRnJhZ0Nvb3JkLnh5LCBzZWVkKSk7XG4gICAgICAgIHNlZWQgKz0gMS4wO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmbG9hdCBGMyA9ICAwLjMzMzMzMzM7XG4gICAgICBjb25zdCBmbG9hdCBHMyA9ICAwLjE2NjY2Njc7XG5cbiAgICAgIGZsb2F0IHNub2lzZSh2ZWMzIHApIHtcbiAgICAgICAgdmVjMyBzID0gZmxvb3IocCArIGRvdChwLCB2ZWMzKEYzKSkpO1xuICAgICAgICB2ZWMzIHggPSBwIC0gcyArIGRvdChzLCB2ZWMzKEczKSk7XG4gICAgICAgIHZlYzMgZSA9IHN0ZXAodmVjMygwLjApLCB4IC0geC55engpO1xuICAgICAgICB2ZWMzIGkxID0gZSooMS4wIC0gZS56eHkpO1xuICAgICAgICB2ZWMzIGkyID0gMS4wIC0gZS56eHkqKDEuMCAtIGUpO1xuICAgICAgICB2ZWMzIHgxID0geCAtIGkxICsgRzM7XG4gICAgICAgIHZlYzMgeDIgPSB4IC0gaTIgKyAyLjAqRzM7XG4gICAgICAgIHZlYzMgeDMgPSB4IC0gMS4wICsgMy4wKkczO1xuICAgICAgICB2ZWM0IHcsIGQ7XG4gICAgICAgIHcueCA9IGRvdCh4LCB4KTtcbiAgICAgICAgdy55ID0gZG90KHgxLCB4MSk7XG4gICAgICAgIHcueiA9IGRvdCh4MiwgeDIpO1xuICAgICAgICB3LncgPSBkb3QoeDMsIHgzKTtcbiAgICAgICAgdyA9IG1heCgwLjYgLSB3LCAwLjApO1xuICAgICAgICBkLnggPSBkb3QocmFuZG9tMyhzKSwgeCk7XG4gICAgICAgIGQueSA9IGRvdChyYW5kb20zKHMgKyBpMSksIHgxKTtcbiAgICAgICAgZC56ID0gZG90KHJhbmRvbTMocyArIGkyKSwgeDIpO1xuICAgICAgICBkLncgPSBkb3QocmFuZG9tMyhzICsgMS4wKSwgeDMpO1xuICAgICAgICB3ICo9IHc7XG4gICAgICAgIHcgKj0gdztcbiAgICAgICAgZCAqPSB3O1xuICAgICAgICByZXR1cm4gZG90KGQsIHZlYzQoNTIuMCkpO1xuICAgICAgfVxuXG4gICAgICBmbG9hdCBzbm9pc2VGcmFjdGFsKHZlYzMgbSkge1xuICAgICAgICByZXR1cm4gMC41MzMzMzMzKiBzbm9pc2UobSlcbiAgICAgICAgICAgICAgKzAuMjY2NjY2Nyogc25vaXNlKDIuMCptKVxuICAgICAgICAgICAgICArMC4xMzMzMzMzKiBzbm9pc2UoNC4wKm0pXG4gICAgICAgICAgICAgICswLjA2NjY2NjcqIHNub2lzZSg4LjAqbSk7XG4gICAgICB9XFxuYCArIHNoYWRlci5mcmFnbWVudFNoYWRlcjtcblxuICAgICAgICAgICAgLy8gUmVtb3ZlIHRyYW5zbWlzc2lvblxuICAgICAgICAgICAgc2hhZGVyLmZyYWdtZW50U2hhZGVyID0gc2hhZGVyLmZyYWdtZW50U2hhZGVyLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgJyNpbmNsdWRlIDx0cmFuc21pc3Npb25fcGFyc19mcmFnbWVudD4nLFxuICAgICAgICAgICAgICAgIC8qZ2xzbCovIGBcbiAgICAgICAgI2lmZGVmIFVTRV9UUkFOU01JU1NJT05cbiAgICAgICAgICAvLyBUcmFuc21pc3Npb24gY29kZSBpcyBiYXNlZCBvbiBnbFRGLVNhbXBsZXItVmlld2VyXG4gICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0tocm9ub3NHcm91cC9nbFRGLVNhbXBsZS1WaWV3ZXJcbiAgICAgICAgICB1bmlmb3JtIGZsb2F0IF90cmFuc21pc3Npb247XG4gICAgICAgICAgdW5pZm9ybSBmbG9hdCB0aGlja25lc3M7XG4gICAgICAgICAgdW5pZm9ybSBmbG9hdCBhdHRlbnVhdGlvbkRpc3RhbmNlO1xuICAgICAgICAgIHVuaWZvcm0gdmVjMyBhdHRlbnVhdGlvbkNvbG9yO1xuICAgICAgICAgICNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OTUFQXG4gICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCB0cmFuc21pc3Npb25NYXA7XG4gICAgICAgICAgI2VuZGlmXG4gICAgICAgICAgI2lmZGVmIFVTRV9USElDS05FU1NNQVBcbiAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHRoaWNrbmVzc01hcDtcbiAgICAgICAgICAjZW5kaWZcbiAgICAgICAgICB1bmlmb3JtIHZlYzIgdHJhbnNtaXNzaW9uU2FtcGxlclNpemU7XG4gICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgdHJhbnNtaXNzaW9uU2FtcGxlck1hcDtcbiAgICAgICAgICB1bmlmb3JtIG1hdDQgbW9kZWxNYXRyaXg7XG4gICAgICAgICAgdW5pZm9ybSBtYXQ0IHByb2plY3Rpb25NYXRyaXg7XG4gICAgICAgICAgdmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuICAgICAgICAgIHZlYzMgZ2V0Vm9sdW1lVHJhbnNtaXNzaW9uUmF5KCBjb25zdCBpbiB2ZWMzIG4sIGNvbnN0IGluIHZlYzMgdiwgY29uc3QgaW4gZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBpbiBmbG9hdCBpb3IsIGNvbnN0IGluIG1hdDQgbW9kZWxNYXRyaXggKSB7XG4gICAgICAgICAgICAvLyBEaXJlY3Rpb24gb2YgcmVmcmFjdGVkIGxpZ2h0LlxuICAgICAgICAgICAgdmVjMyByZWZyYWN0aW9uVmVjdG9yID0gcmVmcmFjdCggLSB2LCBub3JtYWxpemUoIG4gKSwgMS4wIC8gaW9yICk7XG4gICAgICAgICAgICAvLyBDb21wdXRlIHJvdGF0aW9uLWluZGVwZW5kYW50IHNjYWxpbmcgb2YgdGhlIG1vZGVsIG1hdHJpeC5cbiAgICAgICAgICAgIHZlYzMgbW9kZWxTY2FsZTtcbiAgICAgICAgICAgIG1vZGVsU2NhbGUueCA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDAgXS54eXogKSApO1xuICAgICAgICAgICAgbW9kZWxTY2FsZS55ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMSBdLnh5eiApICk7XG4gICAgICAgICAgICBtb2RlbFNjYWxlLnogPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAyIF0ueHl6ICkgKTtcbiAgICAgICAgICAgIC8vIFRoZSB0aGlja25lc3MgaXMgc3BlY2lmaWVkIGluIGxvY2FsIHNwYWNlLlxuICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZSggcmVmcmFjdGlvblZlY3RvciApICogdGhpY2tuZXNzICogbW9kZWxTY2FsZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZmxvYXQgYXBwbHlJb3JUb1JvdWdobmVzcyggY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBjb25zdCBpbiBmbG9hdCBpb3IgKSB7XG4gICAgICAgICAgICAvLyBTY2FsZSByb3VnaG5lc3Mgd2l0aCBJT1Igc28gdGhhdCBhbiBJT1Igb2YgMS4wIHJlc3VsdHMgaW4gbm8gbWljcm9mYWNldCByZWZyYWN0aW9uIGFuZFxuICAgICAgICAgICAgLy8gYW4gSU9SIG9mIDEuNSByZXN1bHRzIGluIHRoZSBkZWZhdWx0IGFtb3VudCBvZiBtaWNyb2ZhY2V0IHJlZnJhY3Rpb24uXG4gICAgICAgICAgICByZXR1cm4gcm91Z2huZXNzICogY2xhbXAoIGlvciAqIDIuMCAtIDIuMCwgMC4wLCAxLjAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmVjNCBnZXRUcmFuc21pc3Npb25TYW1wbGUoIGNvbnN0IGluIHZlYzIgZnJhZ0Nvb3JkLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIGZsb2F0IGlvciApIHtcbiAgICAgICAgICAgIGZsb2F0IGZyYW1lYnVmZmVyTG9kID0gbG9nMiggdHJhbnNtaXNzaW9uU2FtcGxlclNpemUueCApICogYXBwbHlJb3JUb1JvdWdobmVzcyggcm91Z2huZXNzLCBpb3IgKTtcbiAgICAgICAgICAgICNpZmRlZiBVU0VfU0FNUExFUlxuICAgICAgICAgICAgICAjaWZkZWYgdGV4dHVyZTJETG9kRVhUXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRleHR1cmUyRExvZEVYVCh0cmFuc21pc3Npb25TYW1wbGVyTWFwLCBmcmFnQ29vcmQueHksIGZyYW1lYnVmZmVyTG9kKTtcbiAgICAgICAgICAgICAgI2Vsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gdGV4dHVyZTJEKHRyYW5zbWlzc2lvblNhbXBsZXJNYXAsIGZyYWdDb29yZC54eSwgZnJhbWVidWZmZXJMb2QpO1xuICAgICAgICAgICAgICAjZW5kaWZcbiAgICAgICAgICAgICNlbHNlXG4gICAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlMkQoYnVmZmVyLCBmcmFnQ29vcmQueHkpO1xuICAgICAgICAgICAgI2VuZGlmXG4gICAgICAgICAgfVxuICAgICAgICAgIHZlYzMgYXBwbHlWb2x1bWVBdHRlbnVhdGlvbiggY29uc3QgaW4gdmVjMyByYWRpYW5jZSwgY29uc3QgaW4gZmxvYXQgdHJhbnNtaXNzaW9uRGlzdGFuY2UsIGNvbnN0IGluIHZlYzMgYXR0ZW51YXRpb25Db2xvciwgY29uc3QgaW4gZmxvYXQgYXR0ZW51YXRpb25EaXN0YW5jZSApIHtcbiAgICAgICAgICAgIGlmICggaXNpbmYoIGF0dGVudWF0aW9uRGlzdGFuY2UgKSApIHtcbiAgICAgICAgICAgICAgLy8gQXR0ZW51YXRpb24gZGlzdGFuY2UgaXMgK+KIniwgaS5lLiB0aGUgdHJhbnNtaXR0ZWQgY29sb3IgaXMgbm90IGF0dGVudWF0ZWQgYXQgYWxsLlxuICAgICAgICAgICAgICByZXR1cm4gcmFkaWFuY2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBDb21wdXRlIGxpZ2h0IGF0dGVudWF0aW9uIHVzaW5nIEJlZXIncyBsYXcuXG4gICAgICAgICAgICAgIHZlYzMgYXR0ZW51YXRpb25Db2VmZmljaWVudCA9IC1sb2coIGF0dGVudWF0aW9uQ29sb3IgKSAvIGF0dGVudWF0aW9uRGlzdGFuY2U7XG4gICAgICAgICAgICAgIHZlYzMgdHJhbnNtaXR0YW5jZSA9IGV4cCggLSBhdHRlbnVhdGlvbkNvZWZmaWNpZW50ICogdHJhbnNtaXNzaW9uRGlzdGFuY2UgKTsgLy8gQmVlcidzIGxhd1xuICAgICAgICAgICAgICByZXR1cm4gdHJhbnNtaXR0YW5jZSAqIHJhZGlhbmNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB2ZWM0IGdldElCTFZvbHVtZVJlZnJhY3Rpb24oIGNvbnN0IGluIHZlYzMgbiwgY29uc3QgaW4gdmVjMyB2LCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIHZlYzMgZGlmZnVzZUNvbG9yLFxuICAgICAgICAgICAgY29uc3QgaW4gdmVjMyBzcGVjdWxhckNvbG9yLCBjb25zdCBpbiBmbG9hdCBzcGVjdWxhckY5MCwgY29uc3QgaW4gdmVjMyBwb3NpdGlvbiwgY29uc3QgaW4gbWF0NCBtb2RlbE1hdHJpeCxcbiAgICAgICAgICAgIGNvbnN0IGluIG1hdDQgdmlld01hdHJpeCwgY29uc3QgaW4gbWF0NCBwcm9qTWF0cml4LCBjb25zdCBpbiBmbG9hdCBpb3IsIGNvbnN0IGluIGZsb2F0IHRoaWNrbmVzcyxcbiAgICAgICAgICAgIGNvbnN0IGluIHZlYzMgYXR0ZW51YXRpb25Db2xvciwgY29uc3QgaW4gZmxvYXQgYXR0ZW51YXRpb25EaXN0YW5jZSApIHtcbiAgICAgICAgICAgIHZlYzMgdHJhbnNtaXNzaW9uUmF5ID0gZ2V0Vm9sdW1lVHJhbnNtaXNzaW9uUmF5KCBuLCB2LCB0aGlja25lc3MsIGlvciwgbW9kZWxNYXRyaXggKTtcbiAgICAgICAgICAgIHZlYzMgcmVmcmFjdGVkUmF5RXhpdCA9IHBvc2l0aW9uICsgdHJhbnNtaXNzaW9uUmF5O1xuICAgICAgICAgICAgLy8gUHJvamVjdCByZWZyYWN0ZWQgdmVjdG9yIG9uIHRoZSBmcmFtZWJ1ZmZlciwgd2hpbGUgbWFwcGluZyB0byBub3JtYWxpemVkIGRldmljZSBjb29yZGluYXRlcy5cbiAgICAgICAgICAgIHZlYzQgbmRjUG9zID0gcHJvak1hdHJpeCAqIHZpZXdNYXRyaXggKiB2ZWM0KCByZWZyYWN0ZWRSYXlFeGl0LCAxLjAgKTtcbiAgICAgICAgICAgIHZlYzIgcmVmcmFjdGlvbkNvb3JkcyA9IG5kY1Bvcy54eSAvIG5kY1Bvcy53O1xuICAgICAgICAgICAgcmVmcmFjdGlvbkNvb3JkcyArPSAxLjA7XG4gICAgICAgICAgICByZWZyYWN0aW9uQ29vcmRzIC89IDIuMDtcbiAgICAgICAgICAgIC8vIFNhbXBsZSBmcmFtZWJ1ZmZlciB0byBnZXQgcGl4ZWwgdGhlIHJlZnJhY3RlZCByYXkgaGl0cy5cbiAgICAgICAgICAgIHZlYzQgdHJhbnNtaXR0ZWRMaWdodCA9IGdldFRyYW5zbWlzc2lvblNhbXBsZSggcmVmcmFjdGlvbkNvb3Jkcywgcm91Z2huZXNzLCBpb3IgKTtcbiAgICAgICAgICAgIHZlYzMgYXR0ZW51YXRlZENvbG9yID0gYXBwbHlWb2x1bWVBdHRlbnVhdGlvbiggdHJhbnNtaXR0ZWRMaWdodC5yZ2IsIGxlbmd0aCggdHJhbnNtaXNzaW9uUmF5ICksIGF0dGVudWF0aW9uQ29sb3IsIGF0dGVudWF0aW9uRGlzdGFuY2UgKTtcbiAgICAgICAgICAgIC8vIEdldCB0aGUgc3BlY3VsYXIgY29tcG9uZW50LlxuICAgICAgICAgICAgdmVjMyBGID0gRW52aXJvbm1lbnRCUkRGKCBuLCB2LCBzcGVjdWxhckNvbG9yLCBzcGVjdWxhckY5MCwgcm91Z2huZXNzICk7XG4gICAgICAgICAgICByZXR1cm4gdmVjNCggKCAxLjAgLSBGICkgKiBhdHRlbnVhdGVkQ29sb3IgKiBkaWZmdXNlQ29sb3IsIHRyYW5zbWl0dGVkTGlnaHQuYSApO1xuICAgICAgICAgIH1cbiAgICAgICAgI2VuZGlmXFxuYFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8gQWRkIHJlZnJhY3Rpb25cbiAgICAgICAgICAgIHNoYWRlci5mcmFnbWVudFNoYWRlciA9IHNoYWRlci5mcmFnbWVudFNoYWRlci5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICcjaW5jbHVkZSA8dHJhbnNtaXNzaW9uX2ZyYWdtZW50PicsXG4gICAgICAgICAgICAgICAgLypnbHNsKi8gYFxuICAgICAgICAvLyBJbXByb3ZlIHRoZSByZWZyYWN0aW9uIHRvIHVzZSB0aGUgd29ybGQgcG9zXG4gICAgICAgIG1hdGVyaWFsLnRyYW5zbWlzc2lvbiA9IF90cmFuc21pc3Npb247XG4gICAgICAgIG1hdGVyaWFsLnRyYW5zbWlzc2lvbkFscGhhID0gMS4wO1xuICAgICAgICBtYXRlcmlhbC50aGlja25lc3MgPSB0aGlja25lc3M7XG4gICAgICAgIG1hdGVyaWFsLmF0dGVudWF0aW9uRGlzdGFuY2UgPSBhdHRlbnVhdGlvbkRpc3RhbmNlO1xuICAgICAgICBtYXRlcmlhbC5hdHRlbnVhdGlvbkNvbG9yID0gYXR0ZW51YXRpb25Db2xvcjtcbiAgICAgICAgI2lmZGVmIFVTRV9UUkFOU01JU1NJT05NQVBcbiAgICAgICAgICBtYXRlcmlhbC50cmFuc21pc3Npb24gKj0gdGV4dHVyZTJEKCB0cmFuc21pc3Npb25NYXAsIHZVdiApLnI7XG4gICAgICAgICNlbmRpZlxuICAgICAgICAjaWZkZWYgVVNFX1RISUNLTkVTU01BUFxuICAgICAgICAgIG1hdGVyaWFsLnRoaWNrbmVzcyAqPSB0ZXh0dXJlMkQoIHRoaWNrbmVzc01hcCwgdlV2ICkuZztcbiAgICAgICAgI2VuZGlmXG5cbiAgICAgICAgdmVjMyBwb3MgPSB2V29ybGRQb3NpdGlvbjtcbiAgICAgICAgdmVjMyB2ID0gbm9ybWFsaXplKCBjYW1lcmFQb3NpdGlvbiAtIHBvcyApO1xuICAgICAgICB2ZWMzIG4gPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTtcbiAgICAgICAgdmVjMyB0cmFuc21pc3Npb24gPSB2ZWMzKDAuMCk7XG4gICAgICAgIGZsb2F0IHRyYW5zbWlzc2lvblIsIHRyYW5zbWlzc2lvbkIsIHRyYW5zbWlzc2lvbkc7XG4gICAgICAgIGZsb2F0IHJhbmRvbUNvb3JkcyA9IHJhbmQoKTtcbiAgICAgICAgZmxvYXQgdGhpY2tuZXNzX3NtZWFyID0gdGhpY2tuZXNzICogbWF4KHBvdyhyb3VnaG5lc3NGYWN0b3IsIDAuMzMpLCBhbmlzb3Ryb3B5KTtcbiAgICAgICAgdmVjMyBkaXN0b3J0aW9uTm9ybWFsID0gdmVjMygwLjApO1xuICAgICAgICB2ZWMzIHRlbXBvcmFsT2Zmc2V0ID0gdmVjMyh0aW1lLCAtdGltZSwgLXRpbWUpICogdGVtcG9yYWxEaXN0b3J0aW9uO1xuICAgICAgICBpZiAoZGlzdG9ydGlvbiA+IDAuMCkge1xuICAgICAgICAgIGRpc3RvcnRpb25Ob3JtYWwgPSBkaXN0b3J0aW9uICogdmVjMyhzbm9pc2VGcmFjdGFsKHZlYzMoKHBvcyAqIGRpc3RvcnRpb25TY2FsZSArIHRlbXBvcmFsT2Zmc2V0KSkpLCBzbm9pc2VGcmFjdGFsKHZlYzMocG9zLnp4eSAqIGRpc3RvcnRpb25TY2FsZSAtIHRlbXBvcmFsT2Zmc2V0KSksIHNub2lzZUZyYWN0YWwodmVjMyhwb3MueXh6ICogZGlzdG9ydGlvblNjYWxlICsgdGVtcG9yYWxPZmZzZXQpKSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChmbG9hdCBpID0gMC4wOyBpIDwgJHtzYW1wbGVzfS4wOyBpICsrKSB7XG4gICAgICAgICAgdmVjMyBzYW1wbGVOb3JtID0gbm9ybWFsaXplKG4gKyByb3VnaG5lc3NGYWN0b3IgKiByb3VnaG5lc3NGYWN0b3IgKiAyLjAgKiBub3JtYWxpemUodmVjMyhyYW5kKCkgLSAwLjUsIHJhbmQoKSAtIDAuNSwgcmFuZCgpIC0gMC41KSkgKiBwb3cocmFuZCgpLCAwLjMzKSArIGRpc3RvcnRpb25Ob3JtYWwpO1xuICAgICAgICAgIHRyYW5zbWlzc2lvblIgPSBnZXRJQkxWb2x1bWVSZWZyYWN0aW9uKFxuICAgICAgICAgICAgc2FtcGxlTm9ybSwgdiwgbWF0ZXJpYWwucm91Z2huZXNzLCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLFxuICAgICAgICAgICAgcG9zLCBtb2RlbE1hdHJpeCwgdmlld01hdHJpeCwgcHJvamVjdGlvbk1hdHJpeCwgbWF0ZXJpYWwuaW9yLCBtYXRlcmlhbC50aGlja25lc3MgICsgdGhpY2tuZXNzX3NtZWFyICogKGkgKyByYW5kb21Db29yZHMpIC8gZmxvYXQoJHtzYW1wbGVzfSksXG4gICAgICAgICAgICBtYXRlcmlhbC5hdHRlbnVhdGlvbkNvbG9yLCBtYXRlcmlhbC5hdHRlbnVhdGlvbkRpc3RhbmNlXG4gICAgICAgICAgKS5yO1xuICAgICAgICAgIHRyYW5zbWlzc2lvbkcgPSBnZXRJQkxWb2x1bWVSZWZyYWN0aW9uKFxuICAgICAgICAgICAgc2FtcGxlTm9ybSwgdiwgbWF0ZXJpYWwucm91Z2huZXNzLCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLFxuICAgICAgICAgICAgcG9zLCBtb2RlbE1hdHJpeCwgdmlld01hdHJpeCwgcHJvamVjdGlvbk1hdHJpeCwgbWF0ZXJpYWwuaW9yICAqICgxLjAgKyBjaHJvbWF0aWNBYmVycmF0aW9uICogKGkgKyByYW5kb21Db29yZHMpIC8gZmxvYXQoJHtzYW1wbGVzfSkpICwgbWF0ZXJpYWwudGhpY2tuZXNzICsgdGhpY2tuZXNzX3NtZWFyICogKGkgKyByYW5kb21Db29yZHMpIC8gZmxvYXQoJHtzYW1wbGVzfSksXG4gICAgICAgICAgICBtYXRlcmlhbC5hdHRlbnVhdGlvbkNvbG9yLCBtYXRlcmlhbC5hdHRlbnVhdGlvbkRpc3RhbmNlXG4gICAgICAgICAgKS5nO1xuICAgICAgICAgIHRyYW5zbWlzc2lvbkIgPSBnZXRJQkxWb2x1bWVSZWZyYWN0aW9uKFxuICAgICAgICAgICAgc2FtcGxlTm9ybSwgdiwgbWF0ZXJpYWwucm91Z2huZXNzLCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLFxuICAgICAgICAgICAgcG9zLCBtb2RlbE1hdHJpeCwgdmlld01hdHJpeCwgcHJvamVjdGlvbk1hdHJpeCwgbWF0ZXJpYWwuaW9yICogKDEuMCArIDIuMCAqIGNocm9tYXRpY0FiZXJyYXRpb24gKiAoaSArIHJhbmRvbUNvb3JkcykgLyBmbG9hdCgke3NhbXBsZXN9KSksIG1hdGVyaWFsLnRoaWNrbmVzcyArIHRoaWNrbmVzc19zbWVhciAqIChpICsgcmFuZG9tQ29vcmRzKSAvIGZsb2F0KCR7c2FtcGxlc30pLFxuICAgICAgICAgICAgbWF0ZXJpYWwuYXR0ZW51YXRpb25Db2xvciwgbWF0ZXJpYWwuYXR0ZW51YXRpb25EaXN0YW5jZVxuICAgICAgICAgICkuYjtcbiAgICAgICAgICB0cmFuc21pc3Npb24uciArPSB0cmFuc21pc3Npb25SO1xuICAgICAgICAgIHRyYW5zbWlzc2lvbi5nICs9IHRyYW5zbWlzc2lvbkc7XG4gICAgICAgICAgdHJhbnNtaXNzaW9uLmIgKz0gdHJhbnNtaXNzaW9uQjtcbiAgICAgICAgfVxuICAgICAgICB0cmFuc21pc3Npb24gLz0gJHtzYW1wbGVzfS4wO1xuICAgICAgICB0b3RhbERpZmZ1c2UgPSBtaXgoIHRvdGFsRGlmZnVzZSwgdHJhbnNtaXNzaW9uLnJnYiwgbWF0ZXJpYWwudHJhbnNtaXNzaW9uICk7XFxuYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfTtcblxuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLnVuaWZvcm1zKS5mb3JFYWNoKChuYW1lKSA9PlxuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIG5hbWUsIHtcbiAgICAgICAgICAgICAgICBnZXQ6ICgpID0+ICh0aGlzLnVuaWZvcm1zIGFzIE5ndEFueVJlY29yZClbbmFtZV0udmFsdWUsXG4gICAgICAgICAgICAgICAgc2V0OiAodikgPT4gKCh0aGlzLnVuaWZvcm1zIGFzIE5ndEFueVJlY29yZClbbmFtZV0udmFsdWUgPSB2KSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxufVxuIl19
@@ -1,37 +0,0 @@
1
- import * as THREE from 'three';
2
- export class MeshWobbleMaterial extends THREE.MeshStandardMaterial {
3
- constructor(parameters = {}) {
4
- super(parameters);
5
- this.setValues(parameters);
6
- this._time = { value: 0 };
7
- this._factor = { value: 1 };
8
- }
9
- onBeforeCompile(shader) {
10
- shader.uniforms['time'] = this._time;
11
- shader.uniforms['factor'] = this._factor;
12
- shader.vertexShader = `
13
- uniform float time;
14
- uniform float factor;
15
- ${shader.vertexShader}
16
- `;
17
- shader.vertexShader = shader.vertexShader.replace('#include <begin_vertex>', `float theta = sin( time + position.y ) / 2.0 * factor;
18
- float c = cos( theta );
19
- float s = sin( theta );
20
- mat3 m = mat3( c, 0, s, 0, 1, 0, -s, 0, c );
21
- vec3 transformed = vec3( position ) * m;
22
- vNormal = vNormal * m;`);
23
- }
24
- get time() {
25
- return this._time.value;
26
- }
27
- set time(v) {
28
- this._time.value = v;
29
- }
30
- get factor() {
31
- return this._factor.value;
32
- }
33
- set factor(v) {
34
- this._factor.value = v;
35
- }
36
- }
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaC13b2JibGUtbWF0ZXJpYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9zaGFkZXJzL3NyYy9saWIvbWVzaC13b2JibGUtbWF0ZXJpYWwvbWVzaC13b2JibGUtbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFNL0IsTUFBTSxPQUFPLGtCQUFtQixTQUFRLEtBQUssQ0FBQyxvQkFBb0I7SUFJOUQsWUFBWSxhQUFtRCxFQUFFO1FBQzdELEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNsQixJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRVEsZUFBZSxDQUFDLE1BQW9CO1FBQ3pDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUNyQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFFekMsTUFBTSxDQUFDLFlBQVksR0FBRzs7O1FBR3RCLE1BQU0sQ0FBQyxZQUFZO0tBQ3RCLENBQUM7UUFDRSxNQUFNLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUM3Qyx5QkFBeUIsRUFDekI7Ozs7OytCQUttQixDQUN0QixDQUFDO0lBQ04sQ0FBQztJQUVELElBQUksSUFBSTtRQUNKLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQUksSUFBSSxDQUFDLENBQUM7UUFDTixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVELElBQUksTUFBTTtRQUNOLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQUksTUFBTSxDQUFDLENBQUM7UUFDUixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDM0IsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuXG5pbnRlcmZhY2UgVW5pZm9ybTxUPiB7XG4gICAgdmFsdWU6IFQ7XG59XG5cbmV4cG9ydCBjbGFzcyBNZXNoV29iYmxlTWF0ZXJpYWwgZXh0ZW5kcyBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbCB7XG4gICAgX3RpbWU6IFVuaWZvcm08bnVtYmVyPjtcbiAgICBfZmFjdG9yOiBVbmlmb3JtPG51bWJlcj47XG5cbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzOiBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbFBhcmFtZXRlcnMgPSB7fSkge1xuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcbiAgICAgICAgdGhpcy5zZXRWYWx1ZXMocGFyYW1ldGVycyk7XG4gICAgICAgIHRoaXMuX3RpbWUgPSB7IHZhbHVlOiAwIH07XG4gICAgICAgIHRoaXMuX2ZhY3RvciA9IHsgdmFsdWU6IDEgfTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBvbkJlZm9yZUNvbXBpbGUoc2hhZGVyOiBUSFJFRS5TaGFkZXIpIHtcbiAgICAgICAgc2hhZGVyLnVuaWZvcm1zWyd0aW1lJ10gPSB0aGlzLl90aW1lO1xuICAgICAgICBzaGFkZXIudW5pZm9ybXNbJ2ZhY3RvciddID0gdGhpcy5fZmFjdG9yO1xuXG4gICAgICAgIHNoYWRlci52ZXJ0ZXhTaGFkZXIgPSBgXG4gICAgICB1bmlmb3JtIGZsb2F0IHRpbWU7XG4gICAgICB1bmlmb3JtIGZsb2F0IGZhY3RvcjtcbiAgICAgICR7c2hhZGVyLnZlcnRleFNoYWRlcn1cbiAgICBgO1xuICAgICAgICBzaGFkZXIudmVydGV4U2hhZGVyID0gc2hhZGVyLnZlcnRleFNoYWRlci5yZXBsYWNlKFxuICAgICAgICAgICAgJyNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+JyxcbiAgICAgICAgICAgIGBmbG9hdCB0aGV0YSA9IHNpbiggdGltZSArIHBvc2l0aW9uLnkgKSAvIDIuMCAqIGZhY3RvcjtcbiAgICAgICAgZmxvYXQgYyA9IGNvcyggdGhldGEgKTtcbiAgICAgICAgZmxvYXQgcyA9IHNpbiggdGhldGEgKTtcbiAgICAgICAgbWF0MyBtID0gbWF0MyggYywgMCwgcywgMCwgMSwgMCwgLXMsIDAsIGMgKTtcbiAgICAgICAgdmVjMyB0cmFuc2Zvcm1lZCA9IHZlYzMoIHBvc2l0aW9uICkgKiBtO1xuICAgICAgICB2Tm9ybWFsID0gdk5vcm1hbCAqIG07YFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldCB0aW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGltZS52YWx1ZTtcbiAgICB9XG5cbiAgICBzZXQgdGltZSh2KSB7XG4gICAgICAgIHRoaXMuX3RpbWUudmFsdWUgPSB2O1xuICAgIH1cblxuICAgIGdldCBmYWN0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mYWN0b3IudmFsdWU7XG4gICAgfVxuXG4gICAgc2V0IGZhY3Rvcih2KSB7XG4gICAgICAgIHRoaXMuX2ZhY3Rvci52YWx1ZSA9IHY7XG4gICAgfVxufVxuIl19
@@ -1,34 +0,0 @@
1
- import * as THREE from 'three';
2
- export function shaderMaterial(uniforms, vertexShader, fragmentShader, onInit) {
3
- const material = class extends THREE.ShaderMaterial {
4
- constructor(parameters = {}) {
5
- const entries = Object.entries(uniforms);
6
- // Create unforms and shaders
7
- super({
8
- uniforms: entries.reduce((acc, [name, value]) => {
9
- const uniform = THREE.UniformsUtils.clone({ [name]: { value } });
10
- return {
11
- ...acc,
12
- ...uniform,
13
- };
14
- }, {}),
15
- vertexShader,
16
- fragmentShader,
17
- });
18
- this.key = '';
19
- // Create getter/setters
20
- entries.forEach(([name]) => Object.defineProperty(this, name, {
21
- get: () => this.uniforms[name].value,
22
- set: (v) => (this.uniforms[name].value = v),
23
- }));
24
- // Assign parameters, this might include uniforms
25
- Object.assign(this, parameters);
26
- // Call onInit
27
- if (onInit)
28
- onInit(this);
29
- }
30
- };
31
- material.key = THREE.MathUtils.generateUUID();
32
- return material;
33
- }
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhZGVyLW1hdGVyaWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlLXNvYmEvc2hhZGVycy9zcmMvbGliL3NoYWRlci1tYXRlcmlhbC9zaGFkZXItbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFL0IsTUFBTSxVQUFVLGNBQWMsQ0FDMUIsUUFpQkMsRUFDRCxZQUFvQixFQUNwQixjQUFzQixFQUN0QixNQUFrRDtJQUVsRCxNQUFNLFFBQVEsR0FBRyxLQUFNLFNBQVEsS0FBSyxDQUFDLGNBQWM7UUFFL0MsWUFBWSxVQUFVLEdBQUcsRUFBRTtZQUN2QixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3pDLDZCQUE2QjtZQUM3QixLQUFLLENBQUM7Z0JBQ0YsUUFBUSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtvQkFDNUMsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUNqRSxPQUFPO3dCQUNILEdBQUcsR0FBRzt3QkFDTixHQUFHLE9BQU87cUJBQ2IsQ0FBQztnQkFDTixDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNOLFlBQVk7Z0JBQ1osY0FBYzthQUNqQixDQUFDLENBQUM7WUFkQSxRQUFHLEdBQUcsRUFBRSxDQUFDO1lBZVosd0JBQXdCO1lBQ3hCLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FDdkIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFO2dCQUM5QixHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLO2dCQUNwQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO2FBQzlDLENBQUMsQ0FDTCxDQUFDO1lBRUYsaURBQWlEO1lBQ2pELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQ2hDLGNBQWM7WUFDZCxJQUFJLE1BQU07Z0JBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLENBQUM7S0FDd0QsQ0FBQztJQUM5RCxRQUFRLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDOUMsT0FBTyxRQUFRLENBQUM7QUFDcEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcblxuZXhwb3J0IGZ1bmN0aW9uIHNoYWRlck1hdGVyaWFsKFxuICAgIHVuaWZvcm1zOiB7XG4gICAgICAgIFtuYW1lOiBzdHJpbmddOlxuICAgICAgICAgICAgfCBUSFJFRS5DdWJlVGV4dHVyZVxuICAgICAgICAgICAgfCBUSFJFRS5UZXh0dXJlXG4gICAgICAgICAgICB8IEludDMyQXJyYXlcbiAgICAgICAgICAgIHwgRmxvYXQzMkFycmF5XG4gICAgICAgICAgICB8IFRIUkVFLk1hdHJpeDRcbiAgICAgICAgICAgIHwgVEhSRUUuTWF0cml4M1xuICAgICAgICAgICAgfCBUSFJFRS5RdWF0ZXJuaW9uXG4gICAgICAgICAgICB8IFRIUkVFLlZlY3RvcjRcbiAgICAgICAgICAgIHwgVEhSRUUuVmVjdG9yM1xuICAgICAgICAgICAgfCBUSFJFRS5WZWN0b3IyXG4gICAgICAgICAgICB8IFRIUkVFLkNvbG9yXG4gICAgICAgICAgICB8IG51bWJlclxuICAgICAgICAgICAgfCBib29sZWFuXG4gICAgICAgICAgICB8IEFycmF5PGFueT5cbiAgICAgICAgICAgIHwgbnVsbDtcbiAgICB9LFxuICAgIHZlcnRleFNoYWRlcjogc3RyaW5nLFxuICAgIGZyYWdtZW50U2hhZGVyOiBzdHJpbmcsXG4gICAgb25Jbml0PzogKG1hdGVyaWFsPzogVEhSRUUuU2hhZGVyTWF0ZXJpYWwpID0+IHZvaWRcbikge1xuICAgIGNvbnN0IG1hdGVyaWFsID0gY2xhc3MgZXh0ZW5kcyBUSFJFRS5TaGFkZXJNYXRlcmlhbCB7XG4gICAgICAgIHB1YmxpYyBrZXkgPSAnJztcbiAgICAgICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XG4gICAgICAgICAgICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXModW5pZm9ybXMpO1xuICAgICAgICAgICAgLy8gQ3JlYXRlIHVuZm9ybXMgYW5kIHNoYWRlcnNcbiAgICAgICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtczogZW50cmllcy5yZWR1Y2UoKGFjYywgW25hbWUsIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB1bmlmb3JtID0gVEhSRUUuVW5pZm9ybXNVdGlscy5jbG9uZSh7IFtuYW1lXTogeyB2YWx1ZSB9IH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYWNjLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4udW5pZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9LCB7fSksXG4gICAgICAgICAgICAgICAgdmVydGV4U2hhZGVyLFxuICAgICAgICAgICAgICAgIGZyYWdtZW50U2hhZGVyLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBDcmVhdGUgZ2V0dGVyL3NldHRlcnNcbiAgICAgICAgICAgIGVudHJpZXMuZm9yRWFjaCgoW25hbWVdKSA9PlxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBuYW1lLCB7XG4gICAgICAgICAgICAgICAgICAgIGdldDogKCkgPT4gdGhpcy51bmlmb3Jtc1tuYW1lXS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgc2V0OiAodikgPT4gKHRoaXMudW5pZm9ybXNbbmFtZV0udmFsdWUgPSB2KSxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8gQXNzaWduIHBhcmFtZXRlcnMsIHRoaXMgbWlnaHQgaW5jbHVkZSB1bmlmb3Jtc1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBwYXJhbWV0ZXJzKTtcbiAgICAgICAgICAgIC8vIENhbGwgb25Jbml0XG4gICAgICAgICAgICBpZiAob25Jbml0KSBvbkluaXQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9IGFzIHVua25vd24gYXMgdHlwZW9mIFRIUkVFLlNoYWRlck1hdGVyaWFsICYgeyBrZXk6IHN0cmluZyB9O1xuICAgIG1hdGVyaWFsLmtleSA9IFRIUkVFLk1hdGhVdGlscy5nZW5lcmF0ZVVVSUQoKTtcbiAgICByZXR1cm4gbWF0ZXJpYWw7XG59XG4iXX0=
@@ -1,33 +0,0 @@
1
- import * as THREE from 'three';
2
- import { shaderMaterial } from '../shader-material/shader-material';
3
- export const SoftShadowMaterial = shaderMaterial({
4
- color: new THREE.Color(),
5
- blend: 2.0,
6
- alphaTest: 0.75,
7
- opacity: 0,
8
- map: null,
9
- },
10
- // language=GLSL
11
- `
12
- varying vec2 vUv;
13
- void main() {
14
- gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(position, 1.);
15
- vUv = uv;
16
- }
17
- `,
18
- // language=GLSL
19
- `
20
- varying vec2 vUv;
21
- uniform sampler2D map;
22
- uniform vec3 color;
23
- uniform float blend;
24
- uniform float opacity;
25
- uniform float alphaTest;
26
- void main() {
27
- vec4 sampledDiffuseColor = texture2D(map, vUv);
28
- gl_FragColor = vec4(color * sampledDiffuseColor.r * blend, max(0.0, (1.0 - (sampledDiffuseColor.r + sampledDiffuseColor.g + sampledDiffuseColor.b) / alphaTest)) * opacity);
29
- #include <tonemapping_fragment>
30
- #include <encodings_fragment>
31
- }
32
- `);
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29mdC1zaGFkb3ctbWF0ZXJpYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9zaGFkZXJzL3NyYy9saWIvc29mdC1zaGFkb3ctbWF0ZXJpYWwvc29mdC1zaGFkb3ctbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXBFLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLGNBQWMsQ0FDNUM7SUFDSSxLQUFLLEVBQUUsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFO0lBQ3hCLEtBQUssRUFBRSxHQUFHO0lBQ1YsU0FBUyxFQUFFLElBQUk7SUFDZixPQUFPLEVBQUUsQ0FBQztJQUNWLEdBQUcsRUFBRSxJQUFJO0NBQ1o7QUFDRCxnQkFBZ0I7QUFDaEI7Ozs7OztHQU1EO0FBQ0MsZ0JBQWdCO0FBQ2hCOzs7Ozs7Ozs7Ozs7O0dBYUQsQ0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgc2hhZGVyTWF0ZXJpYWwgfSBmcm9tICcuLi9zaGFkZXItbWF0ZXJpYWwvc2hhZGVyLW1hdGVyaWFsJztcblxuZXhwb3J0IGNvbnN0IFNvZnRTaGFkb3dNYXRlcmlhbCA9IHNoYWRlck1hdGVyaWFsKFxuICAgIHtcbiAgICAgICAgY29sb3I6IG5ldyBUSFJFRS5Db2xvcigpLFxuICAgICAgICBibGVuZDogMi4wLFxuICAgICAgICBhbHBoYVRlc3Q6IDAuNzUsXG4gICAgICAgIG9wYWNpdHk6IDAsXG4gICAgICAgIG1hcDogbnVsbCxcbiAgICB9LFxuICAgIC8vIGxhbmd1YWdlPUdMU0xcbiAgICBgXG52YXJ5aW5nIHZlYzIgdlV2O1xudm9pZCBtYWluKCkge1xuICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiB2aWV3TWF0cml4ICogbW9kZWxNYXRyaXggKiB2ZWM0KHBvc2l0aW9uLCAxLik7XG4gIHZVdiA9IHV2O1xufVxuICBgLFxuICAgIC8vIGxhbmd1YWdlPUdMU0xcbiAgICBgXG52YXJ5aW5nIHZlYzIgdlV2O1xudW5pZm9ybSBzYW1wbGVyMkQgbWFwO1xudW5pZm9ybSB2ZWMzIGNvbG9yO1xudW5pZm9ybSBmbG9hdCBibGVuZDtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbnVuaWZvcm0gZmxvYXQgYWxwaGFUZXN0O1xudm9pZCBtYWluKCkge1xuICB2ZWM0IHNhbXBsZWREaWZmdXNlQ29sb3IgPSB0ZXh0dXJlMkQobWFwLCB2VXYpO1xuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yICogc2FtcGxlZERpZmZ1c2VDb2xvci5yICogYmxlbmQsIG1heCgwLjAsICgxLjAgLSAoc2FtcGxlZERpZmZ1c2VDb2xvci5yICsgc2FtcGxlZERpZmZ1c2VDb2xvci5nICsgc2FtcGxlZERpZmZ1c2VDb2xvci5iKSAvIGFscGhhVGVzdCkpICogb3BhY2l0eSk7XG4gICNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cbiAgI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cbn1cbiAgYFxuKTtcblxuZXhwb3J0IHR5cGUgU29mdFNoYWRvd01hdGVyaWFsSW5wdXRzID0ge1xuICAgIG1hcDogVEhSRUUuVGV4dHVyZTtcbiAgICBjb2xvcj86IFRIUkVFLkNvbG9yUmVwcmVzZW50YXRpb247XG4gICAgYWxwaGFUZXN0PzogbnVtYmVyO1xuICAgIGJsZW5kPzogbnVtYmVyO1xufTtcbiJdfQ==
@@ -1,86 +0,0 @@
1
- import { Color, ShaderMaterial, Vector2, Vector3 } from 'three';
2
- export class SpotLightMaterial extends ShaderMaterial {
3
- constructor() {
4
- super({
5
- uniforms: {
6
- depth: { value: null },
7
- opacity: { value: 1 },
8
- attenuation: { value: 2.5 },
9
- anglePower: { value: 12 },
10
- spotPosition: { value: new Vector3(0, 0, 0) },
11
- lightColor: { value: new Color('white') },
12
- cameraNear: { value: 0 },
13
- cameraFar: { value: 1 },
14
- resolution: { value: new Vector2(0, 0) },
15
- },
16
- transparent: true,
17
- depthWrite: false,
18
- vertexShader: /* glsl */ `
19
- varying vec3 vNormal;
20
- varying vec3 vWorldPosition;
21
- varying float vViewZ;
22
- varying float vIntensity;
23
- uniform vec3 spotPosition;
24
- uniform float attenuation;
25
-
26
- void main() {
27
- // compute intensity
28
- vNormal = normalize( normalMatrix * normal );
29
- vec4 worldPosition = modelMatrix * vec4( position, 1.0 );
30
- vWorldPosition = worldPosition.xyz;
31
- vec4 viewPosition = viewMatrix * worldPosition;
32
- vViewZ = viewPosition.z;
33
- float intensity = distance(worldPosition.xyz, spotPosition) / attenuation;
34
- intensity = 1.0 - clamp(intensity, 0.0, 1.0);
35
- vIntensity = intensity;
36
- // set gl_Position
37
- gl_Position = projectionMatrix * viewPosition;
38
-
39
- }`,
40
- fragmentShader: /* glsl */ `
41
- #include <packing>
42
-
43
- varying vec3 vNormal;
44
- varying vec3 vWorldPosition;
45
- uniform vec3 lightColor;
46
- uniform vec3 spotPosition;
47
- uniform float attenuation;
48
- uniform float anglePower;
49
- uniform sampler2D depth;
50
- uniform vec2 resolution;
51
- uniform float cameraNear;
52
- uniform float cameraFar;
53
- varying float vViewZ;
54
- varying float vIntensity;
55
- uniform float opacity;
56
-
57
- float readDepth( sampler2D depthSampler, vec2 coord ) {
58
- float fragCoordZ = texture2D( depthSampler, coord ).x;
59
- float viewZ = perspectiveDepthToViewZ(fragCoordZ, cameraNear, cameraFar);
60
- return viewZ;
61
- }
62
-
63
- void main() {
64
- float d = 1.0;
65
- bool isSoft = resolution[0] > 0.0 && resolution[1] > 0.0;
66
- if (isSoft) {
67
- vec2 sUv = gl_FragCoord.xy / resolution;
68
- d = readDepth(depth, sUv);
69
- }
70
- float intensity = vIntensity;
71
- vec3 normal = vec3(vNormal.x, vNormal.y, abs(vNormal.z));
72
- float angleIntensity = pow( dot(normal, vec3(0.0, 0.0, 1.0)), anglePower );
73
- intensity *= angleIntensity;
74
- // fades when z is close to sampled depth, meaning the cone is intersecting existing geometry
75
- if (isSoft) {
76
- intensity *= smoothstep(0., 1., vViewZ - d);
77
- }
78
- gl_FragColor = vec4(lightColor, intensity * opacity);
79
-
80
- #include <tonemapping_fragment>
81
- #include <encodings_fragment>
82
- }`,
83
- });
84
- }
85
- }
86
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BvdC1saWdodC1tYXRlcmlhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci10aHJlZS1zb2JhL3NoYWRlcnMvc3JjL2xpYi9zcG90LWxpZ2h0LW1hdGVyaWFsL3Nwb3QtbGlnaHQtbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUVoRSxNQUFNLE9BQU8saUJBQWtCLFNBQVEsY0FBYztJQUNqRDtRQUNJLEtBQUssQ0FBQztZQUNGLFFBQVEsRUFBRTtnQkFDTixLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO2dCQUN0QixPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO2dCQUNyQixXQUFXLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFO2dCQUMzQixVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO2dCQUN6QixZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRTtnQkFDN0MsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUN6QyxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO2dCQUN4QixTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO2dCQUN2QixVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFO2FBQzNDO1lBQ0QsV0FBVyxFQUFFLElBQUk7WUFDakIsVUFBVSxFQUFFLEtBQUs7WUFDakIsWUFBWSxFQUFFLFVBQVUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1FBcUI3QjtZQUNJLGNBQWMsRUFBRSxVQUFVLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztRQTBDL0I7U0FDQyxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb2xvciwgU2hhZGVyTWF0ZXJpYWwsIFZlY3RvcjIsIFZlY3RvcjMgfSBmcm9tICd0aHJlZSc7XG5cbmV4cG9ydCBjbGFzcyBTcG90TGlnaHRNYXRlcmlhbCBleHRlbmRzIFNoYWRlck1hdGVyaWFsIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgdW5pZm9ybXM6IHtcbiAgICAgICAgICAgICAgICBkZXB0aDogeyB2YWx1ZTogbnVsbCB9LFxuICAgICAgICAgICAgICAgIG9wYWNpdHk6IHsgdmFsdWU6IDEgfSxcbiAgICAgICAgICAgICAgICBhdHRlbnVhdGlvbjogeyB2YWx1ZTogMi41IH0sXG4gICAgICAgICAgICAgICAgYW5nbGVQb3dlcjogeyB2YWx1ZTogMTIgfSxcbiAgICAgICAgICAgICAgICBzcG90UG9zaXRpb246IHsgdmFsdWU6IG5ldyBWZWN0b3IzKDAsIDAsIDApIH0sXG4gICAgICAgICAgICAgICAgbGlnaHRDb2xvcjogeyB2YWx1ZTogbmV3IENvbG9yKCd3aGl0ZScpIH0sXG4gICAgICAgICAgICAgICAgY2FtZXJhTmVhcjogeyB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgICAgIGNhbWVyYUZhcjogeyB2YWx1ZTogMSB9LFxuICAgICAgICAgICAgICAgIHJlc29sdXRpb246IHsgdmFsdWU6IG5ldyBWZWN0b3IyKDAsIDApIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHJhbnNwYXJlbnQ6IHRydWUsXG4gICAgICAgICAgICBkZXB0aFdyaXRlOiBmYWxzZSxcbiAgICAgICAgICAgIHZlcnRleFNoYWRlcjogLyogZ2xzbCAqLyBgXG4gICAgICB2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiAgICAgIHZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcbiAgICAgIHZhcnlpbmcgZmxvYXQgdlZpZXdaO1xuICAgICAgdmFyeWluZyBmbG9hdCB2SW50ZW5zaXR5O1xuICAgICAgdW5pZm9ybSB2ZWMzIHNwb3RQb3NpdGlvbjtcbiAgICAgIHVuaWZvcm0gZmxvYXQgYXR0ZW51YXRpb247XG5cbiAgICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICAgLy8gY29tcHV0ZSBpbnRlbnNpdHlcbiAgICAgICAgdk5vcm1hbCA9IG5vcm1hbGl6ZSggbm9ybWFsTWF0cml4ICogbm9ybWFsICk7XG4gICAgICAgIHZlYzQgd29ybGRQb3NpdGlvblx0PSBtb2RlbE1hdHJpeCAqIHZlYzQoIHBvc2l0aW9uLCAxLjAgKTtcbiAgICAgICAgdldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejtcbiAgICAgICAgdmVjNCB2aWV3UG9zaXRpb24gPSB2aWV3TWF0cml4ICogd29ybGRQb3NpdGlvbjtcbiAgICAgICAgdlZpZXdaID0gdmlld1Bvc2l0aW9uLno7XG4gICAgICAgIGZsb2F0IGludGVuc2l0eVx0PSBkaXN0YW5jZSh3b3JsZFBvc2l0aW9uLnh5eiwgc3BvdFBvc2l0aW9uKSAvIGF0dGVudWF0aW9uO1xuICAgICAgICBpbnRlbnNpdHlcdD0gMS4wIC0gY2xhbXAoaW50ZW5zaXR5LCAwLjAsIDEuMCk7XG4gICAgICAgIHZJbnRlbnNpdHkgPSBpbnRlbnNpdHk7XG4gICAgICAgIC8vIHNldCBnbF9Qb3NpdGlvblxuICAgICAgICBnbF9Qb3NpdGlvblx0PSBwcm9qZWN0aW9uTWF0cml4ICogdmlld1Bvc2l0aW9uO1xuXG4gICAgICB9YCxcbiAgICAgICAgICAgIGZyYWdtZW50U2hhZGVyOiAvKiBnbHNsICovIGBcbiAgICAgICNpbmNsdWRlIDxwYWNraW5nPlxuXG4gICAgICB2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiAgICAgIHZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcbiAgICAgIHVuaWZvcm0gdmVjMyBsaWdodENvbG9yO1xuICAgICAgdW5pZm9ybSB2ZWMzIHNwb3RQb3NpdGlvbjtcbiAgICAgIHVuaWZvcm0gZmxvYXQgYXR0ZW51YXRpb247XG4gICAgICB1bmlmb3JtIGZsb2F0IGFuZ2xlUG93ZXI7XG4gICAgICB1bmlmb3JtIHNhbXBsZXIyRCBkZXB0aDtcbiAgICAgIHVuaWZvcm0gdmVjMiByZXNvbHV0aW9uO1xuICAgICAgdW5pZm9ybSBmbG9hdCBjYW1lcmFOZWFyO1xuICAgICAgdW5pZm9ybSBmbG9hdCBjYW1lcmFGYXI7XG4gICAgICB2YXJ5aW5nIGZsb2F0IHZWaWV3WjtcbiAgICAgIHZhcnlpbmcgZmxvYXQgdkludGVuc2l0eTtcbiAgICAgIHVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcblxuICAgICAgZmxvYXQgcmVhZERlcHRoKCBzYW1wbGVyMkQgZGVwdGhTYW1wbGVyLCB2ZWMyIGNvb3JkICkge1xuICAgICAgICBmbG9hdCBmcmFnQ29vcmRaID0gdGV4dHVyZTJEKCBkZXB0aFNhbXBsZXIsIGNvb3JkICkueDtcbiAgICAgICAgZmxvYXQgdmlld1ogPSBwZXJzcGVjdGl2ZURlcHRoVG9WaWV3WihmcmFnQ29vcmRaLCBjYW1lcmFOZWFyLCBjYW1lcmFGYXIpO1xuICAgICAgICByZXR1cm4gdmlld1o7XG4gICAgICB9XG5cbiAgICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICAgZmxvYXQgZCA9IDEuMDtcbiAgICAgICAgYm9vbCBpc1NvZnQgPSByZXNvbHV0aW9uWzBdID4gMC4wICYmIHJlc29sdXRpb25bMV0gPiAwLjA7XG4gICAgICAgIGlmIChpc1NvZnQpIHtcbiAgICAgICAgICB2ZWMyIHNVdiA9IGdsX0ZyYWdDb29yZC54eSAvIHJlc29sdXRpb247XG4gICAgICAgICAgZCA9IHJlYWREZXB0aChkZXB0aCwgc1V2KTtcbiAgICAgICAgfVxuICAgICAgICBmbG9hdCBpbnRlbnNpdHkgPSB2SW50ZW5zaXR5O1xuICAgICAgICB2ZWMzIG5vcm1hbFx0PSB2ZWMzKHZOb3JtYWwueCwgdk5vcm1hbC55LCBhYnModk5vcm1hbC56KSk7XG4gICAgICAgIGZsb2F0IGFuZ2xlSW50ZW5zaXR5XHQ9IHBvdyggZG90KG5vcm1hbCwgdmVjMygwLjAsIDAuMCwgMS4wKSksIGFuZ2xlUG93ZXIgKTtcbiAgICAgICAgaW50ZW5zaXR5XHQqPSBhbmdsZUludGVuc2l0eTtcbiAgICAgICAgLy8gZmFkZXMgd2hlbiB6IGlzIGNsb3NlIHRvIHNhbXBsZWQgZGVwdGgsIG1lYW5pbmcgdGhlIGNvbmUgaXMgaW50ZXJzZWN0aW5nIGV4aXN0aW5nIGdlb21ldHJ5XG4gICAgICAgIGlmIChpc1NvZnQpIHtcbiAgICAgICAgICBpbnRlbnNpdHlcdCo9IHNtb290aHN0ZXAoMC4sIDEuLCB2Vmlld1ogLSBkKTtcbiAgICAgICAgfVxuICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGxpZ2h0Q29sb3IsIGludGVuc2l0eSAqIG9wYWNpdHkpO1xuXG4gICAgICAgICNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0ICAgICAgI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cbiAgICAgIH1gLFxuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
@@ -1,32 +0,0 @@
1
- import { shaderMaterial } from '../shader-material/shader-material';
2
- export const StarFieldMaterial = shaderMaterial({ time: 0.0, fade: 0.0 },
3
- // language=GLSL
4
- `
5
- uniform float time;
6
- attribute float size;
7
- varying vec3 vColor;
8
- void main() {
9
- vColor = color;
10
- vec4 mvPosition = modelViewMatrix * vec4(position, 0.5);
11
- gl_PointSize = size * (30.0 / -mvPosition.z) * (3.0 + sin(time + 100.0));
12
- gl_Position = projectionMatrix * mvPosition;
13
- }
14
- `,
15
- // language=GLSL
16
- `
17
- uniform sampler2D pointTexture;
18
- uniform float fade;
19
- varying vec3 vColor;
20
- void main() {
21
- float opacity = 1.0;
22
- if (fade == 1.0) {
23
- float d = distance(gl_PointCoord, vec2(0.5, 0.5));
24
- opacity = 1.0 / (1.0 + exp(16.0 * (d - 0.25)));
25
- }
26
- gl_FragColor = vec4(vColor, opacity);
27
-
28
- #include <tonemapping_fragment>
29
- #include <encodings_fragment>
30
- }
31
- `);
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Rhci1maWVsZC1tYXRlcmlhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci10aHJlZS1zb2JhL3NoYWRlcnMvc3JjL2xpYi9zdGFyLWZpZWxkLW1hdGVyaWFsL3N0YXItZmllbGQtbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXBFLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLGNBQWMsQ0FDM0MsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7QUFDeEIsZ0JBQWdCO0FBQ2hCOzs7Ozs7Ozs7O0dBVUQ7QUFDQyxnQkFBZ0I7QUFDaEI7Ozs7Ozs7Ozs7Ozs7OztHQWVELENBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNoYWRlck1hdGVyaWFsIH0gZnJvbSAnLi4vc2hhZGVyLW1hdGVyaWFsL3NoYWRlci1tYXRlcmlhbCc7XG5cbmV4cG9ydCBjb25zdCBTdGFyRmllbGRNYXRlcmlhbCA9IHNoYWRlck1hdGVyaWFsKFxuICAgIHsgdGltZTogMC4wLCBmYWRlOiAwLjAgfSxcbiAgICAvLyBsYW5ndWFnZT1HTFNMXG4gICAgYFxudW5pZm9ybSBmbG9hdCB0aW1lO1xuYXR0cmlidXRlIGZsb2F0IHNpemU7XG52YXJ5aW5nIHZlYzMgdkNvbG9yO1xudm9pZCBtYWluKCkge1xuICB2Q29sb3IgPSBjb2xvcjtcbiAgdmVjNCBtdlBvc2l0aW9uID0gbW9kZWxWaWV3TWF0cml4ICogdmVjNChwb3NpdGlvbiwgMC41KTtcbiAgZ2xfUG9pbnRTaXplID0gc2l6ZSAqICgzMC4wIC8gLW12UG9zaXRpb24ueikgKiAoMy4wICsgc2luKHRpbWUgKyAxMDAuMCkpO1xuICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uO1xufVxuICBgLFxuICAgIC8vIGxhbmd1YWdlPUdMU0xcbiAgICBgXG51bmlmb3JtIHNhbXBsZXIyRCBwb2ludFRleHR1cmU7XG51bmlmb3JtIGZsb2F0IGZhZGU7XG52YXJ5aW5nIHZlYzMgdkNvbG9yO1xudm9pZCBtYWluKCkge1xuICBmbG9hdCBvcGFjaXR5ID0gMS4wO1xuICBpZiAoZmFkZSA9PSAxLjApIHtcbiAgICBmbG9hdCBkID0gZGlzdGFuY2UoZ2xfUG9pbnRDb29yZCwgdmVjMigwLjUsIDAuNSkpO1xuICAgIG9wYWNpdHkgPSAxLjAgLyAoMS4wICsgZXhwKDE2LjAgKiAoZCAtIDAuMjUpKSk7XG4gIH1cbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh2Q29sb3IsIG9wYWNpdHkpO1xuXG4gICNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cbiAgI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cbn1cbiAgYFxuKTtcbiJdfQ==