semantifold 0.1.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (399) hide show
  1. package/README.md +42 -10
  2. package/build/index.d.ts +32 -3
  3. package/build/index.d.ts.map +1 -1
  4. package/build/index.js +99 -4
  5. package/build/src/acceptance.d.ts +32 -0
  6. package/build/src/acceptance.d.ts.map +1 -0
  7. package/build/src/acceptance.js +358 -0
  8. package/build/src/array.d.ts +7 -0
  9. package/build/src/array.d.ts.map +1 -0
  10. package/build/src/array.js +18 -0
  11. package/build/src/artifact-path.d.ts +13 -0
  12. package/build/src/artifact-path.d.ts.map +1 -0
  13. package/build/src/artifact-path.js +30 -0
  14. package/build/src/artifacts.d.ts +7 -0
  15. package/build/src/artifacts.d.ts.map +1 -0
  16. package/build/src/artifacts.js +389 -0
  17. package/build/src/backends/c-runtime.d.ts +3 -0
  18. package/build/src/backends/c-runtime.d.ts.map +1 -0
  19. package/build/src/backends/c-runtime.js +151 -0
  20. package/build/src/backends/c-validation.d.ts +12 -0
  21. package/build/src/backends/c-validation.d.ts.map +1 -0
  22. package/build/src/backends/c-validation.js +85 -0
  23. package/build/src/backends/c.d.ts +31 -0
  24. package/build/src/backends/c.d.ts.map +1 -0
  25. package/build/src/backends/c.js +308 -0
  26. package/build/src/backends/cpp-runtime.d.ts +3 -0
  27. package/build/src/backends/cpp-runtime.d.ts.map +1 -0
  28. package/build/src/backends/cpp-runtime.js +99 -0
  29. package/build/src/backends/cpp-validation.d.ts +9 -0
  30. package/build/src/backends/cpp-validation.d.ts.map +1 -0
  31. package/build/src/backends/cpp-validation.js +74 -0
  32. package/build/src/backends/cpp.d.ts +16 -0
  33. package/build/src/backends/cpp.d.ts.map +1 -0
  34. package/build/src/backends/cpp.js +285 -0
  35. package/build/src/backends/csharp.d.ts +20 -0
  36. package/build/src/backends/csharp.d.ts.map +1 -0
  37. package/build/src/backends/csharp.js +259 -0
  38. package/build/src/backends/go.d.ts +20 -0
  39. package/build/src/backends/go.d.ts.map +1 -0
  40. package/build/src/backends/go.js +374 -0
  41. package/build/src/backends/identifiers.d.ts +12 -0
  42. package/build/src/backends/identifiers.d.ts.map +1 -1
  43. package/build/src/backends/identifiers.js +79 -2
  44. package/build/src/backends/index.d.ts.map +1 -1
  45. package/build/src/backends/index.js +27 -37
  46. package/build/src/backends/native-validation.d.ts +9 -0
  47. package/build/src/backends/native-validation.d.ts.map +1 -0
  48. package/build/src/backends/native-validation.js +59 -0
  49. package/build/src/backends/ordered-expressions.d.ts +74 -0
  50. package/build/src/backends/ordered-expressions.d.ts.map +1 -0
  51. package/build/src/backends/ordered-expressions.js +159 -0
  52. package/build/src/backends/python.d.ts +8 -0
  53. package/build/src/backends/python.d.ts.map +1 -0
  54. package/build/src/backends/python.js +162 -0
  55. package/build/src/backends/scalars.d.ts.map +1 -1
  56. package/build/src/backends/scalars.js +8 -2
  57. package/build/src/backends/shared.d.ts.map +1 -1
  58. package/build/src/backends/shared.js +67 -19
  59. package/build/src/binary-mapping.d.ts +32 -0
  60. package/build/src/binary-mapping.d.ts.map +1 -0
  61. package/build/src/binary-mapping.js +285 -0
  62. package/build/src/diagnostic.d.ts +36 -4
  63. package/build/src/diagnostic.d.ts.map +1 -1
  64. package/build/src/diagnostic.js +42 -3
  65. package/build/src/frontends/c-parser.d.ts +20 -0
  66. package/build/src/frontends/c-parser.d.ts.map +1 -0
  67. package/build/src/frontends/c-parser.js +14 -0
  68. package/build/src/frontends/c.d.ts +220 -0
  69. package/build/src/frontends/c.d.ts.map +1 -0
  70. package/build/src/frontends/c.js +750 -0
  71. package/build/src/frontends/cpp-parser.d.ts +11 -0
  72. package/build/src/frontends/cpp-parser.d.ts.map +1 -0
  73. package/build/src/frontends/cpp-parser.js +15 -0
  74. package/build/src/frontends/cpp.d.ts +227 -0
  75. package/build/src/frontends/cpp.d.ts.map +1 -0
  76. package/build/src/frontends/cpp.js +784 -0
  77. package/build/src/frontends/csharp.d.ts +14 -0
  78. package/build/src/frontends/csharp.d.ts.map +1 -0
  79. package/build/src/frontends/csharp.js +708 -0
  80. package/build/src/frontends/go.d.ts +15 -0
  81. package/build/src/frontends/go.d.ts.map +1 -0
  82. package/build/src/frontends/go.js +712 -0
  83. package/build/src/frontends/index.d.ts.map +1 -1
  84. package/build/src/frontends/index.js +5 -23
  85. package/build/src/frontends/python.d.ts +14 -0
  86. package/build/src/frontends/python.d.ts.map +1 -0
  87. package/build/src/frontends/python.js +615 -0
  88. package/build/src/frontends/scalars.d.ts.map +1 -1
  89. package/build/src/frontends/scalars.js +21 -1
  90. package/build/src/language-registry.d.ts +113 -0
  91. package/build/src/language-registry.d.ts.map +1 -0
  92. package/build/src/language-registry.js +421 -0
  93. package/build/src/mapping.js +3 -2
  94. package/build/src/semantic/location.d.ts +7 -0
  95. package/build/src/semantic/location.d.ts.map +1 -1
  96. package/build/src/semantic/location.js +10 -1
  97. package/build/src/semantic/provenance.js +3 -3
  98. package/build/src/semantic/types.d.ts +399 -2
  99. package/build/src/semantic/types.d.ts.map +1 -1
  100. package/build/src/semantic/types.js +110 -2
  101. package/build/src/subprocess.d.ts +38 -0
  102. package/build/src/subprocess.d.ts.map +1 -0
  103. package/build/src/subprocess.js +233 -0
  104. package/build/src/timeout.d.ts +8 -0
  105. package/build/src/timeout.d.ts.map +1 -0
  106. package/build/src/timeout.js +11 -0
  107. package/build/src/toolchains.d.ts +107 -0
  108. package/build/src/toolchains.d.ts.map +1 -0
  109. package/build/src/toolchains.js +417 -0
  110. package/docs/architecture.md +23 -5
  111. package/docs/c.md +60 -0
  112. package/docs/cpp.md +61 -0
  113. package/docs/goals.md +4 -2
  114. package/docs/language-support.md +46 -6
  115. package/docs/parser-qualification.md +219 -0
  116. package/docs/plans/2026-09-05-standard-library-portability.md +46 -0
  117. package/docs/source-maps.md +38 -5
  118. package/docs/standard-library-portability.md +190 -0
  119. package/docs/testing.md +131 -3
  120. package/index.js +109 -4
  121. package/node_modules/node-addon-api/LICENSE.md +9 -0
  122. package/node_modules/node-addon-api/README.md +95 -0
  123. package/node_modules/node-addon-api/common.gypi +21 -0
  124. package/node_modules/node-addon-api/except.gypi +25 -0
  125. package/node_modules/node-addon-api/index.js +14 -0
  126. package/node_modules/node-addon-api/napi-inl.deprecated.h +186 -0
  127. package/node_modules/node-addon-api/napi-inl.h +7250 -0
  128. package/node_modules/node-addon-api/napi.h +3463 -0
  129. package/node_modules/node-addon-api/node_addon_api.gyp +42 -0
  130. package/node_modules/node-addon-api/node_api.gyp +9 -0
  131. package/node_modules/node-addon-api/noexcept.gypi +26 -0
  132. package/node_modules/node-addon-api/nothing.c +0 -0
  133. package/node_modules/node-addon-api/package-support.json +21 -0
  134. package/node_modules/node-addon-api/package.json +481 -0
  135. package/node_modules/node-addon-api/tools/README.md +73 -0
  136. package/node_modules/node-addon-api/tools/check-napi.js +99 -0
  137. package/node_modules/node-addon-api/tools/clang-format.js +71 -0
  138. package/node_modules/node-addon-api/tools/conversion.js +301 -0
  139. package/node_modules/node-gyp-build/LICENSE +21 -0
  140. package/node_modules/node-gyp-build/README.md +58 -0
  141. package/node_modules/node-gyp-build/SECURITY.md +5 -0
  142. package/node_modules/node-gyp-build/bin.js +84 -0
  143. package/node_modules/node-gyp-build/build-test.js +19 -0
  144. package/node_modules/node-gyp-build/index.js +6 -0
  145. package/node_modules/node-gyp-build/node-gyp-build.js +207 -0
  146. package/node_modules/node-gyp-build/optional.js +7 -0
  147. package/node_modules/node-gyp-build/package.json +43 -0
  148. package/node_modules/semantifold-tree-sitter-legacy-internal/LICENSE +15 -0
  149. package/node_modules/semantifold-tree-sitter-legacy-internal/README.md +7 -0
  150. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/LICENSE +21 -0
  151. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/README.md +90 -0
  152. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/binding.gyp +79 -0
  153. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/index.js +895 -0
  154. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/package.json +62 -0
  155. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/prebuilds/darwin-arm64/tree-sitter.node +0 -0
  156. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/prebuilds/darwin-x64/tree-sitter.node +0 -0
  157. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/prebuilds/linux-x64/tree-sitter.node +0 -0
  158. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/prebuilds/win32-x64/tree-sitter.node +0 -0
  159. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/addon_data.h +47 -0
  160. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/binding.cc +35 -0
  161. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/conversions.cc +140 -0
  162. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/conversions.h +22 -0
  163. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/language.cc +106 -0
  164. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/language.h +17 -0
  165. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/logger.cc +70 -0
  166. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/logger.h +19 -0
  167. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/lookaheaditerator.cc +122 -0
  168. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/lookaheaditerator.h +33 -0
  169. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/node.cc +1056 -0
  170. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/node.h +30 -0
  171. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/parser.cc +298 -0
  172. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/parser.h +35 -0
  173. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/query.cc +383 -0
  174. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/query.h +39 -0
  175. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/tree.cc +307 -0
  176. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/tree.h +45 -0
  177. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/tree_cursor.cc +213 -0
  178. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/tree_cursor.h +52 -0
  179. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/tree-sitter.d.ts +211 -0
  180. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/include/tree_sitter/api.h +1266 -0
  181. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/alloc.c +48 -0
  182. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/alloc.h +41 -0
  183. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/array.h +290 -0
  184. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/atomic.h +68 -0
  185. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/clock.h +146 -0
  186. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/error_costs.h +11 -0
  187. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/get_changed_ranges.c +501 -0
  188. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/get_changed_ranges.h +36 -0
  189. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/host.h +21 -0
  190. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/language.c +221 -0
  191. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/language.h +299 -0
  192. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/length.h +52 -0
  193. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lexer.c +419 -0
  194. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lexer.h +49 -0
  195. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lib.c +14 -0
  196. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/node.c +774 -0
  197. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/parser.c +2151 -0
  198. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/parser.h +230 -0
  199. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/point.h +62 -0
  200. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/query.c +4134 -0
  201. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/reduce_action.h +34 -0
  202. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/reusable_node.h +95 -0
  203. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/stack.c +899 -0
  204. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/stack.h +133 -0
  205. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/subtree.c +1060 -0
  206. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/subtree.h +382 -0
  207. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree.c +165 -0
  208. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree.h +31 -0
  209. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree_cursor.c +714 -0
  210. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree_cursor.h +48 -0
  211. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/ICU_SHA +1 -0
  212. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/LICENSE +414 -0
  213. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/README.md +29 -0
  214. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/ptypes.h +1 -0
  215. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/umachine.h +448 -0
  216. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/urename.h +1 -0
  217. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf.h +1 -0
  218. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf16.h +733 -0
  219. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf8.h +881 -0
  220. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode.h +50 -0
  221. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/stdlib-symbols.txt +23 -0
  222. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/stdlib.c +109 -0
  223. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/wasm-stdlib.h +1294 -0
  224. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm_store.c +1823 -0
  225. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm_store.h +31 -0
  226. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/LICENSE +21 -0
  227. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/README.md +18 -0
  228. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/binding.gyp +29 -0
  229. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/bindings/node/binding.cc +20 -0
  230. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/bindings/node/binding_test.js +9 -0
  231. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/bindings/node/index.d.ts +28 -0
  232. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/bindings/node/index.js +11 -0
  233. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/grammar.js +1470 -0
  234. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/package.json +60 -0
  235. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/darwin-arm64/tree-sitter-c.node +0 -0
  236. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/darwin-x64/tree-sitter-c.node +0 -0
  237. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/linux-arm64/tree-sitter-c.node +0 -0
  238. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/linux-x64/tree-sitter-c.node +0 -0
  239. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/win32-arm64/tree-sitter-c.node +0 -0
  240. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/win32-x64/tree-sitter-c.node +0 -0
  241. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/queries/highlights.scm +81 -0
  242. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/queries/tags.scm +9 -0
  243. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/grammar.json +9735 -0
  244. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/node-types.json +4614 -0
  245. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/parser.c +119615 -0
  246. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/tree_sitter/alloc.h +54 -0
  247. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/tree_sitter/array.h +290 -0
  248. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/tree_sitter/parser.h +266 -0
  249. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/tree-sitter-c.wasm +0 -0
  250. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/tree-sitter.json +43 -0
  251. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/LICENSE +21 -0
  252. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/README.md +22 -0
  253. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/binding.gyp +30 -0
  254. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/bindings/node/binding.cc +20 -0
  255. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/bindings/node/binding_test.js +9 -0
  256. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/bindings/node/index.d.ts +28 -0
  257. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/bindings/node/index.js +11 -0
  258. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/grammar.js +1436 -0
  259. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/package.json +61 -0
  260. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/darwin-arm64/tree-sitter-cpp.node +0 -0
  261. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/darwin-x64/tree-sitter-cpp.node +0 -0
  262. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/linux-arm64/tree-sitter-cpp.node +0 -0
  263. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/linux-x64/tree-sitter-cpp.node +0 -0
  264. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/win32-arm64/tree-sitter-cpp.node +0 -0
  265. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/win32-x64/tree-sitter-cpp.node +0 -0
  266. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/queries/highlights.scm +70 -0
  267. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/queries/injections.scm +3 -0
  268. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/queries/tags.scm +15 -0
  269. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/grammar.json +17084 -0
  270. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/node-types.json +7997 -0
  271. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/parser.c +530368 -0
  272. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/scanner.c +148 -0
  273. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/tree_sitter/alloc.h +54 -0
  274. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/tree_sitter/array.h +290 -0
  275. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/tree_sitter/parser.h +266 -0
  276. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/tree-sitter-cpp.wasm +0 -0
  277. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/tree-sitter.json +55 -0
  278. package/node_modules/semantifold-tree-sitter-legacy-internal/package.json +22 -0
  279. package/node_modules/semantifold-tree-sitter-legacy-internal/src/c.js +152 -0
  280. package/node_modules/tree-sitter/LICENSE +21 -0
  281. package/node_modules/tree-sitter/README.md +128 -0
  282. package/node_modules/tree-sitter/binding.gyp +88 -0
  283. package/node_modules/tree-sitter/index.js +950 -0
  284. package/node_modules/tree-sitter/package.json +76 -0
  285. package/node_modules/tree-sitter/prebuilds/darwin-arm64/tree-sitter.node +0 -0
  286. package/node_modules/tree-sitter/prebuilds/darwin-x64/tree-sitter.node +0 -0
  287. package/node_modules/tree-sitter/prebuilds/linux-arm64/tree-sitter.node +0 -0
  288. package/node_modules/tree-sitter/prebuilds/linux-x64/tree-sitter.node +0 -0
  289. package/node_modules/tree-sitter/prebuilds/win32-arm64/tree-sitter.node +0 -0
  290. package/node_modules/tree-sitter/prebuilds/win32-x64/tree-sitter.node +0 -0
  291. package/node_modules/tree-sitter/src/addon_data.h +47 -0
  292. package/node_modules/tree-sitter/src/binding.cc +35 -0
  293. package/node_modules/tree-sitter/src/conversions.cc +140 -0
  294. package/node_modules/tree-sitter/src/conversions.h +22 -0
  295. package/node_modules/tree-sitter/src/language.cc +105 -0
  296. package/node_modules/tree-sitter/src/language.h +17 -0
  297. package/node_modules/tree-sitter/src/logger.cc +70 -0
  298. package/node_modules/tree-sitter/src/logger.h +19 -0
  299. package/node_modules/tree-sitter/src/lookaheaditerator.cc +122 -0
  300. package/node_modules/tree-sitter/src/lookaheaditerator.h +33 -0
  301. package/node_modules/tree-sitter/src/node.cc +1088 -0
  302. package/node_modules/tree-sitter/src/node.h +30 -0
  303. package/node_modules/tree-sitter/src/parser.cc +332 -0
  304. package/node_modules/tree-sitter/src/parser.h +35 -0
  305. package/node_modules/tree-sitter/src/query.cc +425 -0
  306. package/node_modules/tree-sitter/src/query.h +40 -0
  307. package/node_modules/tree-sitter/src/tree.cc +316 -0
  308. package/node_modules/tree-sitter/src/tree.h +45 -0
  309. package/node_modules/tree-sitter/src/tree_cursor.cc +213 -0
  310. package/node_modules/tree-sitter/src/tree_cursor.h +52 -0
  311. package/node_modules/tree-sitter/tree-sitter.d.ts +1083 -0
  312. package/node_modules/tree-sitter/vendor/tree-sitter/lib/include/tree_sitter/api.h +1478 -0
  313. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/alloc.c +48 -0
  314. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/alloc.h +41 -0
  315. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/array.h +291 -0
  316. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/atomic.h +68 -0
  317. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/clock.h +146 -0
  318. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/error_costs.h +11 -0
  319. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/get_changed_ranges.c +523 -0
  320. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/get_changed_ranges.h +36 -0
  321. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/host.h +21 -0
  322. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/language.c +293 -0
  323. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/language.h +293 -0
  324. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/length.h +52 -0
  325. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lexer.c +483 -0
  326. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lexer.h +54 -0
  327. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lib.c +12 -0
  328. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/node.c +875 -0
  329. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/parser.c +2297 -0
  330. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/parser.h +286 -0
  331. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/point.h +48 -0
  332. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/portable/endian.h +241 -0
  333. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/query.c +4347 -0
  334. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/reduce_action.h +34 -0
  335. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/reusable_node.h +95 -0
  336. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/stack.c +912 -0
  337. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/stack.h +133 -0
  338. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/subtree.c +1034 -0
  339. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/subtree.h +399 -0
  340. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree.c +170 -0
  341. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree.h +31 -0
  342. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree_cursor.c +716 -0
  343. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree_cursor.h +48 -0
  344. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/ts_assert.h +11 -0
  345. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/ICU_SHA +1 -0
  346. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/LICENSE +414 -0
  347. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/README.md +29 -0
  348. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/ptypes.h +1 -0
  349. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/umachine.h +448 -0
  350. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/urename.h +1 -0
  351. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf.h +1 -0
  352. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf16.h +733 -0
  353. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf8.h +881 -0
  354. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode.h +75 -0
  355. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/stdlib-symbols.txt +24 -0
  356. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/stdlib.c +137 -0
  357. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/wasm-stdlib.h +1314 -0
  358. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm_store.c +1937 -0
  359. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm_store.h +31 -0
  360. package/package.json +24 -6
  361. package/src/acceptance.js +380 -0
  362. package/src/array.js +19 -0
  363. package/src/artifact-path.js +34 -0
  364. package/src/artifacts.js +420 -0
  365. package/src/backends/c-runtime.js +151 -0
  366. package/src/backends/c-validation.js +83 -0
  367. package/src/backends/c.js +308 -0
  368. package/src/backends/cpp-runtime.js +99 -0
  369. package/src/backends/cpp-validation.js +70 -0
  370. package/src/backends/cpp.js +285 -0
  371. package/src/backends/csharp.js +270 -0
  372. package/src/backends/go.js +383 -0
  373. package/src/backends/identifiers.js +80 -1
  374. package/src/backends/index.js +23 -32
  375. package/src/backends/native-validation.js +64 -0
  376. package/src/backends/ordered-expressions.js +161 -0
  377. package/src/backends/python.js +175 -0
  378. package/src/backends/scalars.js +8 -1
  379. package/src/backends/shared.js +64 -17
  380. package/src/binary-mapping.js +305 -0
  381. package/src/diagnostic.js +34 -2
  382. package/src/frontends/c-parser.js +17 -0
  383. package/src/frontends/c.js +780 -0
  384. package/src/frontends/cpp-parser.js +18 -0
  385. package/src/frontends/cpp.js +816 -0
  386. package/src/frontends/csharp.js +759 -0
  387. package/src/frontends/go.js +770 -0
  388. package/src/frontends/index.js +5 -20
  389. package/src/frontends/python.js +689 -0
  390. package/src/frontends/scalars.js +20 -0
  391. package/src/language-registry.js +454 -0
  392. package/src/mapping.js +2 -1
  393. package/src/semantic/location.js +10 -0
  394. package/src/semantic/provenance.js +2 -2
  395. package/src/semantic/types.js +124 -1
  396. package/src/subprocess.js +232 -0
  397. package/src/timeout.js +12 -0
  398. package/src/toolchains.js +448 -0
  399. package/tsconfig.json +1 -0
