angular-three-soba 2.0.0-beta.2 → 2.0.0-beta.21

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 (321) hide show
  1. package/abstractions/billboard/billboard.d.ts +11 -7
  2. package/abstractions/detailed/detailed.d.ts +26 -0
  3. package/abstractions/edges/edges.d.ts +24 -12
  4. package/abstractions/grid/grid.d.ts +50 -0
  5. package/abstractions/index.d.ts +2 -7
  6. package/abstractions/text/text.d.ts +10 -5
  7. package/abstractions/text-3d/text-3d.d.ts +51 -41
  8. package/cameras/camera/camera-content.d.ts +1 -1
  9. package/cameras/camera/camera.d.ts +16 -13
  10. package/cameras/cube-camera/cube-camera.d.ts +50 -23
  11. package/cameras/index.d.ts +0 -1
  12. package/cameras/orthographic-camera/orthographic-camera.d.ts +29 -18
  13. package/cameras/perspective-camera/perspective-camera.d.ts +10 -1
  14. package/controls/orbit-controls/orbit-controls.d.ts +31 -12
  15. package/esm2022/abstractions/billboard/billboard.mjs +36 -33
  16. package/esm2022/abstractions/detailed/detailed.mjs +64 -0
  17. package/esm2022/abstractions/edges/edges.mjs +58 -63
  18. package/esm2022/abstractions/grid/grid.mjs +180 -0
  19. package/esm2022/abstractions/index.mjs +3 -8
  20. package/esm2022/abstractions/text/text.mjs +123 -124
  21. package/esm2022/abstractions/text-3d/text-3d.mjs +120 -115
  22. package/esm2022/cameras/camera/camera-content.mjs +6 -6
  23. package/esm2022/cameras/camera/camera.mjs +48 -42
  24. package/esm2022/cameras/cube-camera/cube-camera.mjs +129 -99
  25. package/esm2022/cameras/index.mjs +1 -2
  26. package/esm2022/cameras/orthographic-camera/orthographic-camera.mjs +78 -75
  27. package/esm2022/cameras/perspective-camera/perspective-camera.mjs +25 -26
  28. package/esm2022/controls/orbit-controls/orbit-controls.mjs +105 -85
  29. package/esm2022/gizmos/angular-three-soba-gizmos.mjs +5 -0
  30. package/esm2022/gizmos/gizmo-helper/gizmo-helper.mjs +197 -0
  31. package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/constants.mjs +31 -0
  32. package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.mjs +93 -0
  33. package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.mjs +150 -0
  34. package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-input.mjs +66 -0
  35. package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube.mjs +71 -0
  36. package/esm2022/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.mjs +195 -0
  37. package/esm2022/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport.mjs +272 -0
  38. package/esm2022/gizmos/index.mjs +4 -0
  39. package/esm2022/loaders/gltf-loader/gltf-loader.mjs +3 -6
  40. package/esm2022/loaders/loader/loader.mjs +92 -87
  41. package/esm2022/loaders/progress/progress.mjs +29 -29
  42. package/esm2022/loaders/texture-loader/texture-loader.mjs +4 -4
  43. package/esm2022/materials/index.mjs +2 -1
  44. package/esm2022/materials/mesh-distort-material/mesh-distort-material.mjs +60 -51
  45. package/esm2022/materials/mesh-reflector-material/mesh-reflector-material.mjs +239 -255
  46. package/esm2022/materials/mesh-refraction-material/mesh-refraction-material.mjs +102 -99
  47. package/esm2022/materials/mesh-transmission-material/mesh-transmission-material.mjs +167 -146
  48. package/esm2022/materials/mesh-wobble-material/mesh-wobble-material.mjs +44 -42
  49. package/esm2022/materials/point-material/point-material.mjs +50 -0
  50. package/esm2022/misc/animations/animations.mjs +36 -32
  51. package/esm2022/misc/bake-shadows/bake-shadows.mjs +13 -13
  52. package/esm2022/misc/caustics/caustics.mjs +387 -0
  53. package/esm2022/misc/decal/decal.mjs +187 -0
  54. package/esm2022/misc/depth-buffer/depth-buffer.mjs +33 -35
  55. package/esm2022/misc/example/example.mjs +160 -0
  56. package/esm2022/misc/fbo/fbo.mjs +35 -35
  57. package/esm2022/misc/html/html-wrapper.mjs +478 -0
  58. package/esm2022/misc/html/html.mjs +304 -0
  59. package/esm2022/misc/index.mjs +10 -1
  60. package/esm2022/misc/sampler/sampler.mjs +142 -0
  61. package/esm2022/misc/shadow/shadow.mjs +111 -0
  62. package/esm2022/misc/stats-gl/stats-gl.mjs +61 -0
  63. package/esm2022/misc/trail/trail.mjs +209 -0
  64. package/esm2022/misc/trail-texture/inject-trail-texture.mjs +17 -0
  65. package/esm2022/misc/trail-texture/trail-texture.mjs +106 -0
  66. package/esm2022/modifiers/angular-three-soba-modifiers.mjs +5 -0
  67. package/esm2022/modifiers/curve-modifier/curve-modifier.mjs +64 -0
  68. package/esm2022/modifiers/index.mjs +2 -0
  69. package/esm2022/performances/adaptive-dpr/adaptive-dpr.mjs +44 -0
  70. package/esm2022/performances/adaptive-events/adaptive-events.mjs +27 -0
  71. package/esm2022/performances/angular-three-soba-performances.mjs +5 -0
  72. package/esm2022/performances/index.mjs +8 -0
  73. package/esm2022/performances/instances/instances.mjs +220 -0
  74. package/esm2022/performances/instances/position-mesh.mjs +52 -0
  75. package/esm2022/performances/points/points-input.mjs +64 -0
  76. package/esm2022/performances/points/points.mjs +326 -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/blur-pass/blur-pass.mjs +2 -2
  81. package/esm2022/shaders/caustics/caustics-material.mjs +130 -0
  82. package/esm2022/shaders/caustics/caustics-projection-material.mjs +31 -0
  83. package/esm2022/shaders/convolution-material/convolution-material.mjs +1 -1
  84. package/esm2022/shaders/discard-material/discard-material.mjs +1 -1
  85. package/esm2022/shaders/grid-material/grid-material.mjs +77 -0
  86. package/esm2022/shaders/index.mjs +6 -3
  87. package/esm2022/shaders/mesh-distort-material/mesh-distort-material.mjs +42 -41
  88. package/esm2022/shaders/mesh-reflector-material/mesh-reflector-material.mjs +2 -2
  89. package/esm2022/shaders/mesh-refraction-material/mesh-refraction-material.mjs +2 -2
  90. package/esm2022/shaders/mesh-transmission-material/mesh-transmission-material.mjs +4 -4
  91. package/esm2022/shaders/mesh-wobble-material/mesh-wobble-material.mjs +1 -1
  92. package/esm2022/shaders/shader-material/shader-material.mjs +1 -1
  93. package/esm2022/shaders/soft-shadow-material/soft-shadow-material.mjs +17 -25
  94. package/esm2022/shaders/sparkles-material/sparkles-material.mjs +32 -46
  95. package/esm2022/shaders/spot-light-material/spot-light-material.mjs +7 -7
  96. package/esm2022/shaders/star-field-material/star-field-material.mjs +3 -2
  97. package/esm2022/shaders/wireframe-material/wireframe-material.mjs +247 -0
  98. package/esm2022/staging/accumulative-shadows/accumulative-shadows.mjs +160 -176
  99. package/esm2022/staging/accumulative-shadows/progressive-light-map.mjs +1 -1
  100. package/esm2022/staging/accumulative-shadows/randomized-lights.mjs +126 -128
  101. package/esm2022/staging/backdrop/backdrop.mjs +77 -0
  102. package/esm2022/staging/bb-anchor/bb-anchor.mjs +69 -0
  103. package/esm2022/staging/bounds/bounds.mjs +144 -143
  104. package/esm2022/staging/camera-shake/camera-shake.mjs +86 -80
  105. package/esm2022/staging/center/center.mjs +129 -112
  106. package/esm2022/staging/cloud/cloud.mjs +118 -124
  107. package/esm2022/staging/contact-shadows/contact-shadows.mjs +131 -134
  108. package/esm2022/staging/environment/assets.mjs +12 -12
  109. package/esm2022/staging/environment/environment-cube.mjs +28 -30
  110. package/esm2022/staging/environment/environment-ground.mjs +17 -19
  111. package/esm2022/staging/environment/environment-input.mjs +98 -85
  112. package/esm2022/staging/environment/environment-map.mjs +33 -33
  113. package/esm2022/staging/environment/environment-portal.mjs +75 -97
  114. package/esm2022/staging/environment/environment.mjs +34 -51
  115. package/esm2022/staging/environment/utils.mjs +37 -15
  116. package/esm2022/staging/float/float.mjs +70 -58
  117. package/esm2022/staging/index.mjs +7 -3
  118. package/esm2022/staging/matcap-texture/matcap-texture.mjs +64 -0
  119. package/esm2022/staging/normal-texture/normal-texture.mjs +53 -0
  120. package/esm2022/staging/sky/sky.mjs +85 -80
  121. package/esm2022/staging/sparkles/sparkles.mjs +108 -105
  122. package/esm2022/staging/spot-light/shadow-mesh-input.mjs +63 -0
  123. package/esm2022/staging/spot-light/shadow-mesh.mjs +266 -0
  124. package/esm2022/staging/spot-light/spot-light-input.mjs +67 -58
  125. package/esm2022/staging/spot-light/spot-light.mjs +51 -64
  126. package/esm2022/staging/spot-light/volumetric-mesh.mjs +67 -70
  127. package/esm2022/staging/stage/stage.mjs +305 -290
  128. package/esm2022/staging/stars/stars.mjs +101 -102
  129. package/esm2022/staging/wireframe/wireframe-input.mjs +191 -0
  130. package/esm2022/staging/wireframe/wireframe.mjs +228 -0
  131. package/esm2022/utils/angular-three-soba-utils.mjs +5 -0
  132. package/esm2022/utils/content/content.mjs +15 -0
  133. package/esm2022/utils/index.mjs +2 -0
  134. package/fesm2022/angular-three-soba-abstractions.mjs +514 -1947
  135. package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
  136. package/fesm2022/angular-three-soba-cameras.mjs +302 -259
  137. package/fesm2022/angular-three-soba-cameras.mjs.map +1 -1
  138. package/fesm2022/angular-three-soba-controls.mjs +104 -83
  139. package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
  140. package/fesm2022/angular-three-soba-gizmos.mjs +1043 -0
  141. package/fesm2022/angular-three-soba-gizmos.mjs.map +1 -0
  142. package/fesm2022/angular-three-soba-loaders.mjs +121 -117
  143. package/fesm2022/angular-three-soba-loaders.mjs.map +1 -1
  144. package/fesm2022/angular-three-soba-materials.mjs +662 -592
  145. package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
  146. package/fesm2022/angular-three-soba-misc.mjs +2214 -105
  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 +956 -0
  151. package/fesm2022/angular-three-soba-performances.mjs.map +1 -0
  152. package/fesm2022/angular-three-soba-shaders.mjs +549 -252
  153. package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
  154. package/fesm2022/angular-three-soba-staging.mjs +2899 -2563
  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/gizmos/README.md +3 -0
  159. package/gizmos/gizmo-helper/gizmo-helper.d.ts +69 -0
  160. package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.d.ts +22 -0
  161. package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.d.ts +29 -0
  162. package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-input.d.ts +33 -0
  163. package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube.d.ts +10 -0
  164. package/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.d.ts +40 -0
  165. package/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport.d.ts +30 -0
  166. package/gizmos/index.d.ts +3 -0
  167. package/loaders/gltf-loader/gltf-loader.d.ts +4 -3
  168. package/loaders/loader/loader.d.ts +19 -17
  169. package/loaders/progress/progress.d.ts +1 -1
  170. package/loaders/texture-loader/texture-loader.d.ts +2 -2
  171. package/materials/index.d.ts +1 -0
  172. package/materials/mesh-distort-material/mesh-distort-material.d.ts +25 -15
  173. package/materials/mesh-reflector-material/mesh-reflector-material.d.ts +74 -56
  174. package/materials/mesh-refraction-material/mesh-refraction-material.d.ts +33 -21
  175. package/materials/mesh-transmission-material/mesh-transmission-material.d.ts +55 -39
  176. package/materials/mesh-wobble-material/mesh-wobble-material.d.ts +19 -10
  177. package/materials/point-material/point-material.d.ts +24 -0
  178. package/metadata.json +1 -0
  179. package/misc/animations/animations.d.ts +6 -4
  180. package/misc/caustics/caustics.d.ts +87 -0
  181. package/misc/decal/decal.d.ts +49 -0
  182. package/misc/depth-buffer/depth-buffer.d.ts +2 -2
  183. package/misc/example/example.d.ts +81 -0
  184. package/misc/fbo/fbo.d.ts +2 -2
  185. package/misc/html/html-wrapper.d.ts +559 -0
  186. package/misc/html/html.d.ts +214 -0
  187. package/misc/index.d.ts +9 -0
  188. package/misc/sampler/sampler.d.ts +67 -0
  189. package/misc/shadow/shadow.d.ts +37 -0
  190. package/misc/stats-gl/stats-gl.d.ts +24 -0
  191. package/misc/trail/trail.d.ts +57 -0
  192. package/misc/trail-texture/inject-trail-texture.d.ts +9 -0
  193. package/misc/trail-texture/trail-texture.d.ts +50 -0
  194. package/modifiers/README.md +3 -0
  195. package/modifiers/curve-modifier/curve-modifier.d.ts +23 -0
  196. package/modifiers/index.d.ts +1 -0
  197. package/package.json +31 -16
  198. package/performances/README.md +3 -0
  199. package/performances/adaptive-dpr/adaptive-dpr.d.ts +14 -0
  200. package/{performance/adaptive → performances/adaptive-events}/adaptive-events.d.ts +3 -0
  201. package/performances/index.d.ts +7 -0
  202. package/performances/instances/instances.d.ts +79 -0
  203. package/{performance → performances}/instances/position-mesh.d.ts +1 -1
  204. package/performances/points/points-input.d.ts +32 -0
  205. package/performances/points/points.d.ts +92 -0
  206. package/performances/points/position-point.d.ts +11 -0
  207. package/performances/segments/segment-object.d.ts +7 -0
  208. package/performances/segments/segments.d.ts +124 -0
  209. package/shaders/grid-material/grid-material.d.ts +37 -0
  210. package/shaders/index.d.ts +5 -2
  211. package/shaders/mesh-distort-material/mesh-distort-material.d.ts +147 -2
  212. package/shaders/mesh-transmission-material/mesh-transmission-material.d.ts +1 -1
  213. package/shaders/shader-material/shader-material.d.ts +2 -2
  214. package/shaders/soft-shadow-material/soft-shadow-material.d.ts +10 -1
  215. package/shaders/sparkles-material/sparkles-material.d.ts +15 -1
  216. package/shaders/spot-light-material/spot-light-material.d.ts +11 -2
  217. package/shaders/star-field-material/star-field-material.d.ts +11 -1
  218. package/shaders/wireframe-material/wireframe-material.d.ts +58 -0
  219. package/staging/accumulative-shadows/accumulative-shadows.d.ts +89 -39
  220. package/staging/accumulative-shadows/randomized-lights.d.ts +40 -27
  221. package/staging/backdrop/backdrop.d.ts +30 -0
  222. package/staging/bb-anchor/bb-anchor.d.ts +27 -0
  223. package/staging/bounds/bounds.d.ts +100 -24
  224. package/staging/camera-shake/camera-shake.d.ts +30 -19
  225. package/staging/center/center.d.ts +43 -35
  226. package/staging/cloud/cloud.d.ts +26 -23
  227. package/staging/contact-shadows/contact-shadows.d.ts +41 -28
  228. package/staging/environment/assets.d.ts +9 -9
  229. package/staging/environment/environment-cube.d.ts +9 -5
  230. package/staging/environment/environment-ground.d.ts +7 -7
  231. package/staging/environment/environment-input.d.ts +37 -37
  232. package/staging/environment/environment-map.d.ts +10 -5
  233. package/staging/environment/environment-portal.d.ts +10 -5
  234. package/staging/environment/environment.d.ts +0 -4
  235. package/staging/environment/utils.d.ts +2 -2
  236. package/staging/float/float.d.ts +14 -10
  237. package/staging/index.d.ts +6 -2
  238. package/staging/matcap-texture/matcap-texture.d.ts +13 -0
  239. package/staging/normal-texture/normal-texture.d.ts +16 -0
  240. package/staging/sky/sky.d.ts +28 -21
  241. package/staging/sparkles/sparkles.d.ts +36 -22
  242. package/staging/spot-light/shadow-mesh-input.d.ts +29 -0
  243. package/staging/spot-light/shadow-mesh.d.ts +37 -0
  244. package/staging/spot-light/spot-light-input.d.ts +25 -25
  245. package/staging/spot-light/spot-light.d.ts +31 -15
  246. package/staging/spot-light/volumetric-mesh.d.ts +15 -9
  247. package/staging/stage/stage.d.ts +89 -65
  248. package/staging/stars/stars.d.ts +28 -17
  249. package/staging/wireframe/wireframe-input.d.ts +65 -0
  250. package/staging/wireframe/wireframe.d.ts +28 -0
  251. package/utils/README.md +3 -0
  252. package/utils/content/content.d.ts +8 -0
  253. package/utils/index.d.ts +1 -0
  254. package/web-types.json +1 -0
  255. package/abstractions/catmull-rom-line/catmull-rom-line.d.ts +0 -25
  256. package/abstractions/cubic-bezier-line/cubic-bezier-line.d.ts +0 -25
  257. package/abstractions/gizmo-helper/gizmo-helper.d.ts +0 -34
  258. package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.d.ts +0 -22
  259. package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.d.ts +0 -30
  260. package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.d.ts +0 -32
  261. package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube.d.ts +0 -14
  262. package/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.d.ts +0 -47
  263. package/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport.d.ts +0 -40
  264. package/abstractions/line/line-input.d.ts +0 -42
  265. package/abstractions/line/line.d.ts +0 -35
  266. package/abstractions/quadratic-bezier-line/quadratic-bezier-line.d.ts +0 -23
  267. package/esm2022/abstractions/catmull-rom-line/catmull-rom-line.mjs +0 -131
  268. package/esm2022/abstractions/cubic-bezier-line/cubic-bezier-line.mjs +0 -113
  269. package/esm2022/abstractions/gizmo-helper/gizmo-helper.mjs +0 -210
  270. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/constants.mjs +0 -31
  271. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.mjs +0 -95
  272. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.mjs +0 -155
  273. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.mjs +0 -62
  274. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube.mjs +0 -80
  275. package/esm2022/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.mjs +0 -206
  276. package/esm2022/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport.mjs +0 -273
  277. package/esm2022/abstractions/line/line-input.mjs +0 -113
  278. package/esm2022/abstractions/line/line.mjs +0 -165
  279. package/esm2022/abstractions/quadratic-bezier-line/quadratic-bezier-line.mjs +0 -128
  280. package/esm2022/performance/adaptive/adaptive-dpr.mjs +0 -46
  281. package/esm2022/performance/adaptive/adaptive-events.mjs +0 -31
  282. package/esm2022/performance/angular-three-soba-performance.mjs +0 -5
  283. package/esm2022/performance/detailed/detailed.mjs +0 -61
  284. package/esm2022/performance/index.mjs +0 -7
  285. package/esm2022/performance/instances/instance.mjs +0 -48
  286. package/esm2022/performance/instances/instances.mjs +0 -189
  287. package/esm2022/performance/instances/position-mesh.mjs +0 -52
  288. package/esm2022/performance/stats/stats.mjs +0 -79
  289. package/esm2022/shaders/caustics-material/caustics-material.mjs +0 -128
  290. package/esm2022/shaders/caustics-material/caustics-projection-material.mjs +0 -33
  291. package/esm2022/staging/caustics/caustisc.mjs +0 -384
  292. package/esm2022/staging/spot-light/spot-light-shadow-mesh-input.mjs +0 -57
  293. package/esm2022/staging/spot-light/spot-light-shadow-mesh.mjs +0 -256
  294. package/fesm2022/angular-three-soba-performance.mjs +0 -487
  295. package/fesm2022/angular-three-soba-performance.mjs.map +0 -1
  296. package/performance/README.md +0 -3
  297. package/performance/adaptive/adaptive-dpr.d.ts +0 -8
  298. package/performance/detailed/detailed.d.ts +0 -20
  299. package/performance/index.d.ts +0 -6
  300. package/performance/instances/instance.d.ts +0 -9
  301. package/performance/instances/instances.d.ts +0 -35
  302. package/performance/stats/stats.d.ts +0 -18
  303. package/plugin/generators.json +0 -19
  304. package/plugin/libs/plugin/README.md +0 -11
  305. package/plugin/package.json +0 -9
  306. package/plugin/src/generators/init/compat.d.ts +0 -2
  307. package/plugin/src/generators/init/compat.js +0 -6
  308. package/plugin/src/generators/init/compat.js.map +0 -1
  309. package/plugin/src/generators/init/init.d.ts +0 -4
  310. package/plugin/src/generators/init/init.js +0 -22
  311. package/plugin/src/generators/init/init.js.map +0 -1
  312. package/plugin/src/generators/init/schema.json +0 -6
  313. package/plugin/src/index.d.ts +0 -1
  314. package/plugin/src/index.js +0 -6
  315. package/plugin/src/index.js.map +0 -1
  316. package/staging/caustics/caustisc.d.ts +0 -70
  317. package/staging/spot-light/spot-light-shadow-mesh-input.d.ts +0 -29
  318. package/staging/spot-light/spot-light-shadow-mesh.d.ts +0 -38
  319. /package/{abstractions → gizmos}/gizmo-helper/gizmo-viewcube/constants.d.ts +0 -0
  320. /package/shaders/{caustics-material → caustics}/caustics-material.d.ts +0 -0
  321. /package/shaders/{caustics-material → caustics}/caustics-projection-material.d.ts +0 -0
