@commercetools-frontend/application-shell 21.23.10 → 21.24.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. package/dist/application-entry-point-47d5c548.cjs.dev.js +116 -0
  2. package/dist/application-entry-point-5619d5aa.cjs.prod.js +99 -0
  3. package/dist/application-entry-point-dc726674.esm.js +101 -0
  4. package/dist/{box-dd9e7e68.esm.js → box-4395623b.esm.js} +1 -3
  5. package/dist/{box-fdb2ccb6.cjs.dev.js → box-6b5be9a9.cjs.dev.js} +1 -3
  6. package/dist/{box-d849ea03.cjs.prod.js → box-8850277f.cjs.prod.js} +1 -3
  7. package/dist/{cart-ad0aba9b.cjs.prod.js → cart-0698b97d.cjs.prod.js} +1 -3
  8. package/dist/{cart-b92f3a8e.cjs.dev.js → cart-41f0b7bc.cjs.dev.js} +1 -3
  9. package/dist/{cart-167fea3b.esm.js → cart-a49faf67.esm.js} +1 -3
  10. package/dist/commercetools-frontend-application-shell.cjs.dev.js +49 -68
  11. package/dist/commercetools-frontend-application-shell.cjs.prod.js +49 -68
  12. package/dist/commercetools-frontend-application-shell.esm.js +39 -58
  13. package/dist/configure-apollo-942ef373.cjs.prod.js +922 -0
  14. package/dist/configure-apollo-a6f03ff8.cjs.dev.js +930 -0
  15. package/dist/configure-apollo-cc0b1668.esm.js +873 -0
  16. package/dist/{connected-square-4743b7de.esm.js → connected-square-3cac6bd7.esm.js} +1 -3
  17. package/dist/connected-square-47233754.cjs.dev.js +32 -0
  18. package/dist/connected-square-b2e25621.cjs.prod.js +32 -0
  19. package/dist/{constants-69249abd.esm.js → constants-7f04db3f.esm.js} +9 -9
  20. package/dist/{constants-88fb9ef8.cjs.prod.js → constants-e6409334.cjs.prod.js} +8 -8
  21. package/dist/{constants-c2d56f3d.cjs.dev.js → constants-e6f058e5.cjs.dev.js} +8 -8
  22. package/dist/declarations/src/apollo-links/utils.d.ts +2 -2
  23. package/dist/declarations/src/components/application-entry-point/application-entry-point.d.ts +4 -4
  24. package/dist/declarations/src/components/application-shell/application-shell.d.ts +7 -15
  25. package/dist/declarations/src/components/application-shell-authenticated/application-shell-authenticated.d.ts +21 -0
  26. package/dist/declarations/src/components/application-shell-provider/application-shell-provider.d.ts +6 -7
  27. package/dist/declarations/src/components/application-shell-provider/use-coerced-environment-values.d.ts +1 -23
  28. package/dist/declarations/src/components/authenticated/authenticated.d.ts +2 -2
  29. package/dist/declarations/src/components/authenticated/oidc-callback.async.d.ts +6 -0
  30. package/dist/declarations/src/components/authenticated/oidc-callback.d.ts +2 -2
  31. package/dist/declarations/src/components/configure-intl-provider/configure-intl-provider.d.ts +1 -1
  32. package/dist/declarations/src/components/error-apologizer/index.d.ts +6 -1
  33. package/dist/declarations/src/components/fetch-project/fetch-project.d.ts +4 -4
  34. package/dist/declarations/src/components/fetch-user/fetch-user.d.ts +3 -3
  35. package/dist/declarations/src/components/inject-reducers/inject-reducers.d.ts +1 -1
  36. package/dist/declarations/src/components/navbar/index.d.ts +100 -1
  37. package/dist/declarations/src/components/navbar/loading-navbar.d.ts +5 -0
  38. package/dist/declarations/src/components/navbar/menu-items.d.ts +99 -0
  39. package/dist/declarations/src/components/navbar/navbar.d.ts +6 -15
  40. package/dist/declarations/src/components/project-container/index.d.ts +78 -1
  41. package/dist/declarations/src/components/project-container/project-container.d.ts +6 -8
  42. package/dist/declarations/src/components/quick-access/butler-command/butler-command.d.ts +1 -1
  43. package/dist/declarations/src/components/quick-access/index.d.ts +2 -2
  44. package/dist/declarations/src/components/quick-access/types.d.ts +1 -1
  45. package/dist/declarations/src/components/redirect-to-login/index.d.ts +6 -0
  46. package/dist/declarations/src/components/redirect-to-logout/index.d.ts +5 -0
  47. package/dist/declarations/src/components/redirect-to-project-create/index.d.ts +6 -1
  48. package/dist/declarations/src/components/requests-in-flight-loader/index.d.ts +6 -1
  49. package/dist/declarations/src/components/route-catch-all/index.d.ts +3 -1
  50. package/dist/declarations/src/components/setup-flop-flip-provider/setup-flop-flip-provider.d.ts +3 -3
  51. package/dist/declarations/src/components/suspended-route/suspended-route.d.ts +1 -1
  52. package/dist/declarations/src/components/user-settings-menu/index.d.ts +12 -1
  53. package/dist/declarations/src/components/version-tracker/index.d.ts +6 -1
  54. package/dist/declarations/src/hooks/apollo-hooks/apollo-hooks.d.ts +1 -1
  55. package/dist/declarations/src/test-utils/test-utils.d.ts +2 -2
  56. package/dist/declarations/src/types/generated/mc.d.ts +3 -3
  57. package/dist/declarations/src/utils/get-mc-origin/get-mc-origin.d.ts +2 -0
  58. package/dist/declarations/src/utils/get-mc-origin/index.d.ts +1 -0
  59. package/dist/error-apologizer-c336db61.cjs.dev.js +56 -0
  60. package/dist/error-apologizer-c55ec6f7.cjs.prod.js +56 -0
  61. package/dist/error-apologizer-f8772b68.esm.js +42 -0
  62. package/dist/gear-2890f7fb.cjs.prod.js +32 -0
  63. package/dist/{gear-8418cd46.esm.js → gear-300dd24c.esm.js} +1 -3
  64. package/dist/gear-e8014c5a.cjs.dev.js +32 -0
  65. package/dist/get-mc-origin-314b77a2.cjs.dev.js +57 -0
  66. package/dist/get-mc-origin-5df60933.esm.js +50 -0
  67. package/dist/get-mc-origin-7968e04f.cjs.prod.js +57 -0
  68. package/dist/heart-000a023d.cjs.prod.js +32 -0
  69. package/dist/{heart-48c28091.esm.js → heart-dded66b4.esm.js} +1 -3
  70. package/dist/heart-f21b7d39.cjs.dev.js +32 -0
  71. package/dist/index-3765c4c9.cjs.prod.js +2870 -0
  72. package/dist/index-3fdf5681.esm.js +2970 -0
  73. package/dist/index-b9b8b690.cjs.dev.js +3054 -0
  74. package/dist/{list-with-search-c154a56e.esm.js → list-with-search-a3302710.esm.js} +1 -3
  75. package/dist/list-with-search-a5b72b33.cjs.prod.js +32 -0
  76. package/dist/list-with-search-ee796e9e.cjs.dev.js +32 -0
  77. package/dist/navbar-08a76df9.cjs.dev.js +670 -0
  78. package/dist/navbar-5384b0c3.esm.js +650 -0
  79. package/dist/navbar-c02843fb.cjs.prod.js +649 -0
  80. package/dist/oidc-0638d0c8.cjs.dev.js +67 -0
  81. package/dist/oidc-10fa96f0.esm.js +59 -0
  82. package/dist/oidc-540a091a.cjs.prod.js +67 -0
  83. package/dist/oidc-callback-152dc622.esm.js +240 -0
  84. package/dist/oidc-callback-784c3a39.cjs.prod.js +251 -0
  85. package/dist/oidc-callback-dc8682c0.cjs.dev.js +254 -0
  86. package/dist/paperclip-23d1e69c.cjs.prod.js +32 -0
  87. package/dist/{paperclip-18785dda.esm.js → paperclip-a61112e8.esm.js} +1 -3
  88. package/dist/paperclip-d653c134.cjs.dev.js +32 -0
  89. package/dist/plugin-0ee6aee4.cjs.dev.js +32 -0
  90. package/dist/{plugin-53c047bb.esm.js → plugin-3d353a5b.esm.js} +1 -3
  91. package/dist/plugin-7e57f237.cjs.prod.js +32 -0
  92. package/dist/project-container-6f0ea904.cjs.dev.js +387 -0
  93. package/dist/project-container-b6b2f6b2.esm.js +368 -0
  94. package/dist/project-container-bf8678e2.cjs.prod.js +369 -0
  95. package/dist/{project-expired-d8eaa253.esm.js → project-expired-6b9b6feb.esm.js} +47 -68
  96. package/dist/{project-expired-adce523b.cjs.dev.js → project-expired-9d71c314.cjs.dev.js} +47 -68
  97. package/dist/{project-expired-576a8329.cjs.prod.js → project-expired-d75d9e84.cjs.prod.js} +47 -68
  98. package/dist/{project-not-found-9a9753f2.cjs.dev.js → project-not-found-4b5b9479.cjs.prod.js} +42 -61
  99. package/dist/{project-not-found-8208c8f1.esm.js → project-not-found-c4634d60.esm.js} +42 -61
  100. package/dist/{project-not-found-daa5200b.cjs.prod.js → project-not-found-c977dbb0.cjs.dev.js} +42 -61
  101. package/dist/{project-not-initialized-4aeafe19.cjs.dev.js → project-not-initialized-4d0badf3.cjs.prod.js} +47 -68
  102. package/dist/{project-not-initialized-3408e87f.esm.js → project-not-initialized-a2f7b46e.esm.js} +47 -68
  103. package/dist/{project-not-initialized-5b416bcf.cjs.prod.js → project-not-initialized-e1533577.cjs.dev.js} +47 -68
  104. package/dist/{project-suspended-d3a6001d.cjs.dev.js → project-suspended-9027fc60.cjs.prod.js} +44 -63
  105. package/dist/{project-suspended-dc9ace34.cjs.prod.js → project-suspended-9e084c21.cjs.dev.js} +44 -63
  106. package/dist/{project-suspended-a7edc962.esm.js → project-suspended-f3d78447.esm.js} +44 -63
  107. package/dist/{quick-access-f42a8e0a.cjs.prod.js → quick-access-517ad7e1.cjs.prod.js} +573 -957
  108. package/dist/quick-access-82e1c9aa.esm.js +1907 -0
  109. package/dist/quick-access-8b2b678f.cjs.dev.js +1937 -0
  110. package/dist/redirect-to-login-1b892ab5.esm.js +147 -0
  111. package/dist/redirect-to-login-2be0e5db.cjs.prod.js +149 -0
  112. package/dist/redirect-to-login-64230f67.cjs.dev.js +149 -0
  113. package/dist/redirect-to-logout-15810ffb.cjs.dev.js +151 -0
  114. package/dist/redirect-to-logout-17e4ba2c.cjs.prod.js +151 -0
  115. package/dist/redirect-to-logout-80e772d1.esm.js +138 -0
  116. package/dist/redirect-to-project-create-048efa71.cjs.prod.js +61 -0
  117. package/dist/redirect-to-project-create-052f293e.esm.js +52 -0
  118. package/dist/redirect-to-project-create-f0e7b35e.cjs.dev.js +61 -0
  119. package/dist/{gear-28ff4f04.cjs.dev.js → redirector-0d98f9df.cjs.dev.js} +44 -5
  120. package/dist/redirector-47a6be71.esm.js +58 -0
  121. package/dist/{gear-6f8c30e3.cjs.prod.js → redirector-77ce2f5c.cjs.prod.js} +44 -5
  122. package/dist/requests-in-flight-loader-5329586b.esm.js +129 -0
  123. package/dist/requests-in-flight-loader-88f14402.cjs.dev.js +144 -0
  124. package/dist/requests-in-flight-loader-a7bc4e12.cjs.prod.js +144 -0
  125. package/dist/rocket-3e3f0a98.cjs.prod.js +32 -0
  126. package/dist/{rocket-ba116b5e.esm.js → rocket-4b088727.esm.js} +1 -3
  127. package/dist/rocket-95b6858d.cjs.dev.js +32 -0
  128. package/dist/route-catch-all-01cf0095.esm.js +41 -0
  129. package/dist/route-catch-all-3b490df1.cjs.prod.js +43 -0
  130. package/dist/route-catch-all-9ac99936.cjs.dev.js +43 -0
  131. package/dist/{service-page-project-switcher-49afafeb.cjs.prod.js → service-page-project-switcher-39dcfee8.cjs.prod.js} +5 -7
  132. package/dist/{service-page-project-switcher-866b2139.cjs.dev.js → service-page-project-switcher-7698339b.cjs.dev.js} +6 -8
  133. package/dist/{service-page-project-switcher-365c4c10.esm.js → service-page-project-switcher-fd30959b.esm.js} +6 -8
  134. package/dist/{speedometer-c1b94505.esm.js → speedometer-08a11d5a.esm.js} +1 -3
  135. package/dist/speedometer-2881cef6.cjs.prod.js +32 -0
  136. package/dist/speedometer-54f872f2.cjs.dev.js +32 -0
  137. package/dist/{star-da9123e0.esm.js → star-15244db1.esm.js} +1 -3
  138. package/dist/star-52bf7a64.cjs.dev.js +32 -0
  139. package/dist/star-f8502efb.cjs.prod.js +32 -0
  140. package/dist/tag-multi-1d1553b6.cjs.dev.js +32 -0
  141. package/dist/{tag-multi-c650b738.esm.js → tag-multi-3be995ac.esm.js} +1 -3
  142. package/dist/tag-multi-f9acb1c2.cjs.prod.js +32 -0
  143. package/dist/tree-structure-4650688d.cjs.dev.js +32 -0
  144. package/dist/{tree-structure-6af6fc3a.esm.js → tree-structure-c8753526.esm.js} +1 -3
  145. package/dist/tree-structure-f24ee3f6.cjs.prod.js +32 -0
  146. package/dist/use-applications-menu-4abb5796.esm.js +172 -0
  147. package/dist/use-applications-menu-68d83733.cjs.dev.js +188 -0
  148. package/dist/use-applications-menu-6b872b83.cjs.prod.js +188 -0
  149. package/dist/use-is-served-by-proxy-2b4916e5.cjs.dev.js +42 -0
  150. package/dist/use-is-served-by-proxy-499bfa16.esm.js +39 -0
  151. package/dist/use-is-served-by-proxy-51e76976.cjs.prod.js +42 -0
  152. package/dist/{user-filled-41729d77.esm.js → user-filled-2dc4e79e.esm.js} +1 -3
  153. package/dist/user-filled-2e6cb25e.cjs.dev.js +32 -0
  154. package/dist/user-filled-815b49a0.cjs.prod.js +32 -0
  155. package/dist/user-settings-menu-79d4cb1e.cjs.dev.js +523 -0
  156. package/dist/user-settings-menu-7bf6f146.cjs.prod.js +496 -0
  157. package/dist/user-settings-menu-ad7c27f0.esm.js +497 -0
  158. package/dist/version-tracker-20bb239d.esm.js +101 -0
  159. package/dist/version-tracker-69607d15.cjs.dev.js +107 -0
  160. package/dist/version-tracker-80e0f8f6.cjs.prod.js +107 -0
  161. package/dist/world-973090a5.cjs.dev.js +32 -0
  162. package/dist/{world-d91df1ee.esm.js → world-c5ea311a.esm.js} +1 -3
  163. package/dist/world-e1f9dbf8.cjs.prod.js +32 -0
  164. package/package.json +27 -27
  165. package/ssr/dist/commercetools-frontend-application-shell-ssr.cjs.dev.js +2 -3
  166. package/ssr/dist/commercetools-frontend-application-shell-ssr.cjs.prod.js +2 -3
  167. package/ssr/dist/commercetools-frontend-application-shell-ssr.esm.js +2 -3
  168. package/test-utils/dist/commercetools-frontend-application-shell-test-utils.cjs.dev.js +182 -215
  169. package/test-utils/dist/commercetools-frontend-application-shell-test-utils.cjs.prod.js +182 -215
  170. package/test-utils/dist/commercetools-frontend-application-shell-test-utils.esm.js +173 -206
  171. package/dist/application-entry-point-307baa50.cjs.prod.js +0 -1225
  172. package/dist/application-entry-point-3e14d46d.cjs.dev.js +0 -1250
  173. package/dist/application-entry-point-8d923438.esm.js +0 -1180
  174. package/dist/connected-square-abf36852.cjs.prod.js +0 -34
  175. package/dist/connected-square-ac52014f.cjs.dev.js +0 -34
  176. package/dist/declarations/src/components/application-shell/helpers.d.ts +0 -1
  177. package/dist/heart-33cd94c6.cjs.prod.js +0 -34
  178. package/dist/heart-fb31cf30.cjs.dev.js +0 -34
  179. package/dist/index-284fb405.esm.js +0 -4809
  180. package/dist/index-37414a3f.cjs.prod.js +0 -4643
  181. package/dist/index-ea32a85e.cjs.dev.js +0 -4888
  182. package/dist/list-with-search-34cd926c.cjs.dev.js +0 -34
  183. package/dist/list-with-search-a0b22169.cjs.prod.js +0 -34
  184. package/dist/oidc-1c91f5ee.cjs.prod.js +0 -67
  185. package/dist/oidc-5b2e4f8f.cjs.dev.js +0 -67
  186. package/dist/oidc-77749f1b.esm.js +0 -59
  187. package/dist/paperclip-2cd45b86.cjs.dev.js +0 -34
  188. package/dist/paperclip-b1b806ab.cjs.prod.js +0 -34
  189. package/dist/plugin-7cb7827e.cjs.dev.js +0 -34
  190. package/dist/plugin-e97ae3e6.cjs.prod.js +0 -34
  191. package/dist/quick-access-457a9f41.esm.js +0 -2290
  192. package/dist/quick-access-d553524e.cjs.dev.js +0 -2321
  193. package/dist/rocket-37c1aa11.cjs.dev.js +0 -34
  194. package/dist/rocket-b2dbda7f.cjs.prod.js +0 -34
  195. package/dist/speedometer-13b393fb.cjs.dev.js +0 -34
  196. package/dist/speedometer-1e69fd13.cjs.prod.js +0 -34
  197. package/dist/star-ab4be629.cjs.prod.js +0 -34
  198. package/dist/star-e165111e.cjs.dev.js +0 -34
  199. package/dist/tag-multi-5f498a7d.cjs.dev.js +0 -34
  200. package/dist/tag-multi-fb817131.cjs.prod.js +0 -34
  201. package/dist/tree-structure-779fcc36.cjs.prod.js +0 -34
  202. package/dist/tree-structure-ed6cdff8.cjs.dev.js +0 -34
  203. package/dist/user-filled-384a2eaf.cjs.prod.js +0 -34
  204. package/dist/user-filled-53d2eae0.cjs.dev.js +0 -34
  205. package/dist/world-12528632.cjs.prod.js +0 -34
  206. package/dist/world-6471d9f6.cjs.dev.js +0 -34
  207. /package/dist/declarations/src/components/{application-shell → redirect-to-login}/redirect-to-login.d.ts +0 -0
  208. /package/dist/declarations/src/components/{application-shell → redirect-to-logout}/redirect-to-logout.d.ts +0 -0
@@ -1,2321 +0,0 @@
1
- 'use strict';
2
-
3
- var _toConsumableArray = require('@babel/runtime-corejs3/helpers/toConsumableArray');
4
- var _taggedTemplateLiteral = require('@babel/runtime-corejs3/helpers/taggedTemplateLiteral');
5
- var _asyncToGenerator = require('@babel/runtime-corejs3/helpers/asyncToGenerator');
6
- var _slicedToArray = require('@babel/runtime-corejs3/helpers/slicedToArray');
7
- var _pt = require('prop-types');
8
- var _regeneratorRuntime = require('@babel/runtime-corejs3/regenerator');
9
- var _mapInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/map');
10
- var _Array$isArray = require('@babel/runtime-corejs3/core-js-stable/array/is-array');
11
- var _JSON$stringify = require('@babel/runtime-corejs3/core-js-stable/json/stringify');
12
- var _concatInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/concat');
13
- var _forEachInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/for-each');
14
- var _trimInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/trim');
15
- var _startsWithInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/starts-with');
16
- var react$1 = require('react');
17
- var reactIntl = require('react-intl');
18
- var reactBroadcast = require('@flopflip/react-broadcast');
19
- var react$2 = require('@apollo/client/react');
20
- var reactRouterDom = require('react-router-dom');
21
- var sdk = require('@commercetools-frontend/sdk');
22
- var commonTags = require('common-tags');
23
- var debounce = require('debounce-async');
24
- var constants = require('@commercetools-frontend/constants');
25
- var permissions$1 = require('@commercetools-frontend/permissions');
26
- var applicationShellConnectors = require('@commercetools-frontend/application-shell-connectors');
27
- var applicationEntryPoint = require('./application-entry-point-3e14d46d.cjs.dev.js');
28
- var _Object$keys = require('@babel/runtime-corejs3/core-js-stable/object/keys');
29
- var _Object$getOwnPropertySymbols = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols');
30
- var _Object$getOwnPropertyDescriptor = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor');
31
- var _Object$getOwnPropertyDescriptors = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors');
32
- var _Object$defineProperties = require('@babel/runtime-corejs3/core-js-stable/object/define-properties');
33
- var _Object$defineProperty = require('@babel/runtime-corejs3/core-js-stable/object/define-property');
34
- var _defineProperty = require('@babel/runtime-corejs3/helpers/defineProperty');
35
- var _includesInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/includes');
36
- var _sliceInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/slice');
37
- var _filterInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/filter');
38
- var _findIndexInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/find-index');
39
- var Fuse = require('fuse.js');
40
- var last = require('lodash/last');
41
- var react = require('@emotion/react');
42
- var LoadingSpinner = require('@commercetools-uikit/loading-spinner');
43
- var icons = require('@commercetools-uikit/icons');
44
- var designSystem = require('@commercetools-uikit/design-system');
45
- var jsxRuntime = require('@emotion/react/jsx-runtime');
46
- var dist_commercetoolsFrontendApplicationShell = require('./index-ea32a85e.cjs.dev.js');
47
- var _Promise = require('@babel/runtime-corejs3/core-js-stable/promise');
48
- var _reduceInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/reduce');
49
- var _findInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/find');
50
- require('@babel/runtime-corejs3/core-js-stable/object/entries');
51
- require('@babel/runtime-corejs3/core-js-stable/reflect/has');
52
- require('lodash/mapValues');
53
- require('@reduxjs/toolkit');
54
- require('redux-thunk');
55
- require('omit-empty-es');
56
- require('@commercetools-frontend/notifications');
57
- require('./constants-c2d56f3d.cjs.dev.js');
58
- require('@commercetools-frontend/react-notifications');
59
- require('redux-logger');
60
- require('react-dom');
61
- require('react-redux');
62
- require('@babel/runtime-corejs3/core-js-stable/instance/index-of');
63
- require('@commercetools-frontend/sentry');
64
- require('@babel/runtime-corejs3/core-js-stable/url');
65
- require('@apollo/client');
66
- require('apollo-link-logger');
67
- require('@babel/runtime-corejs3/core-js-stable/array/from');
68
- require('@babel/runtime-corejs3/core-js-stable/symbol');
69
- require('@babel/runtime-corejs3/core-js/get-iterator-method');
70
- require('@apollo/client/link/error');
71
- require('@commercetools-frontend/browser-history');
72
- require('@babel/runtime-corejs3/core-js-stable/instance/some');
73
- require('@babel/runtime-corejs3/core-js-stable/object/values');
74
- require('@commercetools/http-user-agent');
75
- require('uuid');
76
- require('@babel/runtime-corejs3/core-js-stable/reflect/construct');
77
- require('@babel/runtime-corejs3/helpers/createClass');
78
- require('@babel/runtime-corejs3/helpers/classCallCheck');
79
- require('@babel/runtime-corejs3/helpers/assertThisInitialized');
80
- require('@babel/runtime-corejs3/helpers/inherits');
81
- require('@babel/runtime-corejs3/helpers/possibleConstructorReturn');
82
- require('@babel/runtime-corejs3/helpers/getPrototypeOf');
83
- require('@babel/runtime-corejs3/helpers/wrapNativeSuper');
84
- require('@apollo/client/link/retry');
85
- require('tiny-invariant');
86
- require('@commercetools-frontend/application-components');
87
- require('@commercetools-frontend/application-config/ssr');
88
- require('@emotion/styled/base');
89
- require('@commercetools-frontend/i18n');
90
- require('perfume.js');
91
- require('@babel/runtime-corejs3/core-js-stable/instance/reverse');
92
- require('lodash/camelCase');
93
- require('./oidc-5b2e4f8f.cjs.dev.js');
94
- require('qss');
95
- require('jwt-decode');
96
- require('@commercetools-frontend/assets/images/locked-diamond.svg');
97
- require('@commercetools-uikit/notifications');
98
- require('@commercetools-uikit/spacings');
99
- require('@commercetools-uikit/constraints');
100
- require('@commercetools-uikit/card');
101
- require('@commercetools-uikit/text');
102
- require('@commercetools-uikit/flat-button');
103
- require('lodash/upperFirst');
104
- require('@commercetools-frontend/assets/images/ct-logo.svg');
105
- require('@commercetools-frontend/assets/images/icecream.svg');
106
- require('@commercetools-frontend/l10n');
107
- require('@commercetools-frontend/assets/images/logo.svg');
108
- require('downshift');
109
- require('@commercetools-uikit/avatar');
110
- require('@commercetools-uikit/accessible-hidden');
111
- require('@babel/runtime-corejs3/helpers/objectWithoutProperties');
112
- require('memoize-one');
113
- require('@commercetools-uikit/select-input');
114
- require('lodash/isNil');
115
- require('@babel/runtime-corejs3/core-js-stable/object/from-entries');
116
- require('@babel/runtime-corejs3/core-js-stable/instance/flags');
117
- require('@flopflip/launchdarkly-adapter');
118
- require('@flopflip/http-adapter');
119
- require('@flopflip/combine-adapters');
120
- require('@babel/runtime-corejs3/core-js-stable/instance/every');
121
- require('classnames');
122
- require('@commercetools-uikit/icons/inline-svg');
123
- require('@commercetools-frontend/assets/images/diagonal-line.svg');
124
- require('lodash/throttle');
125
- require('@commercetools-frontend/url-utils');
126
- require('@commercetools-uikit/design-system/materials/resets.css');
127
- require('@commercetools-frontend/actions-global');
128
-
129
- function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
130
-
131
- var _pt__default = /*#__PURE__*/_interopDefault(_pt);
132
- var _regeneratorRuntime__default = /*#__PURE__*/_interopDefault(_regeneratorRuntime);
133
- var _mapInstanceProperty__default = /*#__PURE__*/_interopDefault(_mapInstanceProperty);
134
- var _Array$isArray__default = /*#__PURE__*/_interopDefault(_Array$isArray);
135
- var _JSON$stringify__default = /*#__PURE__*/_interopDefault(_JSON$stringify);
136
- var _concatInstanceProperty__default = /*#__PURE__*/_interopDefault(_concatInstanceProperty);
137
- var _forEachInstanceProperty__default = /*#__PURE__*/_interopDefault(_forEachInstanceProperty);
138
- var _trimInstanceProperty__default = /*#__PURE__*/_interopDefault(_trimInstanceProperty);
139
- var _startsWithInstanceProperty__default = /*#__PURE__*/_interopDefault(_startsWithInstanceProperty);
140
- var debounce__default = /*#__PURE__*/_interopDefault(debounce);
141
- var _Object$keys__default = /*#__PURE__*/_interopDefault(_Object$keys);
142
- var _Object$getOwnPropertySymbols__default = /*#__PURE__*/_interopDefault(_Object$getOwnPropertySymbols);
143
- var _Object$getOwnPropertyDescriptor__default = /*#__PURE__*/_interopDefault(_Object$getOwnPropertyDescriptor);
144
- var _Object$getOwnPropertyDescriptors__default = /*#__PURE__*/_interopDefault(_Object$getOwnPropertyDescriptors);
145
- var _Object$defineProperties__default = /*#__PURE__*/_interopDefault(_Object$defineProperties);
146
- var _Object$defineProperty__default = /*#__PURE__*/_interopDefault(_Object$defineProperty);
147
- var _includesInstanceProperty__default = /*#__PURE__*/_interopDefault(_includesInstanceProperty);
148
- var _sliceInstanceProperty__default = /*#__PURE__*/_interopDefault(_sliceInstanceProperty);
149
- var _filterInstanceProperty__default = /*#__PURE__*/_interopDefault(_filterInstanceProperty);
150
- var _findIndexInstanceProperty__default = /*#__PURE__*/_interopDefault(_findIndexInstanceProperty);
151
- var Fuse__default = /*#__PURE__*/_interopDefault(Fuse);
152
- var last__default = /*#__PURE__*/_interopDefault(last);
153
- var LoadingSpinner__default = /*#__PURE__*/_interopDefault(LoadingSpinner);
154
- var _Promise__default = /*#__PURE__*/_interopDefault(_Promise);
155
- var _reduceInstanceProperty__default = /*#__PURE__*/_interopDefault(_reduceInstanceProperty);
156
- var _findInstanceProperty__default = /*#__PURE__*/_interopDefault(_findInstanceProperty);
157
-
158
- function _EMOTION_STRINGIFIED_CSS_ERROR__$1() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; }
159
-
160
- var _ref$1 = process.env.NODE_ENV === "production" ? {
161
- name: "13n9jnb",
162
- styles: "align-self:center;>*{display:block;}"
163
- } : {
164
- name: "1qkkrpz-ButlerCommand",
165
- styles: "align-self:center;>*{display:block;};label:ButlerCommand;",
166
- map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci1jb21tYW5kLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFtRGdCIiwiZmlsZSI6ImJ1dGxlci1jb21tYW5kLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29tbWFuZCB9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgTW91c2VFdmVudEhhbmRsZXIgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBBbmdsZVRoaW5SaWdodEljb24gfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9pY29ucyc7XG5pbXBvcnQgeyBjdXN0b21Qcm9wZXJ0aWVzIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvZGVzaWduLXN5c3RlbSc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNvbW1hbmQ6IENvbW1hbmQ7XG4gIGlzU2VsZWN0ZWQ/OiBib29sZWFuO1xuICBvbkNsaWNrOiBNb3VzZUV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD47XG4gIG9uTW91c2VFbnRlcjogTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+O1xufTtcblxuY29uc3QgQnV0bGVyQ29tbWFuZCA9IChwcm9wczogUHJvcHMpID0+IChcbiAgPGRpdlxuICAgIGtleT17cHJvcHMuY29tbWFuZC5pZH1cbiAgICBkYXRhLXRlc3RpZD17YHF1aWNrLWFjY2Vzcy1yZXN1bHQoJHtwcm9wcy5jb21tYW5kLmlkfSlgfVxuICAgIGFyaWEtY3VycmVudD17cHJvcHMuaXNTZWxlY3RlZCA9PT0gdHJ1ZSA/ICd0cnVlJyA6ICdmYWxzZSd9XG4gICAgY3NzPXtjc3NgXG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgcGFkZGluZzogMCAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019O1xuICAgICAgaGVpZ2h0OiAzNnB4O1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDIwMDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAzNnB4O1xuICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgJHtwcm9wcy5pc1NlbGVjdGVkID09PSB0cnVlXG4gICAgICAgID8gYFxuICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yQWNjZW50fTtcbiAgICAgICAgICAgIGNvbG9yOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JTdXJmYWNlfTtcbiAgICAgICAgICBgXG4gICAgICAgIDogJyd9XG4gICAgYH1cbiAgICBvbk1vdXNlRW50ZXI9e3Byb3BzLm9uTW91c2VFbnRlcn1cbiAgICBvbkNsaWNrPXtwcm9wcy5vbkNsaWNrfVxuICA+XG4gICAgPGRpdlxuICAgICAgY3NzPXtjc3NgXG4gICAgICAgIGZsZXg6IDEgYXV0bztcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICBgfVxuICAgID5cbiAgICAgIHtwcm9wcy5jb21tYW5kLnRleHR9XG4gICAgPC9kaXY+XG4gICAgeygoQXJyYXkuaXNBcnJheShwcm9wcy5jb21tYW5kLnN1YkNvbW1hbmRzKSAmJlxuICAgICAgcHJvcHMuY29tbWFuZC5zdWJDb21tYW5kcy5sZW5ndGggPiAwKSB8fFxuICAgICAgdHlwZW9mIHByb3BzLmNvbW1hbmQuc3ViQ29tbWFuZHMgPT09ICdmdW5jdGlvbicpICYmIChcbiAgICAgIDxkaXZcbiAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgICAgID4gKiB7XG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICB9XG4gICAgICAgIGB9XG4gICAgICA+XG4gICAgICAgIDxBbmdsZVRoaW5SaWdodEljb25cbiAgICAgICAgICBzaXplPVwibWVkaXVtXCJcbiAgICAgICAgICBjb2xvcj17cHJvcHMuaXNTZWxlY3RlZCA/ICdzdXJmYWNlJyA6ICduZXV0cmFsNjAnfVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgKX1cbiAgPC9kaXY+XG4pO1xuXG5CdXRsZXJDb21tYW5kLmRpc3BsYXlOYW1lID0gJ0J1dGxlckNvbW1hbmQnO1xuXG5leHBvcnQgZGVmYXVsdCBCdXRsZXJDb21tYW5kO1xuIl19 */",
167
- toString: _EMOTION_STRINGIFIED_CSS_ERROR__$1
168
- };
169
-
170
- var _ref2 = process.env.NODE_ENV === "production" ? {
171
- name: "lhzw0z",
172
- styles: "flex:1 auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis"
173
- } : {
174
- name: "zq3ooq-ButlerCommand",
175
- styles: "flex:1 auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;label:ButlerCommand;",
176
- map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci1jb21tYW5kLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFzQ2MiLCJmaWxlIjoiYnV0bGVyLWNvbW1hbmQudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDb21tYW5kIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBNb3VzZUV2ZW50SGFuZGxlciB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IEFuZ2xlVGhpblJpZ2h0SWNvbiB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2ljb25zJztcbmltcG9ydCB7IGN1c3RvbVByb3BlcnRpZXMgfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9kZXNpZ24tc3lzdGVtJztcblxudHlwZSBQcm9wcyA9IHtcbiAgY29tbWFuZDogQ29tbWFuZDtcbiAgaXNTZWxlY3RlZD86IGJvb2xlYW47XG4gIG9uQ2xpY2s6IE1vdXNlRXZlbnRIYW5kbGVyPEhUTUxEaXZFbGVtZW50PjtcbiAgb25Nb3VzZUVudGVyOiBNb3VzZUV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD47XG59O1xuXG5jb25zdCBCdXRsZXJDb21tYW5kID0gKHByb3BzOiBQcm9wcykgPT4gKFxuICA8ZGl2XG4gICAga2V5PXtwcm9wcy5jb21tYW5kLmlkfVxuICAgIGRhdGEtdGVzdGlkPXtgcXVpY2stYWNjZXNzLXJlc3VsdCgke3Byb3BzLmNvbW1hbmQuaWR9KWB9XG4gICAgYXJpYS1jdXJyZW50PXtwcm9wcy5pc1NlbGVjdGVkID09PSB0cnVlID8gJ3RydWUnIDogJ2ZhbHNlJ31cbiAgICBjc3M9e2Nzc2BcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBwYWRkaW5nOiAwICR7Y3VzdG9tUHJvcGVydGllcy5zcGFjaW5nTX07XG4gICAgICBoZWlnaHQ6IDM2cHg7XG4gICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICBmb250LXdlaWdodDogMjAwO1xuICAgICAgbGluZS1oZWlnaHQ6IDM2cHg7XG4gICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICAke3Byb3BzLmlzU2VsZWN0ZWQgPT09IHRydWVcbiAgICAgICAgPyBgXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JBY2NlbnR9O1xuICAgICAgICAgICAgY29sb3I6ICR7Y3VzdG9tUHJvcGVydGllcy5jb2xvclN1cmZhY2V9O1xuICAgICAgICAgIGBcbiAgICAgICAgOiAnJ31cbiAgICBgfVxuICAgIG9uTW91c2VFbnRlcj17cHJvcHMub25Nb3VzZUVudGVyfVxuICAgIG9uQ2xpY2s9e3Byb3BzLm9uQ2xpY2t9XG4gID5cbiAgICA8ZGl2XG4gICAgICBjc3M9e2Nzc2BcbiAgICAgICAgZmxleDogMSBhdXRvO1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgIGB9XG4gICAgPlxuICAgICAge3Byb3BzLmNvbW1hbmQudGV4dH1cbiAgICA8L2Rpdj5cbiAgICB7KChBcnJheS5pc0FycmF5KHByb3BzLmNvbW1hbmQuc3ViQ29tbWFuZHMpICYmXG4gICAgICBwcm9wcy5jb21tYW5kLnN1YkNvbW1hbmRzLmxlbmd0aCA+IDApIHx8XG4gICAgICB0eXBlb2YgcHJvcHMuY29tbWFuZC5zdWJDb21tYW5kcyA9PT0gJ2Z1bmN0aW9uJykgJiYgKFxuICAgICAgPGRpdlxuICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgICAgICAgPiAqIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgIH1cbiAgICAgICAgYH1cbiAgICAgID5cbiAgICAgICAgPEFuZ2xlVGhpblJpZ2h0SWNvblxuICAgICAgICAgIHNpemU9XCJtZWRpdW1cIlxuICAgICAgICAgIGNvbG9yPXtwcm9wcy5pc1NlbGVjdGVkID8gJ3N1cmZhY2UnIDogJ25ldXRyYWw2MCd9XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICApfVxuICA8L2Rpdj5cbik7XG5cbkJ1dGxlckNvbW1hbmQuZGlzcGxheU5hbWUgPSAnQnV0bGVyQ29tbWFuZCc7XG5cbmV4cG9ydCBkZWZhdWx0IEJ1dGxlckNvbW1hbmQ7XG4iXX0= */",
177
- toString: _EMOTION_STRINGIFIED_CSS_ERROR__$1
178
- };
179
-
180
- var ButlerCommand = function ButlerCommand(props) {
181
- var _context;
182
-
183
- return jsxRuntime.jsxs("div", {
184
- "data-testid": "quick-access-result(".concat(props.command.id, ")"),
185
- "aria-current": props.isSelected === true ? 'true' : 'false',
186
- css: /*#__PURE__*/react.css("display:flex;padding:0 ", designSystem.customProperties.spacingM, ";height:36px;font-size:16px;font-weight:200;line-height:36px;cursor:default;", props.isSelected === true ? _concatInstanceProperty__default["default"](_context = "\n background: ".concat(designSystem.customProperties.colorAccent, ";\n color: ")).call(_context, designSystem.customProperties.colorSurface, ";\n ") : '', ";" + (process.env.NODE_ENV === "production" ? "" : ";label:ButlerCommand;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci1jb21tYW5kLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFtQlkiLCJmaWxlIjoiYnV0bGVyLWNvbW1hbmQudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDb21tYW5kIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBNb3VzZUV2ZW50SGFuZGxlciB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IEFuZ2xlVGhpblJpZ2h0SWNvbiB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2ljb25zJztcbmltcG9ydCB7IGN1c3RvbVByb3BlcnRpZXMgfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9kZXNpZ24tc3lzdGVtJztcblxudHlwZSBQcm9wcyA9IHtcbiAgY29tbWFuZDogQ29tbWFuZDtcbiAgaXNTZWxlY3RlZD86IGJvb2xlYW47XG4gIG9uQ2xpY2s6IE1vdXNlRXZlbnRIYW5kbGVyPEhUTUxEaXZFbGVtZW50PjtcbiAgb25Nb3VzZUVudGVyOiBNb3VzZUV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD47XG59O1xuXG5jb25zdCBCdXRsZXJDb21tYW5kID0gKHByb3BzOiBQcm9wcykgPT4gKFxuICA8ZGl2XG4gICAga2V5PXtwcm9wcy5jb21tYW5kLmlkfVxuICAgIGRhdGEtdGVzdGlkPXtgcXVpY2stYWNjZXNzLXJlc3VsdCgke3Byb3BzLmNvbW1hbmQuaWR9KWB9XG4gICAgYXJpYS1jdXJyZW50PXtwcm9wcy5pc1NlbGVjdGVkID09PSB0cnVlID8gJ3RydWUnIDogJ2ZhbHNlJ31cbiAgICBjc3M9e2Nzc2BcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBwYWRkaW5nOiAwICR7Y3VzdG9tUHJvcGVydGllcy5zcGFjaW5nTX07XG4gICAgICBoZWlnaHQ6IDM2cHg7XG4gICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICBmb250LXdlaWdodDogMjAwO1xuICAgICAgbGluZS1oZWlnaHQ6IDM2cHg7XG4gICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICAke3Byb3BzLmlzU2VsZWN0ZWQgPT09IHRydWVcbiAgICAgICAgPyBgXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JBY2NlbnR9O1xuICAgICAgICAgICAgY29sb3I6ICR7Y3VzdG9tUHJvcGVydGllcy5jb2xvclN1cmZhY2V9O1xuICAgICAgICAgIGBcbiAgICAgICAgOiAnJ31cbiAgICBgfVxuICAgIG9uTW91c2VFbnRlcj17cHJvcHMub25Nb3VzZUVudGVyfVxuICAgIG9uQ2xpY2s9e3Byb3BzLm9uQ2xpY2t9XG4gID5cbiAgICA8ZGl2XG4gICAgICBjc3M9e2Nzc2BcbiAgICAgICAgZmxleDogMSBhdXRvO1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgIGB9XG4gICAgPlxuICAgICAge3Byb3BzLmNvbW1hbmQudGV4dH1cbiAgICA8L2Rpdj5cbiAgICB7KChBcnJheS5pc0FycmF5KHByb3BzLmNvbW1hbmQuc3ViQ29tbWFuZHMpICYmXG4gICAgICBwcm9wcy5jb21tYW5kLnN1YkNvbW1hbmRzLmxlbmd0aCA+IDApIHx8XG4gICAgICB0eXBlb2YgcHJvcHMuY29tbWFuZC5zdWJDb21tYW5kcyA9PT0gJ2Z1bmN0aW9uJykgJiYgKFxuICAgICAgPGRpdlxuICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgICAgICAgPiAqIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgIH1cbiAgICAgICAgYH1cbiAgICAgID5cbiAgICAgICAgPEFuZ2xlVGhpblJpZ2h0SWNvblxuICAgICAgICAgIHNpemU9XCJtZWRpdW1cIlxuICAgICAgICAgIGNvbG9yPXtwcm9wcy5pc1NlbGVjdGVkID8gJ3N1cmZhY2UnIDogJ25ldXRyYWw2MCd9XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICApfVxuICA8L2Rpdj5cbik7XG5cbkJ1dGxlckNvbW1hbmQuZGlzcGxheU5hbWUgPSAnQnV0bGVyQ29tbWFuZCc7XG5cbmV4cG9ydCBkZWZhdWx0IEJ1dGxlckNvbW1hbmQ7XG4iXX0= */"),
187
- onMouseEnter: props.onMouseEnter,
188
- onClick: props.onClick,
189
- children: [jsxRuntime.jsx("div", {
190
- css: _ref2,
191
- children: props.command.text
192
- }), (_Array$isArray__default["default"](props.command.subCommands) && props.command.subCommands.length > 0 || typeof props.command.subCommands === 'function') && jsxRuntime.jsx("div", {
193
- css: _ref$1,
194
- children: jsxRuntime.jsx(icons.AngleThinRightIcon, {
195
- size: "medium",
196
- color: props.isSelected ? 'surface' : 'neutral60'
197
- })
198
- })]
199
- }, props.command.id);
200
- };
201
-
202
- ButlerCommand.propTypes = process.env.NODE_ENV !== "production" ? {
203
- command: _pt__default["default"].any.isRequired,
204
- isSelected: _pt__default["default"].bool,
205
- onClick: _pt__default["default"].func.isRequired,
206
- onMouseEnter: _pt__default["default"].func.isRequired
207
- } : {};
208
- ButlerCommand.displayName = 'ButlerCommand';
209
-
210
- var messages = reactIntl.defineMessages({
211
- inputPlacehoder: {
212
- id: 'QuickAccess.inputPlaceholder',
213
- defaultMessage: 'Go to...'
214
- },
215
- offline: {
216
- id: 'QuickAccess.offline',
217
- defaultMessage: 'Offline'
218
- },
219
- noResults: {
220
- id: 'QuickAccess.noResults',
221
- defaultMessage: 'No results found'
222
- },
223
- // create-commands
224
- setResourceLanguage: {
225
- id: 'QuickAccess.setResourceLanguage',
226
- defaultMessage: 'Set Resource Language'
227
- },
228
- openDashboard: {
229
- id: 'QuickAccess.openDashboard',
230
- defaultMessage: 'Open Dashboard'
231
- },
232
- openProducts: {
233
- id: 'QuickAccess.openProducts',
234
- defaultMessage: 'Open Products'
235
- },
236
- openProductList: {
237
- id: 'QuickAccess.openProductList',
238
- defaultMessage: 'Open Product List'
239
- },
240
- openProductVariantGeneral: {
241
- id: 'QuickAccess.openProductVariantGeneral',
242
- defaultMessage: 'General'
243
- },
244
- openProductVariantList: {
245
- id: 'QuickAccess.openProductVariantList',
246
- defaultMessage: 'Variants'
247
- },
248
- openProductVariantSearch: {
249
- id: 'QuickAccess.openProductVariantSearch',
250
- defaultMessage: 'Int. / Ext. Search'
251
- },
252
- openModifiedProducts: {
253
- id: 'QuickAccess.openModifiedProducts',
254
- defaultMessage: 'Open Review Modified Products'
255
- },
256
- openPimSearch: {
257
- id: 'QuickAccess.openPimSearch',
258
- defaultMessage: 'Open PIM Search'
259
- },
260
- openAddProducts: {
261
- id: 'QuickAccess.openAddProducts',
262
- defaultMessage: 'Open Add Products'
263
- },
264
- openCategories: {
265
- id: 'QuickAccess.openCategories',
266
- defaultMessage: 'Open Categories'
267
- },
268
- openCategoriesList: {
269
- id: 'QuickAccess.openCategoriesList',
270
- defaultMessage: 'Open Categories List'
271
- },
272
- openCategoriesSearch: {
273
- id: 'QuickAccess.openCategoriesSearch',
274
- defaultMessage: 'Open Categories Search'
275
- },
276
- openAddCategory: {
277
- id: 'QuickAccess.openAddCategory',
278
- defaultMessage: 'Open Add Category'
279
- },
280
- openCustomers: {
281
- id: 'QuickAccess.openCustomers',
282
- defaultMessage: 'Open Customers'
283
- },
284
- openCustomersList: {
285
- id: 'QuickAccess.openCustomersList',
286
- defaultMessage: 'Open Customers List'
287
- },
288
- openAddCustomer: {
289
- id: 'QuickAccess.openAddCustomer',
290
- defaultMessage: 'Open Add Customer'
291
- },
292
- openCustomerGroupsList: {
293
- id: 'QuickAccess.openCustomerGroupsList',
294
- defaultMessage: 'Open Customer Groups List'
295
- },
296
- openAddCustomerGroup: {
297
- id: 'QuickAccess.openAddCustomerGroup',
298
- defaultMessage: 'Open Add Customer Group'
299
- },
300
- openOrders: {
301
- id: 'QuickAccess.openOrders',
302
- defaultMessage: 'Open Orders'
303
- },
304
- openOrdersList: {
305
- id: 'QuickAccess.openOrdersList',
306
- defaultMessage: 'Open Orders List'
307
- },
308
- openAddOrder: {
309
- id: 'QuickAccess.openAddOrder',
310
- defaultMessage: 'Open Add Order'
311
- },
312
- openDiscounts: {
313
- id: 'QuickAccess.openDiscounts',
314
- defaultMessage: 'Open Discounts'
315
- },
316
- openProductDiscountsList: {
317
- id: 'QuickAccess.openProductDiscountsList',
318
- defaultMessage: 'Open Product Discounts List'
319
- },
320
- openCartDiscountsList: {
321
- id: 'QuickAccess.openCartDiscountsList',
322
- defaultMessage: 'Open Cart Discounts List'
323
- },
324
- openDiscountCodesList: {
325
- id: 'QuickAccess.openDiscountCodesList',
326
- defaultMessage: 'Open Discount Codes List'
327
- },
328
- openAddDiscount: {
329
- id: 'QuickAccess.openAddDiscount',
330
- defaultMessage: 'Open Add Discount'
331
- },
332
- openAddProductDiscount: {
333
- id: 'QuickAccess.openAddProductDiscount',
334
- defaultMessage: 'Open Add Product Discount'
335
- },
336
- openAddCartDiscount: {
337
- id: 'QuickAccess.openAddCartDiscount',
338
- defaultMessage: 'Open Add Cart Discount'
339
- },
340
- openAddDiscountCode: {
341
- id: 'QuickAccess.openAddDiscountCode',
342
- defaultMessage: 'Open Add Discount Code'
343
- },
344
- openSettings: {
345
- id: 'QuickAccess.openSettings',
346
- defaultMessage: 'Open Settings'
347
- },
348
- openProjectSettings: {
349
- id: 'QuickAccess.openProjectSettings',
350
- defaultMessage: 'Open Project Settings'
351
- },
352
- openProjectSettingsInternationalTab: {
353
- id: 'QuickAccess.openProjectSettingsInternationalTab',
354
- defaultMessage: 'Open Project Settings • International'
355
- },
356
- openProjectSettingsTaxesTab: {
357
- id: 'QuickAccess.openProjectSettingsTaxesTab',
358
- defaultMessage: 'Open Project Settings • Taxes'
359
- },
360
- openProjectSettingsShippingMethodsTab: {
361
- id: 'QuickAccess.openProjectSettingsShippingMethodsTab',
362
- defaultMessage: 'Open Project Settings • Shipping Methods'
363
- },
364
- openProjectSettingsChannelsTab: {
365
- id: 'QuickAccess.openProjectSettingsChannelsTab',
366
- defaultMessage: 'Open Project Settings • Channels'
367
- },
368
- openProjectSettingsStoresTab: {
369
- id: 'QuickAccess.openProjectSettingsStoresTab',
370
- defaultMessage: 'Open Project Settings • Stores'
371
- },
372
- openProductTypesSettings: {
373
- id: 'QuickAccess.openProductTypesSettings',
374
- defaultMessage: 'Open Product Types Settings'
375
- },
376
- openDeveloperSettings: {
377
- id: 'QuickAccess.openDeveloperSettings',
378
- defaultMessage: 'Open Developer Settings'
379
- },
380
- openCustomApplicationsSettings: {
381
- id: 'QuickAccess.openCustomApplicationsSettings',
382
- defaultMessage: 'Open Custom Applications Settings'
383
- },
384
- openApiClientsList: {
385
- id: 'QuickAccess.openApiClientsList',
386
- defaultMessage: 'Open API Clients'
387
- },
388
- openAddApiClient: {
389
- id: 'QuickAccess.openAddApiClient',
390
- defaultMessage: 'Open Add API Client'
391
- },
392
- openSupport: {
393
- id: 'QuickAccess.openSupport',
394
- defaultMessage: 'Open Support'
395
- },
396
- openMyProfile: {
397
- id: 'QuickAccess.openMyProfile',
398
- defaultMessage: 'Open My Profile'
399
- },
400
- showPrivacyPolicy: {
401
- id: 'QuickAccess.showPrivacyPolicy',
402
- defaultMessage: 'Show Privacy Policy'
403
- },
404
- logout: {
405
- id: 'QuickAccess.logout',
406
- defaultMessage: 'Logout'
407
- },
408
- useProject: {
409
- id: 'QuickAccess.useProject',
410
- defaultMessage: 'Switch to project "{projectName}"'
411
- },
412
- openManageProjects: {
413
- id: 'QuickAccess.openManageProject',
414
- defaultMessage: 'Open Manage Projects'
415
- },
416
- openManageOrganizations: {
417
- id: 'QuickAccess.openManageOrganizations',
418
- defaultMessage: 'Open Manage Organizations'
419
- },
420
- // subcommands
421
- openVariantById: {
422
- id: 'QuickAccess.openVariantById',
423
- defaultMessage: 'Open Variant "{id}" (id)'
424
- },
425
- openVariantByKey: {
426
- id: 'QuickAccess.openVariantByKey',
427
- defaultMessage: 'Open Variant "{key}" (key)'
428
- },
429
- openVariantBySku: {
430
- id: 'QuickAccess.openVariantBySku',
431
- defaultMessage: 'Open Variant "{sku}" (sku)'
432
- },
433
- showProduct: {
434
- id: 'QuickAccess.showProduct',
435
- defaultMessage: 'Show Product "{productName}"'
436
- },
437
- showProductVariant: {
438
- id: 'QuickAccess.showProductVariant',
439
- defaultMessage: 'Show Product Variant "{variantName}"'
440
- },
441
- showProductVariantAttributes: {
442
- id: 'QuickAccess.showProductVariantAttributes',
443
- defaultMessage: 'Show Attributes'
444
- },
445
- showProductVariantImages: {
446
- id: 'QuickAccess.showProductVariantImages',
447
- defaultMessage: 'Show Images'
448
- },
449
- showProductVariantPrices: {
450
- id: 'QuickAccess.showProductVariantPrices',
451
- defaultMessage: 'Show Prices'
452
- },
453
- showProductVariantInventory: {
454
- id: 'QuickAccess.showProductVariantInventory',
455
- defaultMessage: 'Show Inventory'
456
- }
457
- });
458
-
459
- var _templateObject$3, _templateObject2$2;
460
-
461
- function ownKeys(object, enumerableOnly) { var keys = _Object$keys__default["default"](object); if (_Object$getOwnPropertySymbols__default["default"]) { var symbols = _Object$getOwnPropertySymbols__default["default"](object); enumerableOnly && (symbols = _filterInstanceProperty__default["default"](symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor__default["default"](object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
462
-
463
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context15, _context16; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty__default["default"](_context15 = ownKeys(Object(source), !0)).call(_context15, function (key) { _defineProperty(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors__default["default"] ? _Object$defineProperties__default["default"](target, _Object$getOwnPropertyDescriptors__default["default"](source)) : _forEachInstanceProperty__default["default"](_context16 = ownKeys(Object(source))).call(_context16, function (key) { _Object$defineProperty__default["default"](target, key, _Object$getOwnPropertyDescriptor__default["default"](source, key)); }); } return target; }
464
-
465
- function _EMOTION_STRINGIFIED_CSS_ERROR__() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; }
466
-
467
- var isSelectAllCombo = function isSelectAllCombo(event) {
468
- return event.key === 'a' && event.metaKey && !event.ctrlKey && !event.altKey && !event.shiftKey;
469
- };
470
-
471
- var isCloseCombo = function isCloseCombo(event) {
472
- return event.key === 'Escape' && !event.metaKey && !event.ctrlKey && !event.altKey && !event.shiftKey;
473
- };
474
-
475
- var getPlatform = function getPlatform() {
476
- var _context, _context2, _context3, _context4;
477
-
478
- if (_includesInstanceProperty__default["default"](_context = navigator.appVersion).call(_context, 'Win')) return 'windows';
479
- if (_includesInstanceProperty__default["default"](_context2 = navigator.appVersion).call(_context2, 'Mac')) return 'macos';
480
- if (_includesInstanceProperty__default["default"](_context3 = navigator.appVersion).call(_context3, 'X11')) return 'unix';
481
- if (_includesInstanceProperty__default["default"](_context4 = navigator.appVersion).call(_context4, 'Linux')) return 'linux';
482
- return null;
483
- };
484
-
485
- var hasNewWindowModifier = function hasNewWindowModifier(event) {
486
- var platform = getPlatform();
487
-
488
- switch (platform) {
489
- case 'macos':
490
- return event.metaKey;
491
-
492
- default:
493
- return event.ctrlKey;
494
- }
495
- };
496
-
497
- var shakeAnimation = react.keyframes(_templateObject$3 || (_templateObject$3 = _taggedTemplateLiteral(["\n from,\n to {\n transform: translate3d(0, 0, 0);\n }\n\n 14%,\n 42%,\n 70% {\n transform: translate3d(-3px, 0, 0);\n }\n\n 28%,\n 56%,\n 84% {\n transform: translate3d(3px, 0, 0);\n }\n"])));
498
- var initialState = {
499
- hasNetworkError: false,
500
- isLoading: false,
501
- searchText: '',
502
- selectedResult: -1,
503
- // Used for UX when browsing through history
504
- enableHistory: true,
505
- results: [],
506
- stack: []
507
- };
508
-
509
- var reducer = function reducer() {
510
- var _context5, _context6;
511
-
512
- var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;
513
- var action = arguments.length > 1 ? arguments[1] : undefined;
514
-
515
- switch (action.type) {
516
- case 'networkError':
517
- return _objectSpread(_objectSpread({}, state), {}, {
518
- hasNetworkError: action.payload
519
- });
520
-
521
- case 'loading':
522
- return _objectSpread(_objectSpread({}, state), {}, {
523
- isLoading: action.payload
524
- });
525
-
526
- case 'selectedResult':
527
- return _objectSpread(_objectSpread({}, state), {}, {
528
- selectedResult: action.payload
529
- });
530
-
531
- case 'incrementSelectedResult':
532
- return _objectSpread(_objectSpread({}, state), {}, {
533
- selectedResult: state.selectedResult === state.results.length - 1 ? 0 : state.selectedResult + 1,
534
- enableHistory: false
535
- });
536
-
537
- case 'decrementSelectedResult':
538
- return _objectSpread(_objectSpread({}, state), {}, {
539
- selectedResult: state.selectedResult < 1 ? state.results.length - 1 : state.selectedResult - 1,
540
- enableHistory: false
541
- });
542
-
543
- case 'pickCommandFromHistory':
544
- return _objectSpread(_objectSpread({}, state), {}, {
545
- selectedResult: 0,
546
- searchText: action.payload.searchText,
547
- results: action.payload.results,
548
- stack: [] // The history does not get changed here, it will be changed along
549
- // with the regular flow.
550
-
551
- });
552
-
553
- case 'setNextCommands':
554
- return _objectSpread(_objectSpread({}, state), {}, {
555
- stack: _concatInstanceProperty__default["default"](_context5 = []).call(_context5, _toConsumableArray(state.stack), [{
556
- searchText: state.searchText,
557
- results: state.results,
558
- selectedResult: state.selectedResult
559
- }]),
560
- selectedResult: 0,
561
- enableHistory: false,
562
- results: action.payload.results
563
- });
564
-
565
- case 'setPrevCommands':
566
- return _objectSpread(_objectSpread({}, state), {}, {
567
- searchText: action.payload.searchText,
568
- results: action.payload.results,
569
- selectedResult: 0,
570
- enableHistory: false,
571
- // omit last item
572
- stack: _sliceInstanceProperty__default["default"](_context6 = state.stack).call(_context6, 0, -1)
573
- });
574
-
575
- case 'searchText':
576
- return _objectSpread(_objectSpread({}, state), {}, {
577
- searchText: action.payload,
578
- // clear network error when search text is cleared, so that users
579
- // are tempted to retry
580
- hasNetworkError: action.payload.length > 0 && state.hasNetworkError
581
- });
582
-
583
- case 'setSearchTextResults':
584
- return _objectSpread(_objectSpread({}, state), {}, {
585
- results: action.payload,
586
- selectedResult: action.payload.length > 0 ? 0 : -1,
587
- enableHistory: true,
588
- stack: []
589
- });
590
-
591
- case 'resetSearchText':
592
- return _objectSpread(_objectSpread({}, state), {}, {
593
- searchText: '',
594
- results: [],
595
- selectedResult: -1
596
- });
597
-
598
- case 'resetResultsWhenClosing':
599
- return _objectSpread(_objectSpread({}, state), {}, {
600
- selectedResult: -1,
601
- enableHistory: true
602
- });
603
-
604
- case 'reset':
605
- return initialState;
606
-
607
- default:
608
- return state;
609
- }
610
- };
611
-
612
- var _ref = process.env.NODE_ENV === "production" ? {
613
- name: "zjik7",
614
- styles: "display:flex"
615
- } : {
616
- name: "vnvgom-Butler",
617
- styles: "display:flex;label:Butler;",
618
- map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBaW5Ca0IiLCJmaWxlIjoiYnV0bGVyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgQ29tbWFuZCxcbiAgU2VhcmNoVGV4dCxcbiAgU2VsZWN0ZWRSZXN1bHQsXG4gIFN0YWNrLFxuICBIaXN0b3J5RW50cnksXG59IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtcbiAgS2V5Ym9hcmRFdmVudEhhbmRsZXIsXG4gIENoYW5nZUV2ZW50SGFuZGxlcixcbiAgS2V5Ym9hcmRFdmVudCxcbiAgTW91c2VFdmVudEhhbmRsZXIsXG4gIE1vdXNlRXZlbnQsXG4gIHVzZVJlZHVjZXIsXG4gIHVzZVJlZixcbiAgdXNlQ2FsbGJhY2ssXG59IGZyb20gJ3JlYWN0JztcbmltcG9ydCBGdXNlIGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IHsgRm9ybWF0dGVkTWVzc2FnZSwgdXNlSW50bCB9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IGxhc3QgZnJvbSAnbG9kYXNoL2xhc3QnO1xuaW1wb3J0IHsgY3NzLCBrZXlmcmFtZXMsIENsYXNzTmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgTG9hZGluZ1NwaW5uZXIgZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvbG9hZGluZy1zcGlubmVyJztcbmltcG9ydCB7IFNlYXJjaEljb24gfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9pY29ucyc7XG5pbXBvcnQgeyBjdXN0b21Qcm9wZXJ0aWVzIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgQnV0bGVyQ29tbWFuZCBmcm9tICcuLi9idXRsZXItY29tbWFuZCc7XG5pbXBvcnQgQnV0bGVyQ29udGFpbmVyIGZyb20gJy4uL2J1dGxlci1jb250YWluZXInO1xuaW1wb3J0IG1lc3NhZ2VzIGZyb20gJy4uL21lc3NhZ2VzJztcblxuY29uc3QgaXNTZWxlY3RBbGxDb21ibyA9IChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cbiAgZXZlbnQua2V5ID09PSAnYScgJiZcbiAgZXZlbnQubWV0YUtleSAmJlxuICAhZXZlbnQuY3RybEtleSAmJlxuICAhZXZlbnQuYWx0S2V5ICYmXG4gICFldmVudC5zaGlmdEtleTtcblxuY29uc3QgaXNDbG9zZUNvbWJvID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PlxuICBldmVudC5rZXkgPT09ICdFc2NhcGUnICYmXG4gICFldmVudC5tZXRhS2V5ICYmXG4gICFldmVudC5jdHJsS2V5ICYmXG4gICFldmVudC5hbHRLZXkgJiZcbiAgIWV2ZW50LnNoaWZ0S2V5O1xuXG5jb25zdCBnZXRQbGF0Zm9ybSA9ICgpID0+IHtcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdXaW4nKSkgcmV0dXJuICd3aW5kb3dzJztcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdNYWMnKSkgcmV0dXJuICdtYWNvcyc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnWDExJykpIHJldHVybiAndW5peCc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnTGludXgnKSkgcmV0dXJuICdsaW51eCc7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBoYXNOZXdXaW5kb3dNb2RpZmllciA9IChcbiAgZXZlbnQ6IEtleWJvYXJkRXZlbnQ8SFRNTEVsZW1lbnQ+IHwgTW91c2VFdmVudDxIVE1MRWxlbWVudD5cbikgPT4ge1xuICBjb25zdCBwbGF0Zm9ybSA9IGdldFBsYXRmb3JtKCk7XG4gIHN3aXRjaCAocGxhdGZvcm0pIHtcbiAgICBjYXNlICdtYWNvcyc6XG4gICAgICByZXR1cm4gZXZlbnQubWV0YUtleTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGV2ZW50LmN0cmxLZXk7XG4gIH1cbn07XG5cbmNvbnN0IHNoYWtlQW5pbWF0aW9uID0ga2V5ZnJhbWVzYFxuICBmcm9tLFxuICB0byB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcbiAgfVxuXG4gIDE0JSxcbiAgNDIlLFxuICA3MCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTNweCwgMCwgMCk7XG4gIH1cblxuICAyOCUsXG4gIDU2JSxcbiAgODQlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDNweCwgMCwgMCk7XG4gIH1cbmA7XG5cbnR5cGUgU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogYm9vbGVhbjtcbiAgaXNMb2FkaW5nOiBib29sZWFuO1xuICBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0O1xuICBzZWxlY3RlZFJlc3VsdDogU2VsZWN0ZWRSZXN1bHQ7XG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IGJvb2xlYW47XG4gIHJlc3VsdHM6IENvbW1hbmRbXTtcbiAgc3RhY2s6IFN0YWNrW107XG59O1xudHlwZSBBY3Rpb24gPVxuICB8IHsgdHlwZTogJ25ldHdvcmtFcnJvcic7IHBheWxvYWQ6IGJvb2xlYW4gfVxuICB8IHsgdHlwZTogJ2xvYWRpbmcnOyBwYXlsb2FkOiBib29sZWFuIH1cbiAgfCB7IHR5cGU6ICdzZWxlY3RlZFJlc3VsdCc7IHBheWxvYWQ6IG51bWJlciB9XG4gIHwgeyB0eXBlOiAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH1cbiAgfCB7IHR5cGU6ICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfVxuICB8IHtcbiAgICAgIHR5cGU6ICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JztcbiAgICAgIHBheWxvYWQ6IHsgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDsgcmVzdWx0czogQ29tbWFuZFtdIH07XG4gICAgfVxuICB8IHsgdHlwZTogJ3NldE5leHRDb21tYW5kcyc7IHBheWxvYWQ6IHsgcmVzdWx0czogQ29tbWFuZFtdIH0gfVxuICB8IHtcbiAgICAgIHR5cGU6ICdzZXRQcmV2Q29tbWFuZHMnO1xuICAgICAgcGF5bG9hZDogeyBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0OyByZXN1bHRzOiBDb21tYW5kW10gfTtcbiAgICB9XG4gIHwgeyB0eXBlOiAnc2VhcmNoVGV4dCc7IHBheWxvYWQ6IHN0cmluZyB9XG4gIHwgeyB0eXBlOiAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOyBwYXlsb2FkOiBDb21tYW5kW10gfVxuICB8IHsgdHlwZTogJ3Jlc2V0U2VhcmNoVGV4dCcgfVxuICB8IHsgdHlwZTogJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJyB9XG4gIHwgeyB0eXBlOiAncmVzZXQnIH07XG5jb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogZmFsc2UsXG4gIGlzTG9hZGluZzogZmFsc2UsXG4gIHNlYXJjaFRleHQ6ICcnLFxuICBzZWxlY3RlZFJlc3VsdDogLTEsXG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IHRydWUsXG4gIHJlc3VsdHM6IFtdLFxuICBzdGFjazogW10sXG59O1xuY29uc3QgcmVkdWNlciA9IChzdGF0ZTogU3RhdGUgPSBpbml0aWFsU3RhdGUsIGFjdGlvbjogQWN0aW9uKTogU3RhdGUgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnbmV0d29ya0Vycm9yJzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBoYXNOZXR3b3JrRXJyb3I6IGFjdGlvbi5wYXlsb2FkIH07XG4gICAgY2FzZSAnbG9hZGluZyc6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgaXNMb2FkaW5nOiBhY3Rpb24ucGF5bG9hZCB9O1xuICAgIGNhc2UgJ3NlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQgfTtcbiAgICBjYXNlICdpbmNyZW1lbnRTZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6XG4gICAgICAgICAgc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IHN0YXRlLnJlc3VsdHMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0ICsgMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ2RlY3JlbWVudFNlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDpcbiAgICAgICAgICBzdGF0ZS5zZWxlY3RlZFJlc3VsdCA8IDFcbiAgICAgICAgICAgID8gc3RhdGUucmVzdWx0cy5sZW5ndGggLSAxXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0IC0gMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ3BpY2tDb21tYW5kRnJvbUhpc3RvcnknOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OiAwLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZC5zZWFyY2hUZXh0LFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZC5yZXN1bHRzLFxuICAgICAgICBzdGFjazogW10sXG4gICAgICAgIC8vIFRoZSBoaXN0b3J5IGRvZXMgbm90IGdldCBjaGFuZ2VkIGhlcmUsIGl0IHdpbGwgYmUgY2hhbmdlZCBhbG9uZ1xuICAgICAgICAvLyB3aXRoIHRoZSByZWd1bGFyIGZsb3cuXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldE5leHRDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc3RhY2s6IFtcbiAgICAgICAgICAuLi5zdGF0ZS5zdGFjayxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZWFyY2hUZXh0OiBzdGF0ZS5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgcmVzdWx0czogc3RhdGUucmVzdWx0cyxcbiAgICAgICAgICAgIHNlbGVjdGVkUmVzdWx0OiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogMCxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLnJlc3VsdHMsXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldFByZXZDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQuc2VhcmNoVGV4dCxcbiAgICAgICAgcmVzdWx0czogYWN0aW9uLnBheWxvYWQucmVzdWx0cyxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IDAsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgICAvLyBvbWl0IGxhc3QgaXRlbVxuICAgICAgICBzdGFjazogc3RhdGUuc3RhY2suc2xpY2UoMCwgLTEpLFxuICAgICAgfTtcbiAgICBjYXNlICdzZWFyY2hUZXh0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgLy8gY2xlYXIgbmV0d29yayBlcnJvciB3aGVuIHNlYXJjaCB0ZXh0IGlzIGNsZWFyZWQsIHNvIHRoYXQgdXNlcnNcbiAgICAgICAgLy8gYXJlIHRlbXB0ZWQgdG8gcmV0cnlcbiAgICAgICAgaGFzTmV0d29ya0Vycm9yOiBhY3Rpb24ucGF5bG9hZC5sZW5ndGggPiAwICYmIHN0YXRlLmhhc05ldHdvcmtFcnJvcixcbiAgICAgIH07XG4gICAgY2FzZSAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQubGVuZ3RoID4gMCA/IDAgOiAtMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogdHJ1ZSxcbiAgICAgICAgc3RhY2s6IFtdLFxuICAgICAgfTtcbiAgICBjYXNlICdyZXNldFNlYXJjaFRleHQnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlYXJjaFRleHQ6ICcnLCByZXN1bHRzOiBbXSwgc2VsZWN0ZWRSZXN1bHQ6IC0xIH07XG4gICAgY2FzZSAncmVzZXRSZXN1bHRzV2hlbkNsb3NpbmcnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlbGVjdGVkUmVzdWx0OiAtMSwgZW5hYmxlSGlzdG9yeTogdHJ1ZSB9O1xuICAgIGNhc2UgJ3Jlc2V0JzpcbiAgICAgIHJldHVybiBpbml0aWFsU3RhdGU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufTtcblxudHlwZSBQcm9wcyA9IHtcbiAgaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdO1xuICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlOiAoaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdKSA9PiB2b2lkO1xuICBzZWFyY2g6IChzZWFyY2hUZXh0OiBTZWFyY2hUZXh0KSA9PiBQcm9taXNlPENvbW1hbmRbXT47XG4gIGdldE5leHRDb21tYW5kczogKGNvbW1hbmQ6IENvbW1hbmQpID0+IFByb21pc2U8Q29tbWFuZFtdPjtcbiAgZXhlY3V0ZUNvbW1hbmQ6IChjb21tYW5kOiBDb21tYW5kLCBtZXRhOiB7IG9wZW5Jbk5ld1RhYjogYm9vbGVhbiB9KSA9PiB2b2lkO1xuICBvbkNsb3NlOiAoKSA9PiB2b2lkO1xuICBjbGFzc05hbWVTaGFrZUFuaW1hdGlvbjogc3RyaW5nO1xufTtcbmNvbnN0IEJ1dGxlciA9IChwcm9wczogUHJvcHMpID0+IHtcbiAgY29uc3QgaW50bCA9IHVzZUludGwoKTtcbiAgY29uc3QgW3N0YXRlLCBkaXNwYXRjaF0gPSB1c2VSZWR1Y2VyPFxuICAgIChwcmV2U3RhdGU6IFN0YXRlLCBhY3Rpb246IEFjdGlvbikgPT4gU3RhdGVcbiAgPihyZWR1Y2VyLCBpbml0aWFsU3RhdGUpO1xuXG4gIGNvbnN0IHNob3VsZFNlbGVjdEZpZWxkVGV4dCA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IGlzTmV3V2luZG93Q29tYm8gPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBza2lwTmV4dFNlbGVjdGlvbiA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IHNlYXJjaENvbnRhaW5lclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IHNlYXJjaElucHV0UmVmID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KG51bGwpO1xuXG4gIGNvbnN0IHNldEhhc05ldHdvcmtFcnJvciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICduZXR3b3JrRXJyb3InLCBwYXlsb2FkOiB0cnVlIH0pO1xuICB9LCBbXSk7XG4gIGNvbnN0IHVuc2V0SGFzTmV0d29ya0Vycm9yID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ25ldHdvcmtFcnJvcicsIHBheWxvYWQ6IGZhbHNlIH0pO1xuICB9LCBbXSk7XG4gIGNvbnN0IHNldElzTG9hZGluZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdsb2FkaW5nJywgcGF5bG9hZDogdHJ1ZSB9KTtcbiAgfSwgW10pO1xuICBjb25zdCB1bnNldElzTG9hZGluZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdsb2FkaW5nJywgcGF5bG9hZDogZmFsc2UgfSk7XG4gIH0sIFtdKTtcblxuICAvLyBEZXN0cnVjdHVyZSBmdW5jdGlvbnMgZnJvbSBwcm9wcyB0byByZWZlcmVuY2UgdGhlbSBpbiB0aGUgaG9vayBkZXBlbmRlbmN5IGxpc3RcbiAgY29uc3Qge1xuICAgIHNlYXJjaDogc2VhcmNoRnJvbVBhcmVudCxcbiAgICBvbkNsb3NlOiBvbkNsb3NlRnJvbVBhcmVudCxcbiAgICBleGVjdXRlQ29tbWFuZDogZXhlY3V0ZUNvbW1hbmRGcm9tUGFyZW50LFxuICAgIG9uSGlzdG9yeUVudHJpZXNDaGFuZ2U6IG9uSGlzdG9yeUVudHJpZXNDaGFuZ2VGcm9tUGFyZW50LFxuICAgIGdldE5leHRDb21tYW5kczogZ2V0TmV4dENvbW1hbmRzRnJvbVBhcmVudCxcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHNoYWtlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChzZWFyY2hDb250YWluZXJSZWYuY3VycmVudCkge1xuICAgICAgc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQuY2xhc3NMaXN0LnJlbW92ZShcbiAgICAgICAgcHJvcHMuY2xhc3NOYW1lU2hha2VBbmltYXRpb25cbiAgICAgICk7XG4gICAgICAvLyAtPiB0cmlnZ2VyaW5nIHJlZmxvd1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXZvaWRcbiAgICAgIHZvaWQgc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQub2Zmc2V0V2lkdGg7XG4gICAgICBzZWFyY2hDb250YWluZXJSZWYuY3VycmVudC5jbGFzc0xpc3QuYWRkKHByb3BzLmNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uKTtcbiAgICB9XG4gIH0sIFtwcm9wcy5jbGFzc05hbWVTaGFrZUFuaW1hdGlvbl0pO1xuXG4gIGNvbnN0IGV4ZWN1dGUgPSB1c2VDYWxsYmFjayhcbiAgICAoY29tbWFuZCwgbWV0YSkgPT4ge1xuICAgICAgLy8gT25seSBtYWluIGVudHJpZXMgZ2V0IGFkZGVkIHRvIGhpc3RvcnksIHNvIHdoZW4gYSBzdWJjb21tYW5kIGlzIGV4ZWN1dGVkLFxuICAgICAgLy8gd2UgYWRkIHRoZSBtYWluIGNvbW1hbmQgb2YgaXQgdG8gdGhlIGhpc3RvcnkgKHRoZSB0b3AtbGV2ZWwgY29tbWFuZCkuXG4gICAgICAvL1xuICAgICAgLy8gVGhlIGtleSB0byBpZGVudGlmeSBoaXN0b3J5IGVudHJpZXMgYnkgaXMgYWx3YXlzIHRoZSBzZWFyY2hUZXh0XG4gICAgICAvLyBUaGVyZSB3aWxsIG5ldmVyIGJlIHR3byBoaXN0b3J5IGVudHJpZXMgd2l0aCB0aGUgc2FtZSBzZWFyY2hUZXh0XG4gICAgICBjb25zdCBlbnRyeSA9XG4gICAgICAgIHN0YXRlLnN0YWNrLmxlbmd0aCA9PT0gMFxuICAgICAgICAgID8gLy8gVGhlIHN0YWNrIGlzIGVtcHR5LCBzbyB3ZSBhcmUgZXhlY3V0aW5nIGEgdG9wLWxldmVsIGNvbW1hbmRcbiAgICAgICAgICAgIHsgc2VhcmNoVGV4dDogc3RhdGUuc2VhcmNoVGV4dCwgcmVzdWx0czogc3RhdGUucmVzdWx0cyB9XG4gICAgICAgICAgOiAvLyBXZSBhcmUgZXhlY3V0aW5nIGEgc3ViY29tbWFuZCwgc28gd2UgZ2V0IHRoZSB0b3AtbGV2ZWwgY29tbWFuZCBmb3IgaXQsXG4gICAgICAgICAgICAvLyB3aGljaCBpcyBhdCB0aGUgYm90dG9tIG9mIHRoZSBzdGFjay5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc2VhcmNoVGV4dDogc3RhdGUuc3RhY2tbMF0uc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgcmVzdWx0czogc3RhdGUuc3RhY2tbMF0ucmVzdWx0cyxcbiAgICAgICAgICAgIH07XG5cbiAgICAgIC8vIEFkZCB0aGUgZW50cnkgdG8gdGhlIGhpc3RvcnksIHdoaWxlIGV4Y2x1ZGluZyBhbnkgZWFybGllciBoaXN0b3J5IGVudHJ5XG4gICAgICAvLyB3aXRoIHRoZSBzYW1lIHNlYXJjaCB0ZXh0LiBUaGlzIGVmZmVjdGl2ZWx5IFwibW92ZXNcIiB0aGF0IGVudHJ5IHRvIHRoZVxuICAgICAgLy8gdG9wIG9mIHRoZSBoaXN0b3J5ICh3aXRoIHRoZSBtb3N0IHJlY2VudCByZXN1bHRzKSwgb3IgYXBwZW5kcyBhIG5ldyBlbnRyeVxuICAgICAgLy8gd2hlbiBpdCBkaWRuJ3QgZXhpc3QgYmVmb3JlLlxuICAgICAgb25IaXN0b3J5RW50cmllc0NoYW5nZUZyb21QYXJlbnQoW1xuICAgICAgICAuLi5wcm9wcy5oaXN0b3J5RW50cmllcy5maWx0ZXIoXG4gICAgICAgICAgKGNvbW1hbmQpID0+IGNvbW1hbmQuc2VhcmNoVGV4dCAhPT0gZW50cnkuc2VhcmNoVGV4dFxuICAgICAgICApLFxuICAgICAgICBlbnRyeSxcbiAgICAgIF0pO1xuXG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdyZXNldFNlYXJjaFRleHQnIH0pO1xuXG4gICAgICBvbkNsb3NlRnJvbVBhcmVudCgpO1xuXG4gICAgICBleGVjdXRlQ29tbWFuZEZyb21QYXJlbnQoY29tbWFuZCwgbWV0YSk7XG4gICAgfSxcbiAgICBbXG4gICAgICBleGVjdXRlQ29tbWFuZEZyb21QYXJlbnQsXG4gICAgICBvbkNsb3NlRnJvbVBhcmVudCxcbiAgICAgIG9uSGlzdG9yeUVudHJpZXNDaGFuZ2VGcm9tUGFyZW50LFxuICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXMsXG4gICAgICBzdGF0ZS5yZXN1bHRzLFxuICAgICAgc3RhdGUuc2VhcmNoVGV4dCxcbiAgICAgIHN0YXRlLnN0YWNrLFxuICAgIF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IHVzZUNhbGxiYWNrPEtleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+PihcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIC8vIFByZXZlbnRpbmcgY3Vyc29yIGp1bXBzIGNhbiBvbmx5IGhhcHBlbiBpbiBvbktleURvd24sIGJ1dCBub3QgaW4gb25LZXlVcFxuICAgICAgZXZlbnQucGVyc2lzdCgpO1xuXG4gICAgICAvLyBXZSB3YW50IHRvIGtub3cgd2hlbiB0aGUgdXNlciBwcmVzc2VzIGNtZCtlbnRlciAoY21kIGJlaW5nIGEgbWV0YSBrZXkpLlxuICAgICAgLy8gV2UgYXJlIG9ubHkgdG9sZCBhYm91dCB0aGlzIGluIGtleURvd24sIGJ1dCBub3QgaW4ga2V5VXAsIHNvIHdlIG5lZWRcbiAgICAgIC8vIHRvIGhhbmRsZSBpdCBoZXJlXG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInICYmIGhhc05ld1dpbmRvd01vZGlmaWVyKGV2ZW50KSkge1xuICAgICAgICBpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIEF2b2lkIHNlbGVjdGluZyB0aGUgd2hvbGUgcGFnZSB3aGVuIHVzZXIgc2VsZWN0ZXMgZXZlcnl0aGluZyB3aXRoXG4gICAgICAvLyBhIGtleWJvYXJkIHNob3J0Y3V0LiBUaGVyZSBpcyBwcm9iYWJseSBhIGJldHRlciB3YXkgdG8gZG8gdGhpcyB0aG91Z2guXG4gICAgICAvLyBUaGlzIHByZXZlbnRzIHRoZSB3aG9sZSBwYWdlIGZyb20gYmVpbmcgc2VsZWN0ZWQgaW4gY2FzZSB0aGUgdXNlclxuICAgICAgLy8gMSkgb3BlbnMgdGhlIHNlYXJjaCBib3hcbiAgICAgIC8vIDIpIHR5cGVzIGludG8gaXRcbiAgICAgIC8vIDMpIHNlbGVjdHMgYWxsIHRleHQgdXNpbmcgY21kK2FcbiAgICAgIC8vIDQpIGNsb3NlcyB0aGUgc2VhcmNoIGJveCB3aXRoIGVzY1xuICAgICAgLy8gV2l0aG91dCB0aGlzIGhhbmRsaW5nLCB0aGUgd2hvbGUgcGFnZSB3b3VsZCBub3cgYmUgc2VsZWN0ZWRcbiAgICAgIGlmIChpc1NlbGVjdEFsbENvbWJvKGV2ZW50KSkge1xuICAgICAgICAvLyBUaGlzIHN0b3BzIHRoZSBicm93c2VyIGZyb20gc2VsZWN0aW5nIGFueXRoaW5nXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmIChzZWFyY2hJbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgLy8gVGhpcyBzZWxlY3RzIHRoZSB0ZXh0IGluIHRoZSBzZWFyY2ggaW5wdXRcbiAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNldFNlbGVjdGlvblJhbmdlKDAsIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIGF2b2lkIGludGVyZmVyaW5nIHdpdGggb3RoZXIga2V5IGNvbWJpbmF0aW9ucyB1c2luZyBtb2RpZmllciBrZXlzXG4gICAgICBpZiAoZXZlbnQuY3RybEtleSB8fCBldmVudC5hbHRLZXkgfHwgZXZlbnQuc2hpZnRLZXkgfHwgZXZlbnQubWV0YUtleSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKGlzQ2xvc2VDb21ibyhldmVudCkpIHJldHVybjtcblxuICAgICAgLy8gc2tpcCBuZXh0IG1vdXNlRW50ZXIgdG8gYXZvaWQgc2V0dGluZyBzZWxlY3RlZFJlc3VsdCB3aGVuIGN1cnNvciBqdXN0XG4gICAgICAvLyBoYXBwZW5zIHRvIGJlIHdoZXJlIHRoZSByZXN1bHRzIHdpbGwgcG9wIHVwXG4gICAgICBza2lwTmV4dFNlbGVjdGlvbi5jdXJyZW50ID0gdHJ1ZTtcblxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgICAgLy8gcHJldmVudCBjdXJzb3IgZnJvbSBqdW1waW5nIHRvIGVuZCBvZiB0ZXh0IGlucHV0XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ2luY3JlbWVudFNlbGVjdGVkUmVzdWx0JyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICAgIC8vIGJyb3dzZSB0aHJvdWdoIGhpc3RvcnlcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgKHN0YXRlLnNlbGVjdGVkUmVzdWx0IDwgMSAmJiBzdGF0ZS5lbmFibGVIaXN0b3J5KVxuICAgICAgICApIHtcbiAgICAgICAgICBzaG91bGRTZWxlY3RGaWVsZFRleHQuY3VycmVudCA9IHRydWU7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRJbmRleCA9XG4gICAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICA/IC8vIFdoZW4gZ29pbmcgYmFjayB0aGUgZmlyc3Qgc3RlcFxuICAgICAgICAgICAgICAgIC0xXG4gICAgICAgICAgICAgIDogLy8gV2hlbiBnb2luZyBiYWNrIG1vcmUgdGhhbiBvbmUgc3RlcFxuICAgICAgICAgICAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgIChjb21tYW5kKSA9PiBjb21tYW5kLnNlYXJjaFRleHQgPT09IHN0YXRlLnNlYXJjaFRleHRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgIC8vIFBpY2sgdGhlIHByZXZpb3VzIGNvbW1hbmQgZnJvbSB0aGUgaGlzdG9yeVxuICAgICAgICAgIGNvbnN0IHByZXZDb21tYW5kID1cbiAgICAgICAgICAgIHNlbGVjdGVkSW5kZXggPT09IC0xXG4gICAgICAgICAgICAgID8gLy8gcHJldmlvdXMgY29tbWFuZCBvbiB0b3Agb2YgdGhlIGhpc3Rvcnkgd2hlbiBnb2luZyBiYWNrIG9uXG4gICAgICAgICAgICAgICAgLy8gZmlyc3Qgc3RlcFxuICAgICAgICAgICAgICAgIGxhc3QocHJvcHMuaGlzdG9yeUVudHJpZXMpXG4gICAgICAgICAgICAgIDogLy8gcHJldmlvdXMgY29tbWFuZCBpcyBkZWVwZXIgZG93blxuICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlIGhpc3RvcnkgZG9lcyBub3QgZXhpc3QgKG5lZ2F0aXZlIGluZGV4KSwgdGhlblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgaW1wbGljaXRseSByZXR1cm5zIHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzW3NlbGVjdGVkSW5kZXggLSAxXTtcbiAgICAgICAgICAvLyBTa2lwIHdoZW4gbm8gcHJldmlvdXMgZW50cnkgZXhpc3RzIGluIHRoZSBoaXN0b3J5XG4gICAgICAgICAgaWYgKCFwcmV2Q29tbWFuZCkgcmV0dXJuO1xuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgICAgc2VhcmNoVGV4dDogcHJldkNvbW1hbmQuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgcmVzdWx0czogcHJldkNvbW1hbmQucmVzdWx0cyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHByZXZlbnQgY3Vyc29yIGZyb20ganVtcGluZyB0byBiZWdpbm5pbmcgb2YgdGV4dCBpbnB1dFxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0ZS5zZWxlY3RlZFJlc3VsdCA+IC0xKSB7XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0Jykge1xuICAgICAgICAgIGNvbnN0IGNvbW1hbmQgPSBzdGF0ZS5yZXN1bHRzW3N0YXRlLnNlbGVjdGVkUmVzdWx0XTtcbiAgICAgICAgICBjb25zdCBzZWFyY2hUZXh0ID0gc3RhdGUuc2VhcmNoVGV4dDtcbiAgICAgICAgICBjb25zdCBpc0N1cnNvckF0RW5kID1cbiAgICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQgJiZcbiAgICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xuXG4gICAgICAgICAgY29uc3QgaXNFdmVyeXRoaW5nU2VsZWN0ZWQgPVxuICAgICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudCAmJlxuICAgICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydCA9PT0gMCAmJlxuICAgICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xuXG4gICAgICAgICAgLy8gb25seSBhbGxvdyBkaXZpbmcgaW4gd2hlbiBjdXJzb3IgaXMgYXQgZW5kIG9mIGlucHV0IG9yIHdoZW5cbiAgICAgICAgICAvLyB0aGUgY29tcGxldGUgdGV4dCBpcyBzZWxlY3RlZCAod2hlbiBicm93c2luZyB0aHJvdWdoIGhpc3RvcnkpXG4gICAgICAgICAgaWYgKCFpc0N1cnNvckF0RW5kICYmICFpc0V2ZXJ5dGhpbmdTZWxlY3RlZCkgcmV0dXJuO1xuXG4gICAgICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IoKTtcblxuICAgICAgICAgIC8vIE5PVEU6IHNpbmNlIHdlIG5lZWQgdG8gZmV0Y2ggdGhlIFwibmV4dCBjb21tYW5kXCIsIHdoaWNoIGlzIGFuIGFzeW5jIG9wZXJhdGlvbixcbiAgICAgICAgICAvLyB3ZSB1c2UgYSBJSUZFIHRvIHByb2Nlc3MgdGhhdCBhbmQgZXZlbnR1YWxseSB1cGRhdGUgdGhlIHN0YXRlLlxuICAgICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoY29tbWFuZCkge1xuICAgICAgICAgICAgICBjb25zdCBuZXh0Q29tbWFuZHMgPSBhd2FpdCBnZXROZXh0Q29tbWFuZHNGcm9tUGFyZW50KGNvbW1hbmQpO1xuICAgICAgICAgICAgICAvLyBhdm9pZCBtb3ZpbmcgY3Vyc29yIHdoZW4gdGhlcmUgYXJlIHN1Yi1vcHRpb25zXG4gICAgICAgICAgICAgIGlmIChuZXh0Q29tbWFuZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIC8vIEVuc3VyZSB0aGUgc2VhcmNoIHRleHQgaGFzIG5vdCBjaGFuZ2VkIHdoaWxlIHdlIHdlcmUgbG9hZGluZ1xuICAgICAgICAgICAgICAgIC8vIHRoZSBuZXh0IHJlc3VsdHMsIG90aGVyd2lzZSB3ZSdkIGludGVycnVwdCB0aGUgdXNlci5cbiAgICAgICAgICAgICAgICAvLyBUaHJvdyBhd2F5IHRoZSByZXN1bHRzIGluIGNhc2UgdGhlIHNlYXJjaCB0ZXh0IGhhcyBjaGFuZ2VkLlxuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5zZWFyY2hUZXh0ID09PSBzZWFyY2hUZXh0KSB7XG4gICAgICAgICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzZXROZXh0Q29tbWFuZHMnLFxuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkOiB7IHJlc3VsdHM6IG5leHRDb21tYW5kcyB9LFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2hha2UoKTtcbiAgICAgICAgICB9KSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0Jykge1xuICAgICAgICAgIC8vIGdvIGxlZnQgaW4gc3RhY2tcbiAgICAgICAgICBjb25zdCBwcmV2Q29tbWFuZCA9IGxhc3Qoc3RhdGUuc3RhY2spO1xuXG4gICAgICAgICAgLy8gZG8gbm90aGluZyB3aGVuIHdlIGNhbid0IGdvIGxlZnQgYW55bW9yZVxuICAgICAgICAgIGlmICghcHJldkNvbW1hbmQpIHJldHVybjtcblxuICAgICAgICAgIC8vIHByZXZlbnQgY3Vyc29yIGZyb20ganVtcGluZyBhIGNoYXIgdG8gdGhlIGxlZnQgaW4gdGV4dCBpbnB1dFxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAnc2V0UHJldkNvbW1hbmRzJyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgICAgc2VhcmNoVGV4dDogcHJldkNvbW1hbmQuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgcmVzdWx0czogcHJldkNvbW1hbmQucmVzdWx0cyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBnZXROZXh0Q29tbWFuZHNGcm9tUGFyZW50LFxuICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXMsXG4gICAgICBzaGFrZSxcbiAgICAgIHN0YXRlLFxuICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IsXG4gICAgXVxuICApO1xuICBjb25zdCBoYW5kbGVLZXlVcCA9IHVzZUNhbGxiYWNrPEtleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+PihcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIC8vIHNldHRpbmcgdGhlIHNlbGVjdGlvbiBjYW4gb25seSBoYXBwZW4gaW4gb25LZXlVcFxuICAgICAgaWYgKHNob3VsZFNlbGVjdEZpZWxkVGV4dC5jdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgIGlucHV0LmZvY3VzKCk7XG4gICAgICAgIGlucHV0LnNlbGVjdCgpO1xuICAgICAgICBzaG91bGRTZWxlY3RGaWVsZFRleHQuY3VycmVudCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQua2V5ICE9PSAnRW50ZXInICYmICFpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQpIHJldHVybiB0cnVlO1xuXG4gICAgICAvLyBVc2VyIGp1c3QgdHJpZ2dlcmVkIHRoZSBzZWFyY2hcbiAgICAgIGlmIChzdGF0ZS5zZWxlY3RlZFJlc3VsdCA9PT0gLTEpIHJldHVybiB0cnVlO1xuXG4gICAgICAvLyBVc2VyIGhhZCBzb21ldGhpbmcgc2VsZWN0ZWQgYW5kIHdhbnRzIHRvIGdvIHRoZXJlXG4gICAgICBleGVjdXRlKHN0YXRlLnJlc3VsdHNbc3RhdGUuc2VsZWN0ZWRSZXN1bHRdLCB7XG4gICAgICAgIG9wZW5Jbk5ld1RhYjogaXNOZXdXaW5kb3dDb21iby5jdXJyZW50LFxuICAgICAgfSk7XG5cbiAgICAgIGlzTmV3V2luZG93Q29tYm8uY3VycmVudCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBbZXhlY3V0ZSwgc3RhdGUucmVzdWx0cywgc3RhdGUuc2VsZWN0ZWRSZXN1bHRdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUNhbGxiYWNrPENoYW5nZUV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50Pj4oXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBzZWFyY2hUZXh0ID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgICAgaWYgKHNlYXJjaFRleHQudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdyZXNldCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnc2VhcmNoVGV4dCcsIHBheWxvYWQ6IHNlYXJjaFRleHQgfSk7XG5cbiAgICAgIC8vIEEgc2VhcmNoIHZpYSBuZXR3b3JrIGlzIG9ubHkgdHJpZ2dlcmVkIHdoZW4gdGhlcmVcbiAgICAgIC8vIGFyZSBtb3JlIHRoYW4gdGhyZWUgY2hhcmFjdGVycy4gU28gbm8gZmFsc2UgbG9hZGluZ1xuICAgICAgLy8gaW5kaWNhdGlvbiBpcyBnaXZlbi5cbiAgICAgIGlmIChzZWFyY2hUZXh0LnRyaW0oKS5sZW5ndGggPiAzKSB7XG4gICAgICAgIHNldElzTG9hZGluZygpO1xuICAgICAgfVxuXG4gICAgICBzZWFyY2hGcm9tUGFyZW50KHNlYXJjaFRleHQpLnRoZW4oXG4gICAgICAgIChhc3luY1Jlc3VsdHM6IENvbW1hbmRbXSkgPT4ge1xuICAgICAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yKCk7XG4gICAgICAgICAgdW5zZXRJc0xvYWRpbmcoKTtcblxuICAgICAgICAgIGNvbnN0IGZ1c2UgPSBuZXcgRnVzZShhc3luY1Jlc3VsdHMsIHtcbiAgICAgICAgICAgIGtleXM6IFtcbiAgICAgICAgICAgICAgeyBuYW1lOiAndGV4dCcsIHdlaWdodDogMC42IH0sXG4gICAgICAgICAgICAgIHsgbmFtZTogJ2tleXdvcmRzJywgd2VpZ2h0OiAwLjQgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBtaW5NYXRjaENoYXJMZW5ndGg6IDIsXG4gICAgICAgICAgICBpbmNsdWRlU2NvcmU6IHRydWUsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCBzZWFyY2hSZXN1bHRzID0gZnVzZVxuICAgICAgICAgICAgLnNlYXJjaChzZWFyY2hUZXh0KVxuICAgICAgICAgICAgLy8gRmlsdGVyIG91dCByZXN1bHRzIHdpdGggYSBtYXRjaGluZyBzY29yZSBvdmVyIDAuNzVcbiAgICAgICAgICAgIC5maWx0ZXIoKHJlc3VsdCkgPT4gKHJlc3VsdC5zY29yZSA/IHJlc3VsdC5zY29yZSA8IDAuNzUgOiBmYWxzZSkpXG4gICAgICAgICAgICAvLyBLZWVwIGEgbWF4aW1hbCBvZiA5IHJlc3VsdHNcbiAgICAgICAgICAgIC5zbGljZSgwLCA5KTtcblxuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdzZXRTZWFyY2hUZXh0UmVzdWx0cycsXG4gICAgICAgICAgICBwYXlsb2FkOiBzZWFyY2hSZXN1bHRzLm1hcCgocmVzdWx0KSA9PiByZXN1bHQuaXRlbSksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICB1bnNldElzTG9hZGluZygpO1xuICAgICAgICAgIHNldEhhc05ldHdvcmtFcnJvcigpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0sXG4gICAgW1xuICAgICAgc2VhcmNoRnJvbVBhcmVudCxcbiAgICAgIHNldEhhc05ldHdvcmtFcnJvcixcbiAgICAgIHNldElzTG9hZGluZyxcbiAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yLFxuICAgICAgdW5zZXRJc0xvYWRpbmcsXG4gICAgXVxuICApO1xuICBjb25zdCBoYW5kbGVDb250YWluZXJDbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdyZXNldFJlc3VsdHNXaGVuQ2xvc2luZycgfSk7XG4gICAgb25DbG9zZUZyb21QYXJlbnQoKTtcbiAgfSwgW29uQ2xvc2VGcm9tUGFyZW50XSk7XG5cbiAgY29uc3QgY3JlYXRlQ29tbWFuZE1vdXNlRW50ZXJIYW5kbGVyID0gdXNlQ2FsbGJhY2s8XG4gICAgKGluZGV4OiBudW1iZXIpID0+IE1vdXNlRXZlbnRIYW5kbGVyPEhUTUxEaXZFbGVtZW50PlxuICA+KFxuICAgIChpbmRleCkgPT4gKCkgPT4ge1xuICAgICAgLy8gSW4gY2FzZSB0aGUgY3Vyc29yIGhhcHBlbmVkIHRvIGJlIGluIGEgbG9jYXRpb24gd2hlcmUgYVxuICAgICAgLy8gcmVzdWx0IHdvdWxkIGFwcGVhciwgaXQgd291bGQgdHJpZ2dlciBvbk1vdXNlRW50ZXIgYW5kIHRoZVxuICAgICAgLy8gcmVzdWx0IHdvdWxkIGJlIHNlbGVjdGVkIGltbWVkaWF0ZWx5LiBUaGlzIGlzIG5vdCBzb21ldGhpbmdcbiAgICAgIC8vIGEgdXNlciB3b3VsZCBleHBlY3QsIGhlbmNlIHdlIHByZXZlbnQgaXQgZnJvbSBoYXBwZW5pbmcuXG4gICAgICAvLyBUaGUgdXNlciBoYXMgdG8gbW92ZSB0aGUgY3Vyc29yIHRvIGFuIG9wdGlvbiBleHBsaWNpdGx5IGZvclxuICAgICAgLy8gaXQgdG8gYmVjb21lIGFjdGl2ZS4gSG93ZXZlciwgdGhlIHVzZXIgY2FuIGFsd2F5cyBjbGljayBhbmRcbiAgICAgIC8vIHRoYXQgYWN0aW9uIHdpbGwgYmUgdHJpZ2dlcmVkLlxuICAgICAgaWYgKHNraXBOZXh0U2VsZWN0aW9uLmN1cnJlbnQpIHtcbiAgICAgICAgc2tpcE5leHRTZWxlY3Rpb24uY3VycmVudCA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIHNldHMgdGhlIHNlbGVjdGVkIHJlc3VsdCwgbWFpbmx5IGZvciB0aGUgaG92ZXIgZWZmZWN0XG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdzZWxlY3RlZFJlc3VsdCcsIHBheWxvYWQ6IGluZGV4IH0pO1xuICAgIH0sXG4gICAgW11cbiAgKTtcbiAgY29uc3QgY3JlYXRlQ29tbWFuZENsaWNrSGFuZGxlciA9IHVzZUNhbGxiYWNrPFxuICAgIChjb21tYW5kOiBDb21tYW5kKSA9PiBNb3VzZUV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD5cbiAgPihcbiAgICAoY29tbWFuZCkgPT4gKGV2ZW50KSA9PiB7XG4gICAgICBleGVjdXRlKGNvbW1hbmQsIHtcbiAgICAgICAgb3BlbkluTmV3VGFiOiBoYXNOZXdXaW5kb3dNb2RpZmllcihldmVudCksXG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtleGVjdXRlXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPEJ1dGxlckNvbnRhaW5lclxuICAgICAgb25DbGljaz17aGFuZGxlQ29udGFpbmVyQ2xpY2t9XG4gICAgICBkYXRhLXRlc3RpZD1cInF1aWNrLWFjY2Vzc1wiXG4gICAgICB0YWJJbmRleD17LTF9XG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICByZWY9e3NlYXJjaENvbnRhaW5lclJlZn1cbiAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yU3VyZmFjZX07XG4gICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICR7Y3VzdG9tUHJvcGVydGllcy5ib3JkZXJSYWRpdXM0fTtcbiAgICAgICAgICBtaW4taGVpZ2h0OiA0MHB4O1xuXG4gICAgICAgICAgLyogb25lIG1vcmUgdGhhbiBhcHAtYmFyICgyMDAwMCkgYW5kIG9uZSBtb3JlIHRoYW4gdGhlIG92ZXJsYXkgKDIwMDAxKSAqL1xuICAgICAgICAgIHotaW5kZXg6IDIwMDAyO1xuICAgICAgICAgIHdpZHRoOiA0MDBweDtcbiAgICAgICAgICBtYXJnaW46IDQwcHggYXV0bztcbiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogMCAxMHB4IDMwcHggLThweCByZ2JhKDAsIDAsIDAsIDAuNzUpO1xuICAgICAgICAgIC1tb3otYm94LXNoYWRvdzogMCAxMHB4IDMwcHggLThweCByZ2JhKDAsIDAsIDAsIDAuNzUpO1xuICAgICAgICAgIGJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogJHtzdGF0ZS5oYXNOZXR3b3JrRXJyb3JcbiAgICAgICAgICAgID8gJzAnXG4gICAgICAgICAgICA6IGN1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICBgfVxuICAgICAgICBvbkNsaWNrPXsoZXZlbnQpID0+IHtcbiAgICAgICAgICAvLyBBdm9pZCBjbG9zaW5nIHdoZW4gdGhlIHNlYXJjaENvbnRhaW5lciBpdHNlbGYgaXMgY2xpY2tlZFxuICAgICAgICAgIC8vIElmIHdlIGRvbid0IGRvIHRoaXMsIHRoZW4gdGhlIG92ZXJsYXkgd2lsbCBjbG9zZSB3aGVuIGUuZy5cbiAgICAgICAgICAvLyB0aGUgc2VhcmNoIGlucHV0IGlzIGNsaWNrZWQuXG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBgfVxuICAgICAgICA+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICBodG1sRm9yPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6ICR7Y3VzdG9tUHJvcGVydGllcy5zcGFjaW5nTX07XG4gICAgICAgICAgICAgIG1hcmdpbi10b3A6ICR7Y3VzdG9tUHJvcGVydGllcy5zcGFjaW5nU307XG4gICAgICAgICAgICBgfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxTZWFyY2hJY29uIGNvbG9yPVwibmV1dHJhbDYwXCIgLz5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgaWQ9XCJxdWljay1hY2Nlc3Mtc2VhcmNoLWlucHV0XCJcbiAgICAgICAgICAgIHJlZj17c2VhcmNoSW5wdXRSZWZ9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj17aW50bC5mb3JtYXRNZXNzYWdlKG1lc3NhZ2VzLmlucHV0UGxhY2Vob2Rlcil9XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICAgICAgb3V0bGluZTogMDtcbiAgICAgICAgICAgICAgZm9udC1zaXplOiAyMnB4O1xuICAgICAgICAgICAgICBmb250LXdlaWdodDogMzAwO1xuICAgICAgICAgICAgICBwYWRkaW5nOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019ICR7Y3VzdG9tUHJvcGVydGllcy5zcGFjaW5nTX1cbiAgICAgICAgICAgICAgICAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9ICR7Y3VzdG9tUHJvcGVydGllcy5zcGFjaW5nU307XG4gICAgICAgICAgICAgICY6OnBsYWNlaG9sZGVyIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yTmV1dHJhbDYwfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgYH1cbiAgICAgICAgICAgIHZhbHVlPXtzdGF0ZS5zZWFyY2hUZXh0fVxuICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgIG9uS2V5RG93bj17aGFuZGxlS2V5RG93bn1cbiAgICAgICAgICAgIG9uS2V5VXA9e2hhbmRsZUtleVVwfVxuICAgICAgICAgICAgYXV0b0ZvY3VzPXt0cnVlfVxuICAgICAgICAgICAgYXV0b0NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICB7c3RhdGUuaXNMb2FkaW5nICYmIChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6ICR7Y3VzdG9tUHJvcGVydGllcy5zcGFjaW5nU307XG4gICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8TG9hZGluZ1NwaW5uZXIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICBpZiAoc3RhdGUuaGFzTmV0d29ya0Vycm9yKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgICAgICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JFcnJvcn07XG4gICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICAgICAgICAgICAgY29sb3I6ICR7Y3VzdG9tUHJvcGVydGllcy5jb2xvclN1cmZhY2V9O1xuICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAke2N1c3RvbVByb3BlcnRpZXMuZm9udFNpemVTbWFsbH07XG4gICAgICAgICAgICAgICAgICBwYWRkaW5nOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1hzfTtcbiAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2Ugey4uLm1lc3NhZ2VzLm9mZmxpbmV9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChzdGF0ZS5yZXN1bHRzLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5zZWFyY2hUZXh0LnRyaW0oKS5sZW5ndGggPiAwKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgICAgICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JOZXV0cmFsfTtcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JTb2xpZH07XG4gICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAke2N1c3RvbVByb3BlcnRpZXMuZm9udFNpemVTbWFsbH07XG4gICAgICAgICAgICAgICAgICBwYWRkaW5nOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1hzfTtcbiAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2Ugey4uLm1lc3NhZ2VzLm5vUmVzdWx0c30gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuIHN0YXRlLnJlc3VsdHMubWFwKChjb21tYW5kLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPEJ1dGxlckNvbW1hbmRcbiAgICAgICAgICAgICAga2V5PXtjb21tYW5kLmlkfVxuICAgICAgICAgICAgICBjb21tYW5kPXtjb21tYW5kfVxuICAgICAgICAgICAgICBpc1NlbGVjdGVkPXtzdGF0ZS5zZWxlY3RlZFJlc3VsdCA9PT0gaW5kZXh9XG4gICAgICAgICAgICAgIG9uTW91c2VFbnRlcj17Y3JlYXRlQ29tbWFuZE1vdXNlRW50ZXJIYW5kbGVyKGluZGV4KX1cbiAgICAgICAgICAgICAgb25DbGljaz17Y3JlYXRlQ29tbWFuZENsaWNrSGFuZGxlcihjb21tYW5kKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSk7XG4gICAgICAgIH0pKCl9XG4gICAgICA8L2Rpdj5cbiAgICA8L0J1dGxlckNvbnRhaW5lcj5cbiAgKTtcbn07XG5CdXRsZXIuZGlzcGxheU5hbWUgPSAnQnV0bGVyJztcblxuY29uc3QgQnV0bGVyV2l0aEFuaW1hdGlvbiA9IChwcm9wczogT21pdDxQcm9wcywgJ2NsYXNzTmFtZVNoYWtlQW5pbWF0aW9uJz4pID0+IChcbiAgPENsYXNzTmFtZXM+XG4gICAgeyh7IGNzcyB9KSA9PiAoXG4gICAgICA8QnV0bGVyXG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgY2xhc3NOYW1lU2hha2VBbmltYXRpb249e2Nzc2BcbiAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IDAuNDVzO1xuICAgICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGJvdGg7XG4gICAgICAgICAgYW5pbWF0aW9uLW5hbWU6ICR7c2hha2VBbmltYXRpb259O1xuICAgICAgICBgfVxuICAgICAgLz5cbiAgICApfVxuICA8L0NsYXNzTmFtZXM+XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBCdXRsZXJXaXRoQW5pbWF0aW9uO1xuIl19 */",
619
- toString: _EMOTION_STRINGIFIED_CSS_ERROR__
620
- };
621
-
622
- var Butler = function Butler(props) {
623
- var intl = reactIntl.useIntl();
624
-
625
- var _useReducer = react$1.useReducer(reducer, initialState),
626
- _useReducer2 = _slicedToArray(_useReducer, 2),
627
- state = _useReducer2[0],
628
- dispatch = _useReducer2[1];
629
-
630
- var shouldSelectFieldText = react$1.useRef(false);
631
- var isNewWindowCombo = react$1.useRef(false);
632
- var skipNextSelection = react$1.useRef(false);
633
- var searchContainerRef = react$1.useRef(null);
634
- var searchInputRef = react$1.useRef(null);
635
- var setHasNetworkError = react$1.useCallback(function () {
636
- dispatch({
637
- type: 'networkError',
638
- payload: true
639
- });
640
- }, []);
641
- var unsetHasNetworkError = react$1.useCallback(function () {
642
- dispatch({
643
- type: 'networkError',
644
- payload: false
645
- });
646
- }, []);
647
- var setIsLoading = react$1.useCallback(function () {
648
- dispatch({
649
- type: 'loading',
650
- payload: true
651
- });
652
- }, []);
653
- var unsetIsLoading = react$1.useCallback(function () {
654
- dispatch({
655
- type: 'loading',
656
- payload: false
657
- });
658
- }, []); // Destructure functions from props to reference them in the hook dependency list
659
-
660
- var searchFromParent = props.search,
661
- onCloseFromParent = props.onClose,
662
- executeCommandFromParent = props.executeCommand,
663
- onHistoryEntriesChangeFromParent = props.onHistoryEntriesChange,
664
- getNextCommandsFromParent = props.getNextCommands;
665
- var shake = react$1.useCallback(function () {
666
- if (searchContainerRef.current) {
667
- searchContainerRef.current.classList.remove(props.classNameShakeAnimation); // -> triggering reflow
668
- // eslint-disable-next-line no-void
669
-
670
- void searchContainerRef.current.offsetWidth;
671
- searchContainerRef.current.classList.add(props.classNameShakeAnimation);
672
- }
673
- }, [props.classNameShakeAnimation]);
674
- var execute = react$1.useCallback(function (command, meta) {
675
- var _context7, _context8;
676
-
677
- // Only main entries get added to history, so when a subcommand is executed,
678
- // we add the main command of it to the history (the top-level command).
679
- //
680
- // The key to identify history entries by is always the searchText
681
- // There will never be two history entries with the same searchText
682
- var entry = state.stack.length === 0 ? // The stack is empty, so we are executing a top-level command
683
- {
684
- searchText: state.searchText,
685
- results: state.results
686
- } : // We are executing a subcommand, so we get the top-level command for it,
687
- // which is at the bottom of the stack.
688
- {
689
- searchText: state.stack[0].searchText,
690
- results: state.stack[0].results
691
- }; // Add the entry to the history, while excluding any earlier history entry
692
- // with the same search text. This effectively "moves" that entry to the
693
- // top of the history (with the most recent results), or appends a new entry
694
- // when it didn't exist before.
695
-
696
- onHistoryEntriesChangeFromParent(_concatInstanceProperty__default["default"](_context7 = []).call(_context7, _toConsumableArray(_filterInstanceProperty__default["default"](_context8 = props.historyEntries).call(_context8, function (command) {
697
- return command.searchText !== entry.searchText;
698
- })), [entry]));
699
- dispatch({
700
- type: 'resetSearchText'
701
- });
702
- onCloseFromParent();
703
- executeCommandFromParent(command, meta);
704
- }, [executeCommandFromParent, onCloseFromParent, onHistoryEntriesChangeFromParent, props.historyEntries, state.results, state.searchText, state.stack]);
705
- var handleKeyDown = react$1.useCallback(function (event) {
706
- // Preventing cursor jumps can only happen in onKeyDown, but not in onKeyUp
707
- event.persist(); // We want to know when the user presses cmd+enter (cmd being a meta key).
708
- // We are only told about this in keyDown, but not in keyUp, so we need
709
- // to handle it here
710
-
711
- if (event.key === 'Enter' && hasNewWindowModifier(event)) {
712
- isNewWindowCombo.current = true;
713
- return;
714
- } // Avoid selecting the whole page when user selectes everything with
715
- // a keyboard shortcut. There is probably a better way to do this though.
716
- // This prevents the whole page from being selected in case the user
717
- // 1) opens the search box
718
- // 2) types into it
719
- // 3) selects all text using cmd+a
720
- // 4) closes the search box with esc
721
- // Without this handling, the whole page would now be selected
722
-
723
-
724
- if (isSelectAllCombo(event)) {
725
- // This stops the browser from selecting anything
726
- event.preventDefault();
727
-
728
- if (searchInputRef.current) {
729
- // This selects the text in the search input
730
- searchInputRef.current.setSelectionRange(0, state.searchText.length);
731
- }
732
-
733
- return;
734
- } // avoid interfering with other key combinations using modifier keys
735
-
736
-
737
- if (event.ctrlKey || event.altKey || event.shiftKey || event.metaKey) return;
738
- if (isCloseCombo(event)) return; // skip next mouseEnter to avoid setting selectedResult when cursor just
739
- // happens to be where the results will pop up
740
-
741
- skipNextSelection.current = true;
742
-
743
- if (event.key === 'ArrowDown') {
744
- // prevent cursor from jumping to end of text input
745
- event.preventDefault();
746
- dispatch({
747
- type: 'incrementSelectedResult'
748
- });
749
- return;
750
- }
751
-
752
- if (event.key === 'ArrowUp') {
753
- // browse through history
754
- if (state.searchText.length === 0 || state.selectedResult < 1 && state.enableHistory) {
755
- var _context9;
756
-
757
- shouldSelectFieldText.current = true;
758
- var selectedIndex = state.searchText.length === 0 ? // When going back the first step
759
- -1 : // When going back more than one step
760
- _findIndexInstanceProperty__default["default"](_context9 = props.historyEntries).call(_context9, function (command) {
761
- return command.searchText === state.searchText;
762
- }); // Pick the previous command from the history
763
-
764
- var prevCommand = selectedIndex === -1 ? // previous command on top of the history when going back on
765
- // first step
766
- last__default["default"](props.historyEntries) : // previous command is deeper down
767
- // When the history does not exist (negative index), then
768
- // this implicitly returns undefined
769
- props.historyEntries[selectedIndex - 1]; // Skip when no previous entry exists in the history
770
-
771
- if (!prevCommand) return;
772
- dispatch({
773
- type: 'pickCommandFromHistory',
774
- payload: {
775
- searchText: prevCommand.searchText,
776
- results: prevCommand.results
777
- }
778
- });
779
- return;
780
- } // prevent cursor from jumping to beginning of text input
781
-
782
-
783
- event.preventDefault();
784
- dispatch({
785
- type: 'decrementSelectedResult'
786
- });
787
- return;
788
- }
789
-
790
- if (state.selectedResult > -1) {
791
- if (event.key === 'ArrowRight') {
792
- var _command = state.results[state.selectedResult];
793
- var _searchText = state.searchText;
794
- var isCursorAtEnd = searchInputRef.current && state.searchText.length === searchInputRef.current.selectionStart;
795
- var isEverythingSelected = searchInputRef.current && searchInputRef.current.selectionStart === 0 && state.searchText.length === searchInputRef.current.selectionEnd; // only allow diving in when cursor is at end of input or when
796
- // the complete text is selected (when browsing through history)
797
-
798
- if (!isCursorAtEnd && !isEverythingSelected) return;
799
- unsetHasNetworkError(); // NOTE: since we need to fetch the "next command", which is an async operation,
800
- // we use a IIFE to process that and eventually update the state.
801
-
802
- _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee() {
803
- var nextCommands;
804
- return _regeneratorRuntime__default["default"].wrap(function _callee$(_context10) {
805
- while (1) {
806
- switch (_context10.prev = _context10.next) {
807
- case 0:
808
- if (!_command) {
809
- _context10.next = 7;
810
- break;
811
- }
812
-
813
- _context10.next = 3;
814
- return getNextCommandsFromParent(_command);
815
-
816
- case 3:
817
- nextCommands = _context10.sent;
818
-
819
- if (!(nextCommands.length > 0)) {
820
- _context10.next = 7;
821
- break;
822
- }
823
-
824
- // Ensure the search text has not changed while we were loading
825
- // the next results, otherwise we'd interrupt the user.
826
- // Throw away the results in case the search text has changed.
827
- if (state.searchText === _searchText) {
828
- dispatch({
829
- type: 'setNextCommands',
830
- payload: {
831
- results: nextCommands
832
- }
833
- });
834
- }
835
-
836
- return _context10.abrupt("return");
837
-
838
- case 7:
839
- shake();
840
-
841
- case 8:
842
- case "end":
843
- return _context10.stop();
844
- }
845
- }
846
- }, _callee);
847
- }))();
848
-
849
- return;
850
- }
851
-
852
- if (event.key === 'ArrowLeft') {
853
- // go left in stack
854
- var _prevCommand = last__default["default"](state.stack); // do nothing when we can't go left anymore
855
-
856
-
857
- if (!_prevCommand) return; // prevent cursor from jumping a char to the left in text input
858
-
859
- event.preventDefault();
860
- dispatch({
861
- type: 'setPrevCommands',
862
- payload: {
863
- searchText: _prevCommand.searchText,
864
- results: _prevCommand.results
865
- }
866
- });
867
- return;
868
- }
869
- }
870
- }, [getNextCommandsFromParent, props.historyEntries, shake, state, unsetHasNetworkError]);
871
- var handleKeyUp = react$1.useCallback(function (event) {
872
- // setting the selection can only happen in onKeyUp
873
- if (shouldSelectFieldText.current) {
874
- var input = event.target;
875
- input.focus();
876
- input.select();
877
- shouldSelectFieldText.current = false;
878
- }
879
-
880
- if (event.key !== 'Enter' && !isNewWindowCombo.current) return true; // User just triggered the search
881
-
882
- if (state.selectedResult === -1) return true; // User had something selected and wants to go there
883
-
884
- execute(state.results[state.selectedResult], {
885
- openInNewTab: isNewWindowCombo.current
886
- });
887
- isNewWindowCombo.current = false;
888
- return true;
889
- }, [execute, state.results, state.selectedResult]);
890
- var handleChange = react$1.useCallback(function (event) {
891
- var searchText = event.target.value;
892
-
893
- if (_trimInstanceProperty__default["default"](searchText).call(searchText).length === 0) {
894
- dispatch({
895
- type: 'reset'
896
- });
897
- return;
898
- }
899
-
900
- dispatch({
901
- type: 'searchText',
902
- payload: searchText
903
- }); // A search via network is only triggered when there
904
- // are more than three characters. So no false loading
905
- // indication is given.
906
-
907
- if (_trimInstanceProperty__default["default"](searchText).call(searchText).length > 3) {
908
- setIsLoading();
909
- }
910
-
911
- searchFromParent(searchText).then(function (asyncResults) {
912
- var _context11, _context12;
913
-
914
- unsetHasNetworkError();
915
- unsetIsLoading();
916
- var fuse = new Fuse__default["default"](asyncResults, {
917
- keys: [{
918
- name: 'text',
919
- weight: 0.6
920
- }, {
921
- name: 'keywords',
922
- weight: 0.4
923
- }],
924
- minMatchCharLength: 2,
925
- includeScore: true
926
- });
927
-
928
- var searchResults = _sliceInstanceProperty__default["default"](_context11 = _filterInstanceProperty__default["default"](_context12 = fuse.search(searchText) // Filter out results with a matching score over 0.75
929
- ).call(_context12, function (result) {
930
- return result.score ? result.score < 0.75 : false;
931
- }) // Keep a maximal of 9 results
932
- ).call(_context11, 0, 9);
933
-
934
- dispatch({
935
- type: 'setSearchTextResults',
936
- payload: _mapInstanceProperty__default["default"](searchResults).call(searchResults, function (result) {
937
- return result.item;
938
- })
939
- });
940
- }, function (error) {
941
- // eslint-disable-next-line no-console
942
- if (process.env.NODE_ENV !== 'production') console.error(error);
943
- unsetIsLoading();
944
- setHasNetworkError();
945
- });
946
- }, [searchFromParent, setHasNetworkError, setIsLoading, unsetHasNetworkError, unsetIsLoading]);
947
- var handleContainerClick = react$1.useCallback(function () {
948
- dispatch({
949
- type: 'resetResultsWhenClosing'
950
- });
951
- onCloseFromParent();
952
- }, [onCloseFromParent]);
953
- var createCommandMouseEnterHandler = react$1.useCallback(function (index) {
954
- return function () {
955
- // In case the cursor happened to be in a location where a
956
- // result would appear, it would trigger onMouseEnter and the
957
- // result would be selected immediately. This is not something
958
- // a user would expect, hence we prevent it from happening.
959
- // The user has to move the cursor to an option explicitly for
960
- // it to become active. However, the user can always click and
961
- // that action will be triggered.
962
- if (skipNextSelection.current) {
963
- skipNextSelection.current = false;
964
- return;
965
- } // sets the selected result, mainly for the hover effect
966
-
967
-
968
- dispatch({
969
- type: 'selectedResult',
970
- payload: index
971
- });
972
- };
973
- }, []);
974
- var createCommandClickHandler = react$1.useCallback(function (command) {
975
- return function (event) {
976
- execute(command, {
977
- openInNewTab: hasNewWindowModifier(event)
978
- });
979
- };
980
- }, [execute]);
981
- return jsxRuntime.jsx(dist_commercetoolsFrontendApplicationShell.ButlerContainer, {
982
- onClick: handleContainerClick,
983
- "data-testid": "quick-access",
984
- tabIndex: -1,
985
- children: jsxRuntime.jsxs("div", {
986
- ref: searchContainerRef,
987
- css: /*#__PURE__*/react.css("background-color:", designSystem.customProperties.colorSurface, ";border:0;border-radius:", designSystem.customProperties.borderRadius4, ";min-height:40px;z-index:20002;width:400px;margin:40px auto;overflow:hidden;-webkit-box-shadow:0 10px 30px -8px rgba(0, 0, 0, 0.75);-moz-box-shadow:0 10px 30px -8px rgba(0, 0, 0, 0.75);box-shadow:0 10px 30px -8px rgba(0, 0, 0, 0.75);padding-bottom:", state.hasNetworkError ? '0' : designSystem.customProperties.spacingS, ";" + (process.env.NODE_ENV === "production" ? "" : ";label:Butler;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBc2xCZ0IiLCJmaWxlIjoiYnV0bGVyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgQ29tbWFuZCxcbiAgU2VhcmNoVGV4dCxcbiAgU2VsZWN0ZWRSZXN1bHQsXG4gIFN0YWNrLFxuICBIaXN0b3J5RW50cnksXG59IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtcbiAgS2V5Ym9hcmRFdmVudEhhbmRsZXIsXG4gIENoYW5nZUV2ZW50SGFuZGxlcixcbiAgS2V5Ym9hcmRFdmVudCxcbiAgTW91c2VFdmVudEhhbmRsZXIsXG4gIE1vdXNlRXZlbnQsXG4gIHVzZVJlZHVjZXIsXG4gIHVzZVJlZixcbiAgdXNlQ2FsbGJhY2ssXG59IGZyb20gJ3JlYWN0JztcbmltcG9ydCBGdXNlIGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IHsgRm9ybWF0dGVkTWVzc2FnZSwgdXNlSW50bCB9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IGxhc3QgZnJvbSAnbG9kYXNoL2xhc3QnO1xuaW1wb3J0IHsgY3NzLCBrZXlmcmFtZXMsIENsYXNzTmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgTG9hZGluZ1NwaW5uZXIgZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvbG9hZGluZy1zcGlubmVyJztcbmltcG9ydCB7IFNlYXJjaEljb24gfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9pY29ucyc7XG5pbXBvcnQgeyBjdXN0b21Qcm9wZXJ0aWVzIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgQnV0bGVyQ29tbWFuZCBmcm9tICcuLi9idXRsZXItY29tbWFuZCc7XG5pbXBvcnQgQnV0bGVyQ29udGFpbmVyIGZyb20gJy4uL2J1dGxlci1jb250YWluZXInO1xuaW1wb3J0IG1lc3NhZ2VzIGZyb20gJy4uL21lc3NhZ2VzJztcblxuY29uc3QgaXNTZWxlY3RBbGxDb21ibyA9IChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cbiAgZXZlbnQua2V5ID09PSAnYScgJiZcbiAgZXZlbnQubWV0YUtleSAmJlxuICAhZXZlbnQuY3RybEtleSAmJlxuICAhZXZlbnQuYWx0S2V5ICYmXG4gICFldmVudC5zaGlmdEtleTtcblxuY29uc3QgaXNDbG9zZUNvbWJvID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PlxuICBldmVudC5rZXkgPT09ICdFc2NhcGUnICYmXG4gICFldmVudC5tZXRhS2V5ICYmXG4gICFldmVudC5jdHJsS2V5ICYmXG4gICFldmVudC5hbHRLZXkgJiZcbiAgIWV2ZW50LnNoaWZ0S2V5O1xuXG5jb25zdCBnZXRQbGF0Zm9ybSA9ICgpID0+IHtcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdXaW4nKSkgcmV0dXJuICd3aW5kb3dzJztcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdNYWMnKSkgcmV0dXJuICdtYWNvcyc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnWDExJykpIHJldHVybiAndW5peCc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnTGludXgnKSkgcmV0dXJuICdsaW51eCc7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBoYXNOZXdXaW5kb3dNb2RpZmllciA9IChcbiAgZXZlbnQ6IEtleWJvYXJkRXZlbnQ8SFRNTEVsZW1lbnQ+IHwgTW91c2VFdmVudDxIVE1MRWxlbWVudD5cbikgPT4ge1xuICBjb25zdCBwbGF0Zm9ybSA9IGdldFBsYXRmb3JtKCk7XG4gIHN3aXRjaCAocGxhdGZvcm0pIHtcbiAgICBjYXNlICdtYWNvcyc6XG4gICAgICByZXR1cm4gZXZlbnQubWV0YUtleTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGV2ZW50LmN0cmxLZXk7XG4gIH1cbn07XG5cbmNvbnN0IHNoYWtlQW5pbWF0aW9uID0ga2V5ZnJhbWVzYFxuICBmcm9tLFxuICB0byB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcbiAgfVxuXG4gIDE0JSxcbiAgNDIlLFxuICA3MCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTNweCwgMCwgMCk7XG4gIH1cblxuICAyOCUsXG4gIDU2JSxcbiAgODQlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDNweCwgMCwgMCk7XG4gIH1cbmA7XG5cbnR5cGUgU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogYm9vbGVhbjtcbiAgaXNMb2FkaW5nOiBib29sZWFuO1xuICBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0O1xuICBzZWxlY3RlZFJlc3VsdDogU2VsZWN0ZWRSZXN1bHQ7XG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IGJvb2xlYW47XG4gIHJlc3VsdHM6IENvbW1hbmRbXTtcbiAgc3RhY2s6IFN0YWNrW107XG59O1xudHlwZSBBY3Rpb24gPVxuICB8IHsgdHlwZTogJ25ldHdvcmtFcnJvcic7IHBheWxvYWQ6IGJvb2xlYW4gfVxuICB8IHsgdHlwZTogJ2xvYWRpbmcnOyBwYXlsb2FkOiBib29sZWFuIH1cbiAgfCB7IHR5cGU6ICdzZWxlY3RlZFJlc3VsdCc7IHBheWxvYWQ6IG51bWJlciB9XG4gIHwgeyB0eXBlOiAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH1cbiAgfCB7IHR5cGU6ICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfVxuICB8IHtcbiAgICAgIHR5cGU6ICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JztcbiAgICAgIHBheWxvYWQ6IHsgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDsgcmVzdWx0czogQ29tbWFuZFtdIH07XG4gICAgfVxuICB8IHsgdHlwZTogJ3NldE5leHRDb21tYW5kcyc7IHBheWxvYWQ6IHsgcmVzdWx0czogQ29tbWFuZFtdIH0gfVxuICB8IHtcbiAgICAgIHR5cGU6ICdzZXRQcmV2Q29tbWFuZHMnO1xuICAgICAgcGF5bG9hZDogeyBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0OyByZXN1bHRzOiBDb21tYW5kW10gfTtcbiAgICB9XG4gIHwgeyB0eXBlOiAnc2VhcmNoVGV4dCc7IHBheWxvYWQ6IHN0cmluZyB9XG4gIHwgeyB0eXBlOiAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOyBwYXlsb2FkOiBDb21tYW5kW10gfVxuICB8IHsgdHlwZTogJ3Jlc2V0U2VhcmNoVGV4dCcgfVxuICB8IHsgdHlwZTogJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJyB9XG4gIHwgeyB0eXBlOiAncmVzZXQnIH07XG5jb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogZmFsc2UsXG4gIGlzTG9hZGluZzogZmFsc2UsXG4gIHNlYXJjaFRleHQ6ICcnLFxuICBzZWxlY3RlZFJlc3VsdDogLTEsXG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IHRydWUsXG4gIHJlc3VsdHM6IFtdLFxuICBzdGFjazogW10sXG59O1xuY29uc3QgcmVkdWNlciA9IChzdGF0ZTogU3RhdGUgPSBpbml0aWFsU3RhdGUsIGFjdGlvbjogQWN0aW9uKTogU3RhdGUgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnbmV0d29ya0Vycm9yJzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBoYXNOZXR3b3JrRXJyb3I6IGFjdGlvbi5wYXlsb2FkIH07XG4gICAgY2FzZSAnbG9hZGluZyc6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgaXNMb2FkaW5nOiBhY3Rpb24ucGF5bG9hZCB9O1xuICAgIGNhc2UgJ3NlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQgfTtcbiAgICBjYXNlICdpbmNyZW1lbnRTZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6XG4gICAgICAgICAgc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IHN0YXRlLnJlc3VsdHMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0ICsgMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ2RlY3JlbWVudFNlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDpcbiAgICAgICAgICBzdGF0ZS5zZWxlY3RlZFJlc3VsdCA8IDFcbiAgICAgICAgICAgID8gc3RhdGUucmVzdWx0cy5sZW5ndGggLSAxXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0IC0gMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ3BpY2tDb21tYW5kRnJvbUhpc3RvcnknOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OiAwLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZC5zZWFyY2hUZXh0LFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZC5yZXN1bHRzLFxuICAgICAgICBzdGFjazogW10sXG4gICAgICAgIC8vIFRoZSBoaXN0b3J5IGRvZXMgbm90IGdldCBjaGFuZ2VkIGhlcmUsIGl0IHdpbGwgYmUgY2hhbmdlZCBhbG9uZ1xuICAgICAgICAvLyB3aXRoIHRoZSByZWd1bGFyIGZsb3cuXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldE5leHRDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc3RhY2s6IFtcbiAgICAgICAgICAuLi5zdGF0ZS5zdGFjayxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZWFyY2hUZXh0OiBzdGF0ZS5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgcmVzdWx0czogc3RhdGUucmVzdWx0cyxcbiAgICAgICAgICAgIHNlbGVjdGVkUmVzdWx0OiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogMCxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLnJlc3VsdHMsXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldFByZXZDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQuc2VhcmNoVGV4dCxcbiAgICAgICAgcmVzdWx0czogYWN0aW9uLnBheWxvYWQucmVzdWx0cyxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IDAsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgICAvLyBvbWl0IGxhc3QgaXRlbVxuICAgICAgICBzdGFjazogc3RhdGUuc3RhY2suc2xpY2UoMCwgLTEpLFxuICAgICAgfTtcbiAgICBjYXNlICdzZWFyY2hUZXh0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgLy8gY2xlYXIgbmV0d29yayBlcnJvciB3aGVuIHNlYXJjaCB0ZXh0IGlzIGNsZWFyZWQsIHNvIHRoYXQgdXNlcnNcbiAgICAgICAgLy8gYXJlIHRlbXB0ZWQgdG8gcmV0cnlcbiAgICAgICAgaGFzTmV0d29ya0Vycm9yOiBhY3Rpb24ucGF5bG9hZC5sZW5ndGggPiAwICYmIHN0YXRlLmhhc05ldHdvcmtFcnJvcixcbiAgICAgIH07XG4gICAgY2FzZSAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQubGVuZ3RoID4gMCA/IDAgOiAtMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogdHJ1ZSxcbiAgICAgICAgc3RhY2s6IFtdLFxuICAgICAgfTtcbiAgICBjYXNlICdyZXNldFNlYXJjaFRleHQnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlYXJjaFRleHQ6ICcnLCByZXN1bHRzOiBbXSwgc2VsZWN0ZWRSZXN1bHQ6IC0xIH07XG4gICAgY2FzZSAncmVzZXRSZXN1bHRzV2hlbkNsb3NpbmcnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlbGVjdGVkUmVzdWx0OiAtMSwgZW5hYmxlSGlzdG9yeTogdHJ1ZSB9O1xuICAgIGNhc2UgJ3Jlc2V0JzpcbiAgICAgIHJldHVybiBpbml0aWFsU3RhdGU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufTtcblxudHlwZSBQcm9wcyA9IHtcbiAgaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdO1xuICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlOiAoaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdKSA9PiB2b2lkO1xuICBzZWFyY2g6IChzZWFyY2hUZXh0OiBTZWFyY2hUZXh0KSA9PiBQcm9taXNlPENvbW1hbmRbXT47XG4gIGdldE5leHRDb21tYW5kczogKGNvbW1hbmQ6IENvbW1hbmQpID0+IFByb21pc2U8Q29tbWFuZFtdPjtcbiAgZXhlY3V0ZUNvbW1hbmQ6IChjb21tYW5kOiBDb21tYW5kLCBtZXRhOiB7IG9wZW5Jbk5ld1RhYjogYm9vbGVhbiB9KSA9PiB2b2lkO1xuICBvbkNsb3NlOiAoKSA9PiB2b2lkO1xuICBjbGFzc05hbWVTaGFrZUFuaW1hdGlvbjogc3RyaW5nO1xufTtcbmNvbnN0IEJ1dGxlciA9IChwcm9wczogUHJvcHMpID0+IHtcbiAgY29uc3QgaW50bCA9IHVzZUludGwoKTtcbiAgY29uc3QgW3N0YXRlLCBkaXNwYXRjaF0gPSB1c2VSZWR1Y2VyPFxuICAgIChwcmV2U3RhdGU6IFN0YXRlLCBhY3Rpb246IEFjdGlvbikgPT4gU3RhdGVcbiAgPihyZWR1Y2VyLCBpbml0aWFsU3RhdGUpO1xuXG4gIGNvbnN0IHNob3VsZFNlbGVjdEZpZWxkVGV4dCA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IGlzTmV3V2luZG93Q29tYm8gPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBza2lwTmV4dFNlbGVjdGlvbiA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IHNlYXJjaENvbnRhaW5lclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IHNlYXJjaElucHV0UmVmID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KG51bGwpO1xuXG4gIGNvbnN0IHNldEhhc05ldHdvcmtFcnJvciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICduZXR3b3JrRXJyb3InLCBwYXlsb2FkOiB0cnVlIH0pO1xuICB9LCBbXSk7XG4gIGNvbnN0IHVuc2V0SGFzTmV0d29ya0Vycm9yID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ25ldHdvcmtFcnJvcicsIHBheWxvYWQ6IGZhbHNlIH0pO1xuICB9LCBbXSk7XG4gIGNvbnN0IHNldElzTG9hZGluZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdsb2FkaW5nJywgcGF5bG9hZDogdHJ1ZSB9KTtcbiAgfSwgW10pO1xuICBjb25zdCB1bnNldElzTG9hZGluZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdsb2FkaW5nJywgcGF5bG9hZDogZmFsc2UgfSk7XG4gIH0sIFtdKTtcblxuICAvLyBEZXN0cnVjdHVyZSBmdW5jdGlvbnMgZnJvbSBwcm9wcyB0byByZWZlcmVuY2UgdGhlbSBpbiB0aGUgaG9vayBkZXBlbmRlbmN5IGxpc3RcbiAgY29uc3Qge1xuICAgIHNlYXJjaDogc2VhcmNoRnJvbVBhcmVudCxcbiAgICBvbkNsb3NlOiBvbkNsb3NlRnJvbVBhcmVudCxcbiAgICBleGVjdXRlQ29tbWFuZDogZXhlY3V0ZUNvbW1hbmRGcm9tUGFyZW50LFxuICAgIG9uSGlzdG9yeUVudHJpZXNDaGFuZ2U6IG9uSGlzdG9yeUVudHJpZXNDaGFuZ2VGcm9tUGFyZW50LFxuICAgIGdldE5leHRDb21tYW5kczogZ2V0TmV4dENvbW1hbmRzRnJvbVBhcmVudCxcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHNoYWtlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChzZWFyY2hDb250YWluZXJSZWYuY3VycmVudCkge1xuICAgICAgc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQuY2xhc3NMaXN0LnJlbW92ZShcbiAgICAgICAgcHJvcHMuY2xhc3NOYW1lU2hha2VBbmltYXRpb25cbiAgICAgICk7XG4gICAgICAvLyAtPiB0cmlnZ2VyaW5nIHJlZmxvd1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXZvaWRcbiAgICAgIHZvaWQgc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQub2Zmc2V0V2lkdGg7XG4gICAgICBzZWFyY2hDb250YWluZXJSZWYuY3VycmVudC5jbGFzc0xpc3QuYWRkKHByb3BzLmNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uKTtcbiAgICB9XG4gIH0sIFtwcm9wcy5jbGFzc05hbWVTaGFrZUFuaW1hdGlvbl0pO1xuXG4gIGNvbnN0IGV4ZWN1dGUgPSB1c2VDYWxsYmFjayhcbiAgICAoY29tbWFuZCwgbWV0YSkgPT4ge1xuICAgICAgLy8gT25seSBtYWluIGVudHJpZXMgZ2V0IGFkZGVkIHRvIGhpc3RvcnksIHNvIHdoZW4gYSBzdWJjb21tYW5kIGlzIGV4ZWN1dGVkLFxuICAgICAgLy8gd2UgYWRkIHRoZSBtYWluIGNvbW1hbmQgb2YgaXQgdG8gdGhlIGhpc3RvcnkgKHRoZSB0b3AtbGV2ZWwgY29tbWFuZCkuXG4gICAgICAvL1xuICAgICAgLy8gVGhlIGtleSB0byBpZGVudGlmeSBoaXN0b3J5IGVudHJpZXMgYnkgaXMgYWx3YXlzIHRoZSBzZWFyY2hUZXh0XG4gICAgICAvLyBUaGVyZSB3aWxsIG5ldmVyIGJlIHR3byBoaXN0b3J5IGVudHJpZXMgd2l0aCB0aGUgc2FtZSBzZWFyY2hUZXh0XG4gICAgICBjb25zdCBlbnRyeSA9XG4gICAgICAgIHN0YXRlLnN0YWNrLmxlbmd0aCA9PT0gMFxuICAgICAgICAgID8gLy8gVGhlIHN0YWNrIGlzIGVtcHR5LCBzbyB3ZSBhcmUgZXhlY3V0aW5nIGEgdG9wLWxldmVsIGNvbW1hbmRcbiAgICAgICAgICAgIHsgc2VhcmNoVGV4dDogc3RhdGUuc2VhcmNoVGV4dCwgcmVzdWx0czogc3RhdGUucmVzdWx0cyB9XG4gICAgICAgICAgOiAvLyBXZSBhcmUgZXhlY3V0aW5nIGEgc3ViY29tbWFuZCwgc28gd2UgZ2V0IHRoZSB0b3AtbGV2ZWwgY29tbWFuZCBmb3IgaXQsXG4gICAgICAgICAgICAvLyB3aGljaCBpcyBhdCB0aGUgYm90dG9tIG9mIHRoZSBzdGFjay5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc2VhcmNoVGV4dDogc3RhdGUuc3RhY2tbMF0uc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgcmVzdWx0czogc3RhdGUuc3RhY2tbMF0ucmVzdWx0cyxcbiAgICAgICAgICAgIH07XG5cbiAgICAgIC8vIEFkZCB0aGUgZW50cnkgdG8gdGhlIGhpc3RvcnksIHdoaWxlIGV4Y2x1ZGluZyBhbnkgZWFybGllciBoaXN0b3J5IGVudHJ5XG4gICAgICAvLyB3aXRoIHRoZSBzYW1lIHNlYXJjaCB0ZXh0LiBUaGlzIGVmZmVjdGl2ZWx5IFwibW92ZXNcIiB0aGF0IGVudHJ5IHRvIHRoZVxuICAgICAgLy8gdG9wIG9mIHRoZSBoaXN0b3J5ICh3aXRoIHRoZSBtb3N0IHJlY2VudCByZXN1bHRzKSwgb3IgYXBwZW5kcyBhIG5ldyBlbnRyeVxuICAgICAgLy8gd2hlbiBpdCBkaWRuJ3QgZXhpc3QgYmVmb3JlLlxuICAgICAgb25IaXN0b3J5RW50cmllc0NoYW5nZUZyb21QYXJlbnQoW1xuICAgICAgICAuLi5wcm9wcy5oaXN0b3J5RW50cmllcy5maWx0ZXIoXG4gICAgICAgICAgKGNvbW1hbmQpID0+IGNvbW1hbmQuc2VhcmNoVGV4dCAhPT0gZW50cnkuc2VhcmNoVGV4dFxuICAgICAgICApLFxuICAgICAgICBlbnRyeSxcbiAgICAgIF0pO1xuXG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdyZXNldFNlYXJjaFRleHQnIH0pO1xuXG4gICAgICBvbkNsb3NlRnJvbVBhcmVudCgpO1xuXG4gICAgICBleGVjdXRlQ29tbWFuZEZyb21QYXJlbnQoY29tbWFuZCwgbWV0YSk7XG4gICAgfSxcbiAgICBbXG4gICAgICBleGVjdXRlQ29tbWFuZEZyb21QYXJlbnQsXG4gICAgICBvbkNsb3NlRnJvbVBhcmVudCxcbiAgICAgIG9uSGlzdG9yeUVudHJpZXNDaGFuZ2VGcm9tUGFyZW50LFxuICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXMsXG4gICAgICBzdGF0ZS5yZXN1bHRzLFxuICAgICAgc3RhdGUuc2VhcmNoVGV4dCxcbiAgICAgIHN0YXRlLnN0YWNrLFxuICAgIF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IHVzZUNhbGxiYWNrPEtleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+PihcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIC8vIFByZXZlbnRpbmcgY3Vyc29yIGp1bXBzIGNhbiBvbmx5IGhhcHBlbiBpbiBvbktleURvd24sIGJ1dCBub3QgaW4gb25LZXlVcFxuICAgICAgZXZlbnQucGVyc2lzdCgpO1xuXG4gICAgICAvLyBXZSB3YW50IHRvIGtub3cgd2hlbiB0aGUgdXNlciBwcmVzc2VzIGNtZCtlbnRlciAoY21kIGJlaW5nIGEgbWV0YSBrZXkpLlxuICAgICAgLy8gV2UgYXJlIG9ubHkgdG9sZCBhYm91dCB0aGlzIGluIGtleURvd24sIGJ1dCBub3QgaW4ga2V5VXAsIHNvIHdlIG5lZWRcbiAgICAgIC8vIHRvIGhhbmRsZSBpdCBoZXJlXG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInICYmIGhhc05ld1dpbmRvd01vZGlmaWVyKGV2ZW50KSkge1xuICAgICAgICBpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIEF2b2lkIHNlbGVjdGluZyB0aGUgd2hvbGUgcGFnZSB3aGVuIHVzZXIgc2VsZWN0ZXMgZXZlcnl0aGluZyB3aXRoXG4gICAgICAvLyBhIGtleWJvYXJkIHNob3J0Y3V0LiBUaGVyZSBpcyBwcm9iYWJseSBhIGJldHRlciB3YXkgdG8gZG8gdGhpcyB0aG91Z2guXG4gICAgICAvLyBUaGlzIHByZXZlbnRzIHRoZSB3aG9sZSBwYWdlIGZyb20gYmVpbmcgc2VsZWN0ZWQgaW4gY2FzZSB0aGUgdXNlclxuICAgICAgLy8gMSkgb3BlbnMgdGhlIHNlYXJjaCBib3hcbiAgICAgIC8vIDIpIHR5cGVzIGludG8gaXRcbiAgICAgIC8vIDMpIHNlbGVjdHMgYWxsIHRleHQgdXNpbmcgY21kK2FcbiAgICAgIC8vIDQpIGNsb3NlcyB0aGUgc2VhcmNoIGJveCB3aXRoIGVzY1xuICAgICAgLy8gV2l0aG91dCB0aGlzIGhhbmRsaW5nLCB0aGUgd2hvbGUgcGFnZSB3b3VsZCBub3cgYmUgc2VsZWN0ZWRcbiAgICAgIGlmIChpc1NlbGVjdEFsbENvbWJvKGV2ZW50KSkge1xuICAgICAgICAvLyBUaGlzIHN0b3BzIHRoZSBicm93c2VyIGZyb20gc2VsZWN0aW5nIGFueXRoaW5nXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmIChzZWFyY2hJbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgLy8gVGhpcyBzZWxlY3RzIHRoZSB0ZXh0IGluIHRoZSBzZWFyY2ggaW5wdXRcbiAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNldFNlbGVjdGlvblJhbmdlKDAsIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIGF2b2lkIGludGVyZmVyaW5nIHdpdGggb3RoZXIga2V5IGNvbWJpbmF0aW9ucyB1c2luZyBtb2RpZmllciBrZXlzXG4gICAgICBpZiAoZXZlbnQuY3RybEtleSB8fCBldmVudC5hbHRLZXkgfHwgZXZlbnQuc2hpZnRLZXkgfHwgZXZlbnQubWV0YUtleSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKGlzQ2xvc2VDb21ibyhldmVudCkpIHJldHVybjtcblxuICAgICAgLy8gc2tpcCBuZXh0IG1vdXNlRW50ZXIgdG8gYXZvaWQgc2V0dGluZyBzZWxlY3RlZFJlc3VsdCB3aGVuIGN1cnNvciBqdXN0XG4gICAgICAvLyBoYXBwZW5zIHRvIGJlIHdoZXJlIHRoZSByZXN1bHRzIHdpbGwgcG9wIHVwXG4gICAgICBza2lwTmV4dFNlbGVjdGlvbi5jdXJyZW50ID0gdHJ1ZTtcblxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgICAgLy8gcHJldmVudCBjdXJzb3IgZnJvbSBqdW1waW5nIHRvIGVuZCBvZiB0ZXh0IGlucHV0XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ2luY3JlbWVudFNlbGVjdGVkUmVzdWx0JyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICAgIC8vIGJyb3dzZSB0aHJvdWdoIGhpc3RvcnlcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgKHN0YXRlLnNlbGVjdGVkUmVzdWx0IDwgMSAmJiBzdGF0ZS5lbmFibGVIaXN0b3J5KVxuICAgICAgICApIHtcbiAgICAgICAgICBzaG91bGRTZWxlY3RGaWVsZFRleHQuY3VycmVudCA9IHRydWU7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRJbmRleCA9XG4gICAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICA/IC8vIFdoZW4gZ29pbmcgYmFjayB0aGUgZmlyc3Qgc3RlcFxuICAgICAgICAgICAgICAgIC0xXG4gICAgICAgICAgICAgIDogLy8gV2hlbiBnb2luZyBiYWNrIG1vcmUgdGhhbiBvbmUgc3RlcFxuICAgICAgICAgICAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgIChjb21tYW5kKSA9PiBjb21tYW5kLnNlYXJjaFRleHQgPT09IHN0YXRlLnNlYXJjaFRleHRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgIC8vIFBpY2sgdGhlIHByZXZpb3VzIGNvbW1hbmQgZnJvbSB0aGUgaGlzdG9yeVxuICAgICAgICAgIGNvbnN0IHByZXZDb21tYW5kID1cbiAgICAgICAgICAgIHNlbGVjdGVkSW5kZXggPT09IC0xXG4gICAgICAgICAgICAgID8gLy8gcHJldmlvdXMgY29tbWFuZCBvbiB0b3Agb2YgdGhlIGhpc3Rvcnkgd2hlbiBnb2luZyBiYWNrIG9uXG4gICAgICAgICAgICAgICAgLy8gZmlyc3Qgc3RlcFxuICAgICAgICAgICAgICAgIGxhc3QocHJvcHMuaGlzdG9yeUVudHJpZXMpXG4gICAgICAgICAgICAgIDogLy8gcHJldmlvdXMgY29tbWFuZCBpcyBkZWVwZXIgZG93blxuICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlIGhpc3RvcnkgZG9lcyBub3QgZXhpc3QgKG5lZ2F0aXZlIGluZGV4KSwgdGhlblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgaW1wbGljaXRseSByZXR1cm5zIHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzW3NlbGVjdGVkSW5kZXggLSAxXTtcbiAgICAgICAgICAvLyBTa2lwIHdoZW4gbm8gcHJldmlvdXMgZW50cnkgZXhpc3RzIGluIHRoZSBoaXN0b3J5XG4gICAgICAgICAgaWYgKCFwcmV2Q29tbWFuZCkgcmV0dXJuO1xuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgICAgc2VhcmNoVGV4dDogcHJldkNvbW1hbmQuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgcmVzdWx0czogcHJldkNvbW1hbmQucmVzdWx0cyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHByZXZlbnQgY3Vyc29yIGZyb20ganVtcGluZyB0byBiZWdpbm5pbmcgb2YgdGV4dCBpbnB1dFxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0ZS5zZWxlY3RlZFJlc3VsdCA+IC0xKSB7XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0Jykge1xuICAgICAgICAgIGNvbnN0IGNvbW1hbmQgPSBzdGF0ZS5yZXN1bHRzW3N0YXRlLnNlbGVjdGVkUmVzdWx0XTtcbiAgICAgICAgICBjb25zdCBzZWFyY2hUZXh0ID0gc3RhdGUuc2VhcmNoVGV4dDtcbiAgICAgICAgICBjb25zdCBpc0N1cnNvckF0RW5kID1cbiAgICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQgJiZcbiAgICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xuXG4gICAgICAgICAgY29uc3QgaXNFdmVyeXRoaW5nU2VsZWN0ZWQgPVxuICAgICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudCAmJlxuICAgICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydCA9PT0gMCAmJlxuICAgICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xuXG4gICAgICAgICAgLy8gb25seSBhbGxvdyBkaXZpbmcgaW4gd2hlbiBjdXJzb3IgaXMgYXQgZW5kIG9mIGlucHV0IG9yIHdoZW5cbiAgICAgICAgICAvLyB0aGUgY29tcGxldGUgdGV4dCBpcyBzZWxlY3RlZCAod2hlbiBicm93c2luZyB0aHJvdWdoIGhpc3RvcnkpXG4gICAgICAgICAgaWYgKCFpc0N1cnNvckF0RW5kICYmICFpc0V2ZXJ5dGhpbmdTZWxlY3RlZCkgcmV0dXJuO1xuXG4gICAgICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IoKTtcblxuICAgICAgICAgIC8vIE5PVEU6IHNpbmNlIHdlIG5lZWQgdG8gZmV0Y2ggdGhlIFwibmV4dCBjb21tYW5kXCIsIHdoaWNoIGlzIGFuIGFzeW5jIG9wZXJhdGlvbixcbiAgICAgICAgICAvLyB3ZSB1c2UgYSBJSUZFIHRvIHByb2Nlc3MgdGhhdCBhbmQgZXZlbnR1YWxseSB1cGRhdGUgdGhlIHN0YXRlLlxuICAgICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoY29tbWFuZCkge1xuICAgICAgICAgICAgICBjb25zdCBuZXh0Q29tbWFuZHMgPSBhd2FpdCBnZXROZXh0Q29tbWFuZHNGcm9tUGFyZW50KGNvbW1hbmQpO1xuICAgICAgICAgICAgICAvLyBhdm9pZCBtb3ZpbmcgY3Vyc29yIHdoZW4gdGhlcmUgYXJlIHN1Yi1vcHRpb25zXG4gICAgICAgICAgICAgIGlmIChuZXh0Q29tbWFuZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIC8vIEVuc3VyZSB0aGUgc2VhcmNoIHRleHQgaGFzIG5vdCBjaGFuZ2VkIHdoaWxlIHdlIHdlcmUgbG9hZGluZ1xuICAgICAgICAgICAgICAgIC8vIHRoZSBuZXh0IHJlc3VsdHMsIG90aGVyd2lzZSB3ZSdkIGludGVycnVwdCB0aGUgdXNlci5cbiAgICAgICAgICAgICAgICAvLyBUaHJvdyBhd2F5IHRoZSByZXN1bHRzIGluIGNhc2UgdGhlIHNlYXJjaCB0ZXh0IGhhcyBjaGFuZ2VkLlxuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5zZWFyY2hUZXh0ID09PSBzZWFyY2hUZXh0KSB7XG4gICAgICAgICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzZXROZXh0Q29tbWFuZHMnLFxuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkOiB7IHJlc3VsdHM6IG5leHRDb21tYW5kcyB9LFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2hha2UoKTtcbiAgICAgICAgICB9KSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0Jykge1xuICAgICAgICAgIC8vIGdvIGxlZnQgaW4gc3RhY2tcbiAgICAgICAgICBjb25zdCBwcmV2Q29tbWFuZCA9IGxhc3Qoc3RhdGUuc3RhY2spO1xuXG4gICAgICAgICAgLy8gZG8gbm90aGluZyB3aGVuIHdlIGNhbid0IGdvIGxlZnQgYW55bW9yZVxuICAgICAgICAgIGlmICghcHJldkNvbW1hbmQpIHJldHVybjtcblxuICAgICAgICAgIC8vIHByZXZlbnQgY3Vyc29yIGZyb20ganVtcGluZyBhIGNoYXIgdG8gdGhlIGxlZnQgaW4gdGV4dCBpbnB1dFxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAnc2V0UHJldkNvbW1hbmRzJyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgICAgc2VhcmNoVGV4dDogcHJldkNvbW1hbmQuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgcmVzdWx0czogcHJldkNvbW1hbmQucmVzdWx0cyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBnZXROZXh0Q29tbWFuZHNGcm9tUGFyZW50LFxuICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXMsXG4gICAgICBzaGFrZSxcbiAgICAgIHN0YXRlLFxuICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IsXG4gICAgXVxuICApO1xuICBjb25zdCBoYW5kbGVLZXlVcCA9IHVzZUNhbGxiYWNrPEtleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+PihcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIC8vIHNldHRpbmcgdGhlIHNlbGVjdGlvbiBjYW4gb25seSBoYXBwZW4gaW4gb25LZXlVcFxuICAgICAgaWYgKHNob3VsZFNlbGVjdEZpZWxkVGV4dC5jdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgIGlucHV0LmZvY3VzKCk7XG4gICAgICAgIGlucHV0LnNlbGVjdCgpO1xuICAgICAgICBzaG91bGRTZWxlY3RGaWVsZFRleHQuY3VycmVudCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQua2V5ICE9PSAnRW50ZXInICYmICFpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQpIHJldHVybiB0cnVlO1xuXG4gICAgICAvLyBVc2VyIGp1c3QgdHJpZ2dlcmVkIHRoZSBzZWFyY2hcbiAgICAgIGlmIChzdGF0ZS5zZWxlY3RlZFJlc3VsdCA9PT0gLTEpIHJldHVybiB0cnVlO1xuXG4gICAgICAvLyBVc2VyIGhhZCBzb21ldGhpbmcgc2VsZWN0ZWQgYW5kIHdhbnRzIHRvIGdvIHRoZXJlXG4gICAgICBleGVjdXRlKHN0YXRlLnJlc3VsdHNbc3RhdGUuc2VsZWN0ZWRSZXN1bHRdLCB7XG4gICAgICAgIG9wZW5Jbk5ld1RhYjogaXNOZXdXaW5kb3dDb21iby5jdXJyZW50LFxuICAgICAgfSk7XG5cbiAgICAgIGlzTmV3V2luZG93Q29tYm8uY3VycmVudCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBbZXhlY3V0ZSwgc3RhdGUucmVzdWx0cywgc3RhdGUuc2VsZWN0ZWRSZXN1bHRdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUNhbGxiYWNrPENoYW5nZUV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50Pj4oXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBzZWFyY2hUZXh0ID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgICAgaWYgKHNlYXJjaFRleHQudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdyZXNldCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnc2VhcmNoVGV4dCcsIHBheWxvYWQ6IHNlYXJjaFRleHQgfSk7XG5cbiAgICAgIC8vIEEgc2VhcmNoIHZpYSBuZXR3b3JrIGlzIG9ubHkgdHJpZ2dlcmVkIHdoZW4gdGhlcmVcbiAgICAgIC8vIGFyZSBtb3JlIHRoYW4gdGhyZWUgY2hhcmFjdGVycy4gU28gbm8gZmFsc2UgbG9hZGluZ1xuICAgICAgLy8gaW5kaWNhdGlvbiBpcyBnaXZlbi5cbiAgICAgIGlmIChzZWFyY2hUZXh0LnRyaW0oKS5sZW5ndGggPiAzKSB7XG4gICAgICAgIHNldElzTG9hZGluZygpO1xuICAgICAgfVxuXG4gICAgICBzZWFyY2hGcm9tUGFyZW50KHNlYXJjaFRleHQpLnRoZW4oXG4gICAgICAgIChhc3luY1Jlc3VsdHM6IENvbW1hbmRbXSkgPT4ge1xuICAgICAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yKCk7XG4gICAgICAgICAgdW5zZXRJc0xvYWRpbmcoKTtcblxuICAgICAgICAgIGNvbnN0IGZ1c2UgPSBuZXcgRnVzZShhc3luY1Jlc3VsdHMsIHtcbiAgICAgICAgICAgIGtleXM6IFtcbiAgICAgICAgICAgICAgeyBuYW1lOiAndGV4dCcsIHdlaWdodDogMC42IH0sXG4gICAgICAgICAgICAgIHsgbmFtZTogJ2tleXdvcmRzJywgd2VpZ2h0OiAwLjQgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBtaW5NYXRjaENoYXJMZW5ndGg6IDIsXG4gICAgICAgICAgICBpbmNsdWRlU2NvcmU6IHRydWUsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCBzZWFyY2hSZXN1bHRzID0gZnVzZVxuICAgICAgICAgICAgLnNlYXJjaChzZWFyY2hUZXh0KVxuICAgICAgICAgICAgLy8gRmlsdGVyIG91dCByZXN1bHRzIHdpdGggYSBtYXRjaGluZyBzY29yZSBvdmVyIDAuNzVcbiAgICAgICAgICAgIC5maWx0ZXIoKHJlc3VsdCkgPT4gKHJlc3VsdC5zY29yZSA/IHJlc3VsdC5zY29yZSA8IDAuNzUgOiBmYWxzZSkpXG4gICAgICAgICAgICAvLyBLZWVwIGEgbWF4aW1hbCBvZiA5IHJlc3VsdHNcbiAgICAgICAgICAgIC5zbGljZSgwLCA5KTtcblxuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdzZXRTZWFyY2hUZXh0UmVzdWx0cycsXG4gICAgICAgICAgICBwYXlsb2FkOiBzZWFyY2hSZXN1bHRzLm1hcCgocmVzdWx0KSA9PiByZXN1bHQuaXRlbSksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICB1bnNldElzTG9hZGluZygpO1xuICAgICAgICAgIHNldEhhc05ldHdvcmtFcnJvcigpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0sXG4gICAgW1xuICAgICAgc2VhcmNoRnJvbVBhcmVudCxcbiAgICAgIHNldEhhc05ldHdvcmtFcnJvcixcbiAgICAgIHNldElzTG9hZGluZyxcbiAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yLFxuICAgICAgdW5zZXRJc0xvYWRpbmcsXG4gICAgXVxuICApO1xuICBjb25zdCBoYW5kbGVDb250YWluZXJDbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdyZXNldFJlc3VsdHNXaGVuQ2xvc2luZycgfSk7XG4gICAgb25DbG9zZUZyb21QYXJlbnQoKTtcbiAgfSwgW29uQ2xvc2VGcm9tUGFyZW50XSk7XG5cbiAgY29uc3QgY3JlYXRlQ29tbWFuZE1vdXNlRW50ZXJIYW5kbGVyID0gdXNlQ2FsbGJhY2s8XG4gICAgKGluZGV4OiBudW1iZXIpID0+IE1vdXNlRXZlbnRIYW5kbGVyPEhUTUxEaXZFbGVtZW50PlxuICA+KFxuICAgIChpbmRleCkgPT4gKCkgPT4ge1xuICAgICAgLy8gSW4gY2FzZSB0aGUgY3Vyc29yIGhhcHBlbmVkIHRvIGJlIGluIGEgbG9jYXRpb24gd2hlcmUgYVxuICAgICAgLy8gcmVzdWx0IHdvdWxkIGFwcGVhciwgaXQgd291bGQgdHJpZ2dlciBvbk1vdXNlRW50ZXIgYW5kIHRoZVxuICAgICAgLy8gcmVzdWx0IHdvdWxkIGJlIHNlbGVjdGVkIGltbWVkaWF0ZWx5LiBUaGlzIGlzIG5vdCBzb21ldGhpbmdcbiAgICAgIC8vIGEgdXNlciB3b3VsZCBleHBlY3QsIGhlbmNlIHdlIHByZXZlbnQgaXQgZnJvbSBoYXBwZW5pbmcuXG4gICAgICAvLyBUaGUgdXNlciBoYXMgdG8gbW92ZSB0aGUgY3Vyc29yIHRvIGFuIG9wdGlvbiBleHBsaWNpdGx5IGZvclxuICAgICAgLy8gaXQgdG8gYmVjb21lIGFjdGl2ZS4gSG93ZXZlciwgdGhlIHVzZXIgY2FuIGFsd2F5cyBjbGljayBhbmRcbiAgICAgIC8vIHRoYXQgYWN0aW9uIHdpbGwgYmUgdHJpZ2dlcmVkLlxuICAgICAgaWYgKHNraXBOZXh0U2VsZWN0aW9uLmN1cnJlbnQpIHtcbiAgICAgICAgc2tpcE5leHRTZWxlY3Rpb24uY3VycmVudCA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIHNldHMgdGhlIHNlbGVjdGVkIHJlc3VsdCwgbWFpbmx5IGZvciB0aGUgaG92ZXIgZWZmZWN0XG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdzZWxlY3RlZFJlc3VsdCcsIHBheWxvYWQ6IGluZGV4IH0pO1xuICAgIH0sXG4gICAgW11cbiAgKTtcbiAgY29uc3QgY3JlYXRlQ29tbWFuZENsaWNrSGFuZGxlciA9IHVzZUNhbGxiYWNrPFxuICAgIChjb21tYW5kOiBDb21tYW5kKSA9PiBNb3VzZUV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD5cbiAgPihcbiAgICAoY29tbWFuZCkgPT4gKGV2ZW50KSA9PiB7XG4gICAgICBleGVjdXRlKGNvbW1hbmQsIHtcbiAgICAgICAgb3BlbkluTmV3VGFiOiBoYXNOZXdXaW5kb3dNb2RpZmllcihldmVudCksXG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtleGVjdXRlXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPEJ1dGxlckNvbnRhaW5lclxuICAgICAgb25DbGljaz17aGFuZGxlQ29udGFpbmVyQ2xpY2t9XG4gICAgICBkYXRhLXRlc3RpZD1cInF1aWNrLWFjY2Vzc1wiXG4gICAgICB0YWJJbmRleD17LTF9XG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICByZWY9e3NlYXJjaENvbnRhaW5lclJlZn1cbiAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yU3VyZmFjZX07XG4gICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICR7Y3VzdG9tUHJvcGVydGllcy5ib3JkZXJSYWRpdXM0fTtcbiAgICAgICAgICBtaW4taGVpZ2h0OiA0MHB4O1xuXG4gICAgICAgICAgLyogb25lIG1vcmUgdGhhbiBhcHAtYmFyICgyMDAwMCkgYW5kIG9uZSBtb3JlIHRoYW4gdGhlIG92ZXJsYXkgKDIwMDAxKSAqL1xuICAgICAgICAgIHotaW5kZXg6IDIwMDAyO1xuICAgICAgICAgIHdpZHRoOiA0MDBweDtcbiAgICAgICAgICBtYXJnaW46IDQwcHggYXV0bztcbiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogMCAxMHB4IDMwcHggLThweCByZ2JhKDAsIDAsIDAsIDAuNzUpO1xuICAgICAgICAgIC1tb3otYm94LXNoYWRvdzogMCAxMHB4IDMwcHggLThweCByZ2JhKDAsIDAsIDAsIDAuNzUpO1xuICAgICAgICAgIGJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogJHtzdGF0ZS5oYXNOZXR3b3JrRXJyb3JcbiAgICAgICAgICAgID8gJzAnXG4gICAgICAgICAgICA6IGN1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICBgfVxuICAgICAgICBvbkNsaWNrPXsoZXZlbnQpID0+IHtcbiAgICAgICAgICAvLyBBdm9pZCBjbG9zaW5nIHdoZW4gdGhlIHNlYXJjaENvbnRhaW5lciBpdHNlbGYgaXMgY2xpY2tlZFxuICAgICAgICAgIC8vIElmIHdlIGRvbid0IGRvIHRoaXMsIHRoZW4gdGhlIG92ZXJsYXkgd2lsbCBjbG9zZSB3aGVuIGUuZy5cbiAgICAgICAgICAvLyB0aGUgc2VhcmNoIGlucHV0IGlzIGNsaWNrZWQuXG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBgfVxuICAgICAgICA+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICBodG1sRm9yPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6ICR7Y3VzdG9tUHJvcGVydGllcy5zcGFjaW5nTX07XG4gICAgICAgICAgICAgIG1hcmdpbi10b3A6ICR7Y3VzdG9tUHJvcGVydGllcy5zcGFjaW5nU307XG4gICAgICAgICAgICBgfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxTZWFyY2hJY29uIGNvbG9yPVwibmV1dHJhbDYwXCIgLz5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgaWQ9XCJxdWljay1hY2Nlc3Mtc2VhcmNoLWlucHV0XCJcbiAgICAgICAgICAgIHJlZj17c2VhcmNoSW5wdXRSZWZ9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj17aW50bC5mb3JtYXRNZXNzYWdlKG1lc3NhZ2VzLmlucHV0UGxhY2Vob2Rlcil9XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICAgICAgb3V0bGluZTogMDtcbiAgICAgICAgICAgICAgZm9udC1zaXplOiAyMnB4O1xuICAgICAgICAgICAgICBmb250LXdlaWdodDogMzAwO1xuICAgICAgICAgICAgICBwYWRkaW5nOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019ICR7Y3VzdG9tUHJvcGVydGllcy5zcGFjaW5nTX1cbiAgICAgICAgICAgICAgICAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9ICR7Y3VzdG9tUHJvcGVydGllcy5zcGFjaW5nU307XG4gICAgICAgICAgICAgICY6OnBsYWNlaG9sZGVyIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yTmV1dHJhbDYwfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgYH1cbiAgICAgICAgICAgIHZhbHVlPXtzdGF0ZS5zZWFyY2hUZXh0fVxuICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgIG9uS2V5RG93bj17aGFuZGxlS2V5RG93bn1cbiAgICAgICAgICAgIG9uS2V5VXA9e2hhbmRsZUtleVVwfVxuICAgICAgICAgICAgYXV0b0ZvY3VzPXt0cnVlfVxuICAgICAgICAgICAgYXV0b0NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICB7c3RhdGUuaXNMb2FkaW5nICYmIChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6ICR7Y3VzdG9tUHJvcGVydGllcy5zcGFjaW5nU307XG4gICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8TG9hZGluZ1NwaW5uZXIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICBpZiAoc3RhdGUuaGFzTmV0d29ya0Vycm9yKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgICAgICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JFcnJvcn07XG4gICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICAgICAgICAgICAgY29sb3I6ICR7Y3VzdG9tUHJvcGVydGllcy5jb2xvclN1cmZhY2V9O1xuICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAke2N1c3RvbVByb3BlcnRpZXMuZm9udFNpemVTbWFsbH07XG4gICAgICAgICAgICAgICAgICBwYWRkaW5nOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1hzfTtcbiAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2Ugey4uLm1lc3NhZ2VzLm9mZmxpbmV9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChzdGF0ZS5yZXN1bHRzLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5zZWFyY2hUZXh0LnRyaW0oKS5sZW5ndGggPiAwKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgICAgICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JOZXV0cmFsfTtcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JTb2xpZH07XG4gICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAke2N1c3RvbVByb3BlcnRpZXMuZm9udFNpemVTbWFsbH07XG4gICAgICAgICAgICAgICAgICBwYWRkaW5nOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1hzfTtcbiAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2Ugey4uLm1lc3NhZ2VzLm5vUmVzdWx0c30gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuIHN0YXRlLnJlc3VsdHMubWFwKChjb21tYW5kLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPEJ1dGxlckNvbW1hbmRcbiAgICAgICAgICAgICAga2V5PXtjb21tYW5kLmlkfVxuICAgICAgICAgICAgICBjb21tYW5kPXtjb21tYW5kfVxuICAgICAgICAgICAgICBpc1NlbGVjdGVkPXtzdGF0ZS5zZWxlY3RlZFJlc3VsdCA9PT0gaW5kZXh9XG4gICAgICAgICAgICAgIG9uTW91c2VFbnRlcj17Y3JlYXRlQ29tbWFuZE1vdXNlRW50ZXJIYW5kbGVyKGluZGV4KX1cbiAgICAgICAgICAgICAgb25DbGljaz17Y3JlYXRlQ29tbWFuZENsaWNrSGFuZGxlcihjb21tYW5kKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSk7XG4gICAgICAgIH0pKCl9XG4gICAgICA8L2Rpdj5cbiAgICA8L0J1dGxlckNvbnRhaW5lcj5cbiAgKTtcbn07XG5CdXRsZXIuZGlzcGxheU5hbWUgPSAnQnV0bGVyJztcblxuY29uc3QgQnV0bGVyV2l0aEFuaW1hdGlvbiA9IChwcm9wczogT21pdDxQcm9wcywgJ2NsYXNzTmFtZVNoYWtlQW5pbWF0aW9uJz4pID0+IChcbiAgPENsYXNzTmFtZXM+XG4gICAgeyh7IGNzcyB9KSA9PiAoXG4gICAgICA8QnV0bGVyXG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgY2xhc3NOYW1lU2hha2VBbmltYXRpb249e2Nzc2BcbiAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IDAuNDVzO1xuICAgICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGJvdGg7XG4gICAgICAgICAgYW5pbWF0aW9uLW5hbWU6ICR7c2hha2VBbmltYXRpb259O1xuICAgICAgICBgfVxuICAgICAgLz5cbiAgICApfVxuICA8L0NsYXNzTmFtZXM+XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBCdXRsZXJXaXRoQW5pbWF0aW9uO1xuIl19 */"),
988
- onClick: function onClick(event) {
989
- // Avoid closing when the searchContainer itself is clicked
990
- // If we don't do this, then the overlay will close when e.g.
991
- // the search input is clicked.
992
- event.stopPropagation();
993
- event.preventDefault();
994
- },
995
- children: [jsxRuntime.jsxs("div", {
996
- css: _ref,
997
- children: [jsxRuntime.jsx("label", {
998
- htmlFor: "quick-access-search-input",
999
- css: /*#__PURE__*/react.css("align-self:center;padding-left:", designSystem.customProperties.spacingM, ";margin-top:", designSystem.customProperties.spacingS, ";" + (process.env.NODE_ENV === "production" ? "" : ";label:Butler;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBdW5Cb0IiLCJmaWxlIjoiYnV0bGVyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgQ29tbWFuZCxcbiAgU2VhcmNoVGV4dCxcbiAgU2VsZWN0ZWRSZXN1bHQsXG4gIFN0YWNrLFxuICBIaXN0b3J5RW50cnksXG59IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtcbiAgS2V5Ym9hcmRFdmVudEhhbmRsZXIsXG4gIENoYW5nZUV2ZW50SGFuZGxlcixcbiAgS2V5Ym9hcmRFdmVudCxcbiAgTW91c2VFdmVudEhhbmRsZXIsXG4gIE1vdXNlRXZlbnQsXG4gIHVzZVJlZHVjZXIsXG4gIHVzZVJlZixcbiAgdXNlQ2FsbGJhY2ssXG59IGZyb20gJ3JlYWN0JztcbmltcG9ydCBGdXNlIGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IHsgRm9ybWF0dGVkTWVzc2FnZSwgdXNlSW50bCB9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IGxhc3QgZnJvbSAnbG9kYXNoL2xhc3QnO1xuaW1wb3J0IHsgY3NzLCBrZXlmcmFtZXMsIENsYXNzTmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgTG9hZGluZ1NwaW5uZXIgZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvbG9hZGluZy1zcGlubmVyJztcbmltcG9ydCB7IFNlYXJjaEljb24gfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9pY29ucyc7XG5pbXBvcnQgeyBjdXN0b21Qcm9wZXJ0aWVzIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgQnV0bGVyQ29tbWFuZCBmcm9tICcuLi9idXRsZXItY29tbWFuZCc7XG5pbXBvcnQgQnV0bGVyQ29udGFpbmVyIGZyb20gJy4uL2J1dGxlci1jb250YWluZXInO1xuaW1wb3J0IG1lc3NhZ2VzIGZyb20gJy4uL21lc3NhZ2VzJztcblxuY29uc3QgaXNTZWxlY3RBbGxDb21ibyA9IChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cbiAgZXZlbnQua2V5ID09PSAnYScgJiZcbiAgZXZlbnQubWV0YUtleSAmJlxuICAhZXZlbnQuY3RybEtleSAmJlxuICAhZXZlbnQuYWx0S2V5ICYmXG4gICFldmVudC5zaGlmdEtleTtcblxuY29uc3QgaXNDbG9zZUNvbWJvID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PlxuICBldmVudC5rZXkgPT09ICdFc2NhcGUnICYmXG4gICFldmVudC5tZXRhS2V5ICYmXG4gICFldmVudC5jdHJsS2V5ICYmXG4gICFldmVudC5hbHRLZXkgJiZcbiAgIWV2ZW50LnNoaWZ0S2V5O1xuXG5jb25zdCBnZXRQbGF0Zm9ybSA9ICgpID0+IHtcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdXaW4nKSkgcmV0dXJuICd3aW5kb3dzJztcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdNYWMnKSkgcmV0dXJuICdtYWNvcyc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnWDExJykpIHJldHVybiAndW5peCc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnTGludXgnKSkgcmV0dXJuICdsaW51eCc7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBoYXNOZXdXaW5kb3dNb2RpZmllciA9IChcbiAgZXZlbnQ6IEtleWJvYXJkRXZlbnQ8SFRNTEVsZW1lbnQ+IHwgTW91c2VFdmVudDxIVE1MRWxlbWVudD5cbikgPT4ge1xuICBjb25zdCBwbGF0Zm9ybSA9IGdldFBsYXRmb3JtKCk7XG4gIHN3aXRjaCAocGxhdGZvcm0pIHtcbiAgICBjYXNlICdtYWNvcyc6XG4gICAgICByZXR1cm4gZXZlbnQubWV0YUtleTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGV2ZW50LmN0cmxLZXk7XG4gIH1cbn07XG5cbmNvbnN0IHNoYWtlQW5pbWF0aW9uID0ga2V5ZnJhbWVzYFxuICBmcm9tLFxuICB0byB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcbiAgfVxuXG4gIDE0JSxcbiAgNDIlLFxuICA3MCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTNweCwgMCwgMCk7XG4gIH1cblxuICAyOCUsXG4gIDU2JSxcbiAgODQlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDNweCwgMCwgMCk7XG4gIH1cbmA7XG5cbnR5cGUgU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogYm9vbGVhbjtcbiAgaXNMb2FkaW5nOiBib29sZWFuO1xuICBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0O1xuICBzZWxlY3RlZFJlc3VsdDogU2VsZWN0ZWRSZXN1bHQ7XG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IGJvb2xlYW47XG4gIHJlc3VsdHM6IENvbW1hbmRbXTtcbiAgc3RhY2s6IFN0YWNrW107XG59O1xudHlwZSBBY3Rpb24gPVxuICB8IHsgdHlwZTogJ25ldHdvcmtFcnJvcic7IHBheWxvYWQ6IGJvb2xlYW4gfVxuICB8IHsgdHlwZTogJ2xvYWRpbmcnOyBwYXlsb2FkOiBib29sZWFuIH1cbiAgfCB7IHR5cGU6ICdzZWxlY3RlZFJlc3VsdCc7IHBheWxvYWQ6IG51bWJlciB9XG4gIHwgeyB0eXBlOiAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH1cbiAgfCB7IHR5cGU6ICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfVxuICB8IHtcbiAgICAgIHR5cGU6ICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JztcbiAgICAgIHBheWxvYWQ6IHsgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDsgcmVzdWx0czogQ29tbWFuZFtdIH07XG4gICAgfVxuICB8IHsgdHlwZTogJ3NldE5leHRDb21tYW5kcyc7IHBheWxvYWQ6IHsgcmVzdWx0czogQ29tbWFuZFtdIH0gfVxuICB8IHtcbiAgICAgIHR5cGU6ICdzZXRQcmV2Q29tbWFuZHMnO1xuICAgICAgcGF5bG9hZDogeyBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0OyByZXN1bHRzOiBDb21tYW5kW10gfTtcbiAgICB9XG4gIHwgeyB0eXBlOiAnc2VhcmNoVGV4dCc7IHBheWxvYWQ6IHN0cmluZyB9XG4gIHwgeyB0eXBlOiAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOyBwYXlsb2FkOiBDb21tYW5kW10gfVxuICB8IHsgdHlwZTogJ3Jlc2V0U2VhcmNoVGV4dCcgfVxuICB8IHsgdHlwZTogJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJyB9XG4gIHwgeyB0eXBlOiAncmVzZXQnIH07XG5jb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogZmFsc2UsXG4gIGlzTG9hZGluZzogZmFsc2UsXG4gIHNlYXJjaFRleHQ6ICcnLFxuICBzZWxlY3RlZFJlc3VsdDogLTEsXG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IHRydWUsXG4gIHJlc3VsdHM6IFtdLFxuICBzdGFjazogW10sXG59O1xuY29uc3QgcmVkdWNlciA9IChzdGF0ZTogU3RhdGUgPSBpbml0aWFsU3RhdGUsIGFjdGlvbjogQWN0aW9uKTogU3RhdGUgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnbmV0d29ya0Vycm9yJzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBoYXNOZXR3b3JrRXJyb3I6IGFjdGlvbi5wYXlsb2FkIH07XG4gICAgY2FzZSAnbG9hZGluZyc6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgaXNMb2FkaW5nOiBhY3Rpb24ucGF5bG9hZCB9O1xuICAgIGNhc2UgJ3NlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQgfTtcbiAgICBjYXNlICdpbmNyZW1lbnRTZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6XG4gICAgICAgICAgc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IHN0YXRlLnJlc3VsdHMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0ICsgMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ2RlY3JlbWVudFNlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDpcbiAgICAgICAgICBzdGF0ZS5zZWxlY3RlZFJlc3VsdCA8IDFcbiAgICAgICAgICAgID8gc3RhdGUucmVzdWx0cy5sZW5ndGggLSAxXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0IC0gMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ3BpY2tDb21tYW5kRnJvbUhpc3RvcnknOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OiAwLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZC5zZWFyY2hUZXh0LFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZC5yZXN1bHRzLFxuICAgICAgICBzdGFjazogW10sXG4gICAgICAgIC8vIFRoZSBoaXN0b3J5IGRvZXMgbm90IGdldCBjaGFuZ2VkIGhlcmUsIGl0IHdpbGwgYmUgY2hhbmdlZCBhbG9uZ1xuICAgICAgICAvLyB3aXRoIHRoZSByZWd1bGFyIGZsb3cuXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldE5leHRDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc3RhY2s6IFtcbiAgICAgICAgICAuLi5zdGF0ZS5zdGFjayxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZWFyY2hUZXh0OiBzdGF0ZS5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgcmVzdWx0czogc3RhdGUucmVzdWx0cyxcbiAgICAgICAgICAgIHNlbGVjdGVkUmVzdWx0OiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogMCxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLnJlc3VsdHMsXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldFByZXZDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQuc2VhcmNoVGV4dCxcbiAgICAgICAgcmVzdWx0czogYWN0aW9uLnBheWxvYWQucmVzdWx0cyxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IDAsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgICAvLyBvbWl0IGxhc3QgaXRlbVxuICAgICAgICBzdGFjazogc3RhdGUuc3RhY2suc2xpY2UoMCwgLTEpLFxuICAgICAgfTtcbiAgICBjYXNlICdzZWFyY2hUZXh0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgLy8gY2xlYXIgbmV0d29yayBlcnJvciB3aGVuIHNlYXJjaCB0ZXh0IGlzIGNsZWFyZWQsIHNvIHRoYXQgdXNlcnNcbiAgICAgICAgLy8gYXJlIHRlbXB0ZWQgdG8gcmV0cnlcbiAgICAgICAgaGFzTmV0d29ya0Vycm9yOiBhY3Rpb24ucGF5bG9hZC5sZW5ndGggPiAwICYmIHN0YXRlLmhhc05ldHdvcmtFcnJvcixcbiAgICAgIH07XG4gICAgY2FzZSAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQubGVuZ3RoID4gMCA/IDAgOiAtMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogdHJ1ZSxcbiAgICAgICAgc3RhY2s6IFtdLFxuICAgICAgfTtcbiAgICBjYXNlICdyZXNldFNlYXJjaFRleHQnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlYXJjaFRleHQ6ICcnLCByZXN1bHRzOiBbXSwgc2VsZWN0ZWRSZXN1bHQ6IC0xIH07XG4gICAgY2FzZSAncmVzZXRSZXN1bHRzV2hlbkNsb3NpbmcnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlbGVjdGVkUmVzdWx0OiAtMSwgZW5hYmxlSGlzdG9yeTogdHJ1ZSB9O1xuICAgIGNhc2UgJ3Jlc2V0JzpcbiAgICAgIHJldHVybiBpbml0aWFsU3RhdGU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufTtcblxudHlwZSBQcm9wcyA9IHtcbiAgaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdO1xuICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlOiAoaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdKSA9PiB2b2lkO1xuICBzZWFyY2g6IChzZWFyY2hUZXh0OiBTZWFyY2hUZXh0KSA9PiBQcm9taXNlPENvbW1hbmRbXT47XG4gIGdldE5leHRDb21tYW5kczogKGNvbW1hbmQ6IENvbW1hbmQpID0+IFByb21pc2U8Q29tbWFuZFtdPjtcbiAgZXhlY3V0ZUNvbW1hbmQ6IChjb21tYW5kOiBDb21tYW5kLCBtZXRhOiB7IG9wZW5Jbk5ld1RhYjogYm9vbGVhbiB9KSA9PiB2b2lkO1xuICBvbkNsb3NlOiAoKSA9PiB2b2lkO1xuICBjbGFzc05hbWVTaGFrZUFuaW1hdGlvbjogc3RyaW5nO1xufTtcbmNvbnN0IEJ1dGxlciA9IChwcm9wczogUHJvcHMpID0+IHtcbiAgY29uc3QgaW50bCA9IHVzZUludGwoKTtcbiAgY29uc3QgW3N0YXRlLCBkaXNwYXRjaF0gPSB1c2VSZWR1Y2VyPFxuICAgIChwcmV2U3RhdGU6IFN0YXRlLCBhY3Rpb246IEFjdGlvbikgPT4gU3RhdGVcbiAgPihyZWR1Y2VyLCBpbml0aWFsU3RhdGUpO1xuXG4gIGNvbnN0IHNob3VsZFNlbGVjdEZpZWxkVGV4dCA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IGlzTmV3V2luZG93Q29tYm8gPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBza2lwTmV4dFNlbGVjdGlvbiA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IHNlYXJjaENvbnRhaW5lclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IHNlYXJjaElucHV0UmVmID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KG51bGwpO1xuXG4gIGNvbnN0IHNldEhhc05ldHdvcmtFcnJvciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICduZXR3b3JrRXJyb3InLCBwYXlsb2FkOiB0cnVlIH0pO1xuICB9LCBbXSk7XG4gIGNvbnN0IHVuc2V0SGFzTmV0d29ya0Vycm9yID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ25ldHdvcmtFcnJvcicsIHBheWxvYWQ6IGZhbHNlIH0pO1xuICB9LCBbXSk7XG4gIGNvbnN0IHNldElzTG9hZGluZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdsb2FkaW5nJywgcGF5bG9hZDogdHJ1ZSB9KTtcbiAgfSwgW10pO1xuICBjb25zdCB1bnNldElzTG9hZGluZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdsb2FkaW5nJywgcGF5bG9hZDogZmFsc2UgfSk7XG4gIH0sIFtdKTtcblxuICAvLyBEZXN0cnVjdHVyZSBmdW5jdGlvbnMgZnJvbSBwcm9wcyB0byByZWZlcmVuY2UgdGhlbSBpbiB0aGUgaG9vayBkZXBlbmRlbmN5IGxpc3RcbiAgY29uc3Qge1xuICAgIHNlYXJjaDogc2VhcmNoRnJvbVBhcmVudCxcbiAgICBvbkNsb3NlOiBvbkNsb3NlRnJvbVBhcmVudCxcbiAgICBleGVjdXRlQ29tbWFuZDogZXhlY3V0ZUNvbW1hbmRGcm9tUGFyZW50LFxuICAgIG9uSGlzdG9yeUVudHJpZXNDaGFuZ2U6IG9uSGlzdG9yeUVudHJpZXNDaGFuZ2VGcm9tUGFyZW50LFxuICAgIGdldE5leHRDb21tYW5kczogZ2V0TmV4dENvbW1hbmRzRnJvbVBhcmVudCxcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHNoYWtlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChzZWFyY2hDb250YWluZXJSZWYuY3VycmVudCkge1xuICAgICAgc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQuY2xhc3NMaXN0LnJlbW92ZShcbiAgICAgICAgcHJvcHMuY2xhc3NOYW1lU2hha2VBbmltYXRpb25cbiAgICAgICk7XG4gICAgICAvLyAtPiB0cmlnZ2VyaW5nIHJlZmxvd1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXZvaWRcbiAgICAgIHZvaWQgc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQub2Zmc2V0V2lkdGg7XG4gICAgICBzZWFyY2hDb250YWluZXJSZWYuY3VycmVudC5jbGFzc0xpc3QuYWRkKHByb3BzLmNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uKTtcbiAgICB9XG4gIH0sIFtwcm9wcy5jbGFzc05hbWVTaGFrZUFuaW1hdGlvbl0pO1xuXG4gIGNvbnN0IGV4ZWN1dGUgPSB1c2VDYWxsYmFjayhcbiAgICAoY29tbWFuZCwgbWV0YSkgPT4ge1xuICAgICAgLy8gT25seSBtYWluIGVudHJpZXMgZ2V0IGFkZGVkIHRvIGhpc3RvcnksIHNvIHdoZW4gYSBzdWJjb21tYW5kIGlzIGV4ZWN1dGVkLFxuICAgICAgLy8gd2UgYWRkIHRoZSBtYWluIGNvbW1hbmQgb2YgaXQgdG8gdGhlIGhpc3RvcnkgKHRoZSB0b3AtbGV2ZWwgY29tbWFuZCkuXG4gICAgICAvL1xuICAgICAgLy8gVGhlIGtleSB0byBpZGVudGlmeSBoaXN0b3J5IGVudHJpZXMgYnkgaXMgYWx3YXlzIHRoZSBzZWFyY2hUZXh0XG4gICAgICAvLyBUaGVyZSB3aWxsIG5ldmVyIGJlIHR3byBoaXN0b3J5IGVudHJpZXMgd2l0aCB0aGUgc2FtZSBzZWFyY2hUZXh0XG4gICAgICBjb25zdCBlbnRyeSA9XG4gICAgICAgIHN0YXRlLnN0YWNrLmxlbmd0aCA9PT0gMFxuICAgICAgICAgID8gLy8gVGhlIHN0YWNrIGlzIGVtcHR5LCBzbyB3ZSBhcmUgZXhlY3V0aW5nIGEgdG9wLWxldmVsIGNvbW1hbmRcbiAgICAgICAgICAgIHsgc2VhcmNoVGV4dDogc3RhdGUuc2VhcmNoVGV4dCwgcmVzdWx0czogc3RhdGUucmVzdWx0cyB9XG4gICAgICAgICAgOiAvLyBXZSBhcmUgZXhlY3V0aW5nIGEgc3ViY29tbWFuZCwgc28gd2UgZ2V0IHRoZSB0b3AtbGV2ZWwgY29tbWFuZCBmb3IgaXQsXG4gICAgICAgICAgICAvLyB3aGljaCBpcyBhdCB0aGUgYm90dG9tIG9mIHRoZSBzdGFjay5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc2VhcmNoVGV4dDogc3RhdGUuc3RhY2tbMF0uc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgcmVzdWx0czogc3RhdGUuc3RhY2tbMF0ucmVzdWx0cyxcbiAgICAgICAgICAgIH07XG5cbiAgICAgIC8vIEFkZCB0aGUgZW50cnkgdG8gdGhlIGhpc3RvcnksIHdoaWxlIGV4Y2x1ZGluZyBhbnkgZWFybGllciBoaXN0b3J5IGVudHJ5XG4gICAgICAvLyB3aXRoIHRoZSBzYW1lIHNlYXJjaCB0ZXh0LiBUaGlzIGVmZmVjdGl2ZWx5IFwibW92ZXNcIiB0aGF0IGVudHJ5IHRvIHRoZVxuICAgICAgLy8gdG9wIG9mIHRoZSBoaXN0b3J5ICh3aXRoIHRoZSBtb3N0IHJlY2VudCByZXN1bHRzKSwgb3IgYXBwZW5kcyBhIG5ldyBlbnRyeVxuICAgICAgLy8gd2hlbiBpdCBkaWRuJ3QgZXhpc3QgYmVmb3JlLlxuICAgICAgb25IaXN0b3J5RW50cmllc0NoYW5nZUZyb21QYXJlbnQoW1xuICAgICAgICAuLi5wcm9wcy5oaXN0b3J5RW50cmllcy5maWx0ZXIoXG4gICAgICAgICAgKGNvbW1hbmQpID0+IGNvbW1hbmQuc2VhcmNoVGV4dCAhPT0gZW50cnkuc2VhcmNoVGV4dFxuICAgICAgICApLFxuICAgICAgICBlbnRyeSxcbiAgICAgIF0pO1xuXG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdyZXNldFNlYXJjaFRleHQnIH0pO1xuXG4gICAgICBvbkNsb3NlRnJvbVBhcmVudCgpO1xuXG4gICAgICBleGVjdXRlQ29tbWFuZEZyb21QYXJlbnQoY29tbWFuZCwgbWV0YSk7XG4gICAgfSxcbiAgICBbXG4gICAgICBleGVjdXRlQ29tbWFuZEZyb21QYXJlbnQsXG4gICAgICBvbkNsb3NlRnJvbVBhcmVudCxcbiAgICAgIG9uSGlzdG9yeUVudHJpZXNDaGFuZ2VGcm9tUGFyZW50LFxuICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXMsXG4gICAgICBzdGF0ZS5yZXN1bHRzLFxuICAgICAgc3RhdGUuc2VhcmNoVGV4dCxcbiAgICAgIHN0YXRlLnN0YWNrLFxuICAgIF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IHVzZUNhbGxiYWNrPEtleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+PihcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIC8vIFByZXZlbnRpbmcgY3Vyc29yIGp1bXBzIGNhbiBvbmx5IGhhcHBlbiBpbiBvbktleURvd24sIGJ1dCBub3QgaW4gb25LZXlVcFxuICAgICAgZXZlbnQucGVyc2lzdCgpO1xuXG4gICAgICAvLyBXZSB3YW50IHRvIGtub3cgd2hlbiB0aGUgdXNlciBwcmVzc2VzIGNtZCtlbnRlciAoY21kIGJlaW5nIGEgbWV0YSBrZXkpLlxuICAgICAgLy8gV2UgYXJlIG9ubHkgdG9sZCBhYm91dCB0aGlzIGluIGtleURvd24sIGJ1dCBub3QgaW4ga2V5VXAsIHNvIHdlIG5lZWRcbiAgICAgIC8vIHRvIGhhbmRsZSBpdCBoZXJlXG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInICYmIGhhc05ld1dpbmRvd01vZGlmaWVyKGV2ZW50KSkge1xuICAgICAgICBpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIEF2b2lkIHNlbGVjdGluZyB0aGUgd2hvbGUgcGFnZSB3aGVuIHVzZXIgc2VsZWN0ZXMgZXZlcnl0aGluZyB3aXRoXG4gICAgICAvLyBhIGtleWJvYXJkIHNob3J0Y3V0LiBUaGVyZSBpcyBwcm9iYWJseSBhIGJldHRlciB3YXkgdG8gZG8gdGhpcyB0aG91Z2guXG4gICAgICAvLyBUaGlzIHByZXZlbnRzIHRoZSB3aG9sZSBwYWdlIGZyb20gYmVpbmcgc2VsZWN0ZWQgaW4gY2FzZSB0aGUgdXNlclxuICAgICAgLy8gMSkgb3BlbnMgdGhlIHNlYXJjaCBib3hcbiAgICAgIC8vIDIpIHR5cGVzIGludG8gaXRcbiAgICAgIC8vIDMpIHNlbGVjdHMgYWxsIHRleHQgdXNpbmcgY21kK2FcbiAgICAgIC8vIDQpIGNsb3NlcyB0aGUgc2VhcmNoIGJveCB3aXRoIGVzY1xuICAgICAgLy8gV2l0aG91dCB0aGlzIGhhbmRsaW5nLCB0aGUgd2hvbGUgcGFnZSB3b3VsZCBub3cgYmUgc2VsZWN0ZWRcbiAgICAgIGlmIChpc1NlbGVjdEFsbENvbWJvKGV2ZW50KSkge1xuICAgICAgICAvLyBUaGlzIHN0b3BzIHRoZSBicm93c2VyIGZyb20gc2VsZWN0aW5nIGFueXRoaW5nXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmIChzZWFyY2hJbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgLy8gVGhpcyBzZWxlY3RzIHRoZSB0ZXh0IGluIHRoZSBzZWFyY2ggaW5wdXRcbiAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNldFNlbGVjdGlvblJhbmdlKDAsIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIGF2b2lkIGludGVyZmVyaW5nIHdpdGggb3RoZXIga2V5IGNvbWJpbmF0aW9ucyB1c2luZyBtb2RpZmllciBrZXlzXG4gICAgICBpZiAoZXZlbnQuY3RybEtleSB8fCBldmVudC5hbHRLZXkgfHwgZXZlbnQuc2hpZnRLZXkgfHwgZXZlbnQubWV0YUtleSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKGlzQ2xvc2VDb21ibyhldmVudCkpIHJldHVybjtcblxuICAgICAgLy8gc2tpcCBuZXh0IG1vdXNlRW50ZXIgdG8gYXZvaWQgc2V0dGluZyBzZWxlY3RlZFJlc3VsdCB3aGVuIGN1cnNvciBqdXN0XG4gICAgICAvLyBoYXBwZW5zIHRvIGJlIHdoZXJlIHRoZSByZXN1bHRzIHdpbGwgcG9wIHVwXG4gICAgICBza2lwTmV4dFNlbGVjdGlvbi5jdXJyZW50ID0gdHJ1ZTtcblxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgICAgLy8gcHJldmVudCBjdXJzb3IgZnJvbSBqdW1waW5nIHRvIGVuZCBvZiB0ZXh0IGlucHV0XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ2luY3JlbWVudFNlbGVjdGVkUmVzdWx0JyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICAgIC8vIGJyb3dzZSB0aHJvdWdoIGhpc3RvcnlcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgKHN0YXRlLnNlbGVjdGVkUmVzdWx0IDwgMSAmJiBzdGF0ZS5lbmFibGVIaXN0b3J5KVxuICAgICAgICApIHtcbiAgICAgICAgICBzaG91bGRTZWxlY3RGaWVsZFRleHQuY3VycmVudCA9IHRydWU7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRJbmRleCA9XG4gICAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICA/IC8vIFdoZW4gZ29pbmcgYmFjayB0aGUgZmlyc3Qgc3RlcFxuICAgICAgICAgICAgICAgIC0xXG4gICAgICAgICAgICAgIDogLy8gV2hlbiBnb2luZyBiYWNrIG1vcmUgdGhhbiBvbmUgc3RlcFxuICAgICAgICAgICAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgIChjb21tYW5kKSA9PiBjb21tYW5kLnNlYXJjaFRleHQgPT09IHN0YXRlLnNlYXJjaFRleHRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgIC8vIFBpY2sgdGhlIHByZXZpb3VzIGNvbW1hbmQgZnJvbSB0aGUgaGlzdG9yeVxuICAgICAgICAgIGNvbnN0IHByZXZDb21tYW5kID1cbiAgICAgICAgICAgIHNlbGVjdGVkSW5kZXggPT09IC0xXG4gICAgICAgICAgICAgID8gLy8gcHJldmlvdXMgY29tbWFuZCBvbiB0b3Agb2YgdGhlIGhpc3Rvcnkgd2hlbiBnb2luZyBiYWNrIG9uXG4gICAgICAgICAgICAgICAgLy8gZmlyc3Qgc3RlcFxuICAgICAgICAgICAgICAgIGxhc3QocHJvcHMuaGlzdG9yeUVudHJpZXMpXG4gICAgICAgICAgICAgIDogLy8gcHJldmlvdXMgY29tbWFuZCBpcyBkZWVwZXIgZG93blxuICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlIGhpc3RvcnkgZG9lcyBub3QgZXhpc3QgKG5lZ2F0aXZlIGluZGV4KSwgdGhlblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgaW1wbGljaXRseSByZXR1cm5zIHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzW3NlbGVjdGVkSW5kZXggLSAxXTtcbiAgICAgICAgICAvLyBTa2lwIHdoZW4gbm8gcHJldmlvdXMgZW50cnkgZXhpc3RzIGluIHRoZSBoaXN0b3J5XG4gICAgICAgICAgaWYgKCFwcmV2Q29tbWFuZCkgcmV0dXJuO1xuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgICAgc2VhcmNoVGV4dDogcHJldkNvbW1hbmQuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgcmVzdWx0czogcHJldkNvbW1hbmQucmVzdWx0cyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHByZXZlbnQgY3Vyc29yIGZyb20ganVtcGluZyB0byBiZWdpbm5pbmcgb2YgdGV4dCBpbnB1dFxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0ZS5zZWxlY3RlZFJlc3VsdCA+IC0xKSB7XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0Jykge1xuICAgICAgICAgIGNvbnN0IGNvbW1hbmQgPSBzdGF0ZS5yZXN1bHRzW3N0YXRlLnNlbGVjdGVkUmVzdWx0XTtcbiAgICAgICAgICBjb25zdCBzZWFyY2hUZXh0ID0gc3RhdGUuc2VhcmNoVGV4dDtcbiAgICAgICAgICBjb25zdCBpc0N1cnNvckF0RW5kID1cbiAgICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQgJiZcbiAgICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xuXG4gICAgICAgICAgY29uc3QgaXNFdmVyeXRoaW5nU2VsZWN0ZWQgPVxuICAgICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudCAmJlxuICAgICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydCA9PT0gMCAmJlxuICAgICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xuXG4gICAgICAgICAgLy8gb25seSBhbGxvdyBkaXZpbmcgaW4gd2hlbiBjdXJzb3IgaXMgYXQgZW5kIG9mIGlucHV0IG9yIHdoZW5cbiAgICAgICAgICAvLyB0aGUgY29tcGxldGUgdGV4dCBpcyBzZWxlY3RlZCAod2hlbiBicm93c2luZyB0aHJvdWdoIGhpc3RvcnkpXG4gICAgICAgICAgaWYgKCFpc0N1cnNvckF0RW5kICYmICFpc0V2ZXJ5dGhpbmdTZWxlY3RlZCkgcmV0dXJuO1xuXG4gICAgICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IoKTtcblxuICAgICAgICAgIC8vIE5PVEU6IHNpbmNlIHdlIG5lZWQgdG8gZmV0Y2ggdGhlIFwibmV4dCBjb21tYW5kXCIsIHdoaWNoIGlzIGFuIGFzeW5jIG9wZXJhdGlvbixcbiAgICAgICAgICAvLyB3ZSB1c2UgYSBJSUZFIHRvIHByb2Nlc3MgdGhhdCBhbmQgZXZlbnR1YWxseSB1cGRhdGUgdGhlIHN0YXRlLlxuICAgICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoY29tbWFuZCkge1xuICAgICAgICAgICAgICBjb25zdCBuZXh0Q29tbWFuZHMgPSBhd2FpdCBnZXROZXh0Q29tbWFuZHNGcm9tUGFyZW50KGNvbW1hbmQpO1xuICAgICAgICAgICAgICAvLyBhdm9pZCBtb3ZpbmcgY3Vyc29yIHdoZW4gdGhlcmUgYXJlIHN1Yi1vcHRpb25zXG4gICAgICAgICAgICAgIGlmIChuZXh0Q29tbWFuZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIC8vIEVuc3VyZSB0aGUgc2VhcmNoIHRleHQgaGFzIG5vdCBjaGFuZ2VkIHdoaWxlIHdlIHdlcmUgbG9hZGluZ1xuICAgICAgICAgICAgICAgIC8vIHRoZSBuZXh0IHJlc3VsdHMsIG90aGVyd2lzZSB3ZSdkIGludGVycnVwdCB0aGUgdXNlci5cbiAgICAgICAgICAgICAgICAvLyBUaHJvdyBhd2F5IHRoZSByZXN1bHRzIGluIGNhc2UgdGhlIHNlYXJjaCB0ZXh0IGhhcyBjaGFuZ2VkLlxuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5zZWFyY2hUZXh0ID09PSBzZWFyY2hUZXh0KSB7XG4gICAgICAgICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzZXROZXh0Q29tbWFuZHMnLFxuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkOiB7IHJlc3VsdHM6IG5leHRDb21tYW5kcyB9LFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2hha2UoKTtcbiAgICAgICAgICB9KSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0Jykge1xuICAgICAgICAgIC8vIGdvIGxlZnQgaW4gc3RhY2tcbiAgICAgICAgICBjb25zdCBwcmV2Q29tbWFuZCA9IGxhc3Qoc3RhdGUuc3RhY2spO1xuXG4gICAgICAgICAgLy8gZG8gbm90aGluZyB3aGVuIHdlIGNhbid0IGdvIGxlZnQgYW55bW9yZVxuICAgICAgICAgIGlmICghcHJldkNvbW1hbmQpIHJldHVybjtcblxuICAgICAgICAgIC8vIHByZXZlbnQgY3Vyc29yIGZyb20ganVtcGluZyBhIGNoYXIgdG8gdGhlIGxlZnQgaW4gdGV4dCBpbnB1dFxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAnc2V0UHJldkNvbW1hbmRzJyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgICAgc2VhcmNoVGV4dDogcHJldkNvbW1hbmQuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgcmVzdWx0czogcHJldkNvbW1hbmQucmVzdWx0cyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBnZXROZXh0Q29tbWFuZHNGcm9tUGFyZW50LFxuICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXMsXG4gICAgICBzaGFrZSxcbiAgICAgIHN0YXRlLFxuICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IsXG4gICAgXVxuICApO1xuICBjb25zdCBoYW5kbGVLZXlVcCA9IHVzZUNhbGxiYWNrPEtleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+PihcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIC8vIHNldHRpbmcgdGhlIHNlbGVjdGlvbiBjYW4gb25seSBoYXBwZW4gaW4gb25LZXlVcFxuICAgICAgaWYgKHNob3VsZFNlbGVjdEZpZWxkVGV4dC5jdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgIGlucHV0LmZvY3VzKCk7XG4gICAgICAgIGlucHV0LnNlbGVjdCgpO1xuICAgICAgICBzaG91bGRTZWxlY3RGaWVsZFRleHQuY3VycmVudCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQua2V5ICE9PSAnRW50ZXInICYmICFpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQpIHJldHVybiB0cnVlO1xuXG4gICAgICAvLyBVc2VyIGp1c3QgdHJpZ2dlcmVkIHRoZSBzZWFyY2hcbiAgICAgIGlmIChzdGF0ZS5zZWxlY3RlZFJlc3VsdCA9PT0gLTEpIHJldHVybiB0cnVlO1xuXG4gICAgICAvLyBVc2VyIGhhZCBzb21ldGhpbmcgc2VsZWN0ZWQgYW5kIHdhbnRzIHRvIGdvIHRoZXJlXG4gICAgICBleGVjdXRlKHN0YXRlLnJlc3VsdHNbc3RhdGUuc2VsZWN0ZWRSZXN1bHRdLCB7XG4gICAgICAgIG9wZW5Jbk5ld1RhYjogaXNOZXdXaW5kb3dDb21iby5jdXJyZW50LFxuICAgICAgfSk7XG5cbiAgICAgIGlzTmV3V2luZG93Q29tYm8uY3VycmVudCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBbZXhlY3V0ZSwgc3RhdGUucmVzdWx0cywgc3RhdGUuc2VsZWN0ZWRSZXN1bHRdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUNhbGxiYWNrPENoYW5nZUV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50Pj4oXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBzZWFyY2hUZXh0ID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgICAgaWYgKHNlYXJjaFRleHQudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdyZXNldCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnc2VhcmNoVGV4dCcsIHBheWxvYWQ6IHNlYXJjaFRleHQgfSk7XG5cbiAgICAgIC8vIEEgc2VhcmNoIHZpYSBuZXR3b3JrIGlzIG9ubHkgdHJpZ2dlcmVkIHdoZW4gdGhlcmVcbiAgICAgIC8vIGFyZSBtb3JlIHRoYW4gdGhyZWUgY2hhcmFjdGVycy4gU28gbm8gZmFsc2UgbG9hZGluZ1xuICAgICAgLy8gaW5kaWNhdGlvbiBpcyBnaXZlbi5cbiAgICAgIGlmIChzZWFyY2hUZXh0LnRyaW0oKS5sZW5ndGggPiAzKSB7XG4gICAgICAgIHNldElzTG9hZGluZygpO1xuICAgICAgfVxuXG4gICAgICBzZWFyY2hGcm9tUGFyZW50KHNlYXJjaFRleHQpLnRoZW4oXG4gICAgICAgIChhc3luY1Jlc3VsdHM6IENvbW1hbmRbXSkgPT4ge1xuICAgICAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yKCk7XG4gICAgICAgICAgdW5zZXRJc0xvYWRpbmcoKTtcblxuICAgICAgICAgIGNvbnN0IGZ1c2UgPSBuZXcgRnVzZShhc3luY1Jlc3VsdHMsIHtcbiAgICAgICAgICAgIGtleXM6IFtcbiAgICAgICAgICAgICAgeyBuYW1lOiAndGV4dCcsIHdlaWdodDogMC42IH0sXG4gICAgICAgICAgICAgIHsgbmFtZTogJ2tleXdvcmRzJywgd2VpZ2h0OiAwLjQgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBtaW5NYXRjaENoYXJMZW5ndGg6IDIsXG4gICAgICAgICAgICBpbmNsdWRlU2NvcmU6IHRydWUsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCBzZWFyY2hSZXN1bHRzID0gZnVzZVxuICAgICAgICAgICAgLnNlYXJjaChzZWFyY2hUZXh0KVxuICAgICAgICAgICAgLy8gRmlsdGVyIG91dCByZXN1bHRzIHdpdGggYSBtYXRjaGluZyBzY29yZSBvdmVyIDAuNzVcbiAgICAgICAgICAgIC5maWx0ZXIoKHJlc3VsdCkgPT4gKHJlc3VsdC5zY29yZSA/IHJlc3VsdC5zY29yZSA8IDAuNzUgOiBmYWxzZSkpXG4gICAgICAgICAgICAvLyBLZWVwIGEgbWF4aW1hbCBvZiA5IHJlc3VsdHNcbiAgICAgICAgICAgIC5zbGljZSgwLCA5KTtcblxuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdzZXRTZWFyY2hUZXh0UmVzdWx0cycsXG4gICAgICAgICAgICBwYXlsb2FkOiBzZWFyY2hSZXN1bHRzLm1hcCgocmVzdWx0KSA9PiByZXN1bHQuaXRlbSksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICB1bnNldElzTG9hZGluZygpO1xuICAgICAgICAgIHNldEhhc05ldHdvcmtFcnJvcigpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0sXG4gICAgW1xuICAgICAgc2VhcmNoRnJvbVBhcmVudCxcbiAgICAgIHNldEhhc05ldHdvcmtFcnJvcixcbiAgICAgIHNldElzTG9hZGluZyxcbiAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yLFxuICAgICAgdW5zZXRJc0xvYWRpbmcsXG4gICAgXVxuICApO1xuICBjb25zdCBoYW5kbGVDb250YWluZXJDbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdyZXNldFJlc3VsdHNXaGVuQ2xvc2luZycgfSk7XG4gICAgb25DbG9zZUZyb21QYXJlbnQoKTtcbiAgfSwgW29uQ2xvc2VGcm9tUGFyZW50XSk7XG5cbiAgY29uc3QgY3JlYXRlQ29tbWFuZE1vdXNlRW50ZXJIYW5kbGVyID0gdXNlQ2FsbGJhY2s8XG4gICAgKGluZGV4OiBudW1iZXIpID0+IE1vdXNlRXZlbnRIYW5kbGVyPEhUTUxEaXZFbGVtZW50PlxuICA+KFxuICAgIChpbmRleCkgPT4gKCkgPT4ge1xuICAgICAgLy8gSW4gY2FzZSB0aGUgY3Vyc29yIGhhcHBlbmVkIHRvIGJlIGluIGEgbG9jYXRpb24gd2hlcmUgYVxuICAgICAgLy8gcmVzdWx0IHdvdWxkIGFwcGVhciwgaXQgd291bGQgdHJpZ2dlciBvbk1vdXNlRW50ZXIgYW5kIHRoZVxuICAgICAgLy8gcmVzdWx0IHdvdWxkIGJlIHNlbGVjdGVkIGltbWVkaWF0ZWx5LiBUaGlzIGlzIG5vdCBzb21ldGhpbmdcbiAgICAgIC8vIGEgdXNlciB3b3VsZCBleHBlY3QsIGhlbmNlIHdlIHByZXZlbnQgaXQgZnJvbSBoYXBwZW5pbmcuXG4gICAgICAvLyBUaGUgdXNlciBoYXMgdG8gbW92ZSB0aGUgY3Vyc29yIHRvIGFuIG9wdGlvbiBleHBsaWNpdGx5IGZvclxuICAgICAgLy8gaXQgdG8gYmVjb21lIGFjdGl2ZS4gSG93ZXZlciwgdGhlIHVzZXIgY2FuIGFsd2F5cyBjbGljayBhbmRcbiAgICAgIC8vIHRoYXQgYWN0aW9uIHdpbGwgYmUgdHJpZ2dlcmVkLlxuICAgICAgaWYgKHNraXBOZXh0U2VsZWN0aW9uLmN1cnJlbnQpIHtcbiAgICAgICAgc2tpcE5leHRTZWxlY3Rpb24uY3VycmVudCA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIHNldHMgdGhlIHNlbGVjdGVkIHJlc3VsdCwgbWFpbmx5IGZvciB0aGUgaG92ZXIgZWZmZWN0XG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdzZWxlY3RlZFJlc3VsdCcsIHBheWxvYWQ6IGluZGV4IH0pO1xuICAgIH0sXG4gICAgW11cbiAgKTtcbiAgY29uc3QgY3JlYXRlQ29tbWFuZENsaWNrSGFuZGxlciA9IHVzZUNhbGxiYWNrPFxuICAgIChjb21tYW5kOiBDb21tYW5kKSA9PiBNb3VzZUV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD5cbiAgPihcbiAgICAoY29tbWFuZCkgPT4gKGV2ZW50KSA9PiB7XG4gICAgICBleGVjdXRlKGNvbW1hbmQsIHtcbiAgICAgICAgb3BlbkluTmV3VGFiOiBoYXNOZXdXaW5kb3dNb2RpZmllcihldmVudCksXG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtleGVjdXRlXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPEJ1dGxlckNvbnRhaW5lclxuICAgICAgb25DbGljaz17aGFuZGxlQ29udGFpbmVyQ2xpY2t9XG4gICAgICBkYXRhLXRlc3RpZD1cInF1aWNrLWFjY2Vzc1wiXG4gICAgICB0YWJJbmRleD17LTF9XG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICByZWY9e3NlYXJjaENvbnRhaW5lclJlZn1cbiAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yU3VyZmFjZX07XG4gICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICR7Y3VzdG9tUHJvcGVydGllcy5ib3JkZXJSYWRpdXM0fTtcbiAgICAgICAgICBtaW4taGVpZ2h0OiA0MHB4O1xuXG4gICAgICAgICAgLyogb25lIG1vcmUgdGhhbiBhcHAtYmFyICgyMDAwMCkgYW5kIG9uZSBtb3JlIHRoYW4gdGhlIG92ZXJsYXkgKDIwMDAxKSAqL1xuICAgICAgICAgIHotaW5kZXg6IDIwMDAyO1xuICAgICAgICAgIHdpZHRoOiA0MDBweDtcbiAgICAgICAgICBtYXJnaW46IDQwcHggYXV0bztcbiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogMCAxMHB4IDMwcHggLThweCByZ2JhKDAsIDAsIDAsIDAuNzUpO1xuICAgICAgICAgIC1tb3otYm94LXNoYWRvdzogMCAxMHB4IDMwcHggLThweCByZ2JhKDAsIDAsIDAsIDAuNzUpO1xuICAgICAgICAgIGJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogJHtzdGF0ZS5oYXNOZXR3b3JrRXJyb3JcbiAgICAgICAgICAgID8gJzAnXG4gICAgICAgICAgICA6IGN1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICBgfVxuICAgICAgICBvbkNsaWNrPXsoZXZlbnQpID0+IHtcbiAgICAgICAgICAvLyBBdm9pZCBjbG9zaW5nIHdoZW4gdGhlIHNlYXJjaENvbnRhaW5lciBpdHNlbGYgaXMgY2xpY2tlZFxuICAgICAgICAgIC8vIElmIHdlIGRvbid0IGRvIHRoaXMsIHRoZW4gdGhlIG92ZXJsYXkgd2lsbCBjbG9zZSB3aGVuIGUuZy5cbiAgICAgICAgICAvLyB0aGUgc2VhcmNoIGlucHV0IGlzIGNsaWNrZWQuXG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBgfVxuICAgICAgICA+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICBodG1sRm9yPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6ICR7Y3VzdG9tUHJvcGVydGllcy5zcGFjaW5nTX07XG4gICAgICAgICAgICAgIG1hcmdpbi10b3A6ICR7Y3VzdG9tUHJvcGVydGllcy5zcGFjaW5nU307XG4gICAgICAgICAgICBgfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxTZWFyY2hJY29uIGNvbG9yPVwibmV1dHJhbDYwXCIgLz5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgaWQ9XCJxdWljay1hY2Nlc3Mtc2VhcmNoLWlucHV0XCJcbiAgICAgICAgICAgIHJlZj17c2VhcmNoSW5wdXRSZWZ9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj17aW50bC5mb3JtYXRNZXNzYWdlKG1lc3NhZ2VzLmlucHV0UGxhY2Vob2Rlcil9XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICAgICAgb3V0bGluZTogMDtcbiAgICAgICAgICAgICAgZm9udC1zaXplOiAyMnB4O1xuICAgICAgICAgICAgICBmb250LXdlaWdodDogMzAwO1xuICAgICAgICAgICAgICBwYWRkaW5nOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019ICR7Y3VzdG9tUHJvcGVydGllcy5zcGFjaW5nTX1cbiAgICAgICAgICAgICAgICAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9ICR7Y3VzdG9tUHJvcGVydGllcy5zcGFjaW5nU307XG4gICAgICAgICAgICAgICY6OnBsYWNlaG9sZGVyIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yTmV1dHJhbDYwfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgYH1cbiAgICAgICAgICAgIHZhbHVlPXtzdGF0ZS5zZWFyY2hUZXh0fVxuICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgIG9uS2V5RG93bj17aGFuZGxlS2V5RG93bn1cbiAgICAgICAgICAgIG9uS2V5VXA9e2hhbmRsZUtleVVwfVxuICAgICAgICAgICAgYXV0b0ZvY3VzPXt0cnVlfVxuICAgICAgICAgICAgYXV0b0NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICB7c3RhdGUuaXNMb2FkaW5nICYmIChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6ICR7Y3VzdG9tUHJvcGVydGllcy5zcGFjaW5nU307XG4gICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8TG9hZGluZ1NwaW5uZXIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICBpZiAoc3RhdGUuaGFzTmV0d29ya0Vycm9yKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgICAgICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JFcnJvcn07XG4gICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICAgICAgICAgICAgY29sb3I6ICR7Y3VzdG9tUHJvcGVydGllcy5jb2xvclN1cmZhY2V9O1xuICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAke2N1c3RvbVByb3BlcnRpZXMuZm9udFNpemVTbWFsbH07XG4gICAgICAgICAgICAgICAgICBwYWRkaW5nOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1hzfTtcbiAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2Ugey4uLm1lc3NhZ2VzLm9mZmxpbmV9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChzdGF0ZS5yZXN1bHRzLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5zZWFyY2hUZXh0LnRyaW0oKS5sZW5ndGggPiAwKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgICAgICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JOZXV0cmFsfTtcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JTb2xpZH07XG4gICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAke2N1c3RvbVByb3BlcnRpZXMuZm9udFNpemVTbWFsbH07XG4gICAgICAgICAgICAgICAgICBwYWRkaW5nOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1hzfTtcbiAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2Ugey4uLm1lc3NhZ2VzLm5vUmVzdWx0c30gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuIHN0YXRlLnJlc3VsdHMubWFwKChjb21tYW5kLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPEJ1dGxlckNvbW1hbmRcbiAgICAgICAgICAgICAga2V5PXtjb21tYW5kLmlkfVxuICAgICAgICAgICAgICBjb21tYW5kPXtjb21tYW5kfVxuICAgICAgICAgICAgICBpc1NlbGVjdGVkPXtzdGF0ZS5zZWxlY3RlZFJlc3VsdCA9PT0gaW5kZXh9XG4gICAgICAgICAgICAgIG9uTW91c2VFbnRlcj17Y3JlYXRlQ29tbWFuZE1vdXNlRW50ZXJIYW5kbGVyKGluZGV4KX1cbiAgICAgICAgICAgICAgb25DbGljaz17Y3JlYXRlQ29tbWFuZENsaWNrSGFuZGxlcihjb21tYW5kKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSk7XG4gICAgICAgIH0pKCl9XG4gICAgICA8L2Rpdj5cbiAgICA8L0J1dGxlckNvbnRhaW5lcj5cbiAgKTtcbn07XG5CdXRsZXIuZGlzcGxheU5hbWUgPSAnQnV0bGVyJztcblxuY29uc3QgQnV0bGVyV2l0aEFuaW1hdGlvbiA9IChwcm9wczogT21pdDxQcm9wcywgJ2NsYXNzTmFtZVNoYWtlQW5pbWF0aW9uJz4pID0+IChcbiAgPENsYXNzTmFtZXM+XG4gICAgeyh7IGNzcyB9KSA9PiAoXG4gICAgICA8QnV0bGVyXG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgY2xhc3NOYW1lU2hha2VBbmltYXRpb249e2Nzc2BcbiAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IDAuNDVzO1xuICAgICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGJvdGg7XG4gICAgICAgICAgYW5pbWF0aW9uLW5hbWU6ICR7c2hha2VBbmltYXRpb259O1xuICAgICAgICBgfVxuICAgICAgLz5cbiAgICApfVxuICA8L0NsYXNzTmFtZXM+XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBCdXRsZXJXaXRoQW5pbWF0aW9uO1xuIl19 */"),
1000
- children: jsxRuntime.jsx(icons.SearchIcon, {
1001
- color: "neutral60"
1002
- })
1003
- }), jsxRuntime.jsx("input", {
1004
- id: "quick-access-search-input",
1005
- ref: searchInputRef,
1006
- placeholder: intl.formatMessage(messages.inputPlacehoder),
1007
- type: "text",
1008
- css: /*#__PURE__*/react.css("width:100%;border:0;outline:0;font-size:22px;font-weight:300;padding:", designSystem.customProperties.spacingM, " ", designSystem.customProperties.spacingM, " ", designSystem.customProperties.spacingS, " ", designSystem.customProperties.spacingS, ";&::placeholder{color:", designSystem.customProperties.colorNeutral60, ";}" + (process.env.NODE_ENV === "production" ? "" : ";label:Butler;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBb29Cb0IiLCJmaWxlIjoiYnV0bGVyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgQ29tbWFuZCxcbiAgU2VhcmNoVGV4dCxcbiAgU2VsZWN0ZWRSZXN1bHQsXG4gIFN0YWNrLFxuICBIaXN0b3J5RW50cnksXG59IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtcbiAgS2V5Ym9hcmRFdmVudEhhbmRsZXIsXG4gIENoYW5nZUV2ZW50SGFuZGxlcixcbiAgS2V5Ym9hcmRFdmVudCxcbiAgTW91c2VFdmVudEhhbmRsZXIsXG4gIE1vdXNlRXZlbnQsXG4gIHVzZVJlZHVjZXIsXG4gIHVzZVJlZixcbiAgdXNlQ2FsbGJhY2ssXG59IGZyb20gJ3JlYWN0JztcbmltcG9ydCBGdXNlIGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IHsgRm9ybWF0dGVkTWVzc2FnZSwgdXNlSW50bCB9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IGxhc3QgZnJvbSAnbG9kYXNoL2xhc3QnO1xuaW1wb3J0IHsgY3NzLCBrZXlmcmFtZXMsIENsYXNzTmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgTG9hZGluZ1NwaW5uZXIgZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvbG9hZGluZy1zcGlubmVyJztcbmltcG9ydCB7IFNlYXJjaEljb24gfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9pY29ucyc7XG5pbXBvcnQgeyBjdXN0b21Qcm9wZXJ0aWVzIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgQnV0bGVyQ29tbWFuZCBmcm9tICcuLi9idXRsZXItY29tbWFuZCc7XG5pbXBvcnQgQnV0bGVyQ29udGFpbmVyIGZyb20gJy4uL2J1dGxlci1jb250YWluZXInO1xuaW1wb3J0IG1lc3NhZ2VzIGZyb20gJy4uL21lc3NhZ2VzJztcblxuY29uc3QgaXNTZWxlY3RBbGxDb21ibyA9IChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cbiAgZXZlbnQua2V5ID09PSAnYScgJiZcbiAgZXZlbnQubWV0YUtleSAmJlxuICAhZXZlbnQuY3RybEtleSAmJlxuICAhZXZlbnQuYWx0S2V5ICYmXG4gICFldmVudC5zaGlmdEtleTtcblxuY29uc3QgaXNDbG9zZUNvbWJvID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PlxuICBldmVudC5rZXkgPT09ICdFc2NhcGUnICYmXG4gICFldmVudC5tZXRhS2V5ICYmXG4gICFldmVudC5jdHJsS2V5ICYmXG4gICFldmVudC5hbHRLZXkgJiZcbiAgIWV2ZW50LnNoaWZ0S2V5O1xuXG5jb25zdCBnZXRQbGF0Zm9ybSA9ICgpID0+IHtcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdXaW4nKSkgcmV0dXJuICd3aW5kb3dzJztcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdNYWMnKSkgcmV0dXJuICdtYWNvcyc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnWDExJykpIHJldHVybiAndW5peCc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnTGludXgnKSkgcmV0dXJuICdsaW51eCc7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBoYXNOZXdXaW5kb3dNb2RpZmllciA9IChcbiAgZXZlbnQ6IEtleWJvYXJkRXZlbnQ8SFRNTEVsZW1lbnQ+IHwgTW91c2VFdmVudDxIVE1MRWxlbWVudD5cbikgPT4ge1xuICBjb25zdCBwbGF0Zm9ybSA9IGdldFBsYXRmb3JtKCk7XG4gIHN3aXRjaCAocGxhdGZvcm0pIHtcbiAgICBjYXNlICdtYWNvcyc6XG4gICAgICByZXR1cm4gZXZlbnQubWV0YUtleTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGV2ZW50LmN0cmxLZXk7XG4gIH1cbn07XG5cbmNvbnN0IHNoYWtlQW5pbWF0aW9uID0ga2V5ZnJhbWVzYFxuICBmcm9tLFxuICB0byB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcbiAgfVxuXG4gIDE0JSxcbiAgNDIlLFxuICA3MCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTNweCwgMCwgMCk7XG4gIH1cblxuICAyOCUsXG4gIDU2JSxcbiAgODQlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDNweCwgMCwgMCk7XG4gIH1cbmA7XG5cbnR5cGUgU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogYm9vbGVhbjtcbiAgaXNMb2FkaW5nOiBib29sZWFuO1xuICBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0O1xuICBzZWxlY3RlZFJlc3VsdDogU2VsZWN0ZWRSZXN1bHQ7XG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IGJvb2xlYW47XG4gIHJlc3VsdHM6IENvbW1hbmRbXTtcbiAgc3RhY2s6IFN0YWNrW107XG59O1xudHlwZSBBY3Rpb24gPVxuICB8IHsgdHlwZTogJ25ldHdvcmtFcnJvcic7IHBheWxvYWQ6IGJvb2xlYW4gfVxuICB8IHsgdHlwZTogJ2xvYWRpbmcnOyBwYXlsb2FkOiBib29sZWFuIH1cbiAgfCB7IHR5cGU6ICdzZWxlY3RlZFJlc3VsdCc7IHBheWxvYWQ6IG51bWJlciB9XG4gIHwgeyB0eXBlOiAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH1cbiAgfCB7IHR5cGU6ICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfVxuICB8IHtcbiAgICAgIHR5cGU6ICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JztcbiAgICAgIHBheWxvYWQ6IHsgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDsgcmVzdWx0czogQ29tbWFuZFtdIH07XG4gICAgfVxuICB8IHsgdHlwZTogJ3NldE5leHRDb21tYW5kcyc7IHBheWxvYWQ6IHsgcmVzdWx0czogQ29tbWFuZFtdIH0gfVxuICB8IHtcbiAgICAgIHR5cGU6ICdzZXRQcmV2Q29tbWFuZHMnO1xuICAgICAgcGF5bG9hZDogeyBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0OyByZXN1bHRzOiBDb21tYW5kW10gfTtcbiAgICB9XG4gIHwgeyB0eXBlOiAnc2VhcmNoVGV4dCc7IHBheWxvYWQ6IHN0cmluZyB9XG4gIHwgeyB0eXBlOiAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOyBwYXlsb2FkOiBDb21tYW5kW10gfVxuICB8IHsgdHlwZTogJ3Jlc2V0U2VhcmNoVGV4dCcgfVxuICB8IHsgdHlwZTogJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJyB9XG4gIHwgeyB0eXBlOiAncmVzZXQnIH07XG5jb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogZmFsc2UsXG4gIGlzTG9hZGluZzogZmFsc2UsXG4gIHNlYXJjaFRleHQ6ICcnLFxuICBzZWxlY3RlZFJlc3VsdDogLTEsXG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IHRydWUsXG4gIHJlc3VsdHM6IFtdLFxuICBzdGFjazogW10sXG59O1xuY29uc3QgcmVkdWNlciA9IChzdGF0ZTogU3RhdGUgPSBpbml0aWFsU3RhdGUsIGFjdGlvbjogQWN0aW9uKTogU3RhdGUgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnbmV0d29ya0Vycm9yJzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBoYXNOZXR3b3JrRXJyb3I6IGFjdGlvbi5wYXlsb2FkIH07XG4gICAgY2FzZSAnbG9hZGluZyc6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgaXNMb2FkaW5nOiBhY3Rpb24ucGF5bG9hZCB9O1xuICAgIGNhc2UgJ3NlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQgfTtcbiAgICBjYXNlICdpbmNyZW1lbnRTZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6XG4gICAgICAgICAgc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IHN0YXRlLnJlc3VsdHMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0ICsgMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ2RlY3JlbWVudFNlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDpcbiAgICAgICAgICBzdGF0ZS5zZWxlY3RlZFJlc3VsdCA8IDFcbiAgICAgICAgICAgID8gc3RhdGUucmVzdWx0cy5sZW5ndGggLSAxXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0IC0gMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ3BpY2tDb21tYW5kRnJvbUhpc3RvcnknOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OiAwLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZC5zZWFyY2hUZXh0LFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZC5yZXN1bHRzLFxuICAgICAgICBzdGFjazogW10sXG4gICAgICAgIC8vIFRoZSBoaXN0b3J5IGRvZXMgbm90IGdldCBjaGFuZ2VkIGhlcmUsIGl0IHdpbGwgYmUgY2hhbmdlZCBhbG9uZ1xuICAgICAgICAvLyB3aXRoIHRoZSByZWd1bGFyIGZsb3cuXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldE5leHRDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc3RhY2s6IFtcbiAgICAgICAgICAuLi5zdGF0ZS5zdGFjayxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZWFyY2hUZXh0OiBzdGF0ZS5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgcmVzdWx0czogc3RhdGUucmVzdWx0cyxcbiAgICAgICAgICAgIHNlbGVjdGVkUmVzdWx0OiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogMCxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLnJlc3VsdHMsXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldFByZXZDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQuc2VhcmNoVGV4dCxcbiAgICAgICAgcmVzdWx0czogYWN0aW9uLnBheWxvYWQucmVzdWx0cyxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IDAsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgICAvLyBvbWl0IGxhc3QgaXRlbVxuICAgICAgICBzdGFjazogc3RhdGUuc3RhY2suc2xpY2UoMCwgLTEpLFxuICAgICAgfTtcbiAgICBjYXNlICdzZWFyY2hUZXh0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgLy8gY2xlYXIgbmV0d29yayBlcnJvciB3aGVuIHNlYXJjaCB0ZXh0IGlzIGNsZWFyZWQsIHNvIHRoYXQgdXNlcnNcbiAgICAgICAgLy8gYXJlIHRlbXB0ZWQgdG8gcmV0cnlcbiAgICAgICAgaGFzTmV0d29ya0Vycm9yOiBhY3Rpb24ucGF5bG9hZC5sZW5ndGggPiAwICYmIHN0YXRlLmhhc05ldHdvcmtFcnJvcixcbiAgICAgIH07XG4gICAgY2FzZSAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQubGVuZ3RoID4gMCA/IDAgOiAtMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogdHJ1ZSxcbiAgICAgICAgc3RhY2s6IFtdLFxuICAgICAgfTtcbiAgICBjYXNlICdyZXNldFNlYXJjaFRleHQnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlYXJjaFRleHQ6ICcnLCByZXN1bHRzOiBbXSwgc2VsZWN0ZWRSZXN1bHQ6IC0xIH07XG4gICAgY2FzZSAncmVzZXRSZXN1bHRzV2hlbkNsb3NpbmcnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlbGVjdGVkUmVzdWx0OiAtMSwgZW5hYmxlSGlzdG9yeTogdHJ1ZSB9O1xuICAgIGNhc2UgJ3Jlc2V0JzpcbiAgICAgIHJldHVybiBpbml0aWFsU3RhdGU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufTtcblxudHlwZSBQcm9wcyA9IHtcbiAgaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdO1xuICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlOiAoaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdKSA9PiB2b2lkO1xuICBzZWFyY2g6IChzZWFyY2hUZXh0OiBTZWFyY2hUZXh0KSA9PiBQcm9taXNlPENvbW1hbmRbXT47XG4gIGdldE5leHRDb21tYW5kczogKGNvbW1hbmQ6IENvbW1hbmQpID0+IFByb21pc2U8Q29tbWFuZFtdPjtcbiAgZXhlY3V0ZUNvbW1hbmQ6IChjb21tYW5kOiBDb21tYW5kLCBtZXRhOiB7IG9wZW5Jbk5ld1RhYjogYm9vbGVhbiB9KSA9PiB2b2lkO1xuICBvbkNsb3NlOiAoKSA9PiB2b2lkO1xuICBjbGFzc05hbWVTaGFrZUFuaW1hdGlvbjogc3RyaW5nO1xufTtcbmNvbnN0IEJ1dGxlciA9IChwcm9wczogUHJvcHMpID0+IHtcbiAgY29uc3QgaW50bCA9IHVzZUludGwoKTtcbiAgY29uc3QgW3N0YXRlLCBkaXNwYXRjaF0gPSB1c2VSZWR1Y2VyPFxuICAgIChwcmV2U3RhdGU6IFN0YXRlLCBhY3Rpb246IEFjdGlvbikgPT4gU3RhdGVcbiAgPihyZWR1Y2VyLCBpbml0aWFsU3RhdGUpO1xuXG4gIGNvbnN0IHNob3VsZFNlbGVjdEZpZWxkVGV4dCA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IGlzTmV3V2luZG93Q29tYm8gPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBza2lwTmV4dFNlbGVjdGlvbiA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IHNlYXJjaENvbnRhaW5lclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IHNlYXJjaElucHV0UmVmID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KG51bGwpO1xuXG4gIGNvbnN0IHNldEhhc05ldHdvcmtFcnJvciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICduZXR3b3JrRXJyb3InLCBwYXlsb2FkOiB0cnVlIH0pO1xuICB9LCBbXSk7XG4gIGNvbnN0IHVuc2V0SGFzTmV0d29ya0Vycm9yID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ25ldHdvcmtFcnJvcicsIHBheWxvYWQ6IGZhbHNlIH0pO1xuICB9LCBbXSk7XG4gIGNvbnN0IHNldElzTG9hZGluZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdsb2FkaW5nJywgcGF5bG9hZDogdHJ1ZSB9KTtcbiAgfSwgW10pO1xuICBjb25zdCB1bnNldElzTG9hZGluZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdsb2FkaW5nJywgcGF5bG9hZDogZmFsc2UgfSk7XG4gIH0sIFtdKTtcblxuICAvLyBEZXN0cnVjdHVyZSBmdW5jdGlvbnMgZnJvbSBwcm9wcyB0byByZWZlcmVuY2UgdGhlbSBpbiB0aGUgaG9vayBkZXBlbmRlbmN5IGxpc3RcbiAgY29uc3Qge1xuICAgIHNlYXJjaDogc2VhcmNoRnJvbVBhcmVudCxcbiAgICBvbkNsb3NlOiBvbkNsb3NlRnJvbVBhcmVudCxcbiAgICBleGVjdXRlQ29tbWFuZDogZXhlY3V0ZUNvbW1hbmRGcm9tUGFyZW50LFxuICAgIG9uSGlzdG9yeUVudHJpZXNDaGFuZ2U6IG9uSGlzdG9yeUVudHJpZXNDaGFuZ2VGcm9tUGFyZW50LFxuICAgIGdldE5leHRDb21tYW5kczogZ2V0TmV4dENvbW1hbmRzRnJvbVBhcmVudCxcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHNoYWtlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChzZWFyY2hDb250YWluZXJSZWYuY3VycmVudCkge1xuICAgICAgc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQuY2xhc3NMaXN0LnJlbW92ZShcbiAgICAgICAgcHJvcHMuY2xhc3NOYW1lU2hha2VBbmltYXRpb25cbiAgICAgICk7XG4gICAgICAvLyAtPiB0cmlnZ2VyaW5nIHJlZmxvd1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXZvaWRcbiAgICAgIHZvaWQgc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQub2Zmc2V0V2lkdGg7XG4gICAgICBzZWFyY2hDb250YWluZXJSZWYuY3VycmVudC5jbGFzc0xpc3QuYWRkKHByb3BzLmNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uKTtcbiAgICB9XG4gIH0sIFtwcm9wcy5jbGFzc05hbWVTaGFrZUFuaW1hdGlvbl0pO1xuXG4gIGNvbnN0IGV4ZWN1dGUgPSB1c2VDYWxsYmFjayhcbiAgICAoY29tbWFuZCwgbWV0YSkgPT4ge1xuICAgICAgLy8gT25seSBtYWluIGVudHJpZXMgZ2V0IGFkZGVkIHRvIGhpc3RvcnksIHNvIHdoZW4gYSBzdWJjb21tYW5kIGlzIGV4ZWN1dGVkLFxuICAgICAgLy8gd2UgYWRkIHRoZSBtYWluIGNvbW1hbmQgb2YgaXQgdG8gdGhlIGhpc3RvcnkgKHRoZSB0b3AtbGV2ZWwgY29tbWFuZCkuXG4gICAgICAvL1xuICAgICAgLy8gVGhlIGtleSB0byBpZGVudGlmeSBoaXN0b3J5IGVudHJpZXMgYnkgaXMgYWx3YXlzIHRoZSBzZWFyY2hUZXh0XG4gICAgICAvLyBUaGVyZSB3aWxsIG5ldmVyIGJlIHR3byBoaXN0b3J5IGVudHJpZXMgd2l0aCB0aGUgc2FtZSBzZWFyY2hUZXh0XG4gICAgICBjb25zdCBlbnRyeSA9XG4gICAgICAgIHN0YXRlLnN0YWNrLmxlbmd0aCA9PT0gMFxuICAgICAgICAgID8gLy8gVGhlIHN0YWNrIGlzIGVtcHR5LCBzbyB3ZSBhcmUgZXhlY3V0aW5nIGEgdG9wLWxldmVsIGNvbW1hbmRcbiAgICAgICAgICAgIHsgc2VhcmNoVGV4dDogc3RhdGUuc2VhcmNoVGV4dCwgcmVzdWx0czogc3RhdGUucmVzdWx0cyB9XG4gICAgICAgICAgOiAvLyBXZSBhcmUgZXhlY3V0aW5nIGEgc3ViY29tbWFuZCwgc28gd2UgZ2V0IHRoZSB0b3AtbGV2ZWwgY29tbWFuZCBmb3IgaXQsXG4gICAgICAgICAgICAvLyB3aGljaCBpcyBhdCB0aGUgYm90dG9tIG9mIHRoZSBzdGFjay5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc2VhcmNoVGV4dDogc3RhdGUuc3RhY2tbMF0uc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgcmVzdWx0czogc3RhdGUuc3RhY2tbMF0ucmVzdWx0cyxcbiAgICAgICAgICAgIH07XG5cbiAgICAgIC8vIEFkZCB0aGUgZW50cnkgdG8gdGhlIGhpc3RvcnksIHdoaWxlIGV4Y2x1ZGluZyBhbnkgZWFybGllciBoaXN0b3J5IGVudHJ5XG4gICAgICAvLyB3aXRoIHRoZSBzYW1lIHNlYXJjaCB0ZXh0LiBUaGlzIGVmZmVjdGl2ZWx5IFwibW92ZXNcIiB0aGF0IGVudHJ5IHRvIHRoZVxuICAgICAgLy8gdG9wIG9mIHRoZSBoaXN0b3J5ICh3aXRoIHRoZSBtb3N0IHJlY2VudCByZXN1bHRzKSwgb3IgYXBwZW5kcyBhIG5ldyBlbnRyeVxuICAgICAgLy8gd2hlbiBpdCBkaWRuJ3QgZXhpc3QgYmVmb3JlLlxuICAgICAgb25IaXN0b3J5RW50cmllc0NoYW5nZUZyb21QYXJlbnQoW1xuICAgICAgICAuLi5wcm9wcy5oaXN0b3J5RW50cmllcy5maWx0ZXIoXG4gICAgICAgICAgKGNvbW1hbmQpID0+IGNvbW1hbmQuc2VhcmNoVGV4dCAhPT0gZW50cnkuc2VhcmNoVGV4dFxuICAgICAgICApLFxuICAgICAgICBlbnRyeSxcbiAgICAgIF0pO1xuXG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdyZXNldFNlYXJjaFRleHQnIH0pO1xuXG4gICAgICBvbkNsb3NlRnJvbVBhcmVudCgpO1xuXG4gICAgICBleGVjdXRlQ29tbWFuZEZyb21QYXJlbnQoY29tbWFuZCwgbWV0YSk7XG4gICAgfSxcbiAgICBbXG4gICAgICBleGVjdXRlQ29tbWFuZEZyb21QYXJlbnQsXG4gICAgICBvbkNsb3NlRnJvbVBhcmVudCxcbiAgICAgIG9uSGlzdG9yeUVudHJpZXNDaGFuZ2VGcm9tUGFyZW50LFxuICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXMsXG4gICAgICBzdGF0ZS5yZXN1bHRzLFxuICAgICAgc3RhdGUuc2VhcmNoVGV4dCxcbiAgICAgIHN0YXRlLnN0YWNrLFxuICAgIF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IHVzZUNhbGxiYWNrPEtleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+PihcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIC8vIFByZXZlbnRpbmcgY3Vyc29yIGp1bXBzIGNhbiBvbmx5IGhhcHBlbiBpbiBvbktleURvd24sIGJ1dCBub3QgaW4gb25LZXlVcFxuICAgICAgZXZlbnQucGVyc2lzdCgpO1xuXG4gICAgICAvLyBXZSB3YW50IHRvIGtub3cgd2hlbiB0aGUgdXNlciBwcmVzc2VzIGNtZCtlbnRlciAoY21kIGJlaW5nIGEgbWV0YSBrZXkpLlxuICAgICAgLy8gV2UgYXJlIG9ubHkgdG9sZCBhYm91dCB0aGlzIGluIGtleURvd24sIGJ1dCBub3QgaW4ga2V5VXAsIHNvIHdlIG5lZWRcbiAgICAgIC8vIHRvIGhhbmRsZSBpdCBoZXJlXG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInICYmIGhhc05ld1dpbmRvd01vZGlmaWVyKGV2ZW50KSkge1xuICAgICAgICBpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIEF2b2lkIHNlbGVjdGluZyB0aGUgd2hvbGUgcGFnZSB3aGVuIHVzZXIgc2VsZWN0ZXMgZXZlcnl0aGluZyB3aXRoXG4gICAgICAvLyBhIGtleWJvYXJkIHNob3J0Y3V0LiBUaGVyZSBpcyBwcm9iYWJseSBhIGJldHRlciB3YXkgdG8gZG8gdGhpcyB0aG91Z2guXG4gICAgICAvLyBUaGlzIHByZXZlbnRzIHRoZSB3aG9sZSBwYWdlIGZyb20gYmVpbmcgc2VsZWN0ZWQgaW4gY2FzZSB0aGUgdXNlclxuICAgICAgLy8gMSkgb3BlbnMgdGhlIHNlYXJjaCBib3hcbiAgICAgIC8vIDIpIHR5cGVzIGludG8gaXRcbiAgICAgIC8vIDMpIHNlbGVjdHMgYWxsIHRleHQgdXNpbmcgY21kK2FcbiAgICAgIC8vIDQpIGNsb3NlcyB0aGUgc2VhcmNoIGJveCB3aXRoIGVzY1xuICAgICAgLy8gV2l0aG91dCB0aGlzIGhhbmRsaW5nLCB0aGUgd2hvbGUgcGFnZSB3b3VsZCBub3cgYmUgc2VsZWN0ZWRcbiAgICAgIGlmIChpc1NlbGVjdEFsbENvbWJvKGV2ZW50KSkge1xuICAgICAgICAvLyBUaGlzIHN0b3BzIHRoZSBicm93c2VyIGZyb20gc2VsZWN0aW5nIGFueXRoaW5nXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmIChzZWFyY2hJbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgLy8gVGhpcyBzZWxlY3RzIHRoZSB0ZXh0IGluIHRoZSBzZWFyY2ggaW5wdXRcbiAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNldFNlbGVjdGlvblJhbmdlKDAsIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIGF2b2lkIGludGVyZmVyaW5nIHdpdGggb3RoZXIga2V5IGNvbWJpbmF0aW9ucyB1c2luZyBtb2RpZmllciBrZXlzXG4gICAgICBpZiAoZXZlbnQuY3RybEtleSB8fCBldmVudC5hbHRLZXkgfHwgZXZlbnQuc2hpZnRLZXkgfHwgZXZlbnQubWV0YUtleSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKGlzQ2xvc2VDb21ibyhldmVudCkpIHJldHVybjtcblxuICAgICAgLy8gc2tpcCBuZXh0IG1vdXNlRW50ZXIgdG8gYXZvaWQgc2V0dGluZyBzZWxlY3RlZFJlc3VsdCB3aGVuIGN1cnNvciBqdXN0XG4gICAgICAvLyBoYXBwZW5zIHRvIGJlIHdoZXJlIHRoZSByZXN1bHRzIHdpbGwgcG9wIHVwXG4gICAgICBza2lwTmV4dFNlbGVjdGlvbi5jdXJyZW50ID0gdHJ1ZTtcblxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgICAgLy8gcHJldmVudCBjdXJzb3IgZnJvbSBqdW1waW5nIHRvIGVuZCBvZiB0ZXh0IGlucHV0XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ2luY3JlbWVudFNlbGVjdGVkUmVzdWx0JyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICAgIC8vIGJyb3dzZSB0aHJvdWdoIGhpc3RvcnlcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgKHN0YXRlLnNlbGVjdGVkUmVzdWx0IDwgMSAmJiBzdGF0ZS5lbmFibGVIaXN0b3J5KVxuICAgICAgICApIHtcbiAgICAgICAgICBzaG91bGRTZWxlY3RGaWVsZFRleHQuY3VycmVudCA9IHRydWU7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRJbmRleCA9XG4gICAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICA/IC8vIFdoZW4gZ29pbmcgYmFjayB0aGUgZmlyc3Qgc3RlcFxuICAgICAgICAgICAgICAgIC0xXG4gICAgICAgICAgICAgIDogLy8gV2hlbiBnb2luZyBiYWNrIG1vcmUgdGhhbiBvbmUgc3RlcFxuICAgICAgICAgICAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgIChjb21tYW5kKSA9PiBjb21tYW5kLnNlYXJjaFRleHQgPT09IHN0YXRlLnNlYXJjaFRleHRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgIC8vIFBpY2sgdGhlIHByZXZpb3VzIGNvbW1hbmQgZnJvbSB0aGUgaGlzdG9yeVxuICAgICAgICAgIGNvbnN0IHByZXZDb21tYW5kID1cbiAgICAgICAgICAgIHNlbGVjdGVkSW5kZXggPT09IC0xXG4gICAgICAgICAgICAgID8gLy8gcHJldmlvdXMgY29tbWFuZCBvbiB0b3Agb2YgdGhlIGhpc3Rvcnkgd2hlbiBnb2luZyBiYWNrIG9uXG4gICAgICAgICAgICAgICAgLy8gZmlyc3Qgc3RlcFxuICAgICAgICAgICAgICAgIGxhc3QocHJvcHMuaGlzdG9yeUVudHJpZXMpXG4gICAgICAgICAgICAgIDogLy8gcHJldmlvdXMgY29tbWFuZCBpcyBkZWVwZXIgZG93blxuICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlIGhpc3RvcnkgZG9lcyBub3QgZXhpc3QgKG5lZ2F0aXZlIGluZGV4KSwgdGhlblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgaW1wbGljaXRseSByZXR1cm5zIHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzW3NlbGVjdGVkSW5kZXggLSAxXTtcbiAgICAgICAgICAvLyBTa2lwIHdoZW4gbm8gcHJldmlvdXMgZW50cnkgZXhpc3RzIGluIHRoZSBoaXN0b3J5XG4gICAgICAgICAgaWYgKCFwcmV2Q29tbWFuZCkgcmV0dXJuO1xuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgICAgc2VhcmNoVGV4dDogcHJldkNvbW1hbmQuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgcmVzdWx0czogcHJldkNvbW1hbmQucmVzdWx0cyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHByZXZlbnQgY3Vyc29yIGZyb20ganVtcGluZyB0byBiZWdpbm5pbmcgb2YgdGV4dCBpbnB1dFxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0ZS5zZWxlY3RlZFJlc3VsdCA+IC0xKSB7XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0Jykge1xuICAgICAgICAgIGNvbnN0IGNvbW1hbmQgPSBzdGF0ZS5yZXN1bHRzW3N0YXRlLnNlbGVjdGVkUmVzdWx0XTtcbiAgICAgICAgICBjb25zdCBzZWFyY2hUZXh0ID0gc3RhdGUuc2VhcmNoVGV4dDtcbiAgICAgICAgICBjb25zdCBpc0N1cnNvckF0RW5kID1cbiAgICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQgJiZcbiAgICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xuXG4gICAgICAgICAgY29uc3QgaXNFdmVyeXRoaW5nU2VsZWN0ZWQgPVxuICAgICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudCAmJlxuICAgICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydCA9PT0gMCAmJlxuICAgICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xuXG4gICAgICAgICAgLy8gb25seSBhbGxvdyBkaXZpbmcgaW4gd2hlbiBjdXJzb3IgaXMgYXQgZW5kIG9mIGlucHV0IG9yIHdoZW5cbiAgICAgICAgICAvLyB0aGUgY29tcGxldGUgdGV4dCBpcyBzZWxlY3RlZCAod2hlbiBicm93c2luZyB0aHJvdWdoIGhpc3RvcnkpXG4gICAgICAgICAgaWYgKCFpc0N1cnNvckF0RW5kICYmICFpc0V2ZXJ5dGhpbmdTZWxlY3RlZCkgcmV0dXJuO1xuXG4gICAgICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IoKTtcblxuICAgICAgICAgIC8vIE5PVEU6IHNpbmNlIHdlIG5lZWQgdG8gZmV0Y2ggdGhlIFwibmV4dCBjb21tYW5kXCIsIHdoaWNoIGlzIGFuIGFzeW5jIG9wZXJhdGlvbixcbiAgICAgICAgICAvLyB3ZSB1c2UgYSBJSUZFIHRvIHByb2Nlc3MgdGhhdCBhbmQgZXZlbnR1YWxseSB1cGRhdGUgdGhlIHN0YXRlLlxuICAgICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoY29tbWFuZCkge1xuICAgICAgICAgICAgICBjb25zdCBuZXh0Q29tbWFuZHMgPSBhd2FpdCBnZXROZXh0Q29tbWFuZHNGcm9tUGFyZW50KGNvbW1hbmQpO1xuICAgICAgICAgICAgICAvLyBhdm9pZCBtb3ZpbmcgY3Vyc29yIHdoZW4gdGhlcmUgYXJlIHN1Yi1vcHRpb25zXG4gICAgICAgICAgICAgIGlmIChuZXh0Q29tbWFuZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIC8vIEVuc3VyZSB0aGUgc2VhcmNoIHRleHQgaGFzIG5vdCBjaGFuZ2VkIHdoaWxlIHdlIHdlcmUgbG9hZGluZ1xuICAgICAgICAgICAgICAgIC8vIHRoZSBuZXh0IHJlc3VsdHMsIG90aGVyd2lzZSB3ZSdkIGludGVycnVwdCB0aGUgdXNlci5cbiAgICAgICAgICAgICAgICAvLyBUaHJvdyBhd2F5IHRoZSByZXN1bHRzIGluIGNhc2UgdGhlIHNlYXJjaCB0ZXh0IGhhcyBjaGFuZ2VkLlxuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5zZWFyY2hUZXh0ID09PSBzZWFyY2hUZXh0KSB7XG4gICAgICAgICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzZXROZXh0Q29tbWFuZHMnLFxuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkOiB7IHJlc3VsdHM6IG5leHRDb21tYW5kcyB9LFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2hha2UoKTtcbiAgICAgICAgICB9KSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0Jykge1xuICAgICAgICAgIC8vIGdvIGxlZnQgaW4gc3RhY2tcbiAgICAgICAgICBjb25zdCBwcmV2Q29tbWFuZCA9IGxhc3Qoc3RhdGUuc3RhY2spO1xuXG4gICAgICAgICAgLy8gZG8gbm90aGluZyB3aGVuIHdlIGNhbid0IGdvIGxlZnQgYW55bW9yZVxuICAgICAgICAgIGlmICghcHJldkNvbW1hbmQpIHJldHVybjtcblxuICAgICAgICAgIC8vIHByZXZlbnQgY3Vyc29yIGZyb20ganVtcGluZyBhIGNoYXIgdG8gdGhlIGxlZnQgaW4gdGV4dCBpbnB1dFxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAnc2V0UHJldkNvbW1hbmRzJyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgICAgc2VhcmNoVGV4dDogcHJldkNvbW1hbmQuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgcmVzdWx0czogcHJldkNvbW1hbmQucmVzdWx0cyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBnZXROZXh0Q29tbWFuZHNGcm9tUGFyZW50LFxuICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXMsXG4gICAgICBzaGFrZSxcbiAgICAgIHN0YXRlLFxuICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IsXG4gICAgXVxuICApO1xuICBjb25zdCBoYW5kbGVLZXlVcCA9IHVzZUNhbGxiYWNrPEtleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+PihcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIC8vIHNldHRpbmcgdGhlIHNlbGVjdGlvbiBjYW4gb25seSBoYXBwZW4gaW4gb25LZXlVcFxuICAgICAgaWYgKHNob3VsZFNlbGVjdEZpZWxkVGV4dC5jdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgIGlucHV0LmZvY3VzKCk7XG4gICAgICAgIGlucHV0LnNlbGVjdCgpO1xuICAgICAgICBzaG91bGRTZWxlY3RGaWVsZFRleHQuY3VycmVudCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQua2V5ICE9PSAnRW50ZXInICYmICFpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQpIHJldHVybiB0cnVlO1xuXG4gICAgICAvLyBVc2VyIGp1c3QgdHJpZ2dlcmVkIHRoZSBzZWFyY2hcbiAgICAgIGlmIChzdGF0ZS5zZWxlY3RlZFJlc3VsdCA9PT0gLTEpIHJldHVybiB0cnVlO1xuXG4gICAgICAvLyBVc2VyIGhhZCBzb21ldGhpbmcgc2VsZWN0ZWQgYW5kIHdhbnRzIHRvIGdvIHRoZXJlXG4gICAgICBleGVjdXRlKHN0YXRlLnJlc3VsdHNbc3RhdGUuc2VsZWN0ZWRSZXN1bHRdLCB7XG4gICAgICAgIG9wZW5Jbk5ld1RhYjogaXNOZXdXaW5kb3dDb21iby5jdXJyZW50LFxuICAgICAgfSk7XG5cbiAgICAgIGlzTmV3V2luZG93Q29tYm8uY3VycmVudCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBbZXhlY3V0ZSwgc3RhdGUucmVzdWx0cywgc3RhdGUuc2VsZWN0ZWRSZXN1bHRdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUNhbGxiYWNrPENoYW5nZUV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50Pj4oXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBzZWFyY2hUZXh0ID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgICAgaWYgKHNlYXJjaFRleHQudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdyZXNldCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnc2VhcmNoVGV4dCcsIHBheWxvYWQ6IHNlYXJjaFRleHQgfSk7XG5cbiAgICAgIC8vIEEgc2VhcmNoIHZpYSBuZXR3b3JrIGlzIG9ubHkgdHJpZ2dlcmVkIHdoZW4gdGhlcmVcbiAgICAgIC8vIGFyZSBtb3JlIHRoYW4gdGhyZWUgY2hhcmFjdGVycy4gU28gbm8gZmFsc2UgbG9hZGluZ1xuICAgICAgLy8gaW5kaWNhdGlvbiBpcyBnaXZlbi5cbiAgICAgIGlmIChzZWFyY2hUZXh0LnRyaW0oKS5sZW5ndGggPiAzKSB7XG4gICAgICAgIHNldElzTG9hZGluZygpO1xuICAgICAgfVxuXG4gICAgICBzZWFyY2hGcm9tUGFyZW50KHNlYXJjaFRleHQpLnRoZW4oXG4gICAgICAgIChhc3luY1Jlc3VsdHM6IENvbW1hbmRbXSkgPT4ge1xuICAgICAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yKCk7XG4gICAgICAgICAgdW5zZXRJc0xvYWRpbmcoKTtcblxuICAgICAgICAgIGNvbnN0IGZ1c2UgPSBuZXcgRnVzZShhc3luY1Jlc3VsdHMsIHtcbiAgICAgICAgICAgIGtleXM6IFtcbiAgICAgICAgICAgICAgeyBuYW1lOiAndGV4dCcsIHdlaWdodDogMC42IH0sXG4gICAgICAgICAgICAgIHsgbmFtZTogJ2tleXdvcmRzJywgd2VpZ2h0OiAwLjQgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBtaW5NYXRjaENoYXJMZW5ndGg6IDIsXG4gICAgICAgICAgICBpbmNsdWRlU2NvcmU6IHRydWUsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCBzZWFyY2hSZXN1bHRzID0gZnVzZVxuICAgICAgICAgICAgLnNlYXJjaChzZWFyY2hUZXh0KVxuICAgICAgICAgICAgLy8gRmlsdGVyIG91dCByZXN1bHRzIHdpdGggYSBtYXRjaGluZyBzY29yZSBvdmVyIDAuNzVcbiAgICAgICAgICAgIC5maWx0ZXIoKHJlc3VsdCkgPT4gKHJlc3VsdC5zY29yZSA/IHJlc3VsdC5zY29yZSA8IDAuNzUgOiBmYWxzZSkpXG4gICAgICAgICAgICAvLyBLZWVwIGEgbWF4aW1hbCBvZiA5IHJlc3VsdHNcbiAgICAgICAgICAgIC5zbGljZSgwLCA5KTtcblxuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdzZXRTZWFyY2hUZXh0UmVzdWx0cycsXG4gICAgICAgICAgICBwYXlsb2FkOiBzZWFyY2hSZXN1bHRzLm1hcCgocmVzdWx0KSA9PiByZXN1bHQuaXRlbSksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICB1bnNldElzTG9hZGluZygpO1xuICAgICAgICAgIHNldEhhc05ldHdvcmtFcnJvcigpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0sXG4gICAgW1xuICAgICAgc2VhcmNoRnJvbVBhcmVudCxcbiAgICAgIHNldEhhc05ldHdvcmtFcnJvcixcbiAgICAgIHNldElzTG9hZGluZyxcbiAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yLFxuICAgICAgdW5zZXRJc0xvYWRpbmcsXG4gICAgXVxuICApO1xuICBjb25zdCBoYW5kbGVDb250YWluZXJDbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdyZXNldFJlc3VsdHNXaGVuQ2xvc2luZycgfSk7XG4gICAgb25DbG9zZUZyb21QYXJlbnQoKTtcbiAgfSwgW29uQ2xvc2VGcm9tUGFyZW50XSk7XG5cbiAgY29uc3QgY3JlYXRlQ29tbWFuZE1vdXNlRW50ZXJIYW5kbGVyID0gdXNlQ2FsbGJhY2s8XG4gICAgKGluZGV4OiBudW1iZXIpID0+IE1vdXNlRXZlbnRIYW5kbGVyPEhUTUxEaXZFbGVtZW50PlxuICA+KFxuICAgIChpbmRleCkgPT4gKCkgPT4ge1xuICAgICAgLy8gSW4gY2FzZSB0aGUgY3Vyc29yIGhhcHBlbmVkIHRvIGJlIGluIGEgbG9jYXRpb24gd2hlcmUgYVxuICAgICAgLy8gcmVzdWx0IHdvdWxkIGFwcGVhciwgaXQgd291bGQgdHJpZ2dlciBvbk1vdXNlRW50ZXIgYW5kIHRoZVxuICAgICAgLy8gcmVzdWx0IHdvdWxkIGJlIHNlbGVjdGVkIGltbWVkaWF0ZWx5LiBUaGlzIGlzIG5vdCBzb21ldGhpbmdcbiAgICAgIC8vIGEgdXNlciB3b3VsZCBleHBlY3QsIGhlbmNlIHdlIHByZXZlbnQgaXQgZnJvbSBoYXBwZW5pbmcuXG4gICAgICAvLyBUaGUgdXNlciBoYXMgdG8gbW92ZSB0aGUgY3Vyc29yIHRvIGFuIG9wdGlvbiBleHBsaWNpdGx5IGZvclxuICAgICAgLy8gaXQgdG8gYmVjb21lIGFjdGl2ZS4gSG93ZXZlciwgdGhlIHVzZXIgY2FuIGFsd2F5cyBjbGljayBhbmRcbiAgICAgIC8vIHRoYXQgYWN0aW9uIHdpbGwgYmUgdHJpZ2dlcmVkLlxuICAgICAgaWYgKHNraXBOZXh0U2VsZWN0aW9uLmN1cnJlbnQpIHtcbiAgICAgICAgc2tpcE5leHRTZWxlY3Rpb24uY3VycmVudCA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIHNldHMgdGhlIHNlbGVjdGVkIHJlc3VsdCwgbWFpbmx5IGZvciB0aGUgaG92ZXIgZWZmZWN0XG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdzZWxlY3RlZFJlc3VsdCcsIHBheWxvYWQ6IGluZGV4IH0pO1xuICAgIH0sXG4gICAgW11cbiAgKTtcbiAgY29uc3QgY3JlYXRlQ29tbWFuZENsaWNrSGFuZGxlciA9IHVzZUNhbGxiYWNrPFxuICAgIChjb21tYW5kOiBDb21tYW5kKSA9PiBNb3VzZUV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD5cbiAgPihcbiAgICAoY29tbWFuZCkgPT4gKGV2ZW50KSA9PiB7XG4gICAgICBleGVjdXRlKGNvbW1hbmQsIHtcbiAgICAgICAgb3BlbkluTmV3VGFiOiBoYXNOZXdXaW5kb3dNb2RpZmllcihldmVudCksXG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtleGVjdXRlXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPEJ1dGxlckNvbnRhaW5lclxuICAgICAgb25DbGljaz17aGFuZGxlQ29udGFpbmVyQ2xpY2t9XG4gICAgICBkYXRhLXRlc3RpZD1cInF1aWNrLWFjY2Vzc1wiXG4gICAgICB0YWJJbmRleD17LTF9XG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICByZWY9e3NlYXJjaENvbnRhaW5lclJlZn1cbiAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yU3VyZmFjZX07XG4gICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICR7Y3VzdG9tUHJvcGVydGllcy5ib3JkZXJSYWRpdXM0fTtcbiAgICAgICAgICBtaW4taGVpZ2h0OiA0MHB4O1xuXG4gICAgICAgICAgLyogb25lIG1vcmUgdGhhbiBhcHAtYmFyICgyMDAwMCkgYW5kIG9uZSBtb3JlIHRoYW4gdGhlIG92ZXJsYXkgKDIwMDAxKSAqL1xuICAgICAgICAgIHotaW5kZXg6IDIwMDAyO1xuICAgICAgICAgIHdpZHRoOiA0MDBweDtcbiAgICAgICAgICBtYXJnaW46IDQwcHggYXV0bztcbiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogMCAxMHB4IDMwcHggLThweCByZ2JhKDAsIDAsIDAsIDAuNzUpO1xuICAgICAgICAgIC1tb3otYm94LXNoYWRvdzogMCAxMHB4IDMwcHggLThweCByZ2JhKDAsIDAsIDAsIDAuNzUpO1xuICAgICAgICAgIGJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogJHtzdGF0ZS5oYXNOZXR3b3JrRXJyb3JcbiAgICAgICAgICAgID8gJzAnXG4gICAgICAgICAgICA6IGN1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICBgfVxuICAgICAgICBvbkNsaWNrPXsoZXZlbnQpID0+IHtcbiAgICAgICAgICAvLyBBdm9pZCBjbG9zaW5nIHdoZW4gdGhlIHNlYXJjaENvbnRhaW5lciBpdHNlbGYgaXMgY2xpY2tlZFxuICAgICAgICAgIC8vIElmIHdlIGRvbid0IGRvIHRoaXMsIHRoZW4gdGhlIG92ZXJsYXkgd2lsbCBjbG9zZSB3aGVuIGUuZy5cbiAgICAgICAgICAvLyB0aGUgc2VhcmNoIGlucHV0IGlzIGNsaWNrZWQuXG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBgfVxuICAgICAgICA+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICBodG1sRm9yPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6ICR7Y3VzdG9tUHJvcGVydGllcy5zcGFjaW5nTX07XG4gICAgICAgICAgICAgIG1hcmdpbi10b3A6ICR7Y3VzdG9tUHJvcGVydGllcy5zcGFjaW5nU307XG4gICAgICAgICAgICBgfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxTZWFyY2hJY29uIGNvbG9yPVwibmV1dHJhbDYwXCIgLz5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgaWQ9XCJxdWljay1hY2Nlc3Mtc2VhcmNoLWlucHV0XCJcbiAgICAgICAgICAgIHJlZj17c2VhcmNoSW5wdXRSZWZ9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj17aW50bC5mb3JtYXRNZXNzYWdlKG1lc3NhZ2VzLmlucHV0UGxhY2Vob2Rlcil9XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICAgICAgb3V0bGluZTogMDtcbiAgICAgICAgICAgICAgZm9udC1zaXplOiAyMnB4O1xuICAgICAgICAgICAgICBmb250LXdlaWdodDogMzAwO1xuICAgICAgICAgICAgICBwYWRkaW5nOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019ICR7Y3VzdG9tUHJvcGVydGllcy5zcGFjaW5nTX1cbiAgICAgICAgICAgICAgICAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9ICR7Y3VzdG9tUHJvcGVydGllcy5zcGFjaW5nU307XG4gICAgICAgICAgICAgICY6OnBsYWNlaG9sZGVyIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yTmV1dHJhbDYwfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgYH1cbiAgICAgICAgICAgIHZhbHVlPXtzdGF0ZS5zZWFyY2hUZXh0fVxuICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgIG9uS2V5RG93bj17aGFuZGxlS2V5RG93bn1cbiAgICAgICAgICAgIG9uS2V5VXA9e2hhbmRsZUtleVVwfVxuICAgICAgICAgICAgYXV0b0ZvY3VzPXt0cnVlfVxuICAgICAgICAgICAgYXV0b0NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICB7c3RhdGUuaXNMb2FkaW5nICYmIChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6ICR7Y3VzdG9tUHJvcGVydGllcy5zcGFjaW5nU307XG4gICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8TG9hZGluZ1NwaW5uZXIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICBpZiAoc3RhdGUuaGFzTmV0d29ya0Vycm9yKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgICAgICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JFcnJvcn07XG4gICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICAgICAgICAgICAgY29sb3I6ICR7Y3VzdG9tUHJvcGVydGllcy5jb2xvclN1cmZhY2V9O1xuICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAke2N1c3RvbVByb3BlcnRpZXMuZm9udFNpemVTbWFsbH07XG4gICAgICAgICAgICAgICAgICBwYWRkaW5nOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1hzfTtcbiAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2Ugey4uLm1lc3NhZ2VzLm9mZmxpbmV9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChzdGF0ZS5yZXN1bHRzLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5zZWFyY2hUZXh0LnRyaW0oKS5sZW5ndGggPiAwKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgICAgICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JOZXV0cmFsfTtcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JTb2xpZH07XG4gICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAke2N1c3RvbVByb3BlcnRpZXMuZm9udFNpemVTbWFsbH07XG4gICAgICAgICAgICAgICAgICBwYWRkaW5nOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1hzfTtcbiAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2Ugey4uLm1lc3NhZ2VzLm5vUmVzdWx0c30gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuIHN0YXRlLnJlc3VsdHMubWFwKChjb21tYW5kLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPEJ1dGxlckNvbW1hbmRcbiAgICAgICAgICAgICAga2V5PXtjb21tYW5kLmlkfVxuICAgICAgICAgICAgICBjb21tYW5kPXtjb21tYW5kfVxuICAgICAgICAgICAgICBpc1NlbGVjdGVkPXtzdGF0ZS5zZWxlY3RlZFJlc3VsdCA9PT0gaW5kZXh9XG4gICAgICAgICAgICAgIG9uTW91c2VFbnRlcj17Y3JlYXRlQ29tbWFuZE1vdXNlRW50ZXJIYW5kbGVyKGluZGV4KX1cbiAgICAgICAgICAgICAgb25DbGljaz17Y3JlYXRlQ29tbWFuZENsaWNrSGFuZGxlcihjb21tYW5kKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSk7XG4gICAgICAgIH0pKCl9XG4gICAgICA8L2Rpdj5cbiAgICA8L0J1dGxlckNvbnRhaW5lcj5cbiAgKTtcbn07XG5CdXRsZXIuZGlzcGxheU5hbWUgPSAnQnV0bGVyJztcblxuY29uc3QgQnV0bGVyV2l0aEFuaW1hdGlvbiA9IChwcm9wczogT21pdDxQcm9wcywgJ2NsYXNzTmFtZVNoYWtlQW5pbWF0aW9uJz4pID0+IChcbiAgPENsYXNzTmFtZXM+XG4gICAgeyh7IGNzcyB9KSA9PiAoXG4gICAgICA8QnV0bGVyXG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgY2xhc3NOYW1lU2hha2VBbmltYXRpb249e2Nzc2BcbiAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IDAuNDVzO1xuICAgICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGJvdGg7XG4gICAgICAgICAgYW5pbWF0aW9uLW5hbWU6ICR7c2hha2VBbmltYXRpb259O1xuICAgICAgICBgfVxuICAgICAgLz5cbiAgICApfVxuICA8L0NsYXNzTmFtZXM+XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBCdXRsZXJXaXRoQW5pbWF0aW9uO1xuIl19 */"),
1009
- value: state.searchText,
1010
- onChange: handleChange,
1011
- onKeyDown: handleKeyDown,
1012
- onKeyUp: handleKeyUp,
1013
- autoFocus: true,
1014
- autoComplete: "off",
1015
- "data-testid": "quick-access-search-input"
1016
- }), state.isLoading && jsxRuntime.jsx("div", {
1017
- css: /*#__PURE__*/react.css("align-self:center;margin-top:", designSystem.customProperties.spacingS, ";margin-right:", designSystem.customProperties.spacingS, ";" + (process.env.NODE_ENV === "production" ? "" : ";label:Butler;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBMHBCc0IiLCJmaWxlIjoiYnV0bGVyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgQ29tbWFuZCxcbiAgU2VhcmNoVGV4dCxcbiAgU2VsZWN0ZWRSZXN1bHQsXG4gIFN0YWNrLFxuICBIaXN0b3J5RW50cnksXG59IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtcbiAgS2V5Ym9hcmRFdmVudEhhbmRsZXIsXG4gIENoYW5nZUV2ZW50SGFuZGxlcixcbiAgS2V5Ym9hcmRFdmVudCxcbiAgTW91c2VFdmVudEhhbmRsZXIsXG4gIE1vdXNlRXZlbnQsXG4gIHVzZVJlZHVjZXIsXG4gIHVzZVJlZixcbiAgdXNlQ2FsbGJhY2ssXG59IGZyb20gJ3JlYWN0JztcbmltcG9ydCBGdXNlIGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IHsgRm9ybWF0dGVkTWVzc2FnZSwgdXNlSW50bCB9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IGxhc3QgZnJvbSAnbG9kYXNoL2xhc3QnO1xuaW1wb3J0IHsgY3NzLCBrZXlmcmFtZXMsIENsYXNzTmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgTG9hZGluZ1NwaW5uZXIgZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvbG9hZGluZy1zcGlubmVyJztcbmltcG9ydCB7IFNlYXJjaEljb24gfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9pY29ucyc7XG5pbXBvcnQgeyBjdXN0b21Qcm9wZXJ0aWVzIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgQnV0bGVyQ29tbWFuZCBmcm9tICcuLi9idXRsZXItY29tbWFuZCc7XG5pbXBvcnQgQnV0bGVyQ29udGFpbmVyIGZyb20gJy4uL2J1dGxlci1jb250YWluZXInO1xuaW1wb3J0IG1lc3NhZ2VzIGZyb20gJy4uL21lc3NhZ2VzJztcblxuY29uc3QgaXNTZWxlY3RBbGxDb21ibyA9IChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cbiAgZXZlbnQua2V5ID09PSAnYScgJiZcbiAgZXZlbnQubWV0YUtleSAmJlxuICAhZXZlbnQuY3RybEtleSAmJlxuICAhZXZlbnQuYWx0S2V5ICYmXG4gICFldmVudC5zaGlmdEtleTtcblxuY29uc3QgaXNDbG9zZUNvbWJvID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PlxuICBldmVudC5rZXkgPT09ICdFc2NhcGUnICYmXG4gICFldmVudC5tZXRhS2V5ICYmXG4gICFldmVudC5jdHJsS2V5ICYmXG4gICFldmVudC5hbHRLZXkgJiZcbiAgIWV2ZW50LnNoaWZ0S2V5O1xuXG5jb25zdCBnZXRQbGF0Zm9ybSA9ICgpID0+IHtcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdXaW4nKSkgcmV0dXJuICd3aW5kb3dzJztcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdNYWMnKSkgcmV0dXJuICdtYWNvcyc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnWDExJykpIHJldHVybiAndW5peCc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnTGludXgnKSkgcmV0dXJuICdsaW51eCc7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBoYXNOZXdXaW5kb3dNb2RpZmllciA9IChcbiAgZXZlbnQ6IEtleWJvYXJkRXZlbnQ8SFRNTEVsZW1lbnQ+IHwgTW91c2VFdmVudDxIVE1MRWxlbWVudD5cbikgPT4ge1xuICBjb25zdCBwbGF0Zm9ybSA9IGdldFBsYXRmb3JtKCk7XG4gIHN3aXRjaCAocGxhdGZvcm0pIHtcbiAgICBjYXNlICdtYWNvcyc6XG4gICAgICByZXR1cm4gZXZlbnQubWV0YUtleTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGV2ZW50LmN0cmxLZXk7XG4gIH1cbn07XG5cbmNvbnN0IHNoYWtlQW5pbWF0aW9uID0ga2V5ZnJhbWVzYFxuICBmcm9tLFxuICB0byB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcbiAgfVxuXG4gIDE0JSxcbiAgNDIlLFxuICA3MCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTNweCwgMCwgMCk7XG4gIH1cblxuICAyOCUsXG4gIDU2JSxcbiAgODQlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDNweCwgMCwgMCk7XG4gIH1cbmA7XG5cbnR5cGUgU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogYm9vbGVhbjtcbiAgaXNMb2FkaW5nOiBib29sZWFuO1xuICBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0O1xuICBzZWxlY3RlZFJlc3VsdDogU2VsZWN0ZWRSZXN1bHQ7XG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IGJvb2xlYW47XG4gIHJlc3VsdHM6IENvbW1hbmRbXTtcbiAgc3RhY2s6IFN0YWNrW107XG59O1xudHlwZSBBY3Rpb24gPVxuICB8IHsgdHlwZTogJ25ldHdvcmtFcnJvcic7IHBheWxvYWQ6IGJvb2xlYW4gfVxuICB8IHsgdHlwZTogJ2xvYWRpbmcnOyBwYXlsb2FkOiBib29sZWFuIH1cbiAgfCB7IHR5cGU6ICdzZWxlY3RlZFJlc3VsdCc7IHBheWxvYWQ6IG51bWJlciB9XG4gIHwgeyB0eXBlOiAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH1cbiAgfCB7IHR5cGU6ICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfVxuICB8IHtcbiAgICAgIHR5cGU6ICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JztcbiAgICAgIHBheWxvYWQ6IHsgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDsgcmVzdWx0czogQ29tbWFuZFtdIH07XG4gICAgfVxuICB8IHsgdHlwZTogJ3NldE5leHRDb21tYW5kcyc7IHBheWxvYWQ6IHsgcmVzdWx0czogQ29tbWFuZFtdIH0gfVxuICB8IHtcbiAgICAgIHR5cGU6ICdzZXRQcmV2Q29tbWFuZHMnO1xuICAgICAgcGF5bG9hZDogeyBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0OyByZXN1bHRzOiBDb21tYW5kW10gfTtcbiAgICB9XG4gIHwgeyB0eXBlOiAnc2VhcmNoVGV4dCc7IHBheWxvYWQ6IHN0cmluZyB9XG4gIHwgeyB0eXBlOiAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOyBwYXlsb2FkOiBDb21tYW5kW10gfVxuICB8IHsgdHlwZTogJ3Jlc2V0U2VhcmNoVGV4dCcgfVxuICB8IHsgdHlwZTogJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJyB9XG4gIHwgeyB0eXBlOiAncmVzZXQnIH07XG5jb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogZmFsc2UsXG4gIGlzTG9hZGluZzogZmFsc2UsXG4gIHNlYXJjaFRleHQ6ICcnLFxuICBzZWxlY3RlZFJlc3VsdDogLTEsXG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IHRydWUsXG4gIHJlc3VsdHM6IFtdLFxuICBzdGFjazogW10sXG59O1xuY29uc3QgcmVkdWNlciA9IChzdGF0ZTogU3RhdGUgPSBpbml0aWFsU3RhdGUsIGFjdGlvbjogQWN0aW9uKTogU3RhdGUgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnbmV0d29ya0Vycm9yJzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBoYXNOZXR3b3JrRXJyb3I6IGFjdGlvbi5wYXlsb2FkIH07XG4gICAgY2FzZSAnbG9hZGluZyc6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgaXNMb2FkaW5nOiBhY3Rpb24ucGF5bG9hZCB9O1xuICAgIGNhc2UgJ3NlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQgfTtcbiAgICBjYXNlICdpbmNyZW1lbnRTZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6XG4gICAgICAgICAgc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IHN0YXRlLnJlc3VsdHMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0ICsgMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ2RlY3JlbWVudFNlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDpcbiAgICAgICAgICBzdGF0ZS5zZWxlY3RlZFJlc3VsdCA8IDFcbiAgICAgICAgICAgID8gc3RhdGUucmVzdWx0cy5sZW5ndGggLSAxXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0IC0gMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ3BpY2tDb21tYW5kRnJvbUhpc3RvcnknOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OiAwLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZC5zZWFyY2hUZXh0LFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZC5yZXN1bHRzLFxuICAgICAgICBzdGFjazogW10sXG4gICAgICAgIC8vIFRoZSBoaXN0b3J5IGRvZXMgbm90IGdldCBjaGFuZ2VkIGhlcmUsIGl0IHdpbGwgYmUgY2hhbmdlZCBhbG9uZ1xuICAgICAgICAvLyB3aXRoIHRoZSByZWd1bGFyIGZsb3cuXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldE5leHRDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc3RhY2s6IFtcbiAgICAgICAgICAuLi5zdGF0ZS5zdGFjayxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZWFyY2hUZXh0OiBzdGF0ZS5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgcmVzdWx0czogc3RhdGUucmVzdWx0cyxcbiAgICAgICAgICAgIHNlbGVjdGVkUmVzdWx0OiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogMCxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLnJlc3VsdHMsXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldFByZXZDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQuc2VhcmNoVGV4dCxcbiAgICAgICAgcmVzdWx0czogYWN0aW9uLnBheWxvYWQucmVzdWx0cyxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IDAsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgICAvLyBvbWl0IGxhc3QgaXRlbVxuICAgICAgICBzdGFjazogc3RhdGUuc3RhY2suc2xpY2UoMCwgLTEpLFxuICAgICAgfTtcbiAgICBjYXNlICdzZWFyY2hUZXh0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgLy8gY2xlYXIgbmV0d29yayBlcnJvciB3aGVuIHNlYXJjaCB0ZXh0IGlzIGNsZWFyZWQsIHNvIHRoYXQgdXNlcnNcbiAgICAgICAgLy8gYXJlIHRlbXB0ZWQgdG8gcmV0cnlcbiAgICAgICAgaGFzTmV0d29ya0Vycm9yOiBhY3Rpb24ucGF5bG9hZC5sZW5ndGggPiAwICYmIHN0YXRlLmhhc05ldHdvcmtFcnJvcixcbiAgICAgIH07XG4gICAgY2FzZSAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQubGVuZ3RoID4gMCA/IDAgOiAtMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogdHJ1ZSxcbiAgICAgICAgc3RhY2s6IFtdLFxuICAgICAgfTtcbiAgICBjYXNlICdyZXNldFNlYXJjaFRleHQnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlYXJjaFRleHQ6ICcnLCByZXN1bHRzOiBbXSwgc2VsZWN0ZWRSZXN1bHQ6IC0xIH07XG4gICAgY2FzZSAncmVzZXRSZXN1bHRzV2hlbkNsb3NpbmcnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlbGVjdGVkUmVzdWx0OiAtMSwgZW5hYmxlSGlzdG9yeTogdHJ1ZSB9O1xuICAgIGNhc2UgJ3Jlc2V0JzpcbiAgICAgIHJldHVybiBpbml0aWFsU3RhdGU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufTtcblxudHlwZSBQcm9wcyA9IHtcbiAgaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdO1xuICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlOiAoaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdKSA9PiB2b2lkO1xuICBzZWFyY2g6IChzZWFyY2hUZXh0OiBTZWFyY2hUZXh0KSA9PiBQcm9taXNlPENvbW1hbmRbXT47XG4gIGdldE5leHRDb21tYW5kczogKGNvbW1hbmQ6IENvbW1hbmQpID0+IFByb21pc2U8Q29tbWFuZFtdPjtcbiAgZXhlY3V0ZUNvbW1hbmQ6IChjb21tYW5kOiBDb21tYW5kLCBtZXRhOiB7IG9wZW5Jbk5ld1RhYjogYm9vbGVhbiB9KSA9PiB2b2lkO1xuICBvbkNsb3NlOiAoKSA9PiB2b2lkO1xuICBjbGFzc05hbWVTaGFrZUFuaW1hdGlvbjogc3RyaW5nO1xufTtcbmNvbnN0IEJ1dGxlciA9IChwcm9wczogUHJvcHMpID0+IHtcbiAgY29uc3QgaW50bCA9IHVzZUludGwoKTtcbiAgY29uc3QgW3N0YXRlLCBkaXNwYXRjaF0gPSB1c2VSZWR1Y2VyPFxuICAgIChwcmV2U3RhdGU6IFN0YXRlLCBhY3Rpb246IEFjdGlvbikgPT4gU3RhdGVcbiAgPihyZWR1Y2VyLCBpbml0aWFsU3RhdGUpO1xuXG4gIGNvbnN0IHNob3VsZFNlbGVjdEZpZWxkVGV4dCA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IGlzTmV3V2luZG93Q29tYm8gPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBza2lwTmV4dFNlbGVjdGlvbiA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IHNlYXJjaENvbnRhaW5lclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IHNlYXJjaElucHV0UmVmID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KG51bGwpO1xuXG4gIGNvbnN0IHNldEhhc05ldHdvcmtFcnJvciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICduZXR3b3JrRXJyb3InLCBwYXlsb2FkOiB0cnVlIH0pO1xuICB9LCBbXSk7XG4gIGNvbnN0IHVuc2V0SGFzTmV0d29ya0Vycm9yID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ25ldHdvcmtFcnJvcicsIHBheWxvYWQ6IGZhbHNlIH0pO1xuICB9LCBbXSk7XG4gIGNvbnN0IHNldElzTG9hZGluZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdsb2FkaW5nJywgcGF5bG9hZDogdHJ1ZSB9KTtcbiAgfSwgW10pO1xuICBjb25zdCB1bnNldElzTG9hZGluZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdsb2FkaW5nJywgcGF5bG9hZDogZmFsc2UgfSk7XG4gIH0sIFtdKTtcblxuICAvLyBEZXN0cnVjdHVyZSBmdW5jdGlvbnMgZnJvbSBwcm9wcyB0byByZWZlcmVuY2UgdGhlbSBpbiB0aGUgaG9vayBkZXBlbmRlbmN5IGxpc3RcbiAgY29uc3Qge1xuICAgIHNlYXJjaDogc2VhcmNoRnJvbVBhcmVudCxcbiAgICBvbkNsb3NlOiBvbkNsb3NlRnJvbVBhcmVudCxcbiAgICBleGVjdXRlQ29tbWFuZDogZXhlY3V0ZUNvbW1hbmRGcm9tUGFyZW50LFxuICAgIG9uSGlzdG9yeUVudHJpZXNDaGFuZ2U6IG9uSGlzdG9yeUVudHJpZXNDaGFuZ2VGcm9tUGFyZW50LFxuICAgIGdldE5leHRDb21tYW5kczogZ2V0TmV4dENvbW1hbmRzRnJvbVBhcmVudCxcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHNoYWtlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChzZWFyY2hDb250YWluZXJSZWYuY3VycmVudCkge1xuICAgICAgc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQuY2xhc3NMaXN0LnJlbW92ZShcbiAgICAgICAgcHJvcHMuY2xhc3NOYW1lU2hha2VBbmltYXRpb25cbiAgICAgICk7XG4gICAgICAvLyAtPiB0cmlnZ2VyaW5nIHJlZmxvd1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXZvaWRcbiAgICAgIHZvaWQgc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQub2Zmc2V0V2lkdGg7XG4gICAgICBzZWFyY2hDb250YWluZXJSZWYuY3VycmVudC5jbGFzc0xpc3QuYWRkKHByb3BzLmNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uKTtcbiAgICB9XG4gIH0sIFtwcm9wcy5jbGFzc05hbWVTaGFrZUFuaW1hdGlvbl0pO1xuXG4gIGNvbnN0IGV4ZWN1dGUgPSB1c2VDYWxsYmFjayhcbiAgICAoY29tbWFuZCwgbWV0YSkgPT4ge1xuICAgICAgLy8gT25seSBtYWluIGVudHJpZXMgZ2V0IGFkZGVkIHRvIGhpc3RvcnksIHNvIHdoZW4gYSBzdWJjb21tYW5kIGlzIGV4ZWN1dGVkLFxuICAgICAgLy8gd2UgYWRkIHRoZSBtYWluIGNvbW1hbmQgb2YgaXQgdG8gdGhlIGhpc3RvcnkgKHRoZSB0b3AtbGV2ZWwgY29tbWFuZCkuXG4gICAgICAvL1xuICAgICAgLy8gVGhlIGtleSB0byBpZGVudGlmeSBoaXN0b3J5IGVudHJpZXMgYnkgaXMgYWx3YXlzIHRoZSBzZWFyY2hUZXh0XG4gICAgICAvLyBUaGVyZSB3aWxsIG5ldmVyIGJlIHR3byBoaXN0b3J5IGVudHJpZXMgd2l0aCB0aGUgc2FtZSBzZWFyY2hUZXh0XG4gICAgICBjb25zdCBlbnRyeSA9XG4gICAgICAgIHN0YXRlLnN0YWNrLmxlbmd0aCA9PT0gMFxuICAgICAgICAgID8gLy8gVGhlIHN0YWNrIGlzIGVtcHR5LCBzbyB3ZSBhcmUgZXhlY3V0aW5nIGEgdG9wLWxldmVsIGNvbW1hbmRcbiAgICAgICAgICAgIHsgc2VhcmNoVGV4dDogc3RhdGUuc2VhcmNoVGV4dCwgcmVzdWx0czogc3RhdGUucmVzdWx0cyB9XG4gICAgICAgICAgOiAvLyBXZSBhcmUgZXhlY3V0aW5nIGEgc3ViY29tbWFuZCwgc28gd2UgZ2V0IHRoZSB0b3AtbGV2ZWwgY29tbWFuZCBmb3IgaXQsXG4gICAgICAgICAgICAvLyB3aGljaCBpcyBhdCB0aGUgYm90dG9tIG9mIHRoZSBzdGFjay5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc2VhcmNoVGV4dDogc3RhdGUuc3RhY2tbMF0uc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgcmVzdWx0czogc3RhdGUuc3RhY2tbMF0ucmVzdWx0cyxcbiAgICAgICAgICAgIH07XG5cbiAgICAgIC8vIEFkZCB0aGUgZW50cnkgdG8gdGhlIGhpc3RvcnksIHdoaWxlIGV4Y2x1ZGluZyBhbnkgZWFybGllciBoaXN0b3J5IGVudHJ5XG4gICAgICAvLyB3aXRoIHRoZSBzYW1lIHNlYXJjaCB0ZXh0LiBUaGlzIGVmZmVjdGl2ZWx5IFwibW92ZXNcIiB0aGF0IGVudHJ5IHRvIHRoZVxuICAgICAgLy8gdG9wIG9mIHRoZSBoaXN0b3J5ICh3aXRoIHRoZSBtb3N0IHJlY2VudCByZXN1bHRzKSwgb3IgYXBwZW5kcyBhIG5ldyBlbnRyeVxuICAgICAgLy8gd2hlbiBpdCBkaWRuJ3QgZXhpc3QgYmVmb3JlLlxuICAgICAgb25IaXN0b3J5RW50cmllc0NoYW5nZUZyb21QYXJlbnQoW1xuICAgICAgICAuLi5wcm9wcy5oaXN0b3J5RW50cmllcy5maWx0ZXIoXG4gICAgICAgICAgKGNvbW1hbmQpID0+IGNvbW1hbmQuc2VhcmNoVGV4dCAhPT0gZW50cnkuc2VhcmNoVGV4dFxuICAgICAgICApLFxuICAgICAgICBlbnRyeSxcbiAgICAgIF0pO1xuXG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdyZXNldFNlYXJjaFRleHQnIH0pO1xuXG4gICAgICBvbkNsb3NlRnJvbVBhcmVudCgpO1xuXG4gICAgICBleGVjdXRlQ29tbWFuZEZyb21QYXJlbnQoY29tbWFuZCwgbWV0YSk7XG4gICAgfSxcbiAgICBbXG4gICAgICBleGVjdXRlQ29tbWFuZEZyb21QYXJlbnQsXG4gICAgICBvbkNsb3NlRnJvbVBhcmVudCxcbiAgICAgIG9uSGlzdG9yeUVudHJpZXNDaGFuZ2VGcm9tUGFyZW50LFxuICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXMsXG4gICAgICBzdGF0ZS5yZXN1bHRzLFxuICAgICAgc3RhdGUuc2VhcmNoVGV4dCxcbiAgICAgIHN0YXRlLnN0YWNrLFxuICAgIF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IHVzZUNhbGxiYWNrPEtleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+PihcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIC8vIFByZXZlbnRpbmcgY3Vyc29yIGp1bXBzIGNhbiBvbmx5IGhhcHBlbiBpbiBvbktleURvd24sIGJ1dCBub3QgaW4gb25LZXlVcFxuICAgICAgZXZlbnQucGVyc2lzdCgpO1xuXG4gICAgICAvLyBXZSB3YW50IHRvIGtub3cgd2hlbiB0aGUgdXNlciBwcmVzc2VzIGNtZCtlbnRlciAoY21kIGJlaW5nIGEgbWV0YSBrZXkpLlxuICAgICAgLy8gV2UgYXJlIG9ubHkgdG9sZCBhYm91dCB0aGlzIGluIGtleURvd24sIGJ1dCBub3QgaW4ga2V5VXAsIHNvIHdlIG5lZWRcbiAgICAgIC8vIHRvIGhhbmRsZSBpdCBoZXJlXG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInICYmIGhhc05ld1dpbmRvd01vZGlmaWVyKGV2ZW50KSkge1xuICAgICAgICBpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIEF2b2lkIHNlbGVjdGluZyB0aGUgd2hvbGUgcGFnZSB3aGVuIHVzZXIgc2VsZWN0ZXMgZXZlcnl0aGluZyB3aXRoXG4gICAgICAvLyBhIGtleWJvYXJkIHNob3J0Y3V0LiBUaGVyZSBpcyBwcm9iYWJseSBhIGJldHRlciB3YXkgdG8gZG8gdGhpcyB0aG91Z2guXG4gICAgICAvLyBUaGlzIHByZXZlbnRzIHRoZSB3aG9sZSBwYWdlIGZyb20gYmVpbmcgc2VsZWN0ZWQgaW4gY2FzZSB0aGUgdXNlclxuICAgICAgLy8gMSkgb3BlbnMgdGhlIHNlYXJjaCBib3hcbiAgICAgIC8vIDIpIHR5cGVzIGludG8gaXRcbiAgICAgIC8vIDMpIHNlbGVjdHMgYWxsIHRleHQgdXNpbmcgY21kK2FcbiAgICAgIC8vIDQpIGNsb3NlcyB0aGUgc2VhcmNoIGJveCB3aXRoIGVzY1xuICAgICAgLy8gV2l0aG91dCB0aGlzIGhhbmRsaW5nLCB0aGUgd2hvbGUgcGFnZSB3b3VsZCBub3cgYmUgc2VsZWN0ZWRcbiAgICAgIGlmIChpc1NlbGVjdEFsbENvbWJvKGV2ZW50KSkge1xuICAgICAgICAvLyBUaGlzIHN0b3BzIHRoZSBicm93c2VyIGZyb20gc2VsZWN0aW5nIGFueXRoaW5nXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmIChzZWFyY2hJbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgLy8gVGhpcyBzZWxlY3RzIHRoZSB0ZXh0IGluIHRoZSBzZWFyY2ggaW5wdXRcbiAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNldFNlbGVjdGlvblJhbmdlKDAsIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIGF2b2lkIGludGVyZmVyaW5nIHdpdGggb3RoZXIga2V5IGNvbWJpbmF0aW9ucyB1c2luZyBtb2RpZmllciBrZXlzXG4gICAgICBpZiAoZXZlbnQuY3RybEtleSB8fCBldmVudC5hbHRLZXkgfHwgZXZlbnQuc2hpZnRLZXkgfHwgZXZlbnQubWV0YUtleSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKGlzQ2xvc2VDb21ibyhldmVudCkpIHJldHVybjtcblxuICAgICAgLy8gc2tpcCBuZXh0IG1vdXNlRW50ZXIgdG8gYXZvaWQgc2V0dGluZyBzZWxlY3RlZFJlc3VsdCB3aGVuIGN1cnNvciBqdXN0XG4gICAgICAvLyBoYXBwZW5zIHRvIGJlIHdoZXJlIHRoZSByZXN1bHRzIHdpbGwgcG9wIHVwXG4gICAgICBza2lwTmV4dFNlbGVjdGlvbi5jdXJyZW50ID0gdHJ1ZTtcblxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgICAgLy8gcHJldmVudCBjdXJzb3IgZnJvbSBqdW1waW5nIHRvIGVuZCBvZiB0ZXh0IGlucHV0XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ2luY3JlbWVudFNlbGVjdGVkUmVzdWx0JyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICAgIC8vIGJyb3dzZSB0aHJvdWdoIGhpc3RvcnlcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgKHN0YXRlLnNlbGVjdGVkUmVzdWx0IDwgMSAmJiBzdGF0ZS5lbmFibGVIaXN0b3J5KVxuICAgICAgICApIHtcbiAgICAgICAgICBzaG91bGRTZWxlY3RGaWVsZFRleHQuY3VycmVudCA9IHRydWU7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRJbmRleCA9XG4gICAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICA/IC8vIFdoZW4gZ29pbmcgYmFjayB0aGUgZmlyc3Qgc3RlcFxuICAgICAgICAgICAgICAgIC0xXG4gICAgICAgICAgICAgIDogLy8gV2hlbiBnb2luZyBiYWNrIG1vcmUgdGhhbiBvbmUgc3RlcFxuICAgICAgICAgICAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgIChjb21tYW5kKSA9PiBjb21tYW5kLnNlYXJjaFRleHQgPT09IHN0YXRlLnNlYXJjaFRleHRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgIC8vIFBpY2sgdGhlIHByZXZpb3VzIGNvbW1hbmQgZnJvbSB0aGUgaGlzdG9yeVxuICAgICAgICAgIGNvbnN0IHByZXZDb21tYW5kID1cbiAgICAgICAgICAgIHNlbGVjdGVkSW5kZXggPT09IC0xXG4gICAgICAgICAgICAgID8gLy8gcHJldmlvdXMgY29tbWFuZCBvbiB0b3Agb2YgdGhlIGhpc3Rvcnkgd2hlbiBnb2luZyBiYWNrIG9uXG4gICAgICAgICAgICAgICAgLy8gZmlyc3Qgc3RlcFxuICAgICAgICAgICAgICAgIGxhc3QocHJvcHMuaGlzdG9yeUVudHJpZXMpXG4gICAgICAgICAgICAgIDogLy8gcHJldmlvdXMgY29tbWFuZCBpcyBkZWVwZXIgZG93blxuICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlIGhpc3RvcnkgZG9lcyBub3QgZXhpc3QgKG5lZ2F0aXZlIGluZGV4KSwgdGhlblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgaW1wbGljaXRseSByZXR1cm5zIHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzW3NlbGVjdGVkSW5kZXggLSAxXTtcbiAgICAgICAgICAvLyBTa2lwIHdoZW4gbm8gcHJldmlvdXMgZW50cnkgZXhpc3RzIGluIHRoZSBoaXN0b3J5XG4gICAgICAgICAgaWYgKCFwcmV2Q29tbWFuZCkgcmV0dXJuO1xuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgICAgc2VhcmNoVGV4dDogcHJldkNvbW1hbmQuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgcmVzdWx0czogcHJldkNvbW1hbmQucmVzdWx0cyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHByZXZlbnQgY3Vyc29yIGZyb20ganVtcGluZyB0byBiZWdpbm5pbmcgb2YgdGV4dCBpbnB1dFxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0ZS5zZWxlY3RlZFJlc3VsdCA+IC0xKSB7XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0Jykge1xuICAgICAgICAgIGNvbnN0IGNvbW1hbmQgPSBzdGF0ZS5yZXN1bHRzW3N0YXRlLnNlbGVjdGVkUmVzdWx0XTtcbiAgICAgICAgICBjb25zdCBzZWFyY2hUZXh0ID0gc3RhdGUuc2VhcmNoVGV4dDtcbiAgICAgICAgICBjb25zdCBpc0N1cnNvckF0RW5kID1cbiAgICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQgJiZcbiAgICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xuXG4gICAgICAgICAgY29uc3QgaXNFdmVyeXRoaW5nU2VsZWN0ZWQgPVxuICAgICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudCAmJlxuICAgICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydCA9PT0gMCAmJlxuICAgICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xuXG4gICAgICAgICAgLy8gb25seSBhbGxvdyBkaXZpbmcgaW4gd2hlbiBjdXJzb3IgaXMgYXQgZW5kIG9mIGlucHV0IG9yIHdoZW5cbiAgICAgICAgICAvLyB0aGUgY29tcGxldGUgdGV4dCBpcyBzZWxlY3RlZCAod2hlbiBicm93c2luZyB0aHJvdWdoIGhpc3RvcnkpXG4gICAgICAgICAgaWYgKCFpc0N1cnNvckF0RW5kICYmICFpc0V2ZXJ5dGhpbmdTZWxlY3RlZCkgcmV0dXJuO1xuXG4gICAgICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IoKTtcblxuICAgICAgICAgIC8vIE5PVEU6IHNpbmNlIHdlIG5lZWQgdG8gZmV0Y2ggdGhlIFwibmV4dCBjb21tYW5kXCIsIHdoaWNoIGlzIGFuIGFzeW5jIG9wZXJhdGlvbixcbiAgICAgICAgICAvLyB3ZSB1c2UgYSBJSUZFIHRvIHByb2Nlc3MgdGhhdCBhbmQgZXZlbnR1YWxseSB1cGRhdGUgdGhlIHN0YXRlLlxuICAgICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoY29tbWFuZCkge1xuICAgICAgICAgICAgICBjb25zdCBuZXh0Q29tbWFuZHMgPSBhd2FpdCBnZXROZXh0Q29tbWFuZHNGcm9tUGFyZW50KGNvbW1hbmQpO1xuICAgICAgICAgICAgICAvLyBhdm9pZCBtb3ZpbmcgY3Vyc29yIHdoZW4gdGhlcmUgYXJlIHN1Yi1vcHRpb25zXG4gICAgICAgICAgICAgIGlmIChuZXh0Q29tbWFuZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIC8vIEVuc3VyZSB0aGUgc2VhcmNoIHRleHQgaGFzIG5vdCBjaGFuZ2VkIHdoaWxlIHdlIHdlcmUgbG9hZGluZ1xuICAgICAgICAgICAgICAgIC8vIHRoZSBuZXh0IHJlc3VsdHMsIG90aGVyd2lzZSB3ZSdkIGludGVycnVwdCB0aGUgdXNlci5cbiAgICAgICAgICAgICAgICAvLyBUaHJvdyBhd2F5IHRoZSByZXN1bHRzIGluIGNhc2UgdGhlIHNlYXJjaCB0ZXh0IGhhcyBjaGFuZ2VkLlxuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5zZWFyY2hUZXh0ID09PSBzZWFyY2hUZXh0KSB7XG4gICAgICAgICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzZXROZXh0Q29tbWFuZHMnLFxuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkOiB7IHJlc3VsdHM6IG5leHRDb21tYW5kcyB9LFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2hha2UoKTtcbiAgICAgICAgICB9KSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0Jykge1xuICAgICAgICAgIC8vIGdvIGxlZnQgaW4gc3RhY2tcbiAgICAgICAgICBjb25zdCBwcmV2Q29tbWFuZCA9IGxhc3Qoc3RhdGUuc3RhY2spO1xuXG4gICAgICAgICAgLy8gZG8gbm90aGluZyB3aGVuIHdlIGNhbid0IGdvIGxlZnQgYW55bW9yZVxuICAgICAgICAgIGlmICghcHJldkNvbW1hbmQpIHJldHVybjtcblxuICAgICAgICAgIC8vIHByZXZlbnQgY3Vyc29yIGZyb20ganVtcGluZyBhIGNoYXIgdG8gdGhlIGxlZnQgaW4gdGV4dCBpbnB1dFxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAnc2V0UHJldkNvbW1hbmRzJyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgICAgc2VhcmNoVGV4dDogcHJldkNvbW1hbmQuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgcmVzdWx0czogcHJldkNvbW1hbmQucmVzdWx0cyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBnZXROZXh0Q29tbWFuZHNGcm9tUGFyZW50LFxuICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXMsXG4gICAgICBzaGFrZSxcbiAgICAgIHN0YXRlLFxuICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IsXG4gICAgXVxuICApO1xuICBjb25zdCBoYW5kbGVLZXlVcCA9IHVzZUNhbGxiYWNrPEtleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+PihcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIC8vIHNldHRpbmcgdGhlIHNlbGVjdGlvbiBjYW4gb25seSBoYXBwZW4gaW4gb25LZXlVcFxuICAgICAgaWYgKHNob3VsZFNlbGVjdEZpZWxkVGV4dC5jdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgIGlucHV0LmZvY3VzKCk7XG4gICAgICAgIGlucHV0LnNlbGVjdCgpO1xuICAgICAgICBzaG91bGRTZWxlY3RGaWVsZFRleHQuY3VycmVudCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQua2V5ICE9PSAnRW50ZXInICYmICFpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQpIHJldHVybiB0cnVlO1xuXG4gICAgICAvLyBVc2VyIGp1c3QgdHJpZ2dlcmVkIHRoZSBzZWFyY2hcbiAgICAgIGlmIChzdGF0ZS5zZWxlY3RlZFJlc3VsdCA9PT0gLTEpIHJldHVybiB0cnVlO1xuXG4gICAgICAvLyBVc2VyIGhhZCBzb21ldGhpbmcgc2VsZWN0ZWQgYW5kIHdhbnRzIHRvIGdvIHRoZXJlXG4gICAgICBleGVjdXRlKHN0YXRlLnJlc3VsdHNbc3RhdGUuc2VsZWN0ZWRSZXN1bHRdLCB7XG4gICAgICAgIG9wZW5Jbk5ld1RhYjogaXNOZXdXaW5kb3dDb21iby5jdXJyZW50LFxuICAgICAgfSk7XG5cbiAgICAgIGlzTmV3V2luZG93Q29tYm8uY3VycmVudCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBbZXhlY3V0ZSwgc3RhdGUucmVzdWx0cywgc3RhdGUuc2VsZWN0ZWRSZXN1bHRdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUNhbGxiYWNrPENoYW5nZUV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50Pj4oXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBzZWFyY2hUZXh0ID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgICAgaWYgKHNlYXJjaFRleHQudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdyZXNldCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnc2VhcmNoVGV4dCcsIHBheWxvYWQ6IHNlYXJjaFRleHQgfSk7XG5cbiAgICAgIC8vIEEgc2VhcmNoIHZpYSBuZXR3b3JrIGlzIG9ubHkgdHJpZ2dlcmVkIHdoZW4gdGhlcmVcbiAgICAgIC8vIGFyZSBtb3JlIHRoYW4gdGhyZWUgY2hhcmFjdGVycy4gU28gbm8gZmFsc2UgbG9hZGluZ1xuICAgICAgLy8gaW5kaWNhdGlvbiBpcyBnaXZlbi5cbiAgICAgIGlmIChzZWFyY2hUZXh0LnRyaW0oKS5sZW5ndGggPiAzKSB7XG4gICAgICAgIHNldElzTG9hZGluZygpO1xuICAgICAgfVxuXG4gICAgICBzZWFyY2hGcm9tUGFyZW50KHNlYXJjaFRleHQpLnRoZW4oXG4gICAgICAgIChhc3luY1Jlc3VsdHM6IENvbW1hbmRbXSkgPT4ge1xuICAgICAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yKCk7XG4gICAgICAgICAgdW5zZXRJc0xvYWRpbmcoKTtcblxuICAgICAgICAgIGNvbnN0IGZ1c2UgPSBuZXcgRnVzZShhc3luY1Jlc3VsdHMsIHtcbiAgICAgICAgICAgIGtleXM6IFtcbiAgICAgICAgICAgICAgeyBuYW1lOiAndGV4dCcsIHdlaWdodDogMC42IH0sXG4gICAgICAgICAgICAgIHsgbmFtZTogJ2tleXdvcmRzJywgd2VpZ2h0OiAwLjQgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBtaW5NYXRjaENoYXJMZW5ndGg6IDIsXG4gICAgICAgICAgICBpbmNsdWRlU2NvcmU6IHRydWUsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCBzZWFyY2hSZXN1bHRzID0gZnVzZVxuICAgICAgICAgICAgLnNlYXJjaChzZWFyY2hUZXh0KVxuICAgICAgICAgICAgLy8gRmlsdGVyIG91dCByZXN1bHRzIHdpdGggYSBtYXRjaGluZyBzY29yZSBvdmVyIDAuNzVcbiAgICAgICAgICAgIC5maWx0ZXIoKHJlc3VsdCkgPT4gKHJlc3VsdC5zY29yZSA/IHJlc3VsdC5zY29yZSA8IDAuNzUgOiBmYWxzZSkpXG4gICAgICAgICAgICAvLyBLZWVwIGEgbWF4aW1hbCBvZiA5IHJlc3VsdHNcbiAgICAgICAgICAgIC5zbGljZSgwLCA5KTtcblxuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdzZXRTZWFyY2hUZXh0UmVzdWx0cycsXG4gICAgICAgICAgICBwYXlsb2FkOiBzZWFyY2hSZXN1bHRzLm1hcCgocmVzdWx0KSA9PiByZXN1bHQuaXRlbSksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICB1bnNldElzTG9hZGluZygpO1xuICAgICAgICAgIHNldEhhc05ldHdvcmtFcnJvcigpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0sXG4gICAgW1xuICAgICAgc2VhcmNoRnJvbVBhcmVudCxcbiAgICAgIHNldEhhc05ldHdvcmtFcnJvcixcbiAgICAgIHNldElzTG9hZGluZyxcbiAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yLFxuICAgICAgdW5zZXRJc0xvYWRpbmcsXG4gICAgXVxuICApO1xuICBjb25zdCBoYW5kbGVDb250YWluZXJDbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdyZXNldFJlc3VsdHNXaGVuQ2xvc2luZycgfSk7XG4gICAgb25DbG9zZUZyb21QYXJlbnQoKTtcbiAgfSwgW29uQ2xvc2VGcm9tUGFyZW50XSk7XG5cbiAgY29uc3QgY3JlYXRlQ29tbWFuZE1vdXNlRW50ZXJIYW5kbGVyID0gdXNlQ2FsbGJhY2s8XG4gICAgKGluZGV4OiBudW1iZXIpID0+IE1vdXNlRXZlbnRIYW5kbGVyPEhUTUxEaXZFbGVtZW50PlxuICA+KFxuICAgIChpbmRleCkgPT4gKCkgPT4ge1xuICAgICAgLy8gSW4gY2FzZSB0aGUgY3Vyc29yIGhhcHBlbmVkIHRvIGJlIGluIGEgbG9jYXRpb24gd2hlcmUgYVxuICAgICAgLy8gcmVzdWx0IHdvdWxkIGFwcGVhciwgaXQgd291bGQgdHJpZ2dlciBvbk1vdXNlRW50ZXIgYW5kIHRoZVxuICAgICAgLy8gcmVzdWx0IHdvdWxkIGJlIHNlbGVjdGVkIGltbWVkaWF0ZWx5LiBUaGlzIGlzIG5vdCBzb21ldGhpbmdcbiAgICAgIC8vIGEgdXNlciB3b3VsZCBleHBlY3QsIGhlbmNlIHdlIHByZXZlbnQgaXQgZnJvbSBoYXBwZW5pbmcuXG4gICAgICAvLyBUaGUgdXNlciBoYXMgdG8gbW92ZSB0aGUgY3Vyc29yIHRvIGFuIG9wdGlvbiBleHBsaWNpdGx5IGZvclxuICAgICAgLy8gaXQgdG8gYmVjb21lIGFjdGl2ZS4gSG93ZXZlciwgdGhlIHVzZXIgY2FuIGFsd2F5cyBjbGljayBhbmRcbiAgICAgIC8vIHRoYXQgYWN0aW9uIHdpbGwgYmUgdHJpZ2dlcmVkLlxuICAgICAgaWYgKHNraXBOZXh0U2VsZWN0aW9uLmN1cnJlbnQpIHtcbiAgICAgICAgc2tpcE5leHRTZWxlY3Rpb24uY3VycmVudCA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIHNldHMgdGhlIHNlbGVjdGVkIHJlc3VsdCwgbWFpbmx5IGZvciB0aGUgaG92ZXIgZWZmZWN0XG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdzZWxlY3RlZFJlc3VsdCcsIHBheWxvYWQ6IGluZGV4IH0pO1xuICAgIH0sXG4gICAgW11cbiAgKTtcbiAgY29uc3QgY3JlYXRlQ29tbWFuZENsaWNrSGFuZGxlciA9IHVzZUNhbGxiYWNrPFxuICAgIChjb21tYW5kOiBDb21tYW5kKSA9PiBNb3VzZUV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD5cbiAgPihcbiAgICAoY29tbWFuZCkgPT4gKGV2ZW50KSA9PiB7XG4gICAgICBleGVjdXRlKGNvbW1hbmQsIHtcbiAgICAgICAgb3BlbkluTmV3VGFiOiBoYXNOZXdXaW5kb3dNb2RpZmllcihldmVudCksXG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtleGVjdXRlXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPEJ1dGxlckNvbnRhaW5lclxuICAgICAgb25DbGljaz17aGFuZGxlQ29udGFpbmVyQ2xpY2t9XG4gICAgICBkYXRhLXRlc3RpZD1cInF1aWNrLWFjY2Vzc1wiXG4gICAgICB0YWJJbmRleD17LTF9XG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICByZWY9e3NlYXJjaENvbnRhaW5lclJlZn1cbiAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yU3VyZmFjZX07XG4gICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICR7Y3VzdG9tUHJvcGVydGllcy5ib3JkZXJSYWRpdXM0fTtcbiAgICAgICAgICBtaW4taGVpZ2h0OiA0MHB4O1xuXG4gICAgICAgICAgLyogb25lIG1vcmUgdGhhbiBhcHAtYmFyICgyMDAwMCkgYW5kIG9uZSBtb3JlIHRoYW4gdGhlIG92ZXJsYXkgKDIwMDAxKSAqL1xuICAgICAgICAgIHotaW5kZXg6IDIwMDAyO1xuICAgICAgICAgIHdpZHRoOiA0MDBweDtcbiAgICAgICAgICBtYXJnaW46IDQwcHggYXV0bztcbiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogMCAxMHB4IDMwcHggLThweCByZ2JhKDAsIDAsIDAsIDAuNzUpO1xuICAgICAgICAgIC1tb3otYm94LXNoYWRvdzogMCAxMHB4IDMwcHggLThweCByZ2JhKDAsIDAsIDAsIDAuNzUpO1xuICAgICAgICAgIGJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogJHtzdGF0ZS5oYXNOZXR3b3JrRXJyb3JcbiAgICAgICAgICAgID8gJzAnXG4gICAgICAgICAgICA6IGN1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICBgfVxuICAgICAgICBvbkNsaWNrPXsoZXZlbnQpID0+IHtcbiAgICAgICAgICAvLyBBdm9pZCBjbG9zaW5nIHdoZW4gdGhlIHNlYXJjaENvbnRhaW5lciBpdHNlbGYgaXMgY2xpY2tlZFxuICAgICAgICAgIC8vIElmIHdlIGRvbid0IGRvIHRoaXMsIHRoZW4gdGhlIG92ZXJsYXkgd2lsbCBjbG9zZSB3aGVuIGUuZy5cbiAgICAgICAgICAvLyB0aGUgc2VhcmNoIGlucHV0IGlzIGNsaWNrZWQuXG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBgfVxuICAgICAgICA+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICBodG1sRm9yPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6ICR7Y3VzdG9tUHJvcGVydGllcy5zcGFjaW5nTX07XG4gICAgICAgICAgICAgIG1hcmdpbi10b3A6ICR7Y3VzdG9tUHJvcGVydGllcy5zcGFjaW5nU307XG4gICAgICAgICAgICBgfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxTZWFyY2hJY29uIGNvbG9yPVwibmV1dHJhbDYwXCIgLz5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgaWQ9XCJxdWljay1hY2Nlc3Mtc2VhcmNoLWlucHV0XCJcbiAgICAgICAgICAgIHJlZj17c2VhcmNoSW5wdXRSZWZ9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj17aW50bC5mb3JtYXRNZXNzYWdlKG1lc3NhZ2VzLmlucHV0UGxhY2Vob2Rlcil9XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICAgICAgb3V0bGluZTogMDtcbiAgICAgICAgICAgICAgZm9udC1zaXplOiAyMnB4O1xuICAgICAgICAgICAgICBmb250LXdlaWdodDogMzAwO1xuICAgICAgICAgICAgICBwYWRkaW5nOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019ICR7Y3VzdG9tUHJvcGVydGllcy5zcGFjaW5nTX1cbiAgICAgICAgICAgICAgICAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9ICR7Y3VzdG9tUHJvcGVydGllcy5zcGFjaW5nU307XG4gICAgICAgICAgICAgICY6OnBsYWNlaG9sZGVyIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yTmV1dHJhbDYwfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgYH1cbiAgICAgICAgICAgIHZhbHVlPXtzdGF0ZS5zZWFyY2hUZXh0fVxuICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgIG9uS2V5RG93bj17aGFuZGxlS2V5RG93bn1cbiAgICAgICAgICAgIG9uS2V5VXA9e2hhbmRsZUtleVVwfVxuICAgICAgICAgICAgYXV0b0ZvY3VzPXt0cnVlfVxuICAgICAgICAgICAgYXV0b0NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICB7c3RhdGUuaXNMb2FkaW5nICYmIChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6ICR7Y3VzdG9tUHJvcGVydGllcy5zcGFjaW5nU307XG4gICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8TG9hZGluZ1NwaW5uZXIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICBpZiAoc3RhdGUuaGFzTmV0d29ya0Vycm9yKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgICAgICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JFcnJvcn07XG4gICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICAgICAgICAgICAgY29sb3I6ICR7Y3VzdG9tUHJvcGVydGllcy5jb2xvclN1cmZhY2V9O1xuICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAke2N1c3RvbVByb3BlcnRpZXMuZm9udFNpemVTbWFsbH07XG4gICAgICAgICAgICAgICAgICBwYWRkaW5nOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1hzfTtcbiAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2Ugey4uLm1lc3NhZ2VzLm9mZmxpbmV9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChzdGF0ZS5yZXN1bHRzLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5zZWFyY2hUZXh0LnRyaW0oKS5sZW5ndGggPiAwKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgICAgICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JOZXV0cmFsfTtcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JTb2xpZH07XG4gICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAke2N1c3RvbVByb3BlcnRpZXMuZm9udFNpemVTbWFsbH07XG4gICAgICAgICAgICAgICAgICBwYWRkaW5nOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1hzfTtcbiAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2Ugey4uLm1lc3NhZ2VzLm5vUmVzdWx0c30gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuIHN0YXRlLnJlc3VsdHMubWFwKChjb21tYW5kLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPEJ1dGxlckNvbW1hbmRcbiAgICAgICAgICAgICAga2V5PXtjb21tYW5kLmlkfVxuICAgICAgICAgICAgICBjb21tYW5kPXtjb21tYW5kfVxuICAgICAgICAgICAgICBpc1NlbGVjdGVkPXtzdGF0ZS5zZWxlY3RlZFJlc3VsdCA9PT0gaW5kZXh9XG4gICAgICAgICAgICAgIG9uTW91c2VFbnRlcj17Y3JlYXRlQ29tbWFuZE1vdXNlRW50ZXJIYW5kbGVyKGluZGV4KX1cbiAgICAgICAgICAgICAgb25DbGljaz17Y3JlYXRlQ29tbWFuZENsaWNrSGFuZGxlcihjb21tYW5kKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSk7XG4gICAgICAgIH0pKCl9XG4gICAgICA8L2Rpdj5cbiAgICA8L0J1dGxlckNvbnRhaW5lcj5cbiAgKTtcbn07XG5CdXRsZXIuZGlzcGxheU5hbWUgPSAnQnV0bGVyJztcblxuY29uc3QgQnV0bGVyV2l0aEFuaW1hdGlvbiA9IChwcm9wczogT21pdDxQcm9wcywgJ2NsYXNzTmFtZVNoYWtlQW5pbWF0aW9uJz4pID0+IChcbiAgPENsYXNzTmFtZXM+XG4gICAgeyh7IGNzcyB9KSA9PiAoXG4gICAgICA8QnV0bGVyXG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgY2xhc3NOYW1lU2hha2VBbmltYXRpb249e2Nzc2BcbiAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IDAuNDVzO1xuICAgICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGJvdGg7XG4gICAgICAgICAgYW5pbWF0aW9uLW5hbWU6ICR7c2hha2VBbmltYXRpb259O1xuICAgICAgICBgfVxuICAgICAgLz5cbiAgICApfVxuICA8L0NsYXNzTmFtZXM+XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBCdXRsZXJXaXRoQW5pbWF0aW9uO1xuIl19 */"),
1018
- children: jsxRuntime.jsx(LoadingSpinner__default["default"], {})
1019
- })]
1020
- }), function () {
1021
- var _context13, _context14;
1022
-
1023
- if (state.hasNetworkError) return jsxRuntime.jsx("div", {
1024
- css: /*#__PURE__*/react.css("overflow:hidden;white-space:nowrap;cursor:default;background:", designSystem.customProperties.colorError, ";text-align:center;text-transform:uppercase;color:", designSystem.customProperties.colorSurface, ";font-size:", designSystem.customProperties.fontSizeSmall, ";padding:", designSystem.customProperties.spacingXs, ";" + (process.env.NODE_ENV === "production" ? "" : ";label:Butler;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBd3FCd0IiLCJmaWxlIjoiYnV0bGVyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgQ29tbWFuZCxcbiAgU2VhcmNoVGV4dCxcbiAgU2VsZWN0ZWRSZXN1bHQsXG4gIFN0YWNrLFxuICBIaXN0b3J5RW50cnksXG59IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtcbiAgS2V5Ym9hcmRFdmVudEhhbmRsZXIsXG4gIENoYW5nZUV2ZW50SGFuZGxlcixcbiAgS2V5Ym9hcmRFdmVudCxcbiAgTW91c2VFdmVudEhhbmRsZXIsXG4gIE1vdXNlRXZlbnQsXG4gIHVzZVJlZHVjZXIsXG4gIHVzZVJlZixcbiAgdXNlQ2FsbGJhY2ssXG59IGZyb20gJ3JlYWN0JztcbmltcG9ydCBGdXNlIGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IHsgRm9ybWF0dGVkTWVzc2FnZSwgdXNlSW50bCB9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IGxhc3QgZnJvbSAnbG9kYXNoL2xhc3QnO1xuaW1wb3J0IHsgY3NzLCBrZXlmcmFtZXMsIENsYXNzTmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgTG9hZGluZ1NwaW5uZXIgZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvbG9hZGluZy1zcGlubmVyJztcbmltcG9ydCB7IFNlYXJjaEljb24gfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9pY29ucyc7XG5pbXBvcnQgeyBjdXN0b21Qcm9wZXJ0aWVzIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgQnV0bGVyQ29tbWFuZCBmcm9tICcuLi9idXRsZXItY29tbWFuZCc7XG5pbXBvcnQgQnV0bGVyQ29udGFpbmVyIGZyb20gJy4uL2J1dGxlci1jb250YWluZXInO1xuaW1wb3J0IG1lc3NhZ2VzIGZyb20gJy4uL21lc3NhZ2VzJztcblxuY29uc3QgaXNTZWxlY3RBbGxDb21ibyA9IChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cbiAgZXZlbnQua2V5ID09PSAnYScgJiZcbiAgZXZlbnQubWV0YUtleSAmJlxuICAhZXZlbnQuY3RybEtleSAmJlxuICAhZXZlbnQuYWx0S2V5ICYmXG4gICFldmVudC5zaGlmdEtleTtcblxuY29uc3QgaXNDbG9zZUNvbWJvID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PlxuICBldmVudC5rZXkgPT09ICdFc2NhcGUnICYmXG4gICFldmVudC5tZXRhS2V5ICYmXG4gICFldmVudC5jdHJsS2V5ICYmXG4gICFldmVudC5hbHRLZXkgJiZcbiAgIWV2ZW50LnNoaWZ0S2V5O1xuXG5jb25zdCBnZXRQbGF0Zm9ybSA9ICgpID0+IHtcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdXaW4nKSkgcmV0dXJuICd3aW5kb3dzJztcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdNYWMnKSkgcmV0dXJuICdtYWNvcyc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnWDExJykpIHJldHVybiAndW5peCc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnTGludXgnKSkgcmV0dXJuICdsaW51eCc7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBoYXNOZXdXaW5kb3dNb2RpZmllciA9IChcbiAgZXZlbnQ6IEtleWJvYXJkRXZlbnQ8SFRNTEVsZW1lbnQ+IHwgTW91c2VFdmVudDxIVE1MRWxlbWVudD5cbikgPT4ge1xuICBjb25zdCBwbGF0Zm9ybSA9IGdldFBsYXRmb3JtKCk7XG4gIHN3aXRjaCAocGxhdGZvcm0pIHtcbiAgICBjYXNlICdtYWNvcyc6XG4gICAgICByZXR1cm4gZXZlbnQubWV0YUtleTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGV2ZW50LmN0cmxLZXk7XG4gIH1cbn07XG5cbmNvbnN0IHNoYWtlQW5pbWF0aW9uID0ga2V5ZnJhbWVzYFxuICBmcm9tLFxuICB0byB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcbiAgfVxuXG4gIDE0JSxcbiAgNDIlLFxuICA3MCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTNweCwgMCwgMCk7XG4gIH1cblxuICAyOCUsXG4gIDU2JSxcbiAgODQlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDNweCwgMCwgMCk7XG4gIH1cbmA7XG5cbnR5cGUgU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogYm9vbGVhbjtcbiAgaXNMb2FkaW5nOiBib29sZWFuO1xuICBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0O1xuICBzZWxlY3RlZFJlc3VsdDogU2VsZWN0ZWRSZXN1bHQ7XG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IGJvb2xlYW47XG4gIHJlc3VsdHM6IENvbW1hbmRbXTtcbiAgc3RhY2s6IFN0YWNrW107XG59O1xudHlwZSBBY3Rpb24gPVxuICB8IHsgdHlwZTogJ25ldHdvcmtFcnJvcic7IHBheWxvYWQ6IGJvb2xlYW4gfVxuICB8IHsgdHlwZTogJ2xvYWRpbmcnOyBwYXlsb2FkOiBib29sZWFuIH1cbiAgfCB7IHR5cGU6ICdzZWxlY3RlZFJlc3VsdCc7IHBheWxvYWQ6IG51bWJlciB9XG4gIHwgeyB0eXBlOiAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH1cbiAgfCB7IHR5cGU6ICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfVxuICB8IHtcbiAgICAgIHR5cGU6ICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JztcbiAgICAgIHBheWxvYWQ6IHsgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDsgcmVzdWx0czogQ29tbWFuZFtdIH07XG4gICAgfVxuICB8IHsgdHlwZTogJ3NldE5leHRDb21tYW5kcyc7IHBheWxvYWQ6IHsgcmVzdWx0czogQ29tbWFuZFtdIH0gfVxuICB8IHtcbiAgICAgIHR5cGU6ICdzZXRQcmV2Q29tbWFuZHMnO1xuICAgICAgcGF5bG9hZDogeyBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0OyByZXN1bHRzOiBDb21tYW5kW10gfTtcbiAgICB9XG4gIHwgeyB0eXBlOiAnc2VhcmNoVGV4dCc7IHBheWxvYWQ6IHN0cmluZyB9XG4gIHwgeyB0eXBlOiAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOyBwYXlsb2FkOiBDb21tYW5kW10gfVxuICB8IHsgdHlwZTogJ3Jlc2V0U2VhcmNoVGV4dCcgfVxuICB8IHsgdHlwZTogJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJyB9XG4gIHwgeyB0eXBlOiAncmVzZXQnIH07XG5jb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogZmFsc2UsXG4gIGlzTG9hZGluZzogZmFsc2UsXG4gIHNlYXJjaFRleHQ6ICcnLFxuICBzZWxlY3RlZFJlc3VsdDogLTEsXG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IHRydWUsXG4gIHJlc3VsdHM6IFtdLFxuICBzdGFjazogW10sXG59O1xuY29uc3QgcmVkdWNlciA9IChzdGF0ZTogU3RhdGUgPSBpbml0aWFsU3RhdGUsIGFjdGlvbjogQWN0aW9uKTogU3RhdGUgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnbmV0d29ya0Vycm9yJzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBoYXNOZXR3b3JrRXJyb3I6IGFjdGlvbi5wYXlsb2FkIH07XG4gICAgY2FzZSAnbG9hZGluZyc6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgaXNMb2FkaW5nOiBhY3Rpb24ucGF5bG9hZCB9O1xuICAgIGNhc2UgJ3NlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQgfTtcbiAgICBjYXNlICdpbmNyZW1lbnRTZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6XG4gICAgICAgICAgc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IHN0YXRlLnJlc3VsdHMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0ICsgMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ2RlY3JlbWVudFNlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDpcbiAgICAgICAgICBzdGF0ZS5zZWxlY3RlZFJlc3VsdCA8IDFcbiAgICAgICAgICAgID8gc3RhdGUucmVzdWx0cy5sZW5ndGggLSAxXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0IC0gMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ3BpY2tDb21tYW5kRnJvbUhpc3RvcnknOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OiAwLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZC5zZWFyY2hUZXh0LFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZC5yZXN1bHRzLFxuICAgICAgICBzdGFjazogW10sXG4gICAgICAgIC8vIFRoZSBoaXN0b3J5IGRvZXMgbm90IGdldCBjaGFuZ2VkIGhlcmUsIGl0IHdpbGwgYmUgY2hhbmdlZCBhbG9uZ1xuICAgICAgICAvLyB3aXRoIHRoZSByZWd1bGFyIGZsb3cuXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldE5leHRDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc3RhY2s6IFtcbiAgICAgICAgICAuLi5zdGF0ZS5zdGFjayxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZWFyY2hUZXh0OiBzdGF0ZS5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgcmVzdWx0czogc3RhdGUucmVzdWx0cyxcbiAgICAgICAgICAgIHNlbGVjdGVkUmVzdWx0OiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogMCxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLnJlc3VsdHMsXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldFByZXZDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQuc2VhcmNoVGV4dCxcbiAgICAgICAgcmVzdWx0czogYWN0aW9uLnBheWxvYWQucmVzdWx0cyxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IDAsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgICAvLyBvbWl0IGxhc3QgaXRlbVxuICAgICAgICBzdGFjazogc3RhdGUuc3RhY2suc2xpY2UoMCwgLTEpLFxuICAgICAgfTtcbiAgICBjYXNlICdzZWFyY2hUZXh0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgLy8gY2xlYXIgbmV0d29yayBlcnJvciB3aGVuIHNlYXJjaCB0ZXh0IGlzIGNsZWFyZWQsIHNvIHRoYXQgdXNlcnNcbiAgICAgICAgLy8gYXJlIHRlbXB0ZWQgdG8gcmV0cnlcbiAgICAgICAgaGFzTmV0d29ya0Vycm9yOiBhY3Rpb24ucGF5bG9hZC5sZW5ndGggPiAwICYmIHN0YXRlLmhhc05ldHdvcmtFcnJvcixcbiAgICAgIH07XG4gICAgY2FzZSAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQubGVuZ3RoID4gMCA/IDAgOiAtMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogdHJ1ZSxcbiAgICAgICAgc3RhY2s6IFtdLFxuICAgICAgfTtcbiAgICBjYXNlICdyZXNldFNlYXJjaFRleHQnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlYXJjaFRleHQ6ICcnLCByZXN1bHRzOiBbXSwgc2VsZWN0ZWRSZXN1bHQ6IC0xIH07XG4gICAgY2FzZSAncmVzZXRSZXN1bHRzV2hlbkNsb3NpbmcnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlbGVjdGVkUmVzdWx0OiAtMSwgZW5hYmxlSGlzdG9yeTogdHJ1ZSB9O1xuICAgIGNhc2UgJ3Jlc2V0JzpcbiAgICAgIHJldHVybiBpbml0aWFsU3RhdGU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufTtcblxudHlwZSBQcm9wcyA9IHtcbiAgaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdO1xuICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlOiAoaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdKSA9PiB2b2lkO1xuICBzZWFyY2g6IChzZWFyY2hUZXh0OiBTZWFyY2hUZXh0KSA9PiBQcm9taXNlPENvbW1hbmRbXT47XG4gIGdldE5leHRDb21tYW5kczogKGNvbW1hbmQ6IENvbW1hbmQpID0+IFByb21pc2U8Q29tbWFuZFtdPjtcbiAgZXhlY3V0ZUNvbW1hbmQ6IChjb21tYW5kOiBDb21tYW5kLCBtZXRhOiB7IG9wZW5Jbk5ld1RhYjogYm9vbGVhbiB9KSA9PiB2b2lkO1xuICBvbkNsb3NlOiAoKSA9PiB2b2lkO1xuICBjbGFzc05hbWVTaGFrZUFuaW1hdGlvbjogc3RyaW5nO1xufTtcbmNvbnN0IEJ1dGxlciA9IChwcm9wczogUHJvcHMpID0+IHtcbiAgY29uc3QgaW50bCA9IHVzZUludGwoKTtcbiAgY29uc3QgW3N0YXRlLCBkaXNwYXRjaF0gPSB1c2VSZWR1Y2VyPFxuICAgIChwcmV2U3RhdGU6IFN0YXRlLCBhY3Rpb246IEFjdGlvbikgPT4gU3RhdGVcbiAgPihyZWR1Y2VyLCBpbml0aWFsU3RhdGUpO1xuXG4gIGNvbnN0IHNob3VsZFNlbGVjdEZpZWxkVGV4dCA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IGlzTmV3V2luZG93Q29tYm8gPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBza2lwTmV4dFNlbGVjdGlvbiA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IHNlYXJjaENvbnRhaW5lclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IHNlYXJjaElucHV0UmVmID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KG51bGwpO1xuXG4gIGNvbnN0IHNldEhhc05ldHdvcmtFcnJvciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICduZXR3b3JrRXJyb3InLCBwYXlsb2FkOiB0cnVlIH0pO1xuICB9LCBbXSk7XG4gIGNvbnN0IHVuc2V0SGFzTmV0d29ya0Vycm9yID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ25ldHdvcmtFcnJvcicsIHBheWxvYWQ6IGZhbHNlIH0pO1xuICB9LCBbXSk7XG4gIGNvbnN0IHNldElzTG9hZGluZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdsb2FkaW5nJywgcGF5bG9hZDogdHJ1ZSB9KTtcbiAgfSwgW10pO1xuICBjb25zdCB1bnNldElzTG9hZGluZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdsb2FkaW5nJywgcGF5bG9hZDogZmFsc2UgfSk7XG4gIH0sIFtdKTtcblxuICAvLyBEZXN0cnVjdHVyZSBmdW5jdGlvbnMgZnJvbSBwcm9wcyB0byByZWZlcmVuY2UgdGhlbSBpbiB0aGUgaG9vayBkZXBlbmRlbmN5IGxpc3RcbiAgY29uc3Qge1xuICAgIHNlYXJjaDogc2VhcmNoRnJvbVBhcmVudCxcbiAgICBvbkNsb3NlOiBvbkNsb3NlRnJvbVBhcmVudCxcbiAgICBleGVjdXRlQ29tbWFuZDogZXhlY3V0ZUNvbW1hbmRGcm9tUGFyZW50LFxuICAgIG9uSGlzdG9yeUVudHJpZXNDaGFuZ2U6IG9uSGlzdG9yeUVudHJpZXNDaGFuZ2VGcm9tUGFyZW50LFxuICAgIGdldE5leHRDb21tYW5kczogZ2V0TmV4dENvbW1hbmRzRnJvbVBhcmVudCxcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHNoYWtlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChzZWFyY2hDb250YWluZXJSZWYuY3VycmVudCkge1xuICAgICAgc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQuY2xhc3NMaXN0LnJlbW92ZShcbiAgICAgICAgcHJvcHMuY2xhc3NOYW1lU2hha2VBbmltYXRpb25cbiAgICAgICk7XG4gICAgICAvLyAtPiB0cmlnZ2VyaW5nIHJlZmxvd1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXZvaWRcbiAgICAgIHZvaWQgc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQub2Zmc2V0V2lkdGg7XG4gICAgICBzZWFyY2hDb250YWluZXJSZWYuY3VycmVudC5jbGFzc0xpc3QuYWRkKHByb3BzLmNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uKTtcbiAgICB9XG4gIH0sIFtwcm9wcy5jbGFzc05hbWVTaGFrZUFuaW1hdGlvbl0pO1xuXG4gIGNvbnN0IGV4ZWN1dGUgPSB1c2VDYWxsYmFjayhcbiAgICAoY29tbWFuZCwgbWV0YSkgPT4ge1xuICAgICAgLy8gT25seSBtYWluIGVudHJpZXMgZ2V0IGFkZGVkIHRvIGhpc3RvcnksIHNvIHdoZW4gYSBzdWJjb21tYW5kIGlzIGV4ZWN1dGVkLFxuICAgICAgLy8gd2UgYWRkIHRoZSBtYWluIGNvbW1hbmQgb2YgaXQgdG8gdGhlIGhpc3RvcnkgKHRoZSB0b3AtbGV2ZWwgY29tbWFuZCkuXG4gICAgICAvL1xuICAgICAgLy8gVGhlIGtleSB0byBpZGVudGlmeSBoaXN0b3J5IGVudHJpZXMgYnkgaXMgYWx3YXlzIHRoZSBzZWFyY2hUZXh0XG4gICAgICAvLyBUaGVyZSB3aWxsIG5ldmVyIGJlIHR3byBoaXN0b3J5IGVudHJpZXMgd2l0aCB0aGUgc2FtZSBzZWFyY2hUZXh0XG4gICAgICBjb25zdCBlbnRyeSA9XG4gICAgICAgIHN0YXRlLnN0YWNrLmxlbmd0aCA9PT0gMFxuICAgICAgICAgID8gLy8gVGhlIHN0YWNrIGlzIGVtcHR5LCBzbyB3ZSBhcmUgZXhlY3V0aW5nIGEgdG9wLWxldmVsIGNvbW1hbmRcbiAgICAgICAgICAgIHsgc2VhcmNoVGV4dDogc3RhdGUuc2VhcmNoVGV4dCwgcmVzdWx0czogc3RhdGUucmVzdWx0cyB9XG4gICAgICAgICAgOiAvLyBXZSBhcmUgZXhlY3V0aW5nIGEgc3ViY29tbWFuZCwgc28gd2UgZ2V0IHRoZSB0b3AtbGV2ZWwgY29tbWFuZCBmb3IgaXQsXG4gICAgICAgICAgICAvLyB3aGljaCBpcyBhdCB0aGUgYm90dG9tIG9mIHRoZSBzdGFjay5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc2VhcmNoVGV4dDogc3RhdGUuc3RhY2tbMF0uc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgcmVzdWx0czogc3RhdGUuc3RhY2tbMF0ucmVzdWx0cyxcbiAgICAgICAgICAgIH07XG5cbiAgICAgIC8vIEFkZCB0aGUgZW50cnkgdG8gdGhlIGhpc3RvcnksIHdoaWxlIGV4Y2x1ZGluZyBhbnkgZWFybGllciBoaXN0b3J5IGVudHJ5XG4gICAgICAvLyB3aXRoIHRoZSBzYW1lIHNlYXJjaCB0ZXh0LiBUaGlzIGVmZmVjdGl2ZWx5IFwibW92ZXNcIiB0aGF0IGVudHJ5IHRvIHRoZVxuICAgICAgLy8gdG9wIG9mIHRoZSBoaXN0b3J5ICh3aXRoIHRoZSBtb3N0IHJlY2VudCByZXN1bHRzKSwgb3IgYXBwZW5kcyBhIG5ldyBlbnRyeVxuICAgICAgLy8gd2hlbiBpdCBkaWRuJ3QgZXhpc3QgYmVmb3JlLlxuICAgICAgb25IaXN0b3J5RW50cmllc0NoYW5nZUZyb21QYXJlbnQoW1xuICAgICAgICAuLi5wcm9wcy5oaXN0b3J5RW50cmllcy5maWx0ZXIoXG4gICAgICAgICAgKGNvbW1hbmQpID0+IGNvbW1hbmQuc2VhcmNoVGV4dCAhPT0gZW50cnkuc2VhcmNoVGV4dFxuICAgICAgICApLFxuICAgICAgICBlbnRyeSxcbiAgICAgIF0pO1xuXG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdyZXNldFNlYXJjaFRleHQnIH0pO1xuXG4gICAgICBvbkNsb3NlRnJvbVBhcmVudCgpO1xuXG4gICAgICBleGVjdXRlQ29tbWFuZEZyb21QYXJlbnQoY29tbWFuZCwgbWV0YSk7XG4gICAgfSxcbiAgICBbXG4gICAgICBleGVjdXRlQ29tbWFuZEZyb21QYXJlbnQsXG4gICAgICBvbkNsb3NlRnJvbVBhcmVudCxcbiAgICAgIG9uSGlzdG9yeUVudHJpZXNDaGFuZ2VGcm9tUGFyZW50LFxuICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXMsXG4gICAgICBzdGF0ZS5yZXN1bHRzLFxuICAgICAgc3RhdGUuc2VhcmNoVGV4dCxcbiAgICAgIHN0YXRlLnN0YWNrLFxuICAgIF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IHVzZUNhbGxiYWNrPEtleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+PihcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIC8vIFByZXZlbnRpbmcgY3Vyc29yIGp1bXBzIGNhbiBvbmx5IGhhcHBlbiBpbiBvbktleURvd24sIGJ1dCBub3QgaW4gb25LZXlVcFxuICAgICAgZXZlbnQucGVyc2lzdCgpO1xuXG4gICAgICAvLyBXZSB3YW50IHRvIGtub3cgd2hlbiB0aGUgdXNlciBwcmVzc2VzIGNtZCtlbnRlciAoY21kIGJlaW5nIGEgbWV0YSBrZXkpLlxuICAgICAgLy8gV2UgYXJlIG9ubHkgdG9sZCBhYm91dCB0aGlzIGluIGtleURvd24sIGJ1dCBub3QgaW4ga2V5VXAsIHNvIHdlIG5lZWRcbiAgICAgIC8vIHRvIGhhbmRsZSBpdCBoZXJlXG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInICYmIGhhc05ld1dpbmRvd01vZGlmaWVyKGV2ZW50KSkge1xuICAgICAgICBpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIEF2b2lkIHNlbGVjdGluZyB0aGUgd2hvbGUgcGFnZSB3aGVuIHVzZXIgc2VsZWN0ZXMgZXZlcnl0aGluZyB3aXRoXG4gICAgICAvLyBhIGtleWJvYXJkIHNob3J0Y3V0LiBUaGVyZSBpcyBwcm9iYWJseSBhIGJldHRlciB3YXkgdG8gZG8gdGhpcyB0aG91Z2guXG4gICAgICAvLyBUaGlzIHByZXZlbnRzIHRoZSB3aG9sZSBwYWdlIGZyb20gYmVpbmcgc2VsZWN0ZWQgaW4gY2FzZSB0aGUgdXNlclxuICAgICAgLy8gMSkgb3BlbnMgdGhlIHNlYXJjaCBib3hcbiAgICAgIC8vIDIpIHR5cGVzIGludG8gaXRcbiAgICAgIC8vIDMpIHNlbGVjdHMgYWxsIHRleHQgdXNpbmcgY21kK2FcbiAgICAgIC8vIDQpIGNsb3NlcyB0aGUgc2VhcmNoIGJveCB3aXRoIGVzY1xuICAgICAgLy8gV2l0aG91dCB0aGlzIGhhbmRsaW5nLCB0aGUgd2hvbGUgcGFnZSB3b3VsZCBub3cgYmUgc2VsZWN0ZWRcbiAgICAgIGlmIChpc1NlbGVjdEFsbENvbWJvKGV2ZW50KSkge1xuICAgICAgICAvLyBUaGlzIHN0b3BzIHRoZSBicm93c2VyIGZyb20gc2VsZWN0aW5nIGFueXRoaW5nXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmIChzZWFyY2hJbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgLy8gVGhpcyBzZWxlY3RzIHRoZSB0ZXh0IGluIHRoZSBzZWFyY2ggaW5wdXRcbiAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNldFNlbGVjdGlvblJhbmdlKDAsIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIGF2b2lkIGludGVyZmVyaW5nIHdpdGggb3RoZXIga2V5IGNvbWJpbmF0aW9ucyB1c2luZyBtb2RpZmllciBrZXlzXG4gICAgICBpZiAoZXZlbnQuY3RybEtleSB8fCBldmVudC5hbHRLZXkgfHwgZXZlbnQuc2hpZnRLZXkgfHwgZXZlbnQubWV0YUtleSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKGlzQ2xvc2VDb21ibyhldmVudCkpIHJldHVybjtcblxuICAgICAgLy8gc2tpcCBuZXh0IG1vdXNlRW50ZXIgdG8gYXZvaWQgc2V0dGluZyBzZWxlY3RlZFJlc3VsdCB3aGVuIGN1cnNvciBqdXN0XG4gICAgICAvLyBoYXBwZW5zIHRvIGJlIHdoZXJlIHRoZSByZXN1bHRzIHdpbGwgcG9wIHVwXG4gICAgICBza2lwTmV4dFNlbGVjdGlvbi5jdXJyZW50ID0gdHJ1ZTtcblxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgICAgLy8gcHJldmVudCBjdXJzb3IgZnJvbSBqdW1waW5nIHRvIGVuZCBvZiB0ZXh0IGlucHV0XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ2luY3JlbWVudFNlbGVjdGVkUmVzdWx0JyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICAgIC8vIGJyb3dzZSB0aHJvdWdoIGhpc3RvcnlcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgKHN0YXRlLnNlbGVjdGVkUmVzdWx0IDwgMSAmJiBzdGF0ZS5lbmFibGVIaXN0b3J5KVxuICAgICAgICApIHtcbiAgICAgICAgICBzaG91bGRTZWxlY3RGaWVsZFRleHQuY3VycmVudCA9IHRydWU7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRJbmRleCA9XG4gICAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICA/IC8vIFdoZW4gZ29pbmcgYmFjayB0aGUgZmlyc3Qgc3RlcFxuICAgICAgICAgICAgICAgIC0xXG4gICAgICAgICAgICAgIDogLy8gV2hlbiBnb2luZyBiYWNrIG1vcmUgdGhhbiBvbmUgc3RlcFxuICAgICAgICAgICAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgIChjb21tYW5kKSA9PiBjb21tYW5kLnNlYXJjaFRleHQgPT09IHN0YXRlLnNlYXJjaFRleHRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgIC8vIFBpY2sgdGhlIHByZXZpb3VzIGNvbW1hbmQgZnJvbSB0aGUgaGlzdG9yeVxuICAgICAgICAgIGNvbnN0IHByZXZDb21tYW5kID1cbiAgICAgICAgICAgIHNlbGVjdGVkSW5kZXggPT09IC0xXG4gICAgICAgICAgICAgID8gLy8gcHJldmlvdXMgY29tbWFuZCBvbiB0b3Agb2YgdGhlIGhpc3Rvcnkgd2hlbiBnb2luZyBiYWNrIG9uXG4gICAgICAgICAgICAgICAgLy8gZmlyc3Qgc3RlcFxuICAgICAgICAgICAgICAgIGxhc3QocHJvcHMuaGlzdG9yeUVudHJpZXMpXG4gICAgICAgICAgICAgIDogLy8gcHJldmlvdXMgY29tbWFuZCBpcyBkZWVwZXIgZG93blxuICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlIGhpc3RvcnkgZG9lcyBub3QgZXhpc3QgKG5lZ2F0aXZlIGluZGV4KSwgdGhlblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgaW1wbGljaXRseSByZXR1cm5zIHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzW3NlbGVjdGVkSW5kZXggLSAxXTtcbiAgICAgICAgICAvLyBTa2lwIHdoZW4gbm8gcHJldmlvdXMgZW50cnkgZXhpc3RzIGluIHRoZSBoaXN0b3J5XG4gICAgICAgICAgaWYgKCFwcmV2Q29tbWFuZCkgcmV0dXJuO1xuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgICAgc2VhcmNoVGV4dDogcHJldkNvbW1hbmQuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgcmVzdWx0czogcHJldkNvbW1hbmQucmVzdWx0cyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHByZXZlbnQgY3Vyc29yIGZyb20ganVtcGluZyB0byBiZWdpbm5pbmcgb2YgdGV4dCBpbnB1dFxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0ZS5zZWxlY3RlZFJlc3VsdCA+IC0xKSB7XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0Jykge1xuICAgICAgICAgIGNvbnN0IGNvbW1hbmQgPSBzdGF0ZS5yZXN1bHRzW3N0YXRlLnNlbGVjdGVkUmVzdWx0XTtcbiAgICAgICAgICBjb25zdCBzZWFyY2hUZXh0ID0gc3RhdGUuc2VhcmNoVGV4dDtcbiAgICAgICAgICBjb25zdCBpc0N1cnNvckF0RW5kID1cbiAgICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQgJiZcbiAgICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xuXG4gICAgICAgICAgY29uc3QgaXNFdmVyeXRoaW5nU2VsZWN0ZWQgPVxuICAgICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudCAmJlxuICAgICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydCA9PT0gMCAmJlxuICAgICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xuXG4gICAgICAgICAgLy8gb25seSBhbGxvdyBkaXZpbmcgaW4gd2hlbiBjdXJzb3IgaXMgYXQgZW5kIG9mIGlucHV0IG9yIHdoZW5cbiAgICAgICAgICAvLyB0aGUgY29tcGxldGUgdGV4dCBpcyBzZWxlY3RlZCAod2hlbiBicm93c2luZyB0aHJvdWdoIGhpc3RvcnkpXG4gICAgICAgICAgaWYgKCFpc0N1cnNvckF0RW5kICYmICFpc0V2ZXJ5dGhpbmdTZWxlY3RlZCkgcmV0dXJuO1xuXG4gICAgICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IoKTtcblxuICAgICAgICAgIC8vIE5PVEU6IHNpbmNlIHdlIG5lZWQgdG8gZmV0Y2ggdGhlIFwibmV4dCBjb21tYW5kXCIsIHdoaWNoIGlzIGFuIGFzeW5jIG9wZXJhdGlvbixcbiAgICAgICAgICAvLyB3ZSB1c2UgYSBJSUZFIHRvIHByb2Nlc3MgdGhhdCBhbmQgZXZlbnR1YWxseSB1cGRhdGUgdGhlIHN0YXRlLlxuICAgICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoY29tbWFuZCkge1xuICAgICAgICAgICAgICBjb25zdCBuZXh0Q29tbWFuZHMgPSBhd2FpdCBnZXROZXh0Q29tbWFuZHNGcm9tUGFyZW50KGNvbW1hbmQpO1xuICAgICAgICAgICAgICAvLyBhdm9pZCBtb3ZpbmcgY3Vyc29yIHdoZW4gdGhlcmUgYXJlIHN1Yi1vcHRpb25zXG4gICAgICAgICAgICAgIGlmIChuZXh0Q29tbWFuZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIC8vIEVuc3VyZSB0aGUgc2VhcmNoIHRleHQgaGFzIG5vdCBjaGFuZ2VkIHdoaWxlIHdlIHdlcmUgbG9hZGluZ1xuICAgICAgICAgICAgICAgIC8vIHRoZSBuZXh0IHJlc3VsdHMsIG90aGVyd2lzZSB3ZSdkIGludGVycnVwdCB0aGUgdXNlci5cbiAgICAgICAgICAgICAgICAvLyBUaHJvdyBhd2F5IHRoZSByZXN1bHRzIGluIGNhc2UgdGhlIHNlYXJjaCB0ZXh0IGhhcyBjaGFuZ2VkLlxuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5zZWFyY2hUZXh0ID09PSBzZWFyY2hUZXh0KSB7XG4gICAgICAgICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzZXROZXh0Q29tbWFuZHMnLFxuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkOiB7IHJlc3VsdHM6IG5leHRDb21tYW5kcyB9LFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2hha2UoKTtcbiAgICAgICAgICB9KSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0Jykge1xuICAgICAgICAgIC8vIGdvIGxlZnQgaW4gc3RhY2tcbiAgICAgICAgICBjb25zdCBwcmV2Q29tbWFuZCA9IGxhc3Qoc3RhdGUuc3RhY2spO1xuXG4gICAgICAgICAgLy8gZG8gbm90aGluZyB3aGVuIHdlIGNhbid0IGdvIGxlZnQgYW55bW9yZVxuICAgICAgICAgIGlmICghcHJldkNvbW1hbmQpIHJldHVybjtcblxuICAgICAgICAgIC8vIHByZXZlbnQgY3Vyc29yIGZyb20ganVtcGluZyBhIGNoYXIgdG8gdGhlIGxlZnQgaW4gdGV4dCBpbnB1dFxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAnc2V0UHJldkNvbW1hbmRzJyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgICAgc2VhcmNoVGV4dDogcHJldkNvbW1hbmQuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgcmVzdWx0czogcHJldkNvbW1hbmQucmVzdWx0cyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBnZXROZXh0Q29tbWFuZHNGcm9tUGFyZW50LFxuICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXMsXG4gICAgICBzaGFrZSxcbiAgICAgIHN0YXRlLFxuICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IsXG4gICAgXVxuICApO1xuICBjb25zdCBoYW5kbGVLZXlVcCA9IHVzZUNhbGxiYWNrPEtleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+PihcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIC8vIHNldHRpbmcgdGhlIHNlbGVjdGlvbiBjYW4gb25seSBoYXBwZW4gaW4gb25LZXlVcFxuICAgICAgaWYgKHNob3VsZFNlbGVjdEZpZWxkVGV4dC5jdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgIGlucHV0LmZvY3VzKCk7XG4gICAgICAgIGlucHV0LnNlbGVjdCgpO1xuICAgICAgICBzaG91bGRTZWxlY3RGaWVsZFRleHQuY3VycmVudCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQua2V5ICE9PSAnRW50ZXInICYmICFpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQpIHJldHVybiB0cnVlO1xuXG4gICAgICAvLyBVc2VyIGp1c3QgdHJpZ2dlcmVkIHRoZSBzZWFyY2hcbiAgICAgIGlmIChzdGF0ZS5zZWxlY3RlZFJlc3VsdCA9PT0gLTEpIHJldHVybiB0cnVlO1xuXG4gICAgICAvLyBVc2VyIGhhZCBzb21ldGhpbmcgc2VsZWN0ZWQgYW5kIHdhbnRzIHRvIGdvIHRoZXJlXG4gICAgICBleGVjdXRlKHN0YXRlLnJlc3VsdHNbc3RhdGUuc2VsZWN0ZWRSZXN1bHRdLCB7XG4gICAgICAgIG9wZW5Jbk5ld1RhYjogaXNOZXdXaW5kb3dDb21iby5jdXJyZW50LFxuICAgICAgfSk7XG5cbiAgICAgIGlzTmV3V2luZG93Q29tYm8uY3VycmVudCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBbZXhlY3V0ZSwgc3RhdGUucmVzdWx0cywgc3RhdGUuc2VsZWN0ZWRSZXN1bHRdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUNhbGxiYWNrPENoYW5nZUV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50Pj4oXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBzZWFyY2hUZXh0ID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgICAgaWYgKHNlYXJjaFRleHQudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdyZXNldCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnc2VhcmNoVGV4dCcsIHBheWxvYWQ6IHNlYXJjaFRleHQgfSk7XG5cbiAgICAgIC8vIEEgc2VhcmNoIHZpYSBuZXR3b3JrIGlzIG9ubHkgdHJpZ2dlcmVkIHdoZW4gdGhlcmVcbiAgICAgIC8vIGFyZSBtb3JlIHRoYW4gdGhyZWUgY2hhcmFjdGVycy4gU28gbm8gZmFsc2UgbG9hZGluZ1xuICAgICAgLy8gaW5kaWNhdGlvbiBpcyBnaXZlbi5cbiAgICAgIGlmIChzZWFyY2hUZXh0LnRyaW0oKS5sZW5ndGggPiAzKSB7XG4gICAgICAgIHNldElzTG9hZGluZygpO1xuICAgICAgfVxuXG4gICAgICBzZWFyY2hGcm9tUGFyZW50KHNlYXJjaFRleHQpLnRoZW4oXG4gICAgICAgIChhc3luY1Jlc3VsdHM6IENvbW1hbmRbXSkgPT4ge1xuICAgICAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yKCk7XG4gICAgICAgICAgdW5zZXRJc0xvYWRpbmcoKTtcblxuICAgICAgICAgIGNvbnN0IGZ1c2UgPSBuZXcgRnVzZShhc3luY1Jlc3VsdHMsIHtcbiAgICAgICAgICAgIGtleXM6IFtcbiAgICAgICAgICAgICAgeyBuYW1lOiAndGV4dCcsIHdlaWdodDogMC42IH0sXG4gICAgICAgICAgICAgIHsgbmFtZTogJ2tleXdvcmRzJywgd2VpZ2h0OiAwLjQgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBtaW5NYXRjaENoYXJMZW5ndGg6IDIsXG4gICAgICAgICAgICBpbmNsdWRlU2NvcmU6IHRydWUsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCBzZWFyY2hSZXN1bHRzID0gZnVzZVxuICAgICAgICAgICAgLnNlYXJjaChzZWFyY2hUZXh0KVxuICAgICAgICAgICAgLy8gRmlsdGVyIG91dCByZXN1bHRzIHdpdGggYSBtYXRjaGluZyBzY29yZSBvdmVyIDAuNzVcbiAgICAgICAgICAgIC5maWx0ZXIoKHJlc3VsdCkgPT4gKHJlc3VsdC5zY29yZSA/IHJlc3VsdC5zY29yZSA8IDAuNzUgOiBmYWxzZSkpXG4gICAgICAgICAgICAvLyBLZWVwIGEgbWF4aW1hbCBvZiA5IHJlc3VsdHNcbiAgICAgICAgICAgIC5zbGljZSgwLCA5KTtcblxuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdzZXRTZWFyY2hUZXh0UmVzdWx0cycsXG4gICAgICAgICAgICBwYXlsb2FkOiBzZWFyY2hSZXN1bHRzLm1hcCgocmVzdWx0KSA9PiByZXN1bHQuaXRlbSksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICB1bnNldElzTG9hZGluZygpO1xuICAgICAgICAgIHNldEhhc05ldHdvcmtFcnJvcigpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0sXG4gICAgW1xuICAgICAgc2VhcmNoRnJvbVBhcmVudCxcbiAgICAgIHNldEhhc05ldHdvcmtFcnJvcixcbiAgICAgIHNldElzTG9hZGluZyxcbiAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yLFxuICAgICAgdW5zZXRJc0xvYWRpbmcsXG4gICAgXVxuICApO1xuICBjb25zdCBoYW5kbGVDb250YWluZXJDbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdyZXNldFJlc3VsdHNXaGVuQ2xvc2luZycgfSk7XG4gICAgb25DbG9zZUZyb21QYXJlbnQoKTtcbiAgfSwgW29uQ2xvc2VGcm9tUGFyZW50XSk7XG5cbiAgY29uc3QgY3JlYXRlQ29tbWFuZE1vdXNlRW50ZXJIYW5kbGVyID0gdXNlQ2FsbGJhY2s8XG4gICAgKGluZGV4OiBudW1iZXIpID0+IE1vdXNlRXZlbnRIYW5kbGVyPEhUTUxEaXZFbGVtZW50PlxuICA+KFxuICAgIChpbmRleCkgPT4gKCkgPT4ge1xuICAgICAgLy8gSW4gY2FzZSB0aGUgY3Vyc29yIGhhcHBlbmVkIHRvIGJlIGluIGEgbG9jYXRpb24gd2hlcmUgYVxuICAgICAgLy8gcmVzdWx0IHdvdWxkIGFwcGVhciwgaXQgd291bGQgdHJpZ2dlciBvbk1vdXNlRW50ZXIgYW5kIHRoZVxuICAgICAgLy8gcmVzdWx0IHdvdWxkIGJlIHNlbGVjdGVkIGltbWVkaWF0ZWx5LiBUaGlzIGlzIG5vdCBzb21ldGhpbmdcbiAgICAgIC8vIGEgdXNlciB3b3VsZCBleHBlY3QsIGhlbmNlIHdlIHByZXZlbnQgaXQgZnJvbSBoYXBwZW5pbmcuXG4gICAgICAvLyBUaGUgdXNlciBoYXMgdG8gbW92ZSB0aGUgY3Vyc29yIHRvIGFuIG9wdGlvbiBleHBsaWNpdGx5IGZvclxuICAgICAgLy8gaXQgdG8gYmVjb21lIGFjdGl2ZS4gSG93ZXZlciwgdGhlIHVzZXIgY2FuIGFsd2F5cyBjbGljayBhbmRcbiAgICAgIC8vIHRoYXQgYWN0aW9uIHdpbGwgYmUgdHJpZ2dlcmVkLlxuICAgICAgaWYgKHNraXBOZXh0U2VsZWN0aW9uLmN1cnJlbnQpIHtcbiAgICAgICAgc2tpcE5leHRTZWxlY3Rpb24uY3VycmVudCA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIHNldHMgdGhlIHNlbGVjdGVkIHJlc3VsdCwgbWFpbmx5IGZvciB0aGUgaG92ZXIgZWZmZWN0XG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdzZWxlY3RlZFJlc3VsdCcsIHBheWxvYWQ6IGluZGV4IH0pO1xuICAgIH0sXG4gICAgW11cbiAgKTtcbiAgY29uc3QgY3JlYXRlQ29tbWFuZENsaWNrSGFuZGxlciA9IHVzZUNhbGxiYWNrPFxuICAgIChjb21tYW5kOiBDb21tYW5kKSA9PiBNb3VzZUV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD5cbiAgPihcbiAgICAoY29tbWFuZCkgPT4gKGV2ZW50KSA9PiB7XG4gICAgICBleGVjdXRlKGNvbW1hbmQsIHtcbiAgICAgICAgb3BlbkluTmV3VGFiOiBoYXNOZXdXaW5kb3dNb2RpZmllcihldmVudCksXG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtleGVjdXRlXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPEJ1dGxlckNvbnRhaW5lclxuICAgICAgb25DbGljaz17aGFuZGxlQ29udGFpbmVyQ2xpY2t9XG4gICAgICBkYXRhLXRlc3RpZD1cInF1aWNrLWFjY2Vzc1wiXG4gICAgICB0YWJJbmRleD17LTF9XG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICByZWY9e3NlYXJjaENvbnRhaW5lclJlZn1cbiAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yU3VyZmFjZX07XG4gICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICR7Y3VzdG9tUHJvcGVydGllcy5ib3JkZXJSYWRpdXM0fTtcbiAgICAgICAgICBtaW4taGVpZ2h0OiA0MHB4O1xuXG4gICAgICAgICAgLyogb25lIG1vcmUgdGhhbiBhcHAtYmFyICgyMDAwMCkgYW5kIG9uZSBtb3JlIHRoYW4gdGhlIG92ZXJsYXkgKDIwMDAxKSAqL1xuICAgICAgICAgIHotaW5kZXg6IDIwMDAyO1xuICAgICAgICAgIHdpZHRoOiA0MDBweDtcbiAgICAgICAgICBtYXJnaW46IDQwcHggYXV0bztcbiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogMCAxMHB4IDMwcHggLThweCByZ2JhKDAsIDAsIDAsIDAuNzUpO1xuICAgICAgICAgIC1tb3otYm94LXNoYWRvdzogMCAxMHB4IDMwcHggLThweCByZ2JhKDAsIDAsIDAsIDAuNzUpO1xuICAgICAgICAgIGJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogJHtzdGF0ZS5oYXNOZXR3b3JrRXJyb3JcbiAgICAgICAgICAgID8gJzAnXG4gICAgICAgICAgICA6IGN1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICBgfVxuICAgICAgICBvbkNsaWNrPXsoZXZlbnQpID0+IHtcbiAgICAgICAgICAvLyBBdm9pZCBjbG9zaW5nIHdoZW4gdGhlIHNlYXJjaENvbnRhaW5lciBpdHNlbGYgaXMgY2xpY2tlZFxuICAgICAgICAgIC8vIElmIHdlIGRvbid0IGRvIHRoaXMsIHRoZW4gdGhlIG92ZXJsYXkgd2lsbCBjbG9zZSB3aGVuIGUuZy5cbiAgICAgICAgICAvLyB0aGUgc2VhcmNoIGlucHV0IGlzIGNsaWNrZWQuXG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBgfVxuICAgICAgICA+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICBodG1sRm9yPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6ICR7Y3VzdG9tUHJvcGVydGllcy5zcGFjaW5nTX07XG4gICAgICAgICAgICAgIG1hcmdpbi10b3A6ICR7Y3VzdG9tUHJvcGVydGllcy5zcGFjaW5nU307XG4gICAgICAgICAgICBgfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxTZWFyY2hJY29uIGNvbG9yPVwibmV1dHJhbDYwXCIgLz5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgaWQ9XCJxdWljay1hY2Nlc3Mtc2VhcmNoLWlucHV0XCJcbiAgICAgICAgICAgIHJlZj17c2VhcmNoSW5wdXRSZWZ9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj17aW50bC5mb3JtYXRNZXNzYWdlKG1lc3NhZ2VzLmlucHV0UGxhY2Vob2Rlcil9XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICAgICAgb3V0bGluZTogMDtcbiAgICAgICAgICAgICAgZm9udC1zaXplOiAyMnB4O1xuICAgICAgICAgICAgICBmb250LXdlaWdodDogMzAwO1xuICAgICAgICAgICAgICBwYWRkaW5nOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019ICR7Y3VzdG9tUHJvcGVydGllcy5zcGFjaW5nTX1cbiAgICAgICAgICAgICAgICAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9ICR7Y3VzdG9tUHJvcGVydGllcy5zcGFjaW5nU307XG4gICAgICAgICAgICAgICY6OnBsYWNlaG9sZGVyIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yTmV1dHJhbDYwfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgYH1cbiAgICAgICAgICAgIHZhbHVlPXtzdGF0ZS5zZWFyY2hUZXh0fVxuICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgIG9uS2V5RG93bj17aGFuZGxlS2V5RG93bn1cbiAgICAgICAgICAgIG9uS2V5VXA9e2hhbmRsZUtleVVwfVxuICAgICAgICAgICAgYXV0b0ZvY3VzPXt0cnVlfVxuICAgICAgICAgICAgYXV0b0NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICB7c3RhdGUuaXNMb2FkaW5nICYmIChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6ICR7Y3VzdG9tUHJvcGVydGllcy5zcGFjaW5nU307XG4gICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8TG9hZGluZ1NwaW5uZXIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICBpZiAoc3RhdGUuaGFzTmV0d29ya0Vycm9yKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgICAgICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JFcnJvcn07XG4gICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICAgICAgICAgICAgY29sb3I6ICR7Y3VzdG9tUHJvcGVydGllcy5jb2xvclN1cmZhY2V9O1xuICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAke2N1c3RvbVByb3BlcnRpZXMuZm9udFNpemVTbWFsbH07XG4gICAgICAgICAgICAgICAgICBwYWRkaW5nOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1hzfTtcbiAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2Ugey4uLm1lc3NhZ2VzLm9mZmxpbmV9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChzdGF0ZS5yZXN1bHRzLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5zZWFyY2hUZXh0LnRyaW0oKS5sZW5ndGggPiAwKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgICAgICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JOZXV0cmFsfTtcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JTb2xpZH07XG4gICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAke2N1c3RvbVByb3BlcnRpZXMuZm9udFNpemVTbWFsbH07XG4gICAgICAgICAgICAgICAgICBwYWRkaW5nOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1hzfTtcbiAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2Ugey4uLm1lc3NhZ2VzLm5vUmVzdWx0c30gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuIHN0YXRlLnJlc3VsdHMubWFwKChjb21tYW5kLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPEJ1dGxlckNvbW1hbmRcbiAgICAgICAgICAgICAga2V5PXtjb21tYW5kLmlkfVxuICAgICAgICAgICAgICBjb21tYW5kPXtjb21tYW5kfVxuICAgICAgICAgICAgICBpc1NlbGVjdGVkPXtzdGF0ZS5zZWxlY3RlZFJlc3VsdCA9PT0gaW5kZXh9XG4gICAgICAgICAgICAgIG9uTW91c2VFbnRlcj17Y3JlYXRlQ29tbWFuZE1vdXNlRW50ZXJIYW5kbGVyKGluZGV4KX1cbiAgICAgICAgICAgICAgb25DbGljaz17Y3JlYXRlQ29tbWFuZENsaWNrSGFuZGxlcihjb21tYW5kKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSk7XG4gICAgICAgIH0pKCl9XG4gICAgICA8L2Rpdj5cbiAgICA8L0J1dGxlckNvbnRhaW5lcj5cbiAgKTtcbn07XG5CdXRsZXIuZGlzcGxheU5hbWUgPSAnQnV0bGVyJztcblxuY29uc3QgQnV0bGVyV2l0aEFuaW1hdGlvbiA9IChwcm9wczogT21pdDxQcm9wcywgJ2NsYXNzTmFtZVNoYWtlQW5pbWF0aW9uJz4pID0+IChcbiAgPENsYXNzTmFtZXM+XG4gICAgeyh7IGNzcyB9KSA9PiAoXG4gICAgICA8QnV0bGVyXG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgY2xhc3NOYW1lU2hha2VBbmltYXRpb249e2Nzc2BcbiAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IDAuNDVzO1xuICAgICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGJvdGg7XG4gICAgICAgICAgYW5pbWF0aW9uLW5hbWU6ICR7c2hha2VBbmltYXRpb259O1xuICAgICAgICBgfVxuICAgICAgLz5cbiAgICApfVxuICA8L0NsYXNzTmFtZXM+XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBCdXRsZXJXaXRoQW5pbWF0aW9uO1xuIl19 */"),
1025
- children: jsxRuntime.jsx(reactIntl.FormattedMessage, _objectSpread({}, messages.offline))
1026
- });
1027
- if (state.results.length === 0 && _trimInstanceProperty__default["default"](_context13 = state.searchText).call(_context13).length > 0) return jsxRuntime.jsx("div", {
1028
- css: /*#__PURE__*/react.css("overflow:hidden;white-space:nowrap;cursor:default;background:", designSystem.customProperties.colorNeutral, ";color:", designSystem.customProperties.colorSolid, ";text-align:center;text-transform:uppercase;font-size:", designSystem.customProperties.fontSizeSmall, ";padding:", designSystem.customProperties.spacingXs, ";" + (process.env.NODE_ENV === "production" ? "" : ";label:Butler;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBMnJCd0IiLCJmaWxlIjoiYnV0bGVyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgQ29tbWFuZCxcbiAgU2VhcmNoVGV4dCxcbiAgU2VsZWN0ZWRSZXN1bHQsXG4gIFN0YWNrLFxuICBIaXN0b3J5RW50cnksXG59IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtcbiAgS2V5Ym9hcmRFdmVudEhhbmRsZXIsXG4gIENoYW5nZUV2ZW50SGFuZGxlcixcbiAgS2V5Ym9hcmRFdmVudCxcbiAgTW91c2VFdmVudEhhbmRsZXIsXG4gIE1vdXNlRXZlbnQsXG4gIHVzZVJlZHVjZXIsXG4gIHVzZVJlZixcbiAgdXNlQ2FsbGJhY2ssXG59IGZyb20gJ3JlYWN0JztcbmltcG9ydCBGdXNlIGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IHsgRm9ybWF0dGVkTWVzc2FnZSwgdXNlSW50bCB9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IGxhc3QgZnJvbSAnbG9kYXNoL2xhc3QnO1xuaW1wb3J0IHsgY3NzLCBrZXlmcmFtZXMsIENsYXNzTmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgTG9hZGluZ1NwaW5uZXIgZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvbG9hZGluZy1zcGlubmVyJztcbmltcG9ydCB7IFNlYXJjaEljb24gfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9pY29ucyc7XG5pbXBvcnQgeyBjdXN0b21Qcm9wZXJ0aWVzIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgQnV0bGVyQ29tbWFuZCBmcm9tICcuLi9idXRsZXItY29tbWFuZCc7XG5pbXBvcnQgQnV0bGVyQ29udGFpbmVyIGZyb20gJy4uL2J1dGxlci1jb250YWluZXInO1xuaW1wb3J0IG1lc3NhZ2VzIGZyb20gJy4uL21lc3NhZ2VzJztcblxuY29uc3QgaXNTZWxlY3RBbGxDb21ibyA9IChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cbiAgZXZlbnQua2V5ID09PSAnYScgJiZcbiAgZXZlbnQubWV0YUtleSAmJlxuICAhZXZlbnQuY3RybEtleSAmJlxuICAhZXZlbnQuYWx0S2V5ICYmXG4gICFldmVudC5zaGlmdEtleTtcblxuY29uc3QgaXNDbG9zZUNvbWJvID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PlxuICBldmVudC5rZXkgPT09ICdFc2NhcGUnICYmXG4gICFldmVudC5tZXRhS2V5ICYmXG4gICFldmVudC5jdHJsS2V5ICYmXG4gICFldmVudC5hbHRLZXkgJiZcbiAgIWV2ZW50LnNoaWZ0S2V5O1xuXG5jb25zdCBnZXRQbGF0Zm9ybSA9ICgpID0+IHtcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdXaW4nKSkgcmV0dXJuICd3aW5kb3dzJztcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdNYWMnKSkgcmV0dXJuICdtYWNvcyc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnWDExJykpIHJldHVybiAndW5peCc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnTGludXgnKSkgcmV0dXJuICdsaW51eCc7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBoYXNOZXdXaW5kb3dNb2RpZmllciA9IChcbiAgZXZlbnQ6IEtleWJvYXJkRXZlbnQ8SFRNTEVsZW1lbnQ+IHwgTW91c2VFdmVudDxIVE1MRWxlbWVudD5cbikgPT4ge1xuICBjb25zdCBwbGF0Zm9ybSA9IGdldFBsYXRmb3JtKCk7XG4gIHN3aXRjaCAocGxhdGZvcm0pIHtcbiAgICBjYXNlICdtYWNvcyc6XG4gICAgICByZXR1cm4gZXZlbnQubWV0YUtleTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGV2ZW50LmN0cmxLZXk7XG4gIH1cbn07XG5cbmNvbnN0IHNoYWtlQW5pbWF0aW9uID0ga2V5ZnJhbWVzYFxuICBmcm9tLFxuICB0byB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcbiAgfVxuXG4gIDE0JSxcbiAgNDIlLFxuICA3MCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTNweCwgMCwgMCk7XG4gIH1cblxuICAyOCUsXG4gIDU2JSxcbiAgODQlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDNweCwgMCwgMCk7XG4gIH1cbmA7XG5cbnR5cGUgU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogYm9vbGVhbjtcbiAgaXNMb2FkaW5nOiBib29sZWFuO1xuICBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0O1xuICBzZWxlY3RlZFJlc3VsdDogU2VsZWN0ZWRSZXN1bHQ7XG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IGJvb2xlYW47XG4gIHJlc3VsdHM6IENvbW1hbmRbXTtcbiAgc3RhY2s6IFN0YWNrW107XG59O1xudHlwZSBBY3Rpb24gPVxuICB8IHsgdHlwZTogJ25ldHdvcmtFcnJvcic7IHBheWxvYWQ6IGJvb2xlYW4gfVxuICB8IHsgdHlwZTogJ2xvYWRpbmcnOyBwYXlsb2FkOiBib29sZWFuIH1cbiAgfCB7IHR5cGU6ICdzZWxlY3RlZFJlc3VsdCc7IHBheWxvYWQ6IG51bWJlciB9XG4gIHwgeyB0eXBlOiAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH1cbiAgfCB7IHR5cGU6ICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfVxuICB8IHtcbiAgICAgIHR5cGU6ICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JztcbiAgICAgIHBheWxvYWQ6IHsgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDsgcmVzdWx0czogQ29tbWFuZFtdIH07XG4gICAgfVxuICB8IHsgdHlwZTogJ3NldE5leHRDb21tYW5kcyc7IHBheWxvYWQ6IHsgcmVzdWx0czogQ29tbWFuZFtdIH0gfVxuICB8IHtcbiAgICAgIHR5cGU6ICdzZXRQcmV2Q29tbWFuZHMnO1xuICAgICAgcGF5bG9hZDogeyBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0OyByZXN1bHRzOiBDb21tYW5kW10gfTtcbiAgICB9XG4gIHwgeyB0eXBlOiAnc2VhcmNoVGV4dCc7IHBheWxvYWQ6IHN0cmluZyB9XG4gIHwgeyB0eXBlOiAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOyBwYXlsb2FkOiBDb21tYW5kW10gfVxuICB8IHsgdHlwZTogJ3Jlc2V0U2VhcmNoVGV4dCcgfVxuICB8IHsgdHlwZTogJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJyB9XG4gIHwgeyB0eXBlOiAncmVzZXQnIH07XG5jb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogZmFsc2UsXG4gIGlzTG9hZGluZzogZmFsc2UsXG4gIHNlYXJjaFRleHQ6ICcnLFxuICBzZWxlY3RlZFJlc3VsdDogLTEsXG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IHRydWUsXG4gIHJlc3VsdHM6IFtdLFxuICBzdGFjazogW10sXG59O1xuY29uc3QgcmVkdWNlciA9IChzdGF0ZTogU3RhdGUgPSBpbml0aWFsU3RhdGUsIGFjdGlvbjogQWN0aW9uKTogU3RhdGUgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnbmV0d29ya0Vycm9yJzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBoYXNOZXR3b3JrRXJyb3I6IGFjdGlvbi5wYXlsb2FkIH07XG4gICAgY2FzZSAnbG9hZGluZyc6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgaXNMb2FkaW5nOiBhY3Rpb24ucGF5bG9hZCB9O1xuICAgIGNhc2UgJ3NlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQgfTtcbiAgICBjYXNlICdpbmNyZW1lbnRTZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6XG4gICAgICAgICAgc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IHN0YXRlLnJlc3VsdHMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0ICsgMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ2RlY3JlbWVudFNlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDpcbiAgICAgICAgICBzdGF0ZS5zZWxlY3RlZFJlc3VsdCA8IDFcbiAgICAgICAgICAgID8gc3RhdGUucmVzdWx0cy5sZW5ndGggLSAxXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0IC0gMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ3BpY2tDb21tYW5kRnJvbUhpc3RvcnknOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OiAwLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZC5zZWFyY2hUZXh0LFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZC5yZXN1bHRzLFxuICAgICAgICBzdGFjazogW10sXG4gICAgICAgIC8vIFRoZSBoaXN0b3J5IGRvZXMgbm90IGdldCBjaGFuZ2VkIGhlcmUsIGl0IHdpbGwgYmUgY2hhbmdlZCBhbG9uZ1xuICAgICAgICAvLyB3aXRoIHRoZSByZWd1bGFyIGZsb3cuXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldE5leHRDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc3RhY2s6IFtcbiAgICAgICAgICAuLi5zdGF0ZS5zdGFjayxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZWFyY2hUZXh0OiBzdGF0ZS5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgcmVzdWx0czogc3RhdGUucmVzdWx0cyxcbiAgICAgICAgICAgIHNlbGVjdGVkUmVzdWx0OiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogMCxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLnJlc3VsdHMsXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldFByZXZDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQuc2VhcmNoVGV4dCxcbiAgICAgICAgcmVzdWx0czogYWN0aW9uLnBheWxvYWQucmVzdWx0cyxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IDAsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgICAvLyBvbWl0IGxhc3QgaXRlbVxuICAgICAgICBzdGFjazogc3RhdGUuc3RhY2suc2xpY2UoMCwgLTEpLFxuICAgICAgfTtcbiAgICBjYXNlICdzZWFyY2hUZXh0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgLy8gY2xlYXIgbmV0d29yayBlcnJvciB3aGVuIHNlYXJjaCB0ZXh0IGlzIGNsZWFyZWQsIHNvIHRoYXQgdXNlcnNcbiAgICAgICAgLy8gYXJlIHRlbXB0ZWQgdG8gcmV0cnlcbiAgICAgICAgaGFzTmV0d29ya0Vycm9yOiBhY3Rpb24ucGF5bG9hZC5sZW5ndGggPiAwICYmIHN0YXRlLmhhc05ldHdvcmtFcnJvcixcbiAgICAgIH07XG4gICAgY2FzZSAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQubGVuZ3RoID4gMCA/IDAgOiAtMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogdHJ1ZSxcbiAgICAgICAgc3RhY2s6IFtdLFxuICAgICAgfTtcbiAgICBjYXNlICdyZXNldFNlYXJjaFRleHQnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlYXJjaFRleHQ6ICcnLCByZXN1bHRzOiBbXSwgc2VsZWN0ZWRSZXN1bHQ6IC0xIH07XG4gICAgY2FzZSAncmVzZXRSZXN1bHRzV2hlbkNsb3NpbmcnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlbGVjdGVkUmVzdWx0OiAtMSwgZW5hYmxlSGlzdG9yeTogdHJ1ZSB9O1xuICAgIGNhc2UgJ3Jlc2V0JzpcbiAgICAgIHJldHVybiBpbml0aWFsU3RhdGU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufTtcblxudHlwZSBQcm9wcyA9IHtcbiAgaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdO1xuICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlOiAoaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdKSA9PiB2b2lkO1xuICBzZWFyY2g6IChzZWFyY2hUZXh0OiBTZWFyY2hUZXh0KSA9PiBQcm9taXNlPENvbW1hbmRbXT47XG4gIGdldE5leHRDb21tYW5kczogKGNvbW1hbmQ6IENvbW1hbmQpID0+IFByb21pc2U8Q29tbWFuZFtdPjtcbiAgZXhlY3V0ZUNvbW1hbmQ6IChjb21tYW5kOiBDb21tYW5kLCBtZXRhOiB7IG9wZW5Jbk5ld1RhYjogYm9vbGVhbiB9KSA9PiB2b2lkO1xuICBvbkNsb3NlOiAoKSA9PiB2b2lkO1xuICBjbGFzc05hbWVTaGFrZUFuaW1hdGlvbjogc3RyaW5nO1xufTtcbmNvbnN0IEJ1dGxlciA9IChwcm9wczogUHJvcHMpID0+IHtcbiAgY29uc3QgaW50bCA9IHVzZUludGwoKTtcbiAgY29uc3QgW3N0YXRlLCBkaXNwYXRjaF0gPSB1c2VSZWR1Y2VyPFxuICAgIChwcmV2U3RhdGU6IFN0YXRlLCBhY3Rpb246IEFjdGlvbikgPT4gU3RhdGVcbiAgPihyZWR1Y2VyLCBpbml0aWFsU3RhdGUpO1xuXG4gIGNvbnN0IHNob3VsZFNlbGVjdEZpZWxkVGV4dCA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IGlzTmV3V2luZG93Q29tYm8gPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBza2lwTmV4dFNlbGVjdGlvbiA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IHNlYXJjaENvbnRhaW5lclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IHNlYXJjaElucHV0UmVmID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KG51bGwpO1xuXG4gIGNvbnN0IHNldEhhc05ldHdvcmtFcnJvciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICduZXR3b3JrRXJyb3InLCBwYXlsb2FkOiB0cnVlIH0pO1xuICB9LCBbXSk7XG4gIGNvbnN0IHVuc2V0SGFzTmV0d29ya0Vycm9yID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ25ldHdvcmtFcnJvcicsIHBheWxvYWQ6IGZhbHNlIH0pO1xuICB9LCBbXSk7XG4gIGNvbnN0IHNldElzTG9hZGluZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdsb2FkaW5nJywgcGF5bG9hZDogdHJ1ZSB9KTtcbiAgfSwgW10pO1xuICBjb25zdCB1bnNldElzTG9hZGluZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdsb2FkaW5nJywgcGF5bG9hZDogZmFsc2UgfSk7XG4gIH0sIFtdKTtcblxuICAvLyBEZXN0cnVjdHVyZSBmdW5jdGlvbnMgZnJvbSBwcm9wcyB0byByZWZlcmVuY2UgdGhlbSBpbiB0aGUgaG9vayBkZXBlbmRlbmN5IGxpc3RcbiAgY29uc3Qge1xuICAgIHNlYXJjaDogc2VhcmNoRnJvbVBhcmVudCxcbiAgICBvbkNsb3NlOiBvbkNsb3NlRnJvbVBhcmVudCxcbiAgICBleGVjdXRlQ29tbWFuZDogZXhlY3V0ZUNvbW1hbmRGcm9tUGFyZW50LFxuICAgIG9uSGlzdG9yeUVudHJpZXNDaGFuZ2U6IG9uSGlzdG9yeUVudHJpZXNDaGFuZ2VGcm9tUGFyZW50LFxuICAgIGdldE5leHRDb21tYW5kczogZ2V0TmV4dENvbW1hbmRzRnJvbVBhcmVudCxcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHNoYWtlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChzZWFyY2hDb250YWluZXJSZWYuY3VycmVudCkge1xuICAgICAgc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQuY2xhc3NMaXN0LnJlbW92ZShcbiAgICAgICAgcHJvcHMuY2xhc3NOYW1lU2hha2VBbmltYXRpb25cbiAgICAgICk7XG4gICAgICAvLyAtPiB0cmlnZ2VyaW5nIHJlZmxvd1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXZvaWRcbiAgICAgIHZvaWQgc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQub2Zmc2V0V2lkdGg7XG4gICAgICBzZWFyY2hDb250YWluZXJSZWYuY3VycmVudC5jbGFzc0xpc3QuYWRkKHByb3BzLmNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uKTtcbiAgICB9XG4gIH0sIFtwcm9wcy5jbGFzc05hbWVTaGFrZUFuaW1hdGlvbl0pO1xuXG4gIGNvbnN0IGV4ZWN1dGUgPSB1c2VDYWxsYmFjayhcbiAgICAoY29tbWFuZCwgbWV0YSkgPT4ge1xuICAgICAgLy8gT25seSBtYWluIGVudHJpZXMgZ2V0IGFkZGVkIHRvIGhpc3RvcnksIHNvIHdoZW4gYSBzdWJjb21tYW5kIGlzIGV4ZWN1dGVkLFxuICAgICAgLy8gd2UgYWRkIHRoZSBtYWluIGNvbW1hbmQgb2YgaXQgdG8gdGhlIGhpc3RvcnkgKHRoZSB0b3AtbGV2ZWwgY29tbWFuZCkuXG4gICAgICAvL1xuICAgICAgLy8gVGhlIGtleSB0byBpZGVudGlmeSBoaXN0b3J5IGVudHJpZXMgYnkgaXMgYWx3YXlzIHRoZSBzZWFyY2hUZXh0XG4gICAgICAvLyBUaGVyZSB3aWxsIG5ldmVyIGJlIHR3byBoaXN0b3J5IGVudHJpZXMgd2l0aCB0aGUgc2FtZSBzZWFyY2hUZXh0XG4gICAgICBjb25zdCBlbnRyeSA9XG4gICAgICAgIHN0YXRlLnN0YWNrLmxlbmd0aCA9PT0gMFxuICAgICAgICAgID8gLy8gVGhlIHN0YWNrIGlzIGVtcHR5LCBzbyB3ZSBhcmUgZXhlY3V0aW5nIGEgdG9wLWxldmVsIGNvbW1hbmRcbiAgICAgICAgICAgIHsgc2VhcmNoVGV4dDogc3RhdGUuc2VhcmNoVGV4dCwgcmVzdWx0czogc3RhdGUucmVzdWx0cyB9XG4gICAgICAgICAgOiAvLyBXZSBhcmUgZXhlY3V0aW5nIGEgc3ViY29tbWFuZCwgc28gd2UgZ2V0IHRoZSB0b3AtbGV2ZWwgY29tbWFuZCBmb3IgaXQsXG4gICAgICAgICAgICAvLyB3aGljaCBpcyBhdCB0aGUgYm90dG9tIG9mIHRoZSBzdGFjay5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc2VhcmNoVGV4dDogc3RhdGUuc3RhY2tbMF0uc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgcmVzdWx0czogc3RhdGUuc3RhY2tbMF0ucmVzdWx0cyxcbiAgICAgICAgICAgIH07XG5cbiAgICAgIC8vIEFkZCB0aGUgZW50cnkgdG8gdGhlIGhpc3RvcnksIHdoaWxlIGV4Y2x1ZGluZyBhbnkgZWFybGllciBoaXN0b3J5IGVudHJ5XG4gICAgICAvLyB3aXRoIHRoZSBzYW1lIHNlYXJjaCB0ZXh0LiBUaGlzIGVmZmVjdGl2ZWx5IFwibW92ZXNcIiB0aGF0IGVudHJ5IHRvIHRoZVxuICAgICAgLy8gdG9wIG9mIHRoZSBoaXN0b3J5ICh3aXRoIHRoZSBtb3N0IHJlY2VudCByZXN1bHRzKSwgb3IgYXBwZW5kcyBhIG5ldyBlbnRyeVxuICAgICAgLy8gd2hlbiBpdCBkaWRuJ3QgZXhpc3QgYmVmb3JlLlxuICAgICAgb25IaXN0b3J5RW50cmllc0NoYW5nZUZyb21QYXJlbnQoW1xuICAgICAgICAuLi5wcm9wcy5oaXN0b3J5RW50cmllcy5maWx0ZXIoXG4gICAgICAgICAgKGNvbW1hbmQpID0+IGNvbW1hbmQuc2VhcmNoVGV4dCAhPT0gZW50cnkuc2VhcmNoVGV4dFxuICAgICAgICApLFxuICAgICAgICBlbnRyeSxcbiAgICAgIF0pO1xuXG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdyZXNldFNlYXJjaFRleHQnIH0pO1xuXG4gICAgICBvbkNsb3NlRnJvbVBhcmVudCgpO1xuXG4gICAgICBleGVjdXRlQ29tbWFuZEZyb21QYXJlbnQoY29tbWFuZCwgbWV0YSk7XG4gICAgfSxcbiAgICBbXG4gICAgICBleGVjdXRlQ29tbWFuZEZyb21QYXJlbnQsXG4gICAgICBvbkNsb3NlRnJvbVBhcmVudCxcbiAgICAgIG9uSGlzdG9yeUVudHJpZXNDaGFuZ2VGcm9tUGFyZW50LFxuICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXMsXG4gICAgICBzdGF0ZS5yZXN1bHRzLFxuICAgICAgc3RhdGUuc2VhcmNoVGV4dCxcbiAgICAgIHN0YXRlLnN0YWNrLFxuICAgIF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IHVzZUNhbGxiYWNrPEtleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+PihcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIC8vIFByZXZlbnRpbmcgY3Vyc29yIGp1bXBzIGNhbiBvbmx5IGhhcHBlbiBpbiBvbktleURvd24sIGJ1dCBub3QgaW4gb25LZXlVcFxuICAgICAgZXZlbnQucGVyc2lzdCgpO1xuXG4gICAgICAvLyBXZSB3YW50IHRvIGtub3cgd2hlbiB0aGUgdXNlciBwcmVzc2VzIGNtZCtlbnRlciAoY21kIGJlaW5nIGEgbWV0YSBrZXkpLlxuICAgICAgLy8gV2UgYXJlIG9ubHkgdG9sZCBhYm91dCB0aGlzIGluIGtleURvd24sIGJ1dCBub3QgaW4ga2V5VXAsIHNvIHdlIG5lZWRcbiAgICAgIC8vIHRvIGhhbmRsZSBpdCBoZXJlXG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInICYmIGhhc05ld1dpbmRvd01vZGlmaWVyKGV2ZW50KSkge1xuICAgICAgICBpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIEF2b2lkIHNlbGVjdGluZyB0aGUgd2hvbGUgcGFnZSB3aGVuIHVzZXIgc2VsZWN0ZXMgZXZlcnl0aGluZyB3aXRoXG4gICAgICAvLyBhIGtleWJvYXJkIHNob3J0Y3V0LiBUaGVyZSBpcyBwcm9iYWJseSBhIGJldHRlciB3YXkgdG8gZG8gdGhpcyB0aG91Z2guXG4gICAgICAvLyBUaGlzIHByZXZlbnRzIHRoZSB3aG9sZSBwYWdlIGZyb20gYmVpbmcgc2VsZWN0ZWQgaW4gY2FzZSB0aGUgdXNlclxuICAgICAgLy8gMSkgb3BlbnMgdGhlIHNlYXJjaCBib3hcbiAgICAgIC8vIDIpIHR5cGVzIGludG8gaXRcbiAgICAgIC8vIDMpIHNlbGVjdHMgYWxsIHRleHQgdXNpbmcgY21kK2FcbiAgICAgIC8vIDQpIGNsb3NlcyB0aGUgc2VhcmNoIGJveCB3aXRoIGVzY1xuICAgICAgLy8gV2l0aG91dCB0aGlzIGhhbmRsaW5nLCB0aGUgd2hvbGUgcGFnZSB3b3VsZCBub3cgYmUgc2VsZWN0ZWRcbiAgICAgIGlmIChpc1NlbGVjdEFsbENvbWJvKGV2ZW50KSkge1xuICAgICAgICAvLyBUaGlzIHN0b3BzIHRoZSBicm93c2VyIGZyb20gc2VsZWN0aW5nIGFueXRoaW5nXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmIChzZWFyY2hJbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgLy8gVGhpcyBzZWxlY3RzIHRoZSB0ZXh0IGluIHRoZSBzZWFyY2ggaW5wdXRcbiAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNldFNlbGVjdGlvblJhbmdlKDAsIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIGF2b2lkIGludGVyZmVyaW5nIHdpdGggb3RoZXIga2V5IGNvbWJpbmF0aW9ucyB1c2luZyBtb2RpZmllciBrZXlzXG4gICAgICBpZiAoZXZlbnQuY3RybEtleSB8fCBldmVudC5hbHRLZXkgfHwgZXZlbnQuc2hpZnRLZXkgfHwgZXZlbnQubWV0YUtleSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKGlzQ2xvc2VDb21ibyhldmVudCkpIHJldHVybjtcblxuICAgICAgLy8gc2tpcCBuZXh0IG1vdXNlRW50ZXIgdG8gYXZvaWQgc2V0dGluZyBzZWxlY3RlZFJlc3VsdCB3aGVuIGN1cnNvciBqdXN0XG4gICAgICAvLyBoYXBwZW5zIHRvIGJlIHdoZXJlIHRoZSByZXN1bHRzIHdpbGwgcG9wIHVwXG4gICAgICBza2lwTmV4dFNlbGVjdGlvbi5jdXJyZW50ID0gdHJ1ZTtcblxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgICAgLy8gcHJldmVudCBjdXJzb3IgZnJvbSBqdW1waW5nIHRvIGVuZCBvZiB0ZXh0IGlucHV0XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ2luY3JlbWVudFNlbGVjdGVkUmVzdWx0JyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICAgIC8vIGJyb3dzZSB0aHJvdWdoIGhpc3RvcnlcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgKHN0YXRlLnNlbGVjdGVkUmVzdWx0IDwgMSAmJiBzdGF0ZS5lbmFibGVIaXN0b3J5KVxuICAgICAgICApIHtcbiAgICAgICAgICBzaG91bGRTZWxlY3RGaWVsZFRleHQuY3VycmVudCA9IHRydWU7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRJbmRleCA9XG4gICAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICA/IC8vIFdoZW4gZ29pbmcgYmFjayB0aGUgZmlyc3Qgc3RlcFxuICAgICAgICAgICAgICAgIC0xXG4gICAgICAgICAgICAgIDogLy8gV2hlbiBnb2luZyBiYWNrIG1vcmUgdGhhbiBvbmUgc3RlcFxuICAgICAgICAgICAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgIChjb21tYW5kKSA9PiBjb21tYW5kLnNlYXJjaFRleHQgPT09IHN0YXRlLnNlYXJjaFRleHRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgIC8vIFBpY2sgdGhlIHByZXZpb3VzIGNvbW1hbmQgZnJvbSB0aGUgaGlzdG9yeVxuICAgICAgICAgIGNvbnN0IHByZXZDb21tYW5kID1cbiAgICAgICAgICAgIHNlbGVjdGVkSW5kZXggPT09IC0xXG4gICAgICAgICAgICAgID8gLy8gcHJldmlvdXMgY29tbWFuZCBvbiB0b3Agb2YgdGhlIGhpc3Rvcnkgd2hlbiBnb2luZyBiYWNrIG9uXG4gICAgICAgICAgICAgICAgLy8gZmlyc3Qgc3RlcFxuICAgICAgICAgICAgICAgIGxhc3QocHJvcHMuaGlzdG9yeUVudHJpZXMpXG4gICAgICAgICAgICAgIDogLy8gcHJldmlvdXMgY29tbWFuZCBpcyBkZWVwZXIgZG93blxuICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlIGhpc3RvcnkgZG9lcyBub3QgZXhpc3QgKG5lZ2F0aXZlIGluZGV4KSwgdGhlblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgaW1wbGljaXRseSByZXR1cm5zIHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzW3NlbGVjdGVkSW5kZXggLSAxXTtcbiAgICAgICAgICAvLyBTa2lwIHdoZW4gbm8gcHJldmlvdXMgZW50cnkgZXhpc3RzIGluIHRoZSBoaXN0b3J5XG4gICAgICAgICAgaWYgKCFwcmV2Q29tbWFuZCkgcmV0dXJuO1xuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgICAgc2VhcmNoVGV4dDogcHJldkNvbW1hbmQuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgcmVzdWx0czogcHJldkNvbW1hbmQucmVzdWx0cyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHByZXZlbnQgY3Vyc29yIGZyb20ganVtcGluZyB0byBiZWdpbm5pbmcgb2YgdGV4dCBpbnB1dFxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0ZS5zZWxlY3RlZFJlc3VsdCA+IC0xKSB7XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0Jykge1xuICAgICAgICAgIGNvbnN0IGNvbW1hbmQgPSBzdGF0ZS5yZXN1bHRzW3N0YXRlLnNlbGVjdGVkUmVzdWx0XTtcbiAgICAgICAgICBjb25zdCBzZWFyY2hUZXh0ID0gc3RhdGUuc2VhcmNoVGV4dDtcbiAgICAgICAgICBjb25zdCBpc0N1cnNvckF0RW5kID1cbiAgICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQgJiZcbiAgICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xuXG4gICAgICAgICAgY29uc3QgaXNFdmVyeXRoaW5nU2VsZWN0ZWQgPVxuICAgICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudCAmJlxuICAgICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydCA9PT0gMCAmJlxuICAgICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xuXG4gICAgICAgICAgLy8gb25seSBhbGxvdyBkaXZpbmcgaW4gd2hlbiBjdXJzb3IgaXMgYXQgZW5kIG9mIGlucHV0IG9yIHdoZW5cbiAgICAgICAgICAvLyB0aGUgY29tcGxldGUgdGV4dCBpcyBzZWxlY3RlZCAod2hlbiBicm93c2luZyB0aHJvdWdoIGhpc3RvcnkpXG4gICAgICAgICAgaWYgKCFpc0N1cnNvckF0RW5kICYmICFpc0V2ZXJ5dGhpbmdTZWxlY3RlZCkgcmV0dXJuO1xuXG4gICAgICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IoKTtcblxuICAgICAgICAgIC8vIE5PVEU6IHNpbmNlIHdlIG5lZWQgdG8gZmV0Y2ggdGhlIFwibmV4dCBjb21tYW5kXCIsIHdoaWNoIGlzIGFuIGFzeW5jIG9wZXJhdGlvbixcbiAgICAgICAgICAvLyB3ZSB1c2UgYSBJSUZFIHRvIHByb2Nlc3MgdGhhdCBhbmQgZXZlbnR1YWxseSB1cGRhdGUgdGhlIHN0YXRlLlxuICAgICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoY29tbWFuZCkge1xuICAgICAgICAgICAgICBjb25zdCBuZXh0Q29tbWFuZHMgPSBhd2FpdCBnZXROZXh0Q29tbWFuZHNGcm9tUGFyZW50KGNvbW1hbmQpO1xuICAgICAgICAgICAgICAvLyBhdm9pZCBtb3ZpbmcgY3Vyc29yIHdoZW4gdGhlcmUgYXJlIHN1Yi1vcHRpb25zXG4gICAgICAgICAgICAgIGlmIChuZXh0Q29tbWFuZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIC8vIEVuc3VyZSB0aGUgc2VhcmNoIHRleHQgaGFzIG5vdCBjaGFuZ2VkIHdoaWxlIHdlIHdlcmUgbG9hZGluZ1xuICAgICAgICAgICAgICAgIC8vIHRoZSBuZXh0IHJlc3VsdHMsIG90aGVyd2lzZSB3ZSdkIGludGVycnVwdCB0aGUgdXNlci5cbiAgICAgICAgICAgICAgICAvLyBUaHJvdyBhd2F5IHRoZSByZXN1bHRzIGluIGNhc2UgdGhlIHNlYXJjaCB0ZXh0IGhhcyBjaGFuZ2VkLlxuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5zZWFyY2hUZXh0ID09PSBzZWFyY2hUZXh0KSB7XG4gICAgICAgICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzZXROZXh0Q29tbWFuZHMnLFxuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkOiB7IHJlc3VsdHM6IG5leHRDb21tYW5kcyB9LFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2hha2UoKTtcbiAgICAgICAgICB9KSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0Jykge1xuICAgICAgICAgIC8vIGdvIGxlZnQgaW4gc3RhY2tcbiAgICAgICAgICBjb25zdCBwcmV2Q29tbWFuZCA9IGxhc3Qoc3RhdGUuc3RhY2spO1xuXG4gICAgICAgICAgLy8gZG8gbm90aGluZyB3aGVuIHdlIGNhbid0IGdvIGxlZnQgYW55bW9yZVxuICAgICAgICAgIGlmICghcHJldkNvbW1hbmQpIHJldHVybjtcblxuICAgICAgICAgIC8vIHByZXZlbnQgY3Vyc29yIGZyb20ganVtcGluZyBhIGNoYXIgdG8gdGhlIGxlZnQgaW4gdGV4dCBpbnB1dFxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAnc2V0UHJldkNvbW1hbmRzJyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgICAgc2VhcmNoVGV4dDogcHJldkNvbW1hbmQuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgcmVzdWx0czogcHJldkNvbW1hbmQucmVzdWx0cyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBnZXROZXh0Q29tbWFuZHNGcm9tUGFyZW50LFxuICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXMsXG4gICAgICBzaGFrZSxcbiAgICAgIHN0YXRlLFxuICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IsXG4gICAgXVxuICApO1xuICBjb25zdCBoYW5kbGVLZXlVcCA9IHVzZUNhbGxiYWNrPEtleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+PihcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIC8vIHNldHRpbmcgdGhlIHNlbGVjdGlvbiBjYW4gb25seSBoYXBwZW4gaW4gb25LZXlVcFxuICAgICAgaWYgKHNob3VsZFNlbGVjdEZpZWxkVGV4dC5jdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgIGlucHV0LmZvY3VzKCk7XG4gICAgICAgIGlucHV0LnNlbGVjdCgpO1xuICAgICAgICBzaG91bGRTZWxlY3RGaWVsZFRleHQuY3VycmVudCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQua2V5ICE9PSAnRW50ZXInICYmICFpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQpIHJldHVybiB0cnVlO1xuXG4gICAgICAvLyBVc2VyIGp1c3QgdHJpZ2dlcmVkIHRoZSBzZWFyY2hcbiAgICAgIGlmIChzdGF0ZS5zZWxlY3RlZFJlc3VsdCA9PT0gLTEpIHJldHVybiB0cnVlO1xuXG4gICAgICAvLyBVc2VyIGhhZCBzb21ldGhpbmcgc2VsZWN0ZWQgYW5kIHdhbnRzIHRvIGdvIHRoZXJlXG4gICAgICBleGVjdXRlKHN0YXRlLnJlc3VsdHNbc3RhdGUuc2VsZWN0ZWRSZXN1bHRdLCB7XG4gICAgICAgIG9wZW5Jbk5ld1RhYjogaXNOZXdXaW5kb3dDb21iby5jdXJyZW50LFxuICAgICAgfSk7XG5cbiAgICAgIGlzTmV3V2luZG93Q29tYm8uY3VycmVudCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBbZXhlY3V0ZSwgc3RhdGUucmVzdWx0cywgc3RhdGUuc2VsZWN0ZWRSZXN1bHRdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUNhbGxiYWNrPENoYW5nZUV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50Pj4oXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBzZWFyY2hUZXh0ID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgICAgaWYgKHNlYXJjaFRleHQudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdyZXNldCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnc2VhcmNoVGV4dCcsIHBheWxvYWQ6IHNlYXJjaFRleHQgfSk7XG5cbiAgICAgIC8vIEEgc2VhcmNoIHZpYSBuZXR3b3JrIGlzIG9ubHkgdHJpZ2dlcmVkIHdoZW4gdGhlcmVcbiAgICAgIC8vIGFyZSBtb3JlIHRoYW4gdGhyZWUgY2hhcmFjdGVycy4gU28gbm8gZmFsc2UgbG9hZGluZ1xuICAgICAgLy8gaW5kaWNhdGlvbiBpcyBnaXZlbi5cbiAgICAgIGlmIChzZWFyY2hUZXh0LnRyaW0oKS5sZW5ndGggPiAzKSB7XG4gICAgICAgIHNldElzTG9hZGluZygpO1xuICAgICAgfVxuXG4gICAgICBzZWFyY2hGcm9tUGFyZW50KHNlYXJjaFRleHQpLnRoZW4oXG4gICAgICAgIChhc3luY1Jlc3VsdHM6IENvbW1hbmRbXSkgPT4ge1xuICAgICAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yKCk7XG4gICAgICAgICAgdW5zZXRJc0xvYWRpbmcoKTtcblxuICAgICAgICAgIGNvbnN0IGZ1c2UgPSBuZXcgRnVzZShhc3luY1Jlc3VsdHMsIHtcbiAgICAgICAgICAgIGtleXM6IFtcbiAgICAgICAgICAgICAgeyBuYW1lOiAndGV4dCcsIHdlaWdodDogMC42IH0sXG4gICAgICAgICAgICAgIHsgbmFtZTogJ2tleXdvcmRzJywgd2VpZ2h0OiAwLjQgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBtaW5NYXRjaENoYXJMZW5ndGg6IDIsXG4gICAgICAgICAgICBpbmNsdWRlU2NvcmU6IHRydWUsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCBzZWFyY2hSZXN1bHRzID0gZnVzZVxuICAgICAgICAgICAgLnNlYXJjaChzZWFyY2hUZXh0KVxuICAgICAgICAgICAgLy8gRmlsdGVyIG91dCByZXN1bHRzIHdpdGggYSBtYXRjaGluZyBzY29yZSBvdmVyIDAuNzVcbiAgICAgICAgICAgIC5maWx0ZXIoKHJlc3VsdCkgPT4gKHJlc3VsdC5zY29yZSA/IHJlc3VsdC5zY29yZSA8IDAuNzUgOiBmYWxzZSkpXG4gICAgICAgICAgICAvLyBLZWVwIGEgbWF4aW1hbCBvZiA5IHJlc3VsdHNcbiAgICAgICAgICAgIC5zbGljZSgwLCA5KTtcblxuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdzZXRTZWFyY2hUZXh0UmVzdWx0cycsXG4gICAgICAgICAgICBwYXlsb2FkOiBzZWFyY2hSZXN1bHRzLm1hcCgocmVzdWx0KSA9PiByZXN1bHQuaXRlbSksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICB1bnNldElzTG9hZGluZygpO1xuICAgICAgICAgIHNldEhhc05ldHdvcmtFcnJvcigpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0sXG4gICAgW1xuICAgICAgc2VhcmNoRnJvbVBhcmVudCxcbiAgICAgIHNldEhhc05ldHdvcmtFcnJvcixcbiAgICAgIHNldElzTG9hZGluZyxcbiAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yLFxuICAgICAgdW5zZXRJc0xvYWRpbmcsXG4gICAgXVxuICApO1xuICBjb25zdCBoYW5kbGVDb250YWluZXJDbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdyZXNldFJlc3VsdHNXaGVuQ2xvc2luZycgfSk7XG4gICAgb25DbG9zZUZyb21QYXJlbnQoKTtcbiAgfSwgW29uQ2xvc2VGcm9tUGFyZW50XSk7XG5cbiAgY29uc3QgY3JlYXRlQ29tbWFuZE1vdXNlRW50ZXJIYW5kbGVyID0gdXNlQ2FsbGJhY2s8XG4gICAgKGluZGV4OiBudW1iZXIpID0+IE1vdXNlRXZlbnRIYW5kbGVyPEhUTUxEaXZFbGVtZW50PlxuICA+KFxuICAgIChpbmRleCkgPT4gKCkgPT4ge1xuICAgICAgLy8gSW4gY2FzZSB0aGUgY3Vyc29yIGhhcHBlbmVkIHRvIGJlIGluIGEgbG9jYXRpb24gd2hlcmUgYVxuICAgICAgLy8gcmVzdWx0IHdvdWxkIGFwcGVhciwgaXQgd291bGQgdHJpZ2dlciBvbk1vdXNlRW50ZXIgYW5kIHRoZVxuICAgICAgLy8gcmVzdWx0IHdvdWxkIGJlIHNlbGVjdGVkIGltbWVkaWF0ZWx5LiBUaGlzIGlzIG5vdCBzb21ldGhpbmdcbiAgICAgIC8vIGEgdXNlciB3b3VsZCBleHBlY3QsIGhlbmNlIHdlIHByZXZlbnQgaXQgZnJvbSBoYXBwZW5pbmcuXG4gICAgICAvLyBUaGUgdXNlciBoYXMgdG8gbW92ZSB0aGUgY3Vyc29yIHRvIGFuIG9wdGlvbiBleHBsaWNpdGx5IGZvclxuICAgICAgLy8gaXQgdG8gYmVjb21lIGFjdGl2ZS4gSG93ZXZlciwgdGhlIHVzZXIgY2FuIGFsd2F5cyBjbGljayBhbmRcbiAgICAgIC8vIHRoYXQgYWN0aW9uIHdpbGwgYmUgdHJpZ2dlcmVkLlxuICAgICAgaWYgKHNraXBOZXh0U2VsZWN0aW9uLmN1cnJlbnQpIHtcbiAgICAgICAgc2tpcE5leHRTZWxlY3Rpb24uY3VycmVudCA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIHNldHMgdGhlIHNlbGVjdGVkIHJlc3VsdCwgbWFpbmx5IGZvciB0aGUgaG92ZXIgZWZmZWN0XG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdzZWxlY3RlZFJlc3VsdCcsIHBheWxvYWQ6IGluZGV4IH0pO1xuICAgIH0sXG4gICAgW11cbiAgKTtcbiAgY29uc3QgY3JlYXRlQ29tbWFuZENsaWNrSGFuZGxlciA9IHVzZUNhbGxiYWNrPFxuICAgIChjb21tYW5kOiBDb21tYW5kKSA9PiBNb3VzZUV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD5cbiAgPihcbiAgICAoY29tbWFuZCkgPT4gKGV2ZW50KSA9PiB7XG4gICAgICBleGVjdXRlKGNvbW1hbmQsIHtcbiAgICAgICAgb3BlbkluTmV3VGFiOiBoYXNOZXdXaW5kb3dNb2RpZmllcihldmVudCksXG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtleGVjdXRlXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPEJ1dGxlckNvbnRhaW5lclxuICAgICAgb25DbGljaz17aGFuZGxlQ29udGFpbmVyQ2xpY2t9XG4gICAgICBkYXRhLXRlc3RpZD1cInF1aWNrLWFjY2Vzc1wiXG4gICAgICB0YWJJbmRleD17LTF9XG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICByZWY9e3NlYXJjaENvbnRhaW5lclJlZn1cbiAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yU3VyZmFjZX07XG4gICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICR7Y3VzdG9tUHJvcGVydGllcy5ib3JkZXJSYWRpdXM0fTtcbiAgICAgICAgICBtaW4taGVpZ2h0OiA0MHB4O1xuXG4gICAgICAgICAgLyogb25lIG1vcmUgdGhhbiBhcHAtYmFyICgyMDAwMCkgYW5kIG9uZSBtb3JlIHRoYW4gdGhlIG92ZXJsYXkgKDIwMDAxKSAqL1xuICAgICAgICAgIHotaW5kZXg6IDIwMDAyO1xuICAgICAgICAgIHdpZHRoOiA0MDBweDtcbiAgICAgICAgICBtYXJnaW46IDQwcHggYXV0bztcbiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogMCAxMHB4IDMwcHggLThweCByZ2JhKDAsIDAsIDAsIDAuNzUpO1xuICAgICAgICAgIC1tb3otYm94LXNoYWRvdzogMCAxMHB4IDMwcHggLThweCByZ2JhKDAsIDAsIDAsIDAuNzUpO1xuICAgICAgICAgIGJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogJHtzdGF0ZS5oYXNOZXR3b3JrRXJyb3JcbiAgICAgICAgICAgID8gJzAnXG4gICAgICAgICAgICA6IGN1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICBgfVxuICAgICAgICBvbkNsaWNrPXsoZXZlbnQpID0+IHtcbiAgICAgICAgICAvLyBBdm9pZCBjbG9zaW5nIHdoZW4gdGhlIHNlYXJjaENvbnRhaW5lciBpdHNlbGYgaXMgY2xpY2tlZFxuICAgICAgICAgIC8vIElmIHdlIGRvbid0IGRvIHRoaXMsIHRoZW4gdGhlIG92ZXJsYXkgd2lsbCBjbG9zZSB3aGVuIGUuZy5cbiAgICAgICAgICAvLyB0aGUgc2VhcmNoIGlucHV0IGlzIGNsaWNrZWQuXG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBgfVxuICAgICAgICA+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICBodG1sRm9yPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6ICR7Y3VzdG9tUHJvcGVydGllcy5zcGFjaW5nTX07XG4gICAgICAgICAgICAgIG1hcmdpbi10b3A6ICR7Y3VzdG9tUHJvcGVydGllcy5zcGFjaW5nU307XG4gICAgICAgICAgICBgfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxTZWFyY2hJY29uIGNvbG9yPVwibmV1dHJhbDYwXCIgLz5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgaWQ9XCJxdWljay1hY2Nlc3Mtc2VhcmNoLWlucHV0XCJcbiAgICAgICAgICAgIHJlZj17c2VhcmNoSW5wdXRSZWZ9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj17aW50bC5mb3JtYXRNZXNzYWdlKG1lc3NhZ2VzLmlucHV0UGxhY2Vob2Rlcil9XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICAgICAgb3V0bGluZTogMDtcbiAgICAgICAgICAgICAgZm9udC1zaXplOiAyMnB4O1xuICAgICAgICAgICAgICBmb250LXdlaWdodDogMzAwO1xuICAgICAgICAgICAgICBwYWRkaW5nOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019ICR7Y3VzdG9tUHJvcGVydGllcy5zcGFjaW5nTX1cbiAgICAgICAgICAgICAgICAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9ICR7Y3VzdG9tUHJvcGVydGllcy5zcGFjaW5nU307XG4gICAgICAgICAgICAgICY6OnBsYWNlaG9sZGVyIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yTmV1dHJhbDYwfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgYH1cbiAgICAgICAgICAgIHZhbHVlPXtzdGF0ZS5zZWFyY2hUZXh0fVxuICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgIG9uS2V5RG93bj17aGFuZGxlS2V5RG93bn1cbiAgICAgICAgICAgIG9uS2V5VXA9e2hhbmRsZUtleVVwfVxuICAgICAgICAgICAgYXV0b0ZvY3VzPXt0cnVlfVxuICAgICAgICAgICAgYXV0b0NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICB7c3RhdGUuaXNMb2FkaW5nICYmIChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6ICR7Y3VzdG9tUHJvcGVydGllcy5zcGFjaW5nU307XG4gICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8TG9hZGluZ1NwaW5uZXIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICBpZiAoc3RhdGUuaGFzTmV0d29ya0Vycm9yKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgICAgICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JFcnJvcn07XG4gICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICAgICAgICAgICAgY29sb3I6ICR7Y3VzdG9tUHJvcGVydGllcy5jb2xvclN1cmZhY2V9O1xuICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAke2N1c3RvbVByb3BlcnRpZXMuZm9udFNpemVTbWFsbH07XG4gICAgICAgICAgICAgICAgICBwYWRkaW5nOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1hzfTtcbiAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2Ugey4uLm1lc3NhZ2VzLm9mZmxpbmV9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChzdGF0ZS5yZXN1bHRzLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5zZWFyY2hUZXh0LnRyaW0oKS5sZW5ndGggPiAwKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgICAgICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JOZXV0cmFsfTtcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JTb2xpZH07XG4gICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAke2N1c3RvbVByb3BlcnRpZXMuZm9udFNpemVTbWFsbH07XG4gICAgICAgICAgICAgICAgICBwYWRkaW5nOiAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ1hzfTtcbiAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2Ugey4uLm1lc3NhZ2VzLm5vUmVzdWx0c30gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuIHN0YXRlLnJlc3VsdHMubWFwKChjb21tYW5kLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPEJ1dGxlckNvbW1hbmRcbiAgICAgICAgICAgICAga2V5PXtjb21tYW5kLmlkfVxuICAgICAgICAgICAgICBjb21tYW5kPXtjb21tYW5kfVxuICAgICAgICAgICAgICBpc1NlbGVjdGVkPXtzdGF0ZS5zZWxlY3RlZFJlc3VsdCA9PT0gaW5kZXh9XG4gICAgICAgICAgICAgIG9uTW91c2VFbnRlcj17Y3JlYXRlQ29tbWFuZE1vdXNlRW50ZXJIYW5kbGVyKGluZGV4KX1cbiAgICAgICAgICAgICAgb25DbGljaz17Y3JlYXRlQ29tbWFuZENsaWNrSGFuZGxlcihjb21tYW5kKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSk7XG4gICAgICAgIH0pKCl9XG4gICAgICA8L2Rpdj5cbiAgICA8L0J1dGxlckNvbnRhaW5lcj5cbiAgKTtcbn07XG5CdXRsZXIuZGlzcGxheU5hbWUgPSAnQnV0bGVyJztcblxuY29uc3QgQnV0bGVyV2l0aEFuaW1hdGlvbiA9IChwcm9wczogT21pdDxQcm9wcywgJ2NsYXNzTmFtZVNoYWtlQW5pbWF0aW9uJz4pID0+IChcbiAgPENsYXNzTmFtZXM+XG4gICAgeyh7IGNzcyB9KSA9PiAoXG4gICAgICA8QnV0bGVyXG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgY2xhc3NOYW1lU2hha2VBbmltYXRpb249e2Nzc2BcbiAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IDAuNDVzO1xuICAgICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGJvdGg7XG4gICAgICAgICAgYW5pbWF0aW9uLW5hbWU6ICR7c2hha2VBbmltYXRpb259O1xuICAgICAgICBgfVxuICAgICAgLz5cbiAgICApfVxuICA8L0NsYXNzTmFtZXM+XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBCdXRsZXJXaXRoQW5pbWF0aW9uO1xuIl19 */"),
1029
- children: jsxRuntime.jsx(reactIntl.FormattedMessage, _objectSpread({}, messages.noResults))
1030
- });
1031
- return _mapInstanceProperty__default["default"](_context14 = state.results).call(_context14, function (command, index) {
1032
- return jsxRuntime.jsx(ButlerCommand, {
1033
- command: command,
1034
- isSelected: state.selectedResult === index,
1035
- onMouseEnter: createCommandMouseEnterHandler(index),
1036
- onClick: createCommandClickHandler(command)
1037
- }, command.id);
1038
- });
1039
- }()]
1040
- })
1041
- });
1042
- };
1043
-
1044
- Butler.propTypes = process.env.NODE_ENV !== "production" ? {
1045
- historyEntries: _pt__default["default"].arrayOf(_pt__default["default"].any).isRequired,
1046
- onHistoryEntriesChange: _pt__default["default"].func.isRequired,
1047
- search: _pt__default["default"].func.isRequired,
1048
- getNextCommands: _pt__default["default"].func.isRequired,
1049
- executeCommand: _pt__default["default"].func.isRequired,
1050
- onClose: _pt__default["default"].func.isRequired,
1051
- classNameShakeAnimation: _pt__default["default"].string.isRequired
1052
- } : {};
1053
- Butler.displayName = 'Butler';
1054
-
1055
- var ButlerWithAnimation = function ButlerWithAnimation(props) {
1056
- return jsxRuntime.jsx(react.ClassNames, {
1057
- children: function children(_ref3) {
1058
- var css = _ref3.css;
1059
- return jsxRuntime.jsx(Butler, _objectSpread(_objectSpread({}, props), {}, {
1060
- classNameShakeAnimation: css(_templateObject2$2 || (_templateObject2$2 = _taggedTemplateLiteral(["\n animation-duration: 0.45s;\n animation-fill-mode: both;\n animation-name: ", ";\n "])), shakeAnimation)
1061
- }));
1062
- }
1063
- });
1064
- };
1065
-
1066
- // eslint-disable-next-line import/prefer-default-export
1067
- var permissions = {
1068
- ViewOrders: 'ViewOrders',
1069
- ManageOrders: 'ManageOrders',
1070
- ViewProducts: 'ViewProducts',
1071
- ManageProducts: 'ManageProducts',
1072
- ViewCategories: 'ViewCategories',
1073
- ManageCategories: 'ManageCategories',
1074
- ViewCustomers: 'ViewCustomers',
1075
- ManageCustomers: 'ManageCustomers',
1076
- ViewCustomerGroups: 'ViewCustomerGroups',
1077
- ManageCustomerGroups: 'ManageCustomerGroups',
1078
- ViewProductDiscounts: 'ViewProductDiscounts',
1079
- ManageProductDiscounts: 'ManageProductDiscounts',
1080
- ViewDiscountCodes: 'ViewDiscountCodes',
1081
- ManageDiscountCodes: 'ManageDiscountCodes',
1082
- ViewCartDiscounts: 'ViewCartDiscounts',
1083
- ManageCartDiscounts: 'ManageCartDiscounts',
1084
- ViewProjectSettings: 'ViewProjectSettings',
1085
- ManageProjectSettings: 'ManageProjectSettings',
1086
- ViewDeveloperSettings: 'ViewDeveloperSettings',
1087
- ManageDeveloperSettings: 'ManageDeveloperSettings',
1088
- ViewProductTypes: 'ViewProductTypes',
1089
- ManageProductTypes: 'ManageProductTypes'
1090
- };
1091
-
1092
- var actionTypes = {
1093
- go: 'go'
1094
- };
1095
-
1096
- var _templateObject$2;
1097
-
1098
- function nonNullable(value) {
1099
- return value !== null && value !== undefined && typeof value !== 'boolean';
1100
- }
1101
-
1102
- var createCommands = function createCommands(_ref) {
1103
- var _context, _context2, _context3, _context4, _context5, _context6, _context7, _context8, _context9, _context10, _context11, _context14;
1104
-
1105
- var intl = _ref.intl,
1106
- applicationContext = _ref.applicationContext,
1107
- featureToggles = _ref.featureToggles,
1108
- changeProjectDataLocale = _ref.changeProjectDataLocale;
1109
- return _filterInstanceProperty__default["default"](_context = _concatInstanceProperty__default["default"](_context2 = [applicationContext.project && applicationContext.permissions && featureToggles.canViewDashboard && permissions$1.hasSomePermissions([permissions.ViewOrders], applicationContext.permissions) && {
1110
- id: 'go/dashboard',
1111
- text: intl.formatMessage(messages.openDashboard),
1112
- keywords: ['Go to Dashboard'],
1113
- action: {
1114
- type: actionTypes.go,
1115
- to: "/".concat(applicationContext.project.key, "/dashboard")
1116
- }
1117
- }, applicationContext.project && applicationContext.permissions && permissions$1.hasSomePermissions([permissions.ViewProducts], applicationContext.permissions) && {
1118
- id: 'go/products',
1119
- text: intl.formatMessage(messages.openProducts),
1120
- keywords: ['Go to Products'],
1121
- action: {
1122
- type: actionTypes.go,
1123
- to: "/".concat(applicationContext.project.key, "/products")
1124
- },
1125
- subCommands: _filterInstanceProperty__default["default"](_context3 = [permissions$1.hasSomePermissions([permissions.ViewProducts], applicationContext.permissions) && {
1126
- id: 'go/products/list',
1127
- text: intl.formatMessage(messages.openProductList),
1128
- action: {
1129
- type: actionTypes.go,
1130
- to: "/".concat(applicationContext.project.key, "/products")
1131
- }
1132
- }, permissions$1.hasSomePermissions([permissions.ViewProducts], applicationContext.permissions) && {
1133
- id: 'go/products/modified',
1134
- text: intl.formatMessage(messages.openModifiedProducts),
1135
- action: {
1136
- type: actionTypes.go,
1137
- to: "/".concat(applicationContext.project.key, "/products/modified")
1138
- }
1139
- }, permissions$1.hasSomePermissions([permissions.ViewProducts], applicationContext.permissions) && featureToggles.pimSearch && {
1140
- id: 'go/products/pim-search',
1141
- text: intl.formatMessage(messages.openPimSearch),
1142
- action: {
1143
- type: actionTypes.go,
1144
- to: "/".concat(applicationContext.project.key, "/products")
1145
- }
1146
- }, permissions$1.hasSomePermissions([permissions.ManageProducts], applicationContext.permissions) && {
1147
- id: 'go/products/add',
1148
- text: intl.formatMessage(messages.openAddProducts),
1149
- action: {
1150
- type: actionTypes.go,
1151
- to: "/".concat(applicationContext.project.key, "/products/new")
1152
- }
1153
- }]).call(_context3, nonNullable)
1154
- }, applicationContext.project && applicationContext.permissions && permissions$1.hasSomePermissions([permissions.ViewCategories], applicationContext.permissions) && {
1155
- id: 'go/categories',
1156
- text: intl.formatMessage(messages.openCategories),
1157
- keywords: ['Go to Categories'],
1158
- action: {
1159
- type: actionTypes.go,
1160
- to: "/".concat(applicationContext.project.key, "/categories")
1161
- },
1162
- subCommands: _filterInstanceProperty__default["default"](_context4 = [permissions$1.hasSomePermissions([permissions.ViewCategories], applicationContext.permissions) && {
1163
- id: 'go/categories/list',
1164
- text: intl.formatMessage(messages.openCategoriesList),
1165
- action: {
1166
- type: actionTypes.go,
1167
- to: "/".concat(applicationContext.project.key, "/categories?mode=list")
1168
- }
1169
- }, permissions$1.hasSomePermissions([permissions.ViewCategories], applicationContext.permissions) && {
1170
- id: 'go/categories/search',
1171
- text: intl.formatMessage(messages.openCategoriesSearch),
1172
- action: {
1173
- type: actionTypes.go,
1174
- to: "/".concat(applicationContext.project.key, "/categories?mode=search")
1175
- }
1176
- }, permissions$1.hasSomePermissions([permissions.ManageCategories], applicationContext.permissions) && {
1177
- id: 'go/categories/add',
1178
- text: intl.formatMessage(messages.openAddCategory),
1179
- action: {
1180
- type: actionTypes.go,
1181
- to: "/".concat(applicationContext.project.key, "/categories/new")
1182
- }
1183
- }]).call(_context4, nonNullable)
1184
- }, applicationContext.project && applicationContext.permissions && permissions$1.hasSomePermissions([permissions.ViewCustomers, permissions.ViewCustomerGroups], applicationContext.permissions) && {
1185
- id: 'go/customers',
1186
- text: intl.formatMessage(messages.openCustomers),
1187
- keywords: ['Go to Customers'],
1188
- action: {
1189
- type: actionTypes.go,
1190
- to: "/".concat(applicationContext.project.key, "/customers")
1191
- },
1192
- subCommands: _filterInstanceProperty__default["default"](_context5 = [permissions$1.hasSomePermissions([permissions.ViewCustomers], applicationContext.permissions) && {
1193
- id: 'go/customers/list',
1194
- text: intl.formatMessage(messages.openCustomersList),
1195
- action: {
1196
- type: actionTypes.go,
1197
- to: "/".concat(applicationContext.project.key, "/customers")
1198
- }
1199
- }, permissions$1.hasSomePermissions([permissions.ManageCustomers], applicationContext.permissions) && {
1200
- id: 'go/customers/new',
1201
- text: intl.formatMessage(messages.openAddCustomer),
1202
- action: {
1203
- type: actionTypes.go,
1204
- to: "/".concat(applicationContext.project.key, "/customers/new")
1205
- }
1206
- }, permissions$1.hasSomePermissions([permissions.ViewCustomerGroups], applicationContext.permissions) && {
1207
- id: 'go/customer/customer-groups',
1208
- text: intl.formatMessage(messages.openCustomerGroupsList),
1209
- action: {
1210
- type: actionTypes.go,
1211
- to: "/".concat(applicationContext.project.key, "/customers/customer-groups")
1212
- }
1213
- }, permissions$1.hasSomePermissions([permissions.ManageCustomerGroups], applicationContext.permissions) && {
1214
- id: 'go/customers/customer-groups/add',
1215
- text: intl.formatMessage(messages.openAddCustomerGroup),
1216
- action: {
1217
- type: actionTypes.go,
1218
- to: "/".concat(applicationContext.project.key, "/customers/customer-groups/new")
1219
- }
1220
- }]).call(_context5, nonNullable)
1221
- }, applicationContext.project && applicationContext.permissions && permissions$1.hasSomePermissions([permissions.ViewOrders], applicationContext.permissions) && {
1222
- id: 'go/orders',
1223
- text: intl.formatMessage(messages.openOrders),
1224
- keywords: ['Go to Orders'],
1225
- action: {
1226
- type: actionTypes.go,
1227
- to: "/".concat(applicationContext.project.key, "/orders")
1228
- },
1229
- subCommands: _filterInstanceProperty__default["default"](_context6 = [permissions$1.hasSomePermissions([permissions.ViewOrders], applicationContext.permissions) && {
1230
- id: 'go/orders/list',
1231
- text: intl.formatMessage(messages.openOrdersList),
1232
- action: {
1233
- type: actionTypes.go,
1234
- to: "/".concat(applicationContext.project.key, "/orders")
1235
- }
1236
- }, permissions$1.hasSomePermissions([permissions.ManageOrders], applicationContext.permissions) && {
1237
- id: 'go/orders/add',
1238
- text: intl.formatMessage(messages.openAddOrder),
1239
- action: {
1240
- type: actionTypes.go,
1241
- to: "/".concat(applicationContext.project.key, "/orders/new")
1242
- }
1243
- }]).call(_context6, nonNullable)
1244
- }, applicationContext.project && applicationContext.permissions && permissions$1.hasSomePermissions([permissions.ViewDiscountCodes, permissions.ViewProductDiscounts, permissions.ViewCartDiscounts], applicationContext.permissions) && {
1245
- id: 'go/discounts',
1246
- text: intl.formatMessage(messages.openDiscounts),
1247
- keywords: ['Go to Discounts'],
1248
- action: {
1249
- type: actionTypes.go,
1250
- to: "/".concat(applicationContext.project.key, "/discounts")
1251
- },
1252
- subCommands: _filterInstanceProperty__default["default"](_context7 = [permissions$1.hasSomePermissions([permissions.ViewProductDiscounts], applicationContext.permissions) && {
1253
- id: 'go/discounts/products/list',
1254
- text: intl.formatMessage(messages.openProductDiscountsList),
1255
- action: {
1256
- type: actionTypes.go,
1257
- to: "/".concat(applicationContext.project.key, "/discounts/products")
1258
- }
1259
- }, permissions$1.hasSomePermissions([permissions.ViewCartDiscounts], applicationContext.permissions) && {
1260
- id: 'go/discounts/carts/list',
1261
- text: intl.formatMessage(messages.openCartDiscountsList),
1262
- action: {
1263
- type: actionTypes.go,
1264
- to: "/".concat(applicationContext.project.key, "/discounts/carts")
1265
- }
1266
- }, permissions$1.hasSomePermissions([permissions.ViewDiscountCodes], applicationContext.permissions) && {
1267
- id: 'go/discounts/codes/list',
1268
- text: intl.formatMessage(messages.openDiscountCodesList),
1269
- action: {
1270
- type: actionTypes.go,
1271
- to: "/".concat(applicationContext.project.key, "/discounts/codes")
1272
- }
1273
- }, permissions$1.hasSomePermissions([permissions.ManageProductDiscounts, permissions.ManageDiscountCodes, permissions.ManageCartDiscounts], applicationContext.permissions) && {
1274
- id: 'go/discounts/add',
1275
- text: intl.formatMessage(messages.openAddDiscount),
1276
- action: {
1277
- type: actionTypes.go,
1278
- to: "/".concat(applicationContext.project.key, "/discounts/new")
1279
- },
1280
- subCommands: _filterInstanceProperty__default["default"](_context8 = [permissions$1.hasSomePermissions([permissions.ManageProductDiscounts], applicationContext.permissions) && {
1281
- id: 'go/discounts/product/add',
1282
- text: intl.formatMessage(messages.openAddProductDiscount),
1283
- action: {
1284
- type: actionTypes.go,
1285
- to: "/".concat(applicationContext.project.key, "/discounts/products/new")
1286
- }
1287
- }, permissions$1.hasSomePermissions([permissions.ManageCartDiscounts], applicationContext.permissions) && {
1288
- id: 'go/discounts/cart/add',
1289
- text: intl.formatMessage(messages.openAddCartDiscount),
1290
- action: {
1291
- type: actionTypes.go,
1292
- to: "/".concat(applicationContext.project.key, "/discounts/carts/new")
1293
- }
1294
- }, permissions$1.hasSomePermissions([permissions.ManageDiscountCodes], applicationContext.permissions) && {
1295
- id: 'go/discounts/code/add',
1296
- text: intl.formatMessage(messages.openAddCartDiscount),
1297
- action: {
1298
- type: actionTypes.go,
1299
- to: "/".concat(applicationContext.project.key, "/discounts/codes/new")
1300
- }
1301
- }]).call(_context8, nonNullable)
1302
- }]).call(_context7, nonNullable)
1303
- }, applicationContext.project && applicationContext.permissions && permissions$1.hasSomePermissions([permissions.ViewProjectSettings, permissions.ViewDeveloperSettings, permissions.ViewProductTypes], applicationContext.permissions) && {
1304
- id: 'go/settings',
1305
- text: intl.formatMessage(messages.openSettings),
1306
- keywords: ['Go to Settings'],
1307
- action: {
1308
- type: actionTypes.go,
1309
- to: "/".concat(applicationContext.project.key, "/settings/project")
1310
- },
1311
- subCommands: _filterInstanceProperty__default["default"](_context9 = [permissions$1.hasSomePermissions([permissions.ViewProjectSettings, permissions.ManageProjectSettings], applicationContext.permissions) && {
1312
- id: 'go/settings/project',
1313
- text: intl.formatMessage(messages.openProjectSettings),
1314
- action: {
1315
- type: actionTypes.go,
1316
- to: "/".concat(applicationContext.project.key, "/settings/project")
1317
- },
1318
- subCommands: _filterInstanceProperty__default["default"](_context10 = [{
1319
- id: 'go/settings/project/international',
1320
- text: intl.formatMessage(messages.openProjectSettingsInternationalTab),
1321
- action: {
1322
- type: actionTypes.go,
1323
- to: "/".concat(applicationContext.project.key, "/settings/project/international")
1324
- }
1325
- }, {
1326
- id: 'go/settings/project/taxes',
1327
- text: intl.formatMessage(messages.openProjectSettingsTaxesTab),
1328
- action: {
1329
- type: actionTypes.go,
1330
- to: "/".concat(applicationContext.project.key, "/settings/project/taxes")
1331
- }
1332
- }, {
1333
- id: 'go/settings/project/shipping-methods',
1334
- text: intl.formatMessage(messages.openProjectSettingsShippingMethodsTab),
1335
- action: {
1336
- type: actionTypes.go,
1337
- to: "/".concat(applicationContext.project.key, "/settings/project/shipping-methods")
1338
- }
1339
- }, {
1340
- id: 'go/settings/project/channels',
1341
- text: intl.formatMessage(messages.openProjectSettingsChannelsTab),
1342
- action: {
1343
- type: actionTypes.go,
1344
- to: "/".concat(applicationContext.project.key, "/settings/project/channels")
1345
- }
1346
- }, {
1347
- id: 'go/settings/project/stores',
1348
- text: intl.formatMessage(messages.openProjectSettingsStoresTab),
1349
- action: {
1350
- type: actionTypes.go,
1351
- to: "/".concat(applicationContext.project.key, "/settings/project/stores")
1352
- }
1353
- }]).call(_context10, nonNullable)
1354
- }, permissions$1.hasSomePermissions([permissions.ViewProductTypes], applicationContext.permissions) && {
1355
- id: 'go/settings/product-types',
1356
- text: intl.formatMessage(messages.openProductTypesSettings),
1357
- action: {
1358
- type: actionTypes.go,
1359
- to: "/".concat(applicationContext.project.key, "/settings/product-types")
1360
- }
1361
- }, permissions$1.hasSomePermissions([permissions.ViewDeveloperSettings], applicationContext.permissions) && {
1362
- id: 'go/settings/developer',
1363
- text: intl.formatMessage(messages.openDeveloperSettings),
1364
- action: {
1365
- type: actionTypes.go,
1366
- to: "/".concat(applicationContext.project.key, "/settings/developer")
1367
- },
1368
- subCommands: _filterInstanceProperty__default["default"](_context11 = [permissions$1.hasSomePermissions([permissions.ViewDeveloperSettings], applicationContext.permissions) && {
1369
- id: 'go/settings/developer/api-clients/list',
1370
- text: intl.formatMessage(messages.openApiClientsList),
1371
- action: {
1372
- type: actionTypes.go,
1373
- to: "/".concat(applicationContext.project.key, "/settings/developer/api-clients")
1374
- }
1375
- }, permissions$1.hasSomePermissions([permissions.ManageDeveloperSettings], applicationContext.permissions) && {
1376
- id: 'go/settings/developer/api-clients/add',
1377
- text: intl.formatMessage(messages.openAddApiClient),
1378
- action: {
1379
- type: actionTypes.go,
1380
- to: "/".concat(applicationContext.project.key, "/settings/developer/api-clients/new")
1381
- }
1382
- }]).call(_context11, nonNullable)
1383
- }, featureToggles.customApplications && permissions$1.hasSomePermissions([permissions.ManageProjectSettings], applicationContext.permissions) && {
1384
- id: 'go/settings/custom-applications',
1385
- text: intl.formatMessage(messages.openCustomApplicationsSettings),
1386
- action: {
1387
- type: actionTypes.go,
1388
- to: "/".concat(applicationContext.project.key, "/settings/custom-applications")
1389
- }
1390
- }]).call(_context9, nonNullable)
1391
- }, applicationContext.project && applicationContext.project.languages && applicationContext.project.languages.length > 1 && {
1392
- id: 'action/set-resource-language',
1393
- text: intl.formatMessage(messages.setResourceLanguage),
1394
- keywords: ['set resource locale', 'set project data language', 'set project data locale'],
1395
- action: function action() {
1396
- return void 0;
1397
- },
1398
- // We would know these statically, but we define them here as we don't
1399
- // want to include them in the top-level search results
1400
- subCommands: function subCommands() {
1401
- var _context12, _context13;
1402
-
1403
- return _Promise__default["default"].resolve(_filterInstanceProperty__default["default"](_context12 = _mapInstanceProperty__default["default"](_context13 = applicationContext.project ? applicationContext.project.languages : []).call(_context13, function (language) {
1404
- return changeProjectDataLocale && {
1405
- id: "action/set-resource-language/".concat(language),
1406
- text: commonTags.oneLineTrim(_templateObject$2 || (_templateObject$2 = _taggedTemplateLiteral(["\n ", "\n ", "\n "])), language, language === applicationContext.dataLocale ? ' (active)' : ''),
1407
- action: function action() {
1408
- changeProjectDataLocale(language); // We reload, since ProjectDataLocale is written in a way where
1409
- // only the tree under the parent container reloads, but
1410
- // not all of them reload.
1411
- // So this action would seem like it had not effect, unless we
1412
- // reload
1413
-
1414
- applicationEntryPoint.location.reload();
1415
- }
1416
- };
1417
- })).call(_context12, nonNullable));
1418
- }
1419
- }, {
1420
- id: 'go/support',
1421
- text: intl.formatMessage(messages.openSupport),
1422
- keywords: ['Go to support'],
1423
- action: {
1424
- type: actionTypes.go,
1425
- to: constants.SUPPORT_PORTAL_URL
1426
- }
1427
- }, {
1428
- id: 'go/account-profile',
1429
- text: intl.formatMessage(messages.openMyProfile),
1430
- keywords: ['Go to user account', 'Go to profile', 'Open profile'],
1431
- action: {
1432
- type: actionTypes.go,
1433
- to: "/account/profile"
1434
- }
1435
- }, {
1436
- id: 'go/privacy-policy',
1437
- text: intl.formatMessage(messages.showPrivacyPolicy),
1438
- keywords: ['Open Privacy Policy'],
1439
- action: {
1440
- type: actionTypes.go,
1441
- to: 'https://commercetools.com/privacy#suppliers'
1442
- }
1443
- }, {
1444
- id: 'go/logout',
1445
- text: intl.formatMessage(messages.logout),
1446
- keywords: ['Sign out'],
1447
- action: {
1448
- type: actionTypes.go,
1449
- to: "/logout?reason=".concat(constants.LOGOUT_REASONS.USER)
1450
- }
1451
- }, {
1452
- id: 'go/manage-projects',
1453
- text: intl.formatMessage(messages.openManageProjects),
1454
- keywords: ['Go to manage projects', 'Go to projects', 'Open projects list'],
1455
- action: {
1456
- type: actionTypes.go,
1457
- to: "/account/projects"
1458
- }
1459
- }, {
1460
- id: 'go/manage-organizations',
1461
- text: intl.formatMessage(messages.openManageOrganizations),
1462
- keywords: ['Go to manage organizations', 'Go to organizations', 'Open organizations list'],
1463
- action: {
1464
- type: actionTypes.go,
1465
- to: "/account/organizations"
1466
- }
1467
- }]).call(_context2, _toConsumableArray(applicationContext.user ? _mapInstanceProperty__default["default"](_context14 = applicationContext.user.projects.results).call(_context14, function (userProject) {
1468
- return {
1469
- id: "go/project(".concat(userProject.key, ")"),
1470
- text: intl.formatMessage(messages.useProject, {
1471
- projectName: userProject.name
1472
- }),
1473
- keywords: [userProject.key],
1474
- action: function action() {
1475
- // Switching projects needs a full redirect so that
1476
- // the feature flags are reloaded (and things caches get destroyed)
1477
- window.location.href = "/".concat(userProject.key);
1478
- }
1479
- };
1480
- }) : []))).call(_context, nonNullable);
1481
- };
1482
-
1483
- var sanitize = function sanitize(param) {
1484
- return param // Replace all \ with \\ (to prevent generate escape characters)
1485
- .replace(/\\/g, '\\\\') // Replace all " with \"
1486
- .replace(/"/g, '\\"');
1487
- };
1488
- var flattenCommands = /*#__PURE__*/function () {
1489
- var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee3(results, execQuery) {
1490
- var flatten, _flatten;
1491
-
1492
- return _regeneratorRuntime__default["default"].wrap(function _callee3$(_context6) {
1493
- while (1) {
1494
- switch (_context6.prev = _context6.next) {
1495
- case 0:
1496
- _flatten = function _flatten3() {
1497
- _flatten = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee2(commands) {
1498
- return _regeneratorRuntime__default["default"].wrap(function _callee2$(_context5) {
1499
- while (1) {
1500
- switch (_context5.prev = _context5.next) {
1501
- case 0:
1502
- return _context5.abrupt("return", _reduceInstanceProperty__default["default"](commands).call(commands, /*#__PURE__*/function () {
1503
- var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee(prevPromise, command) {
1504
- var _context3;
1505
-
1506
- var prevResults, _context2, _context, subCommands, _flattenSubCommands, flattenSubCommands;
1507
-
1508
- return _regeneratorRuntime__default["default"].wrap(function _callee$(_context4) {
1509
- while (1) {
1510
- switch (_context4.prev = _context4.next) {
1511
- case 0:
1512
- _context4.next = 2;
1513
- return prevPromise;
1514
-
1515
- case 2:
1516
- prevResults = _context4.sent;
1517
-
1518
- if (!command.subCommands) {
1519
- _context4.next = 16;
1520
- break;
1521
- }
1522
-
1523
- if (!(typeof command.subCommands === 'function')) {
1524
- _context4.next = 12;
1525
- break;
1526
- }
1527
-
1528
- _context4.next = 7;
1529
- return command.subCommands(execQuery);
1530
-
1531
- case 7:
1532
- subCommands = _context4.sent;
1533
- _context4.next = 10;
1534
- return flatten(subCommands);
1535
-
1536
- case 10:
1537
- _flattenSubCommands = _context4.sent;
1538
- return _context4.abrupt("return", _concatInstanceProperty__default["default"](_context = []).call(_context, _toConsumableArray(prevResults), [command], _toConsumableArray(_flattenSubCommands)));
1539
-
1540
- case 12:
1541
- _context4.next = 14;
1542
- return flatten(command.subCommands);
1543
-
1544
- case 14:
1545
- flattenSubCommands = _context4.sent;
1546
- return _context4.abrupt("return", _concatInstanceProperty__default["default"](_context2 = []).call(_context2, _toConsumableArray(prevResults), [command], _toConsumableArray(flattenSubCommands)));
1547
-
1548
- case 16:
1549
- return _context4.abrupt("return", _concatInstanceProperty__default["default"](_context3 = []).call(_context3, _toConsumableArray(prevResults), [command]));
1550
-
1551
- case 17:
1552
- case "end":
1553
- return _context4.stop();
1554
- }
1555
- }
1556
- }, _callee);
1557
- }));
1558
-
1559
- return function (_x4, _x5) {
1560
- return _ref2.apply(this, arguments);
1561
- };
1562
- }(), _Promise__default["default"].resolve([])));
1563
-
1564
- case 1:
1565
- case "end":
1566
- return _context5.stop();
1567
- }
1568
- }
1569
- }, _callee2);
1570
- }));
1571
- return _flatten.apply(this, arguments);
1572
- };
1573
-
1574
- flatten = function _flatten2(_x3) {
1575
- return _flatten.apply(this, arguments);
1576
- };
1577
-
1578
- _context6.next = 4;
1579
- return flatten(results);
1580
-
1581
- case 4:
1582
- return _context6.abrupt("return", _context6.sent);
1583
-
1584
- case 5:
1585
- case "end":
1586
- return _context6.stop();
1587
- }
1588
- }
1589
- }, _callee3);
1590
- }));
1591
-
1592
- return function flattenCommands(_x, _x2) {
1593
- return _ref.apply(this, arguments);
1594
- };
1595
- }(); // Once ui-kit exposes its fallback mechanism, we can use the same one here
1596
-
1597
- var translate = function translate(nameAllLocales, projectDataLocale) {
1598
- var matchedTranslation = _findInstanceProperty__default["default"](nameAllLocales).call(nameAllLocales, function (translation) {
1599
- return translation.locale === projectDataLocale && translation.value;
1600
- });
1601
-
1602
- if (matchedTranslation) return matchedTranslation.value; // Fall back to the first available locale
1603
-
1604
- if (nameAllLocales.length > 0) return nameAllLocales[0].value;
1605
- return '';
1606
- };
1607
-
1608
- var _templateObject$1, _templateObject2$1, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8;
1609
- var QuickAccessProductQuery = { kind: "Document", definitions: [{ kind: "OperationDefinition", operation: "query", name: { kind: "Name", value: "QuickAccessProduct" }, variableDefinitions: [{ kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "productId" } }, type: { kind: "NonNullType", type: { kind: "NamedType", name: { kind: "Name", value: "String" } } }, directives: [] }], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "product" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "id" }, value: { kind: "Variable", name: { kind: "Name", value: "productId" } } }], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "masterData" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "staged" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "allVariants" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "key" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "sku" }, arguments: [], directives: [] }] } }] } }] } }] } }] } }], loc: { start: 0, end: 208, source: { body: "query QuickAccessProduct($productId: String!) {\n product(id: $productId) {\n id\n masterData {\n staged {\n allVariants {\n id\n key\n sku\n }\n }\n }\n }\n}\n", name: "GraphQL request", locationOffset: { line: 1, column: 1 } } } };
1610
- var createProductVariantSubCommands = function createProductVariantSubCommands(_ref) {
1611
- var _context, _context2, _context3, _context4;
1612
-
1613
- var intl = _ref.intl,
1614
- applicationContext = _ref.applicationContext,
1615
- productId = _ref.productId,
1616
- variantId = _ref.variantId;
1617
- var canViewProducts = permissions$1.hasSomePermissions([permissions.ViewProducts], applicationContext.permissions);
1618
- if (!canViewProducts || !applicationContext.project) return [];
1619
- return [{
1620
- id: _concatInstanceProperty__default["default"](_context = "go/product(".concat(productId, ")/variant(")).call(_context, variantId, ")/attributes"),
1621
- text: intl.formatMessage(messages.showProductVariantAttributes),
1622
- action: {
1623
- type: actionTypes.go,
1624
- to: commonTags.oneLineTrim(_templateObject$1 || (_templateObject$1 = _taggedTemplateLiteral(["\n /", "\n /products\n /", "\n /variants\n /", "\n /attributes\n "])), applicationContext.project.key, productId, variantId)
1625
- }
1626
- }, {
1627
- id: _concatInstanceProperty__default["default"](_context2 = "go/product(".concat(productId, ")/variant")).call(_context2, variantId, "/images"),
1628
- text: intl.formatMessage(messages.showProductVariantImages),
1629
- action: {
1630
- type: actionTypes.go,
1631
- to: commonTags.oneLineTrim(_templateObject2$1 || (_templateObject2$1 = _taggedTemplateLiteral(["\n /", "\n /products\n /", "\n /variants\n /", "\n /images\n "])), applicationContext.project.key, productId, variantId)
1632
- }
1633
- }, {
1634
- id: _concatInstanceProperty__default["default"](_context3 = "go/product(".concat(productId, ")/variant(")).call(_context3, variantId, ")/prices"),
1635
- text: intl.formatMessage(messages.showProductVariantPrices),
1636
- action: {
1637
- type: actionTypes.go,
1638
- to: commonTags.oneLineTrim(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n /", "\n /products\n /", "\n /variants\n /", "\n /prices\n "])), applicationContext.project.key, productId, variantId)
1639
- }
1640
- }, {
1641
- id: _concatInstanceProperty__default["default"](_context4 = "go/product(".concat(productId, ")/variant(")).call(_context4, variantId, ")/inventory"),
1642
- text: intl.formatMessage(messages.showProductVariantInventory),
1643
- action: {
1644
- type: actionTypes.go,
1645
- to: commonTags.oneLineTrim(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n /", "\n /products\n /", "\n /variants\n /", "\n /inventory\n "])), applicationContext.project.key, productId, variantId)
1646
- }
1647
- }];
1648
- };
1649
-
1650
- var formatVariantMessage = function formatVariantMessage(variant, intl) {
1651
- if (variant.sku) return intl.formatMessage(messages.openVariantBySku, {
1652
- sku: variant.sku
1653
- });
1654
- if (variant.key) return intl.formatMessage(messages.openVariantByKey, {
1655
- key: variant.key
1656
- });
1657
- return intl.formatMessage(messages.openVariantById, {
1658
- id: variant.id
1659
- });
1660
- };
1661
-
1662
- var createProductVariantListSubCommands = /*#__PURE__*/function () {
1663
- var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee(_ref2) {
1664
- var intl, applicationContext, productId, execQuery, canViewProducts, data, _context5, projectKey;
1665
-
1666
- return _regeneratorRuntime__default["default"].wrap(function _callee$(_context7) {
1667
- while (1) {
1668
- switch (_context7.prev = _context7.next) {
1669
- case 0:
1670
- intl = _ref2.intl, applicationContext = _ref2.applicationContext, productId = _ref2.productId, execQuery = _ref2.execQuery;
1671
- canViewProducts = permissions$1.hasSomePermissions([permissions.ViewProducts], applicationContext.permissions);
1672
-
1673
- if (canViewProducts) {
1674
- _context7.next = 4;
1675
- break;
1676
- }
1677
-
1678
- return _context7.abrupt("return", []);
1679
-
1680
- case 4:
1681
- _context7.next = 6;
1682
- return execQuery(QuickAccessProductQuery, {
1683
- productId: productId
1684
- }, {
1685
- target: constants.GRAPHQL_TARGETS.COMMERCETOOLS_PLATFORM
1686
- });
1687
-
1688
- case 6:
1689
- data = _context7.sent;
1690
-
1691
- if (!(data && data.product && data.product.masterData && data.product.masterData.staged && applicationContext.project)) {
1692
- _context7.next = 10;
1693
- break;
1694
- }
1695
-
1696
- projectKey = applicationContext.project.key;
1697
- return _context7.abrupt("return", _mapInstanceProperty__default["default"](_context5 = data.product.masterData.staged.allVariants).call(_context5, function (variant) {
1698
- var _context6;
1699
-
1700
- return {
1701
- id: _concatInstanceProperty__default["default"](_context6 = "go/product(".concat(productId, ")/variant(")).call(_context6, variant.id, ")"),
1702
- text: formatVariantMessage(variant, intl),
1703
- subCommands: createProductVariantSubCommands({
1704
- intl: intl,
1705
- applicationContext: applicationContext,
1706
- productId: productId,
1707
- variantId: variant.id
1708
- }),
1709
- action: {
1710
- type: actionTypes.go,
1711
- to: commonTags.oneLineTrim(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["\n /", "\n /products\n /", "\n /variants\n /", "\n "])), projectKey, productId, variant.id)
1712
- }
1713
- };
1714
- }));
1715
-
1716
- case 10:
1717
- return _context7.abrupt("return", []);
1718
-
1719
- case 11:
1720
- case "end":
1721
- return _context7.stop();
1722
- }
1723
- }
1724
- }, _callee);
1725
- }));
1726
-
1727
- return function createProductVariantListSubCommands(_x) {
1728
- return _ref3.apply(this, arguments);
1729
- };
1730
- }();
1731
-
1732
- var createProductTabsSubCommands = function createProductTabsSubCommands(_ref4) {
1733
- var intl = _ref4.intl,
1734
- applicationContext = _ref4.applicationContext,
1735
- productId = _ref4.productId;
1736
- var canViewProducts = permissions$1.hasSomePermissions([permissions.ViewProducts], applicationContext.permissions);
1737
- if (!canViewProducts || !applicationContext.project) return [];
1738
- return [{
1739
- id: "go/product(".concat(productId, ")/general"),
1740
- text: intl.formatMessage(messages.openProductVariantGeneral),
1741
- action: {
1742
- type: actionTypes.go,
1743
- to: commonTags.oneLineTrim(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["\n /", "\n /products\n /", "\n /general\n "])), applicationContext.project.key, productId)
1744
- }
1745
- }, {
1746
- id: "go/product(".concat(productId, ")/variants"),
1747
- text: intl.formatMessage(messages.openProductVariantList),
1748
- action: {
1749
- type: actionTypes.go,
1750
- to: commonTags.oneLineTrim(_templateObject7 || (_templateObject7 = _taggedTemplateLiteral(["\n /", "\n /products\n /", "\n /variants\n "])), applicationContext.project.key, productId)
1751
- },
1752
- subCommands: function subCommands(execQuery) {
1753
- return createProductVariantListSubCommands({
1754
- intl: intl,
1755
- applicationContext: applicationContext,
1756
- productId: productId,
1757
- execQuery: execQuery
1758
- });
1759
- }
1760
- }, {
1761
- id: "go/product(".concat(productId, ")/search"),
1762
- text: intl.formatMessage(messages.openProductVariantSearch),
1763
- action: {
1764
- type: actionTypes.go,
1765
- to: commonTags.oneLineTrim(_templateObject8 || (_templateObject8 = _taggedTemplateLiteral(["\n /", "\n /products\n /", "\n /search\n "])), applicationContext.project.key, productId)
1766
- }
1767
- }];
1768
- };
1769
-
1770
- var STORAGE_KEY = 'quickAccessHistoryEntries';
1771
- var saveHistoryEntries = function saveHistoryEntries(historyEntries) {
1772
- try {
1773
- window.sessionStorage.setItem(STORAGE_KEY, _JSON$stringify__default["default"](historyEntries));
1774
- return true;
1775
- } catch (error) {
1776
- return false;
1777
- }
1778
- };
1779
- var loadHistoryEntries = function loadHistoryEntries() {
1780
- try {
1781
- var value = sessionStorage.getItem(STORAGE_KEY);
1782
- return value ? JSON.parse(value) : [];
1783
- } catch (error) {
1784
- return [];
1785
- }
1786
- };
1787
-
1788
- var _templateObject, _templateObject2;
1789
- var QuickAccessQuery = { kind: "Document", definitions: [{ kind: "OperationDefinition", operation: "query", name: { kind: "Name", value: "QuickAccess" }, variableDefinitions: [{ kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "searchText" } }, type: { kind: "NonNullType", type: { kind: "NamedType", name: { kind: "Name", value: "String" } } }, directives: [] }, { kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "canViewProducts" } }, type: { kind: "NonNullType", type: { kind: "NamedType", name: { kind: "Name", value: "Boolean" } } }, directives: [] }, { kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "productsWhereClause" } }, type: { kind: "NamedType", name: { kind: "Name", value: "String" } }, directives: [] }, { kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "includeProductsByIds" } }, type: { kind: "NonNullType", type: { kind: "NamedType", name: { kind: "Name", value: "Boolean" } } }, directives: [] }], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", alias: { kind: "Name", value: "productsByIds" }, name: { kind: "Name", value: "products" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "where" }, value: { kind: "Variable", name: { kind: "Name", value: "productsWhereClause" } } }], directives: [{ kind: "Directive", name: { kind: "Name", value: "include" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "if" }, value: { kind: "Variable", name: { kind: "Name", value: "includeProductsByIds" } } }] }], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "results" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "masterData" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "staged" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "nameAllLocales" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "locale" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "value" }, arguments: [], directives: [] }] } }] } }] } }] } }] } }, { kind: "Field", alias: { kind: "Name", value: "productById" }, name: { kind: "Name", value: "product" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "id" }, value: { kind: "Variable", name: { kind: "Name", value: "searchText" } } }], directives: [{ kind: "Directive", name: { kind: "Name", value: "include" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "if" }, value: { kind: "Variable", name: { kind: "Name", value: "canViewProducts" } } }] }], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "masterData" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "staged" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "nameAllLocales" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "locale" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "value" }, arguments: [], directives: [] }] } }] } }] } }] } }, { kind: "Field", alias: { kind: "Name", value: "productByKey" }, name: { kind: "Name", value: "product" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "key" }, value: { kind: "Variable", name: { kind: "Name", value: "searchText" } } }], directives: [{ kind: "Directive", name: { kind: "Name", value: "include" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "if" }, value: { kind: "Variable", name: { kind: "Name", value: "canViewProducts" } } }] }], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "masterData" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "staged" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "nameAllLocales" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "locale" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "value" }, arguments: [], directives: [] }] } }] } }] } }] } }, { kind: "Field", alias: { kind: "Name", value: "productByVariantSku" }, name: { kind: "Name", value: "product" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "sku" }, value: { kind: "Variable", name: { kind: "Name", value: "searchText" } } }], directives: [{ kind: "Directive", name: { kind: "Name", value: "include" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "if" }, value: { kind: "Variable", name: { kind: "Name", value: "canViewProducts" } } }] }], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "masterData" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "staged" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "nameAllLocales" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "locale" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "value" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "variant" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "sku" }, value: { kind: "Variable", name: { kind: "Name", value: "searchText" } } }], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "sku" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "key" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }] } }] } }] } }] } }, { kind: "Field", alias: { kind: "Name", value: "productByVariantKey" }, name: { kind: "Name", value: "product" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "variantKey" }, value: { kind: "Variable", name: { kind: "Name", value: "searchText" } } }], directives: [{ kind: "Directive", name: { kind: "Name", value: "include" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "if" }, value: { kind: "Variable", name: { kind: "Name", value: "canViewProducts" } } }] }], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "masterData" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "staged" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "nameAllLocales" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "locale" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "value" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "variant" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "key" }, value: { kind: "Variable", name: { kind: "Name", value: "searchText" } } }], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "sku" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "key" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }] } }] } }] } }] } }] } }], loc: { start: 0, end: 1407, source: { body: "query QuickAccess(\n $searchText: String!\n $canViewProducts: Boolean!\n $productsWhereClause: String\n $includeProductsByIds: Boolean!\n) {\n productsByIds: products(where: $productsWhereClause)\n @include(if: $includeProductsByIds) {\n results {\n id\n masterData {\n staged {\n nameAllLocales {\n locale\n value\n }\n }\n }\n }\n }\n\n productById: product(id: $searchText) @include(if: $canViewProducts) {\n id\n masterData {\n staged {\n nameAllLocales {\n locale\n value\n }\n }\n }\n }\n\n productByKey: product(key: $searchText) @include(if: $canViewProducts) {\n id\n masterData {\n staged {\n nameAllLocales {\n locale\n value\n }\n }\n }\n }\n\n productByVariantSku: product(sku: $searchText)\n @include(if: $canViewProducts) {\n id\n masterData {\n staged {\n nameAllLocales {\n locale\n value\n }\n variant(sku: $searchText) {\n sku\n key\n id\n }\n }\n }\n }\n\n productByVariantKey: product(variantKey: $searchText)\n @include(if: $canViewProducts) {\n id\n masterData {\n staged {\n nameAllLocales {\n locale\n value\n }\n variant(key: $searchText) {\n sku\n key\n id\n }\n }\n }\n }\n}\n", name: "GraphQL request", locationOffset: { line: 1, column: 1 } } } };
1790
-
1791
- var searchProductIdsAction = function searchProductIdsAction(searchText, projectKey, dataLocale) {
1792
- return sdk.actions.post({
1793
- uri: "/".concat(projectKey, "/search/products"),
1794
- mcApiProxyTarget: constants.MC_API_PROXY_TARGETS.PIM_SEARCH,
1795
- payload: {
1796
- query: {
1797
- fullText: {
1798
- field: 'name',
1799
- language: dataLocale,
1800
- value: searchText
1801
- }
1802
- },
1803
- sort: [{
1804
- field: 'name',
1805
- language: dataLocale,
1806
- order: 'desc'
1807
- }],
1808
- limit: 9,
1809
- offset: 0
1810
- }
1811
- });
1812
- };
1813
-
1814
- var pimIndexerStatusAction = function pimIndexerStatusAction(projectKey, dataLocale) {
1815
- return (// TODO this should be sdkActions.head()
1816
- // and then we should check whether the response code is
1817
- // - 200 meaning the project is indexed
1818
- // - 404 meaning the project is not indexed
1819
- //
1820
- // But there is a problem in tne node-sdk client as it tries to
1821
- // .json()-parse the response to HEAD requests which results in an
1822
- // error, so we send a regular request for now and limit to no results
1823
- // instead to keep the payload minimal
1824
- sdk.actions.post({
1825
- uri: "/".concat(projectKey, "/search/products"),
1826
- mcApiProxyTarget: constants.MC_API_PROXY_TARGETS.PIM_SEARCH,
1827
- payload: {
1828
- query: {
1829
- fullText: {
1830
- field: 'name',
1831
- language: dataLocale,
1832
- value: 'availability-check'
1833
- }
1834
- },
1835
- limit: 0,
1836
- offset: 0
1837
- }
1838
- })
1839
- );
1840
- };
1841
-
1842
- var QuickAccess = function QuickAccess(props) {
1843
- var _useState = react$1.useState(loadHistoryEntries()),
1844
- _useState2 = _slicedToArray(_useState, 2),
1845
- historyEntries = _useState2[0],
1846
- setHistoryEntries = _useState2[1];
1847
-
1848
- var handleHistoryEntriesChange = react$1.useCallback(function (entries) {
1849
- // Keep the history in sync with the session storage
1850
- saveHistoryEntries(entries);
1851
- setHistoryEntries(entries);
1852
- }, []);
1853
- var history = reactRouterDom.useHistory();
1854
- var apolloClient = react$2.useApolloClient();
1855
- var intl = reactIntl.useIntl();
1856
-
1857
- var _useFeatureToggles = reactBroadcast.useFeatureToggles({
1858
- pimSearch: true,
1859
- customApplications: true,
1860
- canViewDashboard: true
1861
- }),
1862
- _useFeatureToggles2 = _slicedToArray(_useFeatureToggles, 3),
1863
- isPimSearchEnabled = _useFeatureToggles2[0],
1864
- isCustomApplicationsEnabled = _useFeatureToggles2[1],
1865
- isCanViewDashboardEnabled = _useFeatureToggles2[2];
1866
-
1867
- var applicationContext = applicationShellConnectors.useApplicationContext(); // Destructure functions from props to reference them in the hook dependency list
1868
-
1869
- var onPimIndexerStateChangeFromParent = props.onPimIndexerStateChange;
1870
- var dispatchFetchProductIds = sdk.useAsyncDispatch();
1871
- var fetchPimSearchProductIds = react$1.useCallback( /*#__PURE__*/function () {
1872
- var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee(searchText) {
1873
- var _context, result;
1874
-
1875
- return _regeneratorRuntime__default["default"].wrap(function _callee$(_context2) {
1876
- while (1) {
1877
- switch (_context2.prev = _context2.next) {
1878
- case 0:
1879
- if (!(applicationContext.project && applicationContext.dataLocale)) {
1880
- _context2.next = 5;
1881
- break;
1882
- }
1883
-
1884
- _context2.next = 3;
1885
- return dispatchFetchProductIds(searchProductIdsAction(searchText, applicationContext.project.key, applicationContext.dataLocale));
1886
-
1887
- case 3:
1888
- result = _context2.sent;
1889
- return _context2.abrupt("return", result && result.hits ? _mapInstanceProperty__default["default"](_context = result.hits).call(_context, function (hit) {
1890
- return hit.id;
1891
- }) : []);
1892
-
1893
- case 5:
1894
- return _context2.abrupt("return", []);
1895
-
1896
- case 6:
1897
- case "end":
1898
- return _context2.stop();
1899
- }
1900
- }
1901
- }, _callee);
1902
- }));
1903
-
1904
- return function (_x) {
1905
- return _ref.apply(this, arguments);
1906
- };
1907
- }(), [applicationContext.dataLocale, applicationContext.project, dispatchFetchProductIds]);
1908
- var dispatchFetchPimIndexerStatus = sdk.useAsyncDispatch();
1909
- var fetchPimIndexerStatus = react$1.useCallback( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee2() {
1910
- return _regeneratorRuntime__default["default"].wrap(function _callee2$(_context3) {
1911
- while (1) {
1912
- switch (_context3.prev = _context3.next) {
1913
- case 0:
1914
- if (!(applicationContext.project && applicationContext.dataLocale)) {
1915
- _context3.next = 10;
1916
- break;
1917
- }
1918
-
1919
- _context3.prev = 1;
1920
- dispatchFetchPimIndexerStatus(pimIndexerStatusAction(applicationContext.project.key, applicationContext.dataLocale));
1921
- return _context3.abrupt("return", dist_commercetoolsFrontendApplicationShell.pimIndexerStates.INDEXED);
1922
-
1923
- case 6:
1924
- _context3.prev = 6;
1925
- _context3.t0 = _context3["catch"](1);
1926
- // eslint-disable-next-line no-console
1927
- if (process.env.NODE_ENV !== 'production') console.error(_context3.t0); // project is not using pim-indexer when response error code is 404,
1928
- // but we treat all errors as non-indexed as a safe guard, so we're
1929
- // not checking the response error code at all
1930
-
1931
- return _context3.abrupt("return", dist_commercetoolsFrontendApplicationShell.pimIndexerStates.NOT_INDEXED);
1932
-
1933
- case 10:
1934
- return _context3.abrupt("return", dist_commercetoolsFrontendApplicationShell.pimIndexerStates.NOT_INDEXED);
1935
-
1936
- case 11:
1937
- case "end":
1938
- return _context3.stop();
1939
- }
1940
- }
1941
- }, _callee2, null, [[1, 6]]);
1942
- })), [applicationContext.dataLocale, applicationContext.project, dispatchFetchPimIndexerStatus]);
1943
- var getProjectIndexStatus = react$1.useCallback( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee3() {
1944
- var canViewProducts;
1945
- return _regeneratorRuntime__default["default"].wrap(function _callee3$(_context4) {
1946
- while (1) {
1947
- switch (_context4.prev = _context4.next) {
1948
- case 0:
1949
- if (applicationContext.project) {
1950
- _context4.next = 2;
1951
- break;
1952
- }
1953
-
1954
- return _context4.abrupt("return", dist_commercetoolsFrontendApplicationShell.pimIndexerStates.NOT_INDEXED);
1955
-
1956
- case 2:
1957
- canViewProducts = permissions$1.hasSomePermissions([permissions.ViewProducts], applicationContext.permissions); // skip checking when user can't view products anyways
1958
-
1959
- if (canViewProducts) {
1960
- _context4.next = 5;
1961
- break;
1962
- }
1963
-
1964
- return _context4.abrupt("return", dist_commercetoolsFrontendApplicationShell.pimIndexerStates.NOT_INDEXED);
1965
-
1966
- case 5:
1967
- _context4.next = 7;
1968
- return fetchPimIndexerStatus();
1969
-
1970
- case 7:
1971
- return _context4.abrupt("return", _context4.sent);
1972
-
1973
- case 8:
1974
- case "end":
1975
- return _context4.stop();
1976
- }
1977
- }
1978
- }, _callee3);
1979
- })), [applicationContext.permissions, applicationContext.project, fetchPimIndexerStatus]);
1980
- react$1.useEffect(function () {
1981
- if (props.pimIndexerState === dist_commercetoolsFrontendApplicationShell.pimIndexerStates.UNCHECKED) {
1982
- getProjectIndexStatus().then(function (status) {
1983
- onPimIndexerStateChangeFromParent(status);
1984
- });
1985
- } // eslint-disable-next-line react-hooks/exhaustive-deps
1986
-
1987
- }, []); // <-- run only once, when component mounts
1988
-
1989
- var execQuery = react$1.useCallback(function (Query, variables, context) {
1990
- return apolloClient.query({
1991
- query: Query,
1992
- errorPolicy: 'ignore',
1993
- variables: variables,
1994
- context: context
1995
- }).then(function (response) {
1996
- return response.data;
1997
- });
1998
- }, [apolloClient]);
1999
- var getNextCommands = react$1.useCallback( /*#__PURE__*/function () {
2000
- var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee4(command) {
2001
- return _regeneratorRuntime__default["default"].wrap(function _callee4$(_context5) {
2002
- while (1) {
2003
- switch (_context5.prev = _context5.next) {
2004
- case 0:
2005
- if (command.subCommands) {
2006
- _context5.next = 2;
2007
- break;
2008
- }
2009
-
2010
- return _context5.abrupt("return", []);
2011
-
2012
- case 2:
2013
- if (!_Array$isArray__default["default"](command.subCommands)) {
2014
- _context5.next = 4;
2015
- break;
2016
- }
2017
-
2018
- return _context5.abrupt("return", command.subCommands);
2019
-
2020
- case 4:
2021
- _context5.next = 6;
2022
- return command.subCommands(execQuery);
2023
-
2024
- case 6:
2025
- return _context5.abrupt("return", _context5.sent);
2026
-
2027
- case 7:
2028
- case "end":
2029
- return _context5.stop();
2030
- }
2031
- }
2032
- }, _callee4);
2033
- }));
2034
-
2035
- return function (_x2) {
2036
- return _ref4.apply(this, arguments);
2037
- };
2038
- }(), [execQuery]);
2039
- var getProjectCommands = react$1.useCallback( /*#__PURE__*/function () {
2040
- var _ref5 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee5(searchText) {
2041
- var idsOfProductsMatchingSearchText, canViewProducts, data, commands, _context6, productId, variantId, variantKey, _context7, _productId, _variantId, _context8, _productId2, _context9, _context11, _productId3;
2042
-
2043
- return _regeneratorRuntime__default["default"].wrap(function _callee5$(_context12) {
2044
- while (1) {
2045
- switch (_context12.prev = _context12.next) {
2046
- case 0:
2047
- if (!(props.pimIndexerState === dist_commercetoolsFrontendApplicationShell.pimIndexerStates.INDEXED)) {
2048
- _context12.next = 6;
2049
- break;
2050
- }
2051
-
2052
- _context12.next = 3;
2053
- return fetchPimSearchProductIds(searchText);
2054
-
2055
- case 3:
2056
- _context12.t0 = _context12.sent;
2057
- _context12.next = 7;
2058
- break;
2059
-
2060
- case 6:
2061
- _context12.t0 = [];
2062
-
2063
- case 7:
2064
- idsOfProductsMatchingSearchText = _context12.t0;
2065
- canViewProducts = permissions$1.hasSomePermissions([permissions.ViewProducts], applicationContext.permissions);
2066
- _context12.next = 11;
2067
- return execQuery(QuickAccessQuery, {
2068
- searchText: sanitize(searchText),
2069
- // Pass conditional arguments to disable some of the queries
2070
- canViewProducts: canViewProducts,
2071
- productsWhereClause: "id in (".concat(_mapInstanceProperty__default["default"](idsOfProductsMatchingSearchText).call(idsOfProductsMatchingSearchText, function (id) {
2072
- return _JSON$stringify__default["default"](id);
2073
- }).join(', '), ")"),
2074
- includeProductsByIds: Boolean(canViewProducts && idsOfProductsMatchingSearchText.length > 0)
2075
- }, {
2076
- target: constants.GRAPHQL_TARGETS.COMMERCETOOLS_PLATFORM
2077
- });
2078
-
2079
- case 11:
2080
- data = _context12.sent;
2081
- commands = [];
2082
-
2083
- if (data && data.productByVariantKey && data.productByVariantKey.masterData && data.productByVariantKey.masterData.staged && data.productByVariantKey.masterData.staged.variant && applicationContext.project && applicationContext.dataLocale) {
2084
- productId = data.productByVariantKey.id;
2085
- variantId = data.productByVariantKey.masterData.staged.variant.id;
2086
- variantKey = data.productByVariantKey.masterData.staged.variant.key;
2087
- commands.push({
2088
- id: _concatInstanceProperty__default["default"](_context6 = "go/product-variant-by-key/product(".concat(productId, "/variant(")).call(_context6, variantId, ")"),
2089
- text: intl.formatMessage(messages.showProductVariant, {
2090
- variantName: translate(data.productByVariantKey.masterData.staged.nameAllLocales, applicationContext.dataLocale)
2091
- }),
2092
- keywords: variantKey ? [variantKey] : undefined,
2093
- action: {
2094
- type: actionTypes.go,
2095
- to: commonTags.oneLineTrim(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n /", "\n /products\n /", "\n /variants\n /", "\n "])), applicationContext.project.key, productId, variantId)
2096
- },
2097
- subCommands: createProductVariantSubCommands({
2098
- intl: intl,
2099
- applicationContext: applicationContext,
2100
- productId: productId,
2101
- variantId: variantId
2102
- })
2103
- });
2104
- }
2105
-
2106
- if (data && data.productByVariantSku && data.productByVariantSku.masterData && data.productByVariantSku.masterData.staged && data.productByVariantSku.masterData.staged.variant && applicationContext.project && applicationContext.dataLocale) {
2107
- _productId = data.productByVariantSku.id;
2108
- _variantId = data.productByVariantSku.masterData.staged.variant.id;
2109
- commands.push({
2110
- id: _concatInstanceProperty__default["default"](_context7 = "go/product-variant-by-sku/product(".concat(_productId, ")/variant(")).call(_context7, _variantId, ")"),
2111
- text: intl.formatMessage(messages.showProductVariant, {
2112
- variantName: data.productByVariantSku.masterData.staged.variant.sku
2113
- }),
2114
- action: {
2115
- type: actionTypes.go,
2116
- to: commonTags.oneLineTrim(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n /", "\n /products\n /", "\n /variants\n /", "\n "])), applicationContext.project.key, _productId, _variantId)
2117
- },
2118
- subCommands: createProductVariantSubCommands({
2119
- intl: intl,
2120
- applicationContext: applicationContext,
2121
- productId: _productId,
2122
- variantId: _variantId
2123
- })
2124
- });
2125
- }
2126
-
2127
- if (data && data.productById && data.productById.masterData && data.productById.masterData.staged && data.productById.masterData.staged.nameAllLocales && applicationContext.project && applicationContext.dataLocale) {
2128
- _productId2 = data.productById.id;
2129
- commands.push({
2130
- id: "go/product-by-id/product(".concat(_productId2, ")"),
2131
- text: intl.formatMessage(messages.showProduct, {
2132
- productName: translate(data.productById.masterData.staged.nameAllLocales, applicationContext.dataLocale)
2133
- }),
2134
- keywords: [_productId2],
2135
- action: {
2136
- type: actionTypes.go,
2137
- to: _concatInstanceProperty__default["default"](_context8 = "/".concat(applicationContext.project.key, "/products/")).call(_context8, _productId2)
2138
- },
2139
- subCommands: createProductTabsSubCommands({
2140
- intl: intl,
2141
- applicationContext: applicationContext,
2142
- productId: _productId2
2143
- })
2144
- });
2145
- }
2146
-
2147
- if (data && data.productsByIds && data.productsByIds.results) {
2148
- _forEachInstanceProperty__default["default"](_context9 = data.productsByIds.results).call(_context9, function (product) {
2149
- if (product.masterData.staged && applicationContext.project && applicationContext.dataLocale) {
2150
- var _context10;
2151
-
2152
- commands.push({
2153
- id: "go/product-by-search-text/product(".concat(product.id, ")"),
2154
- text: intl.formatMessage(messages.showProduct, {
2155
- productName: translate(product.masterData.staged.nameAllLocales, applicationContext.dataLocale)
2156
- }),
2157
- keywords: [product.id],
2158
- action: {
2159
- type: actionTypes.go,
2160
- to: _concatInstanceProperty__default["default"](_context10 = "/".concat(applicationContext.project.key, "/products/")).call(_context10, product.id)
2161
- },
2162
- subCommands: createProductTabsSubCommands({
2163
- intl: intl,
2164
- applicationContext: applicationContext,
2165
- productId: product.id
2166
- })
2167
- });
2168
- }
2169
- });
2170
- }
2171
-
2172
- if (data && data.productByKey && applicationContext.project && applicationContext.dataLocale) {
2173
- _productId3 = data.productByKey.id;
2174
- commands.push({
2175
- id: "go/product-by-key/product(".concat(_productId3, ")"),
2176
- text: intl.formatMessage(messages.showProduct, {
2177
- productName: searchText
2178
- }),
2179
- action: {
2180
- type: actionTypes.go,
2181
- to: _concatInstanceProperty__default["default"](_context11 = "/".concat(applicationContext.project.key, "/products/")).call(_context11, _productId3)
2182
- },
2183
- subCommands: createProductTabsSubCommands({
2184
- intl: intl,
2185
- applicationContext: applicationContext,
2186
- productId: _productId3
2187
- })
2188
- });
2189
- }
2190
-
2191
- return _context12.abrupt("return", commands);
2192
-
2193
- case 19:
2194
- case "end":
2195
- return _context12.stop();
2196
- }
2197
- }
2198
- }, _callee5);
2199
- }));
2200
-
2201
- return function (_x3) {
2202
- return _ref5.apply(this, arguments);
2203
- };
2204
- }(), [applicationContext, execQuery, fetchPimSearchProductIds, intl, props.pimIndexerState]);
2205
- var debouncedGetProjectCommands = debounce__default["default"](getProjectCommands, 200, {
2206
- cancelObj: 'canceled'
2207
- });
2208
- var search = react$1.useCallback( /*#__PURE__*/function () {
2209
- var _ref6 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee6(searchText) {
2210
- var generalCommands, _context13, projectCommands, allCommands;
2211
-
2212
- return _regeneratorRuntime__default["default"].wrap(function _callee6$(_context14) {
2213
- while (1) {
2214
- switch (_context14.prev = _context14.next) {
2215
- case 0:
2216
- generalCommands = createCommands({
2217
- applicationContext: applicationContext,
2218
- changeProjectDataLocale: props.onChangeProjectDataLocale,
2219
- intl: intl,
2220
- featureToggles: {
2221
- pimSearch: isPimSearchEnabled,
2222
- customApplications: isCustomApplicationsEnabled,
2223
- canViewDashboard: isCanViewDashboardEnabled
2224
- }
2225
- });
2226
-
2227
- if (applicationContext.project) {
2228
- _context14.next = 3;
2229
- break;
2230
- }
2231
-
2232
- return _context14.abrupt("return", generalCommands);
2233
-
2234
- case 3:
2235
- if (!(_trimInstanceProperty__default["default"](searchText).call(searchText).length < 3)) {
2236
- _context14.next = 5;
2237
- break;
2238
- }
2239
-
2240
- return _context14.abrupt("return", generalCommands);
2241
-
2242
- case 5:
2243
- _context14.prev = 5;
2244
- _context14.next = 8;
2245
- return debouncedGetProjectCommands(searchText);
2246
-
2247
- case 8:
2248
- projectCommands = _context14.sent;
2249
- allCommands = _concatInstanceProperty__default["default"](_context13 = []).call(_context13, _toConsumableArray(generalCommands), _toConsumableArray(projectCommands));
2250
- _context14.next = 12;
2251
- return flattenCommands(allCommands, execQuery);
2252
-
2253
- case 12:
2254
- return _context14.abrupt("return", _context14.sent);
2255
-
2256
- case 15:
2257
- _context14.prev = 15;
2258
- _context14.t0 = _context14["catch"](5);
2259
-
2260
- if (!(_context14.t0 === 'canceled')) {
2261
- _context14.next = 19;
2262
- break;
2263
- }
2264
-
2265
- return _context14.abrupt("return", generalCommands);
2266
-
2267
- case 19:
2268
- throw _context14.t0;
2269
-
2270
- case 20:
2271
- case "end":
2272
- return _context14.stop();
2273
- }
2274
- }
2275
- }, _callee6, null, [[5, 15]]);
2276
- }));
2277
-
2278
- return function (_x4) {
2279
- return _ref6.apply(this, arguments);
2280
- };
2281
- }(), [applicationContext, debouncedGetProjectCommands, execQuery, intl, isCanViewDashboardEnabled, isCustomApplicationsEnabled, isPimSearchEnabled, props.onChangeProjectDataLocale]);
2282
- var executeCommand = react$1.useCallback(function (command, meta) {
2283
- var _context15;
2284
-
2285
- if (typeof command.action === 'function') {
2286
- // Idea: We could handle these errors and set them on status bar of Butler
2287
- // We can also handle sync/async commands by checking command.action.then
2288
- command.action();
2289
- return;
2290
- } // open in new window
2291
- // and always open other pages in a new window
2292
-
2293
-
2294
- if (meta.openInNewTab || !_startsWithInstanceProperty__default["default"](_context15 = command.action.to).call(_context15, '/')) {
2295
- // eslint-disable-next-line no-restricted-globals
2296
- open(command.action.to, '_blank');
2297
- } else if (applicationContext.environment.useFullRedirectsForLinks) {
2298
- applicationEntryPoint.location.replace(command.action.to);
2299
- } else {
2300
- history.push(command.action.to);
2301
- }
2302
- }, [applicationContext.environment.useFullRedirectsForLinks, history]);
2303
- return jsxRuntime.jsx(ButlerWithAnimation, {
2304
- historyEntries: historyEntries,
2305
- onHistoryEntriesChange: handleHistoryEntriesChange,
2306
- search: search,
2307
- executeCommand: executeCommand,
2308
- onClose: props.onClose,
2309
- getNextCommands: getNextCommands
2310
- });
2311
- };
2312
-
2313
- QuickAccess.propTypes = process.env.NODE_ENV !== "production" ? {
2314
- pimIndexerState: _pt__default["default"].any.isRequired,
2315
- onPimIndexerStateChange: _pt__default["default"].func.isRequired,
2316
- onClose: _pt__default["default"].func.isRequired,
2317
- onChangeProjectDataLocale: _pt__default["default"].func
2318
- } : {};
2319
- QuickAccess.displayName = 'QuickAccess';
2320
-
2321
- exports["default"] = QuickAccess;