angular-three 0.0.2 → 0.0.4

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 (400) hide show
  1. package/attributes/README.md +3 -0
  2. package/attributes/index.d.ts +22 -0
  3. package/attributes/lib/buffer-attribute/buffer-attribute.d.ts +8 -0
  4. package/attributes/lib/color-attribute/color-attribute.d.ts +8 -0
  5. package/attributes/lib/float16-buffer-attribute/float16-buffer-attribute.d.ts +8 -0
  6. package/attributes/lib/float32-buffer-attribute/float32-buffer-attribute.d.ts +8 -0
  7. package/attributes/lib/float64-buffer-attribute/float64-buffer-attribute.d.ts +8 -0
  8. package/attributes/lib/fog-attribute/fog-attribute.d.ts +8 -0
  9. package/attributes/lib/fog-exp2-attribute/fog-exp2-attribute.d.ts +8 -0
  10. package/attributes/lib/instanced-buffer-attribute/instanced-buffer-attribute.d.ts +8 -0
  11. package/attributes/lib/int16-buffer-attribute/int16-buffer-attribute.d.ts +8 -0
  12. package/attributes/lib/int32-buffer-attribute/int32-buffer-attribute.d.ts +8 -0
  13. package/attributes/lib/int8-buffer-attribute/int8-buffer-attribute.d.ts +8 -0
  14. package/attributes/lib/interleaved-buffer-attribute/interleaved-buffer-attribute.d.ts +8 -0
  15. package/attributes/lib/matrix3-attribute/matrix3-attribute.d.ts +8 -0
  16. package/attributes/lib/matrix4-attribute/matrix4-attribute.d.ts +8 -0
  17. package/attributes/lib/uint16-buffer-attribute/uint16-buffer-attribute.d.ts +8 -0
  18. package/attributes/lib/uint32-buffer-attribute/uint32-buffer-attribute.d.ts +8 -0
  19. package/attributes/lib/uint8-buffer-attribute/uint8-buffer-attribute.d.ts +8 -0
  20. package/attributes/lib/uint8-clamped-buffer-attribute/uint8-clamped-buffer-attribute.d.ts +8 -0
  21. package/attributes/lib/value-attribute/value-attribute.d.ts +8 -0
  22. package/attributes/lib/vector2-attribute/vector2-attribute.d.ts +8 -0
  23. package/attributes/lib/vector3-attribute/vector3-attribute.d.ts +8 -0
  24. package/attributes/lib/vector4-attribute/vector4-attribute.d.ts +8 -0
  25. package/audios/README.md +3 -0
  26. package/audios/index.d.ts +3 -0
  27. package/audios/lib/audio/audio.d.ts +49 -0
  28. package/audios/lib/audio-listener/audio-listener.d.ts +35 -0
  29. package/audios/lib/positional-audio/positional-audio.d.ts +49 -0
  30. package/cameras/README.md +3 -0
  31. package/cameras/index.d.ts +5 -0
  32. package/cameras/lib/array-camera/array-camera.d.ts +56 -0
  33. package/cameras/lib/cube-camera/cube-camera.d.ts +36 -0
  34. package/cameras/lib/orthographic-camera/orthographic-camera.d.ts +54 -0
  35. package/cameras/lib/perspective-camera/perspective-camera.d.ts +55 -0
  36. package/cameras/lib/stereo-camera/stereo-camera.d.ts +42 -0
  37. package/esm2020/attributes/angular-three-attributes.mjs +5 -0
  38. package/esm2020/attributes/index.mjs +24 -0
  39. package/esm2020/attributes/lib/buffer-attribute/buffer-attribute.mjs +25 -0
  40. package/esm2020/attributes/lib/color-attribute/color-attribute.mjs +25 -0
  41. package/esm2020/attributes/lib/float16-buffer-attribute/float16-buffer-attribute.mjs +25 -0
  42. package/esm2020/attributes/lib/float32-buffer-attribute/float32-buffer-attribute.mjs +25 -0
  43. package/esm2020/attributes/lib/float64-buffer-attribute/float64-buffer-attribute.mjs +25 -0
  44. package/esm2020/attributes/lib/fog-attribute/fog-attribute.mjs +25 -0
  45. package/esm2020/attributes/lib/fog-exp2-attribute/fog-exp2-attribute.mjs +25 -0
  46. package/esm2020/attributes/lib/instanced-buffer-attribute/instanced-buffer-attribute.mjs +25 -0
  47. package/esm2020/attributes/lib/int16-buffer-attribute/int16-buffer-attribute.mjs +25 -0
  48. package/esm2020/attributes/lib/int32-buffer-attribute/int32-buffer-attribute.mjs +25 -0
  49. package/esm2020/attributes/lib/int8-buffer-attribute/int8-buffer-attribute.mjs +25 -0
  50. package/esm2020/attributes/lib/interleaved-buffer-attribute/interleaved-buffer-attribute.mjs +29 -0
  51. package/esm2020/attributes/lib/matrix3-attribute/matrix3-attribute.mjs +25 -0
  52. package/esm2020/attributes/lib/matrix4-attribute/matrix4-attribute.mjs +25 -0
  53. package/esm2020/attributes/lib/uint16-buffer-attribute/uint16-buffer-attribute.mjs +25 -0
  54. package/esm2020/attributes/lib/uint32-buffer-attribute/uint32-buffer-attribute.mjs +25 -0
  55. package/esm2020/attributes/lib/uint8-buffer-attribute/uint8-buffer-attribute.mjs +25 -0
  56. package/esm2020/attributes/lib/uint8-clamped-buffer-attribute/uint8-clamped-buffer-attribute.mjs +25 -0
  57. package/esm2020/attributes/lib/value-attribute/value-attribute.mjs +27 -0
  58. package/esm2020/attributes/lib/vector2-attribute/vector2-attribute.mjs +25 -0
  59. package/esm2020/attributes/lib/vector3-attribute/vector3-attribute.mjs +25 -0
  60. package/esm2020/attributes/lib/vector4-attribute/vector4-attribute.mjs +25 -0
  61. package/esm2020/audios/angular-three-audios.mjs +5 -0
  62. package/esm2020/audios/index.mjs +5 -0
  63. package/esm2020/audios/lib/audio/audio.mjs +68 -0
  64. package/esm2020/audios/lib/audio-listener/audio-listener.mjs +65 -0
  65. package/esm2020/audios/lib/positional-audio/positional-audio.mjs +68 -0
  66. package/esm2020/cameras/angular-three-cameras.mjs +5 -0
  67. package/esm2020/cameras/index.mjs +7 -0
  68. package/esm2020/cameras/lib/array-camera/array-camera.mjs +67 -0
  69. package/esm2020/cameras/lib/cube-camera/cube-camera.mjs +55 -0
  70. package/esm2020/cameras/lib/orthographic-camera/orthographic-camera.mjs +65 -0
  71. package/esm2020/cameras/lib/perspective-camera/perspective-camera.mjs +66 -0
  72. package/esm2020/cameras/lib/stereo-camera/stereo-camera.mjs +61 -0
  73. package/esm2020/geometries/angular-three-geometries.mjs +5 -0
  74. package/esm2020/geometries/index.mjs +25 -0
  75. package/esm2020/geometries/lib/box-geometry/box-geometry.mjs +25 -0
  76. package/esm2020/geometries/lib/buffer-geometry/buffer-geometry.mjs +25 -0
  77. package/esm2020/geometries/lib/capsule-geometry/capsule-geometry.mjs +25 -0
  78. package/esm2020/geometries/lib/circle-geometry/circle-geometry.mjs +25 -0
  79. package/esm2020/geometries/lib/cone-geometry/cone-geometry.mjs +25 -0
  80. package/esm2020/geometries/lib/cylinder-geometry/cylinder-geometry.mjs +25 -0
  81. package/esm2020/geometries/lib/dodecahedron-geometry/dodecahedron-geometry.mjs +25 -0
  82. package/esm2020/geometries/lib/edges-geometry/edges-geometry.mjs +25 -0
  83. package/esm2020/geometries/lib/extrude-geometry/extrude-geometry.mjs +25 -0
  84. package/esm2020/geometries/lib/icosahedron-geometry/icosahedron-geometry.mjs +25 -0
  85. package/esm2020/geometries/lib/instanced-buffer-geometry/instanced-buffer-geometry.mjs +25 -0
  86. package/esm2020/geometries/lib/lathe-geometry/lathe-geometry.mjs +25 -0
  87. package/esm2020/geometries/lib/octahedron-geometry/octahedron-geometry.mjs +25 -0
  88. package/esm2020/geometries/lib/plane-geometry/plane-geometry.mjs +25 -0
  89. package/esm2020/geometries/lib/polyhedron-geometry/polyhedron-geometry.mjs +25 -0
  90. package/esm2020/geometries/lib/ring-geometry/ring-geometry.mjs +25 -0
  91. package/esm2020/geometries/lib/shape-geometry/shape-geometry.mjs +25 -0
  92. package/esm2020/geometries/lib/sphere-geometry/sphere-geometry.mjs +25 -0
  93. package/esm2020/geometries/lib/tetrahedron-geometry/tetrahedron-geometry.mjs +25 -0
  94. package/esm2020/geometries/lib/torus-geometry/torus-geometry.mjs +25 -0
  95. package/esm2020/geometries/lib/torus-knot-geometry/torus-knot-geometry.mjs +25 -0
  96. package/esm2020/geometries/lib/tube-geometry/tube-geometry.mjs +25 -0
  97. package/esm2020/geometries/lib/wireframe-geometry/wireframe-geometry.mjs +25 -0
  98. package/esm2020/helpers/angular-three-helpers.mjs +5 -0
  99. package/esm2020/helpers/index.mjs +15 -0
  100. package/esm2020/helpers/lib/arrow-helper/arrow-helper.mjs +25 -0
  101. package/esm2020/helpers/lib/axes-helper/axes-helper.mjs +25 -0
  102. package/esm2020/helpers/lib/box-helper/box-helper.mjs +35 -0
  103. package/esm2020/helpers/lib/box3-helper/box3-helper.mjs +35 -0
  104. package/esm2020/helpers/lib/camera-helper/camera-helper.mjs +35 -0
  105. package/esm2020/helpers/lib/directional-light-helper/directional-light-helper.mjs +35 -0
  106. package/esm2020/helpers/lib/grid-helper/grid-helper.mjs +25 -0
  107. package/esm2020/helpers/lib/hemisphere-light-helper/hemisphere-light-helper.mjs +35 -0
  108. package/esm2020/helpers/lib/plane-helper/plane-helper.mjs +35 -0
  109. package/esm2020/helpers/lib/point-light-helper/point-light-helper.mjs +35 -0
  110. package/esm2020/helpers/lib/polar-grid-helper/polar-grid-helper.mjs +25 -0
  111. package/esm2020/helpers/lib/skeleton-helper/skeleton-helper.mjs +35 -0
  112. package/esm2020/helpers/lib/spot-light-helper/spot-light-helper.mjs +35 -0
  113. package/esm2020/index.mjs +39 -2
  114. package/esm2020/lib/canvas.mjs +229 -0
  115. package/esm2020/lib/di/resize.mjs +19 -0
  116. package/esm2020/lib/di/window.mjs +13 -0
  117. package/esm2020/lib/directives/args.mjs +30 -0
  118. package/esm2020/lib/directives/cursor.mjs +35 -0
  119. package/esm2020/lib/directives/repeat.mjs +20 -0
  120. package/esm2020/lib/events.mjs +53 -0
  121. package/esm2020/lib/instance.mjs +368 -0
  122. package/esm2020/lib/pipes/math.mjs +15 -0
  123. package/esm2020/lib/pipes/pi.mjs +14 -0
  124. package/esm2020/lib/pipes/radian.mjs +14 -0
  125. package/esm2020/lib/pipes/side.mjs +22 -0
  126. package/esm2020/lib/ref.mjs +15 -0
  127. package/esm2020/lib/services/loader.mjs +45 -0
  128. package/esm2020/lib/services/resize.mjs +127 -0
  129. package/esm2020/lib/stores/component-store.mjs +137 -0
  130. package/esm2020/lib/stores/store.mjs +433 -0
  131. package/esm2020/lib/types.mjs +2 -0
  132. package/esm2020/lib/utils/apply-props.mjs +135 -0
  133. package/esm2020/lib/utils/build-graph.mjs +15 -0
  134. package/esm2020/lib/utils/camera.mjs +28 -0
  135. package/esm2020/lib/utils/capitalize.mjs +4 -0
  136. package/esm2020/lib/utils/check-update.mjs +22 -0
  137. package/esm2020/lib/utils/events.mjs +353 -0
  138. package/esm2020/lib/utils/get-instance-local-state.mjs +6 -0
  139. package/esm2020/lib/utils/inject.mjs +18 -0
  140. package/esm2020/lib/utils/instance.mjs +35 -0
  141. package/esm2020/lib/utils/is.mjs +54 -0
  142. package/esm2020/lib/utils/loop.mjs +139 -0
  143. package/esm2020/lib/utils/make.mjs +30 -0
  144. package/esm2020/lib/utils/mutate.mjs +24 -0
  145. package/esm2020/lib/utils/proxy.mjs +99 -0
  146. package/esm2020/lib/utils/renderer.mjs +15 -0
  147. package/esm2020/lights/angular-three-lights.mjs +5 -0
  148. package/esm2020/lights/index.mjs +11 -0
  149. package/esm2020/lights/lib/ambient-light/ambient-light.mjs +58 -0
  150. package/esm2020/lights/lib/ambient-light-probe/ambient-light-probe.mjs +59 -0
  151. package/esm2020/lights/lib/directional-light/directional-light.mjs +59 -0
  152. package/esm2020/lights/lib/hemisphere-light/hemisphere-light.mjs +60 -0
  153. package/esm2020/lights/lib/hemisphere-light-probe/hemisphere-light-probe.mjs +61 -0
  154. package/esm2020/lights/lib/light-probe/light-probe.mjs +59 -0
  155. package/esm2020/lights/lib/point-light/point-light.mjs +61 -0
  156. package/esm2020/lights/lib/rect-area-light/rect-area-light.mjs +61 -0
  157. package/esm2020/lights/lib/spot-light/spot-light.mjs +64 -0
  158. package/esm2020/materials/angular-three-materials.mjs +5 -0
  159. package/esm2020/materials/index.mjs +19 -0
  160. package/esm2020/materials/lib/line-basic-material/line-basic-material.mjs +76 -0
  161. package/esm2020/materials/lib/line-dashed-material/line-dashed-material.mjs +79 -0
  162. package/esm2020/materials/lib/mesh-basic-material/mesh-basic-material.mjs +88 -0
  163. package/esm2020/materials/lib/mesh-depth-material/mesh-depth-material.mjs +79 -0
  164. package/esm2020/materials/lib/mesh-distance-material/mesh-distance-material.mjs +79 -0
  165. package/esm2020/materials/lib/mesh-lambert-material/mesh-lambert-material.mjs +99 -0
  166. package/esm2020/materials/lib/mesh-matcap-material/mesh-matcap-material.mjs +85 -0
  167. package/esm2020/materials/lib/mesh-normal-material/mesh-normal-material.mjs +82 -0
  168. package/esm2020/materials/lib/mesh-phong-material/mesh-phong-material.mjs +102 -0
  169. package/esm2020/materials/lib/mesh-physical-material/mesh-physical-material.mjs +118 -0
  170. package/esm2020/materials/lib/mesh-standard-material/mesh-standard-material.mjs +99 -0
  171. package/esm2020/materials/lib/mesh-toon-material/mesh-toon-material.mjs +95 -0
  172. package/esm2020/materials/lib/points-material/points-material.mjs +77 -0
  173. package/esm2020/materials/lib/raw-shader-material/raw-shader-material.mjs +82 -0
  174. package/esm2020/materials/lib/shader-material/shader-material.mjs +82 -0
  175. package/esm2020/materials/lib/shadow-material/shadow-material.mjs +73 -0
  176. package/esm2020/materials/lib/sprite-material/sprite-material.mjs +77 -0
  177. package/esm2020/objects/angular-three-objects.mjs +5 -0
  178. package/esm2020/objects/index.mjs +14 -0
  179. package/esm2020/objects/lib/bone/bone.mjs +54 -0
  180. package/esm2020/objects/lib/group/group.mjs +54 -0
  181. package/esm2020/objects/lib/instanced-mesh/instanced-mesh.mjs +63 -0
  182. package/esm2020/objects/lib/line/line.mjs +58 -0
  183. package/esm2020/objects/lib/line-loop/line-loop.mjs +58 -0
  184. package/esm2020/objects/lib/line-segments/line-segments.mjs +58 -0
  185. package/esm2020/objects/lib/lod/lod.mjs +56 -0
  186. package/esm2020/objects/lib/mesh/mesh.mjs +58 -0
  187. package/esm2020/objects/lib/points/points.mjs +58 -0
  188. package/esm2020/objects/lib/skeleton/skeleton.mjs +40 -0
  189. package/esm2020/objects/lib/skinned-mesh/skinned-mesh.mjs +62 -0
  190. package/esm2020/objects/lib/sprite/sprite.mjs +57 -0
  191. package/esm2020/primitives/angular-three-primitives.mjs +5 -0
  192. package/esm2020/primitives/index.mjs +3 -0
  193. package/esm2020/primitives/lib/object-primitive/object-primitive.mjs +54 -0
  194. package/esm2020/primitives/lib/primitive/primitive.mjs +37 -0
  195. package/esm2020/stats/angular-three-stats.mjs +5 -0
  196. package/esm2020/stats/index.mjs +2 -0
  197. package/esm2020/stats/lib/stats/stats.mjs +54 -0
  198. package/esm2020/textures/angular-three-textures.mjs +5 -0
  199. package/esm2020/textures/index.mjs +12 -0
  200. package/esm2020/textures/lib/canvas-texture/canvas-texture.mjs +25 -0
  201. package/esm2020/textures/lib/compressed-array-texture/compressed-array-texture.mjs +25 -0
  202. package/esm2020/textures/lib/compressed-texture/compressed-texture.mjs +25 -0
  203. package/esm2020/textures/lib/cube-texture/cube-texture.mjs +25 -0
  204. package/esm2020/textures/lib/data-array-texture/data-array-texture.mjs +25 -0
  205. package/esm2020/textures/lib/data-texture/data-texture.mjs +25 -0
  206. package/esm2020/textures/lib/data3-dtexture/data3-dtexture.mjs +25 -0
  207. package/esm2020/textures/lib/depth-texture/depth-texture.mjs +25 -0
  208. package/esm2020/textures/lib/framebuffer-texture/framebuffer-texture.mjs +25 -0
  209. package/esm2020/textures/lib/video-texture/video-texture.mjs +25 -0
  210. package/fesm2015/angular-three-attributes.mjs +462 -0
  211. package/fesm2015/angular-three-attributes.mjs.map +1 -0
  212. package/fesm2015/angular-three-audios.mjs +201 -0
  213. package/fesm2015/angular-three-audios.mjs.map +1 -0
  214. package/fesm2015/angular-three-cameras.mjs +304 -0
  215. package/fesm2015/angular-three-cameras.mjs.map +1 -0
  216. package/fesm2015/angular-three-geometries.mjs +475 -0
  217. package/fesm2015/angular-three-geometries.mjs.map +1 -0
  218. package/fesm2015/angular-three-helpers.mjs +365 -0
  219. package/fesm2015/angular-three-helpers.mjs.map +1 -0
  220. package/fesm2015/angular-three-lights.mjs +511 -0
  221. package/fesm2015/angular-three-lights.mjs.map +1 -0
  222. package/fesm2015/angular-three-materials.mjs +1402 -0
  223. package/fesm2015/angular-three-materials.mjs.map +1 -0
  224. package/fesm2015/angular-three-objects.mjs +630 -0
  225. package/fesm2015/angular-three-objects.mjs.map +1 -0
  226. package/fesm2015/angular-three-primitives.mjs +95 -0
  227. package/fesm2015/angular-three-primitives.mjs.map +1 -0
  228. package/fesm2015/angular-three-stats.mjs +62 -0
  229. package/fesm2015/angular-three-stats.mjs.map +1 -0
  230. package/fesm2015/angular-three-textures.mjs +215 -0
  231. package/fesm2015/angular-three-textures.mjs.map +1 -0
  232. package/fesm2015/angular-three.mjs +2448 -10
  233. package/fesm2015/angular-three.mjs.map +1 -1
  234. package/fesm2020/angular-three-attributes.mjs +462 -0
  235. package/fesm2020/angular-three-attributes.mjs.map +1 -0
  236. package/fesm2020/angular-three-audios.mjs +201 -0
  237. package/fesm2020/angular-three-audios.mjs.map +1 -0
  238. package/fesm2020/angular-three-cameras.mjs +304 -0
  239. package/fesm2020/angular-three-cameras.mjs.map +1 -0
  240. package/fesm2020/angular-three-geometries.mjs +475 -0
  241. package/fesm2020/angular-three-geometries.mjs.map +1 -0
  242. package/fesm2020/angular-three-helpers.mjs +365 -0
  243. package/fesm2020/angular-three-helpers.mjs.map +1 -0
  244. package/fesm2020/angular-three-lights.mjs +511 -0
  245. package/fesm2020/angular-three-lights.mjs.map +1 -0
  246. package/fesm2020/angular-three-materials.mjs +1402 -0
  247. package/fesm2020/angular-three-materials.mjs.map +1 -0
  248. package/fesm2020/angular-three-objects.mjs +630 -0
  249. package/fesm2020/angular-three-objects.mjs.map +1 -0
  250. package/fesm2020/angular-three-primitives.mjs +95 -0
  251. package/fesm2020/angular-three-primitives.mjs.map +1 -0
  252. package/fesm2020/angular-three-stats.mjs +62 -0
  253. package/fesm2020/angular-three-stats.mjs.map +1 -0
  254. package/fesm2020/angular-three-textures.mjs +215 -0
  255. package/fesm2020/angular-three-textures.mjs.map +1 -0
  256. package/fesm2020/angular-three.mjs +2462 -10
  257. package/fesm2020/angular-three.mjs.map +1 -1
  258. package/geometries/README.md +3 -0
  259. package/geometries/index.d.ts +23 -0
  260. package/geometries/lib/box-geometry/box-geometry.d.ts +8 -0
  261. package/geometries/lib/buffer-geometry/buffer-geometry.d.ts +8 -0
  262. package/geometries/lib/capsule-geometry/capsule-geometry.d.ts +8 -0
  263. package/geometries/lib/circle-geometry/circle-geometry.d.ts +8 -0
  264. package/geometries/lib/cone-geometry/cone-geometry.d.ts +8 -0
  265. package/geometries/lib/cylinder-geometry/cylinder-geometry.d.ts +8 -0
  266. package/geometries/lib/dodecahedron-geometry/dodecahedron-geometry.d.ts +8 -0
  267. package/geometries/lib/edges-geometry/edges-geometry.d.ts +8 -0
  268. package/geometries/lib/extrude-geometry/extrude-geometry.d.ts +8 -0
  269. package/geometries/lib/icosahedron-geometry/icosahedron-geometry.d.ts +8 -0
  270. package/geometries/lib/instanced-buffer-geometry/instanced-buffer-geometry.d.ts +8 -0
  271. package/geometries/lib/lathe-geometry/lathe-geometry.d.ts +8 -0
  272. package/geometries/lib/octahedron-geometry/octahedron-geometry.d.ts +8 -0
  273. package/geometries/lib/plane-geometry/plane-geometry.d.ts +8 -0
  274. package/geometries/lib/polyhedron-geometry/polyhedron-geometry.d.ts +8 -0
  275. package/geometries/lib/ring-geometry/ring-geometry.d.ts +8 -0
  276. package/geometries/lib/shape-geometry/shape-geometry.d.ts +8 -0
  277. package/geometries/lib/sphere-geometry/sphere-geometry.d.ts +8 -0
  278. package/geometries/lib/tetrahedron-geometry/tetrahedron-geometry.d.ts +8 -0
  279. package/geometries/lib/torus-geometry/torus-geometry.d.ts +8 -0
  280. package/geometries/lib/torus-knot-geometry/torus-knot-geometry.d.ts +8 -0
  281. package/geometries/lib/tube-geometry/tube-geometry.d.ts +8 -0
  282. package/geometries/lib/wireframe-geometry/wireframe-geometry.d.ts +8 -0
  283. package/helpers/README.md +3 -0
  284. package/helpers/index.d.ts +13 -0
  285. package/helpers/lib/arrow-helper/arrow-helper.d.ts +8 -0
  286. package/helpers/lib/axes-helper/axes-helper.d.ts +8 -0
  287. package/helpers/lib/box-helper/box-helper.d.ts +8 -0
  288. package/helpers/lib/box3-helper/box3-helper.d.ts +8 -0
  289. package/helpers/lib/camera-helper/camera-helper.d.ts +8 -0
  290. package/helpers/lib/directional-light-helper/directional-light-helper.d.ts +8 -0
  291. package/helpers/lib/grid-helper/grid-helper.d.ts +8 -0
  292. package/helpers/lib/hemisphere-light-helper/hemisphere-light-helper.d.ts +8 -0
  293. package/helpers/lib/plane-helper/plane-helper.d.ts +8 -0
  294. package/helpers/lib/point-light-helper/point-light-helper.d.ts +8 -0
  295. package/helpers/lib/polar-grid-helper/polar-grid-helper.d.ts +8 -0
  296. package/helpers/lib/skeleton-helper/skeleton-helper.d.ts +8 -0
  297. package/helpers/lib/spot-light-helper/spot-light-helper.d.ts +8 -0
  298. package/index.d.ts +38 -1
  299. package/lib/canvas.d.ts +46 -0
  300. package/lib/di/resize.d.ts +12 -0
  301. package/lib/di/window.d.ts +1 -0
  302. package/lib/directives/args.d.ts +19 -0
  303. package/lib/directives/cursor.d.ts +7 -0
  304. package/lib/directives/repeat.d.ts +7 -0
  305. package/lib/events.d.ts +2 -0
  306. package/lib/instance.d.ts +81 -0
  307. package/lib/pipes/math.d.ts +7 -0
  308. package/lib/pipes/pi.d.ts +7 -0
  309. package/lib/pipes/radian.d.ts +7 -0
  310. package/lib/pipes/side.d.ts +8 -0
  311. package/lib/ref.d.ts +5 -0
  312. package/lib/services/loader.d.ts +11 -0
  313. package/lib/services/resize.d.ts +19 -0
  314. package/lib/stores/component-store.d.ts +69 -0
  315. package/lib/stores/store.d.ts +32 -0
  316. package/lib/types.d.ts +358 -0
  317. package/lib/utils/apply-props.d.ts +6 -0
  318. package/lib/utils/build-graph.d.ts +3 -0
  319. package/lib/utils/camera.d.ts +4 -0
  320. package/lib/utils/capitalize.d.ts +1 -0
  321. package/lib/utils/check-update.d.ts +2 -0
  322. package/lib/utils/events.d.ts +6 -0
  323. package/lib/utils/get-instance-local-state.d.ts +2 -0
  324. package/lib/utils/inject.d.ts +9 -0
  325. package/lib/utils/instance.d.ts +4 -0
  326. package/lib/utils/is.d.ts +21 -0
  327. package/lib/utils/loop.d.ts +32 -0
  328. package/lib/utils/make.d.ts +4 -0
  329. package/lib/utils/mutate.d.ts +2 -0
  330. package/lib/utils/proxy.d.ts +7 -0
  331. package/lib/utils/renderer.d.ts +3 -0
  332. package/lights/README.md +3 -0
  333. package/lights/index.d.ts +9 -0
  334. package/lights/lib/ambient-light/ambient-light.d.ts +39 -0
  335. package/lights/lib/ambient-light-probe/ambient-light-probe.d.ts +40 -0
  336. package/lights/lib/directional-light/directional-light.d.ts +40 -0
  337. package/lights/lib/hemisphere-light/hemisphere-light.d.ts +41 -0
  338. package/lights/lib/hemisphere-light-probe/hemisphere-light-probe.d.ts +42 -0
  339. package/lights/lib/light-probe/light-probe.d.ts +40 -0
  340. package/lights/lib/point-light/point-light.d.ts +42 -0
  341. package/lights/lib/rect-area-light/rect-area-light.d.ts +42 -0
  342. package/lights/lib/spot-light/spot-light.d.ts +45 -0
  343. package/materials/README.md +3 -0
  344. package/materials/index.d.ts +17 -0
  345. package/materials/lib/line-basic-material/line-basic-material.d.ts +55 -0
  346. package/materials/lib/line-dashed-material/line-dashed-material.d.ts +58 -0
  347. package/materials/lib/mesh-basic-material/mesh-basic-material.d.ts +67 -0
  348. package/materials/lib/mesh-depth-material/mesh-depth-material.d.ts +58 -0
  349. package/materials/lib/mesh-distance-material/mesh-distance-material.d.ts +58 -0
  350. package/materials/lib/mesh-lambert-material/mesh-lambert-material.d.ts +78 -0
  351. package/materials/lib/mesh-matcap-material/mesh-matcap-material.d.ts +64 -0
  352. package/materials/lib/mesh-normal-material/mesh-normal-material.d.ts +61 -0
  353. package/materials/lib/mesh-phong-material/mesh-phong-material.d.ts +81 -0
  354. package/materials/lib/mesh-physical-material/mesh-physical-material.d.ts +97 -0
  355. package/materials/lib/mesh-standard-material/mesh-standard-material.d.ts +78 -0
  356. package/materials/lib/mesh-toon-material/mesh-toon-material.d.ts +74 -0
  357. package/materials/lib/points-material/points-material.d.ts +56 -0
  358. package/materials/lib/raw-shader-material/raw-shader-material.d.ts +68 -0
  359. package/materials/lib/shader-material/shader-material.d.ts +68 -0
  360. package/materials/lib/shadow-material/shadow-material.d.ts +52 -0
  361. package/materials/lib/sprite-material/sprite-material.d.ts +56 -0
  362. package/objects/README.md +3 -0
  363. package/objects/index.d.ts +12 -0
  364. package/objects/lib/bone/bone.d.ts +35 -0
  365. package/objects/lib/group/group.d.ts +35 -0
  366. package/objects/lib/instanced-mesh/instanced-mesh.d.ts +44 -0
  367. package/objects/lib/line/line.d.ts +41 -0
  368. package/objects/lib/line-loop/line-loop.d.ts +41 -0
  369. package/objects/lib/line-segments/line-segments.d.ts +41 -0
  370. package/objects/lib/lod/lod.d.ts +40 -0
  371. package/objects/lib/mesh/mesh.d.ts +41 -0
  372. package/objects/lib/points/points.d.ts +41 -0
  373. package/objects/lib/skeleton/skeleton.d.ts +16 -0
  374. package/objects/lib/skinned-mesh/skinned-mesh.d.ts +45 -0
  375. package/objects/lib/sprite/sprite.d.ts +38 -0
  376. package/package.json +93 -2
  377. package/primitives/README.md +3 -0
  378. package/primitives/index.d.ts +2 -0
  379. package/primitives/lib/object-primitive/object-primitive.d.ts +35 -0
  380. package/primitives/lib/primitive/primitive.d.ts +10 -0
  381. package/schematics/src/generators/init/generator.d.ts +1 -1
  382. package/schematics/src/generators/init/generator.js +4 -4
  383. package/schematics/src/generators/init/generator.js.map +1 -1
  384. package/stats/README.md +3 -0
  385. package/stats/index.d.ts +1 -0
  386. package/stats/lib/stats/stats.d.ts +16 -0
  387. package/textures/README.md +3 -0
  388. package/textures/index.d.ts +10 -0
  389. package/textures/lib/canvas-texture/canvas-texture.d.ts +8 -0
  390. package/textures/lib/compressed-array-texture/compressed-array-texture.d.ts +8 -0
  391. package/textures/lib/compressed-texture/compressed-texture.d.ts +8 -0
  392. package/textures/lib/cube-texture/cube-texture.d.ts +8 -0
  393. package/textures/lib/data-array-texture/data-array-texture.d.ts +8 -0
  394. package/textures/lib/data-texture/data-texture.d.ts +8 -0
  395. package/textures/lib/data3-dtexture/data3-dtexture.d.ts +8 -0
  396. package/textures/lib/depth-texture/depth-texture.d.ts +8 -0
  397. package/textures/lib/framebuffer-texture/framebuffer-texture.d.ts +8 -0
  398. package/textures/lib/video-texture/video-texture.d.ts +8 -0
  399. package/esm2020/lib/angular-three.module.mjs +0 -15
  400. package/lib/angular-three.module.d.ts +0 -7