@@ -1,10 +1,40 @@
1
1
  // @ts-check
2
- /** @typedef {"php" | "ruby" | "javascript" | "typescript" | "java"} SemanticLanguage */
2
+ /** @typedef {"php" | "ruby" | "javascript" | "typescript" | "java" | "python" | "csharp" | "go" | "c" | "cpp"} SemanticLanguage */
3
3
  /** @typedef {"integer" | "boolean" | "string"} SemanticTypeName */
4
4
  /** @typedef {"IntegerNegate" | "BooleanNot"} SemanticUnaryOperation */
5
5
  /** @typedef {"IntegerAdd" | "IntegerSubtract" | "IntegerMultiply" | "BooleanAnd" | "BooleanOr" | "IntegerEqual" | "IntegerNotEqual" | "BooleanEqual" | "BooleanNotEqual" | "StringEqual" | "StringNotEqual" | "IntegerLessThan" | "IntegerLessThanOrEqual" | "IntegerGreaterThan" | "IntegerGreaterThanOrEqual" | "StringConcat"} SemanticBinaryOperation */
6
6
  /** @typedef {"function" | "parameter" | "local"} SemanticSymbolKind */
7
7
  /** @typedef {"declaration" | "read" | "write" | "call"} SemanticSymbolRole */
8
+ /** @typedef {"parse" | "generate" | "restore" | "compile" | "link" | "validate" | "instantiate" | "execute"} AcceptanceStage */
9
+ /** @typedef {"entry" | "source" | "manifest" | "support" | "mapping" | "resource" | "loader"} GeneratedArtifactRole */
10
+ /**
11
+ * @typedef LanguageRoleCapabilities
12
+ * @property {boolean} frontend - Parser adapter availability.
13
+ * @property {boolean} textBackend - Single- or multi-file text backend availability.
14
+ * @property {boolean} binaryBackend - Binary backend availability.
15
+ * @property {boolean} applicationBackend - Application-artifact backend availability.
16
+ * @property {boolean} interoperability - Interoperability bridge availability.
17
+ */
18
+ /**
19
+ * @typedef LanguageMappingCapabilities
20
+ * @property {boolean} richText - Authoritative rich text mappings.
21
+ * @property {boolean} sourceMapV3 - Source Map v3 projection.
22
+ * @property {boolean} binaryRanges - Byte-coordinate binary/resource mappings.
23
+ */
24
+ /**
25
+ * @typedef LanguageAcceptanceCapabilities
26
+ * @property {readonly AcceptanceStage[]} stages - Applicable ordered acceptance stages.
27
+ * @property {readonly string[]} toolchains - Required canonical toolchain IDs.
28
+ */
29
+ /**
30
+ * @typedef LanguageCapabilities
31
+ * @property {string} id - Stable registry identity.
32
+ * @property {Readonly<LanguageRoleCapabilities>} roles - Independently registered roles.
33
+ * @property {"single" | "multiple"} artifactMultiplicity - Target artifact multiplicity.
34
+ * @property {boolean} roundTrip - Whether frontend/backend round-trip acceptance is declared.
35
+ * @property {Readonly<LanguageMappingCapabilities>} mapping - Mapping forms.
36
+ * @property {Readonly<LanguageAcceptanceCapabilities>} acceptance - Stages and toolchains.
37
+ */
8
38
  /**
9
39
  * @typedef SourcePoint
10
40
  * @property {number} line - One-based line.
@@ -50,6 +80,22 @@
50
80
  * @property {RelatedOrigin[]} relatedOrigins - Ordered related ranges, possibly empty.
51
81
  */
52
82
  /** @typedef {SourceOrigin | DerivedOrigin | SyntheticOrigin} SemanticOrigin */
83
+ /**
84
+ * @typedef GeneratedByteRange
85
+ * @property {{start: number, end: number}} generated - Half-open generated byte offsets.
86
+ * @property {SemanticOrigin} origin - Semantic or explicit synthetic provenance.
87
+ * @property {string} [nodeId] - Originating semantic node identity.
88
+ * @property {string} [symbolId] - Originating semantic symbol identity.
89
+ * @property {string} [role] - Semantic or binary-region role.
90
+ */
91
+ /**
92
+ * @typedef SemantifoldByteMapping
93
+ * @property {"SemantifoldByteMapping"} schema - Schema discriminator.
94
+ * @property {1} version - Schema version.
95
+ * @property {"bytes"} coordinateSystem - Generated offsets are bytes, never text columns.
96
+ * @property {{path: string, byteLength: number}} generated - Generated artifact identity.
97
+ * @property {readonly GeneratedByteRange[]} ranges - Ordered non-overlapping ranges.
98
+ */
53
99
  /**
54
100
  * @typedef SemanticNodeSourceProvenance
55
101
  * @property {"SemantifoldNodeProvenance"} schema - Association discriminator.
@@ -127,6 +173,68 @@
127
173
  * @property {import("@jridgewell/gen-mapping").EncodedSourceMap} sourceMap - Source Map v3 projection.
128
174
  * @property {string} sourceMapFilename - Default external Source Map filename.
129
175
  */
176
+ /**
177
+ * @typedef TextArtifactProvenance
178
+ * @property {"text"} kind - Rich text provenance discriminator.
179
+ * @property {SemantifoldMapping} mapping - Authoritative range mapping.
180
+ * @property {import("@jridgewell/gen-mapping").EncodedSourceMap} sourceMap - Interoperable projection.
181
+ * @property {string} [sourceMapFilename] - Logical Source Map sidecar path.
182
+ */
183
+ /**
184
+ * @typedef ByteArtifactProvenance
185
+ * @property {"bytes"} kind - Byte provenance discriminator.
186
+ * @property {SemantifoldByteMapping} mapping - Authoritative byte ranges.
187
+ */
188
+ /**
189
+ * @typedef ArtifactSyntheticProvenance
190
+ * @property {"synthetic"} kind - Synthetic artifact discriminator.
191
+ * @property {string} reason - Explicit target-scaffolding reason.
192
+ * @property {readonly RelatedOrigin[]} relatedOrigins - Related semantic source ranges.
193
+ */
194
+ /** @typedef {TextArtifactProvenance | ByteArtifactProvenance | ArtifactSyntheticProvenance} ArtifactProvenance */
195
+ /**
196
+ * @typedef GeneratedSetArtifact
197
+ * @property {string} path - Unique safe relative POSIX path.
198
+ * @property {"text" | "binary"} contentKind - Content representation.
199
+ * @property {string | Uint8Array} content - Text or a detached copy of the exact generated bytes on every binary read.
200
+ * @property {string} mediaType - Artifact media type.
201
+ * @property {GeneratedArtifactRole} role - Artifact role; exactly one set artifact is entry.
202
+ * @property {"generated"} ownership - Task-015 ownership contract.
203
+ * @property {ArtifactProvenance} provenance - Text, byte-range, or synthetic provenance.
204
+ */
205
+ /**
206
+ * @typedef GeneratedArtifactSet
207
+ * @property {"GeneratedArtifactSet"} schema - Schema discriminator.
208
+ * @property {1} version - Schema version.
209
+ * @property {string} target - Stable language or target ID.
210
+ * @property {string} entry - Path of the sole declared entry artifact.
211
+ * @property {readonly GeneratedSetArtifact[]} artifacts - Deterministic artifact order.
212
+ */
213
+ /**
214
+ * @typedef DiscoveredToolchain
215
+ * @property {string} id - Toolchain ID.
216
+ * @property {string} command - Documented canonical command.
217
+ * @property {string} executable - Exact absolute executable path.
218
+ * @property {"override" | "canonical"} source - Resolution route.
219
+ * @property {string} version - First captured version line.
220
+ * @property {string} versionOutput - Complete captured version output.
221
+ * @property {readonly string[]} versionArguments - Exact version argument array.
222
+ */
223
+ /**
224
+ * @typedef AcceptanceStageResult
225
+ * @property {AcceptanceStage} stage - Completed stage.
226
+ * @property {string} executable - Exact executable used.
227
+ * @property {readonly string[]} arguments - Exact argument array used.
228
+ * @property {string} version - Discovered tool version.
229
+ * @property {string} stdout - Captured standard output.
230
+ * @property {string} stderr - Captured standard error.
231
+ */
232
+ /**
233
+ * @typedef AcceptanceResult
234
+ * @property {string} target - Target identity.
235
+ * @property {string} directory - Removed isolated project directory identity.
236
+ * @property {readonly AcceptanceStageResult[]} stages - Ordered completed stages.
237
+ */
130
238
  /**
131
239
  * @typedef TypeReference
132
240
  * @property {"TypeReference"} kind - Node discriminator.
@@ -276,4 +384,4 @@
276
384
  /** @typedef {SemanticModule | FunctionDeclaration | Parameter | Block | Statement | EntryPoint | Expression | TypeReference} SemanticNode */
277
385
  /** @typedef {SemanticNode} SemanticNodeWithoutLocations */
278
386
  export {};
