@corellium/corellium-cli 1.2.1 → 1.2.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (934) hide show
  1. package/.gitlab-ci.yml +17 -3
  2. package/README.md +7 -0
  3. package/coverage/cobertura-coverage.xml +1 -1
  4. package/coverage/lcov-report/index.html +1 -1
  5. package/node_modules/@babel/cli/LICENSE +22 -0
  6. package/node_modules/@babel/cli/README.md +19 -0
  7. package/node_modules/@babel/cli/bin/babel-external-helpers.js +3 -0
  8. package/node_modules/@babel/cli/bin/babel.js +3 -0
  9. package/node_modules/@babel/cli/index.js +1 -0
  10. package/node_modules/@babel/cli/lib/babel/dir.js +285 -0
  11. package/node_modules/@babel/cli/lib/babel/file.js +273 -0
  12. package/node_modules/@babel/cli/lib/babel/index.js +20 -0
  13. package/node_modules/@babel/cli/lib/babel/options.js +285 -0
  14. package/node_modules/@babel/cli/lib/babel/util.js +181 -0
  15. package/node_modules/@babel/cli/lib/babel/watcher.js +162 -0
  16. package/node_modules/@babel/cli/lib/babel-external-helpers.js +43 -0
  17. package/node_modules/@babel/cli/node_modules/commander/CHANGELOG.md +436 -0
  18. package/node_modules/@babel/cli/node_modules/commander/LICENSE +22 -0
  19. package/node_modules/@babel/cli/node_modules/commander/Readme.md +713 -0
  20. package/node_modules/@babel/cli/node_modules/commander/index.js +1649 -0
  21. package/node_modules/@babel/cli/node_modules/commander/package.json +41 -0
  22. package/node_modules/@babel/cli/node_modules/commander/typings/index.d.ts +311 -0
  23. package/node_modules/@babel/cli/node_modules/make-dir/index.d.ts +39 -0
  24. package/node_modules/@babel/cli/node_modules/make-dir/index.js +139 -0
  25. package/node_modules/@babel/cli/node_modules/make-dir/license +9 -0
  26. package/node_modules/@babel/cli/node_modules/make-dir/package.json +59 -0
  27. package/node_modules/@babel/cli/node_modules/make-dir/readme.md +123 -0
  28. package/node_modules/@babel/cli/node_modules/pify/index.js +68 -0
  29. package/node_modules/@babel/cli/node_modules/pify/license +9 -0
  30. package/node_modules/@babel/cli/node_modules/pify/package.json +51 -0
  31. package/node_modules/@babel/cli/node_modules/pify/readme.md +145 -0
  32. package/node_modules/@babel/cli/node_modules/semver/CHANGELOG.md +39 -0
  33. package/node_modules/@babel/cli/node_modules/semver/LICENSE +15 -0
  34. package/node_modules/@babel/cli/node_modules/semver/README.md +412 -0
  35. package/node_modules/@babel/cli/node_modules/semver/bin/semver +160 -0
  36. package/node_modules/@babel/cli/node_modules/semver/package.json +28 -0
  37. package/node_modules/@babel/cli/node_modules/semver/range.bnf +16 -0
  38. package/node_modules/@babel/cli/node_modules/semver/semver.js +1483 -0
  39. package/node_modules/@babel/cli/node_modules/slash/index.js +11 -0
  40. package/node_modules/@babel/cli/node_modules/slash/license +9 -0
  41. package/node_modules/@babel/cli/node_modules/slash/package.json +34 -0
  42. package/node_modules/@babel/cli/node_modules/slash/readme.md +44 -0
  43. package/node_modules/@babel/cli/package.json +55 -0
  44. package/node_modules/@corellium/client-api/README.md +209 -0
  45. package/node_modules/@corellium/client-api/dist/ApiClient.js +780 -0
  46. package/node_modules/@corellium/client-api/dist/api/CorelliumApi.js +1744 -0
  47. package/node_modules/@corellium/client-api/dist/index.js +295 -0
  48. package/node_modules/@corellium/client-api/dist/model/ApiConflictError.js +114 -0
  49. package/node_modules/@corellium/client-api/dist/model/ApiError.js +101 -0
  50. package/node_modules/@corellium/client-api/dist/model/ApiNotFoundError.js +111 -0
  51. package/node_modules/@corellium/client-api/dist/model/ApiToken.js +78 -0
  52. package/node_modules/@corellium/client-api/dist/model/Bit.js +50 -0
  53. package/node_modules/@corellium/client-api/dist/model/Credentials.js +91 -0
  54. package/node_modules/@corellium/client-api/dist/model/Firmware.js +208 -0
  55. package/node_modules/@corellium/client-api/dist/model/GpioStateDefinition.js +93 -0
  56. package/node_modules/@corellium/client-api/dist/model/Image.js +249 -0
  57. package/node_modules/@corellium/client-api/dist/model/Instance.js +313 -0
  58. package/node_modules/@corellium/client-api/dist/model/InstanceBootOptions.js +134 -0
  59. package/node_modules/@corellium/client-api/dist/model/InstanceConsoleEndpoint.js +76 -0
  60. package/node_modules/@corellium/client-api/dist/model/InstanceCreateOptions.js +224 -0
  61. package/node_modules/@corellium/client-api/dist/model/InstanceNetmonState.js +75 -0
  62. package/node_modules/@corellium/client-api/dist/model/InstanceReturn.js +92 -0
  63. package/node_modules/@corellium/client-api/dist/model/InstanceServices.js +77 -0
  64. package/node_modules/@corellium/client-api/dist/model/InstanceStartOptions.js +76 -0
  65. package/node_modules/@corellium/client-api/dist/model/InstanceState.js +64 -0
  66. package/node_modules/@corellium/client-api/dist/model/InstanceStopOptions.js +76 -0
  67. package/node_modules/@corellium/client-api/dist/model/Model.js +165 -0
  68. package/node_modules/@corellium/client-api/dist/model/ModelSoftware.js +122 -0
  69. package/node_modules/@corellium/client-api/dist/model/PeripheralsData.js +147 -0
  70. package/node_modules/@corellium/client-api/dist/model/Project.js +122 -0
  71. package/node_modules/@corellium/client-api/dist/model/ProjectQuota.js +93 -0
  72. package/node_modules/@corellium/client-api/dist/model/ProjectSettings.js +93 -0
  73. package/node_modules/@corellium/client-api/dist/model/ProjectUsage.js +102 -0
  74. package/node_modules/@corellium/client-api/dist/model/Snapshot.js +145 -0
  75. package/node_modules/@corellium/client-api/dist/model/SnapshotCreationOptions.js +79 -0
  76. package/node_modules/@corellium/client-api/dist/model/SnapshotStatus.js +84 -0
  77. package/node_modules/@corellium/client-api/dist/model/Token.js +88 -0
  78. package/node_modules/@corellium/client-api/dist/model/UserError.js +114 -0
  79. package/node_modules/@corellium/client-api/dist/model/V1SetStateBody.js +80 -0
  80. package/node_modules/@corellium/client-api/dist/model/VolumeOptions.js +94 -0
  81. package/node_modules/@corellium/client-api/dist/model/VpnDefinition.js +84 -0
  82. package/node_modules/@corellium/client-api/package.json +46 -0
  83. package/node_modules/@jridgewell/resolve-uri/LICENSE +19 -0
  84. package/node_modules/@jridgewell/resolve-uri/README.md +40 -0
  85. package/node_modules/@jridgewell/resolve-uri/dist/resolve-uri.mjs +242 -0
  86. package/node_modules/@jridgewell/resolve-uri/dist/resolve-uri.mjs.map +1 -0
  87. package/node_modules/@jridgewell/resolve-uri/dist/resolve-uri.umd.js +250 -0
  88. package/node_modules/@jridgewell/resolve-uri/dist/resolve-uri.umd.js.map +1 -0
  89. package/node_modules/@jridgewell/resolve-uri/dist/types/resolve-uri.d.ts +4 -0
  90. package/node_modules/@jridgewell/resolve-uri/package.json +69 -0
  91. package/node_modules/@jridgewell/sourcemap-codec/LICENSE +21 -0
  92. package/node_modules/@jridgewell/sourcemap-codec/README.md +200 -0
  93. package/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.mjs +164 -0
  94. package/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.mjs.map +1 -0
  95. package/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.umd.js +175 -0
  96. package/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.umd.js.map +1 -0
  97. package/node_modules/@jridgewell/sourcemap-codec/dist/types/sourcemap-codec.d.ts +6 -0
  98. package/node_modules/@jridgewell/sourcemap-codec/package.json +75 -0
  99. package/node_modules/@jridgewell/sourcemap-codec/src/sourcemap-codec.ts +198 -0
  100. package/node_modules/@jridgewell/trace-mapping/LICENSE +19 -0
  101. package/node_modules/@jridgewell/trace-mapping/README.md +252 -0
  102. package/node_modules/@jridgewell/trace-mapping/dist/trace-mapping.mjs +552 -0
  103. package/node_modules/@jridgewell/trace-mapping/dist/trace-mapping.mjs.map +1 -0
  104. package/node_modules/@jridgewell/trace-mapping/dist/trace-mapping.umd.js +566 -0
  105. package/node_modules/@jridgewell/trace-mapping/dist/trace-mapping.umd.js.map +1 -0
  106. package/node_modules/@jridgewell/trace-mapping/dist/types/any-map.d.ts +8 -0
  107. package/node_modules/@jridgewell/trace-mapping/dist/types/binary-search.d.ts +32 -0
  108. package/node_modules/@jridgewell/trace-mapping/dist/types/by-source.d.ts +7 -0
  109. package/node_modules/@jridgewell/trace-mapping/dist/types/resolve.d.ts +1 -0
  110. package/node_modules/@jridgewell/trace-mapping/dist/types/sort.d.ts +2 -0
  111. package/node_modules/@jridgewell/trace-mapping/dist/types/sourcemap-segment.d.ts +16 -0
  112. package/node_modules/@jridgewell/trace-mapping/dist/types/strip-filename.d.ts +4 -0
  113. package/node_modules/@jridgewell/trace-mapping/dist/types/trace-mapping.d.ts +74 -0
  114. package/node_modules/@jridgewell/trace-mapping/dist/types/types.d.ts +92 -0
  115. package/node_modules/@jridgewell/trace-mapping/package.json +75 -0
  116. package/node_modules/@nicolo-ribaudo/chokidar-2/README.md +3 -0
  117. package/node_modules/@nicolo-ribaudo/chokidar-2/build-chokidar.sh +30 -0
  118. package/node_modules/@nicolo-ribaudo/chokidar-2/dist/main.js +2086 -0
  119. package/node_modules/@nicolo-ribaudo/chokidar-2/package.json +36 -0
  120. package/node_modules/@nicolo-ribaudo/chokidar-2/types.d.ts +191 -0
  121. package/node_modules/ansi-regex/index.d.ts +37 -0
  122. package/node_modules/ansi-regex/index.js +10 -0
  123. package/node_modules/ansi-regex/license +9 -0
  124. package/node_modules/ansi-regex/package.json +55 -0
  125. package/node_modules/ansi-regex/readme.md +78 -0
  126. package/node_modules/ansi-styles/index.d.ts +345 -0
  127. package/node_modules/ansi-styles/index.js +163 -0
  128. package/node_modules/ansi-styles/license +9 -0
  129. package/node_modules/ansi-styles/package.json +56 -0
  130. package/node_modules/ansi-styles/readme.md +152 -0
  131. package/node_modules/anymatch/LICENSE +15 -0
  132. package/node_modules/anymatch/README.md +87 -0
  133. package/node_modules/anymatch/index.d.ts +19 -0
  134. package/node_modules/anymatch/index.js +104 -0
  135. package/node_modules/anymatch/package.json +48 -0
  136. package/node_modules/asynckit/LICENSE +21 -0
  137. package/node_modules/asynckit/README.md +233 -0
  138. package/node_modules/asynckit/bench.js +76 -0
  139. package/node_modules/asynckit/index.js +6 -0
  140. package/node_modules/asynckit/lib/abort.js +29 -0
  141. package/node_modules/asynckit/lib/async.js +34 -0
  142. package/node_modules/asynckit/lib/defer.js +26 -0
  143. package/node_modules/asynckit/lib/iterate.js +75 -0
  144. package/node_modules/asynckit/lib/readable_asynckit.js +91 -0
  145. package/node_modules/asynckit/lib/readable_parallel.js +25 -0
  146. package/node_modules/asynckit/lib/readable_serial.js +25 -0
  147. package/node_modules/asynckit/lib/readable_serial_ordered.js +29 -0
  148. package/node_modules/asynckit/lib/state.js +37 -0
  149. package/node_modules/asynckit/lib/streamify.js +141 -0
  150. package/node_modules/asynckit/lib/terminator.js +29 -0
  151. package/node_modules/asynckit/package.json +63 -0
  152. package/node_modules/asynckit/parallel.js +43 -0
  153. package/node_modules/asynckit/serial.js +17 -0
  154. package/node_modules/asynckit/serialOrdered.js +75 -0
  155. package/node_modules/asynckit/stream.js +21 -0
  156. package/node_modules/axios/CHANGELOG.md +943 -0
  157. package/node_modules/axios/LICENSE +19 -0
  158. package/node_modules/axios/README.md +991 -0
  159. package/node_modules/axios/SECURITY.md +5 -0
  160. package/node_modules/axios/UPGRADE_GUIDE.md +168 -0
  161. package/node_modules/axios/dist/axios.js +2595 -0
  162. package/node_modules/axios/dist/axios.map +1 -0
  163. package/node_modules/axios/dist/axios.min.js +3 -0
  164. package/node_modules/axios/dist/axios.min.map +1 -0
  165. package/node_modules/axios/index.d.ts +254 -0
  166. package/node_modules/axios/index.js +1 -0
  167. package/node_modules/axios/lib/adapters/README.md +37 -0
  168. package/node_modules/axios/lib/adapters/http.js +424 -0
  169. package/node_modules/axios/lib/adapters/xhr.js +222 -0
  170. package/node_modules/axios/lib/axios.js +64 -0
  171. package/node_modules/axios/lib/cancel/CancelToken.js +119 -0
  172. package/node_modules/axios/lib/cancel/CanceledError.js +22 -0
  173. package/node_modules/axios/lib/cancel/isCancel.js +5 -0
  174. package/node_modules/axios/lib/core/Axios.js +160 -0
  175. package/node_modules/axios/lib/core/AxiosError.js +86 -0
  176. package/node_modules/axios/lib/core/InterceptorManager.js +54 -0
  177. package/node_modules/axios/lib/core/README.md +8 -0
  178. package/node_modules/axios/lib/core/buildFullPath.js +20 -0
  179. package/node_modules/axios/lib/core/dispatchRequest.js +87 -0
  180. package/node_modules/axios/lib/core/mergeConfig.js +100 -0
  181. package/node_modules/axios/lib/core/settle.js +25 -0
  182. package/node_modules/axios/lib/core/transformData.js +22 -0
  183. package/node_modules/axios/lib/defaults/env/FormData.js +2 -0
  184. package/node_modules/axios/lib/defaults/index.js +146 -0
  185. package/node_modules/axios/lib/defaults/transitional.js +7 -0
  186. package/node_modules/axios/lib/env/README.md +3 -0
  187. package/node_modules/axios/lib/env/data.js +3 -0
  188. package/node_modules/axios/lib/helpers/README.md +7 -0
  189. package/node_modules/axios/lib/helpers/bind.js +11 -0
  190. package/node_modules/axios/lib/helpers/buildURL.js +70 -0
  191. package/node_modules/axios/lib/helpers/combineURLs.js +14 -0
  192. package/node_modules/axios/lib/helpers/cookies.js +53 -0
  193. package/node_modules/axios/lib/helpers/deprecatedMethod.js +24 -0
  194. package/node_modules/axios/lib/helpers/isAbsoluteURL.js +14 -0
  195. package/node_modules/axios/lib/helpers/isAxiosError.js +13 -0
  196. package/node_modules/axios/lib/helpers/isURLSameOrigin.js +68 -0
  197. package/node_modules/axios/lib/helpers/normalizeHeaderName.js +12 -0
  198. package/node_modules/axios/lib/helpers/null.js +2 -0
  199. package/node_modules/axios/lib/helpers/parseHeaders.js +53 -0
  200. package/node_modules/axios/lib/helpers/parseProtocol.js +6 -0
  201. package/node_modules/axios/lib/helpers/spread.js +27 -0
  202. package/node_modules/axios/lib/helpers/toFormData.js +72 -0
  203. package/node_modules/axios/lib/helpers/validator.js +86 -0
  204. package/node_modules/axios/lib/utils.js +470 -0
  205. package/node_modules/axios/package.json +87 -0
  206. package/node_modules/axios/tsconfig.json +14 -0
  207. package/node_modules/axios/tslint.json +6 -0
  208. package/node_modules/balanced-match/.github/FUNDING.yml +2 -0
  209. package/node_modules/balanced-match/LICENSE.md +21 -0
  210. package/node_modules/balanced-match/README.md +97 -0
  211. package/node_modules/balanced-match/index.js +62 -0
  212. package/node_modules/balanced-match/package.json +48 -0
  213. package/node_modules/binary-extensions/binary-extensions.json +260 -0
  214. package/node_modules/binary-extensions/binary-extensions.json.d.ts +3 -0
  215. package/node_modules/binary-extensions/index.d.ts +14 -0
  216. package/node_modules/binary-extensions/index.js +1 -0
  217. package/node_modules/binary-extensions/license +9 -0
  218. package/node_modules/binary-extensions/package.json +38 -0
  219. package/node_modules/binary-extensions/readme.md +41 -0
  220. package/node_modules/brace-expansion/LICENSE +21 -0
  221. package/node_modules/brace-expansion/README.md +129 -0
  222. package/node_modules/brace-expansion/index.js +201 -0
  223. package/node_modules/brace-expansion/package.json +47 -0
  224. package/node_modules/braces/CHANGELOG.md +184 -0
  225. package/node_modules/braces/LICENSE +21 -0
  226. package/node_modules/braces/README.md +593 -0
  227. package/node_modules/braces/index.js +170 -0
  228. package/node_modules/braces/lib/compile.js +57 -0
  229. package/node_modules/braces/lib/constants.js +57 -0
  230. package/node_modules/braces/lib/expand.js +113 -0
  231. package/node_modules/braces/lib/parse.js +333 -0
  232. package/node_modules/braces/lib/stringify.js +32 -0
  233. package/node_modules/braces/lib/utils.js +112 -0
  234. package/node_modules/braces/package.json +77 -0
  235. package/node_modules/call-bind/.eslintignore +1 -0
  236. package/node_modules/call-bind/.eslintrc +17 -0
  237. package/node_modules/call-bind/.github/FUNDING.yml +12 -0
  238. package/node_modules/call-bind/.nycrc +13 -0
  239. package/node_modules/call-bind/CHANGELOG.md +42 -0
  240. package/node_modules/call-bind/LICENSE +21 -0
  241. package/node_modules/call-bind/README.md +2 -0
  242. package/node_modules/call-bind/callBound.js +15 -0
  243. package/node_modules/call-bind/index.js +47 -0
  244. package/node_modules/call-bind/package.json +80 -0
  245. package/node_modules/call-bind/test/callBound.js +55 -0
  246. package/node_modules/call-bind/test/index.js +66 -0
  247. package/node_modules/chokidar/LICENSE +21 -0
  248. package/node_modules/chokidar/README.md +308 -0
  249. package/node_modules/chokidar/index.js +973 -0
  250. package/node_modules/chokidar/lib/constants.js +65 -0
  251. package/node_modules/chokidar/lib/fsevents-handler.js +524 -0
  252. package/node_modules/chokidar/lib/nodefs-handler.js +654 -0
  253. package/node_modules/chokidar/package.json +85 -0
  254. package/node_modules/chokidar/types/index.d.ts +188 -0
  255. package/node_modules/cliui/CHANGELOG.md +121 -0
  256. package/node_modules/cliui/LICENSE.txt +14 -0
  257. package/node_modules/cliui/README.md +141 -0
  258. package/node_modules/cliui/build/index.cjs +302 -0
  259. package/node_modules/cliui/build/lib/index.js +287 -0
  260. package/node_modules/cliui/build/lib/string-utils.js +27 -0
  261. package/node_modules/cliui/index.mjs +13 -0
  262. package/node_modules/cliui/package.json +83 -0
  263. package/node_modules/color-convert/CHANGELOG.md +54 -0
  264. package/node_modules/color-convert/LICENSE +21 -0
  265. package/node_modules/color-convert/README.md +68 -0
  266. package/node_modules/color-convert/conversions.js +839 -0
  267. package/node_modules/color-convert/index.js +81 -0
  268. package/node_modules/color-convert/package.json +48 -0
  269. package/node_modules/color-convert/route.js +97 -0
  270. package/node_modules/color-name/LICENSE +8 -0
  271. package/node_modules/color-name/README.md +11 -0
  272. package/node_modules/color-name/index.js +152 -0
  273. package/node_modules/color-name/package.json +28 -0
  274. package/node_modules/combined-stream/License +19 -0
  275. package/node_modules/combined-stream/Readme.md +138 -0
  276. package/node_modules/combined-stream/lib/combined_stream.js +208 -0
  277. package/node_modules/combined-stream/package.json +25 -0
  278. package/node_modules/combined-stream/yarn.lock +17 -0
  279. package/node_modules/component-emitter/History.md +75 -0
  280. package/node_modules/component-emitter/LICENSE +24 -0
  281. package/node_modules/component-emitter/Readme.md +74 -0
  282. package/node_modules/component-emitter/index.js +175 -0
  283. package/node_modules/component-emitter/package.json +27 -0
  284. package/node_modules/concat-map/.travis.yml +4 -0
  285. package/node_modules/concat-map/LICENSE +18 -0
  286. package/node_modules/concat-map/README.markdown +62 -0
  287. package/node_modules/concat-map/example/map.js +6 -0
  288. package/node_modules/concat-map/index.js +13 -0
  289. package/node_modules/concat-map/package.json +43 -0
  290. package/node_modules/concat-map/test/map.js +39 -0
  291. package/node_modules/convert-source-map/LICENSE +23 -0
  292. package/node_modules/convert-source-map/README.md +120 -0
  293. package/node_modules/convert-source-map/index.js +136 -0
  294. package/node_modules/convert-source-map/package.json +44 -0
  295. package/node_modules/cookiejar/LICENSE +9 -0
  296. package/node_modules/cookiejar/cookiejar.js +276 -0
  297. package/node_modules/cookiejar/package.json +26 -0
  298. package/node_modules/cookiejar/readme.md +60 -0
  299. package/node_modules/debug/LICENSE +20 -0
  300. package/node_modules/debug/README.md +481 -0
  301. package/node_modules/debug/package.json +59 -0
  302. package/node_modules/debug/src/browser.js +269 -0
  303. package/node_modules/debug/src/common.js +274 -0
  304. package/node_modules/debug/src/index.js +10 -0
  305. package/node_modules/debug/src/node.js +263 -0
  306. package/node_modules/delayed-stream/.npmignore +1 -0
  307. package/node_modules/delayed-stream/License +19 -0
  308. package/node_modules/delayed-stream/Makefile +7 -0
  309. package/node_modules/delayed-stream/Readme.md +141 -0
  310. package/node_modules/delayed-stream/lib/delayed_stream.js +107 -0
  311. package/node_modules/delayed-stream/package.json +27 -0
  312. package/node_modules/dotenv/CHANGELOG.md +356 -0
  313. package/node_modules/dotenv/LICENSE +23 -0
  314. package/node_modules/dotenv/README.md +408 -0
  315. package/node_modules/dotenv/config.d.ts +1 -0
  316. package/node_modules/dotenv/config.js +9 -0
  317. package/node_modules/dotenv/lib/cli-options.js +11 -0
  318. package/node_modules/dotenv/lib/env-options.js +20 -0
  319. package/node_modules/dotenv/lib/main.d.ts +73 -0
  320. package/node_modules/dotenv/lib/main.js +109 -0
  321. package/node_modules/dotenv/package.json +56 -0
  322. package/node_modules/emoji-regex/LICENSE-MIT.txt +20 -0
  323. package/node_modules/emoji-regex/README.md +73 -0
  324. package/node_modules/emoji-regex/es2015/index.js +6 -0
  325. package/node_modules/emoji-regex/es2015/text.js +6 -0
  326. package/node_modules/emoji-regex/index.d.ts +23 -0
  327. package/node_modules/emoji-regex/index.js +6 -0
  328. package/node_modules/emoji-regex/package.json +50 -0
  329. package/node_modules/emoji-regex/text.js +6 -0
  330. package/node_modules/escalade/dist/index.js +22 -0
  331. package/node_modules/escalade/dist/index.mjs +22 -0
  332. package/node_modules/escalade/index.d.ts +3 -0
  333. package/node_modules/escalade/license +9 -0
  334. package/node_modules/escalade/package.json +61 -0
  335. package/node_modules/escalade/readme.md +211 -0
  336. package/node_modules/escalade/sync/index.d.ts +2 -0
  337. package/node_modules/escalade/sync/index.js +18 -0
  338. package/node_modules/escalade/sync/index.mjs +18 -0
  339. package/node_modules/fast-safe-stringify/.travis.yml +8 -0
  340. package/node_modules/fast-safe-stringify/CHANGELOG.md +17 -0
  341. package/node_modules/fast-safe-stringify/LICENSE +23 -0
  342. package/node_modules/fast-safe-stringify/benchmark.js +137 -0
  343. package/node_modules/fast-safe-stringify/index.d.ts +23 -0
  344. package/node_modules/fast-safe-stringify/index.js +229 -0
  345. package/node_modules/fast-safe-stringify/package.json +46 -0
  346. package/node_modules/fast-safe-stringify/readme.md +170 -0
  347. package/node_modules/fast-safe-stringify/test-stable.js +404 -0
  348. package/node_modules/fast-safe-stringify/test.js +397 -0
  349. package/node_modules/fill-range/LICENSE +21 -0
  350. package/node_modules/fill-range/README.md +237 -0
  351. package/node_modules/fill-range/index.js +249 -0
  352. package/node_modules/fill-range/package.json +69 -0
  353. package/node_modules/follow-redirects/LICENSE +18 -0
  354. package/node_modules/follow-redirects/README.md +155 -0
  355. package/node_modules/follow-redirects/debug.js +15 -0
  356. package/node_modules/follow-redirects/http.js +1 -0
  357. package/node_modules/follow-redirects/https.js +1 -0
  358. package/node_modules/follow-redirects/index.js +598 -0
  359. package/node_modules/follow-redirects/package.json +59 -0
  360. package/node_modules/form-data/License +19 -0
  361. package/node_modules/form-data/README.md.bak +358 -0
  362. package/node_modules/form-data/Readme.md +358 -0
  363. package/node_modules/form-data/index.d.ts +62 -0
  364. package/node_modules/form-data/lib/browser.js +2 -0
  365. package/node_modules/form-data/lib/form_data.js +501 -0
  366. package/node_modules/form-data/lib/populate.js +10 -0
  367. package/node_modules/form-data/package.json +68 -0
  368. package/node_modules/formidable/LICENSE +7 -0
  369. package/node_modules/formidable/Readme.md +448 -0
  370. package/node_modules/formidable/lib/file.js +81 -0
  371. package/node_modules/formidable/lib/incoming_form.js +564 -0
  372. package/node_modules/formidable/lib/index.js +3 -0
  373. package/node_modules/formidable/lib/json_parser.js +30 -0
  374. package/node_modules/formidable/lib/multipart_parser.js +332 -0
  375. package/node_modules/formidable/lib/octet_parser.js +20 -0
  376. package/node_modules/formidable/lib/querystring_parser.js +27 -0
  377. package/node_modules/formidable/package.json +29 -0
  378. package/node_modules/fs-readdir-recursive/LICENSE +22 -0
  379. package/node_modules/fs-readdir-recursive/README.md +61 -0
  380. package/node_modules/fs-readdir-recursive/index.js +29 -0
  381. package/node_modules/fs-readdir-recursive/package.json +26 -0
  382. package/node_modules/fs.realpath/LICENSE +43 -0
  383. package/node_modules/fs.realpath/README.md +33 -0
  384. package/node_modules/fs.realpath/index.js +66 -0
  385. package/node_modules/fs.realpath/old.js +303 -0
  386. package/node_modules/fs.realpath/package.json +26 -0
  387. package/node_modules/function-bind/.editorconfig +20 -0
  388. package/node_modules/function-bind/.eslintrc +15 -0
  389. package/node_modules/function-bind/.jscs.json +176 -0
  390. package/node_modules/function-bind/.npmignore +22 -0
  391. package/node_modules/function-bind/.travis.yml +168 -0
  392. package/node_modules/function-bind/LICENSE +20 -0
  393. package/node_modules/function-bind/README.md +48 -0
  394. package/node_modules/function-bind/implementation.js +52 -0
  395. package/node_modules/function-bind/index.js +5 -0
  396. package/node_modules/function-bind/package.json +63 -0
  397. package/node_modules/function-bind/test/.eslintrc +9 -0
  398. package/node_modules/function-bind/test/index.js +252 -0
  399. package/node_modules/get-caller-file/LICENSE.md +6 -0
  400. package/node_modules/get-caller-file/README.md +41 -0
  401. package/node_modules/get-caller-file/index.d.ts +2 -0
  402. package/node_modules/get-caller-file/index.js +22 -0
  403. package/node_modules/get-caller-file/index.js.map +1 -0
  404. package/node_modules/get-caller-file/package.json +42 -0
  405. package/node_modules/get-intrinsic/.eslintrc +37 -0
  406. package/node_modules/get-intrinsic/.github/FUNDING.yml +12 -0
  407. package/node_modules/get-intrinsic/.nycrc +9 -0
  408. package/node_modules/get-intrinsic/CHANGELOG.md +91 -0
  409. package/node_modules/get-intrinsic/LICENSE +21 -0
  410. package/node_modules/get-intrinsic/README.md +71 -0
  411. package/node_modules/get-intrinsic/index.js +334 -0
  412. package/node_modules/get-intrinsic/package.json +88 -0
  413. package/node_modules/get-intrinsic/test/GetIntrinsic.js +274 -0
  414. package/node_modules/glob/LICENSE +21 -0
  415. package/node_modules/glob/README.md +378 -0
  416. package/node_modules/glob/common.js +238 -0
  417. package/node_modules/glob/glob.js +790 -0
  418. package/node_modules/glob/package.json +55 -0
  419. package/node_modules/glob/sync.js +486 -0
  420. package/node_modules/glob-parent/CHANGELOG.md +110 -0
  421. package/node_modules/glob-parent/LICENSE +15 -0
  422. package/node_modules/glob-parent/README.md +137 -0
  423. package/node_modules/glob-parent/index.js +42 -0
  424. package/node_modules/glob-parent/package.json +48 -0
  425. package/node_modules/has/LICENSE-MIT +22 -0
  426. package/node_modules/has/README.md +18 -0
  427. package/node_modules/has/package.json +48 -0
  428. package/node_modules/has/src/index.js +5 -0
  429. package/node_modules/has/test/index.js +10 -0
  430. package/node_modules/has-symbols/.eslintrc +11 -0
  431. package/node_modules/has-symbols/.github/FUNDING.yml +12 -0
  432. package/node_modules/has-symbols/.nycrc +9 -0
  433. package/node_modules/has-symbols/CHANGELOG.md +75 -0
  434. package/node_modules/has-symbols/LICENSE +21 -0
  435. package/node_modules/has-symbols/README.md +46 -0
  436. package/node_modules/has-symbols/index.js +13 -0
  437. package/node_modules/has-symbols/package.json +101 -0
  438. package/node_modules/has-symbols/shams.js +42 -0
  439. package/node_modules/has-symbols/test/index.js +22 -0
  440. package/node_modules/has-symbols/test/shams/core-js.js +28 -0
  441. package/node_modules/has-symbols/test/shams/get-own-property-symbols.js +28 -0
  442. package/node_modules/has-symbols/test/tests.js +56 -0
  443. package/node_modules/inflight/LICENSE +15 -0
  444. package/node_modules/inflight/README.md +37 -0
  445. package/node_modules/inflight/inflight.js +54 -0
  446. package/node_modules/inflight/package.json +29 -0
  447. package/node_modules/inherits/LICENSE +16 -0
  448. package/node_modules/inherits/README.md +42 -0
  449. package/node_modules/inherits/inherits.js +9 -0
  450. package/node_modules/inherits/inherits_browser.js +27 -0
  451. package/node_modules/inherits/package.json +29 -0
  452. package/node_modules/is-binary-path/index.d.ts +17 -0
  453. package/node_modules/is-binary-path/index.js +7 -0
  454. package/node_modules/is-binary-path/license +9 -0
  455. package/node_modules/is-binary-path/package.json +40 -0
  456. package/node_modules/is-binary-path/readme.md +34 -0
  457. package/node_modules/is-extglob/LICENSE +21 -0
  458. package/node_modules/is-extglob/README.md +107 -0
  459. package/node_modules/is-extglob/index.js +20 -0
  460. package/node_modules/is-extglob/package.json +69 -0
  461. package/node_modules/is-fullwidth-code-point/index.d.ts +17 -0
  462. package/node_modules/is-fullwidth-code-point/index.js +50 -0
  463. package/node_modules/is-fullwidth-code-point/license +9 -0
  464. package/node_modules/is-fullwidth-code-point/package.json +42 -0
  465. package/node_modules/is-fullwidth-code-point/readme.md +39 -0
  466. package/node_modules/is-glob/LICENSE +21 -0
  467. package/node_modules/is-glob/README.md +206 -0
  468. package/node_modules/is-glob/index.js +150 -0
  469. package/node_modules/is-glob/package.json +81 -0
  470. package/node_modules/is-number/LICENSE +21 -0
  471. package/node_modules/is-number/README.md +187 -0
  472. package/node_modules/is-number/index.js +18 -0
  473. package/node_modules/is-number/package.json +82 -0
  474. package/node_modules/lru-cache/LICENSE +15 -0
  475. package/node_modules/lru-cache/README.md +166 -0
  476. package/node_modules/lru-cache/index.js +334 -0
  477. package/node_modules/lru-cache/package.json +34 -0
  478. package/node_modules/methods/HISTORY.md +29 -0
  479. package/node_modules/methods/LICENSE +24 -0
  480. package/node_modules/methods/README.md +51 -0
  481. package/node_modules/methods/index.js +69 -0
  482. package/node_modules/methods/package.json +36 -0
  483. package/node_modules/mime/CHANGELOG.md +296 -0
  484. package/node_modules/mime/LICENSE +21 -0
  485. package/node_modules/mime/Mime.js +97 -0
  486. package/node_modules/mime/README.md +187 -0
  487. package/node_modules/mime/cli.js +46 -0
  488. package/node_modules/mime/index.js +4 -0
  489. package/node_modules/mime/lite.js +4 -0
  490. package/node_modules/mime/package.json +52 -0
  491. package/node_modules/mime/types/other.js +1 -0
  492. package/node_modules/mime/types/standard.js +1 -0
  493. package/node_modules/mime-db/HISTORY.md +507 -0
  494. package/node_modules/mime-db/LICENSE +23 -0
  495. package/node_modules/mime-db/README.md +100 -0
  496. package/node_modules/mime-db/db.json +8519 -0
  497. package/node_modules/mime-db/index.js +12 -0
  498. package/node_modules/mime-db/package.json +60 -0
  499. package/node_modules/mime-types/HISTORY.md +397 -0
  500. package/node_modules/mime-types/LICENSE +23 -0
  501. package/node_modules/mime-types/README.md +113 -0
  502. package/node_modules/mime-types/index.js +188 -0
  503. package/node_modules/mime-types/package.json +44 -0
  504. package/node_modules/minimatch/LICENSE +15 -0
  505. package/node_modules/minimatch/README.md +230 -0
  506. package/node_modules/minimatch/minimatch.js +947 -0
  507. package/node_modules/minimatch/package.json +33 -0
  508. package/node_modules/ms/index.js +162 -0
  509. package/node_modules/ms/license.md +21 -0
  510. package/node_modules/ms/package.json +37 -0
  511. package/node_modules/ms/readme.md +60 -0
  512. package/node_modules/multi-progress/.gitattributes +17 -0
  513. package/node_modules/multi-progress/CHANGELOG.md +56 -0
  514. package/node_modules/multi-progress/LICENSE.txt +21 -0
  515. package/node_modules/multi-progress/multi-progress.js +98 -0
  516. package/node_modules/multi-progress/package.json +28 -0
  517. package/node_modules/multi-progress/readme.md +33 -0
  518. package/node_modules/normalize-path/LICENSE +21 -0
  519. package/node_modules/normalize-path/README.md +127 -0
  520. package/node_modules/normalize-path/index.js +35 -0
  521. package/node_modules/normalize-path/package.json +77 -0
  522. package/node_modules/object-inspect/.eslintrc +53 -0
  523. package/node_modules/object-inspect/.github/FUNDING.yml +12 -0
  524. package/node_modules/object-inspect/.nycrc +13 -0
  525. package/node_modules/object-inspect/CHANGELOG.md +360 -0
  526. package/node_modules/object-inspect/LICENSE +21 -0
  527. package/node_modules/object-inspect/example/all.js +23 -0
  528. package/node_modules/object-inspect/example/circular.js +6 -0
  529. package/node_modules/object-inspect/example/fn.js +5 -0
  530. package/node_modules/object-inspect/example/inspect.js +10 -0
  531. package/node_modules/object-inspect/index.js +512 -0
  532. package/node_modules/object-inspect/package-support.json +20 -0
  533. package/node_modules/object-inspect/package.json +94 -0
  534. package/node_modules/object-inspect/readme.markdown +86 -0
  535. package/node_modules/object-inspect/test/bigint.js +58 -0
  536. package/node_modules/object-inspect/test/browser/dom.js +15 -0
  537. package/node_modules/object-inspect/test/circular.js +16 -0
  538. package/node_modules/object-inspect/test/deep.js +12 -0
  539. package/node_modules/object-inspect/test/element.js +53 -0
  540. package/node_modules/object-inspect/test/err.js +48 -0
  541. package/node_modules/object-inspect/test/fakes.js +29 -0
  542. package/node_modules/object-inspect/test/fn.js +76 -0
  543. package/node_modules/object-inspect/test/has.js +15 -0
  544. package/node_modules/object-inspect/test/holes.js +15 -0
  545. package/node_modules/object-inspect/test/indent-option.js +271 -0
  546. package/node_modules/object-inspect/test/inspect.js +139 -0
  547. package/node_modules/object-inspect/test/lowbyte.js +12 -0
  548. package/node_modules/object-inspect/test/number.js +58 -0
  549. package/node_modules/object-inspect/test/quoteStyle.js +17 -0
  550. package/node_modules/object-inspect/test/toStringTag.js +40 -0
  551. package/node_modules/object-inspect/test/undef.js +12 -0
  552. package/node_modules/object-inspect/test/values.js +211 -0
  553. package/node_modules/object-inspect/test-core-js.js +26 -0
  554. package/node_modules/object-inspect/util.inspect.js +1 -0
  555. package/node_modules/once/LICENSE +15 -0
  556. package/node_modules/once/README.md +79 -0
  557. package/node_modules/once/once.js +42 -0
  558. package/node_modules/once/package.json +33 -0
  559. package/node_modules/path-is-absolute/index.js +20 -0
  560. package/node_modules/path-is-absolute/license +21 -0
  561. package/node_modules/path-is-absolute/package.json +43 -0
  562. package/node_modules/path-is-absolute/readme.md +59 -0
  563. package/node_modules/picomatch/CHANGELOG.md +136 -0
  564. package/node_modules/picomatch/LICENSE +21 -0
  565. package/node_modules/picomatch/README.md +708 -0
  566. package/node_modules/picomatch/index.js +3 -0
  567. package/node_modules/picomatch/lib/constants.js +179 -0
  568. package/node_modules/picomatch/lib/parse.js +1091 -0
  569. package/node_modules/picomatch/lib/picomatch.js +342 -0
  570. package/node_modules/picomatch/lib/scan.js +391 -0
  571. package/node_modules/picomatch/lib/utils.js +64 -0
  572. package/node_modules/picomatch/package.json +81 -0
  573. package/node_modules/progress/CHANGELOG.md +115 -0
  574. package/node_modules/progress/LICENSE +22 -0
  575. package/node_modules/progress/Makefile +8 -0
  576. package/node_modules/progress/Readme.md +146 -0
  577. package/node_modules/progress/index.js +1 -0
  578. package/node_modules/progress/lib/node-progress.js +236 -0
  579. package/node_modules/progress/package.json +26 -0
  580. package/node_modules/qs/.editorconfig +43 -0
  581. package/node_modules/qs/.eslintrc +38 -0
  582. package/node_modules/qs/.github/FUNDING.yml +12 -0
  583. package/node_modules/qs/.nycrc +13 -0
  584. package/node_modules/qs/CHANGELOG.md +546 -0
  585. package/node_modules/qs/LICENSE.md +29 -0
  586. package/node_modules/qs/README.md +625 -0
  587. package/node_modules/qs/dist/qs.js +2054 -0
  588. package/node_modules/qs/lib/formats.js +23 -0
  589. package/node_modules/qs/lib/index.js +11 -0
  590. package/node_modules/qs/lib/parse.js +263 -0
  591. package/node_modules/qs/lib/stringify.js +326 -0
  592. package/node_modules/qs/lib/utils.js +252 -0
  593. package/node_modules/qs/package.json +77 -0
  594. package/node_modules/qs/test/parse.js +855 -0
  595. package/node_modules/qs/test/stringify.js +909 -0
  596. package/node_modules/qs/test/utils.js +136 -0
  597. package/node_modules/readdirp/LICENSE +21 -0
  598. package/node_modules/readdirp/README.md +122 -0
  599. package/node_modules/readdirp/index.d.ts +43 -0
  600. package/node_modules/readdirp/index.js +287 -0
  601. package/node_modules/readdirp/package.json +122 -0
  602. package/node_modules/require-directory/.jshintrc +67 -0
  603. package/node_modules/require-directory/.npmignore +1 -0
  604. package/node_modules/require-directory/.travis.yml +3 -0
  605. package/node_modules/require-directory/LICENSE +22 -0
  606. package/node_modules/require-directory/README.markdown +184 -0
  607. package/node_modules/require-directory/index.js +86 -0
  608. package/node_modules/require-directory/package.json +40 -0
  609. package/node_modules/safe-buffer/LICENSE +21 -0
  610. package/node_modules/safe-buffer/README.md +584 -0
  611. package/node_modules/safe-buffer/index.d.ts +187 -0
  612. package/node_modules/safe-buffer/index.js +62 -0
  613. package/node_modules/safe-buffer/package.json +37 -0
  614. package/node_modules/semver/LICENSE +15 -0
  615. package/node_modules/semver/README.md +568 -0
  616. package/node_modules/semver/bin/semver.js +183 -0
  617. package/node_modules/semver/classes/comparator.js +136 -0
  618. package/node_modules/semver/classes/index.js +5 -0
  619. package/node_modules/semver/classes/range.js +519 -0
  620. package/node_modules/semver/classes/semver.js +287 -0
  621. package/node_modules/semver/functions/clean.js +6 -0
  622. package/node_modules/semver/functions/cmp.js +52 -0
  623. package/node_modules/semver/functions/coerce.js +52 -0
  624. package/node_modules/semver/functions/compare-build.js +7 -0
  625. package/node_modules/semver/functions/compare-loose.js +3 -0
  626. package/node_modules/semver/functions/compare.js +5 -0
  627. package/node_modules/semver/functions/diff.js +23 -0
  628. package/node_modules/semver/functions/eq.js +3 -0
  629. package/node_modules/semver/functions/gt.js +3 -0
  630. package/node_modules/semver/functions/gte.js +3 -0
  631. package/node_modules/semver/functions/inc.js +18 -0
  632. package/node_modules/semver/functions/lt.js +3 -0
  633. package/node_modules/semver/functions/lte.js +3 -0
  634. package/node_modules/semver/functions/major.js +3 -0
  635. package/node_modules/semver/functions/minor.js +3 -0
  636. package/node_modules/semver/functions/neq.js +3 -0
  637. package/node_modules/semver/functions/parse.js +33 -0
  638. package/node_modules/semver/functions/patch.js +3 -0
  639. package/node_modules/semver/functions/prerelease.js +6 -0
  640. package/node_modules/semver/functions/rcompare.js +3 -0
  641. package/node_modules/semver/functions/rsort.js +3 -0
  642. package/node_modules/semver/functions/satisfies.js +10 -0
  643. package/node_modules/semver/functions/sort.js +3 -0
  644. package/node_modules/semver/functions/valid.js +6 -0
  645. package/node_modules/semver/index.js +48 -0
  646. package/node_modules/semver/internal/constants.js +17 -0
  647. package/node_modules/semver/internal/debug.js +9 -0
  648. package/node_modules/semver/internal/identifiers.js +23 -0
  649. package/node_modules/semver/internal/parse-options.js +11 -0
  650. package/node_modules/semver/internal/re.js +182 -0
  651. package/node_modules/semver/package.json +75 -0
  652. package/node_modules/semver/preload.js +2 -0
  653. package/node_modules/semver/range.bnf +16 -0
  654. package/node_modules/semver/ranges/gtr.js +4 -0
  655. package/node_modules/semver/ranges/intersects.js +7 -0
  656. package/node_modules/semver/ranges/ltr.js +4 -0
  657. package/node_modules/semver/ranges/max-satisfying.js +25 -0
  658. package/node_modules/semver/ranges/min-satisfying.js +24 -0
  659. package/node_modules/semver/ranges/min-version.js +61 -0
  660. package/node_modules/semver/ranges/outside.js +80 -0
  661. package/node_modules/semver/ranges/simplify.js +47 -0
  662. package/node_modules/semver/ranges/subset.js +244 -0
  663. package/node_modules/semver/ranges/to-comparators.js +8 -0
  664. package/node_modules/semver/ranges/valid.js +11 -0
  665. package/node_modules/side-channel/.eslintignore +1 -0
  666. package/node_modules/side-channel/.eslintrc +11 -0
  667. package/node_modules/side-channel/.github/FUNDING.yml +12 -0
  668. package/node_modules/side-channel/.nycrc +13 -0
  669. package/node_modules/side-channel/CHANGELOG.md +65 -0
  670. package/node_modules/side-channel/LICENSE +21 -0
  671. package/node_modules/side-channel/README.md +2 -0
  672. package/node_modules/side-channel/index.js +124 -0
  673. package/node_modules/side-channel/package.json +67 -0
  674. package/node_modules/side-channel/test/index.js +78 -0
  675. package/node_modules/string-width/index.d.ts +29 -0
  676. package/node_modules/string-width/index.js +47 -0
  677. package/node_modules/string-width/license +9 -0
  678. package/node_modules/string-width/package.json +56 -0
  679. package/node_modules/string-width/readme.md +50 -0
  680. package/node_modules/string_decoder/.travis.yml +50 -0
  681. package/node_modules/string_decoder/LICENSE +48 -0
  682. package/node_modules/string_decoder/README.md +47 -0
  683. package/node_modules/string_decoder/lib/string_decoder.js +296 -0
  684. package/node_modules/string_decoder/package.json +31 -0
  685. package/node_modules/strip-ansi/index.d.ts +17 -0
  686. package/node_modules/strip-ansi/index.js +4 -0
  687. package/node_modules/strip-ansi/license +9 -0
  688. package/node_modules/strip-ansi/package.json +54 -0
  689. package/node_modules/strip-ansi/readme.md +46 -0
  690. package/node_modules/superagent/.browserslistrc +5 -0
  691. package/node_modules/superagent/.dist.babelrc +10 -0
  692. package/node_modules/superagent/.dist.eslintrc +35 -0
  693. package/node_modules/superagent/.editorconfig +9 -0
  694. package/node_modules/superagent/.gitattributes +1 -0
  695. package/node_modules/superagent/.lib.babelrc +11 -0
  696. package/node_modules/superagent/.lib.eslintrc +24 -0
  697. package/node_modules/superagent/.remarkignore +3 -0
  698. package/node_modules/superagent/.zuul.yml +16 -0
  699. package/node_modules/superagent/CONTRIBUTING.md +7 -0
  700. package/node_modules/superagent/HISTORY.md +692 -0
  701. package/node_modules/superagent/LICENSE +22 -0
  702. package/node_modules/superagent/Makefile +60 -0
  703. package/node_modules/superagent/README.md +266 -0
  704. package/node_modules/superagent/dist/superagent.js +2418 -0
  705. package/node_modules/superagent/dist/superagent.min.js +1 -0
  706. package/node_modules/superagent/docs/head.html +11 -0
  707. package/node_modules/superagent/docs/images/bg.png +0 -0
  708. package/node_modules/superagent/docs/index.md +736 -0
  709. package/node_modules/superagent/docs/style.css +87 -0
  710. package/node_modules/superagent/docs/tail.html +36 -0
  711. package/node_modules/superagent/docs/test.html +5072 -0
  712. package/node_modules/superagent/index.html +47 -0
  713. package/node_modules/superagent/lib/agent-base.js +42 -0
  714. package/node_modules/superagent/lib/client.js +1020 -0
  715. package/node_modules/superagent/lib/is-object.js +17 -0
  716. package/node_modules/superagent/lib/node/agent.js +113 -0
  717. package/node_modules/superagent/lib/node/http2wrapper.js +218 -0
  718. package/node_modules/superagent/lib/node/index.js +1376 -0
  719. package/node_modules/superagent/lib/node/parsers/image.js +13 -0
  720. package/node_modules/superagent/lib/node/parsers/index.js +12 -0
  721. package/node_modules/superagent/lib/node/parsers/json.js +26 -0
  722. package/node_modules/superagent/lib/node/parsers/text.js +11 -0
  723. package/node_modules/superagent/lib/node/parsers/urlencoded.js +22 -0
  724. package/node_modules/superagent/lib/node/response.js +126 -0
  725. package/node_modules/superagent/lib/node/unzip.js +72 -0
  726. package/node_modules/superagent/lib/request-base.js +757 -0
  727. package/node_modules/superagent/lib/response-base.js +131 -0
  728. package/node_modules/superagent/lib/utils.js +71 -0
  729. package/node_modules/superagent/node_modules/form-data/License +19 -0
  730. package/node_modules/superagent/node_modules/form-data/README.md.bak +356 -0
  731. package/node_modules/superagent/node_modules/form-data/Readme.md +356 -0
  732. package/node_modules/superagent/node_modules/form-data/index.d.ts +62 -0
  733. package/node_modules/superagent/node_modules/form-data/lib/browser.js +2 -0
  734. package/node_modules/superagent/node_modules/form-data/lib/form_data.js +498 -0
  735. package/node_modules/superagent/node_modules/form-data/lib/populate.js +10 -0
  736. package/node_modules/superagent/node_modules/form-data/package.json +68 -0
  737. package/node_modules/superagent/node_modules/readable-stream/CONTRIBUTING.md +38 -0
  738. package/node_modules/superagent/node_modules/readable-stream/GOVERNANCE.md +136 -0
  739. package/node_modules/superagent/node_modules/readable-stream/LICENSE +47 -0
  740. package/node_modules/superagent/node_modules/readable-stream/README.md +106 -0
  741. package/node_modules/superagent/node_modules/readable-stream/errors-browser.js +127 -0
  742. package/node_modules/superagent/node_modules/readable-stream/errors.js +116 -0
  743. package/node_modules/superagent/node_modules/readable-stream/experimentalWarning.js +17 -0
  744. package/node_modules/superagent/node_modules/readable-stream/lib/_stream_duplex.js +139 -0
  745. package/node_modules/superagent/node_modules/readable-stream/lib/_stream_passthrough.js +39 -0
  746. package/node_modules/superagent/node_modules/readable-stream/lib/_stream_readable.js +1124 -0
  747. package/node_modules/superagent/node_modules/readable-stream/lib/_stream_transform.js +201 -0
  748. package/node_modules/superagent/node_modules/readable-stream/lib/_stream_writable.js +697 -0
  749. package/node_modules/superagent/node_modules/readable-stream/lib/internal/streams/async_iterator.js +207 -0
  750. package/node_modules/superagent/node_modules/readable-stream/lib/internal/streams/buffer_list.js +210 -0
  751. package/node_modules/superagent/node_modules/readable-stream/lib/internal/streams/destroy.js +105 -0
  752. package/node_modules/superagent/node_modules/readable-stream/lib/internal/streams/end-of-stream.js +104 -0
  753. package/node_modules/superagent/node_modules/readable-stream/lib/internal/streams/from-browser.js +3 -0
  754. package/node_modules/superagent/node_modules/readable-stream/lib/internal/streams/from.js +64 -0
  755. package/node_modules/superagent/node_modules/readable-stream/lib/internal/streams/pipeline.js +97 -0
  756. package/node_modules/superagent/node_modules/readable-stream/lib/internal/streams/state.js +27 -0
  757. package/node_modules/superagent/node_modules/readable-stream/lib/internal/streams/stream-browser.js +1 -0
  758. package/node_modules/superagent/node_modules/readable-stream/lib/internal/streams/stream.js +1 -0
  759. package/node_modules/superagent/node_modules/readable-stream/package.json +68 -0
  760. package/node_modules/superagent/node_modules/readable-stream/readable-browser.js +9 -0
  761. package/node_modules/superagent/node_modules/readable-stream/readable.js +16 -0
  762. package/node_modules/superagent/package.json +222 -0
  763. package/node_modules/to-regex-range/LICENSE +21 -0
  764. package/node_modules/to-regex-range/README.md +305 -0
  765. package/node_modules/to-regex-range/index.js +288 -0
  766. package/node_modules/to-regex-range/package.json +88 -0
  767. package/node_modules/util-deprecate/History.md +16 -0
  768. package/node_modules/util-deprecate/LICENSE +24 -0
  769. package/node_modules/util-deprecate/README.md +53 -0
  770. package/node_modules/util-deprecate/browser.js +67 -0
  771. package/node_modules/util-deprecate/node.js +6 -0
  772. package/node_modules/util-deprecate/package.json +27 -0
  773. package/node_modules/uuid/CHANGELOG.md +229 -0
  774. package/node_modules/uuid/CONTRIBUTING.md +18 -0
  775. package/node_modules/uuid/LICENSE.md +9 -0
  776. package/node_modules/uuid/README.md +505 -0
  777. package/node_modules/uuid/dist/bin/uuid +2 -0
  778. package/node_modules/uuid/dist/esm-browser/index.js +9 -0
  779. package/node_modules/uuid/dist/esm-browser/md5.js +215 -0
  780. package/node_modules/uuid/dist/esm-browser/nil.js +1 -0
  781. package/node_modules/uuid/dist/esm-browser/parse.js +35 -0
  782. package/node_modules/uuid/dist/esm-browser/regex.js +1 -0
  783. package/node_modules/uuid/dist/esm-browser/rng.js +19 -0
  784. package/node_modules/uuid/dist/esm-browser/sha1.js +96 -0
  785. package/node_modules/uuid/dist/esm-browser/stringify.js +30 -0
  786. package/node_modules/uuid/dist/esm-browser/v1.js +95 -0
  787. package/node_modules/uuid/dist/esm-browser/v3.js +4 -0
  788. package/node_modules/uuid/dist/esm-browser/v35.js +64 -0
  789. package/node_modules/uuid/dist/esm-browser/v4.js +24 -0
  790. package/node_modules/uuid/dist/esm-browser/v5.js +4 -0
  791. package/node_modules/uuid/dist/esm-browser/validate.js +7 -0
  792. package/node_modules/uuid/dist/esm-browser/version.js +11 -0
  793. package/node_modules/uuid/dist/esm-node/index.js +9 -0
  794. package/node_modules/uuid/dist/esm-node/md5.js +13 -0
  795. package/node_modules/uuid/dist/esm-node/nil.js +1 -0
  796. package/node_modules/uuid/dist/esm-node/parse.js +35 -0
  797. package/node_modules/uuid/dist/esm-node/regex.js +1 -0
  798. package/node_modules/uuid/dist/esm-node/rng.js +12 -0
  799. package/node_modules/uuid/dist/esm-node/sha1.js +13 -0
  800. package/node_modules/uuid/dist/esm-node/stringify.js +29 -0
  801. package/node_modules/uuid/dist/esm-node/v1.js +95 -0
  802. package/node_modules/uuid/dist/esm-node/v3.js +4 -0
  803. package/node_modules/uuid/dist/esm-node/v35.js +64 -0
  804. package/node_modules/uuid/dist/esm-node/v4.js +24 -0
  805. package/node_modules/uuid/dist/esm-node/v5.js +4 -0
  806. package/node_modules/uuid/dist/esm-node/validate.js +7 -0
  807. package/node_modules/uuid/dist/esm-node/version.js +11 -0
  808. package/node_modules/uuid/dist/index.js +79 -0
  809. package/node_modules/uuid/dist/md5-browser.js +223 -0
  810. package/node_modules/uuid/dist/md5.js +23 -0
  811. package/node_modules/uuid/dist/nil.js +8 -0
  812. package/node_modules/uuid/dist/parse.js +45 -0
  813. package/node_modules/uuid/dist/regex.js +8 -0
  814. package/node_modules/uuid/dist/rng-browser.js +26 -0
  815. package/node_modules/uuid/dist/rng.js +24 -0
  816. package/node_modules/uuid/dist/sha1-browser.js +104 -0
  817. package/node_modules/uuid/dist/sha1.js +23 -0
  818. package/node_modules/uuid/dist/stringify.js +39 -0
  819. package/node_modules/uuid/dist/umd/uuid.min.js +1 -0
  820. package/node_modules/uuid/dist/umd/uuidNIL.min.js +1 -0
  821. package/node_modules/uuid/dist/umd/uuidParse.min.js +1 -0
  822. package/node_modules/uuid/dist/umd/uuidStringify.min.js +1 -0
  823. package/node_modules/uuid/dist/umd/uuidValidate.min.js +1 -0
  824. package/node_modules/uuid/dist/umd/uuidVersion.min.js +1 -0
  825. package/node_modules/uuid/dist/umd/uuidv1.min.js +1 -0
  826. package/node_modules/uuid/dist/umd/uuidv3.min.js +1 -0
  827. package/node_modules/uuid/dist/umd/uuidv4.min.js +1 -0
  828. package/node_modules/uuid/dist/umd/uuidv5.min.js +1 -0
  829. package/node_modules/uuid/dist/uuid-bin.js +85 -0
  830. package/node_modules/uuid/dist/v1.js +107 -0
  831. package/node_modules/uuid/dist/v3.js +16 -0
  832. package/node_modules/uuid/dist/v35.js +78 -0
  833. package/node_modules/uuid/dist/v4.js +37 -0
  834. package/node_modules/uuid/dist/v5.js +16 -0
  835. package/node_modules/uuid/dist/validate.js +17 -0
  836. package/node_modules/uuid/dist/version.js +21 -0
  837. package/node_modules/uuid/package.json +135 -0
  838. package/node_modules/uuid/wrapper.mjs +10 -0
  839. package/node_modules/wrap-ansi/index.js +216 -0
  840. package/node_modules/wrap-ansi/license +9 -0
  841. package/node_modules/wrap-ansi/package.json +62 -0
  842. package/node_modules/wrap-ansi/readme.md +91 -0
  843. package/node_modules/wrappy/LICENSE +15 -0
  844. package/node_modules/wrappy/README.md +36 -0
  845. package/node_modules/wrappy/package.json +29 -0
  846. package/node_modules/wrappy/wrappy.js +33 -0
  847. package/node_modules/y18n/CHANGELOG.md +100 -0
  848. package/node_modules/y18n/LICENSE +13 -0
  849. package/node_modules/y18n/README.md +127 -0
  850. package/node_modules/y18n/build/index.cjs +203 -0
  851. package/node_modules/y18n/build/lib/cjs.js +6 -0
  852. package/node_modules/y18n/build/lib/index.js +174 -0
  853. package/node_modules/y18n/build/lib/platform-shims/node.js +19 -0
  854. package/node_modules/y18n/index.mjs +8 -0
  855. package/node_modules/y18n/package.json +70 -0
  856. package/node_modules/yallist/LICENSE +15 -0
  857. package/node_modules/yallist/README.md +204 -0
  858. package/node_modules/yallist/iterator.js +8 -0
  859. package/node_modules/yallist/package.json +29 -0
  860. package/node_modules/yallist/yallist.js +426 -0
  861. package/node_modules/yargs/LICENSE +21 -0
  862. package/node_modules/yargs/README.md +204 -0
  863. package/node_modules/yargs/browser.mjs +7 -0
  864. package/node_modules/yargs/build/index.cjs +1 -0
  865. package/node_modules/yargs/build/lib/argsert.js +62 -0
  866. package/node_modules/yargs/build/lib/command.js +447 -0
  867. package/node_modules/yargs/build/lib/completion-templates.js +48 -0
  868. package/node_modules/yargs/build/lib/completion.js +236 -0
  869. package/node_modules/yargs/build/lib/middleware.js +88 -0
  870. package/node_modules/yargs/build/lib/parse-command.js +32 -0
  871. package/node_modules/yargs/build/lib/typings/common-types.js +9 -0
  872. package/node_modules/yargs/build/lib/typings/yargs-parser-types.js +1 -0
  873. package/node_modules/yargs/build/lib/usage.js +579 -0
  874. package/node_modules/yargs/build/lib/utils/apply-extends.js +59 -0
  875. package/node_modules/yargs/build/lib/utils/is-promise.js +5 -0
  876. package/node_modules/yargs/build/lib/utils/levenshtein.js +34 -0
  877. package/node_modules/yargs/build/lib/utils/maybe-async-result.js +17 -0
  878. package/node_modules/yargs/build/lib/utils/obj-filter.js +10 -0
  879. package/node_modules/yargs/build/lib/utils/process-argv.js +17 -0
  880. package/node_modules/yargs/build/lib/utils/set-blocking.js +12 -0
  881. package/node_modules/yargs/build/lib/utils/which-module.js +10 -0
  882. package/node_modules/yargs/build/lib/validation.js +305 -0
  883. package/node_modules/yargs/build/lib/yargs-factory.js +1497 -0
  884. package/node_modules/yargs/build/lib/yerror.js +9 -0
  885. package/node_modules/yargs/helpers/helpers.mjs +10 -0
  886. package/node_modules/yargs/helpers/index.js +14 -0
  887. package/node_modules/yargs/helpers/package.json +3 -0
  888. package/node_modules/yargs/index.cjs +53 -0
  889. package/node_modules/yargs/index.mjs +8 -0
  890. package/node_modules/yargs/lib/platform-shims/browser.mjs +95 -0
  891. package/node_modules/yargs/lib/platform-shims/esm.mjs +73 -0
  892. package/node_modules/yargs/locales/be.json +46 -0
  893. package/node_modules/yargs/locales/de.json +46 -0
  894. package/node_modules/yargs/locales/en.json +51 -0
  895. package/node_modules/yargs/locales/es.json +46 -0
  896. package/node_modules/yargs/locales/fi.json +49 -0
  897. package/node_modules/yargs/locales/fr.json +53 -0
  898. package/node_modules/yargs/locales/hi.json +49 -0
  899. package/node_modules/yargs/locales/hu.json +46 -0
  900. package/node_modules/yargs/locales/id.json +50 -0
  901. package/node_modules/yargs/locales/it.json +46 -0
  902. package/node_modules/yargs/locales/ja.json +51 -0
  903. package/node_modules/yargs/locales/ko.json +49 -0
  904. package/node_modules/yargs/locales/nb.json +44 -0
  905. package/node_modules/yargs/locales/nl.json +49 -0
  906. package/node_modules/yargs/locales/nn.json +44 -0
  907. package/node_modules/yargs/locales/pirate.json +13 -0
  908. package/node_modules/yargs/locales/pl.json +49 -0
  909. package/node_modules/yargs/locales/pt.json +45 -0
  910. package/node_modules/yargs/locales/pt_BR.json +48 -0
  911. package/node_modules/yargs/locales/ru.json +51 -0
  912. package/node_modules/yargs/locales/th.json +46 -0
  913. package/node_modules/yargs/locales/tr.json +48 -0
  914. package/node_modules/yargs/locales/uk_UA.json +51 -0
  915. package/node_modules/yargs/locales/uz.json +52 -0
  916. package/node_modules/yargs/locales/zh_CN.json +48 -0
  917. package/node_modules/yargs/locales/zh_TW.json +51 -0
  918. package/node_modules/yargs/package.json +123 -0
  919. package/node_modules/yargs/yargs +9 -0
  920. package/node_modules/yargs/yargs.mjs +10 -0
  921. package/node_modules/yargs-parser/CHANGELOG.md +287 -0
  922. package/node_modules/yargs-parser/LICENSE.txt +14 -0
  923. package/node_modules/yargs-parser/README.md +518 -0
  924. package/node_modules/yargs-parser/browser.js +29 -0
  925. package/node_modules/yargs-parser/build/index.cjs +1048 -0
  926. package/node_modules/yargs-parser/build/lib/index.js +60 -0
  927. package/node_modules/yargs-parser/build/lib/string-utils.js +65 -0
  928. package/node_modules/yargs-parser/build/lib/tokenize-arg-string.js +40 -0
  929. package/node_modules/yargs-parser/build/lib/yargs-parser-types.js +12 -0
  930. package/node_modules/yargs-parser/build/lib/yargs-parser.js +1045 -0
  931. package/node_modules/yargs-parser/package.json +88 -0
  932. package/package.json +1 -1
  933. package/src/clients/Client.js +3 -0
  934. package/src/commands/mast/download-report.js +9 -2