@@ -0,0 +1,368 @@
1
+ import { Directive, EventEmitter, inject, InjectionToken, Input, NgZone, Output, } from '@angular/core';
2
+ import { filter, tap } from 'rxjs';
3
+ import { NgtRef } from './ref';
4
+ import { NgtComponentStore, tapEffect } from './stores/component-store';
5
+ import { NgtStore } from './stores/store';
6
+ import { applyProps } from './utils/apply-props';
7
+ import { removeInteractivity } from './utils/events';
8
+ import { getInstanceLocalState } from './utils/get-instance-local-state';
9
+ import { invalidateInstance } from './utils/instance';
10
+ import { is } from './utils/is';
11
+ import { mutate } from './utils/mutate';
12
+ import * as i0 from "@angular/core";
13
+ export const NGT_PROXY_INSTANCE = Symbol.for('__ngt__proxy__instance__');
14
+ export const NGT_INSTANCE_REF_FACTORY = new InjectionToken('NgtInstance[instanceRef] factory');
15
+ export function provideInstanceRef(ctor, factory) {
16
+ return {
17
+ provide: NGT_INSTANCE_REF_FACTORY,
18
+ useFactory: (instance) => {
19
+ if (factory) {
20
+ return () => factory(instance);
21
+ }
22
+ return () => instance['instanceRef'] || instance['instance']['instanceRef'];
23
+ },
24
+ deps: [ctor],
25
+ };
26
+ }
27
+ export function injectInstanceRef(options = {}) {
28
+ return inject(NGT_INSTANCE_REF_FACTORY, options);
29
+ }
30
+ export function injectInstance(options = {}) {
31
+ return inject(NgtInstance, options);
32
+ }
33
+ const supportedEvents = [
34
+ 'click',
35
+ 'contextmenu',
36
+ 'dblclick',
37
+ 'pointerup',
38
+ 'pointerdown',
39
+ 'pointerover',
40
+ 'pointerout',
41
+ 'pointerenter',
42
+ 'pointerleave',
43
+ 'pointermove',
44
+ 'pointermissed',
45
+ 'pointercancel',
46
+ 'wheel',
47
+ ];
48
+ export class NgtInstance extends NgtComponentStore {
49
+ constructor() {
50
+ super(...arguments);
51
+ this.priority = 0;
52
+ this.click = new EventEmitter();
53
+ this.contextmenu = new EventEmitter();
54
+ this.dblclick = new EventEmitter();
55
+ this.pointerup = new EventEmitter();
56
+ this.pointerdown = new EventEmitter();
57
+ this.pointerover = new EventEmitter();
58
+ this.pointerout = new EventEmitter();
59
+ this.pointerenter = new EventEmitter();
60
+ this.pointerleave = new EventEmitter();
61
+ this.pointermove = new EventEmitter();
62
+ this.pointermissed = new EventEmitter();
63
+ this.pointercancel = new EventEmitter();
64
+ this.wheel = new EventEmitter();
65
+ this.zone = inject(NgZone);
66
+ this.store = inject(NgtStore);
67
+ this.parentRef = injectInstanceRef({ skipSelf: true, optional: true });
68
+ this._isRaw = false;
69
+ this.hasEmittedAlready = false;
70
+ this.instanceReady = this.effect(tapEffect(() => {
71
+ this.handleEvents();
72
+ let attachToParentSubscription;
73
+ if (this.parentRef) {
74
+ attachToParentSubscription = this.attachToParent(this.parent.pipe(filter((parent) => !!parent)));
75
+ const { noAttach, skipWrapper } = this.read();
76
+ if (!noAttach && !skipWrapper) {
77
+ const parentInstanceNode = getInstanceLocalState(getInstanceLocalState(this.instanceValue)?.parentRef?.value);
78
+ if (parentInstanceNode) {
79
+ const collections = is.object3d(this.instanceValue)
80
+ ? parentInstanceNode.objectsRefs
81
+ : parentInstanceNode.instancesRefs;
82
+ collections.set((s) => [...s, this.instanceRef]);
83
+ }
84
+ }
85
+ }
86
+ let beforeRenderCleanUp;
87
+ if (this.beforeRender && is.object3d(this.instanceValue) && is.object3d(this.proxyInstance)) {
88
+ beforeRenderCleanUp = this.store
89
+ .read((s) => s.internal)
90
+ .subscribe((state, object) => this.beforeRender(state, object), this.priority, this.store.read, this.proxyInstance);
91
+ }
92
+ if (this.readyCallback)
93
+ this.readyCallback(this.instanceValue);
94
+ return () => {
95
+ beforeRenderCleanUp?.();
96
+ attachToParentSubscription?.unsubscribe();
97
+ };
98
+ }));
99
+ this.handleEvents = this.effect(tapEffect(() => {
100
+ if (this.instanceValue && is.object3d(this.instanceValue)) {
101
+ const observedEvents = supportedEvents.reduce((result, event) => {
102
+ const controllerEvent = this[event].observed ? this[event] : null;
103
+ if (controllerEvent) {
104
+ result.handlers[event] = this.eventNameToHandler(controllerEvent);
105
+ result.eventCount += 1;
106
+ }
107
+ return result;
108
+ }, { handlers: {}, eventCount: 0 });
109
+ // patch __ngt__ with events
110
+ applyProps(this.__ngt__, observedEvents);
111
+ // add as an interaction if there are events observed
112
+ if (observedEvents.eventCount > 0) {
113
+ getInstanceLocalState(this.instanceValue)?.rootFactory().addInteraction(this.instanceValue);
114
+ }
115
+ }
116
+ return () => {
117
+ if (is.object3d(this.instanceValue) && this.__ngt__.eventCount > 0) {
118
+ getInstanceLocalState(this.instanceValue)?.rootFactory().removeInteraction(this.instanceValue.uuid);
119
+ }
120
+ };
121
+ }));
122
+ this.attachToParent = this.effect(tap(() => {
123
+ const attach = this.read((s) => s.attach);
124
+ let parentInstanceRef = this.__ngt__?.parentRef;
125
+ // if no parentInstance, try re-run the factory due to late init
126
+ if (!parentInstanceRef || !parentInstanceRef.value) {
127
+ // return early if failed to retrieve
128
+ if (!this.parent?.value)
129
+ return;
130
+ // reassign on instance internal state
131
+ if (this.__ngt__) {
132
+ this.__ngt__.parentRef = this.parent;
133
+ }
134
+ parentInstanceRef = this.parent;
135
+ }
136
+ if (typeof attach === 'function') {
137
+ const attachCleanUp = attach(parentInstanceRef, this.instanceRef, this.store.read);
138
+ if (attachCleanUp) {
139
+ this.__ngt__.attach = attachCleanUp;
140
+ }
141
+ }
142
+ else {
143
+ const propertyToAttach = [...attach];
144
+ // if propertyToAttach is empty
145
+ if (propertyToAttach.length === 0) {
146
+ // this might be the case where we are attaching an object3D to the parent object3D
147
+ if (is.object3d(this.instanceValue) &&
148
+ is.object3d(this.proxyInstance) &&
149
+ is.object3d(this.parent?.value)) {
150
+ this.parent?.value.add(this.proxyInstance);
151
+ }
152
+ }
153
+ else {
154
+ // array material handling
155
+ if (propertyToAttach[0] === 'material' &&
156
+ propertyToAttach[1] &&
157
+ typeof Number(propertyToAttach[1]) === 'number' &&
158
+ is.material(this.instanceValue)) {
159
+ if (!Array.isArray(parentInstanceRef.value.material)) {
160
+ parentInstanceRef.value.material = [];
161
+ }
162
+ }
163
+ // retrieve the current value on the parentInstance, so we can reset it later
164
+ if (this.__ngt__) {
165
+ this.__ngt__.attachValue = propertyToAttach.reduce((value, property) => value[property], parentInstanceRef.value);
166
+ }
167
+ // attach the instance value on the parent
168
+ mutate(parentInstanceRef.value, this.proxyInstance, propertyToAttach);
169
+ }
170
+ // validate on the instance
171
+ invalidateInstance(this.instanceValue);
172
+ // validate on the parent
173
+ if (getInstanceLocalState(parentInstanceRef.value)) {
174
+ invalidateInstance(parentInstanceRef.value);
175
+ }
176
+ // save the attach
177
+ if (this.__ngt__) {
178
+ this.__ngt__.attach = propertyToAttach;
179
+ }
180
+ this.write({ attach: propertyToAttach });
181
+ }
182
+ }));
183
+ }
184
+ set ref(instance) {
185
+ this.write({ instanceRef: is.ref(instance) ? instance : new NgtRef(instance) });
186
+ }
187
+ set skipWrapper(skipWrapper) {
188
+ this.write({ skipWrapper });
189
+ this.write({ skipWrapperExplicit: true });
190
+ }
191
+ set skipInit(skipInit) {
192
+ this.write({ skipInit });
193
+ this.write({ skipInitExplicit: true });
194
+ }
195
+ set noAttach(noAttach) {
196
+ this.write({ noAttach });
197
+ this.write({ noAttachExplicit: true });
198
+ }
199
+ set attach(value) {
200
+ if (value) {
201
+ const attach = typeof value === 'function'
202
+ ? value
203
+ : Array.isArray(value)
204
+ ? value.map((item) => (typeof item === 'number' ? item.toString() : item))
205
+ : [value];
206
+ this.write({ attach, attachExplicit: true });
207
+ }
208
+ }
209
+ set isRaw(val) {
210
+ this._isRaw = val;
211
+ }
212
+ initialize() {
213
+ super.initialize();
214
+ this.write({
215
+ instanceRef: new NgtRef(null),
216
+ attach: [],
217
+ noAttach: false,
218
+ skipWrapper: false,
219
+ skipInit: false,
220
+ });
221
+ }
222
+ ngOnInit() {
223
+ this.zone.runOutsideAngular(() => {
224
+ this.store.onReady(() => {
225
+ this.instanceReady(this.instanceRef.pipe(filter((instance) => !!instance)));
226
+ });
227
+ });
228
+ }
229
+ get instanceRef() {
230
+ return this.read((s) => s.instanceRef);
231
+ }
232
+ get instanceValue() {
233
+ if (!this.instanceRef.value)
234
+ return this.instanceRef.value;
235
+ return this._isRaw ? this.instanceRef.value?.valueOf() : this.instanceRef.value;
236
+ }
237
+ get proxyInstance() {
238
+ return this.instanceValue?.[NGT_PROXY_INSTANCE];
239
+ }
240
+ get __ngt__() {
241
+ return getInstanceLocalState(this._isRaw ? this.instanceRef.value : this.instanceValue);
242
+ }
243
+ get parent() {
244
+ return this.parentRef?.();
245
+ }
246
+ ngOnDestroy() {
247
+ this.zone.runOutsideAngular(() => {
248
+ this.destroy();
249
+ });
250
+ super.ngOnDestroy();
251
+ }
252
+ destroy() {
253
+ if (this.instanceValue) {
254
+ if (is.object3d(this.instanceValue)) {
255
+ const parentInstance = this.parent;
256
+ if (parentInstance && is.object3d(parentInstance.value)) {
257
+ removeInteractivity(this.__ngt__.stateFactory.bind(this.__ngt__), this.instanceValue);
258
+ parentInstance.value.remove(this.instanceValue);
259
+ invalidateInstance(parentInstance.value);
260
+ }
261
+ if (this.instanceValue.clear != null) {
262
+ this.instanceValue.clear();
263
+ }
264
+ }
265
+ else {
266
+ if (this.__ngt__) {
267
+ // non-scene objects
268
+ const previousAttach = this.__ngt__.attach;
269
+ if (previousAttach != null) {
270
+ if (typeof previousAttach === 'function') {
271
+ previousAttach();
272
+ }
273
+ else {
274
+ const previousAttachValue = this.__ngt__.attachValue;
275
+ if (this.__ngt__.parentRef && this.__ngt__.parentRef.value) {
276
+ mutate(this.__ngt__.parentRef.value, previousAttachValue, previousAttach);
277
+ }
278
+ }
279
+ if (this.__ngt__.parentRef && this.__ngt__.parentRef.value) {
280
+ invalidateInstance(this.__ngt__.parentRef.value);
281
+ }
282
+ }
283
+ }
284
+ }
285
+ const dispose = this.instanceValue['dispose'];
286
+ if (dispose && typeof dispose === 'function') {
287
+ dispose.apply(this.instanceValue);
288
+ }
289
+ }
290
+ this.write({ attach: [] });
291
+ this.instanceRef.complete();
292
+ }
293
+ eventNameToHandler(controllerEvent) {
294
+ return (event) => {
295
+ // go back into Angular Zone so that state updates on these events trigger CD
296
+ this.zone.run(() => {
297
+ controllerEvent.emit(event);
298
+ });
299
+ };
300
+ }
301
+ }
302
+ NgtInstance.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgtInstance, deps: null, target: i0.ɵɵFactoryTarget.Directive });
303
+ NgtInstance.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.0", type: NgtInstance, isStandalone: true, selector: "[ngtInstance]", inputs: { ref: "ref", skipWrapper: "skipWrapper", skipInit: "skipInit", noAttach: "noAttach", attach: "attach", priority: "priority", beforeRender: "beforeRender", readyCallback: "readyCallback", updateCallback: "updateCallback" }, outputs: { click: "click", contextmenu: "contextmenu", dblclick: "dblclick", pointerup: "pointerup", pointerdown: "pointerdown", pointerover: "pointerover", pointerout: "pointerout", pointerenter: "pointerenter", pointerleave: "pointerleave", pointermove: "pointermove", pointermissed: "pointermissed", pointercancel: "pointercancel", wheel: "wheel" }, exportAs: ["ngtInstance"], usesInheritance: true, ngImport: i0 });
304
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgtInstance, decorators: [{
305
+ type: Directive,
306
+ args: [{
307
+ selector: '[ngtInstance]',
308
+ exportAs: 'ngtInstance',
309
+ standalone: true,
310
+ }]
311
+ }], propDecorators: { ref: [{
312
+ type: Input
313
+ }], skipWrapper: [{
314
+ type: Input
315
+ }], skipInit: [{
316
+ type: Input
317
+ }], noAttach: [{
318
+ type: Input
319
+ }], attach: [{
320
+ type: Input
321
+ }], priority: [{
322
+ type: Input
323
+ }], beforeRender: [{
324
+ type: Input
325
+ }], readyCallback: [{
326
+ type: Input
327
+ }], updateCallback: [{
328
+ type: Input
329
+ }], click: [{
330
+ type: Output
331
+ }], contextmenu: [{
332
+ type: Output
333
+ }], dblclick: [{
334
+ type: Output
335
+ }], pointerup: [{
336
+ type: Output
337
+ }], pointerdown: [{
338
+ type: Output
339
+ }], pointerover: [{
340
+ type: Output
341
+ }], pointerout: [{
342
+ type: Output
343
+ }], pointerenter: [{
344
+ type: Output
345
+ }], pointerleave: [{
346
+ type: Output
347
+ }], pointermove: [{
348
+ type: Output
349
+ }], pointermissed: [{
350
+ type: Output
351
+ }], pointercancel: [{
352
+ type: Output
353
+ }], wheel: [{
354
+ type: Output
355
+ }] } });
356
+ export const NGT_INSTANCE_INPUTS = [
357
+ 'ref',
358
+ 'attach',
359
+ 'skipWrapper',
360
+ 'skipInit',
361
+ 'noAttach',
362
+ 'beforeRender',
363
+ 'priority',
364
+ 'updateCallback',
365
+ 'readyCallback',
366
+ ];
367
+ export const NGT_INSTANCE_OUTPUTS = [...supportedEvents];
368
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyLXRocmVlL3NyYy9saWIvaW5zdGFuY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLGNBQWMsRUFFZCxLQUFLLEVBQ0wsTUFBTSxFQUdOLE1BQU0sR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFnQixHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDeEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBWTFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFFeEMsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0FBRXpFLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLElBQUksY0FBYyxDQUF5QixrQ0FBa0MsQ0FBQyxDQUFDO0FBQ3ZILE1BQU0sVUFBVSxrQkFBa0IsQ0FHaEMsSUFBVyxFQUFFLE9BQW1EO0lBQzlELE9BQU87UUFDSCxPQUFP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bnQiOlsiaW1wb3J0IHtcbiAgICBEaXJlY3RpdmUsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGluamVjdCxcbiAgICBJbmplY3Rpb25Ub2tlbixcbiAgICBJbmplY3RPcHRpb25zLFxuICAgIElucHV0LFxuICAgIE5nWm9uZSxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmaWx0ZXIsIFN1YnNjcmlwdGlvbiwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBOZ3RSZWYgfSBmcm9tICcuL3JlZic7XG5pbXBvcnQgeyBOZ3RDb21wb25lbnRTdG9yZSwgdGFwRWZmZWN0IH0gZnJvbSAnLi9zdG9yZXMvY29tcG9uZW50LXN0b3JlJztcbmltcG9ydCB7IE5ndFN0b3JlIH0gZnJvbSAnLi9zdG9yZXMvc3RvcmUnO1xuaW1wb3J0IHR5cGUge1xuICAgIE5ndEFueUN0b3IsXG4gICAgTmd0QW55RnVuY3Rpb24sXG4gICAgTmd0QW55UmVjb3JkLFxuICAgIE5ndEF0dGFjaEZ1bmN0aW9uLFxuICAgIE5ndEJlZm9yZVJlbmRlckNhbGxiYWNrLFxuICAgIE5ndEV2ZW50SGFuZGxlcnMsXG4gICAgTmd0SW5zdGFuY2VMb2NhbFN0YXRlLFxuICAgIE5ndE9ic2VydmFibGVJbnB1dCxcbiAgICBOZ3RUaHJlZUV2ZW50LFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGFwcGx5UHJvcHMgfSBmcm9tICcuL3V0aWxzL2FwcGx5LXByb3BzJztcbmltcG9ydCB7IHJlbW92ZUludGVyYWN0aXZpdHkgfSBmcm9tICcuL3V0aWxzL2V2ZW50cyc7XG5pbXBvcnQgeyBnZXRJbnN0YW5jZUxvY2FsU3RhdGUgfSBmcm9tICcuL3V0aWxzL2dldC1pbnN0YW5jZS1sb2NhbC1zdGF0ZSc7XG5pbXBvcnQgeyBpbnZhbGlkYXRlSW5zdGFuY2UgfSBmcm9tICcuL3V0aWxzL2luc3RhbmNlJztcbmltcG9ydCB7IGlzIH0gZnJvbSAnLi91dGlscy9pcyc7XG5pbXBvcnQgeyBtdXRhdGUgfSBmcm9tICcuL3V0aWxzL211dGF0ZSc7XG5cbmV4cG9ydCBjb25zdCBOR1RfUFJPWFlfSU5TVEFOQ0UgPSBTeW1ib2wuZm9yKCdfX25ndF9fcHJveHlfX2luc3RhbmNlX18nKTtcblxuZXhwb3J0IGNvbnN0IE5HVF9JTlNUQU5DRV9SRUZfRkFDVE9SWSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxOZ3RBbnlGdW5jdGlvbjxOZ3RSZWY+PignTmd0SW5zdGFuY2VbaW5zdGFuY2VSZWZdIGZhY3RvcnknKTtcbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlSW5zdGFuY2VSZWY8XG4gICAgVEluc3RhbmNlVHlwZSBleHRlbmRzIG9iamVjdCA9IGFueSxcbiAgICBUQ3RvciBleHRlbmRzIE5ndEFueUN0b3I8VEluc3RhbmNlVHlwZT4gPSBOZ3RBbnlDdG9yPFRJbnN0YW5jZVR5cGU+XG4+KGN0b3I6IFRDdG9yLCBmYWN0b3J5PzogKGluc3RhbmNlOiBJbnN0YW5jZVR5cGU8VEN0b3I+KSA9PiBOZ3RSZWYpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBwcm92aWRlOiBOR1RfSU5TVEFOQ0VfUkVGX0ZBQ1RPUlksXG4gICAgICAgIHVzZUZhY3Rvcnk6IChpbnN0YW5jZTogSW5zdGFuY2VUeXBlPFRDdG9yPikgPT4ge1xuICAgICAgICAgICAgaWYgKGZhY3RvcnkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4gZmFjdG9yeShpbnN0YW5jZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiAoKSA9PlxuICAgICAgICAgICAgICAgIChpbnN0YW5jZSBhcyBOZ3RBbnlSZWNvcmQpWydpbnN0YW5jZVJlZiddIHx8IChpbnN0YW5jZSBhcyBOZ3RBbnlSZWNvcmQpWydpbnN0YW5jZSddWydpbnN0YW5jZVJlZiddO1xuICAgICAgICB9LFxuICAgICAgICBkZXBzOiBbY3Rvcl0sXG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RJbnN0YW5jZVJlZigpOiBOZ3RBbnlGdW5jdGlvbjxOZ3RSZWY+O1xuZXhwb3J0IGZ1bmN0aW9uIGluamVjdEluc3RhbmNlUmVmKG9wdGlvbnM6IEluamVjdE9wdGlvbnMgJiB7IG9wdGlvbmFsPzogZmFsc2UgfSk6IE5ndEFueUZ1bmN0aW9uPE5ndFJlZj47XG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0SW5zdGFuY2VSZWYob3B0aW9uczogSW5qZWN0T3B0aW9ucyAmIHsgb3B0aW9uYWw/OiB0cnVlIH0pOiBOZ3RBbnlGdW5jdGlvbjxOZ3RSZWY+IHwgbnVsbDtcbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RJbnN0YW5jZVJlZihvcHRpb25zOiBJbmplY3RPcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gaW5qZWN0KE5HVF9JTlNUQU5DRV9SRUZfRkFDVE9SWSwgb3B0aW9ucyk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0SW5zdGFuY2VTdGF0ZTxUSW5zdGFuY2UgZXh0ZW5kcyBvYmplY3QgPSBOZ3RBbnlSZWNvcmQ+IHtcbiAgICBpbnN0YW5jZVJlZjogTmd0UmVmPFRJbnN0YW5jZT47XG4gICAgaW5zdGFuY2VBcmdzOiB1bmtub3duW107XG4gICAgYXR0YWNoOiBzdHJpbmdbXSB8IE5ndEF0dGFjaEZ1bmN0aW9uO1xuICAgIG5vQXR0YWNoOiBib29sZWFuO1xuICAgIHNraXBXcmFwcGVyOiBib29sZWFuO1xuICAgIHNraXBJbml0OiBib29sZWFuO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdEluc3RhbmNlPFQgZXh0ZW5kcyBvYmplY3Q+KCk6IE5ndEluc3RhbmNlPFQ+O1xuZXhwb3J0IGZ1bmN0aW9uIGluamVjdEluc3RhbmNlPFQgZXh0ZW5kcyBvYmplY3Q+KG9wdGlvbnM6IEluamVjdE9wdGlvbnMgJiB7IG9wdGlvbmFsPzogZmFsc2UgfSk6IE5ndEluc3RhbmNlPFQ+O1xuZXhwb3J0IGZ1bmN0aW9uIGluamVjdEluc3RhbmNlPFQgZXh0ZW5kcyBvYmplY3Q+KG9wdGlvbnM6IEluamVjdE9wdGlvbnMgJiB7IG9wdGlvbmFsPzogdHJ1ZSB9KTogTmd0SW5zdGFuY2U8VD4gfCBudWxsO1xuZXhwb3J0IGZ1bmN0aW9uIGluamVjdEluc3RhbmNlKG9wdGlvbnM6IEluamVjdE9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBpbmplY3QoTmd0SW5zdGFuY2UsIG9wdGlvbnMpO1xufVxuXG5jb25zdCBzdXBwb3J0ZWRFdmVudHMgPSBbXG4gICAgJ2NsaWNrJyxcbiAgICAnY29udGV4dG1lbnUnLFxuICAgICdkYmxjbGljaycsXG4gICAgJ3BvaW50ZXJ1cCcsXG4gICAgJ3BvaW50ZXJkb3duJyxcbiAgICAncG9pbnRlcm92ZXInLFxuICAgICdwb2ludGVyb3V0JyxcbiAgICAncG9pbnRlcmVudGVyJyxcbiAgICAncG9pbnRlcmxlYXZlJyxcbiAgICAncG9pbnRlcm1vdmUnLFxuICAgICdwb2ludGVybWlzc2VkJyxcbiAgICAncG9pbnRlcmNhbmNlbCcsXG4gICAgJ3doZWVsJyxcbl0gYXMgY29uc3Q7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW25ndEluc3RhbmNlXScsXG4gICAgZXhwb3J0QXM6ICduZ3RJbnN0YW5jZScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0SW5zdGFuY2U8XG4gICAgICAgIFRJbnN0YW5jZSBleHRlbmRzIG9iamVjdCA9IGFueSxcbiAgICAgICAgVEluc3RhbmNlU3RhdGUgZXh0ZW5kcyBOZ3RJbnN0YW5jZVN0YXRlPFRJbnN0YW5jZT4gPSBOZ3RJbnN0YW5jZVN0YXRlPFRJbnN0YW5jZT5cbiAgICA+XG4gICAgZXh0ZW5kcyBOZ3RDb21wb25lbnRTdG9yZTxUSW5zdGFuY2VTdGF0ZT5cbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95XG57XG4gICAgQElucHV0KCkgc2V0IHJlZihpbnN0YW5jZTogVEluc3RhbmNlIHwgTmd0UmVmPFRJbnN0YW5jZT4pIHtcbiAgICAgICAgdGhpcy53cml0ZSh7IGluc3RhbmNlUmVmOiBpcy5yZWYoaW5zdGFuY2UpID8gaW5zdGFuY2UgOiBuZXcgTmd0UmVmKGluc3RhbmNlKSB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgc2tpcFdyYXBwZXIoc2tpcFdyYXBwZXI6IE5ndE9ic2VydmFibGVJbnB1dDxib29sZWFuPikge1xuICAgICAgICB0aGlzLndyaXRlKHsgc2tpcFdyYXBwZXIgfSk7XG4gICAgICAgIHRoaXMud3JpdGUoeyBza2lwV3JhcHBlckV4cGxpY2l0OiB0cnVlIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBza2lwSW5pdChza2lwSW5pdDogTmd0T2JzZXJ2YWJsZUlucHV0PGJvb2xlYW4+KSB7XG4gICAgICAgIHRoaXMud3JpdGUoeyBza2lwSW5pdCB9KTtcbiAgICAgICAgdGhpcy53cml0ZSh7IHNraXBJbml0RXhwbGljaXQ6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IG5vQXR0YWNoKG5vQXR0YWNoOiBOZ3RPYnNlcnZhYmxlSW5wdXQ8Ym9vbGVhbj4pIHtcbiAgICAgICAgdGhpcy53cml0ZSh7IG5vQXR0YWNoIH0pO1xuICAgICAgICB0aGlzLndyaXRlKHsgbm9BdHRhY2hFeHBsaWNpdDogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgYXR0YWNoKHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSB8IFtzdHJpbmcsIC4uLihzdHJpbmcgfCBudW1iZXIpW11dIHwgTmd0QXR0YWNoRnVuY3Rpb24gfCB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBhdHRhY2ggPVxuICAgICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgICAgICAgICA/IHZhbHVlXG4gICAgICAgICAgICAgICAgICAgIDogQXJyYXkuaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgPyB2YWx1ZS5tYXAoKGl0ZW0pID0+ICh0eXBlb2YgaXRlbSA9PT0gJ251bWJlcicgPyBpdGVtLnRvU3RyaW5nKCkgOiBpdGVtKSlcbiAgICAgICAgICAgICAgICAgICAgOiBbdmFsdWVdO1xuXG4gICAgICAgICAgICB0aGlzLndyaXRlKHsgYXR0YWNoLCBhdHRhY2hFeHBsaWNpdDogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBJbnB1dCgpIHByaW9yaXR5ID0gMDtcbiAgICBASW5wdXQoKSBiZWZvcmVSZW5kZXI/OiBOZ3RCZWZvcmVSZW5kZXJDYWxsYmFjazxUSW5zdGFuY2U+O1xuXG4gICAgQElucHV0KCkgcmVhZHlDYWxsYmFjaz86ICgoaW5zdGFuY2U6IFRJbnN0YW5jZSkgPT4gdm9pZCkgfCAoKCkgPT4gdm9pZCk7XG4gICAgQElucHV0KCkgdXBkYXRlQ2FsbGJhY2s/OiAoKGluc3RhbmNlOiBUSW5zdGFuY2UpID0+IHZvaWQpIHwgKCgpID0+IHZvaWQpO1xuXG4gICAgQE91dHB1dCgpIGNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxOZ3RUaHJlZUV2ZW50PE1vdXNlRXZlbnQ+PigpO1xuICAgIEBPdXRwdXQoKSBjb250ZXh0bWVudSA9IG5ldyBFdmVudEVtaXR0ZXI8Tmd0VGhyZWVFdmVudDxNb3VzZUV2ZW50Pj4oKTtcbiAgICBAT3V0cHV0KCkgZGJsY2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPE5ndFRocmVlRXZlbnQ8TW91c2VFdmVudD4+KCk7XG4gICAgQE91dHB1dCgpIHBvaW50ZXJ1cCA9IG5ldyBFdmVudEVtaXR0ZXI8Tmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+PigpO1xuICAgIEBPdXRwdXQoKSBwb2ludGVyZG93biA9IG5ldyBFdmVudEVtaXR0ZXI8Tmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+PigpO1xuICAgIEBPdXRwdXQoKSBwb2ludGVyb3ZlciA9IG5ldyBFdmVudEVtaXR0ZXI8Tmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+PigpO1xuICAgIEBPdXRwdXQoKSBwb2ludGVyb3V0ID0gbmV3IEV2ZW50RW1pdHRlcjxOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4+KCk7XG4gICAgQE91dHB1dCgpIHBvaW50ZXJlbnRlciA9IG5ldyBFdmVudEVtaXR0ZXI8Tmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+PigpO1xuICAgIEBPdXRwdXQoKSBwb2ludGVybGVhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPE5ndFRocmVlRXZlbnQ8UG9pbnRlckV2ZW50Pj4oKTtcbiAgICBAT3V0cHV0KCkgcG9pbnRlcm1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyPE5ndFRocmVlRXZlbnQ8UG9pbnRlckV2ZW50Pj4oKTtcbiAgICBAT3V0cHV0KCkgcG9pbnRlcm1pc3NlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Tmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+PigpO1xuICAgIEBPdXRwdXQoKSBwb2ludGVyY2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcjxOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4+KCk7XG4gICAgQE91dHB1dCgpIHdoZWVsID0gbmV3IEV2ZW50RW1pdHRlcjxOZ3RUaHJlZUV2ZW50PFdoZWVsRXZlbnQ+PigpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSB6b25lID0gaW5qZWN0KE5nWm9uZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBzdG9yZSA9IGluamVjdChOZ3RTdG9yZSk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhcmVudFJlZiA9IGluamVjdEluc3RhbmNlUmVmKHsgc2tpcFNlbGY6IHRydWUsIG9wdGlvbmFsOiB0cnVlIH0pO1xuICAgIHByaXZhdGUgX2lzUmF3ID0gZmFsc2U7XG5cbiAgICBzZXQgaXNSYXcodmFsOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2lzUmF3ID0gdmFsO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFzRW1pdHRlZEFscmVhZHkgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgaW5zdGFuY2VSZWFkeSA9IHRoaXMuZWZmZWN0KFxuICAgICAgICB0YXBFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVFdmVudHMoKTtcblxuICAgICAgICAgICAgbGV0IGF0dGFjaFRvUGFyZW50U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gICAgICAgICAgICBpZiAodGhpcy5wYXJlbnRSZWYpIHtcbiAgICAgICAgICAgICAgICBhdHRhY2hUb1BhcmVudFN1YnNjcmlwdGlvbiA9IHRoaXMuYXR0YWNoVG9QYXJlbnQodGhpcy5wYXJlbnQhLnBpcGUoZmlsdGVyKChwYXJlbnQpID0+ICEhcGFyZW50KSkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgbm9BdHRhY2gsIHNraXBXcmFwcGVyIH0gPSB0aGlzLnJlYWQoKTtcbiAgICAgICAgICAgICAgICBpZiAoIW5vQXR0YWNoICYmICFza2lwV3JhcHBlcikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJbnN0YW5jZU5vZGUgPSBnZXRJbnN0YW5jZUxvY2FsU3RhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRJbnN0YW5jZUxvY2FsU3RhdGUodGhpcy5pbnN0YW5jZVZhbHVlKT8ucGFyZW50UmVmPy52YWx1ZVxuICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRJbnN0YW5jZU5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbGxlY3Rpb25zID0gaXMub2JqZWN0M2QodGhpcy5pbnN0YW5jZVZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gcGFyZW50SW5zdGFuY2VOb2RlLm9iamVjdHNSZWZzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBwYXJlbnRJbnN0YW5jZU5vZGUuaW5zdGFuY2VzUmVmcztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25zLnNldCgocykgPT4gWy4uLnMsIHRoaXMuaW5zdGFuY2VSZWZdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGJlZm9yZVJlbmRlckNsZWFuVXA6ICgpID0+IHZvaWQ7XG4gICAgICAgICAgICBpZiAodGhpcy5iZWZvcmVSZW5kZXIgJiYgaXMub2JqZWN0M2QodGhpcy5pbnN0YW5jZVZhbHVlKSAmJiBpcy5vYmplY3QzZCh0aGlzLnByb3h5SW5zdGFuY2UpKSB7XG4gICAgICAgICAgICAgICAgYmVmb3JlUmVuZGVyQ2xlYW5VcCA9IHRoaXMuc3RvcmVcbiAgICAgICAgICAgICAgICAgICAgLnJlYWQoKHMpID0+IHMuaW50ZXJuYWwpXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgICAgICAgICAoc3RhdGUsIG9iamVjdCkgPT4gdGhpcy5iZWZvcmVSZW5kZXIhKHN0YXRlLCBvYmplY3QpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmlvcml0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUucmVhZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJveHlJbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5yZWFkeUNhbGxiYWNrKSB0aGlzLnJlYWR5Q2FsbGJhY2sodGhpcy5pbnN0YW5jZVZhbHVlKTtcblxuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBiZWZvcmVSZW5kZXJDbGVhblVwPy4oKTtcbiAgICAgICAgICAgICAgICBhdHRhY2hUb1BhcmVudFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgKTtcblxuICAgIHByaXZhdGUgaGFuZGxlRXZlbnRzID0gdGhpcy5lZmZlY3Q8dm9pZD4oXG4gICAgICAgIHRhcEVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5pbnN0YW5jZVZhbHVlICYmIGlzLm9iamVjdDNkKHRoaXMuaW5zdGFuY2VWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvYnNlcnZlZEV2ZW50cyA9IHN1cHBvcnRlZEV2ZW50cy5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgICAgIChyZXN1bHQsIGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sbGVyRXZlbnQgPSB0aGlzW2V2ZW50XS5vYnNlcnZlZCA/IHRoaXNbZXZlbnRdIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sbGVyRXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuaGFuZGxlcnNbZXZlbnRdID0gdGhpcy5ldmVudE5hbWVUb0hhbmRsZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXJFdmVudCBhcyBFdmVudEVtaXR0ZXI8Tmd0VGhyZWVFdmVudDxhbnk+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmV2ZW50Q291bnQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgaGFuZGxlcnM6IHt9LCBldmVudENvdW50OiAwIH0gYXMge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcnM6IE5ndEV2ZW50SGFuZGxlcnM7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudENvdW50OiBudW1iZXI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgLy8gcGF0Y2ggX19uZ3RfXyB3aXRoIGV2ZW50c1xuICAgICAgICAgICAgICAgIGFwcGx5UHJvcHModGhpcy5fX25ndF9fLCBvYnNlcnZlZEV2ZW50cyk7XG5cbiAgICAgICAgICAgICAgICAvLyBhZGQgYXMgYW4gaW50ZXJhY3Rpb24gaWYgdGhlcmUgYXJlIGV2ZW50cyBvYnNlcnZlZFxuICAgICAgICAgICAgICAgIGlmIChvYnNlcnZlZEV2ZW50cy5ldmVudENvdW50ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBnZXRJbnN0YW5jZUxvY2FsU3RhdGUodGhpcy5pbnN0YW5jZVZhbHVlKT8ucm9vdEZhY3RvcnkoKS5hZGRJbnRlcmFjdGlvbih0aGlzLmluc3RhbmNlVmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlzLm9iamVjdDNkKHRoaXMuaW5zdGFuY2VWYWx1ZSkgJiYgdGhpcy5fX25ndF9fLmV2ZW50Q291bnQgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGdldEluc3RhbmNlTG9jYWxTdGF0ZSh0aGlzLmluc3RhbmNlVmFsdWUpPy5yb290RmFjdG9yeSgpLnJlbW92ZUludGVyYWN0aW9uKHRoaXMuaW5zdGFuY2VWYWx1ZS51dWlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGF0dGFjaFRvUGFyZW50ID0gdGhpcy5lZmZlY3QoXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhdHRhY2ggPSB0aGlzLnJlYWQoKHMpID0+IHMuYXR0YWNoKTtcblxuICAgICAgICAgICAgbGV0IHBhcmVudEluc3RhbmNlUmVmID0gdGhpcy5fX25ndF9fPy5wYXJlbnRSZWY7XG5cbiAgICAgICAgICAgIC8vIGlmIG5vIHBhcmVudEluc3RhbmNlLCB0cnkgcmUtcnVuIHRoZSBmYWN0b3J5IGR1ZSB0byBsYXRlIGluaXRcbiAgICAgICAgICAgIGlmICghcGFyZW50SW5zdGFuY2VSZWYgfHwgIXBhcmVudEluc3RhbmNlUmVmLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgLy8gcmV0dXJuIGVhcmx5IGlmIGZhaWxlZCB0byByZXRyaWV2ZVxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5wYXJlbnQ/LnZhbHVlKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICAvLyByZWFzc2lnbiBvbiBpbnN0YW5jZSBpbnRlcm5hbCBzdGF0ZVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9fbmd0X18pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fX25ndF9fLnBhcmVudFJlZiA9IHRoaXMucGFyZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwYXJlbnRJbnN0YW5jZVJlZiA9IHRoaXMucGFyZW50O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGF0dGFjaCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGF0dGFjaENsZWFuVXAgPSBhdHRhY2gocGFyZW50SW5zdGFuY2VSZWYsIHRoaXMuaW5zdGFuY2VSZWYsIHRoaXMuc3RvcmUucmVhZCk7XG4gICAgICAgICAgICAgICAgaWYgKGF0dGFjaENsZWFuVXApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fX25ndF9fLmF0dGFjaCA9IGF0dGFjaENsZWFuVXA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0eVRvQXR0YWNoID0gWy4uLmF0dGFjaF07XG5cbiAgICAgICAgICAgICAgICAvLyBpZiBwcm9wZXJ0eVRvQXR0YWNoIGlzIGVtcHR5XG4gICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5VG9BdHRhY2gubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgbWlnaHQgYmUgdGhlIGNhc2Ugd2hlcmUgd2UgYXJlIGF0dGFjaGluZyBhbiBvYmplY3QzRCB0byB0aGUgcGFyZW50IG9iamVjdDNEXG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzLm9iamVjdDNkKHRoaXMuaW5zdGFuY2VWYWx1ZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzLm9iamVjdDNkKHRoaXMucHJveHlJbnN0YW5jZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzLm9iamVjdDNkKHRoaXMucGFyZW50Py52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudD8udmFsdWUuYWRkKHRoaXMucHJveHlJbnN0YW5jZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBhcnJheSBtYXRlcmlhbCBoYW5kbGluZ1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVRvQXR0YWNoWzBdID09PSAnbWF0ZXJpYWwnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVRvQXR0YWNoWzFdICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgTnVtYmVyKHByb3BlcnR5VG9BdHRhY2hbMV0pID09PSAnbnVtYmVyJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgaXMubWF0ZXJpYWwodGhpcy5pbnN0YW5jZVZhbHVlKVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShwYXJlbnRJbnN0YW5jZVJlZi52YWx1ZS5tYXRlcmlhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRJbnN0YW5jZVJlZi52YWx1ZS5tYXRlcmlhbCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gcmV0cmlldmUgdGhlIGN1cnJlbnQgdmFsdWUgb24gdGhlIHBhcmVudEluc3RhbmNlLCBzbyB3ZSBjYW4gcmVzZXQgaXQgbGF0ZXJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX19uZ3RfXykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fX25ndF9fLmF0dGFjaFZhbHVlID0gcHJvcGVydHlUb0F0dGFjaC5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlLCBwcm9wZXJ0eSkgPT4gdmFsdWVbcHJvcGVydHldLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudEluc3RhbmNlUmVmLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gYXR0YWNoIHRoZSBpbnN0YW5jZSB2YWx1ZSBvbiB0aGUgcGFyZW50XG4gICAgICAgICAgICAgICAgICAgIG11dGF0ZShwYXJlbnRJbnN0YW5jZVJlZi52YWx1ZSwgdGhpcy5wcm94eUluc3RhbmNlLCBwcm9wZXJ0eVRvQXR0YWNoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyB2YWxpZGF0ZSBvbiB0aGUgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICBpbnZhbGlkYXRlSW5zdGFuY2UodGhpcy5pbnN0YW5jZVZhbHVlKTtcblxuICAgICAgICAgICAgICAgIC8vIHZhbGlkYXRlIG9uIHRoZSBwYXJlbnRcbiAgICAgICAgICAgICAgICBpZiAoZ2V0SW5zdGFuY2VMb2NhbFN0YXRlKHBhcmVudEluc3RhbmNlUmVmLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICBpbnZhbGlkYXRlSW5zdGFuY2UocGFyZW50SW5zdGFuY2VSZWYudmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIHNhdmUgdGhlIGF0dGFjaFxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9fbmd0X18pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fX25ndF9fLmF0dGFjaCA9IHByb3BlcnR5VG9BdHRhY2g7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMud3JpdGUoeyBhdHRhY2g6IHByb3BlcnR5VG9BdHRhY2ggfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgKTtcblxuICAgIG92ZXJyaWRlIGluaXRpYWxpemUoKSB7XG4gICAgICAgIHN1cGVyLmluaXRpYWxpemUoKTtcbiAgICAgICAgdGhpcy53cml0ZSh7XG4gICAgICAgICAgICBpbnN0YW5jZVJlZjogbmV3IE5ndFJlZihudWxsKSxcbiAgICAgICAgICAgIGF0dGFjaDogW10sXG4gICAgICAgICAgICBub0F0dGFjaDogZmFsc2UsXG4gICAgICAgICAgICBza2lwV3JhcHBlcjogZmFsc2UsXG4gICAgICAgICAgICBza2lwSW5pdDogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5vblJlYWR5KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlUmVhZHkodGhpcy5pbnN0YW5jZVJlZi5waXBlKGZpbHRlcigoaW5zdGFuY2UpID0+ICEhaW5zdGFuY2UpKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0IGluc3RhbmNlUmVmKCk6IE5ndFJlZjxUSW5zdGFuY2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZCgocykgPT4gcy5pbnN0YW5jZVJlZik7XG4gICAgfVxuXG4gICAgZ2V0IGluc3RhbmNlVmFsdWUoKTogVEluc3RhbmNlIHtcbiAgICAgICAgaWYgKCF0aGlzLmluc3RhbmNlUmVmLnZhbHVlKSByZXR1cm4gdGhpcy5pbnN0YW5jZVJlZi52YWx1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzUmF3ID8gKHRoaXMuaW5zdGFuY2VSZWYudmFsdWU/LnZhbHVlT2YoKSBhcyBUSW5zdGFuY2UpIDogdGhpcy5pbnN0YW5jZVJlZi52YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgcHJveHlJbnN0YW5jZSgpOiBUSW5zdGFuY2Uge1xuICAgICAgICByZXR1cm4gKHRoaXMuaW5zdGFuY2VWYWx1ZSBhcyBhbnkpPy5bTkdUX1BST1hZX0lOU1RBTkNFXTtcbiAgICB9XG5cbiAgICBnZXQgX19uZ3RfXygpOiBOZ3RJbnN0YW5jZUxvY2FsU3RhdGUge1xuICAgICAgICByZXR1cm4gZ2V0SW5zdGFuY2VMb2NhbFN0YXRlKFxuICAgICAgICAgICAgdGhpcy5faXNSYXcgPyB0aGlzLmluc3RhbmNlUmVmLnZhbHVlIDogdGhpcy5pbnN0YW5jZVZhbHVlXG4gICAgICAgICkgYXMgTmd0SW5zdGFuY2VMb2NhbFN0YXRlO1xuICAgIH1cblxuICAgIGdldCBwYXJlbnQoKTogTmd0UmVmIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50UmVmPy4oKTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLmluc3RhbmNlVmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChpcy5vYmplY3QzZCh0aGlzLmluc3RhbmNlVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50SW5zdGFuY2UgPSB0aGlzLnBhcmVudDtcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50SW5zdGFuY2UgJiYgaXMub2JqZWN0M2QocGFyZW50SW5zdGFuY2UudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUludGVyYWN0aXZpdHkodGhpcy5fX25ndF9fLnN0YXRlRmFjdG9yeS5iaW5kKHRoaXMuX19uZ3RfXyksIHRoaXMuaW5zdGFuY2VWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudEluc3RhbmNlLnZhbHVlLnJlbW92ZSh0aGlzLmluc3RhbmNlVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpbnZhbGlkYXRlSW5zdGFuY2UocGFyZW50SW5zdGFuY2UudmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmluc3RhbmNlVmFsdWUuY2xlYXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlVmFsdWUuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9fbmd0X18pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gbm9uLXNjZW5lIG9iamVjdHNcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNBdHRhY2ggPSB0aGlzLl9fbmd0X18uYXR0YWNoO1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNBdHRhY2ggIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwcmV2aW91c0F0dGFjaCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzQXR0YWNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzQXR0YWNoVmFsdWUgPSB0aGlzLl9fbmd0X18uYXR0YWNoVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX19uZ3RfXy5wYXJlbnRSZWYgJiYgdGhpcy5fX25ndF9fLnBhcmVudFJlZi52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGUodGhpcy5fX25ndF9fLnBhcmVudFJlZi52YWx1ZSwgcHJldmlvdXNBdHRhY2hWYWx1ZSwgcHJldmlvdXNBdHRhY2gpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX19uZ3RfXy5wYXJlbnRSZWYgJiYgdGhpcy5fX25ndF9fLnBhcmVudFJlZi52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludmFsaWRhdGVJbnN0YW5jZSh0aGlzLl9fbmd0X18ucGFyZW50UmVmLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZGlzcG9zZSA9ICh0aGlzLmluc3RhbmNlVmFsdWUgYXMgTmd0QW55UmVjb3JkKVsnZGlzcG9zZSddO1xuICAgICAgICAgICAgaWYgKGRpc3Bvc2UgJiYgdHlwZW9mIGRpc3Bvc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBkaXNwb3NlLmFwcGx5KHRoaXMuaW5zdGFuY2VWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLndyaXRlKHsgYXR0YWNoOiBbXSB9KTtcbiAgICAgICAgdGhpcy5pbnN0YW5jZVJlZi5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZXZlbnROYW1lVG9IYW5kbGVyKFxuICAgICAgICBjb250cm9sbGVyRXZlbnQ6IEV2ZW50RW1pdHRlcjxOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4+IHwgRXZlbnRFbWl0dGVyPE5ndFRocmVlRXZlbnQ8V2hlZWxFdmVudD4+XG4gICAgKSB7XG4gICAgICAgIHJldHVybiAoZXZlbnQ6IFBhcmFtZXRlcnM8RXhjbHVkZTxOZ3RFdmVudEhhbmRsZXJzW3R5cGVvZiBzdXBwb3J0ZWRFdmVudHNbbnVtYmVyXV0sIHVuZGVmaW5lZD4+WzBdKSA9PiB7XG4gICAgICAgICAgICAvLyBnbyBiYWNrIGludG8gQW5ndWxhciBab25lIHNvIHRoYXQgc3RhdGUgdXBkYXRlcyBvbiB0aGVzZSBldmVudHMgdHJpZ2dlciBDRFxuICAgICAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29udHJvbGxlckV2ZW50LmVtaXQoZXZlbnQgYXMgTmd0VGhyZWVFdmVudDxhbnk+KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IE5HVF9JTlNUQU5DRV9JTlBVVFMgPSBbXG4gICAgJ3JlZicsXG4gICAgJ2F0dGFjaCcsXG4gICAgJ3NraXBXcmFwcGVyJyxcbiAgICAnc2tpcEluaXQnLFxuICAgICdub0F0dGFjaCcsXG4gICAgJ2JlZm9yZVJlbmRlcicsXG4gICAgJ3ByaW9yaXR5JyxcbiAgICAndXBkYXRlQ2FsbGJhY2snLFxuICAgICdyZWFkeUNhbGxiYWNrJyxcbl07XG5cbmV4cG9ydCBjb25zdCBOR1RfSU5TVEFOQ0VfT1VUUFVUUyA9IFsuLi5zdXBwb3J0ZWRFdmVudHNdO1xuIl19
@@ -0,0 +1,15 @@
1
+ import { Pipe } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class NgtMathPipe {
4
+ transform(value, keyOfMath) {
5
+ const params = Array.isArray(value) ? value : [value];
6
+ return Math[keyOfMath](...params);
7
+ }
8
+ }
9
+ NgtMathPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgtMathPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
10
+ NgtMathPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.0.0", ngImport: i0, type: NgtMathPipe, isStandalone: true, name: "math" });
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgtMathPipe, decorators: [{
12
+ type: Pipe,
13
+ args: [{ name: 'math', standalone: true }]
14
+ }] });
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXItdGhyZWUvc3JjL2xpYi9waXBlcy9tYXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOztBQUdwRCxNQUFNLE9BQU8sV0FBVztJQUNwQixTQUFTLENBQ0wsS0FBd0IsRUFDeEIsU0FBOEc7UUFFOUcsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RELE9BQVEsSUFBSSxDQUFDLFNBQVMsQ0FBOEMsQ0FBQyxHQUFHLE1BQU0sQ0FFN0UsQ0FBQztJQUNOLENBQUM7O3dHQVRRLFdBQVc7c0dBQVgsV0FBVzsyRkFBWCxXQUFXO2tCQUR2QixJQUFJO21CQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AUGlwZSh7IG5hbWU6ICdtYXRoJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIE5ndE1hdGhQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgdHJhbnNmb3JtKFxuICAgICAgICB2YWx1ZTogbnVtYmVyIHwgbnVtYmVyW10sXG4gICAgICAgIGtleU9mTWF0aDoga2V5b2YgT21pdDxNYXRoLCAnUEknIHwgJ0UnIHwgJ0xOMicgfCAnTE9HMkUnIHwgJ0xOMTAnIHwgJ0xPRzEwRScgfCAnU1FSVDFfMicgfCAnU1FSVDInIHwgJ3JhbmRvbSc+XG4gICAgKTogUmV0dXJuVHlwZTxFeHRyYWN0PE1hdGhbdHlwZW9mIGtleU9mTWF0aF0sICdzdHJpbmcnPj4ge1xuICAgICAgICBjb25zdCBwYXJhbXMgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXTtcbiAgICAgICAgcmV0dXJuIChNYXRoW2tleU9mTWF0aF0gYXMgdW5rbm93biBhcyAoLi4uYXJnczogbnVtYmVyW10pID0+IG51bWJlcikoLi4ucGFyYW1zKSBhcyBSZXR1cm5UeXBlPFxuICAgICAgICAgICAgRXh0cmFjdDxNYXRoW3R5cGVvZiBrZXlPZk1hdGhdLCAnc3RyaW5nJz5cbiAgICAgICAgPjtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,14 @@
1
+ import { Pipe } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class NgtPiPipe {
4
+ transform(value) {
5
+ return value * Math.PI;
6
+ }
7
+ }
8
+ NgtPiPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgtPiPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
9
+ NgtPiPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.0.0", ngImport: i0, type: NgtPiPipe, isStandalone: true, name: "pi" });
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgtPiPipe, decorators: [{
11
+ type: Pipe,
12
+ args: [{ name: 'pi', standalone: true }]
13
+ }] });
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyLXRocmVlL3NyYy9saWIvcGlwZXMvcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7O0FBR3BELE1BQU0sT0FBTyxTQUFTO0lBQ2xCLFNBQVMsQ0FBQyxLQUFhO1FBQ25CLE9BQU8sS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDM0IsQ0FBQzs7c0dBSFEsU0FBUztvR0FBVCxTQUFTOzJGQUFULFNBQVM7a0JBRHJCLElBQUk7bUJBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBQaXBlKHsgbmFtZTogJ3BpJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIE5ndFBpUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIHRyYW5zZm9ybSh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlICogTWF0aC5QSTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,14 @@
1
+ import { Pipe } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class NgtRadianPipe {
4
+ transform(degree) {
5
+ return (degree * Math.PI) / 180;
6
+ }
7
+ }
8
+ NgtRadianPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgtRadianPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
9
+ NgtRadianPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.0.0", ngImport: i0, type: NgtRadianPipe, isStandalone: true, name: "radian" });
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgtRadianPipe, decorators: [{
11
+ type: Pipe,
12
+ args: [{ name: 'radian', standalone: true }]
13
+ }] });
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaWFuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci10aHJlZS9zcmMvbGliL3BpcGVzL3JhZGlhbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQzs7QUFHcEQsTUFBTSxPQUFPLGFBQWE7SUFDdEIsU0FBUyxDQUFDLE1BQWM7UUFDcEIsT0FBTyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ3BDLENBQUM7OzBHQUhRLGFBQWE7d0dBQWIsYUFBYTsyRkFBYixhQUFhO2tCQUR6QixJQUFJO21CQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AUGlwZSh7IG5hbWU6ICdyYWRpYW4nLCBzdGFuZGFsb25lOiB0cnVlIH0pXG5leHBvcnQgY2xhc3MgTmd0UmFkaWFuUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIHRyYW5zZm9ybShkZWdyZWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAoZGVncmVlICogTWF0aC5QSSkgLyAxODA7XG4gICAgfVxufVxuIl19
@@ -0,0 +1,22 @@
1
+ import { Pipe } from '@angular/core';
2
+ import * as THREE from 'three';
3
+ import * as i0 from "@angular/core";
4
+ export class NgtSidePipe {
5
+ transform(side) {
6
+ switch (side) {
7
+ case 'front':
8
+ return THREE.FrontSide;
9
+ case 'back':
10
+ return THREE.BackSide;
11
+ case 'double':
12
+ return THREE.DoubleSide;
13
+ }
14
+ }
15
+ }
16
+ NgtSidePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgtSidePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
17
+ NgtSidePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.0.0", ngImport: i0, type: NgtSidePipe, isStandalone: true, name: "side" });
18
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgtSidePipe, decorators: [{
19
+ type: Pipe,
20
+ args: [{ name: 'side', standalone: true }]
21
+ }] });
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXItdGhyZWUvc3JjL2xpYi9waXBlcy9zaWRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDOztBQUcvQixNQUFNLE9BQU8sV0FBVztJQUNwQixTQUFTLENBQUMsSUFBaUM7UUFDdkMsUUFBUSxJQUFJLEVBQUU7WUFDVixLQUFLLE9BQU87Z0JBQ1IsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDO1lBQzNCLEtBQUssTUFBTTtnQkFDUCxPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUM7WUFDMUIsS0FBSyxRQUFRO2dCQUNULE9BQU8sS0FBSyxDQUFDLFVBQVUsQ0FBQztTQUMvQjtJQUNMLENBQUM7O3dHQVZRLFdBQVc7c0dBQVgsV0FBVzsyRkFBWCxXQUFXO2tCQUR2QixJQUFJO21CQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuXG5AUGlwZSh7IG5hbWU6ICdzaWRlJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIE5ndFNpZGVQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgdHJhbnNmb3JtKHNpZGU6ICdmcm9udCcgfCAnYmFjaycgfCAnZG91YmxlJyk6IFRIUkVFLlNpZGUge1xuICAgICAgICBzd2l0Y2ggKHNpZGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2Zyb250JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gVEhSRUUuRnJvbnRTaWRlO1xuICAgICAgICAgICAgY2FzZSAnYmFjayc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFRIUkVFLkJhY2tTaWRlO1xuICAgICAgICAgICAgY2FzZSAnZG91YmxlJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gVEhSRUUuRG91YmxlU2lkZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,15 @@
1
+ import { BehaviorSubject } from 'rxjs';
2
+ export class NgtRef extends BehaviorSubject {
3
+ constructor(value) {
4
+ super(value ? value : null);
5
+ }
6
+ set(valueOrFactory) {
7
+ if (typeof valueOrFactory === 'function') {
8
+ this.next(valueOrFactory(this.value));
9
+ }
10
+ else {
11
+ this.next(valueOrFactory);
12
+ }
13
+ }
14
+ }
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci10aHJlZS9zcmMvbGliL3JlZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXZDLE1BQU0sT0FBTyxNQUFnQixTQUFRLGVBQWtCO0lBQ25ELFlBQVksS0FBZ0I7UUFDeEIsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsR0FBRyxDQUFDLGNBQXdDO1FBQ3hDLElBQUksT0FBTyxjQUFjLEtBQUssVUFBVSxFQUFFO1lBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUUsY0FBcUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUNqRTthQUFNO1lBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUM3QjtJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgY2xhc3MgTmd0UmVmPFQgPSBhbnk+IGV4dGVuZHMgQmVoYXZpb3JTdWJqZWN0PFQ+IHtcbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZT86IFQgfCBudWxsKSB7XG4gICAgICAgIHN1cGVyKHZhbHVlID8gdmFsdWUgOiBudWxsISk7XG4gICAgfVxuXG4gICAgc2V0KHZhbHVlT3JGYWN0b3J5OiBUIHwgKChwcmV2aW91czogVCkgPT4gVCkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZU9yRmFjdG9yeSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhpcy5uZXh0KCh2YWx1ZU9yRmFjdG9yeSBhcyAocHJldmlvdXM6IFQpID0+IFQpKHRoaXMudmFsdWUpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubmV4dCh2YWx1ZU9yRmFjdG9yeSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,45 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { catchError, forkJoin, from, map, of, ReplaySubject, retry, share, tap } from 'rxjs';
3
+ import { buildGraph } from '../utils/build-graph';
4
+ import * as i0 from "@angular/core";
5
+ export class NgtLoader {
6
+ constructor() {
7
+ this.cached = new Map();
8
+ }
9
+ use(loadConstructor, input, extensions, onProgress) {
10
+ const urls = Array.isArray(input) ? input : [input];
11
+ const loader = new loadConstructor();
12
+ if (extensions) {
13
+ extensions(loader);
14
+ }
15
+ const observables$ = urls.map((url) => {
16
+ if (!this.cached.has(url)) {
17
+ this.cached.set(url, from(loader.loadAsync(url, onProgress)).pipe(tap((data) => {
18
+ if (data.scene) {
19
+ Object.assign(data, buildGraph(data.scene));
20
+ }
21
+ }), retry(2), catchError((err) => {
22
+ console.error(`[NgtLoader]: Error loading ${url}: ${err.message}`);
23
+ return of(null);
24
+ }), share({
25
+ connector: () => new ReplaySubject(1),
26
+ resetOnComplete: true,
27
+ resetOnRefCountZero: true,
28
+ resetOnError: true,
29
+ })));
30
+ }
31
+ return this.cached.get(url);
32
+ });
33
+ return forkJoin(observables$).pipe(map((results) => (Array.isArray(input) ? results : results[0])));
34
+ }
35
+ destroy() {
36
+ this.cached.clear();
37
+ }
38
+ }
39
+ NgtLoader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgtLoader, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
40
+ NgtLoader.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgtLoader, providedIn: 'root' });
41
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgtLoader, decorators: [{
42
+ type: Injectable,
43
+ args: [{ providedIn: 'root' }]
44
+ }] });
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci10aHJlZS9zcmMvbGliL3NlcnZpY2VzL2xvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQWMsRUFBRSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQVN6RyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7O0FBR2xELE1BQU0sT0FBTyxTQUFTO0lBRHRCO1FBRXFCLFdBQU0sR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0tBa0R2QztJQWhERyxHQUFHLENBQ0MsZUFBZ0UsRUFDaEUsS0FBVyxFQUNYLFVBQWdDLEVBQ2hDLFVBQTJDO1FBSTNDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwRCxNQUFNLE1BQU0sR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQ3JDLElBQUksVUFBVSxFQUFFO1lBQ1osVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3RCO1FBRUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQ1gsR0FBRyxFQUNILElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDeEMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7b0JBQ1QsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO3dCQUNaLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztxQkFDL0M7Z0JBQ0wsQ0FBQyxDQUFDLEVBQ0YsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsOEJBQThCLEdBQUcsS0FBSyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztvQkFDbkUsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3BCLENBQUMsQ0FBQyxFQUNGLEtBQUssQ0FBQztvQkFDRixTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDO29CQUNyQyxlQUFlLEVBQUUsSUFBSTtvQkFDckIsbUJBQW1CLEVBQUUsSUFBSTtvQkFDekIsWUFBWSxFQUFFLElBQUk7aUJBQ3JCLENBQUMsQ0FDTCxDQUNKLENBQUM7YUFDTDtZQUVELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hHLENBQUM7SUFFRCxPQUFPO1FBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN4QixDQUFDOztzR0FsRFEsU0FBUzswR0FBVCxTQUFTLGNBREksTUFBTTsyRkFDbkIsU0FBUztrQkFEckIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmb3JrSm9pbiwgZnJvbSwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgUmVwbGF5U3ViamVjdCwgcmV0cnksIHNoYXJlLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEdMVEYgfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vbG9hZGVycy9HTFRGTG9hZGVyJztcbmltcG9ydCB0eXBlIHtcbiAgICBOZ3RBbnlDb25zdHJ1Y3RvcixcbiAgICBOZ3RCcmFuY2hpbmdSZXR1cm4sXG4gICAgTmd0TG9hZGVyRXh0ZW5zaW9ucyxcbiAgICBOZ3RMb2FkZXJSZXN1bHQsXG4gICAgTmd0T2JqZWN0TWFwLFxufSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBidWlsZEdyYXBoIH0gZnJvbSAnLi4vdXRpbHMvYnVpbGQtZ3JhcGgnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIE5ndExvYWRlciB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjYWNoZWQgPSBuZXcgTWFwKCk7XG5cbiAgICB1c2U8VFJldHVyblR5cGUsIFRVcmwgZXh0ZW5kcyBzdHJpbmcgfCBzdHJpbmdbXT4oXG4gICAgICAgIGxvYWRDb25zdHJ1Y3RvcjogTmd0QW55Q29uc3RydWN0b3I8Tmd0TG9hZGVyUmVzdWx0PFRSZXR1cm5UeXBlPj4sXG4gICAgICAgIGlucHV0OiBUVXJsLFxuICAgICAgICBleHRlbnNpb25zPzogTmd0TG9hZGVyRXh0ZW5zaW9ucyxcbiAgICAgICAgb25Qcm9ncmVzcz86IChldmVudDogUHJvZ3Jlc3NFdmVudCkgPT4gdm9pZFxuICAgICk6IFRVcmwgZXh0ZW5kcyBzdHJpbmdbXVxuICAgICAgICA/IE9ic2VydmFibGU8QXJyYXk8Tmd0QnJhbmNoaW5nUmV0dXJuPFRSZXR1cm5UeXBlLCBHTFRGLCBHTFRGICYgTmd0T2JqZWN0TWFwPj4+XG4gICAgICAgIDogT2JzZXJ2YWJsZTxOZ3RCcmFuY2hpbmdSZXR1cm48VFJldHVyblR5cGUsIEdMVEYsIEdMVEYgJiBOZ3RPYmplY3RNYXA+PiB7XG4gICAgICAgIGNvbnN0IHVybHMgPSBBcnJheS5pc0FycmF5KGlucHV0KSA/IGlucHV0IDogW2lucHV0XTtcbiAgICAgICAgY29uc3QgbG9hZGVyID0gbmV3IGxvYWRDb25zdHJ1Y3RvcigpO1xuICAgICAgICBpZiAoZXh0ZW5zaW9ucykge1xuICAgICAgICAgICAgZXh0ZW5zaW9ucyhsb2FkZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb2JzZXJ2YWJsZXMkID0gdXJscy5tYXAoKHVybCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNhY2hlZC5oYXModXJsKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVkLnNldChcbiAgICAgICAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgICAgICAgICBmcm9tKGxvYWRlci5sb2FkQXN5bmModXJsLCBvblByb2dyZXNzKSkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcCgoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLnNjZW5lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZGF0YSwgYnVpbGRHcmFwaChkYXRhLnNjZW5lKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICByZXRyeSgyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFtOZ3RMb2FkZXJdOiBFcnJvciBsb2FkaW5nICR7dXJsfTogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3I6ICgpID0+IG5ldyBSZXBsYXlTdWJqZWN0KDEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0T25Db21wbGV0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNldE9uUmVmQ291bnRaZXJvOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0T25FcnJvcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWQuZ2V0KHVybCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBmb3JrSm9pbihvYnNlcnZhYmxlcyQpLnBpcGUobWFwKChyZXN1bHRzKSA9PiAoQXJyYXkuaXNBcnJheShpbnB1dCkgPyByZXN1bHRzIDogcmVzdWx0c1swXSkpKTtcbiAgICB9XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgICB0aGlzLmNhY2hlZC5jbGVhcigpO1xuICAgIH1cbn1cbiJdfQ==