279
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VtYW50aWMvdHlwZXMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLHdGQUF3RjtBQUN4RixtRUFBbUU7QUFDbkUsdUVBQXVFO0FBQ3ZFLDZWQUE2VjtBQUM3Vix1RUFBdUU7QUFDdkUsOEVBQThFO0FBRTlFOzs7OztHQUtHO0FBRUg7Ozs7O0dBS0c7QUFFSDs7Ozs7O0dBTUc7QUFFSDs7Ozs7R0FLRztBQUVIOzs7Ozs7O0dBT0c7QUFFSDs7OztHQUlHO0FBRUg7Ozs7O0dBS0c7QUFFSCwrRUFBK0U7QUFFL0U7Ozs7OztHQU1HO0FBRUg7Ozs7Ozs7O0dBUUc7QUFFSDs7Ozs7R0FLRztBQUVIOzs7Ozs7OztHQVFHO0FBRUg7Ozs7Ozs7O0dBUUc7QUFFSCw4REFBOEQ7QUFFOUQ7Ozs7Ozs7OztHQVNHO0FBRUg7Ozs7O0dBS0c7QUFFSDs7Ozs7Ozs7OztHQVVHO0FBRUg7Ozs7Ozs7O0dBUUc7QUFFSDs7Ozs7R0FLRztBQUVIOzs7Ozs7O0dBT0c7QUFFSDs7Ozs7O0dBTUc7QUFFSDs7Ozs7O0dBTUc7QUFFSDs7Ozs7O0dBTUc7QUFFSDs7Ozs7O0dBTUc7QUFFSDs7Ozs7Ozs7R0FRRztBQUVIOzs7Ozs7Ozs7R0FTRztBQUVIOzs7Ozs7O0dBT0c7QUFFSCx5SkFBeUo7QUFFeko7Ozs7Ozs7OztHQVNHO0FBRUg7Ozs7Ozs7R0FPRztBQUVIOzs7Ozs7R0FNRztBQUVIOzs7Ozs7OztHQVFHO0FBRUgsdUVBQXVFO0FBQ3ZFLDJGQUEyRjtBQUUzRjs7Ozs7O0dBTUc7QUFFSDs7Ozs7Ozs7O0dBU0c7QUFFSDs7Ozs7O0dBTUc7QUFFSDs7Ozs7O0dBTUc7QUFFSDs7Ozs7Ozs7R0FRRztBQUVILDZJQUE2STtBQUM3SSwyREFBMkQ7QUFFM0QsT0FBTyxFQUFFLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuLyoqIEB0eXBlZGVmIHtcInBocFwiIHwgXCJydWJ5XCIgfCBcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwiIHwgXCJqYXZhXCJ9IFNlbWFudGljTGFuZ3VhZ2UgKi9cbi8qKiBAdHlwZWRlZiB7XCJpbnRlZ2VyXCIgfCBcImJvb2xlYW5cIiB8IFwic3RyaW5nXCJ9IFNlbWFudGljVHlwZU5hbWUgKi9cbi8qKiBAdHlwZWRlZiB7XCJJbnRlZ2VyTmVnYXRlXCIgfCBcIkJvb2xlYW5Ob3RcIn0gU2VtYW50aWNVbmFyeU9wZXJhdGlvbiAqL1xuLyoqIEB0eXBlZGVmIHtcIkludGVnZXJBZGRcIiB8IFwiSW50ZWdlclN1YnRyYWN0XCIgfCBcIkludGVnZXJNdWx0aXBseVwiIHwgXCJCb29sZWFuQW5kXCIgfCBcIkJvb2xlYW5PclwiIHwgXCJJbnRlZ2VyRXF1YWxcIiB8IFwiSW50ZWdlck5vdEVxdWFsXCIgfCBcIkJvb2xlYW5FcXVhbFwiIHwgXCJCb29sZWFuTm90RXF1YWxcIiB8IFwiU3RyaW5nRXF1YWxcIiB8IFwiU3RyaW5nTm90RXF1YWxcIiB8IFwiSW50ZWdlckxlc3NUaGFuXCIgfCBcIkludGVnZXJMZXNzVGhhbk9yRXF1YWxcIiB8IFwiSW50ZWdlckdyZWF0ZXJUaGFuXCIgfCBcIkludGVnZXJHcmVhdGVyVGhhbk9yRXF1YWxcIiB8IFwiU3RyaW5nQ29uY2F0XCJ9IFNlbWFudGljQmluYXJ5T3BlcmF0aW9uICovXG4vKiogQHR5cGVkZWYge1wiZnVuY3Rpb25cIiB8IFwicGFyYW1ldGVyXCIgfCBcImxvY2FsXCJ9IFNlbWFudGljU3ltYm9sS2luZCAqL1xuLyoqIEB0eXBlZGVmIHtcImRlY2xhcmF0aW9uXCIgfCBcInJlYWRcIiB8IFwid3JpdGVcIiB8IFwiY2FsbFwifSBTZW1hbnRpY1N5bWJvbFJvbGUgKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBTb3VyY2VQb2ludFxuICogQHByb3BlcnR5IHtudW1iZXJ9IGxpbmUgLSBPbmUtYmFzZWQgbGluZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjb2x1bW4gLSBPbmUtYmFzZWQgVVRGLTE2IGNvZGUtdW5pdCBjb2x1bW4uXG4gKiBAcHJvcGVydHkge251bWJlcn0gb2Zmc2V0IC0gWmVyby1iYXNlZCBVVEYtMTYgc291cmNlIG9mZnNldC5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFNvdXJjZUxvY2F0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZmlsZW5hbWUgLSBPcmlnaW5hdGluZyBmaWxlbmFtZS5cbiAqIEBwcm9wZXJ0eSB7U291cmNlUG9pbnR9IHN0YXJ0IC0gSW5jbHVzaXZlIHN0YXJ0LlxuICogQHByb3BlcnR5IHtTb3VyY2VQb2ludH0gZW5kIC0gRXhjbHVzaXZlIGVuZC5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFJlZ2lzdGVyZWRTb3VyY2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpZCAtIFJlZ2lzdHJ5LWxvY2FsIGRldGVybWluaXN0aWMgc291cmNlIGlkZW50aXR5LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGZpbGVuYW1lIC0gT3JpZ2luYWwgZmlsZW5hbWUsIHByZXNlcnZlZCB2ZXJiYXRpbS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgbnVsbH0gY29udGVudCAtIE9yaWdpbmFsIHNvdXJjZSBjb250ZW50LCBwcmVzZXJ2ZWQgdmVyYmF0aW0gd2hlbiBhdmFpbGFibGUuXG4gKiBAcHJvcGVydHkge1NlbWFudGljTGFuZ3VhZ2UgfCBudWxsfSBsYW5ndWFnZSAtIFBhcnNlciBsYW5ndWFnZSB3aGVuIGtub3duLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgU291cmNlT3JpZ2luXG4gKiBAcHJvcGVydHkge1wic291cmNlXCJ9IGtpbmQgLSBEaXJlY3Qgc291cmNlIHByb3ZlbmFuY2UuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc291cmNlSWQgLSBSZWdpc3RlcmVkIHNvdXJjZSBpZGVudGl0eS5cbiAqIEBwcm9wZXJ0eSB7U291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gRXhhY3Qgb3JpZ2luYWwgcmFuZ2UuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBSZWxhdGVkT3JpZ2luXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc291cmNlSWQgLSBSZWdpc3RlcmVkIHNvdXJjZSBpZGVudGl0eS5cbiAqIEBwcm9wZXJ0eSB7U291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gUmVsYXRlZCBvcmlnaW5hbCByYW5nZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbm9kZUlkXSAtIFJlbGF0ZWQgc2VtYW50aWMgbm9kZSBpZGVudGl0eS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbc3ltYm9sSWRdIC0gUmVsYXRlZCBzZW1hbnRpYyBzeW1ib2wgaWRlbnRpdHkuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3JvbGVdIC0gUmVsYXRpb25zaGlwIHJvbGUuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBEZXJpdmVkT3JpZ2luXG4gKiBAcHJvcGVydHkge1wiZGVyaXZlZFwifSBraW5kIC0gUHJvdmVuYW5jZSBkZXJpdmVkIGZyb20gb25lIG9yIG1vcmUgb3JpZ2lucy5cbiAqIEBwcm9wZXJ0eSB7UmVsYXRlZE9yaWdpbltdfSBvcmlnaW5zIC0gT3JkZXJlZCwgbm9uLWVtcHR5IG9yaWdpbmFsIHJhbmdlcy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFN5bnRoZXRpY09yaWdpblxuICogQHByb3BlcnR5IHtcInN5bnRoZXRpY1wifSBraW5kIC0gU291cmNlLWZyZWUgZ2VuZXJhdGVkIG9yIHNlbWFudGljIHNjYWZmb2xkaW5nLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHJlYXNvbiAtIFN0YWJsZSBodW1hbi1yZWFkYWJsZSByZWFzb24uXG4gKiBAcHJvcGVydHkge1JlbGF0ZWRPcmlnaW5bXX0gcmVsYXRlZE9yaWdpbnMgLSBPcmRlcmVkIHJlbGF0ZWQgcmFuZ2VzLCBwb3NzaWJseSBlbXB0eS5cbiAqL1xuXG4vKiogQHR5cGVkZWYge1NvdXJjZU9yaWdpbiB8IERlcml2ZWRPcmlnaW4gfCBTeW50aGV0aWNPcmlnaW59IFNlbWFudGljT3JpZ2luICovXG5cbi8qKlxuICogQHR5cGVkZWYgU2VtYW50aWNOb2RlU291cmNlUHJvdmVuYW5jZVxuICogQHByb3BlcnR5IHtcIlNlbWFudGlmb2xkTm9kZVByb3ZlbmFuY2VcIn0gc2NoZW1hIC0gQXNzb2NpYXRpb24gZGlzY3JpbWluYXRvci5cbiAqIEBwcm9wZXJ0eSB7MX0gdmVyc2lvbiAtIEFzc29jaWF0aW9uIHZlcnNpb24uXG4gKiBAcHJvcGVydHkge1NlbWFudGljT3JpZ2lufSBvcmlnaW4gLSBTb3VyY2UgYXNzb2NpYXRpb24gaW5kZXBlbmRlbnQgb2YgdHJhdmVyc2FsIHBvc2l0aW9uLlxuICogQHByb3BlcnR5IHtSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBTb3VyY2VMb2NhdGlvbj4+fSByYW5nZXMgLSBFeGFjdCBzZW1hbnRpYy10b2tlbiBzdWJyYW5nZXMgYnkgcm9sZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFNlbWFudGljTm9kZVByb3ZlbmFuY2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpZCAtIERldGVybWluaXN0aWMgbW9kdWxlLWxvY2FsIG5vZGUgaWRlbnRpdHkuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcGF0aCAtIEpTT04gUG9pbnRlciBmcm9tIHRoZSBzZW1hbnRpYyBtb2R1bGUgcm9vdC5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNOb2RlW1wia2luZFwiXSB8IFwiVHlwZVJlZmVyZW5jZVwifSBraW5kIC0gU2VtYW50aWMgbm9kZSBraW5kLlxuICogQHByb3BlcnR5IHtTZW1hbnRpY09yaWdpbn0gb3JpZ2luIC0gQ2xvc2VkIHByb3ZlbmFuY2UgdmFsdWUuXG4gKiBAcHJvcGVydHkge1JlYWRvbmx5PFJlY29yZDxzdHJpbmcsIFNvdXJjZUxvY2F0aW9uPj59IHJhbmdlcyAtIEV4YWN0IHNlbWFudGljLXRva2VuIHN1YnJhbmdlcyBieSByb2xlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtzeW1ib2xJZF0gLSBSZXNvbHZlZCBkZWNsYXJlZC9yZWZlcmVuY2VkIHN5bWJvbCBpZGVudGl0eS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFNlbWFudGljU3ltYm9sUmVmZXJlbmNlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbm9kZUlkIC0gUmVmZXJyaW5nIHNlbWFudGljIG5vZGUgaWRlbnRpdHkuXG4gKiBAcHJvcGVydHkge1NlbWFudGljU3ltYm9sUm9sZX0gcm9sZSAtIFJlZmVyZW5jZSByb2xlLlxuICogQHByb3BlcnR5IHtTb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBFeGFjdCByZWZlcmVuY2UgcmFuZ2UuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBTZW1hbnRpY1N5bWJvbFByb3ZlbmFuY2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpZCAtIERldGVybWluaXN0aWMgbW9kdWxlLWxvY2FsIHN5bWJvbCBpZGVudGl0eS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBuYW1lIC0gU2VtYW50aWMgc3ltYm9sIG5hbWUuXG4gKiBAcHJvcGVydHkge1NlbWFudGljU3ltYm9sS2luZH0ga2luZCAtIFN5bWJvbCBjYXRlZ29yeS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBkZWNsYXJhdGlvbk5vZGVJZCAtIERlY2xhcmluZyBub2RlIGlkZW50aXR5LlxuICogQHByb3BlcnR5IHtTb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBFeGFjdCBkZWNsYXJhdGlvbi1uYW1lIHJhbmdlLlxuICogQHByb3BlcnR5IHtTZW1hbnRpY1N5bWJvbFJlZmVyZW5jZVtdfSByZWZlcmVuY2VzIC0gT3JkZXJlZCByZXNvbHZlZCByZWZlcmVuY2VzLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgU2VtYW50aWNQcm92ZW5hbmNlXG4gKiBAcHJvcGVydHkge1wiU2VtYW50aWZvbGRQcm92ZW5hbmNlXCJ9IHNjaGVtYSAtIFNjaGVtYSBkaXNjcmltaW5hdG9yLlxuICogQHByb3BlcnR5IHsxfSB2ZXJzaW9uIC0gU2NoZW1hIHZlcnNpb24uXG4gKiBAcHJvcGVydHkge1widXRmMTZcIn0gY29vcmRpbmF0ZVN5c3RlbSAtIE9mZnNldCBhbmQgY29sdW1uIHVuaXQuXG4gKiBAcHJvcGVydHkge1JlZ2lzdGVyZWRTb3VyY2VbXX0gc291cmNlcyAtIFZlcnNpb25lZCBzb3VyY2UgcmVnaXN0cnkuXG4gKiBAcHJvcGVydHkge1NlbWFudGljTm9kZVByb3ZlbmFuY2VbXX0gbm9kZXMgLSBEZXRlcm1pbmlzdGljIG5vZGUgaW5kZXguXG4gKiBAcHJvcGVydHkge1NlbWFudGljU3ltYm9sUHJvdmVuYW5jZVtdfSBzeW1ib2xzIC0gRGV0ZXJtaW5pc3RpYyBzeW1ib2wgaW5kZXguXG4gKi9cblxuLyoqIEB0eXBlZGVmIHtcImV4YWN0XCIgfCBcImFuY2hvclwiIHwgXCJzeW50aGV0aWNcIn0gTWFwcGluZ0tpbmQgKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBTZW1hbnRpZm9sZE1hcHBpbmdTcGFuXG4gKiBAcHJvcGVydHkge1NvdXJjZUxvY2F0aW9ufSBnZW5lcmF0ZWQgLSBHZW5lcmF0ZWQgaGFsZi1vcGVuIHJhbmdlLlxuICogQHByb3BlcnR5IHtNYXBwaW5nS2luZH0gbWFwcGluZ0tpbmQgLSBNYXBwaW5nIHByZWNpc2lvbi5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNPcmlnaW59IG9yaWdpbiAtIENsb3NlZCBvcmlnaW5hbCBwcm92ZW5hbmNlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtub2RlSWRdIC0gUmVsYXRlZCBjYW5vbmljYWwgc2VtYW50aWMgbm9kZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbc3ltYm9sSWRdIC0gUmVsYXRlZCBjYW5vbmljYWwgc2VtYW50aWMgc3ltYm9sLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtyb2xlXSAtIFNlbWFudGljIHRva2VuIHJvbGUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW25hbWVdIC0gVXNlZnVsIHN5bWJvbCBuYW1lIGZvciBTb3VyY2UgTWFwIHYzLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgR2VuZXJhdGVkU291cmNlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZmlsZW5hbWUgLSBPdXRwdXQgZmlsZW5hbWUuXG4gKiBAcHJvcGVydHkge1NlbWFudGljTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gT3V0cHV0IGxhbmd1YWdlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNvbnRlbnQgLSBFeGFjdCBnZW5lcmF0ZWQgTEYgc291cmNlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgU2VtYW50aWZvbGRNYXBwaW5nXG4gKiBAcHJvcGVydHkge1wiU2VtYW50aWZvbGRNYXBwaW5nXCJ9IHNjaGVtYSAtIFNjaGVtYSBkaXNjcmltaW5hdG9yLlxuICogQHByb3BlcnR5IHsxfSB2ZXJzaW9uIC0gU2NoZW1hIHZlcnNpb24uXG4gKiBAcHJvcGVydHkge1widXRmMTZcIn0gY29vcmRpbmF0ZVN5c3RlbSAtIE9mZnNldCBhbmQgY29sdW1uIHVuaXQuXG4gKiBAcHJvcGVydHkge0dlbmVyYXRlZFNvdXJjZX0gZ2VuZXJhdGVkIC0gR2VuZXJhdGVkIHByb2dyYW0gaWRlbnRpdHkgYW5kIGNvbnRlbnQuXG4gKiBAcHJvcGVydHkge1JlZ2lzdGVyZWRTb3VyY2VbXX0gc291cmNlcyAtIE9yaWdpbmFsIHNvdXJjZSByZWdpc3RyeS5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNOb2RlUHJvdmVuYW5jZVtdfSBub2RlcyAtIENhbm9uaWNhbCBzZW1hbnRpYyBub2RlIGluZGV4LlxuICogQHByb3BlcnR5IHtTZW1hbnRpY1N5bWJvbFByb3ZlbmFuY2VbXX0gc3ltYm9scyAtIENhbm9uaWNhbCBzZW1hbnRpYyBzeW1ib2wgaW5kZXguXG4gKiBAcHJvcGVydHkge1NlbWFudGlmb2xkTWFwcGluZ1NwYW5bXX0gc3BhbnMgLSBPcmRlcmVkIGdlbmVyYXRlZCByYW5nZXMuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBHZW5lcmF0ZWRBcnRpZmFjdFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNvZGUgLSBHZW5lcmF0ZWQgb3V0cHV0IHByb2dyYW0sIGluY2x1ZGluZyBhbnkgcmVxdWVzdGVkIGRpcmVjdGl2ZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBmaWxlbmFtZSAtIEdlbmVyYXRlZCBvdXRwdXQgZmlsZW5hbWUuXG4gKiBAcHJvcGVydHkge1NlbWFudGljTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gT3V0cHV0IGxhbmd1YWdlLlxuICogQHByb3BlcnR5IHtTZW1hbnRpZm9sZE1hcHBpbmd9IG1hcHBpbmcgLSBBdXRob3JpdGF0aXZlIHJpY2ggbWFwcGluZy5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiQGpyaWRnZXdlbGwvZ2VuLW1hcHBpbmdcIikuRW5jb2RlZFNvdXJjZU1hcH0gc291cmNlTWFwIC0gU291cmNlIE1hcCB2MyBwcm9qZWN0aW9uLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHNvdXJjZU1hcEZpbGVuYW1lIC0gRGVmYXVsdCBleHRlcm5hbCBTb3VyY2UgTWFwIGZpbGVuYW1lLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgVHlwZVJlZmVyZW5jZVxuICogQHByb3BlcnR5IHtcIlR5cGVSZWZlcmVuY2VcIn0ga2luZCAtIE5vZGUgZGlzY3JpbWluYXRvci5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNUeXBlTmFtZX0gbmFtZSAtIE5vcm1hbGl6ZWQgdHlwZSBuYW1lLlxuICogQHByb3BlcnR5IHtTZW1hbnRpY05vZGVTb3VyY2VQcm92ZW5hbmNlfSBbc291cmNlUHJvdmVuYW5jZV0gLSBOb2RlLWFzc29jaWF0ZWQgcHJvdmVuYW5jZSB0aGF0IHN1cnZpdmVzIHNlbWFudGljIHRyYW5zZm9ybXMuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBQYXJhbWV0ZXJcbiAqIEBwcm9wZXJ0eSB7XCJQYXJhbWV0ZXJcIn0ga2luZCAtIE5vZGUgZGlzY3JpbWluYXRvci5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBuYW1lIC0gUGFyYW1ldGVyIG5hbWUuXG4gKiBAcHJvcGVydHkge1R5cGVSZWZlcmVuY2V9IHR5cGUgLSBQYXJhbWV0ZXIgdHlwZS5cbiAqIEBwcm9wZXJ0eSB7U291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gU291cmNlIGxvY2F0aW9uLlxuICogQHByb3BlcnR5IHtTZW1hbnRpY05vZGVTb3VyY2VQcm92ZW5hbmNlfSBbc291cmNlUHJvdmVuYW5jZV0gLSBOb2RlLWFzc29jaWF0ZWQgcHJvdmVuYW5jZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIElkZW50aWZpZXJFeHByZXNzaW9uXG4gKiBAcHJvcGVydHkge1wiSWRlbnRpZmllckV4cHJlc3Npb25cIn0ga2luZCAtIE5vZGUgZGlzY3JpbWluYXRvci5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBuYW1lIC0gUmVmZXJlbmNlZCBuYW1lLlxuICogQHByb3BlcnR5IHtTb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBTb3VyY2UgbG9jYXRpb24uXG4gKiBAcHJvcGVydHkge1NlbWFudGljTm9kZVNvdXJjZVByb3ZlbmFuY2V9IFtzb3VyY2VQcm92ZW5hbmNlXSAtIE5vZGUtYXNzb2NpYXRlZCBwcm92ZW5hbmNlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgSW50ZWdlckxpdGVyYWxcbiAqIEBwcm9wZXJ0eSB7XCJJbnRlZ2VyTGl0ZXJhbFwifSBraW5kIC0gTm9kZSBkaXNjcmltaW5hdG9yLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHZhbHVlIC0gSmF2YVNjcmlwdC1zYWZlIGludGVnZXIgdmFsdWUuXG4gKiBAcHJvcGVydHkge1NvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIFNvdXJjZSBsb2NhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNOb2RlU291cmNlUHJvdmVuYW5jZX0gW3NvdXJjZVByb3ZlbmFuY2VdIC0gTm9kZS1hc3NvY2lhdGVkIHByb3ZlbmFuY2UuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBCb29sZWFuTGl0ZXJhbFxuICogQHByb3BlcnR5IHtcIkJvb2xlYW5MaXRlcmFsXCJ9IGtpbmQgLSBOb2RlIGRpc2NyaW1pbmF0b3IuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHZhbHVlIC0gQm9vbGVhbiB2YWx1ZS5cbiAqIEBwcm9wZXJ0eSB7U291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gU291cmNlIGxvY2F0aW9uLlxuICogQHByb3BlcnR5IHtTZW1hbnRpY05vZGVTb3VyY2VQcm92ZW5hbmNlfSBbc291cmNlUHJvdmVuYW5jZV0gLSBOb2RlLWFzc29jaWF0ZWQgcHJvdmVuYW5jZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFN0cmluZ0xpdGVyYWxcbiAqIEBwcm9wZXJ0eSB7XCJTdHJpbmdMaXRlcmFsXCJ9IGtpbmQgLSBOb2RlIGRpc2NyaW1pbmF0b3IuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdmFsdWUgLSBVbmljb2RlIHN0cmluZyB2YWx1ZS5cbiAqIEBwcm9wZXJ0eSB7U291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gU291cmNlIGxvY2F0aW9uLlxuICogQHByb3BlcnR5IHtTZW1hbnRpY05vZGVTb3VyY2VQcm92ZW5hbmNlfSBbc291cmNlUHJvdmVuYW5jZV0gLSBOb2RlLWFzc29jaWF0ZWQgcHJvdmVuYW5jZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFVuYXJ5RXhwcmVzc2lvblxuICogQHByb3BlcnR5IHtcIlVuYXJ5RXhwcmVzc2lvblwifSBraW5kIC0gTm9kZSBkaXNjcmltaW5hdG9yLlxuICogQHByb3BlcnR5IHtTZW1hbnRpY1VuYXJ5T3BlcmF0aW9ufSBvcGVyYXRpb24gLSBDbG9zZWQgc2VtYW50aWMgb3BlcmF0aW9uLlxuICogQHByb3BlcnR5IHtFeHByZXNzaW9ufSBvcGVyYW5kIC0gT3BlcmFuZCBldmFsdWF0ZWQgZXhhY3RseSBvbmNlLlxuICogQHByb3BlcnR5IHtTZW1hbnRpY1R5cGVOYW1lfSB0eXBlIC0gRXhwbGljaXQgb3BlcmF0aW9uIHJlc3VsdCB0eXBlLlxuICogQHByb3BlcnR5IHtTb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBTb3VyY2UgbG9jYXRpb24uXG4gKiBAcHJvcGVydHkge1NlbWFudGljTm9kZVNvdXJjZVByb3ZlbmFuY2V9IFtzb3VyY2VQcm92ZW5hbmNlXSAtIE5vZGUtYXNzb2NpYXRlZCBwcm92ZW5hbmNlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgQmluYXJ5RXhwcmVzc2lvblxuICogQHByb3BlcnR5IHtcIkJpbmFyeUV4cHJlc3Npb25cIn0ga2luZCAtIE5vZGUgZGlzY3JpbWluYXRvci5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNCaW5hcnlPcGVyYXRpb259IG9wZXJhdGlvbiAtIENsb3NlZCBzZW1hbnRpYyBvcGVyYXRpb24uXG4gKiBAcHJvcGVydHkge0V4cHJlc3Npb259IGxlZnQgLSBMZWZ0IG9wZXJhbmQuXG4gKiBAcHJvcGVydHkge0V4cHJlc3Npb259IHJpZ2h0IC0gUmlnaHQgb3BlcmFuZC5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNUeXBlTmFtZX0gdHlwZSAtIEV4cGxpY2l0IG9wZXJhdGlvbiByZXN1bHQgdHlwZS5cbiAqIEBwcm9wZXJ0eSB7U291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gU291cmNlIGxvY2F0aW9uLlxuICogQHByb3BlcnR5IHtTZW1hbnRpY05vZGVTb3VyY2VQcm92ZW5hbmNlfSBbc291cmNlUHJvdmVuYW5jZV0gLSBOb2RlLWFzc29jaWF0ZWQgcHJvdmVuYW5jZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIENhbGxFeHByZXNzaW9uXG4gKiBAcHJvcGVydHkge1wiQ2FsbEV4cHJlc3Npb25cIn0ga2luZCAtIE5vZGUgZGlzY3JpbWluYXRvci5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjYWxsZWUgLSBGdW5jdGlvbiBuYW1lLlxuICogQHByb3BlcnR5IHtFeHByZXNzaW9uW119IGFyZ3VtZW50cyAtIFBvc2l0aW9uYWwgYXJndW1lbnRzLlxuICogQHByb3BlcnR5IHtTb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBTb3VyY2UgbG9jYXRpb24uXG4gKiBAcHJvcGVydHkge1NlbWFudGljTm9kZVNvdXJjZVByb3ZlbmFuY2V9IFtzb3VyY2VQcm92ZW5hbmNlXSAtIE5vZGUtYXNzb2NpYXRlZCBwcm92ZW5hbmNlLlxuICovXG5cbi8qKiBAdHlwZWRlZiB7SWRlbnRpZmllckV4cHJlc3Npb24gfCBJbnRlZ2VyTGl0ZXJhbCB8IEJvb2xlYW5MaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8IFVuYXJ5RXhwcmVzc2lvbiB8IEJpbmFyeUV4cHJlc3Npb24gfCBDYWxsRXhwcmVzc2lvbn0gRXhwcmVzc2lvbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIExvY2FsRGVjbGFyYXRpb25cbiAqIEBwcm9wZXJ0eSB7XCJMb2NhbERlY2xhcmF0aW9uXCJ9IGtpbmQgLSBOb2RlIGRpc2NyaW1pbmF0b3IuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbmFtZSAtIERlY2xhcmVkIGxvY2FsIG5hbWUuXG4gKiBAcHJvcGVydHkge1R5cGVSZWZlcmVuY2V9IHR5cGUgLSBFeHBsaWNpdCBsb2NhbCB0eXBlLlxuICogQHByb3BlcnR5IHtib29sZWFufSBtdXRhYmxlIC0gV2hldGhlciBsYXRlciBhc3NpZ25tZW50IGlzIGFsbG93ZWQuXG4gKiBAcHJvcGVydHkge0V4cHJlc3Npb259IGluaXRpYWxpemVyIC0gUmVxdWlyZWQgaW5pdGlhbGl6ZXIgZXhwcmVzc2lvbi5cbiAqIEBwcm9wZXJ0eSB7U291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gRGVjbGFyYXRpb24gc291cmNlIGxvY2F0aW9uLlxuICogQHByb3BlcnR5IHtTZW1hbnRpY05vZGVTb3VyY2VQcm92ZW5hbmNlfSBbc291cmNlUHJvdmVuYW5jZV0gLSBOb2RlLWFzc29jaWF0ZWQgcHJvdmVuYW5jZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIEFzc2lnbm1lbnRTdGF0ZW1lbnRcbiAqIEBwcm9wZXJ0eSB7XCJBc3NpZ25tZW50U3RhdGVtZW50XCJ9IGtpbmQgLSBOb2RlIGRpc2NyaW1pbmF0b3IuXG4gKiBAcHJvcGVydHkge0lkZW50aWZpZXJFeHByZXNzaW9ufSB0YXJnZXQgLSBTaW1wbGUgbG9jYWwgYXNzaWdubWVudCB0YXJnZXQuXG4gKiBAcHJvcGVydHkge0V4cHJlc3Npb259IGV4cHJlc3Npb24gLSBBc3NpZ25lZCBleHByZXNzaW9uLlxuICogQHByb3BlcnR5IHtTb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBBc3NpZ25tZW50IHNvdXJjZSBsb2NhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNOb2RlU291cmNlUHJvdmVuYW5jZX0gW3NvdXJjZVByb3ZlbmFuY2VdIC0gTm9kZS1hc3NvY2lhdGVkIHByb3ZlbmFuY2UuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBSZXR1cm5TdGF0ZW1lbnRcbiAqIEBwcm9wZXJ0eSB7XCJSZXR1cm5TdGF0ZW1lbnRcIn0ga2luZCAtIE5vZGUgZGlzY3JpbWluYXRvci5cbiAqIEBwcm9wZXJ0eSB7RXhwcmVzc2lvbn0gZXhwcmVzc2lvbiAtIFJldHVybmVkIGV4cHJlc3Npb24uXG4gKiBAcHJvcGVydHkge1NvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIFNvdXJjZSBsb2NhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNOb2RlU291cmNlUHJvdmVuYW5jZX0gW3NvdXJjZVByb3ZlbmFuY2VdIC0gTm9kZS1hc3NvY2lhdGVkIHByb3ZlbmFuY2UuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBJZlN0YXRlbWVudFxuICogQHByb3BlcnR5IHtcIklmU3RhdGVtZW50XCJ9IGtpbmQgLSBOb2RlIGRpc2NyaW1pbmF0b3IuXG4gKiBAcHJvcGVydHkge0V4cHJlc3Npb259IGNvbmRpdGlvbiAtIEJyYW5jaCBjb25kaXRpb24uXG4gKiBAcHJvcGVydHkge0Jsb2NrfSBjb25zZXF1ZW50IC0gVHJ1ZSBicmFuY2guXG4gKiBAcHJvcGVydHkge0Jsb2NrfSBbYWx0ZXJuYXRlXSAtIEZhbHNlIGJyYW5jaCwgYWJzZW50IHdoZW4gZXhlY3V0aW9uIGZhbGxzIHRocm91Z2guXG4gKiBAcHJvcGVydHkge1NvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIFNvdXJjZSBsb2NhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNOb2RlU291cmNlUHJvdmVuYW5jZX0gW3NvdXJjZVByb3ZlbmFuY2VdIC0gTm9kZS1hc3NvY2lhdGVkIHByb3ZlbmFuY2UuXG4gKi9cblxuLyoqIEB0eXBlZGVmIHtMb2NhbERlY2xhcmF0aW9uIHwgQXNzaWdubWVudFN0YXRlbWVudH0gTG9jYWxTdGF0ZW1lbnQgKi9cbi8qKiBAdHlwZWRlZiB7TG9jYWxTdGF0ZW1lbnQgfCBJZlN0YXRlbWVudCB8IFJldHVyblN0YXRlbWVudCB8IFByaW50U3RhdGVtZW50fSBTdGF0ZW1lbnQgKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBCbG9ja1xuICogQHByb3BlcnR5IHtcIkJsb2NrXCJ9IGtpbmQgLSBOb2RlIGRpc2NyaW1pbmF0b3IuXG4gKiBAcHJvcGVydHkge1N0YXRlbWVudFtdfSBzdGF0ZW1lbnRzIC0gT3JkZXJlZCBzdGF0ZW1lbnRzIGluIG9uZSBsZXhpY2FsIHNjb3BlLlxuICogQHByb3BlcnR5IHtTb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBTb3VyY2UgbG9jYXRpb24uXG4gKiBAcHJvcGVydHkge1NlbWFudGljTm9kZVNvdXJjZVByb3ZlbmFuY2V9IFtzb3VyY2VQcm92ZW5hbmNlXSAtIE5vZGUtYXNzb2NpYXRlZCBwcm92ZW5hbmNlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgRnVuY3Rpb25EZWNsYXJhdGlvblxuICogQHByb3BlcnR5IHtcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIn0ga2luZCAtIE5vZGUgZGlzY3JpbWluYXRvci5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBuYW1lIC0gRnVuY3Rpb24gbmFtZS5cbiAqIEBwcm9wZXJ0eSB7UGFyYW1ldGVyW119IHBhcmFtZXRlcnMgLSBGdW5jdGlvbiBwYXJhbWV0ZXJzLlxuICogQHByb3BlcnR5IHtUeXBlUmVmZXJlbmNlfSByZXR1cm5UeXBlIC0gUmV0dXJuIHR5cGUuXG4gKiBAcHJvcGVydHkge0Jsb2NrfSBib2R5IC0gRnVuY3Rpb24gYm9keS5cbiAqIEBwcm9wZXJ0eSB7U291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gU291cmNlIGxvY2F0aW9uLlxuICogQHByb3BlcnR5IHtTZW1hbnRpY05vZGVTb3VyY2VQcm92ZW5hbmNlfSBbc291cmNlUHJvdmVuYW5jZV0gLSBOb2RlLWFzc29jaWF0ZWQgcHJvdmVuYW5jZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFByaW50U3RhdGVtZW50XG4gKiBAcHJvcGVydHkge1wiUHJpbnRTdGF0ZW1lbnRcIn0ga2luZCAtIE5vZGUgZGlzY3JpbWluYXRvci5cbiAqIEBwcm9wZXJ0eSB7RXhwcmVzc2lvbn0gZXhwcmVzc2lvbiAtIFByaW50ZWQgZXhwcmVzc2lvbi5cbiAqIEBwcm9wZXJ0eSB7U291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gU291cmNlIGxvY2F0aW9uLlxuICogQHByb3BlcnR5IHtTZW1hbnRpY05vZGVTb3VyY2VQcm92ZW5hbmNlfSBbc291cmNlUHJvdmVuYW5jZV0gLSBOb2RlLWFzc29jaWF0ZWQgcHJvdmVuYW5jZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIEVudHJ5UG9pbnRcbiAqIEBwcm9wZXJ0eSB7XCJFbnRyeVBvaW50XCJ9IGtpbmQgLSBOb2RlIGRpc2NyaW1pbmF0b3IuXG4gKiBAcHJvcGVydHkge0Jsb2NrfSBib2R5IC0gRW50cnktcG9pbnQgYm9keS5cbiAqIEBwcm9wZXJ0eSB7U291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gU291cmNlIGxvY2F0aW9uLlxuICogQHByb3BlcnR5IHtTZW1hbnRpY05vZGVTb3VyY2VQcm92ZW5hbmNlfSBbc291cmNlUHJvdmVuYW5jZV0gLSBOb2RlLWFzc29jaWF0ZWQgcHJvdmVuYW5jZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFNlbWFudGljTW9kdWxlXG4gKiBAcHJvcGVydHkge1wiTW9kdWxlXCJ9IGtpbmQgLSBOb2RlIGRpc2NyaW1pbmF0b3IuXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9uRGVjbGFyYXRpb25bXX0gZnVuY3Rpb25zIC0gVG9wLWxldmVsIGZ1bmN0aW9ucy5cbiAqIEBwcm9wZXJ0eSB7RW50cnlQb2ludH0gZW50cnlQb2ludCAtIEV4ZWN1dGFibGUgZW50cnkgcG9pbnQuXG4gKiBAcHJvcGVydHkge1NvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIFNvdXJjZSBsb2NhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNOb2RlU291cmNlUHJvdmVuYW5jZX0gW3NvdXJjZVByb3ZlbmFuY2VdIC0gTm9kZS1hc3NvY2lhdGVkIHByb3ZlbmFuY2UuXG4gKiBAcHJvcGVydHkge1NlbWFudGljUHJvdmVuYW5jZX0gW3Byb3ZlbmFuY2VdIC0gUGFyc2VyLWF1dGhvcmVkIHNvdXJjZSBhbmQgaWRlbnRpdHkgaW5kZXg7IG9wdGlvbmFsIGZvciBsZWdhY3kgY2FsbGVyLWF1dGhvcmVkIG1vZHVsZXMuXG4gKi9cblxuLyoqIEB0eXBlZGVmIHtTZW1hbnRpY01vZHVsZSB8IEZ1bmN0aW9uRGVjbGFyYXRpb24gfCBQYXJhbWV0ZXIgfCBCbG9jayB8IFN0YXRlbWVudCB8IEVudHJ5UG9pbnQgfCBFeHByZXNzaW9uIHwgVHlwZVJlZmVyZW5jZX0gU2VtYW50aWNOb2RlICovXG4vKiogQHR5cGVkZWYge1NlbWFudGljTm9kZX0gU2VtYW50aWNOb2RlV2l0aG91dExvY2F0aW9ucyAqL1xuXG5leHBvcnQge31cbiJdfQ==
387
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VtYW50aWMvdHlwZXMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLG1JQUFtSTtBQUNuSSxtRUFBbUU7QUFDbkUsdUVBQXVFO0FBQ3ZFLDZWQUE2VjtBQUM3Vix1RUFBdUU7QUFDdkUsOEVBQThFO0FBQzlFLGdJQUFnSTtBQUNoSSx1SEFBdUg7QUFFdkg7Ozs7Ozs7R0FPRztBQUVIOzs7OztHQUtHO0FBRUg7Ozs7R0FJRztBQUVIOzs7Ozs7OztHQVFHO0FBRUg7Ozs7O0dBS0c7QUFFSDs7Ozs7R0FLRztBQUVIOzs7Ozs7R0FNRztBQUVIOzs7OztHQUtHO0FBRUg7Ozs7Ozs7R0FPRztBQUVIOzs7O0dBSUc7QUFFSDs7Ozs7R0FLRztBQUVILCtFQUErRTtBQUUvRTs7Ozs7OztHQU9HO0FBRUg7Ozs7Ozs7R0FPRztBQUVIOzs7Ozs7R0FNRztBQUVIOzs7Ozs7OztHQVFHO0FBRUg7Ozs7O0dBS0c7QUFFSDs7Ozs7Ozs7R0FRRztBQUVIOzs7Ozs7OztHQVFHO0FBRUgsOERBQThEO0FBRTlEOzs7Ozs7Ozs7R0FTRztBQUVIOzs7OztHQUtHO0FBRUg7Ozs7Ozs7Ozs7R0FVRztBQUVIOzs7Ozs7OztHQVFHO0FBRUg7Ozs7OztHQU1HO0FBRUg7Ozs7R0FJRztBQUVIOzs7OztHQUtHO0FBRUgsa0hBQWtIO0FBRWxIOzs7Ozs7Ozs7R0FTRztBQUVIOzs7Ozs7O0dBT0c7QUFFSDs7Ozs7Ozs7O0dBU0c7QUFFSDs7Ozs7Ozs7R0FRRztBQUVIOzs7OztHQUtHO0FBRUg7Ozs7O0dBS0c7QUFFSDs7Ozs7OztHQU9HO0FBRUg7Ozs7OztHQU1HO0FBRUg7Ozs7OztHQU1HO0FBRUg7Ozs7OztHQU1HO0FBRUg7Ozs7OztHQU1HO0FBRUg7Ozs7Ozs7O0dBUUc7QUFFSDs7Ozs7Ozs7O0dBU0c7QUFFSDs7Ozs7OztHQU9HO0FBRUgseUpBQXlKO0FBRXpKOzs7Ozs7Ozs7R0FTRztBQUVIOzs7Ozs7O0dBT0c7QUFFSDs7Ozs7O0dBTUc7QUFFSDs7Ozs7Ozs7R0FRRztBQUVILHVFQUF1RTtBQUN2RSwyRkFBMkY7QUFFM0Y7Ozs7OztHQU1HO0FBRUg7Ozs7Ozs7OztHQVNHO0FBRUg7Ozs7OztHQU1HO0FBRUg7Ozs7OztHQU1HO0FBRUg7Ozs7Ozs7O0dBUUc7QUFFSCw2SUFBNkk7QUFDN0ksMkRBQTJEO0FBRTNELE9BQU8sRUFBRSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbi8qKiBAdHlwZWRlZiB7XCJwaHBcIiB8IFwicnVieVwiIHwgXCJqYXZhc2NyaXB0XCIgfCBcInR5cGVzY3JpcHRcIiB8IFwiamF2YVwiIHwgXCJweXRob25cIiB8IFwiY3NoYXJwXCIgfCBcImdvXCIgfCBcImNcIiB8IFwiY3BwXCJ9IFNlbWFudGljTGFuZ3VhZ2UgKi9cbi8qKiBAdHlwZWRlZiB7XCJpbnRlZ2VyXCIgfCBcImJvb2xlYW5cIiB8IFwic3RyaW5nXCJ9IFNlbWFudGljVHlwZU5hbWUgKi9cbi8qKiBAdHlwZWRlZiB7XCJJbnRlZ2VyTmVnYXRlXCIgfCBcIkJvb2xlYW5Ob3RcIn0gU2VtYW50aWNVbmFyeU9wZXJhdGlvbiAqL1xuLyoqIEB0eXBlZGVmIHtcIkludGVnZXJBZGRcIiB8IFwiSW50ZWdlclN1YnRyYWN0XCIgfCBcIkludGVnZXJNdWx0aXBseVwiIHwgXCJCb29sZWFuQW5kXCIgfCBcIkJvb2xlYW5PclwiIHwgXCJJbnRlZ2VyRXF1YWxcIiB8IFwiSW50ZWdlck5vdEVxdWFsXCIgfCBcIkJvb2xlYW5FcXVhbFwiIHwgXCJCb29sZWFuTm90RXF1YWxcIiB8IFwiU3RyaW5nRXF1YWxcIiB8IFwiU3RyaW5nTm90RXF1YWxcIiB8IFwiSW50ZWdlckxlc3NUaGFuXCIgfCBcIkludGVnZXJMZXNzVGhhbk9yRXF1YWxcIiB8IFwiSW50ZWdlckdyZWF0ZXJUaGFuXCIgfCBcIkludGVnZXJHcmVhdGVyVGhhbk9yRXF1YWxcIiB8IFwiU3RyaW5nQ29uY2F0XCJ9IFNlbWFudGljQmluYXJ5T3BlcmF0aW9uICovXG4vKiogQHR5cGVkZWYge1wiZnVuY3Rpb25cIiB8IFwicGFyYW1ldGVyXCIgfCBcImxvY2FsXCJ9IFNlbWFudGljU3ltYm9sS2luZCAqL1xuLyoqIEB0eXBlZGVmIHtcImRlY2xhcmF0aW9uXCIgfCBcInJlYWRcIiB8IFwid3JpdGVcIiB8IFwiY2FsbFwifSBTZW1hbnRpY1N5bWJvbFJvbGUgKi9cbi8qKiBAdHlwZWRlZiB7XCJwYXJzZVwiIHwgXCJnZW5lcmF0ZVwiIHwgXCJyZXN0b3JlXCIgfCBcImNvbXBpbGVcIiB8IFwibGlua1wiIHwgXCJ2YWxpZGF0ZVwiIHwgXCJpbnN0YW50aWF0ZVwiIHwgXCJleGVjdXRlXCJ9IEFjY2VwdGFuY2VTdGFnZSAqL1xuLyoqIEB0eXBlZGVmIHtcImVudHJ5XCIgfCBcInNvdXJjZVwiIHwgXCJtYW5pZmVzdFwiIHwgXCJzdXBwb3J0XCIgfCBcIm1hcHBpbmdcIiB8IFwicmVzb3VyY2VcIiB8IFwibG9hZGVyXCJ9IEdlbmVyYXRlZEFydGlmYWN0Um9sZSAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIExhbmd1YWdlUm9sZUNhcGFiaWxpdGllc1xuICogQHByb3BlcnR5IHtib29sZWFufSBmcm9udGVuZCAtIFBhcnNlciBhZGFwdGVyIGF2YWlsYWJpbGl0eS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdGV4dEJhY2tlbmQgLSBTaW5nbGUtIG9yIG11bHRpLWZpbGUgdGV4dCBiYWNrZW5kIGF2YWlsYWJpbGl0eS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gYmluYXJ5QmFja2VuZCAtIEJpbmFyeSBiYWNrZW5kIGF2YWlsYWJpbGl0eS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gYXBwbGljYXRpb25CYWNrZW5kIC0gQXBwbGljYXRpb24tYXJ0aWZhY3QgYmFja2VuZCBhdmFpbGFiaWxpdHkuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGludGVyb3BlcmFiaWxpdHkgLSBJbnRlcm9wZXJhYmlsaXR5IGJyaWRnZSBhdmFpbGFiaWxpdHkuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBMYW5ndWFnZU1hcHBpbmdDYXBhYmlsaXRpZXNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcmljaFRleHQgLSBBdXRob3JpdGF0aXZlIHJpY2ggdGV4dCBtYXBwaW5ncy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gc291cmNlTWFwVjMgLSBTb3VyY2UgTWFwIHYzIHByb2plY3Rpb24uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGJpbmFyeVJhbmdlcyAtIEJ5dGUtY29vcmRpbmF0ZSBiaW5hcnkvcmVzb3VyY2UgbWFwcGluZ3MuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBMYW5ndWFnZUFjY2VwdGFuY2VDYXBhYmlsaXRpZXNcbiAqIEBwcm9wZXJ0eSB7cmVhZG9ubHkgQWNjZXB0YW5jZVN0YWdlW119IHN0YWdlcyAtIEFwcGxpY2FibGUgb3JkZXJlZCBhY2NlcHRhbmNlIHN0YWdlcy5cbiAqIEBwcm9wZXJ0eSB7cmVhZG9ubHkgc3RyaW5nW119IHRvb2xjaGFpbnMgLSBSZXF1aXJlZCBjYW5vbmljYWwgdG9vbGNoYWluIElEcy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIExhbmd1YWdlQ2FwYWJpbGl0aWVzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaWQgLSBTdGFibGUgcmVnaXN0cnkgaWRlbnRpdHkuXG4gKiBAcHJvcGVydHkge1JlYWRvbmx5PExhbmd1YWdlUm9sZUNhcGFiaWxpdGllcz59IHJvbGVzIC0gSW5kZXBlbmRlbnRseSByZWdpc3RlcmVkIHJvbGVzLlxuICogQHByb3BlcnR5IHtcInNpbmdsZVwiIHwgXCJtdWx0aXBsZVwifSBhcnRpZmFjdE11bHRpcGxpY2l0eSAtIFRhcmdldCBhcnRpZmFjdCBtdWx0aXBsaWNpdHkuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJvdW5kVHJpcCAtIFdoZXRoZXIgZnJvbnRlbmQvYmFja2VuZCByb3VuZC10cmlwIGFjY2VwdGFuY2UgaXMgZGVjbGFyZWQuXG4gKiBAcHJvcGVydHkge1JlYWRvbmx5PExhbmd1YWdlTWFwcGluZ0NhcGFiaWxpdGllcz59IG1hcHBpbmcgLSBNYXBwaW5nIGZvcm1zLlxuICogQHByb3BlcnR5IHtSZWFkb25seTxMYW5ndWFnZUFjY2VwdGFuY2VDYXBhYmlsaXRpZXM+fSBhY2NlcHRhbmNlIC0gU3RhZ2VzIGFuZCB0b29sY2hhaW5zLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgU291cmNlUG9pbnRcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsaW5lIC0gT25lLWJhc2VkIGxpbmUuXG4gKiBAcHJvcGVydHkge251bWJlcn0gY29sdW1uIC0gT25lLWJhc2VkIFVURi0xNiBjb2RlLXVuaXQgY29sdW1uLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IG9mZnNldCAtIFplcm8tYmFzZWQgVVRGLTE2IHNvdXJjZSBvZmZzZXQuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBTb3VyY2VMb2NhdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IGZpbGVuYW1lIC0gT3JpZ2luYXRpbmcgZmlsZW5hbWUuXG4gKiBAcHJvcGVydHkge1NvdXJjZVBvaW50fSBzdGFydCAtIEluY2x1c2l2ZSBzdGFydC5cbiAqIEBwcm9wZXJ0eSB7U291cmNlUG9pbnR9IGVuZCAtIEV4Y2x1c2l2ZSBlbmQuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBSZWdpc3RlcmVkU291cmNlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaWQgLSBSZWdpc3RyeS1sb2NhbCBkZXRlcm1pbmlzdGljIHNvdXJjZSBpZGVudGl0eS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBmaWxlbmFtZSAtIE9yaWdpbmFsIGZpbGVuYW1lLCBwcmVzZXJ2ZWQgdmVyYmF0aW0uXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IG51bGx9IGNvbnRlbnQgLSBPcmlnaW5hbCBzb3VyY2UgY29udGVudCwgcHJlc2VydmVkIHZlcmJhdGltIHdoZW4gYXZhaWxhYmxlLlxuICogQHByb3BlcnR5IHtTZW1hbnRpY0xhbmd1YWdlIHwgbnVsbH0gbGFuZ3VhZ2UgLSBQYXJzZXIgbGFuZ3VhZ2Ugd2hlbiBrbm93bi5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFNvdXJjZU9yaWdpblxuICogQHByb3BlcnR5IHtcInNvdXJjZVwifSBraW5kIC0gRGlyZWN0IHNvdXJjZSBwcm92ZW5hbmNlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHNvdXJjZUlkIC0gUmVnaXN0ZXJlZCBzb3VyY2UgaWRlbnRpdHkuXG4gKiBAcHJvcGVydHkge1NvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIEV4YWN0IG9yaWdpbmFsIHJhbmdlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgUmVsYXRlZE9yaWdpblxuICogQHByb3BlcnR5IHtzdHJpbmd9IHNvdXJjZUlkIC0gUmVnaXN0ZXJlZCBzb3VyY2UgaWRlbnRpdHkuXG4gKiBAcHJvcGVydHkge1NvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIFJlbGF0ZWQgb3JpZ2luYWwgcmFuZ2UuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW25vZGVJZF0gLSBSZWxhdGVkIHNlbWFudGljIG5vZGUgaWRlbnRpdHkuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3N5bWJvbElkXSAtIFJlbGF0ZWQgc2VtYW50aWMgc3ltYm9sIGlkZW50aXR5LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtyb2xlXSAtIFJlbGF0aW9uc2hpcCByb2xlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgRGVyaXZlZE9yaWdpblxuICogQHByb3BlcnR5IHtcImRlcml2ZWRcIn0ga2luZCAtIFByb3ZlbmFuY2UgZGVyaXZlZCBmcm9tIG9uZSBvciBtb3JlIG9yaWdpbnMuXG4gKiBAcHJvcGVydHkge1JlbGF0ZWRPcmlnaW5bXX0gb3JpZ2lucyAtIE9yZGVyZWQsIG5vbi1lbXB0eSBvcmlnaW5hbCByYW5nZXMuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBTeW50aGV0aWNPcmlnaW5cbiAqIEBwcm9wZXJ0eSB7XCJzeW50aGV0aWNcIn0ga2luZCAtIFNvdXJjZS1mcmVlIGdlbmVyYXRlZCBvciBzZW1hbnRpYyBzY2FmZm9sZGluZy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZWFzb24gLSBTdGFibGUgaHVtYW4tcmVhZGFibGUgcmVhc29uLlxuICogQHByb3BlcnR5IHtSZWxhdGVkT3JpZ2luW119IHJlbGF0ZWRPcmlnaW5zIC0gT3JkZXJlZCByZWxhdGVkIHJhbmdlcywgcG9zc2libHkgZW1wdHkuXG4gKi9cblxuLyoqIEB0eXBlZGVmIHtTb3VyY2VPcmlnaW4gfCBEZXJpdmVkT3JpZ2luIHwgU3ludGhldGljT3JpZ2lufSBTZW1hbnRpY09yaWdpbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIEdlbmVyYXRlZEJ5dGVSYW5nZVxuICogQHByb3BlcnR5IHt7c3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXJ9fSBnZW5lcmF0ZWQgLSBIYWxmLW9wZW4gZ2VuZXJhdGVkIGJ5dGUgb2Zmc2V0cy5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNPcmlnaW59IG9yaWdpbiAtIFNlbWFudGljIG9yIGV4cGxpY2l0IHN5bnRoZXRpYyBwcm92ZW5hbmNlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtub2RlSWRdIC0gT3JpZ2luYXRpbmcgc2VtYW50aWMgbm9kZSBpZGVudGl0eS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbc3ltYm9sSWRdIC0gT3JpZ2luYXRpbmcgc2VtYW50aWMgc3ltYm9sIGlkZW50aXR5LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtyb2xlXSAtIFNlbWFudGljIG9yIGJpbmFyeS1yZWdpb24gcm9sZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFNlbWFudGlmb2xkQnl0ZU1hcHBpbmdcbiAqIEBwcm9wZXJ0eSB7XCJTZW1hbnRpZm9sZEJ5dGVNYXBwaW5nXCJ9IHNjaGVtYSAtIFNjaGVtYSBkaXNjcmltaW5hdG9yLlxuICogQHByb3BlcnR5IHsxfSB2ZXJzaW9uIC0gU2NoZW1hIHZlcnNpb24uXG4gKiBAcHJvcGVydHkge1wiYnl0ZXNcIn0gY29vcmRpbmF0ZVN5c3RlbSAtIEdlbmVyYXRlZCBvZmZzZXRzIGFyZSBieXRlcywgbmV2ZXIgdGV4dCBjb2x1bW5zLlxuICogQHByb3BlcnR5IHt7cGF0aDogc3RyaW5nLCBieXRlTGVuZ3RoOiBudW1iZXJ9fSBnZW5lcmF0ZWQgLSBHZW5lcmF0ZWQgYXJ0aWZhY3QgaWRlbnRpdHkuXG4gKiBAcHJvcGVydHkge3JlYWRvbmx5IEdlbmVyYXRlZEJ5dGVSYW5nZVtdfSByYW5nZXMgLSBPcmRlcmVkIG5vbi1vdmVybGFwcGluZyByYW5nZXMuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBTZW1hbnRpY05vZGVTb3VyY2VQcm92ZW5hbmNlXG4gKiBAcHJvcGVydHkge1wiU2VtYW50aWZvbGROb2RlUHJvdmVuYW5jZVwifSBzY2hlbWEgLSBBc3NvY2lhdGlvbiBkaXNjcmltaW5hdG9yLlxuICogQHByb3BlcnR5IHsxfSB2ZXJzaW9uIC0gQXNzb2NpYXRpb24gdmVyc2lvbi5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNPcmlnaW59IG9yaWdpbiAtIFNvdXJjZSBhc3NvY2lhdGlvbiBpbmRlcGVuZGVudCBvZiB0cmF2ZXJzYWwgcG9zaXRpb24uXG4gKiBAcHJvcGVydHkge1JlYWRvbmx5PFJlY29yZDxzdHJpbmcsIFNvdXJjZUxvY2F0aW9uPj59IHJhbmdlcyAtIEV4YWN0IHNlbWFudGljLXRva2VuIHN1YnJhbmdlcyBieSByb2xlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgU2VtYW50aWNOb2RlUHJvdmVuYW5jZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGlkIC0gRGV0ZXJtaW5pc3RpYyBtb2R1bGUtbG9jYWwgbm9kZSBpZGVudGl0eS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYXRoIC0gSlNPTiBQb2ludGVyIGZyb20gdGhlIHNlbWFudGljIG1vZHVsZSByb290LlxuICogQHByb3BlcnR5IHtTZW1hbnRpY05vZGVbXCJraW5kXCJdIHwgXCJUeXBlUmVmZXJlbmNlXCJ9IGtpbmQgLSBTZW1hbnRpYyBub2RlIGtpbmQuXG4gKiBAcHJvcGVydHkge1NlbWFudGljT3JpZ2lufSBvcmlnaW4gLSBDbG9zZWQgcHJvdmVuYW5jZSB2YWx1ZS5cbiAqIEBwcm9wZXJ0eSB7UmVhZG9ubHk8UmVjb3JkPHN0cmluZywgU291cmNlTG9jYXRpb24+Pn0gcmFuZ2VzIC0gRXhhY3Qgc2VtYW50aWMtdG9rZW4gc3VicmFuZ2VzIGJ5IHJvbGUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3N5bWJvbElkXSAtIFJlc29sdmVkIGRlY2xhcmVkL3JlZmVyZW5jZWQgc3ltYm9sIGlkZW50aXR5LlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgU2VtYW50aWNTeW1ib2xSZWZlcmVuY2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBub2RlSWQgLSBSZWZlcnJpbmcgc2VtYW50aWMgbm9kZSBpZGVudGl0eS5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNTeW1ib2xSb2xlfSByb2xlIC0gUmVmZXJlbmNlIHJvbGUuXG4gKiBAcHJvcGVydHkge1NvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIEV4YWN0IHJlZmVyZW5jZSByYW5nZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFNlbWFudGljU3ltYm9sUHJvdmVuYW5jZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGlkIC0gRGV0ZXJtaW5pc3RpYyBtb2R1bGUtbG9jYWwgc3ltYm9sIGlkZW50aXR5LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWUgLSBTZW1hbnRpYyBzeW1ib2wgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNTeW1ib2xLaW5kfSBraW5kIC0gU3ltYm9sIGNhdGVnb3J5LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGRlY2xhcmF0aW9uTm9kZUlkIC0gRGVjbGFyaW5nIG5vZGUgaWRlbnRpdHkuXG4gKiBAcHJvcGVydHkge1NvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIEV4YWN0IGRlY2xhcmF0aW9uLW5hbWUgcmFuZ2UuXG4gKiBAcHJvcGVydHkge1NlbWFudGljU3ltYm9sUmVmZXJlbmNlW119IHJlZmVyZW5jZXMgLSBPcmRlcmVkIHJlc29sdmVkIHJlZmVyZW5jZXMuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBTZW1hbnRpY1Byb3ZlbmFuY2VcbiAqIEBwcm9wZXJ0eSB7XCJTZW1hbnRpZm9sZFByb3ZlbmFuY2VcIn0gc2NoZW1hIC0gU2NoZW1hIGRpc2NyaW1pbmF0b3IuXG4gKiBAcHJvcGVydHkgezF9IHZlcnNpb24gLSBTY2hlbWEgdmVyc2lvbi5cbiAqIEBwcm9wZXJ0eSB7XCJ1dGYxNlwifSBjb29yZGluYXRlU3lzdGVtIC0gT2Zmc2V0IGFuZCBjb2x1bW4gdW5pdC5cbiAqIEBwcm9wZXJ0eSB7UmVnaXN0ZXJlZFNvdXJjZVtdfSBzb3VyY2VzIC0gVmVyc2lvbmVkIHNvdXJjZSByZWdpc3RyeS5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNOb2RlUHJvdmVuYW5jZVtdfSBub2RlcyAtIERldGVybWluaXN0aWMgbm9kZSBpbmRleC5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNTeW1ib2xQcm92ZW5hbmNlW119IHN5bWJvbHMgLSBEZXRlcm1pbmlzdGljIHN5bWJvbCBpbmRleC5cbiAqL1xuXG4vKiogQHR5cGVkZWYge1wiZXhhY3RcIiB8IFwiYW5jaG9yXCIgfCBcInN5bnRoZXRpY1wifSBNYXBwaW5nS2luZCAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFNlbWFudGlmb2xkTWFwcGluZ1NwYW5cbiAqIEBwcm9wZXJ0eSB7U291cmNlTG9jYXRpb259IGdlbmVyYXRlZCAtIEdlbmVyYXRlZCBoYWxmLW9wZW4gcmFuZ2UuXG4gKiBAcHJvcGVydHkge01hcHBpbmdLaW5kfSBtYXBwaW5nS2luZCAtIE1hcHBpbmcgcHJlY2lzaW9uLlxuICogQHByb3BlcnR5IHtTZW1hbnRpY09yaWdpbn0gb3JpZ2luIC0gQ2xvc2VkIG9yaWdpbmFsIHByb3ZlbmFuY2UuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW25vZGVJZF0gLSBSZWxhdGVkIGNhbm9uaWNhbCBzZW1hbnRpYyBub2RlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtzeW1ib2xJZF0gLSBSZWxhdGVkIGNhbm9uaWNhbCBzZW1hbnRpYyBzeW1ib2wuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3JvbGVdIC0gU2VtYW50aWMgdG9rZW4gcm9sZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbmFtZV0gLSBVc2VmdWwgc3ltYm9sIG5hbWUgZm9yIFNvdXJjZSBNYXAgdjMuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBHZW5lcmF0ZWRTb3VyY2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBmaWxlbmFtZSAtIE91dHB1dCBmaWxlbmFtZS5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBPdXRwdXQgbGFuZ3VhZ2UuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY29udGVudCAtIEV4YWN0IGdlbmVyYXRlZCBMRiBzb3VyY2UuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBTZW1hbnRpZm9sZE1hcHBpbmdcbiAqIEBwcm9wZXJ0eSB7XCJTZW1hbnRpZm9sZE1hcHBpbmdcIn0gc2NoZW1hIC0gU2NoZW1hIGRpc2NyaW1pbmF0b3IuXG4gKiBAcHJvcGVydHkgezF9IHZlcnNpb24gLSBTY2hlbWEgdmVyc2lvbi5cbiAqIEBwcm9wZXJ0eSB7XCJ1dGYxNlwifSBjb29yZGluYXRlU3lzdGVtIC0gT2Zmc2V0IGFuZCBjb2x1bW4gdW5pdC5cbiAqIEBwcm9wZXJ0eSB7R2VuZXJhdGVkU291cmNlfSBnZW5lcmF0ZWQgLSBHZW5lcmF0ZWQgcHJvZ3JhbSBpZGVudGl0eSBhbmQgY29udGVudC5cbiAqIEBwcm9wZXJ0eSB7UmVnaXN0ZXJlZFNvdXJjZVtdfSBzb3VyY2VzIC0gT3JpZ2luYWwgc291cmNlIHJlZ2lzdHJ5LlxuICogQHByb3BlcnR5IHtTZW1hbnRpY05vZGVQcm92ZW5hbmNlW119IG5vZGVzIC0gQ2Fub25pY2FsIHNlbWFudGljIG5vZGUgaW5kZXguXG4gKiBAcHJvcGVydHkge1NlbWFudGljU3ltYm9sUHJvdmVuYW5jZVtdfSBzeW1ib2xzIC0gQ2Fub25pY2FsIHNlbWFudGljIHN5bWJvbCBpbmRleC5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWZvbGRNYXBwaW5nU3BhbltdfSBzcGFucyAtIE9yZGVyZWQgZ2VuZXJhdGVkIHJhbmdlcy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIEdlbmVyYXRlZEFydGlmYWN0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gY29kZSAtIEdlbmVyYXRlZCBvdXRwdXQgcHJvZ3JhbSwgaW5jbHVkaW5nIGFueSByZXF1ZXN0ZWQgZGlyZWN0aXZlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGZpbGVuYW1lIC0gR2VuZXJhdGVkIG91dHB1dCBmaWxlbmFtZS5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBPdXRwdXQgbGFuZ3VhZ2UuXG4gKiBAcHJvcGVydHkge1NlbWFudGlmb2xkTWFwcGluZ30gbWFwcGluZyAtIEF1dGhvcml0YXRpdmUgcmljaCBtYXBwaW5nLlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCJAanJpZGdld2VsbC9nZW4tbWFwcGluZ1wiKS5FbmNvZGVkU291cmNlTWFwfSBzb3VyY2VNYXAgLSBTb3VyY2UgTWFwIHYzIHByb2plY3Rpb24uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc291cmNlTWFwRmlsZW5hbWUgLSBEZWZhdWx0IGV4dGVybmFsIFNvdXJjZSBNYXAgZmlsZW5hbWUuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBUZXh0QXJ0aWZhY3RQcm92ZW5hbmNlXG4gKiBAcHJvcGVydHkge1widGV4dFwifSBraW5kIC0gUmljaCB0ZXh0IHByb3ZlbmFuY2UgZGlzY3JpbWluYXRvci5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWZvbGRNYXBwaW5nfSBtYXBwaW5nIC0gQXV0aG9yaXRhdGl2ZSByYW5nZSBtYXBwaW5nLlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCJAanJpZGdld2VsbC9nZW4tbWFwcGluZ1wiKS5FbmNvZGVkU291cmNlTWFwfSBzb3VyY2VNYXAgLSBJbnRlcm9wZXJhYmxlIHByb2plY3Rpb24uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3NvdXJjZU1hcEZpbGVuYW1lXSAtIExvZ2ljYWwgU291cmNlIE1hcCBzaWRlY2FyIHBhdGguXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBCeXRlQXJ0aWZhY3RQcm92ZW5hbmNlXG4gKiBAcHJvcGVydHkge1wiYnl0ZXNcIn0ga2luZCAtIEJ5dGUgcHJvdmVuYW5jZSBkaXNjcmltaW5hdG9yLlxuICogQHByb3BlcnR5IHtTZW1hbnRpZm9sZEJ5dGVNYXBwaW5nfSBtYXBwaW5nIC0gQXV0aG9yaXRhdGl2ZSBieXRlIHJhbmdlcy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIEFydGlmYWN0U3ludGhldGljUHJvdmVuYW5jZVxuICogQHByb3BlcnR5IHtcInN5bnRoZXRpY1wifSBraW5kIC0gU3ludGhldGljIGFydGlmYWN0IGRpc2NyaW1pbmF0b3IuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcmVhc29uIC0gRXhwbGljaXQgdGFyZ2V0LXNjYWZmb2xkaW5nIHJlYXNvbi5cbiAqIEBwcm9wZXJ0eSB7cmVhZG9ubHkgUmVsYXRlZE9yaWdpbltdfSByZWxhdGVkT3JpZ2lucyAtIFJlbGF0ZWQgc2VtYW50aWMgc291cmNlIHJhbmdlcy5cbiAqL1xuXG4vKiogQHR5cGVkZWYge1RleHRBcnRpZmFjdFByb3ZlbmFuY2UgfCBCeXRlQXJ0aWZhY3RQcm92ZW5hbmNlIHwgQXJ0aWZhY3RTeW50aGV0aWNQcm92ZW5hbmNlfSBBcnRpZmFjdFByb3ZlbmFuY2UgKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBHZW5lcmF0ZWRTZXRBcnRpZmFjdFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBhdGggLSBVbmlxdWUgc2FmZSByZWxhdGl2ZSBQT1NJWCBwYXRoLlxuICogQHByb3BlcnR5IHtcInRleHRcIiB8IFwiYmluYXJ5XCJ9IGNvbnRlbnRLaW5kIC0gQ29udGVudCByZXByZXNlbnRhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgVWludDhBcnJheX0gY29udGVudCAtIFRleHQgb3IgYSBkZXRhY2hlZCBjb3B5IG9mIHRoZSBleGFjdCBnZW5lcmF0ZWQgYnl0ZXMgb24gZXZlcnkgYmluYXJ5IHJlYWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbWVkaWFUeXBlIC0gQXJ0aWZhY3QgbWVkaWEgdHlwZS5cbiAqIEBwcm9wZXJ0eSB7R2VuZXJhdGVkQXJ0aWZhY3RSb2xlfSByb2xlIC0gQXJ0aWZhY3Qgcm9sZTsgZXhhY3RseSBvbmUgc2V0IGFydGlmYWN0IGlzIGVudHJ5LlxuICogQHByb3BlcnR5IHtcImdlbmVyYXRlZFwifSBvd25lcnNoaXAgLSBUYXNrLTAxNSBvd25lcnNoaXAgY29udHJhY3QuXG4gKiBAcHJvcGVydHkge0FydGlmYWN0UHJvdmVuYW5jZX0gcHJvdmVuYW5jZSAtIFRleHQsIGJ5dGUtcmFuZ2UsIG9yIHN5bnRoZXRpYyBwcm92ZW5hbmNlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgR2VuZXJhdGVkQXJ0aWZhY3RTZXRcbiAqIEBwcm9wZXJ0eSB7XCJHZW5lcmF0ZWRBcnRpZmFjdFNldFwifSBzY2hlbWEgLSBTY2hlbWEgZGlzY3JpbWluYXRvci5cbiAqIEBwcm9wZXJ0eSB7MX0gdmVyc2lvbiAtIFNjaGVtYSB2ZXJzaW9uLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHRhcmdldCAtIFN0YWJsZSBsYW5ndWFnZSBvciB0YXJnZXQgSUQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZW50cnkgLSBQYXRoIG9mIHRoZSBzb2xlIGRlY2xhcmVkIGVudHJ5IGFydGlmYWN0LlxuICogQHByb3BlcnR5IHtyZWFkb25seSBHZW5lcmF0ZWRTZXRBcnRpZmFjdFtdfSBhcnRpZmFjdHMgLSBEZXRlcm1pbmlzdGljIGFydGlmYWN0IG9yZGVyLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgRGlzY292ZXJlZFRvb2xjaGFpblxuICogQHByb3BlcnR5IHtzdHJpbmd9IGlkIC0gVG9vbGNoYWluIElELlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNvbW1hbmQgLSBEb2N1bWVudGVkIGNhbm9uaWNhbCBjb21tYW5kLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGV4ZWN1dGFibGUgLSBFeGFjdCBhYnNvbHV0ZSBleGVjdXRhYmxlIHBhdGguXG4gKiBAcHJvcGVydHkge1wib3ZlcnJpZGVcIiB8IFwiY2Fub25pY2FsXCJ9IHNvdXJjZSAtIFJlc29sdXRpb24gcm91dGUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdmVyc2lvbiAtIEZpcnN0IGNhcHR1cmVkIHZlcnNpb24gbGluZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2ZXJzaW9uT3V0cHV0IC0gQ29tcGxldGUgY2FwdHVyZWQgdmVyc2lvbiBvdXRwdXQuXG4gKiBAcHJvcGVydHkge3JlYWRvbmx5IHN0cmluZ1tdfSB2ZXJzaW9uQXJndW1lbnRzIC0gRXhhY3QgdmVyc2lvbiBhcmd1bWVudCBhcnJheS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIEFjY2VwdGFuY2VTdGFnZVJlc3VsdFxuICogQHByb3BlcnR5IHtBY2NlcHRhbmNlU3RhZ2V9IHN0YWdlIC0gQ29tcGxldGVkIHN0YWdlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGV4ZWN1dGFibGUgLSBFeGFjdCBleGVjdXRhYmxlIHVzZWQuXG4gKiBAcHJvcGVydHkge3JlYWRvbmx5IHN0cmluZ1tdfSBhcmd1bWVudHMgLSBFeGFjdCBhcmd1bWVudCBhcnJheSB1c2VkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHZlcnNpb24gLSBEaXNjb3ZlcmVkIHRvb2wgdmVyc2lvbi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzdGRvdXQgLSBDYXB0dXJlZCBzdGFuZGFyZCBvdXRwdXQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc3RkZXJyIC0gQ2FwdHVyZWQgc3RhbmRhcmQgZXJyb3IuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBBY2NlcHRhbmNlUmVzdWx0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gdGFyZ2V0IC0gVGFyZ2V0IGlkZW50aXR5LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGRpcmVjdG9yeSAtIFJlbW92ZWQgaXNvbGF0ZWQgcHJvamVjdCBkaXJlY3RvcnkgaWRlbnRpdHkuXG4gKiBAcHJvcGVydHkge3JlYWRvbmx5IEFjY2VwdGFuY2VTdGFnZVJlc3VsdFtdfSBzdGFnZXMgLSBPcmRlcmVkIGNvbXBsZXRlZCBzdGFnZXMuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBUeXBlUmVmZXJlbmNlXG4gKiBAcHJvcGVydHkge1wiVHlwZVJlZmVyZW5jZVwifSBraW5kIC0gTm9kZSBkaXNjcmltaW5hdG9yLlxuICogQHByb3BlcnR5IHtTZW1hbnRpY1R5cGVOYW1lfSBuYW1lIC0gTm9ybWFsaXplZCB0eXBlIG5hbWUuXG4gKiBAcHJvcGVydHkge1NlbWFudGljTm9kZVNvdXJjZVByb3ZlbmFuY2V9IFtzb3VyY2VQcm92ZW5hbmNlXSAtIE5vZGUtYXNzb2NpYXRlZCBwcm92ZW5hbmNlIHRoYXQgc3Vydml2ZXMgc2VtYW50aWMgdHJhbnNmb3Jtcy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFBhcmFtZXRlclxuICogQHByb3BlcnR5IHtcIlBhcmFtZXRlclwifSBraW5kIC0gTm9kZSBkaXNjcmltaW5hdG9yLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWUgLSBQYXJhbWV0ZXIgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7VHlwZVJlZmVyZW5jZX0gdHlwZSAtIFBhcmFtZXRlciB0eXBlLlxuICogQHByb3BlcnR5IHtTb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBTb3VyY2UgbG9jYXRpb24uXG4gKiBAcHJvcGVydHkge1NlbWFudGljTm9kZVNvdXJjZVByb3ZlbmFuY2V9IFtzb3VyY2VQcm92ZW5hbmNlXSAtIE5vZGUtYXNzb2NpYXRlZCBwcm92ZW5hbmNlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgSWRlbnRpZmllckV4cHJlc3Npb25cbiAqIEBwcm9wZXJ0eSB7XCJJZGVudGlmaWVyRXhwcmVzc2lvblwifSBraW5kIC0gTm9kZSBkaXNjcmltaW5hdG9yLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWUgLSBSZWZlcmVuY2VkIG5hbWUuXG4gKiBAcHJvcGVydHkge1NvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIFNvdXJjZSBsb2NhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNOb2RlU291cmNlUHJvdmVuYW5jZX0gW3NvdXJjZVByb3ZlbmFuY2VdIC0gTm9kZS1hc3NvY2lhdGVkIHByb3ZlbmFuY2UuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBJbnRlZ2VyTGl0ZXJhbFxuICogQHByb3BlcnR5IHtcIkludGVnZXJMaXRlcmFsXCJ9IGtpbmQgLSBOb2RlIGRpc2NyaW1pbmF0b3IuXG4gKiBAcHJvcGVydHkge251bWJlcn0gdmFsdWUgLSBKYXZhU2NyaXB0LXNhZmUgaW50ZWdlciB2YWx1ZS5cbiAqIEBwcm9wZXJ0eSB7U291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gU291cmNlIGxvY2F0aW9uLlxuICogQHByb3BlcnR5IHtTZW1hbnRpY05vZGVTb3VyY2VQcm92ZW5hbmNlfSBbc291cmNlUHJvdmVuYW5jZV0gLSBOb2RlLWFzc29jaWF0ZWQgcHJvdmVuYW5jZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIEJvb2xlYW5MaXRlcmFsXG4gKiBAcHJvcGVydHkge1wiQm9vbGVhbkxpdGVyYWxcIn0ga2luZCAtIE5vZGUgZGlzY3JpbWluYXRvci5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdmFsdWUgLSBCb29sZWFuIHZhbHVlLlxuICogQHByb3BlcnR5IHtTb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBTb3VyY2UgbG9jYXRpb24uXG4gKiBAcHJvcGVydHkge1NlbWFudGljTm9kZVNvdXJjZVByb3ZlbmFuY2V9IFtzb3VyY2VQcm92ZW5hbmNlXSAtIE5vZGUtYXNzb2NpYXRlZCBwcm92ZW5hbmNlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgU3RyaW5nTGl0ZXJhbFxuICogQHByb3BlcnR5IHtcIlN0cmluZ0xpdGVyYWxcIn0ga2luZCAtIE5vZGUgZGlzY3JpbWluYXRvci5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2YWx1ZSAtIFVuaWNvZGUgc3RyaW5nIHZhbHVlLlxuICogQHByb3BlcnR5IHtTb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBTb3VyY2UgbG9jYXRpb24uXG4gKiBAcHJvcGVydHkge1NlbWFudGljTm9kZVNvdXJjZVByb3ZlbmFuY2V9IFtzb3VyY2VQcm92ZW5hbmNlXSAtIE5vZGUtYXNzb2NpYXRlZCBwcm92ZW5hbmNlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgVW5hcnlFeHByZXNzaW9uXG4gKiBAcHJvcGVydHkge1wiVW5hcnlFeHByZXNzaW9uXCJ9IGtpbmQgLSBOb2RlIGRpc2NyaW1pbmF0b3IuXG4gKiBAcHJvcGVydHkge1NlbWFudGljVW5hcnlPcGVyYXRpb259IG9wZXJhdGlvbiAtIENsb3NlZCBzZW1hbnRpYyBvcGVyYXRpb24uXG4gKiBAcHJvcGVydHkge0V4cHJlc3Npb259IG9wZXJhbmQgLSBPcGVyYW5kIGV2YWx1YXRlZCBleGFjdGx5IG9uY2UuXG4gKiBAcHJvcGVydHkge1NlbWFudGljVHlwZU5hbWV9IHR5cGUgLSBFeHBsaWNpdCBvcGVyYXRpb24gcmVzdWx0IHR5cGUuXG4gKiBAcHJvcGVydHkge1NvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIFNvdXJjZSBsb2NhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNOb2RlU291cmNlUHJvdmVuYW5jZX0gW3NvdXJjZVByb3ZlbmFuY2VdIC0gTm9kZS1hc3NvY2lhdGVkIHByb3ZlbmFuY2UuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBCaW5hcnlFeHByZXNzaW9uXG4gKiBAcHJvcGVydHkge1wiQmluYXJ5RXhwcmVzc2lvblwifSBraW5kIC0gTm9kZSBkaXNjcmltaW5hdG9yLlxuICogQHByb3BlcnR5IHtTZW1hbnRpY0JpbmFyeU9wZXJhdGlvbn0gb3BlcmF0aW9uIC0gQ2xvc2VkIHNlbWFudGljIG9wZXJhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7RXhwcmVzc2lvbn0gbGVmdCAtIExlZnQgb3BlcmFuZC5cbiAqIEBwcm9wZXJ0eSB7RXhwcmVzc2lvbn0gcmlnaHQgLSBSaWdodCBvcGVyYW5kLlxuICogQHByb3BlcnR5IHtTZW1hbnRpY1R5cGVOYW1lfSB0eXBlIC0gRXhwbGljaXQgb3BlcmF0aW9uIHJlc3VsdCB0eXBlLlxuICogQHByb3BlcnR5IHtTb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBTb3VyY2UgbG9jYXRpb24uXG4gKiBAcHJvcGVydHkge1NlbWFudGljTm9kZVNvdXJjZVByb3ZlbmFuY2V9IFtzb3VyY2VQcm92ZW5hbmNlXSAtIE5vZGUtYXNzb2NpYXRlZCBwcm92ZW5hbmNlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgQ2FsbEV4cHJlc3Npb25cbiAqIEBwcm9wZXJ0eSB7XCJDYWxsRXhwcmVzc2lvblwifSBraW5kIC0gTm9kZSBkaXNjcmltaW5hdG9yLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNhbGxlZSAtIEZ1bmN0aW9uIG5hbWUuXG4gKiBAcHJvcGVydHkge0V4cHJlc3Npb25bXX0gYXJndW1lbnRzIC0gUG9zaXRpb25hbCBhcmd1bWVudHMuXG4gKiBAcHJvcGVydHkge1NvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIFNvdXJjZSBsb2NhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNOb2RlU291cmNlUHJvdmVuYW5jZX0gW3NvdXJjZVByb3ZlbmFuY2VdIC0gTm9kZS1hc3NvY2lhdGVkIHByb3ZlbmFuY2UuXG4gKi9cblxuLyoqIEB0eXBlZGVmIHtJZGVudGlmaWVyRXhwcmVzc2lvbiB8IEludGVnZXJMaXRlcmFsIHwgQm9vbGVhbkxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwgVW5hcnlFeHByZXNzaW9uIHwgQmluYXJ5RXhwcmVzc2lvbiB8IENhbGxFeHByZXNzaW9ufSBFeHByZXNzaW9uICovXG5cbi8qKlxuICogQHR5cGVkZWYgTG9jYWxEZWNsYXJhdGlvblxuICogQHByb3BlcnR5IHtcIkxvY2FsRGVjbGFyYXRpb25cIn0ga2luZCAtIE5vZGUgZGlzY3JpbWluYXRvci5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBuYW1lIC0gRGVjbGFyZWQgbG9jYWwgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7VHlwZVJlZmVyZW5jZX0gdHlwZSAtIEV4cGxpY2l0IGxvY2FsIHR5cGUuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IG11dGFibGUgLSBXaGV0aGVyIGxhdGVyIGFzc2lnbm1lbnQgaXMgYWxsb3dlZC5cbiAqIEBwcm9wZXJ0eSB7RXhwcmVzc2lvbn0gaW5pdGlhbGl6ZXIgLSBSZXF1aXJlZCBpbml0aWFsaXplciBleHByZXNzaW9uLlxuICogQHByb3BlcnR5IHtTb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBEZWNsYXJhdGlvbiBzb3VyY2UgbG9jYXRpb24uXG4gKiBAcHJvcGVydHkge1NlbWFudGljTm9kZVNvdXJjZVByb3ZlbmFuY2V9IFtzb3VyY2VQcm92ZW5hbmNlXSAtIE5vZGUtYXNzb2NpYXRlZCBwcm92ZW5hbmNlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgQXNzaWdubWVudFN0YXRlbWVudFxuICogQHByb3BlcnR5IHtcIkFzc2lnbm1lbnRTdGF0ZW1lbnRcIn0ga2luZCAtIE5vZGUgZGlzY3JpbWluYXRvci5cbiAqIEBwcm9wZXJ0eSB7SWRlbnRpZmllckV4cHJlc3Npb259IHRhcmdldCAtIFNpbXBsZSBsb2NhbCBhc3NpZ25tZW50IHRhcmdldC5cbiAqIEBwcm9wZXJ0eSB7RXhwcmVzc2lvbn0gZXhwcmVzc2lvbiAtIEFzc2lnbmVkIGV4cHJlc3Npb24uXG4gKiBAcHJvcGVydHkge1NvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIEFzc2lnbm1lbnQgc291cmNlIGxvY2F0aW9uLlxuICogQHByb3BlcnR5IHtTZW1hbnRpY05vZGVTb3VyY2VQcm92ZW5hbmNlfSBbc291cmNlUHJvdmVuYW5jZV0gLSBOb2RlLWFzc29jaWF0ZWQgcHJvdmVuYW5jZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFJldHVyblN0YXRlbWVudFxuICogQHByb3BlcnR5IHtcIlJldHVyblN0YXRlbWVudFwifSBraW5kIC0gTm9kZSBkaXNjcmltaW5hdG9yLlxuICogQHByb3BlcnR5IHtFeHByZXNzaW9ufSBleHByZXNzaW9uIC0gUmV0dXJuZWQgZXhwcmVzc2lvbi5cbiAqIEBwcm9wZXJ0eSB7U291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gU291cmNlIGxvY2F0aW9uLlxuICogQHByb3BlcnR5IHtTZW1hbnRpY05vZGVTb3VyY2VQcm92ZW5hbmNlfSBbc291cmNlUHJvdmVuYW5jZV0gLSBOb2RlLWFzc29jaWF0ZWQgcHJvdmVuYW5jZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIElmU3RhdGVtZW50XG4gKiBAcHJvcGVydHkge1wiSWZTdGF0ZW1lbnRcIn0ga2luZCAtIE5vZGUgZGlzY3JpbWluYXRvci5cbiAqIEBwcm9wZXJ0eSB7RXhwcmVzc2lvbn0gY29uZGl0aW9uIC0gQnJhbmNoIGNvbmRpdGlvbi5cbiAqIEBwcm9wZXJ0eSB7QmxvY2t9IGNvbnNlcXVlbnQgLSBUcnVlIGJyYW5jaC5cbiAqIEBwcm9wZXJ0eSB7QmxvY2t9IFthbHRlcm5hdGVdIC0gRmFsc2UgYnJhbmNoLCBhYnNlbnQgd2hlbiBleGVjdXRpb24gZmFsbHMgdGhyb3VnaC5cbiAqIEBwcm9wZXJ0eSB7U291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gU291cmNlIGxvY2F0aW9uLlxuICogQHByb3BlcnR5IHtTZW1hbnRpY05vZGVTb3VyY2VQcm92ZW5hbmNlfSBbc291cmNlUHJvdmVuYW5jZV0gLSBOb2RlLWFzc29jaWF0ZWQgcHJvdmVuYW5jZS5cbiAqL1xuXG4vKiogQHR5cGVkZWYge0xvY2FsRGVjbGFyYXRpb24gfCBBc3NpZ25tZW50U3RhdGVtZW50fSBMb2NhbFN0YXRlbWVudCAqL1xuLyoqIEB0eXBlZGVmIHtMb2NhbFN0YXRlbWVudCB8IElmU3RhdGVtZW50IHwgUmV0dXJuU3RhdGVtZW50IHwgUHJpbnRTdGF0ZW1lbnR9IFN0YXRlbWVudCAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIEJsb2NrXG4gKiBAcHJvcGVydHkge1wiQmxvY2tcIn0ga2luZCAtIE5vZGUgZGlzY3JpbWluYXRvci5cbiAqIEBwcm9wZXJ0eSB7U3RhdGVtZW50W119IHN0YXRlbWVudHMgLSBPcmRlcmVkIHN0YXRlbWVudHMgaW4gb25lIGxleGljYWwgc2NvcGUuXG4gKiBAcHJvcGVydHkge1NvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIFNvdXJjZSBsb2NhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNOb2RlU291cmNlUHJvdmVuYW5jZX0gW3NvdXJjZVByb3ZlbmFuY2VdIC0gTm9kZS1hc3NvY2lhdGVkIHByb3ZlbmFuY2UuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBGdW5jdGlvbkRlY2xhcmF0aW9uXG4gKiBAcHJvcGVydHkge1wiRnVuY3Rpb25EZWNsYXJhdGlvblwifSBraW5kIC0gTm9kZSBkaXNjcmltaW5hdG9yLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWUgLSBGdW5jdGlvbiBuYW1lLlxuICogQHByb3BlcnR5IHtQYXJhbWV0ZXJbXX0gcGFyYW1ldGVycyAtIEZ1bmN0aW9uIHBhcmFtZXRlcnMuXG4gKiBAcHJvcGVydHkge1R5cGVSZWZlcmVuY2V9IHJldHVyblR5cGUgLSBSZXR1cm4gdHlwZS5cbiAqIEBwcm9wZXJ0eSB7QmxvY2t9IGJvZHkgLSBGdW5jdGlvbiBib2R5LlxuICogQHByb3BlcnR5IHtTb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBTb3VyY2UgbG9jYXRpb24uXG4gKiBAcHJvcGVydHkge1NlbWFudGljTm9kZVNvdXJjZVByb3ZlbmFuY2V9IFtzb3VyY2VQcm92ZW5hbmNlXSAtIE5vZGUtYXNzb2NpYXRlZCBwcm92ZW5hbmNlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgUHJpbnRTdGF0ZW1lbnRcbiAqIEBwcm9wZXJ0eSB7XCJQcmludFN0YXRlbWVudFwifSBraW5kIC0gTm9kZSBkaXNjcmltaW5hdG9yLlxuICogQHByb3BlcnR5IHtFeHByZXNzaW9ufSBleHByZXNzaW9uIC0gUHJpbnRlZCBleHByZXNzaW9uLlxuICogQHByb3BlcnR5IHtTb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBTb3VyY2UgbG9jYXRpb24uXG4gKiBAcHJvcGVydHkge1NlbWFudGljTm9kZVNvdXJjZVByb3ZlbmFuY2V9IFtzb3VyY2VQcm92ZW5hbmNlXSAtIE5vZGUtYXNzb2NpYXRlZCBwcm92ZW5hbmNlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgRW50cnlQb2ludFxuICogQHByb3BlcnR5IHtcIkVudHJ5UG9pbnRcIn0ga2luZCAtIE5vZGUgZGlzY3JpbWluYXRvci5cbiAqIEBwcm9wZXJ0eSB7QmxvY2t9IGJvZHkgLSBFbnRyeS1wb2ludCBib2R5LlxuICogQHByb3BlcnR5IHtTb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBTb3VyY2UgbG9jYXRpb24uXG4gKiBAcHJvcGVydHkge1NlbWFudGljTm9kZVNvdXJjZVByb3ZlbmFuY2V9IFtzb3VyY2VQcm92ZW5hbmNlXSAtIE5vZGUtYXNzb2NpYXRlZCBwcm92ZW5hbmNlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgU2VtYW50aWNNb2R1bGVcbiAqIEBwcm9wZXJ0eSB7XCJNb2R1bGVcIn0ga2luZCAtIE5vZGUgZGlzY3JpbWluYXRvci5cbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb25EZWNsYXJhdGlvbltdfSBmdW5jdGlvbnMgLSBUb3AtbGV2ZWwgZnVuY3Rpb25zLlxuICogQHByb3BlcnR5IHtFbnRyeVBvaW50fSBlbnRyeVBvaW50IC0gRXhlY3V0YWJsZSBlbnRyeSBwb2ludC5cbiAqIEBwcm9wZXJ0eSB7U291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gU291cmNlIGxvY2F0aW9uLlxuICogQHByb3BlcnR5IHtTZW1hbnRpY05vZGVTb3VyY2VQcm92ZW5hbmNlfSBbc291cmNlUHJvdmVuYW5jZV0gLSBOb2RlLWFzc29jaWF0ZWQgcHJvdmVuYW5jZS5cbiAqIEBwcm9wZXJ0eSB7U2VtYW50aWNQcm92ZW5hbmNlfSBbcHJvdmVuYW5jZV0gLSBQYXJzZXItYXV0aG9yZWQgc291cmNlIGFuZCBpZGVudGl0eSBpbmRleDsgb3B0aW9uYWwgZm9yIGxlZ2FjeSBjYWxsZXItYXV0aG9yZWQgbW9kdWxlcy5cbiAqL1xuXG4vKiogQHR5cGVkZWYge1NlbWFudGljTW9kdWxlIHwgRnVuY3Rpb25EZWNsYXJhdGlvbiB8IFBhcmFtZXRlciB8IEJsb2NrIHwgU3RhdGVtZW50IHwgRW50cnlQb2ludCB8IEV4cHJlc3Npb24gfCBUeXBlUmVmZXJlbmNlfSBTZW1hbnRpY05vZGUgKi9cbi8qKiBAdHlwZWRlZiB7U2VtYW50aWNOb2RlfSBTZW1hbnRpY05vZGVXaXRob3V0TG9jYXRpb25zICovXG5cbmV4cG9ydCB7fVxuIl19
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Executes one exact file while owning its complete bounded lifecycle.
3
+ * @param {object} input - Process request.
4
+ * @param {readonly string[]} input.arguments - Exact argument array.
5
+ * @param {string} [input.cwd] - Working directory.
6
+ * @param {Readonly<Record<string, string>>} input.environment - Exact environment.
7
+ * @param {string} input.executable - Exact executable path.
8
+ * @param {number} input.maxBuffer - Maximum bytes captured per output stream.
9
+ * @param {number} input.timeoutMs - Deadline before termination begins.
10
+ * @returns {Promise<{stderr: string, stdout: string}>} Output after the owned process group closes.
11
+ */
12
+ export declare function executeFileWithDeadline(input: {
13
+ arguments: readonly string[];
14
+ cwd?: string;
15
+ environment: Readonly<Record<string, string>>;
16
+ executable: string;
17
+ maxBuffer: number;
18
+ timeoutMs: number;
19
+ }): Promise<{
20
+ stderr: string;
21
+ stdout: string;
22
+ }>;
23
+ /**
24
+ * Creates an executor whose spawn observation belongs only to that executor instance.
25
+ * @param {object} dependencies - Internal lifecycle dependencies.
26
+ * @param {(child: import("node:child_process").ChildProcess, listener: () => void) => void} dependencies.registerSpawnListener - Registers deadline initialization.
27
+ * @returns {typeof executeFileWithDeadline} Owned subprocess executor.
28
+ */
29
+ export declare function createExecuteFileWithDeadline({ registerSpawnListener }: {
30
+ registerSpawnListener: (child: import("node:child_process").ChildProcess, listener: () => void) => void;
31
+ }): typeof executeFileWithDeadline;
32
+ /**
33
+ * Reports whether this module's deadline timer initiated termination.
34
+ * @param {unknown} error - Subprocess failure.
35
+ * @returns {boolean} Whether the failure belongs to an owned deadline.
36
+ */
37
+ export declare function exceededOwnedDeadline(error: unknown): boolean;
38
+ //# sourceMappingURL=subprocess.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subprocess.d.ts","sourceRoot":"","sources":["../../src/subprocess.js"],"names":[],"mappings":"AASA;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAR1C;IAAiC,SAAS,EAAlC,SAAS,MAAM,EAAE,CACzB;IAAuB,GAAG,AAA1B,CACA,EADQ,MAAM,CACd;IAAgD,WAAW,EAAnD,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CACxC;IAAsB,UAAU,EAAxB,MAAM,CACd;IAAsB,SAAS,EAAvB,MAAM,CACd;IAAsB,SAAS,EAAvB,MAAM,CACd;CAE0C,GAFhC,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAC,CAAC,CAIrD;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,EAAC,qBAAqB,EAAC,EAHlE;IAAuG,qBAAqB,EAApH,CAAC,KAAK,EAAE,OAAO,oBAAoB,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,CACxF;CAEkE,GAFxD,OAAO,uBAAuB,CAI1C;AAgMD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAHhC,OAGgC,GAF9B,OAAO,CAInB"}
@@ -0,0 +1,233 @@
1
+ // @ts-check
2
+ import { spawn } from "node:child_process";
3
+ import { StringDecoder } from "node:string_decoder";
4
+ const forcedTerminationGraceMs = 250;
5
+ const retainedPipeGraceMs = 250;
6
+ const deadlineFailures = new WeakSet();
7
+ /**
8
+ * Executes one exact file while owning its complete bounded lifecycle.
9
+ * @param {object} input - Process request.
10
+ * @param {readonly string[]} input.arguments - Exact argument array.
11
+ * @param {string} [input.cwd] - Working directory.
12
+ * @param {Readonly<Record<string, string>>} input.environment - Exact environment.
13
+ * @param {string} input.executable - Exact executable path.
14
+ * @param {number} input.maxBuffer - Maximum bytes captured per output stream.
15
+ * @param {number} input.timeoutMs - Deadline before termination begins.
16
+ * @returns {Promise<{stderr: string, stdout: string}>} Output after the owned process group closes.
17
+ */
18
+ export function executeFileWithDeadline(input) {
19
+ return executeFileWithDeadlineUsing(input, registerChildSpawn);
20
+ }
21
+ /**
22
+ * Creates an executor whose spawn observation belongs only to that executor instance.
23
+ * @param {object} dependencies - Internal lifecycle dependencies.
24
+ * @param {(child: import("node:child_process").ChildProcess, listener: () => void) => void} dependencies.registerSpawnListener - Registers deadline initialization.
25
+ * @returns {typeof executeFileWithDeadline} Owned subprocess executor.
26
+ */
27
+ export function createExecuteFileWithDeadline({ registerSpawnListener }) {
28
+ return (input) => executeFileWithDeadlineUsing(input, registerSpawnListener);
29
+ }
30
+ /**
31
+ * Executes with exact instance-owned spawn observation.
32
+ * @param {Parameters<typeof executeFileWithDeadline>[0]} input - Process request.
33
+ * @param {(child: import("node:child_process").ChildProcess, listener: () => void) => void} registerSpawnListener - Registers deadline initialization.
34
+ * @returns {Promise<{stderr: string, stdout: string}>} Output after the owned process group closes.
35
+ */
36
+ function executeFileWithDeadlineUsing({ arguments: processArguments, cwd, environment, executable, maxBuffer, timeoutMs }, registerSpawnListener) {
37
+ if (process.platform == "win32") {
38
+ return Promise.reject(Object.assign(new Error("Owned process-tree termination is unavailable on this platform."), {
39
+ code: "ENOTSUP",
40
+ stderr: "",
41
+ stdout: ""
42
+ }));
43
+ }
44
+ return new Promise((resolve, reject) => {
45
+ /** @type {ReturnType<typeof setTimeout> | undefined} */
46
+ let deadlineTimer;
47
+ /** @type {ReturnType<typeof setTimeout> | undefined} */
48
+ let forceTimer;
49
+ /** @type {ReturnType<typeof setTimeout> | undefined} */
50
+ let pipeTimer;
51
+ /** @type {Error | undefined} */
52
+ let launchError;
53
+ let deadlineExceeded = false;
54
+ let outputExceeded = false;
55
+ let settled = false;
56
+ const stderr = outputCapture(maxBuffer, () => terminateForOutputLimit());
57
+ const stdout = outputCapture(maxBuffer, () => terminateForOutputLimit());
58
+ const child = spawn(executable, [...processArguments], {
59
+ cwd,
60
+ detached: true,
61
+ env: environment,
62
+ stdio: ["ignore", "pipe", "pipe"]
63
+ });
64
+ const processGroupId = child.pid;
65
+ child.stderr.on("data", stderr.receive);
66
+ child.stdout.on("data", stdout.receive);
67
+ child.once("error", (error) => {
68
+ launchError = error;
69
+ });
70
+ registerSpawnListener(child, () => {
71
+ if (processGroupId == undefined || !verifyOwnedProcessGroup(processGroupId)) {
72
+ launchError = Object.assign(new Error("Spawned subprocess did not establish its required process group."), { code: "ENOTSUP" });
73
+ child.kill("SIGKILL");
74
+ return;
75
+ }
76
+ deadlineTimer = setTimeout(() => {
77
+ if (settled)
78
+ return;
79
+ deadlineExceeded = true;
80
+ beginTermination(processGroupId);
81
+ }, timeoutMs);
82
+ });
83
+ child.once("close", (code, signal) => {
84
+ settled = true;
85
+ if (deadlineTimer != undefined)
86
+ clearTimeout(deadlineTimer);
87
+ if (forceTimer != undefined)
88
+ clearTimeout(forceTimer);
89
+ if (pipeTimer != undefined)
90
+ clearTimeout(pipeTimer);
91
+ const capturedStderr = stderr.finish();
92
+ const capturedStdout = stdout.finish();
93
+ if (launchError) {
94
+ reject(Object.assign(launchError, { stderr: capturedStderr, stdout: capturedStdout }));
95
+ }
96
+ else if (outputExceeded) {
97
+ reject(Object.assign(new Error(`Subprocess exceeded its ${maxBuffer}-byte output capture limit.`), {
98
+ code: "ERR_CHILD_PROCESS_STDIO_MAXBUFFER",
99
+ signal,
100
+ stderr: capturedStderr,
101
+ stdout: capturedStdout
102
+ }));
103
+ }
104
+ else if (deadlineExceeded) {
105
+ const timeoutError = Object.assign(new Error("Subprocess exceeded its owned deadline."), {
106
+ code,
107
+ signal,
108
+ stderr: capturedStderr,
109
+ stdout: capturedStdout
110
+ });
111
+ deadlineFailures.add(timeoutError);
112
+ reject(timeoutError);
113
+ }
114
+ else if (code != 0 || signal != null) {
115
+ reject(Object.assign(new Error("Subprocess failed after launch."), {
116
+ code,
117
+ signal,
118
+ stderr: capturedStderr,
119
+ stdout: capturedStdout
120
+ }));
121
+ }
122
+ else
123
+ resolve({ stderr: capturedStderr, stdout: capturedStdout });
124
+ });
125
+ /** Begins bounded termination after output capture crosses its limit. */
126
+ function terminateForOutputLimit() {
127
+ if (outputExceeded || settled)
128
+ return;
129
+ outputExceeded = true;
130
+ if (processGroupId != undefined)
131
+ beginTermination(processGroupId);
132
+ }
133
+ /**
134
+ * Signals the owned group now and escalates if its inherited pipes remain open.
135
+ * @param {number} ownedGroupId - Spawn-verified process-group identity.
136
+ */
137
+ function beginTermination(ownedGroupId) {
138
+ signalOwnedProcessGroup(ownedGroupId, "SIGTERM");
139
+ if (!settled && forceTimer == undefined) {
140
+ forceTimer = setTimeout(() => {
141
+ if (settled)
142
+ return;
143
+ signalOwnedProcessGroup(ownedGroupId, "SIGKILL");
144
+ pipeTimer = setTimeout(() => {
145
+ if (settled)
146
+ return;
147
+ child.stdout.destroy();
148
+ child.stderr.destroy();
149
+ }, retainedPipeGraceMs);
150
+ }, forcedTerminationGraceMs);
151
+ }
152
+ }
153
+ });
154
+ }
155
+ /**
156
+ * Registers production deadline initialization on the child's real spawn event.
157
+ * @param {import("node:child_process").ChildProcess} child - Exact spawned child.
158
+ * @param {() => void} listener - Deadline initialization.
159
+ */
160
+ function registerChildSpawn(child, listener) {
161
+ child.once("spawn", listener);
162
+ }
163
+ /**
164
+ * Creates one byte-bounded UTF-8 stream capture.
165
+ * @param {number} maximumBytes - Maximum captured bytes.
166
+ * @param {() => void} onExceeded - First-overflow callback.
167
+ * @returns {{finish: () => string, receive: (chunk: Buffer) => void}} Capture callbacks.
168
+ */
169
+ function outputCapture(maximumBytes, onExceeded) {
170
+ const decoder = new StringDecoder("utf8");
171
+ let byteLength = 0;
172
+ let content = "";
173
+ let exceeded = false;
174
+ return {
175
+ finish() {
176
+ return content + decoder.end();
177
+ },
178
+ receive(chunk) {
179
+ if (exceeded)
180
+ return;
181
+ const remaining = maximumBytes - byteLength;
182
+ if (chunk.length > remaining) {
183
+ if (remaining > 0)
184
+ content += decoder.write(chunk.subarray(0, remaining));
185
+ exceeded = true;
186
+ onExceeded();
187
+ return;
188
+ }
189
+ byteLength += chunk.length;
190
+ content += decoder.write(chunk);
191
+ }
192
+ };
193
+ }
194
+ /**
195
+ * Verifies that the spawned child is the live leader of its distinct POSIX group.
196
+ * @param {number} processGroupId - Spawn-returned child PID and required group ID.
197
+ * @returns {boolean} Whether the owned group exists.
198
+ */
199
+ function verifyOwnedProcessGroup(processGroupId) {
200
+ try {
201
+ process.kill(-processGroupId, 0);
202
+ return true;
203
+ }
204
+ catch (error) {
205
+ if (error instanceof Error && "code" in error && error.code == "ESRCH")
206
+ return false;
207
+ throw error;
208
+ }
209
+ }
210
+ /**
211
+ * Signals only the verified process group created for the exact spawned child.
212
+ * @param {number} processGroupId - Spawn-returned child PID and POSIX process-group ID.
213
+ * @param {"SIGKILL" | "SIGTERM"} signal - Lifecycle signal.
214
+ * @returns {void}
215
+ */
216
+ function signalOwnedProcessGroup(processGroupId, signal) {
217
+ try {
218
+ process.kill(-processGroupId, signal);
219
+ }
220
+ catch (error) {
221
+ if (!(error instanceof Error && "code" in error && error.code == "ESRCH"))
222
+ throw error;
223
+ }
224
+ }
225
+ /**
226
+ * Reports whether this module's deadline timer initiated termination.
227
+ * @param {unknown} error - Subprocess failure.
228
+ * @returns {boolean} Whether the failure belongs to an owned deadline.
229
+ */
230
+ export function exceededOwnedDeadline(error) {
231
+ return typeof error == "object" && error != null && deadlineFailures.has(error);
232
+ }
233
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VicHJvY2Vzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdWJwcm9jZXNzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sb0JBQW9CLENBQUE7QUFDeEMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHFCQUFxQixDQUFBO0FBRWpELE1BQU0sd0JBQXdCLEdBQUcsR0FBRyxDQUFBO0FBQ3BDLE1BQU0sbUJBQW1CLEdBQUcsR0FBRyxDQUFBO0FBQy9CLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQTtBQUV0Qzs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxVQUFVLHVCQUF1QixDQUFDLEtBQUs7SUFDM0MsT0FBTyw0QkFBNEIsQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLENBQUMsQ0FBQTtBQUNoRSxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsNkJBQTZCLENBQUMsRUFBQyxxQkFBcUIsRUFBQztJQUNuRSxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLEVBQUUscUJBQXFCLENBQUMsQ0FBQTtBQUM5RSxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLDRCQUE0QixDQUFDLEVBQUMsU0FBUyxFQUFFLGdCQUFnQixFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUMsRUFBRSxxQkFBcUI7SUFDNUksSUFBSSxPQUFPLENBQUMsUUFBUSxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ2hDLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLGlFQUFpRSxDQUFDLEVBQUU7WUFDaEgsSUFBSSxFQUFFLFNBQVM7WUFDZixNQUFNLEVBQUUsRUFBRTtZQUNWLE1BQU0sRUFBRSxFQUFFO1NBQ1gsQ0FBQyxD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QixDQUFDLGNBQWMsRUFBRSxNQUFNO0lBQ3JELElBQUksQ0FBQztRQUNILE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDdkMsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixJQUFJLENBQUMsQ0FBQyxLQUFLLFlBQVksS0FBSyxJQUFJLE1BQU0sSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUM7WUFBRSxNQUFNLEtBQUssQ0FBQTtJQUN4RixDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQUMsS0FBSztJQUN6QyxPQUFPLE9BQU8sS0FBSyxJQUFJLFFBQVEsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUNqRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7c3Bhd259IGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIlxuaW1wb3J0IHtTdHJpbmdEZWNvZGVyfSBmcm9tIFwibm9kZTpzdHJpbmdfZGVjb2RlclwiXG5cbmNvbnN0IGZvcmNlZFRlcm1pbmF0aW9uR3JhY2VNcyA9IDI1MFxuY29uc3QgcmV0YWluZWRQaXBlR3JhY2VNcyA9IDI1MFxuY29uc3QgZGVhZGxpbmVGYWlsdXJlcyA9IG5ldyBXZWFrU2V0KClcblxuLyoqXG4gKiBFeGVjdXRlcyBvbmUgZXhhY3QgZmlsZSB3aGlsZSBvd25pbmcgaXRzIGNvbXBsZXRlIGJvdW5kZWQgbGlmZWN5Y2xlLlxuICogQHBhcmFtIHtvYmplY3R9IGlucHV0IC0gUHJvY2VzcyByZXF1ZXN0LlxuICogQHBhcmFtIHtyZWFkb25seSBzdHJpbmdbXX0gaW5wdXQuYXJndW1lbnRzIC0gRXhhY3QgYXJndW1lbnQgYXJyYXkuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2lucHV0LmN3ZF0gLSBXb3JraW5nIGRpcmVjdG9yeS5cbiAqIEBwYXJhbSB7UmVhZG9ubHk8UmVjb3JkPHN0cmluZywgc3RyaW5nPj59IGlucHV0LmVudmlyb25tZW50IC0gRXhhY3QgZW52aXJvbm1lbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQuZXhlY3V0YWJsZSAtIEV4YWN0IGV4ZWN1dGFibGUgcGF0aC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBpbnB1dC5tYXhCdWZmZXIgLSBNYXhpbXVtIGJ5dGVzIGNhcHR1cmVkIHBlciBvdXRwdXQgc3RyZWFtLlxuICogQHBhcmFtIHtudW1iZXJ9IGlucHV0LnRpbWVvdXRNcyAtIERlYWRsaW5lIGJlZm9yZSB0ZXJtaW5hdGlvbiBiZWdpbnMuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx7c3RkZXJyOiBzdHJpbmcsIHN0ZG91dDogc3RyaW5nfT59IE91dHB1dCBhZnRlciB0aGUgb3duZWQgcHJvY2VzcyBncm91cCBjbG9zZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleGVjdXRlRmlsZVdpdGhEZWFkbGluZShpbnB1dCkge1xuICByZXR1cm4gZXhlY3V0ZUZpbGVXaXRoRGVhZGxpbmVVc2luZyhpbnB1dCwgcmVnaXN0ZXJDaGlsZFNwYXduKVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYW4gZXhlY3V0b3Igd2hvc2Ugc3Bhd24gb2JzZXJ2YXRpb24gYmVsb25ncyBvbmx5IHRvIHRoYXQgZXhlY3V0b3IgaW5zdGFuY2UuXG4gKiBAcGFyYW0ge29iamVjdH0gZGVwZW5kZW5jaWVzIC0gSW50ZXJuYWwgbGlmZWN5Y2xlIGRlcGVuZGVuY2llcy5cbiAqIEBwYXJhbSB7KGNoaWxkOiBpbXBvcnQoXCJub2RlOmNoaWxkX3Byb2Nlc3NcIikuQ2hpbGRQcm9jZXNzLCBsaXN0ZW5lcjogKCkgPT4gdm9pZCkgPT4gdm9pZH0gZGVwZW5kZW5jaWVzLnJlZ2lzdGVyU3Bhd25MaXN0ZW5lciAtIFJlZ2lzdGVycyBkZWFkbGluZSBpbml0aWFsaXphdGlvbi5cbiAqIEByZXR1cm5zIHt0eXBlb2YgZXhlY3V0ZUZpbGVXaXRoRGVhZGxpbmV9IE93bmVkIHN1YnByb2Nlc3MgZXhlY3V0b3IuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFeGVjdXRlRmlsZVdpdGhEZWFkbGluZSh7cmVnaXN0ZXJTcGF3bkxpc3RlbmVyfSkge1xuICByZXR1cm4gKGlucHV0KSA9PiBleGVjdXRlRmlsZVdpdGhEZWFkbGluZVVzaW5nKGlucHV0LCByZWdpc3RlclNwYXduTGlzdGVuZXIpXG59XG5cbi8qKlxuICogRXhlY3V0ZXMgd2l0aCBleGFjdCBpbnN0YW5jZS1vd25lZCBzcGF3biBvYnNlcnZhdGlvbi5cbiAqIEBwYXJhbSB7UGFyYW1ldGVyczx0eXBlb2YgZXhlY3V0ZUZpbGVXaXRoRGVhZGxpbmU+WzBdfSBpbnB1dCAtIFByb2Nlc3MgcmVxdWVzdC5cbiAqIEBwYXJhbSB7KGNoaWxkOiBpbXBvcnQoXCJub2RlOmNoaWxkX3Byb2Nlc3NcIikuQ2hpbGRQcm9jZXNzLCBsaXN0ZW5lcjogKCkgPT4gdm9pZCkgPT4gdm9pZH0gcmVnaXN0ZXJTcGF3bkxpc3RlbmVyIC0gUmVnaXN0ZXJzIGRlYWRsaW5lIGluaXRpYWxpemF0aW9uLlxuICogQHJldHVybnMge1Byb21pc2U8e3N0ZGVycjogc3RyaW5nLCBzdGRvdXQ6IHN0cmluZ30+fSBPdXRwdXQgYWZ0ZXIgdGhlIG93bmVkIHByb2Nlc3MgZ3JvdXAgY2xvc2VzLlxuICovXG5mdW5jdGlvbiBleGVjdXRlRmlsZVdpdGhEZWFkbGluZVVzaW5nKHthcmd1bWVudHM6IHByb2Nlc3NBcmd1bWVudHMsIGN3ZCwgZW52aXJvbm1lbnQsIGV4ZWN1dGFibGUsIG1heEJ1ZmZlciwgdGltZW91dE1zfSwgcmVnaXN0ZXJTcGF3bkxpc3RlbmVyKSB7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09IFwid2luMzJcIikge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChPYmplY3QuYXNzaWduKG5ldyBFcnJvcihcIk93bmVkIHByb2Nlc3MtdHJlZSB0ZXJtaW5hdGlvbiBpcyB1bmF2YWlsYWJsZSBvbiB0aGlzIHBsYXRmb3JtLlwiKSwge1xuICAgICAgY29kZTogXCJFTk9UU1VQXCIsXG4gICAgICBzdGRlcnI6IFwiXCIsXG4gICAgICBzdGRvdXQ6IFwiXCJcbiAgICB9KSlcbiAgfVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgLyoqIEB0eXBlIHtSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IHVuZGVmaW5lZH0gKi9cbiAgICBsZXQgZGVhZGxpbmVUaW1lclxuICAgIC8qKiBAdHlwZSB7UmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCB1bmRlZmluZWR9ICovXG4gICAgbGV0IGZvcmNlVGltZXJcbiAgICAvKiogQHR5cGUge1JldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgdW5kZWZpbmVkfSAqL1xuICAgIGxldCBwaXBlVGltZXJcbiAgICAvKiogQHR5cGUge0Vycm9yIHwgdW5kZWZpbmVkfSAqL1xuICAgIGxldCBsYXVuY2hFcnJvclxuICAgIGxldCBkZWFkbGluZUV4Y2VlZGVkID0gZmFsc2VcbiAgICBsZXQgb3V0cHV0RXhjZWVkZWQgPSBmYWxzZVxuICAgIGxldCBzZXR0bGVkID0gZmFsc2VcbiAgICBjb25zdCBzdGRlcnIgPSBvdXRwdXRDYXB0dXJlKG1heEJ1ZmZlciwgKCkgPT4gdGVybWluYXRlRm9yT3V0cHV0TGltaXQoKSlcbiAgICBjb25zdCBzdGRvdXQgPSBvdXRwdXRDYXB0dXJlKG1heEJ1ZmZlciwgKCkgPT4gdGVybWluYXRlRm9yT3V0cHV0TGltaXQoKSlcbiAgICBjb25zdCBjaGlsZCA9IHNwYXduKGV4ZWN1dGFibGUsIFsuLi5wcm9jZXNzQXJndW1lbnRzXSwge1xuICAgICAgY3dkLFxuICAgICAgZGV0YWNoZWQ6IHRydWUsXG4gICAgICBlbnY6IGVudmlyb25tZW50LFxuICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcInBpcGVcIiwgXCJwaXBlXCJdXG4gICAgfSlcbiAgICBjb25zdCBwcm9jZXNzR3JvdXBJZCA9IGNoaWxkLnBpZFxuXG4gICAgY2hpbGQuc3RkZXJyLm9uKFwiZGF0YVwiLCBzdGRlcnIucmVjZWl2ZSlcbiAgICBjaGlsZC5zdGRvdXQub24oXCJkYXRhXCIsIHN0ZG91dC5yZWNlaXZlKVxuICAgIGNoaWxkLm9uY2UoXCJlcnJvclwiLCAoZXJyb3IpID0+IHtcbiAgICAgIGxhdW5jaEVycm9yID0gZXJyb3JcbiAgICB9KVxuICAgIHJlZ2lzdGVyU3Bhd25MaXN0ZW5lcihjaGlsZCwgKCkgPT4ge1xuICAgICAgaWYgKHByb2Nlc3NHcm91cElkID09IHVuZGVmaW5lZCB8fCAhdmVyaWZ5T3duZWRQcm9jZXNzR3JvdXAocHJvY2Vzc0dyb3VwSWQpKSB7XG4gICAgICAgIGxhdW5jaEVycm9yID0gT2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoXCJTcGF3bmVkIHN1YnByb2Nlc3MgZGlkIG5vdCBlc3RhYmxpc2ggaXRzIHJlcXVpcmVkIHByb2Nlc3MgZ3JvdXAuXCIpLCB7Y29kZTogXCJFTk9UU1VQXCJ9KVxuICAgICAgICBjaGlsZC5raWxsKFwiU0lHS0lMTFwiKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZGVhZGxpbmVUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoc2V0dGxlZCkgcmV0dXJuXG4gICAgICAgIGRlYWRsaW5lRXhjZWVkZWQgPSB0cnVlXG4gICAgICAgIGJlZ2luVGVybWluYXRpb24ocHJvY2Vzc0dyb3VwSWQpXG4gICAgICB9LCB0aW1lb3V0TXMpXG4gICAgfSlcbiAgICBjaGlsZC5vbmNlKFwiY2xvc2VcIiwgKGNvZGUsIHNpZ25hbCkgPT4ge1xuICAgICAgc2V0dGxlZCA9IHRydWVcbiAgICAgIGlmIChkZWFkbGluZVRpbWVyICE9IHVuZGVmaW5lZCkgY2xlYXJUaW1lb3V0KGRlYWRsaW5lVGltZXIpXG4gICAgICBpZiAoZm9yY2VUaW1lciAhPSB1bmRlZmluZWQpIGNsZWFyVGltZW91dChmb3JjZVRpbWVyKVxuICAgICAgaWYgKHBpcGVUaW1lciAhPSB1bmRlZmluZWQpIGNsZWFyVGltZW91dChwaXBlVGltZXIpXG4gICAgICBjb25zdCBjYXB0dXJlZFN0ZGVyciA9IHN0ZGVyci5maW5pc2goKVxuICAgICAgY29uc3QgY2FwdHVyZWRTdGRvdXQgPSBzdGRvdXQuZmluaXNoKClcblxuICAgICAgaWYgKGxhdW5jaEVycm9yKSB7XG4gICAgICAgIHJlamVjdChPYmplY3QuYXNzaWduKGxhdW5jaEVycm9yLCB7c3RkZXJyOiBjYXB0dXJlZFN0ZGVyciwgc3Rkb3V0OiBjYXB0dXJlZFN0ZG91dH0pKVxuICAgICAgfSBlbHNlIGlmIChvdXRwdXRFeGNlZWRlZCkge1xuICAgICAgICByZWplY3QoT2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoYFN1YnByb2Nlc3MgZXhjZWVkZWQgaXRzICR7bWF4QnVmZmVyfS1ieXRlIG91dHB1dCBjYXB0dXJlIGxpbWl0LmApLCB7XG4gICAgICAgICAgY29kZTogXCJFUlJfQ0hJTERfUFJPQ0VTU19TVERJT19NQVhCVUZGRVJcIixcbiAgICAgICAgICBzaWduYWwsXG4gICAgICAgICAgc3RkZXJyOiBjYXB0dXJlZFN0ZGVycixcbiAgICAgICAgICBzdGRvdXQ6IGNhcHR1cmVkU3Rkb3V0XG4gICAgICAgIH0pKVxuICAgICAgfSBlbHNlIGlmIChkZWFkbGluZUV4Y2VlZGVkKSB7XG4gICAgICAgIGNvbnN0IHRpbWVvdXRFcnJvciA9IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKFwiU3VicHJvY2VzcyBleGNlZWRlZCBpdHMgb3duZWQgZGVhZGxpbmUuXCIpLCB7XG4gICAgICAgICAgY29kZSxcbiAgICAgICAgICBzaWduYWwsXG4gICAgICAgICAgc3RkZXJyOiBjYXB0dXJlZFN0ZGVycixcbiAgICAgICAgICBzdGRvdXQ6IGNhcHR1cmVkU3Rkb3V0XG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVhZGxpbmVGYWlsdXJlcy5hZGQodGltZW91dEVycm9yKVxuICAgICAgICByZWplY3QodGltZW91dEVycm9yKVxuICAgICAgfSBlbHNlIGlmIChjb2RlICE9IDAgfHwgc2lnbmFsICE9IG51bGwpIHtcbiAgICAgICAgcmVqZWN0KE9iamVjdC5hc3NpZ24obmV3IEVycm9yKFwiU3VicHJvY2VzcyBmYWlsZWQgYWZ0ZXIgbGF1bmNoLlwiKSwge1xuICAgICAgICAgIGNvZGUsXG4gICAgICAgICAgc2lnbmFsLFxuICAgICAgICAgIHN0ZGVycjogY2FwdHVyZWRTdGRlcnIsXG4gICAgICAgICAgc3Rkb3V0OiBjYXB0dXJlZFN0ZG91dFxuICAgICAgICB9KSlcbiAgICAgIH0gZWxzZSByZXNvbHZlKHtzdGRlcnI6IGNhcHR1cmVkU3RkZXJyLCBzdGRvdXQ6IGNhcHR1cmVkU3Rkb3V0fSlcbiAgICB9KVxuXG4gICAgLyoqIEJlZ2lucyBib3VuZGVkIHRlcm1pbmF0aW9uIGFmdGVyIG91dHB1dCBjYXB0dXJlIGNyb3NzZXMgaXRzIGxpbWl0LiAqL1xuICAgIGZ1bmN0aW9uIHRlcm1pbmF0ZUZvck91dHB1dExpbWl0KCkge1xuICAgICAgaWYgKG91dHB1dEV4Y2VlZGVkIHx8IHNldHRsZWQpIHJldHVyblxuICAgICAgb3V0cHV0RXhjZWVkZWQgPSB0cnVlXG4gICAgICBpZiAocHJvY2Vzc0dyb3VwSWQgIT0gdW5kZWZpbmVkKSBiZWdpblRlcm1pbmF0aW9uKHByb2Nlc3NHcm91cElkKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNpZ25hbHMgdGhlIG93bmVkIGdyb3VwIG5vdyBhbmQgZXNjYWxhdGVzIGlmIGl0cyBpbmhlcml0ZWQgcGlwZXMgcmVtYWluIG9wZW4uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG93bmVkR3JvdXBJZCAtIFNwYXduLXZlcmlmaWVkIHByb2Nlc3MtZ3JvdXAgaWRlbnRpdHkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmVnaW5UZXJtaW5hdGlvbihvd25lZEdyb3VwSWQpIHtcbiAgICAgIHNpZ25hbE93bmVkUHJvY2Vzc0dyb3VwKG93bmVkR3JvdXBJZCwgXCJTSUdURVJNXCIpXG4gICAgICBpZiAoIXNldHRsZWQgJiYgZm9yY2VUaW1lciA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZm9yY2VUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGlmIChzZXR0bGVkKSByZXR1cm5cbiAgICAgICAgICBzaWduYWxPd25lZFByb2Nlc3NHcm91cChvd25lZEdyb3VwSWQsIFwiU0lHS0lMTFwiKVxuICAgICAgICAgIHBpcGVUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHNldHRsZWQpIHJldHVyblxuICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LmRlc3Ryb3koKVxuICAgICAgICAgICAgY2hpbGQuc3RkZXJyLmRlc3Ryb3koKVxuICAgICAgICAgIH0sIHJldGFpbmVkUGlwZUdyYWNlTXMpXG4gICAgICAgIH0sIGZvcmNlZFRlcm1pbmF0aW9uR3JhY2VNcylcbiAgICAgIH1cbiAgICB9XG4gIH0pXG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIHByb2R1Y3Rpb24gZGVhZGxpbmUgaW5pdGlhbGl6YXRpb24gb24gdGhlIGNoaWxkJ3MgcmVhbCBzcGF3biBldmVudC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwibm9kZTpjaGlsZF9wcm9jZXNzXCIpLkNoaWxkUHJvY2Vzc30gY2hpbGQgLSBFeGFjdCBzcGF3bmVkIGNoaWxkLlxuICogQHBhcmFtIHsoKSA9PiB2b2lkfSBsaXN0ZW5lciAtIERlYWRsaW5lIGluaXRpYWxpemF0aW9uLlxuICovXG5mdW5jdGlvbiByZWdpc3RlckNoaWxkU3Bhd24oY2hpbGQsIGxpc3RlbmVyKSB7XG4gIGNoaWxkLm9uY2UoXCJzcGF3blwiLCBsaXN0ZW5lcilcbn1cblxuLyoqXG4gKiBDcmVhdGVzIG9uZSBieXRlLWJvdW5kZWQgVVRGLTggc3RyZWFtIGNhcHR1cmUuXG4gKiBAcGFyYW0ge251bWJlcn0gbWF4aW11bUJ5dGVzIC0gTWF4aW11bSBjYXB0dXJlZCBieXRlcy5cbiAqIEBwYXJhbSB7KCkgPT4gdm9pZH0gb25FeGNlZWRlZCAtIEZpcnN0LW92ZXJmbG93IGNhbGxiYWNrLlxuICogQHJldHVybnMge3tmaW5pc2g6ICgpID0+IHN0cmluZywgcmVjZWl2ZTogKGNodW5rOiBCdWZmZXIpID0+IHZvaWR9fSBDYXB0dXJlIGNhbGxiYWNrcy5cbiAqL1xuZnVuY3Rpb24gb3V0cHV0Q2FwdHVyZShtYXhpbXVtQnl0ZXMsIG9uRXhjZWVkZWQpIHtcbiAgY29uc3QgZGVjb2RlciA9IG5ldyBTdHJpbmdEZWNvZGVyKFwidXRmOFwiKVxuICBsZXQgYnl0ZUxlbmd0aCA9IDBcbiAgbGV0IGNvbnRlbnQgPSBcIlwiXG4gIGxldCBleGNlZWRlZCA9IGZhbHNlXG5cbiAgcmV0dXJuIHtcbiAgICBmaW5pc2goKSB7XG4gICAgICByZXR1cm4gY29udGVudCArIGRlY29kZXIuZW5kKClcbiAgICB9LFxuICAgIHJlY2VpdmUoY2h1bmspIHtcbiAgICAgIGlmIChleGNlZWRlZCkgcmV0dXJuXG4gICAgICBjb25zdCByZW1haW5pbmcgPSBtYXhpbXVtQnl0ZXMgLSBieXRlTGVuZ3RoXG5cbiAgICAgIGlmIChjaHVuay5sZW5ndGggPiByZW1haW5pbmcpIHtcbiAgICAgICAgaWYgKHJlbWFpbmluZyA+IDApIGNvbnRlbnQgKz0gZGVjb2Rlci53cml0ZShjaHVuay5zdWJhcnJheSgwLCByZW1haW5pbmcpKVxuICAgICAgICBleGNlZWRlZCA9IHRydWVcbiAgICAgICAgb25FeGNlZWRlZCgpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgYnl0ZUxlbmd0aCArPSBjaHVuay5sZW5ndGhcbiAgICAgIGNvbnRlbnQgKz0gZGVjb2Rlci53cml0ZShjaHVuaylcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBWZXJpZmllcyB0aGF0IHRoZSBzcGF3bmVkIGNoaWxkIGlzIHRoZSBsaXZlIGxlYWRlciBvZiBpdHMgZGlzdGluY3QgUE9TSVggZ3JvdXAuXG4gKiBAcGFyYW0ge251bWJlcn0gcHJvY2Vzc0dyb3VwSWQgLSBTcGF3bi1yZXR1cm5lZCBjaGlsZCBQSUQgYW5kIHJlcXVpcmVkIGdyb3VwIElELlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIG93bmVkIGdyb3VwIGV4aXN0cy5cbiAqL1xuZnVuY3Rpb24gdmVyaWZ5T3duZWRQcm9jZXNzR3JvdXAocHJvY2Vzc0dyb3VwSWQpIHtcbiAgdHJ5IHtcbiAgICBwcm9jZXNzLmtpbGwoLXByb2Nlc3NHcm91cElkLCAwKVxuICAgIHJldHVybiB0cnVlXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgXCJjb2RlXCIgaW4gZXJyb3IgJiYgZXJyb3IuY29kZSA9PSBcIkVTUkNIXCIpIHJldHVybiBmYWxzZVxuICAgIHRocm93IGVycm9yXG4gIH1cbn1cblxuLyoqXG4gKiBTaWduYWxzIG9ubHkgdGhlIHZlcmlmaWVkIHByb2Nlc3MgZ3JvdXAgY3JlYXRlZCBmb3IgdGhlIGV4YWN0IHNwYXduZWQgY2hpbGQuXG4gKiBAcGFyYW0ge251bWJlcn0gcHJvY2Vzc0dyb3VwSWQgLSBTcGF3bi1yZXR1cm5lZCBjaGlsZCBQSUQgYW5kIFBPU0lYIHByb2Nlc3MtZ3JvdXAgSUQuXG4gKiBAcGFyYW0ge1wiU0lHS0lMTFwiIHwgXCJTSUdURVJNXCJ9IHNpZ25hbCAtIExpZmVjeWNsZSBzaWduYWwuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gc2lnbmFsT3duZWRQcm9jZXNzR3JvdXAocHJvY2Vzc0dyb3VwSWQsIHNpZ25hbCkge1xuICB0cnkge1xuICAgIHByb2Nlc3Mua2lsbCgtcHJvY2Vzc0dyb3VwSWQsIHNpZ25hbClcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmIFwiY29kZVwiIGluIGVycm9yICYmIGVycm9yLmNvZGUgPT0gXCJFU1JDSFwiKSkgdGhyb3cgZXJyb3JcbiAgfVxufVxuXG4vKipcbiAqIFJlcG9ydHMgd2hldGhlciB0aGlzIG1vZHVsZSdzIGRlYWRsaW5lIHRpbWVyIGluaXRpYXRlZCB0ZXJtaW5hdGlvbi5cbiAqIEBwYXJhbSB7dW5rbm93bn0gZXJyb3IgLSBTdWJwcm9jZXNzIGZhaWx1cmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgZmFpbHVyZSBiZWxvbmdzIHRvIGFuIG93bmVkIGRlYWRsaW5lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhjZWVkZWRPd25lZERlYWRsaW5lKGVycm9yKSB7XG4gIHJldHVybiB0eXBlb2YgZXJyb3IgPT0gXCJvYmplY3RcIiAmJiBlcnJvciAhPSBudWxsICYmIGRlYWRsaW5lRmFpbHVyZXMuaGFzKGVycm9yKVxufVxuIl19
@@ -0,0 +1,8 @@
1
+ export declare const maximumTimeoutMs = 2147483647;
2
+ /**
3
+ * Checks whether a public subprocess timeout fits one exact Node timer.
4
+ * @param {unknown} value - Candidate timeout.
5
+ * @returns {value is number} Whether the timeout is a supported positive integer.
6
+ */
7
+ export declare function isSupportedTimeoutMs(value: unknown): value is number;
8
+ //# sourceMappingURL=timeout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeout.d.ts","sourceRoot":"","sources":["../../src/timeout.js"],"names":[],"mappings":"AAEA,eAAO,MAAM,gBAAgB,aAAgB,CAAA;AAE7C;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAH/B,OAG+B,GAF7B,KAAK,IAAI,MAAM,CAI3B"}
@@ -0,0 +1,11 @@
1
+ // @ts-check
2
+ export const maximumTimeoutMs = 2_147_483_647;
3
+ /**
4
+ * Checks whether a public subprocess timeout fits one exact Node timer.
5
+ * @param {unknown} value - Candidate timeout.
6
+ * @returns {value is number} Whether the timeout is a supported positive integer.
7
+ */
8
+ export function isSupportedTimeoutMs(value) {
9
+ return typeof value == "number" && Number.isSafeInteger(value) && value > 0 && value <= maximumTimeoutMs;
10
+ }
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZW91dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90aW1lb3V0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxhQUFhLENBQUE7QUFFN0M7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxLQUFLO0lBQ3hDLE9BQU8sT0FBTyxLQUFLLElBQUksUUFBUSxJQUFJLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxLQUFLLElBQUksZ0JBQWdCLENBQUE7QUFDMUcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5leHBvcnQgY29uc3QgbWF4aW11bVRpbWVvdXRNcyA9IDJfMTQ3XzQ4M182NDdcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhIHB1YmxpYyBzdWJwcm9jZXNzIHRpbWVvdXQgZml0cyBvbmUgZXhhY3QgTm9kZSB0aW1lci5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBDYW5kaWRhdGUgdGltZW91dC5cbiAqIEByZXR1cm5zIHt2YWx1ZSBpcyBudW1iZXJ9IFdoZXRoZXIgdGhlIHRpbWVvdXQgaXMgYSBzdXBwb3J0ZWQgcG9zaXRpdmUgaW50ZWdlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU3VwcG9ydGVkVGltZW91dE1zKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gXCJudW1iZXJcIiAmJiBOdW1iZXIuaXNTYWZlSW50ZWdlcih2YWx1ZSkgJiYgdmFsdWUgPiAwICYmIHZhbHVlIDw9IG1heGltdW1UaW1lb3V0TXNcbn1cbiJdfQ==