@@ -0,0 +1,1376 @@
1
+ "use strict";
2
+
3
+ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
4
+
5
+ /**
6
+ * Module dependencies.
7
+ */
8
+ // eslint-disable-next-line node/no-deprecated-api
9
+ var _require = require('url'),
10
+ parse = _require.parse,
11
+ format = _require.format,
12
+ resolve = _require.resolve;
13
+
14
+ var Stream = require('stream');
15
+
16
+ var https = require('https');
17
+
18
+ var http = require('http');
19
+
20
+ var fs = require('fs');
21
+
22
+ var zlib = require('zlib');
23
+
24
+ var util = require('util');
25
+
26
+ var qs = require('qs');
27
+
28
+ var mime = require('mime');
29
+
30
+ var methods = require('methods');
31
+
32
+ var FormData = require('form-data');
33
+
34
+ var formidable = require('formidable');
35
+
36
+ var debug = require('debug')('superagent');
37
+
38
+ var CookieJar = require('cookiejar');
39
+
40
+ var semver = require('semver');
41
+
42
+ var safeStringify = require('fast-safe-stringify');
43
+
44
+ var utils = require('../utils');
45
+
46
+ var RequestBase = require('../request-base');
47
+
48
+ var _require2 = require('./unzip'),
49
+ unzip = _require2.unzip;
50
+
51
+ var Response = require('./response');
52
+
53
+ var http2;
54
+ if (semver.gte(process.version, 'v10.10.0')) http2 = require('./http2wrapper');
55
+
56
+ function request(method, url) {
57
+ // callback
58
+ if (typeof url === 'function') {
59
+ return new exports.Request('GET', method).end(url);
60
+ } // url first
61
+
62
+
63
+ if (arguments.length === 1) {
64
+ return new exports.Request('GET', method);
65
+ }
66
+
67
+ return new exports.Request(method, url);
68
+ }
69
+
70
+ module.exports = request;
71
+ exports = module.exports;
72
+ /**
73
+ * Expose `Request`.
74
+ */
75
+
76
+ exports.Request = Request;
77
+ /**
78
+ * Expose the agent function
79
+ */
80
+
81
+ exports.agent = require('./agent');
82
+ /**
83
+ * Noop.
84
+ */
85
+
86
+ function noop() {}
87
+ /**
88
+ * Expose `Response`.
89
+ */
90
+
91
+
92
+ exports.Response = Response;
93
+ /**
94
+ * Define "form" mime type.
95
+ */
96
+
97
+ mime.define({
98
+ 'application/x-www-form-urlencoded': ['form', 'urlencoded', 'form-data']
99
+ }, true);
100
+ /**
101
+ * Protocol map.
102
+ */
103
+
104
+ exports.protocols = {
105
+ 'http:': http,
106
+ 'https:': https,
107
+ 'http2:': http2
108
+ };
109
+ /**
110
+ * Default serialization map.
111
+ *
112
+ * superagent.serialize['application/xml'] = function(obj){
113
+ * return 'generated xml here';
114
+ * };
115
+ *
116
+ */
117
+
118
+ exports.serialize = {
119
+ 'application/x-www-form-urlencoded': qs.stringify,
120
+ 'application/json': safeStringify
121
+ };
122
+ /**
123
+ * Default parsers.
124
+ *
125
+ * superagent.parse['application/xml'] = function(res, fn){
126
+ * fn(null, res);
127
+ * };
128
+ *
129
+ */
130
+
131
+ exports.parse = require('./parsers');
132
+ /**
133
+ * Default buffering map. Can be used to set certain
134
+ * response types to buffer/not buffer.
135
+ *
136
+ * superagent.buffer['application/xml'] = true;
137
+ */
138
+
139
+ exports.buffer = {};
140
+ /**
141
+ * Initialize internal header tracking properties on a request instance.
142
+ *
143
+ * @param {Object} req the instance
144
+ * @api private
145
+ */
146
+
147
+ function _initHeaders(req) {
148
+ req._header = {// coerces header names to lowercase
149
+ };
150
+ req.header = {// preserves header name case
151
+ };
152
+ }
153
+ /**
154
+ * Initialize a new `Request` with the given `method` and `url`.
155
+ *
156
+ * @param {String} method
157
+ * @param {String|Object} url
158
+ * @api public
159
+ */
160
+
161
+
162
+ function Request(method, url) {
163
+ Stream.call(this);
164
+ if (typeof url !== 'string') url = format(url);
165
+ this._enableHttp2 = Boolean(process.env.HTTP2_TEST); // internal only
166
+
167
+ this._agent = false;
168
+ this._formData = null;
169
+ this.method = method;
170
+ this.url = url;
171
+
172
+ _initHeaders(this);
173
+
174
+ this.writable = true;
175
+ this._redirects = 0;
176
+ this.redirects(method === 'HEAD' ? 0 : 5);
177
+ this.cookies = '';
178
+ this.qs = {};
179
+ this._query = [];
180
+ this.qsRaw = this._query; // Unused, for backwards compatibility only
181
+
182
+ this._redirectList = [];
183
+ this._streamRequest = false;
184
+ this.once('end', this.clearTimeout.bind(this));
185
+ }
186
+ /**
187
+ * Inherit from `Stream` (which inherits from `EventEmitter`).
188
+ * Mixin `RequestBase`.
189
+ */
190
+
191
+
192
+ util.inherits(Request, Stream); // eslint-disable-next-line new-cap
193
+
194
+ RequestBase(Request.prototype);
195
+ /**
196
+ * Enable or Disable http2.
197
+ *
198
+ * Enable http2.
199
+ *
200
+ * ``` js
201
+ * request.get('http://localhost/')
202
+ * .http2()
203
+ * .end(callback);
204
+ *
205
+ * request.get('http://localhost/')
206
+ * .http2(true)
207
+ * .end(callback);
208
+ * ```
209
+ *
210
+ * Disable http2.
211
+ *
212
+ * ``` js
213
+ * request = request.http2();
214
+ * request.get('http://localhost/')
215
+ * .http2(false)
216
+ * .end(callback);
217
+ * ```
218
+ *
219
+ * @param {Boolean} enable
220
+ * @return {Request} for chaining
221
+ * @api public
222
+ */
223
+
224
+ Request.prototype.http2 = function (bool) {
225
+ if (exports.protocols['http2:'] === undefined) {
226
+ throw new Error('superagent: this version of Node.js does not support http2');
227
+ }
228
+
229
+ this._enableHttp2 = bool === undefined ? true : bool;
230
+ return this;
231
+ };
232
+ /**
233
+ * Queue the given `file` as an attachment to the specified `field`,
234
+ * with optional `options` (or filename).
235
+ *
236
+ * ``` js
237
+ * request.post('http://localhost/upload')
238
+ * .attach('field', Buffer.from('<b>Hello world</b>'), 'hello.html')
239
+ * .end(callback);
240
+ * ```
241
+ *
242
+ * A filename may also be used:
243
+ *
244
+ * ``` js
245
+ * request.post('http://localhost/upload')
246
+ * .attach('files', 'image.jpg')
247
+ * .end(callback);
248
+ * ```
249
+ *
250
+ * @param {String} field
251
+ * @param {String|fs.ReadStream|Buffer} file
252
+ * @param {String|Object} options
253
+ * @return {Request} for chaining
254
+ * @api public
255
+ */
256
+
257
+
258
+ Request.prototype.attach = function (field, file, options) {
259
+ if (file) {
260
+ if (this._data) {
261
+ throw new Error("superagent can't mix .send() and .attach()");
262
+ }
263
+
264
+ var o = options || {};
265
+
266
+ if (typeof options === 'string') {
267
+ o = {
268
+ filename: options
269
+ };
270
+ }
271
+
272
+ if (typeof file === 'string') {
273
+ if (!o.filename) o.filename = file;
274
+ debug('creating `fs.ReadStream` instance for file: %s', file);
275
+ file = fs.createReadStream(file);
276
+ } else if (!o.filename && file.path) {
277
+ o.filename = file.path;
278
+ }
279
+
280
+ this._getFormData().append(field, file, o);
281
+ }
282
+
283
+ return this;
284
+ };
285
+
286
+ Request.prototype._getFormData = function () {
287
+ var _this = this;
288
+
289
+ if (!this._formData) {
290
+ this._formData = new FormData();
291
+
292
+ this._formData.on('error', function (err) {
293
+ debug('FormData error', err);
294
+
295
+ if (_this.called) {
296
+ // The request has already finished and the callback was called.
297
+ // Silently ignore the error.
298
+ return;
299
+ }
300
+
301
+ _this.callback(err);
302
+
303
+ _this.abort();
304
+ });
305
+ }
306
+
307
+ return this._formData;
308
+ };
309
+ /**
310
+ * Gets/sets the `Agent` to use for this HTTP request. The default (if this
311
+ * function is not called) is to opt out of connection pooling (`agent: false`).
312
+ *
313
+ * @param {http.Agent} agent
314
+ * @return {http.Agent}
315
+ * @api public
316
+ */
317
+
318
+
319
+ Request.prototype.agent = function (agent) {
320
+ if (arguments.length === 0) return this._agent;
321
+ this._agent = agent;
322
+ return this;
323
+ };
324
+ /**
325
+ * Set _Content-Type_ response header passed through `mime.getType()`.
326
+ *
327
+ * Examples:
328
+ *
329
+ * request.post('/')
330
+ * .type('xml')
331
+ * .send(xmlstring)
332
+ * .end(callback);
333
+ *
334
+ * request.post('/')
335
+ * .type('json')
336
+ * .send(jsonstring)
337
+ * .end(callback);
338
+ *
339
+ * request.post('/')
340
+ * .type('application/json')
341
+ * .send(jsonstring)
342
+ * .end(callback);
343
+ *
344
+ * @param {String} type
345
+ * @return {Request} for chaining
346
+ * @api public
347
+ */
348
+
349
+
350
+ Request.prototype.type = function (type) {
351
+ return this.set('Content-Type', type.includes('/') ? type : mime.getType(type));
352
+ };
353
+ /**
354
+ * Set _Accept_ response header passed through `mime.getType()`.
355
+ *
356
+ * Examples:
357
+ *
358
+ * superagent.types.json = 'application/json';
359
+ *
360
+ * request.get('/agent')
361
+ * .accept('json')
362
+ * .end(callback);
363
+ *
364
+ * request.get('/agent')
365
+ * .accept('application/json')
366
+ * .end(callback);
367
+ *
368
+ * @param {String} accept
369
+ * @return {Request} for chaining
370
+ * @api public
371
+ */
372
+
373
+
374
+ Request.prototype.accept = function (type) {
375
+ return this.set('Accept', type.includes('/') ? type : mime.getType(type));
376
+ };
377
+ /**
378
+ * Add query-string `val`.
379
+ *
380
+ * Examples:
381
+ *
382
+ * request.get('/shoes')
383
+ * .query('size=10')
384
+ * .query({ color: 'blue' })
385
+ *
386
+ * @param {Object|String} val
387
+ * @return {Request} for chaining
388
+ * @api public
389
+ */
390
+
391
+
392
+ Request.prototype.query = function (val) {
393
+ if (typeof val === 'string') {
394
+ this._query.push(val);
395
+ } else {
396
+ Object.assign(this.qs, val);
397
+ }
398
+
399
+ return this;
400
+ };
401
+ /**
402
+ * Write raw `data` / `encoding` to the socket.
403
+ *
404
+ * @param {Buffer|String} data
405
+ * @param {String} encoding
406
+ * @return {Boolean}
407
+ * @api public
408
+ */
409
+
410
+
411
+ Request.prototype.write = function (data, encoding) {
412
+ var req = this.request();
413
+
414
+ if (!this._streamRequest) {
415
+ this._streamRequest = true;
416
+ }
417
+
418
+ return req.write(data, encoding);
419
+ };
420
+ /**
421
+ * Pipe the request body to `stream`.
422
+ *
423
+ * @param {Stream} stream
424
+ * @param {Object} options
425
+ * @return {Stream}
426
+ * @api public
427
+ */
428
+
429
+
430
+ Request.prototype.pipe = function (stream, options) {
431
+ this.piped = true; // HACK...
432
+
433
+ this.buffer(false);
434
+ this.end();
435
+ return this._pipeContinue(stream, options);
436
+ };
437
+
438
+ Request.prototype._pipeContinue = function (stream, options) {
439
+ var _this2 = this;
440
+
441
+ this.req.once('response', function (res) {
442
+ // redirect
443
+ if (isRedirect(res.statusCode) && _this2._redirects++ !== _this2._maxRedirects) {
444
+ return _this2._redirect(res) === _this2 ? _this2._pipeContinue(stream, options) : undefined;
445
+ }
446
+
447
+ _this2.res = res;
448
+
449
+ _this2._emitResponse();
450
+
451
+ if (_this2._aborted) return;
452
+
453
+ if (_this2._shouldUnzip(res)) {
454
+ var unzipObj = zlib.createUnzip();
455
+ unzipObj.on('error', function (err) {
456
+ if (err && err.code === 'Z_BUF_ERROR') {
457
+ // unexpected end of file is ignored by browsers and curl
458
+ stream.emit('end');
459
+ return;
460
+ }
461
+
462
+ stream.emit('error', err);
463
+ });
464
+ res.pipe(unzipObj).pipe(stream, options);
465
+ } else {
466
+ res.pipe(stream, options);
467
+ }
468
+
469
+ res.once('end', function () {
470
+ _this2.emit('end');
471
+ });
472
+ });
473
+ return stream;
474
+ };
475
+ /**
476
+ * Enable / disable buffering.
477
+ *
478
+ * @return {Boolean} [val]
479
+ * @return {Request} for chaining
480
+ * @api public
481
+ */
482
+
483
+
484
+ Request.prototype.buffer = function (val) {
485
+ this._buffer = val !== false;
486
+ return this;
487
+ };
488
+ /**
489
+ * Redirect to `url
490
+ *
491
+ * @param {IncomingMessage} res
492
+ * @return {Request} for chaining
493
+ * @api private
494
+ */
495
+
496
+
497
+ Request.prototype._redirect = function (res) {
498
+ var url = res.headers.location;
499
+
500
+ if (!url) {
501
+ return this.callback(new Error('No location header for redirect'), res);
502
+ }
503
+
504
+ debug('redirect %s -> %s', this.url, url); // location
505
+
506
+ url = resolve(this.url, url); // ensure the response is being consumed
507
+ // this is required for Node v0.10+
508
+
509
+ res.resume();
510
+ var headers = this.req.getHeaders ? this.req.getHeaders() : this.req._headers;
511
+ var changesOrigin = parse(url).host !== parse(this.url).host; // implementation of 302 following defacto standard
512
+
513
+ if (res.statusCode === 301 || res.statusCode === 302) {
514
+ // strip Content-* related fields
515
+ // in case of POST etc
516
+ headers = utils.cleanHeader(headers, changesOrigin); // force GET
517
+
518
+ this.method = this.method === 'HEAD' ? 'HEAD' : 'GET'; // clear data
519
+
520
+ this._data = null;
521
+ } // 303 is always GET
522
+
523
+
524
+ if (res.statusCode === 303) {
525
+ // strip Content-* related fields
526
+ // in case of POST etc
527
+ headers = utils.cleanHeader(headers, changesOrigin); // force method
528
+
529
+ this.method = 'GET'; // clear data
530
+
531
+ this._data = null;
532
+ } // 307 preserves method
533
+ // 308 preserves method
534
+
535
+
536
+ delete headers.host;
537
+ delete this.req;
538
+ delete this._formData; // remove all add header except User-Agent
539
+
540
+ _initHeaders(this); // redirect
541
+
542
+
543
+ this._endCalled = false;
544
+ this.url = url;
545
+ this.qs = {};
546
+ this._query.length = 0;
547
+ this.set(headers);
548
+ this.emit('redirect', res);
549
+
550
+ this._redirectList.push(this.url);
551
+
552
+ this.end(this._callback);
553
+ return this;
554
+ };
555
+ /**
556
+ * Set Authorization field value with `user` and `pass`.
557
+ *
558
+ * Examples:
559
+ *
560
+ * .auth('tobi', 'learnboost')
561
+ * .auth('tobi:learnboost')
562
+ * .auth('tobi')
563
+ * .auth(accessToken, { type: 'bearer' })
564
+ *
565
+ * @param {String} user
566
+ * @param {String} [pass]
567
+ * @param {Object} [options] options with authorization type 'basic' or 'bearer' ('basic' is default)
568
+ * @return {Request} for chaining
569
+ * @api public
570
+ */
571
+
572
+
573
+ Request.prototype.auth = function (user, pass, options) {
574
+ if (arguments.length === 1) pass = '';
575
+
576
+ if (_typeof(pass) === 'object' && pass !== null) {
577
+ // pass is optional and can be replaced with options
578
+ options = pass;
579
+ pass = '';
580
+ }
581
+
582
+ if (!options) {
583
+ options = {
584
+ type: 'basic'
585
+ };
586
+ }
587
+
588
+ var encoder = function encoder(string) {
589
+ return Buffer.from(string).toString('base64');
590
+ };
591
+
592
+ return this._auth(user, pass, options, encoder);
593
+ };
594
+ /**
595
+ * Set the certificate authority option for https request.
596
+ *
597
+ * @param {Buffer | Array} cert
598
+ * @return {Request} for chaining
599
+ * @api public
600
+ */
601
+
602
+
603
+ Request.prototype.ca = function (cert) {
604
+ this._ca = cert;
605
+ return this;
606
+ };
607
+ /**
608
+ * Set the client certificate key option for https request.
609
+ *
610
+ * @param {Buffer | String} cert
611
+ * @return {Request} for chaining
612
+ * @api public
613
+ */
614
+
615
+
616
+ Request.prototype.key = function (cert) {
617
+ this._key = cert;
618
+ return this;
619
+ };
620
+ /**
621
+ * Set the key, certificate, and CA certs of the client in PFX or PKCS12 format.
622
+ *
623
+ * @param {Buffer | String} cert
624
+ * @return {Request} for chaining
625
+ * @api public
626
+ */
627
+
628
+
629
+ Request.prototype.pfx = function (cert) {
630
+ if (_typeof(cert) === 'object' && !Buffer.isBuffer(cert)) {
631
+ this._pfx = cert.pfx;
632
+ this._passphrase = cert.passphrase;
633
+ } else {
634
+ this._pfx = cert;
635
+ }
636
+
637
+ return this;
638
+ };
639
+ /**
640
+ * Set the client certificate option for https request.
641
+ *
642
+ * @param {Buffer | String} cert
643
+ * @return {Request} for chaining
644
+ * @api public
645
+ */
646
+
647
+
648
+ Request.prototype.cert = function (cert) {
649
+ this._cert = cert;
650
+ return this;
651
+ };
652
+ /**
653
+ * Do not reject expired or invalid TLS certs.
654
+ * sets `rejectUnauthorized=true`. Be warned that this allows MITM attacks.
655
+ *
656
+ * @return {Request} for chaining
657
+ * @api public
658
+ */
659
+
660
+
661
+ Request.prototype.disableTLSCerts = function () {
662
+ this._disableTLSCerts = true;
663
+ return this;
664
+ };
665
+ /**
666
+ * Return an http[s] request.
667
+ *
668
+ * @return {OutgoingMessage}
669
+ * @api private
670
+ */
671
+ // eslint-disable-next-line complexity
672
+
673
+
674
+ Request.prototype.request = function () {
675
+ var _this3 = this;
676
+
677
+ if (this.req) return this.req;
678
+ var options = {};
679
+
680
+ try {
681
+ var query = qs.stringify(this.qs, {
682
+ indices: false,
683
+ strictNullHandling: true
684
+ });
685
+
686
+ if (query) {
687
+ this.qs = {};
688
+
689
+ this._query.push(query);
690
+ }
691
+
692
+ this._finalizeQueryString();
693
+ } catch (err) {
694
+ return this.emit('error', err);
695
+ }
696
+
697
+ var url = this.url;
698
+ var retries = this._retries; // Capture backticks as-is from the final query string built above.
699
+ // Note: this'll only find backticks entered in req.query(String)
700
+ // calls, because qs.stringify unconditionally encodes backticks.
701
+
702
+ var queryStringBackticks;
703
+
704
+ if (url.includes('`')) {
705
+ var queryStartIndex = url.indexOf('?');
706
+
707
+ if (queryStartIndex !== -1) {
708
+ var queryString = url.slice(queryStartIndex + 1);
709
+ queryStringBackticks = queryString.match(/`|%60/g);
710
+ }
711
+ } // default to http://
712
+
713
+
714
+ if (url.indexOf('http') !== 0) url = "http://".concat(url);
715
+ url = parse(url); // See https://github.com/visionmedia/superagent/issues/1367
716
+
717
+ if (queryStringBackticks) {
718
+ var i = 0;
719
+ url.query = url.query.replace(/%60/g, function () {
720
+ return queryStringBackticks[i++];
721
+ });
722
+ url.search = "?".concat(url.query);
723
+ url.path = url.pathname + url.search;
724
+ } // support unix sockets
725
+
726
+
727
+ if (/^https?\+unix:/.test(url.protocol) === true) {
728
+ // get the protocol
729
+ url.protocol = "".concat(url.protocol.split('+')[0], ":"); // get the socket, path
730
+
731
+ var unixParts = url.path.match(/^([^/]+)(.+)$/);
732
+ options.socketPath = unixParts[1].replace(/%2F/g, '/');
733
+ url.path = unixParts[2];
734
+ } // Override IP address of a hostname
735
+
736
+
737
+ if (this._connectOverride) {
738
+ var _url = url,
739
+ hostname = _url.hostname;
740
+ var match = hostname in this._connectOverride ? this._connectOverride[hostname] : this._connectOverride['*'];
741
+
742
+ if (match) {
743
+ // backup the real host
744
+ if (!this._header.host) {
745
+ this.set('host', url.host);
746
+ }
747
+
748
+ var newHost;
749
+ var newPort;
750
+
751
+ if (_typeof(match) === 'object') {
752
+ newHost = match.host;
753
+ newPort = match.port;
754
+ } else {
755
+ newHost = match;
756
+ newPort = url.port;
757
+ } // wrap [ipv6]
758
+
759
+
760
+ url.host = /:/.test(newHost) ? "[".concat(newHost, "]") : newHost;
761
+
762
+ if (newPort) {
763
+ url.host += ":".concat(newPort);
764
+ url.port = newPort;
765
+ }
766
+
767
+ url.hostname = newHost;
768
+ }
769
+ } // options
770
+
771
+
772
+ options.method = this.method;
773
+ options.port = url.port;
774
+ options.path = url.path;
775
+ options.host = url.hostname;
776
+ options.ca = this._ca;
777
+ options.key = this._key;
778
+ options.pfx = this._pfx;
779
+ options.cert = this._cert;
780
+ options.passphrase = this._passphrase;
781
+ options.agent = this._agent;
782
+ options.rejectUnauthorized = typeof this._disableTLSCerts === 'boolean' ? !this._disableTLSCerts : process.env.NODE_TLS_REJECT_UNAUTHORIZED !== '0'; // Allows request.get('https://1.2.3.4/').set('Host', 'example.com')
783
+
784
+ if (this._header.host) {
785
+ options.servername = this._header.host.replace(/:\d+$/, '');
786
+ }
787
+
788
+ if (this._trustLocalhost && /^(?:localhost|127\.0\.0\.\d+|(0*:)+:0*1)$/.test(url.hostname)) {
789
+ options.rejectUnauthorized = false;
790
+ } // initiate request
791
+
792
+
793
+ var mod = this._enableHttp2 ? exports.protocols['http2:'].setProtocol(url.protocol) : exports.protocols[url.protocol]; // request
794
+
795
+ this.req = mod.request(options);
796
+ var req = this.req; // set tcp no delay
797
+
798
+ req.setNoDelay(true);
799
+
800
+ if (options.method !== 'HEAD') {
801
+ req.setHeader('Accept-Encoding', 'gzip, deflate');
802
+ }
803
+
804
+ this.protocol = url.protocol;
805
+ this.host = url.host; // expose events
806
+
807
+ req.once('drain', function () {
808
+ _this3.emit('drain');
809
+ });
810
+ req.on('error', function (err) {
811
+ // flag abortion here for out timeouts
812
+ // because node will emit a faux-error "socket hang up"
813
+ // when request is aborted before a connection is made
814
+ if (_this3._aborted) return; // if not the same, we are in the **old** (cancelled) request,
815
+ // so need to continue (same as for above)
816
+
817
+ if (_this3._retries !== retries) return; // if we've received a response then we don't want to let
818
+ // an error in the request blow up the response
819
+
820
+ if (_this3.response) return;
821
+
822
+ _this3.callback(err);
823
+ }); // auth
824
+
825
+ if (url.auth) {
826
+ var auth = url.auth.split(':');
827
+ this.auth(auth[0], auth[1]);
828
+ }
829
+
830
+ if (this.username && this.password) {
831
+ this.auth(this.username, this.password);
832
+ }
833
+
834
+ for (var key in this.header) {
835
+ if (Object.prototype.hasOwnProperty.call(this.header, key)) req.setHeader(key, this.header[key]);
836
+ } // add cookies
837
+
838
+
839
+ if (this.cookies) {
840
+ if (Object.prototype.hasOwnProperty.call(this._header, 'cookie')) {
841
+ // merge
842
+ var tmpJar = new CookieJar.CookieJar();
843
+ tmpJar.setCookies(this._header.cookie.split(';'));
844
+ tmpJar.setCookies(this.cookies.split(';'));
845
+ req.setHeader('Cookie', tmpJar.getCookies(CookieJar.CookieAccessInfo.All).toValueString());
846
+ } else {
847
+ req.setHeader('Cookie', this.cookies);
848
+ }
849
+ }
850
+
851
+ return req;
852
+ };
853
+ /**
854
+ * Invoke the callback with `err` and `res`
855
+ * and handle arity check.
856
+ *
857
+ * @param {Error} err
858
+ * @param {Response} res
859
+ * @api private
860
+ */
861
+
862
+
863
+ Request.prototype.callback = function (err, res) {
864
+ if (this._shouldRetry(err, res)) {
865
+ return this._retry();
866
+ } // Avoid the error which is emitted from 'socket hang up' to cause the fn undefined error on JS runtime.
867
+
868
+
869
+ var fn = this._callback || noop;
870
+ this.clearTimeout();
871
+ if (this.called) return console.warn('superagent: double callback bug');
872
+ this.called = true;
873
+
874
+ if (!err) {
875
+ try {
876
+ if (!this._isResponseOK(res)) {
877
+ var msg = 'Unsuccessful HTTP response';
878
+
879
+ if (res) {
880
+ msg = http.STATUS_CODES[res.status] || msg;
881
+ }
882
+
883
+ err = new Error(msg);
884
+ err.status = res ? res.status : undefined;
885
+ }
886
+ } catch (err_) {
887
+ err = err_;
888
+ }
889
+ } // It's important that the callback is called outside try/catch
890
+ // to avoid double callback
891
+
892
+
893
+ if (!err) {
894
+ return fn(null, res);
895
+ }
896
+
897
+ err.response = res;
898
+ if (this._maxRetries) err.retries = this._retries - 1; // only emit error event if there is a listener
899
+ // otherwise we assume the callback to `.end()` will get the error
900
+
901
+ if (err && this.listeners('error').length > 0) {
902
+ this.emit('error', err);
903
+ }
904
+
905
+ fn(err, res);
906
+ };
907
+ /**
908
+ * Check if `obj` is a host object,
909
+ *
910
+ * @param {Object} obj host object
911
+ * @return {Boolean} is a host object
912
+ * @api private
913
+ */
914
+
915
+
916
+ Request.prototype._isHost = function (obj) {
917
+ return Buffer.isBuffer(obj) || obj instanceof Stream || obj instanceof FormData;
918
+ };
919
+ /**
920
+ * Initiate request, invoking callback `fn(err, res)`
921
+ * with an instanceof `Response`.
922
+ *
923
+ * @param {Function} fn
924
+ * @return {Request} for chaining
925
+ * @api public
926
+ */
927
+
928
+
929
+ Request.prototype._emitResponse = function (body, files) {
930
+ var response = new Response(this);
931
+ this.response = response;
932
+ response.redirects = this._redirectList;
933
+
934
+ if (undefined !== body) {
935
+ response.body = body;
936
+ }
937
+
938
+ response.files = files;
939
+
940
+ if (this._endCalled) {
941
+ response.pipe = function () {
942
+ throw new Error("end() has already been called, so it's too late to start piping");
943
+ };
944
+ }
945
+
946
+ this.emit('response', response);
947
+ return response;
948
+ };
949
+
950
+ Request.prototype.end = function (fn) {
951
+ this.request();
952
+ debug('%s %s', this.method, this.url);
953
+
954
+ if (this._endCalled) {
955
+ throw new Error('.end() was called twice. This is not supported in superagent');
956
+ }
957
+
958
+ this._endCalled = true; // store callback
959
+
960
+ this._callback = fn || noop;
961
+
962
+ this._end();
963
+ };
964
+
965
+ Request.prototype._end = function () {
966
+ var _this4 = this;
967
+
968
+ if (this._aborted) return this.callback(new Error('The request has been aborted even before .end() was called'));
969
+ var data = this._data;
970
+ var req = this.req;
971
+ var method = this.method;
972
+
973
+ this._setTimeouts(); // body
974
+
975
+
976
+ if (method !== 'HEAD' && !req._headerSent) {
977
+ // serialize stuff
978
+ if (typeof data !== 'string') {
979
+ var contentType = req.getHeader('Content-Type'); // Parse out just the content type from the header (ignore the charset)
980
+
981
+ if (contentType) contentType = contentType.split(';')[0];
982
+ var serialize = this._serializer || exports.serialize[contentType];
983
+
984
+ if (!serialize && isJSON(contentType)) {
985
+ serialize = exports.serialize['application/json'];
986
+ }
987
+
988
+ if (serialize) data = serialize(data);
989
+ } // content-length
990
+
991
+
992
+ if (data && !req.getHeader('Content-Length')) {
993
+ req.setHeader('Content-Length', Buffer.isBuffer(data) ? data.length : Buffer.byteLength(data));
994
+ }
995
+ } // response
996
+ // eslint-disable-next-line complexity
997
+
998
+
999
+ req.once('response', function (res) {
1000
+ debug('%s %s -> %s', _this4.method, _this4.url, res.statusCode);
1001
+
1002
+ if (_this4._responseTimeoutTimer) {
1003
+ clearTimeout(_this4._responseTimeoutTimer);
1004
+ }
1005
+
1006
+ if (_this4.piped) {
1007
+ return;
1008
+ }
1009
+
1010
+ var max = _this4._maxRedirects;
1011
+ var mime = utils.type(res.headers['content-type'] || '') || 'text/plain';
1012
+ var type = mime.split('/')[0];
1013
+ var multipart = type === 'multipart';
1014
+ var redirect = isRedirect(res.statusCode);
1015
+ var responseType = _this4._responseType;
1016
+ _this4.res = res; // redirect
1017
+
1018
+ if (redirect && _this4._redirects++ !== max) {
1019
+ return _this4._redirect(res);
1020
+ }
1021
+
1022
+ if (_this4.method === 'HEAD') {
1023
+ _this4.emit('end');
1024
+
1025
+ _this4.callback(null, _this4._emitResponse());
1026
+
1027
+ return;
1028
+ } // zlib support
1029
+
1030
+
1031
+ if (_this4._shouldUnzip(res)) {
1032
+ unzip(req, res);
1033
+ }
1034
+
1035
+ var buffer = _this4._buffer;
1036
+
1037
+ if (buffer === undefined && mime in exports.buffer) {
1038
+ buffer = Boolean(exports.buffer[mime]);
1039
+ }
1040
+
1041
+ var parser = _this4._parser;
1042
+
1043
+ if (undefined === buffer) {
1044
+ if (parser) {
1045
+ console.warn("A custom superagent parser has been set, but buffering strategy for the parser hasn't been configured. Call `req.buffer(true or false)` or set `superagent.buffer[mime] = true or false`");
1046
+ buffer = true;
1047
+ }
1048
+ }
1049
+
1050
+ if (!parser) {
1051
+ if (responseType) {
1052
+ parser = exports.parse.image; // It's actually a generic Buffer
1053
+
1054
+ buffer = true;
1055
+ } else if (multipart) {
1056
+ var form = new formidable.IncomingForm();
1057
+ parser = form.parse.bind(form);
1058
+ buffer = true;
1059
+ } else if (isImageOrVideo(mime)) {
1060
+ parser = exports.parse.image;
1061
+ buffer = true; // For backwards-compatibility buffering default is ad-hoc MIME-dependent
1062
+ } else if (exports.parse[mime]) {
1063
+ parser = exports.parse[mime];
1064
+ } else if (type === 'text') {
1065
+ parser = exports.parse.text;
1066
+ buffer = buffer !== false; // everyone wants their own white-labeled json
1067
+ } else if (isJSON(mime)) {
1068
+ parser = exports.parse['application/json'];
1069
+ buffer = buffer !== false;
1070
+ } else if (buffer) {
1071
+ parser = exports.parse.text;
1072
+ } else if (undefined === buffer) {
1073
+ parser = exports.parse.image; // It's actually a generic Buffer
1074
+
1075
+ buffer = true;
1076
+ }
1077
+ } // by default only buffer text/*, json and messed up thing from hell
1078
+
1079
+
1080
+ if (undefined === buffer && isText(mime) || isJSON(mime)) {
1081
+ buffer = true;
1082
+ }
1083
+
1084
+ _this4._resBuffered = buffer;
1085
+ var parserHandlesEnd = false;
1086
+
1087
+ if (buffer) {
1088
+ // Protectiona against zip bombs and other nuisance
1089
+ var responseBytesLeft = _this4._maxResponseSize || 200000000;
1090
+ res.on('data', function (buf) {
1091
+ responseBytesLeft -= buf.byteLength || buf.length;
1092
+
1093
+ if (responseBytesLeft < 0) {
1094
+ // This will propagate through error event
1095
+ var err = new Error('Maximum response size reached');
1096
+ err.code = 'ETOOLARGE'; // Parsers aren't required to observe error event,
1097
+ // so would incorrectly report success
1098
+
1099
+ parserHandlesEnd = false; // Will emit error event
1100
+
1101
+ res.destroy(err);
1102
+ }
1103
+ });
1104
+ }
1105
+
1106
+ if (parser) {
1107
+ try {
1108
+ // Unbuffered parsers are supposed to emit response early,
1109
+ // which is weird BTW, because response.body won't be there.
1110
+ parserHandlesEnd = buffer;
1111
+ parser(res, function (err, obj, files) {
1112
+ if (_this4.timedout) {
1113
+ // Timeout has already handled all callbacks
1114
+ return;
1115
+ } // Intentional (non-timeout) abort is supposed to preserve partial response,
1116
+ // even if it doesn't parse.
1117
+
1118
+
1119
+ if (err && !_this4._aborted) {
1120
+ return _this4.callback(err);
1121
+ }
1122
+
1123
+ if (parserHandlesEnd) {
1124
+ _this4.emit('end');
1125
+
1126
+ _this4.callback(null, _this4._emitResponse(obj, files));
1127
+ }
1128
+ });
1129
+ } catch (err) {
1130
+ _this4.callback(err);
1131
+
1132
+ return;
1133
+ }
1134
+ }
1135
+
1136
+ _this4.res = res; // unbuffered
1137
+
1138
+ if (!buffer) {
1139
+ debug('unbuffered %s %s', _this4.method, _this4.url);
1140
+
1141
+ _this4.callback(null, _this4._emitResponse());
1142
+
1143
+ if (multipart) return; // allow multipart to handle end event
1144
+
1145
+ res.once('end', function () {
1146
+ debug('end %s %s', _this4.method, _this4.url);
1147
+
1148
+ _this4.emit('end');
1149
+ });
1150
+ return;
1151
+ } // terminating events
1152
+
1153
+
1154
+ res.once('error', function (err) {
1155
+ parserHandlesEnd = false;
1156
+
1157
+ _this4.callback(err, null);
1158
+ });
1159
+ if (!parserHandlesEnd) res.once('end', function () {
1160
+ debug('end %s %s', _this4.method, _this4.url); // TODO: unless buffering emit earlier to stream
1161
+
1162
+ _this4.emit('end');
1163
+
1164
+ _this4.callback(null, _this4._emitResponse());
1165
+ });
1166
+ });
1167
+ this.emit('request', this);
1168
+
1169
+ var getProgressMonitor = function getProgressMonitor() {
1170
+ var lengthComputable = true;
1171
+ var total = req.getHeader('Content-Length');
1172
+ var loaded = 0;
1173
+ var progress = new Stream.Transform();
1174
+
1175
+ progress._transform = function (chunk, encoding, cb) {
1176
+ loaded += chunk.length;
1177
+
1178
+ _this4.emit('progress', {
1179
+ direction: 'upload',
1180
+ lengthComputable: lengthComputable,
1181
+ loaded: loaded,
1182
+ total: total
1183
+ });
1184
+
1185
+ cb(null, chunk);
1186
+ };
1187
+
1188
+ return progress;
1189
+ };
1190
+
1191
+ var bufferToChunks = function bufferToChunks(buffer) {
1192
+ var chunkSize = 16 * 1024; // default highWaterMark value
1193
+
1194
+ var chunking = new Stream.Readable();
1195
+ var totalLength = buffer.length;
1196
+ var remainder = totalLength % chunkSize;
1197
+ var cutoff = totalLength - remainder;
1198
+
1199
+ for (var i = 0; i < cutoff; i += chunkSize) {
1200
+ var chunk = buffer.slice(i, i + chunkSize);
1201
+ chunking.push(chunk);
1202
+ }
1203
+
1204
+ if (remainder > 0) {
1205
+ var remainderBuffer = buffer.slice(-remainder);
1206
+ chunking.push(remainderBuffer);
1207
+ }
1208
+
1209
+ chunking.push(null); // no more data
1210
+
1211
+ return chunking;
1212
+ }; // if a FormData instance got created, then we send that as the request body
1213
+
1214
+
1215
+ var formData = this._formData;
1216
+
1217
+ if (formData) {
1218
+ // set headers
1219
+ var headers = formData.getHeaders();
1220
+
1221
+ for (var i in headers) {
1222
+ if (Object.prototype.hasOwnProperty.call(headers, i)) {
1223
+ debug('setting FormData header: "%s: %s"', i, headers[i]);
1224
+ req.setHeader(i, headers[i]);
1225
+ }
1226
+ } // attempt to get "Content-Length" header
1227
+ // eslint-disable-next-line handle-callback-err
1228
+
1229
+
1230
+ formData.getLength(function (err, length) {
1231
+ // TODO: Add chunked encoding when no length (if err)
1232
+ debug('got FormData Content-Length: %s', length);
1233
+
1234
+ if (typeof length === 'number') {
1235
+ req.setHeader('Content-Length', length);
1236
+ }
1237
+
1238
+ formData.pipe(getProgressMonitor()).pipe(req);
1239
+ });
1240
+ } else if (Buffer.isBuffer(data)) {
1241
+ bufferToChunks(data).pipe(getProgressMonitor()).pipe(req);
1242
+ } else {
1243
+ req.end(data);
1244
+ }
1245
+ }; // Check whether response has a non-0-sized gzip-encoded body
1246
+
1247
+
1248
+ Request.prototype._shouldUnzip = function (res) {
1249
+ if (res.statusCode === 204 || res.statusCode === 304) {
1250
+ // These aren't supposed to have any body
1251
+ return false;
1252
+ } // header content is a string, and distinction between 0 and no information is crucial
1253
+
1254
+
1255
+ if (res.headers['content-length'] === '0') {
1256
+ // We know that the body is empty (unfortunately, this check does not cover chunked encoding)
1257
+ return false;
1258
+ } // console.log(res);
1259
+
1260
+
1261
+ return /^\s*(?:deflate|gzip)\s*$/.test(res.headers['content-encoding']);
1262
+ };
1263
+ /**
1264
+ * Overrides DNS for selected hostnames. Takes object mapping hostnames to IP addresses.
1265
+ *
1266
+ * When making a request to a URL with a hostname exactly matching a key in the object,
1267
+ * use the given IP address to connect, instead of using DNS to resolve the hostname.
1268
+ *
1269
+ * A special host `*` matches every hostname (keep redirects in mind!)
1270
+ *
1271
+ * request.connect({
1272
+ * 'test.example.com': '127.0.0.1',
1273
+ * 'ipv6.example.com': '::1',
1274
+ * })
1275
+ */
1276
+
1277
+
1278
+ Request.prototype.connect = function (connectOverride) {
1279
+ if (typeof connectOverride === 'string') {
1280
+ this._connectOverride = {
1281
+ '*': connectOverride
1282
+ };
1283
+ } else if (_typeof(connectOverride) === 'object') {
1284
+ this._connectOverride = connectOverride;
1285
+ } else {
1286
+ this._connectOverride = undefined;
1287
+ }
1288
+
1289
+ return this;
1290
+ };
1291
+
1292
+ Request.prototype.trustLocalhost = function (toggle) {
1293
+ this._trustLocalhost = toggle === undefined ? true : toggle;
1294
+ return this;
1295
+ }; // generate HTTP verb methods
1296
+
1297
+
1298
+ if (!methods.includes('del')) {
1299
+ // create a copy so we don't cause conflicts with
1300
+ // other packages using the methods package and
1301
+ // npm 3.x
1302
+ methods = methods.slice(0);
1303
+ methods.push('del');
1304
+ }
1305
+
1306
+ methods.forEach(function (method) {
1307
+ var name = method;
1308
+ method = method === 'del' ? 'delete' : method;
1309
+ method = method.toUpperCase();
1310
+
1311
+ request[name] = function (url, data, fn) {
1312
+ var req = request(method, url);
1313
+
1314
+ if (typeof data === 'function') {
1315
+ fn = data;
1316
+ data = null;
1317
+ }
1318
+
1319
+ if (data) {
1320
+ if (method === 'GET' || method === 'HEAD') {
1321
+ req.query(data);
1322
+ } else {
1323
+ req.send(data);
1324
+ }
1325
+ }
1326
+
1327
+ if (fn) req.end(fn);
1328
+ return req;
1329
+ };
1330
+ });
1331
+ /**
1332
+ * Check if `mime` is text and should be buffered.
1333
+ *
1334
+ * @param {String} mime
1335
+ * @return {Boolean}
1336
+ * @api public
1337
+ */
1338
+
1339
+ function isText(mime) {
1340
+ var parts = mime.split('/');
1341
+ var type = parts[0];
1342
+ var subtype = parts[1];
1343
+ return type === 'text' || subtype === 'x-www-form-urlencoded';
1344
+ }
1345
+
1346
+ function isImageOrVideo(mime) {
1347
+ var type = mime.split('/')[0];
1348
+ return type === 'image' || type === 'video';
1349
+ }
1350
+ /**
1351
+ * Check if `mime` is json or has +json structured syntax suffix.
1352
+ *
1353
+ * @param {String} mime
1354
+ * @return {Boolean}
1355
+ * @api private
1356
+ */
1357
+
1358
+
1359
+ function isJSON(mime) {
1360
+ // should match /json or +json
1361
+ // but not /json-seq
1362
+ return /[/+]json($|[^-\w])/.test(mime);
1363
+ }
1364
+ /**
1365
+ * Check if we should follow the redirect `code`.
1366
+ *
1367
+ * @param {Number} code
1368
+ * @return {Boolean}
1369
+ * @api private
1370
+ */
1371
+
1372
+
1373
+ function isRedirect(code) {
1374
+ return [301, 302, 303, 305, 307, 308].includes(code);
1375
+ }
1376
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ub2RlL2luZGV4LmpzIl0sIm5hbWVzIjpbInJlcXVpcmUiLCJwYXJzZSIsImZvcm1hdCIsInJlc29sdmUiLCJTdHJlYW0iLCJodHRwcyIsImh0dHAiLCJmcyIsInpsaWIiLCJ1dGlsIiwicXMiLCJtaW1lIiwibWV0aG9kcyIsIkZvcm1EYXRhIiwiZm9ybWlkYWJsZSIsImRlYnVnIiwiQ29va2llSmFyIiwic2VtdmVyIiwic2FmZVN0cmluZ2lmeSIsInV0aWxzIiwiUmVxdWVzdEJhc2UiLCJ1bnppcCIsIlJlc3BvbnNlIiwiaHR0cDIiLCJndGUiLCJwcm9jZXNzIiwidmVyc2lvbiIsInJlcXVlc3QiLCJtZXRob2QiLCJ1cmwiLCJleHBvcnRzIiwiUmVxdWVzdCIsImVuZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsIm1vZHVsZSIsImFnZW50Iiwibm9vcCIsImRlZmluZSIsInByb3RvY29scyIsInNlcmlhbGl6ZSIsInN0cmluZ2lmeSIsImJ1ZmZlciIsIl9pbml0SGVhZGVycyIsInJlcSIsIl9oZWFkZXIiLCJoZWFkZXIiLCJjYWxsIiwiX2VuYWJsZUh0dHAyIiwiQm9vbGVhbiIsImVudiIsIkhUVFAyX1RFU1QiLCJfYWdlbnQiLCJfZm9ybURhdGEiLCJ3cml0YWJsZSIsIl9yZWRpcmVjdHMiLCJyZWRpcmVjdHMiLCJjb29raWVzIiwiX3F1ZXJ5IiwicXNSYXciLCJfcmVkaXJlY3RMaXN0IiwiX3N0cmVhbVJlcXVlc3QiLCJvbmNlIiwiY2xlYXJUaW1lb3V0IiwiYmluZCIsImluaGVyaXRzIiwicHJvdG90eXBlIiwiYm9vbCIsInVuZGVmaW5lZCIsIkVycm9yIiwiYXR0YWNoIiwiZmllbGQiLCJmaWxlIiwib3B0aW9ucyIsIl9kYXRhIiwibyIsImZpbGVuYW1lIiwiY3JlYXRlUmVhZFN0cmVhbSIsInBhdGgiLCJfZ2V0Rm9ybURhdGEiLCJhcHBlbmQiLCJvbiIsImVyciIsImNhbGxlZCIsImNhbGxiYWNrIiwiYWJvcnQiLCJ0eXBlIiwic2V0IiwiaW5jbHVkZXMiLCJnZXRUeXBlIiwiYWNjZXB0IiwicXVlcnkiLCJ2YWwiLCJwdXNoIiwiT2JqZWN0IiwiYXNzaWduIiwid3JpdGUiLCJkYXRhIiwiZW5jb2RpbmciLCJwaXBlIiwic3RyZWFtIiwicGlwZWQiLCJfcGlwZUNvbnRpbnVlIiwicmVzIiwiaXNSZWRpcmVjdCIsInN0YXR1c0NvZGUiLCJfbWF4UmVkaXJlY3RzIiwiX3JlZGlyZWN0IiwiX2VtaXRSZXNwb25zZSIsIl9hYm9ydGVkIiwiX3Nob3VsZFVuemlwIiwidW56aXBPYmoiLCJjcmVhdGVVbnppcCIsImNvZGUiLCJlbWl0IiwiX2J1ZmZlciIsImhlYWRlcnMiLCJsb2NhdGlvbiIsInJlc3VtZSIsImdldEhlYWRlcnMiLCJfaGVhZGVycyIsImNoYW5nZXNPcmlnaW4iLCJob3N0IiwiY2xlYW5IZWFkZXIiLCJfZW5kQ2FsbGVkIiwiX2NhbGxiYWNrIiwiYXV0aCIsInVzZXIiLCJwYXNzIiwiZW5jb2RlciIsInN0cmluZyIsIkJ1ZmZlciIsImZyb20iLCJ0b1N0cmluZyIsIl9hdXRoIiwiY2EiLCJjZXJ0IiwiX2NhIiwia2V5IiwiX2tleSIsInBmeCIsImlzQnVmZmVyIiwiX3BmeCIsIl9wYXNzcGhyYXNlIiwicGFzc3BocmFzZSIsIl9jZXJ0IiwiZGlzYWJsZVRMU0NlcnRzIiwiX2Rpc2FibGVUTFNDZXJ0cyIsImluZGljZXMiLCJzdHJpY3ROdWxsSGFuZGxpbmciLCJfZmluYWxpemVRdWVyeVN0cmluZyIsInJldHJpZXMiLCJfcmV0cmllcyIsInF1ZXJ5U3RyaW5nQmFja3RpY2tzIiwicXVlcnlTdGFydEluZGV4IiwiaW5kZXhPZiIsInF1ZXJ5U3RyaW5nIiwic2xpY2UiLCJtYXRjaCIsImkiLCJyZXBsYWNlIiwic2VhcmNoIiwicGF0aG5hbWUiLCJ0ZXN0IiwicHJvdG9jb2wiLCJzcGxpdCIsInVuaXhQYXJ0cyIsInNvY2tldFBhdGgiLCJfY29ubmVjdE92ZXJyaWRlIiwiaG9zdG5hbWUiLCJuZXdIb3N0IiwibmV3UG9ydCIsInBvcnQiLCJyZWplY3RVbmF1dGhvcml6ZWQiLCJOT0RFX1RMU19SRUpFQ1RfVU5BVVRIT1JJWkVEIiwic2VydmVybmFtZSIsIl90cnVzdExvY2FsaG9zdCIsIm1vZCIsInNldFByb3RvY29sIiwic2V0Tm9EZWxheSIsInNldEhlYWRlciIsInJlc3BvbnNlIiwidXNlcm5hbWUiLCJwYXNzd29yZCIsImhhc093blByb3BlcnR5IiwidG1wSmFyIiwic2V0Q29va2llcyIsImNvb2tpZSIsImdldENvb2tpZXMiLCJDb29raWVBY2Nlc3NJbmZvIiwiQWxsIiwidG9WYWx1ZVN0cmluZyIsIl9zaG91bGRSZXRyeSIsIl9yZXRyeSIsImZuIiwiY29uc29sZSIsIndhcm4iLCJfaXNSZXNwb25zZU9LIiwibXNnIiwiU1RBVFVTX0NPREVTIiwic3RhdHVzIiwiZXJyXyIsIl9tYXhSZXRyaWVzIiwibGlzdGVuZXJzIiwiX2lzSG9zdCIsIm9iaiIsImJvZHkiLCJmaWxlcyIsIl9lbmQiLCJfc2V0VGltZW91dHMiLCJfaGVhZGVyU2VudCIsImNvbnRlbnRUeXBlIiwiZ2V0SGVhZGVyIiwiX3NlcmlhbGl6ZXIiLCJpc0pTT04iLCJieXRlTGVuZ3RoIiwiX3Jlc3BvbnNlVGltZW91dFRpbWVyIiwibWF4IiwibXVsdGlwYXJ0IiwicmVkaXJlY3QiLCJyZXNwb25zZVR5cGUiLCJfcmVzcG9uc2VUeXBlIiwicGFyc2VyIiwiX3BhcnNlciIsImltYWdlIiwiZm9ybSIsIkluY29taW5nRm9ybSIsImlzSW1hZ2VPclZpZGVvIiwidGV4dCIsImlzVGV4dCIsIl9yZXNCdWZmZXJlZCIsInBhcnNlckhhbmRsZXNFbmQiLCJyZXNwb25zZUJ5dGVzTGVmdCIsIl9tYXhSZXNwb25zZVNpemUiLCJidWYiLCJkZXN0cm95IiwidGltZWRvdXQiLCJnZXRQcm9ncmVzc01vbml0b3IiLCJsZW5ndGhDb21wdXRhYmxlIiwidG90YWwiLCJsb2FkZWQiLCJwcm9ncmVzcyIsIlRyYW5zZm9ybSIsIl90cmFuc2Zvcm0iLCJjaHVuayIsImNiIiwiZGlyZWN0aW9uIiwiYnVmZmVyVG9DaHVua3MiLCJjaHVua1NpemUiLCJjaHVua2luZyIsIlJlYWRhYmxlIiwidG90YWxMZW5ndGgiLCJyZW1haW5kZXIiLCJjdXRvZmYiLCJyZW1haW5kZXJCdWZmZXIiLCJmb3JtRGF0YSIsImdldExlbmd0aCIsImNvbm5lY3QiLCJjb25uZWN0T3ZlcnJpZGUiLCJ0cnVzdExvY2FsaG9zdCIsInRvZ2dsZSIsImZvckVhY2giLCJuYW1lIiwidG9VcHBlckNhc2UiLCJzZW5kIiwicGFydHMiLCJzdWJ0eXBlIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUE7OztBQUlBO2VBQ21DQSxPQUFPLENBQUMsS0FBRCxDO0lBQWxDQyxLLFlBQUFBLEs7SUFBT0MsTSxZQUFBQSxNO0lBQVFDLE8sWUFBQUEsTzs7QUFDdkIsSUFBTUMsTUFBTSxHQUFHSixPQUFPLENBQUMsUUFBRCxDQUF0Qjs7QUFDQSxJQUFNSyxLQUFLLEdBQUdMLE9BQU8sQ0FBQyxPQUFELENBQXJCOztBQUNBLElBQU1NLElBQUksR0FBR04sT0FBTyxDQUFDLE1BQUQsQ0FBcEI7O0FBQ0EsSUFBTU8sRUFBRSxHQUFHUCxPQUFPLENBQUMsSUFBRCxDQUFsQjs7QUFDQSxJQUFNUSxJQUFJLEdBQUdSLE9BQU8sQ0FBQyxNQUFELENBQXBCOztBQUNBLElBQU1TLElBQUksR0FBR1QsT0FBTyxDQUFDLE1BQUQsQ0FBcEI7O0FBQ0EsSUFBTVUsRUFBRSxHQUFHVixPQUFPLENBQUMsSUFBRCxDQUFsQjs7QUFDQSxJQUFNVyxJQUFJLEdBQUdYLE9BQU8sQ0FBQyxNQUFELENBQXBCOztBQUNBLElBQUlZLE9BQU8sR0FBR1osT0FBTyxDQUFDLFNBQUQsQ0FBckI7O0FBQ0EsSUFBTWEsUUFBUSxHQUFHYixPQUFPLENBQUMsV0FBRCxDQUF4Qjs7QUFDQSxJQUFNYyxVQUFVLEdBQUdkLE9BQU8sQ0FBQyxZQUFELENBQTFCOztBQUNBLElBQU1lLEtBQUssR0FBR2YsT0FBTyxDQUFDLE9BQUQsQ0FBUCxDQUFpQixZQUFqQixDQUFkOztBQUNBLElBQU1n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QUFFQSxTQUFPL0UsSUFBSSxLQUFLLE9BQVQsSUFBb0JBLElBQUksS0FBSyxPQUFwQztBQUNEO0FBRUQ7Ozs7Ozs7OztBQVFBLFNBQVNnSSxNQUFULENBQWdCM00sSUFBaEIsRUFBc0I7QUFDcEI7QUFDQTtBQUNBLFNBQU8scUJBQXFCd0osSUFBckIsQ0FBMEJ4SixJQUExQixDQUFQO0FBQ0Q7QUFFRDs7Ozs7Ozs7O0FBUUEsU0FBUzZGLFVBQVQsQ0FBb0JTLElBQXBCLEVBQTBCO0FBQ3hCLFNBQU8sQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXLEdBQVgsRUFBZ0IsR0FBaEIsRUFBcUIsR0FBckIsRUFBMEIsR0FBMUIsRUFBK0J6QixRQUEvQixDQUF3Q3lCLElBQXhDLENBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqL1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm9kZS9uby1kZXByZWNhdGVkLWFwaVxuY29uc3QgeyBwYXJzZSwgZm9ybWF0LCByZXNvbHZlIH0gPSByZXF1aXJlKCd1cmwnKTtcbmNvbnN0IFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpO1xuY29uc3QgaHR0cHMgPSByZXF1aXJlKCdodHRwcycpO1xuY29uc3QgaHR0cCA9IHJlcXVpcmUoJ2h0dHAnKTtcbmNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKTtcbmNvbnN0IHpsaWIgPSByZXF1aXJlKCd6bGliJyk7XG5jb25zdCB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuY29uc3QgcXMgPSByZXF1aXJlKCdxcycpO1xuY29uc3QgbWltZSA9IHJlcXVpcmUoJ21pbWUnKTtcbmxldCBtZXRob2RzID0gcmVxdWlyZSgnbWV0aG9kcycpO1xuY29uc3QgRm9ybURhdGEgPSByZXF1aXJlKCdmb3JtLWRhdGEnKTtcbmNvbnN0IGZvcm1pZGFibGUgPSByZXF1aXJlKCdmb3JtaWRhYmxlJyk7XG5jb25zdCBkZWJ1ZyA9IHJlcXVpcmUoJ2RlYnVnJykoJ3N1cGVyYWdlbnQnKTtcbmNvbnN0IENvb2tpZUphciA9IHJlcXVpcmUoJ2Nvb2tpZWphcicpO1xuY29uc3Qgc2VtdmVyID0gcmVxdWlyZSgnc2VtdmVyJyk7XG5jb25zdCBzYWZlU3RyaW5naWZ5ID0gcmVxdWlyZSgnZmFzdC1zYWZlLXN0cmluZ2lmeScpO1xuXG5jb25zdCB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5jb25zdCBSZXF1ZXN0QmFzZSA9IHJlcXVpcmUoJy4uL3JlcXVlc3QtYmFzZScpO1xuY29uc3QgeyB1bnppcCB9ID0gcmVxdWlyZSgnLi91bnppcCcpO1xuY29uc3QgUmVzcG9uc2UgPSByZXF1aXJlKCcuL3Jlc3BvbnNlJyk7XG5cbmxldCBodHRwMjtcblxuaWYgKHNlbXZlci5ndGUocHJvY2Vzcy52ZXJzaW9uLCAndjEwLjEwLjAnKSkgaHR0cDIgPSByZXF1aXJlKCcuL2h0dHAyd3JhcHBlcicpO1xuXG5mdW5jdGlvbiByZXF1ZXN0KG1ldGhvZCwgdXJsKSB7XG4gIC8vIGNhbGxiYWNrXG4gIGlmICh0eXBlb2YgdXJsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG5ldyBleHBvcnRzLlJlcXVlc3QoJ0dFVCcsIG1ldGhvZCkuZW5kKHVybCk7XG4gIH1cblxuICAvLyB1cmwgZmlyc3RcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gbmV3IGV4cG9ydHMuUmVxdWVzdCgnR0VUJywgbWV0aG9kKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgZXhwb3J0cy5SZXF1ZXN0KG1ldGhvZCwgdXJsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1ZXN0O1xuZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzO1xuXG4vKipcbiAqIEV4cG9zZSBgUmVxdWVzdGAuXG4gKi9cblxuZXhwb3J0cy5SZXF1ZXN0ID0gUmVxdWVzdDtcblxuLyoqXG4gKiBFeHBvc2UgdGhlIGFnZW50IGZ1bmN0aW9uXG4gKi9cblxuZXhwb3J0cy5hZ2VudCA9IHJlcXVpcmUoJy4vYWdlbnQnKTtcblxuLyoqXG4gKiBOb29wLlxuICovXG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG4vKipcbiAqIEV4cG9zZSBgUmVzcG9uc2VgLlxuICovXG5cbmV4cG9ydHMuUmVzcG9uc2UgPSBSZXNwb25zZTtcblxuLyoqXG4gKiBEZWZpbmUgXCJmb3JtXCIgbWltZSB0eXBlLlxuICovXG5cbm1pbWUuZGVmaW5lKFxuICB7XG4gICAgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCc6IFsnZm9ybScsICd1cmxlbmNvZGVkJywgJ2Zvcm0tZGF0YSddXG4gIH0sXG4gIHRydWVcbik7XG5cbi8qKlxuICogUHJvdG9jb2wgbWFwLlxuICovXG5cbmV4cG9ydHMucHJvdG9jb2xzID0ge1xuICAnaHR0cDonOiBodHRwLFxuICAnaHR0cHM6JzogaHR0cHMsXG4gICdodHRwMjonOiBodHRwMlxufTtcblxuLyoqXG4gKiBEZWZhdWx0IHNlcmlhbGl6YXRpb24gbWFwLlxuICpcbiAqICAgICBzdXBlcmFnZW50LnNlcmlhbGl6ZVsnYXBwbGljYXRpb24veG1sJ10gPSBmdW5jdGlvbihvYmope1xuICogICAgICAgcmV0dXJuICdnZW5lcmF0ZWQgeG1sIGhlcmUnO1xuICogICAgIH07XG4gKlxuICovXG5cbmV4cG9ydHMuc2VyaWFsaXplID0ge1xuICAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJzogcXMuc3RyaW5naWZ5LFxuICAnYXBwbGljYXRpb24vanNvbic6IHNhZmVTdHJpbmdpZnlcbn07XG5cbi8qKlxuICogRGVmYXVsdCBwYXJzZXJzLlxuICpcbiAqICAgICBzdXBlcmFnZW50LnBhcnNlWydhcHBsaWNhdGlvbi94bWwnXSA9IGZ1bmN0aW9uKHJlcywgZm4pe1xuICogICAgICAgZm4obnVsbCwgcmVzKTtcbiAqICAgICB9O1xuICpcbiAqL1xuXG5leHBvcnRzLnBhcnNlID0gcmVxdWlyZSgnLi9wYXJzZXJzJyk7XG5cbi8qKlxuICogRGVmYXVsdCBidWZmZXJpbmcgbWFwLiBDYW4gYmUgdXNlZCB0byBzZXQgY2VydGFpblxuICogcmVzcG9uc2UgdHlwZXMgdG8gYnVmZmVyL25vdCBidWZmZXIuXG4gKlxuICogICAgIHN1cGVyYWdlbnQuYnVmZmVyWydhcHBsaWNhdGlvbi94bWwnXSA9IHRydWU7XG4gKi9cbmV4cG9ydHMuYnVmZmVyID0ge307XG5cbi8qKlxuICogSW5pdGlhbGl6ZSBpbnRlcm5hbCBoZWFkZXIgdHJhY2tpbmcgcHJvcGVydGllcyBvbiBhIHJlcXVlc3QgaW5zdGFuY2UuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHJlcSB0aGUgaW5zdGFuY2VcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBfaW5pdEhlYWRlcnMocmVxKSB7XG4gIHJlcS5faGVhZGVyID0ge1xuICAgIC8vIGNvZXJjZXMgaGVhZGVyIG5hbWVzIHRvIGxvd2VyY2FzZVxuICB9O1xuICByZXEuaGVhZGVyID0ge1xuICAgIC8vIHByZXNlcnZlcyBoZWFkZXIgbmFtZSBjYXNlXG4gIH07XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZSBhIG5ldyBgUmVxdWVzdGAgd2l0aCB0aGUgZ2l2ZW4gYG1ldGhvZGAgYW5kIGB1cmxgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBtZXRob2RcbiAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gdXJsXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIFJlcXVlc3QobWV0aG9kLCB1cmwpIHtcbiAgU3RyZWFtLmNhbGwodGhpcyk7XG4gIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykgdXJsID0gZm9ybWF0KHVybCk7XG4gIHRoaXMuX2VuYWJsZUh0dHAyID0gQm9vbGVhbihwcm9jZXNzLmVudi5IVFRQMl9URVNUKTsgLy8gaW50ZXJuYWwgb25seVxuICB0aGlzLl9hZ2VudCA9IGZhbHNlO1xuICB0aGlzLl9mb3JtRGF0YSA9IG51bGw7XG4gIHRoaXMubWV0aG9kID0gbWV0aG9kO1xuICB0aGlzLnVybCA9IHVybDtcbiAgX2luaXRIZWFkZXJzKHRoaXMpO1xuICB0aGlzLndyaXRhYmxlID0gdHJ1ZTtcbiAgdGhpcy5fcmVkaXJlY3RzID0gMDtcbiAgdGhpcy5yZWRpcmVjdHMobWV0aG9kID09PSAnSEVBRCcgPyAwIDogNSk7XG4gIHRoaXMuY29va2llcyA9ICcnO1xuICB0aGlzLnFzID0ge307XG4gIHRoaXMuX3F1ZXJ5ID0gW107XG4gIHRoaXMucXNSYXcgPSB0aGlzLl9xdWVyeTsgLy8gVW51c2VkLCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgb25seVxuICB0aGlzLl9yZWRpcmVjdExpc3QgPSBbXTtcbiAgdGhpcy5fc3RyZWFtUmVxdWVzdCA9IGZhbHNlO1xuICB0aGlzLm9uY2UoJ2VuZCcsIHRoaXMuY2xlYXJUaW1lb3V0LmJpbmQodGhpcykpO1xufVxuXG4vKipcbiAqIEluaGVyaXQgZnJvbSBgU3RyZWFtYCAod2hpY2ggaW5oZXJpdHMgZnJvbSBgRXZlbnRFbWl0dGVyYCkuXG4gKiBNaXhpbiBgUmVxdWVzdEJhc2VgLlxuICovXG51dGlsLmluaGVyaXRzKFJlcXVlc3QsIFN0cmVhbSk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbmV3LWNhcFxuUmVxdWVzdEJhc2UoUmVxdWVzdC5wcm90b3R5cGUpO1xuXG4vKipcbiAqIEVuYWJsZSBvciBEaXNhYmxlIGh0dHAyLlxuICpcbiAqIEVuYWJsZSBodHRwMi5cbiAqXG4gKiBgYGAganNcbiAqIHJlcXVlc3QuZ2V0KCdodHRwOi8vbG9jYWxob3N0LycpXG4gKiAgIC5odHRwMigpXG4gKiAgIC5lbmQoY2FsbGJhY2spO1xuICpcbiAqIHJlcXVlc3QuZ2V0KCdodHRwOi8vbG9jYWxob3N0LycpXG4gKiAgIC5odHRwMih0cnVlKVxuICogICAuZW5kKGNhbGxiYWNrKTtcbiAqIGBgYFxuICpcbiAqIERpc2FibGUgaHR0cDIuXG4gKlxuICogYGBgIGpzXG4gKiByZXF1ZXN0ID0gcmVxdWVzdC5odHRwMigpO1xuICogcmVxdWVzdC5nZXQoJ2h0dHA6Ly9sb2NhbGhvc3QvJylcbiAqICAgLmh0dHAyKGZhbHNlKVxuICogICAuZW5kKGNhbGxiYWNrKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gZW5hYmxlXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuaHR0cDIgPSBmdW5jdGlvbihib29sKSB7XG4gIGlmIChleHBvcnRzLnByb3RvY29sc1snaHR0cDI6J10gPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdzdXBlcmFnZW50OiB0aGlzIHZlcnNpb24gb2YgTm9kZS5qcyBkb2VzIG5vdCBzdXBwb3J0IGh0dHAyJ1xuICAgICk7XG4gIH1cblxuICB0aGlzLl9lbmFibGVIdHRwMiA9IGJvb2wgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBib29sO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUXVldWUgdGhlIGdpdmVuIGBmaWxlYCBhcyBhbiBhdHRhY2htZW50IHRvIHRoZSBzcGVjaWZpZWQgYGZpZWxkYCxcbiAqIHdpdGggb3B0aW9uYWwgYG9wdGlvbnNgIChvciBmaWxlbmFtZSkuXG4gKlxuICogYGBgIGpzXG4gKiByZXF1ZXN0LnBvc3QoJ2h0dHA6Ly9sb2NhbGhvc3QvdXBsb2FkJylcbiAqICAgLmF0dGFjaCgnZmllbGQnLCBCdWZmZXIuZnJvbSgnPGI+SGVsbG8gd29ybGQ8L2I+JyksICdoZWxsby5odG1sJylcbiAqICAgLmVuZChjYWxsYmFjayk7XG4gKiBgYGBcbiAqXG4gKiBBIGZpbGVuYW1lIG1heSBhbHNvIGJlIHVzZWQ6XG4gKlxuICogYGBgIGpzXG4gKiByZXF1ZXN0LnBvc3QoJ2h0dHA6Ly9sb2NhbGhvc3QvdXBsb2FkJylcbiAqICAgLmF0dGFjaCgnZmlsZXMnLCAnaW1hZ2UuanBnJylcbiAqICAgLmVuZChjYWxsYmFjayk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZmllbGRcbiAqIEBwYXJhbSB7U3RyaW5nfGZzLlJlYWRTdHJlYW18QnVmZmVyfSBmaWxlXG4gKiBAcGFyYW0ge1N0cmluZ3xPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5hdHRhY2ggPSBmdW5jdGlvbihmaWVsZCwgZmlsZSwgb3B0aW9ucykge1xuICBpZiAoZmlsZSkge1xuICAgIGlmICh0aGlzLl9kYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzdXBlcmFnZW50IGNhbid0IG1peCAuc2VuZCgpIGFuZCAuYXR0YWNoKClcIik7XG4gICAgfVxuXG4gICAgbGV0IG8gPSBvcHRpb25zIHx8IHt9O1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG8gPSB7IGZpbGVuYW1lOiBvcHRpb25zIH07XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmaWxlID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKCFvLmZpbGVuYW1lKSBvLmZpbGVuYW1lID0gZmlsZTtcbiAgICAgIGRlYnVnKCdjcmVhdGluZyBgZnMuUmVhZFN0cmVhbWAgaW5zdGFuY2UgZm9yIGZpbGU6ICVzJywgZmlsZSk7XG4gICAgICBmaWxlID0gZnMuY3JlYXRlUmVhZFN0cmVhbShmaWxlKTtcbiAgICB9IGVsc2UgaWYgKCFvLmZpbGVuYW1lICYmIGZpbGUucGF0aCkge1xuICAgICAgby5maWxlbmFtZSA9IGZpbGUucGF0aDtcbiAgICB9XG5cbiAgICB0aGlzLl9nZXRGb3JtRGF0YSgpLmFwcGVuZChmaWVsZCwgZmlsZSwgbyk7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cblJlcXVlc3QucHJvdG90eXBlLl9nZXRGb3JtRGF0YSA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXRoaXMuX2Zvcm1EYXRhKSB7XG4gICAgdGhpcy5fZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICB0aGlzLl9mb3JtRGF0YS5vbignZXJyb3InLCBlcnIgPT4ge1xuICAgICAgZGVidWcoJ0Zvcm1EYXRhIGVycm9yJywgZXJyKTtcbiAgICAgIGlmICh0aGlzLmNhbGxlZCkge1xuICAgICAgICAvLyBUaGUgcmVxdWVzdCBoYXMgYWxyZWFkeSBmaW5pc2hlZCBhbmQgdGhlIGNhbGxiYWNrIHdhcyBjYWxsZWQuXG4gICAgICAgIC8vIFNpbGVudGx5IGlnbm9yZSB0aGUgZXJyb3IuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jYWxsYmFjayhlcnIpO1xuICAgICAgdGhpcy5hYm9ydCgpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuX2Zvcm1EYXRhO1xufTtcblxuLyoqXG4gKiBHZXRzL3NldHMgdGhlIGBBZ2VudGAgdG8gdXNlIGZvciB0aGlzIEhUVFAgcmVxdWVzdC4gVGhlIGRlZmF1bHQgKGlmIHRoaXNcbiAqIGZ1bmN0aW9uIGlzIG5vdCBjYWxsZWQpIGlzIHRvIG9wdCBvdXQgb2YgY29ubmVjdGlvbiBwb29saW5nIChgYWdlbnQ6IGZhbHNlYCkuXG4gKlxuICogQHBhcmFtIHtodHRwLkFnZW50fSBhZ2VudFxuICogQHJldHVybiB7aHR0cC5BZ2VudH1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuYWdlbnQgPSBmdW5jdGlvbihhZ2VudCkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRoaXMuX2FnZW50O1xuICB0aGlzLl9hZ2VudCA9IGFnZW50O1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0IF9Db250ZW50LVR5cGVfIHJlc3BvbnNlIGhlYWRlciBwYXNzZWQgdGhyb3VnaCBgbWltZS5nZXRUeXBlKClgLlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqICAgICAgcmVxdWVzdC5wb3N0KCcvJylcbiAqICAgICAgICAudHlwZSgneG1sJylcbiAqICAgICAgICAuc2VuZCh4bWxzdHJpbmcpXG4gKiAgICAgICAgLmVuZChjYWxsYmFjayk7XG4gKlxuICogICAgICByZXF1ZXN0LnBvc3QoJy8nKVxuICogICAgICAgIC50eXBlKCdqc29uJylcbiAqICAgICAgICAuc2VuZChqc29uc3RyaW5nKVxuICogICAgICAgIC5lbmQoY2FsbGJhY2spO1xuICpcbiAqICAgICAgcmVxdWVzdC5wb3N0KCcvJylcbiAqICAgICAgICAudHlwZSgnYXBwbGljYXRpb24vanNvbicpXG4gKiAgICAgICAgLnNlbmQoanNvbnN0cmluZylcbiAqICAgICAgICAuZW5kKGNhbGxiYWNrKTtcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3QucHJvdG90eXBlLnR5cGUgPSBmdW5jdGlvbih0eXBlKSB7XG4gIHJldHVybiB0aGlzLnNldChcbiAgICAnQ29udGVudC1UeXBlJyxcbiAgICB0eXBlLmluY2x1ZGVzKCcvJykgPyB0eXBlIDogbWltZS5nZXRUeXBlKHR5cGUpXG4gICk7XG59O1xuXG4vKipcbiAqIFNldCBfQWNjZXB0XyByZXNwb25zZSBoZWFkZXIgcGFzc2VkIHRocm91Z2ggYG1pbWUuZ2V0VHlwZSgpYC5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgICAgIHN1cGVyYWdlbnQudHlwZXMuanNvbiA9ICdhcHBsaWNhdGlvbi9qc29uJztcbiAqXG4gKiAgICAgIHJlcXVlc3QuZ2V0KCcvYWdlbnQnKVxuICogICAgICAgIC5hY2NlcHQoJ2pzb24nKVxuICogICAgICAgIC5lbmQoY2FsbGJhY2spO1xuICpcbiAqICAgICAgcmVxdWVzdC5nZXQoJy9hZ2VudCcpXG4gKiAgICAgICAgLmFjY2VwdCgnYXBwbGljYXRpb24vanNvbicpXG4gKiAgICAgICAgLmVuZChjYWxsYmFjayk7XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGFjY2VwdFxuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlcXVlc3QucHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uKHR5cGUpIHtcbiAgcmV0dXJuIHRoaXMuc2V0KCdBY2NlcHQnLCB0eXBlLmluY2x1ZGVzKCcvJykgPyB0eXBlIDogbWltZS5nZXRUeXBlKHR5cGUpKTtcbn07XG5cbi8qKlxuICogQWRkIHF1ZXJ5LXN0cmluZyBgdmFsYC5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgIHJlcXVlc3QuZ2V0KCcvc2hvZXMnKVxuICogICAgIC5xdWVyeSgnc2l6ZT0xMCcpXG4gKiAgICAgLnF1ZXJ5KHsgY29sb3I6ICdibHVlJyB9KVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fFN0cmluZ30gdmFsXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUucXVlcnkgPSBmdW5jdGlvbih2YWwpIHtcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgdGhpcy5fcXVlcnkucHVzaCh2YWwpO1xuICB9IGVsc2Uge1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5xcywgdmFsKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBXcml0ZSByYXcgYGRhdGFgIC8gYGVuY29kaW5nYCB0byB0aGUgc29ja2V0LlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfFN0cmluZ30gZGF0YVxuICogQHBhcmFtIHtTdHJpbmd9IGVuY29kaW5nXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKGRhdGEsIGVuY29kaW5nKSB7XG4gIGNvbnN0IHJlcSA9IHRoaXMucmVxdWVzdCgpO1xuICBpZiAoIXRoaXMuX3N0cmVhbVJlcXVlc3QpIHtcbiAgICB0aGlzLl9zdHJlYW1SZXF1ZXN0ID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiByZXEud3JpdGUoZGF0YSwgZW5jb2RpbmcpO1xufTtcblxuLyoqXG4gKiBQaXBlIHRoZSByZXF1ZXN0IGJvZHkgdG8gYHN0cmVhbWAuXG4gKlxuICogQHBhcmFtIHtTdHJlYW19IHN0cmVhbVxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4ge1N0cmVhbX1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uKHN0cmVhbSwgb3B0aW9ucykge1xuICB0aGlzLnBpcGVkID0gdHJ1ZTsgLy8gSEFDSy4uLlxuICB0aGlzLmJ1ZmZlcihmYWxzZSk7XG4gIHRoaXMuZW5kKCk7XG4gIHJldHVybiB0aGlzLl9waXBlQ29udGludWUoc3RyZWFtLCBvcHRpb25zKTtcbn07XG5cblJlcXVlc3QucHJvdG90eXBlLl9waXBlQ29udGludWUgPSBmdW5jdGlvbihzdHJlYW0sIG9wdGlvbnMpIHtcbiAgdGhpcy5yZXEub25jZSgncmVzcG9uc2UnLCByZXMgPT4ge1xuICAgIC8vIHJlZGlyZWN0XG4gICAgaWYgKFxuICAgICAgaXNSZWRpcmVjdChyZXMuc3RhdHVzQ29kZSkgJiZcbiAgICAgIHRoaXMuX3JlZGlyZWN0cysrICE9PSB0aGlzLl9tYXhSZWRpcmVjdHNcbiAgICApIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZWRpcmVjdChyZXMpID09PSB0aGlzXG4gICAgICAgID8gdGhpcy5fcGlwZUNvbnRpbnVlKHN0cmVhbSwgb3B0aW9ucylcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhpcy5yZXMgPSByZXM7XG4gICAgdGhpcy5fZW1pdFJlc3BvbnNlKCk7XG4gICAgaWYgKHRoaXMuX2Fib3J0ZWQpIHJldHVybjtcblxuICAgIGlmICh0aGlzLl9zaG91bGRVbnppcChyZXMpKSB7XG4gICAgICBjb25zdCB1bnppcE9iaiA9IHpsaWIuY3JlYXRlVW56aXAoKTtcbiAgICAgIHVuemlwT2JqLm9uKCdlcnJvcicsIGVyciA9PiB7XG4gICAgICAgIGlmIChlcnIgJiYgZXJyLmNvZGUgPT09ICdaX0JVRl9FUlJPUicpIHtcbiAgICAgICAgICAvLyB1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIGlzIGlnbm9yZWQgYnkgYnJvd3NlcnMgYW5kIGN1cmxcbiAgICAgICAgICBzdHJlYW0uZW1pdCgnZW5kJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICAgIH0pO1xuICAgICAgcmVzLnBpcGUodW56aXBPYmopLnBpcGUoc3RyZWFtLCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzLnBpcGUoc3RyZWFtLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXMub25jZSgnZW5kJywgKCkgPT4ge1xuICAgICAgdGhpcy5lbWl0KCdlbmQnKTtcbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBzdHJlYW07XG59O1xuXG4vKipcbiAqIEVuYWJsZSAvIGRpc2FibGUgYnVmZmVyaW5nLlxuICpcbiAqIEByZXR1cm4ge0Jvb2xlYW59IFt2YWxdXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuYnVmZmVyID0gZnVuY3Rpb24odmFsKSB7XG4gIHRoaXMuX2J1ZmZlciA9IHZhbCAhPT0gZmFsc2U7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZWRpcmVjdCB0byBgdXJsXG4gKlxuICogQHBhcmFtIHtJbmNvbWluZ01lc3NhZ2V9IHJlc1xuICogQHJldHVybiB7UmVxdWVzdH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5fcmVkaXJlY3QgPSBmdW5jdGlvbihyZXMpIHtcbiAgbGV0IHVybCA9IHJlcy5oZWFkZXJzLmxvY2F0aW9uO1xuICBpZiAoIXVybCkge1xuICAgIHJldHVybiB0aGlzLmNhbGxiYWNrKG5ldyBFcnJvcignTm8gbG9jYXRpb24gaGVhZGVyIGZvciByZWRpcmVjdCcpLCByZXMpO1xuICB9XG5cbiAgZGVidWcoJ3JlZGlyZWN0ICVzIC0+ICVzJywgdGhpcy51cmwsIHVybCk7XG5cbiAgLy8gbG9jYXRpb25cbiAgdXJsID0gcmVzb2x2ZSh0aGlzLnVybCwgdXJsKTtcblxuICAvLyBlbnN1cmUgdGhlIHJlc3BvbnNlIGlzIGJlaW5nIGNvbnN1bWVkXG4gIC8vIHRoaXMgaXMgcmVxdWlyZWQgZm9yIE5vZGUgdjAuMTArXG4gIHJlcy5yZXN1bWUoKTtcblxuICBsZXQgaGVhZGVycyA9IHRoaXMucmVxLmdldEhlYWRlcnMgPyB0aGlzLnJlcS5nZXRIZWFkZXJzKCkgOiB0aGlzLnJlcS5faGVhZGVycztcblxuICBjb25zdCBjaGFuZ2VzT3JpZ2luID0gcGFyc2UodXJsKS5ob3N0ICE9PSBwYXJzZSh0aGlzLnVybCkuaG9zdDtcblxuICAvLyBpbXBsZW1lbnRhdGlvbiBvZiAzMDIgZm9sbG93aW5nIGRlZmFjdG8gc3RhbmRhcmRcbiAgaWYgKHJlcy5zdGF0dXNDb2RlID09PSAzMDEgfHwgcmVzLnN0YXR1c0NvZGUgPT09IDMwMikge1xuICAgIC8vIHN0cmlwIENvbnRlbnQtKiByZWxhdGVkIGZpZWxkc1xuICAgIC8vIGluIGNhc2Ugb2YgUE9TVCBldGNcbiAgICBoZWFkZXJzID0gdXRpbHMuY2xlYW5IZWFkZXIoaGVhZGVycywgY2hhbmdlc09yaWdpbik7XG5cbiAgICAvLyBmb3JjZSBHRVRcbiAgICB0aGlzLm1ldGhvZCA9IHRoaXMubWV0aG9kID09PSAnSEVBRCcgPyAnSEVBRCcgOiAnR0VUJztcblxuICAgIC8vIGNsZWFyIGRhdGFcbiAgICB0aGlzLl9kYXRhID0gbnVsbDtcbiAgfVxuXG4gIC8vIDMwMyBpcyBhbHdheXMgR0VUXG4gIGlmIChyZXMuc3RhdHVzQ29kZSA9PT0gMzAzKSB7XG4gICAgLy8gc3RyaXAgQ29udGVudC0qIHJlbGF0ZWQgZmllbGRzXG4gICAgLy8gaW4gY2FzZSBvZiBQT1NUIGV0Y1xuICAgIGhlYWRlcnMgPSB1dGlscy5jbGVhbkhlYWRlcihoZWFkZXJzLCBjaGFuZ2VzT3JpZ2luKTtcblxuICAgIC8vIGZvcmNlIG1ldGhvZFxuICAgIHRoaXMubWV0aG9kID0gJ0dFVCc7XG5cbiAgICAvLyBjbGVhciBkYXRhXG4gICAgdGhpcy5fZGF0YSA9IG51bGw7XG4gIH1cblxuICAvLyAzMDcgcHJlc2VydmVzIG1ldGhvZFxuICAvLyAzMDggcHJlc2VydmVzIG1ldGhvZFxuICBkZWxldGUgaGVhZGVycy5ob3N0O1xuXG4gIGRlbGV0ZSB0aGlzLnJlcTtcbiAgZGVsZXRlIHRoaXMuX2Zvcm1EYXRhO1xuXG4gIC8vIHJlbW92ZSBhbGwgYWRkIGhlYWRlciBleGNlcHQgVXNlci1BZ2VudFxuICBfaW5pdEhlYWRlcnModGhpcyk7XG5cbiAgLy8gcmVkaXJlY3RcbiAgdGhpcy5fZW5kQ2FsbGVkID0gZmFsc2U7XG4gIHRoaXMudXJsID0gdXJsO1xuICB0aGlzLnFzID0ge307XG4gIHRoaXMuX3F1ZXJ5Lmxlbmd0aCA9IDA7XG4gIHRoaXMuc2V0KGhlYWRlcnMpO1xuICB0aGlzLmVtaXQoJ3JlZGlyZWN0JywgcmVzKTtcbiAgdGhpcy5fcmVkaXJlY3RMaXN0LnB1c2godGhpcy51cmwpO1xuICB0aGlzLmVuZCh0aGlzLl9jYWxsYmFjayk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTZXQgQXV0aG9yaXphdGlvbiBmaWVsZCB2YWx1ZSB3aXRoIGB1c2VyYCBhbmQgYHBhc3NgLlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqICAgLmF1dGgoJ3RvYmknLCAnbGVhcm5ib29zdCcpXG4gKiAgIC5hdXRoKCd0b2JpOmxlYXJuYm9vc3QnKVxuICogICAuYXV0aCgndG9iaScpXG4gKiAgIC5hdXRoKGFjY2Vzc1Rva2VuLCB7IHR5cGU6ICdiZWFyZXInIH0pXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHVzZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSBbcGFzc11cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gb3B0aW9ucyB3aXRoIGF1dGhvcml6YXRpb24gdHlwZSAnYmFzaWMnIG9yICdiZWFyZXInICgnYmFzaWMnIGlzIGRlZmF1bHQpXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuYXV0aCA9IGZ1bmN0aW9uKHVzZXIsIHBhc3MsIG9wdGlvbnMpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHBhc3MgPSAnJztcbiAgaWYgKHR5cGVvZiBwYXNzID09PSAnb2JqZWN0JyAmJiBwYXNzICE9PSBudWxsKSB7XG4gICAgLy8gcGFzcyBpcyBvcHRpb25hbCBhbmQgY2FuIGJlIHJlcGxhY2VkIHdpdGggb3B0aW9uc1xuICAgIG9wdGlvbnMgPSBwYXNzO1xuICAgIHBhc3MgPSAnJztcbiAgfVxuXG4gIGlmICghb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSB7IHR5cGU6ICdiYXNpYycgfTtcbiAgfVxuXG4gIGNvbnN0IGVuY29kZXIgPSBzdHJpbmcgPT4gQnVmZmVyLmZyb20oc3RyaW5nKS50b1N0cmluZygnYmFzZTY0Jyk7XG5cbiAgcmV0dXJuIHRoaXMuX2F1dGgodXNlciwgcGFzcywgb3B0aW9ucywgZW5jb2Rlcik7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgY2VydGlmaWNhdGUgYXV0aG9yaXR5IG9wdGlvbiBmb3IgaHR0cHMgcmVxdWVzdC5cbiAqXG4gKiBAcGFyYW0ge0J1ZmZlciB8IEFycmF5fSBjZXJ0XG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuY2EgPSBmdW5jdGlvbihjZXJ0KSB7XG4gIHRoaXMuX2NhID0gY2VydDtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgY2xpZW50IGNlcnRpZmljYXRlIGtleSBvcHRpb24gZm9yIGh0dHBzIHJlcXVlc3QuXG4gKlxuICogQHBhcmFtIHtCdWZmZXIgfCBTdHJpbmd9IGNlcnRcbiAqIEByZXR1cm4ge1JlcXVlc3R9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5rZXkgPSBmdW5jdGlvbihjZXJ0KSB7XG4gIHRoaXMuX2tleSA9IGNlcnQ7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGtleSwgY2VydGlmaWNhdGUsIGFuZCBDQSBjZXJ0cyBvZiB0aGUgY2xpZW50IGluIFBGWCBvciBQS0NTMTIgZm9ybWF0LlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyIHwgU3RyaW5nfSBjZXJ0XG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUucGZ4ID0gZnVuY3Rpb24oY2VydCkge1xuICBpZiAodHlwZW9mIGNlcnQgPT09ICdvYmplY3QnICYmICFCdWZmZXIuaXNCdWZmZXIoY2VydCkpIHtcbiAgICB0aGlzLl9wZnggPSBjZXJ0LnBmeDtcbiAgICB0aGlzLl9wYXNzcGhyYXNlID0gY2VydC5wYXNzcGhyYXNlO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuX3BmeCA9IGNlcnQ7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0IHRoZSBjbGllbnQgY2VydGlmaWNhdGUgb3B0aW9uIGZvciBodHRwcyByZXF1ZXN0LlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyIHwgU3RyaW5nfSBjZXJ0XG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuY2VydCA9IGZ1bmN0aW9uKGNlcnQpIHtcbiAgdGhpcy5fY2VydCA9IGNlcnQ7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBEbyBub3QgcmVqZWN0IGV4cGlyZWQgb3IgaW52YWxpZCBUTFMgY2VydHMuXG4gKiBzZXRzIGByZWplY3RVbmF1dGhvcml6ZWQ9dHJ1ZWAuIEJlIHdhcm5lZCB0aGF0IHRoaXMgYWxsb3dzIE1JVE0gYXR0YWNrcy5cbiAqXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuZGlzYWJsZVRMU0NlcnRzID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX2Rpc2FibGVUTFNDZXJ0cyA9IHRydWU7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gYW4gaHR0cFtzXSByZXF1ZXN0LlxuICpcbiAqIEByZXR1cm4ge091dGdvaW5nTWVzc2FnZX1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5SZXF1ZXN0LnByb3RvdHlwZS5yZXF1ZXN0ID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLnJlcSkgcmV0dXJuIHRoaXMucmVxO1xuXG4gIGNvbnN0IG9wdGlvbnMgPSB7fTtcblxuICB0cnkge1xuICAgIGNvbnN0IHF1ZXJ5ID0gcXMuc3RyaW5naWZ5KHRoaXMucXMsIHtcbiAgICAgIGluZGljZXM6IGZhbHNlLFxuICAgICAgc3RyaWN0TnVsbEhhbmRsaW5nOiB0cnVlXG4gICAgfSk7XG4gICAgaWYgKHF1ZXJ5KSB7XG4gICAgICB0aGlzLnFzID0ge307XG4gICAgICB0aGlzLl9xdWVyeS5wdXNoKHF1ZXJ5KTtcbiAgICB9XG5cbiAgICB0aGlzLl9maW5hbGl6ZVF1ZXJ5U3RyaW5nKCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgfVxuXG4gIGxldCB7IHVybCB9ID0gdGhpcztcbiAgY29uc3QgcmV0cmllcyA9IHRoaXMuX3JldHJpZXM7XG5cbiAgLy8gQ2FwdHVyZSBiYWNrdGlja3MgYXMtaXMgZnJvbSB0aGUgZmluYWwgcXVlcnkgc3RyaW5nIGJ1aWx0IGFib3ZlLlxuICAvLyBOb3RlOiB0aGlzJ2xsIG9ubHkgZmluZCBiYWNrdGlja3MgZW50ZXJlZCBpbiByZXEucXVlcnkoU3RyaW5nKVxuICAvLyBjYWxscywgYmVjYXVzZSBxcy5zdHJpbmdpZnkgdW5jb25kaXRpb25hbGx5IGVuY29kZXMgYmFja3RpY2tzLlxuICBsZXQgcXVlcnlTdHJpbmdCYWNrdGlja3M7XG4gIGlmICh1cmwuaW5jbHVkZXMoJ2AnKSkge1xuICAgIGNvbnN0IHF1ZXJ5U3RhcnRJbmRleCA9IHVybC5pbmRleE9mKCc/Jyk7XG5cbiAgICBpZiAocXVlcnlTdGFydEluZGV4ICE9PSAtMSkge1xuICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSB1cmwuc2xpY2UocXVlcnlTdGFydEluZGV4ICsgMSk7XG4gICAgICBxdWVyeVN0cmluZ0JhY2t0aWNrcyA9IHF1ZXJ5U3RyaW5nLm1hdGNoKC9gfCU2MC9nKTtcbiAgICB9XG4gIH1cblxuICAvLyBkZWZhdWx0IHRvIGh0dHA6Ly9cbiAgaWYgKHVybC5pbmRleE9mKCdodHRwJykgIT09IDApIHVybCA9IGBodHRwOi8vJHt1cmx9YDtcbiAgdXJsID0gcGFyc2UodXJsKTtcblxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3Zpc2lvbm1lZGlhL3N1cGVyYWdlbnQvaXNzdWVzLzEzNjdcbiAgaWYgKHF1ZXJ5U3RyaW5nQmFja3RpY2tzKSB7XG4gICAgbGV0IGkgPSAwO1xuICAgIHVybC5xdWVyeSA9IHVybC5xdWVyeS5yZXBsYWNlKC8lNjAvZywgKCkgPT4gcXVlcnlTdHJpbmdCYWNrdGlja3NbaSsrXSk7XG4gICAgdXJsLnNlYXJjaCA9IGA/JHt1cmwucXVlcnl9YDtcbiAgICB1cmwucGF0aCA9IHVybC5wYXRobmFtZSArIHVybC5zZWFyY2g7XG4gIH1cblxuICAvLyBzdXBwb3J0IHVuaXggc29ja2V0c1xuICBpZiAoL15odHRwcz9cXCt1bml4Oi8udGVzdCh1cmwucHJvdG9jb2wpID09PSB0cnVlKSB7XG4gICAgLy8gZ2V0IHRoZSBwcm90b2NvbFxuICAgIHVybC5wcm90b2NvbCA9IGAke3VybC5wcm90b2NvbC5zcGxpdCgnKycpWzBdfTpgO1xuXG4gICAgLy8gZ2V0IHRoZSBzb2NrZXQsIHBhdGhcbiAgICBjb25zdCB1bml4UGFydHMgPSB1cmwucGF0aC5tYXRjaCgvXihbXi9dKykoLispJC8pO1xuICAgIG9wdGlvbnMuc29ja2V0UGF0aCA9IHVuaXhQYXJ0c1sxXS5yZXBsYWNlKC8lMkYvZywgJy8nKTtcbiAgICB1cmwucGF0aCA9IHVuaXhQYXJ0c1syXTtcbiAgfVxuXG4gIC8vIE92ZXJyaWRlIElQIGFkZHJlc3Mgb2YgYSBob3N0bmFtZVxuICBpZiAodGhpcy5fY29ubmVjdE92ZXJyaWRlKSB7XG4gICAgY29uc3QgeyBob3N0bmFtZSB9ID0gdXJsO1xuICAgIGNvbnN0IG1hdGNoID1cbiAgICAgIGhvc3RuYW1lIGluIHRoaXMuX2Nvbm5lY3RPdmVycmlkZVxuICAgICAgICA/IHRoaXMuX2Nvbm5lY3RPdmVycmlkZVtob3N0bmFtZV1cbiAgICAgICAgOiB0aGlzLl9jb25uZWN0T3ZlcnJpZGVbJyonXTtcbiAgICBpZiAobWF0Y2gpIHtcbiAgICAgIC8vIGJhY2t1cCB0aGUgcmVhbCBob3N0XG4gICAgICBpZiAoIXRoaXMuX2hlYWRlci5ob3N0KSB7XG4gICAgICAgIHRoaXMuc2V0KCdob3N0JywgdXJsLmhvc3QpO1xuICAgICAgfVxuXG4gICAgICBsZXQgbmV3SG9zdDtcbiAgICAgIGxldCBuZXdQb3J0O1xuXG4gICAgICBpZiAodHlwZW9mIG1hdGNoID09PSAnb2JqZWN0Jykge1xuICAgICAgICBuZXdIb3N0ID0gbWF0Y2guaG9zdDtcbiAgICAgICAgbmV3UG9ydCA9IG1hdGNoLnBvcnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdIb3N0ID0gbWF0Y2g7XG4gICAgICAgIG5ld1BvcnQgPSB1cmwucG9ydDtcbiAgICAgIH1cblxuICAgICAgLy8gd3JhcCBbaXB2Nl1cbiAgICAgIHVybC5ob3N0ID0gLzovLnRlc3QobmV3SG9zdCkgPyBgWyR7bmV3SG9zdH1dYCA6IG5ld0hvc3Q7XG4gICAgICBpZiAobmV3UG9ydCkge1xuICAgICAgICB1cmwuaG9zdCArPSBgOiR7bmV3UG9ydH1gO1xuICAgICAgICB1cmwucG9ydCA9IG5ld1BvcnQ7XG4gICAgICB9XG5cbiAgICAgIHVybC5ob3N0bmFtZSA9IG5ld0hvc3Q7XG4gICAgfVxuICB9XG5cbiAgLy8gb3B0aW9uc1xuICBvcHRpb25zLm1ldGhvZCA9IHRoaXMubWV0aG9kO1xuICBvcHRpb25zLnBvcnQgPSB1cmwucG9ydDtcbiAgb3B0aW9ucy5wYXRoID0gdXJsLnBhdGg7XG4gIG9wdGlvbnMuaG9zdCA9IHVybC5ob3N0bmFtZTtcbiAgb3B0aW9ucy5jYSA9IHRoaXMuX2NhO1xuICBvcHRpb25zLmtleSA9IHRoaXMuX2tleTtcbiAgb3B0aW9ucy5wZnggPSB0aGlzLl9wZng7XG4gIG9wdGlvbnMuY2VydCA9IHRoaXMuX2NlcnQ7XG4gIG9wdGlvbnMucGFzc3BocmFzZSA9IHRoaXMuX3Bhc3NwaHJhc2U7XG4gIG9wdGlvbnMuYWdlbnQgPSB0aGlzLl9hZ2VudDtcbiAgb3B0aW9ucy5yZWplY3RVbmF1dGhvcml6ZWQgPVxuICAgIHR5cGVvZiB0aGlzLl9kaXNhYmxlVExTQ2VydHMgPT09ICdib29sZWFuJ1xuICAgICAgPyAhdGhpcy5fZGlzYWJsZVRMU0NlcnRzXG4gICAgICA6IHByb2Nlc3MuZW52Lk5PREVfVExTX1JFSkVDVF9VTkFVVEhPUklaRUQgIT09ICcwJztcblxuICAvLyBBbGxvd3MgcmVxdWVzdC5nZXQoJ2h0dHBzOi8vMS4yLjMuNC8nKS5zZXQoJ0hvc3QnLCAnZXhhbXBsZS5jb20nKVxuICBpZiAodGhpcy5faGVhZGVyLmhvc3QpIHtcbiAgICBvcHRpb25zLnNlcnZlcm5hbWUgPSB0aGlzLl9oZWFkZXIuaG9zdC5yZXBsYWNlKC86XFxkKyQvLCAnJyk7XG4gIH1cblxuICBpZiAoXG4gICAgdGhpcy5fdHJ1c3RMb2NhbGhvc3QgJiZcbiAgICAvXig/OmxvY2FsaG9zdHwxMjdcXC4wXFwuMFxcLlxcZCt8KDAqOikrOjAqMSkkLy50ZXN0KHVybC5ob3N0bmFtZSlcbiAgKSB7XG4gICAgb3B0aW9ucy5yZWplY3RVbmF1dGhvcml6ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIC8vIGluaXRpYXRlIHJlcXVlc3RcbiAgY29uc3QgbW9kID0gdGhpcy5fZW5hYmxlSHR0cDJcbiAgICA/IGV4cG9ydHMucHJvdG9jb2xzWydodHRwMjonXS5zZXRQcm90b2NvbCh1cmwucHJvdG9jb2wpXG4gICAgOiBleHBvcnRzLnByb3RvY29sc1t1cmwucHJvdG9jb2xdO1xuXG4gIC8vIHJlcXVlc3RcbiAgdGhpcy5yZXEgPSBtb2QucmVxdWVzdChvcHRpb25zKTtcbiAgY29uc3QgeyByZXEgfSA9IHRoaXM7XG5cbiAgLy8gc2V0IHRjcCBubyBkZWxheVxuICByZXEuc2V0Tm9EZWxheSh0cnVlKTtcblxuICBpZiAob3B0aW9ucy5tZXRob2QgIT09ICdIRUFEJykge1xuICAgIHJlcS5zZXRIZWFkZXIoJ0FjY2VwdC1FbmNvZGluZycsICdnemlwLCBkZWZsYXRlJyk7XG4gIH1cblxuICB0aGlzLnByb3RvY29sID0gdXJsLnByb3RvY29sO1xuICB0aGlzLmhvc3QgPSB1cmwuaG9zdDtcblxuICAvLyBleHBvc2UgZXZlbnRzXG4gIHJlcS5vbmNlKCdkcmFpbicsICgpID0+IHtcbiAgICB0aGlzLmVtaXQoJ2RyYWluJyk7XG4gIH0pO1xuXG4gIHJlcS5vbignZXJyb3InLCBlcnIgPT4ge1xuICAgIC8vIGZsYWcgYWJvcnRpb24gaGVyZSBmb3Igb3V0IHRpbWVvdXRzXG4gICAgLy8gYmVjYXVzZSBub2RlIHdpbGwgZW1pdCBhIGZhdXgtZXJyb3IgXCJzb2NrZXQgaGFuZyB1cFwiXG4gICAgLy8gd2hlbiByZXF1ZXN0IGlzIGFib3J0ZWQgYmVmb3JlIGEgY29ubmVjdGlvbiBpcyBtYWRlXG4gICAgaWYgKHRoaXMuX2Fib3J0ZWQpIHJldHVybjtcbiAgICAvLyBpZiBub3QgdGhlIHNhbWUsIHdlIGFyZSBpbiB0aGUgKipvbGQqKiAoY2FuY2VsbGVkKSByZXF1ZXN0LFxuICAgIC8vIHNvIG5lZWQgdG8gY29udGludWUgKHNhbWUgYXMgZm9yIGFib3ZlKVxuICAgIGlmICh0aGlzLl9yZXRyaWVzICE9PSByZXRyaWVzKSByZXR1cm47XG4gICAgLy8gaWYgd2UndmUgcmVjZWl2ZWQgYSByZXNwb25zZSB0aGVuIHdlIGRvbid0IHdhbnQgdG8gbGV0XG4gICAgLy8gYW4gZXJyb3IgaW4gdGhlIHJlcXVlc3QgYmxvdyB1cCB0aGUgcmVzcG9uc2VcbiAgICBpZiAodGhpcy5yZXNwb25zZSkgcmV0dXJuO1xuICAgIHRoaXMuY2FsbGJhY2soZXJyKTtcbiAgfSk7XG5cbiAgLy8gYXV0aFxuICBpZiAodXJsLmF1dGgpIHtcbiAgICBjb25zdCBhdXRoID0gdXJsLmF1dGguc3BsaXQoJzonKTtcbiAgICB0aGlzLmF1dGgoYXV0aFswXSwgYXV0aFsxXSk7XG4gIH1cblxuICBpZiAodGhpcy51c2VybmFtZSAmJiB0aGlzLnBhc3N3b3JkKSB7XG4gICAgdGhpcy5hdXRoKHRoaXMudXNlcm5hbWUsIHRoaXMucGFzc3dvcmQpO1xuICB9XG5cbiAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5oZWFkZXIpIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuaGVhZGVyLCBrZXkpKVxuICAgICAgcmVxLnNldEhlYWRlcihrZXksIHRoaXMuaGVhZGVyW2tleV0pO1xuICB9XG5cbiAgLy8gYWRkIGNvb2tpZXNcbiAgaWYgKHRoaXMuY29va2llcykge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5faGVhZGVyLCAnY29va2llJykpIHtcbiAgICAgIC8vIG1lcmdlXG4gICAgICBjb25zdCB0bXBKYXIgPSBuZXcgQ29va2llSmFyLkNvb2tpZUphcigpO1xuICAgICAgdG1wSmFyLnNldENvb2tpZXModGhpcy5faGVhZGVyLmNvb2tpZS5zcGxpdCgnOycpKTtcbiAgICAgIHRtcEphci5zZXRDb29raWVzKHRoaXMuY29va2llcy5zcGxpdCgnOycpKTtcbiAgICAgIHJlcS5zZXRIZWFkZXIoXG4gICAgICAgICdDb29raWUnLFxuICAgICAgICB0bXBKYXIuZ2V0Q29va2llcyhDb29raWVKYXIuQ29va2llQWNjZXNzSW5mby5BbGwpLnRvVmFsdWVTdHJpbmcoKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxLnNldEhlYWRlcignQ29va2llJywgdGhpcy5jb29raWVzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVxO1xufTtcblxuLyoqXG4gKiBJbnZva2UgdGhlIGNhbGxiYWNrIHdpdGggYGVycmAgYW5kIGByZXNgXG4gKiBhbmQgaGFuZGxlIGFyaXR5IGNoZWNrLlxuICpcbiAqIEBwYXJhbSB7RXJyb3J9IGVyclxuICogQHBhcmFtIHtSZXNwb25zZX0gcmVzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5jYWxsYmFjayA9IGZ1bmN0aW9uKGVyciwgcmVzKSB7XG4gIGlmICh0aGlzLl9zaG91bGRSZXRyeShlcnIsIHJlcykpIHtcbiAgICByZXR1cm4gdGhpcy5fcmV0cnkoKTtcbiAgfVxuXG4gIC8vIEF2b2lkIHRoZSBlcnJvciB3aGljaCBpcyBlbWl0dGVkIGZyb20gJ3NvY2tldCBoYW5nIHVwJyB0byBjYXVzZSB0aGUgZm4gdW5kZWZpbmVkIGVycm9yIG9uIEpTIHJ1bnRpbWUuXG4gIGNvbnN0IGZuID0gdGhpcy5fY2FsbGJhY2sgfHwgbm9vcDtcbiAgdGhpcy5jbGVhclRpbWVvdXQoKTtcbiAgaWYgKHRoaXMuY2FsbGVkKSByZXR1cm4gY29uc29sZS53YXJuKCdzdXBlcmFnZW50OiBkb3VibGUgY2FsbGJhY2sgYnVnJyk7XG4gIHRoaXMuY2FsbGVkID0gdHJ1ZTtcblxuICBpZiAoIWVycikge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIXRoaXMuX2lzUmVzcG9uc2VPSyhyZXMpKSB7XG4gICAgICAgIGxldCBtc2cgPSAnVW5zdWNjZXNzZnVsIEhUVFAgcmVzcG9uc2UnO1xuICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgbXNnID0gaHR0cC5TVEFUVVNfQ09ERVNbcmVzLnN0YXR1c10gfHwgbXNnO1xuICAgICAgICB9XG5cbiAgICAgICAgZXJyID0gbmV3IEVycm9yKG1zZyk7XG4gICAgICAgIGVyci5zdGF0dXMgPSByZXMgPyByZXMuc3RhdHVzIDogdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycl8pIHtcbiAgICAgIGVyciA9IGVycl87XG4gICAgfVxuICB9XG5cbiAgLy8gSXQncyBpbXBvcnRhbnQgdGhhdCB0aGUgY2FsbGJhY2sgaXMgY2FsbGVkIG91dHNpZGUgdHJ5L2NhdGNoXG4gIC8vIHRvIGF2b2lkIGRvdWJsZSBjYWxsYmFja1xuICBpZiAoIWVycikge1xuICAgIHJldHVybiBmbihudWxsLCByZXMpO1xuICB9XG5cbiAgZXJyLnJlc3BvbnNlID0gcmVzO1xuICBpZiAodGhpcy5fbWF4UmV0cmllcykgZXJyLnJldHJpZXMgPSB0aGlzLl9yZXRyaWVzIC0gMTtcblxuICAvLyBvbmx5IGVtaXQgZXJyb3IgZXZlbnQgaWYgdGhlcmUgaXMgYSBsaXN0ZW5lclxuICAvLyBvdGhlcndpc2Ugd2UgYXNzdW1lIHRoZSBjYWxsYmFjayB0byBgLmVuZCgpYCB3aWxsIGdldCB0aGUgZXJyb3JcbiAgaWYgKGVyciAmJiB0aGlzLmxpc3RlbmVycygnZXJyb3InKS5sZW5ndGggPiAwKSB7XG4gICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7XG4gIH1cblxuICBmbihlcnIsIHJlcyk7XG59O1xuXG4vKipcbiAqIENoZWNrIGlmIGBvYmpgIGlzIGEgaG9zdCBvYmplY3QsXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBob3N0IG9iamVjdFxuICogQHJldHVybiB7Qm9vbGVhbn0gaXMgYSBob3N0IG9iamVjdFxuICogQGFwaSBwcml2YXRlXG4gKi9cblJlcXVlc3QucHJvdG90eXBlLl9pc0hvc3QgPSBmdW5jdGlvbihvYmopIHtcbiAgcmV0dXJuIChcbiAgICBCdWZmZXIuaXNCdWZmZXIob2JqKSB8fCBvYmogaW5zdGFuY2VvZiBTdHJlYW0gfHwgb2JqIGluc3RhbmNlb2YgRm9ybURhdGFcbiAgKTtcbn07XG5cbi8qKlxuICogSW5pdGlhdGUgcmVxdWVzdCwgaW52b2tpbmcgY2FsbGJhY2sgYGZuKGVyciwgcmVzKWBcbiAqIHdpdGggYW4gaW5zdGFuY2VvZiBgUmVzcG9uc2VgLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcmV0dXJuIHtSZXF1ZXN0fSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuUmVxdWVzdC5wcm90b3R5cGUuX2VtaXRSZXNwb25zZSA9IGZ1bmN0aW9uKGJvZHksIGZpbGVzKSB7XG4gIGNvbnN0IHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKHRoaXMpO1xuICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gIHJlc3BvbnNlLnJlZGlyZWN0cyA9IHRoaXMuX3JlZGlyZWN0TGlzdDtcbiAgaWYgKHVuZGVmaW5lZCAhPT0gYm9keSkge1xuICAgIHJlc3BvbnNlLmJvZHkgPSBib2R5O1xuICB9XG5cbiAgcmVzcG9uc2UuZmlsZXMgPSBmaWxlcztcbiAgaWYgKHRoaXMuX2VuZENhbGxlZCkge1xuICAgIHJlc3BvbnNlLnBpcGUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJlbmQoKSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCwgc28gaXQncyB0b28gbGF0ZSB0byBzdGFydCBwaXBpbmdcIlxuICAgICAgKTtcbiAgICB9O1xuICB9XG5cbiAgdGhpcy5lbWl0KCdyZXNwb25zZScsIHJlc3BvbnNlKTtcbiAgcmV0dXJuIHJlc3BvbnNlO1xufTtcblxuUmVxdWVzdC5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oZm4pIHtcbiAgdGhpcy5yZXF1ZXN0KCk7XG4gIGRlYnVnKCclcyAlcycsIHRoaXMubWV0aG9kLCB0aGlzLnVybCk7XG5cbiAgaWYgKHRoaXMuX2VuZENhbGxlZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICcuZW5kKCkgd2FzIGNhbGxlZCB0d2ljZS4gVGhpcyBpcyBub3Qgc3VwcG9ydGVkIGluIHN1cGVyYWdlbnQnXG4gICAgKTtcbiAgfVxuXG4gIHRoaXMuX2VuZENhbGxlZCA9IHRydWU7XG5cbiAgLy8gc3RvcmUgY2FsbGJhY2tcbiAgdGhpcy5fY2FsbGJhY2sgPSBmbiB8fCBub29wO1xuXG4gIHRoaXMuX2VuZCgpO1xufTtcblxuUmVxdWVzdC5wcm90b3R5cGUuX2VuZCA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5fYWJvcnRlZClcbiAgICByZXR1cm4gdGhpcy5jYWxsYmFjayhcbiAgICAgIG5ldyBFcnJvcignVGhlIHJlcXVlc3QgaGFzIGJlZW4gYWJvcnRlZCBldmVuIGJlZm9yZSAuZW5kKCkgd2FzIGNhbGxlZCcpXG4gICAgKTtcblxuICBsZXQgZGF0YSA9IHRoaXMuX2RhdGE7XG4gIGNvbnN0IHsgcmVxIH0gPSB0aGlzO1xuICBjb25zdCB7IG1ldGhvZCB9ID0gdGhpcztcblxuICB0aGlzLl9zZXRUaW1lb3V0cygpO1xuXG4gIC8vIGJvZHlcbiAgaWYgKG1ldGhvZCAhPT0gJ0hFQUQnICYmICFyZXEuX2hlYWRlclNlbnQpIHtcbiAgICAvLyBzZXJpYWxpemUgc3R1ZmZcbiAgICBpZiAodHlwZW9mIGRhdGEgIT09ICdzdHJpbmcnKSB7XG4gICAgICBsZXQgY29udGVudFR5cGUgPSByZXEuZ2V0SGVhZGVyKCdDb250ZW50LVR5cGUnKTtcbiAgICAgIC8vIFBhcnNlIG91dCBqdXN0IHRoZSBjb250ZW50IHR5cGUgZnJvbSB0aGUgaGVhZGVyIChpZ25vcmUgdGhlIGNoYXJzZXQpXG4gICAgICBpZiAoY29udGVudFR5cGUpIGNvbnRlbnRUeXBlID0gY29udGVudFR5cGUuc3BsaXQoJzsnKVswXTtcbiAgICAgIGxldCBzZXJpYWxpemUgPSB0aGlzLl9zZXJpYWxpemVyIHx8IGV4cG9ydHMuc2VyaWFsaXplW2NvbnRlbnRUeXBlXTtcbiAgICAgIGlmICghc2VyaWFsaXplICYmIGlzSlNPTihjb250ZW50VHlwZSkpIHtcbiAgICAgICAgc2VyaWFsaXplID0gZXhwb3J0cy5zZXJpYWxpemVbJ2FwcGxpY2F0aW9uL2pzb24nXTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNlcmlhbGl6ZSkgZGF0YSA9IHNlcmlhbGl6ZShkYXRhKTtcbiAgICB9XG5cbiAgICAvLyBjb250ZW50LWxlbmd0aFxuICAgIGlmIChkYXRhICYmICFyZXEuZ2V0SGVhZGVyKCdDb250ZW50LUxlbmd0aCcpKSB7XG4gICAgICByZXEuc2V0SGVhZGVyKFxuICAgICAgICAnQ29udGVudC1MZW5ndGgnLFxuICAgICAgICBCdWZmZXIuaXNCdWZmZXIoZGF0YSkgPyBkYXRhLmxlbmd0aCA6IEJ1ZmZlci5ieXRlTGVuZ3RoKGRhdGEpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIHJlc3BvbnNlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG4gIHJlcS5vbmNlKCdyZXNwb25zZScsIHJlcyA9PiB7XG4gICAgZGVidWcoJyVzICVzIC0+ICVzJywgdGhpcy5tZXRob2QsIHRoaXMudXJsLCByZXMuc3RhdHVzQ29kZSk7XG5cbiAgICBpZiAodGhpcy5fcmVzcG9uc2VUaW1lb3V0VGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9yZXNwb25zZVRpbWVvdXRUaW1lcik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGlwZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtYXggPSB0aGlzLl9tYXhSZWRpcmVjdHM7XG4gICAgY29uc3QgbWltZSA9IHV0aWxzLnR5cGUocmVzLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddIHx8ICcnKSB8fCAndGV4dC9wbGFpbic7XG4gICAgY29uc3QgdHlwZSA9IG1pbWUuc3BsaXQoJy8nKVswXTtcbiAgICBjb25zdCBtdWx0aXBhcnQgPSB0eXBlID09PSAnbXVsdGlwYXJ0JztcbiAgICBjb25zdCByZWRpcmVjdCA9IGlzUmVkaXJlY3QocmVzLnN0YXR1c0NvZGUpO1xuICAgIGNvbnN0IHJlc3BvbnNlVHlwZSA9IHRoaXMuX3Jlc3BvbnNlVHlwZTtcblxuICAgIHRoaXMucmVzID0gcmVzO1xuXG4gICAgLy8gcmVkaXJlY3RcbiAgICBpZiAocmVkaXJlY3QgJiYgdGhpcy5fcmVkaXJlY3RzKysgIT09IG1heCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlZGlyZWN0KHJlcyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWV0aG9kID09PSAnSEVBRCcpIHtcbiAgICAgIHRoaXMuZW1pdCgnZW5kJyk7XG4gICAgICB0aGlzLmNhbGxiYWNrKG51bGwsIHRoaXMuX2VtaXRSZXNwb25zZSgpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyB6bGliIHN1cHBvcnRcbiAgICBpZiAodGhpcy5fc2hvdWxkVW56aXAocmVzKSkge1xuICAgICAgdW56aXAocmVxLCByZXMpO1xuICAgIH1cblxuICAgIGxldCBidWZmZXIgPSB0aGlzLl9idWZmZXI7XG4gICAgaWYgKGJ1ZmZlciA9PT0gdW5kZWZpbmVkICYmIG1pbWUgaW4gZXhwb3J0cy5idWZmZXIpIHtcbiAgICAgIGJ1ZmZlciA9IEJvb2xlYW4oZXhwb3J0cy5idWZmZXJbbWltZV0pO1xuICAgIH1cblxuICAgIGxldCBwYXJzZXIgPSB0aGlzLl9wYXJzZXI7XG4gICAgaWYgKHVuZGVmaW5lZCA9PT0gYnVmZmVyKSB7XG4gICAgICBpZiAocGFyc2VyKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBcIkEgY3VzdG9tIHN1cGVyYWdlbnQgcGFyc2VyIGhhcyBiZWVuIHNldCwgYnV0IGJ1ZmZlcmluZyBzdHJhdGVneSBmb3IgdGhlIHBhcnNlciBoYXNuJ3QgYmVlbiBjb25maWd1cmVkLiBDYWxsIGByZXEuYnVmZmVyKHRydWUgb3IgZmFsc2UpYCBvciBzZXQgYHN1cGVyYWdlbnQuYnVmZmVyW21pbWVdID0gdHJ1ZSBvciBmYWxzZWBcIlxuICAgICAgICApO1xuICAgICAgICBidWZmZXIgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcGFyc2VyKSB7XG4gICAgICBpZiAocmVzcG9uc2VUeXBlKSB7XG4gICAgICAgIHBhcnNlciA9IGV4cG9ydHMucGFyc2UuaW1hZ2U7IC8vIEl0J3MgYWN0dWFsbHkgYSBnZW5lcmljIEJ1ZmZlclxuICAgICAgICBidWZmZXIgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChtdWx0aXBhcnQpIHtcbiAgICAgICAgY29uc3QgZm9ybSA9IG5ldyBmb3JtaWRhYmxlLkluY29taW5nRm9ybSgpO1xuICAgICAgICBwYXJzZXIgPSBmb3JtLnBhcnNlLmJpbmQoZm9ybSk7XG4gICAgICAgIGJ1ZmZlciA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKGlzSW1hZ2VPclZpZGVvKG1pbWUpKSB7XG4gICAgICAgIHBhcnNlciA9IGV4cG9ydHMucGFyc2UuaW1hZ2U7XG4gICAgICAgIGJ1ZmZlciA9IHRydWU7IC8vIEZvciBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBidWZmZXJpbmcgZGVmYXVsdCBpcyBhZC1ob2MgTUlNRS1kZXBlbmRlbnRcbiAgICAgIH0gZWxzZSBpZiAoZXhwb3J0cy5wYXJzZVttaW1lXSkge1xuICAgICAgICBwYXJzZXIgPSBleHBvcnRzLnBhcnNlW21pbWVdO1xuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAndGV4dCcpIHtcbiAgICAgICAgcGFyc2VyID0gZXhwb3J0cy5wYXJzZS50ZXh0O1xuICAgICAgICBidWZmZXIgPSBidWZmZXIgIT09IGZhbHNlO1xuXG4gICAgICAgIC8vIGV2ZXJ5b25lIHdhbnRzIHRoZWlyIG93biB3aGl0ZS1sYWJlbGVkIGpzb25cbiAgICAgIH0gZWxzZSBpZiAoaXNKU09OKG1pbWUpKSB7XG4gICAgICAgIHBhcnNlciA9IGV4cG9ydHMucGFyc2VbJ2FwcGxpY2F0aW9uL2pzb24nXTtcbiAgICAgICAgYnVmZmVyID0gYnVmZmVyICE9PSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAoYnVmZmVyKSB7XG4gICAgICAgIHBhcnNlciA9IGV4cG9ydHMucGFyc2UudGV4dDtcbiAgICAgIH0gZWxzZSBpZiAodW5kZWZpbmVkID09PSBidWZmZXIpIHtcbiAgICAgICAgcGFyc2VyID0gZXhwb3J0cy5wYXJzZS5pbWFnZTsgLy8gSXQncyBhY3R1YWxseSBhIGdlbmVyaWMgQnVmZmVyXG4gICAgICAgIGJ1ZmZlciA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYnkgZGVmYXVsdCBvbmx5IGJ1ZmZlciB0ZXh0LyosIGpzb24gYW5kIG1lc3NlZCB1cCB0aGluZyBmcm9tIGhlbGxcbiAgICBpZiAoKHVuZGVmaW5lZCA9PT0gYnVmZmVyICYmIGlzVGV4dChtaW1lKSkgfHwgaXNKU09OKG1pbWUpKSB7XG4gICAgICBidWZmZXIgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMuX3Jlc0J1ZmZlcmVkID0gYnVmZmVyO1xuICAgIGxldCBwYXJzZXJIYW5kbGVzRW5kID0gZmFsc2U7XG4gICAgaWYgKGJ1ZmZlcikge1xuICAgICAgLy8gUHJvdGVjdGlvbmEgYWdhaW5zdCB6aXAgYm9tYnMgYW5kIG90aGVyIG51aXNhbmNlXG4gICAgICBsZXQgcmVzcG9uc2VCeXRlc0xlZnQgPSB0aGlzLl9tYXhSZXNwb25zZVNpemUgfHwgMjAwMDAwMDAwO1xuICAgICAgcmVzLm9uKCdkYXRhJywgYnVmID0+IHtcbiAgICAgICAgcmVzcG9uc2VCeXRlc0xlZnQgLT0gYnVmLmJ5dGVMZW5ndGggfHwgYnVmLmxlbmd0aDtcbiAgICAgICAgaWYgKHJlc3BvbnNlQnl0ZXNMZWZ0IDwgMCkge1xuICAgICAgICAgIC8vIFRoaXMgd2lsbCBwcm9wYWdhdGUgdGhyb3VnaCBlcnJvciBldmVudFxuICAgICAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcignTWF4aW11bSByZXNwb25zZSBzaXplIHJlYWNoZWQnKTtcbiAgICAgICAgICBlcnIuY29kZSA9ICdFVE9PTEFSR0UnO1xuICAgICAgICAgIC8vIFBhcnNlcnMgYXJlbid0IHJlcXVpcmVkIHRvIG9ic2VydmUgZXJyb3IgZXZlbnQsXG4gICAgICAgICAgLy8gc28gd291bGQgaW5jb3JyZWN0bHkgcmVwb3J0IHN1Y2Nlc3NcbiAgICAgICAgICBwYXJzZXJIYW5kbGVzRW5kID0gZmFsc2U7XG4gICAgICAgICAgLy8gV2lsbCBlbWl0IGVycm9yIGV2ZW50XG4gICAgICAgICAgcmVzLmRlc3Ryb3koZXJyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcnNlcikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gVW5idWZmZXJlZCBwYXJzZXJzIGFyZSBzdXBwb3NlZCB0byBlbWl0IHJlc3BvbnNlIGVhcmx5LFxuICAgICAgICAvLyB3aGljaCBpcyB3ZWlyZCBCVFcsIGJlY2F1c2UgcmVzcG9uc2UuYm9keSB3b24ndCBiZSB0aGVyZS5cbiAgICAgICAgcGFyc2VySGFuZGxlc0VuZCA9IGJ1ZmZlcjtcblxuICAgICAgICBwYXJzZXIocmVzLCAoZXJyLCBvYmosIGZpbGVzKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMudGltZWRvdXQpIHtcbiAgICAgICAgICAgIC8vIFRpbWVvdXQgaGFzIGFscmVhZHkgaGFuZGxlZCBhbGwgY2FsbGJhY2tzXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gSW50ZW50aW9uYWwgKG5vbi10aW1lb3V0KSBhYm9ydCBpcyBzdXBwb3NlZCB0byBwcmVzZXJ2ZSBwYXJ0aWFsIHJlc3BvbnNlLFxuICAgICAgICAgIC8vIGV2ZW4gaWYgaXQgZG9lc24ndCBwYXJzZS5cbiAgICAgICAgICBpZiAoZXJyICYmICF0aGlzLl9hYm9ydGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYWxsYmFjayhlcnIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChwYXJzZXJIYW5kbGVzRW5kKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2VuZCcpO1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFjayhudWxsLCB0aGlzLl9lbWl0UmVzcG9uc2Uob2JqLCBmaWxlcykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5jYWxsYmFjayhlcnIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5yZXMgPSByZXM7XG5cbiAgICAvLyB1bmJ1ZmZlcmVkXG4gICAgaWYgKCFidWZmZXIpIHtcbiAgICAgIGRlYnVnKCd1bmJ1ZmZlcmVkICVzICVzJywgdGhpcy5tZXRob2QsIHRoaXMudXJsKTtcbiAgICAgIHRoaXMuY2FsbGJhY2sobnVsbCwgdGhpcy5fZW1pdFJlc3BvbnNlKCkpO1xuICAgICAgaWYgKG11bHRpcGFydCkgcmV0dXJuOyAvLyBhbGxvdyBtdWx0aXBhcnQgdG8gaGFuZGxlIGVuZCBldmVudFxuICAgICAgcmVzLm9uY2UoJ2VuZCcsICgpID0+IHtcbiAgICAgICAgZGVidWcoJ2VuZCAlcyAlcycsIHRoaXMubWV0aG9kLCB0aGlzLnVybCk7XG4gICAgICAgIHRoaXMuZW1pdCgnZW5kJyk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyB0ZXJtaW5hdGluZyBldmVudHNcbiAgICByZXMub25jZSgnZXJyb3InLCBlcnIgPT4ge1xuICAgICAgcGFyc2VySGFuZGxlc0VuZCA9IGZhbHNlO1xuICAgICAgdGhpcy5jYWxsYmFjayhlcnIsIG51bGwpO1xuICAgIH0pO1xuICAgIGlmICghcGFyc2VySGFuZGxlc0VuZClcbiAgICAgIHJlcy5vbmNlKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgIGRlYnVnKCdlbmQgJXMgJXMnLCB0aGlzLm1ldGhvZCwgdGhpcy51cmwpO1xuICAgICAgICAvLyBUT0RPOiB1bmxlc3MgYnVmZmVyaW5nIGVtaXQgZWFybGllciB0byBzdHJlYW1cbiAgICAgICAgdGhpcy5lbWl0KCdlbmQnKTtcbiAgICAgICAgdGhpcy5jYWxsYmFjayhudWxsLCB0aGlzLl9lbWl0UmVzcG9uc2UoKSk7XG4gICAgICB9KTtcbiAgfSk7XG5cbiAgdGhpcy5lbWl0KCdyZXF1ZXN0JywgdGhpcyk7XG5cbiAgY29uc3QgZ2V0UHJvZ3Jlc3NNb25pdG9yID0gKCkgPT4ge1xuICAgIGNvbnN0IGxlbmd0aENvbXB1dGFibGUgPSB0cnVlO1xuICAgIGNvbnN0IHRvdGFsID0gcmVxLmdldEhlYWRlcignQ29udGVudC1MZW5ndGgnKTtcbiAgICBsZXQgbG9hZGVkID0gMDtcblxuICAgIGNvbnN0IHByb2dyZXNzID0gbmV3IFN0cmVhbS5UcmFuc2Zvcm0oKTtcbiAgICBwcm9ncmVzcy5fdHJhbnNmb3JtID0gKGNodW5rLCBlbmNvZGluZywgY2IpID0+IHtcbiAgICAgIGxvYWRlZCArPSBjaHVuay5sZW5ndGg7XG4gICAgICB0aGlzLmVtaXQoJ3Byb2dyZXNzJywge1xuICAgICAgICBkaXJlY3Rpb246ICd1cGxvYWQnLFxuICAgICAgICBsZW5ndGhDb21wdXRhYmxlLFxuICAgICAgICBsb2FkZWQsXG4gICAgICAgIHRvdGFsXG4gICAgICB9KTtcbiAgICAgIGNiKG51bGwsIGNodW5rKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHByb2dyZXNzO1xuICB9O1xuXG4gIGNvbnN0IGJ1ZmZlclRvQ2h1bmtzID0gYnVmZmVyID0+IHtcbiAgICBjb25zdCBjaHVua1NpemUgPSAxNiAqIDEwMjQ7IC8vIGRlZmF1bHQgaGlnaFdhdGVyTWFyayB2YWx1ZVxuICAgIGNvbnN0IGNodW5raW5nID0gbmV3IFN0cmVhbS5SZWFkYWJsZSgpO1xuICAgIGNvbnN0IHRvdGFsTGVuZ3RoID0gYnVmZmVyLmxlbmd0aDtcbiAgICBjb25zdCByZW1haW5kZXIgPSB0b3RhbExlbmd0aCAlIGNodW5rU2l6ZTtcbiAgICBjb25zdCBjdXRvZmYgPSB0b3RhbExlbmd0aCAtIHJlbWFpbmRlcjtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3V0b2ZmOyBpICs9IGNodW5rU2l6ZSkge1xuICAgICAgY29uc3QgY2h1bmsgPSBidWZmZXIuc2xpY2UoaSwgaSArIGNodW5rU2l6ZSk7XG4gICAgICBjaHVua2luZy5wdXNoKGNodW5rKTtcbiAgICB9XG5cbiAgICBpZiAocmVtYWluZGVyID4gMCkge1xuICAgICAgY29uc3QgcmVtYWluZGVyQnVmZmVyID0gYnVmZmVyLnNsaWNlKC1yZW1haW5kZXIpO1xuICAgICAgY2h1bmtpbmcucHVzaChyZW1haW5kZXJCdWZmZXIpO1xuICAgIH1cblxuICAgIGNodW5raW5nLnB1c2gobnVsbCk7IC8vIG5vIG1vcmUgZGF0YVxuXG4gICAgcmV0dXJuIGNodW5raW5nO1xuICB9O1xuXG4gIC8vIGlmIGEgRm9ybURhdGEgaW5zdGFuY2UgZ290IGNyZWF0ZWQsIHRoZW4gd2Ugc2VuZCB0aGF0IGFzIHRoZSByZXF1ZXN0IGJvZHlcbiAgY29uc3QgZm9ybURhdGEgPSB0aGlzLl9mb3JtRGF0YTtcbiAgaWYgKGZvcm1EYXRhKSB7XG4gICAgLy8gc2V0IGhlYWRlcnNcbiAgICBjb25zdCBoZWFkZXJzID0gZm9ybURhdGEuZ2V0SGVhZGVycygpO1xuICAgIGZvciAoY29uc3QgaSBpbiBoZWFkZXJzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGhlYWRlcnMsIGkpKSB7XG4gICAgICAgIGRlYnVnKCdzZXR0aW5nIEZvcm1EYXRhIGhlYWRlcjogXCIlczogJXNcIicsIGksIGhlYWRlcnNbaV0pO1xuICAgICAgICByZXEuc2V0SGVhZGVyKGksIGhlYWRlcnNbaV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGF0dGVtcHQgdG8gZ2V0IFwiQ29udGVudC1MZW5ndGhcIiBoZWFkZXJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaGFuZGxlLWNhbGxiYWNrLWVyclxuICAgIGZvcm1EYXRhLmdldExlbmd0aCgoZXJyLCBsZW5ndGgpID0+IHtcbiAgICAgIC8vIFRPRE86IEFkZCBjaHVua2VkIGVuY29kaW5nIHdoZW4gbm8gbGVuZ3RoIChpZiBlcnIpXG5cbiAgICAgIGRlYnVnKCdnb3QgRm9ybURhdGEgQ29udGVudC1MZW5ndGg6ICVzJywgbGVuZ3RoKTtcbiAgICAgIGlmICh0eXBlb2YgbGVuZ3RoID09PSAnbnVtYmVyJykge1xuICAgICAgICByZXEuc2V0SGVhZGVyKCdDb250ZW50LUxlbmd0aCcsIGxlbmd0aCk7XG4gICAgICB9XG5cbiAgICAgIGZvcm1EYXRhLnBpcGUoZ2V0UHJvZ3Jlc3NNb25pdG9yKCkpLnBpcGUocmVxKTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChCdWZmZXIuaXNCdWZmZXIoZGF0YSkpIHtcbiAgICBidWZmZXJUb0NodW5rcyhkYXRhKVxuICAgICAgLnBpcGUoZ2V0UHJvZ3Jlc3NNb25pdG9yKCkpXG4gICAgICAucGlwZShyZXEpO1xuICB9IGVsc2Uge1xuICAgIHJlcS5lbmQoZGF0YSk7XG4gIH1cbn07XG5cbi8vIENoZWNrIHdoZXRoZXIgcmVzcG9uc2UgaGFzIGEgbm9uLTAtc2l6ZWQgZ3ppcC1lbmNvZGVkIGJvZHlcblJlcXVlc3QucHJvdG90eXBlLl9zaG91bGRVbnppcCA9IHJlcyA9PiB7XG4gIGlmIChyZXMuc3RhdHVzQ29kZSA9PT0gMjA0IHx8IHJlcy5zdGF0dXNDb2RlID09PSAzMDQpIHtcbiAgICAvLyBUaGVzZSBhcmVuJ3Qgc3VwcG9zZWQgdG8gaGF2ZSBhbnkgYm9keVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIGhlYWRlciBjb250ZW50IGlzIGEgc3RyaW5nLCBhbmQgZGlzdGluY3Rpb24gYmV0d2VlbiAwIGFuZCBubyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsXG4gIGlmIChyZXMuaGVhZGVyc1snY29udGVudC1sZW5ndGgnXSA9PT0gJzAnKSB7XG4gICAgLy8gV2Uga25vdyB0aGF0IHRoZSBib2R5IGlzIGVtcHR5ICh1bmZvcnR1bmF0ZWx5LCB0aGlzIGNoZWNrIGRvZXMgbm90IGNvdmVyIGNodW5rZWQgZW5jb2RpbmcpXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gY29uc29sZS5sb2cocmVzKTtcbiAgcmV0dXJuIC9eXFxzKig/OmRlZmxhdGV8Z3ppcClcXHMqJC8udGVzdChyZXMuaGVhZGVyc1snY29udGVudC1lbmNvZGluZyddKTtcbn07XG5cbi8qKlxuICogT3ZlcnJpZGVzIEROUyBmb3Igc2VsZWN0ZWQgaG9zdG5hbWVzLiBUYWtlcyBvYmplY3QgbWFwcGluZyBob3N0bmFtZXMgdG8gSVAgYWRkcmVzc2VzLlxuICpcbiAqIFdoZW4gbWFraW5nIGEgcmVxdWVzdCB0byBhIFVSTCB3aXRoIGEgaG9zdG5hbWUgZXhhY3RseSBtYXRjaGluZyBhIGtleSBpbiB0aGUgb2JqZWN0LFxuICogdXNlIHRoZSBnaXZlbiBJUCBhZGRyZXNzIHRvIGNvbm5lY3QsIGluc3RlYWQgb2YgdXNpbmcgRE5TIHRvIHJlc29sdmUgdGhlIGhvc3RuYW1lLlxuICpcbiAqIEEgc3BlY2lhbCBob3N0IGAqYCBtYXRjaGVzIGV2ZXJ5IGhvc3RuYW1lIChrZWVwIHJlZGlyZWN0cyBpbiBtaW5kISlcbiAqXG4gKiAgICAgIHJlcXVlc3QuY29ubmVjdCh7XG4gKiAgICAgICAgJ3Rlc3QuZXhhbXBsZS5jb20nOiAnMTI3LjAuMC4xJyxcbiAqICAgICAgICAnaXB2Ni5leGFtcGxlLmNvbSc6ICc6OjEnLFxuICogICAgICB9KVxuICovXG5SZXF1ZXN0LnByb3RvdHlwZS5jb25uZWN0ID0gZnVuY3Rpb24oY29ubmVjdE92ZXJyaWRlKSB7XG4gIGlmICh0eXBlb2YgY29ubmVjdE92ZXJyaWRlID09PSAnc3RyaW5nJykge1xuICAgIHRoaXMuX2Nvbm5lY3RPdmVycmlkZSA9IHsgJyonOiBjb25uZWN0T3ZlcnJpZGUgfTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgY29ubmVjdE92ZXJyaWRlID09PSAnb2JqZWN0Jykge1xuICAgIHRoaXMuX2Nvbm5lY3RPdmVycmlkZSA9IGNvbm5lY3RPdmVycmlkZTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9jb25uZWN0T3ZlcnJpZGUgPSB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cblJlcXVlc3QucHJvdG90eXBlLnRydXN0TG9jYWxob3N0ID0gZnVuY3Rpb24odG9nZ2xlKSB7XG4gIHRoaXMuX3RydXN0TG9jYWxob3N0ID0gdG9nZ2xlID09PSB1bmRlZmluZWQgPyB0cnVlIDogdG9nZ2xlO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8vIGdlbmVyYXRlIEhUVFAgdmVyYiBtZXRob2RzXG5pZiAoIW1ldGhvZHMuaW5jbHVkZXMoJ2RlbCcpKSB7XG4gIC8vIGNyZWF0ZSBhIGNvcHkgc28gd2UgZG9uJ3QgY2F1c2UgY29uZmxpY3RzIHdpdGhcbiAgLy8gb3RoZXIgcGFja2FnZXMgdXNpbmcgdGhlIG1ldGhvZHMgcGFja2FnZSBhbmRcbiAgLy8gbnBtIDMueFxuICBtZXRob2RzID0gbWV0aG9kcy5zbGljZSgwKTtcbiAgbWV0aG9kcy5wdXNoKCdkZWwnKTtcbn1cblxubWV0aG9kcy5mb3JFYWNoKG1ldGhvZCA9PiB7XG4gIGNvbnN0IG5hbWUgPSBtZXRob2Q7XG4gIG1ldGhvZCA9IG1ldGhvZCA9PT0gJ2RlbCcgPyAnZGVsZXRlJyA6IG1ldGhvZDtcblxuICBtZXRob2QgPSBtZXRob2QudG9VcHBlckNhc2UoKTtcbiAgcmVxdWVzdFtuYW1lXSA9ICh1cmwsIGRhdGEsIGZuKSA9PiB7XG4gICAgY29uc3QgcmVxID0gcmVxdWVzdChtZXRob2QsIHVybCk7XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBmbiA9IGRhdGE7XG4gICAgICBkYXRhID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKG1ldGhvZCA9PT0gJ0dFVCcgfHwgbWV0aG9kID09PSAnSEVBRCcpIHtcbiAgICAgICAgcmVxLnF1ZXJ5KGRhdGEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVxLnNlbmQoZGF0YSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGZuKSByZXEuZW5kKGZuKTtcbiAgICByZXR1cm4gcmVxO1xuICB9O1xufSk7XG5cbi8qKlxuICogQ2hlY2sgaWYgYG1pbWVgIGlzIHRleHQgYW5kIHNob3VsZCBiZSBidWZmZXJlZC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbWltZVxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gaXNUZXh0KG1pbWUpIHtcbiAgY29uc3QgcGFydHMgPSBtaW1lLnNwbGl0KCcvJyk7XG4gIGNvbnN0IHR5cGUgPSBwYXJ0c1swXTtcbiAgY29uc3Qgc3VidHlwZSA9IHBhcnRzWzFdO1xuXG4gIHJldHVybiB0eXBlID09PSAndGV4dCcgfHwgc3VidHlwZSA9PT0gJ3gtd3d3LWZvcm0tdXJsZW5jb2RlZCc7XG59XG5cbmZ1bmN0aW9uIGlzSW1hZ2VPclZpZGVvKG1pbWUpIHtcbiAgY29uc3QgdHlwZSA9IG1pbWUuc3BsaXQoJy8nKVswXTtcblxuICByZXR1cm4gdHlwZSA9PT0gJ2ltYWdlJyB8fCB0eXBlID09PSAndmlkZW8nO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGBtaW1lYCBpcyBqc29uIG9yIGhhcyAranNvbiBzdHJ1Y3R1cmVkIHN5bnRheCBzdWZmaXguXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG1pbWVcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBpc0pTT04obWltZSkge1xuICAvLyBzaG91bGQgbWF0Y2ggL2pzb24gb3IgK2pzb25cbiAgLy8gYnV0IG5vdCAvanNvbi1zZXFcbiAgcmV0dXJuIC9bLytdanNvbigkfFteLVxcd10pLy50ZXN0KG1pbWUpO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHdlIHNob3VsZCBmb2xsb3cgdGhlIHJlZGlyZWN0IGBjb2RlYC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gY29kZVxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGlzUmVkaXJlY3QoY29kZSkge1xuICByZXR1cm4gWzMwMSwgMzAyLCAzMDMsIDMwNSwgMzA3LCAzMDhdLmluY2x1ZGVzKGNvZGUpO1xufVxuIl19