@@ -1,81 +1,52 @@
1
1
  import { NgIf } from '@angular/common';
2
- import { Component, computed, CUSTOM_ELEMENTS_SCHEMA, inject, Input } from '@angular/core';
3
- import { extend, getLocalState, injectBeforeRender, injectNgtRef, NgtArgs, NgtSignalStore, NgtStore, } from 'angular-three';
2
+ import { Component, computed, CUSTOM_ELEMENTS_SCHEMA, Input } from '@angular/core';
3
+ import { extend, getLocalState, injectBeforeRender, injectNgtRef, injectNgtStore, NgtKey, signalStore, } from 'angular-three';
4
4
  import { BlurPass, MeshReflectorMaterial } from 'angular-three-soba/shaders';
5
5
  import * as THREE from 'three';
6
6
  import * as i0 from "@angular/core";
7
7
  extend({ MeshReflectorMaterial });
8
- class NgtsMeshReflectorMaterial extends NgtSignalStore {
9
- set resolution(resolution) {
10
- this.set({ resolution });
8
+ export class NgtsMeshReflectorMaterial {
9
+ set _resolution(resolution) {
10
+ this.inputs.set({ resolution });
11
11
  }
12
- set mixBlur(mixBlur) {
13
- this.set({ mixBlur });
12
+ set _mixBlur(mixBlur) {
13
+ this.inputs.set({ mixBlur });
14
14
  }
15
- set mixStrength(mixStrength) {
16
- this.set({ mixStrength });
15
+ set _mixStrength(mixStrength) {
16
+ this.inputs.set({ mixStrength });
17
17
  }
18
- set blur(blur) {
19
- this.set({ blur });
18
+ set _blur(blur) {
19
+ this.inputs.set({ blur });
20
20
  }
21
- set mirror(mirror) {
22
- this.set({ mirror });
21
+ set _mirror(mirror) {
22
+ this.inputs.set({ mirror });
23
23
  }
24
- set minDepthThreshold(minDepthThreshold) {
25
- this.set({ minDepthThreshold });
24
+ set _minDepthThreshold(minDepthThreshold) {
25
+ this.inputs.set({ minDepthThreshold });
26
26
  }
27
- set maxDepthThreshold(maxDepthThreshold) {
28
- this.set({ maxDepthThreshold });
27
+ set _maxDepthThreshold(maxDepthThreshold) {
28
+ this.inputs.set({ maxDepthThreshold });
29
29
  }
30
- set depthScale(depthScale) {
31
- this.set({ depthScale });
30
+ set _depthScale(depthScale) {
31
+ this.inputs.set({ depthScale });
32
32
  }
33
- set depthToBlurRatioBias(depthToBlurRatioBias) {
34
- this.set({ depthToBlurRatioBias });
33
+ set _depthToBlurRatioBias(depthToBlurRatioBias) {
34
+ this.inputs.set({ depthToBlurRatioBias });
35
35
  }
36
- set distortionMap(distortionMap) {
37
- this.set({ distortionMap });
36
+ set _distortionMap(distortionMap) {
37
+ this.inputs.set({ distortionMap });
38
38
  }
39
- set distortion(distortion) {
40
- this.set({ distortion });
39
+ set _distortion(distortion) {
40
+ this.inputs.set({ distortion });
41
41
  }
42
- set mixContrast(mixContrast) {
43
- this.set({ mixContrast });
42
+ set _mixContrast(mixContrast) {
43
+ this.inputs.set({ mixContrast });
44
44
  }
45
- set reflectorOffset(reflectorOffset) {
46
- this.set({ reflectorOffset });
45
+ set _reflectorOffset(reflectorOffset) {
46
+ this.inputs.set({ reflectorOffset });
47
47
  }
48
- #store;
49
- #gl;
50
- #reflectorPlane;
51
- #normal;
52
- #reflectorWorldPosition;
53
- #cameraWorldPosition;
54
- #rotationMatrix;
55
- #lookAtPosition;
56
- #clipPlane;
57
- #view;
58
- #target;
59
- #q;
60
- #textureMatrix;
61
- #virtualCamera;
62
- #blur;
63
- #resolution;
64
- #mirror;
65
- #mixBlur;
66
- #mixStrength;
67
- #minDepthThreshold;
68
- #maxDepthThreshold;
69
- #depthScale;
70
- #depthToBlurRatioBias;
71
- #distortion;
72
- #distortionMap;
73
- #mixContrast;
74
- #normalizedBlur;
75
- #hasBlur;
76
- #reflectorEntities;
77
48
  constructor() {
78
- super({
49
+ this.inputs = signalStore({
79
50
  mixBlur: 0,
80
51
  mixStrength: 1,
81
52
  resolution: 256,
@@ -90,76 +61,75 @@ class NgtsMeshReflectorMaterial extends NgtSignalStore {
90
61
  reflectorOffset: 0,
91
62
  });
92
63
  this.materialRef = injectNgtRef();
93
- this.reflectorProps = computed(() => this.#reflectorEntities().reflectorProps);
64
+ this.reflectorProps = computed(() => this.states().reflectorProps);
94
65
  this.defines = computed(() => this.reflectorProps().defines);
95
- this.reflectorMirror = computed(() => this.reflectorProps().mirror);
96
- this.reflectorTextureMatrix = computed(() => this.reflectorProps().textureMatrix);
97
- this.reflectorMixBlur = computed(() => this.reflectorProps().mixBlur);
98
- this.reflectorTDiffuse = computed(() => this.reflectorProps().tDiffuse);
99
- this.reflectorTDepth = computed(() => this.reflectorProps().tDepth);
100
- this.reflectorTDiffuseBlur = computed(() => this.reflectorProps().tDiffuseBlur);
101
- this.reflectorHasBlur = computed(() => this.reflectorProps().hasBlur);
102
- this.reflectorMixStrength = computed(() => this.reflectorProps().mixStrength);
103
- this.reflectorMinDepthThreshold = computed(() => this.reflectorProps().minDepthThreshold);
104
- this.reflectorMaxDepthThreshold = computed(() => this.reflectorProps().maxDepthThreshold);
105
- this.reflectorDepthScale = computed(() => this.reflectorProps().depthScale);
106
- this.reflectorDepthToBlurRatioBias = computed(() => this.reflectorProps().depthToBlurRatioBias);
107
- this.reflectorDistortion = computed(() => this.reflectorProps().distortion);
108
- this.reflectorDistortionMap = computed(() => this.reflectorProps().distortionMap);
109
- this.reflectorMixContrast = computed(() => this.reflectorProps().mixContrast);
110
- this.#store = inject(NgtStore);
111
- this.#gl = this.#store.select('gl');
112
- this.#reflectorPlane = new THREE.Plane();
113
- this.#normal = new THREE.Vector3();
114
- this.#reflectorWorldPosition = new THREE.Vector3();
115
- this.#cameraWorldPosition = new THREE.Vector3();
116
- this.#rotationMatrix = new THREE.Matrix4();
117
- this.#lookAtPosition = new THREE.Vector3(0, 0, -1);
118
- this.#clipPlane = new THREE.Vector4();
119
- this.#view = new THREE.Vector3();
120
- this.#target = new THREE.Vector3();
121
- this.#q = new THREE.Vector4();
122
- this.#textureMatrix = new THREE.Matrix4();
123
- this.#virtualCamera = new THREE.PerspectiveCamera();
124
- this.#blur = this.select('blur');
125
- this.#resolution = this.select('resolution');
126
- this.#mirror = this.select('mirror');
127
- this.#mixBlur = this.select('mixBlur');
128
- this.#mixStrength = this.select('mixStrength');
129
- this.#minDepthThreshold = this.select('minDepthThreshold');
130
- this.#maxDepthThreshold = this.select('maxDepthThreshold');
131
- this.#depthScale = this.select('depthScale');
132
- this.#depthToBlurRatioBias = this.select('depthToBlurRatioBias');
133
- this.#distortion = this.select('distortion');
134
- this.#distortionMap = this.select('distortionMap');
135
- this.#mixContrast = this.select('mixContrast');
136
- this.#normalizedBlur = computed(() => {
137
- const blur = this.#blur();
66
+ this.mirror = computed(() => this.reflectorProps().mirror);
67
+ this.textureMatrix = computed(() => this.reflectorProps().textureMatrix);
68
+ this.mixBlur = computed(() => this.reflectorProps().mixBlur);
69
+ this.tDiffuse = computed(() => this.reflectorProps().tDiffuse);
70
+ this.tDepth = computed(() => this.reflectorProps().tDepth);
71
+ this.tDiffuseBlur = computed(() => this.reflectorProps().tDiffuseBlur);
72
+ this.hasBlur = computed(() => this.reflectorProps().hasBlur);
73
+ this.mixStrength = computed(() => this.reflectorProps().mixStrength);
74
+ this.minDepthThreshold = computed(() => this.reflectorProps().minDepthThreshold);
75
+ this.maxDepthThreshold = computed(() => this.reflectorProps().maxDepthThreshold);
76
+ this.depthScale = computed(() => this.reflectorProps().depthScale);
77
+ this.depthToBlurRatioBias = computed(() => this.reflectorProps().depthToBlurRatioBias);
78
+ this.distortion = computed(() => this.reflectorProps().distortion);
79
+ this.distortionMap = computed(() => this.reflectorProps().distortionMap);
80
+ this.mixContrast = computed(() => this.reflectorProps().mixContrast);
81
+ this.store = injectNgtStore();
82
+ this.gl = this.store.select('gl');
83
+ this.reflectorPlane = new THREE.Plane();
84
+ this.normal = new THREE.Vector3();
85
+ this.reflectorWorldPosition = new THREE.Vector3();
86
+ this.cameraWorldPosition = new THREE.Vector3();
87
+ this.rotationMatrix = new THREE.Matrix4();
88
+ this.lookAtPosition = new THREE.Vector3(0, 0, -1);
89
+ this.clipPlane = new THREE.Vector4();
90
+ this.view = new THREE.Vector3();
91
+ this.target = new THREE.Vector3();
92
+ this.q = new THREE.Vector4();
93
+ this.virtualCamera = new THREE.PerspectiveCamera();
94
+ this._textureMatrix = new THREE.Matrix4();
95
+ this.__blur = this.inputs.select('blur');
96
+ this.__resolution = this.inputs.select('resolution');
97
+ this.__mirror = this.inputs.select('mirror');
98
+ this.__mixBlur = this.inputs.select('mixBlur');
99
+ this.__mixStrength = this.inputs.select('mixStrength');
100
+ this.__minDepthThreshold = this.inputs.select('minDepthThreshold');
101
+ this.__maxDepthThreshold = this.inputs.select('maxDepthThreshold');
102
+ this.__depthScale = this.inputs.select('depthScale');
103
+ this.__depthToBlurRatioBias = this.inputs.select('depthToBlurRatioBias');
104
+ this.__distortion = this.inputs.select('distortion');
105
+ this.__distortionMap = this.inputs.select('distortionMap');
106
+ this.__mixContrast = this.inputs.select('mixContrast');
107
+ this.normalizedBlur = computed(() => {
108
+ const blur = this.__blur();
138
109
  return Array.isArray(blur) ? blur : [blur, blur];
139
110
  });
140
- this.#hasBlur = computed(() => {
141
- const [x, y] = this.#normalizedBlur();
111
+ this.__hasBlur = computed(() => {
112
+ const [x, y] = this.normalizedBlur();
142
113
  return x + y > 0;
143
114
  });
144
- this.#reflectorEntities = computed(() => {
145
- const gl = this.#gl();
146
- const resolution = this.#resolution();
147
- const blur = this.#normalizedBlur();
148
- const minDepthThreshold = this.#minDepthThreshold();
149
- const maxDepthThreshold = this.#maxDepthThreshold();
150
- const depthScale = this.#depthScale();
151
- const depthToBlurRatioBias = this.#depthToBlurRatioBias();
152
- const mirror = this.#mirror();
153
- const mixBlur = this.#mixBlur();
154
- const mixStrength = this.#mixStrength();
155
- const mixContrast = this.#mixContrast();
156
- const distortion = this.#distortion();
157
- const distortionMap = this.#distortionMap();
158
- const hasBlur = this.#hasBlur();
115
+ this.states = computed(() => {
116
+ const gl = this.gl();
117
+ const resolution = this.__resolution();
118
+ const blur = this.normalizedBlur();
119
+ const minDepthThreshold = this.__minDepthThreshold();
120
+ const maxDepthThreshold = this.__maxDepthThreshold();
121
+ const depthScale = this.__depthScale();
122
+ const depthToBlurRatioBias = this.__depthToBlurRatioBias();
123
+ const mirror = this.__mirror();
124
+ const mixBlur = this.__mixBlur();
125
+ const mixStrength = this.__mixStrength();
126
+ const mixContrast = this.__mixContrast();
127
+ const distortion = this.__distortion();
128
+ const distortionMap = this.__distortionMap();
129
+ const hasBlur = this.__hasBlur();
159
130
  const parameters = {
160
131
  minFilter: THREE.LinearFilter,
161
132
  magFilter: THREE.LinearFilter,
162
- encoding: gl.outputEncoding,
163
133
  type: THREE.HalfFloatType,
164
134
  };
165
135
  const fbo1 = new THREE.WebGLRenderTarget(resolution, resolution, parameters);
@@ -180,7 +150,7 @@ class NgtsMeshReflectorMaterial extends NgtSignalStore {
180
150
  });
181
151
  const reflectorProps = {
182
152
  mirror,
183
- textureMatrix: this.#textureMatrix,
153
+ textureMatrix: this._textureMatrix,
184
154
  mixBlur,
185
155
  tDiffuse: fbo1.texture,
186
156
  tDepth: fbo1.depthTexture,
@@ -202,29 +172,29 @@ class NgtsMeshReflectorMaterial extends NgtSignalStore {
202
172
  };
203
173
  return { fbo1, fbo2, blurPass, reflectorProps };
204
174
  });
205
- injectBeforeRender(this.#onBeforeRender.bind(this));
175
+ injectBeforeRender(this.onBeforeRender.bind(this));
206
176
  }
207
- #onBeforeRender(state) {
177
+ onBeforeRender(state) {
208
178
  if (!this.materialRef.nativeElement)
209
179
  return;
210
- const parent = getLocalState(this.materialRef.nativeElement).parent();
180
+ const parent = getLocalState(this.materialRef.nativeElement).parent?.();
211
181
  if (!parent)
212
182
  return;
213
183
  const { gl, scene } = state;
214
- const hasBlur = this.#hasBlur();
215
- const { fbo1, fbo2, blurPass } = this.#reflectorEntities();
184
+ const hasBlur = this.__hasBlur();
185
+ const { fbo1, fbo2, blurPass } = this.states();
216
186
  if (fbo1 && fbo2 && blurPass) {
217
187
  parent.visible = false;
218
188
  const currentXrEnabled = gl.xr.enabled;
219
189
  const currentShadowAutoUpdate = gl.shadowMap.autoUpdate;
220
- this.#beforeRender(state);
190
+ this.beforeRender(state);
221
191
  gl.xr.enabled = false;
222
192
  gl.shadowMap.autoUpdate = false;
223
193
  gl.setRenderTarget(fbo1);
224
194
  gl.state.buffers.depth.setMask(true);
225
195
  if (!gl.autoClear)
226
196
  gl.clear();
227
- gl.render(scene, this.#virtualCamera);
197
+ gl.render(scene, this.virtualCamera);
228
198
  if (hasBlur)
229
199
  blurPass.render(gl, fbo1, fbo2);
230
200
  gl.xr.enabled = currentXrEnabled;
@@ -233,151 +203,165 @@ class NgtsMeshReflectorMaterial extends NgtSignalStore {
233
203
  gl.setRenderTarget(null);
234
204
  }
235
205
  }
236
- #beforeRender(state) {
237
- const parent = getLocalState(this.materialRef.nativeElement).parent();
206
+ beforeRender(state) {
207
+ const parent = getLocalState(this.materialRef.nativeElement).parent?.();
238
208
  if (!parent)
239
209
  return;
240
210
  const { camera } = state;
241
- this.#reflectorWorldPosition.setFromMatrixPosition(parent.matrixWorld);
242
- this.#cameraWorldPosition.setFromMatrixPosition(camera.matrixWorld);
243
- this.#rotationMatrix.extractRotation(parent.matrixWorld);
244
- this.#normal.set(0, 0, 1);
245
- this.#normal.applyMatrix4(this.#rotationMatrix);
246
- this.#reflectorWorldPosition.addScaledVector(this.#normal, this.get('reflectorOffset'));
247
- this.#view.subVectors(this.#reflectorWorldPosition, this.#cameraWorldPosition);
211
+ this.reflectorWorldPosition.setFromMatrixPosition(parent.matrixWorld);
212
+ this.cameraWorldPosition.setFromMatrixPosition(camera.matrixWorld);
213
+ this.rotationMatrix.extractRotation(parent.matrixWorld);
214
+ this.normal.set(0, 0, 1);
215
+ this.normal.applyMatrix4(this.rotationMatrix);
216
+ this.reflectorWorldPosition.addScaledVector(this.normal, this.inputs.get('reflectorOffset'));
217
+ this.view.subVectors(this.reflectorWorldPosition, this.cameraWorldPosition);
248
218
  // Avoid rendering when reflector is facing away
249
- if (this.#view.dot(this.#normal) > 0)
219
+ if (this.view.dot(this.normal) > 0)
250
220
  return;
251
- this.#view.reflect(this.#normal).negate();
252
- this.#view.add(this.#reflectorWorldPosition);
253
- this.#rotationMatrix.extractRotation(camera.matrixWorld);
254
- this.#lookAtPosition.set(0, 0, -1);
255
- this.#lookAtPosition.applyMatrix4(this.#rotationMatrix);
256
- this.#lookAtPosition.add(this.#cameraWorldPosition);
257
- this.#target.subVectors(this.#reflectorWorldPosition, this.#lookAtPosition);
258
- this.#target.reflect(this.#normal).negate();
259
- this.#target.add(this.#reflectorWorldPosition);
260
- this.#virtualCamera.position.copy(this.#view);
261
- this.#virtualCamera.up.set(0, 1, 0);
262
- this.#virtualCamera.up.applyMatrix4(this.#rotationMatrix);
263
- this.#virtualCamera.up.reflect(this.#normal);
264
- this.#virtualCamera.lookAt(this.#target);
265
- this.#virtualCamera.far = camera.far; // Used in WebGLBackground
266
- this.#virtualCamera.updateMatrixWorld();
267
- this.#virtualCamera.projectionMatrix.copy(camera.projectionMatrix);
221
+ this.view.reflect(this.normal).negate();
222
+ this.view.add(this.reflectorWorldPosition);
223
+ this.rotationMatrix.extractRotation(camera.matrixWorld);
224
+ this.lookAtPosition.set(0, 0, -1);
225
+ this.lookAtPosition.applyMatrix4(this.rotationMatrix);
226
+ this.lookAtPosition.add(this.cameraWorldPosition);
227
+ this.target.subVectors(this.reflectorWorldPosition, this.lookAtPosition);
228
+ this.target.reflect(this.normal).negate();
229
+ this.target.add(this.reflectorWorldPosition);
230
+ this.virtualCamera.position.copy(this.view);
231
+ this.virtualCamera.up.set(0, 1, 0);
232
+ this.virtualCamera.up.applyMatrix4(this.rotationMatrix);
233
+ this.virtualCamera.up.reflect(this.normal);
234
+ this.virtualCamera.lookAt(this.target);
235
+ this.virtualCamera.far = camera.far; // Used in WebGLBackground
236
+ this.virtualCamera.updateMatrixWorld();
237
+ this.virtualCamera.projectionMatrix.copy(camera.projectionMatrix);
268
238
  // Update the texture matrix
269
- this.#textureMatrix.set(0.5, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0, 0.5, 0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.0, 1.0);
270
- this.#textureMatrix.multiply(this.#virtualCamera.projectionMatrix);
271
- this.#textureMatrix.multiply(this.#virtualCamera.matrixWorldInverse);
272
- this.#textureMatrix.multiply(parent.matrixWorld);
239
+ this._textureMatrix.set(0.5, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0, 0.5, 0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.0, 1.0);
240
+ this._textureMatrix.multiply(this.virtualCamera.projectionMatrix);
241
+ this._textureMatrix.multiply(this.virtualCamera.matrixWorldInverse);
242
+ this._textureMatrix.multiply(parent.matrixWorld);
273
243
  // Now update projection matrix with new clip plane, implementing code from: http://www.terathon.com/code/oblique.html
274
244
  // Paper explaining this technique: http://www.terathon.com/lengyel/Lengyel-Oblique.pdf
275
- this.#reflectorPlane.setFromNormalAndCoplanarPoint(this.#normal, this.#reflectorWorldPosition);
276
- this.#reflectorPlane.applyMatrix4(this.#virtualCamera.matrixWorldInverse);
277
- this.#clipPlane.set(this.#reflectorPlane.normal.x, this.#reflectorPlane.normal.y, this.#reflectorPlane.normal.z, this.#reflectorPlane.constant);
278
- const projectionMatrix = this.#virtualCamera.projectionMatrix;
279
- this.#q.x = (Math.sign(this.#clipPlane.x) + projectionMatrix.elements[8]) / projectionMatrix.elements[0];
280
- this.#q.y = (Math.sign(this.#clipPlane.y) + projectionMatrix.elements[9]) / projectionMatrix.elements[5];
281
- this.#q.z = -1.0;
282
- this.#q.w = (1.0 + projectionMatrix.elements[10]) / projectionMatrix.elements[14];
245
+ this.reflectorPlane.setFromNormalAndCoplanarPoint(this.normal, this.reflectorWorldPosition);
246
+ this.reflectorPlane.applyMatrix4(this.virtualCamera.matrixWorldInverse);
247
+ this.clipPlane.set(this.reflectorPlane.normal.x, this.reflectorPlane.normal.y, this.reflectorPlane.normal.z, this.reflectorPlane.constant);
248
+ const projectionMatrix = this.virtualCamera.projectionMatrix;
249
+ this.q.x = (Math.sign(this.clipPlane.x) + projectionMatrix.elements[8]) / projectionMatrix.elements[0];
250
+ this.q.y = (Math.sign(this.clipPlane.y) + projectionMatrix.elements[9]) / projectionMatrix.elements[5];
251
+ this.q.z = -1.0;
252
+ this.q.w = (1.0 + projectionMatrix.elements[10]) / projectionMatrix.elements[14];
283
253
  // Calculate the scaled plane vector
284
- this.#clipPlane.multiplyScalar(2.0 / this.#clipPlane.dot(this.#q));
254
+ this.clipPlane.multiplyScalar(2.0 / this.clipPlane.dot(this.q));
285
255
  // Replacing the third row of the projection matrix
286
- projectionMatrix.elements[2] = this.#clipPlane.x;
287
- projectionMatrix.elements[6] = this.#clipPlane.y;
288
- projectionMatrix.elements[10] = this.#clipPlane.z + 1.0;
289
- projectionMatrix.elements[14] = this.#clipPlane.w;
256
+ projectionMatrix.elements[2] = this.clipPlane.x;
257
+ projectionMatrix.elements[6] = this.clipPlane.y;
258
+ projectionMatrix.elements[10] = this.clipPlane.z + 1.0;
259
+ projectionMatrix.elements[14] = this.clipPlane.w;
290
260
  }
291
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsMeshReflectorMaterial, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
292
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: NgtsMeshReflectorMaterial, isStandalone: true, selector: "ngts-mesh-reflector-material", inputs: { materialRef: "materialRef", resolution: "resolution", mixBlur: "mixBlur", mixStrength: "mixStrength", blur: "blur", mirror: "mirror", minDepthThreshold: "minDepthThreshold", maxDepthThreshold: "maxDepthThreshold", depthScale: "depthScale", depthToBlurRatioBias: "depthToBlurRatioBias", distortionMap: "distortionMap", distortion: "distortion", mixContrast: "mixContrast", reflectorOffset: "reflectorOffset" }, usesInheritance: true, ngImport: i0, template: `
293
- <ngt-mesh-reflector-material
294
- ngtCompound
295
- attach="material"
296
- *ngIf="defines()"
297
- [ref]="materialRef"
298
- [defines]="defines()"
299
- [mirror]="reflectorMirror()"
300
- [textureMatrix]="reflectorTextureMatrix()"
301
- [mixBlur]="reflectorMixBlur()"
302
- [tDiffuse]="reflectorTDiffuse()"
303
- [tDepth]="reflectorTDepth()"
304
- [tDiffuseBlur]="reflectorTDiffuseBlur()"
305
- [hasBlur]="reflectorHasBlur()"
306
- [mixStrength]="reflectorMixStrength()"
307
- [minDepthThreshold]="reflectorMinDepthThreshold()"
308
- [maxDepthThreshold]="reflectorMaxDepthThreshold()"
309
- [depthScale]="reflectorDepthScale()"
310
- [depthToBlurRatioBias]="reflectorDepthToBlurRatioBias()"
311
- [distortion]="reflectorDistortion()"
312
- [distortionMap]="reflectorDistortionMap()"
313
- [mixContrast]="reflectorMixContrast()"
314
- >
315
- <ng-content />
316
- </ngt-mesh-reflector-material>
317
- `, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
261
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: NgtsMeshReflectorMaterial, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
262
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.2", type: NgtsMeshReflectorMaterial, isStandalone: true, selector: "ngts-mesh-reflector-material", inputs: { materialRef: "materialRef", _resolution: ["resolution", "_resolution"], _mixBlur: ["mixBlur", "_mixBlur"], _mixStrength: ["mixStrength", "_mixStrength"], _blur: ["blur", "_blur"], _mirror: ["mirror", "_mirror"], _minDepthThreshold: ["minDepthThreshold", "_minDepthThreshold"], _maxDepthThreshold: ["maxDepthThreshold", "_maxDepthThreshold"], _depthScale: ["depthScale", "_depthScale"], _depthToBlurRatioBias: ["depthToBlurRatioBias", "_depthToBlurRatioBias"], _distortionMap: ["distortionMap", "_distortionMap"], _distortion: ["distortion", "_distortion"], _mixContrast: ["mixContrast", "_mixContrast"], _reflectorOffset: ["reflectorOffset", "_reflectorOffset"] }, ngImport: i0, template: `
263
+ <ngt-mesh-reflector-material
264
+ *ngIf="defines() as defines"
265
+ [key]="defines"
266
+ ngtCompound
267
+ attach="material"
268
+ [ref]="materialRef"
269
+ [defines]="defines"
270
+ [mirror]="mirror()"
271
+ [textureMatrix]="textureMatrix()"
272
+ [mixBlur]="mixBlur()"
273
+ [tDiffuse]="tDiffuse()"
274
+ [tDepth]="tDepth()"
275
+ [tDiffuseBlur]="tDiffuseBlur()"
276
+ [hasBlur]="hasBlur()"
277
+ [mixStrength]="mixStrength()"
278
+ [minDepthThreshold]="minDepthThreshold()"
279
+ [maxDepthThreshold]="maxDepthThreshold()"
280
+ [depthScale]="depthScale()"
281
+ [depthToBlurRatioBias]="depthToBlurRatioBias()"
282
+ [distortion]="distortion()"
283
+ [distortionMap]="distortionMap()"
284
+ [mixContrast]="mixContrast()"
285
+ >
286
+ <ng-content />
287
+ </ngt-mesh-reflector-material>
288
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
318
289
  }
319
- export { NgtsMeshReflectorMaterial };
320
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsMeshReflectorMaterial, decorators: [{
290
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: NgtsMeshReflectorMaterial, decorators: [{
321
291
  type: Component,
322
292
  args: [{
323
293
  selector: 'ngts-mesh-reflector-material',
324
294
  standalone: true,
325
295
  template: `
326
- <ngt-mesh-reflector-material
327
- ngtCompound
328
- attach="material"
329
- *ngIf="defines()"
330
- [ref]="materialRef"
331
- [defines]="defines()"
332
- [mirror]="reflectorMirror()"
333
- [textureMatrix]="reflectorTextureMatrix()"
334
- [mixBlur]="reflectorMixBlur()"
335
- [tDiffuse]="reflectorTDiffuse()"
336
- [tDepth]="reflectorTDepth()"
337
- [tDiffuseBlur]="reflectorTDiffuseBlur()"
338
- [hasBlur]="reflectorHasBlur()"
339
- [mixStrength]="reflectorMixStrength()"
340
- [minDepthThreshold]="reflectorMinDepthThreshold()"
341
- [maxDepthThreshold]="reflectorMaxDepthThreshold()"
342
- [depthScale]="reflectorDepthScale()"
343
- [depthToBlurRatioBias]="reflectorDepthToBlurRatioBias()"
344
- [distortion]="reflectorDistortion()"
345
- [distortionMap]="reflectorDistortionMap()"
346
- [mixContrast]="reflectorMixContrast()"
347
- >
348
- <ng-content />
349
- </ngt-mesh-reflector-material>
350
- `,
351
- imports: [NgtArgs, NgIf],
296
+ <ngt-mesh-reflector-material
297
+ *ngIf="defines() as defines"
298
+ [key]="defines"
299
+ ngtCompound
300
+ attach="material"
301
+ [ref]="materialRef"
302
+ [defines]="defines"
303
+ [mirror]="mirror()"
304
+ [textureMatrix]="textureMatrix()"
305
+ [mixBlur]="mixBlur()"
306
+ [tDiffuse]="tDiffuse()"
307
+ [tDepth]="tDepth()"
308
+ [tDiffuseBlur]="tDiffuseBlur()"
309
+ [hasBlur]="hasBlur()"
310
+ [mixStrength]="mixStrength()"
311
+ [minDepthThreshold]="minDepthThreshold()"
312
+ [maxDepthThreshold]="maxDepthThreshold()"
313
+ [depthScale]="depthScale()"
314
+ [depthToBlurRatioBias]="depthToBlurRatioBias()"
315
+ [distortion]="distortion()"
316
+ [distortionMap]="distortionMap()"
317
+ [mixContrast]="mixContrast()"
318
+ >
319
+ <ng-content />
320
+ </ngt-mesh-reflector-material>
321
+ `,
322
+ imports: [NgIf, NgtKey],
352
323
  schemas: [CUSTOM_ELEMENTS_SCHEMA],
353
324
  }]
354
325
  }], ctorParameters: function () { return []; }, propDecorators: { materialRef: [{
355
326
  type: Input
356
- }], resolution: [{
357
- type: Input
358
- }], mixBlur: [{
359
- type: Input
360
- }], mixStrength: [{
361
- type: Input
362
- }], blur: [{
363
- type: Input
364
- }], mirror: [{
365
- type: Input
366
- }], minDepthThreshold: [{
367
- type: Input
368
- }], maxDepthThreshold: [{
369
- type: Input
370
- }], depthScale: [{
371
- type: Input
372
- }], depthToBlurRatioBias: [{
373
- type: Input
374
- }], distortionMap: [{
375
- type: Input
376
- }], distortion: [{
377
- type: Input
378
- }], mixContrast: [{
379
- type: Input
380
- }], reflectorOffset: [{
381
- type: Input
327
+ }], _resolution: [{
328
+ type: Input,
329
+ args: [{ alias: 'resolution' }]
330
+ }], _mixBlur: [{
331
+ type: Input,
332
+ args: [{ alias: 'mixBlur' }]
333
+ }], _mixStrength: [{
334
+ type: Input,
335
+ args: [{ alias: 'mixStrength' }]
336
+ }], _blur: [{
337
+ type: Input,
338
+ args: [{ alias: 'blur' }]
339
+ }], _mirror: [{
340
+ type: Input,
341
+ args: [{ alias: 'mirror' }]
342
+ }], _minDepthThreshold: [{
343
+ type: Input,
344
+ args: [{ alias: 'minDepthThreshold' }]
345
+ }], _maxDepthThreshold: [{
346
+ type: Input,
347
+ args: [{ alias: 'maxDepthThreshold' }]
348
+ }], _depthScale: [{
349
+ type: Input,
350
+ args: [{ alias: 'depthScale' }]
351
+ }], _depthToBlurRatioBias: [{
352
+ type: Input,
353
+ args: [{ alias: 'depthToBlurRatioBias' }]
354
+ }], _distortionMap: [{
355
+ type: Input,
356
+ args: [{ alias: 'distortionMap' }]
357
+ }], _distortion: [{
358
+ type: Input,
359
+ args: [{ alias: 'distortion' }]
360
+ }], _mixContrast: [{
361
+ type: Input,
362
+ args: [{ alias: 'mixContrast' }]
363
+ }], _reflectorOffset: [{
364
+ type: Input,
365
+ args: [{ alias: 'reflectorOffset' }]
382
366
  }] } });
383
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaC1yZWZsZWN0b3ItbWF0ZXJpYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvbWF0ZXJpYWxzL3NyYy9tZXNoLXJlZmxlY3Rvci1tYXRlcmlhbC9tZXNoLXJlZmxlY3Rvci1tYXRlcmlhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQ0gsTUFBTSxFQUNOLGFBQWEsRUFDYixrQkFBa0IsRUFDbEIsWUFBWSxFQUNaLE9BQU8sRUFFUCxjQUFjLEVBQ2QsUUFBUSxHQUNYLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RSxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQzs7QUFFL0IsTUFBTSxDQUFDLEVBQUUscUJBQXFCLEVBQUUsQ0FBQyxDQUFDO0FBa0JsQyxNQWdDYSx5QkFBMEIsU0FBUSxjQUE4QztJQUd6RixJQUFhLFVBQVUsQ0FBQyxVQUFrQjtRQUN0QyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBYSxPQUFPLENBQUMsT0FBZTtRQUNoQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBYSxXQUFXLENBQUMsV0FBbUI7UUFDeEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQWEsSUFBSSxDQUFDLElBQStCO1FBQzdDLElBQUksQ0FBQyxHQUFH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Z0JBQWdCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUN4RCxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDdEQsQ0FBQzs4R0EzUlEseUJBQXlCO2tHQUF6Qix5QkFBeUIsbWhCQTdCeEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0F5QlQsNERBQ2tCLElBQUk7O1NBR2QseUJBQXlCOzJGQUF6Qix5QkFBeUI7a0JBaENyQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSw4QkFBOEI7b0JBQ3hDLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0F5QlQ7b0JBQ0QsT0FBTyxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQztvQkFDeEIsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7aUJBQ3BDOzBFQUVZLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRU8sVUFBVTtzQkFBdEIsS0FBSztnQkFJTyxPQUFPO3NCQUFuQixLQUFLO2dCQUlPLFdBQVc7c0JBQXZCLEtBQUs7Z0JBSU8sSUFBSTtzQkFBaEIsS0FBSztnQkFJTyxNQUFNO3NCQUFsQixLQUFLO2dCQUlPLGlCQUFpQjtzQkFBN0IsS0FBSztnQkFJTyxpQkFBaUI7c0JBQTdCLEtBQUs7Z0JBSU8sVUFBVTtzQkFBdEIsS0FBSztnQkFJTyxvQkFBb0I7c0JBQWhDLEtBQUs7Z0JBSU8sYUFBYTtzQkFBekIsS0FBSztnQkFJTyxVQUFVO3NCQUF0QixLQUFLO2dCQUlPLFdBQVc7c0JBQXZCLEtBQUs7Z0JBSU8sZUFBZTtzQkFBM0IsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgaW5qZWN0LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBleHRlbmQsXG4gICAgZ2V0TG9jYWxTdGF0ZSxcbiAgICBpbmplY3RCZWZvcmVSZW5kZXIsXG4gICAgaW5qZWN0Tmd0UmVmLFxuICAgIE5ndEFyZ3MsXG4gICAgTmd0UmVuZGVyU3RhdGUsXG4gICAgTmd0U2lnbmFsU3RvcmUsXG4gICAgTmd0U3RvcmUsXG59IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgQmx1clBhc3MsIE1lc2hSZWZsZWN0b3JNYXRlcmlhbCB9IGZyb20gJ2FuZ3VsYXItdGhyZWUtc29iYS9zaGFkZXJzJztcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcblxuZXh0ZW5kKHsgTWVzaFJlZmxlY3Rvck1hdGVyaWFsIH0pO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHNNZXNoUmVmbGVjdG9yTWF0ZXJpYWxTdGF0ZSB7XG4gICAgcmVzb2x1dGlvbjogbnVtYmVyO1xuICAgIG1peEJsdXI6IG51bWJlcjtcbiAgICBtaXhTdHJlbmd0aDogbnVtYmVyO1xuICAgIGJsdXI6IFtudW1iZXIsIG51bWJlcl0gfCBudW1iZXI7XG4gICAgbWlycm9yOiBudW1iZXI7XG4gICAgbWluRGVwdGhUaHJlc2hvbGQ6IG51bWJlcjtcbiAgICBtYXhEZXB0aFRocmVzaG9sZDogbnVtYmVyO1xuICAgIGRlcHRoU2NhbGU6IG51bWJlcjtcbiAgICBkZXB0aFRvQmx1clJhdGlvQmlhczogbnVtYmVyO1xuICAgIGRpc3RvcnRpb25NYXA/OiBUSFJFRS5UZXh0dXJlO1xuICAgIGRpc3RvcnRpb246IG51bWJlcjtcbiAgICBtaXhDb250cmFzdDogbnVtYmVyO1xuICAgIHJlZmxlY3Rvck9mZnNldDogbnVtYmVyO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25ndHMtbWVzaC1yZWZsZWN0b3ItbWF0ZXJpYWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPG5ndC1tZXNoLXJlZmxlY3Rvci1tYXRlcmlhbFxuICAgICAgICAgICAgbmd0Q29tcG91bmRcbiAgICAgICAgICAgIGF0dGFjaD1cIm1hdGVyaWFsXCJcbiAgICAgICAgICAgICpuZ0lmPVwiZGVmaW5lcygpXCJcbiAgICAgICAgICAgIFtyZWZdPVwibWF0ZXJpYWxSZWZcIlxuICAgICAgICAgICAgW2RlZmluZXNdPVwiZGVmaW5lcygpXCJcbiAgICAgICAgICAgIFttaXJyb3JdPVwicmVmbGVjdG9yTWlycm9yKClcIlxuICAgICAgICAgICAgW3RleHR1cmVNYXRyaXhdPVwicmVmbGVjdG9yVGV4dHVyZU1hdHJpeCgpXCJcbiAgICAgICAgICAgIFttaXhCbHVyXT1cInJlZmxlY3Rvck1peEJsdXIoKVwiXG4gICAgICAgICAgICBbdERpZmZ1c2VdPVwicmVmbGVjdG9yVERpZmZ1c2UoKVwiXG4gICAgICAgICAgICBbdERlcHRoXT1cInJlZmxlY3RvclREZXB0aCgpXCJcbiAgICAgICAgICAgIFt0RGlmZnVzZUJsdXJdPVwicmVmbGVjdG9yVERpZmZ1c2VCbHVyKClcIlxuICAgICAgICAgICAgW2hhc0JsdXJdPVwicmVmbGVjdG9ySGFzQmx1cigpXCJcbiAgICAgICAgICAgIFttaXhTdHJlbmd0aF09XCJyZWZsZWN0b3JNaXhTdHJlbmd0aCgpXCJcbiAgICAgICAgICAgIFttaW5EZXB0aFRocmVzaG9sZF09XCJyZWZsZWN0b3JNaW5EZXB0aFRocmVzaG9sZCgpXCJcbiAgICAgICAgICAgIFttYXhEZXB0aFRocmVzaG9sZF09XCJyZWZsZWN0b3JNYXhEZXB0aFRocmVzaG9sZCgpXCJcbiAgICAgICAgICAgIFtkZXB0aFNjYWxlXT1cInJlZmxlY3RvckRlcHRoU2NhbGUoKVwiXG4gICAgICAgICAgICBbZGVwdGhUb0JsdXJSYXRpb0JpYXNdPVwicmVmbGVjdG9yRGVwdGhUb0JsdXJSYXRpb0JpYXMoKVwiXG4gICAgICAgICAgICBbZGlzdG9ydGlvbl09XCJyZWZsZWN0b3JEaXN0b3J0aW9uKClcIlxuICAgICAgICAgICAgW2Rpc3RvcnRpb25NYXBdPVwicmVmbGVjdG9yRGlzdG9ydGlvbk1hcCgpXCJcbiAgICAgICAgICAgIFttaXhDb250cmFzdF09XCJyZWZsZWN0b3JNaXhDb250cmFzdCgpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgLz5cbiAgICAgICAgPC9uZ3QtbWVzaC1yZWZsZWN0b3ItbWF0ZXJpYWw+XG4gICAgYCxcbiAgICBpbXBvcnRzOiBbTmd0QXJncywgTmdJZl0sXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzTWVzaFJlZmxlY3Rvck1hdGVyaWFsIGV4dGVuZHMgTmd0U2lnbmFsU3RvcmU8Tmd0c01lc2hSZWZsZWN0b3JNYXRlcmlhbFN0YXRlPiB7XG4gICAgQElucHV0KCkgbWF0ZXJpYWxSZWYgPSBpbmplY3ROZ3RSZWY8TWVzaFJlZmxlY3Rvck1hdGVyaWFsPigpO1xuXG4gICAgQElucHV0KCkgc2V0IHJlc29sdXRpb24ocmVzb2x1dGlvbjogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgcmVzb2x1dGlvbiB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgbWl4Qmx1cihtaXhCbHVyOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBtaXhCbHVyIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBtaXhTdHJlbmd0aChtaXhTdHJlbmd0aDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgbWl4U3RyZW5ndGggfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGJsdXIoYmx1cjogW251bWJlciwgbnVtYmVyXSB8IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IGJsdXIgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IG1pcnJvcihtaXJyb3I6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IG1pcnJvciB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgbWluRGVwdGhUaHJlc2hvbGQobWluRGVwdGhUaHJlc2hvbGQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IG1pbkRlcHRoVGhyZXNob2xkIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBtYXhEZXB0aFRocmVzaG9sZChtYXhEZXB0aFRocmVzaG9sZDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgbWF4RGVwdGhUaHJlc2hvbGQgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGRlcHRoU2NhbGUoZGVwdGhTY2FsZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgZGVwdGhTY2FsZSB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgZGVwdGhUb0JsdXJSYXRpb0JpYXMoZGVwdGhUb0JsdXJSYXRpb0JpYXM6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IGRlcHRoVG9CbHVyUmF0aW9CaWFzIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBkaXN0b3J0aW9uTWFwKGRpc3RvcnRpb25NYXA6IFRIUkVFLlRleHR1cmUpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBkaXN0b3J0aW9uTWFwIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBkaXN0b3J0aW9uKGRpc3RvcnRpb246IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IGRpc3RvcnRpb24gfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IG1peENvbnRyYXN0KG1peENvbnRyYXN0OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBtaXhDb250cmFzdCB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgcmVmbGVjdG9yT2Zmc2V0KHJlZmxlY3Rvck9mZnNldDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgcmVmbGVjdG9yT2Zmc2V0IH0pO1xuICAgIH1cblxuICAgIHJlYWRvbmx5IHJlZmxlY3RvclByb3BzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy4jcmVmbGVjdG9yRW50aXRpZXMoKS5yZWZsZWN0b3JQcm9wcyk7XG4gICAgcmVhZG9ubHkgZGVmaW5lcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMucmVmbGVjdG9yUHJvcHMoKS5kZWZpbmVzKTtcbiAgICByZWFkb25seSByZWZsZWN0b3JNaXJyb3IgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJlZmxlY3RvclByb3BzKCkubWlycm9yKTtcbiAgICByZWFkb25seSByZWZsZWN0b3JUZXh0dXJlTWF0cml4ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5yZWZsZWN0b3JQcm9wcygpLnRleHR1cmVNYXRyaXgpO1xuICAgIHJlYWRvbmx5IHJlZmxlY3Rvck1peEJsdXIgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJlZmxlY3RvclByb3BzKCkubWl4Qmx1cik7XG4gICAgcmVhZG9ubHkgcmVmbGVjdG9yVERpZmZ1c2UgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJlZmxlY3RvclByb3BzKCkudERpZmZ1c2UpO1xuICAgIHJlYWRvbmx5IHJlZmxlY3RvclREZXB0aCA9IGNvbXB1dGVkKCgpID0+IHRoaXMucmVmbGVjdG9yUHJvcHMoKS50RGVwdGgpO1xuICAgIHJlYWRvbmx5IHJlZmxlY3RvclREaWZmdXNlQmx1ciA9IGNvbXB1dGVkKCgpID0+IHRoaXMucmVmbGVjdG9yUHJvcHMoKS50RGlmZnVzZUJsdXIpO1xuICAgIHJlYWRvbmx5IHJlZmxlY3Rvckhhc0JsdXIgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJlZmxlY3RvclByb3BzKCkuaGFzQmx1cik7XG4gICAgcmVhZG9ubHkgcmVmbGVjdG9yTWl4U3RyZW5ndGggPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJlZmxlY3RvclByb3BzKCkubWl4U3RyZW5ndGgpO1xuICAgIHJlYWRvbmx5IHJlZmxlY3Rvck1pbkRlcHRoVGhyZXNob2xkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5yZWZsZWN0b3JQcm9wcygpLm1pbkRlcHRoVGhyZXNob2xkKTtcbiAgICByZWFkb25seSByZWZsZWN0b3JNYXhEZXB0aFRocmVzaG9sZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMucmVmbGVjdG9yUHJvcHMoKS5tYXhEZXB0aFRocmVzaG9sZCk7XG4gICAgcmVhZG9ubHkgcmVmbGVjdG9yRGVwdGhTY2FsZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMucmVmbGVjdG9yUHJvcHMoKS5kZXB0aFNjYWxlKTtcbiAgICByZWFkb25seSByZWZsZWN0b3JEZXB0aFRvQmx1clJhdGlvQmlhcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMucmVmbGVjdG9yUHJvcHMoKS5kZXB0aFRvQmx1clJhdGlvQmlhcyk7XG4gICAgcmVhZG9ubHkgcmVmbGVjdG9yRGlzdG9ydGlvbiA9IGNvbXB1dGVkKCgpID0+IHRoaXMucmVmbGVjdG9yUHJvcHMoKS5kaXN0b3J0aW9uKTtcbiAgICByZWFkb25seSByZWZsZWN0b3JEaXN0b3J0aW9uTWFwID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5yZWZsZWN0b3JQcm9wcygpLmRpc3RvcnRpb25NYXApO1xuICAgIHJlYWRvbmx5IHJlZmxlY3Rvck1peENvbnRyYXN0ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5yZWZsZWN0b3JQcm9wcygpLm1peENvbnRyYXN0KTtcblxuICAgIHJlYWRvbmx5ICNzdG9yZSA9IGluamVjdChOZ3RTdG9yZSk7XG4gICAgcmVhZG9ubHkgI2dsID0gdGhpcy4jc3RvcmUuc2VsZWN0KCdnbCcpO1xuXG4gICAgcmVhZG9ubHkgI3JlZmxlY3RvclBsYW5lID0gbmV3IFRIUkVFLlBsYW5lKCk7XG4gICAgcmVhZG9ubHkgI25vcm1hbCA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XG4gICAgcmVhZG9ubHkgI3JlZmxlY3RvcldvcmxkUG9zaXRpb24gPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xuICAgIHJlYWRvbmx5ICNjYW1lcmFXb3JsZFBvc2l0aW9uID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcbiAgICByZWFkb25seSAjcm90YXRpb25NYXRyaXggPSBuZXcgVEhSRUUuTWF0cml4NCgpO1xuICAgIHJlYWRvbmx5ICNsb29rQXRQb3NpdGlvbiA9IG5ldyBUSFJFRS5WZWN0b3IzKDAsIDAsIC0xKTtcbiAgICByZWFkb25seSAjY2xpcFBsYW5lID0gbmV3IFRIUkVFLlZlY3RvcjQoKTtcbiAgICByZWFkb25seSAjdmlldyA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XG4gICAgcmVhZG9ubHkgI3RhcmdldCA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XG4gICAgcmVhZG9ubHkgI3EgPSBuZXcgVEhSRUUuVmVjdG9yNCgpO1xuICAgIHJlYWRvbmx5ICN0ZXh0dXJlTWF0cml4ID0gbmV3IFRIUkVFLk1hdHJpeDQoKTtcbiAgICByZWFkb25seSAjdmlydHVhbENhbWVyYSA9IG5ldyBUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYSgpO1xuXG4gICAgcmVhZG9ubHkgI2JsdXIgPSB0aGlzLnNlbGVjdCgnYmx1cicpO1xuICAgIHJlYWRvbmx5ICNyZXNvbHV0aW9uID0gdGhpcy5zZWxlY3QoJ3Jlc29sdXRpb24nKTtcbiAgICByZWFkb25seSAjbWlycm9yID0gdGhpcy5zZWxlY3QoJ21pcnJvcicpO1xuICAgIHJlYWRvbmx5ICNtaXhCbHVyID0gdGhpcy5zZWxlY3QoJ21peEJsdXInKTtcbiAgICByZWFkb25seSAjbWl4U3RyZW5ndGggPSB0aGlzLnNlbGVjdCgnbWl4U3RyZW5ndGgnKTtcbiAgICByZWFkb25seSAjbWluRGVwdGhUaHJlc2hvbGQgPSB0aGlzLnNlbGVjdCgnbWluRGVwdGhUaHJlc2hvbGQnKTtcbiAgICByZWFkb25seSAjbWF4RGVwdGhUaHJlc2hvbGQgPSB0aGlzLnNlbGVjdCgnbWF4RGVwdGhUaHJlc2hvbGQnKTtcbiAgICByZWFkb25seSAjZGVwdGhTY2FsZSA9IHRoaXMuc2VsZWN0KCdkZXB0aFNjYWxlJyk7XG4gICAgcmVhZG9ubHkgI2RlcHRoVG9CbHVyUmF0aW9CaWFzID0gdGhpcy5zZWxlY3QoJ2RlcHRoVG9CbHVyUmF0aW9CaWFzJyk7XG4gICAgcmVhZG9ubHkgI2Rpc3RvcnRpb24gPSB0aGlzLnNlbGVjdCgnZGlzdG9ydGlvbicpO1xuICAgIHJlYWRvbmx5ICNkaXN0b3J0aW9uTWFwID0gdGhpcy5zZWxlY3QoJ2Rpc3RvcnRpb25NYXAnKTtcbiAgICByZWFkb25seSAjbWl4Q29udHJhc3QgPSB0aGlzLnNlbGVjdCgnbWl4Q29udHJhc3QnKTtcblxuICAgIHJlYWRvbmx5ICNub3JtYWxpemVkQmx1ciA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgYmx1ciA9IHRoaXMuI2JsdXIoKTtcbiAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYmx1cikgPyBibHVyIDogW2JsdXIsIGJsdXJdO1xuICAgIH0pO1xuXG4gICAgcmVhZG9ubHkgI2hhc0JsdXIgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IFt4LCB5XSA9IHRoaXMuI25vcm1hbGl6ZWRCbHVyKCk7XG4gICAgICAgIHJldHVybiB4ICsgeSA+IDA7XG4gICAgfSk7XG5cbiAgICByZWFkb25seSAjcmVmbGVjdG9yRW50aXRpZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy4jZ2woKTtcbiAgICAgICAgY29uc3QgcmVzb2x1dGlvbiA9IHRoaXMuI3Jlc29sdXRpb24oKTtcbiAgICAgICAgY29uc3QgYmx1ciA9IHRoaXMuI25vcm1hbGl6ZWRCbHVyKCk7XG4gICAgICAgIGNvbnN0IG1pbkRlcHRoVGhyZXNob2xkID0gdGhpcy4jbWluRGVwdGhUaHJlc2hvbGQoKTtcbiAgICAgICAgY29uc3QgbWF4RGVwdGhUaHJlc2hvbGQgPSB0aGlzLiNtYXhEZXB0aFRocmVzaG9sZCgpO1xuICAgICAgICBjb25zdCBkZXB0aFNjYWxlID0gdGhpcy4jZGVwdGhTY2FsZSgpO1xuICAgICAgICBjb25zdCBkZXB0aFRvQmx1clJhdGlvQmlhcyA9IHRoaXMuI2RlcHRoVG9CbHVyUmF0aW9CaWFzKCk7XG4gICAgICAgIGNvbnN0IG1pcnJvciA9IHRoaXMuI21pcnJvcigpO1xuICAgICAgICBjb25zdCBtaXhCbHVyID0gdGhpcy4jbWl4Qmx1cigpO1xuICAgICAgICBjb25zdCBtaXhTdHJlbmd0aCA9IHRoaXMuI21peFN0cmVuZ3RoKCk7XG4gICAgICAgIGNvbnN0IG1peENvbnRyYXN0ID0gdGhpcy4jbWl4Q29udHJhc3QoKTtcbiAgICAgICAgY29uc3QgZGlzdG9ydGlvbiA9IHRoaXMuI2Rpc3RvcnRpb24oKTtcbiAgICAgICAgY29uc3QgZGlzdG9ydGlvbk1hcCA9IHRoaXMuI2Rpc3RvcnRpb25NYXAoKTtcbiAgICAgICAgY29uc3QgaGFzQmx1ciA9IHRoaXMuI2hhc0JsdXIoKTtcblxuICAgICAgICBjb25zdCBwYXJhbWV0ZXJzID0ge1xuICAgICAgICAgICAgbWluRmlsdGVyOiBUSFJFRS5MaW5lYXJGaWx0ZXIsXG4gICAgICAgICAgICBtYWdGaWx0ZXI6IFRIUkVFLkxpbmVhckZpbHRlcixcbiAgICAgICAgICAgIGVuY29kaW5nOiBnbC5vdXRwdXRFbmNvZGluZyxcbiAgICAgICAgICAgIHR5cGU6IFRIUkVFLkhhbGZGbG9hdFR5cGUsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGZibzEgPSBuZXcgVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQocmVzb2x1dGlvbiwgcmVzb2x1dGlvbiwgcGFyYW1ldGVycyk7XG4gICAgICAgIGZibzEuZGVwdGhCdWZmZXIgPSB0cnVlO1xuICAgICAgICBmYm8xLmRlcHRoVGV4dHVyZSA9IG5ldyBUSFJFRS5EZXB0aFRleHR1cmUocmVzb2x1dGlvbiwgcmVzb2x1dGlvbik7XG4gICAgICAgIGZibzEuZGVwdGhUZXh0dXJlLmZvcm1hdCA9IFRIUkVFLkRlcHRoRm9ybWF0O1xuICAgICAgICBmYm8xLmRlcHRoVGV4dHVyZS50eXBlID0gVEhSRUUuVW5zaWduZWRTaG9ydFR5cGU7XG5cbiAgICAgICAgY29uc3QgZmJvMiA9IG5ldyBUSFJFRS5XZWJHTFJlbmRlclRhcmdldChyZXNvbHV0aW9uLCByZXNvbHV0aW9uLCBwYXJhbWV0ZXJzKTtcbiAgICAgICAgY29uc3QgYmx1clBhc3MgPSBuZXcgQmx1clBhc3Moe1xuICAgICAgICAgICAgZ2wsXG4gICAgICAgICAgICByZXNvbHV0aW9uLFxuICAgICAgICAgICAgd2lkdGg6IGJsdXJbMF0sXG4gICAgICAgICAgICBoZWlnaHQ6IGJsdXJbMV0sXG4gICAgICAgICAgICBtaW5EZXB0aFRocmVzaG9sZCxcbiAgICAgICAgICAgIG1heERlcHRoVGhyZXNob2xkLFxuICAgICAgICAgICAgZGVwdGhTY2FsZSxcbiAgICAgICAgICAgIGRlcHRoVG9CbHVyUmF0aW9CaWFzLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVmbGVjdG9yUHJvcHMgPSB7XG4gICAgICAgICAgICBtaXJyb3IsXG4gICAgICAgICAgICB0ZXh0dXJlTWF0cml4OiB0aGlzLiN0ZXh0dXJlTWF0cml4LFxuICAgICAgICAgICAgbWl4Qmx1cixcbiAgICAgICAgICAgIHREaWZmdXNlOiBmYm8xLnRleHR1cmUsXG4gICAgICAgICAgICB0RGVwdGg6IGZibzEuZGVwdGhUZXh0dXJlLFxuICAgICAgICAgICAgdERpZmZ1c2VCbHVyOiBmYm8yLnRleHR1cmUsXG4gICAgICAgICAgICBoYXNCbHVyLFxuICAgICAgICAgICAgbWl4U3RyZW5ndGgsXG4gICAgICAgICAgICBtaW5EZXB0aFRocmVzaG9sZCxcbiAgICAgICAgICAgIG1heERlcHRoVGhyZXNob2xkLFxuICAgICAgICAgICAgZGVwdGhTY2FsZSxcbiAgICAgICAgICAgIGRlcHRoVG9CbHVyUmF0aW9CaWFzLFxuICAgICAgICAgICAgZGlzdG9ydGlvbixcbiAgICAgICAgICAgIGRpc3RvcnRpb25NYXAsXG4gICAgICAgICAgICBtaXhDb250cmFzdCxcbiAgICAgICAgICAgIGRlZmluZXM6IHtcbiAgICAgICAgICAgICAgICBVU0VfQkxVUjogaGFzQmx1ciA/ICcnIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIFVTRV9ERVBUSDogZGVwdGhTY2FsZSA+IDAgPyAnJyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBVU0VfRElTVE9SVElPTjogZGlzdG9ydGlvbk1hcCA/ICcnIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4geyBmYm8xLCBmYm8yLCBibHVyUGFzcywgcmVmbGVjdG9yUHJvcHMgfTtcbiAgICB9KTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICBtaXhCbHVyOiAwLFxuICAgICAgICAgICAgbWl4U3RyZW5ndGg6IDEsXG4gICAgICAgICAgICByZXNvbHV0aW9uOiAyNTYsXG4gICAgICAgICAgICBibHVyOiBbMCwgMF0sXG4gICAgICAgICAgICBtaW5EZXB0aFRocmVzaG9sZDogMC45LFxuICAgICAgICAgICAgbWF4RGVwdGhUaHJlc2hvbGQ6IDEsXG4gICAgICAgICAgICBkZXB0aFNjYWxlOiAwLFxuICAgICAgICAgICAgZGVwdGhUb0JsdXJSYXRpb0JpYXM6IDAuMjUsXG4gICAgICAgICAgICBtaXJyb3I6IDAsXG4gICAgICAgICAgICBkaXN0b3J0aW9uOiAxLFxuICAgICAgICAgICAgbWl4Q29udHJhc3Q6IDEsXG4gICAgICAgICAgICByZWZsZWN0b3JPZmZzZXQ6IDAsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGluamVjdEJlZm9yZVJlbmRlcih0aGlzLiNvbkJlZm9yZVJlbmRlci5iaW5kKHRoaXMpKTtcbiAgICB9XG5cbiAgICAjb25CZWZvcmVSZW5kZXIoc3RhdGU6IE5ndFJlbmRlclN0YXRlKSB7XG4gICAgICAgIGlmICghdGhpcy5tYXRlcmlhbFJlZi5uYXRpdmVFbGVtZW50KSByZXR1cm47XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGdldExvY2FsU3RhdGUodGhpcy5tYXRlcmlhbFJlZi5uYXRpdmVFbGVtZW50KS5wYXJlbnQoKTtcbiAgICAgICAgaWYgKCFwYXJlbnQpIHJldHVybjtcblxuICAgICAgICBjb25zdCB7IGdsLCBzY2VuZSB9ID0gc3RhdGU7XG4gICAgICAgIGNvbnN0IGhhc0JsdXIgPSB0aGlzLiNoYXNCbHVyKCk7XG4gICAgICAgIGNvbnN0IHsgZmJvMSwgZmJvMiwgYmx1clBhc3MgfSA9IHRoaXMuI3JlZmxlY3RvckVudGl0aWVzKCk7XG5cbiAgICAgICAgaWYgKGZibzEgJiYgZmJvMiAmJiBibHVyUGFzcykge1xuICAgICAgICAgICAgcGFyZW50LnZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRYckVuYWJsZWQgPSBnbC54ci5lbmFibGVkO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFNoYWRvd0F1dG9VcGRhdGUgPSBnbC5zaGFkb3dNYXAuYXV0b1VwZGF0ZTtcbiAgICAgICAgICAgIHRoaXMuI2JlZm9yZVJlbmRlcihzdGF0ZSk7XG4gICAgICAgICAgICBnbC54ci5lbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgICBnbC5zaGFkb3dNYXAuYXV0b1VwZGF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgZ2wuc2V0UmVuZGVyVGFyZ2V0KGZibzEpO1xuICAgICAgICAgICAgZ2wuc3RhdGUuYnVmZmVycy5kZXB0aC5zZXRNYXNrKHRydWUpO1xuICAgICAgICAgICAgaWYgKCFnbC5hdXRvQ2xlYXIpIGdsLmNsZWFyKCk7XG4gICAgICAgICAgICBnbC5yZW5kZXIoc2NlbmUsIHRoaXMuI3ZpcnR1YWxDYW1lcmEpO1xuICAgICAgICAgICAgaWYgKGhhc0JsdXIpIGJsdXJQYXNzLnJlbmRlcihnbCwgZmJvMSwgZmJvMik7XG4gICAgICAgICAgICBnbC54ci5lbmFibGVkID0gY3VycmVudFhyRW5hYmxlZDtcbiAgICAgICAgICAgIGdsLnNoYWRvd01hcC5hdXRvVXBkYXRlID0gY3VycmVudFNoYWRvd0F1dG9VcGRhdGU7XG4gICAgICAgICAgICBwYXJlbnQudmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICBnbC5zZXRSZW5kZXJUYXJnZXQobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAjYmVmb3JlUmVuZGVyKHN0YXRlOiBOZ3RSZW5kZXJTdGF0ZSkge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBnZXRMb2NhbFN0YXRlKHRoaXMubWF0ZXJpYWxSZWYubmF0aXZlRWxlbWVudCkucGFyZW50KCk7XG4gICAgICAgIGlmICghcGFyZW50KSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgeyBjYW1lcmEgfSA9IHN0YXRlO1xuXG4gICAgICAgIHRoaXMuI3JlZmxlY3RvcldvcmxkUG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHBhcmVudC5tYXRyaXhXb3JsZCk7XG4gICAgICAgIHRoaXMuI2NhbWVyYVdvcmxkUG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGNhbWVyYS5tYXRyaXhXb3JsZCk7XG4gICAgICAgIHRoaXMuI3JvdGF0aW9uTWF0cml4LmV4dHJhY3RSb3RhdGlvbihwYXJlbnQubWF0cml4V29ybGQpO1xuICAgICAgICB0aGlzLiNub3JtYWwuc2V0KDAsIDAsIDEpO1xuICAgICAgICB0aGlzLiNub3JtYWwuYXBwbHlNYXRyaXg0KHRoaXMuI3JvdGF0aW9uTWF0cml4KTtcbiAgICAgICAgdGhpcy4jcmVmbGVjdG9yV29ybGRQb3NpdGlvbi5hZGRTY2FsZWRWZWN0b3IodGhpcy4jbm9ybWFsLCB0aGlzLmdldCgncmVmbGVjdG9yT2Zmc2V0JykpO1xuICAgICAgICB0aGlzLiN2aWV3LnN1YlZlY3RvcnModGhpcy4jcmVmbGVjdG9yV29ybGRQb3NpdGlvbiwgdGhpcy4jY2FtZXJhV29ybGRQb3NpdGlvbik7XG4gICAgICAgIC8vIEF2b2lkIHJlbmRlcmluZyB3aGVuIHJlZmxlY3RvciBpcyBmYWNpbmcgYXdheVxuICAgICAgICBpZiAodGhpcy4jdmlldy5kb3QodGhpcy4jbm9ybWFsKSA+IDApIHJldHVybjtcbiAgICAgICAgdGhpcy4jdmlldy5yZWZsZWN0KHRoaXMuI25vcm1hbCkubmVnYXRlKCk7XG4gICAgICAgIHRoaXMuI3ZpZXcuYWRkKHRoaXMuI3JlZmxlY3RvcldvcmxkUG9zaXRpb24pO1xuICAgICAgICB0aGlzLiNyb3RhdGlvbk1hdHJpeC5leHRyYWN0Um90YXRpb24oY2FtZXJhLm1hdHJpeFdvcmxkKTtcbiAgICAgICAgdGhpcy4jbG9va0F0UG9zaXRpb24uc2V0KDAsIDAsIC0xKTtcbiAgICAgICAgdGhpcy4jbG9va0F0UG9zaXRpb24uYXBwbHlNYXRyaXg0KHRoaXMuI3JvdGF0aW9uTWF0cml4KTtcbiAgICAgICAgdGhpcy4jbG9va0F0UG9zaXRpb24uYWRkKHRoaXMuI2NhbWVyYVdvcmxkUG9zaXRpb24pO1xuICAgICAgICB0aGlzLiN0YXJnZXQuc3ViVmVjdG9ycyh0aGlzLiNyZWZsZWN0b3JXb3JsZFBvc2l0aW9uLCB0aGlzLiNsb29rQXRQb3NpdGlvbik7XG4gICAgICAgIHRoaXMuI3RhcmdldC5yZWZsZWN0KHRoaXMuI25vcm1hbCkubmVnYXRlKCk7XG4gICAgICAgIHRoaXMuI3RhcmdldC5hZGQodGhpcy4jcmVmbGVjdG9yV29ybGRQb3NpdGlvbik7XG4gICAgICAgIHRoaXMuI3ZpcnR1YWxDYW1lcmEucG9zaXRpb24uY29weSh0aGlzLiN2aWV3KTtcbiAgICAgICAgdGhpcy4jdmlydHVhbENhbWVyYS51cC5zZXQoMCwgMSwgMCk7XG4gICAgICAgIHRoaXMuI3ZpcnR1YWxDYW1lcmEudXAuYXBwbHlNYXRyaXg0KHRoaXMuI3JvdGF0aW9uTWF0cml4KTtcbiAgICAgICAgdGhpcy4jdmlydHVhbENhbWVyYS51cC5yZWZsZWN0KHRoaXMuI25vcm1hbCk7XG4gICAgICAgIHRoaXMuI3ZpcnR1YWxDYW1lcmEubG9va0F0KHRoaXMuI3RhcmdldCk7XG4gICAgICAgIHRoaXMuI3ZpcnR1YWxDYW1lcmEuZmFyID0gY2FtZXJhLmZhcjsgLy8gVXNlZCBpbiBXZWJHTEJhY2tncm91bmRcbiAgICAgICAgdGhpcy4jdmlydHVhbENhbWVyYS51cGRhdGVNYXRyaXhXb3JsZCgpO1xuICAgICAgICB0aGlzLiN2aXJ0dWFsQ2FtZXJhLnByb2plY3Rpb25NYXRyaXguY29weShjYW1lcmEucHJvamVjdGlvbk1hdHJpeCk7XG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgdGV4dHVyZSBtYXRyaXhcbiAgICAgICAgdGhpcy4jdGV4dHVyZU1hdHJpeC5zZXQoMC41LCAwLjAsIDAuMCwgMC41LCAwLjAsIDAuNSwgMC4wLCAwLjUsIDAuMCwgMC4wLCAwLjUsIDAuNSwgMC4wLCAwLjAsIDAuMCwgMS4wKTtcbiAgICAgICAgdGhpcy4jdGV4dHVyZU1hdHJpeC5tdWx0aXBseSh0aGlzLiN2aXJ0dWFsQ2FtZXJhLnByb2plY3Rpb25NYXRyaXgpO1xuICAgICAgICB0aGlzLiN0ZXh0dXJlTWF0cml4Lm11bHRpcGx5KHRoaXMuI3ZpcnR1YWxDYW1lcmEubWF0cml4V29ybGRJbnZlcnNlKTtcbiAgICAgICAgdGhpcy4jdGV4dHVyZU1hdHJpeC5tdWx0aXBseShwYXJlbnQubWF0cml4V29ybGQpO1xuICAgICAgICAvLyBOb3cgdXBkYXRlIHByb2plY3Rpb24gbWF0cml4IHdpdGggbmV3IGNsaXAgcGxhbmUsIGltcGxlbWVudGluZyBjb2RlIGZyb206IGh0dHA6Ly93d3cudGVyYXRob24uY29tL2NvZGUvb2JsaXF1ZS5odG1sXG4gICAgICAgIC8vIFBhcGVyIGV4cGxhaW5pbmcgdGhpcyB0ZWNobmlxdWU6IGh0dHA6Ly93d3cudGVyYXRob24uY29tL2xlbmd5ZWwvTGVuZ3llbC1PYmxpcXVlLnBkZlxuICAgICAgICB0aGlzLiNyZWZsZWN0b3JQbGFuZS5zZXRGcm9tTm9ybWFsQW5kQ29wbGFuYXJQb2ludCh0aGlzLiNub3JtYWwsIHRoaXMuI3JlZmxlY3RvcldvcmxkUG9zaXRpb24pO1xuICAgICAgICB0aGlzLiNyZWZsZWN0b3JQbGFuZS5hcHBseU1hdHJpeDQodGhpcy4jdmlydHVhbENhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UpO1xuICAgICAgICB0aGlzLiNjbGlwUGxhbmUuc2V0KFxuICAgICAgICAgICAgdGhpcy4jcmVmbGVjdG9yUGxhbmUubm9ybWFsLngsXG4gICAgICAgICAgICB0aGlzLiNyZWZsZWN0b3JQbGFuZS5ub3JtYWwueSxcbiAgICAgICAgICAgIHRoaXMuI3JlZmxlY3RvclBsYW5lLm5vcm1hbC56LFxuICAgICAgICAgICAgdGhpcy4jcmVmbGVjdG9yUGxhbmUuY29uc3RhbnRcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgcHJvamVjdGlvbk1hdHJpeCA9IHRoaXMuI3ZpcnR1YWxDYW1lcmEucHJvamVjdGlvbk1hdHJpeDtcbiAgICAgICAgdGhpcy4jcS54ID0gKE1hdGguc2lnbih0aGlzLiNjbGlwUGxhbmUueCkgKyBwcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzhdKSAvIHByb2plY3Rpb25NYXRyaXguZWxlbWVudHNbMF07XG4gICAgICAgIHRoaXMuI3EueSA9IChNYXRoLnNpZ24odGhpcy4jY2xpcFBsYW5lLnkpICsgcHJvamVjdGlvbk1hdHJpeC5lbGVtZW50c1s5XSkgLyBwcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzVdO1xuICAgICAgICB0aGlzLiNxLnogPSAtMS4wO1xuICAgICAgICB0aGlzLiNxLncgPSAoMS4wICsgcHJvamVjdGlvbk1hdHJpeC5lbGVtZW50c1sxMF0pIC8gcHJvamVjdGlvbk1hdHJpeC5lbGVtZW50c1sxNF07XG4gICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgc2NhbGVkIHBsYW5lIHZlY3RvclxuICAgICAgICB0aGlzLiNjbGlwUGxhbmUubXVsdGlwbHlTY2FsYXIoMi4wIC8gdGhpcy4jY2xpcFBsYW5lLmRvdCh0aGlzLiNxKSk7XG4gICAgICAgIC8vIFJlcGxhY2luZyB0aGUgdGhpcmQgcm93IG9mIHRoZSBwcm9qZWN0aW9uIG1hdHJpeFxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzJdID0gdGhpcy4jY2xpcFBsYW5lLng7XG4gICAgICAgIHByb2plY3Rpb25NYXRyaXguZWxlbWVudHNbNl0gPSB0aGlzLiNjbGlwUGxhbmUueTtcbiAgICAgICAgcHJvamVjdGlvbk1hdHJpeC5lbGVtZW50c1sxMF0gPSB0aGlzLiNjbGlwUGxhbmUueiArIDEuMDtcbiAgICAgICAgcHJvamVjdGlvbk1hdHJpeC5lbGVtZW50c1sxNF0gPSB0aGlzLiNjbGlwUGxhbmUudztcbiAgICB9XG59XG4iXX0=
367
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaC1yZWZsZWN0b3ItbWF0ZXJpYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvbWF0ZXJpYWxzL3NyYy9tZXNoLXJlZmxlY3Rvci1tYXRlcmlhbC9tZXNoLXJlZmxlY3Rvci1tYXRlcmlhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25GLE9BQU8sRUFDTixNQUFNLEVBQ04sYUFBYSxFQUNiLGtCQUFrQixFQUNsQixZQUFZLEVBQ1osY0FBYyxFQUNkLE1BQU0sRUFDTixXQUFXLEdBR1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdFLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDOztBQUUvQixNQUFNLENBQUMsRUFBRSxxQkFBcUIsRUFBRSxDQUFDLENBQUM7QUE0RGxDLE1BQU0sT0FBTyx5QkFBeUI7SUFrQnJDLElBQW9DLFdBQVcsQ0FBQyxVQUFrQjtRQUNqRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELElBQWlDLFFBQVEsQ0FBQyxPQUFlO1FBQ3hELElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBcUMsWUFBWSxDQUFDLFdBQW1CO1FBQ3BFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsSUFBOEIsS0FBSyxDQUFDLElBQStCO1FB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aUIsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG5cdGV4dGVuZCxcblx0Z2V0TG9jYWxTdGF0ZSxcblx0aW5qZWN0QmVmb3JlUmVuZGVyLFxuXHRpbmplY3ROZ3RSZWYsXG5cdGluamVjdE5ndFN0b3JlLFxuXHROZ3RLZXksXG5cdHNpZ25hbFN0b3JlLFxuXHR0eXBlIE5ndE1lc2hTdGFuZGFyZE1hdGVyaWFsLFxuXHR0eXBlIE5ndFJlbmRlclN0YXRlLFxufSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IEJsdXJQYXNzLCBNZXNoUmVmbGVjdG9yTWF0ZXJpYWwgfSBmcm9tICdhbmd1bGFyLXRocmVlLXNvYmEvc2hhZGVycyc7XG5pbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5cbmV4dGVuZCh7IE1lc2hSZWZsZWN0b3JNYXRlcmlhbCB9KTtcblxuZXhwb3J0IHR5cGUgTmd0c01lc2hSZWZsZWN0b3JNYXRlcmlhbFN0YXRlID0ge1xuXHRyZXNvbHV0aW9uOiBudW1iZXI7XG5cdG1peEJsdXI6IG51bWJlcjtcblx0bWl4U3RyZW5ndGg6IG51bWJlcjtcblx0Ymx1cjogW251bWJlciwgbnVtYmVyXSB8IG51bWJlcjtcblx0bWlycm9yOiBudW1iZXI7XG5cdG1pbkRlcHRoVGhyZXNob2xkOiBudW1iZXI7XG5cdG1heERlcHRoVGhyZXNob2xkOiBudW1iZXI7XG5cdGRlcHRoU2NhbGU6IG51bWJlcjtcblx0ZGVwdGhUb0JsdXJSYXRpb0JpYXM6IG51bWJlcjtcblx0ZGlzdG9ydGlvbk1hcD86IFRIUkVFLlRleHR1cmU7XG5cdGRpc3RvcnRpb246IG51bWJlcjtcblx0bWl4Q29udHJhc3Q6IG51bWJlcjtcblx0cmVmbGVjdG9yT2Zmc2V0OiBudW1iZXI7XG59O1xuXG5kZWNsYXJlIGdsb2JhbCB7XG5cdGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuXHRcdC8qKlxuXHRcdCAqIEBleHRlbmRzIG5ndC1tZXNoLXN0YW5kYXJkLW1hdGVyaWFsXG5cdFx0ICovXG5cdFx0J25ndHMtbWVzaC1yZWZsZWN0b3ItbWF0ZXJpYWwnOiBOZ3RzTWVzaFJlZmxlY3Rvck1hdGVyaWFsU3RhdGUgJiBOZ3RNZXNoU3RhbmRhcmRNYXRlcmlhbDtcblx0fVxufVxuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLW1lc2gtcmVmbGVjdG9yLW1hdGVyaWFsJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0LW1lc2gtcmVmbGVjdG9yLW1hdGVyaWFsXG5cdFx0XHQqbmdJZj1cImRlZmluZXMoKSBhcyBkZWZpbmVzXCJcblx0XHRcdFtrZXldPVwiZGVmaW5lc1wiXG5cdFx0XHRuZ3RDb21wb3VuZFxuXHRcdFx0YXR0YWNoPVwibWF0ZXJpYWxcIlxuXHRcdFx0W3JlZl09XCJtYXRlcmlhbFJlZlwiXG5cdFx0XHRbZGVmaW5lc109XCJkZWZpbmVzXCJcblx0XHRcdFttaXJyb3JdPVwibWlycm9yKClcIlxuXHRcdFx0W3RleHR1cmVNYXRyaXhdPVwidGV4dHVyZU1hdHJpeCgpXCJcblx0XHRcdFttaXhCbHVyXT1cIm1peEJsdXIoKVwiXG5cdFx0XHRbdERpZmZ1c2VdPVwidERpZmZ1c2UoKVwiXG5cdFx0XHRbdERlcHRoXT1cInREZXB0aCgpXCJcblx0XHRcdFt0RGlmZnVzZUJsdXJdPVwidERpZmZ1c2VCbHVyKClcIlxuXHRcdFx0W2hhc0JsdXJdPVwiaGFzQmx1cigpXCJcblx0XHRcdFttaXhTdHJlbmd0aF09XCJtaXhTdHJlbmd0aCgpXCJcblx0XHRcdFttaW5EZXB0aFRocmVzaG9sZF09XCJtaW5EZXB0aFRocmVzaG9sZCgpXCJcblx0XHRcdFttYXhEZXB0aFRocmVzaG9sZF09XCJtYXhEZXB0aFRocmVzaG9sZCgpXCJcblx0XHRcdFtkZXB0aFNjYWxlXT1cImRlcHRoU2NhbGUoKVwiXG5cdFx0XHRbZGVwdGhUb0JsdXJSYXRpb0JpYXNdPVwiZGVwdGhUb0JsdXJSYXRpb0JpYXMoKVwiXG5cdFx0XHRbZGlzdG9ydGlvbl09XCJkaXN0b3J0aW9uKClcIlxuXHRcdFx0W2Rpc3RvcnRpb25NYXBdPVwiZGlzdG9ydGlvbk1hcCgpXCJcblx0XHRcdFttaXhDb250cmFzdF09XCJtaXhDb250cmFzdCgpXCJcblx0XHQ+XG5cdFx0XHQ8bmctY29udGVudCAvPlxuXHRcdDwvbmd0LW1lc2gtcmVmbGVjdG9yLW1hdGVyaWFsPlxuXHRgLFxuXHRpbXBvcnRzOiBbTmdJZiwgTmd0S2V5XSxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzTWVzaFJlZmxlY3Rvck1hdGVyaWFsIHtcblx0cHJpdmF0ZSBpbnB1dHMgPSBzaWduYWxTdG9yZTxOZ3RzTWVzaFJlZmxlY3Rvck1hdGVyaWFsU3RhdGU+KHtcblx0XHRtaXhCbHVyOiAwLFxuXHRcdG1peFN0cmVuZ3RoOiAxLFxuXHRcdHJlc29sdXRpb246IDI1Nixcblx0XHRibHVyOiBbMCwgMF0sXG5cdFx0bWluRGVwdGhUaHJlc2hvbGQ6IDAuOSxcblx0XHRtYXhEZXB0aFRocmVzaG9sZDogMSxcblx0XHRkZXB0aFNjYWxlOiAwLFxuXHRcdGRlcHRoVG9CbHVyUmF0aW9CaWFzOiAwLjI1LFxuXHRcdG1pcnJvcjogMCxcblx0XHRkaXN0b3J0aW9uOiAxLFxuXHRcdG1peENvbnRyYXN0OiAxLFxuXHRcdHJlZmxlY3Rvck9mZnNldDogMCxcblx0fSk7XG5cblx0QElucHV0KCkgbWF0ZXJpYWxSZWYgPSBpbmplY3ROZ3RSZWY8TWVzaFJlZmxlY3Rvck1hdGVyaWFsPigpO1xuXG5cdEBJbnB1dCh7IGFsaWFzOiAncmVzb2x1dGlvbicgfSkgc2V0IF9yZXNvbHV0aW9uKHJlc29sdXRpb246IG51bWJlcikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IHJlc29sdXRpb24gfSk7XG5cdH1cblxuXHRASW5wdXQoeyBhbGlhczogJ21peEJsdXInIH0pIHNldCBfbWl4Qmx1cihtaXhCbHVyOiBudW1iZXIpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBtaXhCbHVyIH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICdtaXhTdHJlbmd0aCcgfSkgc2V0IF9taXhTdHJlbmd0aChtaXhTdHJlbmd0aDogbnVtYmVyKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgbWl4U3RyZW5ndGggfSk7XG5cdH1cblxuXHRASW5wdXQoeyBhbGlhczogJ2JsdXInIH0pIHNldCBfYmx1cihibHVyOiBbbnVtYmVyLCBudW1iZXJdIHwgbnVtYmVyKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgYmx1ciB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnbWlycm9yJyB9KSBzZXQgX21pcnJvcihtaXJyb3I6IG51bWJlcikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IG1pcnJvciB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnbWluRGVwdGhUaHJlc2hvbGQnIH0pIHNldCBfbWluRGVwdGhUaHJlc2hvbGQobWluRGVwdGhUaHJlc2hvbGQ6IG51bWJlcikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IG1pbkRlcHRoVGhyZXNob2xkIH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICdtYXhEZXB0aFRocmVzaG9sZCcgfSkgc2V0IF9tYXhEZXB0aFRocmVzaG9sZChtYXhEZXB0aFRocmVzaG9sZDogbnVtYmVyKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgbWF4RGVwdGhUaHJlc2hvbGQgfSk7XG5cdH1cblxuXHRASW5wdXQoeyBhbGlhczogJ2RlcHRoU2NhbGUnIH0pIHNldCBfZGVwdGhTY2FsZShkZXB0aFNjYWxlOiBudW1iZXIpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBkZXB0aFNjYWxlIH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICdkZXB0aFRvQmx1clJhdGlvQmlhcycgfSkgc2V0IF9kZXB0aFRvQmx1clJhdGlvQmlhcyhkZXB0aFRvQmx1clJhdGlvQmlhczogbnVtYmVyKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgZGVwdGhUb0JsdXJSYXRpb0JpYXMgfSk7XG5cdH1cblxuXHRASW5wdXQoeyBhbGlhczogJ2Rpc3RvcnRpb25NYXAnIH0pIHNldCBfZGlzdG9ydGlvbk1hcChkaXN0b3J0aW9uTWFwOiBUSFJFRS5UZXh0dXJlKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgZGlzdG9ydGlvbk1hcCB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnZGlzdG9ydGlvbicgfSkgc2V0IF9kaXN0b3J0aW9uKGRpc3RvcnRpb246IG51bWJlcikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IGRpc3RvcnRpb24gfSk7XG5cdH1cblxuXHRASW5wdXQoeyBhbGlhczogJ21peENvbnRyYXN0JyB9KSBzZXQgX21peENvbnRyYXN0KG1peENvbnRyYXN0OiBudW1iZXIpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBtaXhDb250cmFzdCB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAncmVmbGVjdG9yT2Zmc2V0JyB9KSBzZXQgX3JlZmxlY3Rvck9mZnNldChyZWZsZWN0b3JPZmZzZXQ6IG51bWJlcikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IHJlZmxlY3Rvck9mZnNldCB9KTtcblx0fVxuXG5cdHByaXZhdGUgcmVmbGVjdG9yUHJvcHMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnN0YXRlcygpLnJlZmxlY3RvclByb3BzKTtcblx0ZGVmaW5lcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMucmVmbGVjdG9yUHJvcHMoKS5kZWZpbmVzKTtcblx0bWlycm9yID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5yZWZsZWN0b3JQcm9wcygpLm1pcnJvcik7XG5cdHRleHR1cmVNYXRyaXggPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJlZmxlY3RvclByb3BzKCkudGV4dHVyZU1hdHJpeCk7XG5cdG1peEJsdXIgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJlZmxlY3RvclByb3BzKCkubWl4Qmx1cik7XG5cdHREaWZmdXNlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5yZWZsZWN0b3JQcm9wcygpLnREaWZmdXNlKTtcblx0dERlcHRoID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5yZWZsZWN0b3JQcm9wcygpLnREZXB0aCk7XG5cdHREaWZmdXNlQmx1ciA9IGNvbXB1dGVkKCgpID0+IHRoaXMucmVmbGVjdG9yUHJvcHMoKS50RGlmZnVzZUJsdXIpO1xuXHRoYXNCbHVyID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5yZWZsZWN0b3JQcm9wcygpLmhhc0JsdXIpO1xuXHRtaXhTdHJlbmd0aCA9IGNvbXB1dGVkKCgpID0+IHRoaXMucmVmbGVjdG9yUHJvcHMoKS5taXhTdHJlbmd0aCk7XG5cdG1pbkRlcHRoVGhyZXNob2xkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5yZWZsZWN0b3JQcm9wcygpLm1pbkRlcHRoVGhyZXNob2xkKTtcblx0bWF4RGVwdGhUaHJlc2hvbGQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJlZmxlY3RvclByb3BzKCkubWF4RGVwdGhUaHJlc2hvbGQpO1xuXHRkZXB0aFNjYWxlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5yZWZsZWN0b3JQcm9wcygpLmRlcHRoU2NhbGUpO1xuXHRkZXB0aFRvQmx1clJhdGlvQmlhcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMucmVmbGVjdG9yUHJvcHMoKS5kZXB0aFRvQmx1clJhdGlvQmlhcyk7XG5cdGRpc3RvcnRpb24gPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJlZmxlY3RvclByb3BzKCkuZGlzdG9ydGlvbik7XG5cdGRpc3RvcnRpb25NYXAgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJlZmxlY3RvclByb3BzKCkuZGlzdG9ydGlvbk1hcCk7XG5cdG1peENvbnRyYXN0ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5yZWZsZWN0b3JQcm9wcygpLm1peENvbnRyYXN0KTtcblxuXHRwcml2YXRlIHN0b3JlID0gaW5qZWN0Tmd0U3RvcmUoKTtcblx0cHJpdmF0ZSBnbCA9IHRoaXMuc3RvcmUuc2VsZWN0KCdnbCcpO1xuXG5cdHByaXZhdGUgcmVmbGVjdG9yUGxhbmUgPSBuZXcgVEhSRUUuUGxhbmUoKTtcblx0cHJpdmF0ZSBub3JtYWwgPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xuXHRwcml2YXRlIHJlZmxlY3RvcldvcmxkUG9zaXRpb24gPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xuXHRwcml2YXRlIGNhbWVyYVdvcmxkUG9zaXRpb24gPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xuXHRwcml2YXRlIHJvdGF0aW9uTWF0cml4ID0gbmV3IFRIUkVFLk1hdHJpeDQoKTtcblx0cHJpdmF0ZSBsb29rQXRQb3NpdGlvbiA9IG5ldyBUSFJFRS5WZWN0b3IzKDAsIDAsIC0xKTtcblx0cHJpdmF0ZSBjbGlwUGxhbmUgPSBuZXcgVEhSRUUuVmVjdG9yNCgpO1xuXHRwcml2YXRlIHZpZXcgPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xuXHRwcml2YXRlIHRhcmdldCA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XG5cdHByaXZhdGUgcSA9IG5ldyBUSFJFRS5WZWN0b3I0KCk7XG5cdHByaXZhdGUgdmlydHVhbENhbWVyYSA9IG5ldyBUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYSgpO1xuXHRwcml2YXRlIF90ZXh0dXJlTWF0cml4ID0gbmV3IFRIUkVFLk1hdHJpeDQoKTtcblxuXHRwcml2YXRlIF9fYmx1ciA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnYmx1cicpO1xuXHRwcml2YXRlIF9fcmVzb2x1dGlvbiA9IHRoaXMuaW5wdXRzLnNlbGVjdCgncmVzb2x1dGlvbicpO1xuXHRwcml2YXRlIF9fbWlycm9yID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdtaXJyb3InKTtcblx0cHJpdmF0ZSBfX21peEJsdXIgPSB0aGlzLmlucHV0cy5zZWxlY3QoJ21peEJsdXInKTtcblx0cHJpdmF0ZSBfX21peFN0cmVuZ3RoID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdtaXhTdHJlbmd0aCcpO1xuXHRwcml2YXRlIF9fbWluRGVwdGhUaHJlc2hvbGQgPSB0aGlzLmlucHV0cy5zZWxlY3QoJ21pbkRlcHRoVGhyZXNob2xkJyk7XG5cdHByaXZhdGUgX19tYXhEZXB0aFRocmVzaG9sZCA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnbWF4RGVwdGhUaHJlc2hvbGQnKTtcblx0cHJpdmF0ZSBfX2RlcHRoU2NhbGUgPSB0aGlzLmlucHV0cy5zZWxlY3QoJ2RlcHRoU2NhbGUnKTtcblx0cHJpdmF0ZSBfX2RlcHRoVG9CbHVyUmF0aW9CaWFzID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdkZXB0aFRvQmx1clJhdGlvQmlhcycpO1xuXHRwcml2YXRlIF9fZGlzdG9ydGlvbiA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnZGlzdG9ydGlvbicpO1xuXHRwcml2YXRlIF9fZGlzdG9ydGlvbk1hcCA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnZGlzdG9ydGlvbk1hcCcpO1xuXHRwcml2YXRlIF9fbWl4Q29udHJhc3QgPSB0aGlzLmlucHV0cy5zZWxlY3QoJ21peENvbnRyYXN0Jyk7XG5cblx0cHJpdmF0ZSBub3JtYWxpemVkQmx1ciA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCBibHVyID0gdGhpcy5fX2JsdXIoKTtcblx0XHRyZXR1cm4gQXJyYXkuaXNBcnJheShibHVyKSA/IGJsdXIgOiBbYmx1ciwgYmx1cl07XG5cdH0pO1xuXG5cdHByaXZhdGUgX19oYXNCbHVyID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IFt4LCB5XSA9IHRoaXMubm9ybWFsaXplZEJsdXIoKTtcblx0XHRyZXR1cm4geCArIHkgPiAwO1xuXHR9KTtcblxuXHRwcml2YXRlIHN0YXRlcyA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCBnbCA9IHRoaXMuZ2woKTtcblx0XHRjb25zdCByZXNvbHV0aW9uID0gdGhpcy5fX3Jlc29sdXRpb24oKTtcblx0XHRjb25zdCBibHVyID0gdGhpcy5ub3JtYWxpemVkQmx1cigpO1xuXHRcdGNvbnN0IG1pbkRlcHRoVGhyZXNob2xkID0gdGhpcy5fX21pbkRlcHRoVGhyZXNob2xkKCk7XG5cdFx0Y29uc3QgbWF4RGVwdGhUaHJlc2hvbGQgPSB0aGlzLl9fbWF4RGVwdGhUaHJlc2hvbGQoKTtcblx0XHRjb25zdCBkZXB0aFNjYWxlID0gdGhpcy5fX2RlcHRoU2NhbGUoKTtcblx0XHRjb25zdCBkZXB0aFRvQmx1clJhdGlvQmlhcyA9IHRoaXMuX19kZXB0aFRvQmx1clJhdGlvQmlhcygpO1xuXHRcdGNvbnN0IG1pcnJvciA9IHRoaXMuX19taXJyb3IoKTtcblx0XHRjb25zdCBtaXhCbHVyID0gdGhpcy5fX21peEJsdXIoKTtcblx0XHRjb25zdCBtaXhTdHJlbmd0aCA9IHRoaXMuX19taXhTdHJlbmd0aCgpO1xuXHRcdGNvbnN0IG1peENvbnRyYXN0ID0gdGhpcy5fX21peENvbnRyYXN0KCk7XG5cdFx0Y29uc3QgZGlzdG9ydGlvbiA9IHRoaXMuX19kaXN0b3J0aW9uKCk7XG5cdFx0Y29uc3QgZGlzdG9ydGlvbk1hcCA9IHRoaXMuX19kaXN0b3J0aW9uTWFwKCk7XG5cdFx0Y29uc3QgaGFzQmx1ciA9IHRoaXMuX19oYXNCbHVyKCk7XG5cblx0XHRjb25zdCBwYXJhbWV0ZXJzID0ge1xuXHRcdFx0bWluRmlsdGVyOiBUSFJFRS5MaW5lYXJGaWx0ZXIsXG5cdFx0XHRtYWdGaWx0ZXI6IFRIUkVFLkxpbmVhckZpbHRlcixcblx0XHRcdHR5cGU6IFRIUkVFLkhhbGZGbG9hdFR5cGUsXG5cdFx0fTtcblx0XHRjb25zdCBmYm8xID0gbmV3IFRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0KHJlc29sdXRpb24sIHJlc29sdXRpb24sIHBhcmFtZXRlcnMpO1xuXHRcdGZibzEuZGVwdGhCdWZmZXIgPSB0cnVlO1xuXHRcdGZibzEuZGVwdGhUZXh0dXJlID0gbmV3IFRIUkVFLkRlcHRoVGV4dHVyZShyZXNvbHV0aW9uLCByZXNvbHV0aW9uKTtcblx0XHRmYm8xLmRlcHRoVGV4dHVyZS5mb3JtYXQgPSBUSFJFRS5EZXB0aEZvcm1hdDtcblx0XHRmYm8xLmRlcHRoVGV4dHVyZS50eXBlID0gVEhSRUUuVW5zaWduZWRTaG9ydFR5cGU7XG5cblx0XHRjb25zdCBmYm8yID0gbmV3IFRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0KHJlc29sdXRpb24sIHJlc29sdXRpb24sIHBhcmFtZXRlcnMpO1xuXHRcdGNvbnN0IGJsdXJQYXNzID0gbmV3IEJsdXJQYXNzKHtcblx0XHRcdGdsLFxuXHRcdFx0cmVzb2x1dGlvbixcblx0XHRcdHdpZHRoOiBibHVyWzBdLFxuXHRcdFx0aGVpZ2h0OiBibHVyWzFdLFxuXHRcdFx0bWluRGVwdGhUaHJlc2hvbGQsXG5cdFx0XHRtYXhEZXB0aFRocmVzaG9sZCxcblx0XHRcdGRlcHRoU2NhbGUsXG5cdFx0XHRkZXB0aFRvQmx1clJhdGlvQmlhcyxcblx0XHR9KTtcblx0XHRjb25zdCByZWZsZWN0b3JQcm9wcyA9IHtcblx0XHRcdG1pcnJvcixcblx0XHRcdHRleHR1cmVNYXRyaXg6IHRoaXMuX3RleHR1cmVNYXRyaXgsXG5cdFx0XHRtaXhCbHVyLFxuXHRcdFx0dERpZmZ1c2U6IGZibzEudGV4dHVyZSxcblx0XHRcdHREZXB0aDogZmJvMS5kZXB0aFRleHR1cmUsXG5cdFx0XHR0RGlmZnVzZUJsdXI6IGZibzIudGV4dHVyZSxcblx0XHRcdGhhc0JsdXIsXG5cdFx0XHRtaXhTdHJlbmd0aCxcblx0XHRcdG1pbkRlcHRoVGhyZXNob2xkLFxuXHRcdFx0bWF4RGVwdGhUaHJlc2hvbGQsXG5cdFx0XHRkZXB0aFNjYWxlLFxuXHRcdFx0ZGVwdGhUb0JsdXJSYXRpb0JpYXMsXG5cdFx0XHRkaXN0b3J0aW9uLFxuXHRcdFx0ZGlzdG9ydGlvbk1hcCxcblx0XHRcdG1peENvbnRyYXN0LFxuXHRcdFx0ZGVmaW5lczoge1xuXHRcdFx0XHRVU0VfQkxVUjogaGFzQmx1ciA/ICcnIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRVU0VfREVQVEg6IGRlcHRoU2NhbGUgPiAwID8gJycgOiB1bmRlZmluZWQsXG5cdFx0XHRcdFVTRV9ESVNUT1JUSU9OOiBkaXN0b3J0aW9uTWFwID8gJycgOiB1bmRlZmluZWQsXG5cdFx0XHR9LFxuXHRcdH07XG5cblx0XHRyZXR1cm4geyBmYm8xLCBmYm8yLCBibHVyUGFzcywgcmVmbGVjdG9yUHJvcHMgfTtcblx0fSk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0aW5qZWN0QmVmb3JlUmVuZGVyKHRoaXMub25CZWZvcmVSZW5kZXIuYmluZCh0aGlzKSk7XG5cdH1cblxuXHRwcml2YXRlIG9uQmVmb3JlUmVuZGVyKHN0YXRlOiBOZ3RSZW5kZXJTdGF0ZSkge1xuXHRcdGlmICghdGhpcy5tYXRlcmlhbFJlZi5uYXRpdmVFbGVtZW50KSByZXR1cm47XG5cdFx0Y29uc3QgcGFyZW50ID0gZ2V0TG9jYWxTdGF0ZSh0aGlzLm1hdGVyaWFsUmVmLm5hdGl2ZUVsZW1lbnQpLnBhcmVudD8uKCk7XG5cdFx0aWYgKCFwYXJlbnQpIHJldHVybjtcblxuXHRcdGNvbnN0IHsgZ2wsIHNjZW5lIH0gPSBzdGF0ZTtcblx0XHRjb25zdCBoYXNCbHVyID0gdGhpcy5fX2hhc0JsdXIoKTtcblx0XHRjb25zdCB7IGZibzEsIGZibzIsIGJsdXJQYXNzIH0gPSB0aGlzLnN0YXRlcygpO1xuXG5cdFx0aWYgKGZibzEgJiYgZmJvMiAmJiBibHVyUGFzcykge1xuXHRcdFx0cGFyZW50LnZpc2libGUgPSBmYWxzZTtcblx0XHRcdGNvbnN0IGN1cnJlbnRYckVuYWJsZWQgPSBnbC54ci5lbmFibGVkO1xuXHRcdFx0Y29uc3QgY3VycmVudFNoYWRvd0F1dG9VcGRhdGUgPSBnbC5zaGFkb3dNYXAuYXV0b1VwZGF0ZTtcblx0XHRcdHRoaXMuYmVmb3JlUmVuZGVyKHN0YXRlKTtcblx0XHRcdGdsLnhyLmVuYWJsZWQgPSBmYWxzZTtcblx0XHRcdGdsLnNoYWRvd01hcC5hdXRvVXBkYXRlID0gZmFsc2U7XG5cdFx0XHRnbC5zZXRSZW5kZXJUYXJnZXQoZmJvMSk7XG5cdFx0XHRnbC5zdGF0ZS5idWZmZXJzLmRlcHRoLnNldE1hc2sodHJ1ZSk7XG5cdFx0XHRpZiAoIWdsLmF1dG9DbGVhcikgZ2wuY2xlYXIoKTtcblx0XHRcdGdsLnJlbmRlcihzY2VuZSwgdGhpcy52aXJ0dWFsQ2FtZXJhKTtcblx0XHRcdGlmIChoYXNCbHVyKSBibHVyUGFzcy5yZW5kZXIoZ2wsIGZibzEsIGZibzIpO1xuXHRcdFx0Z2wueHIuZW5hYmxlZCA9IGN1cnJlbnRYckVuYWJsZWQ7XG5cdFx0XHRnbC5zaGFkb3dNYXAuYXV0b1VwZGF0ZSA9IGN1cnJlbnRTaGFkb3dBdXRvVXBkYXRlO1xuXHRcdFx0cGFyZW50LnZpc2libGUgPSB0cnVlO1xuXHRcdFx0Z2wuc2V0UmVuZGVyVGFyZ2V0KG51bGwpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgYmVmb3JlUmVuZGVyKHN0YXRlOiBOZ3RSZW5kZXJTdGF0ZSkge1xuXHRcdGNvbnN0IHBhcmVudCA9IGdldExvY2FsU3RhdGUodGhpcy5tYXRlcmlhbFJlZi5uYXRpdmVFbGVtZW50KS5wYXJlbnQ/LigpO1xuXHRcdGlmICghcGFyZW50KSByZXR1cm47XG5cblx0XHRjb25zdCB7IGNhbWVyYSB9ID0gc3RhdGU7XG5cblx0XHR0aGlzLnJlZmxlY3RvcldvcmxkUG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHBhcmVudC5tYXRyaXhXb3JsZCk7XG5cdFx0dGhpcy5jYW1lcmFXb3JsZFBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihjYW1lcmEubWF0cml4V29ybGQpO1xuXHRcdHRoaXMucm90YXRpb25NYXRyaXguZXh0cmFjdFJvdGF0aW9uKHBhcmVudC5tYXRyaXhXb3JsZCk7XG5cdFx0dGhpcy5ub3JtYWwuc2V0KDAsIDAsIDEpO1xuXHRcdHRoaXMubm9ybWFsLmFwcGx5TWF0cml4NCh0aGlzLnJvdGF0aW9uTWF0cml4KTtcblx0XHR0aGlzLnJlZmxlY3RvcldvcmxkUG9zaXRpb24uYWRkU2NhbGVkVmVjdG9yKHRoaXMubm9ybWFsLCB0aGlzLmlucHV0cy5nZXQoJ3JlZmxlY3Rvck9mZnNldCcpKTtcblx0XHR0aGlzLnZpZXcuc3ViVmVjdG9ycyh0aGlzLnJlZmxlY3RvcldvcmxkUG9zaXRpb24sIHRoaXMuY2FtZXJhV29ybGRQb3NpdGlvbik7XG5cdFx0Ly8gQXZvaWQgcmVuZGVyaW5nIHdoZW4gcmVmbGVjdG9yIGlzIGZhY2luZyBhd2F5XG5cdFx0aWYgKHRoaXMudmlldy5kb3QodGhpcy5ub3JtYWwpID4gMCkgcmV0dXJuO1xuXHRcdHRoaXMudmlldy5yZWZsZWN0KHRoaXMubm9ybWFsKS5uZWdhdGUoKTtcblx0XHR0aGlzLnZpZXcuYWRkKHRoaXMucmVmbGVjdG9yV29ybGRQb3NpdGlvbik7XG5cdFx0dGhpcy5yb3RhdGlvbk1hdHJpeC5leHRyYWN0Um90YXRpb24oY2FtZXJhLm1hdHJpeFdvcmxkKTtcblx0XHR0aGlzLmxvb2tBdFBvc2l0aW9uLnNldCgwLCAwLCAtMSk7XG5cdFx0dGhpcy5sb29rQXRQb3NpdGlvbi5hcHBseU1hdHJpeDQodGhpcy5yb3RhdGlvbk1hdHJpeCk7XG5cdFx0dGhpcy5sb29rQXRQb3NpdGlvbi5hZGQodGhpcy5jYW1lcmFXb3JsZFBvc2l0aW9uKTtcblx0XHR0aGlzLnRhcmdldC5zdWJWZWN0b3JzKHRoaXMucmVmbGVjdG9yV29ybGRQb3NpdGlvbiwgdGhpcy5sb29rQXRQb3NpdGlvbik7XG5cdFx0dGhpcy50YXJnZXQucmVmbGVjdCh0aGlzLm5vcm1hbCkubmVnYXRlKCk7XG5cdFx0dGhpcy50YXJnZXQuYWRkKHRoaXMucmVmbGVjdG9yV29ybGRQb3NpdGlvbik7XG5cdFx0dGhpcy52aXJ0dWFsQ2FtZXJhLnBvc2l0aW9uLmNvcHkodGhpcy52aWV3KTtcblx0XHR0aGlzLnZpcnR1YWxDYW1lcmEudXAuc2V0KDAsIDEsIDApO1xuXHRcdHRoaXMudmlydHVhbENhbWVyYS51cC5hcHBseU1hdHJpeDQodGhpcy5yb3RhdGlvbk1hdHJpeCk7XG5cdFx0dGhpcy52aXJ0dWFsQ2FtZXJhLnVwLnJlZmxlY3QodGhpcy5ub3JtYWwpO1xuXHRcdHRoaXMudmlydHVhbENhbWVyYS5sb29rQXQodGhpcy50YXJnZXQpO1xuXHRcdHRoaXMudmlydHVhbENhbWVyYS5mYXIgPSBjYW1lcmEuZmFyOyAvLyBVc2VkIGluIFdlYkdMQmFja2dyb3VuZFxuXHRcdHRoaXMudmlydHVhbENhbWVyYS51cGRhdGVNYXRyaXhXb3JsZCgpO1xuXHRcdHRoaXMudmlydHVhbENhbWVyYS5wcm9qZWN0aW9uTWF0cml4LmNvcHkoY2FtZXJhLnByb2plY3Rpb25NYXRyaXgpO1xuXHRcdC8vIFVwZGF0ZSB0aGUgdGV4dHVyZSBtYXRyaXhcblx0XHR0aGlzLl90ZXh0dXJlTWF0cml4LnNldCgwLjUsIDAuMCwgMC4wLCAwLjUsIDAuMCwgMC41LCAwLjAsIDAuNSwgMC4wLCAwLjAsIDAuNSwgMC41LCAwLjAsIDAuMCwgMC4wLCAxLjApO1xuXHRcdHRoaXMuX3RleHR1cmVNYXRyaXgubXVsdGlwbHkodGhpcy52aXJ0dWFsQ2FtZXJhLnByb2plY3Rpb25NYXRyaXgpO1xuXHRcdHRoaXMuX3RleHR1cmVNYXRyaXgubXVsdGlwbHkodGhpcy52aXJ0dWFsQ2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSk7XG5cdFx0dGhpcy5fdGV4dHVyZU1hdHJpeC5tdWx0aXBseShwYXJlbnQubWF0cml4V29ybGQpO1xuXHRcdC8vIE5vdyB1cGRhdGUgcHJvamVjdGlvbiBtYXRyaXggd2l0aCBuZXcgY2xpcCBwbGFuZSwgaW1wbGVtZW50aW5nIGNvZGUgZnJvbTogaHR0cDovL3d3dy50ZXJhdGhvbi5jb20vY29kZS9vYmxpcXVlLmh0bWxcblx0XHQvLyBQYXBlciBleHBsYWluaW5nIHRoaXMgdGVjaG5pcXVlOiBodHRwOi8vd3d3LnRlcmF0aG9uLmNvbS9sZW5neWVsL0xlbmd5ZWwtT2JsaXF1ZS5wZGZcblx0XHR0aGlzLnJlZmxlY3RvclBsYW5lLnNldEZyb21Ob3JtYWxBbmRDb3BsYW5hclBvaW50KHRoaXMubm9ybWFsLCB0aGlzLnJlZmxlY3RvcldvcmxkUG9zaXRpb24pO1xuXHRcdHRoaXMucmVmbGVjdG9yUGxhbmUuYXBwbHlNYXRyaXg0KHRoaXMudmlydHVhbENhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UpO1xuXHRcdHRoaXMuY2xpcFBsYW5lLnNldChcblx0XHRcdHRoaXMucmVmbGVjdG9yUGxhbmUubm9ybWFsLngsXG5cdFx0XHR0aGlzLnJlZmxlY3RvclBsYW5lLm5vcm1hbC55LFxuXHRcdFx0dGhpcy5yZWZsZWN0b3JQbGFuZS5ub3JtYWwueixcblx0XHRcdHRoaXMucmVmbGVjdG9yUGxhbmUuY29uc3RhbnQsXG5cdFx0KTtcblx0XHRjb25zdCBwcm9qZWN0aW9uTWF0cml4ID0gdGhpcy52aXJ0dWFsQ2FtZXJhLnByb2plY3Rpb25NYXRyaXg7XG5cdFx0dGhpcy5xLnggPSAoTWF0aC5zaWduKHRoaXMuY2xpcFBsYW5lLngpICsgcHJvamVjdGlvbk1hdHJpeC5lbGVtZW50c1s4XSkgLyBwcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzBdO1xuXHRcdHRoaXMucS55ID0gKE1hdGguc2lnbih0aGlzLmNsaXBQbGFuZS55KSArIHByb2plY3Rpb25NYXRyaXguZWxlbWVudHNbOV0pIC8gcHJvamVjdGlvbk1hdHJpeC5lbGVtZW50c1s1XTtcblx0XHR0aGlzLnEueiA9IC0xLjA7XG5cdFx0dGhpcy5xLncgPSAoMS4wICsgcHJvamVjdGlvbk1hdHJpeC5lbGVtZW50c1sxMF0pIC8gcHJvamVjdGlvbk1hdHJpeC5lbGVtZW50c1sxNF07XG5cdFx0Ly8gQ2FsY3VsYXRlIHRoZSBzY2FsZWQgcGxhbmUgdmVjdG9yXG5cdFx0dGhpcy5jbGlwUGxhbmUubXVsdGlwbHlTY2FsYXIoMi4wIC8gdGhpcy5jbGlwUGxhbmUuZG90KHRoaXMucSkpO1xuXHRcdC8vIFJlcGxhY2luZyB0aGUgdGhpcmQgcm93IG9mIHRoZSBwcm9qZWN0aW9uIG1hdHJpeFxuXHRcdHByb2plY3Rpb25NYXRyaXguZWxlbWVudHNbMl0gPSB0aGlzLmNsaXBQbGFuZS54O1xuXHRcdHByb2plY3Rpb25NYXRyaXguZWxlbWVudHNbNl0gPSB0aGlzLmNsaXBQbGFuZS55O1xuXHRcdHByb2plY3Rpb25NYXRyaXguZWxlbWVudHNbMTBdID0gdGhpcy5jbGlwUGxhbmUueiArIDEuMDtcblx0XHRwcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzE0XSA9IHRoaXMuY2xpcFBsYW5lLnc7XG5cdH1cbn1cbiJdfQ==