matrix-react-sdk
Version:
SDK for matrix.org using React
184 lines (150 loc) • 22.9 kB
JavaScript
"use strict";
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
var _react = _interopRequireWildcard(require("react"));
var _event = require("matrix-js-sdk/src/@types/event");
var _languageHandler = require("../../../languageHandler");
var _BaseDialog = _interopRequireDefault(require("./BaseDialog"));
var _DevtoolsDialog = _interopRequireDefault(require("./DevtoolsDialog"));
var _SpaceBasicSettings = _interopRequireDefault(require("../spaces/SpaceBasicSettings"));
var _RoomTopic = require("../elements/RoomTopic");
var _Avatar = require("../../../Avatar");
var _ToggleSwitch = _interopRequireDefault(require("../elements/ToggleSwitch"));
var _AccessibleButton = _interopRequireDefault(require("../elements/AccessibleButton"));
var _Modal = _interopRequireDefault(require("../../../Modal"));
var _dispatcher = _interopRequireDefault(require("../../../dispatcher/dispatcher"));
var _promise = require("../../../utils/promise");
var _useDispatcher = require("../../../hooks/useDispatcher");
var _SpaceRoomView = require("../../structures/SpaceRoomView");
/*
Copyright 2021 The Matrix.org Foundation C.I.C.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
const SpaceSettingsDialog
/*: React.FC<IProps>*/
= ({
matrixClient: cli,
space,
onFinished
}) => {
(0, _useDispatcher.useDispatcher)(_dispatcher.default, (_ref) => {
let {
action
} = _ref,
params = (0, _objectWithoutProperties2.default)(_ref, ["action"]);
if (action === "after_leave_room" && params.room_id === space.roomId) {
onFinished(false);
}
});
const [busy, setBusy] = (0, _react.useState)(false);
const [error, setError] = (0, _react.useState)("");
const userId = cli.getUserId();
const [newAvatar, setNewAvatar] = (0, _react.useState)(null); // undefined means to remove avatar
const canSetAvatar = space.currentState.maySendStateEvent(_event.EventType.RoomAvatar, userId);
const avatarChanged = newAvatar !== null;
const [name, setName] = (0, _react.useState)(space.name);
const canSetName = space.currentState.maySendStateEvent(_event.EventType.RoomName, userId);
const nameChanged = name !== space.name;
const currentTopic = (0, _RoomTopic.getTopic)(space);
const [topic, setTopic] = (0, _react.useState)(currentTopic);
const canSetTopic = space.currentState.maySendStateEvent(_event.EventType.RoomTopic, userId);
const topicChanged = topic !== currentTopic;
const currentJoinRule = space.getJoinRule();
const [joinRule, setJoinRule] = (0, _react.useState)(currentJoinRule);
const canSetJoinRule = space.currentState.maySendStateEvent(_event.EventType.RoomJoinRules, userId);
const joinRuleChanged = joinRule !== currentJoinRule;
const onSave = async () => {
setBusy(true);
const promises = [];
if (avatarChanged) {
promises.push(cli.sendStateEvent(space.roomId, _event.EventType.RoomAvatar, {
url: await cli.uploadContent(newAvatar)
}, ""));
}
if (nameChanged) {
promises.push(cli.setRoomName(space.roomId, name));
}
if (topicChanged) {
promises.push(cli.setRoomTopic(space.roomId, topic));
}
if (joinRuleChanged) {
promises.push(cli.sendStateEvent(space.roomId, _event.EventType.RoomJoinRules, {
join_rule: joinRule
}, ""));
}
const results = await (0, _promise.allSettled)(promises);
setBusy(false);
const failures = results.filter(r => r.status === "rejected");
if (failures.length > 0) {
console.error("Failed to save space settings: ", failures);
setError((0, _languageHandler._t)("Failed to save space settings."));
}
};
return /*#__PURE__*/_react.default.createElement(_BaseDialog.default, {
title: (0, _languageHandler._t)("Space settings"),
className: "mx_SpaceSettingsDialog",
contentId: "mx_SpaceSettingsDialog",
onFinished: onFinished,
fixedWidth: false
}, /*#__PURE__*/_react.default.createElement("div", {
className: "mx_SpaceSettingsDialog_content",
id: "mx_SpaceSettingsDialog"
}, /*#__PURE__*/_react.default.createElement("div", null, (0, _languageHandler._t)("Edit settings relating to your space.")), error && /*#__PURE__*/_react.default.createElement("div", {
className: "mx_SpaceRoomView_errorText"
}, error), /*#__PURE__*/_react.default.createElement(_SpaceRoomView.SpaceFeedbackPrompt, {
onClick: () => onFinished(false)
}), /*#__PURE__*/_react.default.createElement(_SpaceBasicSettings.default, {
avatarUrl: (0, _Avatar.avatarUrlForRoom)(space, 80, 80, "crop"),
avatarDisabled: busy || !canSetAvatar,
setAvatar: setNewAvatar,
name: name,
nameDisabled: busy || !canSetName,
setName: setName,
topic: topic,
topicDisabled: busy || !canSetTopic,
setTopic: setTopic
}), /*#__PURE__*/_react.default.createElement("div", null, (0, _languageHandler._t)("Make this space private"), /*#__PURE__*/_react.default.createElement(_ToggleSwitch.default, {
checked: joinRule !== "public",
onChange: checked => setJoinRule(checked ? "invite" : "public"),
disabled: !canSetJoinRule,
"aria-label": (0, _languageHandler._t)("Make this space private")
})), /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, {
kind: "danger",
onClick: () => {
_dispatcher.default.dispatch({
action: "leave_room",
room_id: space.roomId
});
}
}, (0, _languageHandler._t)("Leave Space")), /*#__PURE__*/_react.default.createElement("div", {
className: "mx_SpaceSettingsDialog_buttons"
}, /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, {
onClick: () => _Modal.default.createDialog(_DevtoolsDialog.default, {
roomId: space.roomId
})
}, (0, _languageHandler._t)("View dev tools")), /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, {
onClick: onFinished,
disabled: busy,
kind: "link"
}, (0, _languageHandler._t)("Cancel")), /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, {
onClick: onSave,
disabled: busy,
kind: "primary"
}, busy ? (0, _languageHandler._t)("Saving...") : (0, _languageHandler._t)("Save Changes")))));
};
var _default = SpaceSettingsDialog;
exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3ZpZXdzL2RpYWxvZ3MvU3BhY2VTZXR0aW5nc0RpYWxvZy50c3giXSwibmFtZXMiOlsiU3BhY2VTZXR0aW5nc0RpYWxvZyIsIm1hdHJpeENsaWVudCIsImNsaSIsInNwYWNlIiwib25GaW5pc2hlZCIsImRlZmF1bHREaXNwYXRjaGVyIiwiYWN0aW9uIiwicGFyYW1zIiwicm9vbV9pZCIsInJvb21JZCIsImJ1c3kiLCJzZXRCdXN5IiwiZXJyb3IiLCJzZXRFcnJvciIsInVzZXJJZCIsImdldFVzZXJJZCIsIm5ld0F2YXRhciIsInNldE5ld0F2YXRhciIsImNhblNldEF2YXRhciIsImN1cnJlbnRTdGF0ZSIsIm1heVNlbmRTdGF0ZUV2ZW50IiwiRXZlbnRUeXBlIiwiUm9vbUF2YXRhciIsImF2YXRhckNoYW5nZWQiLCJuYW1lIiwic2V0TmFtZSIsImNhblNldE5hbWUiLCJSb29tTmFtZSIsIm5hbWVDaGFuZ2VkIiwiY3VycmVudFRvcGljIiwidG9waWMiLCJzZXRUb3BpYyIsImNhblNldFRvcGljIiwiUm9vbVRvcGljIiwidG9waWNDaGFuZ2VkIiwiY3VycmVudEpvaW5SdWxlIiwiZ2V0Sm9pblJ1bGUiLCJqb2luUnVsZSIsInNldEpvaW5SdWxlIiwiY2FuU2V0Sm9pblJ1bGUiLCJSb29tSm9pblJ1bGVzIiwiam9pblJ1bGVDaGFuZ2VkIiwib25TYXZlIiwicHJvbWlzZXMiLCJwdXNoIiwic2VuZFN0YXRlRXZlbnQiLCJ1cmwiLCJ1cGxvYWRDb250ZW50Iiwic2V0Um9vbU5hbWUiLCJzZXRSb29tVG9waWMiLCJqb2luX3J1bGUiLCJyZXN1bHRzIiwiZmFpbHVyZXMiLCJmaWx0ZXIiLCJyIiwic3RhdHVzIiwibGVuZ3RoIiwiY29uc29sZSIsImNoZWNrZWQiLCJkaXNwYXRjaCIsIk1vZGFsIiwiY3JlYXRlRGlhbG9nIiwiRGV2dG9vbHNEaWFsb2ciXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFnQkE7O0FB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SSxFQUFDLFFBRFQ7QUFFSSxJQUFBLE9BQU8sRUFBRSxNQUFNO0FBQ1hsQywwQkFBa0JzRCxRQUFsQixDQUEyQjtBQUN2QnJELFFBQUFBLE1BQU0sRUFBRSxZQURlO0FBRXZCRSxRQUFBQSxPQUFPLEVBQUVMLEtBQUssQ0FBQ007QUFGUSxPQUEzQjtBQUlIO0FBUEwsS0FTTSx5QkFBRyxhQUFILENBVE4sQ0E3QkosZUF5Q0k7QUFBSyxJQUFBLFNBQVMsRUFBQztBQUFmLGtCQUNJLDZCQUFDLHlCQUFEO0FBQWtCLElBQUEsT0FBTyxFQUFFLE1BQU1tRCxlQUFNQyxZQUFOLENBQW1CQyx1QkFBbkIsRUFBbUM7QUFBQ3JELE1BQUFBLE1BQU0sRUFBRU4sS0FBSyxDQUFDTTtBQUFmLEtBQW5DO0FBQWpDLEtBQ00seUJBQUcsZ0JBQUgsQ0FETixDQURKLGVBSUksNkJBQUMseUJBQUQ7QUFBa0IsSUFBQSxPQUFPLEVBQUVMLFVBQTNCO0FBQXVDLElBQUEsUUFBUSxFQUFFTSxJQUFqRDtBQUF1RCxJQUFBLElBQUksRUFBQztBQUE1RCxLQUNNLHlCQUFHLFFBQUgsQ0FETixDQUpKLGVBT0ksNkJBQUMseUJBQUQ7QUFBa0IsSUFBQSxPQUFPLEVBQUVnQyxNQUEzQjtBQUFtQyxJQUFBLFFBQVEsRUFBRWhDLElBQTdDO0FBQW1ELElBQUEsSUFBSSxFQUFDO0FBQXhELEtBQ01BLElBQUksR0FBRyx5QkFBRyxXQUFILENBQUgsR0FBcUIseUJBQUcsY0FBSCxDQUQvQixDQVBKLENBekNKLENBUEcsQ0FBUDtBQTZESCxDQTFIRDs7ZUE0SGVWLG1CIiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDIxIFRoZSBNYXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG5cbkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG55b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG5Zb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG5Vbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG5kaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG5XSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cblNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuaW1wb3J0IFJlYWN0LCB7dXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7Um9vbX0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL21vZGVscy9yb29tXCI7XG5pbXBvcnQge01hdHJpeENsaWVudH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL2NsaWVudFwiO1xuaW1wb3J0IHtFdmVudFR5cGV9IGZyb20gXCJtYXRyaXgtanMtc2RrL3NyYy9AdHlwZXMvZXZlbnRcIjtcblxuaW1wb3J0IHtfdH0gZnJvbSAnLi4vLi4vLi4vbGFuZ3VhZ2VIYW5kbGVyJztcbmltcG9ydCB7SURpYWxvZ1Byb3BzfSBmcm9tIFwiLi9JRGlhbG9nUHJvcHNcIjtcbmltcG9ydCBCYXNlRGlhbG9nIGZyb20gXCIuL0Jhc2VEaWFsb2dcIjtcbmltcG9ydCBEZXZ0b29sc0RpYWxvZyBmcm9tIFwiLi9EZXZ0b29sc0RpYWxvZ1wiO1xuaW1wb3J0IFNwYWNlQmFzaWNTZXR0aW5ncyBmcm9tICcuLi9zcGFjZXMvU3BhY2VCYXNpY1NldHRpbmdzJztcbmltcG9ydCB7Z2V0VG9waWN9IGZyb20gXCIuLi9lbGVtZW50cy9Sb29tVG9waWNcIjtcbmltcG9ydCB7YXZhdGFyVXJsRm9yUm9vbX0gZnJvbSBcIi4uLy4uLy4uL0F2YXRhclwiO1xuaW1wb3J0IFRvZ2dsZVN3aXRjaCBmcm9tIFwiLi4vZWxlbWVudHMvVG9nZ2xlU3dpdGNoXCI7XG5pbXBvcnQgQWNjZXNzaWJsZUJ1dHRvbiBmcm9tIFwiLi4vZWxlbWVudHMvQWNjZXNzaWJsZUJ1dHRvblwiO1xuaW1wb3J0IE1vZGFsIGZyb20gXCIuLi8uLi8uLi9Nb2RhbFwiO1xuaW1wb3J0IGRlZmF1bHREaXNwYXRjaGVyIGZyb20gXCIuLi8uLi8uLi9kaXNwYXRjaGVyL2Rpc3BhdGNoZXJcIjtcbmltcG9ydCB7YWxsU2V0dGxlZH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3Byb21pc2VcIjtcbmltcG9ydCB7dXNlRGlzcGF0Y2hlcn0gZnJvbSBcIi4uLy4uLy4uL2hvb2tzL3VzZURpc3BhdGNoZXJcIjtcbmltcG9ydCB7U3BhY2VGZWVkYmFja1Byb21wdH0gZnJvbSBcIi4uLy4uL3N0cnVjdHVyZXMvU3BhY2VSb29tVmlld1wiO1xuXG5pbnRlcmZhY2UgSVByb3BzIGV4dGVuZHMgSURpYWxvZ1Byb3BzIHtcbiAgICBtYXRyaXhDbGllbnQ6IE1hdHJpeENsaWVudDtcbiAgICBzcGFjZTogUm9vbTtcbn1cblxuY29uc3QgU3BhY2VTZXR0aW5nc0RpYWxvZzogUmVhY3QuRkM8SVByb3BzPiA9ICh7IG1hdHJpeENsaWVudDogY2xpLCBzcGFjZSwgb25GaW5pc2hlZCB9KSA9PiB7XG4gICAgdXNlRGlzcGF0Y2hlcihkZWZhdWx0RGlzcGF0Y2hlciwgKHthY3Rpb24sIC4uLnBhcmFtc30pID0+IHtcbiAgICAgICAgaWYgKGFjdGlvbiA9PT0gXCJhZnRlcl9sZWF2ZV9yb29tXCIgJiYgcGFyYW1zLnJvb21faWQgPT09IHNwYWNlLnJvb21JZCkge1xuICAgICAgICAgICAgb25GaW5pc2hlZChmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IFtidXN5LCBzZXRCdXN5XSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlKFwiXCIpO1xuXG4gICAgY29uc3QgdXNlcklkID0gY2xpLmdldFVzZXJJZCgpO1xuXG4gICAgY29uc3QgW25ld0F2YXRhciwgc2V0TmV3QXZhdGFyXSA9IHVzZVN0YXRlPEZpbGU+KG51bGwpOyAvLyB1bmRlZmluZWQgbWVhbnMgdG8gcmVtb3ZlIGF2YXRhclxuICAgIGNvbnN0IGNhblNldEF2YXRhciA9IHNwYWNlLmN1cnJlbnRTdGF0ZS5tYXlTZW5kU3RhdGVFdmVudChFdmVudFR5cGUuUm9vbUF2YXRhciwgdXNlcklkKTtcbiAgICBjb25zdCBhdmF0YXJDaGFuZ2VkID0gbmV3QXZhdGFyICE9PSBudWxsO1xuXG4gICAgY29uc3QgW25hbWUsIHNldE5hbWVdID0gdXNlU3RhdGU8c3RyaW5nPihzcGFjZS5uYW1lKTtcbiAgICBjb25zdCBjYW5TZXROYW1lID0gc3BhY2UuY3VycmVudFN0YXRlLm1heVNlbmRTdGF0ZUV2ZW50KEV2ZW50VHlwZS5Sb29tTmFtZSwgdXNlcklkKTtcbiAgICBjb25zdCBuYW1lQ2hhbmdlZCA9IG5hbWUgIT09IHNwYWNlLm5hbWU7XG5cbiAgICBjb25zdCBjdXJyZW50VG9waWMgPSBnZXRUb3BpYyhzcGFjZSk7XG4gICAgY29uc3QgW3RvcGljLCBzZXRUb3BpY10gPSB1c2VTdGF0ZTxzdHJpbmc+KGN1cnJlbnRUb3BpYyk7XG4gICAgY29uc3QgY2FuU2V0VG9waWMgPSBzcGFjZS5jdXJyZW50U3RhdGUubWF5U2VuZFN0YXRlRXZlbnQoRXZlbnRUeXBlLlJvb21Ub3BpYywgdXNlcklkKTtcbiAgICBjb25zdCB0b3BpY0NoYW5nZWQgPSB0b3BpYyAhPT0gY3VycmVudFRvcGljO1xuXG4gICAgY29uc3QgY3VycmVudEpvaW5SdWxlID0gc3BhY2UuZ2V0Sm9pblJ1bGUoKTtcbiAgICBjb25zdCBbam9pblJ1bGUsIHNldEpvaW5SdWxlXSA9IHVzZVN0YXRlKGN1cnJlbnRKb2luUnVsZSk7XG4gICAgY29uc3QgY2FuU2V0Sm9pblJ1bGUgPSBzcGFjZS5jdXJyZW50U3RhdGUubWF5U2VuZFN0YXRlRXZlbnQoRXZlbnRUeXBlLlJvb21Kb2luUnVsZXMsIHVzZXJJZCk7XG4gICAgY29uc3Qgam9pblJ1bGVDaGFuZ2VkID0gam9pblJ1bGUgIT09IGN1cnJlbnRKb2luUnVsZTtcblxuICAgIGNvbnN0IG9uU2F2ZSA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgc2V0QnVzeSh0cnVlKTtcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcblxuICAgICAgICBpZiAoYXZhdGFyQ2hhbmdlZCkge1xuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChjbGkuc2VuZFN0YXRlRXZlbnQoc3BhY2Uucm9vbUlkLCBFdmVudFR5cGUuUm9vbUF2YXRhciwge1xuICAgICAgICAgICAgICAgIHVybDogYXdhaXQgY2xpLnVwbG9hZENvbnRlbnQobmV3QXZhdGFyKSxcbiAgICAgICAgICAgIH0sIFwiXCIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuYW1lQ2hhbmdlZCkge1xuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChjbGkuc2V0Um9vbU5hbWUoc3BhY2Uucm9vbUlkLCBuYW1lKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodG9waWNDaGFuZ2VkKSB7XG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKGNsaS5zZXRSb29tVG9waWMoc3BhY2Uucm9vbUlkLCB0b3BpYykpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGpvaW5SdWxlQ2hhbmdlZCkge1xuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChjbGkuc2VuZFN0YXRlRXZlbnQoc3BhY2Uucm9vbUlkLCBFdmVudFR5cGUuUm9vbUpvaW5SdWxlcywgeyBqb2luX3J1bGU6IGpvaW5SdWxlIH0sIFwiXCIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBhbGxTZXR0bGVkKHByb21pc2VzKTtcbiAgICAgICAgc2V0QnVzeShmYWxzZSk7XG4gICAgICAgIGNvbnN0IGZhaWx1cmVzID0gcmVzdWx0cy5maWx0ZXIociA9PiByLnN0YXR1cyA9PT0gXCJyZWplY3RlZFwiKTtcbiAgICAgICAgaWYgKGZhaWx1cmVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gc2F2ZSBzcGFjZSBzZXR0aW5nczogXCIsIGZhaWx1cmVzKTtcbiAgICAgICAgICAgIHNldEVycm9yKF90KFwiRmFpbGVkIHRvIHNhdmUgc3BhY2Ugc2V0dGluZ3MuXCIpKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gPEJhc2VEaWFsb2dcbiAgICAgICAgdGl0bGU9e190KFwiU3BhY2Ugc2V0dGluZ3NcIil9XG4gICAgICAgIGNsYXNzTmFtZT1cIm14X1NwYWNlU2V0dGluZ3NEaWFsb2dcIlxuICAgICAgICBjb250ZW50SWQ9XCJteF9TcGFjZVNldHRpbmdzRGlhbG9nXCJcbiAgICAgICAgb25GaW5pc2hlZD17b25GaW5pc2hlZH1cbiAgICAgICAgZml4ZWRXaWR0aD17ZmFsc2V9XG4gICAgPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X1NwYWNlU2V0dGluZ3NEaWFsb2dfY29udGVudFwiIGlkPVwibXhfU3BhY2VTZXR0aW5nc0RpYWxvZ1wiPlxuICAgICAgICAgICAgPGRpdj57IF90KFwiRWRpdCBzZXR0aW5ncyByZWxhdGluZyB0byB5b3VyIHNwYWNlLlwiKSB9PC9kaXY+XG5cbiAgICAgICAgICAgIHsgZXJyb3IgJiYgPGRpdiBjbGFzc05hbWU9XCJteF9TcGFjZVJvb21WaWV3X2Vycm9yVGV4dFwiPnsgZXJyb3IgfTwvZGl2PiB9XG5cbiAgICAgICAgICAgIDxTcGFjZUZlZWRiYWNrUHJvbXB0IG9uQ2xpY2s9eygpID0+IG9uRmluaXNoZWQoZmFsc2UpfSAvPlxuXG4gICAgICAgICAgICA8U3BhY2VCYXNpY1NldHRpbmdzXG4gICAgICAgICAgICAgICAgYXZhdGFyVXJsPXthdmF0YXJVcmxGb3JSb29tKHNwYWNlLCA4MCwgODAsIFwiY3JvcFwiKX1cbiAgICAgICAgICAgICAgICBhdmF0YXJEaXNhYmxlZD17YnVzeSB8fCAhY2FuU2V0QXZhdGFyfVxuICAgICAgICAgICAgICAgIHNldEF2YXRhcj17c2V0TmV3QXZhdGFyfVxuICAgICAgICAgICAgICAgIG5hbWU9e25hbWV9XG4gICAgICAgICAgICAgICAgbmFtZURpc2FibGVkPXtidXN5IHx8ICFjYW5TZXROYW1lfVxuICAgICAgICAgICAgICAgIHNldE5hbWU9e3NldE5hbWV9XG4gICAgICAgICAgICAgICAgdG9waWM9e3RvcGljfVxuICAgICAgICAgICAgICAgIHRvcGljRGlzYWJsZWQ9e2J1c3kgfHwgIWNhblNldFRvcGljfVxuICAgICAgICAgICAgICAgIHNldFRvcGljPXtzZXRUb3BpY31cbiAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgeyBfdChcIk1ha2UgdGhpcyBzcGFjZSBwcml2YXRlXCIpIH1cbiAgICAgICAgICAgICAgICA8VG9nZ2xlU3dpdGNoXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2pvaW5SdWxlICE9PSBcInB1YmxpY1wifVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17Y2hlY2tlZCA9PiBzZXRKb2luUnVsZShjaGVja2VkID8gXCJpbnZpdGVcIiA6IFwicHVibGljXCIpfVxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWNhblNldEpvaW5SdWxlfVxuICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXtfdChcIk1ha2UgdGhpcyBzcGFjZSBwcml2YXRlXCIpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPEFjY2Vzc2libGVCdXR0b25cbiAgICAgICAgICAgICAgICBraW5kPVwiZGFuZ2VyXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHREaXNwYXRjaGVyLmRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogXCJsZWF2ZV9yb29tXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICByb29tX2lkOiBzcGFjZS5yb29tSWQsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgeyBfdChcIkxlYXZlIFNwYWNlXCIpIH1cbiAgICAgICAgICAgIDwvQWNjZXNzaWJsZUJ1dHRvbj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteF9TcGFjZVNldHRpbmdzRGlhbG9nX2J1dHRvbnNcIj5cbiAgICAgICAgICAgICAgICA8QWNjZXNzaWJsZUJ1dHRvbiBvbkNsaWNrPXsoKSA9PiBNb2RhbC5jcmVhdGVEaWFsb2coRGV2dG9vbHNEaWFsb2csIHtyb29tSWQ6IHNwYWNlLnJvb21JZH0pfT5cbiAgICAgICAgICAgICAgICAgICAgeyBfdChcIlZpZXcgZGV2IHRvb2xzXCIpIH1cbiAgICAgICAgICAgICAgICA8L0FjY2Vzc2libGVCdXR0b24+XG4gICAgICAgICAgICAgICAgPEFjY2Vzc2libGVCdXR0b24gb25DbGljaz17b25GaW5pc2hlZH0gZGlzYWJsZWQ9e2J1c3l9IGtpbmQ9XCJsaW5rXCI+XG4gICAgICAgICAgICAgICAgICAgIHsgX3QoXCJDYW5jZWxcIikgfVxuICAgICAgICAgICAgICAgIDwvQWNjZXNzaWJsZUJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8QWNjZXNzaWJsZUJ1dHRvbiBvbkNsaWNrPXtvblNhdmV9IGRpc2FibGVkPXtidXN5fSBraW5kPVwicHJpbWFyeVwiPlxuICAgICAgICAgICAgICAgICAgICB7IGJ1c3kgPyBfdChcIlNhdmluZy4uLlwiKSA6IF90KFwiU2F2ZSBDaGFuZ2VzXCIpIH1cbiAgICAgICAgICAgICAgICA8L0FjY2Vzc2libGVCdXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9CYXNlRGlhbG9nPjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFNwYWNlU2V0dGluZ3NEaWFsb2c7XG5cbiJdfQ==