decap-cms-widget-list 3.3.0 → 3.5.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 +10 -0
- package/dist/decap-cms-widget-list.js +4 -4
- package/dist/decap-cms-widget-list.js.LICENSE.txt +2 -12
- package/dist/decap-cms-widget-list.js.map +1 -1
- package/dist/esm/ListControl.js +445 -447
- package/dist/esm/index.js +4 -8
- package/dist/esm/schema.js +6 -0
- package/package.json +3 -3
- package/src/ListControl.js +10 -1
- package/src/__tests__/ListControl.spec.js +58 -58
- package/src/__tests__/__snapshots__/ListControl.spec.js.snap +120 -78
- package/src/schema.js +2 -0
package/dist/esm/ListControl.js
CHANGED
|
@@ -1,17 +1,14 @@
|
|
|
1
1
|
import _styled from "@emotion/styled/base";
|
|
2
|
-
|
|
3
|
-
import _isEmpty from "lodash/isEmpty";
|
|
4
|
-
import _partial from "lodash/partial";
|
|
5
|
-
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; }
|
|
6
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
|
|
7
|
-
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
8
|
-
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
2
|
+
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
9
3
|
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)."; }
|
|
10
4
|
import React from 'react';
|
|
11
5
|
import PropTypes from 'prop-types';
|
|
12
6
|
import ImmutablePropTypes from 'react-immutable-proptypes';
|
|
13
7
|
import { css, ClassNames } from '@emotion/react';
|
|
14
8
|
import { List, Map, fromJS } from 'immutable';
|
|
9
|
+
import partial from 'lodash/partial';
|
|
10
|
+
import isEmpty from 'lodash/isEmpty';
|
|
11
|
+
import uniqueId from 'lodash/uniqueId';
|
|
15
12
|
import { v4 as uuid } from 'uuid';
|
|
16
13
|
import DecapCmsWidgetObject from 'decap-cms-widget-object';
|
|
17
14
|
import { DndContext, MouseSensor, TouchSensor, closestCenter, useSensor, useSensors } from '@dnd-kit/core';
|
|
@@ -26,15 +23,15 @@ const ObjectControl = DecapCmsWidgetObject.controlComponent;
|
|
|
26
23
|
const ListItem = /*#__PURE__*/_styled("div", {
|
|
27
24
|
target: "e11zrb3c2",
|
|
28
25
|
label: "ListItem"
|
|
29
|
-
})(process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFzQ2lCIiwiZmlsZSI6Ii4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IEltbXV0YWJsZVByb3BUeXBlcyBmcm9tICdyZWFjdC1pbW11dGFibGUtcHJvcHR5cGVzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCB7IGNzcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IExpc3QsIE1hcCwgZnJvbUpTIH0gZnJvbSAnaW1tdXRhYmxlJztcbmltcG9ydCB7IHBhcnRpYWwsIGlzRW1wdHksIHVuaXF1ZUlkIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tICd1dWlkJztcbmltcG9ydCBEZWNhcENtc1dpZGdldE9iamVjdCBmcm9tICdkZWNhcC1jbXMtd2lkZ2V0LW9iamVjdCc7XG5pbXBvcnQge1xuICBEbmRDb250ZXh0LFxuICBNb3VzZVNlbnNvcixcbiAgVG91Y2hTZW5zb3IsXG4gIGNsb3Nlc3RDZW50ZXIsXG4gIHVzZVNlbnNvcixcbiAgdXNlU2Vuc29ycyxcbn0gZnJvbSAnQGRuZC1raXQvY29yZSc7XG5pbXBvcnQgeyBTb3J0YWJsZUNvbnRleHQsIHVzZVNvcnRhYmxlIH0gZnJvbSAnQGRuZC1raXQvc29ydGFibGUnO1xuaW1wb3J0IHsgcmVzdHJpY3RUb1BhcmVudEVsZW1lbnQgfSBmcm9tICdAZG5kLWtpdC9tb2RpZmllcnMnO1xuaW1wb3J0IHsgQ1NTIH0gZnJvbSAnQGRuZC1raXQvdXRpbGl0aWVzJztcbmltcG9ydCB7XG4gIExpc3RJdGVtVG9wQmFyLFxuICBPYmplY3RXaWRnZXRUb3BCYXIsXG4gIGNvbG9ycyxcbiAgbGVuZ3RocyxcbiAgRmllbGRMYWJlbCxcbn0gZnJvbSAnZGVjYXAtY21zLXVpLWRlZmF1bHQnO1xuaW1wb3J0IHsgc3RyaW5nVGVtcGxhdGUsIHZhbGlkYXRpb25zIH0gZnJvbSAnZGVjYXAtY21zLWxpYi13aWRnZXRzJztcblxuaW1wb3J0IHtcbiAgVFlQRVNfS0VZLFxuICBnZXRUeXBlZEZpZWxkRm9yVmFsdWUsXG4gIHJlc29sdmVGaWVsZEtleVR5cGUsXG4gIGdldEVycm9yTWVzc2FnZUZvclR5cGVkRmllbGRBbmRWYWx1ZSxcbn0gZnJvbSAnLi90eXBlZExpc3RIZWxwZXJzJztcblxuY29uc3QgT2JqZWN0Q29udHJvbCA9IERlY2FwQ21zV2lkZ2V0T2JqZWN0LmNvbnRyb2xDb21wb25lbnQ7XG5cbmNvbnN0IExpc3RJdGVtID0gc3R5bGVkLmRpdigpO1xuXG5jb25zdCBTdHlsZWRMaXN0SXRlbVRvcEJhciA9IHN0eWxlZChMaXN0SXRlbVRvcEJhcilgXG4gIGJhY2tncm91bmQtY29sb3I6ICR7Y29sb3JzLnRleHRGaWVsZEJvcmRlcn07XG5gO1xuXG5jb25zdCBOZXN0ZWRPYmplY3RMYWJlbCA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6ICR7cHJvcHMgPT4gKHByb3BzLmNvbGxhcHNlZCA/ICdibG9jaycgOiAnbm9uZScpfTtcbiAgYm9yZGVyLXRvcDogMDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gKHByb3BzLmVycm9yID8gY29sb3JzLmVycm9yVGV4dCA6ICdpbmhlcml0Jyl9O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAke2NvbG9ycy50ZXh0RmllbGRCb3JkZXJ9O1xuICBwYWRkaW5nOiAxM3B4O1xuICBib3JkZXItcmFkaXVzOiAwIDAgJHtsZW5ndGhzLmJvcmRlclJhZGl1c30gJHtsZW5ndGhzLmJvcmRlclJhZGl1c307XG5gO1xuXG5jb25zdCBzdHlsZVN0cmluZ3MgPSB7XG4gIGNvbGxhcHNlZE9iamVjdENvbnRyb2w6IGBcbiAgICBkaXNwbGF5OiBub25lO1xuICBgLFxuICBvYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXI6IGBcbiAgICBwYWRkaW5nOiAke2xlbmd0aHMub2JqZWN0V2lkZ2V0VG9wQmFyQ29udGFpbmVyUGFkZGluZ307XG4gIGAsXG59O1xuXG5jb25zdCBzdHlsZXMgPSB7XG4gIGxpc3RDb250cm9sSXRlbTogY3NzYFxuICAgIG1hcmdpbi10b3A6IDE4cHg7XG5cbiAgICAmOmZpcnN0LW9mLXR5cGUge1xuICAgICAgbWFyZ2luLXRvcDogMjZweDtcbiAgICB9XG4gIGAsXG4gIGxpc3RDb250cm9sSXRlbUNvbGxhcHNlZDogY3NzYFxuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICBgLFxufTtcblxuZnVuY3Rpb24gU29ydGFibGVMaXN0KHsgaXRlbXMsIGNoaWxkcmVuLCBvblNvcnRFbmQsIGtleXMgfSkge1xuICBjb25zdCBhY3RpdmF0aW9uQ29uc3RyYWludCA9IHsgZGlzdGFuY2U6IDQgfTtcbiAgY29uc3Qgc2Vuc29ycyA9IHVzZVNlbnNvcnMoXG4gICAgdXNlU2Vuc29yKE1vdXNlU2Vuc29yLCB7IGFjdGl2YXRpb25Db25zdHJhaW50IH0pLFxuICAgIHVzZVNlbnNvcihUb3VjaFNlbnNvciwgeyBhY3RpdmF0aW9uQ29uc3RyYWludCB9KSxcbiAgKTtcblxuICBmdW5jdGlvbiBoYW5kbGVTb3J0RW5kKHsgYWN0aXZlLCBvdmVyIH0pIHtcbiAgICBvblNvcnRFbmQoe1xuICAgICAgb2xkSW5kZXg6IGtleXMuaW5kZXhPZihhY3RpdmUuaWQpLFxuICAgICAgbmV3SW5kZXg6IGtleXMuaW5kZXhPZihvdmVyLmlkKSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdj5cbiAgICAgIDxEbmRDb250ZXh0XG4gICAgICAgIG1vZGlmaWVycz17W3Jlc3RyaWN0VG9QYXJlbnRFbGVtZW50XX1cbiAgICAgICAgY29sbGlzaW9uRGV0ZWN0aW9uPXtjbG9zZXN0Q2VudGVyfVxuICAgICAgICBzZW5zb3JzPXtzZW5zb3JzfVxuICAgICAgICBvbkRyYWdFbmQ9e2hhbmRsZVNvcnRFbmR9XG4gICAgICA+XG4gICAgICAgIDxTb3J0YWJsZUNvbnRleHQgaXRlbXM9e2l0ZW1zfT57Y2hpbGRyZW59PC9Tb3J0YWJsZUNvbnRleHQ+XG4gICAgICA8L0RuZENvbnRleHQ+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFNvcnRhYmxlTGlzdEl0ZW0ocHJvcHMpIHtcbiAgY29uc3QgeyBzZXROb2RlUmVmLCB0cmFuc2Zvcm0sIHRyYW5zaXRpb24gfSA9IHVzZVNvcnRhYmxlKHtcbiAgICBpZDogcHJvcHMuaWQsXG4gIH0pO1xuXG4gIGNvbnN0IHN0eWxlID0ge1xuICAgIHRyYW5zZm9ybTogQ1NTLlRyYW5zZm9ybS50b1N0cmluZyh0cmFuc2Zvcm0pLFxuICAgIHRyYW5zaXRpb24sXG4gIH07XG5cbiAgY29uc3QgeyBjb2xsYXBzZWQgfSA9IHByb3BzO1xuXG4gIHJldHVybiAoXG4gICAgPExpc3RJdGVtXG4gICAgICBzb3J0YWJsZVxuICAgICAgcmVmPXtzZXROb2RlUmVmfVxuICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgY3NzPXtbc3R5bGVzLmxpc3RDb250cm9sSXRlbSwgY29sbGFwc2VkICYmIHN0eWxlcy5saXN0Q29udHJvbEl0ZW1Db2xsYXBzZWRdfVxuICAgID5cbiAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICA8L0xpc3RJdGVtPlxuICApO1xufVxuXG5mdW5jdGlvbiBEcmFnSGFuZGxlKHsgY2hpbGRyZW4sIGlkIH0pIHtcbiAgY29uc3QgeyBhdHRyaWJ1dGVzLCBsaXN0ZW5lcnMgfSA9IHVzZVNvcnRhYmxlKHtcbiAgICBpZCxcbiAgfSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IHsuLi5hdHRyaWJ1dGVzfSB7Li4ubGlzdGVuZXJzfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuY29uc3QgdmFsdWVUeXBlcyA9IHtcbiAgU0lOR0xFOiAnU0lOR0xFJyxcbiAgTVVMVElQTEU6ICdNVUxUSVBMRScsXG4gIE1JWEVEOiAnTUlYRUQnLFxufTtcblxuZnVuY3Rpb24gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgbGFiZWwsIGl0ZW0pIHtcbiAgY29uc3QgZGF0YSA9IHN0cmluZ1RlbXBsYXRlLmFkZEZpbGVUZW1wbGF0ZUZpZWxkcyhcbiAgICBlbnRyeS5nZXQoJ3BhdGgnKSxcbiAgICBpdGVtLnNldCgnZmllbGRzLmxhYmVsJywgbGFiZWwpLFxuICApO1xuICByZXR1cm4gc3RyaW5nVGVtcGxhdGUuY29tcGlsZVN0cmluZ1RlbXBsYXRlKHN1bW1hcnksIG51bGwsICcnLCBkYXRhKTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVJdGVtKGZpZWxkLCBpdGVtKSB7XG4gIGlmICghTWFwLmlzTWFwKGl0ZW0pKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYCcke2ZpZWxkLmdldCgnbmFtZScpfScgZmllbGQgaXRlbSB2YWx1ZSB2YWx1ZSBzaG91bGQgYmUgYSBtYXAgYnV0IGlzIGEgJyR7dHlwZW9mIGl0ZW19J2AsXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIExhYmVsQ29tcG9uZW50KHsgZmllbGQsIGlzQWN0aXZlLCBoYXNFcnJvcnMsIHVuaXF1ZUZpZWxkSWQsIGlzRmllbGRPcHRpb25hbCwgdCB9KSB7XG4gIGNvbnN0IGxhYmVsID0gYCR7ZmllbGQuZ2V0KCdsYWJlbCcsIGZpZWxkLmdldCgnbmFtZScpKX1gO1xuICByZXR1cm4gKFxuICAgIDxGaWVsZExhYmVsIGlzQWN0aXZlPXtpc0FjdGl2ZX0gaGFzRXJyb3JzPXtoYXNFcnJvcnN9IGh0bWxGb3I9e3VuaXF1ZUZpZWxkSWR9PlxuICAgICAge2xhYmVsfSB7YCR7aXNGaWVsZE9wdGlvbmFsID8gYCAoJHt0KCdlZGl0b3IuZWRpdG9yQ29udHJvbC5maWVsZC5vcHRpb25hbCcpfSlgIDogJyd9YH1cbiAgICA8L0ZpZWxkTGFiZWw+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExpc3RDb250cm9sIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgY2hpbGRSZWZzID0ge307XG5cbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICBtZXRhZGF0YTogSW1tdXRhYmxlUHJvcFR5cGVzLm1hcCxcbiAgICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvbkNoYW5nZU9iamVjdDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvblZhbGlkYXRlT2JqZWN0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHZhbGlkYXRlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHZhbHVlOiBJbW11dGFibGVQcm9wVHlwZXMubGlzdCxcbiAgICBmaWVsZDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBmb3JJRDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjb250cm9sUmVmOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBtZWRpYVBhdGhzOiBJbW11dGFibGVQcm9wVHlwZXMubWFwLmlzUmVxdWlyZWQsXG4gICAgZ2V0QXNzZXQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25PcGVuTWVkaWFMaWJyYXJ5OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uQWRkQXNzZXQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25SZW1vdmVJbnNlcnRlZE1lZGlhOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGNsYXNzTmFtZVdyYXBwZXI6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBzZXRBY3RpdmVTdHlsZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBzZXRJbmFjdGl2ZVN0eWxlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGVkaXRvckNvbnRyb2w6IFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkLFxuICAgIHJlc29sdmVXaWRnZXQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgY2xlYXJGaWVsZEVycm9yczogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBmaWVsZHNFcnJvcnM6IEltbXV0YWJsZVByb3BUeXBlcy5tYXAuaXNSZXF1aXJlZCxcbiAgICBlbnRyeTogSW1tdXRhYmxlUHJvcFR5cGVzLm1hcC5pc1JlcXVpcmVkLFxuICAgIHQ6IFByb3BUeXBlcy5mdW5jLFxuICB9O1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgdmFsdWU6IExpc3QoKSxcbiAgICBwYXJlbnRJZHM6IFtdLFxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIGNvbnN0IHsgZmllbGQsIHZhbHVlIH0gPSBwcm9wcztcbiAgICBjb25zdCBsaXN0Q29sbGFwc2VkID0gZmllbGQuZ2V0KCdjb2xsYXBzZWQnLCB0cnVlKTtcbiAgICBjb25zdCBpdGVtc0NvbGxhcHNlZCA9ICh2YWx1ZSAmJiBBcnJheSh2YWx1ZS5zaXplKS5maWxsKGxpc3RDb2xsYXBzZWQpKSB8fCBbXTtcbiAgICBjb25zdCBrZXlzID0gKHZhbHVlICYmIEFycmF5LmZyb20oeyBsZW5ndGg6IHZhbHVlLnNpemUgfSwgKCkgPT4gdXVpZCgpKSkgfHwgW107XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgbGlzdENvbGxhcHNlZCxcbiAgICAgIGl0ZW1zQ29sbGFwc2VkLFxuICAgICAgdmFsdWU6IHRoaXMudmFsdWVUb1N0cmluZyh2YWx1ZSksXG4gICAgICBrZXlzLFxuICAgIH07XG4gIH1cblxuICB2YWx1ZVRvU3RyaW5nID0gdmFsdWUgPT4ge1xuICAgIGxldCBzdHJpbmdWYWx1ZTtcbiAgICBpZiAoTGlzdC5pc0xpc3QodmFsdWUpIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBzdHJpbmdWYWx1ZSA9IHZhbHVlLmpvaW4oJywnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgRXhwZWN0ZWQgTGlzdCB2YWx1ZSB0byBiZSBhbiBhcnJheSBidXQgcmVjZWl2ZWQgJyR7dmFsdWV9JyB3aXRoIHR5cGUgb2YgJyR7dHlwZW9mIHZhbHVlfScuIFBsZWFzZSBjaGVjayB0aGUgdmFsdWUgcHJvdmlkZWQgdG8gdGhlICcke3RoaXMucHJvcHMuZmllbGQuZ2V0KFxuICAgICAgICAgICduYW1lJyxcbiAgICAgICAgKX0nIGZpZWxkYCxcbiAgICAgICk7XG4gICAgICBzdHJpbmdWYWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBzdHJpbmdWYWx1ZS5yZXBsYWNlKC8sKFteXFxzXXwkKS9nLCAnLCAkMScpO1xuICB9O1xuXG4gIGdldFZhbHVlVHlwZSA9ICgpID0+IHtcbiAgICBjb25zdCB7IGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChmaWVsZC5nZXQoJ2ZpZWxkcycpKSB7XG4gICAgICByZXR1cm4gdmFsdWVUeXBlcy5NVUxUSVBMRTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkLmdldCgnZmllbGQnKSkge1xuICAgICAgcmV0dXJuIHZhbHVlVHlwZXMuU0lOR0xFO1xuICAgIH0gZWxzZSBpZiAoZmllbGQuZ2V0KFRZUEVTX0tFWSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZVR5cGVzLk1JWEVEO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH07XG5cbiAgdW5pcXVlRmllbGRJZCA9IHVuaXF1ZUlkKGAke3RoaXMucHJvcHMuZmllbGQuZ2V0KCduYW1lJyl9LWZpZWxkLWApO1xuICAvKipcbiAgICogQWx3YXlzIHVwZGF0ZSBzbyB0aGF0IGVhY2ggbmVzdGVkIHdpZGdldCBoYXMgdGhlIG9wdGlvbiB0byB1cGRhdGUuIFRoaXMgaXNcbiAgICogcmVxdWlyZWQgYmVjYXVzZSBDb250cm9sSE9DIHByb3ZpZGVzIGEgZGVmYXVsdCBgc2hvdWxkQ29tcG9uZW50VXBkYXRlYFxuICAgKiB3aGljaCBvbmx5IHVwZGF0ZXMgaWYgdGhlIHZhbHVlIGNoYW5nZXMsIGJ1dCBldmVyeSB3aWRnZXQgbXVzdCBiZSBhbGxvd2VkXG4gICAqIHRvIG92ZXJyaWRlIHRoaXMuXG4gICAqL1xuICBzaG91bGRDb21wb25lbnRVcGRhdGUoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBoYW5kbGVDaGFuZ2UgPSBlID0+IHtcbiAgICBjb25zdCB7IG9uQ2hhbmdlIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy5zdGF0ZS52YWx1ZTtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IGUudGFyZ2V0LnZhbHVlLnRyaW0oKTtcbiAgICBjb25zdCBsaXN0VmFsdWUgPSBuZXdWYWx1ZSA/IG5ld1ZhbHVlLnNwbGl0KCcsJykgOiBbXTtcbiAgICBpZiAobmV3VmFsdWUubWF0Y2goLywkLykgJiYgb2xkVmFsdWUubWF0Y2goLywgJC8pKSB7XG4gICAgICBsaXN0VmFsdWUucG9wKCk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPSB0aGlzLnZhbHVlVG9TdHJpbmcobGlzdFZhbHVlKTtcbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHBhcnNlZFZhbHVlIH0pO1xuICAgIG9uQ2hhbmdlKExpc3QobGlzdFZhbHVlLm1hcCh2YWwgPT4gdmFsLnRyaW0oKSkpKTtcbiAgfTtcblxuICBoYW5kbGVGb2N1cyA9ICgpID0+IHtcbiAgICB0aGlzLnByb3BzLnNldEFjdGl2ZVN0eWxlKCk7XG4gIH07XG5cbiAgaGFuZGxlQmx1ciA9IGUgPT4ge1xuICAgIGNvbnN0IGxpc3RWYWx1ZSA9IGUudGFyZ2V0LnZhbHVlXG4gICAgICAuc3BsaXQoJywnKVxuICAgICAgLm1hcChlbCA9PiBlbC50cmltKCkpXG4gICAgICAuZmlsdGVyKGVsID0+IGVsKTtcbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHRoaXMudmFsdWVUb1N0cmluZyhsaXN0VmFsdWUpIH0pO1xuICAgIHRoaXMucHJvcHMuc2V0SW5hY3RpdmVTdHlsZSgpO1xuICB9O1xuXG4gIGhhbmRsZUFkZCA9IGUgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHBhcnNlZFZhbHVlID1cbiAgICAgIHRoaXMuZ2V0VmFsdWVUeXBlKCkgPT09IHZhbHVlVHlwZXMuU0lOR0xFXG4gICAgICAgID8gdGhpcy5zaW5nbGVEZWZhdWx0KClcbiAgICAgICAgOiBmcm9tSlModGhpcy5tdWx0aXBsZURlZmF1bHQoZmllbGQuZ2V0KCdmaWVsZHMnKSkpO1xuICAgIHRoaXMuYWRkSXRlbShwYXJzZWRWYWx1ZSk7XG4gIH07XG5cbiAgc2luZ2xlRGVmYXVsdCA9ICgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5maWVsZC5nZXRJbihbJ2ZpZWxkJywgJ2RlZmF1bHQnXSwgbnVsbCk7XG4gIH07XG5cbiAgbXVsdGlwbGVEZWZhdWx0ID0gZmllbGRzID0+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KGZpZWxkcyk7XG4gIH07XG5cbiAgaGFuZGxlQWRkVHlwZSA9ICh0eXBlLCB0eXBlS2V5KSA9PiB7XG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPSBmcm9tSlModGhpcy5taXhlZERlZmF1bHQodHlwZUtleSwgdHlwZSkpO1xuICAgIHRoaXMuYWRkSXRlbShwYXJzZWRWYWx1ZSk7XG4gIH07XG5cbiAgbWl4ZWREZWZhdWx0ID0gKHR5cGVLZXksIHR5cGUpID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZFR5cGUgPSB0aGlzLnByb3BzLmZpZWxkLmdldChUWVBFU19LRVkpLmZpbmQoZiA9PiBmLmdldCgnbmFtZScpID09PSB0eXBlKTtcbiAgICBjb25zdCBmaWVsZHMgPSBzZWxlY3RlZFR5cGUuZ2V0KCdmaWVsZHMnKSB8fCBbc2VsZWN0ZWRUeXBlLmdldCgnZmllbGQnKV07XG5cbiAgICByZXR1cm4gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KGZpZWxkcywgeyBbdHlwZUtleV06IHR5cGUgfSk7XG4gIH07XG5cbiAgZ2V0RmllbGRzRGVmYXVsdCA9IChmaWVsZHMsIGluaXRpYWxWYWx1ZSA9IHt9KSA9PiB7XG4gICAgcmV0dXJuIGZpZWxkcy5yZWR1Y2UoKGFjYywgaXRlbSkgPT4ge1xuICAgICAgY29uc3Qgc3ViZmllbGRzID0gaXRlbS5nZXQoJ2ZpZWxkJykgfHwgaXRlbS5nZXQoJ2ZpZWxkcycpO1xuICAgICAgY29uc3Qgb2JqZWN0ID0gaXRlbS5nZXQoJ3dpZGdldCcpID09ICdvYmplY3QnO1xuICAgICAgY29uc3QgbmFtZSA9IGl0ZW0uZ2V0KCduYW1lJyk7XG4gICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSBpdGVtLmdldCgnZGVmYXVsdCcsIG51bGwpO1xuXG4gICAgICBpZiAoTGlzdC5pc0xpc3Qoc3ViZmllbGRzKSAmJiBvYmplY3QpIHtcbiAgICAgICAgY29uc3Qgc3ViRGVmYXVsdFZhbHVlID0gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KHN1YmZpZWxkcyk7XG4gICAgICAgICFpc0VtcHR5KHN1YkRlZmF1bHRWYWx1ZSkgJiYgKGFjY1tuYW1lXSA9IHN1YkRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9XG5cbiAgICAgIGlmIChNYXAuaXNNYXAoc3ViZmllbGRzKSAmJiBvYmplY3QpIHtcbiAgICAgICAgY29uc3Qgc3ViRGVmYXVsdFZhbHVlID0gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KFtzdWJmaWVsZHNdKTtcbiAgICAgICAgIWlzRW1wdHkoc3ViRGVmYXVsdFZhbHVlKSAmJiAoYWNjW25hbWVdID0gc3ViRGVmYXVsdFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH1cblxuICAgICAgaWYgKGRlZmF1bHRWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBhY2NbbmFtZV0gPSBkZWZhdWx0VmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgaW5pdGlhbFZhbHVlKTtcbiAgfTtcblxuICBhZGRJdGVtID0gcGFyc2VkVmFsdWUgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWUsIG9uQ2hhbmdlLCBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBhZGRUb1RvcCA9IGZpZWxkLmdldCgnYWRkX3RvX3RvcCcsIGZhbHNlKTtcblxuICAgIGNvbnN0IGl0ZW1LZXkgPSB1dWlkKCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBpdGVtc0NvbGxhcHNlZDogYWRkVG9Ub3BcbiAgICAgICAgPyBbZmFsc2UsIC4uLnRoaXMuc3RhdGUuaXRlbXNDb2xsYXBzZWRdXG4gICAgICAgIDogWy4uLnRoaXMuc3RhdGUuaXRlbXNDb2xsYXBzZWQsIGZhbHNlXSxcbiAgICAgIGtleXM6IGFkZFRvVG9wID8gW2l0ZW1LZXksIC4uLnRoaXMuc3RhdGUua2V5c10gOiBbLi4udGhpcy5zdGF0ZS5rZXlzLCBpdGVtS2V5XSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGxpc3RWYWx1ZSA9IHZhbHVlIHx8IExpc3QoKTtcbiAgICBpZiAoYWRkVG9Ub3ApIHtcbiAgICAgIG9uQ2hhbmdlKGxpc3RWYWx1ZS51bnNoaWZ0KHBhcnNlZFZhbHVlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uQ2hhbmdlKGxpc3RWYWx1ZS5wdXNoKHBhcnNlZFZhbHVlKSk7XG4gICAgfVxuICB9O1xuXG4gIHByb2Nlc3NDb250cm9sUmVmID0gcmVmID0+IHtcbiAgICBpZiAoIXJlZikgcmV0dXJuO1xuICAgIGNvbnN0IHtcbiAgICAgIHByb3BzOiB7IHZhbGlkYXRpb25LZXk6IGtleSB9LFxuICAgIH0gPSByZWY7XG4gICAgdGhpcy5jaGlsZFJlZnNba2V5XSA9IHJlZjtcbiAgICB0aGlzLnByb3BzLmNvbnRyb2xSZWY/Lih0aGlzKTtcbiAgfTtcblxuICB2YWxpZGF0ZSA9ICgpID0+IHtcbiAgICAvLyBGaXJzdCB2YWxpZGF0ZSBjaGlsZCB3aWRnZXRzIGlmIHRoaXMgaXMgYSBjb21wbGV4IGxpc3RcbiAgICBjb25zdCBoYXNDaGlsZFdpZGdldHMgPSB0aGlzLmdldFZhbHVlVHlwZSgpICYmIE9iamVjdC5rZXlzKHRoaXMuY2hpbGRSZWZzKS5sZW5ndGggPiAwO1xuICAgIGlmIChoYXNDaGlsZFdpZGdldHMpIHtcbiAgICAgIE9iamVjdC52YWx1ZXModGhpcy5jaGlsZFJlZnMpLmZvckVhY2god2lkZ2V0ID0+IHtcbiAgICAgICAgd2lkZ2V0Py52YWxpZGF0ZT8uKCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9wcy52YWxpZGF0ZSgpO1xuICAgIH1cbiAgICB0aGlzLnByb3BzLm9uVmFsaWRhdGVPYmplY3QodGhpcy5wcm9wcy5mb3JJRCwgdGhpcy52YWxpZGF0ZVNpemUoKSk7XG4gIH07XG5cbiAgdmFsaWRhdGVTaXplID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgZmllbGQsIHZhbHVlLCB0IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG1pbiA9IGZpZWxkLmdldCgnbWluJyk7XG4gICAgY29uc3QgbWF4ID0gZmllbGQuZ2V0KCdtYXgnKTtcbiAgICBjb25zdCByZXF1aXJlZCA9IGZpZWxkLmdldCgncmVxdWlyZWQnLCB0cnVlKTtcblxuICAgIGlmICghcmVxdWlyZWQgJiYgIXZhbHVlPy5zaXplKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgZXJyb3IgPSB2YWxpZGF0aW9ucy52YWxpZGF0ZU1pbk1heChcbiAgICAgIHQsXG4gICAgICBmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpLFxuICAgICAgdmFsdWUsXG4gICAgICBtaW4sXG4gICAgICBtYXgsXG4gICAgKTtcblxuICAgIHJldHVybiBlcnJvciA/IFtlcnJvcl0gOiBbXTtcbiAgfTtcblxuICAvKipcbiAgICogSW4gY2FzZSB0aGUgYG9uQ2hhbmdlT2JqZWN0YCBmdW5jdGlvbiBpcyBmcm96ZW4gYnkgYSBjaGlsZCB3aWRnZXQgaW1wbGVtZW50YXRpb24sXG4gICAqIGUuZy4gd2hlbiBkZWJvdW5jZWQsIGFsd2F5cyBnZXQgdGhlIGxhdGVzdCBvYmplY3QgdmFsdWUgaW5zdGVhZCBvZiB1c2luZ1xuICAgKiBgdGhpcy5wcm9wcy52YWx1ZWAgZGlyZWN0bHkuXG4gICAqL1xuICBnZXRPYmplY3RWYWx1ZSA9IGlkeCA9PiB0aGlzLnByb3BzLnZhbHVlLmdldChpZHgpIHx8IE1hcCgpO1xuXG4gIGhhbmRsZUNoYW5nZUZvcihpbmRleCkge1xuICAgIHJldHVybiAoZiwgbmV3VmFsdWUsIG5ld01ldGFkYXRhKSA9PiB7XG4gICAgICBjb25zdCB7IHZhbHVlLCBtZXRhZGF0YSwgb25DaGFuZ2UsIGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBmaWVsZC5nZXQoJ25hbWUnKTtcbiAgICAgIGNvbnN0IGxpc3RGaWVsZE9iamVjdFdpZGdldCA9IGZpZWxkLmdldEluKFsnZmllbGQnLCAnd2lkZ2V0J10pID09PSAnb2JqZWN0JztcbiAgICAgIGNvbnN0IHdpdGhOYW1lS2V5ID1cbiAgICAgICAgdGhpcy5nZXRWYWx1ZVR5cGUoKSAhPT0gdmFsdWVUeXBlcy5TSU5HTEUgfHxcbiAgICAgICAgKHRoaXMuZ2V0VmFsdWVUeXBlKCkgPT09IHZhbHVlVHlwZXMuU0lOR0xFICYmIGxpc3RGaWVsZE9iamVjdFdpZGdldCk7XG4gICAgICBjb25zdCBuZXdPYmplY3RWYWx1ZSA9IHdpdGhOYW1lS2V5XG4gICAgICAgID8gdGhpcy5nZXRPYmplY3RWYWx1ZShpbmRleCkuc2V0KGYuZ2V0KCduYW1lJyksIG5ld1ZhbHVlKVxuICAgICAgICA6IG5ld1ZhbHVlO1xuICAgICAgY29uc3QgcGFyc2VkTWV0YWRhdGEgPSB7XG4gICAgICAgIFtjb2xsZWN0aW9uTmFtZV06IE9iamVjdC5hc3NpZ24obWV0YWRhdGEgPyBtZXRhZGF0YS50b0pTKCkgOiB7fSwgbmV3TWV0YWRhdGEgfHwge30pLFxuICAgICAgfTtcbiAgICAgIG9uQ2hhbmdlKHZhbHVlLnNldChpbmRleCwgbmV3T2JqZWN0VmFsdWUpLCBwYXJzZWRNZXRhZGF0YSk7XG4gICAgfTtcbiAgfVxuXG4gIGhhbmRsZVJlbW92ZSA9IChpbmRleCwgZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3Qge1xuICAgICAgdmFsdWUsXG4gICAgICBtZXRhZGF0YSxcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgZmllbGQsXG4gICAgICBjbGVhckZpZWxkRXJyb3JzLFxuICAgICAgb25WYWxpZGF0ZU9iamVjdCxcbiAgICAgIGZvcklELFxuICAgICAgZmllbGRzRXJyb3JzLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBmaWVsZC5nZXQoJ25hbWUnKTtcbiAgICBjb25zdCBpc1NpbmdsZUZpZWxkID0gdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5TSU5HTEU7XG5cbiAgICBjb25zdCBtZXRhZGF0YVJlbW92ZVBhdGggPSBpc1NpbmdsZUZpZWxkID8gdmFsdWUuZ2V0KGluZGV4KSA6IHZhbHVlLmdldChpbmRleCkudmFsdWVTZXEoKTtcbiAgICBjb25zdCBwYXJzZWRNZXRhZGF0YSA9XG4gICAgICBtZXRhZGF0YSAmJiAhbWV0YWRhdGEuaXNFbXB0eSgpXG4gICAgICAgID8geyBbY29sbGVjdGlvbk5hbWVdOiBtZXRhZGF0YS5yZW1vdmVJbihtZXRhZGF0YVJlbW92ZVBhdGgpIH1cbiAgICAgICAgOiBtZXRhZGF0YTtcblxuICAgIC8vIEdldCB0aGUga2V5IG9mIHRoZSBpdGVtIGJlaW5nIHJlbW92ZWRcbiAgICBjb25zdCByZW1vdmVkS2V5ID0gdGhpcy5zdGF0ZS5rZXlzW2luZGV4XTtcblxuICAgIC8vIFVwZGF0ZSBzdGF0ZSB3aGlsZSBwcmVzZXJ2aW5nIGtleXMgZm9yIHJlbWFpbmluZyBpdGVtc1xuICAgIGNvbnN0IG5ld0tleXMgPSBbLi4udGhpcy5zdGF0ZS5rZXlzXTtcbiAgICBuZXdLZXlzLnNwbGljZShpbmRleCwgMSk7XG4gICAgaXRlbXNDb2xsYXBzZWQuc3BsaWNlKGluZGV4LCAxKTtcblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXNDb2xsYXBzZWQ6IFsuLi5pdGVtc0NvbGxhcHNlZF0sXG4gICAgICBrZXlzOiBuZXdLZXlzLFxuICAgIH0pO1xuXG4gICAgLy8gQ2xlYXIgdGhlIHJlZiBmb3IgdGhlIHJlbW92ZWQgaXRlbVxuICAgIGRlbGV0ZSB0aGlzLmNoaWxkUmVmc1tyZW1vdmVkS2V5XTtcblxuICAgIGNvbnN0IG5ld1ZhbHVlID0gdmFsdWUuZGVsZXRlKGluZGV4KTtcblxuICAgIC8vIENsZWFyIGVycm9ycyBmb3IgdGhlIHJlbW92ZWQgaXRlbSBhbmQgaXRzIGNoaWxkcmVuXG4gICAgaWYgKGZpZWxkc0Vycm9ycykge1xuICAgICAgT2JqZWN0LmVudHJpZXMoZmllbGRzRXJyb3JzLnRvSlMoKSkuZm9yRWFjaCgoW2ZpZWxkSWQsIGVycm9yc10pID0+IHtcbiAgICAgICAgaWYgKGVycm9ycy5zb21lKGVyciA9PiBlcnIucGFyZW50SWRzPy5pbmNsdWRlcyhyZW1vdmVkS2V5KSkpIHtcbiAgICAgICAgICBjbGVhckZpZWxkRXJyb3JzKGZpZWxkSWQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBJZiBsaXN0IGlzIGVtcHR5LCBtYXJrIGl0IGFzIHZhbGlkXG4gICAgaWYgKG5ld1ZhbHVlLnNpemUgPT09IDApIHtcbiAgICAgIGNsZWFyRmllbGRFcnJvcnMoZm9ySUQpO1xuICAgICAgb25WYWxpZGF0ZU9iamVjdChmb3JJRCwgW10pO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSB0aGUgdmFsdWUgbGFzdCB0byBlbnN1cmUgYWxsIGVycm9yIHN0YXRlcyBhcmUgY2xlYXJlZFxuICAgIG9uQ2hhbmdlKG5ld1ZhbHVlLCBwYXJzZWRNZXRhZGF0YSk7XG4gIH07XG5cbiAgaGFuZGxlSXRlbUNvbGxhcHNlVG9nZ2xlID0gKGluZGV4LCBldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBuZXdJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLm1hcCgoY29sbGFwc2VkLCBpdGVtSW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCA9PT0gaXRlbUluZGV4KSB7XG4gICAgICAgIHJldHVybiAhY29sbGFwc2VkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbGxhcHNlZDtcbiAgICB9KTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGl0ZW1zQ29sbGFwc2VkOiBuZXdJdGVtc0NvbGxhcHNlZCxcbiAgICB9KTtcbiAgfTtcblxuICBoYW5kbGVDb2xsYXBzZUFsbFRvZ2dsZSA9IGUgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IHZhbHVlLCBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkLCBsaXN0Q29sbGFwc2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IG1pbmltaXplQ29sbGFwc2VkSXRlbXMgPSBmaWVsZC5nZXQoJ21pbmltaXplX2NvbGxhcHNlZCcsIGZhbHNlKTtcbiAgICBjb25zdCBsaXN0Q29sbGFwc2VkQnlEZWZhdWx0ID0gZmllbGQuZ2V0KCdjb2xsYXBzZWQnLCB0cnVlKTtcbiAgICBjb25zdCBhbGxJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLmV2ZXJ5KHZhbCA9PiB2YWwgPT09IHRydWUpO1xuXG4gICAgaWYgKG1pbmltaXplQ29sbGFwc2VkSXRlbXMpIHtcbiAgICAgIGxldCB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZDtcbiAgICAgIC8vIE9ubHkgYWxsb3cgY29sbGFwc2luZyBhbGwgaXRlbXMgaW4gdGhpcyBtb2RlIGJ1dCBub3Qgb3BlbmluZyBhbGwgYXQgb25jZVxuICAgICAgaWYgKCFsaXN0Q29sbGFwc2VkIHx8ICFsaXN0Q29sbGFwc2VkQnlEZWZhdWx0KSB7XG4gICAgICAgIHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCA9IEFycmF5KHZhbHVlLnNpemUpLmZpbGwoIWxpc3RDb2xsYXBzZWQpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGxpc3RDb2xsYXBzZWQ6ICFsaXN0Q29sbGFwc2VkLCBpdGVtc0NvbGxhcHNlZDogdXBkYXRlZEl0ZW1zQ29sbGFwc2VkIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgaXRlbXNDb2xsYXBzZWQ6IEFycmF5KHZhbHVlLnNpemUpLmZpbGwoIWFsbEl0ZW1zQ29sbGFwc2VkKSB9KTtcbiAgICB9XG4gIH07XG5cbiAgb2JqZWN0TGFiZWwoaXRlbSkge1xuICAgIGNvbnN0IHsgZmllbGQsIGVudHJ5IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHZhbHVlVHlwZSA9IHRoaXMuZ2V0VmFsdWVUeXBlKCk7XG4gICAgc3dpdGNoICh2YWx1ZVR5cGUpIHtcbiAgICAgIGNhc2UgdmFsdWVUeXBlcy5NSVhFRDoge1xuICAgICAgICBpZiAoIXZhbGlkYXRlSXRlbShmaWVsZCwgaXRlbSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXRlbVR5cGUgPSBnZXRUeXBlZEZpZWxkRm9yVmFsdWUoZmllbGQsIGl0ZW0pO1xuICAgICAgICBjb25zdCBsYWJlbCA9IGl0ZW1UeXBlLmdldCgnbGFiZWwnLCBpdGVtVHlwZS5nZXQoJ25hbWUnKSk7XG4gICAgICAgIC8vIGVhY2ggdHlwZSBjYW4gaGF2ZSBpdHMgb3duIHN1bW1hcnksIGJ1dCBkZWZhdWx0IHRvIHRoZSBsaXN0IHN1bW1hcnkgaWYgZXhpc3RzXG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBpdGVtVHlwZS5nZXQoJ3N1bW1hcnknLCBmaWVsZC5nZXQoJ3N1bW1hcnknKSk7XG4gICAgICAgIGNvbnN0IGxhYmVsUmV0dXJuID0gc3VtbWFyeSA/IGhhbmRsZVN1bW1hcnkoc3VtbWFyeSwgZW50cnksIGxhYmVsLCBpdGVtKSA6IGxhYmVsO1xuICAgICAgICByZXR1cm4gbGFiZWxSZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlIHZhbHVlVHlwZXMuU0lOR0xFOiB7XG4gICAgICAgIGNvbnN0IHNpbmdsZUZpZWxkID0gZmllbGQuZ2V0KCdmaWVsZCcpO1xuICAgICAgICBjb25zdCBsYWJlbCA9IHNpbmdsZUZpZWxkLmdldCgnbGFiZWwnLCBzaW5nbGVGaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBmaWVsZC5nZXQoJ3N1bW1hcnknKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGZyb21KUyh7IFtzaW5nbGVGaWVsZC5nZXQoJ25hbWUnKV06IGl0ZW0gfSk7XG4gICAgICAgIGNvbnN0IGxhYmVsUmV0dXJuID0gc3VtbWFyeSA/IGhhbmRsZVN1bW1hcnkoc3VtbWFyeSwgZW50cnksIGxhYmVsLCBkYXRhKSA6IGxhYmVsO1xuICAgICAgICByZXR1cm4gbGFiZWxSZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlIHZhbHVlVHlwZXMuTVVMVElQTEU6IHtcbiAgICAgICAgaWYgKCF2YWxpZGF0ZUl0ZW0oZmllbGQsIGl0ZW0pKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG11bHRpRmllbGRzID0gZmllbGQuZ2V0KCdmaWVsZHMnKTtcbiAgICAgICAgY29uc3QgbGFiZWxGaWVsZCA9IG11bHRpRmllbGRzICYmIG11bHRpRmllbGRzLmZpcnN0KCk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gaXRlbS5nZXQobGFiZWxGaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBmaWVsZC5nZXQoJ3N1bW1hcnknKTtcbiAgICAgICAgY29uc3QgbGFiZWxSZXR1cm4gPSBzdW1tYXJ5ID8gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgdmFsdWUsIGl0ZW0pIDogdmFsdWU7XG4gICAgICAgIHJldHVybiAobGFiZWxSZXR1cm4gfHwgYE5vICR7bGFiZWxGaWVsZC5nZXQoJ25hbWUnKX1gKS50b1N0cmluZygpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBvblNvcnRFbmQgPSAoeyBvbGRJbmRleCwgbmV3SW5kZXggfSkgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCwga2V5cyB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIC8vIFVwZGF0ZSB2YWx1ZVxuICAgIGNvbnN0IGl0ZW0gPSB2YWx1ZS5nZXQob2xkSW5kZXgpO1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gdmFsdWUuZGVsZXRlKG9sZEluZGV4KS5pbnNlcnQobmV3SW5kZXgsIGl0ZW0pO1xuICAgIHRoaXMucHJvcHMub25DaGFuZ2UobmV3VmFsdWUpO1xuXG4gICAgLy8gVXBkYXRlIGNvbGxhcHNpbmdcbiAgICBjb25zdCBjb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZFtvbGRJbmRleF07XG4gICAgaXRlbXNDb2xsYXBzZWQuc3BsaWNlKG9sZEluZGV4LCAxKTtcbiAgICBjb25zdCB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgPSBbLi4uaXRlbXNDb2xsYXBzZWRdO1xuICAgIHVwZGF0ZWRJdGVtc0NvbGxhcHNlZC5zcGxpY2UobmV3SW5kZXgsIDAsIGNvbGxhcHNlZCk7XG5cbiAgICAvLyBNb3ZlIGtleXMgdG8gbWFpbnRhaW4gcmVsYXRpb25zaGlwc1xuICAgIGNvbnN0IG1vdmVkS2V5ID0ga2V5c1tvbGRJbmRleF07XG4gICAgY29uc3QgdXBkYXRlZEtleXMgPSBbLi4ua2V5c107XG4gICAgdXBkYXRlZEtleXMuc3BsaWNlKG9sZEluZGV4LCAxKTtcbiAgICB1cGRhdGVkS2V5cy5zcGxpY2UobmV3SW5kZXgsIDAsIG1vdmVkS2V5KTtcblxuICAgIHRoaXMuc2V0U3RhdGUoeyBpdGVtc0NvbGxhcHNlZDogdXBkYXRlZEl0ZW1zQ29sbGFwc2VkLCBrZXlzOiB1cGRhdGVkS2V5cyB9KTtcbiAgfTtcblxuICBoYXNFcnJvciA9IGluZGV4ID0+IHtcbiAgICBjb25zdCB7IGZpZWxkc0Vycm9ycyB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoZmllbGRzRXJyb3JzICYmIGZpZWxkc0Vycm9ycy5zaXplID4gMCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZmllbGRzRXJyb3JzLnRvSlMoKSkuc29tZShhcnIgPT5cbiAgICAgICAgYXJyLnNvbWUoZXJyID0+IGVyci5wYXJlbnRJZHMgJiYgZXJyLnBhcmVudElkcy5pbmNsdWRlcyh0aGlzLnN0YXRlLmtleXNbaW5kZXhdKSksXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICBmb2N1cyhwYXRoKSB7XG4gICAgY29uc3QgW2luZGV4LCAuLi5yZW1haW5pbmdQYXRoXSA9IHBhdGguc3BsaXQoJy4nKTtcblxuICAgIGlmICh0aGlzLnN0YXRlLmxpc3RDb2xsYXBzZWQgfHwgdGhpcy5zdGF0ZS5pdGVtc0NvbGxhcHNlZFtpbmRleF0pIHtcbiAgICAgIGNvbnN0IG5ld0l0ZW1zQ29sbGFwc2VkID0gWy4uLnRoaXMuc3RhdGUuaXRlbXNDb2xsYXBzZWRdO1xuICAgICAgbmV3SXRlbXNDb2xsYXBzZWRbaW5kZXhdID0gZmFsc2U7XG4gICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICB7XG4gICAgICAgICAgbGlzdENvbGxhcHNlZDogZmFsc2UsXG4gICAgICAgICAgaXRlbXNDb2xsYXBzZWQ6IG5ld0l0ZW1zQ29sbGFwc2VkLFxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5zdGF0ZS5rZXlzW2luZGV4XTtcbiAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jaGlsZFJlZnNba2V5XTtcbiAgICAgICAgICBpZiAoY29udHJvbD8uZm9jdXMpIHtcbiAgICAgICAgICAgIGNvbnRyb2wuZm9jdXMocmVtYWluaW5nUGF0aC5qb2luKCcuJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuc3RhdGUua2V5c1tpbmRleF07XG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jaGlsZFJlZnNba2V5XTtcbiAgICAgIGlmIChjb250cm9sPy5mb2N1cykge1xuICAgICAgICBjb250cm9sLmZvY3VzKHJlbWFpbmluZ1BhdGguam9pbignLicpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZGlzcGxheS1uYW1lXG4gIHJlbmRlckl0ZW0gPSAoaXRlbSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjbGFzc05hbWVXcmFwcGVyLFxuICAgICAgZWRpdG9yQ29udHJvbCxcbiAgICAgIG9uVmFsaWRhdGVPYmplY3QsXG4gICAgICBtZXRhZGF0YSxcbiAgICAgIGNsZWFyRmllbGRFcnJvcnMsXG4gICAgICBmaWVsZHNFcnJvcnMsXG4gICAgICBjb250cm9sUmVmLFxuICAgICAgcmVzb2x2ZVdpZGdldCxcbiAgICAgIHBhcmVudElkcyxcbiAgICAgIGZvcklELFxuICAgICAgdCxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQsIGtleXMgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgY29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWRbaW5kZXhdO1xuICAgIGNvbnN0IGtleSA9IGtleXNbaW5kZXhdO1xuICAgIGxldCBmaWVsZCA9IHRoaXMucHJvcHMuZmllbGQ7XG4gICAgY29uc3QgaGFzRXJyb3IgPSB0aGlzLmhhc0Vycm9yKGluZGV4KTtcbiAgICBjb25zdCBpc1ZhcmlhYmxlVHlwZXNMaXN0ID0gdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5NSVhFRDtcbiAgICBpZiAoaXNWYXJpYWJsZVR5cGVzTGlzdCkge1xuICAgICAgZmllbGQgPSBnZXRUeXBlZEZpZWxkRm9yVmFsdWUoZmllbGQsIGl0ZW0pO1xuICAgICAgaWYgKCFmaWVsZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJFcnJvbmVvdXNUeXBlZEl0ZW0oaW5kZXgsIGl0ZW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8U29ydGFibGVMaXN0SXRlbVxuICAgICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBjb2xsYXBzZWQgJiYgc3R5bGVzLmxpc3RDb250cm9sSXRlbUNvbGxhcHNlZF19XG4gICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIGlkPXtrZXl9XG4gICAgICAgIGtleXM9e2tleXN9XG4gICAgICA+XG4gICAgICAgIHtpc1ZhcmlhYmxlVHlwZXNMaXN0ICYmIChcbiAgICAgICAgICA8TGFiZWxDb21wb25lbnRcbiAgICAgICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgICAgIGlzQWN0aXZlPXtmYWxzZX1cbiAgICAgICAgICAgIGhhc0Vycm9ycz17aGFzRXJyb3J9XG4gICAgICAgICAgICB1bmlxdWVGaWVsZElkPXt0aGlzLnVuaXF1ZUZpZWxkSWR9XG4gICAgICAgICAgICBpc0ZpZWxkT3B0aW9uYWw9e2ZpZWxkLmdldCgncmVxdWlyZWQnKSA9PT0gZmFsc2V9XG4gICAgICAgICAgICB0PXt0fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIDxTdHlsZWRMaXN0SXRlbVRvcEJhclxuICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICAgIG9uQ29sbGFwc2VUb2dnbGU9e3BhcnRpYWwodGhpcy5oYW5kbGVJdGVtQ29sbGFwc2VUb2dnbGUsIGluZGV4KX1cbiAgICAgICAgICBkcmFnSGFuZGxlPXtEcmFnSGFuZGxlfVxuICAgICAgICAgIGlkPXtrZXl9XG4gICAgICAgICAgb25SZW1vdmU9e3BhcnRpYWwodGhpcy5oYW5kbGVSZW1vdmUsIGluZGV4KX1cbiAgICAgICAgICBkYXRhLXRlc3RpZD17YHN0eWxlZC1saXN0LWl0ZW0tdG9wLWJhci0ke2tleX1gfVxuICAgICAgICAvPlxuICAgICAgICA8TmVzdGVkT2JqZWN0TGFiZWwgY29sbGFwc2VkPXtjb2xsYXBzZWR9IGVycm9yPXtoYXNFcnJvcn0+XG4gICAgICAgICAge3RoaXMub2JqZWN0TGFiZWwoaXRlbSl9XG4gICAgICAgIDwvTmVzdGVkT2JqZWN0TGFiZWw+XG4gICAgICAgIDxDbGFzc05hbWVzPlxuICAgICAgICAgIHsoeyBjc3MsIGN4IH0pID0+IChcbiAgICAgICAgICAgIDxPYmplY3RDb250cm9sXG4gICAgICAgICAgICAgIGNsYXNzTmFtZVdyYXBwZXI9e2N4KGNsYXNzTmFtZVdyYXBwZXIsIHtcbiAgICAgICAgICAgICAgICBbY3NzYFxuICAgICAgICAgICAgICAgICAgJHtzdHlsZVN0cmluZ3MuY29sbGFwc2VkT2JqZWN0Q29udHJvbH07XG4gICAgICAgICAgICAgICAgYF06IGNvbGxhcHNlZCxcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIHZhbHVlPXtpdGVtfVxuICAgICAgICAgICAgICBmaWVsZD17ZmllbGR9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlT2JqZWN0PXt0aGlzLmhhbmRsZUNoYW5nZUZvcihpbmRleCl9XG4gICAgICAgICAgICAgIGVkaXRvckNvbnRyb2w9e2VkaXRvckNvbnRyb2x9XG4gICAgICAgICAgICAgIHJlc29sdmVXaWRnZXQ9e3Jlc29sdmVXaWRnZXR9XG4gICAgICAgICAgICAgIG1ldGFkYXRhPXttZXRhZGF0YX1cbiAgICAgICAgICAgICAgZm9yTGlzdFxuICAgICAgICAgICAgICBvblZhbGlkYXRlT2JqZWN0PXtvblZhbGlkYXRlT2JqZWN0fVxuICAgICAgICAgICAgICBjbGVhckZpZWxkRXJyb3JzPXtjbGVhckZpZWxkRXJyb3JzfVxuICAgICAgICAgICAgICBmaWVsZHNFcnJvcnM9e2ZpZWxkc0Vycm9yc31cbiAgICAgICAgICAgICAgcmVmPXt0aGlzLnByb2Nlc3NDb250cm9sUmVmfVxuICAgICAgICAgICAgICBjb250cm9sUmVmPXtjb250cm9sUmVmfVxuICAgICAgICAgICAgICB2YWxpZGF0aW9uS2V5PXtrZXl9XG4gICAgICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICAgICAgICBkYXRhLXRlc3RpZD17YG9iamVjdC1jb250cm9sLSR7a2V5fWB9XG4gICAgICAgICAgICAgIGhhc0Vycm9yPXtoYXNFcnJvcn1cbiAgICAgICAgICAgICAgcGFyZW50SWRzPXtbLi4ucGFyZW50SWRzLCBmb3JJRCwga2V5XX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9DbGFzc05hbWVzPlxuICAgICAgPC9Tb3J0YWJsZUxpc3RJdGVtPlxuICAgICk7XG4gIH07XG5cbiAgcmVuZGVyRXJyb25lb3VzVHlwZWRJdGVtKGluZGV4LCBpdGVtKSB7XG4gICAgY29uc3QgZmllbGQgPSB0aGlzLnByb3BzLmZpZWxkO1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZUZvclR5cGVkRmllbGRBbmRWYWx1ZShmaWVsZCwgaXRlbSk7XG4gICAgY29uc3Qga2V5ID0gYGl0ZW0tJHtpbmRleH1gO1xuICAgIHJldHVybiAoXG4gICAgICA8U29ydGFibGVMaXN0SXRlbVxuICAgICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBzdHlsZXMubGlzdENvbnRyb2xJdGVtQ29sbGFwc2VkXX1cbiAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICBrZXk9e2tleX1cbiAgICAgID5cbiAgICAgICAgPFN0eWxlZExpc3RJdGVtVG9wQmFyXG4gICAgICAgICAgb25Db2xsYXBzZVRvZ2dsZT17bnVsbH1cbiAgICAgICAgICBvblJlbW92ZT17cGFydGlhbCh0aGlzLmhhbmRsZVJlbW92ZSwgaW5kZXgsIGtleSl9XG4gICAgICAgICAgZHJhZ0hhbmRsZT17RHJhZ0hhbmRsZX1cbiAgICAgICAgICBpZD17a2V5fVxuICAgICAgICAvPlxuICAgICAgICA8TmVzdGVkT2JqZWN0TGFiZWwgY29sbGFwc2VkPXt0cnVlfSBlcnJvcj17dHJ1ZX0+XG4gICAgICAgICAge2Vycm9yTWVzc2FnZX1cbiAgICAgICAgPC9OZXN0ZWRPYmplY3RMYWJlbD5cbiAgICAgIDwvU29ydGFibGVMaXN0SXRlbT5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyTGlzdENvbnRyb2woKSB7XG4gICAgY29uc3QgeyB2YWx1ZSwgZm9ySUQsIGZpZWxkLCBjbGFzc05hbWVXcmFwcGVyLCB0IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQsIGxpc3RDb2xsYXBzZWQsIGtleXMgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgaXRlbXMgPSB2YWx1ZSB8fCBMaXN0KCk7XG4gICAgY29uc3QgbGFiZWwgPSBmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpO1xuICAgIGNvbnN0IGxhYmVsU2luZ3VsYXIgPSBmaWVsZC5nZXQoJ2xhYmVsX3Npbmd1bGFyJykgfHwgZmllbGQuZ2V0KCdsYWJlbCcsIGZpZWxkLmdldCgnbmFtZScpKTtcbiAgICBjb25zdCBsaXN0TGFiZWwgPSBpdGVtcy5zaXplID09PSAxID8gbGFiZWxTaW5ndWxhci50b0xvd2VyQ2FzZSgpIDogbGFiZWwudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBtaW5pbWl6ZUNvbGxhcHNlZEl0ZW1zID0gZmllbGQuZ2V0KCdtaW5pbWl6ZV9jb2xsYXBzZWQnLCBmYWxzZSk7XG4gICAgY29uc3QgYWxsSXRlbXNDb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZC5ldmVyeSh2YWwgPT4gdmFsID09PSB0cnVlKTtcbiAgICBjb25zdCBzZWxmQ29sbGFwc2VkID0gYWxsSXRlbXNDb2xsYXBzZWQgJiYgKGxpc3RDb2xsYXBzZWQgfHwgIW1pbmltaXplQ29sbGFwc2VkSXRlbXMpO1xuXG4gICAgY29uc3QgaXRlbXNBcnJheSA9IGtleXMubWFwKGtleSA9PiAoeyBpZDoga2V5IH0pKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8Q2xhc3NOYW1lcz5cbiAgICAgICAgeyh7IGN4LCBjc3MgfSkgPT4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGlkPXtmb3JJRH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goXG4gICAgICAgICAgICAgIGNsYXNzTmFtZVdyYXBwZXIsXG4gICAgICAgICAgICAgIGNzc2BcbiAgICAgICAgICAgICAgICAke3N0eWxlU3RyaW5ncy5vYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXJ9XG4gICAgICAgICAgICAgIGAsXG4gICAgICAgICAgICApfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxPYmplY3RXaWRnZXRUb3BCYXJcbiAgICAgICAgICAgICAgYWxsb3dBZGQ9e2ZpZWxkLmdldCgnYWxsb3dfYWRkJywgdHJ1ZSl9XG4gICAgICAgICAgICAgIG9uQWRkPXt0aGlzLmhhbmRsZUFkZH1cbiAgICAgICAgICAgICAgdHlwZXM9e2ZpZWxkLmdldChUWVBFU19LRVksIG51bGwpfVxuICAgICAgICAgICAgICBvbkFkZFR5cGU9e3R5cGUgPT4gdGhpcy5oYW5kbGVBZGRUeXBlKHR5cGUsIHJlc29sdmVGaWVsZEtleVR5cGUoZmllbGQpKX1cbiAgICAgICAgICAgICAgaGVhZGluZz17YCR7aXRlbXMuc2l6ZX0gJHtsaXN0TGFiZWx9YH1cbiAgICAgICAgICAgICAgbGFiZWw9e2xhYmVsU2luZ3VsYXIudG9Mb3dlckNhc2UoKX1cbiAgICAgICAgICAgICAgb25Db2xsYXBzZVRvZ2dsZT17dGhpcy5oYW5kbGVDb2xsYXBzZUFsbFRvZ2dsZX1cbiAgICAgICAgICAgICAgY29sbGFwc2VkPXtzZWxmQ29sbGFwc2VkfVxuICAgICAgICAgICAgICB0PXt0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHsoIXNlbGZDb2xsYXBzZWQgfHwgIW1pbmltaXplQ29sbGFwc2VkSXRlbXMpICYmIChcbiAgICAgICAgICAgICAgPFNvcnRhYmxlTGlzdCBpdGVtcz17aXRlbXNBcnJheX0ga2V5cz17a2V5c30gb25Tb3J0RW5kPXt0aGlzLm9uU29ydEVuZH0+XG4gICAgICAgICAgICAgICAge2l0ZW1zLm1hcCh0aGlzLnJlbmRlckl0ZW0pfVxuICAgICAgICAgICAgICA8L1NvcnRhYmxlTGlzdD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L0NsYXNzTmFtZXM+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlcklucHV0KCkge1xuICAgIGNvbnN0IHsgZm9ySUQsIGNsYXNzTmFtZVdyYXBwZXIgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIHJldHVybiAoXG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBpZD17Zm9ySUR9XG4gICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICBvbkZvY3VzPXt0aGlzLmhhbmRsZUZvY3VzfVxuICAgICAgICBvbkJsdXI9e3RoaXMuaGFuZGxlQmx1cn1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVXcmFwcGVyfVxuICAgICAgLz5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmdldFZhbHVlVHlwZSgpICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJMaXN0Q29udHJvbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJJbnB1dCgpO1xuICAgIH1cbiAgfVxufVxuIl19 */");
|
|
26
|
+
})(process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF3Q2lCIiwiZmlsZSI6Ii4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IEltbXV0YWJsZVByb3BUeXBlcyBmcm9tICdyZWFjdC1pbW11dGFibGUtcHJvcHR5cGVzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCB7IGNzcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IExpc3QsIE1hcCwgZnJvbUpTIH0gZnJvbSAnaW1tdXRhYmxlJztcbmltcG9ydCBwYXJ0aWFsIGZyb20gJ2xvZGFzaC9wYXJ0aWFsJztcbmltcG9ydCBpc0VtcHR5IGZyb20gJ2xvZGFzaC9pc0VtcHR5JztcbmltcG9ydCB1bmlxdWVJZCBmcm9tICdsb2Rhc2gvdW5pcXVlSWQnO1xuaW1wb3J0IHsgdjQgYXMgdXVpZCB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IERlY2FwQ21zV2lkZ2V0T2JqZWN0IGZyb20gJ2RlY2FwLWNtcy13aWRnZXQtb2JqZWN0JztcbmltcG9ydCB7XG4gIERuZENvbnRleHQsXG4gIE1vdXNlU2Vuc29yLFxuICBUb3VjaFNlbnNvcixcbiAgY2xvc2VzdENlbnRlcixcbiAgdXNlU2Vuc29yLFxuICB1c2VTZW5zb3JzLFxufSBmcm9tICdAZG5kLWtpdC9jb3JlJztcbmltcG9ydCB7IFNvcnRhYmxlQ29udGV4dCwgdXNlU29ydGFibGUgfSBmcm9tICdAZG5kLWtpdC9zb3J0YWJsZSc7XG5pbXBvcnQgeyByZXN0cmljdFRvUGFyZW50RWxlbWVudCB9IGZyb20gJ0BkbmQta2l0L21vZGlmaWVycyc7XG5pbXBvcnQgeyBDU1MgfSBmcm9tICdAZG5kLWtpdC91dGlsaXRpZXMnO1xuaW1wb3J0IHtcbiAgTGlzdEl0ZW1Ub3BCYXIsXG4gIE9iamVjdFdpZGdldFRvcEJhcixcbiAgY29sb3JzLFxuICBsZW5ndGhzLFxuICBGaWVsZExhYmVsLFxufSBmcm9tICdkZWNhcC1jbXMtdWktZGVmYXVsdCc7XG5pbXBvcnQgeyBzdHJpbmdUZW1wbGF0ZSwgdmFsaWRhdGlvbnMgfSBmcm9tICdkZWNhcC1jbXMtbGliLXdpZGdldHMnO1xuXG5pbXBvcnQge1xuICBUWVBFU19LRVksXG4gIGdldFR5cGVkRmllbGRGb3JWYWx1ZSxcbiAgcmVzb2x2ZUZpZWxkS2V5VHlwZSxcbiAgZ2V0RXJyb3JNZXNzYWdlRm9yVHlwZWRGaWVsZEFuZFZhbHVlLFxufSBmcm9tICcuL3R5cGVkTGlzdEhlbHBlcnMnO1xuXG5jb25zdCBPYmplY3RDb250cm9sID0gRGVjYXBDbXNXaWRnZXRPYmplY3QuY29udHJvbENvbXBvbmVudDtcblxuY29uc3QgTGlzdEl0ZW0gPSBzdHlsZWQuZGl2KCk7XG5cbmNvbnN0IFN0eWxlZExpc3RJdGVtVG9wQmFyID0gc3R5bGVkKExpc3RJdGVtVG9wQmFyKWBcbiAgYmFja2dyb3VuZC1jb2xvcjogJHtjb2xvcnMudGV4dEZpZWxkQm9yZGVyfTtcbmA7XG5cbmNvbnN0IE5lc3RlZE9iamVjdExhYmVsID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogJHtwcm9wcyA9PiAocHJvcHMuY29sbGFwc2VkID8gJ2Jsb2NrJyA6ICdub25lJyl9O1xuICBib3JkZXItdG9wOiAwO1xuICBjb2xvcjogJHtwcm9wcyA9PiAocHJvcHMuZXJyb3IgPyBjb2xvcnMuZXJyb3JUZXh0IDogJ2luaGVyaXQnKX07XG4gIGJhY2tncm91bmQtY29sb3I6ICR7Y29sb3JzLnRleHRGaWVsZEJvcmRlcn07XG4gIHBhZGRpbmc6IDEzcHg7XG4gIGJvcmRlci1yYWRpdXM6IDAgMCAke2xlbmd0aHMuYm9yZGVyUmFkaXVzfSAke2xlbmd0aHMuYm9yZGVyUmFkaXVzfTtcbmA7XG5cbmNvbnN0IHN0eWxlU3RyaW5ncyA9IHtcbiAgY29sbGFwc2VkT2JqZWN0Q29udHJvbDogYFxuICAgIGRpc3BsYXk6IG5vbmU7XG4gIGAsXG4gIG9iamVjdFdpZGdldFRvcEJhckNvbnRhaW5lcjogYFxuICAgIHBhZGRpbmc6ICR7bGVuZ3Rocy5vYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXJQYWRkaW5nfTtcbiAgYCxcbn07XG5cbmNvbnN0IHN0eWxlcyA9IHtcbiAgbGlzdENvbnRyb2xJdGVtOiBjc3NgXG4gICAgbWFyZ2luLXRvcDogMThweDtcblxuICAgICY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgICBtYXJnaW4tdG9wOiAyNnB4O1xuICAgIH1cbiAgYCxcbiAgbGlzdENvbnRyb2xJdGVtQ29sbGFwc2VkOiBjc3NgXG4gICAgcGFkZGluZy1ib3R0b206IDA7XG4gIGAsXG59O1xuXG5mdW5jdGlvbiBTb3J0YWJsZUxpc3QoeyBpdGVtcywgY2hpbGRyZW4sIG9uU29ydEVuZCwga2V5cyB9KSB7XG4gIGNvbnN0IGFjdGl2YXRpb25Db25zdHJhaW50ID0geyBkaXN0YW5jZTogNCB9O1xuICBjb25zdCBzZW5zb3JzID0gdXNlU2Vuc29ycyhcbiAgICB1c2VTZW5zb3IoTW91c2VTZW5zb3IsIHsgYWN0aXZhdGlvbkNvbnN0cmFpbnQgfSksXG4gICAgdXNlU2Vuc29yKFRvdWNoU2Vuc29yLCB7IGFjdGl2YXRpb25Db25zdHJhaW50IH0pLFxuICApO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZVNvcnRFbmQoeyBhY3RpdmUsIG92ZXIgfSkge1xuICAgIG9uU29ydEVuZCh7XG4gICAgICBvbGRJbmRleDoga2V5cy5pbmRleE9mKGFjdGl2ZS5pZCksXG4gICAgICBuZXdJbmRleDoga2V5cy5pbmRleE9mKG92ZXIuaWQpLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2PlxuICAgICAgPERuZENvbnRleHRcbiAgICAgICAgbW9kaWZpZXJzPXtbcmVzdHJpY3RUb1BhcmVudEVsZW1lbnRdfVxuICAgICAgICBjb2xsaXNpb25EZXRlY3Rpb249e2Nsb3Nlc3RDZW50ZXJ9XG4gICAgICAgIHNlbnNvcnM9e3NlbnNvcnN9XG4gICAgICAgIG9uRHJhZ0VuZD17aGFuZGxlU29ydEVuZH1cbiAgICAgID5cbiAgICAgICAgPFNvcnRhYmxlQ29udGV4dCBpdGVtcz17aXRlbXN9PntjaGlsZHJlbn08L1NvcnRhYmxlQ29udGV4dD5cbiAgICAgIDwvRG5kQ29udGV4dD5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gU29ydGFibGVMaXN0SXRlbShwcm9wcykge1xuICBjb25zdCB7IHNldE5vZGVSZWYsIHRyYW5zZm9ybSwgdHJhbnNpdGlvbiB9ID0gdXNlU29ydGFibGUoe1xuICAgIGlkOiBwcm9wcy5pZCxcbiAgfSk7XG5cbiAgY29uc3Qgc3R5bGUgPSB7XG4gICAgdHJhbnNmb3JtOiBDU1MuVHJhbnNmb3JtLnRvU3RyaW5nKHRyYW5zZm9ybSksXG4gICAgdHJhbnNpdGlvbixcbiAgfTtcblxuICBjb25zdCB7IGNvbGxhcHNlZCB9ID0gcHJvcHM7XG5cbiAgcmV0dXJuIChcbiAgICA8TGlzdEl0ZW1cbiAgICAgIHNvcnRhYmxlXG4gICAgICByZWY9e3NldE5vZGVSZWZ9XG4gICAgICBzdHlsZT17c3R5bGV9XG4gICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBjb2xsYXBzZWQgJiYgc3R5bGVzLmxpc3RDb250cm9sSXRlbUNvbGxhcHNlZF19XG4gICAgPlxuICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgIDwvTGlzdEl0ZW0+XG4gICk7XG59XG5cbmZ1bmN0aW9uIERyYWdIYW5kbGUoeyBjaGlsZHJlbiwgaWQgfSkge1xuICBjb25zdCB7IGF0dHJpYnV0ZXMsIGxpc3RlbmVycyB9ID0gdXNlU29ydGFibGUoe1xuICAgIGlkLFxuICB9KTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgey4uLmF0dHJpYnV0ZXN9IHsuLi5saXN0ZW5lcnN9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5jb25zdCB2YWx1ZVR5cGVzID0ge1xuICBTSU5HTEU6ICdTSU5HTEUnLFxuICBNVUxUSVBMRTogJ01VTFRJUExFJyxcbiAgTUlYRUQ6ICdNSVhFRCcsXG59O1xuXG5mdW5jdGlvbiBoYW5kbGVTdW1tYXJ5KHN1bW1hcnksIGVudHJ5LCBsYWJlbCwgaXRlbSkge1xuICBjb25zdCBkYXRhID0gc3RyaW5nVGVtcGxhdGUuYWRkRmlsZVRlbXBsYXRlRmllbGRzKFxuICAgIGVudHJ5LmdldCgncGF0aCcpLFxuICAgIGl0ZW0uc2V0KCdmaWVsZHMubGFiZWwnLCBsYWJlbCksXG4gICk7XG4gIHJldHVybiBzdHJpbmdUZW1wbGF0ZS5jb21waWxlU3RyaW5nVGVtcGxhdGUoc3VtbWFyeSwgbnVsbCwgJycsIGRhdGEpO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUl0ZW0oZmllbGQsIGl0ZW0pIHtcbiAgaWYgKCFNYXAuaXNNYXAoaXRlbSkpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgJyR7ZmllbGQuZ2V0KCduYW1lJyl9JyBmaWVsZCBpdGVtIHZhbHVlIHZhbHVlIHNob3VsZCBiZSBhIG1hcCBidXQgaXMgYSAnJHt0eXBlb2YgaXRlbX0nYCxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gTGFiZWxDb21wb25lbnQoeyBmaWVsZCwgaXNBY3RpdmUsIGhhc0Vycm9ycywgdW5pcXVlRmllbGRJZCwgaXNGaWVsZE9wdGlvbmFsLCB0IH0pIHtcbiAgY29uc3QgbGFiZWwgPSBgJHtmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpfWA7XG4gIHJldHVybiAoXG4gICAgPEZpZWxkTGFiZWwgaXNBY3RpdmU9e2lzQWN0aXZlfSBoYXNFcnJvcnM9e2hhc0Vycm9yc30gaHRtbEZvcj17dW5pcXVlRmllbGRJZH0+XG4gICAgICB7bGFiZWx9IHtgJHtpc0ZpZWxkT3B0aW9uYWwgPyBgICgke3QoJ2VkaXRvci5lZGl0b3JDb250cm9sLmZpZWxkLm9wdGlvbmFsJyl9KWAgOiAnJ31gfVxuICAgIDwvRmllbGRMYWJlbD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlzdENvbnRyb2wgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjaGlsZFJlZnMgPSB7fTtcblxuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIG1ldGFkYXRhOiBJbW11dGFibGVQcm9wVHlwZXMubWFwLFxuICAgIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uQ2hhbmdlT2JqZWN0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uVmFsaWRhdGVPYmplY3Q6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdmFsaWRhdGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdmFsdWU6IEltbXV0YWJsZVByb3BUeXBlcy5saXN0LFxuICAgIGZpZWxkOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGZvcklEOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNvbnRyb2xSZWY6IFByb3BUeXBlcy5mdW5jLFxuICAgIG1lZGlhUGF0aHM6IEltbXV0YWJsZVByb3BUeXBlcy5tYXAuaXNSZXF1aXJlZCxcbiAgICBnZXRBc3NldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvbk9wZW5NZWRpYUxpYnJhcnk6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25BZGRBc3NldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvblJlbW92ZUluc2VydGVkTWVkaWE6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgY2xhc3NOYW1lV3JhcHBlcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHNldEFjdGl2ZVN0eWxlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHNldEluYWN0aXZlU3R5bGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgZWRpdG9yQ29udHJvbDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWQsXG4gICAgcmVzb2x2ZVdpZGdldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBjbGVhckZpZWxkRXJyb3JzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGZpZWxkc0Vycm9yczogSW1tdXRhYmxlUHJvcFR5cGVzLm1hcC5pc1JlcXVpcmVkLFxuICAgIGVudHJ5OiBJbW11dGFibGVQcm9wVHlwZXMubWFwLmlzUmVxdWlyZWQsXG4gICAgdDogUHJvcFR5cGVzLmZ1bmMsXG4gIH07XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICB2YWx1ZTogTGlzdCgpLFxuICAgIHBhcmVudElkczogW10sXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgY29uc3QgeyBmaWVsZCwgdmFsdWUgfSA9IHByb3BzO1xuICAgIGNvbnN0IGxpc3RDb2xsYXBzZWQgPSBmaWVsZC5nZXQoJ2NvbGxhcHNlZCcsIHRydWUpO1xuICAgIGNvbnN0IGl0ZW1zQ29sbGFwc2VkID0gKHZhbHVlICYmIEFycmF5KHZhbHVlLnNpemUpLmZpbGwobGlzdENvbGxhcHNlZCkpIHx8IFtdO1xuICAgIGNvbnN0IGtleXMgPSAodmFsdWUgJiYgQXJyYXkuZnJvbSh7IGxlbmd0aDogdmFsdWUuc2l6ZSB9LCAoKSA9PiB1dWlkKCkpKSB8fCBbXTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBsaXN0Q29sbGFwc2VkLFxuICAgICAgaXRlbXNDb2xsYXBzZWQsXG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZVRvU3RyaW5nKHZhbHVlKSxcbiAgICAgIGtleXMsXG4gICAgfTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIC8vIE1hbnVhbGx5IHZhbGlkYXRlIFByb3BUeXBlcyAtIFJlYWN0IDE5IGJyZWFraW5nIGNoYW5nZVxuICAgIFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcyhMaXN0Q29udHJvbC5wcm9wVHlwZXMsIHRoaXMucHJvcHMsICdwcm9wJywgJ0xpc3RDb250cm9sJyk7XG4gIH1cblxuICB2YWx1ZVRvU3RyaW5nID0gdmFsdWUgPT4ge1xuICAgIGxldCBzdHJpbmdWYWx1ZTtcbiAgICBpZiAoTGlzdC5pc0xpc3QodmFsdWUpIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBzdHJpbmdWYWx1ZSA9IHZhbHVlLmpvaW4oJywnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgRXhwZWN0ZWQgTGlzdCB2YWx1ZSB0byBiZSBhbiBhcnJheSBidXQgcmVjZWl2ZWQgJyR7dmFsdWV9JyB3aXRoIHR5cGUgb2YgJyR7dHlwZW9mIHZhbHVlfScuIFBsZWFzZSBjaGVjayB0aGUgdmFsdWUgcHJvdmlkZWQgdG8gdGhlICcke3RoaXMucHJvcHMuZmllbGQuZ2V0KFxuICAgICAgICAgICduYW1lJyxcbiAgICAgICAgKX0nIGZpZWxkYCxcbiAgICAgICk7XG4gICAgICBzdHJpbmdWYWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBzdHJpbmdWYWx1ZS5yZXBsYWNlKC8sKFteXFxzXXwkKS9nLCAnLCAkMScpO1xuICB9O1xuXG4gIGdldFZhbHVlVHlwZSA9ICgpID0+IHtcbiAgICBjb25zdCB7IGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChmaWVsZC5nZXQoJ2ZpZWxkcycpKSB7XG4gICAgICByZXR1cm4gdmFsdWVUeXBlcy5NVUxUSVBMRTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkLmdldCgnZmllbGQnKSkge1xuICAgICAgcmV0dXJuIHZhbHVlVHlwZXMuU0lOR0xFO1xuICAgIH0gZWxzZSBpZiAoZmllbGQuZ2V0KFRZUEVTX0tFWSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZVR5cGVzLk1JWEVEO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH07XG5cbiAgdW5pcXVlRmllbGRJZCA9IHVuaXF1ZUlkKGAke3RoaXMucHJvcHMuZmllbGQuZ2V0KCduYW1lJyl9LWZpZWxkLWApO1xuICAvKipcbiAgICogQWx3YXlzIHVwZGF0ZSBzbyB0aGF0IGVhY2ggbmVzdGVkIHdpZGdldCBoYXMgdGhlIG9wdGlvbiB0byB1cGRhdGUuIFRoaXMgaXNcbiAgICogcmVxdWlyZWQgYmVjYXVzZSBDb250cm9sSE9DIHByb3ZpZGVzIGEgZGVmYXVsdCBgc2hvdWxkQ29tcG9uZW50VXBkYXRlYFxuICAgKiB3aGljaCBvbmx5IHVwZGF0ZXMgaWYgdGhlIHZhbHVlIGNoYW5nZXMsIGJ1dCBldmVyeSB3aWRnZXQgbXVzdCBiZSBhbGxvd2VkXG4gICAqIHRvIG92ZXJyaWRlIHRoaXMuXG4gICAqL1xuICBzaG91bGRDb21wb25lbnRVcGRhdGUoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBoYW5kbGVDaGFuZ2UgPSBlID0+IHtcbiAgICBjb25zdCB7IG9uQ2hhbmdlIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy5zdGF0ZS52YWx1ZTtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IGUudGFyZ2V0LnZhbHVlLnRyaW0oKTtcbiAgICBjb25zdCBsaXN0VmFsdWUgPSBuZXdWYWx1ZSA/IG5ld1ZhbHVlLnNwbGl0KCcsJykgOiBbXTtcbiAgICBpZiAobmV3VmFsdWUubWF0Y2goLywkLykgJiYgb2xkVmFsdWUubWF0Y2goLywgJC8pKSB7XG4gICAgICBsaXN0VmFsdWUucG9wKCk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPSB0aGlzLnZhbHVlVG9TdHJpbmcobGlzdFZhbHVlKTtcbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHBhcnNlZFZhbHVlIH0pO1xuICAgIG9uQ2hhbmdlKExpc3QobGlzdFZhbHVlLm1hcCh2YWwgPT4gdmFsLnRyaW0oKSkpKTtcbiAgfTtcblxuICBoYW5kbGVGb2N1cyA9ICgpID0+IHtcbiAgICB0aGlzLnByb3BzLnNldEFjdGl2ZVN0eWxlKCk7XG4gIH07XG5cbiAgaGFuZGxlQmx1ciA9IGUgPT4ge1xuICAgIGNvbnN0IGxpc3RWYWx1ZSA9IGUudGFyZ2V0LnZhbHVlXG4gICAgICAuc3BsaXQoJywnKVxuICAgICAgLm1hcChlbCA9PiBlbC50cmltKCkpXG4gICAgICAuZmlsdGVyKGVsID0+IGVsKTtcbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHRoaXMudmFsdWVUb1N0cmluZyhsaXN0VmFsdWUpIH0pO1xuICAgIHRoaXMucHJvcHMuc2V0SW5hY3RpdmVTdHlsZSgpO1xuICB9O1xuXG4gIGhhbmRsZUFkZCA9IGUgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHBhcnNlZFZhbHVlID1cbiAgICAgIHRoaXMuZ2V0VmFsdWVUeXBlKCkgPT09IHZhbHVlVHlwZXMuU0lOR0xFXG4gICAgICAgID8gdGhpcy5zaW5nbGVEZWZhdWx0KClcbiAgICAgICAgOiBmcm9tSlModGhpcy5tdWx0aXBsZURlZmF1bHQoZmllbGQuZ2V0KCdmaWVsZHMnKSkpO1xuICAgIHRoaXMuYWRkSXRlbShwYXJzZWRWYWx1ZSk7XG4gIH07XG5cbiAgc2luZ2xlRGVmYXVsdCA9ICgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5maWVsZC5nZXRJbihbJ2ZpZWxkJywgJ2RlZmF1bHQnXSwgbnVsbCk7XG4gIH07XG5cbiAgbXVsdGlwbGVEZWZhdWx0ID0gZmllbGRzID0+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KGZpZWxkcyk7XG4gIH07XG5cbiAgaGFuZGxlQWRkVHlwZSA9ICh0eXBlLCB0eXBlS2V5KSA9PiB7XG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPSBmcm9tSlModGhpcy5taXhlZERlZmF1bHQodHlwZUtleSwgdHlwZSkpO1xuICAgIHRoaXMuYWRkSXRlbShwYXJzZWRWYWx1ZSk7XG4gIH07XG5cbiAgbWl4ZWREZWZhdWx0ID0gKHR5cGVLZXksIHR5cGUpID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZFR5cGUgPSB0aGlzLnByb3BzLmZpZWxkLmdldChUWVBFU19LRVkpLmZpbmQoZiA9PiBmLmdldCgnbmFtZScpID09PSB0eXBlKTtcbiAgICBjb25zdCBmaWVsZHMgPSBzZWxlY3RlZFR5cGUuZ2V0KCdmaWVsZHMnKSB8fCBbc2VsZWN0ZWRUeXBlLmdldCgnZmllbGQnKV07XG5cbiAgICByZXR1cm4gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KGZpZWxkcywgeyBbdHlwZUtleV06IHR5cGUgfSk7XG4gIH07XG5cbiAgZ2V0RmllbGRzRGVmYXVsdCA9IChmaWVsZHMsIGluaXRpYWxWYWx1ZSA9IHt9KSA9PiB7XG4gICAgcmV0dXJuIGZpZWxkcy5yZWR1Y2UoKGFjYywgaXRlbSkgPT4ge1xuICAgICAgY29uc3Qgc3ViZmllbGRzID0gaXRlbS5nZXQoJ2ZpZWxkJykgfHwgaXRlbS5nZXQoJ2ZpZWxkcycpO1xuICAgICAgY29uc3Qgb2JqZWN0ID0gaXRlbS5nZXQoJ3dpZGdldCcpID09ICdvYmplY3QnO1xuICAgICAgY29uc3QgbmFtZSA9IGl0ZW0uZ2V0KCduYW1lJyk7XG4gICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSBpdGVtLmdldCgnZGVmYXVsdCcsIG51bGwpO1xuXG4gICAgICBpZiAoTGlzdC5pc0xpc3Qoc3ViZmllbGRzKSAmJiBvYmplY3QpIHtcbiAgICAgICAgY29uc3Qgc3ViRGVmYXVsdFZhbHVlID0gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KHN1YmZpZWxkcyk7XG4gICAgICAgICFpc0VtcHR5KHN1YkRlZmF1bHRWYWx1ZSkgJiYgKGFjY1tuYW1lXSA9IHN1YkRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9XG5cbiAgICAgIGlmIChNYXAuaXNNYXAoc3ViZmllbGRzKSAmJiBvYmplY3QpIHtcbiAgICAgICAgY29uc3Qgc3ViRGVmYXVsdFZhbHVlID0gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KFtzdWJmaWVsZHNdKTtcbiAgICAgICAgIWlzRW1wdHkoc3ViRGVmYXVsdFZhbHVlKSAmJiAoYWNjW25hbWVdID0gc3ViRGVmYXVsdFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH1cblxuICAgICAgaWYgKGRlZmF1bHRWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBhY2NbbmFtZV0gPSBkZWZhdWx0VmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgaW5pdGlhbFZhbHVlKTtcbiAgfTtcblxuICBhZGRJdGVtID0gcGFyc2VkVmFsdWUgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWUsIG9uQ2hhbmdlLCBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBhZGRUb1RvcCA9IGZpZWxkLmdldCgnYWRkX3RvX3RvcCcsIGZhbHNlKTtcblxuICAgIGNvbnN0IGl0ZW1LZXkgPSB1dWlkKCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBpdGVtc0NvbGxhcHNlZDogYWRkVG9Ub3BcbiAgICAgICAgPyBbZmFsc2UsIC4uLnRoaXMuc3RhdGUuaXRlbXNDb2xsYXBzZWRdXG4gICAgICAgIDogWy4uLnRoaXMuc3RhdGUuaXRlbXNDb2xsYXBzZWQsIGZhbHNlXSxcbiAgICAgIGtleXM6IGFkZFRvVG9wID8gW2l0ZW1LZXksIC4uLnRoaXMuc3RhdGUua2V5c10gOiBbLi4udGhpcy5zdGF0ZS5rZXlzLCBpdGVtS2V5XSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGxpc3RWYWx1ZSA9IHZhbHVlIHx8IExpc3QoKTtcbiAgICBpZiAoYWRkVG9Ub3ApIHtcbiAgICAgIG9uQ2hhbmdlKGxpc3RWYWx1ZS51bnNoaWZ0KHBhcnNlZFZhbHVlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uQ2hhbmdlKGxpc3RWYWx1ZS5wdXNoKHBhcnNlZFZhbHVlKSk7XG4gICAgfVxuICB9O1xuXG4gIHByb2Nlc3NDb250cm9sUmVmID0gcmVmID0+IHtcbiAgICBpZiAoIXJlZikgcmV0dXJuO1xuICAgIGNvbnN0IHtcbiAgICAgIHByb3BzOiB7IHZhbGlkYXRpb25LZXk6IGtleSB9LFxuICAgIH0gPSByZWY7XG4gICAgdGhpcy5jaGlsZFJlZnNba2V5XSA9IHJlZjtcbiAgICB0aGlzLnByb3BzLmNvbnRyb2xSZWY/Lih0aGlzKTtcbiAgfTtcblxuICB2YWxpZGF0ZSA9ICgpID0+IHtcbiAgICAvLyBGaXJzdCB2YWxpZGF0ZSBjaGlsZCB3aWRnZXRzIGlmIHRoaXMgaXMgYSBjb21wbGV4IGxpc3RcbiAgICBjb25zdCBoYXNDaGlsZFdpZGdldHMgPSB0aGlzLmdldFZhbHVlVHlwZSgpICYmIE9iamVjdC5rZXlzKHRoaXMuY2hpbGRSZWZzKS5sZW5ndGggPiAwO1xuICAgIGlmIChoYXNDaGlsZFdpZGdldHMpIHtcbiAgICAgIE9iamVjdC52YWx1ZXModGhpcy5jaGlsZFJlZnMpLmZvckVhY2god2lkZ2V0ID0+IHtcbiAgICAgICAgd2lkZ2V0Py52YWxpZGF0ZT8uKCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9wcy52YWxpZGF0ZSgpO1xuICAgIH1cbiAgICB0aGlzLnByb3BzLm9uVmFsaWRhdGVPYmplY3QodGhpcy5wcm9wcy5mb3JJRCwgdGhpcy52YWxpZGF0ZVNpemUoKSk7XG4gIH07XG5cbiAgdmFsaWRhdGVTaXplID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgZmllbGQsIHZhbHVlLCB0IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG1pbiA9IGZpZWxkLmdldCgnbWluJyk7XG4gICAgY29uc3QgbWF4ID0gZmllbGQuZ2V0KCdtYXgnKTtcbiAgICBjb25zdCByZXF1aXJlZCA9IGZpZWxkLmdldCgncmVxdWlyZWQnLCB0cnVlKTtcblxuICAgIGlmICghcmVxdWlyZWQgJiYgIXZhbHVlPy5zaXplKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgZXJyb3IgPSB2YWxpZGF0aW9ucy52YWxpZGF0ZU1pbk1heChcbiAgICAgIHQsXG4gICAgICBmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpLFxuICAgICAgdmFsdWUsXG4gICAgICBtaW4sXG4gICAgICBtYXgsXG4gICAgKTtcblxuICAgIHJldHVybiBlcnJvciA/IFtlcnJvcl0gOiBbXTtcbiAgfTtcblxuICAvKipcbiAgICogSW4gY2FzZSB0aGUgYG9uQ2hhbmdlT2JqZWN0YCBmdW5jdGlvbiBpcyBmcm96ZW4gYnkgYSBjaGlsZCB3aWRnZXQgaW1wbGVtZW50YXRpb24sXG4gICAqIGUuZy4gd2hlbiBkZWJvdW5jZWQsIGFsd2F5cyBnZXQgdGhlIGxhdGVzdCBvYmplY3QgdmFsdWUgaW5zdGVhZCBvZiB1c2luZ1xuICAgKiBgdGhpcy5wcm9wcy52YWx1ZWAgZGlyZWN0bHkuXG4gICAqL1xuICBnZXRPYmplY3RWYWx1ZSA9IGlkeCA9PiB0aGlzLnByb3BzLnZhbHVlLmdldChpZHgpIHx8IE1hcCgpO1xuXG4gIGhhbmRsZUNoYW5nZUZvcihpbmRleCkge1xuICAgIHJldHVybiAoZiwgbmV3VmFsdWUsIG5ld01ldGFkYXRhKSA9PiB7XG4gICAgICBjb25zdCB7IHZhbHVlLCBtZXRhZGF0YSwgb25DaGFuZ2UsIGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBmaWVsZC5nZXQoJ25hbWUnKTtcbiAgICAgIGNvbnN0IGxpc3RGaWVsZE9iamVjdFdpZGdldCA9IGZpZWxkLmdldEluKFsnZmllbGQnLCAnd2lkZ2V0J10pID09PSAnb2JqZWN0JztcbiAgICAgIGNvbnN0IHdpdGhOYW1lS2V5ID1cbiAgICAgICAgdGhpcy5nZXRWYWx1ZVR5cGUoKSAhPT0gdmFsdWVUeXBlcy5TSU5HTEUgfHxcbiAgICAgICAgKHRoaXMuZ2V0VmFsdWVUeXBlKCkgPT09IHZhbHVlVHlwZXMuU0lOR0xFICYmIGxpc3RGaWVsZE9iamVjdFdpZGdldCk7XG4gICAgICBjb25zdCBuZXdPYmplY3RWYWx1ZSA9IHdpdGhOYW1lS2V5XG4gICAgICAgID8gdGhpcy5nZXRPYmplY3RWYWx1ZShpbmRleCkuc2V0KGYuZ2V0KCduYW1lJyksIG5ld1ZhbHVlKVxuICAgICAgICA6IG5ld1ZhbHVlO1xuICAgICAgY29uc3QgcGFyc2VkTWV0YWRhdGEgPSB7XG4gICAgICAgIFtjb2xsZWN0aW9uTmFtZV06IE9iamVjdC5hc3NpZ24obWV0YWRhdGEgPyBtZXRhZGF0YS50b0pTKCkgOiB7fSwgbmV3TWV0YWRhdGEgfHwge30pLFxuICAgICAgfTtcbiAgICAgIG9uQ2hhbmdlKHZhbHVlLnNldChpbmRleCwgbmV3T2JqZWN0VmFsdWUpLCBwYXJzZWRNZXRhZGF0YSk7XG4gICAgfTtcbiAgfVxuXG4gIGhhbmRsZVJlbW92ZSA9IChpbmRleCwgZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3Qge1xuICAgICAgdmFsdWUsXG4gICAgICBtZXRhZGF0YSxcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgZmllbGQsXG4gICAgICBjbGVhckZpZWxkRXJyb3JzLFxuICAgICAgb25WYWxpZGF0ZU9iamVjdCxcbiAgICAgIGZvcklELFxuICAgICAgZmllbGRzRXJyb3JzLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBmaWVsZC5nZXQoJ25hbWUnKTtcbiAgICBjb25zdCBpc1NpbmdsZUZpZWxkID0gdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5TSU5HTEU7XG5cbiAgICBjb25zdCBtZXRhZGF0YVJlbW92ZVBhdGggPSBpc1NpbmdsZUZpZWxkID8gdmFsdWUuZ2V0KGluZGV4KSA6IHZhbHVlLmdldChpbmRleCkudmFsdWVTZXEoKTtcbiAgICBjb25zdCBwYXJzZWRNZXRhZGF0YSA9XG4gICAgICBtZXRhZGF0YSAmJiAhbWV0YWRhdGEuaXNFbXB0eSgpXG4gICAgICAgID8geyBbY29sbGVjdGlvbk5hbWVdOiBtZXRhZGF0YS5yZW1vdmVJbihtZXRhZGF0YVJlbW92ZVBhdGgpIH1cbiAgICAgICAgOiBtZXRhZGF0YTtcblxuICAgIC8vIEdldCB0aGUga2V5IG9mIHRoZSBpdGVtIGJlaW5nIHJlbW92ZWRcbiAgICBjb25zdCByZW1vdmVkS2V5ID0gdGhpcy5zdGF0ZS5rZXlzW2luZGV4XTtcblxuICAgIC8vIFVwZGF0ZSBzdGF0ZSB3aGlsZSBwcmVzZXJ2aW5nIGtleXMgZm9yIHJlbWFpbmluZyBpdGVtc1xuICAgIGNvbnN0IG5ld0tleXMgPSBbLi4udGhpcy5zdGF0ZS5rZXlzXTtcbiAgICBuZXdLZXlzLnNwbGljZShpbmRleCwgMSk7XG4gICAgaXRlbXNDb2xsYXBzZWQuc3BsaWNlKGluZGV4LCAxKTtcblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXNDb2xsYXBzZWQ6IFsuLi5pdGVtc0NvbGxhcHNlZF0sXG4gICAgICBrZXlzOiBuZXdLZXlzLFxuICAgIH0pO1xuXG4gICAgLy8gQ2xlYXIgdGhlIHJlZiBmb3IgdGhlIHJlbW92ZWQgaXRlbVxuICAgIGRlbGV0ZSB0aGlzLmNoaWxkUmVmc1tyZW1vdmVkS2V5XTtcblxuICAgIGNvbnN0IG5ld1ZhbHVlID0gdmFsdWUuZGVsZXRlKGluZGV4KTtcblxuICAgIC8vIENsZWFyIGVycm9ycyBmb3IgdGhlIHJlbW92ZWQgaXRlbSBhbmQgaXRzIGNoaWxkcmVuXG4gICAgaWYgKGZpZWxkc0Vycm9ycykge1xuICAgICAgT2JqZWN0LmVudHJpZXMoZmllbGRzRXJyb3JzLnRvSlMoKSkuZm9yRWFjaCgoW2ZpZWxkSWQsIGVycm9yc10pID0+IHtcbiAgICAgICAgaWYgKGVycm9ycy5zb21lKGVyciA9PiBlcnIucGFyZW50SWRzPy5pbmNsdWRlcyhyZW1vdmVkS2V5KSkpIHtcbiAgICAgICAgICBjbGVhckZpZWxkRXJyb3JzKGZpZWxkSWQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBJZiBsaXN0IGlzIGVtcHR5LCBtYXJrIGl0IGFzIHZhbGlkXG4gICAgaWYgKG5ld1ZhbHVlLnNpemUgPT09IDApIHtcbiAgICAgIGNsZWFyRmllbGRFcnJvcnMoZm9ySUQpO1xuICAgICAgb25WYWxpZGF0ZU9iamVjdChmb3JJRCwgW10pO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSB0aGUgdmFsdWUgbGFzdCB0byBlbnN1cmUgYWxsIGVycm9yIHN0YXRlcyBhcmUgY2xlYXJlZFxuICAgIG9uQ2hhbmdlKG5ld1ZhbHVlLCBwYXJzZWRNZXRhZGF0YSk7XG4gIH07XG5cbiAgaGFuZGxlSXRlbUNvbGxhcHNlVG9nZ2xlID0gKGluZGV4LCBldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBuZXdJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLm1hcCgoY29sbGFwc2VkLCBpdGVtSW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCA9PT0gaXRlbUluZGV4KSB7XG4gICAgICAgIHJldHVybiAhY29sbGFwc2VkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbGxhcHNlZDtcbiAgICB9KTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGl0ZW1zQ29sbGFwc2VkOiBuZXdJdGVtc0NvbGxhcHNlZCxcbiAgICB9KTtcbiAgfTtcblxuICBoYW5kbGVDb2xsYXBzZUFsbFRvZ2dsZSA9IGUgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IHZhbHVlLCBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkLCBsaXN0Q29sbGFwc2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IG1pbmltaXplQ29sbGFwc2VkSXRlbXMgPSBmaWVsZC5nZXQoJ21pbmltaXplX2NvbGxhcHNlZCcsIGZhbHNlKTtcbiAgICBjb25zdCBsaXN0Q29sbGFwc2VkQnlEZWZhdWx0ID0gZmllbGQuZ2V0KCdjb2xsYXBzZWQnLCB0cnVlKTtcbiAgICBjb25zdCBhbGxJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLmV2ZXJ5KHZhbCA9PiB2YWwgPT09IHRydWUpO1xuXG4gICAgaWYgKG1pbmltaXplQ29sbGFwc2VkSXRlbXMpIHtcbiAgICAgIGxldCB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZDtcbiAgICAgIC8vIE9ubHkgYWxsb3cgY29sbGFwc2luZyBhbGwgaXRlbXMgaW4gdGhpcyBtb2RlIGJ1dCBub3Qgb3BlbmluZyBhbGwgYXQgb25jZVxuICAgICAgaWYgKCFsaXN0Q29sbGFwc2VkIHx8ICFsaXN0Q29sbGFwc2VkQnlEZWZhdWx0KSB7XG4gICAgICAgIHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCA9IEFycmF5KHZhbHVlLnNpemUpLmZpbGwoIWxpc3RDb2xsYXBzZWQpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGxpc3RDb2xsYXBzZWQ6ICFsaXN0Q29sbGFwc2VkLCBpdGVtc0NvbGxhcHNlZDogdXBkYXRlZEl0ZW1zQ29sbGFwc2VkIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgaXRlbXNDb2xsYXBzZWQ6IEFycmF5KHZhbHVlLnNpemUpLmZpbGwoIWFsbEl0ZW1zQ29sbGFwc2VkKSB9KTtcbiAgICB9XG4gIH07XG5cbiAgb2JqZWN0TGFiZWwoaXRlbSkge1xuICAgIGNvbnN0IHsgZmllbGQsIGVudHJ5IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHZhbHVlVHlwZSA9IHRoaXMuZ2V0VmFsdWVUeXBlKCk7XG4gICAgc3dpdGNoICh2YWx1ZVR5cGUpIHtcbiAgICAgIGNhc2UgdmFsdWVUeXBlcy5NSVhFRDoge1xuICAgICAgICBpZiAoIXZhbGlkYXRlSXRlbShmaWVsZCwgaXRlbSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXRlbVR5cGUgPSBnZXRUeXBlZEZpZWxkRm9yVmFsdWUoZmllbGQsIGl0ZW0pO1xuICAgICAgICBjb25zdCBsYWJlbCA9IGl0ZW1UeXBlLmdldCgnbGFiZWwnLCBpdGVtVHlwZS5nZXQoJ25hbWUnKSk7XG4gICAgICAgIC8vIGVhY2ggdHlwZSBjYW4gaGF2ZSBpdHMgb3duIHN1bW1hcnksIGJ1dCBkZWZhdWx0IHRvIHRoZSBsaXN0IHN1bW1hcnkgaWYgZXhpc3RzXG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBpdGVtVHlwZS5nZXQoJ3N1bW1hcnknLCBmaWVsZC5nZXQoJ3N1bW1hcnknKSk7XG4gICAgICAgIGNvbnN0IGxhYmVsUmV0dXJuID0gc3VtbWFyeSA/IGhhbmRsZVN1bW1hcnkoc3VtbWFyeSwgZW50cnksIGxhYmVsLCBpdGVtKSA6IGxhYmVsO1xuICAgICAgICByZXR1cm4gbGFiZWxSZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlIHZhbHVlVHlwZXMuU0lOR0xFOiB7XG4gICAgICAgIGNvbnN0IHNpbmdsZUZpZWxkID0gZmllbGQuZ2V0KCdmaWVsZCcpO1xuICAgICAgICBjb25zdCBsYWJlbCA9IHNpbmdsZUZpZWxkLmdldCgnbGFiZWwnLCBzaW5nbGVGaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBmaWVsZC5nZXQoJ3N1bW1hcnknKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGZyb21KUyh7IFtzaW5nbGVGaWVsZC5nZXQoJ25hbWUnKV06IGl0ZW0gfSk7XG4gICAgICAgIGNvbnN0IGxhYmVsUmV0dXJuID0gc3VtbWFyeSA/IGhhbmRsZVN1bW1hcnkoc3VtbWFyeSwgZW50cnksIGxhYmVsLCBkYXRhKSA6IGxhYmVsO1xuICAgICAgICByZXR1cm4gbGFiZWxSZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlIHZhbHVlVHlwZXMuTVVMVElQTEU6IHtcbiAgICAgICAgaWYgKCF2YWxpZGF0ZUl0ZW0oZmllbGQsIGl0ZW0pKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG11bHRpRmllbGRzID0gZmllbGQuZ2V0KCdmaWVsZHMnKTtcbiAgICAgICAgY29uc3QgbGFiZWxGaWVsZCA9IG11bHRpRmllbGRzICYmIG11bHRpRmllbGRzLmZpcnN0KCk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gaXRlbS5nZXQobGFiZWxGaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBmaWVsZC5nZXQoJ3N1bW1hcnknKTtcbiAgICAgICAgY29uc3QgbGFiZWxSZXR1cm4gPSBzdW1tYXJ5ID8gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgdmFsdWUsIGl0ZW0pIDogdmFsdWU7XG4gICAgICAgIHJldHVybiAobGFiZWxSZXR1cm4gfHwgYE5vICR7bGFiZWxGaWVsZC5nZXQoJ25hbWUnKX1gKS50b1N0cmluZygpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBvblNvcnRFbmQgPSAoeyBvbGRJbmRleCwgbmV3SW5kZXggfSkgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCwga2V5cyB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIC8vIFVwZGF0ZSB2YWx1ZVxuICAgIGNvbnN0IGl0ZW0gPSB2YWx1ZS5nZXQob2xkSW5kZXgpO1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gdmFsdWUuZGVsZXRlKG9sZEluZGV4KS5pbnNlcnQobmV3SW5kZXgsIGl0ZW0pO1xuICAgIHRoaXMucHJvcHMub25DaGFuZ2UobmV3VmFsdWUpO1xuXG4gICAgLy8gVXBkYXRlIGNvbGxhcHNpbmdcbiAgICBjb25zdCBjb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZFtvbGRJbmRleF07XG4gICAgaXRlbXNDb2xsYXBzZWQuc3BsaWNlKG9sZEluZGV4LCAxKTtcbiAgICBjb25zdCB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgPSBbLi4uaXRlbXNDb2xsYXBzZWRdO1xuICAgIHVwZGF0ZWRJdGVtc0NvbGxhcHNlZC5zcGxpY2UobmV3SW5kZXgsIDAsIGNvbGxhcHNlZCk7XG5cbiAgICAvLyBNb3ZlIGtleXMgdG8gbWFpbnRhaW4gcmVsYXRpb25zaGlwc1xuICAgIGNvbnN0IG1vdmVkS2V5ID0ga2V5c1tvbGRJbmRleF07XG4gICAgY29uc3QgdXBkYXRlZEtleXMgPSBbLi4ua2V5c107XG4gICAgdXBkYXRlZEtleXMuc3BsaWNlKG9sZEluZGV4LCAxKTtcbiAgICB1cGRhdGVkS2V5cy5zcGxpY2UobmV3SW5kZXgsIDAsIG1vdmVkS2V5KTtcblxuICAgIHRoaXMuc2V0U3RhdGUoeyBpdGVtc0NvbGxhcHNlZDogdXBkYXRlZEl0ZW1zQ29sbGFwc2VkLCBrZXlzOiB1cGRhdGVkS2V5cyB9KTtcbiAgfTtcblxuICBoYXNFcnJvciA9IGluZGV4ID0+IHtcbiAgICBjb25zdCB7IGZpZWxkc0Vycm9ycyB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoZmllbGRzRXJyb3JzICYmIGZpZWxkc0Vycm9ycy5zaXplID4gMCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZmllbGRzRXJyb3JzLnRvSlMoKSkuc29tZShhcnIgPT5cbiAgICAgICAgYXJyLnNvbWUoZXJyID0+IGVyci5wYXJlbnRJZHMgJiYgZXJyLnBhcmVudElkcy5pbmNsdWRlcyh0aGlzLnN0YXRlLmtleXNbaW5kZXhdKSksXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICBmb2N1cyhwYXRoKSB7XG4gICAgY29uc3QgW2luZGV4LCAuLi5yZW1haW5pbmdQYXRoXSA9IHBhdGguc3BsaXQoJy4nKTtcblxuICAgIGlmICh0aGlzLnN0YXRlLmxpc3RDb2xsYXBzZWQgfHwgdGhpcy5zdGF0ZS5pdGVtc0NvbGxhcHNlZFtpbmRleF0pIHtcbiAgICAgIGNvbnN0IG5ld0l0ZW1zQ29sbGFwc2VkID0gWy4uLnRoaXMuc3RhdGUuaXRlbXNDb2xsYXBzZWRdO1xuICAgICAgbmV3SXRlbXNDb2xsYXBzZWRbaW5kZXhdID0gZmFsc2U7XG4gICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICB7XG4gICAgICAgICAgbGlzdENvbGxhcHNlZDogZmFsc2UsXG4gICAgICAgICAgaXRlbXNDb2xsYXBzZWQ6IG5ld0l0ZW1zQ29sbGFwc2VkLFxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5zdGF0ZS5rZXlzW2luZGV4XTtcbiAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jaGlsZFJlZnNba2V5XTtcbiAgICAgICAgICBpZiAoY29udHJvbD8uZm9jdXMpIHtcbiAgICAgICAgICAgIGNvbnRyb2wuZm9jdXMocmVtYWluaW5nUGF0aC5qb2luKCcuJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuc3RhdGUua2V5c1tpbmRleF07XG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jaGlsZFJlZnNba2V5XTtcbiAgICAgIGlmIChjb250cm9sPy5mb2N1cykge1xuICAgICAgICBjb250cm9sLmZvY3VzKHJlbWFpbmluZ1BhdGguam9pbignLicpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZGlzcGxheS1uYW1lXG4gIHJlbmRlckl0ZW0gPSAoaXRlbSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjbGFzc05hbWVXcmFwcGVyLFxuICAgICAgZWRpdG9yQ29udHJvbCxcbiAgICAgIG9uVmFsaWRhdGVPYmplY3QsXG4gICAgICBtZXRhZGF0YSxcbiAgICAgIGNsZWFyRmllbGRFcnJvcnMsXG4gICAgICBmaWVsZHNFcnJvcnMsXG4gICAgICBjb250cm9sUmVmLFxuICAgICAgcmVzb2x2ZVdpZGdldCxcbiAgICAgIHBhcmVudElkcyxcbiAgICAgIGZvcklELFxuICAgICAgdCxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQsIGtleXMgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgY29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWRbaW5kZXhdO1xuICAgIGNvbnN0IGtleSA9IGtleXNbaW5kZXhdO1xuICAgIGxldCBmaWVsZCA9IHRoaXMucHJvcHMuZmllbGQ7XG4gICAgY29uc3QgaGFzRXJyb3IgPSB0aGlzLmhhc0Vycm9yKGluZGV4KTtcbiAgICBjb25zdCBpc1ZhcmlhYmxlVHlwZXNMaXN0ID0gdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5NSVhFRDtcbiAgICBpZiAoaXNWYXJpYWJsZVR5cGVzTGlzdCkge1xuICAgICAgZmllbGQgPSBnZXRUeXBlZEZpZWxkRm9yVmFsdWUoZmllbGQsIGl0ZW0pO1xuICAgICAgaWYgKCFmaWVsZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJFcnJvbmVvdXNUeXBlZEl0ZW0oaW5kZXgsIGl0ZW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8U29ydGFibGVMaXN0SXRlbVxuICAgICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBjb2xsYXBzZWQgJiYgc3R5bGVzLmxpc3RDb250cm9sSXRlbUNvbGxhcHNlZF19XG4gICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIGlkPXtrZXl9XG4gICAgICAgIGtleXM9e2tleXN9XG4gICAgICA+XG4gICAgICAgIHtpc1ZhcmlhYmxlVHlwZXNMaXN0ICYmIChcbiAgICAgICAgICA8TGFiZWxDb21wb25lbnRcbiAgICAgICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgICAgIGlzQWN0aXZlPXtmYWxzZX1cbiAgICAgICAgICAgIGhhc0Vycm9ycz17aGFzRXJyb3J9XG4gICAgICAgICAgICB1bmlxdWVGaWVsZElkPXt0aGlzLnVuaXF1ZUZpZWxkSWR9XG4gICAgICAgICAgICBpc0ZpZWxkT3B0aW9uYWw9e2ZpZWxkLmdldCgncmVxdWlyZWQnKSA9PT0gZmFsc2V9XG4gICAgICAgICAgICB0PXt0fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIDxTdHlsZWRMaXN0SXRlbVRvcEJhclxuICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICAgIG9uQ29sbGFwc2VUb2dnbGU9e3BhcnRpYWwodGhpcy5oYW5kbGVJdGVtQ29sbGFwc2VUb2dnbGUsIGluZGV4KX1cbiAgICAgICAgICBkcmFnSGFuZGxlPXtEcmFnSGFuZGxlfVxuICAgICAgICAgIGlkPXtrZXl9XG4gICAgICAgICAgYWxsb3dSZW1vdmU9e2ZpZWxkLmdldCgnYWxsb3dfcmVtb3ZlJywgdHJ1ZSl9XG4gICAgICAgICAgYWxsb3dSZW9yZGVyPXtmaWVsZC5nZXQoJ2FsbG93X3Jlb3JkZXInLCB0cnVlKX1cbiAgICAgICAgICBvblJlbW92ZT17cGFydGlhbCh0aGlzLmhhbmRsZVJlbW92ZSwgaW5kZXgpfVxuICAgICAgICAgIGRhdGEtdGVzdGlkPXtgc3R5bGVkLWxpc3QtaXRlbS10b3AtYmFyLSR7a2V5fWB9XG4gICAgICAgIC8+XG4gICAgICAgIDxOZXN0ZWRPYmplY3RMYWJlbCBjb2xsYXBzZWQ9e2NvbGxhcHNlZH0gZXJyb3I9e2hhc0Vycm9yfT5cbiAgICAgICAgICB7dGhpcy5vYmplY3RMYWJlbChpdGVtKX1cbiAgICAgICAgPC9OZXN0ZWRPYmplY3RMYWJlbD5cbiAgICAgICAgPENsYXNzTmFtZXM+XG4gICAgICAgICAgeyh7IGNzcywgY3ggfSkgPT4gKFxuICAgICAgICAgICAgPE9iamVjdENvbnRyb2xcbiAgICAgICAgICAgICAgY2xhc3NOYW1lV3JhcHBlcj17Y3goY2xhc3NOYW1lV3JhcHBlciwge1xuICAgICAgICAgICAgICAgIFtjc3NgXG4gICAgICAgICAgICAgICAgICAke3N0eWxlU3RyaW5ncy5jb2xsYXBzZWRPYmplY3RDb250cm9sfTtcbiAgICAgICAgICAgICAgICBgXTogY29sbGFwc2VkLFxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgdmFsdWU9e2l0ZW19XG4gICAgICAgICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgICAgICAgb25DaGFuZ2VPYmplY3Q9e3RoaXMuaGFuZGxlQ2hhbmdlRm9yKGluZGV4KX1cbiAgICAgICAgICAgICAgZWRpdG9yQ29udHJvbD17ZWRpdG9yQ29udHJvbH1cbiAgICAgICAgICAgICAgcmVzb2x2ZVdpZGdldD17cmVzb2x2ZVdpZGdldH1cbiAgICAgICAgICAgICAgbWV0YWRhdGE9e21ldGFkYXRhfVxuICAgICAgICAgICAgICBmb3JMaXN0XG4gICAgICAgICAgICAgIG9uVmFsaWRhdGVPYmplY3Q9e29uVmFsaWRhdGVPYmplY3R9XG4gICAgICAgICAgICAgIGNsZWFyRmllbGRFcnJvcnM9e2NsZWFyRmllbGRFcnJvcnN9XG4gICAgICAgICAgICAgIGZpZWxkc0Vycm9ycz17ZmllbGRzRXJyb3JzfVxuICAgICAgICAgICAgICByZWY9e3RoaXMucHJvY2Vzc0NvbnRyb2xSZWZ9XG4gICAgICAgICAgICAgIGNvbnRyb2xSZWY9e2NvbnRyb2xSZWZ9XG4gICAgICAgICAgICAgIHZhbGlkYXRpb25LZXk9e2tleX1cbiAgICAgICAgICAgICAgY29sbGFwc2VkPXtjb2xsYXBzZWR9XG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgb2JqZWN0LWNvbnRyb2wtJHtrZXl9YH1cbiAgICAgICAgICAgICAgaGFzRXJyb3I9e2hhc0Vycm9yfVxuICAgICAgICAgICAgICBwYXJlbnRJZHM9e1suLi5wYXJlbnRJZHMsIGZvcklELCBrZXldfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L0NsYXNzTmFtZXM+XG4gICAgICA8L1NvcnRhYmxlTGlzdEl0ZW0+XG4gICAgKTtcbiAgfTtcblxuICByZW5kZXJFcnJvbmVvdXNUeXBlZEl0ZW0oaW5kZXgsIGl0ZW0pIHtcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMucHJvcHMuZmllbGQ7XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZ2V0RXJyb3JNZXNzYWdlRm9yVHlwZWRGaWVsZEFuZFZhbHVlKGZpZWxkLCBpdGVtKTtcbiAgICBjb25zdCBrZXkgPSBgaXRlbS0ke2luZGV4fWA7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTb3J0YWJsZUxpc3RJdGVtXG4gICAgICAgIGNzcz17W3N0eWxlcy5saXN0Q29udHJvbEl0ZW0sIHN0eWxlcy5saXN0Q29udHJvbEl0ZW1Db2xsYXBzZWRdfVxuICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAgIGtleT17a2V5fVxuICAgICAgPlxuICAgICAgICA8U3R5bGVkTGlzdEl0ZW1Ub3BCYXJcbiAgICAgICAgICBvbkNvbGxhcHNlVG9nZ2xlPXtudWxsfVxuICAgICAgICAgIG9uUmVtb3ZlPXtwYXJ0aWFsKHRoaXMuaGFuZGxlUmVtb3ZlLCBpbmRleCwga2V5KX1cbiAgICAgICAgICBkcmFnSGFuZGxlPXtEcmFnSGFuZGxlfVxuICAgICAgICAgIGlkPXtrZXl9XG4gICAgICAgIC8+XG4gICAgICAgIDxOZXN0ZWRPYmplY3RMYWJlbCBjb2xsYXBzZWQ9e3RydWV9IGVycm9yPXt0cnVlfT5cbiAgICAgICAgICB7ZXJyb3JNZXNzYWdlfVxuICAgICAgICA8L05lc3RlZE9iamVjdExhYmVsPlxuICAgICAgPC9Tb3J0YWJsZUxpc3RJdGVtPlxuICAgICk7XG4gIH1cblxuICByZW5kZXJMaXN0Q29udHJvbCgpIHtcbiAgICBjb25zdCB7IHZhbHVlLCBmb3JJRCwgZmllbGQsIGNsYXNzTmFtZVdyYXBwZXIsIHQgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCwgbGlzdENvbGxhcHNlZCwga2V5cyB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBpdGVtcyA9IHZhbHVlIHx8IExpc3QoKTtcbiAgICBjb25zdCBsYWJlbCA9IGZpZWxkLmdldCgnbGFiZWwnLCBmaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgY29uc3QgbGFiZWxTaW5ndWxhciA9IGZpZWxkLmdldCgnbGFiZWxfc2luZ3VsYXInKSB8fCBmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpO1xuICAgIGNvbnN0IGxpc3RMYWJlbCA9IGl0ZW1zLnNpemUgPT09IDEgPyBsYWJlbFNpbmd1bGFyLnRvTG93ZXJDYXNlKCkgOiBsYWJlbC50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IG1pbmltaXplQ29sbGFwc2VkSXRlbXMgPSBmaWVsZC5nZXQoJ21pbmltaXplX2NvbGxhcHNlZCcsIGZhbHNlKTtcbiAgICBjb25zdCBhbGxJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLmV2ZXJ5KHZhbCA9PiB2YWwgPT09IHRydWUpO1xuICAgIGNvbnN0IHNlbGZDb2xsYXBzZWQgPSBhbGxJdGVtc0NvbGxhcHNlZCAmJiAobGlzdENvbGxhcHNlZCB8fCAhbWluaW1pemVDb2xsYXBzZWRJdGVtcyk7XG5cbiAgICBjb25zdCBpdGVtc0FycmF5ID0ga2V5cy5tYXAoa2V5ID0+ICh7IGlkOiBrZXkgfSkpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxDbGFzc05hbWVzPlxuICAgICAgICB7KHsgY3gsIGNzcyB9KSA9PiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgaWQ9e2ZvcklEfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjeChcbiAgICAgICAgICAgICAgY2xhc3NOYW1lV3JhcHBlcixcbiAgICAgICAgICAgICAgY3NzYFxuICAgICAgICAgICAgICAgICR7c3R5bGVTdHJpbmdzLm9iamVjdFdpZGdldFRvcEJhckNvbnRhaW5lcn1cbiAgICAgICAgICAgICAgYCxcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPE9iamVjdFdpZGdldFRvcEJhclxuICAgICAgICAgICAgICBhbGxvd0FkZD17ZmllbGQuZ2V0KCdhbGxvd19hZGQnLCB0cnVlKX1cbiAgICAgICAgICAgICAgb25BZGQ9e3RoaXMuaGFuZGxlQWRkfVxuICAgICAgICAgICAgICB0eXBlcz17ZmllbGQuZ2V0KFRZUEVTX0tFWSwgbnVsbCl9XG4gICAgICAgICAgICAgIG9uQWRkVHlwZT17dHlwZSA9PiB0aGlzLmhhbmRsZUFkZFR5cGUodHlwZSwgcmVzb2x2ZUZpZWxkS2V5VHlwZShmaWVsZCkpfVxuICAgICAgICAgICAgICBoZWFkaW5nPXtgJHtpdGVtcy5zaXplfSAke2xpc3RMYWJlbH1gfVxuICAgICAgICAgICAgICBsYWJlbD17bGFiZWxTaW5ndWxhci50b0xvd2VyQ2FzZSgpfVxuICAgICAgICAgICAgICBvbkNvbGxhcHNlVG9nZ2xlPXt0aGlzLmhhbmRsZUNvbGxhcHNlQWxsVG9nZ2xlfVxuICAgICAgICAgICAgICBjb2xsYXBzZWQ9e3NlbGZDb2xsYXBzZWR9XG4gICAgICAgICAgICAgIHQ9e3R9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgeyghc2VsZkNvbGxhcHNlZCB8fCAhbWluaW1pemVDb2xsYXBzZWRJdGVtcykgJiYgKFxuICAgICAgICAgICAgICA8U29ydGFibGVMaXN0IGl0ZW1zPXtpdGVtc0FycmF5fSBrZXlzPXtrZXlzfSBvblNvcnRFbmQ9e3RoaXMub25Tb3J0RW5kfT5cbiAgICAgICAgICAgICAgICB7aXRlbXMubWFwKHRoaXMucmVuZGVySXRlbSl9XG4gICAgICAgICAgICAgIDwvU29ydGFibGVMaXN0PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvQ2xhc3NOYW1lcz5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVySW5wdXQoKSB7XG4gICAgY29uc3QgeyBmb3JJRCwgY2xhc3NOYW1lV3JhcHBlciB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IHZhbHVlIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIGlkPXtmb3JJRH1cbiAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgIG9uRm9jdXM9e3RoaXMuaGFuZGxlRm9jdXN9XG4gICAgICAgIG9uQmx1cj17dGhpcy5oYW5kbGVCbHVyfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZVdyYXBwZXJ9XG4gICAgICAvPlxuICAgICk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuZ2V0VmFsdWVUeXBlKCkgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlckxpc3RDb250cm9sKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlcklucHV0KCk7XG4gICAgfVxuICB9XG59XG4iXX0= */");
|
|
30
27
|
const StyledListItemTopBar = /*#__PURE__*/_styled(ListItemTopBar, {
|
|
31
28
|
target: "e11zrb3c1",
|
|
32
29
|
label: "StyledListItemTopBar"
|
|
33
|
-
})("background-color:", colors.textFieldBorder, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF3Q21EIiwiZmlsZSI6Ii4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IEltbXV0YWJsZVByb3BUeXBlcyBmcm9tICdyZWFjdC1pbW11dGFibGUtcHJvcHR5cGVzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCB7IGNzcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IExpc3QsIE1hcCwgZnJvbUpTIH0gZnJvbSAnaW1tdXRhYmxlJztcbmltcG9ydCB7IHBhcnRpYWwsIGlzRW1wdHksIHVuaXF1ZUlkIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tICd1dWlkJztcbmltcG9ydCBEZWNhcENtc1dpZGdldE9iamVjdCBmcm9tICdkZWNhcC1jbXMtd2lkZ2V0LW9iamVjdCc7XG5pbXBvcnQge1xuICBEbmRDb250ZXh0LFxuICBNb3VzZVNlbnNvcixcbiAgVG91Y2hTZW5zb3IsXG4gIGNsb3Nlc3RDZW50ZXIsXG4gIHVzZVNlbnNvcixcbiAgdXNlU2Vuc29ycyxcbn0gZnJvbSAnQGRuZC1raXQvY29yZSc7XG5pbXBvcnQgeyBTb3J0YWJsZUNvbnRleHQsIHVzZVNvcnRhYmxlIH0gZnJvbSAnQGRuZC1raXQvc29ydGFibGUnO1xuaW1wb3J0IHsgcmVzdHJpY3RUb1BhcmVudEVsZW1lbnQgfSBmcm9tICdAZG5kLWtpdC9tb2RpZmllcnMnO1xuaW1wb3J0IHsgQ1NTIH0gZnJvbSAnQGRuZC1raXQvdXRpbGl0aWVzJztcbmltcG9ydCB7XG4gIExpc3RJdGVtVG9wQmFyLFxuICBPYmplY3RXaWRnZXRUb3BCYXIsXG4gIGNvbG9ycyxcbiAgbGVuZ3RocyxcbiAgRmllbGRMYWJlbCxcbn0gZnJvbSAnZGVjYXAtY21zLXVpLWRlZmF1bHQnO1xuaW1wb3J0IHsgc3RyaW5nVGVtcGxhdGUsIHZhbGlkYXRpb25zIH0gZnJvbSAnZGVjYXAtY21zLWxpYi13aWRnZXRzJztcblxuaW1wb3J0IHtcbiAgVFlQRVNfS0VZLFxuICBnZXRUeXBlZEZpZWxkRm9yVmFsdWUsXG4gIHJlc29sdmVGaWVsZEtleVR5cGUsXG4gIGdldEVycm9yTWVzc2FnZUZvclR5cGVkRmllbGRBbmRWYWx1ZSxcbn0gZnJvbSAnLi90eXBlZExpc3RIZWxwZXJzJztcblxuY29uc3QgT2JqZWN0Q29udHJvbCA9IERlY2FwQ21zV2lkZ2V0T2JqZWN0LmNvbnRyb2xDb21wb25lbnQ7XG5cbmNvbnN0IExpc3RJdGVtID0gc3R5bGVkLmRpdigpO1xuXG5jb25zdCBTdHlsZWRMaXN0SXRlbVRvcEJhciA9IHN0eWxlZChMaXN0SXRlbVRvcEJhcilgXG4gIGJhY2tncm91bmQtY29sb3I6ICR7Y29sb3JzLnRleHRGaWVsZEJvcmRlcn07XG5gO1xuXG5jb25zdCBOZXN0ZWRPYmplY3RMYWJlbCA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6ICR7cHJvcHMgPT4gKHByb3BzLmNvbGxhcHNlZCA/ICdibG9jaycgOiAnbm9uZScpfTtcbiAgYm9yZGVyLXRvcDogMDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gKHByb3BzLmVycm9yID8gY29sb3JzLmVycm9yVGV4dCA6ICdpbmhlcml0Jyl9O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAke2NvbG9ycy50ZXh0RmllbGRCb3JkZXJ9O1xuICBwYWRkaW5nOiAxM3B4O1xuICBib3JkZXItcmFkaXVzOiAwIDAgJHtsZW5ndGhzLmJvcmRlclJhZGl1c30gJHtsZW5ndGhzLmJvcmRlclJhZGl1c307XG5gO1xuXG5jb25zdCBzdHlsZVN0cmluZ3MgPSB7XG4gIGNvbGxhcHNlZE9iamVjdENvbnRyb2w6IGBcbiAgICBkaXNwbGF5OiBub25lO1xuICBgLFxuICBvYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXI6IGBcbiAgICBwYWRkaW5nOiAke2xlbmd0aHMub2JqZWN0V2lkZ2V0VG9wQmFyQ29udGFpbmVyUGFkZGluZ307XG4gIGAsXG59O1xuXG5jb25zdCBzdHlsZXMgPSB7XG4gIGxpc3RDb250cm9sSXRlbTogY3NzYFxuICAgIG1hcmdpbi10b3A6IDE4cHg7XG5cbiAgICAmOmZpcnN0LW9mLXR5cGUge1xuICAgICAgbWFyZ2luLXRvcDogMjZweDtcbiAgICB9XG4gIGAsXG4gIGxpc3RDb250cm9sSXRlbUNvbGxhcHNlZDogY3NzYFxuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICBgLFxufTtcblxuZnVuY3Rpb24gU29ydGFibGVMaXN0KHsgaXRlbXMsIGNoaWxkcmVuLCBvblNvcnRFbmQsIGtleXMgfSkge1xuICBjb25zdCBhY3RpdmF0aW9uQ29uc3RyYWludCA9IHsgZGlzdGFuY2U6IDQgfTtcbiAgY29uc3Qgc2Vuc29ycyA9IHVzZVNlbnNvcnMoXG4gICAgdXNlU2Vuc29yKE1vdXNlU2Vuc29yLCB7IGFjdGl2YXRpb25Db25zdHJhaW50IH0pLFxuICAgIHVzZVNlbnNvcihUb3VjaFNlbnNvciwgeyBhY3RpdmF0aW9uQ29uc3RyYWludCB9KSxcbiAgKTtcblxuICBmdW5jdGlvbiBoYW5kbGVTb3J0RW5kKHsgYWN0aXZlLCBvdmVyIH0pIHtcbiAgICBvblNvcnRFbmQoe1xuICAgICAgb2xkSW5kZXg6IGtleXMuaW5kZXhPZihhY3RpdmUuaWQpLFxuICAgICAgbmV3SW5kZXg6IGtleXMuaW5kZXhPZihvdmVyLmlkKSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdj5cbiAgICAgIDxEbmRDb250ZXh0XG4gICAgICAgIG1vZGlmaWVycz17W3Jlc3RyaWN0VG9QYXJlbnRFbGVtZW50XX1cbiAgICAgICAgY29sbGlzaW9uRGV0ZWN0aW9uPXtjbG9zZXN0Q2VudGVyfVxuICAgICAgICBzZW5zb3JzPXtzZW5zb3JzfVxuICAgICAgICBvbkRyYWdFbmQ9e2hhbmRsZVNvcnRFbmR9XG4gICAgICA+XG4gICAgICAgIDxTb3J0YWJsZUNvbnRleHQgaXRlbXM9e2l0ZW1zfT57Y2hpbGRyZW59PC9Tb3J0YWJsZUNvbnRleHQ+XG4gICAgICA8L0RuZENvbnRleHQ+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFNvcnRhYmxlTGlzdEl0ZW0ocHJvcHMpIHtcbiAgY29uc3QgeyBzZXROb2RlUmVmLCB0cmFuc2Zvcm0sIHRyYW5zaXRpb24gfSA9IHVzZVNvcnRhYmxlKHtcbiAgICBpZDogcHJvcHMuaWQsXG4gIH0pO1xuXG4gIGNvbnN0IHN0eWxlID0ge1xuICAgIHRyYW5zZm9ybTogQ1NTLlRyYW5zZm9ybS50b1N0cmluZyh0cmFuc2Zvcm0pLFxuICAgIHRyYW5zaXRpb24sXG4gIH07XG5cbiAgY29uc3QgeyBjb2xsYXBzZWQgfSA9IHByb3BzO1xuXG4gIHJldHVybiAoXG4gICAgPExpc3RJdGVtXG4gICAgICBzb3J0YWJsZVxuICAgICAgcmVmPXtzZXROb2RlUmVmfVxuICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgY3NzPXtbc3R5bGVzLmxpc3RDb250cm9sSXRlbSwgY29sbGFwc2VkICYmIHN0eWxlcy5saXN0Q29udHJvbEl0ZW1Db2xsYXBzZWRdfVxuICAgID5cbiAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICA8L0xpc3RJdGVtPlxuICApO1xufVxuXG5mdW5jdGlvbiBEcmFnSGFuZGxlKHsgY2hpbGRyZW4sIGlkIH0pIHtcbiAgY29uc3QgeyBhdHRyaWJ1dGVzLCBsaXN0ZW5lcnMgfSA9IHVzZVNvcnRhYmxlKHtcbiAgICBpZCxcbiAgfSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IHsuLi5hdHRyaWJ1dGVzfSB7Li4ubGlzdGVuZXJzfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuY29uc3QgdmFsdWVUeXBlcyA9IHtcbiAgU0lOR0xFOiAnU0lOR0xFJyxcbiAgTVVMVElQTEU6ICdNVUxUSVBMRScsXG4gIE1JWEVEOiAnTUlYRUQnLFxufTtcblxuZnVuY3Rpb24gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgbGFiZWwsIGl0ZW0pIHtcbiAgY29uc3QgZGF0YSA9IHN0cmluZ1RlbXBsYXRlLmFkZEZpbGVUZW1wbGF0ZUZpZWxkcyhcbiAgICBlbnRyeS5nZXQoJ3BhdGgnKSxcbiAgICBpdGVtLnNldCgnZmllbGRzLmxhYmVsJywgbGFiZWwpLFxuICApO1xuICByZXR1cm4gc3RyaW5nVGVtcGxhdGUuY29tcGlsZVN0cmluZ1RlbXBsYXRlKHN1bW1hcnksIG51bGwsICcnLCBkYXRhKTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVJdGVtKGZpZWxkLCBpdGVtKSB7XG4gIGlmICghTWFwLmlzTWFwKGl0ZW0pKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYCcke2ZpZWxkLmdldCgnbmFtZScpfScgZmllbGQgaXRlbSB2YWx1ZSB2YWx1ZSBzaG91bGQgYmUgYSBtYXAgYnV0IGlzIGEgJyR7dHlwZW9mIGl0ZW19J2AsXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIExhYmVsQ29tcG9uZW50KHsgZmllbGQsIGlzQWN0aXZlLCBoYXNFcnJvcnMsIHVuaXF1ZUZpZWxkSWQsIGlzRmllbGRPcHRpb25hbCwgdCB9KSB7XG4gIGNvbnN0IGxhYmVsID0gYCR7ZmllbGQuZ2V0KCdsYWJlbCcsIGZpZWxkLmdldCgnbmFtZScpKX1gO1xuICByZXR1cm4gKFxuICAgIDxGaWVsZExhYmVsIGlzQWN0aXZlPXtpc0FjdGl2ZX0gaGFzRXJyb3JzPXtoYXNFcnJvcnN9IGh0bWxGb3I9e3VuaXF1ZUZpZWxkSWR9PlxuICAgICAge2xhYmVsfSB7YCR7aXNGaWVsZE9wdGlvbmFsID8gYCAoJHt0KCdlZGl0b3IuZWRpdG9yQ29udHJvbC5maWVsZC5vcHRpb25hbCcpfSlgIDogJyd9YH1cbiAgICA8L0ZpZWxkTGFiZWw+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExpc3RDb250cm9sIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgY2hpbGRSZWZzID0ge307XG5cbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICBtZXRhZGF0YTogSW1tdXRhYmxlUHJvcFR5cGVzLm1hcCxcbiAgICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvbkNoYW5nZU9iamVjdDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvblZhbGlkYXRlT2JqZWN0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHZhbGlkYXRlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHZhbHVlOiBJbW11dGFibGVQcm9wVHlwZXMubGlzdCxcbiAgICBmaWVsZDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBmb3JJRDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjb250cm9sUmVmOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBtZWRpYVBhdGhzOiBJbW11dGFibGVQcm9wVHlwZXMubWFwLmlzUmVxdWlyZWQsXG4gICAgZ2V0QXNzZXQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25PcGVuTWVkaWFMaWJyYXJ5OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uQWRkQXNzZXQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25SZW1vdmVJbnNlcnRlZE1lZGlhOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGNsYXNzTmFtZVdyYXBwZXI6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBzZXRBY3RpdmVTdHlsZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBzZXRJbmFjdGl2ZVN0eWxlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGVkaXRvckNvbnRyb2w6IFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkLFxuICAgIHJlc29sdmVXaWRnZXQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgY2xlYXJGaWVsZEVycm9yczogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBmaWVsZHNFcnJvcnM6IEltbXV0YWJsZVByb3BUeXBlcy5tYXAuaXNSZXF1aXJlZCxcbiAgICBlbnRyeTogSW1tdXRhYmxlUHJvcFR5cGVzLm1hcC5pc1JlcXVpcmVkLFxuICAgIHQ6IFByb3BUeXBlcy5mdW5jLFxuICB9O1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgdmFsdWU6IExpc3QoKSxcbiAgICBwYXJlbnRJZHM6IFtdLFxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIGNvbnN0IHsgZmllbGQsIHZhbHVlIH0gPSBwcm9wcztcbiAgICBjb25zdCBsaXN0Q29sbGFwc2VkID0gZmllbGQuZ2V0KCdjb2xsYXBzZWQnLCB0cnVlKTtcbiAgICBjb25zdCBpdGVtc0NvbGxhcHNlZCA9ICh2YWx1ZSAmJiBBcnJheSh2YWx1ZS5zaXplKS5maWxsKGxpc3RDb2xsYXBzZWQpKSB8fCBbXTtcbiAgICBjb25zdCBrZXlzID0gKHZhbHVlICYmIEFycmF5LmZyb20oeyBsZW5ndGg6IHZhbHVlLnNpemUgfSwgKCkgPT4gdXVpZCgpKSkgfHwgW107XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgbGlzdENvbGxhcHNlZCxcbiAgICAgIGl0ZW1zQ29sbGFwc2VkLFxuICAgICAgdmFsdWU6IHRoaXMudmFsdWVUb1N0cmluZyh2YWx1ZSksXG4gICAgICBrZXlzLFxuICAgIH07XG4gIH1cblxuICB2YWx1ZVRvU3RyaW5nID0gdmFsdWUgPT4ge1xuICAgIGxldCBzdHJpbmdWYWx1ZTtcbiAgICBpZiAoTGlzdC5pc0xpc3QodmFsdWUpIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBzdHJpbmdWYWx1ZSA9IHZhbHVlLmpvaW4oJywnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgRXhwZWN0ZWQgTGlzdCB2YWx1ZSB0byBiZSBhbiBhcnJheSBidXQgcmVjZWl2ZWQgJyR7dmFsdWV9JyB3aXRoIHR5cGUgb2YgJyR7dHlwZW9mIHZhbHVlfScuIFBsZWFzZSBjaGVjayB0aGUgdmFsdWUgcHJvdmlkZWQgdG8gdGhlICcke3RoaXMucHJvcHMuZmllbGQuZ2V0KFxuICAgICAgICAgICduYW1lJyxcbiAgICAgICAgKX0nIGZpZWxkYCxcbiAgICAgICk7XG4gICAgICBzdHJpbmdWYWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBzdHJpbmdWYWx1ZS5yZXBsYWNlKC8sKFteXFxzXXwkKS9nLCAnLCAkMScpO1xuICB9O1xuXG4gIGdldFZhbHVlVHlwZSA9ICgpID0+IHtcbiAgICBjb25zdCB7IGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChmaWVsZC5nZXQoJ2ZpZWxkcycpKSB7XG4gICAgICByZXR1cm4gdmFsdWVUeXBlcy5NVUxUSVBMRTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkLmdldCgnZmllbGQnKSkge1xuICAgICAgcmV0dXJuIHZhbHVlVHlwZXMuU0lOR0xFO1xuICAgIH0gZWxzZSBpZiAoZmllbGQuZ2V0KFRZUEVTX0tFWSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZVR5cGVzLk1JWEVEO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH07XG5cbiAgdW5pcXVlRmllbGRJZCA9IHVuaXF1ZUlkKGAke3RoaXMucHJvcHMuZmllbGQuZ2V0KCduYW1lJyl9LWZpZWxkLWApO1xuICAvKipcbiAgICogQWx3YXlzIHVwZGF0ZSBzbyB0aGF0IGVhY2ggbmVzdGVkIHdpZGdldCBoYXMgdGhlIG9wdGlvbiB0byB1cGRhdGUuIFRoaXMgaXNcbiAgICogcmVxdWlyZWQgYmVjYXVzZSBDb250cm9sSE9DIHByb3ZpZGVzIGEgZGVmYXVsdCBgc2hvdWxkQ29tcG9uZW50VXBkYXRlYFxuICAgKiB3aGljaCBvbmx5IHVwZGF0ZXMgaWYgdGhlIHZhbHVlIGNoYW5nZXMsIGJ1dCBldmVyeSB3aWRnZXQgbXVzdCBiZSBhbGxvd2VkXG4gICAqIHRvIG92ZXJyaWRlIHRoaXMuXG4gICAqL1xuICBzaG91bGRDb21wb25lbnRVcGRhdGUoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBoYW5kbGVDaGFuZ2UgPSBlID0+IHtcbiAgICBjb25zdCB7IG9uQ2hhbmdlIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy5zdGF0ZS52YWx1ZTtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IGUudGFyZ2V0LnZhbHVlLnRyaW0oKTtcbiAgICBjb25zdCBsaXN0VmFsdWUgPSBuZXdWYWx1ZSA/IG5ld1ZhbHVlLnNwbGl0KCcsJykgOiBbXTtcbiAgICBpZiAobmV3VmFsdWUubWF0Y2goLywkLykgJiYgb2xkVmFsdWUubWF0Y2goLywgJC8pKSB7XG4gICAgICBsaXN0VmFsdWUucG9wKCk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPSB0aGlzLnZhbHVlVG9TdHJpbmcobGlzdFZhbHVlKTtcbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHBhcnNlZFZhbHVlIH0pO1xuICAgIG9uQ2hhbmdlKExpc3QobGlzdFZhbHVlLm1hcCh2YWwgPT4gdmFsLnRyaW0oKSkpKTtcbiAgfTtcblxuICBoYW5kbGVGb2N1cyA9ICgpID0+IHtcbiAgICB0aGlzLnByb3BzLnNldEFjdGl2ZVN0eWxlKCk7XG4gIH07XG5cbiAgaGFuZGxlQmx1ciA9IGUgPT4ge1xuICAgIGNvbnN0IGxpc3RWYWx1ZSA9IGUudGFyZ2V0LnZhbHVlXG4gICAgICAuc3BsaXQoJywnKVxuICAgICAgLm1hcChlbCA9PiBlbC50cmltKCkpXG4gICAgICAuZmlsdGVyKGVsID0+IGVsKTtcbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHRoaXMudmFsdWVUb1N0cmluZyhsaXN0VmFsdWUpIH0pO1xuICAgIHRoaXMucHJvcHMuc2V0SW5hY3RpdmVTdHlsZSgpO1xuICB9O1xuXG4gIGhhbmRsZUFkZCA9IGUgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHBhcnNlZFZhbHVlID1cbiAgICAgIHRoaXMuZ2V0VmFsdWVUeXBlKCkgPT09IHZhbHVlVHlwZXMuU0lOR0xFXG4gICAgICAgID8gdGhpcy5zaW5nbGVEZWZhdWx0KClcbiAgICAgICAgOiBmcm9tSlModGhpcy5tdWx0aXBsZURlZmF1bHQoZmllbGQuZ2V0KCdmaWVsZHMnKSkpO1xuICAgIHRoaXMuYWRkSXRlbShwYXJzZWRWYWx1ZSk7XG4gIH07XG5cbiAgc2luZ2xlRGVmYXVsdCA9ICgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5maWVsZC5nZXRJbihbJ2ZpZWxkJywgJ2RlZmF1bHQnXSwgbnVsbCk7XG4gIH07XG5cbiAgbXVsdGlwbGVEZWZhdWx0ID0gZmllbGRzID0+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KGZpZWxkcyk7XG4gIH07XG5cbiAgaGFuZGxlQWRkVHlwZSA9ICh0eXBlLCB0eXBlS2V5KSA9PiB7XG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPSBmcm9tSlModGhpcy5taXhlZERlZmF1bHQodHlwZUtleSwgdHlwZSkpO1xuICAgIHRoaXMuYWRkSXRlbShwYXJzZWRWYWx1ZSk7XG4gIH07XG5cbiAgbWl4ZWREZWZhdWx0ID0gKHR5cGVLZXksIHR5cGUpID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZFR5cGUgPSB0aGlzLnByb3BzLmZpZWxkLmdldChUWVBFU19LRVkpLmZpbmQoZiA9PiBmLmdldCgnbmFtZScpID09PSB0eXBlKTtcbiAgICBjb25zdCBmaWVsZHMgPSBzZWxlY3RlZFR5cGUuZ2V0KCdmaWVsZHMnKSB8fCBbc2VsZWN0ZWRUeXBlLmdldCgnZmllbGQnKV07XG5cbiAgICByZXR1cm4gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KGZpZWxkcywgeyBbdHlwZUtleV06IHR5cGUgfSk7XG4gIH07XG5cbiAgZ2V0RmllbGRzRGVmYXVsdCA9IChmaWVsZHMsIGluaXRpYWxWYWx1ZSA9IHt9KSA9PiB7XG4gICAgcmV0dXJuIGZpZWxkcy5yZWR1Y2UoKGFjYywgaXRlbSkgPT4ge1xuICAgICAgY29uc3Qgc3ViZmllbGRzID0gaXRlbS5nZXQoJ2ZpZWxkJykgfHwgaXRlbS5nZXQoJ2ZpZWxkcycpO1xuICAgICAgY29uc3Qgb2JqZWN0ID0gaXRlbS5nZXQoJ3dpZGdldCcpID09ICdvYmplY3QnO1xuICAgICAgY29uc3QgbmFtZSA9IGl0ZW0uZ2V0KCduYW1lJyk7XG4gICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSBpdGVtLmdldCgnZGVmYXVsdCcsIG51bGwpO1xuXG4gICAgICBpZiAoTGlzdC5pc0xpc3Qoc3ViZmllbGRzKSAmJiBvYmplY3QpIHtcbiAgICAgICAgY29uc3Qgc3ViRGVmYXVsdFZhbHVlID0gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KHN1YmZpZWxkcyk7XG4gICAgICAgICFpc0VtcHR5KHN1YkRlZmF1bHRWYWx1ZSkgJiYgKGFjY1tuYW1lXSA9IHN1YkRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9XG5cbiAgICAgIGlmIChNYXAuaXNNYXAoc3ViZmllbGRzKSAmJiBvYmplY3QpIHtcbiAgICAgICAgY29uc3Qgc3ViRGVmYXVsdFZhbHVlID0gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KFtzdWJmaWVsZHNdKTtcbiAgICAgICAgIWlzRW1wdHkoc3ViRGVmYXVsdFZhbHVlKSAmJiAoYWNjW25hbWVdID0gc3ViRGVmYXVsdFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH1cblxuICAgICAgaWYgKGRlZmF1bHRWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBhY2NbbmFtZV0gPSBkZWZhdWx0VmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgaW5pdGlhbFZhbHVlKTtcbiAgfTtcblxuICBhZGRJdGVtID0gcGFyc2VkVmFsdWUgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWUsIG9uQ2hhbmdlLCBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBhZGRUb1RvcCA9IGZpZWxkLmdldCgnYWRkX3RvX3RvcCcsIGZhbHNlKTtcblxuICAgIGNvbnN0IGl0ZW1LZXkgPSB1dWlkKCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBpdGVtc0NvbGxhcHNlZDogYWRkVG9Ub3BcbiAgICAgICAgPyBbZmFsc2UsIC4uLnRoaXMuc3RhdGUuaXRlbXNDb2xsYXBzZWRdXG4gICAgICAgIDogWy4uLnRoaXMuc3RhdGUuaXRlbXNDb2xsYXBzZWQsIGZhbHNlXSxcbiAgICAgIGtleXM6IGFkZFRvVG9wID8gW2l0ZW1LZXksIC4uLnRoaXMuc3RhdGUua2V5c10gOiBbLi4udGhpcy5zdGF0ZS5rZXlzLCBpdGVtS2V5XSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGxpc3RWYWx1ZSA9IHZhbHVlIHx8IExpc3QoKTtcbiAgICBpZiAoYWRkVG9Ub3ApIHtcbiAgICAgIG9uQ2hhbmdlKGxpc3RWYWx1ZS51bnNoaWZ0KHBhcnNlZFZhbHVlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uQ2hhbmdlKGxpc3RWYWx1ZS5wdXNoKHBhcnNlZFZhbHVlKSk7XG4gICAgfVxuICB9O1xuXG4gIHByb2Nlc3NDb250cm9sUmVmID0gcmVmID0+IHtcbiAgICBpZiAoIXJlZikgcmV0dXJuO1xuICAgIGNvbnN0IHtcbiAgICAgIHByb3BzOiB7IHZhbGlkYXRpb25LZXk6IGtleSB9LFxuICAgIH0gPSByZWY7XG4gICAgdGhpcy5jaGlsZFJlZnNba2V5XSA9IHJlZjtcbiAgICB0aGlzLnByb3BzLmNvbnRyb2xSZWY/Lih0aGlzKTtcbiAgfTtcblxuICB2YWxpZGF0ZSA9ICgpID0+IHtcbiAgICAvLyBGaXJzdCB2YWxpZGF0ZSBjaGlsZCB3aWRnZXRzIGlmIHRoaXMgaXMgYSBjb21wbGV4IGxpc3RcbiAgICBjb25zdCBoYXNDaGlsZFdpZGdldHMgPSB0aGlzLmdldFZhbHVlVHlwZSgpICYmIE9iamVjdC5rZXlzKHRoaXMuY2hpbGRSZWZzKS5sZW5ndGggPiAwO1xuICAgIGlmIChoYXNDaGlsZFdpZGdldHMpIHtcbiAgICAgIE9iamVjdC52YWx1ZXModGhpcy5jaGlsZFJlZnMpLmZvckVhY2god2lkZ2V0ID0+IHtcbiAgICAgICAgd2lkZ2V0Py52YWxpZGF0ZT8uKCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9wcy52YWxpZGF0ZSgpO1xuICAgIH1cbiAgICB0aGlzLnByb3BzLm9uVmFsaWRhdGVPYmplY3QodGhpcy5wcm9wcy5mb3JJRCwgdGhpcy52YWxpZGF0ZVNpemUoKSk7XG4gIH07XG5cbiAgdmFsaWRhdGVTaXplID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgZmllbGQsIHZhbHVlLCB0IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG1pbiA9IGZpZWxkLmdldCgnbWluJyk7XG4gICAgY29uc3QgbWF4ID0gZmllbGQuZ2V0KCdtYXgnKTtcbiAgICBjb25zdCByZXF1aXJlZCA9IGZpZWxkLmdldCgncmVxdWlyZWQnLCB0cnVlKTtcblxuICAgIGlmICghcmVxdWlyZWQgJiYgIXZhbHVlPy5zaXplKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgZXJyb3IgPSB2YWxpZGF0aW9ucy52YWxpZGF0ZU1pbk1heChcbiAgICAgIHQsXG4gICAgICBmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpLFxuICAgICAgdmFsdWUsXG4gICAgICBtaW4sXG4gICAgICBtYXgsXG4gICAgKTtcblxuICAgIHJldHVybiBlcnJvciA/IFtlcnJvcl0gOiBbXTtcbiAgfTtcblxuICAvKipcbiAgICogSW4gY2FzZSB0aGUgYG9uQ2hhbmdlT2JqZWN0YCBmdW5jdGlvbiBpcyBmcm96ZW4gYnkgYSBjaGlsZCB3aWRnZXQgaW1wbGVtZW50YXRpb24sXG4gICAqIGUuZy4gd2hlbiBkZWJvdW5jZWQsIGFsd2F5cyBnZXQgdGhlIGxhdGVzdCBvYmplY3QgdmFsdWUgaW5zdGVhZCBvZiB1c2luZ1xuICAgKiBgdGhpcy5wcm9wcy52YWx1ZWAgZGlyZWN0bHkuXG4gICAqL1xuICBnZXRPYmplY3RWYWx1ZSA9IGlkeCA9PiB0aGlzLnByb3BzLnZhbHVlLmdldChpZHgpIHx8IE1hcCgpO1xuXG4gIGhhbmRsZUNoYW5nZUZvcihpbmRleCkge1xuICAgIHJldHVybiAoZiwgbmV3VmFsdWUsIG5ld01ldGFkYXRhKSA9PiB7XG4gICAgICBjb25zdCB7IHZhbHVlLCBtZXRhZGF0YSwgb25DaGFuZ2UsIGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBmaWVsZC5nZXQoJ25hbWUnKTtcbiAgICAgIGNvbnN0IGxpc3RGaWVsZE9iamVjdFdpZGdldCA9IGZpZWxkLmdldEluKFsnZmllbGQnLCAnd2lkZ2V0J10pID09PSAnb2JqZWN0JztcbiAgICAgIGNvbnN0IHdpdGhOYW1lS2V5ID1cbiAgICAgICAgdGhpcy5nZXRWYWx1ZVR5cGUoKSAhPT0gdmFsdWVUeXBlcy5TSU5HTEUgfHxcbiAgICAgICAgKHRoaXMuZ2V0VmFsdWVUeXBlKCkgPT09IHZhbHVlVHlwZXMuU0lOR0xFICYmIGxpc3RGaWVsZE9iamVjdFdpZGdldCk7XG4gICAgICBjb25zdCBuZXdPYmplY3RWYWx1ZSA9IHdpdGhOYW1lS2V5XG4gICAgICAgID8gdGhpcy5nZXRPYmplY3RWYWx1ZShpbmRleCkuc2V0KGYuZ2V0KCduYW1lJyksIG5ld1ZhbHVlKVxuICAgICAgICA6IG5ld1ZhbHVlO1xuICAgICAgY29uc3QgcGFyc2VkTWV0YWRhdGEgPSB7XG4gICAgICAgIFtjb2xsZWN0aW9uTmFtZV06IE9iamVjdC5hc3NpZ24obWV0YWRhdGEgPyBtZXRhZGF0YS50b0pTKCkgOiB7fSwgbmV3TWV0YWRhdGEgfHwge30pLFxuICAgICAgfTtcbiAgICAgIG9uQ2hhbmdlKHZhbHVlLnNldChpbmRleCwgbmV3T2JqZWN0VmFsdWUpLCBwYXJzZWRNZXRhZGF0YSk7XG4gICAgfTtcbiAgfVxuXG4gIGhhbmRsZVJlbW92ZSA9IChpbmRleCwgZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3Qge1xuICAgICAgdmFsdWUsXG4gICAgICBtZXRhZGF0YSxcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgZmllbGQsXG4gICAgICBjbGVhckZpZWxkRXJyb3JzLFxuICAgICAgb25WYWxpZGF0ZU9iamVjdCxcbiAgICAgIGZvcklELFxuICAgICAgZmllbGRzRXJyb3JzLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBmaWVsZC5nZXQoJ25hbWUnKTtcbiAgICBjb25zdCBpc1NpbmdsZUZpZWxkID0gdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5TSU5HTEU7XG5cbiAgICBjb25zdCBtZXRhZGF0YVJlbW92ZVBhdGggPSBpc1NpbmdsZUZpZWxkID8gdmFsdWUuZ2V0KGluZGV4KSA6IHZhbHVlLmdldChpbmRleCkudmFsdWVTZXEoKTtcbiAgICBjb25zdCBwYXJzZWRNZXRhZGF0YSA9XG4gICAgICBtZXRhZGF0YSAmJiAhbWV0YWRhdGEuaXNFbXB0eSgpXG4gICAgICAgID8geyBbY29sbGVjdGlvbk5hbWVdOiBtZXRhZGF0YS5yZW1vdmVJbihtZXRhZGF0YVJlbW92ZVBhdGgpIH1cbiAgICAgICAgOiBtZXRhZGF0YTtcblxuICAgIC8vIEdldCB0aGUga2V5IG9mIHRoZSBpdGVtIGJlaW5nIHJlbW92ZWRcbiAgICBjb25zdCByZW1vdmVkS2V5ID0gdGhpcy5zdGF0ZS5rZXlzW2luZGV4XTtcblxuICAgIC8vIFVwZGF0ZSBzdGF0ZSB3aGlsZSBwcmVzZXJ2aW5nIGtleXMgZm9yIHJlbWFpbmluZyBpdGVtc1xuICAgIGNvbnN0IG5ld0tleXMgPSBbLi4udGhpcy5zdGF0ZS5rZXlzXTtcbiAgICBuZXdLZXlzLnNwbGljZShpbmRleCwgMSk7XG4gICAgaXRlbXNDb2xsYXBzZWQuc3BsaWNlKGluZGV4LCAxKTtcblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXNDb2xsYXBzZWQ6IFsuLi5pdGVtc0NvbGxhcHNlZF0sXG4gICAgICBrZXlzOiBuZXdLZXlzLFxuICAgIH0pO1xuXG4gICAgLy8gQ2xlYXIgdGhlIHJlZiBmb3IgdGhlIHJlbW92ZWQgaXRlbVxuICAgIGRlbGV0ZSB0aGlzLmNoaWxkUmVmc1tyZW1vdmVkS2V5XTtcblxuICAgIGNvbnN0IG5ld1ZhbHVlID0gdmFsdWUuZGVsZXRlKGluZGV4KTtcblxuICAgIC8vIENsZWFyIGVycm9ycyBmb3IgdGhlIHJlbW92ZWQgaXRlbSBhbmQgaXRzIGNoaWxkcmVuXG4gICAgaWYgKGZpZWxkc0Vycm9ycykge1xuICAgICAgT2JqZWN0LmVudHJpZXMoZmllbGRzRXJyb3JzLnRvSlMoKSkuZm9yRWFjaCgoW2ZpZWxkSWQsIGVycm9yc10pID0+IHtcbiAgICAgICAgaWYgKGVycm9ycy5zb21lKGVyciA9PiBlcnIucGFyZW50SWRzPy5pbmNsdWRlcyhyZW1vdmVkS2V5KSkpIHtcbiAgICAgICAgICBjbGVhckZpZWxkRXJyb3JzKGZpZWxkSWQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBJZiBsaXN0IGlzIGVtcHR5LCBtYXJrIGl0IGFzIHZhbGlkXG4gICAgaWYgKG5ld1ZhbHVlLnNpemUgPT09IDApIHtcbiAgICAgIGNsZWFyRmllbGRFcnJvcnMoZm9ySUQpO1xuICAgICAgb25WYWxpZGF0ZU9iamVjdChmb3JJRCwgW10pO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSB0aGUgdmFsdWUgbGFzdCB0byBlbnN1cmUgYWxsIGVycm9yIHN0YXRlcyBhcmUgY2xlYXJlZFxuICAgIG9uQ2hhbmdlKG5ld1ZhbHVlLCBwYXJzZWRNZXRhZGF0YSk7XG4gIH07XG5cbiAgaGFuZGxlSXRlbUNvbGxhcHNlVG9nZ2xlID0gKGluZGV4LCBldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBuZXdJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLm1hcCgoY29sbGFwc2VkLCBpdGVtSW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCA9PT0gaXRlbUluZGV4KSB7XG4gICAgICAgIHJldHVybiAhY29sbGFwc2VkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbGxhcHNlZDtcbiAgICB9KTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGl0ZW1zQ29sbGFwc2VkOiBuZXdJdGVtc0NvbGxhcHNlZCxcbiAgICB9KTtcbiAgfTtcblxuICBoYW5kbGVDb2xsYXBzZUFsbFRvZ2dsZSA9IGUgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IHZhbHVlLCBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkLCBsaXN0Q29sbGFwc2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IG1pbmltaXplQ29sbGFwc2VkSXRlbXMgPSBmaWVsZC5nZXQoJ21pbmltaXplX2NvbGxhcHNlZCcsIGZhbHNlKTtcbiAgICBjb25zdCBsaXN0Q29sbGFwc2VkQnlEZWZhdWx0ID0gZmllbGQuZ2V0KCdjb2xsYXBzZWQnLCB0cnVlKTtcbiAgICBjb25zdCBhbGxJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLmV2ZXJ5KHZhbCA9PiB2YWwgPT09IHRydWUpO1xuXG4gICAgaWYgKG1pbmltaXplQ29sbGFwc2VkSXRlbXMpIHtcbiAgICAgIGxldCB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZDtcbiAgICAgIC8vIE9ubHkgYWxsb3cgY29sbGFwc2luZyBhbGwgaXRlbXMgaW4gdGhpcyBtb2RlIGJ1dCBub3Qgb3BlbmluZyBhbGwgYXQgb25jZVxuICAgICAgaWYgKCFsaXN0Q29sbGFwc2VkIHx8ICFsaXN0Q29sbGFwc2VkQnlEZWZhdWx0KSB7XG4gICAgICAgIHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCA9IEFycmF5KHZhbHVlLnNpemUpLmZpbGwoIWxpc3RDb2xsYXBzZWQpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGxpc3RDb2xsYXBzZWQ6ICFsaXN0Q29sbGFwc2VkLCBpdGVtc0NvbGxhcHNlZDogdXBkYXRlZEl0ZW1zQ29sbGFwc2VkIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgaXRlbXNDb2xsYXBzZWQ6IEFycmF5KHZhbHVlLnNpemUpLmZpbGwoIWFsbEl0ZW1zQ29sbGFwc2VkKSB9KTtcbiAgICB9XG4gIH07XG5cbiAgb2JqZWN0TGFiZWwoaXRlbSkge1xuICAgIGNvbnN0IHsgZmllbGQsIGVudHJ5IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHZhbHVlVHlwZSA9IHRoaXMuZ2V0VmFsdWVUeXBlKCk7XG4gICAgc3dpdGNoICh2YWx1ZVR5cGUpIHtcbiAgICAgIGNhc2UgdmFsdWVUeXBlcy5NSVhFRDoge1xuICAgICAgICBpZiAoIXZhbGlkYXRlSXRlbShmaWVsZCwgaXRlbSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXRlbVR5cGUgPSBnZXRUeXBlZEZpZWxkRm9yVmFsdWUoZmllbGQsIGl0ZW0pO1xuICAgICAgICBjb25zdCBsYWJlbCA9IGl0ZW1UeXBlLmdldCgnbGFiZWwnLCBpdGVtVHlwZS5nZXQoJ25hbWUnKSk7XG4gICAgICAgIC8vIGVhY2ggdHlwZSBjYW4gaGF2ZSBpdHMgb3duIHN1bW1hcnksIGJ1dCBkZWZhdWx0IHRvIHRoZSBsaXN0IHN1bW1hcnkgaWYgZXhpc3RzXG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBpdGVtVHlwZS5nZXQoJ3N1bW1hcnknLCBmaWVsZC5nZXQoJ3N1bW1hcnknKSk7XG4gICAgICAgIGNvbnN0IGxhYmVsUmV0dXJuID0gc3VtbWFyeSA/IGhhbmRsZVN1bW1hcnkoc3VtbWFyeSwgZW50cnksIGxhYmVsLCBpdGVtKSA6IGxhYmVsO1xuICAgICAgICByZXR1cm4gbGFiZWxSZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlIHZhbHVlVHlwZXMuU0lOR0xFOiB7XG4gICAgICAgIGNvbnN0IHNpbmdsZUZpZWxkID0gZmllbGQuZ2V0KCdmaWVsZCcpO1xuICAgICAgICBjb25zdCBsYWJlbCA9IHNpbmdsZUZpZWxkLmdldCgnbGFiZWwnLCBzaW5nbGVGaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBmaWVsZC5nZXQoJ3N1bW1hcnknKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGZyb21KUyh7IFtzaW5nbGVGaWVsZC5nZXQoJ25hbWUnKV06IGl0ZW0gfSk7XG4gICAgICAgIGNvbnN0IGxhYmVsUmV0dXJuID0gc3VtbWFyeSA/IGhhbmRsZVN1bW1hcnkoc3VtbWFyeSwgZW50cnksIGxhYmVsLCBkYXRhKSA6IGxhYmVsO1xuICAgICAgICByZXR1cm4gbGFiZWxSZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlIHZhbHVlVHlwZXMuTVVMVElQTEU6IHtcbiAgICAgICAgaWYgKCF2YWxpZGF0ZUl0ZW0oZmllbGQsIGl0ZW0pKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG11bHRpRmllbGRzID0gZmllbGQuZ2V0KCdmaWVsZHMnKTtcbiAgICAgICAgY29uc3QgbGFiZWxGaWVsZCA9IG11bHRpRmllbGRzICYmIG11bHRpRmllbGRzLmZpcnN0KCk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gaXRlbS5nZXQobGFiZWxGaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBmaWVsZC5nZXQoJ3N1bW1hcnknKTtcbiAgICAgICAgY29uc3QgbGFiZWxSZXR1cm4gPSBzdW1tYXJ5ID8gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgdmFsdWUsIGl0ZW0pIDogdmFsdWU7XG4gICAgICAgIHJldHVybiAobGFiZWxSZXR1cm4gfHwgYE5vICR7bGFiZWxGaWVsZC5nZXQoJ25hbWUnKX1gKS50b1N0cmluZygpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBvblNvcnRFbmQgPSAoeyBvbGRJbmRleCwgbmV3SW5kZXggfSkgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCwga2V5cyB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIC8vIFVwZGF0ZSB2YWx1ZVxuICAgIGNvbnN0IGl0ZW0gPSB2YWx1ZS5nZXQob2xkSW5kZXgpO1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gdmFsdWUuZGVsZXRlKG9sZEluZGV4KS5pbnNlcnQobmV3SW5kZXgsIGl0ZW0pO1xuICAgIHRoaXMucHJvcHMub25DaGFuZ2UobmV3VmFsdWUpO1xuXG4gICAgLy8gVXBkYXRlIGNvbGxhcHNpbmdcbiAgICBjb25zdCBjb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZFtvbGRJbmRleF07XG4gICAgaXRlbXNDb2xsYXBzZWQuc3BsaWNlKG9sZEluZGV4LCAxKTtcbiAgICBjb25zdCB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgPSBbLi4uaXRlbXNDb2xsYXBzZWRdO1xuICAgIHVwZGF0ZWRJdGVtc0NvbGxhcHNlZC5zcGxpY2UobmV3SW5kZXgsIDAsIGNvbGxhcHNlZCk7XG5cbiAgICAvLyBNb3ZlIGtleXMgdG8gbWFpbnRhaW4gcmVsYXRpb25zaGlwc1xuICAgIGNvbnN0IG1vdmVkS2V5ID0ga2V5c1tvbGRJbmRleF07XG4gICAgY29uc3QgdXBkYXRlZEtleXMgPSBbLi4ua2V5c107XG4gICAgdXBkYXRlZEtleXMuc3BsaWNlKG9sZEluZGV4LCAxKTtcbiAgICB1cGRhdGVkS2V5cy5zcGxpY2UobmV3SW5kZXgsIDAsIG1vdmVkS2V5KTtcblxuICAgIHRoaXMuc2V0U3RhdGUoeyBpdGVtc0NvbGxhcHNlZDogdXBkYXRlZEl0ZW1zQ29sbGFwc2VkLCBrZXlzOiB1cGRhdGVkS2V5cyB9KTtcbiAgfTtcblxuICBoYXNFcnJvciA9IGluZGV4ID0+IHtcbiAgICBjb25zdCB7IGZpZWxkc0Vycm9ycyB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoZmllbGRzRXJyb3JzICYmIGZpZWxkc0Vycm9ycy5zaXplID4gMCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZmllbGRzRXJyb3JzLnRvSlMoKSkuc29tZShhcnIgPT5cbiAgICAgICAgYXJyLnNvbWUoZXJyID0+IGVyci5wYXJlbnRJZHMgJiYgZXJyLnBhcmVudElkcy5pbmNsdWRlcyh0aGlzLnN0YXRlLmtleXNbaW5kZXhdKSksXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICBmb2N1cyhwYXRoKSB7XG4gICAgY29uc3QgW2luZGV4LCAuLi5yZW1haW5pbmdQYXRoXSA9IHBhdGguc3BsaXQoJy4nKTtcblxuICAgIGlmICh0aGlzLnN0YXRlLmxpc3RDb2xsYXBzZWQgfHwgdGhpcy5zdGF0ZS5pdGVtc0NvbGxhcHNlZFtpbmRleF0pIHtcbiAgICAgIGNvbnN0IG5ld0l0ZW1zQ29sbGFwc2VkID0gWy4uLnRoaXMuc3RhdGUuaXRlbXNDb2xsYXBzZWRdO1xuICAgICAgbmV3SXRlbXNDb2xsYXBzZWRbaW5kZXhdID0gZmFsc2U7XG4gICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICB7XG4gICAgICAgICAgbGlzdENvbGxhcHNlZDogZmFsc2UsXG4gICAgICAgICAgaXRlbXNDb2xsYXBzZWQ6IG5ld0l0ZW1zQ29sbGFwc2VkLFxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5zdGF0ZS5rZXlzW2luZGV4XTtcbiAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jaGlsZFJlZnNba2V5XTtcbiAgICAgICAgICBpZiAoY29udHJvbD8uZm9jdXMpIHtcbiAgICAgICAgICAgIGNvbnRyb2wuZm9jdXMocmVtYWluaW5nUGF0aC5qb2luKCcuJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuc3RhdGUua2V5c1tpbmRleF07XG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jaGlsZFJlZnNba2V5XTtcbiAgICAgIGlmIChjb250cm9sPy5mb2N1cykge1xuICAgICAgICBjb250cm9sLmZvY3VzKHJlbWFpbmluZ1BhdGguam9pbignLicpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZGlzcGxheS1uYW1lXG4gIHJlbmRlckl0ZW0gPSAoaXRlbSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjbGFzc05hbWVXcmFwcGVyLFxuICAgICAgZWRpdG9yQ29udHJvbCxcbiAgICAgIG9uVmFsaWRhdGVPYmplY3QsXG4gICAgICBtZXRhZGF0YSxcbiAgICAgIGNsZWFyRmllbGRFcnJvcnMsXG4gICAgICBmaWVsZHNFcnJvcnMsXG4gICAgICBjb250cm9sUmVmLFxuICAgICAgcmVzb2x2ZVdpZGdldCxcbiAgICAgIHBhcmVudElkcyxcbiAgICAgIGZvcklELFxuICAgICAgdCxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQsIGtleXMgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgY29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWRbaW5kZXhdO1xuICAgIGNvbnN0IGtleSA9IGtleXNbaW5kZXhdO1xuICAgIGxldCBmaWVsZCA9IHRoaXMucHJvcHMuZmllbGQ7XG4gICAgY29uc3QgaGFzRXJyb3IgPSB0aGlzLmhhc0Vycm9yKGluZGV4KTtcbiAgICBjb25zdCBpc1ZhcmlhYmxlVHlwZXNMaXN0ID0gdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5NSVhFRDtcbiAgICBpZiAoaXNWYXJpYWJsZVR5cGVzTGlzdCkge1xuICAgICAgZmllbGQgPSBnZXRUeXBlZEZpZWxkRm9yVmFsdWUoZmllbGQsIGl0ZW0pO1xuICAgICAgaWYgKCFmaWVsZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJFcnJvbmVvdXNUeXBlZEl0ZW0oaW5kZXgsIGl0ZW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8U29ydGFibGVMaXN0SXRlbVxuICAgICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBjb2xsYXBzZWQgJiYgc3R5bGVzLmxpc3RDb250cm9sSXRlbUNvbGxhcHNlZF19XG4gICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIGlkPXtrZXl9XG4gICAgICAgIGtleXM9e2tleXN9XG4gICAgICA+XG4gICAgICAgIHtpc1ZhcmlhYmxlVHlwZXNMaXN0ICYmIChcbiAgICAgICAgICA8TGFiZWxDb21wb25lbnRcbiAgICAgICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgICAgIGlzQWN0aXZlPXtmYWxzZX1cbiAgICAgICAgICAgIGhhc0Vycm9ycz17aGFzRXJyb3J9XG4gICAgICAgICAgICB1bmlxdWVGaWVsZElkPXt0aGlzLnVuaXF1ZUZpZWxkSWR9XG4gICAgICAgICAgICBpc0ZpZWxkT3B0aW9uYWw9e2ZpZWxkLmdldCgncmVxdWlyZWQnKSA9PT0gZmFsc2V9XG4gICAgICAgICAgICB0PXt0fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIDxTdHlsZWRMaXN0SXRlbVRvcEJhclxuICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICAgIG9uQ29sbGFwc2VUb2dnbGU9e3BhcnRpYWwodGhpcy5oYW5kbGVJdGVtQ29sbGFwc2VUb2dnbGUsIGluZGV4KX1cbiAgICAgICAgICBkcmFnSGFuZGxlPXtEcmFnSGFuZGxlfVxuICAgICAgICAgIGlkPXtrZXl9XG4gICAgICAgICAgb25SZW1vdmU9e3BhcnRpYWwodGhpcy5oYW5kbGVSZW1vdmUsIGluZGV4KX1cbiAgICAgICAgICBkYXRhLXRlc3RpZD17YHN0eWxlZC1saXN0LWl0ZW0tdG9wLWJhci0ke2tleX1gfVxuICAgICAgICAvPlxuICAgICAgICA8TmVzdGVkT2JqZWN0TGFiZWwgY29sbGFwc2VkPXtjb2xsYXBzZWR9IGVycm9yPXtoYXNFcnJvcn0+XG4gICAgICAgICAge3RoaXMub2JqZWN0TGFiZWwoaXRlbSl9XG4gICAgICAgIDwvTmVzdGVkT2JqZWN0TGFiZWw+XG4gICAgICAgIDxDbGFzc05hbWVzPlxuICAgICAgICAgIHsoeyBjc3MsIGN4IH0pID0+IChcbiAgICAgICAgICAgIDxPYmplY3RDb250cm9sXG4gICAgICAgICAgICAgIGNsYXNzTmFtZVdyYXBwZXI9e2N4KGNsYXNzTmFtZVdyYXBwZXIsIHtcbiAgICAgICAgICAgICAgICBbY3NzYFxuICAgICAgICAgICAgICAgICAgJHtzdHlsZVN0cmluZ3MuY29sbGFwc2VkT2JqZWN0Q29udHJvbH07XG4gICAgICAgICAgICAgICAgYF06IGNvbGxhcHNlZCxcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIHZhbHVlPXtpdGVtfVxuICAgICAgICAgICAgICBmaWVsZD17ZmllbGR9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlT2JqZWN0PXt0aGlzLmhhbmRsZUNoYW5nZUZvcihpbmRleCl9XG4gICAgICAgICAgICAgIGVkaXRvckNvbnRyb2w9e2VkaXRvckNvbnRyb2x9XG4gICAgICAgICAgICAgIHJlc29sdmVXaWRnZXQ9e3Jlc29sdmVXaWRnZXR9XG4gICAgICAgICAgICAgIG1ldGFkYXRhPXttZXRhZGF0YX1cbiAgICAgICAgICAgICAgZm9yTGlzdFxuICAgICAgICAgICAgICBvblZhbGlkYXRlT2JqZWN0PXtvblZhbGlkYXRlT2JqZWN0fVxuICAgICAgICAgICAgICBjbGVhckZpZWxkRXJyb3JzPXtjbGVhckZpZWxkRXJyb3JzfVxuICAgICAgICAgICAgICBmaWVsZHNFcnJvcnM9e2ZpZWxkc0Vycm9yc31cbiAgICAgICAgICAgICAgcmVmPXt0aGlzLnByb2Nlc3NDb250cm9sUmVmfVxuICAgICAgICAgICAgICBjb250cm9sUmVmPXtjb250cm9sUmVmfVxuICAgICAgICAgICAgICB2YWxpZGF0aW9uS2V5PXtrZXl9XG4gICAgICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICAgICAgICBkYXRhLXRlc3RpZD17YG9iamVjdC1jb250cm9sLSR7a2V5fWB9XG4gICAgICAgICAgICAgIGhhc0Vycm9yPXtoYXNFcnJvcn1cbiAgICAgICAgICAgICAgcGFyZW50SWRzPXtbLi4ucGFyZW50SWRzLCBmb3JJRCwga2V5XX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9DbGFzc05hbWVzPlxuICAgICAgPC9Tb3J0YWJsZUxpc3RJdGVtPlxuICAgICk7XG4gIH07XG5cbiAgcmVuZGVyRXJyb25lb3VzVHlwZWRJdGVtKGluZGV4LCBpdGVtKSB7XG4gICAgY29uc3QgZmllbGQgPSB0aGlzLnByb3BzLmZpZWxkO1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZUZvclR5cGVkRmllbGRBbmRWYWx1ZShmaWVsZCwgaXRlbSk7XG4gICAgY29uc3Qga2V5ID0gYGl0ZW0tJHtpbmRleH1gO1xuICAgIHJldHVybiAoXG4gICAgICA8U29ydGFibGVMaXN0SXRlbVxuICAgICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBzdHlsZXMubGlzdENvbnRyb2xJdGVtQ29sbGFwc2VkXX1cbiAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICBrZXk9e2tleX1cbiAgICAgID5cbiAgICAgICAgPFN0eWxlZExpc3RJdGVtVG9wQmFyXG4gICAgICAgICAgb25Db2xsYXBzZVRvZ2dsZT17bnVsbH1cbiAgICAgICAgICBvblJlbW92ZT17cGFydGlhbCh0aGlzLmhhbmRsZVJlbW92ZSwgaW5kZXgsIGtleSl9XG4gICAgICAgICAgZHJhZ0hhbmRsZT17RHJhZ0hhbmRsZX1cbiAgICAgICAgICBpZD17a2V5fVxuICAgICAgICAvPlxuICAgICAgICA8TmVzdGVkT2JqZWN0TGFiZWwgY29sbGFwc2VkPXt0cnVlfSBlcnJvcj17dHJ1ZX0+XG4gICAgICAgICAge2Vycm9yTWVzc2FnZX1cbiAgICAgICAgPC9OZXN0ZWRPYmplY3RMYWJlbD5cbiAgICAgIDwvU29ydGFibGVMaXN0SXRlbT5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyTGlzdENvbnRyb2woKSB7XG4gICAgY29uc3QgeyB2YWx1ZSwgZm9ySUQsIGZpZWxkLCBjbGFzc05hbWVXcmFwcGVyLCB0IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQsIGxpc3RDb2xsYXBzZWQsIGtleXMgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgaXRlbXMgPSB2YWx1ZSB8fCBMaXN0KCk7XG4gICAgY29uc3QgbGFiZWwgPSBmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpO1xuICAgIGNvbnN0IGxhYmVsU2luZ3VsYXIgPSBmaWVsZC5nZXQoJ2xhYmVsX3Npbmd1bGFyJykgfHwgZmllbGQuZ2V0KCdsYWJlbCcsIGZpZWxkLmdldCgnbmFtZScpKTtcbiAgICBjb25zdCBsaXN0TGFiZWwgPSBpdGVtcy5zaXplID09PSAxID8gbGFiZWxTaW5ndWxhci50b0xvd2VyQ2FzZSgpIDogbGFiZWwudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBtaW5pbWl6ZUNvbGxhcHNlZEl0ZW1zID0gZmllbGQuZ2V0KCdtaW5pbWl6ZV9jb2xsYXBzZWQnLCBmYWxzZSk7XG4gICAgY29uc3QgYWxsSXRlbXNDb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZC5ldmVyeSh2YWwgPT4gdmFsID09PSB0cnVlKTtcbiAgICBjb25zdCBzZWxmQ29sbGFwc2VkID0gYWxsSXRlbXNDb2xsYXBzZWQgJiYgKGxpc3RDb2xsYXBzZWQgfHwgIW1pbmltaXplQ29sbGFwc2VkSXRlbXMpO1xuXG4gICAgY29uc3QgaXRlbXNBcnJheSA9IGtleXMubWFwKGtleSA9PiAoeyBpZDoga2V5IH0pKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8Q2xhc3NOYW1lcz5cbiAgICAgICAgeyh7IGN4LCBjc3MgfSkgPT4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGlkPXtmb3JJRH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goXG4gICAgICAgICAgICAgIGNsYXNzTmFtZVdyYXBwZXIsXG4gICAgICAgICAgICAgIGNzc2BcbiAgICAgICAgICAgICAgICAke3N0eWxlU3RyaW5ncy5vYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXJ9XG4gICAgICAgICAgICAgIGAsXG4gICAgICAgICAgICApfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxPYmplY3RXaWRnZXRUb3BCYXJcbiAgICAgICAgICAgICAgYWxsb3dBZGQ9e2ZpZWxkLmdldCgnYWxsb3dfYWRkJywgdHJ1ZSl9XG4gICAgICAgICAgICAgIG9uQWRkPXt0aGlzLmhhbmRsZUFkZH1cbiAgICAgICAgICAgICAgdHlwZXM9e2ZpZWxkLmdldChUWVBFU19LRVksIG51bGwpfVxuICAgICAgICAgICAgICBvbkFkZFR5cGU9e3R5cGUgPT4gdGhpcy5oYW5kbGVBZGRUeXBlKHR5cGUsIHJlc29sdmVGaWVsZEtleVR5cGUoZmllbGQpKX1cbiAgICAgICAgICAgICAgaGVhZGluZz17YCR7aXRlbXMuc2l6ZX0gJHtsaXN0TGFiZWx9YH1cbiAgICAgICAgICAgICAgbGFiZWw9e2xhYmVsU2luZ3VsYXIudG9Mb3dlckNhc2UoKX1cbiAgICAgICAgICAgICAgb25Db2xsYXBzZVRvZ2dsZT17dGhpcy5oYW5kbGVDb2xsYXBzZUFsbFRvZ2dsZX1cbiAgICAgICAgICAgICAgY29sbGFwc2VkPXtzZWxmQ29sbGFwc2VkfVxuICAgICAgICAgICAgICB0PXt0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHsoIXNlbGZDb2xsYXBzZWQgfHwgIW1pbmltaXplQ29sbGFwc2VkSXRlbXMpICYmIChcbiAgICAgICAgICAgICAgPFNvcnRhYmxlTGlzdCBpdGVtcz17aXRlbXNBcnJheX0ga2V5cz17a2V5c30gb25Tb3J0RW5kPXt0aGlzLm9uU29ydEVuZH0+XG4gICAgICAgICAgICAgICAge2l0ZW1zLm1hcCh0aGlzLnJlbmRlckl0ZW0pfVxuICAgICAgICAgICAgICA8L1NvcnRhYmxlTGlzdD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L0NsYXNzTmFtZXM+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlcklucHV0KCkge1xuICAgIGNvbnN0IHsgZm9ySUQsIGNsYXNzTmFtZVdyYXBwZXIgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIHJldHVybiAoXG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBpZD17Zm9ySUR9XG4gICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICBvbkZvY3VzPXt0aGlzLmhhbmRsZUZvY3VzfVxuICAgICAgICBvbkJsdXI9e3RoaXMuaGFuZGxlQmx1cn1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVXcmFwcGVyfVxuICAgICAgLz5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmdldFZhbHVlVHlwZSgpICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJMaXN0Q29udHJvbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJJbnB1dCgpO1xuICAgIH1cbiAgfVxufVxuIl19 */"));
|
|
30
|
+
})("background-color:", colors.textFieldBorder, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEwQ21EIiwiZmlsZSI6Ii4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IEltbXV0YWJsZVByb3BUeXBlcyBmcm9tICdyZWFjdC1pbW11dGFibGUtcHJvcHR5cGVzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCB7IGNzcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IExpc3QsIE1hcCwgZnJvbUpTIH0gZnJvbSAnaW1tdXRhYmxlJztcbmltcG9ydCBwYXJ0aWFsIGZyb20gJ2xvZGFzaC9wYXJ0aWFsJztcbmltcG9ydCBpc0VtcHR5IGZyb20gJ2xvZGFzaC9pc0VtcHR5JztcbmltcG9ydCB1bmlxdWVJZCBmcm9tICdsb2Rhc2gvdW5pcXVlSWQnO1xuaW1wb3J0IHsgdjQgYXMgdXVpZCB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IERlY2FwQ21zV2lkZ2V0T2JqZWN0IGZyb20gJ2RlY2FwLWNtcy13aWRnZXQtb2JqZWN0JztcbmltcG9ydCB7XG4gIERuZENvbnRleHQsXG4gIE1vdXNlU2Vuc29yLFxuICBUb3VjaFNlbnNvcixcbiAgY2xvc2VzdENlbnRlcixcbiAgdXNlU2Vuc29yLFxuICB1c2VTZW5zb3JzLFxufSBmcm9tICdAZG5kLWtpdC9jb3JlJztcbmltcG9ydCB7IFNvcnRhYmxlQ29udGV4dCwgdXNlU29ydGFibGUgfSBmcm9tICdAZG5kLWtpdC9zb3J0YWJsZSc7XG5pbXBvcnQgeyByZXN0cmljdFRvUGFyZW50RWxlbWVudCB9IGZyb20gJ0BkbmQta2l0L21vZGlmaWVycyc7XG5pbXBvcnQgeyBDU1MgfSBmcm9tICdAZG5kLWtpdC91dGlsaXRpZXMnO1xuaW1wb3J0IHtcbiAgTGlzdEl0ZW1Ub3BCYXIsXG4gIE9iamVjdFdpZGdldFRvcEJhcixcbiAgY29sb3JzLFxuICBsZW5ndGhzLFxuICBGaWVsZExhYmVsLFxufSBmcm9tICdkZWNhcC1jbXMtdWktZGVmYXVsdCc7XG5pbXBvcnQgeyBzdHJpbmdUZW1wbGF0ZSwgdmFsaWRhdGlvbnMgfSBmcm9tICdkZWNhcC1jbXMtbGliLXdpZGdldHMnO1xuXG5pbXBvcnQge1xuICBUWVBFU19LRVksXG4gIGdldFR5cGVkRmllbGRGb3JWYWx1ZSxcbiAgcmVzb2x2ZUZpZWxkS2V5VHlwZSxcbiAgZ2V0RXJyb3JNZXNzYWdlRm9yVHlwZWRGaWVsZEFuZFZhbHVlLFxufSBmcm9tICcuL3R5cGVkTGlzdEhlbHBlcnMnO1xuXG5jb25zdCBPYmplY3RDb250cm9sID0gRGVjYXBDbXNXaWRnZXRPYmplY3QuY29udHJvbENvbXBvbmVudDtcblxuY29uc3QgTGlzdEl0ZW0gPSBzdHlsZWQuZGl2KCk7XG5cbmNvbnN0IFN0eWxlZExpc3RJdGVtVG9wQmFyID0gc3R5bGVkKExpc3RJdGVtVG9wQmFyKWBcbiAgYmFja2dyb3VuZC1jb2xvcjogJHtjb2xvcnMudGV4dEZpZWxkQm9yZGVyfTtcbmA7XG5cbmNvbnN0IE5lc3RlZE9iamVjdExhYmVsID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogJHtwcm9wcyA9PiAocHJvcHMuY29sbGFwc2VkID8gJ2Jsb2NrJyA6ICdub25lJyl9O1xuICBib3JkZXItdG9wOiAwO1xuICBjb2xvcjogJHtwcm9wcyA9PiAocHJvcHMuZXJyb3IgPyBjb2xvcnMuZXJyb3JUZXh0IDogJ2luaGVyaXQnKX07XG4gIGJhY2tncm91bmQtY29sb3I6ICR7Y29sb3JzLnRleHRGaWVsZEJvcmRlcn07XG4gIHBhZGRpbmc6IDEzcHg7XG4gIGJvcmRlci1yYWRpdXM6IDAgMCAke2xlbmd0aHMuYm9yZGVyUmFkaXVzfSAke2xlbmd0aHMuYm9yZGVyUmFkaXVzfTtcbmA7XG5cbmNvbnN0IHN0eWxlU3RyaW5ncyA9IHtcbiAgY29sbGFwc2VkT2JqZWN0Q29udHJvbDogYFxuICAgIGRpc3BsYXk6IG5vbmU7XG4gIGAsXG4gIG9iamVjdFdpZGdldFRvcEJhckNvbnRhaW5lcjogYFxuICAgIHBhZGRpbmc6ICR7bGVuZ3Rocy5vYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXJQYWRkaW5nfTtcbiAgYCxcbn07XG5cbmNvbnN0IHN0eWxlcyA9IHtcbiAgbGlzdENvbnRyb2xJdGVtOiBjc3NgXG4gICAgbWFyZ2luLXRvcDogMThweDtcblxuICAgICY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgICBtYXJnaW4tdG9wOiAyNnB4O1xuICAgIH1cbiAgYCxcbiAgbGlzdENvbnRyb2xJdGVtQ29sbGFwc2VkOiBjc3NgXG4gICAgcGFkZGluZy1ib3R0b206IDA7XG4gIGAsXG59O1xuXG5mdW5jdGlvbiBTb3J0YWJsZUxpc3QoeyBpdGVtcywgY2hpbGRyZW4sIG9uU29ydEVuZCwga2V5cyB9KSB7XG4gIGNvbnN0IGFjdGl2YXRpb25Db25zdHJhaW50ID0geyBkaXN0YW5jZTogNCB9O1xuICBjb25zdCBzZW5zb3JzID0gdXNlU2Vuc29ycyhcbiAgICB1c2VTZW5zb3IoTW91c2VTZW5zb3IsIHsgYWN0aXZhdGlvbkNvbnN0cmFpbnQgfSksXG4gICAgdXNlU2Vuc29yKFRvdWNoU2Vuc29yLCB7IGFjdGl2YXRpb25Db25zdHJhaW50IH0pLFxuICApO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZVNvcnRFbmQoeyBhY3RpdmUsIG92ZXIgfSkge1xuICAgIG9uU29ydEVuZCh7XG4gICAgICBvbGRJbmRleDoga2V5cy5pbmRleE9mKGFjdGl2ZS5pZCksXG4gICAgICBuZXdJbmRleDoga2V5cy5pbmRleE9mKG92ZXIuaWQpLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2PlxuICAgICAgPERuZENvbnRleHRcbiAgICAgICAgbW9kaWZpZXJzPXtbcmVzdHJpY3RUb1BhcmVudEVsZW1lbnRdfVxuICAgICAgICBjb2xsaXNpb25EZXRlY3Rpb249e2Nsb3Nlc3RDZW50ZXJ9XG4gICAgICAgIHNlbnNvcnM9e3NlbnNvcnN9XG4gICAgICAgIG9uRHJhZ0VuZD17aGFuZGxlU29ydEVuZH1cbiAgICAgID5cbiAgICAgICAgPFNvcnRhYmxlQ29udGV4dCBpdGVtcz17aXRlbXN9PntjaGlsZHJlbn08L1NvcnRhYmxlQ29udGV4dD5cbiAgICAgIDwvRG5kQ29udGV4dD5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gU29ydGFibGVMaXN0SXRlbShwcm9wcykge1xuICBjb25zdCB7IHNldE5vZGVSZWYsIHRyYW5zZm9ybSwgdHJhbnNpdGlvbiB9ID0gdXNlU29ydGFibGUoe1xuICAgIGlkOiBwcm9wcy5pZCxcbiAgfSk7XG5cbiAgY29uc3Qgc3R5bGUgPSB7XG4gICAgdHJhbnNmb3JtOiBDU1MuVHJhbnNmb3JtLnRvU3RyaW5nKHRyYW5zZm9ybSksXG4gICAgdHJhbnNpdGlvbixcbiAgfTtcblxuICBjb25zdCB7IGNvbGxhcHNlZCB9ID0gcHJvcHM7XG5cbiAgcmV0dXJuIChcbiAgICA8TGlzdEl0ZW1cbiAgICAgIHNvcnRhYmxlXG4gICAgICByZWY9e3NldE5vZGVSZWZ9XG4gICAgICBzdHlsZT17c3R5bGV9XG4gICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBjb2xsYXBzZWQgJiYgc3R5bGVzLmxpc3RDb250cm9sSXRlbUNvbGxhcHNlZF19XG4gICAgPlxuICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgIDwvTGlzdEl0ZW0+XG4gICk7XG59XG5cbmZ1bmN0aW9uIERyYWdIYW5kbGUoeyBjaGlsZHJlbiwgaWQgfSkge1xuICBjb25zdCB7IGF0dHJpYnV0ZXMsIGxpc3RlbmVycyB9ID0gdXNlU29ydGFibGUoe1xuICAgIGlkLFxuICB9KTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgey4uLmF0dHJpYnV0ZXN9IHsuLi5saXN0ZW5lcnN9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5jb25zdCB2YWx1ZVR5cGVzID0ge1xuICBTSU5HTEU6ICdTSU5HTEUnLFxuICBNVUxUSVBMRTogJ01VTFRJUExFJyxcbiAgTUlYRUQ6ICdNSVhFRCcsXG59O1xuXG5mdW5jdGlvbiBoYW5kbGVTdW1tYXJ5KHN1bW1hcnksIGVudHJ5LCBsYWJlbCwgaXRlbSkge1xuICBjb25zdCBkYXRhID0gc3RyaW5nVGVtcGxhdGUuYWRkRmlsZVRlbXBsYXRlRmllbGRzKFxuICAgIGVudHJ5LmdldCgncGF0aCcpLFxuICAgIGl0ZW0uc2V0KCdmaWVsZHMubGFiZWwnLCBsYWJlbCksXG4gICk7XG4gIHJldHVybiBzdHJpbmdUZW1wbGF0ZS5jb21waWxlU3RyaW5nVGVtcGxhdGUoc3VtbWFyeSwgbnVsbCwgJycsIGRhdGEpO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUl0ZW0oZmllbGQsIGl0ZW0pIHtcbiAgaWYgKCFNYXAuaXNNYXAoaXRlbSkpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgJyR7ZmllbGQuZ2V0KCduYW1lJyl9JyBmaWVsZCBpdGVtIHZhbHVlIHZhbHVlIHNob3VsZCBiZSBhIG1hcCBidXQgaXMgYSAnJHt0eXBlb2YgaXRlbX0nYCxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gTGFiZWxDb21wb25lbnQoeyBmaWVsZCwgaXNBY3RpdmUsIGhhc0Vycm9ycywgdW5pcXVlRmllbGRJZCwgaXNGaWVsZE9wdGlvbmFsLCB0IH0pIHtcbiAgY29uc3QgbGFiZWwgPSBgJHtmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpfWA7XG4gIHJldHVybiAoXG4gICAgPEZpZWxkTGFiZWwgaXNBY3RpdmU9e2lzQWN0aXZlfSBoYXNFcnJvcnM9e2hhc0Vycm9yc30gaHRtbEZvcj17dW5pcXVlRmllbGRJZH0+XG4gICAgICB7bGFiZWx9IHtgJHtpc0ZpZWxkT3B0aW9uYWwgPyBgICgke3QoJ2VkaXRvci5lZGl0b3JDb250cm9sLmZpZWxkLm9wdGlvbmFsJyl9KWAgOiAnJ31gfVxuICAgIDwvRmllbGRMYWJlbD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlzdENvbnRyb2wgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjaGlsZFJlZnMgPSB7fTtcblxuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIG1ldGFkYXRhOiBJbW11dGFibGVQcm9wVHlwZXMubWFwLFxuICAgIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uQ2hhbmdlT2JqZWN0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uVmFsaWRhdGVPYmplY3Q6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdmFsaWRhdGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdmFsdWU6IEltbXV0YWJsZVByb3BUeXBlcy5saXN0LFxuICAgIGZpZWxkOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGZvcklEOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNvbnRyb2xSZWY6IFByb3BUeXBlcy5mdW5jLFxuICAgIG1lZGlhUGF0aHM6IEltbXV0YWJsZVByb3BUeXBlcy5tYXAuaXNSZXF1aXJlZCxcbiAgICBnZXRBc3NldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvbk9wZW5NZWRpYUxpYnJhcnk6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25BZGRBc3NldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvblJlbW92ZUluc2VydGVkTWVkaWE6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgY2xhc3NOYW1lV3JhcHBlcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHNldEFjdGl2ZVN0eWxlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHNldEluYWN0aXZlU3R5bGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgZWRpdG9yQ29udHJvbDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWQsXG4gICAgcmVzb2x2ZVdpZGdldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBjbGVhckZpZWxkRXJyb3JzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGZpZWxkc0Vycm9yczogSW1tdXRhYmxlUHJvcFR5cGVzLm1hcC5pc1JlcXVpcmVkLFxuICAgIGVudHJ5OiBJbW11dGFibGVQcm9wVHlwZXMubWFwLmlzUmVxdWlyZWQsXG4gICAgdDogUHJvcFR5cGVzLmZ1bmMsXG4gIH07XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICB2YWx1ZTogTGlzdCgpLFxuICAgIHBhcmVudElkczogW10sXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgY29uc3QgeyBmaWVsZCwgdmFsdWUgfSA9IHByb3BzO1xuICAgIGNvbnN0IGxpc3RDb2xsYXBzZWQgPSBmaWVsZC5nZXQoJ2NvbGxhcHNlZCcsIHRydWUpO1xuICAgIGNvbnN0IGl0ZW1zQ29sbGFwc2VkID0gKHZhbHVlICYmIEFycmF5KHZhbHVlLnNpemUpLmZpbGwobGlzdENvbGxhcHNlZCkpIHx8IFtdO1xuICAgIGNvbnN0IGtleXMgPSAodmFsdWUgJiYgQXJyYXkuZnJvbSh7IGxlbmd0aDogdmFsdWUuc2l6ZSB9LCAoKSA9PiB1dWlkKCkpKSB8fCBbXTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBsaXN0Q29sbGFwc2VkLFxuICAgICAgaXRlbXNDb2xsYXBzZWQsXG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZVRvU3RyaW5nKHZhbHVlKSxcbiAgICAgIGtleXMsXG4gICAgfTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIC8vIE1hbnVhbGx5IHZhbGlkYXRlIFByb3BUeXBlcyAtIFJlYWN0IDE5IGJyZWFraW5nIGNoYW5nZVxuICAgIFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcyhMaXN0Q29udHJvbC5wcm9wVHlwZXMsIHRoaXMucHJvcHMsICdwcm9wJywgJ0xpc3RDb250cm9sJyk7XG4gIH1cblxuICB2YWx1ZVRvU3RyaW5nID0gdmFsdWUgPT4ge1xuICAgIGxldCBzdHJpbmdWYWx1ZTtcbiAgICBpZiAoTGlzdC5pc0xpc3QodmFsdWUpIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBzdHJpbmdWYWx1ZSA9IHZhbHVlLmpvaW4oJywnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgRXhwZWN0ZWQgTGlzdCB2YWx1ZSB0byBiZSBhbiBhcnJheSBidXQgcmVjZWl2ZWQgJyR7dmFsdWV9JyB3aXRoIHR5cGUgb2YgJyR7dHlwZW9mIHZhbHVlfScuIFBsZWFzZSBjaGVjayB0aGUgdmFsdWUgcHJvdmlkZWQgdG8gdGhlICcke3RoaXMucHJvcHMuZmllbGQuZ2V0KFxuICAgICAgICAgICduYW1lJyxcbiAgICAgICAgKX0nIGZpZWxkYCxcbiAgICAgICk7XG4gICAgICBzdHJpbmdWYWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBzdHJpbmdWYWx1ZS5yZXBsYWNlKC8sKFteXFxzXXwkKS9nLCAnLCAkMScpO1xuICB9O1xuXG4gIGdldFZhbHVlVHlwZSA9ICgpID0+IHtcbiAgICBjb25zdCB7IGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChmaWVsZC5nZXQoJ2ZpZWxkcycpKSB7XG4gICAgICByZXR1cm4gdmFsdWVUeXBlcy5NVUxUSVBMRTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkLmdldCgnZmllbGQnKSkge1xuICAgICAgcmV0dXJuIHZhbHVlVHlwZXMuU0lOR0xFO1xuICAgIH0gZWxzZSBpZiAoZmllbGQuZ2V0KFRZUEVTX0tFWSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZVR5cGVzLk1JWEVEO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH07XG5cbiAgdW5pcXVlRmllbGRJZCA9IHVuaXF1ZUlkKGAke3RoaXMucHJvcHMuZmllbGQuZ2V0KCduYW1lJyl9LWZpZWxkLWApO1xuICAvKipcbiAgICogQWx3YXlzIHVwZGF0ZSBzbyB0aGF0IGVhY2ggbmVzdGVkIHdpZGdldCBoYXMgdGhlIG9wdGlvbiB0byB1cGRhdGUuIFRoaXMgaXNcbiAgICogcmVxdWlyZWQgYmVjYXVzZSBDb250cm9sSE9DIHByb3ZpZGVzIGEgZGVmYXVsdCBgc2hvdWxkQ29tcG9uZW50VXBkYXRlYFxuICAgKiB3aGljaCBvbmx5IHVwZGF0ZXMgaWYgdGhlIHZhbHVlIGNoYW5nZXMsIGJ1dCBldmVyeSB3aWRnZXQgbXVzdCBiZSBhbGxvd2VkXG4gICAqIHRvIG92ZXJyaWRlIHRoaXMuXG4gICAqL1xuICBzaG91bGRDb21wb25lbnRVcGRhdGUoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBoYW5kbGVDaGFuZ2UgPSBlID0+IHtcbiAgICBjb25zdCB7IG9uQ2hhbmdlIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy5zdGF0ZS52YWx1ZTtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IGUudGFyZ2V0LnZhbHVlLnRyaW0oKTtcbiAgICBjb25zdCBsaXN0VmFsdWUgPSBuZXdWYWx1ZSA/IG5ld1ZhbHVlLnNwbGl0KCcsJykgOiBbXTtcbiAgICBpZiAobmV3VmFsdWUubWF0Y2goLywkLykgJiYgb2xkVmFsdWUubWF0Y2goLywgJC8pKSB7XG4gICAgICBsaXN0VmFsdWUucG9wKCk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPSB0aGlzLnZhbHVlVG9TdHJpbmcobGlzdFZhbHVlKTtcbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHBhcnNlZFZhbHVlIH0pO1xuICAgIG9uQ2hhbmdlKExpc3QobGlzdFZhbHVlLm1hcCh2YWwgPT4gdmFsLnRyaW0oKSkpKTtcbiAgfTtcblxuICBoYW5kbGVGb2N1cyA9ICgpID0+IHtcbiAgICB0aGlzLnByb3BzLnNldEFjdGl2ZVN0eWxlKCk7XG4gIH07XG5cbiAgaGFuZGxlQmx1ciA9IGUgPT4ge1xuICAgIGNvbnN0IGxpc3RWYWx1ZSA9IGUudGFyZ2V0LnZhbHVlXG4gICAgICAuc3BsaXQoJywnKVxuICAgICAgLm1hcChlbCA9PiBlbC50cmltKCkpXG4gICAgICAuZmlsdGVyKGVsID0+IGVsKTtcbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHRoaXMudmFsdWVUb1N0cmluZyhsaXN0VmFsdWUpIH0pO1xuICAgIHRoaXMucHJvcHMuc2V0SW5hY3RpdmVTdHlsZSgpO1xuICB9O1xuXG4gIGhhbmRsZUFkZCA9IGUgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHBhcnNlZFZhbHVlID1cbiAgICAgIHRoaXMuZ2V0VmFsdWVUeXBlKCkgPT09IHZhbHVlVHlwZXMuU0lOR0xFXG4gICAgICAgID8gdGhpcy5zaW5nbGVEZWZhdWx0KClcbiAgICAgICAgOiBmcm9tSlModGhpcy5tdWx0aXBsZURlZmF1bHQoZmllbGQuZ2V0KCdmaWVsZHMnKSkpO1xuICAgIHRoaXMuYWRkSXRlbShwYXJzZWRWYWx1ZSk7XG4gIH07XG5cbiAgc2luZ2xlRGVmYXVsdCA9ICgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5maWVsZC5nZXRJbihbJ2ZpZWxkJywgJ2RlZmF1bHQnXSwgbnVsbCk7XG4gIH07XG5cbiAgbXVsdGlwbGVEZWZhdWx0ID0gZmllbGRzID0+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KGZpZWxkcyk7XG4gIH07XG5cbiAgaGFuZGxlQWRkVHlwZSA9ICh0eXBlLCB0eXBlS2V5KSA9PiB7XG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPSBmcm9tSlModGhpcy5taXhlZERlZmF1bHQodHlwZUtleSwgdHlwZSkpO1xuICAgIHRoaXMuYWRkSXRlbShwYXJzZWRWYWx1ZSk7XG4gIH07XG5cbiAgbWl4ZWREZWZhdWx0ID0gKHR5cGVLZXksIHR5cGUpID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZFR5cGUgPSB0aGlzLnByb3BzLmZpZWxkLmdldChUWVBFU19LRVkpLmZpbmQoZiA9PiBmLmdldCgnbmFtZScpID09PSB0eXBlKTtcbiAgICBjb25zdCBmaWVsZHMgPSBzZWxlY3RlZFR5cGUuZ2V0KCdmaWVsZHMnKSB8fCBbc2VsZWN0ZWRUeXBlLmdldCgnZmllbGQnKV07XG5cbiAgICByZXR1cm4gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KGZpZWxkcywgeyBbdHlwZUtleV06IHR5cGUgfSk7XG4gIH07XG5cbiAgZ2V0RmllbGRzRGVmYXVsdCA9IChmaWVsZHMsIGluaXRpYWxWYWx1ZSA9IHt9KSA9PiB7XG4gICAgcmV0dXJuIGZpZWxkcy5yZWR1Y2UoKGFjYywgaXRlbSkgPT4ge1xuICAgICAgY29uc3Qgc3ViZmllbGRzID0gaXRlbS5nZXQoJ2ZpZWxkJykgfHwgaXRlbS5nZXQoJ2ZpZWxkcycpO1xuICAgICAgY29uc3Qgb2JqZWN0ID0gaXRlbS5nZXQoJ3dpZGdldCcpID09ICdvYmplY3QnO1xuICAgICAgY29uc3QgbmFtZSA9IGl0ZW0uZ2V0KCduYW1lJyk7XG4gICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSBpdGVtLmdldCgnZGVmYXVsdCcsIG51bGwpO1xuXG4gICAgICBpZiAoTGlzdC5pc0xpc3Qoc3ViZmllbGRzKSAmJiBvYmplY3QpIHtcbiAgICAgICAgY29uc3Qgc3ViRGVmYXVsdFZhbHVlID0gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KHN1YmZpZWxkcyk7XG4gICAgICAgICFpc0VtcHR5KHN1YkRlZmF1bHRWYWx1ZSkgJiYgKGFjY1tuYW1lXSA9IHN1YkRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9XG5cbiAgICAgIGlmIChNYXAuaXNNYXAoc3ViZmllbGRzKSAmJiBvYmplY3QpIHtcbiAgICAgICAgY29uc3Qgc3ViRGVmYXVsdFZhbHVlID0gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KFtzdWJmaWVsZHNdKTtcbiAgICAgICAgIWlzRW1wdHkoc3ViRGVmYXVsdFZhbHVlKSAmJiAoYWNjW25hbWVdID0gc3ViRGVmYXVsdFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH1cblxuICAgICAgaWYgKGRlZmF1bHRWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBhY2NbbmFtZV0gPSBkZWZhdWx0VmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgaW5pdGlhbFZhbHVlKTtcbiAgfTtcblxuICBhZGRJdGVtID0gcGFyc2VkVmFsdWUgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWUsIG9uQ2hhbmdlLCBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBhZGRUb1RvcCA9IGZpZWxkLmdldCgnYWRkX3RvX3RvcCcsIGZhbHNlKTtcblxuICAgIGNvbnN0IGl0ZW1LZXkgPSB1dWlkKCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBpdGVtc0NvbGxhcHNlZDogYWRkVG9Ub3BcbiAgICAgICAgPyBbZmFsc2UsIC4uLnRoaXMuc3RhdGUuaXRlbXNDb2xsYXBzZWRdXG4gICAgICAgIDogWy4uLnRoaXMuc3RhdGUuaXRlbXNDb2xsYXBzZWQsIGZhbHNlXSxcbiAgICAgIGtleXM6IGFkZFRvVG9wID8gW2l0ZW1LZXksIC4uLnRoaXMuc3RhdGUua2V5c10gOiBbLi4udGhpcy5zdGF0ZS5rZXlzLCBpdGVtS2V5XSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGxpc3RWYWx1ZSA9IHZhbHVlIHx8IExpc3QoKTtcbiAgICBpZiAoYWRkVG9Ub3ApIHtcbiAgICAgIG9uQ2hhbmdlKGxpc3RWYWx1ZS51bnNoaWZ0KHBhcnNlZFZhbHVlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uQ2hhbmdlKGxpc3RWYWx1ZS5wdXNoKHBhcnNlZFZhbHVlKSk7XG4gICAgfVxuICB9O1xuXG4gIHByb2Nlc3NDb250cm9sUmVmID0gcmVmID0+IHtcbiAgICBpZiAoIXJlZikgcmV0dXJuO1xuICAgIGNvbnN0IHtcbiAgICAgIHByb3BzOiB7IHZhbGlkYXRpb25LZXk6IGtleSB9LFxuICAgIH0gPSByZWY7XG4gICAgdGhpcy5jaGlsZFJlZnNba2V5XSA9IHJlZjtcbiAgICB0aGlzLnByb3BzLmNvbnRyb2xSZWY/Lih0aGlzKTtcbiAgfTtcblxuICB2YWxpZGF0ZSA9ICgpID0+IHtcbiAgICAvLyBGaXJzdCB2YWxpZGF0ZSBjaGlsZCB3aWRnZXRzIGlmIHRoaXMgaXMgYSBjb21wbGV4IGxpc3RcbiAgICBjb25zdCBoYXNDaGlsZFdpZGdldHMgPSB0aGlzLmdldFZhbHVlVHlwZSgpICYmIE9iamVjdC5rZXlzKHRoaXMuY2hpbGRSZWZzKS5sZW5ndGggPiAwO1xuICAgIGlmIChoYXNDaGlsZFdpZGdldHMpIHtcbiAgICAgIE9iamVjdC52YWx1ZXModGhpcy5jaGlsZFJlZnMpLmZvckVhY2god2lkZ2V0ID0+IHtcbiAgICAgICAgd2lkZ2V0Py52YWxpZGF0ZT8uKCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9wcy52YWxpZGF0ZSgpO1xuICAgIH1cbiAgICB0aGlzLnByb3BzLm9uVmFsaWRhdGVPYmplY3QodGhpcy5wcm9wcy5mb3JJRCwgdGhpcy52YWxpZGF0ZVNpemUoKSk7XG4gIH07XG5cbiAgdmFsaWRhdGVTaXplID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgZmllbGQsIHZhbHVlLCB0IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG1pbiA9IGZpZWxkLmdldCgnbWluJyk7XG4gICAgY29uc3QgbWF4ID0gZmllbGQuZ2V0KCdtYXgnKTtcbiAgICBjb25zdCByZXF1aXJlZCA9IGZpZWxkLmdldCgncmVxdWlyZWQnLCB0cnVlKTtcblxuICAgIGlmICghcmVxdWlyZWQgJiYgIXZhbHVlPy5zaXplKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgZXJyb3IgPSB2YWxpZGF0aW9ucy52YWxpZGF0ZU1pbk1heChcbiAgICAgIHQsXG4gICAgICBmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpLFxuICAgICAgdmFsdWUsXG4gICAgICBtaW4sXG4gICAgICBtYXgsXG4gICAgKTtcblxuICAgIHJldHVybiBlcnJvciA/IFtlcnJvcl0gOiBbXTtcbiAgfTtcblxuICAvKipcbiAgICogSW4gY2FzZSB0aGUgYG9uQ2hhbmdlT2JqZWN0YCBmdW5jdGlvbiBpcyBmcm96ZW4gYnkgYSBjaGlsZCB3aWRnZXQgaW1wbGVtZW50YXRpb24sXG4gICAqIGUuZy4gd2hlbiBkZWJvdW5jZWQsIGFsd2F5cyBnZXQgdGhlIGxhdGVzdCBvYmplY3QgdmFsdWUgaW5zdGVhZCBvZiB1c2luZ1xuICAgKiBgdGhpcy5wcm9wcy52YWx1ZWAgZGlyZWN0bHkuXG4gICAqL1xuICBnZXRPYmplY3RWYWx1ZSA9IGlkeCA9PiB0aGlzLnByb3BzLnZhbHVlLmdldChpZHgpIHx8IE1hcCgpO1xuXG4gIGhhbmRsZUNoYW5nZUZvcihpbmRleCkge1xuICAgIHJldHVybiAoZiwgbmV3VmFsdWUsIG5ld01ldGFkYXRhKSA9PiB7XG4gICAgICBjb25zdCB7IHZhbHVlLCBtZXRhZGF0YSwgb25DaGFuZ2UsIGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBmaWVsZC5nZXQoJ25hbWUnKTtcbiAgICAgIGNvbnN0IGxpc3RGaWVsZE9iamVjdFdpZGdldCA9IGZpZWxkLmdldEluKFsnZmllbGQnLCAnd2lkZ2V0J10pID09PSAnb2JqZWN0JztcbiAgICAgIGNvbnN0IHdpdGhOYW1lS2V5ID1cbiAgICAgICAgdGhpcy5nZXRWYWx1ZVR5cGUoKSAhPT0gdmFsdWVUeXBlcy5TSU5HTEUgfHxcbiAgICAgICAgKHRoaXMuZ2V0VmFsdWVUeXBlKCkgPT09IHZhbHVlVHlwZXMuU0lOR0xFICYmIGxpc3RGaWVsZE9iamVjdFdpZGdldCk7XG4gICAgICBjb25zdCBuZXdPYmplY3RWYWx1ZSA9IHdpdGhOYW1lS2V5XG4gICAgICAgID8gdGhpcy5nZXRPYmplY3RWYWx1ZShpbmRleCkuc2V0KGYuZ2V0KCduYW1lJyksIG5ld1ZhbHVlKVxuICAgICAgICA6IG5ld1ZhbHVlO1xuICAgICAgY29uc3QgcGFyc2VkTWV0YWRhdGEgPSB7XG4gICAgICAgIFtjb2xsZWN0aW9uTmFtZV06IE9iamVjdC5hc3NpZ24obWV0YWRhdGEgPyBtZXRhZGF0YS50b0pTKCkgOiB7fSwgbmV3TWV0YWRhdGEgfHwge30pLFxuICAgICAgfTtcbiAgICAgIG9uQ2hhbmdlKHZhbHVlLnNldChpbmRleCwgbmV3T2JqZWN0VmFsdWUpLCBwYXJzZWRNZXRhZGF0YSk7XG4gICAgfTtcbiAgfVxuXG4gIGhhbmRsZVJlbW92ZSA9IChpbmRleCwgZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3Qge1xuICAgICAgdmFsdWUsXG4gICAgICBtZXRhZGF0YSxcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgZmllbGQsXG4gICAgICBjbGVhckZpZWxkRXJyb3JzLFxuICAgICAgb25WYWxpZGF0ZU9iamVjdCxcbiAgICAgIGZvcklELFxuICAgICAgZmllbGRzRXJyb3JzLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBmaWVsZC5nZXQoJ25hbWUnKTtcbiAgICBjb25zdCBpc1NpbmdsZUZpZWxkID0gdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5TSU5HTEU7XG5cbiAgICBjb25zdCBtZXRhZGF0YVJlbW92ZVBhdGggPSBpc1NpbmdsZUZpZWxkID8gdmFsdWUuZ2V0KGluZGV4KSA6IHZhbHVlLmdldChpbmRleCkudmFsdWVTZXEoKTtcbiAgICBjb25zdCBwYXJzZWRNZXRhZGF0YSA9XG4gICAgICBtZXRhZGF0YSAmJiAhbWV0YWRhdGEuaXNFbXB0eSgpXG4gICAgICAgID8geyBbY29sbGVjdGlvbk5hbWVdOiBtZXRhZGF0YS5yZW1vdmVJbihtZXRhZGF0YVJlbW92ZVBhdGgpIH1cbiAgICAgICAgOiBtZXRhZGF0YTtcblxuICAgIC8vIEdldCB0aGUga2V5IG9mIHRoZSBpdGVtIGJlaW5nIHJlbW92ZWRcbiAgICBjb25zdCByZW1vdmVkS2V5ID0gdGhpcy5zdGF0ZS5rZXlzW2luZGV4XTtcblxuICAgIC8vIFVwZGF0ZSBzdGF0ZSB3aGlsZSBwcmVzZXJ2aW5nIGtleXMgZm9yIHJlbWFpbmluZyBpdGVtc1xuICAgIGNvbnN0IG5ld0tleXMgPSBbLi4udGhpcy5zdGF0ZS5rZXlzXTtcbiAgICBuZXdLZXlzLnNwbGljZShpbmRleCwgMSk7XG4gICAgaXRlbXNDb2xsYXBzZWQuc3BsaWNlKGluZGV4LCAxKTtcblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXNDb2xsYXBzZWQ6IFsuLi5pdGVtc0NvbGxhcHNlZF0sXG4gICAgICBrZXlzOiBuZXdLZXlzLFxuICAgIH0pO1xuXG4gICAgLy8gQ2xlYXIgdGhlIHJlZiBmb3IgdGhlIHJlbW92ZWQgaXRlbVxuICAgIGRlbGV0ZSB0aGlzLmNoaWxkUmVmc1tyZW1vdmVkS2V5XTtcblxuICAgIGNvbnN0IG5ld1ZhbHVlID0gdmFsdWUuZGVsZXRlKGluZGV4KTtcblxuICAgIC8vIENsZWFyIGVycm9ycyBmb3IgdGhlIHJlbW92ZWQgaXRlbSBhbmQgaXRzIGNoaWxkcmVuXG4gICAgaWYgKGZpZWxkc0Vycm9ycykge1xuICAgICAgT2JqZWN0LmVudHJpZXMoZmllbGRzRXJyb3JzLnRvSlMoKSkuZm9yRWFjaCgoW2ZpZWxkSWQsIGVycm9yc10pID0+IHtcbiAgICAgICAgaWYgKGVycm9ycy5zb21lKGVyciA9PiBlcnIucGFyZW50SWRzPy5pbmNsdWRlcyhyZW1vdmVkS2V5KSkpIHtcbiAgICAgICAgICBjbGVhckZpZWxkRXJyb3JzKGZpZWxkSWQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBJZiBsaXN0IGlzIGVtcHR5LCBtYXJrIGl0IGFzIHZhbGlkXG4gICAgaWYgKG5ld1ZhbHVlLnNpemUgPT09IDApIHtcbiAgICAgIGNsZWFyRmllbGRFcnJvcnMoZm9ySUQpO1xuICAgICAgb25WYWxpZGF0ZU9iamVjdChmb3JJRCwgW10pO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSB0aGUgdmFsdWUgbGFzdCB0byBlbnN1cmUgYWxsIGVycm9yIHN0YXRlcyBhcmUgY2xlYXJlZFxuICAgIG9uQ2hhbmdlKG5ld1ZhbHVlLCBwYXJzZWRNZXRhZGF0YSk7XG4gIH07XG5cbiAgaGFuZGxlSXRlbUNvbGxhcHNlVG9nZ2xlID0gKGluZGV4LCBldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBuZXdJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLm1hcCgoY29sbGFwc2VkLCBpdGVtSW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCA9PT0gaXRlbUluZGV4KSB7XG4gICAgICAgIHJldHVybiAhY29sbGFwc2VkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbGxhcHNlZDtcbiAgICB9KTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGl0ZW1zQ29sbGFwc2VkOiBuZXdJdGVtc0NvbGxhcHNlZCxcbiAgICB9KTtcbiAgfTtcblxuICBoYW5kbGVDb2xsYXBzZUFsbFRvZ2dsZSA9IGUgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IHZhbHVlLCBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkLCBsaXN0Q29sbGFwc2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IG1pbmltaXplQ29sbGFwc2VkSXRlbXMgPSBmaWVsZC5nZXQoJ21pbmltaXplX2NvbGxhcHNlZCcsIGZhbHNlKTtcbiAgICBjb25zdCBsaXN0Q29sbGFwc2VkQnlEZWZhdWx0ID0gZmllbGQuZ2V0KCdjb2xsYXBzZWQnLCB0cnVlKTtcbiAgICBjb25zdCBhbGxJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLmV2ZXJ5KHZhbCA9PiB2YWwgPT09IHRydWUpO1xuXG4gICAgaWYgKG1pbmltaXplQ29sbGFwc2VkSXRlbXMpIHtcbiAgICAgIGxldCB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZDtcbiAgICAgIC8vIE9ubHkgYWxsb3cgY29sbGFwc2luZyBhbGwgaXRlbXMgaW4gdGhpcyBtb2RlIGJ1dCBub3Qgb3BlbmluZyBhbGwgYXQgb25jZVxuICAgICAgaWYgKCFsaXN0Q29sbGFwc2VkIHx8ICFsaXN0Q29sbGFwc2VkQnlEZWZhdWx0KSB7XG4gICAgICAgIHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCA9IEFycmF5KHZhbHVlLnNpemUpLmZpbGwoIWxpc3RDb2xsYXBzZWQpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGxpc3RDb2xsYXBzZWQ6ICFsaXN0Q29sbGFwc2VkLCBpdGVtc0NvbGxhcHNlZDogdXBkYXRlZEl0ZW1zQ29sbGFwc2VkIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgaXRlbXNDb2xsYXBzZWQ6IEFycmF5KHZhbHVlLnNpemUpLmZpbGwoIWFsbEl0ZW1zQ29sbGFwc2VkKSB9KTtcbiAgICB9XG4gIH07XG5cbiAgb2JqZWN0TGFiZWwoaXRlbSkge1xuICAgIGNvbnN0IHsgZmllbGQsIGVudHJ5IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHZhbHVlVHlwZSA9IHRoaXMuZ2V0VmFsdWVUeXBlKCk7XG4gICAgc3dpdGNoICh2YWx1ZVR5cGUpIHtcbiAgICAgIGNhc2UgdmFsdWVUeXBlcy5NSVhFRDoge1xuICAgICAgICBpZiAoIXZhbGlkYXRlSXRlbShmaWVsZCwgaXRlbSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXRlbVR5cGUgPSBnZXRUeXBlZEZpZWxkRm9yVmFsdWUoZmllbGQsIGl0ZW0pO1xuICAgICAgICBjb25zdCBsYWJlbCA9IGl0ZW1UeXBlLmdldCgnbGFiZWwnLCBpdGVtVHlwZS5nZXQoJ25hbWUnKSk7XG4gICAgICAgIC8vIGVhY2ggdHlwZSBjYW4gaGF2ZSBpdHMgb3duIHN1bW1hcnksIGJ1dCBkZWZhdWx0IHRvIHRoZSBsaXN0IHN1bW1hcnkgaWYgZXhpc3RzXG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBpdGVtVHlwZS5nZXQoJ3N1bW1hcnknLCBmaWVsZC5nZXQoJ3N1bW1hcnknKSk7XG4gICAgICAgIGNvbnN0IGxhYmVsUmV0dXJuID0gc3VtbWFyeSA/IGhhbmRsZVN1bW1hcnkoc3VtbWFyeSwgZW50cnksIGxhYmVsLCBpdGVtKSA6IGxhYmVsO1xuICAgICAgICByZXR1cm4gbGFiZWxSZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlIHZhbHVlVHlwZXMuU0lOR0xFOiB7XG4gICAgICAgIGNvbnN0IHNpbmdsZUZpZWxkID0gZmllbGQuZ2V0KCdmaWVsZCcpO1xuICAgICAgICBjb25zdCBsYWJlbCA9IHNpbmdsZUZpZWxkLmdldCgnbGFiZWwnLCBzaW5nbGVGaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBmaWVsZC5nZXQoJ3N1bW1hcnknKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGZyb21KUyh7IFtzaW5nbGVGaWVsZC5nZXQoJ25hbWUnKV06IGl0ZW0gfSk7XG4gICAgICAgIGNvbnN0IGxhYmVsUmV0dXJuID0gc3VtbWFyeSA/IGhhbmRsZVN1bW1hcnkoc3VtbWFyeSwgZW50cnksIGxhYmVsLCBkYXRhKSA6IGxhYmVsO1xuICAgICAgICByZXR1cm4gbGFiZWxSZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlIHZhbHVlVHlwZXMuTVVMVElQTEU6IHtcbiAgICAgICAgaWYgKCF2YWxpZGF0ZUl0ZW0oZmllbGQsIGl0ZW0pKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG11bHRpRmllbGRzID0gZmllbGQuZ2V0KCdmaWVsZHMnKTtcbiAgICAgICAgY29uc3QgbGFiZWxGaWVsZCA9IG11bHRpRmllbGRzICYmIG11bHRpRmllbGRzLmZpcnN0KCk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gaXRlbS5nZXQobGFiZWxGaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBmaWVsZC5nZXQoJ3N1bW1hcnknKTtcbiAgICAgICAgY29uc3QgbGFiZWxSZXR1cm4gPSBzdW1tYXJ5ID8gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgdmFsdWUsIGl0ZW0pIDogdmFsdWU7XG4gICAgICAgIHJldHVybiAobGFiZWxSZXR1cm4gfHwgYE5vICR7bGFiZWxGaWVsZC5nZXQoJ25hbWUnKX1gKS50b1N0cmluZygpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBvblNvcnRFbmQgPSAoeyBvbGRJbmRleCwgbmV3SW5kZXggfSkgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCwga2V5cyB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIC8vIFVwZGF0ZSB2YWx1ZVxuICAgIGNvbnN0IGl0ZW0gPSB2YWx1ZS5nZXQob2xkSW5kZXgpO1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gdmFsdWUuZGVsZXRlKG9sZEluZGV4KS5pbnNlcnQobmV3SW5kZXgsIGl0ZW0pO1xuICAgIHRoaXMucHJvcHMub25DaGFuZ2UobmV3VmFsdWUpO1xuXG4gICAgLy8gVXBkYXRlIGNvbGxhcHNpbmdcbiAgICBjb25zdCBjb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZFtvbGRJbmRleF07XG4gICAgaXRlbXNDb2xsYXBzZWQuc3BsaWNlKG9sZEluZGV4LCAxKTtcbiAgICBjb25zdCB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgPSBbLi4uaXRlbXNDb2xsYXBzZWRdO1xuICAgIHVwZGF0ZWRJdGVtc0NvbGxhcHNlZC5zcGxpY2UobmV3SW5kZXgsIDAsIGNvbGxhcHNlZCk7XG5cbiAgICAvLyBNb3ZlIGtleXMgdG8gbWFpbnRhaW4gcmVsYXRpb25zaGlwc1xuICAgIGNvbnN0IG1vdmVkS2V5ID0ga2V5c1tvbGRJbmRleF07XG4gICAgY29uc3QgdXBkYXRlZEtleXMgPSBbLi4ua2V5c107XG4gICAgdXBkYXRlZEtleXMuc3BsaWNlKG9sZEluZGV4LCAxKTtcbiAgICB1cGRhdGVkS2V5cy5zcGxpY2UobmV3SW5kZXgsIDAsIG1vdmVkS2V5KTtcblxuICAgIHRoaXMuc2V0U3RhdGUoeyBpdGVtc0NvbGxhcHNlZDogdXBkYXRlZEl0ZW1zQ29sbGFwc2VkLCBrZXlzOiB1cGRhdGVkS2V5cyB9KTtcbiAgfTtcblxuICBoYXNFcnJvciA9IGluZGV4ID0+IHtcbiAgICBjb25zdCB7IGZpZWxkc0Vycm9ycyB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoZmllbGRzRXJyb3JzICYmIGZpZWxkc0Vycm9ycy5zaXplID4gMCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZmllbGRzRXJyb3JzLnRvSlMoKSkuc29tZShhcnIgPT5cbiAgICAgICAgYXJyLnNvbWUoZXJyID0+IGVyci5wYXJlbnRJZHMgJiYgZXJyLnBhcmVudElkcy5pbmNsdWRlcyh0aGlzLnN0YXRlLmtleXNbaW5kZXhdKSksXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICBmb2N1cyhwYXRoKSB7XG4gICAgY29uc3QgW2luZGV4LCAuLi5yZW1haW5pbmdQYXRoXSA9IHBhdGguc3BsaXQoJy4nKTtcblxuICAgIGlmICh0aGlzLnN0YXRlLmxpc3RDb2xsYXBzZWQgfHwgdGhpcy5zdGF0ZS5pdGVtc0NvbGxhcHNlZFtpbmRleF0pIHtcbiAgICAgIGNvbnN0IG5ld0l0ZW1zQ29sbGFwc2VkID0gWy4uLnRoaXMuc3RhdGUuaXRlbXNDb2xsYXBzZWRdO1xuICAgICAgbmV3SXRlbXNDb2xsYXBzZWRbaW5kZXhdID0gZmFsc2U7XG4gICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICB7XG4gICAgICAgICAgbGlzdENvbGxhcHNlZDogZmFsc2UsXG4gICAgICAgICAgaXRlbXNDb2xsYXBzZWQ6IG5ld0l0ZW1zQ29sbGFwc2VkLFxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5zdGF0ZS5rZXlzW2luZGV4XTtcbiAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jaGlsZFJlZnNba2V5XTtcbiAgICAgICAgICBpZiAoY29udHJvbD8uZm9jdXMpIHtcbiAgICAgICAgICAgIGNvbnRyb2wuZm9jdXMocmVtYWluaW5nUGF0aC5qb2luKCcuJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuc3RhdGUua2V5c1tpbmRleF07XG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jaGlsZFJlZnNba2V5XTtcbiAgICAgIGlmIChjb250cm9sPy5mb2N1cykge1xuICAgICAgICBjb250cm9sLmZvY3VzKHJlbWFpbmluZ1BhdGguam9pbignLicpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZGlzcGxheS1uYW1lXG4gIHJlbmRlckl0ZW0gPSAoaXRlbSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjbGFzc05hbWVXcmFwcGVyLFxuICAgICAgZWRpdG9yQ29udHJvbCxcbiAgICAgIG9uVmFsaWRhdGVPYmplY3QsXG4gICAgICBtZXRhZGF0YSxcbiAgICAgIGNsZWFyRmllbGRFcnJvcnMsXG4gICAgICBmaWVsZHNFcnJvcnMsXG4gICAgICBjb250cm9sUmVmLFxuICAgICAgcmVzb2x2ZVdpZGdldCxcbiAgICAgIHBhcmVudElkcyxcbiAgICAgIGZvcklELFxuICAgICAgdCxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQsIGtleXMgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgY29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWRbaW5kZXhdO1xuICAgIGNvbnN0IGtleSA9IGtleXNbaW5kZXhdO1xuICAgIGxldCBmaWVsZCA9IHRoaXMucHJvcHMuZmllbGQ7XG4gICAgY29uc3QgaGFzRXJyb3IgPSB0aGlzLmhhc0Vycm9yKGluZGV4KTtcbiAgICBjb25zdCBpc1ZhcmlhYmxlVHlwZXNMaXN0ID0gdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5NSVhFRDtcbiAgICBpZiAoaXNWYXJpYWJsZVR5cGVzTGlzdCkge1xuICAgICAgZmllbGQgPSBnZXRUeXBlZEZpZWxkRm9yVmFsdWUoZmllbGQsIGl0ZW0pO1xuICAgICAgaWYgKCFmaWVsZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJFcnJvbmVvdXNUeXBlZEl0ZW0oaW5kZXgsIGl0ZW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8U29ydGFibGVMaXN0SXRlbVxuICAgICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBjb2xsYXBzZWQgJiYgc3R5bGVzLmxpc3RDb250cm9sSXRlbUNvbGxhcHNlZF19XG4gICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIGlkPXtrZXl9XG4gICAgICAgIGtleXM9e2tleXN9XG4gICAgICA+XG4gICAgICAgIHtpc1ZhcmlhYmxlVHlwZXNMaXN0ICYmIChcbiAgICAgICAgICA8TGFiZWxDb21wb25lbnRcbiAgICAgICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgICAgIGlzQWN0aXZlPXtmYWxzZX1cbiAgICAgICAgICAgIGhhc0Vycm9ycz17aGFzRXJyb3J9XG4gICAgICAgICAgICB1bmlxdWVGaWVsZElkPXt0aGlzLnVuaXF1ZUZpZWxkSWR9XG4gICAgICAgICAgICBpc0ZpZWxkT3B0aW9uYWw9e2ZpZWxkLmdldCgncmVxdWlyZWQnKSA9PT0gZmFsc2V9XG4gICAgICAgICAgICB0PXt0fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIDxTdHlsZWRMaXN0SXRlbVRvcEJhclxuICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICAgIG9uQ29sbGFwc2VUb2dnbGU9e3BhcnRpYWwodGhpcy5oYW5kbGVJdGVtQ29sbGFwc2VUb2dnbGUsIGluZGV4KX1cbiAgICAgICAgICBkcmFnSGFuZGxlPXtEcmFnSGFuZGxlfVxuICAgICAgICAgIGlkPXtrZXl9XG4gICAgICAgICAgYWxsb3dSZW1vdmU9e2ZpZWxkLmdldCgnYWxsb3dfcmVtb3ZlJywgdHJ1ZSl9XG4gICAgICAgICAgYWxsb3dSZW9yZGVyPXtmaWVsZC5nZXQoJ2FsbG93X3Jlb3JkZXInLCB0cnVlKX1cbiAgICAgICAgICBvblJlbW92ZT17cGFydGlhbCh0aGlzLmhhbmRsZVJlbW92ZSwgaW5kZXgpfVxuICAgICAgICAgIGRhdGEtdGVzdGlkPXtgc3R5bGVkLWxpc3QtaXRlbS10b3AtYmFyLSR7a2V5fWB9XG4gICAgICAgIC8+XG4gICAgICAgIDxOZXN0ZWRPYmplY3RMYWJlbCBjb2xsYXBzZWQ9e2NvbGxhcHNlZH0gZXJyb3I9e2hhc0Vycm9yfT5cbiAgICAgICAgICB7dGhpcy5vYmplY3RMYWJlbChpdGVtKX1cbiAgICAgICAgPC9OZXN0ZWRPYmplY3RMYWJlbD5cbiAgICAgICAgPENsYXNzTmFtZXM+XG4gICAgICAgICAgeyh7IGNzcywgY3ggfSkgPT4gKFxuICAgICAgICAgICAgPE9iamVjdENvbnRyb2xcbiAgICAgICAgICAgICAgY2xhc3NOYW1lV3JhcHBlcj17Y3goY2xhc3NOYW1lV3JhcHBlciwge1xuICAgICAgICAgICAgICAgIFtjc3NgXG4gICAgICAgICAgICAgICAgICAke3N0eWxlU3RyaW5ncy5jb2xsYXBzZWRPYmplY3RDb250cm9sfTtcbiAgICAgICAgICAgICAgICBgXTogY29sbGFwc2VkLFxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgdmFsdWU9e2l0ZW19XG4gICAgICAgICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgICAgICAgb25DaGFuZ2VPYmplY3Q9e3RoaXMuaGFuZGxlQ2hhbmdlRm9yKGluZGV4KX1cbiAgICAgICAgICAgICAgZWRpdG9yQ29udHJvbD17ZWRpdG9yQ29udHJvbH1cbiAgICAgICAgICAgICAgcmVzb2x2ZVdpZGdldD17cmVzb2x2ZVdpZGdldH1cbiAgICAgICAgICAgICAgbWV0YWRhdGE9e21ldGFkYXRhfVxuICAgICAgICAgICAgICBmb3JMaXN0XG4gICAgICAgICAgICAgIG9uVmFsaWRhdGVPYmplY3Q9e29uVmFsaWRhdGVPYmplY3R9XG4gICAgICAgICAgICAgIGNsZWFyRmllbGRFcnJvcnM9e2NsZWFyRmllbGRFcnJvcnN9XG4gICAgICAgICAgICAgIGZpZWxkc0Vycm9ycz17ZmllbGRzRXJyb3JzfVxuICAgICAgICAgICAgICByZWY9e3RoaXMucHJvY2Vzc0NvbnRyb2xSZWZ9XG4gICAgICAgICAgICAgIGNvbnRyb2xSZWY9e2NvbnRyb2xSZWZ9XG4gICAgICAgICAgICAgIHZhbGlkYXRpb25LZXk9e2tleX1cbiAgICAgICAgICAgICAgY29sbGFwc2VkPXtjb2xsYXBzZWR9XG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgb2JqZWN0LWNvbnRyb2wtJHtrZXl9YH1cbiAgICAgICAgICAgICAgaGFzRXJyb3I9e2hhc0Vycm9yfVxuICAgICAgICAgICAgICBwYXJlbnRJZHM9e1suLi5wYXJlbnRJZHMsIGZvcklELCBrZXldfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L0NsYXNzTmFtZXM+XG4gICAgICA8L1NvcnRhYmxlTGlzdEl0ZW0+XG4gICAgKTtcbiAgfTtcblxuICByZW5kZXJFcnJvbmVvdXNUeXBlZEl0ZW0oaW5kZXgsIGl0ZW0pIHtcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMucHJvcHMuZmllbGQ7XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZ2V0RXJyb3JNZXNzYWdlRm9yVHlwZWRGaWVsZEFuZFZhbHVlKGZpZWxkLCBpdGVtKTtcbiAgICBjb25zdCBrZXkgPSBgaXRlbS0ke2luZGV4fWA7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTb3J0YWJsZUxpc3RJdGVtXG4gICAgICAgIGNzcz17W3N0eWxlcy5saXN0Q29udHJvbEl0ZW0sIHN0eWxlcy5saXN0Q29udHJvbEl0ZW1Db2xsYXBzZWRdfVxuICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAgIGtleT17a2V5fVxuICAgICAgPlxuICAgICAgICA8U3R5bGVkTGlzdEl0ZW1Ub3BCYXJcbiAgICAgICAgICBvbkNvbGxhcHNlVG9nZ2xlPXtudWxsfVxuICAgICAgICAgIG9uUmVtb3ZlPXtwYXJ0aWFsKHRoaXMuaGFuZGxlUmVtb3ZlLCBpbmRleCwga2V5KX1cbiAgICAgICAgICBkcmFnSGFuZGxlPXtEcmFnSGFuZGxlfVxuICAgICAgICAgIGlkPXtrZXl9XG4gICAgICAgIC8+XG4gICAgICAgIDxOZXN0ZWRPYmplY3RMYWJlbCBjb2xsYXBzZWQ9e3RydWV9IGVycm9yPXt0cnVlfT5cbiAgICAgICAgICB7ZXJyb3JNZXNzYWdlfVxuICAgICAgICA8L05lc3RlZE9iamVjdExhYmVsPlxuICAgICAgPC9Tb3J0YWJsZUxpc3RJdGVtPlxuICAgICk7XG4gIH1cblxuICByZW5kZXJMaXN0Q29udHJvbCgpIHtcbiAgICBjb25zdCB7IHZhbHVlLCBmb3JJRCwgZmllbGQsIGNsYXNzTmFtZVdyYXBwZXIsIHQgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCwgbGlzdENvbGxhcHNlZCwga2V5cyB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBpdGVtcyA9IHZhbHVlIHx8IExpc3QoKTtcbiAgICBjb25zdCBsYWJlbCA9IGZpZWxkLmdldCgnbGFiZWwnLCBmaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgY29uc3QgbGFiZWxTaW5ndWxhciA9IGZpZWxkLmdldCgnbGFiZWxfc2luZ3VsYXInKSB8fCBmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpO1xuICAgIGNvbnN0IGxpc3RMYWJlbCA9IGl0ZW1zLnNpemUgPT09IDEgPyBsYWJlbFNpbmd1bGFyLnRvTG93ZXJDYXNlKCkgOiBsYWJlbC50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IG1pbmltaXplQ29sbGFwc2VkSXRlbXMgPSBmaWVsZC5nZXQoJ21pbmltaXplX2NvbGxhcHNlZCcsIGZhbHNlKTtcbiAgICBjb25zdCBhbGxJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLmV2ZXJ5KHZhbCA9PiB2YWwgPT09IHRydWUpO1xuICAgIGNvbnN0IHNlbGZDb2xsYXBzZWQgPSBhbGxJdGVtc0NvbGxhcHNlZCAmJiAobGlzdENvbGxhcHNlZCB8fCAhbWluaW1pemVDb2xsYXBzZWRJdGVtcyk7XG5cbiAgICBjb25zdCBpdGVtc0FycmF5ID0ga2V5cy5tYXAoa2V5ID0+ICh7IGlkOiBrZXkgfSkpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxDbGFzc05hbWVzPlxuICAgICAgICB7KHsgY3gsIGNzcyB9KSA9PiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgaWQ9e2ZvcklEfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjeChcbiAgICAgICAgICAgICAgY2xhc3NOYW1lV3JhcHBlcixcbiAgICAgICAgICAgICAgY3NzYFxuICAgICAgICAgICAgICAgICR7c3R5bGVTdHJpbmdzLm9iamVjdFdpZGdldFRvcEJhckNvbnRhaW5lcn1cbiAgICAgICAgICAgICAgYCxcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPE9iamVjdFdpZGdldFRvcEJhclxuICAgICAgICAgICAgICBhbGxvd0FkZD17ZmllbGQuZ2V0KCdhbGxvd19hZGQnLCB0cnVlKX1cbiAgICAgICAgICAgICAgb25BZGQ9e3RoaXMuaGFuZGxlQWRkfVxuICAgICAgICAgICAgICB0eXBlcz17ZmllbGQuZ2V0KFRZUEVTX0tFWSwgbnVsbCl9XG4gICAgICAgICAgICAgIG9uQWRkVHlwZT17dHlwZSA9PiB0aGlzLmhhbmRsZUFkZFR5cGUodHlwZSwgcmVzb2x2ZUZpZWxkS2V5VHlwZShmaWVsZCkpfVxuICAgICAgICAgICAgICBoZWFkaW5nPXtgJHtpdGVtcy5zaXplfSAke2xpc3RMYWJlbH1gfVxuICAgICAgICAgICAgICBsYWJlbD17bGFiZWxTaW5ndWxhci50b0xvd2VyQ2FzZSgpfVxuICAgICAgICAgICAgICBvbkNvbGxhcHNlVG9nZ2xlPXt0aGlzLmhhbmRsZUNvbGxhcHNlQWxsVG9nZ2xlfVxuICAgICAgICAgICAgICBjb2xsYXBzZWQ9e3NlbGZDb2xsYXBzZWR9XG4gICAgICAgICAgICAgIHQ9e3R9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgeyghc2VsZkNvbGxhcHNlZCB8fCAhbWluaW1pemVDb2xsYXBzZWRJdGVtcykgJiYgKFxuICAgICAgICAgICAgICA8U29ydGFibGVMaXN0IGl0ZW1zPXtpdGVtc0FycmF5fSBrZXlzPXtrZXlzfSBvblNvcnRFbmQ9e3RoaXMub25Tb3J0RW5kfT5cbiAgICAgICAgICAgICAgICB7aXRlbXMubWFwKHRoaXMucmVuZGVySXRlbSl9XG4gICAgICAgICAgICAgIDwvU29ydGFibGVMaXN0PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvQ2xhc3NOYW1lcz5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVySW5wdXQoKSB7XG4gICAgY29uc3QgeyBmb3JJRCwgY2xhc3NOYW1lV3JhcHBlciB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IHZhbHVlIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIGlkPXtmb3JJRH1cbiAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgIG9uRm9jdXM9e3RoaXMuaGFuZGxlRm9jdXN9XG4gICAgICAgIG9uQmx1cj17dGhpcy5oYW5kbGVCbHVyfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZVdyYXBwZXJ9XG4gICAgICAvPlxuICAgICk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuZ2V0VmFsdWVUeXBlKCkgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlckxpc3RDb250cm9sKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlcklucHV0KCk7XG4gICAgfVxuICB9XG59XG4iXX0= */"));
|
|
34
31
|
const NestedObjectLabel = /*#__PURE__*/_styled("div", {
|
|
35
32
|
target: "e11zrb3c0",
|
|
36
33
|
label: "NestedObjectLabel"
|
|
37
|
-
})("display:", props => props.collapsed ? 'block' : 'none', ";border-top:0;color:", props => props.error ? colors.errorText : 'inherit', ";background-color:", colors.textFieldBorder, ";padding:13px;border-radius:0 0 ", lengths.borderRadius, " ", lengths.borderRadius, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE0Q29DIiwiZmlsZSI6Ii4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IEltbXV0YWJsZVByb3BUeXBlcyBmcm9tICdyZWFjdC1pbW11dGFibGUtcHJvcHR5cGVzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCB7IGNzcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IExpc3QsIE1hcCwgZnJvbUpTIH0gZnJvbSAnaW1tdXRhYmxlJztcbmltcG9ydCB7IHBhcnRpYWwsIGlzRW1wdHksIHVuaXF1ZUlkIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tICd1dWlkJztcbmltcG9ydCBEZWNhcENtc1dpZGdldE9iamVjdCBmcm9tICdkZWNhcC1jbXMtd2lkZ2V0LW9iamVjdCc7XG5pbXBvcnQge1xuICBEbmRDb250ZXh0LFxuICBNb3VzZVNlbnNvcixcbiAgVG91Y2hTZW5zb3IsXG4gIGNsb3Nlc3RDZW50ZXIsXG4gIHVzZVNlbnNvcixcbiAgdXNlU2Vuc29ycyxcbn0gZnJvbSAnQGRuZC1raXQvY29yZSc7XG5pbXBvcnQgeyBTb3J0YWJsZUNvbnRleHQsIHVzZVNvcnRhYmxlIH0gZnJvbSAnQGRuZC1raXQvc29ydGFibGUnO1xuaW1wb3J0IHsgcmVzdHJpY3RUb1BhcmVudEVsZW1lbnQgfSBmcm9tICdAZG5kLWtpdC9tb2RpZmllcnMnO1xuaW1wb3J0IHsgQ1NTIH0gZnJvbSAnQGRuZC1raXQvdXRpbGl0aWVzJztcbmltcG9ydCB7XG4gIExpc3RJdGVtVG9wQmFyLFxuICBPYmplY3RXaWRnZXRUb3BCYXIsXG4gIGNvbG9ycyxcbiAgbGVuZ3RocyxcbiAgRmllbGRMYWJlbCxcbn0gZnJvbSAnZGVjYXAtY21zLXVpLWRlZmF1bHQnO1xuaW1wb3J0IHsgc3RyaW5nVGVtcGxhdGUsIHZhbGlkYXRpb25zIH0gZnJvbSAnZGVjYXAtY21zLWxpYi13aWRnZXRzJztcblxuaW1wb3J0IHtcbiAgVFlQRVNfS0VZLFxuICBnZXRUeXBlZEZpZWxkRm9yVmFsdWUsXG4gIHJlc29sdmVGaWVsZEtleVR5cGUsXG4gIGdldEVycm9yTWVzc2FnZUZvclR5cGVkRmllbGRBbmRWYWx1ZSxcbn0gZnJvbSAnLi90eXBlZExpc3RIZWxwZXJzJztcblxuY29uc3QgT2JqZWN0Q29udHJvbCA9IERlY2FwQ21zV2lkZ2V0T2JqZWN0LmNvbnRyb2xDb21wb25lbnQ7XG5cbmNvbnN0IExpc3RJdGVtID0gc3R5bGVkLmRpdigpO1xuXG5jb25zdCBTdHlsZWRMaXN0SXRlbVRvcEJhciA9IHN0eWxlZChMaXN0SXRlbVRvcEJhcilgXG4gIGJhY2tncm91bmQtY29sb3I6ICR7Y29sb3JzLnRleHRGaWVsZEJvcmRlcn07XG5gO1xuXG5jb25zdCBOZXN0ZWRPYmplY3RMYWJlbCA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6ICR7cHJvcHMgPT4gKHByb3BzLmNvbGxhcHNlZCA/ICdibG9jaycgOiAnbm9uZScpfTtcbiAgYm9yZGVyLXRvcDogMDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gKHByb3BzLmVycm9yID8gY29sb3JzLmVycm9yVGV4dCA6ICdpbmhlcml0Jyl9O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAke2NvbG9ycy50ZXh0RmllbGRCb3JkZXJ9O1xuICBwYWRkaW5nOiAxM3B4O1xuICBib3JkZXItcmFkaXVzOiAwIDAgJHtsZW5ndGhzLmJvcmRlclJhZGl1c30gJHtsZW5ndGhzLmJvcmRlclJhZGl1c307XG5gO1xuXG5jb25zdCBzdHlsZVN0cmluZ3MgPSB7XG4gIGNvbGxhcHNlZE9iamVjdENvbnRyb2w6IGBcbiAgICBkaXNwbGF5OiBub25lO1xuICBgLFxuICBvYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXI6IGBcbiAgICBwYWRkaW5nOiAke2xlbmd0aHMub2JqZWN0V2lkZ2V0VG9wQmFyQ29udGFpbmVyUGFkZGluZ307XG4gIGAsXG59O1xuXG5jb25zdCBzdHlsZXMgPSB7XG4gIGxpc3RDb250cm9sSXRlbTogY3NzYFxuICAgIG1hcmdpbi10b3A6IDE4cHg7XG5cbiAgICAmOmZpcnN0LW9mLXR5cGUge1xuICAgICAgbWFyZ2luLXRvcDogMjZweDtcbiAgICB9XG4gIGAsXG4gIGxpc3RDb250cm9sSXRlbUNvbGxhcHNlZDogY3NzYFxuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICBgLFxufTtcblxuZnVuY3Rpb24gU29ydGFibGVMaXN0KHsgaXRlbXMsIGNoaWxkcmVuLCBvblNvcnRFbmQsIGtleXMgfSkge1xuICBjb25zdCBhY3RpdmF0aW9uQ29uc3RyYWludCA9IHsgZGlzdGFuY2U6IDQgfTtcbiAgY29uc3Qgc2Vuc29ycyA9IHVzZVNlbnNvcnMoXG4gICAgdXNlU2Vuc29yKE1vdXNlU2Vuc29yLCB7IGFjdGl2YXRpb25Db25zdHJhaW50IH0pLFxuICAgIHVzZVNlbnNvcihUb3VjaFNlbnNvciwgeyBhY3RpdmF0aW9uQ29uc3RyYWludCB9KSxcbiAgKTtcblxuICBmdW5jdGlvbiBoYW5kbGVTb3J0RW5kKHsgYWN0aXZlLCBvdmVyIH0pIHtcbiAgICBvblNvcnRFbmQoe1xuICAgICAgb2xkSW5kZXg6IGtleXMuaW5kZXhPZihhY3RpdmUuaWQpLFxuICAgICAgbmV3SW5kZXg6IGtleXMuaW5kZXhPZihvdmVyLmlkKSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdj5cbiAgICAgIDxEbmRDb250ZXh0XG4gICAgICAgIG1vZGlmaWVycz17W3Jlc3RyaWN0VG9QYXJlbnRFbGVtZW50XX1cbiAgICAgICAgY29sbGlzaW9uRGV0ZWN0aW9uPXtjbG9zZXN0Q2VudGVyfVxuICAgICAgICBzZW5zb3JzPXtzZW5zb3JzfVxuICAgICAgICBvbkRyYWdFbmQ9e2hhbmRsZVNvcnRFbmR9XG4gICAgICA+XG4gICAgICAgIDxTb3J0YWJsZUNvbnRleHQgaXRlbXM9e2l0ZW1zfT57Y2hpbGRyZW59PC9Tb3J0YWJsZUNvbnRleHQ+XG4gICAgICA8L0RuZENvbnRleHQ+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFNvcnRhYmxlTGlzdEl0ZW0ocHJvcHMpIHtcbiAgY29uc3QgeyBzZXROb2RlUmVmLCB0cmFuc2Zvcm0sIHRyYW5zaXRpb24gfSA9IHVzZVNvcnRhYmxlKHtcbiAgICBpZDogcHJvcHMuaWQsXG4gIH0pO1xuXG4gIGNvbnN0IHN0eWxlID0ge1xuICAgIHRyYW5zZm9ybTogQ1NTLlRyYW5zZm9ybS50b1N0cmluZyh0cmFuc2Zvcm0pLFxuICAgIHRyYW5zaXRpb24sXG4gIH07XG5cbiAgY29uc3QgeyBjb2xsYXBzZWQgfSA9IHByb3BzO1xuXG4gIHJldHVybiAoXG4gICAgPExpc3RJdGVtXG4gICAgICBzb3J0YWJsZVxuICAgICAgcmVmPXtzZXROb2RlUmVmfVxuICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgY3NzPXtbc3R5bGVzLmxpc3RDb250cm9sSXRlbSwgY29sbGFwc2VkICYmIHN0eWxlcy5saXN0Q29udHJvbEl0ZW1Db2xsYXBzZWRdfVxuICAgID5cbiAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICA8L0xpc3RJdGVtPlxuICApO1xufVxuXG5mdW5jdGlvbiBEcmFnSGFuZGxlKHsgY2hpbGRyZW4sIGlkIH0pIHtcbiAgY29uc3QgeyBhdHRyaWJ1dGVzLCBsaXN0ZW5lcnMgfSA9IHVzZVNvcnRhYmxlKHtcbiAgICBpZCxcbiAgfSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IHsuLi5hdHRyaWJ1dGVzfSB7Li4ubGlzdGVuZXJzfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuY29uc3QgdmFsdWVUeXBlcyA9IHtcbiAgU0lOR0xFOiAnU0lOR0xFJyxcbiAgTVVMVElQTEU6ICdNVUxUSVBMRScsXG4gIE1JWEVEOiAnTUlYRUQnLFxufTtcblxuZnVuY3Rpb24gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgbGFiZWwsIGl0ZW0pIHtcbiAgY29uc3QgZGF0YSA9IHN0cmluZ1RlbXBsYXRlLmFkZEZpbGVUZW1wbGF0ZUZpZWxkcyhcbiAgICBlbnRyeS5nZXQoJ3BhdGgnKSxcbiAgICBpdGVtLnNldCgnZmllbGRzLmxhYmVsJywgbGFiZWwpLFxuICApO1xuICByZXR1cm4gc3RyaW5nVGVtcGxhdGUuY29tcGlsZVN0cmluZ1RlbXBsYXRlKHN1bW1hcnksIG51bGwsICcnLCBkYXRhKTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVJdGVtKGZpZWxkLCBpdGVtKSB7XG4gIGlmICghTWFwLmlzTWFwKGl0ZW0pKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYCcke2ZpZWxkLmdldCgnbmFtZScpfScgZmllbGQgaXRlbSB2YWx1ZSB2YWx1ZSBzaG91bGQgYmUgYSBtYXAgYnV0IGlzIGEgJyR7dHlwZW9mIGl0ZW19J2AsXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIExhYmVsQ29tcG9uZW50KHsgZmllbGQsIGlzQWN0aXZlLCBoYXNFcnJvcnMsIHVuaXF1ZUZpZWxkSWQsIGlzRmllbGRPcHRpb25hbCwgdCB9KSB7XG4gIGNvbnN0IGxhYmVsID0gYCR7ZmllbGQuZ2V0KCdsYWJlbCcsIGZpZWxkLmdldCgnbmFtZScpKX1gO1xuICByZXR1cm4gKFxuICAgIDxGaWVsZExhYmVsIGlzQWN0aXZlPXtpc0FjdGl2ZX0gaGFzRXJyb3JzPXtoYXNFcnJvcnN9IGh0bWxGb3I9e3VuaXF1ZUZpZWxkSWR9PlxuICAgICAge2xhYmVsfSB7YCR7aXNGaWVsZE9wdGlvbmFsID8gYCAoJHt0KCdlZGl0b3IuZWRpdG9yQ29udHJvbC5maWVsZC5vcHRpb25hbCcpfSlgIDogJyd9YH1cbiAgICA8L0ZpZWxkTGFiZWw+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExpc3RDb250cm9sIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgY2hpbGRSZWZzID0ge307XG5cbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICBtZXRhZGF0YTogSW1tdXRhYmxlUHJvcFR5cGVzLm1hcCxcbiAgICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvbkNoYW5nZU9iamVjdDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvblZhbGlkYXRlT2JqZWN0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHZhbGlkYXRlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHZhbHVlOiBJbW11dGFibGVQcm9wVHlwZXMubGlzdCxcbiAgICBmaWVsZDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBmb3JJRDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjb250cm9sUmVmOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBtZWRpYVBhdGhzOiBJbW11dGFibGVQcm9wVHlwZXMubWFwLmlzUmVxdWlyZWQsXG4gICAgZ2V0QXNzZXQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25PcGVuTWVkaWFMaWJyYXJ5OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uQWRkQXNzZXQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25SZW1vdmVJbnNlcnRlZE1lZGlhOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGNsYXNzTmFtZVdyYXBwZXI6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBzZXRBY3RpdmVTdHlsZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBzZXRJbmFjdGl2ZVN0eWxlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGVkaXRvckNvbnRyb2w6IFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkLFxuICAgIHJlc29sdmVXaWRnZXQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgY2xlYXJGaWVsZEVycm9yczogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBmaWVsZHNFcnJvcnM6IEltbXV0YWJsZVByb3BUeXBlcy5tYXAuaXNSZXF1aXJlZCxcbiAgICBlbnRyeTogSW1tdXRhYmxlUHJvcFR5cGVzLm1hcC5pc1JlcXVpcmVkLFxuICAgIHQ6IFByb3BUeXBlcy5mdW5jLFxuICB9O1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgdmFsdWU6IExpc3QoKSxcbiAgICBwYXJlbnRJZHM6IFtdLFxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIGNvbnN0IHsgZmllbGQsIHZhbHVlIH0gPSBwcm9wcztcbiAgICBjb25zdCBsaXN0Q29sbGFwc2VkID0gZmllbGQuZ2V0KCdjb2xsYXBzZWQnLCB0cnVlKTtcbiAgICBjb25zdCBpdGVtc0NvbGxhcHNlZCA9ICh2YWx1ZSAmJiBBcnJheSh2YWx1ZS5zaXplKS5maWxsKGxpc3RDb2xsYXBzZWQpKSB8fCBbXTtcbiAgICBjb25zdCBrZXlzID0gKHZhbHVlICYmIEFycmF5LmZyb20oeyBsZW5ndGg6IHZhbHVlLnNpemUgfSwgKCkgPT4gdXVpZCgpKSkgfHwgW107XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgbGlzdENvbGxhcHNlZCxcbiAgICAgIGl0ZW1zQ29sbGFwc2VkLFxuICAgICAgdmFsdWU6IHRoaXMudmFsdWVUb1N0cmluZyh2YWx1ZSksXG4gICAgICBrZXlzLFxuICAgIH07XG4gIH1cblxuICB2YWx1ZVRvU3RyaW5nID0gdmFsdWUgPT4ge1xuICAgIGxldCBzdHJpbmdWYWx1ZTtcbiAgICBpZiAoTGlzdC5pc0xpc3QodmFsdWUpIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBzdHJpbmdWYWx1ZSA9IHZhbHVlLmpvaW4oJywnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgRXhwZWN0ZWQgTGlzdCB2YWx1ZSB0byBiZSBhbiBhcnJheSBidXQgcmVjZWl2ZWQgJyR7dmFsdWV9JyB3aXRoIHR5cGUgb2YgJyR7dHlwZW9mIHZhbHVlfScuIFBsZWFzZSBjaGVjayB0aGUgdmFsdWUgcHJvdmlkZWQgdG8gdGhlICcke3RoaXMucHJvcHMuZmllbGQuZ2V0KFxuICAgICAgICAgICduYW1lJyxcbiAgICAgICAgKX0nIGZpZWxkYCxcbiAgICAgICk7XG4gICAgICBzdHJpbmdWYWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBzdHJpbmdWYWx1ZS5yZXBsYWNlKC8sKFteXFxzXXwkKS9nLCAnLCAkMScpO1xuICB9O1xuXG4gIGdldFZhbHVlVHlwZSA9ICgpID0+IHtcbiAgICBjb25zdCB7IGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChmaWVsZC5nZXQoJ2ZpZWxkcycpKSB7XG4gICAgICByZXR1cm4gdmFsdWVUeXBlcy5NVUxUSVBMRTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkLmdldCgnZmllbGQnKSkge1xuICAgICAgcmV0dXJuIHZhbHVlVHlwZXMuU0lOR0xFO1xuICAgIH0gZWxzZSBpZiAoZmllbGQuZ2V0KFRZUEVTX0tFWSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZVR5cGVzLk1JWEVEO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH07XG5cbiAgdW5pcXVlRmllbGRJZCA9IHVuaXF1ZUlkKGAke3RoaXMucHJvcHMuZmllbGQuZ2V0KCduYW1lJyl9LWZpZWxkLWApO1xuICAvKipcbiAgICogQWx3YXlzIHVwZGF0ZSBzbyB0aGF0IGVhY2ggbmVzdGVkIHdpZGdldCBoYXMgdGhlIG9wdGlvbiB0byB1cGRhdGUuIFRoaXMgaXNcbiAgICogcmVxdWlyZWQgYmVjYXVzZSBDb250cm9sSE9DIHByb3ZpZGVzIGEgZGVmYXVsdCBgc2hvdWxkQ29tcG9uZW50VXBkYXRlYFxuICAgKiB3aGljaCBvbmx5IHVwZGF0ZXMgaWYgdGhlIHZhbHVlIGNoYW5nZXMsIGJ1dCBldmVyeSB3aWRnZXQgbXVzdCBiZSBhbGxvd2VkXG4gICAqIHRvIG92ZXJyaWRlIHRoaXMuXG4gICAqL1xuICBzaG91bGRDb21wb25lbnRVcGRhdGUoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBoYW5kbGVDaGFuZ2UgPSBlID0+IHtcbiAgICBjb25zdCB7IG9uQ2hhbmdlIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy5zdGF0ZS52YWx1ZTtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IGUudGFyZ2V0LnZhbHVlLnRyaW0oKTtcbiAgICBjb25zdCBsaXN0VmFsdWUgPSBuZXdWYWx1ZSA/IG5ld1ZhbHVlLnNwbGl0KCcsJykgOiBbXTtcbiAgICBpZiAobmV3VmFsdWUubWF0Y2goLywkLykgJiYgb2xkVmFsdWUubWF0Y2goLywgJC8pKSB7XG4gICAgICBsaXN0VmFsdWUucG9wKCk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPSB0aGlzLnZhbHVlVG9TdHJpbmcobGlzdFZhbHVlKTtcbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHBhcnNlZFZhbHVlIH0pO1xuICAgIG9uQ2hhbmdlKExpc3QobGlzdFZhbHVlLm1hcCh2YWwgPT4gdmFsLnRyaW0oKSkpKTtcbiAgfTtcblxuICBoYW5kbGVGb2N1cyA9ICgpID0+IHtcbiAgICB0aGlzLnByb3BzLnNldEFjdGl2ZVN0eWxlKCk7XG4gIH07XG5cbiAgaGFuZGxlQmx1ciA9IGUgPT4ge1xuICAgIGNvbnN0IGxpc3RWYWx1ZSA9IGUudGFyZ2V0LnZhbHVlXG4gICAgICAuc3BsaXQoJywnKVxuICAgICAgLm1hcChlbCA9PiBlbC50cmltKCkpXG4gICAgICAuZmlsdGVyKGVsID0+IGVsKTtcbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHRoaXMudmFsdWVUb1N0cmluZyhsaXN0VmFsdWUpIH0pO1xuICAgIHRoaXMucHJvcHMuc2V0SW5hY3RpdmVTdHlsZSgpO1xuICB9O1xuXG4gIGhhbmRsZUFkZCA9IGUgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHBhcnNlZFZhbHVlID1cbiAgICAgIHRoaXMuZ2V0VmFsdWVUeXBlKCkgPT09IHZhbHVlVHlwZXMuU0lOR0xFXG4gICAgICAgID8gdGhpcy5zaW5nbGVEZWZhdWx0KClcbiAgICAgICAgOiBmcm9tSlModGhpcy5tdWx0aXBsZURlZmF1bHQoZmllbGQuZ2V0KCdmaWVsZHMnKSkpO1xuICAgIHRoaXMuYWRkSXRlbShwYXJzZWRWYWx1ZSk7XG4gIH07XG5cbiAgc2luZ2xlRGVmYXVsdCA9ICgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5maWVsZC5nZXRJbihbJ2ZpZWxkJywgJ2RlZmF1bHQnXSwgbnVsbCk7XG4gIH07XG5cbiAgbXVsdGlwbGVEZWZhdWx0ID0gZmllbGRzID0+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KGZpZWxkcyk7XG4gIH07XG5cbiAgaGFuZGxlQWRkVHlwZSA9ICh0eXBlLCB0eXBlS2V5KSA9PiB7XG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPSBmcm9tSlModGhpcy5taXhlZERlZmF1bHQodHlwZUtleSwgdHlwZSkpO1xuICAgIHRoaXMuYWRkSXRlbShwYXJzZWRWYWx1ZSk7XG4gIH07XG5cbiAgbWl4ZWREZWZhdWx0ID0gKHR5cGVLZXksIHR5cGUpID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZFR5cGUgPSB0aGlzLnByb3BzLmZpZWxkLmdldChUWVBFU19LRVkpLmZpbmQoZiA9PiBmLmdldCgnbmFtZScpID09PSB0eXBlKTtcbiAgICBjb25zdCBmaWVsZHMgPSBzZWxlY3RlZFR5cGUuZ2V0KCdmaWVsZHMnKSB8fCBbc2VsZWN0ZWRUeXBlLmdldCgnZmllbGQnKV07XG5cbiAgICByZXR1cm4gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KGZpZWxkcywgeyBbdHlwZUtleV06IHR5cGUgfSk7XG4gIH07XG5cbiAgZ2V0RmllbGRzRGVmYXVsdCA9IChmaWVsZHMsIGluaXRpYWxWYWx1ZSA9IHt9KSA9PiB7XG4gICAgcmV0dXJuIGZpZWxkcy5yZWR1Y2UoKGFjYywgaXRlbSkgPT4ge1xuICAgICAgY29uc3Qgc3ViZmllbGRzID0gaXRlbS5nZXQoJ2ZpZWxkJykgfHwgaXRlbS5nZXQoJ2ZpZWxkcycpO1xuICAgICAgY29uc3Qgb2JqZWN0ID0gaXRlbS5nZXQoJ3dpZGdldCcpID09ICdvYmplY3QnO1xuICAgICAgY29uc3QgbmFtZSA9IGl0ZW0uZ2V0KCduYW1lJyk7XG4gICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSBpdGVtLmdldCgnZGVmYXVsdCcsIG51bGwpO1xuXG4gICAgICBpZiAoTGlzdC5pc0xpc3Qoc3ViZmllbGRzKSAmJiBvYmplY3QpIHtcbiAgICAgICAgY29uc3Qgc3ViRGVmYXVsdFZhbHVlID0gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KHN1YmZpZWxkcyk7XG4gICAgICAgICFpc0VtcHR5KHN1YkRlZmF1bHRWYWx1ZSkgJiYgKGFjY1tuYW1lXSA9IHN1YkRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9XG5cbiAgICAgIGlmIChNYXAuaXNNYXAoc3ViZmllbGRzKSAmJiBvYmplY3QpIHtcbiAgICAgICAgY29uc3Qgc3ViRGVmYXVsdFZhbHVlID0gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KFtzdWJmaWVsZHNdKTtcbiAgICAgICAgIWlzRW1wdHkoc3ViRGVmYXVsdFZhbHVlKSAmJiAoYWNjW25hbWVdID0gc3ViRGVmYXVsdFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH1cblxuICAgICAgaWYgKGRlZmF1bHRWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBhY2NbbmFtZV0gPSBkZWZhdWx0VmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgaW5pdGlhbFZhbHVlKTtcbiAgfTtcblxuICBhZGRJdGVtID0gcGFyc2VkVmFsdWUgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWUsIG9uQ2hhbmdlLCBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBhZGRUb1RvcCA9IGZpZWxkLmdldCgnYWRkX3RvX3RvcCcsIGZhbHNlKTtcblxuICAgIGNvbnN0IGl0ZW1LZXkgPSB1dWlkKCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBpdGVtc0NvbGxhcHNlZDogYWRkVG9Ub3BcbiAgICAgICAgPyBbZmFsc2UsIC4uLnRoaXMuc3RhdGUuaXRlbXNDb2xsYXBzZWRdXG4gICAgICAgIDogWy4uLnRoaXMuc3RhdGUuaXRlbXNDb2xsYXBzZWQsIGZhbHNlXSxcbiAgICAgIGtleXM6IGFkZFRvVG9wID8gW2l0ZW1LZXksIC4uLnRoaXMuc3RhdGUua2V5c10gOiBbLi4udGhpcy5zdGF0ZS5rZXlzLCBpdGVtS2V5XSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGxpc3RWYWx1ZSA9IHZhbHVlIHx8IExpc3QoKTtcbiAgICBpZiAoYWRkVG9Ub3ApIHtcbiAgICAgIG9uQ2hhbmdlKGxpc3RWYWx1ZS51bnNoaWZ0KHBhcnNlZFZhbHVlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uQ2hhbmdlKGxpc3RWYWx1ZS5wdXNoKHBhcnNlZFZhbHVlKSk7XG4gICAgfVxuICB9O1xuXG4gIHByb2Nlc3NDb250cm9sUmVmID0gcmVmID0+IHtcbiAgICBpZiAoIXJlZikgcmV0dXJuO1xuICAgIGNvbnN0IHtcbiAgICAgIHByb3BzOiB7IHZhbGlkYXRpb25LZXk6IGtleSB9LFxuICAgIH0gPSByZWY7XG4gICAgdGhpcy5jaGlsZFJlZnNba2V5XSA9IHJlZjtcbiAgICB0aGlzLnByb3BzLmNvbnRyb2xSZWY/Lih0aGlzKTtcbiAgfTtcblxuICB2YWxpZGF0ZSA9ICgpID0+IHtcbiAgICAvLyBGaXJzdCB2YWxpZGF0ZSBjaGlsZCB3aWRnZXRzIGlmIHRoaXMgaXMgYSBjb21wbGV4IGxpc3RcbiAgICBjb25zdCBoYXNDaGlsZFdpZGdldHMgPSB0aGlzLmdldFZhbHVlVHlwZSgpICYmIE9iamVjdC5rZXlzKHRoaXMuY2hpbGRSZWZzKS5sZW5ndGggPiAwO1xuICAgIGlmIChoYXNDaGlsZFdpZGdldHMpIHtcbiAgICAgIE9iamVjdC52YWx1ZXModGhpcy5jaGlsZFJlZnMpLmZvckVhY2god2lkZ2V0ID0+IHtcbiAgICAgICAgd2lkZ2V0Py52YWxpZGF0ZT8uKCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9wcy52YWxpZGF0ZSgpO1xuICAgIH1cbiAgICB0aGlzLnByb3BzLm9uVmFsaWRhdGVPYmplY3QodGhpcy5wcm9wcy5mb3JJRCwgdGhpcy52YWxpZGF0ZVNpemUoKSk7XG4gIH07XG5cbiAgdmFsaWRhdGVTaXplID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgZmllbGQsIHZhbHVlLCB0IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG1pbiA9IGZpZWxkLmdldCgnbWluJyk7XG4gICAgY29uc3QgbWF4ID0gZmllbGQuZ2V0KCdtYXgnKTtcbiAgICBjb25zdCByZXF1aXJlZCA9IGZpZWxkLmdldCgncmVxdWlyZWQnLCB0cnVlKTtcblxuICAgIGlmICghcmVxdWlyZWQgJiYgIXZhbHVlPy5zaXplKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgZXJyb3IgPSB2YWxpZGF0aW9ucy52YWxpZGF0ZU1pbk1heChcbiAgICAgIHQsXG4gICAgICBmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpLFxuICAgICAgdmFsdWUsXG4gICAgICBtaW4sXG4gICAgICBtYXgsXG4gICAgKTtcblxuICAgIHJldHVybiBlcnJvciA/IFtlcnJvcl0gOiBbXTtcbiAgfTtcblxuICAvKipcbiAgICogSW4gY2FzZSB0aGUgYG9uQ2hhbmdlT2JqZWN0YCBmdW5jdGlvbiBpcyBmcm96ZW4gYnkgYSBjaGlsZCB3aWRnZXQgaW1wbGVtZW50YXRpb24sXG4gICAqIGUuZy4gd2hlbiBkZWJvdW5jZWQsIGFsd2F5cyBnZXQgdGhlIGxhdGVzdCBvYmplY3QgdmFsdWUgaW5zdGVhZCBvZiB1c2luZ1xuICAgKiBgdGhpcy5wcm9wcy52YWx1ZWAgZGlyZWN0bHkuXG4gICAqL1xuICBnZXRPYmplY3RWYWx1ZSA9IGlkeCA9PiB0aGlzLnByb3BzLnZhbHVlLmdldChpZHgpIHx8IE1hcCgpO1xuXG4gIGhhbmRsZUNoYW5nZUZvcihpbmRleCkge1xuICAgIHJldHVybiAoZiwgbmV3VmFsdWUsIG5ld01ldGFkYXRhKSA9PiB7XG4gICAgICBjb25zdCB7IHZhbHVlLCBtZXRhZGF0YSwgb25DaGFuZ2UsIGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBmaWVsZC5nZXQoJ25hbWUnKTtcbiAgICAgIGNvbnN0IGxpc3RGaWVsZE9iamVjdFdpZGdldCA9IGZpZWxkLmdldEluKFsnZmllbGQnLCAnd2lkZ2V0J10pID09PSAnb2JqZWN0JztcbiAgICAgIGNvbnN0IHdpdGhOYW1lS2V5ID1cbiAgICAgICAgdGhpcy5nZXRWYWx1ZVR5cGUoKSAhPT0gdmFsdWVUeXBlcy5TSU5HTEUgfHxcbiAgICAgICAgKHRoaXMuZ2V0VmFsdWVUeXBlKCkgPT09IHZhbHVlVHlwZXMuU0lOR0xFICYmIGxpc3RGaWVsZE9iamVjdFdpZGdldCk7XG4gICAgICBjb25zdCBuZXdPYmplY3RWYWx1ZSA9IHdpdGhOYW1lS2V5XG4gICAgICAgID8gdGhpcy5nZXRPYmplY3RWYWx1ZShpbmRleCkuc2V0KGYuZ2V0KCduYW1lJyksIG5ld1ZhbHVlKVxuICAgICAgICA6IG5ld1ZhbHVlO1xuICAgICAgY29uc3QgcGFyc2VkTWV0YWRhdGEgPSB7XG4gICAgICAgIFtjb2xsZWN0aW9uTmFtZV06IE9iamVjdC5hc3NpZ24obWV0YWRhdGEgPyBtZXRhZGF0YS50b0pTKCkgOiB7fSwgbmV3TWV0YWRhdGEgfHwge30pLFxuICAgICAgfTtcbiAgICAgIG9uQ2hhbmdlKHZhbHVlLnNldChpbmRleCwgbmV3T2JqZWN0VmFsdWUpLCBwYXJzZWRNZXRhZGF0YSk7XG4gICAgfTtcbiAgfVxuXG4gIGhhbmRsZVJlbW92ZSA9IChpbmRleCwgZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3Qge1xuICAgICAgdmFsdWUsXG4gICAgICBtZXRhZGF0YSxcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgZmllbGQsXG4gICAgICBjbGVhckZpZWxkRXJyb3JzLFxuICAgICAgb25WYWxpZGF0ZU9iamVjdCxcbiAgICAgIGZvcklELFxuICAgICAgZmllbGRzRXJyb3JzLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBmaWVsZC5nZXQoJ25hbWUnKTtcbiAgICBjb25zdCBpc1NpbmdsZUZpZWxkID0gdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5TSU5HTEU7XG5cbiAgICBjb25zdCBtZXRhZGF0YVJlbW92ZVBhdGggPSBpc1NpbmdsZUZpZWxkID8gdmFsdWUuZ2V0KGluZGV4KSA6IHZhbHVlLmdldChpbmRleCkudmFsdWVTZXEoKTtcbiAgICBjb25zdCBwYXJzZWRNZXRhZGF0YSA9XG4gICAgICBtZXRhZGF0YSAmJiAhbWV0YWRhdGEuaXNFbXB0eSgpXG4gICAgICAgID8geyBbY29sbGVjdGlvbk5hbWVdOiBtZXRhZGF0YS5yZW1vdmVJbihtZXRhZGF0YVJlbW92ZVBhdGgpIH1cbiAgICAgICAgOiBtZXRhZGF0YTtcblxuICAgIC8vIEdldCB0aGUga2V5IG9mIHRoZSBpdGVtIGJlaW5nIHJlbW92ZWRcbiAgICBjb25zdCByZW1vdmVkS2V5ID0gdGhpcy5zdGF0ZS5rZXlzW2luZGV4XTtcblxuICAgIC8vIFVwZGF0ZSBzdGF0ZSB3aGlsZSBwcmVzZXJ2aW5nIGtleXMgZm9yIHJlbWFpbmluZyBpdGVtc1xuICAgIGNvbnN0IG5ld0tleXMgPSBbLi4udGhpcy5zdGF0ZS5rZXlzXTtcbiAgICBuZXdLZXlzLnNwbGljZShpbmRleCwgMSk7XG4gICAgaXRlbXNDb2xsYXBzZWQuc3BsaWNlKGluZGV4LCAxKTtcblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXNDb2xsYXBzZWQ6IFsuLi5pdGVtc0NvbGxhcHNlZF0sXG4gICAgICBrZXlzOiBuZXdLZXlzLFxuICAgIH0pO1xuXG4gICAgLy8gQ2xlYXIgdGhlIHJlZiBmb3IgdGhlIHJlbW92ZWQgaXRlbVxuICAgIGRlbGV0ZSB0aGlzLmNoaWxkUmVmc1tyZW1vdmVkS2V5XTtcblxuICAgIGNvbnN0IG5ld1ZhbHVlID0gdmFsdWUuZGVsZXRlKGluZGV4KTtcblxuICAgIC8vIENsZWFyIGVycm9ycyBmb3IgdGhlIHJlbW92ZWQgaXRlbSBhbmQgaXRzIGNoaWxkcmVuXG4gICAgaWYgKGZpZWxkc0Vycm9ycykge1xuICAgICAgT2JqZWN0LmVudHJpZXMoZmllbGRzRXJyb3JzLnRvSlMoKSkuZm9yRWFjaCgoW2ZpZWxkSWQsIGVycm9yc10pID0+IHtcbiAgICAgICAgaWYgKGVycm9ycy5zb21lKGVyciA9PiBlcnIucGFyZW50SWRzPy5pbmNsdWRlcyhyZW1vdmVkS2V5KSkpIHtcbiAgICAgICAgICBjbGVhckZpZWxkRXJyb3JzKGZpZWxkSWQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBJZiBsaXN0IGlzIGVtcHR5LCBtYXJrIGl0IGFzIHZhbGlkXG4gICAgaWYgKG5ld1ZhbHVlLnNpemUgPT09IDApIHtcbiAgICAgIGNsZWFyRmllbGRFcnJvcnMoZm9ySUQpO1xuICAgICAgb25WYWxpZGF0ZU9iamVjdChmb3JJRCwgW10pO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSB0aGUgdmFsdWUgbGFzdCB0byBlbnN1cmUgYWxsIGVycm9yIHN0YXRlcyBhcmUgY2xlYXJlZFxuICAgIG9uQ2hhbmdlKG5ld1ZhbHVlLCBwYXJzZWRNZXRhZGF0YSk7XG4gIH07XG5cbiAgaGFuZGxlSXRlbUNvbGxhcHNlVG9nZ2xlID0gKGluZGV4LCBldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBuZXdJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLm1hcCgoY29sbGFwc2VkLCBpdGVtSW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCA9PT0gaXRlbUluZGV4KSB7XG4gICAgICAgIHJldHVybiAhY29sbGFwc2VkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbGxhcHNlZDtcbiAgICB9KTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGl0ZW1zQ29sbGFwc2VkOiBuZXdJdGVtc0NvbGxhcHNlZCxcbiAgICB9KTtcbiAgfTtcblxuICBoYW5kbGVDb2xsYXBzZUFsbFRvZ2dsZSA9IGUgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IHZhbHVlLCBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkLCBsaXN0Q29sbGFwc2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IG1pbmltaXplQ29sbGFwc2VkSXRlbXMgPSBmaWVsZC5nZXQoJ21pbmltaXplX2NvbGxhcHNlZCcsIGZhbHNlKTtcbiAgICBjb25zdCBsaXN0Q29sbGFwc2VkQnlEZWZhdWx0ID0gZmllbGQuZ2V0KCdjb2xsYXBzZWQnLCB0cnVlKTtcbiAgICBjb25zdCBhbGxJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLmV2ZXJ5KHZhbCA9PiB2YWwgPT09IHRydWUpO1xuXG4gICAgaWYgKG1pbmltaXplQ29sbGFwc2VkSXRlbXMpIHtcbiAgICAgIGxldCB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZDtcbiAgICAgIC8vIE9ubHkgYWxsb3cgY29sbGFwc2luZyBhbGwgaXRlbXMgaW4gdGhpcyBtb2RlIGJ1dCBub3Qgb3BlbmluZyBhbGwgYXQgb25jZVxuICAgICAgaWYgKCFsaXN0Q29sbGFwc2VkIHx8ICFsaXN0Q29sbGFwc2VkQnlEZWZhdWx0KSB7XG4gICAgICAgIHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCA9IEFycmF5KHZhbHVlLnNpemUpLmZpbGwoIWxpc3RDb2xsYXBzZWQpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGxpc3RDb2xsYXBzZWQ6ICFsaXN0Q29sbGFwc2VkLCBpdGVtc0NvbGxhcHNlZDogdXBkYXRlZEl0ZW1zQ29sbGFwc2VkIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgaXRlbXNDb2xsYXBzZWQ6IEFycmF5KHZhbHVlLnNpemUpLmZpbGwoIWFsbEl0ZW1zQ29sbGFwc2VkKSB9KTtcbiAgICB9XG4gIH07XG5cbiAgb2JqZWN0TGFiZWwoaXRlbSkge1xuICAgIGNvbnN0IHsgZmllbGQsIGVudHJ5IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHZhbHVlVHlwZSA9IHRoaXMuZ2V0VmFsdWVUeXBlKCk7XG4gICAgc3dpdGNoICh2YWx1ZVR5cGUpIHtcbiAgICAgIGNhc2UgdmFsdWVUeXBlcy5NSVhFRDoge1xuICAgICAgICBpZiAoIXZhbGlkYXRlSXRlbShmaWVsZCwgaXRlbSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXRlbVR5cGUgPSBnZXRUeXBlZEZpZWxkRm9yVmFsdWUoZmllbGQsIGl0ZW0pO1xuICAgICAgICBjb25zdCBsYWJlbCA9IGl0ZW1UeXBlLmdldCgnbGFiZWwnLCBpdGVtVHlwZS5nZXQoJ25hbWUnKSk7XG4gICAgICAgIC8vIGVhY2ggdHlwZSBjYW4gaGF2ZSBpdHMgb3duIHN1bW1hcnksIGJ1dCBkZWZhdWx0IHRvIHRoZSBsaXN0IHN1bW1hcnkgaWYgZXhpc3RzXG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBpdGVtVHlwZS5nZXQoJ3N1bW1hcnknLCBmaWVsZC5nZXQoJ3N1bW1hcnknKSk7XG4gICAgICAgIGNvbnN0IGxhYmVsUmV0dXJuID0gc3VtbWFyeSA/IGhhbmRsZVN1bW1hcnkoc3VtbWFyeSwgZW50cnksIGxhYmVsLCBpdGVtKSA6IGxhYmVsO1xuICAgICAgICByZXR1cm4gbGFiZWxSZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlIHZhbHVlVHlwZXMuU0lOR0xFOiB7XG4gICAgICAgIGNvbnN0IHNpbmdsZUZpZWxkID0gZmllbGQuZ2V0KCdmaWVsZCcpO1xuICAgICAgICBjb25zdCBsYWJlbCA9IHNpbmdsZUZpZWxkLmdldCgnbGFiZWwnLCBzaW5nbGVGaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBmaWVsZC5nZXQoJ3N1bW1hcnknKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGZyb21KUyh7IFtzaW5nbGVGaWVsZC5nZXQoJ25hbWUnKV06IGl0ZW0gfSk7XG4gICAgICAgIGNvbnN0IGxhYmVsUmV0dXJuID0gc3VtbWFyeSA/IGhhbmRsZVN1bW1hcnkoc3VtbWFyeSwgZW50cnksIGxhYmVsLCBkYXRhKSA6IGxhYmVsO1xuICAgICAgICByZXR1cm4gbGFiZWxSZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlIHZhbHVlVHlwZXMuTVVMVElQTEU6IHtcbiAgICAgICAgaWYgKCF2YWxpZGF0ZUl0ZW0oZmllbGQsIGl0ZW0pKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG11bHRpRmllbGRzID0gZmllbGQuZ2V0KCdmaWVsZHMnKTtcbiAgICAgICAgY29uc3QgbGFiZWxGaWVsZCA9IG11bHRpRmllbGRzICYmIG11bHRpRmllbGRzLmZpcnN0KCk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gaXRlbS5nZXQobGFiZWxGaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBmaWVsZC5nZXQoJ3N1bW1hcnknKTtcbiAgICAgICAgY29uc3QgbGFiZWxSZXR1cm4gPSBzdW1tYXJ5ID8gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgdmFsdWUsIGl0ZW0pIDogdmFsdWU7XG4gICAgICAgIHJldHVybiAobGFiZWxSZXR1cm4gfHwgYE5vICR7bGFiZWxGaWVsZC5nZXQoJ25hbWUnKX1gKS50b1N0cmluZygpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBvblNvcnRFbmQgPSAoeyBvbGRJbmRleCwgbmV3SW5kZXggfSkgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCwga2V5cyB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIC8vIFVwZGF0ZSB2YWx1ZVxuICAgIGNvbnN0IGl0ZW0gPSB2YWx1ZS5nZXQob2xkSW5kZXgpO1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gdmFsdWUuZGVsZXRlKG9sZEluZGV4KS5pbnNlcnQobmV3SW5kZXgsIGl0ZW0pO1xuICAgIHRoaXMucHJvcHMub25DaGFuZ2UobmV3VmFsdWUpO1xuXG4gICAgLy8gVXBkYXRlIGNvbGxhcHNpbmdcbiAgICBjb25zdCBjb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZFtvbGRJbmRleF07XG4gICAgaXRlbXNDb2xsYXBzZWQuc3BsaWNlKG9sZEluZGV4LCAxKTtcbiAgICBjb25zdCB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgPSBbLi4uaXRlbXNDb2xsYXBzZWRdO1xuICAgIHVwZGF0ZWRJdGVtc0NvbGxhcHNlZC5zcGxpY2UobmV3SW5kZXgsIDAsIGNvbGxhcHNlZCk7XG5cbiAgICAvLyBNb3ZlIGtleXMgdG8gbWFpbnRhaW4gcmVsYXRpb25zaGlwc1xuICAgIGNvbnN0IG1vdmVkS2V5ID0ga2V5c1tvbGRJbmRleF07XG4gICAgY29uc3QgdXBkYXRlZEtleXMgPSBbLi4ua2V5c107XG4gICAgdXBkYXRlZEtleXMuc3BsaWNlKG9sZEluZGV4LCAxKTtcbiAgICB1cGRhdGVkS2V5cy5zcGxpY2UobmV3SW5kZXgsIDAsIG1vdmVkS2V5KTtcblxuICAgIHRoaXMuc2V0U3RhdGUoeyBpdGVtc0NvbGxhcHNlZDogdXBkYXRlZEl0ZW1zQ29sbGFwc2VkLCBrZXlzOiB1cGRhdGVkS2V5cyB9KTtcbiAgfTtcblxuICBoYXNFcnJvciA9IGluZGV4ID0+IHtcbiAgICBjb25zdCB7IGZpZWxkc0Vycm9ycyB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoZmllbGRzRXJyb3JzICYmIGZpZWxkc0Vycm9ycy5zaXplID4gMCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZmllbGRzRXJyb3JzLnRvSlMoKSkuc29tZShhcnIgPT5cbiAgICAgICAgYXJyLnNvbWUoZXJyID0+IGVyci5wYXJlbnRJZHMgJiYgZXJyLnBhcmVudElkcy5pbmNsdWRlcyh0aGlzLnN0YXRlLmtleXNbaW5kZXhdKSksXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICBmb2N1cyhwYXRoKSB7XG4gICAgY29uc3QgW2luZGV4LCAuLi5yZW1haW5pbmdQYXRoXSA9IHBhdGguc3BsaXQoJy4nKTtcblxuICAgIGlmICh0aGlzLnN0YXRlLmxpc3RDb2xsYXBzZWQgfHwgdGhpcy5zdGF0ZS5pdGVtc0NvbGxhcHNlZFtpbmRleF0pIHtcbiAgICAgIGNvbnN0IG5ld0l0ZW1zQ29sbGFwc2VkID0gWy4uLnRoaXMuc3RhdGUuaXRlbXNDb2xsYXBzZWRdO1xuICAgICAgbmV3SXRlbXNDb2xsYXBzZWRbaW5kZXhdID0gZmFsc2U7XG4gICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICB7XG4gICAgICAgICAgbGlzdENvbGxhcHNlZDogZmFsc2UsXG4gICAgICAgICAgaXRlbXNDb2xsYXBzZWQ6IG5ld0l0ZW1zQ29sbGFwc2VkLFxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5zdGF0ZS5rZXlzW2luZGV4XTtcbiAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jaGlsZFJlZnNba2V5XTtcbiAgICAgICAgICBpZiAoY29udHJvbD8uZm9jdXMpIHtcbiAgICAgICAgICAgIGNvbnRyb2wuZm9jdXMocmVtYWluaW5nUGF0aC5qb2luKCcuJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuc3RhdGUua2V5c1tpbmRleF07XG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jaGlsZFJlZnNba2V5XTtcbiAgICAgIGlmIChjb250cm9sPy5mb2N1cykge1xuICAgICAgICBjb250cm9sLmZvY3VzKHJlbWFpbmluZ1BhdGguam9pbignLicpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZGlzcGxheS1uYW1lXG4gIHJlbmRlckl0ZW0gPSAoaXRlbSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjbGFzc05hbWVXcmFwcGVyLFxuICAgICAgZWRpdG9yQ29udHJvbCxcbiAgICAgIG9uVmFsaWRhdGVPYmplY3QsXG4gICAgICBtZXRhZGF0YSxcbiAgICAgIGNsZWFyRmllbGRFcnJvcnMsXG4gICAgICBmaWVsZHNFcnJvcnMsXG4gICAgICBjb250cm9sUmVmLFxuICAgICAgcmVzb2x2ZVdpZGdldCxcbiAgICAgIHBhcmVudElkcyxcbiAgICAgIGZvcklELFxuICAgICAgdCxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQsIGtleXMgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgY29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWRbaW5kZXhdO1xuICAgIGNvbnN0IGtleSA9IGtleXNbaW5kZXhdO1xuICAgIGxldCBmaWVsZCA9IHRoaXMucHJvcHMuZmllbGQ7XG4gICAgY29uc3QgaGFzRXJyb3IgPSB0aGlzLmhhc0Vycm9yKGluZGV4KTtcbiAgICBjb25zdCBpc1ZhcmlhYmxlVHlwZXNMaXN0ID0gdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5NSVhFRDtcbiAgICBpZiAoaXNWYXJpYWJsZVR5cGVzTGlzdCkge1xuICAgICAgZmllbGQgPSBnZXRUeXBlZEZpZWxkRm9yVmFsdWUoZmllbGQsIGl0ZW0pO1xuICAgICAgaWYgKCFmaWVsZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJFcnJvbmVvdXNUeXBlZEl0ZW0oaW5kZXgsIGl0ZW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8U29ydGFibGVMaXN0SXRlbVxuICAgICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBjb2xsYXBzZWQgJiYgc3R5bGVzLmxpc3RDb250cm9sSXRlbUNvbGxhcHNlZF19XG4gICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIGlkPXtrZXl9XG4gICAgICAgIGtleXM9e2tleXN9XG4gICAgICA+XG4gICAgICAgIHtpc1ZhcmlhYmxlVHlwZXNMaXN0ICYmIChcbiAgICAgICAgICA8TGFiZWxDb21wb25lbnRcbiAgICAgICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgICAgIGlzQWN0aXZlPXtmYWxzZX1cbiAgICAgICAgICAgIGhhc0Vycm9ycz17aGFzRXJyb3J9XG4gICAgICAgICAgICB1bmlxdWVGaWVsZElkPXt0aGlzLnVuaXF1ZUZpZWxkSWR9XG4gICAgICAgICAgICBpc0ZpZWxkT3B0aW9uYWw9e2ZpZWxkLmdldCgncmVxdWlyZWQnKSA9PT0gZmFsc2V9XG4gICAgICAgICAgICB0PXt0fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIDxTdHlsZWRMaXN0SXRlbVRvcEJhclxuICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICAgIG9uQ29sbGFwc2VUb2dnbGU9e3BhcnRpYWwodGhpcy5oYW5kbGVJdGVtQ29sbGFwc2VUb2dnbGUsIGluZGV4KX1cbiAgICAgICAgICBkcmFnSGFuZGxlPXtEcmFnSGFuZGxlfVxuICAgICAgICAgIGlkPXtrZXl9XG4gICAgICAgICAgb25SZW1vdmU9e3BhcnRpYWwodGhpcy5oYW5kbGVSZW1vdmUsIGluZGV4KX1cbiAgICAgICAgICBkYXRhLXRlc3RpZD17YHN0eWxlZC1saXN0LWl0ZW0tdG9wLWJhci0ke2tleX1gfVxuICAgICAgICAvPlxuICAgICAgICA8TmVzdGVkT2JqZWN0TGFiZWwgY29sbGFwc2VkPXtjb2xsYXBzZWR9IGVycm9yPXtoYXNFcnJvcn0+XG4gICAgICAgICAge3RoaXMub2JqZWN0TGFiZWwoaXRlbSl9XG4gICAgICAgIDwvTmVzdGVkT2JqZWN0TGFiZWw+XG4gICAgICAgIDxDbGFzc05hbWVzPlxuICAgICAgICAgIHsoeyBjc3MsIGN4IH0pID0+IChcbiAgICAgICAgICAgIDxPYmplY3RDb250cm9sXG4gICAgICAgICAgICAgIGNsYXNzTmFtZVdyYXBwZXI9e2N4KGNsYXNzTmFtZVdyYXBwZXIsIHtcbiAgICAgICAgICAgICAgICBbY3NzYFxuICAgICAgICAgICAgICAgICAgJHtzdHlsZVN0cmluZ3MuY29sbGFwc2VkT2JqZWN0Q29udHJvbH07XG4gICAgICAgICAgICAgICAgYF06IGNvbGxhcHNlZCxcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIHZhbHVlPXtpdGVtfVxuICAgICAgICAgICAgICBmaWVsZD17ZmllbGR9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlT2JqZWN0PXt0aGlzLmhhbmRsZUNoYW5nZUZvcihpbmRleCl9XG4gICAgICAgICAgICAgIGVkaXRvckNvbnRyb2w9e2VkaXRvckNvbnRyb2x9XG4gICAgICAgICAgICAgIHJlc29sdmVXaWRnZXQ9e3Jlc29sdmVXaWRnZXR9XG4gICAgICAgICAgICAgIG1ldGFkYXRhPXttZXRhZGF0YX1cbiAgICAgICAgICAgICAgZm9yTGlzdFxuICAgICAgICAgICAgICBvblZhbGlkYXRlT2JqZWN0PXtvblZhbGlkYXRlT2JqZWN0fVxuICAgICAgICAgICAgICBjbGVhckZpZWxkRXJyb3JzPXtjbGVhckZpZWxkRXJyb3JzfVxuICAgICAgICAgICAgICBmaWVsZHNFcnJvcnM9e2ZpZWxkc0Vycm9yc31cbiAgICAgICAgICAgICAgcmVmPXt0aGlzLnByb2Nlc3NDb250cm9sUmVmfVxuICAgICAgICAgICAgICBjb250cm9sUmVmPXtjb250cm9sUmVmfVxuICAgICAgICAgICAgICB2YWxpZGF0aW9uS2V5PXtrZXl9XG4gICAgICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICAgICAgICBkYXRhLXRlc3RpZD17YG9iamVjdC1jb250cm9sLSR7a2V5fWB9XG4gICAgICAgICAgICAgIGhhc0Vycm9yPXtoYXNFcnJvcn1cbiAgICAgICAgICAgICAgcGFyZW50SWRzPXtbLi4ucGFyZW50SWRzLCBmb3JJRCwga2V5XX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9DbGFzc05hbWVzPlxuICAgICAgPC9Tb3J0YWJsZUxpc3RJdGVtPlxuICAgICk7XG4gIH07XG5cbiAgcmVuZGVyRXJyb25lb3VzVHlwZWRJdGVtKGluZGV4LCBpdGVtKSB7XG4gICAgY29uc3QgZmllbGQgPSB0aGlzLnByb3BzLmZpZWxkO1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZUZvclR5cGVkRmllbGRBbmRWYWx1ZShmaWVsZCwgaXRlbSk7XG4gICAgY29uc3Qga2V5ID0gYGl0ZW0tJHtpbmRleH1gO1xuICAgIHJldHVybiAoXG4gICAgICA8U29ydGFibGVMaXN0SXRlbVxuICAgICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBzdHlsZXMubGlzdENvbnRyb2xJdGVtQ29sbGFwc2VkXX1cbiAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICBrZXk9e2tleX1cbiAgICAgID5cbiAgICAgICAgPFN0eWxlZExpc3RJdGVtVG9wQmFyXG4gICAgICAgICAgb25Db2xsYXBzZVRvZ2dsZT17bnVsbH1cbiAgICAgICAgICBvblJlbW92ZT17cGFydGlhbCh0aGlzLmhhbmRsZVJlbW92ZSwgaW5kZXgsIGtleSl9XG4gICAgICAgICAgZHJhZ0hhbmRsZT17RHJhZ0hhbmRsZX1cbiAgICAgICAgICBpZD17a2V5fVxuICAgICAgICAvPlxuICAgICAgICA8TmVzdGVkT2JqZWN0TGFiZWwgY29sbGFwc2VkPXt0cnVlfSBlcnJvcj17dHJ1ZX0+XG4gICAgICAgICAge2Vycm9yTWVzc2FnZX1cbiAgICAgICAgPC9OZXN0ZWRPYmplY3RMYWJlbD5cbiAgICAgIDwvU29ydGFibGVMaXN0SXRlbT5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyTGlzdENvbnRyb2woKSB7XG4gICAgY29uc3QgeyB2YWx1ZSwgZm9ySUQsIGZpZWxkLCBjbGFzc05hbWVXcmFwcGVyLCB0IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQsIGxpc3RDb2xsYXBzZWQsIGtleXMgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgaXRlbXMgPSB2YWx1ZSB8fCBMaXN0KCk7XG4gICAgY29uc3QgbGFiZWwgPSBmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpO1xuICAgIGNvbnN0IGxhYmVsU2luZ3VsYXIgPSBmaWVsZC5nZXQoJ2xhYmVsX3Npbmd1bGFyJykgfHwgZmllbGQuZ2V0KCdsYWJlbCcsIGZpZWxkLmdldCgnbmFtZScpKTtcbiAgICBjb25zdCBsaXN0TGFiZWwgPSBpdGVtcy5zaXplID09PSAxID8gbGFiZWxTaW5ndWxhci50b0xvd2VyQ2FzZSgpIDogbGFiZWwudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBtaW5pbWl6ZUNvbGxhcHNlZEl0ZW1zID0gZmllbGQuZ2V0KCdtaW5pbWl6ZV9jb2xsYXBzZWQnLCBmYWxzZSk7XG4gICAgY29uc3QgYWxsSXRlbXNDb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZC5ldmVyeSh2YWwgPT4gdmFsID09PSB0cnVlKTtcbiAgICBjb25zdCBzZWxmQ29sbGFwc2VkID0gYWxsSXRlbXNDb2xsYXBzZWQgJiYgKGxpc3RDb2xsYXBzZWQgfHwgIW1pbmltaXplQ29sbGFwc2VkSXRlbXMpO1xuXG4gICAgY29uc3QgaXRlbXNBcnJheSA9IGtleXMubWFwKGtleSA9PiAoeyBpZDoga2V5IH0pKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8Q2xhc3NOYW1lcz5cbiAgICAgICAgeyh7IGN4LCBjc3MgfSkgPT4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGlkPXtmb3JJRH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goXG4gICAgICAgICAgICAgIGNsYXNzTmFtZVdyYXBwZXIsXG4gICAgICAgICAgICAgIGNzc2BcbiAgICAgICAgICAgICAgICAke3N0eWxlU3RyaW5ncy5vYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXJ9XG4gICAgICAgICAgICAgIGAsXG4gICAgICAgICAgICApfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxPYmplY3RXaWRnZXRUb3BCYXJcbiAgICAgICAgICAgICAgYWxsb3dBZGQ9e2ZpZWxkLmdldCgnYWxsb3dfYWRkJywgdHJ1ZSl9XG4gICAgICAgICAgICAgIG9uQWRkPXt0aGlzLmhhbmRsZUFkZH1cbiAgICAgICAgICAgICAgdHlwZXM9e2ZpZWxkLmdldChUWVBFU19LRVksIG51bGwpfVxuICAgICAgICAgICAgICBvbkFkZFR5cGU9e3R5cGUgPT4gdGhpcy5oYW5kbGVBZGRUeXBlKHR5cGUsIHJlc29sdmVGaWVsZEtleVR5cGUoZmllbGQpKX1cbiAgICAgICAgICAgICAgaGVhZGluZz17YCR7aXRlbXMuc2l6ZX0gJHtsaXN0TGFiZWx9YH1cbiAgICAgICAgICAgICAgbGFiZWw9e2xhYmVsU2luZ3VsYXIudG9Mb3dlckNhc2UoKX1cbiAgICAgICAgICAgICAgb25Db2xsYXBzZVRvZ2dsZT17dGhpcy5oYW5kbGVDb2xsYXBzZUFsbFRvZ2dsZX1cbiAgICAgICAgICAgICAgY29sbGFwc2VkPXtzZWxmQ29sbGFwc2VkfVxuICAgICAgICAgICAgICB0PXt0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHsoIXNlbGZDb2xsYXBzZWQgfHwgIW1pbmltaXplQ29sbGFwc2VkSXRlbXMpICYmIChcbiAgICAgICAgICAgICAgPFNvcnRhYmxlTGlzdCBpdGVtcz17aXRlbXNBcnJheX0ga2V5cz17a2V5c30gb25Tb3J0RW5kPXt0aGlzLm9uU29ydEVuZH0+XG4gICAgICAgICAgICAgICAge2l0ZW1zLm1hcCh0aGlzLnJlbmRlckl0ZW0pfVxuICAgICAgICAgICAgICA8L1NvcnRhYmxlTGlzdD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L0NsYXNzTmFtZXM+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlcklucHV0KCkge1xuICAgIGNvbnN0IHsgZm9ySUQsIGNsYXNzTmFtZVdyYXBwZXIgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIHJldHVybiAoXG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBpZD17Zm9ySUR9XG4gICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICBvbkZvY3VzPXt0aGlzLmhhbmRsZUZvY3VzfVxuICAgICAgICBvbkJsdXI9e3RoaXMuaGFuZGxlQmx1cn1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVXcmFwcGVyfVxuICAgICAgLz5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmdldFZhbHVlVHlwZSgpICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJMaXN0Q29udHJvbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJJbnB1dCgpO1xuICAgIH1cbiAgfVxufVxuIl19 */"));
|
|
34
|
+
})("display:", props => props.collapsed ? 'block' : 'none', ";border-top:0;color:", props => props.error ? colors.errorText : 'inherit', ";background-color:", colors.textFieldBorder, ";padding:13px;border-radius:0 0 ", lengths.borderRadius, " ", lengths.borderRadius, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE4Q29DIiwiZmlsZSI6Ii4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IEltbXV0YWJsZVByb3BUeXBlcyBmcm9tICdyZWFjdC1pbW11dGFibGUtcHJvcHR5cGVzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCB7IGNzcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IExpc3QsIE1hcCwgZnJvbUpTIH0gZnJvbSAnaW1tdXRhYmxlJztcbmltcG9ydCBwYXJ0aWFsIGZyb20gJ2xvZGFzaC9wYXJ0aWFsJztcbmltcG9ydCBpc0VtcHR5IGZyb20gJ2xvZGFzaC9pc0VtcHR5JztcbmltcG9ydCB1bmlxdWVJZCBmcm9tICdsb2Rhc2gvdW5pcXVlSWQnO1xuaW1wb3J0IHsgdjQgYXMgdXVpZCB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IERlY2FwQ21zV2lkZ2V0T2JqZWN0IGZyb20gJ2RlY2FwLWNtcy13aWRnZXQtb2JqZWN0JztcbmltcG9ydCB7XG4gIERuZENvbnRleHQsXG4gIE1vdXNlU2Vuc29yLFxuICBUb3VjaFNlbnNvcixcbiAgY2xvc2VzdENlbnRlcixcbiAgdXNlU2Vuc29yLFxuICB1c2VTZW5zb3JzLFxufSBmcm9tICdAZG5kLWtpdC9jb3JlJztcbmltcG9ydCB7IFNvcnRhYmxlQ29udGV4dCwgdXNlU29ydGFibGUgfSBmcm9tICdAZG5kLWtpdC9zb3J0YWJsZSc7XG5pbXBvcnQgeyByZXN0cmljdFRvUGFyZW50RWxlbWVudCB9IGZyb20gJ0BkbmQta2l0L21vZGlmaWVycyc7XG5pbXBvcnQgeyBDU1MgfSBmcm9tICdAZG5kLWtpdC91dGlsaXRpZXMnO1xuaW1wb3J0IHtcbiAgTGlzdEl0ZW1Ub3BCYXIsXG4gIE9iamVjdFdpZGdldFRvcEJhcixcbiAgY29sb3JzLFxuICBsZW5ndGhzLFxuICBGaWVsZExhYmVsLFxufSBmcm9tICdkZWNhcC1jbXMtdWktZGVmYXVsdCc7XG5pbXBvcnQgeyBzdHJpbmdUZW1wbGF0ZSwgdmFsaWRhdGlvbnMgfSBmcm9tICdkZWNhcC1jbXMtbGliLXdpZGdldHMnO1xuXG5pbXBvcnQge1xuICBUWVBFU19LRVksXG4gIGdldFR5cGVkRmllbGRGb3JWYWx1ZSxcbiAgcmVzb2x2ZUZpZWxkS2V5VHlwZSxcbiAgZ2V0RXJyb3JNZXNzYWdlRm9yVHlwZWRGaWVsZEFuZFZhbHVlLFxufSBmcm9tICcuL3R5cGVkTGlzdEhlbHBlcnMnO1xuXG5jb25zdCBPYmplY3RDb250cm9sID0gRGVjYXBDbXNXaWRnZXRPYmplY3QuY29udHJvbENvbXBvbmVudDtcblxuY29uc3QgTGlzdEl0ZW0gPSBzdHlsZWQuZGl2KCk7XG5cbmNvbnN0IFN0eWxlZExpc3RJdGVtVG9wQmFyID0gc3R5bGVkKExpc3RJdGVtVG9wQmFyKWBcbiAgYmFja2dyb3VuZC1jb2xvcjogJHtjb2xvcnMudGV4dEZpZWxkQm9yZGVyfTtcbmA7XG5cbmNvbnN0IE5lc3RlZE9iamVjdExhYmVsID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogJHtwcm9wcyA9PiAocHJvcHMuY29sbGFwc2VkID8gJ2Jsb2NrJyA6ICdub25lJyl9O1xuICBib3JkZXItdG9wOiAwO1xuICBjb2xvcjogJHtwcm9wcyA9PiAocHJvcHMuZXJyb3IgPyBjb2xvcnMuZXJyb3JUZXh0IDogJ2luaGVyaXQnKX07XG4gIGJhY2tncm91bmQtY29sb3I6ICR7Y29sb3JzLnRleHRGaWVsZEJvcmRlcn07XG4gIHBhZGRpbmc6IDEzcHg7XG4gIGJvcmRlci1yYWRpdXM6IDAgMCAke2xlbmd0aHMuYm9yZGVyUmFkaXVzfSAke2xlbmd0aHMuYm9yZGVyUmFkaXVzfTtcbmA7XG5cbmNvbnN0IHN0eWxlU3RyaW5ncyA9IHtcbiAgY29sbGFwc2VkT2JqZWN0Q29udHJvbDogYFxuICAgIGRpc3BsYXk6IG5vbmU7XG4gIGAsXG4gIG9iamVjdFdpZGdldFRvcEJhckNvbnRhaW5lcjogYFxuICAgIHBhZGRpbmc6ICR7bGVuZ3Rocy5vYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXJQYWRkaW5nfTtcbiAgYCxcbn07XG5cbmNvbnN0IHN0eWxlcyA9IHtcbiAgbGlzdENvbnRyb2xJdGVtOiBjc3NgXG4gICAgbWFyZ2luLXRvcDogMThweDtcblxuICAgICY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgICBtYXJnaW4tdG9wOiAyNnB4O1xuICAgIH1cbiAgYCxcbiAgbGlzdENvbnRyb2xJdGVtQ29sbGFwc2VkOiBjc3NgXG4gICAgcGFkZGluZy1ib3R0b206IDA7XG4gIGAsXG59O1xuXG5mdW5jdGlvbiBTb3J0YWJsZUxpc3QoeyBpdGVtcywgY2hpbGRyZW4sIG9uU29ydEVuZCwga2V5cyB9KSB7XG4gIGNvbnN0IGFjdGl2YXRpb25Db25zdHJhaW50ID0geyBkaXN0YW5jZTogNCB9O1xuICBjb25zdCBzZW5zb3JzID0gdXNlU2Vuc29ycyhcbiAgICB1c2VTZW5zb3IoTW91c2VTZW5zb3IsIHsgYWN0aXZhdGlvbkNvbnN0cmFpbnQgfSksXG4gICAgdXNlU2Vuc29yKFRvdWNoU2Vuc29yLCB7IGFjdGl2YXRpb25Db25zdHJhaW50IH0pLFxuICApO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZVNvcnRFbmQoeyBhY3RpdmUsIG92ZXIgfSkge1xuICAgIG9uU29ydEVuZCh7XG4gICAgICBvbGRJbmRleDoga2V5cy5pbmRleE9mKGFjdGl2ZS5pZCksXG4gICAgICBuZXdJbmRleDoga2V5cy5pbmRleE9mKG92ZXIuaWQpLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2PlxuICAgICAgPERuZENvbnRleHRcbiAgICAgICAgbW9kaWZpZXJzPXtbcmVzdHJpY3RUb1BhcmVudEVsZW1lbnRdfVxuICAgICAgICBjb2xsaXNpb25EZXRlY3Rpb249e2Nsb3Nlc3RDZW50ZXJ9XG4gICAgICAgIHNlbnNvcnM9e3NlbnNvcnN9XG4gICAgICAgIG9uRHJhZ0VuZD17aGFuZGxlU29ydEVuZH1cbiAgICAgID5cbiAgICAgICAgPFNvcnRhYmxlQ29udGV4dCBpdGVtcz17aXRlbXN9PntjaGlsZHJlbn08L1NvcnRhYmxlQ29udGV4dD5cbiAgICAgIDwvRG5kQ29udGV4dD5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gU29ydGFibGVMaXN0SXRlbShwcm9wcykge1xuICBjb25zdCB7IHNldE5vZGVSZWYsIHRyYW5zZm9ybSwgdHJhbnNpdGlvbiB9ID0gdXNlU29ydGFibGUoe1xuICAgIGlkOiBwcm9wcy5pZCxcbiAgfSk7XG5cbiAgY29uc3Qgc3R5bGUgPSB7XG4gICAgdHJhbnNmb3JtOiBDU1MuVHJhbnNmb3JtLnRvU3RyaW5nKHRyYW5zZm9ybSksXG4gICAgdHJhbnNpdGlvbixcbiAgfTtcblxuICBjb25zdCB7IGNvbGxhcHNlZCB9ID0gcHJvcHM7XG5cbiAgcmV0dXJuIChcbiAgICA8TGlzdEl0ZW1cbiAgICAgIHNvcnRhYmxlXG4gICAgICByZWY9e3NldE5vZGVSZWZ9XG4gICAgICBzdHlsZT17c3R5bGV9XG4gICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBjb2xsYXBzZWQgJiYgc3R5bGVzLmxpc3RDb250cm9sSXRlbUNvbGxhcHNlZF19XG4gICAgPlxuICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgIDwvTGlzdEl0ZW0+XG4gICk7XG59XG5cbmZ1bmN0aW9uIERyYWdIYW5kbGUoeyBjaGlsZHJlbiwgaWQgfSkge1xuICBjb25zdCB7IGF0dHJpYnV0ZXMsIGxpc3RlbmVycyB9ID0gdXNlU29ydGFibGUoe1xuICAgIGlkLFxuICB9KTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgey4uLmF0dHJpYnV0ZXN9IHsuLi5saXN0ZW5lcnN9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5jb25zdCB2YWx1ZVR5cGVzID0ge1xuICBTSU5HTEU6ICdTSU5HTEUnLFxuICBNVUxUSVBMRTogJ01VTFRJUExFJyxcbiAgTUlYRUQ6ICdNSVhFRCcsXG59O1xuXG5mdW5jdGlvbiBoYW5kbGVTdW1tYXJ5KHN1bW1hcnksIGVudHJ5LCBsYWJlbCwgaXRlbSkge1xuICBjb25zdCBkYXRhID0gc3RyaW5nVGVtcGxhdGUuYWRkRmlsZVRlbXBsYXRlRmllbGRzKFxuICAgIGVudHJ5LmdldCgncGF0aCcpLFxuICAgIGl0ZW0uc2V0KCdmaWVsZHMubGFiZWwnLCBsYWJlbCksXG4gICk7XG4gIHJldHVybiBzdHJpbmdUZW1wbGF0ZS5jb21waWxlU3RyaW5nVGVtcGxhdGUoc3VtbWFyeSwgbnVsbCwgJycsIGRhdGEpO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUl0ZW0oZmllbGQsIGl0ZW0pIHtcbiAgaWYgKCFNYXAuaXNNYXAoaXRlbSkpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgJyR7ZmllbGQuZ2V0KCduYW1lJyl9JyBmaWVsZCBpdGVtIHZhbHVlIHZhbHVlIHNob3VsZCBiZSBhIG1hcCBidXQgaXMgYSAnJHt0eXBlb2YgaXRlbX0nYCxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gTGFiZWxDb21wb25lbnQoeyBmaWVsZCwgaXNBY3RpdmUsIGhhc0Vycm9ycywgdW5pcXVlRmllbGRJZCwgaXNGaWVsZE9wdGlvbmFsLCB0IH0pIHtcbiAgY29uc3QgbGFiZWwgPSBgJHtmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpfWA7XG4gIHJldHVybiAoXG4gICAgPEZpZWxkTGFiZWwgaXNBY3RpdmU9e2lzQWN0aXZlfSBoYXNFcnJvcnM9e2hhc0Vycm9yc30gaHRtbEZvcj17dW5pcXVlRmllbGRJZH0+XG4gICAgICB7bGFiZWx9IHtgJHtpc0ZpZWxkT3B0aW9uYWwgPyBgICgke3QoJ2VkaXRvci5lZGl0b3JDb250cm9sLmZpZWxkLm9wdGlvbmFsJyl9KWAgOiAnJ31gfVxuICAgIDwvRmllbGRMYWJlbD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlzdENvbnRyb2wgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjaGlsZFJlZnMgPSB7fTtcblxuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIG1ldGFkYXRhOiBJbW11dGFibGVQcm9wVHlwZXMubWFwLFxuICAgIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uQ2hhbmdlT2JqZWN0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uVmFsaWRhdGVPYmplY3Q6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdmFsaWRhdGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdmFsdWU6IEltbXV0YWJsZVByb3BUeXBlcy5saXN0LFxuICAgIGZpZWxkOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGZvcklEOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNvbnRyb2xSZWY6IFByb3BUeXBlcy5mdW5jLFxuICAgIG1lZGlhUGF0aHM6IEltbXV0YWJsZVByb3BUeXBlcy5tYXAuaXNSZXF1aXJlZCxcbiAgICBnZXRBc3NldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvbk9wZW5NZWRpYUxpYnJhcnk6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25BZGRBc3NldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvblJlbW92ZUluc2VydGVkTWVkaWE6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgY2xhc3NOYW1lV3JhcHBlcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHNldEFjdGl2ZVN0eWxlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHNldEluYWN0aXZlU3R5bGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgZWRpdG9yQ29udHJvbDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWQsXG4gICAgcmVzb2x2ZVdpZGdldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBjbGVhckZpZWxkRXJyb3JzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGZpZWxkc0Vycm9yczogSW1tdXRhYmxlUHJvcFR5cGVzLm1hcC5pc1JlcXVpcmVkLFxuICAgIGVudHJ5OiBJbW11dGFibGVQcm9wVHlwZXMubWFwLmlzUmVxdWlyZWQsXG4gICAgdDogUHJvcFR5cGVzLmZ1bmMsXG4gIH07XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICB2YWx1ZTogTGlzdCgpLFxuICAgIHBhcmVudElkczogW10sXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgY29uc3QgeyBmaWVsZCwgdmFsdWUgfSA9IHByb3BzO1xuICAgIGNvbnN0IGxpc3RDb2xsYXBzZWQgPSBmaWVsZC5nZXQoJ2NvbGxhcHNlZCcsIHRydWUpO1xuICAgIGNvbnN0IGl0ZW1zQ29sbGFwc2VkID0gKHZhbHVlICYmIEFycmF5KHZhbHVlLnNpemUpLmZpbGwobGlzdENvbGxhcHNlZCkpIHx8IFtdO1xuICAgIGNvbnN0IGtleXMgPSAodmFsdWUgJiYgQXJyYXkuZnJvbSh7IGxlbmd0aDogdmFsdWUuc2l6ZSB9LCAoKSA9PiB1dWlkKCkpKSB8fCBbXTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBsaXN0Q29sbGFwc2VkLFxuICAgICAgaXRlbXNDb2xsYXBzZWQsXG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZVRvU3RyaW5nKHZhbHVlKSxcbiAgICAgIGtleXMsXG4gICAgfTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIC8vIE1hbnVhbGx5IHZhbGlkYXRlIFByb3BUeXBlcyAtIFJlYWN0IDE5IGJyZWFraW5nIGNoYW5nZVxuICAgIFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcyhMaXN0Q29udHJvbC5wcm9wVHlwZXMsIHRoaXMucHJvcHMsICdwcm9wJywgJ0xpc3RDb250cm9sJyk7XG4gIH1cblxuICB2YWx1ZVRvU3RyaW5nID0gdmFsdWUgPT4ge1xuICAgIGxldCBzdHJpbmdWYWx1ZTtcbiAgICBpZiAoTGlzdC5pc0xpc3QodmFsdWUpIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBzdHJpbmdWYWx1ZSA9IHZhbHVlLmpvaW4oJywnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgRXhwZWN0ZWQgTGlzdCB2YWx1ZSB0byBiZSBhbiBhcnJheSBidXQgcmVjZWl2ZWQgJyR7dmFsdWV9JyB3aXRoIHR5cGUgb2YgJyR7dHlwZW9mIHZhbHVlfScuIFBsZWFzZSBjaGVjayB0aGUgdmFsdWUgcHJvdmlkZWQgdG8gdGhlICcke3RoaXMucHJvcHMuZmllbGQuZ2V0KFxuICAgICAgICAgICduYW1lJyxcbiAgICAgICAgKX0nIGZpZWxkYCxcbiAgICAgICk7XG4gICAgICBzdHJpbmdWYWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBzdHJpbmdWYWx1ZS5yZXBsYWNlKC8sKFteXFxzXXwkKS9nLCAnLCAkMScpO1xuICB9O1xuXG4gIGdldFZhbHVlVHlwZSA9ICgpID0+IHtcbiAgICBjb25zdCB7IGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChmaWVsZC5nZXQoJ2ZpZWxkcycpKSB7XG4gICAgICByZXR1cm4gdmFsdWVUeXBlcy5NVUxUSVBMRTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkLmdldCgnZmllbGQnKSkge1xuICAgICAgcmV0dXJuIHZhbHVlVHlwZXMuU0lOR0xFO1xuICAgIH0gZWxzZSBpZiAoZmllbGQuZ2V0KFRZUEVTX0tFWSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZVR5cGVzLk1JWEVEO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH07XG5cbiAgdW5pcXVlRmllbGRJZCA9IHVuaXF1ZUlkKGAke3RoaXMucHJvcHMuZmllbGQuZ2V0KCduYW1lJyl9LWZpZWxkLWApO1xuICAvKipcbiAgICogQWx3YXlzIHVwZGF0ZSBzbyB0aGF0IGVhY2ggbmVzdGVkIHdpZGdldCBoYXMgdGhlIG9wdGlvbiB0byB1cGRhdGUuIFRoaXMgaXNcbiAgICogcmVxdWlyZWQgYmVjYXVzZSBDb250cm9sSE9DIHByb3ZpZGVzIGEgZGVmYXVsdCBgc2hvdWxkQ29tcG9uZW50VXBkYXRlYFxuICAgKiB3aGljaCBvbmx5IHVwZGF0ZXMgaWYgdGhlIHZhbHVlIGNoYW5nZXMsIGJ1dCBldmVyeSB3aWRnZXQgbXVzdCBiZSBhbGxvd2VkXG4gICAqIHRvIG92ZXJyaWRlIHRoaXMuXG4gICAqL1xuICBzaG91bGRDb21wb25lbnRVcGRhdGUoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBoYW5kbGVDaGFuZ2UgPSBlID0+IHtcbiAgICBjb25zdCB7IG9uQ2hhbmdlIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy5zdGF0ZS52YWx1ZTtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IGUudGFyZ2V0LnZhbHVlLnRyaW0oKTtcbiAgICBjb25zdCBsaXN0VmFsdWUgPSBuZXdWYWx1ZSA/IG5ld1ZhbHVlLnNwbGl0KCcsJykgOiBbXTtcbiAgICBpZiAobmV3VmFsdWUubWF0Y2goLywkLykgJiYgb2xkVmFsdWUubWF0Y2goLywgJC8pKSB7XG4gICAgICBsaXN0VmFsdWUucG9wKCk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPSB0aGlzLnZhbHVlVG9TdHJpbmcobGlzdFZhbHVlKTtcbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHBhcnNlZFZhbHVlIH0pO1xuICAgIG9uQ2hhbmdlKExpc3QobGlzdFZhbHVlLm1hcCh2YWwgPT4gdmFsLnRyaW0oKSkpKTtcbiAgfTtcblxuICBoYW5kbGVGb2N1cyA9ICgpID0+IHtcbiAgICB0aGlzLnByb3BzLnNldEFjdGl2ZVN0eWxlKCk7XG4gIH07XG5cbiAgaGFuZGxlQmx1ciA9IGUgPT4ge1xuICAgIGNvbnN0IGxpc3RWYWx1ZSA9IGUudGFyZ2V0LnZhbHVlXG4gICAgICAuc3BsaXQoJywnKVxuICAgICAgLm1hcChlbCA9PiBlbC50cmltKCkpXG4gICAgICAuZmlsdGVyKGVsID0+IGVsKTtcbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHRoaXMudmFsdWVUb1N0cmluZyhsaXN0VmFsdWUpIH0pO1xuICAgIHRoaXMucHJvcHMuc2V0SW5hY3RpdmVTdHlsZSgpO1xuICB9O1xuXG4gIGhhbmRsZUFkZCA9IGUgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHBhcnNlZFZhbHVlID1cbiAgICAgIHRoaXMuZ2V0VmFsdWVUeXBlKCkgPT09IHZhbHVlVHlwZXMuU0lOR0xFXG4gICAgICAgID8gdGhpcy5zaW5nbGVEZWZhdWx0KClcbiAgICAgICAgOiBmcm9tSlModGhpcy5tdWx0aXBsZURlZmF1bHQoZmllbGQuZ2V0KCdmaWVsZHMnKSkpO1xuICAgIHRoaXMuYWRkSXRlbShwYXJzZWRWYWx1ZSk7XG4gIH07XG5cbiAgc2luZ2xlRGVmYXVsdCA9ICgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5maWVsZC5nZXRJbihbJ2ZpZWxkJywgJ2RlZmF1bHQnXSwgbnVsbCk7XG4gIH07XG5cbiAgbXVsdGlwbGVEZWZhdWx0ID0gZmllbGRzID0+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KGZpZWxkcyk7XG4gIH07XG5cbiAgaGFuZGxlQWRkVHlwZSA9ICh0eXBlLCB0eXBlS2V5KSA9PiB7XG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPSBmcm9tSlModGhpcy5taXhlZERlZmF1bHQodHlwZUtleSwgdHlwZSkpO1xuICAgIHRoaXMuYWRkSXRlbShwYXJzZWRWYWx1ZSk7XG4gIH07XG5cbiAgbWl4ZWREZWZhdWx0ID0gKHR5cGVLZXksIHR5cGUpID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZFR5cGUgPSB0aGlzLnByb3BzLmZpZWxkLmdldChUWVBFU19LRVkpLmZpbmQoZiA9PiBmLmdldCgnbmFtZScpID09PSB0eXBlKTtcbiAgICBjb25zdCBmaWVsZHMgPSBzZWxlY3RlZFR5cGUuZ2V0KCdmaWVsZHMnKSB8fCBbc2VsZWN0ZWRUeXBlLmdldCgnZmllbGQnKV07XG5cbiAgICByZXR1cm4gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KGZpZWxkcywgeyBbdHlwZUtleV06IHR5cGUgfSk7XG4gIH07XG5cbiAgZ2V0RmllbGRzRGVmYXVsdCA9IChmaWVsZHMsIGluaXRpYWxWYWx1ZSA9IHt9KSA9PiB7XG4gICAgcmV0dXJuIGZpZWxkcy5yZWR1Y2UoKGFjYywgaXRlbSkgPT4ge1xuICAgICAgY29uc3Qgc3ViZmllbGRzID0gaXRlbS5nZXQoJ2ZpZWxkJykgfHwgaXRlbS5nZXQoJ2ZpZWxkcycpO1xuICAgICAgY29uc3Qgb2JqZWN0ID0gaXRlbS5nZXQoJ3dpZGdldCcpID09ICdvYmplY3QnO1xuICAgICAgY29uc3QgbmFtZSA9IGl0ZW0uZ2V0KCduYW1lJyk7XG4gICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSBpdGVtLmdldCgnZGVmYXVsdCcsIG51bGwpO1xuXG4gICAgICBpZiAoTGlzdC5pc0xpc3Qoc3ViZmllbGRzKSAmJiBvYmplY3QpIHtcbiAgICAgICAgY29uc3Qgc3ViRGVmYXVsdFZhbHVlID0gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KHN1YmZpZWxkcyk7XG4gICAgICAgICFpc0VtcHR5KHN1YkRlZmF1bHRWYWx1ZSkgJiYgKGFjY1tuYW1lXSA9IHN1YkRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9XG5cbiAgICAgIGlmIChNYXAuaXNNYXAoc3ViZmllbGRzKSAmJiBvYmplY3QpIHtcbiAgICAgICAgY29uc3Qgc3ViRGVmYXVsdFZhbHVlID0gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KFtzdWJmaWVsZHNdKTtcbiAgICAgICAgIWlzRW1wdHkoc3ViRGVmYXVsdFZhbHVlKSAmJiAoYWNjW25hbWVdID0gc3ViRGVmYXVsdFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH1cblxuICAgICAgaWYgKGRlZmF1bHRWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBhY2NbbmFtZV0gPSBkZWZhdWx0VmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgaW5pdGlhbFZhbHVlKTtcbiAgfTtcblxuICBhZGRJdGVtID0gcGFyc2VkVmFsdWUgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWUsIG9uQ2hhbmdlLCBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBhZGRUb1RvcCA9IGZpZWxkLmdldCgnYWRkX3RvX3RvcCcsIGZhbHNlKTtcblxuICAgIGNvbnN0IGl0ZW1LZXkgPSB1dWlkKCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBpdGVtc0NvbGxhcHNlZDogYWRkVG9Ub3BcbiAgICAgICAgPyBbZmFsc2UsIC4uLnRoaXMuc3RhdGUuaXRlbXNDb2xsYXBzZWRdXG4gICAgICAgIDogWy4uLnRoaXMuc3RhdGUuaXRlbXNDb2xsYXBzZWQsIGZhbHNlXSxcbiAgICAgIGtleXM6IGFkZFRvVG9wID8gW2l0ZW1LZXksIC4uLnRoaXMuc3RhdGUua2V5c10gOiBbLi4udGhpcy5zdGF0ZS5rZXlzLCBpdGVtS2V5XSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGxpc3RWYWx1ZSA9IHZhbHVlIHx8IExpc3QoKTtcbiAgICBpZiAoYWRkVG9Ub3ApIHtcbiAgICAgIG9uQ2hhbmdlKGxpc3RWYWx1ZS51bnNoaWZ0KHBhcnNlZFZhbHVlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uQ2hhbmdlKGxpc3RWYWx1ZS5wdXNoKHBhcnNlZFZhbHVlKSk7XG4gICAgfVxuICB9O1xuXG4gIHByb2Nlc3NDb250cm9sUmVmID0gcmVmID0+IHtcbiAgICBpZiAoIXJlZikgcmV0dXJuO1xuICAgIGNvbnN0IHtcbiAgICAgIHByb3BzOiB7IHZhbGlkYXRpb25LZXk6IGtleSB9LFxuICAgIH0gPSByZWY7XG4gICAgdGhpcy5jaGlsZFJlZnNba2V5XSA9IHJlZjtcbiAgICB0aGlzLnByb3BzLmNvbnRyb2xSZWY/Lih0aGlzKTtcbiAgfTtcblxuICB2YWxpZGF0ZSA9ICgpID0+IHtcbiAgICAvLyBGaXJzdCB2YWxpZGF0ZSBjaGlsZCB3aWRnZXRzIGlmIHRoaXMgaXMgYSBjb21wbGV4IGxpc3RcbiAgICBjb25zdCBoYXNDaGlsZFdpZGdldHMgPSB0aGlzLmdldFZhbHVlVHlwZSgpICYmIE9iamVjdC5rZXlzKHRoaXMuY2hpbGRSZWZzKS5sZW5ndGggPiAwO1xuICAgIGlmIChoYXNDaGlsZFdpZGdldHMpIHtcbiAgICAgIE9iamVjdC52YWx1ZXModGhpcy5jaGlsZFJlZnMpLmZvckVhY2god2lkZ2V0ID0+IHtcbiAgICAgICAgd2lkZ2V0Py52YWxpZGF0ZT8uKCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9wcy52YWxpZGF0ZSgpO1xuICAgIH1cbiAgICB0aGlzLnByb3BzLm9uVmFsaWRhdGVPYmplY3QodGhpcy5wcm9wcy5mb3JJRCwgdGhpcy52YWxpZGF0ZVNpemUoKSk7XG4gIH07XG5cbiAgdmFsaWRhdGVTaXplID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgZmllbGQsIHZhbHVlLCB0IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG1pbiA9IGZpZWxkLmdldCgnbWluJyk7XG4gICAgY29uc3QgbWF4ID0gZmllbGQuZ2V0KCdtYXgnKTtcbiAgICBjb25zdCByZXF1aXJlZCA9IGZpZWxkLmdldCgncmVxdWlyZWQnLCB0cnVlKTtcblxuICAgIGlmICghcmVxdWlyZWQgJiYgIXZhbHVlPy5zaXplKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgZXJyb3IgPSB2YWxpZGF0aW9ucy52YWxpZGF0ZU1pbk1heChcbiAgICAgIHQsXG4gICAgICBmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpLFxuICAgICAgdmFsdWUsXG4gICAgICBtaW4sXG4gICAgICBtYXgsXG4gICAgKTtcblxuICAgIHJldHVybiBlcnJvciA/IFtlcnJvcl0gOiBbXTtcbiAgfTtcblxuICAvKipcbiAgICogSW4gY2FzZSB0aGUgYG9uQ2hhbmdlT2JqZWN0YCBmdW5jdGlvbiBpcyBmcm96ZW4gYnkgYSBjaGlsZCB3aWRnZXQgaW1wbGVtZW50YXRpb24sXG4gICAqIGUuZy4gd2hlbiBkZWJvdW5jZWQsIGFsd2F5cyBnZXQgdGhlIGxhdGVzdCBvYmplY3QgdmFsdWUgaW5zdGVhZCBvZiB1c2luZ1xuICAgKiBgdGhpcy5wcm9wcy52YWx1ZWAgZGlyZWN0bHkuXG4gICAqL1xuICBnZXRPYmplY3RWYWx1ZSA9IGlkeCA9PiB0aGlzLnByb3BzLnZhbHVlLmdldChpZHgpIHx8IE1hcCgpO1xuXG4gIGhhbmRsZUNoYW5nZUZvcihpbmRleCkge1xuICAgIHJldHVybiAoZiwgbmV3VmFsdWUsIG5ld01ldGFkYXRhKSA9PiB7XG4gICAgICBjb25zdCB7IHZhbHVlLCBtZXRhZGF0YSwgb25DaGFuZ2UsIGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBmaWVsZC5nZXQoJ25hbWUnKTtcbiAgICAgIGNvbnN0IGxpc3RGaWVsZE9iamVjdFdpZGdldCA9IGZpZWxkLmdldEluKFsnZmllbGQnLCAnd2lkZ2V0J10pID09PSAnb2JqZWN0JztcbiAgICAgIGNvbnN0IHdpdGhOYW1lS2V5ID1cbiAgICAgICAgdGhpcy5nZXRWYWx1ZVR5cGUoKSAhPT0gdmFsdWVUeXBlcy5TSU5HTEUgfHxcbiAgICAgICAgKHRoaXMuZ2V0VmFsdWVUeXBlKCkgPT09IHZhbHVlVHlwZXMuU0lOR0xFICYmIGxpc3RGaWVsZE9iamVjdFdpZGdldCk7XG4gICAgICBjb25zdCBuZXdPYmplY3RWYWx1ZSA9IHdpdGhOYW1lS2V5XG4gICAgICAgID8gdGhpcy5nZXRPYmplY3RWYWx1ZShpbmRleCkuc2V0KGYuZ2V0KCduYW1lJyksIG5ld1ZhbHVlKVxuICAgICAgICA6IG5ld1ZhbHVlO1xuICAgICAgY29uc3QgcGFyc2VkTWV0YWRhdGEgPSB7XG4gICAgICAgIFtjb2xsZWN0aW9uTmFtZV06IE9iamVjdC5hc3NpZ24obWV0YWRhdGEgPyBtZXRhZGF0YS50b0pTKCkgOiB7fSwgbmV3TWV0YWRhdGEgfHwge30pLFxuICAgICAgfTtcbiAgICAgIG9uQ2hhbmdlKHZhbHVlLnNldChpbmRleCwgbmV3T2JqZWN0VmFsdWUpLCBwYXJzZWRNZXRhZGF0YSk7XG4gICAgfTtcbiAgfVxuXG4gIGhhbmRsZVJlbW92ZSA9IChpbmRleCwgZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3Qge1xuICAgICAgdmFsdWUsXG4gICAgICBtZXRhZGF0YSxcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgZmllbGQsXG4gICAgICBjbGVhckZpZWxkRXJyb3JzLFxuICAgICAgb25WYWxpZGF0ZU9iamVjdCxcbiAgICAgIGZvcklELFxuICAgICAgZmllbGRzRXJyb3JzLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBmaWVsZC5nZXQoJ25hbWUnKTtcbiAgICBjb25zdCBpc1NpbmdsZUZpZWxkID0gdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5TSU5HTEU7XG5cbiAgICBjb25zdCBtZXRhZGF0YVJlbW92ZVBhdGggPSBpc1NpbmdsZUZpZWxkID8gdmFsdWUuZ2V0KGluZGV4KSA6IHZhbHVlLmdldChpbmRleCkudmFsdWVTZXEoKTtcbiAgICBjb25zdCBwYXJzZWRNZXRhZGF0YSA9XG4gICAgICBtZXRhZGF0YSAmJiAhbWV0YWRhdGEuaXNFbXB0eSgpXG4gICAgICAgID8geyBbY29sbGVjdGlvbk5hbWVdOiBtZXRhZGF0YS5yZW1vdmVJbihtZXRhZGF0YVJlbW92ZVBhdGgpIH1cbiAgICAgICAgOiBtZXRhZGF0YTtcblxuICAgIC8vIEdldCB0aGUga2V5IG9mIHRoZSBpdGVtIGJlaW5nIHJlbW92ZWRcbiAgICBjb25zdCByZW1vdmVkS2V5ID0gdGhpcy5zdGF0ZS5rZXlzW2luZGV4XTtcblxuICAgIC8vIFVwZGF0ZSBzdGF0ZSB3aGlsZSBwcmVzZXJ2aW5nIGtleXMgZm9yIHJlbWFpbmluZyBpdGVtc1xuICAgIGNvbnN0IG5ld0tleXMgPSBbLi4udGhpcy5zdGF0ZS5rZXlzXTtcbiAgICBuZXdLZXlzLnNwbGljZShpbmRleCwgMSk7XG4gICAgaXRlbXNDb2xsYXBzZWQuc3BsaWNlKGluZGV4LCAxKTtcblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXNDb2xsYXBzZWQ6IFsuLi5pdGVtc0NvbGxhcHNlZF0sXG4gICAgICBrZXlzOiBuZXdLZXlzLFxuICAgIH0pO1xuXG4gICAgLy8gQ2xlYXIgdGhlIHJlZiBmb3IgdGhlIHJlbW92ZWQgaXRlbVxuICAgIGRlbGV0ZSB0aGlzLmNoaWxkUmVmc1tyZW1vdmVkS2V5XTtcblxuICAgIGNvbnN0IG5ld1ZhbHVlID0gdmFsdWUuZGVsZXRlKGluZGV4KTtcblxuICAgIC8vIENsZWFyIGVycm9ycyBmb3IgdGhlIHJlbW92ZWQgaXRlbSBhbmQgaXRzIGNoaWxkcmVuXG4gICAgaWYgKGZpZWxkc0Vycm9ycykge1xuICAgICAgT2JqZWN0LmVudHJpZXMoZmllbGRzRXJyb3JzLnRvSlMoKSkuZm9yRWFjaCgoW2ZpZWxkSWQsIGVycm9yc10pID0+IHtcbiAgICAgICAgaWYgKGVycm9ycy5zb21lKGVyciA9PiBlcnIucGFyZW50SWRzPy5pbmNsdWRlcyhyZW1vdmVkS2V5KSkpIHtcbiAgICAgICAgICBjbGVhckZpZWxkRXJyb3JzKGZpZWxkSWQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBJZiBsaXN0IGlzIGVtcHR5LCBtYXJrIGl0IGFzIHZhbGlkXG4gICAgaWYgKG5ld1ZhbHVlLnNpemUgPT09IDApIHtcbiAgICAgIGNsZWFyRmllbGRFcnJvcnMoZm9ySUQpO1xuICAgICAgb25WYWxpZGF0ZU9iamVjdChmb3JJRCwgW10pO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSB0aGUgdmFsdWUgbGFzdCB0byBlbnN1cmUgYWxsIGVycm9yIHN0YXRlcyBhcmUgY2xlYXJlZFxuICAgIG9uQ2hhbmdlKG5ld1ZhbHVlLCBwYXJzZWRNZXRhZGF0YSk7XG4gIH07XG5cbiAgaGFuZGxlSXRlbUNvbGxhcHNlVG9nZ2xlID0gKGluZGV4LCBldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBuZXdJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLm1hcCgoY29sbGFwc2VkLCBpdGVtSW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCA9PT0gaXRlbUluZGV4KSB7XG4gICAgICAgIHJldHVybiAhY29sbGFwc2VkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbGxhcHNlZDtcbiAgICB9KTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGl0ZW1zQ29sbGFwc2VkOiBuZXdJdGVtc0NvbGxhcHNlZCxcbiAgICB9KTtcbiAgfTtcblxuICBoYW5kbGVDb2xsYXBzZUFsbFRvZ2dsZSA9IGUgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IHZhbHVlLCBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkLCBsaXN0Q29sbGFwc2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IG1pbmltaXplQ29sbGFwc2VkSXRlbXMgPSBmaWVsZC5nZXQoJ21pbmltaXplX2NvbGxhcHNlZCcsIGZhbHNlKTtcbiAgICBjb25zdCBsaXN0Q29sbGFwc2VkQnlEZWZhdWx0ID0gZmllbGQuZ2V0KCdjb2xsYXBzZWQnLCB0cnVlKTtcbiAgICBjb25zdCBhbGxJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLmV2ZXJ5KHZhbCA9PiB2YWwgPT09IHRydWUpO1xuXG4gICAgaWYgKG1pbmltaXplQ29sbGFwc2VkSXRlbXMpIHtcbiAgICAgIGxldCB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZDtcbiAgICAgIC8vIE9ubHkgYWxsb3cgY29sbGFwc2luZyBhbGwgaXRlbXMgaW4gdGhpcyBtb2RlIGJ1dCBub3Qgb3BlbmluZyBhbGwgYXQgb25jZVxuICAgICAgaWYgKCFsaXN0Q29sbGFwc2VkIHx8ICFsaXN0Q29sbGFwc2VkQnlEZWZhdWx0KSB7XG4gICAgICAgIHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCA9IEFycmF5KHZhbHVlLnNpemUpLmZpbGwoIWxpc3RDb2xsYXBzZWQpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGxpc3RDb2xsYXBzZWQ6ICFsaXN0Q29sbGFwc2VkLCBpdGVtc0NvbGxhcHNlZDogdXBkYXRlZEl0ZW1zQ29sbGFwc2VkIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgaXRlbXNDb2xsYXBzZWQ6IEFycmF5KHZhbHVlLnNpemUpLmZpbGwoIWFsbEl0ZW1zQ29sbGFwc2VkKSB9KTtcbiAgICB9XG4gIH07XG5cbiAgb2JqZWN0TGFiZWwoaXRlbSkge1xuICAgIGNvbnN0IHsgZmllbGQsIGVudHJ5IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHZhbHVlVHlwZSA9IHRoaXMuZ2V0VmFsdWVUeXBlKCk7XG4gICAgc3dpdGNoICh2YWx1ZVR5cGUpIHtcbiAgICAgIGNhc2UgdmFsdWVUeXBlcy5NSVhFRDoge1xuICAgICAgICBpZiAoIXZhbGlkYXRlSXRlbShmaWVsZCwgaXRlbSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXRlbVR5cGUgPSBnZXRUeXBlZEZpZWxkRm9yVmFsdWUoZmllbGQsIGl0ZW0pO1xuICAgICAgICBjb25zdCBsYWJlbCA9IGl0ZW1UeXBlLmdldCgnbGFiZWwnLCBpdGVtVHlwZS5nZXQoJ25hbWUnKSk7XG4gICAgICAgIC8vIGVhY2ggdHlwZSBjYW4gaGF2ZSBpdHMgb3duIHN1bW1hcnksIGJ1dCBkZWZhdWx0IHRvIHRoZSBsaXN0IHN1bW1hcnkgaWYgZXhpc3RzXG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBpdGVtVHlwZS5nZXQoJ3N1bW1hcnknLCBmaWVsZC5nZXQoJ3N1bW1hcnknKSk7XG4gICAgICAgIGNvbnN0IGxhYmVsUmV0dXJuID0gc3VtbWFyeSA/IGhhbmRsZVN1bW1hcnkoc3VtbWFyeSwgZW50cnksIGxhYmVsLCBpdGVtKSA6IGxhYmVsO1xuICAgICAgICByZXR1cm4gbGFiZWxSZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlIHZhbHVlVHlwZXMuU0lOR0xFOiB7XG4gICAgICAgIGNvbnN0IHNpbmdsZUZpZWxkID0gZmllbGQuZ2V0KCdmaWVsZCcpO1xuICAgICAgICBjb25zdCBsYWJlbCA9IHNpbmdsZUZpZWxkLmdldCgnbGFiZWwnLCBzaW5nbGVGaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBmaWVsZC5nZXQoJ3N1bW1hcnknKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGZyb21KUyh7IFtzaW5nbGVGaWVsZC5nZXQoJ25hbWUnKV06IGl0ZW0gfSk7XG4gICAgICAgIGNvbnN0IGxhYmVsUmV0dXJuID0gc3VtbWFyeSA/IGhhbmRsZVN1bW1hcnkoc3VtbWFyeSwgZW50cnksIGxhYmVsLCBkYXRhKSA6IGxhYmVsO1xuICAgICAgICByZXR1cm4gbGFiZWxSZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlIHZhbHVlVHlwZXMuTVVMVElQTEU6IHtcbiAgICAgICAgaWYgKCF2YWxpZGF0ZUl0ZW0oZmllbGQsIGl0ZW0pKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG11bHRpRmllbGRzID0gZmllbGQuZ2V0KCdmaWVsZHMnKTtcbiAgICAgICAgY29uc3QgbGFiZWxGaWVsZCA9IG11bHRpRmllbGRzICYmIG11bHRpRmllbGRzLmZpcnN0KCk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gaXRlbS5nZXQobGFiZWxGaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBmaWVsZC5nZXQoJ3N1bW1hcnknKTtcbiAgICAgICAgY29uc3QgbGFiZWxSZXR1cm4gPSBzdW1tYXJ5ID8gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgdmFsdWUsIGl0ZW0pIDogdmFsdWU7XG4gICAgICAgIHJldHVybiAobGFiZWxSZXR1cm4gfHwgYE5vICR7bGFiZWxGaWVsZC5nZXQoJ25hbWUnKX1gKS50b1N0cmluZygpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBvblNvcnRFbmQgPSAoeyBvbGRJbmRleCwgbmV3SW5kZXggfSkgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCwga2V5cyB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIC8vIFVwZGF0ZSB2YWx1ZVxuICAgIGNvbnN0IGl0ZW0gPSB2YWx1ZS5nZXQob2xkSW5kZXgpO1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gdmFsdWUuZGVsZXRlKG9sZEluZGV4KS5pbnNlcnQobmV3SW5kZXgsIGl0ZW0pO1xuICAgIHRoaXMucHJvcHMub25DaGFuZ2UobmV3VmFsdWUpO1xuXG4gICAgLy8gVXBkYXRlIGNvbGxhcHNpbmdcbiAgICBjb25zdCBjb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZFtvbGRJbmRleF07XG4gICAgaXRlbXNDb2xsYXBzZWQuc3BsaWNlKG9sZEluZGV4LCAxKTtcbiAgICBjb25zdCB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgPSBbLi4uaXRlbXNDb2xsYXBzZWRdO1xuICAgIHVwZGF0ZWRJdGVtc0NvbGxhcHNlZC5zcGxpY2UobmV3SW5kZXgsIDAsIGNvbGxhcHNlZCk7XG5cbiAgICAvLyBNb3ZlIGtleXMgdG8gbWFpbnRhaW4gcmVsYXRpb25zaGlwc1xuICAgIGNvbnN0IG1vdmVkS2V5ID0ga2V5c1tvbGRJbmRleF07XG4gICAgY29uc3QgdXBkYXRlZEtleXMgPSBbLi4ua2V5c107XG4gICAgdXBkYXRlZEtleXMuc3BsaWNlKG9sZEluZGV4LCAxKTtcbiAgICB1cGRhdGVkS2V5cy5zcGxpY2UobmV3SW5kZXgsIDAsIG1vdmVkS2V5KTtcblxuICAgIHRoaXMuc2V0U3RhdGUoeyBpdGVtc0NvbGxhcHNlZDogdXBkYXRlZEl0ZW1zQ29sbGFwc2VkLCBrZXlzOiB1cGRhdGVkS2V5cyB9KTtcbiAgfTtcblxuICBoYXNFcnJvciA9IGluZGV4ID0+IHtcbiAgICBjb25zdCB7IGZpZWxkc0Vycm9ycyB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoZmllbGRzRXJyb3JzICYmIGZpZWxkc0Vycm9ycy5zaXplID4gMCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZmllbGRzRXJyb3JzLnRvSlMoKSkuc29tZShhcnIgPT5cbiAgICAgICAgYXJyLnNvbWUoZXJyID0+IGVyci5wYXJlbnRJZHMgJiYgZXJyLnBhcmVudElkcy5pbmNsdWRlcyh0aGlzLnN0YXRlLmtleXNbaW5kZXhdKSksXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICBmb2N1cyhwYXRoKSB7XG4gICAgY29uc3QgW2luZGV4LCAuLi5yZW1haW5pbmdQYXRoXSA9IHBhdGguc3BsaXQoJy4nKTtcblxuICAgIGlmICh0aGlzLnN0YXRlLmxpc3RDb2xsYXBzZWQgfHwgdGhpcy5zdGF0ZS5pdGVtc0NvbGxhcHNlZFtpbmRleF0pIHtcbiAgICAgIGNvbnN0IG5ld0l0ZW1zQ29sbGFwc2VkID0gWy4uLnRoaXMuc3RhdGUuaXRlbXNDb2xsYXBzZWRdO1xuICAgICAgbmV3SXRlbXNDb2xsYXBzZWRbaW5kZXhdID0gZmFsc2U7XG4gICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICB7XG4gICAgICAgICAgbGlzdENvbGxhcHNlZDogZmFsc2UsXG4gICAgICAgICAgaXRlbXNDb2xsYXBzZWQ6IG5ld0l0ZW1zQ29sbGFwc2VkLFxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5zdGF0ZS5rZXlzW2luZGV4XTtcbiAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jaGlsZFJlZnNba2V5XTtcbiAgICAgICAgICBpZiAoY29udHJvbD8uZm9jdXMpIHtcbiAgICAgICAgICAgIGNvbnRyb2wuZm9jdXMocmVtYWluaW5nUGF0aC5qb2luKCcuJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuc3RhdGUua2V5c1tpbmRleF07XG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jaGlsZFJlZnNba2V5XTtcbiAgICAgIGlmIChjb250cm9sPy5mb2N1cykge1xuICAgICAgICBjb250cm9sLmZvY3VzKHJlbWFpbmluZ1BhdGguam9pbignLicpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZGlzcGxheS1uYW1lXG4gIHJlbmRlckl0ZW0gPSAoaXRlbSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjbGFzc05hbWVXcmFwcGVyLFxuICAgICAgZWRpdG9yQ29udHJvbCxcbiAgICAgIG9uVmFsaWRhdGVPYmplY3QsXG4gICAgICBtZXRhZGF0YSxcbiAgICAgIGNsZWFyRmllbGRFcnJvcnMsXG4gICAgICBmaWVsZHNFcnJvcnMsXG4gICAgICBjb250cm9sUmVmLFxuICAgICAgcmVzb2x2ZVdpZGdldCxcbiAgICAgIHBhcmVudElkcyxcbiAgICAgIGZvcklELFxuICAgICAgdCxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQsIGtleXMgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgY29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWRbaW5kZXhdO1xuICAgIGNvbnN0IGtleSA9IGtleXNbaW5kZXhdO1xuICAgIGxldCBmaWVsZCA9IHRoaXMucHJvcHMuZmllbGQ7XG4gICAgY29uc3QgaGFzRXJyb3IgPSB0aGlzLmhhc0Vycm9yKGluZGV4KTtcbiAgICBjb25zdCBpc1ZhcmlhYmxlVHlwZXNMaXN0ID0gdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5NSVhFRDtcbiAgICBpZiAoaXNWYXJpYWJsZVR5cGVzTGlzdCkge1xuICAgICAgZmllbGQgPSBnZXRUeXBlZEZpZWxkRm9yVmFsdWUoZmllbGQsIGl0ZW0pO1xuICAgICAgaWYgKCFmaWVsZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJFcnJvbmVvdXNUeXBlZEl0ZW0oaW5kZXgsIGl0ZW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8U29ydGFibGVMaXN0SXRlbVxuICAgICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBjb2xsYXBzZWQgJiYgc3R5bGVzLmxpc3RDb250cm9sSXRlbUNvbGxhcHNlZF19XG4gICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIGlkPXtrZXl9XG4gICAgICAgIGtleXM9e2tleXN9XG4gICAgICA+XG4gICAgICAgIHtpc1ZhcmlhYmxlVHlwZXNMaXN0ICYmIChcbiAgICAgICAgICA8TGFiZWxDb21wb25lbnRcbiAgICAgICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgICAgIGlzQWN0aXZlPXtmYWxzZX1cbiAgICAgICAgICAgIGhhc0Vycm9ycz17aGFzRXJyb3J9XG4gICAgICAgICAgICB1bmlxdWVGaWVsZElkPXt0aGlzLnVuaXF1ZUZpZWxkSWR9XG4gICAgICAgICAgICBpc0ZpZWxkT3B0aW9uYWw9e2ZpZWxkLmdldCgncmVxdWlyZWQnKSA9PT0gZmFsc2V9XG4gICAgICAgICAgICB0PXt0fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIDxTdHlsZWRMaXN0SXRlbVRvcEJhclxuICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICAgIG9uQ29sbGFwc2VUb2dnbGU9e3BhcnRpYWwodGhpcy5oYW5kbGVJdGVtQ29sbGFwc2VUb2dnbGUsIGluZGV4KX1cbiAgICAgICAgICBkcmFnSGFuZGxlPXtEcmFnSGFuZGxlfVxuICAgICAgICAgIGlkPXtrZXl9XG4gICAgICAgICAgYWxsb3dSZW1vdmU9e2ZpZWxkLmdldCgnYWxsb3dfcmVtb3ZlJywgdHJ1ZSl9XG4gICAgICAgICAgYWxsb3dSZW9yZGVyPXtmaWVsZC5nZXQoJ2FsbG93X3Jlb3JkZXInLCB0cnVlKX1cbiAgICAgICAgICBvblJlbW92ZT17cGFydGlhbCh0aGlzLmhhbmRsZVJlbW92ZSwgaW5kZXgpfVxuICAgICAgICAgIGRhdGEtdGVzdGlkPXtgc3R5bGVkLWxpc3QtaXRlbS10b3AtYmFyLSR7a2V5fWB9XG4gICAgICAgIC8+XG4gICAgICAgIDxOZXN0ZWRPYmplY3RMYWJlbCBjb2xsYXBzZWQ9e2NvbGxhcHNlZH0gZXJyb3I9e2hhc0Vycm9yfT5cbiAgICAgICAgICB7dGhpcy5vYmplY3RMYWJlbChpdGVtKX1cbiAgICAgICAgPC9OZXN0ZWRPYmplY3RMYWJlbD5cbiAgICAgICAgPENsYXNzTmFtZXM+XG4gICAgICAgICAgeyh7IGNzcywgY3ggfSkgPT4gKFxuICAgICAgICAgICAgPE9iamVjdENvbnRyb2xcbiAgICAgICAgICAgICAgY2xhc3NOYW1lV3JhcHBlcj17Y3goY2xhc3NOYW1lV3JhcHBlciwge1xuICAgICAgICAgICAgICAgIFtjc3NgXG4gICAgICAgICAgICAgICAgICAke3N0eWxlU3RyaW5ncy5jb2xsYXBzZWRPYmplY3RDb250cm9sfTtcbiAgICAgICAgICAgICAgICBgXTogY29sbGFwc2VkLFxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgdmFsdWU9e2l0ZW19XG4gICAgICAgICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgICAgICAgb25DaGFuZ2VPYmplY3Q9e3RoaXMuaGFuZGxlQ2hhbmdlRm9yKGluZGV4KX1cbiAgICAgICAgICAgICAgZWRpdG9yQ29udHJvbD17ZWRpdG9yQ29udHJvbH1cbiAgICAgICAgICAgICAgcmVzb2x2ZVdpZGdldD17cmVzb2x2ZVdpZGdldH1cbiAgICAgICAgICAgICAgbWV0YWRhdGE9e21ldGFkYXRhfVxuICAgICAgICAgICAgICBmb3JMaXN0XG4gICAgICAgICAgICAgIG9uVmFsaWRhdGVPYmplY3Q9e29uVmFsaWRhdGVPYmplY3R9XG4gICAgICAgICAgICAgIGNsZWFyRmllbGRFcnJvcnM9e2NsZWFyRmllbGRFcnJvcnN9XG4gICAgICAgICAgICAgIGZpZWxkc0Vycm9ycz17ZmllbGRzRXJyb3JzfVxuICAgICAgICAgICAgICByZWY9e3RoaXMucHJvY2Vzc0NvbnRyb2xSZWZ9XG4gICAgICAgICAgICAgIGNvbnRyb2xSZWY9e2NvbnRyb2xSZWZ9XG4gICAgICAgICAgICAgIHZhbGlkYXRpb25LZXk9e2tleX1cbiAgICAgICAgICAgICAgY29sbGFwc2VkPXtjb2xsYXBzZWR9XG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgb2JqZWN0LWNvbnRyb2wtJHtrZXl9YH1cbiAgICAgICAgICAgICAgaGFzRXJyb3I9e2hhc0Vycm9yfVxuICAgICAgICAgICAgICBwYXJlbnRJZHM9e1suLi5wYXJlbnRJZHMsIGZvcklELCBrZXldfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L0NsYXNzTmFtZXM+XG4gICAgICA8L1NvcnRhYmxlTGlzdEl0ZW0+XG4gICAgKTtcbiAgfTtcblxuICByZW5kZXJFcnJvbmVvdXNUeXBlZEl0ZW0oaW5kZXgsIGl0ZW0pIHtcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMucHJvcHMuZmllbGQ7XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZ2V0RXJyb3JNZXNzYWdlRm9yVHlwZWRGaWVsZEFuZFZhbHVlKGZpZWxkLCBpdGVtKTtcbiAgICBjb25zdCBrZXkgPSBgaXRlbS0ke2luZGV4fWA7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTb3J0YWJsZUxpc3RJdGVtXG4gICAgICAgIGNzcz17W3N0eWxlcy5saXN0Q29udHJvbEl0ZW0sIHN0eWxlcy5saXN0Q29udHJvbEl0ZW1Db2xsYXBzZWRdfVxuICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAgIGtleT17a2V5fVxuICAgICAgPlxuICAgICAgICA8U3R5bGVkTGlzdEl0ZW1Ub3BCYXJcbiAgICAgICAgICBvbkNvbGxhcHNlVG9nZ2xlPXtudWxsfVxuICAgICAgICAgIG9uUmVtb3ZlPXtwYXJ0aWFsKHRoaXMuaGFuZGxlUmVtb3ZlLCBpbmRleCwga2V5KX1cbiAgICAgICAgICBkcmFnSGFuZGxlPXtEcmFnSGFuZGxlfVxuICAgICAgICAgIGlkPXtrZXl9XG4gICAgICAgIC8+XG4gICAgICAgIDxOZXN0ZWRPYmplY3RMYWJlbCBjb2xsYXBzZWQ9e3RydWV9IGVycm9yPXt0cnVlfT5cbiAgICAgICAgICB7ZXJyb3JNZXNzYWdlfVxuICAgICAgICA8L05lc3RlZE9iamVjdExhYmVsPlxuICAgICAgPC9Tb3J0YWJsZUxpc3RJdGVtPlxuICAgICk7XG4gIH1cblxuICByZW5kZXJMaXN0Q29udHJvbCgpIHtcbiAgICBjb25zdCB7IHZhbHVlLCBmb3JJRCwgZmllbGQsIGNsYXNzTmFtZVdyYXBwZXIsIHQgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCwgbGlzdENvbGxhcHNlZCwga2V5cyB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBpdGVtcyA9IHZhbHVlIHx8IExpc3QoKTtcbiAgICBjb25zdCBsYWJlbCA9IGZpZWxkLmdldCgnbGFiZWwnLCBmaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgY29uc3QgbGFiZWxTaW5ndWxhciA9IGZpZWxkLmdldCgnbGFiZWxfc2luZ3VsYXInKSB8fCBmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpO1xuICAgIGNvbnN0IGxpc3RMYWJlbCA9IGl0ZW1zLnNpemUgPT09IDEgPyBsYWJlbFNpbmd1bGFyLnRvTG93ZXJDYXNlKCkgOiBsYWJlbC50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IG1pbmltaXplQ29sbGFwc2VkSXRlbXMgPSBmaWVsZC5nZXQoJ21pbmltaXplX2NvbGxhcHNlZCcsIGZhbHNlKTtcbiAgICBjb25zdCBhbGxJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLmV2ZXJ5KHZhbCA9PiB2YWwgPT09IHRydWUpO1xuICAgIGNvbnN0IHNlbGZDb2xsYXBzZWQgPSBhbGxJdGVtc0NvbGxhcHNlZCAmJiAobGlzdENvbGxhcHNlZCB8fCAhbWluaW1pemVDb2xsYXBzZWRJdGVtcyk7XG5cbiAgICBjb25zdCBpdGVtc0FycmF5ID0ga2V5cy5tYXAoa2V5ID0+ICh7IGlkOiBrZXkgfSkpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxDbGFzc05hbWVzPlxuICAgICAgICB7KHsgY3gsIGNzcyB9KSA9PiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgaWQ9e2ZvcklEfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjeChcbiAgICAgICAgICAgICAgY2xhc3NOYW1lV3JhcHBlcixcbiAgICAgICAgICAgICAgY3NzYFxuICAgICAgICAgICAgICAgICR7c3R5bGVTdHJpbmdzLm9iamVjdFdpZGdldFRvcEJhckNvbnRhaW5lcn1cbiAgICAgICAgICAgICAgYCxcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPE9iamVjdFdpZGdldFRvcEJhclxuICAgICAgICAgICAgICBhbGxvd0FkZD17ZmllbGQuZ2V0KCdhbGxvd19hZGQnLCB0cnVlKX1cbiAgICAgICAgICAgICAgb25BZGQ9e3RoaXMuaGFuZGxlQWRkfVxuICAgICAgICAgICAgICB0eXBlcz17ZmllbGQuZ2V0KFRZUEVTX0tFWSwgbnVsbCl9XG4gICAgICAgICAgICAgIG9uQWRkVHlwZT17dHlwZSA9PiB0aGlzLmhhbmRsZUFkZFR5cGUodHlwZSwgcmVzb2x2ZUZpZWxkS2V5VHlwZShmaWVsZCkpfVxuICAgICAgICAgICAgICBoZWFkaW5nPXtgJHtpdGVtcy5zaXplfSAke2xpc3RMYWJlbH1gfVxuICAgICAgICAgICAgICBsYWJlbD17bGFiZWxTaW5ndWxhci50b0xvd2VyQ2FzZSgpfVxuICAgICAgICAgICAgICBvbkNvbGxhcHNlVG9nZ2xlPXt0aGlzLmhhbmRsZUNvbGxhcHNlQWxsVG9nZ2xlfVxuICAgICAgICAgICAgICBjb2xsYXBzZWQ9e3NlbGZDb2xsYXBzZWR9XG4gICAgICAgICAgICAgIHQ9e3R9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgeyghc2VsZkNvbGxhcHNlZCB8fCAhbWluaW1pemVDb2xsYXBzZWRJdGVtcykgJiYgKFxuICAgICAgICAgICAgICA8U29ydGFibGVMaXN0IGl0ZW1zPXtpdGVtc0FycmF5fSBrZXlzPXtrZXlzfSBvblNvcnRFbmQ9e3RoaXMub25Tb3J0RW5kfT5cbiAgICAgICAgICAgICAgICB7aXRlbXMubWFwKHRoaXMucmVuZGVySXRlbSl9XG4gICAgICAgICAgICAgIDwvU29ydGFibGVMaXN0PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvQ2xhc3NOYW1lcz5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVySW5wdXQoKSB7XG4gICAgY29uc3QgeyBmb3JJRCwgY2xhc3NOYW1lV3JhcHBlciB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IHZhbHVlIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIGlkPXtmb3JJRH1cbiAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgIG9uRm9jdXM9e3RoaXMuaGFuZGxlRm9jdXN9XG4gICAgICAgIG9uQmx1cj17dGhpcy5oYW5kbGVCbHVyfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZVdyYXBwZXJ9XG4gICAgICAvPlxuICAgICk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuZ2V0VmFsdWVUeXBlKCkgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlckxpc3RDb250cm9sKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlcklucHV0KCk7XG4gICAgfVxuICB9XG59XG4iXX0= */"));
|
|
38
35
|
const styleStrings = {
|
|
39
36
|
collapsedObjectControl: `
|
|
40
37
|
display: none;
|
|
@@ -49,8 +46,7 @@ const styles = {
|
|
|
49
46
|
styles: "margin-top:18px;&:first-of-type{margin-top:26px;};label:listControlItem;"
|
|
50
47
|
} : {
|
|
51
48
|
name: "1pb8r5b-listControlItem",
|
|
52
|
-
styles: "margin-top:18px;&:first-of-type{margin-top:26px;};label:listControlItem;",
|
|
53
|
-
map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUErRHNCIiwiZmlsZSI6Ii4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IEltbXV0YWJsZVByb3BUeXBlcyBmcm9tICdyZWFjdC1pbW11dGFibGUtcHJvcHR5cGVzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCB7IGNzcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IExpc3QsIE1hcCwgZnJvbUpTIH0gZnJvbSAnaW1tdXRhYmxlJztcbmltcG9ydCB7IHBhcnRpYWwsIGlzRW1wdHksIHVuaXF1ZUlkIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tICd1dWlkJztcbmltcG9ydCBEZWNhcENtc1dpZGdldE9iamVjdCBmcm9tICdkZWNhcC1jbXMtd2lkZ2V0LW9iamVjdCc7XG5pbXBvcnQge1xuICBEbmRDb250ZXh0LFxuICBNb3VzZVNlbnNvcixcbiAgVG91Y2hTZW5zb3IsXG4gIGNsb3Nlc3RDZW50ZXIsXG4gIHVzZVNlbnNvcixcbiAgdXNlU2Vuc29ycyxcbn0gZnJvbSAnQGRuZC1raXQvY29yZSc7XG5pbXBvcnQgeyBTb3J0YWJsZUNvbnRleHQsIHVzZVNvcnRhYmxlIH0gZnJvbSAnQGRuZC1raXQvc29ydGFibGUnO1xuaW1wb3J0IHsgcmVzdHJpY3RUb1BhcmVudEVsZW1lbnQgfSBmcm9tICdAZG5kLWtpdC9tb2RpZmllcnMnO1xuaW1wb3J0IHsgQ1NTIH0gZnJvbSAnQGRuZC1raXQvdXRpbGl0aWVzJztcbmltcG9ydCB7XG4gIExpc3RJdGVtVG9wQmFyLFxuICBPYmplY3RXaWRnZXRUb3BCYXIsXG4gIGNvbG9ycyxcbiAgbGVuZ3RocyxcbiAgRmllbGRMYWJlbCxcbn0gZnJvbSAnZGVjYXAtY21zLXVpLWRlZmF1bHQnO1xuaW1wb3J0IHsgc3RyaW5nVGVtcGxhdGUsIHZhbGlkYXRpb25zIH0gZnJvbSAnZGVjYXAtY21zLWxpYi13aWRnZXRzJztcblxuaW1wb3J0IHtcbiAgVFlQRVNfS0VZLFxuICBnZXRUeXBlZEZpZWxkRm9yVmFsdWUsXG4gIHJlc29sdmVGaWVsZEtleVR5cGUsXG4gIGdldEVycm9yTWVzc2FnZUZvclR5cGVkRmllbGRBbmRWYWx1ZSxcbn0gZnJvbSAnLi90eXBlZExpc3RIZWxwZXJzJztcblxuY29uc3QgT2JqZWN0Q29udHJvbCA9IERlY2FwQ21zV2lkZ2V0T2JqZWN0LmNvbnRyb2xDb21wb25lbnQ7XG5cbmNvbnN0IExpc3RJdGVtID0gc3R5bGVkLmRpdigpO1xuXG5jb25zdCBTdHlsZWRMaXN0SXRlbVRvcEJhciA9IHN0eWxlZChMaXN0SXRlbVRvcEJhcilgXG4gIGJhY2tncm91bmQtY29sb3I6ICR7Y29sb3JzLnRleHRGaWVsZEJvcmRlcn07XG5gO1xuXG5jb25zdCBOZXN0ZWRPYmplY3RMYWJlbCA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6ICR7cHJvcHMgPT4gKHByb3BzLmNvbGxhcHNlZCA/ICdibG9jaycgOiAnbm9uZScpfTtcbiAgYm9yZGVyLXRvcDogMDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gKHByb3BzLmVycm9yID8gY29sb3JzLmVycm9yVGV4dCA6ICdpbmhlcml0Jyl9O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAke2NvbG9ycy50ZXh0RmllbGRCb3JkZXJ9O1xuICBwYWRkaW5nOiAxM3B4O1xuICBib3JkZXItcmFkaXVzOiAwIDAgJHtsZW5ndGhzLmJvcmRlclJhZGl1c30gJHtsZW5ndGhzLmJvcmRlclJhZGl1c307XG5gO1xuXG5jb25zdCBzdHlsZVN0cmluZ3MgPSB7XG4gIGNvbGxhcHNlZE9iamVjdENvbnRyb2w6IGBcbiAgICBkaXNwbGF5OiBub25lO1xuICBgLFxuICBvYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXI6IGBcbiAgICBwYWRkaW5nOiAke2xlbmd0aHMub2JqZWN0V2lkZ2V0VG9wQmFyQ29udGFpbmVyUGFkZGluZ307XG4gIGAsXG59O1xuXG5jb25zdCBzdHlsZXMgPSB7XG4gIGxpc3RDb250cm9sSXRlbTogY3NzYFxuICAgIG1hcmdpbi10b3A6IDE4cHg7XG5cbiAgICAmOmZpcnN0LW9mLXR5cGUge1xuICAgICAgbWFyZ2luLXRvcDogMjZweDtcbiAgICB9XG4gIGAsXG4gIGxpc3RDb250cm9sSXRlbUNvbGxhcHNlZDogY3NzYFxuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICBgLFxufTtcblxuZnVuY3Rpb24gU29ydGFibGVMaXN0KHsgaXRlbXMsIGNoaWxkcmVuLCBvblNvcnRFbmQsIGtleXMgfSkge1xuICBjb25zdCBhY3RpdmF0aW9uQ29uc3RyYWludCA9IHsgZGlzdGFuY2U6IDQgfTtcbiAgY29uc3Qgc2Vuc29ycyA9IHVzZVNlbnNvcnMoXG4gICAgdXNlU2Vuc29yKE1vdXNlU2Vuc29yLCB7IGFjdGl2YXRpb25Db25zdHJhaW50IH0pLFxuICAgIHVzZVNlbnNvcihUb3VjaFNlbnNvciwgeyBhY3RpdmF0aW9uQ29uc3RyYWludCB9KSxcbiAgKTtcblxuICBmdW5jdGlvbiBoYW5kbGVTb3J0RW5kKHsgYWN0aXZlLCBvdmVyIH0pIHtcbiAgICBvblNvcnRFbmQoe1xuICAgICAgb2xkSW5kZXg6IGtleXMuaW5kZXhPZihhY3RpdmUuaWQpLFxuICAgICAgbmV3SW5kZXg6IGtleXMuaW5kZXhPZihvdmVyLmlkKSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdj5cbiAgICAgIDxEbmRDb250ZXh0XG4gICAgICAgIG1vZGlmaWVycz17W3Jlc3RyaWN0VG9QYXJlbnRFbGVtZW50XX1cbiAgICAgICAgY29sbGlzaW9uRGV0ZWN0aW9uPXtjbG9zZXN0Q2VudGVyfVxuICAgICAgICBzZW5zb3JzPXtzZW5zb3JzfVxuICAgICAgICBvbkRyYWdFbmQ9e2hhbmRsZVNvcnRFbmR9XG4gICAgICA+XG4gICAgICAgIDxTb3J0YWJsZUNvbnRleHQgaXRlbXM9e2l0ZW1zfT57Y2hpbGRyZW59PC9Tb3J0YWJsZUNvbnRleHQ+XG4gICAgICA8L0RuZENvbnRleHQ+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFNvcnRhYmxlTGlzdEl0ZW0ocHJvcHMpIHtcbiAgY29uc3QgeyBzZXROb2RlUmVmLCB0cmFuc2Zvcm0sIHRyYW5zaXRpb24gfSA9IHVzZVNvcnRhYmxlKHtcbiAgICBpZDogcHJvcHMuaWQsXG4gIH0pO1xuXG4gIGNvbnN0IHN0eWxlID0ge1xuICAgIHRyYW5zZm9ybTogQ1NTLlRyYW5zZm9ybS50b1N0cmluZyh0cmFuc2Zvcm0pLFxuICAgIHRyYW5zaXRpb24sXG4gIH07XG5cbiAgY29uc3QgeyBjb2xsYXBzZWQgfSA9IHByb3BzO1xuXG4gIHJldHVybiAoXG4gICAgPExpc3RJdGVtXG4gICAgICBzb3J0YWJsZVxuICAgICAgcmVmPXtzZXROb2RlUmVmfVxuICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgY3NzPXtbc3R5bGVzLmxpc3RDb250cm9sSXRlbSwgY29sbGFwc2VkICYmIHN0eWxlcy5saXN0Q29udHJvbEl0ZW1Db2xsYXBzZWRdfVxuICAgID5cbiAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICA8L0xpc3RJdGVtPlxuICApO1xufVxuXG5mdW5jdGlvbiBEcmFnSGFuZGxlKHsgY2hpbGRyZW4sIGlkIH0pIHtcbiAgY29uc3QgeyBhdHRyaWJ1dGVzLCBsaXN0ZW5lcnMgfSA9IHVzZVNvcnRhYmxlKHtcbiAgICBpZCxcbiAgfSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IHsuLi5hdHRyaWJ1dGVzfSB7Li4ubGlzdGVuZXJzfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuY29uc3QgdmFsdWVUeXBlcyA9IHtcbiAgU0lOR0xFOiAnU0lOR0xFJyxcbiAgTVVMVElQTEU6ICdNVUxUSVBMRScsXG4gIE1JWEVEOiAnTUlYRUQnLFxufTtcblxuZnVuY3Rpb24gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgbGFiZWwsIGl0ZW0pIHtcbiAgY29uc3QgZGF0YSA9IHN0cmluZ1RlbXBsYXRlLmFkZEZpbGVUZW1wbGF0ZUZpZWxkcyhcbiAgICBlbnRyeS5nZXQoJ3BhdGgnKSxcbiAgICBpdGVtLnNldCgnZmllbGRzLmxhYmVsJywgbGFiZWwpLFxuICApO1xuICByZXR1cm4gc3RyaW5nVGVtcGxhdGUuY29tcGlsZVN0cmluZ1RlbXBsYXRlKHN1bW1hcnksIG51bGwsICcnLCBkYXRhKTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVJdGVtKGZpZWxkLCBpdGVtKSB7XG4gIGlmICghTWFwLmlzTWFwKGl0ZW0pKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYCcke2ZpZWxkLmdldCgnbmFtZScpfScgZmllbGQgaXRlbSB2YWx1ZSB2YWx1ZSBzaG91bGQgYmUgYSBtYXAgYnV0IGlzIGEgJyR7dHlwZW9mIGl0ZW19J2AsXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIExhYmVsQ29tcG9uZW50KHsgZmllbGQsIGlzQWN0aXZlLCBoYXNFcnJvcnMsIHVuaXF1ZUZpZWxkSWQsIGlzRmllbGRPcHRpb25hbCwgdCB9KSB7XG4gIGNvbnN0IGxhYmVsID0gYCR7ZmllbGQuZ2V0KCdsYWJlbCcsIGZpZWxkLmdldCgnbmFtZScpKX1gO1xuICByZXR1cm4gKFxuICAgIDxGaWVsZExhYmVsIGlzQWN0aXZlPXtpc0FjdGl2ZX0gaGFzRXJyb3JzPXtoYXNFcnJvcnN9IGh0bWxGb3I9e3VuaXF1ZUZpZWxkSWR9PlxuICAgICAge2xhYmVsfSB7YCR7aXNGaWVsZE9wdGlvbmFsID8gYCAoJHt0KCdlZGl0b3IuZWRpdG9yQ29udHJvbC5maWVsZC5vcHRpb25hbCcpfSlgIDogJyd9YH1cbiAgICA8L0ZpZWxkTGFiZWw+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExpc3RDb250cm9sIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgY2hpbGRSZWZzID0ge307XG5cbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICBtZXRhZGF0YTogSW1tdXRhYmxlUHJvcFR5cGVzLm1hcCxcbiAgICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvbkNoYW5nZU9iamVjdDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvblZhbGlkYXRlT2JqZWN0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHZhbGlkYXRlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHZhbHVlOiBJbW11dGFibGVQcm9wVHlwZXMubGlzdCxcbiAgICBmaWVsZDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBmb3JJRDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjb250cm9sUmVmOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBtZWRpYVBhdGhzOiBJbW11dGFibGVQcm9wVHlwZXMubWFwLmlzUmVxdWlyZWQsXG4gICAgZ2V0QXNzZXQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25PcGVuTWVkaWFMaWJyYXJ5OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uQWRkQXNzZXQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25SZW1vdmVJbnNlcnRlZE1lZGlhOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGNsYXNzTmFtZVdyYXBwZXI6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBzZXRBY3RpdmVTdHlsZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBzZXRJbmFjdGl2ZVN0eWxlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGVkaXRvckNvbnRyb2w6IFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkLFxuICAgIHJlc29sdmVXaWRnZXQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgY2xlYXJGaWVsZEVycm9yczogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBmaWVsZHNFcnJvcnM6IEltbXV0YWJsZVByb3BUeXBlcy5tYXAuaXNSZXF1aXJlZCxcbiAgICBlbnRyeTogSW1tdXRhYmxlUHJvcFR5cGVzLm1hcC5pc1JlcXVpcmVkLFxuICAgIHQ6IFByb3BUeXBlcy5mdW5jLFxuICB9O1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgdmFsdWU6IExpc3QoKSxcbiAgICBwYXJlbnRJZHM6IFtdLFxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIGNvbnN0IHsgZmllbGQsIHZhbHVlIH0gPSBwcm9wcztcbiAgICBjb25zdCBsaXN0Q29sbGFwc2VkID0gZmllbGQuZ2V0KCdjb2xsYXBzZWQnLCB0cnVlKTtcbiAgICBjb25zdCBpdGVtc0NvbGxhcHNlZCA9ICh2YWx1ZSAmJiBBcnJheSh2YWx1ZS5zaXplKS5maWxsKGxpc3RDb2xsYXBzZWQpKSB8fCBbXTtcbiAgICBjb25zdCBrZXlzID0gKHZhbHVlICYmIEFycmF5LmZyb20oeyBsZW5ndGg6IHZhbHVlLnNpemUgfSwgKCkgPT4gdXVpZCgpKSkgfHwgW107XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgbGlzdENvbGxhcHNlZCxcbiAgICAgIGl0ZW1zQ29sbGFwc2VkLFxuICAgICAgdmFsdWU6IHRoaXMudmFsdWVUb1N0cmluZyh2YWx1ZSksXG4gICAgICBrZXlzLFxuICAgIH07XG4gIH1cblxuICB2YWx1ZVRvU3RyaW5nID0gdmFsdWUgPT4ge1xuICAgIGxldCBzdHJpbmdWYWx1ZTtcbiAgICBpZiAoTGlzdC5pc0xpc3QodmFsdWUpIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBzdHJpbmdWYWx1ZSA9IHZhbHVlLmpvaW4oJywnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgRXhwZWN0ZWQgTGlzdCB2YWx1ZSB0byBiZSBhbiBhcnJheSBidXQgcmVjZWl2ZWQgJyR7dmFsdWV9JyB3aXRoIHR5cGUgb2YgJyR7dHlwZW9mIHZhbHVlfScuIFBsZWFzZSBjaGVjayB0aGUgdmFsdWUgcHJvdmlkZWQgdG8gdGhlICcke3RoaXMucHJvcHMuZmllbGQuZ2V0KFxuICAgICAgICAgICduYW1lJyxcbiAgICAgICAgKX0nIGZpZWxkYCxcbiAgICAgICk7XG4gICAgICBzdHJpbmdWYWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBzdHJpbmdWYWx1ZS5yZXBsYWNlKC8sKFteXFxzXXwkKS9nLCAnLCAkMScpO1xuICB9O1xuXG4gIGdldFZhbHVlVHlwZSA9ICgpID0+IHtcbiAgICBjb25zdCB7IGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChmaWVsZC5nZXQoJ2ZpZWxkcycpKSB7XG4gICAgICByZXR1cm4gdmFsdWVUeXBlcy5NVUxUSVBMRTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkLmdldCgnZmllbGQnKSkge1xuICAgICAgcmV0dXJuIHZhbHVlVHlwZXMuU0lOR0xFO1xuICAgIH0gZWxzZSBpZiAoZmllbGQuZ2V0KFRZUEVTX0tFWSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZVR5cGVzLk1JWEVEO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH07XG5cbiAgdW5pcXVlRmllbGRJZCA9IHVuaXF1ZUlkKGAke3RoaXMucHJvcHMuZmllbGQuZ2V0KCduYW1lJyl9LWZpZWxkLWApO1xuICAvKipcbiAgICogQWx3YXlzIHVwZGF0ZSBzbyB0aGF0IGVhY2ggbmVzdGVkIHdpZGdldCBoYXMgdGhlIG9wdGlvbiB0byB1cGRhdGUuIFRoaXMgaXNcbiAgICogcmVxdWlyZWQgYmVjYXVzZSBDb250cm9sSE9DIHByb3ZpZGVzIGEgZGVmYXVsdCBgc2hvdWxkQ29tcG9uZW50VXBkYXRlYFxuICAgKiB3aGljaCBvbmx5IHVwZGF0ZXMgaWYgdGhlIHZhbHVlIGNoYW5nZXMsIGJ1dCBldmVyeSB3aWRnZXQgbXVzdCBiZSBhbGxvd2VkXG4gICAqIHRvIG92ZXJyaWRlIHRoaXMuXG4gICAqL1xuICBzaG91bGRDb21wb25lbnRVcGRhdGUoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBoYW5kbGVDaGFuZ2UgPSBlID0+IHtcbiAgICBjb25zdCB7IG9uQ2hhbmdlIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy5zdGF0ZS52YWx1ZTtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IGUudGFyZ2V0LnZhbHVlLnRyaW0oKTtcbiAgICBjb25zdCBsaXN0VmFsdWUgPSBuZXdWYWx1ZSA/IG5ld1ZhbHVlLnNwbGl0KCcsJykgOiBbXTtcbiAgICBpZiAobmV3VmFsdWUubWF0Y2goLywkLykgJiYgb2xkVmFsdWUubWF0Y2goLywgJC8pKSB7XG4gICAgICBsaXN0VmFsdWUucG9wKCk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPSB0aGlzLnZhbHVlVG9TdHJpbmcobGlzdFZhbHVlKTtcbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHBhcnNlZFZhbHVlIH0pO1xuICAgIG9uQ2hhbmdlKExpc3QobGlzdFZhbHVlLm1hcCh2YWwgPT4gdmFsLnRyaW0oKSkpKTtcbiAgfTtcblxuICBoYW5kbGVGb2N1cyA9ICgpID0+IHtcbiAgICB0aGlzLnByb3BzLnNldEFjdGl2ZVN0eWxlKCk7XG4gIH07XG5cbiAgaGFuZGxlQmx1ciA9IGUgPT4ge1xuICAgIGNvbnN0IGxpc3RWYWx1ZSA9IGUudGFyZ2V0LnZhbHVlXG4gICAgICAuc3BsaXQoJywnKVxuICAgICAgLm1hcChlbCA9PiBlbC50cmltKCkpXG4gICAgICAuZmlsdGVyKGVsID0+IGVsKTtcbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHRoaXMudmFsdWVUb1N0cmluZyhsaXN0VmFsdWUpIH0pO1xuICAgIHRoaXMucHJvcHMuc2V0SW5hY3RpdmVTdHlsZSgpO1xuICB9O1xuXG4gIGhhbmRsZUFkZCA9IGUgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHBhcnNlZFZhbHVlID1cbiAgICAgIHRoaXMuZ2V0VmFsdWVUeXBlKCkgPT09IHZhbHVlVHlwZXMuU0lOR0xFXG4gICAgICAgID8gdGhpcy5zaW5nbGVEZWZhdWx0KClcbiAgICAgICAgOiBmcm9tSlModGhpcy5tdWx0aXBsZURlZmF1bHQoZmllbGQuZ2V0KCdmaWVsZHMnKSkpO1xuICAgIHRoaXMuYWRkSXRlbShwYXJzZWRWYWx1ZSk7XG4gIH07XG5cbiAgc2luZ2xlRGVmYXVsdCA9ICgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5maWVsZC5nZXRJbihbJ2ZpZWxkJywgJ2RlZmF1bHQnXSwgbnVsbCk7XG4gIH07XG5cbiAgbXVsdGlwbGVEZWZhdWx0ID0gZmllbGRzID0+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KGZpZWxkcyk7XG4gIH07XG5cbiAgaGFuZGxlQWRkVHlwZSA9ICh0eXBlLCB0eXBlS2V5KSA9PiB7XG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPSBmcm9tSlModGhpcy5taXhlZERlZmF1bHQodHlwZUtleSwgdHlwZSkpO1xuICAgIHRoaXMuYWRkSXRlbShwYXJzZWRWYWx1ZSk7XG4gIH07XG5cbiAgbWl4ZWREZWZhdWx0ID0gKHR5cGVLZXksIHR5cGUpID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZFR5cGUgPSB0aGlzLnByb3BzLmZpZWxkLmdldChUWVBFU19LRVkpLmZpbmQoZiA9PiBmLmdldCgnbmFtZScpID09PSB0eXBlKTtcbiAgICBjb25zdCBmaWVsZHMgPSBzZWxlY3RlZFR5cGUuZ2V0KCdmaWVsZHMnKSB8fCBbc2VsZWN0ZWRUeXBlLmdldCgnZmllbGQnKV07XG5cbiAgICByZXR1cm4gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KGZpZWxkcywgeyBbdHlwZUtleV06IHR5cGUgfSk7XG4gIH07XG5cbiAgZ2V0RmllbGRzRGVmYXVsdCA9IChmaWVsZHMsIGluaXRpYWxWYWx1ZSA9IHt9KSA9PiB7XG4gICAgcmV0dXJuIGZpZWxkcy5yZWR1Y2UoKGFjYywgaXRlbSkgPT4ge1xuICAgICAgY29uc3Qgc3ViZmllbGRzID0gaXRlbS5nZXQoJ2ZpZWxkJykgfHwgaXRlbS5nZXQoJ2ZpZWxkcycpO1xuICAgICAgY29uc3Qgb2JqZWN0ID0gaXRlbS5nZXQoJ3dpZGdldCcpID09ICdvYmplY3QnO1xuICAgICAgY29uc3QgbmFtZSA9IGl0ZW0uZ2V0KCduYW1lJyk7XG4gICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSBpdGVtLmdldCgnZGVmYXVsdCcsIG51bGwpO1xuXG4gICAgICBpZiAoTGlzdC5pc0xpc3Qoc3ViZmllbGRzKSAmJiBvYmplY3QpIHtcbiAgICAgICAgY29uc3Qgc3ViRGVmYXVsdFZhbHVlID0gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KHN1YmZpZWxkcyk7XG4gICAgICAgICFpc0VtcHR5KHN1YkRlZmF1bHRWYWx1ZSkgJiYgKGFjY1tuYW1lXSA9IHN1YkRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9XG5cbiAgICAgIGlmIChNYXAuaXNNYXAoc3ViZmllbGRzKSAmJiBvYmplY3QpIHtcbiAgICAgICAgY29uc3Qgc3ViRGVmYXVsdFZhbHVlID0gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KFtzdWJmaWVsZHNdKTtcbiAgICAgICAgIWlzRW1wdHkoc3ViRGVmYXVsdFZhbHVlKSAmJiAoYWNjW25hbWVdID0gc3ViRGVmYXVsdFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH1cblxuICAgICAgaWYgKGRlZmF1bHRWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBhY2NbbmFtZV0gPSBkZWZhdWx0VmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgaW5pdGlhbFZhbHVlKTtcbiAgfTtcblxuICBhZGRJdGVtID0gcGFyc2VkVmFsdWUgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWUsIG9uQ2hhbmdlLCBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBhZGRUb1RvcCA9IGZpZWxkLmdldCgnYWRkX3RvX3RvcCcsIGZhbHNlKTtcblxuICAgIGNvbnN0IGl0ZW1LZXkgPSB1dWlkKCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBpdGVtc0NvbGxhcHNlZDogYWRkVG9Ub3BcbiAgICAgICAgPyBbZmFsc2UsIC4uLnRoaXMuc3RhdGUuaXRlbXNDb2xsYXBzZWRdXG4gICAgICAgIDogWy4uLnRoaXMuc3RhdGUuaXRlbXNDb2xsYXBzZWQsIGZhbHNlXSxcbiAgICAgIGtleXM6IGFkZFRvVG9wID8gW2l0ZW1LZXksIC4uLnRoaXMuc3RhdGUua2V5c10gOiBbLi4udGhpcy5zdGF0ZS5rZXlzLCBpdGVtS2V5XSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGxpc3RWYWx1ZSA9IHZhbHVlIHx8IExpc3QoKTtcbiAgICBpZiAoYWRkVG9Ub3ApIHtcbiAgICAgIG9uQ2hhbmdlKGxpc3RWYWx1ZS51bnNoaWZ0KHBhcnNlZFZhbHVlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uQ2hhbmdlKGxpc3RWYWx1ZS5wdXNoKHBhcnNlZFZhbHVlKSk7XG4gICAgfVxuICB9O1xuXG4gIHByb2Nlc3NDb250cm9sUmVmID0gcmVmID0+IHtcbiAgICBpZiAoIXJlZikgcmV0dXJuO1xuICAgIGNvbnN0IHtcbiAgICAgIHByb3BzOiB7IHZhbGlkYXRpb25LZXk6IGtleSB9LFxuICAgIH0gPSByZWY7XG4gICAgdGhpcy5jaGlsZFJlZnNba2V5XSA9IHJlZjtcbiAgICB0aGlzLnByb3BzLmNvbnRyb2xSZWY/Lih0aGlzKTtcbiAgfTtcblxuICB2YWxpZGF0ZSA9ICgpID0+IHtcbiAgICAvLyBGaXJzdCB2YWxpZGF0ZSBjaGlsZCB3aWRnZXRzIGlmIHRoaXMgaXMgYSBjb21wbGV4IGxpc3RcbiAgICBjb25zdCBoYXNDaGlsZFdpZGdldHMgPSB0aGlzLmdldFZhbHVlVHlwZSgpICYmIE9iamVjdC5rZXlzKHRoaXMuY2hpbGRSZWZzKS5sZW5ndGggPiAwO1xuICAgIGlmIChoYXNDaGlsZFdpZGdldHMpIHtcbiAgICAgIE9iamVjdC52YWx1ZXModGhpcy5jaGlsZFJlZnMpLmZvckVhY2god2lkZ2V0ID0+IHtcbiAgICAgICAgd2lkZ2V0Py52YWxpZGF0ZT8uKCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9wcy52YWxpZGF0ZSgpO1xuICAgIH1cbiAgICB0aGlzLnByb3BzLm9uVmFsaWRhdGVPYmplY3QodGhpcy5wcm9wcy5mb3JJRCwgdGhpcy52YWxpZGF0ZVNpemUoKSk7XG4gIH07XG5cbiAgdmFsaWRhdGVTaXplID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgZmllbGQsIHZhbHVlLCB0IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG1pbiA9IGZpZWxkLmdldCgnbWluJyk7XG4gICAgY29uc3QgbWF4ID0gZmllbGQuZ2V0KCdtYXgnKTtcbiAgICBjb25zdCByZXF1aXJlZCA9IGZpZWxkLmdldCgncmVxdWlyZWQnLCB0cnVlKTtcblxuICAgIGlmICghcmVxdWlyZWQgJiYgIXZhbHVlPy5zaXplKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgZXJyb3IgPSB2YWxpZGF0aW9ucy52YWxpZGF0ZU1pbk1heChcbiAgICAgIHQsXG4gICAgICBmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpLFxuICAgICAgdmFsdWUsXG4gICAgICBtaW4sXG4gICAgICBtYXgsXG4gICAgKTtcblxuICAgIHJldHVybiBlcnJvciA/IFtlcnJvcl0gOiBbXTtcbiAgfTtcblxuICAvKipcbiAgICogSW4gY2FzZSB0aGUgYG9uQ2hhbmdlT2JqZWN0YCBmdW5jdGlvbiBpcyBmcm96ZW4gYnkgYSBjaGlsZCB3aWRnZXQgaW1wbGVtZW50YXRpb24sXG4gICAqIGUuZy4gd2hlbiBkZWJvdW5jZWQsIGFsd2F5cyBnZXQgdGhlIGxhdGVzdCBvYmplY3QgdmFsdWUgaW5zdGVhZCBvZiB1c2luZ1xuICAgKiBgdGhpcy5wcm9wcy52YWx1ZWAgZGlyZWN0bHkuXG4gICAqL1xuICBnZXRPYmplY3RWYWx1ZSA9IGlkeCA9PiB0aGlzLnByb3BzLnZhbHVlLmdldChpZHgpIHx8IE1hcCgpO1xuXG4gIGhhbmRsZUNoYW5nZUZvcihpbmRleCkge1xuICAgIHJldHVybiAoZiwgbmV3VmFsdWUsIG5ld01ldGFkYXRhKSA9PiB7XG4gICAgICBjb25zdCB7IHZhbHVlLCBtZXRhZGF0YSwgb25DaGFuZ2UsIGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBmaWVsZC5nZXQoJ25hbWUnKTtcbiAgICAgIGNvbnN0IGxpc3RGaWVsZE9iamVjdFdpZGdldCA9IGZpZWxkLmdldEluKFsnZmllbGQnLCAnd2lkZ2V0J10pID09PSAnb2JqZWN0JztcbiAgICAgIGNvbnN0IHdpdGhOYW1lS2V5ID1cbiAgICAgICAgdGhpcy5nZXRWYWx1ZVR5cGUoKSAhPT0gdmFsdWVUeXBlcy5TSU5HTEUgfHxcbiAgICAgICAgKHRoaXMuZ2V0VmFsdWVUeXBlKCkgPT09IHZhbHVlVHlwZXMuU0lOR0xFICYmIGxpc3RGaWVsZE9iamVjdFdpZGdldCk7XG4gICAgICBjb25zdCBuZXdPYmplY3RWYWx1ZSA9IHdpdGhOYW1lS2V5XG4gICAgICAgID8gdGhpcy5nZXRPYmplY3RWYWx1ZShpbmRleCkuc2V0KGYuZ2V0KCduYW1lJyksIG5ld1ZhbHVlKVxuICAgICAgICA6IG5ld1ZhbHVlO1xuICAgICAgY29uc3QgcGFyc2VkTWV0YWRhdGEgPSB7XG4gICAgICAgIFtjb2xsZWN0aW9uTmFtZV06IE9iamVjdC5hc3NpZ24obWV0YWRhdGEgPyBtZXRhZGF0YS50b0pTKCkgOiB7fSwgbmV3TWV0YWRhdGEgfHwge30pLFxuICAgICAgfTtcbiAgICAgIG9uQ2hhbmdlKHZhbHVlLnNldChpbmRleCwgbmV3T2JqZWN0VmFsdWUpLCBwYXJzZWRNZXRhZGF0YSk7XG4gICAgfTtcbiAgfVxuXG4gIGhhbmRsZVJlbW92ZSA9IChpbmRleCwgZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3Qge1xuICAgICAgdmFsdWUsXG4gICAgICBtZXRhZGF0YSxcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgZmllbGQsXG4gICAgICBjbGVhckZpZWxkRXJyb3JzLFxuICAgICAgb25WYWxpZGF0ZU9iamVjdCxcbiAgICAgIGZvcklELFxuICAgICAgZmllbGRzRXJyb3JzLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBmaWVsZC5nZXQoJ25hbWUnKTtcbiAgICBjb25zdCBpc1NpbmdsZUZpZWxkID0gdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5TSU5HTEU7XG5cbiAgICBjb25zdCBtZXRhZGF0YVJlbW92ZVBhdGggPSBpc1NpbmdsZUZpZWxkID8gdmFsdWUuZ2V0KGluZGV4KSA6IHZhbHVlLmdldChpbmRleCkudmFsdWVTZXEoKTtcbiAgICBjb25zdCBwYXJzZWRNZXRhZGF0YSA9XG4gICAgICBtZXRhZGF0YSAmJiAhbWV0YWRhdGEuaXNFbXB0eSgpXG4gICAgICAgID8geyBbY29sbGVjdGlvbk5hbWVdOiBtZXRhZGF0YS5yZW1vdmVJbihtZXRhZGF0YVJlbW92ZVBhdGgpIH1cbiAgICAgICAgOiBtZXRhZGF0YTtcblxuICAgIC8vIEdldCB0aGUga2V5IG9mIHRoZSBpdGVtIGJlaW5nIHJlbW92ZWRcbiAgICBjb25zdCByZW1vdmVkS2V5ID0gdGhpcy5zdGF0ZS5rZXlzW2luZGV4XTtcblxuICAgIC8vIFVwZGF0ZSBzdGF0ZSB3aGlsZSBwcmVzZXJ2aW5nIGtleXMgZm9yIHJlbWFpbmluZyBpdGVtc1xuICAgIGNvbnN0IG5ld0tleXMgPSBbLi4udGhpcy5zdGF0ZS5rZXlzXTtcbiAgICBuZXdLZXlzLnNwbGljZShpbmRleCwgMSk7XG4gICAgaXRlbXNDb2xsYXBzZWQuc3BsaWNlKGluZGV4LCAxKTtcblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXNDb2xsYXBzZWQ6IFsuLi5pdGVtc0NvbGxhcHNlZF0sXG4gICAgICBrZXlzOiBuZXdLZXlzLFxuICAgIH0pO1xuXG4gICAgLy8gQ2xlYXIgdGhlIHJlZiBmb3IgdGhlIHJlbW92ZWQgaXRlbVxuICAgIGRlbGV0ZSB0aGlzLmNoaWxkUmVmc1tyZW1vdmVkS2V5XTtcblxuICAgIGNvbnN0IG5ld1ZhbHVlID0gdmFsdWUuZGVsZXRlKGluZGV4KTtcblxuICAgIC8vIENsZWFyIGVycm9ycyBmb3IgdGhlIHJlbW92ZWQgaXRlbSBhbmQgaXRzIGNoaWxkcmVuXG4gICAgaWYgKGZpZWxkc0Vycm9ycykge1xuICAgICAgT2JqZWN0LmVudHJpZXMoZmllbGRzRXJyb3JzLnRvSlMoKSkuZm9yRWFjaCgoW2ZpZWxkSWQsIGVycm9yc10pID0+IHtcbiAgICAgICAgaWYgKGVycm9ycy5zb21lKGVyciA9PiBlcnIucGFyZW50SWRzPy5pbmNsdWRlcyhyZW1vdmVkS2V5KSkpIHtcbiAgICAgICAgICBjbGVhckZpZWxkRXJyb3JzKGZpZWxkSWQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBJZiBsaXN0IGlzIGVtcHR5LCBtYXJrIGl0IGFzIHZhbGlkXG4gICAgaWYgKG5ld1ZhbHVlLnNpemUgPT09IDApIHtcbiAgICAgIGNsZWFyRmllbGRFcnJvcnMoZm9ySUQpO1xuICAgICAgb25WYWxpZGF0ZU9iamVjdChmb3JJRCwgW10pO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSB0aGUgdmFsdWUgbGFzdCB0byBlbnN1cmUgYWxsIGVycm9yIHN0YXRlcyBhcmUgY2xlYXJlZFxuICAgIG9uQ2hhbmdlKG5ld1ZhbHVlLCBwYXJzZWRNZXRhZGF0YSk7XG4gIH07XG5cbiAgaGFuZGxlSXRlbUNvbGxhcHNlVG9nZ2xlID0gKGluZGV4LCBldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBuZXdJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLm1hcCgoY29sbGFwc2VkLCBpdGVtSW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCA9PT0gaXRlbUluZGV4KSB7XG4gICAgICAgIHJldHVybiAhY29sbGFwc2VkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbGxhcHNlZDtcbiAgICB9KTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGl0ZW1zQ29sbGFwc2VkOiBuZXdJdGVtc0NvbGxhcHNlZCxcbiAgICB9KTtcbiAgfTtcblxuICBoYW5kbGVDb2xsYXBzZUFsbFRvZ2dsZSA9IGUgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IHZhbHVlLCBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkLCBsaXN0Q29sbGFwc2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IG1pbmltaXplQ29sbGFwc2VkSXRlbXMgPSBmaWVsZC5nZXQoJ21pbmltaXplX2NvbGxhcHNlZCcsIGZhbHNlKTtcbiAgICBjb25zdCBsaXN0Q29sbGFwc2VkQnlEZWZhdWx0ID0gZmllbGQuZ2V0KCdjb2xsYXBzZWQnLCB0cnVlKTtcbiAgICBjb25zdCBhbGxJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLmV2ZXJ5KHZhbCA9PiB2YWwgPT09IHRydWUpO1xuXG4gICAgaWYgKG1pbmltaXplQ29sbGFwc2VkSXRlbXMpIHtcbiAgICAgIGxldCB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZDtcbiAgICAgIC8vIE9ubHkgYWxsb3cgY29sbGFwc2luZyBhbGwgaXRlbXMgaW4gdGhpcyBtb2RlIGJ1dCBub3Qgb3BlbmluZyBhbGwgYXQgb25jZVxuICAgICAgaWYgKCFsaXN0Q29sbGFwc2VkIHx8ICFsaXN0Q29sbGFwc2VkQnlEZWZhdWx0KSB7XG4gICAgICAgIHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCA9IEFycmF5KHZhbHVlLnNpemUpLmZpbGwoIWxpc3RDb2xsYXBzZWQpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGxpc3RDb2xsYXBzZWQ6ICFsaXN0Q29sbGFwc2VkLCBpdGVtc0NvbGxhcHNlZDogdXBkYXRlZEl0ZW1zQ29sbGFwc2VkIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgaXRlbXNDb2xsYXBzZWQ6IEFycmF5KHZhbHVlLnNpemUpLmZpbGwoIWFsbEl0ZW1zQ29sbGFwc2VkKSB9KTtcbiAgICB9XG4gIH07XG5cbiAgb2JqZWN0TGFiZWwoaXRlbSkge1xuICAgIGNvbnN0IHsgZmllbGQsIGVudHJ5IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHZhbHVlVHlwZSA9IHRoaXMuZ2V0VmFsdWVUeXBlKCk7XG4gICAgc3dpdGNoICh2YWx1ZVR5cGUpIHtcbiAgICAgIGNhc2UgdmFsdWVUeXBlcy5NSVhFRDoge1xuICAgICAgICBpZiAoIXZhbGlkYXRlSXRlbShmaWVsZCwgaXRlbSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXRlbVR5cGUgPSBnZXRUeXBlZEZpZWxkRm9yVmFsdWUoZmllbGQsIGl0ZW0pO1xuICAgICAgICBjb25zdCBsYWJlbCA9IGl0ZW1UeXBlLmdldCgnbGFiZWwnLCBpdGVtVHlwZS5nZXQoJ25hbWUnKSk7XG4gICAgICAgIC8vIGVhY2ggdHlwZSBjYW4gaGF2ZSBpdHMgb3duIHN1bW1hcnksIGJ1dCBkZWZhdWx0IHRvIHRoZSBsaXN0IHN1bW1hcnkgaWYgZXhpc3RzXG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBpdGVtVHlwZS5nZXQoJ3N1bW1hcnknLCBmaWVsZC5nZXQoJ3N1bW1hcnknKSk7XG4gICAgICAgIGNvbnN0IGxhYmVsUmV0dXJuID0gc3VtbWFyeSA/IGhhbmRsZVN1bW1hcnkoc3VtbWFyeSwgZW50cnksIGxhYmVsLCBpdGVtKSA6IGxhYmVsO1xuICAgICAgICByZXR1cm4gbGFiZWxSZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlIHZhbHVlVHlwZXMuU0lOR0xFOiB7XG4gICAgICAgIGNvbnN0IHNpbmdsZUZpZWxkID0gZmllbGQuZ2V0KCdmaWVsZCcpO1xuICAgICAgICBjb25zdCBsYWJlbCA9IHNpbmdsZUZpZWxkLmdldCgnbGFiZWwnLCBzaW5nbGVGaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBmaWVsZC5nZXQoJ3N1bW1hcnknKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGZyb21KUyh7IFtzaW5nbGVGaWVsZC5nZXQoJ25hbWUnKV06IGl0ZW0gfSk7XG4gICAgICAgIGNvbnN0IGxhYmVsUmV0dXJuID0gc3VtbWFyeSA/IGhhbmRsZVN1bW1hcnkoc3VtbWFyeSwgZW50cnksIGxhYmVsLCBkYXRhKSA6IGxhYmVsO1xuICAgICAgICByZXR1cm4gbGFiZWxSZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlIHZhbHVlVHlwZXMuTVVMVElQTEU6IHtcbiAgICAgICAgaWYgKCF2YWxpZGF0ZUl0ZW0oZmllbGQsIGl0ZW0pKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG11bHRpRmllbGRzID0gZmllbGQuZ2V0KCdmaWVsZHMnKTtcbiAgICAgICAgY29uc3QgbGFiZWxGaWVsZCA9IG11bHRpRmllbGRzICYmIG11bHRpRmllbGRzLmZpcnN0KCk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gaXRlbS5nZXQobGFiZWxGaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBmaWVsZC5nZXQoJ3N1bW1hcnknKTtcbiAgICAgICAgY29uc3QgbGFiZWxSZXR1cm4gPSBzdW1tYXJ5ID8gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgdmFsdWUsIGl0ZW0pIDogdmFsdWU7XG4gICAgICAgIHJldHVybiAobGFiZWxSZXR1cm4gfHwgYE5vICR7bGFiZWxGaWVsZC5nZXQoJ25hbWUnKX1gKS50b1N0cmluZygpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBvblNvcnRFbmQgPSAoeyBvbGRJbmRleCwgbmV3SW5kZXggfSkgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCwga2V5cyB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIC8vIFVwZGF0ZSB2YWx1ZVxuICAgIGNvbnN0IGl0ZW0gPSB2YWx1ZS5nZXQob2xkSW5kZXgpO1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gdmFsdWUuZGVsZXRlKG9sZEluZGV4KS5pbnNlcnQobmV3SW5kZXgsIGl0ZW0pO1xuICAgIHRoaXMucHJvcHMub25DaGFuZ2UobmV3VmFsdWUpO1xuXG4gICAgLy8gVXBkYXRlIGNvbGxhcHNpbmdcbiAgICBjb25zdCBjb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZFtvbGRJbmRleF07XG4gICAgaXRlbXNDb2xsYXBzZWQuc3BsaWNlKG9sZEluZGV4LCAxKTtcbiAgICBjb25zdCB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgPSBbLi4uaXRlbXNDb2xsYXBzZWRdO1xuICAgIHVwZGF0ZWRJdGVtc0NvbGxhcHNlZC5zcGxpY2UobmV3SW5kZXgsIDAsIGNvbGxhcHNlZCk7XG5cbiAgICAvLyBNb3ZlIGtleXMgdG8gbWFpbnRhaW4gcmVsYXRpb25zaGlwc1xuICAgIGNvbnN0IG1vdmVkS2V5ID0ga2V5c1tvbGRJbmRleF07XG4gICAgY29uc3QgdXBkYXRlZEtleXMgPSBbLi4ua2V5c107XG4gICAgdXBkYXRlZEtleXMuc3BsaWNlKG9sZEluZGV4LCAxKTtcbiAgICB1cGRhdGVkS2V5cy5zcGxpY2UobmV3SW5kZXgsIDAsIG1vdmVkS2V5KTtcblxuICAgIHRoaXMuc2V0U3RhdGUoeyBpdGVtc0NvbGxhcHNlZDogdXBkYXRlZEl0ZW1zQ29sbGFwc2VkLCBrZXlzOiB1cGRhdGVkS2V5cyB9KTtcbiAgfTtcblxuICBoYXNFcnJvciA9IGluZGV4ID0+IHtcbiAgICBjb25zdCB7IGZpZWxkc0Vycm9ycyB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoZmllbGRzRXJyb3JzICYmIGZpZWxkc0Vycm9ycy5zaXplID4gMCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZmllbGRzRXJyb3JzLnRvSlMoKSkuc29tZShhcnIgPT5cbiAgICAgICAgYXJyLnNvbWUoZXJyID0+IGVyci5wYXJlbnRJZHMgJiYgZXJyLnBhcmVudElkcy5pbmNsdWRlcyh0aGlzLnN0YXRlLmtleXNbaW5kZXhdKSksXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICBmb2N1cyhwYXRoKSB7XG4gICAgY29uc3QgW2luZGV4LCAuLi5yZW1haW5pbmdQYXRoXSA9IHBhdGguc3BsaXQoJy4nKTtcblxuICAgIGlmICh0aGlzLnN0YXRlLmxpc3RDb2xsYXBzZWQgfHwgdGhpcy5zdGF0ZS5pdGVtc0NvbGxhcHNlZFtpbmRleF0pIHtcbiAgICAgIGNvbnN0IG5ld0l0ZW1zQ29sbGFwc2VkID0gWy4uLnRoaXMuc3RhdGUuaXRlbXNDb2xsYXBzZWRdO1xuICAgICAgbmV3SXRlbXNDb2xsYXBzZWRbaW5kZXhdID0gZmFsc2U7XG4gICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICB7XG4gICAgICAgICAgbGlzdENvbGxhcHNlZDogZmFsc2UsXG4gICAgICAgICAgaXRlbXNDb2xsYXBzZWQ6IG5ld0l0ZW1zQ29sbGFwc2VkLFxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5zdGF0ZS5rZXlzW2luZGV4XTtcbiAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jaGlsZFJlZnNba2V5XTtcbiAgICAgICAgICBpZiAoY29udHJvbD8uZm9jdXMpIHtcbiAgICAgICAgICAgIGNvbnRyb2wuZm9jdXMocmVtYWluaW5nUGF0aC5qb2luKCcuJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuc3RhdGUua2V5c1tpbmRleF07XG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jaGlsZFJlZnNba2V5XTtcbiAgICAgIGlmIChjb250cm9sPy5mb2N1cykge1xuICAgICAgICBjb250cm9sLmZvY3VzKHJlbWFpbmluZ1BhdGguam9pbignLicpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZGlzcGxheS1uYW1lXG4gIHJlbmRlckl0ZW0gPSAoaXRlbSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjbGFzc05hbWVXcmFwcGVyLFxuICAgICAgZWRpdG9yQ29udHJvbCxcbiAgICAgIG9uVmFsaWRhdGVPYmplY3QsXG4gICAgICBtZXRhZGF0YSxcbiAgICAgIGNsZWFyRmllbGRFcnJvcnMsXG4gICAgICBmaWVsZHNFcnJvcnMsXG4gICAgICBjb250cm9sUmVmLFxuICAgICAgcmVzb2x2ZVdpZGdldCxcbiAgICAgIHBhcmVudElkcyxcbiAgICAgIGZvcklELFxuICAgICAgdCxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQsIGtleXMgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgY29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWRbaW5kZXhdO1xuICAgIGNvbnN0IGtleSA9IGtleXNbaW5kZXhdO1xuICAgIGxldCBmaWVsZCA9IHRoaXMucHJvcHMuZmllbGQ7XG4gICAgY29uc3QgaGFzRXJyb3IgPSB0aGlzLmhhc0Vycm9yKGluZGV4KTtcbiAgICBjb25zdCBpc1ZhcmlhYmxlVHlwZXNMaXN0ID0gdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5NSVhFRDtcbiAgICBpZiAoaXNWYXJpYWJsZVR5cGVzTGlzdCkge1xuICAgICAgZmllbGQgPSBnZXRUeXBlZEZpZWxkRm9yVmFsdWUoZmllbGQsIGl0ZW0pO1xuICAgICAgaWYgKCFmaWVsZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJFcnJvbmVvdXNUeXBlZEl0ZW0oaW5kZXgsIGl0ZW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8U29ydGFibGVMaXN0SXRlbVxuICAgICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBjb2xsYXBzZWQgJiYgc3R5bGVzLmxpc3RDb250cm9sSXRlbUNvbGxhcHNlZF19XG4gICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIGlkPXtrZXl9XG4gICAgICAgIGtleXM9e2tleXN9XG4gICAgICA+XG4gICAgICAgIHtpc1ZhcmlhYmxlVHlwZXNMaXN0ICYmIChcbiAgICAgICAgICA8TGFiZWxDb21wb25lbnRcbiAgICAgICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgICAgIGlzQWN0aXZlPXtmYWxzZX1cbiAgICAgICAgICAgIGhhc0Vycm9ycz17aGFzRXJyb3J9XG4gICAgICAgICAgICB1bmlxdWVGaWVsZElkPXt0aGlzLnVuaXF1ZUZpZWxkSWR9XG4gICAgICAgICAgICBpc0ZpZWxkT3B0aW9uYWw9e2ZpZWxkLmdldCgncmVxdWlyZWQnKSA9PT0gZmFsc2V9XG4gICAgICAgICAgICB0PXt0fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIDxTdHlsZWRMaXN0SXRlbVRvcEJhclxuICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICAgIG9uQ29sbGFwc2VUb2dnbGU9e3BhcnRpYWwodGhpcy5oYW5kbGVJdGVtQ29sbGFwc2VUb2dnbGUsIGluZGV4KX1cbiAgICAgICAgICBkcmFnSGFuZGxlPXtEcmFnSGFuZGxlfVxuICAgICAgICAgIGlkPXtrZXl9XG4gICAgICAgICAgb25SZW1vdmU9e3BhcnRpYWwodGhpcy5oYW5kbGVSZW1vdmUsIGluZGV4KX1cbiAgICAgICAgICBkYXRhLXRlc3RpZD17YHN0eWxlZC1saXN0LWl0ZW0tdG9wLWJhci0ke2tleX1gfVxuICAgICAgICAvPlxuICAgICAgICA8TmVzdGVkT2JqZWN0TGFiZWwgY29sbGFwc2VkPXtjb2xsYXBzZWR9IGVycm9yPXtoYXNFcnJvcn0+XG4gICAgICAgICAge3RoaXMub2JqZWN0TGFiZWwoaXRlbSl9XG4gICAgICAgIDwvTmVzdGVkT2JqZWN0TGFiZWw+XG4gICAgICAgIDxDbGFzc05hbWVzPlxuICAgICAgICAgIHsoeyBjc3MsIGN4IH0pID0+IChcbiAgICAgICAgICAgIDxPYmplY3RDb250cm9sXG4gICAgICAgICAgICAgIGNsYXNzTmFtZVdyYXBwZXI9e2N4KGNsYXNzTmFtZVdyYXBwZXIsIHtcbiAgICAgICAgICAgICAgICBbY3NzYFxuICAgICAgICAgICAgICAgICAgJHtzdHlsZVN0cmluZ3MuY29sbGFwc2VkT2JqZWN0Q29udHJvbH07XG4gICAgICAgICAgICAgICAgYF06IGNvbGxhcHNlZCxcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIHZhbHVlPXtpdGVtfVxuICAgICAgICAgICAgICBmaWVsZD17ZmllbGR9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlT2JqZWN0PXt0aGlzLmhhbmRsZUNoYW5nZUZvcihpbmRleCl9XG4gICAgICAgICAgICAgIGVkaXRvckNvbnRyb2w9e2VkaXRvckNvbnRyb2x9XG4gICAgICAgICAgICAgIHJlc29sdmVXaWRnZXQ9e3Jlc29sdmVXaWRnZXR9XG4gICAgICAgICAgICAgIG1ldGFkYXRhPXttZXRhZGF0YX1cbiAgICAgICAgICAgICAgZm9yTGlzdFxuICAgICAgICAgICAgICBvblZhbGlkYXRlT2JqZWN0PXtvblZhbGlkYXRlT2JqZWN0fVxuICAgICAgICAgICAgICBjbGVhckZpZWxkRXJyb3JzPXtjbGVhckZpZWxkRXJyb3JzfVxuICAgICAgICAgICAgICBmaWVsZHNFcnJvcnM9e2ZpZWxkc0Vycm9yc31cbiAgICAgICAgICAgICAgcmVmPXt0aGlzLnByb2Nlc3NDb250cm9sUmVmfVxuICAgICAgICAgICAgICBjb250cm9sUmVmPXtjb250cm9sUmVmfVxuICAgICAgICAgICAgICB2YWxpZGF0aW9uS2V5PXtrZXl9XG4gICAgICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICAgICAgICBkYXRhLXRlc3RpZD17YG9iamVjdC1jb250cm9sLSR7a2V5fWB9XG4gICAgICAgICAgICAgIGhhc0Vycm9yPXtoYXNFcnJvcn1cbiAgICAgICAgICAgICAgcGFyZW50SWRzPXtbLi4ucGFyZW50SWRzLCBmb3JJRCwga2V5XX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9DbGFzc05hbWVzPlxuICAgICAgPC9Tb3J0YWJsZUxpc3RJdGVtPlxuICAgICk7XG4gIH07XG5cbiAgcmVuZGVyRXJyb25lb3VzVHlwZWRJdGVtKGluZGV4LCBpdGVtKSB7XG4gICAgY29uc3QgZmllbGQgPSB0aGlzLnByb3BzLmZpZWxkO1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZUZvclR5cGVkRmllbGRBbmRWYWx1ZShmaWVsZCwgaXRlbSk7XG4gICAgY29uc3Qga2V5ID0gYGl0ZW0tJHtpbmRleH1gO1xuICAgIHJldHVybiAoXG4gICAgICA8U29ydGFibGVMaXN0SXRlbVxuICAgICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBzdHlsZXMubGlzdENvbnRyb2xJdGVtQ29sbGFwc2VkXX1cbiAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICBrZXk9e2tleX1cbiAgICAgID5cbiAgICAgICAgPFN0eWxlZExpc3RJdGVtVG9wQmFyXG4gICAgICAgICAgb25Db2xsYXBzZVRvZ2dsZT17bnVsbH1cbiAgICAgICAgICBvblJlbW92ZT17cGFydGlhbCh0aGlzLmhhbmRsZVJlbW92ZSwgaW5kZXgsIGtleSl9XG4gICAgICAgICAgZHJhZ0hhbmRsZT17RHJhZ0hhbmRsZX1cbiAgICAgICAgICBpZD17a2V5fVxuICAgICAgICAvPlxuICAgICAgICA8TmVzdGVkT2JqZWN0TGFiZWwgY29sbGFwc2VkPXt0cnVlfSBlcnJvcj17dHJ1ZX0+XG4gICAgICAgICAge2Vycm9yTWVzc2FnZX1cbiAgICAgICAgPC9OZXN0ZWRPYmplY3RMYWJlbD5cbiAgICAgIDwvU29ydGFibGVMaXN0SXRlbT5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyTGlzdENvbnRyb2woKSB7XG4gICAgY29uc3QgeyB2YWx1ZSwgZm9ySUQsIGZpZWxkLCBjbGFzc05hbWVXcmFwcGVyLCB0IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQsIGxpc3RDb2xsYXBzZWQsIGtleXMgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgaXRlbXMgPSB2YWx1ZSB8fCBMaXN0KCk7XG4gICAgY29uc3QgbGFiZWwgPSBmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpO1xuICAgIGNvbnN0IGxhYmVsU2luZ3VsYXIgPSBmaWVsZC5nZXQoJ2xhYmVsX3Npbmd1bGFyJykgfHwgZmllbGQuZ2V0KCdsYWJlbCcsIGZpZWxkLmdldCgnbmFtZScpKTtcbiAgICBjb25zdCBsaXN0TGFiZWwgPSBpdGVtcy5zaXplID09PSAxID8gbGFiZWxTaW5ndWxhci50b0xvd2VyQ2FzZSgpIDogbGFiZWwudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBtaW5pbWl6ZUNvbGxhcHNlZEl0ZW1zID0gZmllbGQuZ2V0KCdtaW5pbWl6ZV9jb2xsYXBzZWQnLCBmYWxzZSk7XG4gICAgY29uc3QgYWxsSXRlbXNDb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZC5ldmVyeSh2YWwgPT4gdmFsID09PSB0cnVlKTtcbiAgICBjb25zdCBzZWxmQ29sbGFwc2VkID0gYWxsSXRlbXNDb2xsYXBzZWQgJiYgKGxpc3RDb2xsYXBzZWQgfHwgIW1pbmltaXplQ29sbGFwc2VkSXRlbXMpO1xuXG4gICAgY29uc3QgaXRlbXNBcnJheSA9IGtleXMubWFwKGtleSA9PiAoeyBpZDoga2V5IH0pKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8Q2xhc3NOYW1lcz5cbiAgICAgICAgeyh7IGN4LCBjc3MgfSkgPT4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGlkPXtmb3JJRH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goXG4gICAgICAgICAgICAgIGNsYXNzTmFtZVdyYXBwZXIsXG4gICAgICAgICAgICAgIGNzc2BcbiAgICAgICAgICAgICAgICAke3N0eWxlU3RyaW5ncy5vYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXJ9XG4gICAgICAgICAgICAgIGAsXG4gICAgICAgICAgICApfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxPYmplY3RXaWRnZXRUb3BCYXJcbiAgICAgICAgICAgICAgYWxsb3dBZGQ9e2ZpZWxkLmdldCgnYWxsb3dfYWRkJywgdHJ1ZSl9XG4gICAgICAgICAgICAgIG9uQWRkPXt0aGlzLmhhbmRsZUFkZH1cbiAgICAgICAgICAgICAgdHlwZXM9e2ZpZWxkLmdldChUWVBFU19LRVksIG51bGwpfVxuICAgICAgICAgICAgICBvbkFkZFR5cGU9e3R5cGUgPT4gdGhpcy5oYW5kbGVBZGRUeXBlKHR5cGUsIHJlc29sdmVGaWVsZEtleVR5cGUoZmllbGQpKX1cbiAgICAgICAgICAgICAgaGVhZGluZz17YCR7aXRlbXMuc2l6ZX0gJHtsaXN0TGFiZWx9YH1cbiAgICAgICAgICAgICAgbGFiZWw9e2xhYmVsU2luZ3VsYXIudG9Mb3dlckNhc2UoKX1cbiAgICAgICAgICAgICAgb25Db2xsYXBzZVRvZ2dsZT17dGhpcy5oYW5kbGVDb2xsYXBzZUFsbFRvZ2dsZX1cbiAgICAgICAgICAgICAgY29sbGFwc2VkPXtzZWxmQ29sbGFwc2VkfVxuICAgICAgICAgICAgICB0PXt0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHsoIXNlbGZDb2xsYXBzZWQgfHwgIW1pbmltaXplQ29sbGFwc2VkSXRlbXMpICYmIChcbiAgICAgICAgICAgICAgPFNvcnRhYmxlTGlzdCBpdGVtcz17aXRlbXNBcnJheX0ga2V5cz17a2V5c30gb25Tb3J0RW5kPXt0aGlzLm9uU29ydEVuZH0+XG4gICAgICAgICAgICAgICAge2l0ZW1zLm1hcCh0aGlzLnJlbmRlckl0ZW0pfVxuICAgICAgICAgICAgICA8L1NvcnRhYmxlTGlzdD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L0NsYXNzTmFtZXM+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlcklucHV0KCkge1xuICAgIGNvbnN0IHsgZm9ySUQsIGNsYXNzTmFtZVdyYXBwZXIgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIHJldHVybiAoXG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBpZD17Zm9ySUR9XG4gICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICBvbkZvY3VzPXt0aGlzLmhhbmRsZUZvY3VzfVxuICAgICAgICBvbkJsdXI9e3RoaXMuaGFuZGxlQmx1cn1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVXcmFwcGVyfVxuICAgICAgLz5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmdldFZhbHVlVHlwZSgpICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJMaXN0Q29udHJvbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJJbnB1dCgpO1xuICAgIH1cbiAgfVxufVxuIl19 */",
|
|
49
|
+
styles: "margin-top:18px;&:first-of-type{margin-top:26px;};label:listControlItem;/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpRXNCIiwiZmlsZSI6Ii4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IEltbXV0YWJsZVByb3BUeXBlcyBmcm9tICdyZWFjdC1pbW11dGFibGUtcHJvcHR5cGVzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCB7IGNzcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IExpc3QsIE1hcCwgZnJvbUpTIH0gZnJvbSAnaW1tdXRhYmxlJztcbmltcG9ydCBwYXJ0aWFsIGZyb20gJ2xvZGFzaC9wYXJ0aWFsJztcbmltcG9ydCBpc0VtcHR5IGZyb20gJ2xvZGFzaC9pc0VtcHR5JztcbmltcG9ydCB1bmlxdWVJZCBmcm9tICdsb2Rhc2gvdW5pcXVlSWQnO1xuaW1wb3J0IHsgdjQgYXMgdXVpZCB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IERlY2FwQ21zV2lkZ2V0T2JqZWN0IGZyb20gJ2RlY2FwLWNtcy13aWRnZXQtb2JqZWN0JztcbmltcG9ydCB7XG4gIERuZENvbnRleHQsXG4gIE1vdXNlU2Vuc29yLFxuICBUb3VjaFNlbnNvcixcbiAgY2xvc2VzdENlbnRlcixcbiAgdXNlU2Vuc29yLFxuICB1c2VTZW5zb3JzLFxufSBmcm9tICdAZG5kLWtpdC9jb3JlJztcbmltcG9ydCB7IFNvcnRhYmxlQ29udGV4dCwgdXNlU29ydGFibGUgfSBmcm9tICdAZG5kLWtpdC9zb3J0YWJsZSc7XG5pbXBvcnQgeyByZXN0cmljdFRvUGFyZW50RWxlbWVudCB9IGZyb20gJ0BkbmQta2l0L21vZGlmaWVycyc7XG5pbXBvcnQgeyBDU1MgfSBmcm9tICdAZG5kLWtpdC91dGlsaXRpZXMnO1xuaW1wb3J0IHtcbiAgTGlzdEl0ZW1Ub3BCYXIsXG4gIE9iamVjdFdpZGdldFRvcEJhcixcbiAgY29sb3JzLFxuICBsZW5ndGhzLFxuICBGaWVsZExhYmVsLFxufSBmcm9tICdkZWNhcC1jbXMtdWktZGVmYXVsdCc7XG5pbXBvcnQgeyBzdHJpbmdUZW1wbGF0ZSwgdmFsaWRhdGlvbnMgfSBmcm9tICdkZWNhcC1jbXMtbGliLXdpZGdldHMnO1xuXG5pbXBvcnQge1xuICBUWVBFU19LRVksXG4gIGdldFR5cGVkRmllbGRGb3JWYWx1ZSxcbiAgcmVzb2x2ZUZpZWxkS2V5VHlwZSxcbiAgZ2V0RXJyb3JNZXNzYWdlRm9yVHlwZWRGaWVsZEFuZFZhbHVlLFxufSBmcm9tICcuL3R5cGVkTGlzdEhlbHBlcnMnO1xuXG5jb25zdCBPYmplY3RDb250cm9sID0gRGVjYXBDbXNXaWRnZXRPYmplY3QuY29udHJvbENvbXBvbmVudDtcblxuY29uc3QgTGlzdEl0ZW0gPSBzdHlsZWQuZGl2KCk7XG5cbmNvbnN0IFN0eWxlZExpc3RJdGVtVG9wQmFyID0gc3R5bGVkKExpc3RJdGVtVG9wQmFyKWBcbiAgYmFja2dyb3VuZC1jb2xvcjogJHtjb2xvcnMudGV4dEZpZWxkQm9yZGVyfTtcbmA7XG5cbmNvbnN0IE5lc3RlZE9iamVjdExhYmVsID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogJHtwcm9wcyA9PiAocHJvcHMuY29sbGFwc2VkID8gJ2Jsb2NrJyA6ICdub25lJyl9O1xuICBib3JkZXItdG9wOiAwO1xuICBjb2xvcjogJHtwcm9wcyA9PiAocHJvcHMuZXJyb3IgPyBjb2xvcnMuZXJyb3JUZXh0IDogJ2luaGVyaXQnKX07XG4gIGJhY2tncm91bmQtY29sb3I6ICR7Y29sb3JzLnRleHRGaWVsZEJvcmRlcn07XG4gIHBhZGRpbmc6IDEzcHg7XG4gIGJvcmRlci1yYWRpdXM6IDAgMCAke2xlbmd0aHMuYm9yZGVyUmFkaXVzfSAke2xlbmd0aHMuYm9yZGVyUmFkaXVzfTtcbmA7XG5cbmNvbnN0IHN0eWxlU3RyaW5ncyA9IHtcbiAgY29sbGFwc2VkT2JqZWN0Q29udHJvbDogYFxuICAgIGRpc3BsYXk6IG5vbmU7XG4gIGAsXG4gIG9iamVjdFdpZGdldFRvcEJhckNvbnRhaW5lcjogYFxuICAgIHBhZGRpbmc6ICR7bGVuZ3Rocy5vYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXJQYWRkaW5nfTtcbiAgYCxcbn07XG5cbmNvbnN0IHN0eWxlcyA9IHtcbiAgbGlzdENvbnRyb2xJdGVtOiBjc3NgXG4gICAgbWFyZ2luLXRvcDogMThweDtcblxuICAgICY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgICBtYXJnaW4tdG9wOiAyNnB4O1xuICAgIH1cbiAgYCxcbiAgbGlzdENvbnRyb2xJdGVtQ29sbGFwc2VkOiBjc3NgXG4gICAgcGFkZGluZy1ib3R0b206IDA7XG4gIGAsXG59O1xuXG5mdW5jdGlvbiBTb3J0YWJsZUxpc3QoeyBpdGVtcywgY2hpbGRyZW4sIG9uU29ydEVuZCwga2V5cyB9KSB7XG4gIGNvbnN0IGFjdGl2YXRpb25Db25zdHJhaW50ID0geyBkaXN0YW5jZTogNCB9O1xuICBjb25zdCBzZW5zb3JzID0gdXNlU2Vuc29ycyhcbiAgICB1c2VTZW5zb3IoTW91c2VTZW5zb3IsIHsgYWN0aXZhdGlvbkNvbnN0cmFpbnQgfSksXG4gICAgdXNlU2Vuc29yKFRvdWNoU2Vuc29yLCB7IGFjdGl2YXRpb25Db25zdHJhaW50IH0pLFxuICApO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZVNvcnRFbmQoeyBhY3RpdmUsIG92ZXIgfSkge1xuICAgIG9uU29ydEVuZCh7XG4gICAgICBvbGRJbmRleDoga2V5cy5pbmRleE9mKGFjdGl2ZS5pZCksXG4gICAgICBuZXdJbmRleDoga2V5cy5pbmRleE9mKG92ZXIuaWQpLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2PlxuICAgICAgPERuZENvbnRleHRcbiAgICAgICAgbW9kaWZpZXJzPXtbcmVzdHJpY3RUb1BhcmVudEVsZW1lbnRdfVxuICAgICAgICBjb2xsaXNpb25EZXRlY3Rpb249e2Nsb3Nlc3RDZW50ZXJ9XG4gICAgICAgIHNlbnNvcnM9e3NlbnNvcnN9XG4gICAgICAgIG9uRHJhZ0VuZD17aGFuZGxlU29ydEVuZH1cbiAgICAgID5cbiAgICAgICAgPFNvcnRhYmxlQ29udGV4dCBpdGVtcz17aXRlbXN9PntjaGlsZHJlbn08L1NvcnRhYmxlQ29udGV4dD5cbiAgICAgIDwvRG5kQ29udGV4dD5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gU29ydGFibGVMaXN0SXRlbShwcm9wcykge1xuICBjb25zdCB7IHNldE5vZGVSZWYsIHRyYW5zZm9ybSwgdHJhbnNpdGlvbiB9ID0gdXNlU29ydGFibGUoe1xuICAgIGlkOiBwcm9wcy5pZCxcbiAgfSk7XG5cbiAgY29uc3Qgc3R5bGUgPSB7XG4gICAgdHJhbnNmb3JtOiBDU1MuVHJhbnNmb3JtLnRvU3RyaW5nKHRyYW5zZm9ybSksXG4gICAgdHJhbnNpdGlvbixcbiAgfTtcblxuICBjb25zdCB7IGNvbGxhcHNlZCB9ID0gcHJvcHM7XG5cbiAgcmV0dXJuIChcbiAgICA8TGlzdEl0ZW1cbiAgICAgIHNvcnRhYmxlXG4gICAgICByZWY9e3NldE5vZGVSZWZ9XG4gICAgICBzdHlsZT17c3R5bGV9XG4gICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBjb2xsYXBzZWQgJiYgc3R5bGVzLmxpc3RDb250cm9sSXRlbUNvbGxhcHNlZF19XG4gICAgPlxuICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgIDwvTGlzdEl0ZW0+XG4gICk7XG59XG5cbmZ1bmN0aW9uIERyYWdIYW5kbGUoeyBjaGlsZHJlbiwgaWQgfSkge1xuICBjb25zdCB7IGF0dHJpYnV0ZXMsIGxpc3RlbmVycyB9ID0gdXNlU29ydGFibGUoe1xuICAgIGlkLFxuICB9KTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgey4uLmF0dHJpYnV0ZXN9IHsuLi5saXN0ZW5lcnN9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5jb25zdCB2YWx1ZVR5cGVzID0ge1xuICBTSU5HTEU6ICdTSU5HTEUnLFxuICBNVUxUSVBMRTogJ01VTFRJUExFJyxcbiAgTUlYRUQ6ICdNSVhFRCcsXG59O1xuXG5mdW5jdGlvbiBoYW5kbGVTdW1tYXJ5KHN1bW1hcnksIGVudHJ5LCBsYWJlbCwgaXRlbSkge1xuICBjb25zdCBkYXRhID0gc3RyaW5nVGVtcGxhdGUuYWRkRmlsZVRlbXBsYXRlRmllbGRzKFxuICAgIGVudHJ5LmdldCgncGF0aCcpLFxuICAgIGl0ZW0uc2V0KCdmaWVsZHMubGFiZWwnLCBsYWJlbCksXG4gICk7XG4gIHJldHVybiBzdHJpbmdUZW1wbGF0ZS5jb21waWxlU3RyaW5nVGVtcGxhdGUoc3VtbWFyeSwgbnVsbCwgJycsIGRhdGEpO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUl0ZW0oZmllbGQsIGl0ZW0pIHtcbiAgaWYgKCFNYXAuaXNNYXAoaXRlbSkpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgJyR7ZmllbGQuZ2V0KCduYW1lJyl9JyBmaWVsZCBpdGVtIHZhbHVlIHZhbHVlIHNob3VsZCBiZSBhIG1hcCBidXQgaXMgYSAnJHt0eXBlb2YgaXRlbX0nYCxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gTGFiZWxDb21wb25lbnQoeyBmaWVsZCwgaXNBY3RpdmUsIGhhc0Vycm9ycywgdW5pcXVlRmllbGRJZCwgaXNGaWVsZE9wdGlvbmFsLCB0IH0pIHtcbiAgY29uc3QgbGFiZWwgPSBgJHtmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpfWA7XG4gIHJldHVybiAoXG4gICAgPEZpZWxkTGFiZWwgaXNBY3RpdmU9e2lzQWN0aXZlfSBoYXNFcnJvcnM9e2hhc0Vycm9yc30gaHRtbEZvcj17dW5pcXVlRmllbGRJZH0+XG4gICAgICB7bGFiZWx9IHtgJHtpc0ZpZWxkT3B0aW9uYWwgPyBgICgke3QoJ2VkaXRvci5lZGl0b3JDb250cm9sLmZpZWxkLm9wdGlvbmFsJyl9KWAgOiAnJ31gfVxuICAgIDwvRmllbGRMYWJlbD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlzdENvbnRyb2wgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjaGlsZFJlZnMgPSB7fTtcblxuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIG1ldGFkYXRhOiBJbW11dGFibGVQcm9wVHlwZXMubWFwLFxuICAgIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uQ2hhbmdlT2JqZWN0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uVmFsaWRhdGVPYmplY3Q6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdmFsaWRhdGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdmFsdWU6IEltbXV0YWJsZVByb3BUeXBlcy5saXN0LFxuICAgIGZpZWxkOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGZvcklEOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNvbnRyb2xSZWY6IFByb3BUeXBlcy5mdW5jLFxuICAgIG1lZGlhUGF0aHM6IEltbXV0YWJsZVByb3BUeXBlcy5tYXAuaXNSZXF1aXJlZCxcbiAgICBnZXRBc3NldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvbk9wZW5NZWRpYUxpYnJhcnk6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25BZGRBc3NldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvblJlbW92ZUluc2VydGVkTWVkaWE6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgY2xhc3NOYW1lV3JhcHBlcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHNldEFjdGl2ZVN0eWxlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHNldEluYWN0aXZlU3R5bGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgZWRpdG9yQ29udHJvbDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWQsXG4gICAgcmVzb2x2ZVdpZGdldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBjbGVhckZpZWxkRXJyb3JzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGZpZWxkc0Vycm9yczogSW1tdXRhYmxlUHJvcFR5cGVzLm1hcC5pc1JlcXVpcmVkLFxuICAgIGVudHJ5OiBJbW11dGFibGVQcm9wVHlwZXMubWFwLmlzUmVxdWlyZWQsXG4gICAgdDogUHJvcFR5cGVzLmZ1bmMsXG4gIH07XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICB2YWx1ZTogTGlzdCgpLFxuICAgIHBhcmVudElkczogW10sXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgY29uc3QgeyBmaWVsZCwgdmFsdWUgfSA9IHByb3BzO1xuICAgIGNvbnN0IGxpc3RDb2xsYXBzZWQgPSBmaWVsZC5nZXQoJ2NvbGxhcHNlZCcsIHRydWUpO1xuICAgIGNvbnN0IGl0ZW1zQ29sbGFwc2VkID0gKHZhbHVlICYmIEFycmF5KHZhbHVlLnNpemUpLmZpbGwobGlzdENvbGxhcHNlZCkpIHx8IFtdO1xuICAgIGNvbnN0IGtleXMgPSAodmFsdWUgJiYgQXJyYXkuZnJvbSh7IGxlbmd0aDogdmFsdWUuc2l6ZSB9LCAoKSA9PiB1dWlkKCkpKSB8fCBbXTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBsaXN0Q29sbGFwc2VkLFxuICAgICAgaXRlbXNDb2xsYXBzZWQsXG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZVRvU3RyaW5nKHZhbHVlKSxcbiAgICAgIGtleXMsXG4gICAgfTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIC8vIE1hbnVhbGx5IHZhbGlkYXRlIFByb3BUeXBlcyAtIFJlYWN0IDE5IGJyZWFraW5nIGNoYW5nZVxuICAgIFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcyhMaXN0Q29udHJvbC5wcm9wVHlwZXMsIHRoaXMucHJvcHMsICdwcm9wJywgJ0xpc3RDb250cm9sJyk7XG4gIH1cblxuICB2YWx1ZVRvU3RyaW5nID0gdmFsdWUgPT4ge1xuICAgIGxldCBzdHJpbmdWYWx1ZTtcbiAgICBpZiAoTGlzdC5pc0xpc3QodmFsdWUpIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBzdHJpbmdWYWx1ZSA9IHZhbHVlLmpvaW4oJywnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgRXhwZWN0ZWQgTGlzdCB2YWx1ZSB0byBiZSBhbiBhcnJheSBidXQgcmVjZWl2ZWQgJyR7dmFsdWV9JyB3aXRoIHR5cGUgb2YgJyR7dHlwZW9mIHZhbHVlfScuIFBsZWFzZSBjaGVjayB0aGUgdmFsdWUgcHJvdmlkZWQgdG8gdGhlICcke3RoaXMucHJvcHMuZmllbGQuZ2V0KFxuICAgICAgICAgICduYW1lJyxcbiAgICAgICAgKX0nIGZpZWxkYCxcbiAgICAgICk7XG4gICAgICBzdHJpbmdWYWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBzdHJpbmdWYWx1ZS5yZXBsYWNlKC8sKFteXFxzXXwkKS9nLCAnLCAkMScpO1xuICB9O1xuXG4gIGdldFZhbHVlVHlwZSA9ICgpID0+IHtcbiAgICBjb25zdCB7IGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChmaWVsZC5nZXQoJ2ZpZWxkcycpKSB7XG4gICAgICByZXR1cm4gdmFsdWVUeXBlcy5NVUxUSVBMRTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkLmdldCgnZmllbGQnKSkge1xuICAgICAgcmV0dXJuIHZhbHVlVHlwZXMuU0lOR0xFO1xuICAgIH0gZWxzZSBpZiAoZmllbGQuZ2V0KFRZUEVTX0tFWSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZVR5cGVzLk1JWEVEO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH07XG5cbiAgdW5pcXVlRmllbGRJZCA9IHVuaXF1ZUlkKGAke3RoaXMucHJvcHMuZmllbGQuZ2V0KCduYW1lJyl9LWZpZWxkLWApO1xuICAvKipcbiAgICogQWx3YXlzIHVwZGF0ZSBzbyB0aGF0IGVhY2ggbmVzdGVkIHdpZGdldCBoYXMgdGhlIG9wdGlvbiB0byB1cGRhdGUuIFRoaXMgaXNcbiAgICogcmVxdWlyZWQgYmVjYXVzZSBDb250cm9sSE9DIHByb3ZpZGVzIGEgZGVmYXVsdCBgc2hvdWxkQ29tcG9uZW50VXBkYXRlYFxuICAgKiB3aGljaCBvbmx5IHVwZGF0ZXMgaWYgdGhlIHZhbHVlIGNoYW5nZXMsIGJ1dCBldmVyeSB3aWRnZXQgbXVzdCBiZSBhbGxvd2VkXG4gICAqIHRvIG92ZXJyaWRlIHRoaXMuXG4gICAqL1xuICBzaG91bGRDb21wb25lbnRVcGRhdGUoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBoYW5kbGVDaGFuZ2UgPSBlID0+IHtcbiAgICBjb25zdCB7IG9uQ2hhbmdlIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy5zdGF0ZS52YWx1ZTtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IGUudGFyZ2V0LnZhbHVlLnRyaW0oKTtcbiAgICBjb25zdCBsaXN0VmFsdWUgPSBuZXdWYWx1ZSA/IG5ld1ZhbHVlLnNwbGl0KCcsJykgOiBbXTtcbiAgICBpZiAobmV3VmFsdWUubWF0Y2goLywkLykgJiYgb2xkVmFsdWUubWF0Y2goLywgJC8pKSB7XG4gICAgICBsaXN0VmFsdWUucG9wKCk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPSB0aGlzLnZhbHVlVG9TdHJpbmcobGlzdFZhbHVlKTtcbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHBhcnNlZFZhbHVlIH0pO1xuICAgIG9uQ2hhbmdlKExpc3QobGlzdFZhbHVlLm1hcCh2YWwgPT4gdmFsLnRyaW0oKSkpKTtcbiAgfTtcblxuICBoYW5kbGVGb2N1cyA9ICgpID0+IHtcbiAgICB0aGlzLnByb3BzLnNldEFjdGl2ZVN0eWxlKCk7XG4gIH07XG5cbiAgaGFuZGxlQmx1ciA9IGUgPT4ge1xuICAgIGNvbnN0IGxpc3RWYWx1ZSA9IGUudGFyZ2V0LnZhbHVlXG4gICAgICAuc3BsaXQoJywnKVxuICAgICAgLm1hcChlbCA9PiBlbC50cmltKCkpXG4gICAgICAuZmlsdGVyKGVsID0+IGVsKTtcbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHRoaXMudmFsdWVUb1N0cmluZyhsaXN0VmFsdWUpIH0pO1xuICAgIHRoaXMucHJvcHMuc2V0SW5hY3RpdmVTdHlsZSgpO1xuICB9O1xuXG4gIGhhbmRsZUFkZCA9IGUgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHBhcnNlZFZhbHVlID1cbiAgICAgIHRoaXMuZ2V0VmFsdWVUeXBlKCkgPT09IHZhbHVlVHlwZXMuU0lOR0xFXG4gICAgICAgID8gdGhpcy5zaW5nbGVEZWZhdWx0KClcbiAgICAgICAgOiBmcm9tSlModGhpcy5tdWx0aXBsZURlZmF1bHQoZmllbGQuZ2V0KCdmaWVsZHMnKSkpO1xuICAgIHRoaXMuYWRkSXRlbShwYXJzZWRWYWx1ZSk7XG4gIH07XG5cbiAgc2luZ2xlRGVmYXVsdCA9ICgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5maWVsZC5nZXRJbihbJ2ZpZWxkJywgJ2RlZmF1bHQnXSwgbnVsbCk7XG4gIH07XG5cbiAgbXVsdGlwbGVEZWZhdWx0ID0gZmllbGRzID0+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KGZpZWxkcyk7XG4gIH07XG5cbiAgaGFuZGxlQWRkVHlwZSA9ICh0eXBlLCB0eXBlS2V5KSA9PiB7XG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPSBmcm9tSlModGhpcy5taXhlZERlZmF1bHQodHlwZUtleSwgdHlwZSkpO1xuICAgIHRoaXMuYWRkSXRlbShwYXJzZWRWYWx1ZSk7XG4gIH07XG5cbiAgbWl4ZWREZWZhdWx0ID0gKHR5cGVLZXksIHR5cGUpID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZFR5cGUgPSB0aGlzLnByb3BzLmZpZWxkLmdldChUWVBFU19LRVkpLmZpbmQoZiA9PiBmLmdldCgnbmFtZScpID09PSB0eXBlKTtcbiAgICBjb25zdCBmaWVsZHMgPSBzZWxlY3RlZFR5cGUuZ2V0KCdmaWVsZHMnKSB8fCBbc2VsZWN0ZWRUeXBlLmdldCgnZmllbGQnKV07XG5cbiAgICByZXR1cm4gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KGZpZWxkcywgeyBbdHlwZUtleV06IHR5cGUgfSk7XG4gIH07XG5cbiAgZ2V0RmllbGRzRGVmYXVsdCA9IChmaWVsZHMsIGluaXRpYWxWYWx1ZSA9IHt9KSA9PiB7XG4gICAgcmV0dXJuIGZpZWxkcy5yZWR1Y2UoKGFjYywgaXRlbSkgPT4ge1xuICAgICAgY29uc3Qgc3ViZmllbGRzID0gaXRlbS5nZXQoJ2ZpZWxkJykgfHwgaXRlbS5nZXQoJ2ZpZWxkcycpO1xuICAgICAgY29uc3Qgb2JqZWN0ID0gaXRlbS5nZXQoJ3dpZGdldCcpID09ICdvYmplY3QnO1xuICAgICAgY29uc3QgbmFtZSA9IGl0ZW0uZ2V0KCduYW1lJyk7XG4gICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSBpdGVtLmdldCgnZGVmYXVsdCcsIG51bGwpO1xuXG4gICAgICBpZiAoTGlzdC5pc0xpc3Qoc3ViZmllbGRzKSAmJiBvYmplY3QpIHtcbiAgICAgICAgY29uc3Qgc3ViRGVmYXVsdFZhbHVlID0gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KHN1YmZpZWxkcyk7XG4gICAgICAgICFpc0VtcHR5KHN1YkRlZmF1bHRWYWx1ZSkgJiYgKGFjY1tuYW1lXSA9IHN1YkRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9XG5cbiAgICAgIGlmIChNYXAuaXNNYXAoc3ViZmllbGRzKSAmJiBvYmplY3QpIHtcbiAgICAgICAgY29uc3Qgc3ViRGVmYXVsdFZhbHVlID0gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KFtzdWJmaWVsZHNdKTtcbiAgICAgICAgIWlzRW1wdHkoc3ViRGVmYXVsdFZhbHVlKSAmJiAoYWNjW25hbWVdID0gc3ViRGVmYXVsdFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH1cblxuICAgICAgaWYgKGRlZmF1bHRWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBhY2NbbmFtZV0gPSBkZWZhdWx0VmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgaW5pdGlhbFZhbHVlKTtcbiAgfTtcblxuICBhZGRJdGVtID0gcGFyc2VkVmFsdWUgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWUsIG9uQ2hhbmdlLCBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBhZGRUb1RvcCA9IGZpZWxkLmdldCgnYWRkX3RvX3RvcCcsIGZhbHNlKTtcblxuICAgIGNvbnN0IGl0ZW1LZXkgPSB1dWlkKCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBpdGVtc0NvbGxhcHNlZDogYWRkVG9Ub3BcbiAgICAgICAgPyBbZmFsc2UsIC4uLnRoaXMuc3RhdGUuaXRlbXNDb2xsYXBzZWRdXG4gICAgICAgIDogWy4uLnRoaXMuc3RhdGUuaXRlbXNDb2xsYXBzZWQsIGZhbHNlXSxcbiAgICAgIGtleXM6IGFkZFRvVG9wID8gW2l0ZW1LZXksIC4uLnRoaXMuc3RhdGUua2V5c10gOiBbLi4udGhpcy5zdGF0ZS5rZXlzLCBpdGVtS2V5XSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGxpc3RWYWx1ZSA9IHZhbHVlIHx8IExpc3QoKTtcbiAgICBpZiAoYWRkVG9Ub3ApIHtcbiAgICAgIG9uQ2hhbmdlKGxpc3RWYWx1ZS51bnNoaWZ0KHBhcnNlZFZhbHVlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uQ2hhbmdlKGxpc3RWYWx1ZS5wdXNoKHBhcnNlZFZhbHVlKSk7XG4gICAgfVxuICB9O1xuXG4gIHByb2Nlc3NDb250cm9sUmVmID0gcmVmID0+IHtcbiAgICBpZiAoIXJlZikgcmV0dXJuO1xuICAgIGNvbnN0IHtcbiAgICAgIHByb3BzOiB7IHZhbGlkYXRpb25LZXk6IGtleSB9LFxuICAgIH0gPSByZWY7XG4gICAgdGhpcy5jaGlsZFJlZnNba2V5XSA9IHJlZjtcbiAgICB0aGlzLnByb3BzLmNvbnRyb2xSZWY/Lih0aGlzKTtcbiAgfTtcblxuICB2YWxpZGF0ZSA9ICgpID0+IHtcbiAgICAvLyBGaXJzdCB2YWxpZGF0ZSBjaGlsZCB3aWRnZXRzIGlmIHRoaXMgaXMgYSBjb21wbGV4IGxpc3RcbiAgICBjb25zdCBoYXNDaGlsZFdpZGdldHMgPSB0aGlzLmdldFZhbHVlVHlwZSgpICYmIE9iamVjdC5rZXlzKHRoaXMuY2hpbGRSZWZzKS5sZW5ndGggPiAwO1xuICAgIGlmIChoYXNDaGlsZFdpZGdldHMpIHtcbiAgICAgIE9iamVjdC52YWx1ZXModGhpcy5jaGlsZFJlZnMpLmZvckVhY2god2lkZ2V0ID0+IHtcbiAgICAgICAgd2lkZ2V0Py52YWxpZGF0ZT8uKCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9wcy52YWxpZGF0ZSgpO1xuICAgIH1cbiAgICB0aGlzLnByb3BzLm9uVmFsaWRhdGVPYmplY3QodGhpcy5wcm9wcy5mb3JJRCwgdGhpcy52YWxpZGF0ZVNpemUoKSk7XG4gIH07XG5cbiAgdmFsaWRhdGVTaXplID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgZmllbGQsIHZhbHVlLCB0IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG1pbiA9IGZpZWxkLmdldCgnbWluJyk7XG4gICAgY29uc3QgbWF4ID0gZmllbGQuZ2V0KCdtYXgnKTtcbiAgICBjb25zdCByZXF1aXJlZCA9IGZpZWxkLmdldCgncmVxdWlyZWQnLCB0cnVlKTtcblxuICAgIGlmICghcmVxdWlyZWQgJiYgIXZhbHVlPy5zaXplKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgZXJyb3IgPSB2YWxpZGF0aW9ucy52YWxpZGF0ZU1pbk1heChcbiAgICAgIHQsXG4gICAgICBmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpLFxuICAgICAgdmFsdWUsXG4gICAgICBtaW4sXG4gICAgICBtYXgsXG4gICAgKTtcblxuICAgIHJldHVybiBlcnJvciA/IFtlcnJvcl0gOiBbXTtcbiAgfTtcblxuICAvKipcbiAgICogSW4gY2FzZSB0aGUgYG9uQ2hhbmdlT2JqZWN0YCBmdW5jdGlvbiBpcyBmcm96ZW4gYnkgYSBjaGlsZCB3aWRnZXQgaW1wbGVtZW50YXRpb24sXG4gICAqIGUuZy4gd2hlbiBkZWJvdW5jZWQsIGFsd2F5cyBnZXQgdGhlIGxhdGVzdCBvYmplY3QgdmFsdWUgaW5zdGVhZCBvZiB1c2luZ1xuICAgKiBgdGhpcy5wcm9wcy52YWx1ZWAgZGlyZWN0bHkuXG4gICAqL1xuICBnZXRPYmplY3RWYWx1ZSA9IGlkeCA9PiB0aGlzLnByb3BzLnZhbHVlLmdldChpZHgpIHx8IE1hcCgpO1xuXG4gIGhhbmRsZUNoYW5nZUZvcihpbmRleCkge1xuICAgIHJldHVybiAoZiwgbmV3VmFsdWUsIG5ld01ldGFkYXRhKSA9PiB7XG4gICAgICBjb25zdCB7IHZhbHVlLCBtZXRhZGF0YSwgb25DaGFuZ2UsIGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBmaWVsZC5nZXQoJ25hbWUnKTtcbiAgICAgIGNvbnN0IGxpc3RGaWVsZE9iamVjdFdpZGdldCA9IGZpZWxkLmdldEluKFsnZmllbGQnLCAnd2lkZ2V0J10pID09PSAnb2JqZWN0JztcbiAgICAgIGNvbnN0IHdpdGhOYW1lS2V5ID1cbiAgICAgICAgdGhpcy5nZXRWYWx1ZVR5cGUoKSAhPT0gdmFsdWVUeXBlcy5TSU5HTEUgfHxcbiAgICAgICAgKHRoaXMuZ2V0VmFsdWVUeXBlKCkgPT09IHZhbHVlVHlwZXMuU0lOR0xFICYmIGxpc3RGaWVsZE9iamVjdFdpZGdldCk7XG4gICAgICBjb25zdCBuZXdPYmplY3RWYWx1ZSA9IHdpdGhOYW1lS2V5XG4gICAgICAgID8gdGhpcy5nZXRPYmplY3RWYWx1ZShpbmRleCkuc2V0KGYuZ2V0KCduYW1lJyksIG5ld1ZhbHVlKVxuICAgICAgICA6IG5ld1ZhbHVlO1xuICAgICAgY29uc3QgcGFyc2VkTWV0YWRhdGEgPSB7XG4gICAgICAgIFtjb2xsZWN0aW9uTmFtZV06IE9iamVjdC5hc3NpZ24obWV0YWRhdGEgPyBtZXRhZGF0YS50b0pTKCkgOiB7fSwgbmV3TWV0YWRhdGEgfHwge30pLFxuICAgICAgfTtcbiAgICAgIG9uQ2hhbmdlKHZhbHVlLnNldChpbmRleCwgbmV3T2JqZWN0VmFsdWUpLCBwYXJzZWRNZXRhZGF0YSk7XG4gICAgfTtcbiAgfVxuXG4gIGhhbmRsZVJlbW92ZSA9IChpbmRleCwgZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3Qge1xuICAgICAgdmFsdWUsXG4gICAgICBtZXRhZGF0YSxcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgZmllbGQsXG4gICAgICBjbGVhckZpZWxkRXJyb3JzLFxuICAgICAgb25WYWxpZGF0ZU9iamVjdCxcbiAgICAgIGZvcklELFxuICAgICAgZmllbGRzRXJyb3JzLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBmaWVsZC5nZXQoJ25hbWUnKTtcbiAgICBjb25zdCBpc1NpbmdsZUZpZWxkID0gdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5TSU5HTEU7XG5cbiAgICBjb25zdCBtZXRhZGF0YVJlbW92ZVBhdGggPSBpc1NpbmdsZUZpZWxkID8gdmFsdWUuZ2V0KGluZGV4KSA6IHZhbHVlLmdldChpbmRleCkudmFsdWVTZXEoKTtcbiAgICBjb25zdCBwYXJzZWRNZXRhZGF0YSA9XG4gICAgICBtZXRhZGF0YSAmJiAhbWV0YWRhdGEuaXNFbXB0eSgpXG4gICAgICAgID8geyBbY29sbGVjdGlvbk5hbWVdOiBtZXRhZGF0YS5yZW1vdmVJbihtZXRhZGF0YVJlbW92ZVBhdGgpIH1cbiAgICAgICAgOiBtZXRhZGF0YTtcblxuICAgIC8vIEdldCB0aGUga2V5IG9mIHRoZSBpdGVtIGJlaW5nIHJlbW92ZWRcbiAgICBjb25zdCByZW1vdmVkS2V5ID0gdGhpcy5zdGF0ZS5rZXlzW2luZGV4XTtcblxuICAgIC8vIFVwZGF0ZSBzdGF0ZSB3aGlsZSBwcmVzZXJ2aW5nIGtleXMgZm9yIHJlbWFpbmluZyBpdGVtc1xuICAgIGNvbnN0IG5ld0tleXMgPSBbLi4udGhpcy5zdGF0ZS5rZXlzXTtcbiAgICBuZXdLZXlzLnNwbGljZShpbmRleCwgMSk7XG4gICAgaXRlbXNDb2xsYXBzZWQuc3BsaWNlKGluZGV4LCAxKTtcblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXNDb2xsYXBzZWQ6IFsuLi5pdGVtc0NvbGxhcHNlZF0sXG4gICAgICBrZXlzOiBuZXdLZXlzLFxuICAgIH0pO1xuXG4gICAgLy8gQ2xlYXIgdGhlIHJlZiBmb3IgdGhlIHJlbW92ZWQgaXRlbVxuICAgIGRlbGV0ZSB0aGlzLmNoaWxkUmVmc1tyZW1vdmVkS2V5XTtcblxuICAgIGNvbnN0IG5ld1ZhbHVlID0gdmFsdWUuZGVsZXRlKGluZGV4KTtcblxuICAgIC8vIENsZWFyIGVycm9ycyBmb3IgdGhlIHJlbW92ZWQgaXRlbSBhbmQgaXRzIGNoaWxkcmVuXG4gICAgaWYgKGZpZWxkc0Vycm9ycykge1xuICAgICAgT2JqZWN0LmVudHJpZXMoZmllbGRzRXJyb3JzLnRvSlMoKSkuZm9yRWFjaCgoW2ZpZWxkSWQsIGVycm9yc10pID0+IHtcbiAgICAgICAgaWYgKGVycm9ycy5zb21lKGVyciA9PiBlcnIucGFyZW50SWRzPy5pbmNsdWRlcyhyZW1vdmVkS2V5KSkpIHtcbiAgICAgICAgICBjbGVhckZpZWxkRXJyb3JzKGZpZWxkSWQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBJZiBsaXN0IGlzIGVtcHR5LCBtYXJrIGl0IGFzIHZhbGlkXG4gICAgaWYgKG5ld1ZhbHVlLnNpemUgPT09IDApIHtcbiAgICAgIGNsZWFyRmllbGRFcnJvcnMoZm9ySUQpO1xuICAgICAgb25WYWxpZGF0ZU9iamVjdChmb3JJRCwgW10pO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSB0aGUgdmFsdWUgbGFzdCB0byBlbnN1cmUgYWxsIGVycm9yIHN0YXRlcyBhcmUgY2xlYXJlZFxuICAgIG9uQ2hhbmdlKG5ld1ZhbHVlLCBwYXJzZWRNZXRhZGF0YSk7XG4gIH07XG5cbiAgaGFuZGxlSXRlbUNvbGxhcHNlVG9nZ2xlID0gKGluZGV4LCBldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBuZXdJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLm1hcCgoY29sbGFwc2VkLCBpdGVtSW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCA9PT0gaXRlbUluZGV4KSB7XG4gICAgICAgIHJldHVybiAhY29sbGFwc2VkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbGxhcHNlZDtcbiAgICB9KTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGl0ZW1zQ29sbGFwc2VkOiBuZXdJdGVtc0NvbGxhcHNlZCxcbiAgICB9KTtcbiAgfTtcblxuICBoYW5kbGVDb2xsYXBzZUFsbFRvZ2dsZSA9IGUgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IHZhbHVlLCBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkLCBsaXN0Q29sbGFwc2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IG1pbmltaXplQ29sbGFwc2VkSXRlbXMgPSBmaWVsZC5nZXQoJ21pbmltaXplX2NvbGxhcHNlZCcsIGZhbHNlKTtcbiAgICBjb25zdCBsaXN0Q29sbGFwc2VkQnlEZWZhdWx0ID0gZmllbGQuZ2V0KCdjb2xsYXBzZWQnLCB0cnVlKTtcbiAgICBjb25zdCBhbGxJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLmV2ZXJ5KHZhbCA9PiB2YWwgPT09IHRydWUpO1xuXG4gICAgaWYgKG1pbmltaXplQ29sbGFwc2VkSXRlbXMpIHtcbiAgICAgIGxldCB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZDtcbiAgICAgIC8vIE9ubHkgYWxsb3cgY29sbGFwc2luZyBhbGwgaXRlbXMgaW4gdGhpcyBtb2RlIGJ1dCBub3Qgb3BlbmluZyBhbGwgYXQgb25jZVxuICAgICAgaWYgKCFsaXN0Q29sbGFwc2VkIHx8ICFsaXN0Q29sbGFwc2VkQnlEZWZhdWx0KSB7XG4gICAgICAgIHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCA9IEFycmF5KHZhbHVlLnNpemUpLmZpbGwoIWxpc3RDb2xsYXBzZWQpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGxpc3RDb2xsYXBzZWQ6ICFsaXN0Q29sbGFwc2VkLCBpdGVtc0NvbGxhcHNlZDogdXBkYXRlZEl0ZW1zQ29sbGFwc2VkIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgaXRlbXNDb2xsYXBzZWQ6IEFycmF5KHZhbHVlLnNpemUpLmZpbGwoIWFsbEl0ZW1zQ29sbGFwc2VkKSB9KTtcbiAgICB9XG4gIH07XG5cbiAgb2JqZWN0TGFiZWwoaXRlbSkge1xuICAgIGNvbnN0IHsgZmllbGQsIGVudHJ5IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHZhbHVlVHlwZSA9IHRoaXMuZ2V0VmFsdWVUeXBlKCk7XG4gICAgc3dpdGNoICh2YWx1ZVR5cGUpIHtcbiAgICAgIGNhc2UgdmFsdWVUeXBlcy5NSVhFRDoge1xuICAgICAgICBpZiAoIXZhbGlkYXRlSXRlbShmaWVsZCwgaXRlbSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXRlbVR5cGUgPSBnZXRUeXBlZEZpZWxkRm9yVmFsdWUoZmllbGQsIGl0ZW0pO1xuICAgICAgICBjb25zdCBsYWJlbCA9IGl0ZW1UeXBlLmdldCgnbGFiZWwnLCBpdGVtVHlwZS5nZXQoJ25hbWUnKSk7XG4gICAgICAgIC8vIGVhY2ggdHlwZSBjYW4gaGF2ZSBpdHMgb3duIHN1bW1hcnksIGJ1dCBkZWZhdWx0IHRvIHRoZSBsaXN0IHN1bW1hcnkgaWYgZXhpc3RzXG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBpdGVtVHlwZS5nZXQoJ3N1bW1hcnknLCBmaWVsZC5nZXQoJ3N1bW1hcnknKSk7XG4gICAgICAgIGNvbnN0IGxhYmVsUmV0dXJuID0gc3VtbWFyeSA/IGhhbmRsZVN1bW1hcnkoc3VtbWFyeSwgZW50cnksIGxhYmVsLCBpdGVtKSA6IGxhYmVsO1xuICAgICAgICByZXR1cm4gbGFiZWxSZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlIHZhbHVlVHlwZXMuU0lOR0xFOiB7XG4gICAgICAgIGNvbnN0IHNpbmdsZUZpZWxkID0gZmllbGQuZ2V0KCdmaWVsZCcpO1xuICAgICAgICBjb25zdCBsYWJlbCA9IHNpbmdsZUZpZWxkLmdldCgnbGFiZWwnLCBzaW5nbGVGaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBmaWVsZC5nZXQoJ3N1bW1hcnknKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGZyb21KUyh7IFtzaW5nbGVGaWVsZC5nZXQoJ25hbWUnKV06IGl0ZW0gfSk7XG4gICAgICAgIGNvbnN0IGxhYmVsUmV0dXJuID0gc3VtbWFyeSA/IGhhbmRsZVN1bW1hcnkoc3VtbWFyeSwgZW50cnksIGxhYmVsLCBkYXRhKSA6IGxhYmVsO1xuICAgICAgICByZXR1cm4gbGFiZWxSZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlIHZhbHVlVHlwZXMuTVVMVElQTEU6IHtcbiAgICAgICAgaWYgKCF2YWxpZGF0ZUl0ZW0oZmllbGQsIGl0ZW0pKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG11bHRpRmllbGRzID0gZmllbGQuZ2V0KCdmaWVsZHMnKTtcbiAgICAgICAgY29uc3QgbGFiZWxGaWVsZCA9IG11bHRpRmllbGRzICYmIG11bHRpRmllbGRzLmZpcnN0KCk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gaXRlbS5nZXQobGFiZWxGaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBmaWVsZC5nZXQoJ3N1bW1hcnknKTtcbiAgICAgICAgY29uc3QgbGFiZWxSZXR1cm4gPSBzdW1tYXJ5ID8gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgdmFsdWUsIGl0ZW0pIDogdmFsdWU7XG4gICAgICAgIHJldHVybiAobGFiZWxSZXR1cm4gfHwgYE5vICR7bGFiZWxGaWVsZC5nZXQoJ25hbWUnKX1gKS50b1N0cmluZygpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBvblNvcnRFbmQgPSAoeyBvbGRJbmRleCwgbmV3SW5kZXggfSkgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCwga2V5cyB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIC8vIFVwZGF0ZSB2YWx1ZVxuICAgIGNvbnN0IGl0ZW0gPSB2YWx1ZS5nZXQob2xkSW5kZXgpO1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gdmFsdWUuZGVsZXRlKG9sZEluZGV4KS5pbnNlcnQobmV3SW5kZXgsIGl0ZW0pO1xuICAgIHRoaXMucHJvcHMub25DaGFuZ2UobmV3VmFsdWUpO1xuXG4gICAgLy8gVXBkYXRlIGNvbGxhcHNpbmdcbiAgICBjb25zdCBjb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZFtvbGRJbmRleF07XG4gICAgaXRlbXNDb2xsYXBzZWQuc3BsaWNlKG9sZEluZGV4LCAxKTtcbiAgICBjb25zdCB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgPSBbLi4uaXRlbXNDb2xsYXBzZWRdO1xuICAgIHVwZGF0ZWRJdGVtc0NvbGxhcHNlZC5zcGxpY2UobmV3SW5kZXgsIDAsIGNvbGxhcHNlZCk7XG5cbiAgICAvLyBNb3ZlIGtleXMgdG8gbWFpbnRhaW4gcmVsYXRpb25zaGlwc1xuICAgIGNvbnN0IG1vdmVkS2V5ID0ga2V5c1tvbGRJbmRleF07XG4gICAgY29uc3QgdXBkYXRlZEtleXMgPSBbLi4ua2V5c107XG4gICAgdXBkYXRlZEtleXMuc3BsaWNlKG9sZEluZGV4LCAxKTtcbiAgICB1cGRhdGVkS2V5cy5zcGxpY2UobmV3SW5kZXgsIDAsIG1vdmVkS2V5KTtcblxuICAgIHRoaXMuc2V0U3RhdGUoeyBpdGVtc0NvbGxhcHNlZDogdXBkYXRlZEl0ZW1zQ29sbGFwc2VkLCBrZXlzOiB1cGRhdGVkS2V5cyB9KTtcbiAgfTtcblxuICBoYXNFcnJvciA9IGluZGV4ID0+IHtcbiAgICBjb25zdCB7IGZpZWxkc0Vycm9ycyB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoZmllbGRzRXJyb3JzICYmIGZpZWxkc0Vycm9ycy5zaXplID4gMCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZmllbGRzRXJyb3JzLnRvSlMoKSkuc29tZShhcnIgPT5cbiAgICAgICAgYXJyLnNvbWUoZXJyID0+IGVyci5wYXJlbnRJZHMgJiYgZXJyLnBhcmVudElkcy5pbmNsdWRlcyh0aGlzLnN0YXRlLmtleXNbaW5kZXhdKSksXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICBmb2N1cyhwYXRoKSB7XG4gICAgY29uc3QgW2luZGV4LCAuLi5yZW1haW5pbmdQYXRoXSA9IHBhdGguc3BsaXQoJy4nKTtcblxuICAgIGlmICh0aGlzLnN0YXRlLmxpc3RDb2xsYXBzZWQgfHwgdGhpcy5zdGF0ZS5pdGVtc0NvbGxhcHNlZFtpbmRleF0pIHtcbiAgICAgIGNvbnN0IG5ld0l0ZW1zQ29sbGFwc2VkID0gWy4uLnRoaXMuc3RhdGUuaXRlbXNDb2xsYXBzZWRdO1xuICAgICAgbmV3SXRlbXNDb2xsYXBzZWRbaW5kZXhdID0gZmFsc2U7XG4gICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICB7XG4gICAgICAgICAgbGlzdENvbGxhcHNlZDogZmFsc2UsXG4gICAgICAgICAgaXRlbXNDb2xsYXBzZWQ6IG5ld0l0ZW1zQ29sbGFwc2VkLFxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5zdGF0ZS5rZXlzW2luZGV4XTtcbiAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jaGlsZFJlZnNba2V5XTtcbiAgICAgICAgICBpZiAoY29udHJvbD8uZm9jdXMpIHtcbiAgICAgICAgICAgIGNvbnRyb2wuZm9jdXMocmVtYWluaW5nUGF0aC5qb2luKCcuJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuc3RhdGUua2V5c1tpbmRleF07XG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jaGlsZFJlZnNba2V5XTtcbiAgICAgIGlmIChjb250cm9sPy5mb2N1cykge1xuICAgICAgICBjb250cm9sLmZvY3VzKHJlbWFpbmluZ1BhdGguam9pbignLicpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZGlzcGxheS1uYW1lXG4gIHJlbmRlckl0ZW0gPSAoaXRlbSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjbGFzc05hbWVXcmFwcGVyLFxuICAgICAgZWRpdG9yQ29udHJvbCxcbiAgICAgIG9uVmFsaWRhdGVPYmplY3QsXG4gICAgICBtZXRhZGF0YSxcbiAgICAgIGNsZWFyRmllbGRFcnJvcnMsXG4gICAgICBmaWVsZHNFcnJvcnMsXG4gICAgICBjb250cm9sUmVmLFxuICAgICAgcmVzb2x2ZVdpZGdldCxcbiAgICAgIHBhcmVudElkcyxcbiAgICAgIGZvcklELFxuICAgICAgdCxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQsIGtleXMgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgY29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWRbaW5kZXhdO1xuICAgIGNvbnN0IGtleSA9IGtleXNbaW5kZXhdO1xuICAgIGxldCBmaWVsZCA9IHRoaXMucHJvcHMuZmllbGQ7XG4gICAgY29uc3QgaGFzRXJyb3IgPSB0aGlzLmhhc0Vycm9yKGluZGV4KTtcbiAgICBjb25zdCBpc1ZhcmlhYmxlVHlwZXNMaXN0ID0gdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5NSVhFRDtcbiAgICBpZiAoaXNWYXJpYWJsZVR5cGVzTGlzdCkge1xuICAgICAgZmllbGQgPSBnZXRUeXBlZEZpZWxkRm9yVmFsdWUoZmllbGQsIGl0ZW0pO1xuICAgICAgaWYgKCFmaWVsZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJFcnJvbmVvdXNUeXBlZEl0ZW0oaW5kZXgsIGl0ZW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8U29ydGFibGVMaXN0SXRlbVxuICAgICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBjb2xsYXBzZWQgJiYgc3R5bGVzLmxpc3RDb250cm9sSXRlbUNvbGxhcHNlZF19XG4gICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIGlkPXtrZXl9XG4gICAgICAgIGtleXM9e2tleXN9XG4gICAgICA+XG4gICAgICAgIHtpc1ZhcmlhYmxlVHlwZXNMaXN0ICYmIChcbiAgICAgICAgICA8TGFiZWxDb21wb25lbnRcbiAgICAgICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgICAgIGlzQWN0aXZlPXtmYWxzZX1cbiAgICAgICAgICAgIGhhc0Vycm9ycz17aGFzRXJyb3J9XG4gICAgICAgICAgICB1bmlxdWVGaWVsZElkPXt0aGlzLnVuaXF1ZUZpZWxkSWR9XG4gICAgICAgICAgICBpc0ZpZWxkT3B0aW9uYWw9e2ZpZWxkLmdldCgncmVxdWlyZWQnKSA9PT0gZmFsc2V9XG4gICAgICAgICAgICB0PXt0fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIDxTdHlsZWRMaXN0SXRlbVRvcEJhclxuICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICAgIG9uQ29sbGFwc2VUb2dnbGU9e3BhcnRpYWwodGhpcy5oYW5kbGVJdGVtQ29sbGFwc2VUb2dnbGUsIGluZGV4KX1cbiAgICAgICAgICBkcmFnSGFuZGxlPXtEcmFnSGFuZGxlfVxuICAgICAgICAgIGlkPXtrZXl9XG4gICAgICAgICAgYWxsb3dSZW1vdmU9e2ZpZWxkLmdldCgnYWxsb3dfcmVtb3ZlJywgdHJ1ZSl9XG4gICAgICAgICAgYWxsb3dSZW9yZGVyPXtmaWVsZC5nZXQoJ2FsbG93X3Jlb3JkZXInLCB0cnVlKX1cbiAgICAgICAgICBvblJlbW92ZT17cGFydGlhbCh0aGlzLmhhbmRsZVJlbW92ZSwgaW5kZXgpfVxuICAgICAgICAgIGRhdGEtdGVzdGlkPXtgc3R5bGVkLWxpc3QtaXRlbS10b3AtYmFyLSR7a2V5fWB9XG4gICAgICAgIC8+XG4gICAgICAgIDxOZXN0ZWRPYmplY3RMYWJlbCBjb2xsYXBzZWQ9e2NvbGxhcHNlZH0gZXJyb3I9e2hhc0Vycm9yfT5cbiAgICAgICAgICB7dGhpcy5vYmplY3RMYWJlbChpdGVtKX1cbiAgICAgICAgPC9OZXN0ZWRPYmplY3RMYWJlbD5cbiAgICAgICAgPENsYXNzTmFtZXM+XG4gICAgICAgICAgeyh7IGNzcywgY3ggfSkgPT4gKFxuICAgICAgICAgICAgPE9iamVjdENvbnRyb2xcbiAgICAgICAgICAgICAgY2xhc3NOYW1lV3JhcHBlcj17Y3goY2xhc3NOYW1lV3JhcHBlciwge1xuICAgICAgICAgICAgICAgIFtjc3NgXG4gICAgICAgICAgICAgICAgICAke3N0eWxlU3RyaW5ncy5jb2xsYXBzZWRPYmplY3RDb250cm9sfTtcbiAgICAgICAgICAgICAgICBgXTogY29sbGFwc2VkLFxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgdmFsdWU9e2l0ZW19XG4gICAgICAgICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgICAgICAgb25DaGFuZ2VPYmplY3Q9e3RoaXMuaGFuZGxlQ2hhbmdlRm9yKGluZGV4KX1cbiAgICAgICAgICAgICAgZWRpdG9yQ29udHJvbD17ZWRpdG9yQ29udHJvbH1cbiAgICAgICAgICAgICAgcmVzb2x2ZVdpZGdldD17cmVzb2x2ZVdpZGdldH1cbiAgICAgICAgICAgICAgbWV0YWRhdGE9e21ldGFkYXRhfVxuICAgICAgICAgICAgICBmb3JMaXN0XG4gICAgICAgICAgICAgIG9uVmFsaWRhdGVPYmplY3Q9e29uVmFsaWRhdGVPYmplY3R9XG4gICAgICAgICAgICAgIGNsZWFyRmllbGRFcnJvcnM9e2NsZWFyRmllbGRFcnJvcnN9XG4gICAgICAgICAgICAgIGZpZWxkc0Vycm9ycz17ZmllbGRzRXJyb3JzfVxuICAgICAgICAgICAgICByZWY9e3RoaXMucHJvY2Vzc0NvbnRyb2xSZWZ9XG4gICAgICAgICAgICAgIGNvbnRyb2xSZWY9e2NvbnRyb2xSZWZ9XG4gICAgICAgICAgICAgIHZhbGlkYXRpb25LZXk9e2tleX1cbiAgICAgICAgICAgICAgY29sbGFwc2VkPXtjb2xsYXBzZWR9XG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgb2JqZWN0LWNvbnRyb2wtJHtrZXl9YH1cbiAgICAgICAgICAgICAgaGFzRXJyb3I9e2hhc0Vycm9yfVxuICAgICAgICAgICAgICBwYXJlbnRJZHM9e1suLi5wYXJlbnRJZHMsIGZvcklELCBrZXldfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L0NsYXNzTmFtZXM+XG4gICAgICA8L1NvcnRhYmxlTGlzdEl0ZW0+XG4gICAgKTtcbiAgfTtcblxuICByZW5kZXJFcnJvbmVvdXNUeXBlZEl0ZW0oaW5kZXgsIGl0ZW0pIHtcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMucHJvcHMuZmllbGQ7XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZ2V0RXJyb3JNZXNzYWdlRm9yVHlwZWRGaWVsZEFuZFZhbHVlKGZpZWxkLCBpdGVtKTtcbiAgICBjb25zdCBrZXkgPSBgaXRlbS0ke2luZGV4fWA7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTb3J0YWJsZUxpc3RJdGVtXG4gICAgICAgIGNzcz17W3N0eWxlcy5saXN0Q29udHJvbEl0ZW0sIHN0eWxlcy5saXN0Q29udHJvbEl0ZW1Db2xsYXBzZWRdfVxuICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAgIGtleT17a2V5fVxuICAgICAgPlxuICAgICAgICA8U3R5bGVkTGlzdEl0ZW1Ub3BCYXJcbiAgICAgICAgICBvbkNvbGxhcHNlVG9nZ2xlPXtudWxsfVxuICAgICAgICAgIG9uUmVtb3ZlPXtwYXJ0aWFsKHRoaXMuaGFuZGxlUmVtb3ZlLCBpbmRleCwga2V5KX1cbiAgICAgICAgICBkcmFnSGFuZGxlPXtEcmFnSGFuZGxlfVxuICAgICAgICAgIGlkPXtrZXl9XG4gICAgICAgIC8+XG4gICAgICAgIDxOZXN0ZWRPYmplY3RMYWJlbCBjb2xsYXBzZWQ9e3RydWV9IGVycm9yPXt0cnVlfT5cbiAgICAgICAgICB7ZXJyb3JNZXNzYWdlfVxuICAgICAgICA8L05lc3RlZE9iamVjdExhYmVsPlxuICAgICAgPC9Tb3J0YWJsZUxpc3RJdGVtPlxuICAgICk7XG4gIH1cblxuICByZW5kZXJMaXN0Q29udHJvbCgpIHtcbiAgICBjb25zdCB7IHZhbHVlLCBmb3JJRCwgZmllbGQsIGNsYXNzTmFtZVdyYXBwZXIsIHQgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCwgbGlzdENvbGxhcHNlZCwga2V5cyB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBpdGVtcyA9IHZhbHVlIHx8IExpc3QoKTtcbiAgICBjb25zdCBsYWJlbCA9IGZpZWxkLmdldCgnbGFiZWwnLCBmaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgY29uc3QgbGFiZWxTaW5ndWxhciA9IGZpZWxkLmdldCgnbGFiZWxfc2luZ3VsYXInKSB8fCBmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpO1xuICAgIGNvbnN0IGxpc3RMYWJlbCA9IGl0ZW1zLnNpemUgPT09IDEgPyBsYWJlbFNpbmd1bGFyLnRvTG93ZXJDYXNlKCkgOiBsYWJlbC50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IG1pbmltaXplQ29sbGFwc2VkSXRlbXMgPSBmaWVsZC5nZXQoJ21pbmltaXplX2NvbGxhcHNlZCcsIGZhbHNlKTtcbiAgICBjb25zdCBhbGxJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLmV2ZXJ5KHZhbCA9PiB2YWwgPT09IHRydWUpO1xuICAgIGNvbnN0IHNlbGZDb2xsYXBzZWQgPSBhbGxJdGVtc0NvbGxhcHNlZCAmJiAobGlzdENvbGxhcHNlZCB8fCAhbWluaW1pemVDb2xsYXBzZWRJdGVtcyk7XG5cbiAgICBjb25zdCBpdGVtc0FycmF5ID0ga2V5cy5tYXAoa2V5ID0+ICh7IGlkOiBrZXkgfSkpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxDbGFzc05hbWVzPlxuICAgICAgICB7KHsgY3gsIGNzcyB9KSA9PiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgaWQ9e2ZvcklEfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjeChcbiAgICAgICAgICAgICAgY2xhc3NOYW1lV3JhcHBlcixcbiAgICAgICAgICAgICAgY3NzYFxuICAgICAgICAgICAgICAgICR7c3R5bGVTdHJpbmdzLm9iamVjdFdpZGdldFRvcEJhckNvbnRhaW5lcn1cbiAgICAgICAgICAgICAgYCxcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPE9iamVjdFdpZGdldFRvcEJhclxuICAgICAgICAgICAgICBhbGxvd0FkZD17ZmllbGQuZ2V0KCdhbGxvd19hZGQnLCB0cnVlKX1cbiAgICAgICAgICAgICAgb25BZGQ9e3RoaXMuaGFuZGxlQWRkfVxuICAgICAgICAgICAgICB0eXBlcz17ZmllbGQuZ2V0KFRZUEVTX0tFWSwgbnVsbCl9XG4gICAgICAgICAgICAgIG9uQWRkVHlwZT17dHlwZSA9PiB0aGlzLmhhbmRsZUFkZFR5cGUodHlwZSwgcmVzb2x2ZUZpZWxkS2V5VHlwZShmaWVsZCkpfVxuICAgICAgICAgICAgICBoZWFkaW5nPXtgJHtpdGVtcy5zaXplfSAke2xpc3RMYWJlbH1gfVxuICAgICAgICAgICAgICBsYWJlbD17bGFiZWxTaW5ndWxhci50b0xvd2VyQ2FzZSgpfVxuICAgICAgICAgICAgICBvbkNvbGxhcHNlVG9nZ2xlPXt0aGlzLmhhbmRsZUNvbGxhcHNlQWxsVG9nZ2xlfVxuICAgICAgICAgICAgICBjb2xsYXBzZWQ9e3NlbGZDb2xsYXBzZWR9XG4gICAgICAgICAgICAgIHQ9e3R9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgeyghc2VsZkNvbGxhcHNlZCB8fCAhbWluaW1pemVDb2xsYXBzZWRJdGVtcykgJiYgKFxuICAgICAgICAgICAgICA8U29ydGFibGVMaXN0IGl0ZW1zPXtpdGVtc0FycmF5fSBrZXlzPXtrZXlzfSBvblNvcnRFbmQ9e3RoaXMub25Tb3J0RW5kfT5cbiAgICAgICAgICAgICAgICB7aXRlbXMubWFwKHRoaXMucmVuZGVySXRlbSl9XG4gICAgICAgICAgICAgIDwvU29ydGFibGVMaXN0PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvQ2xhc3NOYW1lcz5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVySW5wdXQoKSB7XG4gICAgY29uc3QgeyBmb3JJRCwgY2xhc3NOYW1lV3JhcHBlciB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IHZhbHVlIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIGlkPXtmb3JJRH1cbiAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgIG9uRm9jdXM9e3RoaXMuaGFuZGxlRm9jdXN9XG4gICAgICAgIG9uQmx1cj17dGhpcy5oYW5kbGVCbHVyfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZVdyYXBwZXJ9XG4gICAgICAvPlxuICAgICk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuZ2V0VmFsdWVUeXBlKCkgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlckxpc3RDb250cm9sKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlcklucHV0KCk7XG4gICAgfVxuICB9XG59XG4iXX0= */",
|
|
54
50
|
toString: _EMOTION_STRINGIFIED_CSS_ERROR__
|
|
55
51
|
},
|
|
56
52
|
listControlItemCollapsed: process.env.NODE_ENV === "production" ? {
|
|
@@ -58,8 +54,7 @@ const styles = {
|
|
|
58
54
|
styles: "padding-bottom:0;label:listControlItemCollapsed;"
|
|
59
55
|
} : {
|
|
60
56
|
name: "1gjco9g-listControlItemCollapsed",
|
|
61
|
-
styles: "padding-bottom:0;label:listControlItemCollapsed;",
|
|
62
|
-
map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFzRStCIiwiZmlsZSI6Ii4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IEltbXV0YWJsZVByb3BUeXBlcyBmcm9tICdyZWFjdC1pbW11dGFibGUtcHJvcHR5cGVzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCB7IGNzcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IExpc3QsIE1hcCwgZnJvbUpTIH0gZnJvbSAnaW1tdXRhYmxlJztcbmltcG9ydCB7IHBhcnRpYWwsIGlzRW1wdHksIHVuaXF1ZUlkIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tICd1dWlkJztcbmltcG9ydCBEZWNhcENtc1dpZGdldE9iamVjdCBmcm9tICdkZWNhcC1jbXMtd2lkZ2V0LW9iamVjdCc7XG5pbXBvcnQge1xuICBEbmRDb250ZXh0LFxuICBNb3VzZVNlbnNvcixcbiAgVG91Y2hTZW5zb3IsXG4gIGNsb3Nlc3RDZW50ZXIsXG4gIHVzZVNlbnNvcixcbiAgdXNlU2Vuc29ycyxcbn0gZnJvbSAnQGRuZC1raXQvY29yZSc7XG5pbXBvcnQgeyBTb3J0YWJsZUNvbnRleHQsIHVzZVNvcnRhYmxlIH0gZnJvbSAnQGRuZC1raXQvc29ydGFibGUnO1xuaW1wb3J0IHsgcmVzdHJpY3RUb1BhcmVudEVsZW1lbnQgfSBmcm9tICdAZG5kLWtpdC9tb2RpZmllcnMnO1xuaW1wb3J0IHsgQ1NTIH0gZnJvbSAnQGRuZC1raXQvdXRpbGl0aWVzJztcbmltcG9ydCB7XG4gIExpc3RJdGVtVG9wQmFyLFxuICBPYmplY3RXaWRnZXRUb3BCYXIsXG4gIGNvbG9ycyxcbiAgbGVuZ3RocyxcbiAgRmllbGRMYWJlbCxcbn0gZnJvbSAnZGVjYXAtY21zLXVpLWRlZmF1bHQnO1xuaW1wb3J0IHsgc3RyaW5nVGVtcGxhdGUsIHZhbGlkYXRpb25zIH0gZnJvbSAnZGVjYXAtY21zLWxpYi13aWRnZXRzJztcblxuaW1wb3J0IHtcbiAgVFlQRVNfS0VZLFxuICBnZXRUeXBlZEZpZWxkRm9yVmFsdWUsXG4gIHJlc29sdmVGaWVsZEtleVR5cGUsXG4gIGdldEVycm9yTWVzc2FnZUZvclR5cGVkRmllbGRBbmRWYWx1ZSxcbn0gZnJvbSAnLi90eXBlZExpc3RIZWxwZXJzJztcblxuY29uc3QgT2JqZWN0Q29udHJvbCA9IERlY2FwQ21zV2lkZ2V0T2JqZWN0LmNvbnRyb2xDb21wb25lbnQ7XG5cbmNvbnN0IExpc3RJdGVtID0gc3R5bGVkLmRpdigpO1xuXG5jb25zdCBTdHlsZWRMaXN0SXRlbVRvcEJhciA9IHN0eWxlZChMaXN0SXRlbVRvcEJhcilgXG4gIGJhY2tncm91bmQtY29sb3I6ICR7Y29sb3JzLnRleHRGaWVsZEJvcmRlcn07XG5gO1xuXG5jb25zdCBOZXN0ZWRPYmplY3RMYWJlbCA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6ICR7cHJvcHMgPT4gKHByb3BzLmNvbGxhcHNlZCA/ICdibG9jaycgOiAnbm9uZScpfTtcbiAgYm9yZGVyLXRvcDogMDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gKHByb3BzLmVycm9yID8gY29sb3JzLmVycm9yVGV4dCA6ICdpbmhlcml0Jyl9O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAke2NvbG9ycy50ZXh0RmllbGRCb3JkZXJ9O1xuICBwYWRkaW5nOiAxM3B4O1xuICBib3JkZXItcmFkaXVzOiAwIDAgJHtsZW5ndGhzLmJvcmRlclJhZGl1c30gJHtsZW5ndGhzLmJvcmRlclJhZGl1c307XG5gO1xuXG5jb25zdCBzdHlsZVN0cmluZ3MgPSB7XG4gIGNvbGxhcHNlZE9iamVjdENvbnRyb2w6IGBcbiAgICBkaXNwbGF5OiBub25lO1xuICBgLFxuICBvYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXI6IGBcbiAgICBwYWRkaW5nOiAke2xlbmd0aHMub2JqZWN0V2lkZ2V0VG9wQmFyQ29udGFpbmVyUGFkZGluZ307XG4gIGAsXG59O1xuXG5jb25zdCBzdHlsZXMgPSB7XG4gIGxpc3RDb250cm9sSXRlbTogY3NzYFxuICAgIG1hcmdpbi10b3A6IDE4cHg7XG5cbiAgICAmOmZpcnN0LW9mLXR5cGUge1xuICAgICAgbWFyZ2luLXRvcDogMjZweDtcbiAgICB9XG4gIGAsXG4gIGxpc3RDb250cm9sSXRlbUNvbGxhcHNlZDogY3NzYFxuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICBgLFxufTtcblxuZnVuY3Rpb24gU29ydGFibGVMaXN0KHsgaXRlbXMsIGNoaWxkcmVuLCBvblNvcnRFbmQsIGtleXMgfSkge1xuICBjb25zdCBhY3RpdmF0aW9uQ29uc3RyYWludCA9IHsgZGlzdGFuY2U6IDQgfTtcbiAgY29uc3Qgc2Vuc29ycyA9IHVzZVNlbnNvcnMoXG4gICAgdXNlU2Vuc29yKE1vdXNlU2Vuc29yLCB7IGFjdGl2YXRpb25Db25zdHJhaW50IH0pLFxuICAgIHVzZVNlbnNvcihUb3VjaFNlbnNvciwgeyBhY3RpdmF0aW9uQ29uc3RyYWludCB9KSxcbiAgKTtcblxuICBmdW5jdGlvbiBoYW5kbGVTb3J0RW5kKHsgYWN0aXZlLCBvdmVyIH0pIHtcbiAgICBvblNvcnRFbmQoe1xuICAgICAgb2xkSW5kZXg6IGtleXMuaW5kZXhPZihhY3RpdmUuaWQpLFxuICAgICAgbmV3SW5kZXg6IGtleXMuaW5kZXhPZihvdmVyLmlkKSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdj5cbiAgICAgIDxEbmRDb250ZXh0XG4gICAgICAgIG1vZGlmaWVycz17W3Jlc3RyaWN0VG9QYXJlbnRFbGVtZW50XX1cbiAgICAgICAgY29sbGlzaW9uRGV0ZWN0aW9uPXtjbG9zZXN0Q2VudGVyfVxuICAgICAgICBzZW5zb3JzPXtzZW5zb3JzfVxuICAgICAgICBvbkRyYWdFbmQ9e2hhbmRsZVNvcnRFbmR9XG4gICAgICA+XG4gICAgICAgIDxTb3J0YWJsZUNvbnRleHQgaXRlbXM9e2l0ZW1zfT57Y2hpbGRyZW59PC9Tb3J0YWJsZUNvbnRleHQ+XG4gICAgICA8L0RuZENvbnRleHQ+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFNvcnRhYmxlTGlzdEl0ZW0ocHJvcHMpIHtcbiAgY29uc3QgeyBzZXROb2RlUmVmLCB0cmFuc2Zvcm0sIHRyYW5zaXRpb24gfSA9IHVzZVNvcnRhYmxlKHtcbiAgICBpZDogcHJvcHMuaWQsXG4gIH0pO1xuXG4gIGNvbnN0IHN0eWxlID0ge1xuICAgIHRyYW5zZm9ybTogQ1NTLlRyYW5zZm9ybS50b1N0cmluZyh0cmFuc2Zvcm0pLFxuICAgIHRyYW5zaXRpb24sXG4gIH07XG5cbiAgY29uc3QgeyBjb2xsYXBzZWQgfSA9IHByb3BzO1xuXG4gIHJldHVybiAoXG4gICAgPExpc3RJdGVtXG4gICAgICBzb3J0YWJsZVxuICAgICAgcmVmPXtzZXROb2RlUmVmfVxuICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgY3NzPXtbc3R5bGVzLmxpc3RDb250cm9sSXRlbSwgY29sbGFwc2VkICYmIHN0eWxlcy5saXN0Q29udHJvbEl0ZW1Db2xsYXBzZWRdfVxuICAgID5cbiAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICA8L0xpc3RJdGVtPlxuICApO1xufVxuXG5mdW5jdGlvbiBEcmFnSGFuZGxlKHsgY2hpbGRyZW4sIGlkIH0pIHtcbiAgY29uc3QgeyBhdHRyaWJ1dGVzLCBsaXN0ZW5lcnMgfSA9IHVzZVNvcnRhYmxlKHtcbiAgICBpZCxcbiAgfSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IHsuLi5hdHRyaWJ1dGVzfSB7Li4ubGlzdGVuZXJzfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuY29uc3QgdmFsdWVUeXBlcyA9IHtcbiAgU0lOR0xFOiAnU0lOR0xFJyxcbiAgTVVMVElQTEU6ICdNVUxUSVBMRScsXG4gIE1JWEVEOiAnTUlYRUQnLFxufTtcblxuZnVuY3Rpb24gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgbGFiZWwsIGl0ZW0pIHtcbiAgY29uc3QgZGF0YSA9IHN0cmluZ1RlbXBsYXRlLmFkZEZpbGVUZW1wbGF0ZUZpZWxkcyhcbiAgICBlbnRyeS5nZXQoJ3BhdGgnKSxcbiAgICBpdGVtLnNldCgnZmllbGRzLmxhYmVsJywgbGFiZWwpLFxuICApO1xuICByZXR1cm4gc3RyaW5nVGVtcGxhdGUuY29tcGlsZVN0cmluZ1RlbXBsYXRlKHN1bW1hcnksIG51bGwsICcnLCBkYXRhKTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVJdGVtKGZpZWxkLCBpdGVtKSB7XG4gIGlmICghTWFwLmlzTWFwKGl0ZW0pKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYCcke2ZpZWxkLmdldCgnbmFtZScpfScgZmllbGQgaXRlbSB2YWx1ZSB2YWx1ZSBzaG91bGQgYmUgYSBtYXAgYnV0IGlzIGEgJyR7dHlwZW9mIGl0ZW19J2AsXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIExhYmVsQ29tcG9uZW50KHsgZmllbGQsIGlzQWN0aXZlLCBoYXNFcnJvcnMsIHVuaXF1ZUZpZWxkSWQsIGlzRmllbGRPcHRpb25hbCwgdCB9KSB7XG4gIGNvbnN0IGxhYmVsID0gYCR7ZmllbGQuZ2V0KCdsYWJlbCcsIGZpZWxkLmdldCgnbmFtZScpKX1gO1xuICByZXR1cm4gKFxuICAgIDxGaWVsZExhYmVsIGlzQWN0aXZlPXtpc0FjdGl2ZX0gaGFzRXJyb3JzPXtoYXNFcnJvcnN9IGh0bWxGb3I9e3VuaXF1ZUZpZWxkSWR9PlxuICAgICAge2xhYmVsfSB7YCR7aXNGaWVsZE9wdGlvbmFsID8gYCAoJHt0KCdlZGl0b3IuZWRpdG9yQ29udHJvbC5maWVsZC5vcHRpb25hbCcpfSlgIDogJyd9YH1cbiAgICA8L0ZpZWxkTGFiZWw+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExpc3RDb250cm9sIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgY2hpbGRSZWZzID0ge307XG5cbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICBtZXRhZGF0YTogSW1tdXRhYmxlUHJvcFR5cGVzLm1hcCxcbiAgICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvbkNoYW5nZU9iamVjdDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvblZhbGlkYXRlT2JqZWN0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHZhbGlkYXRlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHZhbHVlOiBJbW11dGFibGVQcm9wVHlwZXMubGlzdCxcbiAgICBmaWVsZDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBmb3JJRDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjb250cm9sUmVmOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBtZWRpYVBhdGhzOiBJbW11dGFibGVQcm9wVHlwZXMubWFwLmlzUmVxdWlyZWQsXG4gICAgZ2V0QXNzZXQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25PcGVuTWVkaWFMaWJyYXJ5OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uQWRkQXNzZXQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25SZW1vdmVJbnNlcnRlZE1lZGlhOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGNsYXNzTmFtZVdyYXBwZXI6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBzZXRBY3RpdmVTdHlsZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBzZXRJbmFjdGl2ZVN0eWxlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGVkaXRvckNvbnRyb2w6IFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkLFxuICAgIHJlc29sdmVXaWRnZXQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgY2xlYXJGaWVsZEVycm9yczogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBmaWVsZHNFcnJvcnM6IEltbXV0YWJsZVByb3BUeXBlcy5tYXAuaXNSZXF1aXJlZCxcbiAgICBlbnRyeTogSW1tdXRhYmxlUHJvcFR5cGVzLm1hcC5pc1JlcXVpcmVkLFxuICAgIHQ6IFByb3BUeXBlcy5mdW5jLFxuICB9O1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgdmFsdWU6IExpc3QoKSxcbiAgICBwYXJlbnRJZHM6IFtdLFxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIGNvbnN0IHsgZmllbGQsIHZhbHVlIH0gPSBwcm9wcztcbiAgICBjb25zdCBsaXN0Q29sbGFwc2VkID0gZmllbGQuZ2V0KCdjb2xsYXBzZWQnLCB0cnVlKTtcbiAgICBjb25zdCBpdGVtc0NvbGxhcHNlZCA9ICh2YWx1ZSAmJiBBcnJheSh2YWx1ZS5zaXplKS5maWxsKGxpc3RDb2xsYXBzZWQpKSB8fCBbXTtcbiAgICBjb25zdCBrZXlzID0gKHZhbHVlICYmIEFycmF5LmZyb20oeyBsZW5ndGg6IHZhbHVlLnNpemUgfSwgKCkgPT4gdXVpZCgpKSkgfHwgW107XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgbGlzdENvbGxhcHNlZCxcbiAgICAgIGl0ZW1zQ29sbGFwc2VkLFxuICAgICAgdmFsdWU6IHRoaXMudmFsdWVUb1N0cmluZyh2YWx1ZSksXG4gICAgICBrZXlzLFxuICAgIH07XG4gIH1cblxuICB2YWx1ZVRvU3RyaW5nID0gdmFsdWUgPT4ge1xuICAgIGxldCBzdHJpbmdWYWx1ZTtcbiAgICBpZiAoTGlzdC5pc0xpc3QodmFsdWUpIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBzdHJpbmdWYWx1ZSA9IHZhbHVlLmpvaW4oJywnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgRXhwZWN0ZWQgTGlzdCB2YWx1ZSB0byBiZSBhbiBhcnJheSBidXQgcmVjZWl2ZWQgJyR7dmFsdWV9JyB3aXRoIHR5cGUgb2YgJyR7dHlwZW9mIHZhbHVlfScuIFBsZWFzZSBjaGVjayB0aGUgdmFsdWUgcHJvdmlkZWQgdG8gdGhlICcke3RoaXMucHJvcHMuZmllbGQuZ2V0KFxuICAgICAgICAgICduYW1lJyxcbiAgICAgICAgKX0nIGZpZWxkYCxcbiAgICAgICk7XG4gICAgICBzdHJpbmdWYWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBzdHJpbmdWYWx1ZS5yZXBsYWNlKC8sKFteXFxzXXwkKS9nLCAnLCAkMScpO1xuICB9O1xuXG4gIGdldFZhbHVlVHlwZSA9ICgpID0+IHtcbiAgICBjb25zdCB7IGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChmaWVsZC5nZXQoJ2ZpZWxkcycpKSB7XG4gICAgICByZXR1cm4gdmFsdWVUeXBlcy5NVUxUSVBMRTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkLmdldCgnZmllbGQnKSkge1xuICAgICAgcmV0dXJuIHZhbHVlVHlwZXMuU0lOR0xFO1xuICAgIH0gZWxzZSBpZiAoZmllbGQuZ2V0KFRZUEVTX0tFWSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZVR5cGVzLk1JWEVEO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH07XG5cbiAgdW5pcXVlRmllbGRJZCA9IHVuaXF1ZUlkKGAke3RoaXMucHJvcHMuZmllbGQuZ2V0KCduYW1lJyl9LWZpZWxkLWApO1xuICAvKipcbiAgICogQWx3YXlzIHVwZGF0ZSBzbyB0aGF0IGVhY2ggbmVzdGVkIHdpZGdldCBoYXMgdGhlIG9wdGlvbiB0byB1cGRhdGUuIFRoaXMgaXNcbiAgICogcmVxdWlyZWQgYmVjYXVzZSBDb250cm9sSE9DIHByb3ZpZGVzIGEgZGVmYXVsdCBgc2hvdWxkQ29tcG9uZW50VXBkYXRlYFxuICAgKiB3aGljaCBvbmx5IHVwZGF0ZXMgaWYgdGhlIHZhbHVlIGNoYW5nZXMsIGJ1dCBldmVyeSB3aWRnZXQgbXVzdCBiZSBhbGxvd2VkXG4gICAqIHRvIG92ZXJyaWRlIHRoaXMuXG4gICAqL1xuICBzaG91bGRDb21wb25lbnRVcGRhdGUoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBoYW5kbGVDaGFuZ2UgPSBlID0+IHtcbiAgICBjb25zdCB7IG9uQ2hhbmdlIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy5zdGF0ZS52YWx1ZTtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IGUudGFyZ2V0LnZhbHVlLnRyaW0oKTtcbiAgICBjb25zdCBsaXN0VmFsdWUgPSBuZXdWYWx1ZSA/IG5ld1ZhbHVlLnNwbGl0KCcsJykgOiBbXTtcbiAgICBpZiAobmV3VmFsdWUubWF0Y2goLywkLykgJiYgb2xkVmFsdWUubWF0Y2goLywgJC8pKSB7XG4gICAgICBsaXN0VmFsdWUucG9wKCk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPSB0aGlzLnZhbHVlVG9TdHJpbmcobGlzdFZhbHVlKTtcbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHBhcnNlZFZhbHVlIH0pO1xuICAgIG9uQ2hhbmdlKExpc3QobGlzdFZhbHVlLm1hcCh2YWwgPT4gdmFsLnRyaW0oKSkpKTtcbiAgfTtcblxuICBoYW5kbGVGb2N1cyA9ICgpID0+IHtcbiAgICB0aGlzLnByb3BzLnNldEFjdGl2ZVN0eWxlKCk7XG4gIH07XG5cbiAgaGFuZGxlQmx1ciA9IGUgPT4ge1xuICAgIGNvbnN0IGxpc3RWYWx1ZSA9IGUudGFyZ2V0LnZhbHVlXG4gICAgICAuc3BsaXQoJywnKVxuICAgICAgLm1hcChlbCA9PiBlbC50cmltKCkpXG4gICAgICAuZmlsdGVyKGVsID0+IGVsKTtcbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHRoaXMudmFsdWVUb1N0cmluZyhsaXN0VmFsdWUpIH0pO1xuICAgIHRoaXMucHJvcHMuc2V0SW5hY3RpdmVTdHlsZSgpO1xuICB9O1xuXG4gIGhhbmRsZUFkZCA9IGUgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHBhcnNlZFZhbHVlID1cbiAgICAgIHRoaXMuZ2V0VmFsdWVUeXBlKCkgPT09IHZhbHVlVHlwZXMuU0lOR0xFXG4gICAgICAgID8gdGhpcy5zaW5nbGVEZWZhdWx0KClcbiAgICAgICAgOiBmcm9tSlModGhpcy5tdWx0aXBsZURlZmF1bHQoZmllbGQuZ2V0KCdmaWVsZHMnKSkpO1xuICAgIHRoaXMuYWRkSXRlbShwYXJzZWRWYWx1ZSk7XG4gIH07XG5cbiAgc2luZ2xlRGVmYXVsdCA9ICgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5maWVsZC5nZXRJbihbJ2ZpZWxkJywgJ2RlZmF1bHQnXSwgbnVsbCk7XG4gIH07XG5cbiAgbXVsdGlwbGVEZWZhdWx0ID0gZmllbGRzID0+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KGZpZWxkcyk7XG4gIH07XG5cbiAgaGFuZGxlQWRkVHlwZSA9ICh0eXBlLCB0eXBlS2V5KSA9PiB7XG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPSBmcm9tSlModGhpcy5taXhlZERlZmF1bHQodHlwZUtleSwgdHlwZSkpO1xuICAgIHRoaXMuYWRkSXRlbShwYXJzZWRWYWx1ZSk7XG4gIH07XG5cbiAgbWl4ZWREZWZhdWx0ID0gKHR5cGVLZXksIHR5cGUpID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZFR5cGUgPSB0aGlzLnByb3BzLmZpZWxkLmdldChUWVBFU19LRVkpLmZpbmQoZiA9PiBmLmdldCgnbmFtZScpID09PSB0eXBlKTtcbiAgICBjb25zdCBmaWVsZHMgPSBzZWxlY3RlZFR5cGUuZ2V0KCdmaWVsZHMnKSB8fCBbc2VsZWN0ZWRUeXBlLmdldCgnZmllbGQnKV07XG5cbiAgICByZXR1cm4gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KGZpZWxkcywgeyBbdHlwZUtleV06IHR5cGUgfSk7XG4gIH07XG5cbiAgZ2V0RmllbGRzRGVmYXVsdCA9IChmaWVsZHMsIGluaXRpYWxWYWx1ZSA9IHt9KSA9PiB7XG4gICAgcmV0dXJuIGZpZWxkcy5yZWR1Y2UoKGFjYywgaXRlbSkgPT4ge1xuICAgICAgY29uc3Qgc3ViZmllbGRzID0gaXRlbS5nZXQoJ2ZpZWxkJykgfHwgaXRlbS5nZXQoJ2ZpZWxkcycpO1xuICAgICAgY29uc3Qgb2JqZWN0ID0gaXRlbS5nZXQoJ3dpZGdldCcpID09ICdvYmplY3QnO1xuICAgICAgY29uc3QgbmFtZSA9IGl0ZW0uZ2V0KCduYW1lJyk7XG4gICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSBpdGVtLmdldCgnZGVmYXVsdCcsIG51bGwpO1xuXG4gICAgICBpZiAoTGlzdC5pc0xpc3Qoc3ViZmllbGRzKSAmJiBvYmplY3QpIHtcbiAgICAgICAgY29uc3Qgc3ViRGVmYXVsdFZhbHVlID0gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KHN1YmZpZWxkcyk7XG4gICAgICAgICFpc0VtcHR5KHN1YkRlZmF1bHRWYWx1ZSkgJiYgKGFjY1tuYW1lXSA9IHN1YkRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9XG5cbiAgICAgIGlmIChNYXAuaXNNYXAoc3ViZmllbGRzKSAmJiBvYmplY3QpIHtcbiAgICAgICAgY29uc3Qgc3ViRGVmYXVsdFZhbHVlID0gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KFtzdWJmaWVsZHNdKTtcbiAgICAgICAgIWlzRW1wdHkoc3ViRGVmYXVsdFZhbHVlKSAmJiAoYWNjW25hbWVdID0gc3ViRGVmYXVsdFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH1cblxuICAgICAgaWYgKGRlZmF1bHRWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBhY2NbbmFtZV0gPSBkZWZhdWx0VmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgaW5pdGlhbFZhbHVlKTtcbiAgfTtcblxuICBhZGRJdGVtID0gcGFyc2VkVmFsdWUgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWUsIG9uQ2hhbmdlLCBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBhZGRUb1RvcCA9IGZpZWxkLmdldCgnYWRkX3RvX3RvcCcsIGZhbHNlKTtcblxuICAgIGNvbnN0IGl0ZW1LZXkgPSB1dWlkKCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBpdGVtc0NvbGxhcHNlZDogYWRkVG9Ub3BcbiAgICAgICAgPyBbZmFsc2UsIC4uLnRoaXMuc3RhdGUuaXRlbXNDb2xsYXBzZWRdXG4gICAgICAgIDogWy4uLnRoaXMuc3RhdGUuaXRlbXNDb2xsYXBzZWQsIGZhbHNlXSxcbiAgICAgIGtleXM6IGFkZFRvVG9wID8gW2l0ZW1LZXksIC4uLnRoaXMuc3RhdGUua2V5c10gOiBbLi4udGhpcy5zdGF0ZS5rZXlzLCBpdGVtS2V5XSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGxpc3RWYWx1ZSA9IHZhbHVlIHx8IExpc3QoKTtcbiAgICBpZiAoYWRkVG9Ub3ApIHtcbiAgICAgIG9uQ2hhbmdlKGxpc3RWYWx1ZS51bnNoaWZ0KHBhcnNlZFZhbHVlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uQ2hhbmdlKGxpc3RWYWx1ZS5wdXNoKHBhcnNlZFZhbHVlKSk7XG4gICAgfVxuICB9O1xuXG4gIHByb2Nlc3NDb250cm9sUmVmID0gcmVmID0+IHtcbiAgICBpZiAoIXJlZikgcmV0dXJuO1xuICAgIGNvbnN0IHtcbiAgICAgIHByb3BzOiB7IHZhbGlkYXRpb25LZXk6IGtleSB9LFxuICAgIH0gPSByZWY7XG4gICAgdGhpcy5jaGlsZFJlZnNba2V5XSA9IHJlZjtcbiAgICB0aGlzLnByb3BzLmNvbnRyb2xSZWY/Lih0aGlzKTtcbiAgfTtcblxuICB2YWxpZGF0ZSA9ICgpID0+IHtcbiAgICAvLyBGaXJzdCB2YWxpZGF0ZSBjaGlsZCB3aWRnZXRzIGlmIHRoaXMgaXMgYSBjb21wbGV4IGxpc3RcbiAgICBjb25zdCBoYXNDaGlsZFdpZGdldHMgPSB0aGlzLmdldFZhbHVlVHlwZSgpICYmIE9iamVjdC5rZXlzKHRoaXMuY2hpbGRSZWZzKS5sZW5ndGggPiAwO1xuICAgIGlmIChoYXNDaGlsZFdpZGdldHMpIHtcbiAgICAgIE9iamVjdC52YWx1ZXModGhpcy5jaGlsZFJlZnMpLmZvckVhY2god2lkZ2V0ID0+IHtcbiAgICAgICAgd2lkZ2V0Py52YWxpZGF0ZT8uKCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9wcy52YWxpZGF0ZSgpO1xuICAgIH1cbiAgICB0aGlzLnByb3BzLm9uVmFsaWRhdGVPYmplY3QodGhpcy5wcm9wcy5mb3JJRCwgdGhpcy52YWxpZGF0ZVNpemUoKSk7XG4gIH07XG5cbiAgdmFsaWRhdGVTaXplID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgZmllbGQsIHZhbHVlLCB0IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG1pbiA9IGZpZWxkLmdldCgnbWluJyk7XG4gICAgY29uc3QgbWF4ID0gZmllbGQuZ2V0KCdtYXgnKTtcbiAgICBjb25zdCByZXF1aXJlZCA9IGZpZWxkLmdldCgncmVxdWlyZWQnLCB0cnVlKTtcblxuICAgIGlmICghcmVxdWlyZWQgJiYgIXZhbHVlPy5zaXplKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgZXJyb3IgPSB2YWxpZGF0aW9ucy52YWxpZGF0ZU1pbk1heChcbiAgICAgIHQsXG4gICAgICBmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpLFxuICAgICAgdmFsdWUsXG4gICAgICBtaW4sXG4gICAgICBtYXgsXG4gICAgKTtcblxuICAgIHJldHVybiBlcnJvciA/IFtlcnJvcl0gOiBbXTtcbiAgfTtcblxuICAvKipcbiAgICogSW4gY2FzZSB0aGUgYG9uQ2hhbmdlT2JqZWN0YCBmdW5jdGlvbiBpcyBmcm96ZW4gYnkgYSBjaGlsZCB3aWRnZXQgaW1wbGVtZW50YXRpb24sXG4gICAqIGUuZy4gd2hlbiBkZWJvdW5jZWQsIGFsd2F5cyBnZXQgdGhlIGxhdGVzdCBvYmplY3QgdmFsdWUgaW5zdGVhZCBvZiB1c2luZ1xuICAgKiBgdGhpcy5wcm9wcy52YWx1ZWAgZGlyZWN0bHkuXG4gICAqL1xuICBnZXRPYmplY3RWYWx1ZSA9IGlkeCA9PiB0aGlzLnByb3BzLnZhbHVlLmdldChpZHgpIHx8IE1hcCgpO1xuXG4gIGhhbmRsZUNoYW5nZUZvcihpbmRleCkge1xuICAgIHJldHVybiAoZiwgbmV3VmFsdWUsIG5ld01ldGFkYXRhKSA9PiB7XG4gICAgICBjb25zdCB7IHZhbHVlLCBtZXRhZGF0YSwgb25DaGFuZ2UsIGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBmaWVsZC5nZXQoJ25hbWUnKTtcbiAgICAgIGNvbnN0IGxpc3RGaWVsZE9iamVjdFdpZGdldCA9IGZpZWxkLmdldEluKFsnZmllbGQnLCAnd2lkZ2V0J10pID09PSAnb2JqZWN0JztcbiAgICAgIGNvbnN0IHdpdGhOYW1lS2V5ID1cbiAgICAgICAgdGhpcy5nZXRWYWx1ZVR5cGUoKSAhPT0gdmFsdWVUeXBlcy5TSU5HTEUgfHxcbiAgICAgICAgKHRoaXMuZ2V0VmFsdWVUeXBlKCkgPT09IHZhbHVlVHlwZXMuU0lOR0xFICYmIGxpc3RGaWVsZE9iamVjdFdpZGdldCk7XG4gICAgICBjb25zdCBuZXdPYmplY3RWYWx1ZSA9IHdpdGhOYW1lS2V5XG4gICAgICAgID8gdGhpcy5nZXRPYmplY3RWYWx1ZShpbmRleCkuc2V0KGYuZ2V0KCduYW1lJyksIG5ld1ZhbHVlKVxuICAgICAgICA6IG5ld1ZhbHVlO1xuICAgICAgY29uc3QgcGFyc2VkTWV0YWRhdGEgPSB7XG4gICAgICAgIFtjb2xsZWN0aW9uTmFtZV06IE9iamVjdC5hc3NpZ24obWV0YWRhdGEgPyBtZXRhZGF0YS50b0pTKCkgOiB7fSwgbmV3TWV0YWRhdGEgfHwge30pLFxuICAgICAgfTtcbiAgICAgIG9uQ2hhbmdlKHZhbHVlLnNldChpbmRleCwgbmV3T2JqZWN0VmFsdWUpLCBwYXJzZWRNZXRhZGF0YSk7XG4gICAgfTtcbiAgfVxuXG4gIGhhbmRsZVJlbW92ZSA9IChpbmRleCwgZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3Qge1xuICAgICAgdmFsdWUsXG4gICAgICBtZXRhZGF0YSxcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgZmllbGQsXG4gICAgICBjbGVhckZpZWxkRXJyb3JzLFxuICAgICAgb25WYWxpZGF0ZU9iamVjdCxcbiAgICAgIGZvcklELFxuICAgICAgZmllbGRzRXJyb3JzLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBmaWVsZC5nZXQoJ25hbWUnKTtcbiAgICBjb25zdCBpc1NpbmdsZUZpZWxkID0gdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5TSU5HTEU7XG5cbiAgICBjb25zdCBtZXRhZGF0YVJlbW92ZVBhdGggPSBpc1NpbmdsZUZpZWxkID8gdmFsdWUuZ2V0KGluZGV4KSA6IHZhbHVlLmdldChpbmRleCkudmFsdWVTZXEoKTtcbiAgICBjb25zdCBwYXJzZWRNZXRhZGF0YSA9XG4gICAgICBtZXRhZGF0YSAmJiAhbWV0YWRhdGEuaXNFbXB0eSgpXG4gICAgICAgID8geyBbY29sbGVjdGlvbk5hbWVdOiBtZXRhZGF0YS5yZW1vdmVJbihtZXRhZGF0YVJlbW92ZVBhdGgpIH1cbiAgICAgICAgOiBtZXRhZGF0YTtcblxuICAgIC8vIEdldCB0aGUga2V5IG9mIHRoZSBpdGVtIGJlaW5nIHJlbW92ZWRcbiAgICBjb25zdCByZW1vdmVkS2V5ID0gdGhpcy5zdGF0ZS5rZXlzW2luZGV4XTtcblxuICAgIC8vIFVwZGF0ZSBzdGF0ZSB3aGlsZSBwcmVzZXJ2aW5nIGtleXMgZm9yIHJlbWFpbmluZyBpdGVtc1xuICAgIGNvbnN0IG5ld0tleXMgPSBbLi4udGhpcy5zdGF0ZS5rZXlzXTtcbiAgICBuZXdLZXlzLnNwbGljZShpbmRleCwgMSk7XG4gICAgaXRlbXNDb2xsYXBzZWQuc3BsaWNlKGluZGV4LCAxKTtcblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXNDb2xsYXBzZWQ6IFsuLi5pdGVtc0NvbGxhcHNlZF0sXG4gICAgICBrZXlzOiBuZXdLZXlzLFxuICAgIH0pO1xuXG4gICAgLy8gQ2xlYXIgdGhlIHJlZiBmb3IgdGhlIHJlbW92ZWQgaXRlbVxuICAgIGRlbGV0ZSB0aGlzLmNoaWxkUmVmc1tyZW1vdmVkS2V5XTtcblxuICAgIGNvbnN0IG5ld1ZhbHVlID0gdmFsdWUuZGVsZXRlKGluZGV4KTtcblxuICAgIC8vIENsZWFyIGVycm9ycyBmb3IgdGhlIHJlbW92ZWQgaXRlbSBhbmQgaXRzIGNoaWxkcmVuXG4gICAgaWYgKGZpZWxkc0Vycm9ycykge1xuICAgICAgT2JqZWN0LmVudHJpZXMoZmllbGRzRXJyb3JzLnRvSlMoKSkuZm9yRWFjaCgoW2ZpZWxkSWQsIGVycm9yc10pID0+IHtcbiAgICAgICAgaWYgKGVycm9ycy5zb21lKGVyciA9PiBlcnIucGFyZW50SWRzPy5pbmNsdWRlcyhyZW1vdmVkS2V5KSkpIHtcbiAgICAgICAgICBjbGVhckZpZWxkRXJyb3JzKGZpZWxkSWQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBJZiBsaXN0IGlzIGVtcHR5LCBtYXJrIGl0IGFzIHZhbGlkXG4gICAgaWYgKG5ld1ZhbHVlLnNpemUgPT09IDApIHtcbiAgICAgIGNsZWFyRmllbGRFcnJvcnMoZm9ySUQpO1xuICAgICAgb25WYWxpZGF0ZU9iamVjdChmb3JJRCwgW10pO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSB0aGUgdmFsdWUgbGFzdCB0byBlbnN1cmUgYWxsIGVycm9yIHN0YXRlcyBhcmUgY2xlYXJlZFxuICAgIG9uQ2hhbmdlKG5ld1ZhbHVlLCBwYXJzZWRNZXRhZGF0YSk7XG4gIH07XG5cbiAgaGFuZGxlSXRlbUNvbGxhcHNlVG9nZ2xlID0gKGluZGV4LCBldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBuZXdJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLm1hcCgoY29sbGFwc2VkLCBpdGVtSW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCA9PT0gaXRlbUluZGV4KSB7XG4gICAgICAgIHJldHVybiAhY29sbGFwc2VkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbGxhcHNlZDtcbiAgICB9KTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGl0ZW1zQ29sbGFwc2VkOiBuZXdJdGVtc0NvbGxhcHNlZCxcbiAgICB9KTtcbiAgfTtcblxuICBoYW5kbGVDb2xsYXBzZUFsbFRvZ2dsZSA9IGUgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IHZhbHVlLCBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkLCBsaXN0Q29sbGFwc2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IG1pbmltaXplQ29sbGFwc2VkSXRlbXMgPSBmaWVsZC5nZXQoJ21pbmltaXplX2NvbGxhcHNlZCcsIGZhbHNlKTtcbiAgICBjb25zdCBsaXN0Q29sbGFwc2VkQnlEZWZhdWx0ID0gZmllbGQuZ2V0KCdjb2xsYXBzZWQnLCB0cnVlKTtcbiAgICBjb25zdCBhbGxJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLmV2ZXJ5KHZhbCA9PiB2YWwgPT09IHRydWUpO1xuXG4gICAgaWYgKG1pbmltaXplQ29sbGFwc2VkSXRlbXMpIHtcbiAgICAgIGxldCB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZDtcbiAgICAgIC8vIE9ubHkgYWxsb3cgY29sbGFwc2luZyBhbGwgaXRlbXMgaW4gdGhpcyBtb2RlIGJ1dCBub3Qgb3BlbmluZyBhbGwgYXQgb25jZVxuICAgICAgaWYgKCFsaXN0Q29sbGFwc2VkIHx8ICFsaXN0Q29sbGFwc2VkQnlEZWZhdWx0KSB7XG4gICAgICAgIHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCA9IEFycmF5KHZhbHVlLnNpemUpLmZpbGwoIWxpc3RDb2xsYXBzZWQpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGxpc3RDb2xsYXBzZWQ6ICFsaXN0Q29sbGFwc2VkLCBpdGVtc0NvbGxhcHNlZDogdXBkYXRlZEl0ZW1zQ29sbGFwc2VkIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgaXRlbXNDb2xsYXBzZWQ6IEFycmF5KHZhbHVlLnNpemUpLmZpbGwoIWFsbEl0ZW1zQ29sbGFwc2VkKSB9KTtcbiAgICB9XG4gIH07XG5cbiAgb2JqZWN0TGFiZWwoaXRlbSkge1xuICAgIGNvbnN0IHsgZmllbGQsIGVudHJ5IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHZhbHVlVHlwZSA9IHRoaXMuZ2V0VmFsdWVUeXBlKCk7XG4gICAgc3dpdGNoICh2YWx1ZVR5cGUpIHtcbiAgICAgIGNhc2UgdmFsdWVUeXBlcy5NSVhFRDoge1xuICAgICAgICBpZiAoIXZhbGlkYXRlSXRlbShmaWVsZCwgaXRlbSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXRlbVR5cGUgPSBnZXRUeXBlZEZpZWxkRm9yVmFsdWUoZmllbGQsIGl0ZW0pO1xuICAgICAgICBjb25zdCBsYWJlbCA9IGl0ZW1UeXBlLmdldCgnbGFiZWwnLCBpdGVtVHlwZS5nZXQoJ25hbWUnKSk7XG4gICAgICAgIC8vIGVhY2ggdHlwZSBjYW4gaGF2ZSBpdHMgb3duIHN1bW1hcnksIGJ1dCBkZWZhdWx0IHRvIHRoZSBsaXN0IHN1bW1hcnkgaWYgZXhpc3RzXG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBpdGVtVHlwZS5nZXQoJ3N1bW1hcnknLCBmaWVsZC5nZXQoJ3N1bW1hcnknKSk7XG4gICAgICAgIGNvbnN0IGxhYmVsUmV0dXJuID0gc3VtbWFyeSA/IGhhbmRsZVN1bW1hcnkoc3VtbWFyeSwgZW50cnksIGxhYmVsLCBpdGVtKSA6IGxhYmVsO1xuICAgICAgICByZXR1cm4gbGFiZWxSZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlIHZhbHVlVHlwZXMuU0lOR0xFOiB7XG4gICAgICAgIGNvbnN0IHNpbmdsZUZpZWxkID0gZmllbGQuZ2V0KCdmaWVsZCcpO1xuICAgICAgICBjb25zdCBsYWJlbCA9IHNpbmdsZUZpZWxkLmdldCgnbGFiZWwnLCBzaW5nbGVGaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBmaWVsZC5nZXQoJ3N1bW1hcnknKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGZyb21KUyh7IFtzaW5nbGVGaWVsZC5nZXQoJ25hbWUnKV06IGl0ZW0gfSk7XG4gICAgICAgIGNvbnN0IGxhYmVsUmV0dXJuID0gc3VtbWFyeSA/IGhhbmRsZVN1bW1hcnkoc3VtbWFyeSwgZW50cnksIGxhYmVsLCBkYXRhKSA6IGxhYmVsO1xuICAgICAgICByZXR1cm4gbGFiZWxSZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlIHZhbHVlVHlwZXMuTVVMVElQTEU6IHtcbiAgICAgICAgaWYgKCF2YWxpZGF0ZUl0ZW0oZmllbGQsIGl0ZW0pKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG11bHRpRmllbGRzID0gZmllbGQuZ2V0KCdmaWVsZHMnKTtcbiAgICAgICAgY29uc3QgbGFiZWxGaWVsZCA9IG11bHRpRmllbGRzICYmIG11bHRpRmllbGRzLmZpcnN0KCk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gaXRlbS5nZXQobGFiZWxGaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBmaWVsZC5nZXQoJ3N1bW1hcnknKTtcbiAgICAgICAgY29uc3QgbGFiZWxSZXR1cm4gPSBzdW1tYXJ5ID8gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgdmFsdWUsIGl0ZW0pIDogdmFsdWU7XG4gICAgICAgIHJldHVybiAobGFiZWxSZXR1cm4gfHwgYE5vICR7bGFiZWxGaWVsZC5nZXQoJ25hbWUnKX1gKS50b1N0cmluZygpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBvblNvcnRFbmQgPSAoeyBvbGRJbmRleCwgbmV3SW5kZXggfSkgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCwga2V5cyB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIC8vIFVwZGF0ZSB2YWx1ZVxuICAgIGNvbnN0IGl0ZW0gPSB2YWx1ZS5nZXQob2xkSW5kZXgpO1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gdmFsdWUuZGVsZXRlKG9sZEluZGV4KS5pbnNlcnQobmV3SW5kZXgsIGl0ZW0pO1xuICAgIHRoaXMucHJvcHMub25DaGFuZ2UobmV3VmFsdWUpO1xuXG4gICAgLy8gVXBkYXRlIGNvbGxhcHNpbmdcbiAgICBjb25zdCBjb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZFtvbGRJbmRleF07XG4gICAgaXRlbXNDb2xsYXBzZWQuc3BsaWNlKG9sZEluZGV4LCAxKTtcbiAgICBjb25zdCB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgPSBbLi4uaXRlbXNDb2xsYXBzZWRdO1xuICAgIHVwZGF0ZWRJdGVtc0NvbGxhcHNlZC5zcGxpY2UobmV3SW5kZXgsIDAsIGNvbGxhcHNlZCk7XG5cbiAgICAvLyBNb3ZlIGtleXMgdG8gbWFpbnRhaW4gcmVsYXRpb25zaGlwc1xuICAgIGNvbnN0IG1vdmVkS2V5ID0ga2V5c1tvbGRJbmRleF07XG4gICAgY29uc3QgdXBkYXRlZEtleXMgPSBbLi4ua2V5c107XG4gICAgdXBkYXRlZEtleXMuc3BsaWNlKG9sZEluZGV4LCAxKTtcbiAgICB1cGRhdGVkS2V5cy5zcGxpY2UobmV3SW5kZXgsIDAsIG1vdmVkS2V5KTtcblxuICAgIHRoaXMuc2V0U3RhdGUoeyBpdGVtc0NvbGxhcHNlZDogdXBkYXRlZEl0ZW1zQ29sbGFwc2VkLCBrZXlzOiB1cGRhdGVkS2V5cyB9KTtcbiAgfTtcblxuICBoYXNFcnJvciA9IGluZGV4ID0+IHtcbiAgICBjb25zdCB7IGZpZWxkc0Vycm9ycyB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoZmllbGRzRXJyb3JzICYmIGZpZWxkc0Vycm9ycy5zaXplID4gMCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZmllbGRzRXJyb3JzLnRvSlMoKSkuc29tZShhcnIgPT5cbiAgICAgICAgYXJyLnNvbWUoZXJyID0+IGVyci5wYXJlbnRJZHMgJiYgZXJyLnBhcmVudElkcy5pbmNsdWRlcyh0aGlzLnN0YXRlLmtleXNbaW5kZXhdKSksXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICBmb2N1cyhwYXRoKSB7XG4gICAgY29uc3QgW2luZGV4LCAuLi5yZW1haW5pbmdQYXRoXSA9IHBhdGguc3BsaXQoJy4nKTtcblxuICAgIGlmICh0aGlzLnN0YXRlLmxpc3RDb2xsYXBzZWQgfHwgdGhpcy5zdGF0ZS5pdGVtc0NvbGxhcHNlZFtpbmRleF0pIHtcbiAgICAgIGNvbnN0IG5ld0l0ZW1zQ29sbGFwc2VkID0gWy4uLnRoaXMuc3RhdGUuaXRlbXNDb2xsYXBzZWRdO1xuICAgICAgbmV3SXRlbXNDb2xsYXBzZWRbaW5kZXhdID0gZmFsc2U7XG4gICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICB7XG4gICAgICAgICAgbGlzdENvbGxhcHNlZDogZmFsc2UsXG4gICAgICAgICAgaXRlbXNDb2xsYXBzZWQ6IG5ld0l0ZW1zQ29sbGFwc2VkLFxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5zdGF0ZS5rZXlzW2luZGV4XTtcbiAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jaGlsZFJlZnNba2V5XTtcbiAgICAgICAgICBpZiAoY29udHJvbD8uZm9jdXMpIHtcbiAgICAgICAgICAgIGNvbnRyb2wuZm9jdXMocmVtYWluaW5nUGF0aC5qb2luKCcuJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuc3RhdGUua2V5c1tpbmRleF07XG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jaGlsZFJlZnNba2V5XTtcbiAgICAgIGlmIChjb250cm9sPy5mb2N1cykge1xuICAgICAgICBjb250cm9sLmZvY3VzKHJlbWFpbmluZ1BhdGguam9pbignLicpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZGlzcGxheS1uYW1lXG4gIHJlbmRlckl0ZW0gPSAoaXRlbSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjbGFzc05hbWVXcmFwcGVyLFxuICAgICAgZWRpdG9yQ29udHJvbCxcbiAgICAgIG9uVmFsaWRhdGVPYmplY3QsXG4gICAgICBtZXRhZGF0YSxcbiAgICAgIGNsZWFyRmllbGRFcnJvcnMsXG4gICAgICBmaWVsZHNFcnJvcnMsXG4gICAgICBjb250cm9sUmVmLFxuICAgICAgcmVzb2x2ZVdpZGdldCxcbiAgICAgIHBhcmVudElkcyxcbiAgICAgIGZvcklELFxuICAgICAgdCxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQsIGtleXMgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgY29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWRbaW5kZXhdO1xuICAgIGNvbnN0IGtleSA9IGtleXNbaW5kZXhdO1xuICAgIGxldCBmaWVsZCA9IHRoaXMucHJvcHMuZmllbGQ7XG4gICAgY29uc3QgaGFzRXJyb3IgPSB0aGlzLmhhc0Vycm9yKGluZGV4KTtcbiAgICBjb25zdCBpc1ZhcmlhYmxlVHlwZXNMaXN0ID0gdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5NSVhFRDtcbiAgICBpZiAoaXNWYXJpYWJsZVR5cGVzTGlzdCkge1xuICAgICAgZmllbGQgPSBnZXRUeXBlZEZpZWxkRm9yVmFsdWUoZmllbGQsIGl0ZW0pO1xuICAgICAgaWYgKCFmaWVsZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJFcnJvbmVvdXNUeXBlZEl0ZW0oaW5kZXgsIGl0ZW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8U29ydGFibGVMaXN0SXRlbVxuICAgICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBjb2xsYXBzZWQgJiYgc3R5bGVzLmxpc3RDb250cm9sSXRlbUNvbGxhcHNlZF19XG4gICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIGlkPXtrZXl9XG4gICAgICAgIGtleXM9e2tleXN9XG4gICAgICA+XG4gICAgICAgIHtpc1ZhcmlhYmxlVHlwZXNMaXN0ICYmIChcbiAgICAgICAgICA8TGFiZWxDb21wb25lbnRcbiAgICAgICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgICAgIGlzQWN0aXZlPXtmYWxzZX1cbiAgICAgICAgICAgIGhhc0Vycm9ycz17aGFzRXJyb3J9XG4gICAgICAgICAgICB1bmlxdWVGaWVsZElkPXt0aGlzLnVuaXF1ZUZpZWxkSWR9XG4gICAgICAgICAgICBpc0ZpZWxkT3B0aW9uYWw9e2ZpZWxkLmdldCgncmVxdWlyZWQnKSA9PT0gZmFsc2V9XG4gICAgICAgICAgICB0PXt0fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIDxTdHlsZWRMaXN0SXRlbVRvcEJhclxuICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICAgIG9uQ29sbGFwc2VUb2dnbGU9e3BhcnRpYWwodGhpcy5oYW5kbGVJdGVtQ29sbGFwc2VUb2dnbGUsIGluZGV4KX1cbiAgICAgICAgICBkcmFnSGFuZGxlPXtEcmFnSGFuZGxlfVxuICAgICAgICAgIGlkPXtrZXl9XG4gICAgICAgICAgb25SZW1vdmU9e3BhcnRpYWwodGhpcy5oYW5kbGVSZW1vdmUsIGluZGV4KX1cbiAgICAgICAgICBkYXRhLXRlc3RpZD17YHN0eWxlZC1saXN0LWl0ZW0tdG9wLWJhci0ke2tleX1gfVxuICAgICAgICAvPlxuICAgICAgICA8TmVzdGVkT2JqZWN0TGFiZWwgY29sbGFwc2VkPXtjb2xsYXBzZWR9IGVycm9yPXtoYXNFcnJvcn0+XG4gICAgICAgICAge3RoaXMub2JqZWN0TGFiZWwoaXRlbSl9XG4gICAgICAgIDwvTmVzdGVkT2JqZWN0TGFiZWw+XG4gICAgICAgIDxDbGFzc05hbWVzPlxuICAgICAgICAgIHsoeyBjc3MsIGN4IH0pID0+IChcbiAgICAgICAgICAgIDxPYmplY3RDb250cm9sXG4gICAgICAgICAgICAgIGNsYXNzTmFtZVdyYXBwZXI9e2N4KGNsYXNzTmFtZVdyYXBwZXIsIHtcbiAgICAgICAgICAgICAgICBbY3NzYFxuICAgICAgICAgICAgICAgICAgJHtzdHlsZVN0cmluZ3MuY29sbGFwc2VkT2JqZWN0Q29udHJvbH07XG4gICAgICAgICAgICAgICAgYF06IGNvbGxhcHNlZCxcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIHZhbHVlPXtpdGVtfVxuICAgICAgICAgICAgICBmaWVsZD17ZmllbGR9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlT2JqZWN0PXt0aGlzLmhhbmRsZUNoYW5nZUZvcihpbmRleCl9XG4gICAgICAgICAgICAgIGVkaXRvckNvbnRyb2w9e2VkaXRvckNvbnRyb2x9XG4gICAgICAgICAgICAgIHJlc29sdmVXaWRnZXQ9e3Jlc29sdmVXaWRnZXR9XG4gICAgICAgICAgICAgIG1ldGFkYXRhPXttZXRhZGF0YX1cbiAgICAgICAgICAgICAgZm9yTGlzdFxuICAgICAgICAgICAgICBvblZhbGlkYXRlT2JqZWN0PXtvblZhbGlkYXRlT2JqZWN0fVxuICAgICAgICAgICAgICBjbGVhckZpZWxkRXJyb3JzPXtjbGVhckZpZWxkRXJyb3JzfVxuICAgICAgICAgICAgICBmaWVsZHNFcnJvcnM9e2ZpZWxkc0Vycm9yc31cbiAgICAgICAgICAgICAgcmVmPXt0aGlzLnByb2Nlc3NDb250cm9sUmVmfVxuICAgICAgICAgICAgICBjb250cm9sUmVmPXtjb250cm9sUmVmfVxuICAgICAgICAgICAgICB2YWxpZGF0aW9uS2V5PXtrZXl9XG4gICAgICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICAgICAgICBkYXRhLXRlc3RpZD17YG9iamVjdC1jb250cm9sLSR7a2V5fWB9XG4gICAgICAgICAgICAgIGhhc0Vycm9yPXtoYXNFcnJvcn1cbiAgICAgICAgICAgICAgcGFyZW50SWRzPXtbLi4ucGFyZW50SWRzLCBmb3JJRCwga2V5XX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9DbGFzc05hbWVzPlxuICAgICAgPC9Tb3J0YWJsZUxpc3RJdGVtPlxuICAgICk7XG4gIH07XG5cbiAgcmVuZGVyRXJyb25lb3VzVHlwZWRJdGVtKGluZGV4LCBpdGVtKSB7XG4gICAgY29uc3QgZmllbGQgPSB0aGlzLnByb3BzLmZpZWxkO1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZUZvclR5cGVkRmllbGRBbmRWYWx1ZShmaWVsZCwgaXRlbSk7XG4gICAgY29uc3Qga2V5ID0gYGl0ZW0tJHtpbmRleH1gO1xuICAgIHJldHVybiAoXG4gICAgICA8U29ydGFibGVMaXN0SXRlbVxuICAgICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBzdHlsZXMubGlzdENvbnRyb2xJdGVtQ29sbGFwc2VkXX1cbiAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICBrZXk9e2tleX1cbiAgICAgID5cbiAgICAgICAgPFN0eWxlZExpc3RJdGVtVG9wQmFyXG4gICAgICAgICAgb25Db2xsYXBzZVRvZ2dsZT17bnVsbH1cbiAgICAgICAgICBvblJlbW92ZT17cGFydGlhbCh0aGlzLmhhbmRsZVJlbW92ZSwgaW5kZXgsIGtleSl9XG4gICAgICAgICAgZHJhZ0hhbmRsZT17RHJhZ0hhbmRsZX1cbiAgICAgICAgICBpZD17a2V5fVxuICAgICAgICAvPlxuICAgICAgICA8TmVzdGVkT2JqZWN0TGFiZWwgY29sbGFwc2VkPXt0cnVlfSBlcnJvcj17dHJ1ZX0+XG4gICAgICAgICAge2Vycm9yTWVzc2FnZX1cbiAgICAgICAgPC9OZXN0ZWRPYmplY3RMYWJlbD5cbiAgICAgIDwvU29ydGFibGVMaXN0SXRlbT5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyTGlzdENvbnRyb2woKSB7XG4gICAgY29uc3QgeyB2YWx1ZSwgZm9ySUQsIGZpZWxkLCBjbGFzc05hbWVXcmFwcGVyLCB0IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQsIGxpc3RDb2xsYXBzZWQsIGtleXMgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgaXRlbXMgPSB2YWx1ZSB8fCBMaXN0KCk7XG4gICAgY29uc3QgbGFiZWwgPSBmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpO1xuICAgIGNvbnN0IGxhYmVsU2luZ3VsYXIgPSBmaWVsZC5nZXQoJ2xhYmVsX3Npbmd1bGFyJykgfHwgZmllbGQuZ2V0KCdsYWJlbCcsIGZpZWxkLmdldCgnbmFtZScpKTtcbiAgICBjb25zdCBsaXN0TGFiZWwgPSBpdGVtcy5zaXplID09PSAxID8gbGFiZWxTaW5ndWxhci50b0xvd2VyQ2FzZSgpIDogbGFiZWwudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBtaW5pbWl6ZUNvbGxhcHNlZEl0ZW1zID0gZmllbGQuZ2V0KCdtaW5pbWl6ZV9jb2xsYXBzZWQnLCBmYWxzZSk7XG4gICAgY29uc3QgYWxsSXRlbXNDb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZC5ldmVyeSh2YWwgPT4gdmFsID09PSB0cnVlKTtcbiAgICBjb25zdCBzZWxmQ29sbGFwc2VkID0gYWxsSXRlbXNDb2xsYXBzZWQgJiYgKGxpc3RDb2xsYXBzZWQgfHwgIW1pbmltaXplQ29sbGFwc2VkSXRlbXMpO1xuXG4gICAgY29uc3QgaXRlbXNBcnJheSA9IGtleXMubWFwKGtleSA9PiAoeyBpZDoga2V5IH0pKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8Q2xhc3NOYW1lcz5cbiAgICAgICAgeyh7IGN4LCBjc3MgfSkgPT4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGlkPXtmb3JJRH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goXG4gICAgICAgICAgICAgIGNsYXNzTmFtZVdyYXBwZXIsXG4gICAgICAgICAgICAgIGNzc2BcbiAgICAgICAgICAgICAgICAke3N0eWxlU3RyaW5ncy5vYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXJ9XG4gICAgICAgICAgICAgIGAsXG4gICAgICAgICAgICApfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxPYmplY3RXaWRnZXRUb3BCYXJcbiAgICAgICAgICAgICAgYWxsb3dBZGQ9e2ZpZWxkLmdldCgnYWxsb3dfYWRkJywgdHJ1ZSl9XG4gICAgICAgICAgICAgIG9uQWRkPXt0aGlzLmhhbmRsZUFkZH1cbiAgICAgICAgICAgICAgdHlwZXM9e2ZpZWxkLmdldChUWVBFU19LRVksIG51bGwpfVxuICAgICAgICAgICAgICBvbkFkZFR5cGU9e3R5cGUgPT4gdGhpcy5oYW5kbGVBZGRUeXBlKHR5cGUsIHJlc29sdmVGaWVsZEtleVR5cGUoZmllbGQpKX1cbiAgICAgICAgICAgICAgaGVhZGluZz17YCR7aXRlbXMuc2l6ZX0gJHtsaXN0TGFiZWx9YH1cbiAgICAgICAgICAgICAgbGFiZWw9e2xhYmVsU2luZ3VsYXIudG9Mb3dlckNhc2UoKX1cbiAgICAgICAgICAgICAgb25Db2xsYXBzZVRvZ2dsZT17dGhpcy5oYW5kbGVDb2xsYXBzZUFsbFRvZ2dsZX1cbiAgICAgICAgICAgICAgY29sbGFwc2VkPXtzZWxmQ29sbGFwc2VkfVxuICAgICAgICAgICAgICB0PXt0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHsoIXNlbGZDb2xsYXBzZWQgfHwgIW1pbmltaXplQ29sbGFwc2VkSXRlbXMpICYmIChcbiAgICAgICAgICAgICAgPFNvcnRhYmxlTGlzdCBpdGVtcz17aXRlbXNBcnJheX0ga2V5cz17a2V5c30gb25Tb3J0RW5kPXt0aGlzLm9uU29ydEVuZH0+XG4gICAgICAgICAgICAgICAge2l0ZW1zLm1hcCh0aGlzLnJlbmRlckl0ZW0pfVxuICAgICAgICAgICAgICA8L1NvcnRhYmxlTGlzdD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L0NsYXNzTmFtZXM+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlcklucHV0KCkge1xuICAgIGNvbnN0IHsgZm9ySUQsIGNsYXNzTmFtZVdyYXBwZXIgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIHJldHVybiAoXG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBpZD17Zm9ySUR9XG4gICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICBvbkZvY3VzPXt0aGlzLmhhbmRsZUZvY3VzfVxuICAgICAgICBvbkJsdXI9e3RoaXMuaGFuZGxlQmx1cn1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVXcmFwcGVyfVxuICAgICAgLz5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmdldFZhbHVlVHlwZSgpICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJMaXN0Q29udHJvbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJJbnB1dCgpO1xuICAgIH1cbiAgfVxufVxuIl19 */",
|
|
57
|
+
styles: "padding-bottom:0;label:listControlItemCollapsed;/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF3RStCIiwiZmlsZSI6Ii4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IEltbXV0YWJsZVByb3BUeXBlcyBmcm9tICdyZWFjdC1pbW11dGFibGUtcHJvcHR5cGVzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCB7IGNzcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IExpc3QsIE1hcCwgZnJvbUpTIH0gZnJvbSAnaW1tdXRhYmxlJztcbmltcG9ydCBwYXJ0aWFsIGZyb20gJ2xvZGFzaC9wYXJ0aWFsJztcbmltcG9ydCBpc0VtcHR5IGZyb20gJ2xvZGFzaC9pc0VtcHR5JztcbmltcG9ydCB1bmlxdWVJZCBmcm9tICdsb2Rhc2gvdW5pcXVlSWQnO1xuaW1wb3J0IHsgdjQgYXMgdXVpZCB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IERlY2FwQ21zV2lkZ2V0T2JqZWN0IGZyb20gJ2RlY2FwLWNtcy13aWRnZXQtb2JqZWN0JztcbmltcG9ydCB7XG4gIERuZENvbnRleHQsXG4gIE1vdXNlU2Vuc29yLFxuICBUb3VjaFNlbnNvcixcbiAgY2xvc2VzdENlbnRlcixcbiAgdXNlU2Vuc29yLFxuICB1c2VTZW5zb3JzLFxufSBmcm9tICdAZG5kLWtpdC9jb3JlJztcbmltcG9ydCB7IFNvcnRhYmxlQ29udGV4dCwgdXNlU29ydGFibGUgfSBmcm9tICdAZG5kLWtpdC9zb3J0YWJsZSc7XG5pbXBvcnQgeyByZXN0cmljdFRvUGFyZW50RWxlbWVudCB9IGZyb20gJ0BkbmQta2l0L21vZGlmaWVycyc7XG5pbXBvcnQgeyBDU1MgfSBmcm9tICdAZG5kLWtpdC91dGlsaXRpZXMnO1xuaW1wb3J0IHtcbiAgTGlzdEl0ZW1Ub3BCYXIsXG4gIE9iamVjdFdpZGdldFRvcEJhcixcbiAgY29sb3JzLFxuICBsZW5ndGhzLFxuICBGaWVsZExhYmVsLFxufSBmcm9tICdkZWNhcC1jbXMtdWktZGVmYXVsdCc7XG5pbXBvcnQgeyBzdHJpbmdUZW1wbGF0ZSwgdmFsaWRhdGlvbnMgfSBmcm9tICdkZWNhcC1jbXMtbGliLXdpZGdldHMnO1xuXG5pbXBvcnQge1xuICBUWVBFU19LRVksXG4gIGdldFR5cGVkRmllbGRGb3JWYWx1ZSxcbiAgcmVzb2x2ZUZpZWxkS2V5VHlwZSxcbiAgZ2V0RXJyb3JNZXNzYWdlRm9yVHlwZWRGaWVsZEFuZFZhbHVlLFxufSBmcm9tICcuL3R5cGVkTGlzdEhlbHBlcnMnO1xuXG5jb25zdCBPYmplY3RDb250cm9sID0gRGVjYXBDbXNXaWRnZXRPYmplY3QuY29udHJvbENvbXBvbmVudDtcblxuY29uc3QgTGlzdEl0ZW0gPSBzdHlsZWQuZGl2KCk7XG5cbmNvbnN0IFN0eWxlZExpc3RJdGVtVG9wQmFyID0gc3R5bGVkKExpc3RJdGVtVG9wQmFyKWBcbiAgYmFja2dyb3VuZC1jb2xvcjogJHtjb2xvcnMudGV4dEZpZWxkQm9yZGVyfTtcbmA7XG5cbmNvbnN0IE5lc3RlZE9iamVjdExhYmVsID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogJHtwcm9wcyA9PiAocHJvcHMuY29sbGFwc2VkID8gJ2Jsb2NrJyA6ICdub25lJyl9O1xuICBib3JkZXItdG9wOiAwO1xuICBjb2xvcjogJHtwcm9wcyA9PiAocHJvcHMuZXJyb3IgPyBjb2xvcnMuZXJyb3JUZXh0IDogJ2luaGVyaXQnKX07XG4gIGJhY2tncm91bmQtY29sb3I6ICR7Y29sb3JzLnRleHRGaWVsZEJvcmRlcn07XG4gIHBhZGRpbmc6IDEzcHg7XG4gIGJvcmRlci1yYWRpdXM6IDAgMCAke2xlbmd0aHMuYm9yZGVyUmFkaXVzfSAke2xlbmd0aHMuYm9yZGVyUmFkaXVzfTtcbmA7XG5cbmNvbnN0IHN0eWxlU3RyaW5ncyA9IHtcbiAgY29sbGFwc2VkT2JqZWN0Q29udHJvbDogYFxuICAgIGRpc3BsYXk6IG5vbmU7XG4gIGAsXG4gIG9iamVjdFdpZGdldFRvcEJhckNvbnRhaW5lcjogYFxuICAgIHBhZGRpbmc6ICR7bGVuZ3Rocy5vYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXJQYWRkaW5nfTtcbiAgYCxcbn07XG5cbmNvbnN0IHN0eWxlcyA9IHtcbiAgbGlzdENvbnRyb2xJdGVtOiBjc3NgXG4gICAgbWFyZ2luLXRvcDogMThweDtcblxuICAgICY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgICBtYXJnaW4tdG9wOiAyNnB4O1xuICAgIH1cbiAgYCxcbiAgbGlzdENvbnRyb2xJdGVtQ29sbGFwc2VkOiBjc3NgXG4gICAgcGFkZGluZy1ib3R0b206IDA7XG4gIGAsXG59O1xuXG5mdW5jdGlvbiBTb3J0YWJsZUxpc3QoeyBpdGVtcywgY2hpbGRyZW4sIG9uU29ydEVuZCwga2V5cyB9KSB7XG4gIGNvbnN0IGFjdGl2YXRpb25Db25zdHJhaW50ID0geyBkaXN0YW5jZTogNCB9O1xuICBjb25zdCBzZW5zb3JzID0gdXNlU2Vuc29ycyhcbiAgICB1c2VTZW5zb3IoTW91c2VTZW5zb3IsIHsgYWN0aXZhdGlvbkNvbnN0cmFpbnQgfSksXG4gICAgdXNlU2Vuc29yKFRvdWNoU2Vuc29yLCB7IGFjdGl2YXRpb25Db25zdHJhaW50IH0pLFxuICApO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZVNvcnRFbmQoeyBhY3RpdmUsIG92ZXIgfSkge1xuICAgIG9uU29ydEVuZCh7XG4gICAgICBvbGRJbmRleDoga2V5cy5pbmRleE9mKGFjdGl2ZS5pZCksXG4gICAgICBuZXdJbmRleDoga2V5cy5pbmRleE9mKG92ZXIuaWQpLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2PlxuICAgICAgPERuZENvbnRleHRcbiAgICAgICAgbW9kaWZpZXJzPXtbcmVzdHJpY3RUb1BhcmVudEVsZW1lbnRdfVxuICAgICAgICBjb2xsaXNpb25EZXRlY3Rpb249e2Nsb3Nlc3RDZW50ZXJ9XG4gICAgICAgIHNlbnNvcnM9e3NlbnNvcnN9XG4gICAgICAgIG9uRHJhZ0VuZD17aGFuZGxlU29ydEVuZH1cbiAgICAgID5cbiAgICAgICAgPFNvcnRhYmxlQ29udGV4dCBpdGVtcz17aXRlbXN9PntjaGlsZHJlbn08L1NvcnRhYmxlQ29udGV4dD5cbiAgICAgIDwvRG5kQ29udGV4dD5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gU29ydGFibGVMaXN0SXRlbShwcm9wcykge1xuICBjb25zdCB7IHNldE5vZGVSZWYsIHRyYW5zZm9ybSwgdHJhbnNpdGlvbiB9ID0gdXNlU29ydGFibGUoe1xuICAgIGlkOiBwcm9wcy5pZCxcbiAgfSk7XG5cbiAgY29uc3Qgc3R5bGUgPSB7XG4gICAgdHJhbnNmb3JtOiBDU1MuVHJhbnNmb3JtLnRvU3RyaW5nKHRyYW5zZm9ybSksXG4gICAgdHJhbnNpdGlvbixcbiAgfTtcblxuICBjb25zdCB7IGNvbGxhcHNlZCB9ID0gcHJvcHM7XG5cbiAgcmV0dXJuIChcbiAgICA8TGlzdEl0ZW1cbiAgICAgIHNvcnRhYmxlXG4gICAgICByZWY9e3NldE5vZGVSZWZ9XG4gICAgICBzdHlsZT17c3R5bGV9XG4gICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBjb2xsYXBzZWQgJiYgc3R5bGVzLmxpc3RDb250cm9sSXRlbUNvbGxhcHNlZF19XG4gICAgPlxuICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgIDwvTGlzdEl0ZW0+XG4gICk7XG59XG5cbmZ1bmN0aW9uIERyYWdIYW5kbGUoeyBjaGlsZHJlbiwgaWQgfSkge1xuICBjb25zdCB7IGF0dHJpYnV0ZXMsIGxpc3RlbmVycyB9ID0gdXNlU29ydGFibGUoe1xuICAgIGlkLFxuICB9KTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgey4uLmF0dHJpYnV0ZXN9IHsuLi5saXN0ZW5lcnN9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5jb25zdCB2YWx1ZVR5cGVzID0ge1xuICBTSU5HTEU6ICdTSU5HTEUnLFxuICBNVUxUSVBMRTogJ01VTFRJUExFJyxcbiAgTUlYRUQ6ICdNSVhFRCcsXG59O1xuXG5mdW5jdGlvbiBoYW5kbGVTdW1tYXJ5KHN1bW1hcnksIGVudHJ5LCBsYWJlbCwgaXRlbSkge1xuICBjb25zdCBkYXRhID0gc3RyaW5nVGVtcGxhdGUuYWRkRmlsZVRlbXBsYXRlRmllbGRzKFxuICAgIGVudHJ5LmdldCgncGF0aCcpLFxuICAgIGl0ZW0uc2V0KCdmaWVsZHMubGFiZWwnLCBsYWJlbCksXG4gICk7XG4gIHJldHVybiBzdHJpbmdUZW1wbGF0ZS5jb21waWxlU3RyaW5nVGVtcGxhdGUoc3VtbWFyeSwgbnVsbCwgJycsIGRhdGEpO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUl0ZW0oZmllbGQsIGl0ZW0pIHtcbiAgaWYgKCFNYXAuaXNNYXAoaXRlbSkpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgJyR7ZmllbGQuZ2V0KCduYW1lJyl9JyBmaWVsZCBpdGVtIHZhbHVlIHZhbHVlIHNob3VsZCBiZSBhIG1hcCBidXQgaXMgYSAnJHt0eXBlb2YgaXRlbX0nYCxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gTGFiZWxDb21wb25lbnQoeyBmaWVsZCwgaXNBY3RpdmUsIGhhc0Vycm9ycywgdW5pcXVlRmllbGRJZCwgaXNGaWVsZE9wdGlvbmFsLCB0IH0pIHtcbiAgY29uc3QgbGFiZWwgPSBgJHtmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpfWA7XG4gIHJldHVybiAoXG4gICAgPEZpZWxkTGFiZWwgaXNBY3RpdmU9e2lzQWN0aXZlfSBoYXNFcnJvcnM9e2hhc0Vycm9yc30gaHRtbEZvcj17dW5pcXVlRmllbGRJZH0+XG4gICAgICB7bGFiZWx9IHtgJHtpc0ZpZWxkT3B0aW9uYWwgPyBgICgke3QoJ2VkaXRvci5lZGl0b3JDb250cm9sLmZpZWxkLm9wdGlvbmFsJyl9KWAgOiAnJ31gfVxuICAgIDwvRmllbGRMYWJlbD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlzdENvbnRyb2wgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjaGlsZFJlZnMgPSB7fTtcblxuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIG1ldGFkYXRhOiBJbW11dGFibGVQcm9wVHlwZXMubWFwLFxuICAgIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uQ2hhbmdlT2JqZWN0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uVmFsaWRhdGVPYmplY3Q6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdmFsaWRhdGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdmFsdWU6IEltbXV0YWJsZVByb3BUeXBlcy5saXN0LFxuICAgIGZpZWxkOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGZvcklEOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNvbnRyb2xSZWY6IFByb3BUeXBlcy5mdW5jLFxuICAgIG1lZGlhUGF0aHM6IEltbXV0YWJsZVByb3BUeXBlcy5tYXAuaXNSZXF1aXJlZCxcbiAgICBnZXRBc3NldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvbk9wZW5NZWRpYUxpYnJhcnk6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25BZGRBc3NldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvblJlbW92ZUluc2VydGVkTWVkaWE6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgY2xhc3NOYW1lV3JhcHBlcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHNldEFjdGl2ZVN0eWxlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHNldEluYWN0aXZlU3R5bGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgZWRpdG9yQ29udHJvbDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWQsXG4gICAgcmVzb2x2ZVdpZGdldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBjbGVhckZpZWxkRXJyb3JzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGZpZWxkc0Vycm9yczogSW1tdXRhYmxlUHJvcFR5cGVzLm1hcC5pc1JlcXVpcmVkLFxuICAgIGVudHJ5OiBJbW11dGFibGVQcm9wVHlwZXMubWFwLmlzUmVxdWlyZWQsXG4gICAgdDogUHJvcFR5cGVzLmZ1bmMsXG4gIH07XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICB2YWx1ZTogTGlzdCgpLFxuICAgIHBhcmVudElkczogW10sXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgY29uc3QgeyBmaWVsZCwgdmFsdWUgfSA9IHByb3BzO1xuICAgIGNvbnN0IGxpc3RDb2xsYXBzZWQgPSBmaWVsZC5nZXQoJ2NvbGxhcHNlZCcsIHRydWUpO1xuICAgIGNvbnN0IGl0ZW1zQ29sbGFwc2VkID0gKHZhbHVlICYmIEFycmF5KHZhbHVlLnNpemUpLmZpbGwobGlzdENvbGxhcHNlZCkpIHx8IFtdO1xuICAgIGNvbnN0IGtleXMgPSAodmFsdWUgJiYgQXJyYXkuZnJvbSh7IGxlbmd0aDogdmFsdWUuc2l6ZSB9LCAoKSA9PiB1dWlkKCkpKSB8fCBbXTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBsaXN0Q29sbGFwc2VkLFxuICAgICAgaXRlbXNDb2xsYXBzZWQsXG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZVRvU3RyaW5nKHZhbHVlKSxcbiAgICAgIGtleXMsXG4gICAgfTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIC8vIE1hbnVhbGx5IHZhbGlkYXRlIFByb3BUeXBlcyAtIFJlYWN0IDE5IGJyZWFraW5nIGNoYW5nZVxuICAgIFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcyhMaXN0Q29udHJvbC5wcm9wVHlwZXMsIHRoaXMucHJvcHMsICdwcm9wJywgJ0xpc3RDb250cm9sJyk7XG4gIH1cblxuICB2YWx1ZVRvU3RyaW5nID0gdmFsdWUgPT4ge1xuICAgIGxldCBzdHJpbmdWYWx1ZTtcbiAgICBpZiAoTGlzdC5pc0xpc3QodmFsdWUpIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBzdHJpbmdWYWx1ZSA9IHZhbHVlLmpvaW4oJywnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgRXhwZWN0ZWQgTGlzdCB2YWx1ZSB0byBiZSBhbiBhcnJheSBidXQgcmVjZWl2ZWQgJyR7dmFsdWV9JyB3aXRoIHR5cGUgb2YgJyR7dHlwZW9mIHZhbHVlfScuIFBsZWFzZSBjaGVjayB0aGUgdmFsdWUgcHJvdmlkZWQgdG8gdGhlICcke3RoaXMucHJvcHMuZmllbGQuZ2V0KFxuICAgICAgICAgICduYW1lJyxcbiAgICAgICAgKX0nIGZpZWxkYCxcbiAgICAgICk7XG4gICAgICBzdHJpbmdWYWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBzdHJpbmdWYWx1ZS5yZXBsYWNlKC8sKFteXFxzXXwkKS9nLCAnLCAkMScpO1xuICB9O1xuXG4gIGdldFZhbHVlVHlwZSA9ICgpID0+IHtcbiAgICBjb25zdCB7IGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChmaWVsZC5nZXQoJ2ZpZWxkcycpKSB7XG4gICAgICByZXR1cm4gdmFsdWVUeXBlcy5NVUxUSVBMRTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkLmdldCgnZmllbGQnKSkge1xuICAgICAgcmV0dXJuIHZhbHVlVHlwZXMuU0lOR0xFO1xuICAgIH0gZWxzZSBpZiAoZmllbGQuZ2V0KFRZUEVTX0tFWSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZVR5cGVzLk1JWEVEO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH07XG5cbiAgdW5pcXVlRmllbGRJZCA9IHVuaXF1ZUlkKGAke3RoaXMucHJvcHMuZmllbGQuZ2V0KCduYW1lJyl9LWZpZWxkLWApO1xuICAvKipcbiAgICogQWx3YXlzIHVwZGF0ZSBzbyB0aGF0IGVhY2ggbmVzdGVkIHdpZGdldCBoYXMgdGhlIG9wdGlvbiB0byB1cGRhdGUuIFRoaXMgaXNcbiAgICogcmVxdWlyZWQgYmVjYXVzZSBDb250cm9sSE9DIHByb3ZpZGVzIGEgZGVmYXVsdCBgc2hvdWxkQ29tcG9uZW50VXBkYXRlYFxuICAgKiB3aGljaCBvbmx5IHVwZGF0ZXMgaWYgdGhlIHZhbHVlIGNoYW5nZXMsIGJ1dCBldmVyeSB3aWRnZXQgbXVzdCBiZSBhbGxvd2VkXG4gICAqIHRvIG92ZXJyaWRlIHRoaXMuXG4gICAqL1xuICBzaG91bGRDb21wb25lbnRVcGRhdGUoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBoYW5kbGVDaGFuZ2UgPSBlID0+IHtcbiAgICBjb25zdCB7IG9uQ2hhbmdlIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy5zdGF0ZS52YWx1ZTtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IGUudGFyZ2V0LnZhbHVlLnRyaW0oKTtcbiAgICBjb25zdCBsaXN0VmFsdWUgPSBuZXdWYWx1ZSA/IG5ld1ZhbHVlLnNwbGl0KCcsJykgOiBbXTtcbiAgICBpZiAobmV3VmFsdWUubWF0Y2goLywkLykgJiYgb2xkVmFsdWUubWF0Y2goLywgJC8pKSB7XG4gICAgICBsaXN0VmFsdWUucG9wKCk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPSB0aGlzLnZhbHVlVG9TdHJpbmcobGlzdFZhbHVlKTtcbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHBhcnNlZFZhbHVlIH0pO1xuICAgIG9uQ2hhbmdlKExpc3QobGlzdFZhbHVlLm1hcCh2YWwgPT4gdmFsLnRyaW0oKSkpKTtcbiAgfTtcblxuICBoYW5kbGVGb2N1cyA9ICgpID0+IHtcbiAgICB0aGlzLnByb3BzLnNldEFjdGl2ZVN0eWxlKCk7XG4gIH07XG5cbiAgaGFuZGxlQmx1ciA9IGUgPT4ge1xuICAgIGNvbnN0IGxpc3RWYWx1ZSA9IGUudGFyZ2V0LnZhbHVlXG4gICAgICAuc3BsaXQoJywnKVxuICAgICAgLm1hcChlbCA9PiBlbC50cmltKCkpXG4gICAgICAuZmlsdGVyKGVsID0+IGVsKTtcbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHRoaXMudmFsdWVUb1N0cmluZyhsaXN0VmFsdWUpIH0pO1xuICAgIHRoaXMucHJvcHMuc2V0SW5hY3RpdmVTdHlsZSgpO1xuICB9O1xuXG4gIGhhbmRsZUFkZCA9IGUgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHBhcnNlZFZhbHVlID1cbiAgICAgIHRoaXMuZ2V0VmFsdWVUeXBlKCkgPT09IHZhbHVlVHlwZXMuU0lOR0xFXG4gICAgICAgID8gdGhpcy5zaW5nbGVEZWZhdWx0KClcbiAgICAgICAgOiBmcm9tSlModGhpcy5tdWx0aXBsZURlZmF1bHQoZmllbGQuZ2V0KCdmaWVsZHMnKSkpO1xuICAgIHRoaXMuYWRkSXRlbShwYXJzZWRWYWx1ZSk7XG4gIH07XG5cbiAgc2luZ2xlRGVmYXVsdCA9ICgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5maWVsZC5nZXRJbihbJ2ZpZWxkJywgJ2RlZmF1bHQnXSwgbnVsbCk7XG4gIH07XG5cbiAgbXVsdGlwbGVEZWZhdWx0ID0gZmllbGRzID0+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KGZpZWxkcyk7XG4gIH07XG5cbiAgaGFuZGxlQWRkVHlwZSA9ICh0eXBlLCB0eXBlS2V5KSA9PiB7XG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPSBmcm9tSlModGhpcy5taXhlZERlZmF1bHQodHlwZUtleSwgdHlwZSkpO1xuICAgIHRoaXMuYWRkSXRlbShwYXJzZWRWYWx1ZSk7XG4gIH07XG5cbiAgbWl4ZWREZWZhdWx0ID0gKHR5cGVLZXksIHR5cGUpID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZFR5cGUgPSB0aGlzLnByb3BzLmZpZWxkLmdldChUWVBFU19LRVkpLmZpbmQoZiA9PiBmLmdldCgnbmFtZScpID09PSB0eXBlKTtcbiAgICBjb25zdCBmaWVsZHMgPSBzZWxlY3RlZFR5cGUuZ2V0KCdmaWVsZHMnKSB8fCBbc2VsZWN0ZWRUeXBlLmdldCgnZmllbGQnKV07XG5cbiAgICByZXR1cm4gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KGZpZWxkcywgeyBbdHlwZUtleV06IHR5cGUgfSk7XG4gIH07XG5cbiAgZ2V0RmllbGRzRGVmYXVsdCA9IChmaWVsZHMsIGluaXRpYWxWYWx1ZSA9IHt9KSA9PiB7XG4gICAgcmV0dXJuIGZpZWxkcy5yZWR1Y2UoKGFjYywgaXRlbSkgPT4ge1xuICAgICAgY29uc3Qgc3ViZmllbGRzID0gaXRlbS5nZXQoJ2ZpZWxkJykgfHwgaXRlbS5nZXQoJ2ZpZWxkcycpO1xuICAgICAgY29uc3Qgb2JqZWN0ID0gaXRlbS5nZXQoJ3dpZGdldCcpID09ICdvYmplY3QnO1xuICAgICAgY29uc3QgbmFtZSA9IGl0ZW0uZ2V0KCduYW1lJyk7XG4gICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSBpdGVtLmdldCgnZGVmYXVsdCcsIG51bGwpO1xuXG4gICAgICBpZiAoTGlzdC5pc0xpc3Qoc3ViZmllbGRzKSAmJiBvYmplY3QpIHtcbiAgICAgICAgY29uc3Qgc3ViRGVmYXVsdFZhbHVlID0gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KHN1YmZpZWxkcyk7XG4gICAgICAgICFpc0VtcHR5KHN1YkRlZmF1bHRWYWx1ZSkgJiYgKGFjY1tuYW1lXSA9IHN1YkRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9XG5cbiAgICAgIGlmIChNYXAuaXNNYXAoc3ViZmllbGRzKSAmJiBvYmplY3QpIHtcbiAgICAgICAgY29uc3Qgc3ViRGVmYXVsdFZhbHVlID0gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KFtzdWJmaWVsZHNdKTtcbiAgICAgICAgIWlzRW1wdHkoc3ViRGVmYXVsdFZhbHVlKSAmJiAoYWNjW25hbWVdID0gc3ViRGVmYXVsdFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH1cblxuICAgICAgaWYgKGRlZmF1bHRWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBhY2NbbmFtZV0gPSBkZWZhdWx0VmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgaW5pdGlhbFZhbHVlKTtcbiAgfTtcblxuICBhZGRJdGVtID0gcGFyc2VkVmFsdWUgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWUsIG9uQ2hhbmdlLCBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBhZGRUb1RvcCA9IGZpZWxkLmdldCgnYWRkX3RvX3RvcCcsIGZhbHNlKTtcblxuICAgIGNvbnN0IGl0ZW1LZXkgPSB1dWlkKCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBpdGVtc0NvbGxhcHNlZDogYWRkVG9Ub3BcbiAgICAgICAgPyBbZmFsc2UsIC4uLnRoaXMuc3RhdGUuaXRlbXNDb2xsYXBzZWRdXG4gICAgICAgIDogWy4uLnRoaXMuc3RhdGUuaXRlbXNDb2xsYXBzZWQsIGZhbHNlXSxcbiAgICAgIGtleXM6IGFkZFRvVG9wID8gW2l0ZW1LZXksIC4uLnRoaXMuc3RhdGUua2V5c10gOiBbLi4udGhpcy5zdGF0ZS5rZXlzLCBpdGVtS2V5XSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGxpc3RWYWx1ZSA9IHZhbHVlIHx8IExpc3QoKTtcbiAgICBpZiAoYWRkVG9Ub3ApIHtcbiAgICAgIG9uQ2hhbmdlKGxpc3RWYWx1ZS51bnNoaWZ0KHBhcnNlZFZhbHVlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uQ2hhbmdlKGxpc3RWYWx1ZS5wdXNoKHBhcnNlZFZhbHVlKSk7XG4gICAgfVxuICB9O1xuXG4gIHByb2Nlc3NDb250cm9sUmVmID0gcmVmID0+IHtcbiAgICBpZiAoIXJlZikgcmV0dXJuO1xuICAgIGNvbnN0IHtcbiAgICAgIHByb3BzOiB7IHZhbGlkYXRpb25LZXk6IGtleSB9LFxuICAgIH0gPSByZWY7XG4gICAgdGhpcy5jaGlsZFJlZnNba2V5XSA9IHJlZjtcbiAgICB0aGlzLnByb3BzLmNvbnRyb2xSZWY/Lih0aGlzKTtcbiAgfTtcblxuICB2YWxpZGF0ZSA9ICgpID0+IHtcbiAgICAvLyBGaXJzdCB2YWxpZGF0ZSBjaGlsZCB3aWRnZXRzIGlmIHRoaXMgaXMgYSBjb21wbGV4IGxpc3RcbiAgICBjb25zdCBoYXNDaGlsZFdpZGdldHMgPSB0aGlzLmdldFZhbHVlVHlwZSgpICYmIE9iamVjdC5rZXlzKHRoaXMuY2hpbGRSZWZzKS5sZW5ndGggPiAwO1xuICAgIGlmIChoYXNDaGlsZFdpZGdldHMpIHtcbiAgICAgIE9iamVjdC52YWx1ZXModGhpcy5jaGlsZFJlZnMpLmZvckVhY2god2lkZ2V0ID0+IHtcbiAgICAgICAgd2lkZ2V0Py52YWxpZGF0ZT8uKCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9wcy52YWxpZGF0ZSgpO1xuICAgIH1cbiAgICB0aGlzLnByb3BzLm9uVmFsaWRhdGVPYmplY3QodGhpcy5wcm9wcy5mb3JJRCwgdGhpcy52YWxpZGF0ZVNpemUoKSk7XG4gIH07XG5cbiAgdmFsaWRhdGVTaXplID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgZmllbGQsIHZhbHVlLCB0IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG1pbiA9IGZpZWxkLmdldCgnbWluJyk7XG4gICAgY29uc3QgbWF4ID0gZmllbGQuZ2V0KCdtYXgnKTtcbiAgICBjb25zdCByZXF1aXJlZCA9IGZpZWxkLmdldCgncmVxdWlyZWQnLCB0cnVlKTtcblxuICAgIGlmICghcmVxdWlyZWQgJiYgIXZhbHVlPy5zaXplKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgZXJyb3IgPSB2YWxpZGF0aW9ucy52YWxpZGF0ZU1pbk1heChcbiAgICAgIHQsXG4gICAgICBmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpLFxuICAgICAgdmFsdWUsXG4gICAgICBtaW4sXG4gICAgICBtYXgsXG4gICAgKTtcblxuICAgIHJldHVybiBlcnJvciA/IFtlcnJvcl0gOiBbXTtcbiAgfTtcblxuICAvKipcbiAgICogSW4gY2FzZSB0aGUgYG9uQ2hhbmdlT2JqZWN0YCBmdW5jdGlvbiBpcyBmcm96ZW4gYnkgYSBjaGlsZCB3aWRnZXQgaW1wbGVtZW50YXRpb24sXG4gICAqIGUuZy4gd2hlbiBkZWJvdW5jZWQsIGFsd2F5cyBnZXQgdGhlIGxhdGVzdCBvYmplY3QgdmFsdWUgaW5zdGVhZCBvZiB1c2luZ1xuICAgKiBgdGhpcy5wcm9wcy52YWx1ZWAgZGlyZWN0bHkuXG4gICAqL1xuICBnZXRPYmplY3RWYWx1ZSA9IGlkeCA9PiB0aGlzLnByb3BzLnZhbHVlLmdldChpZHgpIHx8IE1hcCgpO1xuXG4gIGhhbmRsZUNoYW5nZUZvcihpbmRleCkge1xuICAgIHJldHVybiAoZiwgbmV3VmFsdWUsIG5ld01ldGFkYXRhKSA9PiB7XG4gICAgICBjb25zdCB7IHZhbHVlLCBtZXRhZGF0YSwgb25DaGFuZ2UsIGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBmaWVsZC5nZXQoJ25hbWUnKTtcbiAgICAgIGNvbnN0IGxpc3RGaWVsZE9iamVjdFdpZGdldCA9IGZpZWxkLmdldEluKFsnZmllbGQnLCAnd2lkZ2V0J10pID09PSAnb2JqZWN0JztcbiAgICAgIGNvbnN0IHdpdGhOYW1lS2V5ID1cbiAgICAgICAgdGhpcy5nZXRWYWx1ZVR5cGUoKSAhPT0gdmFsdWVUeXBlcy5TSU5HTEUgfHxcbiAgICAgICAgKHRoaXMuZ2V0VmFsdWVUeXBlKCkgPT09IHZhbHVlVHlwZXMuU0lOR0xFICYmIGxpc3RGaWVsZE9iamVjdFdpZGdldCk7XG4gICAgICBjb25zdCBuZXdPYmplY3RWYWx1ZSA9IHdpdGhOYW1lS2V5XG4gICAgICAgID8gdGhpcy5nZXRPYmplY3RWYWx1ZShpbmRleCkuc2V0KGYuZ2V0KCduYW1lJyksIG5ld1ZhbHVlKVxuICAgICAgICA6IG5ld1ZhbHVlO1xuICAgICAgY29uc3QgcGFyc2VkTWV0YWRhdGEgPSB7XG4gICAgICAgIFtjb2xsZWN0aW9uTmFtZV06IE9iamVjdC5hc3NpZ24obWV0YWRhdGEgPyBtZXRhZGF0YS50b0pTKCkgOiB7fSwgbmV3TWV0YWRhdGEgfHwge30pLFxuICAgICAgfTtcbiAgICAgIG9uQ2hhbmdlKHZhbHVlLnNldChpbmRleCwgbmV3T2JqZWN0VmFsdWUpLCBwYXJzZWRNZXRhZGF0YSk7XG4gICAgfTtcbiAgfVxuXG4gIGhhbmRsZVJlbW92ZSA9IChpbmRleCwgZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3Qge1xuICAgICAgdmFsdWUsXG4gICAgICBtZXRhZGF0YSxcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgZmllbGQsXG4gICAgICBjbGVhckZpZWxkRXJyb3JzLFxuICAgICAgb25WYWxpZGF0ZU9iamVjdCxcbiAgICAgIGZvcklELFxuICAgICAgZmllbGRzRXJyb3JzLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBmaWVsZC5nZXQoJ25hbWUnKTtcbiAgICBjb25zdCBpc1NpbmdsZUZpZWxkID0gdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5TSU5HTEU7XG5cbiAgICBjb25zdCBtZXRhZGF0YVJlbW92ZVBhdGggPSBpc1NpbmdsZUZpZWxkID8gdmFsdWUuZ2V0KGluZGV4KSA6IHZhbHVlLmdldChpbmRleCkudmFsdWVTZXEoKTtcbiAgICBjb25zdCBwYXJzZWRNZXRhZGF0YSA9XG4gICAgICBtZXRhZGF0YSAmJiAhbWV0YWRhdGEuaXNFbXB0eSgpXG4gICAgICAgID8geyBbY29sbGVjdGlvbk5hbWVdOiBtZXRhZGF0YS5yZW1vdmVJbihtZXRhZGF0YVJlbW92ZVBhdGgpIH1cbiAgICAgICAgOiBtZXRhZGF0YTtcblxuICAgIC8vIEdldCB0aGUga2V5IG9mIHRoZSBpdGVtIGJlaW5nIHJlbW92ZWRcbiAgICBjb25zdCByZW1vdmVkS2V5ID0gdGhpcy5zdGF0ZS5rZXlzW2luZGV4XTtcblxuICAgIC8vIFVwZGF0ZSBzdGF0ZSB3aGlsZSBwcmVzZXJ2aW5nIGtleXMgZm9yIHJlbWFpbmluZyBpdGVtc1xuICAgIGNvbnN0IG5ld0tleXMgPSBbLi4udGhpcy5zdGF0ZS5rZXlzXTtcbiAgICBuZXdLZXlzLnNwbGljZShpbmRleCwgMSk7XG4gICAgaXRlbXNDb2xsYXBzZWQuc3BsaWNlKGluZGV4LCAxKTtcblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXNDb2xsYXBzZWQ6IFsuLi5pdGVtc0NvbGxhcHNlZF0sXG4gICAgICBrZXlzOiBuZXdLZXlzLFxuICAgIH0pO1xuXG4gICAgLy8gQ2xlYXIgdGhlIHJlZiBmb3IgdGhlIHJlbW92ZWQgaXRlbVxuICAgIGRlbGV0ZSB0aGlzLmNoaWxkUmVmc1tyZW1vdmVkS2V5XTtcblxuICAgIGNvbnN0IG5ld1ZhbHVlID0gdmFsdWUuZGVsZXRlKGluZGV4KTtcblxuICAgIC8vIENsZWFyIGVycm9ycyBmb3IgdGhlIHJlbW92ZWQgaXRlbSBhbmQgaXRzIGNoaWxkcmVuXG4gICAgaWYgKGZpZWxkc0Vycm9ycykge1xuICAgICAgT2JqZWN0LmVudHJpZXMoZmllbGRzRXJyb3JzLnRvSlMoKSkuZm9yRWFjaCgoW2ZpZWxkSWQsIGVycm9yc10pID0+IHtcbiAgICAgICAgaWYgKGVycm9ycy5zb21lKGVyciA9PiBlcnIucGFyZW50SWRzPy5pbmNsdWRlcyhyZW1vdmVkS2V5KSkpIHtcbiAgICAgICAgICBjbGVhckZpZWxkRXJyb3JzKGZpZWxkSWQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBJZiBsaXN0IGlzIGVtcHR5LCBtYXJrIGl0IGFzIHZhbGlkXG4gICAgaWYgKG5ld1ZhbHVlLnNpemUgPT09IDApIHtcbiAgICAgIGNsZWFyRmllbGRFcnJvcnMoZm9ySUQpO1xuICAgICAgb25WYWxpZGF0ZU9iamVjdChmb3JJRCwgW10pO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSB0aGUgdmFsdWUgbGFzdCB0byBlbnN1cmUgYWxsIGVycm9yIHN0YXRlcyBhcmUgY2xlYXJlZFxuICAgIG9uQ2hhbmdlKG5ld1ZhbHVlLCBwYXJzZWRNZXRhZGF0YSk7XG4gIH07XG5cbiAgaGFuZGxlSXRlbUNvbGxhcHNlVG9nZ2xlID0gKGluZGV4LCBldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBuZXdJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLm1hcCgoY29sbGFwc2VkLCBpdGVtSW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCA9PT0gaXRlbUluZGV4KSB7XG4gICAgICAgIHJldHVybiAhY29sbGFwc2VkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbGxhcHNlZDtcbiAgICB9KTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGl0ZW1zQ29sbGFwc2VkOiBuZXdJdGVtc0NvbGxhcHNlZCxcbiAgICB9KTtcbiAgfTtcblxuICBoYW5kbGVDb2xsYXBzZUFsbFRvZ2dsZSA9IGUgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IHZhbHVlLCBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkLCBsaXN0Q29sbGFwc2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IG1pbmltaXplQ29sbGFwc2VkSXRlbXMgPSBmaWVsZC5nZXQoJ21pbmltaXplX2NvbGxhcHNlZCcsIGZhbHNlKTtcbiAgICBjb25zdCBsaXN0Q29sbGFwc2VkQnlEZWZhdWx0ID0gZmllbGQuZ2V0KCdjb2xsYXBzZWQnLCB0cnVlKTtcbiAgICBjb25zdCBhbGxJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLmV2ZXJ5KHZhbCA9PiB2YWwgPT09IHRydWUpO1xuXG4gICAgaWYgKG1pbmltaXplQ29sbGFwc2VkSXRlbXMpIHtcbiAgICAgIGxldCB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZDtcbiAgICAgIC8vIE9ubHkgYWxsb3cgY29sbGFwc2luZyBhbGwgaXRlbXMgaW4gdGhpcyBtb2RlIGJ1dCBub3Qgb3BlbmluZyBhbGwgYXQgb25jZVxuICAgICAgaWYgKCFsaXN0Q29sbGFwc2VkIHx8ICFsaXN0Q29sbGFwc2VkQnlEZWZhdWx0KSB7XG4gICAgICAgIHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCA9IEFycmF5KHZhbHVlLnNpemUpLmZpbGwoIWxpc3RDb2xsYXBzZWQpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGxpc3RDb2xsYXBzZWQ6ICFsaXN0Q29sbGFwc2VkLCBpdGVtc0NvbGxhcHNlZDogdXBkYXRlZEl0ZW1zQ29sbGFwc2VkIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgaXRlbXNDb2xsYXBzZWQ6IEFycmF5KHZhbHVlLnNpemUpLmZpbGwoIWFsbEl0ZW1zQ29sbGFwc2VkKSB9KTtcbiAgICB9XG4gIH07XG5cbiAgb2JqZWN0TGFiZWwoaXRlbSkge1xuICAgIGNvbnN0IHsgZmllbGQsIGVudHJ5IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHZhbHVlVHlwZSA9IHRoaXMuZ2V0VmFsdWVUeXBlKCk7XG4gICAgc3dpdGNoICh2YWx1ZVR5cGUpIHtcbiAgICAgIGNhc2UgdmFsdWVUeXBlcy5NSVhFRDoge1xuICAgICAgICBpZiAoIXZhbGlkYXRlSXRlbShmaWVsZCwgaXRlbSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXRlbVR5cGUgPSBnZXRUeXBlZEZpZWxkRm9yVmFsdWUoZmllbGQsIGl0ZW0pO1xuICAgICAgICBjb25zdCBsYWJlbCA9IGl0ZW1UeXBlLmdldCgnbGFiZWwnLCBpdGVtVHlwZS5nZXQoJ25hbWUnKSk7XG4gICAgICAgIC8vIGVhY2ggdHlwZSBjYW4gaGF2ZSBpdHMgb3duIHN1bW1hcnksIGJ1dCBkZWZhdWx0IHRvIHRoZSBsaXN0IHN1bW1hcnkgaWYgZXhpc3RzXG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBpdGVtVHlwZS5nZXQoJ3N1bW1hcnknLCBmaWVsZC5nZXQoJ3N1bW1hcnknKSk7XG4gICAgICAgIGNvbnN0IGxhYmVsUmV0dXJuID0gc3VtbWFyeSA/IGhhbmRsZVN1bW1hcnkoc3VtbWFyeSwgZW50cnksIGxhYmVsLCBpdGVtKSA6IGxhYmVsO1xuICAgICAgICByZXR1cm4gbGFiZWxSZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlIHZhbHVlVHlwZXMuU0lOR0xFOiB7XG4gICAgICAgIGNvbnN0IHNpbmdsZUZpZWxkID0gZmllbGQuZ2V0KCdmaWVsZCcpO1xuICAgICAgICBjb25zdCBsYWJlbCA9IHNpbmdsZUZpZWxkLmdldCgnbGFiZWwnLCBzaW5nbGVGaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBmaWVsZC5nZXQoJ3N1bW1hcnknKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGZyb21KUyh7IFtzaW5nbGVGaWVsZC5nZXQoJ25hbWUnKV06IGl0ZW0gfSk7XG4gICAgICAgIGNvbnN0IGxhYmVsUmV0dXJuID0gc3VtbWFyeSA/IGhhbmRsZVN1bW1hcnkoc3VtbWFyeSwgZW50cnksIGxhYmVsLCBkYXRhKSA6IGxhYmVsO1xuICAgICAgICByZXR1cm4gbGFiZWxSZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlIHZhbHVlVHlwZXMuTVVMVElQTEU6IHtcbiAgICAgICAgaWYgKCF2YWxpZGF0ZUl0ZW0oZmllbGQsIGl0ZW0pKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG11bHRpRmllbGRzID0gZmllbGQuZ2V0KCdmaWVsZHMnKTtcbiAgICAgICAgY29uc3QgbGFiZWxGaWVsZCA9IG11bHRpRmllbGRzICYmIG11bHRpRmllbGRzLmZpcnN0KCk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gaXRlbS5nZXQobGFiZWxGaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBmaWVsZC5nZXQoJ3N1bW1hcnknKTtcbiAgICAgICAgY29uc3QgbGFiZWxSZXR1cm4gPSBzdW1tYXJ5ID8gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgdmFsdWUsIGl0ZW0pIDogdmFsdWU7XG4gICAgICAgIHJldHVybiAobGFiZWxSZXR1cm4gfHwgYE5vICR7bGFiZWxGaWVsZC5nZXQoJ25hbWUnKX1gKS50b1N0cmluZygpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBvblNvcnRFbmQgPSAoeyBvbGRJbmRleCwgbmV3SW5kZXggfSkgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCwga2V5cyB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIC8vIFVwZGF0ZSB2YWx1ZVxuICAgIGNvbnN0IGl0ZW0gPSB2YWx1ZS5nZXQob2xkSW5kZXgpO1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gdmFsdWUuZGVsZXRlKG9sZEluZGV4KS5pbnNlcnQobmV3SW5kZXgsIGl0ZW0pO1xuICAgIHRoaXMucHJvcHMub25DaGFuZ2UobmV3VmFsdWUpO1xuXG4gICAgLy8gVXBkYXRlIGNvbGxhcHNpbmdcbiAgICBjb25zdCBjb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZFtvbGRJbmRleF07XG4gICAgaXRlbXNDb2xsYXBzZWQuc3BsaWNlKG9sZEluZGV4LCAxKTtcbiAgICBjb25zdCB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgPSBbLi4uaXRlbXNDb2xsYXBzZWRdO1xuICAgIHVwZGF0ZWRJdGVtc0NvbGxhcHNlZC5zcGxpY2UobmV3SW5kZXgsIDAsIGNvbGxhcHNlZCk7XG5cbiAgICAvLyBNb3ZlIGtleXMgdG8gbWFpbnRhaW4gcmVsYXRpb25zaGlwc1xuICAgIGNvbnN0IG1vdmVkS2V5ID0ga2V5c1tvbGRJbmRleF07XG4gICAgY29uc3QgdXBkYXRlZEtleXMgPSBbLi4ua2V5c107XG4gICAgdXBkYXRlZEtleXMuc3BsaWNlKG9sZEluZGV4LCAxKTtcbiAgICB1cGRhdGVkS2V5cy5zcGxpY2UobmV3SW5kZXgsIDAsIG1vdmVkS2V5KTtcblxuICAgIHRoaXMuc2V0U3RhdGUoeyBpdGVtc0NvbGxhcHNlZDogdXBkYXRlZEl0ZW1zQ29sbGFwc2VkLCBrZXlzOiB1cGRhdGVkS2V5cyB9KTtcbiAgfTtcblxuICBoYXNFcnJvciA9IGluZGV4ID0+IHtcbiAgICBjb25zdCB7IGZpZWxkc0Vycm9ycyB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoZmllbGRzRXJyb3JzICYmIGZpZWxkc0Vycm9ycy5zaXplID4gMCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZmllbGRzRXJyb3JzLnRvSlMoKSkuc29tZShhcnIgPT5cbiAgICAgICAgYXJyLnNvbWUoZXJyID0+IGVyci5wYXJlbnRJZHMgJiYgZXJyLnBhcmVudElkcy5pbmNsdWRlcyh0aGlzLnN0YXRlLmtleXNbaW5kZXhdKSksXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICBmb2N1cyhwYXRoKSB7XG4gICAgY29uc3QgW2luZGV4LCAuLi5yZW1haW5pbmdQYXRoXSA9IHBhdGguc3BsaXQoJy4nKTtcblxuICAgIGlmICh0aGlzLnN0YXRlLmxpc3RDb2xsYXBzZWQgfHwgdGhpcy5zdGF0ZS5pdGVtc0NvbGxhcHNlZFtpbmRleF0pIHtcbiAgICAgIGNvbnN0IG5ld0l0ZW1zQ29sbGFwc2VkID0gWy4uLnRoaXMuc3RhdGUuaXRlbXNDb2xsYXBzZWRdO1xuICAgICAgbmV3SXRlbXNDb2xsYXBzZWRbaW5kZXhdID0gZmFsc2U7XG4gICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICB7XG4gICAgICAgICAgbGlzdENvbGxhcHNlZDogZmFsc2UsXG4gICAgICAgICAgaXRlbXNDb2xsYXBzZWQ6IG5ld0l0ZW1zQ29sbGFwc2VkLFxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5zdGF0ZS5rZXlzW2luZGV4XTtcbiAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jaGlsZFJlZnNba2V5XTtcbiAgICAgICAgICBpZiAoY29udHJvbD8uZm9jdXMpIHtcbiAgICAgICAgICAgIGNvbnRyb2wuZm9jdXMocmVtYWluaW5nUGF0aC5qb2luKCcuJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuc3RhdGUua2V5c1tpbmRleF07XG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jaGlsZFJlZnNba2V5XTtcbiAgICAgIGlmIChjb250cm9sPy5mb2N1cykge1xuICAgICAgICBjb250cm9sLmZvY3VzKHJlbWFpbmluZ1BhdGguam9pbignLicpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZGlzcGxheS1uYW1lXG4gIHJlbmRlckl0ZW0gPSAoaXRlbSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjbGFzc05hbWVXcmFwcGVyLFxuICAgICAgZWRpdG9yQ29udHJvbCxcbiAgICAgIG9uVmFsaWRhdGVPYmplY3QsXG4gICAgICBtZXRhZGF0YSxcbiAgICAgIGNsZWFyRmllbGRFcnJvcnMsXG4gICAgICBmaWVsZHNFcnJvcnMsXG4gICAgICBjb250cm9sUmVmLFxuICAgICAgcmVzb2x2ZVdpZGdldCxcbiAgICAgIHBhcmVudElkcyxcbiAgICAgIGZvcklELFxuICAgICAgdCxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQsIGtleXMgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgY29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWRbaW5kZXhdO1xuICAgIGNvbnN0IGtleSA9IGtleXNbaW5kZXhdO1xuICAgIGxldCBmaWVsZCA9IHRoaXMucHJvcHMuZmllbGQ7XG4gICAgY29uc3QgaGFzRXJyb3IgPSB0aGlzLmhhc0Vycm9yKGluZGV4KTtcbiAgICBjb25zdCBpc1ZhcmlhYmxlVHlwZXNMaXN0ID0gdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5NSVhFRDtcbiAgICBpZiAoaXNWYXJpYWJsZVR5cGVzTGlzdCkge1xuICAgICAgZmllbGQgPSBnZXRUeXBlZEZpZWxkRm9yVmFsdWUoZmllbGQsIGl0ZW0pO1xuICAgICAgaWYgKCFmaWVsZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJFcnJvbmVvdXNUeXBlZEl0ZW0oaW5kZXgsIGl0ZW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8U29ydGFibGVMaXN0SXRlbVxuICAgICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBjb2xsYXBzZWQgJiYgc3R5bGVzLmxpc3RDb250cm9sSXRlbUNvbGxhcHNlZF19XG4gICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIGlkPXtrZXl9XG4gICAgICAgIGtleXM9e2tleXN9XG4gICAgICA+XG4gICAgICAgIHtpc1ZhcmlhYmxlVHlwZXNMaXN0ICYmIChcbiAgICAgICAgICA8TGFiZWxDb21wb25lbnRcbiAgICAgICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgICAgIGlzQWN0aXZlPXtmYWxzZX1cbiAgICAgICAgICAgIGhhc0Vycm9ycz17aGFzRXJyb3J9XG4gICAgICAgICAgICB1bmlxdWVGaWVsZElkPXt0aGlzLnVuaXF1ZUZpZWxkSWR9XG4gICAgICAgICAgICBpc0ZpZWxkT3B0aW9uYWw9e2ZpZWxkLmdldCgncmVxdWlyZWQnKSA9PT0gZmFsc2V9XG4gICAgICAgICAgICB0PXt0fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIDxTdHlsZWRMaXN0SXRlbVRvcEJhclxuICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICAgIG9uQ29sbGFwc2VUb2dnbGU9e3BhcnRpYWwodGhpcy5oYW5kbGVJdGVtQ29sbGFwc2VUb2dnbGUsIGluZGV4KX1cbiAgICAgICAgICBkcmFnSGFuZGxlPXtEcmFnSGFuZGxlfVxuICAgICAgICAgIGlkPXtrZXl9XG4gICAgICAgICAgYWxsb3dSZW1vdmU9e2ZpZWxkLmdldCgnYWxsb3dfcmVtb3ZlJywgdHJ1ZSl9XG4gICAgICAgICAgYWxsb3dSZW9yZGVyPXtmaWVsZC5nZXQoJ2FsbG93X3Jlb3JkZXInLCB0cnVlKX1cbiAgICAgICAgICBvblJlbW92ZT17cGFydGlhbCh0aGlzLmhhbmRsZVJlbW92ZSwgaW5kZXgpfVxuICAgICAgICAgIGRhdGEtdGVzdGlkPXtgc3R5bGVkLWxpc3QtaXRlbS10b3AtYmFyLSR7a2V5fWB9XG4gICAgICAgIC8+XG4gICAgICAgIDxOZXN0ZWRPYmplY3RMYWJlbCBjb2xsYXBzZWQ9e2NvbGxhcHNlZH0gZXJyb3I9e2hhc0Vycm9yfT5cbiAgICAgICAgICB7dGhpcy5vYmplY3RMYWJlbChpdGVtKX1cbiAgICAgICAgPC9OZXN0ZWRPYmplY3RMYWJlbD5cbiAgICAgICAgPENsYXNzTmFtZXM+XG4gICAgICAgICAgeyh7IGNzcywgY3ggfSkgPT4gKFxuICAgICAgICAgICAgPE9iamVjdENvbnRyb2xcbiAgICAgICAgICAgICAgY2xhc3NOYW1lV3JhcHBlcj17Y3goY2xhc3NOYW1lV3JhcHBlciwge1xuICAgICAgICAgICAgICAgIFtjc3NgXG4gICAgICAgICAgICAgICAgICAke3N0eWxlU3RyaW5ncy5jb2xsYXBzZWRPYmplY3RDb250cm9sfTtcbiAgICAgICAgICAgICAgICBgXTogY29sbGFwc2VkLFxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgdmFsdWU9e2l0ZW19XG4gICAgICAgICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgICAgICAgb25DaGFuZ2VPYmplY3Q9e3RoaXMuaGFuZGxlQ2hhbmdlRm9yKGluZGV4KX1cbiAgICAgICAgICAgICAgZWRpdG9yQ29udHJvbD17ZWRpdG9yQ29udHJvbH1cbiAgICAgICAgICAgICAgcmVzb2x2ZVdpZGdldD17cmVzb2x2ZVdpZGdldH1cbiAgICAgICAgICAgICAgbWV0YWRhdGE9e21ldGFkYXRhfVxuICAgICAgICAgICAgICBmb3JMaXN0XG4gICAgICAgICAgICAgIG9uVmFsaWRhdGVPYmplY3Q9e29uVmFsaWRhdGVPYmplY3R9XG4gICAgICAgICAgICAgIGNsZWFyRmllbGRFcnJvcnM9e2NsZWFyRmllbGRFcnJvcnN9XG4gICAgICAgICAgICAgIGZpZWxkc0Vycm9ycz17ZmllbGRzRXJyb3JzfVxuICAgICAgICAgICAgICByZWY9e3RoaXMucHJvY2Vzc0NvbnRyb2xSZWZ9XG4gICAgICAgICAgICAgIGNvbnRyb2xSZWY9e2NvbnRyb2xSZWZ9XG4gICAgICAgICAgICAgIHZhbGlkYXRpb25LZXk9e2tleX1cbiAgICAgICAgICAgICAgY29sbGFwc2VkPXtjb2xsYXBzZWR9XG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgb2JqZWN0LWNvbnRyb2wtJHtrZXl9YH1cbiAgICAgICAgICAgICAgaGFzRXJyb3I9e2hhc0Vycm9yfVxuICAgICAgICAgICAgICBwYXJlbnRJZHM9e1suLi5wYXJlbnRJZHMsIGZvcklELCBrZXldfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L0NsYXNzTmFtZXM+XG4gICAgICA8L1NvcnRhYmxlTGlzdEl0ZW0+XG4gICAgKTtcbiAgfTtcblxuICByZW5kZXJFcnJvbmVvdXNUeXBlZEl0ZW0oaW5kZXgsIGl0ZW0pIHtcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMucHJvcHMuZmllbGQ7XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZ2V0RXJyb3JNZXNzYWdlRm9yVHlwZWRGaWVsZEFuZFZhbHVlKGZpZWxkLCBpdGVtKTtcbiAgICBjb25zdCBrZXkgPSBgaXRlbS0ke2luZGV4fWA7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTb3J0YWJsZUxpc3RJdGVtXG4gICAgICAgIGNzcz17W3N0eWxlcy5saXN0Q29udHJvbEl0ZW0sIHN0eWxlcy5saXN0Q29udHJvbEl0ZW1Db2xsYXBzZWRdfVxuICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAgIGtleT17a2V5fVxuICAgICAgPlxuICAgICAgICA8U3R5bGVkTGlzdEl0ZW1Ub3BCYXJcbiAgICAgICAgICBvbkNvbGxhcHNlVG9nZ2xlPXtudWxsfVxuICAgICAgICAgIG9uUmVtb3ZlPXtwYXJ0aWFsKHRoaXMuaGFuZGxlUmVtb3ZlLCBpbmRleCwga2V5KX1cbiAgICAgICAgICBkcmFnSGFuZGxlPXtEcmFnSGFuZGxlfVxuICAgICAgICAgIGlkPXtrZXl9XG4gICAgICAgIC8+XG4gICAgICAgIDxOZXN0ZWRPYmplY3RMYWJlbCBjb2xsYXBzZWQ9e3RydWV9IGVycm9yPXt0cnVlfT5cbiAgICAgICAgICB7ZXJyb3JNZXNzYWdlfVxuICAgICAgICA8L05lc3RlZE9iamVjdExhYmVsPlxuICAgICAgPC9Tb3J0YWJsZUxpc3RJdGVtPlxuICAgICk7XG4gIH1cblxuICByZW5kZXJMaXN0Q29udHJvbCgpIHtcbiAgICBjb25zdCB7IHZhbHVlLCBmb3JJRCwgZmllbGQsIGNsYXNzTmFtZVdyYXBwZXIsIHQgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCwgbGlzdENvbGxhcHNlZCwga2V5cyB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBpdGVtcyA9IHZhbHVlIHx8IExpc3QoKTtcbiAgICBjb25zdCBsYWJlbCA9IGZpZWxkLmdldCgnbGFiZWwnLCBmaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgY29uc3QgbGFiZWxTaW5ndWxhciA9IGZpZWxkLmdldCgnbGFiZWxfc2luZ3VsYXInKSB8fCBmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpO1xuICAgIGNvbnN0IGxpc3RMYWJlbCA9IGl0ZW1zLnNpemUgPT09IDEgPyBsYWJlbFNpbmd1bGFyLnRvTG93ZXJDYXNlKCkgOiBsYWJlbC50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IG1pbmltaXplQ29sbGFwc2VkSXRlbXMgPSBmaWVsZC5nZXQoJ21pbmltaXplX2NvbGxhcHNlZCcsIGZhbHNlKTtcbiAgICBjb25zdCBhbGxJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLmV2ZXJ5KHZhbCA9PiB2YWwgPT09IHRydWUpO1xuICAgIGNvbnN0IHNlbGZDb2xsYXBzZWQgPSBhbGxJdGVtc0NvbGxhcHNlZCAmJiAobGlzdENvbGxhcHNlZCB8fCAhbWluaW1pemVDb2xsYXBzZWRJdGVtcyk7XG5cbiAgICBjb25zdCBpdGVtc0FycmF5ID0ga2V5cy5tYXAoa2V5ID0+ICh7IGlkOiBrZXkgfSkpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxDbGFzc05hbWVzPlxuICAgICAgICB7KHsgY3gsIGNzcyB9KSA9PiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgaWQ9e2ZvcklEfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjeChcbiAgICAgICAgICAgICAgY2xhc3NOYW1lV3JhcHBlcixcbiAgICAgICAgICAgICAgY3NzYFxuICAgICAgICAgICAgICAgICR7c3R5bGVTdHJpbmdzLm9iamVjdFdpZGdldFRvcEJhckNvbnRhaW5lcn1cbiAgICAgICAgICAgICAgYCxcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPE9iamVjdFdpZGdldFRvcEJhclxuICAgICAgICAgICAgICBhbGxvd0FkZD17ZmllbGQuZ2V0KCdhbGxvd19hZGQnLCB0cnVlKX1cbiAgICAgICAgICAgICAgb25BZGQ9e3RoaXMuaGFuZGxlQWRkfVxuICAgICAgICAgICAgICB0eXBlcz17ZmllbGQuZ2V0KFRZUEVTX0tFWSwgbnVsbCl9XG4gICAgICAgICAgICAgIG9uQWRkVHlwZT17dHlwZSA9PiB0aGlzLmhhbmRsZUFkZFR5cGUodHlwZSwgcmVzb2x2ZUZpZWxkS2V5VHlwZShmaWVsZCkpfVxuICAgICAgICAgICAgICBoZWFkaW5nPXtgJHtpdGVtcy5zaXplfSAke2xpc3RMYWJlbH1gfVxuICAgICAgICAgICAgICBsYWJlbD17bGFiZWxTaW5ndWxhci50b0xvd2VyQ2FzZSgpfVxuICAgICAgICAgICAgICBvbkNvbGxhcHNlVG9nZ2xlPXt0aGlzLmhhbmRsZUNvbGxhcHNlQWxsVG9nZ2xlfVxuICAgICAgICAgICAgICBjb2xsYXBzZWQ9e3NlbGZDb2xsYXBzZWR9XG4gICAgICAgICAgICAgIHQ9e3R9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgeyghc2VsZkNvbGxhcHNlZCB8fCAhbWluaW1pemVDb2xsYXBzZWRJdGVtcykgJiYgKFxuICAgICAgICAgICAgICA8U29ydGFibGVMaXN0IGl0ZW1zPXtpdGVtc0FycmF5fSBrZXlzPXtrZXlzfSBvblNvcnRFbmQ9e3RoaXMub25Tb3J0RW5kfT5cbiAgICAgICAgICAgICAgICB7aXRlbXMubWFwKHRoaXMucmVuZGVySXRlbSl9XG4gICAgICAgICAgICAgIDwvU29ydGFibGVMaXN0PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvQ2xhc3NOYW1lcz5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVySW5wdXQoKSB7XG4gICAgY29uc3QgeyBmb3JJRCwgY2xhc3NOYW1lV3JhcHBlciB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IHZhbHVlIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIGlkPXtmb3JJRH1cbiAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgIG9uRm9jdXM9e3RoaXMuaGFuZGxlRm9jdXN9XG4gICAgICAgIG9uQmx1cj17dGhpcy5oYW5kbGVCbHVyfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZVdyYXBwZXJ9XG4gICAgICAvPlxuICAgICk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuZ2V0VmFsdWVUeXBlKCkgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlckxpc3RDb250cm9sKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlcklucHV0KCk7XG4gICAgfVxuICB9XG59XG4iXX0= */",
|
|
63
58
|
toString: _EMOTION_STRINGIFIED_CSS_ERROR__
|
|
64
59
|
}
|
|
65
60
|
};
|
|
@@ -114,7 +109,7 @@ function SortableListItem(props) {
|
|
|
114
109
|
sortable: true,
|
|
115
110
|
ref: setNodeRef,
|
|
116
111
|
style: style,
|
|
117
|
-
css: [styles.listControlItem, collapsed && styles.listControlItemCollapsed, ";label:SortableListItem;" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF3SE0iLCJmaWxlIjoiLi4vLi4vc3JjL0xpc3RDb250cm9sLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgSW1tdXRhYmxlUHJvcFR5cGVzIGZyb20gJ3JlYWN0LWltbXV0YWJsZS1wcm9wdHlwZXMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xuaW1wb3J0IHsgY3NzLCBDbGFzc05hbWVzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgTGlzdCwgTWFwLCBmcm9tSlMgfSBmcm9tICdpbW11dGFibGUnO1xuaW1wb3J0IHsgcGFydGlhbCwgaXNFbXB0eSwgdW5pcXVlSWQgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgdjQgYXMgdXVpZCB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IERlY2FwQ21zV2lkZ2V0T2JqZWN0IGZyb20gJ2RlY2FwLWNtcy13aWRnZXQtb2JqZWN0JztcbmltcG9ydCB7XG4gIERuZENvbnRleHQsXG4gIE1vdXNlU2Vuc29yLFxuICBUb3VjaFNlbnNvcixcbiAgY2xvc2VzdENlbnRlcixcbiAgdXNlU2Vuc29yLFxuICB1c2VTZW5zb3JzLFxufSBmcm9tICdAZG5kLWtpdC9jb3JlJztcbmltcG9ydCB7IFNvcnRhYmxlQ29udGV4dCwgdXNlU29ydGFibGUgfSBmcm9tICdAZG5kLWtpdC9zb3J0YWJsZSc7XG5pbXBvcnQgeyByZXN0cmljdFRvUGFyZW50RWxlbWVudCB9IGZyb20gJ0BkbmQta2l0L21vZGlmaWVycyc7XG5pbXBvcnQgeyBDU1MgfSBmcm9tICdAZG5kLWtpdC91dGlsaXRpZXMnO1xuaW1wb3J0IHtcbiAgTGlzdEl0ZW1Ub3BCYXIsXG4gIE9iamVjdFdpZGdldFRvcEJhcixcbiAgY29sb3JzLFxuICBsZW5ndGhzLFxuICBGaWVsZExhYmVsLFxufSBmcm9tICdkZWNhcC1jbXMtdWktZGVmYXVsdCc7XG5pbXBvcnQgeyBzdHJpbmdUZW1wbGF0ZSwgdmFsaWRhdGlvbnMgfSBmcm9tICdkZWNhcC1jbXMtbGliLXdpZGdldHMnO1xuXG5pbXBvcnQge1xuICBUWVBFU19LRVksXG4gIGdldFR5cGVkRmllbGRGb3JWYWx1ZSxcbiAgcmVzb2x2ZUZpZWxkS2V5VHlwZSxcbiAgZ2V0RXJyb3JNZXNzYWdlRm9yVHlwZWRGaWVsZEFuZFZhbHVlLFxufSBmcm9tICcuL3R5cGVkTGlzdEhlbHBlcnMnO1xuXG5jb25zdCBPYmplY3RDb250cm9sID0gRGVjYXBDbXNXaWRnZXRPYmplY3QuY29udHJvbENvbXBvbmVudDtcblxuY29uc3QgTGlzdEl0ZW0gPSBzdHlsZWQuZGl2KCk7XG5cbmNvbnN0IFN0eWxlZExpc3RJdGVtVG9wQmFyID0gc3R5bGVkKExpc3RJdGVtVG9wQmFyKWBcbiAgYmFja2dyb3VuZC1jb2xvcjogJHtjb2xvcnMudGV4dEZpZWxkQm9yZGVyfTtcbmA7XG5cbmNvbnN0IE5lc3RlZE9iamVjdExhYmVsID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogJHtwcm9wcyA9PiAocHJvcHMuY29sbGFwc2VkID8gJ2Jsb2NrJyA6ICdub25lJyl9O1xuICBib3JkZXItdG9wOiAwO1xuICBjb2xvcjogJHtwcm9wcyA9PiAocHJvcHMuZXJyb3IgPyBjb2xvcnMuZXJyb3JUZXh0IDogJ2luaGVyaXQnKX07XG4gIGJhY2tncm91bmQtY29sb3I6ICR7Y29sb3JzLnRleHRGaWVsZEJvcmRlcn07XG4gIHBhZGRpbmc6IDEzcHg7XG4gIGJvcmRlci1yYWRpdXM6IDAgMCAke2xlbmd0aHMuYm9yZGVyUmFkaXVzfSAke2xlbmd0aHMuYm9yZGVyUmFkaXVzfTtcbmA7XG5cbmNvbnN0IHN0eWxlU3RyaW5ncyA9IHtcbiAgY29sbGFwc2VkT2JqZWN0Q29udHJvbDogYFxuICAgIGRpc3BsYXk6IG5vbmU7XG4gIGAsXG4gIG9iamVjdFdpZGdldFRvcEJhckNvbnRhaW5lcjogYFxuICAgIHBhZGRpbmc6ICR7bGVuZ3Rocy5vYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXJQYWRkaW5nfTtcbiAgYCxcbn07XG5cbmNvbnN0IHN0eWxlcyA9IHtcbiAgbGlzdENvbnRyb2xJdGVtOiBjc3NgXG4gICAgbWFyZ2luLXRvcDogMThweDtcblxuICAgICY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgICBtYXJnaW4tdG9wOiAyNnB4O1xuICAgIH1cbiAgYCxcbiAgbGlzdENvbnRyb2xJdGVtQ29sbGFwc2VkOiBjc3NgXG4gICAgcGFkZGluZy1ib3R0b206IDA7XG4gIGAsXG59O1xuXG5mdW5jdGlvbiBTb3J0YWJsZUxpc3QoeyBpdGVtcywgY2hpbGRyZW4sIG9uU29ydEVuZCwga2V5cyB9KSB7XG4gIGNvbnN0IGFjdGl2YXRpb25Db25zdHJhaW50ID0geyBkaXN0YW5jZTogNCB9O1xuICBjb25zdCBzZW5zb3JzID0gdXNlU2Vuc29ycyhcbiAgICB1c2VTZW5zb3IoTW91c2VTZW5zb3IsIHsgYWN0aXZhdGlvbkNvbnN0cmFpbnQgfSksXG4gICAgdXNlU2Vuc29yKFRvdWNoU2Vuc29yLCB7IGFjdGl2YXRpb25Db25zdHJhaW50IH0pLFxuICApO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZVNvcnRFbmQoeyBhY3RpdmUsIG92ZXIgfSkge1xuICAgIG9uU29ydEVuZCh7XG4gICAgICBvbGRJbmRleDoga2V5cy5pbmRleE9mKGFjdGl2ZS5pZCksXG4gICAgICBuZXdJbmRleDoga2V5cy5pbmRleE9mKG92ZXIuaWQpLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2PlxuICAgICAgPERuZENvbnRleHRcbiAgICAgICAgbW9kaWZpZXJzPXtbcmVzdHJpY3RUb1BhcmVudEVsZW1lbnRdfVxuICAgICAgICBjb2xsaXNpb25EZXRlY3Rpb249e2Nsb3Nlc3RDZW50ZXJ9XG4gICAgICAgIHNlbnNvcnM9e3NlbnNvcnN9XG4gICAgICAgIG9uRHJhZ0VuZD17aGFuZGxlU29ydEVuZH1cbiAgICAgID5cbiAgICAgICAgPFNvcnRhYmxlQ29udGV4dCBpdGVtcz17aXRlbXN9PntjaGlsZHJlbn08L1NvcnRhYmxlQ29udGV4dD5cbiAgICAgIDwvRG5kQ29udGV4dD5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gU29ydGFibGVMaXN0SXRlbShwcm9wcykge1xuICBjb25zdCB7IHNldE5vZGVSZWYsIHRyYW5zZm9ybSwgdHJhbnNpdGlvbiB9ID0gdXNlU29ydGFibGUoe1xuICAgIGlkOiBwcm9wcy5pZCxcbiAgfSk7XG5cbiAgY29uc3Qgc3R5bGUgPSB7XG4gICAgdHJhbnNmb3JtOiBDU1MuVHJhbnNmb3JtLnRvU3RyaW5nKHRyYW5zZm9ybSksXG4gICAgdHJhbnNpdGlvbixcbiAgfTtcblxuICBjb25zdCB7IGNvbGxhcHNlZCB9ID0gcHJvcHM7XG5cbiAgcmV0dXJuIChcbiAgICA8TGlzdEl0ZW1cbiAgICAgIHNvcnRhYmxlXG4gICAgICByZWY9e3NldE5vZGVSZWZ9XG4gICAgICBzdHlsZT17c3R5bGV9XG4gICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBjb2xsYXBzZWQgJiYgc3R5bGVzLmxpc3RDb250cm9sSXRlbUNvbGxhcHNlZF19XG4gICAgPlxuICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgIDwvTGlzdEl0ZW0+XG4gICk7XG59XG5cbmZ1bmN0aW9uIERyYWdIYW5kbGUoeyBjaGlsZHJlbiwgaWQgfSkge1xuICBjb25zdCB7IGF0dHJpYnV0ZXMsIGxpc3RlbmVycyB9ID0gdXNlU29ydGFibGUoe1xuICAgIGlkLFxuICB9KTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgey4uLmF0dHJpYnV0ZXN9IHsuLi5saXN0ZW5lcnN9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5jb25zdCB2YWx1ZVR5cGVzID0ge1xuICBTSU5HTEU6ICdTSU5HTEUnLFxuICBNVUxUSVBMRTogJ01VTFRJUExFJyxcbiAgTUlYRUQ6ICdNSVhFRCcsXG59O1xuXG5mdW5jdGlvbiBoYW5kbGVTdW1tYXJ5KHN1bW1hcnksIGVudHJ5LCBsYWJlbCwgaXRlbSkge1xuICBjb25zdCBkYXRhID0gc3RyaW5nVGVtcGxhdGUuYWRkRmlsZVRlbXBsYXRlRmllbGRzKFxuICAgIGVudHJ5LmdldCgncGF0aCcpLFxuICAgIGl0ZW0uc2V0KCdmaWVsZHMubGFiZWwnLCBsYWJlbCksXG4gICk7XG4gIHJldHVybiBzdHJpbmdUZW1wbGF0ZS5jb21waWxlU3RyaW5nVGVtcGxhdGUoc3VtbWFyeSwgbnVsbCwgJycsIGRhdGEpO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUl0ZW0oZmllbGQsIGl0ZW0pIHtcbiAgaWYgKCFNYXAuaXNNYXAoaXRlbSkpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgJyR7ZmllbGQuZ2V0KCduYW1lJyl9JyBmaWVsZCBpdGVtIHZhbHVlIHZhbHVlIHNob3VsZCBiZSBhIG1hcCBidXQgaXMgYSAnJHt0eXBlb2YgaXRlbX0nYCxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gTGFiZWxDb21wb25lbnQoeyBmaWVsZCwgaXNBY3RpdmUsIGhhc0Vycm9ycywgdW5pcXVlRmllbGRJZCwgaXNGaWVsZE9wdGlvbmFsLCB0IH0pIHtcbiAgY29uc3QgbGFiZWwgPSBgJHtmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpfWA7XG4gIHJldHVybiAoXG4gICAgPEZpZWxkTGFiZWwgaXNBY3RpdmU9e2lzQWN0aXZlfSBoYXNFcnJvcnM9e2hhc0Vycm9yc30gaHRtbEZvcj17dW5pcXVlRmllbGRJZH0+XG4gICAgICB7bGFiZWx9IHtgJHtpc0ZpZWxkT3B0aW9uYWwgPyBgICgke3QoJ2VkaXRvci5lZGl0b3JDb250cm9sLmZpZWxkLm9wdGlvbmFsJyl9KWAgOiAnJ31gfVxuICAgIDwvRmllbGRMYWJlbD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlzdENvbnRyb2wgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjaGlsZFJlZnMgPSB7fTtcblxuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIG1ldGFkYXRhOiBJbW11dGFibGVQcm9wVHlwZXMubWFwLFxuICAgIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uQ2hhbmdlT2JqZWN0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uVmFsaWRhdGVPYmplY3Q6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdmFsaWRhdGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdmFsdWU6IEltbXV0YWJsZVByb3BUeXBlcy5saXN0LFxuICAgIGZpZWxkOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGZvcklEOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNvbnRyb2xSZWY6IFByb3BUeXBlcy5mdW5jLFxuICAgIG1lZGlhUGF0aHM6IEltbXV0YWJsZVByb3BUeXBlcy5tYXAuaXNSZXF1aXJlZCxcbiAgICBnZXRBc3NldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvbk9wZW5NZWRpYUxpYnJhcnk6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25BZGRBc3NldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvblJlbW92ZUluc2VydGVkTWVkaWE6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgY2xhc3NOYW1lV3JhcHBlcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHNldEFjdGl2ZVN0eWxlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHNldEluYWN0aXZlU3R5bGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgZWRpdG9yQ29udHJvbDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWQsXG4gICAgcmVzb2x2ZVdpZGdldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBjbGVhckZpZWxkRXJyb3JzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGZpZWxkc0Vycm9yczogSW1tdXRhYmxlUHJvcFR5cGVzLm1hcC5pc1JlcXVpcmVkLFxuICAgIGVudHJ5OiBJbW11dGFibGVQcm9wVHlwZXMubWFwLmlzUmVxdWlyZWQsXG4gICAgdDogUHJvcFR5cGVzLmZ1bmMsXG4gIH07XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICB2YWx1ZTogTGlzdCgpLFxuICAgIHBhcmVudElkczogW10sXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgY29uc3QgeyBmaWVsZCwgdmFsdWUgfSA9IHByb3BzO1xuICAgIGNvbnN0IGxpc3RDb2xsYXBzZWQgPSBmaWVsZC5nZXQoJ2NvbGxhcHNlZCcsIHRydWUpO1xuICAgIGNvbnN0IGl0ZW1zQ29sbGFwc2VkID0gKHZhbHVlICYmIEFycmF5KHZhbHVlLnNpemUpLmZpbGwobGlzdENvbGxhcHNlZCkpIHx8IFtdO1xuICAgIGNvbnN0IGtleXMgPSAodmFsdWUgJiYgQXJyYXkuZnJvbSh7IGxlbmd0aDogdmFsdWUuc2l6ZSB9LCAoKSA9PiB1dWlkKCkpKSB8fCBbXTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBsaXN0Q29sbGFwc2VkLFxuICAgICAgaXRlbXNDb2xsYXBzZWQsXG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZVRvU3RyaW5nKHZhbHVlKSxcbiAgICAgIGtleXMsXG4gICAgfTtcbiAgfVxuXG4gIHZhbHVlVG9TdHJpbmcgPSB2YWx1ZSA9PiB7XG4gICAgbGV0IHN0cmluZ1ZhbHVlO1xuICAgIGlmIChMaXN0LmlzTGlzdCh2YWx1ZSkgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHN0cmluZ1ZhbHVlID0gdmFsdWUuam9pbignLCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBFeHBlY3RlZCBMaXN0IHZhbHVlIHRvIGJlIGFuIGFycmF5IGJ1dCByZWNlaXZlZCAnJHt2YWx1ZX0nIHdpdGggdHlwZSBvZiAnJHt0eXBlb2YgdmFsdWV9Jy4gUGxlYXNlIGNoZWNrIHRoZSB2YWx1ZSBwcm92aWRlZCB0byB0aGUgJyR7dGhpcy5wcm9wcy5maWVsZC5nZXQoXG4gICAgICAgICAgJ25hbWUnLFxuICAgICAgICApfScgZmllbGRgLFxuICAgICAgKTtcbiAgICAgIHN0cmluZ1ZhbHVlID0gU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0cmluZ1ZhbHVlLnJlcGxhY2UoLywoW15cXHNdfCQpL2csICcsICQxJyk7XG4gIH07XG5cbiAgZ2V0VmFsdWVUeXBlID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgZmllbGQgfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKGZpZWxkLmdldCgnZmllbGRzJykpIHtcbiAgICAgIHJldHVybiB2YWx1ZVR5cGVzLk1VTFRJUExFO1xuICAgIH0gZWxzZSBpZiAoZmllbGQuZ2V0KCdmaWVsZCcpKSB7XG4gICAgICByZXR1cm4gdmFsdWVUeXBlcy5TSU5HTEU7XG4gICAgfSBlbHNlIGlmIChmaWVsZC5nZXQoVFlQRVNfS0VZKSkge1xuICAgICAgcmV0dXJuIHZhbHVlVHlwZXMuTUlYRUQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfTtcblxuICB1bmlxdWVGaWVsZElkID0gdW5pcXVlSWQoYCR7dGhpcy5wcm9wcy5maWVsZC5nZXQoJ25hbWUnKX0tZmllbGQtYCk7XG4gIC8qKlxuICAgKiBBbHdheXMgdXBkYXRlIHNvIHRoYXQgZWFjaCBuZXN0ZWQgd2lkZ2V0IGhhcyB0aGUgb3B0aW9uIHRvIHVwZGF0ZS4gVGhpcyBpc1xuICAgKiByZXF1aXJlZCBiZWNhdXNlIENvbnRyb2xIT0MgcHJvdmlkZXMgYSBkZWZhdWx0IGBzaG91bGRDb21wb25lbnRVcGRhdGVgXG4gICAqIHdoaWNoIG9ubHkgdXBkYXRlcyBpZiB0aGUgdmFsdWUgY2hhbmdlcywgYnV0IGV2ZXJ5IHdpZGdldCBtdXN0IGJlIGFsbG93ZWRcbiAgICogdG8gb3ZlcnJpZGUgdGhpcy5cbiAgICovXG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZSgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGhhbmRsZUNoYW5nZSA9IGUgPT4ge1xuICAgIGNvbnN0IHsgb25DaGFuZ2UgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLnN0YXRlLnZhbHVlO1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gZS50YXJnZXQudmFsdWUudHJpbSgpO1xuICAgIGNvbnN0IGxpc3RWYWx1ZSA9IG5ld1ZhbHVlID8gbmV3VmFsdWUuc3BsaXQoJywnKSA6IFtdO1xuICAgIGlmIChuZXdWYWx1ZS5tYXRjaCgvLCQvKSAmJiBvbGRWYWx1ZS5tYXRjaCgvLCAkLykpIHtcbiAgICAgIGxpc3RWYWx1ZS5wb3AoKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IHRoaXMudmFsdWVUb1N0cmluZyhsaXN0VmFsdWUpO1xuICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogcGFyc2VkVmFsdWUgfSk7XG4gICAgb25DaGFuZ2UoTGlzdChsaXN0VmFsdWUubWFwKHZhbCA9PiB2YWwudHJpbSgpKSkpO1xuICB9O1xuXG4gIGhhbmRsZUZvY3VzID0gKCkgPT4ge1xuICAgIHRoaXMucHJvcHMuc2V0QWN0aXZlU3R5bGUoKTtcbiAgfTtcblxuICBoYW5kbGVCbHVyID0gZSA9PiB7XG4gICAgY29uc3QgbGlzdFZhbHVlID0gZS50YXJnZXQudmFsdWVcbiAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAubWFwKGVsID0+IGVsLnRyaW0oKSlcbiAgICAgIC5maWx0ZXIoZWwgPT4gZWwpO1xuICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogdGhpcy52YWx1ZVRvU3RyaW5nKGxpc3RWYWx1ZSkgfSk7XG4gICAgdGhpcy5wcm9wcy5zZXRJbmFjdGl2ZVN0eWxlKCk7XG4gIH07XG5cbiAgaGFuZGxlQWRkID0gZSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHsgZmllbGQgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPVxuICAgICAgdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5TSU5HTEVcbiAgICAgICAgPyB0aGlzLnNpbmdsZURlZmF1bHQoKVxuICAgICAgICA6IGZyb21KUyh0aGlzLm11bHRpcGxlRGVmYXVsdChmaWVsZC5nZXQoJ2ZpZWxkcycpKSk7XG4gICAgdGhpcy5hZGRJdGVtKHBhcnNlZFZhbHVlKTtcbiAgfTtcblxuICBzaW5nbGVEZWZhdWx0ID0gKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmZpZWxkLmdldEluKFsnZmllbGQnLCAnZGVmYXVsdCddLCBudWxsKTtcbiAgfTtcblxuICBtdWx0aXBsZURlZmF1bHQgPSBmaWVsZHMgPT4ge1xuICAgIHJldHVybiB0aGlzLmdldEZpZWxkc0RlZmF1bHQoZmllbGRzKTtcbiAgfTtcblxuICBoYW5kbGVBZGRUeXBlID0gKHR5cGUsIHR5cGVLZXkpID0+IHtcbiAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IGZyb21KUyh0aGlzLm1peGVkRGVmYXVsdCh0eXBlS2V5LCB0eXBlKSk7XG4gICAgdGhpcy5hZGRJdGVtKHBhcnNlZFZhbHVlKTtcbiAgfTtcblxuICBtaXhlZERlZmF1bHQgPSAodHlwZUtleSwgdHlwZSkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkVHlwZSA9IHRoaXMucHJvcHMuZmllbGQuZ2V0KFRZUEVTX0tFWSkuZmluZChmID0+IGYuZ2V0KCduYW1lJykgPT09IHR5cGUpO1xuICAgIGNvbnN0IGZpZWxkcyA9IHNlbGVjdGVkVHlwZS5nZXQoJ2ZpZWxkcycpIHx8IFtzZWxlY3RlZFR5cGUuZ2V0KCdmaWVsZCcpXTtcblxuICAgIHJldHVybiB0aGlzLmdldEZpZWxkc0RlZmF1bHQoZmllbGRzLCB7IFt0eXBlS2V5XTogdHlwZSB9KTtcbiAgfTtcblxuICBnZXRGaWVsZHNEZWZhdWx0ID0gKGZpZWxkcywgaW5pdGlhbFZhbHVlID0ge30pID0+IHtcbiAgICByZXR1cm4gZmllbGRzLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiB7XG4gICAgICBjb25zdCBzdWJmaWVsZHMgPSBpdGVtLmdldCgnZmllbGQnKSB8fCBpdGVtLmdldCgnZmllbGRzJyk7XG4gICAgICBjb25zdCBvYmplY3QgPSBpdGVtLmdldCgnd2lkZ2V0JykgPT0gJ29iamVjdCc7XG4gICAgICBjb25zdCBuYW1lID0gaXRlbS5nZXQoJ25hbWUnKTtcbiAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IGl0ZW0uZ2V0KCdkZWZhdWx0JywgbnVsbCk7XG5cbiAgICAgIGlmIChMaXN0LmlzTGlzdChzdWJmaWVsZHMpICYmIG9iamVjdCkge1xuICAgICAgICBjb25zdCBzdWJEZWZhdWx0VmFsdWUgPSB0aGlzLmdldEZpZWxkc0RlZmF1bHQoc3ViZmllbGRzKTtcbiAgICAgICAgIWlzRW1wdHkoc3ViRGVmYXVsdFZhbHVlKSAmJiAoYWNjW25hbWVdID0gc3ViRGVmYXVsdFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH1cblxuICAgICAgaWYgKE1hcC5pc01hcChzdWJmaWVsZHMpICYmIG9iamVjdCkge1xuICAgICAgICBjb25zdCBzdWJEZWZhdWx0VmFsdWUgPSB0aGlzLmdldEZpZWxkc0RlZmF1bHQoW3N1YmZpZWxkc10pO1xuICAgICAgICAhaXNFbXB0eShzdWJEZWZhdWx0VmFsdWUpICYmIChhY2NbbmFtZV0gPSBzdWJEZWZhdWx0VmFsdWUpO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGVmYXVsdFZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGFjY1tuYW1lXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBpbml0aWFsVmFsdWUpO1xuICB9O1xuXG4gIGFkZEl0ZW0gPSBwYXJzZWRWYWx1ZSA9PiB7XG4gICAgY29uc3QgeyB2YWx1ZSwgb25DaGFuZ2UsIGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGFkZFRvVG9wID0gZmllbGQuZ2V0KCdhZGRfdG9fdG9wJywgZmFsc2UpO1xuXG4gICAgY29uc3QgaXRlbUtleSA9IHV1aWQoKTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGl0ZW1zQ29sbGFwc2VkOiBhZGRUb1RvcFxuICAgICAgICA/IFtmYWxzZSwgLi4udGhpcy5zdGF0ZS5pdGVtc0NvbGxhcHNlZF1cbiAgICAgICAgOiBbLi4udGhpcy5zdGF0ZS5pdGVtc0NvbGxhcHNlZCwgZmFsc2VdLFxuICAgICAga2V5czogYWRkVG9Ub3AgPyBbaXRlbUtleSwgLi4udGhpcy5zdGF0ZS5rZXlzXSA6IFsuLi50aGlzLnN0YXRlLmtleXMsIGl0ZW1LZXldLFxuICAgIH0pO1xuXG4gICAgY29uc3QgbGlzdFZhbHVlID0gdmFsdWUgfHwgTGlzdCgpO1xuICAgIGlmIChhZGRUb1RvcCkge1xuICAgICAgb25DaGFuZ2UobGlzdFZhbHVlLnVuc2hpZnQocGFyc2VkVmFsdWUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb25DaGFuZ2UobGlzdFZhbHVlLnB1c2gocGFyc2VkVmFsdWUpKTtcbiAgICB9XG4gIH07XG5cbiAgcHJvY2Vzc0NvbnRyb2xSZWYgPSByZWYgPT4ge1xuICAgIGlmICghcmVmKSByZXR1cm47XG4gICAgY29uc3Qge1xuICAgICAgcHJvcHM6IHsgdmFsaWRhdGlvbktleToga2V5IH0sXG4gICAgfSA9IHJlZjtcbiAgICB0aGlzLmNoaWxkUmVmc1trZXldID0gcmVmO1xuICAgIHRoaXMucHJvcHMuY29udHJvbFJlZj8uKHRoaXMpO1xuICB9O1xuXG4gIHZhbGlkYXRlID0gKCkgPT4ge1xuICAgIC8vIEZpcnN0IHZhbGlkYXRlIGNoaWxkIHdpZGdldHMgaWYgdGhpcyBpcyBhIGNvbXBsZXggbGlzdFxuICAgIGNvbnN0IGhhc0NoaWxkV2lkZ2V0cyA9IHRoaXMuZ2V0VmFsdWVUeXBlKCkgJiYgT2JqZWN0LmtleXModGhpcy5jaGlsZFJlZnMpLmxlbmd0aCA+IDA7XG4gICAgaWYgKGhhc0NoaWxkV2lkZ2V0cykge1xuICAgICAgT2JqZWN0LnZhbHVlcyh0aGlzLmNoaWxkUmVmcykuZm9yRWFjaCh3aWRnZXQgPT4ge1xuICAgICAgICB3aWRnZXQ/LnZhbGlkYXRlPy4oKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnByb3BzLnZhbGlkYXRlKCk7XG4gICAgfVxuICAgIHRoaXMucHJvcHMub25WYWxpZGF0ZU9iamVjdCh0aGlzLnByb3BzLmZvcklELCB0aGlzLnZhbGlkYXRlU2l6ZSgpKTtcbiAgfTtcblxuICB2YWxpZGF0ZVNpemUgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBmaWVsZCwgdmFsdWUsIHQgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgbWluID0gZmllbGQuZ2V0KCdtaW4nKTtcbiAgICBjb25zdCBtYXggPSBmaWVsZC5nZXQoJ21heCcpO1xuICAgIGNvbnN0IHJlcXVpcmVkID0gZmllbGQuZ2V0KCdyZXF1aXJlZCcsIHRydWUpO1xuXG4gICAgaWYgKCFyZXF1aXJlZCAmJiAhdmFsdWU/LnNpemUpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBlcnJvciA9IHZhbGlkYXRpb25zLnZhbGlkYXRlTWluTWF4KFxuICAgICAgdCxcbiAgICAgIGZpZWxkLmdldCgnbGFiZWwnLCBmaWVsZC5nZXQoJ25hbWUnKSksXG4gICAgICB2YWx1ZSxcbiAgICAgIG1pbixcbiAgICAgIG1heCxcbiAgICApO1xuXG4gICAgcmV0dXJuIGVycm9yID8gW2Vycm9yXSA6IFtdO1xuICB9O1xuXG4gIC8qKlxuICAgKiBJbiBjYXNlIHRoZSBgb25DaGFuZ2VPYmplY3RgIGZ1bmN0aW9uIGlzIGZyb3plbiBieSBhIGNoaWxkIHdpZGdldCBpbXBsZW1lbnRhdGlvbixcbiAgICogZS5nLiB3aGVuIGRlYm91bmNlZCwgYWx3YXlzIGdldCB0aGUgbGF0ZXN0IG9iamVjdCB2YWx1ZSBpbnN0ZWFkIG9mIHVzaW5nXG4gICAqIGB0aGlzLnByb3BzLnZhbHVlYCBkaXJlY3RseS5cbiAgICovXG4gIGdldE9iamVjdFZhbHVlID0gaWR4ID0+IHRoaXMucHJvcHMudmFsdWUuZ2V0KGlkeCkgfHwgTWFwKCk7XG5cbiAgaGFuZGxlQ2hhbmdlRm9yKGluZGV4KSB7XG4gICAgcmV0dXJuIChmLCBuZXdWYWx1ZSwgbmV3TWV0YWRhdGEpID0+IHtcbiAgICAgIGNvbnN0IHsgdmFsdWUsIG1ldGFkYXRhLCBvbkNoYW5nZSwgZmllbGQgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCBjb2xsZWN0aW9uTmFtZSA9IGZpZWxkLmdldCgnbmFtZScpO1xuICAgICAgY29uc3QgbGlzdEZpZWxkT2JqZWN0V2lkZ2V0ID0gZmllbGQuZ2V0SW4oWydmaWVsZCcsICd3aWRnZXQnXSkgPT09ICdvYmplY3QnO1xuICAgICAgY29uc3Qgd2l0aE5hbWVLZXkgPVxuICAgICAgICB0aGlzLmdldFZhbHVlVHlwZSgpICE9PSB2YWx1ZVR5cGVzLlNJTkdMRSB8fFxuICAgICAgICAodGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5TSU5HTEUgJiYgbGlzdEZpZWxkT2JqZWN0V2lkZ2V0KTtcbiAgICAgIGNvbnN0IG5ld09iamVjdFZhbHVlID0gd2l0aE5hbWVLZXlcbiAgICAgICAgPyB0aGlzLmdldE9iamVjdFZhbHVlKGluZGV4KS5zZXQoZi5nZXQoJ25hbWUnKSwgbmV3VmFsdWUpXG4gICAgICAgIDogbmV3VmFsdWU7XG4gICAgICBjb25zdCBwYXJzZWRNZXRhZGF0YSA9IHtcbiAgICAgICAgW2NvbGxlY3Rpb25OYW1lXTogT2JqZWN0LmFzc2lnbihtZXRhZGF0YSA/IG1ldGFkYXRhLnRvSlMoKSA6IHt9LCBuZXdNZXRhZGF0YSB8fCB7fSksXG4gICAgICB9O1xuICAgICAgb25DaGFuZ2UodmFsdWUuc2V0KGluZGV4LCBuZXdPYmplY3RWYWx1ZSksIHBhcnNlZE1ldGFkYXRhKTtcbiAgICB9O1xuICB9XG5cbiAgaGFuZGxlUmVtb3ZlID0gKGluZGV4LCBldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCB7XG4gICAgICB2YWx1ZSxcbiAgICAgIG1ldGFkYXRhLFxuICAgICAgb25DaGFuZ2UsXG4gICAgICBmaWVsZCxcbiAgICAgIGNsZWFyRmllbGRFcnJvcnMsXG4gICAgICBvblZhbGlkYXRlT2JqZWN0LFxuICAgICAgZm9ySUQsXG4gICAgICBmaWVsZHNFcnJvcnMsXG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBjb25zdCBjb2xsZWN0aW9uTmFtZSA9IGZpZWxkLmdldCgnbmFtZScpO1xuICAgIGNvbnN0IGlzU2luZ2xlRmllbGQgPSB0aGlzLmdldFZhbHVlVHlwZSgpID09PSB2YWx1ZVR5cGVzLlNJTkdMRTtcblxuICAgIGNvbnN0IG1ldGFkYXRhUmVtb3ZlUGF0aCA9IGlzU2luZ2xlRmllbGQgPyB2YWx1ZS5nZXQoaW5kZXgpIDogdmFsdWUuZ2V0KGluZGV4KS52YWx1ZVNlcSgpO1xuICAgIGNvbnN0IHBhcnNlZE1ldGFkYXRhID1cbiAgICAgIG1ldGFkYXRhICYmICFtZXRhZGF0YS5pc0VtcHR5KClcbiAgICAgICAgPyB7IFtjb2xsZWN0aW9uTmFtZV06IG1ldGFkYXRhLnJlbW92ZUluKG1ldGFkYXRhUmVtb3ZlUGF0aCkgfVxuICAgICAgICA6IG1ldGFkYXRhO1xuXG4gICAgLy8gR2V0IHRoZSBrZXkgb2YgdGhlIGl0ZW0gYmVpbmcgcmVtb3ZlZFxuICAgIGNvbnN0IHJlbW92ZWRLZXkgPSB0aGlzLnN0YXRlLmtleXNbaW5kZXhdO1xuXG4gICAgLy8gVXBkYXRlIHN0YXRlIHdoaWxlIHByZXNlcnZpbmcga2V5cyBmb3IgcmVtYWluaW5nIGl0ZW1zXG4gICAgY29uc3QgbmV3S2V5cyA9IFsuLi50aGlzLnN0YXRlLmtleXNdO1xuICAgIG5ld0tleXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICBpdGVtc0NvbGxhcHNlZC5zcGxpY2UoaW5kZXgsIDEpO1xuXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBpdGVtc0NvbGxhcHNlZDogWy4uLml0ZW1zQ29sbGFwc2VkXSxcbiAgICAgIGtleXM6IG5ld0tleXMsXG4gICAgfSk7XG5cbiAgICAvLyBDbGVhciB0aGUgcmVmIGZvciB0aGUgcmVtb3ZlZCBpdGVtXG4gICAgZGVsZXRlIHRoaXMuY2hpbGRSZWZzW3JlbW92ZWRLZXldO1xuXG4gICAgY29uc3QgbmV3VmFsdWUgPSB2YWx1ZS5kZWxldGUoaW5kZXgpO1xuXG4gICAgLy8gQ2xlYXIgZXJyb3JzIGZvciB0aGUgcmVtb3ZlZCBpdGVtIGFuZCBpdHMgY2hpbGRyZW5cbiAgICBpZiAoZmllbGRzRXJyb3JzKSB7XG4gICAgICBPYmplY3QuZW50cmllcyhmaWVsZHNFcnJvcnMudG9KUygpKS5mb3JFYWNoKChbZmllbGRJZCwgZXJyb3JzXSkgPT4ge1xuICAgICAgICBpZiAoZXJyb3JzLnNvbWUoZXJyID0+IGVyci5wYXJlbnRJZHM/LmluY2x1ZGVzKHJlbW92ZWRLZXkpKSkge1xuICAgICAgICAgIGNsZWFyRmllbGRFcnJvcnMoZmllbGRJZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIElmIGxpc3QgaXMgZW1wdHksIG1hcmsgaXQgYXMgdmFsaWRcbiAgICBpZiAobmV3VmFsdWUuc2l6ZSA9PT0gMCkge1xuICAgICAgY2xlYXJGaWVsZEVycm9ycyhmb3JJRCk7XG4gICAgICBvblZhbGlkYXRlT2JqZWN0KGZvcklELCBbXSk7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHRoZSB2YWx1ZSBsYXN0IHRvIGVuc3VyZSBhbGwgZXJyb3Igc3RhdGVzIGFyZSBjbGVhcmVkXG4gICAgb25DaGFuZ2UobmV3VmFsdWUsIHBhcnNlZE1ldGFkYXRhKTtcbiAgfTtcblxuICBoYW5kbGVJdGVtQ29sbGFwc2VUb2dnbGUgPSAoaW5kZXgsIGV2ZW50KSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IG5ld0l0ZW1zQ29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWQubWFwKChjb2xsYXBzZWQsIGl0ZW1JbmRleCkgPT4ge1xuICAgICAgaWYgKGluZGV4ID09PSBpdGVtSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuICFjb2xsYXBzZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29sbGFwc2VkO1xuICAgIH0pO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXNDb2xsYXBzZWQ6IG5ld0l0ZW1zQ29sbGFwc2VkLFxuICAgIH0pO1xuICB9O1xuXG4gIGhhbmRsZUNvbGxhcHNlQWxsVG9nZ2xlID0gZSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHsgdmFsdWUsIGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQsIGxpc3RDb2xsYXBzZWQgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgbWluaW1pemVDb2xsYXBzZWRJdGVtcyA9IGZpZWxkLmdldCgnbWluaW1pemVfY29sbGFwc2VkJywgZmFsc2UpO1xuICAgIGNvbnN0IGxpc3RDb2xsYXBzZWRCeURlZmF1bHQgPSBmaWVsZC5nZXQoJ2NvbGxhcHNlZCcsIHRydWUpO1xuICAgIGNvbnN0IGFsbEl0ZW1zQ29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWQuZXZlcnkodmFsID0+IHZhbCA9PT0gdHJ1ZSk7XG5cbiAgICBpZiAobWluaW1pemVDb2xsYXBzZWRJdGVtcykge1xuICAgICAgbGV0IHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkO1xuICAgICAgLy8gT25seSBhbGxvdyBjb2xsYXBzaW5nIGFsbCBpdGVtcyBpbiB0aGlzIG1vZGUgYnV0IG5vdCBvcGVuaW5nIGFsbCBhdCBvbmNlXG4gICAgICBpZiAoIWxpc3RDb2xsYXBzZWQgfHwgIWxpc3RDb2xsYXBzZWRCeURlZmF1bHQpIHtcbiAgICAgICAgdXBkYXRlZEl0ZW1zQ29sbGFwc2VkID0gQXJyYXkodmFsdWUuc2l6ZSkuZmlsbCghbGlzdENvbGxhcHNlZCk7XG4gICAgICB9XG4gICAgICB0aGlzLnNldFN0YXRlKHsgbGlzdENvbGxhcHNlZDogIWxpc3RDb2xsYXBzZWQsIGl0ZW1zQ29sbGFwc2VkOiB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBpdGVtc0NvbGxhcHNlZDogQXJyYXkodmFsdWUuc2l6ZSkuZmlsbCghYWxsSXRlbXNDb2xsYXBzZWQpIH0pO1xuICAgIH1cbiAgfTtcblxuICBvYmplY3RMYWJlbChpdGVtKSB7XG4gICAgY29uc3QgeyBmaWVsZCwgZW50cnkgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgdmFsdWVUeXBlID0gdGhpcy5nZXRWYWx1ZVR5cGUoKTtcbiAgICBzd2l0Y2ggKHZhbHVlVHlwZSkge1xuICAgICAgY2FzZSB2YWx1ZVR5cGVzLk1JWEVEOiB7XG4gICAgICAgIGlmICghdmFsaWRhdGVJdGVtKGZpZWxkLCBpdGVtKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpdGVtVHlwZSA9IGdldFR5cGVkRmllbGRGb3JWYWx1ZShmaWVsZCwgaXRlbSk7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gaXRlbVR5cGUuZ2V0KCdsYWJlbCcsIGl0ZW1UeXBlLmdldCgnbmFtZScpKTtcbiAgICAgICAgLy8gZWFjaCB0eXBlIGNhbiBoYXZlIGl0cyBvd24gc3VtbWFyeSwgYnV0IGRlZmF1bHQgdG8gdGhlIGxpc3Qgc3VtbWFyeSBpZiBleGlzdHNcbiAgICAgICAgY29uc3Qgc3VtbWFyeSA9IGl0ZW1UeXBlLmdldCgnc3VtbWFyeScsIGZpZWxkLmdldCgnc3VtbWFyeScpKTtcbiAgICAgICAgY29uc3QgbGFiZWxSZXR1cm4gPSBzdW1tYXJ5ID8gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgbGFiZWwsIGl0ZW0pIDogbGFiZWw7XG4gICAgICAgIHJldHVybiBsYWJlbFJldHVybjtcbiAgICAgIH1cbiAgICAgIGNhc2UgdmFsdWVUeXBlcy5TSU5HTEU6IHtcbiAgICAgICAgY29uc3Qgc2luZ2xlRmllbGQgPSBmaWVsZC5nZXQoJ2ZpZWxkJyk7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gc2luZ2xlRmllbGQuZ2V0KCdsYWJlbCcsIHNpbmdsZUZpZWxkLmdldCgnbmFtZScpKTtcbiAgICAgICAgY29uc3Qgc3VtbWFyeSA9IGZpZWxkLmdldCgnc3VtbWFyeScpO1xuICAgICAgICBjb25zdCBkYXRhID0gZnJvbUpTKHsgW3NpbmdsZUZpZWxkLmdldCgnbmFtZScpXTogaXRlbSB9KTtcbiAgICAgICAgY29uc3QgbGFiZWxSZXR1cm4gPSBzdW1tYXJ5ID8gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgbGFiZWwsIGRhdGEpIDogbGFiZWw7XG4gICAgICAgIHJldHVybiBsYWJlbFJldHVybjtcbiAgICAgIH1cbiAgICAgIGNhc2UgdmFsdWVUeXBlcy5NVUxUSVBMRToge1xuICAgICAgICBpZiAoIXZhbGlkYXRlSXRlbShmaWVsZCwgaXRlbSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbXVsdGlGaWVsZHMgPSBmaWVsZC5nZXQoJ2ZpZWxkcycpO1xuICAgICAgICBjb25zdCBsYWJlbEZpZWxkID0gbXVsdGlGaWVsZHMgJiYgbXVsdGlGaWVsZHMuZmlyc3QoKTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpdGVtLmdldChsYWJlbEZpZWxkLmdldCgnbmFtZScpKTtcbiAgICAgICAgY29uc3Qgc3VtbWFyeSA9IGZpZWxkLmdldCgnc3VtbWFyeScpO1xuICAgICAgICBjb25zdCBsYWJlbFJldHVybiA9IHN1bW1hcnkgPyBoYW5kbGVTdW1tYXJ5KHN1bW1hcnksIGVudHJ5LCB2YWx1ZSwgaXRlbSkgOiB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIChsYWJlbFJldHVybiB8fCBgTm8gJHtsYWJlbEZpZWxkLmdldCgnbmFtZScpfWApLnRvU3RyaW5nKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIG9uU29ydEVuZCA9ICh7IG9sZEluZGV4LCBuZXdJbmRleCB9KSA9PiB7XG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkLCBrZXlzIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgLy8gVXBkYXRlIHZhbHVlXG4gICAgY29uc3QgaXRlbSA9IHZhbHVlLmdldChvbGRJbmRleCk7XG4gICAgY29uc3QgbmV3VmFsdWUgPSB2YWx1ZS5kZWxldGUob2xkSW5kZXgpLmluc2VydChuZXdJbmRleCwgaXRlbSk7XG4gICAgdGhpcy5wcm9wcy5vbkNoYW5nZShuZXdWYWx1ZSk7XG5cbiAgICAvLyBVcGRhdGUgY29sbGFwc2luZ1xuICAgIGNvbnN0IGNvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkW29sZEluZGV4XTtcbiAgICBpdGVtc0NvbGxhcHNlZC5zcGxpY2Uob2xkSW5kZXgsIDEpO1xuICAgIGNvbnN0IHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCA9IFsuLi5pdGVtc0NvbGxhcHNlZF07XG4gICAgdXBkYXRlZEl0ZW1zQ29sbGFwc2VkLnNwbGljZShuZXdJbmRleCwgMCwgY29sbGFwc2VkKTtcblxuICAgIC8vIE1vdmUga2V5cyB0byBtYWludGFpbiByZWxhdGlvbnNoaXBzXG4gICAgY29uc3QgbW92ZWRLZXkgPSBrZXlzW29sZEluZGV4XTtcbiAgICBjb25zdCB1cGRhdGVkS2V5cyA9IFsuLi5rZXlzXTtcbiAgICB1cGRhdGVkS2V5cy5zcGxpY2Uob2xkSW5kZXgsIDEpO1xuICAgIHVwZGF0ZWRLZXlzLnNwbGljZShuZXdJbmRleCwgMCwgbW92ZWRLZXkpO1xuXG4gICAgdGhpcy5zZXRTdGF0ZSh7IGl0ZW1zQ29sbGFwc2VkOiB1cGRhdGVkSXRlbXNDb2xsYXBzZWQsIGtleXM6IHVwZGF0ZWRLZXlzIH0pO1xuICB9O1xuXG4gIGhhc0Vycm9yID0gaW5kZXggPT4ge1xuICAgIGNvbnN0IHsgZmllbGRzRXJyb3JzIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChmaWVsZHNFcnJvcnMgJiYgZmllbGRzRXJyb3JzLnNpemUgPiAwKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhmaWVsZHNFcnJvcnMudG9KUygpKS5zb21lKGFyciA9PlxuICAgICAgICBhcnIuc29tZShlcnIgPT4gZXJyLnBhcmVudElkcyAmJiBlcnIucGFyZW50SWRzLmluY2x1ZGVzKHRoaXMuc3RhdGUua2V5c1tpbmRleF0pKSxcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIGZvY3VzKHBhdGgpIHtcbiAgICBjb25zdCBbaW5kZXgsIC4uLnJlbWFpbmluZ1BhdGhdID0gcGF0aC5zcGxpdCgnLicpO1xuXG4gICAgaWYgKHRoaXMuc3RhdGUubGlzdENvbGxhcHNlZCB8fCB0aGlzLnN0YXRlLml0ZW1zQ29sbGFwc2VkW2luZGV4XSkge1xuICAgICAgY29uc3QgbmV3SXRlbXNDb2xsYXBzZWQgPSBbLi4udGhpcy5zdGF0ZS5pdGVtc0NvbGxhcHNlZF07XG4gICAgICBuZXdJdGVtc0NvbGxhcHNlZFtpbmRleF0gPSBmYWxzZTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgIHtcbiAgICAgICAgICBsaXN0Q29sbGFwc2VkOiBmYWxzZSxcbiAgICAgICAgICBpdGVtc0NvbGxhcHNlZDogbmV3SXRlbXNDb2xsYXBzZWQsXG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBjb25zdCBrZXkgPSB0aGlzLnN0YXRlLmtleXNbaW5kZXhdO1xuICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmNoaWxkUmVmc1trZXldO1xuICAgICAgICAgIGlmIChjb250cm9sPy5mb2N1cykge1xuICAgICAgICAgICAgY29udHJvbC5mb2N1cyhyZW1haW5pbmdQYXRoLmpvaW4oJy4nKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qga2V5ID0gdGhpcy5zdGF0ZS5rZXlzW2luZGV4XTtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmNoaWxkUmVmc1trZXldO1xuICAgICAgaWYgKGNvbnRyb2w/LmZvY3VzKSB7XG4gICAgICAgIGNvbnRyb2wuZm9jdXMocmVtYWluaW5nUGF0aC5qb2luKCcuJykpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9kaXNwbGF5LW5hbWVcbiAgcmVuZGVySXRlbSA9IChpdGVtLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGNsYXNzTmFtZVdyYXBwZXIsXG4gICAgICBlZGl0b3JDb250cm9sLFxuICAgICAgb25WYWxpZGF0ZU9iamVjdCxcbiAgICAgIG1ldGFkYXRhLFxuICAgICAgY2xlYXJGaWVsZEVycm9ycyxcbiAgICAgIGZpZWxkc0Vycm9ycyxcbiAgICAgIGNvbnRyb2xSZWYsXG4gICAgICByZXNvbHZlV2lkZ2V0LFxuICAgICAgcGFyZW50SWRzLFxuICAgICAgZm9ySUQsXG4gICAgICB0LFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCwga2V5cyB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBjb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZFtpbmRleF07XG4gICAgY29uc3Qga2V5ID0ga2V5c1tpbmRleF07XG4gICAgbGV0IGZpZWxkID0gdGhpcy5wcm9wcy5maWVsZDtcbiAgICBjb25zdCBoYXNFcnJvciA9IHRoaXMuaGFzRXJyb3IoaW5kZXgpO1xuICAgIGNvbnN0IGlzVmFyaWFibGVUeXBlc0xpc3QgPSB0aGlzLmdldFZhbHVlVHlwZSgpID09PSB2YWx1ZVR5cGVzLk1JWEVEO1xuICAgIGlmIChpc1ZhcmlhYmxlVHlwZXNMaXN0KSB7XG4gICAgICBmaWVsZCA9IGdldFR5cGVkRmllbGRGb3JWYWx1ZShmaWVsZCwgaXRlbSk7XG4gICAgICBpZiAoIWZpZWxkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlckVycm9uZW91c1R5cGVkSXRlbShpbmRleCwgaXRlbSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTb3J0YWJsZUxpc3RJdGVtXG4gICAgICAgIGNzcz17W3N0eWxlcy5saXN0Q29udHJvbEl0ZW0sIGNvbGxhcHNlZCAmJiBzdHlsZXMubGlzdENvbnRyb2xJdGVtQ29sbGFwc2VkXX1cbiAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICBrZXk9e2tleX1cbiAgICAgICAgaWQ9e2tleX1cbiAgICAgICAga2V5cz17a2V5c31cbiAgICAgID5cbiAgICAgICAge2lzVmFyaWFibGVUeXBlc0xpc3QgJiYgKFxuICAgICAgICAgIDxMYWJlbENvbXBvbmVudFxuICAgICAgICAgICAgZmllbGQ9e2ZpZWxkfVxuICAgICAgICAgICAgaXNBY3RpdmU9e2ZhbHNlfVxuICAgICAgICAgICAgaGFzRXJyb3JzPXtoYXNFcnJvcn1cbiAgICAgICAgICAgIHVuaXF1ZUZpZWxkSWQ9e3RoaXMudW5pcXVlRmllbGRJZH1cbiAgICAgICAgICAgIGlzRmllbGRPcHRpb25hbD17ZmllbGQuZ2V0KCdyZXF1aXJlZCcpID09PSBmYWxzZX1cbiAgICAgICAgICAgIHQ9e3R9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAgPFN0eWxlZExpc3RJdGVtVG9wQmFyXG4gICAgICAgICAgY29sbGFwc2VkPXtjb2xsYXBzZWR9XG4gICAgICAgICAgb25Db2xsYXBzZVRvZ2dsZT17cGFydGlhbCh0aGlzLmhhbmRsZUl0ZW1Db2xsYXBzZVRvZ2dsZSwgaW5kZXgpfVxuICAgICAgICAgIGRyYWdIYW5kbGU9e0RyYWdIYW5kbGV9XG4gICAgICAgICAgaWQ9e2tleX1cbiAgICAgICAgICBvblJlbW92ZT17cGFydGlhbCh0aGlzLmhhbmRsZVJlbW92ZSwgaW5kZXgpfVxuICAgICAgICAgIGRhdGEtdGVzdGlkPXtgc3R5bGVkLWxpc3QtaXRlbS10b3AtYmFyLSR7a2V5fWB9XG4gICAgICAgIC8+XG4gICAgICAgIDxOZXN0ZWRPYmplY3RMYWJlbCBjb2xsYXBzZWQ9e2NvbGxhcHNlZH0gZXJyb3I9e2hhc0Vycm9yfT5cbiAgICAgICAgICB7dGhpcy5vYmplY3RMYWJlbChpdGVtKX1cbiAgICAgICAgPC9OZXN0ZWRPYmplY3RMYWJlbD5cbiAgICAgICAgPENsYXNzTmFtZXM+XG4gICAgICAgICAgeyh7IGNzcywgY3ggfSkgPT4gKFxuICAgICAgICAgICAgPE9iamVjdENvbnRyb2xcbiAgICAgICAgICAgICAgY2xhc3NOYW1lV3JhcHBlcj17Y3goY2xhc3NOYW1lV3JhcHBlciwge1xuICAgICAgICAgICAgICAgIFtjc3NgXG4gICAgICAgICAgICAgICAgICAke3N0eWxlU3RyaW5ncy5jb2xsYXBzZWRPYmplY3RDb250cm9sfTtcbiAgICAgICAgICAgICAgICBgXTogY29sbGFwc2VkLFxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgdmFsdWU9e2l0ZW19XG4gICAgICAgICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgICAgICAgb25DaGFuZ2VPYmplY3Q9e3RoaXMuaGFuZGxlQ2hhbmdlRm9yKGluZGV4KX1cbiAgICAgICAgICAgICAgZWRpdG9yQ29udHJvbD17ZWRpdG9yQ29udHJvbH1cbiAgICAgICAgICAgICAgcmVzb2x2ZVdpZGdldD17cmVzb2x2ZVdpZGdldH1cbiAgICAgICAgICAgICAgbWV0YWRhdGE9e21ldGFkYXRhfVxuICAgICAgICAgICAgICBmb3JMaXN0XG4gICAgICAgICAgICAgIG9uVmFsaWRhdGVPYmplY3Q9e29uVmFsaWRhdGVPYmplY3R9XG4gICAgICAgICAgICAgIGNsZWFyRmllbGRFcnJvcnM9e2NsZWFyRmllbGRFcnJvcnN9XG4gICAgICAgICAgICAgIGZpZWxkc0Vycm9ycz17ZmllbGRzRXJyb3JzfVxuICAgICAgICAgICAgICByZWY9e3RoaXMucHJvY2Vzc0NvbnRyb2xSZWZ9XG4gICAgICAgICAgICAgIGNvbnRyb2xSZWY9e2NvbnRyb2xSZWZ9XG4gICAgICAgICAgICAgIHZhbGlkYXRpb25LZXk9e2tleX1cbiAgICAgICAgICAgICAgY29sbGFwc2VkPXtjb2xsYXBzZWR9XG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgb2JqZWN0LWNvbnRyb2wtJHtrZXl9YH1cbiAgICAgICAgICAgICAgaGFzRXJyb3I9e2hhc0Vycm9yfVxuICAgICAgICAgICAgICBwYXJlbnRJZHM9e1suLi5wYXJlbnRJZHMsIGZvcklELCBrZXldfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L0NsYXNzTmFtZXM+XG4gICAgICA8L1NvcnRhYmxlTGlzdEl0ZW0+XG4gICAgKTtcbiAgfTtcblxuICByZW5kZXJFcnJvbmVvdXNUeXBlZEl0ZW0oaW5kZXgsIGl0ZW0pIHtcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMucHJvcHMuZmllbGQ7XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZ2V0RXJyb3JNZXNzYWdlRm9yVHlwZWRGaWVsZEFuZFZhbHVlKGZpZWxkLCBpdGVtKTtcbiAgICBjb25zdCBrZXkgPSBgaXRlbS0ke2luZGV4fWA7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTb3J0YWJsZUxpc3RJdGVtXG4gICAgICAgIGNzcz17W3N0eWxlcy5saXN0Q29udHJvbEl0ZW0sIHN0eWxlcy5saXN0Q29udHJvbEl0ZW1Db2xsYXBzZWRdfVxuICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAgIGtleT17a2V5fVxuICAgICAgPlxuICAgICAgICA8U3R5bGVkTGlzdEl0ZW1Ub3BCYXJcbiAgICAgICAgICBvbkNvbGxhcHNlVG9nZ2xlPXtudWxsfVxuICAgICAgICAgIG9uUmVtb3ZlPXtwYXJ0aWFsKHRoaXMuaGFuZGxlUmVtb3ZlLCBpbmRleCwga2V5KX1cbiAgICAgICAgICBkcmFnSGFuZGxlPXtEcmFnSGFuZGxlfVxuICAgICAgICAgIGlkPXtrZXl9XG4gICAgICAgIC8+XG4gICAgICAgIDxOZXN0ZWRPYmplY3RMYWJlbCBjb2xsYXBzZWQ9e3RydWV9IGVycm9yPXt0cnVlfT5cbiAgICAgICAgICB7ZXJyb3JNZXNzYWdlfVxuICAgICAgICA8L05lc3RlZE9iamVjdExhYmVsPlxuICAgICAgPC9Tb3J0YWJsZUxpc3RJdGVtPlxuICAgICk7XG4gIH1cblxuICByZW5kZXJMaXN0Q29udHJvbCgpIHtcbiAgICBjb25zdCB7IHZhbHVlLCBmb3JJRCwgZmllbGQsIGNsYXNzTmFtZVdyYXBwZXIsIHQgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCwgbGlzdENvbGxhcHNlZCwga2V5cyB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBpdGVtcyA9IHZhbHVlIHx8IExpc3QoKTtcbiAgICBjb25zdCBsYWJlbCA9IGZpZWxkLmdldCgnbGFiZWwnLCBmaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgY29uc3QgbGFiZWxTaW5ndWxhciA9IGZpZWxkLmdldCgnbGFiZWxfc2luZ3VsYXInKSB8fCBmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpO1xuICAgIGNvbnN0IGxpc3RMYWJlbCA9IGl0ZW1zLnNpemUgPT09IDEgPyBsYWJlbFNpbmd1bGFyLnRvTG93ZXJDYXNlKCkgOiBsYWJlbC50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IG1pbmltaXplQ29sbGFwc2VkSXRlbXMgPSBmaWVsZC5nZXQoJ21pbmltaXplX2NvbGxhcHNlZCcsIGZhbHNlKTtcbiAgICBjb25zdCBhbGxJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLmV2ZXJ5KHZhbCA9PiB2YWwgPT09IHRydWUpO1xuICAgIGNvbnN0IHNlbGZDb2xsYXBzZWQgPSBhbGxJdGVtc0NvbGxhcHNlZCAmJiAobGlzdENvbGxhcHNlZCB8fCAhbWluaW1pemVDb2xsYXBzZWRJdGVtcyk7XG5cbiAgICBjb25zdCBpdGVtc0FycmF5ID0ga2V5cy5tYXAoa2V5ID0+ICh7IGlkOiBrZXkgfSkpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxDbGFzc05hbWVzPlxuICAgICAgICB7KHsgY3gsIGNzcyB9KSA9PiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgaWQ9e2ZvcklEfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjeChcbiAgICAgICAgICAgICAgY2xhc3NOYW1lV3JhcHBlcixcbiAgICAgICAgICAgICAgY3NzYFxuICAgICAgICAgICAgICAgICR7c3R5bGVTdHJpbmdzLm9iamVjdFdpZGdldFRvcEJhckNvbnRhaW5lcn1cbiAgICAgICAgICAgICAgYCxcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPE9iamVjdFdpZGdldFRvcEJhclxuICAgICAgICAgICAgICBhbGxvd0FkZD17ZmllbGQuZ2V0KCdhbGxvd19hZGQnLCB0cnVlKX1cbiAgICAgICAgICAgICAgb25BZGQ9e3RoaXMuaGFuZGxlQWRkfVxuICAgICAgICAgICAgICB0eXBlcz17ZmllbGQuZ2V0KFRZUEVTX0tFWSwgbnVsbCl9XG4gICAgICAgICAgICAgIG9uQWRkVHlwZT17dHlwZSA9PiB0aGlzLmhhbmRsZUFkZFR5cGUodHlwZSwgcmVzb2x2ZUZpZWxkS2V5VHlwZShmaWVsZCkpfVxuICAgICAgICAgICAgICBoZWFkaW5nPXtgJHtpdGVtcy5zaXplfSAke2xpc3RMYWJlbH1gfVxuICAgICAgICAgICAgICBsYWJlbD17bGFiZWxTaW5ndWxhci50b0xvd2VyQ2FzZSgpfVxuICAgICAgICAgICAgICBvbkNvbGxhcHNlVG9nZ2xlPXt0aGlzLmhhbmRsZUNvbGxhcHNlQWxsVG9nZ2xlfVxuICAgICAgICAgICAgICBjb2xsYXBzZWQ9e3NlbGZDb2xsYXBzZWR9XG4gICAgICAgICAgICAgIHQ9e3R9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgeyghc2VsZkNvbGxhcHNlZCB8fCAhbWluaW1pemVDb2xsYXBzZWRJdGVtcykgJiYgKFxuICAgICAgICAgICAgICA8U29ydGFibGVMaXN0IGl0ZW1zPXtpdGVtc0FycmF5fSBrZXlzPXtrZXlzfSBvblNvcnRFbmQ9e3RoaXMub25Tb3J0RW5kfT5cbiAgICAgICAgICAgICAgICB7aXRlbXMubWFwKHRoaXMucmVuZGVySXRlbSl9XG4gICAgICAgICAgICAgIDwvU29ydGFibGVMaXN0PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvQ2xhc3NOYW1lcz5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVySW5wdXQoKSB7XG4gICAgY29uc3QgeyBmb3JJRCwgY2xhc3NOYW1lV3JhcHBlciB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IHZhbHVlIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIGlkPXtmb3JJRH1cbiAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgIG9uRm9jdXM9e3RoaXMuaGFuZGxlRm9jdXN9XG4gICAgICAgIG9uQmx1cj17dGhpcy5oYW5kbGVCbHVyfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZVdyYXBwZXJ9XG4gICAgICAvPlxuICAgICk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuZ2V0VmFsdWVUeXBlKCkgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlckxpc3RDb250cm9sKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlcklucHV0KCk7XG4gICAgfVxuICB9XG59XG4iXX0= */")]
|
|
112
|
+
css: [styles.listControlItem, collapsed && styles.listControlItemCollapsed, ";label:SortableListItem;" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEwSE0iLCJmaWxlIjoiLi4vLi4vc3JjL0xpc3RDb250cm9sLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgSW1tdXRhYmxlUHJvcFR5cGVzIGZyb20gJ3JlYWN0LWltbXV0YWJsZS1wcm9wdHlwZXMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xuaW1wb3J0IHsgY3NzLCBDbGFzc05hbWVzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgTGlzdCwgTWFwLCBmcm9tSlMgfSBmcm9tICdpbW11dGFibGUnO1xuaW1wb3J0IHBhcnRpYWwgZnJvbSAnbG9kYXNoL3BhcnRpYWwnO1xuaW1wb3J0IGlzRW1wdHkgZnJvbSAnbG9kYXNoL2lzRW1wdHknO1xuaW1wb3J0IHVuaXF1ZUlkIGZyb20gJ2xvZGFzaC91bmlxdWVJZCc7XG5pbXBvcnQgeyB2NCBhcyB1dWlkIH0gZnJvbSAndXVpZCc7XG5pbXBvcnQgRGVjYXBDbXNXaWRnZXRPYmplY3QgZnJvbSAnZGVjYXAtY21zLXdpZGdldC1vYmplY3QnO1xuaW1wb3J0IHtcbiAgRG5kQ29udGV4dCxcbiAgTW91c2VTZW5zb3IsXG4gIFRvdWNoU2Vuc29yLFxuICBjbG9zZXN0Q2VudGVyLFxuICB1c2VTZW5zb3IsXG4gIHVzZVNlbnNvcnMsXG59IGZyb20gJ0BkbmQta2l0L2NvcmUnO1xuaW1wb3J0IHsgU29ydGFibGVDb250ZXh0LCB1c2VTb3J0YWJsZSB9IGZyb20gJ0BkbmQta2l0L3NvcnRhYmxlJztcbmltcG9ydCB7IHJlc3RyaWN0VG9QYXJlbnRFbGVtZW50IH0gZnJvbSAnQGRuZC1raXQvbW9kaWZpZXJzJztcbmltcG9ydCB7IENTUyB9IGZyb20gJ0BkbmQta2l0L3V0aWxpdGllcyc7XG5pbXBvcnQge1xuICBMaXN0SXRlbVRvcEJhcixcbiAgT2JqZWN0V2lkZ2V0VG9wQmFyLFxuICBjb2xvcnMsXG4gIGxlbmd0aHMsXG4gIEZpZWxkTGFiZWwsXG59IGZyb20gJ2RlY2FwLWNtcy11aS1kZWZhdWx0JztcbmltcG9ydCB7IHN0cmluZ1RlbXBsYXRlLCB2YWxpZGF0aW9ucyB9IGZyb20gJ2RlY2FwLWNtcy1saWItd2lkZ2V0cyc7XG5cbmltcG9ydCB7XG4gIFRZUEVTX0tFWSxcbiAgZ2V0VHlwZWRGaWVsZEZvclZhbHVlLFxuICByZXNvbHZlRmllbGRLZXlUeXBlLFxuICBnZXRFcnJvck1lc3NhZ2VGb3JUeXBlZEZpZWxkQW5kVmFsdWUsXG59IGZyb20gJy4vdHlwZWRMaXN0SGVscGVycyc7XG5cbmNvbnN0IE9iamVjdENvbnRyb2wgPSBEZWNhcENtc1dpZGdldE9iamVjdC5jb250cm9sQ29tcG9uZW50O1xuXG5jb25zdCBMaXN0SXRlbSA9IHN0eWxlZC5kaXYoKTtcblxuY29uc3QgU3R5bGVkTGlzdEl0ZW1Ub3BCYXIgPSBzdHlsZWQoTGlzdEl0ZW1Ub3BCYXIpYFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAke2NvbG9ycy50ZXh0RmllbGRCb3JkZXJ9O1xuYDtcblxuY29uc3QgTmVzdGVkT2JqZWN0TGFiZWwgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiAke3Byb3BzID0+IChwcm9wcy5jb2xsYXBzZWQgPyAnYmxvY2snIDogJ25vbmUnKX07XG4gIGJvcmRlci10b3A6IDA7XG4gIGNvbG9yOiAke3Byb3BzID0+IChwcm9wcy5lcnJvciA/IGNvbG9ycy5lcnJvclRleHQgOiAnaW5oZXJpdCcpfTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHtjb2xvcnMudGV4dEZpZWxkQm9yZGVyfTtcbiAgcGFkZGluZzogMTNweDtcbiAgYm9yZGVyLXJhZGl1czogMCAwICR7bGVuZ3Rocy5ib3JkZXJSYWRpdXN9ICR7bGVuZ3Rocy5ib3JkZXJSYWRpdXN9O1xuYDtcblxuY29uc3Qgc3R5bGVTdHJpbmdzID0ge1xuICBjb2xsYXBzZWRPYmplY3RDb250cm9sOiBgXG4gICAgZGlzcGxheTogbm9uZTtcbiAgYCxcbiAgb2JqZWN0V2lkZ2V0VG9wQmFyQ29udGFpbmVyOiBgXG4gICAgcGFkZGluZzogJHtsZW5ndGhzLm9iamVjdFdpZGdldFRvcEJhckNvbnRhaW5lclBhZGRpbmd9O1xuICBgLFxufTtcblxuY29uc3Qgc3R5bGVzID0ge1xuICBsaXN0Q29udHJvbEl0ZW06IGNzc2BcbiAgICBtYXJnaW4tdG9wOiAxOHB4O1xuXG4gICAgJjpmaXJzdC1vZi10eXBlIHtcbiAgICAgIG1hcmdpbi10b3A6IDI2cHg7XG4gICAgfVxuICBgLFxuICBsaXN0Q29udHJvbEl0ZW1Db2xsYXBzZWQ6IGNzc2BcbiAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgYCxcbn07XG5cbmZ1bmN0aW9uIFNvcnRhYmxlTGlzdCh7IGl0ZW1zLCBjaGlsZHJlbiwgb25Tb3J0RW5kLCBrZXlzIH0pIHtcbiAgY29uc3QgYWN0aXZhdGlvbkNvbnN0cmFpbnQgPSB7IGRpc3RhbmNlOiA0IH07XG4gIGNvbnN0IHNlbnNvcnMgPSB1c2VTZW5zb3JzKFxuICAgIHVzZVNlbnNvcihNb3VzZVNlbnNvciwgeyBhY3RpdmF0aW9uQ29uc3RyYWludCB9KSxcbiAgICB1c2VTZW5zb3IoVG91Y2hTZW5zb3IsIHsgYWN0aXZhdGlvbkNvbnN0cmFpbnQgfSksXG4gICk7XG5cbiAgZnVuY3Rpb24gaGFuZGxlU29ydEVuZCh7IGFjdGl2ZSwgb3ZlciB9KSB7XG4gICAgb25Tb3J0RW5kKHtcbiAgICAgIG9sZEluZGV4OiBrZXlzLmluZGV4T2YoYWN0aXZlLmlkKSxcbiAgICAgIG5ld0luZGV4OiBrZXlzLmluZGV4T2Yob3Zlci5pZCksXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXY+XG4gICAgICA8RG5kQ29udGV4dFxuICAgICAgICBtb2RpZmllcnM9e1tyZXN0cmljdFRvUGFyZW50RWxlbWVudF19XG4gICAgICAgIGNvbGxpc2lvbkRldGVjdGlvbj17Y2xvc2VzdENlbnRlcn1cbiAgICAgICAgc2Vuc29ycz17c2Vuc29yc31cbiAgICAgICAgb25EcmFnRW5kPXtoYW5kbGVTb3J0RW5kfVxuICAgICAgPlxuICAgICAgICA8U29ydGFibGVDb250ZXh0IGl0ZW1zPXtpdGVtc30+e2NoaWxkcmVufTwvU29ydGFibGVDb250ZXh0PlxuICAgICAgPC9EbmRDb250ZXh0PlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5mdW5jdGlvbiBTb3J0YWJsZUxpc3RJdGVtKHByb3BzKSB7XG4gIGNvbnN0IHsgc2V0Tm9kZVJlZiwgdHJhbnNmb3JtLCB0cmFuc2l0aW9uIH0gPSB1c2VTb3J0YWJsZSh7XG4gICAgaWQ6IHByb3BzLmlkLFxuICB9KTtcblxuICBjb25zdCBzdHlsZSA9IHtcbiAgICB0cmFuc2Zvcm06IENTUy5UcmFuc2Zvcm0udG9TdHJpbmcodHJhbnNmb3JtKSxcbiAgICB0cmFuc2l0aW9uLFxuICB9O1xuXG4gIGNvbnN0IHsgY29sbGFwc2VkIH0gPSBwcm9wcztcblxuICByZXR1cm4gKFxuICAgIDxMaXN0SXRlbVxuICAgICAgc29ydGFibGVcbiAgICAgIHJlZj17c2V0Tm9kZVJlZn1cbiAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgIGNzcz17W3N0eWxlcy5saXN0Q29udHJvbEl0ZW0sIGNvbGxhcHNlZCAmJiBzdHlsZXMubGlzdENvbnRyb2xJdGVtQ29sbGFwc2VkXX1cbiAgICA+XG4gICAgICB7cHJvcHMuY2hpbGRyZW59XG4gICAgPC9MaXN0SXRlbT5cbiAgKTtcbn1cblxuZnVuY3Rpb24gRHJhZ0hhbmRsZSh7IGNoaWxkcmVuLCBpZCB9KSB7XG4gIGNvbnN0IHsgYXR0cmlidXRlcywgbGlzdGVuZXJzIH0gPSB1c2VTb3J0YWJsZSh7XG4gICAgaWQsXG4gIH0pO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiB7Li4uYXR0cmlidXRlc30gey4uLmxpc3RlbmVyc30+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmNvbnN0IHZhbHVlVHlwZXMgPSB7XG4gIFNJTkdMRTogJ1NJTkdMRScsXG4gIE1VTFRJUExFOiAnTVVMVElQTEUnLFxuICBNSVhFRDogJ01JWEVEJyxcbn07XG5cbmZ1bmN0aW9uIGhhbmRsZVN1bW1hcnkoc3VtbWFyeSwgZW50cnksIGxhYmVsLCBpdGVtKSB7XG4gIGNvbnN0IGRhdGEgPSBzdHJpbmdUZW1wbGF0ZS5hZGRGaWxlVGVtcGxhdGVGaWVsZHMoXG4gICAgZW50cnkuZ2V0KCdwYXRoJyksXG4gICAgaXRlbS5zZXQoJ2ZpZWxkcy5sYWJlbCcsIGxhYmVsKSxcbiAgKTtcbiAgcmV0dXJuIHN0cmluZ1RlbXBsYXRlLmNvbXBpbGVTdHJpbmdUZW1wbGF0ZShzdW1tYXJ5LCBudWxsLCAnJywgZGF0YSk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlSXRlbShmaWVsZCwgaXRlbSkge1xuICBpZiAoIU1hcC5pc01hcChpdGVtKSkge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIGAnJHtmaWVsZC5nZXQoJ25hbWUnKX0nIGZpZWxkIGl0ZW0gdmFsdWUgdmFsdWUgc2hvdWxkIGJlIGEgbWFwIGJ1dCBpcyBhICcke3R5cGVvZiBpdGVtfSdgLFxuICAgICk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBMYWJlbENvbXBvbmVudCh7IGZpZWxkLCBpc0FjdGl2ZSwgaGFzRXJyb3JzLCB1bmlxdWVGaWVsZElkLCBpc0ZpZWxkT3B0aW9uYWwsIHQgfSkge1xuICBjb25zdCBsYWJlbCA9IGAke2ZpZWxkLmdldCgnbGFiZWwnLCBmaWVsZC5nZXQoJ25hbWUnKSl9YDtcbiAgcmV0dXJuIChcbiAgICA8RmllbGRMYWJlbCBpc0FjdGl2ZT17aXNBY3RpdmV9IGhhc0Vycm9ycz17aGFzRXJyb3JzfSBodG1sRm9yPXt1bmlxdWVGaWVsZElkfT5cbiAgICAgIHtsYWJlbH0ge2Ake2lzRmllbGRPcHRpb25hbCA/IGAgKCR7dCgnZWRpdG9yLmVkaXRvckNvbnRyb2wuZmllbGQub3B0aW9uYWwnKX0pYCA6ICcnfWB9XG4gICAgPC9GaWVsZExhYmVsPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMaXN0Q29udHJvbCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNoaWxkUmVmcyA9IHt9O1xuXG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgbWV0YWRhdGE6IEltbXV0YWJsZVByb3BUeXBlcy5tYXAsXG4gICAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25DaGFuZ2VPYmplY3Q6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25WYWxpZGF0ZU9iamVjdDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICB2YWxpZGF0ZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICB2YWx1ZTogSW1tdXRhYmxlUHJvcFR5cGVzLmxpc3QsXG4gICAgZmllbGQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgZm9ySUQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY29udHJvbFJlZjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgbWVkaWFQYXRoczogSW1tdXRhYmxlUHJvcFR5cGVzLm1hcC5pc1JlcXVpcmVkLFxuICAgIGdldEFzc2V0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uT3Blbk1lZGlhTGlicmFyeTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvbkFkZEFzc2V0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uUmVtb3ZlSW5zZXJ0ZWRNZWRpYTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBjbGFzc05hbWVXcmFwcGVyOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgc2V0QWN0aXZlU3R5bGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgc2V0SW5hY3RpdmVTdHlsZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBlZGl0b3JDb250cm9sOiBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZCxcbiAgICByZXNvbHZlV2lkZ2V0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGNsZWFyRmllbGRFcnJvcnM6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgZmllbGRzRXJyb3JzOiBJbW11dGFibGVQcm9wVHlwZXMubWFwLmlzUmVxdWlyZWQsXG4gICAgZW50cnk6IEltbXV0YWJsZVByb3BUeXBlcy5tYXAuaXNSZXF1aXJlZCxcbiAgICB0OiBQcm9wVHlwZXMuZnVuYyxcbiAgfTtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIHZhbHVlOiBMaXN0KCksXG4gICAgcGFyZW50SWRzOiBbXSxcbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICBjb25zdCB7IGZpZWxkLCB2YWx1ZSB9ID0gcHJvcHM7XG4gICAgY29uc3QgbGlzdENvbGxhcHNlZCA9IGZpZWxkLmdldCgnY29sbGFwc2VkJywgdHJ1ZSk7XG4gICAgY29uc3QgaXRlbXNDb2xsYXBzZWQgPSAodmFsdWUgJiYgQXJyYXkodmFsdWUuc2l6ZSkuZmlsbChsaXN0Q29sbGFwc2VkKSkgfHwgW107XG4gICAgY29uc3Qga2V5cyA9ICh2YWx1ZSAmJiBBcnJheS5mcm9tKHsgbGVuZ3RoOiB2YWx1ZS5zaXplIH0sICgpID0+IHV1aWQoKSkpIHx8IFtdO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGxpc3RDb2xsYXBzZWQsXG4gICAgICBpdGVtc0NvbGxhcHNlZCxcbiAgICAgIHZhbHVlOiB0aGlzLnZhbHVlVG9TdHJpbmcodmFsdWUpLFxuICAgICAga2V5cyxcbiAgICB9O1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgLy8gTWFudWFsbHkgdmFsaWRhdGUgUHJvcFR5cGVzIC0gUmVhY3QgMTkgYnJlYWtpbmcgY2hhbmdlXG4gICAgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKExpc3RDb250cm9sLnByb3BUeXBlcywgdGhpcy5wcm9wcywgJ3Byb3AnLCAnTGlzdENvbnRyb2wnKTtcbiAgfVxuXG4gIHZhbHVlVG9TdHJpbmcgPSB2YWx1ZSA9PiB7XG4gICAgbGV0IHN0cmluZ1ZhbHVlO1xuICAgIGlmIChMaXN0LmlzTGlzdCh2YWx1ZSkgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHN0cmluZ1ZhbHVlID0gdmFsdWUuam9pbignLCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBFeHBlY3RlZCBMaXN0IHZhbHVlIHRvIGJlIGFuIGFycmF5IGJ1dCByZWNlaXZlZCAnJHt2YWx1ZX0nIHdpdGggdHlwZSBvZiAnJHt0eXBlb2YgdmFsdWV9Jy4gUGxlYXNlIGNoZWNrIHRoZSB2YWx1ZSBwcm92aWRlZCB0byB0aGUgJyR7dGhpcy5wcm9wcy5maWVsZC5nZXQoXG4gICAgICAgICAgJ25hbWUnLFxuICAgICAgICApfScgZmllbGRgLFxuICAgICAgKTtcbiAgICAgIHN0cmluZ1ZhbHVlID0gU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0cmluZ1ZhbHVlLnJlcGxhY2UoLywoW15cXHNdfCQpL2csICcsICQxJyk7XG4gIH07XG5cbiAgZ2V0VmFsdWVUeXBlID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgZmllbGQgfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKGZpZWxkLmdldCgnZmllbGRzJykpIHtcbiAgICAgIHJldHVybiB2YWx1ZVR5cGVzLk1VTFRJUExFO1xuICAgIH0gZWxzZSBpZiAoZmllbGQuZ2V0KCdmaWVsZCcpKSB7XG4gICAgICByZXR1cm4gdmFsdWVUeXBlcy5TSU5HTEU7XG4gICAgfSBlbHNlIGlmIChmaWVsZC5nZXQoVFlQRVNfS0VZKSkge1xuICAgICAgcmV0dXJuIHZhbHVlVHlwZXMuTUlYRUQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfTtcblxuICB1bmlxdWVGaWVsZElkID0gdW5pcXVlSWQoYCR7dGhpcy5wcm9wcy5maWVsZC5nZXQoJ25hbWUnKX0tZmllbGQtYCk7XG4gIC8qKlxuICAgKiBBbHdheXMgdXBkYXRlIHNvIHRoYXQgZWFjaCBuZXN0ZWQgd2lkZ2V0IGhhcyB0aGUgb3B0aW9uIHRvIHVwZGF0ZS4gVGhpcyBpc1xuICAgKiByZXF1aXJlZCBiZWNhdXNlIENvbnRyb2xIT0MgcHJvdmlkZXMgYSBkZWZhdWx0IGBzaG91bGRDb21wb25lbnRVcGRhdGVgXG4gICAqIHdoaWNoIG9ubHkgdXBkYXRlcyBpZiB0aGUgdmFsdWUgY2hhbmdlcywgYnV0IGV2ZXJ5IHdpZGdldCBtdXN0IGJlIGFsbG93ZWRcbiAgICogdG8gb3ZlcnJpZGUgdGhpcy5cbiAgICovXG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZSgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGhhbmRsZUNoYW5nZSA9IGUgPT4ge1xuICAgIGNvbnN0IHsgb25DaGFuZ2UgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLnN0YXRlLnZhbHVlO1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gZS50YXJnZXQudmFsdWUudHJpbSgpO1xuICAgIGNvbnN0IGxpc3RWYWx1ZSA9IG5ld1ZhbHVlID8gbmV3VmFsdWUuc3BsaXQoJywnKSA6IFtdO1xuICAgIGlmIChuZXdWYWx1ZS5tYXRjaCgvLCQvKSAmJiBvbGRWYWx1ZS5tYXRjaCgvLCAkLykpIHtcbiAgICAgIGxpc3RWYWx1ZS5wb3AoKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IHRoaXMudmFsdWVUb1N0cmluZyhsaXN0VmFsdWUpO1xuICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogcGFyc2VkVmFsdWUgfSk7XG4gICAgb25DaGFuZ2UoTGlzdChsaXN0VmFsdWUubWFwKHZhbCA9PiB2YWwudHJpbSgpKSkpO1xuICB9O1xuXG4gIGhhbmRsZUZvY3VzID0gKCkgPT4ge1xuICAgIHRoaXMucHJvcHMuc2V0QWN0aXZlU3R5bGUoKTtcbiAgfTtcblxuICBoYW5kbGVCbHVyID0gZSA9PiB7XG4gICAgY29uc3QgbGlzdFZhbHVlID0gZS50YXJnZXQudmFsdWVcbiAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAubWFwKGVsID0+IGVsLnRyaW0oKSlcbiAgICAgIC5maWx0ZXIoZWwgPT4gZWwpO1xuICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogdGhpcy52YWx1ZVRvU3RyaW5nKGxpc3RWYWx1ZSkgfSk7XG4gICAgdGhpcy5wcm9wcy5zZXRJbmFjdGl2ZVN0eWxlKCk7XG4gIH07XG5cbiAgaGFuZGxlQWRkID0gZSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHsgZmllbGQgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPVxuICAgICAgdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5TSU5HTEVcbiAgICAgICAgPyB0aGlzLnNpbmdsZURlZmF1bHQoKVxuICAgICAgICA6IGZyb21KUyh0aGlzLm11bHRpcGxlRGVmYXVsdChmaWVsZC5nZXQoJ2ZpZWxkcycpKSk7XG4gICAgdGhpcy5hZGRJdGVtKHBhcnNlZFZhbHVlKTtcbiAgfTtcblxuICBzaW5nbGVEZWZhdWx0ID0gKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmZpZWxkLmdldEluKFsnZmllbGQnLCAnZGVmYXVsdCddLCBudWxsKTtcbiAgfTtcblxuICBtdWx0aXBsZURlZmF1bHQgPSBmaWVsZHMgPT4ge1xuICAgIHJldHVybiB0aGlzLmdldEZpZWxkc0RlZmF1bHQoZmllbGRzKTtcbiAgfTtcblxuICBoYW5kbGVBZGRUeXBlID0gKHR5cGUsIHR5cGVLZXkpID0+IHtcbiAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IGZyb21KUyh0aGlzLm1peGVkRGVmYXVsdCh0eXBlS2V5LCB0eXBlKSk7XG4gICAgdGhpcy5hZGRJdGVtKHBhcnNlZFZhbHVlKTtcbiAgfTtcblxuICBtaXhlZERlZmF1bHQgPSAodHlwZUtleSwgdHlwZSkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkVHlwZSA9IHRoaXMucHJvcHMuZmllbGQuZ2V0KFRZUEVTX0tFWSkuZmluZChmID0+IGYuZ2V0KCduYW1lJykgPT09IHR5cGUpO1xuICAgIGNvbnN0IGZpZWxkcyA9IHNlbGVjdGVkVHlwZS5nZXQoJ2ZpZWxkcycpIHx8IFtzZWxlY3RlZFR5cGUuZ2V0KCdmaWVsZCcpXTtcblxuICAgIHJldHVybiB0aGlzLmdldEZpZWxkc0RlZmF1bHQoZmllbGRzLCB7IFt0eXBlS2V5XTogdHlwZSB9KTtcbiAgfTtcblxuICBnZXRGaWVsZHNEZWZhdWx0ID0gKGZpZWxkcywgaW5pdGlhbFZhbHVlID0ge30pID0+IHtcbiAgICByZXR1cm4gZmllbGRzLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiB7XG4gICAgICBjb25zdCBzdWJmaWVsZHMgPSBpdGVtLmdldCgnZmllbGQnKSB8fCBpdGVtLmdldCgnZmllbGRzJyk7XG4gICAgICBjb25zdCBvYmplY3QgPSBpdGVtLmdldCgnd2lkZ2V0JykgPT0gJ29iamVjdCc7XG4gICAgICBjb25zdCBuYW1lID0gaXRlbS5nZXQoJ25hbWUnKTtcbiAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IGl0ZW0uZ2V0KCdkZWZhdWx0JywgbnVsbCk7XG5cbiAgICAgIGlmIChMaXN0LmlzTGlzdChzdWJmaWVsZHMpICYmIG9iamVjdCkge1xuICAgICAgICBjb25zdCBzdWJEZWZhdWx0VmFsdWUgPSB0aGlzLmdldEZpZWxkc0RlZmF1bHQoc3ViZmllbGRzKTtcbiAgICAgICAgIWlzRW1wdHkoc3ViRGVmYXVsdFZhbHVlKSAmJiAoYWNjW25hbWVdID0gc3ViRGVmYXVsdFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH1cblxuICAgICAgaWYgKE1hcC5pc01hcChzdWJmaWVsZHMpICYmIG9iamVjdCkge1xuICAgICAgICBjb25zdCBzdWJEZWZhdWx0VmFsdWUgPSB0aGlzLmdldEZpZWxkc0RlZmF1bHQoW3N1YmZpZWxkc10pO1xuICAgICAgICAhaXNFbXB0eShzdWJEZWZhdWx0VmFsdWUpICYmIChhY2NbbmFtZV0gPSBzdWJEZWZhdWx0VmFsdWUpO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGVmYXVsdFZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGFjY1tuYW1lXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBpbml0aWFsVmFsdWUpO1xuICB9O1xuXG4gIGFkZEl0ZW0gPSBwYXJzZWRWYWx1ZSA9PiB7XG4gICAgY29uc3QgeyB2YWx1ZSwgb25DaGFuZ2UsIGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGFkZFRvVG9wID0gZmllbGQuZ2V0KCdhZGRfdG9fdG9wJywgZmFsc2UpO1xuXG4gICAgY29uc3QgaXRlbUtleSA9IHV1aWQoKTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGl0ZW1zQ29sbGFwc2VkOiBhZGRUb1RvcFxuICAgICAgICA/IFtmYWxzZSwgLi4udGhpcy5zdGF0ZS5pdGVtc0NvbGxhcHNlZF1cbiAgICAgICAgOiBbLi4udGhpcy5zdGF0ZS5pdGVtc0NvbGxhcHNlZCwgZmFsc2VdLFxuICAgICAga2V5czogYWRkVG9Ub3AgPyBbaXRlbUtleSwgLi4udGhpcy5zdGF0ZS5rZXlzXSA6IFsuLi50aGlzLnN0YXRlLmtleXMsIGl0ZW1LZXldLFxuICAgIH0pO1xuXG4gICAgY29uc3QgbGlzdFZhbHVlID0gdmFsdWUgfHwgTGlzdCgpO1xuICAgIGlmIChhZGRUb1RvcCkge1xuICAgICAgb25DaGFuZ2UobGlzdFZhbHVlLnVuc2hpZnQocGFyc2VkVmFsdWUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb25DaGFuZ2UobGlzdFZhbHVlLnB1c2gocGFyc2VkVmFsdWUpKTtcbiAgICB9XG4gIH07XG5cbiAgcHJvY2Vzc0NvbnRyb2xSZWYgPSByZWYgPT4ge1xuICAgIGlmICghcmVmKSByZXR1cm47XG4gICAgY29uc3Qge1xuICAgICAgcHJvcHM6IHsgdmFsaWRhdGlvbktleToga2V5IH0sXG4gICAgfSA9IHJlZjtcbiAgICB0aGlzLmNoaWxkUmVmc1trZXldID0gcmVmO1xuICAgIHRoaXMucHJvcHMuY29udHJvbFJlZj8uKHRoaXMpO1xuICB9O1xuXG4gIHZhbGlkYXRlID0gKCkgPT4ge1xuICAgIC8vIEZpcnN0IHZhbGlkYXRlIGNoaWxkIHdpZGdldHMgaWYgdGhpcyBpcyBhIGNvbXBsZXggbGlzdFxuICAgIGNvbnN0IGhhc0NoaWxkV2lkZ2V0cyA9IHRoaXMuZ2V0VmFsdWVUeXBlKCkgJiYgT2JqZWN0LmtleXModGhpcy5jaGlsZFJlZnMpLmxlbmd0aCA+IDA7XG4gICAgaWYgKGhhc0NoaWxkV2lkZ2V0cykge1xuICAgICAgT2JqZWN0LnZhbHVlcyh0aGlzLmNoaWxkUmVmcykuZm9yRWFjaCh3aWRnZXQgPT4ge1xuICAgICAgICB3aWRnZXQ/LnZhbGlkYXRlPy4oKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnByb3BzLnZhbGlkYXRlKCk7XG4gICAgfVxuICAgIHRoaXMucHJvcHMub25WYWxpZGF0ZU9iamVjdCh0aGlzLnByb3BzLmZvcklELCB0aGlzLnZhbGlkYXRlU2l6ZSgpKTtcbiAgfTtcblxuICB2YWxpZGF0ZVNpemUgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBmaWVsZCwgdmFsdWUsIHQgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgbWluID0gZmllbGQuZ2V0KCdtaW4nKTtcbiAgICBjb25zdCBtYXggPSBmaWVsZC5nZXQoJ21heCcpO1xuICAgIGNvbnN0IHJlcXVpcmVkID0gZmllbGQuZ2V0KCdyZXF1aXJlZCcsIHRydWUpO1xuXG4gICAgaWYgKCFyZXF1aXJlZCAmJiAhdmFsdWU/LnNpemUpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBlcnJvciA9IHZhbGlkYXRpb25zLnZhbGlkYXRlTWluTWF4KFxuICAgICAgdCxcbiAgICAgIGZpZWxkLmdldCgnbGFiZWwnLCBmaWVsZC5nZXQoJ25hbWUnKSksXG4gICAgICB2YWx1ZSxcbiAgICAgIG1pbixcbiAgICAgIG1heCxcbiAgICApO1xuXG4gICAgcmV0dXJuIGVycm9yID8gW2Vycm9yXSA6IFtdO1xuICB9O1xuXG4gIC8qKlxuICAgKiBJbiBjYXNlIHRoZSBgb25DaGFuZ2VPYmplY3RgIGZ1bmN0aW9uIGlzIGZyb3plbiBieSBhIGNoaWxkIHdpZGdldCBpbXBsZW1lbnRhdGlvbixcbiAgICogZS5nLiB3aGVuIGRlYm91bmNlZCwgYWx3YXlzIGdldCB0aGUgbGF0ZXN0IG9iamVjdCB2YWx1ZSBpbnN0ZWFkIG9mIHVzaW5nXG4gICAqIGB0aGlzLnByb3BzLnZhbHVlYCBkaXJlY3RseS5cbiAgICovXG4gIGdldE9iamVjdFZhbHVlID0gaWR4ID0+IHRoaXMucHJvcHMudmFsdWUuZ2V0KGlkeCkgfHwgTWFwKCk7XG5cbiAgaGFuZGxlQ2hhbmdlRm9yKGluZGV4KSB7XG4gICAgcmV0dXJuIChmLCBuZXdWYWx1ZSwgbmV3TWV0YWRhdGEpID0+IHtcbiAgICAgIGNvbnN0IHsgdmFsdWUsIG1ldGFkYXRhLCBvbkNoYW5nZSwgZmllbGQgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCBjb2xsZWN0aW9uTmFtZSA9IGZpZWxkLmdldCgnbmFtZScpO1xuICAgICAgY29uc3QgbGlzdEZpZWxkT2JqZWN0V2lkZ2V0ID0gZmllbGQuZ2V0SW4oWydmaWVsZCcsICd3aWRnZXQnXSkgPT09ICdvYmplY3QnO1xuICAgICAgY29uc3Qgd2l0aE5hbWVLZXkgPVxuICAgICAgICB0aGlzLmdldFZhbHVlVHlwZSgpICE9PSB2YWx1ZVR5cGVzLlNJTkdMRSB8fFxuICAgICAgICAodGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5TSU5HTEUgJiYgbGlzdEZpZWxkT2JqZWN0V2lkZ2V0KTtcbiAgICAgIGNvbnN0IG5ld09iamVjdFZhbHVlID0gd2l0aE5hbWVLZXlcbiAgICAgICAgPyB0aGlzLmdldE9iamVjdFZhbHVlKGluZGV4KS5zZXQoZi5nZXQoJ25hbWUnKSwgbmV3VmFsdWUpXG4gICAgICAgIDogbmV3VmFsdWU7XG4gICAgICBjb25zdCBwYXJzZWRNZXRhZGF0YSA9IHtcbiAgICAgICAgW2NvbGxlY3Rpb25OYW1lXTogT2JqZWN0LmFzc2lnbihtZXRhZGF0YSA/IG1ldGFkYXRhLnRvSlMoKSA6IHt9LCBuZXdNZXRhZGF0YSB8fCB7fSksXG4gICAgICB9O1xuICAgICAgb25DaGFuZ2UodmFsdWUuc2V0KGluZGV4LCBuZXdPYmplY3RWYWx1ZSksIHBhcnNlZE1ldGFkYXRhKTtcbiAgICB9O1xuICB9XG5cbiAgaGFuZGxlUmVtb3ZlID0gKGluZGV4LCBldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCB7XG4gICAgICB2YWx1ZSxcbiAgICAgIG1ldGFkYXRhLFxuICAgICAgb25DaGFuZ2UsXG4gICAgICBmaWVsZCxcbiAgICAgIGNsZWFyRmllbGRFcnJvcnMsXG4gICAgICBvblZhbGlkYXRlT2JqZWN0LFxuICAgICAgZm9ySUQsXG4gICAgICBmaWVsZHNFcnJvcnMsXG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBjb25zdCBjb2xsZWN0aW9uTmFtZSA9IGZpZWxkLmdldCgnbmFtZScpO1xuICAgIGNvbnN0IGlzU2luZ2xlRmllbGQgPSB0aGlzLmdldFZhbHVlVHlwZSgpID09PSB2YWx1ZVR5cGVzLlNJTkdMRTtcblxuICAgIGNvbnN0IG1ldGFkYXRhUmVtb3ZlUGF0aCA9IGlzU2luZ2xlRmllbGQgPyB2YWx1ZS5nZXQoaW5kZXgpIDogdmFsdWUuZ2V0KGluZGV4KS52YWx1ZVNlcSgpO1xuICAgIGNvbnN0IHBhcnNlZE1ldGFkYXRhID1cbiAgICAgIG1ldGFkYXRhICYmICFtZXRhZGF0YS5pc0VtcHR5KClcbiAgICAgICAgPyB7IFtjb2xsZWN0aW9uTmFtZV06IG1ldGFkYXRhLnJlbW92ZUluKG1ldGFkYXRhUmVtb3ZlUGF0aCkgfVxuICAgICAgICA6IG1ldGFkYXRhO1xuXG4gICAgLy8gR2V0IHRoZSBrZXkgb2YgdGhlIGl0ZW0gYmVpbmcgcmVtb3ZlZFxuICAgIGNvbnN0IHJlbW92ZWRLZXkgPSB0aGlzLnN0YXRlLmtleXNbaW5kZXhdO1xuXG4gICAgLy8gVXBkYXRlIHN0YXRlIHdoaWxlIHByZXNlcnZpbmcga2V5cyBmb3IgcmVtYWluaW5nIGl0ZW1zXG4gICAgY29uc3QgbmV3S2V5cyA9IFsuLi50aGlzLnN0YXRlLmtleXNdO1xuICAgIG5ld0tleXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICBpdGVtc0NvbGxhcHNlZC5zcGxpY2UoaW5kZXgsIDEpO1xuXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBpdGVtc0NvbGxhcHNlZDogWy4uLml0ZW1zQ29sbGFwc2VkXSxcbiAgICAgIGtleXM6IG5ld0tleXMsXG4gICAgfSk7XG5cbiAgICAvLyBDbGVhciB0aGUgcmVmIGZvciB0aGUgcmVtb3ZlZCBpdGVtXG4gICAgZGVsZXRlIHRoaXMuY2hpbGRSZWZzW3JlbW92ZWRLZXldO1xuXG4gICAgY29uc3QgbmV3VmFsdWUgPSB2YWx1ZS5kZWxldGUoaW5kZXgpO1xuXG4gICAgLy8gQ2xlYXIgZXJyb3JzIGZvciB0aGUgcmVtb3ZlZCBpdGVtIGFuZCBpdHMgY2hpbGRyZW5cbiAgICBpZiAoZmllbGRzRXJyb3JzKSB7XG4gICAgICBPYmplY3QuZW50cmllcyhmaWVsZHNFcnJvcnMudG9KUygpKS5mb3JFYWNoKChbZmllbGRJZCwgZXJyb3JzXSkgPT4ge1xuICAgICAgICBpZiAoZXJyb3JzLnNvbWUoZXJyID0+IGVyci5wYXJlbnRJZHM/LmluY2x1ZGVzKHJlbW92ZWRLZXkpKSkge1xuICAgICAgICAgIGNsZWFyRmllbGRFcnJvcnMoZmllbGRJZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIElmIGxpc3QgaXMgZW1wdHksIG1hcmsgaXQgYXMgdmFsaWRcbiAgICBpZiAobmV3VmFsdWUuc2l6ZSA9PT0gMCkge1xuICAgICAgY2xlYXJGaWVsZEVycm9ycyhmb3JJRCk7XG4gICAgICBvblZhbGlkYXRlT2JqZWN0KGZvcklELCBbXSk7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHRoZSB2YWx1ZSBsYXN0IHRvIGVuc3VyZSBhbGwgZXJyb3Igc3RhdGVzIGFyZSBjbGVhcmVkXG4gICAgb25DaGFuZ2UobmV3VmFsdWUsIHBhcnNlZE1ldGFkYXRhKTtcbiAgfTtcblxuICBoYW5kbGVJdGVtQ29sbGFwc2VUb2dnbGUgPSAoaW5kZXgsIGV2ZW50KSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IG5ld0l0ZW1zQ29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWQubWFwKChjb2xsYXBzZWQsIGl0ZW1JbmRleCkgPT4ge1xuICAgICAgaWYgKGluZGV4ID09PSBpdGVtSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuICFjb2xsYXBzZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29sbGFwc2VkO1xuICAgIH0pO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXNDb2xsYXBzZWQ6IG5ld0l0ZW1zQ29sbGFwc2VkLFxuICAgIH0pO1xuICB9O1xuXG4gIGhhbmRsZUNvbGxhcHNlQWxsVG9nZ2xlID0gZSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHsgdmFsdWUsIGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQsIGxpc3RDb2xsYXBzZWQgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgbWluaW1pemVDb2xsYXBzZWRJdGVtcyA9IGZpZWxkLmdldCgnbWluaW1pemVfY29sbGFwc2VkJywgZmFsc2UpO1xuICAgIGNvbnN0IGxpc3RDb2xsYXBzZWRCeURlZmF1bHQgPSBmaWVsZC5nZXQoJ2NvbGxhcHNlZCcsIHRydWUpO1xuICAgIGNvbnN0IGFsbEl0ZW1zQ29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWQuZXZlcnkodmFsID0+IHZhbCA9PT0gdHJ1ZSk7XG5cbiAgICBpZiAobWluaW1pemVDb2xsYXBzZWRJdGVtcykge1xuICAgICAgbGV0IHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkO1xuICAgICAgLy8gT25seSBhbGxvdyBjb2xsYXBzaW5nIGFsbCBpdGVtcyBpbiB0aGlzIG1vZGUgYnV0IG5vdCBvcGVuaW5nIGFsbCBhdCBvbmNlXG4gICAgICBpZiAoIWxpc3RDb2xsYXBzZWQgfHwgIWxpc3RDb2xsYXBzZWRCeURlZmF1bHQpIHtcbiAgICAgICAgdXBkYXRlZEl0ZW1zQ29sbGFwc2VkID0gQXJyYXkodmFsdWUuc2l6ZSkuZmlsbCghbGlzdENvbGxhcHNlZCk7XG4gICAgICB9XG4gICAgICB0aGlzLnNldFN0YXRlKHsgbGlzdENvbGxhcHNlZDogIWxpc3RDb2xsYXBzZWQsIGl0ZW1zQ29sbGFwc2VkOiB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBpdGVtc0NvbGxhcHNlZDogQXJyYXkodmFsdWUuc2l6ZSkuZmlsbCghYWxsSXRlbXNDb2xsYXBzZWQpIH0pO1xuICAgIH1cbiAgfTtcblxuICBvYmplY3RMYWJlbChpdGVtKSB7XG4gICAgY29uc3QgeyBmaWVsZCwgZW50cnkgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgdmFsdWVUeXBlID0gdGhpcy5nZXRWYWx1ZVR5cGUoKTtcbiAgICBzd2l0Y2ggKHZhbHVlVHlwZSkge1xuICAgICAgY2FzZSB2YWx1ZVR5cGVzLk1JWEVEOiB7XG4gICAgICAgIGlmICghdmFsaWRhdGVJdGVtKGZpZWxkLCBpdGVtKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpdGVtVHlwZSA9IGdldFR5cGVkRmllbGRGb3JWYWx1ZShmaWVsZCwgaXRlbSk7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gaXRlbVR5cGUuZ2V0KCdsYWJlbCcsIGl0ZW1UeXBlLmdldCgnbmFtZScpKTtcbiAgICAgICAgLy8gZWFjaCB0eXBlIGNhbiBoYXZlIGl0cyBvd24gc3VtbWFyeSwgYnV0IGRlZmF1bHQgdG8gdGhlIGxpc3Qgc3VtbWFyeSBpZiBleGlzdHNcbiAgICAgICAgY29uc3Qgc3VtbWFyeSA9IGl0ZW1UeXBlLmdldCgnc3VtbWFyeScsIGZpZWxkLmdldCgnc3VtbWFyeScpKTtcbiAgICAgICAgY29uc3QgbGFiZWxSZXR1cm4gPSBzdW1tYXJ5ID8gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgbGFiZWwsIGl0ZW0pIDogbGFiZWw7XG4gICAgICAgIHJldHVybiBsYWJlbFJldHVybjtcbiAgICAgIH1cbiAgICAgIGNhc2UgdmFsdWVUeXBlcy5TSU5HTEU6IHtcbiAgICAgICAgY29uc3Qgc2luZ2xlRmllbGQgPSBmaWVsZC5nZXQoJ2ZpZWxkJyk7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gc2luZ2xlRmllbGQuZ2V0KCdsYWJlbCcsIHNpbmdsZUZpZWxkLmdldCgnbmFtZScpKTtcbiAgICAgICAgY29uc3Qgc3VtbWFyeSA9IGZpZWxkLmdldCgnc3VtbWFyeScpO1xuICAgICAgICBjb25zdCBkYXRhID0gZnJvbUpTKHsgW3NpbmdsZUZpZWxkLmdldCgnbmFtZScpXTogaXRlbSB9KTtcbiAgICAgICAgY29uc3QgbGFiZWxSZXR1cm4gPSBzdW1tYXJ5ID8gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgbGFiZWwsIGRhdGEpIDogbGFiZWw7XG4gICAgICAgIHJldHVybiBsYWJlbFJldHVybjtcbiAgICAgIH1cbiAgICAgIGNhc2UgdmFsdWVUeXBlcy5NVUxUSVBMRToge1xuICAgICAgICBpZiAoIXZhbGlkYXRlSXRlbShmaWVsZCwgaXRlbSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbXVsdGlGaWVsZHMgPSBmaWVsZC5nZXQoJ2ZpZWxkcycpO1xuICAgICAgICBjb25zdCBsYWJlbEZpZWxkID0gbXVsdGlGaWVsZHMgJiYgbXVsdGlGaWVsZHMuZmlyc3QoKTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpdGVtLmdldChsYWJlbEZpZWxkLmdldCgnbmFtZScpKTtcbiAgICAgICAgY29uc3Qgc3VtbWFyeSA9IGZpZWxkLmdldCgnc3VtbWFyeScpO1xuICAgICAgICBjb25zdCBsYWJlbFJldHVybiA9IHN1bW1hcnkgPyBoYW5kbGVTdW1tYXJ5KHN1bW1hcnksIGVudHJ5LCB2YWx1ZSwgaXRlbSkgOiB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIChsYWJlbFJldHVybiB8fCBgTm8gJHtsYWJlbEZpZWxkLmdldCgnbmFtZScpfWApLnRvU3RyaW5nKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIG9uU29ydEVuZCA9ICh7IG9sZEluZGV4LCBuZXdJbmRleCB9KSA9PiB7XG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkLCBrZXlzIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgLy8gVXBkYXRlIHZhbHVlXG4gICAgY29uc3QgaXRlbSA9IHZhbHVlLmdldChvbGRJbmRleCk7XG4gICAgY29uc3QgbmV3VmFsdWUgPSB2YWx1ZS5kZWxldGUob2xkSW5kZXgpLmluc2VydChuZXdJbmRleCwgaXRlbSk7XG4gICAgdGhpcy5wcm9wcy5vbkNoYW5nZShuZXdWYWx1ZSk7XG5cbiAgICAvLyBVcGRhdGUgY29sbGFwc2luZ1xuICAgIGNvbnN0IGNvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkW29sZEluZGV4XTtcbiAgICBpdGVtc0NvbGxhcHNlZC5zcGxpY2Uob2xkSW5kZXgsIDEpO1xuICAgIGNvbnN0IHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCA9IFsuLi5pdGVtc0NvbGxhcHNlZF07XG4gICAgdXBkYXRlZEl0ZW1zQ29sbGFwc2VkLnNwbGljZShuZXdJbmRleCwgMCwgY29sbGFwc2VkKTtcblxuICAgIC8vIE1vdmUga2V5cyB0byBtYWludGFpbiByZWxhdGlvbnNoaXBzXG4gICAgY29uc3QgbW92ZWRLZXkgPSBrZXlzW29sZEluZGV4XTtcbiAgICBjb25zdCB1cGRhdGVkS2V5cyA9IFsuLi5rZXlzXTtcbiAgICB1cGRhdGVkS2V5cy5zcGxpY2Uob2xkSW5kZXgsIDEpO1xuICAgIHVwZGF0ZWRLZXlzLnNwbGljZShuZXdJbmRleCwgMCwgbW92ZWRLZXkpO1xuXG4gICAgdGhpcy5zZXRTdGF0ZSh7IGl0ZW1zQ29sbGFwc2VkOiB1cGRhdGVkSXRlbXNDb2xsYXBzZWQsIGtleXM6IHVwZGF0ZWRLZXlzIH0pO1xuICB9O1xuXG4gIGhhc0Vycm9yID0gaW5kZXggPT4ge1xuICAgIGNvbnN0IHsgZmllbGRzRXJyb3JzIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChmaWVsZHNFcnJvcnMgJiYgZmllbGRzRXJyb3JzLnNpemUgPiAwKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhmaWVsZHNFcnJvcnMudG9KUygpKS5zb21lKGFyciA9PlxuICAgICAgICBhcnIuc29tZShlcnIgPT4gZXJyLnBhcmVudElkcyAmJiBlcnIucGFyZW50SWRzLmluY2x1ZGVzKHRoaXMuc3RhdGUua2V5c1tpbmRleF0pKSxcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIGZvY3VzKHBhdGgpIHtcbiAgICBjb25zdCBbaW5kZXgsIC4uLnJlbWFpbmluZ1BhdGhdID0gcGF0aC5zcGxpdCgnLicpO1xuXG4gICAgaWYgKHRoaXMuc3RhdGUubGlzdENvbGxhcHNlZCB8fCB0aGlzLnN0YXRlLml0ZW1zQ29sbGFwc2VkW2luZGV4XSkge1xuICAgICAgY29uc3QgbmV3SXRlbXNDb2xsYXBzZWQgPSBbLi4udGhpcy5zdGF0ZS5pdGVtc0NvbGxhcHNlZF07XG4gICAgICBuZXdJdGVtc0NvbGxhcHNlZFtpbmRleF0gPSBmYWxzZTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgIHtcbiAgICAgICAgICBsaXN0Q29sbGFwc2VkOiBmYWxzZSxcbiAgICAgICAgICBpdGVtc0NvbGxhcHNlZDogbmV3SXRlbXNDb2xsYXBzZWQsXG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBjb25zdCBrZXkgPSB0aGlzLnN0YXRlLmtleXNbaW5kZXhdO1xuICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmNoaWxkUmVmc1trZXldO1xuICAgICAgICAgIGlmIChjb250cm9sPy5mb2N1cykge1xuICAgICAgICAgICAgY29udHJvbC5mb2N1cyhyZW1haW5pbmdQYXRoLmpvaW4oJy4nKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qga2V5ID0gdGhpcy5zdGF0ZS5rZXlzW2luZGV4XTtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmNoaWxkUmVmc1trZXldO1xuICAgICAgaWYgKGNvbnRyb2w/LmZvY3VzKSB7XG4gICAgICAgIGNvbnRyb2wuZm9jdXMocmVtYWluaW5nUGF0aC5qb2luKCcuJykpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9kaXNwbGF5LW5hbWVcbiAgcmVuZGVySXRlbSA9IChpdGVtLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGNsYXNzTmFtZVdyYXBwZXIsXG4gICAgICBlZGl0b3JDb250cm9sLFxuICAgICAgb25WYWxpZGF0ZU9iamVjdCxcbiAgICAgIG1ldGFkYXRhLFxuICAgICAgY2xlYXJGaWVsZEVycm9ycyxcbiAgICAgIGZpZWxkc0Vycm9ycyxcbiAgICAgIGNvbnRyb2xSZWYsXG4gICAgICByZXNvbHZlV2lkZ2V0LFxuICAgICAgcGFyZW50SWRzLFxuICAgICAgZm9ySUQsXG4gICAgICB0LFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCwga2V5cyB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBjb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZFtpbmRleF07XG4gICAgY29uc3Qga2V5ID0ga2V5c1tpbmRleF07XG4gICAgbGV0IGZpZWxkID0gdGhpcy5wcm9wcy5maWVsZDtcbiAgICBjb25zdCBoYXNFcnJvciA9IHRoaXMuaGFzRXJyb3IoaW5kZXgpO1xuICAgIGNvbnN0IGlzVmFyaWFibGVUeXBlc0xpc3QgPSB0aGlzLmdldFZhbHVlVHlwZSgpID09PSB2YWx1ZVR5cGVzLk1JWEVEO1xuICAgIGlmIChpc1ZhcmlhYmxlVHlwZXNMaXN0KSB7XG4gICAgICBmaWVsZCA9IGdldFR5cGVkRmllbGRGb3JWYWx1ZShmaWVsZCwgaXRlbSk7XG4gICAgICBpZiAoIWZpZWxkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlckVycm9uZW91c1R5cGVkSXRlbShpbmRleCwgaXRlbSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTb3J0YWJsZUxpc3RJdGVtXG4gICAgICAgIGNzcz17W3N0eWxlcy5saXN0Q29udHJvbEl0ZW0sIGNvbGxhcHNlZCAmJiBzdHlsZXMubGlzdENvbnRyb2xJdGVtQ29sbGFwc2VkXX1cbiAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICBrZXk9e2tleX1cbiAgICAgICAgaWQ9e2tleX1cbiAgICAgICAga2V5cz17a2V5c31cbiAgICAgID5cbiAgICAgICAge2lzVmFyaWFibGVUeXBlc0xpc3QgJiYgKFxuICAgICAgICAgIDxMYWJlbENvbXBvbmVudFxuICAgICAgICAgICAgZmllbGQ9e2ZpZWxkfVxuICAgICAgICAgICAgaXNBY3RpdmU9e2ZhbHNlfVxuICAgICAgICAgICAgaGFzRXJyb3JzPXtoYXNFcnJvcn1cbiAgICAgICAgICAgIHVuaXF1ZUZpZWxkSWQ9e3RoaXMudW5pcXVlRmllbGRJZH1cbiAgICAgICAgICAgIGlzRmllbGRPcHRpb25hbD17ZmllbGQuZ2V0KCdyZXF1aXJlZCcpID09PSBmYWxzZX1cbiAgICAgICAgICAgIHQ9e3R9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAgPFN0eWxlZExpc3RJdGVtVG9wQmFyXG4gICAgICAgICAgY29sbGFwc2VkPXtjb2xsYXBzZWR9XG4gICAgICAgICAgb25Db2xsYXBzZVRvZ2dsZT17cGFydGlhbCh0aGlzLmhhbmRsZUl0ZW1Db2xsYXBzZVRvZ2dsZSwgaW5kZXgpfVxuICAgICAgICAgIGRyYWdIYW5kbGU9e0RyYWdIYW5kbGV9XG4gICAgICAgICAgaWQ9e2tleX1cbiAgICAgICAgICBhbGxvd1JlbW92ZT17ZmllbGQuZ2V0KCdhbGxvd19yZW1vdmUnLCB0cnVlKX1cbiAgICAgICAgICBhbGxvd1Jlb3JkZXI9e2ZpZWxkLmdldCgnYWxsb3dfcmVvcmRlcicsIHRydWUpfVxuICAgICAgICAgIG9uUmVtb3ZlPXtwYXJ0aWFsKHRoaXMuaGFuZGxlUmVtb3ZlLCBpbmRleCl9XG4gICAgICAgICAgZGF0YS10ZXN0aWQ9e2BzdHlsZWQtbGlzdC1pdGVtLXRvcC1iYXItJHtrZXl9YH1cbiAgICAgICAgLz5cbiAgICAgICAgPE5lc3RlZE9iamVjdExhYmVsIGNvbGxhcHNlZD17Y29sbGFwc2VkfSBlcnJvcj17aGFzRXJyb3J9PlxuICAgICAgICAgIHt0aGlzLm9iamVjdExhYmVsKGl0ZW0pfVxuICAgICAgICA8L05lc3RlZE9iamVjdExhYmVsPlxuICAgICAgICA8Q2xhc3NOYW1lcz5cbiAgICAgICAgICB7KHsgY3NzLCBjeCB9KSA9PiAoXG4gICAgICAgICAgICA8T2JqZWN0Q29udHJvbFxuICAgICAgICAgICAgICBjbGFzc05hbWVXcmFwcGVyPXtjeChjbGFzc05hbWVXcmFwcGVyLCB7XG4gICAgICAgICAgICAgICAgW2Nzc2BcbiAgICAgICAgICAgICAgICAgICR7c3R5bGVTdHJpbmdzLmNvbGxhcHNlZE9iamVjdENvbnRyb2x9O1xuICAgICAgICAgICAgICAgIGBdOiBjb2xsYXBzZWQsXG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICB2YWx1ZT17aXRlbX1cbiAgICAgICAgICAgICAgZmllbGQ9e2ZpZWxkfVxuICAgICAgICAgICAgICBvbkNoYW5nZU9iamVjdD17dGhpcy5oYW5kbGVDaGFuZ2VGb3IoaW5kZXgpfVxuICAgICAgICAgICAgICBlZGl0b3JDb250cm9sPXtlZGl0b3JDb250cm9sfVxuICAgICAgICAgICAgICByZXNvbHZlV2lkZ2V0PXtyZXNvbHZlV2lkZ2V0fVxuICAgICAgICAgICAgICBtZXRhZGF0YT17bWV0YWRhdGF9XG4gICAgICAgICAgICAgIGZvckxpc3RcbiAgICAgICAgICAgICAgb25WYWxpZGF0ZU9iamVjdD17b25WYWxpZGF0ZU9iamVjdH1cbiAgICAgICAgICAgICAgY2xlYXJGaWVsZEVycm9ycz17Y2xlYXJGaWVsZEVycm9yc31cbiAgICAgICAgICAgICAgZmllbGRzRXJyb3JzPXtmaWVsZHNFcnJvcnN9XG4gICAgICAgICAgICAgIHJlZj17dGhpcy5wcm9jZXNzQ29udHJvbFJlZn1cbiAgICAgICAgICAgICAgY29udHJvbFJlZj17Y29udHJvbFJlZn1cbiAgICAgICAgICAgICAgdmFsaWRhdGlvbktleT17a2V5fVxuICAgICAgICAgICAgICBjb2xsYXBzZWQ9e2NvbGxhcHNlZH1cbiAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9e2BvYmplY3QtY29udHJvbC0ke2tleX1gfVxuICAgICAgICAgICAgICBoYXNFcnJvcj17aGFzRXJyb3J9XG4gICAgICAgICAgICAgIHBhcmVudElkcz17Wy4uLnBhcmVudElkcywgZm9ySUQsIGtleV19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvQ2xhc3NOYW1lcz5cbiAgICAgIDwvU29ydGFibGVMaXN0SXRlbT5cbiAgICApO1xuICB9O1xuXG4gIHJlbmRlckVycm9uZW91c1R5cGVkSXRlbShpbmRleCwgaXRlbSkge1xuICAgIGNvbnN0IGZpZWxkID0gdGhpcy5wcm9wcy5maWVsZDtcbiAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBnZXRFcnJvck1lc3NhZ2VGb3JUeXBlZEZpZWxkQW5kVmFsdWUoZmllbGQsIGl0ZW0pO1xuICAgIGNvbnN0IGtleSA9IGBpdGVtLSR7aW5kZXh9YDtcbiAgICByZXR1cm4gKFxuICAgICAgPFNvcnRhYmxlTGlzdEl0ZW1cbiAgICAgICAgY3NzPXtbc3R5bGVzLmxpc3RDb250cm9sSXRlbSwgc3R5bGVzLmxpc3RDb250cm9sSXRlbUNvbGxhcHNlZF19XG4gICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICA+XG4gICAgICAgIDxTdHlsZWRMaXN0SXRlbVRvcEJhclxuICAgICAgICAgIG9uQ29sbGFwc2VUb2dnbGU9e251bGx9XG4gICAgICAgICAgb25SZW1vdmU9e3BhcnRpYWwodGhpcy5oYW5kbGVSZW1vdmUsIGluZGV4LCBrZXkpfVxuICAgICAgICAgIGRyYWdIYW5kbGU9e0RyYWdIYW5kbGV9XG4gICAgICAgICAgaWQ9e2tleX1cbiAgICAgICAgLz5cbiAgICAgICAgPE5lc3RlZE9iamVjdExhYmVsIGNvbGxhcHNlZD17dHJ1ZX0gZXJyb3I9e3RydWV9PlxuICAgICAgICAgIHtlcnJvck1lc3NhZ2V9XG4gICAgICAgIDwvTmVzdGVkT2JqZWN0TGFiZWw+XG4gICAgICA8L1NvcnRhYmxlTGlzdEl0ZW0+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlckxpc3RDb250cm9sKCkge1xuICAgIGNvbnN0IHsgdmFsdWUsIGZvcklELCBmaWVsZCwgY2xhc3NOYW1lV3JhcHBlciwgdCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkLCBsaXN0Q29sbGFwc2VkLCBrZXlzIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IGl0ZW1zID0gdmFsdWUgfHwgTGlzdCgpO1xuICAgIGNvbnN0IGxhYmVsID0gZmllbGQuZ2V0KCdsYWJlbCcsIGZpZWxkLmdldCgnbmFtZScpKTtcbiAgICBjb25zdCBsYWJlbFNpbmd1bGFyID0gZmllbGQuZ2V0KCdsYWJlbF9zaW5ndWxhcicpIHx8IGZpZWxkLmdldCgnbGFiZWwnLCBmaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgY29uc3QgbGlzdExhYmVsID0gaXRlbXMuc2l6ZSA9PT0gMSA/IGxhYmVsU2luZ3VsYXIudG9Mb3dlckNhc2UoKSA6IGxhYmVsLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgbWluaW1pemVDb2xsYXBzZWRJdGVtcyA9IGZpZWxkLmdldCgnbWluaW1pemVfY29sbGFwc2VkJywgZmFsc2UpO1xuICAgIGNvbnN0IGFsbEl0ZW1zQ29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWQuZXZlcnkodmFsID0+IHZhbCA9PT0gdHJ1ZSk7XG4gICAgY29uc3Qgc2VsZkNvbGxhcHNlZCA9IGFsbEl0ZW1zQ29sbGFwc2VkICYmIChsaXN0Q29sbGFwc2VkIHx8ICFtaW5pbWl6ZUNvbGxhcHNlZEl0ZW1zKTtcblxuICAgIGNvbnN0IGl0ZW1zQXJyYXkgPSBrZXlzLm1hcChrZXkgPT4gKHsgaWQ6IGtleSB9KSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPENsYXNzTmFtZXM+XG4gICAgICAgIHsoeyBjeCwgY3NzIH0pID0+IChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBpZD17Zm9ySUR9XG4gICAgICAgICAgICBjbGFzc05hbWU9e2N4KFxuICAgICAgICAgICAgICBjbGFzc05hbWVXcmFwcGVyLFxuICAgICAgICAgICAgICBjc3NgXG4gICAgICAgICAgICAgICAgJHtzdHlsZVN0cmluZ3Mub2JqZWN0V2lkZ2V0VG9wQmFyQ29udGFpbmVyfVxuICAgICAgICAgICAgICBgLFxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8T2JqZWN0V2lkZ2V0VG9wQmFyXG4gICAgICAgICAgICAgIGFsbG93QWRkPXtmaWVsZC5nZXQoJ2FsbG93X2FkZCcsIHRydWUpfVxuICAgICAgICAgICAgICBvbkFkZD17dGhpcy5oYW5kbGVBZGR9XG4gICAgICAgICAgICAgIHR5cGVzPXtmaWVsZC5nZXQoVFlQRVNfS0VZLCBudWxsKX1cbiAgICAgICAgICAgICAgb25BZGRUeXBlPXt0eXBlID0+IHRoaXMuaGFuZGxlQWRkVHlwZSh0eXBlLCByZXNvbHZlRmllbGRLZXlUeXBlKGZpZWxkKSl9XG4gICAgICAgICAgICAgIGhlYWRpbmc9e2Ake2l0ZW1zLnNpemV9ICR7bGlzdExhYmVsfWB9XG4gICAgICAgICAgICAgIGxhYmVsPXtsYWJlbFNpbmd1bGFyLnRvTG93ZXJDYXNlKCl9XG4gICAgICAgICAgICAgIG9uQ29sbGFwc2VUb2dnbGU9e3RoaXMuaGFuZGxlQ29sbGFwc2VBbGxUb2dnbGV9XG4gICAgICAgICAgICAgIGNvbGxhcHNlZD17c2VsZkNvbGxhcHNlZH1cbiAgICAgICAgICAgICAgdD17dH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB7KCFzZWxmQ29sbGFwc2VkIHx8ICFtaW5pbWl6ZUNvbGxhcHNlZEl0ZW1zKSAmJiAoXG4gICAgICAgICAgICAgIDxTb3J0YWJsZUxpc3QgaXRlbXM9e2l0ZW1zQXJyYXl9IGtleXM9e2tleXN9IG9uU29ydEVuZD17dGhpcy5vblNvcnRFbmR9PlxuICAgICAgICAgICAgICAgIHtpdGVtcy5tYXAodGhpcy5yZW5kZXJJdGVtKX1cbiAgICAgICAgICAgICAgPC9Tb3J0YWJsZUxpc3Q+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9DbGFzc05hbWVzPlxuICAgICk7XG4gIH1cblxuICByZW5kZXJJbnB1dCgpIHtcbiAgICBjb25zdCB7IGZvcklELCBjbGFzc05hbWVXcmFwcGVyIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGlucHV0XG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgaWQ9e2ZvcklEfVxuICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgb25Gb2N1cz17dGhpcy5oYW5kbGVGb2N1c31cbiAgICAgICAgb25CbHVyPXt0aGlzLmhhbmRsZUJsdXJ9XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lV3JhcHBlcn1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5nZXRWYWx1ZVR5cGUoKSAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVuZGVyTGlzdENvbnRyb2woKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMucmVuZGVySW5wdXQoKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ== */")]
|
|
118
113
|
}, props.children);
|
|
119
114
|
}
|
|
120
115
|
function DragHandle({
|
|
@@ -161,412 +156,83 @@ function LabelComponent({
|
|
|
161
156
|
}, label, " ", `${isFieldOptional ? ` (${t('editor.editorControl.field.optional')})` : ''}`);
|
|
162
157
|
}
|
|
163
158
|
export default class ListControl extends React.Component {
|
|
159
|
+
childRefs = {};
|
|
160
|
+
static propTypes = {
|
|
161
|
+
metadata: ImmutablePropTypes.map,
|
|
162
|
+
onChange: PropTypes.func.isRequired,
|
|
163
|
+
onChangeObject: PropTypes.func.isRequired,
|
|
164
|
+
onValidateObject: PropTypes.func.isRequired,
|
|
165
|
+
validate: PropTypes.func.isRequired,
|
|
166
|
+
value: ImmutablePropTypes.list,
|
|
167
|
+
field: PropTypes.object,
|
|
168
|
+
forID: PropTypes.string,
|
|
169
|
+
controlRef: PropTypes.func,
|
|
170
|
+
mediaPaths: ImmutablePropTypes.map.isRequired,
|
|
171
|
+
getAsset: PropTypes.func.isRequired,
|
|
172
|
+
onOpenMediaLibrary: PropTypes.func.isRequired,
|
|
173
|
+
onAddAsset: PropTypes.func.isRequired,
|
|
174
|
+
onRemoveInsertedMedia: PropTypes.func.isRequired,
|
|
175
|
+
classNameWrapper: PropTypes.string.isRequired,
|
|
176
|
+
setActiveStyle: PropTypes.func.isRequired,
|
|
177
|
+
setInactiveStyle: PropTypes.func.isRequired,
|
|
178
|
+
editorControl: PropTypes.elementType.isRequired,
|
|
179
|
+
resolveWidget: PropTypes.func.isRequired,
|
|
180
|
+
clearFieldErrors: PropTypes.func.isRequired,
|
|
181
|
+
fieldsErrors: ImmutablePropTypes.map.isRequired,
|
|
182
|
+
entry: ImmutablePropTypes.map.isRequired,
|
|
183
|
+
t: PropTypes.func
|
|
184
|
+
};
|
|
185
|
+
static defaultProps = {
|
|
186
|
+
value: List(),
|
|
187
|
+
parentIds: []
|
|
188
|
+
};
|
|
164
189
|
constructor(props) {
|
|
165
190
|
super(props);
|
|
166
|
-
_defineProperty(this, "childRefs", {});
|
|
167
|
-
_defineProperty(this, "valueToString", value => {
|
|
168
|
-
let stringValue;
|
|
169
|
-
if (List.isList(value) || Array.isArray(value)) {
|
|
170
|
-
stringValue = value.join(',');
|
|
171
|
-
} else {
|
|
172
|
-
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`);
|
|
173
|
-
stringValue = String(value);
|
|
174
|
-
}
|
|
175
|
-
return stringValue.replace(/,([^\s]|$)/g, ', $1');
|
|
176
|
-
});
|
|
177
|
-
_defineProperty(this, "getValueType", () => {
|
|
178
|
-
const {
|
|
179
|
-
field
|
|
180
|
-
} = this.props;
|
|
181
|
-
if (field.get('fields')) {
|
|
182
|
-
return valueTypes.MULTIPLE;
|
|
183
|
-
} else if (field.get('field')) {
|
|
184
|
-
return valueTypes.SINGLE;
|
|
185
|
-
} else if (field.get(TYPES_KEY)) {
|
|
186
|
-
return valueTypes.MIXED;
|
|
187
|
-
} else {
|
|
188
|
-
return null;
|
|
189
|
-
}
|
|
190
|
-
});
|
|
191
|
-
_defineProperty(this, "uniqueFieldId", _uniqueId(`${this.props.field.get('name')}-field-`));
|
|
192
|
-
_defineProperty(this, "handleChange", e => {
|
|
193
|
-
const {
|
|
194
|
-
onChange
|
|
195
|
-
} = this.props;
|
|
196
|
-
const oldValue = this.state.value;
|
|
197
|
-
const newValue = e.target.value.trim();
|
|
198
|
-
const listValue = newValue ? newValue.split(',') : [];
|
|
199
|
-
if (newValue.match(/,$/) && oldValue.match(/, $/)) {
|
|
200
|
-
listValue.pop();
|
|
201
|
-
}
|
|
202
|
-
const parsedValue = this.valueToString(listValue);
|
|
203
|
-
this.setState({
|
|
204
|
-
value: parsedValue
|
|
205
|
-
});
|
|
206
|
-
onChange(List(listValue.map(val => val.trim())));
|
|
207
|
-
});
|
|
208
|
-
_defineProperty(this, "handleFocus", () => {
|
|
209
|
-
this.props.setActiveStyle();
|
|
210
|
-
});
|
|
211
|
-
_defineProperty(this, "handleBlur", e => {
|
|
212
|
-
const listValue = e.target.value.split(',').map(el => el.trim()).filter(el => el);
|
|
213
|
-
this.setState({
|
|
214
|
-
value: this.valueToString(listValue)
|
|
215
|
-
});
|
|
216
|
-
this.props.setInactiveStyle();
|
|
217
|
-
});
|
|
218
|
-
_defineProperty(this, "handleAdd", e => {
|
|
219
|
-
e.preventDefault();
|
|
220
|
-
const {
|
|
221
|
-
field
|
|
222
|
-
} = this.props;
|
|
223
|
-
const parsedValue = this.getValueType() === valueTypes.SINGLE ? this.singleDefault() : fromJS(this.multipleDefault(field.get('fields')));
|
|
224
|
-
this.addItem(parsedValue);
|
|
225
|
-
});
|
|
226
|
-
_defineProperty(this, "singleDefault", () => {
|
|
227
|
-
return this.props.field.getIn(['field', 'default'], null);
|
|
228
|
-
});
|
|
229
|
-
_defineProperty(this, "multipleDefault", fields => {
|
|
230
|
-
return this.getFieldsDefault(fields);
|
|
231
|
-
});
|
|
232
|
-
_defineProperty(this, "handleAddType", (type, typeKey) => {
|
|
233
|
-
const parsedValue = fromJS(this.mixedDefault(typeKey, type));
|
|
234
|
-
this.addItem(parsedValue);
|
|
235
|
-
});
|
|
236
|
-
_defineProperty(this, "mixedDefault", (typeKey, type) => {
|
|
237
|
-
const selectedType = this.props.field.get(TYPES_KEY).find(f => f.get('name') === type);
|
|
238
|
-
const fields = selectedType.get('fields') || [selectedType.get('field')];
|
|
239
|
-
return this.getFieldsDefault(fields, {
|
|
240
|
-
[typeKey]: type
|
|
241
|
-
});
|
|
242
|
-
});
|
|
243
|
-
_defineProperty(this, "getFieldsDefault", (fields, initialValue = {}) => {
|
|
244
|
-
return fields.reduce((acc, item) => {
|
|
245
|
-
const subfields = item.get('field') || item.get('fields');
|
|
246
|
-
const object = item.get('widget') == 'object';
|
|
247
|
-
const name = item.get('name');
|
|
248
|
-
const defaultValue = item.get('default', null);
|
|
249
|
-
if (List.isList(subfields) && object) {
|
|
250
|
-
const subDefaultValue = this.getFieldsDefault(subfields);
|
|
251
|
-
!_isEmpty(subDefaultValue) && (acc[name] = subDefaultValue);
|
|
252
|
-
return acc;
|
|
253
|
-
}
|
|
254
|
-
if (Map.isMap(subfields) && object) {
|
|
255
|
-
const subDefaultValue = this.getFieldsDefault([subfields]);
|
|
256
|
-
!_isEmpty(subDefaultValue) && (acc[name] = subDefaultValue);
|
|
257
|
-
return acc;
|
|
258
|
-
}
|
|
259
|
-
if (defaultValue !== null) {
|
|
260
|
-
acc[name] = defaultValue;
|
|
261
|
-
}
|
|
262
|
-
return acc;
|
|
263
|
-
}, initialValue);
|
|
264
|
-
});
|
|
265
|
-
_defineProperty(this, "addItem", parsedValue => {
|
|
266
|
-
const {
|
|
267
|
-
value,
|
|
268
|
-
onChange,
|
|
269
|
-
field
|
|
270
|
-
} = this.props;
|
|
271
|
-
const addToTop = field.get('add_to_top', false);
|
|
272
|
-
const itemKey = uuid();
|
|
273
|
-
this.setState({
|
|
274
|
-
itemsCollapsed: addToTop ? [false, ...this.state.itemsCollapsed] : [...this.state.itemsCollapsed, false],
|
|
275
|
-
keys: addToTop ? [itemKey, ...this.state.keys] : [...this.state.keys, itemKey]
|
|
276
|
-
});
|
|
277
|
-
const listValue = value || List();
|
|
278
|
-
if (addToTop) {
|
|
279
|
-
onChange(listValue.unshift(parsedValue));
|
|
280
|
-
} else {
|
|
281
|
-
onChange(listValue.push(parsedValue));
|
|
282
|
-
}
|
|
283
|
-
});
|
|
284
|
-
_defineProperty(this, "processControlRef", ref => {
|
|
285
|
-
var _this$props$controlRe, _this$props;
|
|
286
|
-
if (!ref) return;
|
|
287
|
-
const {
|
|
288
|
-
props: {
|
|
289
|
-
validationKey: key
|
|
290
|
-
}
|
|
291
|
-
} = ref;
|
|
292
|
-
this.childRefs[key] = ref;
|
|
293
|
-
(_this$props$controlRe = (_this$props = this.props).controlRef) === null || _this$props$controlRe === void 0 ? void 0 : _this$props$controlRe.call(_this$props, this);
|
|
294
|
-
});
|
|
295
|
-
_defineProperty(this, "validate", () => {
|
|
296
|
-
// First validate child widgets if this is a complex list
|
|
297
|
-
const hasChildWidgets = this.getValueType() && Object.keys(this.childRefs).length > 0;
|
|
298
|
-
if (hasChildWidgets) {
|
|
299
|
-
Object.values(this.childRefs).forEach(widget => {
|
|
300
|
-
var _widget$validate;
|
|
301
|
-
widget === null || widget === void 0 ? void 0 : (_widget$validate = widget.validate) === null || _widget$validate === void 0 ? void 0 : _widget$validate.call(widget);
|
|
302
|
-
});
|
|
303
|
-
} else {
|
|
304
|
-
this.props.validate();
|
|
305
|
-
}
|
|
306
|
-
this.props.onValidateObject(this.props.forID, this.validateSize());
|
|
307
|
-
});
|
|
308
|
-
_defineProperty(this, "validateSize", () => {
|
|
309
|
-
const {
|
|
310
|
-
field,
|
|
311
|
-
value,
|
|
312
|
-
t
|
|
313
|
-
} = this.props;
|
|
314
|
-
const min = field.get('min');
|
|
315
|
-
const max = field.get('max');
|
|
316
|
-
const required = field.get('required', true);
|
|
317
|
-
if (!required && !(value !== null && value !== void 0 && value.size)) {
|
|
318
|
-
return [];
|
|
319
|
-
}
|
|
320
|
-
const error = validations.validateMinMax(t, field.get('label', field.get('name')), value, min, max);
|
|
321
|
-
return error ? [error] : [];
|
|
322
|
-
});
|
|
323
|
-
/**
|
|
324
|
-
* In case the `onChangeObject` function is frozen by a child widget implementation,
|
|
325
|
-
* e.g. when debounced, always get the latest object value instead of using
|
|
326
|
-
* `this.props.value` directly.
|
|
327
|
-
*/
|
|
328
|
-
_defineProperty(this, "getObjectValue", idx => this.props.value.get(idx) || Map());
|
|
329
|
-
_defineProperty(this, "handleRemove", (index, event) => {
|
|
330
|
-
event.preventDefault();
|
|
331
|
-
const {
|
|
332
|
-
itemsCollapsed
|
|
333
|
-
} = this.state;
|
|
334
|
-
const {
|
|
335
|
-
value,
|
|
336
|
-
metadata,
|
|
337
|
-
onChange,
|
|
338
|
-
field,
|
|
339
|
-
clearFieldErrors,
|
|
340
|
-
onValidateObject,
|
|
341
|
-
forID,
|
|
342
|
-
fieldsErrors
|
|
343
|
-
} = this.props;
|
|
344
|
-
const collectionName = field.get('name');
|
|
345
|
-
const isSingleField = this.getValueType() === valueTypes.SINGLE;
|
|
346
|
-
const metadataRemovePath = isSingleField ? value.get(index) : value.get(index).valueSeq();
|
|
347
|
-
const parsedMetadata = metadata && !metadata.isEmpty() ? {
|
|
348
|
-
[collectionName]: metadata.removeIn(metadataRemovePath)
|
|
349
|
-
} : metadata;
|
|
350
|
-
|
|
351
|
-
// Get the key of the item being removed
|
|
352
|
-
const removedKey = this.state.keys[index];
|
|
353
|
-
|
|
354
|
-
// Update state while preserving keys for remaining items
|
|
355
|
-
const newKeys = [...this.state.keys];
|
|
356
|
-
newKeys.splice(index, 1);
|
|
357
|
-
itemsCollapsed.splice(index, 1);
|
|
358
|
-
this.setState({
|
|
359
|
-
itemsCollapsed: [...itemsCollapsed],
|
|
360
|
-
keys: newKeys
|
|
361
|
-
});
|
|
362
|
-
|
|
363
|
-
// Clear the ref for the removed item
|
|
364
|
-
delete this.childRefs[removedKey];
|
|
365
|
-
const newValue = value.delete(index);
|
|
366
|
-
|
|
367
|
-
// Clear errors for the removed item and its children
|
|
368
|
-
if (fieldsErrors) {
|
|
369
|
-
Object.entries(fieldsErrors.toJS()).forEach(([fieldId, errors]) => {
|
|
370
|
-
if (errors.some(err => {
|
|
371
|
-
var _err$parentIds;
|
|
372
|
-
return (_err$parentIds = err.parentIds) === null || _err$parentIds === void 0 ? void 0 : _err$parentIds.includes(removedKey);
|
|
373
|
-
})) {
|
|
374
|
-
clearFieldErrors(fieldId);
|
|
375
|
-
}
|
|
376
|
-
});
|
|
377
|
-
}
|
|
378
|
-
|
|
379
|
-
// If list is empty, mark it as valid
|
|
380
|
-
if (newValue.size === 0) {
|
|
381
|
-
clearFieldErrors(forID);
|
|
382
|
-
onValidateObject(forID, []);
|
|
383
|
-
}
|
|
384
|
-
|
|
385
|
-
// Update the value last to ensure all error states are cleared
|
|
386
|
-
onChange(newValue, parsedMetadata);
|
|
387
|
-
});
|
|
388
|
-
_defineProperty(this, "handleItemCollapseToggle", (index, event) => {
|
|
389
|
-
event.preventDefault();
|
|
390
|
-
const {
|
|
391
|
-
itemsCollapsed
|
|
392
|
-
} = this.state;
|
|
393
|
-
const newItemsCollapsed = itemsCollapsed.map((collapsed, itemIndex) => {
|
|
394
|
-
if (index === itemIndex) {
|
|
395
|
-
return !collapsed;
|
|
396
|
-
}
|
|
397
|
-
return collapsed;
|
|
398
|
-
});
|
|
399
|
-
this.setState({
|
|
400
|
-
itemsCollapsed: newItemsCollapsed
|
|
401
|
-
});
|
|
402
|
-
});
|
|
403
|
-
_defineProperty(this, "handleCollapseAllToggle", e => {
|
|
404
|
-
e.preventDefault();
|
|
405
|
-
const {
|
|
406
|
-
value,
|
|
407
|
-
field
|
|
408
|
-
} = this.props;
|
|
409
|
-
const {
|
|
410
|
-
itemsCollapsed,
|
|
411
|
-
listCollapsed
|
|
412
|
-
} = this.state;
|
|
413
|
-
const minimizeCollapsedItems = field.get('minimize_collapsed', false);
|
|
414
|
-
const listCollapsedByDefault = field.get('collapsed', true);
|
|
415
|
-
const allItemsCollapsed = itemsCollapsed.every(val => val === true);
|
|
416
|
-
if (minimizeCollapsedItems) {
|
|
417
|
-
let updatedItemsCollapsed = itemsCollapsed;
|
|
418
|
-
// Only allow collapsing all items in this mode but not opening all at once
|
|
419
|
-
if (!listCollapsed || !listCollapsedByDefault) {
|
|
420
|
-
updatedItemsCollapsed = Array(value.size).fill(!listCollapsed);
|
|
421
|
-
}
|
|
422
|
-
this.setState({
|
|
423
|
-
listCollapsed: !listCollapsed,
|
|
424
|
-
itemsCollapsed: updatedItemsCollapsed
|
|
425
|
-
});
|
|
426
|
-
} else {
|
|
427
|
-
this.setState({
|
|
428
|
-
itemsCollapsed: Array(value.size).fill(!allItemsCollapsed)
|
|
429
|
-
});
|
|
430
|
-
}
|
|
431
|
-
});
|
|
432
|
-
_defineProperty(this, "onSortEnd", ({
|
|
433
|
-
oldIndex,
|
|
434
|
-
newIndex
|
|
435
|
-
}) => {
|
|
436
|
-
const {
|
|
437
|
-
value
|
|
438
|
-
} = this.props;
|
|
439
|
-
const {
|
|
440
|
-
itemsCollapsed,
|
|
441
|
-
keys
|
|
442
|
-
} = this.state;
|
|
443
|
-
|
|
444
|
-
// Update value
|
|
445
|
-
const item = value.get(oldIndex);
|
|
446
|
-
const newValue = value.delete(oldIndex).insert(newIndex, item);
|
|
447
|
-
this.props.onChange(newValue);
|
|
448
|
-
|
|
449
|
-
// Update collapsing
|
|
450
|
-
const collapsed = itemsCollapsed[oldIndex];
|
|
451
|
-
itemsCollapsed.splice(oldIndex, 1);
|
|
452
|
-
const updatedItemsCollapsed = [...itemsCollapsed];
|
|
453
|
-
updatedItemsCollapsed.splice(newIndex, 0, collapsed);
|
|
454
|
-
|
|
455
|
-
// Move keys to maintain relationships
|
|
456
|
-
const movedKey = keys[oldIndex];
|
|
457
|
-
const updatedKeys = [...keys];
|
|
458
|
-
updatedKeys.splice(oldIndex, 1);
|
|
459
|
-
updatedKeys.splice(newIndex, 0, movedKey);
|
|
460
|
-
this.setState({
|
|
461
|
-
itemsCollapsed: updatedItemsCollapsed,
|
|
462
|
-
keys: updatedKeys
|
|
463
|
-
});
|
|
464
|
-
});
|
|
465
|
-
_defineProperty(this, "hasError", index => {
|
|
466
|
-
const {
|
|
467
|
-
fieldsErrors
|
|
468
|
-
} = this.props;
|
|
469
|
-
if (fieldsErrors && fieldsErrors.size > 0) {
|
|
470
|
-
return Object.values(fieldsErrors.toJS()).some(arr => arr.some(err => err.parentIds && err.parentIds.includes(this.state.keys[index])));
|
|
471
|
-
}
|
|
472
|
-
});
|
|
473
|
-
// eslint-disable-next-line react/display-name
|
|
474
|
-
_defineProperty(this, "renderItem", (item, index) => {
|
|
475
|
-
const {
|
|
476
|
-
classNameWrapper,
|
|
477
|
-
editorControl,
|
|
478
|
-
onValidateObject,
|
|
479
|
-
metadata,
|
|
480
|
-
clearFieldErrors,
|
|
481
|
-
fieldsErrors,
|
|
482
|
-
controlRef,
|
|
483
|
-
resolveWidget,
|
|
484
|
-
parentIds,
|
|
485
|
-
forID,
|
|
486
|
-
t
|
|
487
|
-
} = this.props;
|
|
488
|
-
const {
|
|
489
|
-
itemsCollapsed,
|
|
490
|
-
keys
|
|
491
|
-
} = this.state;
|
|
492
|
-
const collapsed = itemsCollapsed[index];
|
|
493
|
-
const key = keys[index];
|
|
494
|
-
let field = this.props.field;
|
|
495
|
-
const hasError = this.hasError(index);
|
|
496
|
-
const isVariableTypesList = this.getValueType() === valueTypes.MIXED;
|
|
497
|
-
if (isVariableTypesList) {
|
|
498
|
-
field = getTypedFieldForValue(field, item);
|
|
499
|
-
if (!field) {
|
|
500
|
-
return this.renderErroneousTypedItem(index, item);
|
|
501
|
-
}
|
|
502
|
-
}
|
|
503
|
-
return ___EmotionJSX(SortableListItem, {
|
|
504
|
-
css: [styles.listControlItem, collapsed && styles.listControlItemCollapsed, ";label:ListControl;" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFncEJRIiwiZmlsZSI6Ii4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IEltbXV0YWJsZVByb3BUeXBlcyBmcm9tICdyZWFjdC1pbW11dGFibGUtcHJvcHR5cGVzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCB7IGNzcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IExpc3QsIE1hcCwgZnJvbUpTIH0gZnJvbSAnaW1tdXRhYmxlJztcbmltcG9ydCB7IHBhcnRpYWwsIGlzRW1wdHksIHVuaXF1ZUlkIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tICd1dWlkJztcbmltcG9ydCBEZWNhcENtc1dpZGdldE9iamVjdCBmcm9tICdkZWNhcC1jbXMtd2lkZ2V0LW9iamVjdCc7XG5pbXBvcnQge1xuICBEbmRDb250ZXh0LFxuICBNb3VzZVNlbnNvcixcbiAgVG91Y2hTZW5zb3IsXG4gIGNsb3Nlc3RDZW50ZXIsXG4gIHVzZVNlbnNvcixcbiAgdXNlU2Vuc29ycyxcbn0gZnJvbSAnQGRuZC1raXQvY29yZSc7XG5pbXBvcnQgeyBTb3J0YWJsZUNvbnRleHQsIHVzZVNvcnRhYmxlIH0gZnJvbSAnQGRuZC1raXQvc29ydGFibGUnO1xuaW1wb3J0IHsgcmVzdHJpY3RUb1BhcmVudEVsZW1lbnQgfSBmcm9tICdAZG5kLWtpdC9tb2RpZmllcnMnO1xuaW1wb3J0IHsgQ1NTIH0gZnJvbSAnQGRuZC1raXQvdXRpbGl0aWVzJztcbmltcG9ydCB7XG4gIExpc3RJdGVtVG9wQmFyLFxuICBPYmplY3RXaWRnZXRUb3BCYXIsXG4gIGNvbG9ycyxcbiAgbGVuZ3RocyxcbiAgRmllbGRMYWJlbCxcbn0gZnJvbSAnZGVjYXAtY21zLXVpLWRlZmF1bHQnO1xuaW1wb3J0IHsgc3RyaW5nVGVtcGxhdGUsIHZhbGlkYXRpb25zIH0gZnJvbSAnZGVjYXAtY21zLWxpYi13aWRnZXRzJztcblxuaW1wb3J0IHtcbiAgVFlQRVNfS0VZLFxuICBnZXRUeXBlZEZpZWxkRm9yVmFsdWUsXG4gIHJlc29sdmVGaWVsZEtleVR5cGUsXG4gIGdldEVycm9yTWVzc2FnZUZvclR5cGVkRmllbGRBbmRWYWx1ZSxcbn0gZnJvbSAnLi90eXBlZExpc3RIZWxwZXJzJztcblxuY29uc3QgT2JqZWN0Q29udHJvbCA9IERlY2FwQ21zV2lkZ2V0T2JqZWN0LmNvbnRyb2xDb21wb25lbnQ7XG5cbmNvbnN0IExpc3RJdGVtID0gc3R5bGVkLmRpdigpO1xuXG5jb25zdCBTdHlsZWRMaXN0SXRlbVRvcEJhciA9IHN0eWxlZChMaXN0SXRlbVRvcEJhcilgXG4gIGJhY2tncm91bmQtY29sb3I6ICR7Y29sb3JzLnRleHRGaWVsZEJvcmRlcn07XG5gO1xuXG5jb25zdCBOZXN0ZWRPYmplY3RMYWJlbCA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6ICR7cHJvcHMgPT4gKHByb3BzLmNvbGxhcHNlZCA/ICdibG9jaycgOiAnbm9uZScpfTtcbiAgYm9yZGVyLXRvcDogMDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gKHByb3BzLmVycm9yID8gY29sb3JzLmVycm9yVGV4dCA6ICdpbmhlcml0Jyl9O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAke2NvbG9ycy50ZXh0RmllbGRCb3JkZXJ9O1xuICBwYWRkaW5nOiAxM3B4O1xuICBib3JkZXItcmFkaXVzOiAwIDAgJHtsZW5ndGhzLmJvcmRlclJhZGl1c30gJHtsZW5ndGhzLmJvcmRlclJhZGl1c307XG5gO1xuXG5jb25zdCBzdHlsZVN0cmluZ3MgPSB7XG4gIGNvbGxhcHNlZE9iamVjdENvbnRyb2w6IGBcbiAgICBkaXNwbGF5OiBub25lO1xuICBgLFxuICBvYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXI6IGBcbiAgICBwYWRkaW5nOiAke2xlbmd0aHMub2JqZWN0V2lkZ2V0VG9wQmFyQ29udGFpbmVyUGFkZGluZ307XG4gIGAsXG59O1xuXG5jb25zdCBzdHlsZXMgPSB7XG4gIGxpc3RDb250cm9sSXRlbTogY3NzYFxuICAgIG1hcmdpbi10b3A6IDE4cHg7XG5cbiAgICAmOmZpcnN0LW9mLXR5cGUge1xuICAgICAgbWFyZ2luLXRvcDogMjZweDtcbiAgICB9XG4gIGAsXG4gIGxpc3RDb250cm9sSXRlbUNvbGxhcHNlZDogY3NzYFxuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICBgLFxufTtcblxuZnVuY3Rpb24gU29ydGFibGVMaXN0KHsgaXRlbXMsIGNoaWxkcmVuLCBvblNvcnRFbmQsIGtleXMgfSkge1xuICBjb25zdCBhY3RpdmF0aW9uQ29uc3RyYWludCA9IHsgZGlzdGFuY2U6IDQgfTtcbiAgY29uc3Qgc2Vuc29ycyA9IHVzZVNlbnNvcnMoXG4gICAgdXNlU2Vuc29yKE1vdXNlU2Vuc29yLCB7IGFjdGl2YXRpb25Db25zdHJhaW50IH0pLFxuICAgIHVzZVNlbnNvcihUb3VjaFNlbnNvciwgeyBhY3RpdmF0aW9uQ29uc3RyYWludCB9KSxcbiAgKTtcblxuICBmdW5jdGlvbiBoYW5kbGVTb3J0RW5kKHsgYWN0aXZlLCBvdmVyIH0pIHtcbiAgICBvblNvcnRFbmQoe1xuICAgICAgb2xkSW5kZXg6IGtleXMuaW5kZXhPZihhY3RpdmUuaWQpLFxuICAgICAgbmV3SW5kZXg6IGtleXMuaW5kZXhPZihvdmVyLmlkKSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdj5cbiAgICAgIDxEbmRDb250ZXh0XG4gICAgICAgIG1vZGlmaWVycz17W3Jlc3RyaWN0VG9QYXJlbnRFbGVtZW50XX1cbiAgICAgICAgY29sbGlzaW9uRGV0ZWN0aW9uPXtjbG9zZXN0Q2VudGVyfVxuICAgICAgICBzZW5zb3JzPXtzZW5zb3JzfVxuICAgICAgICBvbkRyYWdFbmQ9e2hhbmRsZVNvcnRFbmR9XG4gICAgICA+XG4gICAgICAgIDxTb3J0YWJsZUNvbnRleHQgaXRlbXM9e2l0ZW1zfT57Y2hpbGRyZW59PC9Tb3J0YWJsZUNvbnRleHQ+XG4gICAgICA8L0RuZENvbnRleHQ+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFNvcnRhYmxlTGlzdEl0ZW0ocHJvcHMpIHtcbiAgY29uc3QgeyBzZXROb2RlUmVmLCB0cmFuc2Zvcm0sIHRyYW5zaXRpb24gfSA9IHVzZVNvcnRhYmxlKHtcbiAgICBpZDogcHJvcHMuaWQsXG4gIH0pO1xuXG4gIGNvbnN0IHN0eWxlID0ge1xuICAgIHRyYW5zZm9ybTogQ1NTLlRyYW5zZm9ybS50b1N0cmluZyh0cmFuc2Zvcm0pLFxuICAgIHRyYW5zaXRpb24sXG4gIH07XG5cbiAgY29uc3QgeyBjb2xsYXBzZWQgfSA9IHByb3BzO1xuXG4gIHJldHVybiAoXG4gICAgPExpc3RJdGVtXG4gICAgICBzb3J0YWJsZVxuICAgICAgcmVmPXtzZXROb2RlUmVmfVxuICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgY3NzPXtbc3R5bGVzLmxpc3RDb250cm9sSXRlbSwgY29sbGFwc2VkICYmIHN0eWxlcy5saXN0Q29udHJvbEl0ZW1Db2xsYXBzZWRdfVxuICAgID5cbiAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICA8L0xpc3RJdGVtPlxuICApO1xufVxuXG5mdW5jdGlvbiBEcmFnSGFuZGxlKHsgY2hpbGRyZW4sIGlkIH0pIHtcbiAgY29uc3QgeyBhdHRyaWJ1dGVzLCBsaXN0ZW5lcnMgfSA9IHVzZVNvcnRhYmxlKHtcbiAgICBpZCxcbiAgfSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IHsuLi5hdHRyaWJ1dGVzfSB7Li4ubGlzdGVuZXJzfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuY29uc3QgdmFsdWVUeXBlcyA9IHtcbiAgU0lOR0xFOiAnU0lOR0xFJyxcbiAgTVVMVElQTEU6ICdNVUxUSVBMRScsXG4gIE1JWEVEOiAnTUlYRUQnLFxufTtcblxuZnVuY3Rpb24gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgbGFiZWwsIGl0ZW0pIHtcbiAgY29uc3QgZGF0YSA9IHN0cmluZ1RlbXBsYXRlLmFkZEZpbGVUZW1wbGF0ZUZpZWxkcyhcbiAgICBlbnRyeS5nZXQoJ3BhdGgnKSxcbiAgICBpdGVtLnNldCgnZmllbGRzLmxhYmVsJywgbGFiZWwpLFxuICApO1xuICByZXR1cm4gc3RyaW5nVGVtcGxhdGUuY29tcGlsZVN0cmluZ1RlbXBsYXRlKHN1bW1hcnksIG51bGwsICcnLCBkYXRhKTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVJdGVtKGZpZWxkLCBpdGVtKSB7XG4gIGlmICghTWFwLmlzTWFwKGl0ZW0pKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYCcke2ZpZWxkLmdldCgnbmFtZScpfScgZmllbGQgaXRlbSB2YWx1ZSB2YWx1ZSBzaG91bGQgYmUgYSBtYXAgYnV0IGlzIGEgJyR7dHlwZW9mIGl0ZW19J2AsXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIExhYmVsQ29tcG9uZW50KHsgZmllbGQsIGlzQWN0aXZlLCBoYXNFcnJvcnMsIHVuaXF1ZUZpZWxkSWQsIGlzRmllbGRPcHRpb25hbCwgdCB9KSB7XG4gIGNvbnN0IGxhYmVsID0gYCR7ZmllbGQuZ2V0KCdsYWJlbCcsIGZpZWxkLmdldCgnbmFtZScpKX1gO1xuICByZXR1cm4gKFxuICAgIDxGaWVsZExhYmVsIGlzQWN0aXZlPXtpc0FjdGl2ZX0gaGFzRXJyb3JzPXtoYXNFcnJvcnN9IGh0bWxGb3I9e3VuaXF1ZUZpZWxkSWR9PlxuICAgICAge2xhYmVsfSB7YCR7aXNGaWVsZE9wdGlvbmFsID8gYCAoJHt0KCdlZGl0b3IuZWRpdG9yQ29udHJvbC5maWVsZC5vcHRpb25hbCcpfSlgIDogJyd9YH1cbiAgICA8L0ZpZWxkTGFiZWw+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExpc3RDb250cm9sIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgY2hpbGRSZWZzID0ge307XG5cbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICBtZXRhZGF0YTogSW1tdXRhYmxlUHJvcFR5cGVzLm1hcCxcbiAgICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvbkNoYW5nZU9iamVjdDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvblZhbGlkYXRlT2JqZWN0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHZhbGlkYXRlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHZhbHVlOiBJbW11dGFibGVQcm9wVHlwZXMubGlzdCxcbiAgICBmaWVsZDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBmb3JJRDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjb250cm9sUmVmOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBtZWRpYVBhdGhzOiBJbW11dGFibGVQcm9wVHlwZXMubWFwLmlzUmVxdWlyZWQsXG4gICAgZ2V0QXNzZXQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25PcGVuTWVkaWFMaWJyYXJ5OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uQWRkQXNzZXQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25SZW1vdmVJbnNlcnRlZE1lZGlhOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGNsYXNzTmFtZVdyYXBwZXI6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBzZXRBY3RpdmVTdHlsZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBzZXRJbmFjdGl2ZVN0eWxlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGVkaXRvckNvbnRyb2w6IFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkLFxuICAgIHJlc29sdmVXaWRnZXQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgY2xlYXJGaWVsZEVycm9yczogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBmaWVsZHNFcnJvcnM6IEltbXV0YWJsZVByb3BUeXBlcy5tYXAuaXNSZXF1aXJlZCxcbiAgICBlbnRyeTogSW1tdXRhYmxlUHJvcFR5cGVzLm1hcC5pc1JlcXVpcmVkLFxuICAgIHQ6IFByb3BUeXBlcy5mdW5jLFxuICB9O1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgdmFsdWU6IExpc3QoKSxcbiAgICBwYXJlbnRJZHM6IFtdLFxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIGNvbnN0IHsgZmllbGQsIHZhbHVlIH0gPSBwcm9wcztcbiAgICBjb25zdCBsaXN0Q29sbGFwc2VkID0gZmllbGQuZ2V0KCdjb2xsYXBzZWQnLCB0cnVlKTtcbiAgICBjb25zdCBpdGVtc0NvbGxhcHNlZCA9ICh2YWx1ZSAmJiBBcnJheSh2YWx1ZS5zaXplKS5maWxsKGxpc3RDb2xsYXBzZWQpKSB8fCBbXTtcbiAgICBjb25zdCBrZXlzID0gKHZhbHVlICYmIEFycmF5LmZyb20oeyBsZW5ndGg6IHZhbHVlLnNpemUgfSwgKCkgPT4gdXVpZCgpKSkgfHwgW107XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgbGlzdENvbGxhcHNlZCxcbiAgICAgIGl0ZW1zQ29sbGFwc2VkLFxuICAgICAgdmFsdWU6IHRoaXMudmFsdWVUb1N0cmluZyh2YWx1ZSksXG4gICAgICBrZXlzLFxuICAgIH07XG4gIH1cblxuICB2YWx1ZVRvU3RyaW5nID0gdmFsdWUgPT4ge1xuICAgIGxldCBzdHJpbmdWYWx1ZTtcbiAgICBpZiAoTGlzdC5pc0xpc3QodmFsdWUpIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBzdHJpbmdWYWx1ZSA9IHZhbHVlLmpvaW4oJywnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgRXhwZWN0ZWQgTGlzdCB2YWx1ZSB0byBiZSBhbiBhcnJheSBidXQgcmVjZWl2ZWQgJyR7dmFsdWV9JyB3aXRoIHR5cGUgb2YgJyR7dHlwZW9mIHZhbHVlfScuIFBsZWFzZSBjaGVjayB0aGUgdmFsdWUgcHJvdmlkZWQgdG8gdGhlICcke3RoaXMucHJvcHMuZmllbGQuZ2V0KFxuICAgICAgICAgICduYW1lJyxcbiAgICAgICAgKX0nIGZpZWxkYCxcbiAgICAgICk7XG4gICAgICBzdHJpbmdWYWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBzdHJpbmdWYWx1ZS5yZXBsYWNlKC8sKFteXFxzXXwkKS9nLCAnLCAkMScpO1xuICB9O1xuXG4gIGdldFZhbHVlVHlwZSA9ICgpID0+IHtcbiAgICBjb25zdCB7IGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChmaWVsZC5nZXQoJ2ZpZWxkcycpKSB7XG4gICAgICByZXR1cm4gdmFsdWVUeXBlcy5NVUxUSVBMRTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkLmdldCgnZmllbGQnKSkge1xuICAgICAgcmV0dXJuIHZhbHVlVHlwZXMuU0lOR0xFO1xuICAgIH0gZWxzZSBpZiAoZmllbGQuZ2V0KFRZUEVTX0tFWSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZVR5cGVzLk1JWEVEO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH07XG5cbiAgdW5pcXVlRmllbGRJZCA9IHVuaXF1ZUlkKGAke3RoaXMucHJvcHMuZmllbGQuZ2V0KCduYW1lJyl9LWZpZWxkLWApO1xuICAvKipcbiAgICogQWx3YXlzIHVwZGF0ZSBzbyB0aGF0IGVhY2ggbmVzdGVkIHdpZGdldCBoYXMgdGhlIG9wdGlvbiB0byB1cGRhdGUuIFRoaXMgaXNcbiAgICogcmVxdWlyZWQgYmVjYXVzZSBDb250cm9sSE9DIHByb3ZpZGVzIGEgZGVmYXVsdCBgc2hvdWxkQ29tcG9uZW50VXBkYXRlYFxuICAgKiB3aGljaCBvbmx5IHVwZGF0ZXMgaWYgdGhlIHZhbHVlIGNoYW5nZXMsIGJ1dCBldmVyeSB3aWRnZXQgbXVzdCBiZSBhbGxvd2VkXG4gICAqIHRvIG92ZXJyaWRlIHRoaXMuXG4gICAqL1xuICBzaG91bGRDb21wb25lbnRVcGRhdGUoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBoYW5kbGVDaGFuZ2UgPSBlID0+IHtcbiAgICBjb25zdCB7IG9uQ2hhbmdlIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy5zdGF0ZS52YWx1ZTtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IGUudGFyZ2V0LnZhbHVlLnRyaW0oKTtcbiAgICBjb25zdCBsaXN0VmFsdWUgPSBuZXdWYWx1ZSA/IG5ld1ZhbHVlLnNwbGl0KCcsJykgOiBbXTtcbiAgICBpZiAobmV3VmFsdWUubWF0Y2goLywkLykgJiYgb2xkVmFsdWUubWF0Y2goLywgJC8pKSB7XG4gICAgICBsaXN0VmFsdWUucG9wKCk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPSB0aGlzLnZhbHVlVG9TdHJpbmcobGlzdFZhbHVlKTtcbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHBhcnNlZFZhbHVlIH0pO1xuICAgIG9uQ2hhbmdlKExpc3QobGlzdFZhbHVlLm1hcCh2YWwgPT4gdmFsLnRyaW0oKSkpKTtcbiAgfTtcblxuICBoYW5kbGVGb2N1cyA9ICgpID0+IHtcbiAgICB0aGlzLnByb3BzLnNldEFjdGl2ZVN0eWxlKCk7XG4gIH07XG5cbiAgaGFuZGxlQmx1ciA9IGUgPT4ge1xuICAgIGNvbnN0IGxpc3RWYWx1ZSA9IGUudGFyZ2V0LnZhbHVlXG4gICAgICAuc3BsaXQoJywnKVxuICAgICAgLm1hcChlbCA9PiBlbC50cmltKCkpXG4gICAgICAuZmlsdGVyKGVsID0+IGVsKTtcbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHRoaXMudmFsdWVUb1N0cmluZyhsaXN0VmFsdWUpIH0pO1xuICAgIHRoaXMucHJvcHMuc2V0SW5hY3RpdmVTdHlsZSgpO1xuICB9O1xuXG4gIGhhbmRsZUFkZCA9IGUgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHBhcnNlZFZhbHVlID1cbiAgICAgIHRoaXMuZ2V0VmFsdWVUeXBlKCkgPT09IHZhbHVlVHlwZXMuU0lOR0xFXG4gICAgICAgID8gdGhpcy5zaW5nbGVEZWZhdWx0KClcbiAgICAgICAgOiBmcm9tSlModGhpcy5tdWx0aXBsZURlZmF1bHQoZmllbGQuZ2V0KCdmaWVsZHMnKSkpO1xuICAgIHRoaXMuYWRkSXRlbShwYXJzZWRWYWx1ZSk7XG4gIH07XG5cbiAgc2luZ2xlRGVmYXVsdCA9ICgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5maWVsZC5nZXRJbihbJ2ZpZWxkJywgJ2RlZmF1bHQnXSwgbnVsbCk7XG4gIH07XG5cbiAgbXVsdGlwbGVEZWZhdWx0ID0gZmllbGRzID0+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KGZpZWxkcyk7XG4gIH07XG5cbiAgaGFuZGxlQWRkVHlwZSA9ICh0eXBlLCB0eXBlS2V5KSA9PiB7XG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPSBmcm9tSlModGhpcy5taXhlZERlZmF1bHQodHlwZUtleSwgdHlwZSkpO1xuICAgIHRoaXMuYWRkSXRlbShwYXJzZWRWYWx1ZSk7XG4gIH07XG5cbiAgbWl4ZWREZWZhdWx0ID0gKHR5cGVLZXksIHR5cGUpID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZFR5cGUgPSB0aGlzLnByb3BzLmZpZWxkLmdldChUWVBFU19LRVkpLmZpbmQoZiA9PiBmLmdldCgnbmFtZScpID09PSB0eXBlKTtcbiAgICBjb25zdCBmaWVsZHMgPSBzZWxlY3RlZFR5cGUuZ2V0KCdmaWVsZHMnKSB8fCBbc2VsZWN0ZWRUeXBlLmdldCgnZmllbGQnKV07XG5cbiAgICByZXR1cm4gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KGZpZWxkcywgeyBbdHlwZUtleV06IHR5cGUgfSk7XG4gIH07XG5cbiAgZ2V0RmllbGRzRGVmYXVsdCA9IChmaWVsZHMsIGluaXRpYWxWYWx1ZSA9IHt9KSA9PiB7XG4gICAgcmV0dXJuIGZpZWxkcy5yZWR1Y2UoKGFjYywgaXRlbSkgPT4ge1xuICAgICAgY29uc3Qgc3ViZmllbGRzID0gaXRlbS5nZXQoJ2ZpZWxkJykgfHwgaXRlbS5nZXQoJ2ZpZWxkcycpO1xuICAgICAgY29uc3Qgb2JqZWN0ID0gaXRlbS5nZXQoJ3dpZGdldCcpID09ICdvYmplY3QnO1xuICAgICAgY29uc3QgbmFtZSA9IGl0ZW0uZ2V0KCduYW1lJyk7XG4gICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSBpdGVtLmdldCgnZGVmYXVsdCcsIG51bGwpO1xuXG4gICAgICBpZiAoTGlzdC5pc0xpc3Qoc3ViZmllbGRzKSAmJiBvYmplY3QpIHtcbiAgICAgICAgY29uc3Qgc3ViRGVmYXVsdFZhbHVlID0gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KHN1YmZpZWxkcyk7XG4gICAgICAgICFpc0VtcHR5KHN1YkRlZmF1bHRWYWx1ZSkgJiYgKGFjY1tuYW1lXSA9IHN1YkRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9XG5cbiAgICAgIGlmIChNYXAuaXNNYXAoc3ViZmllbGRzKSAmJiBvYmplY3QpIHtcbiAgICAgICAgY29uc3Qgc3ViRGVmYXVsdFZhbHVlID0gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KFtzdWJmaWVsZHNdKTtcbiAgICAgICAgIWlzRW1wdHkoc3ViRGVmYXVsdFZhbHVlKSAmJiAoYWNjW25hbWVdID0gc3ViRGVmYXVsdFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH1cblxuICAgICAgaWYgKGRlZmF1bHRWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBhY2NbbmFtZV0gPSBkZWZhdWx0VmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgaW5pdGlhbFZhbHVlKTtcbiAgfTtcblxuICBhZGRJdGVtID0gcGFyc2VkVmFsdWUgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWUsIG9uQ2hhbmdlLCBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBhZGRUb1RvcCA9IGZpZWxkLmdldCgnYWRkX3RvX3RvcCcsIGZhbHNlKTtcblxuICAgIGNvbnN0IGl0ZW1LZXkgPSB1dWlkKCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBpdGVtc0NvbGxhcHNlZDogYWRkVG9Ub3BcbiAgICAgICAgPyBbZmFsc2UsIC4uLnRoaXMuc3RhdGUuaXRlbXNDb2xsYXBzZWRdXG4gICAgICAgIDogWy4uLnRoaXMuc3RhdGUuaXRlbXNDb2xsYXBzZWQsIGZhbHNlXSxcbiAgICAgIGtleXM6IGFkZFRvVG9wID8gW2l0ZW1LZXksIC4uLnRoaXMuc3RhdGUua2V5c10gOiBbLi4udGhpcy5zdGF0ZS5rZXlzLCBpdGVtS2V5XSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGxpc3RWYWx1ZSA9IHZhbHVlIHx8IExpc3QoKTtcbiAgICBpZiAoYWRkVG9Ub3ApIHtcbiAgICAgIG9uQ2hhbmdlKGxpc3RWYWx1ZS51bnNoaWZ0KHBhcnNlZFZhbHVlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uQ2hhbmdlKGxpc3RWYWx1ZS5wdXNoKHBhcnNlZFZhbHVlKSk7XG4gICAgfVxuICB9O1xuXG4gIHByb2Nlc3NDb250cm9sUmVmID0gcmVmID0+IHtcbiAgICBpZiAoIXJlZikgcmV0dXJuO1xuICAgIGNvbnN0IHtcbiAgICAgIHByb3BzOiB7IHZhbGlkYXRpb25LZXk6IGtleSB9LFxuICAgIH0gPSByZWY7XG4gICAgdGhpcy5jaGlsZFJlZnNba2V5XSA9IHJlZjtcbiAgICB0aGlzLnByb3BzLmNvbnRyb2xSZWY/Lih0aGlzKTtcbiAgfTtcblxuICB2YWxpZGF0ZSA9ICgpID0+IHtcbiAgICAvLyBGaXJzdCB2YWxpZGF0ZSBjaGlsZCB3aWRnZXRzIGlmIHRoaXMgaXMgYSBjb21wbGV4IGxpc3RcbiAgICBjb25zdCBoYXNDaGlsZFdpZGdldHMgPSB0aGlzLmdldFZhbHVlVHlwZSgpICYmIE9iamVjdC5rZXlzKHRoaXMuY2hpbGRSZWZzKS5sZW5ndGggPiAwO1xuICAgIGlmIChoYXNDaGlsZFdpZGdldHMpIHtcbiAgICAgIE9iamVjdC52YWx1ZXModGhpcy5jaGlsZFJlZnMpLmZvckVhY2god2lkZ2V0ID0+IHtcbiAgICAgICAgd2lkZ2V0Py52YWxpZGF0ZT8uKCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9wcy52YWxpZGF0ZSgpO1xuICAgIH1cbiAgICB0aGlzLnByb3BzLm9uVmFsaWRhdGVPYmplY3QodGhpcy5wcm9wcy5mb3JJRCwgdGhpcy52YWxpZGF0ZVNpemUoKSk7XG4gIH07XG5cbiAgdmFsaWRhdGVTaXplID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgZmllbGQsIHZhbHVlLCB0IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG1pbiA9IGZpZWxkLmdldCgnbWluJyk7XG4gICAgY29uc3QgbWF4ID0gZmllbGQuZ2V0KCdtYXgnKTtcbiAgICBjb25zdCByZXF1aXJlZCA9IGZpZWxkLmdldCgncmVxdWlyZWQnLCB0cnVlKTtcblxuICAgIGlmICghcmVxdWlyZWQgJiYgIXZhbHVlPy5zaXplKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgZXJyb3IgPSB2YWxpZGF0aW9ucy52YWxpZGF0ZU1pbk1heChcbiAgICAgIHQsXG4gICAgICBmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpLFxuICAgICAgdmFsdWUsXG4gICAgICBtaW4sXG4gICAgICBtYXgsXG4gICAgKTtcblxuICAgIHJldHVybiBlcnJvciA/IFtlcnJvcl0gOiBbXTtcbiAgfTtcblxuICAvKipcbiAgICogSW4gY2FzZSB0aGUgYG9uQ2hhbmdlT2JqZWN0YCBmdW5jdGlvbiBpcyBmcm96ZW4gYnkgYSBjaGlsZCB3aWRnZXQgaW1wbGVtZW50YXRpb24sXG4gICAqIGUuZy4gd2hlbiBkZWJvdW5jZWQsIGFsd2F5cyBnZXQgdGhlIGxhdGVzdCBvYmplY3QgdmFsdWUgaW5zdGVhZCBvZiB1c2luZ1xuICAgKiBgdGhpcy5wcm9wcy52YWx1ZWAgZGlyZWN0bHkuXG4gICAqL1xuICBnZXRPYmplY3RWYWx1ZSA9IGlkeCA9PiB0aGlzLnByb3BzLnZhbHVlLmdldChpZHgpIHx8IE1hcCgpO1xuXG4gIGhhbmRsZUNoYW5nZUZvcihpbmRleCkge1xuICAgIHJldHVybiAoZiwgbmV3VmFsdWUsIG5ld01ldGFkYXRhKSA9PiB7XG4gICAgICBjb25zdCB7IHZhbHVlLCBtZXRhZGF0YSwgb25DaGFuZ2UsIGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBmaWVsZC5nZXQoJ25hbWUnKTtcbiAgICAgIGNvbnN0IGxpc3RGaWVsZE9iamVjdFdpZGdldCA9IGZpZWxkLmdldEluKFsnZmllbGQnLCAnd2lkZ2V0J10pID09PSAnb2JqZWN0JztcbiAgICAgIGNvbnN0IHdpdGhOYW1lS2V5ID1cbiAgICAgICAgdGhpcy5nZXRWYWx1ZVR5cGUoKSAhPT0gdmFsdWVUeXBlcy5TSU5HTEUgfHxcbiAgICAgICAgKHRoaXMuZ2V0VmFsdWVUeXBlKCkgPT09IHZhbHVlVHlwZXMuU0lOR0xFICYmIGxpc3RGaWVsZE9iamVjdFdpZGdldCk7XG4gICAgICBjb25zdCBuZXdPYmplY3RWYWx1ZSA9IHdpdGhOYW1lS2V5XG4gICAgICAgID8gdGhpcy5nZXRPYmplY3RWYWx1ZShpbmRleCkuc2V0KGYuZ2V0KCduYW1lJyksIG5ld1ZhbHVlKVxuICAgICAgICA6IG5ld1ZhbHVlO1xuICAgICAgY29uc3QgcGFyc2VkTWV0YWRhdGEgPSB7XG4gICAgICAgIFtjb2xsZWN0aW9uTmFtZV06IE9iamVjdC5hc3NpZ24obWV0YWRhdGEgPyBtZXRhZGF0YS50b0pTKCkgOiB7fSwgbmV3TWV0YWRhdGEgfHwge30pLFxuICAgICAgfTtcbiAgICAgIG9uQ2hhbmdlKHZhbHVlLnNldChpbmRleCwgbmV3T2JqZWN0VmFsdWUpLCBwYXJzZWRNZXRhZGF0YSk7XG4gICAgfTtcbiAgfVxuXG4gIGhhbmRsZVJlbW92ZSA9IChpbmRleCwgZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3Qge1xuICAgICAgdmFsdWUsXG4gICAgICBtZXRhZGF0YSxcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgZmllbGQsXG4gICAgICBjbGVhckZpZWxkRXJyb3JzLFxuICAgICAgb25WYWxpZGF0ZU9iamVjdCxcbiAgICAgIGZvcklELFxuICAgICAgZmllbGRzRXJyb3JzLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBmaWVsZC5nZXQoJ25hbWUnKTtcbiAgICBjb25zdCBpc1NpbmdsZUZpZWxkID0gdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5TSU5HTEU7XG5cbiAgICBjb25zdCBtZXRhZGF0YVJlbW92ZVBhdGggPSBpc1NpbmdsZUZpZWxkID8gdmFsdWUuZ2V0KGluZGV4KSA6IHZhbHVlLmdldChpbmRleCkudmFsdWVTZXEoKTtcbiAgICBjb25zdCBwYXJzZWRNZXRhZGF0YSA9XG4gICAgICBtZXRhZGF0YSAmJiAhbWV0YWRhdGEuaXNFbXB0eSgpXG4gICAgICAgID8geyBbY29sbGVjdGlvbk5hbWVdOiBtZXRhZGF0YS5yZW1vdmVJbihtZXRhZGF0YVJlbW92ZVBhdGgpIH1cbiAgICAgICAgOiBtZXRhZGF0YTtcblxuICAgIC8vIEdldCB0aGUga2V5IG9mIHRoZSBpdGVtIGJlaW5nIHJlbW92ZWRcbiAgICBjb25zdCByZW1vdmVkS2V5ID0gdGhpcy5zdGF0ZS5rZXlzW2luZGV4XTtcblxuICAgIC8vIFVwZGF0ZSBzdGF0ZSB3aGlsZSBwcmVzZXJ2aW5nIGtleXMgZm9yIHJlbWFpbmluZyBpdGVtc1xuICAgIGNvbnN0IG5ld0tleXMgPSBbLi4udGhpcy5zdGF0ZS5rZXlzXTtcbiAgICBuZXdLZXlzLnNwbGljZShpbmRleCwgMSk7XG4gICAgaXRlbXNDb2xsYXBzZWQuc3BsaWNlKGluZGV4LCAxKTtcblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXNDb2xsYXBzZWQ6IFsuLi5pdGVtc0NvbGxhcHNlZF0sXG4gICAgICBrZXlzOiBuZXdLZXlzLFxuICAgIH0pO1xuXG4gICAgLy8gQ2xlYXIgdGhlIHJlZiBmb3IgdGhlIHJlbW92ZWQgaXRlbVxuICAgIGRlbGV0ZSB0aGlzLmNoaWxkUmVmc1tyZW1vdmVkS2V5XTtcblxuICAgIGNvbnN0IG5ld1ZhbHVlID0gdmFsdWUuZGVsZXRlKGluZGV4KTtcblxuICAgIC8vIENsZWFyIGVycm9ycyBmb3IgdGhlIHJlbW92ZWQgaXRlbSBhbmQgaXRzIGNoaWxkcmVuXG4gICAgaWYgKGZpZWxkc0Vycm9ycykge1xuICAgICAgT2JqZWN0LmVudHJpZXMoZmllbGRzRXJyb3JzLnRvSlMoKSkuZm9yRWFjaCgoW2ZpZWxkSWQsIGVycm9yc10pID0+IHtcbiAgICAgICAgaWYgKGVycm9ycy5zb21lKGVyciA9PiBlcnIucGFyZW50SWRzPy5pbmNsdWRlcyhyZW1vdmVkS2V5KSkpIHtcbiAgICAgICAgICBjbGVhckZpZWxkRXJyb3JzKGZpZWxkSWQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBJZiBsaXN0IGlzIGVtcHR5LCBtYXJrIGl0IGFzIHZhbGlkXG4gICAgaWYgKG5ld1ZhbHVlLnNpemUgPT09IDApIHtcbiAgICAgIGNsZWFyRmllbGRFcnJvcnMoZm9ySUQpO1xuICAgICAgb25WYWxpZGF0ZU9iamVjdChmb3JJRCwgW10pO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSB0aGUgdmFsdWUgbGFzdCB0byBlbnN1cmUgYWxsIGVycm9yIHN0YXRlcyBhcmUgY2xlYXJlZFxuICAgIG9uQ2hhbmdlKG5ld1ZhbHVlLCBwYXJzZWRNZXRhZGF0YSk7XG4gIH07XG5cbiAgaGFuZGxlSXRlbUNvbGxhcHNlVG9nZ2xlID0gKGluZGV4LCBldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBuZXdJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLm1hcCgoY29sbGFwc2VkLCBpdGVtSW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCA9PT0gaXRlbUluZGV4KSB7XG4gICAgICAgIHJldHVybiAhY29sbGFwc2VkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbGxhcHNlZDtcbiAgICB9KTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGl0ZW1zQ29sbGFwc2VkOiBuZXdJdGVtc0NvbGxhcHNlZCxcbiAgICB9KTtcbiAgfTtcblxuICBoYW5kbGVDb2xsYXBzZUFsbFRvZ2dsZSA9IGUgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IHZhbHVlLCBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkLCBsaXN0Q29sbGFwc2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IG1pbmltaXplQ29sbGFwc2VkSXRlbXMgPSBmaWVsZC5nZXQoJ21pbmltaXplX2NvbGxhcHNlZCcsIGZhbHNlKTtcbiAgICBjb25zdCBsaXN0Q29sbGFwc2VkQnlEZWZhdWx0ID0gZmllbGQuZ2V0KCdjb2xsYXBzZWQnLCB0cnVlKTtcbiAgICBjb25zdCBhbGxJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLmV2ZXJ5KHZhbCA9PiB2YWwgPT09IHRydWUpO1xuXG4gICAgaWYgKG1pbmltaXplQ29sbGFwc2VkSXRlbXMpIHtcbiAgICAgIGxldCB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZDtcbiAgICAgIC8vIE9ubHkgYWxsb3cgY29sbGFwc2luZyBhbGwgaXRlbXMgaW4gdGhpcyBtb2RlIGJ1dCBub3Qgb3BlbmluZyBhbGwgYXQgb25jZVxuICAgICAgaWYgKCFsaXN0Q29sbGFwc2VkIHx8ICFsaXN0Q29sbGFwc2VkQnlEZWZhdWx0KSB7XG4gICAgICAgIHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCA9IEFycmF5KHZhbHVlLnNpemUpLmZpbGwoIWxpc3RDb2xsYXBzZWQpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGxpc3RDb2xsYXBzZWQ6ICFsaXN0Q29sbGFwc2VkLCBpdGVtc0NvbGxhcHNlZDogdXBkYXRlZEl0ZW1zQ29sbGFwc2VkIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgaXRlbXNDb2xsYXBzZWQ6IEFycmF5KHZhbHVlLnNpemUpLmZpbGwoIWFsbEl0ZW1zQ29sbGFwc2VkKSB9KTtcbiAgICB9XG4gIH07XG5cbiAgb2JqZWN0TGFiZWwoaXRlbSkge1xuICAgIGNvbnN0IHsgZmllbGQsIGVudHJ5IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHZhbHVlVHlwZSA9IHRoaXMuZ2V0VmFsdWVUeXBlKCk7XG4gICAgc3dpdGNoICh2YWx1ZVR5cGUpIHtcbiAgICAgIGNhc2UgdmFsdWVUeXBlcy5NSVhFRDoge1xuICAgICAgICBpZiAoIXZhbGlkYXRlSXRlbShmaWVsZCwgaXRlbSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXRlbVR5cGUgPSBnZXRUeXBlZEZpZWxkRm9yVmFsdWUoZmllbGQsIGl0ZW0pO1xuICAgICAgICBjb25zdCBsYWJlbCA9IGl0ZW1UeXBlLmdldCgnbGFiZWwnLCBpdGVtVHlwZS5nZXQoJ25hbWUnKSk7XG4gICAgICAgIC8vIGVhY2ggdHlwZSBjYW4gaGF2ZSBpdHMgb3duIHN1bW1hcnksIGJ1dCBkZWZhdWx0IHRvIHRoZSBsaXN0IHN1bW1hcnkgaWYgZXhpc3RzXG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBpdGVtVHlwZS5nZXQoJ3N1bW1hcnknLCBmaWVsZC5nZXQoJ3N1bW1hcnknKSk7XG4gICAgICAgIGNvbnN0IGxhYmVsUmV0dXJuID0gc3VtbWFyeSA/IGhhbmRsZVN1bW1hcnkoc3VtbWFyeSwgZW50cnksIGxhYmVsLCBpdGVtKSA6IGxhYmVsO1xuICAgICAgICByZXR1cm4gbGFiZWxSZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlIHZhbHVlVHlwZXMuU0lOR0xFOiB7XG4gICAgICAgIGNvbnN0IHNpbmdsZUZpZWxkID0gZmllbGQuZ2V0KCdmaWVsZCcpO1xuICAgICAgICBjb25zdCBsYWJlbCA9IHNpbmdsZUZpZWxkLmdldCgnbGFiZWwnLCBzaW5nbGVGaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBmaWVsZC5nZXQoJ3N1bW1hcnknKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGZyb21KUyh7IFtzaW5nbGVGaWVsZC5nZXQoJ25hbWUnKV06IGl0ZW0gfSk7XG4gICAgICAgIGNvbnN0IGxhYmVsUmV0dXJuID0gc3VtbWFyeSA/IGhhbmRsZVN1bW1hcnkoc3VtbWFyeSwgZW50cnksIGxhYmVsLCBkYXRhKSA6IGxhYmVsO1xuICAgICAgICByZXR1cm4gbGFiZWxSZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlIHZhbHVlVHlwZXMuTVVMVElQTEU6IHtcbiAgICAgICAgaWYgKCF2YWxpZGF0ZUl0ZW0oZmllbGQsIGl0ZW0pKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG11bHRpRmllbGRzID0gZmllbGQuZ2V0KCdmaWVsZHMnKTtcbiAgICAgICAgY29uc3QgbGFiZWxGaWVsZCA9IG11bHRpRmllbGRzICYmIG11bHRpRmllbGRzLmZpcnN0KCk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gaXRlbS5nZXQobGFiZWxGaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBmaWVsZC5nZXQoJ3N1bW1hcnknKTtcbiAgICAgICAgY29uc3QgbGFiZWxSZXR1cm4gPSBzdW1tYXJ5ID8gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgdmFsdWUsIGl0ZW0pIDogdmFsdWU7XG4gICAgICAgIHJldHVybiAobGFiZWxSZXR1cm4gfHwgYE5vICR7bGFiZWxGaWVsZC5nZXQoJ25hbWUnKX1gKS50b1N0cmluZygpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBvblNvcnRFbmQgPSAoeyBvbGRJbmRleCwgbmV3SW5kZXggfSkgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCwga2V5cyB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIC8vIFVwZGF0ZSB2YWx1ZVxuICAgIGNvbnN0IGl0ZW0gPSB2YWx1ZS5nZXQob2xkSW5kZXgpO1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gdmFsdWUuZGVsZXRlKG9sZEluZGV4KS5pbnNlcnQobmV3SW5kZXgsIGl0ZW0pO1xuICAgIHRoaXMucHJvcHMub25DaGFuZ2UobmV3VmFsdWUpO1xuXG4gICAgLy8gVXBkYXRlIGNvbGxhcHNpbmdcbiAgICBjb25zdCBjb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZFtvbGRJbmRleF07XG4gICAgaXRlbXNDb2xsYXBzZWQuc3BsaWNlKG9sZEluZGV4LCAxKTtcbiAgICBjb25zdCB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgPSBbLi4uaXRlbXNDb2xsYXBzZWRdO1xuICAgIHVwZGF0ZWRJdGVtc0NvbGxhcHNlZC5zcGxpY2UobmV3SW5kZXgsIDAsIGNvbGxhcHNlZCk7XG5cbiAgICAvLyBNb3ZlIGtleXMgdG8gbWFpbnRhaW4gcmVsYXRpb25zaGlwc1xuICAgIGNvbnN0IG1vdmVkS2V5ID0ga2V5c1tvbGRJbmRleF07XG4gICAgY29uc3QgdXBkYXRlZEtleXMgPSBbLi4ua2V5c107XG4gICAgdXBkYXRlZEtleXMuc3BsaWNlKG9sZEluZGV4LCAxKTtcbiAgICB1cGRhdGVkS2V5cy5zcGxpY2UobmV3SW5kZXgsIDAsIG1vdmVkS2V5KTtcblxuICAgIHRoaXMuc2V0U3RhdGUoeyBpdGVtc0NvbGxhcHNlZDogdXBkYXRlZEl0ZW1zQ29sbGFwc2VkLCBrZXlzOiB1cGRhdGVkS2V5cyB9KTtcbiAgfTtcblxuICBoYXNFcnJvciA9IGluZGV4ID0+IHtcbiAgICBjb25zdCB7IGZpZWxkc0Vycm9ycyB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoZmllbGRzRXJyb3JzICYmIGZpZWxkc0Vycm9ycy5zaXplID4gMCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZmllbGRzRXJyb3JzLnRvSlMoKSkuc29tZShhcnIgPT5cbiAgICAgICAgYXJyLnNvbWUoZXJyID0+IGVyci5wYXJlbnRJZHMgJiYgZXJyLnBhcmVudElkcy5pbmNsdWRlcyh0aGlzLnN0YXRlLmtleXNbaW5kZXhdKSksXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICBmb2N1cyhwYXRoKSB7XG4gICAgY29uc3QgW2luZGV4LCAuLi5yZW1haW5pbmdQYXRoXSA9IHBhdGguc3BsaXQoJy4nKTtcblxuICAgIGlmICh0aGlzLnN0YXRlLmxpc3RDb2xsYXBzZWQgfHwgdGhpcy5zdGF0ZS5pdGVtc0NvbGxhcHNlZFtpbmRleF0pIHtcbiAgICAgIGNvbnN0IG5ld0l0ZW1zQ29sbGFwc2VkID0gWy4uLnRoaXMuc3RhdGUuaXRlbXNDb2xsYXBzZWRdO1xuICAgICAgbmV3SXRlbXNDb2xsYXBzZWRbaW5kZXhdID0gZmFsc2U7XG4gICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICB7XG4gICAgICAgICAgbGlzdENvbGxhcHNlZDogZmFsc2UsXG4gICAgICAgICAgaXRlbXNDb2xsYXBzZWQ6IG5ld0l0ZW1zQ29sbGFwc2VkLFxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5zdGF0ZS5rZXlzW2luZGV4XTtcbiAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jaGlsZFJlZnNba2V5XTtcbiAgICAgICAgICBpZiAoY29udHJvbD8uZm9jdXMpIHtcbiAgICAgICAgICAgIGNvbnRyb2wuZm9jdXMocmVtYWluaW5nUGF0aC5qb2luKCcuJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuc3RhdGUua2V5c1tpbmRleF07XG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jaGlsZFJlZnNba2V5XTtcbiAgICAgIGlmIChjb250cm9sPy5mb2N1cykge1xuICAgICAgICBjb250cm9sLmZvY3VzKHJlbWFpbmluZ1BhdGguam9pbignLicpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZGlzcGxheS1uYW1lXG4gIHJlbmRlckl0ZW0gPSAoaXRlbSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjbGFzc05hbWVXcmFwcGVyLFxuICAgICAgZWRpdG9yQ29udHJvbCxcbiAgICAgIG9uVmFsaWRhdGVPYmplY3QsXG4gICAgICBtZXRhZGF0YSxcbiAgICAgIGNsZWFyRmllbGRFcnJvcnMsXG4gICAgICBmaWVsZHNFcnJvcnMsXG4gICAgICBjb250cm9sUmVmLFxuICAgICAgcmVzb2x2ZVdpZGdldCxcbiAgICAgIHBhcmVudElkcyxcbiAgICAgIGZvcklELFxuICAgICAgdCxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQsIGtleXMgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgY29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWRbaW5kZXhdO1xuICAgIGNvbnN0IGtleSA9IGtleXNbaW5kZXhdO1xuICAgIGxldCBmaWVsZCA9IHRoaXMucHJvcHMuZmllbGQ7XG4gICAgY29uc3QgaGFzRXJyb3IgPSB0aGlzLmhhc0Vycm9yKGluZGV4KTtcbiAgICBjb25zdCBpc1ZhcmlhYmxlVHlwZXNMaXN0ID0gdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5NSVhFRDtcbiAgICBpZiAoaXNWYXJpYWJsZVR5cGVzTGlzdCkge1xuICAgICAgZmllbGQgPSBnZXRUeXBlZEZpZWxkRm9yVmFsdWUoZmllbGQsIGl0ZW0pO1xuICAgICAgaWYgKCFmaWVsZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJFcnJvbmVvdXNUeXBlZEl0ZW0oaW5kZXgsIGl0ZW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8U29ydGFibGVMaXN0SXRlbVxuICAgICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBjb2xsYXBzZWQgJiYgc3R5bGVzLmxpc3RDb250cm9sSXRlbUNvbGxhcHNlZF19XG4gICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIGlkPXtrZXl9XG4gICAgICAgIGtleXM9e2tleXN9XG4gICAgICA+XG4gICAgICAgIHtpc1ZhcmlhYmxlVHlwZXNMaXN0ICYmIChcbiAgICAgICAgICA8TGFiZWxDb21wb25lbnRcbiAgICAgICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgICAgIGlzQWN0aXZlPXtmYWxzZX1cbiAgICAgICAgICAgIGhhc0Vycm9ycz17aGFzRXJyb3J9XG4gICAgICAgICAgICB1bmlxdWVGaWVsZElkPXt0aGlzLnVuaXF1ZUZpZWxkSWR9XG4gICAgICAgICAgICBpc0ZpZWxkT3B0aW9uYWw9e2ZpZWxkLmdldCgncmVxdWlyZWQnKSA9PT0gZmFsc2V9XG4gICAgICAgICAgICB0PXt0fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIDxTdHlsZWRMaXN0SXRlbVRvcEJhclxuICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICAgIG9uQ29sbGFwc2VUb2dnbGU9e3BhcnRpYWwodGhpcy5oYW5kbGVJdGVtQ29sbGFwc2VUb2dnbGUsIGluZGV4KX1cbiAgICAgICAgICBkcmFnSGFuZGxlPXtEcmFnSGFuZGxlfVxuICAgICAgICAgIGlkPXtrZXl9XG4gICAgICAgICAgb25SZW1vdmU9e3BhcnRpYWwodGhpcy5oYW5kbGVSZW1vdmUsIGluZGV4KX1cbiAgICAgICAgICBkYXRhLXRlc3RpZD17YHN0eWxlZC1saXN0LWl0ZW0tdG9wLWJhci0ke2tleX1gfVxuICAgICAgICAvPlxuICAgICAgICA8TmVzdGVkT2JqZWN0TGFiZWwgY29sbGFwc2VkPXtjb2xsYXBzZWR9IGVycm9yPXtoYXNFcnJvcn0+XG4gICAgICAgICAge3RoaXMub2JqZWN0TGFiZWwoaXRlbSl9XG4gICAgICAgIDwvTmVzdGVkT2JqZWN0TGFiZWw+XG4gICAgICAgIDxDbGFzc05hbWVzPlxuICAgICAgICAgIHsoeyBjc3MsIGN4IH0pID0+IChcbiAgICAgICAgICAgIDxPYmplY3RDb250cm9sXG4gICAgICAgICAgICAgIGNsYXNzTmFtZVdyYXBwZXI9e2N4KGNsYXNzTmFtZVdyYXBwZXIsIHtcbiAgICAgICAgICAgICAgICBbY3NzYFxuICAgICAgICAgICAgICAgICAgJHtzdHlsZVN0cmluZ3MuY29sbGFwc2VkT2JqZWN0Q29udHJvbH07XG4gICAgICAgICAgICAgICAgYF06IGNvbGxhcHNlZCxcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIHZhbHVlPXtpdGVtfVxuICAgICAgICAgICAgICBmaWVsZD17ZmllbGR9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlT2JqZWN0PXt0aGlzLmhhbmRsZUNoYW5nZUZvcihpbmRleCl9XG4gICAgICAgICAgICAgIGVkaXRvckNvbnRyb2w9e2VkaXRvckNvbnRyb2x9XG4gICAgICAgICAgICAgIHJlc29sdmVXaWRnZXQ9e3Jlc29sdmVXaWRnZXR9XG4gICAgICAgICAgICAgIG1ldGFkYXRhPXttZXRhZGF0YX1cbiAgICAgICAgICAgICAgZm9yTGlzdFxuICAgICAgICAgICAgICBvblZhbGlkYXRlT2JqZWN0PXtvblZhbGlkYXRlT2JqZWN0fVxuICAgICAgICAgICAgICBjbGVhckZpZWxkRXJyb3JzPXtjbGVhckZpZWxkRXJyb3JzfVxuICAgICAgICAgICAgICBmaWVsZHNFcnJvcnM9e2ZpZWxkc0Vycm9yc31cbiAgICAgICAgICAgICAgcmVmPXt0aGlzLnByb2Nlc3NDb250cm9sUmVmfVxuICAgICAgICAgICAgICBjb250cm9sUmVmPXtjb250cm9sUmVmfVxuICAgICAgICAgICAgICB2YWxpZGF0aW9uS2V5PXtrZXl9XG4gICAgICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICAgICAgICBkYXRhLXRlc3RpZD17YG9iamVjdC1jb250cm9sLSR7a2V5fWB9XG4gICAgICAgICAgICAgIGhhc0Vycm9yPXtoYXNFcnJvcn1cbiAgICAgICAgICAgICAgcGFyZW50SWRzPXtbLi4ucGFyZW50SWRzLCBmb3JJRCwga2V5XX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9DbGFzc05hbWVzPlxuICAgICAgPC9Tb3J0YWJsZUxpc3RJdGVtPlxuICAgICk7XG4gIH07XG5cbiAgcmVuZGVyRXJyb25lb3VzVHlwZWRJdGVtKGluZGV4LCBpdGVtKSB7XG4gICAgY29uc3QgZmllbGQgPSB0aGlzLnByb3BzLmZpZWxkO1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZUZvclR5cGVkRmllbGRBbmRWYWx1ZShmaWVsZCwgaXRlbSk7XG4gICAgY29uc3Qga2V5ID0gYGl0ZW0tJHtpbmRleH1gO1xuICAgIHJldHVybiAoXG4gICAgICA8U29ydGFibGVMaXN0SXRlbVxuICAgICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBzdHlsZXMubGlzdENvbnRyb2xJdGVtQ29sbGFwc2VkXX1cbiAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICBrZXk9e2tleX1cbiAgICAgID5cbiAgICAgICAgPFN0eWxlZExpc3RJdGVtVG9wQmFyXG4gICAgICAgICAgb25Db2xsYXBzZVRvZ2dsZT17bnVsbH1cbiAgICAgICAgICBvblJlbW92ZT17cGFydGlhbCh0aGlzLmhhbmRsZVJlbW92ZSwgaW5kZXgsIGtleSl9XG4gICAgICAgICAgZHJhZ0hhbmRsZT17RHJhZ0hhbmRsZX1cbiAgICAgICAgICBpZD17a2V5fVxuICAgICAgICAvPlxuICAgICAgICA8TmVzdGVkT2JqZWN0TGFiZWwgY29sbGFwc2VkPXt0cnVlfSBlcnJvcj17dHJ1ZX0+XG4gICAgICAgICAge2Vycm9yTWVzc2FnZX1cbiAgICAgICAgPC9OZXN0ZWRPYmplY3RMYWJlbD5cbiAgICAgIDwvU29ydGFibGVMaXN0SXRlbT5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyTGlzdENvbnRyb2woKSB7XG4gICAgY29uc3QgeyB2YWx1ZSwgZm9ySUQsIGZpZWxkLCBjbGFzc05hbWVXcmFwcGVyLCB0IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQsIGxpc3RDb2xsYXBzZWQsIGtleXMgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgaXRlbXMgPSB2YWx1ZSB8fCBMaXN0KCk7XG4gICAgY29uc3QgbGFiZWwgPSBmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpO1xuICAgIGNvbnN0IGxhYmVsU2luZ3VsYXIgPSBmaWVsZC5nZXQoJ2xhYmVsX3Npbmd1bGFyJykgfHwgZmllbGQuZ2V0KCdsYWJlbCcsIGZpZWxkLmdldCgnbmFtZScpKTtcbiAgICBjb25zdCBsaXN0TGFiZWwgPSBpdGVtcy5zaXplID09PSAxID8gbGFiZWxTaW5ndWxhci50b0xvd2VyQ2FzZSgpIDogbGFiZWwudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBtaW5pbWl6ZUNvbGxhcHNlZEl0ZW1zID0gZmllbGQuZ2V0KCdtaW5pbWl6ZV9jb2xsYXBzZWQnLCBmYWxzZSk7XG4gICAgY29uc3QgYWxsSXRlbXNDb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZC5ldmVyeSh2YWwgPT4gdmFsID09PSB0cnVlKTtcbiAgICBjb25zdCBzZWxmQ29sbGFwc2VkID0gYWxsSXRlbXNDb2xsYXBzZWQgJiYgKGxpc3RDb2xsYXBzZWQgfHwgIW1pbmltaXplQ29sbGFwc2VkSXRlbXMpO1xuXG4gICAgY29uc3QgaXRlbXNBcnJheSA9IGtleXMubWFwKGtleSA9PiAoeyBpZDoga2V5IH0pKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8Q2xhc3NOYW1lcz5cbiAgICAgICAgeyh7IGN4LCBjc3MgfSkgPT4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGlkPXtmb3JJRH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goXG4gICAgICAgICAgICAgIGNsYXNzTmFtZVdyYXBwZXIsXG4gICAgICAgICAgICAgIGNzc2BcbiAgICAgICAgICAgICAgICAke3N0eWxlU3RyaW5ncy5vYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXJ9XG4gICAgICAgICAgICAgIGAsXG4gICAgICAgICAgICApfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxPYmplY3RXaWRnZXRUb3BCYXJcbiAgICAgICAgICAgICAgYWxsb3dBZGQ9e2ZpZWxkLmdldCgnYWxsb3dfYWRkJywgdHJ1ZSl9XG4gICAgICAgICAgICAgIG9uQWRkPXt0aGlzLmhhbmRsZUFkZH1cbiAgICAgICAgICAgICAgdHlwZXM9e2ZpZWxkLmdldChUWVBFU19LRVksIG51bGwpfVxuICAgICAgICAgICAgICBvbkFkZFR5cGU9e3R5cGUgPT4gdGhpcy5oYW5kbGVBZGRUeXBlKHR5cGUsIHJlc29sdmVGaWVsZEtleVR5cGUoZmllbGQpKX1cbiAgICAgICAgICAgICAgaGVhZGluZz17YCR7aXRlbXMuc2l6ZX0gJHtsaXN0TGFiZWx9YH1cbiAgICAgICAgICAgICAgbGFiZWw9e2xhYmVsU2luZ3VsYXIudG9Mb3dlckNhc2UoKX1cbiAgICAgICAgICAgICAgb25Db2xsYXBzZVRvZ2dsZT17dGhpcy5oYW5kbGVDb2xsYXBzZUFsbFRvZ2dsZX1cbiAgICAgICAgICAgICAgY29sbGFwc2VkPXtzZWxmQ29sbGFwc2VkfVxuICAgICAgICAgICAgICB0PXt0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHsoIXNlbGZDb2xsYXBzZWQgfHwgIW1pbmltaXplQ29sbGFwc2VkSXRlbXMpICYmIChcbiAgICAgICAgICAgICAgPFNvcnRhYmxlTGlzdCBpdGVtcz17aXRlbXNBcnJheX0ga2V5cz17a2V5c30gb25Tb3J0RW5kPXt0aGlzLm9uU29ydEVuZH0+XG4gICAgICAgICAgICAgICAge2l0ZW1zLm1hcCh0aGlzLnJlbmRlckl0ZW0pfVxuICAgICAgICAgICAgICA8L1NvcnRhYmxlTGlzdD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L0NsYXNzTmFtZXM+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlcklucHV0KCkge1xuICAgIGNvbnN0IHsgZm9ySUQsIGNsYXNzTmFtZVdyYXBwZXIgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIHJldHVybiAoXG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBpZD17Zm9ySUR9XG4gICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICBvbkZvY3VzPXt0aGlzLmhhbmRsZUZvY3VzfVxuICAgICAgICBvbkJsdXI9e3RoaXMuaGFuZGxlQmx1cn1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVXcmFwcGVyfVxuICAgICAgLz5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmdldFZhbHVlVHlwZSgpICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJMaXN0Q29udHJvbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJJbnB1dCgpO1xuICAgIH1cbiAgfVxufVxuIl19 */")],
|
|
505
|
-
index: index,
|
|
506
|
-
key: key,
|
|
507
|
-
id: key,
|
|
508
|
-
keys: keys
|
|
509
|
-
}, isVariableTypesList && ___EmotionJSX(LabelComponent, {
|
|
510
|
-
field: field,
|
|
511
|
-
isActive: false,
|
|
512
|
-
hasErrors: hasError,
|
|
513
|
-
uniqueFieldId: this.uniqueFieldId,
|
|
514
|
-
isFieldOptional: field.get('required') === false,
|
|
515
|
-
t: t
|
|
516
|
-
}), ___EmotionJSX(StyledListItemTopBar, {
|
|
517
|
-
collapsed: collapsed,
|
|
518
|
-
onCollapseToggle: _partial(this.handleItemCollapseToggle, index),
|
|
519
|
-
dragHandle: DragHandle,
|
|
520
|
-
id: key,
|
|
521
|
-
onRemove: _partial(this.handleRemove, index),
|
|
522
|
-
"data-testid": `styled-list-item-top-bar-${key}`
|
|
523
|
-
}), ___EmotionJSX(NestedObjectLabel, {
|
|
524
|
-
collapsed: collapsed,
|
|
525
|
-
error: hasError
|
|
526
|
-
}, this.objectLabel(item)), ___EmotionJSX(ClassNames, null, ({
|
|
527
|
-
css,
|
|
528
|
-
cx
|
|
529
|
-
}) => ___EmotionJSX(ObjectControl, {
|
|
530
|
-
classNameWrapper: cx(classNameWrapper, {
|
|
531
|
-
[css`
|
|
532
|
-
${styleStrings.collapsedObjectControl};
|
|
533
|
-
`]: collapsed
|
|
534
|
-
}),
|
|
535
|
-
value: item,
|
|
536
|
-
field: field,
|
|
537
|
-
onChangeObject: this.handleChangeFor(index),
|
|
538
|
-
editorControl: editorControl,
|
|
539
|
-
resolveWidget: resolveWidget,
|
|
540
|
-
metadata: metadata,
|
|
541
|
-
forList: true,
|
|
542
|
-
onValidateObject: onValidateObject,
|
|
543
|
-
clearFieldErrors: clearFieldErrors,
|
|
544
|
-
fieldsErrors: fieldsErrors,
|
|
545
|
-
ref: this.processControlRef,
|
|
546
|
-
controlRef: controlRef,
|
|
547
|
-
validationKey: key,
|
|
548
|
-
collapsed: collapsed,
|
|
549
|
-
"data-testid": `object-control-${key}`,
|
|
550
|
-
hasError: hasError,
|
|
551
|
-
parentIds: [...parentIds, forID, key]
|
|
552
|
-
})));
|
|
553
|
-
});
|
|
554
191
|
const {
|
|
555
|
-
field
|
|
556
|
-
value
|
|
192
|
+
field,
|
|
193
|
+
value
|
|
557
194
|
} = props;
|
|
558
|
-
const
|
|
559
|
-
const
|
|
560
|
-
const
|
|
561
|
-
length:
|
|
195
|
+
const listCollapsed = field.get('collapsed', true);
|
|
196
|
+
const itemsCollapsed = value && Array(value.size).fill(listCollapsed) || [];
|
|
197
|
+
const keys = value && Array.from({
|
|
198
|
+
length: value.size
|
|
562
199
|
}, () => uuid()) || [];
|
|
563
200
|
this.state = {
|
|
564
|
-
listCollapsed
|
|
565
|
-
itemsCollapsed
|
|
566
|
-
value: this.valueToString(
|
|
567
|
-
keys
|
|
201
|
+
listCollapsed,
|
|
202
|
+
itemsCollapsed,
|
|
203
|
+
value: this.valueToString(value),
|
|
204
|
+
keys
|
|
568
205
|
};
|
|
569
206
|
}
|
|
207
|
+
componentDidMount() {
|
|
208
|
+
// Manually validate PropTypes - React 19 breaking change
|
|
209
|
+
PropTypes.checkPropTypes(ListControl.propTypes, this.props, 'prop', 'ListControl');
|
|
210
|
+
}
|
|
211
|
+
valueToString = value => {
|
|
212
|
+
let stringValue;
|
|
213
|
+
if (List.isList(value) || Array.isArray(value)) {
|
|
214
|
+
stringValue = value.join(',');
|
|
215
|
+
} else {
|
|
216
|
+
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`);
|
|
217
|
+
stringValue = String(value);
|
|
218
|
+
}
|
|
219
|
+
return stringValue.replace(/,([^\s]|$)/g, ', $1');
|
|
220
|
+
};
|
|
221
|
+
getValueType = () => {
|
|
222
|
+
const {
|
|
223
|
+
field
|
|
224
|
+
} = this.props;
|
|
225
|
+
if (field.get('fields')) {
|
|
226
|
+
return valueTypes.MULTIPLE;
|
|
227
|
+
} else if (field.get('field')) {
|
|
228
|
+
return valueTypes.SINGLE;
|
|
229
|
+
} else if (field.get(TYPES_KEY)) {
|
|
230
|
+
return valueTypes.MIXED;
|
|
231
|
+
} else {
|
|
232
|
+
return null;
|
|
233
|
+
}
|
|
234
|
+
};
|
|
235
|
+
uniqueFieldId = uniqueId(`${this.props.field.get('name')}-field-`);
|
|
570
236
|
/**
|
|
571
237
|
* Always update so that each nested widget has the option to update. This is
|
|
572
238
|
* required because ControlHOC provides a default `shouldComponentUpdate`
|
|
@@ -576,6 +242,142 @@ export default class ListControl extends React.Component {
|
|
|
576
242
|
shouldComponentUpdate() {
|
|
577
243
|
return true;
|
|
578
244
|
}
|
|
245
|
+
handleChange = e => {
|
|
246
|
+
const {
|
|
247
|
+
onChange
|
|
248
|
+
} = this.props;
|
|
249
|
+
const oldValue = this.state.value;
|
|
250
|
+
const newValue = e.target.value.trim();
|
|
251
|
+
const listValue = newValue ? newValue.split(',') : [];
|
|
252
|
+
if (newValue.match(/,$/) && oldValue.match(/, $/)) {
|
|
253
|
+
listValue.pop();
|
|
254
|
+
}
|
|
255
|
+
const parsedValue = this.valueToString(listValue);
|
|
256
|
+
this.setState({
|
|
257
|
+
value: parsedValue
|
|
258
|
+
});
|
|
259
|
+
onChange(List(listValue.map(val => val.trim())));
|
|
260
|
+
};
|
|
261
|
+
handleFocus = () => {
|
|
262
|
+
this.props.setActiveStyle();
|
|
263
|
+
};
|
|
264
|
+
handleBlur = e => {
|
|
265
|
+
const listValue = e.target.value.split(',').map(el => el.trim()).filter(el => el);
|
|
266
|
+
this.setState({
|
|
267
|
+
value: this.valueToString(listValue)
|
|
268
|
+
});
|
|
269
|
+
this.props.setInactiveStyle();
|
|
270
|
+
};
|
|
271
|
+
handleAdd = e => {
|
|
272
|
+
e.preventDefault();
|
|
273
|
+
const {
|
|
274
|
+
field
|
|
275
|
+
} = this.props;
|
|
276
|
+
const parsedValue = this.getValueType() === valueTypes.SINGLE ? this.singleDefault() : fromJS(this.multipleDefault(field.get('fields')));
|
|
277
|
+
this.addItem(parsedValue);
|
|
278
|
+
};
|
|
279
|
+
singleDefault = () => {
|
|
280
|
+
return this.props.field.getIn(['field', 'default'], null);
|
|
281
|
+
};
|
|
282
|
+
multipleDefault = fields => {
|
|
283
|
+
return this.getFieldsDefault(fields);
|
|
284
|
+
};
|
|
285
|
+
handleAddType = (type, typeKey) => {
|
|
286
|
+
const parsedValue = fromJS(this.mixedDefault(typeKey, type));
|
|
287
|
+
this.addItem(parsedValue);
|
|
288
|
+
};
|
|
289
|
+
mixedDefault = (typeKey, type) => {
|
|
290
|
+
const selectedType = this.props.field.get(TYPES_KEY).find(f => f.get('name') === type);
|
|
291
|
+
const fields = selectedType.get('fields') || [selectedType.get('field')];
|
|
292
|
+
return this.getFieldsDefault(fields, {
|
|
293
|
+
[typeKey]: type
|
|
294
|
+
});
|
|
295
|
+
};
|
|
296
|
+
getFieldsDefault = (fields, initialValue = {}) => {
|
|
297
|
+
return fields.reduce((acc, item) => {
|
|
298
|
+
const subfields = item.get('field') || item.get('fields');
|
|
299
|
+
const object = item.get('widget') == 'object';
|
|
300
|
+
const name = item.get('name');
|
|
301
|
+
const defaultValue = item.get('default', null);
|
|
302
|
+
if (List.isList(subfields) && object) {
|
|
303
|
+
const subDefaultValue = this.getFieldsDefault(subfields);
|
|
304
|
+
!isEmpty(subDefaultValue) && (acc[name] = subDefaultValue);
|
|
305
|
+
return acc;
|
|
306
|
+
}
|
|
307
|
+
if (Map.isMap(subfields) && object) {
|
|
308
|
+
const subDefaultValue = this.getFieldsDefault([subfields]);
|
|
309
|
+
!isEmpty(subDefaultValue) && (acc[name] = subDefaultValue);
|
|
310
|
+
return acc;
|
|
311
|
+
}
|
|
312
|
+
if (defaultValue !== null) {
|
|
313
|
+
acc[name] = defaultValue;
|
|
314
|
+
}
|
|
315
|
+
return acc;
|
|
316
|
+
}, initialValue);
|
|
317
|
+
};
|
|
318
|
+
addItem = parsedValue => {
|
|
319
|
+
const {
|
|
320
|
+
value,
|
|
321
|
+
onChange,
|
|
322
|
+
field
|
|
323
|
+
} = this.props;
|
|
324
|
+
const addToTop = field.get('add_to_top', false);
|
|
325
|
+
const itemKey = uuid();
|
|
326
|
+
this.setState({
|
|
327
|
+
itemsCollapsed: addToTop ? [false, ...this.state.itemsCollapsed] : [...this.state.itemsCollapsed, false],
|
|
328
|
+
keys: addToTop ? [itemKey, ...this.state.keys] : [...this.state.keys, itemKey]
|
|
329
|
+
});
|
|
330
|
+
const listValue = value || List();
|
|
331
|
+
if (addToTop) {
|
|
332
|
+
onChange(listValue.unshift(parsedValue));
|
|
333
|
+
} else {
|
|
334
|
+
onChange(listValue.push(parsedValue));
|
|
335
|
+
}
|
|
336
|
+
};
|
|
337
|
+
processControlRef = ref => {
|
|
338
|
+
if (!ref) return;
|
|
339
|
+
const {
|
|
340
|
+
props: {
|
|
341
|
+
validationKey: key
|
|
342
|
+
}
|
|
343
|
+
} = ref;
|
|
344
|
+
this.childRefs[key] = ref;
|
|
345
|
+
this.props.controlRef?.(this);
|
|
346
|
+
};
|
|
347
|
+
validate = () => {
|
|
348
|
+
// First validate child widgets if this is a complex list
|
|
349
|
+
const hasChildWidgets = this.getValueType() && Object.keys(this.childRefs).length > 0;
|
|
350
|
+
if (hasChildWidgets) {
|
|
351
|
+
Object.values(this.childRefs).forEach(widget => {
|
|
352
|
+
widget?.validate?.();
|
|
353
|
+
});
|
|
354
|
+
} else {
|
|
355
|
+
this.props.validate();
|
|
356
|
+
}
|
|
357
|
+
this.props.onValidateObject(this.props.forID, this.validateSize());
|
|
358
|
+
};
|
|
359
|
+
validateSize = () => {
|
|
360
|
+
const {
|
|
361
|
+
field,
|
|
362
|
+
value,
|
|
363
|
+
t
|
|
364
|
+
} = this.props;
|
|
365
|
+
const min = field.get('min');
|
|
366
|
+
const max = field.get('max');
|
|
367
|
+
const required = field.get('required', true);
|
|
368
|
+
if (!required && !value?.size) {
|
|
369
|
+
return [];
|
|
370
|
+
}
|
|
371
|
+
const error = validations.validateMinMax(t, field.get('label', field.get('name')), value, min, max);
|
|
372
|
+
return error ? [error] : [];
|
|
373
|
+
};
|
|
374
|
+
|
|
375
|
+
/**
|
|
376
|
+
* In case the `onChangeObject` function is frozen by a child widget implementation,
|
|
377
|
+
* e.g. when debounced, always get the latest object value instead of using
|
|
378
|
+
* `this.props.value` directly.
|
|
379
|
+
*/
|
|
380
|
+
getObjectValue = idx => this.props.value.get(idx) || Map();
|
|
579
381
|
handleChangeFor(index) {
|
|
580
382
|
return (f, newValue, newMetadata) => {
|
|
581
383
|
const {
|
|
@@ -594,6 +396,106 @@ export default class ListControl extends React.Component {
|
|
|
594
396
|
onChange(value.set(index, newObjectValue), parsedMetadata);
|
|
595
397
|
};
|
|
596
398
|
}
|
|
399
|
+
handleRemove = (index, event) => {
|
|
400
|
+
event.preventDefault();
|
|
401
|
+
const {
|
|
402
|
+
itemsCollapsed
|
|
403
|
+
} = this.state;
|
|
404
|
+
const {
|
|
405
|
+
value,
|
|
406
|
+
metadata,
|
|
407
|
+
onChange,
|
|
408
|
+
field,
|
|
409
|
+
clearFieldErrors,
|
|
410
|
+
onValidateObject,
|
|
411
|
+
forID,
|
|
412
|
+
fieldsErrors
|
|
413
|
+
} = this.props;
|
|
414
|
+
const collectionName = field.get('name');
|
|
415
|
+
const isSingleField = this.getValueType() === valueTypes.SINGLE;
|
|
416
|
+
const metadataRemovePath = isSingleField ? value.get(index) : value.get(index).valueSeq();
|
|
417
|
+
const parsedMetadata = metadata && !metadata.isEmpty() ? {
|
|
418
|
+
[collectionName]: metadata.removeIn(metadataRemovePath)
|
|
419
|
+
} : metadata;
|
|
420
|
+
|
|
421
|
+
// Get the key of the item being removed
|
|
422
|
+
const removedKey = this.state.keys[index];
|
|
423
|
+
|
|
424
|
+
// Update state while preserving keys for remaining items
|
|
425
|
+
const newKeys = [...this.state.keys];
|
|
426
|
+
newKeys.splice(index, 1);
|
|
427
|
+
itemsCollapsed.splice(index, 1);
|
|
428
|
+
this.setState({
|
|
429
|
+
itemsCollapsed: [...itemsCollapsed],
|
|
430
|
+
keys: newKeys
|
|
431
|
+
});
|
|
432
|
+
|
|
433
|
+
// Clear the ref for the removed item
|
|
434
|
+
delete this.childRefs[removedKey];
|
|
435
|
+
const newValue = value.delete(index);
|
|
436
|
+
|
|
437
|
+
// Clear errors for the removed item and its children
|
|
438
|
+
if (fieldsErrors) {
|
|
439
|
+
Object.entries(fieldsErrors.toJS()).forEach(([fieldId, errors]) => {
|
|
440
|
+
if (errors.some(err => err.parentIds?.includes(removedKey))) {
|
|
441
|
+
clearFieldErrors(fieldId);
|
|
442
|
+
}
|
|
443
|
+
});
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
// If list is empty, mark it as valid
|
|
447
|
+
if (newValue.size === 0) {
|
|
448
|
+
clearFieldErrors(forID);
|
|
449
|
+
onValidateObject(forID, []);
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
// Update the value last to ensure all error states are cleared
|
|
453
|
+
onChange(newValue, parsedMetadata);
|
|
454
|
+
};
|
|
455
|
+
handleItemCollapseToggle = (index, event) => {
|
|
456
|
+
event.preventDefault();
|
|
457
|
+
const {
|
|
458
|
+
itemsCollapsed
|
|
459
|
+
} = this.state;
|
|
460
|
+
const newItemsCollapsed = itemsCollapsed.map((collapsed, itemIndex) => {
|
|
461
|
+
if (index === itemIndex) {
|
|
462
|
+
return !collapsed;
|
|
463
|
+
}
|
|
464
|
+
return collapsed;
|
|
465
|
+
});
|
|
466
|
+
this.setState({
|
|
467
|
+
itemsCollapsed: newItemsCollapsed
|
|
468
|
+
});
|
|
469
|
+
};
|
|
470
|
+
handleCollapseAllToggle = e => {
|
|
471
|
+
e.preventDefault();
|
|
472
|
+
const {
|
|
473
|
+
value,
|
|
474
|
+
field
|
|
475
|
+
} = this.props;
|
|
476
|
+
const {
|
|
477
|
+
itemsCollapsed,
|
|
478
|
+
listCollapsed
|
|
479
|
+
} = this.state;
|
|
480
|
+
const minimizeCollapsedItems = field.get('minimize_collapsed', false);
|
|
481
|
+
const listCollapsedByDefault = field.get('collapsed', true);
|
|
482
|
+
const allItemsCollapsed = itemsCollapsed.every(val => val === true);
|
|
483
|
+
if (minimizeCollapsedItems) {
|
|
484
|
+
let updatedItemsCollapsed = itemsCollapsed;
|
|
485
|
+
// Only allow collapsing all items in this mode but not opening all at once
|
|
486
|
+
if (!listCollapsed || !listCollapsedByDefault) {
|
|
487
|
+
updatedItemsCollapsed = Array(value.size).fill(!listCollapsed);
|
|
488
|
+
}
|
|
489
|
+
this.setState({
|
|
490
|
+
listCollapsed: !listCollapsed,
|
|
491
|
+
itemsCollapsed: updatedItemsCollapsed
|
|
492
|
+
});
|
|
493
|
+
} else {
|
|
494
|
+
this.setState({
|
|
495
|
+
itemsCollapsed: Array(value.size).fill(!allItemsCollapsed)
|
|
496
|
+
});
|
|
497
|
+
}
|
|
498
|
+
};
|
|
597
499
|
objectLabel(item) {
|
|
598
500
|
const {
|
|
599
501
|
field,
|
|
@@ -639,6 +541,47 @@ export default class ListControl extends React.Component {
|
|
|
639
541
|
}
|
|
640
542
|
return '';
|
|
641
543
|
}
|
|
544
|
+
onSortEnd = ({
|
|
545
|
+
oldIndex,
|
|
546
|
+
newIndex
|
|
547
|
+
}) => {
|
|
548
|
+
const {
|
|
549
|
+
value
|
|
550
|
+
} = this.props;
|
|
551
|
+
const {
|
|
552
|
+
itemsCollapsed,
|
|
553
|
+
keys
|
|
554
|
+
} = this.state;
|
|
555
|
+
|
|
556
|
+
// Update value
|
|
557
|
+
const item = value.get(oldIndex);
|
|
558
|
+
const newValue = value.delete(oldIndex).insert(newIndex, item);
|
|
559
|
+
this.props.onChange(newValue);
|
|
560
|
+
|
|
561
|
+
// Update collapsing
|
|
562
|
+
const collapsed = itemsCollapsed[oldIndex];
|
|
563
|
+
itemsCollapsed.splice(oldIndex, 1);
|
|
564
|
+
const updatedItemsCollapsed = [...itemsCollapsed];
|
|
565
|
+
updatedItemsCollapsed.splice(newIndex, 0, collapsed);
|
|
566
|
+
|
|
567
|
+
// Move keys to maintain relationships
|
|
568
|
+
const movedKey = keys[oldIndex];
|
|
569
|
+
const updatedKeys = [...keys];
|
|
570
|
+
updatedKeys.splice(oldIndex, 1);
|
|
571
|
+
updatedKeys.splice(newIndex, 0, movedKey);
|
|
572
|
+
this.setState({
|
|
573
|
+
itemsCollapsed: updatedItemsCollapsed,
|
|
574
|
+
keys: updatedKeys
|
|
575
|
+
});
|
|
576
|
+
};
|
|
577
|
+
hasError = index => {
|
|
578
|
+
const {
|
|
579
|
+
fieldsErrors
|
|
580
|
+
} = this.props;
|
|
581
|
+
if (fieldsErrors && fieldsErrors.size > 0) {
|
|
582
|
+
return Object.values(fieldsErrors.toJS()).some(arr => arr.some(err => err.parentIds && err.parentIds.includes(this.state.keys[index])));
|
|
583
|
+
}
|
|
584
|
+
};
|
|
642
585
|
focus(path) {
|
|
643
586
|
const [index, ...remainingPath] = path.split('.');
|
|
644
587
|
if (this.state.listCollapsed || this.state.itemsCollapsed[index]) {
|
|
@@ -650,29 +593,113 @@ export default class ListControl extends React.Component {
|
|
|
650
593
|
}, () => {
|
|
651
594
|
const key = this.state.keys[index];
|
|
652
595
|
const control = this.childRefs[key];
|
|
653
|
-
if (control
|
|
596
|
+
if (control?.focus) {
|
|
654
597
|
control.focus(remainingPath.join('.'));
|
|
655
598
|
}
|
|
656
599
|
});
|
|
657
600
|
} else {
|
|
658
601
|
const key = this.state.keys[index];
|
|
659
602
|
const control = this.childRefs[key];
|
|
660
|
-
if (control
|
|
603
|
+
if (control?.focus) {
|
|
661
604
|
control.focus(remainingPath.join('.'));
|
|
662
605
|
}
|
|
663
606
|
}
|
|
664
607
|
}
|
|
608
|
+
|
|
609
|
+
// eslint-disable-next-line react/display-name
|
|
610
|
+
renderItem = (item, index) => {
|
|
611
|
+
const {
|
|
612
|
+
classNameWrapper,
|
|
613
|
+
editorControl,
|
|
614
|
+
onValidateObject,
|
|
615
|
+
metadata,
|
|
616
|
+
clearFieldErrors,
|
|
617
|
+
fieldsErrors,
|
|
618
|
+
controlRef,
|
|
619
|
+
resolveWidget,
|
|
620
|
+
parentIds,
|
|
621
|
+
forID,
|
|
622
|
+
t
|
|
623
|
+
} = this.props;
|
|
624
|
+
const {
|
|
625
|
+
itemsCollapsed,
|
|
626
|
+
keys
|
|
627
|
+
} = this.state;
|
|
628
|
+
const collapsed = itemsCollapsed[index];
|
|
629
|
+
const key = keys[index];
|
|
630
|
+
let field = this.props.field;
|
|
631
|
+
const hasError = this.hasError(index);
|
|
632
|
+
const isVariableTypesList = this.getValueType() === valueTypes.MIXED;
|
|
633
|
+
if (isVariableTypesList) {
|
|
634
|
+
field = getTypedFieldForValue(field, item);
|
|
635
|
+
if (!field) {
|
|
636
|
+
return this.renderErroneousTypedItem(index, item);
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
return ___EmotionJSX(SortableListItem, {
|
|
640
|
+
css: [styles.listControlItem, collapsed && styles.listControlItemCollapsed, ";label:renderItem;" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF1cEJRIiwiZmlsZSI6Ii4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IEltbXV0YWJsZVByb3BUeXBlcyBmcm9tICdyZWFjdC1pbW11dGFibGUtcHJvcHR5cGVzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCB7IGNzcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IExpc3QsIE1hcCwgZnJvbUpTIH0gZnJvbSAnaW1tdXRhYmxlJztcbmltcG9ydCBwYXJ0aWFsIGZyb20gJ2xvZGFzaC9wYXJ0aWFsJztcbmltcG9ydCBpc0VtcHR5IGZyb20gJ2xvZGFzaC9pc0VtcHR5JztcbmltcG9ydCB1bmlxdWVJZCBmcm9tICdsb2Rhc2gvdW5pcXVlSWQnO1xuaW1wb3J0IHsgdjQgYXMgdXVpZCB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IERlY2FwQ21zV2lkZ2V0T2JqZWN0IGZyb20gJ2RlY2FwLWNtcy13aWRnZXQtb2JqZWN0JztcbmltcG9ydCB7XG4gIERuZENvbnRleHQsXG4gIE1vdXNlU2Vuc29yLFxuICBUb3VjaFNlbnNvcixcbiAgY2xvc2VzdENlbnRlcixcbiAgdXNlU2Vuc29yLFxuICB1c2VTZW5zb3JzLFxufSBmcm9tICdAZG5kLWtpdC9jb3JlJztcbmltcG9ydCB7IFNvcnRhYmxlQ29udGV4dCwgdXNlU29ydGFibGUgfSBmcm9tICdAZG5kLWtpdC9zb3J0YWJsZSc7XG5pbXBvcnQgeyByZXN0cmljdFRvUGFyZW50RWxlbWVudCB9IGZyb20gJ0BkbmQta2l0L21vZGlmaWVycyc7XG5pbXBvcnQgeyBDU1MgfSBmcm9tICdAZG5kLWtpdC91dGlsaXRpZXMnO1xuaW1wb3J0IHtcbiAgTGlzdEl0ZW1Ub3BCYXIsXG4gIE9iamVjdFdpZGdldFRvcEJhcixcbiAgY29sb3JzLFxuICBsZW5ndGhzLFxuICBGaWVsZExhYmVsLFxufSBmcm9tICdkZWNhcC1jbXMtdWktZGVmYXVsdCc7XG5pbXBvcnQgeyBzdHJpbmdUZW1wbGF0ZSwgdmFsaWRhdGlvbnMgfSBmcm9tICdkZWNhcC1jbXMtbGliLXdpZGdldHMnO1xuXG5pbXBvcnQge1xuICBUWVBFU19LRVksXG4gIGdldFR5cGVkRmllbGRGb3JWYWx1ZSxcbiAgcmVzb2x2ZUZpZWxkS2V5VHlwZSxcbiAgZ2V0RXJyb3JNZXNzYWdlRm9yVHlwZWRGaWVsZEFuZFZhbHVlLFxufSBmcm9tICcuL3R5cGVkTGlzdEhlbHBlcnMnO1xuXG5jb25zdCBPYmplY3RDb250cm9sID0gRGVjYXBDbXNXaWRnZXRPYmplY3QuY29udHJvbENvbXBvbmVudDtcblxuY29uc3QgTGlzdEl0ZW0gPSBzdHlsZWQuZGl2KCk7XG5cbmNvbnN0IFN0eWxlZExpc3RJdGVtVG9wQmFyID0gc3R5bGVkKExpc3RJdGVtVG9wQmFyKWBcbiAgYmFja2dyb3VuZC1jb2xvcjogJHtjb2xvcnMudGV4dEZpZWxkQm9yZGVyfTtcbmA7XG5cbmNvbnN0IE5lc3RlZE9iamVjdExhYmVsID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogJHtwcm9wcyA9PiAocHJvcHMuY29sbGFwc2VkID8gJ2Jsb2NrJyA6ICdub25lJyl9O1xuICBib3JkZXItdG9wOiAwO1xuICBjb2xvcjogJHtwcm9wcyA9PiAocHJvcHMuZXJyb3IgPyBjb2xvcnMuZXJyb3JUZXh0IDogJ2luaGVyaXQnKX07XG4gIGJhY2tncm91bmQtY29sb3I6ICR7Y29sb3JzLnRleHRGaWVsZEJvcmRlcn07XG4gIHBhZGRpbmc6IDEzcHg7XG4gIGJvcmRlci1yYWRpdXM6IDAgMCAke2xlbmd0aHMuYm9yZGVyUmFkaXVzfSAke2xlbmd0aHMuYm9yZGVyUmFkaXVzfTtcbmA7XG5cbmNvbnN0IHN0eWxlU3RyaW5ncyA9IHtcbiAgY29sbGFwc2VkT2JqZWN0Q29udHJvbDogYFxuICAgIGRpc3BsYXk6IG5vbmU7XG4gIGAsXG4gIG9iamVjdFdpZGdldFRvcEJhckNvbnRhaW5lcjogYFxuICAgIHBhZGRpbmc6ICR7bGVuZ3Rocy5vYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXJQYWRkaW5nfTtcbiAgYCxcbn07XG5cbmNvbnN0IHN0eWxlcyA9IHtcbiAgbGlzdENvbnRyb2xJdGVtOiBjc3NgXG4gICAgbWFyZ2luLXRvcDogMThweDtcblxuICAgICY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgICBtYXJnaW4tdG9wOiAyNnB4O1xuICAgIH1cbiAgYCxcbiAgbGlzdENvbnRyb2xJdGVtQ29sbGFwc2VkOiBjc3NgXG4gICAgcGFkZGluZy1ib3R0b206IDA7XG4gIGAsXG59O1xuXG5mdW5jdGlvbiBTb3J0YWJsZUxpc3QoeyBpdGVtcywgY2hpbGRyZW4sIG9uU29ydEVuZCwga2V5cyB9KSB7XG4gIGNvbnN0IGFjdGl2YXRpb25Db25zdHJhaW50ID0geyBkaXN0YW5jZTogNCB9O1xuICBjb25zdCBzZW5zb3JzID0gdXNlU2Vuc29ycyhcbiAgICB1c2VTZW5zb3IoTW91c2VTZW5zb3IsIHsgYWN0aXZhdGlvbkNvbnN0cmFpbnQgfSksXG4gICAgdXNlU2Vuc29yKFRvdWNoU2Vuc29yLCB7IGFjdGl2YXRpb25Db25zdHJhaW50IH0pLFxuICApO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZVNvcnRFbmQoeyBhY3RpdmUsIG92ZXIgfSkge1xuICAgIG9uU29ydEVuZCh7XG4gICAgICBvbGRJbmRleDoga2V5cy5pbmRleE9mKGFjdGl2ZS5pZCksXG4gICAgICBuZXdJbmRleDoga2V5cy5pbmRleE9mKG92ZXIuaWQpLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2PlxuICAgICAgPERuZENvbnRleHRcbiAgICAgICAgbW9kaWZpZXJzPXtbcmVzdHJpY3RUb1BhcmVudEVsZW1lbnRdfVxuICAgICAgICBjb2xsaXNpb25EZXRlY3Rpb249e2Nsb3Nlc3RDZW50ZXJ9XG4gICAgICAgIHNlbnNvcnM9e3NlbnNvcnN9XG4gICAgICAgIG9uRHJhZ0VuZD17aGFuZGxlU29ydEVuZH1cbiAgICAgID5cbiAgICAgICAgPFNvcnRhYmxlQ29udGV4dCBpdGVtcz17aXRlbXN9PntjaGlsZHJlbn08L1NvcnRhYmxlQ29udGV4dD5cbiAgICAgIDwvRG5kQ29udGV4dD5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gU29ydGFibGVMaXN0SXRlbShwcm9wcykge1xuICBjb25zdCB7IHNldE5vZGVSZWYsIHRyYW5zZm9ybSwgdHJhbnNpdGlvbiB9ID0gdXNlU29ydGFibGUoe1xuICAgIGlkOiBwcm9wcy5pZCxcbiAgfSk7XG5cbiAgY29uc3Qgc3R5bGUgPSB7XG4gICAgdHJhbnNmb3JtOiBDU1MuVHJhbnNmb3JtLnRvU3RyaW5nKHRyYW5zZm9ybSksXG4gICAgdHJhbnNpdGlvbixcbiAgfTtcblxuICBjb25zdCB7IGNvbGxhcHNlZCB9ID0gcHJvcHM7XG5cbiAgcmV0dXJuIChcbiAgICA8TGlzdEl0ZW1cbiAgICAgIHNvcnRhYmxlXG4gICAgICByZWY9e3NldE5vZGVSZWZ9XG4gICAgICBzdHlsZT17c3R5bGV9XG4gICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBjb2xsYXBzZWQgJiYgc3R5bGVzLmxpc3RDb250cm9sSXRlbUNvbGxhcHNlZF19XG4gICAgPlxuICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgIDwvTGlzdEl0ZW0+XG4gICk7XG59XG5cbmZ1bmN0aW9uIERyYWdIYW5kbGUoeyBjaGlsZHJlbiwgaWQgfSkge1xuICBjb25zdCB7IGF0dHJpYnV0ZXMsIGxpc3RlbmVycyB9ID0gdXNlU29ydGFibGUoe1xuICAgIGlkLFxuICB9KTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgey4uLmF0dHJpYnV0ZXN9IHsuLi5saXN0ZW5lcnN9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5jb25zdCB2YWx1ZVR5cGVzID0ge1xuICBTSU5HTEU6ICdTSU5HTEUnLFxuICBNVUxUSVBMRTogJ01VTFRJUExFJyxcbiAgTUlYRUQ6ICdNSVhFRCcsXG59O1xuXG5mdW5jdGlvbiBoYW5kbGVTdW1tYXJ5KHN1bW1hcnksIGVudHJ5LCBsYWJlbCwgaXRlbSkge1xuICBjb25zdCBkYXRhID0gc3RyaW5nVGVtcGxhdGUuYWRkRmlsZVRlbXBsYXRlRmllbGRzKFxuICAgIGVudHJ5LmdldCgncGF0aCcpLFxuICAgIGl0ZW0uc2V0KCdmaWVsZHMubGFiZWwnLCBsYWJlbCksXG4gICk7XG4gIHJldHVybiBzdHJpbmdUZW1wbGF0ZS5jb21waWxlU3RyaW5nVGVtcGxhdGUoc3VtbWFyeSwgbnVsbCwgJycsIGRhdGEpO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUl0ZW0oZmllbGQsIGl0ZW0pIHtcbiAgaWYgKCFNYXAuaXNNYXAoaXRlbSkpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgJyR7ZmllbGQuZ2V0KCduYW1lJyl9JyBmaWVsZCBpdGVtIHZhbHVlIHZhbHVlIHNob3VsZCBiZSBhIG1hcCBidXQgaXMgYSAnJHt0eXBlb2YgaXRlbX0nYCxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gTGFiZWxDb21wb25lbnQoeyBmaWVsZCwgaXNBY3RpdmUsIGhhc0Vycm9ycywgdW5pcXVlRmllbGRJZCwgaXNGaWVsZE9wdGlvbmFsLCB0IH0pIHtcbiAgY29uc3QgbGFiZWwgPSBgJHtmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpfWA7XG4gIHJldHVybiAoXG4gICAgPEZpZWxkTGFiZWwgaXNBY3RpdmU9e2lzQWN0aXZlfSBoYXNFcnJvcnM9e2hhc0Vycm9yc30gaHRtbEZvcj17dW5pcXVlRmllbGRJZH0+XG4gICAgICB7bGFiZWx9IHtgJHtpc0ZpZWxkT3B0aW9uYWwgPyBgICgke3QoJ2VkaXRvci5lZGl0b3JDb250cm9sLmZpZWxkLm9wdGlvbmFsJyl9KWAgOiAnJ31gfVxuICAgIDwvRmllbGRMYWJlbD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlzdENvbnRyb2wgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjaGlsZFJlZnMgPSB7fTtcblxuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIG1ldGFkYXRhOiBJbW11dGFibGVQcm9wVHlwZXMubWFwLFxuICAgIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uQ2hhbmdlT2JqZWN0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uVmFsaWRhdGVPYmplY3Q6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdmFsaWRhdGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdmFsdWU6IEltbXV0YWJsZVByb3BUeXBlcy5saXN0LFxuICAgIGZpZWxkOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGZvcklEOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNvbnRyb2xSZWY6IFByb3BUeXBlcy5mdW5jLFxuICAgIG1lZGlhUGF0aHM6IEltbXV0YWJsZVByb3BUeXBlcy5tYXAuaXNSZXF1aXJlZCxcbiAgICBnZXRBc3NldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvbk9wZW5NZWRpYUxpYnJhcnk6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25BZGRBc3NldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvblJlbW92ZUluc2VydGVkTWVkaWE6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgY2xhc3NOYW1lV3JhcHBlcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHNldEFjdGl2ZVN0eWxlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHNldEluYWN0aXZlU3R5bGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgZWRpdG9yQ29udHJvbDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWQsXG4gICAgcmVzb2x2ZVdpZGdldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBjbGVhckZpZWxkRXJyb3JzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGZpZWxkc0Vycm9yczogSW1tdXRhYmxlUHJvcFR5cGVzLm1hcC5pc1JlcXVpcmVkLFxuICAgIGVudHJ5OiBJbW11dGFibGVQcm9wVHlwZXMubWFwLmlzUmVxdWlyZWQsXG4gICAgdDogUHJvcFR5cGVzLmZ1bmMsXG4gIH07XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICB2YWx1ZTogTGlzdCgpLFxuICAgIHBhcmVudElkczogW10sXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgY29uc3QgeyBmaWVsZCwgdmFsdWUgfSA9IHByb3BzO1xuICAgIGNvbnN0IGxpc3RDb2xsYXBzZWQgPSBmaWVsZC5nZXQoJ2NvbGxhcHNlZCcsIHRydWUpO1xuICAgIGNvbnN0IGl0ZW1zQ29sbGFwc2VkID0gKHZhbHVlICYmIEFycmF5KHZhbHVlLnNpemUpLmZpbGwobGlzdENvbGxhcHNlZCkpIHx8IFtdO1xuICAgIGNvbnN0IGtleXMgPSAodmFsdWUgJiYgQXJyYXkuZnJvbSh7IGxlbmd0aDogdmFsdWUuc2l6ZSB9LCAoKSA9PiB1dWlkKCkpKSB8fCBbXTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBsaXN0Q29sbGFwc2VkLFxuICAgICAgaXRlbXNDb2xsYXBzZWQsXG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZVRvU3RyaW5nKHZhbHVlKSxcbiAgICAgIGtleXMsXG4gICAgfTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIC8vIE1hbnVhbGx5IHZhbGlkYXRlIFByb3BUeXBlcyAtIFJlYWN0IDE5IGJyZWFraW5nIGNoYW5nZVxuICAgIFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcyhMaXN0Q29udHJvbC5wcm9wVHlwZXMsIHRoaXMucHJvcHMsICdwcm9wJywgJ0xpc3RDb250cm9sJyk7XG4gIH1cblxuICB2YWx1ZVRvU3RyaW5nID0gdmFsdWUgPT4ge1xuICAgIGxldCBzdHJpbmdWYWx1ZTtcbiAgICBpZiAoTGlzdC5pc0xpc3QodmFsdWUpIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBzdHJpbmdWYWx1ZSA9IHZhbHVlLmpvaW4oJywnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgRXhwZWN0ZWQgTGlzdCB2YWx1ZSB0byBiZSBhbiBhcnJheSBidXQgcmVjZWl2ZWQgJyR7dmFsdWV9JyB3aXRoIHR5cGUgb2YgJyR7dHlwZW9mIHZhbHVlfScuIFBsZWFzZSBjaGVjayB0aGUgdmFsdWUgcHJvdmlkZWQgdG8gdGhlICcke3RoaXMucHJvcHMuZmllbGQuZ2V0KFxuICAgICAgICAgICduYW1lJyxcbiAgICAgICAgKX0nIGZpZWxkYCxcbiAgICAgICk7XG4gICAgICBzdHJpbmdWYWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBzdHJpbmdWYWx1ZS5yZXBsYWNlKC8sKFteXFxzXXwkKS9nLCAnLCAkMScpO1xuICB9O1xuXG4gIGdldFZhbHVlVHlwZSA9ICgpID0+IHtcbiAgICBjb25zdCB7IGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChmaWVsZC5nZXQoJ2ZpZWxkcycpKSB7XG4gICAgICByZXR1cm4gdmFsdWVUeXBlcy5NVUxUSVBMRTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkLmdldCgnZmllbGQnKSkge1xuICAgICAgcmV0dXJuIHZhbHVlVHlwZXMuU0lOR0xFO1xuICAgIH0gZWxzZSBpZiAoZmllbGQuZ2V0KFRZUEVTX0tFWSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZVR5cGVzLk1JWEVEO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH07XG5cbiAgdW5pcXVlRmllbGRJZCA9IHVuaXF1ZUlkKGAke3RoaXMucHJvcHMuZmllbGQuZ2V0KCduYW1lJyl9LWZpZWxkLWApO1xuICAvKipcbiAgICogQWx3YXlzIHVwZGF0ZSBzbyB0aGF0IGVhY2ggbmVzdGVkIHdpZGdldCBoYXMgdGhlIG9wdGlvbiB0byB1cGRhdGUuIFRoaXMgaXNcbiAgICogcmVxdWlyZWQgYmVjYXVzZSBDb250cm9sSE9DIHByb3ZpZGVzIGEgZGVmYXVsdCBgc2hvdWxkQ29tcG9uZW50VXBkYXRlYFxuICAgKiB3aGljaCBvbmx5IHVwZGF0ZXMgaWYgdGhlIHZhbHVlIGNoYW5nZXMsIGJ1dCBldmVyeSB3aWRnZXQgbXVzdCBiZSBhbGxvd2VkXG4gICAqIHRvIG92ZXJyaWRlIHRoaXMuXG4gICAqL1xuICBzaG91bGRDb21wb25lbnRVcGRhdGUoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBoYW5kbGVDaGFuZ2UgPSBlID0+IHtcbiAgICBjb25zdCB7IG9uQ2hhbmdlIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy5zdGF0ZS52YWx1ZTtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IGUudGFyZ2V0LnZhbHVlLnRyaW0oKTtcbiAgICBjb25zdCBsaXN0VmFsdWUgPSBuZXdWYWx1ZSA/IG5ld1ZhbHVlLnNwbGl0KCcsJykgOiBbXTtcbiAgICBpZiAobmV3VmFsdWUubWF0Y2goLywkLykgJiYgb2xkVmFsdWUubWF0Y2goLywgJC8pKSB7XG4gICAgICBsaXN0VmFsdWUucG9wKCk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPSB0aGlzLnZhbHVlVG9TdHJpbmcobGlzdFZhbHVlKTtcbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHBhcnNlZFZhbHVlIH0pO1xuICAgIG9uQ2hhbmdlKExpc3QobGlzdFZhbHVlLm1hcCh2YWwgPT4gdmFsLnRyaW0oKSkpKTtcbiAgfTtcblxuICBoYW5kbGVGb2N1cyA9ICgpID0+IHtcbiAgICB0aGlzLnByb3BzLnNldEFjdGl2ZVN0eWxlKCk7XG4gIH07XG5cbiAgaGFuZGxlQmx1ciA9IGUgPT4ge1xuICAgIGNvbnN0IGxpc3RWYWx1ZSA9IGUudGFyZ2V0LnZhbHVlXG4gICAgICAuc3BsaXQoJywnKVxuICAgICAgLm1hcChlbCA9PiBlbC50cmltKCkpXG4gICAgICAuZmlsdGVyKGVsID0+IGVsKTtcbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHRoaXMudmFsdWVUb1N0cmluZyhsaXN0VmFsdWUpIH0pO1xuICAgIHRoaXMucHJvcHMuc2V0SW5hY3RpdmVTdHlsZSgpO1xuICB9O1xuXG4gIGhhbmRsZUFkZCA9IGUgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHBhcnNlZFZhbHVlID1cbiAgICAgIHRoaXMuZ2V0VmFsdWVUeXBlKCkgPT09IHZhbHVlVHlwZXMuU0lOR0xFXG4gICAgICAgID8gdGhpcy5zaW5nbGVEZWZhdWx0KClcbiAgICAgICAgOiBmcm9tSlModGhpcy5tdWx0aXBsZURlZmF1bHQoZmllbGQuZ2V0KCdmaWVsZHMnKSkpO1xuICAgIHRoaXMuYWRkSXRlbShwYXJzZWRWYWx1ZSk7XG4gIH07XG5cbiAgc2luZ2xlRGVmYXVsdCA9ICgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5maWVsZC5nZXRJbihbJ2ZpZWxkJywgJ2RlZmF1bHQnXSwgbnVsbCk7XG4gIH07XG5cbiAgbXVsdGlwbGVEZWZhdWx0ID0gZmllbGRzID0+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KGZpZWxkcyk7XG4gIH07XG5cbiAgaGFuZGxlQWRkVHlwZSA9ICh0eXBlLCB0eXBlS2V5KSA9PiB7XG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPSBmcm9tSlModGhpcy5taXhlZERlZmF1bHQodHlwZUtleSwgdHlwZSkpO1xuICAgIHRoaXMuYWRkSXRlbShwYXJzZWRWYWx1ZSk7XG4gIH07XG5cbiAgbWl4ZWREZWZhdWx0ID0gKHR5cGVLZXksIHR5cGUpID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZFR5cGUgPSB0aGlzLnByb3BzLmZpZWxkLmdldChUWVBFU19LRVkpLmZpbmQoZiA9PiBmLmdldCgnbmFtZScpID09PSB0eXBlKTtcbiAgICBjb25zdCBmaWVsZHMgPSBzZWxlY3RlZFR5cGUuZ2V0KCdmaWVsZHMnKSB8fCBbc2VsZWN0ZWRUeXBlLmdldCgnZmllbGQnKV07XG5cbiAgICByZXR1cm4gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KGZpZWxkcywgeyBbdHlwZUtleV06IHR5cGUgfSk7XG4gIH07XG5cbiAgZ2V0RmllbGRzRGVmYXVsdCA9IChmaWVsZHMsIGluaXRpYWxWYWx1ZSA9IHt9KSA9PiB7XG4gICAgcmV0dXJuIGZpZWxkcy5yZWR1Y2UoKGFjYywgaXRlbSkgPT4ge1xuICAgICAgY29uc3Qgc3ViZmllbGRzID0gaXRlbS5nZXQoJ2ZpZWxkJykgfHwgaXRlbS5nZXQoJ2ZpZWxkcycpO1xuICAgICAgY29uc3Qgb2JqZWN0ID0gaXRlbS5nZXQoJ3dpZGdldCcpID09ICdvYmplY3QnO1xuICAgICAgY29uc3QgbmFtZSA9IGl0ZW0uZ2V0KCduYW1lJyk7XG4gICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSBpdGVtLmdldCgnZGVmYXVsdCcsIG51bGwpO1xuXG4gICAgICBpZiAoTGlzdC5pc0xpc3Qoc3ViZmllbGRzKSAmJiBvYmplY3QpIHtcbiAgICAgICAgY29uc3Qgc3ViRGVmYXVsdFZhbHVlID0gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KHN1YmZpZWxkcyk7XG4gICAgICAgICFpc0VtcHR5KHN1YkRlZmF1bHRWYWx1ZSkgJiYgKGFjY1tuYW1lXSA9IHN1YkRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9XG5cbiAgICAgIGlmIChNYXAuaXNNYXAoc3ViZmllbGRzKSAmJiBvYmplY3QpIHtcbiAgICAgICAgY29uc3Qgc3ViRGVmYXVsdFZhbHVlID0gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KFtzdWJmaWVsZHNdKTtcbiAgICAgICAgIWlzRW1wdHkoc3ViRGVmYXVsdFZhbHVlKSAmJiAoYWNjW25hbWVdID0gc3ViRGVmYXVsdFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH1cblxuICAgICAgaWYgKGRlZmF1bHRWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBhY2NbbmFtZV0gPSBkZWZhdWx0VmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgaW5pdGlhbFZhbHVlKTtcbiAgfTtcblxuICBhZGRJdGVtID0gcGFyc2VkVmFsdWUgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWUsIG9uQ2hhbmdlLCBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBhZGRUb1RvcCA9IGZpZWxkLmdldCgnYWRkX3RvX3RvcCcsIGZhbHNlKTtcblxuICAgIGNvbnN0IGl0ZW1LZXkgPSB1dWlkKCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBpdGVtc0NvbGxhcHNlZDogYWRkVG9Ub3BcbiAgICAgICAgPyBbZmFsc2UsIC4uLnRoaXMuc3RhdGUuaXRlbXNDb2xsYXBzZWRdXG4gICAgICAgIDogWy4uLnRoaXMuc3RhdGUuaXRlbXNDb2xsYXBzZWQsIGZhbHNlXSxcbiAgICAgIGtleXM6IGFkZFRvVG9wID8gW2l0ZW1LZXksIC4uLnRoaXMuc3RhdGUua2V5c10gOiBbLi4udGhpcy5zdGF0ZS5rZXlzLCBpdGVtS2V5XSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGxpc3RWYWx1ZSA9IHZhbHVlIHx8IExpc3QoKTtcbiAgICBpZiAoYWRkVG9Ub3ApIHtcbiAgICAgIG9uQ2hhbmdlKGxpc3RWYWx1ZS51bnNoaWZ0KHBhcnNlZFZhbHVlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uQ2hhbmdlKGxpc3RWYWx1ZS5wdXNoKHBhcnNlZFZhbHVlKSk7XG4gICAgfVxuICB9O1xuXG4gIHByb2Nlc3NDb250cm9sUmVmID0gcmVmID0+IHtcbiAgICBpZiAoIXJlZikgcmV0dXJuO1xuICAgIGNvbnN0IHtcbiAgICAgIHByb3BzOiB7IHZhbGlkYXRpb25LZXk6IGtleSB9LFxuICAgIH0gPSByZWY7XG4gICAgdGhpcy5jaGlsZFJlZnNba2V5XSA9IHJlZjtcbiAgICB0aGlzLnByb3BzLmNvbnRyb2xSZWY/Lih0aGlzKTtcbiAgfTtcblxuICB2YWxpZGF0ZSA9ICgpID0+IHtcbiAgICAvLyBGaXJzdCB2YWxpZGF0ZSBjaGlsZCB3aWRnZXRzIGlmIHRoaXMgaXMgYSBjb21wbGV4IGxpc3RcbiAgICBjb25zdCBoYXNDaGlsZFdpZGdldHMgPSB0aGlzLmdldFZhbHVlVHlwZSgpICYmIE9iamVjdC5rZXlzKHRoaXMuY2hpbGRSZWZzKS5sZW5ndGggPiAwO1xuICAgIGlmIChoYXNDaGlsZFdpZGdldHMpIHtcbiAgICAgIE9iamVjdC52YWx1ZXModGhpcy5jaGlsZFJlZnMpLmZvckVhY2god2lkZ2V0ID0+IHtcbiAgICAgICAgd2lkZ2V0Py52YWxpZGF0ZT8uKCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9wcy52YWxpZGF0ZSgpO1xuICAgIH1cbiAgICB0aGlzLnByb3BzLm9uVmFsaWRhdGVPYmplY3QodGhpcy5wcm9wcy5mb3JJRCwgdGhpcy52YWxpZGF0ZVNpemUoKSk7XG4gIH07XG5cbiAgdmFsaWRhdGVTaXplID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgZmllbGQsIHZhbHVlLCB0IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG1pbiA9IGZpZWxkLmdldCgnbWluJyk7XG4gICAgY29uc3QgbWF4ID0gZmllbGQuZ2V0KCdtYXgnKTtcbiAgICBjb25zdCByZXF1aXJlZCA9IGZpZWxkLmdldCgncmVxdWlyZWQnLCB0cnVlKTtcblxuICAgIGlmICghcmVxdWlyZWQgJiYgIXZhbHVlPy5zaXplKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgZXJyb3IgPSB2YWxpZGF0aW9ucy52YWxpZGF0ZU1pbk1heChcbiAgICAgIHQsXG4gICAgICBmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpLFxuICAgICAgdmFsdWUsXG4gICAgICBtaW4sXG4gICAgICBtYXgsXG4gICAgKTtcblxuICAgIHJldHVybiBlcnJvciA/IFtlcnJvcl0gOiBbXTtcbiAgfTtcblxuICAvKipcbiAgICogSW4gY2FzZSB0aGUgYG9uQ2hhbmdlT2JqZWN0YCBmdW5jdGlvbiBpcyBmcm96ZW4gYnkgYSBjaGlsZCB3aWRnZXQgaW1wbGVtZW50YXRpb24sXG4gICAqIGUuZy4gd2hlbiBkZWJvdW5jZWQsIGFsd2F5cyBnZXQgdGhlIGxhdGVzdCBvYmplY3QgdmFsdWUgaW5zdGVhZCBvZiB1c2luZ1xuICAgKiBgdGhpcy5wcm9wcy52YWx1ZWAgZGlyZWN0bHkuXG4gICAqL1xuICBnZXRPYmplY3RWYWx1ZSA9IGlkeCA9PiB0aGlzLnByb3BzLnZhbHVlLmdldChpZHgpIHx8IE1hcCgpO1xuXG4gIGhhbmRsZUNoYW5nZUZvcihpbmRleCkge1xuICAgIHJldHVybiAoZiwgbmV3VmFsdWUsIG5ld01ldGFkYXRhKSA9PiB7XG4gICAgICBjb25zdCB7IHZhbHVlLCBtZXRhZGF0YSwgb25DaGFuZ2UsIGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBmaWVsZC5nZXQoJ25hbWUnKTtcbiAgICAgIGNvbnN0IGxpc3RGaWVsZE9iamVjdFdpZGdldCA9IGZpZWxkLmdldEluKFsnZmllbGQnLCAnd2lkZ2V0J10pID09PSAnb2JqZWN0JztcbiAgICAgIGNvbnN0IHdpdGhOYW1lS2V5ID1cbiAgICAgICAgdGhpcy5nZXRWYWx1ZVR5cGUoKSAhPT0gdmFsdWVUeXBlcy5TSU5HTEUgfHxcbiAgICAgICAgKHRoaXMuZ2V0VmFsdWVUeXBlKCkgPT09IHZhbHVlVHlwZXMuU0lOR0xFICYmIGxpc3RGaWVsZE9iamVjdFdpZGdldCk7XG4gICAgICBjb25zdCBuZXdPYmplY3RWYWx1ZSA9IHdpdGhOYW1lS2V5XG4gICAgICAgID8gdGhpcy5nZXRPYmplY3RWYWx1ZShpbmRleCkuc2V0KGYuZ2V0KCduYW1lJyksIG5ld1ZhbHVlKVxuICAgICAgICA6IG5ld1ZhbHVlO1xuICAgICAgY29uc3QgcGFyc2VkTWV0YWRhdGEgPSB7XG4gICAgICAgIFtjb2xsZWN0aW9uTmFtZV06IE9iamVjdC5hc3NpZ24obWV0YWRhdGEgPyBtZXRhZGF0YS50b0pTKCkgOiB7fSwgbmV3TWV0YWRhdGEgfHwge30pLFxuICAgICAgfTtcbiAgICAgIG9uQ2hhbmdlKHZhbHVlLnNldChpbmRleCwgbmV3T2JqZWN0VmFsdWUpLCBwYXJzZWRNZXRhZGF0YSk7XG4gICAgfTtcbiAgfVxuXG4gIGhhbmRsZVJlbW92ZSA9IChpbmRleCwgZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3Qge1xuICAgICAgdmFsdWUsXG4gICAgICBtZXRhZGF0YSxcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgZmllbGQsXG4gICAgICBjbGVhckZpZWxkRXJyb3JzLFxuICAgICAgb25WYWxpZGF0ZU9iamVjdCxcbiAgICAgIGZvcklELFxuICAgICAgZmllbGRzRXJyb3JzLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBmaWVsZC5nZXQoJ25hbWUnKTtcbiAgICBjb25zdCBpc1NpbmdsZUZpZWxkID0gdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5TSU5HTEU7XG5cbiAgICBjb25zdCBtZXRhZGF0YVJlbW92ZVBhdGggPSBpc1NpbmdsZUZpZWxkID8gdmFsdWUuZ2V0KGluZGV4KSA6IHZhbHVlLmdldChpbmRleCkudmFsdWVTZXEoKTtcbiAgICBjb25zdCBwYXJzZWRNZXRhZGF0YSA9XG4gICAgICBtZXRhZGF0YSAmJiAhbWV0YWRhdGEuaXNFbXB0eSgpXG4gICAgICAgID8geyBbY29sbGVjdGlvbk5hbWVdOiBtZXRhZGF0YS5yZW1vdmVJbihtZXRhZGF0YVJlbW92ZVBhdGgpIH1cbiAgICAgICAgOiBtZXRhZGF0YTtcblxuICAgIC8vIEdldCB0aGUga2V5IG9mIHRoZSBpdGVtIGJlaW5nIHJlbW92ZWRcbiAgICBjb25zdCByZW1vdmVkS2V5ID0gdGhpcy5zdGF0ZS5rZXlzW2luZGV4XTtcblxuICAgIC8vIFVwZGF0ZSBzdGF0ZSB3aGlsZSBwcmVzZXJ2aW5nIGtleXMgZm9yIHJlbWFpbmluZyBpdGVtc1xuICAgIGNvbnN0IG5ld0tleXMgPSBbLi4udGhpcy5zdGF0ZS5rZXlzXTtcbiAgICBuZXdLZXlzLnNwbGljZShpbmRleCwgMSk7XG4gICAgaXRlbXNDb2xsYXBzZWQuc3BsaWNlKGluZGV4LCAxKTtcblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXNDb2xsYXBzZWQ6IFsuLi5pdGVtc0NvbGxhcHNlZF0sXG4gICAgICBrZXlzOiBuZXdLZXlzLFxuICAgIH0pO1xuXG4gICAgLy8gQ2xlYXIgdGhlIHJlZiBmb3IgdGhlIHJlbW92ZWQgaXRlbVxuICAgIGRlbGV0ZSB0aGlzLmNoaWxkUmVmc1tyZW1vdmVkS2V5XTtcblxuICAgIGNvbnN0IG5ld1ZhbHVlID0gdmFsdWUuZGVsZXRlKGluZGV4KTtcblxuICAgIC8vIENsZWFyIGVycm9ycyBmb3IgdGhlIHJlbW92ZWQgaXRlbSBhbmQgaXRzIGNoaWxkcmVuXG4gICAgaWYgKGZpZWxkc0Vycm9ycykge1xuICAgICAgT2JqZWN0LmVudHJpZXMoZmllbGRzRXJyb3JzLnRvSlMoKSkuZm9yRWFjaCgoW2ZpZWxkSWQsIGVycm9yc10pID0+IHtcbiAgICAgICAgaWYgKGVycm9ycy5zb21lKGVyciA9PiBlcnIucGFyZW50SWRzPy5pbmNsdWRlcyhyZW1vdmVkS2V5KSkpIHtcbiAgICAgICAgICBjbGVhckZpZWxkRXJyb3JzKGZpZWxkSWQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBJZiBsaXN0IGlzIGVtcHR5LCBtYXJrIGl0IGFzIHZhbGlkXG4gICAgaWYgKG5ld1ZhbHVlLnNpemUgPT09IDApIHtcbiAgICAgIGNsZWFyRmllbGRFcnJvcnMoZm9ySUQpO1xuICAgICAgb25WYWxpZGF0ZU9iamVjdChmb3JJRCwgW10pO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSB0aGUgdmFsdWUgbGFzdCB0byBlbnN1cmUgYWxsIGVycm9yIHN0YXRlcyBhcmUgY2xlYXJlZFxuICAgIG9uQ2hhbmdlKG5ld1ZhbHVlLCBwYXJzZWRNZXRhZGF0YSk7XG4gIH07XG5cbiAgaGFuZGxlSXRlbUNvbGxhcHNlVG9nZ2xlID0gKGluZGV4LCBldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBuZXdJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLm1hcCgoY29sbGFwc2VkLCBpdGVtSW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCA9PT0gaXRlbUluZGV4KSB7XG4gICAgICAgIHJldHVybiAhY29sbGFwc2VkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbGxhcHNlZDtcbiAgICB9KTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGl0ZW1zQ29sbGFwc2VkOiBuZXdJdGVtc0NvbGxhcHNlZCxcbiAgICB9KTtcbiAgfTtcblxuICBoYW5kbGVDb2xsYXBzZUFsbFRvZ2dsZSA9IGUgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IHZhbHVlLCBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkLCBsaXN0Q29sbGFwc2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IG1pbmltaXplQ29sbGFwc2VkSXRlbXMgPSBmaWVsZC5nZXQoJ21pbmltaXplX2NvbGxhcHNlZCcsIGZhbHNlKTtcbiAgICBjb25zdCBsaXN0Q29sbGFwc2VkQnlEZWZhdWx0ID0gZmllbGQuZ2V0KCdjb2xsYXBzZWQnLCB0cnVlKTtcbiAgICBjb25zdCBhbGxJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLmV2ZXJ5KHZhbCA9PiB2YWwgPT09IHRydWUpO1xuXG4gICAgaWYgKG1pbmltaXplQ29sbGFwc2VkSXRlbXMpIHtcbiAgICAgIGxldCB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZDtcbiAgICAgIC8vIE9ubHkgYWxsb3cgY29sbGFwc2luZyBhbGwgaXRlbXMgaW4gdGhpcyBtb2RlIGJ1dCBub3Qgb3BlbmluZyBhbGwgYXQgb25jZVxuICAgICAgaWYgKCFsaXN0Q29sbGFwc2VkIHx8ICFsaXN0Q29sbGFwc2VkQnlEZWZhdWx0KSB7XG4gICAgICAgIHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCA9IEFycmF5KHZhbHVlLnNpemUpLmZpbGwoIWxpc3RDb2xsYXBzZWQpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGxpc3RDb2xsYXBzZWQ6ICFsaXN0Q29sbGFwc2VkLCBpdGVtc0NvbGxhcHNlZDogdXBkYXRlZEl0ZW1zQ29sbGFwc2VkIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgaXRlbXNDb2xsYXBzZWQ6IEFycmF5KHZhbHVlLnNpemUpLmZpbGwoIWFsbEl0ZW1zQ29sbGFwc2VkKSB9KTtcbiAgICB9XG4gIH07XG5cbiAgb2JqZWN0TGFiZWwoaXRlbSkge1xuICAgIGNvbnN0IHsgZmllbGQsIGVudHJ5IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHZhbHVlVHlwZSA9IHRoaXMuZ2V0VmFsdWVUeXBlKCk7XG4gICAgc3dpdGNoICh2YWx1ZVR5cGUpIHtcbiAgICAgIGNhc2UgdmFsdWVUeXBlcy5NSVhFRDoge1xuICAgICAgICBpZiAoIXZhbGlkYXRlSXRlbShmaWVsZCwgaXRlbSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXRlbVR5cGUgPSBnZXRUeXBlZEZpZWxkRm9yVmFsdWUoZmllbGQsIGl0ZW0pO1xuICAgICAgICBjb25zdCBsYWJlbCA9IGl0ZW1UeXBlLmdldCgnbGFiZWwnLCBpdGVtVHlwZS5nZXQoJ25hbWUnKSk7XG4gICAgICAgIC8vIGVhY2ggdHlwZSBjYW4gaGF2ZSBpdHMgb3duIHN1bW1hcnksIGJ1dCBkZWZhdWx0IHRvIHRoZSBsaXN0IHN1bW1hcnkgaWYgZXhpc3RzXG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBpdGVtVHlwZS5nZXQoJ3N1bW1hcnknLCBmaWVsZC5nZXQoJ3N1bW1hcnknKSk7XG4gICAgICAgIGNvbnN0IGxhYmVsUmV0dXJuID0gc3VtbWFyeSA/IGhhbmRsZVN1bW1hcnkoc3VtbWFyeSwgZW50cnksIGxhYmVsLCBpdGVtKSA6IGxhYmVsO1xuICAgICAgICByZXR1cm4gbGFiZWxSZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlIHZhbHVlVHlwZXMuU0lOR0xFOiB7XG4gICAgICAgIGNvbnN0IHNpbmdsZUZpZWxkID0gZmllbGQuZ2V0KCdmaWVsZCcpO1xuICAgICAgICBjb25zdCBsYWJlbCA9IHNpbmdsZUZpZWxkLmdldCgnbGFiZWwnLCBzaW5nbGVGaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBmaWVsZC5nZXQoJ3N1bW1hcnknKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGZyb21KUyh7IFtzaW5nbGVGaWVsZC5nZXQoJ25hbWUnKV06IGl0ZW0gfSk7XG4gICAgICAgIGNvbnN0IGxhYmVsUmV0dXJuID0gc3VtbWFyeSA/IGhhbmRsZVN1bW1hcnkoc3VtbWFyeSwgZW50cnksIGxhYmVsLCBkYXRhKSA6IGxhYmVsO1xuICAgICAgICByZXR1cm4gbGFiZWxSZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlIHZhbHVlVHlwZXMuTVVMVElQTEU6IHtcbiAgICAgICAgaWYgKCF2YWxpZGF0ZUl0ZW0oZmllbGQsIGl0ZW0pKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG11bHRpRmllbGRzID0gZmllbGQuZ2V0KCdmaWVsZHMnKTtcbiAgICAgICAgY29uc3QgbGFiZWxGaWVsZCA9IG11bHRpRmllbGRzICYmIG11bHRpRmllbGRzLmZpcnN0KCk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gaXRlbS5nZXQobGFiZWxGaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBmaWVsZC5nZXQoJ3N1bW1hcnknKTtcbiAgICAgICAgY29uc3QgbGFiZWxSZXR1cm4gPSBzdW1tYXJ5ID8gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgdmFsdWUsIGl0ZW0pIDogdmFsdWU7XG4gICAgICAgIHJldHVybiAobGFiZWxSZXR1cm4gfHwgYE5vICR7bGFiZWxGaWVsZC5nZXQoJ25hbWUnKX1gKS50b1N0cmluZygpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBvblNvcnRFbmQgPSAoeyBvbGRJbmRleCwgbmV3SW5kZXggfSkgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCwga2V5cyB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIC8vIFVwZGF0ZSB2YWx1ZVxuICAgIGNvbnN0IGl0ZW0gPSB2YWx1ZS5nZXQob2xkSW5kZXgpO1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gdmFsdWUuZGVsZXRlKG9sZEluZGV4KS5pbnNlcnQobmV3SW5kZXgsIGl0ZW0pO1xuICAgIHRoaXMucHJvcHMub25DaGFuZ2UobmV3VmFsdWUpO1xuXG4gICAgLy8gVXBkYXRlIGNvbGxhcHNpbmdcbiAgICBjb25zdCBjb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZFtvbGRJbmRleF07XG4gICAgaXRlbXNDb2xsYXBzZWQuc3BsaWNlKG9sZEluZGV4LCAxKTtcbiAgICBjb25zdCB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgPSBbLi4uaXRlbXNDb2xsYXBzZWRdO1xuICAgIHVwZGF0ZWRJdGVtc0NvbGxhcHNlZC5zcGxpY2UobmV3SW5kZXgsIDAsIGNvbGxhcHNlZCk7XG5cbiAgICAvLyBNb3ZlIGtleXMgdG8gbWFpbnRhaW4gcmVsYXRpb25zaGlwc1xuICAgIGNvbnN0IG1vdmVkS2V5ID0ga2V5c1tvbGRJbmRleF07XG4gICAgY29uc3QgdXBkYXRlZEtleXMgPSBbLi4ua2V5c107XG4gICAgdXBkYXRlZEtleXMuc3BsaWNlKG9sZEluZGV4LCAxKTtcbiAgICB1cGRhdGVkS2V5cy5zcGxpY2UobmV3SW5kZXgsIDAsIG1vdmVkS2V5KTtcblxuICAgIHRoaXMuc2V0U3RhdGUoeyBpdGVtc0NvbGxhcHNlZDogdXBkYXRlZEl0ZW1zQ29sbGFwc2VkLCBrZXlzOiB1cGRhdGVkS2V5cyB9KTtcbiAgfTtcblxuICBoYXNFcnJvciA9IGluZGV4ID0+IHtcbiAgICBjb25zdCB7IGZpZWxkc0Vycm9ycyB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoZmllbGRzRXJyb3JzICYmIGZpZWxkc0Vycm9ycy5zaXplID4gMCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZmllbGRzRXJyb3JzLnRvSlMoKSkuc29tZShhcnIgPT5cbiAgICAgICAgYXJyLnNvbWUoZXJyID0+IGVyci5wYXJlbnRJZHMgJiYgZXJyLnBhcmVudElkcy5pbmNsdWRlcyh0aGlzLnN0YXRlLmtleXNbaW5kZXhdKSksXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICBmb2N1cyhwYXRoKSB7XG4gICAgY29uc3QgW2luZGV4LCAuLi5yZW1haW5pbmdQYXRoXSA9IHBhdGguc3BsaXQoJy4nKTtcblxuICAgIGlmICh0aGlzLnN0YXRlLmxpc3RDb2xsYXBzZWQgfHwgdGhpcy5zdGF0ZS5pdGVtc0NvbGxhcHNlZFtpbmRleF0pIHtcbiAgICAgIGNvbnN0IG5ld0l0ZW1zQ29sbGFwc2VkID0gWy4uLnRoaXMuc3RhdGUuaXRlbXNDb2xsYXBzZWRdO1xuICAgICAgbmV3SXRlbXNDb2xsYXBzZWRbaW5kZXhdID0gZmFsc2U7XG4gICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICB7XG4gICAgICAgICAgbGlzdENvbGxhcHNlZDogZmFsc2UsXG4gICAgICAgICAgaXRlbXNDb2xsYXBzZWQ6IG5ld0l0ZW1zQ29sbGFwc2VkLFxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5zdGF0ZS5rZXlzW2luZGV4XTtcbiAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jaGlsZFJlZnNba2V5XTtcbiAgICAgICAgICBpZiAoY29udHJvbD8uZm9jdXMpIHtcbiAgICAgICAgICAgIGNvbnRyb2wuZm9jdXMocmVtYWluaW5nUGF0aC5qb2luKCcuJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuc3RhdGUua2V5c1tpbmRleF07XG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jaGlsZFJlZnNba2V5XTtcbiAgICAgIGlmIChjb250cm9sPy5mb2N1cykge1xuICAgICAgICBjb250cm9sLmZvY3VzKHJlbWFpbmluZ1BhdGguam9pbignLicpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZGlzcGxheS1uYW1lXG4gIHJlbmRlckl0ZW0gPSAoaXRlbSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjbGFzc05hbWVXcmFwcGVyLFxuICAgICAgZWRpdG9yQ29udHJvbCxcbiAgICAgIG9uVmFsaWRhdGVPYmplY3QsXG4gICAgICBtZXRhZGF0YSxcbiAgICAgIGNsZWFyRmllbGRFcnJvcnMsXG4gICAgICBmaWVsZHNFcnJvcnMsXG4gICAgICBjb250cm9sUmVmLFxuICAgICAgcmVzb2x2ZVdpZGdldCxcbiAgICAgIHBhcmVudElkcyxcbiAgICAgIGZvcklELFxuICAgICAgdCxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQsIGtleXMgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgY29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWRbaW5kZXhdO1xuICAgIGNvbnN0IGtleSA9IGtleXNbaW5kZXhdO1xuICAgIGxldCBmaWVsZCA9IHRoaXMucHJvcHMuZmllbGQ7XG4gICAgY29uc3QgaGFzRXJyb3IgPSB0aGlzLmhhc0Vycm9yKGluZGV4KTtcbiAgICBjb25zdCBpc1ZhcmlhYmxlVHlwZXNMaXN0ID0gdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5NSVhFRDtcbiAgICBpZiAoaXNWYXJpYWJsZVR5cGVzTGlzdCkge1xuICAgICAgZmllbGQgPSBnZXRUeXBlZEZpZWxkRm9yVmFsdWUoZmllbGQsIGl0ZW0pO1xuICAgICAgaWYgKCFmaWVsZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJFcnJvbmVvdXNUeXBlZEl0ZW0oaW5kZXgsIGl0ZW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8U29ydGFibGVMaXN0SXRlbVxuICAgICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBjb2xsYXBzZWQgJiYgc3R5bGVzLmxpc3RDb250cm9sSXRlbUNvbGxhcHNlZF19XG4gICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIGlkPXtrZXl9XG4gICAgICAgIGtleXM9e2tleXN9XG4gICAgICA+XG4gICAgICAgIHtpc1ZhcmlhYmxlVHlwZXNMaXN0ICYmIChcbiAgICAgICAgICA8TGFiZWxDb21wb25lbnRcbiAgICAgICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgICAgIGlzQWN0aXZlPXtmYWxzZX1cbiAgICAgICAgICAgIGhhc0Vycm9ycz17aGFzRXJyb3J9XG4gICAgICAgICAgICB1bmlxdWVGaWVsZElkPXt0aGlzLnVuaXF1ZUZpZWxkSWR9XG4gICAgICAgICAgICBpc0ZpZWxkT3B0aW9uYWw9e2ZpZWxkLmdldCgncmVxdWlyZWQnKSA9PT0gZmFsc2V9XG4gICAgICAgICAgICB0PXt0fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIDxTdHlsZWRMaXN0SXRlbVRvcEJhclxuICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICAgIG9uQ29sbGFwc2VUb2dnbGU9e3BhcnRpYWwodGhpcy5oYW5kbGVJdGVtQ29sbGFwc2VUb2dnbGUsIGluZGV4KX1cbiAgICAgICAgICBkcmFnSGFuZGxlPXtEcmFnSGFuZGxlfVxuICAgICAgICAgIGlkPXtrZXl9XG4gICAgICAgICAgYWxsb3dSZW1vdmU9e2ZpZWxkLmdldCgnYWxsb3dfcmVtb3ZlJywgdHJ1ZSl9XG4gICAgICAgICAgYWxsb3dSZW9yZGVyPXtmaWVsZC5nZXQoJ2FsbG93X3Jlb3JkZXInLCB0cnVlKX1cbiAgICAgICAgICBvblJlbW92ZT17cGFydGlhbCh0aGlzLmhhbmRsZVJlbW92ZSwgaW5kZXgpfVxuICAgICAgICAgIGRhdGEtdGVzdGlkPXtgc3R5bGVkLWxpc3QtaXRlbS10b3AtYmFyLSR7a2V5fWB9XG4gICAgICAgIC8+XG4gICAgICAgIDxOZXN0ZWRPYmplY3RMYWJlbCBjb2xsYXBzZWQ9e2NvbGxhcHNlZH0gZXJyb3I9e2hhc0Vycm9yfT5cbiAgICAgICAgICB7dGhpcy5vYmplY3RMYWJlbChpdGVtKX1cbiAgICAgICAgPC9OZXN0ZWRPYmplY3RMYWJlbD5cbiAgICAgICAgPENsYXNzTmFtZXM+XG4gICAgICAgICAgeyh7IGNzcywgY3ggfSkgPT4gKFxuICAgICAgICAgICAgPE9iamVjdENvbnRyb2xcbiAgICAgICAgICAgICAgY2xhc3NOYW1lV3JhcHBlcj17Y3goY2xhc3NOYW1lV3JhcHBlciwge1xuICAgICAgICAgICAgICAgIFtjc3NgXG4gICAgICAgICAgICAgICAgICAke3N0eWxlU3RyaW5ncy5jb2xsYXBzZWRPYmplY3RDb250cm9sfTtcbiAgICAgICAgICAgICAgICBgXTogY29sbGFwc2VkLFxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgdmFsdWU9e2l0ZW19XG4gICAgICAgICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgICAgICAgb25DaGFuZ2VPYmplY3Q9e3RoaXMuaGFuZGxlQ2hhbmdlRm9yKGluZGV4KX1cbiAgICAgICAgICAgICAgZWRpdG9yQ29udHJvbD17ZWRpdG9yQ29udHJvbH1cbiAgICAgICAgICAgICAgcmVzb2x2ZVdpZGdldD17cmVzb2x2ZVdpZGdldH1cbiAgICAgICAgICAgICAgbWV0YWRhdGE9e21ldGFkYXRhfVxuICAgICAgICAgICAgICBmb3JMaXN0XG4gICAgICAgICAgICAgIG9uVmFsaWRhdGVPYmplY3Q9e29uVmFsaWRhdGVPYmplY3R9XG4gICAgICAgICAgICAgIGNsZWFyRmllbGRFcnJvcnM9e2NsZWFyRmllbGRFcnJvcnN9XG4gICAgICAgICAgICAgIGZpZWxkc0Vycm9ycz17ZmllbGRzRXJyb3JzfVxuICAgICAgICAgICAgICByZWY9e3RoaXMucHJvY2Vzc0NvbnRyb2xSZWZ9XG4gICAgICAgICAgICAgIGNvbnRyb2xSZWY9e2NvbnRyb2xSZWZ9XG4gICAgICAgICAgICAgIHZhbGlkYXRpb25LZXk9e2tleX1cbiAgICAgICAgICAgICAgY29sbGFwc2VkPXtjb2xsYXBzZWR9XG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgb2JqZWN0LWNvbnRyb2wtJHtrZXl9YH1cbiAgICAgICAgICAgICAgaGFzRXJyb3I9e2hhc0Vycm9yfVxuICAgICAgICAgICAgICBwYXJlbnRJZHM9e1suLi5wYXJlbnRJZHMsIGZvcklELCBrZXldfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L0NsYXNzTmFtZXM+XG4gICAgICA8L1NvcnRhYmxlTGlzdEl0ZW0+XG4gICAgKTtcbiAgfTtcblxuICByZW5kZXJFcnJvbmVvdXNUeXBlZEl0ZW0oaW5kZXgsIGl0ZW0pIHtcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMucHJvcHMuZmllbGQ7XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZ2V0RXJyb3JNZXNzYWdlRm9yVHlwZWRGaWVsZEFuZFZhbHVlKGZpZWxkLCBpdGVtKTtcbiAgICBjb25zdCBrZXkgPSBgaXRlbS0ke2luZGV4fWA7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTb3J0YWJsZUxpc3RJdGVtXG4gICAgICAgIGNzcz17W3N0eWxlcy5saXN0Q29udHJvbEl0ZW0sIHN0eWxlcy5saXN0Q29udHJvbEl0ZW1Db2xsYXBzZWRdfVxuICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAgIGtleT17a2V5fVxuICAgICAgPlxuICAgICAgICA8U3R5bGVkTGlzdEl0ZW1Ub3BCYXJcbiAgICAgICAgICBvbkNvbGxhcHNlVG9nZ2xlPXtudWxsfVxuICAgICAgICAgIG9uUmVtb3ZlPXtwYXJ0aWFsKHRoaXMuaGFuZGxlUmVtb3ZlLCBpbmRleCwga2V5KX1cbiAgICAgICAgICBkcmFnSGFuZGxlPXtEcmFnSGFuZGxlfVxuICAgICAgICAgIGlkPXtrZXl9XG4gICAgICAgIC8+XG4gICAgICAgIDxOZXN0ZWRPYmplY3RMYWJlbCBjb2xsYXBzZWQ9e3RydWV9IGVycm9yPXt0cnVlfT5cbiAgICAgICAgICB7ZXJyb3JNZXNzYWdlfVxuICAgICAgICA8L05lc3RlZE9iamVjdExhYmVsPlxuICAgICAgPC9Tb3J0YWJsZUxpc3RJdGVtPlxuICAgICk7XG4gIH1cblxuICByZW5kZXJMaXN0Q29udHJvbCgpIHtcbiAgICBjb25zdCB7IHZhbHVlLCBmb3JJRCwgZmllbGQsIGNsYXNzTmFtZVdyYXBwZXIsIHQgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCwgbGlzdENvbGxhcHNlZCwga2V5cyB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBpdGVtcyA9IHZhbHVlIHx8IExpc3QoKTtcbiAgICBjb25zdCBsYWJlbCA9IGZpZWxkLmdldCgnbGFiZWwnLCBmaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgY29uc3QgbGFiZWxTaW5ndWxhciA9IGZpZWxkLmdldCgnbGFiZWxfc2luZ3VsYXInKSB8fCBmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpO1xuICAgIGNvbnN0IGxpc3RMYWJlbCA9IGl0ZW1zLnNpemUgPT09IDEgPyBsYWJlbFNpbmd1bGFyLnRvTG93ZXJDYXNlKCkgOiBsYWJlbC50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IG1pbmltaXplQ29sbGFwc2VkSXRlbXMgPSBmaWVsZC5nZXQoJ21pbmltaXplX2NvbGxhcHNlZCcsIGZhbHNlKTtcbiAgICBjb25zdCBhbGxJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLmV2ZXJ5KHZhbCA9PiB2YWwgPT09IHRydWUpO1xuICAgIGNvbnN0IHNlbGZDb2xsYXBzZWQgPSBhbGxJdGVtc0NvbGxhcHNlZCAmJiAobGlzdENvbGxhcHNlZCB8fCAhbWluaW1pemVDb2xsYXBzZWRJdGVtcyk7XG5cbiAgICBjb25zdCBpdGVtc0FycmF5ID0ga2V5cy5tYXAoa2V5ID0+ICh7IGlkOiBrZXkgfSkpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxDbGFzc05hbWVzPlxuICAgICAgICB7KHsgY3gsIGNzcyB9KSA9PiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgaWQ9e2ZvcklEfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjeChcbiAgICAgICAgICAgICAgY2xhc3NOYW1lV3JhcHBlcixcbiAgICAgICAgICAgICAgY3NzYFxuICAgICAgICAgICAgICAgICR7c3R5bGVTdHJpbmdzLm9iamVjdFdpZGdldFRvcEJhckNvbnRhaW5lcn1cbiAgICAgICAgICAgICAgYCxcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPE9iamVjdFdpZGdldFRvcEJhclxuICAgICAgICAgICAgICBhbGxvd0FkZD17ZmllbGQuZ2V0KCdhbGxvd19hZGQnLCB0cnVlKX1cbiAgICAgICAgICAgICAgb25BZGQ9e3RoaXMuaGFuZGxlQWRkfVxuICAgICAgICAgICAgICB0eXBlcz17ZmllbGQuZ2V0KFRZUEVTX0tFWSwgbnVsbCl9XG4gICAgICAgICAgICAgIG9uQWRkVHlwZT17dHlwZSA9PiB0aGlzLmhhbmRsZUFkZFR5cGUodHlwZSwgcmVzb2x2ZUZpZWxkS2V5VHlwZShmaWVsZCkpfVxuICAgICAgICAgICAgICBoZWFkaW5nPXtgJHtpdGVtcy5zaXplfSAke2xpc3RMYWJlbH1gfVxuICAgICAgICAgICAgICBsYWJlbD17bGFiZWxTaW5ndWxhci50b0xvd2VyQ2FzZSgpfVxuICAgICAgICAgICAgICBvbkNvbGxhcHNlVG9nZ2xlPXt0aGlzLmhhbmRsZUNvbGxhcHNlQWxsVG9nZ2xlfVxuICAgICAgICAgICAgICBjb2xsYXBzZWQ9e3NlbGZDb2xsYXBzZWR9XG4gICAgICAgICAgICAgIHQ9e3R9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgeyghc2VsZkNvbGxhcHNlZCB8fCAhbWluaW1pemVDb2xsYXBzZWRJdGVtcykgJiYgKFxuICAgICAgICAgICAgICA8U29ydGFibGVMaXN0IGl0ZW1zPXtpdGVtc0FycmF5fSBrZXlzPXtrZXlzfSBvblNvcnRFbmQ9e3RoaXMub25Tb3J0RW5kfT5cbiAgICAgICAgICAgICAgICB7aXRlbXMubWFwKHRoaXMucmVuZGVySXRlbSl9XG4gICAgICAgICAgICAgIDwvU29ydGFibGVMaXN0PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvQ2xhc3NOYW1lcz5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVySW5wdXQoKSB7XG4gICAgY29uc3QgeyBmb3JJRCwgY2xhc3NOYW1lV3JhcHBlciB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IHZhbHVlIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIGlkPXtmb3JJRH1cbiAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgIG9uRm9jdXM9e3RoaXMuaGFuZGxlRm9jdXN9XG4gICAgICAgIG9uQmx1cj17dGhpcy5oYW5kbGVCbHVyfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZVdyYXBwZXJ9XG4gICAgICAvPlxuICAgICk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuZ2V0VmFsdWVUeXBlKCkgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlckxpc3RDb250cm9sKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlcklucHV0KCk7XG4gICAgfVxuICB9XG59XG4iXX0= */")],
|
|
641
|
+
index: index,
|
|
642
|
+
key: key,
|
|
643
|
+
id: key,
|
|
644
|
+
keys: keys
|
|
645
|
+
}, isVariableTypesList && ___EmotionJSX(LabelComponent, {
|
|
646
|
+
field: field,
|
|
647
|
+
isActive: false,
|
|
648
|
+
hasErrors: hasError,
|
|
649
|
+
uniqueFieldId: this.uniqueFieldId,
|
|
650
|
+
isFieldOptional: field.get('required') === false,
|
|
651
|
+
t: t
|
|
652
|
+
}), ___EmotionJSX(StyledListItemTopBar, {
|
|
653
|
+
collapsed: collapsed,
|
|
654
|
+
onCollapseToggle: partial(this.handleItemCollapseToggle, index),
|
|
655
|
+
dragHandle: DragHandle,
|
|
656
|
+
id: key,
|
|
657
|
+
allowRemove: field.get('allow_remove', true),
|
|
658
|
+
allowReorder: field.get('allow_reorder', true),
|
|
659
|
+
onRemove: partial(this.handleRemove, index),
|
|
660
|
+
"data-testid": `styled-list-item-top-bar-${key}`
|
|
661
|
+
}), ___EmotionJSX(NestedObjectLabel, {
|
|
662
|
+
collapsed: collapsed,
|
|
663
|
+
error: hasError
|
|
664
|
+
}, this.objectLabel(item)), ___EmotionJSX(ClassNames, null, ({
|
|
665
|
+
css,
|
|
666
|
+
cx
|
|
667
|
+
}) => ___EmotionJSX(ObjectControl, {
|
|
668
|
+
classNameWrapper: cx(classNameWrapper, {
|
|
669
|
+
[css`
|
|
670
|
+
${styleStrings.collapsedObjectControl};
|
|
671
|
+
`]: collapsed
|
|
672
|
+
}),
|
|
673
|
+
value: item,
|
|
674
|
+
field: field,
|
|
675
|
+
onChangeObject: this.handleChangeFor(index),
|
|
676
|
+
editorControl: editorControl,
|
|
677
|
+
resolveWidget: resolveWidget,
|
|
678
|
+
metadata: metadata,
|
|
679
|
+
forList: true,
|
|
680
|
+
onValidateObject: onValidateObject,
|
|
681
|
+
clearFieldErrors: clearFieldErrors,
|
|
682
|
+
fieldsErrors: fieldsErrors,
|
|
683
|
+
ref: this.processControlRef,
|
|
684
|
+
controlRef: controlRef,
|
|
685
|
+
validationKey: key,
|
|
686
|
+
collapsed: collapsed,
|
|
687
|
+
"data-testid": `object-control-${key}`,
|
|
688
|
+
hasError: hasError,
|
|
689
|
+
parentIds: [...parentIds, forID, key]
|
|
690
|
+
})));
|
|
691
|
+
};
|
|
665
692
|
renderErroneousTypedItem(index, item) {
|
|
666
693
|
const field = this.props.field;
|
|
667
694
|
const errorMessage = getErrorMessageForTypedFieldAndValue(field, item);
|
|
668
695
|
const key = `item-${index}`;
|
|
669
696
|
return ___EmotionJSX(SortableListItem, {
|
|
670
|
-
css: [styles.listControlItem, styles.listControlItemCollapsed, ";label:ListControl;" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpdEJRIiwiZmlsZSI6Ii4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IEltbXV0YWJsZVByb3BUeXBlcyBmcm9tICdyZWFjdC1pbW11dGFibGUtcHJvcHR5cGVzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCB7IGNzcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IExpc3QsIE1hcCwgZnJvbUpTIH0gZnJvbSAnaW1tdXRhYmxlJztcbmltcG9ydCB7IHBhcnRpYWwsIGlzRW1wdHksIHVuaXF1ZUlkIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tICd1dWlkJztcbmltcG9ydCBEZWNhcENtc1dpZGdldE9iamVjdCBmcm9tICdkZWNhcC1jbXMtd2lkZ2V0LW9iamVjdCc7XG5pbXBvcnQge1xuICBEbmRDb250ZXh0LFxuICBNb3VzZVNlbnNvcixcbiAgVG91Y2hTZW5zb3IsXG4gIGNsb3Nlc3RDZW50ZXIsXG4gIHVzZVNlbnNvcixcbiAgdXNlU2Vuc29ycyxcbn0gZnJvbSAnQGRuZC1raXQvY29yZSc7XG5pbXBvcnQgeyBTb3J0YWJsZUNvbnRleHQsIHVzZVNvcnRhYmxlIH0gZnJvbSAnQGRuZC1raXQvc29ydGFibGUnO1xuaW1wb3J0IHsgcmVzdHJpY3RUb1BhcmVudEVsZW1lbnQgfSBmcm9tICdAZG5kLWtpdC9tb2RpZmllcnMnO1xuaW1wb3J0IHsgQ1NTIH0gZnJvbSAnQGRuZC1raXQvdXRpbGl0aWVzJztcbmltcG9ydCB7XG4gIExpc3RJdGVtVG9wQmFyLFxuICBPYmplY3RXaWRnZXRUb3BCYXIsXG4gIGNvbG9ycyxcbiAgbGVuZ3RocyxcbiAgRmllbGRMYWJlbCxcbn0gZnJvbSAnZGVjYXAtY21zLXVpLWRlZmF1bHQnO1xuaW1wb3J0IHsgc3RyaW5nVGVtcGxhdGUsIHZhbGlkYXRpb25zIH0gZnJvbSAnZGVjYXAtY21zLWxpYi13aWRnZXRzJztcblxuaW1wb3J0IHtcbiAgVFlQRVNfS0VZLFxuICBnZXRUeXBlZEZpZWxkRm9yVmFsdWUsXG4gIHJlc29sdmVGaWVsZEtleVR5cGUsXG4gIGdldEVycm9yTWVzc2FnZUZvclR5cGVkRmllbGRBbmRWYWx1ZSxcbn0gZnJvbSAnLi90eXBlZExpc3RIZWxwZXJzJztcblxuY29uc3QgT2JqZWN0Q29udHJvbCA9IERlY2FwQ21zV2lkZ2V0T2JqZWN0LmNvbnRyb2xDb21wb25lbnQ7XG5cbmNvbnN0IExpc3RJdGVtID0gc3R5bGVkLmRpdigpO1xuXG5jb25zdCBTdHlsZWRMaXN0SXRlbVRvcEJhciA9IHN0eWxlZChMaXN0SXRlbVRvcEJhcilgXG4gIGJhY2tncm91bmQtY29sb3I6ICR7Y29sb3JzLnRleHRGaWVsZEJvcmRlcn07XG5gO1xuXG5jb25zdCBOZXN0ZWRPYmplY3RMYWJlbCA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6ICR7cHJvcHMgPT4gKHByb3BzLmNvbGxhcHNlZCA/ICdibG9jaycgOiAnbm9uZScpfTtcbiAgYm9yZGVyLXRvcDogMDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gKHByb3BzLmVycm9yID8gY29sb3JzLmVycm9yVGV4dCA6ICdpbmhlcml0Jyl9O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAke2NvbG9ycy50ZXh0RmllbGRCb3JkZXJ9O1xuICBwYWRkaW5nOiAxM3B4O1xuICBib3JkZXItcmFkaXVzOiAwIDAgJHtsZW5ndGhzLmJvcmRlclJhZGl1c30gJHtsZW5ndGhzLmJvcmRlclJhZGl1c307XG5gO1xuXG5jb25zdCBzdHlsZVN0cmluZ3MgPSB7XG4gIGNvbGxhcHNlZE9iamVjdENvbnRyb2w6IGBcbiAgICBkaXNwbGF5OiBub25lO1xuICBgLFxuICBvYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXI6IGBcbiAgICBwYWRkaW5nOiAke2xlbmd0aHMub2JqZWN0V2lkZ2V0VG9wQmFyQ29udGFpbmVyUGFkZGluZ307XG4gIGAsXG59O1xuXG5jb25zdCBzdHlsZXMgPSB7XG4gIGxpc3RDb250cm9sSXRlbTogY3NzYFxuICAgIG1hcmdpbi10b3A6IDE4cHg7XG5cbiAgICAmOmZpcnN0LW9mLXR5cGUge1xuICAgICAgbWFyZ2luLXRvcDogMjZweDtcbiAgICB9XG4gIGAsXG4gIGxpc3RDb250cm9sSXRlbUNvbGxhcHNlZDogY3NzYFxuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICBgLFxufTtcblxuZnVuY3Rpb24gU29ydGFibGVMaXN0KHsgaXRlbXMsIGNoaWxkcmVuLCBvblNvcnRFbmQsIGtleXMgfSkge1xuICBjb25zdCBhY3RpdmF0aW9uQ29uc3RyYWludCA9IHsgZGlzdGFuY2U6IDQgfTtcbiAgY29uc3Qgc2Vuc29ycyA9IHVzZVNlbnNvcnMoXG4gICAgdXNlU2Vuc29yKE1vdXNlU2Vuc29yLCB7IGFjdGl2YXRpb25Db25zdHJhaW50IH0pLFxuICAgIHVzZVNlbnNvcihUb3VjaFNlbnNvciwgeyBhY3RpdmF0aW9uQ29uc3RyYWludCB9KSxcbiAgKTtcblxuICBmdW5jdGlvbiBoYW5kbGVTb3J0RW5kKHsgYWN0aXZlLCBvdmVyIH0pIHtcbiAgICBvblNvcnRFbmQoe1xuICAgICAgb2xkSW5kZXg6IGtleXMuaW5kZXhPZihhY3RpdmUuaWQpLFxuICAgICAgbmV3SW5kZXg6IGtleXMuaW5kZXhPZihvdmVyLmlkKSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdj5cbiAgICAgIDxEbmRDb250ZXh0XG4gICAgICAgIG1vZGlmaWVycz17W3Jlc3RyaWN0VG9QYXJlbnRFbGVtZW50XX1cbiAgICAgICAgY29sbGlzaW9uRGV0ZWN0aW9uPXtjbG9zZXN0Q2VudGVyfVxuICAgICAgICBzZW5zb3JzPXtzZW5zb3JzfVxuICAgICAgICBvbkRyYWdFbmQ9e2hhbmRsZVNvcnRFbmR9XG4gICAgICA+XG4gICAgICAgIDxTb3J0YWJsZUNvbnRleHQgaXRlbXM9e2l0ZW1zfT57Y2hpbGRyZW59PC9Tb3J0YWJsZUNvbnRleHQ+XG4gICAgICA8L0RuZENvbnRleHQ+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFNvcnRhYmxlTGlzdEl0ZW0ocHJvcHMpIHtcbiAgY29uc3QgeyBzZXROb2RlUmVmLCB0cmFuc2Zvcm0sIHRyYW5zaXRpb24gfSA9IHVzZVNvcnRhYmxlKHtcbiAgICBpZDogcHJvcHMuaWQsXG4gIH0pO1xuXG4gIGNvbnN0IHN0eWxlID0ge1xuICAgIHRyYW5zZm9ybTogQ1NTLlRyYW5zZm9ybS50b1N0cmluZyh0cmFuc2Zvcm0pLFxuICAgIHRyYW5zaXRpb24sXG4gIH07XG5cbiAgY29uc3QgeyBjb2xsYXBzZWQgfSA9IHByb3BzO1xuXG4gIHJldHVybiAoXG4gICAgPExpc3RJdGVtXG4gICAgICBzb3J0YWJsZVxuICAgICAgcmVmPXtzZXROb2RlUmVmfVxuICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgY3NzPXtbc3R5bGVzLmxpc3RDb250cm9sSXRlbSwgY29sbGFwc2VkICYmIHN0eWxlcy5saXN0Q29udHJvbEl0ZW1Db2xsYXBzZWRdfVxuICAgID5cbiAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICA8L0xpc3RJdGVtPlxuICApO1xufVxuXG5mdW5jdGlvbiBEcmFnSGFuZGxlKHsgY2hpbGRyZW4sIGlkIH0pIHtcbiAgY29uc3QgeyBhdHRyaWJ1dGVzLCBsaXN0ZW5lcnMgfSA9IHVzZVNvcnRhYmxlKHtcbiAgICBpZCxcbiAgfSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IHsuLi5hdHRyaWJ1dGVzfSB7Li4ubGlzdGVuZXJzfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuY29uc3QgdmFsdWVUeXBlcyA9IHtcbiAgU0lOR0xFOiAnU0lOR0xFJyxcbiAgTVVMVElQTEU6ICdNVUxUSVBMRScsXG4gIE1JWEVEOiAnTUlYRUQnLFxufTtcblxuZnVuY3Rpb24gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgbGFiZWwsIGl0ZW0pIHtcbiAgY29uc3QgZGF0YSA9IHN0cmluZ1RlbXBsYXRlLmFkZEZpbGVUZW1wbGF0ZUZpZWxkcyhcbiAgICBlbnRyeS5nZXQoJ3BhdGgnKSxcbiAgICBpdGVtLnNldCgnZmllbGRzLmxhYmVsJywgbGFiZWwpLFxuICApO1xuICByZXR1cm4gc3RyaW5nVGVtcGxhdGUuY29tcGlsZVN0cmluZ1RlbXBsYXRlKHN1bW1hcnksIG51bGwsICcnLCBkYXRhKTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVJdGVtKGZpZWxkLCBpdGVtKSB7XG4gIGlmICghTWFwLmlzTWFwKGl0ZW0pKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYCcke2ZpZWxkLmdldCgnbmFtZScpfScgZmllbGQgaXRlbSB2YWx1ZSB2YWx1ZSBzaG91bGQgYmUgYSBtYXAgYnV0IGlzIGEgJyR7dHlwZW9mIGl0ZW19J2AsXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIExhYmVsQ29tcG9uZW50KHsgZmllbGQsIGlzQWN0aXZlLCBoYXNFcnJvcnMsIHVuaXF1ZUZpZWxkSWQsIGlzRmllbGRPcHRpb25hbCwgdCB9KSB7XG4gIGNvbnN0IGxhYmVsID0gYCR7ZmllbGQuZ2V0KCdsYWJlbCcsIGZpZWxkLmdldCgnbmFtZScpKX1gO1xuICByZXR1cm4gKFxuICAgIDxGaWVsZExhYmVsIGlzQWN0aXZlPXtpc0FjdGl2ZX0gaGFzRXJyb3JzPXtoYXNFcnJvcnN9IGh0bWxGb3I9e3VuaXF1ZUZpZWxkSWR9PlxuICAgICAge2xhYmVsfSB7YCR7aXNGaWVsZE9wdGlvbmFsID8gYCAoJHt0KCdlZGl0b3IuZWRpdG9yQ29udHJvbC5maWVsZC5vcHRpb25hbCcpfSlgIDogJyd9YH1cbiAgICA8L0ZpZWxkTGFiZWw+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExpc3RDb250cm9sIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgY2hpbGRSZWZzID0ge307XG5cbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICBtZXRhZGF0YTogSW1tdXRhYmxlUHJvcFR5cGVzLm1hcCxcbiAgICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvbkNoYW5nZU9iamVjdDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvblZhbGlkYXRlT2JqZWN0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHZhbGlkYXRlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHZhbHVlOiBJbW11dGFibGVQcm9wVHlwZXMubGlzdCxcbiAgICBmaWVsZDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBmb3JJRDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjb250cm9sUmVmOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBtZWRpYVBhdGhzOiBJbW11dGFibGVQcm9wVHlwZXMubWFwLmlzUmVxdWlyZWQsXG4gICAgZ2V0QXNzZXQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25PcGVuTWVkaWFMaWJyYXJ5OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uQWRkQXNzZXQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25SZW1vdmVJbnNlcnRlZE1lZGlhOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGNsYXNzTmFtZVdyYXBwZXI6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBzZXRBY3RpdmVTdHlsZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBzZXRJbmFjdGl2ZVN0eWxlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGVkaXRvckNvbnRyb2w6IFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkLFxuICAgIHJlc29sdmVXaWRnZXQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgY2xlYXJGaWVsZEVycm9yczogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBmaWVsZHNFcnJvcnM6IEltbXV0YWJsZVByb3BUeXBlcy5tYXAuaXNSZXF1aXJlZCxcbiAgICBlbnRyeTogSW1tdXRhYmxlUHJvcFR5cGVzLm1hcC5pc1JlcXVpcmVkLFxuICAgIHQ6IFByb3BUeXBlcy5mdW5jLFxuICB9O1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgdmFsdWU6IExpc3QoKSxcbiAgICBwYXJlbnRJZHM6IFtdLFxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIGNvbnN0IHsgZmllbGQsIHZhbHVlIH0gPSBwcm9wcztcbiAgICBjb25zdCBsaXN0Q29sbGFwc2VkID0gZmllbGQuZ2V0KCdjb2xsYXBzZWQnLCB0cnVlKTtcbiAgICBjb25zdCBpdGVtc0NvbGxhcHNlZCA9ICh2YWx1ZSAmJiBBcnJheSh2YWx1ZS5zaXplKS5maWxsKGxpc3RDb2xsYXBzZWQpKSB8fCBbXTtcbiAgICBjb25zdCBrZXlzID0gKHZhbHVlICYmIEFycmF5LmZyb20oeyBsZW5ndGg6IHZhbHVlLnNpemUgfSwgKCkgPT4gdXVpZCgpKSkgfHwgW107XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgbGlzdENvbGxhcHNlZCxcbiAgICAgIGl0ZW1zQ29sbGFwc2VkLFxuICAgICAgdmFsdWU6IHRoaXMudmFsdWVUb1N0cmluZyh2YWx1ZSksXG4gICAgICBrZXlzLFxuICAgIH07XG4gIH1cblxuICB2YWx1ZVRvU3RyaW5nID0gdmFsdWUgPT4ge1xuICAgIGxldCBzdHJpbmdWYWx1ZTtcbiAgICBpZiAoTGlzdC5pc0xpc3QodmFsdWUpIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBzdHJpbmdWYWx1ZSA9IHZhbHVlLmpvaW4oJywnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgRXhwZWN0ZWQgTGlzdCB2YWx1ZSB0byBiZSBhbiBhcnJheSBidXQgcmVjZWl2ZWQgJyR7dmFsdWV9JyB3aXRoIHR5cGUgb2YgJyR7dHlwZW9mIHZhbHVlfScuIFBsZWFzZSBjaGVjayB0aGUgdmFsdWUgcHJvdmlkZWQgdG8gdGhlICcke3RoaXMucHJvcHMuZmllbGQuZ2V0KFxuICAgICAgICAgICduYW1lJyxcbiAgICAgICAgKX0nIGZpZWxkYCxcbiAgICAgICk7XG4gICAgICBzdHJpbmdWYWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBzdHJpbmdWYWx1ZS5yZXBsYWNlKC8sKFteXFxzXXwkKS9nLCAnLCAkMScpO1xuICB9O1xuXG4gIGdldFZhbHVlVHlwZSA9ICgpID0+IHtcbiAgICBjb25zdCB7IGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChmaWVsZC5nZXQoJ2ZpZWxkcycpKSB7XG4gICAgICByZXR1cm4gdmFsdWVUeXBlcy5NVUxUSVBMRTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkLmdldCgnZmllbGQnKSkge1xuICAgICAgcmV0dXJuIHZhbHVlVHlwZXMuU0lOR0xFO1xuICAgIH0gZWxzZSBpZiAoZmllbGQuZ2V0KFRZUEVTX0tFWSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZVR5cGVzLk1JWEVEO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH07XG5cbiAgdW5pcXVlRmllbGRJZCA9IHVuaXF1ZUlkKGAke3RoaXMucHJvcHMuZmllbGQuZ2V0KCduYW1lJyl9LWZpZWxkLWApO1xuICAvKipcbiAgICogQWx3YXlzIHVwZGF0ZSBzbyB0aGF0IGVhY2ggbmVzdGVkIHdpZGdldCBoYXMgdGhlIG9wdGlvbiB0byB1cGRhdGUuIFRoaXMgaXNcbiAgICogcmVxdWlyZWQgYmVjYXVzZSBDb250cm9sSE9DIHByb3ZpZGVzIGEgZGVmYXVsdCBgc2hvdWxkQ29tcG9uZW50VXBkYXRlYFxuICAgKiB3aGljaCBvbmx5IHVwZGF0ZXMgaWYgdGhlIHZhbHVlIGNoYW5nZXMsIGJ1dCBldmVyeSB3aWRnZXQgbXVzdCBiZSBhbGxvd2VkXG4gICAqIHRvIG92ZXJyaWRlIHRoaXMuXG4gICAqL1xuICBzaG91bGRDb21wb25lbnRVcGRhdGUoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBoYW5kbGVDaGFuZ2UgPSBlID0+IHtcbiAgICBjb25zdCB7IG9uQ2hhbmdlIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy5zdGF0ZS52YWx1ZTtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IGUudGFyZ2V0LnZhbHVlLnRyaW0oKTtcbiAgICBjb25zdCBsaXN0VmFsdWUgPSBuZXdWYWx1ZSA/IG5ld1ZhbHVlLnNwbGl0KCcsJykgOiBbXTtcbiAgICBpZiAobmV3VmFsdWUubWF0Y2goLywkLykgJiYgb2xkVmFsdWUubWF0Y2goLywgJC8pKSB7XG4gICAgICBsaXN0VmFsdWUucG9wKCk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPSB0aGlzLnZhbHVlVG9TdHJpbmcobGlzdFZhbHVlKTtcbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHBhcnNlZFZhbHVlIH0pO1xuICAgIG9uQ2hhbmdlKExpc3QobGlzdFZhbHVlLm1hcCh2YWwgPT4gdmFsLnRyaW0oKSkpKTtcbiAgfTtcblxuICBoYW5kbGVGb2N1cyA9ICgpID0+IHtcbiAgICB0aGlzLnByb3BzLnNldEFjdGl2ZVN0eWxlKCk7XG4gIH07XG5cbiAgaGFuZGxlQmx1ciA9IGUgPT4ge1xuICAgIGNvbnN0IGxpc3RWYWx1ZSA9IGUudGFyZ2V0LnZhbHVlXG4gICAgICAuc3BsaXQoJywnKVxuICAgICAgLm1hcChlbCA9PiBlbC50cmltKCkpXG4gICAgICAuZmlsdGVyKGVsID0+IGVsKTtcbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHRoaXMudmFsdWVUb1N0cmluZyhsaXN0VmFsdWUpIH0pO1xuICAgIHRoaXMucHJvcHMuc2V0SW5hY3RpdmVTdHlsZSgpO1xuICB9O1xuXG4gIGhhbmRsZUFkZCA9IGUgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHBhcnNlZFZhbHVlID1cbiAgICAgIHRoaXMuZ2V0VmFsdWVUeXBlKCkgPT09IHZhbHVlVHlwZXMuU0lOR0xFXG4gICAgICAgID8gdGhpcy5zaW5nbGVEZWZhdWx0KClcbiAgICAgICAgOiBmcm9tSlModGhpcy5tdWx0aXBsZURlZmF1bHQoZmllbGQuZ2V0KCdmaWVsZHMnKSkpO1xuICAgIHRoaXMuYWRkSXRlbShwYXJzZWRWYWx1ZSk7XG4gIH07XG5cbiAgc2luZ2xlRGVmYXVsdCA9ICgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5maWVsZC5nZXRJbihbJ2ZpZWxkJywgJ2RlZmF1bHQnXSwgbnVsbCk7XG4gIH07XG5cbiAgbXVsdGlwbGVEZWZhdWx0ID0gZmllbGRzID0+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KGZpZWxkcyk7XG4gIH07XG5cbiAgaGFuZGxlQWRkVHlwZSA9ICh0eXBlLCB0eXBlS2V5KSA9PiB7XG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPSBmcm9tSlModGhpcy5taXhlZERlZmF1bHQodHlwZUtleSwgdHlwZSkpO1xuICAgIHRoaXMuYWRkSXRlbShwYXJzZWRWYWx1ZSk7XG4gIH07XG5cbiAgbWl4ZWREZWZhdWx0ID0gKHR5cGVLZXksIHR5cGUpID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZFR5cGUgPSB0aGlzLnByb3BzLmZpZWxkLmdldChUWVBFU19LRVkpLmZpbmQoZiA9PiBmLmdldCgnbmFtZScpID09PSB0eXBlKTtcbiAgICBjb25zdCBmaWVsZHMgPSBzZWxlY3RlZFR5cGUuZ2V0KCdmaWVsZHMnKSB8fCBbc2VsZWN0ZWRUeXBlLmdldCgnZmllbGQnKV07XG5cbiAgICByZXR1cm4gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KGZpZWxkcywgeyBbdHlwZUtleV06IHR5cGUgfSk7XG4gIH07XG5cbiAgZ2V0RmllbGRzRGVmYXVsdCA9IChmaWVsZHMsIGluaXRpYWxWYWx1ZSA9IHt9KSA9PiB7XG4gICAgcmV0dXJuIGZpZWxkcy5yZWR1Y2UoKGFjYywgaXRlbSkgPT4ge1xuICAgICAgY29uc3Qgc3ViZmllbGRzID0gaXRlbS5nZXQoJ2ZpZWxkJykgfHwgaXRlbS5nZXQoJ2ZpZWxkcycpO1xuICAgICAgY29uc3Qgb2JqZWN0ID0gaXRlbS5nZXQoJ3dpZGdldCcpID09ICdvYmplY3QnO1xuICAgICAgY29uc3QgbmFtZSA9IGl0ZW0uZ2V0KCduYW1lJyk7XG4gICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSBpdGVtLmdldCgnZGVmYXVsdCcsIG51bGwpO1xuXG4gICAgICBpZiAoTGlzdC5pc0xpc3Qoc3ViZmllbGRzKSAmJiBvYmplY3QpIHtcbiAgICAgICAgY29uc3Qgc3ViRGVmYXVsdFZhbHVlID0gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KHN1YmZpZWxkcyk7XG4gICAgICAgICFpc0VtcHR5KHN1YkRlZmF1bHRWYWx1ZSkgJiYgKGFjY1tuYW1lXSA9IHN1YkRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9XG5cbiAgICAgIGlmIChNYXAuaXNNYXAoc3ViZmllbGRzKSAmJiBvYmplY3QpIHtcbiAgICAgICAgY29uc3Qgc3ViRGVmYXVsdFZhbHVlID0gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KFtzdWJmaWVsZHNdKTtcbiAgICAgICAgIWlzRW1wdHkoc3ViRGVmYXVsdFZhbHVlKSAmJiAoYWNjW25hbWVdID0gc3ViRGVmYXVsdFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH1cblxuICAgICAgaWYgKGRlZmF1bHRWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBhY2NbbmFtZV0gPSBkZWZhdWx0VmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgaW5pdGlhbFZhbHVlKTtcbiAgfTtcblxuICBhZGRJdGVtID0gcGFyc2VkVmFsdWUgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWUsIG9uQ2hhbmdlLCBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBhZGRUb1RvcCA9IGZpZWxkLmdldCgnYWRkX3RvX3RvcCcsIGZhbHNlKTtcblxuICAgIGNvbnN0IGl0ZW1LZXkgPSB1dWlkKCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBpdGVtc0NvbGxhcHNlZDogYWRkVG9Ub3BcbiAgICAgICAgPyBbZmFsc2UsIC4uLnRoaXMuc3RhdGUuaXRlbXNDb2xsYXBzZWRdXG4gICAgICAgIDogWy4uLnRoaXMuc3RhdGUuaXRlbXNDb2xsYXBzZWQsIGZhbHNlXSxcbiAgICAgIGtleXM6IGFkZFRvVG9wID8gW2l0ZW1LZXksIC4uLnRoaXMuc3RhdGUua2V5c10gOiBbLi4udGhpcy5zdGF0ZS5rZXlzLCBpdGVtS2V5XSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGxpc3RWYWx1ZSA9IHZhbHVlIHx8IExpc3QoKTtcbiAgICBpZiAoYWRkVG9Ub3ApIHtcbiAgICAgIG9uQ2hhbmdlKGxpc3RWYWx1ZS51bnNoaWZ0KHBhcnNlZFZhbHVlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uQ2hhbmdlKGxpc3RWYWx1ZS5wdXNoKHBhcnNlZFZhbHVlKSk7XG4gICAgfVxuICB9O1xuXG4gIHByb2Nlc3NDb250cm9sUmVmID0gcmVmID0+IHtcbiAgICBpZiAoIXJlZikgcmV0dXJuO1xuICAgIGNvbnN0IHtcbiAgICAgIHByb3BzOiB7IHZhbGlkYXRpb25LZXk6IGtleSB9LFxuICAgIH0gPSByZWY7XG4gICAgdGhpcy5jaGlsZFJlZnNba2V5XSA9IHJlZjtcbiAgICB0aGlzLnByb3BzLmNvbnRyb2xSZWY/Lih0aGlzKTtcbiAgfTtcblxuICB2YWxpZGF0ZSA9ICgpID0+IHtcbiAgICAvLyBGaXJzdCB2YWxpZGF0ZSBjaGlsZCB3aWRnZXRzIGlmIHRoaXMgaXMgYSBjb21wbGV4IGxpc3RcbiAgICBjb25zdCBoYXNDaGlsZFdpZGdldHMgPSB0aGlzLmdldFZhbHVlVHlwZSgpICYmIE9iamVjdC5rZXlzKHRoaXMuY2hpbGRSZWZzKS5sZW5ndGggPiAwO1xuICAgIGlmIChoYXNDaGlsZFdpZGdldHMpIHtcbiAgICAgIE9iamVjdC52YWx1ZXModGhpcy5jaGlsZFJlZnMpLmZvckVhY2god2lkZ2V0ID0+IHtcbiAgICAgICAgd2lkZ2V0Py52YWxpZGF0ZT8uKCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9wcy52YWxpZGF0ZSgpO1xuICAgIH1cbiAgICB0aGlzLnByb3BzLm9uVmFsaWRhdGVPYmplY3QodGhpcy5wcm9wcy5mb3JJRCwgdGhpcy52YWxpZGF0ZVNpemUoKSk7XG4gIH07XG5cbiAgdmFsaWRhdGVTaXplID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgZmllbGQsIHZhbHVlLCB0IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG1pbiA9IGZpZWxkLmdldCgnbWluJyk7XG4gICAgY29uc3QgbWF4ID0gZmllbGQuZ2V0KCdtYXgnKTtcbiAgICBjb25zdCByZXF1aXJlZCA9IGZpZWxkLmdldCgncmVxdWlyZWQnLCB0cnVlKTtcblxuICAgIGlmICghcmVxdWlyZWQgJiYgIXZhbHVlPy5zaXplKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgZXJyb3IgPSB2YWxpZGF0aW9ucy52YWxpZGF0ZU1pbk1heChcbiAgICAgIHQsXG4gICAgICBmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpLFxuICAgICAgdmFsdWUsXG4gICAgICBtaW4sXG4gICAgICBtYXgsXG4gICAgKTtcblxuICAgIHJldHVybiBlcnJvciA/IFtlcnJvcl0gOiBbXTtcbiAgfTtcblxuICAvKipcbiAgICogSW4gY2FzZSB0aGUgYG9uQ2hhbmdlT2JqZWN0YCBmdW5jdGlvbiBpcyBmcm96ZW4gYnkgYSBjaGlsZCB3aWRnZXQgaW1wbGVtZW50YXRpb24sXG4gICAqIGUuZy4gd2hlbiBkZWJvdW5jZWQsIGFsd2F5cyBnZXQgdGhlIGxhdGVzdCBvYmplY3QgdmFsdWUgaW5zdGVhZCBvZiB1c2luZ1xuICAgKiBgdGhpcy5wcm9wcy52YWx1ZWAgZGlyZWN0bHkuXG4gICAqL1xuICBnZXRPYmplY3RWYWx1ZSA9IGlkeCA9PiB0aGlzLnByb3BzLnZhbHVlLmdldChpZHgpIHx8IE1hcCgpO1xuXG4gIGhhbmRsZUNoYW5nZUZvcihpbmRleCkge1xuICAgIHJldHVybiAoZiwgbmV3VmFsdWUsIG5ld01ldGFkYXRhKSA9PiB7XG4gICAgICBjb25zdCB7IHZhbHVlLCBtZXRhZGF0YSwgb25DaGFuZ2UsIGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBmaWVsZC5nZXQoJ25hbWUnKTtcbiAgICAgIGNvbnN0IGxpc3RGaWVsZE9iamVjdFdpZGdldCA9IGZpZWxkLmdldEluKFsnZmllbGQnLCAnd2lkZ2V0J10pID09PSAnb2JqZWN0JztcbiAgICAgIGNvbnN0IHdpdGhOYW1lS2V5ID1cbiAgICAgICAgdGhpcy5nZXRWYWx1ZVR5cGUoKSAhPT0gdmFsdWVUeXBlcy5TSU5HTEUgfHxcbiAgICAgICAgKHRoaXMuZ2V0VmFsdWVUeXBlKCkgPT09IHZhbHVlVHlwZXMuU0lOR0xFICYmIGxpc3RGaWVsZE9iamVjdFdpZGdldCk7XG4gICAgICBjb25zdCBuZXdPYmplY3RWYWx1ZSA9IHdpdGhOYW1lS2V5XG4gICAgICAgID8gdGhpcy5nZXRPYmplY3RWYWx1ZShpbmRleCkuc2V0KGYuZ2V0KCduYW1lJyksIG5ld1ZhbHVlKVxuICAgICAgICA6IG5ld1ZhbHVlO1xuICAgICAgY29uc3QgcGFyc2VkTWV0YWRhdGEgPSB7XG4gICAgICAgIFtjb2xsZWN0aW9uTmFtZV06IE9iamVjdC5hc3NpZ24obWV0YWRhdGEgPyBtZXRhZGF0YS50b0pTKCkgOiB7fSwgbmV3TWV0YWRhdGEgfHwge30pLFxuICAgICAgfTtcbiAgICAgIG9uQ2hhbmdlKHZhbHVlLnNldChpbmRleCwgbmV3T2JqZWN0VmFsdWUpLCBwYXJzZWRNZXRhZGF0YSk7XG4gICAgfTtcbiAgfVxuXG4gIGhhbmRsZVJlbW92ZSA9IChpbmRleCwgZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3Qge1xuICAgICAgdmFsdWUsXG4gICAgICBtZXRhZGF0YSxcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgZmllbGQsXG4gICAgICBjbGVhckZpZWxkRXJyb3JzLFxuICAgICAgb25WYWxpZGF0ZU9iamVjdCxcbiAgICAgIGZvcklELFxuICAgICAgZmllbGRzRXJyb3JzLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBmaWVsZC5nZXQoJ25hbWUnKTtcbiAgICBjb25zdCBpc1NpbmdsZUZpZWxkID0gdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5TSU5HTEU7XG5cbiAgICBjb25zdCBtZXRhZGF0YVJlbW92ZVBhdGggPSBpc1NpbmdsZUZpZWxkID8gdmFsdWUuZ2V0KGluZGV4KSA6IHZhbHVlLmdldChpbmRleCkudmFsdWVTZXEoKTtcbiAgICBjb25zdCBwYXJzZWRNZXRhZGF0YSA9XG4gICAgICBtZXRhZGF0YSAmJiAhbWV0YWRhdGEuaXNFbXB0eSgpXG4gICAgICAgID8geyBbY29sbGVjdGlvbk5hbWVdOiBtZXRhZGF0YS5yZW1vdmVJbihtZXRhZGF0YVJlbW92ZVBhdGgpIH1cbiAgICAgICAgOiBtZXRhZGF0YTtcblxuICAgIC8vIEdldCB0aGUga2V5IG9mIHRoZSBpdGVtIGJlaW5nIHJlbW92ZWRcbiAgICBjb25zdCByZW1vdmVkS2V5ID0gdGhpcy5zdGF0ZS5rZXlzW2luZGV4XTtcblxuICAgIC8vIFVwZGF0ZSBzdGF0ZSB3aGlsZSBwcmVzZXJ2aW5nIGtleXMgZm9yIHJlbWFpbmluZyBpdGVtc1xuICAgIGNvbnN0IG5ld0tleXMgPSBbLi4udGhpcy5zdGF0ZS5rZXlzXTtcbiAgICBuZXdLZXlzLnNwbGljZShpbmRleCwgMSk7XG4gICAgaXRlbXNDb2xsYXBzZWQuc3BsaWNlKGluZGV4LCAxKTtcblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXNDb2xsYXBzZWQ6IFsuLi5pdGVtc0NvbGxhcHNlZF0sXG4gICAgICBrZXlzOiBuZXdLZXlzLFxuICAgIH0pO1xuXG4gICAgLy8gQ2xlYXIgdGhlIHJlZiBmb3IgdGhlIHJlbW92ZWQgaXRlbVxuICAgIGRlbGV0ZSB0aGlzLmNoaWxkUmVmc1tyZW1vdmVkS2V5XTtcblxuICAgIGNvbnN0IG5ld1ZhbHVlID0gdmFsdWUuZGVsZXRlKGluZGV4KTtcblxuICAgIC8vIENsZWFyIGVycm9ycyBmb3IgdGhlIHJlbW92ZWQgaXRlbSBhbmQgaXRzIGNoaWxkcmVuXG4gICAgaWYgKGZpZWxkc0Vycm9ycykge1xuICAgICAgT2JqZWN0LmVudHJpZXMoZmllbGRzRXJyb3JzLnRvSlMoKSkuZm9yRWFjaCgoW2ZpZWxkSWQsIGVycm9yc10pID0+IHtcbiAgICAgICAgaWYgKGVycm9ycy5zb21lKGVyciA9PiBlcnIucGFyZW50SWRzPy5pbmNsdWRlcyhyZW1vdmVkS2V5KSkpIHtcbiAgICAgICAgICBjbGVhckZpZWxkRXJyb3JzKGZpZWxkSWQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBJZiBsaXN0IGlzIGVtcHR5LCBtYXJrIGl0IGFzIHZhbGlkXG4gICAgaWYgKG5ld1ZhbHVlLnNpemUgPT09IDApIHtcbiAgICAgIGNsZWFyRmllbGRFcnJvcnMoZm9ySUQpO1xuICAgICAgb25WYWxpZGF0ZU9iamVjdChmb3JJRCwgW10pO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSB0aGUgdmFsdWUgbGFzdCB0byBlbnN1cmUgYWxsIGVycm9yIHN0YXRlcyBhcmUgY2xlYXJlZFxuICAgIG9uQ2hhbmdlKG5ld1ZhbHVlLCBwYXJzZWRNZXRhZGF0YSk7XG4gIH07XG5cbiAgaGFuZGxlSXRlbUNvbGxhcHNlVG9nZ2xlID0gKGluZGV4LCBldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBuZXdJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLm1hcCgoY29sbGFwc2VkLCBpdGVtSW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCA9PT0gaXRlbUluZGV4KSB7XG4gICAgICAgIHJldHVybiAhY29sbGFwc2VkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbGxhcHNlZDtcbiAgICB9KTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGl0ZW1zQ29sbGFwc2VkOiBuZXdJdGVtc0NvbGxhcHNlZCxcbiAgICB9KTtcbiAgfTtcblxuICBoYW5kbGVDb2xsYXBzZUFsbFRvZ2dsZSA9IGUgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IHZhbHVlLCBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkLCBsaXN0Q29sbGFwc2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IG1pbmltaXplQ29sbGFwc2VkSXRlbXMgPSBmaWVsZC5nZXQoJ21pbmltaXplX2NvbGxhcHNlZCcsIGZhbHNlKTtcbiAgICBjb25zdCBsaXN0Q29sbGFwc2VkQnlEZWZhdWx0ID0gZmllbGQuZ2V0KCdjb2xsYXBzZWQnLCB0cnVlKTtcbiAgICBjb25zdCBhbGxJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLmV2ZXJ5KHZhbCA9PiB2YWwgPT09IHRydWUpO1xuXG4gICAgaWYgKG1pbmltaXplQ29sbGFwc2VkSXRlbXMpIHtcbiAgICAgIGxldCB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZDtcbiAgICAgIC8vIE9ubHkgYWxsb3cgY29sbGFwc2luZyBhbGwgaXRlbXMgaW4gdGhpcyBtb2RlIGJ1dCBub3Qgb3BlbmluZyBhbGwgYXQgb25jZVxuICAgICAgaWYgKCFsaXN0Q29sbGFwc2VkIHx8ICFsaXN0Q29sbGFwc2VkQnlEZWZhdWx0KSB7XG4gICAgICAgIHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCA9IEFycmF5KHZhbHVlLnNpemUpLmZpbGwoIWxpc3RDb2xsYXBzZWQpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGxpc3RDb2xsYXBzZWQ6ICFsaXN0Q29sbGFwc2VkLCBpdGVtc0NvbGxhcHNlZDogdXBkYXRlZEl0ZW1zQ29sbGFwc2VkIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgaXRlbXNDb2xsYXBzZWQ6IEFycmF5KHZhbHVlLnNpemUpLmZpbGwoIWFsbEl0ZW1zQ29sbGFwc2VkKSB9KTtcbiAgICB9XG4gIH07XG5cbiAgb2JqZWN0TGFiZWwoaXRlbSkge1xuICAgIGNvbnN0IHsgZmllbGQsIGVudHJ5IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHZhbHVlVHlwZSA9IHRoaXMuZ2V0VmFsdWVUeXBlKCk7XG4gICAgc3dpdGNoICh2YWx1ZVR5cGUpIHtcbiAgICAgIGNhc2UgdmFsdWVUeXBlcy5NSVhFRDoge1xuICAgICAgICBpZiAoIXZhbGlkYXRlSXRlbShmaWVsZCwgaXRlbSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXRlbVR5cGUgPSBnZXRUeXBlZEZpZWxkRm9yVmFsdWUoZmllbGQsIGl0ZW0pO1xuICAgICAgICBjb25zdCBsYWJlbCA9IGl0ZW1UeXBlLmdldCgnbGFiZWwnLCBpdGVtVHlwZS5nZXQoJ25hbWUnKSk7XG4gICAgICAgIC8vIGVhY2ggdHlwZSBjYW4gaGF2ZSBpdHMgb3duIHN1bW1hcnksIGJ1dCBkZWZhdWx0IHRvIHRoZSBsaXN0IHN1bW1hcnkgaWYgZXhpc3RzXG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBpdGVtVHlwZS5nZXQoJ3N1bW1hcnknLCBmaWVsZC5nZXQoJ3N1bW1hcnknKSk7XG4gICAgICAgIGNvbnN0IGxhYmVsUmV0dXJuID0gc3VtbWFyeSA/IGhhbmRsZVN1bW1hcnkoc3VtbWFyeSwgZW50cnksIGxhYmVsLCBpdGVtKSA6IGxhYmVsO1xuICAgICAgICByZXR1cm4gbGFiZWxSZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlIHZhbHVlVHlwZXMuU0lOR0xFOiB7XG4gICAgICAgIGNvbnN0IHNpbmdsZUZpZWxkID0gZmllbGQuZ2V0KCdmaWVsZCcpO1xuICAgICAgICBjb25zdCBsYWJlbCA9IHNpbmdsZUZpZWxkLmdldCgnbGFiZWwnLCBzaW5nbGVGaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBmaWVsZC5nZXQoJ3N1bW1hcnknKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGZyb21KUyh7IFtzaW5nbGVGaWVsZC5nZXQoJ25hbWUnKV06IGl0ZW0gfSk7XG4gICAgICAgIGNvbnN0IGxhYmVsUmV0dXJuID0gc3VtbWFyeSA/IGhhbmRsZVN1bW1hcnkoc3VtbWFyeSwgZW50cnksIGxhYmVsLCBkYXRhKSA6IGxhYmVsO1xuICAgICAgICByZXR1cm4gbGFiZWxSZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlIHZhbHVlVHlwZXMuTVVMVElQTEU6IHtcbiAgICAgICAgaWYgKCF2YWxpZGF0ZUl0ZW0oZmllbGQsIGl0ZW0pKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG11bHRpRmllbGRzID0gZmllbGQuZ2V0KCdmaWVsZHMnKTtcbiAgICAgICAgY29uc3QgbGFiZWxGaWVsZCA9IG11bHRpRmllbGRzICYmIG11bHRpRmllbGRzLmZpcnN0KCk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gaXRlbS5nZXQobGFiZWxGaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBmaWVsZC5nZXQoJ3N1bW1hcnknKTtcbiAgICAgICAgY29uc3QgbGFiZWxSZXR1cm4gPSBzdW1tYXJ5ID8gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgdmFsdWUsIGl0ZW0pIDogdmFsdWU7XG4gICAgICAgIHJldHVybiAobGFiZWxSZXR1cm4gfHwgYE5vICR7bGFiZWxGaWVsZC5nZXQoJ25hbWUnKX1gKS50b1N0cmluZygpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBvblNvcnRFbmQgPSAoeyBvbGRJbmRleCwgbmV3SW5kZXggfSkgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCwga2V5cyB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIC8vIFVwZGF0ZSB2YWx1ZVxuICAgIGNvbnN0IGl0ZW0gPSB2YWx1ZS5nZXQob2xkSW5kZXgpO1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gdmFsdWUuZGVsZXRlKG9sZEluZGV4KS5pbnNlcnQobmV3SW5kZXgsIGl0ZW0pO1xuICAgIHRoaXMucHJvcHMub25DaGFuZ2UobmV3VmFsdWUpO1xuXG4gICAgLy8gVXBkYXRlIGNvbGxhcHNpbmdcbiAgICBjb25zdCBjb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZFtvbGRJbmRleF07XG4gICAgaXRlbXNDb2xsYXBzZWQuc3BsaWNlKG9sZEluZGV4LCAxKTtcbiAgICBjb25zdCB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgPSBbLi4uaXRlbXNDb2xsYXBzZWRdO1xuICAgIHVwZGF0ZWRJdGVtc0NvbGxhcHNlZC5zcGxpY2UobmV3SW5kZXgsIDAsIGNvbGxhcHNlZCk7XG5cbiAgICAvLyBNb3ZlIGtleXMgdG8gbWFpbnRhaW4gcmVsYXRpb25zaGlwc1xuICAgIGNvbnN0IG1vdmVkS2V5ID0ga2V5c1tvbGRJbmRleF07XG4gICAgY29uc3QgdXBkYXRlZEtleXMgPSBbLi4ua2V5c107XG4gICAgdXBkYXRlZEtleXMuc3BsaWNlKG9sZEluZGV4LCAxKTtcbiAgICB1cGRhdGVkS2V5cy5zcGxpY2UobmV3SW5kZXgsIDAsIG1vdmVkS2V5KTtcblxuICAgIHRoaXMuc2V0U3RhdGUoeyBpdGVtc0NvbGxhcHNlZDogdXBkYXRlZEl0ZW1zQ29sbGFwc2VkLCBrZXlzOiB1cGRhdGVkS2V5cyB9KTtcbiAgfTtcblxuICBoYXNFcnJvciA9IGluZGV4ID0+IHtcbiAgICBjb25zdCB7IGZpZWxkc0Vycm9ycyB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoZmllbGRzRXJyb3JzICYmIGZpZWxkc0Vycm9ycy5zaXplID4gMCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZmllbGRzRXJyb3JzLnRvSlMoKSkuc29tZShhcnIgPT5cbiAgICAgICAgYXJyLnNvbWUoZXJyID0+IGVyci5wYXJlbnRJZHMgJiYgZXJyLnBhcmVudElkcy5pbmNsdWRlcyh0aGlzLnN0YXRlLmtleXNbaW5kZXhdKSksXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICBmb2N1cyhwYXRoKSB7XG4gICAgY29uc3QgW2luZGV4LCAuLi5yZW1haW5pbmdQYXRoXSA9IHBhdGguc3BsaXQoJy4nKTtcblxuICAgIGlmICh0aGlzLnN0YXRlLmxpc3RDb2xsYXBzZWQgfHwgdGhpcy5zdGF0ZS5pdGVtc0NvbGxhcHNlZFtpbmRleF0pIHtcbiAgICAgIGNvbnN0IG5ld0l0ZW1zQ29sbGFwc2VkID0gWy4uLnRoaXMuc3RhdGUuaXRlbXNDb2xsYXBzZWRdO1xuICAgICAgbmV3SXRlbXNDb2xsYXBzZWRbaW5kZXhdID0gZmFsc2U7XG4gICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICB7XG4gICAgICAgICAgbGlzdENvbGxhcHNlZDogZmFsc2UsXG4gICAgICAgICAgaXRlbXNDb2xsYXBzZWQ6IG5ld0l0ZW1zQ29sbGFwc2VkLFxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5zdGF0ZS5rZXlzW2luZGV4XTtcbiAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jaGlsZFJlZnNba2V5XTtcbiAgICAgICAgICBpZiAoY29udHJvbD8uZm9jdXMpIHtcbiAgICAgICAgICAgIGNvbnRyb2wuZm9jdXMocmVtYWluaW5nUGF0aC5qb2luKCcuJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuc3RhdGUua2V5c1tpbmRleF07XG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jaGlsZFJlZnNba2V5XTtcbiAgICAgIGlmIChjb250cm9sPy5mb2N1cykge1xuICAgICAgICBjb250cm9sLmZvY3VzKHJlbWFpbmluZ1BhdGguam9pbignLicpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZGlzcGxheS1uYW1lXG4gIHJlbmRlckl0ZW0gPSAoaXRlbSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjbGFzc05hbWVXcmFwcGVyLFxuICAgICAgZWRpdG9yQ29udHJvbCxcbiAgICAgIG9uVmFsaWRhdGVPYmplY3QsXG4gICAgICBtZXRhZGF0YSxcbiAgICAgIGNsZWFyRmllbGRFcnJvcnMsXG4gICAgICBmaWVsZHNFcnJvcnMsXG4gICAgICBjb250cm9sUmVmLFxuICAgICAgcmVzb2x2ZVdpZGdldCxcbiAgICAgIHBhcmVudElkcyxcbiAgICAgIGZvcklELFxuICAgICAgdCxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQsIGtleXMgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgY29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWRbaW5kZXhdO1xuICAgIGNvbnN0IGtleSA9IGtleXNbaW5kZXhdO1xuICAgIGxldCBmaWVsZCA9IHRoaXMucHJvcHMuZmllbGQ7XG4gICAgY29uc3QgaGFzRXJyb3IgPSB0aGlzLmhhc0Vycm9yKGluZGV4KTtcbiAgICBjb25zdCBpc1ZhcmlhYmxlVHlwZXNMaXN0ID0gdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5NSVhFRDtcbiAgICBpZiAoaXNWYXJpYWJsZVR5cGVzTGlzdCkge1xuICAgICAgZmllbGQgPSBnZXRUeXBlZEZpZWxkRm9yVmFsdWUoZmllbGQsIGl0ZW0pO1xuICAgICAgaWYgKCFmaWVsZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJFcnJvbmVvdXNUeXBlZEl0ZW0oaW5kZXgsIGl0ZW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8U29ydGFibGVMaXN0SXRlbVxuICAgICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBjb2xsYXBzZWQgJiYgc3R5bGVzLmxpc3RDb250cm9sSXRlbUNvbGxhcHNlZF19XG4gICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIGlkPXtrZXl9XG4gICAgICAgIGtleXM9e2tleXN9XG4gICAgICA+XG4gICAgICAgIHtpc1ZhcmlhYmxlVHlwZXNMaXN0ICYmIChcbiAgICAgICAgICA8TGFiZWxDb21wb25lbnRcbiAgICAgICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgICAgIGlzQWN0aXZlPXtmYWxzZX1cbiAgICAgICAgICAgIGhhc0Vycm9ycz17aGFzRXJyb3J9XG4gICAgICAgICAgICB1bmlxdWVGaWVsZElkPXt0aGlzLnVuaXF1ZUZpZWxkSWR9XG4gICAgICAgICAgICBpc0ZpZWxkT3B0aW9uYWw9e2ZpZWxkLmdldCgncmVxdWlyZWQnKSA9PT0gZmFsc2V9XG4gICAgICAgICAgICB0PXt0fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIDxTdHlsZWRMaXN0SXRlbVRvcEJhclxuICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICAgIG9uQ29sbGFwc2VUb2dnbGU9e3BhcnRpYWwodGhpcy5oYW5kbGVJdGVtQ29sbGFwc2VUb2dnbGUsIGluZGV4KX1cbiAgICAgICAgICBkcmFnSGFuZGxlPXtEcmFnSGFuZGxlfVxuICAgICAgICAgIGlkPXtrZXl9XG4gICAgICAgICAgb25SZW1vdmU9e3BhcnRpYWwodGhpcy5oYW5kbGVSZW1vdmUsIGluZGV4KX1cbiAgICAgICAgICBkYXRhLXRlc3RpZD17YHN0eWxlZC1saXN0LWl0ZW0tdG9wLWJhci0ke2tleX1gfVxuICAgICAgICAvPlxuICAgICAgICA8TmVzdGVkT2JqZWN0TGFiZWwgY29sbGFwc2VkPXtjb2xsYXBzZWR9IGVycm9yPXtoYXNFcnJvcn0+XG4gICAgICAgICAge3RoaXMub2JqZWN0TGFiZWwoaXRlbSl9XG4gICAgICAgIDwvTmVzdGVkT2JqZWN0TGFiZWw+XG4gICAgICAgIDxDbGFzc05hbWVzPlxuICAgICAgICAgIHsoeyBjc3MsIGN4IH0pID0+IChcbiAgICAgICAgICAgIDxPYmplY3RDb250cm9sXG4gICAgICAgICAgICAgIGNsYXNzTmFtZVdyYXBwZXI9e2N4KGNsYXNzTmFtZVdyYXBwZXIsIHtcbiAgICAgICAgICAgICAgICBbY3NzYFxuICAgICAgICAgICAgICAgICAgJHtzdHlsZVN0cmluZ3MuY29sbGFwc2VkT2JqZWN0Q29udHJvbH07XG4gICAgICAgICAgICAgICAgYF06IGNvbGxhcHNlZCxcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIHZhbHVlPXtpdGVtfVxuICAgICAgICAgICAgICBmaWVsZD17ZmllbGR9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlT2JqZWN0PXt0aGlzLmhhbmRsZUNoYW5nZUZvcihpbmRleCl9XG4gICAgICAgICAgICAgIGVkaXRvckNvbnRyb2w9e2VkaXRvckNvbnRyb2x9XG4gICAgICAgICAgICAgIHJlc29sdmVXaWRnZXQ9e3Jlc29sdmVXaWRnZXR9XG4gICAgICAgICAgICAgIG1ldGFkYXRhPXttZXRhZGF0YX1cbiAgICAgICAgICAgICAgZm9yTGlzdFxuICAgICAgICAgICAgICBvblZhbGlkYXRlT2JqZWN0PXtvblZhbGlkYXRlT2JqZWN0fVxuICAgICAgICAgICAgICBjbGVhckZpZWxkRXJyb3JzPXtjbGVhckZpZWxkRXJyb3JzfVxuICAgICAgICAgICAgICBmaWVsZHNFcnJvcnM9e2ZpZWxkc0Vycm9yc31cbiAgICAgICAgICAgICAgcmVmPXt0aGlzLnByb2Nlc3NDb250cm9sUmVmfVxuICAgICAgICAgICAgICBjb250cm9sUmVmPXtjb250cm9sUmVmfVxuICAgICAgICAgICAgICB2YWxpZGF0aW9uS2V5PXtrZXl9XG4gICAgICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICAgICAgICBkYXRhLXRlc3RpZD17YG9iamVjdC1jb250cm9sLSR7a2V5fWB9XG4gICAgICAgICAgICAgIGhhc0Vycm9yPXtoYXNFcnJvcn1cbiAgICAgICAgICAgICAgcGFyZW50SWRzPXtbLi4ucGFyZW50SWRzLCBmb3JJRCwga2V5XX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9DbGFzc05hbWVzPlxuICAgICAgPC9Tb3J0YWJsZUxpc3RJdGVtPlxuICAgICk7XG4gIH07XG5cbiAgcmVuZGVyRXJyb25lb3VzVHlwZWRJdGVtKGluZGV4LCBpdGVtKSB7XG4gICAgY29uc3QgZmllbGQgPSB0aGlzLnByb3BzLmZpZWxkO1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZUZvclR5cGVkRmllbGRBbmRWYWx1ZShmaWVsZCwgaXRlbSk7XG4gICAgY29uc3Qga2V5ID0gYGl0ZW0tJHtpbmRleH1gO1xuICAgIHJldHVybiAoXG4gICAgICA8U29ydGFibGVMaXN0SXRlbVxuICAgICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBzdHlsZXMubGlzdENvbnRyb2xJdGVtQ29sbGFwc2VkXX1cbiAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICBrZXk9e2tleX1cbiAgICAgID5cbiAgICAgICAgPFN0eWxlZExpc3RJdGVtVG9wQmFyXG4gICAgICAgICAgb25Db2xsYXBzZVRvZ2dsZT17bnVsbH1cbiAgICAgICAgICBvblJlbW92ZT17cGFydGlhbCh0aGlzLmhhbmRsZVJlbW92ZSwgaW5kZXgsIGtleSl9XG4gICAgICAgICAgZHJhZ0hhbmRsZT17RHJhZ0hhbmRsZX1cbiAgICAgICAgICBpZD17a2V5fVxuICAgICAgICAvPlxuICAgICAgICA8TmVzdGVkT2JqZWN0TGFiZWwgY29sbGFwc2VkPXt0cnVlfSBlcnJvcj17dHJ1ZX0+XG4gICAgICAgICAge2Vycm9yTWVzc2FnZX1cbiAgICAgICAgPC9OZXN0ZWRPYmplY3RMYWJlbD5cbiAgICAgIDwvU29ydGFibGVMaXN0SXRlbT5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyTGlzdENvbnRyb2woKSB7XG4gICAgY29uc3QgeyB2YWx1ZSwgZm9ySUQsIGZpZWxkLCBjbGFzc05hbWVXcmFwcGVyLCB0IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQsIGxpc3RDb2xsYXBzZWQsIGtleXMgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgaXRlbXMgPSB2YWx1ZSB8fCBMaXN0KCk7XG4gICAgY29uc3QgbGFiZWwgPSBmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpO1xuICAgIGNvbnN0IGxhYmVsU2luZ3VsYXIgPSBmaWVsZC5nZXQoJ2xhYmVsX3Npbmd1bGFyJykgfHwgZmllbGQuZ2V0KCdsYWJlbCcsIGZpZWxkLmdldCgnbmFtZScpKTtcbiAgICBjb25zdCBsaXN0TGFiZWwgPSBpdGVtcy5zaXplID09PSAxID8gbGFiZWxTaW5ndWxhci50b0xvd2VyQ2FzZSgpIDogbGFiZWwudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBtaW5pbWl6ZUNvbGxhcHNlZEl0ZW1zID0gZmllbGQuZ2V0KCdtaW5pbWl6ZV9jb2xsYXBzZWQnLCBmYWxzZSk7XG4gICAgY29uc3QgYWxsSXRlbXNDb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZC5ldmVyeSh2YWwgPT4gdmFsID09PSB0cnVlKTtcbiAgICBjb25zdCBzZWxmQ29sbGFwc2VkID0gYWxsSXRlbXNDb2xsYXBzZWQgJiYgKGxpc3RDb2xsYXBzZWQgfHwgIW1pbmltaXplQ29sbGFwc2VkSXRlbXMpO1xuXG4gICAgY29uc3QgaXRlbXNBcnJheSA9IGtleXMubWFwKGtleSA9PiAoeyBpZDoga2V5IH0pKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8Q2xhc3NOYW1lcz5cbiAgICAgICAgeyh7IGN4LCBjc3MgfSkgPT4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGlkPXtmb3JJRH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goXG4gICAgICAgICAgICAgIGNsYXNzTmFtZVdyYXBwZXIsXG4gICAgICAgICAgICAgIGNzc2BcbiAgICAgICAgICAgICAgICAke3N0eWxlU3RyaW5ncy5vYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXJ9XG4gICAgICAgICAgICAgIGAsXG4gICAgICAgICAgICApfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxPYmplY3RXaWRnZXRUb3BCYXJcbiAgICAgICAgICAgICAgYWxsb3dBZGQ9e2ZpZWxkLmdldCgnYWxsb3dfYWRkJywgdHJ1ZSl9XG4gICAgICAgICAgICAgIG9uQWRkPXt0aGlzLmhhbmRsZUFkZH1cbiAgICAgICAgICAgICAgdHlwZXM9e2ZpZWxkLmdldChUWVBFU19LRVksIG51bGwpfVxuICAgICAgICAgICAgICBvbkFkZFR5cGU9e3R5cGUgPT4gdGhpcy5oYW5kbGVBZGRUeXBlKHR5cGUsIHJlc29sdmVGaWVsZEtleVR5cGUoZmllbGQpKX1cbiAgICAgICAgICAgICAgaGVhZGluZz17YCR7aXRlbXMuc2l6ZX0gJHtsaXN0TGFiZWx9YH1cbiAgICAgICAgICAgICAgbGFiZWw9e2xhYmVsU2luZ3VsYXIudG9Mb3dlckNhc2UoKX1cbiAgICAgICAgICAgICAgb25Db2xsYXBzZVRvZ2dsZT17dGhpcy5oYW5kbGVDb2xsYXBzZUFsbFRvZ2dsZX1cbiAgICAgICAgICAgICAgY29sbGFwc2VkPXtzZWxmQ29sbGFwc2VkfVxuICAgICAgICAgICAgICB0PXt0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHsoIXNlbGZDb2xsYXBzZWQgfHwgIW1pbmltaXplQ29sbGFwc2VkSXRlbXMpICYmIChcbiAgICAgICAgICAgICAgPFNvcnRhYmxlTGlzdCBpdGVtcz17aXRlbXNBcnJheX0ga2V5cz17a2V5c30gb25Tb3J0RW5kPXt0aGlzLm9uU29ydEVuZH0+XG4gICAgICAgICAgICAgICAge2l0ZW1zLm1hcCh0aGlzLnJlbmRlckl0ZW0pfVxuICAgICAgICAgICAgICA8L1NvcnRhYmxlTGlzdD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L0NsYXNzTmFtZXM+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlcklucHV0KCkge1xuICAgIGNvbnN0IHsgZm9ySUQsIGNsYXNzTmFtZVdyYXBwZXIgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIHJldHVybiAoXG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBpZD17Zm9ySUR9XG4gICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICBvbkZvY3VzPXt0aGlzLmhhbmRsZUZvY3VzfVxuICAgICAgICBvbkJsdXI9e3RoaXMuaGFuZGxlQmx1cn1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVXcmFwcGVyfVxuICAgICAgLz5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmdldFZhbHVlVHlwZSgpICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJMaXN0Q29udHJvbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJJbnB1dCgpO1xuICAgIH1cbiAgfVxufVxuIl19 */")],
|
|
697
|
+
css: [styles.listControlItem, styles.listControlItemCollapsed, ";label:ListControl;" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEwdEJRIiwiZmlsZSI6Ii4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IEltbXV0YWJsZVByb3BUeXBlcyBmcm9tICdyZWFjdC1pbW11dGFibGUtcHJvcHR5cGVzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCB7IGNzcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IExpc3QsIE1hcCwgZnJvbUpTIH0gZnJvbSAnaW1tdXRhYmxlJztcbmltcG9ydCBwYXJ0aWFsIGZyb20gJ2xvZGFzaC9wYXJ0aWFsJztcbmltcG9ydCBpc0VtcHR5IGZyb20gJ2xvZGFzaC9pc0VtcHR5JztcbmltcG9ydCB1bmlxdWVJZCBmcm9tICdsb2Rhc2gvdW5pcXVlSWQnO1xuaW1wb3J0IHsgdjQgYXMgdXVpZCB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IERlY2FwQ21zV2lkZ2V0T2JqZWN0IGZyb20gJ2RlY2FwLWNtcy13aWRnZXQtb2JqZWN0JztcbmltcG9ydCB7XG4gIERuZENvbnRleHQsXG4gIE1vdXNlU2Vuc29yLFxuICBUb3VjaFNlbnNvcixcbiAgY2xvc2VzdENlbnRlcixcbiAgdXNlU2Vuc29yLFxuICB1c2VTZW5zb3JzLFxufSBmcm9tICdAZG5kLWtpdC9jb3JlJztcbmltcG9ydCB7IFNvcnRhYmxlQ29udGV4dCwgdXNlU29ydGFibGUgfSBmcm9tICdAZG5kLWtpdC9zb3J0YWJsZSc7XG5pbXBvcnQgeyByZXN0cmljdFRvUGFyZW50RWxlbWVudCB9IGZyb20gJ0BkbmQta2l0L21vZGlmaWVycyc7XG5pbXBvcnQgeyBDU1MgfSBmcm9tICdAZG5kLWtpdC91dGlsaXRpZXMnO1xuaW1wb3J0IHtcbiAgTGlzdEl0ZW1Ub3BCYXIsXG4gIE9iamVjdFdpZGdldFRvcEJhcixcbiAgY29sb3JzLFxuICBsZW5ndGhzLFxuICBGaWVsZExhYmVsLFxufSBmcm9tICdkZWNhcC1jbXMtdWktZGVmYXVsdCc7XG5pbXBvcnQgeyBzdHJpbmdUZW1wbGF0ZSwgdmFsaWRhdGlvbnMgfSBmcm9tICdkZWNhcC1jbXMtbGliLXdpZGdldHMnO1xuXG5pbXBvcnQge1xuICBUWVBFU19LRVksXG4gIGdldFR5cGVkRmllbGRGb3JWYWx1ZSxcbiAgcmVzb2x2ZUZpZWxkS2V5VHlwZSxcbiAgZ2V0RXJyb3JNZXNzYWdlRm9yVHlwZWRGaWVsZEFuZFZhbHVlLFxufSBmcm9tICcuL3R5cGVkTGlzdEhlbHBlcnMnO1xuXG5jb25zdCBPYmplY3RDb250cm9sID0gRGVjYXBDbXNXaWRnZXRPYmplY3QuY29udHJvbENvbXBvbmVudDtcblxuY29uc3QgTGlzdEl0ZW0gPSBzdHlsZWQuZGl2KCk7XG5cbmNvbnN0IFN0eWxlZExpc3RJdGVtVG9wQmFyID0gc3R5bGVkKExpc3RJdGVtVG9wQmFyKWBcbiAgYmFja2dyb3VuZC1jb2xvcjogJHtjb2xvcnMudGV4dEZpZWxkQm9yZGVyfTtcbmA7XG5cbmNvbnN0IE5lc3RlZE9iamVjdExhYmVsID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogJHtwcm9wcyA9PiAocHJvcHMuY29sbGFwc2VkID8gJ2Jsb2NrJyA6ICdub25lJyl9O1xuICBib3JkZXItdG9wOiAwO1xuICBjb2xvcjogJHtwcm9wcyA9PiAocHJvcHMuZXJyb3IgPyBjb2xvcnMuZXJyb3JUZXh0IDogJ2luaGVyaXQnKX07XG4gIGJhY2tncm91bmQtY29sb3I6ICR7Y29sb3JzLnRleHRGaWVsZEJvcmRlcn07XG4gIHBhZGRpbmc6IDEzcHg7XG4gIGJvcmRlci1yYWRpdXM6IDAgMCAke2xlbmd0aHMuYm9yZGVyUmFkaXVzfSAke2xlbmd0aHMuYm9yZGVyUmFkaXVzfTtcbmA7XG5cbmNvbnN0IHN0eWxlU3RyaW5ncyA9IHtcbiAgY29sbGFwc2VkT2JqZWN0Q29udHJvbDogYFxuICAgIGRpc3BsYXk6IG5vbmU7XG4gIGAsXG4gIG9iamVjdFdpZGdldFRvcEJhckNvbnRhaW5lcjogYFxuICAgIHBhZGRpbmc6ICR7bGVuZ3Rocy5vYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXJQYWRkaW5nfTtcbiAgYCxcbn07XG5cbmNvbnN0IHN0eWxlcyA9IHtcbiAgbGlzdENvbnRyb2xJdGVtOiBjc3NgXG4gICAgbWFyZ2luLXRvcDogMThweDtcblxuICAgICY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgICBtYXJnaW4tdG9wOiAyNnB4O1xuICAgIH1cbiAgYCxcbiAgbGlzdENvbnRyb2xJdGVtQ29sbGFwc2VkOiBjc3NgXG4gICAgcGFkZGluZy1ib3R0b206IDA7XG4gIGAsXG59O1xuXG5mdW5jdGlvbiBTb3J0YWJsZUxpc3QoeyBpdGVtcywgY2hpbGRyZW4sIG9uU29ydEVuZCwga2V5cyB9KSB7XG4gIGNvbnN0IGFjdGl2YXRpb25Db25zdHJhaW50ID0geyBkaXN0YW5jZTogNCB9O1xuICBjb25zdCBzZW5zb3JzID0gdXNlU2Vuc29ycyhcbiAgICB1c2VTZW5zb3IoTW91c2VTZW5zb3IsIHsgYWN0aXZhdGlvbkNvbnN0cmFpbnQgfSksXG4gICAgdXNlU2Vuc29yKFRvdWNoU2Vuc29yLCB7IGFjdGl2YXRpb25Db25zdHJhaW50IH0pLFxuICApO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZVNvcnRFbmQoeyBhY3RpdmUsIG92ZXIgfSkge1xuICAgIG9uU29ydEVuZCh7XG4gICAgICBvbGRJbmRleDoga2V5cy5pbmRleE9mKGFjdGl2ZS5pZCksXG4gICAgICBuZXdJbmRleDoga2V5cy5pbmRleE9mKG92ZXIuaWQpLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2PlxuICAgICAgPERuZENvbnRleHRcbiAgICAgICAgbW9kaWZpZXJzPXtbcmVzdHJpY3RUb1BhcmVudEVsZW1lbnRdfVxuICAgICAgICBjb2xsaXNpb25EZXRlY3Rpb249e2Nsb3Nlc3RDZW50ZXJ9XG4gICAgICAgIHNlbnNvcnM9e3NlbnNvcnN9XG4gICAgICAgIG9uRHJhZ0VuZD17aGFuZGxlU29ydEVuZH1cbiAgICAgID5cbiAgICAgICAgPFNvcnRhYmxlQ29udGV4dCBpdGVtcz17aXRlbXN9PntjaGlsZHJlbn08L1NvcnRhYmxlQ29udGV4dD5cbiAgICAgIDwvRG5kQ29udGV4dD5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gU29ydGFibGVMaXN0SXRlbShwcm9wcykge1xuICBjb25zdCB7IHNldE5vZGVSZWYsIHRyYW5zZm9ybSwgdHJhbnNpdGlvbiB9ID0gdXNlU29ydGFibGUoe1xuICAgIGlkOiBwcm9wcy5pZCxcbiAgfSk7XG5cbiAgY29uc3Qgc3R5bGUgPSB7XG4gICAgdHJhbnNmb3JtOiBDU1MuVHJhbnNmb3JtLnRvU3RyaW5nKHRyYW5zZm9ybSksXG4gICAgdHJhbnNpdGlvbixcbiAgfTtcblxuICBjb25zdCB7IGNvbGxhcHNlZCB9ID0gcHJvcHM7XG5cbiAgcmV0dXJuIChcbiAgICA8TGlzdEl0ZW1cbiAgICAgIHNvcnRhYmxlXG4gICAgICByZWY9e3NldE5vZGVSZWZ9XG4gICAgICBzdHlsZT17c3R5bGV9XG4gICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBjb2xsYXBzZWQgJiYgc3R5bGVzLmxpc3RDb250cm9sSXRlbUNvbGxhcHNlZF19XG4gICAgPlxuICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgIDwvTGlzdEl0ZW0+XG4gICk7XG59XG5cbmZ1bmN0aW9uIERyYWdIYW5kbGUoeyBjaGlsZHJlbiwgaWQgfSkge1xuICBjb25zdCB7IGF0dHJpYnV0ZXMsIGxpc3RlbmVycyB9ID0gdXNlU29ydGFibGUoe1xuICAgIGlkLFxuICB9KTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgey4uLmF0dHJpYnV0ZXN9IHsuLi5saXN0ZW5lcnN9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5jb25zdCB2YWx1ZVR5cGVzID0ge1xuICBTSU5HTEU6ICdTSU5HTEUnLFxuICBNVUxUSVBMRTogJ01VTFRJUExFJyxcbiAgTUlYRUQ6ICdNSVhFRCcsXG59O1xuXG5mdW5jdGlvbiBoYW5kbGVTdW1tYXJ5KHN1bW1hcnksIGVudHJ5LCBsYWJlbCwgaXRlbSkge1xuICBjb25zdCBkYXRhID0gc3RyaW5nVGVtcGxhdGUuYWRkRmlsZVRlbXBsYXRlRmllbGRzKFxuICAgIGVudHJ5LmdldCgncGF0aCcpLFxuICAgIGl0ZW0uc2V0KCdmaWVsZHMubGFiZWwnLCBsYWJlbCksXG4gICk7XG4gIHJldHVybiBzdHJpbmdUZW1wbGF0ZS5jb21waWxlU3RyaW5nVGVtcGxhdGUoc3VtbWFyeSwgbnVsbCwgJycsIGRhdGEpO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUl0ZW0oZmllbGQsIGl0ZW0pIHtcbiAgaWYgKCFNYXAuaXNNYXAoaXRlbSkpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgJyR7ZmllbGQuZ2V0KCduYW1lJyl9JyBmaWVsZCBpdGVtIHZhbHVlIHZhbHVlIHNob3VsZCBiZSBhIG1hcCBidXQgaXMgYSAnJHt0eXBlb2YgaXRlbX0nYCxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gTGFiZWxDb21wb25lbnQoeyBmaWVsZCwgaXNBY3RpdmUsIGhhc0Vycm9ycywgdW5pcXVlRmllbGRJZCwgaXNGaWVsZE9wdGlvbmFsLCB0IH0pIHtcbiAgY29uc3QgbGFiZWwgPSBgJHtmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpfWA7XG4gIHJldHVybiAoXG4gICAgPEZpZWxkTGFiZWwgaXNBY3RpdmU9e2lzQWN0aXZlfSBoYXNFcnJvcnM9e2hhc0Vycm9yc30gaHRtbEZvcj17dW5pcXVlRmllbGRJZH0+XG4gICAgICB7bGFiZWx9IHtgJHtpc0ZpZWxkT3B0aW9uYWwgPyBgICgke3QoJ2VkaXRvci5lZGl0b3JDb250cm9sLmZpZWxkLm9wdGlvbmFsJyl9KWAgOiAnJ31gfVxuICAgIDwvRmllbGRMYWJlbD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlzdENvbnRyb2wgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjaGlsZFJlZnMgPSB7fTtcblxuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIG1ldGFkYXRhOiBJbW11dGFibGVQcm9wVHlwZXMubWFwLFxuICAgIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uQ2hhbmdlT2JqZWN0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uVmFsaWRhdGVPYmplY3Q6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdmFsaWRhdGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdmFsdWU6IEltbXV0YWJsZVByb3BUeXBlcy5saXN0LFxuICAgIGZpZWxkOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGZvcklEOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNvbnRyb2xSZWY6IFByb3BUeXBlcy5mdW5jLFxuICAgIG1lZGlhUGF0aHM6IEltbXV0YWJsZVByb3BUeXBlcy5tYXAuaXNSZXF1aXJlZCxcbiAgICBnZXRBc3NldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvbk9wZW5NZWRpYUxpYnJhcnk6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25BZGRBc3NldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvblJlbW92ZUluc2VydGVkTWVkaWE6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgY2xhc3NOYW1lV3JhcHBlcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHNldEFjdGl2ZVN0eWxlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHNldEluYWN0aXZlU3R5bGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgZWRpdG9yQ29udHJvbDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWQsXG4gICAgcmVzb2x2ZVdpZGdldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBjbGVhckZpZWxkRXJyb3JzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGZpZWxkc0Vycm9yczogSW1tdXRhYmxlUHJvcFR5cGVzLm1hcC5pc1JlcXVpcmVkLFxuICAgIGVudHJ5OiBJbW11dGFibGVQcm9wVHlwZXMubWFwLmlzUmVxdWlyZWQsXG4gICAgdDogUHJvcFR5cGVzLmZ1bmMsXG4gIH07XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICB2YWx1ZTogTGlzdCgpLFxuICAgIHBhcmVudElkczogW10sXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgY29uc3QgeyBmaWVsZCwgdmFsdWUgfSA9IHByb3BzO1xuICAgIGNvbnN0IGxpc3RDb2xsYXBzZWQgPSBmaWVsZC5nZXQoJ2NvbGxhcHNlZCcsIHRydWUpO1xuICAgIGNvbnN0IGl0ZW1zQ29sbGFwc2VkID0gKHZhbHVlICYmIEFycmF5KHZhbHVlLnNpemUpLmZpbGwobGlzdENvbGxhcHNlZCkpIHx8IFtdO1xuICAgIGNvbnN0IGtleXMgPSAodmFsdWUgJiYgQXJyYXkuZnJvbSh7IGxlbmd0aDogdmFsdWUuc2l6ZSB9LCAoKSA9PiB1dWlkKCkpKSB8fCBbXTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBsaXN0Q29sbGFwc2VkLFxuICAgICAgaXRlbXNDb2xsYXBzZWQsXG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZVRvU3RyaW5nKHZhbHVlKSxcbiAgICAgIGtleXMsXG4gICAgfTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIC8vIE1hbnVhbGx5IHZhbGlkYXRlIFByb3BUeXBlcyAtIFJlYWN0IDE5IGJyZWFraW5nIGNoYW5nZVxuICAgIFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcyhMaXN0Q29udHJvbC5wcm9wVHlwZXMsIHRoaXMucHJvcHMsICdwcm9wJywgJ0xpc3RDb250cm9sJyk7XG4gIH1cblxuICB2YWx1ZVRvU3RyaW5nID0gdmFsdWUgPT4ge1xuICAgIGxldCBzdHJpbmdWYWx1ZTtcbiAgICBpZiAoTGlzdC5pc0xpc3QodmFsdWUpIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBzdHJpbmdWYWx1ZSA9IHZhbHVlLmpvaW4oJywnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgRXhwZWN0ZWQgTGlzdCB2YWx1ZSB0byBiZSBhbiBhcnJheSBidXQgcmVjZWl2ZWQgJyR7dmFsdWV9JyB3aXRoIHR5cGUgb2YgJyR7dHlwZW9mIHZhbHVlfScuIFBsZWFzZSBjaGVjayB0aGUgdmFsdWUgcHJvdmlkZWQgdG8gdGhlICcke3RoaXMucHJvcHMuZmllbGQuZ2V0KFxuICAgICAgICAgICduYW1lJyxcbiAgICAgICAgKX0nIGZpZWxkYCxcbiAgICAgICk7XG4gICAgICBzdHJpbmdWYWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBzdHJpbmdWYWx1ZS5yZXBsYWNlKC8sKFteXFxzXXwkKS9nLCAnLCAkMScpO1xuICB9O1xuXG4gIGdldFZhbHVlVHlwZSA9ICgpID0+IHtcbiAgICBjb25zdCB7IGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChmaWVsZC5nZXQoJ2ZpZWxkcycpKSB7XG4gICAgICByZXR1cm4gdmFsdWVUeXBlcy5NVUxUSVBMRTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkLmdldCgnZmllbGQnKSkge1xuICAgICAgcmV0dXJuIHZhbHVlVHlwZXMuU0lOR0xFO1xuICAgIH0gZWxzZSBpZiAoZmllbGQuZ2V0KFRZUEVTX0tFWSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZVR5cGVzLk1JWEVEO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH07XG5cbiAgdW5pcXVlRmllbGRJZCA9IHVuaXF1ZUlkKGAke3RoaXMucHJvcHMuZmllbGQuZ2V0KCduYW1lJyl9LWZpZWxkLWApO1xuICAvKipcbiAgICogQWx3YXlzIHVwZGF0ZSBzbyB0aGF0IGVhY2ggbmVzdGVkIHdpZGdldCBoYXMgdGhlIG9wdGlvbiB0byB1cGRhdGUuIFRoaXMgaXNcbiAgICogcmVxdWlyZWQgYmVjYXVzZSBDb250cm9sSE9DIHByb3ZpZGVzIGEgZGVmYXVsdCBgc2hvdWxkQ29tcG9uZW50VXBkYXRlYFxuICAgKiB3aGljaCBvbmx5IHVwZGF0ZXMgaWYgdGhlIHZhbHVlIGNoYW5nZXMsIGJ1dCBldmVyeSB3aWRnZXQgbXVzdCBiZSBhbGxvd2VkXG4gICAqIHRvIG92ZXJyaWRlIHRoaXMuXG4gICAqL1xuICBzaG91bGRDb21wb25lbnRVcGRhdGUoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBoYW5kbGVDaGFuZ2UgPSBlID0+IHtcbiAgICBjb25zdCB7IG9uQ2hhbmdlIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy5zdGF0ZS52YWx1ZTtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IGUudGFyZ2V0LnZhbHVlLnRyaW0oKTtcbiAgICBjb25zdCBsaXN0VmFsdWUgPSBuZXdWYWx1ZSA/IG5ld1ZhbHVlLnNwbGl0KCcsJykgOiBbXTtcbiAgICBpZiAobmV3VmFsdWUubWF0Y2goLywkLykgJiYgb2xkVmFsdWUubWF0Y2goLywgJC8pKSB7XG4gICAgICBsaXN0VmFsdWUucG9wKCk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPSB0aGlzLnZhbHVlVG9TdHJpbmcobGlzdFZhbHVlKTtcbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHBhcnNlZFZhbHVlIH0pO1xuICAgIG9uQ2hhbmdlKExpc3QobGlzdFZhbHVlLm1hcCh2YWwgPT4gdmFsLnRyaW0oKSkpKTtcbiAgfTtcblxuICBoYW5kbGVGb2N1cyA9ICgpID0+IHtcbiAgICB0aGlzLnByb3BzLnNldEFjdGl2ZVN0eWxlKCk7XG4gIH07XG5cbiAgaGFuZGxlQmx1ciA9IGUgPT4ge1xuICAgIGNvbnN0IGxpc3RWYWx1ZSA9IGUudGFyZ2V0LnZhbHVlXG4gICAgICAuc3BsaXQoJywnKVxuICAgICAgLm1hcChlbCA9PiBlbC50cmltKCkpXG4gICAgICAuZmlsdGVyKGVsID0+IGVsKTtcbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHRoaXMudmFsdWVUb1N0cmluZyhsaXN0VmFsdWUpIH0pO1xuICAgIHRoaXMucHJvcHMuc2V0SW5hY3RpdmVTdHlsZSgpO1xuICB9O1xuXG4gIGhhbmRsZUFkZCA9IGUgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHBhcnNlZFZhbHVlID1cbiAgICAgIHRoaXMuZ2V0VmFsdWVUeXBlKCkgPT09IHZhbHVlVHlwZXMuU0lOR0xFXG4gICAgICAgID8gdGhpcy5zaW5nbGVEZWZhdWx0KClcbiAgICAgICAgOiBmcm9tSlModGhpcy5tdWx0aXBsZURlZmF1bHQoZmllbGQuZ2V0KCdmaWVsZHMnKSkpO1xuICAgIHRoaXMuYWRkSXRlbShwYXJzZWRWYWx1ZSk7XG4gIH07XG5cbiAgc2luZ2xlRGVmYXVsdCA9ICgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5maWVsZC5nZXRJbihbJ2ZpZWxkJywgJ2RlZmF1bHQnXSwgbnVsbCk7XG4gIH07XG5cbiAgbXVsdGlwbGVEZWZhdWx0ID0gZmllbGRzID0+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KGZpZWxkcyk7XG4gIH07XG5cbiAgaGFuZGxlQWRkVHlwZSA9ICh0eXBlLCB0eXBlS2V5KSA9PiB7XG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPSBmcm9tSlModGhpcy5taXhlZERlZmF1bHQodHlwZUtleSwgdHlwZSkpO1xuICAgIHRoaXMuYWRkSXRlbShwYXJzZWRWYWx1ZSk7XG4gIH07XG5cbiAgbWl4ZWREZWZhdWx0ID0gKHR5cGVLZXksIHR5cGUpID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZFR5cGUgPSB0aGlzLnByb3BzLmZpZWxkLmdldChUWVBFU19LRVkpLmZpbmQoZiA9PiBmLmdldCgnbmFtZScpID09PSB0eXBlKTtcbiAgICBjb25zdCBmaWVsZHMgPSBzZWxlY3RlZFR5cGUuZ2V0KCdmaWVsZHMnKSB8fCBbc2VsZWN0ZWRUeXBlLmdldCgnZmllbGQnKV07XG5cbiAgICByZXR1cm4gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KGZpZWxkcywgeyBbdHlwZUtleV06IHR5cGUgfSk7XG4gIH07XG5cbiAgZ2V0RmllbGRzRGVmYXVsdCA9IChmaWVsZHMsIGluaXRpYWxWYWx1ZSA9IHt9KSA9PiB7XG4gICAgcmV0dXJuIGZpZWxkcy5yZWR1Y2UoKGFjYywgaXRlbSkgPT4ge1xuICAgICAgY29uc3Qgc3ViZmllbGRzID0gaXRlbS5nZXQoJ2ZpZWxkJykgfHwgaXRlbS5nZXQoJ2ZpZWxkcycpO1xuICAgICAgY29uc3Qgb2JqZWN0ID0gaXRlbS5nZXQoJ3dpZGdldCcpID09ICdvYmplY3QnO1xuICAgICAgY29uc3QgbmFtZSA9IGl0ZW0uZ2V0KCduYW1lJyk7XG4gICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSBpdGVtLmdldCgnZGVmYXVsdCcsIG51bGwpO1xuXG4gICAgICBpZiAoTGlzdC5pc0xpc3Qoc3ViZmllbGRzKSAmJiBvYmplY3QpIHtcbiAgICAgICAgY29uc3Qgc3ViRGVmYXVsdFZhbHVlID0gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KHN1YmZpZWxkcyk7XG4gICAgICAgICFpc0VtcHR5KHN1YkRlZmF1bHRWYWx1ZSkgJiYgKGFjY1tuYW1lXSA9IHN1YkRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9XG5cbiAgICAgIGlmIChNYXAuaXNNYXAoc3ViZmllbGRzKSAmJiBvYmplY3QpIHtcbiAgICAgICAgY29uc3Qgc3ViRGVmYXVsdFZhbHVlID0gdGhpcy5nZXRGaWVsZHNEZWZhdWx0KFtzdWJmaWVsZHNdKTtcbiAgICAgICAgIWlzRW1wdHkoc3ViRGVmYXVsdFZhbHVlKSAmJiAoYWNjW25hbWVdID0gc3ViRGVmYXVsdFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH1cblxuICAgICAgaWYgKGRlZmF1bHRWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBhY2NbbmFtZV0gPSBkZWZhdWx0VmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgaW5pdGlhbFZhbHVlKTtcbiAgfTtcblxuICBhZGRJdGVtID0gcGFyc2VkVmFsdWUgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWUsIG9uQ2hhbmdlLCBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBhZGRUb1RvcCA9IGZpZWxkLmdldCgnYWRkX3RvX3RvcCcsIGZhbHNlKTtcblxuICAgIGNvbnN0IGl0ZW1LZXkgPSB1dWlkKCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBpdGVtc0NvbGxhcHNlZDogYWRkVG9Ub3BcbiAgICAgICAgPyBbZmFsc2UsIC4uLnRoaXMuc3RhdGUuaXRlbXNDb2xsYXBzZWRdXG4gICAgICAgIDogWy4uLnRoaXMuc3RhdGUuaXRlbXNDb2xsYXBzZWQsIGZhbHNlXSxcbiAgICAgIGtleXM6IGFkZFRvVG9wID8gW2l0ZW1LZXksIC4uLnRoaXMuc3RhdGUua2V5c10gOiBbLi4udGhpcy5zdGF0ZS5rZXlzLCBpdGVtS2V5XSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGxpc3RWYWx1ZSA9IHZhbHVlIHx8IExpc3QoKTtcbiAgICBpZiAoYWRkVG9Ub3ApIHtcbiAgICAgIG9uQ2hhbmdlKGxpc3RWYWx1ZS51bnNoaWZ0KHBhcnNlZFZhbHVlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uQ2hhbmdlKGxpc3RWYWx1ZS5wdXNoKHBhcnNlZFZhbHVlKSk7XG4gICAgfVxuICB9O1xuXG4gIHByb2Nlc3NDb250cm9sUmVmID0gcmVmID0+IHtcbiAgICBpZiAoIXJlZikgcmV0dXJuO1xuICAgIGNvbnN0IHtcbiAgICAgIHByb3BzOiB7IHZhbGlkYXRpb25LZXk6IGtleSB9LFxuICAgIH0gPSByZWY7XG4gICAgdGhpcy5jaGlsZFJlZnNba2V5XSA9IHJlZjtcbiAgICB0aGlzLnByb3BzLmNvbnRyb2xSZWY/Lih0aGlzKTtcbiAgfTtcblxuICB2YWxpZGF0ZSA9ICgpID0+IHtcbiAgICAvLyBGaXJzdCB2YWxpZGF0ZSBjaGlsZCB3aWRnZXRzIGlmIHRoaXMgaXMgYSBjb21wbGV4IGxpc3RcbiAgICBjb25zdCBoYXNDaGlsZFdpZGdldHMgPSB0aGlzLmdldFZhbHVlVHlwZSgpICYmIE9iamVjdC5rZXlzKHRoaXMuY2hpbGRSZWZzKS5sZW5ndGggPiAwO1xuICAgIGlmIChoYXNDaGlsZFdpZGdldHMpIHtcbiAgICAgIE9iamVjdC52YWx1ZXModGhpcy5jaGlsZFJlZnMpLmZvckVhY2god2lkZ2V0ID0+IHtcbiAgICAgICAgd2lkZ2V0Py52YWxpZGF0ZT8uKCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9wcy52YWxpZGF0ZSgpO1xuICAgIH1cbiAgICB0aGlzLnByb3BzLm9uVmFsaWRhdGVPYmplY3QodGhpcy5wcm9wcy5mb3JJRCwgdGhpcy52YWxpZGF0ZVNpemUoKSk7XG4gIH07XG5cbiAgdmFsaWRhdGVTaXplID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgZmllbGQsIHZhbHVlLCB0IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG1pbiA9IGZpZWxkLmdldCgnbWluJyk7XG4gICAgY29uc3QgbWF4ID0gZmllbGQuZ2V0KCdtYXgnKTtcbiAgICBjb25zdCByZXF1aXJlZCA9IGZpZWxkLmdldCgncmVxdWlyZWQnLCB0cnVlKTtcblxuICAgIGlmICghcmVxdWlyZWQgJiYgIXZhbHVlPy5zaXplKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgZXJyb3IgPSB2YWxpZGF0aW9ucy52YWxpZGF0ZU1pbk1heChcbiAgICAgIHQsXG4gICAgICBmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpLFxuICAgICAgdmFsdWUsXG4gICAgICBtaW4sXG4gICAgICBtYXgsXG4gICAgKTtcblxuICAgIHJldHVybiBlcnJvciA/IFtlcnJvcl0gOiBbXTtcbiAgfTtcblxuICAvKipcbiAgICogSW4gY2FzZSB0aGUgYG9uQ2hhbmdlT2JqZWN0YCBmdW5jdGlvbiBpcyBmcm96ZW4gYnkgYSBjaGlsZCB3aWRnZXQgaW1wbGVtZW50YXRpb24sXG4gICAqIGUuZy4gd2hlbiBkZWJvdW5jZWQsIGFsd2F5cyBnZXQgdGhlIGxhdGVzdCBvYmplY3QgdmFsdWUgaW5zdGVhZCBvZiB1c2luZ1xuICAgKiBgdGhpcy5wcm9wcy52YWx1ZWAgZGlyZWN0bHkuXG4gICAqL1xuICBnZXRPYmplY3RWYWx1ZSA9IGlkeCA9PiB0aGlzLnByb3BzLnZhbHVlLmdldChpZHgpIHx8IE1hcCgpO1xuXG4gIGhhbmRsZUNoYW5nZUZvcihpbmRleCkge1xuICAgIHJldHVybiAoZiwgbmV3VmFsdWUsIG5ld01ldGFkYXRhKSA9PiB7XG4gICAgICBjb25zdCB7IHZhbHVlLCBtZXRhZGF0YSwgb25DaGFuZ2UsIGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBmaWVsZC5nZXQoJ25hbWUnKTtcbiAgICAgIGNvbnN0IGxpc3RGaWVsZE9iamVjdFdpZGdldCA9IGZpZWxkLmdldEluKFsnZmllbGQnLCAnd2lkZ2V0J10pID09PSAnb2JqZWN0JztcbiAgICAgIGNvbnN0IHdpdGhOYW1lS2V5ID1cbiAgICAgICAgdGhpcy5nZXRWYWx1ZVR5cGUoKSAhPT0gdmFsdWVUeXBlcy5TSU5HTEUgfHxcbiAgICAgICAgKHRoaXMuZ2V0VmFsdWVUeXBlKCkgPT09IHZhbHVlVHlwZXMuU0lOR0xFICYmIGxpc3RGaWVsZE9iamVjdFdpZGdldCk7XG4gICAgICBjb25zdCBuZXdPYmplY3RWYWx1ZSA9IHdpdGhOYW1lS2V5XG4gICAgICAgID8gdGhpcy5nZXRPYmplY3RWYWx1ZShpbmRleCkuc2V0KGYuZ2V0KCduYW1lJyksIG5ld1ZhbHVlKVxuICAgICAgICA6IG5ld1ZhbHVlO1xuICAgICAgY29uc3QgcGFyc2VkTWV0YWRhdGEgPSB7XG4gICAgICAgIFtjb2xsZWN0aW9uTmFtZV06IE9iamVjdC5hc3NpZ24obWV0YWRhdGEgPyBtZXRhZGF0YS50b0pTKCkgOiB7fSwgbmV3TWV0YWRhdGEgfHwge30pLFxuICAgICAgfTtcbiAgICAgIG9uQ2hhbmdlKHZhbHVlLnNldChpbmRleCwgbmV3T2JqZWN0VmFsdWUpLCBwYXJzZWRNZXRhZGF0YSk7XG4gICAgfTtcbiAgfVxuXG4gIGhhbmRsZVJlbW92ZSA9IChpbmRleCwgZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3Qge1xuICAgICAgdmFsdWUsXG4gICAgICBtZXRhZGF0YSxcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgZmllbGQsXG4gICAgICBjbGVhckZpZWxkRXJyb3JzLFxuICAgICAgb25WYWxpZGF0ZU9iamVjdCxcbiAgICAgIGZvcklELFxuICAgICAgZmllbGRzRXJyb3JzLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBmaWVsZC5nZXQoJ25hbWUnKTtcbiAgICBjb25zdCBpc1NpbmdsZUZpZWxkID0gdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5TSU5HTEU7XG5cbiAgICBjb25zdCBtZXRhZGF0YVJlbW92ZVBhdGggPSBpc1NpbmdsZUZpZWxkID8gdmFsdWUuZ2V0KGluZGV4KSA6IHZhbHVlLmdldChpbmRleCkudmFsdWVTZXEoKTtcbiAgICBjb25zdCBwYXJzZWRNZXRhZGF0YSA9XG4gICAgICBtZXRhZGF0YSAmJiAhbWV0YWRhdGEuaXNFbXB0eSgpXG4gICAgICAgID8geyBbY29sbGVjdGlvbk5hbWVdOiBtZXRhZGF0YS5yZW1vdmVJbihtZXRhZGF0YVJlbW92ZVBhdGgpIH1cbiAgICAgICAgOiBtZXRhZGF0YTtcblxuICAgIC8vIEdldCB0aGUga2V5IG9mIHRoZSBpdGVtIGJlaW5nIHJlbW92ZWRcbiAgICBjb25zdCByZW1vdmVkS2V5ID0gdGhpcy5zdGF0ZS5rZXlzW2luZGV4XTtcblxuICAgIC8vIFVwZGF0ZSBzdGF0ZSB3aGlsZSBwcmVzZXJ2aW5nIGtleXMgZm9yIHJlbWFpbmluZyBpdGVtc1xuICAgIGNvbnN0IG5ld0tleXMgPSBbLi4udGhpcy5zdGF0ZS5rZXlzXTtcbiAgICBuZXdLZXlzLnNwbGljZShpbmRleCwgMSk7XG4gICAgaXRlbXNDb2xsYXBzZWQuc3BsaWNlKGluZGV4LCAxKTtcblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXNDb2xsYXBzZWQ6IFsuLi5pdGVtc0NvbGxhcHNlZF0sXG4gICAgICBrZXlzOiBuZXdLZXlzLFxuICAgIH0pO1xuXG4gICAgLy8gQ2xlYXIgdGhlIHJlZiBmb3IgdGhlIHJlbW92ZWQgaXRlbVxuICAgIGRlbGV0ZSB0aGlzLmNoaWxkUmVmc1tyZW1vdmVkS2V5XTtcblxuICAgIGNvbnN0IG5ld1ZhbHVlID0gdmFsdWUuZGVsZXRlKGluZGV4KTtcblxuICAgIC8vIENsZWFyIGVycm9ycyBmb3IgdGhlIHJlbW92ZWQgaXRlbSBhbmQgaXRzIGNoaWxkcmVuXG4gICAgaWYgKGZpZWxkc0Vycm9ycykge1xuICAgICAgT2JqZWN0LmVudHJpZXMoZmllbGRzRXJyb3JzLnRvSlMoKSkuZm9yRWFjaCgoW2ZpZWxkSWQsIGVycm9yc10pID0+IHtcbiAgICAgICAgaWYgKGVycm9ycy5zb21lKGVyciA9PiBlcnIucGFyZW50SWRzPy5pbmNsdWRlcyhyZW1vdmVkS2V5KSkpIHtcbiAgICAgICAgICBjbGVhckZpZWxkRXJyb3JzKGZpZWxkSWQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBJZiBsaXN0IGlzIGVtcHR5LCBtYXJrIGl0IGFzIHZhbGlkXG4gICAgaWYgKG5ld1ZhbHVlLnNpemUgPT09IDApIHtcbiAgICAgIGNsZWFyRmllbGRFcnJvcnMoZm9ySUQpO1xuICAgICAgb25WYWxpZGF0ZU9iamVjdChmb3JJRCwgW10pO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSB0aGUgdmFsdWUgbGFzdCB0byBlbnN1cmUgYWxsIGVycm9yIHN0YXRlcyBhcmUgY2xlYXJlZFxuICAgIG9uQ2hhbmdlKG5ld1ZhbHVlLCBwYXJzZWRNZXRhZGF0YSk7XG4gIH07XG5cbiAgaGFuZGxlSXRlbUNvbGxhcHNlVG9nZ2xlID0gKGluZGV4LCBldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBuZXdJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLm1hcCgoY29sbGFwc2VkLCBpdGVtSW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCA9PT0gaXRlbUluZGV4KSB7XG4gICAgICAgIHJldHVybiAhY29sbGFwc2VkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbGxhcHNlZDtcbiAgICB9KTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGl0ZW1zQ29sbGFwc2VkOiBuZXdJdGVtc0NvbGxhcHNlZCxcbiAgICB9KTtcbiAgfTtcblxuICBoYW5kbGVDb2xsYXBzZUFsbFRvZ2dsZSA9IGUgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IHZhbHVlLCBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkLCBsaXN0Q29sbGFwc2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IG1pbmltaXplQ29sbGFwc2VkSXRlbXMgPSBmaWVsZC5nZXQoJ21pbmltaXplX2NvbGxhcHNlZCcsIGZhbHNlKTtcbiAgICBjb25zdCBsaXN0Q29sbGFwc2VkQnlEZWZhdWx0ID0gZmllbGQuZ2V0KCdjb2xsYXBzZWQnLCB0cnVlKTtcbiAgICBjb25zdCBhbGxJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLmV2ZXJ5KHZhbCA9PiB2YWwgPT09IHRydWUpO1xuXG4gICAgaWYgKG1pbmltaXplQ29sbGFwc2VkSXRlbXMpIHtcbiAgICAgIGxldCB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZDtcbiAgICAgIC8vIE9ubHkgYWxsb3cgY29sbGFwc2luZyBhbGwgaXRlbXMgaW4gdGhpcyBtb2RlIGJ1dCBub3Qgb3BlbmluZyBhbGwgYXQgb25jZVxuICAgICAgaWYgKCFsaXN0Q29sbGFwc2VkIHx8ICFsaXN0Q29sbGFwc2VkQnlEZWZhdWx0KSB7XG4gICAgICAgIHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCA9IEFycmF5KHZhbHVlLnNpemUpLmZpbGwoIWxpc3RDb2xsYXBzZWQpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGxpc3RDb2xsYXBzZWQ6ICFsaXN0Q29sbGFwc2VkLCBpdGVtc0NvbGxhcHNlZDogdXBkYXRlZEl0ZW1zQ29sbGFwc2VkIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgaXRlbXNDb2xsYXBzZWQ6IEFycmF5KHZhbHVlLnNpemUpLmZpbGwoIWFsbEl0ZW1zQ29sbGFwc2VkKSB9KTtcbiAgICB9XG4gIH07XG5cbiAgb2JqZWN0TGFiZWwoaXRlbSkge1xuICAgIGNvbnN0IHsgZmllbGQsIGVudHJ5IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHZhbHVlVHlwZSA9IHRoaXMuZ2V0VmFsdWVUeXBlKCk7XG4gICAgc3dpdGNoICh2YWx1ZVR5cGUpIHtcbiAgICAgIGNhc2UgdmFsdWVUeXBlcy5NSVhFRDoge1xuICAgICAgICBpZiAoIXZhbGlkYXRlSXRlbShmaWVsZCwgaXRlbSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXRlbVR5cGUgPSBnZXRUeXBlZEZpZWxkRm9yVmFsdWUoZmllbGQsIGl0ZW0pO1xuICAgICAgICBjb25zdCBsYWJlbCA9IGl0ZW1UeXBlLmdldCgnbGFiZWwnLCBpdGVtVHlwZS5nZXQoJ25hbWUnKSk7XG4gICAgICAgIC8vIGVhY2ggdHlwZSBjYW4gaGF2ZSBpdHMgb3duIHN1bW1hcnksIGJ1dCBkZWZhdWx0IHRvIHRoZSBsaXN0IHN1bW1hcnkgaWYgZXhpc3RzXG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBpdGVtVHlwZS5nZXQoJ3N1bW1hcnknLCBmaWVsZC5nZXQoJ3N1bW1hcnknKSk7XG4gICAgICAgIGNvbnN0IGxhYmVsUmV0dXJuID0gc3VtbWFyeSA/IGhhbmRsZVN1bW1hcnkoc3VtbWFyeSwgZW50cnksIGxhYmVsLCBpdGVtKSA6IGxhYmVsO1xuICAgICAgICByZXR1cm4gbGFiZWxSZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlIHZhbHVlVHlwZXMuU0lOR0xFOiB7XG4gICAgICAgIGNvbnN0IHNpbmdsZUZpZWxkID0gZmllbGQuZ2V0KCdmaWVsZCcpO1xuICAgICAgICBjb25zdCBsYWJlbCA9IHNpbmdsZUZpZWxkLmdldCgnbGFiZWwnLCBzaW5nbGVGaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBmaWVsZC5nZXQoJ3N1bW1hcnknKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGZyb21KUyh7IFtzaW5nbGVGaWVsZC5nZXQoJ25hbWUnKV06IGl0ZW0gfSk7XG4gICAgICAgIGNvbnN0IGxhYmVsUmV0dXJuID0gc3VtbWFyeSA/IGhhbmRsZVN1bW1hcnkoc3VtbWFyeSwgZW50cnksIGxhYmVsLCBkYXRhKSA6IGxhYmVsO1xuICAgICAgICByZXR1cm4gbGFiZWxSZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlIHZhbHVlVHlwZXMuTVVMVElQTEU6IHtcbiAgICAgICAgaWYgKCF2YWxpZGF0ZUl0ZW0oZmllbGQsIGl0ZW0pKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG11bHRpRmllbGRzID0gZmllbGQuZ2V0KCdmaWVsZHMnKTtcbiAgICAgICAgY29uc3QgbGFiZWxGaWVsZCA9IG11bHRpRmllbGRzICYmIG11bHRpRmllbGRzLmZpcnN0KCk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gaXRlbS5nZXQobGFiZWxGaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBmaWVsZC5nZXQoJ3N1bW1hcnknKTtcbiAgICAgICAgY29uc3QgbGFiZWxSZXR1cm4gPSBzdW1tYXJ5ID8gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgdmFsdWUsIGl0ZW0pIDogdmFsdWU7XG4gICAgICAgIHJldHVybiAobGFiZWxSZXR1cm4gfHwgYE5vICR7bGFiZWxGaWVsZC5nZXQoJ25hbWUnKX1gKS50b1N0cmluZygpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBvblNvcnRFbmQgPSAoeyBvbGRJbmRleCwgbmV3SW5kZXggfSkgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCwga2V5cyB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIC8vIFVwZGF0ZSB2YWx1ZVxuICAgIGNvbnN0IGl0ZW0gPSB2YWx1ZS5nZXQob2xkSW5kZXgpO1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gdmFsdWUuZGVsZXRlKG9sZEluZGV4KS5pbnNlcnQobmV3SW5kZXgsIGl0ZW0pO1xuICAgIHRoaXMucHJvcHMub25DaGFuZ2UobmV3VmFsdWUpO1xuXG4gICAgLy8gVXBkYXRlIGNvbGxhcHNpbmdcbiAgICBjb25zdCBjb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZFtvbGRJbmRleF07XG4gICAgaXRlbXNDb2xsYXBzZWQuc3BsaWNlKG9sZEluZGV4LCAxKTtcbiAgICBjb25zdCB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgPSBbLi4uaXRlbXNDb2xsYXBzZWRdO1xuICAgIHVwZGF0ZWRJdGVtc0NvbGxhcHNlZC5zcGxpY2UobmV3SW5kZXgsIDAsIGNvbGxhcHNlZCk7XG5cbiAgICAvLyBNb3ZlIGtleXMgdG8gbWFpbnRhaW4gcmVsYXRpb25zaGlwc1xuICAgIGNvbnN0IG1vdmVkS2V5ID0ga2V5c1tvbGRJbmRleF07XG4gICAgY29uc3QgdXBkYXRlZEtleXMgPSBbLi4ua2V5c107XG4gICAgdXBkYXRlZEtleXMuc3BsaWNlKG9sZEluZGV4LCAxKTtcbiAgICB1cGRhdGVkS2V5cy5zcGxpY2UobmV3SW5kZXgsIDAsIG1vdmVkS2V5KTtcblxuICAgIHRoaXMuc2V0U3RhdGUoeyBpdGVtc0NvbGxhcHNlZDogdXBkYXRlZEl0ZW1zQ29sbGFwc2VkLCBrZXlzOiB1cGRhdGVkS2V5cyB9KTtcbiAgfTtcblxuICBoYXNFcnJvciA9IGluZGV4ID0+IHtcbiAgICBjb25zdCB7IGZpZWxkc0Vycm9ycyB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoZmllbGRzRXJyb3JzICYmIGZpZWxkc0Vycm9ycy5zaXplID4gMCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZmllbGRzRXJyb3JzLnRvSlMoKSkuc29tZShhcnIgPT5cbiAgICAgICAgYXJyLnNvbWUoZXJyID0+IGVyci5wYXJlbnRJZHMgJiYgZXJyLnBhcmVudElkcy5pbmNsdWRlcyh0aGlzLnN0YXRlLmtleXNbaW5kZXhdKSksXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICBmb2N1cyhwYXRoKSB7XG4gICAgY29uc3QgW2luZGV4LCAuLi5yZW1haW5pbmdQYXRoXSA9IHBhdGguc3BsaXQoJy4nKTtcblxuICAgIGlmICh0aGlzLnN0YXRlLmxpc3RDb2xsYXBzZWQgfHwgdGhpcy5zdGF0ZS5pdGVtc0NvbGxhcHNlZFtpbmRleF0pIHtcbiAgICAgIGNvbnN0IG5ld0l0ZW1zQ29sbGFwc2VkID0gWy4uLnRoaXMuc3RhdGUuaXRlbXNDb2xsYXBzZWRdO1xuICAgICAgbmV3SXRlbXNDb2xsYXBzZWRbaW5kZXhdID0gZmFsc2U7XG4gICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICB7XG4gICAgICAgICAgbGlzdENvbGxhcHNlZDogZmFsc2UsXG4gICAgICAgICAgaXRlbXNDb2xsYXBzZWQ6IG5ld0l0ZW1zQ29sbGFwc2VkLFxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5zdGF0ZS5rZXlzW2luZGV4XTtcbiAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jaGlsZFJlZnNba2V5XTtcbiAgICAgICAgICBpZiAoY29udHJvbD8uZm9jdXMpIHtcbiAgICAgICAgICAgIGNvbnRyb2wuZm9jdXMocmVtYWluaW5nUGF0aC5qb2luKCcuJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuc3RhdGUua2V5c1tpbmRleF07XG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jaGlsZFJlZnNba2V5XTtcbiAgICAgIGlmIChjb250cm9sPy5mb2N1cykge1xuICAgICAgICBjb250cm9sLmZvY3VzKHJlbWFpbmluZ1BhdGguam9pbignLicpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZGlzcGxheS1uYW1lXG4gIHJlbmRlckl0ZW0gPSAoaXRlbSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjbGFzc05hbWVXcmFwcGVyLFxuICAgICAgZWRpdG9yQ29udHJvbCxcbiAgICAgIG9uVmFsaWRhdGVPYmplY3QsXG4gICAgICBtZXRhZGF0YSxcbiAgICAgIGNsZWFyRmllbGRFcnJvcnMsXG4gICAgICBmaWVsZHNFcnJvcnMsXG4gICAgICBjb250cm9sUmVmLFxuICAgICAgcmVzb2x2ZVdpZGdldCxcbiAgICAgIHBhcmVudElkcyxcbiAgICAgIGZvcklELFxuICAgICAgdCxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQsIGtleXMgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgY29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWRbaW5kZXhdO1xuICAgIGNvbnN0IGtleSA9IGtleXNbaW5kZXhdO1xuICAgIGxldCBmaWVsZCA9IHRoaXMucHJvcHMuZmllbGQ7XG4gICAgY29uc3QgaGFzRXJyb3IgPSB0aGlzLmhhc0Vycm9yKGluZGV4KTtcbiAgICBjb25zdCBpc1ZhcmlhYmxlVHlwZXNMaXN0ID0gdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5NSVhFRDtcbiAgICBpZiAoaXNWYXJpYWJsZVR5cGVzTGlzdCkge1xuICAgICAgZmllbGQgPSBnZXRUeXBlZEZpZWxkRm9yVmFsdWUoZmllbGQsIGl0ZW0pO1xuICAgICAgaWYgKCFmaWVsZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJFcnJvbmVvdXNUeXBlZEl0ZW0oaW5kZXgsIGl0ZW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8U29ydGFibGVMaXN0SXRlbVxuICAgICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBjb2xsYXBzZWQgJiYgc3R5bGVzLmxpc3RDb250cm9sSXRlbUNvbGxhcHNlZF19XG4gICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIGlkPXtrZXl9XG4gICAgICAgIGtleXM9e2tleXN9XG4gICAgICA+XG4gICAgICAgIHtpc1ZhcmlhYmxlVHlwZXNMaXN0ICYmIChcbiAgICAgICAgICA8TGFiZWxDb21wb25lbnRcbiAgICAgICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgICAgIGlzQWN0aXZlPXtmYWxzZX1cbiAgICAgICAgICAgIGhhc0Vycm9ycz17aGFzRXJyb3J9XG4gICAgICAgICAgICB1bmlxdWVGaWVsZElkPXt0aGlzLnVuaXF1ZUZpZWxkSWR9XG4gICAgICAgICAgICBpc0ZpZWxkT3B0aW9uYWw9e2ZpZWxkLmdldCgncmVxdWlyZWQnKSA9PT0gZmFsc2V9XG4gICAgICAgICAgICB0PXt0fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIDxTdHlsZWRMaXN0SXRlbVRvcEJhclxuICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICAgIG9uQ29sbGFwc2VUb2dnbGU9e3BhcnRpYWwodGhpcy5oYW5kbGVJdGVtQ29sbGFwc2VUb2dnbGUsIGluZGV4KX1cbiAgICAgICAgICBkcmFnSGFuZGxlPXtEcmFnSGFuZGxlfVxuICAgICAgICAgIGlkPXtrZXl9XG4gICAgICAgICAgYWxsb3dSZW1vdmU9e2ZpZWxkLmdldCgnYWxsb3dfcmVtb3ZlJywgdHJ1ZSl9XG4gICAgICAgICAgYWxsb3dSZW9yZGVyPXtmaWVsZC5nZXQoJ2FsbG93X3Jlb3JkZXInLCB0cnVlKX1cbiAgICAgICAgICBvblJlbW92ZT17cGFydGlhbCh0aGlzLmhhbmRsZVJlbW92ZSwgaW5kZXgpfVxuICAgICAgICAgIGRhdGEtdGVzdGlkPXtgc3R5bGVkLWxpc3QtaXRlbS10b3AtYmFyLSR7a2V5fWB9XG4gICAgICAgIC8+XG4gICAgICAgIDxOZXN0ZWRPYmplY3RMYWJlbCBjb2xsYXBzZWQ9e2NvbGxhcHNlZH0gZXJyb3I9e2hhc0Vycm9yfT5cbiAgICAgICAgICB7dGhpcy5vYmplY3RMYWJlbChpdGVtKX1cbiAgICAgICAgPC9OZXN0ZWRPYmplY3RMYWJlbD5cbiAgICAgICAgPENsYXNzTmFtZXM+XG4gICAgICAgICAgeyh7IGNzcywgY3ggfSkgPT4gKFxuICAgICAgICAgICAgPE9iamVjdENvbnRyb2xcbiAgICAgICAgICAgICAgY2xhc3NOYW1lV3JhcHBlcj17Y3goY2xhc3NOYW1lV3JhcHBlciwge1xuICAgICAgICAgICAgICAgIFtjc3NgXG4gICAgICAgICAgICAgICAgICAke3N0eWxlU3RyaW5ncy5jb2xsYXBzZWRPYmplY3RDb250cm9sfTtcbiAgICAgICAgICAgICAgICBgXTogY29sbGFwc2VkLFxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgdmFsdWU9e2l0ZW19XG4gICAgICAgICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgICAgICAgb25DaGFuZ2VPYmplY3Q9e3RoaXMuaGFuZGxlQ2hhbmdlRm9yKGluZGV4KX1cbiAgICAgICAgICAgICAgZWRpdG9yQ29udHJvbD17ZWRpdG9yQ29udHJvbH1cbiAgICAgICAgICAgICAgcmVzb2x2ZVdpZGdldD17cmVzb2x2ZVdpZGdldH1cbiAgICAgICAgICAgICAgbWV0YWRhdGE9e21ldGFkYXRhfVxuICAgICAgICAgICAgICBmb3JMaXN0XG4gICAgICAgICAgICAgIG9uVmFsaWRhdGVPYmplY3Q9e29uVmFsaWRhdGVPYmplY3R9XG4gICAgICAgICAgICAgIGNsZWFyRmllbGRFcnJvcnM9e2NsZWFyRmllbGRFcnJvcnN9XG4gICAgICAgICAgICAgIGZpZWxkc0Vycm9ycz17ZmllbGRzRXJyb3JzfVxuICAgICAgICAgICAgICByZWY9e3RoaXMucHJvY2Vzc0NvbnRyb2xSZWZ9XG4gICAgICAgICAgICAgIGNvbnRyb2xSZWY9e2NvbnRyb2xSZWZ9XG4gICAgICAgICAgICAgIHZhbGlkYXRpb25LZXk9e2tleX1cbiAgICAgICAgICAgICAgY29sbGFwc2VkPXtjb2xsYXBzZWR9XG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgb2JqZWN0LWNvbnRyb2wtJHtrZXl9YH1cbiAgICAgICAgICAgICAgaGFzRXJyb3I9e2hhc0Vycm9yfVxuICAgICAgICAgICAgICBwYXJlbnRJZHM9e1suLi5wYXJlbnRJZHMsIGZvcklELCBrZXldfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L0NsYXNzTmFtZXM+XG4gICAgICA8L1NvcnRhYmxlTGlzdEl0ZW0+XG4gICAgKTtcbiAgfTtcblxuICByZW5kZXJFcnJvbmVvdXNUeXBlZEl0ZW0oaW5kZXgsIGl0ZW0pIHtcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMucHJvcHMuZmllbGQ7XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZ2V0RXJyb3JNZXNzYWdlRm9yVHlwZWRGaWVsZEFuZFZhbHVlKGZpZWxkLCBpdGVtKTtcbiAgICBjb25zdCBrZXkgPSBgaXRlbS0ke2luZGV4fWA7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTb3J0YWJsZUxpc3RJdGVtXG4gICAgICAgIGNzcz17W3N0eWxlcy5saXN0Q29udHJvbEl0ZW0sIHN0eWxlcy5saXN0Q29udHJvbEl0ZW1Db2xsYXBzZWRdfVxuICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAgIGtleT17a2V5fVxuICAgICAgPlxuICAgICAgICA8U3R5bGVkTGlzdEl0ZW1Ub3BCYXJcbiAgICAgICAgICBvbkNvbGxhcHNlVG9nZ2xlPXtudWxsfVxuICAgICAgICAgIG9uUmVtb3ZlPXtwYXJ0aWFsKHRoaXMuaGFuZGxlUmVtb3ZlLCBpbmRleCwga2V5KX1cbiAgICAgICAgICBkcmFnSGFuZGxlPXtEcmFnSGFuZGxlfVxuICAgICAgICAgIGlkPXtrZXl9XG4gICAgICAgIC8+XG4gICAgICAgIDxOZXN0ZWRPYmplY3RMYWJlbCBjb2xsYXBzZWQ9e3RydWV9IGVycm9yPXt0cnVlfT5cbiAgICAgICAgICB7ZXJyb3JNZXNzYWdlfVxuICAgICAgICA8L05lc3RlZE9iamVjdExhYmVsPlxuICAgICAgPC9Tb3J0YWJsZUxpc3RJdGVtPlxuICAgICk7XG4gIH1cblxuICByZW5kZXJMaXN0Q29udHJvbCgpIHtcbiAgICBjb25zdCB7IHZhbHVlLCBmb3JJRCwgZmllbGQsIGNsYXNzTmFtZVdyYXBwZXIsIHQgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCwgbGlzdENvbGxhcHNlZCwga2V5cyB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBpdGVtcyA9IHZhbHVlIHx8IExpc3QoKTtcbiAgICBjb25zdCBsYWJlbCA9IGZpZWxkLmdldCgnbGFiZWwnLCBmaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgY29uc3QgbGFiZWxTaW5ndWxhciA9IGZpZWxkLmdldCgnbGFiZWxfc2luZ3VsYXInKSB8fCBmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpO1xuICAgIGNvbnN0IGxpc3RMYWJlbCA9IGl0ZW1zLnNpemUgPT09IDEgPyBsYWJlbFNpbmd1bGFyLnRvTG93ZXJDYXNlKCkgOiBsYWJlbC50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IG1pbmltaXplQ29sbGFwc2VkSXRlbXMgPSBmaWVsZC5nZXQoJ21pbmltaXplX2NvbGxhcHNlZCcsIGZhbHNlKTtcbiAgICBjb25zdCBhbGxJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLmV2ZXJ5KHZhbCA9PiB2YWwgPT09IHRydWUpO1xuICAgIGNvbnN0IHNlbGZDb2xsYXBzZWQgPSBhbGxJdGVtc0NvbGxhcHNlZCAmJiAobGlzdENvbGxhcHNlZCB8fCAhbWluaW1pemVDb2xsYXBzZWRJdGVtcyk7XG5cbiAgICBjb25zdCBpdGVtc0FycmF5ID0ga2V5cy5tYXAoa2V5ID0+ICh7IGlkOiBrZXkgfSkpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxDbGFzc05hbWVzPlxuICAgICAgICB7KHsgY3gsIGNzcyB9KSA9PiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgaWQ9e2ZvcklEfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjeChcbiAgICAgICAgICAgICAgY2xhc3NOYW1lV3JhcHBlcixcbiAgICAgICAgICAgICAgY3NzYFxuICAgICAgICAgICAgICAgICR7c3R5bGVTdHJpbmdzLm9iamVjdFdpZGdldFRvcEJhckNvbnRhaW5lcn1cbiAgICAgICAgICAgICAgYCxcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPE9iamVjdFdpZGdldFRvcEJhclxuICAgICAgICAgICAgICBhbGxvd0FkZD17ZmllbGQuZ2V0KCdhbGxvd19hZGQnLCB0cnVlKX1cbiAgICAgICAgICAgICAgb25BZGQ9e3RoaXMuaGFuZGxlQWRkfVxuICAgICAgICAgICAgICB0eXBlcz17ZmllbGQuZ2V0KFRZUEVTX0tFWSwgbnVsbCl9XG4gICAgICAgICAgICAgIG9uQWRkVHlwZT17dHlwZSA9PiB0aGlzLmhhbmRsZUFkZFR5cGUodHlwZSwgcmVzb2x2ZUZpZWxkS2V5VHlwZShmaWVsZCkpfVxuICAgICAgICAgICAgICBoZWFkaW5nPXtgJHtpdGVtcy5zaXplfSAke2xpc3RMYWJlbH1gfVxuICAgICAgICAgICAgICBsYWJlbD17bGFiZWxTaW5ndWxhci50b0xvd2VyQ2FzZSgpfVxuICAgICAgICAgICAgICBvbkNvbGxhcHNlVG9nZ2xlPXt0aGlzLmhhbmRsZUNvbGxhcHNlQWxsVG9nZ2xlfVxuICAgICAgICAgICAgICBjb2xsYXBzZWQ9e3NlbGZDb2xsYXBzZWR9XG4gICAgICAgICAgICAgIHQ9e3R9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgeyghc2VsZkNvbGxhcHNlZCB8fCAhbWluaW1pemVDb2xsYXBzZWRJdGVtcykgJiYgKFxuICAgICAgICAgICAgICA8U29ydGFibGVMaXN0IGl0ZW1zPXtpdGVtc0FycmF5fSBrZXlzPXtrZXlzfSBvblNvcnRFbmQ9e3RoaXMub25Tb3J0RW5kfT5cbiAgICAgICAgICAgICAgICB7aXRlbXMubWFwKHRoaXMucmVuZGVySXRlbSl9XG4gICAgICAgICAgICAgIDwvU29ydGFibGVMaXN0PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvQ2xhc3NOYW1lcz5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVySW5wdXQoKSB7XG4gICAgY29uc3QgeyBmb3JJRCwgY2xhc3NOYW1lV3JhcHBlciB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IHZhbHVlIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIGlkPXtmb3JJRH1cbiAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgIG9uRm9jdXM9e3RoaXMuaGFuZGxlRm9jdXN9XG4gICAgICAgIG9uQmx1cj17dGhpcy5oYW5kbGVCbHVyfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZVdyYXBwZXJ9XG4gICAgICAvPlxuICAgICk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuZ2V0VmFsdWVUeXBlKCkgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlckxpc3RDb250cm9sKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlcklucHV0KCk7XG4gICAgfVxuICB9XG59XG4iXX0= */")],
|
|
671
698
|
index: index,
|
|
672
699
|
key: key
|
|
673
700
|
}, ___EmotionJSX(StyledListItemTopBar, {
|
|
674
701
|
onCollapseToggle: null,
|
|
675
|
-
onRemove:
|
|
702
|
+
onRemove: partial(this.handleRemove, index, key),
|
|
676
703
|
dragHandle: DragHandle,
|
|
677
704
|
id: key
|
|
678
705
|
}), ___EmotionJSX(NestedObjectLabel, {
|
|
@@ -752,33 +779,4 @@ export default class ListControl extends React.Component {
|
|
|
752
779
|
return this.renderInput();
|
|
753
780
|
}
|
|
754
781
|
}
|
|
755
|
-
}
|
|
756
|
-
_defineProperty(ListControl, "propTypes", {
|
|
757
|
-
metadata: ImmutablePropTypes.map,
|
|
758
|
-
onChange: PropTypes.func.isRequired,
|
|
759
|
-
onChangeObject: PropTypes.func.isRequired,
|
|
760
|
-
onValidateObject: PropTypes.func.isRequired,
|
|
761
|
-
validate: PropTypes.func.isRequired,
|
|
762
|
-
value: ImmutablePropTypes.list,
|
|
763
|
-
field: PropTypes.object,
|
|
764
|
-
forID: PropTypes.string,
|
|
765
|
-
controlRef: PropTypes.func,
|
|
766
|
-
mediaPaths: ImmutablePropTypes.map.isRequired,
|
|
767
|
-
getAsset: PropTypes.func.isRequired,
|
|
768
|
-
onOpenMediaLibrary: PropTypes.func.isRequired,
|
|
769
|
-
onAddAsset: PropTypes.func.isRequired,
|
|
770
|
-
onRemoveInsertedMedia: PropTypes.func.isRequired,
|
|
771
|
-
classNameWrapper: PropTypes.string.isRequired,
|
|
772
|
-
setActiveStyle: PropTypes.func.isRequired,
|
|
773
|
-
setInactiveStyle: PropTypes.func.isRequired,
|
|
774
|
-
editorControl: PropTypes.elementType.isRequired,
|
|
775
|
-
resolveWidget: PropTypes.func.isRequired,
|
|
776
|
-
clearFieldErrors: PropTypes.func.isRequired,
|
|
777
|
-
fieldsErrors: ImmutablePropTypes.map.isRequired,
|
|
778
|
-
entry: ImmutablePropTypes.map.isRequired,
|
|
779
|
-
t: PropTypes.func
|
|
780
|
-
});
|
|
781
|
-
_defineProperty(ListControl, "defaultProps", {
|
|
782
|
-
value: List(),
|
|
783
|
-
parentIds: []
|
|
784
|
-
});
|
|
782
|
+
}
|