decap-cms-widget-list 2.11.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +556 -0
- package/LICENSE +22 -0
- package/README.md +9 -0
- package/dist/decap-cms-widget-list.js +7 -0
- package/dist/decap-cms-widget-list.js.LICENSE.txt +23 -0
- package/dist/decap-cms-widget-list.js.map +1 -0
- package/dist/esm/ListControl.js +676 -0
- package/dist/esm/index.js +32 -0
- package/dist/esm/schema.js +35 -0
- package/dist/esm/typedListHelpers.js +44 -0
- package/package.json +39 -0
- package/src/ListControl.js +680 -0
- package/src/__tests__/ListControl.spec.js +792 -0
- package/src/__tests__/__snapshots__/ListControl.spec.js.snap +2213 -0
- package/src/index.js +19 -0
- package/src/schema.js +12 -0
- package/src/typedListHelpers.js +35 -0
- package/webpack.config.js +3 -0
|
@@ -0,0 +1,676 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _core = require("@emotion/core");
|
|
8
|
+
var _styledBase = _interopRequireDefault(require("@emotion/styled-base"));
|
|
9
|
+
var _uniqueId2 = _interopRequireDefault(require("lodash/uniqueId"));
|
|
10
|
+
var _isEmpty2 = _interopRequireDefault(require("lodash/isEmpty"));
|
|
11
|
+
var _partial2 = _interopRequireDefault(require("lodash/partial"));
|
|
12
|
+
var _react = _interopRequireDefault(require("react"));
|
|
13
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
14
|
+
var _reactImmutableProptypes = _interopRequireDefault(require("react-immutable-proptypes"));
|
|
15
|
+
var _immutable = require("immutable");
|
|
16
|
+
var _v = _interopRequireDefault(require("uuid/v4"));
|
|
17
|
+
var _reactSortableHoc = require("react-sortable-hoc");
|
|
18
|
+
var _decapCmsWidgetObject = _interopRequireDefault(require("decap-cms-widget-object"));
|
|
19
|
+
var _decapCmsUiDefault = require("decap-cms-ui-default");
|
|
20
|
+
var _decapCmsLibWidgets = require("decap-cms-lib-widgets");
|
|
21
|
+
var _typedListHelpers = require("./typedListHelpers");
|
|
22
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
23
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
24
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
25
|
+
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
26
|
+
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)."; }
|
|
27
|
+
const ObjectControl = _decapCmsWidgetObject.default.controlComponent;
|
|
28
|
+
const ListItem = (0, _styledBase.default)("div", {
|
|
29
|
+
target: "e11zrb3c0",
|
|
30
|
+
label: "ListItem"
|
|
31
|
+
})(process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE0QmlCIiwiZmlsZSI6Ii4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IEltbXV0YWJsZVByb3BUeXBlcyBmcm9tICdyZWFjdC1pbW11dGFibGUtcHJvcHR5cGVzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCB7IGNzcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL2NvcmUnO1xuaW1wb3J0IHsgTGlzdCwgTWFwLCBmcm9tSlMgfSBmcm9tICdpbW11dGFibGUnO1xuaW1wb3J0IHsgcGFydGlhbCwgaXNFbXB0eSwgdW5pcXVlSWQgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHV1aWQgZnJvbSAndXVpZC92NCc7XG5pbXBvcnQgeyBTb3J0YWJsZUNvbnRhaW5lciwgU29ydGFibGVFbGVtZW50LCBTb3J0YWJsZUhhbmRsZSB9IGZyb20gJ3JlYWN0LXNvcnRhYmxlLWhvYyc7XG5pbXBvcnQgRGVjYXBDbXNXaWRnZXRPYmplY3QgZnJvbSAnZGVjYXAtY21zLXdpZGdldC1vYmplY3QnO1xuaW1wb3J0IHtcbiAgTGlzdEl0ZW1Ub3BCYXIsXG4gIE9iamVjdFdpZGdldFRvcEJhcixcbiAgY29sb3JzLFxuICBsZW5ndGhzLFxuICBGaWVsZExhYmVsLFxufSBmcm9tICdkZWNhcC1jbXMtdWktZGVmYXVsdCc7XG5pbXBvcnQgeyBzdHJpbmdUZW1wbGF0ZSwgdmFsaWRhdGlvbnMgfSBmcm9tICdkZWNhcC1jbXMtbGliLXdpZGdldHMnO1xuXG5pbXBvcnQge1xuICBUWVBFU19LRVksXG4gIGdldFR5cGVkRmllbGRGb3JWYWx1ZSxcbiAgcmVzb2x2ZUZpZWxkS2V5VHlwZSxcbiAgZ2V0RXJyb3JNZXNzYWdlRm9yVHlwZWRGaWVsZEFuZFZhbHVlLFxufSBmcm9tICcuL3R5cGVkTGlzdEhlbHBlcnMnO1xuXG5jb25zdCBPYmplY3RDb250cm9sID0gRGVjYXBDbXNXaWRnZXRPYmplY3QuY29udHJvbENvbXBvbmVudDtcblxuY29uc3QgTGlzdEl0ZW0gPSBzdHlsZWQuZGl2KCk7XG5cbmNvbnN0IFNvcnRhYmxlTGlzdEl0ZW0gPSBTb3J0YWJsZUVsZW1lbnQoTGlzdEl0ZW0pO1xuXG5jb25zdCBTdHlsZWRMaXN0SXRlbVRvcEJhciA9IHN0eWxlZChMaXN0SXRlbVRvcEJhcilgXG4gIGJhY2tncm91bmQtY29sb3I6ICR7Y29sb3JzLnRleHRGaWVsZEJvcmRlcn07XG5gO1xuXG5jb25zdCBOZXN0ZWRPYmplY3RMYWJlbCA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6ICR7cHJvcHMgPT4gKHByb3BzLmNvbGxhcHNlZCA/ICdibG9jaycgOiAnbm9uZScpfTtcbiAgYm9yZGVyLXRvcDogMDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gKHByb3BzLmVycm9yID8gY29sb3JzLmVycm9yVGV4dCA6ICdpbmhlcml0Jyl9O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAke2NvbG9ycy50ZXh0RmllbGRCb3JkZXJ9O1xuICBwYWRkaW5nOiAxM3B4O1xuICBib3JkZXItcmFkaXVzOiAwIDAgJHtsZW5ndGhzLmJvcmRlclJhZGl1c30gJHtsZW5ndGhzLmJvcmRlclJhZGl1c307XG5gO1xuXG5jb25zdCBzdHlsZVN0cmluZ3MgPSB7XG4gIGNvbGxhcHNlZE9iamVjdENvbnRyb2w6IGBcbiAgICBkaXNwbGF5OiBub25lO1xuICBgLFxuICBvYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXI6IGBcbiAgICBwYWRkaW5nOiAke2xlbmd0aHMub2JqZWN0V2lkZ2V0VG9wQmFyQ29udGFpbmVyUGFkZGluZ307XG4gIGAsXG59O1xuXG5jb25zdCBzdHlsZXMgPSB7XG4gIGxpc3RDb250cm9sSXRlbTogY3NzYFxuICAgIG1hcmdpbi10b3A6IDE4cHg7XG5cbiAgICAmOmZpcnN0LW9mLXR5cGUge1xuICAgICAgbWFyZ2luLXRvcDogMjZweDtcbiAgICB9XG4gIGAsXG4gIGxpc3RDb250cm9sSXRlbUNvbGxhcHNlZDogY3NzYFxuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICBgLFxufTtcblxuY29uc3QgU29ydGFibGVMaXN0ID0gU29ydGFibGVDb250YWluZXIoKHsgaXRlbXMsIHJlbmRlckl0ZW0gfSkgPT4ge1xuICByZXR1cm4gPGRpdj57aXRlbXMubWFwKHJlbmRlckl0ZW0pfTwvZGl2Pjtcbn0pO1xuXG5jb25zdCB2YWx1ZVR5cGVzID0ge1xuICBTSU5HTEU6ICdTSU5HTEUnLFxuICBNVUxUSVBMRTogJ01VTFRJUExFJyxcbiAgTUlYRUQ6ICdNSVhFRCcsXG59O1xuXG5mdW5jdGlvbiBoYW5kbGVTdW1tYXJ5KHN1bW1hcnksIGVudHJ5LCBsYWJlbCwgaXRlbSkge1xuICBjb25zdCBkYXRhID0gc3RyaW5nVGVtcGxhdGUuYWRkRmlsZVRlbXBsYXRlRmllbGRzKFxuICAgIGVudHJ5LmdldCgncGF0aCcpLFxuICAgIGl0ZW0uc2V0KCdmaWVsZHMubGFiZWwnLCBsYWJlbCksXG4gICk7XG4gIHJldHVybiBzdHJpbmdUZW1wbGF0ZS5jb21waWxlU3RyaW5nVGVtcGxhdGUoc3VtbWFyeSwgbnVsbCwgJycsIGRhdGEpO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUl0ZW0oZmllbGQsIGl0ZW0pIHtcbiAgaWYgKCFNYXAuaXNNYXAoaXRlbSkpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgJyR7ZmllbGQuZ2V0KCduYW1lJyl9JyBmaWVsZCBpdGVtIHZhbHVlIHZhbHVlIHNob3VsZCBiZSBhIG1hcCBidXQgaXMgYSAnJHt0eXBlb2YgaXRlbX0nYCxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gTGFiZWxDb21wb25lbnQoeyBmaWVsZCwgaXNBY3RpdmUsIGhhc0Vycm9ycywgdW5pcXVlRmllbGRJZCwgaXNGaWVsZE9wdGlvbmFsLCB0IH0pIHtcbiAgY29uc3QgbGFiZWwgPSBgJHtmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpfWA7XG4gIHJldHVybiAoXG4gICAgPEZpZWxkTGFiZWwgaXNBY3RpdmU9e2lzQWN0aXZlfSBoYXNFcnJvcnM9e2hhc0Vycm9yc30gaHRtbEZvcj17dW5pcXVlRmllbGRJZH0+XG4gICAgICB7bGFiZWx9IHtgJHtpc0ZpZWxkT3B0aW9uYWwgPyBgICgke3QoJ2VkaXRvci5lZGl0b3JDb250cm9sLmZpZWxkLm9wdGlvbmFsJyl9KWAgOiAnJ31gfVxuICAgIDwvRmllbGRMYWJlbD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlzdENvbnRyb2wgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICB2YWxpZGF0aW9ucyA9IFtdO1xuXG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgbWV0YWRhdGE6IEltbXV0YWJsZVByb3BUeXBlcy5tYXAsXG4gICAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25DaGFuZ2VPYmplY3Q6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25WYWxpZGF0ZU9iamVjdDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICB2YWxpZGF0ZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICB2YWx1ZTogSW1tdXRhYmxlUHJvcFR5cGVzLmxpc3QsXG4gICAgZmllbGQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgZm9ySUQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY29udHJvbFJlZjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgbWVkaWFQYXRoczogSW1tdXRhYmxlUHJvcFR5cGVzLm1hcC5pc1JlcXVpcmVkLFxuICAgIGdldEFzc2V0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uT3Blbk1lZGlhTGlicmFyeTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvbkFkZEFzc2V0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uUmVtb3ZlSW5zZXJ0ZWRNZWRpYTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBjbGFzc05hbWVXcmFwcGVyOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgc2V0QWN0aXZlU3R5bGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgc2V0SW5hY3RpdmVTdHlsZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBlZGl0b3JDb250cm9sOiBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZCxcbiAgICByZXNvbHZlV2lkZ2V0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGNsZWFyRmllbGRFcnJvcnM6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgZmllbGRzRXJyb3JzOiBJbW11dGFibGVQcm9wVHlwZXMubWFwLmlzUmVxdWlyZWQsXG4gICAgZW50cnk6IEltbXV0YWJsZVByb3BUeXBlcy5tYXAuaXNSZXF1aXJlZCxcbiAgICB0OiBQcm9wVHlwZXMuZnVuYyxcbiAgfTtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIHZhbHVlOiBMaXN0KCksXG4gICAgcGFyZW50SWRzOiBbXSxcbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICBjb25zdCB7IGZpZWxkLCB2YWx1ZSB9ID0gcHJvcHM7XG4gICAgY29uc3QgbGlzdENvbGxhcHNlZCA9IGZpZWxkLmdldCgnY29sbGFwc2VkJywgdHJ1ZSk7XG4gICAgY29uc3QgaXRlbXNDb2xsYXBzZWQgPSAodmFsdWUgJiYgQXJyYXkodmFsdWUuc2l6ZSkuZmlsbChsaXN0Q29sbGFwc2VkKSkgfHwgW107XG4gICAgY29uc3Qga2V5cyA9ICh2YWx1ZSAmJiBBcnJheS5mcm9tKHsgbGVuZ3RoOiB2YWx1ZS5zaXplIH0sICgpID0+IHV1aWQoKSkpIHx8IFtdO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGxpc3RDb2xsYXBzZWQsXG4gICAgICBpdGVtc0NvbGxhcHNlZCxcbiAgICAgIHZhbHVlOiB0aGlzLnZhbHVlVG9TdHJpbmcodmFsdWUpLFxuICAgICAga2V5cyxcbiAgICB9O1xuICB9XG5cbiAgdmFsdWVUb1N0cmluZyA9IHZhbHVlID0+IHtcbiAgICBsZXQgc3RyaW5nVmFsdWU7XG4gICAgaWYgKExpc3QuaXNMaXN0KHZhbHVlKSB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgc3RyaW5nVmFsdWUgPSB2YWx1ZS5qb2luKCcsJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYEV4cGVjdGVkIExpc3QgdmFsdWUgdG8gYmUgYW4gYXJyYXkgYnV0IHJlY2VpdmVkICcke3ZhbHVlfScgd2l0aCB0eXBlIG9mICcke3R5cGVvZiB2YWx1ZX0nLiBQbGVhc2UgY2hlY2sgdGhlIHZhbHVlIHByb3ZpZGVkIHRvIHRoZSAnJHt0aGlzLnByb3BzLmZpZWxkLmdldChcbiAgICAgICAgICAnbmFtZScsXG4gICAgICAgICl9JyBmaWVsZGAsXG4gICAgICApO1xuICAgICAgc3RyaW5nVmFsdWUgPSBTdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gc3RyaW5nVmFsdWUucmVwbGFjZSgvLChbXlxcc118JCkvZywgJywgJDEnKTtcbiAgfTtcblxuICBnZXRWYWx1ZVR5cGUgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoZmllbGQuZ2V0KCdmaWVsZHMnKSkge1xuICAgICAgcmV0dXJuIHZhbHVlVHlwZXMuTVVMVElQTEU7XG4gICAgfSBlbHNlIGlmIChmaWVsZC5nZXQoJ2ZpZWxkJykpIHtcbiAgICAgIHJldHVybiB2YWx1ZVR5cGVzLlNJTkdMRTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkLmdldChUWVBFU19LRVkpKSB7XG4gICAgICByZXR1cm4gdmFsdWVUeXBlcy5NSVhFRDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9O1xuXG4gIHVuaXF1ZUZpZWxkSWQgPSB1bmlxdWVJZChgJHt0aGlzLnByb3BzLmZpZWxkLmdldCgnbmFtZScpfS1maWVsZC1gKTtcbiAgLyoqXG4gICAqIEFsd2F5cyB1cGRhdGUgc28gdGhhdCBlYWNoIG5lc3RlZCB3aWRnZXQgaGFzIHRoZSBvcHRpb24gdG8gdXBkYXRlLiBUaGlzIGlzXG4gICAqIHJlcXVpcmVkIGJlY2F1c2UgQ29udHJvbEhPQyBwcm92aWRlcyBhIGRlZmF1bHQgYHNob3VsZENvbXBvbmVudFVwZGF0ZWBcbiAgICogd2hpY2ggb25seSB1cGRhdGVzIGlmIHRoZSB2YWx1ZSBjaGFuZ2VzLCBidXQgZXZlcnkgd2lkZ2V0IG11c3QgYmUgYWxsb3dlZFxuICAgKiB0byBvdmVycmlkZSB0aGlzLlxuICAgKi9cbiAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaGFuZGxlQ2hhbmdlID0gZSA9PiB7XG4gICAgY29uc3QgeyBvbkNoYW5nZSB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMuc3RhdGUudmFsdWU7XG4gICAgY29uc3QgbmV3VmFsdWUgPSBlLnRhcmdldC52YWx1ZS50cmltKCk7XG4gICAgY29uc3QgbGlzdFZhbHVlID0gbmV3VmFsdWUgPyBuZXdWYWx1ZS5zcGxpdCgnLCcpIDogW107XG4gICAgaWYgKG5ld1ZhbHVlLm1hdGNoKC8sJC8pICYmIG9sZFZhbHVlLm1hdGNoKC8sICQvKSkge1xuICAgICAgbGlzdFZhbHVlLnBvcCgpO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gdGhpcy52YWx1ZVRvU3RyaW5nKGxpc3RWYWx1ZSk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiBwYXJzZWRWYWx1ZSB9KTtcbiAgICBvbkNoYW5nZShMaXN0KGxpc3RWYWx1ZS5tYXAodmFsID0+IHZhbC50cmltKCkpKSk7XG4gIH07XG5cbiAgaGFuZGxlRm9jdXMgPSAoKSA9PiB7XG4gICAgdGhpcy5wcm9wcy5zZXRBY3RpdmVTdHlsZSgpO1xuICB9O1xuXG4gIGhhbmRsZUJsdXIgPSBlID0+IHtcbiAgICBjb25zdCBsaXN0VmFsdWUgPSBlLnRhcmdldC52YWx1ZVxuICAgICAgLnNwbGl0KCcsJylcbiAgICAgIC5tYXAoZWwgPT4gZWwudHJpbSgpKVxuICAgICAgLmZpbHRlcihlbCA9PiBlbCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiB0aGlzLnZhbHVlVG9TdHJpbmcobGlzdFZhbHVlKSB9KTtcbiAgICB0aGlzLnByb3BzLnNldEluYWN0aXZlU3R5bGUoKTtcbiAgfTtcblxuICBoYW5kbGVBZGQgPSBlID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgeyBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBwYXJzZWRWYWx1ZSA9XG4gICAgICB0aGlzLmdldFZhbHVlVHlwZSgpID09PSB2YWx1ZVR5cGVzLlNJTkdMRVxuICAgICAgICA/IHRoaXMuc2luZ2xlRGVmYXVsdCgpXG4gICAgICAgIDogZnJvbUpTKHRoaXMubXVsdGlwbGVEZWZhdWx0KGZpZWxkLmdldCgnZmllbGRzJykpKTtcbiAgICB0aGlzLmFkZEl0ZW0ocGFyc2VkVmFsdWUpO1xuICB9O1xuXG4gIHNpbmdsZURlZmF1bHQgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZmllbGQuZ2V0SW4oWydmaWVsZCcsICdkZWZhdWx0J10sIG51bGwpO1xuICB9O1xuXG4gIG11bHRpcGxlRGVmYXVsdCA9IGZpZWxkcyA9PiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRzRGVmYXVsdChmaWVsZHMpO1xuICB9O1xuXG4gIGhhbmRsZUFkZFR5cGUgPSAodHlwZSwgdHlwZUtleSkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gZnJvbUpTKHRoaXMubWl4ZWREZWZhdWx0KHR5cGVLZXksIHR5cGUpKTtcbiAgICB0aGlzLmFkZEl0ZW0ocGFyc2VkVmFsdWUpO1xuICB9O1xuXG4gIG1peGVkRGVmYXVsdCA9ICh0eXBlS2V5LCB0eXBlKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRUeXBlID0gdGhpcy5wcm9wcy5maWVsZC5nZXQoVFlQRVNfS0VZKS5maW5kKGYgPT4gZi5nZXQoJ25hbWUnKSA9PT0gdHlwZSk7XG4gICAgY29uc3QgZmllbGRzID0gc2VsZWN0ZWRUeXBlLmdldCgnZmllbGRzJykgfHwgW3NlbGVjdGVkVHlwZS5nZXQoJ2ZpZWxkJyldO1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRzRGVmYXVsdChmaWVsZHMsIHsgW3R5cGVLZXldOiB0eXBlIH0pO1xuICB9O1xuXG4gIGdldEZpZWxkc0RlZmF1bHQgPSAoZmllbGRzLCBpbml0aWFsVmFsdWUgPSB7fSkgPT4ge1xuICAgIHJldHVybiBmaWVsZHMucmVkdWNlKChhY2MsIGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IHN1YmZpZWxkcyA9IGl0ZW0uZ2V0KCdmaWVsZCcpIHx8IGl0ZW0uZ2V0KCdmaWVsZHMnKTtcbiAgICAgIGNvbnN0IG9iamVjdCA9IGl0ZW0uZ2V0KCd3aWRnZXQnKSA9PSAnb2JqZWN0JztcbiAgICAgIGNvbnN0IG5hbWUgPSBpdGVtLmdldCgnbmFtZScpO1xuICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gaXRlbS5nZXQoJ2RlZmF1bHQnLCBudWxsKTtcblxuICAgICAgaWYgKExpc3QuaXNMaXN0KHN1YmZpZWxkcykgJiYgb2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IHN1YkRlZmF1bHRWYWx1ZSA9IHRoaXMuZ2V0RmllbGRzRGVmYXVsdChzdWJmaWVsZHMpO1xuICAgICAgICAhaXNFbXB0eShzdWJEZWZhdWx0VmFsdWUpICYmIChhY2NbbmFtZV0gPSBzdWJEZWZhdWx0VmFsdWUpO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfVxuXG4gICAgICBpZiAoTWFwLmlzTWFwKHN1YmZpZWxkcykgJiYgb2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IHN1YkRlZmF1bHRWYWx1ZSA9IHRoaXMuZ2V0RmllbGRzRGVmYXVsdChbc3ViZmllbGRzXSk7XG4gICAgICAgICFpc0VtcHR5KHN1YkRlZmF1bHRWYWx1ZSkgJiYgKGFjY1tuYW1lXSA9IHN1YkRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9XG5cbiAgICAgIGlmIChkZWZhdWx0VmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgYWNjW25hbWVdID0gZGVmYXVsdFZhbHVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIGluaXRpYWxWYWx1ZSk7XG4gIH07XG5cbiAgYWRkSXRlbSA9IHBhcnNlZFZhbHVlID0+IHtcbiAgICBjb25zdCB7IHZhbHVlLCBvbkNoYW5nZSwgZmllbGQgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgYWRkVG9Ub3AgPSBmaWVsZC5nZXQoJ2FkZF90b190b3AnLCBmYWxzZSk7XG5cbiAgICBjb25zdCBpdGVtS2V5ID0gdXVpZCgpO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXNDb2xsYXBzZWQ6IGFkZFRvVG9wXG4gICAgICAgID8gW2ZhbHNlLCAuLi50aGlzLnN0YXRlLml0ZW1zQ29sbGFwc2VkXVxuICAgICAgICA6IFsuLi50aGlzLnN0YXRlLml0ZW1zQ29sbGFwc2VkLCBmYWxzZV0sXG4gICAgICBrZXlzOiBhZGRUb1RvcCA/IFtpdGVtS2V5LCAuLi50aGlzLnN0YXRlLmtleXNdIDogWy4uLnRoaXMuc3RhdGUua2V5cywgaXRlbUtleV0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBsaXN0VmFsdWUgPSB2YWx1ZSB8fCBMaXN0KCk7XG4gICAgaWYgKGFkZFRvVG9wKSB7XG4gICAgICBvbkNoYW5nZShsaXN0VmFsdWUudW5zaGlmdChwYXJzZWRWYWx1ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvbkNoYW5nZShsaXN0VmFsdWUucHVzaChwYXJzZWRWYWx1ZSkpO1xuICAgIH1cbiAgfTtcblxuICBwcm9jZXNzQ29udHJvbFJlZiA9IHJlZiA9PiB7XG4gICAgaWYgKCFyZWYpIHJldHVybjtcbiAgICBjb25zdCB7XG4gICAgICB2YWxpZGF0ZSxcbiAgICAgIHByb3BzOiB7IHZhbGlkYXRpb25LZXk6IGtleSB9LFxuICAgIH0gPSByZWY7XG4gICAgdGhpcy52YWxpZGF0aW9ucy5wdXNoKHsga2V5LCB2YWxpZGF0ZSB9KTtcbiAgfTtcblxuICB2YWxpZGF0ZSA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5nZXRWYWx1ZVR5cGUoKSkge1xuICAgICAgdGhpcy52YWxpZGF0aW9ucy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBpdGVtLnZhbGlkYXRlKCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9wcy52YWxpZGF0ZSgpO1xuICAgIH1cbiAgICB0aGlzLnByb3BzLm9uVmFsaWRhdGVPYmplY3QodGhpcy5wcm9wcy5mb3JJRCwgdGhpcy52YWxpZGF0ZVNpemUoKSk7XG4gIH07XG5cbiAgdmFsaWRhdGVTaXplID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgZmllbGQsIHZhbHVlLCB0IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG1pbiA9IGZpZWxkLmdldCgnbWluJyk7XG4gICAgY29uc3QgbWF4ID0gZmllbGQuZ2V0KCdtYXgnKTtcbiAgICBjb25zdCByZXF1aXJlZCA9IGZpZWxkLmdldCgncmVxdWlyZWQnLCB0cnVlKTtcblxuICAgIGlmICghcmVxdWlyZWQgJiYgIXZhbHVlPy5zaXplKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgZXJyb3IgPSB2YWxpZGF0aW9ucy52YWxpZGF0ZU1pbk1heChcbiAgICAgIHQsXG4gICAgICBmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpLFxuICAgICAgdmFsdWUsXG4gICAgICBtaW4sXG4gICAgICBtYXgsXG4gICAgKTtcblxuICAgIHJldHVybiBlcnJvciA/IFtlcnJvcl0gOiBbXTtcbiAgfTtcblxuICAvKipcbiAgICogSW4gY2FzZSB0aGUgYG9uQ2hhbmdlT2JqZWN0YCBmdW5jdGlvbiBpcyBmcm96ZW4gYnkgYSBjaGlsZCB3aWRnZXQgaW1wbGVtZW50YXRpb24sXG4gICAqIGUuZy4gd2hlbiBkZWJvdW5jZWQsIGFsd2F5cyBnZXQgdGhlIGxhdGVzdCBvYmplY3QgdmFsdWUgaW5zdGVhZCBvZiB1c2luZ1xuICAgKiBgdGhpcy5wcm9wcy52YWx1ZWAgZGlyZWN0bHkuXG4gICAqL1xuICBnZXRPYmplY3RWYWx1ZSA9IGlkeCA9PiB0aGlzLnByb3BzLnZhbHVlLmdldChpZHgpIHx8IE1hcCgpO1xuXG4gIGhhbmRsZUNoYW5nZUZvcihpbmRleCkge1xuICAgIHJldHVybiAoZiwgbmV3VmFsdWUsIG5ld01ldGFkYXRhKSA9PiB7XG4gICAgICBjb25zdCB7IHZhbHVlLCBtZXRhZGF0YSwgb25DaGFuZ2UsIGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBmaWVsZC5nZXQoJ25hbWUnKTtcbiAgICAgIGNvbnN0IGxpc3RGaWVsZE9iamVjdFdpZGdldCA9IGZpZWxkLmdldEluKFsnZmllbGQnLCAnd2lkZ2V0J10pID09PSAnb2JqZWN0JztcbiAgICAgIGNvbnN0IHdpdGhOYW1lS2V5ID1cbiAgICAgICAgdGhpcy5nZXRWYWx1ZVR5cGUoKSAhPT0gdmFsdWVUeXBlcy5TSU5HTEUgfHxcbiAgICAgICAgKHRoaXMuZ2V0VmFsdWVUeXBlKCkgPT09IHZhbHVlVHlwZXMuU0lOR0xFICYmIGxpc3RGaWVsZE9iamVjdFdpZGdldCk7XG4gICAgICBjb25zdCBuZXdPYmplY3RWYWx1ZSA9IHdpdGhOYW1lS2V5XG4gICAgICAgID8gdGhpcy5nZXRPYmplY3RWYWx1ZShpbmRleCkuc2V0KGYuZ2V0KCduYW1lJyksIG5ld1ZhbHVlKVxuICAgICAgICA6IG5ld1ZhbHVlO1xuICAgICAgY29uc3QgcGFyc2VkTWV0YWRhdGEgPSB7XG4gICAgICAgIFtjb2xsZWN0aW9uTmFtZV06IE9iamVjdC5hc3NpZ24obWV0YWRhdGEgPyBtZXRhZGF0YS50b0pTKCkgOiB7fSwgbmV3TWV0YWRhdGEgfHwge30pLFxuICAgICAgfTtcbiAgICAgIG9uQ2hhbmdlKHZhbHVlLnNldChpbmRleCwgbmV3T2JqZWN0VmFsdWUpLCBwYXJzZWRNZXRhZGF0YSk7XG4gICAgfTtcbiAgfVxuXG4gIGhhbmRsZVJlbW92ZSA9IChpbmRleCwgZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgeyB2YWx1ZSwgbWV0YWRhdGEsIG9uQ2hhbmdlLCBmaWVsZCwgY2xlYXJGaWVsZEVycm9ycyB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBjb2xsZWN0aW9uTmFtZSA9IGZpZWxkLmdldCgnbmFtZScpO1xuICAgIGNvbnN0IGlzU2luZ2xlRmllbGQgPSB0aGlzLmdldFZhbHVlVHlwZSgpID09PSB2YWx1ZVR5cGVzLlNJTkdMRTtcblxuICAgIGNvbnN0IG1ldGFkYXRhUmVtb3ZlUGF0aCA9IGlzU2luZ2xlRmllbGQgPyB2YWx1ZS5nZXQoaW5kZXgpIDogdmFsdWUuZ2V0KGluZGV4KS52YWx1ZVNlcSgpO1xuICAgIGNvbnN0IHBhcnNlZE1ldGFkYXRhID1cbiAgICAgIG1ldGFkYXRhICYmICFtZXRhZGF0YS5pc0VtcHR5KClcbiAgICAgICAgPyB7IFtjb2xsZWN0aW9uTmFtZV06IG1ldGFkYXRhLnJlbW92ZUluKG1ldGFkYXRhUmVtb3ZlUGF0aCkgfVxuICAgICAgICA6IG1ldGFkYXRhO1xuXG4gICAgaXRlbXNDb2xsYXBzZWQuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAvLyBjbGVhciB2YWxpZGF0aW9uc1xuICAgIHRoaXMudmFsaWRhdGlvbnMgPSBbXTtcblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXNDb2xsYXBzZWQ6IFsuLi5pdGVtc0NvbGxhcHNlZF0sXG4gICAgICBrZXlzOiBBcnJheS5mcm9tKHsgbGVuZ3RoOiB2YWx1ZS5zaXplIC0gMSB9LCAoKSA9PiB1dWlkKCkpLFxuICAgIH0pO1xuXG4gICAgb25DaGFuZ2UodmFsdWUucmVtb3ZlKGluZGV4KSwgcGFyc2VkTWV0YWRhdGEpO1xuICAgIGNsZWFyRmllbGRFcnJvcnMoKTtcbiAgfTtcblxuICBoYW5kbGVJdGVtQ29sbGFwc2VUb2dnbGUgPSAoaW5kZXgsIGV2ZW50KSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IG5ld0l0ZW1zQ29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWQubWFwKChjb2xsYXBzZWQsIGl0ZW1JbmRleCkgPT4ge1xuICAgICAgaWYgKGluZGV4ID09PSBpdGVtSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuICFjb2xsYXBzZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29sbGFwc2VkO1xuICAgIH0pO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXNDb2xsYXBzZWQ6IG5ld0l0ZW1zQ29sbGFwc2VkLFxuICAgIH0pO1xuICB9O1xuXG4gIGhhbmRsZUNvbGxhcHNlQWxsVG9nZ2xlID0gZSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHsgdmFsdWUsIGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQsIGxpc3RDb2xsYXBzZWQgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgbWluaW1pemVDb2xsYXBzZWRJdGVtcyA9IGZpZWxkLmdldCgnbWluaW1pemVfY29sbGFwc2VkJywgZmFsc2UpO1xuICAgIGNvbnN0IGxpc3RDb2xsYXBzZWRCeURlZmF1bHQgPSBmaWVsZC5nZXQoJ2NvbGxhcHNlZCcsIHRydWUpO1xuICAgIGNvbnN0IGFsbEl0ZW1zQ29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWQuZXZlcnkodmFsID0+IHZhbCA9PT0gdHJ1ZSk7XG5cbiAgICBpZiAobWluaW1pemVDb2xsYXBzZWRJdGVtcykge1xuICAgICAgbGV0IHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkO1xuICAgICAgLy8gT25seSBhbGxvdyBjb2xsYXBzaW5nIGFsbCBpdGVtcyBpbiB0aGlzIG1vZGUgYnV0IG5vdCBvcGVuaW5nIGFsbCBhdCBvbmNlXG4gICAgICBpZiAoIWxpc3RDb2xsYXBzZWQgfHwgIWxpc3RDb2xsYXBzZWRCeURlZmF1bHQpIHtcbiAgICAgICAgdXBkYXRlZEl0ZW1zQ29sbGFwc2VkID0gQXJyYXkodmFsdWUuc2l6ZSkuZmlsbCghbGlzdENvbGxhcHNlZCk7XG4gICAgICB9XG4gICAgICB0aGlzLnNldFN0YXRlKHsgbGlzdENvbGxhcHNlZDogIWxpc3RDb2xsYXBzZWQsIGl0ZW1zQ29sbGFwc2VkOiB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBpdGVtc0NvbGxhcHNlZDogQXJyYXkodmFsdWUuc2l6ZSkuZmlsbCghYWxsSXRlbXNDb2xsYXBzZWQpIH0pO1xuICAgIH1cbiAgfTtcblxuICBvYmplY3RMYWJlbChpdGVtKSB7XG4gICAgY29uc3QgeyBmaWVsZCwgZW50cnkgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgdmFsdWVUeXBlID0gdGhpcy5nZXRWYWx1ZVR5cGUoKTtcbiAgICBzd2l0Y2ggKHZhbHVlVHlwZSkge1xuICAgICAgY2FzZSB2YWx1ZVR5cGVzLk1JWEVEOiB7XG4gICAgICAgIGlmICghdmFsaWRhdGVJdGVtKGZpZWxkLCBpdGVtKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpdGVtVHlwZSA9IGdldFR5cGVkRmllbGRGb3JWYWx1ZShmaWVsZCwgaXRlbSk7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gaXRlbVR5cGUuZ2V0KCdsYWJlbCcsIGl0ZW1UeXBlLmdldCgnbmFtZScpKTtcbiAgICAgICAgLy8gZWFjaCB0eXBlIGNhbiBoYXZlIGl0cyBvd24gc3VtbWFyeSwgYnV0IGRlZmF1bHQgdG8gdGhlIGxpc3Qgc3VtbWFyeSBpZiBleGlzdHNcbiAgICAgICAgY29uc3Qgc3VtbWFyeSA9IGl0ZW1UeXBlLmdldCgnc3VtbWFyeScsIGZpZWxkLmdldCgnc3VtbWFyeScpKTtcbiAgICAgICAgY29uc3QgbGFiZWxSZXR1cm4gPSBzdW1tYXJ5ID8gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgbGFiZWwsIGl0ZW0pIDogbGFiZWw7XG4gICAgICAgIHJldHVybiBsYWJlbFJldHVybjtcbiAgICAgIH1cbiAgICAgIGNhc2UgdmFsdWVUeXBlcy5TSU5HTEU6IHtcbiAgICAgICAgY29uc3Qgc2luZ2xlRmllbGQgPSBmaWVsZC5nZXQoJ2ZpZWxkJyk7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gc2luZ2xlRmllbGQuZ2V0KCdsYWJlbCcsIHNpbmdsZUZpZWxkLmdldCgnbmFtZScpKTtcbiAgICAgICAgY29uc3Qgc3VtbWFyeSA9IGZpZWxkLmdldCgnc3VtbWFyeScpO1xuICAgICAgICBjb25zdCBkYXRhID0gZnJvbUpTKHsgW3NpbmdsZUZpZWxkLmdldCgnbmFtZScpXTogaXRlbSB9KTtcbiAgICAgICAgY29uc3QgbGFiZWxSZXR1cm4gPSBzdW1tYXJ5ID8gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgbGFiZWwsIGRhdGEpIDogbGFiZWw7XG4gICAgICAgIHJldHVybiBsYWJlbFJldHVybjtcbiAgICAgIH1cbiAgICAgIGNhc2UgdmFsdWVUeXBlcy5NVUxUSVBMRToge1xuICAgICAgICBpZiAoIXZhbGlkYXRlSXRlbShmaWVsZCwgaXRlbSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbXVsdGlGaWVsZHMgPSBmaWVsZC5nZXQoJ2ZpZWxkcycpO1xuICAgICAgICBjb25zdCBsYWJlbEZpZWxkID0gbXVsdGlGaWVsZHMgJiYgbXVsdGlGaWVsZHMuZmlyc3QoKTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpdGVtLmdldChsYWJlbEZpZWxkLmdldCgnbmFtZScpKTtcbiAgICAgICAgY29uc3Qgc3VtbWFyeSA9IGZpZWxkLmdldCgnc3VtbWFyeScpO1xuICAgICAgICBjb25zdCBsYWJlbFJldHVybiA9IHN1bW1hcnkgPyBoYW5kbGVTdW1tYXJ5KHN1bW1hcnksIGVudHJ5LCB2YWx1ZSwgaXRlbSkgOiB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIChsYWJlbFJldHVybiB8fCBgTm8gJHtsYWJlbEZpZWxkLmdldCgnbmFtZScpfWApLnRvU3RyaW5nKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIG9uU29ydEVuZCA9ICh7IG9sZEluZGV4LCBuZXdJbmRleCB9KSA9PiB7XG4gICAgY29uc3QgeyB2YWx1ZSwgY2xlYXJGaWVsZEVycm9ycyB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkLCBrZXlzIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgLy8gVXBkYXRlIHZhbHVlXG4gICAgY29uc3QgaXRlbSA9IHZhbHVlLmdldChvbGRJbmRleCk7XG4gICAgY29uc3QgbmV3VmFsdWUgPSB2YWx1ZS5kZWxldGUob2xkSW5kZXgpLmluc2VydChuZXdJbmRleCwgaXRlbSk7XG4gICAgdGhpcy5wcm9wcy5vbkNoYW5nZShuZXdWYWx1ZSk7XG5cbiAgICAvLyBVcGRhdGUgY29sbGFwc2luZ1xuICAgIGNvbnN0IGNvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkW29sZEluZGV4XTtcbiAgICBpdGVtc0NvbGxhcHNlZC5zcGxpY2Uob2xkSW5kZXgsIDEpO1xuICAgIGNvbnN0IHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCA9IFsuLi5pdGVtc0NvbGxhcHNlZF07XG4gICAgdXBkYXRlZEl0ZW1zQ29sbGFwc2VkLnNwbGljZShuZXdJbmRleCwgMCwgY29sbGFwc2VkKTtcblxuICAgIC8vIFJlc2V0IGl0ZW0gdG8gZW5zdXJlIHVwZGF0ZWQgc3RhdGVcbiAgICBjb25zdCB1cGRhdGVkS2V5cyA9IGtleXMubWFwKChrZXksIGtleUluZGV4KSA9PiB7XG4gICAgICBpZiAoa2V5SW5kZXggPT09IG9sZEluZGV4IHx8IGtleUluZGV4ID09PSBuZXdJbmRleCkge1xuICAgICAgICByZXR1cm4gdXVpZCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGtleTtcbiAgICB9KTtcbiAgICB0aGlzLnNldFN0YXRlKHsgaXRlbXNDb2xsYXBzZWQ6IHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCwga2V5czogdXBkYXRlZEtleXMgfSk7XG5cbiAgICAvL2NsZWFyIGVycm9yIGZpZWxkcyBhbmQgcmVtb3ZlIG9sZCB2YWxpZGF0aW9uc1xuICAgIGNsZWFyRmllbGRFcnJvcnMoKTtcbiAgICB0aGlzLnZhbGlkYXRpb25zID0gdGhpcy52YWxpZGF0aW9ucy5maWx0ZXIoaXRlbSA9PiB1cGRhdGVkS2V5cy5pbmNsdWRlcyhpdGVtLmtleSkpO1xuICB9O1xuXG4gIGhhc0Vycm9yID0gaW5kZXggPT4ge1xuICAgIGNvbnN0IHsgZmllbGRzRXJyb3JzIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChmaWVsZHNFcnJvcnMgJiYgZmllbGRzRXJyb3JzLnNpemUgPiAwKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhmaWVsZHNFcnJvcnMudG9KUygpKS5zb21lKGFyciA9PlxuICAgICAgICBhcnIuc29tZShlcnIgPT4gZXJyLnBhcmVudElkcyAmJiBlcnIucGFyZW50SWRzLmluY2x1ZGVzKHRoaXMuc3RhdGUua2V5c1tpbmRleF0pKSxcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9kaXNwbGF5LW5hbWVcbiAgcmVuZGVySXRlbSA9IChpdGVtLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGNsYXNzTmFtZVdyYXBwZXIsXG4gICAgICBlZGl0b3JDb250cm9sLFxuICAgICAgb25WYWxpZGF0ZU9iamVjdCxcbiAgICAgIG1ldGFkYXRhLFxuICAgICAgY2xlYXJGaWVsZEVycm9ycyxcbiAgICAgIGZpZWxkc0Vycm9ycyxcbiAgICAgIGNvbnRyb2xSZWYsXG4gICAgICByZXNvbHZlV2lkZ2V0LFxuICAgICAgcGFyZW50SWRzLFxuICAgICAgZm9ySUQsXG4gICAgICB0LFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCwga2V5cyB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBjb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZFtpbmRleF07XG4gICAgY29uc3Qga2V5ID0ga2V5c1tpbmRleF07XG4gICAgbGV0IGZpZWxkID0gdGhpcy5wcm9wcy5maWVsZDtcbiAgICBjb25zdCBoYXNFcnJvciA9IHRoaXMuaGFzRXJyb3IoaW5kZXgpO1xuICAgIGNvbnN0IGlzVmFyaWFibGVUeXBlc0xpc3QgPSB0aGlzLmdldFZhbHVlVHlwZSgpID09PSB2YWx1ZVR5cGVzLk1JWEVEO1xuICAgIGlmIChpc1ZhcmlhYmxlVHlwZXNMaXN0KSB7XG4gICAgICBmaWVsZCA9IGdldFR5cGVkRmllbGRGb3JWYWx1ZShmaWVsZCwgaXRlbSk7XG4gICAgICBpZiAoIWZpZWxkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlckVycm9uZW91c1R5cGVkSXRlbShpbmRleCwgaXRlbSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8U29ydGFibGVMaXN0SXRlbVxuICAgICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBjb2xsYXBzZWQgJiYgc3R5bGVzLmxpc3RDb250cm9sSXRlbUNvbGxhcHNlZF19XG4gICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICA+XG4gICAgICAgIHtpc1ZhcmlhYmxlVHlwZXNMaXN0ICYmIChcbiAgICAgICAgICA8TGFiZWxDb21wb25lbnRcbiAgICAgICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgICAgIGlzQWN0aXZlPXtmYWxzZX1cbiAgICAgICAgICAgIGhhc0Vycm9ycz17aGFzRXJyb3J9XG4gICAgICAgICAgICB1bmlxdWVGaWVsZElkPXt0aGlzLnVuaXF1ZUZpZWxkSWR9XG4gICAgICAgICAgICBpc0ZpZWxkT3B0aW9uYWw9e2ZpZWxkLmdldCgncmVxdWlyZWQnKSA9PT0gZmFsc2V9XG4gICAgICAgICAgICB0PXt0fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIDxTdHlsZWRMaXN0SXRlbVRvcEJhclxuICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICAgIG9uQ29sbGFwc2VUb2dnbGU9e3BhcnRpYWwodGhpcy5oYW5kbGVJdGVtQ29sbGFwc2VUb2dnbGUsIGluZGV4KX1cbiAgICAgICAgICBvblJlbW92ZT17cGFydGlhbCh0aGlzLmhhbmRsZVJlbW92ZSwgaW5kZXgpfVxuICAgICAgICAgIGRyYWdIYW5kbGVIT0M9e1NvcnRhYmxlSGFuZGxlfVxuICAgICAgICAgIGRhdGEtdGVzdGlkPXtgc3R5bGVkLWxpc3QtaXRlbS10b3AtYmFyLSR7a2V5fWB9XG4gICAgICAgIC8+XG4gICAgICAgIDxOZXN0ZWRPYmplY3RMYWJlbCBjb2xsYXBzZWQ9e2NvbGxhcHNlZH0gZXJyb3I9e2hhc0Vycm9yfT5cbiAgICAgICAgICB7dGhpcy5vYmplY3RMYWJlbChpdGVtKX1cbiAgICAgICAgPC9OZXN0ZWRPYmplY3RMYWJlbD5cbiAgICAgICAgPENsYXNzTmFtZXM+XG4gICAgICAgICAgeyh7IGNzcywgY3ggfSkgPT4gKFxuICAgICAgICAgICAgPE9iamVjdENvbnRyb2xcbiAgICAgICAgICAgICAgY2xhc3NOYW1lV3JhcHBlcj17Y3goY2xhc3NOYW1lV3JhcHBlciwge1xuICAgICAgICAgICAgICAgIFtjc3NgXG4gICAgICAgICAgICAgICAgICAke3N0eWxlU3RyaW5ncy5jb2xsYXBzZWRPYmplY3RDb250cm9sfTtcbiAgICAgICAgICAgICAgICBgXTogY29sbGFwc2VkLFxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgdmFsdWU9e2l0ZW19XG4gICAgICAgICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgICAgICAgb25DaGFuZ2VPYmplY3Q9e3RoaXMuaGFuZGxlQ2hhbmdlRm9yKGluZGV4KX1cbiAgICAgICAgICAgICAgZWRpdG9yQ29udHJvbD17ZWRpdG9yQ29udHJvbH1cbiAgICAgICAgICAgICAgcmVzb2x2ZVdpZGdldD17cmVzb2x2ZVdpZGdldH1cbiAgICAgICAgICAgICAgbWV0YWRhdGE9e21ldGFkYXRhfVxuICAgICAgICAgICAgICBmb3JMaXN0XG4gICAgICAgICAgICAgIG9uVmFsaWRhdGVPYmplY3Q9e29uVmFsaWRhdGVPYmplY3R9XG4gICAgICAgICAgICAgIGNsZWFyRmllbGRFcnJvcnM9e2NsZWFyRmllbGRFcnJvcnN9XG4gICAgICAgICAgICAgIGZpZWxkc0Vycm9ycz17ZmllbGRzRXJyb3JzfVxuICAgICAgICAgICAgICByZWY9e3RoaXMucHJvY2Vzc0NvbnRyb2xSZWZ9XG4gICAgICAgICAgICAgIGNvbnRyb2xSZWY9e2NvbnRyb2xSZWZ9XG4gICAgICAgICAgICAgIHZhbGlkYXRpb25LZXk9e2tleX1cbiAgICAgICAgICAgICAgY29sbGFwc2VkPXtjb2xsYXBzZWR9XG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgb2JqZWN0LWNvbnRyb2wtJHtrZXl9YH1cbiAgICAgICAgICAgICAgaGFzRXJyb3I9e2hhc0Vycm9yfVxuICAgICAgICAgICAgICBwYXJlbnRJZHM9e1suLi5wYXJlbnRJZHMsIGZvcklELCBrZXldfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L0NsYXNzTmFtZXM+XG4gICAgICA8L1NvcnRhYmxlTGlzdEl0ZW0+XG4gICAgKTtcbiAgfTtcblxuICByZW5kZXJFcnJvbmVvdXNUeXBlZEl0ZW0oaW5kZXgsIGl0ZW0pIHtcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMucHJvcHMuZmllbGQ7XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZ2V0RXJyb3JNZXNzYWdlRm9yVHlwZWRGaWVsZEFuZFZhbHVlKGZpZWxkLCBpdGVtKTtcbiAgICBjb25zdCBrZXkgPSBgaXRlbS0ke2luZGV4fWA7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTb3J0YWJsZUxpc3RJdGVtXG4gICAgICAgIGNzcz17W3N0eWxlcy5saXN0Q29udHJvbEl0ZW0sIHN0eWxlcy5saXN0Q29udHJvbEl0ZW1Db2xsYXBzZWRdfVxuICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAgIGtleT17a2V5fVxuICAgICAgPlxuICAgICAgICA8U3R5bGVkTGlzdEl0ZW1Ub3BCYXJcbiAgICAgICAgICBvbkNvbGxhcHNlVG9nZ2xlPXtudWxsfVxuICAgICAgICAgIG9uUmVtb3ZlPXtwYXJ0aWFsKHRoaXMuaGFuZGxlUmVtb3ZlLCBpbmRleCwga2V5KX1cbiAgICAgICAgICBkcmFnSGFuZGxlSE9DPXtTb3J0YWJsZUhhbmRsZX1cbiAgICAgICAgLz5cbiAgICAgICAgPE5lc3RlZE9iamVjdExhYmVsIGNvbGxhcHNlZD17dHJ1ZX0gZXJyb3I9e3RydWV9PlxuICAgICAgICAgIHtlcnJvck1lc3NhZ2V9XG4gICAgICAgIDwvTmVzdGVkT2JqZWN0TGFiZWw+XG4gICAgICA8L1NvcnRhYmxlTGlzdEl0ZW0+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlckxpc3RDb250cm9sKCkge1xuICAgIGNvbnN0IHsgdmFsdWUsIGZvcklELCBmaWVsZCwgY2xhc3NOYW1lV3JhcHBlciwgdCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkLCBsaXN0Q29sbGFwc2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IGl0ZW1zID0gdmFsdWUgfHwgTGlzdCgpO1xuICAgIGNvbnN0IGxhYmVsID0gZmllbGQuZ2V0KCdsYWJlbCcsIGZpZWxkLmdldCgnbmFtZScpKTtcbiAgICBjb25zdCBsYWJlbFNpbmd1bGFyID0gZmllbGQuZ2V0KCdsYWJlbF9zaW5ndWxhcicpIHx8IGZpZWxkLmdldCgnbGFiZWwnLCBmaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgY29uc3QgbGlzdExhYmVsID0gaXRlbXMuc2l6ZSA9PT0gMSA/IGxhYmVsU2luZ3VsYXIudG9Mb3dlckNhc2UoKSA6IGxhYmVsLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgbWluaW1pemVDb2xsYXBzZWRJdGVtcyA9IGZpZWxkLmdldCgnbWluaW1pemVfY29sbGFwc2VkJywgZmFsc2UpO1xuICAgIGNvbnN0IGFsbEl0ZW1zQ29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWQuZXZlcnkodmFsID0+IHZhbCA9PT0gdHJ1ZSk7XG4gICAgY29uc3Qgc2VsZkNvbGxhcHNlZCA9IGFsbEl0ZW1zQ29sbGFwc2VkICYmIChsaXN0Q29sbGFwc2VkIHx8ICFtaW5pbWl6ZUNvbGxhcHNlZEl0ZW1zKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8Q2xhc3NOYW1lcz5cbiAgICAgICAgeyh7IGN4LCBjc3MgfSkgPT4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGlkPXtmb3JJRH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goXG4gICAgICAgICAgICAgIGNsYXNzTmFtZVdyYXBwZXIsXG4gICAgICAgICAgICAgIGNzc2BcbiAgICAgICAgICAgICAgICAke3N0eWxlU3RyaW5ncy5vYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXJ9XG4gICAgICAgICAgICAgIGAsXG4gICAgICAgICAgICApfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxPYmplY3RXaWRnZXRUb3BCYXJcbiAgICAgICAgICAgICAgYWxsb3dBZGQ9e2ZpZWxkLmdldCgnYWxsb3dfYWRkJywgdHJ1ZSl9XG4gICAgICAgICAgICAgIG9uQWRkPXt0aGlzLmhhbmRsZUFkZH1cbiAgICAgICAgICAgICAgdHlwZXM9e2ZpZWxkLmdldChUWVBFU19LRVksIG51bGwpfVxuICAgICAgICAgICAgICBvbkFkZFR5cGU9e3R5cGUgPT4gdGhpcy5oYW5kbGVBZGRUeXBlKHR5cGUsIHJlc29sdmVGaWVsZEtleVR5cGUoZmllbGQpKX1cbiAgICAgICAgICAgICAgaGVhZGluZz17YCR7aXRlbXMuc2l6ZX0gJHtsaXN0TGFiZWx9YH1cbiAgICAgICAgICAgICAgbGFiZWw9e2xhYmVsU2luZ3VsYXIudG9Mb3dlckNhc2UoKX1cbiAgICAgICAgICAgICAgb25Db2xsYXBzZVRvZ2dsZT17dGhpcy5oYW5kbGVDb2xsYXBzZUFsbFRvZ2dsZX1cbiAgICAgICAgICAgICAgY29sbGFwc2VkPXtzZWxmQ29sbGFwc2VkfVxuICAgICAgICAgICAgICB0PXt0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHsoIXNlbGZDb2xsYXBzZWQgfHwgIW1pbmltaXplQ29sbGFwc2VkSXRlbXMpICYmIChcbiAgICAgICAgICAgICAgPFNvcnRhYmxlTGlzdFxuICAgICAgICAgICAgICAgIGl0ZW1zPXtpdGVtc31cbiAgICAgICAgICAgICAgICByZW5kZXJJdGVtPXt0aGlzLnJlbmRlckl0ZW19XG4gICAgICAgICAgICAgICAgb25Tb3J0RW5kPXt0aGlzLm9uU29ydEVuZH1cbiAgICAgICAgICAgICAgICB1c2VEcmFnSGFuZGxlXG4gICAgICAgICAgICAgICAgbG9ja0F4aXM9XCJ5XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L0NsYXNzTmFtZXM+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlcklucHV0KCkge1xuICAgIGNvbnN0IHsgZm9ySUQsIGNsYXNzTmFtZVdyYXBwZXIgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIHJldHVybiAoXG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBpZD17Zm9ySUR9XG4gICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICBvbkZvY3VzPXt0aGlzLmhhbmRsZUZvY3VzfVxuICAgICAgICBvbkJsdXI9e3RoaXMuaGFuZGxlQmx1cn1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVXcmFwcGVyfVxuICAgICAgLz5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmdldFZhbHVlVHlwZSgpICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJMaXN0Q29udHJvbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJJbnB1dCgpO1xuICAgIH1cbiAgfVxufVxuIl19 */");
|
|
32
|
+
const SortableListItem = (0, _reactSortableHoc.SortableElement)(ListItem);
|
|
33
|
+
const StyledListItemTopBar = ( /*#__PURE__*/0, _styledBase.default)(_decapCmsUiDefault.ListItemTopBar, {
|
|
34
|
+
target: "e11zrb3c1",
|
|
35
|
+
label: "StyledListItemTopBar"
|
|
36
|
+
})("background-color:", _decapCmsUiDefault.colors.textFieldBorder, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFnQ21EIiwiZmlsZSI6Ii4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IEltbXV0YWJsZVByb3BUeXBlcyBmcm9tICdyZWFjdC1pbW11dGFibGUtcHJvcHR5cGVzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCB7IGNzcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL2NvcmUnO1xuaW1wb3J0IHsgTGlzdCwgTWFwLCBmcm9tSlMgfSBmcm9tICdpbW11dGFibGUnO1xuaW1wb3J0IHsgcGFydGlhbCwgaXNFbXB0eSwgdW5pcXVlSWQgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHV1aWQgZnJvbSAndXVpZC92NCc7XG5pbXBvcnQgeyBTb3J0YWJsZUNvbnRhaW5lciwgU29ydGFibGVFbGVtZW50LCBTb3J0YWJsZUhhbmRsZSB9IGZyb20gJ3JlYWN0LXNvcnRhYmxlLWhvYyc7XG5pbXBvcnQgRGVjYXBDbXNXaWRnZXRPYmplY3QgZnJvbSAnZGVjYXAtY21zLXdpZGdldC1vYmplY3QnO1xuaW1wb3J0IHtcbiAgTGlzdEl0ZW1Ub3BCYXIsXG4gIE9iamVjdFdpZGdldFRvcEJhcixcbiAgY29sb3JzLFxuICBsZW5ndGhzLFxuICBGaWVsZExhYmVsLFxufSBmcm9tICdkZWNhcC1jbXMtdWktZGVmYXVsdCc7XG5pbXBvcnQgeyBzdHJpbmdUZW1wbGF0ZSwgdmFsaWRhdGlvbnMgfSBmcm9tICdkZWNhcC1jbXMtbGliLXdpZGdldHMnO1xuXG5pbXBvcnQge1xuICBUWVBFU19LRVksXG4gIGdldFR5cGVkRmllbGRGb3JWYWx1ZSxcbiAgcmVzb2x2ZUZpZWxkS2V5VHlwZSxcbiAgZ2V0RXJyb3JNZXNzYWdlRm9yVHlwZWRGaWVsZEFuZFZhbHVlLFxufSBmcm9tICcuL3R5cGVkTGlzdEhlbHBlcnMnO1xuXG5jb25zdCBPYmplY3RDb250cm9sID0gRGVjYXBDbXNXaWRnZXRPYmplY3QuY29udHJvbENvbXBvbmVudDtcblxuY29uc3QgTGlzdEl0ZW0gPSBzdHlsZWQuZGl2KCk7XG5cbmNvbnN0IFNvcnRhYmxlTGlzdEl0ZW0gPSBTb3J0YWJsZUVsZW1lbnQoTGlzdEl0ZW0pO1xuXG5jb25zdCBTdHlsZWRMaXN0SXRlbVRvcEJhciA9IHN0eWxlZChMaXN0SXRlbVRvcEJhcilgXG4gIGJhY2tncm91bmQtY29sb3I6ICR7Y29sb3JzLnRleHRGaWVsZEJvcmRlcn07XG5gO1xuXG5jb25zdCBOZXN0ZWRPYmplY3RMYWJlbCA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6ICR7cHJvcHMgPT4gKHByb3BzLmNvbGxhcHNlZCA/ICdibG9jaycgOiAnbm9uZScpfTtcbiAgYm9yZGVyLXRvcDogMDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gKHByb3BzLmVycm9yID8gY29sb3JzLmVycm9yVGV4dCA6ICdpbmhlcml0Jyl9O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAke2NvbG9ycy50ZXh0RmllbGRCb3JkZXJ9O1xuICBwYWRkaW5nOiAxM3B4O1xuICBib3JkZXItcmFkaXVzOiAwIDAgJHtsZW5ndGhzLmJvcmRlclJhZGl1c30gJHtsZW5ndGhzLmJvcmRlclJhZGl1c307XG5gO1xuXG5jb25zdCBzdHlsZVN0cmluZ3MgPSB7XG4gIGNvbGxhcHNlZE9iamVjdENvbnRyb2w6IGBcbiAgICBkaXNwbGF5OiBub25lO1xuICBgLFxuICBvYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXI6IGBcbiAgICBwYWRkaW5nOiAke2xlbmd0aHMub2JqZWN0V2lkZ2V0VG9wQmFyQ29udGFpbmVyUGFkZGluZ307XG4gIGAsXG59O1xuXG5jb25zdCBzdHlsZXMgPSB7XG4gIGxpc3RDb250cm9sSXRlbTogY3NzYFxuICAgIG1hcmdpbi10b3A6IDE4cHg7XG5cbiAgICAmOmZpcnN0LW9mLXR5cGUge1xuICAgICAgbWFyZ2luLXRvcDogMjZweDtcbiAgICB9XG4gIGAsXG4gIGxpc3RDb250cm9sSXRlbUNvbGxhcHNlZDogY3NzYFxuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICBgLFxufTtcblxuY29uc3QgU29ydGFibGVMaXN0ID0gU29ydGFibGVDb250YWluZXIoKHsgaXRlbXMsIHJlbmRlckl0ZW0gfSkgPT4ge1xuICByZXR1cm4gPGRpdj57aXRlbXMubWFwKHJlbmRlckl0ZW0pfTwvZGl2Pjtcbn0pO1xuXG5jb25zdCB2YWx1ZVR5cGVzID0ge1xuICBTSU5HTEU6ICdTSU5HTEUnLFxuICBNVUxUSVBMRTogJ01VTFRJUExFJyxcbiAgTUlYRUQ6ICdNSVhFRCcsXG59O1xuXG5mdW5jdGlvbiBoYW5kbGVTdW1tYXJ5KHN1bW1hcnksIGVudHJ5LCBsYWJlbCwgaXRlbSkge1xuICBjb25zdCBkYXRhID0gc3RyaW5nVGVtcGxhdGUuYWRkRmlsZVRlbXBsYXRlRmllbGRzKFxuICAgIGVudHJ5LmdldCgncGF0aCcpLFxuICAgIGl0ZW0uc2V0KCdmaWVsZHMubGFiZWwnLCBsYWJlbCksXG4gICk7XG4gIHJldHVybiBzdHJpbmdUZW1wbGF0ZS5jb21waWxlU3RyaW5nVGVtcGxhdGUoc3VtbWFyeSwgbnVsbCwgJycsIGRhdGEpO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUl0ZW0oZmllbGQsIGl0ZW0pIHtcbiAgaWYgKCFNYXAuaXNNYXAoaXRlbSkpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgJyR7ZmllbGQuZ2V0KCduYW1lJyl9JyBmaWVsZCBpdGVtIHZhbHVlIHZhbHVlIHNob3VsZCBiZSBhIG1hcCBidXQgaXMgYSAnJHt0eXBlb2YgaXRlbX0nYCxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gTGFiZWxDb21wb25lbnQoeyBmaWVsZCwgaXNBY3RpdmUsIGhhc0Vycm9ycywgdW5pcXVlRmllbGRJZCwgaXNGaWVsZE9wdGlvbmFsLCB0IH0pIHtcbiAgY29uc3QgbGFiZWwgPSBgJHtmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpfWA7XG4gIHJldHVybiAoXG4gICAgPEZpZWxkTGFiZWwgaXNBY3RpdmU9e2lzQWN0aXZlfSBoYXNFcnJvcnM9e2hhc0Vycm9yc30gaHRtbEZvcj17dW5pcXVlRmllbGRJZH0+XG4gICAgICB7bGFiZWx9IHtgJHtpc0ZpZWxkT3B0aW9uYWwgPyBgICgke3QoJ2VkaXRvci5lZGl0b3JDb250cm9sLmZpZWxkLm9wdGlvbmFsJyl9KWAgOiAnJ31gfVxuICAgIDwvRmllbGRMYWJlbD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlzdENvbnRyb2wgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICB2YWxpZGF0aW9ucyA9IFtdO1xuXG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgbWV0YWRhdGE6IEltbXV0YWJsZVByb3BUeXBlcy5tYXAsXG4gICAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25DaGFuZ2VPYmplY3Q6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25WYWxpZGF0ZU9iamVjdDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICB2YWxpZGF0ZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICB2YWx1ZTogSW1tdXRhYmxlUHJvcFR5cGVzLmxpc3QsXG4gICAgZmllbGQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgZm9ySUQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY29udHJvbFJlZjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgbWVkaWFQYXRoczogSW1tdXRhYmxlUHJvcFR5cGVzLm1hcC5pc1JlcXVpcmVkLFxuICAgIGdldEFzc2V0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uT3Blbk1lZGlhTGlicmFyeTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvbkFkZEFzc2V0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uUmVtb3ZlSW5zZXJ0ZWRNZWRpYTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBjbGFzc05hbWVXcmFwcGVyOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgc2V0QWN0aXZlU3R5bGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgc2V0SW5hY3RpdmVTdHlsZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBlZGl0b3JDb250cm9sOiBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZCxcbiAgICByZXNvbHZlV2lkZ2V0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGNsZWFyRmllbGRFcnJvcnM6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgZmllbGRzRXJyb3JzOiBJbW11dGFibGVQcm9wVHlwZXMubWFwLmlzUmVxdWlyZWQsXG4gICAgZW50cnk6IEltbXV0YWJsZVByb3BUeXBlcy5tYXAuaXNSZXF1aXJlZCxcbiAgICB0OiBQcm9wVHlwZXMuZnVuYyxcbiAgfTtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIHZhbHVlOiBMaXN0KCksXG4gICAgcGFyZW50SWRzOiBbXSxcbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICBjb25zdCB7IGZpZWxkLCB2YWx1ZSB9ID0gcHJvcHM7XG4gICAgY29uc3QgbGlzdENvbGxhcHNlZCA9IGZpZWxkLmdldCgnY29sbGFwc2VkJywgdHJ1ZSk7XG4gICAgY29uc3QgaXRlbXNDb2xsYXBzZWQgPSAodmFsdWUgJiYgQXJyYXkodmFsdWUuc2l6ZSkuZmlsbChsaXN0Q29sbGFwc2VkKSkgfHwgW107XG4gICAgY29uc3Qga2V5cyA9ICh2YWx1ZSAmJiBBcnJheS5mcm9tKHsgbGVuZ3RoOiB2YWx1ZS5zaXplIH0sICgpID0+IHV1aWQoKSkpIHx8IFtdO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGxpc3RDb2xsYXBzZWQsXG4gICAgICBpdGVtc0NvbGxhcHNlZCxcbiAgICAgIHZhbHVlOiB0aGlzLnZhbHVlVG9TdHJpbmcodmFsdWUpLFxuICAgICAga2V5cyxcbiAgICB9O1xuICB9XG5cbiAgdmFsdWVUb1N0cmluZyA9IHZhbHVlID0+IHtcbiAgICBsZXQgc3RyaW5nVmFsdWU7XG4gICAgaWYgKExpc3QuaXNMaXN0KHZhbHVlKSB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgc3RyaW5nVmFsdWUgPSB2YWx1ZS5qb2luKCcsJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYEV4cGVjdGVkIExpc3QgdmFsdWUgdG8gYmUgYW4gYXJyYXkgYnV0IHJlY2VpdmVkICcke3ZhbHVlfScgd2l0aCB0eXBlIG9mICcke3R5cGVvZiB2YWx1ZX0nLiBQbGVhc2UgY2hlY2sgdGhlIHZhbHVlIHByb3ZpZGVkIHRvIHRoZSAnJHt0aGlzLnByb3BzLmZpZWxkLmdldChcbiAgICAgICAgICAnbmFtZScsXG4gICAgICAgICl9JyBmaWVsZGAsXG4gICAgICApO1xuICAgICAgc3RyaW5nVmFsdWUgPSBTdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gc3RyaW5nVmFsdWUucmVwbGFjZSgvLChbXlxcc118JCkvZywgJywgJDEnKTtcbiAgfTtcblxuICBnZXRWYWx1ZVR5cGUgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoZmllbGQuZ2V0KCdmaWVsZHMnKSkge1xuICAgICAgcmV0dXJuIHZhbHVlVHlwZXMuTVVMVElQTEU7XG4gICAgfSBlbHNlIGlmIChmaWVsZC5nZXQoJ2ZpZWxkJykpIHtcbiAgICAgIHJldHVybiB2YWx1ZVR5cGVzLlNJTkdMRTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkLmdldChUWVBFU19LRVkpKSB7XG4gICAgICByZXR1cm4gdmFsdWVUeXBlcy5NSVhFRDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9O1xuXG4gIHVuaXF1ZUZpZWxkSWQgPSB1bmlxdWVJZChgJHt0aGlzLnByb3BzLmZpZWxkLmdldCgnbmFtZScpfS1maWVsZC1gKTtcbiAgLyoqXG4gICAqIEFsd2F5cyB1cGRhdGUgc28gdGhhdCBlYWNoIG5lc3RlZCB3aWRnZXQgaGFzIHRoZSBvcHRpb24gdG8gdXBkYXRlLiBUaGlzIGlzXG4gICAqIHJlcXVpcmVkIGJlY2F1c2UgQ29udHJvbEhPQyBwcm92aWRlcyBhIGRlZmF1bHQgYHNob3VsZENvbXBvbmVudFVwZGF0ZWBcbiAgICogd2hpY2ggb25seSB1cGRhdGVzIGlmIHRoZSB2YWx1ZSBjaGFuZ2VzLCBidXQgZXZlcnkgd2lkZ2V0IG11c3QgYmUgYWxsb3dlZFxuICAgKiB0byBvdmVycmlkZSB0aGlzLlxuICAgKi9cbiAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaGFuZGxlQ2hhbmdlID0gZSA9PiB7XG4gICAgY29uc3QgeyBvbkNoYW5nZSB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMuc3RhdGUudmFsdWU7XG4gICAgY29uc3QgbmV3VmFsdWUgPSBlLnRhcmdldC52YWx1ZS50cmltKCk7XG4gICAgY29uc3QgbGlzdFZhbHVlID0gbmV3VmFsdWUgPyBuZXdWYWx1ZS5zcGxpdCgnLCcpIDogW107XG4gICAgaWYgKG5ld1ZhbHVlLm1hdGNoKC8sJC8pICYmIG9sZFZhbHVlLm1hdGNoKC8sICQvKSkge1xuICAgICAgbGlzdFZhbHVlLnBvcCgpO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gdGhpcy52YWx1ZVRvU3RyaW5nKGxpc3RWYWx1ZSk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiBwYXJzZWRWYWx1ZSB9KTtcbiAgICBvbkNoYW5nZShMaXN0KGxpc3RWYWx1ZS5tYXAodmFsID0+IHZhbC50cmltKCkpKSk7XG4gIH07XG5cbiAgaGFuZGxlRm9jdXMgPSAoKSA9PiB7XG4gICAgdGhpcy5wcm9wcy5zZXRBY3RpdmVTdHlsZSgpO1xuICB9O1xuXG4gIGhhbmRsZUJsdXIgPSBlID0+IHtcbiAgICBjb25zdCBsaXN0VmFsdWUgPSBlLnRhcmdldC52YWx1ZVxuICAgICAgLnNwbGl0KCcsJylcbiAgICAgIC5tYXAoZWwgPT4gZWwudHJpbSgpKVxuICAgICAgLmZpbHRlcihlbCA9PiBlbCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiB0aGlzLnZhbHVlVG9TdHJpbmcobGlzdFZhbHVlKSB9KTtcbiAgICB0aGlzLnByb3BzLnNldEluYWN0aXZlU3R5bGUoKTtcbiAgfTtcblxuICBoYW5kbGVBZGQgPSBlID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgeyBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBwYXJzZWRWYWx1ZSA9XG4gICAgICB0aGlzLmdldFZhbHVlVHlwZSgpID09PSB2YWx1ZVR5cGVzLlNJTkdMRVxuICAgICAgICA/IHRoaXMuc2luZ2xlRGVmYXVsdCgpXG4gICAgICAgIDogZnJvbUpTKHRoaXMubXVsdGlwbGVEZWZhdWx0KGZpZWxkLmdldCgnZmllbGRzJykpKTtcbiAgICB0aGlzLmFkZEl0ZW0ocGFyc2VkVmFsdWUpO1xuICB9O1xuXG4gIHNpbmdsZURlZmF1bHQgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZmllbGQuZ2V0SW4oWydmaWVsZCcsICdkZWZhdWx0J10sIG51bGwpO1xuICB9O1xuXG4gIG11bHRpcGxlRGVmYXVsdCA9IGZpZWxkcyA9PiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRzRGVmYXVsdChmaWVsZHMpO1xuICB9O1xuXG4gIGhhbmRsZUFkZFR5cGUgPSAodHlwZSwgdHlwZUtleSkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gZnJvbUpTKHRoaXMubWl4ZWREZWZhdWx0KHR5cGVLZXksIHR5cGUpKTtcbiAgICB0aGlzLmFkZEl0ZW0ocGFyc2VkVmFsdWUpO1xuICB9O1xuXG4gIG1peGVkRGVmYXVsdCA9ICh0eXBlS2V5LCB0eXBlKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRUeXBlID0gdGhpcy5wcm9wcy5maWVsZC5nZXQoVFlQRVNfS0VZKS5maW5kKGYgPT4gZi5nZXQoJ25hbWUnKSA9PT0gdHlwZSk7XG4gICAgY29uc3QgZmllbGRzID0gc2VsZWN0ZWRUeXBlLmdldCgnZmllbGRzJykgfHwgW3NlbGVjdGVkVHlwZS5nZXQoJ2ZpZWxkJyldO1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRzRGVmYXVsdChmaWVsZHMsIHsgW3R5cGVLZXldOiB0eXBlIH0pO1xuICB9O1xuXG4gIGdldEZpZWxkc0RlZmF1bHQgPSAoZmllbGRzLCBpbml0aWFsVmFsdWUgPSB7fSkgPT4ge1xuICAgIHJldHVybiBmaWVsZHMucmVkdWNlKChhY2MsIGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IHN1YmZpZWxkcyA9IGl0ZW0uZ2V0KCdmaWVsZCcpIHx8IGl0ZW0uZ2V0KCdmaWVsZHMnKTtcbiAgICAgIGNvbnN0IG9iamVjdCA9IGl0ZW0uZ2V0KCd3aWRnZXQnKSA9PSAnb2JqZWN0JztcbiAgICAgIGNvbnN0IG5hbWUgPSBpdGVtLmdldCgnbmFtZScpO1xuICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gaXRlbS5nZXQoJ2RlZmF1bHQnLCBudWxsKTtcblxuICAgICAgaWYgKExpc3QuaXNMaXN0KHN1YmZpZWxkcykgJiYgb2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IHN1YkRlZmF1bHRWYWx1ZSA9IHRoaXMuZ2V0RmllbGRzRGVmYXVsdChzdWJmaWVsZHMpO1xuICAgICAgICAhaXNFbXB0eShzdWJEZWZhdWx0VmFsdWUpICYmIChhY2NbbmFtZV0gPSBzdWJEZWZhdWx0VmFsdWUpO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfVxuXG4gICAgICBpZiAoTWFwLmlzTWFwKHN1YmZpZWxkcykgJiYgb2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IHN1YkRlZmF1bHRWYWx1ZSA9IHRoaXMuZ2V0RmllbGRzRGVmYXVsdChbc3ViZmllbGRzXSk7XG4gICAgICAgICFpc0VtcHR5KHN1YkRlZmF1bHRWYWx1ZSkgJiYgKGFjY1tuYW1lXSA9IHN1YkRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9XG5cbiAgICAgIGlmIChkZWZhdWx0VmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgYWNjW25hbWVdID0gZGVmYXVsdFZhbHVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIGluaXRpYWxWYWx1ZSk7XG4gIH07XG5cbiAgYWRkSXRlbSA9IHBhcnNlZFZhbHVlID0+IHtcbiAgICBjb25zdCB7IHZhbHVlLCBvbkNoYW5nZSwgZmllbGQgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgYWRkVG9Ub3AgPSBmaWVsZC5nZXQoJ2FkZF90b190b3AnLCBmYWxzZSk7XG5cbiAgICBjb25zdCBpdGVtS2V5ID0gdXVpZCgpO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXNDb2xsYXBzZWQ6IGFkZFRvVG9wXG4gICAgICAgID8gW2ZhbHNlLCAuLi50aGlzLnN0YXRlLml0ZW1zQ29sbGFwc2VkXVxuICAgICAgICA6IFsuLi50aGlzLnN0YXRlLml0ZW1zQ29sbGFwc2VkLCBmYWxzZV0sXG4gICAgICBrZXlzOiBhZGRUb1RvcCA/IFtpdGVtS2V5LCAuLi50aGlzLnN0YXRlLmtleXNdIDogWy4uLnRoaXMuc3RhdGUua2V5cywgaXRlbUtleV0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBsaXN0VmFsdWUgPSB2YWx1ZSB8fCBMaXN0KCk7XG4gICAgaWYgKGFkZFRvVG9wKSB7XG4gICAgICBvbkNoYW5nZShsaXN0VmFsdWUudW5zaGlmdChwYXJzZWRWYWx1ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvbkNoYW5nZShsaXN0VmFsdWUucHVzaChwYXJzZWRWYWx1ZSkpO1xuICAgIH1cbiAgfTtcblxuICBwcm9jZXNzQ29udHJvbFJlZiA9IHJlZiA9PiB7XG4gICAgaWYgKCFyZWYpIHJldHVybjtcbiAgICBjb25zdCB7XG4gICAgICB2YWxpZGF0ZSxcbiAgICAgIHByb3BzOiB7IHZhbGlkYXRpb25LZXk6IGtleSB9LFxuICAgIH0gPSByZWY7XG4gICAgdGhpcy52YWxpZGF0aW9ucy5wdXNoKHsga2V5LCB2YWxpZGF0ZSB9KTtcbiAgfTtcblxuICB2YWxpZGF0ZSA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5nZXRWYWx1ZVR5cGUoKSkge1xuICAgICAgdGhpcy52YWxpZGF0aW9ucy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBpdGVtLnZhbGlkYXRlKCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9wcy52YWxpZGF0ZSgpO1xuICAgIH1cbiAgICB0aGlzLnByb3BzLm9uVmFsaWRhdGVPYmplY3QodGhpcy5wcm9wcy5mb3JJRCwgdGhpcy52YWxpZGF0ZVNpemUoKSk7XG4gIH07XG5cbiAgdmFsaWRhdGVTaXplID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgZmllbGQsIHZhbHVlLCB0IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG1pbiA9IGZpZWxkLmdldCgnbWluJyk7XG4gICAgY29uc3QgbWF4ID0gZmllbGQuZ2V0KCdtYXgnKTtcbiAgICBjb25zdCByZXF1aXJlZCA9IGZpZWxkLmdldCgncmVxdWlyZWQnLCB0cnVlKTtcblxuICAgIGlmICghcmVxdWlyZWQgJiYgIXZhbHVlPy5zaXplKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgZXJyb3IgPSB2YWxpZGF0aW9ucy52YWxpZGF0ZU1pbk1heChcbiAgICAgIHQsXG4gICAgICBmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpLFxuICAgICAgdmFsdWUsXG4gICAgICBtaW4sXG4gICAgICBtYXgsXG4gICAgKTtcblxuICAgIHJldHVybiBlcnJvciA/IFtlcnJvcl0gOiBbXTtcbiAgfTtcblxuICAvKipcbiAgICogSW4gY2FzZSB0aGUgYG9uQ2hhbmdlT2JqZWN0YCBmdW5jdGlvbiBpcyBmcm96ZW4gYnkgYSBjaGlsZCB3aWRnZXQgaW1wbGVtZW50YXRpb24sXG4gICAqIGUuZy4gd2hlbiBkZWJvdW5jZWQsIGFsd2F5cyBnZXQgdGhlIGxhdGVzdCBvYmplY3QgdmFsdWUgaW5zdGVhZCBvZiB1c2luZ1xuICAgKiBgdGhpcy5wcm9wcy52YWx1ZWAgZGlyZWN0bHkuXG4gICAqL1xuICBnZXRPYmplY3RWYWx1ZSA9IGlkeCA9PiB0aGlzLnByb3BzLnZhbHVlLmdldChpZHgpIHx8IE1hcCgpO1xuXG4gIGhhbmRsZUNoYW5nZUZvcihpbmRleCkge1xuICAgIHJldHVybiAoZiwgbmV3VmFsdWUsIG5ld01ldGFkYXRhKSA9PiB7XG4gICAgICBjb25zdCB7IHZhbHVlLCBtZXRhZGF0YSwgb25DaGFuZ2UsIGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBmaWVsZC5nZXQoJ25hbWUnKTtcbiAgICAgIGNvbnN0IGxpc3RGaWVsZE9iamVjdFdpZGdldCA9IGZpZWxkLmdldEluKFsnZmllbGQnLCAnd2lkZ2V0J10pID09PSAnb2JqZWN0JztcbiAgICAgIGNvbnN0IHdpdGhOYW1lS2V5ID1cbiAgICAgICAgdGhpcy5nZXRWYWx1ZVR5cGUoKSAhPT0gdmFsdWVUeXBlcy5TSU5HTEUgfHxcbiAgICAgICAgKHRoaXMuZ2V0VmFsdWVUeXBlKCkgPT09IHZhbHVlVHlwZXMuU0lOR0xFICYmIGxpc3RGaWVsZE9iamVjdFdpZGdldCk7XG4gICAgICBjb25zdCBuZXdPYmplY3RWYWx1ZSA9IHdpdGhOYW1lS2V5XG4gICAgICAgID8gdGhpcy5nZXRPYmplY3RWYWx1ZShpbmRleCkuc2V0KGYuZ2V0KCduYW1lJyksIG5ld1ZhbHVlKVxuICAgICAgICA6IG5ld1ZhbHVlO1xuICAgICAgY29uc3QgcGFyc2VkTWV0YWRhdGEgPSB7XG4gICAgICAgIFtjb2xsZWN0aW9uTmFtZV06IE9iamVjdC5hc3NpZ24obWV0YWRhdGEgPyBtZXRhZGF0YS50b0pTKCkgOiB7fSwgbmV3TWV0YWRhdGEgfHwge30pLFxuICAgICAgfTtcbiAgICAgIG9uQ2hhbmdlKHZhbHVlLnNldChpbmRleCwgbmV3T2JqZWN0VmFsdWUpLCBwYXJzZWRNZXRhZGF0YSk7XG4gICAgfTtcbiAgfVxuXG4gIGhhbmRsZVJlbW92ZSA9IChpbmRleCwgZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgeyB2YWx1ZSwgbWV0YWRhdGEsIG9uQ2hhbmdlLCBmaWVsZCwgY2xlYXJGaWVsZEVycm9ycyB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBjb2xsZWN0aW9uTmFtZSA9IGZpZWxkLmdldCgnbmFtZScpO1xuICAgIGNvbnN0IGlzU2luZ2xlRmllbGQgPSB0aGlzLmdldFZhbHVlVHlwZSgpID09PSB2YWx1ZVR5cGVzLlNJTkdMRTtcblxuICAgIGNvbnN0IG1ldGFkYXRhUmVtb3ZlUGF0aCA9IGlzU2luZ2xlRmllbGQgPyB2YWx1ZS5nZXQoaW5kZXgpIDogdmFsdWUuZ2V0KGluZGV4KS52YWx1ZVNlcSgpO1xuICAgIGNvbnN0IHBhcnNlZE1ldGFkYXRhID1cbiAgICAgIG1ldGFkYXRhICYmICFtZXRhZGF0YS5pc0VtcHR5KClcbiAgICAgICAgPyB7IFtjb2xsZWN0aW9uTmFtZV06IG1ldGFkYXRhLnJlbW92ZUluKG1ldGFkYXRhUmVtb3ZlUGF0aCkgfVxuICAgICAgICA6IG1ldGFkYXRhO1xuXG4gICAgaXRlbXNDb2xsYXBzZWQuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAvLyBjbGVhciB2YWxpZGF0aW9uc1xuICAgIHRoaXMudmFsaWRhdGlvbnMgPSBbXTtcblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXNDb2xsYXBzZWQ6IFsuLi5pdGVtc0NvbGxhcHNlZF0sXG4gICAgICBrZXlzOiBBcnJheS5mcm9tKHsgbGVuZ3RoOiB2YWx1ZS5zaXplIC0gMSB9LCAoKSA9PiB1dWlkKCkpLFxuICAgIH0pO1xuXG4gICAgb25DaGFuZ2UodmFsdWUucmVtb3ZlKGluZGV4KSwgcGFyc2VkTWV0YWRhdGEpO1xuICAgIGNsZWFyRmllbGRFcnJvcnMoKTtcbiAgfTtcblxuICBoYW5kbGVJdGVtQ29sbGFwc2VUb2dnbGUgPSAoaW5kZXgsIGV2ZW50KSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IG5ld0l0ZW1zQ29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWQubWFwKChjb2xsYXBzZWQsIGl0ZW1JbmRleCkgPT4ge1xuICAgICAgaWYgKGluZGV4ID09PSBpdGVtSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuICFjb2xsYXBzZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29sbGFwc2VkO1xuICAgIH0pO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXNDb2xsYXBzZWQ6IG5ld0l0ZW1zQ29sbGFwc2VkLFxuICAgIH0pO1xuICB9O1xuXG4gIGhhbmRsZUNvbGxhcHNlQWxsVG9nZ2xlID0gZSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHsgdmFsdWUsIGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQsIGxpc3RDb2xsYXBzZWQgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgbWluaW1pemVDb2xsYXBzZWRJdGVtcyA9IGZpZWxkLmdldCgnbWluaW1pemVfY29sbGFwc2VkJywgZmFsc2UpO1xuICAgIGNvbnN0IGxpc3RDb2xsYXBzZWRCeURlZmF1bHQgPSBmaWVsZC5nZXQoJ2NvbGxhcHNlZCcsIHRydWUpO1xuICAgIGNvbnN0IGFsbEl0ZW1zQ29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWQuZXZlcnkodmFsID0+IHZhbCA9PT0gdHJ1ZSk7XG5cbiAgICBpZiAobWluaW1pemVDb2xsYXBzZWRJdGVtcykge1xuICAgICAgbGV0IHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkO1xuICAgICAgLy8gT25seSBhbGxvdyBjb2xsYXBzaW5nIGFsbCBpdGVtcyBpbiB0aGlzIG1vZGUgYnV0IG5vdCBvcGVuaW5nIGFsbCBhdCBvbmNlXG4gICAgICBpZiAoIWxpc3RDb2xsYXBzZWQgfHwgIWxpc3RDb2xsYXBzZWRCeURlZmF1bHQpIHtcbiAgICAgICAgdXBkYXRlZEl0ZW1zQ29sbGFwc2VkID0gQXJyYXkodmFsdWUuc2l6ZSkuZmlsbCghbGlzdENvbGxhcHNlZCk7XG4gICAgICB9XG4gICAgICB0aGlzLnNldFN0YXRlKHsgbGlzdENvbGxhcHNlZDogIWxpc3RDb2xsYXBzZWQsIGl0ZW1zQ29sbGFwc2VkOiB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBpdGVtc0NvbGxhcHNlZDogQXJyYXkodmFsdWUuc2l6ZSkuZmlsbCghYWxsSXRlbXNDb2xsYXBzZWQpIH0pO1xuICAgIH1cbiAgfTtcblxuICBvYmplY3RMYWJlbChpdGVtKSB7XG4gICAgY29uc3QgeyBmaWVsZCwgZW50cnkgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgdmFsdWVUeXBlID0gdGhpcy5nZXRWYWx1ZVR5cGUoKTtcbiAgICBzd2l0Y2ggKHZhbHVlVHlwZSkge1xuICAgICAgY2FzZSB2YWx1ZVR5cGVzLk1JWEVEOiB7XG4gICAgICAgIGlmICghdmFsaWRhdGVJdGVtKGZpZWxkLCBpdGVtKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpdGVtVHlwZSA9IGdldFR5cGVkRmllbGRGb3JWYWx1ZShmaWVsZCwgaXRlbSk7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gaXRlbVR5cGUuZ2V0KCdsYWJlbCcsIGl0ZW1UeXBlLmdldCgnbmFtZScpKTtcbiAgICAgICAgLy8gZWFjaCB0eXBlIGNhbiBoYXZlIGl0cyBvd24gc3VtbWFyeSwgYnV0IGRlZmF1bHQgdG8gdGhlIGxpc3Qgc3VtbWFyeSBpZiBleGlzdHNcbiAgICAgICAgY29uc3Qgc3VtbWFyeSA9IGl0ZW1UeXBlLmdldCgnc3VtbWFyeScsIGZpZWxkLmdldCgnc3VtbWFyeScpKTtcbiAgICAgICAgY29uc3QgbGFiZWxSZXR1cm4gPSBzdW1tYXJ5ID8gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgbGFiZWwsIGl0ZW0pIDogbGFiZWw7XG4gICAgICAgIHJldHVybiBsYWJlbFJldHVybjtcbiAgICAgIH1cbiAgICAgIGNhc2UgdmFsdWVUeXBlcy5TSU5HTEU6IHtcbiAgICAgICAgY29uc3Qgc2luZ2xlRmllbGQgPSBmaWVsZC5nZXQoJ2ZpZWxkJyk7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gc2luZ2xlRmllbGQuZ2V0KCdsYWJlbCcsIHNpbmdsZUZpZWxkLmdldCgnbmFtZScpKTtcbiAgICAgICAgY29uc3Qgc3VtbWFyeSA9IGZpZWxkLmdldCgnc3VtbWFyeScpO1xuICAgICAgICBjb25zdCBkYXRhID0gZnJvbUpTKHsgW3NpbmdsZUZpZWxkLmdldCgnbmFtZScpXTogaXRlbSB9KTtcbiAgICAgICAgY29uc3QgbGFiZWxSZXR1cm4gPSBzdW1tYXJ5ID8gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgbGFiZWwsIGRhdGEpIDogbGFiZWw7XG4gICAgICAgIHJldHVybiBsYWJlbFJldHVybjtcbiAgICAgIH1cbiAgICAgIGNhc2UgdmFsdWVUeXBlcy5NVUxUSVBMRToge1xuICAgICAgICBpZiAoIXZhbGlkYXRlSXRlbShmaWVsZCwgaXRlbSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbXVsdGlGaWVsZHMgPSBmaWVsZC5nZXQoJ2ZpZWxkcycpO1xuICAgICAgICBjb25zdCBsYWJlbEZpZWxkID0gbXVsdGlGaWVsZHMgJiYgbXVsdGlGaWVsZHMuZmlyc3QoKTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpdGVtLmdldChsYWJlbEZpZWxkLmdldCgnbmFtZScpKTtcbiAgICAgICAgY29uc3Qgc3VtbWFyeSA9IGZpZWxkLmdldCgnc3VtbWFyeScpO1xuICAgICAgICBjb25zdCBsYWJlbFJldHVybiA9IHN1bW1hcnkgPyBoYW5kbGVTdW1tYXJ5KHN1bW1hcnksIGVudHJ5LCB2YWx1ZSwgaXRlbSkgOiB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIChsYWJlbFJldHVybiB8fCBgTm8gJHtsYWJlbEZpZWxkLmdldCgnbmFtZScpfWApLnRvU3RyaW5nKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIG9uU29ydEVuZCA9ICh7IG9sZEluZGV4LCBuZXdJbmRleCB9KSA9PiB7XG4gICAgY29uc3QgeyB2YWx1ZSwgY2xlYXJGaWVsZEVycm9ycyB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkLCBrZXlzIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgLy8gVXBkYXRlIHZhbHVlXG4gICAgY29uc3QgaXRlbSA9IHZhbHVlLmdldChvbGRJbmRleCk7XG4gICAgY29uc3QgbmV3VmFsdWUgPSB2YWx1ZS5kZWxldGUob2xkSW5kZXgpLmluc2VydChuZXdJbmRleCwgaXRlbSk7XG4gICAgdGhpcy5wcm9wcy5vbkNoYW5nZShuZXdWYWx1ZSk7XG5cbiAgICAvLyBVcGRhdGUgY29sbGFwc2luZ1xuICAgIGNvbnN0IGNvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkW29sZEluZGV4XTtcbiAgICBpdGVtc0NvbGxhcHNlZC5zcGxpY2Uob2xkSW5kZXgsIDEpO1xuICAgIGNvbnN0IHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCA9IFsuLi5pdGVtc0NvbGxhcHNlZF07XG4gICAgdXBkYXRlZEl0ZW1zQ29sbGFwc2VkLnNwbGljZShuZXdJbmRleCwgMCwgY29sbGFwc2VkKTtcblxuICAgIC8vIFJlc2V0IGl0ZW0gdG8gZW5zdXJlIHVwZGF0ZWQgc3RhdGVcbiAgICBjb25zdCB1cGRhdGVkS2V5cyA9IGtleXMubWFwKChrZXksIGtleUluZGV4KSA9PiB7XG4gICAgICBpZiAoa2V5SW5kZXggPT09IG9sZEluZGV4IHx8IGtleUluZGV4ID09PSBuZXdJbmRleCkge1xuICAgICAgICByZXR1cm4gdXVpZCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGtleTtcbiAgICB9KTtcbiAgICB0aGlzLnNldFN0YXRlKHsgaXRlbXNDb2xsYXBzZWQ6IHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCwga2V5czogdXBkYXRlZEtleXMgfSk7XG5cbiAgICAvL2NsZWFyIGVycm9yIGZpZWxkcyBhbmQgcmVtb3ZlIG9sZCB2YWxpZGF0aW9uc1xuICAgIGNsZWFyRmllbGRFcnJvcnMoKTtcbiAgICB0aGlzLnZhbGlkYXRpb25zID0gdGhpcy52YWxpZGF0aW9ucy5maWx0ZXIoaXRlbSA9PiB1cGRhdGVkS2V5cy5pbmNsdWRlcyhpdGVtLmtleSkpO1xuICB9O1xuXG4gIGhhc0Vycm9yID0gaW5kZXggPT4ge1xuICAgIGNvbnN0IHsgZmllbGRzRXJyb3JzIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChmaWVsZHNFcnJvcnMgJiYgZmllbGRzRXJyb3JzLnNpemUgPiAwKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhmaWVsZHNFcnJvcnMudG9KUygpKS5zb21lKGFyciA9PlxuICAgICAgICBhcnIuc29tZShlcnIgPT4gZXJyLnBhcmVudElkcyAmJiBlcnIucGFyZW50SWRzLmluY2x1ZGVzKHRoaXMuc3RhdGUua2V5c1tpbmRleF0pKSxcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9kaXNwbGF5LW5hbWVcbiAgcmVuZGVySXRlbSA9IChpdGVtLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGNsYXNzTmFtZVdyYXBwZXIsXG4gICAgICBlZGl0b3JDb250cm9sLFxuICAgICAgb25WYWxpZGF0ZU9iamVjdCxcbiAgICAgIG1ldGFkYXRhLFxuICAgICAgY2xlYXJGaWVsZEVycm9ycyxcbiAgICAgIGZpZWxkc0Vycm9ycyxcbiAgICAgIGNvbnRyb2xSZWYsXG4gICAgICByZXNvbHZlV2lkZ2V0LFxuICAgICAgcGFyZW50SWRzLFxuICAgICAgZm9ySUQsXG4gICAgICB0LFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCwga2V5cyB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBjb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZFtpbmRleF07XG4gICAgY29uc3Qga2V5ID0ga2V5c1tpbmRleF07XG4gICAgbGV0IGZpZWxkID0gdGhpcy5wcm9wcy5maWVsZDtcbiAgICBjb25zdCBoYXNFcnJvciA9IHRoaXMuaGFzRXJyb3IoaW5kZXgpO1xuICAgIGNvbnN0IGlzVmFyaWFibGVUeXBlc0xpc3QgPSB0aGlzLmdldFZhbHVlVHlwZSgpID09PSB2YWx1ZVR5cGVzLk1JWEVEO1xuICAgIGlmIChpc1ZhcmlhYmxlVHlwZXNMaXN0KSB7XG4gICAgICBmaWVsZCA9IGdldFR5cGVkRmllbGRGb3JWYWx1ZShmaWVsZCwgaXRlbSk7XG4gICAgICBpZiAoIWZpZWxkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlckVycm9uZW91c1R5cGVkSXRlbShpbmRleCwgaXRlbSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8U29ydGFibGVMaXN0SXRlbVxuICAgICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBjb2xsYXBzZWQgJiYgc3R5bGVzLmxpc3RDb250cm9sSXRlbUNvbGxhcHNlZF19XG4gICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICA+XG4gICAgICAgIHtpc1ZhcmlhYmxlVHlwZXNMaXN0ICYmIChcbiAgICAgICAgICA8TGFiZWxDb21wb25lbnRcbiAgICAgICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgICAgIGlzQWN0aXZlPXtmYWxzZX1cbiAgICAgICAgICAgIGhhc0Vycm9ycz17aGFzRXJyb3J9XG4gICAgICAgICAgICB1bmlxdWVGaWVsZElkPXt0aGlzLnVuaXF1ZUZpZWxkSWR9XG4gICAgICAgICAgICBpc0ZpZWxkT3B0aW9uYWw9e2ZpZWxkLmdldCgncmVxdWlyZWQnKSA9PT0gZmFsc2V9XG4gICAgICAgICAgICB0PXt0fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIDxTdHlsZWRMaXN0SXRlbVRvcEJhclxuICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICAgIG9uQ29sbGFwc2VUb2dnbGU9e3BhcnRpYWwodGhpcy5oYW5kbGVJdGVtQ29sbGFwc2VUb2dnbGUsIGluZGV4KX1cbiAgICAgICAgICBvblJlbW92ZT17cGFydGlhbCh0aGlzLmhhbmRsZVJlbW92ZSwgaW5kZXgpfVxuICAgICAgICAgIGRyYWdIYW5kbGVIT0M9e1NvcnRhYmxlSGFuZGxlfVxuICAgICAgICAgIGRhdGEtdGVzdGlkPXtgc3R5bGVkLWxpc3QtaXRlbS10b3AtYmFyLSR7a2V5fWB9XG4gICAgICAgIC8+XG4gICAgICAgIDxOZXN0ZWRPYmplY3RMYWJlbCBjb2xsYXBzZWQ9e2NvbGxhcHNlZH0gZXJyb3I9e2hhc0Vycm9yfT5cbiAgICAgICAgICB7dGhpcy5vYmplY3RMYWJlbChpdGVtKX1cbiAgICAgICAgPC9OZXN0ZWRPYmplY3RMYWJlbD5cbiAgICAgICAgPENsYXNzTmFtZXM+XG4gICAgICAgICAgeyh7IGNzcywgY3ggfSkgPT4gKFxuICAgICAgICAgICAgPE9iamVjdENvbnRyb2xcbiAgICAgICAgICAgICAgY2xhc3NOYW1lV3JhcHBlcj17Y3goY2xhc3NOYW1lV3JhcHBlciwge1xuICAgICAgICAgICAgICAgIFtjc3NgXG4gICAgICAgICAgICAgICAgICAke3N0eWxlU3RyaW5ncy5jb2xsYXBzZWRPYmplY3RDb250cm9sfTtcbiAgICAgICAgICAgICAgICBgXTogY29sbGFwc2VkLFxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgdmFsdWU9e2l0ZW19XG4gICAgICAgICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgICAgICAgb25DaGFuZ2VPYmplY3Q9e3RoaXMuaGFuZGxlQ2hhbmdlRm9yKGluZGV4KX1cbiAgICAgICAgICAgICAgZWRpdG9yQ29udHJvbD17ZWRpdG9yQ29udHJvbH1cbiAgICAgICAgICAgICAgcmVzb2x2ZVdpZGdldD17cmVzb2x2ZVdpZGdldH1cbiAgICAgICAgICAgICAgbWV0YWRhdGE9e21ldGFkYXRhfVxuICAgICAgICAgICAgICBmb3JMaXN0XG4gICAgICAgICAgICAgIG9uVmFsaWRhdGVPYmplY3Q9e29uVmFsaWRhdGVPYmplY3R9XG4gICAgICAgICAgICAgIGNsZWFyRmllbGRFcnJvcnM9e2NsZWFyRmllbGRFcnJvcnN9XG4gICAgICAgICAgICAgIGZpZWxkc0Vycm9ycz17ZmllbGRzRXJyb3JzfVxuICAgICAgICAgICAgICByZWY9e3RoaXMucHJvY2Vzc0NvbnRyb2xSZWZ9XG4gICAgICAgICAgICAgIGNvbnRyb2xSZWY9e2NvbnRyb2xSZWZ9XG4gICAgICAgICAgICAgIHZhbGlkYXRpb25LZXk9e2tleX1cbiAgICAgICAgICAgICAgY29sbGFwc2VkPXtjb2xsYXBzZWR9XG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgb2JqZWN0LWNvbnRyb2wtJHtrZXl9YH1cbiAgICAgICAgICAgICAgaGFzRXJyb3I9e2hhc0Vycm9yfVxuICAgICAgICAgICAgICBwYXJlbnRJZHM9e1suLi5wYXJlbnRJZHMsIGZvcklELCBrZXldfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L0NsYXNzTmFtZXM+XG4gICAgICA8L1NvcnRhYmxlTGlzdEl0ZW0+XG4gICAgKTtcbiAgfTtcblxuICByZW5kZXJFcnJvbmVvdXNUeXBlZEl0ZW0oaW5kZXgsIGl0ZW0pIHtcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMucHJvcHMuZmllbGQ7XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZ2V0RXJyb3JNZXNzYWdlRm9yVHlwZWRGaWVsZEFuZFZhbHVlKGZpZWxkLCBpdGVtKTtcbiAgICBjb25zdCBrZXkgPSBgaXRlbS0ke2luZGV4fWA7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTb3J0YWJsZUxpc3RJdGVtXG4gICAgICAgIGNzcz17W3N0eWxlcy5saXN0Q29udHJvbEl0ZW0sIHN0eWxlcy5saXN0Q29udHJvbEl0ZW1Db2xsYXBzZWRdfVxuICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAgIGtleT17a2V5fVxuICAgICAgPlxuICAgICAgICA8U3R5bGVkTGlzdEl0ZW1Ub3BCYXJcbiAgICAgICAgICBvbkNvbGxhcHNlVG9nZ2xlPXtudWxsfVxuICAgICAgICAgIG9uUmVtb3ZlPXtwYXJ0aWFsKHRoaXMuaGFuZGxlUmVtb3ZlLCBpbmRleCwga2V5KX1cbiAgICAgICAgICBkcmFnSGFuZGxlSE9DPXtTb3J0YWJsZUhhbmRsZX1cbiAgICAgICAgLz5cbiAgICAgICAgPE5lc3RlZE9iamVjdExhYmVsIGNvbGxhcHNlZD17dHJ1ZX0gZXJyb3I9e3RydWV9PlxuICAgICAgICAgIHtlcnJvck1lc3NhZ2V9XG4gICAgICAgIDwvTmVzdGVkT2JqZWN0TGFiZWw+XG4gICAgICA8L1NvcnRhYmxlTGlzdEl0ZW0+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlckxpc3RDb250cm9sKCkge1xuICAgIGNvbnN0IHsgdmFsdWUsIGZvcklELCBmaWVsZCwgY2xhc3NOYW1lV3JhcHBlciwgdCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkLCBsaXN0Q29sbGFwc2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IGl0ZW1zID0gdmFsdWUgfHwgTGlzdCgpO1xuICAgIGNvbnN0IGxhYmVsID0gZmllbGQuZ2V0KCdsYWJlbCcsIGZpZWxkLmdldCgnbmFtZScpKTtcbiAgICBjb25zdCBsYWJlbFNpbmd1bGFyID0gZmllbGQuZ2V0KCdsYWJlbF9zaW5ndWxhcicpIHx8IGZpZWxkLmdldCgnbGFiZWwnLCBmaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgY29uc3QgbGlzdExhYmVsID0gaXRlbXMuc2l6ZSA9PT0gMSA/IGxhYmVsU2luZ3VsYXIudG9Mb3dlckNhc2UoKSA6IGxhYmVsLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgbWluaW1pemVDb2xsYXBzZWRJdGVtcyA9IGZpZWxkLmdldCgnbWluaW1pemVfY29sbGFwc2VkJywgZmFsc2UpO1xuICAgIGNvbnN0IGFsbEl0ZW1zQ29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWQuZXZlcnkodmFsID0+IHZhbCA9PT0gdHJ1ZSk7XG4gICAgY29uc3Qgc2VsZkNvbGxhcHNlZCA9IGFsbEl0ZW1zQ29sbGFwc2VkICYmIChsaXN0Q29sbGFwc2VkIHx8ICFtaW5pbWl6ZUNvbGxhcHNlZEl0ZW1zKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8Q2xhc3NOYW1lcz5cbiAgICAgICAgeyh7IGN4LCBjc3MgfSkgPT4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGlkPXtmb3JJRH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goXG4gICAgICAgICAgICAgIGNsYXNzTmFtZVdyYXBwZXIsXG4gICAgICAgICAgICAgIGNzc2BcbiAgICAgICAgICAgICAgICAke3N0eWxlU3RyaW5ncy5vYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXJ9XG4gICAgICAgICAgICAgIGAsXG4gICAgICAgICAgICApfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxPYmplY3RXaWRnZXRUb3BCYXJcbiAgICAgICAgICAgICAgYWxsb3dBZGQ9e2ZpZWxkLmdldCgnYWxsb3dfYWRkJywgdHJ1ZSl9XG4gICAgICAgICAgICAgIG9uQWRkPXt0aGlzLmhhbmRsZUFkZH1cbiAgICAgICAgICAgICAgdHlwZXM9e2ZpZWxkLmdldChUWVBFU19LRVksIG51bGwpfVxuICAgICAgICAgICAgICBvbkFkZFR5cGU9e3R5cGUgPT4gdGhpcy5oYW5kbGVBZGRUeXBlKHR5cGUsIHJlc29sdmVGaWVsZEtleVR5cGUoZmllbGQpKX1cbiAgICAgICAgICAgICAgaGVhZGluZz17YCR7aXRlbXMuc2l6ZX0gJHtsaXN0TGFiZWx9YH1cbiAgICAgICAgICAgICAgbGFiZWw9e2xhYmVsU2luZ3VsYXIudG9Mb3dlckNhc2UoKX1cbiAgICAgICAgICAgICAgb25Db2xsYXBzZVRvZ2dsZT17dGhpcy5oYW5kbGVDb2xsYXBzZUFsbFRvZ2dsZX1cbiAgICAgICAgICAgICAgY29sbGFwc2VkPXtzZWxmQ29sbGFwc2VkfVxuICAgICAgICAgICAgICB0PXt0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHsoIXNlbGZDb2xsYXBzZWQgfHwgIW1pbmltaXplQ29sbGFwc2VkSXRlbXMpICYmIChcbiAgICAgICAgICAgICAgPFNvcnRhYmxlTGlzdFxuICAgICAgICAgICAgICAgIGl0ZW1zPXtpdGVtc31cbiAgICAgICAgICAgICAgICByZW5kZXJJdGVtPXt0aGlzLnJlbmRlckl0ZW19XG4gICAgICAgICAgICAgICAgb25Tb3J0RW5kPXt0aGlzLm9uU29ydEVuZH1cbiAgICAgICAgICAgICAgICB1c2VEcmFnSGFuZGxlXG4gICAgICAgICAgICAgICAgbG9ja0F4aXM9XCJ5XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L0NsYXNzTmFtZXM+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlcklucHV0KCkge1xuICAgIGNvbnN0IHsgZm9ySUQsIGNsYXNzTmFtZVdyYXBwZXIgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIHJldHVybiAoXG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBpZD17Zm9ySUR9XG4gICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICBvbkZvY3VzPXt0aGlzLmhhbmRsZUZvY3VzfVxuICAgICAgICBvbkJsdXI9e3RoaXMuaGFuZGxlQmx1cn1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVXcmFwcGVyfVxuICAgICAgLz5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmdldFZhbHVlVHlwZSgpICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJMaXN0Q29udHJvbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJJbnB1dCgpO1xuICAgIH1cbiAgfVxufVxuIl19 */"));
|
|
37
|
+
const NestedObjectLabel = (0, _styledBase.default)("div", {
|
|
38
|
+
target: "e11zrb3c2",
|
|
39
|
+
label: "NestedObjectLabel"
|
|
40
|
+
})("display:", props => props.collapsed ? 'block' : 'none', ";border-top:0;color:", props => props.error ? _decapCmsUiDefault.colors.errorText : 'inherit', ";background-color:", _decapCmsUiDefault.colors.textFieldBorder, ";padding:13px;border-radius:0 0 ", _decapCmsUiDefault.lengths.borderRadius, " ", _decapCmsUiDefault.lengths.borderRadius, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFvQ29DIiwiZmlsZSI6Ii4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IEltbXV0YWJsZVByb3BUeXBlcyBmcm9tICdyZWFjdC1pbW11dGFibGUtcHJvcHR5cGVzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCB7IGNzcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL2NvcmUnO1xuaW1wb3J0IHsgTGlzdCwgTWFwLCBmcm9tSlMgfSBmcm9tICdpbW11dGFibGUnO1xuaW1wb3J0IHsgcGFydGlhbCwgaXNFbXB0eSwgdW5pcXVlSWQgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHV1aWQgZnJvbSAndXVpZC92NCc7XG5pbXBvcnQgeyBTb3J0YWJsZUNvbnRhaW5lciwgU29ydGFibGVFbGVtZW50LCBTb3J0YWJsZUhhbmRsZSB9IGZyb20gJ3JlYWN0LXNvcnRhYmxlLWhvYyc7XG5pbXBvcnQgRGVjYXBDbXNXaWRnZXRPYmplY3QgZnJvbSAnZGVjYXAtY21zLXdpZGdldC1vYmplY3QnO1xuaW1wb3J0IHtcbiAgTGlzdEl0ZW1Ub3BCYXIsXG4gIE9iamVjdFdpZGdldFRvcEJhcixcbiAgY29sb3JzLFxuICBsZW5ndGhzLFxuICBGaWVsZExhYmVsLFxufSBmcm9tICdkZWNhcC1jbXMtdWktZGVmYXVsdCc7XG5pbXBvcnQgeyBzdHJpbmdUZW1wbGF0ZSwgdmFsaWRhdGlvbnMgfSBmcm9tICdkZWNhcC1jbXMtbGliLXdpZGdldHMnO1xuXG5pbXBvcnQge1xuICBUWVBFU19LRVksXG4gIGdldFR5cGVkRmllbGRGb3JWYWx1ZSxcbiAgcmVzb2x2ZUZpZWxkS2V5VHlwZSxcbiAgZ2V0RXJyb3JNZXNzYWdlRm9yVHlwZWRGaWVsZEFuZFZhbHVlLFxufSBmcm9tICcuL3R5cGVkTGlzdEhlbHBlcnMnO1xuXG5jb25zdCBPYmplY3RDb250cm9sID0gRGVjYXBDbXNXaWRnZXRPYmplY3QuY29udHJvbENvbXBvbmVudDtcblxuY29uc3QgTGlzdEl0ZW0gPSBzdHlsZWQuZGl2KCk7XG5cbmNvbnN0IFNvcnRhYmxlTGlzdEl0ZW0gPSBTb3J0YWJsZUVsZW1lbnQoTGlzdEl0ZW0pO1xuXG5jb25zdCBTdHlsZWRMaXN0SXRlbVRvcEJhciA9IHN0eWxlZChMaXN0SXRlbVRvcEJhcilgXG4gIGJhY2tncm91bmQtY29sb3I6ICR7Y29sb3JzLnRleHRGaWVsZEJvcmRlcn07XG5gO1xuXG5jb25zdCBOZXN0ZWRPYmplY3RMYWJlbCA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6ICR7cHJvcHMgPT4gKHByb3BzLmNvbGxhcHNlZCA/ICdibG9jaycgOiAnbm9uZScpfTtcbiAgYm9yZGVyLXRvcDogMDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gKHByb3BzLmVycm9yID8gY29sb3JzLmVycm9yVGV4dCA6ICdpbmhlcml0Jyl9O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAke2NvbG9ycy50ZXh0RmllbGRCb3JkZXJ9O1xuICBwYWRkaW5nOiAxM3B4O1xuICBib3JkZXItcmFkaXVzOiAwIDAgJHtsZW5ndGhzLmJvcmRlclJhZGl1c30gJHtsZW5ndGhzLmJvcmRlclJhZGl1c307XG5gO1xuXG5jb25zdCBzdHlsZVN0cmluZ3MgPSB7XG4gIGNvbGxhcHNlZE9iamVjdENvbnRyb2w6IGBcbiAgICBkaXNwbGF5OiBub25lO1xuICBgLFxuICBvYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXI6IGBcbiAgICBwYWRkaW5nOiAke2xlbmd0aHMub2JqZWN0V2lkZ2V0VG9wQmFyQ29udGFpbmVyUGFkZGluZ307XG4gIGAsXG59O1xuXG5jb25zdCBzdHlsZXMgPSB7XG4gIGxpc3RDb250cm9sSXRlbTogY3NzYFxuICAgIG1hcmdpbi10b3A6IDE4cHg7XG5cbiAgICAmOmZpcnN0LW9mLXR5cGUge1xuICAgICAgbWFyZ2luLXRvcDogMjZweDtcbiAgICB9XG4gIGAsXG4gIGxpc3RDb250cm9sSXRlbUNvbGxhcHNlZDogY3NzYFxuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICBgLFxufTtcblxuY29uc3QgU29ydGFibGVMaXN0ID0gU29ydGFibGVDb250YWluZXIoKHsgaXRlbXMsIHJlbmRlckl0ZW0gfSkgPT4ge1xuICByZXR1cm4gPGRpdj57aXRlbXMubWFwKHJlbmRlckl0ZW0pfTwvZGl2Pjtcbn0pO1xuXG5jb25zdCB2YWx1ZVR5cGVzID0ge1xuICBTSU5HTEU6ICdTSU5HTEUnLFxuICBNVUxUSVBMRTogJ01VTFRJUExFJyxcbiAgTUlYRUQ6ICdNSVhFRCcsXG59O1xuXG5mdW5jdGlvbiBoYW5kbGVTdW1tYXJ5KHN1bW1hcnksIGVudHJ5LCBsYWJlbCwgaXRlbSkge1xuICBjb25zdCBkYXRhID0gc3RyaW5nVGVtcGxhdGUuYWRkRmlsZVRlbXBsYXRlRmllbGRzKFxuICAgIGVudHJ5LmdldCgncGF0aCcpLFxuICAgIGl0ZW0uc2V0KCdmaWVsZHMubGFiZWwnLCBsYWJlbCksXG4gICk7XG4gIHJldHVybiBzdHJpbmdUZW1wbGF0ZS5jb21waWxlU3RyaW5nVGVtcGxhdGUoc3VtbWFyeSwgbnVsbCwgJycsIGRhdGEpO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUl0ZW0oZmllbGQsIGl0ZW0pIHtcbiAgaWYgKCFNYXAuaXNNYXAoaXRlbSkpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgJyR7ZmllbGQuZ2V0KCduYW1lJyl9JyBmaWVsZCBpdGVtIHZhbHVlIHZhbHVlIHNob3VsZCBiZSBhIG1hcCBidXQgaXMgYSAnJHt0eXBlb2YgaXRlbX0nYCxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gTGFiZWxDb21wb25lbnQoeyBmaWVsZCwgaXNBY3RpdmUsIGhhc0Vycm9ycywgdW5pcXVlRmllbGRJZCwgaXNGaWVsZE9wdGlvbmFsLCB0IH0pIHtcbiAgY29uc3QgbGFiZWwgPSBgJHtmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpfWA7XG4gIHJldHVybiAoXG4gICAgPEZpZWxkTGFiZWwgaXNBY3RpdmU9e2lzQWN0aXZlfSBoYXNFcnJvcnM9e2hhc0Vycm9yc30gaHRtbEZvcj17dW5pcXVlRmllbGRJZH0+XG4gICAgICB7bGFiZWx9IHtgJHtpc0ZpZWxkT3B0aW9uYWwgPyBgICgke3QoJ2VkaXRvci5lZGl0b3JDb250cm9sLmZpZWxkLm9wdGlvbmFsJyl9KWAgOiAnJ31gfVxuICAgIDwvRmllbGRMYWJlbD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlzdENvbnRyb2wgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICB2YWxpZGF0aW9ucyA9IFtdO1xuXG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgbWV0YWRhdGE6IEltbXV0YWJsZVByb3BUeXBlcy5tYXAsXG4gICAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25DaGFuZ2VPYmplY3Q6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25WYWxpZGF0ZU9iamVjdDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICB2YWxpZGF0ZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICB2YWx1ZTogSW1tdXRhYmxlUHJvcFR5cGVzLmxpc3QsXG4gICAgZmllbGQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgZm9ySUQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY29udHJvbFJlZjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgbWVkaWFQYXRoczogSW1tdXRhYmxlUHJvcFR5cGVzLm1hcC5pc1JlcXVpcmVkLFxuICAgIGdldEFzc2V0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uT3Blbk1lZGlhTGlicmFyeTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvbkFkZEFzc2V0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uUmVtb3ZlSW5zZXJ0ZWRNZWRpYTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBjbGFzc05hbWVXcmFwcGVyOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgc2V0QWN0aXZlU3R5bGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgc2V0SW5hY3RpdmVTdHlsZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBlZGl0b3JDb250cm9sOiBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZCxcbiAgICByZXNvbHZlV2lkZ2V0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGNsZWFyRmllbGRFcnJvcnM6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgZmllbGRzRXJyb3JzOiBJbW11dGFibGVQcm9wVHlwZXMubWFwLmlzUmVxdWlyZWQsXG4gICAgZW50cnk6IEltbXV0YWJsZVByb3BUeXBlcy5tYXAuaXNSZXF1aXJlZCxcbiAgICB0OiBQcm9wVHlwZXMuZnVuYyxcbiAgfTtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIHZhbHVlOiBMaXN0KCksXG4gICAgcGFyZW50SWRzOiBbXSxcbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICBjb25zdCB7IGZpZWxkLCB2YWx1ZSB9ID0gcHJvcHM7XG4gICAgY29uc3QgbGlzdENvbGxhcHNlZCA9IGZpZWxkLmdldCgnY29sbGFwc2VkJywgdHJ1ZSk7XG4gICAgY29uc3QgaXRlbXNDb2xsYXBzZWQgPSAodmFsdWUgJiYgQXJyYXkodmFsdWUuc2l6ZSkuZmlsbChsaXN0Q29sbGFwc2VkKSkgfHwgW107XG4gICAgY29uc3Qga2V5cyA9ICh2YWx1ZSAmJiBBcnJheS5mcm9tKHsgbGVuZ3RoOiB2YWx1ZS5zaXplIH0sICgpID0+IHV1aWQoKSkpIHx8IFtdO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGxpc3RDb2xsYXBzZWQsXG4gICAgICBpdGVtc0NvbGxhcHNlZCxcbiAgICAgIHZhbHVlOiB0aGlzLnZhbHVlVG9TdHJpbmcodmFsdWUpLFxuICAgICAga2V5cyxcbiAgICB9O1xuICB9XG5cbiAgdmFsdWVUb1N0cmluZyA9IHZhbHVlID0+IHtcbiAgICBsZXQgc3RyaW5nVmFsdWU7XG4gICAgaWYgKExpc3QuaXNMaXN0KHZhbHVlKSB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgc3RyaW5nVmFsdWUgPSB2YWx1ZS5qb2luKCcsJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYEV4cGVjdGVkIExpc3QgdmFsdWUgdG8gYmUgYW4gYXJyYXkgYnV0IHJlY2VpdmVkICcke3ZhbHVlfScgd2l0aCB0eXBlIG9mICcke3R5cGVvZiB2YWx1ZX0nLiBQbGVhc2UgY2hlY2sgdGhlIHZhbHVlIHByb3ZpZGVkIHRvIHRoZSAnJHt0aGlzLnByb3BzLmZpZWxkLmdldChcbiAgICAgICAgICAnbmFtZScsXG4gICAgICAgICl9JyBmaWVsZGAsXG4gICAgICApO1xuICAgICAgc3RyaW5nVmFsdWUgPSBTdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gc3RyaW5nVmFsdWUucmVwbGFjZSgvLChbXlxcc118JCkvZywgJywgJDEnKTtcbiAgfTtcblxuICBnZXRWYWx1ZVR5cGUgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoZmllbGQuZ2V0KCdmaWVsZHMnKSkge1xuICAgICAgcmV0dXJuIHZhbHVlVHlwZXMuTVVMVElQTEU7XG4gICAgfSBlbHNlIGlmIChmaWVsZC5nZXQoJ2ZpZWxkJykpIHtcbiAgICAgIHJldHVybiB2YWx1ZVR5cGVzLlNJTkdMRTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkLmdldChUWVBFU19LRVkpKSB7XG4gICAgICByZXR1cm4gdmFsdWVUeXBlcy5NSVhFRDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9O1xuXG4gIHVuaXF1ZUZpZWxkSWQgPSB1bmlxdWVJZChgJHt0aGlzLnByb3BzLmZpZWxkLmdldCgnbmFtZScpfS1maWVsZC1gKTtcbiAgLyoqXG4gICAqIEFsd2F5cyB1cGRhdGUgc28gdGhhdCBlYWNoIG5lc3RlZCB3aWRnZXQgaGFzIHRoZSBvcHRpb24gdG8gdXBkYXRlLiBUaGlzIGlzXG4gICAqIHJlcXVpcmVkIGJlY2F1c2UgQ29udHJvbEhPQyBwcm92aWRlcyBhIGRlZmF1bHQgYHNob3VsZENvbXBvbmVudFVwZGF0ZWBcbiAgICogd2hpY2ggb25seSB1cGRhdGVzIGlmIHRoZSB2YWx1ZSBjaGFuZ2VzLCBidXQgZXZlcnkgd2lkZ2V0IG11c3QgYmUgYWxsb3dlZFxuICAgKiB0byBvdmVycmlkZSB0aGlzLlxuICAgKi9cbiAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaGFuZGxlQ2hhbmdlID0gZSA9PiB7XG4gICAgY29uc3QgeyBvbkNoYW5nZSB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMuc3RhdGUudmFsdWU7XG4gICAgY29uc3QgbmV3VmFsdWUgPSBlLnRhcmdldC52YWx1ZS50cmltKCk7XG4gICAgY29uc3QgbGlzdFZhbHVlID0gbmV3VmFsdWUgPyBuZXdWYWx1ZS5zcGxpdCgnLCcpIDogW107XG4gICAgaWYgKG5ld1ZhbHVlLm1hdGNoKC8sJC8pICYmIG9sZFZhbHVlLm1hdGNoKC8sICQvKSkge1xuICAgICAgbGlzdFZhbHVlLnBvcCgpO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gdGhpcy52YWx1ZVRvU3RyaW5nKGxpc3RWYWx1ZSk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiBwYXJzZWRWYWx1ZSB9KTtcbiAgICBvbkNoYW5nZShMaXN0KGxpc3RWYWx1ZS5tYXAodmFsID0+IHZhbC50cmltKCkpKSk7XG4gIH07XG5cbiAgaGFuZGxlRm9jdXMgPSAoKSA9PiB7XG4gICAgdGhpcy5wcm9wcy5zZXRBY3RpdmVTdHlsZSgpO1xuICB9O1xuXG4gIGhhbmRsZUJsdXIgPSBlID0+IHtcbiAgICBjb25zdCBsaXN0VmFsdWUgPSBlLnRhcmdldC52YWx1ZVxuICAgICAgLnNwbGl0KCcsJylcbiAgICAgIC5tYXAoZWwgPT4gZWwudHJpbSgpKVxuICAgICAgLmZpbHRlcihlbCA9PiBlbCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiB0aGlzLnZhbHVlVG9TdHJpbmcobGlzdFZhbHVlKSB9KTtcbiAgICB0aGlzLnByb3BzLnNldEluYWN0aXZlU3R5bGUoKTtcbiAgfTtcblxuICBoYW5kbGVBZGQgPSBlID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgeyBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBwYXJzZWRWYWx1ZSA9XG4gICAgICB0aGlzLmdldFZhbHVlVHlwZSgpID09PSB2YWx1ZVR5cGVzLlNJTkdMRVxuICAgICAgICA/IHRoaXMuc2luZ2xlRGVmYXVsdCgpXG4gICAgICAgIDogZnJvbUpTKHRoaXMubXVsdGlwbGVEZWZhdWx0KGZpZWxkLmdldCgnZmllbGRzJykpKTtcbiAgICB0aGlzLmFkZEl0ZW0ocGFyc2VkVmFsdWUpO1xuICB9O1xuXG4gIHNpbmdsZURlZmF1bHQgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZmllbGQuZ2V0SW4oWydmaWVsZCcsICdkZWZhdWx0J10sIG51bGwpO1xuICB9O1xuXG4gIG11bHRpcGxlRGVmYXVsdCA9IGZpZWxkcyA9PiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRzRGVmYXVsdChmaWVsZHMpO1xuICB9O1xuXG4gIGhhbmRsZUFkZFR5cGUgPSAodHlwZSwgdHlwZUtleSkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gZnJvbUpTKHRoaXMubWl4ZWREZWZhdWx0KHR5cGVLZXksIHR5cGUpKTtcbiAgICB0aGlzLmFkZEl0ZW0ocGFyc2VkVmFsdWUpO1xuICB9O1xuXG4gIG1peGVkRGVmYXVsdCA9ICh0eXBlS2V5LCB0eXBlKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRUeXBlID0gdGhpcy5wcm9wcy5maWVsZC5nZXQoVFlQRVNfS0VZKS5maW5kKGYgPT4gZi5nZXQoJ25hbWUnKSA9PT0gdHlwZSk7XG4gICAgY29uc3QgZmllbGRzID0gc2VsZWN0ZWRUeXBlLmdldCgnZmllbGRzJykgfHwgW3NlbGVjdGVkVHlwZS5nZXQoJ2ZpZWxkJyldO1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRzRGVmYXVsdChmaWVsZHMsIHsgW3R5cGVLZXldOiB0eXBlIH0pO1xuICB9O1xuXG4gIGdldEZpZWxkc0RlZmF1bHQgPSAoZmllbGRzLCBpbml0aWFsVmFsdWUgPSB7fSkgPT4ge1xuICAgIHJldHVybiBmaWVsZHMucmVkdWNlKChhY2MsIGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IHN1YmZpZWxkcyA9IGl0ZW0uZ2V0KCdmaWVsZCcpIHx8IGl0ZW0uZ2V0KCdmaWVsZHMnKTtcbiAgICAgIGNvbnN0IG9iamVjdCA9IGl0ZW0uZ2V0KCd3aWRnZXQnKSA9PSAnb2JqZWN0JztcbiAgICAgIGNvbnN0IG5hbWUgPSBpdGVtLmdldCgnbmFtZScpO1xuICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gaXRlbS5nZXQoJ2RlZmF1bHQnLCBudWxsKTtcblxuICAgICAgaWYgKExpc3QuaXNMaXN0KHN1YmZpZWxkcykgJiYgb2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IHN1YkRlZmF1bHRWYWx1ZSA9IHRoaXMuZ2V0RmllbGRzRGVmYXVsdChzdWJmaWVsZHMpO1xuICAgICAgICAhaXNFbXB0eShzdWJEZWZhdWx0VmFsdWUpICYmIChhY2NbbmFtZV0gPSBzdWJEZWZhdWx0VmFsdWUpO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfVxuXG4gICAgICBpZiAoTWFwLmlzTWFwKHN1YmZpZWxkcykgJiYgb2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IHN1YkRlZmF1bHRWYWx1ZSA9IHRoaXMuZ2V0RmllbGRzRGVmYXVsdChbc3ViZmllbGRzXSk7XG4gICAgICAgICFpc0VtcHR5KHN1YkRlZmF1bHRWYWx1ZSkgJiYgKGFjY1tuYW1lXSA9IHN1YkRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9XG5cbiAgICAgIGlmIChkZWZhdWx0VmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgYWNjW25hbWVdID0gZGVmYXVsdFZhbHVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIGluaXRpYWxWYWx1ZSk7XG4gIH07XG5cbiAgYWRkSXRlbSA9IHBhcnNlZFZhbHVlID0+IHtcbiAgICBjb25zdCB7IHZhbHVlLCBvbkNoYW5nZSwgZmllbGQgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgYWRkVG9Ub3AgPSBmaWVsZC5nZXQoJ2FkZF90b190b3AnLCBmYWxzZSk7XG5cbiAgICBjb25zdCBpdGVtS2V5ID0gdXVpZCgpO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXNDb2xsYXBzZWQ6IGFkZFRvVG9wXG4gICAgICAgID8gW2ZhbHNlLCAuLi50aGlzLnN0YXRlLml0ZW1zQ29sbGFwc2VkXVxuICAgICAgICA6IFsuLi50aGlzLnN0YXRlLml0ZW1zQ29sbGFwc2VkLCBmYWxzZV0sXG4gICAgICBrZXlzOiBhZGRUb1RvcCA/IFtpdGVtS2V5LCAuLi50aGlzLnN0YXRlLmtleXNdIDogWy4uLnRoaXMuc3RhdGUua2V5cywgaXRlbUtleV0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBsaXN0VmFsdWUgPSB2YWx1ZSB8fCBMaXN0KCk7XG4gICAgaWYgKGFkZFRvVG9wKSB7XG4gICAgICBvbkNoYW5nZShsaXN0VmFsdWUudW5zaGlmdChwYXJzZWRWYWx1ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvbkNoYW5nZShsaXN0VmFsdWUucHVzaChwYXJzZWRWYWx1ZSkpO1xuICAgIH1cbiAgfTtcblxuICBwcm9jZXNzQ29udHJvbFJlZiA9IHJlZiA9PiB7XG4gICAgaWYgKCFyZWYpIHJldHVybjtcbiAgICBjb25zdCB7XG4gICAgICB2YWxpZGF0ZSxcbiAgICAgIHByb3BzOiB7IHZhbGlkYXRpb25LZXk6IGtleSB9LFxuICAgIH0gPSByZWY7XG4gICAgdGhpcy52YWxpZGF0aW9ucy5wdXNoKHsga2V5LCB2YWxpZGF0ZSB9KTtcbiAgfTtcblxuICB2YWxpZGF0ZSA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5nZXRWYWx1ZVR5cGUoKSkge1xuICAgICAgdGhpcy52YWxpZGF0aW9ucy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBpdGVtLnZhbGlkYXRlKCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9wcy52YWxpZGF0ZSgpO1xuICAgIH1cbiAgICB0aGlzLnByb3BzLm9uVmFsaWRhdGVPYmplY3QodGhpcy5wcm9wcy5mb3JJRCwgdGhpcy52YWxpZGF0ZVNpemUoKSk7XG4gIH07XG5cbiAgdmFsaWRhdGVTaXplID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgZmllbGQsIHZhbHVlLCB0IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG1pbiA9IGZpZWxkLmdldCgnbWluJyk7XG4gICAgY29uc3QgbWF4ID0gZmllbGQuZ2V0KCdtYXgnKTtcbiAgICBjb25zdCByZXF1aXJlZCA9IGZpZWxkLmdldCgncmVxdWlyZWQnLCB0cnVlKTtcblxuICAgIGlmICghcmVxdWlyZWQgJiYgIXZhbHVlPy5zaXplKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgZXJyb3IgPSB2YWxpZGF0aW9ucy52YWxpZGF0ZU1pbk1heChcbiAgICAgIHQsXG4gICAgICBmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpLFxuICAgICAgdmFsdWUsXG4gICAgICBtaW4sXG4gICAgICBtYXgsXG4gICAgKTtcblxuICAgIHJldHVybiBlcnJvciA/IFtlcnJvcl0gOiBbXTtcbiAgfTtcblxuICAvKipcbiAgICogSW4gY2FzZSB0aGUgYG9uQ2hhbmdlT2JqZWN0YCBmdW5jdGlvbiBpcyBmcm96ZW4gYnkgYSBjaGlsZCB3aWRnZXQgaW1wbGVtZW50YXRpb24sXG4gICAqIGUuZy4gd2hlbiBkZWJvdW5jZWQsIGFsd2F5cyBnZXQgdGhlIGxhdGVzdCBvYmplY3QgdmFsdWUgaW5zdGVhZCBvZiB1c2luZ1xuICAgKiBgdGhpcy5wcm9wcy52YWx1ZWAgZGlyZWN0bHkuXG4gICAqL1xuICBnZXRPYmplY3RWYWx1ZSA9IGlkeCA9PiB0aGlzLnByb3BzLnZhbHVlLmdldChpZHgpIHx8IE1hcCgpO1xuXG4gIGhhbmRsZUNoYW5nZUZvcihpbmRleCkge1xuICAgIHJldHVybiAoZiwgbmV3VmFsdWUsIG5ld01ldGFkYXRhKSA9PiB7XG4gICAgICBjb25zdCB7IHZhbHVlLCBtZXRhZGF0YSwgb25DaGFuZ2UsIGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBmaWVsZC5nZXQoJ25hbWUnKTtcbiAgICAgIGNvbnN0IGxpc3RGaWVsZE9iamVjdFdpZGdldCA9IGZpZWxkLmdldEluKFsnZmllbGQnLCAnd2lkZ2V0J10pID09PSAnb2JqZWN0JztcbiAgICAgIGNvbnN0IHdpdGhOYW1lS2V5ID1cbiAgICAgICAgdGhpcy5nZXRWYWx1ZVR5cGUoKSAhPT0gdmFsdWVUeXBlcy5TSU5HTEUgfHxcbiAgICAgICAgKHRoaXMuZ2V0VmFsdWVUeXBlKCkgPT09IHZhbHVlVHlwZXMuU0lOR0xFICYmIGxpc3RGaWVsZE9iamVjdFdpZGdldCk7XG4gICAgICBjb25zdCBuZXdPYmplY3RWYWx1ZSA9IHdpdGhOYW1lS2V5XG4gICAgICAgID8gdGhpcy5nZXRPYmplY3RWYWx1ZShpbmRleCkuc2V0KGYuZ2V0KCduYW1lJyksIG5ld1ZhbHVlKVxuICAgICAgICA6IG5ld1ZhbHVlO1xuICAgICAgY29uc3QgcGFyc2VkTWV0YWRhdGEgPSB7XG4gICAgICAgIFtjb2xsZWN0aW9uTmFtZV06IE9iamVjdC5hc3NpZ24obWV0YWRhdGEgPyBtZXRhZGF0YS50b0pTKCkgOiB7fSwgbmV3TWV0YWRhdGEgfHwge30pLFxuICAgICAgfTtcbiAgICAgIG9uQ2hhbmdlKHZhbHVlLnNldChpbmRleCwgbmV3T2JqZWN0VmFsdWUpLCBwYXJzZWRNZXRhZGF0YSk7XG4gICAgfTtcbiAgfVxuXG4gIGhhbmRsZVJlbW92ZSA9IChpbmRleCwgZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgeyB2YWx1ZSwgbWV0YWRhdGEsIG9uQ2hhbmdlLCBmaWVsZCwgY2xlYXJGaWVsZEVycm9ycyB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBjb2xsZWN0aW9uTmFtZSA9IGZpZWxkLmdldCgnbmFtZScpO1xuICAgIGNvbnN0IGlzU2luZ2xlRmllbGQgPSB0aGlzLmdldFZhbHVlVHlwZSgpID09PSB2YWx1ZVR5cGVzLlNJTkdMRTtcblxuICAgIGNvbnN0IG1ldGFkYXRhUmVtb3ZlUGF0aCA9IGlzU2luZ2xlRmllbGQgPyB2YWx1ZS5nZXQoaW5kZXgpIDogdmFsdWUuZ2V0KGluZGV4KS52YWx1ZVNlcSgpO1xuICAgIGNvbnN0IHBhcnNlZE1ldGFkYXRhID1cbiAgICAgIG1ldGFkYXRhICYmICFtZXRhZGF0YS5pc0VtcHR5KClcbiAgICAgICAgPyB7IFtjb2xsZWN0aW9uTmFtZV06IG1ldGFkYXRhLnJlbW92ZUluKG1ldGFkYXRhUmVtb3ZlUGF0aCkgfVxuICAgICAgICA6IG1ldGFkYXRhO1xuXG4gICAgaXRlbXNDb2xsYXBzZWQuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAvLyBjbGVhciB2YWxpZGF0aW9uc1xuICAgIHRoaXMudmFsaWRhdGlvbnMgPSBbXTtcblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXNDb2xsYXBzZWQ6IFsuLi5pdGVtc0NvbGxhcHNlZF0sXG4gICAgICBrZXlzOiBBcnJheS5mcm9tKHsgbGVuZ3RoOiB2YWx1ZS5zaXplIC0gMSB9LCAoKSA9PiB1dWlkKCkpLFxuICAgIH0pO1xuXG4gICAgb25DaGFuZ2UodmFsdWUucmVtb3ZlKGluZGV4KSwgcGFyc2VkTWV0YWRhdGEpO1xuICAgIGNsZWFyRmllbGRFcnJvcnMoKTtcbiAgfTtcblxuICBoYW5kbGVJdGVtQ29sbGFwc2VUb2dnbGUgPSAoaW5kZXgsIGV2ZW50KSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IG5ld0l0ZW1zQ29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWQubWFwKChjb2xsYXBzZWQsIGl0ZW1JbmRleCkgPT4ge1xuICAgICAgaWYgKGluZGV4ID09PSBpdGVtSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuICFjb2xsYXBzZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29sbGFwc2VkO1xuICAgIH0pO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXNDb2xsYXBzZWQ6IG5ld0l0ZW1zQ29sbGFwc2VkLFxuICAgIH0pO1xuICB9O1xuXG4gIGhhbmRsZUNvbGxhcHNlQWxsVG9nZ2xlID0gZSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHsgdmFsdWUsIGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQsIGxpc3RDb2xsYXBzZWQgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgbWluaW1pemVDb2xsYXBzZWRJdGVtcyA9IGZpZWxkLmdldCgnbWluaW1pemVfY29sbGFwc2VkJywgZmFsc2UpO1xuICAgIGNvbnN0IGxpc3RDb2xsYXBzZWRCeURlZmF1bHQgPSBmaWVsZC5nZXQoJ2NvbGxhcHNlZCcsIHRydWUpO1xuICAgIGNvbnN0IGFsbEl0ZW1zQ29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWQuZXZlcnkodmFsID0+IHZhbCA9PT0gdHJ1ZSk7XG5cbiAgICBpZiAobWluaW1pemVDb2xsYXBzZWRJdGVtcykge1xuICAgICAgbGV0IHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkO1xuICAgICAgLy8gT25seSBhbGxvdyBjb2xsYXBzaW5nIGFsbCBpdGVtcyBpbiB0aGlzIG1vZGUgYnV0IG5vdCBvcGVuaW5nIGFsbCBhdCBvbmNlXG4gICAgICBpZiAoIWxpc3RDb2xsYXBzZWQgfHwgIWxpc3RDb2xsYXBzZWRCeURlZmF1bHQpIHtcbiAgICAgICAgdXBkYXRlZEl0ZW1zQ29sbGFwc2VkID0gQXJyYXkodmFsdWUuc2l6ZSkuZmlsbCghbGlzdENvbGxhcHNlZCk7XG4gICAgICB9XG4gICAgICB0aGlzLnNldFN0YXRlKHsgbGlzdENvbGxhcHNlZDogIWxpc3RDb2xsYXBzZWQsIGl0ZW1zQ29sbGFwc2VkOiB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBpdGVtc0NvbGxhcHNlZDogQXJyYXkodmFsdWUuc2l6ZSkuZmlsbCghYWxsSXRlbXNDb2xsYXBzZWQpIH0pO1xuICAgIH1cbiAgfTtcblxuICBvYmplY3RMYWJlbChpdGVtKSB7XG4gICAgY29uc3QgeyBmaWVsZCwgZW50cnkgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgdmFsdWVUeXBlID0gdGhpcy5nZXRWYWx1ZVR5cGUoKTtcbiAgICBzd2l0Y2ggKHZhbHVlVHlwZSkge1xuICAgICAgY2FzZSB2YWx1ZVR5cGVzLk1JWEVEOiB7XG4gICAgICAgIGlmICghdmFsaWRhdGVJdGVtKGZpZWxkLCBpdGVtKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpdGVtVHlwZSA9IGdldFR5cGVkRmllbGRGb3JWYWx1ZShmaWVsZCwgaXRlbSk7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gaXRlbVR5cGUuZ2V0KCdsYWJlbCcsIGl0ZW1UeXBlLmdldCgnbmFtZScpKTtcbiAgICAgICAgLy8gZWFjaCB0eXBlIGNhbiBoYXZlIGl0cyBvd24gc3VtbWFyeSwgYnV0IGRlZmF1bHQgdG8gdGhlIGxpc3Qgc3VtbWFyeSBpZiBleGlzdHNcbiAgICAgICAgY29uc3Qgc3VtbWFyeSA9IGl0ZW1UeXBlLmdldCgnc3VtbWFyeScsIGZpZWxkLmdldCgnc3VtbWFyeScpKTtcbiAgICAgICAgY29uc3QgbGFiZWxSZXR1cm4gPSBzdW1tYXJ5ID8gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgbGFiZWwsIGl0ZW0pIDogbGFiZWw7XG4gICAgICAgIHJldHVybiBsYWJlbFJldHVybjtcbiAgICAgIH1cbiAgICAgIGNhc2UgdmFsdWVUeXBlcy5TSU5HTEU6IHtcbiAgICAgICAgY29uc3Qgc2luZ2xlRmllbGQgPSBmaWVsZC5nZXQoJ2ZpZWxkJyk7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gc2luZ2xlRmllbGQuZ2V0KCdsYWJlbCcsIHNpbmdsZUZpZWxkLmdldCgnbmFtZScpKTtcbiAgICAgICAgY29uc3Qgc3VtbWFyeSA9IGZpZWxkLmdldCgnc3VtbWFyeScpO1xuICAgICAgICBjb25zdCBkYXRhID0gZnJvbUpTKHsgW3NpbmdsZUZpZWxkLmdldCgnbmFtZScpXTogaXRlbSB9KTtcbiAgICAgICAgY29uc3QgbGFiZWxSZXR1cm4gPSBzdW1tYXJ5ID8gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgbGFiZWwsIGRhdGEpIDogbGFiZWw7XG4gICAgICAgIHJldHVybiBsYWJlbFJldHVybjtcbiAgICAgIH1cbiAgICAgIGNhc2UgdmFsdWVUeXBlcy5NVUxUSVBMRToge1xuICAgICAgICBpZiAoIXZhbGlkYXRlSXRlbShmaWVsZCwgaXRlbSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbXVsdGlGaWVsZHMgPSBmaWVsZC5nZXQoJ2ZpZWxkcycpO1xuICAgICAgICBjb25zdCBsYWJlbEZpZWxkID0gbXVsdGlGaWVsZHMgJiYgbXVsdGlGaWVsZHMuZmlyc3QoKTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpdGVtLmdldChsYWJlbEZpZWxkLmdldCgnbmFtZScpKTtcbiAgICAgICAgY29uc3Qgc3VtbWFyeSA9IGZpZWxkLmdldCgnc3VtbWFyeScpO1xuICAgICAgICBjb25zdCBsYWJlbFJldHVybiA9IHN1bW1hcnkgPyBoYW5kbGVTdW1tYXJ5KHN1bW1hcnksIGVudHJ5LCB2YWx1ZSwgaXRlbSkgOiB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIChsYWJlbFJldHVybiB8fCBgTm8gJHtsYWJlbEZpZWxkLmdldCgnbmFtZScpfWApLnRvU3RyaW5nKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIG9uU29ydEVuZCA9ICh7IG9sZEluZGV4LCBuZXdJbmRleCB9KSA9PiB7XG4gICAgY29uc3QgeyB2YWx1ZSwgY2xlYXJGaWVsZEVycm9ycyB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkLCBrZXlzIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgLy8gVXBkYXRlIHZhbHVlXG4gICAgY29uc3QgaXRlbSA9IHZhbHVlLmdldChvbGRJbmRleCk7XG4gICAgY29uc3QgbmV3VmFsdWUgPSB2YWx1ZS5kZWxldGUob2xkSW5kZXgpLmluc2VydChuZXdJbmRleCwgaXRlbSk7XG4gICAgdGhpcy5wcm9wcy5vbkNoYW5nZShuZXdWYWx1ZSk7XG5cbiAgICAvLyBVcGRhdGUgY29sbGFwc2luZ1xuICAgIGNvbnN0IGNvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkW29sZEluZGV4XTtcbiAgICBpdGVtc0NvbGxhcHNlZC5zcGxpY2Uob2xkSW5kZXgsIDEpO1xuICAgIGNvbnN0IHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCA9IFsuLi5pdGVtc0NvbGxhcHNlZF07XG4gICAgdXBkYXRlZEl0ZW1zQ29sbGFwc2VkLnNwbGljZShuZXdJbmRleCwgMCwgY29sbGFwc2VkKTtcblxuICAgIC8vIFJlc2V0IGl0ZW0gdG8gZW5zdXJlIHVwZGF0ZWQgc3RhdGVcbiAgICBjb25zdCB1cGRhdGVkS2V5cyA9IGtleXMubWFwKChrZXksIGtleUluZGV4KSA9PiB7XG4gICAgICBpZiAoa2V5SW5kZXggPT09IG9sZEluZGV4IHx8IGtleUluZGV4ID09PSBuZXdJbmRleCkge1xuICAgICAgICByZXR1cm4gdXVpZCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGtleTtcbiAgICB9KTtcbiAgICB0aGlzLnNldFN0YXRlKHsgaXRlbXNDb2xsYXBzZWQ6IHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCwga2V5czogdXBkYXRlZEtleXMgfSk7XG5cbiAgICAvL2NsZWFyIGVycm9yIGZpZWxkcyBhbmQgcmVtb3ZlIG9sZCB2YWxpZGF0aW9uc1xuICAgIGNsZWFyRmllbGRFcnJvcnMoKTtcbiAgICB0aGlzLnZhbGlkYXRpb25zID0gdGhpcy52YWxpZGF0aW9ucy5maWx0ZXIoaXRlbSA9PiB1cGRhdGVkS2V5cy5pbmNsdWRlcyhpdGVtLmtleSkpO1xuICB9O1xuXG4gIGhhc0Vycm9yID0gaW5kZXggPT4ge1xuICAgIGNvbnN0IHsgZmllbGRzRXJyb3JzIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChmaWVsZHNFcnJvcnMgJiYgZmllbGRzRXJyb3JzLnNpemUgPiAwKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhmaWVsZHNFcnJvcnMudG9KUygpKS5zb21lKGFyciA9PlxuICAgICAgICBhcnIuc29tZShlcnIgPT4gZXJyLnBhcmVudElkcyAmJiBlcnIucGFyZW50SWRzLmluY2x1ZGVzKHRoaXMuc3RhdGUua2V5c1tpbmRleF0pKSxcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9kaXNwbGF5LW5hbWVcbiAgcmVuZGVySXRlbSA9IChpdGVtLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGNsYXNzTmFtZVdyYXBwZXIsXG4gICAgICBlZGl0b3JDb250cm9sLFxuICAgICAgb25WYWxpZGF0ZU9iamVjdCxcbiAgICAgIG1ldGFkYXRhLFxuICAgICAgY2xlYXJGaWVsZEVycm9ycyxcbiAgICAgIGZpZWxkc0Vycm9ycyxcbiAgICAgIGNvbnRyb2xSZWYsXG4gICAgICByZXNvbHZlV2lkZ2V0LFxuICAgICAgcGFyZW50SWRzLFxuICAgICAgZm9ySUQsXG4gICAgICB0LFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCwga2V5cyB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBjb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZFtpbmRleF07XG4gICAgY29uc3Qga2V5ID0ga2V5c1tpbmRleF07XG4gICAgbGV0IGZpZWxkID0gdGhpcy5wcm9wcy5maWVsZDtcbiAgICBjb25zdCBoYXNFcnJvciA9IHRoaXMuaGFzRXJyb3IoaW5kZXgpO1xuICAgIGNvbnN0IGlzVmFyaWFibGVUeXBlc0xpc3QgPSB0aGlzLmdldFZhbHVlVHlwZSgpID09PSB2YWx1ZVR5cGVzLk1JWEVEO1xuICAgIGlmIChpc1ZhcmlhYmxlVHlwZXNMaXN0KSB7XG4gICAgICBmaWVsZCA9IGdldFR5cGVkRmllbGRGb3JWYWx1ZShmaWVsZCwgaXRlbSk7XG4gICAgICBpZiAoIWZpZWxkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlckVycm9uZW91c1R5cGVkSXRlbShpbmRleCwgaXRlbSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8U29ydGFibGVMaXN0SXRlbVxuICAgICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBjb2xsYXBzZWQgJiYgc3R5bGVzLmxpc3RDb250cm9sSXRlbUNvbGxhcHNlZF19XG4gICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICA+XG4gICAgICAgIHtpc1ZhcmlhYmxlVHlwZXNMaXN0ICYmIChcbiAgICAgICAgICA8TGFiZWxDb21wb25lbnRcbiAgICAgICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgICAgIGlzQWN0aXZlPXtmYWxzZX1cbiAgICAgICAgICAgIGhhc0Vycm9ycz17aGFzRXJyb3J9XG4gICAgICAgICAgICB1bmlxdWVGaWVsZElkPXt0aGlzLnVuaXF1ZUZpZWxkSWR9XG4gICAgICAgICAgICBpc0ZpZWxkT3B0aW9uYWw9e2ZpZWxkLmdldCgncmVxdWlyZWQnKSA9PT0gZmFsc2V9XG4gICAgICAgICAgICB0PXt0fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIDxTdHlsZWRMaXN0SXRlbVRvcEJhclxuICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICAgIG9uQ29sbGFwc2VUb2dnbGU9e3BhcnRpYWwodGhpcy5oYW5kbGVJdGVtQ29sbGFwc2VUb2dnbGUsIGluZGV4KX1cbiAgICAgICAgICBvblJlbW92ZT17cGFydGlhbCh0aGlzLmhhbmRsZVJlbW92ZSwgaW5kZXgpfVxuICAgICAgICAgIGRyYWdIYW5kbGVIT0M9e1NvcnRhYmxlSGFuZGxlfVxuICAgICAgICAgIGRhdGEtdGVzdGlkPXtgc3R5bGVkLWxpc3QtaXRlbS10b3AtYmFyLSR7a2V5fWB9XG4gICAgICAgIC8+XG4gICAgICAgIDxOZXN0ZWRPYmplY3RMYWJlbCBjb2xsYXBzZWQ9e2NvbGxhcHNlZH0gZXJyb3I9e2hhc0Vycm9yfT5cbiAgICAgICAgICB7dGhpcy5vYmplY3RMYWJlbChpdGVtKX1cbiAgICAgICAgPC9OZXN0ZWRPYmplY3RMYWJlbD5cbiAgICAgICAgPENsYXNzTmFtZXM+XG4gICAgICAgICAgeyh7IGNzcywgY3ggfSkgPT4gKFxuICAgICAgICAgICAgPE9iamVjdENvbnRyb2xcbiAgICAgICAgICAgICAgY2xhc3NOYW1lV3JhcHBlcj17Y3goY2xhc3NOYW1lV3JhcHBlciwge1xuICAgICAgICAgICAgICAgIFtjc3NgXG4gICAgICAgICAgICAgICAgICAke3N0eWxlU3RyaW5ncy5jb2xsYXBzZWRPYmplY3RDb250cm9sfTtcbiAgICAgICAgICAgICAgICBgXTogY29sbGFwc2VkLFxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgdmFsdWU9e2l0ZW19XG4gICAgICAgICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgICAgICAgb25DaGFuZ2VPYmplY3Q9e3RoaXMuaGFuZGxlQ2hhbmdlRm9yKGluZGV4KX1cbiAgICAgICAgICAgICAgZWRpdG9yQ29udHJvbD17ZWRpdG9yQ29udHJvbH1cbiAgICAgICAgICAgICAgcmVzb2x2ZVdpZGdldD17cmVzb2x2ZVdpZGdldH1cbiAgICAgICAgICAgICAgbWV0YWRhdGE9e21ldGFkYXRhfVxuICAgICAgICAgICAgICBmb3JMaXN0XG4gICAgICAgICAgICAgIG9uVmFsaWRhdGVPYmplY3Q9e29uVmFsaWRhdGVPYmplY3R9XG4gICAgICAgICAgICAgIGNsZWFyRmllbGRFcnJvcnM9e2NsZWFyRmllbGRFcnJvcnN9XG4gICAgICAgICAgICAgIGZpZWxkc0Vycm9ycz17ZmllbGRzRXJyb3JzfVxuICAgICAgICAgICAgICByZWY9e3RoaXMucHJvY2Vzc0NvbnRyb2xSZWZ9XG4gICAgICAgICAgICAgIGNvbnRyb2xSZWY9e2NvbnRyb2xSZWZ9XG4gICAgICAgICAgICAgIHZhbGlkYXRpb25LZXk9e2tleX1cbiAgICAgICAgICAgICAgY29sbGFwc2VkPXtjb2xsYXBzZWR9XG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgb2JqZWN0LWNvbnRyb2wtJHtrZXl9YH1cbiAgICAgICAgICAgICAgaGFzRXJyb3I9e2hhc0Vycm9yfVxuICAgICAgICAgICAgICBwYXJlbnRJZHM9e1suLi5wYXJlbnRJZHMsIGZvcklELCBrZXldfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L0NsYXNzTmFtZXM+XG4gICAgICA8L1NvcnRhYmxlTGlzdEl0ZW0+XG4gICAgKTtcbiAgfTtcblxuICByZW5kZXJFcnJvbmVvdXNUeXBlZEl0ZW0oaW5kZXgsIGl0ZW0pIHtcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMucHJvcHMuZmllbGQ7XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZ2V0RXJyb3JNZXNzYWdlRm9yVHlwZWRGaWVsZEFuZFZhbHVlKGZpZWxkLCBpdGVtKTtcbiAgICBjb25zdCBrZXkgPSBgaXRlbS0ke2luZGV4fWA7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTb3J0YWJsZUxpc3RJdGVtXG4gICAgICAgIGNzcz17W3N0eWxlcy5saXN0Q29udHJvbEl0ZW0sIHN0eWxlcy5saXN0Q29udHJvbEl0ZW1Db2xsYXBzZWRdfVxuICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAgIGtleT17a2V5fVxuICAgICAgPlxuICAgICAgICA8U3R5bGVkTGlzdEl0ZW1Ub3BCYXJcbiAgICAgICAgICBvbkNvbGxhcHNlVG9nZ2xlPXtudWxsfVxuICAgICAgICAgIG9uUmVtb3ZlPXtwYXJ0aWFsKHRoaXMuaGFuZGxlUmVtb3ZlLCBpbmRleCwga2V5KX1cbiAgICAgICAgICBkcmFnSGFuZGxlSE9DPXtTb3J0YWJsZUhhbmRsZX1cbiAgICAgICAgLz5cbiAgICAgICAgPE5lc3RlZE9iamVjdExhYmVsIGNvbGxhcHNlZD17dHJ1ZX0gZXJyb3I9e3RydWV9PlxuICAgICAgICAgIHtlcnJvck1lc3NhZ2V9XG4gICAgICAgIDwvTmVzdGVkT2JqZWN0TGFiZWw+XG4gICAgICA8L1NvcnRhYmxlTGlzdEl0ZW0+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlckxpc3RDb250cm9sKCkge1xuICAgIGNvbnN0IHsgdmFsdWUsIGZvcklELCBmaWVsZCwgY2xhc3NOYW1lV3JhcHBlciwgdCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkLCBsaXN0Q29sbGFwc2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IGl0ZW1zID0gdmFsdWUgfHwgTGlzdCgpO1xuICAgIGNvbnN0IGxhYmVsID0gZmllbGQuZ2V0KCdsYWJlbCcsIGZpZWxkLmdldCgnbmFtZScpKTtcbiAgICBjb25zdCBsYWJlbFNpbmd1bGFyID0gZmllbGQuZ2V0KCdsYWJlbF9zaW5ndWxhcicpIHx8IGZpZWxkLmdldCgnbGFiZWwnLCBmaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgY29uc3QgbGlzdExhYmVsID0gaXRlbXMuc2l6ZSA9PT0gMSA/IGxhYmVsU2luZ3VsYXIudG9Mb3dlckNhc2UoKSA6IGxhYmVsLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgbWluaW1pemVDb2xsYXBzZWRJdGVtcyA9IGZpZWxkLmdldCgnbWluaW1pemVfY29sbGFwc2VkJywgZmFsc2UpO1xuICAgIGNvbnN0IGFsbEl0ZW1zQ29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWQuZXZlcnkodmFsID0+IHZhbCA9PT0gdHJ1ZSk7XG4gICAgY29uc3Qgc2VsZkNvbGxhcHNlZCA9IGFsbEl0ZW1zQ29sbGFwc2VkICYmIChsaXN0Q29sbGFwc2VkIHx8ICFtaW5pbWl6ZUNvbGxhcHNlZEl0ZW1zKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8Q2xhc3NOYW1lcz5cbiAgICAgICAgeyh7IGN4LCBjc3MgfSkgPT4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGlkPXtmb3JJRH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goXG4gICAgICAgICAgICAgIGNsYXNzTmFtZVdyYXBwZXIsXG4gICAgICAgICAgICAgIGNzc2BcbiAgICAgICAgICAgICAgICAke3N0eWxlU3RyaW5ncy5vYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXJ9XG4gICAgICAgICAgICAgIGAsXG4gICAgICAgICAgICApfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxPYmplY3RXaWRnZXRUb3BCYXJcbiAgICAgICAgICAgICAgYWxsb3dBZGQ9e2ZpZWxkLmdldCgnYWxsb3dfYWRkJywgdHJ1ZSl9XG4gICAgICAgICAgICAgIG9uQWRkPXt0aGlzLmhhbmRsZUFkZH1cbiAgICAgICAgICAgICAgdHlwZXM9e2ZpZWxkLmdldChUWVBFU19LRVksIG51bGwpfVxuICAgICAgICAgICAgICBvbkFkZFR5cGU9e3R5cGUgPT4gdGhpcy5oYW5kbGVBZGRUeXBlKHR5cGUsIHJlc29sdmVGaWVsZEtleVR5cGUoZmllbGQpKX1cbiAgICAgICAgICAgICAgaGVhZGluZz17YCR7aXRlbXMuc2l6ZX0gJHtsaXN0TGFiZWx9YH1cbiAgICAgICAgICAgICAgbGFiZWw9e2xhYmVsU2luZ3VsYXIudG9Mb3dlckNhc2UoKX1cbiAgICAgICAgICAgICAgb25Db2xsYXBzZVRvZ2dsZT17dGhpcy5oYW5kbGVDb2xsYXBzZUFsbFRvZ2dsZX1cbiAgICAgICAgICAgICAgY29sbGFwc2VkPXtzZWxmQ29sbGFwc2VkfVxuICAgICAgICAgICAgICB0PXt0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHsoIXNlbGZDb2xsYXBzZWQgfHwgIW1pbmltaXplQ29sbGFwc2VkSXRlbXMpICYmIChcbiAgICAgICAgICAgICAgPFNvcnRhYmxlTGlzdFxuICAgICAgICAgICAgICAgIGl0ZW1zPXtpdGVtc31cbiAgICAgICAgICAgICAgICByZW5kZXJJdGVtPXt0aGlzLnJlbmRlckl0ZW19XG4gICAgICAgICAgICAgICAgb25Tb3J0RW5kPXt0aGlzLm9uU29ydEVuZH1cbiAgICAgICAgICAgICAgICB1c2VEcmFnSGFuZGxlXG4gICAgICAgICAgICAgICAgbG9ja0F4aXM9XCJ5XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L0NsYXNzTmFtZXM+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlcklucHV0KCkge1xuICAgIGNvbnN0IHsgZm9ySUQsIGNsYXNzTmFtZVdyYXBwZXIgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIHJldHVybiAoXG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBpZD17Zm9ySUR9XG4gICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICBvbkZvY3VzPXt0aGlzLmhhbmRsZUZvY3VzfVxuICAgICAgICBvbkJsdXI9e3RoaXMuaGFuZGxlQmx1cn1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVXcmFwcGVyfVxuICAgICAgLz5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmdldFZhbHVlVHlwZSgpICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJMaXN0Q29udHJvbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJJbnB1dCgpO1xuICAgIH1cbiAgfVxufVxuIl19 */"));
|
|
41
|
+
const styleStrings = {
|
|
42
|
+
collapsedObjectControl: `
|
|
43
|
+
display: none;
|
|
44
|
+
`,
|
|
45
|
+
objectWidgetTopBarContainer: `
|
|
46
|
+
padding: ${_decapCmsUiDefault.lengths.objectWidgetTopBarContainerPadding};
|
|
47
|
+
`
|
|
48
|
+
};
|
|
49
|
+
const styles = {
|
|
50
|
+
listControlItem: process.env.NODE_ENV === "production" ? {
|
|
51
|
+
name: "1pb8r5b-listControlItem",
|
|
52
|
+
styles: "margin-top:18px;&:first-of-type{margin-top:26px;};label:listControlItem;"
|
|
53
|
+
} : {
|
|
54
|
+
name: "1pb8r5b-listControlItem",
|
|
55
|
+
styles: "margin-top:18px;&:first-of-type{margin-top:26px;};label:listControlItem;",
|
|
56
|
+
map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF1RHNCIiwiZmlsZSI6Ii4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IEltbXV0YWJsZVByb3BUeXBlcyBmcm9tICdyZWFjdC1pbW11dGFibGUtcHJvcHR5cGVzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCB7IGNzcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL2NvcmUnO1xuaW1wb3J0IHsgTGlzdCwgTWFwLCBmcm9tSlMgfSBmcm9tICdpbW11dGFibGUnO1xuaW1wb3J0IHsgcGFydGlhbCwgaXNFbXB0eSwgdW5pcXVlSWQgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHV1aWQgZnJvbSAndXVpZC92NCc7XG5pbXBvcnQgeyBTb3J0YWJsZUNvbnRhaW5lciwgU29ydGFibGVFbGVtZW50LCBTb3J0YWJsZUhhbmRsZSB9IGZyb20gJ3JlYWN0LXNvcnRhYmxlLWhvYyc7XG5pbXBvcnQgRGVjYXBDbXNXaWRnZXRPYmplY3QgZnJvbSAnZGVjYXAtY21zLXdpZGdldC1vYmplY3QnO1xuaW1wb3J0IHtcbiAgTGlzdEl0ZW1Ub3BCYXIsXG4gIE9iamVjdFdpZGdldFRvcEJhcixcbiAgY29sb3JzLFxuICBsZW5ndGhzLFxuICBGaWVsZExhYmVsLFxufSBmcm9tICdkZWNhcC1jbXMtdWktZGVmYXVsdCc7XG5pbXBvcnQgeyBzdHJpbmdUZW1wbGF0ZSwgdmFsaWRhdGlvbnMgfSBmcm9tICdkZWNhcC1jbXMtbGliLXdpZGdldHMnO1xuXG5pbXBvcnQge1xuICBUWVBFU19LRVksXG4gIGdldFR5cGVkRmllbGRGb3JWYWx1ZSxcbiAgcmVzb2x2ZUZpZWxkS2V5VHlwZSxcbiAgZ2V0RXJyb3JNZXNzYWdlRm9yVHlwZWRGaWVsZEFuZFZhbHVlLFxufSBmcm9tICcuL3R5cGVkTGlzdEhlbHBlcnMnO1xuXG5jb25zdCBPYmplY3RDb250cm9sID0gRGVjYXBDbXNXaWRnZXRPYmplY3QuY29udHJvbENvbXBvbmVudDtcblxuY29uc3QgTGlzdEl0ZW0gPSBzdHlsZWQuZGl2KCk7XG5cbmNvbnN0IFNvcnRhYmxlTGlzdEl0ZW0gPSBTb3J0YWJsZUVsZW1lbnQoTGlzdEl0ZW0pO1xuXG5jb25zdCBTdHlsZWRMaXN0SXRlbVRvcEJhciA9IHN0eWxlZChMaXN0SXRlbVRvcEJhcilgXG4gIGJhY2tncm91bmQtY29sb3I6ICR7Y29sb3JzLnRleHRGaWVsZEJvcmRlcn07XG5gO1xuXG5jb25zdCBOZXN0ZWRPYmplY3RMYWJlbCA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6ICR7cHJvcHMgPT4gKHByb3BzLmNvbGxhcHNlZCA/ICdibG9jaycgOiAnbm9uZScpfTtcbiAgYm9yZGVyLXRvcDogMDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gKHByb3BzLmVycm9yID8gY29sb3JzLmVycm9yVGV4dCA6ICdpbmhlcml0Jyl9O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAke2NvbG9ycy50ZXh0RmllbGRCb3JkZXJ9O1xuICBwYWRkaW5nOiAxM3B4O1xuICBib3JkZXItcmFkaXVzOiAwIDAgJHtsZW5ndGhzLmJvcmRlclJhZGl1c30gJHtsZW5ndGhzLmJvcmRlclJhZGl1c307XG5gO1xuXG5jb25zdCBzdHlsZVN0cmluZ3MgPSB7XG4gIGNvbGxhcHNlZE9iamVjdENvbnRyb2w6IGBcbiAgICBkaXNwbGF5OiBub25lO1xuICBgLFxuICBvYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXI6IGBcbiAgICBwYWRkaW5nOiAke2xlbmd0aHMub2JqZWN0V2lkZ2V0VG9wQmFyQ29udGFpbmVyUGFkZGluZ307XG4gIGAsXG59O1xuXG5jb25zdCBzdHlsZXMgPSB7XG4gIGxpc3RDb250cm9sSXRlbTogY3NzYFxuICAgIG1hcmdpbi10b3A6IDE4cHg7XG5cbiAgICAmOmZpcnN0LW9mLXR5cGUge1xuICAgICAgbWFyZ2luLXRvcDogMjZweDtcbiAgICB9XG4gIGAsXG4gIGxpc3RDb250cm9sSXRlbUNvbGxhcHNlZDogY3NzYFxuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICBgLFxufTtcblxuY29uc3QgU29ydGFibGVMaXN0ID0gU29ydGFibGVDb250YWluZXIoKHsgaXRlbXMsIHJlbmRlckl0ZW0gfSkgPT4ge1xuICByZXR1cm4gPGRpdj57aXRlbXMubWFwKHJlbmRlckl0ZW0pfTwvZGl2Pjtcbn0pO1xuXG5jb25zdCB2YWx1ZVR5cGVzID0ge1xuICBTSU5HTEU6ICdTSU5HTEUnLFxuICBNVUxUSVBMRTogJ01VTFRJUExFJyxcbiAgTUlYRUQ6ICdNSVhFRCcsXG59O1xuXG5mdW5jdGlvbiBoYW5kbGVTdW1tYXJ5KHN1bW1hcnksIGVudHJ5LCBsYWJlbCwgaXRlbSkge1xuICBjb25zdCBkYXRhID0gc3RyaW5nVGVtcGxhdGUuYWRkRmlsZVRlbXBsYXRlRmllbGRzKFxuICAgIGVudHJ5LmdldCgncGF0aCcpLFxuICAgIGl0ZW0uc2V0KCdmaWVsZHMubGFiZWwnLCBsYWJlbCksXG4gICk7XG4gIHJldHVybiBzdHJpbmdUZW1wbGF0ZS5jb21waWxlU3RyaW5nVGVtcGxhdGUoc3VtbWFyeSwgbnVsbCwgJycsIGRhdGEpO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUl0ZW0oZmllbGQsIGl0ZW0pIHtcbiAgaWYgKCFNYXAuaXNNYXAoaXRlbSkpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgJyR7ZmllbGQuZ2V0KCduYW1lJyl9JyBmaWVsZCBpdGVtIHZhbHVlIHZhbHVlIHNob3VsZCBiZSBhIG1hcCBidXQgaXMgYSAnJHt0eXBlb2YgaXRlbX0nYCxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gTGFiZWxDb21wb25lbnQoeyBmaWVsZCwgaXNBY3RpdmUsIGhhc0Vycm9ycywgdW5pcXVlRmllbGRJZCwgaXNGaWVsZE9wdGlvbmFsLCB0IH0pIHtcbiAgY29uc3QgbGFiZWwgPSBgJHtmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpfWA7XG4gIHJldHVybiAoXG4gICAgPEZpZWxkTGFiZWwgaXNBY3RpdmU9e2lzQWN0aXZlfSBoYXNFcnJvcnM9e2hhc0Vycm9yc30gaHRtbEZvcj17dW5pcXVlRmllbGRJZH0+XG4gICAgICB7bGFiZWx9IHtgJHtpc0ZpZWxkT3B0aW9uYWwgPyBgICgke3QoJ2VkaXRvci5lZGl0b3JDb250cm9sLmZpZWxkLm9wdGlvbmFsJyl9KWAgOiAnJ31gfVxuICAgIDwvRmllbGRMYWJlbD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlzdENvbnRyb2wgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICB2YWxpZGF0aW9ucyA9IFtdO1xuXG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgbWV0YWRhdGE6IEltbXV0YWJsZVByb3BUeXBlcy5tYXAsXG4gICAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25DaGFuZ2VPYmplY3Q6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25WYWxpZGF0ZU9iamVjdDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICB2YWxpZGF0ZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICB2YWx1ZTogSW1tdXRhYmxlUHJvcFR5cGVzLmxpc3QsXG4gICAgZmllbGQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgZm9ySUQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY29udHJvbFJlZjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgbWVkaWFQYXRoczogSW1tdXRhYmxlUHJvcFR5cGVzLm1hcC5pc1JlcXVpcmVkLFxuICAgIGdldEFzc2V0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uT3Blbk1lZGlhTGlicmFyeTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvbkFkZEFzc2V0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uUmVtb3ZlSW5zZXJ0ZWRNZWRpYTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBjbGFzc05hbWVXcmFwcGVyOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgc2V0QWN0aXZlU3R5bGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgc2V0SW5hY3RpdmVTdHlsZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBlZGl0b3JDb250cm9sOiBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZCxcbiAgICByZXNvbHZlV2lkZ2V0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGNsZWFyRmllbGRFcnJvcnM6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgZmllbGRzRXJyb3JzOiBJbW11dGFibGVQcm9wVHlwZXMubWFwLmlzUmVxdWlyZWQsXG4gICAgZW50cnk6IEltbXV0YWJsZVByb3BUeXBlcy5tYXAuaXNSZXF1aXJlZCxcbiAgICB0OiBQcm9wVHlwZXMuZnVuYyxcbiAgfTtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIHZhbHVlOiBMaXN0KCksXG4gICAgcGFyZW50SWRzOiBbXSxcbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICBjb25zdCB7IGZpZWxkLCB2YWx1ZSB9ID0gcHJvcHM7XG4gICAgY29uc3QgbGlzdENvbGxhcHNlZCA9IGZpZWxkLmdldCgnY29sbGFwc2VkJywgdHJ1ZSk7XG4gICAgY29uc3QgaXRlbXNDb2xsYXBzZWQgPSAodmFsdWUgJiYgQXJyYXkodmFsdWUuc2l6ZSkuZmlsbChsaXN0Q29sbGFwc2VkKSkgfHwgW107XG4gICAgY29uc3Qga2V5cyA9ICh2YWx1ZSAmJiBBcnJheS5mcm9tKHsgbGVuZ3RoOiB2YWx1ZS5zaXplIH0sICgpID0+IHV1aWQoKSkpIHx8IFtdO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGxpc3RDb2xsYXBzZWQsXG4gICAgICBpdGVtc0NvbGxhcHNlZCxcbiAgICAgIHZhbHVlOiB0aGlzLnZhbHVlVG9TdHJpbmcodmFsdWUpLFxuICAgICAga2V5cyxcbiAgICB9O1xuICB9XG5cbiAgdmFsdWVUb1N0cmluZyA9IHZhbHVlID0+IHtcbiAgICBsZXQgc3RyaW5nVmFsdWU7XG4gICAgaWYgKExpc3QuaXNMaXN0KHZhbHVlKSB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgc3RyaW5nVmFsdWUgPSB2YWx1ZS5qb2luKCcsJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYEV4cGVjdGVkIExpc3QgdmFsdWUgdG8gYmUgYW4gYXJyYXkgYnV0IHJlY2VpdmVkICcke3ZhbHVlfScgd2l0aCB0eXBlIG9mICcke3R5cGVvZiB2YWx1ZX0nLiBQbGVhc2UgY2hlY2sgdGhlIHZhbHVlIHByb3ZpZGVkIHRvIHRoZSAnJHt0aGlzLnByb3BzLmZpZWxkLmdldChcbiAgICAgICAgICAnbmFtZScsXG4gICAgICAgICl9JyBmaWVsZGAsXG4gICAgICApO1xuICAgICAgc3RyaW5nVmFsdWUgPSBTdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gc3RyaW5nVmFsdWUucmVwbGFjZSgvLChbXlxcc118JCkvZywgJywgJDEnKTtcbiAgfTtcblxuICBnZXRWYWx1ZVR5cGUgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoZmllbGQuZ2V0KCdmaWVsZHMnKSkge1xuICAgICAgcmV0dXJuIHZhbHVlVHlwZXMuTVVMVElQTEU7XG4gICAgfSBlbHNlIGlmIChmaWVsZC5nZXQoJ2ZpZWxkJykpIHtcbiAgICAgIHJldHVybiB2YWx1ZVR5cGVzLlNJTkdMRTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkLmdldChUWVBFU19LRVkpKSB7XG4gICAgICByZXR1cm4gdmFsdWVUeXBlcy5NSVhFRDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9O1xuXG4gIHVuaXF1ZUZpZWxkSWQgPSB1bmlxdWVJZChgJHt0aGlzLnByb3BzLmZpZWxkLmdldCgnbmFtZScpfS1maWVsZC1gKTtcbiAgLyoqXG4gICAqIEFsd2F5cyB1cGRhdGUgc28gdGhhdCBlYWNoIG5lc3RlZCB3aWRnZXQgaGFzIHRoZSBvcHRpb24gdG8gdXBkYXRlLiBUaGlzIGlzXG4gICAqIHJlcXVpcmVkIGJlY2F1c2UgQ29udHJvbEhPQyBwcm92aWRlcyBhIGRlZmF1bHQgYHNob3VsZENvbXBvbmVudFVwZGF0ZWBcbiAgICogd2hpY2ggb25seSB1cGRhdGVzIGlmIHRoZSB2YWx1ZSBjaGFuZ2VzLCBidXQgZXZlcnkgd2lkZ2V0IG11c3QgYmUgYWxsb3dlZFxuICAgKiB0byBvdmVycmlkZSB0aGlzLlxuICAgKi9cbiAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaGFuZGxlQ2hhbmdlID0gZSA9PiB7XG4gICAgY29uc3QgeyBvbkNoYW5nZSB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMuc3RhdGUudmFsdWU7XG4gICAgY29uc3QgbmV3VmFsdWUgPSBlLnRhcmdldC52YWx1ZS50cmltKCk7XG4gICAgY29uc3QgbGlzdFZhbHVlID0gbmV3VmFsdWUgPyBuZXdWYWx1ZS5zcGxpdCgnLCcpIDogW107XG4gICAgaWYgKG5ld1ZhbHVlLm1hdGNoKC8sJC8pICYmIG9sZFZhbHVlLm1hdGNoKC8sICQvKSkge1xuICAgICAgbGlzdFZhbHVlLnBvcCgpO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gdGhpcy52YWx1ZVRvU3RyaW5nKGxpc3RWYWx1ZSk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiBwYXJzZWRWYWx1ZSB9KTtcbiAgICBvbkNoYW5nZShMaXN0KGxpc3RWYWx1ZS5tYXAodmFsID0+IHZhbC50cmltKCkpKSk7XG4gIH07XG5cbiAgaGFuZGxlRm9jdXMgPSAoKSA9PiB7XG4gICAgdGhpcy5wcm9wcy5zZXRBY3RpdmVTdHlsZSgpO1xuICB9O1xuXG4gIGhhbmRsZUJsdXIgPSBlID0+IHtcbiAgICBjb25zdCBsaXN0VmFsdWUgPSBlLnRhcmdldC52YWx1ZVxuICAgICAgLnNwbGl0KCcsJylcbiAgICAgIC5tYXAoZWwgPT4gZWwudHJpbSgpKVxuICAgICAgLmZpbHRlcihlbCA9PiBlbCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiB0aGlzLnZhbHVlVG9TdHJpbmcobGlzdFZhbHVlKSB9KTtcbiAgICB0aGlzLnByb3BzLnNldEluYWN0aXZlU3R5bGUoKTtcbiAgfTtcblxuICBoYW5kbGVBZGQgPSBlID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgeyBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBwYXJzZWRWYWx1ZSA9XG4gICAgICB0aGlzLmdldFZhbHVlVHlwZSgpID09PSB2YWx1ZVR5cGVzLlNJTkdMRVxuICAgICAgICA/IHRoaXMuc2luZ2xlRGVmYXVsdCgpXG4gICAgICAgIDogZnJvbUpTKHRoaXMubXVsdGlwbGVEZWZhdWx0KGZpZWxkLmdldCgnZmllbGRzJykpKTtcbiAgICB0aGlzLmFkZEl0ZW0ocGFyc2VkVmFsdWUpO1xuICB9O1xuXG4gIHNpbmdsZURlZmF1bHQgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZmllbGQuZ2V0SW4oWydmaWVsZCcsICdkZWZhdWx0J10sIG51bGwpO1xuICB9O1xuXG4gIG11bHRpcGxlRGVmYXVsdCA9IGZpZWxkcyA9PiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRzRGVmYXVsdChmaWVsZHMpO1xuICB9O1xuXG4gIGhhbmRsZUFkZFR5cGUgPSAodHlwZSwgdHlwZUtleSkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gZnJvbUpTKHRoaXMubWl4ZWREZWZhdWx0KHR5cGVLZXksIHR5cGUpKTtcbiAgICB0aGlzLmFkZEl0ZW0ocGFyc2VkVmFsdWUpO1xuICB9O1xuXG4gIG1peGVkRGVmYXVsdCA9ICh0eXBlS2V5LCB0eXBlKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRUeXBlID0gdGhpcy5wcm9wcy5maWVsZC5nZXQoVFlQRVNfS0VZKS5maW5kKGYgPT4gZi5nZXQoJ25hbWUnKSA9PT0gdHlwZSk7XG4gICAgY29uc3QgZmllbGRzID0gc2VsZWN0ZWRUeXBlLmdldCgnZmllbGRzJykgfHwgW3NlbGVjdGVkVHlwZS5nZXQoJ2ZpZWxkJyldO1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRzRGVmYXVsdChmaWVsZHMsIHsgW3R5cGVLZXldOiB0eXBlIH0pO1xuICB9O1xuXG4gIGdldEZpZWxkc0RlZmF1bHQgPSAoZmllbGRzLCBpbml0aWFsVmFsdWUgPSB7fSkgPT4ge1xuICAgIHJldHVybiBmaWVsZHMucmVkdWNlKChhY2MsIGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IHN1YmZpZWxkcyA9IGl0ZW0uZ2V0KCdmaWVsZCcpIHx8IGl0ZW0uZ2V0KCdmaWVsZHMnKTtcbiAgICAgIGNvbnN0IG9iamVjdCA9IGl0ZW0uZ2V0KCd3aWRnZXQnKSA9PSAnb2JqZWN0JztcbiAgICAgIGNvbnN0IG5hbWUgPSBpdGVtLmdldCgnbmFtZScpO1xuICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gaXRlbS5nZXQoJ2RlZmF1bHQnLCBudWxsKTtcblxuICAgICAgaWYgKExpc3QuaXNMaXN0KHN1YmZpZWxkcykgJiYgb2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IHN1YkRlZmF1bHRWYWx1ZSA9IHRoaXMuZ2V0RmllbGRzRGVmYXVsdChzdWJmaWVsZHMpO1xuICAgICAgICAhaXNFbXB0eShzdWJEZWZhdWx0VmFsdWUpICYmIChhY2NbbmFtZV0gPSBzdWJEZWZhdWx0VmFsdWUpO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfVxuXG4gICAgICBpZiAoTWFwLmlzTWFwKHN1YmZpZWxkcykgJiYgb2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IHN1YkRlZmF1bHRWYWx1ZSA9IHRoaXMuZ2V0RmllbGRzRGVmYXVsdChbc3ViZmllbGRzXSk7XG4gICAgICAgICFpc0VtcHR5KHN1YkRlZmF1bHRWYWx1ZSkgJiYgKGFjY1tuYW1lXSA9IHN1YkRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9XG5cbiAgICAgIGlmIChkZWZhdWx0VmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgYWNjW25hbWVdID0gZGVmYXVsdFZhbHVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIGluaXRpYWxWYWx1ZSk7XG4gIH07XG5cbiAgYWRkSXRlbSA9IHBhcnNlZFZhbHVlID0+IHtcbiAgICBjb25zdCB7IHZhbHVlLCBvbkNoYW5nZSwgZmllbGQgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgYWRkVG9Ub3AgPSBmaWVsZC5nZXQoJ2FkZF90b190b3AnLCBmYWxzZSk7XG5cbiAgICBjb25zdCBpdGVtS2V5ID0gdXVpZCgpO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXNDb2xsYXBzZWQ6IGFkZFRvVG9wXG4gICAgICAgID8gW2ZhbHNlLCAuLi50aGlzLnN0YXRlLml0ZW1zQ29sbGFwc2VkXVxuICAgICAgICA6IFsuLi50aGlzLnN0YXRlLml0ZW1zQ29sbGFwc2VkLCBmYWxzZV0sXG4gICAgICBrZXlzOiBhZGRUb1RvcCA/IFtpdGVtS2V5LCAuLi50aGlzLnN0YXRlLmtleXNdIDogWy4uLnRoaXMuc3RhdGUua2V5cywgaXRlbUtleV0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBsaXN0VmFsdWUgPSB2YWx1ZSB8fCBMaXN0KCk7XG4gICAgaWYgKGFkZFRvVG9wKSB7XG4gICAgICBvbkNoYW5nZShsaXN0VmFsdWUudW5zaGlmdChwYXJzZWRWYWx1ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvbkNoYW5nZShsaXN0VmFsdWUucHVzaChwYXJzZWRWYWx1ZSkpO1xuICAgIH1cbiAgfTtcblxuICBwcm9jZXNzQ29udHJvbFJlZiA9IHJlZiA9PiB7XG4gICAgaWYgKCFyZWYpIHJldHVybjtcbiAgICBjb25zdCB7XG4gICAgICB2YWxpZGF0ZSxcbiAgICAgIHByb3BzOiB7IHZhbGlkYXRpb25LZXk6IGtleSB9LFxuICAgIH0gPSByZWY7XG4gICAgdGhpcy52YWxpZGF0aW9ucy5wdXNoKHsga2V5LCB2YWxpZGF0ZSB9KTtcbiAgfTtcblxuICB2YWxpZGF0ZSA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5nZXRWYWx1ZVR5cGUoKSkge1xuICAgICAgdGhpcy52YWxpZGF0aW9ucy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBpdGVtLnZhbGlkYXRlKCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9wcy52YWxpZGF0ZSgpO1xuICAgIH1cbiAgICB0aGlzLnByb3BzLm9uVmFsaWRhdGVPYmplY3QodGhpcy5wcm9wcy5mb3JJRCwgdGhpcy52YWxpZGF0ZVNpemUoKSk7XG4gIH07XG5cbiAgdmFsaWRhdGVTaXplID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgZmllbGQsIHZhbHVlLCB0IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG1pbiA9IGZpZWxkLmdldCgnbWluJyk7XG4gICAgY29uc3QgbWF4ID0gZmllbGQuZ2V0KCdtYXgnKTtcbiAgICBjb25zdCByZXF1aXJlZCA9IGZpZWxkLmdldCgncmVxdWlyZWQnLCB0cnVlKTtcblxuICAgIGlmICghcmVxdWlyZWQgJiYgIXZhbHVlPy5zaXplKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgZXJyb3IgPSB2YWxpZGF0aW9ucy52YWxpZGF0ZU1pbk1heChcbiAgICAgIHQsXG4gICAgICBmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpLFxuICAgICAgdmFsdWUsXG4gICAgICBtaW4sXG4gICAgICBtYXgsXG4gICAgKTtcblxuICAgIHJldHVybiBlcnJvciA/IFtlcnJvcl0gOiBbXTtcbiAgfTtcblxuICAvKipcbiAgICogSW4gY2FzZSB0aGUgYG9uQ2hhbmdlT2JqZWN0YCBmdW5jdGlvbiBpcyBmcm96ZW4gYnkgYSBjaGlsZCB3aWRnZXQgaW1wbGVtZW50YXRpb24sXG4gICAqIGUuZy4gd2hlbiBkZWJvdW5jZWQsIGFsd2F5cyBnZXQgdGhlIGxhdGVzdCBvYmplY3QgdmFsdWUgaW5zdGVhZCBvZiB1c2luZ1xuICAgKiBgdGhpcy5wcm9wcy52YWx1ZWAgZGlyZWN0bHkuXG4gICAqL1xuICBnZXRPYmplY3RWYWx1ZSA9IGlkeCA9PiB0aGlzLnByb3BzLnZhbHVlLmdldChpZHgpIHx8IE1hcCgpO1xuXG4gIGhhbmRsZUNoYW5nZUZvcihpbmRleCkge1xuICAgIHJldHVybiAoZiwgbmV3VmFsdWUsIG5ld01ldGFkYXRhKSA9PiB7XG4gICAgICBjb25zdCB7IHZhbHVlLCBtZXRhZGF0YSwgb25DaGFuZ2UsIGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBmaWVsZC5nZXQoJ25hbWUnKTtcbiAgICAgIGNvbnN0IGxpc3RGaWVsZE9iamVjdFdpZGdldCA9IGZpZWxkLmdldEluKFsnZmllbGQnLCAnd2lkZ2V0J10pID09PSAnb2JqZWN0JztcbiAgICAgIGNvbnN0IHdpdGhOYW1lS2V5ID1cbiAgICAgICAgdGhpcy5nZXRWYWx1ZVR5cGUoKSAhPT0gdmFsdWVUeXBlcy5TSU5HTEUgfHxcbiAgICAgICAgKHRoaXMuZ2V0VmFsdWVUeXBlKCkgPT09IHZhbHVlVHlwZXMuU0lOR0xFICYmIGxpc3RGaWVsZE9iamVjdFdpZGdldCk7XG4gICAgICBjb25zdCBuZXdPYmplY3RWYWx1ZSA9IHdpdGhOYW1lS2V5XG4gICAgICAgID8gdGhpcy5nZXRPYmplY3RWYWx1ZShpbmRleCkuc2V0KGYuZ2V0KCduYW1lJyksIG5ld1ZhbHVlKVxuICAgICAgICA6IG5ld1ZhbHVlO1xuICAgICAgY29uc3QgcGFyc2VkTWV0YWRhdGEgPSB7XG4gICAgICAgIFtjb2xsZWN0aW9uTmFtZV06IE9iamVjdC5hc3NpZ24obWV0YWRhdGEgPyBtZXRhZGF0YS50b0pTKCkgOiB7fSwgbmV3TWV0YWRhdGEgfHwge30pLFxuICAgICAgfTtcbiAgICAgIG9uQ2hhbmdlKHZhbHVlLnNldChpbmRleCwgbmV3T2JqZWN0VmFsdWUpLCBwYXJzZWRNZXRhZGF0YSk7XG4gICAgfTtcbiAgfVxuXG4gIGhhbmRsZVJlbW92ZSA9IChpbmRleCwgZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgeyB2YWx1ZSwgbWV0YWRhdGEsIG9uQ2hhbmdlLCBmaWVsZCwgY2xlYXJGaWVsZEVycm9ycyB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBjb2xsZWN0aW9uTmFtZSA9IGZpZWxkLmdldCgnbmFtZScpO1xuICAgIGNvbnN0IGlzU2luZ2xlRmllbGQgPSB0aGlzLmdldFZhbHVlVHlwZSgpID09PSB2YWx1ZVR5cGVzLlNJTkdMRTtcblxuICAgIGNvbnN0IG1ldGFkYXRhUmVtb3ZlUGF0aCA9IGlzU2luZ2xlRmllbGQgPyB2YWx1ZS5nZXQoaW5kZXgpIDogdmFsdWUuZ2V0KGluZGV4KS52YWx1ZVNlcSgpO1xuICAgIGNvbnN0IHBhcnNlZE1ldGFkYXRhID1cbiAgICAgIG1ldGFkYXRhICYmICFtZXRhZGF0YS5pc0VtcHR5KClcbiAgICAgICAgPyB7IFtjb2xsZWN0aW9uTmFtZV06IG1ldGFkYXRhLnJlbW92ZUluKG1ldGFkYXRhUmVtb3ZlUGF0aCkgfVxuICAgICAgICA6IG1ldGFkYXRhO1xuXG4gICAgaXRlbXNDb2xsYXBzZWQuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAvLyBjbGVhciB2YWxpZGF0aW9uc1xuICAgIHRoaXMudmFsaWRhdGlvbnMgPSBbXTtcblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXNDb2xsYXBzZWQ6IFsuLi5pdGVtc0NvbGxhcHNlZF0sXG4gICAgICBrZXlzOiBBcnJheS5mcm9tKHsgbGVuZ3RoOiB2YWx1ZS5zaXplIC0gMSB9LCAoKSA9PiB1dWlkKCkpLFxuICAgIH0pO1xuXG4gICAgb25DaGFuZ2UodmFsdWUucmVtb3ZlKGluZGV4KSwgcGFyc2VkTWV0YWRhdGEpO1xuICAgIGNsZWFyRmllbGRFcnJvcnMoKTtcbiAgfTtcblxuICBoYW5kbGVJdGVtQ29sbGFwc2VUb2dnbGUgPSAoaW5kZXgsIGV2ZW50KSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IG5ld0l0ZW1zQ29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWQubWFwKChjb2xsYXBzZWQsIGl0ZW1JbmRleCkgPT4ge1xuICAgICAgaWYgKGluZGV4ID09PSBpdGVtSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuICFjb2xsYXBzZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29sbGFwc2VkO1xuICAgIH0pO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXNDb2xsYXBzZWQ6IG5ld0l0ZW1zQ29sbGFwc2VkLFxuICAgIH0pO1xuICB9O1xuXG4gIGhhbmRsZUNvbGxhcHNlQWxsVG9nZ2xlID0gZSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHsgdmFsdWUsIGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQsIGxpc3RDb2xsYXBzZWQgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgbWluaW1pemVDb2xsYXBzZWRJdGVtcyA9IGZpZWxkLmdldCgnbWluaW1pemVfY29sbGFwc2VkJywgZmFsc2UpO1xuICAgIGNvbnN0IGxpc3RDb2xsYXBzZWRCeURlZmF1bHQgPSBmaWVsZC5nZXQoJ2NvbGxhcHNlZCcsIHRydWUpO1xuICAgIGNvbnN0IGFsbEl0ZW1zQ29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWQuZXZlcnkodmFsID0+IHZhbCA9PT0gdHJ1ZSk7XG5cbiAgICBpZiAobWluaW1pemVDb2xsYXBzZWRJdGVtcykge1xuICAgICAgbGV0IHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkO1xuICAgICAgLy8gT25seSBhbGxvdyBjb2xsYXBzaW5nIGFsbCBpdGVtcyBpbiB0aGlzIG1vZGUgYnV0IG5vdCBvcGVuaW5nIGFsbCBhdCBvbmNlXG4gICAgICBpZiAoIWxpc3RDb2xsYXBzZWQgfHwgIWxpc3RDb2xsYXBzZWRCeURlZmF1bHQpIHtcbiAgICAgICAgdXBkYXRlZEl0ZW1zQ29sbGFwc2VkID0gQXJyYXkodmFsdWUuc2l6ZSkuZmlsbCghbGlzdENvbGxhcHNlZCk7XG4gICAgICB9XG4gICAgICB0aGlzLnNldFN0YXRlKHsgbGlzdENvbGxhcHNlZDogIWxpc3RDb2xsYXBzZWQsIGl0ZW1zQ29sbGFwc2VkOiB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBpdGVtc0NvbGxhcHNlZDogQXJyYXkodmFsdWUuc2l6ZSkuZmlsbCghYWxsSXRlbXNDb2xsYXBzZWQpIH0pO1xuICAgIH1cbiAgfTtcblxuICBvYmplY3RMYWJlbChpdGVtKSB7XG4gICAgY29uc3QgeyBmaWVsZCwgZW50cnkgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgdmFsdWVUeXBlID0gdGhpcy5nZXRWYWx1ZVR5cGUoKTtcbiAgICBzd2l0Y2ggKHZhbHVlVHlwZSkge1xuICAgICAgY2FzZSB2YWx1ZVR5cGVzLk1JWEVEOiB7XG4gICAgICAgIGlmICghdmFsaWRhdGVJdGVtKGZpZWxkLCBpdGVtKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpdGVtVHlwZSA9IGdldFR5cGVkRmllbGRGb3JWYWx1ZShmaWVsZCwgaXRlbSk7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gaXRlbVR5cGUuZ2V0KCdsYWJlbCcsIGl0ZW1UeXBlLmdldCgnbmFtZScpKTtcbiAgICAgICAgLy8gZWFjaCB0eXBlIGNhbiBoYXZlIGl0cyBvd24gc3VtbWFyeSwgYnV0IGRlZmF1bHQgdG8gdGhlIGxpc3Qgc3VtbWFyeSBpZiBleGlzdHNcbiAgICAgICAgY29uc3Qgc3VtbWFyeSA9IGl0ZW1UeXBlLmdldCgnc3VtbWFyeScsIGZpZWxkLmdldCgnc3VtbWFyeScpKTtcbiAgICAgICAgY29uc3QgbGFiZWxSZXR1cm4gPSBzdW1tYXJ5ID8gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgbGFiZWwsIGl0ZW0pIDogbGFiZWw7XG4gICAgICAgIHJldHVybiBsYWJlbFJldHVybjtcbiAgICAgIH1cbiAgICAgIGNhc2UgdmFsdWVUeXBlcy5TSU5HTEU6IHtcbiAgICAgICAgY29uc3Qgc2luZ2xlRmllbGQgPSBmaWVsZC5nZXQoJ2ZpZWxkJyk7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gc2luZ2xlRmllbGQuZ2V0KCdsYWJlbCcsIHNpbmdsZUZpZWxkLmdldCgnbmFtZScpKTtcbiAgICAgICAgY29uc3Qgc3VtbWFyeSA9IGZpZWxkLmdldCgnc3VtbWFyeScpO1xuICAgICAgICBjb25zdCBkYXRhID0gZnJvbUpTKHsgW3NpbmdsZUZpZWxkLmdldCgnbmFtZScpXTogaXRlbSB9KTtcbiAgICAgICAgY29uc3QgbGFiZWxSZXR1cm4gPSBzdW1tYXJ5ID8gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgbGFiZWwsIGRhdGEpIDogbGFiZWw7XG4gICAgICAgIHJldHVybiBsYWJlbFJldHVybjtcbiAgICAgIH1cbiAgICAgIGNhc2UgdmFsdWVUeXBlcy5NVUxUSVBMRToge1xuICAgICAgICBpZiAoIXZhbGlkYXRlSXRlbShmaWVsZCwgaXRlbSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbXVsdGlGaWVsZHMgPSBmaWVsZC5nZXQoJ2ZpZWxkcycpO1xuICAgICAgICBjb25zdCBsYWJlbEZpZWxkID0gbXVsdGlGaWVsZHMgJiYgbXVsdGlGaWVsZHMuZmlyc3QoKTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpdGVtLmdldChsYWJlbEZpZWxkLmdldCgnbmFtZScpKTtcbiAgICAgICAgY29uc3Qgc3VtbWFyeSA9IGZpZWxkLmdldCgnc3VtbWFyeScpO1xuICAgICAgICBjb25zdCBsYWJlbFJldHVybiA9IHN1bW1hcnkgPyBoYW5kbGVTdW1tYXJ5KHN1bW1hcnksIGVudHJ5LCB2YWx1ZSwgaXRlbSkgOiB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIChsYWJlbFJldHVybiB8fCBgTm8gJHtsYWJlbEZpZWxkLmdldCgnbmFtZScpfWApLnRvU3RyaW5nKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIG9uU29ydEVuZCA9ICh7IG9sZEluZGV4LCBuZXdJbmRleCB9KSA9PiB7XG4gICAgY29uc3QgeyB2YWx1ZSwgY2xlYXJGaWVsZEVycm9ycyB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkLCBrZXlzIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgLy8gVXBkYXRlIHZhbHVlXG4gICAgY29uc3QgaXRlbSA9IHZhbHVlLmdldChvbGRJbmRleCk7XG4gICAgY29uc3QgbmV3VmFsdWUgPSB2YWx1ZS5kZWxldGUob2xkSW5kZXgpLmluc2VydChuZXdJbmRleCwgaXRlbSk7XG4gICAgdGhpcy5wcm9wcy5vbkNoYW5nZShuZXdWYWx1ZSk7XG5cbiAgICAvLyBVcGRhdGUgY29sbGFwc2luZ1xuICAgIGNvbnN0IGNvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkW29sZEluZGV4XTtcbiAgICBpdGVtc0NvbGxhcHNlZC5zcGxpY2Uob2xkSW5kZXgsIDEpO1xuICAgIGNvbnN0IHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCA9IFsuLi5pdGVtc0NvbGxhcHNlZF07XG4gICAgdXBkYXRlZEl0ZW1zQ29sbGFwc2VkLnNwbGljZShuZXdJbmRleCwgMCwgY29sbGFwc2VkKTtcblxuICAgIC8vIFJlc2V0IGl0ZW0gdG8gZW5zdXJlIHVwZGF0ZWQgc3RhdGVcbiAgICBjb25zdCB1cGRhdGVkS2V5cyA9IGtleXMubWFwKChrZXksIGtleUluZGV4KSA9PiB7XG4gICAgICBpZiAoa2V5SW5kZXggPT09IG9sZEluZGV4IHx8IGtleUluZGV4ID09PSBuZXdJbmRleCkge1xuICAgICAgICByZXR1cm4gdXVpZCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGtleTtcbiAgICB9KTtcbiAgICB0aGlzLnNldFN0YXRlKHsgaXRlbXNDb2xsYXBzZWQ6IHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCwga2V5czogdXBkYXRlZEtleXMgfSk7XG5cbiAgICAvL2NsZWFyIGVycm9yIGZpZWxkcyBhbmQgcmVtb3ZlIG9sZCB2YWxpZGF0aW9uc1xuICAgIGNsZWFyRmllbGRFcnJvcnMoKTtcbiAgICB0aGlzLnZhbGlkYXRpb25zID0gdGhpcy52YWxpZGF0aW9ucy5maWx0ZXIoaXRlbSA9PiB1cGRhdGVkS2V5cy5pbmNsdWRlcyhpdGVtLmtleSkpO1xuICB9O1xuXG4gIGhhc0Vycm9yID0gaW5kZXggPT4ge1xuICAgIGNvbnN0IHsgZmllbGRzRXJyb3JzIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChmaWVsZHNFcnJvcnMgJiYgZmllbGRzRXJyb3JzLnNpemUgPiAwKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhmaWVsZHNFcnJvcnMudG9KUygpKS5zb21lKGFyciA9PlxuICAgICAgICBhcnIuc29tZShlcnIgPT4gZXJyLnBhcmVudElkcyAmJiBlcnIucGFyZW50SWRzLmluY2x1ZGVzKHRoaXMuc3RhdGUua2V5c1tpbmRleF0pKSxcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9kaXNwbGF5LW5hbWVcbiAgcmVuZGVySXRlbSA9IChpdGVtLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGNsYXNzTmFtZVdyYXBwZXIsXG4gICAgICBlZGl0b3JDb250cm9sLFxuICAgICAgb25WYWxpZGF0ZU9iamVjdCxcbiAgICAgIG1ldGFkYXRhLFxuICAgICAgY2xlYXJGaWVsZEVycm9ycyxcbiAgICAgIGZpZWxkc0Vycm9ycyxcbiAgICAgIGNvbnRyb2xSZWYsXG4gICAgICByZXNvbHZlV2lkZ2V0LFxuICAgICAgcGFyZW50SWRzLFxuICAgICAgZm9ySUQsXG4gICAgICB0LFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCwga2V5cyB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBjb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZFtpbmRleF07XG4gICAgY29uc3Qga2V5ID0ga2V5c1tpbmRleF07XG4gICAgbGV0IGZpZWxkID0gdGhpcy5wcm9wcy5maWVsZDtcbiAgICBjb25zdCBoYXNFcnJvciA9IHRoaXMuaGFzRXJyb3IoaW5kZXgpO1xuICAgIGNvbnN0IGlzVmFyaWFibGVUeXBlc0xpc3QgPSB0aGlzLmdldFZhbHVlVHlwZSgpID09PSB2YWx1ZVR5cGVzLk1JWEVEO1xuICAgIGlmIChpc1ZhcmlhYmxlVHlwZXNMaXN0KSB7XG4gICAgICBmaWVsZCA9IGdldFR5cGVkRmllbGRGb3JWYWx1ZShmaWVsZCwgaXRlbSk7XG4gICAgICBpZiAoIWZpZWxkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlckVycm9uZW91c1R5cGVkSXRlbShpbmRleCwgaXRlbSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8U29ydGFibGVMaXN0SXRlbVxuICAgICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBjb2xsYXBzZWQgJiYgc3R5bGVzLmxpc3RDb250cm9sSXRlbUNvbGxhcHNlZF19XG4gICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICA+XG4gICAgICAgIHtpc1ZhcmlhYmxlVHlwZXNMaXN0ICYmIChcbiAgICAgICAgICA8TGFiZWxDb21wb25lbnRcbiAgICAgICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgICAgIGlzQWN0aXZlPXtmYWxzZX1cbiAgICAgICAgICAgIGhhc0Vycm9ycz17aGFzRXJyb3J9XG4gICAgICAgICAgICB1bmlxdWVGaWVsZElkPXt0aGlzLnVuaXF1ZUZpZWxkSWR9XG4gICAgICAgICAgICBpc0ZpZWxkT3B0aW9uYWw9e2ZpZWxkLmdldCgncmVxdWlyZWQnKSA9PT0gZmFsc2V9XG4gICAgICAgICAgICB0PXt0fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIDxTdHlsZWRMaXN0SXRlbVRvcEJhclxuICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICAgIG9uQ29sbGFwc2VUb2dnbGU9e3BhcnRpYWwodGhpcy5oYW5kbGVJdGVtQ29sbGFwc2VUb2dnbGUsIGluZGV4KX1cbiAgICAgICAgICBvblJlbW92ZT17cGFydGlhbCh0aGlzLmhhbmRsZVJlbW92ZSwgaW5kZXgpfVxuICAgICAgICAgIGRyYWdIYW5kbGVIT0M9e1NvcnRhYmxlSGFuZGxlfVxuICAgICAgICAgIGRhdGEtdGVzdGlkPXtgc3R5bGVkLWxpc3QtaXRlbS10b3AtYmFyLSR7a2V5fWB9XG4gICAgICAgIC8+XG4gICAgICAgIDxOZXN0ZWRPYmplY3RMYWJlbCBjb2xsYXBzZWQ9e2NvbGxhcHNlZH0gZXJyb3I9e2hhc0Vycm9yfT5cbiAgICAgICAgICB7dGhpcy5vYmplY3RMYWJlbChpdGVtKX1cbiAgICAgICAgPC9OZXN0ZWRPYmplY3RMYWJlbD5cbiAgICAgICAgPENsYXNzTmFtZXM+XG4gICAgICAgICAgeyh7IGNzcywgY3ggfSkgPT4gKFxuICAgICAgICAgICAgPE9iamVjdENvbnRyb2xcbiAgICAgICAgICAgICAgY2xhc3NOYW1lV3JhcHBlcj17Y3goY2xhc3NOYW1lV3JhcHBlciwge1xuICAgICAgICAgICAgICAgIFtjc3NgXG4gICAgICAgICAgICAgICAgICAke3N0eWxlU3RyaW5ncy5jb2xsYXBzZWRPYmplY3RDb250cm9sfTtcbiAgICAgICAgICAgICAgICBgXTogY29sbGFwc2VkLFxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgdmFsdWU9e2l0ZW19XG4gICAgICAgICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgICAgICAgb25DaGFuZ2VPYmplY3Q9e3RoaXMuaGFuZGxlQ2hhbmdlRm9yKGluZGV4KX1cbiAgICAgICAgICAgICAgZWRpdG9yQ29udHJvbD17ZWRpdG9yQ29udHJvbH1cbiAgICAgICAgICAgICAgcmVzb2x2ZVdpZGdldD17cmVzb2x2ZVdpZGdldH1cbiAgICAgICAgICAgICAgbWV0YWRhdGE9e21ldGFkYXRhfVxuICAgICAgICAgICAgICBmb3JMaXN0XG4gICAgICAgICAgICAgIG9uVmFsaWRhdGVPYmplY3Q9e29uVmFsaWRhdGVPYmplY3R9XG4gICAgICAgICAgICAgIGNsZWFyRmllbGRFcnJvcnM9e2NsZWFyRmllbGRFcnJvcnN9XG4gICAgICAgICAgICAgIGZpZWxkc0Vycm9ycz17ZmllbGRzRXJyb3JzfVxuICAgICAgICAgICAgICByZWY9e3RoaXMucHJvY2Vzc0NvbnRyb2xSZWZ9XG4gICAgICAgICAgICAgIGNvbnRyb2xSZWY9e2NvbnRyb2xSZWZ9XG4gICAgICAgICAgICAgIHZhbGlkYXRpb25LZXk9e2tleX1cbiAgICAgICAgICAgICAgY29sbGFwc2VkPXtjb2xsYXBzZWR9XG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgb2JqZWN0LWNvbnRyb2wtJHtrZXl9YH1cbiAgICAgICAgICAgICAgaGFzRXJyb3I9e2hhc0Vycm9yfVxuICAgICAgICAgICAgICBwYXJlbnRJZHM9e1suLi5wYXJlbnRJZHMsIGZvcklELCBrZXldfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L0NsYXNzTmFtZXM+XG4gICAgICA8L1NvcnRhYmxlTGlzdEl0ZW0+XG4gICAgKTtcbiAgfTtcblxuICByZW5kZXJFcnJvbmVvdXNUeXBlZEl0ZW0oaW5kZXgsIGl0ZW0pIHtcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMucHJvcHMuZmllbGQ7XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZ2V0RXJyb3JNZXNzYWdlRm9yVHlwZWRGaWVsZEFuZFZhbHVlKGZpZWxkLCBpdGVtKTtcbiAgICBjb25zdCBrZXkgPSBgaXRlbS0ke2luZGV4fWA7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTb3J0YWJsZUxpc3RJdGVtXG4gICAgICAgIGNzcz17W3N0eWxlcy5saXN0Q29udHJvbEl0ZW0sIHN0eWxlcy5saXN0Q29udHJvbEl0ZW1Db2xsYXBzZWRdfVxuICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAgIGtleT17a2V5fVxuICAgICAgPlxuICAgICAgICA8U3R5bGVkTGlzdEl0ZW1Ub3BCYXJcbiAgICAgICAgICBvbkNvbGxhcHNlVG9nZ2xlPXtudWxsfVxuICAgICAgICAgIG9uUmVtb3ZlPXtwYXJ0aWFsKHRoaXMuaGFuZGxlUmVtb3ZlLCBpbmRleCwga2V5KX1cbiAgICAgICAgICBkcmFnSGFuZGxlSE9DPXtTb3J0YWJsZUhhbmRsZX1cbiAgICAgICAgLz5cbiAgICAgICAgPE5lc3RlZE9iamVjdExhYmVsIGNvbGxhcHNlZD17dHJ1ZX0gZXJyb3I9e3RydWV9PlxuICAgICAgICAgIHtlcnJvck1lc3NhZ2V9XG4gICAgICAgIDwvTmVzdGVkT2JqZWN0TGFiZWw+XG4gICAgICA8L1NvcnRhYmxlTGlzdEl0ZW0+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlckxpc3RDb250cm9sKCkge1xuICAgIGNvbnN0IHsgdmFsdWUsIGZvcklELCBmaWVsZCwgY2xhc3NOYW1lV3JhcHBlciwgdCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkLCBsaXN0Q29sbGFwc2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IGl0ZW1zID0gdmFsdWUgfHwgTGlzdCgpO1xuICAgIGNvbnN0IGxhYmVsID0gZmllbGQuZ2V0KCdsYWJlbCcsIGZpZWxkLmdldCgnbmFtZScpKTtcbiAgICBjb25zdCBsYWJlbFNpbmd1bGFyID0gZmllbGQuZ2V0KCdsYWJlbF9zaW5ndWxhcicpIHx8IGZpZWxkLmdldCgnbGFiZWwnLCBmaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgY29uc3QgbGlzdExhYmVsID0gaXRlbXMuc2l6ZSA9PT0gMSA/IGxhYmVsU2luZ3VsYXIudG9Mb3dlckNhc2UoKSA6IGxhYmVsLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgbWluaW1pemVDb2xsYXBzZWRJdGVtcyA9IGZpZWxkLmdldCgnbWluaW1pemVfY29sbGFwc2VkJywgZmFsc2UpO1xuICAgIGNvbnN0IGFsbEl0ZW1zQ29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWQuZXZlcnkodmFsID0+IHZhbCA9PT0gdHJ1ZSk7XG4gICAgY29uc3Qgc2VsZkNvbGxhcHNlZCA9IGFsbEl0ZW1zQ29sbGFwc2VkICYmIChsaXN0Q29sbGFwc2VkIHx8ICFtaW5pbWl6ZUNvbGxhcHNlZEl0ZW1zKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8Q2xhc3NOYW1lcz5cbiAgICAgICAgeyh7IGN4LCBjc3MgfSkgPT4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGlkPXtmb3JJRH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goXG4gICAgICAgICAgICAgIGNsYXNzTmFtZVdyYXBwZXIsXG4gICAgICAgICAgICAgIGNzc2BcbiAgICAgICAgICAgICAgICAke3N0eWxlU3RyaW5ncy5vYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXJ9XG4gICAgICAgICAgICAgIGAsXG4gICAgICAgICAgICApfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxPYmplY3RXaWRnZXRUb3BCYXJcbiAgICAgICAgICAgICAgYWxsb3dBZGQ9e2ZpZWxkLmdldCgnYWxsb3dfYWRkJywgdHJ1ZSl9XG4gICAgICAgICAgICAgIG9uQWRkPXt0aGlzLmhhbmRsZUFkZH1cbiAgICAgICAgICAgICAgdHlwZXM9e2ZpZWxkLmdldChUWVBFU19LRVksIG51bGwpfVxuICAgICAgICAgICAgICBvbkFkZFR5cGU9e3R5cGUgPT4gdGhpcy5oYW5kbGVBZGRUeXBlKHR5cGUsIHJlc29sdmVGaWVsZEtleVR5cGUoZmllbGQpKX1cbiAgICAgICAgICAgICAgaGVhZGluZz17YCR7aXRlbXMuc2l6ZX0gJHtsaXN0TGFiZWx9YH1cbiAgICAgICAgICAgICAgbGFiZWw9e2xhYmVsU2luZ3VsYXIudG9Mb3dlckNhc2UoKX1cbiAgICAgICAgICAgICAgb25Db2xsYXBzZVRvZ2dsZT17dGhpcy5oYW5kbGVDb2xsYXBzZUFsbFRvZ2dsZX1cbiAgICAgICAgICAgICAgY29sbGFwc2VkPXtzZWxmQ29sbGFwc2VkfVxuICAgICAgICAgICAgICB0PXt0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHsoIXNlbGZDb2xsYXBzZWQgfHwgIW1pbmltaXplQ29sbGFwc2VkSXRlbXMpICYmIChcbiAgICAgICAgICAgICAgPFNvcnRhYmxlTGlzdFxuICAgICAgICAgICAgICAgIGl0ZW1zPXtpdGVtc31cbiAgICAgICAgICAgICAgICByZW5kZXJJdGVtPXt0aGlzLnJlbmRlckl0ZW19XG4gICAgICAgICAgICAgICAgb25Tb3J0RW5kPXt0aGlzLm9uU29ydEVuZH1cbiAgICAgICAgICAgICAgICB1c2VEcmFnSGFuZGxlXG4gICAgICAgICAgICAgICAgbG9ja0F4aXM9XCJ5XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L0NsYXNzTmFtZXM+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlcklucHV0KCkge1xuICAgIGNvbnN0IHsgZm9ySUQsIGNsYXNzTmFtZVdyYXBwZXIgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIHJldHVybiAoXG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBpZD17Zm9ySUR9XG4gICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICBvbkZvY3VzPXt0aGlzLmhhbmRsZUZvY3VzfVxuICAgICAgICBvbkJsdXI9e3RoaXMuaGFuZGxlQmx1cn1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVXcmFwcGVyfVxuICAgICAgLz5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmdldFZhbHVlVHlwZSgpICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJMaXN0Q29udHJvbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJJbnB1dCgpO1xuICAgIH1cbiAgfVxufVxuIl19 */",
|
|
57
|
+
toString: _EMOTION_STRINGIFIED_CSS_ERROR__
|
|
58
|
+
},
|
|
59
|
+
listControlItemCollapsed: process.env.NODE_ENV === "production" ? {
|
|
60
|
+
name: "1u3t54p-listControlItemCollapsed",
|
|
61
|
+
styles: "padding-bottom:0;;label:listControlItemCollapsed;"
|
|
62
|
+
} : {
|
|
63
|
+
name: "1u3t54p-listControlItemCollapsed",
|
|
64
|
+
styles: "padding-bottom:0;;label:listControlItemCollapsed;",
|
|
65
|
+
map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE4RCtCIiwiZmlsZSI6Ii4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IEltbXV0YWJsZVByb3BUeXBlcyBmcm9tICdyZWFjdC1pbW11dGFibGUtcHJvcHR5cGVzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCB7IGNzcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL2NvcmUnO1xuaW1wb3J0IHsgTGlzdCwgTWFwLCBmcm9tSlMgfSBmcm9tICdpbW11dGFibGUnO1xuaW1wb3J0IHsgcGFydGlhbCwgaXNFbXB0eSwgdW5pcXVlSWQgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHV1aWQgZnJvbSAndXVpZC92NCc7XG5pbXBvcnQgeyBTb3J0YWJsZUNvbnRhaW5lciwgU29ydGFibGVFbGVtZW50LCBTb3J0YWJsZUhhbmRsZSB9IGZyb20gJ3JlYWN0LXNvcnRhYmxlLWhvYyc7XG5pbXBvcnQgRGVjYXBDbXNXaWRnZXRPYmplY3QgZnJvbSAnZGVjYXAtY21zLXdpZGdldC1vYmplY3QnO1xuaW1wb3J0IHtcbiAgTGlzdEl0ZW1Ub3BCYXIsXG4gIE9iamVjdFdpZGdldFRvcEJhcixcbiAgY29sb3JzLFxuICBsZW5ndGhzLFxuICBGaWVsZExhYmVsLFxufSBmcm9tICdkZWNhcC1jbXMtdWktZGVmYXVsdCc7XG5pbXBvcnQgeyBzdHJpbmdUZW1wbGF0ZSwgdmFsaWRhdGlvbnMgfSBmcm9tICdkZWNhcC1jbXMtbGliLXdpZGdldHMnO1xuXG5pbXBvcnQge1xuICBUWVBFU19LRVksXG4gIGdldFR5cGVkRmllbGRGb3JWYWx1ZSxcbiAgcmVzb2x2ZUZpZWxkS2V5VHlwZSxcbiAgZ2V0RXJyb3JNZXNzYWdlRm9yVHlwZWRGaWVsZEFuZFZhbHVlLFxufSBmcm9tICcuL3R5cGVkTGlzdEhlbHBlcnMnO1xuXG5jb25zdCBPYmplY3RDb250cm9sID0gRGVjYXBDbXNXaWRnZXRPYmplY3QuY29udHJvbENvbXBvbmVudDtcblxuY29uc3QgTGlzdEl0ZW0gPSBzdHlsZWQuZGl2KCk7XG5cbmNvbnN0IFNvcnRhYmxlTGlzdEl0ZW0gPSBTb3J0YWJsZUVsZW1lbnQoTGlzdEl0ZW0pO1xuXG5jb25zdCBTdHlsZWRMaXN0SXRlbVRvcEJhciA9IHN0eWxlZChMaXN0SXRlbVRvcEJhcilgXG4gIGJhY2tncm91bmQtY29sb3I6ICR7Y29sb3JzLnRleHRGaWVsZEJvcmRlcn07XG5gO1xuXG5jb25zdCBOZXN0ZWRPYmplY3RMYWJlbCA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6ICR7cHJvcHMgPT4gKHByb3BzLmNvbGxhcHNlZCA/ICdibG9jaycgOiAnbm9uZScpfTtcbiAgYm9yZGVyLXRvcDogMDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gKHByb3BzLmVycm9yID8gY29sb3JzLmVycm9yVGV4dCA6ICdpbmhlcml0Jyl9O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAke2NvbG9ycy50ZXh0RmllbGRCb3JkZXJ9O1xuICBwYWRkaW5nOiAxM3B4O1xuICBib3JkZXItcmFkaXVzOiAwIDAgJHtsZW5ndGhzLmJvcmRlclJhZGl1c30gJHtsZW5ndGhzLmJvcmRlclJhZGl1c307XG5gO1xuXG5jb25zdCBzdHlsZVN0cmluZ3MgPSB7XG4gIGNvbGxhcHNlZE9iamVjdENvbnRyb2w6IGBcbiAgICBkaXNwbGF5OiBub25lO1xuICBgLFxuICBvYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXI6IGBcbiAgICBwYWRkaW5nOiAke2xlbmd0aHMub2JqZWN0V2lkZ2V0VG9wQmFyQ29udGFpbmVyUGFkZGluZ307XG4gIGAsXG59O1xuXG5jb25zdCBzdHlsZXMgPSB7XG4gIGxpc3RDb250cm9sSXRlbTogY3NzYFxuICAgIG1hcmdpbi10b3A6IDE4cHg7XG5cbiAgICAmOmZpcnN0LW9mLXR5cGUge1xuICAgICAgbWFyZ2luLXRvcDogMjZweDtcbiAgICB9XG4gIGAsXG4gIGxpc3RDb250cm9sSXRlbUNvbGxhcHNlZDogY3NzYFxuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICBgLFxufTtcblxuY29uc3QgU29ydGFibGVMaXN0ID0gU29ydGFibGVDb250YWluZXIoKHsgaXRlbXMsIHJlbmRlckl0ZW0gfSkgPT4ge1xuICByZXR1cm4gPGRpdj57aXRlbXMubWFwKHJlbmRlckl0ZW0pfTwvZGl2Pjtcbn0pO1xuXG5jb25zdCB2YWx1ZVR5cGVzID0ge1xuICBTSU5HTEU6ICdTSU5HTEUnLFxuICBNVUxUSVBMRTogJ01VTFRJUExFJyxcbiAgTUlYRUQ6ICdNSVhFRCcsXG59O1xuXG5mdW5jdGlvbiBoYW5kbGVTdW1tYXJ5KHN1bW1hcnksIGVudHJ5LCBsYWJlbCwgaXRlbSkge1xuICBjb25zdCBkYXRhID0gc3RyaW5nVGVtcGxhdGUuYWRkRmlsZVRlbXBsYXRlRmllbGRzKFxuICAgIGVudHJ5LmdldCgncGF0aCcpLFxuICAgIGl0ZW0uc2V0KCdmaWVsZHMubGFiZWwnLCBsYWJlbCksXG4gICk7XG4gIHJldHVybiBzdHJpbmdUZW1wbGF0ZS5jb21waWxlU3RyaW5nVGVtcGxhdGUoc3VtbWFyeSwgbnVsbCwgJycsIGRhdGEpO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUl0ZW0oZmllbGQsIGl0ZW0pIHtcbiAgaWYgKCFNYXAuaXNNYXAoaXRlbSkpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgJyR7ZmllbGQuZ2V0KCduYW1lJyl9JyBmaWVsZCBpdGVtIHZhbHVlIHZhbHVlIHNob3VsZCBiZSBhIG1hcCBidXQgaXMgYSAnJHt0eXBlb2YgaXRlbX0nYCxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gTGFiZWxDb21wb25lbnQoeyBmaWVsZCwgaXNBY3RpdmUsIGhhc0Vycm9ycywgdW5pcXVlRmllbGRJZCwgaXNGaWVsZE9wdGlvbmFsLCB0IH0pIHtcbiAgY29uc3QgbGFiZWwgPSBgJHtmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpfWA7XG4gIHJldHVybiAoXG4gICAgPEZpZWxkTGFiZWwgaXNBY3RpdmU9e2lzQWN0aXZlfSBoYXNFcnJvcnM9e2hhc0Vycm9yc30gaHRtbEZvcj17dW5pcXVlRmllbGRJZH0+XG4gICAgICB7bGFiZWx9IHtgJHtpc0ZpZWxkT3B0aW9uYWwgPyBgICgke3QoJ2VkaXRvci5lZGl0b3JDb250cm9sLmZpZWxkLm9wdGlvbmFsJyl9KWAgOiAnJ31gfVxuICAgIDwvRmllbGRMYWJlbD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlzdENvbnRyb2wgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICB2YWxpZGF0aW9ucyA9IFtdO1xuXG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgbWV0YWRhdGE6IEltbXV0YWJsZVByb3BUeXBlcy5tYXAsXG4gICAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25DaGFuZ2VPYmplY3Q6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25WYWxpZGF0ZU9iamVjdDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICB2YWxpZGF0ZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICB2YWx1ZTogSW1tdXRhYmxlUHJvcFR5cGVzLmxpc3QsXG4gICAgZmllbGQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgZm9ySUQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY29udHJvbFJlZjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgbWVkaWFQYXRoczogSW1tdXRhYmxlUHJvcFR5cGVzLm1hcC5pc1JlcXVpcmVkLFxuICAgIGdldEFzc2V0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uT3Blbk1lZGlhTGlicmFyeTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvbkFkZEFzc2V0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uUmVtb3ZlSW5zZXJ0ZWRNZWRpYTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBjbGFzc05hbWVXcmFwcGVyOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgc2V0QWN0aXZlU3R5bGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgc2V0SW5hY3RpdmVTdHlsZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBlZGl0b3JDb250cm9sOiBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZCxcbiAgICByZXNvbHZlV2lkZ2V0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGNsZWFyRmllbGRFcnJvcnM6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgZmllbGRzRXJyb3JzOiBJbW11dGFibGVQcm9wVHlwZXMubWFwLmlzUmVxdWlyZWQsXG4gICAgZW50cnk6IEltbXV0YWJsZVByb3BUeXBlcy5tYXAuaXNSZXF1aXJlZCxcbiAgICB0OiBQcm9wVHlwZXMuZnVuYyxcbiAgfTtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIHZhbHVlOiBMaXN0KCksXG4gICAgcGFyZW50SWRzOiBbXSxcbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICBjb25zdCB7IGZpZWxkLCB2YWx1ZSB9ID0gcHJvcHM7XG4gICAgY29uc3QgbGlzdENvbGxhcHNlZCA9IGZpZWxkLmdldCgnY29sbGFwc2VkJywgdHJ1ZSk7XG4gICAgY29uc3QgaXRlbXNDb2xsYXBzZWQgPSAodmFsdWUgJiYgQXJyYXkodmFsdWUuc2l6ZSkuZmlsbChsaXN0Q29sbGFwc2VkKSkgfHwgW107XG4gICAgY29uc3Qga2V5cyA9ICh2YWx1ZSAmJiBBcnJheS5mcm9tKHsgbGVuZ3RoOiB2YWx1ZS5zaXplIH0sICgpID0+IHV1aWQoKSkpIHx8IFtdO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGxpc3RDb2xsYXBzZWQsXG4gICAgICBpdGVtc0NvbGxhcHNlZCxcbiAgICAgIHZhbHVlOiB0aGlzLnZhbHVlVG9TdHJpbmcodmFsdWUpLFxuICAgICAga2V5cyxcbiAgICB9O1xuICB9XG5cbiAgdmFsdWVUb1N0cmluZyA9IHZhbHVlID0+IHtcbiAgICBsZXQgc3RyaW5nVmFsdWU7XG4gICAgaWYgKExpc3QuaXNMaXN0KHZhbHVlKSB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgc3RyaW5nVmFsdWUgPSB2YWx1ZS5qb2luKCcsJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYEV4cGVjdGVkIExpc3QgdmFsdWUgdG8gYmUgYW4gYXJyYXkgYnV0IHJlY2VpdmVkICcke3ZhbHVlfScgd2l0aCB0eXBlIG9mICcke3R5cGVvZiB2YWx1ZX0nLiBQbGVhc2UgY2hlY2sgdGhlIHZhbHVlIHByb3ZpZGVkIHRvIHRoZSAnJHt0aGlzLnByb3BzLmZpZWxkLmdldChcbiAgICAgICAgICAnbmFtZScsXG4gICAgICAgICl9JyBmaWVsZGAsXG4gICAgICApO1xuICAgICAgc3RyaW5nVmFsdWUgPSBTdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gc3RyaW5nVmFsdWUucmVwbGFjZSgvLChbXlxcc118JCkvZywgJywgJDEnKTtcbiAgfTtcblxuICBnZXRWYWx1ZVR5cGUgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoZmllbGQuZ2V0KCdmaWVsZHMnKSkge1xuICAgICAgcmV0dXJuIHZhbHVlVHlwZXMuTVVMVElQTEU7XG4gICAgfSBlbHNlIGlmIChmaWVsZC5nZXQoJ2ZpZWxkJykpIHtcbiAgICAgIHJldHVybiB2YWx1ZVR5cGVzLlNJTkdMRTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkLmdldChUWVBFU19LRVkpKSB7XG4gICAgICByZXR1cm4gdmFsdWVUeXBlcy5NSVhFRDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9O1xuXG4gIHVuaXF1ZUZpZWxkSWQgPSB1bmlxdWVJZChgJHt0aGlzLnByb3BzLmZpZWxkLmdldCgnbmFtZScpfS1maWVsZC1gKTtcbiAgLyoqXG4gICAqIEFsd2F5cyB1cGRhdGUgc28gdGhhdCBlYWNoIG5lc3RlZCB3aWRnZXQgaGFzIHRoZSBvcHRpb24gdG8gdXBkYXRlLiBUaGlzIGlzXG4gICAqIHJlcXVpcmVkIGJlY2F1c2UgQ29udHJvbEhPQyBwcm92aWRlcyBhIGRlZmF1bHQgYHNob3VsZENvbXBvbmVudFVwZGF0ZWBcbiAgICogd2hpY2ggb25seSB1cGRhdGVzIGlmIHRoZSB2YWx1ZSBjaGFuZ2VzLCBidXQgZXZlcnkgd2lkZ2V0IG11c3QgYmUgYWxsb3dlZFxuICAgKiB0byBvdmVycmlkZSB0aGlzLlxuICAgKi9cbiAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaGFuZGxlQ2hhbmdlID0gZSA9PiB7XG4gICAgY29uc3QgeyBvbkNoYW5nZSB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMuc3RhdGUudmFsdWU7XG4gICAgY29uc3QgbmV3VmFsdWUgPSBlLnRhcmdldC52YWx1ZS50cmltKCk7XG4gICAgY29uc3QgbGlzdFZhbHVlID0gbmV3VmFsdWUgPyBuZXdWYWx1ZS5zcGxpdCgnLCcpIDogW107XG4gICAgaWYgKG5ld1ZhbHVlLm1hdGNoKC8sJC8pICYmIG9sZFZhbHVlLm1hdGNoKC8sICQvKSkge1xuICAgICAgbGlzdFZhbHVlLnBvcCgpO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gdGhpcy52YWx1ZVRvU3RyaW5nKGxpc3RWYWx1ZSk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiBwYXJzZWRWYWx1ZSB9KTtcbiAgICBvbkNoYW5nZShMaXN0KGxpc3RWYWx1ZS5tYXAodmFsID0+IHZhbC50cmltKCkpKSk7XG4gIH07XG5cbiAgaGFuZGxlRm9jdXMgPSAoKSA9PiB7XG4gICAgdGhpcy5wcm9wcy5zZXRBY3RpdmVTdHlsZSgpO1xuICB9O1xuXG4gIGhhbmRsZUJsdXIgPSBlID0+IHtcbiAgICBjb25zdCBsaXN0VmFsdWUgPSBlLnRhcmdldC52YWx1ZVxuICAgICAgLnNwbGl0KCcsJylcbiAgICAgIC5tYXAoZWwgPT4gZWwudHJpbSgpKVxuICAgICAgLmZpbHRlcihlbCA9PiBlbCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiB0aGlzLnZhbHVlVG9TdHJpbmcobGlzdFZhbHVlKSB9KTtcbiAgICB0aGlzLnByb3BzLnNldEluYWN0aXZlU3R5bGUoKTtcbiAgfTtcblxuICBoYW5kbGVBZGQgPSBlID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgeyBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBwYXJzZWRWYWx1ZSA9XG4gICAgICB0aGlzLmdldFZhbHVlVHlwZSgpID09PSB2YWx1ZVR5cGVzLlNJTkdMRVxuICAgICAgICA/IHRoaXMuc2luZ2xlRGVmYXVsdCgpXG4gICAgICAgIDogZnJvbUpTKHRoaXMubXVsdGlwbGVEZWZhdWx0KGZpZWxkLmdldCgnZmllbGRzJykpKTtcbiAgICB0aGlzLmFkZEl0ZW0ocGFyc2VkVmFsdWUpO1xuICB9O1xuXG4gIHNpbmdsZURlZmF1bHQgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZmllbGQuZ2V0SW4oWydmaWVsZCcsICdkZWZhdWx0J10sIG51bGwpO1xuICB9O1xuXG4gIG11bHRpcGxlRGVmYXVsdCA9IGZpZWxkcyA9PiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRzRGVmYXVsdChmaWVsZHMpO1xuICB9O1xuXG4gIGhhbmRsZUFkZFR5cGUgPSAodHlwZSwgdHlwZUtleSkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gZnJvbUpTKHRoaXMubWl4ZWREZWZhdWx0KHR5cGVLZXksIHR5cGUpKTtcbiAgICB0aGlzLmFkZEl0ZW0ocGFyc2VkVmFsdWUpO1xuICB9O1xuXG4gIG1peGVkRGVmYXVsdCA9ICh0eXBlS2V5LCB0eXBlKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRUeXBlID0gdGhpcy5wcm9wcy5maWVsZC5nZXQoVFlQRVNfS0VZKS5maW5kKGYgPT4gZi5nZXQoJ25hbWUnKSA9PT0gdHlwZSk7XG4gICAgY29uc3QgZmllbGRzID0gc2VsZWN0ZWRUeXBlLmdldCgnZmllbGRzJykgfHwgW3NlbGVjdGVkVHlwZS5nZXQoJ2ZpZWxkJyldO1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRzRGVmYXVsdChmaWVsZHMsIHsgW3R5cGVLZXldOiB0eXBlIH0pO1xuICB9O1xuXG4gIGdldEZpZWxkc0RlZmF1bHQgPSAoZmllbGRzLCBpbml0aWFsVmFsdWUgPSB7fSkgPT4ge1xuICAgIHJldHVybiBmaWVsZHMucmVkdWNlKChhY2MsIGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IHN1YmZpZWxkcyA9IGl0ZW0uZ2V0KCdmaWVsZCcpIHx8IGl0ZW0uZ2V0KCdmaWVsZHMnKTtcbiAgICAgIGNvbnN0IG9iamVjdCA9IGl0ZW0uZ2V0KCd3aWRnZXQnKSA9PSAnb2JqZWN0JztcbiAgICAgIGNvbnN0IG5hbWUgPSBpdGVtLmdldCgnbmFtZScpO1xuICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gaXRlbS5nZXQoJ2RlZmF1bHQnLCBudWxsKTtcblxuICAgICAgaWYgKExpc3QuaXNMaXN0KHN1YmZpZWxkcykgJiYgb2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IHN1YkRlZmF1bHRWYWx1ZSA9IHRoaXMuZ2V0RmllbGRzRGVmYXVsdChzdWJmaWVsZHMpO1xuICAgICAgICAhaXNFbXB0eShzdWJEZWZhdWx0VmFsdWUpICYmIChhY2NbbmFtZV0gPSBzdWJEZWZhdWx0VmFsdWUpO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfVxuXG4gICAgICBpZiAoTWFwLmlzTWFwKHN1YmZpZWxkcykgJiYgb2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IHN1YkRlZmF1bHRWYWx1ZSA9IHRoaXMuZ2V0RmllbGRzRGVmYXVsdChbc3ViZmllbGRzXSk7XG4gICAgICAgICFpc0VtcHR5KHN1YkRlZmF1bHRWYWx1ZSkgJiYgKGFjY1tuYW1lXSA9IHN1YkRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9XG5cbiAgICAgIGlmIChkZWZhdWx0VmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgYWNjW25hbWVdID0gZGVmYXVsdFZhbHVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIGluaXRpYWxWYWx1ZSk7XG4gIH07XG5cbiAgYWRkSXRlbSA9IHBhcnNlZFZhbHVlID0+IHtcbiAgICBjb25zdCB7IHZhbHVlLCBvbkNoYW5nZSwgZmllbGQgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgYWRkVG9Ub3AgPSBmaWVsZC5nZXQoJ2FkZF90b190b3AnLCBmYWxzZSk7XG5cbiAgICBjb25zdCBpdGVtS2V5ID0gdXVpZCgpO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXNDb2xsYXBzZWQ6IGFkZFRvVG9wXG4gICAgICAgID8gW2ZhbHNlLCAuLi50aGlzLnN0YXRlLml0ZW1zQ29sbGFwc2VkXVxuICAgICAgICA6IFsuLi50aGlzLnN0YXRlLml0ZW1zQ29sbGFwc2VkLCBmYWxzZV0sXG4gICAgICBrZXlzOiBhZGRUb1RvcCA/IFtpdGVtS2V5LCAuLi50aGlzLnN0YXRlLmtleXNdIDogWy4uLnRoaXMuc3RhdGUua2V5cywgaXRlbUtleV0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBsaXN0VmFsdWUgPSB2YWx1ZSB8fCBMaXN0KCk7XG4gICAgaWYgKGFkZFRvVG9wKSB7XG4gICAgICBvbkNoYW5nZShsaXN0VmFsdWUudW5zaGlmdChwYXJzZWRWYWx1ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvbkNoYW5nZShsaXN0VmFsdWUucHVzaChwYXJzZWRWYWx1ZSkpO1xuICAgIH1cbiAgfTtcblxuICBwcm9jZXNzQ29udHJvbFJlZiA9IHJlZiA9PiB7XG4gICAgaWYgKCFyZWYpIHJldHVybjtcbiAgICBjb25zdCB7XG4gICAgICB2YWxpZGF0ZSxcbiAgICAgIHByb3BzOiB7IHZhbGlkYXRpb25LZXk6IGtleSB9LFxuICAgIH0gPSByZWY7XG4gICAgdGhpcy52YWxpZGF0aW9ucy5wdXNoKHsga2V5LCB2YWxpZGF0ZSB9KTtcbiAgfTtcblxuICB2YWxpZGF0ZSA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5nZXRWYWx1ZVR5cGUoKSkge1xuICAgICAgdGhpcy52YWxpZGF0aW9ucy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBpdGVtLnZhbGlkYXRlKCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9wcy52YWxpZGF0ZSgpO1xuICAgIH1cbiAgICB0aGlzLnByb3BzLm9uVmFsaWRhdGVPYmplY3QodGhpcy5wcm9wcy5mb3JJRCwgdGhpcy52YWxpZGF0ZVNpemUoKSk7XG4gIH07XG5cbiAgdmFsaWRhdGVTaXplID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgZmllbGQsIHZhbHVlLCB0IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG1pbiA9IGZpZWxkLmdldCgnbWluJyk7XG4gICAgY29uc3QgbWF4ID0gZmllbGQuZ2V0KCdtYXgnKTtcbiAgICBjb25zdCByZXF1aXJlZCA9IGZpZWxkLmdldCgncmVxdWlyZWQnLCB0cnVlKTtcblxuICAgIGlmICghcmVxdWlyZWQgJiYgIXZhbHVlPy5zaXplKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgZXJyb3IgPSB2YWxpZGF0aW9ucy52YWxpZGF0ZU1pbk1heChcbiAgICAgIHQsXG4gICAgICBmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpLFxuICAgICAgdmFsdWUsXG4gICAgICBtaW4sXG4gICAgICBtYXgsXG4gICAgKTtcblxuICAgIHJldHVybiBlcnJvciA/IFtlcnJvcl0gOiBbXTtcbiAgfTtcblxuICAvKipcbiAgICogSW4gY2FzZSB0aGUgYG9uQ2hhbmdlT2JqZWN0YCBmdW5jdGlvbiBpcyBmcm96ZW4gYnkgYSBjaGlsZCB3aWRnZXQgaW1wbGVtZW50YXRpb24sXG4gICAqIGUuZy4gd2hlbiBkZWJvdW5jZWQsIGFsd2F5cyBnZXQgdGhlIGxhdGVzdCBvYmplY3QgdmFsdWUgaW5zdGVhZCBvZiB1c2luZ1xuICAgKiBgdGhpcy5wcm9wcy52YWx1ZWAgZGlyZWN0bHkuXG4gICAqL1xuICBnZXRPYmplY3RWYWx1ZSA9IGlkeCA9PiB0aGlzLnByb3BzLnZhbHVlLmdldChpZHgpIHx8IE1hcCgpO1xuXG4gIGhhbmRsZUNoYW5nZUZvcihpbmRleCkge1xuICAgIHJldHVybiAoZiwgbmV3VmFsdWUsIG5ld01ldGFkYXRhKSA9PiB7XG4gICAgICBjb25zdCB7IHZhbHVlLCBtZXRhZGF0YSwgb25DaGFuZ2UsIGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBmaWVsZC5nZXQoJ25hbWUnKTtcbiAgICAgIGNvbnN0IGxpc3RGaWVsZE9iamVjdFdpZGdldCA9IGZpZWxkLmdldEluKFsnZmllbGQnLCAnd2lkZ2V0J10pID09PSAnb2JqZWN0JztcbiAgICAgIGNvbnN0IHdpdGhOYW1lS2V5ID1cbiAgICAgICAgdGhpcy5nZXRWYWx1ZVR5cGUoKSAhPT0gdmFsdWVUeXBlcy5TSU5HTEUgfHxcbiAgICAgICAgKHRoaXMuZ2V0VmFsdWVUeXBlKCkgPT09IHZhbHVlVHlwZXMuU0lOR0xFICYmIGxpc3RGaWVsZE9iamVjdFdpZGdldCk7XG4gICAgICBjb25zdCBuZXdPYmplY3RWYWx1ZSA9IHdpdGhOYW1lS2V5XG4gICAgICAgID8gdGhpcy5nZXRPYmplY3RWYWx1ZShpbmRleCkuc2V0KGYuZ2V0KCduYW1lJyksIG5ld1ZhbHVlKVxuICAgICAgICA6IG5ld1ZhbHVlO1xuICAgICAgY29uc3QgcGFyc2VkTWV0YWRhdGEgPSB7XG4gICAgICAgIFtjb2xsZWN0aW9uTmFtZV06IE9iamVjdC5hc3NpZ24obWV0YWRhdGEgPyBtZXRhZGF0YS50b0pTKCkgOiB7fSwgbmV3TWV0YWRhdGEgfHwge30pLFxuICAgICAgfTtcbiAgICAgIG9uQ2hhbmdlKHZhbHVlLnNldChpbmRleCwgbmV3T2JqZWN0VmFsdWUpLCBwYXJzZWRNZXRhZGF0YSk7XG4gICAgfTtcbiAgfVxuXG4gIGhhbmRsZVJlbW92ZSA9IChpbmRleCwgZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgeyB2YWx1ZSwgbWV0YWRhdGEsIG9uQ2hhbmdlLCBmaWVsZCwgY2xlYXJGaWVsZEVycm9ycyB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBjb2xsZWN0aW9uTmFtZSA9IGZpZWxkLmdldCgnbmFtZScpO1xuICAgIGNvbnN0IGlzU2luZ2xlRmllbGQgPSB0aGlzLmdldFZhbHVlVHlwZSgpID09PSB2YWx1ZVR5cGVzLlNJTkdMRTtcblxuICAgIGNvbnN0IG1ldGFkYXRhUmVtb3ZlUGF0aCA9IGlzU2luZ2xlRmllbGQgPyB2YWx1ZS5nZXQoaW5kZXgpIDogdmFsdWUuZ2V0KGluZGV4KS52YWx1ZVNlcSgpO1xuICAgIGNvbnN0IHBhcnNlZE1ldGFkYXRhID1cbiAgICAgIG1ldGFkYXRhICYmICFtZXRhZGF0YS5pc0VtcHR5KClcbiAgICAgICAgPyB7IFtjb2xsZWN0aW9uTmFtZV06IG1ldGFkYXRhLnJlbW92ZUluKG1ldGFkYXRhUmVtb3ZlUGF0aCkgfVxuICAgICAgICA6IG1ldGFkYXRhO1xuXG4gICAgaXRlbXNDb2xsYXBzZWQuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAvLyBjbGVhciB2YWxpZGF0aW9uc1xuICAgIHRoaXMudmFsaWRhdGlvbnMgPSBbXTtcblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXNDb2xsYXBzZWQ6IFsuLi5pdGVtc0NvbGxhcHNlZF0sXG4gICAgICBrZXlzOiBBcnJheS5mcm9tKHsgbGVuZ3RoOiB2YWx1ZS5zaXplIC0gMSB9LCAoKSA9PiB1dWlkKCkpLFxuICAgIH0pO1xuXG4gICAgb25DaGFuZ2UodmFsdWUucmVtb3ZlKGluZGV4KSwgcGFyc2VkTWV0YWRhdGEpO1xuICAgIGNsZWFyRmllbGRFcnJvcnMoKTtcbiAgfTtcblxuICBoYW5kbGVJdGVtQ29sbGFwc2VUb2dnbGUgPSAoaW5kZXgsIGV2ZW50KSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IG5ld0l0ZW1zQ29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWQubWFwKChjb2xsYXBzZWQsIGl0ZW1JbmRleCkgPT4ge1xuICAgICAgaWYgKGluZGV4ID09PSBpdGVtSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuICFjb2xsYXBzZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29sbGFwc2VkO1xuICAgIH0pO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXNDb2xsYXBzZWQ6IG5ld0l0ZW1zQ29sbGFwc2VkLFxuICAgIH0pO1xuICB9O1xuXG4gIGhhbmRsZUNvbGxhcHNlQWxsVG9nZ2xlID0gZSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHsgdmFsdWUsIGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQsIGxpc3RDb2xsYXBzZWQgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgbWluaW1pemVDb2xsYXBzZWRJdGVtcyA9IGZpZWxkLmdldCgnbWluaW1pemVfY29sbGFwc2VkJywgZmFsc2UpO1xuICAgIGNvbnN0IGxpc3RDb2xsYXBzZWRCeURlZmF1bHQgPSBmaWVsZC5nZXQoJ2NvbGxhcHNlZCcsIHRydWUpO1xuICAgIGNvbnN0IGFsbEl0ZW1zQ29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWQuZXZlcnkodmFsID0+IHZhbCA9PT0gdHJ1ZSk7XG5cbiAgICBpZiAobWluaW1pemVDb2xsYXBzZWRJdGVtcykge1xuICAgICAgbGV0IHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkO1xuICAgICAgLy8gT25seSBhbGxvdyBjb2xsYXBzaW5nIGFsbCBpdGVtcyBpbiB0aGlzIG1vZGUgYnV0IG5vdCBvcGVuaW5nIGFsbCBhdCBvbmNlXG4gICAgICBpZiAoIWxpc3RDb2xsYXBzZWQgfHwgIWxpc3RDb2xsYXBzZWRCeURlZmF1bHQpIHtcbiAgICAgICAgdXBkYXRlZEl0ZW1zQ29sbGFwc2VkID0gQXJyYXkodmFsdWUuc2l6ZSkuZmlsbCghbGlzdENvbGxhcHNlZCk7XG4gICAgICB9XG4gICAgICB0aGlzLnNldFN0YXRlKHsgbGlzdENvbGxhcHNlZDogIWxpc3RDb2xsYXBzZWQsIGl0ZW1zQ29sbGFwc2VkOiB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBpdGVtc0NvbGxhcHNlZDogQXJyYXkodmFsdWUuc2l6ZSkuZmlsbCghYWxsSXRlbXNDb2xsYXBzZWQpIH0pO1xuICAgIH1cbiAgfTtcblxuICBvYmplY3RMYWJlbChpdGVtKSB7XG4gICAgY29uc3QgeyBmaWVsZCwgZW50cnkgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgdmFsdWVUeXBlID0gdGhpcy5nZXRWYWx1ZVR5cGUoKTtcbiAgICBzd2l0Y2ggKHZhbHVlVHlwZSkge1xuICAgICAgY2FzZSB2YWx1ZVR5cGVzLk1JWEVEOiB7XG4gICAgICAgIGlmICghdmFsaWRhdGVJdGVtKGZpZWxkLCBpdGVtKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpdGVtVHlwZSA9IGdldFR5cGVkRmllbGRGb3JWYWx1ZShmaWVsZCwgaXRlbSk7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gaXRlbVR5cGUuZ2V0KCdsYWJlbCcsIGl0ZW1UeXBlLmdldCgnbmFtZScpKTtcbiAgICAgICAgLy8gZWFjaCB0eXBlIGNhbiBoYXZlIGl0cyBvd24gc3VtbWFyeSwgYnV0IGRlZmF1bHQgdG8gdGhlIGxpc3Qgc3VtbWFyeSBpZiBleGlzdHNcbiAgICAgICAgY29uc3Qgc3VtbWFyeSA9IGl0ZW1UeXBlLmdldCgnc3VtbWFyeScsIGZpZWxkLmdldCgnc3VtbWFyeScpKTtcbiAgICAgICAgY29uc3QgbGFiZWxSZXR1cm4gPSBzdW1tYXJ5ID8gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgbGFiZWwsIGl0ZW0pIDogbGFiZWw7XG4gICAgICAgIHJldHVybiBsYWJlbFJldHVybjtcbiAgICAgIH1cbiAgICAgIGNhc2UgdmFsdWVUeXBlcy5TSU5HTEU6IHtcbiAgICAgICAgY29uc3Qgc2luZ2xlRmllbGQgPSBmaWVsZC5nZXQoJ2ZpZWxkJyk7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gc2luZ2xlRmllbGQuZ2V0KCdsYWJlbCcsIHNpbmdsZUZpZWxkLmdldCgnbmFtZScpKTtcbiAgICAgICAgY29uc3Qgc3VtbWFyeSA9IGZpZWxkLmdldCgnc3VtbWFyeScpO1xuICAgICAgICBjb25zdCBkYXRhID0gZnJvbUpTKHsgW3NpbmdsZUZpZWxkLmdldCgnbmFtZScpXTogaXRlbSB9KTtcbiAgICAgICAgY29uc3QgbGFiZWxSZXR1cm4gPSBzdW1tYXJ5ID8gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgbGFiZWwsIGRhdGEpIDogbGFiZWw7XG4gICAgICAgIHJldHVybiBsYWJlbFJldHVybjtcbiAgICAgIH1cbiAgICAgIGNhc2UgdmFsdWVUeXBlcy5NVUxUSVBMRToge1xuICAgICAgICBpZiAoIXZhbGlkYXRlSXRlbShmaWVsZCwgaXRlbSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbXVsdGlGaWVsZHMgPSBmaWVsZC5nZXQoJ2ZpZWxkcycpO1xuICAgICAgICBjb25zdCBsYWJlbEZpZWxkID0gbXVsdGlGaWVsZHMgJiYgbXVsdGlGaWVsZHMuZmlyc3QoKTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpdGVtLmdldChsYWJlbEZpZWxkLmdldCgnbmFtZScpKTtcbiAgICAgICAgY29uc3Qgc3VtbWFyeSA9IGZpZWxkLmdldCgnc3VtbWFyeScpO1xuICAgICAgICBjb25zdCBsYWJlbFJldHVybiA9IHN1bW1hcnkgPyBoYW5kbGVTdW1tYXJ5KHN1bW1hcnksIGVudHJ5LCB2YWx1ZSwgaXRlbSkgOiB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIChsYWJlbFJldHVybiB8fCBgTm8gJHtsYWJlbEZpZWxkLmdldCgnbmFtZScpfWApLnRvU3RyaW5nKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIG9uU29ydEVuZCA9ICh7IG9sZEluZGV4LCBuZXdJbmRleCB9KSA9PiB7XG4gICAgY29uc3QgeyB2YWx1ZSwgY2xlYXJGaWVsZEVycm9ycyB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkLCBrZXlzIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgLy8gVXBkYXRlIHZhbHVlXG4gICAgY29uc3QgaXRlbSA9IHZhbHVlLmdldChvbGRJbmRleCk7XG4gICAgY29uc3QgbmV3VmFsdWUgPSB2YWx1ZS5kZWxldGUob2xkSW5kZXgpLmluc2VydChuZXdJbmRleCwgaXRlbSk7XG4gICAgdGhpcy5wcm9wcy5vbkNoYW5nZShuZXdWYWx1ZSk7XG5cbiAgICAvLyBVcGRhdGUgY29sbGFwc2luZ1xuICAgIGNvbnN0IGNvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkW29sZEluZGV4XTtcbiAgICBpdGVtc0NvbGxhcHNlZC5zcGxpY2Uob2xkSW5kZXgsIDEpO1xuICAgIGNvbnN0IHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCA9IFsuLi5pdGVtc0NvbGxhcHNlZF07XG4gICAgdXBkYXRlZEl0ZW1zQ29sbGFwc2VkLnNwbGljZShuZXdJbmRleCwgMCwgY29sbGFwc2VkKTtcblxuICAgIC8vIFJlc2V0IGl0ZW0gdG8gZW5zdXJlIHVwZGF0ZWQgc3RhdGVcbiAgICBjb25zdCB1cGRhdGVkS2V5cyA9IGtleXMubWFwKChrZXksIGtleUluZGV4KSA9PiB7XG4gICAgICBpZiAoa2V5SW5kZXggPT09IG9sZEluZGV4IHx8IGtleUluZGV4ID09PSBuZXdJbmRleCkge1xuICAgICAgICByZXR1cm4gdXVpZCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGtleTtcbiAgICB9KTtcbiAgICB0aGlzLnNldFN0YXRlKHsgaXRlbXNDb2xsYXBzZWQ6IHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCwga2V5czogdXBkYXRlZEtleXMgfSk7XG5cbiAgICAvL2NsZWFyIGVycm9yIGZpZWxkcyBhbmQgcmVtb3ZlIG9sZCB2YWxpZGF0aW9uc1xuICAgIGNsZWFyRmllbGRFcnJvcnMoKTtcbiAgICB0aGlzLnZhbGlkYXRpb25zID0gdGhpcy52YWxpZGF0aW9ucy5maWx0ZXIoaXRlbSA9PiB1cGRhdGVkS2V5cy5pbmNsdWRlcyhpdGVtLmtleSkpO1xuICB9O1xuXG4gIGhhc0Vycm9yID0gaW5kZXggPT4ge1xuICAgIGNvbnN0IHsgZmllbGRzRXJyb3JzIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChmaWVsZHNFcnJvcnMgJiYgZmllbGRzRXJyb3JzLnNpemUgPiAwKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhmaWVsZHNFcnJvcnMudG9KUygpKS5zb21lKGFyciA9PlxuICAgICAgICBhcnIuc29tZShlcnIgPT4gZXJyLnBhcmVudElkcyAmJiBlcnIucGFyZW50SWRzLmluY2x1ZGVzKHRoaXMuc3RhdGUua2V5c1tpbmRleF0pKSxcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9kaXNwbGF5LW5hbWVcbiAgcmVuZGVySXRlbSA9IChpdGVtLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGNsYXNzTmFtZVdyYXBwZXIsXG4gICAgICBlZGl0b3JDb250cm9sLFxuICAgICAgb25WYWxpZGF0ZU9iamVjdCxcbiAgICAgIG1ldGFkYXRhLFxuICAgICAgY2xlYXJGaWVsZEVycm9ycyxcbiAgICAgIGZpZWxkc0Vycm9ycyxcbiAgICAgIGNvbnRyb2xSZWYsXG4gICAgICByZXNvbHZlV2lkZ2V0LFxuICAgICAgcGFyZW50SWRzLFxuICAgICAgZm9ySUQsXG4gICAgICB0LFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCwga2V5cyB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBjb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZFtpbmRleF07XG4gICAgY29uc3Qga2V5ID0ga2V5c1tpbmRleF07XG4gICAgbGV0IGZpZWxkID0gdGhpcy5wcm9wcy5maWVsZDtcbiAgICBjb25zdCBoYXNFcnJvciA9IHRoaXMuaGFzRXJyb3IoaW5kZXgpO1xuICAgIGNvbnN0IGlzVmFyaWFibGVUeXBlc0xpc3QgPSB0aGlzLmdldFZhbHVlVHlwZSgpID09PSB2YWx1ZVR5cGVzLk1JWEVEO1xuICAgIGlmIChpc1ZhcmlhYmxlVHlwZXNMaXN0KSB7XG4gICAgICBmaWVsZCA9IGdldFR5cGVkRmllbGRGb3JWYWx1ZShmaWVsZCwgaXRlbSk7XG4gICAgICBpZiAoIWZpZWxkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlckVycm9uZW91c1R5cGVkSXRlbShpbmRleCwgaXRlbSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8U29ydGFibGVMaXN0SXRlbVxuICAgICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBjb2xsYXBzZWQgJiYgc3R5bGVzLmxpc3RDb250cm9sSXRlbUNvbGxhcHNlZF19XG4gICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICA+XG4gICAgICAgIHtpc1ZhcmlhYmxlVHlwZXNMaXN0ICYmIChcbiAgICAgICAgICA8TGFiZWxDb21wb25lbnRcbiAgICAgICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgICAgIGlzQWN0aXZlPXtmYWxzZX1cbiAgICAgICAgICAgIGhhc0Vycm9ycz17aGFzRXJyb3J9XG4gICAgICAgICAgICB1bmlxdWVGaWVsZElkPXt0aGlzLnVuaXF1ZUZpZWxkSWR9XG4gICAgICAgICAgICBpc0ZpZWxkT3B0aW9uYWw9e2ZpZWxkLmdldCgncmVxdWlyZWQnKSA9PT0gZmFsc2V9XG4gICAgICAgICAgICB0PXt0fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIDxTdHlsZWRMaXN0SXRlbVRvcEJhclxuICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICAgIG9uQ29sbGFwc2VUb2dnbGU9e3BhcnRpYWwodGhpcy5oYW5kbGVJdGVtQ29sbGFwc2VUb2dnbGUsIGluZGV4KX1cbiAgICAgICAgICBvblJlbW92ZT17cGFydGlhbCh0aGlzLmhhbmRsZVJlbW92ZSwgaW5kZXgpfVxuICAgICAgICAgIGRyYWdIYW5kbGVIT0M9e1NvcnRhYmxlSGFuZGxlfVxuICAgICAgICAgIGRhdGEtdGVzdGlkPXtgc3R5bGVkLWxpc3QtaXRlbS10b3AtYmFyLSR7a2V5fWB9XG4gICAgICAgIC8+XG4gICAgICAgIDxOZXN0ZWRPYmplY3RMYWJlbCBjb2xsYXBzZWQ9e2NvbGxhcHNlZH0gZXJyb3I9e2hhc0Vycm9yfT5cbiAgICAgICAgICB7dGhpcy5vYmplY3RMYWJlbChpdGVtKX1cbiAgICAgICAgPC9OZXN0ZWRPYmplY3RMYWJlbD5cbiAgICAgICAgPENsYXNzTmFtZXM+XG4gICAgICAgICAgeyh7IGNzcywgY3ggfSkgPT4gKFxuICAgICAgICAgICAgPE9iamVjdENvbnRyb2xcbiAgICAgICAgICAgICAgY2xhc3NOYW1lV3JhcHBlcj17Y3goY2xhc3NOYW1lV3JhcHBlciwge1xuICAgICAgICAgICAgICAgIFtjc3NgXG4gICAgICAgICAgICAgICAgICAke3N0eWxlU3RyaW5ncy5jb2xsYXBzZWRPYmplY3RDb250cm9sfTtcbiAgICAgICAgICAgICAgICBgXTogY29sbGFwc2VkLFxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgdmFsdWU9e2l0ZW19XG4gICAgICAgICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgICAgICAgb25DaGFuZ2VPYmplY3Q9e3RoaXMuaGFuZGxlQ2hhbmdlRm9yKGluZGV4KX1cbiAgICAgICAgICAgICAgZWRpdG9yQ29udHJvbD17ZWRpdG9yQ29udHJvbH1cbiAgICAgICAgICAgICAgcmVzb2x2ZVdpZGdldD17cmVzb2x2ZVdpZGdldH1cbiAgICAgICAgICAgICAgbWV0YWRhdGE9e21ldGFkYXRhfVxuICAgICAgICAgICAgICBmb3JMaXN0XG4gICAgICAgICAgICAgIG9uVmFsaWRhdGVPYmplY3Q9e29uVmFsaWRhdGVPYmplY3R9XG4gICAgICAgICAgICAgIGNsZWFyRmllbGRFcnJvcnM9e2NsZWFyRmllbGRFcnJvcnN9XG4gICAgICAgICAgICAgIGZpZWxkc0Vycm9ycz17ZmllbGRzRXJyb3JzfVxuICAgICAgICAgICAgICByZWY9e3RoaXMucHJvY2Vzc0NvbnRyb2xSZWZ9XG4gICAgICAgICAgICAgIGNvbnRyb2xSZWY9e2NvbnRyb2xSZWZ9XG4gICAgICAgICAgICAgIHZhbGlkYXRpb25LZXk9e2tleX1cbiAgICAgICAgICAgICAgY29sbGFwc2VkPXtjb2xsYXBzZWR9XG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgb2JqZWN0LWNvbnRyb2wtJHtrZXl9YH1cbiAgICAgICAgICAgICAgaGFzRXJyb3I9e2hhc0Vycm9yfVxuICAgICAgICAgICAgICBwYXJlbnRJZHM9e1suLi5wYXJlbnRJZHMsIGZvcklELCBrZXldfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L0NsYXNzTmFtZXM+XG4gICAgICA8L1NvcnRhYmxlTGlzdEl0ZW0+XG4gICAgKTtcbiAgfTtcblxuICByZW5kZXJFcnJvbmVvdXNUeXBlZEl0ZW0oaW5kZXgsIGl0ZW0pIHtcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMucHJvcHMuZmllbGQ7XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZ2V0RXJyb3JNZXNzYWdlRm9yVHlwZWRGaWVsZEFuZFZhbHVlKGZpZWxkLCBpdGVtKTtcbiAgICBjb25zdCBrZXkgPSBgaXRlbS0ke2luZGV4fWA7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTb3J0YWJsZUxpc3RJdGVtXG4gICAgICAgIGNzcz17W3N0eWxlcy5saXN0Q29udHJvbEl0ZW0sIHN0eWxlcy5saXN0Q29udHJvbEl0ZW1Db2xsYXBzZWRdfVxuICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAgIGtleT17a2V5fVxuICAgICAgPlxuICAgICAgICA8U3R5bGVkTGlzdEl0ZW1Ub3BCYXJcbiAgICAgICAgICBvbkNvbGxhcHNlVG9nZ2xlPXtudWxsfVxuICAgICAgICAgIG9uUmVtb3ZlPXtwYXJ0aWFsKHRoaXMuaGFuZGxlUmVtb3ZlLCBpbmRleCwga2V5KX1cbiAgICAgICAgICBkcmFnSGFuZGxlSE9DPXtTb3J0YWJsZUhhbmRsZX1cbiAgICAgICAgLz5cbiAgICAgICAgPE5lc3RlZE9iamVjdExhYmVsIGNvbGxhcHNlZD17dHJ1ZX0gZXJyb3I9e3RydWV9PlxuICAgICAgICAgIHtlcnJvck1lc3NhZ2V9XG4gICAgICAgIDwvTmVzdGVkT2JqZWN0TGFiZWw+XG4gICAgICA8L1NvcnRhYmxlTGlzdEl0ZW0+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlckxpc3RDb250cm9sKCkge1xuICAgIGNvbnN0IHsgdmFsdWUsIGZvcklELCBmaWVsZCwgY2xhc3NOYW1lV3JhcHBlciwgdCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkLCBsaXN0Q29sbGFwc2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IGl0ZW1zID0gdmFsdWUgfHwgTGlzdCgpO1xuICAgIGNvbnN0IGxhYmVsID0gZmllbGQuZ2V0KCdsYWJlbCcsIGZpZWxkLmdldCgnbmFtZScpKTtcbiAgICBjb25zdCBsYWJlbFNpbmd1bGFyID0gZmllbGQuZ2V0KCdsYWJlbF9zaW5ndWxhcicpIHx8IGZpZWxkLmdldCgnbGFiZWwnLCBmaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgY29uc3QgbGlzdExhYmVsID0gaXRlbXMuc2l6ZSA9PT0gMSA/IGxhYmVsU2luZ3VsYXIudG9Mb3dlckNhc2UoKSA6IGxhYmVsLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgbWluaW1pemVDb2xsYXBzZWRJdGVtcyA9IGZpZWxkLmdldCgnbWluaW1pemVfY29sbGFwc2VkJywgZmFsc2UpO1xuICAgIGNvbnN0IGFsbEl0ZW1zQ29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWQuZXZlcnkodmFsID0+IHZhbCA9PT0gdHJ1ZSk7XG4gICAgY29uc3Qgc2VsZkNvbGxhcHNlZCA9IGFsbEl0ZW1zQ29sbGFwc2VkICYmIChsaXN0Q29sbGFwc2VkIHx8ICFtaW5pbWl6ZUNvbGxhcHNlZEl0ZW1zKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8Q2xhc3NOYW1lcz5cbiAgICAgICAgeyh7IGN4LCBjc3MgfSkgPT4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGlkPXtmb3JJRH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goXG4gICAgICAgICAgICAgIGNsYXNzTmFtZVdyYXBwZXIsXG4gICAgICAgICAgICAgIGNzc2BcbiAgICAgICAgICAgICAgICAke3N0eWxlU3RyaW5ncy5vYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXJ9XG4gICAgICAgICAgICAgIGAsXG4gICAgICAgICAgICApfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxPYmplY3RXaWRnZXRUb3BCYXJcbiAgICAgICAgICAgICAgYWxsb3dBZGQ9e2ZpZWxkLmdldCgnYWxsb3dfYWRkJywgdHJ1ZSl9XG4gICAgICAgICAgICAgIG9uQWRkPXt0aGlzLmhhbmRsZUFkZH1cbiAgICAgICAgICAgICAgdHlwZXM9e2ZpZWxkLmdldChUWVBFU19LRVksIG51bGwpfVxuICAgICAgICAgICAgICBvbkFkZFR5cGU9e3R5cGUgPT4gdGhpcy5oYW5kbGVBZGRUeXBlKHR5cGUsIHJlc29sdmVGaWVsZEtleVR5cGUoZmllbGQpKX1cbiAgICAgICAgICAgICAgaGVhZGluZz17YCR7aXRlbXMuc2l6ZX0gJHtsaXN0TGFiZWx9YH1cbiAgICAgICAgICAgICAgbGFiZWw9e2xhYmVsU2luZ3VsYXIudG9Mb3dlckNhc2UoKX1cbiAgICAgICAgICAgICAgb25Db2xsYXBzZVRvZ2dsZT17dGhpcy5oYW5kbGVDb2xsYXBzZUFsbFRvZ2dsZX1cbiAgICAgICAgICAgICAgY29sbGFwc2VkPXtzZWxmQ29sbGFwc2VkfVxuICAgICAgICAgICAgICB0PXt0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHsoIXNlbGZDb2xsYXBzZWQgfHwgIW1pbmltaXplQ29sbGFwc2VkSXRlbXMpICYmIChcbiAgICAgICAgICAgICAgPFNvcnRhYmxlTGlzdFxuICAgICAgICAgICAgICAgIGl0ZW1zPXtpdGVtc31cbiAgICAgICAgICAgICAgICByZW5kZXJJdGVtPXt0aGlzLnJlbmRlckl0ZW19XG4gICAgICAgICAgICAgICAgb25Tb3J0RW5kPXt0aGlzLm9uU29ydEVuZH1cbiAgICAgICAgICAgICAgICB1c2VEcmFnSGFuZGxlXG4gICAgICAgICAgICAgICAgbG9ja0F4aXM9XCJ5XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L0NsYXNzTmFtZXM+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlcklucHV0KCkge1xuICAgIGNvbnN0IHsgZm9ySUQsIGNsYXNzTmFtZVdyYXBwZXIgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIHJldHVybiAoXG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBpZD17Zm9ySUR9XG4gICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICBvbkZvY3VzPXt0aGlzLmhhbmRsZUZvY3VzfVxuICAgICAgICBvbkJsdXI9e3RoaXMuaGFuZGxlQmx1cn1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVXcmFwcGVyfVxuICAgICAgLz5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmdldFZhbHVlVHlwZSgpICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJMaXN0Q29udHJvbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJJbnB1dCgpO1xuICAgIH1cbiAgfVxufVxuIl19 */",
|
|
66
|
+
toString: _EMOTION_STRINGIFIED_CSS_ERROR__
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
const SortableList = (0, _reactSortableHoc.SortableContainer)(({
|
|
70
|
+
items,
|
|
71
|
+
renderItem
|
|
72
|
+
}) => {
|
|
73
|
+
return (0, _core.jsx)("div", null, items.map(renderItem));
|
|
74
|
+
});
|
|
75
|
+
const valueTypes = {
|
|
76
|
+
SINGLE: 'SINGLE',
|
|
77
|
+
MULTIPLE: 'MULTIPLE',
|
|
78
|
+
MIXED: 'MIXED'
|
|
79
|
+
};
|
|
80
|
+
function handleSummary(summary, entry, label, item) {
|
|
81
|
+
const data = _decapCmsLibWidgets.stringTemplate.addFileTemplateFields(entry.get('path'), item.set('fields.label', label));
|
|
82
|
+
return _decapCmsLibWidgets.stringTemplate.compileStringTemplate(summary, null, '', data);
|
|
83
|
+
}
|
|
84
|
+
function validateItem(field, item) {
|
|
85
|
+
if (!_immutable.Map.isMap(item)) {
|
|
86
|
+
console.warn(`'${field.get('name')}' field item value value should be a map but is a '${typeof item}'`);
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
function LabelComponent({
|
|
92
|
+
field,
|
|
93
|
+
isActive,
|
|
94
|
+
hasErrors,
|
|
95
|
+
uniqueFieldId,
|
|
96
|
+
isFieldOptional,
|
|
97
|
+
t
|
|
98
|
+
}) {
|
|
99
|
+
const label = `${field.get('label', field.get('name'))}`;
|
|
100
|
+
return (0, _core.jsx)(_decapCmsUiDefault.FieldLabel, {
|
|
101
|
+
isActive: isActive,
|
|
102
|
+
hasErrors: hasErrors,
|
|
103
|
+
htmlFor: uniqueFieldId
|
|
104
|
+
}, label, " ", `${isFieldOptional ? ` (${t('editor.editorControl.field.optional')})` : ''}`);
|
|
105
|
+
}
|
|
106
|
+
class ListControl extends _react.default.Component {
|
|
107
|
+
constructor(props) {
|
|
108
|
+
super(props);
|
|
109
|
+
_defineProperty(this, "validations", []);
|
|
110
|
+
_defineProperty(this, "valueToString", value => {
|
|
111
|
+
let stringValue;
|
|
112
|
+
if (_immutable.List.isList(value) || Array.isArray(value)) {
|
|
113
|
+
stringValue = value.join(',');
|
|
114
|
+
} else {
|
|
115
|
+
console.warn(`Expected List value to be an array but received '${value}' with type of '${typeof value}'. Please check the value provided to the '${this.props.field.get('name')}' field`);
|
|
116
|
+
stringValue = String(value);
|
|
117
|
+
}
|
|
118
|
+
return stringValue.replace(/,([^\s]|$)/g, ', $1');
|
|
119
|
+
});
|
|
120
|
+
_defineProperty(this, "getValueType", () => {
|
|
121
|
+
const {
|
|
122
|
+
field
|
|
123
|
+
} = this.props;
|
|
124
|
+
if (field.get('fields')) {
|
|
125
|
+
return valueTypes.MULTIPLE;
|
|
126
|
+
} else if (field.get('field')) {
|
|
127
|
+
return valueTypes.SINGLE;
|
|
128
|
+
} else if (field.get(_typedListHelpers.TYPES_KEY)) {
|
|
129
|
+
return valueTypes.MIXED;
|
|
130
|
+
} else {
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
_defineProperty(this, "uniqueFieldId", (0, _uniqueId2.default)(`${this.props.field.get('name')}-field-`));
|
|
135
|
+
_defineProperty(this, "handleChange", e => {
|
|
136
|
+
const {
|
|
137
|
+
onChange
|
|
138
|
+
} = this.props;
|
|
139
|
+
const oldValue = this.state.value;
|
|
140
|
+
const newValue = e.target.value.trim();
|
|
141
|
+
const listValue = newValue ? newValue.split(',') : [];
|
|
142
|
+
if (newValue.match(/,$/) && oldValue.match(/, $/)) {
|
|
143
|
+
listValue.pop();
|
|
144
|
+
}
|
|
145
|
+
const parsedValue = this.valueToString(listValue);
|
|
146
|
+
this.setState({
|
|
147
|
+
value: parsedValue
|
|
148
|
+
});
|
|
149
|
+
onChange((0, _immutable.List)(listValue.map(val => val.trim())));
|
|
150
|
+
});
|
|
151
|
+
_defineProperty(this, "handleFocus", () => {
|
|
152
|
+
this.props.setActiveStyle();
|
|
153
|
+
});
|
|
154
|
+
_defineProperty(this, "handleBlur", e => {
|
|
155
|
+
const listValue = e.target.value.split(',').map(el => el.trim()).filter(el => el);
|
|
156
|
+
this.setState({
|
|
157
|
+
value: this.valueToString(listValue)
|
|
158
|
+
});
|
|
159
|
+
this.props.setInactiveStyle();
|
|
160
|
+
});
|
|
161
|
+
_defineProperty(this, "handleAdd", e => {
|
|
162
|
+
e.preventDefault();
|
|
163
|
+
const {
|
|
164
|
+
field
|
|
165
|
+
} = this.props;
|
|
166
|
+
const parsedValue = this.getValueType() === valueTypes.SINGLE ? this.singleDefault() : (0, _immutable.fromJS)(this.multipleDefault(field.get('fields')));
|
|
167
|
+
this.addItem(parsedValue);
|
|
168
|
+
});
|
|
169
|
+
_defineProperty(this, "singleDefault", () => {
|
|
170
|
+
return this.props.field.getIn(['field', 'default'], null);
|
|
171
|
+
});
|
|
172
|
+
_defineProperty(this, "multipleDefault", fields => {
|
|
173
|
+
return this.getFieldsDefault(fields);
|
|
174
|
+
});
|
|
175
|
+
_defineProperty(this, "handleAddType", (type, typeKey) => {
|
|
176
|
+
const parsedValue = (0, _immutable.fromJS)(this.mixedDefault(typeKey, type));
|
|
177
|
+
this.addItem(parsedValue);
|
|
178
|
+
});
|
|
179
|
+
_defineProperty(this, "mixedDefault", (typeKey, type) => {
|
|
180
|
+
const selectedType = this.props.field.get(_typedListHelpers.TYPES_KEY).find(f => f.get('name') === type);
|
|
181
|
+
const fields = selectedType.get('fields') || [selectedType.get('field')];
|
|
182
|
+
return this.getFieldsDefault(fields, {
|
|
183
|
+
[typeKey]: type
|
|
184
|
+
});
|
|
185
|
+
});
|
|
186
|
+
_defineProperty(this, "getFieldsDefault", (fields, initialValue = {}) => {
|
|
187
|
+
return fields.reduce((acc, item) => {
|
|
188
|
+
const subfields = item.get('field') || item.get('fields');
|
|
189
|
+
const object = item.get('widget') == 'object';
|
|
190
|
+
const name = item.get('name');
|
|
191
|
+
const defaultValue = item.get('default', null);
|
|
192
|
+
if (_immutable.List.isList(subfields) && object) {
|
|
193
|
+
const subDefaultValue = this.getFieldsDefault(subfields);
|
|
194
|
+
!(0, _isEmpty2.default)(subDefaultValue) && (acc[name] = subDefaultValue);
|
|
195
|
+
return acc;
|
|
196
|
+
}
|
|
197
|
+
if (_immutable.Map.isMap(subfields) && object) {
|
|
198
|
+
const subDefaultValue = this.getFieldsDefault([subfields]);
|
|
199
|
+
!(0, _isEmpty2.default)(subDefaultValue) && (acc[name] = subDefaultValue);
|
|
200
|
+
return acc;
|
|
201
|
+
}
|
|
202
|
+
if (defaultValue !== null) {
|
|
203
|
+
acc[name] = defaultValue;
|
|
204
|
+
}
|
|
205
|
+
return acc;
|
|
206
|
+
}, initialValue);
|
|
207
|
+
});
|
|
208
|
+
_defineProperty(this, "addItem", parsedValue => {
|
|
209
|
+
const {
|
|
210
|
+
value,
|
|
211
|
+
onChange,
|
|
212
|
+
field
|
|
213
|
+
} = this.props;
|
|
214
|
+
const addToTop = field.get('add_to_top', false);
|
|
215
|
+
const itemKey = (0, _v.default)();
|
|
216
|
+
this.setState({
|
|
217
|
+
itemsCollapsed: addToTop ? [false, ...this.state.itemsCollapsed] : [...this.state.itemsCollapsed, false],
|
|
218
|
+
keys: addToTop ? [itemKey, ...this.state.keys] : [...this.state.keys, itemKey]
|
|
219
|
+
});
|
|
220
|
+
const listValue = value || (0, _immutable.List)();
|
|
221
|
+
if (addToTop) {
|
|
222
|
+
onChange(listValue.unshift(parsedValue));
|
|
223
|
+
} else {
|
|
224
|
+
onChange(listValue.push(parsedValue));
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
_defineProperty(this, "processControlRef", ref => {
|
|
228
|
+
if (!ref) return;
|
|
229
|
+
const {
|
|
230
|
+
validate,
|
|
231
|
+
props: {
|
|
232
|
+
validationKey: key
|
|
233
|
+
}
|
|
234
|
+
} = ref;
|
|
235
|
+
this.validations.push({
|
|
236
|
+
key,
|
|
237
|
+
validate
|
|
238
|
+
});
|
|
239
|
+
});
|
|
240
|
+
_defineProperty(this, "validate", () => {
|
|
241
|
+
if (this.getValueType()) {
|
|
242
|
+
this.validations.forEach(item => {
|
|
243
|
+
item.validate();
|
|
244
|
+
});
|
|
245
|
+
} else {
|
|
246
|
+
this.props.validate();
|
|
247
|
+
}
|
|
248
|
+
this.props.onValidateObject(this.props.forID, this.validateSize());
|
|
249
|
+
});
|
|
250
|
+
_defineProperty(this, "validateSize", () => {
|
|
251
|
+
const {
|
|
252
|
+
field,
|
|
253
|
+
value,
|
|
254
|
+
t
|
|
255
|
+
} = this.props;
|
|
256
|
+
const min = field.get('min');
|
|
257
|
+
const max = field.get('max');
|
|
258
|
+
const required = field.get('required', true);
|
|
259
|
+
if (!required && !(value !== null && value !== void 0 && value.size)) {
|
|
260
|
+
return [];
|
|
261
|
+
}
|
|
262
|
+
const error = _decapCmsLibWidgets.validations.validateMinMax(t, field.get('label', field.get('name')), value, min, max);
|
|
263
|
+
return error ? [error] : [];
|
|
264
|
+
});
|
|
265
|
+
/**
|
|
266
|
+
* In case the `onChangeObject` function is frozen by a child widget implementation,
|
|
267
|
+
* e.g. when debounced, always get the latest object value instead of using
|
|
268
|
+
* `this.props.value` directly.
|
|
269
|
+
*/
|
|
270
|
+
_defineProperty(this, "getObjectValue", idx => this.props.value.get(idx) || (0, _immutable.Map)());
|
|
271
|
+
_defineProperty(this, "handleRemove", (index, event) => {
|
|
272
|
+
event.preventDefault();
|
|
273
|
+
const {
|
|
274
|
+
itemsCollapsed
|
|
275
|
+
} = this.state;
|
|
276
|
+
const {
|
|
277
|
+
value,
|
|
278
|
+
metadata,
|
|
279
|
+
onChange,
|
|
280
|
+
field,
|
|
281
|
+
clearFieldErrors
|
|
282
|
+
} = this.props;
|
|
283
|
+
const collectionName = field.get('name');
|
|
284
|
+
const isSingleField = this.getValueType() === valueTypes.SINGLE;
|
|
285
|
+
const metadataRemovePath = isSingleField ? value.get(index) : value.get(index).valueSeq();
|
|
286
|
+
const parsedMetadata = metadata && !metadata.isEmpty() ? {
|
|
287
|
+
[collectionName]: metadata.removeIn(metadataRemovePath)
|
|
288
|
+
} : metadata;
|
|
289
|
+
itemsCollapsed.splice(index, 1);
|
|
290
|
+
// clear validations
|
|
291
|
+
this.validations = [];
|
|
292
|
+
this.setState({
|
|
293
|
+
itemsCollapsed: [...itemsCollapsed],
|
|
294
|
+
keys: Array.from({
|
|
295
|
+
length: value.size - 1
|
|
296
|
+
}, () => (0, _v.default)())
|
|
297
|
+
});
|
|
298
|
+
onChange(value.remove(index), parsedMetadata);
|
|
299
|
+
clearFieldErrors();
|
|
300
|
+
});
|
|
301
|
+
_defineProperty(this, "handleItemCollapseToggle", (index, event) => {
|
|
302
|
+
event.preventDefault();
|
|
303
|
+
const {
|
|
304
|
+
itemsCollapsed
|
|
305
|
+
} = this.state;
|
|
306
|
+
const newItemsCollapsed = itemsCollapsed.map((collapsed, itemIndex) => {
|
|
307
|
+
if (index === itemIndex) {
|
|
308
|
+
return !collapsed;
|
|
309
|
+
}
|
|
310
|
+
return collapsed;
|
|
311
|
+
});
|
|
312
|
+
this.setState({
|
|
313
|
+
itemsCollapsed: newItemsCollapsed
|
|
314
|
+
});
|
|
315
|
+
});
|
|
316
|
+
_defineProperty(this, "handleCollapseAllToggle", e => {
|
|
317
|
+
e.preventDefault();
|
|
318
|
+
const {
|
|
319
|
+
value,
|
|
320
|
+
field
|
|
321
|
+
} = this.props;
|
|
322
|
+
const {
|
|
323
|
+
itemsCollapsed,
|
|
324
|
+
listCollapsed
|
|
325
|
+
} = this.state;
|
|
326
|
+
const minimizeCollapsedItems = field.get('minimize_collapsed', false);
|
|
327
|
+
const listCollapsedByDefault = field.get('collapsed', true);
|
|
328
|
+
const allItemsCollapsed = itemsCollapsed.every(val => val === true);
|
|
329
|
+
if (minimizeCollapsedItems) {
|
|
330
|
+
let updatedItemsCollapsed = itemsCollapsed;
|
|
331
|
+
// Only allow collapsing all items in this mode but not opening all at once
|
|
332
|
+
if (!listCollapsed || !listCollapsedByDefault) {
|
|
333
|
+
updatedItemsCollapsed = Array(value.size).fill(!listCollapsed);
|
|
334
|
+
}
|
|
335
|
+
this.setState({
|
|
336
|
+
listCollapsed: !listCollapsed,
|
|
337
|
+
itemsCollapsed: updatedItemsCollapsed
|
|
338
|
+
});
|
|
339
|
+
} else {
|
|
340
|
+
this.setState({
|
|
341
|
+
itemsCollapsed: Array(value.size).fill(!allItemsCollapsed)
|
|
342
|
+
});
|
|
343
|
+
}
|
|
344
|
+
});
|
|
345
|
+
_defineProperty(this, "onSortEnd", ({
|
|
346
|
+
oldIndex,
|
|
347
|
+
newIndex
|
|
348
|
+
}) => {
|
|
349
|
+
const {
|
|
350
|
+
value,
|
|
351
|
+
clearFieldErrors
|
|
352
|
+
} = this.props;
|
|
353
|
+
const {
|
|
354
|
+
itemsCollapsed,
|
|
355
|
+
keys
|
|
356
|
+
} = this.state;
|
|
357
|
+
|
|
358
|
+
// Update value
|
|
359
|
+
const item = value.get(oldIndex);
|
|
360
|
+
const newValue = value.delete(oldIndex).insert(newIndex, item);
|
|
361
|
+
this.props.onChange(newValue);
|
|
362
|
+
|
|
363
|
+
// Update collapsing
|
|
364
|
+
const collapsed = itemsCollapsed[oldIndex];
|
|
365
|
+
itemsCollapsed.splice(oldIndex, 1);
|
|
366
|
+
const updatedItemsCollapsed = [...itemsCollapsed];
|
|
367
|
+
updatedItemsCollapsed.splice(newIndex, 0, collapsed);
|
|
368
|
+
|
|
369
|
+
// Reset item to ensure updated state
|
|
370
|
+
const updatedKeys = keys.map((key, keyIndex) => {
|
|
371
|
+
if (keyIndex === oldIndex || keyIndex === newIndex) {
|
|
372
|
+
return (0, _v.default)();
|
|
373
|
+
}
|
|
374
|
+
return key;
|
|
375
|
+
});
|
|
376
|
+
this.setState({
|
|
377
|
+
itemsCollapsed: updatedItemsCollapsed,
|
|
378
|
+
keys: updatedKeys
|
|
379
|
+
});
|
|
380
|
+
|
|
381
|
+
//clear error fields and remove old validations
|
|
382
|
+
clearFieldErrors();
|
|
383
|
+
this.validations = this.validations.filter(item => updatedKeys.includes(item.key));
|
|
384
|
+
});
|
|
385
|
+
_defineProperty(this, "hasError", index => {
|
|
386
|
+
const {
|
|
387
|
+
fieldsErrors
|
|
388
|
+
} = this.props;
|
|
389
|
+
if (fieldsErrors && fieldsErrors.size > 0) {
|
|
390
|
+
return Object.values(fieldsErrors.toJS()).some(arr => arr.some(err => err.parentIds && err.parentIds.includes(this.state.keys[index])));
|
|
391
|
+
}
|
|
392
|
+
});
|
|
393
|
+
// eslint-disable-next-line react/display-name
|
|
394
|
+
_defineProperty(this, "renderItem", (item, index) => {
|
|
395
|
+
const {
|
|
396
|
+
classNameWrapper,
|
|
397
|
+
editorControl,
|
|
398
|
+
onValidateObject,
|
|
399
|
+
metadata,
|
|
400
|
+
clearFieldErrors,
|
|
401
|
+
fieldsErrors,
|
|
402
|
+
controlRef,
|
|
403
|
+
resolveWidget,
|
|
404
|
+
parentIds,
|
|
405
|
+
forID,
|
|
406
|
+
t
|
|
407
|
+
} = this.props;
|
|
408
|
+
const {
|
|
409
|
+
itemsCollapsed,
|
|
410
|
+
keys
|
|
411
|
+
} = this.state;
|
|
412
|
+
const collapsed = itemsCollapsed[index];
|
|
413
|
+
const key = keys[index];
|
|
414
|
+
let field = this.props.field;
|
|
415
|
+
const hasError = this.hasError(index);
|
|
416
|
+
const isVariableTypesList = this.getValueType() === valueTypes.MIXED;
|
|
417
|
+
if (isVariableTypesList) {
|
|
418
|
+
field = (0, _typedListHelpers.getTypedFieldForValue)(field, item);
|
|
419
|
+
if (!field) {
|
|
420
|
+
return this.renderErroneousTypedItem(index, item);
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
return (0, _core.jsx)(SortableListItem, {
|
|
424
|
+
css: /*#__PURE__*/(0, _core.css)([styles.listControlItem, collapsed && styles.listControlItemCollapsed], ";label:ListControl;" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFnaEJRIiwiZmlsZSI6Ii4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IEltbXV0YWJsZVByb3BUeXBlcyBmcm9tICdyZWFjdC1pbW11dGFibGUtcHJvcHR5cGVzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCB7IGNzcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL2NvcmUnO1xuaW1wb3J0IHsgTGlzdCwgTWFwLCBmcm9tSlMgfSBmcm9tICdpbW11dGFibGUnO1xuaW1wb3J0IHsgcGFydGlhbCwgaXNFbXB0eSwgdW5pcXVlSWQgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHV1aWQgZnJvbSAndXVpZC92NCc7XG5pbXBvcnQgeyBTb3J0YWJsZUNvbnRhaW5lciwgU29ydGFibGVFbGVtZW50LCBTb3J0YWJsZUhhbmRsZSB9IGZyb20gJ3JlYWN0LXNvcnRhYmxlLWhvYyc7XG5pbXBvcnQgRGVjYXBDbXNXaWRnZXRPYmplY3QgZnJvbSAnZGVjYXAtY21zLXdpZGdldC1vYmplY3QnO1xuaW1wb3J0IHtcbiAgTGlzdEl0ZW1Ub3BCYXIsXG4gIE9iamVjdFdpZGdldFRvcEJhcixcbiAgY29sb3JzLFxuICBsZW5ndGhzLFxuICBGaWVsZExhYmVsLFxufSBmcm9tICdkZWNhcC1jbXMtdWktZGVmYXVsdCc7XG5pbXBvcnQgeyBzdHJpbmdUZW1wbGF0ZSwgdmFsaWRhdGlvbnMgfSBmcm9tICdkZWNhcC1jbXMtbGliLXdpZGdldHMnO1xuXG5pbXBvcnQge1xuICBUWVBFU19LRVksXG4gIGdldFR5cGVkRmllbGRGb3JWYWx1ZSxcbiAgcmVzb2x2ZUZpZWxkS2V5VHlwZSxcbiAgZ2V0RXJyb3JNZXNzYWdlRm9yVHlwZWRGaWVsZEFuZFZhbHVlLFxufSBmcm9tICcuL3R5cGVkTGlzdEhlbHBlcnMnO1xuXG5jb25zdCBPYmplY3RDb250cm9sID0gRGVjYXBDbXNXaWRnZXRPYmplY3QuY29udHJvbENvbXBvbmVudDtcblxuY29uc3QgTGlzdEl0ZW0gPSBzdHlsZWQuZGl2KCk7XG5cbmNvbnN0IFNvcnRhYmxlTGlzdEl0ZW0gPSBTb3J0YWJsZUVsZW1lbnQoTGlzdEl0ZW0pO1xuXG5jb25zdCBTdHlsZWRMaXN0SXRlbVRvcEJhciA9IHN0eWxlZChMaXN0SXRlbVRvcEJhcilgXG4gIGJhY2tncm91bmQtY29sb3I6ICR7Y29sb3JzLnRleHRGaWVsZEJvcmRlcn07XG5gO1xuXG5jb25zdCBOZXN0ZWRPYmplY3RMYWJlbCA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6ICR7cHJvcHMgPT4gKHByb3BzLmNvbGxhcHNlZCA/ICdibG9jaycgOiAnbm9uZScpfTtcbiAgYm9yZGVyLXRvcDogMDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gKHByb3BzLmVycm9yID8gY29sb3JzLmVycm9yVGV4dCA6ICdpbmhlcml0Jyl9O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAke2NvbG9ycy50ZXh0RmllbGRCb3JkZXJ9O1xuICBwYWRkaW5nOiAxM3B4O1xuICBib3JkZXItcmFkaXVzOiAwIDAgJHtsZW5ndGhzLmJvcmRlclJhZGl1c30gJHtsZW5ndGhzLmJvcmRlclJhZGl1c307XG5gO1xuXG5jb25zdCBzdHlsZVN0cmluZ3MgPSB7XG4gIGNvbGxhcHNlZE9iamVjdENvbnRyb2w6IGBcbiAgICBkaXNwbGF5OiBub25lO1xuICBgLFxuICBvYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXI6IGBcbiAgICBwYWRkaW5nOiAke2xlbmd0aHMub2JqZWN0V2lkZ2V0VG9wQmFyQ29udGFpbmVyUGFkZGluZ307XG4gIGAsXG59O1xuXG5jb25zdCBzdHlsZXMgPSB7XG4gIGxpc3RDb250cm9sSXRlbTogY3NzYFxuICAgIG1hcmdpbi10b3A6IDE4cHg7XG5cbiAgICAmOmZpcnN0LW9mLXR5cGUge1xuICAgICAgbWFyZ2luLXRvcDogMjZweDtcbiAgICB9XG4gIGAsXG4gIGxpc3RDb250cm9sSXRlbUNvbGxhcHNlZDogY3NzYFxuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICBgLFxufTtcblxuY29uc3QgU29ydGFibGVMaXN0ID0gU29ydGFibGVDb250YWluZXIoKHsgaXRlbXMsIHJlbmRlckl0ZW0gfSkgPT4ge1xuICByZXR1cm4gPGRpdj57aXRlbXMubWFwKHJlbmRlckl0ZW0pfTwvZGl2Pjtcbn0pO1xuXG5jb25zdCB2YWx1ZVR5cGVzID0ge1xuICBTSU5HTEU6ICdTSU5HTEUnLFxuICBNVUxUSVBMRTogJ01VTFRJUExFJyxcbiAgTUlYRUQ6ICdNSVhFRCcsXG59O1xuXG5mdW5jdGlvbiBoYW5kbGVTdW1tYXJ5KHN1bW1hcnksIGVudHJ5LCBsYWJlbCwgaXRlbSkge1xuICBjb25zdCBkYXRhID0gc3RyaW5nVGVtcGxhdGUuYWRkRmlsZVRlbXBsYXRlRmllbGRzKFxuICAgIGVudHJ5LmdldCgncGF0aCcpLFxuICAgIGl0ZW0uc2V0KCdmaWVsZHMubGFiZWwnLCBsYWJlbCksXG4gICk7XG4gIHJldHVybiBzdHJpbmdUZW1wbGF0ZS5jb21waWxlU3RyaW5nVGVtcGxhdGUoc3VtbWFyeSwgbnVsbCwgJycsIGRhdGEpO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUl0ZW0oZmllbGQsIGl0ZW0pIHtcbiAgaWYgKCFNYXAuaXNNYXAoaXRlbSkpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgJyR7ZmllbGQuZ2V0KCduYW1lJyl9JyBmaWVsZCBpdGVtIHZhbHVlIHZhbHVlIHNob3VsZCBiZSBhIG1hcCBidXQgaXMgYSAnJHt0eXBlb2YgaXRlbX0nYCxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gTGFiZWxDb21wb25lbnQoeyBmaWVsZCwgaXNBY3RpdmUsIGhhc0Vycm9ycywgdW5pcXVlRmllbGRJZCwgaXNGaWVsZE9wdGlvbmFsLCB0IH0pIHtcbiAgY29uc3QgbGFiZWwgPSBgJHtmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpfWA7XG4gIHJldHVybiAoXG4gICAgPEZpZWxkTGFiZWwgaXNBY3RpdmU9e2lzQWN0aXZlfSBoYXNFcnJvcnM9e2hhc0Vycm9yc30gaHRtbEZvcj17dW5pcXVlRmllbGRJZH0+XG4gICAgICB7bGFiZWx9IHtgJHtpc0ZpZWxkT3B0aW9uYWwgPyBgICgke3QoJ2VkaXRvci5lZGl0b3JDb250cm9sLmZpZWxkLm9wdGlvbmFsJyl9KWAgOiAnJ31gfVxuICAgIDwvRmllbGRMYWJlbD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlzdENvbnRyb2wgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICB2YWxpZGF0aW9ucyA9IFtdO1xuXG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgbWV0YWRhdGE6IEltbXV0YWJsZVByb3BUeXBlcy5tYXAsXG4gICAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25DaGFuZ2VPYmplY3Q6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25WYWxpZGF0ZU9iamVjdDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICB2YWxpZGF0ZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICB2YWx1ZTogSW1tdXRhYmxlUHJvcFR5cGVzLmxpc3QsXG4gICAgZmllbGQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgZm9ySUQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY29udHJvbFJlZjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgbWVkaWFQYXRoczogSW1tdXRhYmxlUHJvcFR5cGVzLm1hcC5pc1JlcXVpcmVkLFxuICAgIGdldEFzc2V0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uT3Blbk1lZGlhTGlicmFyeTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvbkFkZEFzc2V0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uUmVtb3ZlSW5zZXJ0ZWRNZWRpYTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBjbGFzc05hbWVXcmFwcGVyOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgc2V0QWN0aXZlU3R5bGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgc2V0SW5hY3RpdmVTdHlsZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBlZGl0b3JDb250cm9sOiBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZCxcbiAgICByZXNvbHZlV2lkZ2V0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGNsZWFyRmllbGRFcnJvcnM6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgZmllbGRzRXJyb3JzOiBJbW11dGFibGVQcm9wVHlwZXMubWFwLmlzUmVxdWlyZWQsXG4gICAgZW50cnk6IEltbXV0YWJsZVByb3BUeXBlcy5tYXAuaXNSZXF1aXJlZCxcbiAgICB0OiBQcm9wVHlwZXMuZnVuYyxcbiAgfTtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIHZhbHVlOiBMaXN0KCksXG4gICAgcGFyZW50SWRzOiBbXSxcbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICBjb25zdCB7IGZpZWxkLCB2YWx1ZSB9ID0gcHJvcHM7XG4gICAgY29uc3QgbGlzdENvbGxhcHNlZCA9IGZpZWxkLmdldCgnY29sbGFwc2VkJywgdHJ1ZSk7XG4gICAgY29uc3QgaXRlbXNDb2xsYXBzZWQgPSAodmFsdWUgJiYgQXJyYXkodmFsdWUuc2l6ZSkuZmlsbChsaXN0Q29sbGFwc2VkKSkgfHwgW107XG4gICAgY29uc3Qga2V5cyA9ICh2YWx1ZSAmJiBBcnJheS5mcm9tKHsgbGVuZ3RoOiB2YWx1ZS5zaXplIH0sICgpID0+IHV1aWQoKSkpIHx8IFtdO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGxpc3RDb2xsYXBzZWQsXG4gICAgICBpdGVtc0NvbGxhcHNlZCxcbiAgICAgIHZhbHVlOiB0aGlzLnZhbHVlVG9TdHJpbmcodmFsdWUpLFxuICAgICAga2V5cyxcbiAgICB9O1xuICB9XG5cbiAgdmFsdWVUb1N0cmluZyA9IHZhbHVlID0+IHtcbiAgICBsZXQgc3RyaW5nVmFsdWU7XG4gICAgaWYgKExpc3QuaXNMaXN0KHZhbHVlKSB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgc3RyaW5nVmFsdWUgPSB2YWx1ZS5qb2luKCcsJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYEV4cGVjdGVkIExpc3QgdmFsdWUgdG8gYmUgYW4gYXJyYXkgYnV0IHJlY2VpdmVkICcke3ZhbHVlfScgd2l0aCB0eXBlIG9mICcke3R5cGVvZiB2YWx1ZX0nLiBQbGVhc2UgY2hlY2sgdGhlIHZhbHVlIHByb3ZpZGVkIHRvIHRoZSAnJHt0aGlzLnByb3BzLmZpZWxkLmdldChcbiAgICAgICAgICAnbmFtZScsXG4gICAgICAgICl9JyBmaWVsZGAsXG4gICAgICApO1xuICAgICAgc3RyaW5nVmFsdWUgPSBTdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gc3RyaW5nVmFsdWUucmVwbGFjZSgvLChbXlxcc118JCkvZywgJywgJDEnKTtcbiAgfTtcblxuICBnZXRWYWx1ZVR5cGUgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoZmllbGQuZ2V0KCdmaWVsZHMnKSkge1xuICAgICAgcmV0dXJuIHZhbHVlVHlwZXMuTVVMVElQTEU7XG4gICAgfSBlbHNlIGlmIChmaWVsZC5nZXQoJ2ZpZWxkJykpIHtcbiAgICAgIHJldHVybiB2YWx1ZVR5cGVzLlNJTkdMRTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkLmdldChUWVBFU19LRVkpKSB7XG4gICAgICByZXR1cm4gdmFsdWVUeXBlcy5NSVhFRDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9O1xuXG4gIHVuaXF1ZUZpZWxkSWQgPSB1bmlxdWVJZChgJHt0aGlzLnByb3BzLmZpZWxkLmdldCgnbmFtZScpfS1maWVsZC1gKTtcbiAgLyoqXG4gICAqIEFsd2F5cyB1cGRhdGUgc28gdGhhdCBlYWNoIG5lc3RlZCB3aWRnZXQgaGFzIHRoZSBvcHRpb24gdG8gdXBkYXRlLiBUaGlzIGlzXG4gICAqIHJlcXVpcmVkIGJlY2F1c2UgQ29udHJvbEhPQyBwcm92aWRlcyBhIGRlZmF1bHQgYHNob3VsZENvbXBvbmVudFVwZGF0ZWBcbiAgICogd2hpY2ggb25seSB1cGRhdGVzIGlmIHRoZSB2YWx1ZSBjaGFuZ2VzLCBidXQgZXZlcnkgd2lkZ2V0IG11c3QgYmUgYWxsb3dlZFxuICAgKiB0byBvdmVycmlkZSB0aGlzLlxuICAgKi9cbiAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaGFuZGxlQ2hhbmdlID0gZSA9PiB7XG4gICAgY29uc3QgeyBvbkNoYW5nZSB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMuc3RhdGUudmFsdWU7XG4gICAgY29uc3QgbmV3VmFsdWUgPSBlLnRhcmdldC52YWx1ZS50cmltKCk7XG4gICAgY29uc3QgbGlzdFZhbHVlID0gbmV3VmFsdWUgPyBuZXdWYWx1ZS5zcGxpdCgnLCcpIDogW107XG4gICAgaWYgKG5ld1ZhbHVlLm1hdGNoKC8sJC8pICYmIG9sZFZhbHVlLm1hdGNoKC8sICQvKSkge1xuICAgICAgbGlzdFZhbHVlLnBvcCgpO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gdGhpcy52YWx1ZVRvU3RyaW5nKGxpc3RWYWx1ZSk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiBwYXJzZWRWYWx1ZSB9KTtcbiAgICBvbkNoYW5nZShMaXN0KGxpc3RWYWx1ZS5tYXAodmFsID0+IHZhbC50cmltKCkpKSk7XG4gIH07XG5cbiAgaGFuZGxlRm9jdXMgPSAoKSA9PiB7XG4gICAgdGhpcy5wcm9wcy5zZXRBY3RpdmVTdHlsZSgpO1xuICB9O1xuXG4gIGhhbmRsZUJsdXIgPSBlID0+IHtcbiAgICBjb25zdCBsaXN0VmFsdWUgPSBlLnRhcmdldC52YWx1ZVxuICAgICAgLnNwbGl0KCcsJylcbiAgICAgIC5tYXAoZWwgPT4gZWwudHJpbSgpKVxuICAgICAgLmZpbHRlcihlbCA9PiBlbCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiB0aGlzLnZhbHVlVG9TdHJpbmcobGlzdFZhbHVlKSB9KTtcbiAgICB0aGlzLnByb3BzLnNldEluYWN0aXZlU3R5bGUoKTtcbiAgfTtcblxuICBoYW5kbGVBZGQgPSBlID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgeyBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBwYXJzZWRWYWx1ZSA9XG4gICAgICB0aGlzLmdldFZhbHVlVHlwZSgpID09PSB2YWx1ZVR5cGVzLlNJTkdMRVxuICAgICAgICA/IHRoaXMuc2luZ2xlRGVmYXVsdCgpXG4gICAgICAgIDogZnJvbUpTKHRoaXMubXVsdGlwbGVEZWZhdWx0KGZpZWxkLmdldCgnZmllbGRzJykpKTtcbiAgICB0aGlzLmFkZEl0ZW0ocGFyc2VkVmFsdWUpO1xuICB9O1xuXG4gIHNpbmdsZURlZmF1bHQgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZmllbGQuZ2V0SW4oWydmaWVsZCcsICdkZWZhdWx0J10sIG51bGwpO1xuICB9O1xuXG4gIG11bHRpcGxlRGVmYXVsdCA9IGZpZWxkcyA9PiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRzRGVmYXVsdChmaWVsZHMpO1xuICB9O1xuXG4gIGhhbmRsZUFkZFR5cGUgPSAodHlwZSwgdHlwZUtleSkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gZnJvbUpTKHRoaXMubWl4ZWREZWZhdWx0KHR5cGVLZXksIHR5cGUpKTtcbiAgICB0aGlzLmFkZEl0ZW0ocGFyc2VkVmFsdWUpO1xuICB9O1xuXG4gIG1peGVkRGVmYXVsdCA9ICh0eXBlS2V5LCB0eXBlKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRUeXBlID0gdGhpcy5wcm9wcy5maWVsZC5nZXQoVFlQRVNfS0VZKS5maW5kKGYgPT4gZi5nZXQoJ25hbWUnKSA9PT0gdHlwZSk7XG4gICAgY29uc3QgZmllbGRzID0gc2VsZWN0ZWRUeXBlLmdldCgnZmllbGRzJykgfHwgW3NlbGVjdGVkVHlwZS5nZXQoJ2ZpZWxkJyldO1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRzRGVmYXVsdChmaWVsZHMsIHsgW3R5cGVLZXldOiB0eXBlIH0pO1xuICB9O1xuXG4gIGdldEZpZWxkc0RlZmF1bHQgPSAoZmllbGRzLCBpbml0aWFsVmFsdWUgPSB7fSkgPT4ge1xuICAgIHJldHVybiBmaWVsZHMucmVkdWNlKChhY2MsIGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IHN1YmZpZWxkcyA9IGl0ZW0uZ2V0KCdmaWVsZCcpIHx8IGl0ZW0uZ2V0KCdmaWVsZHMnKTtcbiAgICAgIGNvbnN0IG9iamVjdCA9IGl0ZW0uZ2V0KCd3aWRnZXQnKSA9PSAnb2JqZWN0JztcbiAgICAgIGNvbnN0IG5hbWUgPSBpdGVtLmdldCgnbmFtZScpO1xuICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gaXRlbS5nZXQoJ2RlZmF1bHQnLCBudWxsKTtcblxuICAgICAgaWYgKExpc3QuaXNMaXN0KHN1YmZpZWxkcykgJiYgb2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IHN1YkRlZmF1bHRWYWx1ZSA9IHRoaXMuZ2V0RmllbGRzRGVmYXVsdChzdWJmaWVsZHMpO1xuICAgICAgICAhaXNFbXB0eShzdWJEZWZhdWx0VmFsdWUpICYmIChhY2NbbmFtZV0gPSBzdWJEZWZhdWx0VmFsdWUpO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfVxuXG4gICAgICBpZiAoTWFwLmlzTWFwKHN1YmZpZWxkcykgJiYgb2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IHN1YkRlZmF1bHRWYWx1ZSA9IHRoaXMuZ2V0RmllbGRzRGVmYXVsdChbc3ViZmllbGRzXSk7XG4gICAgICAgICFpc0VtcHR5KHN1YkRlZmF1bHRWYWx1ZSkgJiYgKGFjY1tuYW1lXSA9IHN1YkRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9XG5cbiAgICAgIGlmIChkZWZhdWx0VmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgYWNjW25hbWVdID0gZGVmYXVsdFZhbHVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIGluaXRpYWxWYWx1ZSk7XG4gIH07XG5cbiAgYWRkSXRlbSA9IHBhcnNlZFZhbHVlID0+IHtcbiAgICBjb25zdCB7IHZhbHVlLCBvbkNoYW5nZSwgZmllbGQgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgYWRkVG9Ub3AgPSBmaWVsZC5nZXQoJ2FkZF90b190b3AnLCBmYWxzZSk7XG5cbiAgICBjb25zdCBpdGVtS2V5ID0gdXVpZCgpO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXNDb2xsYXBzZWQ6IGFkZFRvVG9wXG4gICAgICAgID8gW2ZhbHNlLCAuLi50aGlzLnN0YXRlLml0ZW1zQ29sbGFwc2VkXVxuICAgICAgICA6IFsuLi50aGlzLnN0YXRlLml0ZW1zQ29sbGFwc2VkLCBmYWxzZV0sXG4gICAgICBrZXlzOiBhZGRUb1RvcCA/IFtpdGVtS2V5LCAuLi50aGlzLnN0YXRlLmtleXNdIDogWy4uLnRoaXMuc3RhdGUua2V5cywgaXRlbUtleV0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBsaXN0VmFsdWUgPSB2YWx1ZSB8fCBMaXN0KCk7XG4gICAgaWYgKGFkZFRvVG9wKSB7XG4gICAgICBvbkNoYW5nZShsaXN0VmFsdWUudW5zaGlmdChwYXJzZWRWYWx1ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvbkNoYW5nZShsaXN0VmFsdWUucHVzaChwYXJzZWRWYWx1ZSkpO1xuICAgIH1cbiAgfTtcblxuICBwcm9jZXNzQ29udHJvbFJlZiA9IHJlZiA9PiB7XG4gICAgaWYgKCFyZWYpIHJldHVybjtcbiAgICBjb25zdCB7XG4gICAgICB2YWxpZGF0ZSxcbiAgICAgIHByb3BzOiB7IHZhbGlkYXRpb25LZXk6IGtleSB9LFxuICAgIH0gPSByZWY7XG4gICAgdGhpcy52YWxpZGF0aW9ucy5wdXNoKHsga2V5LCB2YWxpZGF0ZSB9KTtcbiAgfTtcblxuICB2YWxpZGF0ZSA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5nZXRWYWx1ZVR5cGUoKSkge1xuICAgICAgdGhpcy52YWxpZGF0aW9ucy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBpdGVtLnZhbGlkYXRlKCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9wcy52YWxpZGF0ZSgpO1xuICAgIH1cbiAgICB0aGlzLnByb3BzLm9uVmFsaWRhdGVPYmplY3QodGhpcy5wcm9wcy5mb3JJRCwgdGhpcy52YWxpZGF0ZVNpemUoKSk7XG4gIH07XG5cbiAgdmFsaWRhdGVTaXplID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgZmllbGQsIHZhbHVlLCB0IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG1pbiA9IGZpZWxkLmdldCgnbWluJyk7XG4gICAgY29uc3QgbWF4ID0gZmllbGQuZ2V0KCdtYXgnKTtcbiAgICBjb25zdCByZXF1aXJlZCA9IGZpZWxkLmdldCgncmVxdWlyZWQnLCB0cnVlKTtcblxuICAgIGlmICghcmVxdWlyZWQgJiYgIXZhbHVlPy5zaXplKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgZXJyb3IgPSB2YWxpZGF0aW9ucy52YWxpZGF0ZU1pbk1heChcbiAgICAgIHQsXG4gICAgICBmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpLFxuICAgICAgdmFsdWUsXG4gICAgICBtaW4sXG4gICAgICBtYXgsXG4gICAgKTtcblxuICAgIHJldHVybiBlcnJvciA/IFtlcnJvcl0gOiBbXTtcbiAgfTtcblxuICAvKipcbiAgICogSW4gY2FzZSB0aGUgYG9uQ2hhbmdlT2JqZWN0YCBmdW5jdGlvbiBpcyBmcm96ZW4gYnkgYSBjaGlsZCB3aWRnZXQgaW1wbGVtZW50YXRpb24sXG4gICAqIGUuZy4gd2hlbiBkZWJvdW5jZWQsIGFsd2F5cyBnZXQgdGhlIGxhdGVzdCBvYmplY3QgdmFsdWUgaW5zdGVhZCBvZiB1c2luZ1xuICAgKiBgdGhpcy5wcm9wcy52YWx1ZWAgZGlyZWN0bHkuXG4gICAqL1xuICBnZXRPYmplY3RWYWx1ZSA9IGlkeCA9PiB0aGlzLnByb3BzLnZhbHVlLmdldChpZHgpIHx8IE1hcCgpO1xuXG4gIGhhbmRsZUNoYW5nZUZvcihpbmRleCkge1xuICAgIHJldHVybiAoZiwgbmV3VmFsdWUsIG5ld01ldGFkYXRhKSA9PiB7XG4gICAgICBjb25zdCB7IHZhbHVlLCBtZXRhZGF0YSwgb25DaGFuZ2UsIGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBmaWVsZC5nZXQoJ25hbWUnKTtcbiAgICAgIGNvbnN0IGxpc3RGaWVsZE9iamVjdFdpZGdldCA9IGZpZWxkLmdldEluKFsnZmllbGQnLCAnd2lkZ2V0J10pID09PSAnb2JqZWN0JztcbiAgICAgIGNvbnN0IHdpdGhOYW1lS2V5ID1cbiAgICAgICAgdGhpcy5nZXRWYWx1ZVR5cGUoKSAhPT0gdmFsdWVUeXBlcy5TSU5HTEUgfHxcbiAgICAgICAgKHRoaXMuZ2V0VmFsdWVUeXBlKCkgPT09IHZhbHVlVHlwZXMuU0lOR0xFICYmIGxpc3RGaWVsZE9iamVjdFdpZGdldCk7XG4gICAgICBjb25zdCBuZXdPYmplY3RWYWx1ZSA9IHdpdGhOYW1lS2V5XG4gICAgICAgID8gdGhpcy5nZXRPYmplY3RWYWx1ZShpbmRleCkuc2V0KGYuZ2V0KCduYW1lJyksIG5ld1ZhbHVlKVxuICAgICAgICA6IG5ld1ZhbHVlO1xuICAgICAgY29uc3QgcGFyc2VkTWV0YWRhdGEgPSB7XG4gICAgICAgIFtjb2xsZWN0aW9uTmFtZV06IE9iamVjdC5hc3NpZ24obWV0YWRhdGEgPyBtZXRhZGF0YS50b0pTKCkgOiB7fSwgbmV3TWV0YWRhdGEgfHwge30pLFxuICAgICAgfTtcbiAgICAgIG9uQ2hhbmdlKHZhbHVlLnNldChpbmRleCwgbmV3T2JqZWN0VmFsdWUpLCBwYXJzZWRNZXRhZGF0YSk7XG4gICAgfTtcbiAgfVxuXG4gIGhhbmRsZVJlbW92ZSA9IChpbmRleCwgZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgeyB2YWx1ZSwgbWV0YWRhdGEsIG9uQ2hhbmdlLCBmaWVsZCwgY2xlYXJGaWVsZEVycm9ycyB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBjb2xsZWN0aW9uTmFtZSA9IGZpZWxkLmdldCgnbmFtZScpO1xuICAgIGNvbnN0IGlzU2luZ2xlRmllbGQgPSB0aGlzLmdldFZhbHVlVHlwZSgpID09PSB2YWx1ZVR5cGVzLlNJTkdMRTtcblxuICAgIGNvbnN0IG1ldGFkYXRhUmVtb3ZlUGF0aCA9IGlzU2luZ2xlRmllbGQgPyB2YWx1ZS5nZXQoaW5kZXgpIDogdmFsdWUuZ2V0KGluZGV4KS52YWx1ZVNlcSgpO1xuICAgIGNvbnN0IHBhcnNlZE1ldGFkYXRhID1cbiAgICAgIG1ldGFkYXRhICYmICFtZXRhZGF0YS5pc0VtcHR5KClcbiAgICAgICAgPyB7IFtjb2xsZWN0aW9uTmFtZV06IG1ldGFkYXRhLnJlbW92ZUluKG1ldGFkYXRhUmVtb3ZlUGF0aCkgfVxuICAgICAgICA6IG1ldGFkYXRhO1xuXG4gICAgaXRlbXNDb2xsYXBzZWQuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAvLyBjbGVhciB2YWxpZGF0aW9uc1xuICAgIHRoaXMudmFsaWRhdGlvbnMgPSBbXTtcblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXNDb2xsYXBzZWQ6IFsuLi5pdGVtc0NvbGxhcHNlZF0sXG4gICAgICBrZXlzOiBBcnJheS5mcm9tKHsgbGVuZ3RoOiB2YWx1ZS5zaXplIC0gMSB9LCAoKSA9PiB1dWlkKCkpLFxuICAgIH0pO1xuXG4gICAgb25DaGFuZ2UodmFsdWUucmVtb3ZlKGluZGV4KSwgcGFyc2VkTWV0YWRhdGEpO1xuICAgIGNsZWFyRmllbGRFcnJvcnMoKTtcbiAgfTtcblxuICBoYW5kbGVJdGVtQ29sbGFwc2VUb2dnbGUgPSAoaW5kZXgsIGV2ZW50KSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IG5ld0l0ZW1zQ29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWQubWFwKChjb2xsYXBzZWQsIGl0ZW1JbmRleCkgPT4ge1xuICAgICAgaWYgKGluZGV4ID09PSBpdGVtSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuICFjb2xsYXBzZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29sbGFwc2VkO1xuICAgIH0pO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXNDb2xsYXBzZWQ6IG5ld0l0ZW1zQ29sbGFwc2VkLFxuICAgIH0pO1xuICB9O1xuXG4gIGhhbmRsZUNvbGxhcHNlQWxsVG9nZ2xlID0gZSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHsgdmFsdWUsIGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQsIGxpc3RDb2xsYXBzZWQgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgbWluaW1pemVDb2xsYXBzZWRJdGVtcyA9IGZpZWxkLmdldCgnbWluaW1pemVfY29sbGFwc2VkJywgZmFsc2UpO1xuICAgIGNvbnN0IGxpc3RDb2xsYXBzZWRCeURlZmF1bHQgPSBmaWVsZC5nZXQoJ2NvbGxhcHNlZCcsIHRydWUpO1xuICAgIGNvbnN0IGFsbEl0ZW1zQ29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWQuZXZlcnkodmFsID0+IHZhbCA9PT0gdHJ1ZSk7XG5cbiAgICBpZiAobWluaW1pemVDb2xsYXBzZWRJdGVtcykge1xuICAgICAgbGV0IHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkO1xuICAgICAgLy8gT25seSBhbGxvdyBjb2xsYXBzaW5nIGFsbCBpdGVtcyBpbiB0aGlzIG1vZGUgYnV0IG5vdCBvcGVuaW5nIGFsbCBhdCBvbmNlXG4gICAgICBpZiAoIWxpc3RDb2xsYXBzZWQgfHwgIWxpc3RDb2xsYXBzZWRCeURlZmF1bHQpIHtcbiAgICAgICAgdXBkYXRlZEl0ZW1zQ29sbGFwc2VkID0gQXJyYXkodmFsdWUuc2l6ZSkuZmlsbCghbGlzdENvbGxhcHNlZCk7XG4gICAgICB9XG4gICAgICB0aGlzLnNldFN0YXRlKHsgbGlzdENvbGxhcHNlZDogIWxpc3RDb2xsYXBzZWQsIGl0ZW1zQ29sbGFwc2VkOiB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBpdGVtc0NvbGxhcHNlZDogQXJyYXkodmFsdWUuc2l6ZSkuZmlsbCghYWxsSXRlbXNDb2xsYXBzZWQpIH0pO1xuICAgIH1cbiAgfTtcblxuICBvYmplY3RMYWJlbChpdGVtKSB7XG4gICAgY29uc3QgeyBmaWVsZCwgZW50cnkgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgdmFsdWVUeXBlID0gdGhpcy5nZXRWYWx1ZVR5cGUoKTtcbiAgICBzd2l0Y2ggKHZhbHVlVHlwZSkge1xuICAgICAgY2FzZSB2YWx1ZVR5cGVzLk1JWEVEOiB7XG4gICAgICAgIGlmICghdmFsaWRhdGVJdGVtKGZpZWxkLCBpdGVtKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpdGVtVHlwZSA9IGdldFR5cGVkRmllbGRGb3JWYWx1ZShmaWVsZCwgaXRlbSk7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gaXRlbVR5cGUuZ2V0KCdsYWJlbCcsIGl0ZW1UeXBlLmdldCgnbmFtZScpKTtcbiAgICAgICAgLy8gZWFjaCB0eXBlIGNhbiBoYXZlIGl0cyBvd24gc3VtbWFyeSwgYnV0IGRlZmF1bHQgdG8gdGhlIGxpc3Qgc3VtbWFyeSBpZiBleGlzdHNcbiAgICAgICAgY29uc3Qgc3VtbWFyeSA9IGl0ZW1UeXBlLmdldCgnc3VtbWFyeScsIGZpZWxkLmdldCgnc3VtbWFyeScpKTtcbiAgICAgICAgY29uc3QgbGFiZWxSZXR1cm4gPSBzdW1tYXJ5ID8gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgbGFiZWwsIGl0ZW0pIDogbGFiZWw7XG4gICAgICAgIHJldHVybiBsYWJlbFJldHVybjtcbiAgICAgIH1cbiAgICAgIGNhc2UgdmFsdWVUeXBlcy5TSU5HTEU6IHtcbiAgICAgICAgY29uc3Qgc2luZ2xlRmllbGQgPSBmaWVsZC5nZXQoJ2ZpZWxkJyk7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gc2luZ2xlRmllbGQuZ2V0KCdsYWJlbCcsIHNpbmdsZUZpZWxkLmdldCgnbmFtZScpKTtcbiAgICAgICAgY29uc3Qgc3VtbWFyeSA9IGZpZWxkLmdldCgnc3VtbWFyeScpO1xuICAgICAgICBjb25zdCBkYXRhID0gZnJvbUpTKHsgW3NpbmdsZUZpZWxkLmdldCgnbmFtZScpXTogaXRlbSB9KTtcbiAgICAgICAgY29uc3QgbGFiZWxSZXR1cm4gPSBzdW1tYXJ5ID8gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgbGFiZWwsIGRhdGEpIDogbGFiZWw7XG4gICAgICAgIHJldHVybiBsYWJlbFJldHVybjtcbiAgICAgIH1cbiAgICAgIGNhc2UgdmFsdWVUeXBlcy5NVUxUSVBMRToge1xuICAgICAgICBpZiAoIXZhbGlkYXRlSXRlbShmaWVsZCwgaXRlbSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbXVsdGlGaWVsZHMgPSBmaWVsZC5nZXQoJ2ZpZWxkcycpO1xuICAgICAgICBjb25zdCBsYWJlbEZpZWxkID0gbXVsdGlGaWVsZHMgJiYgbXVsdGlGaWVsZHMuZmlyc3QoKTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpdGVtLmdldChsYWJlbEZpZWxkLmdldCgnbmFtZScpKTtcbiAgICAgICAgY29uc3Qgc3VtbWFyeSA9IGZpZWxkLmdldCgnc3VtbWFyeScpO1xuICAgICAgICBjb25zdCBsYWJlbFJldHVybiA9IHN1bW1hcnkgPyBoYW5kbGVTdW1tYXJ5KHN1bW1hcnksIGVudHJ5LCB2YWx1ZSwgaXRlbSkgOiB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIChsYWJlbFJldHVybiB8fCBgTm8gJHtsYWJlbEZpZWxkLmdldCgnbmFtZScpfWApLnRvU3RyaW5nKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIG9uU29ydEVuZCA9ICh7IG9sZEluZGV4LCBuZXdJbmRleCB9KSA9PiB7XG4gICAgY29uc3QgeyB2YWx1ZSwgY2xlYXJGaWVsZEVycm9ycyB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkLCBrZXlzIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgLy8gVXBkYXRlIHZhbHVlXG4gICAgY29uc3QgaXRlbSA9IHZhbHVlLmdldChvbGRJbmRleCk7XG4gICAgY29uc3QgbmV3VmFsdWUgPSB2YWx1ZS5kZWxldGUob2xkSW5kZXgpLmluc2VydChuZXdJbmRleCwgaXRlbSk7XG4gICAgdGhpcy5wcm9wcy5vbkNoYW5nZShuZXdWYWx1ZSk7XG5cbiAgICAvLyBVcGRhdGUgY29sbGFwc2luZ1xuICAgIGNvbnN0IGNvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkW29sZEluZGV4XTtcbiAgICBpdGVtc0NvbGxhcHNlZC5zcGxpY2Uob2xkSW5kZXgsIDEpO1xuICAgIGNvbnN0IHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCA9IFsuLi5pdGVtc0NvbGxhcHNlZF07XG4gICAgdXBkYXRlZEl0ZW1zQ29sbGFwc2VkLnNwbGljZShuZXdJbmRleCwgMCwgY29sbGFwc2VkKTtcblxuICAgIC8vIFJlc2V0IGl0ZW0gdG8gZW5zdXJlIHVwZGF0ZWQgc3RhdGVcbiAgICBjb25zdCB1cGRhdGVkS2V5cyA9IGtleXMubWFwKChrZXksIGtleUluZGV4KSA9PiB7XG4gICAgICBpZiAoa2V5SW5kZXggPT09IG9sZEluZGV4IHx8IGtleUluZGV4ID09PSBuZXdJbmRleCkge1xuICAgICAgICByZXR1cm4gdXVpZCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGtleTtcbiAgICB9KTtcbiAgICB0aGlzLnNldFN0YXRlKHsgaXRlbXNDb2xsYXBzZWQ6IHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCwga2V5czogdXBkYXRlZEtleXMgfSk7XG5cbiAgICAvL2NsZWFyIGVycm9yIGZpZWxkcyBhbmQgcmVtb3ZlIG9sZCB2YWxpZGF0aW9uc1xuICAgIGNsZWFyRmllbGRFcnJvcnMoKTtcbiAgICB0aGlzLnZhbGlkYXRpb25zID0gdGhpcy52YWxpZGF0aW9ucy5maWx0ZXIoaXRlbSA9PiB1cGRhdGVkS2V5cy5pbmNsdWRlcyhpdGVtLmtleSkpO1xuICB9O1xuXG4gIGhhc0Vycm9yID0gaW5kZXggPT4ge1xuICAgIGNvbnN0IHsgZmllbGRzRXJyb3JzIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChmaWVsZHNFcnJvcnMgJiYgZmllbGRzRXJyb3JzLnNpemUgPiAwKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhmaWVsZHNFcnJvcnMudG9KUygpKS5zb21lKGFyciA9PlxuICAgICAgICBhcnIuc29tZShlcnIgPT4gZXJyLnBhcmVudElkcyAmJiBlcnIucGFyZW50SWRzLmluY2x1ZGVzKHRoaXMuc3RhdGUua2V5c1tpbmRleF0pKSxcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9kaXNwbGF5LW5hbWVcbiAgcmVuZGVySXRlbSA9IChpdGVtLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGNsYXNzTmFtZVdyYXBwZXIsXG4gICAgICBlZGl0b3JDb250cm9sLFxuICAgICAgb25WYWxpZGF0ZU9iamVjdCxcbiAgICAgIG1ldGFkYXRhLFxuICAgICAgY2xlYXJGaWVsZEVycm9ycyxcbiAgICAgIGZpZWxkc0Vycm9ycyxcbiAgICAgIGNvbnRyb2xSZWYsXG4gICAgICByZXNvbHZlV2lkZ2V0LFxuICAgICAgcGFyZW50SWRzLFxuICAgICAgZm9ySUQsXG4gICAgICB0LFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCwga2V5cyB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBjb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZFtpbmRleF07XG4gICAgY29uc3Qga2V5ID0ga2V5c1tpbmRleF07XG4gICAgbGV0IGZpZWxkID0gdGhpcy5wcm9wcy5maWVsZDtcbiAgICBjb25zdCBoYXNFcnJvciA9IHRoaXMuaGFzRXJyb3IoaW5kZXgpO1xuICAgIGNvbnN0IGlzVmFyaWFibGVUeXBlc0xpc3QgPSB0aGlzLmdldFZhbHVlVHlwZSgpID09PSB2YWx1ZVR5cGVzLk1JWEVEO1xuICAgIGlmIChpc1ZhcmlhYmxlVHlwZXNMaXN0KSB7XG4gICAgICBmaWVsZCA9IGdldFR5cGVkRmllbGRGb3JWYWx1ZShmaWVsZCwgaXRlbSk7XG4gICAgICBpZiAoIWZpZWxkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlckVycm9uZW91c1R5cGVkSXRlbShpbmRleCwgaXRlbSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8U29ydGFibGVMaXN0SXRlbVxuICAgICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBjb2xsYXBzZWQgJiYgc3R5bGVzLmxpc3RDb250cm9sSXRlbUNvbGxhcHNlZF19XG4gICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICA+XG4gICAgICAgIHtpc1ZhcmlhYmxlVHlwZXNMaXN0ICYmIChcbiAgICAgICAgICA8TGFiZWxDb21wb25lbnRcbiAgICAgICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgICAgIGlzQWN0aXZlPXtmYWxzZX1cbiAgICAgICAgICAgIGhhc0Vycm9ycz17aGFzRXJyb3J9XG4gICAgICAgICAgICB1bmlxdWVGaWVsZElkPXt0aGlzLnVuaXF1ZUZpZWxkSWR9XG4gICAgICAgICAgICBpc0ZpZWxkT3B0aW9uYWw9e2ZpZWxkLmdldCgncmVxdWlyZWQnKSA9PT0gZmFsc2V9XG4gICAgICAgICAgICB0PXt0fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIDxTdHlsZWRMaXN0SXRlbVRvcEJhclxuICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICAgIG9uQ29sbGFwc2VUb2dnbGU9e3BhcnRpYWwodGhpcy5oYW5kbGVJdGVtQ29sbGFwc2VUb2dnbGUsIGluZGV4KX1cbiAgICAgICAgICBvblJlbW92ZT17cGFydGlhbCh0aGlzLmhhbmRsZVJlbW92ZSwgaW5kZXgpfVxuICAgICAgICAgIGRyYWdIYW5kbGVIT0M9e1NvcnRhYmxlSGFuZGxlfVxuICAgICAgICAgIGRhdGEtdGVzdGlkPXtgc3R5bGVkLWxpc3QtaXRlbS10b3AtYmFyLSR7a2V5fWB9XG4gICAgICAgIC8+XG4gICAgICAgIDxOZXN0ZWRPYmplY3RMYWJlbCBjb2xsYXBzZWQ9e2NvbGxhcHNlZH0gZXJyb3I9e2hhc0Vycm9yfT5cbiAgICAgICAgICB7dGhpcy5vYmplY3RMYWJlbChpdGVtKX1cbiAgICAgICAgPC9OZXN0ZWRPYmplY3RMYWJlbD5cbiAgICAgICAgPENsYXNzTmFtZXM+XG4gICAgICAgICAgeyh7IGNzcywgY3ggfSkgPT4gKFxuICAgICAgICAgICAgPE9iamVjdENvbnRyb2xcbiAgICAgICAgICAgICAgY2xhc3NOYW1lV3JhcHBlcj17Y3goY2xhc3NOYW1lV3JhcHBlciwge1xuICAgICAgICAgICAgICAgIFtjc3NgXG4gICAgICAgICAgICAgICAgICAke3N0eWxlU3RyaW5ncy5jb2xsYXBzZWRPYmplY3RDb250cm9sfTtcbiAgICAgICAgICAgICAgICBgXTogY29sbGFwc2VkLFxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgdmFsdWU9e2l0ZW19XG4gICAgICAgICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgICAgICAgb25DaGFuZ2VPYmplY3Q9e3RoaXMuaGFuZGxlQ2hhbmdlRm9yKGluZGV4KX1cbiAgICAgICAgICAgICAgZWRpdG9yQ29udHJvbD17ZWRpdG9yQ29udHJvbH1cbiAgICAgICAgICAgICAgcmVzb2x2ZVdpZGdldD17cmVzb2x2ZVdpZGdldH1cbiAgICAgICAgICAgICAgbWV0YWRhdGE9e21ldGFkYXRhfVxuICAgICAgICAgICAgICBmb3JMaXN0XG4gICAgICAgICAgICAgIG9uVmFsaWRhdGVPYmplY3Q9e29uVmFsaWRhdGVPYmplY3R9XG4gICAgICAgICAgICAgIGNsZWFyRmllbGRFcnJvcnM9e2NsZWFyRmllbGRFcnJvcnN9XG4gICAgICAgICAgICAgIGZpZWxkc0Vycm9ycz17ZmllbGRzRXJyb3JzfVxuICAgICAgICAgICAgICByZWY9e3RoaXMucHJvY2Vzc0NvbnRyb2xSZWZ9XG4gICAgICAgICAgICAgIGNvbnRyb2xSZWY9e2NvbnRyb2xSZWZ9XG4gICAgICAgICAgICAgIHZhbGlkYXRpb25LZXk9e2tleX1cbiAgICAgICAgICAgICAgY29sbGFwc2VkPXtjb2xsYXBzZWR9XG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgb2JqZWN0LWNvbnRyb2wtJHtrZXl9YH1cbiAgICAgICAgICAgICAgaGFzRXJyb3I9e2hhc0Vycm9yfVxuICAgICAgICAgICAgICBwYXJlbnRJZHM9e1suLi5wYXJlbnRJZHMsIGZvcklELCBrZXldfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L0NsYXNzTmFtZXM+XG4gICAgICA8L1NvcnRhYmxlTGlzdEl0ZW0+XG4gICAgKTtcbiAgfTtcblxuICByZW5kZXJFcnJvbmVvdXNUeXBlZEl0ZW0oaW5kZXgsIGl0ZW0pIHtcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMucHJvcHMuZmllbGQ7XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZ2V0RXJyb3JNZXNzYWdlRm9yVHlwZWRGaWVsZEFuZFZhbHVlKGZpZWxkLCBpdGVtKTtcbiAgICBjb25zdCBrZXkgPSBgaXRlbS0ke2luZGV4fWA7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTb3J0YWJsZUxpc3RJdGVtXG4gICAgICAgIGNzcz17W3N0eWxlcy5saXN0Q29udHJvbEl0ZW0sIHN0eWxlcy5saXN0Q29udHJvbEl0ZW1Db2xsYXBzZWRdfVxuICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAgIGtleT17a2V5fVxuICAgICAgPlxuICAgICAgICA8U3R5bGVkTGlzdEl0ZW1Ub3BCYXJcbiAgICAgICAgICBvbkNvbGxhcHNlVG9nZ2xlPXtudWxsfVxuICAgICAgICAgIG9uUmVtb3ZlPXtwYXJ0aWFsKHRoaXMuaGFuZGxlUmVtb3ZlLCBpbmRleCwga2V5KX1cbiAgICAgICAgICBkcmFnSGFuZGxlSE9DPXtTb3J0YWJsZUhhbmRsZX1cbiAgICAgICAgLz5cbiAgICAgICAgPE5lc3RlZE9iamVjdExhYmVsIGNvbGxhcHNlZD17dHJ1ZX0gZXJyb3I9e3RydWV9PlxuICAgICAgICAgIHtlcnJvck1lc3NhZ2V9XG4gICAgICAgIDwvTmVzdGVkT2JqZWN0TGFiZWw+XG4gICAgICA8L1NvcnRhYmxlTGlzdEl0ZW0+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlckxpc3RDb250cm9sKCkge1xuICAgIGNvbnN0IHsgdmFsdWUsIGZvcklELCBmaWVsZCwgY2xhc3NOYW1lV3JhcHBlciwgdCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkLCBsaXN0Q29sbGFwc2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IGl0ZW1zID0gdmFsdWUgfHwgTGlzdCgpO1xuICAgIGNvbnN0IGxhYmVsID0gZmllbGQuZ2V0KCdsYWJlbCcsIGZpZWxkLmdldCgnbmFtZScpKTtcbiAgICBjb25zdCBsYWJlbFNpbmd1bGFyID0gZmllbGQuZ2V0KCdsYWJlbF9zaW5ndWxhcicpIHx8IGZpZWxkLmdldCgnbGFiZWwnLCBmaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgY29uc3QgbGlzdExhYmVsID0gaXRlbXMuc2l6ZSA9PT0gMSA/IGxhYmVsU2luZ3VsYXIudG9Mb3dlckNhc2UoKSA6IGxhYmVsLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgbWluaW1pemVDb2xsYXBzZWRJdGVtcyA9IGZpZWxkLmdldCgnbWluaW1pemVfY29sbGFwc2VkJywgZmFsc2UpO1xuICAgIGNvbnN0IGFsbEl0ZW1zQ29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWQuZXZlcnkodmFsID0+IHZhbCA9PT0gdHJ1ZSk7XG4gICAgY29uc3Qgc2VsZkNvbGxhcHNlZCA9IGFsbEl0ZW1zQ29sbGFwc2VkICYmIChsaXN0Q29sbGFwc2VkIHx8ICFtaW5pbWl6ZUNvbGxhcHNlZEl0ZW1zKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8Q2xhc3NOYW1lcz5cbiAgICAgICAgeyh7IGN4LCBjc3MgfSkgPT4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGlkPXtmb3JJRH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goXG4gICAgICAgICAgICAgIGNsYXNzTmFtZVdyYXBwZXIsXG4gICAgICAgICAgICAgIGNzc2BcbiAgICAgICAgICAgICAgICAke3N0eWxlU3RyaW5ncy5vYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXJ9XG4gICAgICAgICAgICAgIGAsXG4gICAgICAgICAgICApfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxPYmplY3RXaWRnZXRUb3BCYXJcbiAgICAgICAgICAgICAgYWxsb3dBZGQ9e2ZpZWxkLmdldCgnYWxsb3dfYWRkJywgdHJ1ZSl9XG4gICAgICAgICAgICAgIG9uQWRkPXt0aGlzLmhhbmRsZUFkZH1cbiAgICAgICAgICAgICAgdHlwZXM9e2ZpZWxkLmdldChUWVBFU19LRVksIG51bGwpfVxuICAgICAgICAgICAgICBvbkFkZFR5cGU9e3R5cGUgPT4gdGhpcy5oYW5kbGVBZGRUeXBlKHR5cGUsIHJlc29sdmVGaWVsZEtleVR5cGUoZmllbGQpKX1cbiAgICAgICAgICAgICAgaGVhZGluZz17YCR7aXRlbXMuc2l6ZX0gJHtsaXN0TGFiZWx9YH1cbiAgICAgICAgICAgICAgbGFiZWw9e2xhYmVsU2luZ3VsYXIudG9Mb3dlckNhc2UoKX1cbiAgICAgICAgICAgICAgb25Db2xsYXBzZVRvZ2dsZT17dGhpcy5oYW5kbGVDb2xsYXBzZUFsbFRvZ2dsZX1cbiAgICAgICAgICAgICAgY29sbGFwc2VkPXtzZWxmQ29sbGFwc2VkfVxuICAgICAgICAgICAgICB0PXt0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHsoIXNlbGZDb2xsYXBzZWQgfHwgIW1pbmltaXplQ29sbGFwc2VkSXRlbXMpICYmIChcbiAgICAgICAgICAgICAgPFNvcnRhYmxlTGlzdFxuICAgICAgICAgICAgICAgIGl0ZW1zPXtpdGVtc31cbiAgICAgICAgICAgICAgICByZW5kZXJJdGVtPXt0aGlzLnJlbmRlckl0ZW19XG4gICAgICAgICAgICAgICAgb25Tb3J0RW5kPXt0aGlzLm9uU29ydEVuZH1cbiAgICAgICAgICAgICAgICB1c2VEcmFnSGFuZGxlXG4gICAgICAgICAgICAgICAgbG9ja0F4aXM9XCJ5XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L0NsYXNzTmFtZXM+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlcklucHV0KCkge1xuICAgIGNvbnN0IHsgZm9ySUQsIGNsYXNzTmFtZVdyYXBwZXIgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIHJldHVybiAoXG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBpZD17Zm9ySUR9XG4gICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICBvbkZvY3VzPXt0aGlzLmhhbmRsZUZvY3VzfVxuICAgICAgICBvbkJsdXI9e3RoaXMuaGFuZGxlQmx1cn1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVXcmFwcGVyfVxuICAgICAgLz5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmdldFZhbHVlVHlwZSgpICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJMaXN0Q29udHJvbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJJbnB1dCgpO1xuICAgIH1cbiAgfVxufVxuIl19 */")),
|
|
425
|
+
index: index,
|
|
426
|
+
key: key
|
|
427
|
+
}, isVariableTypesList && (0, _core.jsx)(LabelComponent, {
|
|
428
|
+
field: field,
|
|
429
|
+
isActive: false,
|
|
430
|
+
hasErrors: hasError,
|
|
431
|
+
uniqueFieldId: this.uniqueFieldId,
|
|
432
|
+
isFieldOptional: field.get('required') === false,
|
|
433
|
+
t: t
|
|
434
|
+
}), (0, _core.jsx)(StyledListItemTopBar, {
|
|
435
|
+
collapsed: collapsed,
|
|
436
|
+
onCollapseToggle: (0, _partial2.default)(this.handleItemCollapseToggle, index),
|
|
437
|
+
onRemove: (0, _partial2.default)(this.handleRemove, index),
|
|
438
|
+
dragHandleHOC: _reactSortableHoc.SortableHandle,
|
|
439
|
+
"data-testid": `styled-list-item-top-bar-${key}`
|
|
440
|
+
}), (0, _core.jsx)(NestedObjectLabel, {
|
|
441
|
+
collapsed: collapsed,
|
|
442
|
+
error: hasError
|
|
443
|
+
}, this.objectLabel(item)), (0, _core.jsx)(_core.ClassNames, null, ({
|
|
444
|
+
css,
|
|
445
|
+
cx
|
|
446
|
+
}) => (0, _core.jsx)(ObjectControl, {
|
|
447
|
+
classNameWrapper: cx(classNameWrapper, {
|
|
448
|
+
[css`
|
|
449
|
+
${styleStrings.collapsedObjectControl};
|
|
450
|
+
`]: collapsed
|
|
451
|
+
}),
|
|
452
|
+
value: item,
|
|
453
|
+
field: field,
|
|
454
|
+
onChangeObject: this.handleChangeFor(index),
|
|
455
|
+
editorControl: editorControl,
|
|
456
|
+
resolveWidget: resolveWidget,
|
|
457
|
+
metadata: metadata,
|
|
458
|
+
forList: true,
|
|
459
|
+
onValidateObject: onValidateObject,
|
|
460
|
+
clearFieldErrors: clearFieldErrors,
|
|
461
|
+
fieldsErrors: fieldsErrors,
|
|
462
|
+
ref: this.processControlRef,
|
|
463
|
+
controlRef: controlRef,
|
|
464
|
+
validationKey: key,
|
|
465
|
+
collapsed: collapsed,
|
|
466
|
+
"data-testid": `object-control-${key}`,
|
|
467
|
+
hasError: hasError,
|
|
468
|
+
parentIds: [...parentIds, forID, key]
|
|
469
|
+
})));
|
|
470
|
+
});
|
|
471
|
+
const {
|
|
472
|
+
field: _field,
|
|
473
|
+
value: _value
|
|
474
|
+
} = props;
|
|
475
|
+
const _listCollapsed = _field.get('collapsed', true);
|
|
476
|
+
const _itemsCollapsed = _value && Array(_value.size).fill(_listCollapsed) || [];
|
|
477
|
+
const _keys = _value && Array.from({
|
|
478
|
+
length: _value.size
|
|
479
|
+
}, () => (0, _v.default)()) || [];
|
|
480
|
+
this.state = {
|
|
481
|
+
listCollapsed: _listCollapsed,
|
|
482
|
+
itemsCollapsed: _itemsCollapsed,
|
|
483
|
+
value: this.valueToString(_value),
|
|
484
|
+
keys: _keys
|
|
485
|
+
};
|
|
486
|
+
}
|
|
487
|
+
/**
|
|
488
|
+
* Always update so that each nested widget has the option to update. This is
|
|
489
|
+
* required because ControlHOC provides a default `shouldComponentUpdate`
|
|
490
|
+
* which only updates if the value changes, but every widget must be allowed
|
|
491
|
+
* to override this.
|
|
492
|
+
*/
|
|
493
|
+
shouldComponentUpdate() {
|
|
494
|
+
return true;
|
|
495
|
+
}
|
|
496
|
+
handleChangeFor(index) {
|
|
497
|
+
return (f, newValue, newMetadata) => {
|
|
498
|
+
const {
|
|
499
|
+
value,
|
|
500
|
+
metadata,
|
|
501
|
+
onChange,
|
|
502
|
+
field
|
|
503
|
+
} = this.props;
|
|
504
|
+
const collectionName = field.get('name');
|
|
505
|
+
const listFieldObjectWidget = field.getIn(['field', 'widget']) === 'object';
|
|
506
|
+
const withNameKey = this.getValueType() !== valueTypes.SINGLE || this.getValueType() === valueTypes.SINGLE && listFieldObjectWidget;
|
|
507
|
+
const newObjectValue = withNameKey ? this.getObjectValue(index).set(f.get('name'), newValue) : newValue;
|
|
508
|
+
const parsedMetadata = {
|
|
509
|
+
[collectionName]: Object.assign(metadata ? metadata.toJS() : {}, newMetadata || {})
|
|
510
|
+
};
|
|
511
|
+
onChange(value.set(index, newObjectValue), parsedMetadata);
|
|
512
|
+
};
|
|
513
|
+
}
|
|
514
|
+
objectLabel(item) {
|
|
515
|
+
const {
|
|
516
|
+
field,
|
|
517
|
+
entry
|
|
518
|
+
} = this.props;
|
|
519
|
+
const valueType = this.getValueType();
|
|
520
|
+
switch (valueType) {
|
|
521
|
+
case valueTypes.MIXED:
|
|
522
|
+
{
|
|
523
|
+
if (!validateItem(field, item)) {
|
|
524
|
+
return;
|
|
525
|
+
}
|
|
526
|
+
const itemType = (0, _typedListHelpers.getTypedFieldForValue)(field, item);
|
|
527
|
+
const label = itemType.get('label', itemType.get('name'));
|
|
528
|
+
// each type can have its own summary, but default to the list summary if exists
|
|
529
|
+
const summary = itemType.get('summary', field.get('summary'));
|
|
530
|
+
const labelReturn = summary ? handleSummary(summary, entry, label, item) : label;
|
|
531
|
+
return labelReturn;
|
|
532
|
+
}
|
|
533
|
+
case valueTypes.SINGLE:
|
|
534
|
+
{
|
|
535
|
+
const singleField = field.get('field');
|
|
536
|
+
const label = singleField.get('label', singleField.get('name'));
|
|
537
|
+
const summary = field.get('summary');
|
|
538
|
+
const data = (0, _immutable.fromJS)({
|
|
539
|
+
[singleField.get('name')]: item
|
|
540
|
+
});
|
|
541
|
+
const labelReturn = summary ? handleSummary(summary, entry, label, data) : label;
|
|
542
|
+
return labelReturn;
|
|
543
|
+
}
|
|
544
|
+
case valueTypes.MULTIPLE:
|
|
545
|
+
{
|
|
546
|
+
if (!validateItem(field, item)) {
|
|
547
|
+
return;
|
|
548
|
+
}
|
|
549
|
+
const multiFields = field.get('fields');
|
|
550
|
+
const labelField = multiFields && multiFields.first();
|
|
551
|
+
const value = item.get(labelField.get('name'));
|
|
552
|
+
const summary = field.get('summary');
|
|
553
|
+
const labelReturn = summary ? handleSummary(summary, entry, value, item) : value;
|
|
554
|
+
return (labelReturn || `No ${labelField.get('name')}`).toString();
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
return '';
|
|
558
|
+
}
|
|
559
|
+
renderErroneousTypedItem(index, item) {
|
|
560
|
+
const field = this.props.field;
|
|
561
|
+
const errorMessage = (0, _typedListHelpers.getErrorMessageForTypedFieldAndValue)(field, item);
|
|
562
|
+
const key = `item-${index}`;
|
|
563
|
+
return (0, _core.jsx)(SortableListItem, {
|
|
564
|
+
css: /*#__PURE__*/(0, _core.css)([styles.listControlItem, styles.listControlItemCollapsed], ";label:ListControl;" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE4a0JRIiwiZmlsZSI6Ii4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IEltbXV0YWJsZVByb3BUeXBlcyBmcm9tICdyZWFjdC1pbW11dGFibGUtcHJvcHR5cGVzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCB7IGNzcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL2NvcmUnO1xuaW1wb3J0IHsgTGlzdCwgTWFwLCBmcm9tSlMgfSBmcm9tICdpbW11dGFibGUnO1xuaW1wb3J0IHsgcGFydGlhbCwgaXNFbXB0eSwgdW5pcXVlSWQgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHV1aWQgZnJvbSAndXVpZC92NCc7XG5pbXBvcnQgeyBTb3J0YWJsZUNvbnRhaW5lciwgU29ydGFibGVFbGVtZW50LCBTb3J0YWJsZUhhbmRsZSB9IGZyb20gJ3JlYWN0LXNvcnRhYmxlLWhvYyc7XG5pbXBvcnQgRGVjYXBDbXNXaWRnZXRPYmplY3QgZnJvbSAnZGVjYXAtY21zLXdpZGdldC1vYmplY3QnO1xuaW1wb3J0IHtcbiAgTGlzdEl0ZW1Ub3BCYXIsXG4gIE9iamVjdFdpZGdldFRvcEJhcixcbiAgY29sb3JzLFxuICBsZW5ndGhzLFxuICBGaWVsZExhYmVsLFxufSBmcm9tICdkZWNhcC1jbXMtdWktZGVmYXVsdCc7XG5pbXBvcnQgeyBzdHJpbmdUZW1wbGF0ZSwgdmFsaWRhdGlvbnMgfSBmcm9tICdkZWNhcC1jbXMtbGliLXdpZGdldHMnO1xuXG5pbXBvcnQge1xuICBUWVBFU19LRVksXG4gIGdldFR5cGVkRmllbGRGb3JWYWx1ZSxcbiAgcmVzb2x2ZUZpZWxkS2V5VHlwZSxcbiAgZ2V0RXJyb3JNZXNzYWdlRm9yVHlwZWRGaWVsZEFuZFZhbHVlLFxufSBmcm9tICcuL3R5cGVkTGlzdEhlbHBlcnMnO1xuXG5jb25zdCBPYmplY3RDb250cm9sID0gRGVjYXBDbXNXaWRnZXRPYmplY3QuY29udHJvbENvbXBvbmVudDtcblxuY29uc3QgTGlzdEl0ZW0gPSBzdHlsZWQuZGl2KCk7XG5cbmNvbnN0IFNvcnRhYmxlTGlzdEl0ZW0gPSBTb3J0YWJsZUVsZW1lbnQoTGlzdEl0ZW0pO1xuXG5jb25zdCBTdHlsZWRMaXN0SXRlbVRvcEJhciA9IHN0eWxlZChMaXN0SXRlbVRvcEJhcilgXG4gIGJhY2tncm91bmQtY29sb3I6ICR7Y29sb3JzLnRleHRGaWVsZEJvcmRlcn07XG5gO1xuXG5jb25zdCBOZXN0ZWRPYmplY3RMYWJlbCA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6ICR7cHJvcHMgPT4gKHByb3BzLmNvbGxhcHNlZCA/ICdibG9jaycgOiAnbm9uZScpfTtcbiAgYm9yZGVyLXRvcDogMDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gKHByb3BzLmVycm9yID8gY29sb3JzLmVycm9yVGV4dCA6ICdpbmhlcml0Jyl9O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAke2NvbG9ycy50ZXh0RmllbGRCb3JkZXJ9O1xuICBwYWRkaW5nOiAxM3B4O1xuICBib3JkZXItcmFkaXVzOiAwIDAgJHtsZW5ndGhzLmJvcmRlclJhZGl1c30gJHtsZW5ndGhzLmJvcmRlclJhZGl1c307XG5gO1xuXG5jb25zdCBzdHlsZVN0cmluZ3MgPSB7XG4gIGNvbGxhcHNlZE9iamVjdENvbnRyb2w6IGBcbiAgICBkaXNwbGF5OiBub25lO1xuICBgLFxuICBvYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXI6IGBcbiAgICBwYWRkaW5nOiAke2xlbmd0aHMub2JqZWN0V2lkZ2V0VG9wQmFyQ29udGFpbmVyUGFkZGluZ307XG4gIGAsXG59O1xuXG5jb25zdCBzdHlsZXMgPSB7XG4gIGxpc3RDb250cm9sSXRlbTogY3NzYFxuICAgIG1hcmdpbi10b3A6IDE4cHg7XG5cbiAgICAmOmZpcnN0LW9mLXR5cGUge1xuICAgICAgbWFyZ2luLXRvcDogMjZweDtcbiAgICB9XG4gIGAsXG4gIGxpc3RDb250cm9sSXRlbUNvbGxhcHNlZDogY3NzYFxuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICBgLFxufTtcblxuY29uc3QgU29ydGFibGVMaXN0ID0gU29ydGFibGVDb250YWluZXIoKHsgaXRlbXMsIHJlbmRlckl0ZW0gfSkgPT4ge1xuICByZXR1cm4gPGRpdj57aXRlbXMubWFwKHJlbmRlckl0ZW0pfTwvZGl2Pjtcbn0pO1xuXG5jb25zdCB2YWx1ZVR5cGVzID0ge1xuICBTSU5HTEU6ICdTSU5HTEUnLFxuICBNVUxUSVBMRTogJ01VTFRJUExFJyxcbiAgTUlYRUQ6ICdNSVhFRCcsXG59O1xuXG5mdW5jdGlvbiBoYW5kbGVTdW1tYXJ5KHN1bW1hcnksIGVudHJ5LCBsYWJlbCwgaXRlbSkge1xuICBjb25zdCBkYXRhID0gc3RyaW5nVGVtcGxhdGUuYWRkRmlsZVRlbXBsYXRlRmllbGRzKFxuICAgIGVudHJ5LmdldCgncGF0aCcpLFxuICAgIGl0ZW0uc2V0KCdmaWVsZHMubGFiZWwnLCBsYWJlbCksXG4gICk7XG4gIHJldHVybiBzdHJpbmdUZW1wbGF0ZS5jb21waWxlU3RyaW5nVGVtcGxhdGUoc3VtbWFyeSwgbnVsbCwgJycsIGRhdGEpO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUl0ZW0oZmllbGQsIGl0ZW0pIHtcbiAgaWYgKCFNYXAuaXNNYXAoaXRlbSkpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgJyR7ZmllbGQuZ2V0KCduYW1lJyl9JyBmaWVsZCBpdGVtIHZhbHVlIHZhbHVlIHNob3VsZCBiZSBhIG1hcCBidXQgaXMgYSAnJHt0eXBlb2YgaXRlbX0nYCxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gTGFiZWxDb21wb25lbnQoeyBmaWVsZCwgaXNBY3RpdmUsIGhhc0Vycm9ycywgdW5pcXVlRmllbGRJZCwgaXNGaWVsZE9wdGlvbmFsLCB0IH0pIHtcbiAgY29uc3QgbGFiZWwgPSBgJHtmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpfWA7XG4gIHJldHVybiAoXG4gICAgPEZpZWxkTGFiZWwgaXNBY3RpdmU9e2lzQWN0aXZlfSBoYXNFcnJvcnM9e2hhc0Vycm9yc30gaHRtbEZvcj17dW5pcXVlRmllbGRJZH0+XG4gICAgICB7bGFiZWx9IHtgJHtpc0ZpZWxkT3B0aW9uYWwgPyBgICgke3QoJ2VkaXRvci5lZGl0b3JDb250cm9sLmZpZWxkLm9wdGlvbmFsJyl9KWAgOiAnJ31gfVxuICAgIDwvRmllbGRMYWJlbD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlzdENvbnRyb2wgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICB2YWxpZGF0aW9ucyA9IFtdO1xuXG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgbWV0YWRhdGE6IEltbXV0YWJsZVByb3BUeXBlcy5tYXAsXG4gICAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25DaGFuZ2VPYmplY3Q6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25WYWxpZGF0ZU9iamVjdDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICB2YWxpZGF0ZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICB2YWx1ZTogSW1tdXRhYmxlUHJvcFR5cGVzLmxpc3QsXG4gICAgZmllbGQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgZm9ySUQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY29udHJvbFJlZjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgbWVkaWFQYXRoczogSW1tdXRhYmxlUHJvcFR5cGVzLm1hcC5pc1JlcXVpcmVkLFxuICAgIGdldEFzc2V0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uT3Blbk1lZGlhTGlicmFyeTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvbkFkZEFzc2V0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uUmVtb3ZlSW5zZXJ0ZWRNZWRpYTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBjbGFzc05hbWVXcmFwcGVyOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgc2V0QWN0aXZlU3R5bGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgc2V0SW5hY3RpdmVTdHlsZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBlZGl0b3JDb250cm9sOiBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZCxcbiAgICByZXNvbHZlV2lkZ2V0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGNsZWFyRmllbGRFcnJvcnM6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgZmllbGRzRXJyb3JzOiBJbW11dGFibGVQcm9wVHlwZXMubWFwLmlzUmVxdWlyZWQsXG4gICAgZW50cnk6IEltbXV0YWJsZVByb3BUeXBlcy5tYXAuaXNSZXF1aXJlZCxcbiAgICB0OiBQcm9wVHlwZXMuZnVuYyxcbiAgfTtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIHZhbHVlOiBMaXN0KCksXG4gICAgcGFyZW50SWRzOiBbXSxcbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICBjb25zdCB7IGZpZWxkLCB2YWx1ZSB9ID0gcHJvcHM7XG4gICAgY29uc3QgbGlzdENvbGxhcHNlZCA9IGZpZWxkLmdldCgnY29sbGFwc2VkJywgdHJ1ZSk7XG4gICAgY29uc3QgaXRlbXNDb2xsYXBzZWQgPSAodmFsdWUgJiYgQXJyYXkodmFsdWUuc2l6ZSkuZmlsbChsaXN0Q29sbGFwc2VkKSkgfHwgW107XG4gICAgY29uc3Qga2V5cyA9ICh2YWx1ZSAmJiBBcnJheS5mcm9tKHsgbGVuZ3RoOiB2YWx1ZS5zaXplIH0sICgpID0+IHV1aWQoKSkpIHx8IFtdO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGxpc3RDb2xsYXBzZWQsXG4gICAgICBpdGVtc0NvbGxhcHNlZCxcbiAgICAgIHZhbHVlOiB0aGlzLnZhbHVlVG9TdHJpbmcodmFsdWUpLFxuICAgICAga2V5cyxcbiAgICB9O1xuICB9XG5cbiAgdmFsdWVUb1N0cmluZyA9IHZhbHVlID0+IHtcbiAgICBsZXQgc3RyaW5nVmFsdWU7XG4gICAgaWYgKExpc3QuaXNMaXN0KHZhbHVlKSB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgc3RyaW5nVmFsdWUgPSB2YWx1ZS5qb2luKCcsJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYEV4cGVjdGVkIExpc3QgdmFsdWUgdG8gYmUgYW4gYXJyYXkgYnV0IHJlY2VpdmVkICcke3ZhbHVlfScgd2l0aCB0eXBlIG9mICcke3R5cGVvZiB2YWx1ZX0nLiBQbGVhc2UgY2hlY2sgdGhlIHZhbHVlIHByb3ZpZGVkIHRvIHRoZSAnJHt0aGlzLnByb3BzLmZpZWxkLmdldChcbiAgICAgICAgICAnbmFtZScsXG4gICAgICAgICl9JyBmaWVsZGAsXG4gICAgICApO1xuICAgICAgc3RyaW5nVmFsdWUgPSBTdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gc3RyaW5nVmFsdWUucmVwbGFjZSgvLChbXlxcc118JCkvZywgJywgJDEnKTtcbiAgfTtcblxuICBnZXRWYWx1ZVR5cGUgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoZmllbGQuZ2V0KCdmaWVsZHMnKSkge1xuICAgICAgcmV0dXJuIHZhbHVlVHlwZXMuTVVMVElQTEU7XG4gICAgfSBlbHNlIGlmIChmaWVsZC5nZXQoJ2ZpZWxkJykpIHtcbiAgICAgIHJldHVybiB2YWx1ZVR5cGVzLlNJTkdMRTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkLmdldChUWVBFU19LRVkpKSB7XG4gICAgICByZXR1cm4gdmFsdWVUeXBlcy5NSVhFRDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9O1xuXG4gIHVuaXF1ZUZpZWxkSWQgPSB1bmlxdWVJZChgJHt0aGlzLnByb3BzLmZpZWxkLmdldCgnbmFtZScpfS1maWVsZC1gKTtcbiAgLyoqXG4gICAqIEFsd2F5cyB1cGRhdGUgc28gdGhhdCBlYWNoIG5lc3RlZCB3aWRnZXQgaGFzIHRoZSBvcHRpb24gdG8gdXBkYXRlLiBUaGlzIGlzXG4gICAqIHJlcXVpcmVkIGJlY2F1c2UgQ29udHJvbEhPQyBwcm92aWRlcyBhIGRlZmF1bHQgYHNob3VsZENvbXBvbmVudFVwZGF0ZWBcbiAgICogd2hpY2ggb25seSB1cGRhdGVzIGlmIHRoZSB2YWx1ZSBjaGFuZ2VzLCBidXQgZXZlcnkgd2lkZ2V0IG11c3QgYmUgYWxsb3dlZFxuICAgKiB0byBvdmVycmlkZSB0aGlzLlxuICAgKi9cbiAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaGFuZGxlQ2hhbmdlID0gZSA9PiB7XG4gICAgY29uc3QgeyBvbkNoYW5nZSB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMuc3RhdGUudmFsdWU7XG4gICAgY29uc3QgbmV3VmFsdWUgPSBlLnRhcmdldC52YWx1ZS50cmltKCk7XG4gICAgY29uc3QgbGlzdFZhbHVlID0gbmV3VmFsdWUgPyBuZXdWYWx1ZS5zcGxpdCgnLCcpIDogW107XG4gICAgaWYgKG5ld1ZhbHVlLm1hdGNoKC8sJC8pICYmIG9sZFZhbHVlLm1hdGNoKC8sICQvKSkge1xuICAgICAgbGlzdFZhbHVlLnBvcCgpO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gdGhpcy52YWx1ZVRvU3RyaW5nKGxpc3RWYWx1ZSk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiBwYXJzZWRWYWx1ZSB9KTtcbiAgICBvbkNoYW5nZShMaXN0KGxpc3RWYWx1ZS5tYXAodmFsID0+IHZhbC50cmltKCkpKSk7XG4gIH07XG5cbiAgaGFuZGxlRm9jdXMgPSAoKSA9PiB7XG4gICAgdGhpcy5wcm9wcy5zZXRBY3RpdmVTdHlsZSgpO1xuICB9O1xuXG4gIGhhbmRsZUJsdXIgPSBlID0+IHtcbiAgICBjb25zdCBsaXN0VmFsdWUgPSBlLnRhcmdldC52YWx1ZVxuICAgICAgLnNwbGl0KCcsJylcbiAgICAgIC5tYXAoZWwgPT4gZWwudHJpbSgpKVxuICAgICAgLmZpbHRlcihlbCA9PiBlbCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiB0aGlzLnZhbHVlVG9TdHJpbmcobGlzdFZhbHVlKSB9KTtcbiAgICB0aGlzLnByb3BzLnNldEluYWN0aXZlU3R5bGUoKTtcbiAgfTtcblxuICBoYW5kbGVBZGQgPSBlID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgeyBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBwYXJzZWRWYWx1ZSA9XG4gICAgICB0aGlzLmdldFZhbHVlVHlwZSgpID09PSB2YWx1ZVR5cGVzLlNJTkdMRVxuICAgICAgICA/IHRoaXMuc2luZ2xlRGVmYXVsdCgpXG4gICAgICAgIDogZnJvbUpTKHRoaXMubXVsdGlwbGVEZWZhdWx0KGZpZWxkLmdldCgnZmllbGRzJykpKTtcbiAgICB0aGlzLmFkZEl0ZW0ocGFyc2VkVmFsdWUpO1xuICB9O1xuXG4gIHNpbmdsZURlZmF1bHQgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZmllbGQuZ2V0SW4oWydmaWVsZCcsICdkZWZhdWx0J10sIG51bGwpO1xuICB9O1xuXG4gIG11bHRpcGxlRGVmYXVsdCA9IGZpZWxkcyA9PiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRzRGVmYXVsdChmaWVsZHMpO1xuICB9O1xuXG4gIGhhbmRsZUFkZFR5cGUgPSAodHlwZSwgdHlwZUtleSkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gZnJvbUpTKHRoaXMubWl4ZWREZWZhdWx0KHR5cGVLZXksIHR5cGUpKTtcbiAgICB0aGlzLmFkZEl0ZW0ocGFyc2VkVmFsdWUpO1xuICB9O1xuXG4gIG1peGVkRGVmYXVsdCA9ICh0eXBlS2V5LCB0eXBlKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRUeXBlID0gdGhpcy5wcm9wcy5maWVsZC5nZXQoVFlQRVNfS0VZKS5maW5kKGYgPT4gZi5nZXQoJ25hbWUnKSA9PT0gdHlwZSk7XG4gICAgY29uc3QgZmllbGRzID0gc2VsZWN0ZWRUeXBlLmdldCgnZmllbGRzJykgfHwgW3NlbGVjdGVkVHlwZS5nZXQoJ2ZpZWxkJyldO1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRzRGVmYXVsdChmaWVsZHMsIHsgW3R5cGVLZXldOiB0eXBlIH0pO1xuICB9O1xuXG4gIGdldEZpZWxkc0RlZmF1bHQgPSAoZmllbGRzLCBpbml0aWFsVmFsdWUgPSB7fSkgPT4ge1xuICAgIHJldHVybiBmaWVsZHMucmVkdWNlKChhY2MsIGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IHN1YmZpZWxkcyA9IGl0ZW0uZ2V0KCdmaWVsZCcpIHx8IGl0ZW0uZ2V0KCdmaWVsZHMnKTtcbiAgICAgIGNvbnN0IG9iamVjdCA9IGl0ZW0uZ2V0KCd3aWRnZXQnKSA9PSAnb2JqZWN0JztcbiAgICAgIGNvbnN0IG5hbWUgPSBpdGVtLmdldCgnbmFtZScpO1xuICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gaXRlbS5nZXQoJ2RlZmF1bHQnLCBudWxsKTtcblxuICAgICAgaWYgKExpc3QuaXNMaXN0KHN1YmZpZWxkcykgJiYgb2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IHN1YkRlZmF1bHRWYWx1ZSA9IHRoaXMuZ2V0RmllbGRzRGVmYXVsdChzdWJmaWVsZHMpO1xuICAgICAgICAhaXNFbXB0eShzdWJEZWZhdWx0VmFsdWUpICYmIChhY2NbbmFtZV0gPSBzdWJEZWZhdWx0VmFsdWUpO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfVxuXG4gICAgICBpZiAoTWFwLmlzTWFwKHN1YmZpZWxkcykgJiYgb2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IHN1YkRlZmF1bHRWYWx1ZSA9IHRoaXMuZ2V0RmllbGRzRGVmYXVsdChbc3ViZmllbGRzXSk7XG4gICAgICAgICFpc0VtcHR5KHN1YkRlZmF1bHRWYWx1ZSkgJiYgKGFjY1tuYW1lXSA9IHN1YkRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9XG5cbiAgICAgIGlmIChkZWZhdWx0VmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgYWNjW25hbWVdID0gZGVmYXVsdFZhbHVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIGluaXRpYWxWYWx1ZSk7XG4gIH07XG5cbiAgYWRkSXRlbSA9IHBhcnNlZFZhbHVlID0+IHtcbiAgICBjb25zdCB7IHZhbHVlLCBvbkNoYW5nZSwgZmllbGQgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgYWRkVG9Ub3AgPSBmaWVsZC5nZXQoJ2FkZF90b190b3AnLCBmYWxzZSk7XG5cbiAgICBjb25zdCBpdGVtS2V5ID0gdXVpZCgpO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXNDb2xsYXBzZWQ6IGFkZFRvVG9wXG4gICAgICAgID8gW2ZhbHNlLCAuLi50aGlzLnN0YXRlLml0ZW1zQ29sbGFwc2VkXVxuICAgICAgICA6IFsuLi50aGlzLnN0YXRlLml0ZW1zQ29sbGFwc2VkLCBmYWxzZV0sXG4gICAgICBrZXlzOiBhZGRUb1RvcCA/IFtpdGVtS2V5LCAuLi50aGlzLnN0YXRlLmtleXNdIDogWy4uLnRoaXMuc3RhdGUua2V5cywgaXRlbUtleV0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBsaXN0VmFsdWUgPSB2YWx1ZSB8fCBMaXN0KCk7XG4gICAgaWYgKGFkZFRvVG9wKSB7XG4gICAgICBvbkNoYW5nZShsaXN0VmFsdWUudW5zaGlmdChwYXJzZWRWYWx1ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvbkNoYW5nZShsaXN0VmFsdWUucHVzaChwYXJzZWRWYWx1ZSkpO1xuICAgIH1cbiAgfTtcblxuICBwcm9jZXNzQ29udHJvbFJlZiA9IHJlZiA9PiB7XG4gICAgaWYgKCFyZWYpIHJldHVybjtcbiAgICBjb25zdCB7XG4gICAgICB2YWxpZGF0ZSxcbiAgICAgIHByb3BzOiB7IHZhbGlkYXRpb25LZXk6IGtleSB9LFxuICAgIH0gPSByZWY7XG4gICAgdGhpcy52YWxpZGF0aW9ucy5wdXNoKHsga2V5LCB2YWxpZGF0ZSB9KTtcbiAgfTtcblxuICB2YWxpZGF0ZSA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5nZXRWYWx1ZVR5cGUoKSkge1xuICAgICAgdGhpcy52YWxpZGF0aW9ucy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBpdGVtLnZhbGlkYXRlKCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9wcy52YWxpZGF0ZSgpO1xuICAgIH1cbiAgICB0aGlzLnByb3BzLm9uVmFsaWRhdGVPYmplY3QodGhpcy5wcm9wcy5mb3JJRCwgdGhpcy52YWxpZGF0ZVNpemUoKSk7XG4gIH07XG5cbiAgdmFsaWRhdGVTaXplID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgZmllbGQsIHZhbHVlLCB0IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG1pbiA9IGZpZWxkLmdldCgnbWluJyk7XG4gICAgY29uc3QgbWF4ID0gZmllbGQuZ2V0KCdtYXgnKTtcbiAgICBjb25zdCByZXF1aXJlZCA9IGZpZWxkLmdldCgncmVxdWlyZWQnLCB0cnVlKTtcblxuICAgIGlmICghcmVxdWlyZWQgJiYgIXZhbHVlPy5zaXplKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgZXJyb3IgPSB2YWxpZGF0aW9ucy52YWxpZGF0ZU1pbk1heChcbiAgICAgIHQsXG4gICAgICBmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpLFxuICAgICAgdmFsdWUsXG4gICAgICBtaW4sXG4gICAgICBtYXgsXG4gICAgKTtcblxuICAgIHJldHVybiBlcnJvciA/IFtlcnJvcl0gOiBbXTtcbiAgfTtcblxuICAvKipcbiAgICogSW4gY2FzZSB0aGUgYG9uQ2hhbmdlT2JqZWN0YCBmdW5jdGlvbiBpcyBmcm96ZW4gYnkgYSBjaGlsZCB3aWRnZXQgaW1wbGVtZW50YXRpb24sXG4gICAqIGUuZy4gd2hlbiBkZWJvdW5jZWQsIGFsd2F5cyBnZXQgdGhlIGxhdGVzdCBvYmplY3QgdmFsdWUgaW5zdGVhZCBvZiB1c2luZ1xuICAgKiBgdGhpcy5wcm9wcy52YWx1ZWAgZGlyZWN0bHkuXG4gICAqL1xuICBnZXRPYmplY3RWYWx1ZSA9IGlkeCA9PiB0aGlzLnByb3BzLnZhbHVlLmdldChpZHgpIHx8IE1hcCgpO1xuXG4gIGhhbmRsZUNoYW5nZUZvcihpbmRleCkge1xuICAgIHJldHVybiAoZiwgbmV3VmFsdWUsIG5ld01ldGFkYXRhKSA9PiB7XG4gICAgICBjb25zdCB7IHZhbHVlLCBtZXRhZGF0YSwgb25DaGFuZ2UsIGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBmaWVsZC5nZXQoJ25hbWUnKTtcbiAgICAgIGNvbnN0IGxpc3RGaWVsZE9iamVjdFdpZGdldCA9IGZpZWxkLmdldEluKFsnZmllbGQnLCAnd2lkZ2V0J10pID09PSAnb2JqZWN0JztcbiAgICAgIGNvbnN0IHdpdGhOYW1lS2V5ID1cbiAgICAgICAgdGhpcy5nZXRWYWx1ZVR5cGUoKSAhPT0gdmFsdWVUeXBlcy5TSU5HTEUgfHxcbiAgICAgICAgKHRoaXMuZ2V0VmFsdWVUeXBlKCkgPT09IHZhbHVlVHlwZXMuU0lOR0xFICYmIGxpc3RGaWVsZE9iamVjdFdpZGdldCk7XG4gICAgICBjb25zdCBuZXdPYmplY3RWYWx1ZSA9IHdpdGhOYW1lS2V5XG4gICAgICAgID8gdGhpcy5nZXRPYmplY3RWYWx1ZShpbmRleCkuc2V0KGYuZ2V0KCduYW1lJyksIG5ld1ZhbHVlKVxuICAgICAgICA6IG5ld1ZhbHVlO1xuICAgICAgY29uc3QgcGFyc2VkTWV0YWRhdGEgPSB7XG4gICAgICAgIFtjb2xsZWN0aW9uTmFtZV06IE9iamVjdC5hc3NpZ24obWV0YWRhdGEgPyBtZXRhZGF0YS50b0pTKCkgOiB7fSwgbmV3TWV0YWRhdGEgfHwge30pLFxuICAgICAgfTtcbiAgICAgIG9uQ2hhbmdlKHZhbHVlLnNldChpbmRleCwgbmV3T2JqZWN0VmFsdWUpLCBwYXJzZWRNZXRhZGF0YSk7XG4gICAgfTtcbiAgfVxuXG4gIGhhbmRsZVJlbW92ZSA9IChpbmRleCwgZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgeyB2YWx1ZSwgbWV0YWRhdGEsIG9uQ2hhbmdlLCBmaWVsZCwgY2xlYXJGaWVsZEVycm9ycyB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBjb2xsZWN0aW9uTmFtZSA9IGZpZWxkLmdldCgnbmFtZScpO1xuICAgIGNvbnN0IGlzU2luZ2xlRmllbGQgPSB0aGlzLmdldFZhbHVlVHlwZSgpID09PSB2YWx1ZVR5cGVzLlNJTkdMRTtcblxuICAgIGNvbnN0IG1ldGFkYXRhUmVtb3ZlUGF0aCA9IGlzU2luZ2xlRmllbGQgPyB2YWx1ZS5nZXQoaW5kZXgpIDogdmFsdWUuZ2V0KGluZGV4KS52YWx1ZVNlcSgpO1xuICAgIGNvbnN0IHBhcnNlZE1ldGFkYXRhID1cbiAgICAgIG1ldGFkYXRhICYmICFtZXRhZGF0YS5pc0VtcHR5KClcbiAgICAgICAgPyB7IFtjb2xsZWN0aW9uTmFtZV06IG1ldGFkYXRhLnJlbW92ZUluKG1ldGFkYXRhUmVtb3ZlUGF0aCkgfVxuICAgICAgICA6IG1ldGFkYXRhO1xuXG4gICAgaXRlbXNDb2xsYXBzZWQuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAvLyBjbGVhciB2YWxpZGF0aW9uc1xuICAgIHRoaXMudmFsaWRhdGlvbnMgPSBbXTtcblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXNDb2xsYXBzZWQ6IFsuLi5pdGVtc0NvbGxhcHNlZF0sXG4gICAgICBrZXlzOiBBcnJheS5mcm9tKHsgbGVuZ3RoOiB2YWx1ZS5zaXplIC0gMSB9LCAoKSA9PiB1dWlkKCkpLFxuICAgIH0pO1xuXG4gICAgb25DaGFuZ2UodmFsdWUucmVtb3ZlKGluZGV4KSwgcGFyc2VkTWV0YWRhdGEpO1xuICAgIGNsZWFyRmllbGRFcnJvcnMoKTtcbiAgfTtcblxuICBoYW5kbGVJdGVtQ29sbGFwc2VUb2dnbGUgPSAoaW5kZXgsIGV2ZW50KSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IG5ld0l0ZW1zQ29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWQubWFwKChjb2xsYXBzZWQsIGl0ZW1JbmRleCkgPT4ge1xuICAgICAgaWYgKGluZGV4ID09PSBpdGVtSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuICFjb2xsYXBzZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29sbGFwc2VkO1xuICAgIH0pO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXNDb2xsYXBzZWQ6IG5ld0l0ZW1zQ29sbGFwc2VkLFxuICAgIH0pO1xuICB9O1xuXG4gIGhhbmRsZUNvbGxhcHNlQWxsVG9nZ2xlID0gZSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHsgdmFsdWUsIGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQsIGxpc3RDb2xsYXBzZWQgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgbWluaW1pemVDb2xsYXBzZWRJdGVtcyA9IGZpZWxkLmdldCgnbWluaW1pemVfY29sbGFwc2VkJywgZmFsc2UpO1xuICAgIGNvbnN0IGxpc3RDb2xsYXBzZWRCeURlZmF1bHQgPSBmaWVsZC5nZXQoJ2NvbGxhcHNlZCcsIHRydWUpO1xuICAgIGNvbnN0IGFsbEl0ZW1zQ29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWQuZXZlcnkodmFsID0+IHZhbCA9PT0gdHJ1ZSk7XG5cbiAgICBpZiAobWluaW1pemVDb2xsYXBzZWRJdGVtcykge1xuICAgICAgbGV0IHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkO1xuICAgICAgLy8gT25seSBhbGxvdyBjb2xsYXBzaW5nIGFsbCBpdGVtcyBpbiB0aGlzIG1vZGUgYnV0IG5vdCBvcGVuaW5nIGFsbCBhdCBvbmNlXG4gICAgICBpZiAoIWxpc3RDb2xsYXBzZWQgfHwgIWxpc3RDb2xsYXBzZWRCeURlZmF1bHQpIHtcbiAgICAgICAgdXBkYXRlZEl0ZW1zQ29sbGFwc2VkID0gQXJyYXkodmFsdWUuc2l6ZSkuZmlsbCghbGlzdENvbGxhcHNlZCk7XG4gICAgICB9XG4gICAgICB0aGlzLnNldFN0YXRlKHsgbGlzdENvbGxhcHNlZDogIWxpc3RDb2xsYXBzZWQsIGl0ZW1zQ29sbGFwc2VkOiB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBpdGVtc0NvbGxhcHNlZDogQXJyYXkodmFsdWUuc2l6ZSkuZmlsbCghYWxsSXRlbXNDb2xsYXBzZWQpIH0pO1xuICAgIH1cbiAgfTtcblxuICBvYmplY3RMYWJlbChpdGVtKSB7XG4gICAgY29uc3QgeyBmaWVsZCwgZW50cnkgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgdmFsdWVUeXBlID0gdGhpcy5nZXRWYWx1ZVR5cGUoKTtcbiAgICBzd2l0Y2ggKHZhbHVlVHlwZSkge1xuICAgICAgY2FzZSB2YWx1ZVR5cGVzLk1JWEVEOiB7XG4gICAgICAgIGlmICghdmFsaWRhdGVJdGVtKGZpZWxkLCBpdGVtKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpdGVtVHlwZSA9IGdldFR5cGVkRmllbGRGb3JWYWx1ZShmaWVsZCwgaXRlbSk7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gaXRlbVR5cGUuZ2V0KCdsYWJlbCcsIGl0ZW1UeXBlLmdldCgnbmFtZScpKTtcbiAgICAgICAgLy8gZWFjaCB0eXBlIGNhbiBoYXZlIGl0cyBvd24gc3VtbWFyeSwgYnV0IGRlZmF1bHQgdG8gdGhlIGxpc3Qgc3VtbWFyeSBpZiBleGlzdHNcbiAgICAgICAgY29uc3Qgc3VtbWFyeSA9IGl0ZW1UeXBlLmdldCgnc3VtbWFyeScsIGZpZWxkLmdldCgnc3VtbWFyeScpKTtcbiAgICAgICAgY29uc3QgbGFiZWxSZXR1cm4gPSBzdW1tYXJ5ID8gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgbGFiZWwsIGl0ZW0pIDogbGFiZWw7XG4gICAgICAgIHJldHVybiBsYWJlbFJldHVybjtcbiAgICAgIH1cbiAgICAgIGNhc2UgdmFsdWVUeXBlcy5TSU5HTEU6IHtcbiAgICAgICAgY29uc3Qgc2luZ2xlRmllbGQgPSBmaWVsZC5nZXQoJ2ZpZWxkJyk7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gc2luZ2xlRmllbGQuZ2V0KCdsYWJlbCcsIHNpbmdsZUZpZWxkLmdldCgnbmFtZScpKTtcbiAgICAgICAgY29uc3Qgc3VtbWFyeSA9IGZpZWxkLmdldCgnc3VtbWFyeScpO1xuICAgICAgICBjb25zdCBkYXRhID0gZnJvbUpTKHsgW3NpbmdsZUZpZWxkLmdldCgnbmFtZScpXTogaXRlbSB9KTtcbiAgICAgICAgY29uc3QgbGFiZWxSZXR1cm4gPSBzdW1tYXJ5ID8gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgbGFiZWwsIGRhdGEpIDogbGFiZWw7XG4gICAgICAgIHJldHVybiBsYWJlbFJldHVybjtcbiAgICAgIH1cbiAgICAgIGNhc2UgdmFsdWVUeXBlcy5NVUxUSVBMRToge1xuICAgICAgICBpZiAoIXZhbGlkYXRlSXRlbShmaWVsZCwgaXRlbSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbXVsdGlGaWVsZHMgPSBmaWVsZC5nZXQoJ2ZpZWxkcycpO1xuICAgICAgICBjb25zdCBsYWJlbEZpZWxkID0gbXVsdGlGaWVsZHMgJiYgbXVsdGlGaWVsZHMuZmlyc3QoKTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpdGVtLmdldChsYWJlbEZpZWxkLmdldCgnbmFtZScpKTtcbiAgICAgICAgY29uc3Qgc3VtbWFyeSA9IGZpZWxkLmdldCgnc3VtbWFyeScpO1xuICAgICAgICBjb25zdCBsYWJlbFJldHVybiA9IHN1bW1hcnkgPyBoYW5kbGVTdW1tYXJ5KHN1bW1hcnksIGVudHJ5LCB2YWx1ZSwgaXRlbSkgOiB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIChsYWJlbFJldHVybiB8fCBgTm8gJHtsYWJlbEZpZWxkLmdldCgnbmFtZScpfWApLnRvU3RyaW5nKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIG9uU29ydEVuZCA9ICh7IG9sZEluZGV4LCBuZXdJbmRleCB9KSA9PiB7XG4gICAgY29uc3QgeyB2YWx1ZSwgY2xlYXJGaWVsZEVycm9ycyB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkLCBrZXlzIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgLy8gVXBkYXRlIHZhbHVlXG4gICAgY29uc3QgaXRlbSA9IHZhbHVlLmdldChvbGRJbmRleCk7XG4gICAgY29uc3QgbmV3VmFsdWUgPSB2YWx1ZS5kZWxldGUob2xkSW5kZXgpLmluc2VydChuZXdJbmRleCwgaXRlbSk7XG4gICAgdGhpcy5wcm9wcy5vbkNoYW5nZShuZXdWYWx1ZSk7XG5cbiAgICAvLyBVcGRhdGUgY29sbGFwc2luZ1xuICAgIGNvbnN0IGNvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkW29sZEluZGV4XTtcbiAgICBpdGVtc0NvbGxhcHNlZC5zcGxpY2Uob2xkSW5kZXgsIDEpO1xuICAgIGNvbnN0IHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCA9IFsuLi5pdGVtc0NvbGxhcHNlZF07XG4gICAgdXBkYXRlZEl0ZW1zQ29sbGFwc2VkLnNwbGljZShuZXdJbmRleCwgMCwgY29sbGFwc2VkKTtcblxuICAgIC8vIFJlc2V0IGl0ZW0gdG8gZW5zdXJlIHVwZGF0ZWQgc3RhdGVcbiAgICBjb25zdCB1cGRhdGVkS2V5cyA9IGtleXMubWFwKChrZXksIGtleUluZGV4KSA9PiB7XG4gICAgICBpZiAoa2V5SW5kZXggPT09IG9sZEluZGV4IHx8IGtleUluZGV4ID09PSBuZXdJbmRleCkge1xuICAgICAgICByZXR1cm4gdXVpZCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGtleTtcbiAgICB9KTtcbiAgICB0aGlzLnNldFN0YXRlKHsgaXRlbXNDb2xsYXBzZWQ6IHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCwga2V5czogdXBkYXRlZEtleXMgfSk7XG5cbiAgICAvL2NsZWFyIGVycm9yIGZpZWxkcyBhbmQgcmVtb3ZlIG9sZCB2YWxpZGF0aW9uc1xuICAgIGNsZWFyRmllbGRFcnJvcnMoKTtcbiAgICB0aGlzLnZhbGlkYXRpb25zID0gdGhpcy52YWxpZGF0aW9ucy5maWx0ZXIoaXRlbSA9PiB1cGRhdGVkS2V5cy5pbmNsdWRlcyhpdGVtLmtleSkpO1xuICB9O1xuXG4gIGhhc0Vycm9yID0gaW5kZXggPT4ge1xuICAgIGNvbnN0IHsgZmllbGRzRXJyb3JzIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChmaWVsZHNFcnJvcnMgJiYgZmllbGRzRXJyb3JzLnNpemUgPiAwKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhmaWVsZHNFcnJvcnMudG9KUygpKS5zb21lKGFyciA9PlxuICAgICAgICBhcnIuc29tZShlcnIgPT4gZXJyLnBhcmVudElkcyAmJiBlcnIucGFyZW50SWRzLmluY2x1ZGVzKHRoaXMuc3RhdGUua2V5c1tpbmRleF0pKSxcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9kaXNwbGF5LW5hbWVcbiAgcmVuZGVySXRlbSA9IChpdGVtLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGNsYXNzTmFtZVdyYXBwZXIsXG4gICAgICBlZGl0b3JDb250cm9sLFxuICAgICAgb25WYWxpZGF0ZU9iamVjdCxcbiAgICAgIG1ldGFkYXRhLFxuICAgICAgY2xlYXJGaWVsZEVycm9ycyxcbiAgICAgIGZpZWxkc0Vycm9ycyxcbiAgICAgIGNvbnRyb2xSZWYsXG4gICAgICByZXNvbHZlV2lkZ2V0LFxuICAgICAgcGFyZW50SWRzLFxuICAgICAgZm9ySUQsXG4gICAgICB0LFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCwga2V5cyB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBjb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZFtpbmRleF07XG4gICAgY29uc3Qga2V5ID0ga2V5c1tpbmRleF07XG4gICAgbGV0IGZpZWxkID0gdGhpcy5wcm9wcy5maWVsZDtcbiAgICBjb25zdCBoYXNFcnJvciA9IHRoaXMuaGFzRXJyb3IoaW5kZXgpO1xuICAgIGNvbnN0IGlzVmFyaWFibGVUeXBlc0xpc3QgPSB0aGlzLmdldFZhbHVlVHlwZSgpID09PSB2YWx1ZVR5cGVzLk1JWEVEO1xuICAgIGlmIChpc1ZhcmlhYmxlVHlwZXNMaXN0KSB7XG4gICAgICBmaWVsZCA9IGdldFR5cGVkRmllbGRGb3JWYWx1ZShmaWVsZCwgaXRlbSk7XG4gICAgICBpZiAoIWZpZWxkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlckVycm9uZW91c1R5cGVkSXRlbShpbmRleCwgaXRlbSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8U29ydGFibGVMaXN0SXRlbVxuICAgICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBjb2xsYXBzZWQgJiYgc3R5bGVzLmxpc3RDb250cm9sSXRlbUNvbGxhcHNlZF19XG4gICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICA+XG4gICAgICAgIHtpc1ZhcmlhYmxlVHlwZXNMaXN0ICYmIChcbiAgICAgICAgICA8TGFiZWxDb21wb25lbnRcbiAgICAgICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgICAgIGlzQWN0aXZlPXtmYWxzZX1cbiAgICAgICAgICAgIGhhc0Vycm9ycz17aGFzRXJyb3J9XG4gICAgICAgICAgICB1bmlxdWVGaWVsZElkPXt0aGlzLnVuaXF1ZUZpZWxkSWR9XG4gICAgICAgICAgICBpc0ZpZWxkT3B0aW9uYWw9e2ZpZWxkLmdldCgncmVxdWlyZWQnKSA9PT0gZmFsc2V9XG4gICAgICAgICAgICB0PXt0fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIDxTdHlsZWRMaXN0SXRlbVRvcEJhclxuICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICAgIG9uQ29sbGFwc2VUb2dnbGU9e3BhcnRpYWwodGhpcy5oYW5kbGVJdGVtQ29sbGFwc2VUb2dnbGUsIGluZGV4KX1cbiAgICAgICAgICBvblJlbW92ZT17cGFydGlhbCh0aGlzLmhhbmRsZVJlbW92ZSwgaW5kZXgpfVxuICAgICAgICAgIGRyYWdIYW5kbGVIT0M9e1NvcnRhYmxlSGFuZGxlfVxuICAgICAgICAgIGRhdGEtdGVzdGlkPXtgc3R5bGVkLWxpc3QtaXRlbS10b3AtYmFyLSR7a2V5fWB9XG4gICAgICAgIC8+XG4gICAgICAgIDxOZXN0ZWRPYmplY3RMYWJlbCBjb2xsYXBzZWQ9e2NvbGxhcHNlZH0gZXJyb3I9e2hhc0Vycm9yfT5cbiAgICAgICAgICB7dGhpcy5vYmplY3RMYWJlbChpdGVtKX1cbiAgICAgICAgPC9OZXN0ZWRPYmplY3RMYWJlbD5cbiAgICAgICAgPENsYXNzTmFtZXM+XG4gICAgICAgICAgeyh7IGNzcywgY3ggfSkgPT4gKFxuICAgICAgICAgICAgPE9iamVjdENvbnRyb2xcbiAgICAgICAgICAgICAgY2xhc3NOYW1lV3JhcHBlcj17Y3goY2xhc3NOYW1lV3JhcHBlciwge1xuICAgICAgICAgICAgICAgIFtjc3NgXG4gICAgICAgICAgICAgICAgICAke3N0eWxlU3RyaW5ncy5jb2xsYXBzZWRPYmplY3RDb250cm9sfTtcbiAgICAgICAgICAgICAgICBgXTogY29sbGFwc2VkLFxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgdmFsdWU9e2l0ZW19XG4gICAgICAgICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgICAgICAgb25DaGFuZ2VPYmplY3Q9e3RoaXMuaGFuZGxlQ2hhbmdlRm9yKGluZGV4KX1cbiAgICAgICAgICAgICAgZWRpdG9yQ29udHJvbD17ZWRpdG9yQ29udHJvbH1cbiAgICAgICAgICAgICAgcmVzb2x2ZVdpZGdldD17cmVzb2x2ZVdpZGdldH1cbiAgICAgICAgICAgICAgbWV0YWRhdGE9e21ldGFkYXRhfVxuICAgICAgICAgICAgICBmb3JMaXN0XG4gICAgICAgICAgICAgIG9uVmFsaWRhdGVPYmplY3Q9e29uVmFsaWRhdGVPYmplY3R9XG4gICAgICAgICAgICAgIGNsZWFyRmllbGRFcnJvcnM9e2NsZWFyRmllbGRFcnJvcnN9XG4gICAgICAgICAgICAgIGZpZWxkc0Vycm9ycz17ZmllbGRzRXJyb3JzfVxuICAgICAgICAgICAgICByZWY9e3RoaXMucHJvY2Vzc0NvbnRyb2xSZWZ9XG4gICAgICAgICAgICAgIGNvbnRyb2xSZWY9e2NvbnRyb2xSZWZ9XG4gICAgICAgICAgICAgIHZhbGlkYXRpb25LZXk9e2tleX1cbiAgICAgICAgICAgICAgY29sbGFwc2VkPXtjb2xsYXBzZWR9XG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgb2JqZWN0LWNvbnRyb2wtJHtrZXl9YH1cbiAgICAgICAgICAgICAgaGFzRXJyb3I9e2hhc0Vycm9yfVxuICAgICAgICAgICAgICBwYXJlbnRJZHM9e1suLi5wYXJlbnRJZHMsIGZvcklELCBrZXldfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L0NsYXNzTmFtZXM+XG4gICAgICA8L1NvcnRhYmxlTGlzdEl0ZW0+XG4gICAgKTtcbiAgfTtcblxuICByZW5kZXJFcnJvbmVvdXNUeXBlZEl0ZW0oaW5kZXgsIGl0ZW0pIHtcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMucHJvcHMuZmllbGQ7XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZ2V0RXJyb3JNZXNzYWdlRm9yVHlwZWRGaWVsZEFuZFZhbHVlKGZpZWxkLCBpdGVtKTtcbiAgICBjb25zdCBrZXkgPSBgaXRlbS0ke2luZGV4fWA7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTb3J0YWJsZUxpc3RJdGVtXG4gICAgICAgIGNzcz17W3N0eWxlcy5saXN0Q29udHJvbEl0ZW0sIHN0eWxlcy5saXN0Q29udHJvbEl0ZW1Db2xsYXBzZWRdfVxuICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAgIGtleT17a2V5fVxuICAgICAgPlxuICAgICAgICA8U3R5bGVkTGlzdEl0ZW1Ub3BCYXJcbiAgICAgICAgICBvbkNvbGxhcHNlVG9nZ2xlPXtudWxsfVxuICAgICAgICAgIG9uUmVtb3ZlPXtwYXJ0aWFsKHRoaXMuaGFuZGxlUmVtb3ZlLCBpbmRleCwga2V5KX1cbiAgICAgICAgICBkcmFnSGFuZGxlSE9DPXtTb3J0YWJsZUhhbmRsZX1cbiAgICAgICAgLz5cbiAgICAgICAgPE5lc3RlZE9iamVjdExhYmVsIGNvbGxhcHNlZD17dHJ1ZX0gZXJyb3I9e3RydWV9PlxuICAgICAgICAgIHtlcnJvck1lc3NhZ2V9XG4gICAgICAgIDwvTmVzdGVkT2JqZWN0TGFiZWw+XG4gICAgICA8L1NvcnRhYmxlTGlzdEl0ZW0+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlckxpc3RDb250cm9sKCkge1xuICAgIGNvbnN0IHsgdmFsdWUsIGZvcklELCBmaWVsZCwgY2xhc3NOYW1lV3JhcHBlciwgdCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkLCBsaXN0Q29sbGFwc2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IGl0ZW1zID0gdmFsdWUgfHwgTGlzdCgpO1xuICAgIGNvbnN0IGxhYmVsID0gZmllbGQuZ2V0KCdsYWJlbCcsIGZpZWxkLmdldCgnbmFtZScpKTtcbiAgICBjb25zdCBsYWJlbFNpbmd1bGFyID0gZmllbGQuZ2V0KCdsYWJlbF9zaW5ndWxhcicpIHx8IGZpZWxkLmdldCgnbGFiZWwnLCBmaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgY29uc3QgbGlzdExhYmVsID0gaXRlbXMuc2l6ZSA9PT0gMSA/IGxhYmVsU2luZ3VsYXIudG9Mb3dlckNhc2UoKSA6IGxhYmVsLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgbWluaW1pemVDb2xsYXBzZWRJdGVtcyA9IGZpZWxkLmdldCgnbWluaW1pemVfY29sbGFwc2VkJywgZmFsc2UpO1xuICAgIGNvbnN0IGFsbEl0ZW1zQ29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWQuZXZlcnkodmFsID0+IHZhbCA9PT0gdHJ1ZSk7XG4gICAgY29uc3Qgc2VsZkNvbGxhcHNlZCA9IGFsbEl0ZW1zQ29sbGFwc2VkICYmIChsaXN0Q29sbGFwc2VkIHx8ICFtaW5pbWl6ZUNvbGxhcHNlZEl0ZW1zKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8Q2xhc3NOYW1lcz5cbiAgICAgICAgeyh7IGN4LCBjc3MgfSkgPT4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGlkPXtmb3JJRH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goXG4gICAgICAgICAgICAgIGNsYXNzTmFtZVdyYXBwZXIsXG4gICAgICAgICAgICAgIGNzc2BcbiAgICAgICAgICAgICAgICAke3N0eWxlU3RyaW5ncy5vYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXJ9XG4gICAgICAgICAgICAgIGAsXG4gICAgICAgICAgICApfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxPYmplY3RXaWRnZXRUb3BCYXJcbiAgICAgICAgICAgICAgYWxsb3dBZGQ9e2ZpZWxkLmdldCgnYWxsb3dfYWRkJywgdHJ1ZSl9XG4gICAgICAgICAgICAgIG9uQWRkPXt0aGlzLmhhbmRsZUFkZH1cbiAgICAgICAgICAgICAgdHlwZXM9e2ZpZWxkLmdldChUWVBFU19LRVksIG51bGwpfVxuICAgICAgICAgICAgICBvbkFkZFR5cGU9e3R5cGUgPT4gdGhpcy5oYW5kbGVBZGRUeXBlKHR5cGUsIHJlc29sdmVGaWVsZEtleVR5cGUoZmllbGQpKX1cbiAgICAgICAgICAgICAgaGVhZGluZz17YCR7aXRlbXMuc2l6ZX0gJHtsaXN0TGFiZWx9YH1cbiAgICAgICAgICAgICAgbGFiZWw9e2xhYmVsU2luZ3VsYXIudG9Mb3dlckNhc2UoKX1cbiAgICAgICAgICAgICAgb25Db2xsYXBzZVRvZ2dsZT17dGhpcy5oYW5kbGVDb2xsYXBzZUFsbFRvZ2dsZX1cbiAgICAgICAgICAgICAgY29sbGFwc2VkPXtzZWxmQ29sbGFwc2VkfVxuICAgICAgICAgICAgICB0PXt0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHsoIXNlbGZDb2xsYXBzZWQgfHwgIW1pbmltaXplQ29sbGFwc2VkSXRlbXMpICYmIChcbiAgICAgICAgICAgICAgPFNvcnRhYmxlTGlzdFxuICAgICAgICAgICAgICAgIGl0ZW1zPXtpdGVtc31cbiAgICAgICAgICAgICAgICByZW5kZXJJdGVtPXt0aGlzLnJlbmRlckl0ZW19XG4gICAgICAgICAgICAgICAgb25Tb3J0RW5kPXt0aGlzLm9uU29ydEVuZH1cbiAgICAgICAgICAgICAgICB1c2VEcmFnSGFuZGxlXG4gICAgICAgICAgICAgICAgbG9ja0F4aXM9XCJ5XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L0NsYXNzTmFtZXM+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlcklucHV0KCkge1xuICAgIGNvbnN0IHsgZm9ySUQsIGNsYXNzTmFtZVdyYXBwZXIgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIHJldHVybiAoXG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBpZD17Zm9ySUR9XG4gICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICBvbkZvY3VzPXt0aGlzLmhhbmRsZUZvY3VzfVxuICAgICAgICBvbkJsdXI9e3RoaXMuaGFuZGxlQmx1cn1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVXcmFwcGVyfVxuICAgICAgLz5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmdldFZhbHVlVHlwZSgpICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJMaXN0Q29udHJvbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJJbnB1dCgpO1xuICAgIH1cbiAgfVxufVxuIl19 */")),
|
|
565
|
+
index: index,
|
|
566
|
+
key: key
|
|
567
|
+
}, (0, _core.jsx)(StyledListItemTopBar, {
|
|
568
|
+
onCollapseToggle: null,
|
|
569
|
+
onRemove: (0, _partial2.default)(this.handleRemove, index, key),
|
|
570
|
+
dragHandleHOC: _reactSortableHoc.SortableHandle
|
|
571
|
+
}), (0, _core.jsx)(NestedObjectLabel, {
|
|
572
|
+
collapsed: true,
|
|
573
|
+
error: true
|
|
574
|
+
}, errorMessage));
|
|
575
|
+
}
|
|
576
|
+
renderListControl() {
|
|
577
|
+
const {
|
|
578
|
+
value,
|
|
579
|
+
forID,
|
|
580
|
+
field,
|
|
581
|
+
classNameWrapper,
|
|
582
|
+
t
|
|
583
|
+
} = this.props;
|
|
584
|
+
const {
|
|
585
|
+
itemsCollapsed,
|
|
586
|
+
listCollapsed
|
|
587
|
+
} = this.state;
|
|
588
|
+
const items = value || (0, _immutable.List)();
|
|
589
|
+
const label = field.get('label', field.get('name'));
|
|
590
|
+
const labelSingular = field.get('label_singular') || field.get('label', field.get('name'));
|
|
591
|
+
const listLabel = items.size === 1 ? labelSingular.toLowerCase() : label.toLowerCase();
|
|
592
|
+
const minimizeCollapsedItems = field.get('minimize_collapsed', false);
|
|
593
|
+
const allItemsCollapsed = itemsCollapsed.every(val => val === true);
|
|
594
|
+
const selfCollapsed = allItemsCollapsed && (listCollapsed || !minimizeCollapsedItems);
|
|
595
|
+
return (0, _core.jsx)(_core.ClassNames, null, ({
|
|
596
|
+
cx,
|
|
597
|
+
css
|
|
598
|
+
}) => (0, _core.jsx)("div", {
|
|
599
|
+
id: forID,
|
|
600
|
+
className: cx(classNameWrapper, css`
|
|
601
|
+
${styleStrings.objectWidgetTopBarContainer}
|
|
602
|
+
`)
|
|
603
|
+
}, (0, _core.jsx)(_decapCmsUiDefault.ObjectWidgetTopBar, {
|
|
604
|
+
allowAdd: field.get('allow_add', true),
|
|
605
|
+
onAdd: this.handleAdd,
|
|
606
|
+
types: field.get(_typedListHelpers.TYPES_KEY, null),
|
|
607
|
+
onAddType: type => this.handleAddType(type, (0, _typedListHelpers.resolveFieldKeyType)(field)),
|
|
608
|
+
heading: `${items.size} ${listLabel}`,
|
|
609
|
+
label: labelSingular.toLowerCase(),
|
|
610
|
+
onCollapseToggle: this.handleCollapseAllToggle,
|
|
611
|
+
collapsed: selfCollapsed,
|
|
612
|
+
t: t
|
|
613
|
+
}), (!selfCollapsed || !minimizeCollapsedItems) && (0, _core.jsx)(SortableList, {
|
|
614
|
+
items: items,
|
|
615
|
+
renderItem: this.renderItem,
|
|
616
|
+
onSortEnd: this.onSortEnd,
|
|
617
|
+
useDragHandle: true,
|
|
618
|
+
lockAxis: "y"
|
|
619
|
+
})));
|
|
620
|
+
}
|
|
621
|
+
renderInput() {
|
|
622
|
+
const {
|
|
623
|
+
forID,
|
|
624
|
+
classNameWrapper
|
|
625
|
+
} = this.props;
|
|
626
|
+
const {
|
|
627
|
+
value
|
|
628
|
+
} = this.state;
|
|
629
|
+
return (0, _core.jsx)("input", {
|
|
630
|
+
type: "text",
|
|
631
|
+
id: forID,
|
|
632
|
+
value: value,
|
|
633
|
+
onChange: this.handleChange,
|
|
634
|
+
onFocus: this.handleFocus,
|
|
635
|
+
onBlur: this.handleBlur,
|
|
636
|
+
className: classNameWrapper
|
|
637
|
+
});
|
|
638
|
+
}
|
|
639
|
+
render() {
|
|
640
|
+
if (this.getValueType() !== null) {
|
|
641
|
+
return this.renderListControl();
|
|
642
|
+
} else {
|
|
643
|
+
return this.renderInput();
|
|
644
|
+
}
|
|
645
|
+
}
|
|
646
|
+
}
|
|
647
|
+
exports.default = ListControl;
|
|
648
|
+
_defineProperty(ListControl, "propTypes", {
|
|
649
|
+
metadata: _reactImmutableProptypes.default.map,
|
|
650
|
+
onChange: _propTypes.default.func.isRequired,
|
|
651
|
+
onChangeObject: _propTypes.default.func.isRequired,
|
|
652
|
+
onValidateObject: _propTypes.default.func.isRequired,
|
|
653
|
+
validate: _propTypes.default.func.isRequired,
|
|
654
|
+
value: _reactImmutableProptypes.default.list,
|
|
655
|
+
field: _propTypes.default.object,
|
|
656
|
+
forID: _propTypes.default.string,
|
|
657
|
+
controlRef: _propTypes.default.func,
|
|
658
|
+
mediaPaths: _reactImmutableProptypes.default.map.isRequired,
|
|
659
|
+
getAsset: _propTypes.default.func.isRequired,
|
|
660
|
+
onOpenMediaLibrary: _propTypes.default.func.isRequired,
|
|
661
|
+
onAddAsset: _propTypes.default.func.isRequired,
|
|
662
|
+
onRemoveInsertedMedia: _propTypes.default.func.isRequired,
|
|
663
|
+
classNameWrapper: _propTypes.default.string.isRequired,
|
|
664
|
+
setActiveStyle: _propTypes.default.func.isRequired,
|
|
665
|
+
setInactiveStyle: _propTypes.default.func.isRequired,
|
|
666
|
+
editorControl: _propTypes.default.elementType.isRequired,
|
|
667
|
+
resolveWidget: _propTypes.default.func.isRequired,
|
|
668
|
+
clearFieldErrors: _propTypes.default.func.isRequired,
|
|
669
|
+
fieldsErrors: _reactImmutableProptypes.default.map.isRequired,
|
|
670
|
+
entry: _reactImmutableProptypes.default.map.isRequired,
|
|
671
|
+
t: _propTypes.default.func
|
|
672
|
+
});
|
|
673
|
+
_defineProperty(ListControl, "defaultProps", {
|
|
674
|
+
value: (0, _immutable.List)(),
|
|
675
|
+
parentIds: []
|
|
676
|
+
});
|