@commercetools-frontend/application-shell 24.11.0 → 24.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/dist/{application-entry-point-c87294b0.cjs.dev.js → application-entry-point-18d8fba0.cjs.dev.js} +7 -4
  2. package/dist/{application-entry-point-10a5e1a5.esm.js → application-entry-point-1b23fb6b.esm.js} +6 -4
  3. package/dist/{application-entry-point-8c4b8e53.cjs.prod.js → application-entry-point-74a06151.cjs.prod.js} +4 -3
  4. package/dist/commercetools-frontend-application-shell.cjs.dev.js +12 -11
  5. package/dist/commercetools-frontend-application-shell.cjs.prod.js +12 -11
  6. package/dist/commercetools-frontend-application-shell.esm.js +12 -11
  7. package/dist/{custom-view-dev-host-6091b78a.esm.js → custom-view-dev-host-b4f856d8.esm.js} +20 -16
  8. package/dist/{custom-view-dev-host-3a171a01.cjs.prod.js → custom-view-dev-host-bf11de47.cjs.prod.js} +21 -16
  9. package/dist/{custom-view-dev-host-40b33836.cjs.dev.js → custom-view-dev-host-f688743e.cjs.dev.js} +21 -16
  10. package/dist/declarations/src/types/generated/mc.d.ts +9 -8
  11. package/dist/declarations-connectors/src/components/application-context/index.d.ts +2 -3
  12. package/dist/declarations-connectors/src/components/application-context/normalizers.d.ts +1 -5
  13. package/dist/declarations-connectors/src/export-types.d.ts +1 -2
  14. package/dist/declarations-connectors/src/index.d.ts +1 -1
  15. package/dist/declarations-connectors/src/types/generated/mc.d.ts +9 -8
  16. package/dist/{index-7bdde97c.cjs.prod.js → index-242af4d2.cjs.prod.js} +201 -344
  17. package/dist/{index-614accc4.cjs.dev.js → index-25183095.cjs.dev.js} +2 -2
  18. package/dist/{index-245e2980.cjs.prod.js → index-52c724ed.cjs.prod.js} +2 -2
  19. package/dist/{index-86039df7.esm.js → index-5aaa33bb.esm.js} +2 -2
  20. package/dist/{index-67a5d8e8.esm.js → index-d8c26ca0.esm.js} +214 -363
  21. package/dist/{index-a57c8458.cjs.dev.js → index-dcd3d8a3.cjs.dev.js} +213 -364
  22. package/dist/{navbar-844d350d.esm.js → navbar-0bad8bc8.esm.js} +106 -110
  23. package/dist/{navbar-acc2cd1b.cjs.prod.js → navbar-7653417f.cjs.prod.js} +108 -112
  24. package/dist/{navbar-022383bd.cjs.dev.js → navbar-d4189469.cjs.dev.js} +108 -112
  25. package/dist/oidc-258fc018.cjs.prod.js +115 -0
  26. package/dist/oidc-35e8e62a.esm.js +100 -0
  27. package/dist/oidc-87d116c1.cjs.dev.js +115 -0
  28. package/dist/{oidc-callback-e07f0c20.cjs.dev.js → oidc-callback-11dae6b7.cjs.dev.js} +16 -14
  29. package/dist/{oidc-callback-ce8cbdfe.cjs.prod.js → oidc-callback-300966ee.cjs.prod.js} +16 -14
  30. package/dist/{oidc-callback-5f3d5280.esm.js → oidc-callback-82aa6be5.esm.js} +16 -14
  31. package/dist/{project-container-2d3d027a.cjs.prod.js → project-container-2f98a9d6.cjs.prod.js} +53 -19
  32. package/dist/{project-container-a11a31ca.cjs.dev.js → project-container-991a64a8.cjs.dev.js} +53 -19
  33. package/dist/{project-container-fba09841.esm.js → project-container-ce0f6228.esm.js} +52 -19
  34. package/dist/{project-expired-ede4d485.esm.js → project-expired-49e78c8c.esm.js} +12 -11
  35. package/dist/{project-expired-f38a712a.cjs.prod.js → project-expired-f753ba58.cjs.prod.js} +12 -11
  36. package/dist/{project-expired-9620dee4.cjs.dev.js → project-expired-fa4a86df.cjs.dev.js} +12 -11
  37. package/dist/{project-not-found-05683f8e.cjs.dev.js → project-not-found-261f37e8.cjs.dev.js} +11 -10
  38. package/dist/{project-not-found-093ab795.esm.js → project-not-found-ac82676b.esm.js} +11 -10
  39. package/dist/{project-not-found-cfa934da.cjs.prod.js → project-not-found-d594db71.cjs.prod.js} +11 -10
  40. package/dist/{project-not-initialized-1d934ae7.esm.js → project-not-initialized-4c02d4b2.esm.js} +12 -11
  41. package/dist/{project-not-initialized-b5a1400f.cjs.prod.js → project-not-initialized-5a77d844.cjs.prod.js} +12 -11
  42. package/dist/{project-not-initialized-1ed56a00.cjs.dev.js → project-not-initialized-c3a87ba6.cjs.dev.js} +12 -11
  43. package/dist/{project-suspended-68e80299.cjs.dev.js → project-suspended-42a90ea6.cjs.dev.js} +11 -10
  44. package/dist/{project-suspended-e0722654.esm.js → project-suspended-cd66814e.esm.js} +11 -10
  45. package/dist/{project-suspended-8e15a452.cjs.prod.js → project-suspended-dccadfd7.cjs.prod.js} +11 -10
  46. package/dist/{redirect-to-login-12f467b8.cjs.prod.js → redirect-to-login-3e4a6434.cjs.prod.js} +13 -10
  47. package/dist/{redirect-to-login-3bee13ba.cjs.dev.js → redirect-to-login-66ea895a.cjs.dev.js} +13 -10
  48. package/dist/{redirect-to-login-2944c890.esm.js → redirect-to-login-edbfacbc.esm.js} +13 -10
  49. package/dist/{redirect-to-logout-2802852c.cjs.prod.js → redirect-to-logout-99db4db7.cjs.prod.js} +14 -12
  50. package/dist/{redirect-to-logout-74b72fe8.cjs.dev.js → redirect-to-logout-ab0c374b.cjs.dev.js} +14 -12
  51. package/dist/{redirect-to-logout-5db48f16.esm.js → redirect-to-logout-ba40d106.esm.js} +14 -12
  52. package/dist/{redirector-72ccfbc2.cjs.dev.js → redirector-0efdd994.cjs.dev.js} +4 -3
  53. package/dist/{redirector-d856975f.esm.js → redirector-656c6ee7.esm.js} +4 -3
  54. package/dist/{redirector-0c72d0a4.cjs.prod.js → redirector-c858d578.cjs.prod.js} +4 -3
  55. package/dist/{requests-in-flight-loader-e25f4c31.esm.js → requests-in-flight-loader-64a40481.esm.js} +11 -10
  56. package/dist/{requests-in-flight-loader-bc904171.cjs.dev.js → requests-in-flight-loader-878840c1.cjs.dev.js} +11 -10
  57. package/dist/{requests-in-flight-loader-877c1541.cjs.prod.js → requests-in-flight-loader-df9d1de3.cjs.prod.js} +11 -10
  58. package/dist/{service-page-project-switcher-af044ac6.cjs.dev.js → service-page-project-switcher-0f1c1d7f.cjs.dev.js} +1 -1
  59. package/dist/{service-page-project-switcher-1dad9871.cjs.prod.js → service-page-project-switcher-532df57f.cjs.prod.js} +1 -1
  60. package/dist/{service-page-project-switcher-f3eac18a.esm.js → service-page-project-switcher-aca41b09.esm.js} +1 -1
  61. package/dist/{use-applications-menu-14a5a1f4.cjs.prod.js → use-applications-menu-21c7420b.cjs.prod.js} +48 -40
  62. package/dist/{use-applications-menu-823a2492.cjs.dev.js → use-applications-menu-7a85c3ee.cjs.dev.js} +48 -40
  63. package/dist/{use-applications-menu-1514af11.esm.js → use-applications-menu-8ff2d130.esm.js} +45 -38
  64. package/dist/{user-settings-menu-d75f4958.cjs.prod.js → user-settings-menu-2d3bfa75.cjs.prod.js} +29 -22
  65. package/dist/{user-settings-menu-f98bea89.esm.js → user-settings-menu-31e6bb38.esm.js} +29 -22
  66. package/dist/{user-settings-menu-6113cdd3.cjs.dev.js → user-settings-menu-c37b343f.cjs.dev.js} +29 -22
  67. package/package.json +16 -16
  68. package/ssr/dist/commercetools-frontend-application-shell-ssr.cjs.dev.js +2 -1
  69. package/ssr/dist/commercetools-frontend-application-shell-ssr.cjs.prod.js +2 -1
  70. package/ssr/dist/commercetools-frontend-application-shell-ssr.esm.js +2 -1
  71. package/test-utils/dist/commercetools-frontend-application-shell-test-utils.cjs.dev.js +26 -22
  72. package/test-utils/dist/commercetools-frontend-application-shell-test-utils.cjs.prod.js +26 -22
  73. package/test-utils/dist/commercetools-frontend-application-shell-test-utils.esm.js +20 -17
  74. package/dist/oidc-8827f9fe.cjs.dev.js +0 -98
  75. package/dist/oidc-b2520905.esm.js +0 -84
  76. package/dist/oidc-d74e6aa2.cjs.prod.js +0 -98
  77. package/dist/quick-access-9dd197bb.cjs.prod.js +0 -1875
  78. package/dist/quick-access-a665bbb7.cjs.dev.js +0 -1893
  79. package/dist/quick-access-dfc1f8a9.esm.js +0 -1865
@@ -1,1893 +0,0 @@
1
- 'use strict';
2
-
3
- var _slicedToArray = require('@babel/runtime-corejs3/helpers/slicedToArray');
4
- var _mapInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/map');
5
- var _Array$isArray = require('@babel/runtime-corejs3/core-js-stable/array/is-array');
6
- var _JSON$stringify = require('@babel/runtime-corejs3/core-js-stable/json/stringify');
7
- var _forEachInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/for-each');
8
- var _trimInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/trim');
9
- var _startsWithInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/starts-with');
10
- var react$1 = require('react');
11
- var react$2 = require('@apollo/client/react');
12
- var reactBroadcast = require('@flopflip/react-broadcast');
13
- var commonTags = require('common-tags');
14
- var debounce = require('debounce-async');
15
- var reactIntl = require('react-intl');
16
- var reactRouterDom = require('react-router-dom');
17
- var applicationShellConnectors = require('@commercetools-frontend/application-shell-connectors');
18
- var constants = require('@commercetools-frontend/constants');
19
- var permissions$1 = require('@commercetools-frontend/permissions');
20
- var sdk = require('@commercetools-frontend/sdk');
21
- var location = require('./location-c835b8df.cjs.dev.js');
22
- var _Object$keys = require('@babel/runtime-corejs3/core-js-stable/object/keys');
23
- var _Object$getOwnPropertySymbols = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols');
24
- var _Object$getOwnPropertyDescriptor = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor');
25
- var _Object$getOwnPropertyDescriptors = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors');
26
- var _Object$defineProperties = require('@babel/runtime-corejs3/core-js-stable/object/define-properties');
27
- var _Object$defineProperty = require('@babel/runtime-corejs3/core-js-stable/object/define-property');
28
- var _defineProperty = require('@babel/runtime-corejs3/helpers/defineProperty');
29
- var _includesInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/includes');
30
- var _sliceInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/slice');
31
- var _filterInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/filter');
32
- var _findIndexInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/find-index');
33
- var react = require('@emotion/react');
34
- var Fuse = require('fuse.js');
35
- var last = require('lodash/last');
36
- var designSystem = require('@commercetools-uikit/design-system');
37
- var icons = require('@commercetools-uikit/icons');
38
- var LoadingSpinner = require('@commercetools-uikit/loading-spinner');
39
- var jsxRuntime = require('@emotion/react/jsx-runtime');
40
- var dist_commercetoolsFrontendApplicationShell = require('./index-a57c8458.cjs.dev.js');
41
- var _Promise = require('@babel/runtime-corejs3/core-js-stable/promise');
42
- var _reduceInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/reduce');
43
- var _findInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/find');
44
- require('./index-614accc4.cjs.dev.js');
45
- require('@babel/runtime-corejs3/core-js-stable/object/entries');
46
- require('@babel/runtime-corejs3/core-js-stable/instance/concat');
47
- require('@babel/runtime-corejs3/core-js-stable/reflect/has');
48
- require('@reduxjs/toolkit');
49
- require('lodash/mapValues');
50
- require('omit-empty-es');
51
- require('redux');
52
- require('redux-thunk');
53
- require('@commercetools-frontend/notifications');
54
- require('@babel/runtime-corejs3/core-js-stable/instance/index-of');
55
- require('@commercetools-frontend/sentry');
56
- require('@commercetools-frontend/react-notifications');
57
- require('redux-logger');
58
- require('@emotion/styled/base');
59
- require('@commercetools-frontend/application-components');
60
- require('@commercetools-frontend/i18n');
61
- require('./oidc-8827f9fe.cjs.dev.js');
62
- require('@babel/runtime-corejs3/core-js-stable/url');
63
- require('@commercetools-uikit/spacings');
64
- require('@commercetools-uikit/flat-button');
65
- require('@babel/runtime-corejs3/helpers/objectWithoutProperties');
66
- require('memoize-one');
67
- require('react-select');
68
- require('@commercetools-uikit/accessible-hidden');
69
- require('@commercetools-uikit/select-input');
70
- require('@commercetools-uikit/text');
71
- require('@commercetools-frontend/assets/images/ct-logo.svg');
72
- require('@commercetools-frontend/browser-history');
73
- require('@commercetools-frontend/l10n');
74
- require('@babel/runtime-corejs3/core-js-stable/reflect/construct');
75
- require('@babel/runtime-corejs3/helpers/classCallCheck');
76
- require('@babel/runtime-corejs3/helpers/createClass');
77
- require('@babel/runtime-corejs3/helpers/possibleConstructorReturn');
78
- require('@babel/runtime-corejs3/helpers/getPrototypeOf');
79
- require('@babel/runtime-corejs3/helpers/inherits');
80
- require('@babel/runtime-corejs3/core-js-stable/object/from-entries');
81
- require('@babel/runtime-corejs3/core-js-stable/instance/flags');
82
- require('@flopflip/combine-adapters');
83
- require('@flopflip/http-adapter');
84
- require('@flopflip/launchdarkly-adapter');
85
- require('@flopflip/types');
86
- require('react-redux');
87
- require('@commercetools-uikit/design-system/materials/resets.css');
88
- require('@commercetools-frontend/application-config/ssr');
89
- require('@flopflip/memory-adapter');
90
- require('@babel/runtime-corejs3/core-js-stable/instance/some');
91
- require('@commercetools-frontend/actions-global');
92
-
93
- function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
94
-
95
- var _mapInstanceProperty__default = /*#__PURE__*/_interopDefault(_mapInstanceProperty);
96
- var _Array$isArray__default = /*#__PURE__*/_interopDefault(_Array$isArray);
97
- var _JSON$stringify__default = /*#__PURE__*/_interopDefault(_JSON$stringify);
98
- var _forEachInstanceProperty__default = /*#__PURE__*/_interopDefault(_forEachInstanceProperty);
99
- var _trimInstanceProperty__default = /*#__PURE__*/_interopDefault(_trimInstanceProperty);
100
- var _startsWithInstanceProperty__default = /*#__PURE__*/_interopDefault(_startsWithInstanceProperty);
101
- var debounce__default = /*#__PURE__*/_interopDefault(debounce);
102
- var _Object$keys__default = /*#__PURE__*/_interopDefault(_Object$keys);
103
- var _Object$getOwnPropertySymbols__default = /*#__PURE__*/_interopDefault(_Object$getOwnPropertySymbols);
104
- var _Object$getOwnPropertyDescriptor__default = /*#__PURE__*/_interopDefault(_Object$getOwnPropertyDescriptor);
105
- var _Object$getOwnPropertyDescriptors__default = /*#__PURE__*/_interopDefault(_Object$getOwnPropertyDescriptors);
106
- var _Object$defineProperties__default = /*#__PURE__*/_interopDefault(_Object$defineProperties);
107
- var _Object$defineProperty__default = /*#__PURE__*/_interopDefault(_Object$defineProperty);
108
- var _includesInstanceProperty__default = /*#__PURE__*/_interopDefault(_includesInstanceProperty);
109
- var _sliceInstanceProperty__default = /*#__PURE__*/_interopDefault(_sliceInstanceProperty);
110
- var _filterInstanceProperty__default = /*#__PURE__*/_interopDefault(_filterInstanceProperty);
111
- var _findIndexInstanceProperty__default = /*#__PURE__*/_interopDefault(_findIndexInstanceProperty);
112
- var Fuse__default = /*#__PURE__*/_interopDefault(Fuse);
113
- var last__default = /*#__PURE__*/_interopDefault(last);
114
- var LoadingSpinner__default = /*#__PURE__*/_interopDefault(LoadingSpinner);
115
- var _Promise__default = /*#__PURE__*/_interopDefault(_Promise);
116
- var _reduceInstanceProperty__default = /*#__PURE__*/_interopDefault(_reduceInstanceProperty);
117
- var _findInstanceProperty__default = /*#__PURE__*/_interopDefault(_findInstanceProperty);
118
-
119
- 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)."; }
120
- var _ref$1 = process.env.NODE_ENV === "production" ? {
121
- name: "13n9jnb",
122
- styles: "align-self:center;>*{display:block;}"
123
- } : {
124
- name: "1qkkrpz-ButlerCommand",
125
- styles: "align-self:center;>*{display:block;};label:ButlerCommand;/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci1jb21tYW5kLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFrRGdCIiwiZmlsZSI6ImJ1dGxlci1jb21tYW5kLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1vdXNlRXZlbnRIYW5kbGVyIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgY3VzdG9tUHJvcGVydGllcyB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2Rlc2lnbi1zeXN0ZW0nO1xuaW1wb3J0IHsgQW5nbGVUaGluUmlnaHRJY29uIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvaWNvbnMnO1xuaW1wb3J0IHR5cGUgeyBDb21tYW5kIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG50eXBlIFByb3BzID0ge1xuICBjb21tYW5kOiBDb21tYW5kO1xuICBpc1NlbGVjdGVkPzogYm9vbGVhbjtcbiAgb25DbGljazogTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+O1xuICBvbk1vdXNlRW50ZXI6IE1vdXNlRXZlbnRIYW5kbGVyPEhUTUxEaXZFbGVtZW50Pjtcbn07XG5cbmNvbnN0IEJ1dGxlckNvbW1hbmQgPSAocHJvcHM6IFByb3BzKSA9PiAoXG4gIDxkaXZcbiAgICBrZXk9e3Byb3BzLmNvbW1hbmQuaWR9XG4gICAgZGF0YS10ZXN0aWQ9e2BxdWljay1hY2Nlc3MtcmVzdWx0KCR7cHJvcHMuY29tbWFuZC5pZH0pYH1cbiAgICBhcmlhLWN1cnJlbnQ9e3Byb3BzLmlzU2VsZWN0ZWQgPT09IHRydWUgPyAndHJ1ZScgOiAnZmFsc2UnfVxuICAgIGNzcz17Y3NzYFxuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIHBhZGRpbmc6IDAgJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdNfTtcbiAgICAgIGhlaWdodDogMzZweDtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiAyMDA7XG4gICAgICBsaW5lLWhlaWdodDogMzZweDtcbiAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgICR7cHJvcHMuaXNTZWxlY3RlZCA9PT0gdHJ1ZVxuICAgICAgICA/IGBcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3VzdG9tUHJvcGVydGllcy5jb2xvckFjY2VudH07XG4gICAgICAgICAgICBjb2xvcjogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yU3VyZmFjZX07XG4gICAgICAgICAgYFxuICAgICAgICA6ICcnfVxuICAgIGB9XG4gICAgb25Nb3VzZUVudGVyPXtwcm9wcy5vbk1vdXNlRW50ZXJ9XG4gICAgb25DbGljaz17cHJvcHMub25DbGlja31cbiAgPlxuICAgIDxkaXZcbiAgICAgIGNzcz17Y3NzYFxuICAgICAgICBmbGV4OiAxIGF1dG87XG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgYH1cbiAgICA+XG4gICAgICB7cHJvcHMuY29tbWFuZC50ZXh0fVxuICAgIDwvZGl2PlxuICAgIHsoKEFycmF5LmlzQXJyYXkocHJvcHMuY29tbWFuZC5zdWJDb21tYW5kcykgJiZcbiAgICAgIHByb3BzLmNvbW1hbmQuc3ViQ29tbWFuZHMubGVuZ3RoID4gMCkgfHxcbiAgICAgIHR5cGVvZiBwcm9wcy5jb21tYW5kLnN1YkNvbW1hbmRzID09PSAnZnVuY3Rpb24nKSAmJiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgICAgICA+ICoge1xuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgfVxuICAgICAgICBgfVxuICAgICAgPlxuICAgICAgICA8QW5nbGVUaGluUmlnaHRJY29uXG4gICAgICAgICAgc2l6ZT1cIm1lZGl1bVwiXG4gICAgICAgICAgY29sb3I9e3Byb3BzLmlzU2VsZWN0ZWQgPyAnc3VyZmFjZScgOiAnbmV1dHJhbDYwJ31cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgICl9XG4gIDwvZGl2PlxuKTtcblxuQnV0bGVyQ29tbWFuZC5kaXNwbGF5TmFtZSA9ICdCdXRsZXJDb21tYW5kJztcblxuZXhwb3J0IGRlZmF1bHQgQnV0bGVyQ29tbWFuZDtcbiJdfQ== */",
126
- toString: _EMOTION_STRINGIFIED_CSS_ERROR__$1
127
- };
128
- var _ref2 = process.env.NODE_ENV === "production" ? {
129
- name: "lhzw0z",
130
- styles: "flex:1 auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis"
131
- } : {
132
- name: "zq3ooq-ButlerCommand",
133
- styles: "flex:1 auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;label:ButlerCommand;/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci1jb21tYW5kLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFxQ2MiLCJmaWxlIjoiYnV0bGVyLWNvbW1hbmQudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW91c2VFdmVudEhhbmRsZXIgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBjdXN0b21Qcm9wZXJ0aWVzIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyBBbmdsZVRoaW5SaWdodEljb24gfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9pY29ucyc7XG5pbXBvcnQgdHlwZSB7IENvbW1hbmQgfSBmcm9tICcuLi90eXBlcyc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNvbW1hbmQ6IENvbW1hbmQ7XG4gIGlzU2VsZWN0ZWQ/OiBib29sZWFuO1xuICBvbkNsaWNrOiBNb3VzZUV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD47XG4gIG9uTW91c2VFbnRlcjogTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+O1xufTtcblxuY29uc3QgQnV0bGVyQ29tbWFuZCA9IChwcm9wczogUHJvcHMpID0+IChcbiAgPGRpdlxuICAgIGtleT17cHJvcHMuY29tbWFuZC5pZH1cbiAgICBkYXRhLXRlc3RpZD17YHF1aWNrLWFjY2Vzcy1yZXN1bHQoJHtwcm9wcy5jb21tYW5kLmlkfSlgfVxuICAgIGFyaWEtY3VycmVudD17cHJvcHMuaXNTZWxlY3RlZCA9PT0gdHJ1ZSA/ICd0cnVlJyA6ICdmYWxzZSd9XG4gICAgY3NzPXtjc3NgXG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgcGFkZGluZzogMCAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019O1xuICAgICAgaGVpZ2h0OiAzNnB4O1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDIwMDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAzNnB4O1xuICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgJHtwcm9wcy5pc1NlbGVjdGVkID09PSB0cnVlXG4gICAgICAgID8gYFxuICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yQWNjZW50fTtcbiAgICAgICAgICAgIGNvbG9yOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JTdXJmYWNlfTtcbiAgICAgICAgICBgXG4gICAgICAgIDogJyd9XG4gICAgYH1cbiAgICBvbk1vdXNlRW50ZXI9e3Byb3BzLm9uTW91c2VFbnRlcn1cbiAgICBvbkNsaWNrPXtwcm9wcy5vbkNsaWNrfVxuICA+XG4gICAgPGRpdlxuICAgICAgY3NzPXtjc3NgXG4gICAgICAgIGZsZXg6IDEgYXV0bztcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICBgfVxuICAgID5cbiAgICAgIHtwcm9wcy5jb21tYW5kLnRleHR9XG4gICAgPC9kaXY+XG4gICAgeygoQXJyYXkuaXNBcnJheShwcm9wcy5jb21tYW5kLnN1YkNvbW1hbmRzKSAmJlxuICAgICAgcHJvcHMuY29tbWFuZC5zdWJDb21tYW5kcy5sZW5ndGggPiAwKSB8fFxuICAgICAgdHlwZW9mIHByb3BzLmNvbW1hbmQuc3ViQ29tbWFuZHMgPT09ICdmdW5jdGlvbicpICYmIChcbiAgICAgIDxkaXZcbiAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgICAgID4gKiB7XG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICB9XG4gICAgICAgIGB9XG4gICAgICA+XG4gICAgICAgIDxBbmdsZVRoaW5SaWdodEljb25cbiAgICAgICAgICBzaXplPVwibWVkaXVtXCJcbiAgICAgICAgICBjb2xvcj17cHJvcHMuaXNTZWxlY3RlZCA/ICdzdXJmYWNlJyA6ICduZXV0cmFsNjAnfVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgKX1cbiAgPC9kaXY+XG4pO1xuXG5CdXRsZXJDb21tYW5kLmRpc3BsYXlOYW1lID0gJ0J1dGxlckNvbW1hbmQnO1xuXG5leHBvcnQgZGVmYXVsdCBCdXRsZXJDb21tYW5kO1xuIl19 */",
134
- toString: _EMOTION_STRINGIFIED_CSS_ERROR__$1
135
- };
136
- const ButlerCommand = props => jsxRuntime.jsxs("div", {
137
- "data-testid": `quick-access-result(${props.command.id})`,
138
- "aria-current": props.isSelected === true ? 'true' : 'false',
139
- 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 ? `
140
- background: ${designSystem.customProperties.colorAccent};
141
- color: ${designSystem.customProperties.colorSurface};
142
- ` : '', ";" + (process.env.NODE_ENV === "production" ? "" : ";label:ButlerCommand;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci1jb21tYW5kLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFrQlkiLCJmaWxlIjoiYnV0bGVyLWNvbW1hbmQudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW91c2VFdmVudEhhbmRsZXIgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBjdXN0b21Qcm9wZXJ0aWVzIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyBBbmdsZVRoaW5SaWdodEljb24gfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9pY29ucyc7XG5pbXBvcnQgdHlwZSB7IENvbW1hbmQgfSBmcm9tICcuLi90eXBlcyc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNvbW1hbmQ6IENvbW1hbmQ7XG4gIGlzU2VsZWN0ZWQ/OiBib29sZWFuO1xuICBvbkNsaWNrOiBNb3VzZUV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD47XG4gIG9uTW91c2VFbnRlcjogTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+O1xufTtcblxuY29uc3QgQnV0bGVyQ29tbWFuZCA9IChwcm9wczogUHJvcHMpID0+IChcbiAgPGRpdlxuICAgIGtleT17cHJvcHMuY29tbWFuZC5pZH1cbiAgICBkYXRhLXRlc3RpZD17YHF1aWNrLWFjY2Vzcy1yZXN1bHQoJHtwcm9wcy5jb21tYW5kLmlkfSlgfVxuICAgIGFyaWEtY3VycmVudD17cHJvcHMuaXNTZWxlY3RlZCA9PT0gdHJ1ZSA/ICd0cnVlJyA6ICdmYWxzZSd9XG4gICAgY3NzPXtjc3NgXG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgcGFkZGluZzogMCAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019O1xuICAgICAgaGVpZ2h0OiAzNnB4O1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDIwMDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAzNnB4O1xuICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgJHtwcm9wcy5pc1NlbGVjdGVkID09PSB0cnVlXG4gICAgICAgID8gYFxuICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yQWNjZW50fTtcbiAgICAgICAgICAgIGNvbG9yOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JTdXJmYWNlfTtcbiAgICAgICAgICBgXG4gICAgICAgIDogJyd9XG4gICAgYH1cbiAgICBvbk1vdXNlRW50ZXI9e3Byb3BzLm9uTW91c2VFbnRlcn1cbiAgICBvbkNsaWNrPXtwcm9wcy5vbkNsaWNrfVxuICA+XG4gICAgPGRpdlxuICAgICAgY3NzPXtjc3NgXG4gICAgICAgIGZsZXg6IDEgYXV0bztcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICBgfVxuICAgID5cbiAgICAgIHtwcm9wcy5jb21tYW5kLnRleHR9XG4gICAgPC9kaXY+XG4gICAgeygoQXJyYXkuaXNBcnJheShwcm9wcy5jb21tYW5kLnN1YkNvbW1hbmRzKSAmJlxuICAgICAgcHJvcHMuY29tbWFuZC5zdWJDb21tYW5kcy5sZW5ndGggPiAwKSB8fFxuICAgICAgdHlwZW9mIHByb3BzLmNvbW1hbmQuc3ViQ29tbWFuZHMgPT09ICdmdW5jdGlvbicpICYmIChcbiAgICAgIDxkaXZcbiAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgICAgID4gKiB7XG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICB9XG4gICAgICAgIGB9XG4gICAgICA+XG4gICAgICAgIDxBbmdsZVRoaW5SaWdodEljb25cbiAgICAgICAgICBzaXplPVwibWVkaXVtXCJcbiAgICAgICAgICBjb2xvcj17cHJvcHMuaXNTZWxlY3RlZCA/ICdzdXJmYWNlJyA6ICduZXV0cmFsNjAnfVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgKX1cbiAgPC9kaXY+XG4pO1xuXG5CdXRsZXJDb21tYW5kLmRpc3BsYXlOYW1lID0gJ0J1dGxlckNvbW1hbmQnO1xuXG5leHBvcnQgZGVmYXVsdCBCdXRsZXJDb21tYW5kO1xuIl19 */"),
143
- onMouseEnter: props.onMouseEnter,
144
- onClick: props.onClick,
145
- children: [jsxRuntime.jsx("div", {
146
- css: _ref2,
147
- children: props.command.text
148
- }), (_Array$isArray__default["default"](props.command.subCommands) && props.command.subCommands.length > 0 || typeof props.command.subCommands === 'function') && jsxRuntime.jsx("div", {
149
- css: _ref$1,
150
- children: jsxRuntime.jsx(icons.AngleThinRightIcon, {
151
- size: "medium",
152
- color: props.isSelected ? 'surface' : 'neutral60'
153
- })
154
- })]
155
- }, props.command.id);
156
- ButlerCommand.displayName = 'ButlerCommand';
157
-
158
- var messages = reactIntl.defineMessages({
159
- inputPlacehoder: {
160
- id: 'QuickAccess.inputPlaceholder',
161
- defaultMessage: 'Go to...'
162
- },
163
- offline: {
164
- id: 'QuickAccess.offline',
165
- defaultMessage: 'Offline'
166
- },
167
- noResults: {
168
- id: 'QuickAccess.noResults',
169
- defaultMessage: 'No results found'
170
- },
171
- // create-commands
172
- setResourceLanguage: {
173
- id: 'QuickAccess.setResourceLanguage',
174
- defaultMessage: 'Set Resource Language'
175
- },
176
- openDashboard: {
177
- id: 'QuickAccess.openDashboard',
178
- defaultMessage: 'Open Dashboard'
179
- },
180
- openProducts: {
181
- id: 'QuickAccess.openProducts',
182
- defaultMessage: 'Open Products'
183
- },
184
- openProductList: {
185
- id: 'QuickAccess.openProductList',
186
- defaultMessage: 'Open Product List'
187
- },
188
- openProductVariantGeneral: {
189
- id: 'QuickAccess.openProductVariantGeneral',
190
- defaultMessage: 'General'
191
- },
192
- openProductVariantList: {
193
- id: 'QuickAccess.openProductVariantList',
194
- defaultMessage: 'Variants'
195
- },
196
- openProductVariantSearch: {
197
- id: 'QuickAccess.openProductVariantSearch',
198
- defaultMessage: 'Int. / Ext. Search'
199
- },
200
- openModifiedProducts: {
201
- id: 'QuickAccess.openModifiedProducts',
202
- defaultMessage: 'Open Review Modified Products'
203
- },
204
- openPimSearch: {
205
- id: 'QuickAccess.openPimSearch',
206
- defaultMessage: 'Open PIM Search'
207
- },
208
- openAddProducts: {
209
- id: 'QuickAccess.openAddProducts',
210
- defaultMessage: 'Open Add Products'
211
- },
212
- openCategories: {
213
- id: 'QuickAccess.openCategories',
214
- defaultMessage: 'Open Categories'
215
- },
216
- openCategoriesList: {
217
- id: 'QuickAccess.openCategoriesList',
218
- defaultMessage: 'Open Categories List'
219
- },
220
- openCategoriesSearch: {
221
- id: 'QuickAccess.openCategoriesSearch',
222
- defaultMessage: 'Open Categories Search'
223
- },
224
- openAddCategory: {
225
- id: 'QuickAccess.openAddCategory',
226
- defaultMessage: 'Open Add Category'
227
- },
228
- openCustomers: {
229
- id: 'QuickAccess.openCustomers',
230
- defaultMessage: 'Open Customers'
231
- },
232
- openCustomersList: {
233
- id: 'QuickAccess.openCustomersList',
234
- defaultMessage: 'Open Customers List'
235
- },
236
- openAddCustomer: {
237
- id: 'QuickAccess.openAddCustomer',
238
- defaultMessage: 'Open Add Customer'
239
- },
240
- openCustomerGroupsList: {
241
- id: 'QuickAccess.openCustomerGroupsList',
242
- defaultMessage: 'Open Customer Groups List'
243
- },
244
- openAddCustomerGroup: {
245
- id: 'QuickAccess.openAddCustomerGroup',
246
- defaultMessage: 'Open Add Customer Group'
247
- },
248
- openOrders: {
249
- id: 'QuickAccess.openOrders',
250
- defaultMessage: 'Open Orders'
251
- },
252
- openOrdersList: {
253
- id: 'QuickAccess.openOrdersList',
254
- defaultMessage: 'Open Orders List'
255
- },
256
- openAddOrder: {
257
- id: 'QuickAccess.openAddOrder',
258
- defaultMessage: 'Open Add Order'
259
- },
260
- openDiscounts: {
261
- id: 'QuickAccess.openDiscounts',
262
- defaultMessage: 'Open Discounts'
263
- },
264
- openProductDiscountsList: {
265
- id: 'QuickAccess.openProductDiscountsList',
266
- defaultMessage: 'Open Product Discounts List'
267
- },
268
- openCartDiscountsList: {
269
- id: 'QuickAccess.openCartDiscountsList',
270
- defaultMessage: 'Open Cart Discounts List'
271
- },
272
- openDiscountCodesList: {
273
- id: 'QuickAccess.openDiscountCodesList',
274
- defaultMessage: 'Open Discount Codes List'
275
- },
276
- openAddDiscount: {
277
- id: 'QuickAccess.openAddDiscount',
278
- defaultMessage: 'Open Add Discount'
279
- },
280
- openAddProductDiscount: {
281
- id: 'QuickAccess.openAddProductDiscount',
282
- defaultMessage: 'Open Add Product Discount'
283
- },
284
- openAddCartDiscount: {
285
- id: 'QuickAccess.openAddCartDiscount',
286
- defaultMessage: 'Open Add Cart Discount'
287
- },
288
- openAddDiscountCode: {
289
- id: 'QuickAccess.openAddDiscountCode',
290
- defaultMessage: 'Open Add Discount Code'
291
- },
292
- openSettings: {
293
- id: 'QuickAccess.openSettings',
294
- defaultMessage: 'Open Settings'
295
- },
296
- openProjectSettings: {
297
- id: 'QuickAccess.openProjectSettings',
298
- defaultMessage: 'Open Project Settings'
299
- },
300
- openProjectSettingsInternationalTab: {
301
- id: 'QuickAccess.openProjectSettingsInternationalTab',
302
- defaultMessage: 'Open Project Settings • International'
303
- },
304
- openProjectSettingsTaxesTab: {
305
- id: 'QuickAccess.openProjectSettingsTaxesTab',
306
- defaultMessage: 'Open Project Settings • Taxes'
307
- },
308
- openProjectSettingsShippingMethodsTab: {
309
- id: 'QuickAccess.openProjectSettingsShippingMethodsTab',
310
- defaultMessage: 'Open Project Settings • Shipping Methods'
311
- },
312
- openProjectSettingsChannelsTab: {
313
- id: 'QuickAccess.openProjectSettingsChannelsTab',
314
- defaultMessage: 'Open Project Settings • Channels'
315
- },
316
- openProjectSettingsStoresTab: {
317
- id: 'QuickAccess.openProjectSettingsStoresTab',
318
- defaultMessage: 'Open Project Settings • Stores'
319
- },
320
- openProductTypesSettings: {
321
- id: 'QuickAccess.openProductTypesSettings',
322
- defaultMessage: 'Open Product Types Settings'
323
- },
324
- openDeveloperSettings: {
325
- id: 'QuickAccess.openDeveloperSettings',
326
- defaultMessage: 'Open Developer Settings'
327
- },
328
- openCustomApplicationsSettings: {
329
- id: 'QuickAccess.openCustomApplicationsSettings',
330
- defaultMessage: 'Open Custom Applications Settings'
331
- },
332
- openApiClientsList: {
333
- id: 'QuickAccess.openApiClientsList',
334
- defaultMessage: 'Open API Clients'
335
- },
336
- openAddApiClient: {
337
- id: 'QuickAccess.openAddApiClient',
338
- defaultMessage: 'Open Add API Client'
339
- },
340
- openSupport: {
341
- id: 'QuickAccess.openSupport',
342
- defaultMessage: 'Open Support'
343
- },
344
- openMyProfile: {
345
- id: 'QuickAccess.openMyProfile',
346
- defaultMessage: 'Open My Profile'
347
- },
348
- showPrivacyPolicy: {
349
- id: 'QuickAccess.showPrivacyPolicy',
350
- defaultMessage: 'Show Privacy Policy'
351
- },
352
- logout: {
353
- id: 'QuickAccess.logout',
354
- defaultMessage: 'Logout'
355
- },
356
- useProject: {
357
- id: 'QuickAccess.useProject',
358
- defaultMessage: 'Switch to project "{projectName}"'
359
- },
360
- openManageProjects: {
361
- id: 'QuickAccess.openManageProject',
362
- defaultMessage: 'Open Manage Projects'
363
- },
364
- openManageOrganizations: {
365
- id: 'QuickAccess.openManageOrganizations',
366
- defaultMessage: 'Open Manage Organizations'
367
- },
368
- // subcommands
369
- openVariantById: {
370
- id: 'QuickAccess.openVariantById',
371
- defaultMessage: 'Open Variant "{id}" (id)'
372
- },
373
- openVariantByKey: {
374
- id: 'QuickAccess.openVariantByKey',
375
- defaultMessage: 'Open Variant "{key}" (key)'
376
- },
377
- openVariantBySku: {
378
- id: 'QuickAccess.openVariantBySku',
379
- defaultMessage: 'Open Variant "{sku}" (sku)'
380
- },
381
- showProduct: {
382
- id: 'QuickAccess.showProduct',
383
- defaultMessage: 'Show Product "{productName}"'
384
- },
385
- showProductVariant: {
386
- id: 'QuickAccess.showProductVariant',
387
- defaultMessage: 'Show Product Variant "{variantName}"'
388
- },
389
- showProductVariantAttributes: {
390
- id: 'QuickAccess.showProductVariantAttributes',
391
- defaultMessage: 'Show Attributes'
392
- },
393
- showProductVariantImages: {
394
- id: 'QuickAccess.showProductVariantImages',
395
- defaultMessage: 'Show Images'
396
- },
397
- showProductVariantPrices: {
398
- id: 'QuickAccess.showProductVariantPrices',
399
- defaultMessage: 'Show Prices'
400
- },
401
- showProductVariantInventory: {
402
- id: 'QuickAccess.showProductVariantInventory',
403
- defaultMessage: 'Show Inventory'
404
- }
405
- });
406
-
407
- function ownKeys(e, r) { var t = _Object$keys__default["default"](e); if (_Object$getOwnPropertySymbols__default["default"]) { var o = _Object$getOwnPropertySymbols__default["default"](e); r && (o = _filterInstanceProperty__default["default"](o).call(o, function (r) { return _Object$getOwnPropertyDescriptor__default["default"](e, r).enumerable; })), t.push.apply(t, o); } return t; }
408
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context10, _context11; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty__default["default"](_context10 = ownKeys(Object(t), !0)).call(_context10, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors__default["default"] ? _Object$defineProperties__default["default"](e, _Object$getOwnPropertyDescriptors__default["default"](t)) : _forEachInstanceProperty__default["default"](_context11 = ownKeys(Object(t))).call(_context11, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
409
- 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)."; }
410
- const isSelectAllCombo = event => event.key === 'a' && event.metaKey && !event.ctrlKey && !event.altKey && !event.shiftKey;
411
- const isCloseCombo = event => event.key === 'Escape' && !event.metaKey && !event.ctrlKey && !event.altKey && !event.shiftKey;
412
- const getPlatform = () => {
413
- var _context, _context2, _context3, _context4;
414
- if (_includesInstanceProperty__default["default"](_context = navigator.appVersion).call(_context, 'Win')) return 'windows';
415
- if (_includesInstanceProperty__default["default"](_context2 = navigator.appVersion).call(_context2, 'Mac')) return 'macos';
416
- if (_includesInstanceProperty__default["default"](_context3 = navigator.appVersion).call(_context3, 'X11')) return 'unix';
417
- if (_includesInstanceProperty__default["default"](_context4 = navigator.appVersion).call(_context4, 'Linux')) return 'linux';
418
- return null;
419
- };
420
- const hasNewWindowModifier = event => {
421
- const platform = getPlatform();
422
- switch (platform) {
423
- case 'macos':
424
- return event.metaKey;
425
- default:
426
- return event.ctrlKey;
427
- }
428
- };
429
- const shakeAnimation = react.keyframes`
430
- from,
431
- to {
432
- transform: translate3d(0, 0, 0);
433
- }
434
-
435
- 14%,
436
- 42%,
437
- 70% {
438
- transform: translate3d(-3px, 0, 0);
439
- }
440
-
441
- 28%,
442
- 56%,
443
- 84% {
444
- transform: translate3d(3px, 0, 0);
445
- }
446
- `;
447
- const initialState = {
448
- hasNetworkError: false,
449
- isLoading: false,
450
- searchText: '',
451
- selectedResult: -1,
452
- // Used for UX when browsing through history
453
- enableHistory: true,
454
- results: [],
455
- stack: []
456
- };
457
- const reducer = function () {
458
- var _context5;
459
- let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;
460
- let action = arguments.length > 1 ? arguments[1] : undefined;
461
- switch (action.type) {
462
- case 'networkError':
463
- return _objectSpread(_objectSpread({}, state), {}, {
464
- hasNetworkError: action.payload
465
- });
466
- case 'loading':
467
- return _objectSpread(_objectSpread({}, state), {}, {
468
- isLoading: action.payload
469
- });
470
- case 'selectedResult':
471
- return _objectSpread(_objectSpread({}, state), {}, {
472
- selectedResult: action.payload
473
- });
474
- case 'incrementSelectedResult':
475
- return _objectSpread(_objectSpread({}, state), {}, {
476
- selectedResult: state.selectedResult === state.results.length - 1 ? 0 : state.selectedResult + 1,
477
- enableHistory: false
478
- });
479
- case 'decrementSelectedResult':
480
- return _objectSpread(_objectSpread({}, state), {}, {
481
- selectedResult: state.selectedResult < 1 ? state.results.length - 1 : state.selectedResult - 1,
482
- enableHistory: false
483
- });
484
- case 'pickCommandFromHistory':
485
- return _objectSpread(_objectSpread({}, state), {}, {
486
- selectedResult: 0,
487
- searchText: action.payload.searchText,
488
- results: action.payload.results,
489
- stack: []
490
- // The history does not get changed here, it will be changed along
491
- // with the regular flow.
492
- });
493
- case 'setNextCommands':
494
- return _objectSpread(_objectSpread({}, state), {}, {
495
- stack: [...state.stack, {
496
- searchText: state.searchText,
497
- results: state.results,
498
- selectedResult: state.selectedResult
499
- }],
500
- selectedResult: 0,
501
- enableHistory: false,
502
- results: action.payload.results
503
- });
504
- case 'setPrevCommands':
505
- return _objectSpread(_objectSpread({}, state), {}, {
506
- searchText: action.payload.searchText,
507
- results: action.payload.results,
508
- selectedResult: 0,
509
- enableHistory: false,
510
- // omit last item
511
- stack: _sliceInstanceProperty__default["default"](_context5 = state.stack).call(_context5, 0, -1)
512
- });
513
- case 'searchText':
514
- return _objectSpread(_objectSpread({}, state), {}, {
515
- searchText: action.payload,
516
- // clear network error when search text is cleared, so that users
517
- // are tempted to retry
518
- hasNetworkError: action.payload.length > 0 && state.hasNetworkError
519
- });
520
- case 'setSearchTextResults':
521
- return _objectSpread(_objectSpread({}, state), {}, {
522
- results: action.payload,
523
- selectedResult: action.payload.length > 0 ? 0 : -1,
524
- enableHistory: true,
525
- stack: []
526
- });
527
- case 'resetSearchText':
528
- return _objectSpread(_objectSpread({}, state), {}, {
529
- searchText: '',
530
- results: [],
531
- selectedResult: -1
532
- });
533
- case 'resetResultsWhenClosing':
534
- return _objectSpread(_objectSpread({}, state), {}, {
535
- selectedResult: -1,
536
- enableHistory: true
537
- });
538
- case 'reset':
539
- return initialState;
540
- default:
541
- return state;
542
- }
543
- };
544
- var _ref = process.env.NODE_ENV === "production" ? {
545
- name: "zjik7",
546
- styles: "display:flex"
547
- } : {
548
- name: "vnvgom-Butler",
549
- styles: "display:flex;label:Butler;/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBOG1Ca0IiLCJmaWxlIjoiYnV0bGVyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEtleWJvYXJkRXZlbnRIYW5kbGVyLFxuICBDaGFuZ2VFdmVudEhhbmRsZXIsXG4gIEtleWJvYXJkRXZlbnQsXG4gIE1vdXNlRXZlbnRIYW5kbGVyLFxuICBNb3VzZUV2ZW50LFxuICB1c2VSZWR1Y2VyLFxuICB1c2VSZWYsXG4gIHVzZUNhbGxiYWNrLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBGdXNlIGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IGxhc3QgZnJvbSAnbG9kYXNoL2xhc3QnO1xuaW1wb3J0IHsgRm9ybWF0dGVkTWVzc2FnZSwgdXNlSW50bCB9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IHsgZGVzaWduVG9rZW5zIGFzIHVpS2l0RGVzaWduVG9rZW5zIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyBTZWFyY2hJY29uIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvaWNvbnMnO1xuaW1wb3J0IExvYWRpbmdTcGlubmVyIGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2xvYWRpbmctc3Bpbm5lcic7XG5pbXBvcnQgQnV0bGVyQ29tbWFuZCBmcm9tICcuLi9idXRsZXItY29tbWFuZCc7XG5pbXBvcnQgQnV0bGVyQ29udGFpbmVyIGZyb20gJy4uL2J1dGxlci1jb250YWluZXInO1xuaW1wb3J0IG1lc3NhZ2VzIGZyb20gJy4uL21lc3NhZ2VzJztcbmltcG9ydCB0eXBlIHtcbiAgQ29tbWFuZCxcbiAgU2VhcmNoVGV4dCxcbiAgU2VsZWN0ZWRSZXN1bHQsXG4gIFN0YWNrLFxuICBIaXN0b3J5RW50cnksXG59IGZyb20gJy4uL3R5cGVzJztcblxuY29uc3QgaXNTZWxlY3RBbGxDb21ibyA9IChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cbiAgZXZlbnQua2V5ID09PSAnYScgJiZcbiAgZXZlbnQubWV0YUtleSAmJlxuICAhZXZlbnQuY3RybEtleSAmJlxuICAhZXZlbnQuYWx0S2V5ICYmXG4gICFldmVudC5zaGlmdEtleTtcblxuY29uc3QgaXNDbG9zZUNvbWJvID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PlxuICBldmVudC5rZXkgPT09ICdFc2NhcGUnICYmXG4gICFldmVudC5tZXRhS2V5ICYmXG4gICFldmVudC5jdHJsS2V5ICYmXG4gICFldmVudC5hbHRLZXkgJiZcbiAgIWV2ZW50LnNoaWZ0S2V5O1xuXG5jb25zdCBnZXRQbGF0Zm9ybSA9ICgpID0+IHtcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdXaW4nKSkgcmV0dXJuICd3aW5kb3dzJztcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdNYWMnKSkgcmV0dXJuICdtYWNvcyc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnWDExJykpIHJldHVybiAndW5peCc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnTGludXgnKSkgcmV0dXJuICdsaW51eCc7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBoYXNOZXdXaW5kb3dNb2RpZmllciA9IChcbiAgZXZlbnQ6IEtleWJvYXJkRXZlbnQ8SFRNTEVsZW1lbnQ+IHwgTW91c2VFdmVudDxIVE1MRWxlbWVudD5cbikgPT4ge1xuICBjb25zdCBwbGF0Zm9ybSA9IGdldFBsYXRmb3JtKCk7XG4gIHN3aXRjaCAocGxhdGZvcm0pIHtcbiAgICBjYXNlICdtYWNvcyc6XG4gICAgICByZXR1cm4gZXZlbnQubWV0YUtleTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGV2ZW50LmN0cmxLZXk7XG4gIH1cbn07XG5cbmNvbnN0IHNoYWtlQW5pbWF0aW9uID0ga2V5ZnJhbWVzYFxuICBmcm9tLFxuICB0byB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcbiAgfVxuXG4gIDE0JSxcbiAgNDIlLFxuICA3MCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTNweCwgMCwgMCk7XG4gIH1cblxuICAyOCUsXG4gIDU2JSxcbiAgODQlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDNweCwgMCwgMCk7XG4gIH1cbmA7XG5cbnR5cGUgU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogYm9vbGVhbjtcbiAgaXNMb2FkaW5nOiBib29sZWFuO1xuICBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0O1xuICBzZWxlY3RlZFJlc3VsdDogU2VsZWN0ZWRSZXN1bHQ7XG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IGJvb2xlYW47XG4gIHJlc3VsdHM6IENvbW1hbmRbXTtcbiAgc3RhY2s6IFN0YWNrW107XG59O1xudHlwZSBBY3Rpb24gPVxuICB8IHsgdHlwZTogJ25ldHdvcmtFcnJvcic7IHBheWxvYWQ6IGJvb2xlYW4gfVxuICB8IHsgdHlwZTogJ2xvYWRpbmcnOyBwYXlsb2FkOiBib29sZWFuIH1cbiAgfCB7IHR5cGU6ICdzZWxlY3RlZFJlc3VsdCc7IHBheWxvYWQ6IG51bWJlciB9XG4gIHwgeyB0eXBlOiAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH1cbiAgfCB7IHR5cGU6ICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfVxuICB8IHtcbiAgICAgIHR5cGU6ICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JztcbiAgICAgIHBheWxvYWQ6IHsgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDsgcmVzdWx0czogQ29tbWFuZFtdIH07XG4gICAgfVxuICB8IHsgdHlwZTogJ3NldE5leHRDb21tYW5kcyc7IHBheWxvYWQ6IHsgcmVzdWx0czogQ29tbWFuZFtdIH0gfVxuICB8IHtcbiAgICAgIHR5cGU6ICdzZXRQcmV2Q29tbWFuZHMnO1xuICAgICAgcGF5bG9hZDogeyBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0OyByZXN1bHRzOiBDb21tYW5kW10gfTtcbiAgICB9XG4gIHwgeyB0eXBlOiAnc2VhcmNoVGV4dCc7IHBheWxvYWQ6IHN0cmluZyB9XG4gIHwgeyB0eXBlOiAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOyBwYXlsb2FkOiBDb21tYW5kW10gfVxuICB8IHsgdHlwZTogJ3Jlc2V0U2VhcmNoVGV4dCcgfVxuICB8IHsgdHlwZTogJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJyB9XG4gIHwgeyB0eXBlOiAncmVzZXQnIH07XG5jb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogZmFsc2UsXG4gIGlzTG9hZGluZzogZmFsc2UsXG4gIHNlYXJjaFRleHQ6ICcnLFxuICBzZWxlY3RlZFJlc3VsdDogLTEsXG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IHRydWUsXG4gIHJlc3VsdHM6IFtdLFxuICBzdGFjazogW10sXG59O1xuY29uc3QgcmVkdWNlciA9IChzdGF0ZTogU3RhdGUgPSBpbml0aWFsU3RhdGUsIGFjdGlvbjogQWN0aW9uKTogU3RhdGUgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnbmV0d29ya0Vycm9yJzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBoYXNOZXR3b3JrRXJyb3I6IGFjdGlvbi5wYXlsb2FkIH07XG4gICAgY2FzZSAnbG9hZGluZyc6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgaXNMb2FkaW5nOiBhY3Rpb24ucGF5bG9hZCB9O1xuICAgIGNhc2UgJ3NlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQgfTtcbiAgICBjYXNlICdpbmNyZW1lbnRTZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6XG4gICAgICAgICAgc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IHN0YXRlLnJlc3VsdHMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0ICsgMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ2RlY3JlbWVudFNlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDpcbiAgICAgICAgICBzdGF0ZS5zZWxlY3RlZFJlc3VsdCA8IDFcbiAgICAgICAgICAgID8gc3RhdGUucmVzdWx0cy5sZW5ndGggLSAxXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0IC0gMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ3BpY2tDb21tYW5kRnJvbUhpc3RvcnknOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OiAwLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZC5zZWFyY2hUZXh0LFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZC5yZXN1bHRzLFxuICAgICAgICBzdGFjazogW10sXG4gICAgICAgIC8vIFRoZSBoaXN0b3J5IGRvZXMgbm90IGdldCBjaGFuZ2VkIGhlcmUsIGl0IHdpbGwgYmUgY2hhbmdlZCBhbG9uZ1xuICAgICAgICAvLyB3aXRoIHRoZSByZWd1bGFyIGZsb3cuXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldE5leHRDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc3RhY2s6IFtcbiAgICAgICAgICAuLi5zdGF0ZS5zdGFjayxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZWFyY2hUZXh0OiBzdGF0ZS5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgcmVzdWx0czogc3RhdGUucmVzdWx0cyxcbiAgICAgICAgICAgIHNlbGVjdGVkUmVzdWx0OiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogMCxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLnJlc3VsdHMsXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldFByZXZDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQuc2VhcmNoVGV4dCxcbiAgICAgICAgcmVzdWx0czogYWN0aW9uLnBheWxvYWQucmVzdWx0cyxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IDAsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgICAvLyBvbWl0IGxhc3QgaXRlbVxuICAgICAgICBzdGFjazogc3RhdGUuc3RhY2suc2xpY2UoMCwgLTEpLFxuICAgICAgfTtcbiAgICBjYXNlICdzZWFyY2hUZXh0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgLy8gY2xlYXIgbmV0d29yayBlcnJvciB3aGVuIHNlYXJjaCB0ZXh0IGlzIGNsZWFyZWQsIHNvIHRoYXQgdXNlcnNcbiAgICAgICAgLy8gYXJlIHRlbXB0ZWQgdG8gcmV0cnlcbiAgICAgICAgaGFzTmV0d29ya0Vycm9yOiBhY3Rpb24ucGF5bG9hZC5sZW5ndGggPiAwICYmIHN0YXRlLmhhc05ldHdvcmtFcnJvcixcbiAgICAgIH07XG4gICAgY2FzZSAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQubGVuZ3RoID4gMCA/IDAgOiAtMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogdHJ1ZSxcbiAgICAgICAgc3RhY2s6IFtdLFxuICAgICAgfTtcbiAgICBjYXNlICdyZXNldFNlYXJjaFRleHQnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlYXJjaFRleHQ6ICcnLCByZXN1bHRzOiBbXSwgc2VsZWN0ZWRSZXN1bHQ6IC0xIH07XG4gICAgY2FzZSAncmVzZXRSZXN1bHRzV2hlbkNsb3NpbmcnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlbGVjdGVkUmVzdWx0OiAtMSwgZW5hYmxlSGlzdG9yeTogdHJ1ZSB9O1xuICAgIGNhc2UgJ3Jlc2V0JzpcbiAgICAgIHJldHVybiBpbml0aWFsU3RhdGU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufTtcblxudHlwZSBQcm9wcyA9IHtcbiAgaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdO1xuICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlOiAoaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdKSA9PiB2b2lkO1xuICBzZWFyY2g6IChzZWFyY2hUZXh0OiBTZWFyY2hUZXh0KSA9PiBQcm9taXNlPENvbW1hbmRbXT47XG4gIGdldE5leHRDb21tYW5kczogKGNvbW1hbmQ6IENvbW1hbmQpID0+IFByb21pc2U8Q29tbWFuZFtdPjtcbiAgZXhlY3V0ZUNvbW1hbmQ6IChjb21tYW5kOiBDb21tYW5kLCBtZXRhOiB7IG9wZW5Jbk5ld1RhYjogYm9vbGVhbiB9KSA9PiB2b2lkO1xuICBvbkNsb3NlOiAoKSA9PiB2b2lkO1xuICBjbGFzc05hbWVTaGFrZUFuaW1hdGlvbjogc3RyaW5nO1xufTtcbmNvbnN0IEJ1dGxlciA9IChwcm9wczogUHJvcHMpID0+IHtcbiAgY29uc3QgaW50bCA9IHVzZUludGwoKTtcbiAgY29uc3QgW3N0YXRlLCBkaXNwYXRjaF0gPSB1c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxTdGF0ZSk7XG5cbiAgY29uc3Qgc2hvdWxkU2VsZWN0RmllbGRUZXh0ID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3QgaXNOZXdXaW5kb3dDb21ibyA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IHNraXBOZXh0U2VsZWN0aW9uID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3Qgc2VhcmNoQ29udGFpbmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3Qgc2VhcmNoSW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbCk7XG5cbiAgY29uc3Qgc2V0SGFzTmV0d29ya0Vycm9yID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ25ldHdvcmtFcnJvcicsIHBheWxvYWQ6IHRydWUgfSk7XG4gIH0sIFtdKTtcbiAgY29uc3QgdW5zZXRIYXNOZXR3b3JrRXJyb3IgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbmV0d29ya0Vycm9yJywgcGF5bG9hZDogZmFsc2UgfSk7XG4gIH0sIFtdKTtcbiAgY29uc3Qgc2V0SXNMb2FkaW5nID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ2xvYWRpbmcnLCBwYXlsb2FkOiB0cnVlIH0pO1xuICB9LCBbXSk7XG4gIGNvbnN0IHVuc2V0SXNMb2FkaW5nID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ2xvYWRpbmcnLCBwYXlsb2FkOiBmYWxzZSB9KTtcbiAgfSwgW10pO1xuXG4gIC8vIERlc3RydWN0dXJlIGZ1bmN0aW9ucyBmcm9tIHByb3BzIHRvIHJlZmVyZW5jZSB0aGVtIGluIHRoZSBob29rIGRlcGVuZGVuY3kgbGlzdFxuICBjb25zdCB7XG4gICAgc2VhcmNoOiBzZWFyY2hGcm9tUGFyZW50LFxuICAgIG9uQ2xvc2U6IG9uQ2xvc2VGcm9tUGFyZW50LFxuICAgIGV4ZWN1dGVDb21tYW5kOiBleGVjdXRlQ29tbWFuZEZyb21QYXJlbnQsXG4gICAgb25IaXN0b3J5RW50cmllc0NoYW5nZTogb25IaXN0b3J5RW50cmllc0NoYW5nZUZyb21QYXJlbnQsXG4gICAgZ2V0TmV4dENvbW1hbmRzOiBnZXROZXh0Q29tbWFuZHNGcm9tUGFyZW50LFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3Qgc2hha2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50KSB7XG4gICAgICBzZWFyY2hDb250YWluZXJSZWYuY3VycmVudC5jbGFzc0xpc3QucmVtb3ZlKFxuICAgICAgICBwcm9wcy5jbGFzc05hbWVTaGFrZUFuaW1hdGlvblxuICAgICAgKTtcbiAgICAgIC8vIC0+IHRyaWdnZXJpbmcgcmVmbG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdm9pZFxuICAgICAgdm9pZCBzZWFyY2hDb250YWluZXJSZWYuY3VycmVudC5vZmZzZXRXaWR0aDtcbiAgICAgIHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50LmNsYXNzTGlzdC5hZGQocHJvcHMuY2xhc3NOYW1lU2hha2VBbmltYXRpb24pO1xuICAgIH1cbiAgfSwgW3Byb3BzLmNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uXSk7XG5cbiAgY29uc3QgZXhlY3V0ZSA9IHVzZUNhbGxiYWNrKFxuICAgIChjb21tYW5kOiBDb21tYW5kLCBtZXRhOiB7IG9wZW5Jbk5ld1RhYjogYm9vbGVhbiB9KSA9PiB7XG4gICAgICAvLyBPbmx5IG1haW4gZW50cmllcyBnZXQgYWRkZWQgdG8gaGlzdG9yeSwgc28gd2hlbiBhIHN1YmNvbW1hbmQgaXMgZXhlY3V0ZWQsXG4gICAgICAvLyB3ZSBhZGQgdGhlIG1haW4gY29tbWFuZCBvZiBpdCB0byB0aGUgaGlzdG9yeSAodGhlIHRvcC1sZXZlbCBjb21tYW5kKS5cbiAgICAgIC8vXG4gICAgICAvLyBUaGUga2V5IHRvIGlkZW50aWZ5IGhpc3RvcnkgZW50cmllcyBieSBpcyBhbHdheXMgdGhlIHNlYXJjaFRleHRcbiAgICAgIC8vIFRoZXJlIHdpbGwgbmV2ZXIgYmUgdHdvIGhpc3RvcnkgZW50cmllcyB3aXRoIHRoZSBzYW1lIHNlYXJjaFRleHRcbiAgICAgIGNvbnN0IGVudHJ5ID1cbiAgICAgICAgc3RhdGUuc3RhY2subGVuZ3RoID09PSAwXG4gICAgICAgICAgPyAvLyBUaGUgc3RhY2sgaXMgZW1wdHksIHNvIHdlIGFyZSBleGVjdXRpbmcgYSB0b3AtbGV2ZWwgY29tbWFuZFxuICAgICAgICAgICAgeyBzZWFyY2hUZXh0OiBzdGF0ZS5zZWFyY2hUZXh0LCByZXN1bHRzOiBzdGF0ZS5yZXN1bHRzIH1cbiAgICAgICAgICA6IC8vIFdlIGFyZSBleGVjdXRpbmcgYSBzdWJjb21tYW5kLCBzbyB3ZSBnZXQgdGhlIHRvcC1sZXZlbCBjb21tYW5kIGZvciBpdCxcbiAgICAgICAgICAgIC8vIHdoaWNoIGlzIGF0IHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzZWFyY2hUZXh0OiBzdGF0ZS5zdGFja1swXS5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgICByZXN1bHRzOiBzdGF0ZS5zdGFja1swXS5yZXN1bHRzLFxuICAgICAgICAgICAgfTtcblxuICAgICAgLy8gQWRkIHRoZSBlbnRyeSB0byB0aGUgaGlzdG9yeSwgd2hpbGUgZXhjbHVkaW5nIGFueSBlYXJsaWVyIGhpc3RvcnkgZW50cnlcbiAgICAgIC8vIHdpdGggdGhlIHNhbWUgc2VhcmNoIHRleHQuIFRoaXMgZWZmZWN0aXZlbHkgXCJtb3Zlc1wiIHRoYXQgZW50cnkgdG8gdGhlXG4gICAgICAvLyB0b3Agb2YgdGhlIGhpc3RvcnkgKHdpdGggdGhlIG1vc3QgcmVjZW50IHJlc3VsdHMpLCBvciBhcHBlbmRzIGEgbmV3IGVudHJ5XG4gICAgICAvLyB3aGVuIGl0IGRpZG4ndCBleGlzdCBiZWZvcmUuXG4gICAgICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlRnJvbVBhcmVudChbXG4gICAgICAgIC4uLnByb3BzLmhpc3RvcnlFbnRyaWVzLmZpbHRlcihcbiAgICAgICAgICAoY29tbWFuZCkgPT4gY29tbWFuZC5zZWFyY2hUZXh0ICE9PSBlbnRyeS5zZWFyY2hUZXh0XG4gICAgICAgICksXG4gICAgICAgIGVudHJ5LFxuICAgICAgXSk7XG5cbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3Jlc2V0U2VhcmNoVGV4dCcgfSk7XG5cbiAgICAgIG9uQ2xvc2VGcm9tUGFyZW50KCk7XG5cbiAgICAgIGV4ZWN1dGVDb21tYW5kRnJvbVBhcmVudChjb21tYW5kLCBtZXRhKTtcbiAgICB9LFxuICAgIFtcbiAgICAgIGV4ZWN1dGVDb21tYW5kRnJvbVBhcmVudCxcbiAgICAgIG9uQ2xvc2VGcm9tUGFyZW50LFxuICAgICAgb25IaXN0b3J5RW50cmllc0NoYW5nZUZyb21QYXJlbnQsXG4gICAgICBwcm9wcy5oaXN0b3J5RW50cmllcyxcbiAgICAgIHN0YXRlLnJlc3VsdHMsXG4gICAgICBzdGF0ZS5zZWFyY2hUZXh0LFxuICAgICAgc3RhdGUuc3RhY2ssXG4gICAgXVxuICApO1xuICBjb25zdCBoYW5kbGVLZXlEb3duID0gdXNlQ2FsbGJhY2s8S2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD4+KFxuICAgIChldmVudCkgPT4ge1xuICAgICAgLy8gUHJldmVudGluZyBjdXJzb3IganVtcHMgY2FuIG9ubHkgaGFwcGVuIGluIG9uS2V5RG93biwgYnV0IG5vdCBpbiBvbktleVVwXG4gICAgICBldmVudC5wZXJzaXN0KCk7XG5cbiAgICAgIC8vIFdlIHdhbnQgdG8ga25vdyB3aGVuIHRoZSB1c2VyIHByZXNzZXMgY21kK2VudGVyIChjbWQgYmVpbmcgYSBtZXRhIGtleSkuXG4gICAgICAvLyBXZSBhcmUgb25seSB0b2xkIGFib3V0IHRoaXMgaW4ga2V5RG93biwgYnV0IG5vdCBpbiBrZXlVcCwgc28gd2UgbmVlZFxuICAgICAgLy8gdG8gaGFuZGxlIGl0IGhlcmVcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicgJiYgaGFzTmV3V2luZG93TW9kaWZpZXIoZXZlbnQpKSB7XG4gICAgICAgIGlzTmV3V2luZG93Q29tYm8uY3VycmVudCA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gQXZvaWQgc2VsZWN0aW5nIHRoZSB3aG9sZSBwYWdlIHdoZW4gdXNlciBzZWxlY3RlcyBldmVyeXRoaW5nIHdpdGhcbiAgICAgIC8vIGEga2V5Ym9hcmQgc2hvcnRjdXQuIFRoZXJlIGlzIHByb2JhYmx5IGEgYmV0dGVyIHdheSB0byBkbyB0aGlzIHRob3VnaC5cbiAgICAgIC8vIFRoaXMgcHJldmVudHMgdGhlIHdob2xlIHBhZ2UgZnJvbSBiZWluZyBzZWxlY3RlZCBpbiBjYXNlIHRoZSB1c2VyXG4gICAgICAvLyAxKSBvcGVucyB0aGUgc2VhcmNoIGJveFxuICAgICAgLy8gMikgdHlwZXMgaW50byBpdFxuICAgICAgLy8gMykgc2VsZWN0cyBhbGwgdGV4dCB1c2luZyBjbWQrYVxuICAgICAgLy8gNCkgY2xvc2VzIHRoZSBzZWFyY2ggYm94IHdpdGggZXNjXG4gICAgICAvLyBXaXRob3V0IHRoaXMgaGFuZGxpbmcsIHRoZSB3aG9sZSBwYWdlIHdvdWxkIG5vdyBiZSBzZWxlY3RlZFxuICAgICAgaWYgKGlzU2VsZWN0QWxsQ29tYm8oZXZlbnQpKSB7XG4gICAgICAgIC8vIFRoaXMgc3RvcHMgdGhlIGJyb3dzZXIgZnJvbSBzZWxlY3RpbmcgYW55dGhpbmdcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHNlYXJjaElucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAvLyBUaGlzIHNlbGVjdHMgdGhlIHRleHQgaW4gdGhlIHNlYXJjaCBpbnB1dFxuICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2V0U2VsZWN0aW9uUmFuZ2UoMCwgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gYXZvaWQgaW50ZXJmZXJpbmcgd2l0aCBvdGhlciBrZXkgY29tYmluYXRpb25zIHVzaW5nIG1vZGlmaWVyIGtleXNcbiAgICAgIGlmIChldmVudC5jdHJsS2V5IHx8IGV2ZW50LmFsdEtleSB8fCBldmVudC5zaGlmdEtleSB8fCBldmVudC5tZXRhS2V5KVxuICAgICAgICByZXR1cm47XG4gICAgICBpZiAoaXNDbG9zZUNvbWJvKGV2ZW50KSkgcmV0dXJuO1xuXG4gICAgICAvLyBza2lwIG5leHQgbW91c2VFbnRlciB0byBhdm9pZCBzZXR0aW5nIHNlbGVjdGVkUmVzdWx0IHdoZW4gY3Vyc29yIGp1c3RcbiAgICAgIC8vIGhhcHBlbnMgdG8gYmUgd2hlcmUgdGhlIHJlc3VsdHMgd2lsbCBwb3AgdXBcbiAgICAgIHNraXBOZXh0U2VsZWN0aW9uLmN1cnJlbnQgPSB0cnVlO1xuXG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgICAvLyBwcmV2ZW50IGN1cnNvciBmcm9tIGp1bXBpbmcgdG8gZW5kIG9mIHRleHQgaW5wdXRcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgICAgLy8gYnJvd3NlIHRocm91Z2ggaGlzdG9yeVxuICAgICAgICBpZiAoXG4gICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAoc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPCAxICYmIHN0YXRlLmVuYWJsZUhpc3RvcnkpXG4gICAgICAgICkge1xuICAgICAgICAgIHNob3VsZFNlbGVjdEZpZWxkVGV4dC5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID1cbiAgICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgID8gLy8gV2hlbiBnb2luZyBiYWNrIHRoZSBmaXJzdCBzdGVwXG4gICAgICAgICAgICAgICAgLTFcbiAgICAgICAgICAgICAgOiAvLyBXaGVuIGdvaW5nIGJhY2sgbW9yZSB0aGFuIG9uZSBzdGVwXG4gICAgICAgICAgICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgKGNvbW1hbmQpID0+IGNvbW1hbmQuc2VhcmNoVGV4dCA9PT0gc3RhdGUuc2VhcmNoVGV4dFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgLy8gUGljayB0aGUgcHJldmlvdXMgY29tbWFuZCBmcm9tIHRoZSBoaXN0b3J5XG4gICAgICAgICAgY29uc3QgcHJldkNvbW1hbmQgPVxuICAgICAgICAgICAgc2VsZWN0ZWRJbmRleCA9PT0gLTFcbiAgICAgICAgICAgICAgPyAvLyBwcmV2aW91cyBjb21tYW5kIG9uIHRvcCBvZiB0aGUgaGlzdG9yeSB3aGVuIGdvaW5nIGJhY2sgb25cbiAgICAgICAgICAgICAgICAvLyBmaXJzdCBzdGVwXG4gICAgICAgICAgICAgICAgbGFzdChwcm9wcy5oaXN0b3J5RW50cmllcylcbiAgICAgICAgICAgICAgOiAvLyBwcmV2aW91cyBjb21tYW5kIGlzIGRlZXBlciBkb3duXG4gICAgICAgICAgICAgICAgLy8gV2hlbiB0aGUgaGlzdG9yeSBkb2VzIG5vdCBleGlzdCAobmVnYXRpdmUgaW5kZXgpLCB0aGVuXG4gICAgICAgICAgICAgICAgLy8gdGhpcyBpbXBsaWNpdGx5IHJldHVybnMgdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXNbc2VsZWN0ZWRJbmRleCAtIDFdO1xuICAgICAgICAgIC8vIFNraXAgd2hlbiBubyBwcmV2aW91cyBlbnRyeSBleGlzdHMgaW4gdGhlIGhpc3RvcnlcbiAgICAgICAgICBpZiAoIXByZXZDb21tYW5kKSByZXR1cm47XG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ3BpY2tDb21tYW5kRnJvbUhpc3RvcnknLFxuICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgICBzZWFyY2hUZXh0OiBwcmV2Q29tbWFuZC5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgICByZXN1bHRzOiBwcmV2Q29tbWFuZC5yZXN1bHRzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcHJldmVudCBjdXJzb3IgZnJvbSBqdW1waW5nIHRvIGJlZ2lubmluZyBvZiB0ZXh0IGlucHV0XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ2RlY3JlbWVudFNlbGVjdGVkUmVzdWx0JyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXRlLnNlbGVjdGVkUmVzdWx0ID4gLTEpIHtcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnKSB7XG4gICAgICAgICAgY29uc3QgY29tbWFuZCA9IHN0YXRlLnJlc3VsdHNbc3RhdGUuc2VsZWN0ZWRSZXN1bHRdO1xuICAgICAgICAgIGNvbnN0IHNlYXJjaFRleHQgPSBzdGF0ZS5zZWFyY2hUZXh0O1xuICAgICAgICAgIGNvbnN0IGlzQ3Vyc29yQXRFbmQgPVxuICAgICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudCAmJlxuICAgICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XG5cbiAgICAgICAgICBjb25zdCBpc0V2ZXJ5dGhpbmdTZWxlY3RlZCA9XG4gICAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50ICYmXG4gICAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0ID09PSAwICYmXG4gICAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XG5cbiAgICAgICAgICAvLyBvbmx5IGFsbG93IGRpdmluZyBpbiB3aGVuIGN1cnNvciBpcyBhdCBlbmQgb2YgaW5wdXQgb3Igd2hlblxuICAgICAgICAgIC8vIHRoZSBjb21wbGV0ZSB0ZXh0IGlzIHNlbGVjdGVkICh3aGVuIGJyb3dzaW5nIHRocm91Z2ggaGlzdG9yeSlcbiAgICAgICAgICBpZiAoIWlzQ3Vyc29yQXRFbmQgJiYgIWlzRXZlcnl0aGluZ1NlbGVjdGVkKSByZXR1cm47XG5cbiAgICAgICAgICB1bnNldEhhc05ldHdvcmtFcnJvcigpO1xuXG4gICAgICAgICAgLy8gTk9URTogc2luY2Ugd2UgbmVlZCB0byBmZXRjaCB0aGUgXCJuZXh0IGNvbW1hbmRcIiwgd2hpY2ggaXMgYW4gYXN5bmMgb3BlcmF0aW9uLFxuICAgICAgICAgIC8vIHdlIHVzZSBhIElJRkUgdG8gcHJvY2VzcyB0aGF0IGFuZCBldmVudHVhbGx5IHVwZGF0ZSB0aGUgc3RhdGUuXG4gICAgICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGlmIChjb21tYW5kKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG5leHRDb21tYW5kcyA9IGF3YWl0IGdldE5leHRDb21tYW5kc0Zyb21QYXJlbnQoY29tbWFuZCk7XG4gICAgICAgICAgICAgIC8vIGF2b2lkIG1vdmluZyBjdXJzb3Igd2hlbiB0aGVyZSBhcmUgc3ViLW9wdGlvbnNcbiAgICAgICAgICAgICAgaWYgKG5leHRDb21tYW5kcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgLy8gRW5zdXJlIHRoZSBzZWFyY2ggdGV4dCBoYXMgbm90IGNoYW5nZWQgd2hpbGUgd2Ugd2VyZSBsb2FkaW5nXG4gICAgICAgICAgICAgICAgLy8gdGhlIG5leHQgcmVzdWx0cywgb3RoZXJ3aXNlIHdlJ2QgaW50ZXJydXB0IHRoZSB1c2VyLlxuICAgICAgICAgICAgICAgIC8vIFRocm93IGF3YXkgdGhlIHJlc3VsdHMgaW4gY2FzZSB0aGUgc2VhcmNoIHRleHQgaGFzIGNoYW5nZWQuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLnNlYXJjaFRleHQgPT09IHNlYXJjaFRleHQpIHtcbiAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3NldE5leHRDb21tYW5kcycsXG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQ6IHsgcmVzdWx0czogbmV4dENvbW1hbmRzIH0sXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzaGFrZSgpO1xuICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnKSB7XG4gICAgICAgICAgLy8gZ28gbGVmdCBpbiBzdGFja1xuICAgICAgICAgIGNvbnN0IHByZXZDb21tYW5kID0gbGFzdChzdGF0ZS5zdGFjayk7XG5cbiAgICAgICAgICAvLyBkbyBub3RoaW5nIHdoZW4gd2UgY2FuJ3QgZ28gbGVmdCBhbnltb3JlXG4gICAgICAgICAgaWYgKCFwcmV2Q29tbWFuZCkgcmV0dXJuO1xuXG4gICAgICAgICAgLy8gcHJldmVudCBjdXJzb3IgZnJvbSBqdW1waW5nIGEgY2hhciB0byB0aGUgbGVmdCBpbiB0ZXh0IGlucHV0XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdzZXRQcmV2Q29tbWFuZHMnLFxuICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgICBzZWFyY2hUZXh0OiBwcmV2Q29tbWFuZC5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgICByZXN1bHRzOiBwcmV2Q29tbWFuZC5yZXN1bHRzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIGdldE5leHRDb21tYW5kc0Zyb21QYXJlbnQsXG4gICAgICBwcm9wcy5oaXN0b3J5RW50cmllcyxcbiAgICAgIHNoYWtlLFxuICAgICAgc3RhdGUsXG4gICAgICB1bnNldEhhc05ldHdvcmtFcnJvcixcbiAgICBdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUtleVVwID0gdXNlQ2FsbGJhY2s8S2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD4+KFxuICAgIChldmVudCkgPT4ge1xuICAgICAgLy8gc2V0dGluZyB0aGUgc2VsZWN0aW9uIGNhbiBvbmx5IGhhcHBlbiBpbiBvbktleVVwXG4gICAgICBpZiAoc2hvdWxkU2VsZWN0RmllbGRUZXh0LmN1cnJlbnQpIHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgaW5wdXQuc2VsZWN0KCk7XG4gICAgICAgIHNob3VsZFNlbGVjdEZpZWxkVGV4dC5jdXJyZW50ID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5rZXkgIT09ICdFbnRlcicgJiYgIWlzTmV3V2luZG93Q29tYm8uY3VycmVudCkgcmV0dXJuIHRydWU7XG5cbiAgICAgIC8vIFVzZXIganVzdCB0cmlnZ2VyZWQgdGhlIHNlYXJjaFxuICAgICAgaWYgKHN0YXRlLnNlbGVjdGVkUmVzdWx0ID09PSAtMSkgcmV0dXJuIHRydWU7XG5cbiAgICAgIC8vIFVzZXIgaGFkIHNvbWV0aGluZyBzZWxlY3RlZCBhbmQgd2FudHMgdG8gZ28gdGhlcmVcbiAgICAgIGV4ZWN1dGUoc3RhdGUucmVzdWx0c1tzdGF0ZS5zZWxlY3RlZFJlc3VsdF0sIHtcbiAgICAgICAgb3BlbkluTmV3VGFiOiBpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQsXG4gICAgICB9KTtcblxuICAgICAgaXNOZXdXaW5kb3dDb21iby5jdXJyZW50ID0gZmFsc2U7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIFtleGVjdXRlLCBzdGF0ZS5yZXN1bHRzLCBzdGF0ZS5zZWxlY3RlZFJlc3VsdF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gdXNlQ2FsbGJhY2s8Q2hhbmdlRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+PihcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHNlYXJjaFRleHQgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgICBpZiAoc2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3Jlc2V0JyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdzZWFyY2hUZXh0JywgcGF5bG9hZDogc2VhcmNoVGV4dCB9KTtcblxuICAgICAgLy8gQSBzZWFyY2ggdmlhIG5ldHdvcmsgaXMgb25seSB0cmlnZ2VyZWQgd2hlbiB0aGVyZVxuICAgICAgLy8gYXJlIG1vcmUgdGhhbiB0aHJlZSBjaGFyYWN0ZXJzLiBTbyBubyBmYWxzZSBsb2FkaW5nXG4gICAgICAvLyBpbmRpY2F0aW9uIGlzIGdpdmVuLlxuICAgICAgaWYgKHNlYXJjaFRleHQudHJpbSgpLmxlbmd0aCA+IDMpIHtcbiAgICAgICAgc2V0SXNMb2FkaW5nKCk7XG4gICAgICB9XG5cbiAgICAgIHNlYXJjaEZyb21QYXJlbnQoc2VhcmNoVGV4dCkudGhlbihcbiAgICAgICAgKGFzeW5jUmVzdWx0czogQ29tbWFuZFtdKSA9PiB7XG4gICAgICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IoKTtcbiAgICAgICAgICB1bnNldElzTG9hZGluZygpO1xuXG4gICAgICAgICAgY29uc3QgZnVzZSA9IG5ldyBGdXNlKGFzeW5jUmVzdWx0cywge1xuICAgICAgICAgICAga2V5czogW1xuICAgICAgICAgICAgICB7IG5hbWU6ICd0ZXh0Jywgd2VpZ2h0OiAwLjYgfSxcbiAgICAgICAgICAgICAgeyBuYW1lOiAna2V5d29yZHMnLCB3ZWlnaHQ6IDAuNCB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIG1pbk1hdGNoQ2hhckxlbmd0aDogMixcbiAgICAgICAgICAgIGluY2x1ZGVTY29yZTogdHJ1ZSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IHNlYXJjaFJlc3VsdHMgPSBmdXNlXG4gICAgICAgICAgICAuc2VhcmNoKHNlYXJjaFRleHQpXG4gICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IHJlc3VsdHMgd2l0aCBhIG1hdGNoaW5nIHNjb3JlIG92ZXIgMC43NVxuICAgICAgICAgICAgLmZpbHRlcigocmVzdWx0KSA9PiAocmVzdWx0LnNjb3JlID8gcmVzdWx0LnNjb3JlIDwgMC43NSA6IGZhbHNlKSlcbiAgICAgICAgICAgIC8vIEtlZXAgYSBtYXhpbWFsIG9mIDkgcmVzdWx0c1xuICAgICAgICAgICAgLnNsaWNlKDAsIDkpO1xuXG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ3NldFNlYXJjaFRleHRSZXN1bHRzJyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHNlYXJjaFJlc3VsdHMubWFwKChyZXN1bHQpID0+IHJlc3VsdC5pdGVtKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgIHVuc2V0SXNMb2FkaW5nKCk7XG4gICAgICAgICAgc2V0SGFzTmV0d29ya0Vycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSxcbiAgICBbXG4gICAgICBzZWFyY2hGcm9tUGFyZW50LFxuICAgICAgc2V0SGFzTmV0d29ya0Vycm9yLFxuICAgICAgc2V0SXNMb2FkaW5nLFxuICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IsXG4gICAgICB1bnNldElzTG9hZGluZyxcbiAgICBdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUNvbnRhaW5lckNsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJyB9KTtcbiAgICBvbkNsb3NlRnJvbVBhcmVudCgpO1xuICB9LCBbb25DbG9zZUZyb21QYXJlbnRdKTtcblxuICBjb25zdCBjcmVhdGVDb21tYW5kTW91c2VFbnRlckhhbmRsZXIgPSB1c2VDYWxsYmFjazxcbiAgICAoaW5kZXg6IG51bWJlcikgPT4gTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+XG4gID4oXG4gICAgKGluZGV4KSA9PiAoKSA9PiB7XG4gICAgICAvLyBJbiBjYXNlIHRoZSBjdXJzb3IgaGFwcGVuZWQgdG8gYmUgaW4gYSBsb2NhdGlvbiB3aGVyZSBhXG4gICAgICAvLyByZXN1bHQgd291bGQgYXBwZWFyLCBpdCB3b3VsZCB0cmlnZ2VyIG9uTW91c2VFbnRlciBhbmQgdGhlXG4gICAgICAvLyByZXN1bHQgd291bGQgYmUgc2VsZWN0ZWQgaW1tZWRpYXRlbHkuIFRoaXMgaXMgbm90IHNvbWV0aGluZ1xuICAgICAgLy8gYSB1c2VyIHdvdWxkIGV4cGVjdCwgaGVuY2Ugd2UgcHJldmVudCBpdCBmcm9tIGhhcHBlbmluZy5cbiAgICAgIC8vIFRoZSB1c2VyIGhhcyB0byBtb3ZlIHRoZSBjdXJzb3IgdG8gYW4gb3B0aW9uIGV4cGxpY2l0bHkgZm9yXG4gICAgICAvLyBpdCB0byBiZWNvbWUgYWN0aXZlLiBIb3dldmVyLCB0aGUgdXNlciBjYW4gYWx3YXlzIGNsaWNrIGFuZFxuICAgICAgLy8gdGhhdCBhY3Rpb24gd2lsbCBiZSB0cmlnZ2VyZWQuXG4gICAgICBpZiAoc2tpcE5leHRTZWxlY3Rpb24uY3VycmVudCkge1xuICAgICAgICBza2lwTmV4dFNlbGVjdGlvbi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gc2V0cyB0aGUgc2VsZWN0ZWQgcmVzdWx0LCBtYWlubHkgZm9yIHRoZSBob3ZlciBlZmZlY3RcbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3NlbGVjdGVkUmVzdWx0JywgcGF5bG9hZDogaW5kZXggfSk7XG4gICAgfSxcbiAgICBbXVxuICApO1xuICBjb25zdCBjcmVhdGVDb21tYW5kQ2xpY2tIYW5kbGVyID0gdXNlQ2FsbGJhY2s8XG4gICAgKGNvbW1hbmQ6IENvbW1hbmQpID0+IE1vdXNlRXZlbnRIYW5kbGVyPEhUTUxEaXZFbGVtZW50PlxuICA+KFxuICAgIChjb21tYW5kKSA9PiAoZXZlbnQpID0+IHtcbiAgICAgIGV4ZWN1dGUoY29tbWFuZCwge1xuICAgICAgICBvcGVuSW5OZXdUYWI6IGhhc05ld1dpbmRvd01vZGlmaWVyKGV2ZW50KSxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgW2V4ZWN1dGVdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8QnV0bGVyQ29udGFpbmVyXG4gICAgICBvbkNsaWNrPXtoYW5kbGVDb250YWluZXJDbGlja31cbiAgICAgIGRhdGEtdGVzdGlkPVwicXVpY2stYWNjZXNzXCJcbiAgICAgIHRhYkluZGV4PXstMX1cbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17c2VhcmNoQ29udGFpbmVyUmVmfVxuICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3VpS2l0RGVzaWduVG9rZW5zLmNvbG9yU3VyZmFjZX07XG4gICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICR7dWlLaXREZXNpZ25Ub2tlbnMuYm9yZGVyUmFkaXVzNH07XG4gICAgICAgICAgbWluLWhlaWdodDogNDBweDtcblxuICAgICAgICAgIC8qIG9uZSBtb3JlIHRoYW4gYXBwLWJhciAoMjAwMDApIGFuZCBvbmUgbW9yZSB0aGFuIHRoZSBvdmVybGF5ICgyMDAwMSkgKi9cbiAgICAgICAgICB6LWluZGV4OiAyMDAwMjtcbiAgICAgICAgICB3aWR0aDogNDAwcHg7XG4gICAgICAgICAgbWFyZ2luOiA0MHB4IGF1dG87XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICAtbW96LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDEwcHggMzBweCAtOHB4IHJnYmEoMCwgMCwgMCwgMC43NSk7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206ICR7c3RhdGUuaGFzTmV0d29ya0Vycm9yXG4gICAgICAgICAgICA/ICcwJ1xuICAgICAgICAgICAgOiB1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nU307XG4gICAgICAgIGB9XG4gICAgICAgIG9uQ2xpY2s9eyhldmVudCkgPT4ge1xuICAgICAgICAgIC8vIEF2b2lkIGNsb3Npbmcgd2hlbiB0aGUgc2VhcmNoQ29udGFpbmVyIGl0c2VsZiBpcyBjbGlja2VkXG4gICAgICAgICAgLy8gSWYgd2UgZG9uJ3QgZG8gdGhpcywgdGhlbiB0aGUgb3ZlcmxheSB3aWxsIGNsb3NlIHdoZW4gZS5nLlxuICAgICAgICAgIC8vIHRoZSBzZWFyY2ggaW5wdXQgaXMgY2xpY2tlZC5cbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGB9XG4gICAgICAgID5cbiAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIGh0bWxGb3I9XCJxdWljay1hY2Nlc3Mtc2VhcmNoLWlucHV0XCJcbiAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nTX07XG4gICAgICAgICAgICAgIG1hcmdpbi10b3A6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgYH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U2VhcmNoSWNvbiBjb2xvcj1cIm5ldXRyYWw2MFwiIC8+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGlkPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICByZWY9e3NlYXJjaElucHV0UmVmfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2ludGwuZm9ybWF0TWVzc2FnZShtZXNzYWdlcy5pbnB1dFBsYWNlaG9kZXIpfVxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICAgIG91dGxpbmU6IDA7XG4gICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjJweDtcbiAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICAgICAgICAgICAgcGFkZGluZzogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nTX1cbiAgICAgICAgICAgICAgICAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdNfSAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdTfVxuICAgICAgICAgICAgICAgICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAmOjpwbGFjZWhvbGRlciB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICR7dWlLaXREZXNpZ25Ub2tlbnMuY29sb3JOZXV0cmFsNjB9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBgfVxuICAgICAgICAgICAgdmFsdWU9e3N0YXRlLnNlYXJjaFRleHR9XG4gICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgb25LZXlEb3duPXtoYW5kbGVLZXlEb3dufVxuICAgICAgICAgICAgb25LZXlVcD17aGFuZGxlS2V5VXB9XG4gICAgICAgICAgICBhdXRvRm9jdXM9e3RydWV9XG4gICAgICAgICAgICBhdXRvQ29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJxdWljay1hY2Nlc3Mtc2VhcmNoLWlucHV0XCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIHtzdGF0ZS5pc0xvYWRpbmcgJiYgKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nU307XG4gICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdTfTtcbiAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPExvYWRpbmdTcGlubmVyIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXRlLmhhc05ldHdvcmtFcnJvcilcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHt1aUtpdERlc2lnblRva2Vucy5jb2xvckVycm9yfTtcbiAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgICAgICAgICAgICBjb2xvcjogJHt1aUtpdERlc2lnblRva2Vucy5jb2xvclN1cmZhY2V9O1xuICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAke3VpS2l0RGVzaWduVG9rZW5zLmZvbnRTaXplMjB9O1xuICAgICAgICAgICAgICAgICAgcGFkZGluZzogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nWHN9O1xuICAgICAgICAgICAgICAgIGB9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSB7Li4ubWVzc2FnZXMub2ZmbGluZX0gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKHN0YXRlLnJlc3VsdHMubGVuZ3RoID09PSAwICYmIHN0YXRlLnNlYXJjaFRleHQudHJpbSgpLmxlbmd0aCA+IDApXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgICAgICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7dWlLaXREZXNpZ25Ub2tlbnMuY29sb3JOZXV0cmFsfTtcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAke3VpS2l0RGVzaWduVG9rZW5zLmNvbG9yU29saWR9O1xuICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHt1aUtpdERlc2lnblRva2Vucy5mb250U2l6ZTIwfTtcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1hzfTtcbiAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2Ugey4uLm1lc3NhZ2VzLm5vUmVzdWx0c30gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuIHN0YXRlLnJlc3VsdHMubWFwKChjb21tYW5kLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPEJ1dGxlckNvbW1hbmRcbiAgICAgICAgICAgICAga2V5PXtjb21tYW5kLmlkfVxuICAgICAgICAgICAgICBjb21tYW5kPXtjb21tYW5kfVxuICAgICAgICAgICAgICBpc1NlbGVjdGVkPXtzdGF0ZS5zZWxlY3RlZFJlc3VsdCA9PT0gaW5kZXh9XG4gICAgICAgICAgICAgIG9uTW91c2VFbnRlcj17Y3JlYXRlQ29tbWFuZE1vdXNlRW50ZXJIYW5kbGVyKGluZGV4KX1cbiAgICAgICAgICAgICAgb25DbGljaz17Y3JlYXRlQ29tbWFuZENsaWNrSGFuZGxlcihjb21tYW5kKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSk7XG4gICAgICAgIH0pKCl9XG4gICAgICA8L2Rpdj5cbiAgICA8L0J1dGxlckNvbnRhaW5lcj5cbiAgKTtcbn07XG5CdXRsZXIuZGlzcGxheU5hbWUgPSAnQnV0bGVyJztcblxuY29uc3QgQnV0bGVyV2l0aEFuaW1hdGlvbiA9IChwcm9wczogT21pdDxQcm9wcywgJ2NsYXNzTmFtZVNoYWtlQW5pbWF0aW9uJz4pID0+IChcbiAgPENsYXNzTmFtZXM+XG4gICAgeyh7IGNzcyB9KSA9PiAoXG4gICAgICA8QnV0bGVyXG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgY2xhc3NOYW1lU2hha2VBbmltYXRpb249e2Nzc2BcbiAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IDAuNDVzO1xuICAgICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGJvdGg7XG4gICAgICAgICAgYW5pbWF0aW9uLW5hbWU6ICR7c2hha2VBbmltYXRpb259O1xuICAgICAgICBgfVxuICAgICAgLz5cbiAgICApfVxuICA8L0NsYXNzTmFtZXM+XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBCdXRsZXJXaXRoQW5pbWF0aW9uO1xuIl19 */",
550
- toString: _EMOTION_STRINGIFIED_CSS_ERROR__
551
- };
552
- const Butler = props => {
553
- const intl = reactIntl.useIntl();
554
- const _useReducer = react$1.useReducer(reducer, initialState),
555
- _useReducer2 = _slicedToArray(_useReducer, 2),
556
- state = _useReducer2[0],
557
- dispatch = _useReducer2[1];
558
- const shouldSelectFieldText = react$1.useRef(false);
559
- const isNewWindowCombo = react$1.useRef(false);
560
- const skipNextSelection = react$1.useRef(false);
561
- const searchContainerRef = react$1.useRef(null);
562
- const searchInputRef = react$1.useRef(null);
563
- const setHasNetworkError = react$1.useCallback(() => {
564
- dispatch({
565
- type: 'networkError',
566
- payload: true
567
- });
568
- }, []);
569
- const unsetHasNetworkError = react$1.useCallback(() => {
570
- dispatch({
571
- type: 'networkError',
572
- payload: false
573
- });
574
- }, []);
575
- const setIsLoading = react$1.useCallback(() => {
576
- dispatch({
577
- type: 'loading',
578
- payload: true
579
- });
580
- }, []);
581
- const unsetIsLoading = react$1.useCallback(() => {
582
- dispatch({
583
- type: 'loading',
584
- payload: false
585
- });
586
- }, []);
587
-
588
- // Destructure functions from props to reference them in the hook dependency list
589
- const searchFromParent = props.search,
590
- onCloseFromParent = props.onClose,
591
- executeCommandFromParent = props.executeCommand,
592
- onHistoryEntriesChangeFromParent = props.onHistoryEntriesChange,
593
- getNextCommandsFromParent = props.getNextCommands;
594
- const shake = react$1.useCallback(() => {
595
- if (searchContainerRef.current) {
596
- searchContainerRef.current.classList.remove(props.classNameShakeAnimation);
597
- // -> triggering reflow
598
- // eslint-disable-next-line no-void
599
- void searchContainerRef.current.offsetWidth;
600
- searchContainerRef.current.classList.add(props.classNameShakeAnimation);
601
- }
602
- }, [props.classNameShakeAnimation]);
603
- const execute = react$1.useCallback((command, meta) => {
604
- var _context6;
605
- // Only main entries get added to history, so when a subcommand is executed,
606
- // we add the main command of it to the history (the top-level command).
607
- //
608
- // The key to identify history entries by is always the searchText
609
- // There will never be two history entries with the same searchText
610
- const entry = state.stack.length === 0 ?
611
- // The stack is empty, so we are executing a top-level command
612
- {
613
- searchText: state.searchText,
614
- results: state.results
615
- } :
616
- // We are executing a subcommand, so we get the top-level command for it,
617
- // which is at the bottom of the stack.
618
- {
619
- searchText: state.stack[0].searchText,
620
- results: state.stack[0].results
621
- };
622
-
623
- // Add the entry to the history, while excluding any earlier history entry
624
- // with the same search text. This effectively "moves" that entry to the
625
- // top of the history (with the most recent results), or appends a new entry
626
- // when it didn't exist before.
627
- onHistoryEntriesChangeFromParent([..._filterInstanceProperty__default["default"](_context6 = props.historyEntries).call(_context6, command => command.searchText !== entry.searchText), entry]);
628
- dispatch({
629
- type: 'resetSearchText'
630
- });
631
- onCloseFromParent();
632
- executeCommandFromParent(command, meta);
633
- }, [executeCommandFromParent, onCloseFromParent, onHistoryEntriesChangeFromParent, props.historyEntries, state.results, state.searchText, state.stack]);
634
- const handleKeyDown = react$1.useCallback(event => {
635
- // Preventing cursor jumps can only happen in onKeyDown, but not in onKeyUp
636
- event.persist();
637
-
638
- // We want to know when the user presses cmd+enter (cmd being a meta key).
639
- // We are only told about this in keyDown, but not in keyUp, so we need
640
- // to handle it here
641
- if (event.key === 'Enter' && hasNewWindowModifier(event)) {
642
- isNewWindowCombo.current = true;
643
- return;
644
- }
645
-
646
- // Avoid selecting the whole page when user selectes everything with
647
- // a keyboard shortcut. There is probably a better way to do this though.
648
- // This prevents the whole page from being selected in case the user
649
- // 1) opens the search box
650
- // 2) types into it
651
- // 3) selects all text using cmd+a
652
- // 4) closes the search box with esc
653
- // Without this handling, the whole page would now be selected
654
- if (isSelectAllCombo(event)) {
655
- // This stops the browser from selecting anything
656
- event.preventDefault();
657
- if (searchInputRef.current) {
658
- // This selects the text in the search input
659
- searchInputRef.current.setSelectionRange(0, state.searchText.length);
660
- }
661
- return;
662
- }
663
-
664
- // avoid interfering with other key combinations using modifier keys
665
- if (event.ctrlKey || event.altKey || event.shiftKey || event.metaKey) return;
666
- if (isCloseCombo(event)) return;
667
-
668
- // skip next mouseEnter to avoid setting selectedResult when cursor just
669
- // happens to be where the results will pop up
670
- skipNextSelection.current = true;
671
- if (event.key === 'ArrowDown') {
672
- // prevent cursor from jumping to end of text input
673
- event.preventDefault();
674
- dispatch({
675
- type: 'incrementSelectedResult'
676
- });
677
- return;
678
- }
679
- if (event.key === 'ArrowUp') {
680
- // browse through history
681
- if (state.searchText.length === 0 || state.selectedResult < 1 && state.enableHistory) {
682
- var _context7;
683
- shouldSelectFieldText.current = true;
684
- const selectedIndex = state.searchText.length === 0 ?
685
- // When going back the first step
686
- -1 :
687
- // When going back more than one step
688
- _findIndexInstanceProperty__default["default"](_context7 = props.historyEntries).call(_context7, command => command.searchText === state.searchText);
689
- // Pick the previous command from the history
690
- const prevCommand = selectedIndex === -1 ?
691
- // previous command on top of the history when going back on
692
- // first step
693
- last__default["default"](props.historyEntries) :
694
- // previous command is deeper down
695
- // When the history does not exist (negative index), then
696
- // this implicitly returns undefined
697
- props.historyEntries[selectedIndex - 1];
698
- // Skip when no previous entry exists in the history
699
- if (!prevCommand) return;
700
- dispatch({
701
- type: 'pickCommandFromHistory',
702
- payload: {
703
- searchText: prevCommand.searchText,
704
- results: prevCommand.results
705
- }
706
- });
707
- return;
708
- }
709
- // prevent cursor from jumping to beginning of text input
710
- event.preventDefault();
711
- dispatch({
712
- type: 'decrementSelectedResult'
713
- });
714
- return;
715
- }
716
- if (state.selectedResult > -1) {
717
- if (event.key === 'ArrowRight') {
718
- const command = state.results[state.selectedResult];
719
- const searchText = state.searchText;
720
- const isCursorAtEnd = searchInputRef.current && state.searchText.length === searchInputRef.current.selectionStart;
721
- const isEverythingSelected = searchInputRef.current && searchInputRef.current.selectionStart === 0 && state.searchText.length === searchInputRef.current.selectionEnd;
722
-
723
- // only allow diving in when cursor is at end of input or when
724
- // the complete text is selected (when browsing through history)
725
- if (!isCursorAtEnd && !isEverythingSelected) return;
726
- unsetHasNetworkError();
727
-
728
- // NOTE: since we need to fetch the "next command", which is an async operation,
729
- // we use a IIFE to process that and eventually update the state.
730
- (async () => {
731
- if (command) {
732
- const nextCommands = await getNextCommandsFromParent(command);
733
- // avoid moving cursor when there are sub-options
734
- if (nextCommands.length > 0) {
735
- // Ensure the search text has not changed while we were loading
736
- // the next results, otherwise we'd interrupt the user.
737
- // Throw away the results in case the search text has changed.
738
- if (state.searchText === searchText) {
739
- dispatch({
740
- type: 'setNextCommands',
741
- payload: {
742
- results: nextCommands
743
- }
744
- });
745
- }
746
- return;
747
- }
748
- }
749
- shake();
750
- })();
751
- return;
752
- }
753
- if (event.key === 'ArrowLeft') {
754
- // go left in stack
755
- const prevCommand = last__default["default"](state.stack);
756
-
757
- // do nothing when we can't go left anymore
758
- if (!prevCommand) return;
759
-
760
- // prevent cursor from jumping a char to the left in text input
761
- event.preventDefault();
762
- dispatch({
763
- type: 'setPrevCommands',
764
- payload: {
765
- searchText: prevCommand.searchText,
766
- results: prevCommand.results
767
- }
768
- });
769
- return;
770
- }
771
- }
772
- }, [getNextCommandsFromParent, props.historyEntries, shake, state, unsetHasNetworkError]);
773
- const handleKeyUp = react$1.useCallback(event => {
774
- // setting the selection can only happen in onKeyUp
775
- if (shouldSelectFieldText.current) {
776
- const input = event.target;
777
- input.focus();
778
- input.select();
779
- shouldSelectFieldText.current = false;
780
- }
781
- if (event.key !== 'Enter' && !isNewWindowCombo.current) return true;
782
-
783
- // User just triggered the search
784
- if (state.selectedResult === -1) return true;
785
-
786
- // User had something selected and wants to go there
787
- execute(state.results[state.selectedResult], {
788
- openInNewTab: isNewWindowCombo.current
789
- });
790
- isNewWindowCombo.current = false;
791
- return true;
792
- }, [execute, state.results, state.selectedResult]);
793
- const handleChange = react$1.useCallback(event => {
794
- const searchText = event.target.value;
795
- if (_trimInstanceProperty__default["default"](searchText).call(searchText).length === 0) {
796
- dispatch({
797
- type: 'reset'
798
- });
799
- return;
800
- }
801
- dispatch({
802
- type: 'searchText',
803
- payload: searchText
804
- });
805
-
806
- // A search via network is only triggered when there
807
- // are more than three characters. So no false loading
808
- // indication is given.
809
- if (_trimInstanceProperty__default["default"](searchText).call(searchText).length > 3) {
810
- setIsLoading();
811
- }
812
- searchFromParent(searchText).then(asyncResults => {
813
- var _context8, _context9;
814
- unsetHasNetworkError();
815
- unsetIsLoading();
816
- const fuse = new Fuse__default["default"](asyncResults, {
817
- keys: [{
818
- name: 'text',
819
- weight: 0.6
820
- }, {
821
- name: 'keywords',
822
- weight: 0.4
823
- }],
824
- minMatchCharLength: 2,
825
- includeScore: true
826
- });
827
- const searchResults = _sliceInstanceProperty__default["default"](_context8 = _filterInstanceProperty__default["default"](_context9 = fuse.search(searchText)
828
- // Filter out results with a matching score over 0.75
829
- ).call(_context9, result => result.score ? result.score < 0.75 : false)
830
- // Keep a maximal of 9 results
831
- ).call(_context8, 0, 9);
832
- dispatch({
833
- type: 'setSearchTextResults',
834
- payload: _mapInstanceProperty__default["default"](searchResults).call(searchResults, result => result.item)
835
- });
836
- }, error => {
837
- // eslint-disable-next-line no-console
838
- if (process.env.NODE_ENV !== 'production') console.error(error);
839
- unsetIsLoading();
840
- setHasNetworkError();
841
- });
842
- }, [searchFromParent, setHasNetworkError, setIsLoading, unsetHasNetworkError, unsetIsLoading]);
843
- const handleContainerClick = react$1.useCallback(() => {
844
- dispatch({
845
- type: 'resetResultsWhenClosing'
846
- });
847
- onCloseFromParent();
848
- }, [onCloseFromParent]);
849
- const createCommandMouseEnterHandler = react$1.useCallback(index => () => {
850
- // In case the cursor happened to be in a location where a
851
- // result would appear, it would trigger onMouseEnter and the
852
- // result would be selected immediately. This is not something
853
- // a user would expect, hence we prevent it from happening.
854
- // The user has to move the cursor to an option explicitly for
855
- // it to become active. However, the user can always click and
856
- // that action will be triggered.
857
- if (skipNextSelection.current) {
858
- skipNextSelection.current = false;
859
- return;
860
- }
861
-
862
- // sets the selected result, mainly for the hover effect
863
- dispatch({
864
- type: 'selectedResult',
865
- payload: index
866
- });
867
- }, []);
868
- const createCommandClickHandler = react$1.useCallback(command => event => {
869
- execute(command, {
870
- openInNewTab: hasNewWindowModifier(event)
871
- });
872
- }, [execute]);
873
- return jsxRuntime.jsx(dist_commercetoolsFrontendApplicationShell.ButlerContainer, {
874
- onClick: handleContainerClick,
875
- "data-testid": "quick-access",
876
- tabIndex: -1,
877
- children: jsxRuntime.jsxs("div", {
878
- ref: searchContainerRef,
879
- css: /*#__PURE__*/react.css("background-color:", designSystem.designTokens.colorSurface, ";border:0;border-radius:", designSystem.designTokens.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.designTokens.spacingS, ";" + (process.env.NODE_ENV === "production" ? "" : ";label:Butler;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBbWxCZ0IiLCJmaWxlIjoiYnV0bGVyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEtleWJvYXJkRXZlbnRIYW5kbGVyLFxuICBDaGFuZ2VFdmVudEhhbmRsZXIsXG4gIEtleWJvYXJkRXZlbnQsXG4gIE1vdXNlRXZlbnRIYW5kbGVyLFxuICBNb3VzZUV2ZW50LFxuICB1c2VSZWR1Y2VyLFxuICB1c2VSZWYsXG4gIHVzZUNhbGxiYWNrLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBGdXNlIGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IGxhc3QgZnJvbSAnbG9kYXNoL2xhc3QnO1xuaW1wb3J0IHsgRm9ybWF0dGVkTWVzc2FnZSwgdXNlSW50bCB9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IHsgZGVzaWduVG9rZW5zIGFzIHVpS2l0RGVzaWduVG9rZW5zIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyBTZWFyY2hJY29uIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvaWNvbnMnO1xuaW1wb3J0IExvYWRpbmdTcGlubmVyIGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2xvYWRpbmctc3Bpbm5lcic7XG5pbXBvcnQgQnV0bGVyQ29tbWFuZCBmcm9tICcuLi9idXRsZXItY29tbWFuZCc7XG5pbXBvcnQgQnV0bGVyQ29udGFpbmVyIGZyb20gJy4uL2J1dGxlci1jb250YWluZXInO1xuaW1wb3J0IG1lc3NhZ2VzIGZyb20gJy4uL21lc3NhZ2VzJztcbmltcG9ydCB0eXBlIHtcbiAgQ29tbWFuZCxcbiAgU2VhcmNoVGV4dCxcbiAgU2VsZWN0ZWRSZXN1bHQsXG4gIFN0YWNrLFxuICBIaXN0b3J5RW50cnksXG59IGZyb20gJy4uL3R5cGVzJztcblxuY29uc3QgaXNTZWxlY3RBbGxDb21ibyA9IChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cbiAgZXZlbnQua2V5ID09PSAnYScgJiZcbiAgZXZlbnQubWV0YUtleSAmJlxuICAhZXZlbnQuY3RybEtleSAmJlxuICAhZXZlbnQuYWx0S2V5ICYmXG4gICFldmVudC5zaGlmdEtleTtcblxuY29uc3QgaXNDbG9zZUNvbWJvID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PlxuICBldmVudC5rZXkgPT09ICdFc2NhcGUnICYmXG4gICFldmVudC5tZXRhS2V5ICYmXG4gICFldmVudC5jdHJsS2V5ICYmXG4gICFldmVudC5hbHRLZXkgJiZcbiAgIWV2ZW50LnNoaWZ0S2V5O1xuXG5jb25zdCBnZXRQbGF0Zm9ybSA9ICgpID0+IHtcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdXaW4nKSkgcmV0dXJuICd3aW5kb3dzJztcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdNYWMnKSkgcmV0dXJuICdtYWNvcyc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnWDExJykpIHJldHVybiAndW5peCc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnTGludXgnKSkgcmV0dXJuICdsaW51eCc7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBoYXNOZXdXaW5kb3dNb2RpZmllciA9IChcbiAgZXZlbnQ6IEtleWJvYXJkRXZlbnQ8SFRNTEVsZW1lbnQ+IHwgTW91c2VFdmVudDxIVE1MRWxlbWVudD5cbikgPT4ge1xuICBjb25zdCBwbGF0Zm9ybSA9IGdldFBsYXRmb3JtKCk7XG4gIHN3aXRjaCAocGxhdGZvcm0pIHtcbiAgICBjYXNlICdtYWNvcyc6XG4gICAgICByZXR1cm4gZXZlbnQubWV0YUtleTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGV2ZW50LmN0cmxLZXk7XG4gIH1cbn07XG5cbmNvbnN0IHNoYWtlQW5pbWF0aW9uID0ga2V5ZnJhbWVzYFxuICBmcm9tLFxuICB0byB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcbiAgfVxuXG4gIDE0JSxcbiAgNDIlLFxuICA3MCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTNweCwgMCwgMCk7XG4gIH1cblxuICAyOCUsXG4gIDU2JSxcbiAgODQlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDNweCwgMCwgMCk7XG4gIH1cbmA7XG5cbnR5cGUgU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogYm9vbGVhbjtcbiAgaXNMb2FkaW5nOiBib29sZWFuO1xuICBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0O1xuICBzZWxlY3RlZFJlc3VsdDogU2VsZWN0ZWRSZXN1bHQ7XG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IGJvb2xlYW47XG4gIHJlc3VsdHM6IENvbW1hbmRbXTtcbiAgc3RhY2s6IFN0YWNrW107XG59O1xudHlwZSBBY3Rpb24gPVxuICB8IHsgdHlwZTogJ25ldHdvcmtFcnJvcic7IHBheWxvYWQ6IGJvb2xlYW4gfVxuICB8IHsgdHlwZTogJ2xvYWRpbmcnOyBwYXlsb2FkOiBib29sZWFuIH1cbiAgfCB7IHR5cGU6ICdzZWxlY3RlZFJlc3VsdCc7IHBheWxvYWQ6IG51bWJlciB9XG4gIHwgeyB0eXBlOiAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH1cbiAgfCB7IHR5cGU6ICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfVxuICB8IHtcbiAgICAgIHR5cGU6ICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JztcbiAgICAgIHBheWxvYWQ6IHsgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDsgcmVzdWx0czogQ29tbWFuZFtdIH07XG4gICAgfVxuICB8IHsgdHlwZTogJ3NldE5leHRDb21tYW5kcyc7IHBheWxvYWQ6IHsgcmVzdWx0czogQ29tbWFuZFtdIH0gfVxuICB8IHtcbiAgICAgIHR5cGU6ICdzZXRQcmV2Q29tbWFuZHMnO1xuICAgICAgcGF5bG9hZDogeyBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0OyByZXN1bHRzOiBDb21tYW5kW10gfTtcbiAgICB9XG4gIHwgeyB0eXBlOiAnc2VhcmNoVGV4dCc7IHBheWxvYWQ6IHN0cmluZyB9XG4gIHwgeyB0eXBlOiAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOyBwYXlsb2FkOiBDb21tYW5kW10gfVxuICB8IHsgdHlwZTogJ3Jlc2V0U2VhcmNoVGV4dCcgfVxuICB8IHsgdHlwZTogJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJyB9XG4gIHwgeyB0eXBlOiAncmVzZXQnIH07XG5jb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogZmFsc2UsXG4gIGlzTG9hZGluZzogZmFsc2UsXG4gIHNlYXJjaFRleHQ6ICcnLFxuICBzZWxlY3RlZFJlc3VsdDogLTEsXG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IHRydWUsXG4gIHJlc3VsdHM6IFtdLFxuICBzdGFjazogW10sXG59O1xuY29uc3QgcmVkdWNlciA9IChzdGF0ZTogU3RhdGUgPSBpbml0aWFsU3RhdGUsIGFjdGlvbjogQWN0aW9uKTogU3RhdGUgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnbmV0d29ya0Vycm9yJzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBoYXNOZXR3b3JrRXJyb3I6IGFjdGlvbi5wYXlsb2FkIH07XG4gICAgY2FzZSAnbG9hZGluZyc6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgaXNMb2FkaW5nOiBhY3Rpb24ucGF5bG9hZCB9O1xuICAgIGNhc2UgJ3NlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQgfTtcbiAgICBjYXNlICdpbmNyZW1lbnRTZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6XG4gICAgICAgICAgc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IHN0YXRlLnJlc3VsdHMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0ICsgMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ2RlY3JlbWVudFNlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDpcbiAgICAgICAgICBzdGF0ZS5zZWxlY3RlZFJlc3VsdCA8IDFcbiAgICAgICAgICAgID8gc3RhdGUucmVzdWx0cy5sZW5ndGggLSAxXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0IC0gMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ3BpY2tDb21tYW5kRnJvbUhpc3RvcnknOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OiAwLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZC5zZWFyY2hUZXh0LFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZC5yZXN1bHRzLFxuICAgICAgICBzdGFjazogW10sXG4gICAgICAgIC8vIFRoZSBoaXN0b3J5IGRvZXMgbm90IGdldCBjaGFuZ2VkIGhlcmUsIGl0IHdpbGwgYmUgY2hhbmdlZCBhbG9uZ1xuICAgICAgICAvLyB3aXRoIHRoZSByZWd1bGFyIGZsb3cuXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldE5leHRDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc3RhY2s6IFtcbiAgICAgICAgICAuLi5zdGF0ZS5zdGFjayxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZWFyY2hUZXh0OiBzdGF0ZS5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgcmVzdWx0czogc3RhdGUucmVzdWx0cyxcbiAgICAgICAgICAgIHNlbGVjdGVkUmVzdWx0OiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogMCxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLnJlc3VsdHMsXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldFByZXZDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQuc2VhcmNoVGV4dCxcbiAgICAgICAgcmVzdWx0czogYWN0aW9uLnBheWxvYWQucmVzdWx0cyxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IDAsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgICAvLyBvbWl0IGxhc3QgaXRlbVxuICAgICAgICBzdGFjazogc3RhdGUuc3RhY2suc2xpY2UoMCwgLTEpLFxuICAgICAgfTtcbiAgICBjYXNlICdzZWFyY2hUZXh0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgLy8gY2xlYXIgbmV0d29yayBlcnJvciB3aGVuIHNlYXJjaCB0ZXh0IGlzIGNsZWFyZWQsIHNvIHRoYXQgdXNlcnNcbiAgICAgICAgLy8gYXJlIHRlbXB0ZWQgdG8gcmV0cnlcbiAgICAgICAgaGFzTmV0d29ya0Vycm9yOiBhY3Rpb24ucGF5bG9hZC5sZW5ndGggPiAwICYmIHN0YXRlLmhhc05ldHdvcmtFcnJvcixcbiAgICAgIH07XG4gICAgY2FzZSAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQubGVuZ3RoID4gMCA/IDAgOiAtMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogdHJ1ZSxcbiAgICAgICAgc3RhY2s6IFtdLFxuICAgICAgfTtcbiAgICBjYXNlICdyZXNldFNlYXJjaFRleHQnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlYXJjaFRleHQ6ICcnLCByZXN1bHRzOiBbXSwgc2VsZWN0ZWRSZXN1bHQ6IC0xIH07XG4gICAgY2FzZSAncmVzZXRSZXN1bHRzV2hlbkNsb3NpbmcnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlbGVjdGVkUmVzdWx0OiAtMSwgZW5hYmxlSGlzdG9yeTogdHJ1ZSB9O1xuICAgIGNhc2UgJ3Jlc2V0JzpcbiAgICAgIHJldHVybiBpbml0aWFsU3RhdGU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufTtcblxudHlwZSBQcm9wcyA9IHtcbiAgaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdO1xuICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlOiAoaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdKSA9PiB2b2lkO1xuICBzZWFyY2g6IChzZWFyY2hUZXh0OiBTZWFyY2hUZXh0KSA9PiBQcm9taXNlPENvbW1hbmRbXT47XG4gIGdldE5leHRDb21tYW5kczogKGNvbW1hbmQ6IENvbW1hbmQpID0+IFByb21pc2U8Q29tbWFuZFtdPjtcbiAgZXhlY3V0ZUNvbW1hbmQ6IChjb21tYW5kOiBDb21tYW5kLCBtZXRhOiB7IG9wZW5Jbk5ld1RhYjogYm9vbGVhbiB9KSA9PiB2b2lkO1xuICBvbkNsb3NlOiAoKSA9PiB2b2lkO1xuICBjbGFzc05hbWVTaGFrZUFuaW1hdGlvbjogc3RyaW5nO1xufTtcbmNvbnN0IEJ1dGxlciA9IChwcm9wczogUHJvcHMpID0+IHtcbiAgY29uc3QgaW50bCA9IHVzZUludGwoKTtcbiAgY29uc3QgW3N0YXRlLCBkaXNwYXRjaF0gPSB1c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxTdGF0ZSk7XG5cbiAgY29uc3Qgc2hvdWxkU2VsZWN0RmllbGRUZXh0ID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3QgaXNOZXdXaW5kb3dDb21ibyA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IHNraXBOZXh0U2VsZWN0aW9uID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3Qgc2VhcmNoQ29udGFpbmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3Qgc2VhcmNoSW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbCk7XG5cbiAgY29uc3Qgc2V0SGFzTmV0d29ya0Vycm9yID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ25ldHdvcmtFcnJvcicsIHBheWxvYWQ6IHRydWUgfSk7XG4gIH0sIFtdKTtcbiAgY29uc3QgdW5zZXRIYXNOZXR3b3JrRXJyb3IgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbmV0d29ya0Vycm9yJywgcGF5bG9hZDogZmFsc2UgfSk7XG4gIH0sIFtdKTtcbiAgY29uc3Qgc2V0SXNMb2FkaW5nID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ2xvYWRpbmcnLCBwYXlsb2FkOiB0cnVlIH0pO1xuICB9LCBbXSk7XG4gIGNvbnN0IHVuc2V0SXNMb2FkaW5nID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ2xvYWRpbmcnLCBwYXlsb2FkOiBmYWxzZSB9KTtcbiAgfSwgW10pO1xuXG4gIC8vIERlc3RydWN0dXJlIGZ1bmN0aW9ucyBmcm9tIHByb3BzIHRvIHJlZmVyZW5jZSB0aGVtIGluIHRoZSBob29rIGRlcGVuZGVuY3kgbGlzdFxuICBjb25zdCB7XG4gICAgc2VhcmNoOiBzZWFyY2hGcm9tUGFyZW50LFxuICAgIG9uQ2xvc2U6IG9uQ2xvc2VGcm9tUGFyZW50LFxuICAgIGV4ZWN1dGVDb21tYW5kOiBleGVjdXRlQ29tbWFuZEZyb21QYXJlbnQsXG4gICAgb25IaXN0b3J5RW50cmllc0NoYW5nZTogb25IaXN0b3J5RW50cmllc0NoYW5nZUZyb21QYXJlbnQsXG4gICAgZ2V0TmV4dENvbW1hbmRzOiBnZXROZXh0Q29tbWFuZHNGcm9tUGFyZW50LFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3Qgc2hha2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50KSB7XG4gICAgICBzZWFyY2hDb250YWluZXJSZWYuY3VycmVudC5jbGFzc0xpc3QucmVtb3ZlKFxuICAgICAgICBwcm9wcy5jbGFzc05hbWVTaGFrZUFuaW1hdGlvblxuICAgICAgKTtcbiAgICAgIC8vIC0+IHRyaWdnZXJpbmcgcmVmbG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdm9pZFxuICAgICAgdm9pZCBzZWFyY2hDb250YWluZXJSZWYuY3VycmVudC5vZmZzZXRXaWR0aDtcbiAgICAgIHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50LmNsYXNzTGlzdC5hZGQocHJvcHMuY2xhc3NOYW1lU2hha2VBbmltYXRpb24pO1xuICAgIH1cbiAgfSwgW3Byb3BzLmNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uXSk7XG5cbiAgY29uc3QgZXhlY3V0ZSA9IHVzZUNhbGxiYWNrKFxuICAgIChjb21tYW5kOiBDb21tYW5kLCBtZXRhOiB7IG9wZW5Jbk5ld1RhYjogYm9vbGVhbiB9KSA9PiB7XG4gICAgICAvLyBPbmx5IG1haW4gZW50cmllcyBnZXQgYWRkZWQgdG8gaGlzdG9yeSwgc28gd2hlbiBhIHN1YmNvbW1hbmQgaXMgZXhlY3V0ZWQsXG4gICAgICAvLyB3ZSBhZGQgdGhlIG1haW4gY29tbWFuZCBvZiBpdCB0byB0aGUgaGlzdG9yeSAodGhlIHRvcC1sZXZlbCBjb21tYW5kKS5cbiAgICAgIC8vXG4gICAgICAvLyBUaGUga2V5IHRvIGlkZW50aWZ5IGhpc3RvcnkgZW50cmllcyBieSBpcyBhbHdheXMgdGhlIHNlYXJjaFRleHRcbiAgICAgIC8vIFRoZXJlIHdpbGwgbmV2ZXIgYmUgdHdvIGhpc3RvcnkgZW50cmllcyB3aXRoIHRoZSBzYW1lIHNlYXJjaFRleHRcbiAgICAgIGNvbnN0IGVudHJ5ID1cbiAgICAgICAgc3RhdGUuc3RhY2subGVuZ3RoID09PSAwXG4gICAgICAgICAgPyAvLyBUaGUgc3RhY2sgaXMgZW1wdHksIHNvIHdlIGFyZSBleGVjdXRpbmcgYSB0b3AtbGV2ZWwgY29tbWFuZFxuICAgICAgICAgICAgeyBzZWFyY2hUZXh0OiBzdGF0ZS5zZWFyY2hUZXh0LCByZXN1bHRzOiBzdGF0ZS5yZXN1bHRzIH1cbiAgICAgICAgICA6IC8vIFdlIGFyZSBleGVjdXRpbmcgYSBzdWJjb21tYW5kLCBzbyB3ZSBnZXQgdGhlIHRvcC1sZXZlbCBjb21tYW5kIGZvciBpdCxcbiAgICAgICAgICAgIC8vIHdoaWNoIGlzIGF0IHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzZWFyY2hUZXh0OiBzdGF0ZS5zdGFja1swXS5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgICByZXN1bHRzOiBzdGF0ZS5zdGFja1swXS5yZXN1bHRzLFxuICAgICAgICAgICAgfTtcblxuICAgICAgLy8gQWRkIHRoZSBlbnRyeSB0byB0aGUgaGlzdG9yeSwgd2hpbGUgZXhjbHVkaW5nIGFueSBlYXJsaWVyIGhpc3RvcnkgZW50cnlcbiAgICAgIC8vIHdpdGggdGhlIHNhbWUgc2VhcmNoIHRleHQuIFRoaXMgZWZmZWN0aXZlbHkgXCJtb3Zlc1wiIHRoYXQgZW50cnkgdG8gdGhlXG4gICAgICAvLyB0b3Agb2YgdGhlIGhpc3RvcnkgKHdpdGggdGhlIG1vc3QgcmVjZW50IHJlc3VsdHMpLCBvciBhcHBlbmRzIGEgbmV3IGVudHJ5XG4gICAgICAvLyB3aGVuIGl0IGRpZG4ndCBleGlzdCBiZWZvcmUuXG4gICAgICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlRnJvbVBhcmVudChbXG4gICAgICAgIC4uLnByb3BzLmhpc3RvcnlFbnRyaWVzLmZpbHRlcihcbiAgICAgICAgICAoY29tbWFuZCkgPT4gY29tbWFuZC5zZWFyY2hUZXh0ICE9PSBlbnRyeS5zZWFyY2hUZXh0XG4gICAgICAgICksXG4gICAgICAgIGVudHJ5LFxuICAgICAgXSk7XG5cbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3Jlc2V0U2VhcmNoVGV4dCcgfSk7XG5cbiAgICAgIG9uQ2xvc2VGcm9tUGFyZW50KCk7XG5cbiAgICAgIGV4ZWN1dGVDb21tYW5kRnJvbVBhcmVudChjb21tYW5kLCBtZXRhKTtcbiAgICB9LFxuICAgIFtcbiAgICAgIGV4ZWN1dGVDb21tYW5kRnJvbVBhcmVudCxcbiAgICAgIG9uQ2xvc2VGcm9tUGFyZW50LFxuICAgICAgb25IaXN0b3J5RW50cmllc0NoYW5nZUZyb21QYXJlbnQsXG4gICAgICBwcm9wcy5oaXN0b3J5RW50cmllcyxcbiAgICAgIHN0YXRlLnJlc3VsdHMsXG4gICAgICBzdGF0ZS5zZWFyY2hUZXh0LFxuICAgICAgc3RhdGUuc3RhY2ssXG4gICAgXVxuICApO1xuICBjb25zdCBoYW5kbGVLZXlEb3duID0gdXNlQ2FsbGJhY2s8S2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD4+KFxuICAgIChldmVudCkgPT4ge1xuICAgICAgLy8gUHJldmVudGluZyBjdXJzb3IganVtcHMgY2FuIG9ubHkgaGFwcGVuIGluIG9uS2V5RG93biwgYnV0IG5vdCBpbiBvbktleVVwXG4gICAgICBldmVudC5wZXJzaXN0KCk7XG5cbiAgICAgIC8vIFdlIHdhbnQgdG8ga25vdyB3aGVuIHRoZSB1c2VyIHByZXNzZXMgY21kK2VudGVyIChjbWQgYmVpbmcgYSBtZXRhIGtleSkuXG4gICAgICAvLyBXZSBhcmUgb25seSB0b2xkIGFib3V0IHRoaXMgaW4ga2V5RG93biwgYnV0IG5vdCBpbiBrZXlVcCwgc28gd2UgbmVlZFxuICAgICAgLy8gdG8gaGFuZGxlIGl0IGhlcmVcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicgJiYgaGFzTmV3V2luZG93TW9kaWZpZXIoZXZlbnQpKSB7XG4gICAgICAgIGlzTmV3V2luZG93Q29tYm8uY3VycmVudCA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gQXZvaWQgc2VsZWN0aW5nIHRoZSB3aG9sZSBwYWdlIHdoZW4gdXNlciBzZWxlY3RlcyBldmVyeXRoaW5nIHdpdGhcbiAgICAgIC8vIGEga2V5Ym9hcmQgc2hvcnRjdXQuIFRoZXJlIGlzIHByb2JhYmx5IGEgYmV0dGVyIHdheSB0byBkbyB0aGlzIHRob3VnaC5cbiAgICAgIC8vIFRoaXMgcHJldmVudHMgdGhlIHdob2xlIHBhZ2UgZnJvbSBiZWluZyBzZWxlY3RlZCBpbiBjYXNlIHRoZSB1c2VyXG4gICAgICAvLyAxKSBvcGVucyB0aGUgc2VhcmNoIGJveFxuICAgICAgLy8gMikgdHlwZXMgaW50byBpdFxuICAgICAgLy8gMykgc2VsZWN0cyBhbGwgdGV4dCB1c2luZyBjbWQrYVxuICAgICAgLy8gNCkgY2xvc2VzIHRoZSBzZWFyY2ggYm94IHdpdGggZXNjXG4gICAgICAvLyBXaXRob3V0IHRoaXMgaGFuZGxpbmcsIHRoZSB3aG9sZSBwYWdlIHdvdWxkIG5vdyBiZSBzZWxlY3RlZFxuICAgICAgaWYgKGlzU2VsZWN0QWxsQ29tYm8oZXZlbnQpKSB7XG4gICAgICAgIC8vIFRoaXMgc3RvcHMgdGhlIGJyb3dzZXIgZnJvbSBzZWxlY3RpbmcgYW55dGhpbmdcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHNlYXJjaElucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAvLyBUaGlzIHNlbGVjdHMgdGhlIHRleHQgaW4gdGhlIHNlYXJjaCBpbnB1dFxuICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2V0U2VsZWN0aW9uUmFuZ2UoMCwgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gYXZvaWQgaW50ZXJmZXJpbmcgd2l0aCBvdGhlciBrZXkgY29tYmluYXRpb25zIHVzaW5nIG1vZGlmaWVyIGtleXNcbiAgICAgIGlmIChldmVudC5jdHJsS2V5IHx8IGV2ZW50LmFsdEtleSB8fCBldmVudC5zaGlmdEtleSB8fCBldmVudC5tZXRhS2V5KVxuICAgICAgICByZXR1cm47XG4gICAgICBpZiAoaXNDbG9zZUNvbWJvKGV2ZW50KSkgcmV0dXJuO1xuXG4gICAgICAvLyBza2lwIG5leHQgbW91c2VFbnRlciB0byBhdm9pZCBzZXR0aW5nIHNlbGVjdGVkUmVzdWx0IHdoZW4gY3Vyc29yIGp1c3RcbiAgICAgIC8vIGhhcHBlbnMgdG8gYmUgd2hlcmUgdGhlIHJlc3VsdHMgd2lsbCBwb3AgdXBcbiAgICAgIHNraXBOZXh0U2VsZWN0aW9uLmN1cnJlbnQgPSB0cnVlO1xuXG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgICAvLyBwcmV2ZW50IGN1cnNvciBmcm9tIGp1bXBpbmcgdG8gZW5kIG9mIHRleHQgaW5wdXRcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgICAgLy8gYnJvd3NlIHRocm91Z2ggaGlzdG9yeVxuICAgICAgICBpZiAoXG4gICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAoc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPCAxICYmIHN0YXRlLmVuYWJsZUhpc3RvcnkpXG4gICAgICAgICkge1xuICAgICAgICAgIHNob3VsZFNlbGVjdEZpZWxkVGV4dC5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID1cbiAgICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgID8gLy8gV2hlbiBnb2luZyBiYWNrIHRoZSBmaXJzdCBzdGVwXG4gICAgICAgICAgICAgICAgLTFcbiAgICAgICAgICAgICAgOiAvLyBXaGVuIGdvaW5nIGJhY2sgbW9yZSB0aGFuIG9uZSBzdGVwXG4gICAgICAgICAgICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgKGNvbW1hbmQpID0+IGNvbW1hbmQuc2VhcmNoVGV4dCA9PT0gc3RhdGUuc2VhcmNoVGV4dFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgLy8gUGljayB0aGUgcHJldmlvdXMgY29tbWFuZCBmcm9tIHRoZSBoaXN0b3J5XG4gICAgICAgICAgY29uc3QgcHJldkNvbW1hbmQgPVxuICAgICAgICAgICAgc2VsZWN0ZWRJbmRleCA9PT0gLTFcbiAgICAgICAgICAgICAgPyAvLyBwcmV2aW91cyBjb21tYW5kIG9uIHRvcCBvZiB0aGUgaGlzdG9yeSB3aGVuIGdvaW5nIGJhY2sgb25cbiAgICAgICAgICAgICAgICAvLyBmaXJzdCBzdGVwXG4gICAgICAgICAgICAgICAgbGFzdChwcm9wcy5oaXN0b3J5RW50cmllcylcbiAgICAgICAgICAgICAgOiAvLyBwcmV2aW91cyBjb21tYW5kIGlzIGRlZXBlciBkb3duXG4gICAgICAgICAgICAgICAgLy8gV2hlbiB0aGUgaGlzdG9yeSBkb2VzIG5vdCBleGlzdCAobmVnYXRpdmUgaW5kZXgpLCB0aGVuXG4gICAgICAgICAgICAgICAgLy8gdGhpcyBpbXBsaWNpdGx5IHJldHVybnMgdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXNbc2VsZWN0ZWRJbmRleCAtIDFdO1xuICAgICAgICAgIC8vIFNraXAgd2hlbiBubyBwcmV2aW91cyBlbnRyeSBleGlzdHMgaW4gdGhlIGhpc3RvcnlcbiAgICAgICAgICBpZiAoIXByZXZDb21tYW5kKSByZXR1cm47XG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ3BpY2tDb21tYW5kRnJvbUhpc3RvcnknLFxuICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgICBzZWFyY2hUZXh0OiBwcmV2Q29tbWFuZC5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgICByZXN1bHRzOiBwcmV2Q29tbWFuZC5yZXN1bHRzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcHJldmVudCBjdXJzb3IgZnJvbSBqdW1waW5nIHRvIGJlZ2lubmluZyBvZiB0ZXh0IGlucHV0XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ2RlY3JlbWVudFNlbGVjdGVkUmVzdWx0JyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXRlLnNlbGVjdGVkUmVzdWx0ID4gLTEpIHtcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnKSB7XG4gICAgICAgICAgY29uc3QgY29tbWFuZCA9IHN0YXRlLnJlc3VsdHNbc3RhdGUuc2VsZWN0ZWRSZXN1bHRdO1xuICAgICAgICAgIGNvbnN0IHNlYXJjaFRleHQgPSBzdGF0ZS5zZWFyY2hUZXh0O1xuICAgICAgICAgIGNvbnN0IGlzQ3Vyc29yQXRFbmQgPVxuICAgICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudCAmJlxuICAgICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XG5cbiAgICAgICAgICBjb25zdCBpc0V2ZXJ5dGhpbmdTZWxlY3RlZCA9XG4gICAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50ICYmXG4gICAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0ID09PSAwICYmXG4gICAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XG5cbiAgICAgICAgICAvLyBvbmx5IGFsbG93IGRpdmluZyBpbiB3aGVuIGN1cnNvciBpcyBhdCBlbmQgb2YgaW5wdXQgb3Igd2hlblxuICAgICAgICAgIC8vIHRoZSBjb21wbGV0ZSB0ZXh0IGlzIHNlbGVjdGVkICh3aGVuIGJyb3dzaW5nIHRocm91Z2ggaGlzdG9yeSlcbiAgICAgICAgICBpZiAoIWlzQ3Vyc29yQXRFbmQgJiYgIWlzRXZlcnl0aGluZ1NlbGVjdGVkKSByZXR1cm47XG5cbiAgICAgICAgICB1bnNldEhhc05ldHdvcmtFcnJvcigpO1xuXG4gICAgICAgICAgLy8gTk9URTogc2luY2Ugd2UgbmVlZCB0byBmZXRjaCB0aGUgXCJuZXh0IGNvbW1hbmRcIiwgd2hpY2ggaXMgYW4gYXN5bmMgb3BlcmF0aW9uLFxuICAgICAgICAgIC8vIHdlIHVzZSBhIElJRkUgdG8gcHJvY2VzcyB0aGF0IGFuZCBldmVudHVhbGx5IHVwZGF0ZSB0aGUgc3RhdGUuXG4gICAgICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGlmIChjb21tYW5kKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG5leHRDb21tYW5kcyA9IGF3YWl0IGdldE5leHRDb21tYW5kc0Zyb21QYXJlbnQoY29tbWFuZCk7XG4gICAgICAgICAgICAgIC8vIGF2b2lkIG1vdmluZyBjdXJzb3Igd2hlbiB0aGVyZSBhcmUgc3ViLW9wdGlvbnNcbiAgICAgICAgICAgICAgaWYgKG5leHRDb21tYW5kcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgLy8gRW5zdXJlIHRoZSBzZWFyY2ggdGV4dCBoYXMgbm90IGNoYW5nZWQgd2hpbGUgd2Ugd2VyZSBsb2FkaW5nXG4gICAgICAgICAgICAgICAgLy8gdGhlIG5leHQgcmVzdWx0cywgb3RoZXJ3aXNlIHdlJ2QgaW50ZXJydXB0IHRoZSB1c2VyLlxuICAgICAgICAgICAgICAgIC8vIFRocm93IGF3YXkgdGhlIHJlc3VsdHMgaW4gY2FzZSB0aGUgc2VhcmNoIHRleHQgaGFzIGNoYW5nZWQuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLnNlYXJjaFRleHQgPT09IHNlYXJjaFRleHQpIHtcbiAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3NldE5leHRDb21tYW5kcycsXG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQ6IHsgcmVzdWx0czogbmV4dENvbW1hbmRzIH0sXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzaGFrZSgpO1xuICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnKSB7XG4gICAgICAgICAgLy8gZ28gbGVmdCBpbiBzdGFja1xuICAgICAgICAgIGNvbnN0IHByZXZDb21tYW5kID0gbGFzdChzdGF0ZS5zdGFjayk7XG5cbiAgICAgICAgICAvLyBkbyBub3RoaW5nIHdoZW4gd2UgY2FuJ3QgZ28gbGVmdCBhbnltb3JlXG4gICAgICAgICAgaWYgKCFwcmV2Q29tbWFuZCkgcmV0dXJuO1xuXG4gICAgICAgICAgLy8gcHJldmVudCBjdXJzb3IgZnJvbSBqdW1waW5nIGEgY2hhciB0byB0aGUgbGVmdCBpbiB0ZXh0IGlucHV0XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdzZXRQcmV2Q29tbWFuZHMnLFxuICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgICBzZWFyY2hUZXh0OiBwcmV2Q29tbWFuZC5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgICByZXN1bHRzOiBwcmV2Q29tbWFuZC5yZXN1bHRzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIGdldE5leHRDb21tYW5kc0Zyb21QYXJlbnQsXG4gICAgICBwcm9wcy5oaXN0b3J5RW50cmllcyxcbiAgICAgIHNoYWtlLFxuICAgICAgc3RhdGUsXG4gICAgICB1bnNldEhhc05ldHdvcmtFcnJvcixcbiAgICBdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUtleVVwID0gdXNlQ2FsbGJhY2s8S2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD4+KFxuICAgIChldmVudCkgPT4ge1xuICAgICAgLy8gc2V0dGluZyB0aGUgc2VsZWN0aW9uIGNhbiBvbmx5IGhhcHBlbiBpbiBvbktleVVwXG4gICAgICBpZiAoc2hvdWxkU2VsZWN0RmllbGRUZXh0LmN1cnJlbnQpIHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgaW5wdXQuc2VsZWN0KCk7XG4gICAgICAgIHNob3VsZFNlbGVjdEZpZWxkVGV4dC5jdXJyZW50ID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5rZXkgIT09ICdFbnRlcicgJiYgIWlzTmV3V2luZG93Q29tYm8uY3VycmVudCkgcmV0dXJuIHRydWU7XG5cbiAgICAgIC8vIFVzZXIganVzdCB0cmlnZ2VyZWQgdGhlIHNlYXJjaFxuICAgICAgaWYgKHN0YXRlLnNlbGVjdGVkUmVzdWx0ID09PSAtMSkgcmV0dXJuIHRydWU7XG5cbiAgICAgIC8vIFVzZXIgaGFkIHNvbWV0aGluZyBzZWxlY3RlZCBhbmQgd2FudHMgdG8gZ28gdGhlcmVcbiAgICAgIGV4ZWN1dGUoc3RhdGUucmVzdWx0c1tzdGF0ZS5zZWxlY3RlZFJlc3VsdF0sIHtcbiAgICAgICAgb3BlbkluTmV3VGFiOiBpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQsXG4gICAgICB9KTtcblxuICAgICAgaXNOZXdXaW5kb3dDb21iby5jdXJyZW50ID0gZmFsc2U7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIFtleGVjdXRlLCBzdGF0ZS5yZXN1bHRzLCBzdGF0ZS5zZWxlY3RlZFJlc3VsdF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gdXNlQ2FsbGJhY2s8Q2hhbmdlRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+PihcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHNlYXJjaFRleHQgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgICBpZiAoc2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3Jlc2V0JyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdzZWFyY2hUZXh0JywgcGF5bG9hZDogc2VhcmNoVGV4dCB9KTtcblxuICAgICAgLy8gQSBzZWFyY2ggdmlhIG5ldHdvcmsgaXMgb25seSB0cmlnZ2VyZWQgd2hlbiB0aGVyZVxuICAgICAgLy8gYXJlIG1vcmUgdGhhbiB0aHJlZSBjaGFyYWN0ZXJzLiBTbyBubyBmYWxzZSBsb2FkaW5nXG4gICAgICAvLyBpbmRpY2F0aW9uIGlzIGdpdmVuLlxuICAgICAgaWYgKHNlYXJjaFRleHQudHJpbSgpLmxlbmd0aCA+IDMpIHtcbiAgICAgICAgc2V0SXNMb2FkaW5nKCk7XG4gICAgICB9XG5cbiAgICAgIHNlYXJjaEZyb21QYXJlbnQoc2VhcmNoVGV4dCkudGhlbihcbiAgICAgICAgKGFzeW5jUmVzdWx0czogQ29tbWFuZFtdKSA9PiB7XG4gICAgICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IoKTtcbiAgICAgICAgICB1bnNldElzTG9hZGluZygpO1xuXG4gICAgICAgICAgY29uc3QgZnVzZSA9IG5ldyBGdXNlKGFzeW5jUmVzdWx0cywge1xuICAgICAgICAgICAga2V5czogW1xuICAgICAgICAgICAgICB7IG5hbWU6ICd0ZXh0Jywgd2VpZ2h0OiAwLjYgfSxcbiAgICAgICAgICAgICAgeyBuYW1lOiAna2V5d29yZHMnLCB3ZWlnaHQ6IDAuNCB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIG1pbk1hdGNoQ2hhckxlbmd0aDogMixcbiAgICAgICAgICAgIGluY2x1ZGVTY29yZTogdHJ1ZSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IHNlYXJjaFJlc3VsdHMgPSBmdXNlXG4gICAgICAgICAgICAuc2VhcmNoKHNlYXJjaFRleHQpXG4gICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IHJlc3VsdHMgd2l0aCBhIG1hdGNoaW5nIHNjb3JlIG92ZXIgMC43NVxuICAgICAgICAgICAgLmZpbHRlcigocmVzdWx0KSA9PiAocmVzdWx0LnNjb3JlID8gcmVzdWx0LnNjb3JlIDwgMC43NSA6IGZhbHNlKSlcbiAgICAgICAgICAgIC8vIEtlZXAgYSBtYXhpbWFsIG9mIDkgcmVzdWx0c1xuICAgICAgICAgICAgLnNsaWNlKDAsIDkpO1xuXG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ3NldFNlYXJjaFRleHRSZXN1bHRzJyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHNlYXJjaFJlc3VsdHMubWFwKChyZXN1bHQpID0+IHJlc3VsdC5pdGVtKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgIHVuc2V0SXNMb2FkaW5nKCk7XG4gICAgICAgICAgc2V0SGFzTmV0d29ya0Vycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSxcbiAgICBbXG4gICAgICBzZWFyY2hGcm9tUGFyZW50LFxuICAgICAgc2V0SGFzTmV0d29ya0Vycm9yLFxuICAgICAgc2V0SXNMb2FkaW5nLFxuICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IsXG4gICAgICB1bnNldElzTG9hZGluZyxcbiAgICBdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUNvbnRhaW5lckNsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJyB9KTtcbiAgICBvbkNsb3NlRnJvbVBhcmVudCgpO1xuICB9LCBbb25DbG9zZUZyb21QYXJlbnRdKTtcblxuICBjb25zdCBjcmVhdGVDb21tYW5kTW91c2VFbnRlckhhbmRsZXIgPSB1c2VDYWxsYmFjazxcbiAgICAoaW5kZXg6IG51bWJlcikgPT4gTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+XG4gID4oXG4gICAgKGluZGV4KSA9PiAoKSA9PiB7XG4gICAgICAvLyBJbiBjYXNlIHRoZSBjdXJzb3IgaGFwcGVuZWQgdG8gYmUgaW4gYSBsb2NhdGlvbiB3aGVyZSBhXG4gICAgICAvLyByZXN1bHQgd291bGQgYXBwZWFyLCBpdCB3b3VsZCB0cmlnZ2VyIG9uTW91c2VFbnRlciBhbmQgdGhlXG4gICAgICAvLyByZXN1bHQgd291bGQgYmUgc2VsZWN0ZWQgaW1tZWRpYXRlbHkuIFRoaXMgaXMgbm90IHNvbWV0aGluZ1xuICAgICAgLy8gYSB1c2VyIHdvdWxkIGV4cGVjdCwgaGVuY2Ugd2UgcHJldmVudCBpdCBmcm9tIGhhcHBlbmluZy5cbiAgICAgIC8vIFRoZSB1c2VyIGhhcyB0byBtb3ZlIHRoZSBjdXJzb3IgdG8gYW4gb3B0aW9uIGV4cGxpY2l0bHkgZm9yXG4gICAgICAvLyBpdCB0byBiZWNvbWUgYWN0aXZlLiBIb3dldmVyLCB0aGUgdXNlciBjYW4gYWx3YXlzIGNsaWNrIGFuZFxuICAgICAgLy8gdGhhdCBhY3Rpb24gd2lsbCBiZSB0cmlnZ2VyZWQuXG4gICAgICBpZiAoc2tpcE5leHRTZWxlY3Rpb24uY3VycmVudCkge1xuICAgICAgICBza2lwTmV4dFNlbGVjdGlvbi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gc2V0cyB0aGUgc2VsZWN0ZWQgcmVzdWx0LCBtYWlubHkgZm9yIHRoZSBob3ZlciBlZmZlY3RcbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3NlbGVjdGVkUmVzdWx0JywgcGF5bG9hZDogaW5kZXggfSk7XG4gICAgfSxcbiAgICBbXVxuICApO1xuICBjb25zdCBjcmVhdGVDb21tYW5kQ2xpY2tIYW5kbGVyID0gdXNlQ2FsbGJhY2s8XG4gICAgKGNvbW1hbmQ6IENvbW1hbmQpID0+IE1vdXNlRXZlbnRIYW5kbGVyPEhUTUxEaXZFbGVtZW50PlxuICA+KFxuICAgIChjb21tYW5kKSA9PiAoZXZlbnQpID0+IHtcbiAgICAgIGV4ZWN1dGUoY29tbWFuZCwge1xuICAgICAgICBvcGVuSW5OZXdUYWI6IGhhc05ld1dpbmRvd01vZGlmaWVyKGV2ZW50KSxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgW2V4ZWN1dGVdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8QnV0bGVyQ29udGFpbmVyXG4gICAgICBvbkNsaWNrPXtoYW5kbGVDb250YWluZXJDbGlja31cbiAgICAgIGRhdGEtdGVzdGlkPVwicXVpY2stYWNjZXNzXCJcbiAgICAgIHRhYkluZGV4PXstMX1cbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17c2VhcmNoQ29udGFpbmVyUmVmfVxuICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3VpS2l0RGVzaWduVG9rZW5zLmNvbG9yU3VyZmFjZX07XG4gICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICR7dWlLaXREZXNpZ25Ub2tlbnMuYm9yZGVyUmFkaXVzNH07XG4gICAgICAgICAgbWluLWhlaWdodDogNDBweDtcblxuICAgICAgICAgIC8qIG9uZSBtb3JlIHRoYW4gYXBwLWJhciAoMjAwMDApIGFuZCBvbmUgbW9yZSB0aGFuIHRoZSBvdmVybGF5ICgyMDAwMSkgKi9cbiAgICAgICAgICB6LWluZGV4OiAyMDAwMjtcbiAgICAgICAgICB3aWR0aDogNDAwcHg7XG4gICAgICAgICAgbWFyZ2luOiA0MHB4IGF1dG87XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICAtbW96LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDEwcHggMzBweCAtOHB4IHJnYmEoMCwgMCwgMCwgMC43NSk7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206ICR7c3RhdGUuaGFzTmV0d29ya0Vycm9yXG4gICAgICAgICAgICA/ICcwJ1xuICAgICAgICAgICAgOiB1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nU307XG4gICAgICAgIGB9XG4gICAgICAgIG9uQ2xpY2s9eyhldmVudCkgPT4ge1xuICAgICAgICAgIC8vIEF2b2lkIGNsb3Npbmcgd2hlbiB0aGUgc2VhcmNoQ29udGFpbmVyIGl0c2VsZiBpcyBjbGlja2VkXG4gICAgICAgICAgLy8gSWYgd2UgZG9uJ3QgZG8gdGhpcywgdGhlbiB0aGUgb3ZlcmxheSB3aWxsIGNsb3NlIHdoZW4gZS5nLlxuICAgICAgICAgIC8vIHRoZSBzZWFyY2ggaW5wdXQgaXMgY2xpY2tlZC5cbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGB9XG4gICAgICAgID5cbiAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIGh0bWxGb3I9XCJxdWljay1hY2Nlc3Mtc2VhcmNoLWlucHV0XCJcbiAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nTX07XG4gICAgICAgICAgICAgIG1hcmdpbi10b3A6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgYH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U2VhcmNoSWNvbiBjb2xvcj1cIm5ldXRyYWw2MFwiIC8+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGlkPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICByZWY9e3NlYXJjaElucHV0UmVmfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2ludGwuZm9ybWF0TWVzc2FnZShtZXNzYWdlcy5pbnB1dFBsYWNlaG9kZXIpfVxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICAgIG91dGxpbmU6IDA7XG4gICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjJweDtcbiAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICAgICAgICAgICAgcGFkZGluZzogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nTX1cbiAgICAgICAgICAgICAgICAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdNfSAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdTfVxuICAgICAgICAgICAgICAgICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAmOjpwbGFjZWhvbGRlciB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICR7dWlLaXREZXNpZ25Ub2tlbnMuY29sb3JOZXV0cmFsNjB9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBgfVxuICAgICAgICAgICAgdmFsdWU9e3N0YXRlLnNlYXJjaFRleHR9XG4gICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgb25LZXlEb3duPXtoYW5kbGVLZXlEb3dufVxuICAgICAgICAgICAgb25LZXlVcD17aGFuZGxlS2V5VXB9XG4gICAgICAgICAgICBhdXRvRm9jdXM9e3RydWV9XG4gICAgICAgICAgICBhdXRvQ29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJxdWljay1hY2Nlc3Mtc2VhcmNoLWlucHV0XCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIHtzdGF0ZS5pc0xvYWRpbmcgJiYgKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nU307XG4gICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdTfTtcbiAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPExvYWRpbmdTcGlubmVyIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXRlLmhhc05ldHdvcmtFcnJvcilcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHt1aUtpdERlc2lnblRva2Vucy5jb2xvckVycm9yfTtcbiAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgICAgICAgICAgICBjb2xvcjogJHt1aUtpdERlc2lnblRva2Vucy5jb2xvclN1cmZhY2V9O1xuICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAke3VpS2l0RGVzaWduVG9rZW5zLmZvbnRTaXplMjB9O1xuICAgICAgICAgICAgICAgICAgcGFkZGluZzogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nWHN9O1xuICAgICAgICAgICAgICAgIGB9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSB7Li4ubWVzc2FnZXMub2ZmbGluZX0gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKHN0YXRlLnJlc3VsdHMubGVuZ3RoID09PSAwICYmIHN0YXRlLnNlYXJjaFRleHQudHJpbSgpLmxlbmd0aCA+IDApXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgICAgICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7dWlLaXREZXNpZ25Ub2tlbnMuY29sb3JOZXV0cmFsfTtcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAke3VpS2l0RGVzaWduVG9rZW5zLmNvbG9yU29saWR9O1xuICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHt1aUtpdERlc2lnblRva2Vucy5mb250U2l6ZTIwfTtcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1hzfTtcbiAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2Ugey4uLm1lc3NhZ2VzLm5vUmVzdWx0c30gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuIHN0YXRlLnJlc3VsdHMubWFwKChjb21tYW5kLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPEJ1dGxlckNvbW1hbmRcbiAgICAgICAgICAgICAga2V5PXtjb21tYW5kLmlkfVxuICAgICAgICAgICAgICBjb21tYW5kPXtjb21tYW5kfVxuICAgICAgICAgICAgICBpc1NlbGVjdGVkPXtzdGF0ZS5zZWxlY3RlZFJlc3VsdCA9PT0gaW5kZXh9XG4gICAgICAgICAgICAgIG9uTW91c2VFbnRlcj17Y3JlYXRlQ29tbWFuZE1vdXNlRW50ZXJIYW5kbGVyKGluZGV4KX1cbiAgICAgICAgICAgICAgb25DbGljaz17Y3JlYXRlQ29tbWFuZENsaWNrSGFuZGxlcihjb21tYW5kKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSk7XG4gICAgICAgIH0pKCl9XG4gICAgICA8L2Rpdj5cbiAgICA8L0J1dGxlckNvbnRhaW5lcj5cbiAgKTtcbn07XG5CdXRsZXIuZGlzcGxheU5hbWUgPSAnQnV0bGVyJztcblxuY29uc3QgQnV0bGVyV2l0aEFuaW1hdGlvbiA9IChwcm9wczogT21pdDxQcm9wcywgJ2NsYXNzTmFtZVNoYWtlQW5pbWF0aW9uJz4pID0+IChcbiAgPENsYXNzTmFtZXM+XG4gICAgeyh7IGNzcyB9KSA9PiAoXG4gICAgICA8QnV0bGVyXG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgY2xhc3NOYW1lU2hha2VBbmltYXRpb249e2Nzc2BcbiAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IDAuNDVzO1xuICAgICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGJvdGg7XG4gICAgICAgICAgYW5pbWF0aW9uLW5hbWU6ICR7c2hha2VBbmltYXRpb259O1xuICAgICAgICBgfVxuICAgICAgLz5cbiAgICApfVxuICA8L0NsYXNzTmFtZXM+XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBCdXRsZXJXaXRoQW5pbWF0aW9uO1xuIl19 */"),
880
- onClick: event => {
881
- // Avoid closing when the searchContainer itself is clicked
882
- // If we don't do this, then the overlay will close when e.g.
883
- // the search input is clicked.
884
- event.stopPropagation();
885
- event.preventDefault();
886
- },
887
- children: [jsxRuntime.jsxs("div", {
888
- css: _ref,
889
- children: [jsxRuntime.jsx("label", {
890
- htmlFor: "quick-access-search-input",
891
- css: /*#__PURE__*/react.css("align-self:center;padding-left:", designSystem.designTokens.spacingM, ";margin-top:", designSystem.designTokens.spacingS, ";" + (process.env.NODE_ENV === "production" ? "" : ";label:Butler;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBb25Cb0IiLCJmaWxlIjoiYnV0bGVyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEtleWJvYXJkRXZlbnRIYW5kbGVyLFxuICBDaGFuZ2VFdmVudEhhbmRsZXIsXG4gIEtleWJvYXJkRXZlbnQsXG4gIE1vdXNlRXZlbnRIYW5kbGVyLFxuICBNb3VzZUV2ZW50LFxuICB1c2VSZWR1Y2VyLFxuICB1c2VSZWYsXG4gIHVzZUNhbGxiYWNrLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBGdXNlIGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IGxhc3QgZnJvbSAnbG9kYXNoL2xhc3QnO1xuaW1wb3J0IHsgRm9ybWF0dGVkTWVzc2FnZSwgdXNlSW50bCB9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IHsgZGVzaWduVG9rZW5zIGFzIHVpS2l0RGVzaWduVG9rZW5zIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyBTZWFyY2hJY29uIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvaWNvbnMnO1xuaW1wb3J0IExvYWRpbmdTcGlubmVyIGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2xvYWRpbmctc3Bpbm5lcic7XG5pbXBvcnQgQnV0bGVyQ29tbWFuZCBmcm9tICcuLi9idXRsZXItY29tbWFuZCc7XG5pbXBvcnQgQnV0bGVyQ29udGFpbmVyIGZyb20gJy4uL2J1dGxlci1jb250YWluZXInO1xuaW1wb3J0IG1lc3NhZ2VzIGZyb20gJy4uL21lc3NhZ2VzJztcbmltcG9ydCB0eXBlIHtcbiAgQ29tbWFuZCxcbiAgU2VhcmNoVGV4dCxcbiAgU2VsZWN0ZWRSZXN1bHQsXG4gIFN0YWNrLFxuICBIaXN0b3J5RW50cnksXG59IGZyb20gJy4uL3R5cGVzJztcblxuY29uc3QgaXNTZWxlY3RBbGxDb21ibyA9IChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cbiAgZXZlbnQua2V5ID09PSAnYScgJiZcbiAgZXZlbnQubWV0YUtleSAmJlxuICAhZXZlbnQuY3RybEtleSAmJlxuICAhZXZlbnQuYWx0S2V5ICYmXG4gICFldmVudC5zaGlmdEtleTtcblxuY29uc3QgaXNDbG9zZUNvbWJvID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PlxuICBldmVudC5rZXkgPT09ICdFc2NhcGUnICYmXG4gICFldmVudC5tZXRhS2V5ICYmXG4gICFldmVudC5jdHJsS2V5ICYmXG4gICFldmVudC5hbHRLZXkgJiZcbiAgIWV2ZW50LnNoaWZ0S2V5O1xuXG5jb25zdCBnZXRQbGF0Zm9ybSA9ICgpID0+IHtcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdXaW4nKSkgcmV0dXJuICd3aW5kb3dzJztcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdNYWMnKSkgcmV0dXJuICdtYWNvcyc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnWDExJykpIHJldHVybiAndW5peCc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnTGludXgnKSkgcmV0dXJuICdsaW51eCc7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBoYXNOZXdXaW5kb3dNb2RpZmllciA9IChcbiAgZXZlbnQ6IEtleWJvYXJkRXZlbnQ8SFRNTEVsZW1lbnQ+IHwgTW91c2VFdmVudDxIVE1MRWxlbWVudD5cbikgPT4ge1xuICBjb25zdCBwbGF0Zm9ybSA9IGdldFBsYXRmb3JtKCk7XG4gIHN3aXRjaCAocGxhdGZvcm0pIHtcbiAgICBjYXNlICdtYWNvcyc6XG4gICAgICByZXR1cm4gZXZlbnQubWV0YUtleTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGV2ZW50LmN0cmxLZXk7XG4gIH1cbn07XG5cbmNvbnN0IHNoYWtlQW5pbWF0aW9uID0ga2V5ZnJhbWVzYFxuICBmcm9tLFxuICB0byB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcbiAgfVxuXG4gIDE0JSxcbiAgNDIlLFxuICA3MCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTNweCwgMCwgMCk7XG4gIH1cblxuICAyOCUsXG4gIDU2JSxcbiAgODQlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDNweCwgMCwgMCk7XG4gIH1cbmA7XG5cbnR5cGUgU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogYm9vbGVhbjtcbiAgaXNMb2FkaW5nOiBib29sZWFuO1xuICBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0O1xuICBzZWxlY3RlZFJlc3VsdDogU2VsZWN0ZWRSZXN1bHQ7XG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IGJvb2xlYW47XG4gIHJlc3VsdHM6IENvbW1hbmRbXTtcbiAgc3RhY2s6IFN0YWNrW107XG59O1xudHlwZSBBY3Rpb24gPVxuICB8IHsgdHlwZTogJ25ldHdvcmtFcnJvcic7IHBheWxvYWQ6IGJvb2xlYW4gfVxuICB8IHsgdHlwZTogJ2xvYWRpbmcnOyBwYXlsb2FkOiBib29sZWFuIH1cbiAgfCB7IHR5cGU6ICdzZWxlY3RlZFJlc3VsdCc7IHBheWxvYWQ6IG51bWJlciB9XG4gIHwgeyB0eXBlOiAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH1cbiAgfCB7IHR5cGU6ICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfVxuICB8IHtcbiAgICAgIHR5cGU6ICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JztcbiAgICAgIHBheWxvYWQ6IHsgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDsgcmVzdWx0czogQ29tbWFuZFtdIH07XG4gICAgfVxuICB8IHsgdHlwZTogJ3NldE5leHRDb21tYW5kcyc7IHBheWxvYWQ6IHsgcmVzdWx0czogQ29tbWFuZFtdIH0gfVxuICB8IHtcbiAgICAgIHR5cGU6ICdzZXRQcmV2Q29tbWFuZHMnO1xuICAgICAgcGF5bG9hZDogeyBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0OyByZXN1bHRzOiBDb21tYW5kW10gfTtcbiAgICB9XG4gIHwgeyB0eXBlOiAnc2VhcmNoVGV4dCc7IHBheWxvYWQ6IHN0cmluZyB9XG4gIHwgeyB0eXBlOiAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOyBwYXlsb2FkOiBDb21tYW5kW10gfVxuICB8IHsgdHlwZTogJ3Jlc2V0U2VhcmNoVGV4dCcgfVxuICB8IHsgdHlwZTogJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJyB9XG4gIHwgeyB0eXBlOiAncmVzZXQnIH07XG5jb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogZmFsc2UsXG4gIGlzTG9hZGluZzogZmFsc2UsXG4gIHNlYXJjaFRleHQ6ICcnLFxuICBzZWxlY3RlZFJlc3VsdDogLTEsXG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IHRydWUsXG4gIHJlc3VsdHM6IFtdLFxuICBzdGFjazogW10sXG59O1xuY29uc3QgcmVkdWNlciA9IChzdGF0ZTogU3RhdGUgPSBpbml0aWFsU3RhdGUsIGFjdGlvbjogQWN0aW9uKTogU3RhdGUgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnbmV0d29ya0Vycm9yJzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBoYXNOZXR3b3JrRXJyb3I6IGFjdGlvbi5wYXlsb2FkIH07XG4gICAgY2FzZSAnbG9hZGluZyc6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgaXNMb2FkaW5nOiBhY3Rpb24ucGF5bG9hZCB9O1xuICAgIGNhc2UgJ3NlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQgfTtcbiAgICBjYXNlICdpbmNyZW1lbnRTZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6XG4gICAgICAgICAgc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IHN0YXRlLnJlc3VsdHMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0ICsgMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ2RlY3JlbWVudFNlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDpcbiAgICAgICAgICBzdGF0ZS5zZWxlY3RlZFJlc3VsdCA8IDFcbiAgICAgICAgICAgID8gc3RhdGUucmVzdWx0cy5sZW5ndGggLSAxXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0IC0gMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ3BpY2tDb21tYW5kRnJvbUhpc3RvcnknOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OiAwLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZC5zZWFyY2hUZXh0LFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZC5yZXN1bHRzLFxuICAgICAgICBzdGFjazogW10sXG4gICAgICAgIC8vIFRoZSBoaXN0b3J5IGRvZXMgbm90IGdldCBjaGFuZ2VkIGhlcmUsIGl0IHdpbGwgYmUgY2hhbmdlZCBhbG9uZ1xuICAgICAgICAvLyB3aXRoIHRoZSByZWd1bGFyIGZsb3cuXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldE5leHRDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc3RhY2s6IFtcbiAgICAgICAgICAuLi5zdGF0ZS5zdGFjayxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZWFyY2hUZXh0OiBzdGF0ZS5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgcmVzdWx0czogc3RhdGUucmVzdWx0cyxcbiAgICAgICAgICAgIHNlbGVjdGVkUmVzdWx0OiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogMCxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLnJlc3VsdHMsXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldFByZXZDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQuc2VhcmNoVGV4dCxcbiAgICAgICAgcmVzdWx0czogYWN0aW9uLnBheWxvYWQucmVzdWx0cyxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IDAsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgICAvLyBvbWl0IGxhc3QgaXRlbVxuICAgICAgICBzdGFjazogc3RhdGUuc3RhY2suc2xpY2UoMCwgLTEpLFxuICAgICAgfTtcbiAgICBjYXNlICdzZWFyY2hUZXh0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgLy8gY2xlYXIgbmV0d29yayBlcnJvciB3aGVuIHNlYXJjaCB0ZXh0IGlzIGNsZWFyZWQsIHNvIHRoYXQgdXNlcnNcbiAgICAgICAgLy8gYXJlIHRlbXB0ZWQgdG8gcmV0cnlcbiAgICAgICAgaGFzTmV0d29ya0Vycm9yOiBhY3Rpb24ucGF5bG9hZC5sZW5ndGggPiAwICYmIHN0YXRlLmhhc05ldHdvcmtFcnJvcixcbiAgICAgIH07XG4gICAgY2FzZSAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQubGVuZ3RoID4gMCA/IDAgOiAtMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogdHJ1ZSxcbiAgICAgICAgc3RhY2s6IFtdLFxuICAgICAgfTtcbiAgICBjYXNlICdyZXNldFNlYXJjaFRleHQnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlYXJjaFRleHQ6ICcnLCByZXN1bHRzOiBbXSwgc2VsZWN0ZWRSZXN1bHQ6IC0xIH07XG4gICAgY2FzZSAncmVzZXRSZXN1bHRzV2hlbkNsb3NpbmcnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlbGVjdGVkUmVzdWx0OiAtMSwgZW5hYmxlSGlzdG9yeTogdHJ1ZSB9O1xuICAgIGNhc2UgJ3Jlc2V0JzpcbiAgICAgIHJldHVybiBpbml0aWFsU3RhdGU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufTtcblxudHlwZSBQcm9wcyA9IHtcbiAgaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdO1xuICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlOiAoaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdKSA9PiB2b2lkO1xuICBzZWFyY2g6IChzZWFyY2hUZXh0OiBTZWFyY2hUZXh0KSA9PiBQcm9taXNlPENvbW1hbmRbXT47XG4gIGdldE5leHRDb21tYW5kczogKGNvbW1hbmQ6IENvbW1hbmQpID0+IFByb21pc2U8Q29tbWFuZFtdPjtcbiAgZXhlY3V0ZUNvbW1hbmQ6IChjb21tYW5kOiBDb21tYW5kLCBtZXRhOiB7IG9wZW5Jbk5ld1RhYjogYm9vbGVhbiB9KSA9PiB2b2lkO1xuICBvbkNsb3NlOiAoKSA9PiB2b2lkO1xuICBjbGFzc05hbWVTaGFrZUFuaW1hdGlvbjogc3RyaW5nO1xufTtcbmNvbnN0IEJ1dGxlciA9IChwcm9wczogUHJvcHMpID0+IHtcbiAgY29uc3QgaW50bCA9IHVzZUludGwoKTtcbiAgY29uc3QgW3N0YXRlLCBkaXNwYXRjaF0gPSB1c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxTdGF0ZSk7XG5cbiAgY29uc3Qgc2hvdWxkU2VsZWN0RmllbGRUZXh0ID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3QgaXNOZXdXaW5kb3dDb21ibyA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IHNraXBOZXh0U2VsZWN0aW9uID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3Qgc2VhcmNoQ29udGFpbmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3Qgc2VhcmNoSW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbCk7XG5cbiAgY29uc3Qgc2V0SGFzTmV0d29ya0Vycm9yID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ25ldHdvcmtFcnJvcicsIHBheWxvYWQ6IHRydWUgfSk7XG4gIH0sIFtdKTtcbiAgY29uc3QgdW5zZXRIYXNOZXR3b3JrRXJyb3IgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbmV0d29ya0Vycm9yJywgcGF5bG9hZDogZmFsc2UgfSk7XG4gIH0sIFtdKTtcbiAgY29uc3Qgc2V0SXNMb2FkaW5nID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ2xvYWRpbmcnLCBwYXlsb2FkOiB0cnVlIH0pO1xuICB9LCBbXSk7XG4gIGNvbnN0IHVuc2V0SXNMb2FkaW5nID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ2xvYWRpbmcnLCBwYXlsb2FkOiBmYWxzZSB9KTtcbiAgfSwgW10pO1xuXG4gIC8vIERlc3RydWN0dXJlIGZ1bmN0aW9ucyBmcm9tIHByb3BzIHRvIHJlZmVyZW5jZSB0aGVtIGluIHRoZSBob29rIGRlcGVuZGVuY3kgbGlzdFxuICBjb25zdCB7XG4gICAgc2VhcmNoOiBzZWFyY2hGcm9tUGFyZW50LFxuICAgIG9uQ2xvc2U6IG9uQ2xvc2VGcm9tUGFyZW50LFxuICAgIGV4ZWN1dGVDb21tYW5kOiBleGVjdXRlQ29tbWFuZEZyb21QYXJlbnQsXG4gICAgb25IaXN0b3J5RW50cmllc0NoYW5nZTogb25IaXN0b3J5RW50cmllc0NoYW5nZUZyb21QYXJlbnQsXG4gICAgZ2V0TmV4dENvbW1hbmRzOiBnZXROZXh0Q29tbWFuZHNGcm9tUGFyZW50LFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3Qgc2hha2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50KSB7XG4gICAgICBzZWFyY2hDb250YWluZXJSZWYuY3VycmVudC5jbGFzc0xpc3QucmVtb3ZlKFxuICAgICAgICBwcm9wcy5jbGFzc05hbWVTaGFrZUFuaW1hdGlvblxuICAgICAgKTtcbiAgICAgIC8vIC0+IHRyaWdnZXJpbmcgcmVmbG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdm9pZFxuICAgICAgdm9pZCBzZWFyY2hDb250YWluZXJSZWYuY3VycmVudC5vZmZzZXRXaWR0aDtcbiAgICAgIHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50LmNsYXNzTGlzdC5hZGQocHJvcHMuY2xhc3NOYW1lU2hha2VBbmltYXRpb24pO1xuICAgIH1cbiAgfSwgW3Byb3BzLmNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uXSk7XG5cbiAgY29uc3QgZXhlY3V0ZSA9IHVzZUNhbGxiYWNrKFxuICAgIChjb21tYW5kOiBDb21tYW5kLCBtZXRhOiB7IG9wZW5Jbk5ld1RhYjogYm9vbGVhbiB9KSA9PiB7XG4gICAgICAvLyBPbmx5IG1haW4gZW50cmllcyBnZXQgYWRkZWQgdG8gaGlzdG9yeSwgc28gd2hlbiBhIHN1YmNvbW1hbmQgaXMgZXhlY3V0ZWQsXG4gICAgICAvLyB3ZSBhZGQgdGhlIG1haW4gY29tbWFuZCBvZiBpdCB0byB0aGUgaGlzdG9yeSAodGhlIHRvcC1sZXZlbCBjb21tYW5kKS5cbiAgICAgIC8vXG4gICAgICAvLyBUaGUga2V5IHRvIGlkZW50aWZ5IGhpc3RvcnkgZW50cmllcyBieSBpcyBhbHdheXMgdGhlIHNlYXJjaFRleHRcbiAgICAgIC8vIFRoZXJlIHdpbGwgbmV2ZXIgYmUgdHdvIGhpc3RvcnkgZW50cmllcyB3aXRoIHRoZSBzYW1lIHNlYXJjaFRleHRcbiAgICAgIGNvbnN0IGVudHJ5ID1cbiAgICAgICAgc3RhdGUuc3RhY2subGVuZ3RoID09PSAwXG4gICAgICAgICAgPyAvLyBUaGUgc3RhY2sgaXMgZW1wdHksIHNvIHdlIGFyZSBleGVjdXRpbmcgYSB0b3AtbGV2ZWwgY29tbWFuZFxuICAgICAgICAgICAgeyBzZWFyY2hUZXh0OiBzdGF0ZS5zZWFyY2hUZXh0LCByZXN1bHRzOiBzdGF0ZS5yZXN1bHRzIH1cbiAgICAgICAgICA6IC8vIFdlIGFyZSBleGVjdXRpbmcgYSBzdWJjb21tYW5kLCBzbyB3ZSBnZXQgdGhlIHRvcC1sZXZlbCBjb21tYW5kIGZvciBpdCxcbiAgICAgICAgICAgIC8vIHdoaWNoIGlzIGF0IHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzZWFyY2hUZXh0OiBzdGF0ZS5zdGFja1swXS5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgICByZXN1bHRzOiBzdGF0ZS5zdGFja1swXS5yZXN1bHRzLFxuICAgICAgICAgICAgfTtcblxuICAgICAgLy8gQWRkIHRoZSBlbnRyeSB0byB0aGUgaGlzdG9yeSwgd2hpbGUgZXhjbHVkaW5nIGFueSBlYXJsaWVyIGhpc3RvcnkgZW50cnlcbiAgICAgIC8vIHdpdGggdGhlIHNhbWUgc2VhcmNoIHRleHQuIFRoaXMgZWZmZWN0aXZlbHkgXCJtb3Zlc1wiIHRoYXQgZW50cnkgdG8gdGhlXG4gICAgICAvLyB0b3Agb2YgdGhlIGhpc3RvcnkgKHdpdGggdGhlIG1vc3QgcmVjZW50IHJlc3VsdHMpLCBvciBhcHBlbmRzIGEgbmV3IGVudHJ5XG4gICAgICAvLyB3aGVuIGl0IGRpZG4ndCBleGlzdCBiZWZvcmUuXG4gICAgICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlRnJvbVBhcmVudChbXG4gICAgICAgIC4uLnByb3BzLmhpc3RvcnlFbnRyaWVzLmZpbHRlcihcbiAgICAgICAgICAoY29tbWFuZCkgPT4gY29tbWFuZC5zZWFyY2hUZXh0ICE9PSBlbnRyeS5zZWFyY2hUZXh0XG4gICAgICAgICksXG4gICAgICAgIGVudHJ5LFxuICAgICAgXSk7XG5cbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3Jlc2V0U2VhcmNoVGV4dCcgfSk7XG5cbiAgICAgIG9uQ2xvc2VGcm9tUGFyZW50KCk7XG5cbiAgICAgIGV4ZWN1dGVDb21tYW5kRnJvbVBhcmVudChjb21tYW5kLCBtZXRhKTtcbiAgICB9LFxuICAgIFtcbiAgICAgIGV4ZWN1dGVDb21tYW5kRnJvbVBhcmVudCxcbiAgICAgIG9uQ2xvc2VGcm9tUGFyZW50LFxuICAgICAgb25IaXN0b3J5RW50cmllc0NoYW5nZUZyb21QYXJlbnQsXG4gICAgICBwcm9wcy5oaXN0b3J5RW50cmllcyxcbiAgICAgIHN0YXRlLnJlc3VsdHMsXG4gICAgICBzdGF0ZS5zZWFyY2hUZXh0LFxuICAgICAgc3RhdGUuc3RhY2ssXG4gICAgXVxuICApO1xuICBjb25zdCBoYW5kbGVLZXlEb3duID0gdXNlQ2FsbGJhY2s8S2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD4+KFxuICAgIChldmVudCkgPT4ge1xuICAgICAgLy8gUHJldmVudGluZyBjdXJzb3IganVtcHMgY2FuIG9ubHkgaGFwcGVuIGluIG9uS2V5RG93biwgYnV0IG5vdCBpbiBvbktleVVwXG4gICAgICBldmVudC5wZXJzaXN0KCk7XG5cbiAgICAgIC8vIFdlIHdhbnQgdG8ga25vdyB3aGVuIHRoZSB1c2VyIHByZXNzZXMgY21kK2VudGVyIChjbWQgYmVpbmcgYSBtZXRhIGtleSkuXG4gICAgICAvLyBXZSBhcmUgb25seSB0b2xkIGFib3V0IHRoaXMgaW4ga2V5RG93biwgYnV0IG5vdCBpbiBrZXlVcCwgc28gd2UgbmVlZFxuICAgICAgLy8gdG8gaGFuZGxlIGl0IGhlcmVcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicgJiYgaGFzTmV3V2luZG93TW9kaWZpZXIoZXZlbnQpKSB7XG4gICAgICAgIGlzTmV3V2luZG93Q29tYm8uY3VycmVudCA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gQXZvaWQgc2VsZWN0aW5nIHRoZSB3aG9sZSBwYWdlIHdoZW4gdXNlciBzZWxlY3RlcyBldmVyeXRoaW5nIHdpdGhcbiAgICAgIC8vIGEga2V5Ym9hcmQgc2hvcnRjdXQuIFRoZXJlIGlzIHByb2JhYmx5IGEgYmV0dGVyIHdheSB0byBkbyB0aGlzIHRob3VnaC5cbiAgICAgIC8vIFRoaXMgcHJldmVudHMgdGhlIHdob2xlIHBhZ2UgZnJvbSBiZWluZyBzZWxlY3RlZCBpbiBjYXNlIHRoZSB1c2VyXG4gICAgICAvLyAxKSBvcGVucyB0aGUgc2VhcmNoIGJveFxuICAgICAgLy8gMikgdHlwZXMgaW50byBpdFxuICAgICAgLy8gMykgc2VsZWN0cyBhbGwgdGV4dCB1c2luZyBjbWQrYVxuICAgICAgLy8gNCkgY2xvc2VzIHRoZSBzZWFyY2ggYm94IHdpdGggZXNjXG4gICAgICAvLyBXaXRob3V0IHRoaXMgaGFuZGxpbmcsIHRoZSB3aG9sZSBwYWdlIHdvdWxkIG5vdyBiZSBzZWxlY3RlZFxuICAgICAgaWYgKGlzU2VsZWN0QWxsQ29tYm8oZXZlbnQpKSB7XG4gICAgICAgIC8vIFRoaXMgc3RvcHMgdGhlIGJyb3dzZXIgZnJvbSBzZWxlY3RpbmcgYW55dGhpbmdcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHNlYXJjaElucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAvLyBUaGlzIHNlbGVjdHMgdGhlIHRleHQgaW4gdGhlIHNlYXJjaCBpbnB1dFxuICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2V0U2VsZWN0aW9uUmFuZ2UoMCwgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gYXZvaWQgaW50ZXJmZXJpbmcgd2l0aCBvdGhlciBrZXkgY29tYmluYXRpb25zIHVzaW5nIG1vZGlmaWVyIGtleXNcbiAgICAgIGlmIChldmVudC5jdHJsS2V5IHx8IGV2ZW50LmFsdEtleSB8fCBldmVudC5zaGlmdEtleSB8fCBldmVudC5tZXRhS2V5KVxuICAgICAgICByZXR1cm47XG4gICAgICBpZiAoaXNDbG9zZUNvbWJvKGV2ZW50KSkgcmV0dXJuO1xuXG4gICAgICAvLyBza2lwIG5leHQgbW91c2VFbnRlciB0byBhdm9pZCBzZXR0aW5nIHNlbGVjdGVkUmVzdWx0IHdoZW4gY3Vyc29yIGp1c3RcbiAgICAgIC8vIGhhcHBlbnMgdG8gYmUgd2hlcmUgdGhlIHJlc3VsdHMgd2lsbCBwb3AgdXBcbiAgICAgIHNraXBOZXh0U2VsZWN0aW9uLmN1cnJlbnQgPSB0cnVlO1xuXG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgICAvLyBwcmV2ZW50IGN1cnNvciBmcm9tIGp1bXBpbmcgdG8gZW5kIG9mIHRleHQgaW5wdXRcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgICAgLy8gYnJvd3NlIHRocm91Z2ggaGlzdG9yeVxuICAgICAgICBpZiAoXG4gICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAoc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPCAxICYmIHN0YXRlLmVuYWJsZUhpc3RvcnkpXG4gICAgICAgICkge1xuICAgICAgICAgIHNob3VsZFNlbGVjdEZpZWxkVGV4dC5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID1cbiAgICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgID8gLy8gV2hlbiBnb2luZyBiYWNrIHRoZSBmaXJzdCBzdGVwXG4gICAgICAgICAgICAgICAgLTFcbiAgICAgICAgICAgICAgOiAvLyBXaGVuIGdvaW5nIGJhY2sgbW9yZSB0aGFuIG9uZSBzdGVwXG4gICAgICAgICAgICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgKGNvbW1hbmQpID0+IGNvbW1hbmQuc2VhcmNoVGV4dCA9PT0gc3RhdGUuc2VhcmNoVGV4dFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgLy8gUGljayB0aGUgcHJldmlvdXMgY29tbWFuZCBmcm9tIHRoZSBoaXN0b3J5XG4gICAgICAgICAgY29uc3QgcHJldkNvbW1hbmQgPVxuICAgICAgICAgICAgc2VsZWN0ZWRJbmRleCA9PT0gLTFcbiAgICAgICAgICAgICAgPyAvLyBwcmV2aW91cyBjb21tYW5kIG9uIHRvcCBvZiB0aGUgaGlzdG9yeSB3aGVuIGdvaW5nIGJhY2sgb25cbiAgICAgICAgICAgICAgICAvLyBmaXJzdCBzdGVwXG4gICAgICAgICAgICAgICAgbGFzdChwcm9wcy5oaXN0b3J5RW50cmllcylcbiAgICAgICAgICAgICAgOiAvLyBwcmV2aW91cyBjb21tYW5kIGlzIGRlZXBlciBkb3duXG4gICAgICAgICAgICAgICAgLy8gV2hlbiB0aGUgaGlzdG9yeSBkb2VzIG5vdCBleGlzdCAobmVnYXRpdmUgaW5kZXgpLCB0aGVuXG4gICAgICAgICAgICAgICAgLy8gdGhpcyBpbXBsaWNpdGx5IHJldHVybnMgdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXNbc2VsZWN0ZWRJbmRleCAtIDFdO1xuICAgICAgICAgIC8vIFNraXAgd2hlbiBubyBwcmV2aW91cyBlbnRyeSBleGlzdHMgaW4gdGhlIGhpc3RvcnlcbiAgICAgICAgICBpZiAoIXByZXZDb21tYW5kKSByZXR1cm47XG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ3BpY2tDb21tYW5kRnJvbUhpc3RvcnknLFxuICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgICBzZWFyY2hUZXh0OiBwcmV2Q29tbWFuZC5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgICByZXN1bHRzOiBwcmV2Q29tbWFuZC5yZXN1bHRzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcHJldmVudCBjdXJzb3IgZnJvbSBqdW1waW5nIHRvIGJlZ2lubmluZyBvZiB0ZXh0IGlucHV0XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ2RlY3JlbWVudFNlbGVjdGVkUmVzdWx0JyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXRlLnNlbGVjdGVkUmVzdWx0ID4gLTEpIHtcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnKSB7XG4gICAgICAgICAgY29uc3QgY29tbWFuZCA9IHN0YXRlLnJlc3VsdHNbc3RhdGUuc2VsZWN0ZWRSZXN1bHRdO1xuICAgICAgICAgIGNvbnN0IHNlYXJjaFRleHQgPSBzdGF0ZS5zZWFyY2hUZXh0O1xuICAgICAgICAgIGNvbnN0IGlzQ3Vyc29yQXRFbmQgPVxuICAgICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudCAmJlxuICAgICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XG5cbiAgICAgICAgICBjb25zdCBpc0V2ZXJ5dGhpbmdTZWxlY3RlZCA9XG4gICAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50ICYmXG4gICAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0ID09PSAwICYmXG4gICAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XG5cbiAgICAgICAgICAvLyBvbmx5IGFsbG93IGRpdmluZyBpbiB3aGVuIGN1cnNvciBpcyBhdCBlbmQgb2YgaW5wdXQgb3Igd2hlblxuICAgICAgICAgIC8vIHRoZSBjb21wbGV0ZSB0ZXh0IGlzIHNlbGVjdGVkICh3aGVuIGJyb3dzaW5nIHRocm91Z2ggaGlzdG9yeSlcbiAgICAgICAgICBpZiAoIWlzQ3Vyc29yQXRFbmQgJiYgIWlzRXZlcnl0aGluZ1NlbGVjdGVkKSByZXR1cm47XG5cbiAgICAgICAgICB1bnNldEhhc05ldHdvcmtFcnJvcigpO1xuXG4gICAgICAgICAgLy8gTk9URTogc2luY2Ugd2UgbmVlZCB0byBmZXRjaCB0aGUgXCJuZXh0IGNvbW1hbmRcIiwgd2hpY2ggaXMgYW4gYXN5bmMgb3BlcmF0aW9uLFxuICAgICAgICAgIC8vIHdlIHVzZSBhIElJRkUgdG8gcHJvY2VzcyB0aGF0IGFuZCBldmVudHVhbGx5IHVwZGF0ZSB0aGUgc3RhdGUuXG4gICAgICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGlmIChjb21tYW5kKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG5leHRDb21tYW5kcyA9IGF3YWl0IGdldE5leHRDb21tYW5kc0Zyb21QYXJlbnQoY29tbWFuZCk7XG4gICAgICAgICAgICAgIC8vIGF2b2lkIG1vdmluZyBjdXJzb3Igd2hlbiB0aGVyZSBhcmUgc3ViLW9wdGlvbnNcbiAgICAgICAgICAgICAgaWYgKG5leHRDb21tYW5kcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgLy8gRW5zdXJlIHRoZSBzZWFyY2ggdGV4dCBoYXMgbm90IGNoYW5nZWQgd2hpbGUgd2Ugd2VyZSBsb2FkaW5nXG4gICAgICAgICAgICAgICAgLy8gdGhlIG5leHQgcmVzdWx0cywgb3RoZXJ3aXNlIHdlJ2QgaW50ZXJydXB0IHRoZSB1c2VyLlxuICAgICAgICAgICAgICAgIC8vIFRocm93IGF3YXkgdGhlIHJlc3VsdHMgaW4gY2FzZSB0aGUgc2VhcmNoIHRleHQgaGFzIGNoYW5nZWQuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLnNlYXJjaFRleHQgPT09IHNlYXJjaFRleHQpIHtcbiAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3NldE5leHRDb21tYW5kcycsXG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQ6IHsgcmVzdWx0czogbmV4dENvbW1hbmRzIH0sXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzaGFrZSgpO1xuICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnKSB7XG4gICAgICAgICAgLy8gZ28gbGVmdCBpbiBzdGFja1xuICAgICAgICAgIGNvbnN0IHByZXZDb21tYW5kID0gbGFzdChzdGF0ZS5zdGFjayk7XG5cbiAgICAgICAgICAvLyBkbyBub3RoaW5nIHdoZW4gd2UgY2FuJ3QgZ28gbGVmdCBhbnltb3JlXG4gICAgICAgICAgaWYgKCFwcmV2Q29tbWFuZCkgcmV0dXJuO1xuXG4gICAgICAgICAgLy8gcHJldmVudCBjdXJzb3IgZnJvbSBqdW1waW5nIGEgY2hhciB0byB0aGUgbGVmdCBpbiB0ZXh0IGlucHV0XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdzZXRQcmV2Q29tbWFuZHMnLFxuICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgICBzZWFyY2hUZXh0OiBwcmV2Q29tbWFuZC5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgICByZXN1bHRzOiBwcmV2Q29tbWFuZC5yZXN1bHRzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIGdldE5leHRDb21tYW5kc0Zyb21QYXJlbnQsXG4gICAgICBwcm9wcy5oaXN0b3J5RW50cmllcyxcbiAgICAgIHNoYWtlLFxuICAgICAgc3RhdGUsXG4gICAgICB1bnNldEhhc05ldHdvcmtFcnJvcixcbiAgICBdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUtleVVwID0gdXNlQ2FsbGJhY2s8S2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD4+KFxuICAgIChldmVudCkgPT4ge1xuICAgICAgLy8gc2V0dGluZyB0aGUgc2VsZWN0aW9uIGNhbiBvbmx5IGhhcHBlbiBpbiBvbktleVVwXG4gICAgICBpZiAoc2hvdWxkU2VsZWN0RmllbGRUZXh0LmN1cnJlbnQpIHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgaW5wdXQuc2VsZWN0KCk7XG4gICAgICAgIHNob3VsZFNlbGVjdEZpZWxkVGV4dC5jdXJyZW50ID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5rZXkgIT09ICdFbnRlcicgJiYgIWlzTmV3V2luZG93Q29tYm8uY3VycmVudCkgcmV0dXJuIHRydWU7XG5cbiAgICAgIC8vIFVzZXIganVzdCB0cmlnZ2VyZWQgdGhlIHNlYXJjaFxuICAgICAgaWYgKHN0YXRlLnNlbGVjdGVkUmVzdWx0ID09PSAtMSkgcmV0dXJuIHRydWU7XG5cbiAgICAgIC8vIFVzZXIgaGFkIHNvbWV0aGluZyBzZWxlY3RlZCBhbmQgd2FudHMgdG8gZ28gdGhlcmVcbiAgICAgIGV4ZWN1dGUoc3RhdGUucmVzdWx0c1tzdGF0ZS5zZWxlY3RlZFJlc3VsdF0sIHtcbiAgICAgICAgb3BlbkluTmV3VGFiOiBpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQsXG4gICAgICB9KTtcblxuICAgICAgaXNOZXdXaW5kb3dDb21iby5jdXJyZW50ID0gZmFsc2U7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIFtleGVjdXRlLCBzdGF0ZS5yZXN1bHRzLCBzdGF0ZS5zZWxlY3RlZFJlc3VsdF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gdXNlQ2FsbGJhY2s8Q2hhbmdlRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+PihcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHNlYXJjaFRleHQgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgICBpZiAoc2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3Jlc2V0JyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdzZWFyY2hUZXh0JywgcGF5bG9hZDogc2VhcmNoVGV4dCB9KTtcblxuICAgICAgLy8gQSBzZWFyY2ggdmlhIG5ldHdvcmsgaXMgb25seSB0cmlnZ2VyZWQgd2hlbiB0aGVyZVxuICAgICAgLy8gYXJlIG1vcmUgdGhhbiB0aHJlZSBjaGFyYWN0ZXJzLiBTbyBubyBmYWxzZSBsb2FkaW5nXG4gICAgICAvLyBpbmRpY2F0aW9uIGlzIGdpdmVuLlxuICAgICAgaWYgKHNlYXJjaFRleHQudHJpbSgpLmxlbmd0aCA+IDMpIHtcbiAgICAgICAgc2V0SXNMb2FkaW5nKCk7XG4gICAgICB9XG5cbiAgICAgIHNlYXJjaEZyb21QYXJlbnQoc2VhcmNoVGV4dCkudGhlbihcbiAgICAgICAgKGFzeW5jUmVzdWx0czogQ29tbWFuZFtdKSA9PiB7XG4gICAgICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IoKTtcbiAgICAgICAgICB1bnNldElzTG9hZGluZygpO1xuXG4gICAgICAgICAgY29uc3QgZnVzZSA9IG5ldyBGdXNlKGFzeW5jUmVzdWx0cywge1xuICAgICAgICAgICAga2V5czogW1xuICAgICAgICAgICAgICB7IG5hbWU6ICd0ZXh0Jywgd2VpZ2h0OiAwLjYgfSxcbiAgICAgICAgICAgICAgeyBuYW1lOiAna2V5d29yZHMnLCB3ZWlnaHQ6IDAuNCB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIG1pbk1hdGNoQ2hhckxlbmd0aDogMixcbiAgICAgICAgICAgIGluY2x1ZGVTY29yZTogdHJ1ZSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IHNlYXJjaFJlc3VsdHMgPSBmdXNlXG4gICAgICAgICAgICAuc2VhcmNoKHNlYXJjaFRleHQpXG4gICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IHJlc3VsdHMgd2l0aCBhIG1hdGNoaW5nIHNjb3JlIG92ZXIgMC43NVxuICAgICAgICAgICAgLmZpbHRlcigocmVzdWx0KSA9PiAocmVzdWx0LnNjb3JlID8gcmVzdWx0LnNjb3JlIDwgMC43NSA6IGZhbHNlKSlcbiAgICAgICAgICAgIC8vIEtlZXAgYSBtYXhpbWFsIG9mIDkgcmVzdWx0c1xuICAgICAgICAgICAgLnNsaWNlKDAsIDkpO1xuXG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ3NldFNlYXJjaFRleHRSZXN1bHRzJyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHNlYXJjaFJlc3VsdHMubWFwKChyZXN1bHQpID0+IHJlc3VsdC5pdGVtKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgIHVuc2V0SXNMb2FkaW5nKCk7XG4gICAgICAgICAgc2V0SGFzTmV0d29ya0Vycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSxcbiAgICBbXG4gICAgICBzZWFyY2hGcm9tUGFyZW50LFxuICAgICAgc2V0SGFzTmV0d29ya0Vycm9yLFxuICAgICAgc2V0SXNMb2FkaW5nLFxuICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IsXG4gICAgICB1bnNldElzTG9hZGluZyxcbiAgICBdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUNvbnRhaW5lckNsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJyB9KTtcbiAgICBvbkNsb3NlRnJvbVBhcmVudCgpO1xuICB9LCBbb25DbG9zZUZyb21QYXJlbnRdKTtcblxuICBjb25zdCBjcmVhdGVDb21tYW5kTW91c2VFbnRlckhhbmRsZXIgPSB1c2VDYWxsYmFjazxcbiAgICAoaW5kZXg6IG51bWJlcikgPT4gTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+XG4gID4oXG4gICAgKGluZGV4KSA9PiAoKSA9PiB7XG4gICAgICAvLyBJbiBjYXNlIHRoZSBjdXJzb3IgaGFwcGVuZWQgdG8gYmUgaW4gYSBsb2NhdGlvbiB3aGVyZSBhXG4gICAgICAvLyByZXN1bHQgd291bGQgYXBwZWFyLCBpdCB3b3VsZCB0cmlnZ2VyIG9uTW91c2VFbnRlciBhbmQgdGhlXG4gICAgICAvLyByZXN1bHQgd291bGQgYmUgc2VsZWN0ZWQgaW1tZWRpYXRlbHkuIFRoaXMgaXMgbm90IHNvbWV0aGluZ1xuICAgICAgLy8gYSB1c2VyIHdvdWxkIGV4cGVjdCwgaGVuY2Ugd2UgcHJldmVudCBpdCBmcm9tIGhhcHBlbmluZy5cbiAgICAgIC8vIFRoZSB1c2VyIGhhcyB0byBtb3ZlIHRoZSBjdXJzb3IgdG8gYW4gb3B0aW9uIGV4cGxpY2l0bHkgZm9yXG4gICAgICAvLyBpdCB0byBiZWNvbWUgYWN0aXZlLiBIb3dldmVyLCB0aGUgdXNlciBjYW4gYWx3YXlzIGNsaWNrIGFuZFxuICAgICAgLy8gdGhhdCBhY3Rpb24gd2lsbCBiZSB0cmlnZ2VyZWQuXG4gICAgICBpZiAoc2tpcE5leHRTZWxlY3Rpb24uY3VycmVudCkge1xuICAgICAgICBza2lwTmV4dFNlbGVjdGlvbi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gc2V0cyB0aGUgc2VsZWN0ZWQgcmVzdWx0LCBtYWlubHkgZm9yIHRoZSBob3ZlciBlZmZlY3RcbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3NlbGVjdGVkUmVzdWx0JywgcGF5bG9hZDogaW5kZXggfSk7XG4gICAgfSxcbiAgICBbXVxuICApO1xuICBjb25zdCBjcmVhdGVDb21tYW5kQ2xpY2tIYW5kbGVyID0gdXNlQ2FsbGJhY2s8XG4gICAgKGNvbW1hbmQ6IENvbW1hbmQpID0+IE1vdXNlRXZlbnRIYW5kbGVyPEhUTUxEaXZFbGVtZW50PlxuICA+KFxuICAgIChjb21tYW5kKSA9PiAoZXZlbnQpID0+IHtcbiAgICAgIGV4ZWN1dGUoY29tbWFuZCwge1xuICAgICAgICBvcGVuSW5OZXdUYWI6IGhhc05ld1dpbmRvd01vZGlmaWVyKGV2ZW50KSxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgW2V4ZWN1dGVdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8QnV0bGVyQ29udGFpbmVyXG4gICAgICBvbkNsaWNrPXtoYW5kbGVDb250YWluZXJDbGlja31cbiAgICAgIGRhdGEtdGVzdGlkPVwicXVpY2stYWNjZXNzXCJcbiAgICAgIHRhYkluZGV4PXstMX1cbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17c2VhcmNoQ29udGFpbmVyUmVmfVxuICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3VpS2l0RGVzaWduVG9rZW5zLmNvbG9yU3VyZmFjZX07XG4gICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICR7dWlLaXREZXNpZ25Ub2tlbnMuYm9yZGVyUmFkaXVzNH07XG4gICAgICAgICAgbWluLWhlaWdodDogNDBweDtcblxuICAgICAgICAgIC8qIG9uZSBtb3JlIHRoYW4gYXBwLWJhciAoMjAwMDApIGFuZCBvbmUgbW9yZSB0aGFuIHRoZSBvdmVybGF5ICgyMDAwMSkgKi9cbiAgICAgICAgICB6LWluZGV4OiAyMDAwMjtcbiAgICAgICAgICB3aWR0aDogNDAwcHg7XG4gICAgICAgICAgbWFyZ2luOiA0MHB4IGF1dG87XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICAtbW96LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDEwcHggMzBweCAtOHB4IHJnYmEoMCwgMCwgMCwgMC43NSk7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206ICR7c3RhdGUuaGFzTmV0d29ya0Vycm9yXG4gICAgICAgICAgICA/ICcwJ1xuICAgICAgICAgICAgOiB1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nU307XG4gICAgICAgIGB9XG4gICAgICAgIG9uQ2xpY2s9eyhldmVudCkgPT4ge1xuICAgICAgICAgIC8vIEF2b2lkIGNsb3Npbmcgd2hlbiB0aGUgc2VhcmNoQ29udGFpbmVyIGl0c2VsZiBpcyBjbGlja2VkXG4gICAgICAgICAgLy8gSWYgd2UgZG9uJ3QgZG8gdGhpcywgdGhlbiB0aGUgb3ZlcmxheSB3aWxsIGNsb3NlIHdoZW4gZS5nLlxuICAgICAgICAgIC8vIHRoZSBzZWFyY2ggaW5wdXQgaXMgY2xpY2tlZC5cbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGB9XG4gICAgICAgID5cbiAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIGh0bWxGb3I9XCJxdWljay1hY2Nlc3Mtc2VhcmNoLWlucHV0XCJcbiAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nTX07XG4gICAgICAgICAgICAgIG1hcmdpbi10b3A6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgYH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U2VhcmNoSWNvbiBjb2xvcj1cIm5ldXRyYWw2MFwiIC8+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGlkPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICByZWY9e3NlYXJjaElucHV0UmVmfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2ludGwuZm9ybWF0TWVzc2FnZShtZXNzYWdlcy5pbnB1dFBsYWNlaG9kZXIpfVxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICAgIG91dGxpbmU6IDA7XG4gICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjJweDtcbiAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICAgICAgICAgICAgcGFkZGluZzogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nTX1cbiAgICAgICAgICAgICAgICAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdNfSAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdTfVxuICAgICAgICAgICAgICAgICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAmOjpwbGFjZWhvbGRlciB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICR7dWlLaXREZXNpZ25Ub2tlbnMuY29sb3JOZXV0cmFsNjB9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBgfVxuICAgICAgICAgICAgdmFsdWU9e3N0YXRlLnNlYXJjaFRleHR9XG4gICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgb25LZXlEb3duPXtoYW5kbGVLZXlEb3dufVxuICAgICAgICAgICAgb25LZXlVcD17aGFuZGxlS2V5VXB9XG4gICAgICAgICAgICBhdXRvRm9jdXM9e3RydWV9XG4gICAgICAgICAgICBhdXRvQ29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJxdWljay1hY2Nlc3Mtc2VhcmNoLWlucHV0XCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIHtzdGF0ZS5pc0xvYWRpbmcgJiYgKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nU307XG4gICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdTfTtcbiAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPExvYWRpbmdTcGlubmVyIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXRlLmhhc05ldHdvcmtFcnJvcilcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHt1aUtpdERlc2lnblRva2Vucy5jb2xvckVycm9yfTtcbiAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgICAgICAgICAgICBjb2xvcjogJHt1aUtpdERlc2lnblRva2Vucy5jb2xvclN1cmZhY2V9O1xuICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAke3VpS2l0RGVzaWduVG9rZW5zLmZvbnRTaXplMjB9O1xuICAgICAgICAgICAgICAgICAgcGFkZGluZzogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nWHN9O1xuICAgICAgICAgICAgICAgIGB9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSB7Li4ubWVzc2FnZXMub2ZmbGluZX0gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKHN0YXRlLnJlc3VsdHMubGVuZ3RoID09PSAwICYmIHN0YXRlLnNlYXJjaFRleHQudHJpbSgpLmxlbmd0aCA+IDApXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgICAgICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7dWlLaXREZXNpZ25Ub2tlbnMuY29sb3JOZXV0cmFsfTtcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAke3VpS2l0RGVzaWduVG9rZW5zLmNvbG9yU29saWR9O1xuICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHt1aUtpdERlc2lnblRva2Vucy5mb250U2l6ZTIwfTtcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1hzfTtcbiAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2Ugey4uLm1lc3NhZ2VzLm5vUmVzdWx0c30gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuIHN0YXRlLnJlc3VsdHMubWFwKChjb21tYW5kLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPEJ1dGxlckNvbW1hbmRcbiAgICAgICAgICAgICAga2V5PXtjb21tYW5kLmlkfVxuICAgICAgICAgICAgICBjb21tYW5kPXtjb21tYW5kfVxuICAgICAgICAgICAgICBpc1NlbGVjdGVkPXtzdGF0ZS5zZWxlY3RlZFJlc3VsdCA9PT0gaW5kZXh9XG4gICAgICAgICAgICAgIG9uTW91c2VFbnRlcj17Y3JlYXRlQ29tbWFuZE1vdXNlRW50ZXJIYW5kbGVyKGluZGV4KX1cbiAgICAgICAgICAgICAgb25DbGljaz17Y3JlYXRlQ29tbWFuZENsaWNrSGFuZGxlcihjb21tYW5kKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSk7XG4gICAgICAgIH0pKCl9XG4gICAgICA8L2Rpdj5cbiAgICA8L0J1dGxlckNvbnRhaW5lcj5cbiAgKTtcbn07XG5CdXRsZXIuZGlzcGxheU5hbWUgPSAnQnV0bGVyJztcblxuY29uc3QgQnV0bGVyV2l0aEFuaW1hdGlvbiA9IChwcm9wczogT21pdDxQcm9wcywgJ2NsYXNzTmFtZVNoYWtlQW5pbWF0aW9uJz4pID0+IChcbiAgPENsYXNzTmFtZXM+XG4gICAgeyh7IGNzcyB9KSA9PiAoXG4gICAgICA8QnV0bGVyXG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgY2xhc3NOYW1lU2hha2VBbmltYXRpb249e2Nzc2BcbiAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IDAuNDVzO1xuICAgICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGJvdGg7XG4gICAgICAgICAgYW5pbWF0aW9uLW5hbWU6ICR7c2hha2VBbmltYXRpb259O1xuICAgICAgICBgfVxuICAgICAgLz5cbiAgICApfVxuICA8L0NsYXNzTmFtZXM+XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBCdXRsZXJXaXRoQW5pbWF0aW9uO1xuIl19 */"),
892
- children: jsxRuntime.jsx(icons.SearchIcon, {
893
- color: "neutral60"
894
- })
895
- }), jsxRuntime.jsx("input", {
896
- id: "quick-access-search-input",
897
- ref: searchInputRef,
898
- placeholder: intl.formatMessage(messages.inputPlacehoder),
899
- type: "text",
900
- css: /*#__PURE__*/react.css("width:100%;border:0;outline:0;font-size:22px;font-weight:300;padding:", designSystem.designTokens.spacingM, " ", designSystem.designTokens.spacingM, " ", designSystem.designTokens.spacingS, " ", designSystem.designTokens.spacingS, ";&::placeholder{color:", designSystem.designTokens.colorNeutral60, ";}" + (process.env.NODE_ENV === "production" ? "" : ";label:Butler;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBaW9Cb0IiLCJmaWxlIjoiYnV0bGVyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEtleWJvYXJkRXZlbnRIYW5kbGVyLFxuICBDaGFuZ2VFdmVudEhhbmRsZXIsXG4gIEtleWJvYXJkRXZlbnQsXG4gIE1vdXNlRXZlbnRIYW5kbGVyLFxuICBNb3VzZUV2ZW50LFxuICB1c2VSZWR1Y2VyLFxuICB1c2VSZWYsXG4gIHVzZUNhbGxiYWNrLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBGdXNlIGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IGxhc3QgZnJvbSAnbG9kYXNoL2xhc3QnO1xuaW1wb3J0IHsgRm9ybWF0dGVkTWVzc2FnZSwgdXNlSW50bCB9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IHsgZGVzaWduVG9rZW5zIGFzIHVpS2l0RGVzaWduVG9rZW5zIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyBTZWFyY2hJY29uIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvaWNvbnMnO1xuaW1wb3J0IExvYWRpbmdTcGlubmVyIGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2xvYWRpbmctc3Bpbm5lcic7XG5pbXBvcnQgQnV0bGVyQ29tbWFuZCBmcm9tICcuLi9idXRsZXItY29tbWFuZCc7XG5pbXBvcnQgQnV0bGVyQ29udGFpbmVyIGZyb20gJy4uL2J1dGxlci1jb250YWluZXInO1xuaW1wb3J0IG1lc3NhZ2VzIGZyb20gJy4uL21lc3NhZ2VzJztcbmltcG9ydCB0eXBlIHtcbiAgQ29tbWFuZCxcbiAgU2VhcmNoVGV4dCxcbiAgU2VsZWN0ZWRSZXN1bHQsXG4gIFN0YWNrLFxuICBIaXN0b3J5RW50cnksXG59IGZyb20gJy4uL3R5cGVzJztcblxuY29uc3QgaXNTZWxlY3RBbGxDb21ibyA9IChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cbiAgZXZlbnQua2V5ID09PSAnYScgJiZcbiAgZXZlbnQubWV0YUtleSAmJlxuICAhZXZlbnQuY3RybEtleSAmJlxuICAhZXZlbnQuYWx0S2V5ICYmXG4gICFldmVudC5zaGlmdEtleTtcblxuY29uc3QgaXNDbG9zZUNvbWJvID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PlxuICBldmVudC5rZXkgPT09ICdFc2NhcGUnICYmXG4gICFldmVudC5tZXRhS2V5ICYmXG4gICFldmVudC5jdHJsS2V5ICYmXG4gICFldmVudC5hbHRLZXkgJiZcbiAgIWV2ZW50LnNoaWZ0S2V5O1xuXG5jb25zdCBnZXRQbGF0Zm9ybSA9ICgpID0+IHtcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdXaW4nKSkgcmV0dXJuICd3aW5kb3dzJztcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdNYWMnKSkgcmV0dXJuICdtYWNvcyc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnWDExJykpIHJldHVybiAndW5peCc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnTGludXgnKSkgcmV0dXJuICdsaW51eCc7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBoYXNOZXdXaW5kb3dNb2RpZmllciA9IChcbiAgZXZlbnQ6IEtleWJvYXJkRXZlbnQ8SFRNTEVsZW1lbnQ+IHwgTW91c2VFdmVudDxIVE1MRWxlbWVudD5cbikgPT4ge1xuICBjb25zdCBwbGF0Zm9ybSA9IGdldFBsYXRmb3JtKCk7XG4gIHN3aXRjaCAocGxhdGZvcm0pIHtcbiAgICBjYXNlICdtYWNvcyc6XG4gICAgICByZXR1cm4gZXZlbnQubWV0YUtleTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGV2ZW50LmN0cmxLZXk7XG4gIH1cbn07XG5cbmNvbnN0IHNoYWtlQW5pbWF0aW9uID0ga2V5ZnJhbWVzYFxuICBmcm9tLFxuICB0byB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcbiAgfVxuXG4gIDE0JSxcbiAgNDIlLFxuICA3MCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTNweCwgMCwgMCk7XG4gIH1cblxuICAyOCUsXG4gIDU2JSxcbiAgODQlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDNweCwgMCwgMCk7XG4gIH1cbmA7XG5cbnR5cGUgU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogYm9vbGVhbjtcbiAgaXNMb2FkaW5nOiBib29sZWFuO1xuICBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0O1xuICBzZWxlY3RlZFJlc3VsdDogU2VsZWN0ZWRSZXN1bHQ7XG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IGJvb2xlYW47XG4gIHJlc3VsdHM6IENvbW1hbmRbXTtcbiAgc3RhY2s6IFN0YWNrW107XG59O1xudHlwZSBBY3Rpb24gPVxuICB8IHsgdHlwZTogJ25ldHdvcmtFcnJvcic7IHBheWxvYWQ6IGJvb2xlYW4gfVxuICB8IHsgdHlwZTogJ2xvYWRpbmcnOyBwYXlsb2FkOiBib29sZWFuIH1cbiAgfCB7IHR5cGU6ICdzZWxlY3RlZFJlc3VsdCc7IHBheWxvYWQ6IG51bWJlciB9XG4gIHwgeyB0eXBlOiAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH1cbiAgfCB7IHR5cGU6ICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfVxuICB8IHtcbiAgICAgIHR5cGU6ICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JztcbiAgICAgIHBheWxvYWQ6IHsgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDsgcmVzdWx0czogQ29tbWFuZFtdIH07XG4gICAgfVxuICB8IHsgdHlwZTogJ3NldE5leHRDb21tYW5kcyc7IHBheWxvYWQ6IHsgcmVzdWx0czogQ29tbWFuZFtdIH0gfVxuICB8IHtcbiAgICAgIHR5cGU6ICdzZXRQcmV2Q29tbWFuZHMnO1xuICAgICAgcGF5bG9hZDogeyBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0OyByZXN1bHRzOiBDb21tYW5kW10gfTtcbiAgICB9XG4gIHwgeyB0eXBlOiAnc2VhcmNoVGV4dCc7IHBheWxvYWQ6IHN0cmluZyB9XG4gIHwgeyB0eXBlOiAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOyBwYXlsb2FkOiBDb21tYW5kW10gfVxuICB8IHsgdHlwZTogJ3Jlc2V0U2VhcmNoVGV4dCcgfVxuICB8IHsgdHlwZTogJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJyB9XG4gIHwgeyB0eXBlOiAncmVzZXQnIH07XG5jb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogZmFsc2UsXG4gIGlzTG9hZGluZzogZmFsc2UsXG4gIHNlYXJjaFRleHQ6ICcnLFxuICBzZWxlY3RlZFJlc3VsdDogLTEsXG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IHRydWUsXG4gIHJlc3VsdHM6IFtdLFxuICBzdGFjazogW10sXG59O1xuY29uc3QgcmVkdWNlciA9IChzdGF0ZTogU3RhdGUgPSBpbml0aWFsU3RhdGUsIGFjdGlvbjogQWN0aW9uKTogU3RhdGUgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnbmV0d29ya0Vycm9yJzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBoYXNOZXR3b3JrRXJyb3I6IGFjdGlvbi5wYXlsb2FkIH07XG4gICAgY2FzZSAnbG9hZGluZyc6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgaXNMb2FkaW5nOiBhY3Rpb24ucGF5bG9hZCB9O1xuICAgIGNhc2UgJ3NlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQgfTtcbiAgICBjYXNlICdpbmNyZW1lbnRTZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6XG4gICAgICAgICAgc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IHN0YXRlLnJlc3VsdHMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0ICsgMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ2RlY3JlbWVudFNlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDpcbiAgICAgICAgICBzdGF0ZS5zZWxlY3RlZFJlc3VsdCA8IDFcbiAgICAgICAgICAgID8gc3RhdGUucmVzdWx0cy5sZW5ndGggLSAxXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0IC0gMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ3BpY2tDb21tYW5kRnJvbUhpc3RvcnknOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OiAwLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZC5zZWFyY2hUZXh0LFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZC5yZXN1bHRzLFxuICAgICAgICBzdGFjazogW10sXG4gICAgICAgIC8vIFRoZSBoaXN0b3J5IGRvZXMgbm90IGdldCBjaGFuZ2VkIGhlcmUsIGl0IHdpbGwgYmUgY2hhbmdlZCBhbG9uZ1xuICAgICAgICAvLyB3aXRoIHRoZSByZWd1bGFyIGZsb3cuXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldE5leHRDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc3RhY2s6IFtcbiAgICAgICAgICAuLi5zdGF0ZS5zdGFjayxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZWFyY2hUZXh0OiBzdGF0ZS5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgcmVzdWx0czogc3RhdGUucmVzdWx0cyxcbiAgICAgICAgICAgIHNlbGVjdGVkUmVzdWx0OiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogMCxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLnJlc3VsdHMsXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldFByZXZDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQuc2VhcmNoVGV4dCxcbiAgICAgICAgcmVzdWx0czogYWN0aW9uLnBheWxvYWQucmVzdWx0cyxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IDAsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgICAvLyBvbWl0IGxhc3QgaXRlbVxuICAgICAgICBzdGFjazogc3RhdGUuc3RhY2suc2xpY2UoMCwgLTEpLFxuICAgICAgfTtcbiAgICBjYXNlICdzZWFyY2hUZXh0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgLy8gY2xlYXIgbmV0d29yayBlcnJvciB3aGVuIHNlYXJjaCB0ZXh0IGlzIGNsZWFyZWQsIHNvIHRoYXQgdXNlcnNcbiAgICAgICAgLy8gYXJlIHRlbXB0ZWQgdG8gcmV0cnlcbiAgICAgICAgaGFzTmV0d29ya0Vycm9yOiBhY3Rpb24ucGF5bG9hZC5sZW5ndGggPiAwICYmIHN0YXRlLmhhc05ldHdvcmtFcnJvcixcbiAgICAgIH07XG4gICAgY2FzZSAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQubGVuZ3RoID4gMCA/IDAgOiAtMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogdHJ1ZSxcbiAgICAgICAgc3RhY2s6IFtdLFxuICAgICAgfTtcbiAgICBjYXNlICdyZXNldFNlYXJjaFRleHQnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlYXJjaFRleHQ6ICcnLCByZXN1bHRzOiBbXSwgc2VsZWN0ZWRSZXN1bHQ6IC0xIH07XG4gICAgY2FzZSAncmVzZXRSZXN1bHRzV2hlbkNsb3NpbmcnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlbGVjdGVkUmVzdWx0OiAtMSwgZW5hYmxlSGlzdG9yeTogdHJ1ZSB9O1xuICAgIGNhc2UgJ3Jlc2V0JzpcbiAgICAgIHJldHVybiBpbml0aWFsU3RhdGU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufTtcblxudHlwZSBQcm9wcyA9IHtcbiAgaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdO1xuICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlOiAoaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdKSA9PiB2b2lkO1xuICBzZWFyY2g6IChzZWFyY2hUZXh0OiBTZWFyY2hUZXh0KSA9PiBQcm9taXNlPENvbW1hbmRbXT47XG4gIGdldE5leHRDb21tYW5kczogKGNvbW1hbmQ6IENvbW1hbmQpID0+IFByb21pc2U8Q29tbWFuZFtdPjtcbiAgZXhlY3V0ZUNvbW1hbmQ6IChjb21tYW5kOiBDb21tYW5kLCBtZXRhOiB7IG9wZW5Jbk5ld1RhYjogYm9vbGVhbiB9KSA9PiB2b2lkO1xuICBvbkNsb3NlOiAoKSA9PiB2b2lkO1xuICBjbGFzc05hbWVTaGFrZUFuaW1hdGlvbjogc3RyaW5nO1xufTtcbmNvbnN0IEJ1dGxlciA9IChwcm9wczogUHJvcHMpID0+IHtcbiAgY29uc3QgaW50bCA9IHVzZUludGwoKTtcbiAgY29uc3QgW3N0YXRlLCBkaXNwYXRjaF0gPSB1c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxTdGF0ZSk7XG5cbiAgY29uc3Qgc2hvdWxkU2VsZWN0RmllbGRUZXh0ID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3QgaXNOZXdXaW5kb3dDb21ibyA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IHNraXBOZXh0U2VsZWN0aW9uID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3Qgc2VhcmNoQ29udGFpbmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3Qgc2VhcmNoSW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbCk7XG5cbiAgY29uc3Qgc2V0SGFzTmV0d29ya0Vycm9yID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ25ldHdvcmtFcnJvcicsIHBheWxvYWQ6IHRydWUgfSk7XG4gIH0sIFtdKTtcbiAgY29uc3QgdW5zZXRIYXNOZXR3b3JrRXJyb3IgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbmV0d29ya0Vycm9yJywgcGF5bG9hZDogZmFsc2UgfSk7XG4gIH0sIFtdKTtcbiAgY29uc3Qgc2V0SXNMb2FkaW5nID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ2xvYWRpbmcnLCBwYXlsb2FkOiB0cnVlIH0pO1xuICB9LCBbXSk7XG4gIGNvbnN0IHVuc2V0SXNMb2FkaW5nID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ2xvYWRpbmcnLCBwYXlsb2FkOiBmYWxzZSB9KTtcbiAgfSwgW10pO1xuXG4gIC8vIERlc3RydWN0dXJlIGZ1bmN0aW9ucyBmcm9tIHByb3BzIHRvIHJlZmVyZW5jZSB0aGVtIGluIHRoZSBob29rIGRlcGVuZGVuY3kgbGlzdFxuICBjb25zdCB7XG4gICAgc2VhcmNoOiBzZWFyY2hGcm9tUGFyZW50LFxuICAgIG9uQ2xvc2U6IG9uQ2xvc2VGcm9tUGFyZW50LFxuICAgIGV4ZWN1dGVDb21tYW5kOiBleGVjdXRlQ29tbWFuZEZyb21QYXJlbnQsXG4gICAgb25IaXN0b3J5RW50cmllc0NoYW5nZTogb25IaXN0b3J5RW50cmllc0NoYW5nZUZyb21QYXJlbnQsXG4gICAgZ2V0TmV4dENvbW1hbmRzOiBnZXROZXh0Q29tbWFuZHNGcm9tUGFyZW50LFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3Qgc2hha2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50KSB7XG4gICAgICBzZWFyY2hDb250YWluZXJSZWYuY3VycmVudC5jbGFzc0xpc3QucmVtb3ZlKFxuICAgICAgICBwcm9wcy5jbGFzc05hbWVTaGFrZUFuaW1hdGlvblxuICAgICAgKTtcbiAgICAgIC8vIC0+IHRyaWdnZXJpbmcgcmVmbG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdm9pZFxuICAgICAgdm9pZCBzZWFyY2hDb250YWluZXJSZWYuY3VycmVudC5vZmZzZXRXaWR0aDtcbiAgICAgIHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50LmNsYXNzTGlzdC5hZGQocHJvcHMuY2xhc3NOYW1lU2hha2VBbmltYXRpb24pO1xuICAgIH1cbiAgfSwgW3Byb3BzLmNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uXSk7XG5cbiAgY29uc3QgZXhlY3V0ZSA9IHVzZUNhbGxiYWNrKFxuICAgIChjb21tYW5kOiBDb21tYW5kLCBtZXRhOiB7IG9wZW5Jbk5ld1RhYjogYm9vbGVhbiB9KSA9PiB7XG4gICAgICAvLyBPbmx5IG1haW4gZW50cmllcyBnZXQgYWRkZWQgdG8gaGlzdG9yeSwgc28gd2hlbiBhIHN1YmNvbW1hbmQgaXMgZXhlY3V0ZWQsXG4gICAgICAvLyB3ZSBhZGQgdGhlIG1haW4gY29tbWFuZCBvZiBpdCB0byB0aGUgaGlzdG9yeSAodGhlIHRvcC1sZXZlbCBjb21tYW5kKS5cbiAgICAgIC8vXG4gICAgICAvLyBUaGUga2V5IHRvIGlkZW50aWZ5IGhpc3RvcnkgZW50cmllcyBieSBpcyBhbHdheXMgdGhlIHNlYXJjaFRleHRcbiAgICAgIC8vIFRoZXJlIHdpbGwgbmV2ZXIgYmUgdHdvIGhpc3RvcnkgZW50cmllcyB3aXRoIHRoZSBzYW1lIHNlYXJjaFRleHRcbiAgICAgIGNvbnN0IGVudHJ5ID1cbiAgICAgICAgc3RhdGUuc3RhY2subGVuZ3RoID09PSAwXG4gICAgICAgICAgPyAvLyBUaGUgc3RhY2sgaXMgZW1wdHksIHNvIHdlIGFyZSBleGVjdXRpbmcgYSB0b3AtbGV2ZWwgY29tbWFuZFxuICAgICAgICAgICAgeyBzZWFyY2hUZXh0OiBzdGF0ZS5zZWFyY2hUZXh0LCByZXN1bHRzOiBzdGF0ZS5yZXN1bHRzIH1cbiAgICAgICAgICA6IC8vIFdlIGFyZSBleGVjdXRpbmcgYSBzdWJjb21tYW5kLCBzbyB3ZSBnZXQgdGhlIHRvcC1sZXZlbCBjb21tYW5kIGZvciBpdCxcbiAgICAgICAgICAgIC8vIHdoaWNoIGlzIGF0IHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzZWFyY2hUZXh0OiBzdGF0ZS5zdGFja1swXS5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgICByZXN1bHRzOiBzdGF0ZS5zdGFja1swXS5yZXN1bHRzLFxuICAgICAgICAgICAgfTtcblxuICAgICAgLy8gQWRkIHRoZSBlbnRyeSB0byB0aGUgaGlzdG9yeSwgd2hpbGUgZXhjbHVkaW5nIGFueSBlYXJsaWVyIGhpc3RvcnkgZW50cnlcbiAgICAgIC8vIHdpdGggdGhlIHNhbWUgc2VhcmNoIHRleHQuIFRoaXMgZWZmZWN0aXZlbHkgXCJtb3Zlc1wiIHRoYXQgZW50cnkgdG8gdGhlXG4gICAgICAvLyB0b3Agb2YgdGhlIGhpc3RvcnkgKHdpdGggdGhlIG1vc3QgcmVjZW50IHJlc3VsdHMpLCBvciBhcHBlbmRzIGEgbmV3IGVudHJ5XG4gICAgICAvLyB3aGVuIGl0IGRpZG4ndCBleGlzdCBiZWZvcmUuXG4gICAgICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlRnJvbVBhcmVudChbXG4gICAgICAgIC4uLnByb3BzLmhpc3RvcnlFbnRyaWVzLmZpbHRlcihcbiAgICAgICAgICAoY29tbWFuZCkgPT4gY29tbWFuZC5zZWFyY2hUZXh0ICE9PSBlbnRyeS5zZWFyY2hUZXh0XG4gICAgICAgICksXG4gICAgICAgIGVudHJ5LFxuICAgICAgXSk7XG5cbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3Jlc2V0U2VhcmNoVGV4dCcgfSk7XG5cbiAgICAgIG9uQ2xvc2VGcm9tUGFyZW50KCk7XG5cbiAgICAgIGV4ZWN1dGVDb21tYW5kRnJvbVBhcmVudChjb21tYW5kLCBtZXRhKTtcbiAgICB9LFxuICAgIFtcbiAgICAgIGV4ZWN1dGVDb21tYW5kRnJvbVBhcmVudCxcbiAgICAgIG9uQ2xvc2VGcm9tUGFyZW50LFxuICAgICAgb25IaXN0b3J5RW50cmllc0NoYW5nZUZyb21QYXJlbnQsXG4gICAgICBwcm9wcy5oaXN0b3J5RW50cmllcyxcbiAgICAgIHN0YXRlLnJlc3VsdHMsXG4gICAgICBzdGF0ZS5zZWFyY2hUZXh0LFxuICAgICAgc3RhdGUuc3RhY2ssXG4gICAgXVxuICApO1xuICBjb25zdCBoYW5kbGVLZXlEb3duID0gdXNlQ2FsbGJhY2s8S2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD4+KFxuICAgIChldmVudCkgPT4ge1xuICAgICAgLy8gUHJldmVudGluZyBjdXJzb3IganVtcHMgY2FuIG9ubHkgaGFwcGVuIGluIG9uS2V5RG93biwgYnV0IG5vdCBpbiBvbktleVVwXG4gICAgICBldmVudC5wZXJzaXN0KCk7XG5cbiAgICAgIC8vIFdlIHdhbnQgdG8ga25vdyB3aGVuIHRoZSB1c2VyIHByZXNzZXMgY21kK2VudGVyIChjbWQgYmVpbmcgYSBtZXRhIGtleSkuXG4gICAgICAvLyBXZSBhcmUgb25seSB0b2xkIGFib3V0IHRoaXMgaW4ga2V5RG93biwgYnV0IG5vdCBpbiBrZXlVcCwgc28gd2UgbmVlZFxuICAgICAgLy8gdG8gaGFuZGxlIGl0IGhlcmVcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicgJiYgaGFzTmV3V2luZG93TW9kaWZpZXIoZXZlbnQpKSB7XG4gICAgICAgIGlzTmV3V2luZG93Q29tYm8uY3VycmVudCA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gQXZvaWQgc2VsZWN0aW5nIHRoZSB3aG9sZSBwYWdlIHdoZW4gdXNlciBzZWxlY3RlcyBldmVyeXRoaW5nIHdpdGhcbiAgICAgIC8vIGEga2V5Ym9hcmQgc2hvcnRjdXQuIFRoZXJlIGlzIHByb2JhYmx5IGEgYmV0dGVyIHdheSB0byBkbyB0aGlzIHRob3VnaC5cbiAgICAgIC8vIFRoaXMgcHJldmVudHMgdGhlIHdob2xlIHBhZ2UgZnJvbSBiZWluZyBzZWxlY3RlZCBpbiBjYXNlIHRoZSB1c2VyXG4gICAgICAvLyAxKSBvcGVucyB0aGUgc2VhcmNoIGJveFxuICAgICAgLy8gMikgdHlwZXMgaW50byBpdFxuICAgICAgLy8gMykgc2VsZWN0cyBhbGwgdGV4dCB1c2luZyBjbWQrYVxuICAgICAgLy8gNCkgY2xvc2VzIHRoZSBzZWFyY2ggYm94IHdpdGggZXNjXG4gICAgICAvLyBXaXRob3V0IHRoaXMgaGFuZGxpbmcsIHRoZSB3aG9sZSBwYWdlIHdvdWxkIG5vdyBiZSBzZWxlY3RlZFxuICAgICAgaWYgKGlzU2VsZWN0QWxsQ29tYm8oZXZlbnQpKSB7XG4gICAgICAgIC8vIFRoaXMgc3RvcHMgdGhlIGJyb3dzZXIgZnJvbSBzZWxlY3RpbmcgYW55dGhpbmdcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHNlYXJjaElucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAvLyBUaGlzIHNlbGVjdHMgdGhlIHRleHQgaW4gdGhlIHNlYXJjaCBpbnB1dFxuICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2V0U2VsZWN0aW9uUmFuZ2UoMCwgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gYXZvaWQgaW50ZXJmZXJpbmcgd2l0aCBvdGhlciBrZXkgY29tYmluYXRpb25zIHVzaW5nIG1vZGlmaWVyIGtleXNcbiAgICAgIGlmIChldmVudC5jdHJsS2V5IHx8IGV2ZW50LmFsdEtleSB8fCBldmVudC5zaGlmdEtleSB8fCBldmVudC5tZXRhS2V5KVxuICAgICAgICByZXR1cm47XG4gICAgICBpZiAoaXNDbG9zZUNvbWJvKGV2ZW50KSkgcmV0dXJuO1xuXG4gICAgICAvLyBza2lwIG5leHQgbW91c2VFbnRlciB0byBhdm9pZCBzZXR0aW5nIHNlbGVjdGVkUmVzdWx0IHdoZW4gY3Vyc29yIGp1c3RcbiAgICAgIC8vIGhhcHBlbnMgdG8gYmUgd2hlcmUgdGhlIHJlc3VsdHMgd2lsbCBwb3AgdXBcbiAgICAgIHNraXBOZXh0U2VsZWN0aW9uLmN1cnJlbnQgPSB0cnVlO1xuXG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgICAvLyBwcmV2ZW50IGN1cnNvciBmcm9tIGp1bXBpbmcgdG8gZW5kIG9mIHRleHQgaW5wdXRcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgICAgLy8gYnJvd3NlIHRocm91Z2ggaGlzdG9yeVxuICAgICAgICBpZiAoXG4gICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAoc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPCAxICYmIHN0YXRlLmVuYWJsZUhpc3RvcnkpXG4gICAgICAgICkge1xuICAgICAgICAgIHNob3VsZFNlbGVjdEZpZWxkVGV4dC5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID1cbiAgICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgID8gLy8gV2hlbiBnb2luZyBiYWNrIHRoZSBmaXJzdCBzdGVwXG4gICAgICAgICAgICAgICAgLTFcbiAgICAgICAgICAgICAgOiAvLyBXaGVuIGdvaW5nIGJhY2sgbW9yZSB0aGFuIG9uZSBzdGVwXG4gICAgICAgICAgICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgKGNvbW1hbmQpID0+IGNvbW1hbmQuc2VhcmNoVGV4dCA9PT0gc3RhdGUuc2VhcmNoVGV4dFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgLy8gUGljayB0aGUgcHJldmlvdXMgY29tbWFuZCBmcm9tIHRoZSBoaXN0b3J5XG4gICAgICAgICAgY29uc3QgcHJldkNvbW1hbmQgPVxuICAgICAgICAgICAgc2VsZWN0ZWRJbmRleCA9PT0gLTFcbiAgICAgICAgICAgICAgPyAvLyBwcmV2aW91cyBjb21tYW5kIG9uIHRvcCBvZiB0aGUgaGlzdG9yeSB3aGVuIGdvaW5nIGJhY2sgb25cbiAgICAgICAgICAgICAgICAvLyBmaXJzdCBzdGVwXG4gICAgICAgICAgICAgICAgbGFzdChwcm9wcy5oaXN0b3J5RW50cmllcylcbiAgICAgICAgICAgICAgOiAvLyBwcmV2aW91cyBjb21tYW5kIGlzIGRlZXBlciBkb3duXG4gICAgICAgICAgICAgICAgLy8gV2hlbiB0aGUgaGlzdG9yeSBkb2VzIG5vdCBleGlzdCAobmVnYXRpdmUgaW5kZXgpLCB0aGVuXG4gICAgICAgICAgICAgICAgLy8gdGhpcyBpbXBsaWNpdGx5IHJldHVybnMgdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXNbc2VsZWN0ZWRJbmRleCAtIDFdO1xuICAgICAgICAgIC8vIFNraXAgd2hlbiBubyBwcmV2aW91cyBlbnRyeSBleGlzdHMgaW4gdGhlIGhpc3RvcnlcbiAgICAgICAgICBpZiAoIXByZXZDb21tYW5kKSByZXR1cm47XG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ3BpY2tDb21tYW5kRnJvbUhpc3RvcnknLFxuICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgICBzZWFyY2hUZXh0OiBwcmV2Q29tbWFuZC5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgICByZXN1bHRzOiBwcmV2Q29tbWFuZC5yZXN1bHRzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcHJldmVudCBjdXJzb3IgZnJvbSBqdW1waW5nIHRvIGJlZ2lubmluZyBvZiB0ZXh0IGlucHV0XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ2RlY3JlbWVudFNlbGVjdGVkUmVzdWx0JyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXRlLnNlbGVjdGVkUmVzdWx0ID4gLTEpIHtcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnKSB7XG4gICAgICAgICAgY29uc3QgY29tbWFuZCA9IHN0YXRlLnJlc3VsdHNbc3RhdGUuc2VsZWN0ZWRSZXN1bHRdO1xuICAgICAgICAgIGNvbnN0IHNlYXJjaFRleHQgPSBzdGF0ZS5zZWFyY2hUZXh0O1xuICAgICAgICAgIGNvbnN0IGlzQ3Vyc29yQXRFbmQgPVxuICAgICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudCAmJlxuICAgICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XG5cbiAgICAgICAgICBjb25zdCBpc0V2ZXJ5dGhpbmdTZWxlY3RlZCA9XG4gICAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50ICYmXG4gICAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0ID09PSAwICYmXG4gICAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XG5cbiAgICAgICAgICAvLyBvbmx5IGFsbG93IGRpdmluZyBpbiB3aGVuIGN1cnNvciBpcyBhdCBlbmQgb2YgaW5wdXQgb3Igd2hlblxuICAgICAgICAgIC8vIHRoZSBjb21wbGV0ZSB0ZXh0IGlzIHNlbGVjdGVkICh3aGVuIGJyb3dzaW5nIHRocm91Z2ggaGlzdG9yeSlcbiAgICAgICAgICBpZiAoIWlzQ3Vyc29yQXRFbmQgJiYgIWlzRXZlcnl0aGluZ1NlbGVjdGVkKSByZXR1cm47XG5cbiAgICAgICAgICB1bnNldEhhc05ldHdvcmtFcnJvcigpO1xuXG4gICAgICAgICAgLy8gTk9URTogc2luY2Ugd2UgbmVlZCB0byBmZXRjaCB0aGUgXCJuZXh0IGNvbW1hbmRcIiwgd2hpY2ggaXMgYW4gYXN5bmMgb3BlcmF0aW9uLFxuICAgICAgICAgIC8vIHdlIHVzZSBhIElJRkUgdG8gcHJvY2VzcyB0aGF0IGFuZCBldmVudHVhbGx5IHVwZGF0ZSB0aGUgc3RhdGUuXG4gICAgICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGlmIChjb21tYW5kKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG5leHRDb21tYW5kcyA9IGF3YWl0IGdldE5leHRDb21tYW5kc0Zyb21QYXJlbnQoY29tbWFuZCk7XG4gICAgICAgICAgICAgIC8vIGF2b2lkIG1vdmluZyBjdXJzb3Igd2hlbiB0aGVyZSBhcmUgc3ViLW9wdGlvbnNcbiAgICAgICAgICAgICAgaWYgKG5leHRDb21tYW5kcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgLy8gRW5zdXJlIHRoZSBzZWFyY2ggdGV4dCBoYXMgbm90IGNoYW5nZWQgd2hpbGUgd2Ugd2VyZSBsb2FkaW5nXG4gICAgICAgICAgICAgICAgLy8gdGhlIG5leHQgcmVzdWx0cywgb3RoZXJ3aXNlIHdlJ2QgaW50ZXJydXB0IHRoZSB1c2VyLlxuICAgICAgICAgICAgICAgIC8vIFRocm93IGF3YXkgdGhlIHJlc3VsdHMgaW4gY2FzZSB0aGUgc2VhcmNoIHRleHQgaGFzIGNoYW5nZWQuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLnNlYXJjaFRleHQgPT09IHNlYXJjaFRleHQpIHtcbiAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3NldE5leHRDb21tYW5kcycsXG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQ6IHsgcmVzdWx0czogbmV4dENvbW1hbmRzIH0sXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzaGFrZSgpO1xuICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnKSB7XG4gICAgICAgICAgLy8gZ28gbGVmdCBpbiBzdGFja1xuICAgICAgICAgIGNvbnN0IHByZXZDb21tYW5kID0gbGFzdChzdGF0ZS5zdGFjayk7XG5cbiAgICAgICAgICAvLyBkbyBub3RoaW5nIHdoZW4gd2UgY2FuJ3QgZ28gbGVmdCBhbnltb3JlXG4gICAgICAgICAgaWYgKCFwcmV2Q29tbWFuZCkgcmV0dXJuO1xuXG4gICAgICAgICAgLy8gcHJldmVudCBjdXJzb3IgZnJvbSBqdW1waW5nIGEgY2hhciB0byB0aGUgbGVmdCBpbiB0ZXh0IGlucHV0XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdzZXRQcmV2Q29tbWFuZHMnLFxuICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgICBzZWFyY2hUZXh0OiBwcmV2Q29tbWFuZC5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgICByZXN1bHRzOiBwcmV2Q29tbWFuZC5yZXN1bHRzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIGdldE5leHRDb21tYW5kc0Zyb21QYXJlbnQsXG4gICAgICBwcm9wcy5oaXN0b3J5RW50cmllcyxcbiAgICAgIHNoYWtlLFxuICAgICAgc3RhdGUsXG4gICAgICB1bnNldEhhc05ldHdvcmtFcnJvcixcbiAgICBdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUtleVVwID0gdXNlQ2FsbGJhY2s8S2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD4+KFxuICAgIChldmVudCkgPT4ge1xuICAgICAgLy8gc2V0dGluZyB0aGUgc2VsZWN0aW9uIGNhbiBvbmx5IGhhcHBlbiBpbiBvbktleVVwXG4gICAgICBpZiAoc2hvdWxkU2VsZWN0RmllbGRUZXh0LmN1cnJlbnQpIHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgaW5wdXQuc2VsZWN0KCk7XG4gICAgICAgIHNob3VsZFNlbGVjdEZpZWxkVGV4dC5jdXJyZW50ID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5rZXkgIT09ICdFbnRlcicgJiYgIWlzTmV3V2luZG93Q29tYm8uY3VycmVudCkgcmV0dXJuIHRydWU7XG5cbiAgICAgIC8vIFVzZXIganVzdCB0cmlnZ2VyZWQgdGhlIHNlYXJjaFxuICAgICAgaWYgKHN0YXRlLnNlbGVjdGVkUmVzdWx0ID09PSAtMSkgcmV0dXJuIHRydWU7XG5cbiAgICAgIC8vIFVzZXIgaGFkIHNvbWV0aGluZyBzZWxlY3RlZCBhbmQgd2FudHMgdG8gZ28gdGhlcmVcbiAgICAgIGV4ZWN1dGUoc3RhdGUucmVzdWx0c1tzdGF0ZS5zZWxlY3RlZFJlc3VsdF0sIHtcbiAgICAgICAgb3BlbkluTmV3VGFiOiBpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQsXG4gICAgICB9KTtcblxuICAgICAgaXNOZXdXaW5kb3dDb21iby5jdXJyZW50ID0gZmFsc2U7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIFtleGVjdXRlLCBzdGF0ZS5yZXN1bHRzLCBzdGF0ZS5zZWxlY3RlZFJlc3VsdF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gdXNlQ2FsbGJhY2s8Q2hhbmdlRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+PihcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHNlYXJjaFRleHQgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgICBpZiAoc2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3Jlc2V0JyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdzZWFyY2hUZXh0JywgcGF5bG9hZDogc2VhcmNoVGV4dCB9KTtcblxuICAgICAgLy8gQSBzZWFyY2ggdmlhIG5ldHdvcmsgaXMgb25seSB0cmlnZ2VyZWQgd2hlbiB0aGVyZVxuICAgICAgLy8gYXJlIG1vcmUgdGhhbiB0aHJlZSBjaGFyYWN0ZXJzLiBTbyBubyBmYWxzZSBsb2FkaW5nXG4gICAgICAvLyBpbmRpY2F0aW9uIGlzIGdpdmVuLlxuICAgICAgaWYgKHNlYXJjaFRleHQudHJpbSgpLmxlbmd0aCA+IDMpIHtcbiAgICAgICAgc2V0SXNMb2FkaW5nKCk7XG4gICAgICB9XG5cbiAgICAgIHNlYXJjaEZyb21QYXJlbnQoc2VhcmNoVGV4dCkudGhlbihcbiAgICAgICAgKGFzeW5jUmVzdWx0czogQ29tbWFuZFtdKSA9PiB7XG4gICAgICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IoKTtcbiAgICAgICAgICB1bnNldElzTG9hZGluZygpO1xuXG4gICAgICAgICAgY29uc3QgZnVzZSA9IG5ldyBGdXNlKGFzeW5jUmVzdWx0cywge1xuICAgICAgICAgICAga2V5czogW1xuICAgICAgICAgICAgICB7IG5hbWU6ICd0ZXh0Jywgd2VpZ2h0OiAwLjYgfSxcbiAgICAgICAgICAgICAgeyBuYW1lOiAna2V5d29yZHMnLCB3ZWlnaHQ6IDAuNCB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIG1pbk1hdGNoQ2hhckxlbmd0aDogMixcbiAgICAgICAgICAgIGluY2x1ZGVTY29yZTogdHJ1ZSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IHNlYXJjaFJlc3VsdHMgPSBmdXNlXG4gICAgICAgICAgICAuc2VhcmNoKHNlYXJjaFRleHQpXG4gICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IHJlc3VsdHMgd2l0aCBhIG1hdGNoaW5nIHNjb3JlIG92ZXIgMC43NVxuICAgICAgICAgICAgLmZpbHRlcigocmVzdWx0KSA9PiAocmVzdWx0LnNjb3JlID8gcmVzdWx0LnNjb3JlIDwgMC43NSA6IGZhbHNlKSlcbiAgICAgICAgICAgIC8vIEtlZXAgYSBtYXhpbWFsIG9mIDkgcmVzdWx0c1xuICAgICAgICAgICAgLnNsaWNlKDAsIDkpO1xuXG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ3NldFNlYXJjaFRleHRSZXN1bHRzJyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHNlYXJjaFJlc3VsdHMubWFwKChyZXN1bHQpID0+IHJlc3VsdC5pdGVtKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgIHVuc2V0SXNMb2FkaW5nKCk7XG4gICAgICAgICAgc2V0SGFzTmV0d29ya0Vycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSxcbiAgICBbXG4gICAgICBzZWFyY2hGcm9tUGFyZW50LFxuICAgICAgc2V0SGFzTmV0d29ya0Vycm9yLFxuICAgICAgc2V0SXNMb2FkaW5nLFxuICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IsXG4gICAgICB1bnNldElzTG9hZGluZyxcbiAgICBdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUNvbnRhaW5lckNsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJyB9KTtcbiAgICBvbkNsb3NlRnJvbVBhcmVudCgpO1xuICB9LCBbb25DbG9zZUZyb21QYXJlbnRdKTtcblxuICBjb25zdCBjcmVhdGVDb21tYW5kTW91c2VFbnRlckhhbmRsZXIgPSB1c2VDYWxsYmFjazxcbiAgICAoaW5kZXg6IG51bWJlcikgPT4gTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+XG4gID4oXG4gICAgKGluZGV4KSA9PiAoKSA9PiB7XG4gICAgICAvLyBJbiBjYXNlIHRoZSBjdXJzb3IgaGFwcGVuZWQgdG8gYmUgaW4gYSBsb2NhdGlvbiB3aGVyZSBhXG4gICAgICAvLyByZXN1bHQgd291bGQgYXBwZWFyLCBpdCB3b3VsZCB0cmlnZ2VyIG9uTW91c2VFbnRlciBhbmQgdGhlXG4gICAgICAvLyByZXN1bHQgd291bGQgYmUgc2VsZWN0ZWQgaW1tZWRpYXRlbHkuIFRoaXMgaXMgbm90IHNvbWV0aGluZ1xuICAgICAgLy8gYSB1c2VyIHdvdWxkIGV4cGVjdCwgaGVuY2Ugd2UgcHJldmVudCBpdCBmcm9tIGhhcHBlbmluZy5cbiAgICAgIC8vIFRoZSB1c2VyIGhhcyB0byBtb3ZlIHRoZSBjdXJzb3IgdG8gYW4gb3B0aW9uIGV4cGxpY2l0bHkgZm9yXG4gICAgICAvLyBpdCB0byBiZWNvbWUgYWN0aXZlLiBIb3dldmVyLCB0aGUgdXNlciBjYW4gYWx3YXlzIGNsaWNrIGFuZFxuICAgICAgLy8gdGhhdCBhY3Rpb24gd2lsbCBiZSB0cmlnZ2VyZWQuXG4gICAgICBpZiAoc2tpcE5leHRTZWxlY3Rpb24uY3VycmVudCkge1xuICAgICAgICBza2lwTmV4dFNlbGVjdGlvbi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gc2V0cyB0aGUgc2VsZWN0ZWQgcmVzdWx0LCBtYWlubHkgZm9yIHRoZSBob3ZlciBlZmZlY3RcbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3NlbGVjdGVkUmVzdWx0JywgcGF5bG9hZDogaW5kZXggfSk7XG4gICAgfSxcbiAgICBbXVxuICApO1xuICBjb25zdCBjcmVhdGVDb21tYW5kQ2xpY2tIYW5kbGVyID0gdXNlQ2FsbGJhY2s8XG4gICAgKGNvbW1hbmQ6IENvbW1hbmQpID0+IE1vdXNlRXZlbnRIYW5kbGVyPEhUTUxEaXZFbGVtZW50PlxuICA+KFxuICAgIChjb21tYW5kKSA9PiAoZXZlbnQpID0+IHtcbiAgICAgIGV4ZWN1dGUoY29tbWFuZCwge1xuICAgICAgICBvcGVuSW5OZXdUYWI6IGhhc05ld1dpbmRvd01vZGlmaWVyKGV2ZW50KSxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgW2V4ZWN1dGVdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8QnV0bGVyQ29udGFpbmVyXG4gICAgICBvbkNsaWNrPXtoYW5kbGVDb250YWluZXJDbGlja31cbiAgICAgIGRhdGEtdGVzdGlkPVwicXVpY2stYWNjZXNzXCJcbiAgICAgIHRhYkluZGV4PXstMX1cbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17c2VhcmNoQ29udGFpbmVyUmVmfVxuICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3VpS2l0RGVzaWduVG9rZW5zLmNvbG9yU3VyZmFjZX07XG4gICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICR7dWlLaXREZXNpZ25Ub2tlbnMuYm9yZGVyUmFkaXVzNH07XG4gICAgICAgICAgbWluLWhlaWdodDogNDBweDtcblxuICAgICAgICAgIC8qIG9uZSBtb3JlIHRoYW4gYXBwLWJhciAoMjAwMDApIGFuZCBvbmUgbW9yZSB0aGFuIHRoZSBvdmVybGF5ICgyMDAwMSkgKi9cbiAgICAgICAgICB6LWluZGV4OiAyMDAwMjtcbiAgICAgICAgICB3aWR0aDogNDAwcHg7XG4gICAgICAgICAgbWFyZ2luOiA0MHB4IGF1dG87XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICAtbW96LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDEwcHggMzBweCAtOHB4IHJnYmEoMCwgMCwgMCwgMC43NSk7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206ICR7c3RhdGUuaGFzTmV0d29ya0Vycm9yXG4gICAgICAgICAgICA/ICcwJ1xuICAgICAgICAgICAgOiB1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nU307XG4gICAgICAgIGB9XG4gICAgICAgIG9uQ2xpY2s9eyhldmVudCkgPT4ge1xuICAgICAgICAgIC8vIEF2b2lkIGNsb3Npbmcgd2hlbiB0aGUgc2VhcmNoQ29udGFpbmVyIGl0c2VsZiBpcyBjbGlja2VkXG4gICAgICAgICAgLy8gSWYgd2UgZG9uJ3QgZG8gdGhpcywgdGhlbiB0aGUgb3ZlcmxheSB3aWxsIGNsb3NlIHdoZW4gZS5nLlxuICAgICAgICAgIC8vIHRoZSBzZWFyY2ggaW5wdXQgaXMgY2xpY2tlZC5cbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGB9XG4gICAgICAgID5cbiAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIGh0bWxGb3I9XCJxdWljay1hY2Nlc3Mtc2VhcmNoLWlucHV0XCJcbiAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nTX07XG4gICAgICAgICAgICAgIG1hcmdpbi10b3A6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgYH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U2VhcmNoSWNvbiBjb2xvcj1cIm5ldXRyYWw2MFwiIC8+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGlkPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICByZWY9e3NlYXJjaElucHV0UmVmfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2ludGwuZm9ybWF0TWVzc2FnZShtZXNzYWdlcy5pbnB1dFBsYWNlaG9kZXIpfVxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICAgIG91dGxpbmU6IDA7XG4gICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjJweDtcbiAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICAgICAgICAgICAgcGFkZGluZzogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nTX1cbiAgICAgICAgICAgICAgICAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdNfSAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdTfVxuICAgICAgICAgICAgICAgICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAmOjpwbGFjZWhvbGRlciB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICR7dWlLaXREZXNpZ25Ub2tlbnMuY29sb3JOZXV0cmFsNjB9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBgfVxuICAgICAgICAgICAgdmFsdWU9e3N0YXRlLnNlYXJjaFRleHR9XG4gICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgb25LZXlEb3duPXtoYW5kbGVLZXlEb3dufVxuICAgICAgICAgICAgb25LZXlVcD17aGFuZGxlS2V5VXB9XG4gICAgICAgICAgICBhdXRvRm9jdXM9e3RydWV9XG4gICAgICAgICAgICBhdXRvQ29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJxdWljay1hY2Nlc3Mtc2VhcmNoLWlucHV0XCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIHtzdGF0ZS5pc0xvYWRpbmcgJiYgKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nU307XG4gICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdTfTtcbiAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPExvYWRpbmdTcGlubmVyIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXRlLmhhc05ldHdvcmtFcnJvcilcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHt1aUtpdERlc2lnblRva2Vucy5jb2xvckVycm9yfTtcbiAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgICAgICAgICAgICBjb2xvcjogJHt1aUtpdERlc2lnblRva2Vucy5jb2xvclN1cmZhY2V9O1xuICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAke3VpS2l0RGVzaWduVG9rZW5zLmZvbnRTaXplMjB9O1xuICAgICAgICAgICAgICAgICAgcGFkZGluZzogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nWHN9O1xuICAgICAgICAgICAgICAgIGB9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSB7Li4ubWVzc2FnZXMub2ZmbGluZX0gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKHN0YXRlLnJlc3VsdHMubGVuZ3RoID09PSAwICYmIHN0YXRlLnNlYXJjaFRleHQudHJpbSgpLmxlbmd0aCA+IDApXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgICAgICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7dWlLaXREZXNpZ25Ub2tlbnMuY29sb3JOZXV0cmFsfTtcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAke3VpS2l0RGVzaWduVG9rZW5zLmNvbG9yU29saWR9O1xuICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHt1aUtpdERlc2lnblRva2Vucy5mb250U2l6ZTIwfTtcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1hzfTtcbiAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2Ugey4uLm1lc3NhZ2VzLm5vUmVzdWx0c30gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuIHN0YXRlLnJlc3VsdHMubWFwKChjb21tYW5kLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPEJ1dGxlckNvbW1hbmRcbiAgICAgICAgICAgICAga2V5PXtjb21tYW5kLmlkfVxuICAgICAgICAgICAgICBjb21tYW5kPXtjb21tYW5kfVxuICAgICAgICAgICAgICBpc1NlbGVjdGVkPXtzdGF0ZS5zZWxlY3RlZFJlc3VsdCA9PT0gaW5kZXh9XG4gICAgICAgICAgICAgIG9uTW91c2VFbnRlcj17Y3JlYXRlQ29tbWFuZE1vdXNlRW50ZXJIYW5kbGVyKGluZGV4KX1cbiAgICAgICAgICAgICAgb25DbGljaz17Y3JlYXRlQ29tbWFuZENsaWNrSGFuZGxlcihjb21tYW5kKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSk7XG4gICAgICAgIH0pKCl9XG4gICAgICA8L2Rpdj5cbiAgICA8L0J1dGxlckNvbnRhaW5lcj5cbiAgKTtcbn07XG5CdXRsZXIuZGlzcGxheU5hbWUgPSAnQnV0bGVyJztcblxuY29uc3QgQnV0bGVyV2l0aEFuaW1hdGlvbiA9IChwcm9wczogT21pdDxQcm9wcywgJ2NsYXNzTmFtZVNoYWtlQW5pbWF0aW9uJz4pID0+IChcbiAgPENsYXNzTmFtZXM+XG4gICAgeyh7IGNzcyB9KSA9PiAoXG4gICAgICA8QnV0bGVyXG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgY2xhc3NOYW1lU2hha2VBbmltYXRpb249e2Nzc2BcbiAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IDAuNDVzO1xuICAgICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGJvdGg7XG4gICAgICAgICAgYW5pbWF0aW9uLW5hbWU6ICR7c2hha2VBbmltYXRpb259O1xuICAgICAgICBgfVxuICAgICAgLz5cbiAgICApfVxuICA8L0NsYXNzTmFtZXM+XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBCdXRsZXJXaXRoQW5pbWF0aW9uO1xuIl19 */"),
901
- value: state.searchText,
902
- onChange: handleChange,
903
- onKeyDown: handleKeyDown,
904
- onKeyUp: handleKeyUp,
905
- autoFocus: true,
906
- autoComplete: "off",
907
- "data-testid": "quick-access-search-input"
908
- }), state.isLoading && jsxRuntime.jsx("div", {
909
- css: /*#__PURE__*/react.css("align-self:center;margin-top:", designSystem.designTokens.spacingS, ";margin-right:", designSystem.designTokens.spacingS, ";" + (process.env.NODE_ENV === "production" ? "" : ";label:Butler;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBd3BCc0IiLCJmaWxlIjoiYnV0bGVyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEtleWJvYXJkRXZlbnRIYW5kbGVyLFxuICBDaGFuZ2VFdmVudEhhbmRsZXIsXG4gIEtleWJvYXJkRXZlbnQsXG4gIE1vdXNlRXZlbnRIYW5kbGVyLFxuICBNb3VzZUV2ZW50LFxuICB1c2VSZWR1Y2VyLFxuICB1c2VSZWYsXG4gIHVzZUNhbGxiYWNrLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBGdXNlIGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IGxhc3QgZnJvbSAnbG9kYXNoL2xhc3QnO1xuaW1wb3J0IHsgRm9ybWF0dGVkTWVzc2FnZSwgdXNlSW50bCB9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IHsgZGVzaWduVG9rZW5zIGFzIHVpS2l0RGVzaWduVG9rZW5zIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyBTZWFyY2hJY29uIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvaWNvbnMnO1xuaW1wb3J0IExvYWRpbmdTcGlubmVyIGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2xvYWRpbmctc3Bpbm5lcic7XG5pbXBvcnQgQnV0bGVyQ29tbWFuZCBmcm9tICcuLi9idXRsZXItY29tbWFuZCc7XG5pbXBvcnQgQnV0bGVyQ29udGFpbmVyIGZyb20gJy4uL2J1dGxlci1jb250YWluZXInO1xuaW1wb3J0IG1lc3NhZ2VzIGZyb20gJy4uL21lc3NhZ2VzJztcbmltcG9ydCB0eXBlIHtcbiAgQ29tbWFuZCxcbiAgU2VhcmNoVGV4dCxcbiAgU2VsZWN0ZWRSZXN1bHQsXG4gIFN0YWNrLFxuICBIaXN0b3J5RW50cnksXG59IGZyb20gJy4uL3R5cGVzJztcblxuY29uc3QgaXNTZWxlY3RBbGxDb21ibyA9IChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cbiAgZXZlbnQua2V5ID09PSAnYScgJiZcbiAgZXZlbnQubWV0YUtleSAmJlxuICAhZXZlbnQuY3RybEtleSAmJlxuICAhZXZlbnQuYWx0S2V5ICYmXG4gICFldmVudC5zaGlmdEtleTtcblxuY29uc3QgaXNDbG9zZUNvbWJvID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PlxuICBldmVudC5rZXkgPT09ICdFc2NhcGUnICYmXG4gICFldmVudC5tZXRhS2V5ICYmXG4gICFldmVudC5jdHJsS2V5ICYmXG4gICFldmVudC5hbHRLZXkgJiZcbiAgIWV2ZW50LnNoaWZ0S2V5O1xuXG5jb25zdCBnZXRQbGF0Zm9ybSA9ICgpID0+IHtcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdXaW4nKSkgcmV0dXJuICd3aW5kb3dzJztcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdNYWMnKSkgcmV0dXJuICdtYWNvcyc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnWDExJykpIHJldHVybiAndW5peCc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnTGludXgnKSkgcmV0dXJuICdsaW51eCc7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBoYXNOZXdXaW5kb3dNb2RpZmllciA9IChcbiAgZXZlbnQ6IEtleWJvYXJkRXZlbnQ8SFRNTEVsZW1lbnQ+IHwgTW91c2VFdmVudDxIVE1MRWxlbWVudD5cbikgPT4ge1xuICBjb25zdCBwbGF0Zm9ybSA9IGdldFBsYXRmb3JtKCk7XG4gIHN3aXRjaCAocGxhdGZvcm0pIHtcbiAgICBjYXNlICdtYWNvcyc6XG4gICAgICByZXR1cm4gZXZlbnQubWV0YUtleTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGV2ZW50LmN0cmxLZXk7XG4gIH1cbn07XG5cbmNvbnN0IHNoYWtlQW5pbWF0aW9uID0ga2V5ZnJhbWVzYFxuICBmcm9tLFxuICB0byB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcbiAgfVxuXG4gIDE0JSxcbiAgNDIlLFxuICA3MCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTNweCwgMCwgMCk7XG4gIH1cblxuICAyOCUsXG4gIDU2JSxcbiAgODQlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDNweCwgMCwgMCk7XG4gIH1cbmA7XG5cbnR5cGUgU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogYm9vbGVhbjtcbiAgaXNMb2FkaW5nOiBib29sZWFuO1xuICBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0O1xuICBzZWxlY3RlZFJlc3VsdDogU2VsZWN0ZWRSZXN1bHQ7XG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IGJvb2xlYW47XG4gIHJlc3VsdHM6IENvbW1hbmRbXTtcbiAgc3RhY2s6IFN0YWNrW107XG59O1xudHlwZSBBY3Rpb24gPVxuICB8IHsgdHlwZTogJ25ldHdvcmtFcnJvcic7IHBheWxvYWQ6IGJvb2xlYW4gfVxuICB8IHsgdHlwZTogJ2xvYWRpbmcnOyBwYXlsb2FkOiBib29sZWFuIH1cbiAgfCB7IHR5cGU6ICdzZWxlY3RlZFJlc3VsdCc7IHBheWxvYWQ6IG51bWJlciB9XG4gIHwgeyB0eXBlOiAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH1cbiAgfCB7IHR5cGU6ICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfVxuICB8IHtcbiAgICAgIHR5cGU6ICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JztcbiAgICAgIHBheWxvYWQ6IHsgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDsgcmVzdWx0czogQ29tbWFuZFtdIH07XG4gICAgfVxuICB8IHsgdHlwZTogJ3NldE5leHRDb21tYW5kcyc7IHBheWxvYWQ6IHsgcmVzdWx0czogQ29tbWFuZFtdIH0gfVxuICB8IHtcbiAgICAgIHR5cGU6ICdzZXRQcmV2Q29tbWFuZHMnO1xuICAgICAgcGF5bG9hZDogeyBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0OyByZXN1bHRzOiBDb21tYW5kW10gfTtcbiAgICB9XG4gIHwgeyB0eXBlOiAnc2VhcmNoVGV4dCc7IHBheWxvYWQ6IHN0cmluZyB9XG4gIHwgeyB0eXBlOiAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOyBwYXlsb2FkOiBDb21tYW5kW10gfVxuICB8IHsgdHlwZTogJ3Jlc2V0U2VhcmNoVGV4dCcgfVxuICB8IHsgdHlwZTogJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJyB9XG4gIHwgeyB0eXBlOiAncmVzZXQnIH07XG5jb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogZmFsc2UsXG4gIGlzTG9hZGluZzogZmFsc2UsXG4gIHNlYXJjaFRleHQ6ICcnLFxuICBzZWxlY3RlZFJlc3VsdDogLTEsXG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IHRydWUsXG4gIHJlc3VsdHM6IFtdLFxuICBzdGFjazogW10sXG59O1xuY29uc3QgcmVkdWNlciA9IChzdGF0ZTogU3RhdGUgPSBpbml0aWFsU3RhdGUsIGFjdGlvbjogQWN0aW9uKTogU3RhdGUgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnbmV0d29ya0Vycm9yJzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBoYXNOZXR3b3JrRXJyb3I6IGFjdGlvbi5wYXlsb2FkIH07XG4gICAgY2FzZSAnbG9hZGluZyc6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgaXNMb2FkaW5nOiBhY3Rpb24ucGF5bG9hZCB9O1xuICAgIGNhc2UgJ3NlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQgfTtcbiAgICBjYXNlICdpbmNyZW1lbnRTZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6XG4gICAgICAgICAgc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IHN0YXRlLnJlc3VsdHMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0ICsgMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ2RlY3JlbWVudFNlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDpcbiAgICAgICAgICBzdGF0ZS5zZWxlY3RlZFJlc3VsdCA8IDFcbiAgICAgICAgICAgID8gc3RhdGUucmVzdWx0cy5sZW5ndGggLSAxXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0IC0gMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ3BpY2tDb21tYW5kRnJvbUhpc3RvcnknOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OiAwLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZC5zZWFyY2hUZXh0LFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZC5yZXN1bHRzLFxuICAgICAgICBzdGFjazogW10sXG4gICAgICAgIC8vIFRoZSBoaXN0b3J5IGRvZXMgbm90IGdldCBjaGFuZ2VkIGhlcmUsIGl0IHdpbGwgYmUgY2hhbmdlZCBhbG9uZ1xuICAgICAgICAvLyB3aXRoIHRoZSByZWd1bGFyIGZsb3cuXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldE5leHRDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc3RhY2s6IFtcbiAgICAgICAgICAuLi5zdGF0ZS5zdGFjayxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZWFyY2hUZXh0OiBzdGF0ZS5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgcmVzdWx0czogc3RhdGUucmVzdWx0cyxcbiAgICAgICAgICAgIHNlbGVjdGVkUmVzdWx0OiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogMCxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLnJlc3VsdHMsXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldFByZXZDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQuc2VhcmNoVGV4dCxcbiAgICAgICAgcmVzdWx0czogYWN0aW9uLnBheWxvYWQucmVzdWx0cyxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IDAsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgICAvLyBvbWl0IGxhc3QgaXRlbVxuICAgICAgICBzdGFjazogc3RhdGUuc3RhY2suc2xpY2UoMCwgLTEpLFxuICAgICAgfTtcbiAgICBjYXNlICdzZWFyY2hUZXh0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgLy8gY2xlYXIgbmV0d29yayBlcnJvciB3aGVuIHNlYXJjaCB0ZXh0IGlzIGNsZWFyZWQsIHNvIHRoYXQgdXNlcnNcbiAgICAgICAgLy8gYXJlIHRlbXB0ZWQgdG8gcmV0cnlcbiAgICAgICAgaGFzTmV0d29ya0Vycm9yOiBhY3Rpb24ucGF5bG9hZC5sZW5ndGggPiAwICYmIHN0YXRlLmhhc05ldHdvcmtFcnJvcixcbiAgICAgIH07XG4gICAgY2FzZSAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQubGVuZ3RoID4gMCA/IDAgOiAtMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogdHJ1ZSxcbiAgICAgICAgc3RhY2s6IFtdLFxuICAgICAgfTtcbiAgICBjYXNlICdyZXNldFNlYXJjaFRleHQnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlYXJjaFRleHQ6ICcnLCByZXN1bHRzOiBbXSwgc2VsZWN0ZWRSZXN1bHQ6IC0xIH07XG4gICAgY2FzZSAncmVzZXRSZXN1bHRzV2hlbkNsb3NpbmcnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlbGVjdGVkUmVzdWx0OiAtMSwgZW5hYmxlSGlzdG9yeTogdHJ1ZSB9O1xuICAgIGNhc2UgJ3Jlc2V0JzpcbiAgICAgIHJldHVybiBpbml0aWFsU3RhdGU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufTtcblxudHlwZSBQcm9wcyA9IHtcbiAgaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdO1xuICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlOiAoaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdKSA9PiB2b2lkO1xuICBzZWFyY2g6IChzZWFyY2hUZXh0OiBTZWFyY2hUZXh0KSA9PiBQcm9taXNlPENvbW1hbmRbXT47XG4gIGdldE5leHRDb21tYW5kczogKGNvbW1hbmQ6IENvbW1hbmQpID0+IFByb21pc2U8Q29tbWFuZFtdPjtcbiAgZXhlY3V0ZUNvbW1hbmQ6IChjb21tYW5kOiBDb21tYW5kLCBtZXRhOiB7IG9wZW5Jbk5ld1RhYjogYm9vbGVhbiB9KSA9PiB2b2lkO1xuICBvbkNsb3NlOiAoKSA9PiB2b2lkO1xuICBjbGFzc05hbWVTaGFrZUFuaW1hdGlvbjogc3RyaW5nO1xufTtcbmNvbnN0IEJ1dGxlciA9IChwcm9wczogUHJvcHMpID0+IHtcbiAgY29uc3QgaW50bCA9IHVzZUludGwoKTtcbiAgY29uc3QgW3N0YXRlLCBkaXNwYXRjaF0gPSB1c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxTdGF0ZSk7XG5cbiAgY29uc3Qgc2hvdWxkU2VsZWN0RmllbGRUZXh0ID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3QgaXNOZXdXaW5kb3dDb21ibyA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IHNraXBOZXh0U2VsZWN0aW9uID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3Qgc2VhcmNoQ29udGFpbmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3Qgc2VhcmNoSW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbCk7XG5cbiAgY29uc3Qgc2V0SGFzTmV0d29ya0Vycm9yID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ25ldHdvcmtFcnJvcicsIHBheWxvYWQ6IHRydWUgfSk7XG4gIH0sIFtdKTtcbiAgY29uc3QgdW5zZXRIYXNOZXR3b3JrRXJyb3IgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbmV0d29ya0Vycm9yJywgcGF5bG9hZDogZmFsc2UgfSk7XG4gIH0sIFtdKTtcbiAgY29uc3Qgc2V0SXNMb2FkaW5nID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ2xvYWRpbmcnLCBwYXlsb2FkOiB0cnVlIH0pO1xuICB9LCBbXSk7XG4gIGNvbnN0IHVuc2V0SXNMb2FkaW5nID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ2xvYWRpbmcnLCBwYXlsb2FkOiBmYWxzZSB9KTtcbiAgfSwgW10pO1xuXG4gIC8vIERlc3RydWN0dXJlIGZ1bmN0aW9ucyBmcm9tIHByb3BzIHRvIHJlZmVyZW5jZSB0aGVtIGluIHRoZSBob29rIGRlcGVuZGVuY3kgbGlzdFxuICBjb25zdCB7XG4gICAgc2VhcmNoOiBzZWFyY2hGcm9tUGFyZW50LFxuICAgIG9uQ2xvc2U6IG9uQ2xvc2VGcm9tUGFyZW50LFxuICAgIGV4ZWN1dGVDb21tYW5kOiBleGVjdXRlQ29tbWFuZEZyb21QYXJlbnQsXG4gICAgb25IaXN0b3J5RW50cmllc0NoYW5nZTogb25IaXN0b3J5RW50cmllc0NoYW5nZUZyb21QYXJlbnQsXG4gICAgZ2V0TmV4dENvbW1hbmRzOiBnZXROZXh0Q29tbWFuZHNGcm9tUGFyZW50LFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3Qgc2hha2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50KSB7XG4gICAgICBzZWFyY2hDb250YWluZXJSZWYuY3VycmVudC5jbGFzc0xpc3QucmVtb3ZlKFxuICAgICAgICBwcm9wcy5jbGFzc05hbWVTaGFrZUFuaW1hdGlvblxuICAgICAgKTtcbiAgICAgIC8vIC0+IHRyaWdnZXJpbmcgcmVmbG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdm9pZFxuICAgICAgdm9pZCBzZWFyY2hDb250YWluZXJSZWYuY3VycmVudC5vZmZzZXRXaWR0aDtcbiAgICAgIHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50LmNsYXNzTGlzdC5hZGQocHJvcHMuY2xhc3NOYW1lU2hha2VBbmltYXRpb24pO1xuICAgIH1cbiAgfSwgW3Byb3BzLmNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uXSk7XG5cbiAgY29uc3QgZXhlY3V0ZSA9IHVzZUNhbGxiYWNrKFxuICAgIChjb21tYW5kOiBDb21tYW5kLCBtZXRhOiB7IG9wZW5Jbk5ld1RhYjogYm9vbGVhbiB9KSA9PiB7XG4gICAgICAvLyBPbmx5IG1haW4gZW50cmllcyBnZXQgYWRkZWQgdG8gaGlzdG9yeSwgc28gd2hlbiBhIHN1YmNvbW1hbmQgaXMgZXhlY3V0ZWQsXG4gICAgICAvLyB3ZSBhZGQgdGhlIG1haW4gY29tbWFuZCBvZiBpdCB0byB0aGUgaGlzdG9yeSAodGhlIHRvcC1sZXZlbCBjb21tYW5kKS5cbiAgICAgIC8vXG4gICAgICAvLyBUaGUga2V5IHRvIGlkZW50aWZ5IGhpc3RvcnkgZW50cmllcyBieSBpcyBhbHdheXMgdGhlIHNlYXJjaFRleHRcbiAgICAgIC8vIFRoZXJlIHdpbGwgbmV2ZXIgYmUgdHdvIGhpc3RvcnkgZW50cmllcyB3aXRoIHRoZSBzYW1lIHNlYXJjaFRleHRcbiAgICAgIGNvbnN0IGVudHJ5ID1cbiAgICAgICAgc3RhdGUuc3RhY2subGVuZ3RoID09PSAwXG4gICAgICAgICAgPyAvLyBUaGUgc3RhY2sgaXMgZW1wdHksIHNvIHdlIGFyZSBleGVjdXRpbmcgYSB0b3AtbGV2ZWwgY29tbWFuZFxuICAgICAgICAgICAgeyBzZWFyY2hUZXh0OiBzdGF0ZS5zZWFyY2hUZXh0LCByZXN1bHRzOiBzdGF0ZS5yZXN1bHRzIH1cbiAgICAgICAgICA6IC8vIFdlIGFyZSBleGVjdXRpbmcgYSBzdWJjb21tYW5kLCBzbyB3ZSBnZXQgdGhlIHRvcC1sZXZlbCBjb21tYW5kIGZvciBpdCxcbiAgICAgICAgICAgIC8vIHdoaWNoIGlzIGF0IHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzZWFyY2hUZXh0OiBzdGF0ZS5zdGFja1swXS5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgICByZXN1bHRzOiBzdGF0ZS5zdGFja1swXS5yZXN1bHRzLFxuICAgICAgICAgICAgfTtcblxuICAgICAgLy8gQWRkIHRoZSBlbnRyeSB0byB0aGUgaGlzdG9yeSwgd2hpbGUgZXhjbHVkaW5nIGFueSBlYXJsaWVyIGhpc3RvcnkgZW50cnlcbiAgICAgIC8vIHdpdGggdGhlIHNhbWUgc2VhcmNoIHRleHQuIFRoaXMgZWZmZWN0aXZlbHkgXCJtb3Zlc1wiIHRoYXQgZW50cnkgdG8gdGhlXG4gICAgICAvLyB0b3Agb2YgdGhlIGhpc3RvcnkgKHdpdGggdGhlIG1vc3QgcmVjZW50IHJlc3VsdHMpLCBvciBhcHBlbmRzIGEgbmV3IGVudHJ5XG4gICAgICAvLyB3aGVuIGl0IGRpZG4ndCBleGlzdCBiZWZvcmUuXG4gICAgICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlRnJvbVBhcmVudChbXG4gICAgICAgIC4uLnByb3BzLmhpc3RvcnlFbnRyaWVzLmZpbHRlcihcbiAgICAgICAgICAoY29tbWFuZCkgPT4gY29tbWFuZC5zZWFyY2hUZXh0ICE9PSBlbnRyeS5zZWFyY2hUZXh0XG4gICAgICAgICksXG4gICAgICAgIGVudHJ5LFxuICAgICAgXSk7XG5cbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3Jlc2V0U2VhcmNoVGV4dCcgfSk7XG5cbiAgICAgIG9uQ2xvc2VGcm9tUGFyZW50KCk7XG5cbiAgICAgIGV4ZWN1dGVDb21tYW5kRnJvbVBhcmVudChjb21tYW5kLCBtZXRhKTtcbiAgICB9LFxuICAgIFtcbiAgICAgIGV4ZWN1dGVDb21tYW5kRnJvbVBhcmVudCxcbiAgICAgIG9uQ2xvc2VGcm9tUGFyZW50LFxuICAgICAgb25IaXN0b3J5RW50cmllc0NoYW5nZUZyb21QYXJlbnQsXG4gICAgICBwcm9wcy5oaXN0b3J5RW50cmllcyxcbiAgICAgIHN0YXRlLnJlc3VsdHMsXG4gICAgICBzdGF0ZS5zZWFyY2hUZXh0LFxuICAgICAgc3RhdGUuc3RhY2ssXG4gICAgXVxuICApO1xuICBjb25zdCBoYW5kbGVLZXlEb3duID0gdXNlQ2FsbGJhY2s8S2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD4+KFxuICAgIChldmVudCkgPT4ge1xuICAgICAgLy8gUHJldmVudGluZyBjdXJzb3IganVtcHMgY2FuIG9ubHkgaGFwcGVuIGluIG9uS2V5RG93biwgYnV0IG5vdCBpbiBvbktleVVwXG4gICAgICBldmVudC5wZXJzaXN0KCk7XG5cbiAgICAgIC8vIFdlIHdhbnQgdG8ga25vdyB3aGVuIHRoZSB1c2VyIHByZXNzZXMgY21kK2VudGVyIChjbWQgYmVpbmcgYSBtZXRhIGtleSkuXG4gICAgICAvLyBXZSBhcmUgb25seSB0b2xkIGFib3V0IHRoaXMgaW4ga2V5RG93biwgYnV0IG5vdCBpbiBrZXlVcCwgc28gd2UgbmVlZFxuICAgICAgLy8gdG8gaGFuZGxlIGl0IGhlcmVcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicgJiYgaGFzTmV3V2luZG93TW9kaWZpZXIoZXZlbnQpKSB7XG4gICAgICAgIGlzTmV3V2luZG93Q29tYm8uY3VycmVudCA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gQXZvaWQgc2VsZWN0aW5nIHRoZSB3aG9sZSBwYWdlIHdoZW4gdXNlciBzZWxlY3RlcyBldmVyeXRoaW5nIHdpdGhcbiAgICAgIC8vIGEga2V5Ym9hcmQgc2hvcnRjdXQuIFRoZXJlIGlzIHByb2JhYmx5IGEgYmV0dGVyIHdheSB0byBkbyB0aGlzIHRob3VnaC5cbiAgICAgIC8vIFRoaXMgcHJldmVudHMgdGhlIHdob2xlIHBhZ2UgZnJvbSBiZWluZyBzZWxlY3RlZCBpbiBjYXNlIHRoZSB1c2VyXG4gICAgICAvLyAxKSBvcGVucyB0aGUgc2VhcmNoIGJveFxuICAgICAgLy8gMikgdHlwZXMgaW50byBpdFxuICAgICAgLy8gMykgc2VsZWN0cyBhbGwgdGV4dCB1c2luZyBjbWQrYVxuICAgICAgLy8gNCkgY2xvc2VzIHRoZSBzZWFyY2ggYm94IHdpdGggZXNjXG4gICAgICAvLyBXaXRob3V0IHRoaXMgaGFuZGxpbmcsIHRoZSB3aG9sZSBwYWdlIHdvdWxkIG5vdyBiZSBzZWxlY3RlZFxuICAgICAgaWYgKGlzU2VsZWN0QWxsQ29tYm8oZXZlbnQpKSB7XG4gICAgICAgIC8vIFRoaXMgc3RvcHMgdGhlIGJyb3dzZXIgZnJvbSBzZWxlY3RpbmcgYW55dGhpbmdcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHNlYXJjaElucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAvLyBUaGlzIHNlbGVjdHMgdGhlIHRleHQgaW4gdGhlIHNlYXJjaCBpbnB1dFxuICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2V0U2VsZWN0aW9uUmFuZ2UoMCwgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gYXZvaWQgaW50ZXJmZXJpbmcgd2l0aCBvdGhlciBrZXkgY29tYmluYXRpb25zIHVzaW5nIG1vZGlmaWVyIGtleXNcbiAgICAgIGlmIChldmVudC5jdHJsS2V5IHx8IGV2ZW50LmFsdEtleSB8fCBldmVudC5zaGlmdEtleSB8fCBldmVudC5tZXRhS2V5KVxuICAgICAgICByZXR1cm47XG4gICAgICBpZiAoaXNDbG9zZUNvbWJvKGV2ZW50KSkgcmV0dXJuO1xuXG4gICAgICAvLyBza2lwIG5leHQgbW91c2VFbnRlciB0byBhdm9pZCBzZXR0aW5nIHNlbGVjdGVkUmVzdWx0IHdoZW4gY3Vyc29yIGp1c3RcbiAgICAgIC8vIGhhcHBlbnMgdG8gYmUgd2hlcmUgdGhlIHJlc3VsdHMgd2lsbCBwb3AgdXBcbiAgICAgIHNraXBOZXh0U2VsZWN0aW9uLmN1cnJlbnQgPSB0cnVlO1xuXG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgICAvLyBwcmV2ZW50IGN1cnNvciBmcm9tIGp1bXBpbmcgdG8gZW5kIG9mIHRleHQgaW5wdXRcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgICAgLy8gYnJvd3NlIHRocm91Z2ggaGlzdG9yeVxuICAgICAgICBpZiAoXG4gICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAoc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPCAxICYmIHN0YXRlLmVuYWJsZUhpc3RvcnkpXG4gICAgICAgICkge1xuICAgICAgICAgIHNob3VsZFNlbGVjdEZpZWxkVGV4dC5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID1cbiAgICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgID8gLy8gV2hlbiBnb2luZyBiYWNrIHRoZSBmaXJzdCBzdGVwXG4gICAgICAgICAgICAgICAgLTFcbiAgICAgICAgICAgICAgOiAvLyBXaGVuIGdvaW5nIGJhY2sgbW9yZSB0aGFuIG9uZSBzdGVwXG4gICAgICAgICAgICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgKGNvbW1hbmQpID0+IGNvbW1hbmQuc2VhcmNoVGV4dCA9PT0gc3RhdGUuc2VhcmNoVGV4dFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgLy8gUGljayB0aGUgcHJldmlvdXMgY29tbWFuZCBmcm9tIHRoZSBoaXN0b3J5XG4gICAgICAgICAgY29uc3QgcHJldkNvbW1hbmQgPVxuICAgICAgICAgICAgc2VsZWN0ZWRJbmRleCA9PT0gLTFcbiAgICAgICAgICAgICAgPyAvLyBwcmV2aW91cyBjb21tYW5kIG9uIHRvcCBvZiB0aGUgaGlzdG9yeSB3aGVuIGdvaW5nIGJhY2sgb25cbiAgICAgICAgICAgICAgICAvLyBmaXJzdCBzdGVwXG4gICAgICAgICAgICAgICAgbGFzdChwcm9wcy5oaXN0b3J5RW50cmllcylcbiAgICAgICAgICAgICAgOiAvLyBwcmV2aW91cyBjb21tYW5kIGlzIGRlZXBlciBkb3duXG4gICAgICAgICAgICAgICAgLy8gV2hlbiB0aGUgaGlzdG9yeSBkb2VzIG5vdCBleGlzdCAobmVnYXRpdmUgaW5kZXgpLCB0aGVuXG4gICAgICAgICAgICAgICAgLy8gdGhpcyBpbXBsaWNpdGx5IHJldHVybnMgdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXNbc2VsZWN0ZWRJbmRleCAtIDFdO1xuICAgICAgICAgIC8vIFNraXAgd2hlbiBubyBwcmV2aW91cyBlbnRyeSBleGlzdHMgaW4gdGhlIGhpc3RvcnlcbiAgICAgICAgICBpZiAoIXByZXZDb21tYW5kKSByZXR1cm47XG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ3BpY2tDb21tYW5kRnJvbUhpc3RvcnknLFxuICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgICBzZWFyY2hUZXh0OiBwcmV2Q29tbWFuZC5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgICByZXN1bHRzOiBwcmV2Q29tbWFuZC5yZXN1bHRzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcHJldmVudCBjdXJzb3IgZnJvbSBqdW1waW5nIHRvIGJlZ2lubmluZyBvZiB0ZXh0IGlucHV0XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ2RlY3JlbWVudFNlbGVjdGVkUmVzdWx0JyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXRlLnNlbGVjdGVkUmVzdWx0ID4gLTEpIHtcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnKSB7XG4gICAgICAgICAgY29uc3QgY29tbWFuZCA9IHN0YXRlLnJlc3VsdHNbc3RhdGUuc2VsZWN0ZWRSZXN1bHRdO1xuICAgICAgICAgIGNvbnN0IHNlYXJjaFRleHQgPSBzdGF0ZS5zZWFyY2hUZXh0O1xuICAgICAgICAgIGNvbnN0IGlzQ3Vyc29yQXRFbmQgPVxuICAgICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudCAmJlxuICAgICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XG5cbiAgICAgICAgICBjb25zdCBpc0V2ZXJ5dGhpbmdTZWxlY3RlZCA9XG4gICAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50ICYmXG4gICAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0ID09PSAwICYmXG4gICAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XG5cbiAgICAgICAgICAvLyBvbmx5IGFsbG93IGRpdmluZyBpbiB3aGVuIGN1cnNvciBpcyBhdCBlbmQgb2YgaW5wdXQgb3Igd2hlblxuICAgICAgICAgIC8vIHRoZSBjb21wbGV0ZSB0ZXh0IGlzIHNlbGVjdGVkICh3aGVuIGJyb3dzaW5nIHRocm91Z2ggaGlzdG9yeSlcbiAgICAgICAgICBpZiAoIWlzQ3Vyc29yQXRFbmQgJiYgIWlzRXZlcnl0aGluZ1NlbGVjdGVkKSByZXR1cm47XG5cbiAgICAgICAgICB1bnNldEhhc05ldHdvcmtFcnJvcigpO1xuXG4gICAgICAgICAgLy8gTk9URTogc2luY2Ugd2UgbmVlZCB0byBmZXRjaCB0aGUgXCJuZXh0IGNvbW1hbmRcIiwgd2hpY2ggaXMgYW4gYXN5bmMgb3BlcmF0aW9uLFxuICAgICAgICAgIC8vIHdlIHVzZSBhIElJRkUgdG8gcHJvY2VzcyB0aGF0IGFuZCBldmVudHVhbGx5IHVwZGF0ZSB0aGUgc3RhdGUuXG4gICAgICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGlmIChjb21tYW5kKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG5leHRDb21tYW5kcyA9IGF3YWl0IGdldE5leHRDb21tYW5kc0Zyb21QYXJlbnQoY29tbWFuZCk7XG4gICAgICAgICAgICAgIC8vIGF2b2lkIG1vdmluZyBjdXJzb3Igd2hlbiB0aGVyZSBhcmUgc3ViLW9wdGlvbnNcbiAgICAgICAgICAgICAgaWYgKG5leHRDb21tYW5kcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgLy8gRW5zdXJlIHRoZSBzZWFyY2ggdGV4dCBoYXMgbm90IGNoYW5nZWQgd2hpbGUgd2Ugd2VyZSBsb2FkaW5nXG4gICAgICAgICAgICAgICAgLy8gdGhlIG5leHQgcmVzdWx0cywgb3RoZXJ3aXNlIHdlJ2QgaW50ZXJydXB0IHRoZSB1c2VyLlxuICAgICAgICAgICAgICAgIC8vIFRocm93IGF3YXkgdGhlIHJlc3VsdHMgaW4gY2FzZSB0aGUgc2VhcmNoIHRleHQgaGFzIGNoYW5nZWQuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLnNlYXJjaFRleHQgPT09IHNlYXJjaFRleHQpIHtcbiAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3NldE5leHRDb21tYW5kcycsXG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQ6IHsgcmVzdWx0czogbmV4dENvbW1hbmRzIH0sXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzaGFrZSgpO1xuICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnKSB7XG4gICAgICAgICAgLy8gZ28gbGVmdCBpbiBzdGFja1xuICAgICAgICAgIGNvbnN0IHByZXZDb21tYW5kID0gbGFzdChzdGF0ZS5zdGFjayk7XG5cbiAgICAgICAgICAvLyBkbyBub3RoaW5nIHdoZW4gd2UgY2FuJ3QgZ28gbGVmdCBhbnltb3JlXG4gICAgICAgICAgaWYgKCFwcmV2Q29tbWFuZCkgcmV0dXJuO1xuXG4gICAgICAgICAgLy8gcHJldmVudCBjdXJzb3IgZnJvbSBqdW1waW5nIGEgY2hhciB0byB0aGUgbGVmdCBpbiB0ZXh0IGlucHV0XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdzZXRQcmV2Q29tbWFuZHMnLFxuICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgICBzZWFyY2hUZXh0OiBwcmV2Q29tbWFuZC5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgICByZXN1bHRzOiBwcmV2Q29tbWFuZC5yZXN1bHRzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIGdldE5leHRDb21tYW5kc0Zyb21QYXJlbnQsXG4gICAgICBwcm9wcy5oaXN0b3J5RW50cmllcyxcbiAgICAgIHNoYWtlLFxuICAgICAgc3RhdGUsXG4gICAgICB1bnNldEhhc05ldHdvcmtFcnJvcixcbiAgICBdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUtleVVwID0gdXNlQ2FsbGJhY2s8S2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD4+KFxuICAgIChldmVudCkgPT4ge1xuICAgICAgLy8gc2V0dGluZyB0aGUgc2VsZWN0aW9uIGNhbiBvbmx5IGhhcHBlbiBpbiBvbktleVVwXG4gICAgICBpZiAoc2hvdWxkU2VsZWN0RmllbGRUZXh0LmN1cnJlbnQpIHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgaW5wdXQuc2VsZWN0KCk7XG4gICAgICAgIHNob3VsZFNlbGVjdEZpZWxkVGV4dC5jdXJyZW50ID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5rZXkgIT09ICdFbnRlcicgJiYgIWlzTmV3V2luZG93Q29tYm8uY3VycmVudCkgcmV0dXJuIHRydWU7XG5cbiAgICAgIC8vIFVzZXIganVzdCB0cmlnZ2VyZWQgdGhlIHNlYXJjaFxuICAgICAgaWYgKHN0YXRlLnNlbGVjdGVkUmVzdWx0ID09PSAtMSkgcmV0dXJuIHRydWU7XG5cbiAgICAgIC8vIFVzZXIgaGFkIHNvbWV0aGluZyBzZWxlY3RlZCBhbmQgd2FudHMgdG8gZ28gdGhlcmVcbiAgICAgIGV4ZWN1dGUoc3RhdGUucmVzdWx0c1tzdGF0ZS5zZWxlY3RlZFJlc3VsdF0sIHtcbiAgICAgICAgb3BlbkluTmV3VGFiOiBpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQsXG4gICAgICB9KTtcblxuICAgICAgaXNOZXdXaW5kb3dDb21iby5jdXJyZW50ID0gZmFsc2U7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIFtleGVjdXRlLCBzdGF0ZS5yZXN1bHRzLCBzdGF0ZS5zZWxlY3RlZFJlc3VsdF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gdXNlQ2FsbGJhY2s8Q2hhbmdlRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+PihcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHNlYXJjaFRleHQgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgICBpZiAoc2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3Jlc2V0JyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdzZWFyY2hUZXh0JywgcGF5bG9hZDogc2VhcmNoVGV4dCB9KTtcblxuICAgICAgLy8gQSBzZWFyY2ggdmlhIG5ldHdvcmsgaXMgb25seSB0cmlnZ2VyZWQgd2hlbiB0aGVyZVxuICAgICAgLy8gYXJlIG1vcmUgdGhhbiB0aHJlZSBjaGFyYWN0ZXJzLiBTbyBubyBmYWxzZSBsb2FkaW5nXG4gICAgICAvLyBpbmRpY2F0aW9uIGlzIGdpdmVuLlxuICAgICAgaWYgKHNlYXJjaFRleHQudHJpbSgpLmxlbmd0aCA+IDMpIHtcbiAgICAgICAgc2V0SXNMb2FkaW5nKCk7XG4gICAgICB9XG5cbiAgICAgIHNlYXJjaEZyb21QYXJlbnQoc2VhcmNoVGV4dCkudGhlbihcbiAgICAgICAgKGFzeW5jUmVzdWx0czogQ29tbWFuZFtdKSA9PiB7XG4gICAgICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IoKTtcbiAgICAgICAgICB1bnNldElzTG9hZGluZygpO1xuXG4gICAgICAgICAgY29uc3QgZnVzZSA9IG5ldyBGdXNlKGFzeW5jUmVzdWx0cywge1xuICAgICAgICAgICAga2V5czogW1xuICAgICAgICAgICAgICB7IG5hbWU6ICd0ZXh0Jywgd2VpZ2h0OiAwLjYgfSxcbiAgICAgICAgICAgICAgeyBuYW1lOiAna2V5d29yZHMnLCB3ZWlnaHQ6IDAuNCB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIG1pbk1hdGNoQ2hhckxlbmd0aDogMixcbiAgICAgICAgICAgIGluY2x1ZGVTY29yZTogdHJ1ZSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IHNlYXJjaFJlc3VsdHMgPSBmdXNlXG4gICAgICAgICAgICAuc2VhcmNoKHNlYXJjaFRleHQpXG4gICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IHJlc3VsdHMgd2l0aCBhIG1hdGNoaW5nIHNjb3JlIG92ZXIgMC43NVxuICAgICAgICAgICAgLmZpbHRlcigocmVzdWx0KSA9PiAocmVzdWx0LnNjb3JlID8gcmVzdWx0LnNjb3JlIDwgMC43NSA6IGZhbHNlKSlcbiAgICAgICAgICAgIC8vIEtlZXAgYSBtYXhpbWFsIG9mIDkgcmVzdWx0c1xuICAgICAgICAgICAgLnNsaWNlKDAsIDkpO1xuXG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ3NldFNlYXJjaFRleHRSZXN1bHRzJyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHNlYXJjaFJlc3VsdHMubWFwKChyZXN1bHQpID0+IHJlc3VsdC5pdGVtKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgIHVuc2V0SXNMb2FkaW5nKCk7XG4gICAgICAgICAgc2V0SGFzTmV0d29ya0Vycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSxcbiAgICBbXG4gICAgICBzZWFyY2hGcm9tUGFyZW50LFxuICAgICAgc2V0SGFzTmV0d29ya0Vycm9yLFxuICAgICAgc2V0SXNMb2FkaW5nLFxuICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IsXG4gICAgICB1bnNldElzTG9hZGluZyxcbiAgICBdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUNvbnRhaW5lckNsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJyB9KTtcbiAgICBvbkNsb3NlRnJvbVBhcmVudCgpO1xuICB9LCBbb25DbG9zZUZyb21QYXJlbnRdKTtcblxuICBjb25zdCBjcmVhdGVDb21tYW5kTW91c2VFbnRlckhhbmRsZXIgPSB1c2VDYWxsYmFjazxcbiAgICAoaW5kZXg6IG51bWJlcikgPT4gTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+XG4gID4oXG4gICAgKGluZGV4KSA9PiAoKSA9PiB7XG4gICAgICAvLyBJbiBjYXNlIHRoZSBjdXJzb3IgaGFwcGVuZWQgdG8gYmUgaW4gYSBsb2NhdGlvbiB3aGVyZSBhXG4gICAgICAvLyByZXN1bHQgd291bGQgYXBwZWFyLCBpdCB3b3VsZCB0cmlnZ2VyIG9uTW91c2VFbnRlciBhbmQgdGhlXG4gICAgICAvLyByZXN1bHQgd291bGQgYmUgc2VsZWN0ZWQgaW1tZWRpYXRlbHkuIFRoaXMgaXMgbm90IHNvbWV0aGluZ1xuICAgICAgLy8gYSB1c2VyIHdvdWxkIGV4cGVjdCwgaGVuY2Ugd2UgcHJldmVudCBpdCBmcm9tIGhhcHBlbmluZy5cbiAgICAgIC8vIFRoZSB1c2VyIGhhcyB0byBtb3ZlIHRoZSBjdXJzb3IgdG8gYW4gb3B0aW9uIGV4cGxpY2l0bHkgZm9yXG4gICAgICAvLyBpdCB0byBiZWNvbWUgYWN0aXZlLiBIb3dldmVyLCB0aGUgdXNlciBjYW4gYWx3YXlzIGNsaWNrIGFuZFxuICAgICAgLy8gdGhhdCBhY3Rpb24gd2lsbCBiZSB0cmlnZ2VyZWQuXG4gICAgICBpZiAoc2tpcE5leHRTZWxlY3Rpb24uY3VycmVudCkge1xuICAgICAgICBza2lwTmV4dFNlbGVjdGlvbi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gc2V0cyB0aGUgc2VsZWN0ZWQgcmVzdWx0LCBtYWlubHkgZm9yIHRoZSBob3ZlciBlZmZlY3RcbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3NlbGVjdGVkUmVzdWx0JywgcGF5bG9hZDogaW5kZXggfSk7XG4gICAgfSxcbiAgICBbXVxuICApO1xuICBjb25zdCBjcmVhdGVDb21tYW5kQ2xpY2tIYW5kbGVyID0gdXNlQ2FsbGJhY2s8XG4gICAgKGNvbW1hbmQ6IENvbW1hbmQpID0+IE1vdXNlRXZlbnRIYW5kbGVyPEhUTUxEaXZFbGVtZW50PlxuICA+KFxuICAgIChjb21tYW5kKSA9PiAoZXZlbnQpID0+IHtcbiAgICAgIGV4ZWN1dGUoY29tbWFuZCwge1xuICAgICAgICBvcGVuSW5OZXdUYWI6IGhhc05ld1dpbmRvd01vZGlmaWVyKGV2ZW50KSxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgW2V4ZWN1dGVdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8QnV0bGVyQ29udGFpbmVyXG4gICAgICBvbkNsaWNrPXtoYW5kbGVDb250YWluZXJDbGlja31cbiAgICAgIGRhdGEtdGVzdGlkPVwicXVpY2stYWNjZXNzXCJcbiAgICAgIHRhYkluZGV4PXstMX1cbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17c2VhcmNoQ29udGFpbmVyUmVmfVxuICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3VpS2l0RGVzaWduVG9rZW5zLmNvbG9yU3VyZmFjZX07XG4gICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICR7dWlLaXREZXNpZ25Ub2tlbnMuYm9yZGVyUmFkaXVzNH07XG4gICAgICAgICAgbWluLWhlaWdodDogNDBweDtcblxuICAgICAgICAgIC8qIG9uZSBtb3JlIHRoYW4gYXBwLWJhciAoMjAwMDApIGFuZCBvbmUgbW9yZSB0aGFuIHRoZSBvdmVybGF5ICgyMDAwMSkgKi9cbiAgICAgICAgICB6LWluZGV4OiAyMDAwMjtcbiAgICAgICAgICB3aWR0aDogNDAwcHg7XG4gICAgICAgICAgbWFyZ2luOiA0MHB4IGF1dG87XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICAtbW96LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDEwcHggMzBweCAtOHB4IHJnYmEoMCwgMCwgMCwgMC43NSk7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206ICR7c3RhdGUuaGFzTmV0d29ya0Vycm9yXG4gICAgICAgICAgICA/ICcwJ1xuICAgICAgICAgICAgOiB1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nU307XG4gICAgICAgIGB9XG4gICAgICAgIG9uQ2xpY2s9eyhldmVudCkgPT4ge1xuICAgICAgICAgIC8vIEF2b2lkIGNsb3Npbmcgd2hlbiB0aGUgc2VhcmNoQ29udGFpbmVyIGl0c2VsZiBpcyBjbGlja2VkXG4gICAgICAgICAgLy8gSWYgd2UgZG9uJ3QgZG8gdGhpcywgdGhlbiB0aGUgb3ZlcmxheSB3aWxsIGNsb3NlIHdoZW4gZS5nLlxuICAgICAgICAgIC8vIHRoZSBzZWFyY2ggaW5wdXQgaXMgY2xpY2tlZC5cbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGB9XG4gICAgICAgID5cbiAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIGh0bWxGb3I9XCJxdWljay1hY2Nlc3Mtc2VhcmNoLWlucHV0XCJcbiAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nTX07XG4gICAgICAgICAgICAgIG1hcmdpbi10b3A6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgYH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U2VhcmNoSWNvbiBjb2xvcj1cIm5ldXRyYWw2MFwiIC8+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGlkPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICByZWY9e3NlYXJjaElucHV0UmVmfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2ludGwuZm9ybWF0TWVzc2FnZShtZXNzYWdlcy5pbnB1dFBsYWNlaG9kZXIpfVxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICAgIG91dGxpbmU6IDA7XG4gICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjJweDtcbiAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICAgICAgICAgICAgcGFkZGluZzogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nTX1cbiAgICAgICAgICAgICAgICAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdNfSAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdTfVxuICAgICAgICAgICAgICAgICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAmOjpwbGFjZWhvbGRlciB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICR7dWlLaXREZXNpZ25Ub2tlbnMuY29sb3JOZXV0cmFsNjB9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBgfVxuICAgICAgICAgICAgdmFsdWU9e3N0YXRlLnNlYXJjaFRleHR9XG4gICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgb25LZXlEb3duPXtoYW5kbGVLZXlEb3dufVxuICAgICAgICAgICAgb25LZXlVcD17aGFuZGxlS2V5VXB9XG4gICAgICAgICAgICBhdXRvRm9jdXM9e3RydWV9XG4gICAgICAgICAgICBhdXRvQ29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJxdWljay1hY2Nlc3Mtc2VhcmNoLWlucHV0XCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIHtzdGF0ZS5pc0xvYWRpbmcgJiYgKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nU307XG4gICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdTfTtcbiAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPExvYWRpbmdTcGlubmVyIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXRlLmhhc05ldHdvcmtFcnJvcilcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHt1aUtpdERlc2lnblRva2Vucy5jb2xvckVycm9yfTtcbiAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgICAgICAgICAgICBjb2xvcjogJHt1aUtpdERlc2lnblRva2Vucy5jb2xvclN1cmZhY2V9O1xuICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAke3VpS2l0RGVzaWduVG9rZW5zLmZvbnRTaXplMjB9O1xuICAgICAgICAgICAgICAgICAgcGFkZGluZzogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nWHN9O1xuICAgICAgICAgICAgICAgIGB9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSB7Li4ubWVzc2FnZXMub2ZmbGluZX0gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKHN0YXRlLnJlc3VsdHMubGVuZ3RoID09PSAwICYmIHN0YXRlLnNlYXJjaFRleHQudHJpbSgpLmxlbmd0aCA+IDApXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgICAgICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7dWlLaXREZXNpZ25Ub2tlbnMuY29sb3JOZXV0cmFsfTtcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAke3VpS2l0RGVzaWduVG9rZW5zLmNvbG9yU29saWR9O1xuICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHt1aUtpdERlc2lnblRva2Vucy5mb250U2l6ZTIwfTtcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1hzfTtcbiAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2Ugey4uLm1lc3NhZ2VzLm5vUmVzdWx0c30gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuIHN0YXRlLnJlc3VsdHMubWFwKChjb21tYW5kLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPEJ1dGxlckNvbW1hbmRcbiAgICAgICAgICAgICAga2V5PXtjb21tYW5kLmlkfVxuICAgICAgICAgICAgICBjb21tYW5kPXtjb21tYW5kfVxuICAgICAgICAgICAgICBpc1NlbGVjdGVkPXtzdGF0ZS5zZWxlY3RlZFJlc3VsdCA9PT0gaW5kZXh9XG4gICAgICAgICAgICAgIG9uTW91c2VFbnRlcj17Y3JlYXRlQ29tbWFuZE1vdXNlRW50ZXJIYW5kbGVyKGluZGV4KX1cbiAgICAgICAgICAgICAgb25DbGljaz17Y3JlYXRlQ29tbWFuZENsaWNrSGFuZGxlcihjb21tYW5kKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSk7XG4gICAgICAgIH0pKCl9XG4gICAgICA8L2Rpdj5cbiAgICA8L0J1dGxlckNvbnRhaW5lcj5cbiAgKTtcbn07XG5CdXRsZXIuZGlzcGxheU5hbWUgPSAnQnV0bGVyJztcblxuY29uc3QgQnV0bGVyV2l0aEFuaW1hdGlvbiA9IChwcm9wczogT21pdDxQcm9wcywgJ2NsYXNzTmFtZVNoYWtlQW5pbWF0aW9uJz4pID0+IChcbiAgPENsYXNzTmFtZXM+XG4gICAgeyh7IGNzcyB9KSA9PiAoXG4gICAgICA8QnV0bGVyXG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgY2xhc3NOYW1lU2hha2VBbmltYXRpb249e2Nzc2BcbiAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IDAuNDVzO1xuICAgICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGJvdGg7XG4gICAgICAgICAgYW5pbWF0aW9uLW5hbWU6ICR7c2hha2VBbmltYXRpb259O1xuICAgICAgICBgfVxuICAgICAgLz5cbiAgICApfVxuICA8L0NsYXNzTmFtZXM+XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBCdXRsZXJXaXRoQW5pbWF0aW9uO1xuIl19 */"),
910
- children: jsxRuntime.jsx(LoadingSpinner__default["default"], {})
911
- })]
912
- }), ((_context0, _context1) => {
913
- if (state.hasNetworkError) return jsxRuntime.jsx("div", {
914
- css: /*#__PURE__*/react.css("overflow:hidden;white-space:nowrap;cursor:default;background:", designSystem.designTokens.colorError, ";text-align:center;text-transform:uppercase;color:", designSystem.designTokens.colorSurface, ";font-size:", designSystem.designTokens.fontSize20, ";padding:", designSystem.designTokens.spacingXs, ";" + (process.env.NODE_ENV === "production" ? "" : ";label:Butler;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBc3FCd0IiLCJmaWxlIjoiYnV0bGVyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEtleWJvYXJkRXZlbnRIYW5kbGVyLFxuICBDaGFuZ2VFdmVudEhhbmRsZXIsXG4gIEtleWJvYXJkRXZlbnQsXG4gIE1vdXNlRXZlbnRIYW5kbGVyLFxuICBNb3VzZUV2ZW50LFxuICB1c2VSZWR1Y2VyLFxuICB1c2VSZWYsXG4gIHVzZUNhbGxiYWNrLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBGdXNlIGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IGxhc3QgZnJvbSAnbG9kYXNoL2xhc3QnO1xuaW1wb3J0IHsgRm9ybWF0dGVkTWVzc2FnZSwgdXNlSW50bCB9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IHsgZGVzaWduVG9rZW5zIGFzIHVpS2l0RGVzaWduVG9rZW5zIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyBTZWFyY2hJY29uIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvaWNvbnMnO1xuaW1wb3J0IExvYWRpbmdTcGlubmVyIGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2xvYWRpbmctc3Bpbm5lcic7XG5pbXBvcnQgQnV0bGVyQ29tbWFuZCBmcm9tICcuLi9idXRsZXItY29tbWFuZCc7XG5pbXBvcnQgQnV0bGVyQ29udGFpbmVyIGZyb20gJy4uL2J1dGxlci1jb250YWluZXInO1xuaW1wb3J0IG1lc3NhZ2VzIGZyb20gJy4uL21lc3NhZ2VzJztcbmltcG9ydCB0eXBlIHtcbiAgQ29tbWFuZCxcbiAgU2VhcmNoVGV4dCxcbiAgU2VsZWN0ZWRSZXN1bHQsXG4gIFN0YWNrLFxuICBIaXN0b3J5RW50cnksXG59IGZyb20gJy4uL3R5cGVzJztcblxuY29uc3QgaXNTZWxlY3RBbGxDb21ibyA9IChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cbiAgZXZlbnQua2V5ID09PSAnYScgJiZcbiAgZXZlbnQubWV0YUtleSAmJlxuICAhZXZlbnQuY3RybEtleSAmJlxuICAhZXZlbnQuYWx0S2V5ICYmXG4gICFldmVudC5zaGlmdEtleTtcblxuY29uc3QgaXNDbG9zZUNvbWJvID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PlxuICBldmVudC5rZXkgPT09ICdFc2NhcGUnICYmXG4gICFldmVudC5tZXRhS2V5ICYmXG4gICFldmVudC5jdHJsS2V5ICYmXG4gICFldmVudC5hbHRLZXkgJiZcbiAgIWV2ZW50LnNoaWZ0S2V5O1xuXG5jb25zdCBnZXRQbGF0Zm9ybSA9ICgpID0+IHtcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdXaW4nKSkgcmV0dXJuICd3aW5kb3dzJztcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdNYWMnKSkgcmV0dXJuICdtYWNvcyc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnWDExJykpIHJldHVybiAndW5peCc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnTGludXgnKSkgcmV0dXJuICdsaW51eCc7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBoYXNOZXdXaW5kb3dNb2RpZmllciA9IChcbiAgZXZlbnQ6IEtleWJvYXJkRXZlbnQ8SFRNTEVsZW1lbnQ+IHwgTW91c2VFdmVudDxIVE1MRWxlbWVudD5cbikgPT4ge1xuICBjb25zdCBwbGF0Zm9ybSA9IGdldFBsYXRmb3JtKCk7XG4gIHN3aXRjaCAocGxhdGZvcm0pIHtcbiAgICBjYXNlICdtYWNvcyc6XG4gICAgICByZXR1cm4gZXZlbnQubWV0YUtleTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGV2ZW50LmN0cmxLZXk7XG4gIH1cbn07XG5cbmNvbnN0IHNoYWtlQW5pbWF0aW9uID0ga2V5ZnJhbWVzYFxuICBmcm9tLFxuICB0byB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcbiAgfVxuXG4gIDE0JSxcbiAgNDIlLFxuICA3MCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTNweCwgMCwgMCk7XG4gIH1cblxuICAyOCUsXG4gIDU2JSxcbiAgODQlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDNweCwgMCwgMCk7XG4gIH1cbmA7XG5cbnR5cGUgU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogYm9vbGVhbjtcbiAgaXNMb2FkaW5nOiBib29sZWFuO1xuICBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0O1xuICBzZWxlY3RlZFJlc3VsdDogU2VsZWN0ZWRSZXN1bHQ7XG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IGJvb2xlYW47XG4gIHJlc3VsdHM6IENvbW1hbmRbXTtcbiAgc3RhY2s6IFN0YWNrW107XG59O1xudHlwZSBBY3Rpb24gPVxuICB8IHsgdHlwZTogJ25ldHdvcmtFcnJvcic7IHBheWxvYWQ6IGJvb2xlYW4gfVxuICB8IHsgdHlwZTogJ2xvYWRpbmcnOyBwYXlsb2FkOiBib29sZWFuIH1cbiAgfCB7IHR5cGU6ICdzZWxlY3RlZFJlc3VsdCc7IHBheWxvYWQ6IG51bWJlciB9XG4gIHwgeyB0eXBlOiAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH1cbiAgfCB7IHR5cGU6ICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfVxuICB8IHtcbiAgICAgIHR5cGU6ICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JztcbiAgICAgIHBheWxvYWQ6IHsgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDsgcmVzdWx0czogQ29tbWFuZFtdIH07XG4gICAgfVxuICB8IHsgdHlwZTogJ3NldE5leHRDb21tYW5kcyc7IHBheWxvYWQ6IHsgcmVzdWx0czogQ29tbWFuZFtdIH0gfVxuICB8IHtcbiAgICAgIHR5cGU6ICdzZXRQcmV2Q29tbWFuZHMnO1xuICAgICAgcGF5bG9hZDogeyBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0OyByZXN1bHRzOiBDb21tYW5kW10gfTtcbiAgICB9XG4gIHwgeyB0eXBlOiAnc2VhcmNoVGV4dCc7IHBheWxvYWQ6IHN0cmluZyB9XG4gIHwgeyB0eXBlOiAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOyBwYXlsb2FkOiBDb21tYW5kW10gfVxuICB8IHsgdHlwZTogJ3Jlc2V0U2VhcmNoVGV4dCcgfVxuICB8IHsgdHlwZTogJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJyB9XG4gIHwgeyB0eXBlOiAncmVzZXQnIH07XG5jb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogZmFsc2UsXG4gIGlzTG9hZGluZzogZmFsc2UsXG4gIHNlYXJjaFRleHQ6ICcnLFxuICBzZWxlY3RlZFJlc3VsdDogLTEsXG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IHRydWUsXG4gIHJlc3VsdHM6IFtdLFxuICBzdGFjazogW10sXG59O1xuY29uc3QgcmVkdWNlciA9IChzdGF0ZTogU3RhdGUgPSBpbml0aWFsU3RhdGUsIGFjdGlvbjogQWN0aW9uKTogU3RhdGUgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnbmV0d29ya0Vycm9yJzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBoYXNOZXR3b3JrRXJyb3I6IGFjdGlvbi5wYXlsb2FkIH07XG4gICAgY2FzZSAnbG9hZGluZyc6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgaXNMb2FkaW5nOiBhY3Rpb24ucGF5bG9hZCB9O1xuICAgIGNhc2UgJ3NlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQgfTtcbiAgICBjYXNlICdpbmNyZW1lbnRTZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6XG4gICAgICAgICAgc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IHN0YXRlLnJlc3VsdHMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0ICsgMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ2RlY3JlbWVudFNlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDpcbiAgICAgICAgICBzdGF0ZS5zZWxlY3RlZFJlc3VsdCA8IDFcbiAgICAgICAgICAgID8gc3RhdGUucmVzdWx0cy5sZW5ndGggLSAxXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0IC0gMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ3BpY2tDb21tYW5kRnJvbUhpc3RvcnknOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OiAwLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZC5zZWFyY2hUZXh0LFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZC5yZXN1bHRzLFxuICAgICAgICBzdGFjazogW10sXG4gICAgICAgIC8vIFRoZSBoaXN0b3J5IGRvZXMgbm90IGdldCBjaGFuZ2VkIGhlcmUsIGl0IHdpbGwgYmUgY2hhbmdlZCBhbG9uZ1xuICAgICAgICAvLyB3aXRoIHRoZSByZWd1bGFyIGZsb3cuXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldE5leHRDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc3RhY2s6IFtcbiAgICAgICAgICAuLi5zdGF0ZS5zdGFjayxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZWFyY2hUZXh0OiBzdGF0ZS5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgcmVzdWx0czogc3RhdGUucmVzdWx0cyxcbiAgICAgICAgICAgIHNlbGVjdGVkUmVzdWx0OiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogMCxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLnJlc3VsdHMsXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldFByZXZDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQuc2VhcmNoVGV4dCxcbiAgICAgICAgcmVzdWx0czogYWN0aW9uLnBheWxvYWQucmVzdWx0cyxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IDAsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgICAvLyBvbWl0IGxhc3QgaXRlbVxuICAgICAgICBzdGFjazogc3RhdGUuc3RhY2suc2xpY2UoMCwgLTEpLFxuICAgICAgfTtcbiAgICBjYXNlICdzZWFyY2hUZXh0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgLy8gY2xlYXIgbmV0d29yayBlcnJvciB3aGVuIHNlYXJjaCB0ZXh0IGlzIGNsZWFyZWQsIHNvIHRoYXQgdXNlcnNcbiAgICAgICAgLy8gYXJlIHRlbXB0ZWQgdG8gcmV0cnlcbiAgICAgICAgaGFzTmV0d29ya0Vycm9yOiBhY3Rpb24ucGF5bG9hZC5sZW5ndGggPiAwICYmIHN0YXRlLmhhc05ldHdvcmtFcnJvcixcbiAgICAgIH07XG4gICAgY2FzZSAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQubGVuZ3RoID4gMCA/IDAgOiAtMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogdHJ1ZSxcbiAgICAgICAgc3RhY2s6IFtdLFxuICAgICAgfTtcbiAgICBjYXNlICdyZXNldFNlYXJjaFRleHQnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlYXJjaFRleHQ6ICcnLCByZXN1bHRzOiBbXSwgc2VsZWN0ZWRSZXN1bHQ6IC0xIH07XG4gICAgY2FzZSAncmVzZXRSZXN1bHRzV2hlbkNsb3NpbmcnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlbGVjdGVkUmVzdWx0OiAtMSwgZW5hYmxlSGlzdG9yeTogdHJ1ZSB9O1xuICAgIGNhc2UgJ3Jlc2V0JzpcbiAgICAgIHJldHVybiBpbml0aWFsU3RhdGU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufTtcblxudHlwZSBQcm9wcyA9IHtcbiAgaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdO1xuICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlOiAoaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdKSA9PiB2b2lkO1xuICBzZWFyY2g6IChzZWFyY2hUZXh0OiBTZWFyY2hUZXh0KSA9PiBQcm9taXNlPENvbW1hbmRbXT47XG4gIGdldE5leHRDb21tYW5kczogKGNvbW1hbmQ6IENvbW1hbmQpID0+IFByb21pc2U8Q29tbWFuZFtdPjtcbiAgZXhlY3V0ZUNvbW1hbmQ6IChjb21tYW5kOiBDb21tYW5kLCBtZXRhOiB7IG9wZW5Jbk5ld1RhYjogYm9vbGVhbiB9KSA9PiB2b2lkO1xuICBvbkNsb3NlOiAoKSA9PiB2b2lkO1xuICBjbGFzc05hbWVTaGFrZUFuaW1hdGlvbjogc3RyaW5nO1xufTtcbmNvbnN0IEJ1dGxlciA9IChwcm9wczogUHJvcHMpID0+IHtcbiAgY29uc3QgaW50bCA9IHVzZUludGwoKTtcbiAgY29uc3QgW3N0YXRlLCBkaXNwYXRjaF0gPSB1c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxTdGF0ZSk7XG5cbiAgY29uc3Qgc2hvdWxkU2VsZWN0RmllbGRUZXh0ID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3QgaXNOZXdXaW5kb3dDb21ibyA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IHNraXBOZXh0U2VsZWN0aW9uID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3Qgc2VhcmNoQ29udGFpbmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3Qgc2VhcmNoSW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbCk7XG5cbiAgY29uc3Qgc2V0SGFzTmV0d29ya0Vycm9yID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ25ldHdvcmtFcnJvcicsIHBheWxvYWQ6IHRydWUgfSk7XG4gIH0sIFtdKTtcbiAgY29uc3QgdW5zZXRIYXNOZXR3b3JrRXJyb3IgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbmV0d29ya0Vycm9yJywgcGF5bG9hZDogZmFsc2UgfSk7XG4gIH0sIFtdKTtcbiAgY29uc3Qgc2V0SXNMb2FkaW5nID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ2xvYWRpbmcnLCBwYXlsb2FkOiB0cnVlIH0pO1xuICB9LCBbXSk7XG4gIGNvbnN0IHVuc2V0SXNMb2FkaW5nID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ2xvYWRpbmcnLCBwYXlsb2FkOiBmYWxzZSB9KTtcbiAgfSwgW10pO1xuXG4gIC8vIERlc3RydWN0dXJlIGZ1bmN0aW9ucyBmcm9tIHByb3BzIHRvIHJlZmVyZW5jZSB0aGVtIGluIHRoZSBob29rIGRlcGVuZGVuY3kgbGlzdFxuICBjb25zdCB7XG4gICAgc2VhcmNoOiBzZWFyY2hGcm9tUGFyZW50LFxuICAgIG9uQ2xvc2U6IG9uQ2xvc2VGcm9tUGFyZW50LFxuICAgIGV4ZWN1dGVDb21tYW5kOiBleGVjdXRlQ29tbWFuZEZyb21QYXJlbnQsXG4gICAgb25IaXN0b3J5RW50cmllc0NoYW5nZTogb25IaXN0b3J5RW50cmllc0NoYW5nZUZyb21QYXJlbnQsXG4gICAgZ2V0TmV4dENvbW1hbmRzOiBnZXROZXh0Q29tbWFuZHNGcm9tUGFyZW50LFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3Qgc2hha2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50KSB7XG4gICAgICBzZWFyY2hDb250YWluZXJSZWYuY3VycmVudC5jbGFzc0xpc3QucmVtb3ZlKFxuICAgICAgICBwcm9wcy5jbGFzc05hbWVTaGFrZUFuaW1hdGlvblxuICAgICAgKTtcbiAgICAgIC8vIC0+IHRyaWdnZXJpbmcgcmVmbG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdm9pZFxuICAgICAgdm9pZCBzZWFyY2hDb250YWluZXJSZWYuY3VycmVudC5vZmZzZXRXaWR0aDtcbiAgICAgIHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50LmNsYXNzTGlzdC5hZGQocHJvcHMuY2xhc3NOYW1lU2hha2VBbmltYXRpb24pO1xuICAgIH1cbiAgfSwgW3Byb3BzLmNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uXSk7XG5cbiAgY29uc3QgZXhlY3V0ZSA9IHVzZUNhbGxiYWNrKFxuICAgIChjb21tYW5kOiBDb21tYW5kLCBtZXRhOiB7IG9wZW5Jbk5ld1RhYjogYm9vbGVhbiB9KSA9PiB7XG4gICAgICAvLyBPbmx5IG1haW4gZW50cmllcyBnZXQgYWRkZWQgdG8gaGlzdG9yeSwgc28gd2hlbiBhIHN1YmNvbW1hbmQgaXMgZXhlY3V0ZWQsXG4gICAgICAvLyB3ZSBhZGQgdGhlIG1haW4gY29tbWFuZCBvZiBpdCB0byB0aGUgaGlzdG9yeSAodGhlIHRvcC1sZXZlbCBjb21tYW5kKS5cbiAgICAgIC8vXG4gICAgICAvLyBUaGUga2V5IHRvIGlkZW50aWZ5IGhpc3RvcnkgZW50cmllcyBieSBpcyBhbHdheXMgdGhlIHNlYXJjaFRleHRcbiAgICAgIC8vIFRoZXJlIHdpbGwgbmV2ZXIgYmUgdHdvIGhpc3RvcnkgZW50cmllcyB3aXRoIHRoZSBzYW1lIHNlYXJjaFRleHRcbiAgICAgIGNvbnN0IGVudHJ5ID1cbiAgICAgICAgc3RhdGUuc3RhY2subGVuZ3RoID09PSAwXG4gICAgICAgICAgPyAvLyBUaGUgc3RhY2sgaXMgZW1wdHksIHNvIHdlIGFyZSBleGVjdXRpbmcgYSB0b3AtbGV2ZWwgY29tbWFuZFxuICAgICAgICAgICAgeyBzZWFyY2hUZXh0OiBzdGF0ZS5zZWFyY2hUZXh0LCByZXN1bHRzOiBzdGF0ZS5yZXN1bHRzIH1cbiAgICAgICAgICA6IC8vIFdlIGFyZSBleGVjdXRpbmcgYSBzdWJjb21tYW5kLCBzbyB3ZSBnZXQgdGhlIHRvcC1sZXZlbCBjb21tYW5kIGZvciBpdCxcbiAgICAgICAgICAgIC8vIHdoaWNoIGlzIGF0IHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzZWFyY2hUZXh0OiBzdGF0ZS5zdGFja1swXS5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgICByZXN1bHRzOiBzdGF0ZS5zdGFja1swXS5yZXN1bHRzLFxuICAgICAgICAgICAgfTtcblxuICAgICAgLy8gQWRkIHRoZSBlbnRyeSB0byB0aGUgaGlzdG9yeSwgd2hpbGUgZXhjbHVkaW5nIGFueSBlYXJsaWVyIGhpc3RvcnkgZW50cnlcbiAgICAgIC8vIHdpdGggdGhlIHNhbWUgc2VhcmNoIHRleHQuIFRoaXMgZWZmZWN0aXZlbHkgXCJtb3Zlc1wiIHRoYXQgZW50cnkgdG8gdGhlXG4gICAgICAvLyB0b3Agb2YgdGhlIGhpc3RvcnkgKHdpdGggdGhlIG1vc3QgcmVjZW50IHJlc3VsdHMpLCBvciBhcHBlbmRzIGEgbmV3IGVudHJ5XG4gICAgICAvLyB3aGVuIGl0IGRpZG4ndCBleGlzdCBiZWZvcmUuXG4gICAgICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlRnJvbVBhcmVudChbXG4gICAgICAgIC4uLnByb3BzLmhpc3RvcnlFbnRyaWVzLmZpbHRlcihcbiAgICAgICAgICAoY29tbWFuZCkgPT4gY29tbWFuZC5zZWFyY2hUZXh0ICE9PSBlbnRyeS5zZWFyY2hUZXh0XG4gICAgICAgICksXG4gICAgICAgIGVudHJ5LFxuICAgICAgXSk7XG5cbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3Jlc2V0U2VhcmNoVGV4dCcgfSk7XG5cbiAgICAgIG9uQ2xvc2VGcm9tUGFyZW50KCk7XG5cbiAgICAgIGV4ZWN1dGVDb21tYW5kRnJvbVBhcmVudChjb21tYW5kLCBtZXRhKTtcbiAgICB9LFxuICAgIFtcbiAgICAgIGV4ZWN1dGVDb21tYW5kRnJvbVBhcmVudCxcbiAgICAgIG9uQ2xvc2VGcm9tUGFyZW50LFxuICAgICAgb25IaXN0b3J5RW50cmllc0NoYW5nZUZyb21QYXJlbnQsXG4gICAgICBwcm9wcy5oaXN0b3J5RW50cmllcyxcbiAgICAgIHN0YXRlLnJlc3VsdHMsXG4gICAgICBzdGF0ZS5zZWFyY2hUZXh0LFxuICAgICAgc3RhdGUuc3RhY2ssXG4gICAgXVxuICApO1xuICBjb25zdCBoYW5kbGVLZXlEb3duID0gdXNlQ2FsbGJhY2s8S2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD4+KFxuICAgIChldmVudCkgPT4ge1xuICAgICAgLy8gUHJldmVudGluZyBjdXJzb3IganVtcHMgY2FuIG9ubHkgaGFwcGVuIGluIG9uS2V5RG93biwgYnV0IG5vdCBpbiBvbktleVVwXG4gICAgICBldmVudC5wZXJzaXN0KCk7XG5cbiAgICAgIC8vIFdlIHdhbnQgdG8ga25vdyB3aGVuIHRoZSB1c2VyIHByZXNzZXMgY21kK2VudGVyIChjbWQgYmVpbmcgYSBtZXRhIGtleSkuXG4gICAgICAvLyBXZSBhcmUgb25seSB0b2xkIGFib3V0IHRoaXMgaW4ga2V5RG93biwgYnV0IG5vdCBpbiBrZXlVcCwgc28gd2UgbmVlZFxuICAgICAgLy8gdG8gaGFuZGxlIGl0IGhlcmVcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicgJiYgaGFzTmV3V2luZG93TW9kaWZpZXIoZXZlbnQpKSB7XG4gICAgICAgIGlzTmV3V2luZG93Q29tYm8uY3VycmVudCA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gQXZvaWQgc2VsZWN0aW5nIHRoZSB3aG9sZSBwYWdlIHdoZW4gdXNlciBzZWxlY3RlcyBldmVyeXRoaW5nIHdpdGhcbiAgICAgIC8vIGEga2V5Ym9hcmQgc2hvcnRjdXQuIFRoZXJlIGlzIHByb2JhYmx5IGEgYmV0dGVyIHdheSB0byBkbyB0aGlzIHRob3VnaC5cbiAgICAgIC8vIFRoaXMgcHJldmVudHMgdGhlIHdob2xlIHBhZ2UgZnJvbSBiZWluZyBzZWxlY3RlZCBpbiBjYXNlIHRoZSB1c2VyXG4gICAgICAvLyAxKSBvcGVucyB0aGUgc2VhcmNoIGJveFxuICAgICAgLy8gMikgdHlwZXMgaW50byBpdFxuICAgICAgLy8gMykgc2VsZWN0cyBhbGwgdGV4dCB1c2luZyBjbWQrYVxuICAgICAgLy8gNCkgY2xvc2VzIHRoZSBzZWFyY2ggYm94IHdpdGggZXNjXG4gICAgICAvLyBXaXRob3V0IHRoaXMgaGFuZGxpbmcsIHRoZSB3aG9sZSBwYWdlIHdvdWxkIG5vdyBiZSBzZWxlY3RlZFxuICAgICAgaWYgKGlzU2VsZWN0QWxsQ29tYm8oZXZlbnQpKSB7XG4gICAgICAgIC8vIFRoaXMgc3RvcHMgdGhlIGJyb3dzZXIgZnJvbSBzZWxlY3RpbmcgYW55dGhpbmdcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHNlYXJjaElucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAvLyBUaGlzIHNlbGVjdHMgdGhlIHRleHQgaW4gdGhlIHNlYXJjaCBpbnB1dFxuICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2V0U2VsZWN0aW9uUmFuZ2UoMCwgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gYXZvaWQgaW50ZXJmZXJpbmcgd2l0aCBvdGhlciBrZXkgY29tYmluYXRpb25zIHVzaW5nIG1vZGlmaWVyIGtleXNcbiAgICAgIGlmIChldmVudC5jdHJsS2V5IHx8IGV2ZW50LmFsdEtleSB8fCBldmVudC5zaGlmdEtleSB8fCBldmVudC5tZXRhS2V5KVxuICAgICAgICByZXR1cm47XG4gICAgICBpZiAoaXNDbG9zZUNvbWJvKGV2ZW50KSkgcmV0dXJuO1xuXG4gICAgICAvLyBza2lwIG5leHQgbW91c2VFbnRlciB0byBhdm9pZCBzZXR0aW5nIHNlbGVjdGVkUmVzdWx0IHdoZW4gY3Vyc29yIGp1c3RcbiAgICAgIC8vIGhhcHBlbnMgdG8gYmUgd2hlcmUgdGhlIHJlc3VsdHMgd2lsbCBwb3AgdXBcbiAgICAgIHNraXBOZXh0U2VsZWN0aW9uLmN1cnJlbnQgPSB0cnVlO1xuXG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgICAvLyBwcmV2ZW50IGN1cnNvciBmcm9tIGp1bXBpbmcgdG8gZW5kIG9mIHRleHQgaW5wdXRcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgICAgLy8gYnJvd3NlIHRocm91Z2ggaGlzdG9yeVxuICAgICAgICBpZiAoXG4gICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAoc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPCAxICYmIHN0YXRlLmVuYWJsZUhpc3RvcnkpXG4gICAgICAgICkge1xuICAgICAgICAgIHNob3VsZFNlbGVjdEZpZWxkVGV4dC5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID1cbiAgICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgID8gLy8gV2hlbiBnb2luZyBiYWNrIHRoZSBmaXJzdCBzdGVwXG4gICAgICAgICAgICAgICAgLTFcbiAgICAgICAgICAgICAgOiAvLyBXaGVuIGdvaW5nIGJhY2sgbW9yZSB0aGFuIG9uZSBzdGVwXG4gICAgICAgICAgICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgKGNvbW1hbmQpID0+IGNvbW1hbmQuc2VhcmNoVGV4dCA9PT0gc3RhdGUuc2VhcmNoVGV4dFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgLy8gUGljayB0aGUgcHJldmlvdXMgY29tbWFuZCBmcm9tIHRoZSBoaXN0b3J5XG4gICAgICAgICAgY29uc3QgcHJldkNvbW1hbmQgPVxuICAgICAgICAgICAgc2VsZWN0ZWRJbmRleCA9PT0gLTFcbiAgICAgICAgICAgICAgPyAvLyBwcmV2aW91cyBjb21tYW5kIG9uIHRvcCBvZiB0aGUgaGlzdG9yeSB3aGVuIGdvaW5nIGJhY2sgb25cbiAgICAgICAgICAgICAgICAvLyBmaXJzdCBzdGVwXG4gICAgICAgICAgICAgICAgbGFzdChwcm9wcy5oaXN0b3J5RW50cmllcylcbiAgICAgICAgICAgICAgOiAvLyBwcmV2aW91cyBjb21tYW5kIGlzIGRlZXBlciBkb3duXG4gICAgICAgICAgICAgICAgLy8gV2hlbiB0aGUgaGlzdG9yeSBkb2VzIG5vdCBleGlzdCAobmVnYXRpdmUgaW5kZXgpLCB0aGVuXG4gICAgICAgICAgICAgICAgLy8gdGhpcyBpbXBsaWNpdGx5IHJldHVybnMgdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXNbc2VsZWN0ZWRJbmRleCAtIDFdO1xuICAgICAgICAgIC8vIFNraXAgd2hlbiBubyBwcmV2aW91cyBlbnRyeSBleGlzdHMgaW4gdGhlIGhpc3RvcnlcbiAgICAgICAgICBpZiAoIXByZXZDb21tYW5kKSByZXR1cm47XG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ3BpY2tDb21tYW5kRnJvbUhpc3RvcnknLFxuICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgICBzZWFyY2hUZXh0OiBwcmV2Q29tbWFuZC5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgICByZXN1bHRzOiBwcmV2Q29tbWFuZC5yZXN1bHRzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcHJldmVudCBjdXJzb3IgZnJvbSBqdW1waW5nIHRvIGJlZ2lubmluZyBvZiB0ZXh0IGlucHV0XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ2RlY3JlbWVudFNlbGVjdGVkUmVzdWx0JyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXRlLnNlbGVjdGVkUmVzdWx0ID4gLTEpIHtcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnKSB7XG4gICAgICAgICAgY29uc3QgY29tbWFuZCA9IHN0YXRlLnJlc3VsdHNbc3RhdGUuc2VsZWN0ZWRSZXN1bHRdO1xuICAgICAgICAgIGNvbnN0IHNlYXJjaFRleHQgPSBzdGF0ZS5zZWFyY2hUZXh0O1xuICAgICAgICAgIGNvbnN0IGlzQ3Vyc29yQXRFbmQgPVxuICAgICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudCAmJlxuICAgICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XG5cbiAgICAgICAgICBjb25zdCBpc0V2ZXJ5dGhpbmdTZWxlY3RlZCA9XG4gICAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50ICYmXG4gICAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0ID09PSAwICYmXG4gICAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XG5cbiAgICAgICAgICAvLyBvbmx5IGFsbG93IGRpdmluZyBpbiB3aGVuIGN1cnNvciBpcyBhdCBlbmQgb2YgaW5wdXQgb3Igd2hlblxuICAgICAgICAgIC8vIHRoZSBjb21wbGV0ZSB0ZXh0IGlzIHNlbGVjdGVkICh3aGVuIGJyb3dzaW5nIHRocm91Z2ggaGlzdG9yeSlcbiAgICAgICAgICBpZiAoIWlzQ3Vyc29yQXRFbmQgJiYgIWlzRXZlcnl0aGluZ1NlbGVjdGVkKSByZXR1cm47XG5cbiAgICAgICAgICB1bnNldEhhc05ldHdvcmtFcnJvcigpO1xuXG4gICAgICAgICAgLy8gTk9URTogc2luY2Ugd2UgbmVlZCB0byBmZXRjaCB0aGUgXCJuZXh0IGNvbW1hbmRcIiwgd2hpY2ggaXMgYW4gYXN5bmMgb3BlcmF0aW9uLFxuICAgICAgICAgIC8vIHdlIHVzZSBhIElJRkUgdG8gcHJvY2VzcyB0aGF0IGFuZCBldmVudHVhbGx5IHVwZGF0ZSB0aGUgc3RhdGUuXG4gICAgICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGlmIChjb21tYW5kKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG5leHRDb21tYW5kcyA9IGF3YWl0IGdldE5leHRDb21tYW5kc0Zyb21QYXJlbnQoY29tbWFuZCk7XG4gICAgICAgICAgICAgIC8vIGF2b2lkIG1vdmluZyBjdXJzb3Igd2hlbiB0aGVyZSBhcmUgc3ViLW9wdGlvbnNcbiAgICAgICAgICAgICAgaWYgKG5leHRDb21tYW5kcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgLy8gRW5zdXJlIHRoZSBzZWFyY2ggdGV4dCBoYXMgbm90IGNoYW5nZWQgd2hpbGUgd2Ugd2VyZSBsb2FkaW5nXG4gICAgICAgICAgICAgICAgLy8gdGhlIG5leHQgcmVzdWx0cywgb3RoZXJ3aXNlIHdlJ2QgaW50ZXJydXB0IHRoZSB1c2VyLlxuICAgICAgICAgICAgICAgIC8vIFRocm93IGF3YXkgdGhlIHJlc3VsdHMgaW4gY2FzZSB0aGUgc2VhcmNoIHRleHQgaGFzIGNoYW5nZWQuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLnNlYXJjaFRleHQgPT09IHNlYXJjaFRleHQpIHtcbiAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3NldE5leHRDb21tYW5kcycsXG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQ6IHsgcmVzdWx0czogbmV4dENvbW1hbmRzIH0sXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzaGFrZSgpO1xuICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnKSB7XG4gICAgICAgICAgLy8gZ28gbGVmdCBpbiBzdGFja1xuICAgICAgICAgIGNvbnN0IHByZXZDb21tYW5kID0gbGFzdChzdGF0ZS5zdGFjayk7XG5cbiAgICAgICAgICAvLyBkbyBub3RoaW5nIHdoZW4gd2UgY2FuJ3QgZ28gbGVmdCBhbnltb3JlXG4gICAgICAgICAgaWYgKCFwcmV2Q29tbWFuZCkgcmV0dXJuO1xuXG4gICAgICAgICAgLy8gcHJldmVudCBjdXJzb3IgZnJvbSBqdW1waW5nIGEgY2hhciB0byB0aGUgbGVmdCBpbiB0ZXh0IGlucHV0XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdzZXRQcmV2Q29tbWFuZHMnLFxuICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgICBzZWFyY2hUZXh0OiBwcmV2Q29tbWFuZC5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgICByZXN1bHRzOiBwcmV2Q29tbWFuZC5yZXN1bHRzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIGdldE5leHRDb21tYW5kc0Zyb21QYXJlbnQsXG4gICAgICBwcm9wcy5oaXN0b3J5RW50cmllcyxcbiAgICAgIHNoYWtlLFxuICAgICAgc3RhdGUsXG4gICAgICB1bnNldEhhc05ldHdvcmtFcnJvcixcbiAgICBdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUtleVVwID0gdXNlQ2FsbGJhY2s8S2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD4+KFxuICAgIChldmVudCkgPT4ge1xuICAgICAgLy8gc2V0dGluZyB0aGUgc2VsZWN0aW9uIGNhbiBvbmx5IGhhcHBlbiBpbiBvbktleVVwXG4gICAgICBpZiAoc2hvdWxkU2VsZWN0RmllbGRUZXh0LmN1cnJlbnQpIHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgaW5wdXQuc2VsZWN0KCk7XG4gICAgICAgIHNob3VsZFNlbGVjdEZpZWxkVGV4dC5jdXJyZW50ID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5rZXkgIT09ICdFbnRlcicgJiYgIWlzTmV3V2luZG93Q29tYm8uY3VycmVudCkgcmV0dXJuIHRydWU7XG5cbiAgICAgIC8vIFVzZXIganVzdCB0cmlnZ2VyZWQgdGhlIHNlYXJjaFxuICAgICAgaWYgKHN0YXRlLnNlbGVjdGVkUmVzdWx0ID09PSAtMSkgcmV0dXJuIHRydWU7XG5cbiAgICAgIC8vIFVzZXIgaGFkIHNvbWV0aGluZyBzZWxlY3RlZCBhbmQgd2FudHMgdG8gZ28gdGhlcmVcbiAgICAgIGV4ZWN1dGUoc3RhdGUucmVzdWx0c1tzdGF0ZS5zZWxlY3RlZFJlc3VsdF0sIHtcbiAgICAgICAgb3BlbkluTmV3VGFiOiBpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQsXG4gICAgICB9KTtcblxuICAgICAgaXNOZXdXaW5kb3dDb21iby5jdXJyZW50ID0gZmFsc2U7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIFtleGVjdXRlLCBzdGF0ZS5yZXN1bHRzLCBzdGF0ZS5zZWxlY3RlZFJlc3VsdF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gdXNlQ2FsbGJhY2s8Q2hhbmdlRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+PihcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHNlYXJjaFRleHQgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgICBpZiAoc2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3Jlc2V0JyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdzZWFyY2hUZXh0JywgcGF5bG9hZDogc2VhcmNoVGV4dCB9KTtcblxuICAgICAgLy8gQSBzZWFyY2ggdmlhIG5ldHdvcmsgaXMgb25seSB0cmlnZ2VyZWQgd2hlbiB0aGVyZVxuICAgICAgLy8gYXJlIG1vcmUgdGhhbiB0aHJlZSBjaGFyYWN0ZXJzLiBTbyBubyBmYWxzZSBsb2FkaW5nXG4gICAgICAvLyBpbmRpY2F0aW9uIGlzIGdpdmVuLlxuICAgICAgaWYgKHNlYXJjaFRleHQudHJpbSgpLmxlbmd0aCA+IDMpIHtcbiAgICAgICAgc2V0SXNMb2FkaW5nKCk7XG4gICAgICB9XG5cbiAgICAgIHNlYXJjaEZyb21QYXJlbnQoc2VhcmNoVGV4dCkudGhlbihcbiAgICAgICAgKGFzeW5jUmVzdWx0czogQ29tbWFuZFtdKSA9PiB7XG4gICAgICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IoKTtcbiAgICAgICAgICB1bnNldElzTG9hZGluZygpO1xuXG4gICAgICAgICAgY29uc3QgZnVzZSA9IG5ldyBGdXNlKGFzeW5jUmVzdWx0cywge1xuICAgICAgICAgICAga2V5czogW1xuICAgICAgICAgICAgICB7IG5hbWU6ICd0ZXh0Jywgd2VpZ2h0OiAwLjYgfSxcbiAgICAgICAgICAgICAgeyBuYW1lOiAna2V5d29yZHMnLCB3ZWlnaHQ6IDAuNCB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIG1pbk1hdGNoQ2hhckxlbmd0aDogMixcbiAgICAgICAgICAgIGluY2x1ZGVTY29yZTogdHJ1ZSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IHNlYXJjaFJlc3VsdHMgPSBmdXNlXG4gICAgICAgICAgICAuc2VhcmNoKHNlYXJjaFRleHQpXG4gICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IHJlc3VsdHMgd2l0aCBhIG1hdGNoaW5nIHNjb3JlIG92ZXIgMC43NVxuICAgICAgICAgICAgLmZpbHRlcigocmVzdWx0KSA9PiAocmVzdWx0LnNjb3JlID8gcmVzdWx0LnNjb3JlIDwgMC43NSA6IGZhbHNlKSlcbiAgICAgICAgICAgIC8vIEtlZXAgYSBtYXhpbWFsIG9mIDkgcmVzdWx0c1xuICAgICAgICAgICAgLnNsaWNlKDAsIDkpO1xuXG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ3NldFNlYXJjaFRleHRSZXN1bHRzJyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHNlYXJjaFJlc3VsdHMubWFwKChyZXN1bHQpID0+IHJlc3VsdC5pdGVtKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgIHVuc2V0SXNMb2FkaW5nKCk7XG4gICAgICAgICAgc2V0SGFzTmV0d29ya0Vycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSxcbiAgICBbXG4gICAgICBzZWFyY2hGcm9tUGFyZW50LFxuICAgICAgc2V0SGFzTmV0d29ya0Vycm9yLFxuICAgICAgc2V0SXNMb2FkaW5nLFxuICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IsXG4gICAgICB1bnNldElzTG9hZGluZyxcbiAgICBdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUNvbnRhaW5lckNsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJyB9KTtcbiAgICBvbkNsb3NlRnJvbVBhcmVudCgpO1xuICB9LCBbb25DbG9zZUZyb21QYXJlbnRdKTtcblxuICBjb25zdCBjcmVhdGVDb21tYW5kTW91c2VFbnRlckhhbmRsZXIgPSB1c2VDYWxsYmFjazxcbiAgICAoaW5kZXg6IG51bWJlcikgPT4gTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+XG4gID4oXG4gICAgKGluZGV4KSA9PiAoKSA9PiB7XG4gICAgICAvLyBJbiBjYXNlIHRoZSBjdXJzb3IgaGFwcGVuZWQgdG8gYmUgaW4gYSBsb2NhdGlvbiB3aGVyZSBhXG4gICAgICAvLyByZXN1bHQgd291bGQgYXBwZWFyLCBpdCB3b3VsZCB0cmlnZ2VyIG9uTW91c2VFbnRlciBhbmQgdGhlXG4gICAgICAvLyByZXN1bHQgd291bGQgYmUgc2VsZWN0ZWQgaW1tZWRpYXRlbHkuIFRoaXMgaXMgbm90IHNvbWV0aGluZ1xuICAgICAgLy8gYSB1c2VyIHdvdWxkIGV4cGVjdCwgaGVuY2Ugd2UgcHJldmVudCBpdCBmcm9tIGhhcHBlbmluZy5cbiAgICAgIC8vIFRoZSB1c2VyIGhhcyB0byBtb3ZlIHRoZSBjdXJzb3IgdG8gYW4gb3B0aW9uIGV4cGxpY2l0bHkgZm9yXG4gICAgICAvLyBpdCB0byBiZWNvbWUgYWN0aXZlLiBIb3dldmVyLCB0aGUgdXNlciBjYW4gYWx3YXlzIGNsaWNrIGFuZFxuICAgICAgLy8gdGhhdCBhY3Rpb24gd2lsbCBiZSB0cmlnZ2VyZWQuXG4gICAgICBpZiAoc2tpcE5leHRTZWxlY3Rpb24uY3VycmVudCkge1xuICAgICAgICBza2lwTmV4dFNlbGVjdGlvbi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gc2V0cyB0aGUgc2VsZWN0ZWQgcmVzdWx0LCBtYWlubHkgZm9yIHRoZSBob3ZlciBlZmZlY3RcbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3NlbGVjdGVkUmVzdWx0JywgcGF5bG9hZDogaW5kZXggfSk7XG4gICAgfSxcbiAgICBbXVxuICApO1xuICBjb25zdCBjcmVhdGVDb21tYW5kQ2xpY2tIYW5kbGVyID0gdXNlQ2FsbGJhY2s8XG4gICAgKGNvbW1hbmQ6IENvbW1hbmQpID0+IE1vdXNlRXZlbnRIYW5kbGVyPEhUTUxEaXZFbGVtZW50PlxuICA+KFxuICAgIChjb21tYW5kKSA9PiAoZXZlbnQpID0+IHtcbiAgICAgIGV4ZWN1dGUoY29tbWFuZCwge1xuICAgICAgICBvcGVuSW5OZXdUYWI6IGhhc05ld1dpbmRvd01vZGlmaWVyKGV2ZW50KSxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgW2V4ZWN1dGVdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8QnV0bGVyQ29udGFpbmVyXG4gICAgICBvbkNsaWNrPXtoYW5kbGVDb250YWluZXJDbGlja31cbiAgICAgIGRhdGEtdGVzdGlkPVwicXVpY2stYWNjZXNzXCJcbiAgICAgIHRhYkluZGV4PXstMX1cbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17c2VhcmNoQ29udGFpbmVyUmVmfVxuICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3VpS2l0RGVzaWduVG9rZW5zLmNvbG9yU3VyZmFjZX07XG4gICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICR7dWlLaXREZXNpZ25Ub2tlbnMuYm9yZGVyUmFkaXVzNH07XG4gICAgICAgICAgbWluLWhlaWdodDogNDBweDtcblxuICAgICAgICAgIC8qIG9uZSBtb3JlIHRoYW4gYXBwLWJhciAoMjAwMDApIGFuZCBvbmUgbW9yZSB0aGFuIHRoZSBvdmVybGF5ICgyMDAwMSkgKi9cbiAgICAgICAgICB6LWluZGV4OiAyMDAwMjtcbiAgICAgICAgICB3aWR0aDogNDAwcHg7XG4gICAgICAgICAgbWFyZ2luOiA0MHB4IGF1dG87XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICAtbW96LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDEwcHggMzBweCAtOHB4IHJnYmEoMCwgMCwgMCwgMC43NSk7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206ICR7c3RhdGUuaGFzTmV0d29ya0Vycm9yXG4gICAgICAgICAgICA/ICcwJ1xuICAgICAgICAgICAgOiB1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nU307XG4gICAgICAgIGB9XG4gICAgICAgIG9uQ2xpY2s9eyhldmVudCkgPT4ge1xuICAgICAgICAgIC8vIEF2b2lkIGNsb3Npbmcgd2hlbiB0aGUgc2VhcmNoQ29udGFpbmVyIGl0c2VsZiBpcyBjbGlja2VkXG4gICAgICAgICAgLy8gSWYgd2UgZG9uJ3QgZG8gdGhpcywgdGhlbiB0aGUgb3ZlcmxheSB3aWxsIGNsb3NlIHdoZW4gZS5nLlxuICAgICAgICAgIC8vIHRoZSBzZWFyY2ggaW5wdXQgaXMgY2xpY2tlZC5cbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGB9XG4gICAgICAgID5cbiAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIGh0bWxGb3I9XCJxdWljay1hY2Nlc3Mtc2VhcmNoLWlucHV0XCJcbiAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nTX07XG4gICAgICAgICAgICAgIG1hcmdpbi10b3A6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgYH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U2VhcmNoSWNvbiBjb2xvcj1cIm5ldXRyYWw2MFwiIC8+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGlkPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICByZWY9e3NlYXJjaElucHV0UmVmfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2ludGwuZm9ybWF0TWVzc2FnZShtZXNzYWdlcy5pbnB1dFBsYWNlaG9kZXIpfVxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICAgIG91dGxpbmU6IDA7XG4gICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjJweDtcbiAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICAgICAgICAgICAgcGFkZGluZzogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nTX1cbiAgICAgICAgICAgICAgICAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdNfSAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdTfVxuICAgICAgICAgICAgICAgICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAmOjpwbGFjZWhvbGRlciB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICR7dWlLaXREZXNpZ25Ub2tlbnMuY29sb3JOZXV0cmFsNjB9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBgfVxuICAgICAgICAgICAgdmFsdWU9e3N0YXRlLnNlYXJjaFRleHR9XG4gICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgb25LZXlEb3duPXtoYW5kbGVLZXlEb3dufVxuICAgICAgICAgICAgb25LZXlVcD17aGFuZGxlS2V5VXB9XG4gICAgICAgICAgICBhdXRvRm9jdXM9e3RydWV9XG4gICAgICAgICAgICBhdXRvQ29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJxdWljay1hY2Nlc3Mtc2VhcmNoLWlucHV0XCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIHtzdGF0ZS5pc0xvYWRpbmcgJiYgKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nU307XG4gICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdTfTtcbiAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPExvYWRpbmdTcGlubmVyIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXRlLmhhc05ldHdvcmtFcnJvcilcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHt1aUtpdERlc2lnblRva2Vucy5jb2xvckVycm9yfTtcbiAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgICAgICAgICAgICBjb2xvcjogJHt1aUtpdERlc2lnblRva2Vucy5jb2xvclN1cmZhY2V9O1xuICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAke3VpS2l0RGVzaWduVG9rZW5zLmZvbnRTaXplMjB9O1xuICAgICAgICAgICAgICAgICAgcGFkZGluZzogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nWHN9O1xuICAgICAgICAgICAgICAgIGB9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSB7Li4ubWVzc2FnZXMub2ZmbGluZX0gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKHN0YXRlLnJlc3VsdHMubGVuZ3RoID09PSAwICYmIHN0YXRlLnNlYXJjaFRleHQudHJpbSgpLmxlbmd0aCA+IDApXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgICAgICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7dWlLaXREZXNpZ25Ub2tlbnMuY29sb3JOZXV0cmFsfTtcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAke3VpS2l0RGVzaWduVG9rZW5zLmNvbG9yU29saWR9O1xuICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHt1aUtpdERlc2lnblRva2Vucy5mb250U2l6ZTIwfTtcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1hzfTtcbiAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2Ugey4uLm1lc3NhZ2VzLm5vUmVzdWx0c30gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuIHN0YXRlLnJlc3VsdHMubWFwKChjb21tYW5kLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPEJ1dGxlckNvbW1hbmRcbiAgICAgICAgICAgICAga2V5PXtjb21tYW5kLmlkfVxuICAgICAgICAgICAgICBjb21tYW5kPXtjb21tYW5kfVxuICAgICAgICAgICAgICBpc1NlbGVjdGVkPXtzdGF0ZS5zZWxlY3RlZFJlc3VsdCA9PT0gaW5kZXh9XG4gICAgICAgICAgICAgIG9uTW91c2VFbnRlcj17Y3JlYXRlQ29tbWFuZE1vdXNlRW50ZXJIYW5kbGVyKGluZGV4KX1cbiAgICAgICAgICAgICAgb25DbGljaz17Y3JlYXRlQ29tbWFuZENsaWNrSGFuZGxlcihjb21tYW5kKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSk7XG4gICAgICAgIH0pKCl9XG4gICAgICA8L2Rpdj5cbiAgICA8L0J1dGxlckNvbnRhaW5lcj5cbiAgKTtcbn07XG5CdXRsZXIuZGlzcGxheU5hbWUgPSAnQnV0bGVyJztcblxuY29uc3QgQnV0bGVyV2l0aEFuaW1hdGlvbiA9IChwcm9wczogT21pdDxQcm9wcywgJ2NsYXNzTmFtZVNoYWtlQW5pbWF0aW9uJz4pID0+IChcbiAgPENsYXNzTmFtZXM+XG4gICAgeyh7IGNzcyB9KSA9PiAoXG4gICAgICA8QnV0bGVyXG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgY2xhc3NOYW1lU2hha2VBbmltYXRpb249e2Nzc2BcbiAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IDAuNDVzO1xuICAgICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGJvdGg7XG4gICAgICAgICAgYW5pbWF0aW9uLW5hbWU6ICR7c2hha2VBbmltYXRpb259O1xuICAgICAgICBgfVxuICAgICAgLz5cbiAgICApfVxuICA8L0NsYXNzTmFtZXM+XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBCdXRsZXJXaXRoQW5pbWF0aW9uO1xuIl19 */"),
915
- children: jsxRuntime.jsx(reactIntl.FormattedMessage, _objectSpread({}, messages.offline))
916
- });
917
- if (state.results.length === 0 && _trimInstanceProperty__default["default"](_context0 = state.searchText).call(_context0).length > 0) return jsxRuntime.jsx("div", {
918
- css: /*#__PURE__*/react.css("overflow:hidden;white-space:nowrap;cursor:default;background:", designSystem.designTokens.colorNeutral, ";color:", designSystem.designTokens.colorSolid, ";text-align:center;text-transform:uppercase;font-size:", designSystem.designTokens.fontSize20, ";padding:", designSystem.designTokens.spacingXs, ";" + (process.env.NODE_ENV === "production" ? "" : ";label:Butler;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBeXJCd0IiLCJmaWxlIjoiYnV0bGVyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEtleWJvYXJkRXZlbnRIYW5kbGVyLFxuICBDaGFuZ2VFdmVudEhhbmRsZXIsXG4gIEtleWJvYXJkRXZlbnQsXG4gIE1vdXNlRXZlbnRIYW5kbGVyLFxuICBNb3VzZUV2ZW50LFxuICB1c2VSZWR1Y2VyLFxuICB1c2VSZWYsXG4gIHVzZUNhbGxiYWNrLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBGdXNlIGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IGxhc3QgZnJvbSAnbG9kYXNoL2xhc3QnO1xuaW1wb3J0IHsgRm9ybWF0dGVkTWVzc2FnZSwgdXNlSW50bCB9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IHsgZGVzaWduVG9rZW5zIGFzIHVpS2l0RGVzaWduVG9rZW5zIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyBTZWFyY2hJY29uIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvaWNvbnMnO1xuaW1wb3J0IExvYWRpbmdTcGlubmVyIGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2xvYWRpbmctc3Bpbm5lcic7XG5pbXBvcnQgQnV0bGVyQ29tbWFuZCBmcm9tICcuLi9idXRsZXItY29tbWFuZCc7XG5pbXBvcnQgQnV0bGVyQ29udGFpbmVyIGZyb20gJy4uL2J1dGxlci1jb250YWluZXInO1xuaW1wb3J0IG1lc3NhZ2VzIGZyb20gJy4uL21lc3NhZ2VzJztcbmltcG9ydCB0eXBlIHtcbiAgQ29tbWFuZCxcbiAgU2VhcmNoVGV4dCxcbiAgU2VsZWN0ZWRSZXN1bHQsXG4gIFN0YWNrLFxuICBIaXN0b3J5RW50cnksXG59IGZyb20gJy4uL3R5cGVzJztcblxuY29uc3QgaXNTZWxlY3RBbGxDb21ibyA9IChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cbiAgZXZlbnQua2V5ID09PSAnYScgJiZcbiAgZXZlbnQubWV0YUtleSAmJlxuICAhZXZlbnQuY3RybEtleSAmJlxuICAhZXZlbnQuYWx0S2V5ICYmXG4gICFldmVudC5zaGlmdEtleTtcblxuY29uc3QgaXNDbG9zZUNvbWJvID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PlxuICBldmVudC5rZXkgPT09ICdFc2NhcGUnICYmXG4gICFldmVudC5tZXRhS2V5ICYmXG4gICFldmVudC5jdHJsS2V5ICYmXG4gICFldmVudC5hbHRLZXkgJiZcbiAgIWV2ZW50LnNoaWZ0S2V5O1xuXG5jb25zdCBnZXRQbGF0Zm9ybSA9ICgpID0+IHtcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdXaW4nKSkgcmV0dXJuICd3aW5kb3dzJztcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdNYWMnKSkgcmV0dXJuICdtYWNvcyc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnWDExJykpIHJldHVybiAndW5peCc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnTGludXgnKSkgcmV0dXJuICdsaW51eCc7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBoYXNOZXdXaW5kb3dNb2RpZmllciA9IChcbiAgZXZlbnQ6IEtleWJvYXJkRXZlbnQ8SFRNTEVsZW1lbnQ+IHwgTW91c2VFdmVudDxIVE1MRWxlbWVudD5cbikgPT4ge1xuICBjb25zdCBwbGF0Zm9ybSA9IGdldFBsYXRmb3JtKCk7XG4gIHN3aXRjaCAocGxhdGZvcm0pIHtcbiAgICBjYXNlICdtYWNvcyc6XG4gICAgICByZXR1cm4gZXZlbnQubWV0YUtleTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGV2ZW50LmN0cmxLZXk7XG4gIH1cbn07XG5cbmNvbnN0IHNoYWtlQW5pbWF0aW9uID0ga2V5ZnJhbWVzYFxuICBmcm9tLFxuICB0byB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcbiAgfVxuXG4gIDE0JSxcbiAgNDIlLFxuICA3MCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTNweCwgMCwgMCk7XG4gIH1cblxuICAyOCUsXG4gIDU2JSxcbiAgODQlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDNweCwgMCwgMCk7XG4gIH1cbmA7XG5cbnR5cGUgU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogYm9vbGVhbjtcbiAgaXNMb2FkaW5nOiBib29sZWFuO1xuICBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0O1xuICBzZWxlY3RlZFJlc3VsdDogU2VsZWN0ZWRSZXN1bHQ7XG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IGJvb2xlYW47XG4gIHJlc3VsdHM6IENvbW1hbmRbXTtcbiAgc3RhY2s6IFN0YWNrW107XG59O1xudHlwZSBBY3Rpb24gPVxuICB8IHsgdHlwZTogJ25ldHdvcmtFcnJvcic7IHBheWxvYWQ6IGJvb2xlYW4gfVxuICB8IHsgdHlwZTogJ2xvYWRpbmcnOyBwYXlsb2FkOiBib29sZWFuIH1cbiAgfCB7IHR5cGU6ICdzZWxlY3RlZFJlc3VsdCc7IHBheWxvYWQ6IG51bWJlciB9XG4gIHwgeyB0eXBlOiAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH1cbiAgfCB7IHR5cGU6ICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfVxuICB8IHtcbiAgICAgIHR5cGU6ICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JztcbiAgICAgIHBheWxvYWQ6IHsgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDsgcmVzdWx0czogQ29tbWFuZFtdIH07XG4gICAgfVxuICB8IHsgdHlwZTogJ3NldE5leHRDb21tYW5kcyc7IHBheWxvYWQ6IHsgcmVzdWx0czogQ29tbWFuZFtdIH0gfVxuICB8IHtcbiAgICAgIHR5cGU6ICdzZXRQcmV2Q29tbWFuZHMnO1xuICAgICAgcGF5bG9hZDogeyBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0OyByZXN1bHRzOiBDb21tYW5kW10gfTtcbiAgICB9XG4gIHwgeyB0eXBlOiAnc2VhcmNoVGV4dCc7IHBheWxvYWQ6IHN0cmluZyB9XG4gIHwgeyB0eXBlOiAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOyBwYXlsb2FkOiBDb21tYW5kW10gfVxuICB8IHsgdHlwZTogJ3Jlc2V0U2VhcmNoVGV4dCcgfVxuICB8IHsgdHlwZTogJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJyB9XG4gIHwgeyB0eXBlOiAncmVzZXQnIH07XG5jb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogZmFsc2UsXG4gIGlzTG9hZGluZzogZmFsc2UsXG4gIHNlYXJjaFRleHQ6ICcnLFxuICBzZWxlY3RlZFJlc3VsdDogLTEsXG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IHRydWUsXG4gIHJlc3VsdHM6IFtdLFxuICBzdGFjazogW10sXG59O1xuY29uc3QgcmVkdWNlciA9IChzdGF0ZTogU3RhdGUgPSBpbml0aWFsU3RhdGUsIGFjdGlvbjogQWN0aW9uKTogU3RhdGUgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnbmV0d29ya0Vycm9yJzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBoYXNOZXR3b3JrRXJyb3I6IGFjdGlvbi5wYXlsb2FkIH07XG4gICAgY2FzZSAnbG9hZGluZyc6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgaXNMb2FkaW5nOiBhY3Rpb24ucGF5bG9hZCB9O1xuICAgIGNhc2UgJ3NlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQgfTtcbiAgICBjYXNlICdpbmNyZW1lbnRTZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6XG4gICAgICAgICAgc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IHN0YXRlLnJlc3VsdHMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0ICsgMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ2RlY3JlbWVudFNlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDpcbiAgICAgICAgICBzdGF0ZS5zZWxlY3RlZFJlc3VsdCA8IDFcbiAgICAgICAgICAgID8gc3RhdGUucmVzdWx0cy5sZW5ndGggLSAxXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0IC0gMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ3BpY2tDb21tYW5kRnJvbUhpc3RvcnknOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OiAwLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZC5zZWFyY2hUZXh0LFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZC5yZXN1bHRzLFxuICAgICAgICBzdGFjazogW10sXG4gICAgICAgIC8vIFRoZSBoaXN0b3J5IGRvZXMgbm90IGdldCBjaGFuZ2VkIGhlcmUsIGl0IHdpbGwgYmUgY2hhbmdlZCBhbG9uZ1xuICAgICAgICAvLyB3aXRoIHRoZSByZWd1bGFyIGZsb3cuXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldE5leHRDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc3RhY2s6IFtcbiAgICAgICAgICAuLi5zdGF0ZS5zdGFjayxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZWFyY2hUZXh0OiBzdGF0ZS5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgcmVzdWx0czogc3RhdGUucmVzdWx0cyxcbiAgICAgICAgICAgIHNlbGVjdGVkUmVzdWx0OiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogMCxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLnJlc3VsdHMsXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldFByZXZDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQuc2VhcmNoVGV4dCxcbiAgICAgICAgcmVzdWx0czogYWN0aW9uLnBheWxvYWQucmVzdWx0cyxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IDAsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgICAvLyBvbWl0IGxhc3QgaXRlbVxuICAgICAgICBzdGFjazogc3RhdGUuc3RhY2suc2xpY2UoMCwgLTEpLFxuICAgICAgfTtcbiAgICBjYXNlICdzZWFyY2hUZXh0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgLy8gY2xlYXIgbmV0d29yayBlcnJvciB3aGVuIHNlYXJjaCB0ZXh0IGlzIGNsZWFyZWQsIHNvIHRoYXQgdXNlcnNcbiAgICAgICAgLy8gYXJlIHRlbXB0ZWQgdG8gcmV0cnlcbiAgICAgICAgaGFzTmV0d29ya0Vycm9yOiBhY3Rpb24ucGF5bG9hZC5sZW5ndGggPiAwICYmIHN0YXRlLmhhc05ldHdvcmtFcnJvcixcbiAgICAgIH07XG4gICAgY2FzZSAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQubGVuZ3RoID4gMCA/IDAgOiAtMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogdHJ1ZSxcbiAgICAgICAgc3RhY2s6IFtdLFxuICAgICAgfTtcbiAgICBjYXNlICdyZXNldFNlYXJjaFRleHQnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlYXJjaFRleHQ6ICcnLCByZXN1bHRzOiBbXSwgc2VsZWN0ZWRSZXN1bHQ6IC0xIH07XG4gICAgY2FzZSAncmVzZXRSZXN1bHRzV2hlbkNsb3NpbmcnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlbGVjdGVkUmVzdWx0OiAtMSwgZW5hYmxlSGlzdG9yeTogdHJ1ZSB9O1xuICAgIGNhc2UgJ3Jlc2V0JzpcbiAgICAgIHJldHVybiBpbml0aWFsU3RhdGU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufTtcblxudHlwZSBQcm9wcyA9IHtcbiAgaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdO1xuICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlOiAoaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdKSA9PiB2b2lkO1xuICBzZWFyY2g6IChzZWFyY2hUZXh0OiBTZWFyY2hUZXh0KSA9PiBQcm9taXNlPENvbW1hbmRbXT47XG4gIGdldE5leHRDb21tYW5kczogKGNvbW1hbmQ6IENvbW1hbmQpID0+IFByb21pc2U8Q29tbWFuZFtdPjtcbiAgZXhlY3V0ZUNvbW1hbmQ6IChjb21tYW5kOiBDb21tYW5kLCBtZXRhOiB7IG9wZW5Jbk5ld1RhYjogYm9vbGVhbiB9KSA9PiB2b2lkO1xuICBvbkNsb3NlOiAoKSA9PiB2b2lkO1xuICBjbGFzc05hbWVTaGFrZUFuaW1hdGlvbjogc3RyaW5nO1xufTtcbmNvbnN0IEJ1dGxlciA9IChwcm9wczogUHJvcHMpID0+IHtcbiAgY29uc3QgaW50bCA9IHVzZUludGwoKTtcbiAgY29uc3QgW3N0YXRlLCBkaXNwYXRjaF0gPSB1c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxTdGF0ZSk7XG5cbiAgY29uc3Qgc2hvdWxkU2VsZWN0RmllbGRUZXh0ID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3QgaXNOZXdXaW5kb3dDb21ibyA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IHNraXBOZXh0U2VsZWN0aW9uID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3Qgc2VhcmNoQ29udGFpbmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3Qgc2VhcmNoSW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbCk7XG5cbiAgY29uc3Qgc2V0SGFzTmV0d29ya0Vycm9yID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ25ldHdvcmtFcnJvcicsIHBheWxvYWQ6IHRydWUgfSk7XG4gIH0sIFtdKTtcbiAgY29uc3QgdW5zZXRIYXNOZXR3b3JrRXJyb3IgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiAnbmV0d29ya0Vycm9yJywgcGF5bG9hZDogZmFsc2UgfSk7XG4gIH0sIFtdKTtcbiAgY29uc3Qgc2V0SXNMb2FkaW5nID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ2xvYWRpbmcnLCBwYXlsb2FkOiB0cnVlIH0pO1xuICB9LCBbXSk7XG4gIGNvbnN0IHVuc2V0SXNMb2FkaW5nID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ2xvYWRpbmcnLCBwYXlsb2FkOiBmYWxzZSB9KTtcbiAgfSwgW10pO1xuXG4gIC8vIERlc3RydWN0dXJlIGZ1bmN0aW9ucyBmcm9tIHByb3BzIHRvIHJlZmVyZW5jZSB0aGVtIGluIHRoZSBob29rIGRlcGVuZGVuY3kgbGlzdFxuICBjb25zdCB7XG4gICAgc2VhcmNoOiBzZWFyY2hGcm9tUGFyZW50LFxuICAgIG9uQ2xvc2U6IG9uQ2xvc2VGcm9tUGFyZW50LFxuICAgIGV4ZWN1dGVDb21tYW5kOiBleGVjdXRlQ29tbWFuZEZyb21QYXJlbnQsXG4gICAgb25IaXN0b3J5RW50cmllc0NoYW5nZTogb25IaXN0b3J5RW50cmllc0NoYW5nZUZyb21QYXJlbnQsXG4gICAgZ2V0TmV4dENvbW1hbmRzOiBnZXROZXh0Q29tbWFuZHNGcm9tUGFyZW50LFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3Qgc2hha2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50KSB7XG4gICAgICBzZWFyY2hDb250YWluZXJSZWYuY3VycmVudC5jbGFzc0xpc3QucmVtb3ZlKFxuICAgICAgICBwcm9wcy5jbGFzc05hbWVTaGFrZUFuaW1hdGlvblxuICAgICAgKTtcbiAgICAgIC8vIC0+IHRyaWdnZXJpbmcgcmVmbG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdm9pZFxuICAgICAgdm9pZCBzZWFyY2hDb250YWluZXJSZWYuY3VycmVudC5vZmZzZXRXaWR0aDtcbiAgICAgIHNlYXJjaENvbnRhaW5lclJlZi5jdXJyZW50LmNsYXNzTGlzdC5hZGQocHJvcHMuY2xhc3NOYW1lU2hha2VBbmltYXRpb24pO1xuICAgIH1cbiAgfSwgW3Byb3BzLmNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uXSk7XG5cbiAgY29uc3QgZXhlY3V0ZSA9IHVzZUNhbGxiYWNrKFxuICAgIChjb21tYW5kOiBDb21tYW5kLCBtZXRhOiB7IG9wZW5Jbk5ld1RhYjogYm9vbGVhbiB9KSA9PiB7XG4gICAgICAvLyBPbmx5IG1haW4gZW50cmllcyBnZXQgYWRkZWQgdG8gaGlzdG9yeSwgc28gd2hlbiBhIHN1YmNvbW1hbmQgaXMgZXhlY3V0ZWQsXG4gICAgICAvLyB3ZSBhZGQgdGhlIG1haW4gY29tbWFuZCBvZiBpdCB0byB0aGUgaGlzdG9yeSAodGhlIHRvcC1sZXZlbCBjb21tYW5kKS5cbiAgICAgIC8vXG4gICAgICAvLyBUaGUga2V5IHRvIGlkZW50aWZ5IGhpc3RvcnkgZW50cmllcyBieSBpcyBhbHdheXMgdGhlIHNlYXJjaFRleHRcbiAgICAgIC8vIFRoZXJlIHdpbGwgbmV2ZXIgYmUgdHdvIGhpc3RvcnkgZW50cmllcyB3aXRoIHRoZSBzYW1lIHNlYXJjaFRleHRcbiAgICAgIGNvbnN0IGVudHJ5ID1cbiAgICAgICAgc3RhdGUuc3RhY2subGVuZ3RoID09PSAwXG4gICAgICAgICAgPyAvLyBUaGUgc3RhY2sgaXMgZW1wdHksIHNvIHdlIGFyZSBleGVjdXRpbmcgYSB0b3AtbGV2ZWwgY29tbWFuZFxuICAgICAgICAgICAgeyBzZWFyY2hUZXh0OiBzdGF0ZS5zZWFyY2hUZXh0LCByZXN1bHRzOiBzdGF0ZS5yZXN1bHRzIH1cbiAgICAgICAgICA6IC8vIFdlIGFyZSBleGVjdXRpbmcgYSBzdWJjb21tYW5kLCBzbyB3ZSBnZXQgdGhlIHRvcC1sZXZlbCBjb21tYW5kIGZvciBpdCxcbiAgICAgICAgICAgIC8vIHdoaWNoIGlzIGF0IHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzZWFyY2hUZXh0OiBzdGF0ZS5zdGFja1swXS5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgICByZXN1bHRzOiBzdGF0ZS5zdGFja1swXS5yZXN1bHRzLFxuICAgICAgICAgICAgfTtcblxuICAgICAgLy8gQWRkIHRoZSBlbnRyeSB0byB0aGUgaGlzdG9yeSwgd2hpbGUgZXhjbHVkaW5nIGFueSBlYXJsaWVyIGhpc3RvcnkgZW50cnlcbiAgICAgIC8vIHdpdGggdGhlIHNhbWUgc2VhcmNoIHRleHQuIFRoaXMgZWZmZWN0aXZlbHkgXCJtb3Zlc1wiIHRoYXQgZW50cnkgdG8gdGhlXG4gICAgICAvLyB0b3Agb2YgdGhlIGhpc3RvcnkgKHdpdGggdGhlIG1vc3QgcmVjZW50IHJlc3VsdHMpLCBvciBhcHBlbmRzIGEgbmV3IGVudHJ5XG4gICAgICAvLyB3aGVuIGl0IGRpZG4ndCBleGlzdCBiZWZvcmUuXG4gICAgICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlRnJvbVBhcmVudChbXG4gICAgICAgIC4uLnByb3BzLmhpc3RvcnlFbnRyaWVzLmZpbHRlcihcbiAgICAgICAgICAoY29tbWFuZCkgPT4gY29tbWFuZC5zZWFyY2hUZXh0ICE9PSBlbnRyeS5zZWFyY2hUZXh0XG4gICAgICAgICksXG4gICAgICAgIGVudHJ5LFxuICAgICAgXSk7XG5cbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3Jlc2V0U2VhcmNoVGV4dCcgfSk7XG5cbiAgICAgIG9uQ2xvc2VGcm9tUGFyZW50KCk7XG5cbiAgICAgIGV4ZWN1dGVDb21tYW5kRnJvbVBhcmVudChjb21tYW5kLCBtZXRhKTtcbiAgICB9LFxuICAgIFtcbiAgICAgIGV4ZWN1dGVDb21tYW5kRnJvbVBhcmVudCxcbiAgICAgIG9uQ2xvc2VGcm9tUGFyZW50LFxuICAgICAgb25IaXN0b3J5RW50cmllc0NoYW5nZUZyb21QYXJlbnQsXG4gICAgICBwcm9wcy5oaXN0b3J5RW50cmllcyxcbiAgICAgIHN0YXRlLnJlc3VsdHMsXG4gICAgICBzdGF0ZS5zZWFyY2hUZXh0LFxuICAgICAgc3RhdGUuc3RhY2ssXG4gICAgXVxuICApO1xuICBjb25zdCBoYW5kbGVLZXlEb3duID0gdXNlQ2FsbGJhY2s8S2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD4+KFxuICAgIChldmVudCkgPT4ge1xuICAgICAgLy8gUHJldmVudGluZyBjdXJzb3IganVtcHMgY2FuIG9ubHkgaGFwcGVuIGluIG9uS2V5RG93biwgYnV0IG5vdCBpbiBvbktleVVwXG4gICAgICBldmVudC5wZXJzaXN0KCk7XG5cbiAgICAgIC8vIFdlIHdhbnQgdG8ga25vdyB3aGVuIHRoZSB1c2VyIHByZXNzZXMgY21kK2VudGVyIChjbWQgYmVpbmcgYSBtZXRhIGtleSkuXG4gICAgICAvLyBXZSBhcmUgb25seSB0b2xkIGFib3V0IHRoaXMgaW4ga2V5RG93biwgYnV0IG5vdCBpbiBrZXlVcCwgc28gd2UgbmVlZFxuICAgICAgLy8gdG8gaGFuZGxlIGl0IGhlcmVcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicgJiYgaGFzTmV3V2luZG93TW9kaWZpZXIoZXZlbnQpKSB7XG4gICAgICAgIGlzTmV3V2luZG93Q29tYm8uY3VycmVudCA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gQXZvaWQgc2VsZWN0aW5nIHRoZSB3aG9sZSBwYWdlIHdoZW4gdXNlciBzZWxlY3RlcyBldmVyeXRoaW5nIHdpdGhcbiAgICAgIC8vIGEga2V5Ym9hcmQgc2hvcnRjdXQuIFRoZXJlIGlzIHByb2JhYmx5IGEgYmV0dGVyIHdheSB0byBkbyB0aGlzIHRob3VnaC5cbiAgICAgIC8vIFRoaXMgcHJldmVudHMgdGhlIHdob2xlIHBhZ2UgZnJvbSBiZWluZyBzZWxlY3RlZCBpbiBjYXNlIHRoZSB1c2VyXG4gICAgICAvLyAxKSBvcGVucyB0aGUgc2VhcmNoIGJveFxuICAgICAgLy8gMikgdHlwZXMgaW50byBpdFxuICAgICAgLy8gMykgc2VsZWN0cyBhbGwgdGV4dCB1c2luZyBjbWQrYVxuICAgICAgLy8gNCkgY2xvc2VzIHRoZSBzZWFyY2ggYm94IHdpdGggZXNjXG4gICAgICAvLyBXaXRob3V0IHRoaXMgaGFuZGxpbmcsIHRoZSB3aG9sZSBwYWdlIHdvdWxkIG5vdyBiZSBzZWxlY3RlZFxuICAgICAgaWYgKGlzU2VsZWN0QWxsQ29tYm8oZXZlbnQpKSB7XG4gICAgICAgIC8vIFRoaXMgc3RvcHMgdGhlIGJyb3dzZXIgZnJvbSBzZWxlY3RpbmcgYW55dGhpbmdcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHNlYXJjaElucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAvLyBUaGlzIHNlbGVjdHMgdGhlIHRleHQgaW4gdGhlIHNlYXJjaCBpbnB1dFxuICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2V0U2VsZWN0aW9uUmFuZ2UoMCwgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gYXZvaWQgaW50ZXJmZXJpbmcgd2l0aCBvdGhlciBrZXkgY29tYmluYXRpb25zIHVzaW5nIG1vZGlmaWVyIGtleXNcbiAgICAgIGlmIChldmVudC5jdHJsS2V5IHx8IGV2ZW50LmFsdEtleSB8fCBldmVudC5zaGlmdEtleSB8fCBldmVudC5tZXRhS2V5KVxuICAgICAgICByZXR1cm47XG4gICAgICBpZiAoaXNDbG9zZUNvbWJvKGV2ZW50KSkgcmV0dXJuO1xuXG4gICAgICAvLyBza2lwIG5leHQgbW91c2VFbnRlciB0byBhdm9pZCBzZXR0aW5nIHNlbGVjdGVkUmVzdWx0IHdoZW4gY3Vyc29yIGp1c3RcbiAgICAgIC8vIGhhcHBlbnMgdG8gYmUgd2hlcmUgdGhlIHJlc3VsdHMgd2lsbCBwb3AgdXBcbiAgICAgIHNraXBOZXh0U2VsZWN0aW9uLmN1cnJlbnQgPSB0cnVlO1xuXG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgICAvLyBwcmV2ZW50IGN1cnNvciBmcm9tIGp1bXBpbmcgdG8gZW5kIG9mIHRleHQgaW5wdXRcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgICAgLy8gYnJvd3NlIHRocm91Z2ggaGlzdG9yeVxuICAgICAgICBpZiAoXG4gICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAoc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPCAxICYmIHN0YXRlLmVuYWJsZUhpc3RvcnkpXG4gICAgICAgICkge1xuICAgICAgICAgIHNob3VsZFNlbGVjdEZpZWxkVGV4dC5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID1cbiAgICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgID8gLy8gV2hlbiBnb2luZyBiYWNrIHRoZSBmaXJzdCBzdGVwXG4gICAgICAgICAgICAgICAgLTFcbiAgICAgICAgICAgICAgOiAvLyBXaGVuIGdvaW5nIGJhY2sgbW9yZSB0aGFuIG9uZSBzdGVwXG4gICAgICAgICAgICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgKGNvbW1hbmQpID0+IGNvbW1hbmQuc2VhcmNoVGV4dCA9PT0gc3RhdGUuc2VhcmNoVGV4dFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgLy8gUGljayB0aGUgcHJldmlvdXMgY29tbWFuZCBmcm9tIHRoZSBoaXN0b3J5XG4gICAgICAgICAgY29uc3QgcHJldkNvbW1hbmQgPVxuICAgICAgICAgICAgc2VsZWN0ZWRJbmRleCA9PT0gLTFcbiAgICAgICAgICAgICAgPyAvLyBwcmV2aW91cyBjb21tYW5kIG9uIHRvcCBvZiB0aGUgaGlzdG9yeSB3aGVuIGdvaW5nIGJhY2sgb25cbiAgICAgICAgICAgICAgICAvLyBmaXJzdCBzdGVwXG4gICAgICAgICAgICAgICAgbGFzdChwcm9wcy5oaXN0b3J5RW50cmllcylcbiAgICAgICAgICAgICAgOiAvLyBwcmV2aW91cyBjb21tYW5kIGlzIGRlZXBlciBkb3duXG4gICAgICAgICAgICAgICAgLy8gV2hlbiB0aGUgaGlzdG9yeSBkb2VzIG5vdCBleGlzdCAobmVnYXRpdmUgaW5kZXgpLCB0aGVuXG4gICAgICAgICAgICAgICAgLy8gdGhpcyBpbXBsaWNpdGx5IHJldHVybnMgdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXNbc2VsZWN0ZWRJbmRleCAtIDFdO1xuICAgICAgICAgIC8vIFNraXAgd2hlbiBubyBwcmV2aW91cyBlbnRyeSBleGlzdHMgaW4gdGhlIGhpc3RvcnlcbiAgICAgICAgICBpZiAoIXByZXZDb21tYW5kKSByZXR1cm47XG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ3BpY2tDb21tYW5kRnJvbUhpc3RvcnknLFxuICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgICBzZWFyY2hUZXh0OiBwcmV2Q29tbWFuZC5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgICByZXN1bHRzOiBwcmV2Q29tbWFuZC5yZXN1bHRzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcHJldmVudCBjdXJzb3IgZnJvbSBqdW1waW5nIHRvIGJlZ2lubmluZyBvZiB0ZXh0IGlucHV0XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ2RlY3JlbWVudFNlbGVjdGVkUmVzdWx0JyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXRlLnNlbGVjdGVkUmVzdWx0ID4gLTEpIHtcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnKSB7XG4gICAgICAgICAgY29uc3QgY29tbWFuZCA9IHN0YXRlLnJlc3VsdHNbc3RhdGUuc2VsZWN0ZWRSZXN1bHRdO1xuICAgICAgICAgIGNvbnN0IHNlYXJjaFRleHQgPSBzdGF0ZS5zZWFyY2hUZXh0O1xuICAgICAgICAgIGNvbnN0IGlzQ3Vyc29yQXRFbmQgPVxuICAgICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudCAmJlxuICAgICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XG5cbiAgICAgICAgICBjb25zdCBpc0V2ZXJ5dGhpbmdTZWxlY3RlZCA9XG4gICAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50ICYmXG4gICAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0ID09PSAwICYmXG4gICAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XG5cbiAgICAgICAgICAvLyBvbmx5IGFsbG93IGRpdmluZyBpbiB3aGVuIGN1cnNvciBpcyBhdCBlbmQgb2YgaW5wdXQgb3Igd2hlblxuICAgICAgICAgIC8vIHRoZSBjb21wbGV0ZSB0ZXh0IGlzIHNlbGVjdGVkICh3aGVuIGJyb3dzaW5nIHRocm91Z2ggaGlzdG9yeSlcbiAgICAgICAgICBpZiAoIWlzQ3Vyc29yQXRFbmQgJiYgIWlzRXZlcnl0aGluZ1NlbGVjdGVkKSByZXR1cm47XG5cbiAgICAgICAgICB1bnNldEhhc05ldHdvcmtFcnJvcigpO1xuXG4gICAgICAgICAgLy8gTk9URTogc2luY2Ugd2UgbmVlZCB0byBmZXRjaCB0aGUgXCJuZXh0IGNvbW1hbmRcIiwgd2hpY2ggaXMgYW4gYXN5bmMgb3BlcmF0aW9uLFxuICAgICAgICAgIC8vIHdlIHVzZSBhIElJRkUgdG8gcHJvY2VzcyB0aGF0IGFuZCBldmVudHVhbGx5IHVwZGF0ZSB0aGUgc3RhdGUuXG4gICAgICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGlmIChjb21tYW5kKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG5leHRDb21tYW5kcyA9IGF3YWl0IGdldE5leHRDb21tYW5kc0Zyb21QYXJlbnQoY29tbWFuZCk7XG4gICAgICAgICAgICAgIC8vIGF2b2lkIG1vdmluZyBjdXJzb3Igd2hlbiB0aGVyZSBhcmUgc3ViLW9wdGlvbnNcbiAgICAgICAgICAgICAgaWYgKG5leHRDb21tYW5kcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgLy8gRW5zdXJlIHRoZSBzZWFyY2ggdGV4dCBoYXMgbm90IGNoYW5nZWQgd2hpbGUgd2Ugd2VyZSBsb2FkaW5nXG4gICAgICAgICAgICAgICAgLy8gdGhlIG5leHQgcmVzdWx0cywgb3RoZXJ3aXNlIHdlJ2QgaW50ZXJydXB0IHRoZSB1c2VyLlxuICAgICAgICAgICAgICAgIC8vIFRocm93IGF3YXkgdGhlIHJlc3VsdHMgaW4gY2FzZSB0aGUgc2VhcmNoIHRleHQgaGFzIGNoYW5nZWQuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLnNlYXJjaFRleHQgPT09IHNlYXJjaFRleHQpIHtcbiAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3NldE5leHRDb21tYW5kcycsXG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQ6IHsgcmVzdWx0czogbmV4dENvbW1hbmRzIH0sXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzaGFrZSgpO1xuICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnKSB7XG4gICAgICAgICAgLy8gZ28gbGVmdCBpbiBzdGFja1xuICAgICAgICAgIGNvbnN0IHByZXZDb21tYW5kID0gbGFzdChzdGF0ZS5zdGFjayk7XG5cbiAgICAgICAgICAvLyBkbyBub3RoaW5nIHdoZW4gd2UgY2FuJ3QgZ28gbGVmdCBhbnltb3JlXG4gICAgICAgICAgaWYgKCFwcmV2Q29tbWFuZCkgcmV0dXJuO1xuXG4gICAgICAgICAgLy8gcHJldmVudCBjdXJzb3IgZnJvbSBqdW1waW5nIGEgY2hhciB0byB0aGUgbGVmdCBpbiB0ZXh0IGlucHV0XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdzZXRQcmV2Q29tbWFuZHMnLFxuICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgICBzZWFyY2hUZXh0OiBwcmV2Q29tbWFuZC5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgICByZXN1bHRzOiBwcmV2Q29tbWFuZC5yZXN1bHRzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIGdldE5leHRDb21tYW5kc0Zyb21QYXJlbnQsXG4gICAgICBwcm9wcy5oaXN0b3J5RW50cmllcyxcbiAgICAgIHNoYWtlLFxuICAgICAgc3RhdGUsXG4gICAgICB1bnNldEhhc05ldHdvcmtFcnJvcixcbiAgICBdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUtleVVwID0gdXNlQ2FsbGJhY2s8S2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD4+KFxuICAgIChldmVudCkgPT4ge1xuICAgICAgLy8gc2V0dGluZyB0aGUgc2VsZWN0aW9uIGNhbiBvbmx5IGhhcHBlbiBpbiBvbktleVVwXG4gICAgICBpZiAoc2hvdWxkU2VsZWN0RmllbGRUZXh0LmN1cnJlbnQpIHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgaW5wdXQuc2VsZWN0KCk7XG4gICAgICAgIHNob3VsZFNlbGVjdEZpZWxkVGV4dC5jdXJyZW50ID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5rZXkgIT09ICdFbnRlcicgJiYgIWlzTmV3V2luZG93Q29tYm8uY3VycmVudCkgcmV0dXJuIHRydWU7XG5cbiAgICAgIC8vIFVzZXIganVzdCB0cmlnZ2VyZWQgdGhlIHNlYXJjaFxuICAgICAgaWYgKHN0YXRlLnNlbGVjdGVkUmVzdWx0ID09PSAtMSkgcmV0dXJuIHRydWU7XG5cbiAgICAgIC8vIFVzZXIgaGFkIHNvbWV0aGluZyBzZWxlY3RlZCBhbmQgd2FudHMgdG8gZ28gdGhlcmVcbiAgICAgIGV4ZWN1dGUoc3RhdGUucmVzdWx0c1tzdGF0ZS5zZWxlY3RlZFJlc3VsdF0sIHtcbiAgICAgICAgb3BlbkluTmV3VGFiOiBpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQsXG4gICAgICB9KTtcblxuICAgICAgaXNOZXdXaW5kb3dDb21iby5jdXJyZW50ID0gZmFsc2U7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIFtleGVjdXRlLCBzdGF0ZS5yZXN1bHRzLCBzdGF0ZS5zZWxlY3RlZFJlc3VsdF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gdXNlQ2FsbGJhY2s8Q2hhbmdlRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+PihcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHNlYXJjaFRleHQgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgICBpZiAoc2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3Jlc2V0JyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdzZWFyY2hUZXh0JywgcGF5bG9hZDogc2VhcmNoVGV4dCB9KTtcblxuICAgICAgLy8gQSBzZWFyY2ggdmlhIG5ldHdvcmsgaXMgb25seSB0cmlnZ2VyZWQgd2hlbiB0aGVyZVxuICAgICAgLy8gYXJlIG1vcmUgdGhhbiB0aHJlZSBjaGFyYWN0ZXJzLiBTbyBubyBmYWxzZSBsb2FkaW5nXG4gICAgICAvLyBpbmRpY2F0aW9uIGlzIGdpdmVuLlxuICAgICAgaWYgKHNlYXJjaFRleHQudHJpbSgpLmxlbmd0aCA+IDMpIHtcbiAgICAgICAgc2V0SXNMb2FkaW5nKCk7XG4gICAgICB9XG5cbiAgICAgIHNlYXJjaEZyb21QYXJlbnQoc2VhcmNoVGV4dCkudGhlbihcbiAgICAgICAgKGFzeW5jUmVzdWx0czogQ29tbWFuZFtdKSA9PiB7XG4gICAgICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IoKTtcbiAgICAgICAgICB1bnNldElzTG9hZGluZygpO1xuXG4gICAgICAgICAgY29uc3QgZnVzZSA9IG5ldyBGdXNlKGFzeW5jUmVzdWx0cywge1xuICAgICAgICAgICAga2V5czogW1xuICAgICAgICAgICAgICB7IG5hbWU6ICd0ZXh0Jywgd2VpZ2h0OiAwLjYgfSxcbiAgICAgICAgICAgICAgeyBuYW1lOiAna2V5d29yZHMnLCB3ZWlnaHQ6IDAuNCB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIG1pbk1hdGNoQ2hhckxlbmd0aDogMixcbiAgICAgICAgICAgIGluY2x1ZGVTY29yZTogdHJ1ZSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IHNlYXJjaFJlc3VsdHMgPSBmdXNlXG4gICAgICAgICAgICAuc2VhcmNoKHNlYXJjaFRleHQpXG4gICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IHJlc3VsdHMgd2l0aCBhIG1hdGNoaW5nIHNjb3JlIG92ZXIgMC43NVxuICAgICAgICAgICAgLmZpbHRlcigocmVzdWx0KSA9PiAocmVzdWx0LnNjb3JlID8gcmVzdWx0LnNjb3JlIDwgMC43NSA6IGZhbHNlKSlcbiAgICAgICAgICAgIC8vIEtlZXAgYSBtYXhpbWFsIG9mIDkgcmVzdWx0c1xuICAgICAgICAgICAgLnNsaWNlKDAsIDkpO1xuXG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ3NldFNlYXJjaFRleHRSZXN1bHRzJyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHNlYXJjaFJlc3VsdHMubWFwKChyZXN1bHQpID0+IHJlc3VsdC5pdGVtKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgIHVuc2V0SXNMb2FkaW5nKCk7XG4gICAgICAgICAgc2V0SGFzTmV0d29ya0Vycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSxcbiAgICBbXG4gICAgICBzZWFyY2hGcm9tUGFyZW50LFxuICAgICAgc2V0SGFzTmV0d29ya0Vycm9yLFxuICAgICAgc2V0SXNMb2FkaW5nLFxuICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IsXG4gICAgICB1bnNldElzTG9hZGluZyxcbiAgICBdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUNvbnRhaW5lckNsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJyB9KTtcbiAgICBvbkNsb3NlRnJvbVBhcmVudCgpO1xuICB9LCBbb25DbG9zZUZyb21QYXJlbnRdKTtcblxuICBjb25zdCBjcmVhdGVDb21tYW5kTW91c2VFbnRlckhhbmRsZXIgPSB1c2VDYWxsYmFjazxcbiAgICAoaW5kZXg6IG51bWJlcikgPT4gTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+XG4gID4oXG4gICAgKGluZGV4KSA9PiAoKSA9PiB7XG4gICAgICAvLyBJbiBjYXNlIHRoZSBjdXJzb3IgaGFwcGVuZWQgdG8gYmUgaW4gYSBsb2NhdGlvbiB3aGVyZSBhXG4gICAgICAvLyByZXN1bHQgd291bGQgYXBwZWFyLCBpdCB3b3VsZCB0cmlnZ2VyIG9uTW91c2VFbnRlciBhbmQgdGhlXG4gICAgICAvLyByZXN1bHQgd291bGQgYmUgc2VsZWN0ZWQgaW1tZWRpYXRlbHkuIFRoaXMgaXMgbm90IHNvbWV0aGluZ1xuICAgICAgLy8gYSB1c2VyIHdvdWxkIGV4cGVjdCwgaGVuY2Ugd2UgcHJldmVudCBpdCBmcm9tIGhhcHBlbmluZy5cbiAgICAgIC8vIFRoZSB1c2VyIGhhcyB0byBtb3ZlIHRoZSBjdXJzb3IgdG8gYW4gb3B0aW9uIGV4cGxpY2l0bHkgZm9yXG4gICAgICAvLyBpdCB0byBiZWNvbWUgYWN0aXZlLiBIb3dldmVyLCB0aGUgdXNlciBjYW4gYWx3YXlzIGNsaWNrIGFuZFxuICAgICAgLy8gdGhhdCBhY3Rpb24gd2lsbCBiZSB0cmlnZ2VyZWQuXG4gICAgICBpZiAoc2tpcE5leHRTZWxlY3Rpb24uY3VycmVudCkge1xuICAgICAgICBza2lwTmV4dFNlbGVjdGlvbi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gc2V0cyB0aGUgc2VsZWN0ZWQgcmVzdWx0LCBtYWlubHkgZm9yIHRoZSBob3ZlciBlZmZlY3RcbiAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ3NlbGVjdGVkUmVzdWx0JywgcGF5bG9hZDogaW5kZXggfSk7XG4gICAgfSxcbiAgICBbXVxuICApO1xuICBjb25zdCBjcmVhdGVDb21tYW5kQ2xpY2tIYW5kbGVyID0gdXNlQ2FsbGJhY2s8XG4gICAgKGNvbW1hbmQ6IENvbW1hbmQpID0+IE1vdXNlRXZlbnRIYW5kbGVyPEhUTUxEaXZFbGVtZW50PlxuICA+KFxuICAgIChjb21tYW5kKSA9PiAoZXZlbnQpID0+IHtcbiAgICAgIGV4ZWN1dGUoY29tbWFuZCwge1xuICAgICAgICBvcGVuSW5OZXdUYWI6IGhhc05ld1dpbmRvd01vZGlmaWVyKGV2ZW50KSxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgW2V4ZWN1dGVdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8QnV0bGVyQ29udGFpbmVyXG4gICAgICBvbkNsaWNrPXtoYW5kbGVDb250YWluZXJDbGlja31cbiAgICAgIGRhdGEtdGVzdGlkPVwicXVpY2stYWNjZXNzXCJcbiAgICAgIHRhYkluZGV4PXstMX1cbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17c2VhcmNoQ29udGFpbmVyUmVmfVxuICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3VpS2l0RGVzaWduVG9rZW5zLmNvbG9yU3VyZmFjZX07XG4gICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICR7dWlLaXREZXNpZ25Ub2tlbnMuYm9yZGVyUmFkaXVzNH07XG4gICAgICAgICAgbWluLWhlaWdodDogNDBweDtcblxuICAgICAgICAgIC8qIG9uZSBtb3JlIHRoYW4gYXBwLWJhciAoMjAwMDApIGFuZCBvbmUgbW9yZSB0aGFuIHRoZSBvdmVybGF5ICgyMDAwMSkgKi9cbiAgICAgICAgICB6LWluZGV4OiAyMDAwMjtcbiAgICAgICAgICB3aWR0aDogNDAwcHg7XG4gICAgICAgICAgbWFyZ2luOiA0MHB4IGF1dG87XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICAtbW96LWJveC1zaGFkb3c6IDAgMTBweCAzMHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDEwcHggMzBweCAtOHB4IHJnYmEoMCwgMCwgMCwgMC43NSk7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206ICR7c3RhdGUuaGFzTmV0d29ya0Vycm9yXG4gICAgICAgICAgICA/ICcwJ1xuICAgICAgICAgICAgOiB1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nU307XG4gICAgICAgIGB9XG4gICAgICAgIG9uQ2xpY2s9eyhldmVudCkgPT4ge1xuICAgICAgICAgIC8vIEF2b2lkIGNsb3Npbmcgd2hlbiB0aGUgc2VhcmNoQ29udGFpbmVyIGl0c2VsZiBpcyBjbGlja2VkXG4gICAgICAgICAgLy8gSWYgd2UgZG9uJ3QgZG8gdGhpcywgdGhlbiB0aGUgb3ZlcmxheSB3aWxsIGNsb3NlIHdoZW4gZS5nLlxuICAgICAgICAgIC8vIHRoZSBzZWFyY2ggaW5wdXQgaXMgY2xpY2tlZC5cbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGB9XG4gICAgICAgID5cbiAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIGh0bWxGb3I9XCJxdWljay1hY2Nlc3Mtc2VhcmNoLWlucHV0XCJcbiAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nTX07XG4gICAgICAgICAgICAgIG1hcmdpbi10b3A6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgYH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U2VhcmNoSWNvbiBjb2xvcj1cIm5ldXRyYWw2MFwiIC8+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGlkPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICByZWY9e3NlYXJjaElucHV0UmVmfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2ludGwuZm9ybWF0TWVzc2FnZShtZXNzYWdlcy5pbnB1dFBsYWNlaG9kZXIpfVxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICAgIG91dGxpbmU6IDA7XG4gICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjJweDtcbiAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgICAgICAgICAgICAgcGFkZGluZzogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nTX1cbiAgICAgICAgICAgICAgICAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdNfSAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdTfVxuICAgICAgICAgICAgICAgICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAmOjpwbGFjZWhvbGRlciB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICR7dWlLaXREZXNpZ25Ub2tlbnMuY29sb3JOZXV0cmFsNjB9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBgfVxuICAgICAgICAgICAgdmFsdWU9e3N0YXRlLnNlYXJjaFRleHR9XG4gICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgb25LZXlEb3duPXtoYW5kbGVLZXlEb3dufVxuICAgICAgICAgICAgb25LZXlVcD17aGFuZGxlS2V5VXB9XG4gICAgICAgICAgICBhdXRvRm9jdXM9e3RydWV9XG4gICAgICAgICAgICBhdXRvQ29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJxdWljay1hY2Nlc3Mtc2VhcmNoLWlucHV0XCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIHtzdGF0ZS5pc0xvYWRpbmcgJiYgKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nU307XG4gICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdTfTtcbiAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPExvYWRpbmdTcGlubmVyIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXRlLmhhc05ldHdvcmtFcnJvcilcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHt1aUtpdERlc2lnblRva2Vucy5jb2xvckVycm9yfTtcbiAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgICAgICAgICAgICBjb2xvcjogJHt1aUtpdERlc2lnblRva2Vucy5jb2xvclN1cmZhY2V9O1xuICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAke3VpS2l0RGVzaWduVG9rZW5zLmZvbnRTaXplMjB9O1xuICAgICAgICAgICAgICAgICAgcGFkZGluZzogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nWHN9O1xuICAgICAgICAgICAgICAgIGB9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSB7Li4ubWVzc2FnZXMub2ZmbGluZX0gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKHN0YXRlLnJlc3VsdHMubGVuZ3RoID09PSAwICYmIHN0YXRlLnNlYXJjaFRleHQudHJpbSgpLmxlbmd0aCA+IDApXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgICAgICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7dWlLaXREZXNpZ25Ub2tlbnMuY29sb3JOZXV0cmFsfTtcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAke3VpS2l0RGVzaWduVG9rZW5zLmNvbG9yU29saWR9O1xuICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHt1aUtpdERlc2lnblRva2Vucy5mb250U2l6ZTIwfTtcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1hzfTtcbiAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2Ugey4uLm1lc3NhZ2VzLm5vUmVzdWx0c30gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuIHN0YXRlLnJlc3VsdHMubWFwKChjb21tYW5kLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPEJ1dGxlckNvbW1hbmRcbiAgICAgICAgICAgICAga2V5PXtjb21tYW5kLmlkfVxuICAgICAgICAgICAgICBjb21tYW5kPXtjb21tYW5kfVxuICAgICAgICAgICAgICBpc1NlbGVjdGVkPXtzdGF0ZS5zZWxlY3RlZFJlc3VsdCA9PT0gaW5kZXh9XG4gICAgICAgICAgICAgIG9uTW91c2VFbnRlcj17Y3JlYXRlQ29tbWFuZE1vdXNlRW50ZXJIYW5kbGVyKGluZGV4KX1cbiAgICAgICAgICAgICAgb25DbGljaz17Y3JlYXRlQ29tbWFuZENsaWNrSGFuZGxlcihjb21tYW5kKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSk7XG4gICAgICAgIH0pKCl9XG4gICAgICA8L2Rpdj5cbiAgICA8L0J1dGxlckNvbnRhaW5lcj5cbiAgKTtcbn07XG5CdXRsZXIuZGlzcGxheU5hbWUgPSAnQnV0bGVyJztcblxuY29uc3QgQnV0bGVyV2l0aEFuaW1hdGlvbiA9IChwcm9wczogT21pdDxQcm9wcywgJ2NsYXNzTmFtZVNoYWtlQW5pbWF0aW9uJz4pID0+IChcbiAgPENsYXNzTmFtZXM+XG4gICAgeyh7IGNzcyB9KSA9PiAoXG4gICAgICA8QnV0bGVyXG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgY2xhc3NOYW1lU2hha2VBbmltYXRpb249e2Nzc2BcbiAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IDAuNDVzO1xuICAgICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGJvdGg7XG4gICAgICAgICAgYW5pbWF0aW9uLW5hbWU6ICR7c2hha2VBbmltYXRpb259O1xuICAgICAgICBgfVxuICAgICAgLz5cbiAgICApfVxuICA8L0NsYXNzTmFtZXM+XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBCdXRsZXJXaXRoQW5pbWF0aW9uO1xuIl19 */"),
919
- children: jsxRuntime.jsx(reactIntl.FormattedMessage, _objectSpread({}, messages.noResults))
920
- });
921
- return _mapInstanceProperty__default["default"](_context1 = state.results).call(_context1, (command, index) => jsxRuntime.jsx(ButlerCommand, {
922
- command: command,
923
- isSelected: state.selectedResult === index,
924
- onMouseEnter: createCommandMouseEnterHandler(index),
925
- onClick: createCommandClickHandler(command)
926
- }, command.id));
927
- })()]
928
- })
929
- });
930
- };
931
- Butler.displayName = 'Butler';
932
- const ButlerWithAnimation = props => jsxRuntime.jsx(react.ClassNames, {
933
- children: _ref2 => {
934
- let css = _ref2.css;
935
- return jsxRuntime.jsx(Butler, _objectSpread(_objectSpread({}, props), {}, {
936
- classNameShakeAnimation: css`
937
- animation-duration: 0.45s;
938
- animation-fill-mode: both;
939
- animation-name: ${shakeAnimation};
940
- `
941
- }));
942
- }
943
- });
944
-
945
- // eslint-disable-next-line import/prefer-default-export
946
-
947
- const permissions = {
948
- ViewOrders: 'ViewOrders',
949
- ManageOrders: 'ManageOrders',
950
- ViewProducts: 'ViewProducts',
951
- ManageProducts: 'ManageProducts',
952
- ViewCategories: 'ViewCategories',
953
- ManageCategories: 'ManageCategories',
954
- ViewCustomers: 'ViewCustomers',
955
- ManageCustomers: 'ManageCustomers',
956
- ViewCustomerGroups: 'ViewCustomerGroups',
957
- ManageCustomerGroups: 'ManageCustomerGroups',
958
- ViewProductDiscounts: 'ViewProductDiscounts',
959
- ManageProductDiscounts: 'ManageProductDiscounts',
960
- ViewDiscountCodes: 'ViewDiscountCodes',
961
- ManageDiscountCodes: 'ManageDiscountCodes',
962
- ViewCartDiscounts: 'ViewCartDiscounts',
963
- ManageCartDiscounts: 'ManageCartDiscounts',
964
- ViewProjectSettings: 'ViewProjectSettings',
965
- ManageProjectSettings: 'ManageProjectSettings',
966
- ViewDeveloperSettings: 'ViewDeveloperSettings',
967
- ManageDeveloperSettings: 'ManageDeveloperSettings',
968
- ViewProductTypes: 'ViewProductTypes',
969
- ManageProductTypes: 'ManageProductTypes'
970
- };
971
-
972
- const actionTypes = {
973
- go: 'go'
974
- };
975
-
976
- function nonNullable(value) {
977
- return value !== null && value !== undefined && typeof value !== 'boolean';
978
- }
979
- const createCommands = _ref => {
980
- var _context, _context2, _context3, _context4, _context5, _context6, _context7, _context8, _context9, _context0, _context11;
981
- let intl = _ref.intl,
982
- applicationContext = _ref.applicationContext,
983
- featureToggles = _ref.featureToggles,
984
- changeProjectDataLocale = _ref.changeProjectDataLocale;
985
- return _filterInstanceProperty__default["default"](_context = [applicationContext.project && applicationContext.permissions && featureToggles.canViewDashboard && permissions$1.hasSomePermissions([permissions.ViewOrders], applicationContext.permissions) && {
986
- id: 'go/dashboard',
987
- text: intl.formatMessage(messages.openDashboard),
988
- keywords: ['Go to Dashboard'],
989
- action: {
990
- type: actionTypes.go,
991
- to: `/${applicationContext.project.key}/dashboard`
992
- }
993
- }, applicationContext.project && applicationContext.permissions && permissions$1.hasSomePermissions([permissions.ViewProducts], applicationContext.permissions) && {
994
- id: 'go/products',
995
- text: intl.formatMessage(messages.openProducts),
996
- keywords: ['Go to Products'],
997
- action: {
998
- type: actionTypes.go,
999
- to: `/${applicationContext.project.key}/products`
1000
- },
1001
- subCommands: _filterInstanceProperty__default["default"](_context2 = [permissions$1.hasSomePermissions([permissions.ViewProducts], applicationContext.permissions) && {
1002
- id: 'go/products/list',
1003
- text: intl.formatMessage(messages.openProductList),
1004
- action: {
1005
- type: actionTypes.go,
1006
- to: `/${applicationContext.project.key}/products`
1007
- }
1008
- }, permissions$1.hasSomePermissions([permissions.ViewProducts], applicationContext.permissions) && {
1009
- id: 'go/products/modified',
1010
- text: intl.formatMessage(messages.openModifiedProducts),
1011
- action: {
1012
- type: actionTypes.go,
1013
- to: `/${applicationContext.project.key}/products/modified`
1014
- }
1015
- }, permissions$1.hasSomePermissions([permissions.ViewProducts], applicationContext.permissions) && featureToggles.pimSearch && {
1016
- id: 'go/products/pim-search',
1017
- text: intl.formatMessage(messages.openPimSearch),
1018
- action: {
1019
- type: actionTypes.go,
1020
- to: `/${applicationContext.project.key}/products`
1021
- }
1022
- }, permissions$1.hasSomePermissions([permissions.ManageProducts], applicationContext.permissions) && {
1023
- id: 'go/products/add',
1024
- text: intl.formatMessage(messages.openAddProducts),
1025
- action: {
1026
- type: actionTypes.go,
1027
- to: `/${applicationContext.project.key}/products/new`
1028
- }
1029
- }]).call(_context2, nonNullable)
1030
- }, applicationContext.project && applicationContext.permissions && permissions$1.hasSomePermissions([permissions.ViewCategories], applicationContext.permissions) && {
1031
- id: 'go/categories',
1032
- text: intl.formatMessage(messages.openCategories),
1033
- keywords: ['Go to Categories'],
1034
- action: {
1035
- type: actionTypes.go,
1036
- to: `/${applicationContext.project.key}/categories`
1037
- },
1038
- subCommands: _filterInstanceProperty__default["default"](_context3 = [permissions$1.hasSomePermissions([permissions.ViewCategories], applicationContext.permissions) && {
1039
- id: 'go/categories/list',
1040
- text: intl.formatMessage(messages.openCategoriesList),
1041
- action: {
1042
- type: actionTypes.go,
1043
- to: `/${applicationContext.project.key}/categories?mode=list`
1044
- }
1045
- }, permissions$1.hasSomePermissions([permissions.ViewCategories], applicationContext.permissions) && {
1046
- id: 'go/categories/search',
1047
- text: intl.formatMessage(messages.openCategoriesSearch),
1048
- action: {
1049
- type: actionTypes.go,
1050
- to: `/${applicationContext.project.key}/categories?mode=search`
1051
- }
1052
- }, permissions$1.hasSomePermissions([permissions.ManageCategories], applicationContext.permissions) && {
1053
- id: 'go/categories/add',
1054
- text: intl.formatMessage(messages.openAddCategory),
1055
- action: {
1056
- type: actionTypes.go,
1057
- to: `/${applicationContext.project.key}/categories/new`
1058
- }
1059
- }]).call(_context3, nonNullable)
1060
- }, applicationContext.project && applicationContext.permissions && permissions$1.hasSomePermissions([permissions.ViewCustomers, permissions.ViewCustomerGroups], applicationContext.permissions) && {
1061
- id: 'go/customers',
1062
- text: intl.formatMessage(messages.openCustomers),
1063
- keywords: ['Go to Customers'],
1064
- action: {
1065
- type: actionTypes.go,
1066
- to: `/${applicationContext.project.key}/customers`
1067
- },
1068
- subCommands: _filterInstanceProperty__default["default"](_context4 = [permissions$1.hasSomePermissions([permissions.ViewCustomers], applicationContext.permissions) && {
1069
- id: 'go/customers/list',
1070
- text: intl.formatMessage(messages.openCustomersList),
1071
- action: {
1072
- type: actionTypes.go,
1073
- to: `/${applicationContext.project.key}/customers`
1074
- }
1075
- }, permissions$1.hasSomePermissions([permissions.ManageCustomers], applicationContext.permissions) && {
1076
- id: 'go/customers/new',
1077
- text: intl.formatMessage(messages.openAddCustomer),
1078
- action: {
1079
- type: actionTypes.go,
1080
- to: `/${applicationContext.project.key}/customers/new`
1081
- }
1082
- }, permissions$1.hasSomePermissions([permissions.ViewCustomerGroups], applicationContext.permissions) && {
1083
- id: 'go/customer/customer-groups',
1084
- text: intl.formatMessage(messages.openCustomerGroupsList),
1085
- action: {
1086
- type: actionTypes.go,
1087
- to: `/${applicationContext.project.key}/customers/customer-groups`
1088
- }
1089
- }, permissions$1.hasSomePermissions([permissions.ManageCustomerGroups], applicationContext.permissions) && {
1090
- id: 'go/customers/customer-groups/add',
1091
- text: intl.formatMessage(messages.openAddCustomerGroup),
1092
- action: {
1093
- type: actionTypes.go,
1094
- to: `/${applicationContext.project.key}/customers/customer-groups/new`
1095
- }
1096
- }]).call(_context4, nonNullable)
1097
- }, applicationContext.project && applicationContext.permissions && permissions$1.hasSomePermissions([permissions.ViewOrders], applicationContext.permissions) && {
1098
- id: 'go/orders',
1099
- text: intl.formatMessage(messages.openOrders),
1100
- keywords: ['Go to Orders'],
1101
- action: {
1102
- type: actionTypes.go,
1103
- to: `/${applicationContext.project.key}/orders`
1104
- },
1105
- subCommands: _filterInstanceProperty__default["default"](_context5 = [permissions$1.hasSomePermissions([permissions.ViewOrders], applicationContext.permissions) && {
1106
- id: 'go/orders/list',
1107
- text: intl.formatMessage(messages.openOrdersList),
1108
- action: {
1109
- type: actionTypes.go,
1110
- to: `/${applicationContext.project.key}/orders`
1111
- }
1112
- }, permissions$1.hasSomePermissions([permissions.ManageOrders], applicationContext.permissions) && {
1113
- id: 'go/orders/add',
1114
- text: intl.formatMessage(messages.openAddOrder),
1115
- action: {
1116
- type: actionTypes.go,
1117
- to: `/${applicationContext.project.key}/orders/new`
1118
- }
1119
- }]).call(_context5, nonNullable)
1120
- }, applicationContext.project && applicationContext.permissions && permissions$1.hasSomePermissions([permissions.ViewDiscountCodes, permissions.ViewProductDiscounts, permissions.ViewCartDiscounts], applicationContext.permissions) && {
1121
- id: 'go/discounts',
1122
- text: intl.formatMessage(messages.openDiscounts),
1123
- keywords: ['Go to Discounts'],
1124
- action: {
1125
- type: actionTypes.go,
1126
- to: `/${applicationContext.project.key}/discounts`
1127
- },
1128
- subCommands: _filterInstanceProperty__default["default"](_context6 = [permissions$1.hasSomePermissions([permissions.ViewProductDiscounts], applicationContext.permissions) && {
1129
- id: 'go/discounts/products/list',
1130
- text: intl.formatMessage(messages.openProductDiscountsList),
1131
- action: {
1132
- type: actionTypes.go,
1133
- to: `/${applicationContext.project.key}/discounts/products`
1134
- }
1135
- }, permissions$1.hasSomePermissions([permissions.ViewCartDiscounts], applicationContext.permissions) && {
1136
- id: 'go/discounts/carts/list',
1137
- text: intl.formatMessage(messages.openCartDiscountsList),
1138
- action: {
1139
- type: actionTypes.go,
1140
- to: `/${applicationContext.project.key}/discounts/carts`
1141
- }
1142
- }, permissions$1.hasSomePermissions([permissions.ViewDiscountCodes], applicationContext.permissions) && {
1143
- id: 'go/discounts/codes/list',
1144
- text: intl.formatMessage(messages.openDiscountCodesList),
1145
- action: {
1146
- type: actionTypes.go,
1147
- to: `/${applicationContext.project.key}/discounts/codes`
1148
- }
1149
- }, permissions$1.hasSomePermissions([permissions.ManageProductDiscounts, permissions.ManageDiscountCodes, permissions.ManageCartDiscounts], applicationContext.permissions) && {
1150
- id: 'go/discounts/add',
1151
- text: intl.formatMessage(messages.openAddDiscount),
1152
- action: {
1153
- type: actionTypes.go,
1154
- to: `/${applicationContext.project.key}/discounts/new`
1155
- },
1156
- subCommands: _filterInstanceProperty__default["default"](_context7 = [permissions$1.hasSomePermissions([permissions.ManageProductDiscounts], applicationContext.permissions) && {
1157
- id: 'go/discounts/product/add',
1158
- text: intl.formatMessage(messages.openAddProductDiscount),
1159
- action: {
1160
- type: actionTypes.go,
1161
- to: `/${applicationContext.project.key}/discounts/products/new`
1162
- }
1163
- }, permissions$1.hasSomePermissions([permissions.ManageCartDiscounts], applicationContext.permissions) && {
1164
- id: 'go/discounts/cart/add',
1165
- text: intl.formatMessage(messages.openAddCartDiscount),
1166
- action: {
1167
- type: actionTypes.go,
1168
- to: `/${applicationContext.project.key}/discounts/carts/new`
1169
- }
1170
- }, permissions$1.hasSomePermissions([permissions.ManageDiscountCodes], applicationContext.permissions) && {
1171
- id: 'go/discounts/code/add',
1172
- text: intl.formatMessage(messages.openAddCartDiscount),
1173
- action: {
1174
- type: actionTypes.go,
1175
- to: `/${applicationContext.project.key}/discounts/codes/new`
1176
- }
1177
- }]).call(_context7, nonNullable)
1178
- }]).call(_context6, nonNullable)
1179
- }, applicationContext.project && applicationContext.permissions && permissions$1.hasSomePermissions([permissions.ViewProjectSettings, permissions.ViewDeveloperSettings, permissions.ViewProductTypes], applicationContext.permissions) && {
1180
- id: 'go/settings',
1181
- text: intl.formatMessage(messages.openSettings),
1182
- keywords: ['Go to Settings'],
1183
- action: {
1184
- type: actionTypes.go,
1185
- to: `/${applicationContext.project.key}/settings/project`
1186
- },
1187
- subCommands: _filterInstanceProperty__default["default"](_context8 = [permissions$1.hasSomePermissions([permissions.ViewProjectSettings, permissions.ManageProjectSettings], applicationContext.permissions) && {
1188
- id: 'go/settings/project',
1189
- text: intl.formatMessage(messages.openProjectSettings),
1190
- action: {
1191
- type: actionTypes.go,
1192
- to: `/${applicationContext.project.key}/settings/project`
1193
- },
1194
- subCommands: _filterInstanceProperty__default["default"](_context9 = [{
1195
- id: 'go/settings/project/international',
1196
- text: intl.formatMessage(messages.openProjectSettingsInternationalTab),
1197
- action: {
1198
- type: actionTypes.go,
1199
- to: `/${applicationContext.project.key}/settings/project/international`
1200
- }
1201
- }, {
1202
- id: 'go/settings/project/taxes',
1203
- text: intl.formatMessage(messages.openProjectSettingsTaxesTab),
1204
- action: {
1205
- type: actionTypes.go,
1206
- to: `/${applicationContext.project.key}/settings/project/taxes`
1207
- }
1208
- }, {
1209
- id: 'go/settings/project/shipping-methods',
1210
- text: intl.formatMessage(messages.openProjectSettingsShippingMethodsTab),
1211
- action: {
1212
- type: actionTypes.go,
1213
- to: `/${applicationContext.project.key}/settings/project/shipping-methods`
1214
- }
1215
- }, {
1216
- id: 'go/settings/project/channels',
1217
- text: intl.formatMessage(messages.openProjectSettingsChannelsTab),
1218
- action: {
1219
- type: actionTypes.go,
1220
- to: `/${applicationContext.project.key}/settings/project/channels`
1221
- }
1222
- }, {
1223
- id: 'go/settings/project/stores',
1224
- text: intl.formatMessage(messages.openProjectSettingsStoresTab),
1225
- action: {
1226
- type: actionTypes.go,
1227
- to: `/${applicationContext.project.key}/settings/project/stores`
1228
- }
1229
- }]).call(_context9, nonNullable)
1230
- }, permissions$1.hasSomePermissions([permissions.ViewProductTypes], applicationContext.permissions) && {
1231
- id: 'go/settings/product-types',
1232
- text: intl.formatMessage(messages.openProductTypesSettings),
1233
- action: {
1234
- type: actionTypes.go,
1235
- to: `/${applicationContext.project.key}/settings/product-types`
1236
- }
1237
- }, permissions$1.hasSomePermissions([permissions.ViewDeveloperSettings], applicationContext.permissions) && {
1238
- id: 'go/settings/developer',
1239
- text: intl.formatMessage(messages.openDeveloperSettings),
1240
- action: {
1241
- type: actionTypes.go,
1242
- to: `/${applicationContext.project.key}/settings/developer`
1243
- },
1244
- subCommands: _filterInstanceProperty__default["default"](_context0 = [permissions$1.hasSomePermissions([permissions.ViewDeveloperSettings], applicationContext.permissions) && {
1245
- id: 'go/settings/developer/api-clients/list',
1246
- text: intl.formatMessage(messages.openApiClientsList),
1247
- action: {
1248
- type: actionTypes.go,
1249
- to: `/${applicationContext.project.key}/settings/developer/api-clients`
1250
- }
1251
- }, permissions$1.hasSomePermissions([permissions.ManageDeveloperSettings], applicationContext.permissions) && {
1252
- id: 'go/settings/developer/api-clients/add',
1253
- text: intl.formatMessage(messages.openAddApiClient),
1254
- action: {
1255
- type: actionTypes.go,
1256
- to: `/${applicationContext.project.key}/settings/developer/api-clients/new`
1257
- }
1258
- }]).call(_context0, nonNullable)
1259
- }, featureToggles.customApplications && permissions$1.hasSomePermissions([permissions.ManageProjectSettings], applicationContext.permissions) && {
1260
- id: 'go/settings/custom-applications',
1261
- text: intl.formatMessage(messages.openCustomApplicationsSettings),
1262
- action: {
1263
- type: actionTypes.go,
1264
- to: `/${applicationContext.project.key}/settings/custom-applications`
1265
- }
1266
- }]).call(_context8, nonNullable)
1267
- }, applicationContext.project && applicationContext.project.languages && applicationContext.project.languages.length > 1 && {
1268
- id: 'action/set-resource-language',
1269
- text: intl.formatMessage(messages.setResourceLanguage),
1270
- keywords: ['set resource locale', 'set project data language', 'set project data locale'],
1271
- action: () => void 0,
1272
- // We would know these statically, but we define them here as we don't
1273
- // want to include them in the top-level search results
1274
- subCommands: () => {
1275
- var _context1, _context10;
1276
- return _Promise__default["default"].resolve(_filterInstanceProperty__default["default"](_context1 = _mapInstanceProperty__default["default"](_context10 = applicationContext.project ? applicationContext.project.languages : []).call(_context10, language => changeProjectDataLocale && {
1277
- id: `action/set-resource-language/${language}`,
1278
- text: commonTags.oneLineTrim`
1279
- ${language}
1280
- ${language === applicationContext.dataLocale ? ' (active)' : ''}
1281
- `,
1282
- action: () => {
1283
- changeProjectDataLocale(language);
1284
-
1285
- // We reload, since ProjectDataLocale is written in a way where
1286
- // only the tree under the parent container reloads, but
1287
- // not all of them reload.
1288
- // So this action would seem like it had not effect, unless we
1289
- // reload
1290
- location.location.reload();
1291
- }
1292
- })).call(_context1, nonNullable));
1293
- }
1294
- }, {
1295
- id: 'go/support',
1296
- text: intl.formatMessage(messages.openSupport),
1297
- keywords: ['Go to support'],
1298
- action: {
1299
- type: actionTypes.go,
1300
- to: constants.SUPPORT_PORTAL_URL
1301
- }
1302
- }, {
1303
- id: 'go/account-profile',
1304
- text: intl.formatMessage(messages.openMyProfile),
1305
- keywords: ['Go to user account', 'Go to profile', 'Open profile'],
1306
- action: {
1307
- type: actionTypes.go,
1308
- to: `/account/profile`
1309
- }
1310
- }, {
1311
- id: 'go/privacy-policy',
1312
- text: intl.formatMessage(messages.showPrivacyPolicy),
1313
- keywords: ['Open Privacy Policy'],
1314
- action: {
1315
- type: actionTypes.go,
1316
- to: 'https://commercetools.com/privacy#suppliers'
1317
- }
1318
- }, {
1319
- id: 'go/logout',
1320
- text: intl.formatMessage(messages.logout),
1321
- keywords: ['Sign out'],
1322
- action: {
1323
- type: actionTypes.go,
1324
- to: `/logout?reason=${constants.LOGOUT_REASONS.USER}`
1325
- }
1326
- }, {
1327
- id: 'go/manage-projects',
1328
- text: intl.formatMessage(messages.openManageProjects),
1329
- keywords: ['Go to manage projects', 'Go to projects', 'Open projects list'],
1330
- action: {
1331
- type: actionTypes.go,
1332
- to: `/account/projects`
1333
- }
1334
- }, {
1335
- id: 'go/manage-organizations',
1336
- text: intl.formatMessage(messages.openManageOrganizations),
1337
- keywords: ['Go to manage organizations', 'Go to organizations', 'Open organizations list'],
1338
- action: {
1339
- type: actionTypes.go,
1340
- to: `/account/organizations`
1341
- }
1342
- }, ...(applicationContext.user ? _mapInstanceProperty__default["default"](_context11 = applicationContext.user.projects.results).call(_context11, userProject => ({
1343
- id: `go/project(${userProject.key})`,
1344
- text: intl.formatMessage(messages.useProject, {
1345
- projectName: userProject.name
1346
- }),
1347
- keywords: [userProject.key],
1348
- action: () => {
1349
- // Switching projects needs a full redirect so that
1350
- // the feature flags are reloaded (and things caches get destroyed)
1351
- window.location.href = `/${userProject.key}`;
1352
- }
1353
- })) : [])]).call(_context, nonNullable);
1354
- };
1355
-
1356
- const STORAGE_KEY = 'quickAccessHistoryEntries';
1357
- const saveHistoryEntries = historyEntries => {
1358
- try {
1359
- window.sessionStorage.setItem(STORAGE_KEY, _JSON$stringify__default["default"](historyEntries));
1360
- return true;
1361
- } catch (error) {
1362
- return false;
1363
- }
1364
- };
1365
- const loadHistoryEntries = () => {
1366
- try {
1367
- const value = sessionStorage.getItem(STORAGE_KEY);
1368
- return value ? JSON.parse(value) : [];
1369
- } catch (error) {
1370
- return [];
1371
- }
1372
- };
1373
-
1374
- 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 } } } };
1375
- const createProductVariantSubCommands = _ref => {
1376
- let intl = _ref.intl,
1377
- applicationContext = _ref.applicationContext,
1378
- productId = _ref.productId,
1379
- variantId = _ref.variantId;
1380
- const canViewProducts = permissions$1.hasSomePermissions([permissions.ViewProducts], applicationContext.permissions);
1381
- if (!canViewProducts || !applicationContext.project) return [];
1382
- return [{
1383
- id: `go/product(${productId})/variant(${variantId})/attributes`,
1384
- text: intl.formatMessage(messages.showProductVariantAttributes),
1385
- action: {
1386
- type: actionTypes.go,
1387
- to: commonTags.oneLineTrim`
1388
- /${applicationContext.project.key}
1389
- /products
1390
- /${productId}
1391
- /variants
1392
- /${variantId}
1393
- /attributes
1394
- `
1395
- }
1396
- }, {
1397
- id: `go/product(${productId})/variant${variantId}/images`,
1398
- text: intl.formatMessage(messages.showProductVariantImages),
1399
- action: {
1400
- type: actionTypes.go,
1401
- to: commonTags.oneLineTrim`
1402
- /${applicationContext.project.key}
1403
- /products
1404
- /${productId}
1405
- /variants
1406
- /${variantId}
1407
- /images
1408
- `
1409
- }
1410
- }, {
1411
- id: `go/product(${productId})/variant(${variantId})/prices`,
1412
- text: intl.formatMessage(messages.showProductVariantPrices),
1413
- action: {
1414
- type: actionTypes.go,
1415
- to: commonTags.oneLineTrim`
1416
- /${applicationContext.project.key}
1417
- /products
1418
- /${productId}
1419
- /variants
1420
- /${variantId}
1421
- /prices
1422
- `
1423
- }
1424
- }, {
1425
- id: `go/product(${productId})/variant(${variantId})/inventory`,
1426
- text: intl.formatMessage(messages.showProductVariantInventory),
1427
- action: {
1428
- type: actionTypes.go,
1429
- to: commonTags.oneLineTrim`
1430
- /${applicationContext.project.key}
1431
- /products
1432
- /${productId}
1433
- /variants
1434
- /${variantId}
1435
- /inventory
1436
- `
1437
- }
1438
- }];
1439
- };
1440
- const formatVariantMessage = (variant, intl) => {
1441
- if (variant.sku) return intl.formatMessage(messages.openVariantBySku, {
1442
- sku: variant.sku
1443
- });
1444
- if (variant.key) return intl.formatMessage(messages.openVariantByKey, {
1445
- key: variant.key
1446
- });
1447
- return intl.formatMessage(messages.openVariantById, {
1448
- id: variant.id
1449
- });
1450
- };
1451
- const createProductVariantListSubCommands = async _ref2 => {
1452
- let intl = _ref2.intl,
1453
- applicationContext = _ref2.applicationContext,
1454
- productId = _ref2.productId,
1455
- execQuery = _ref2.execQuery;
1456
- const canViewProducts = permissions$1.hasSomePermissions([permissions.ViewProducts], applicationContext.permissions);
1457
- if (!canViewProducts) return [];
1458
- const data = await execQuery(QuickAccessProductQuery, {
1459
- productId
1460
- }, {
1461
- target: constants.GRAPHQL_TARGETS.COMMERCETOOLS_PLATFORM
1462
- });
1463
- if (data && data.product && data.product.masterData && data.product.masterData.staged && applicationContext.project) {
1464
- var _context;
1465
- const projectKey = applicationContext.project.key;
1466
- return _mapInstanceProperty__default["default"](_context = data.product.masterData.staged.allVariants).call(_context, variant => ({
1467
- id: `go/product(${productId})/variant(${variant.id})`,
1468
- text: formatVariantMessage(variant, intl),
1469
- subCommands: createProductVariantSubCommands({
1470
- intl,
1471
- applicationContext,
1472
- productId,
1473
- variantId: variant.id
1474
- }),
1475
- action: {
1476
- type: actionTypes.go,
1477
- to: commonTags.oneLineTrim`
1478
- /${projectKey}
1479
- /products
1480
- /${productId}
1481
- /variants
1482
- /${variant.id}
1483
- `
1484
- }
1485
- }));
1486
- }
1487
- return [];
1488
- };
1489
- const createProductTabsSubCommands = _ref3 => {
1490
- let intl = _ref3.intl,
1491
- applicationContext = _ref3.applicationContext,
1492
- productId = _ref3.productId;
1493
- const canViewProducts = permissions$1.hasSomePermissions([permissions.ViewProducts], applicationContext.permissions);
1494
- if (!canViewProducts || !applicationContext.project) return [];
1495
- return [{
1496
- id: `go/product(${productId})/general`,
1497
- text: intl.formatMessage(messages.openProductVariantGeneral),
1498
- action: {
1499
- type: actionTypes.go,
1500
- to: commonTags.oneLineTrim`
1501
- /${applicationContext.project.key}
1502
- /products
1503
- /${productId}
1504
- /general
1505
- `
1506
- }
1507
- }, {
1508
- id: `go/product(${productId})/variants`,
1509
- text: intl.formatMessage(messages.openProductVariantList),
1510
- action: {
1511
- type: actionTypes.go,
1512
- to: commonTags.oneLineTrim`
1513
- /${applicationContext.project.key}
1514
- /products
1515
- /${productId}
1516
- /variants
1517
- `
1518
- },
1519
- subCommands: execQuery => createProductVariantListSubCommands({
1520
- intl,
1521
- applicationContext,
1522
- productId,
1523
- execQuery
1524
- })
1525
- }, {
1526
- id: `go/product(${productId})/search`,
1527
- text: intl.formatMessage(messages.openProductVariantSearch),
1528
- action: {
1529
- type: actionTypes.go,
1530
- to: commonTags.oneLineTrim`
1531
- /${applicationContext.project.key}
1532
- /products
1533
- /${productId}
1534
- /search
1535
- `
1536
- }
1537
- }];
1538
- };
1539
-
1540
- const sanitize = param => param
1541
- // Replace all \ with \\ (to prevent generate escape characters)
1542
- .replace(/\\/g, '\\\\')
1543
- // Replace all " with \"
1544
- .replace(/"/g, '\\"');
1545
- const flattenCommands = async (results, execQuery) => {
1546
- async function flatten(commands) {
1547
- return _reduceInstanceProperty__default["default"](commands).call(commands, async (prevPromise, command) => {
1548
- const prevResults = await prevPromise;
1549
- if (command.subCommands) {
1550
- if (typeof command.subCommands === 'function') {
1551
- const subCommands = await command.subCommands(execQuery);
1552
- const flattenSubCommands = await flatten(subCommands);
1553
- return [...prevResults, command, ...flattenSubCommands];
1554
- }
1555
- const flattenSubCommands = await flatten(command.subCommands);
1556
- return [...prevResults, command, ...flattenSubCommands];
1557
- }
1558
- return [...prevResults, command];
1559
- }, _Promise__default["default"].resolve([]));
1560
- }
1561
- return await flatten(results);
1562
- };
1563
-
1564
- // Once ui-kit exposes its fallback mechanism, we can use the same one here
1565
- const translate = (nameAllLocales, projectDataLocale) => {
1566
- const matchedTranslation = _findInstanceProperty__default["default"](nameAllLocales).call(nameAllLocales, translation => translation.locale === projectDataLocale && translation.value);
1567
- if (matchedTranslation) return matchedTranslation.value;
1568
-
1569
- // Fall back to the first available locale
1570
- if (nameAllLocales.length > 0) return nameAllLocales[0].value;
1571
- return '';
1572
- };
1573
-
1574
- 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 } } } };
1575
- const searchProductIdsAction = (searchText, projectKey, dataLocale) => sdk.actions.post({
1576
- uri: `/${projectKey}/search/products`,
1577
- mcApiProxyTarget: constants.MC_API_PROXY_TARGETS.PIM_SEARCH,
1578
- payload: {
1579
- query: {
1580
- fullText: {
1581
- field: 'name',
1582
- language: dataLocale,
1583
- value: searchText
1584
- }
1585
- },
1586
- sort: [{
1587
- field: 'name',
1588
- language: dataLocale,
1589
- order: 'desc'
1590
- }],
1591
- limit: 9,
1592
- offset: 0
1593
- }
1594
- });
1595
- const pimIndexerStatusAction = (projectKey, dataLocale) =>
1596
- // TODO this should be sdkActions.head()
1597
- // and then we should check whether the response code is
1598
- // - 200 meaning the project is indexed
1599
- // - 404 meaning the project is not indexed
1600
- //
1601
- // But there is a problem in tne node-sdk client as it tries to
1602
- // .json()-parse the response to HEAD requests which results in an
1603
- // error, so we send a regular request for now and limit to no results
1604
- // instead to keep the payload minimal
1605
- sdk.actions.post({
1606
- uri: `/${projectKey}/search/products`,
1607
- mcApiProxyTarget: constants.MC_API_PROXY_TARGETS.PIM_SEARCH,
1608
- payload: {
1609
- query: {
1610
- fullText: {
1611
- field: 'name',
1612
- language: dataLocale,
1613
- value: 'availability-check'
1614
- }
1615
- },
1616
- limit: 0,
1617
- offset: 0
1618
- }
1619
- });
1620
- const QuickAccess = props => {
1621
- const _useState = react$1.useState(loadHistoryEntries()),
1622
- _useState2 = _slicedToArray(_useState, 2),
1623
- historyEntries = _useState2[0],
1624
- setHistoryEntries = _useState2[1];
1625
- const handleHistoryEntriesChange = react$1.useCallback(entries => {
1626
- // Keep the history in sync with the session storage
1627
- saveHistoryEntries(entries);
1628
- setHistoryEntries(entries);
1629
- }, []);
1630
- const history = reactRouterDom.useHistory();
1631
- const apolloClient = react$2.useApolloClient();
1632
- const intl = reactIntl.useIntl();
1633
- const _useFeatureToggles = reactBroadcast.useFeatureToggles({
1634
- pimSearch: true,
1635
- customApplications: true,
1636
- canViewDashboard: true
1637
- }),
1638
- _useFeatureToggles2 = _slicedToArray(_useFeatureToggles, 3),
1639
- isPimSearchEnabled = _useFeatureToggles2[0],
1640
- isCustomApplicationsEnabled = _useFeatureToggles2[1],
1641
- isCanViewDashboardEnabled = _useFeatureToggles2[2];
1642
- const applicationContext = applicationShellConnectors.useApplicationContext();
1643
-
1644
- // Destructure functions from props to reference them in the hook dependency list
1645
- const onPimIndexerStateChangeFromParent = props.onPimIndexerStateChange;
1646
- const dispatchFetchProductIds = sdk.useAsyncDispatch();
1647
- const fetchPimSearchProductIds = react$1.useCallback(async searchText => {
1648
- if (applicationContext.project && applicationContext.dataLocale) {
1649
- var _context;
1650
- const result = await dispatchFetchProductIds(searchProductIdsAction(searchText, applicationContext.project.key, applicationContext.dataLocale));
1651
- return result && result.hits ? _mapInstanceProperty__default["default"](_context = result.hits).call(_context, hit => hit.id) : [];
1652
- }
1653
- return [];
1654
- }, [applicationContext.dataLocale, applicationContext.project, dispatchFetchProductIds]);
1655
- const dispatchFetchPimIndexerStatus = sdk.useAsyncDispatch();
1656
- const fetchPimIndexerStatus = react$1.useCallback(async () => {
1657
- if (applicationContext.project && applicationContext.dataLocale) {
1658
- try {
1659
- dispatchFetchPimIndexerStatus(pimIndexerStatusAction(applicationContext.project.key, applicationContext.dataLocale));
1660
- return dist_commercetoolsFrontendApplicationShell.pimIndexerStates.INDEXED;
1661
- } catch (error) {
1662
- // eslint-disable-next-line no-console
1663
- if (process.env.NODE_ENV !== 'production') console.error(error);
1664
- // project is not using pim-indexer when response error code is 404,
1665
- // but we treat all errors as non-indexed as a safe guard, so we're
1666
- // not checking the response error code at all
1667
- return dist_commercetoolsFrontendApplicationShell.pimIndexerStates.NOT_INDEXED;
1668
- }
1669
- }
1670
- return dist_commercetoolsFrontendApplicationShell.pimIndexerStates.NOT_INDEXED;
1671
- }, [applicationContext.dataLocale, applicationContext.project, dispatchFetchPimIndexerStatus]);
1672
- const getProjectIndexStatus = react$1.useCallback(async () => {
1673
- // skip when there is no project
1674
- if (!applicationContext.project) return dist_commercetoolsFrontendApplicationShell.pimIndexerStates.NOT_INDEXED;
1675
- const canViewProducts = permissions$1.hasSomePermissions([permissions.ViewProducts], applicationContext.permissions);
1676
-
1677
- // skip checking when user can't view products anyways
1678
- if (!canViewProducts) return dist_commercetoolsFrontendApplicationShell.pimIndexerStates.NOT_INDEXED;
1679
- return await fetchPimIndexerStatus();
1680
- }, [applicationContext.permissions, applicationContext.project, fetchPimIndexerStatus]);
1681
- react$1.useEffect(() => {
1682
- if (props.pimIndexerState === dist_commercetoolsFrontendApplicationShell.pimIndexerStates.UNCHECKED) {
1683
- getProjectIndexStatus().then(status => {
1684
- onPimIndexerStateChangeFromParent(status);
1685
- });
1686
- }
1687
- // eslint-disable-next-line react-hooks/exhaustive-deps
1688
- }, []); // <-- run only once, when component mounts
1689
-
1690
- const execQuery = react$1.useCallback((Query, variables, context) => apolloClient.query({
1691
- query: Query,
1692
- errorPolicy: 'ignore',
1693
- variables,
1694
- context
1695
- }).then(response => response.data), [apolloClient]);
1696
- const getNextCommands = react$1.useCallback(async command => {
1697
- if (!command.subCommands) return [];
1698
- if (_Array$isArray__default["default"](command.subCommands)) return command.subCommands;
1699
- return await command.subCommands(execQuery);
1700
- }, [execQuery]);
1701
- const getProjectCommands = react$1.useCallback(async searchText => {
1702
- const idsOfProductsMatchingSearchText = props.pimIndexerState === dist_commercetoolsFrontendApplicationShell.pimIndexerStates.INDEXED ? await fetchPimSearchProductIds(searchText) : [];
1703
- const canViewProducts = permissions$1.hasSomePermissions([permissions.ViewProducts], applicationContext.permissions);
1704
- const data = await execQuery(QuickAccessQuery, {
1705
- searchText: sanitize(searchText),
1706
- // Pass conditional arguments to disable some of the queries
1707
- canViewProducts,
1708
- productsWhereClause: `id in (${_mapInstanceProperty__default["default"](idsOfProductsMatchingSearchText).call(idsOfProductsMatchingSearchText, id => _JSON$stringify__default["default"](id)).join(', ')})`,
1709
- includeProductsByIds: Boolean(canViewProducts && idsOfProductsMatchingSearchText.length > 0)
1710
- }, {
1711
- target: constants.GRAPHQL_TARGETS.COMMERCETOOLS_PLATFORM
1712
- });
1713
- const commands = [];
1714
- if (data && data.productByVariantKey && data.productByVariantKey.masterData && data.productByVariantKey.masterData.staged && data.productByVariantKey.masterData.staged.variant && applicationContext.project && applicationContext.dataLocale) {
1715
- const productId = data.productByVariantKey.id;
1716
- const variantId = data.productByVariantKey.masterData.staged.variant.id;
1717
- const variantKey = data.productByVariantKey.masterData.staged.variant.key;
1718
- commands.push({
1719
- id: `go/product-variant-by-key/product(${productId}/variant(${variantId})`,
1720
- text: intl.formatMessage(messages.showProductVariant, {
1721
- variantName: translate(data.productByVariantKey.masterData.staged.nameAllLocales, applicationContext.dataLocale)
1722
- }),
1723
- keywords: variantKey ? [variantKey] : undefined,
1724
- action: {
1725
- type: actionTypes.go,
1726
- to: commonTags.oneLineTrim`
1727
- /${applicationContext.project.key}
1728
- /products
1729
- /${productId}
1730
- /variants
1731
- /${variantId}
1732
- `
1733
- },
1734
- subCommands: createProductVariantSubCommands({
1735
- intl,
1736
- applicationContext,
1737
- productId,
1738
- variantId
1739
- })
1740
- });
1741
- }
1742
- if (data && data.productByVariantSku && data.productByVariantSku.masterData && data.productByVariantSku.masterData.staged && data.productByVariantSku.masterData.staged.variant && applicationContext.project && applicationContext.dataLocale) {
1743
- const productId = data.productByVariantSku.id;
1744
- const variantId = data.productByVariantSku.masterData.staged.variant.id;
1745
- commands.push({
1746
- id: `go/product-variant-by-sku/product(${productId})/variant(${variantId})`,
1747
- text: intl.formatMessage(messages.showProductVariant, {
1748
- variantName: data.productByVariantSku.masterData.staged.variant.sku
1749
- }),
1750
- action: {
1751
- type: actionTypes.go,
1752
- to: commonTags.oneLineTrim`
1753
- /${applicationContext.project.key}
1754
- /products
1755
- /${productId}
1756
- /variants
1757
- /${variantId}
1758
- `
1759
- },
1760
- subCommands: createProductVariantSubCommands({
1761
- intl,
1762
- applicationContext,
1763
- productId,
1764
- variantId
1765
- })
1766
- });
1767
- }
1768
- if (data && data.productById && data.productById.masterData && data.productById.masterData.staged && data.productById.masterData.staged.nameAllLocales && applicationContext.project && applicationContext.dataLocale) {
1769
- const productId = data.productById.id;
1770
- commands.push({
1771
- id: `go/product-by-id/product(${productId})`,
1772
- text: intl.formatMessage(messages.showProduct, {
1773
- productName: translate(data.productById.masterData.staged.nameAllLocales, applicationContext.dataLocale)
1774
- }),
1775
- keywords: [productId],
1776
- action: {
1777
- type: actionTypes.go,
1778
- to: `/${applicationContext.project.key}/products/${productId}`
1779
- },
1780
- subCommands: createProductTabsSubCommands({
1781
- intl,
1782
- applicationContext,
1783
- productId
1784
- })
1785
- });
1786
- }
1787
- if (data && data.productsByIds && data.productsByIds.results) {
1788
- var _context2;
1789
- _forEachInstanceProperty__default["default"](_context2 = data.productsByIds.results).call(_context2, product => {
1790
- if (product.masterData.staged && applicationContext.project && applicationContext.dataLocale) {
1791
- commands.push({
1792
- id: `go/product-by-search-text/product(${product.id})`,
1793
- text: intl.formatMessage(messages.showProduct, {
1794
- productName: translate(product.masterData.staged.nameAllLocales, applicationContext.dataLocale)
1795
- }),
1796
- keywords: [product.id],
1797
- action: {
1798
- type: actionTypes.go,
1799
- to: `/${applicationContext.project.key}/products/${product.id}`
1800
- },
1801
- subCommands: createProductTabsSubCommands({
1802
- intl,
1803
- applicationContext,
1804
- productId: product.id
1805
- })
1806
- });
1807
- }
1808
- });
1809
- }
1810
- if (data && data.productByKey && applicationContext.project && applicationContext.dataLocale) {
1811
- const productId = data.productByKey.id;
1812
- commands.push({
1813
- id: `go/product-by-key/product(${productId})`,
1814
- text: intl.formatMessage(messages.showProduct, {
1815
- productName: searchText
1816
- }),
1817
- action: {
1818
- type: actionTypes.go,
1819
- to: `/${applicationContext.project.key}/products/${productId}`
1820
- },
1821
- subCommands: createProductTabsSubCommands({
1822
- intl,
1823
- applicationContext,
1824
- productId
1825
- })
1826
- });
1827
- }
1828
- return commands;
1829
- }, [applicationContext, execQuery, fetchPimSearchProductIds, intl, props.pimIndexerState]);
1830
- const debouncedGetProjectCommands = debounce__default["default"](getProjectCommands, 200, {
1831
- cancelObj: 'canceled'
1832
- });
1833
- const search = react$1.useCallback(async searchText => {
1834
- const generalCommands = createCommands({
1835
- applicationContext,
1836
- changeProjectDataLocale: props.onChangeProjectDataLocale,
1837
- intl,
1838
- featureToggles: {
1839
- pimSearch: isPimSearchEnabled,
1840
- customApplications: isCustomApplicationsEnabled,
1841
- canViewDashboard: isCanViewDashboardEnabled
1842
- }
1843
- });
1844
- if (!applicationContext.project) return generalCommands;
1845
-
1846
- // Avoid searching for short texts, as we won't get any good results
1847
- // anyways. This results in commands popping up immediately when the user
1848
- // starts typing, which gives the whole search a much more repsonsive
1849
- // feeling.
1850
- if (_trimInstanceProperty__default["default"](searchText).call(searchText).length < 3) return generalCommands;
1851
- try {
1852
- const projectCommands = await debouncedGetProjectCommands(searchText);
1853
- const allCommands = [...generalCommands, ...projectCommands];
1854
- return await flattenCommands(allCommands, execQuery);
1855
- } catch (error) {
1856
- // When the debounced search is canceled, it throws with "canceled"
1857
- // In that case we know that another search is going to happen
1858
- // and we just resolve with the general commands.
1859
- if (error === 'canceled') return generalCommands;
1860
- throw error;
1861
- }
1862
- }, [applicationContext, debouncedGetProjectCommands, execQuery, intl, isCanViewDashboardEnabled, isCustomApplicationsEnabled, isPimSearchEnabled, props.onChangeProjectDataLocale]);
1863
- const executeCommand = react$1.useCallback((command, meta) => {
1864
- var _context3;
1865
- if (typeof command.action === 'function') {
1866
- // Idea: We could handle these errors and set them on status bar of Butler
1867
- // We can also handle sync/async commands by checking command.action.then
1868
- command.action();
1869
- return;
1870
- }
1871
- // open in new window
1872
- // and always open other pages in a new window
1873
- if (meta.openInNewTab || !_startsWithInstanceProperty__default["default"](_context3 = command.action.to).call(_context3, '/')) {
1874
- // eslint-disable-next-line no-restricted-globals
1875
- open(command.action.to, '_blank');
1876
- } else if (applicationContext.environment.useFullRedirectsForLinks) {
1877
- location.location.replace(command.action.to);
1878
- } else {
1879
- history.push(command.action.to);
1880
- }
1881
- }, [applicationContext.environment.useFullRedirectsForLinks, history]);
1882
- return jsxRuntime.jsx(ButlerWithAnimation, {
1883
- historyEntries: historyEntries,
1884
- onHistoryEntriesChange: handleHistoryEntriesChange,
1885
- search: search,
1886
- executeCommand: executeCommand,
1887
- onClose: props.onClose,
1888
- getNextCommands: getNextCommands
1889
- });
1890
- };
1891
- QuickAccess.displayName = 'QuickAccess';
1892
-
1893
- exports["default"] = QuickAccess;