tc-checking-tool-rcl 0.9.127 → 0.9.128

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.
@@ -134,6 +134,7 @@ var name = 'Checker';
134
134
  * @param {object} parameters.targetBible - The target Bible data for the working language.
135
135
  * @param {object} parameters.targetLanguageDetails - Metadata about the target language, including book and language-specific details.
136
136
  * @param {Function} parameters.translate - A function used for string translations in the UI.
137
+ * @param {boolean} parameters.disableFontMenu - If true, the font menu will be disabled.
137
138
  */
138
139
  var Checker = function Checker(_ref) {
139
140
  var _targetLanguageDetail, _targetLanguageDetail2, _target_language$book;
@@ -153,7 +154,9 @@ var Checker = function Checker(_ref) {
153
154
  styles = _ref.styles,
154
155
  targetBible_ = _ref.targetBible,
155
156
  targetLanguageDetails = _ref.targetLanguageDetails,
156
- translate = _ref.translate;
157
+ translate = _ref.translate,
158
+ _ref$disableFontMenu = _ref.disableFontMenu,
159
+ disableFontMenu = _ref$disableFontMenu === void 0 ? false : _ref$disableFontMenu;
157
160
  // Main settings state - includes pane configuration, tool settings, and manifest data
158
161
  var _useState = (0, _react.useState)({
159
162
  paneSettings: [],
@@ -1270,7 +1273,8 @@ var Checker = function Checker(_ref) {
1270
1273
  setToolSettings: setToolSettingsScripture,
1271
1274
  showPopover: showPopover,
1272
1275
  onExpandedScripturePaneShow: null,
1273
- translate: translate
1276
+ translate: translate,
1277
+ disableFontMenu: disableFontMenu
1274
1278
  })), /*#__PURE__*/_react["default"].createElement(_CheckInfoCard["default"], {
1275
1279
  getScriptureFromReference: _getScriptureFromReference,
1276
1280
  onLinkClick: function onLinkClick() {
@@ -1360,7 +1364,8 @@ Checker.propTypes = {
1360
1364
  showDocument: _propTypes["default"].bool,
1361
1365
  targetBible: _propTypes["default"].object.isRequired,
1362
1366
  targetLanguageDetails: _propTypes["default"].object.isRequired,
1363
- translate: _propTypes["default"].func.isRequired
1367
+ translate: _propTypes["default"].func.isRequired,
1368
+ disableFontMenu: _propTypes["default"].bool
1364
1369
  };
1365
1370
  var _default = exports["default"] = Checker;
1366
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdXNmbUhlbHBlcnMiLCJyZXF1aXJlIiwiX3JlYWN0IiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfc2VsZWN0aW9uSGVscGVyIiwiX3ZlcnNlSGVscGVycyIsIl9wcm9wVHlwZXMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2xvZGFzaCIsIl9Hcm91cE1lbnVDb21wb25lbnQiLCJfd29yZEFsaWduZXJMaWIiLCJfZGVlcEVxdWFsIiwiX3R3QXJ0aWNsZUhlbHBlcnMiLCJfQ2hlY2tJbmZvQ2FyZCIsIl90bkFydGljbGVIZWxwZXJzIiwiX1NjcmlwdHVyZVBhbmUiLCJfUG9wb3ZlckNvbnRhaW5lciIsIl9Cb29rc09mVGhlQmlibGUiLCJfY29tcGxleFNjcmlwdEZvbnRzIiwiX1RyYW5zbGF0aW9uSGVscHMiLCJ0SGVscHNIZWxwZXJzIiwiX1ZlcnNlQ2hlY2siLCJfY2hlY2tJbmZvQ2FyZEhlbHBlcnMiLCJfdXRpbHMiLCJlIiwiX19lc01vZHVsZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJfdHlwZW9mIiwiaGFzIiwiZ2V0Iiwic2V0IiwiX3QiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJsZW5ndGgiLCJfbiIsIkYiLCJzIiwiZG9uZSIsInZhbHVlIiwiVHlwZUVycm9yIiwiYSIsInUiLCJuZXh0IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiX2FycmF5V2l0aG91dEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVNwcmVhZCIsImZyb20iLCJfYXJyYXlMaWtlVG9BcnJheSIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJfdG9Qcm9wZXJ0eUtleSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiX3RvUHJpbWl0aXZlIiwidG9QcmltaXRpdmUiLCJTdHJpbmciLCJOdW1iZXIiLCJfc2xpY2VkVG9BcnJheSIsIl9hcnJheVdpdGhIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsIl9ub25JdGVyYWJsZVJlc3QiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwidGVzdCIsImwiLCJsb2NhbFN0eWxlcyIsImNvbnRhaW5lckRpdiIsImRpc3BsYXkiLCJmbGV4RGlyZWN0aW9uIiwid2lkdGgiLCJoZWlnaHQiLCJjZW50ZXJEaXYiLCJvdmVyZmxvd1giLCJtYXJnaW5MZWZ0Iiwic2NyaXB0dXJlUGFuZURpdiIsImZsZXhTaHJpbmsiLCJwYWRkaW5nQm90dG9tIiwidHJhbnNsYXRpb25Xb3JkcyIsImV4cG9ydHMiLCJ0cmFuc2xhdGlvbk5vdGVzIiwibWF4aW11bVNlbGVjdGlvbnMiLCJjb25zb2xlIiwibG9nIiwiQ2hlY2tlciIsIl9yZWYiLCJfdGFyZ2V0TGFuZ3VhZ2VEZXRhaWwiLCJfdGFyZ2V0TGFuZ3VhZ2VEZXRhaWwyIiwiX3RhcmdldF9sYW5ndWFnZSRib29rIiwiYWxpZ25lZEdsQmlibGUiLCJiaWJsZXNfIiwiYmlibGVzIiwiY2hhbmdlZEN1cnJlbnRDaGVjayIsImNoYW5nZVRhcmdldFZlcnNlIiwiY2hlY2tpbmdEYXRhIiwiY2hlY2tUeXBlIiwiY29udGV4dElkIiwiZ2V0TGV4aWNvbkRhdGEiLCJnbFdvcmRzRGF0YSIsImluaXRpYWxTZXR0aW5ncyIsInNhdmVDaGVja2luZ0RhdGEiLCJzYXZlU2V0dGluZ3MiLCJzaG93RG9jdW1lbnQiLCJzdHlsZXMiLCJ0YXJnZXRCaWJsZV8iLCJ0YXJnZXRCaWJsZSIsInRhcmdldExhbmd1YWdlRGV0YWlscyIsInRyYW5zbGF0ZSIsIl91c2VTdGF0ZSIsInVzZVN0YXRlIiwicGFuZVNldHRpbmdzIiwicGFuZUtleVNldHRpbmdzIiwidG9vbHNTZXR0aW5ncyIsIm1hbmlmZXN0IiwiX3VzZVN0YXRlMiIsInNldHRpbmdzIiwiX3NldFNldHRpbmdzIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJzZXRCaWJsZXMiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsInNldFRhcmdldEJpYmxlIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJ0ZW1wQ2hlY2tpbmdEYXRhIiwic2V0VGVtcENoZWNraW5nRGF0YSIsIl91c2VTdGF0ZTkiLCJfdXNlU3RhdGUwIiwibG9jYWxDaGVja2luZ0RhdGEiLCJzZXRMb2NhbENoZWNraW5nRGF0YSIsIl91c2VTdGF0ZTEiLCJhbGlnbmVkR0xUZXh0IiwiYXJ0aWNsZSIsImN1cnJlbnRDaGVjayIsImN1cnJlbnRDaGVja2luZ0RhdGEiLCJncm91cFRpdGxlIiwiZ3JvdXBQaHJhc2UiLCJncm91cHNEYXRhIiwiZ3JvdXBzSW5kZXgiLCJpc0NvbW1lbnRDaGFuZ2VkIiwiaXNWZXJzZUNoYW5nZWQiLCJtb2RlIiwibmV3VmVyc2VUZXh0IiwicG9wb3ZlclByb3BzIiwicG9wb3ZlclZpc2liaWxpdHkiLCJzaG93SGVscHNNb2RhbCIsInNob3dIZWxwcyIsIm5ld1RhZ3MiLCJ2ZXJzZVRleHQiLCJfdXNlU3RhdGUxMCIsInN0YXRlIiwiX3NldFN0YXRlIiwic2V0U3RhdGUiLCJuZXdTdGF0ZSIsInByZXZTdGF0ZSIsImdldEN1cnJlbnRWYWx1ZUZvciIsImtleSIsImdldFRlbXBWYWx1ZUZvciIsImN1cnJlbnRTZWxlY3Rpb25zIiwidGVtcFNlbGVjdGlvbnMiLCJ0ZW1wTm90aGluZ1RvU2VsZWN0IiwiY3VycmVudE5vdGhpbmdUb1NlbGVjdCIsImdyb3Vwc0RhdGFMb2FkZWQiLCJ1cGRhdGVNb2RlRm9yU2VsZWN0aW9ucyIsIm5ld1NlbGVjdGlvbnMiLCJub3RoaW5nVG9TZWxlY3QiLCJub1NlbGVjdGlvbnMiLCJuZXdNb2RlIiwidXNlRWZmZWN0IiwiaGF2ZURhdGEiLCJncm91cHNEYXRhSW5pdGlhbGl6ZWQiLCJmbGF0dGVuZWRHcm91cERhdGEiLCJncm91cERhdGFIZWxwZXJzIiwiZmxhdHRlbkdyb3VwRGF0YSIsInBhcnNlVG5Ub0luZGV4IiwicGFyc2VUd1RvSW5kZXgiLCJjaGVjayIsImZpbmRDaGVjayIsIm1vZGlmaWVkIiwidmFsaWRhdGVTZWxlY3Rpb25zRm9yQWxsQ2hlY2tzIiwiaW52YWxpZGF0ZWQiLCJjb25jYXQiLCJfc2F2ZUNoZWNraW5nRGF0YSIsInVwZGF0ZUNvbnRleHQiLCJzZWxlY3Rpb25zIiwibmV3Q2hlY2siLCJncm91cHNJbmRleF8iLCJ1bmRlZmluZWQiLCJyZWZlcmVuY2UiLCJ2ZXJzZUhlbHBlcnMiLCJnZXRWZXJzZVRleHRGcm9tQmlibGUiLCJnZXRBbGlnbmVkR0xUZXh0IiwiZ2V0VGl0bGVGcm9tSW5kZXgiLCJncm91cElkIiwib2NjdXJyZW5jZU5vdGUiLCJnZXRQaHJhc2VGcm9tVHciLCJncm91cERhdGEiLCJhcnRpY2xlcyIsIl9hcnRpY2xlIiwiYXJ0aWNsZUlkIiwiZ3JvdXBzSWRzIiwiX2kiLCJfZ3JvdXBzSWRzIiwiX2dyb3VwSWQiLCJncm91cCIsImN1cnJlbnRBcnRpY2xlTWFya2Rvd24iLCJjb252ZXJ0TWFya2Rvd25MaW5rcyIsImdhdGV3YXlMYW5ndWFnZUlkIiwiY29tbWVudFRleHQiLCJib29rSWQiLCJib29rIiwiaWQiLCJib29rTmFtZSIsImJvb2tEZXRhaWxzIiwidGFyZ2V0TGFuZ3VhZ2VGb250IiwicHJvamVjdEZvbnQiLCJjdXJyZW50Q29udGV4dElkIiwic2V0VG9vbFNldHRpbmdzIiwiTkFNRVNQQUNFIiwiZmllbGROYW1lIiwiZmllbGRWYWx1ZSIsIl90b29sc1NldHRpbmdzIiwiY29tcG9uZW50U2V0dGluZ3MiLCJzZXRTZXR0aW5ncyIsIl9zYXZlU2V0dGluZ3MiLCJfc2V0dGluZ3MiLCJuZXdTZXR0aW5ncyIsIl9wYW5lU2V0dGluZ3MiLCJfcGFuZVNldHRpbmciLCJfcGFuZUtleVNldHRpbmdzIiwiX2kyIiwiX2tleXMiLCJkb1NhdmUiLCJzZXRUb29sU2V0dGluZ3NTY3JpcHR1cmUiLCJfaXRlcmF0b3IiLCJfc3RlcCIsImxhbmd1YWdlSWQiLCJiaWJsZUlkIiwib3duZXIiLCJlcnIiLCJhZGRPYmplY3RQcm9wZXJ0eVRvTWFuaWZlc3QiLCJfbWFuaWZlc3QiLCJhcHBTZXR0aW5ncyIsIl9hcHBTZXR0aW5ncyIsIm9wZW5BbGVydERpYWxvZyIsImNoZWNrSWZWZXJzZUNoYW5nZWQiLCJfbmV3VmVyc2VUZXh0IiwidGFyZ2V0IiwiX2lzVmVyc2VDaGFuZ2VkIiwiaGFuZGxlRWRpdFZlcnNlIiwiY2FuY2VsRWRpdFZlcnNlIiwic2F2ZUVkaXRWZXJzZSIsIl9nZXRSZWYiLCJnZXRSZWYiLCJjaGFwdGVyIiwidmVyc2UiLCJ2ZXJzZVJlZiIsInZlcnNlU3BhbiIsImJlZm9yZSIsImVkaXRUYXJnZXRWZXJzZSIsImhhbmRsZUdvVG9OZXh0IiwibmV4dENoZWNrIiwiZmluZE5leHRDaGVjayIsImNoYW5nZUN1cnJlbnRDaGVja18iLCJoYW5kbGVHb1RvUHJldmlvdXMiLCJwcmV2aW91c0NoZWNrIiwiZmluZFByZXZpb3VzQ2hlY2siLCJoYW5kbGVUYWdzQ2hlY2tib3giLCJ0YWciLCJjdXJyZW50VGFncyIsInRhZ0luZGV4IiwiaW5kZXhPZiIsIl9uZXdUYWdzIiwiY29weSIsInNwbGljZSIsInZhbGlkYXRlU2VsZWN0aW9ucyIsInZlcnNlVGV4dF8iLCJzZWxlY3Rpb25zXyIsInNlbGVjdGlvbnNIZWxwZXJzIiwidmFsaWRhdGVWZXJzZVNlbGVjdGlvbnMiLCJ1bmZpbHRlcmVkVmVyc2VUZXh0IiwidXNlTWVtbyIsInVuZmlsdGVyZWRWZXJzZVRleHRfIiwidmVyc2VEYXRhIiwiZ2V0VmVyc2VEYXRhRnJvbUJpYmxlIiwiVXNmbUZpbGVDb252ZXJzaW9uSGVscGVycyIsImdldFVzZm1Gb3JWZXJzZUNvbnRlbnQiLCJzZXRUZW1wQ2hlY2tpbmdJdGVtIiwibmV3Q2hlY2tpbmdEYXRhIiwiY2hhbmdlU2VsZWN0aW9uc0luTG9jYWxTdGF0ZSIsInRvZ2dsZU5vdGhpbmdUb1NlbGVjdCIsInNlbGVjdCIsIm5ld0NvbnRleHQiLCJub0NoZWNrIiwibmV3Q29udGV4dElkIiwic2VsZWN0aW9uc1VuY2hhbmdlZCIsImlzRXF1YWwiLCJkaXJlY3Rpb24iLCJib29rbWFya0VuYWJsZWQiLCJpc1ZlcnNlRWRpdGVkIiwiaXNWZXJzZUludmFsaWRhdGVkIiwiX3NhdmVTZWxlY3Rpb24iLCJfY2xvbmVEYXRhRm9yU2F2aW5nIiwiY2xvbmVEYXRhRm9yU2F2aW5nIiwiY2hlY2tJbkdyb3Vwc0RhdGEiLCJfY3VycmVudENoZWNrIiwiX25ld0NoZWNraW5nRGF0YSIsImRlbGV0ZVRlbXBDaGVja2luZ0RhdGEiLCJ1cGRhdGVWYWx1ZXNJbkNoZWNrRGF0YSIsIl9ncm91cHNEYXRhIiwiXyIsImNsb25lRGVlcCIsImNhdGVnb3J5IiwibmV3Q2hlY2tEYXRhIiwiX2kzIiwiX09iamVjdCRrZXlzIiwibmV3Q2hlY2tpbmdWYWx1ZSIsIl9zYXZlRGF0YSIsIm5ld0RhdGEiLCJfY2xvbmVEYXRhRm9yU2F2aW5nMiIsIl9pNCIsIl9PYmplY3Qka2V5czIiLCJjaGFuZ2VkRGF0YSIsIl9pNSIsIl9PYmplY3Qka2V5czMiLCJfdGVtcENoZWNraW5nRGF0YSIsImNhbmNlbFNlbGVjdGlvbiIsImNsZWFyU2VsZWN0aW9uIiwidG9nZ2xlQm9va21hcmsiLCJyZW1pbmRlcnMiLCJjaGFuZ2VNb2RlIiwiY2hlY2tJZkNvbW1lbnRDaGFuZ2VkIiwibmV3Y29tbWVudCIsIm9sZGNvbW1lbnQiLCJjYW5jZWxDb21tZW50Iiwic2F2ZUNvbW1lbnQiLCJuZXdDb21tZW50IiwiY29tbWVudHMiLCJoYW5kbGVDb21tZW50IiwicHJldmVudERlZmF1bHQiLCJyZWFkeVRvRGlzcGxheUNoZWNrZXIiLCJnZXRMZXhpY29uRGF0YV8iLCJsZXhpY29uSWQiLCJlbnRyeUlkIiwibGV4aWNvbkRhdGEiLCJvbkNsb3NlUG9wb3ZlciIsInNob3dQb3BvdmVyIiwidGl0bGUiLCJib2R5VGV4dCIsInBvc2l0aW9uQ29vcmQiLCJ0b2dnbGVIZWxwc01vZGFsIiwiX3Nob3dIZWxwc01vZGFsIiwidG9nZ2xlSGVscHMiLCJfc2hvd0hlbHBzIiwic2F2ZUJpYmxlVG9LZXkiLCJrZXlHcm91cCIsIm9sZFZlcnNlVGV4dCIsIl9iaWJsZXMiLCJfdGFyZ2V0QmlibGUiLCJ0YXJnZXRCb29rIiwidGFyZ2V0Q2hhcHRlciIsImNvbnZlcnRWZXJzZURhdGFUb1VTRk0iLCJjdXJyZW50Q2hhcHRlckRhdGEiLCJjdXJyZW50VmVyc2VEYXRhIiwiX0FsaWdubWVudEhlbHBlcnMkdXBkIiwiQWxpZ25tZW50SGVscGVycyIsInVwZGF0ZUFsaWdubWVudHNUb1RhcmdldFZlcnNlIiwidGFyZ2V0VmVyc2VPYmplY3RzIiwidmVyc2VPYmplY3RzIiwidXBkYXRlU2V0dGluZ3MiLCJyZW1vdmVVc2ZtTWFya2VycyIsInZhbGlkYXRlQWxsU2VsZWN0aW9uc0ZvclZlcnNlIiwidmVyc2VFZGl0cyIsIm5ld0JpYmxlcyIsIl90YXJnZXRCaWJsZSRtYW5pZmVzdCIsIl90YXJnZXRCaWJsZSRtYW5pZmVzdDIiLCJfaXRlcmF0b3IyIiwiX3N0ZXAyIiwiYmlibGUiLCJOVF9PUklHX0xBTkciLCJPVF9PUklHX0xBTkciLCJpbml0aWFsUGFuZVNldHRpbmdzIiwibGFuZ0tleSIsInBhbmUiLCJDaGVja0FyZWEiLCJmb250U2l6ZSIsImxhbmd1YWdlX25hbWUiLCJkdWJsaW5fY29yZSIsImxhbmd1YWdlIiwiX2dldFNjcmlwdHVyZUZyb21SZWZlcmVuY2UiLCJsYW5nIiwiZ2V0U2NyaXB0dXJlRnJvbVJlZmVyZW5jZSIsInRhcmdldF9sYW5ndWFnZSIsInByb2plY3QiLCJleHBhbmRlZFNjcmlwdHVyZVBhbmVUaXRsZSIsInN0eWxlUHJvcHMiLCJfY2hlY2tlclN0eWxlcyIsImNyZWF0ZUVsZW1lbnQiLCJzdHlsZSIsImNoYW5nZUN1cnJlbnRDb250ZXh0SWQiLCJjb21wbGV4U2NyaXB0Rm9udHMiLCJjdXJyZW50UGFuZVNldHRpbmdzIiwiZWRpdFZlcnNlUmVmIiwiZ2V0QXZhaWxhYmxlU2NyaXB0dXJlUGFuZVNlbGVjdGlvbnMiLCJtYWtlU3VyZUJpYmxlc0xvYWRlZEZvclRvb2wiLCJwcm9qZWN0RGV0YWlsc1JlZHVjZXIiLCJvbkV4cGFuZGVkU2NyaXB0dXJlUGFuZVNob3ciLCJvbkxpbmtDbGljayIsIm9uU2VlTW9yZUNsaWNrIiwicGhyYXNlIiwic2VlTW9yZUxhYmVsIiwic2hvd1NlZU1vcmVCdXR0b24iLCJkaWFsb2dNb2RhbFZpc2liaWxpdHkiLCJoYW5kbGVPcGVuRGlhbG9nIiwiaGFuZGxlQ2xvc2VEaWFsb2ciLCJoYW5kbGVTa2lwIiwibG9jYWxOb3RoaW5nVG9TZWxlY3QiLCJzYXZlU2VsZWN0aW9uIiwidGFncyIsIm1vZGFsQXJ0aWNsZSIsImV4cGFuZGVkSGVscHNCdXR0b25Ib3ZlclRleHQiLCJtb2RhbFRpdGxlIiwiaXNTaG93SGVscHNFeHBhbmRlZCIsIm9wZW5FeHBhbmRlZEhlbHBzTW9kYWwiLCJzaWRlYmFyVG9nZ2xlIiwiaXNTaG93SGVscHNTaWRlYmFyIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwib2JqZWN0IiwiYXJyYXkiLCJmdW5jIiwiaXNSZXF1aXJlZCIsInN0cmluZyIsImJvb2wiLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL0NoZWNrZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZSBDaGVja2VyLmpzXG4gKlxuICogQHN5bm9wc2lzXG4gKiBUaGlzIGlzIHRoZSBtYWluIGNoZWNraW5nIGNvbXBvbmVudCB0aGF0IHByb3ZpZGVzIGFuIGludGVncmF0ZWQgaW50ZXJmYWNlIGZvciBCaWJsZSB0cmFuc2xhdGlvbiBjaGVja2luZy5cbiAqIEl0IHN1cHBvcnRzIGJvdGggVHJhbnNsYXRpb24gTm90ZXMgKFROKSBhbmQgVHJhbnNsYXRpb24gV29yZHMgKFRXKSBjaGVja2luZyB3b3JrZmxvd3MuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGUgQ2hlY2tlciBjb21wb25lbnQgaXMgYSBjb21wcmVoZW5zaXZlIHRvb2wgZm9yIG1hbmFnaW5nIGFuZCBwcmVzZW50aW5nIEJpYmxlIGNoZWNraW5nIGRhdGEgYW5kIHRyYW5zbGF0aW9ucy5cbiAqIEl0IGhhbmRsZXM6XG4gKiAtIExvYWRpbmcgYW5kIGRpc3BsYXlpbmcgY2hlY2tpbmcgZGF0YSAodHJhbnNsYXRpb24gbm90ZXMgb3IgdHJhbnNsYXRpb24gd29yZHMpXG4gKiAtIE1hbmFnaW5nIHVzZXIgc2VsZWN0aW9ucyBhbmQgYW5ub3RhdGlvbnMgaW4gdmVyc2VzXG4gKiAtIFByb3ZpZGluZyBtdWx0aS1wYW5lIFNjcmlwdHVyZSB2aWV3aW5nIHdpdGggdmFyaW91cyBCaWJsZSByZXNvdXJjZXNcbiAqIC0gSGFuZGxpbmcgdmVyc2UgZWRpdGluZyBhbmQgdmFsaWRhdGlvblxuICogLSBNYW5hZ2luZyBjb21tZW50cywgYm9va21hcmtzLCBhbmQgdGFncyBmb3IgY2hlY2tzXG4gKiAtIE5hdmlnYXRpbmcgYmV0d2VlbiBjaGVja3MgKG5leHQvcHJldmlvdXMpXG4gKiAtIERpc3BsYXlpbmcgdHJhbnNsYXRpb24gaGVscHMgaW4gYW4gaW50ZWdyYXRlZCBzaWRlYmFyXG4gKiAtIFBlcnNpc3RpbmcgdXNlciBzZXR0aW5ncyBhbmQgY2hlY2tpbmcgcHJvZ3Jlc3NcbiAqXG4gKiBUaGUgY29tcG9uZW50IG1haW50YWlucyBjb21wbGV4IHN0YXRlIGluY2x1ZGluZzpcbiAqIC0gQ3VycmVudCBjaGVjayBkYXRhIGFuZCBjb250ZXh0XG4gKiAtIFVzZXIgc2VsZWN0aW9ucyBhbmQgdGVtcG9yYXJ5IGNoYW5nZXNcbiAqIC0gUGFuZSBzZXR0aW5ncyBmb3IgU2NyaXB0dXJlIGRpc3BsYXlcbiAqIC0gVG9vbC1zcGVjaWZpYyBzZXR0aW5nc1xuICogLSBVSSBzdGF0ZSAobW9kZXMsIG1vZGFscywgcG9wb3ZlcnMpXG4gKlxuICogQHJlcXVpcmVtZW50c1xuICogLSBSZWFjdCAxOC4zLjErXG4gKiAtIHdvcmQtYWxpZ25lci1saWIgZm9yIHZlcnNlIGFuZCBhbGlnbm1lbnQgaGVscGVyc1xuICogLSBkZWVwLWVxdWFsIGZvciBvYmplY3QgY29tcGFyaXNvblxuICogLSBsb2Rhc2ggZm9yIGRlZXAgY2xvbmluZ1xuICogLSBNYXRlcmlhbC1VSSBjb21wb25lbnRzIGZvciBVSSBlbGVtZW50c1xuICpcbiAqIEBkZXBlbmRlbmNpZXNcbiAqIC0gR3JvdXBNZW51Q29tcG9uZW50OiBOYXZpZ2F0aW9uIG1lbnUgZm9yIGNoZWNrc1xuICogLSBDaGVja0luZm9DYXJkOiBEaXNwbGF5cyBjaGVjayB0aXRsZSBhbmQgcGhyYXNlXG4gKiAtIFNjcmlwdHVyZVBhbmU6IE11bHRpLXBhbmUgU2NyaXB0dXJlIHZpZXdlclxuICogLSBUcmFuc2xhdGlvbkhlbHBzOiBTaWRlYmFyIGZvciB0cmFuc2xhdGlvbiBoZWxwIGFydGljbGVzXG4gKiAtIFZlcnNlQ2hlY2s6IE1haW4gY2hlY2tpbmcgaW50ZXJmYWNlIGZvciB2ZXJzZXNcbiAqIC0gUG9wb3ZlckNvbnRhaW5lcjogRGlzcGxheXMgY29udGV4dHVhbCBpbmZvcm1hdGlvblxuICovXG5pbXBvcnQgeyByZW1vdmVVc2ZtTWFya2VycyB9IGZyb20gJy4uL3V0aWxzL3VzZm1IZWxwZXJzJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHZhbGlkYXRlU2VsZWN0aW9uc0ZvckFsbENoZWNrcyB9IGZyb20gJy4uL3V0aWxzL3NlbGVjdGlvbkhlbHBlcidcbmltcG9ydCB7IGdldFJlZiwgZ2V0VmVyc2VEYXRhRnJvbUJpYmxlIH0gZnJvbSAnLi4vdGNfdWlfdG9vbGtpdC9TY3JpcHR1cmVQYW5lL2hlbHBlcnMvdmVyc2VIZWxwZXJzJ1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJ1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJ1xuaW1wb3J0IEdyb3VwTWVudUNvbXBvbmVudCBmcm9tICcuL0dyb3VwTWVudUNvbXBvbmVudCdcbmltcG9ydCB7XG4gIGdyb3VwRGF0YUhlbHBlcnMsXG4gIHNlbGVjdGlvbnNIZWxwZXJzLFxuICBVc2ZtRmlsZUNvbnZlcnNpb25IZWxwZXJzLFxuICB2ZXJzZUhlbHBlcnMsXG4gIEFsaWdubWVudEhlbHBlcnMsXG59IGZyb20gJ3dvcmQtYWxpZ25lci1saWInXG5pbXBvcnQgaXNFcXVhbCBmcm9tICdkZWVwLWVxdWFsJ1xuaW1wb3J0IHtcbiAgZmluZENoZWNrLFxuICBmaW5kTmV4dENoZWNrLFxuICBmaW5kUHJldmlvdXNDaGVjayxcbiAgZ2V0QWxpZ25lZEdMVGV4dCxcbiAgZ2V0UGhyYXNlRnJvbVR3LFxuICBnZXRUaXRsZUZyb21JbmRleCxcbiAgcGFyc2VUd1RvSW5kZXgsXG59IGZyb20gJy4uL2hlbHBlcnMvdHJhbnNsYXRpb25IZWxwcy90d0FydGljbGVIZWxwZXJzJ1xuaW1wb3J0IENoZWNrSW5mb0NhcmQgZnJvbSAnLi4vdGNfdWlfdG9vbGtpdC9DaGVja0luZm9DYXJkJ1xuaW1wb3J0IHsgcGFyc2VUblRvSW5kZXggfSBmcm9tICcuLi9oZWxwZXJzL3RyYW5zbGF0aW9uSGVscHMvdG5BcnRpY2xlSGVscGVycydcbmltcG9ydCBTY3JpcHR1cmVQYW5lIGZyb20gJy4uL3RjX3VpX3Rvb2xraXQvU2NyaXB0dXJlUGFuZSdcbmltcG9ydCBQb3BvdmVyQ29udGFpbmVyIGZyb20gJy4uL2NvbnRhaW5lcnMvUG9wb3ZlckNvbnRhaW5lcidcbmltcG9ydCB7IE5UX09SSUdfTEFORywgT1RfT1JJR19MQU5HIH0gZnJvbSAnLi4vY29tbW9uL0Jvb2tzT2ZUaGVCaWJsZSdcbmltcG9ydCBjb21wbGV4U2NyaXB0Rm9udHMgZnJvbSAnLi4vY29tbW9uL2NvbXBsZXhTY3JpcHRGb250cydcbmltcG9ydCBUcmFuc2xhdGlvbkhlbHBzIGZyb20gJy4uL3RjX3VpX3Rvb2xraXQvVHJhbnNsYXRpb25IZWxwcydcbmltcG9ydCAqIGFzIHRIZWxwc0hlbHBlcnMgZnJvbSAnLi4vaGVscGVycy90SGVscHNIZWxwZXJzJ1xuaW1wb3J0IFZlcnNlQ2hlY2sgZnJvbSAnLi4vdGNfdWlfdG9vbGtpdC9WZXJzZUNoZWNrJ1xuaW1wb3J0IHsgZ2V0U2NyaXB0dXJlRnJvbVJlZmVyZW5jZSB9IGZyb20gJy4uL2hlbHBlcnMvY2hlY2tJbmZvQ2FyZEhlbHBlcnMnXG5pbXBvcnQgeyBnZXRSZWZlcmVuY2VTdHJGcm9tVGFyZ2V0QmlibGUgfSBmcm9tICcuLi90Y191aV90b29sa2l0L1NjcmlwdHVyZVBhbmUvaGVscGVycy91dGlscydcblxuY29uc3QgbG9jYWxTdHlsZXMgPSB7XG4gIGNvbnRhaW5lckRpdjoge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICB3aWR0aDogJzk3dncnLFxuICAgIGhlaWdodDogJzY1dncnLFxuICB9LFxuICBjZW50ZXJEaXY6IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgd2lkdGg6ICc4NSUnLFxuICAgIG92ZXJmbG93WDogJ2F1dG8nLFxuICAgIG1hcmdpbkxlZnQ6ICcxMHB4JyxcbiAgfSxcbiAgc2NyaXB0dXJlUGFuZURpdjoge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4U2hyaW5rOiAnMCcsXG4gICAgaGVpZ2h0OiAnMjUwcHgnLFxuICAgIHBhZGRpbmdCb3R0b206ICcyMHB4JyxcbiAgfSxcbn1cblxuZXhwb3J0IGNvbnN0IHRyYW5zbGF0aW9uV29yZHMgPSAndHJhbnNsYXRpb25Xb3JkcydcbmV4cG9ydCBjb25zdCB0cmFuc2xhdGlvbk5vdGVzID0gJ3RyYW5zbGF0aW9uTm90ZXMnXG5jb25zdCBtYXhpbXVtU2VsZWN0aW9ucyA9IDEwXG5cbmNvbnNvbGUubG9nKCdDaGVja2VyLmpzIC0gc3RhcnR1cCcpXG5jb25zdCBuYW1lID0gJ0NoZWNrZXInXG5cbi8qKlxuICogQG5hbWVzcGFjZSBDaGVja2VyXG4gKiBUaGUgQ2hlY2tlciBjb21wb25lbnQgaXMgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIGFuZCBwcmVzZW50aW5nIEJpYmxlIGNoZWNraW5nIGRhdGEgYW5kIHRyYW5zbGF0aW9ucy5cbiAqIEl0IGhhbmRsZXMgc3RhdGUgdXBkYXRlcywgc2V0dGluZ3MgbWFuYWdlbWVudCwgYW5kIGVuc3VyZXMgdGhlIG5lY2Vzc2FyeSBkYXRhIGlzIGxvYWRlZCBhbmQgZGlzcGxheWVkIHRvIHRoZSB1c2VyLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBwYXJhbWV0ZXJzIC0gQW4gb2JqZWN0IHdpdGggaW5pdGlhbGl6YXRpb24gcGFyYW1ldGVycyBmb3IgdGhlIENoZWNrZXIgY29tcG9uZW50LlxuICogQHBhcmFtIHtvYmplY3R9IHBhcmFtZXRlcnMuYWxpZ25lZEdsQmlibGUgLSBUaGUgYWxpZ25lZCBHYXRld2F5IExhbmd1YWdlIEJpYmxlIGRhdGEgdXNlZCBmb3IgdHJhbnNsYXRpb25zLlxuICogQHBhcmFtIHtvYmplY3R9IHBhcmFtZXRlcnMuYmlibGVzIC0gQmlibGUgZGF0YSBmb3IgdmFyaW91cyBsYW5ndWFnZXMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXJhbWV0ZXJzLmNoYW5nZWRDdXJyZW50Q2hlY2sgLSBjYWxsYmFjayB0byBub3RpZnkgb2YgY2hhbmdlcyBpbiBjb250ZXh0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcGFyYW1ldGVycy5jaGFuZ2VUYXJnZXRWZXJzZSAtIEEgZnVuY3Rpb24gdG8gdXBkYXRlIHRoZSBjdXJyZW50IHZlcnNlIGJlaW5nIGNoZWNrZWQuXG4gKiBAcGFyYW0ge29iamVjdH0gcGFyYW1ldGVycy5jaGVja2luZ0RhdGEgLSBEYXRhIHJlbGF0ZWQgdG8gY2hlY2tzIChlLmcuLCB0cmFuc2xhdGlvbiBub3RlcyBvciB0cmFuc2xhdGlvbiB3b3JkcykuXG4gKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1ldGVycy5jaGVja1R5cGUgLSBUaGUgdHlwZSBvZiBjaGVjayBiZWluZyBwZXJmb3JtZWQgKGUuZy4sIHRyYW5zbGF0aW9uIG5vdGVzLCB0cmFuc2xhdGlvbiB3b3JkcykuXG4gKiBAcGFyYW0ge29iamVjdH0gcGFyYW1ldGVycy5jb250ZXh0SWQgLSBPYmplY3QgY29udGFpbmluZyBtZXRhZGF0YSBhYm91dCB0aGUgY3VycmVudCBncm91cC92ZXJzZSBiZWluZyB3b3JrZWQgb24uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXJhbWV0ZXJzLmdldExleGljb25EYXRhIC0gRnVuY3Rpb24gdG8gcmV0cmlldmUgbGV4aWNvbiBkYXRhLlxuICogQHBhcmFtIHtvYmplY3R9IHBhcmFtZXRlcnMuZ2xXb3Jkc0RhdGEgLSBEYXRhIHJlbGF0ZWQgdG8gR2F0ZXdheSBMYW5ndWFnZSB3b3JkcyBhbmQgYWxpZ25tZW50IGluZm9ybWF0aW9uLlxuICogQHBhcmFtIHtvYmplY3R9IHBhcmFtZXRlcnMuaW5pdGlhbFNldHRpbmdzIC0gVGhlIGluaXRpYWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgZm9yIHRoZSBDaGVja2VyIGNvbXBvbmVudC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHBhcmFtZXRlcnMuc2F2ZUNoZWNraW5nRGF0YSAtIEZ1bmN0aW9uIHRvIHNhdmUgdGhlIG1vZGlmaWVkIGNoZWNraW5nIGRhdGEuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXJhbWV0ZXJzLnNhdmVTZXR0aW5ncyAtIEZ1bmN0aW9uIHRvIHBlcnNpc3QgdXNlcidzIGNvbXBvbmVudCBzZXR0aW5ncy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHBhcmFtZXRlcnMuc2hvd0RvY3VtZW50IC0gRnVuY3Rpb24gdG8gZGlzcGxheSBhIGRvY3VtZW50IGluIHRoZSBpbnRlcmZhY2UuXG4gKiBAcGFyYW0ge29iamVjdH0gcGFyYW1ldGVycy5zdHlsZXMgLSBTdHlsaW5nIGluZm9ybWF0aW9uIHRvIGN1c3RvbWl6ZSB0aGUgY29tcG9uZW50J3MgYXBwZWFyYW5jZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBwYXJhbWV0ZXJzLnRhcmdldEJpYmxlIC0gVGhlIHRhcmdldCBCaWJsZSBkYXRhIGZvciB0aGUgd29ya2luZyBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBwYXJhbWV0ZXJzLnRhcmdldExhbmd1YWdlRGV0YWlscyAtIE1ldGFkYXRhIGFib3V0IHRoZSB0YXJnZXQgbGFuZ3VhZ2UsIGluY2x1ZGluZyBib29rIGFuZCBsYW5ndWFnZS1zcGVjaWZpYyBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcGFyYW1ldGVycy50cmFuc2xhdGUgLSBBIGZ1bmN0aW9uIHVzZWQgZm9yIHN0cmluZyB0cmFuc2xhdGlvbnMgaW4gdGhlIFVJLlxuICovXG5jb25zdCBDaGVja2VyID0gKHtcbiAgYWxpZ25lZEdsQmlibGUsXG4gIGJpYmxlczogYmlibGVzXyxcbiAgY2hhbmdlZEN1cnJlbnRDaGVjayxcbiAgY2hhbmdlVGFyZ2V0VmVyc2UsXG4gIGNoZWNraW5nRGF0YSxcbiAgY2hlY2tUeXBlLFxuICBjb250ZXh0SWQsXG4gIGdldExleGljb25EYXRhLFxuICBnbFdvcmRzRGF0YSxcbiAgaW5pdGlhbFNldHRpbmdzLFxuICBzYXZlQ2hlY2tpbmdEYXRhLFxuICBzYXZlU2V0dGluZ3MsXG4gIHNob3dEb2N1bWVudCxcbiAgc3R5bGVzLFxuICB0YXJnZXRCaWJsZTogdGFyZ2V0QmlibGVfLFxuICB0YXJnZXRMYW5ndWFnZURldGFpbHMsXG4gIHRyYW5zbGF0ZSxcbn0pID0+IHtcbiAgLy8gTWFpbiBzZXR0aW5ncyBzdGF0ZSAtIGluY2x1ZGVzIHBhbmUgY29uZmlndXJhdGlvbiwgdG9vbCBzZXR0aW5ncywgYW5kIG1hbmlmZXN0IGRhdGFcbiAgY29uc3QgW3NldHRpbmdzLCBfc2V0U2V0dGluZ3NdID0gdXNlU3RhdGUoe1xuICAgIHBhbmVTZXR0aW5nczogW10sXG4gICAgcGFuZUtleVNldHRpbmdzOiB7fSxcbiAgICB0b29sc1NldHRpbmdzOiB7fSxcbiAgICBtYW5pZmVzdDoge30sXG4gIH0pXG4gIGNvbnN0IHsgcGFuZVNldHRpbmdzLCBwYW5lS2V5U2V0dGluZ3MsIHRvb2xzU2V0dGluZ3MsIG1hbmlmZXN0IH0gPSBzZXR0aW5nc1xuXG4gIC8vIEJpYmxlIGRhdGEgb3JnYW5pemVkIGJ5IGxhbmd1YWdlIGFuZCBJRFxuICBjb25zdCBbYmlibGVzLCBzZXRCaWJsZXNdID0gdXNlU3RhdGUoe30pXG5cbiAgLy8gQ3VycmVudCB0YXJnZXQgQmlibGUgYmVpbmcgY2hlY2tlZFxuICBjb25zdCBbdGFyZ2V0QmlibGUsIHNldFRhcmdldEJpYmxlXSA9IHVzZVN0YXRlKHRhcmdldEJpYmxlXylcblxuICAvLyBUZW1wb3JhcnkgY2hlY2tpbmcgZGF0YSBmb3IgdW5zYXZlZCBjaGFuZ2VzXG4gIGNvbnN0IFt0ZW1wQ2hlY2tpbmdEYXRhLCBzZXRUZW1wQ2hlY2tpbmdEYXRhXSA9IHVzZVN0YXRlKG51bGwpXG5cbiAgLy8gTG9jYWwgY2hlY2tpbmcgZGF0YSBmb3IgY3VycmVudCBzZXNzaW9uXG4gIGNvbnN0IFtsb2NhbENoZWNraW5nRGF0YSwgc2V0TG9jYWxDaGVja2luZ0RhdGFdID0gdXNlU3RhdGUobnVsbClcblxuICAvLyBNYWluIGNvbXBvbmVudCBzdGF0ZVxuICBjb25zdCBbc3RhdGUsIF9zZXRTdGF0ZV0gPSB1c2VTdGF0ZSh7XG4gICAgYWxpZ25lZEdMVGV4dDogJycsIC8vIEdhdGV3YXkgTGFuZ3VhZ2UgdGV4dCBhbGlnbmVkIHRvIG9yaWdpbmFsXG4gICAgYXJ0aWNsZTogbnVsbCwgLy8gQ3VycmVudCB0cmFuc2xhdGlvbiBoZWxwIGFydGljbGVcbiAgICBjdXJyZW50Q2hlY2s6IG51bGwsIC8vIEN1cnJlbnQgY2hlY2sgYmVpbmcgd29ya2VkIG9uXG4gICAgY3VycmVudENoZWNraW5nRGF0YTogbnVsbCwgLy8gQWxsIGNoZWNraW5nIGRhdGEgZm9yIGN1cnJlbnQgYm9va1xuICAgIGdyb3VwVGl0bGU6ICcnLCAvLyBUaXRsZSBvZiBjdXJyZW50IGNoZWNrIGdyb3VwXG4gICAgZ3JvdXBQaHJhc2U6ICcnLCAvLyBQaHJhc2Ugb3Igb2NjdXJyZW5jZSBub3RlIGZvciBjdXJyZW50IGNoZWNrXG4gICAgZ3JvdXBzRGF0YTogbnVsbCwgLy8gRmxhdHRlbmVkIGdyb3VwIGRhdGEgZm9yIGFsbCBjaGVja3NcbiAgICBncm91cHNJbmRleDogbnVsbCwgLy8gSW5kZXggb2YgYWxsIGNoZWNrIGdyb3Vwc1xuICAgIGlzQ29tbWVudENoYW5nZWQ6IGZhbHNlLCAvLyBXaGV0aGVyIGNvbW1lbnQgaGFzIHVuc2F2ZWQgY2hhbmdlc1xuICAgIGlzVmVyc2VDaGFuZ2VkOiBmYWxzZSwgLy8gV2hldGhlciB2ZXJzZSBoYXMgdW5zYXZlZCBjaGFuZ2VzXG4gICAgbW9kZTogJ2RlZmF1bHQnLCAvLyBDdXJyZW50IFVJIG1vZGUgKGRlZmF1bHQsIHNlbGVjdCwgZWRpdCwgY29tbWVudClcbiAgICBuZXdWZXJzZVRleHQ6IG51bGwsIC8vIE5ldyB2ZXJzZSB0ZXh0IGR1cmluZyBlZGl0aW5nXG4gICAgcG9wb3ZlclByb3BzOiB7XG4gICAgICBwb3BvdmVyVmlzaWJpbGl0eTogZmFsc2UsXG4gICAgfSxcbiAgICBzaG93SGVscHNNb2RhbDogZmFsc2UsIC8vIFdoZXRoZXIgaGVscHMgbW9kYWwgaXMgc2hvd25cbiAgICBzaG93SGVscHM6IHRydWUsIC8vIFdoZXRoZXIgaGVscHMgc2lkZWJhciBpcyBzaG93blxuICAgIG5ld1RhZ3M6IG51bGwsIC8vIE5ldyB0YWdzIGJlaW5nIGFkZGVkXG4gICAgdmVyc2VUZXh0OiAnJywgLy8gQ3VycmVudCB2ZXJzZSB0ZXh0XG4gIH0pXG5cbiAgY29uc3Qge1xuICAgIGFsaWduZWRHTFRleHQsXG4gICAgYXJ0aWNsZSxcbiAgICBjdXJyZW50Q2hlY2ssXG4gICAgY3VycmVudENoZWNraW5nRGF0YSxcbiAgICBncm91cFRpdGxlLFxuICAgIGdyb3VwUGhyYXNlLFxuICAgIGdyb3Vwc0RhdGEsXG4gICAgZ3JvdXBzSW5kZXgsXG4gICAgaXNDb21tZW50Q2hhbmdlZCxcbiAgICBpc1ZlcnNlQ2hhbmdlZCxcbiAgICBtb2RlLFxuICAgIG5ld1ZlcnNlVGV4dCxcbiAgICBwb3BvdmVyUHJvcHMsXG4gICAgc2hvd0hlbHBzTW9kYWwsXG4gICAgc2hvd0hlbHBzLFxuICAgIG5ld1RhZ3MsXG4gICAgdmVyc2VUZXh0LFxuICB9ID0gc3RhdGVcblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgc3RhdGUgb2JqZWN0IHdpdGggbmV3IHZhbHVlc1xuICAgKiBAcGFyYW0ge29iamVjdH0gbmV3U3RhdGUgLSBPYmplY3QgY29udGFpbmluZyBzdGF0ZSBwcm9wZXJ0aWVzIHRvIHVwZGF0ZVxuICAgKi9cbiAgZnVuY3Rpb24gc2V0U3RhdGUobmV3U3RhdGUpIHtcbiAgICBfc2V0U3RhdGUocHJldlN0YXRlID0+ICh7IC4uLnByZXZTdGF0ZSwgLi4ubmV3U3RhdGUgfSkpXG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgY3VycmVudCBzYXZlZCB2YWx1ZSBmb3IgYSBjaGVjayBwcm9wZXJ0eVxuICAgKiBGYWxscyBiYWNrIHRvIGxvY2FsIGNoZWNraW5nIGRhdGEgaWYgYXZhaWxhYmxlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBQcm9wZXJ0eSBuYW1lXG4gICAqIEByZXR1cm5zIHsqfSBDdXJyZW50IHZhbHVlXG4gICAqL1xuICBmdW5jdGlvbiBnZXRDdXJyZW50VmFsdWVGb3Ioa2V5KSB7XG4gICAgaWYgKGxvY2FsQ2hlY2tpbmdEYXRhPy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICByZXR1cm4gbG9jYWxDaGVja2luZ0RhdGFba2V5XVxuICAgIH1cbiAgICByZXR1cm4gY3VycmVudENoZWNrPy5ba2V5XVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHRlbXBvcmFyeSAodW5zYXZlZCkgdmFsdWUgZm9yIGEgY2hlY2sgcHJvcGVydHlcbiAgICogRmFsbHMgYmFjayB0aHJvdWdoIGxvY2FsIGNoZWNraW5nIGRhdGEgdG8gY3VycmVudCBjaGVja1xuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gUHJvcGVydHkgbmFtZVxuICAgKiBAcmV0dXJucyB7Kn0gVGVtcG9yYXJ5IHZhbHVlXG4gICAqL1xuICBmdW5jdGlvbiBnZXRUZW1wVmFsdWVGb3Ioa2V5KSB7XG4gICAgaWYgKHRlbXBDaGVja2luZ0RhdGE/Lmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgIHJldHVybiB0ZW1wQ2hlY2tpbmdEYXRhW2tleV1cbiAgICB9XG4gICAgcmV0dXJuIGdldEN1cnJlbnRWYWx1ZUZvcihrZXkpXG4gIH1cblxuICBjb25zdCBjdXJyZW50U2VsZWN0aW9ucyA9IGdldEN1cnJlbnRWYWx1ZUZvcignc2VsZWN0aW9ucycpIHx8IFtdXG4gIGNvbnN0IHRlbXBTZWxlY3Rpb25zID0gZ2V0VGVtcFZhbHVlRm9yKCdzZWxlY3Rpb25zJykgfHwgW11cbiAgY29uc3QgdGVtcE5vdGhpbmdUb1NlbGVjdCA9IGdldFRlbXBWYWx1ZUZvcignbm90aGluZ1RvU2VsZWN0JylcbiAgY29uc3QgY3VycmVudE5vdGhpbmdUb1NlbGVjdCA9IGdldEN1cnJlbnRWYWx1ZUZvcignbm90aGluZ1RvU2VsZWN0JylcbiAgY29uc3QgZ3JvdXBzRGF0YUxvYWRlZCA9ICEhZ3JvdXBzRGF0YVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBVSSBtb2RlIGJhc2VkIG9uIHNlbGVjdGlvbnMgc3RhdGVcbiAgICogU3dpdGNoZXMgdG8gJ3NlbGVjdCcgbW9kZSBpZiBubyBzZWxlY3Rpb25zIGFuZCBub3RoaW5nIGlzIG1hcmtlZCBhcyB1bnNlbGVjdGFibGVcbiAgICogQHBhcmFtIHtBcnJheX0gbmV3U2VsZWN0aW9ucyAtIEN1cnJlbnQgc2VsZWN0aW9ucyBhcnJheVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IG5vdGhpbmdUb1NlbGVjdCAtIFdoZXRoZXIgdmVyc2UgaXMgbWFya2VkIGFzIGhhdmluZyBub3RoaW5nIHRvIHNlbGVjdFxuICAgKi9cbiAgZnVuY3Rpb24gdXBkYXRlTW9kZUZvclNlbGVjdGlvbnMobmV3U2VsZWN0aW9ucywgbm90aGluZ1RvU2VsZWN0KSB7XG4gICAgY29uc3Qgbm9TZWxlY3Rpb25zID0gIW5ld1NlbGVjdGlvbnM/Lmxlbmd0aFxuICAgIGNvbnN0IG5ld01vZGUgPSBub1NlbGVjdGlvbnMgJiYgIW5vdGhpbmdUb1NlbGVjdCA/ICdzZWxlY3QnIDogJ2RlZmF1bHQnXG4gICAgc2V0U3RhdGUoe1xuICAgICAgbW9kZTogbmV3TW9kZSxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEVmZmVjdCBob29rIHRvIGluaXRpYWxpemUgY2hlY2tpbmcgZGF0YSB3aGVuIGNoZWNraW5nRGF0YSBvciBnbFdvcmRzRGF0YSBjaGFuZ2VzXG4gICAqIEZsYXR0ZW5zIGdyb3VwIGRhdGEsIGNyZWF0ZXMgaW5kZXgsIGZpbmRzIGluaXRpYWwgY2hlY2ssIGFuZCB2YWxpZGF0ZXMgYWxsIGNoZWNrc1xuICAgKi9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYXZlRGF0YSA9XG4gICAgICBjaGVja2luZ0RhdGEgJiZcbiAgICAgIE9iamVjdC5rZXlzKGNoZWNraW5nRGF0YSkubGVuZ3RoICYmXG4gICAgICBnbFdvcmRzRGF0YSAmJlxuICAgICAgT2JqZWN0LmtleXMoZ2xXb3Jkc0RhdGEpLmxlbmd0aFxuICAgIGNvbnN0IGdyb3Vwc0RhdGFJbml0aWFsaXplZCA9IGdyb3Vwc0RhdGEgJiYgT2JqZWN0LmtleXMoZ3JvdXBzRGF0YSkubGVuZ3RoXG4gICAgaWYgKGhhdmVEYXRhICYmICFncm91cHNEYXRhSW5pdGlhbGl6ZWQpIHtcbiAgICAgIGxldCBmbGF0dGVuZWRHcm91cERhdGEgPSBudWxsXG4gICAgICBsZXQgZ3JvdXBzSW5kZXggPSBudWxsXG4gICAgICBpZiAoY2hlY2tpbmdEYXRhKSB7XG4gICAgICAgIGZsYXR0ZW5lZEdyb3VwRGF0YSA9IGdyb3VwRGF0YUhlbHBlcnMuZmxhdHRlbkdyb3VwRGF0YShjaGVja2luZ0RhdGEpXG4gICAgICB9XG5cbiAgICAgIGlmIChnbFdvcmRzRGF0YSkge1xuICAgICAgICBpZiAoY2hlY2tUeXBlID09PSB0cmFuc2xhdGlvbk5vdGVzKSB7XG4gICAgICAgICAgZ3JvdXBzSW5kZXggPSBwYXJzZVRuVG9JbmRleChnbFdvcmRzRGF0YSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBncm91cHNJbmRleCA9IHBhcnNlVHdUb0luZGV4KGdsV29yZHNEYXRhKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNoZWNrID0gZmluZENoZWNrKGZsYXR0ZW5lZEdyb3VwRGF0YSwgY29udGV4dElkLCB0cnVlKVxuICAgICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICAgIGdyb3Vwc0RhdGE6IGZsYXR0ZW5lZEdyb3VwRGF0YSxcbiAgICAgICAgZ3JvdXBzSW5kZXgsXG4gICAgICAgIGN1cnJlbnRDaGVja2luZ0RhdGE6IGNoZWNraW5nRGF0YSxcbiAgICAgICAgY3VycmVudENoZWNrOiBjaGVjayxcbiAgICAgICAgbW9kaWZpZWQ6IGZhbHNlLFxuICAgICAgICBpc0NvbW1lbnRDaGFuZ2VkOiBmYWxzZSxcbiAgICAgIH1cbiAgICAgIGNvbnNvbGUubG9nKCdkZWJ1ZycsIHRhcmdldEJpYmxlLCBmbGF0dGVuZWRHcm91cERhdGEpXG4gICAgICAvLyB2YWxpZGF0ZSBhbGwgY2hlY2tzXG4gICAgICB2YWxpZGF0ZVNlbGVjdGlvbnNGb3JBbGxDaGVja3MoXG4gICAgICAgIHRhcmdldEJpYmxlLFxuICAgICAgICBmbGF0dGVuZWRHcm91cERhdGEsXG4gICAgICAgIChjaGVjaywgaW52YWxpZGF0ZWQpID0+IHtcbiAgICAgICAgICBpZiAoY2hlY2spIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICBgJHtuYW1lfS1zYXZlRWRpdFZlcnNlIC0gY2hlY2sgdmFsaWRhdGlvbiBjaGFuZ2VkYCxcbiAgICAgICAgICAgICAgY2hlY2tcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIF9zYXZlQ2hlY2tpbmdEYXRhKGNoZWNrLCB7IGludmFsaWRhdGVkIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApXG5cbiAgICAgIHNldFN0YXRlKG5ld1N0YXRlKVxuXG4gICAgICBpZiAoZmxhdHRlbmVkR3JvdXBEYXRhICYmIGNoZWNrPy5jb250ZXh0SWQpIHtcbiAgICAgICAgdXBkYXRlQ29udGV4dChjaGVjaywgZ3JvdXBzSW5kZXgpXG4gICAgICAgIHVwZGF0ZU1vZGVGb3JTZWxlY3Rpb25zKGNoZWNrPy5zZWxlY3Rpb25zLCBjaGVjaz8ubm90aGluZ1RvU2VsZWN0KVxuICAgICAgfVxuICAgIH1cbiAgfSwgW2NvbnRleHRJZCwgY2hlY2tpbmdEYXRhLCBnbFdvcmRzRGF0YV0pXG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGNvbnRleHQgYW5kIHJlbGF0ZWQgZGF0YSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgY2hlY2sgYW5kIGdyb3VwIGluZGV4LlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gbmV3Q2hlY2sgLSBUaGUgbmV3IGNoZWNrIG9iamVjdCBjb250YWluaW5nIGNvbnRleHQgaW5mb3JtYXRpb24uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbZ3JvdXBzSW5kZXhfPWdyb3Vwc0luZGV4XSAtIEFuIG9wdGlvbmFsIGdyb3VwIGluZGV4IG9iamVjdCwgZGVmYXVsdHMgdG8gdGhlIGdsb2JhbCB2YXJpYWJsZSBgZ3JvdXBzSW5kZXhgLlxuICAgKiBAcmV0dXJuIHt2b2lkfSBEb2VzIG5vdCByZXR1cm4gYSB2YWx1ZS4gVXBkYXRlcyB0aGUgc3RhdGUgb2YgdGhlIGFwcGxpY2F0aW9uIHdpdGggbmV3IGNvbnRleHQgZGF0YS5cbiAgICovXG4gIGZ1bmN0aW9uIHVwZGF0ZUNvbnRleHQobmV3Q2hlY2ssIGdyb3Vwc0luZGV4XyA9IGdyb3Vwc0luZGV4KSB7XG4gICAgY29uc3QgY29udGV4dElkID0gbmV3Q2hlY2s/LmNvbnRleHRJZFxuICAgIGNvbnN0IHJlZmVyZW5jZSA9IGNvbnRleHRJZD8ucmVmZXJlbmNlXG4gICAgY29uc3QgdmVyc2VUZXh0ID0gdmVyc2VIZWxwZXJzLmdldFZlcnNlVGV4dEZyb21CaWJsZSh0YXJnZXRCaWJsZSwgcmVmZXJlbmNlKVxuICAgIGNvbnN0IGFsaWduZWRHTFRleHQgPSBnZXRBbGlnbmVkR0xUZXh0KGFsaWduZWRHbEJpYmxlLCBjb250ZXh0SWQpXG4gICAgY29uc3QgZ3JvdXBUaXRsZSA9IGdldFRpdGxlRnJvbUluZGV4KGdyb3Vwc0luZGV4XywgY29udGV4dElkPy5ncm91cElkKVxuICAgIGNvbnN0IGdyb3VwUGhyYXNlID1cbiAgICAgIGNoZWNrVHlwZSA9PT0gdHJhbnNsYXRpb25Ob3Rlc1xuICAgICAgICA/IGNvbnRleHRJZD8ub2NjdXJyZW5jZU5vdGVcbiAgICAgICAgOiBnZXRQaHJhc2VGcm9tVHcoZ2xXb3Jkc0RhdGEsIGNvbnRleHRJZD8uZ3JvdXBJZClcblxuICAgIGxldCBncm91cERhdGFcbiAgICBpZiAoZ2xXb3Jkc0RhdGEpIHtcbiAgICAgIGlmIChjaGVja1R5cGUgPT09IHRyYW5zbGF0aW9uTm90ZXMpIHtcbiAgICAgICAgZ3JvdXBEYXRhID0ge1xuICAgICAgICAgIHRyYW5zbGF0ZToge1xuICAgICAgICAgICAgYXJ0aWNsZXM6IGdsV29yZHNEYXRhPy50cmFuc2xhdGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ3JvdXBEYXRhID0ge1xuICAgICAgICAgIC4uLmdsV29yZHNEYXRhLFxuICAgICAgICAgIG1hbmlmZXN0OiB7fSxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBfYXJ0aWNsZVxuICAgIGNvbnN0IGFydGljbGVJZCA9IGNvbnRleHRJZD8uZ3JvdXBJZFxuICAgIGNvbnN0IGdyb3Vwc0lkcyA9IE9iamVjdC5rZXlzKGdyb3VwRGF0YSlcbiAgICBmb3IgKGNvbnN0IF9ncm91cElkIG9mIGdyb3Vwc0lkcykge1xuICAgICAgY29uc3QgZ3JvdXAgPSBncm91cERhdGFbX2dyb3VwSWRdXG4gICAgICBjb25zdCBhcnRpY2xlcyA9IGdyb3VwPy5hcnRpY2xlcyB8fCB7fVxuICAgICAgX2FydGljbGUgPSBhcnRpY2xlcz8uW2FydGljbGVJZF0gfHwgbnVsbFxuICAgICAgaWYgKF9hcnRpY2xlKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRBcnRpY2xlTWFya2Rvd24gPSB0SGVscHNIZWxwZXJzLmNvbnZlcnRNYXJrZG93bkxpbmtzKFxuICAgICAgICAgIF9hcnRpY2xlLFxuICAgICAgICAgIGdhdGV3YXlMYW5ndWFnZUlkXG4gICAgICAgIClcbiAgICAgICAgX2FydGljbGUgPSBjdXJyZW50QXJ0aWNsZU1hcmtkb3duXG4gICAgICAgIC8vIGNvbnN0IHRIZWxwc01vZGFsTWFya2Rvd24gPSB0SGVscHNIZWxwZXJzLmNvbnZlcnRNYXJrZG93bkxpbmtzKG1vZGFsQXJ0aWNsZSwgZ2F0ZXdheUxhbmd1YWdlQ29kZSwgYXJ0aWNsZUNhdGVnb3J5KTtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRTdGF0ZSh7XG4gICAgICBhbGlnbmVkR0xUZXh0LFxuICAgICAgY3VycmVudENoZWNrOiBuZXdDaGVjayxcbiAgICAgIHZlcnNlVGV4dCxcbiAgICAgIGdyb3VwVGl0bGUsXG4gICAgICBncm91cFBocmFzZSxcbiAgICAgIGFydGljbGU6IF9hcnRpY2xlLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBjb21tZW50VGV4dCA9IGdldEN1cnJlbnRWYWx1ZUZvcignY29tbWVudHMnKSB8fCAnJ1xuICBjb25zdCBib29rSWQgPSB0YXJnZXRMYW5ndWFnZURldGFpbHM/LmJvb2s/LmlkXG4gIGNvbnN0IGJvb2tOYW1lID0gdGFyZ2V0TGFuZ3VhZ2VEZXRhaWxzPy5ib29rPy5uYW1lXG4gIGNvbnN0IGJvb2tEZXRhaWxzID0ge1xuICAgIGlkOiBib29rSWQsXG4gICAgbmFtZTogYm9va05hbWUsXG4gIH1cbiAgY29uc3QgZ2F0ZXdheUxhbmd1YWdlSWQgPSB0YXJnZXRMYW5ndWFnZURldGFpbHM/LmdhdGV3YXlMYW5ndWFnZUlkXG4gIGNvbnN0IHRhcmdldExhbmd1YWdlRm9udCA9IG1hbmlmZXN0Py5wcm9qZWN0Rm9udCB8fCAnJ1xuICBjb25zdCBjdXJyZW50Q29udGV4dElkID0gY3VycmVudENoZWNrPy5jb250ZXh0SWRcblxuICAvKipcbiAgICogVXBkYXRlcyB0b29sLXNwZWNpZmljIHNldHRpbmdzIGFuZCBwZXJzaXN0cyB0aGVtXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBOQU1FU1BBQ0UgLSBUb29sIG5hbWVzcGFjZSAoZS5nLiwgJ1NjcmlwdHVyZVBhbmUnKVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lIC0gU2V0dGluZyBmaWVsZCBuYW1lXG4gICAqIEBwYXJhbSB7Kn0gZmllbGRWYWx1ZSAtIFNldHRpbmcgdmFsdWVcbiAgICovXG4gIGNvbnN0IHNldFRvb2xTZXR0aW5ncyA9IChOQU1FU1BBQ0UsIGZpZWxkTmFtZSwgZmllbGRWYWx1ZSkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGAke25hbWV9LXNldFRvb2xTZXR0aW5ncyAke2ZpZWxkTmFtZX09JHtmaWVsZFZhbHVlfWApXG4gICAgaWYgKHRvb2xzU2V0dGluZ3MpIHtcbiAgICAgIC8vIERlZXAgY2xvbmluZyBvYmplY3QgdG8gYXZvaWQgbW9kaWZ5aW5nIG9yaWdpbmFsIG9iamVjdFxuICAgICAgY29uc3QgX3Rvb2xzU2V0dGluZ3MgPSB7IC4uLnRvb2xzU2V0dGluZ3MgfVxuICAgICAgbGV0IGNvbXBvbmVudFNldHRpbmdzID0gX3Rvb2xzU2V0dGluZ3M/LltOQU1FU1BBQ0VdXG4gICAgICBpZiAoIWNvbXBvbmVudFNldHRpbmdzKSB7XG4gICAgICAgIGNvbXBvbmVudFNldHRpbmdzID0ge31cbiAgICAgICAgX3Rvb2xzU2V0dGluZ3NbTkFNRVNQQUNFXSA9IGNvbXBvbmVudFNldHRpbmdzXG4gICAgICB9XG4gICAgICBjb21wb25lbnRTZXR0aW5nc1tmaWVsZE5hbWVdID0gZmllbGRWYWx1ZVxuICAgICAgc2V0U2V0dGluZ3MoeyB0b29sc1NldHRpbmdzOiBfdG9vbHNTZXR0aW5ncyB9LCB0cnVlKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJzaXN0cyBzZXR0aW5ncyB0byBzdG9yYWdlIGFmdGVyIHJlbW92aW5nIEJpYmxlIGRhdGEgdG8gcmVkdWNlIHNpemVcbiAgICogQ3JlYXRlcyBzaGFsbG93IGNvcGllcyB0byBhdm9pZCBtb2RpZnlpbmcgb3JpZ2luYWwgb2JqZWN0c1xuICAgKiBAcGFyYW0ge29iamVjdH0gX3NldHRpbmdzIC0gU2V0dGluZ3Mgb2JqZWN0IHRvIHNhdmVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGZ1bmN0aW9uIF9zYXZlU2V0dGluZ3MoX3NldHRpbmdzKSB7XG4gICAgaWYgKHNhdmVTZXR0aW5ncyAmJiBfc2V0dGluZ3MpIHtcbiAgICAgIGNvbnN0IG5ld1NldHRpbmdzID0geyAuLi5fc2V0dGluZ3MgfVxuICAgICAgZGVsZXRlIG5ld1NldHRpbmdzLm1hbmlmZXN0XG4gICAgICBjb25zdCBfcGFuZVNldHRpbmdzID0gWy4uLm5ld1NldHRpbmdzLnBhbmVTZXR0aW5nc11cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgX3BhbmVTZXR0aW5ncy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBfcGFuZVNldHRpbmcgPSB7IC4uLl9wYW5lU2V0dGluZ3NbaV0gfSAvLyBzaGFsbG93IGNvcHlcbiAgICAgICAgaWYgKF9wYW5lU2V0dGluZz8uYm9vaykge1xuICAgICAgICAgIGRlbGV0ZSBfcGFuZVNldHRpbmcuYm9vayAvLyByZW1vdmUgYWxsIHRoZSBib29rIGRhdGEgYmVmb3JlIHNhdmluZ1xuICAgICAgICB9XG4gICAgICAgIF9wYW5lU2V0dGluZ3NbaV0gPSBfcGFuZVNldHRpbmdcbiAgICAgIH1cbiAgICAgIG5ld1NldHRpbmdzLnBhbmVTZXR0aW5ncyA9IF9wYW5lU2V0dGluZ3NcblxuICAgICAgY29uc3QgX3BhbmVLZXlTZXR0aW5ncyA9IHsgLi4ubmV3U2V0dGluZ3MucGFuZUtleVNldHRpbmdzIH1cbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhfcGFuZUtleVNldHRpbmdzKVxuICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgICBjb25zdCBfcGFuZVNldHRpbmcgPSB7IC4uLl9wYW5lS2V5U2V0dGluZ3Nba2V5XSB9IC8vIHNoYWxsb3cgY29weVxuICAgICAgICBpZiAoX3BhbmVTZXR0aW5nPy5ib29rKSB7XG4gICAgICAgICAgZGVsZXRlIF9wYW5lU2V0dGluZy5ib29rIC8vIHJlbW92ZSBhbGwgdGhlIGJvb2sgZGF0YSBiZWZvcmUgc2F2aW5nXG4gICAgICAgIH1cbiAgICAgICAgX3BhbmVLZXlTZXR0aW5nc1trZXldID0gX3BhbmVTZXR0aW5nXG4gICAgICB9XG4gICAgICBuZXdTZXR0aW5ncy5wYW5lS2V5U2V0dGluZ3MgPSBfcGFuZUtleVNldHRpbmdzXG5cbiAgICAgIHNhdmVTZXR0aW5ncyhuZXdTZXR0aW5ncylcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBzZXR0aW5ncyBzdGF0ZSBhbmQgb3B0aW9uYWxseSBwZXJzaXN0cyB0aGVtXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBuZXdTZXR0aW5ncyAtIE5ldyBzZXR0aW5ncyB0byBtZXJnZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGRvU2F2ZSAtIFdoZXRoZXIgdG8gcGVyc2lzdCBzZXR0aW5nc1xuICAgKi9cbiAgZnVuY3Rpb24gc2V0U2V0dGluZ3MobmV3U2V0dGluZ3MsIGRvU2F2ZSA9IGZhbHNlKSB7XG4gICAgY29uc3QgX3NldHRpbmdzID0ge1xuICAgICAgLi4uc2V0dGluZ3MsXG4gICAgICAuLi5uZXdTZXR0aW5ncyxcbiAgICB9XG5cbiAgICBfc2V0U2V0dGluZ3MoX3NldHRpbmdzKVxuICAgIGRvU2F2ZSAmJiBfc2F2ZVNldHRpbmdzKF9zZXR0aW5ncylcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIFNjcmlwdHVyZSBwYW5lIHNldHRpbmdzIHdpdGggbmV3IHBhbmUgY29uZmlndXJhdGlvbnNcbiAgICogTWFpbnRhaW5zIGEga2V5LWJhc2VkIGxvb2t1cCBmb3IgcGFuZSBzZXR0aW5ncyBieSBsYW5ndWFnZS9iaWJsZS9vd25lclxuICAgKiBAcGFyYW0ge3N0cmluZ30gTkFNRVNQQUNFIC0gVG9vbCBuYW1lc3BhY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZSAtIFNldHRpbmcgZmllbGQgbmFtZVxuICAgKiBAcGFyYW0ge0FycmF5fSBfcGFuZVNldHRpbmdzIC0gQXJyYXkgb2YgcGFuZSBzZXR0aW5nIG9iamVjdHNcbiAgICovXG4gIGNvbnN0IHNldFRvb2xTZXR0aW5nc1NjcmlwdHVyZSA9IChOQU1FU1BBQ0UsIGZpZWxkTmFtZSwgX3BhbmVTZXR0aW5ncykgPT4ge1xuICAgIGNvbnNvbGUubG9nKGAke25hbWV9LXNldFRvb2xTZXR0aW5nc1NjcmlwdHVyZSAke2ZpZWxkTmFtZX1gLCBfcGFuZVNldHRpbmdzKVxuICAgIGNvbnN0IF9wYW5lS2V5U2V0dGluZ3MgPSB7IC4uLnBhbmVLZXlTZXR0aW5ncyB9XG5cbiAgICBmb3IgKGNvbnN0IHBhbmVTZXR0aW5ncyBvZiBfcGFuZVNldHRpbmdzKSB7XG4gICAgICBjb25zdCBsYW5ndWFnZUlkID0gcGFuZVNldHRpbmdzPy5sYW5ndWFnZUlkXG4gICAgICBjb25zdCBrZXkgPSBgJHtsYW5ndWFnZUlkfS8ke3BhbmVTZXR0aW5ncz8uYmlibGVJZH0vJHtwYW5lU2V0dGluZ3M/Lm93bmVyfWBcbiAgICAgIF9wYW5lS2V5U2V0dGluZ3Nba2V5XSA9IHBhbmVTZXR0aW5nc1xuICAgIH1cblxuICAgIGNvbnN0IF9zZXR0aW5ncyA9IHtcbiAgICAgIHBhbmVTZXR0aW5nczogX3BhbmVTZXR0aW5ncyxcbiAgICAgIHBhbmVLZXlTZXR0aW5nczogX3BhbmVLZXlTZXR0aW5ncyxcbiAgICB9XG5cbiAgICBzZXRTZXR0aW5ncyhfc2V0dGluZ3MsIHRydWUpXG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHByb3BlcnR5IHRvIHRoZSBtYW5pZmVzdCBhbmQgYXBwIHNldHRpbmdzXG4gICAqIFVzZWQgZm9yIHBlcnNpc3RpbmcgdXNlciBwcmVmZXJlbmNlcyBsaWtlIGZvbnRzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWUgLSBQcm9wZXJ0eSBuYW1lXG4gICAqIEBwYXJhbSB7Kn0gZmllbGRWYWx1ZSAtIFByb3BlcnR5IHZhbHVlXG4gICAqL1xuICBjb25zdCBhZGRPYmplY3RQcm9wZXJ0eVRvTWFuaWZlc3QgPSAoZmllbGROYW1lLCBmaWVsZFZhbHVlKSA9PiB7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgJHtuYW1lfS1hZGRPYmplY3RQcm9wZXJ0eVRvTWFuaWZlc3QgJHtmaWVsZE5hbWV9PSR7ZmllbGRWYWx1ZX1gXG4gICAgKVxuICAgIGlmIChtYW5pZmVzdCkge1xuICAgICAgY29uc3QgX21hbmlmZXN0ID0ge1xuICAgICAgICAuLi5tYW5pZmVzdCxcbiAgICAgICAgW2ZpZWxkTmFtZV06IGZpZWxkVmFsdWUsXG4gICAgICB9XG5cbiAgICAgIC8vIGFsc28gc2F2ZSB0aGlzIGluIGFwcFNldHRpbmdzXG4gICAgICBjb25zdCBhcHBTZXR0aW5ncyA9IHNldHRpbmdzLmFwcFNldHRpbmdzIHx8IHt9XG4gICAgICBjb25zdCBfYXBwU2V0dGluZ3MgPSB7XG4gICAgICAgIC4uLmFwcFNldHRpbmdzLFxuICAgICAgICBbZmllbGROYW1lXTogZmllbGRWYWx1ZSxcbiAgICAgIH1cblxuICAgICAgc2V0U2V0dGluZ3MoXG4gICAgICAgIHtcbiAgICAgICAgICBtYW5pZmVzdDogX21hbmlmZXN0LFxuICAgICAgICAgIGFwcFNldHRpbmdzOiBfYXBwU2V0dGluZ3MsXG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICAvLyBFdmVudCBoYW5kbGVycyBmb3IgdmFyaW91cyB1c2VyIGFjdGlvbnNcblxuICAvKipcbiAgICogT3BlbnMgYW4gYWxlcnQgZGlhbG9nIChwbGFjZWhvbGRlciBpbXBsZW1lbnRhdGlvbilcbiAgICovXG4gIGNvbnN0IG9wZW5BbGVydERpYWxvZyA9ICgpID0+IHtcbiAgICBjb25zb2xlLmxvZyhgJHtuYW1lfS1vcGVuQWxlcnREaWFsb2dgKSAvLyBUT0RPIC0gZmxlc2ggb3V0XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHZlcnNlIGNvbnRlbnQgaGFzIGNoYW5nZWQgZnJvbSBvcmlnaW5hbFxuICAgKiBAcGFyYW0ge0V2ZW50fSBlIC0gSW5wdXQgZXZlbnRcbiAgICovXG4gIGNvbnN0IGNoZWNrSWZWZXJzZUNoYW5nZWQgPSBlID0+IHtcbiAgICBjb25zb2xlLmxvZyhgJHtuYW1lfS1jaGVja0lmVmVyc2VDaGFuZ2VkYClcbiAgICBjb25zdCBfbmV3VmVyc2VUZXh0ID0gZS50YXJnZXQudmFsdWVcbiAgICBjb25zdCBfaXNWZXJzZUNoYW5nZWQgPSBfbmV3VmVyc2VUZXh0ICE9PSB2ZXJzZVRleHRcbiAgICBzZXRTdGF0ZSh7IGlzVmVyc2VDaGFuZ2VkOiBfaXNWZXJzZUNoYW5nZWQgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHZlcnNlIHRleHQgZWRpdGluZ1xuICAgKiBAcGFyYW0ge0V2ZW50fSBlIC0gSW5wdXQgZXZlbnQgd2l0aCBuZXcgdmVyc2UgdGV4dFxuICAgKi9cbiAgY29uc3QgaGFuZGxlRWRpdFZlcnNlID0gZSA9PiB7XG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0taGFuZGxlRWRpdFZlcnNlYClcbiAgICBjb25zdCBfbmV3VmVyc2VUZXh0ID0gZS50YXJnZXQudmFsdWVcbiAgICBzZXRTdGF0ZSh7IG5ld1ZlcnNlVGV4dDogX25ld1ZlcnNlVGV4dCB9KVxuICB9XG5cbiAgLyoqXG4gICAqIENhbmNlbHMgdmVyc2UgZWRpdGluZyBhbmQgcmVzZXRzIHN0YXRlXG4gICAqL1xuICBjb25zdCBjYW5jZWxFZGl0VmVyc2UgPSAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0tY2FuY2VsRWRpdFZlcnNlYClcbiAgICBzZXRTdGF0ZSh7IG5ld1ZlcnNlVGV4dDogbnVsbCwgbmV3VGFnczogW10sIG1vZGU6ICdkZWZhdWx0JyB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIGVkaXRlZCB2ZXJzZSB0ZXh0IGFuZCB1cGRhdGVzIGFsaWdubWVudHNcbiAgICogTWFya3MgY2hlY2sgYXMgaGF2aW5nIHZlcnNlIGVkaXRzXG4gICAqL1xuICBjb25zdCBzYXZlRWRpdFZlcnNlID0gKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGAke25hbWV9LXNhdmVFZGl0VmVyc2VgKVxuICAgIGNvbnN0IHsgY2hhcHRlciwgdmVyc2UgfSA9IGdldFJlZih0YXJnZXRCaWJsZSxjdXJyZW50Q29udGV4dElkLnJlZmVyZW5jZS5jaGFwdGVyLGN1cnJlbnRDb250ZXh0SWQucmVmZXJlbmNlLnZlcnNlKVxuICAgIFxuICAgIGNvbnN0IHZlcnNlUmVmID0gY3VycmVudENvbnRleHRJZC52ZXJzZVNwYW4gfHwgdmVyc2UgLy8gaWYgaW4gdmVyc2Ugc3BhbiwgdXNlIGl0XG4gICAgY29uc3QgYmVmb3JlID0gdGFyZ2V0QmlibGVbY2hhcHRlcl1bdmVyc2VSZWZdXG5cbiAgICBzZXRTdGF0ZSh7XG4gICAgICBuZXdWZXJzZVRleHQ6IG51bGwsXG4gICAgICBuZXdUYWdzOiBbXSxcbiAgICAgIG1vZGU6ICdkZWZhdWx0JyxcbiAgICAgIGlzVmVyc2VDaGFuZ2VkOiBmYWxzZSxcbiAgICB9KVxuICAgIGVkaXRUYXJnZXRWZXJzZShjaGFwdGVyLCB2ZXJzZVJlZiwgYmVmb3JlLCBuZXdWZXJzZVRleHQpXG4gIH1cblxuICAvKipcbiAgICogTmF2aWdhdGVzIHRvIHRoZSBuZXh0IGNoZWNrIGluIHRoZSBzZXF1ZW5jZVxuICAgKi9cbiAgZnVuY3Rpb24gaGFuZGxlR29Ub05leHQoKSB7XG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0taGFuZGxlR29Ub05leHRgKVxuICAgIGNvbnN0IG5leHRDaGVjayA9IGZpbmROZXh0Q2hlY2soZ3JvdXBzRGF0YSwgY3VycmVudENvbnRleHRJZCwgZmFsc2UpXG4gICAgY2hhbmdlQ3VycmVudENoZWNrXyhuZXh0Q2hlY2ssIHRydWUpXG4gIH1cblxuICAvKipcbiAgICogTmF2aWdhdGVzIHRvIHRoZSBwcmV2aW91cyBjaGVjayBpbiB0aGUgc2VxdWVuY2VcbiAgICovXG4gIGZ1bmN0aW9uIGhhbmRsZUdvVG9QcmV2aW91cygpIHtcbiAgICBjb25zb2xlLmxvZyhgJHtuYW1lfS1oYW5kbGVHb1RvUHJldmlvdXNgKVxuICAgIGNvbnN0IHByZXZpb3VzQ2hlY2sgPSBmaW5kUHJldmlvdXNDaGVjayhncm91cHNEYXRhLCBjdXJyZW50Q29udGV4dElkLCBmYWxzZSlcbiAgICBjaGFuZ2VDdXJyZW50Q2hlY2tfKHByZXZpb3VzQ2hlY2ssIHRydWUpXG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBjaGVja2JveCBjaGFuZ2VzIGZvciB0YWdzXG4gICAqIEFkZHMgb3IgcmVtb3ZlcyB0YWdzIGZyb20gdGhlIGN1cnJlbnQgbGlzdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFnIC0gVGFnIGlkZW50aWZpZXJcbiAgICovXG4gIGNvbnN0IGhhbmRsZVRhZ3NDaGVja2JveCA9IHRhZyA9PiB7XG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0taGFuZGxlVGFnc0NoZWNrYm94YCwgdGFnKVxuICAgIGNvbnN0IGN1cnJlbnRUYWdzID0gbmV3VGFncyB8fCBbXVxuICAgIGNvbnN0IHRhZ0luZGV4ID0gY3VycmVudFRhZ3MuaW5kZXhPZih0YWcpXG4gICAgbGV0IF9uZXdUYWdzXG5cbiAgICBpZiAodGFnSW5kZXggPiAtMSkge1xuICAgICAgY29uc3QgY29weSA9IGN1cnJlbnRUYWdzLnNsaWNlKDApXG4gICAgICBjb3B5LnNwbGljZSh0YWdJbmRleCwgMSlcbiAgICAgIF9uZXdUYWdzID0gY29weVxuICAgIH0gZWxzZSB7XG4gICAgICBfbmV3VGFncyA9IFsuLi5jdXJyZW50VGFncywgdGFnXVxuICAgIH1cblxuICAgIHNldFN0YXRlKHsgbmV3VGFnczogX25ld1RhZ3MgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgc2VsZWN0aW9ucyBhZ2FpbnN0IHZlcnNlIHRleHRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZlcnNlVGV4dF8gLSBWZXJzZSB0ZXh0IHRvIHZhbGlkYXRlIGFnYWluc3RcbiAgICogQHBhcmFtIHtBcnJheX0gc2VsZWN0aW9uc18gLSBTZWxlY3Rpb25zIHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHNlbGVjdGlvbnMgYXJlIHZhbGlkXG4gICAqL1xuICBjb25zdCB2YWxpZGF0ZVNlbGVjdGlvbnMgPSAodmVyc2VUZXh0Xywgc2VsZWN0aW9uc18pID0+IHtcbiAgICBjb25zb2xlLmxvZyhgJHtuYW1lfS12YWxpZGF0ZVNlbGVjdGlvbnNgLCBzZWxlY3Rpb25zXylcbiAgICByZXR1cm4gc2VsZWN0aW9uc0hlbHBlcnMudmFsaWRhdGVWZXJzZVNlbGVjdGlvbnModmVyc2VUZXh0Xywgc2VsZWN0aW9uc18pXG4gIH1cblxuICAvKipcbiAgICogTWVtb2l6ZWQgY29tcHV0YXRpb24gb2YgdW5maWx0ZXJlZCB2ZXJzZSB0ZXh0IGluY2x1ZGluZyBVU0ZNIG1hcmtlcnNcbiAgICogVXNlZCBmb3IgZGlzcGxheWluZyBhbmQgZWRpdGluZyBjb21wbGV0ZSB2ZXJzZSBkYXRhXG4gICAqL1xuICBjb25zdCB1bmZpbHRlcmVkVmVyc2VUZXh0ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgbGV0IHVuZmlsdGVyZWRWZXJzZVRleHRfID0gJydcbiAgICBjb25zdCByZWZlcmVuY2UgPSBjdXJyZW50Q29udGV4dElkPy5yZWZlcmVuY2VcbiAgICBjb25zdCBjaGFwdGVyID0gcmVmZXJlbmNlPy5jaGFwdGVyXG4gICAgY29uc3QgdmVyc2UgPSByZWZlcmVuY2U/LnZlcnNlXG4gICAgaWYgKGNoYXB0ZXIgJiYgdmVyc2UpIHtcbiAgICAgIGNvbnN0IHZlcnNlRGF0YSA9IGdldFZlcnNlRGF0YUZyb21CaWJsZSh0YXJnZXRCaWJsZSxjaGFwdGVyLHZlcnNlKS52ZXJzZURhdGFcbiAgICAgIGlmICh2ZXJzZURhdGEpIHtcbiAgICAgICAgdW5maWx0ZXJlZFZlcnNlVGV4dF8gPSB2ZXJzZURhdGFcbiAgICAgICAgaWYgKHR5cGVvZiB2ZXJzZURhdGEgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdW5maWx0ZXJlZFZlcnNlVGV4dF8gPVxuICAgICAgICAgICAgVXNmbUZpbGVDb252ZXJzaW9uSGVscGVycy5nZXRVc2ZtRm9yVmVyc2VDb250ZW50KHZlcnNlRGF0YSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmZpbHRlcmVkVmVyc2VUZXh0X1xuICB9LCBbdGFyZ2V0QmlibGUsIGN1cnJlbnRDb250ZXh0SWRdKVxuXG4gIC8qKlxuICAgKiBTZXRzIGEgdGVtcG9yYXJ5IHZhbHVlIGZvciBhIGNoZWNraW5nIGRhdGEgcHJvcGVydHlcbiAgICogVXNlZCBmb3IgdHJhY2tpbmcgdW5zYXZlZCBjaGFuZ2VzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBQcm9wZXJ0eSBuYW1lXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWUgLSBQcm9wZXJ0eSB2YWx1ZVxuICAgKi9cbiAgY29uc3Qgc2V0VGVtcENoZWNraW5nSXRlbSA9IChrZXksIHZhbHVlKSA9PiB7XG4gICAgY29uc3QgbmV3Q2hlY2tpbmdEYXRhID0gdGVtcENoZWNraW5nRGF0YSA/IHsgLi4udGVtcENoZWNraW5nRGF0YSB9IDoge31cbiAgICBuZXdDaGVja2luZ0RhdGFba2V5XSA9IHZhbHVlXG4gICAgc2V0VGVtcENoZWNraW5nRGF0YShuZXdDaGVja2luZ0RhdGEpXG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBzZWxlY3Rpb25zIGluIHRlbXBvcmFyeSBzdGF0ZSB3aXRob3V0IHNhdmluZ1xuICAgKiBAcGFyYW0ge0FycmF5fSBzZWxlY3Rpb25zIC0gTmV3IHNlbGVjdGlvbnMgYXJyYXlcbiAgICovXG4gIGNvbnN0IGNoYW5nZVNlbGVjdGlvbnNJbkxvY2FsU3RhdGUgPSBzZWxlY3Rpb25zID0+IHtcbiAgICBjb25zb2xlLmxvZyhgJHtuYW1lfS1jaGFuZ2VTZWxlY3Rpb25zSW5Mb2NhbFN0YXRlYCwgc2VsZWN0aW9ucylcbiAgICBzZXRUZW1wQ2hlY2tpbmdJdGVtKCdzZWxlY3Rpb25zJywgc2VsZWN0aW9ucylcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIHRoZSBcIm5vdGhpbmcgdG8gc2VsZWN0XCIgZmxhZyBmb3IgY3VycmVudCBjaGVja1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdCAtIE5ldyBzdGF0ZSB2YWx1ZVxuICAgKi9cbiAgY29uc3QgdG9nZ2xlTm90aGluZ1RvU2VsZWN0ID0gc2VsZWN0ID0+IHtcbiAgICBjb25zb2xlLmxvZyhgJHtuYW1lfS10b2dnbGVOb3RoaW5nVG9TZWxlY3RgLCBzZWxlY3QpXG4gICAgc2V0VGVtcENoZWNraW5nSXRlbSgnbm90aGluZ1RvU2VsZWN0Jywgc2VsZWN0KVxuICB9XG5cbiAgLyoqXG4gICAqIENoYW5nZXMgdGhlIGN1cnJlbnQgY2hlY2sgYmVpbmcgd29ya2VkIG9uXG4gICAqIFZhbGlkYXRlcyBmb3IgdW5zYXZlZCBjaGFuZ2VzIGJlZm9yZSBzd2l0Y2hpbmdcbiAgICogQHBhcmFtIHtvYmplY3R9IG5ld0NvbnRleHQgLSBOZXcgY2hlY2sgY29udGV4dFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IG5vQ2hlY2sgLSBTa2lwIHZhbGlkYXRpb24gaWYgdHJ1ZVxuICAgKi9cbiAgY29uc3QgY2hhbmdlQ3VycmVudENoZWNrXyA9IChuZXdDb250ZXh0LCBub0NoZWNrID0gZmFsc2UpID0+IHtcbiAgICBjb25zdCBuZXdDb250ZXh0SWQgPSBuZXdDb250ZXh0Py5jb250ZXh0SWRcbiAgICBjb25zb2xlLmxvZyhgJHtuYW1lfS1jaGFuZ2VDdXJyZW50Q29udGV4dElkYCwgbmV3Q29udGV4dElkKVxuXG4gICAgY29uc3Qgc2VsZWN0aW9uc1VuY2hhbmdlZCA9IGlzRXF1YWwoY3VycmVudFNlbGVjdGlvbnMsIHRlbXBTZWxlY3Rpb25zKVxuICAgIGlmIChub0NoZWNrIHx8IHNlbGVjdGlvbnNVbmNoYW5nZWQpIHtcbiAgICAgIGlmIChuZXdDb250ZXh0SWQpIHtcbiAgICAgICAgbGV0IGNoZWNrID0gZmluZENoZWNrKGdyb3Vwc0RhdGEsIG5ld0NvbnRleHRJZCwgZmFsc2UpXG4gICAgICAgIHVwZGF0ZUNvbnRleHQobmV3Q29udGV4dClcbiAgICAgICAgaWYgKGNoZWNrKSB7XG4gICAgICAgICAgc2V0TG9jYWxDaGVja2luZ0RhdGEobnVsbClcbiAgICAgICAgICBzZXRUZW1wQ2hlY2tpbmdEYXRhKG51bGwpXG4gICAgICAgICAgdXBkYXRlTW9kZUZvclNlbGVjdGlvbnMoY2hlY2suc2VsZWN0aW9ucywgY2hlY2subm90aGluZ1RvU2VsZWN0KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKCdDaGVja2VyLmNoYW5nZUN1cnJlbnRDb250ZXh0SWQgLSB1bnNhdmVkIGNoYW5nZXMnKVxuICAgIH1cbiAgICBjaGFuZ2VkQ3VycmVudENoZWNrICYmIGNoYW5nZWRDdXJyZW50Q2hlY2sobmV3Q29udGV4dClcbiAgfVxuXG4gIGNvbnN0IGRpcmVjdGlvbiA9ICdsdHInXG4gIGNvbnN0IGJvb2ttYXJrRW5hYmxlZCA9IGdldEN1cnJlbnRWYWx1ZUZvcigncmVtaW5kZXJzJylcbiAgY29uc3QgaXNWZXJzZUVkaXRlZCA9ICEhZ2V0Q3VycmVudFZhbHVlRm9yKCd2ZXJzZUVkaXRzJylcbiAgY29uc3QgaXNWZXJzZUludmFsaWRhdGVkID0gISFnZXRDdXJyZW50VmFsdWVGb3IoJ2ludmFsaWRhdGVkJylcblxuICAvKipcbiAgICogQ2hhbmdlcyB0aGUgY3VycmVudCBjaGVjayBiZWluZyB3b3JrZWQgb25cbiAgICogVmFsaWRhdGVzIGZvciB1bnNhdmVkIGNoYW5nZXMgYmVmb3JlIHN3aXRjaGluZ1xuICAgKiBAcGFyYW0ge29iamVjdH0gbmV3Q29udGV4dCAtIE5ldyBjaGVjayBjb250ZXh0XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gbm9DaGVjayAtIFNraXAgdmFsaWRhdGlvbiBpZiB0cnVlXG4gICAqL1xuICBjb25zdCBfc2F2ZVNlbGVjdGlvbiA9ICgpID0+IHtcbiAgICBjb25zb2xlLmxvZyhgJHtuYW1lfS1fc2F2ZVNlbGVjdGlvbiBwZXJzaXN0IHRvIGZpbGVgKVxuICAgIGNvbnN0IHsgY2hlY2tJbkdyb3Vwc0RhdGEsIF9jdXJyZW50Q2hlY2ssIG5ld1N0YXRlLCBfbmV3Q2hlY2tpbmdEYXRhIH0gPVxuICAgICAgY2xvbmVEYXRhRm9yU2F2aW5nKClcblxuICAgIGlmIChfY3VycmVudENoZWNrICYmIG5ld1N0YXRlKSB7XG4gICAgICBpZiAodGVtcE5vdGhpbmdUb1NlbGVjdCkge1xuICAgICAgICBfbmV3Q2hlY2tpbmdEYXRhLm5vdGhpbmdUb1NlbGVjdCA9IHRlbXBOb3RoaW5nVG9TZWxlY3RcbiAgICAgICAgX25ld0NoZWNraW5nRGF0YS5zZWxlY3Rpb25zID0gZmFsc2VcbiAgICAgICAgX25ld0NoZWNraW5nRGF0YS5pbnZhbGlkYXRlZCA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGVtcFNlbGVjdGlvbnMubGVuZ3RoIDw9IDApIHtcbiAgICAgICAgICBfbmV3Q2hlY2tpbmdEYXRhLnNlbGVjdGlvbnMgPSBmYWxzZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF9uZXdDaGVja2luZ0RhdGEuc2VsZWN0aW9ucyA9IHRlbXBTZWxlY3Rpb25zXG4gICAgICAgIH1cbiAgICAgICAgX25ld0NoZWNraW5nRGF0YS5ub3RoaW5nVG9TZWxlY3QgPSBmYWxzZVxuICAgICAgICBfbmV3Q2hlY2tpbmdEYXRhLmludmFsaWRhdGVkID0gZmFsc2VcbiAgICAgIH1cblxuICAgICAgc2V0TG9jYWxDaGVja2luZ0RhdGEoX25ld0NoZWNraW5nRGF0YSlcbiAgICAgIGRlbGV0ZVRlbXBDaGVja2luZ0RhdGEoJ25vdGhpbmdUb1NlbGVjdCcpXG4gICAgICBkZWxldGVUZW1wQ2hlY2tpbmdEYXRhKCdzZWxlY3Rpb25zJylcbiAgICAgIGRlbGV0ZVRlbXBDaGVja2luZ0RhdGEoJ2ludmFsaWRhdGVkJylcblxuICAgICAgdXBkYXRlVmFsdWVzSW5DaGVja0RhdGEoXG4gICAgICAgIF9jdXJyZW50Q2hlY2ssXG4gICAgICAgIGNoZWNrSW5Hcm91cHNEYXRhLFxuICAgICAgICBfbmV3Q2hlY2tpbmdEYXRhXG4gICAgICApXG5cbiAgICAgIHNldFN0YXRlKG5ld1N0YXRlKVxuICAgICAgc2F2ZUNoZWNraW5nRGF0YSAmJiBzYXZlQ2hlY2tpbmdEYXRhKG5ld1N0YXRlKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9uZXMgY3VycmVudCBkYXRhIHN0cnVjdHVyZXMgZm9yIHNhdmluZyBtb2RpZmljYXRpb25zXG4gICAqIENyZWF0ZXMgZGVlcCBjb3BpZXMgdG8gYXZvaWQgbXV0YXRpbmcgb3JpZ2luYWwgc3RhdGVcbiAgICogQHJldHVybnMge29iamVjdH0gT2JqZWN0IGNvbnRhaW5pbmcgY2xvbmVkIGRhdGEgc3RydWN0dXJlc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZnVuY3Rpb24gY2xvbmVEYXRhRm9yU2F2aW5nKCkge1xuICAgIGNvbnN0IF9ncm91cHNEYXRhID0gXy5jbG9uZURlZXAoZ3JvdXBzRGF0YSlcbiAgICBjb25zdCBjaGVja0luR3JvdXBzRGF0YSA9IGZpbmRDaGVjayhfZ3JvdXBzRGF0YSwgY3VycmVudENvbnRleHRJZClcbiAgICBsZXQgX2N1cnJlbnRDaGVja1xuICAgIGxldCBuZXdTdGF0ZVxuICAgIGxldCBfbmV3Q2hlY2tpbmdEYXRhXG4gICAgaWYgKGNoZWNrSW5Hcm91cHNEYXRhKSB7XG4gICAgICAvLyBzYXZlIHRoZSBzZWxlY3Rpb24gY2hhbmdlc1xuICAgICAgY29uc3QgY2F0ZWdvcnkgPSBjaGVja0luR3JvdXBzRGF0YS5jYXRlZ29yeVxuICAgICAgY29uc3QgbmV3Q2hlY2tEYXRhID0gXy5jbG9uZURlZXAoY3VycmVudENoZWNraW5nRGF0YSlcbiAgICAgIF9jdXJyZW50Q2hlY2sgPSBmaW5kQ2hlY2sobmV3Q2hlY2tEYXRhW2NhdGVnb3J5XSwgY3VycmVudENvbnRleHRJZCwgZmFsc2UpXG4gICAgICBuZXdTdGF0ZSA9IHtcbiAgICAgICAgY3VycmVudENoZWNraW5nRGF0YTogbmV3Q2hlY2tEYXRhLFxuICAgICAgICBjdXJyZW50Q2hlY2s6IF9jdXJyZW50Q2hlY2ssXG4gICAgICAgIGdyb3Vwc0RhdGE6IF9ncm91cHNEYXRhLFxuICAgICAgICBtb2RlOiAnZGVmYXVsdCcsXG4gICAgICAgIG1vZGlmaWVkOiB0cnVlLFxuICAgICAgfVxuICAgICAgX25ld0NoZWNraW5nRGF0YSA9IGxvY2FsQ2hlY2tpbmdEYXRhID8geyAuLi5sb2NhbENoZWNraW5nRGF0YSB9IDoge31cbiAgICB9XG4gICAgcmV0dXJuIHsgY2hlY2tJbkdyb3Vwc0RhdGEsIF9jdXJyZW50Q2hlY2ssIG5ld1N0YXRlLCBfbmV3Q2hlY2tpbmdEYXRhIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIG11bHRpcGxlIHByb3BlcnRpZXMgaW4gY2hlY2sgZGF0YSBvYmplY3RzXG4gICAqIE1vZGlmaWVzIGJvdGggdGhlIGN1cnJlbnQgY2hlY2sgYW5kIGdyb3VwcyBkYXRhXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBfY3VycmVudENoZWNrIC0gQ3VycmVudCBjaGVjayBvYmplY3RcbiAgICogQHBhcmFtIHtvYmplY3R9IGNoZWNrSW5Hcm91cHNEYXRhIC0gQ2hlY2sgaW4gZ3JvdXBzIGRhdGEgc3RydWN0dXJlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBfbmV3Q2hlY2tpbmdEYXRhIC0gTmV3IGRhdGEgdG8gYXBwbHlcbiAgICovXG4gIGZ1bmN0aW9uIHVwZGF0ZVZhbHVlc0luQ2hlY2tEYXRhKFxuICAgIF9jdXJyZW50Q2hlY2ssXG4gICAgY2hlY2tJbkdyb3Vwc0RhdGEsXG4gICAgX25ld0NoZWNraW5nRGF0YVxuICApIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhfbmV3Q2hlY2tpbmdEYXRhKSkge1xuICAgICAgY29uc3QgbmV3Q2hlY2tpbmdWYWx1ZSA9IF9uZXdDaGVja2luZ0RhdGFba2V5XVxuICAgICAgX2N1cnJlbnRDaGVja1trZXldID0gbmV3Q2hlY2tpbmdWYWx1ZVxuICAgICAgY2hlY2tJbkdyb3Vwc0RhdGFba2V5XSA9IG5ld0NoZWNraW5nVmFsdWVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUGVyc2lzdHMgbXVsdGlwbGUgY2hlY2sgcHJvcGVydHkgY2hhbmdlcyB0byBmaWxlXG4gICAqIENsb25lcyBkYXRhLCBhcHBsaWVzIGNoYW5nZXMsIHVwZGF0ZXMgc3RhdGUsIGFuZCBzYXZlc1xuICAgKiBAcGFyYW0ge29iamVjdH0gbmV3RGF0YSAtIE9iamVjdCB3aXRoIHByb3BlcnR5IG5hbWVzIGFuZCB2YWx1ZXMgdG8gdXBkYXRlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjb25zdCBfc2F2ZURhdGEgPSBuZXdEYXRhID0+IHtcbiAgICBjb25zb2xlLmxvZyhgJHtuYW1lfS1fc2F2ZURhdGEgcGVyc2lzdCB0byBmaWxlYClcbiAgICBjb25zdCB7IGNoZWNrSW5Hcm91cHNEYXRhLCBfY3VycmVudENoZWNrLCBuZXdTdGF0ZSwgX25ld0NoZWNraW5nRGF0YSB9ID1cbiAgICAgIGNsb25lRGF0YUZvclNhdmluZygpXG5cbiAgICBpZiAoX2N1cnJlbnRDaGVjayAmJiBuZXdTdGF0ZSkge1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobmV3RGF0YSkpIHtcbiAgICAgICAgX25ld0NoZWNraW5nRGF0YVtrZXldID0gbmV3RGF0YVtrZXldXG4gICAgICAgIGRlbGV0ZVRlbXBDaGVja2luZ0RhdGEoa2V5KVxuICAgICAgfVxuICAgICAgc2V0TG9jYWxDaGVja2luZ0RhdGEoX25ld0NoZWNraW5nRGF0YSlcblxuICAgICAgdXBkYXRlVmFsdWVzSW5DaGVja0RhdGEoXG4gICAgICAgIF9jdXJyZW50Q2hlY2ssXG4gICAgICAgIGNoZWNrSW5Hcm91cHNEYXRhLFxuICAgICAgICBfbmV3Q2hlY2tpbmdEYXRhXG4gICAgICApXG4gICAgICBzZXRTdGF0ZShuZXdTdGF0ZSlcbiAgICAgIHNhdmVDaGVja2luZ0RhdGEgJiYgc2F2ZUNoZWNraW5nRGF0YShuZXdTdGF0ZSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2F2ZXMgY2hhbmdlcyB0byBhIHNwZWNpZmljIGNoZWNrIChtYXkgbm90IGJlIGN1cnJlbnQgY2hlY2spXG4gICAqIE9ubHkgc2F2ZXMgaWYgZGF0YSBhY3R1YWxseSBjaGFuZ2VkXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjaGVjayAtIENoZWNrIG9iamVjdCB0byB1cGRhdGVcbiAgICogQHBhcmFtIHtvYmplY3R9IG5ld0RhdGEgLSBOZXcgZGF0YSB0byBhcHBseVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBkYXRhIHdhcyBjaGFuZ2VkXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjb25zdCBfc2F2ZUNoZWNraW5nRGF0YSA9IChjaGVjaywgbmV3RGF0YSkgPT4ge1xuICAgIGxldCBjaGFuZ2VkRGF0YSA9IGZhbHNlXG4gICAgaWYgKGNoZWNrKSB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhuZXdEYXRhKSkge1xuICAgICAgICBpZiAoY2hlY2tba2V5XSAhPT0gbmV3RGF0YVtrZXldKSB7XG4gICAgICAgICAgY2hlY2tba2V5XSA9IG5ld0RhdGFba2V5XVxuICAgICAgICAgIGNoYW5nZWREYXRhID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGFuZ2VkRGF0YSkge1xuICAgICAgICBjb25zb2xlLmxvZyhgJHtuYW1lfS1fc2F2ZUNoZWNraW5nRGF0YSBwZXJzaXN0IGNoYW5nZXMgdG8gZmlsZWAsIGNoZWNrKVxuICAgICAgICBjb25zdCBuZXdDaGVja2luZ0RhdGEgPSB7XG4gICAgICAgICAgY3VycmVudENoZWNrOiBjaGVjayxcbiAgICAgICAgfVxuICAgICAgICBzYXZlQ2hlY2tpbmdEYXRhICYmIHNhdmVDaGVja2luZ0RhdGEobmV3Q2hlY2tpbmdEYXRhKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2hhbmdlZERhdGFcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgcHJvcGVydHkgZnJvbSB0ZW1wb3JhcnkgY2hlY2tpbmcgZGF0YVxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gUHJvcGVydHkgbmFtZSB0byByZW1vdmVcbiAgICovXG4gIGZ1bmN0aW9uIGRlbGV0ZVRlbXBDaGVja2luZ0RhdGEoa2V5KSB7XG4gICAgaWYgKHRlbXBDaGVja2luZ0RhdGE/Lmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgIGNvbnN0IF90ZW1wQ2hlY2tpbmdEYXRhID0geyAuLi50ZW1wQ2hlY2tpbmdEYXRhIH1cbiAgICAgIGRlbGV0ZSBfdGVtcENoZWNraW5nRGF0YVtrZXldXG4gICAgICBzZXRUZW1wQ2hlY2tpbmdEYXRhKF90ZW1wQ2hlY2tpbmdEYXRhKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYW5jZWxzIHNlbGVjdGlvbiBtb2RlIHdpdGhvdXQgc2F2aW5nIGNoYW5nZXNcbiAgICovXG4gIGNvbnN0IGNhbmNlbFNlbGVjdGlvbiA9ICgpID0+IHtcbiAgICBjb25zb2xlLmxvZyhgJHtuYW1lfS1jYW5jZWxTZWxlY3Rpb25gKVxuICAgIGRlbGV0ZVRlbXBDaGVja2luZ0RhdGEoJ3NlbGVjdGlvbnMnKVxuICAgIHNldFN0YXRlKHtcbiAgICAgIG1vZGU6ICdkZWZhdWx0JyxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyBhbGwgY3VycmVudCBzZWxlY3Rpb25zXG4gICAqL1xuICBjb25zdCBjbGVhclNlbGVjdGlvbiA9ICgpID0+IHtcbiAgICBjb25zb2xlLmxvZyhgJHtuYW1lfS1jbGVhclNlbGVjdGlvbmApXG4gICAgc2V0VGVtcENoZWNraW5nSXRlbSgnc2VsZWN0aW9ucycsIFtdKVxuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgYm9va21hcmsvcmVtaW5kZXIgZmxhZyBmb3IgY3VycmVudCBjaGVja1xuICAgKi9cbiAgY29uc3QgdG9nZ2xlQm9va21hcmsgPSAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0tdG9nZ2xlQm9va21hcmtgKVxuICAgIF9zYXZlRGF0YSh7XG4gICAgICByZW1pbmRlcnM6ICFnZXRUZW1wVmFsdWVGb3IoJ3JlbWluZGVycycpLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQ2hhbmdlcyB0aGUgVUkgbW9kZSAoZGVmYXVsdCwgc2VsZWN0LCBlZGl0LCBjb21tZW50KVxuICAgKiBAcGFyYW0ge3N0cmluZ30gbW9kZSAtIE5ldyBtb2RlIGlkZW50aWZpZXJcbiAgICovXG4gIGNvbnN0IGNoYW5nZU1vZGUgPSBtb2RlID0+IHtcbiAgICBjb25zb2xlLmxvZyhgJHtuYW1lfS1jaGFuZ2VNb2RlYCwgbW9kZSlcbiAgICBzZXRTdGF0ZSh7IG1vZGUgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgY29tbWVudCB0ZXh0IGhhcyBjaGFuZ2VkIGZyb20gc2F2ZWQgdmFsdWVcbiAgICogQHBhcmFtIHtFdmVudH0gZSAtIElucHV0IGV2ZW50XG4gICAqL1xuICBmdW5jdGlvbiBjaGVja0lmQ29tbWVudENoYW5nZWQoZSkge1xuICAgIGNvbnNvbGUubG9nKGAke25hbWV9LWNoZWNrSWZDb21tZW50Q2hhbmdlZGApXG4gICAgY29uc3QgbmV3Y29tbWVudCA9IGUudGFyZ2V0LnZhbHVlIHx8ICcnXG4gICAgY29uc3Qgb2xkY29tbWVudCA9IGNvbW1lbnRUZXh0IHx8ICcnXG4gICAgY29uc3QgaXNDb21tZW50Q2hhbmdlZCA9IG5ld2NvbW1lbnQgIT09IG9sZGNvbW1lbnRcblxuICAgIHNldFN0YXRlKHtcbiAgICAgIGlzQ29tbWVudENoYW5nZWQsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBDYW5jZWxzIGNvbW1lbnQgZWRpdGluZyB3aXRob3V0IHNhdmluZ1xuICAgKi9cbiAgY29uc3QgY2FuY2VsQ29tbWVudCA9ICgpID0+IHtcbiAgICBjb25zb2xlLmxvZyhgJHtuYW1lfS1jYW5jZWxDb21tZW50YClcbiAgICBkZWxldGVUZW1wQ2hlY2tpbmdEYXRhKCdjb21tZW50cycpXG4gICAgc2V0U3RhdGUoe1xuICAgICAgbW9kZTogJ2RlZmF1bHQnLFxuICAgICAgaXNDb21tZW50Q2hhbmdlZDogZmFsc2UsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyBjb21tZW50IGNoYW5nZXMgdG8gcGVyc2lzdGVudCBzdG9yYWdlXG4gICAqL1xuICBjb25zdCBzYXZlQ29tbWVudCA9ICgpID0+IHtcbiAgICBjb25zb2xlLmxvZyhgJHtuYW1lfS1zYXZlQ29tbWVudGApXG4gICAgY29uc3QgbmV3Q29tbWVudCA9IGdldFRlbXBWYWx1ZUZvcignY29tbWVudHMnKVxuICAgIF9zYXZlRGF0YSh7IGNvbW1lbnRzOiBuZXdDb21tZW50IH0pXG4gICAgc2V0U3RhdGUoe1xuICAgICAgbW9kZTogJ2RlZmF1bHQnLFxuICAgICAgaXNDb21tZW50Q2hhbmdlZDogZmFsc2UsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGNvbW1lbnQgdGV4dCBjaGFuZ2VzXG4gICAqIEBwYXJhbSB7RXZlbnR9IGUgLSBJbnB1dCBldmVudCB3aXRoIG5ldyBjb21tZW50XG4gICAqL1xuICBjb25zdCBoYW5kbGVDb21tZW50ID0gZSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0taGFuZGxlQ29tbWVudGApXG4gICAgY29uc3QgbmV3Q29tbWVudCA9IGUudGFyZ2V0LnZhbHVlXG4gICAgc2V0VGVtcENoZWNraW5nSXRlbSgnY29tbWVudHMnLCBuZXdDb21tZW50KVxuICAgIHNldFN0YXRlKHtcbiAgICAgIGlzQ29tbWVudENoYW5nZWQ6IHRydWUsXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IHJlYWR5VG9EaXNwbGF5Q2hlY2tlciA9XG4gICAgZ3JvdXBzRGF0YSAmJiBncm91cHNJbmRleCAmJiBjdXJyZW50Q29udGV4dElkICYmIHZlcnNlVGV4dFxuXG4gIC8qKlxuICAgKiBXcmFwcGVyIGZvciBnZXRMZXhpY29uRGF0YSBjYWxsYmFjayB3aXRoIGxvZ2dpbmdcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxleGljb25JZCAtIExleGljb24gaWRlbnRpZmllclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW50cnlJZCAtIEVudHJ5IGlkZW50aWZpZXJcbiAgICogQHJldHVybnMge29iamVjdH0gTGV4aWNvbiBkYXRhXG4gICAqL1xuICBjb25zdCBnZXRMZXhpY29uRGF0YV8gPSAobGV4aWNvbklkLCBlbnRyeUlkKSA9PiB7XG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0tZ2V0TGV4aWNvbkRhdGFfYCwgeyBsZXhpY29uSWQsIGVudHJ5SWQgfSlcbiAgICBjb25zdCBsZXhpY29uRGF0YSA9IGdldExleGljb25EYXRhICYmIGdldExleGljb25EYXRhKGxleGljb25JZCwgZW50cnlJZClcbiAgICByZXR1cm4gbGV4aWNvbkRhdGFcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIHBvcG92ZXIgZGlzcGxheVxuICAgKi9cbiAgY29uc3Qgb25DbG9zZVBvcG92ZXIgPSAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0tb25DbG9zZVBvcG92ZXJgKVxuICAgIHNldFN0YXRlKHtcbiAgICAgIHBvcG92ZXJQcm9wczoge1xuICAgICAgICBwb3BvdmVyVmlzaWJpbGl0eTogZmFsc2UsXG4gICAgICB9LFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogRGlzcGxheXMgYSBwb3BvdmVyIHdpdGggdGl0bGUgYW5kIGNvbnRlbnQgYXQgc3BlY2lmaWVkIHBvc2l0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZSAtIFBvcG92ZXIgdGl0bGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGJvZHlUZXh0IC0gUG9wb3ZlciBjb250ZW50XG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwb3NpdGlvbkNvb3JkIC0gUG9zaXRpb24gY29vcmRpbmF0ZXNcbiAgICovXG4gIGNvbnN0IHNob3dQb3BvdmVyID0gKHRpdGxlLCBib2R5VGV4dCwgcG9zaXRpb25Db29yZCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGAke25hbWV9LXNob3dQb3BvdmVyYCwgdGl0bGUpXG4gICAgc2V0U3RhdGUoe1xuICAgICAgcG9wb3ZlclByb3BzOiB7XG4gICAgICAgIHBvcG92ZXJWaXNpYmlsaXR5OiB0cnVlLFxuICAgICAgICB0aXRsZSxcbiAgICAgICAgYm9keVRleHQsXG4gICAgICAgIHBvc2l0aW9uQ29vcmQsXG4gICAgICAgIG9uQ2xvc2VQb3BvdmVyOiAoKSA9PiBvbkNsb3NlUG9wb3ZlcigpLFxuICAgICAgfSxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgdGhlIGV4cGFuZGVkIHRyYW5zbGF0aW9uIGhlbHBzIG1vZGFsXG4gICAqL1xuICBjb25zdCB0b2dnbGVIZWxwc01vZGFsID0gKCkgPT4ge1xuICAgIGNvbnN0IF9zaG93SGVscHNNb2RhbCA9ICFzaG93SGVscHNNb2RhbFxuICAgIHNldFN0YXRlKHtcbiAgICAgIHNob3dIZWxwc01vZGFsOiBfc2hvd0hlbHBzTW9kYWwsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIHRoZSB0cmFuc2xhdGlvbiBoZWxwcyBzaWRlYmFyIHZpc2liaWxpdHlcbiAgICovXG4gIGNvbnN0IHRvZ2dsZUhlbHBzID0gKCkgPT4ge1xuICAgIGNvbnN0IF9zaG93SGVscHMgPSAhc2hvd0hlbHBzXG4gICAgc2V0U3RhdGUoe1xuICAgICAgc2hvd0hlbHBzOiBfc2hvd0hlbHBzLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIEJpYmxlIGJvb2sgdG8gdGhlIGJpYmxlcyBkYXRhIHN0cnVjdHVyZVxuICAgKiBDcmVhdGVzIGxhbmd1YWdlIGdyb3VwIGlmIGl0IGRvZXNuJ3QgZXhpc3RcbiAgICogQHBhcmFtIHtvYmplY3R9IGJpYmxlcyAtIEJpYmxlcyBkYXRhIHN0cnVjdHVyZVxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gTGFuZ3VhZ2Uga2V5XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBiaWJsZUlkIC0gQmlibGUgaWRlbnRpZmllclxuICAgKiBAcGFyYW0ge29iamVjdH0gYm9vayAtIEJvb2sgZGF0YVxuICAgKi9cbiAgZnVuY3Rpb24gc2F2ZUJpYmxlVG9LZXkoYmlibGVzLCBrZXksIGJpYmxlSWQsIGJvb2spIHtcbiAgICBsZXQga2V5R3JvdXAgPSBiaWJsZXNba2V5XVxuICAgIGlmICgha2V5R3JvdXApIHtcbiAgICAgIC8vIGlmIGdyb3VwIGRvZXMgbm90IGV4aXN0LCBjcmVhdGUgbmV3XG4gICAgICBrZXlHcm91cCA9IHt9XG4gICAgICBiaWJsZXNba2V5XSA9IGtleUdyb3VwXG4gICAgfVxuICAgIGtleUdyb3VwW2JpYmxlSWRdID0gYm9va1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdmVyc2UgY29udGVudCBpbiB0YXJnZXQgQmlibGVcbiAgICogSGFuZGxlcyBVU0ZNIGNvbnZlcnNpb24sIGFsaWdubWVudCB1cGRhdGVzLCBhbmQgdmFsaWRhdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hhcHRlciAtIENoYXB0ZXIgbnVtYmVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2ZXJzZSAtIFZlcnNlIG51bWJlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gb2xkVmVyc2VUZXh0IC0gT3JpZ2luYWwgdmVyc2UgdGV4dFxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmV3VmVyc2VUZXh0IC0gTmV3IHZlcnNlIHRleHRcbiAgICovXG4gIGZ1bmN0aW9uIGVkaXRUYXJnZXRWZXJzZShjaGFwdGVyLCB2ZXJzZSwgb2xkVmVyc2VUZXh0LCBuZXdWZXJzZVRleHQpIHtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBlZGl0VGFyZ2V0VmVyc2UgJHtjaGFwdGVyfToke3ZlcnNlfSAtIGNoYW5nZWQgdG8gJHtuZXdWZXJzZVRleHR9YFxuICAgIClcblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBmaXJzdCB1cGRhdGUgY29tcG9uZW50IHN0YXRlXG5cbiAgICBjb25zdCBfYmlibGVzID0gWy4uLmJpYmxlc19dXG4gICAgY29uc3QgX3RhcmdldEJpYmxlID0geyAuLi5fYmlibGVzWzBdIH1cbiAgICBfYmlibGVzWzBdID0gX3RhcmdldEJpYmxlXG4gICAgY29uc3QgdGFyZ2V0Qm9vayA9IHsgLi4uX3RhcmdldEJpYmxlPy5ib29rIH1cbiAgICBfdGFyZ2V0QmlibGUuYm9vayA9IHRhcmdldEJvb2tcbiAgICBjb25zdCB0YXJnZXRDaGFwdGVyID0geyAuLi50YXJnZXRCb29rW2NoYXB0ZXJdIH1cbiAgICB0YXJnZXRCb29rW2NoYXB0ZXJdID0gdGFyZ2V0Q2hhcHRlclxuICAgIHRhcmdldENoYXB0ZXJbdmVyc2VdID0gbmV3VmVyc2VUZXh0XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gbm93IGFwcGx5IG5ldyB2ZXJzZSB0ZXh0IHRvIHNlbGVjdGVkIGFsaWduZWQgdmVyc2UgYW5kIGNhbGwgYmFjayB0byBleHRlbnNpb24gdG8gc2F2ZVxuXG4gICAgbGV0IF9uZXdWZXJzZVRleHQgPSBuZXdWZXJzZVRleHRcbiAgICBpZiAodHlwZW9mIF9uZXdWZXJzZVRleHQgIT09ICdzdHJpbmcnKSB7XG4gICAgICBfbmV3VmVyc2VUZXh0ID1cbiAgICAgICAgVXNmbUZpbGVDb252ZXJzaW9uSGVscGVycy5jb252ZXJ0VmVyc2VEYXRhVG9VU0ZNKF9uZXdWZXJzZVRleHQpXG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudENoYXB0ZXJEYXRhID0gdGFyZ2V0QmlibGU/LltjaGFwdGVyXVxuICAgIGNvbnN0IGN1cnJlbnRWZXJzZURhdGEgPSBjdXJyZW50Q2hhcHRlckRhdGE/Llt2ZXJzZV1cbiAgICBjb25zdCB7IHRhcmdldFZlcnNlT2JqZWN0cyB9ID1cbiAgICAgIEFsaWdubWVudEhlbHBlcnMudXBkYXRlQWxpZ25tZW50c1RvVGFyZ2V0VmVyc2UoXG4gICAgICAgIGN1cnJlbnRWZXJzZURhdGEsXG4gICAgICAgIF9uZXdWZXJzZVRleHRcbiAgICAgIClcbiAgICB0YXJnZXRDaGFwdGVyW3ZlcnNlXSA9IHsgdmVyc2VPYmplY3RzOiB0YXJnZXRWZXJzZU9iamVjdHMgfSAvLyBzYXZlXG5cbiAgICB1cGRhdGVTZXR0aW5ncyhfYmlibGVzLCB0YXJnZXRCb29rKVxuXG4gICAgY29uc3QgdmVyc2VUZXh0ID0gcmVtb3ZlVXNmbU1hcmtlcnMoX25ld1ZlcnNlVGV4dClcbiAgICBzZXRTdGF0ZSh7XG4gICAgICB2ZXJzZVRleHQsXG4gICAgfSlcblxuICAgIGNoYW5nZVRhcmdldFZlcnNlICYmXG4gICAgICBjaGFuZ2VUYXJnZXRWZXJzZShjaGFwdGVyLCB2ZXJzZSwgbmV3VmVyc2VUZXh0LCB0YXJnZXRWZXJzZU9iamVjdHMpXG5cbiAgICBjb25zdCBfZ3JvdXBzRGF0YSA9IF8uY2xvbmVEZWVwKGdyb3Vwc0RhdGEpXG4gICAgc2VsZWN0aW9uc0hlbHBlcnMudmFsaWRhdGVBbGxTZWxlY3Rpb25zRm9yVmVyc2UoXG4gICAgICBuZXdWZXJzZVRleHQsXG4gICAgICBib29rSWQsXG4gICAgICBjaGFwdGVyLFxuICAgICAgdmVyc2UsXG4gICAgICBfZ3JvdXBzRGF0YSxcbiAgICAgIChjaGVjaywgaW52YWxpZGF0ZWQpID0+IHtcbiAgICAgICAgaWYgKGNoZWNrKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgJHtuYW1lfS1lZGl0VGFyZ2V0VmVyc2UgLSBjaGVjayB2YWxpZGF0ZWQsIHN0YXRlIGNoYW5nZWQ6IGludmFsaWQ6ICR7aW52YWxpZGF0ZWR9YCxcbiAgICAgICAgICAgIGNoZWNrXG4gICAgICAgICAgKVxuXG4gICAgICAgICAgX3NhdmVDaGVja2luZ0RhdGEoY2hlY2ssIHsgaW52YWxpZGF0ZWQsIHZlcnNlRWRpdHM6IHRydWUgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIClcblxuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYCR7bmFtZX0tZWRpdFRhcmdldFZlcnNlIC0gY2hhbmdlcyBkZXRlY3RlZCB1cGRhdGluZyBncm91cHNEYXRhYFxuICAgIClcbiAgICBzZXRTdGF0ZSh7XG4gICAgICBncm91cHNEYXRhOiBfZ3JvdXBzRGF0YSxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgc2V0dGluZ3Mgd2l0aCBuZXcgQmlibGUgZGF0YSBhbmQgcGFuZSBjb25maWd1cmF0aW9uc1xuICAgKiBPcmdhbml6ZXMgQmlibGVzIGJ5IGxhbmd1YWdlIGFuZCBpbml0aWFsaXplcyBwYW5lIHNldHRpbmdzXG4gICAqIEBwYXJhbSB7QXJyYXl9IG5ld0JpYmxlcyAtIEFycmF5IG9mIEJpYmxlIG9iamVjdHNcbiAgICogQHBhcmFtIHtvYmplY3R9IHRhcmdldEJpYmxlIC0gVGFyZ2V0IEJpYmxlIGRhdGFcbiAgICovXG4gIGZ1bmN0aW9uIHVwZGF0ZVNldHRpbmdzKG5ld0JpYmxlcywgdGFyZ2V0QmlibGUpIHtcbiAgICBjb25zdCBfYmlibGVzID0ge31cbiAgICBsZXQgX3BhbmVTZXR0aW5ncyA9IFtdXG4gICAgY29uc3QgX3BhbmVLZXlTZXR0aW5ncyA9IGluaXRpYWxTZXR0aW5ncz8ucGFuZUtleVNldHRpbmdzIHx8IHt9XG4gICAgaWYgKG5ld0JpYmxlcz8ubGVuZ3RoKSB7XG4gICAgICBmb3IgKGNvbnN0IGJpYmxlIG9mIG5ld0JpYmxlcykge1xuICAgICAgICBsZXQgbGFuZ3VhZ2VJZCA9IGJpYmxlPy5sYW5ndWFnZUlkXG4gICAgICAgIGNvbnN0IG93bmVyID0gYmlibGU/Lm93bmVyXG4gICAgICAgIGNvbnN0IGJvb2sgPSBiaWJsZT8uYm9va1xuICAgICAgICBjb25zdCBiaWJsZUlkID0gYmlibGU/LmJpYmxlSWRcbiAgICAgICAgaWYgKGxhbmd1YWdlSWQgPT09IE5UX09SSUdfTEFORyB8fCBsYW5ndWFnZUlkID09PSBPVF9PUklHX0xBTkcpIHtcbiAgICAgICAgICBsYW5ndWFnZUlkID0gJ29yaWdpbmFsTGFuZ3VhZ2UnXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2V5ID0gYCR7bGFuZ3VhZ2VJZH0vJHtiaWJsZUlkfS8ke293bmVyfWBcbiAgICAgICAgY29uc3QgaW5pdGlhbFBhbmVTZXR0aW5ncyA9IF9wYW5lS2V5U2V0dGluZ3M/LltrZXldXG4gICAgICAgIGNvbnN0IGxhbmdLZXkgPSBgJHtsYW5ndWFnZUlkfV8ke293bmVyfWBcbiAgICAgICAgc2F2ZUJpYmxlVG9LZXkoX2JpYmxlcywgbGFuZ0tleSwgYmlibGVJZCwgYm9vaylcbiAgICAgICAgc2F2ZUJpYmxlVG9LZXkoX2JpYmxlcywgbGFuZ3VhZ2VJZCwgYmlibGVJZCwgYm9vaykgLy8gYWxzbyBzYXZlIGFzIGRlZmF1bHQgZm9yIGxhbmd1YWdlIHdpdGhvdXQgb3duZXJcbiAgICAgICAgY29uc3QgcGFuZSA9IGluaXRpYWxQYW5lU2V0dGluZ3MgfHwge1xuICAgICAgICAgIC4uLmJpYmxlLFxuICAgICAgICAgIGxhbmd1YWdlSWQsXG4gICAgICAgIH1cbiAgICAgICAgX3BhbmVTZXR0aW5ncy5wdXNoKHBhbmUpXG4gICAgICAgIGlmICghaW5pdGlhbFBhbmVTZXR0aW5ncykge1xuICAgICAgICAgIF9wYW5lS2V5U2V0dGluZ3Nba2V5XSA9IHBhbmVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBfcGFuZVNldHRpbmdzID0gW11cbiAgICB9XG5cbiAgICBjb25zdCBfdG9vbHNTZXR0aW5ncyA9IGluaXRpYWxTZXR0aW5ncz8udG9vbHNTZXR0aW5ncyB8fCB7XG4gICAgICBDaGVja0FyZWE6IHtcbiAgICAgICAgZm9udFNpemU6IDEwMCxcbiAgICAgIH0sXG4gICAgfVxuXG4gICAgbGV0IF9tYW5pZmVzdCA9IGluaXRpYWxTZXR0aW5ncz8ubWFuaWZlc3QgfHwge1xuICAgICAgbGFuZ3VhZ2VfbmFtZTpcbiAgICAgICAgdGFyZ2V0QmlibGU/Lm1hbmlmZXN0Py5kdWJsaW5fY29yZT8ubGFuZ3VhZ2U/LnRpdGxlIHx8ICdDdXJyZW50JyxcbiAgICAgIHByb2plY3RGb250OiB0YXJnZXRCaWJsZT8ubWFuaWZlc3Q/LnByb2plY3RGb250IHx8ICcnLFxuICAgIH1cblxuICAgIGNvbnN0IGFwcFNldHRpbmdzID0gaW5pdGlhbFNldHRpbmdzPy5hcHBTZXR0aW5ncyB8fCB7fVxuICAgIF9tYW5pZmVzdCA9IHtcbiAgICAgIC4uLl9tYW5pZmVzdCxcbiAgICAgIC4uLmFwcFNldHRpbmdzLCAvLyBvbGRlciBjb2RlIGlzIGxvb2tpbmcgZm9yIGFwcFNldHRpbmdzIGluIG1hbmlmZXN0XG4gICAgfVxuXG4gICAgc2V0QmlibGVzKF9iaWJsZXMpXG4gICAgc2V0VGFyZ2V0QmlibGUodGFyZ2V0QmlibGUpXG4gICAgc2V0U2V0dGluZ3MoXG4gICAgICB7XG4gICAgICAgIHBhbmVTZXR0aW5nczogX3BhbmVTZXR0aW5ncyxcbiAgICAgICAgcGFuZUtleVNldHRpbmdzOiBfcGFuZUtleVNldHRpbmdzLFxuICAgICAgICB0b29sc1NldHRpbmdzOiBfdG9vbHNTZXR0aW5ncyxcbiAgICAgICAgbWFuaWZlc3Q6IF9tYW5pZmVzdCxcbiAgICAgICAgbmV3Q29tbWVudDogJycsXG4gICAgICAgIGFwcFNldHRpbmdzLFxuICAgICAgfSxcbiAgICAgIGZhbHNlXG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIFdyYXBwZXIgZm9yIGdldFNjcmlwdHVyZUZyb21SZWZlcmVuY2Ugd2l0aCBjdXJyZW50IEJpYmxlcyBkYXRhXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYW5nIC0gTGFuZ3VhZ2UgSURcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkIC0gQmlibGUgSURcbiAgICogQHBhcmFtIHtzdHJpbmd9IGJvb2sgLSBCb29rIElEXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjaGFwdGVyIC0gQ2hhcHRlciBudW1iZXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZlcnNlIC0gVmVyc2UgbnVtYmVyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFNjcmlwdHVyZSB0ZXh0XG4gICAqL1xuICBmdW5jdGlvbiBfZ2V0U2NyaXB0dXJlRnJvbVJlZmVyZW5jZShsYW5nLCBpZCwgYm9vaywgY2hhcHRlciwgdmVyc2UpIHtcbiAgICByZXR1cm4gZ2V0U2NyaXB0dXJlRnJvbVJlZmVyZW5jZShiaWJsZXMsIGxhbmcsIGlkLCBib29rLCBjaGFwdGVyLCB2ZXJzZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBFZmZlY3QgaG9vayB0byB1cGRhdGUgc2V0dGluZ3Mgd2hlbiBCaWJsZXMgb3IgdGFyZ2V0IEJpYmxlIGNoYW5nZXNcbiAgICovXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgdXBkYXRlU2V0dGluZ3MoYmlibGVzXywgdGFyZ2V0QmlibGVfKVxuICB9LCBbYmlibGVzXywgdGFyZ2V0QmlibGVfXSlcblxuICAvLyBidWlsZCB0aGUgdGl0bGVcbiAgY29uc3QgeyB0YXJnZXRfbGFuZ3VhZ2UsIHByb2plY3QgfSA9IG1hbmlmZXN0XG4gIGxldCBleHBhbmRlZFNjcmlwdHVyZVBhbmVUaXRsZSA9IHByb2plY3Q/LnRpdGxlIHx8ICcnXG5cbiAgaWYgKHRhcmdldF9sYW5ndWFnZT8uYm9vaz8ubmFtZSkge1xuICAgIGV4cGFuZGVkU2NyaXB0dXJlUGFuZVRpdGxlID0gdGFyZ2V0X2xhbmd1YWdlLmJvb2submFtZVxuICB9XG5cbiAgY29uc3Qgc3R5bGVQcm9wcyA9IHN0eWxlcyB8fCB7fVxuICBjb25zdCBfY2hlY2tlclN0eWxlcyA9IHtcbiAgICAuLi5sb2NhbFN0eWxlcy5jb250YWluZXJEaXYsXG4gICAgLi4uc3R5bGVQcm9wcyxcbiAgfVxuICBjb25zb2xlLmxvZyh7IG1hbmlmZXN0OiB7IC4uLm1hbmlmZXN0LCAuLi50YXJnZXRMYW5ndWFnZURldGFpbHMgfSB9KVxuICByZXR1cm4gcmVhZHlUb0Rpc3BsYXlDaGVja2VyID8gKFxuICAgIDxkaXYgaWQ9J2NoZWNrZXInIHN0eWxlPXtfY2hlY2tlclN0eWxlc30+XG4gICAgICA8R3JvdXBNZW51Q29tcG9uZW50XG4gICAgICAgIGJvb2tOYW1lPXtib29rTmFtZX1cbiAgICAgICAgY2hhbmdlQ3VycmVudENvbnRleHRJZD17Y2hhbmdlQ3VycmVudENoZWNrX31cbiAgICAgICAgY29udGV4dElkPXtjdXJyZW50Q29udGV4dElkfVxuICAgICAgICBkaXJlY3Rpb249e2RpcmVjdGlvbn1cbiAgICAgICAgZ3JvdXBzRGF0YT17Z3JvdXBzRGF0YX1cbiAgICAgICAgZ3JvdXBzSW5kZXg9e2dyb3Vwc0luZGV4fVxuICAgICAgICB0YXJnZXRMYW5ndWFnZUZvbnQ9e3RhcmdldExhbmd1YWdlRm9udH1cbiAgICAgICAgdHJhbnNsYXRlPXt0cmFuc2xhdGV9XG4gICAgICAvPlxuICAgICAgPGRpdiBzdHlsZT17bG9jYWxTdHlsZXMuY2VudGVyRGl2fT5cbiAgICAgICAge2JpYmxlcyAmJiBPYmplY3Qua2V5cyhiaWJsZXMpLmxlbmd0aCAmJiAoXG4gICAgICAgICAgPGRpdiBzdHlsZT17bG9jYWxTdHlsZXMuc2NyaXB0dXJlUGFuZURpdn0+XG4gICAgICAgICAgICA8U2NyaXB0dXJlUGFuZVxuICAgICAgICAgICAgICBhZGRPYmplY3RQcm9wZXJ0eVRvTWFuaWZlc3Q9e2FkZE9iamVjdFByb3BlcnR5VG9NYW5pZmVzdH1cbiAgICAgICAgICAgICAgYmlibGVzPXtiaWJsZXN9XG4gICAgICAgICAgICAgIGNvbXBsZXhTY3JpcHRGb250cz17Y29tcGxleFNjcmlwdEZvbnRzfVxuICAgICAgICAgICAgICBjb250ZXh0SWQ9e2N1cnJlbnRDb250ZXh0SWR9XG4gICAgICAgICAgICAgIGN1cnJlbnRQYW5lU2V0dGluZ3M9e3BhbmVTZXR0aW5nc31cbiAgICAgICAgICAgICAgZWRpdFZlcnNlUmVmPXtudWxsfVxuICAgICAgICAgICAgICBlZGl0VGFyZ2V0VmVyc2U9e2VkaXRUYXJnZXRWZXJzZX1cbiAgICAgICAgICAgICAgZXhwYW5kZWRTY3JpcHR1cmVQYW5lVGl0bGU9e2V4cGFuZGVkU2NyaXB0dXJlUGFuZVRpdGxlfVxuICAgICAgICAgICAgICBnZXRBdmFpbGFibGVTY3JpcHR1cmVQYW5lU2VsZWN0aW9ucz17bnVsbH1cbiAgICAgICAgICAgICAgZ2V0TGV4aWNvbkRhdGE9e2dldExleGljb25EYXRhX31cbiAgICAgICAgICAgICAgbWFrZVN1cmVCaWJsZXNMb2FkZWRGb3JUb29sPXtudWxsfVxuICAgICAgICAgICAgICBwcm9qZWN0RGV0YWlsc1JlZHVjZXI9e3tcbiAgICAgICAgICAgICAgICBtYW5pZmVzdDoge1xuICAgICAgICAgICAgICAgICAgLi4ubWFuaWZlc3QsXG4gICAgICAgICAgICAgICAgICAuLi57IHRhcmdldF9sYW5ndWFnZTogdGFyZ2V0TGFuZ3VhZ2VEZXRhaWxzIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgc2VsZWN0aW9ucz17Y3VycmVudFNlbGVjdGlvbnN9XG4gICAgICAgICAgICAgIHNldFRvb2xTZXR0aW5ncz17c2V0VG9vbFNldHRpbmdzU2NyaXB0dXJlfVxuICAgICAgICAgICAgICBzaG93UG9wb3Zlcj17c2hvd1BvcG92ZXJ9XG4gICAgICAgICAgICAgIG9uRXhwYW5kZWRTY3JpcHR1cmVQYW5lU2hvdz17bnVsbH1cbiAgICAgICAgICAgICAgdHJhbnNsYXRlPXt0cmFuc2xhdGV9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgICA8Q2hlY2tJbmZvQ2FyZFxuICAgICAgICAgIGdldFNjcmlwdHVyZUZyb21SZWZlcmVuY2U9e19nZXRTY3JpcHR1cmVGcm9tUmVmZXJlbmNlfVxuICAgICAgICAgIG9uTGlua0NsaWNrPXsoKSA9PiBmYWxzZX1cbiAgICAgICAgICBvblNlZU1vcmVDbGljaz17KCkgPT4gZmFsc2V9XG4gICAgICAgICAgcGhyYXNlPXtncm91cFBocmFzZX1cbiAgICAgICAgICBzZWVNb3JlTGFiZWw9e3RyYW5zbGF0ZSgnc2VlX21vcmUnKX1cbiAgICAgICAgICBzaG93U2VlTW9yZUJ1dHRvbj17ZmFsc2V9XG4gICAgICAgICAgdGl0bGU9e2dyb3VwVGl0bGV9XG4gICAgICAgIC8+XG4gICAgICAgIDxWZXJzZUNoZWNrXG4gICAgICAgICAgYWxpZ25lZEdMVGV4dD17YWxpZ25lZEdMVGV4dH1cbiAgICAgICAgICBib29rRGV0YWlscz17Ym9va0RldGFpbHN9XG4gICAgICAgICAgYm9va21hcmtFbmFibGVkPXtib29rbWFya0VuYWJsZWR9XG4gICAgICAgICAgY2FuY2VsRWRpdFZlcnNlPXtjYW5jZWxFZGl0VmVyc2V9XG4gICAgICAgICAgY2FuY2VsQ29tbWVudD17Y2FuY2VsQ29tbWVudH1cbiAgICAgICAgICBjYW5jZWxTZWxlY3Rpb249e2NhbmNlbFNlbGVjdGlvbn1cbiAgICAgICAgICBjaGFuZ2VNb2RlPXtjaGFuZ2VNb2RlfVxuICAgICAgICAgIGNoYW5nZVNlbGVjdGlvbnNJbkxvY2FsU3RhdGU9e2NoYW5nZVNlbGVjdGlvbnNJbkxvY2FsU3RhdGV9XG4gICAgICAgICAgY2hlY2tJZkNvbW1lbnRDaGFuZ2VkPXtjaGVja0lmQ29tbWVudENoYW5nZWR9XG4gICAgICAgICAgY2hlY2tJZlZlcnNlQ2hhbmdlZD17Y2hlY2tJZlZlcnNlQ2hhbmdlZH1cbiAgICAgICAgICBjbGVhclNlbGVjdGlvbj17Y2xlYXJTZWxlY3Rpb259XG4gICAgICAgICAgY29tbWVudFRleHQ9e2NvbW1lbnRUZXh0fVxuICAgICAgICAgIGNvbnRleHRJZD17Y3VycmVudENvbnRleHRJZH1cbiAgICAgICAgICBkaWFsb2dNb2RhbFZpc2liaWxpdHk9e2ZhbHNlfVxuICAgICAgICAgIGlzQ29tbWVudENoYW5nZWQ9e2lzQ29tbWVudENoYW5nZWR9XG4gICAgICAgICAgaXNWZXJzZUNoYW5nZWQ9e2lzVmVyc2VDaGFuZ2VkfVxuICAgICAgICAgIGlzVmVyc2VFZGl0ZWQ9e2lzVmVyc2VFZGl0ZWR9XG4gICAgICAgICAgaGFuZGxlRWRpdFZlcnNlPXtoYW5kbGVFZGl0VmVyc2V9XG4gICAgICAgICAgaGFuZGxlR29Ub05leHQ9e2hhbmRsZUdvVG9OZXh0fVxuICAgICAgICAgIGhhbmRsZUdvVG9QcmV2aW91cz17aGFuZGxlR29Ub1ByZXZpb3VzfVxuICAgICAgICAgIGhhbmRsZU9wZW5EaWFsb2c9e251bGx9XG4gICAgICAgICAgaXNWZXJzZUludmFsaWRhdGVkPXtpc1ZlcnNlSW52YWxpZGF0ZWR9XG4gICAgICAgICAgaGFuZGxlQ2xvc2VEaWFsb2c9e251bGx9XG4gICAgICAgICAgaGFuZGxlQ29tbWVudD17aGFuZGxlQ29tbWVudH1cbiAgICAgICAgICBoYW5kbGVTa2lwPXtudWxsfVxuICAgICAgICAgIGhhbmRsZVRhZ3NDaGVja2JveD17aGFuZGxlVGFnc0NoZWNrYm94fVxuICAgICAgICAgIGxvY2FsTm90aGluZ1RvU2VsZWN0PXt0ZW1wTm90aGluZ1RvU2VsZWN0fVxuICAgICAgICAgIG1hbmlmZXN0PXttYW5pZmVzdH1cbiAgICAgICAgICBtYXhpbXVtU2VsZWN0aW9ucz17bWF4aW11bVNlbGVjdGlvbnN9XG4gICAgICAgICAgbW9kZT17bW9kZX1cbiAgICAgICAgICBuZXdTZWxlY3Rpb25zPXt0ZW1wU2VsZWN0aW9uc31cbiAgICAgICAgICBub3RoaW5nVG9TZWxlY3Q9e2N1cnJlbnROb3RoaW5nVG9TZWxlY3R9XG4gICAgICAgICAgb3BlbkFsZXJ0RGlhbG9nPXtvcGVuQWxlcnREaWFsb2d9XG4gICAgICAgICAgc2F2ZUNvbW1lbnQ9e3NhdmVDb21tZW50fVxuICAgICAgICAgIHNhdmVFZGl0VmVyc2U9e3NhdmVFZGl0VmVyc2V9XG4gICAgICAgICAgc2F2ZVNlbGVjdGlvbj17X3NhdmVTZWxlY3Rpb259XG4gICAgICAgICAgc2VsZWN0aW9ucz17Y3VycmVudFNlbGVjdGlvbnN9XG4gICAgICAgICAgc2V0VG9vbFNldHRpbmdzPXtzZXRUb29sU2V0dGluZ3N9XG4gICAgICAgICAgdGFncz17bmV3VGFncyB8fCBbXX1cbiAgICAgICAgICB0YXJnZXRCaWJsZT17dGFyZ2V0QmlibGV9XG4gICAgICAgICAgdGFyZ2V0TGFuZ3VhZ2VEZXRhaWxzPXt0YXJnZXRMYW5ndWFnZURldGFpbHN9XG4gICAgICAgICAgdG9nZ2xlQm9va21hcms9e3RvZ2dsZUJvb2ttYXJrfVxuICAgICAgICAgIHRvZ2dsZU5vdGhpbmdUb1NlbGVjdD17dG9nZ2xlTm90aGluZ1RvU2VsZWN0fVxuICAgICAgICAgIHRvb2xzU2V0dGluZ3M9e3Rvb2xzU2V0dGluZ3N9XG4gICAgICAgICAgdHJhbnNsYXRlPXt0cmFuc2xhdGV9XG4gICAgICAgICAgdW5maWx0ZXJlZFZlcnNlVGV4dD17dW5maWx0ZXJlZFZlcnNlVGV4dH1cbiAgICAgICAgICB2YWxpZGF0ZVNlbGVjdGlvbnM9e3ZhbGlkYXRlU2VsZWN0aW9uc31cbiAgICAgICAgICB2ZXJzZVRleHQ9e3ZlcnNlVGV4dH1cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgICAge3Nob3dEb2N1bWVudCAmJiAoXG4gICAgICAgIDxUcmFuc2xhdGlvbkhlbHBzXG4gICAgICAgICAgbW9kYWxBcnRpY2xlPXthcnRpY2xlfVxuICAgICAgICAgIGFydGljbGU9e2FydGljbGV9XG4gICAgICAgICAgZXhwYW5kZWRIZWxwc0J1dHRvbkhvdmVyVGV4dD17J0NsaWNrIHRvIHNob3cgZXhwYW5kZWQgaGVscCBwYW5lJ31cbiAgICAgICAgICBtb2RhbFRpdGxlPXsndHJhbnNsYXRpb25IZWxwcyd9XG4gICAgICAgICAgdHJhbnNsYXRlPXt0cmFuc2xhdGV9XG4gICAgICAgICAgaXNTaG93SGVscHNFeHBhbmRlZD17c2hvd0hlbHBzTW9kYWx9XG4gICAgICAgICAgb3BlbkV4cGFuZGVkSGVscHNNb2RhbD17dG9nZ2xlSGVscHNNb2RhbH1cbiAgICAgICAgICBzaWRlYmFyVG9nZ2xlPXt0b2dnbGVIZWxwc31cbiAgICAgICAgICBpc1Nob3dIZWxwc1NpZGViYXI9e3Nob3dIZWxwc31cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgICB7cG9wb3ZlclByb3BzPy5wb3BvdmVyVmlzaWJpbGl0eSAmJiAoXG4gICAgICAgIDxQb3BvdmVyQ29udGFpbmVyIHsuLi5wb3BvdmVyUHJvcHN9IC8+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApIDogKFxuICAgICdXYWl0aW5nIGZvciBEYXRhJ1xuICApXG59XG5cbkNoZWNrZXIucHJvcFR5cGVzID0ge1xuICBzdHlsZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIGFsaWduZWRHbEJpYmxlOiBQcm9wVHlwZXMub2JqZWN0LFxuICBiaWJsZXM6IFByb3BUeXBlcy5hcnJheSxcbiAgY2hhbmdlVGFyZ2V0VmVyc2U6IFByb3BUeXBlcy5mdW5jLFxuICBjaGVja2luZ0RhdGE6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgY2hlY2tUeXBlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjb250ZXh0SWQ6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgZ2xXb3Jkc0RhdGE6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgZ2V0TGV4aWNvbkRhdGE6IFByb3BUeXBlcy5mdW5jLFxuICBpbml0aWFsU2V0dGluZ3M6IFByb3BUeXBlcy5vYmplY3QsXG4gIHNhdmVDaGVja2luZ0RhdGE6IFByb3BUeXBlcy5mdW5jLFxuICBzYXZlU2V0dGluZ3M6IFByb3BUeXBlcy5mdW5jLFxuICBzaG93RG9jdW1lbnQ6IFByb3BUeXBlcy5ib29sLFxuICB0YXJnZXRCaWJsZTogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICB0YXJnZXRMYW5ndWFnZURldGFpbHM6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgdHJhbnNsYXRlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxufVxuZXhwb3J0IGRlZmF1bHQgQ2hlY2tlclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBeUNBLElBQUFBLFlBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLGdCQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxhQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxVQUFBLEdBQUFDLHNCQUFBLENBQUFOLE9BQUE7QUFDQSxJQUFBTyxPQUFBLEdBQUFELHNCQUFBLENBQUFOLE9BQUE7QUFDQSxJQUFBUSxtQkFBQSxHQUFBRixzQkFBQSxDQUFBTixPQUFBO0FBQ0EsSUFBQVMsZUFBQSxHQUFBVCxPQUFBO0FBT0EsSUFBQVUsVUFBQSxHQUFBSixzQkFBQSxDQUFBTixPQUFBO0FBQ0EsSUFBQVcsaUJBQUEsR0FBQVgsT0FBQTtBQVNBLElBQUFZLGNBQUEsR0FBQU4sc0JBQUEsQ0FBQU4sT0FBQTtBQUNBLElBQUFhLGlCQUFBLEdBQUFiLE9BQUE7QUFDQSxJQUFBYyxjQUFBLEdBQUFSLHNCQUFBLENBQUFOLE9BQUE7QUFDQSxJQUFBZSxpQkFBQSxHQUFBVCxzQkFBQSxDQUFBTixPQUFBO0FBQ0EsSUFBQWdCLGdCQUFBLEdBQUFoQixPQUFBO0FBQ0EsSUFBQWlCLG1CQUFBLEdBQUFYLHNCQUFBLENBQUFOLE9BQUE7QUFDQSxJQUFBa0IsaUJBQUEsR0FBQVosc0JBQUEsQ0FBQU4sT0FBQTtBQUNBLElBQUFtQixhQUFBLEdBQUFqQix1QkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQW9CLFdBQUEsR0FBQWQsc0JB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
1371
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdXNmbUhlbHBlcnMiLCJyZXF1aXJlIiwiX3JlYWN0IiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfc2VsZWN0aW9uSGVscGVyIiwiX3ZlcnNlSGVscGVycyIsIl9wcm9wVHlwZXMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2xvZGFzaCIsIl9Hcm91cE1lbnVDb21wb25lbnQiLCJfd29yZEFsaWduZXJMaWIiLCJfZGVlcEVxdWFsIiwiX3R3QXJ0aWNsZUhlbHBlcnMiLCJfQ2hlY2tJbmZvQ2FyZCIsIl90bkFydGljbGVIZWxwZXJzIiwiX1NjcmlwdHVyZVBhbmUiLCJfUG9wb3ZlckNvbnRhaW5lciIsIl9Cb29rc09mVGhlQmlibGUiLCJfY29tcGxleFNjcmlwdEZvbnRzIiwiX1RyYW5zbGF0aW9uSGVscHMiLCJ0SGVscHNIZWxwZXJzIiwiX1ZlcnNlQ2hlY2siLCJfY2hlY2tJbmZvQ2FyZEhlbHBlcnMiLCJfdXRpbHMiLCJlIiwiX19lc01vZHVsZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJfdHlwZW9mIiwiaGFzIiwiZ2V0Iiwic2V0IiwiX3QiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJsZW5ndGgiLCJfbiIsIkYiLCJzIiwiZG9uZSIsInZhbHVlIiwiVHlwZUVycm9yIiwiYSIsInUiLCJuZXh0IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiX2FycmF5V2l0aG91dEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVNwcmVhZCIsImZyb20iLCJfYXJyYXlMaWtlVG9BcnJheSIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJfdG9Qcm9wZXJ0eUtleSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiX3RvUHJpbWl0aXZlIiwidG9QcmltaXRpdmUiLCJTdHJpbmciLCJOdW1iZXIiLCJfc2xpY2VkVG9BcnJheSIsIl9hcnJheVdpdGhIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsIl9ub25JdGVyYWJsZVJlc3QiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwidGVzdCIsImwiLCJsb2NhbFN0eWxlcyIsImNvbnRhaW5lckRpdiIsImRpc3BsYXkiLCJmbGV4RGlyZWN0aW9uIiwid2lkdGgiLCJoZWlnaHQiLCJjZW50ZXJEaXYiLCJvdmVyZmxvd1giLCJtYXJnaW5MZWZ0Iiwic2NyaXB0dXJlUGFuZURpdiIsImZsZXhTaHJpbmsiLCJwYWRkaW5nQm90dG9tIiwidHJhbnNsYXRpb25Xb3JkcyIsImV4cG9ydHMiLCJ0cmFuc2xhdGlvbk5vdGVzIiwibWF4aW11bVNlbGVjdGlvbnMiLCJjb25zb2xlIiwibG9nIiwiQ2hlY2tlciIsIl9yZWYiLCJfdGFyZ2V0TGFuZ3VhZ2VEZXRhaWwiLCJfdGFyZ2V0TGFuZ3VhZ2VEZXRhaWwyIiwiX3RhcmdldF9sYW5ndWFnZSRib29rIiwiYWxpZ25lZEdsQmlibGUiLCJiaWJsZXNfIiwiYmlibGVzIiwiY2hhbmdlZEN1cnJlbnRDaGVjayIsImNoYW5nZVRhcmdldFZlcnNlIiwiY2hlY2tpbmdEYXRhIiwiY2hlY2tUeXBlIiwiY29udGV4dElkIiwiZ2V0TGV4aWNvbkRhdGEiLCJnbFdvcmRzRGF0YSIsImluaXRpYWxTZXR0aW5ncyIsInNhdmVDaGVja2luZ0RhdGEiLCJzYXZlU2V0dGluZ3MiLCJzaG93RG9jdW1lbnQiLCJzdHlsZXMiLCJ0YXJnZXRCaWJsZV8iLCJ0YXJnZXRCaWJsZSIsInRhcmdldExhbmd1YWdlRGV0YWlscyIsInRyYW5zbGF0ZSIsIl9yZWYkZGlzYWJsZUZvbnRNZW51IiwiZGlzYWJsZUZvbnRNZW51IiwiX3VzZVN0YXRlIiwidXNlU3RhdGUiLCJwYW5lU2V0dGluZ3MiLCJwYW5lS2V5U2V0dGluZ3MiLCJ0b29sc1NldHRpbmdzIiwibWFuaWZlc3QiLCJfdXNlU3RhdGUyIiwic2V0dGluZ3MiLCJfc2V0U2V0dGluZ3MiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsInNldEJpYmxlcyIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2Iiwic2V0VGFyZ2V0QmlibGUiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsInRlbXBDaGVja2luZ0RhdGEiLCJzZXRUZW1wQ2hlY2tpbmdEYXRhIiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTAiLCJsb2NhbENoZWNraW5nRGF0YSIsInNldExvY2FsQ2hlY2tpbmdEYXRhIiwiX3VzZVN0YXRlMSIsImFsaWduZWRHTFRleHQiLCJhcnRpY2xlIiwiY3VycmVudENoZWNrIiwiY3VycmVudENoZWNraW5nRGF0YSIsImdyb3VwVGl0bGUiLCJncm91cFBocmFzZSIsImdyb3Vwc0RhdGEiLCJncm91cHNJbmRleCIsImlzQ29tbWVudENoYW5nZWQiLCJpc1ZlcnNlQ2hhbmdlZCIsIm1vZGUiLCJuZXdWZXJzZVRleHQiLCJwb3BvdmVyUHJvcHMiLCJwb3BvdmVyVmlzaWJpbGl0eSIsInNob3dIZWxwc01vZGFsIiwic2hvd0hlbHBzIiwibmV3VGFncyIsInZlcnNlVGV4dCIsIl91c2VTdGF0ZTEwIiwic3RhdGUiLCJfc2V0U3RhdGUiLCJzZXRTdGF0ZSIsIm5ld1N0YXRlIiwicHJldlN0YXRlIiwiZ2V0Q3VycmVudFZhbHVlRm9yIiwia2V5IiwiZ2V0VGVtcFZhbHVlRm9yIiwiY3VycmVudFNlbGVjdGlvbnMiLCJ0ZW1wU2VsZWN0aW9ucyIsInRlbXBOb3RoaW5nVG9TZWxlY3QiLCJjdXJyZW50Tm90aGluZ1RvU2VsZWN0IiwiZ3JvdXBzRGF0YUxvYWRlZCIsInVwZGF0ZU1vZGVGb3JTZWxlY3Rpb25zIiwibmV3U2VsZWN0aW9ucyIsIm5vdGhpbmdUb1NlbGVjdCIsIm5vU2VsZWN0aW9ucyIsIm5ld01vZGUiLCJ1c2VFZmZlY3QiLCJoYXZlRGF0YSIsImdyb3Vwc0RhdGFJbml0aWFsaXplZCIsImZsYXR0ZW5lZEdyb3VwRGF0YSIsImdyb3VwRGF0YUhlbHBlcnMiLCJmbGF0dGVuR3JvdXBEYXRhIiwicGFyc2VUblRvSW5kZXgiLCJwYXJzZVR3VG9JbmRleCIsImNoZWNrIiwiZmluZENoZWNrIiwibW9kaWZpZWQiLCJ2YWxpZGF0ZVNlbGVjdGlvbnNGb3JBbGxDaGVja3MiLCJpbnZhbGlkYXRlZCIsImNvbmNhdCIsIl9zYXZlQ2hlY2tpbmdEYXRhIiwidXBkYXRlQ29udGV4dCIsInNlbGVjdGlvbnMiLCJuZXdDaGVjayIsImdyb3Vwc0luZGV4XyIsInVuZGVmaW5lZCIsInJlZmVyZW5jZSIsInZlcnNlSGVscGVycyIsImdldFZlcnNlVGV4dEZyb21CaWJsZSIsImdldEFsaWduZWRHTFRleHQiLCJnZXRUaXRsZUZyb21JbmRleCIsImdyb3VwSWQiLCJvY2N1cnJlbmNlTm90ZSIsImdldFBocmFzZUZyb21UdyIsImdyb3VwRGF0YSIsImFydGljbGVzIiwiX2FydGljbGUiLCJhcnRpY2xlSWQiLCJncm91cHNJZHMiLCJfaSIsIl9ncm91cHNJZHMiLCJfZ3JvdXBJZCIsImdyb3VwIiwiY3VycmVudEFydGljbGVNYXJrZG93biIsImNvbnZlcnRNYXJrZG93bkxpbmtzIiwiZ2F0ZXdheUxhbmd1YWdlSWQiLCJjb21tZW50VGV4dCIsImJvb2tJZCIsImJvb2siLCJpZCIsImJvb2tOYW1lIiwiYm9va0RldGFpbHMiLCJ0YXJnZXRMYW5ndWFnZUZvbnQiLCJwcm9qZWN0Rm9udCIsImN1cnJlbnRDb250ZXh0SWQiLCJzZXRUb29sU2V0dGluZ3MiLCJOQU1FU1BBQ0UiLCJmaWVsZE5hbWUiLCJmaWVsZFZhbHVlIiwiX3Rvb2xzU2V0dGluZ3MiLCJjb21wb25lbnRTZXR0aW5ncyIsInNldFNldHRpbmdzIiwiX3NhdmVTZXR0aW5ncyIsIl9zZXR0aW5ncyIsIm5ld1NldHRpbmdzIiwiX3BhbmVTZXR0aW5ncyIsIl9wYW5lU2V0dGluZyIsIl9wYW5lS2V5U2V0dGluZ3MiLCJfaTIiLCJfa2V5cyIsImRvU2F2ZSIsInNldFRvb2xTZXR0aW5nc1NjcmlwdHVyZSIsIl9pdGVyYXRvciIsIl9zdGVwIiwibGFuZ3VhZ2VJZCIsImJpYmxlSWQiLCJvd25lciIsImVyciIsImFkZE9iamVjdFByb3BlcnR5VG9NYW5pZmVzdCIsIl9tYW5pZmVzdCIsImFwcFNldHRpbmdzIiwiX2FwcFNldHRpbmdzIiwib3BlbkFsZXJ0RGlhbG9nIiwiY2hlY2tJZlZlcnNlQ2hhbmdlZCIsIl9uZXdWZXJzZVRleHQiLCJ0YXJnZXQiLCJfaXNWZXJzZUNoYW5nZWQiLCJoYW5kbGVFZGl0VmVyc2UiLCJjYW5jZWxFZGl0VmVyc2UiLCJzYXZlRWRpdFZlcnNlIiwiX2dldFJlZiIsImdldFJlZiIsImNoYXB0ZXIiLCJ2ZXJzZSIsInZlcnNlUmVmIiwidmVyc2VTcGFuIiwiYmVmb3JlIiwiZWRpdFRhcmdldFZlcnNlIiwiaGFuZGxlR29Ub05leHQiLCJuZXh0Q2hlY2siLCJmaW5kTmV4dENoZWNrIiwiY2hhbmdlQ3VycmVudENoZWNrXyIsImhhbmRsZUdvVG9QcmV2aW91cyIsInByZXZpb3VzQ2hlY2siLCJmaW5kUHJldmlvdXNDaGVjayIsImhhbmRsZVRhZ3NDaGVja2JveCIsInRhZyIsImN1cnJlbnRUYWdzIiwidGFnSW5kZXgiLCJpbmRleE9mIiwiX25ld1RhZ3MiLCJjb3B5Iiwic3BsaWNlIiwidmFsaWRhdGVTZWxlY3Rpb25zIiwidmVyc2VUZXh0XyIsInNlbGVjdGlvbnNfIiwic2VsZWN0aW9uc0hlbHBlcnMiLCJ2YWxpZGF0ZVZlcnNlU2VsZWN0aW9ucyIsInVuZmlsdGVyZWRWZXJzZVRleHQiLCJ1c2VNZW1vIiwidW5maWx0ZXJlZFZlcnNlVGV4dF8iLCJ2ZXJzZURhdGEiLCJnZXRWZXJzZURhdGFGcm9tQmlibGUiLCJVc2ZtRmlsZUNvbnZlcnNpb25IZWxwZXJzIiwiZ2V0VXNmbUZvclZlcnNlQ29udGVudCIsInNldFRlbXBDaGVja2luZ0l0ZW0iLCJuZXdDaGVja2luZ0RhdGEiLCJjaGFuZ2VTZWxlY3Rpb25zSW5Mb2NhbFN0YXRlIiwidG9nZ2xlTm90aGluZ1RvU2VsZWN0Iiwic2VsZWN0IiwibmV3Q29udGV4dCIsIm5vQ2hlY2siLCJuZXdDb250ZXh0SWQiLCJzZWxlY3Rpb25zVW5jaGFuZ2VkIiwiaXNFcXVhbCIsImRpcmVjdGlvbiIsImJvb2ttYXJrRW5hYmxlZCIsImlzVmVyc2VFZGl0ZWQiLCJpc1ZlcnNlSW52YWxpZGF0ZWQiLCJfc2F2ZVNlbGVjdGlvbiIsIl9jbG9uZURhdGFGb3JTYXZpbmciLCJjbG9uZURhdGFGb3JTYXZpbmciLCJjaGVja0luR3JvdXBzRGF0YSIsIl9jdXJyZW50Q2hlY2siLCJfbmV3Q2hlY2tpbmdEYXRhIiwiZGVsZXRlVGVtcENoZWNraW5nRGF0YSIsInVwZGF0ZVZhbHVlc0luQ2hlY2tEYXRhIiwiX2dyb3Vwc0RhdGEiLCJfIiwiY2xvbmVEZWVwIiwiY2F0ZWdvcnkiLCJuZXdDaGVja0RhdGEiLCJfaTMiLCJfT2JqZWN0JGtleXMiLCJuZXdDaGVja2luZ1ZhbHVlIiwiX3NhdmVEYXRhIiwibmV3RGF0YSIsIl9jbG9uZURhdGFGb3JTYXZpbmcyIiwiX2k0IiwiX09iamVjdCRrZXlzMiIsImNoYW5nZWREYXRhIiwiX2k1IiwiX09iamVjdCRrZXlzMyIsIl90ZW1wQ2hlY2tpbmdEYXRhIiwiY2FuY2VsU2VsZWN0aW9uIiwiY2xlYXJTZWxlY3Rpb24iLCJ0b2dnbGVCb29rbWFyayIsInJlbWluZGVycyIsImNoYW5nZU1vZGUiLCJjaGVja0lmQ29tbWVudENoYW5nZWQiLCJuZXdjb21tZW50Iiwib2xkY29tbWVudCIsImNhbmNlbENvbW1lbnQiLCJzYXZlQ29tbWVudCIsIm5ld0NvbW1lbnQiLCJjb21tZW50cyIsImhhbmRsZUNvbW1lbnQiLCJwcmV2ZW50RGVmYXVsdCIsInJlYWR5VG9EaXNwbGF5Q2hlY2tlciIsImdldExleGljb25EYXRhXyIsImxleGljb25JZCIsImVudHJ5SWQiLCJsZXhpY29uRGF0YSIsIm9uQ2xvc2VQb3BvdmVyIiwic2hvd1BvcG92ZXIiLCJ0aXRsZSIsImJvZHlUZXh0IiwicG9zaXRpb25Db29yZCIsInRvZ2dsZUhlbHBzTW9kYWwiLCJfc2hvd0hlbHBzTW9kYWwiLCJ0b2dnbGVIZWxwcyIsIl9zaG93SGVscHMiLCJzYXZlQmlibGVUb0tleSIsImtleUdyb3VwIiwib2xkVmVyc2VUZXh0IiwiX2JpYmxlcyIsIl90YXJnZXRCaWJsZSIsInRhcmdldEJvb2siLCJ0YXJnZXRDaGFwdGVyIiwiY29udmVydFZlcnNlRGF0YVRvVVNGTSIsImN1cnJlbnRDaGFwdGVyRGF0YSIsImN1cnJlbnRWZXJzZURhdGEiLCJfQWxpZ25tZW50SGVscGVycyR1cGQiLCJBbGlnbm1lbnRIZWxwZXJzIiwidXBkYXRlQWxpZ25tZW50c1RvVGFyZ2V0VmVyc2UiLCJ0YXJnZXRWZXJzZU9iamVjdHMiLCJ2ZXJzZU9iamVjdHMiLCJ1cGRhdGVTZXR0aW5ncyIsInJlbW92ZVVzZm1NYXJrZXJzIiwidmFsaWRhdGVBbGxTZWxlY3Rpb25zRm9yVmVyc2UiLCJ2ZXJzZUVkaXRzIiwibmV3QmlibGVzIiwiX3RhcmdldEJpYmxlJG1hbmlmZXN0IiwiX3RhcmdldEJpYmxlJG1hbmlmZXN0MiIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJiaWJsZSIsIk5UX09SSUdfTEFORyIsIk9UX09SSUdfTEFORyIsImluaXRpYWxQYW5lU2V0dGluZ3MiLCJsYW5nS2V5IiwicGFuZSIsIkNoZWNrQXJlYSIsImZvbnRTaXplIiwibGFuZ3VhZ2VfbmFtZSIsImR1Ymxpbl9jb3JlIiwibGFuZ3VhZ2UiLCJfZ2V0U2NyaXB0dXJlRnJvbVJlZmVyZW5jZSIsImxhbmciLCJnZXRTY3JpcHR1cmVGcm9tUmVmZXJlbmNlIiwidGFyZ2V0X2xhbmd1YWdlIiwicHJvamVjdCIsImV4cGFuZGVkU2NyaXB0dXJlUGFuZVRpdGxlIiwic3R5bGVQcm9wcyIsIl9jaGVja2VyU3R5bGVzIiwiY3JlYXRlRWxlbWVudCIsInN0eWxlIiwiY2hhbmdlQ3VycmVudENvbnRleHRJZCIsImNvbXBsZXhTY3JpcHRGb250cyIsImN1cnJlbnRQYW5lU2V0dGluZ3MiLCJlZGl0VmVyc2VSZWYiLCJnZXRBdmFpbGFibGVTY3JpcHR1cmVQYW5lU2VsZWN0aW9ucyIsIm1ha2VTdXJlQmlibGVzTG9hZGVkRm9yVG9vbCIsInByb2plY3REZXRhaWxzUmVkdWNlciIsIm9uRXhwYW5kZWRTY3JpcHR1cmVQYW5lU2hvdyIsIm9uTGlua0NsaWNrIiwib25TZWVNb3JlQ2xpY2siLCJwaHJhc2UiLCJzZWVNb3JlTGFiZWwiLCJzaG93U2VlTW9yZUJ1dHRvbiIsImRpYWxvZ01vZGFsVmlzaWJpbGl0eSIsImhhbmRsZU9wZW5EaWFsb2ciLCJoYW5kbGVDbG9zZURpYWxvZyIsImhhbmRsZVNraXAiLCJsb2NhbE5vdGhpbmdUb1NlbGVjdCIsInNhdmVTZWxlY3Rpb24iLCJ0YWdzIiwibW9kYWxBcnRpY2xlIiwiZXhwYW5kZWRIZWxwc0J1dHRvbkhvdmVyVGV4dCIsIm1vZGFsVGl0bGUiLCJpc1Nob3dIZWxwc0V4cGFuZGVkIiwib3BlbkV4cGFuZGVkSGVscHNNb2RhbCIsInNpZGViYXJUb2dnbGUiLCJpc1Nob3dIZWxwc1NpZGViYXIiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJvYmplY3QiLCJhcnJheSIsImZ1bmMiLCJpc1JlcXVpcmVkIiwic3RyaW5nIiwiYm9vbCIsIl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvQ2hlY2tlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlIENoZWNrZXIuanNcbiAqXG4gKiBAc3lub3BzaXNcbiAqIFRoaXMgaXMgdGhlIG1haW4gY2hlY2tpbmcgY29tcG9uZW50IHRoYXQgcHJvdmlkZXMgYW4gaW50ZWdyYXRlZCBpbnRlcmZhY2UgZm9yIEJpYmxlIHRyYW5zbGF0aW9uIGNoZWNraW5nLlxuICogSXQgc3VwcG9ydHMgYm90aCBUcmFuc2xhdGlvbiBOb3RlcyAoVE4pIGFuZCBUcmFuc2xhdGlvbiBXb3JkcyAoVFcpIGNoZWNraW5nIHdvcmtmbG93cy5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFRoZSBDaGVja2VyIGNvbXBvbmVudCBpcyBhIGNvbXByZWhlbnNpdmUgdG9vbCBmb3IgbWFuYWdpbmcgYW5kIHByZXNlbnRpbmcgQmlibGUgY2hlY2tpbmcgZGF0YSBhbmQgdHJhbnNsYXRpb25zLlxuICogSXQgaGFuZGxlczpcbiAqIC0gTG9hZGluZyBhbmQgZGlzcGxheWluZyBjaGVja2luZyBkYXRhICh0cmFuc2xhdGlvbiBub3RlcyBvciB0cmFuc2xhdGlvbiB3b3JkcylcbiAqIC0gTWFuYWdpbmcgdXNlciBzZWxlY3Rpb25zIGFuZCBhbm5vdGF0aW9ucyBpbiB2ZXJzZXNcbiAqIC0gUHJvdmlkaW5nIG11bHRpLXBhbmUgU2NyaXB0dXJlIHZpZXdpbmcgd2l0aCB2YXJpb3VzIEJpYmxlIHJlc291cmNlc1xuICogLSBIYW5kbGluZyB2ZXJzZSBlZGl0aW5nIGFuZCB2YWxpZGF0aW9uXG4gKiAtIE1hbmFnaW5nIGNvbW1lbnRzLCBib29rbWFya3MsIGFuZCB0YWdzIGZvciBjaGVja3NcbiAqIC0gTmF2aWdhdGluZyBiZXR3ZWVuIGNoZWNrcyAobmV4dC9wcmV2aW91cylcbiAqIC0gRGlzcGxheWluZyB0cmFuc2xhdGlvbiBoZWxwcyBpbiBhbiBpbnRlZ3JhdGVkIHNpZGViYXJcbiAqIC0gUGVyc2lzdGluZyB1c2VyIHNldHRpbmdzIGFuZCBjaGVja2luZyBwcm9ncmVzc1xuICpcbiAqIFRoZSBjb21wb25lbnQgbWFpbnRhaW5zIGNvbXBsZXggc3RhdGUgaW5jbHVkaW5nOlxuICogLSBDdXJyZW50IGNoZWNrIGRhdGEgYW5kIGNvbnRleHRcbiAqIC0gVXNlciBzZWxlY3Rpb25zIGFuZCB0ZW1wb3JhcnkgY2hhbmdlc1xuICogLSBQYW5lIHNldHRpbmdzIGZvciBTY3JpcHR1cmUgZGlzcGxheVxuICogLSBUb29sLXNwZWNpZmljIHNldHRpbmdzXG4gKiAtIFVJIHN0YXRlIChtb2RlcywgbW9kYWxzLCBwb3BvdmVycylcbiAqXG4gKiBAcmVxdWlyZW1lbnRzXG4gKiAtIFJlYWN0IDE4LjMuMStcbiAqIC0gd29yZC1hbGlnbmVyLWxpYiBmb3IgdmVyc2UgYW5kIGFsaWdubWVudCBoZWxwZXJzXG4gKiAtIGRlZXAtZXF1YWwgZm9yIG9iamVjdCBjb21wYXJpc29uXG4gKiAtIGxvZGFzaCBmb3IgZGVlcCBjbG9uaW5nXG4gKiAtIE1hdGVyaWFsLVVJIGNvbXBvbmVudHMgZm9yIFVJIGVsZW1lbnRzXG4gKlxuICogQGRlcGVuZGVuY2llc1xuICogLSBHcm91cE1lbnVDb21wb25lbnQ6IE5hdmlnYXRpb24gbWVudSBmb3IgY2hlY2tzXG4gKiAtIENoZWNrSW5mb0NhcmQ6IERpc3BsYXlzIGNoZWNrIHRpdGxlIGFuZCBwaHJhc2VcbiAqIC0gU2NyaXB0dXJlUGFuZTogTXVsdGktcGFuZSBTY3JpcHR1cmUgdmlld2VyXG4gKiAtIFRyYW5zbGF0aW9uSGVscHM6IFNpZGViYXIgZm9yIHRyYW5zbGF0aW9uIGhlbHAgYXJ0aWNsZXNcbiAqIC0gVmVyc2VDaGVjazogTWFpbiBjaGVja2luZyBpbnRlcmZhY2UgZm9yIHZlcnNlc1xuICogLSBQb3BvdmVyQ29udGFpbmVyOiBEaXNwbGF5cyBjb250ZXh0dWFsIGluZm9ybWF0aW9uXG4gKi9cbmltcG9ydCB7IHJlbW92ZVVzZm1NYXJrZXJzIH0gZnJvbSAnLi4vdXRpbHMvdXNmbUhlbHBlcnMnXG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdmFsaWRhdGVTZWxlY3Rpb25zRm9yQWxsQ2hlY2tzIH0gZnJvbSAnLi4vdXRpbHMvc2VsZWN0aW9uSGVscGVyJ1xuaW1wb3J0IHtcbiAgZ2V0UmVmLFxuICBnZXRWZXJzZURhdGFGcm9tQmlibGUsXG59IGZyb20gJy4uL3RjX3VpX3Rvb2xraXQvU2NyaXB0dXJlUGFuZS9oZWxwZXJzL3ZlcnNlSGVscGVycydcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcydcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCdcbmltcG9ydCBHcm91cE1lbnVDb21wb25lbnQgZnJvbSAnLi9Hcm91cE1lbnVDb21wb25lbnQnXG5pbXBvcnQge1xuICBncm91cERhdGFIZWxwZXJzLFxuICBzZWxlY3Rpb25zSGVscGVycyxcbiAgVXNmbUZpbGVDb252ZXJzaW9uSGVscGVycyxcbiAgdmVyc2VIZWxwZXJzLFxuICBBbGlnbm1lbnRIZWxwZXJzLFxufSBmcm9tICd3b3JkLWFsaWduZXItbGliJ1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnZGVlcC1lcXVhbCdcbmltcG9ydCB7XG4gIGZpbmRDaGVjayxcbiAgZmluZE5leHRDaGVjayxcbiAgZmluZFByZXZpb3VzQ2hlY2ssXG4gIGdldEFsaWduZWRHTFRleHQsXG4gIGdldFBocmFzZUZyb21UdyxcbiAgZ2V0VGl0bGVGcm9tSW5kZXgsXG4gIHBhcnNlVHdUb0luZGV4LFxufSBmcm9tICcuLi9oZWxwZXJzL3RyYW5zbGF0aW9uSGVscHMvdHdBcnRpY2xlSGVscGVycydcbmltcG9ydCBDaGVja0luZm9DYXJkIGZyb20gJy4uL3RjX3VpX3Rvb2xraXQvQ2hlY2tJbmZvQ2FyZCdcbmltcG9ydCB7IHBhcnNlVG5Ub0luZGV4IH0gZnJvbSAnLi4vaGVscGVycy90cmFuc2xhdGlvbkhlbHBzL3RuQXJ0aWNsZUhlbHBlcnMnXG5pbXBvcnQgU2NyaXB0dXJlUGFuZSBmcm9tICcuLi90Y191aV90b29sa2l0L1NjcmlwdHVyZVBhbmUnXG5pbXBvcnQgUG9wb3ZlckNvbnRhaW5lciBmcm9tICcuLi9jb250YWluZXJzL1BvcG92ZXJDb250YWluZXInXG5pbXBvcnQgeyBOVF9PUklHX0xBTkcsIE9UX09SSUdfTEFORyB9IGZyb20gJy4uL2NvbW1vbi9Cb29rc09mVGhlQmlibGUnXG5pbXBvcnQgY29tcGxleFNjcmlwdEZvbnRzIGZyb20gJy4uL2NvbW1vbi9jb21wbGV4U2NyaXB0Rm9udHMnXG5pbXBvcnQgVHJhbnNsYXRpb25IZWxwcyBmcm9tICcuLi90Y191aV90b29sa2l0L1RyYW5zbGF0aW9uSGVscHMnXG5pbXBvcnQgKiBhcyB0SGVscHNIZWxwZXJzIGZyb20gJy4uL2hlbHBlcnMvdEhlbHBzSGVscGVycydcbmltcG9ydCBWZXJzZUNoZWNrIGZyb20gJy4uL3RjX3VpX3Rvb2xraXQvVmVyc2VDaGVjaydcbmltcG9ydCB7IGdldFNjcmlwdHVyZUZyb21SZWZlcmVuY2UgfSBmcm9tICcuLi9oZWxwZXJzL2NoZWNrSW5mb0NhcmRIZWxwZXJzJ1xuaW1wb3J0IHsgZ2V0UmVmZXJlbmNlU3RyRnJvbVRhcmdldEJpYmxlIH0gZnJvbSAnLi4vdGNfdWlfdG9vbGtpdC9TY3JpcHR1cmVQYW5lL2hlbHBlcnMvdXRpbHMnXG5cbmNvbnN0IGxvY2FsU3R5bGVzID0ge1xuICBjb250YWluZXJEaXY6IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ3JvdycsXG4gICAgd2lkdGg6ICc5N3Z3JyxcbiAgICBoZWlnaHQ6ICc2NXZ3JyxcbiAgfSxcbiAgY2VudGVyRGl2OiB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgIHdpZHRoOiAnODUlJyxcbiAgICBvdmVyZmxvd1g6ICdhdXRvJyxcbiAgICBtYXJnaW5MZWZ0OiAnMTBweCcsXG4gIH0sXG4gIHNjcmlwdHVyZVBhbmVEaXY6IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleFNocmluazogJzAnLFxuICAgIGhlaWdodDogJzI1MHB4JyxcbiAgICBwYWRkaW5nQm90dG9tOiAnMjBweCcsXG4gIH0sXG59XG5cbmV4cG9ydCBjb25zdCB0cmFuc2xhdGlvbldvcmRzID0gJ3RyYW5zbGF0aW9uV29yZHMnXG5leHBvcnQgY29uc3QgdHJhbnNsYXRpb25Ob3RlcyA9ICd0cmFuc2xhdGlvbk5vdGVzJ1xuY29uc3QgbWF4aW11bVNlbGVjdGlvbnMgPSAxMFxuXG5jb25zb2xlLmxvZygnQ2hlY2tlci5qcyAtIHN0YXJ0dXAnKVxuY29uc3QgbmFtZSA9ICdDaGVja2VyJ1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgQ2hlY2tlclxuICogVGhlIENoZWNrZXIgY29tcG9uZW50IGlzIHJlc3BvbnNpYmxlIGZvciBtYW5hZ2luZyBhbmQgcHJlc2VudGluZyBCaWJsZSBjaGVja2luZyBkYXRhIGFuZCB0cmFuc2xhdGlvbnMuXG4gKiBJdCBoYW5kbGVzIHN0YXRlIHVwZGF0ZXMsIHNldHRpbmdzIG1hbmFnZW1lbnQsIGFuZCBlbnN1cmVzIHRoZSBuZWNlc3NhcnkgZGF0YSBpcyBsb2FkZWQgYW5kIGRpc3BsYXllZCB0byB0aGUgdXNlci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gcGFyYW1ldGVycyAtIEFuIG9iamVjdCB3aXRoIGluaXRpYWxpemF0aW9uIHBhcmFtZXRlcnMgZm9yIHRoZSBDaGVja2VyIGNvbXBvbmVudC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBwYXJhbWV0ZXJzLmFsaWduZWRHbEJpYmxlIC0gVGhlIGFsaWduZWQgR2F0ZXdheSBMYW5ndWFnZSBCaWJsZSBkYXRhIHVzZWQgZm9yIHRyYW5zbGF0aW9ucy5cbiAqIEBwYXJhbSB7b2JqZWN0fSBwYXJhbWV0ZXJzLmJpYmxlcyAtIEJpYmxlIGRhdGEgZm9yIHZhcmlvdXMgbGFuZ3VhZ2VzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcGFyYW1ldGVycy5jaGFuZ2VkQ3VycmVudENoZWNrIC0gY2FsbGJhY2sgdG8gbm90aWZ5IG9mIGNoYW5nZXMgaW4gY29udGV4dC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHBhcmFtZXRlcnMuY2hhbmdlVGFyZ2V0VmVyc2UgLSBBIGZ1bmN0aW9uIHRvIHVwZGF0ZSB0aGUgY3VycmVudCB2ZXJzZSBiZWluZyBjaGVja2VkLlxuICogQHBhcmFtIHtvYmplY3R9IHBhcmFtZXRlcnMuY2hlY2tpbmdEYXRhIC0gRGF0YSByZWxhdGVkIHRvIGNoZWNrcyAoZS5nLiwgdHJhbnNsYXRpb24gbm90ZXMgb3IgdHJhbnNsYXRpb24gd29yZHMpLlxuICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtZXRlcnMuY2hlY2tUeXBlIC0gVGhlIHR5cGUgb2YgY2hlY2sgYmVpbmcgcGVyZm9ybWVkIChlLmcuLCB0cmFuc2xhdGlvbiBub3RlcywgdHJhbnNsYXRpb24gd29yZHMpLlxuICogQHBhcmFtIHtvYmplY3R9IHBhcmFtZXRlcnMuY29udGV4dElkIC0gT2JqZWN0IGNvbnRhaW5pbmcgbWV0YWRhdGEgYWJvdXQgdGhlIGN1cnJlbnQgZ3JvdXAvdmVyc2UgYmVpbmcgd29ya2VkIG9uLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcGFyYW1ldGVycy5nZXRMZXhpY29uRGF0YSAtIEZ1bmN0aW9uIHRvIHJldHJpZXZlIGxleGljb24gZGF0YS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBwYXJhbWV0ZXJzLmdsV29yZHNEYXRhIC0gRGF0YSByZWxhdGVkIHRvIEdhdGV3YXkgTGFuZ3VhZ2Ugd29yZHMgYW5kIGFsaWdubWVudCBpbmZvcm1hdGlvbi5cbiAqIEBwYXJhbSB7b2JqZWN0fSBwYXJhbWV0ZXJzLmluaXRpYWxTZXR0aW5ncyAtIFRoZSBpbml0aWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGZvciB0aGUgQ2hlY2tlciBjb21wb25lbnQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXJhbWV0ZXJzLnNhdmVDaGVja2luZ0RhdGEgLSBGdW5jdGlvbiB0byBzYXZlIHRoZSBtb2RpZmllZCBjaGVja2luZyBkYXRhLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcGFyYW1ldGVycy5zYXZlU2V0dGluZ3MgLSBGdW5jdGlvbiB0byBwZXJzaXN0IHVzZXIncyBjb21wb25lbnQgc2V0dGluZ3MuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXJhbWV0ZXJzLnNob3dEb2N1bWVudCAtIEZ1bmN0aW9uIHRvIGRpc3BsYXkgYSBkb2N1bWVudCBpbiB0aGUgaW50ZXJmYWNlLlxuICogQHBhcmFtIHtvYmplY3R9IHBhcmFtZXRlcnMuc3R5bGVzIC0gU3R5bGluZyBpbmZvcm1hdGlvbiB0byBjdXN0b21pemUgdGhlIGNvbXBvbmVudCdzIGFwcGVhcmFuY2UuXG4gKiBAcGFyYW0ge29iamVjdH0gcGFyYW1ldGVycy50YXJnZXRCaWJsZSAtIFRoZSB0YXJnZXQgQmlibGUgZGF0YSBmb3IgdGhlIHdvcmtpbmcgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge29iamVjdH0gcGFyYW1ldGVycy50YXJnZXRMYW5ndWFnZURldGFpbHMgLSBNZXRhZGF0YSBhYm91dCB0aGUgdGFyZ2V0IGxhbmd1YWdlLCBpbmNsdWRpbmcgYm9vayBhbmQgbGFuZ3VhZ2Utc3BlY2lmaWMgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHBhcmFtZXRlcnMudHJhbnNsYXRlIC0gQSBmdW5jdGlvbiB1c2VkIGZvciBzdHJpbmcgdHJhbnNsYXRpb25zIGluIHRoZSBVSS5cbiogQHBhcmFtIHtib29sZWFufSBwYXJhbWV0ZXJzLmRpc2FibGVGb250TWVudSAtIElmIHRydWUsIHRoZSBmb250IG1lbnUgd2lsbCBiZSBkaXNhYmxlZC5cbiAqL1xuY29uc3QgQ2hlY2tlciA9ICh7XG4gIGFsaWduZWRHbEJpYmxlLFxuICBiaWJsZXM6IGJpYmxlc18sXG4gIGNoYW5nZWRDdXJyZW50Q2hlY2ssXG4gIGNoYW5nZVRhcmdldFZlcnNlLFxuICBjaGVja2luZ0RhdGEsXG4gIGNoZWNrVHlwZSxcbiAgY29udGV4dElkLFxuICBnZXRMZXhpY29uRGF0YSxcbiAgZ2xXb3Jkc0RhdGEsXG4gIGluaXRpYWxTZXR0aW5ncyxcbiAgc2F2ZUNoZWNraW5nRGF0YSxcbiAgc2F2ZVNldHRpbmdzLFxuICBzaG93RG9jdW1lbnQsXG4gIHN0eWxlcyxcbiAgdGFyZ2V0QmlibGU6IHRhcmdldEJpYmxlXyxcbiAgdGFyZ2V0TGFuZ3VhZ2VEZXRhaWxzLFxuICB0cmFuc2xhdGUsXG4gIGRpc2FibGVGb250TWVudT0gZmFsc2Vcbn0pID0+IHtcbiAgLy8gTWFpbiBzZXR0aW5ncyBzdGF0ZSAtIGluY2x1ZGVzIHBhbmUgY29uZmlndXJhdGlvbiwgdG9vbCBzZXR0aW5ncywgYW5kIG1hbmlmZXN0IGRhdGFcbiAgY29uc3QgW3NldHRpbmdzLCBfc2V0U2V0dGluZ3NdID0gdXNlU3RhdGUoe1xuICAgIHBhbmVTZXR0aW5nczogW10sXG4gICAgcGFuZUtleVNldHRpbmdzOiB7fSxcbiAgICB0b29sc1NldHRpbmdzOiB7fSxcbiAgICBtYW5pZmVzdDoge30sXG4gIH0pXG4gIGNvbnN0IHsgcGFuZVNldHRpbmdzLCBwYW5lS2V5U2V0dGluZ3MsIHRvb2xzU2V0dGluZ3MsIG1hbmlmZXN0IH0gPSBzZXR0aW5nc1xuXG4gIC8vIEJpYmxlIGRhdGEgb3JnYW5pemVkIGJ5IGxhbmd1YWdlIGFuZCBJRFxuICBjb25zdCBbYmlibGVzLCBzZXRCaWJsZXNdID0gdXNlU3RhdGUoe30pXG5cbiAgLy8gQ3VycmVudCB0YXJnZXQgQmlibGUgYmVpbmcgY2hlY2tlZFxuICBjb25zdCBbdGFyZ2V0QmlibGUsIHNldFRhcmdldEJpYmxlXSA9IHVzZVN0YXRlKHRhcmdldEJpYmxlXylcblxuICAvLyBUZW1wb3JhcnkgY2hlY2tpbmcgZGF0YSBmb3IgdW5zYXZlZCBjaGFuZ2VzXG4gIGNvbnN0IFt0ZW1wQ2hlY2tpbmdEYXRhLCBzZXRUZW1wQ2hlY2tpbmdEYXRhXSA9IHVzZVN0YXRlKG51bGwpXG5cbiAgLy8gTG9jYWwgY2hlY2tpbmcgZGF0YSBmb3IgY3VycmVudCBzZXNzaW9uXG4gIGNvbnN0IFtsb2NhbENoZWNraW5nRGF0YSwgc2V0TG9jYWxDaGVja2luZ0RhdGFdID0gdXNlU3RhdGUobnVsbClcblxuICAvLyBNYWluIGNvbXBvbmVudCBzdGF0ZVxuICBjb25zdCBbc3RhdGUsIF9zZXRTdGF0ZV0gPSB1c2VTdGF0ZSh7XG4gICAgYWxpZ25lZEdMVGV4dDogJycsIC8vIEdhdGV3YXkgTGFuZ3VhZ2UgdGV4dCBhbGlnbmVkIHRvIG9yaWdpbmFsXG4gICAgYXJ0aWNsZTogbnVsbCwgLy8gQ3VycmVudCB0cmFuc2xhdGlvbiBoZWxwIGFydGljbGVcbiAgICBjdXJyZW50Q2hlY2s6IG51bGwsIC8vIEN1cnJlbnQgY2hlY2sgYmVpbmcgd29ya2VkIG9uXG4gICAgY3VycmVudENoZWNraW5nRGF0YTogbnVsbCwgLy8gQWxsIGNoZWNraW5nIGRhdGEgZm9yIGN1cnJlbnQgYm9va1xuICAgIGdyb3VwVGl0bGU6ICcnLCAvLyBUaXRsZSBvZiBjdXJyZW50IGNoZWNrIGdyb3VwXG4gICAgZ3JvdXBQaHJhc2U6ICcnLCAvLyBQaHJhc2Ugb3Igb2NjdXJyZW5jZSBub3RlIGZvciBjdXJyZW50IGNoZWNrXG4gICAgZ3JvdXBzRGF0YTogbnVsbCwgLy8gRmxhdHRlbmVkIGdyb3VwIGRhdGEgZm9yIGFsbCBjaGVja3NcbiAgICBncm91cHNJbmRleDogbnVsbCwgLy8gSW5kZXggb2YgYWxsIGNoZWNrIGdyb3Vwc1xuICAgIGlzQ29tbWVudENoYW5nZWQ6IGZhbHNlLCAvLyBXaGV0aGVyIGNvbW1lbnQgaGFzIHVuc2F2ZWQgY2hhbmdlc1xuICAgIGlzVmVyc2VDaGFuZ2VkOiBmYWxzZSwgLy8gV2hldGhlciB2ZXJzZSBoYXMgdW5zYXZlZCBjaGFuZ2VzXG4gICAgbW9kZTogJ2RlZmF1bHQnLCAvLyBDdXJyZW50IFVJIG1vZGUgKGRlZmF1bHQsIHNlbGVjdCwgZWRpdCwgY29tbWVudClcbiAgICBuZXdWZXJzZVRleHQ6IG51bGwsIC8vIE5ldyB2ZXJzZSB0ZXh0IGR1cmluZyBlZGl0aW5nXG4gICAgcG9wb3ZlclByb3BzOiB7XG4gICAgICBwb3BvdmVyVmlzaWJpbGl0eTogZmFsc2UsXG4gICAgfSxcbiAgICBzaG93SGVscHNNb2RhbDogZmFsc2UsIC8vIFdoZXRoZXIgaGVscHMgbW9kYWwgaXMgc2hvd25cbiAgICBzaG93SGVscHM6IHRydWUsIC8vIFdoZXRoZXIgaGVscHMgc2lkZWJhciBpcyBzaG93blxuICAgIG5ld1RhZ3M6IG51bGwsIC8vIE5ldyB0YWdzIGJlaW5nIGFkZGVkXG4gICAgdmVyc2VUZXh0OiAnJywgLy8gQ3VycmVudCB2ZXJzZSB0ZXh0XG4gIH0pXG5cbiAgY29uc3Qge1xuICAgIGFsaWduZWRHTFRleHQsXG4gICAgYXJ0aWNsZSxcbiAgICBjdXJyZW50Q2hlY2ssXG4gICAgY3VycmVudENoZWNraW5nRGF0YSxcbiAgICBncm91cFRpdGxlLFxuICAgIGdyb3VwUGhyYXNlLFxuICAgIGdyb3Vwc0RhdGEsXG4gICAgZ3JvdXBzSW5kZXgsXG4gICAgaXNDb21tZW50Q2hhbmdlZCxcbiAgICBpc1ZlcnNlQ2hhbmdlZCxcbiAgICBtb2RlLFxuICAgIG5ld1ZlcnNlVGV4dCxcbiAgICBwb3BvdmVyUHJvcHMsXG4gICAgc2hvd0hlbHBzTW9kYWwsXG4gICAgc2hvd0hlbHBzLFxuICAgIG5ld1RhZ3MsXG4gICAgdmVyc2VUZXh0LFxuICB9ID0gc3RhdGVcblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgc3RhdGUgb2JqZWN0IHdpdGggbmV3IHZhbHVlc1xuICAgKiBAcGFyYW0ge29iamVjdH0gbmV3U3RhdGUgLSBPYmplY3QgY29udGFpbmluZyBzdGF0ZSBwcm9wZXJ0aWVzIHRvIHVwZGF0ZVxuICAgKi9cbiAgZnVuY3Rpb24gc2V0U3RhdGUobmV3U3RhdGUpIHtcbiAgICBfc2V0U3RhdGUocHJldlN0YXRlID0+ICh7IC4uLnByZXZTdGF0ZSwgLi4ubmV3U3RhdGUgfSkpXG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgY3VycmVudCBzYXZlZCB2YWx1ZSBmb3IgYSBjaGVjayBwcm9wZXJ0eVxuICAgKiBGYWxscyBiYWNrIHRvIGxvY2FsIGNoZWNraW5nIGRhdGEgaWYgYXZhaWxhYmxlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBQcm9wZXJ0eSBuYW1lXG4gICAqIEByZXR1cm5zIHsqfSBDdXJyZW50IHZhbHVlXG4gICAqL1xuICBmdW5jdGlvbiBnZXRDdXJyZW50VmFsdWVGb3Ioa2V5KSB7XG4gICAgaWYgKGxvY2FsQ2hlY2tpbmdEYXRhPy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICByZXR1cm4gbG9jYWxDaGVja2luZ0RhdGFba2V5XVxuICAgIH1cbiAgICByZXR1cm4gY3VycmVudENoZWNrPy5ba2V5XVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHRlbXBvcmFyeSAodW5zYXZlZCkgdmFsdWUgZm9yIGEgY2hlY2sgcHJvcGVydHlcbiAgICogRmFsbHMgYmFjayB0aHJvdWdoIGxvY2FsIGNoZWNraW5nIGRhdGEgdG8gY3VycmVudCBjaGVja1xuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gUHJvcGVydHkgbmFtZVxuICAgKiBAcmV0dXJucyB7Kn0gVGVtcG9yYXJ5IHZhbHVlXG4gICAqL1xuICBmdW5jdGlvbiBnZXRUZW1wVmFsdWVGb3Ioa2V5KSB7XG4gICAgaWYgKHRlbXBDaGVja2luZ0RhdGE/Lmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgIHJldHVybiB0ZW1wQ2hlY2tpbmdEYXRhW2tleV1cbiAgICB9XG4gICAgcmV0dXJuIGdldEN1cnJlbnRWYWx1ZUZvcihrZXkpXG4gIH1cblxuICBjb25zdCBjdXJyZW50U2VsZWN0aW9ucyA9IGdldEN1cnJlbnRWYWx1ZUZvcignc2VsZWN0aW9ucycpIHx8IFtdXG4gIGNvbnN0IHRlbXBTZWxlY3Rpb25zID0gZ2V0VGVtcFZhbHVlRm9yKCdzZWxlY3Rpb25zJykgfHwgW11cbiAgY29uc3QgdGVtcE5vdGhpbmdUb1NlbGVjdCA9IGdldFRlbXBWYWx1ZUZvcignbm90aGluZ1RvU2VsZWN0JylcbiAgY29uc3QgY3VycmVudE5vdGhpbmdUb1NlbGVjdCA9IGdldEN1cnJlbnRWYWx1ZUZvcignbm90aGluZ1RvU2VsZWN0JylcbiAgY29uc3QgZ3JvdXBzRGF0YUxvYWRlZCA9ICEhZ3JvdXBzRGF0YVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBVSSBtb2RlIGJhc2VkIG9uIHNlbGVjdGlvbnMgc3RhdGVcbiAgICogU3dpdGNoZXMgdG8gJ3NlbGVjdCcgbW9kZSBpZiBubyBzZWxlY3Rpb25zIGFuZCBub3RoaW5nIGlzIG1hcmtlZCBhcyB1bnNlbGVjdGFibGVcbiAgICogQHBhcmFtIHtBcnJheX0gbmV3U2VsZWN0aW9ucyAtIEN1cnJlbnQgc2VsZWN0aW9ucyBhcnJheVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IG5vdGhpbmdUb1NlbGVjdCAtIFdoZXRoZXIgdmVyc2UgaXMgbWFya2VkIGFzIGhhdmluZyBub3RoaW5nIHRvIHNlbGVjdFxuICAgKi9cbiAgZnVuY3Rpb24gdXBkYXRlTW9kZUZvclNlbGVjdGlvbnMobmV3U2VsZWN0aW9ucywgbm90aGluZ1RvU2VsZWN0KSB7XG4gICAgY29uc3Qgbm9TZWxlY3Rpb25zID0gIW5ld1NlbGVjdGlvbnM/Lmxlbmd0aFxuICAgIGNvbnN0IG5ld01vZGUgPSBub1NlbGVjdGlvbnMgJiYgIW5vdGhpbmdUb1NlbGVjdCA/ICdzZWxlY3QnIDogJ2RlZmF1bHQnXG4gICAgc2V0U3RhdGUoe1xuICAgICAgbW9kZTogbmV3TW9kZSxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEVmZmVjdCBob29rIHRvIGluaXRpYWxpemUgY2hlY2tpbmcgZGF0YSB3aGVuIGNoZWNraW5nRGF0YSBvciBnbFdvcmRzRGF0YSBjaGFuZ2VzXG4gICAqIEZsYXR0ZW5zIGdyb3VwIGRhdGEsIGNyZWF0ZXMgaW5kZXgsIGZpbmRzIGluaXRpYWwgY2hlY2ssIGFuZCB2YWxpZGF0ZXMgYWxsIGNoZWNrc1xuICAgKi9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYXZlRGF0YSA9XG4gICAgICBjaGVja2luZ0RhdGEgJiZcbiAgICAgIE9iamVjdC5rZXlzKGNoZWNraW5nRGF0YSkubGVuZ3RoICYmXG4gICAgICBnbFdvcmRzRGF0YSAmJlxuICAgICAgT2JqZWN0LmtleXMoZ2xXb3Jkc0RhdGEpLmxlbmd0aFxuICAgIGNvbnN0IGdyb3Vwc0RhdGFJbml0aWFsaXplZCA9IGdyb3Vwc0RhdGEgJiYgT2JqZWN0LmtleXMoZ3JvdXBzRGF0YSkubGVuZ3RoXG4gICAgaWYgKGhhdmVEYXRhICYmICFncm91cHNEYXRhSW5pdGlhbGl6ZWQpIHtcbiAgICAgIGxldCBmbGF0dGVuZWRHcm91cERhdGEgPSBudWxsXG4gICAgICBsZXQgZ3JvdXBzSW5kZXggPSBudWxsXG4gICAgICBpZiAoY2hlY2tpbmdEYXRhKSB7XG4gICAgICAgIGZsYXR0ZW5lZEdyb3VwRGF0YSA9IGdyb3VwRGF0YUhlbHBlcnMuZmxhdHRlbkdyb3VwRGF0YShjaGVja2luZ0RhdGEpXG4gICAgICB9XG5cbiAgICAgIGlmIChnbFdvcmRzRGF0YSkge1xuICAgICAgICBpZiAoY2hlY2tUeXBlID09PSB0cmFuc2xhdGlvbk5vdGVzKSB7XG4gICAgICAgICAgZ3JvdXBzSW5kZXggPSBwYXJzZVRuVG9JbmRleChnbFdvcmRzRGF0YSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBncm91cHNJbmRleCA9IHBhcnNlVHdUb0luZGV4KGdsV29yZHNEYXRhKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNoZWNrID0gZmluZENoZWNrKGZsYXR0ZW5lZEdyb3VwRGF0YSwgY29udGV4dElkLCB0cnVlKVxuICAgICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICAgIGdyb3Vwc0RhdGE6IGZsYXR0ZW5lZEdyb3VwRGF0YSxcbiAgICAgICAgZ3JvdXBzSW5kZXgsXG4gICAgICAgIGN1cnJlbnRDaGVja2luZ0RhdGE6IGNoZWNraW5nRGF0YSxcbiAgICAgICAgY3VycmVudENoZWNrOiBjaGVjayxcbiAgICAgICAgbW9kaWZpZWQ6IGZhbHNlLFxuICAgICAgICBpc0NvbW1lbnRDaGFuZ2VkOiBmYWxzZSxcbiAgICAgIH1cbiAgICAgIGNvbnNvbGUubG9nKCdkZWJ1ZycsIHRhcmdldEJpYmxlLCBmbGF0dGVuZWRHcm91cERhdGEpXG4gICAgICAvLyB2YWxpZGF0ZSBhbGwgY2hlY2tzXG4gICAgICB2YWxpZGF0ZVNlbGVjdGlvbnNGb3JBbGxDaGVja3MoXG4gICAgICAgIHRhcmdldEJpYmxlLFxuICAgICAgICBmbGF0dGVuZWRHcm91cERhdGEsXG4gICAgICAgIChjaGVjaywgaW52YWxpZGF0ZWQpID0+IHtcbiAgICAgICAgICBpZiAoY2hlY2spIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICBgJHtuYW1lfS1zYXZlRWRpdFZlcnNlIC0gY2hlY2sgdmFsaWRhdGlvbiBjaGFuZ2VkYCxcbiAgICAgICAgICAgICAgY2hlY2tcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIF9zYXZlQ2hlY2tpbmdEYXRhKGNoZWNrLCB7IGludmFsaWRhdGVkIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApXG5cbiAgICAgIHNldFN0YXRlKG5ld1N0YXRlKVxuXG4gICAgICBpZiAoZmxhdHRlbmVkR3JvdXBEYXRhICYmIGNoZWNrPy5jb250ZXh0SWQpIHtcbiAgICAgICAgdXBkYXRlQ29udGV4dChjaGVjaywgZ3JvdXBzSW5kZXgpXG4gICAgICAgIHVwZGF0ZU1vZGVGb3JTZWxlY3Rpb25zKGNoZWNrPy5zZWxlY3Rpb25zLCBjaGVjaz8ubm90aGluZ1RvU2VsZWN0KVxuICAgICAgfVxuICAgIH1cbiAgfSwgW2NvbnRleHRJZCwgY2hlY2tpbmdEYXRhLCBnbFdvcmRzRGF0YV0pXG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGNvbnRleHQgYW5kIHJlbGF0ZWQgZGF0YSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgY2hlY2sgYW5kIGdyb3VwIGluZGV4LlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gbmV3Q2hlY2sgLSBUaGUgbmV3IGNoZWNrIG9iamVjdCBjb250YWluaW5nIGNvbnRleHQgaW5mb3JtYXRpb24uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbZ3JvdXBzSW5kZXhfPWdyb3Vwc0luZGV4XSAtIEFuIG9wdGlvbmFsIGdyb3VwIGluZGV4IG9iamVjdCwgZGVmYXVsdHMgdG8gdGhlIGdsb2JhbCB2YXJpYWJsZSBgZ3JvdXBzSW5kZXhgLlxuICAgKiBAcmV0dXJuIHt2b2lkfSBEb2VzIG5vdCByZXR1cm4gYSB2YWx1ZS4gVXBkYXRlcyB0aGUgc3RhdGUgb2YgdGhlIGFwcGxpY2F0aW9uIHdpdGggbmV3IGNvbnRleHQgZGF0YS5cbiAgICovXG4gIGZ1bmN0aW9uIHVwZGF0ZUNvbnRleHQobmV3Q2hlY2ssIGdyb3Vwc0luZGV4XyA9IGdyb3Vwc0luZGV4KSB7XG4gICAgY29uc3QgY29udGV4dElkID0gbmV3Q2hlY2s/LmNvbnRleHRJZFxuICAgIGNvbnN0IHJlZmVyZW5jZSA9IGNvbnRleHRJZD8ucmVmZXJlbmNlXG4gICAgY29uc3QgdmVyc2VUZXh0ID0gdmVyc2VIZWxwZXJzLmdldFZlcnNlVGV4dEZyb21CaWJsZSh0YXJnZXRCaWJsZSwgcmVmZXJlbmNlKVxuICAgIGNvbnN0IGFsaWduZWRHTFRleHQgPSBnZXRBbGlnbmVkR0xUZXh0KGFsaWduZWRHbEJpYmxlLCBjb250ZXh0SWQpXG4gICAgY29uc3QgZ3JvdXBUaXRsZSA9IGdldFRpdGxlRnJvbUluZGV4KGdyb3Vwc0luZGV4XywgY29udGV4dElkPy5ncm91cElkKVxuICAgIGNvbnN0IGdyb3VwUGhyYXNlID1cbiAgICAgIGNoZWNrVHlwZSA9PT0gdHJhbnNsYXRpb25Ob3Rlc1xuICAgICAgICA/IGNvbnRleHRJZD8ub2NjdXJyZW5jZU5vdGVcbiAgICAgICAgOiBnZXRQaHJhc2VGcm9tVHcoZ2xXb3Jkc0RhdGEsIGNvbnRleHRJZD8uZ3JvdXBJZClcblxuICAgIGxldCBncm91cERhdGFcbiAgICBpZiAoZ2xXb3Jkc0RhdGEpIHtcbiAgICAgIGlmIChjaGVja1R5cGUgPT09IHRyYW5zbGF0aW9uTm90ZXMpIHtcbiAgICAgICAgZ3JvdXBEYXRhID0ge1xuICAgICAgICAgIHRyYW5zbGF0ZToge1xuICAgICAgICAgICAgYXJ0aWNsZXM6IGdsV29yZHNEYXRhPy50cmFuc2xhdGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ3JvdXBEYXRhID0ge1xuICAgICAgICAgIC4uLmdsV29yZHNEYXRhLFxuICAgICAgICAgIG1hbmlmZXN0OiB7fSxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBfYXJ0aWNsZVxuICAgIGNvbnN0IGFydGljbGVJZCA9IGNvbnRleHRJZD8uZ3JvdXBJZFxuICAgIGNvbnN0IGdyb3Vwc0lkcyA9IE9iamVjdC5rZXlzKGdyb3VwRGF0YSlcbiAgICBmb3IgKGNvbnN0IF9ncm91cElkIG9mIGdyb3Vwc0lkcykge1xuICAgICAgY29uc3QgZ3JvdXAgPSBncm91cERhdGFbX2dyb3VwSWRdXG4gICAgICBjb25zdCBhcnRpY2xlcyA9IGdyb3VwPy5hcnRpY2xlcyB8fCB7fVxuICAgICAgX2FydGljbGUgPSBhcnRpY2xlcz8uW2FydGljbGVJZF0gfHwgbnVsbFxuICAgICAgaWYgKF9hcnRpY2xlKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRBcnRpY2xlTWFya2Rvd24gPSB0SGVscHNIZWxwZXJzLmNvbnZlcnRNYXJrZG93bkxpbmtzKFxuICAgICAgICAgIF9hcnRpY2xlLFxuICAgICAgICAgIGdhdGV3YXlMYW5ndWFnZUlkXG4gICAgICAgIClcbiAgICAgICAgX2FydGljbGUgPSBjdXJyZW50QXJ0aWNsZU1hcmtkb3duXG4gICAgICAgIC8vIGNvbnN0IHRIZWxwc01vZGFsTWFya2Rvd24gPSB0SGVscHNIZWxwZXJzLmNvbnZlcnRNYXJrZG93bkxpbmtzKG1vZGFsQXJ0aWNsZSwgZ2F0ZXdheUxhbmd1YWdlQ29kZSwgYXJ0aWNsZUNhdGVnb3J5KTtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRTdGF0ZSh7XG4gICAgICBhbGlnbmVkR0xUZXh0LFxuICAgICAgY3VycmVudENoZWNrOiBuZXdDaGVjayxcbiAgICAgIHZlcnNlVGV4dCxcbiAgICAgIGdyb3VwVGl0bGUsXG4gICAgICBncm91cFBocmFzZSxcbiAgICAgIGFydGljbGU6IF9hcnRpY2xlLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBjb21tZW50VGV4dCA9IGdldEN1cnJlbnRWYWx1ZUZvcignY29tbWVudHMnKSB8fCAnJ1xuICBjb25zdCBib29rSWQgPSB0YXJnZXRMYW5ndWFnZURldGFpbHM/LmJvb2s/LmlkXG4gIGNvbnN0IGJvb2tOYW1lID0gdGFyZ2V0TGFuZ3VhZ2VEZXRhaWxzPy5ib29rPy5uYW1lXG4gIGNvbnN0IGJvb2tEZXRhaWxzID0ge1xuICAgIGlkOiBib29rSWQsXG4gICAgbmFtZTogYm9va05hbWUsXG4gIH1cbiAgY29uc3QgZ2F0ZXdheUxhbmd1YWdlSWQgPSB0YXJnZXRMYW5ndWFnZURldGFpbHM/LmdhdGV3YXlMYW5ndWFnZUlkXG4gIGNvbnN0IHRhcmdldExhbmd1YWdlRm9udCA9IG1hbmlmZXN0Py5wcm9qZWN0Rm9udCB8fCAnJ1xuICBjb25zdCBjdXJyZW50Q29udGV4dElkID0gY3VycmVudENoZWNrPy5jb250ZXh0SWRcblxuICAvKipcbiAgICogVXBkYXRlcyB0b29sLXNwZWNpZmljIHNldHRpbmdzIGFuZCBwZXJzaXN0cyB0aGVtXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBOQU1FU1BBQ0UgLSBUb29sIG5hbWVzcGFjZSAoZS5nLiwgJ1NjcmlwdHVyZVBhbmUnKVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lIC0gU2V0dGluZyBmaWVsZCBuYW1lXG4gICAqIEBwYXJhbSB7Kn0gZmllbGRWYWx1ZSAtIFNldHRpbmcgdmFsdWVcbiAgICovXG4gIGNvbnN0IHNldFRvb2xTZXR0aW5ncyA9IChOQU1FU1BBQ0UsIGZpZWxkTmFtZSwgZmllbGRWYWx1ZSkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGAke25hbWV9LXNldFRvb2xTZXR0aW5ncyAke2ZpZWxkTmFtZX09JHtmaWVsZFZhbHVlfWApXG4gICAgaWYgKHRvb2xzU2V0dGluZ3MpIHtcbiAgICAgIC8vIERlZXAgY2xvbmluZyBvYmplY3QgdG8gYXZvaWQgbW9kaWZ5aW5nIG9yaWdpbmFsIG9iamVjdFxuICAgICAgY29uc3QgX3Rvb2xzU2V0dGluZ3MgPSB7IC4uLnRvb2xzU2V0dGluZ3MgfVxuICAgICAgbGV0IGNvbXBvbmVudFNldHRpbmdzID0gX3Rvb2xzU2V0dGluZ3M/LltOQU1FU1BBQ0VdXG4gICAgICBpZiAoIWNvbXBvbmVudFNldHRpbmdzKSB7XG4gICAgICAgIGNvbXBvbmVudFNldHRpbmdzID0ge31cbiAgICAgICAgX3Rvb2xzU2V0dGluZ3NbTkFNRVNQQUNFXSA9IGNvbXBvbmVudFNldHRpbmdzXG4gICAgICB9XG4gICAgICBjb21wb25lbnRTZXR0aW5nc1tmaWVsZE5hbWVdID0gZmllbGRWYWx1ZVxuICAgICAgc2V0U2V0dGluZ3MoeyB0b29sc1NldHRpbmdzOiBfdG9vbHNTZXR0aW5ncyB9LCB0cnVlKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJzaXN0cyBzZXR0aW5ncyB0byBzdG9yYWdlIGFmdGVyIHJlbW92aW5nIEJpYmxlIGRhdGEgdG8gcmVkdWNlIHNpemVcbiAgICogQ3JlYXRlcyBzaGFsbG93IGNvcGllcyB0byBhdm9pZCBtb2RpZnlpbmcgb3JpZ2luYWwgb2JqZWN0c1xuICAgKiBAcGFyYW0ge29iamVjdH0gX3NldHRpbmdzIC0gU2V0dGluZ3Mgb2JqZWN0IHRvIHNhdmVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGZ1bmN0aW9uIF9zYXZlU2V0dGluZ3MoX3NldHRpbmdzKSB7XG4gICAgaWYgKHNhdmVTZXR0aW5ncyAmJiBfc2V0dGluZ3MpIHtcbiAgICAgIGNvbnN0IG5ld1NldHRpbmdzID0geyAuLi5fc2V0dGluZ3MgfVxuICAgICAgZGVsZXRlIG5ld1NldHRpbmdzLm1hbmlmZXN0XG4gICAgICBjb25zdCBfcGFuZVNldHRpbmdzID0gWy4uLm5ld1NldHRpbmdzLnBhbmVTZXR0aW5nc11cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgX3BhbmVTZXR0aW5ncy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBfcGFuZVNldHRpbmcgPSB7IC4uLl9wYW5lU2V0dGluZ3NbaV0gfSAvLyBzaGFsbG93IGNvcHlcbiAgICAgICAgaWYgKF9wYW5lU2V0dGluZz8uYm9vaykge1xuICAgICAgICAgIGRlbGV0ZSBfcGFuZVNldHRpbmcuYm9vayAvLyByZW1vdmUgYWxsIHRoZSBib29rIGRhdGEgYmVmb3JlIHNhdmluZ1xuICAgICAgICB9XG4gICAgICAgIF9wYW5lU2V0dGluZ3NbaV0gPSBfcGFuZVNldHRpbmdcbiAgICAgIH1cbiAgICAgIG5ld1NldHRpbmdzLnBhbmVTZXR0aW5ncyA9IF9wYW5lU2V0dGluZ3NcblxuICAgICAgY29uc3QgX3BhbmVLZXlTZXR0aW5ncyA9IHsgLi4ubmV3U2V0dGluZ3MucGFuZUtleVNldHRpbmdzIH1cbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhfcGFuZUtleVNldHRpbmdzKVxuICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgICBjb25zdCBfcGFuZVNldHRpbmcgPSB7IC4uLl9wYW5lS2V5U2V0dGluZ3Nba2V5XSB9IC8vIHNoYWxsb3cgY29weVxuICAgICAgICBpZiAoX3BhbmVTZXR0aW5nPy5ib29rKSB7XG4gICAgICAgICAgZGVsZXRlIF9wYW5lU2V0dGluZy5ib29rIC8vIHJlbW92ZSBhbGwgdGhlIGJvb2sgZGF0YSBiZWZvcmUgc2F2aW5nXG4gICAgICAgIH1cbiAgICAgICAgX3BhbmVLZXlTZXR0aW5nc1trZXldID0gX3BhbmVTZXR0aW5nXG4gICAgICB9XG4gICAgICBuZXdTZXR0aW5ncy5wYW5lS2V5U2V0dGluZ3MgPSBfcGFuZUtleVNldHRpbmdzXG5cbiAgICAgIHNhdmVTZXR0aW5ncyhuZXdTZXR0aW5ncylcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBzZXR0aW5ncyBzdGF0ZSBhbmQgb3B0aW9uYWxseSBwZXJzaXN0cyB0aGVtXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBuZXdTZXR0aW5ncyAtIE5ldyBzZXR0aW5ncyB0byBtZXJnZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGRvU2F2ZSAtIFdoZXRoZXIgdG8gcGVyc2lzdCBzZXR0aW5nc1xuICAgKi9cbiAgZnVuY3Rpb24gc2V0U2V0dGluZ3MobmV3U2V0dGluZ3MsIGRvU2F2ZSA9IGZhbHNlKSB7XG4gICAgY29uc3QgX3NldHRpbmdzID0ge1xuICAgICAgLi4uc2V0dGluZ3MsXG4gICAgICAuLi5uZXdTZXR0aW5ncyxcbiAgICB9XG5cbiAgICBfc2V0U2V0dGluZ3MoX3NldHRpbmdzKVxuICAgIGRvU2F2ZSAmJiBfc2F2ZVNldHRpbmdzKF9zZXR0aW5ncylcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIFNjcmlwdHVyZSBwYW5lIHNldHRpbmdzIHdpdGggbmV3IHBhbmUgY29uZmlndXJhdGlvbnNcbiAgICogTWFpbnRhaW5zIGEga2V5LWJhc2VkIGxvb2t1cCBmb3IgcGFuZSBzZXR0aW5ncyBieSBsYW5ndWFnZS9iaWJsZS9vd25lclxuICAgKiBAcGFyYW0ge3N0cmluZ30gTkFNRVNQQUNFIC0gVG9vbCBuYW1lc3BhY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZSAtIFNldHRpbmcgZmllbGQgbmFtZVxuICAgKiBAcGFyYW0ge0FycmF5fSBfcGFuZVNldHRpbmdzIC0gQXJyYXkgb2YgcGFuZSBzZXR0aW5nIG9iamVjdHNcbiAgICovXG4gIGNvbnN0IHNldFRvb2xTZXR0aW5nc1NjcmlwdHVyZSA9IChOQU1FU1BBQ0UsIGZpZWxkTmFtZSwgX3BhbmVTZXR0aW5ncykgPT4ge1xuICAgIGNvbnNvbGUubG9nKGAke25hbWV9LXNldFRvb2xTZXR0aW5nc1NjcmlwdHVyZSAke2ZpZWxkTmFtZX1gLCBfcGFuZVNldHRpbmdzKVxuICAgIGNvbnN0IF9wYW5lS2V5U2V0dGluZ3MgPSB7IC4uLnBhbmVLZXlTZXR0aW5ncyB9XG5cbiAgICBmb3IgKGNvbnN0IHBhbmVTZXR0aW5ncyBvZiBfcGFuZVNldHRpbmdzKSB7XG4gICAgICBjb25zdCBsYW5ndWFnZUlkID0gcGFuZVNldHRpbmdzPy5sYW5ndWFnZUlkXG4gICAgICBjb25zdCBrZXkgPSBgJHtsYW5ndWFnZUlkfS8ke3BhbmVTZXR0aW5ncz8uYmlibGVJZH0vJHtwYW5lU2V0dGluZ3M/Lm93bmVyfWBcbiAgICAgIF9wYW5lS2V5U2V0dGluZ3Nba2V5XSA9IHBhbmVTZXR0aW5nc1xuICAgIH1cblxuICAgIGNvbnN0IF9zZXR0aW5ncyA9IHtcbiAgICAgIHBhbmVTZXR0aW5nczogX3BhbmVTZXR0aW5ncyxcbiAgICAgIHBhbmVLZXlTZXR0aW5nczogX3BhbmVLZXlTZXR0aW5ncyxcbiAgICB9XG5cbiAgICBzZXRTZXR0aW5ncyhfc2V0dGluZ3MsIHRydWUpXG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHByb3BlcnR5IHRvIHRoZSBtYW5pZmVzdCBhbmQgYXBwIHNldHRpbmdzXG4gICAqIFVzZWQgZm9yIHBlcnNpc3RpbmcgdXNlciBwcmVmZXJlbmNlcyBsaWtlIGZvbnRzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWUgLSBQcm9wZXJ0eSBuYW1lXG4gICAqIEBwYXJhbSB7Kn0gZmllbGRWYWx1ZSAtIFByb3BlcnR5IHZhbHVlXG4gICAqL1xuICBjb25zdCBhZGRPYmplY3RQcm9wZXJ0eVRvTWFuaWZlc3QgPSAoZmllbGROYW1lLCBmaWVsZFZhbHVlKSA9PiB7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgJHtuYW1lfS1hZGRPYmplY3RQcm9wZXJ0eVRvTWFuaWZlc3QgJHtmaWVsZE5hbWV9PSR7ZmllbGRWYWx1ZX1gXG4gICAgKVxuICAgIGlmIChtYW5pZmVzdCkge1xuICAgICAgY29uc3QgX21hbmlmZXN0ID0ge1xuICAgICAgICAuLi5tYW5pZmVzdCxcbiAgICAgICAgW2ZpZWxkTmFtZV06IGZpZWxkVmFsdWUsXG4gICAgICB9XG5cbiAgICAgIC8vIGFsc28gc2F2ZSB0aGlzIGluIGFwcFNldHRpbmdzXG4gICAgICBjb25zdCBhcHBTZXR0aW5ncyA9IHNldHRpbmdzLmFwcFNldHRpbmdzIHx8IHt9XG4gICAgICBjb25zdCBfYXBwU2V0dGluZ3MgPSB7XG4gICAgICAgIC4uLmFwcFNldHRpbmdzLFxuICAgICAgICBbZmllbGROYW1lXTogZmllbGRWYWx1ZSxcbiAgICAgIH1cblxuICAgICAgc2V0U2V0dGluZ3MoXG4gICAgICAgIHtcbiAgICAgICAgICBtYW5pZmVzdDogX21hbmlmZXN0LFxuICAgICAgICAgIGFwcFNldHRpbmdzOiBfYXBwU2V0dGluZ3MsXG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICAvLyBFdmVudCBoYW5kbGVycyBmb3IgdmFyaW91cyB1c2VyIGFjdGlvbnNcblxuICAvKipcbiAgICogT3BlbnMgYW4gYWxlcnQgZGlhbG9nIChwbGFjZWhvbGRlciBpbXBsZW1lbnRhdGlvbilcbiAgICovXG4gIGNvbnN0IG9wZW5BbGVydERpYWxvZyA9ICgpID0+IHtcbiAgICBjb25zb2xlLmxvZyhgJHtuYW1lfS1vcGVuQWxlcnREaWFsb2dgKSAvLyBUT0RPIC0gZmxlc2ggb3V0XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHZlcnNlIGNvbnRlbnQgaGFzIGNoYW5nZWQgZnJvbSBvcmlnaW5hbFxuICAgKiBAcGFyYW0ge0V2ZW50fSBlIC0gSW5wdXQgZXZlbnRcbiAgICovXG4gIGNvbnN0IGNoZWNrSWZWZXJzZUNoYW5nZWQgPSBlID0+IHtcbiAgICBjb25zb2xlLmxvZyhgJHtuYW1lfS1jaGVja0lmVmVyc2VDaGFuZ2VkYClcbiAgICBjb25zdCBfbmV3VmVyc2VUZXh0ID0gZS50YXJnZXQudmFsdWVcbiAgICBjb25zdCBfaXNWZXJzZUNoYW5nZWQgPSBfbmV3VmVyc2VUZXh0ICE9PSB2ZXJzZVRleHRcbiAgICBzZXRTdGF0ZSh7IGlzVmVyc2VDaGFuZ2VkOiBfaXNWZXJzZUNoYW5nZWQgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHZlcnNlIHRleHQgZWRpdGluZ1xuICAgKiBAcGFyYW0ge0V2ZW50fSBlIC0gSW5wdXQgZXZlbnQgd2l0aCBuZXcgdmVyc2UgdGV4dFxuICAgKi9cbiAgY29uc3QgaGFuZGxlRWRpdFZlcnNlID0gZSA9PiB7XG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0taGFuZGxlRWRpdFZlcnNlYClcbiAgICBjb25zdCBfbmV3VmVyc2VUZXh0ID0gZS50YXJnZXQudmFsdWVcbiAgICBzZXRTdGF0ZSh7IG5ld1ZlcnNlVGV4dDogX25ld1ZlcnNlVGV4dCB9KVxuICB9XG5cbiAgLyoqXG4gICAqIENhbmNlbHMgdmVyc2UgZWRpdGluZyBhbmQgcmVzZXRzIHN0YXRlXG4gICAqL1xuICBjb25zdCBjYW5jZWxFZGl0VmVyc2UgPSAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0tY2FuY2VsRWRpdFZlcnNlYClcbiAgICBzZXRTdGF0ZSh7IG5ld1ZlcnNlVGV4dDogbnVsbCwgbmV3VGFnczogW10sIG1vZGU6ICdkZWZhdWx0JyB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIGVkaXRlZCB2ZXJzZSB0ZXh0IGFuZCB1cGRhdGVzIGFsaWdubWVudHNcbiAgICogTWFya3MgY2hlY2sgYXMgaGF2aW5nIHZlcnNlIGVkaXRzXG4gICAqL1xuICBjb25zdCBzYXZlRWRpdFZlcnNlID0gKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGAke25hbWV9LXNhdmVFZGl0VmVyc2VgKVxuICAgIGNvbnN0IHsgY2hhcHRlciwgdmVyc2UgfSA9IGdldFJlZihcbiAgICAgIHRhcmdldEJpYmxlLFxuICAgICAgY3VycmVudENvbnRleHRJZC5yZWZlcmVuY2UuY2hhcHRlcixcbiAgICAgIGN1cnJlbnRDb250ZXh0SWQucmVmZXJlbmNlLnZlcnNlXG4gICAgKVxuXG4gICAgY29uc3QgdmVyc2VSZWYgPSBjdXJyZW50Q29udGV4dElkLnZlcnNlU3BhbiB8fCB2ZXJzZSAvLyBpZiBpbiB2ZXJzZSBzcGFuLCB1c2UgaXRcbiAgICBjb25zdCBiZWZvcmUgPSB0YXJnZXRCaWJsZVtjaGFwdGVyXVt2ZXJzZVJlZl1cblxuICAgIHNldFN0YXRlKHtcbiAgICAgIG5ld1ZlcnNlVGV4dDogbnVsbCxcbiAgICAgIG5ld1RhZ3M6IFtdLFxuICAgICAgbW9kZTogJ2RlZmF1bHQnLFxuICAgICAgaXNWZXJzZUNoYW5nZWQ6IGZhbHNlLFxuICAgIH0pXG4gICAgZWRpdFRhcmdldFZlcnNlKGNoYXB0ZXIsIHZlcnNlUmVmLCBiZWZvcmUsIG5ld1ZlcnNlVGV4dClcbiAgfVxuXG4gIC8qKlxuICAgKiBOYXZpZ2F0ZXMgdG8gdGhlIG5leHQgY2hlY2sgaW4gdGhlIHNlcXVlbmNlXG4gICAqL1xuICBmdW5jdGlvbiBoYW5kbGVHb1RvTmV4dCgpIHtcbiAgICBjb25zb2xlLmxvZyhgJHtuYW1lfS1oYW5kbGVHb1RvTmV4dGApXG4gICAgY29uc3QgbmV4dENoZWNrID0gZmluZE5leHRDaGVjayhncm91cHNEYXRhLCBjdXJyZW50Q29udGV4dElkLCBmYWxzZSlcbiAgICBjaGFuZ2VDdXJyZW50Q2hlY2tfKG5leHRDaGVjaywgdHJ1ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBOYXZpZ2F0ZXMgdG8gdGhlIHByZXZpb3VzIGNoZWNrIGluIHRoZSBzZXF1ZW5jZVxuICAgKi9cbiAgZnVuY3Rpb24gaGFuZGxlR29Ub1ByZXZpb3VzKCkge1xuICAgIGNvbnNvbGUubG9nKGAke25hbWV9LWhhbmRsZUdvVG9QcmV2aW91c2ApXG4gICAgY29uc3QgcHJldmlvdXNDaGVjayA9IGZpbmRQcmV2aW91c0NoZWNrKGdyb3Vwc0RhdGEsIGN1cnJlbnRDb250ZXh0SWQsIGZhbHNlKVxuICAgIGNoYW5nZUN1cnJlbnRDaGVja18ocHJldmlvdXNDaGVjaywgdHJ1ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGNoZWNrYm94IGNoYW5nZXMgZm9yIHRhZ3NcbiAgICogQWRkcyBvciByZW1vdmVzIHRhZ3MgZnJvbSB0aGUgY3VycmVudCBsaXN0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWcgLSBUYWcgaWRlbnRpZmllclxuICAgKi9cbiAgY29uc3QgaGFuZGxlVGFnc0NoZWNrYm94ID0gdGFnID0+IHtcbiAgICBjb25zb2xlLmxvZyhgJHtuYW1lfS1oYW5kbGVUYWdzQ2hlY2tib3hgLCB0YWcpXG4gICAgY29uc3QgY3VycmVudFRhZ3MgPSBuZXdUYWdzIHx8IFtdXG4gICAgY29uc3QgdGFnSW5kZXggPSBjdXJyZW50VGFncy5pbmRleE9mKHRhZylcbiAgICBsZXQgX25ld1RhZ3NcblxuICAgIGlmICh0YWdJbmRleCA+IC0xKSB7XG4gICAgICBjb25zdCBjb3B5ID0gY3VycmVudFRhZ3Muc2xpY2UoMClcbiAgICAgIGNvcHkuc3BsaWNlKHRhZ0luZGV4LCAxKVxuICAgICAgX25ld1RhZ3MgPSBjb3B5XG4gICAgfSBlbHNlIHtcbiAgICAgIF9uZXdUYWdzID0gWy4uLmN1cnJlbnRUYWdzLCB0YWddXG4gICAgfVxuXG4gICAgc2V0U3RhdGUoeyBuZXdUYWdzOiBfbmV3VGFncyB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBzZWxlY3Rpb25zIGFnYWluc3QgdmVyc2UgdGV4dFxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmVyc2VUZXh0XyAtIFZlcnNlIHRleHQgdG8gdmFsaWRhdGUgYWdhaW5zdFxuICAgKiBAcGFyYW0ge0FycmF5fSBzZWxlY3Rpb25zXyAtIFNlbGVjdGlvbnMgdG8gdmFsaWRhdGVcbiAgICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgc2VsZWN0aW9ucyBhcmUgdmFsaWRcbiAgICovXG4gIGNvbnN0IHZhbGlkYXRlU2VsZWN0aW9ucyA9ICh2ZXJzZVRleHRfLCBzZWxlY3Rpb25zXykgPT4ge1xuICAgIGNvbnNvbGUubG9nKGAke25hbWV9LXZhbGlkYXRlU2VsZWN0aW9uc2AsIHNlbGVjdGlvbnNfKVxuICAgIHJldHVybiBzZWxlY3Rpb25zSGVscGVycy52YWxpZGF0ZVZlcnNlU2VsZWN0aW9ucyh2ZXJzZVRleHRfLCBzZWxlY3Rpb25zXylcbiAgfVxuXG4gIC8qKlxuICAgKiBNZW1vaXplZCBjb21wdXRhdGlvbiBvZiB1bmZpbHRlcmVkIHZlcnNlIHRleHQgaW5jbHVkaW5nIFVTRk0gbWFya2Vyc1xuICAgKiBVc2VkIGZvciBkaXNwbGF5aW5nIGFuZCBlZGl0aW5nIGNvbXBsZXRlIHZlcnNlIGRhdGFcbiAgICovXG4gIGNvbnN0IHVuZmlsdGVyZWRWZXJzZVRleHQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBsZXQgdW5maWx0ZXJlZFZlcnNlVGV4dF8gPSAnJ1xuICAgIGNvbnN0IHJlZmVyZW5jZSA9IGN1cnJlbnRDb250ZXh0SWQ/LnJlZmVyZW5jZVxuICAgIGNvbnN0IGNoYXB0ZXIgPSByZWZlcmVuY2U/LmNoYXB0ZXJcbiAgICBjb25zdCB2ZXJzZSA9IHJlZmVyZW5jZT8udmVyc2VcbiAgICBpZiAoY2hhcHRlciAmJiB2ZXJzZSkge1xuICAgICAgY29uc3QgdmVyc2VEYXRhID0gZ2V0VmVyc2VEYXRhRnJvbUJpYmxlKFxuICAgICAgICB0YXJnZXRCaWJsZSxcbiAgICAgICAgY2hhcHRlcixcbiAgICAgICAgdmVyc2VcbiAgICAgICkudmVyc2VEYXRhXG4gICAgICBpZiAodmVyc2VEYXRhKSB7XG4gICAgICAgIHVuZmlsdGVyZWRWZXJzZVRleHRfID0gdmVyc2VEYXRhXG4gICAgICAgIGlmICh0eXBlb2YgdmVyc2VEYXRhICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHVuZmlsdGVyZWRWZXJzZVRleHRfID1cbiAgICAgICAgICAgIFVzZm1GaWxlQ29udmVyc2lvbkhlbHBlcnMuZ2V0VXNmbUZvclZlcnNlQ29udGVudCh2ZXJzZURhdGEpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdW5maWx0ZXJlZFZlcnNlVGV4dF9cbiAgfSwgW3RhcmdldEJpYmxlLCBjdXJyZW50Q29udGV4dElkXSlcblxuICAvKipcbiAgICogU2V0cyBhIHRlbXBvcmFyeSB2YWx1ZSBmb3IgYSBjaGVja2luZyBkYXRhIHByb3BlcnR5XG4gICAqIFVzZWQgZm9yIHRyYWNraW5nIHVuc2F2ZWQgY2hhbmdlc1xuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gUHJvcGVydHkgbmFtZVxuICAgKiBAcGFyYW0geyp9IHZhbHVlIC0gUHJvcGVydHkgdmFsdWVcbiAgICovXG4gIGNvbnN0IHNldFRlbXBDaGVja2luZ0l0ZW0gPSAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgIGNvbnN0IG5ld0NoZWNraW5nRGF0YSA9IHRlbXBDaGVja2luZ0RhdGEgPyB7IC4uLnRlbXBDaGVja2luZ0RhdGEgfSA6IHt9XG4gICAgbmV3Q2hlY2tpbmdEYXRhW2tleV0gPSB2YWx1ZVxuICAgIHNldFRlbXBDaGVja2luZ0RhdGEobmV3Q2hlY2tpbmdEYXRhKVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgc2VsZWN0aW9ucyBpbiB0ZW1wb3Jhcnkgc3RhdGUgd2l0aG91dCBzYXZpbmdcbiAgICogQHBhcmFtIHtBcnJheX0gc2VsZWN0aW9ucyAtIE5ldyBzZWxlY3Rpb25zIGFycmF5XG4gICAqL1xuICBjb25zdCBjaGFuZ2VTZWxlY3Rpb25zSW5Mb2NhbFN0YXRlID0gc2VsZWN0aW9ucyA9PiB7XG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0tY2hhbmdlU2VsZWN0aW9uc0luTG9jYWxTdGF0ZWAsIHNlbGVjdGlvbnMpXG4gICAgc2V0VGVtcENoZWNraW5nSXRlbSgnc2VsZWN0aW9ucycsIHNlbGVjdGlvbnMpXG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlcyB0aGUgXCJub3RoaW5nIHRvIHNlbGVjdFwiIGZsYWcgZm9yIGN1cnJlbnQgY2hlY2tcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3QgLSBOZXcgc3RhdGUgdmFsdWVcbiAgICovXG4gIGNvbnN0IHRvZ2dsZU5vdGhpbmdUb1NlbGVjdCA9IHNlbGVjdCA9PiB7XG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0tdG9nZ2xlTm90aGluZ1RvU2VsZWN0YCwgc2VsZWN0KVxuICAgIHNldFRlbXBDaGVja2luZ0l0ZW0oJ25vdGhpbmdUb1NlbGVjdCcsIHNlbGVjdClcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGFuZ2VzIHRoZSBjdXJyZW50IGNoZWNrIGJlaW5nIHdvcmtlZCBvblxuICAgKiBWYWxpZGF0ZXMgZm9yIHVuc2F2ZWQgY2hhbmdlcyBiZWZvcmUgc3dpdGNoaW5nXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBuZXdDb250ZXh0IC0gTmV3IGNoZWNrIGNvbnRleHRcbiAgICogQHBhcmFtIHtib29sZWFufSBub0NoZWNrIC0gU2tpcCB2YWxpZGF0aW9uIGlmIHRydWVcbiAgICovXG4gIGNvbnN0IGNoYW5nZUN1cnJlbnRDaGVja18gPSAobmV3Q29udGV4dCwgbm9DaGVjayA9IGZhbHNlKSA9PiB7XG4gICAgY29uc3QgbmV3Q29udGV4dElkID0gbmV3Q29udGV4dD8uY29udGV4dElkXG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0tY2hhbmdlQ3VycmVudENvbnRleHRJZGAsIG5ld0NvbnRleHRJZClcblxuICAgIGNvbnN0IHNlbGVjdGlvbnNVbmNoYW5nZWQgPSBpc0VxdWFsKGN1cnJlbnRTZWxlY3Rpb25zLCB0ZW1wU2VsZWN0aW9ucylcbiAgICBpZiAobm9DaGVjayB8fCBzZWxlY3Rpb25zVW5jaGFuZ2VkKSB7XG4gICAgICBpZiAobmV3Q29udGV4dElkKSB7XG4gICAgICAgIGxldCBjaGVjayA9IGZpbmRDaGVjayhncm91cHNEYXRhLCBuZXdDb250ZXh0SWQsIGZhbHNlKVxuICAgICAgICB1cGRhdGVDb250ZXh0KG5ld0NvbnRleHQpXG4gICAgICAgIGlmIChjaGVjaykge1xuICAgICAgICAgIHNldExvY2FsQ2hlY2tpbmdEYXRhKG51bGwpXG4gICAgICAgICAgc2V0VGVtcENoZWNraW5nRGF0YShudWxsKVxuICAgICAgICAgIHVwZGF0ZU1vZGVGb3JTZWxlY3Rpb25zKGNoZWNrLnNlbGVjdGlvbnMsIGNoZWNrLm5vdGhpbmdUb1NlbGVjdClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZygnQ2hlY2tlci5jaGFuZ2VDdXJyZW50Q29udGV4dElkIC0gdW5zYXZlZCBjaGFuZ2VzJylcbiAgICB9XG4gICAgY2hhbmdlZEN1cnJlbnRDaGVjayAmJiBjaGFuZ2VkQ3VycmVudENoZWNrKG5ld0NvbnRleHQpXG4gIH1cblxuICBjb25zdCBkaXJlY3Rpb24gPSAnbHRyJ1xuICBjb25zdCBib29rbWFya0VuYWJsZWQgPSBnZXRDdXJyZW50VmFsdWVGb3IoJ3JlbWluZGVycycpXG4gIGNvbnN0IGlzVmVyc2VFZGl0ZWQgPSAhIWdldEN1cnJlbnRWYWx1ZUZvcigndmVyc2VFZGl0cycpXG4gIGNvbnN0IGlzVmVyc2VJbnZhbGlkYXRlZCA9ICEhZ2V0Q3VycmVudFZhbHVlRm9yKCdpbnZhbGlkYXRlZCcpXG5cbiAgLyoqXG4gICAqIENoYW5nZXMgdGhlIGN1cnJlbnQgY2hlY2sgYmVpbmcgd29ya2VkIG9uXG4gICAqIFZhbGlkYXRlcyBmb3IgdW5zYXZlZCBjaGFuZ2VzIGJlZm9yZSBzd2l0Y2hpbmdcbiAgICogQHBhcmFtIHtvYmplY3R9IG5ld0NvbnRleHQgLSBOZXcgY2hlY2sgY29udGV4dFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IG5vQ2hlY2sgLSBTa2lwIHZhbGlkYXRpb24gaWYgdHJ1ZVxuICAgKi9cbiAgY29uc3QgX3NhdmVTZWxlY3Rpb24gPSAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0tX3NhdmVTZWxlY3Rpb24gcGVyc2lzdCB0byBmaWxlYClcbiAgICBjb25zdCB7IGNoZWNrSW5Hcm91cHNEYXRhLCBfY3VycmVudENoZWNrLCBuZXdTdGF0ZSwgX25ld0NoZWNraW5nRGF0YSB9ID1cbiAgICAgIGNsb25lRGF0YUZvclNhdmluZygpXG5cbiAgICBpZiAoX2N1cnJlbnRDaGVjayAmJiBuZXdTdGF0ZSkge1xuICAgICAgaWYgKHRlbXBOb3RoaW5nVG9TZWxlY3QpIHtcbiAgICAgICAgX25ld0NoZWNraW5nRGF0YS5ub3RoaW5nVG9TZWxlY3QgPSB0ZW1wTm90aGluZ1RvU2VsZWN0XG4gICAgICAgIF9uZXdDaGVja2luZ0RhdGEuc2VsZWN0aW9ucyA9IGZhbHNlXG4gICAgICAgIF9uZXdDaGVja2luZ0RhdGEuaW52YWxpZGF0ZWQgPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRlbXBTZWxlY3Rpb25zLmxlbmd0aCA8PSAwKSB7XG4gICAgICAgICAgX25ld0NoZWNraW5nRGF0YS5zZWxlY3Rpb25zID0gZmFsc2VcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBfbmV3Q2hlY2tpbmdEYXRhLnNlbGVjdGlvbnMgPSB0ZW1wU2VsZWN0aW9uc1xuICAgICAgICB9XG4gICAgICAgIF9uZXdDaGVja2luZ0RhdGEubm90aGluZ1RvU2VsZWN0ID0gZmFsc2VcbiAgICAgICAgX25ld0NoZWNraW5nRGF0YS5pbnZhbGlkYXRlZCA9IGZhbHNlXG4gICAgICB9XG5cbiAgICAgIHNldExvY2FsQ2hlY2tpbmdEYXRhKF9uZXdDaGVja2luZ0RhdGEpXG4gICAgICBkZWxldGVUZW1wQ2hlY2tpbmdEYXRhKCdub3RoaW5nVG9TZWxlY3QnKVxuICAgICAgZGVsZXRlVGVtcENoZWNraW5nRGF0YSgnc2VsZWN0aW9ucycpXG4gICAgICBkZWxldGVUZW1wQ2hlY2tpbmdEYXRhKCdpbnZhbGlkYXRlZCcpXG5cbiAgICAgIHVwZGF0ZVZhbHVlc0luQ2hlY2tEYXRhKFxuICAgICAgICBfY3VycmVudENoZWNrLFxuICAgICAgICBjaGVja0luR3JvdXBzRGF0YSxcbiAgICAgICAgX25ld0NoZWNraW5nRGF0YVxuICAgICAgKVxuXG4gICAgICBzZXRTdGF0ZShuZXdTdGF0ZSlcbiAgICAgIHNhdmVDaGVja2luZ0RhdGEgJiYgc2F2ZUNoZWNraW5nRGF0YShuZXdTdGF0ZSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xvbmVzIGN1cnJlbnQgZGF0YSBzdHJ1Y3R1cmVzIGZvciBzYXZpbmcgbW9kaWZpY2F0aW9uc1xuICAgKiBDcmVhdGVzIGRlZXAgY29waWVzIHRvIGF2b2lkIG11dGF0aW5nIG9yaWdpbmFsIHN0YXRlXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IE9iamVjdCBjb250YWluaW5nIGNsb25lZCBkYXRhIHN0cnVjdHVyZXNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGZ1bmN0aW9uIGNsb25lRGF0YUZvclNhdmluZygpIHtcbiAgICBjb25zdCBfZ3JvdXBzRGF0YSA9IF8uY2xvbmVEZWVwKGdyb3Vwc0RhdGEpXG4gICAgY29uc3QgY2hlY2tJbkdyb3Vwc0RhdGEgPSBmaW5kQ2hlY2soX2dyb3Vwc0RhdGEsIGN1cnJlbnRDb250ZXh0SWQpXG4gICAgbGV0IF9jdXJyZW50Q2hlY2tcbiAgICBsZXQgbmV3U3RhdGVcbiAgICBsZXQgX25ld0NoZWNraW5nRGF0YVxuICAgIGlmIChjaGVja0luR3JvdXBzRGF0YSkge1xuICAgICAgLy8gc2F2ZSB0aGUgc2VsZWN0aW9uIGNoYW5nZXNcbiAgICAgIGNvbnN0IGNhdGVnb3J5ID0gY2hlY2tJbkdyb3Vwc0RhdGEuY2F0ZWdvcnlcbiAgICAgIGNvbnN0IG5ld0NoZWNrRGF0YSA9IF8uY2xvbmVEZWVwKGN1cnJlbnRDaGVja2luZ0RhdGEpXG4gICAgICBfY3VycmVudENoZWNrID0gZmluZENoZWNrKG5ld0NoZWNrRGF0YVtjYXRlZ29yeV0sIGN1cnJlbnRDb250ZXh0SWQsIGZhbHNlKVxuICAgICAgbmV3U3RhdGUgPSB7XG4gICAgICAgIGN1cnJlbnRDaGVja2luZ0RhdGE6IG5ld0NoZWNrRGF0YSxcbiAgICAgICAgY3VycmVudENoZWNrOiBfY3VycmVudENoZWNrLFxuICAgICAgICBncm91cHNEYXRhOiBfZ3JvdXBzRGF0YSxcbiAgICAgICAgbW9kZTogJ2RlZmF1bHQnLFxuICAgICAgICBtb2RpZmllZDogdHJ1ZSxcbiAgICAgIH1cbiAgICAgIF9uZXdDaGVja2luZ0RhdGEgPSBsb2NhbENoZWNraW5nRGF0YSA/IHsgLi4ubG9jYWxDaGVja2luZ0RhdGEgfSA6IHt9XG4gICAgfVxuICAgIHJldHVybiB7IGNoZWNrSW5Hcm91cHNEYXRhLCBfY3VycmVudENoZWNrLCBuZXdTdGF0ZSwgX25ld0NoZWNraW5nRGF0YSB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBtdWx0aXBsZSBwcm9wZXJ0aWVzIGluIGNoZWNrIGRhdGEgb2JqZWN0c1xuICAgKiBNb2RpZmllcyBib3RoIHRoZSBjdXJyZW50IGNoZWNrIGFuZCBncm91cHMgZGF0YVxuICAgKiBAcGFyYW0ge29iamVjdH0gX2N1cnJlbnRDaGVjayAtIEN1cnJlbnQgY2hlY2sgb2JqZWN0XG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjaGVja0luR3JvdXBzRGF0YSAtIENoZWNrIGluIGdyb3VwcyBkYXRhIHN0cnVjdHVyZVxuICAgKiBAcGFyYW0ge29iamVjdH0gX25ld0NoZWNraW5nRGF0YSAtIE5ldyBkYXRhIHRvIGFwcGx5XG4gICAqL1xuICBmdW5jdGlvbiB1cGRhdGVWYWx1ZXNJbkNoZWNrRGF0YShcbiAgICBfY3VycmVudENoZWNrLFxuICAgIGNoZWNrSW5Hcm91cHNEYXRhLFxuICAgIF9uZXdDaGVja2luZ0RhdGFcbiAgKSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoX25ld0NoZWNraW5nRGF0YSkpIHtcbiAgICAgIGNvbnN0IG5ld0NoZWNraW5nVmFsdWUgPSBfbmV3Q2hlY2tpbmdEYXRhW2tleV1cbiAgICAgIF9jdXJyZW50Q2hlY2tba2V5XSA9IG5ld0NoZWNraW5nVmFsdWVcbiAgICAgIGNoZWNrSW5Hcm91cHNEYXRhW2tleV0gPSBuZXdDaGVja2luZ1ZhbHVlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBlcnNpc3RzIG11bHRpcGxlIGNoZWNrIHByb3BlcnR5IGNoYW5nZXMgdG8gZmlsZVxuICAgKiBDbG9uZXMgZGF0YSwgYXBwbGllcyBjaGFuZ2VzLCB1cGRhdGVzIHN0YXRlLCBhbmQgc2F2ZXNcbiAgICogQHBhcmFtIHtvYmplY3R9IG5ld0RhdGEgLSBPYmplY3Qgd2l0aCBwcm9wZXJ0eSBuYW1lcyBhbmQgdmFsdWVzIHRvIHVwZGF0ZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY29uc3QgX3NhdmVEYXRhID0gbmV3RGF0YSA9PiB7XG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0tX3NhdmVEYXRhIHBlcnNpc3QgdG8gZmlsZWApXG4gICAgY29uc3QgeyBjaGVja0luR3JvdXBzRGF0YSwgX2N1cnJlbnRDaGVjaywgbmV3U3RhdGUsIF9uZXdDaGVja2luZ0RhdGEgfSA9XG4gICAgICBjbG9uZURhdGFGb3JTYXZpbmcoKVxuXG4gICAgaWYgKF9jdXJyZW50Q2hlY2sgJiYgbmV3U3RhdGUpIHtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG5ld0RhdGEpKSB7XG4gICAgICAgIF9uZXdDaGVja2luZ0RhdGFba2V5XSA9IG5ld0RhdGFba2V5XVxuICAgICAgICBkZWxldGVUZW1wQ2hlY2tpbmdEYXRhKGtleSlcbiAgICAgIH1cbiAgICAgIHNldExvY2FsQ2hlY2tpbmdEYXRhKF9uZXdDaGVja2luZ0RhdGEpXG5cbiAgICAgIHVwZGF0ZVZhbHVlc0luQ2hlY2tEYXRhKFxuICAgICAgICBfY3VycmVudENoZWNrLFxuICAgICAgICBjaGVja0luR3JvdXBzRGF0YSxcbiAgICAgICAgX25ld0NoZWNraW5nRGF0YVxuICAgICAgKVxuICAgICAgc2V0U3RhdGUobmV3U3RhdGUpXG4gICAgICBzYXZlQ2hlY2tpbmdEYXRhICYmIHNhdmVDaGVja2luZ0RhdGEobmV3U3RhdGUpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIGNoYW5nZXMgdG8gYSBzcGVjaWZpYyBjaGVjayAobWF5IG5vdCBiZSBjdXJyZW50IGNoZWNrKVxuICAgKiBPbmx5IHNhdmVzIGlmIGRhdGEgYWN0dWFsbHkgY2hhbmdlZFxuICAgKiBAcGFyYW0ge29iamVjdH0gY2hlY2sgLSBDaGVjayBvYmplY3QgdG8gdXBkYXRlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBuZXdEYXRhIC0gTmV3IGRhdGEgdG8gYXBwbHlcbiAgICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgZGF0YSB3YXMgY2hhbmdlZFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY29uc3QgX3NhdmVDaGVja2luZ0RhdGEgPSAoY2hlY2ssIG5ld0RhdGEpID0+IHtcbiAgICBsZXQgY2hhbmdlZERhdGEgPSBmYWxzZVxuICAgIGlmIChjaGVjaykge1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobmV3RGF0YSkpIHtcbiAgICAgICAgaWYgKGNoZWNrW2tleV0gIT09IG5ld0RhdGFba2V5XSkge1xuICAgICAgICAgIGNoZWNrW2tleV0gPSBuZXdEYXRhW2tleV1cbiAgICAgICAgICBjaGFuZ2VkRGF0YSA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY2hhbmdlZERhdGEpIHtcbiAgICAgICAgY29uc29sZS5sb2coYCR7bmFtZX0tX3NhdmVDaGVja2luZ0RhdGEgcGVyc2lzdCBjaGFuZ2VzIHRvIGZpbGVgLCBjaGVjaylcbiAgICAgICAgY29uc3QgbmV3Q2hlY2tpbmdEYXRhID0ge1xuICAgICAgICAgIGN1cnJlbnRDaGVjazogY2hlY2ssXG4gICAgICAgIH1cbiAgICAgICAgc2F2ZUNoZWNraW5nRGF0YSAmJiBzYXZlQ2hlY2tpbmdEYXRhKG5ld0NoZWNraW5nRGF0YSlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNoYW5nZWREYXRhXG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhIHByb3BlcnR5IGZyb20gdGVtcG9yYXJ5IGNoZWNraW5nIGRhdGFcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFByb3BlcnR5IG5hbWUgdG8gcmVtb3ZlXG4gICAqL1xuICBmdW5jdGlvbiBkZWxldGVUZW1wQ2hlY2tpbmdEYXRhKGtleSkge1xuICAgIGlmICh0ZW1wQ2hlY2tpbmdEYXRhPy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICBjb25zdCBfdGVtcENoZWNraW5nRGF0YSA9IHsgLi4udGVtcENoZWNraW5nRGF0YSB9XG4gICAgICBkZWxldGUgX3RlbXBDaGVja2luZ0RhdGFba2V5XVxuICAgICAgc2V0VGVtcENoZWNraW5nRGF0YShfdGVtcENoZWNraW5nRGF0YSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FuY2VscyBzZWxlY3Rpb24gbW9kZSB3aXRob3V0IHNhdmluZyBjaGFuZ2VzXG4gICAqL1xuICBjb25zdCBjYW5jZWxTZWxlY3Rpb24gPSAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0tY2FuY2VsU2VsZWN0aW9uYClcbiAgICBkZWxldGVUZW1wQ2hlY2tpbmdEYXRhKCdzZWxlY3Rpb25zJylcbiAgICBzZXRTdGF0ZSh7XG4gICAgICBtb2RlOiAnZGVmYXVsdCcsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgYWxsIGN1cnJlbnQgc2VsZWN0aW9uc1xuICAgKi9cbiAgY29uc3QgY2xlYXJTZWxlY3Rpb24gPSAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0tY2xlYXJTZWxlY3Rpb25gKVxuICAgIHNldFRlbXBDaGVja2luZ0l0ZW0oJ3NlbGVjdGlvbnMnLCBbXSlcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIGJvb2ttYXJrL3JlbWluZGVyIGZsYWcgZm9yIGN1cnJlbnQgY2hlY2tcbiAgICovXG4gIGNvbnN0IHRvZ2dsZUJvb2ttYXJrID0gKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGAke25hbWV9LXRvZ2dsZUJvb2ttYXJrYClcbiAgICBfc2F2ZURhdGEoe1xuICAgICAgcmVtaW5kZXJzOiAhZ2V0VGVtcFZhbHVlRm9yKCdyZW1pbmRlcnMnKSxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIENoYW5nZXMgdGhlIFVJIG1vZGUgKGRlZmF1bHQsIHNlbGVjdCwgZWRpdCwgY29tbWVudClcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1vZGUgLSBOZXcgbW9kZSBpZGVudGlmaWVyXG4gICAqL1xuICBjb25zdCBjaGFuZ2VNb2RlID0gbW9kZSA9PiB7XG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0tY2hhbmdlTW9kZWAsIG1vZGUpXG4gICAgc2V0U3RhdGUoeyBtb2RlIH0pXG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGNvbW1lbnQgdGV4dCBoYXMgY2hhbmdlZCBmcm9tIHNhdmVkIHZhbHVlXG4gICAqIEBwYXJhbSB7RXZlbnR9IGUgLSBJbnB1dCBldmVudFxuICAgKi9cbiAgZnVuY3Rpb24gY2hlY2tJZkNvbW1lbnRDaGFuZ2VkKGUpIHtcbiAgICBjb25zb2xlLmxvZyhgJHtuYW1lfS1jaGVja0lmQ29tbWVudENoYW5nZWRgKVxuICAgIGNvbnN0IG5ld2NvbW1lbnQgPSBlLnRhcmdldC52YWx1ZSB8fCAnJ1xuICAgIGNvbnN0IG9sZGNvbW1lbnQgPSBjb21tZW50VGV4dCB8fCAnJ1xuICAgIGNvbnN0IGlzQ29tbWVudENoYW5nZWQgPSBuZXdjb21tZW50ICE9PSBvbGRjb21tZW50XG5cbiAgICBzZXRTdGF0ZSh7XG4gICAgICBpc0NvbW1lbnRDaGFuZ2VkLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQ2FuY2VscyBjb21tZW50IGVkaXRpbmcgd2l0aG91dCBzYXZpbmdcbiAgICovXG4gIGNvbnN0IGNhbmNlbENvbW1lbnQgPSAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0tY2FuY2VsQ29tbWVudGApXG4gICAgZGVsZXRlVGVtcENoZWNraW5nRGF0YSgnY29tbWVudHMnKVxuICAgIHNldFN0YXRlKHtcbiAgICAgIG1vZGU6ICdkZWZhdWx0JyxcbiAgICAgIGlzQ29tbWVudENoYW5nZWQ6IGZhbHNlLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogU2F2ZXMgY29tbWVudCBjaGFuZ2VzIHRvIHBlcnNpc3RlbnQgc3RvcmFnZVxuICAgKi9cbiAgY29uc3Qgc2F2ZUNvbW1lbnQgPSAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coYCR7bmFtZX0tc2F2ZUNvbW1lbnRgKVxuICAgIGNvbnN0IG5ld0NvbW1lbnQgPSBnZXRUZW1wVmFsdWVGb3IoJ2NvbW1lbnRzJylcbiAgICBfc2F2ZURhdGEoeyBjb21tZW50czogbmV3Q29tbWVudCB9KVxuICAgIHNldFN0YXRlKHtcbiAgICAgIG1vZGU6ICdkZWZhdWx0JyxcbiAgICAgIGlzQ29tbWVudENoYW5nZWQ6IGZhbHNlLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBjb21tZW50IHRleHQgY2hhbmdlc1xuICAgKiBAcGFyYW0ge0V2ZW50fSBlIC0gSW5wdXQgZXZlbnQgd2l0aCBuZXcgY29tbWVudFxuICAgKi9cbiAgY29uc3QgaGFuZGxlQ29tbWVudCA9IGUgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIGNvbnNvbGUubG9nKGAke25hbWV9LWhhbmRsZUNvbW1lbnRgKVxuICAgIGNvbnN0IG5ld0NvbW1lbnQgPSBlLnRhcmdldC52YWx1ZVxuICAgIHNldFRlbXBDaGVja2luZ0l0ZW0oJ2NvbW1lbnRzJywgbmV3Q29tbWVudClcbiAgICBzZXRTdGF0ZSh7XG4gICAgICBpc0NvbW1lbnRDaGFuZ2VkOiB0cnVlLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCByZWFkeVRvRGlzcGxheUNoZWNrZXIgPVxuICAgIGdyb3Vwc0RhdGEgJiYgZ3JvdXBzSW5kZXggJiYgY3VycmVudENvbnRleHRJZCAmJiB2ZXJzZVRleHRcblxuICAvKipcbiAgICogV3JhcHBlciBmb3IgZ2V0TGV4aWNvbkRhdGEgY2FsbGJhY2sgd2l0aCBsb2dnaW5nXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsZXhpY29uSWQgLSBMZXhpY29uIGlkZW50aWZpZXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVudHJ5SWQgLSBFbnRyeSBpZGVudGlmaWVyXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IExleGljb24gZGF0YVxuICAgKi9cbiAgY29uc3QgZ2V0TGV4aWNvbkRhdGFfID0gKGxleGljb25JZCwgZW50cnlJZCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGAke25hbWV9LWdldExleGljb25EYXRhX2AsIHsgbGV4aWNvbklkLCBlbnRyeUlkIH0pXG4gICAgY29uc3QgbGV4aWNvbkRhdGEgPSBnZXRMZXhpY29uRGF0YSAmJiBnZXRMZXhpY29uRGF0YShsZXhpY29uSWQsIGVudHJ5SWQpXG4gICAgcmV0dXJuIGxleGljb25EYXRhXG4gIH1cblxuICAvKipcbiAgICogQ2xvc2VzIHRoZSBwb3BvdmVyIGRpc3BsYXlcbiAgICovXG4gIGNvbnN0IG9uQ2xvc2VQb3BvdmVyID0gKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGAke25hbWV9LW9uQ2xvc2VQb3BvdmVyYClcbiAgICBzZXRTdGF0ZSh7XG4gICAgICBwb3BvdmVyUHJvcHM6IHtcbiAgICAgICAgcG9wb3ZlclZpc2liaWxpdHk6IGZhbHNlLFxuICAgICAgfSxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIERpc3BsYXlzIGEgcG9wb3ZlciB3aXRoIHRpdGxlIGFuZCBjb250ZW50IGF0IHNwZWNpZmllZCBwb3NpdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGl0bGUgLSBQb3BvdmVyIHRpdGxlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBib2R5VGV4dCAtIFBvcG92ZXIgY29udGVudFxuICAgKiBAcGFyYW0ge29iamVjdH0gcG9zaXRpb25Db29yZCAtIFBvc2l0aW9uIGNvb3JkaW5hdGVzXG4gICAqL1xuICBjb25zdCBzaG93UG9wb3ZlciA9ICh0aXRsZSwgYm9keVRleHQsIHBvc2l0aW9uQ29vcmQpID0+IHtcbiAgICBjb25zb2xlLmxvZyhgJHtuYW1lfS1zaG93UG9wb3ZlcmAsIHRpdGxlKVxuICAgIHNldFN0YXRlKHtcbiAgICAgIHBvcG92ZXJQcm9wczoge1xuICAgICAgICBwb3BvdmVyVmlzaWJpbGl0eTogdHJ1ZSxcbiAgICAgICAgdGl0bGUsXG4gICAgICAgIGJvZHlUZXh0LFxuICAgICAgICBwb3NpdGlvbkNvb3JkLFxuICAgICAgICBvbkNsb3NlUG9wb3ZlcjogKCkgPT4gb25DbG9zZVBvcG92ZXIoKSxcbiAgICAgIH0sXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIHRoZSBleHBhbmRlZCB0cmFuc2xhdGlvbiBoZWxwcyBtb2RhbFxuICAgKi9cbiAgY29uc3QgdG9nZ2xlSGVscHNNb2RhbCA9ICgpID0+IHtcbiAgICBjb25zdCBfc2hvd0hlbHBzTW9kYWwgPSAhc2hvd0hlbHBzTW9kYWxcbiAgICBzZXRTdGF0ZSh7XG4gICAgICBzaG93SGVscHNNb2RhbDogX3Nob3dIZWxwc01vZGFsLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlcyB0aGUgdHJhbnNsYXRpb24gaGVscHMgc2lkZWJhciB2aXNpYmlsaXR5XG4gICAqL1xuICBjb25zdCB0b2dnbGVIZWxwcyA9ICgpID0+IHtcbiAgICBjb25zdCBfc2hvd0hlbHBzID0gIXNob3dIZWxwc1xuICAgIHNldFN0YXRlKHtcbiAgICAgIHNob3dIZWxwczogX3Nob3dIZWxwcyxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBCaWJsZSBib29rIHRvIHRoZSBiaWJsZXMgZGF0YSBzdHJ1Y3R1cmVcbiAgICogQ3JlYXRlcyBsYW5ndWFnZSBncm91cCBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAqIEBwYXJhbSB7b2JqZWN0fSBiaWJsZXMgLSBCaWJsZXMgZGF0YSBzdHJ1Y3R1cmVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIExhbmd1YWdlIGtleVxuICAgKiBAcGFyYW0ge3N0cmluZ30gYmlibGVJZCAtIEJpYmxlIGlkZW50aWZpZXJcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvb2sgLSBCb29rIGRhdGFcbiAgICovXG4gIGZ1bmN0aW9uIHNhdmVCaWJsZVRvS2V5KGJpYmxlcywga2V5LCBiaWJsZUlkLCBib29rKSB7XG4gICAgbGV0IGtleUdyb3VwID0gYmlibGVzW2tleV1cbiAgICBpZiAoIWtleUdyb3VwKSB7XG4gICAgICAvLyBpZiBncm91cCBkb2VzIG5vdCBleGlzdCwgY3JlYXRlIG5ld1xuICAgICAga2V5R3JvdXAgPSB7fVxuICAgICAgYmlibGVzW2tleV0gPSBrZXlHcm91cFxuICAgIH1cbiAgICBrZXlHcm91cFtiaWJsZUlkXSA9IGJvb2tcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHZlcnNlIGNvbnRlbnQgaW4gdGFyZ2V0IEJpYmxlXG4gICAqIEhhbmRsZXMgVVNGTSBjb252ZXJzaW9uLCBhbGlnbm1lbnQgdXBkYXRlcywgYW5kIHZhbGlkYXRpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNoYXB0ZXIgLSBDaGFwdGVyIG51bWJlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmVyc2UgLSBWZXJzZSBudW1iZXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9sZFZlcnNlVGV4dCAtIE9yaWdpbmFsIHZlcnNlIHRleHRcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5ld1ZlcnNlVGV4dCAtIE5ldyB2ZXJzZSB0ZXh0XG4gICAqL1xuICBmdW5jdGlvbiBlZGl0VGFyZ2V0VmVyc2UoY2hhcHRlciwgdmVyc2UsIG9sZFZlcnNlVGV4dCwgbmV3VmVyc2VUZXh0KSB7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgZWRpdFRhcmdldFZlcnNlICR7Y2hhcHRlcn06JHt2ZXJzZX0gLSBjaGFuZ2VkIHRvICR7bmV3VmVyc2VUZXh0fWBcbiAgICApXG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gZmlyc3QgdXBkYXRlIGNvbXBvbmVudCBzdGF0ZVxuXG4gICAgY29uc3QgX2JpYmxlcyA9IFsuLi5iaWJsZXNfXVxuICAgIGNvbnN0IF90YXJnZXRCaWJsZSA9IHsgLi4uX2JpYmxlc1swXSB9XG4gICAgX2JpYmxlc1swXSA9IF90YXJnZXRCaWJsZVxuICAgIGNvbnN0IHRhcmdldEJvb2sgPSB7IC4uLl90YXJnZXRCaWJsZT8uYm9vayB9XG4gICAgX3RhcmdldEJpYmxlLmJvb2sgPSB0YXJnZXRCb29rXG4gICAgY29uc3QgdGFyZ2V0Q2hhcHRlciA9IHsgLi4udGFyZ2V0Qm9va1tjaGFwdGVyXSB9XG4gICAgdGFyZ2V0Qm9va1tjaGFwdGVyXSA9IHRhcmdldENoYXB0ZXJcbiAgICB0YXJnZXRDaGFwdGVyW3ZlcnNlXSA9IG5ld1ZlcnNlVGV4dFxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIG5vdyBhcHBseSBuZXcgdmVyc2UgdGV4dCB0byBzZWxlY3RlZCBhbGlnbmVkIHZlcnNlIGFuZCBjYWxsIGJhY2sgdG8gZXh0ZW5zaW9uIHRvIHNhdmVcblxuICAgIGxldCBfbmV3VmVyc2VUZXh0ID0gbmV3VmVyc2VUZXh0XG4gICAgaWYgKHR5cGVvZiBfbmV3VmVyc2VUZXh0ICE9PSAnc3RyaW5nJykge1xuICAgICAgX25ld1ZlcnNlVGV4dCA9XG4gICAgICAgIFVzZm1GaWxlQ29udmVyc2lvbkhlbHBlcnMuY29udmVydFZlcnNlRGF0YVRvVVNGTShfbmV3VmVyc2VUZXh0KVxuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRDaGFwdGVyRGF0YSA9IHRhcmdldEJpYmxlPy5bY2hhcHRlcl1cbiAgICBjb25zdCBjdXJyZW50VmVyc2VEYXRhID0gY3VycmVudENoYXB0ZXJEYXRhPy5bdmVyc2VdXG4gICAgY29uc3QgeyB0YXJnZXRWZXJzZU9iamVjdHMgfSA9XG4gICAgICBBbGlnbm1lbnRIZWxwZXJzLnVwZGF0ZUFsaWdubWVudHNUb1RhcmdldFZlcnNlKFxuICAgICAgICBjdXJyZW50VmVyc2VEYXRhLFxuICAgICAgICBfbmV3VmVyc2VUZXh0XG4gICAgICApXG4gICAgdGFyZ2V0Q2hhcHRlclt2ZXJzZV0gPSB7IHZlcnNlT2JqZWN0czogdGFyZ2V0VmVyc2VPYmplY3RzIH0gLy8gc2F2ZVxuXG4gICAgdXBkYXRlU2V0dGluZ3MoX2JpYmxlcywgdGFyZ2V0Qm9vaylcblxuICAgIGNvbnN0IHZlcnNlVGV4dCA9IHJlbW92ZVVzZm1NYXJrZXJzKF9uZXdWZXJzZVRleHQpXG4gICAgc2V0U3RhdGUoe1xuICAgICAgdmVyc2VUZXh0LFxuICAgIH0pXG5cbiAgICBjaGFuZ2VUYXJnZXRWZXJzZSAmJlxuICAgICAgY2hhbmdlVGFyZ2V0VmVyc2UoY2hhcHRlciwgdmVyc2UsIG5ld1ZlcnNlVGV4dCwgdGFyZ2V0VmVyc2VPYmplY3RzKVxuXG4gICAgY29uc3QgX2dyb3Vwc0RhdGEgPSBfLmNsb25lRGVlcChncm91cHNEYXRhKVxuICAgIHNlbGVjdGlvbnNIZWxwZXJzLnZhbGlkYXRlQWxsU2VsZWN0aW9uc0ZvclZlcnNlKFxuICAgICAgbmV3VmVyc2VUZXh0LFxuICAgICAgYm9va0lkLFxuICAgICAgY2hhcHRlcixcbiAgICAgIHZlcnNlLFxuICAgICAgX2dyb3Vwc0RhdGEsXG4gICAgICAoY2hlY2ssIGludmFsaWRhdGVkKSA9PiB7XG4gICAgICAgIGlmIChjaGVjaykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYCR7bmFtZX0tZWRpdFRhcmdldFZlcnNlIC0gY2hlY2sgdmFsaWRhdGVkLCBzdGF0ZSBjaGFuZ2VkOiBpbnZhbGlkOiAke2ludmFsaWRhdGVkfWAsXG4gICAgICAgICAgICBjaGVja1xuICAgICAgICAgIClcblxuICAgICAgICAgIF9zYXZlQ2hlY2tpbmdEYXRhKGNoZWNrLCB7IGludmFsaWRhdGVkLCB2ZXJzZUVkaXRzOiB0cnVlIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApXG5cbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGAke25hbWV9LWVkaXRUYXJnZXRWZXJzZSAtIGNoYW5nZXMgZGV0ZWN0ZWQgdXBkYXRpbmcgZ3JvdXBzRGF0YWBcbiAgICApXG4gICAgc2V0U3RhdGUoe1xuICAgICAgZ3JvdXBzRGF0YTogX2dyb3Vwc0RhdGEsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHNldHRpbmdzIHdpdGggbmV3IEJpYmxlIGRhdGEgYW5kIHBhbmUgY29uZmlndXJhdGlvbnNcbiAgICogT3JnYW5pemVzIEJpYmxlcyBieSBsYW5ndWFnZSBhbmQgaW5pdGlhbGl6ZXMgcGFuZSBzZXR0aW5nc1xuICAgKiBAcGFyYW0ge0FycmF5fSBuZXdCaWJsZXMgLSBBcnJheSBvZiBCaWJsZSBvYmplY3RzXG4gICAqIEBwYXJhbSB7b2JqZWN0fSB0YXJnZXRCaWJsZSAtIFRhcmdldCBCaWJsZSBkYXRhXG4gICAqL1xuICBmdW5jdGlvbiB1cGRhdGVTZXR0aW5ncyhuZXdCaWJsZXMsIHRhcmdldEJpYmxlKSB7XG4gICAgY29uc3QgX2JpYmxlcyA9IHt9XG4gICAgbGV0IF9wYW5lU2V0dGluZ3MgPSBbXVxuICAgIGNvbnN0IF9wYW5lS2V5U2V0dGluZ3MgPSBpbml0aWFsU2V0dGluZ3M/LnBhbmVLZXlTZXR0aW5ncyB8fCB7fVxuICAgIGlmIChuZXdCaWJsZXM/Lmxlbmd0aCkge1xuICAgICAgZm9yIChjb25zdCBiaWJsZSBvZiBuZXdCaWJsZXMpIHtcbiAgICAgICAgbGV0IGxhbmd1YWdlSWQgPSBiaWJsZT8ubGFuZ3VhZ2VJZFxuICAgICAgICBjb25zdCBvd25lciA9IGJpYmxlPy5vd25lclxuICAgICAgICBjb25zdCBib29rID0gYmlibGU/LmJvb2tcbiAgICAgICAgY29uc3QgYmlibGVJZCA9IGJpYmxlPy5iaWJsZUlkXG4gICAgICAgIGlmIChsYW5ndWFnZUlkID09PSBOVF9PUklHX0xBTkcgfHwgbGFuZ3VhZ2VJZCA9PT0gT1RfT1JJR19MQU5HKSB7XG4gICAgICAgICAgbGFuZ3VhZ2VJZCA9ICdvcmlnaW5hbExhbmd1YWdlJ1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGtleSA9IGAke2xhbmd1YWdlSWR9LyR7YmlibGVJZH0vJHtvd25lcn1gXG4gICAgICAgIGNvbnN0IGluaXRpYWxQYW5lU2V0dGluZ3MgPSBfcGFuZUtleVNldHRpbmdzPy5ba2V5XVxuICAgICAgICBjb25zdCBsYW5nS2V5ID0gYCR7bGFuZ3VhZ2VJZH1fJHtvd25lcn1gXG4gICAgICAgIHNhdmVCaWJsZVRvS2V5KF9iaWJsZXMsIGxhbmdLZXksIGJpYmxlSWQsIGJvb2spXG4gICAgICAgIHNhdmVCaWJsZVRvS2V5KF9iaWJsZXMsIGxhbmd1YWdlSWQsIGJpYmxlSWQsIGJvb2spIC8vIGFsc28gc2F2ZSBhcyBkZWZhdWx0IGZvciBsYW5ndWFnZSB3aXRob3V0IG93bmVyXG4gICAgICAgIGNvbnN0IHBhbmUgPSBpbml0aWFsUGFuZVNldHRpbmdzIHx8IHtcbiAgICAgICAgICAuLi5iaWJsZSxcbiAgICAgICAgICBsYW5ndWFnZUlkLFxuICAgICAgICB9XG4gICAgICAgIF9wYW5lU2V0dGluZ3MucHVzaChwYW5lKVxuICAgICAgICBpZiAoIWluaXRpYWxQYW5lU2V0dGluZ3MpIHtcbiAgICAgICAgICBfcGFuZUtleVNldHRpbmdzW2tleV0gPSBwYW5lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgX3BhbmVTZXR0aW5ncyA9IFtdXG4gICAgfVxuXG4gICAgY29uc3QgX3Rvb2xzU2V0dGluZ3MgPSBpbml0aWFsU2V0dGluZ3M/LnRvb2xzU2V0dGluZ3MgfHwge1xuICAgICAgQ2hlY2tBcmVhOiB7XG4gICAgICAgIGZvbnRTaXplOiAxMDAsXG4gICAgICB9LFxuICAgIH1cblxuICAgIGxldCBfbWFuaWZlc3QgPSBpbml0aWFsU2V0dGluZ3M/Lm1hbmlmZXN0IHx8IHtcbiAgICAgIGxhbmd1YWdlX25hbWU6XG4gICAgICAgIHRhcmdldEJpYmxlPy5tYW5pZmVzdD8uZHVibGluX2NvcmU/Lmxhbmd1YWdlPy50aXRsZSB8fCAnQ3VycmVudCcsXG4gICAgICBwcm9qZWN0Rm9udDogdGFyZ2V0QmlibGU/Lm1hbmlmZXN0Py5wcm9qZWN0Rm9udCB8fCAnJyxcbiAgICB9XG5cbiAgICBjb25zdCBhcHBTZXR0aW5ncyA9IGluaXRpYWxTZXR0aW5ncz8uYXBwU2V0dGluZ3MgfHwge31cbiAgICBfbWFuaWZlc3QgPSB7XG4gICAgICAuLi5fbWFuaWZlc3QsXG4gICAgICAuLi5hcHBTZXR0aW5ncywgLy8gb2xkZXIgY29kZSBpcyBsb29raW5nIGZvciBhcHBTZXR0aW5ncyBpbiBtYW5pZmVzdFxuICAgIH1cblxuICAgIHNldEJpYmxlcyhfYmlibGVzKVxuICAgIHNldFRhcmdldEJpYmxlKHRhcmdldEJpYmxlKVxuICAgIHNldFNldHRpbmdzKFxuICAgICAge1xuICAgICAgICBwYW5lU2V0dGluZ3M6IF9wYW5lU2V0dGluZ3MsXG4gICAgICAgIHBhbmVLZXlTZXR0aW5nczogX3BhbmVLZXlTZXR0aW5ncyxcbiAgICAgICAgdG9vbHNTZXR0aW5nczogX3Rvb2xzU2V0dGluZ3MsXG4gICAgICAgIG1hbmlmZXN0OiBfbWFuaWZlc3QsXG4gICAgICAgIG5ld0NvbW1lbnQ6ICcnLFxuICAgICAgICBhcHBTZXR0aW5ncyxcbiAgICAgIH0sXG4gICAgICBmYWxzZVxuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBXcmFwcGVyIGZvciBnZXRTY3JpcHR1cmVGcm9tUmVmZXJlbmNlIHdpdGggY3VycmVudCBCaWJsZXMgZGF0YVxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGFuZyAtIExhbmd1YWdlIElEXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIEJpYmxlIElEXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBib29rIC0gQm9vayBJRFxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hhcHRlciAtIENoYXB0ZXIgbnVtYmVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2ZXJzZSAtIFZlcnNlIG51bWJlclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBTY3JpcHR1cmUgdGV4dFxuICAgKi9cbiAgZnVuY3Rpb24gX2dldFNjcmlwdHVyZUZyb21SZWZlcmVuY2UobGFuZywgaWQsIGJvb2ssIGNoYXB0ZXIsIHZlcnNlKSB7XG4gICAgcmV0dXJuIGdldFNjcmlwdHVyZUZyb21SZWZlcmVuY2UoYmlibGVzLCBsYW5nLCBpZCwgYm9vaywgY2hhcHRlciwgdmVyc2UpXG4gIH1cblxuICAvKipcbiAgICogRWZmZWN0IGhvb2sgdG8gdXBkYXRlIHNldHRpbmdzIHdoZW4gQmlibGVzIG9yIHRhcmdldCBCaWJsZSBjaGFuZ2VzXG4gICAqL1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHVwZGF0ZVNldHRpbmdzKGJpYmxlc18sIHRhcmdldEJpYmxlXylcbiAgfSwgW2JpYmxlc18sIHRhcmdldEJpYmxlX10pXG5cbiAgLy8gYnVpbGQgdGhlIHRpdGxlXG4gIGNvbnN0IHsgdGFyZ2V0X2xhbmd1YWdlLCBwcm9qZWN0IH0gPSBtYW5pZmVzdFxuICBsZXQgZXhwYW5kZWRTY3JpcHR1cmVQYW5lVGl0bGUgPSBwcm9qZWN0Py50aXRsZSB8fCAnJ1xuXG4gIGlmICh0YXJnZXRfbGFuZ3VhZ2U/LmJvb2s/Lm5hbWUpIHtcbiAgICBleHBhbmRlZFNjcmlwdHVyZVBhbmVUaXRsZSA9IHRhcmdldF9sYW5ndWFnZS5ib29rLm5hbWVcbiAgfVxuXG4gIGNvbnN0IHN0eWxlUHJvcHMgPSBzdHlsZXMgfHwge31cbiAgY29uc3QgX2NoZWNrZXJTdHlsZXMgPSB7XG4gICAgLi4ubG9jYWxTdHlsZXMuY29udGFpbmVyRGl2LFxuICAgIC4uLnN0eWxlUHJvcHMsXG4gIH1cbiAgY29uc29sZS5sb2coeyBtYW5pZmVzdDogeyAuLi5tYW5pZmVzdCwgLi4udGFyZ2V0TGFuZ3VhZ2VEZXRhaWxzIH0gfSlcbiAgcmV0dXJuIHJlYWR5VG9EaXNwbGF5Q2hlY2tlciA/IChcbiAgICA8ZGl2IGlkPSdjaGVja2VyJyBzdHlsZT17X2NoZWNrZXJTdHlsZXN9PlxuICAgICAgPEdyb3VwTWVudUNvbXBvbmVudFxuICAgICAgICBib29rTmFtZT17Ym9va05hbWV9XG4gICAgICAgIGNoYW5nZUN1cnJlbnRDb250ZXh0SWQ9e2NoYW5nZUN1cnJlbnRDaGVja199XG4gICAgICAgIGNvbnRleHRJZD17Y3VycmVudENvbnRleHRJZH1cbiAgICAgICAgZGlyZWN0aW9uPXtkaXJlY3Rpb259XG4gICAgICAgIGdyb3Vwc0RhdGE9e2dyb3Vwc0RhdGF9XG4gICAgICAgIGdyb3Vwc0luZGV4PXtncm91cHNJbmRleH1cbiAgICAgICAgdGFyZ2V0TGFuZ3VhZ2VGb250PXt0YXJnZXRMYW5ndWFnZUZvbnR9XG4gICAgICAgIHRyYW5zbGF0ZT17dHJhbnNsYXRlfVxuICAgICAgLz5cbiAgICAgIDxkaXYgc3R5bGU9e2xvY2FsU3R5bGVzLmNlbnRlckRpdn0+XG4gICAgICAgIHtiaWJsZXMgJiYgT2JqZWN0LmtleXMoYmlibGVzKS5sZW5ndGggJiYgKFxuICAgICAgICAgIDxkaXYgc3R5bGU9e2xvY2FsU3R5bGVzLnNjcmlwdHVyZVBhbmVEaXZ9PlxuICAgICAgICAgICAgPFNjcmlwdHVyZVBhbmVcbiAgICAgICAgICAgICAgYWRkT2JqZWN0UHJvcGVydHlUb01hbmlmZXN0PXthZGRPYmplY3RQcm9wZXJ0eVRvTWFuaWZlc3R9XG4gICAgICAgICAgICAgIGJpYmxlcz17YmlibGVzfVxuICAgICAgICAgICAgICBjb21wbGV4U2NyaXB0Rm9udHM9e2NvbXBsZXhTY3JpcHRGb250c31cbiAgICAgICAgICAgICAgY29udGV4dElkPXtjdXJyZW50Q29udGV4dElkfVxuICAgICAgICAgICAgICBjdXJyZW50UGFuZVNldHRpbmdzPXtwYW5lU2V0dGluZ3N9XG4gICAgICAgICAgICAgIGVkaXRWZXJzZVJlZj17bnVsbH1cbiAgICAgICAgICAgICAgZWRpdFRhcmdldFZlcnNlPXtlZGl0VGFyZ2V0VmVyc2V9XG4gICAgICAgICAgICAgIGV4cGFuZGVkU2NyaXB0dXJlUGFuZVRpdGxlPXtleHBhbmRlZFNjcmlwdHVyZVBhbmVUaXRsZX1cbiAgICAgICAgICAgICAgZ2V0QXZhaWxhYmxlU2NyaXB0dXJlUGFuZVNlbGVjdGlvbnM9e251bGx9XG4gICAgICAgICAgICAgIGdldExleGljb25EYXRhPXtnZXRMZXhpY29uRGF0YV99XG4gICAgICAgICAgICAgIG1ha2VTdXJlQmlibGVzTG9hZGVkRm9yVG9vbD17bnVsbH1cbiAgICAgICAgICAgICAgcHJvamVjdERldGFpbHNSZWR1Y2VyPXt7XG4gICAgICAgICAgICAgICAgbWFuaWZlc3Q6IHtcbiAgICAgICAgICAgICAgICAgIC4uLm1hbmlmZXN0LFxuICAgICAgICAgICAgICAgICAgLi4ueyB0YXJnZXRfbGFuZ3VhZ2U6IHRhcmdldExhbmd1YWdlRGV0YWlscyB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIHNlbGVjdGlvbnM9e2N1cnJlbnRTZWxlY3Rpb25zfVxuICAgICAgICAgICAgICBzZXRUb29sU2V0dGluZ3M9e3NldFRvb2xTZXR0aW5nc1NjcmlwdHVyZX1cbiAgICAgICAgICAgICAgc2hvd1BvcG92ZXI9e3Nob3dQb3BvdmVyfVxuICAgICAgICAgICAgICBvbkV4cGFuZGVkU2NyaXB0dXJlUGFuZVNob3c9e251bGx9XG4gICAgICAgICAgICAgIHRyYW5zbGF0ZT17dHJhbnNsYXRlfVxuICAgICAgICAgICAgICBkaXNhYmxlRm9udE1lbnU9e2Rpc2FibGVGb250TWVudX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICAgIDxDaGVja0luZm9DYXJkXG4gICAgICAgICAgZ2V0U2NyaXB0dXJlRnJvbVJlZmVyZW5jZT17X2dldFNjcmlwdHVyZUZyb21SZWZlcmVuY2V9XG4gICAgICAgICAgb25MaW5rQ2xpY2s9eygpID0+IGZhbHNlfVxuICAgICAgICAgIG9uU2VlTW9yZUNsaWNrPXsoKSA9PiBmYWxzZX1cbiAgICAgICAgICBwaHJhc2U9e2dyb3VwUGhyYXNlfVxuICAgICAgICAgIHNlZU1vcmVMYWJlbD17dHJhbnNsYXRlKCdzZWVfbW9yZScpfVxuICAgICAgICAgIHNob3dTZWVNb3JlQnV0dG9uPXtmYWxzZX1cbiAgICAgICAgICB0aXRsZT17Z3JvdXBUaXRsZX1cbiAgICAgICAgLz5cbiAgICAgICAgPFZlcnNlQ2hlY2tcbiAgICAgICAgICBhbGlnbmVkR0xUZXh0PXthbGlnbmVkR0xUZXh0fVxuICAgICAgICAgIGJvb2tEZXRhaWxzPXtib29rRGV0YWlsc31cbiAgICAgICAgICBib29rbWFya0VuYWJsZWQ9e2Jvb2ttYXJrRW5hYmxlZH1cbiAgICAgICAgICBjYW5jZWxFZGl0VmVyc2U9e2NhbmNlbEVkaXRWZXJzZX1cbiAgICAgICAgICBjYW5jZWxDb21tZW50PXtjYW5jZWxDb21tZW50fVxuICAgICAgICAgIGNhbmNlbFNlbGVjdGlvbj17Y2FuY2VsU2VsZWN0aW9ufVxuICAgICAgICAgIGNoYW5nZU1vZGU9e2NoYW5nZU1vZGV9XG4gICAgICAgICAgY2hhbmdlU2VsZWN0aW9uc0luTG9jYWxTdGF0ZT17Y2hhbmdlU2VsZWN0aW9uc0luTG9jYWxTdGF0ZX1cbiAgICAgICAgICBjaGVja0lmQ29tbWVudENoYW5nZWQ9e2NoZWNrSWZDb21tZW50Q2hhbmdlZH1cbiAgICAgICAgICBjaGVja0lmVmVyc2VDaGFuZ2VkPXtjaGVja0lmVmVyc2VDaGFuZ2VkfVxuICAgICAgICAgIGNsZWFyU2VsZWN0aW9uPXtjbGVhclNlbGVjdGlvbn1cbiAgICAgICAgICBjb21tZW50VGV4dD17Y29tbWVudFRleHR9XG4gICAgICAgICAgY29udGV4dElkPXtjdXJyZW50Q29udGV4dElkfVxuICAgICAgICAgIGRpYWxvZ01vZGFsVmlzaWJpbGl0eT17ZmFsc2V9XG4gICAgICAgICAgaXNDb21tZW50Q2hhbmdlZD17aXNDb21tZW50Q2hhbmdlZH1cbiAgICAgICAgICBpc1ZlcnNlQ2hhbmdlZD17aXNWZXJzZUNoYW5nZWR9XG4gICAgICAgICAgaXNWZXJzZUVkaXRlZD17aXNWZXJzZUVkaXRlZH1cbiAgICAgICAgICBoYW5kbGVFZGl0VmVyc2U9e2hhbmRsZUVkaXRWZXJzZX1cbiAgICAgICAgICBoYW5kbGVHb1RvTmV4dD17aGFuZGxlR29Ub05leHR9XG4gICAgICAgICAgaGFuZGxlR29Ub1ByZXZpb3VzPXtoYW5kbGVHb1RvUHJldmlvdXN9XG4gICAgICAgICAgaGFuZGxlT3BlbkRpYWxvZz17bnVsbH1cbiAgICAgICAgICBpc1ZlcnNlSW52YWxpZGF0ZWQ9e2lzVmVyc2VJbnZhbGlkYXRlZH1cbiAgICAgICAgICBoYW5kbGVDbG9zZURpYWxvZz17bnVsbH1cbiAgICAgICAgICBoYW5kbGVDb21tZW50PXtoYW5kbGVDb21tZW50fVxuICAgICAgICAgIGhhbmRsZVNraXA9e251bGx9XG4gICAgICAgICAgaGFuZGxlVGFnc0NoZWNrYm94PXtoYW5kbGVUYWdzQ2hlY2tib3h9XG4gICAgICAgICAgbG9jYWxOb3RoaW5nVG9TZWxlY3Q9e3RlbXBOb3RoaW5nVG9TZWxlY3R9XG4gICAgICAgICAgbWFuaWZlc3Q9e21hbmlmZXN0fVxuICAgICAgICAgIG1heGltdW1TZWxlY3Rpb25zPXttYXhpbXVtU2VsZWN0aW9uc31cbiAgICAgICAgICBtb2RlPXttb2RlfVxuICAgICAgICAgIG5ld1NlbGVjdGlvbnM9e3RlbXBTZWxlY3Rpb25zfVxuICAgICAgICAgIG5vdGhpbmdUb1NlbGVjdD17Y3VycmVudE5vdGhpbmdUb1NlbGVjdH1cbiAgICAgICAgICBvcGVuQWxlcnREaWFsb2c9e29wZW5BbGVydERpYWxvZ31cbiAgICAgICAgICBzYXZlQ29tbWVudD17c2F2ZUNvbW1lbnR9XG4gICAgICAgICAgc2F2ZUVkaXRWZXJzZT17c2F2ZUVkaXRWZXJzZX1cbiAgICAgICAgICBzYXZlU2VsZWN0aW9uPXtfc2F2ZVNlbGVjdGlvbn1cbiAgICAgICAgICBzZWxlY3Rpb25zPXtjdXJyZW50U2VsZWN0aW9uc31cbiAgICAgICAgICBzZXRUb29sU2V0dGluZ3M9e3NldFRvb2xTZXR0aW5nc31cbiAgICAgICAgICB0YWdzPXtuZXdUYWdzIHx8IFtdfVxuICAgICAgICAgIHRhcmdldEJpYmxlPXt0YXJnZXRCaWJsZX1cbiAgICAgICAgICB0YXJnZXRMYW5ndWFnZURldGFpbHM9e3RhcmdldExhbmd1YWdlRGV0YWlsc31cbiAgICAgICAgICB0b2dnbGVCb29rbWFyaz17dG9nZ2xlQm9va21hcmt9XG4gICAgICAgICAgdG9nZ2xlTm90aGluZ1RvU2VsZWN0PXt0b2dnbGVOb3RoaW5nVG9TZWxlY3R9XG4gICAgICAgICAgdG9vbHNTZXR0aW5ncz17dG9vbHNTZXR0aW5nc31cbiAgICAgICAgICB0cmFuc2xhdGU9e3RyYW5zbGF0ZX1cbiAgICAgICAgICB1bmZpbHRlcmVkVmVyc2VUZXh0PXt1bmZpbHRlcmVkVmVyc2VUZXh0fVxuICAgICAgICAgIHZhbGlkYXRlU2VsZWN0aW9ucz17dmFsaWRhdGVTZWxlY3Rpb25zfVxuICAgICAgICAgIHZlcnNlVGV4dD17dmVyc2VUZXh0fVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgICB7c2hvd0RvY3VtZW50ICYmIChcbiAgICAgICAgPFRyYW5zbGF0aW9uSGVscHNcbiAgICAgICAgICBtb2RhbEFydGljbGU9e2FydGljbGV9XG4gICAgICAgICAgYXJ0aWNsZT17YXJ0aWNsZX1cbiAgICAgICAgICBleHBhbmRlZEhlbHBzQnV0dG9uSG92ZXJUZXh0PXsnQ2xpY2sgdG8gc2hvdyBleHBhbmRlZCBoZWxwIHBhbmUnfVxuICAgICAgICAgIG1vZGFsVGl0bGU9eyd0cmFuc2xhdGlvbkhlbHBzJ31cbiAgICAgICAgICB0cmFuc2xhdGU9e3RyYW5zbGF0ZX1cbiAgICAgICAgICBpc1Nob3dIZWxwc0V4cGFuZGVkPXtzaG93SGVscHNNb2RhbH1cbiAgICAgICAgICBvcGVuRXhwYW5kZWRIZWxwc01vZGFsPXt0b2dnbGVIZWxwc01vZGFsfVxuICAgICAgICAgIHNpZGViYXJUb2dnbGU9e3RvZ2dsZUhlbHBzfVxuICAgICAgICAgIGlzU2hvd0hlbHBzU2lkZWJhcj17c2hvd0hlbHBzfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICAgIHtwb3BvdmVyUHJvcHM/LnBvcG92ZXJWaXNpYmlsaXR5ICYmIChcbiAgICAgICAgPFBvcG92ZXJDb250YWluZXIgey4uLnBvcG92ZXJQcm9wc30gLz5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICkgOiAoXG4gICAgJ1dhaXRpbmcgZm9yIERhdGEnXG4gIClcbn1cblxuQ2hlY2tlci5wcm9wVHlwZXMgPSB7XG4gIHN0eWxlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgYWxpZ25lZEdsQmlibGU6IFByb3BUeXBlcy5vYmplY3QsXG4gIGJpYmxlczogUHJvcFR5cGVzLmFycmF5LFxuICBjaGFuZ2VUYXJnZXRWZXJzZTogUHJvcFR5cGVzLmZ1bmMsXG4gIGNoZWNraW5nRGF0YTogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICBjaGVja1R5cGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNvbnRleHRJZDogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICBnbFdvcmRzRGF0YTogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICBnZXRMZXhpY29uRGF0YTogUHJvcFR5cGVzLmZ1bmMsXG4gIGluaXRpYWxTZXR0aW5nczogUHJvcFR5cGVzLm9iamVjdCxcbiAgc2F2ZUNoZWNraW5nRGF0YTogUHJvcFR5cGVzLmZ1bmMsXG4gIHNhdmVTZXR0aW5nczogUHJvcFR5cGVzLmZ1bmMsXG4gIHNob3dEb2N1bWVudDogUHJvcFR5cGVzLmJvb2wsXG4gIHRhcmdldEJpYmxlOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gIHRhcmdldExhbmd1YWdlRGV0YWlsczogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICB0cmFuc2xhdGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGRpc2FibGVGb250TWVudTogUHJvcFR5cGVzLmJvb2wsXG59XG5leHBvcnQgZGVmYXVsdCBDaGVja2VyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUF5Q0EsSUFBQUEsWUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBQyx1QkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsZ0JBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLGFBQUEsR0FBQUosT0FBQTtBQUlBLElBQUFLLFVBQUEsR0FBQUMsc0JBQUEsQ0FBQU4sT0FBQTtBQUNBLElBQUFPLE9BQUEsR0FBQUQsc0JBQUEsQ0FBQU4sT0FBQTtBQUNBLElBQUFRLG1CQUFBLEdBQUFGLHNCQUFBLENBQUFOLE9BQUE7QUFDQSxJQUFBUyxlQUFBLEdBQUFULE9BQUE7QUFPQSxJQUFBVSxVQUFBLEdBQUFKLHNCQUFBLENBQUFOLE9BQUE7QUFDQSxJQUFBVyxpQkFBQSxHQUFBWCxPQUFBO0FBU0EsSUFBQVks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N1QsU0FBUyxFQUFFQSxTQUFVO0lBQ3JCOFQsbUJBQW1CLEVBQUVyUixjQUFlO0lBQ3BDc1Isc0JBQXNCLEVBQUV6RSxnQkFBaUI7SUFDekMwRSxhQUFhLEVBQUV4RSxXQUFZO0lBQzNCeUUsa0JBQWtCLEVBQUV2UjtFQUFVLENBQy9CLENBQ0YsRUFDQSxDQUFBSCxZQUFZLGFBQVpBLFlBQVksdUJBQVpBLFlBQVksQ0FBRUMsaUJBQWlCLGtCQUM5Qi9LLE1BQUEsWUFBQTRhLGFBQUEsQ0FBQzlaLGlCQUFBLFdBQWdCLEVBQUtnSyxZQUFlLENBRXBDLENBQUMsR0FFTixrQkFDRDtBQUNILENBQUM7QUFFRDlELE9BQU8sQ0FBQ3lWLFNBQVMsR0FBRztFQUNsQnRVLE1BQU0sRUFBRXVVLHFCQUFTLENBQUNDLE1BQU07RUFDeEJ0VixjQUFjLEVBQUVxVixxQkFBUyxDQUFDQyxNQUFNO0VBQ2hDcFYsTUFBTSxFQUFFbVYscUJBQVMsQ0FBQ0UsS0FBSztFQUN2Qm5WLGlCQUFpQixFQUFFaVYscUJBQVMsQ0FBQ0csSUFBSTtFQUNqQ25WLFlBQVksRUFBRWdWLHFCQUFTLENBQUNDLE1BQU0sQ0FBQ0csVUFBVTtFQUN6Q25WLFNBQVMsRUFBRStVLHFCQUFTLENBQUNLLE1BQU07RUFDM0JuVixTQUFTLEVBQUU4VSxxQkFBUyxDQUFDQyxNQUFNLENBQUNHLFVBQVU7RUFDdENoVixXQUFXLEVBQUU0VSxxQkFBUyxDQUFDQyxNQUFNLENBQUNHLFVBQVU7RUFDeENqVixjQUFjLEVBQUU2VSxxQkFBUyxDQUFDRyxJQUFJO0VBQzlCOVUsZUFBZSxFQUFFMlUscUJBQVMsQ0FBQ0MsTUFBTTtFQUNqQzNVLGdCQUFnQixFQUFFMFUscUJBQVMsQ0FBQ0csSUFBSTtFQUNoQzVVLFlBQVksRUFBRXlVLHFCQUFTLENBQUNHLElBQUk7RUFDNUIzVSxZQUFZLEVBQUV3VSxxQkFBUyxDQUFDTSxJQUFJO0VBQzVCM1UsV0FBVyxFQUFFcVUscUJBQVMsQ0FBQ0MsTUFBTSxDQUFDRyxVQUFVO0VBQ3hDeFUscUJBQXFCLEVBQUVvVSxxQkFBUyxDQUFDQyxNQUFNLENBQUNHLFVBQVU7RUFDbER2VSxTQUFTLEVBQUVtVSxxQkFBUyxDQUFDRyxJQUFJLENBQUNDLFVBQVU7RUFDcENyVSxlQUFlLEVBQUVpVSxxQkFBUyxDQUFDTTtBQUM3QixDQUFDO0FBQUEsSUFBQUMsUUFBQSxHQUFBdFcsT0FBQSxjQUNjSyxPQUFPIiwiaWdub3JlTGlzdCI6W119