@commercetools-frontend/application-shell 22.17.0 → 22.17.2

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