matrix-react-sdk
Version:
SDK for matrix.org using React
173 lines (140 loc) • 21.4 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _react = _interopRequireDefault(require("react"));
var _GroupFilterOrderStore = _interopRequireDefault(require("../../stores/GroupFilterOrderStore"));
var _GroupActions = _interopRequireDefault(require("../../actions/GroupActions"));
var sdk = _interopRequireWildcard(require("../../index"));
var _dispatcher = _interopRequireDefault(require("../../dispatcher/dispatcher"));
var _languageHandler = require("../../languageHandler");
var _reactBeautifulDnd = require("react-beautiful-dnd");
var _classnames = _interopRequireDefault(require("classnames"));
var _MatrixClientContext = _interopRequireDefault(require("../../contexts/MatrixClientContext"));
var _AutoHideScrollbar = _interopRequireDefault(require("./AutoHideScrollbar"));
var _SettingsStore = _interopRequireDefault(require("../../settings/SettingsStore"));
var _UserTagTile = _interopRequireDefault(require("../views/elements/UserTagTile"));
var _replaceableComponent = require("../../utils/replaceableComponent");
var _dec, _class, _class2, _temp;
let GroupFilterPanel = (_dec = (0, _replaceableComponent.replaceableComponent)("structures.GroupFilterPanel"), _dec(_class = (_temp = _class2 = class GroupFilterPanel extends _react.default.Component {
constructor(...args) {
super(...args);
(0, _defineProperty2.default)(this, "state", {
orderedTags: [],
selectedTags: []
});
(0, _defineProperty2.default)(this, "_onGroupMyMembership", () => {
if (this.unmounted) return;
_dispatcher.default.dispatch(_GroupActions.default.fetchJoinedGroups(this.context));
});
(0, _defineProperty2.default)(this, "_onClientSync", (syncState, prevState) => {
// Consider the client reconnected if there is no error with syncing.
// This means the state could be RECONNECTING, SYNCING, PREPARED or CATCHUP.
const reconnected = syncState !== "ERROR" && prevState !== syncState;
if (reconnected) {
// Load joined groups
_dispatcher.default.dispatch(_GroupActions.default.fetchJoinedGroups(this.context));
}
});
(0, _defineProperty2.default)(this, "onMouseDown", e => {
// only dispatch if its not a no-op
if (this.state.selectedTags.length > 0) {
_dispatcher.default.dispatch({
action: 'deselect_tags'
});
}
});
(0, _defineProperty2.default)(this, "onClearFilterClick", ev => {
_dispatcher.default.dispatch({
action: 'deselect_tags'
});
});
}
componentDidMount() {
this.unmounted = false;
this.context.on("Group.myMembership", this._onGroupMyMembership);
this.context.on("sync", this._onClientSync);
this._groupFilterOrderStoreToken = _GroupFilterOrderStore.default.addListener(() => {
if (this.unmounted) {
return;
}
this.setState({
orderedTags: _GroupFilterOrderStore.default.getOrderedTags() || [],
selectedTags: _GroupFilterOrderStore.default.getSelectedTags()
});
}); // This could be done by anything with a matrix client
_dispatcher.default.dispatch(_GroupActions.default.fetchJoinedGroups(this.context));
}
componentWillUnmount() {
this.unmounted = true;
this.context.removeListener("Group.myMembership", this._onGroupMyMembership);
this.context.removeListener("sync", this._onClientSync);
if (this._groupFilterOrderStoreToken) {
this._groupFilterOrderStoreToken.remove();
}
}
renderGlobalIcon() {
if (!_SettingsStore.default.getValue("feature_communities_v2_prototypes")) return null;
return /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_UserTagTile.default, null), /*#__PURE__*/_react.default.createElement("hr", {
className: "mx_GroupFilterPanel_divider"
}));
}
render() {
const DNDTagTile = sdk.getComponent('elements.DNDTagTile');
const ActionButton = sdk.getComponent('elements.ActionButton');
const tags = this.state.orderedTags.map((tag, index) => {
return /*#__PURE__*/_react.default.createElement(DNDTagTile, {
key: tag,
tag: tag,
index: index,
selected: this.state.selectedTags.includes(tag)
});
});
const itemsSelected = this.state.selectedTags.length > 0;
const classes = (0, _classnames.default)('mx_GroupFilterPanel', {
mx_GroupFilterPanel_items_selected: itemsSelected
});
let betaDot;
if (_SettingsStore.default.getBetaInfo("feature_spaces") && !localStorage.getItem("mx_seenSpacesBeta")) {
betaDot = /*#__PURE__*/_react.default.createElement("div", {
className: "mx_BetaDot"
});
}
let createButton = /*#__PURE__*/_react.default.createElement(ActionButton, {
tooltip: true,
label: (0, _languageHandler._t)("Communities"),
action: "toggle_my_groups",
className: "mx_TagTile mx_TagTile_plus"
}, betaDot);
if (_SettingsStore.default.getValue("feature_communities_v2_prototypes")) {
createButton = /*#__PURE__*/_react.default.createElement(ActionButton, {
tooltip: true,
label: (0, _languageHandler._t)("Create community"),
action: "view_create_group",
className: "mx_TagTile mx_TagTile_plus"
});
}
return /*#__PURE__*/_react.default.createElement("div", {
className: classes,
onClick: this.onClearFilterClick
}, /*#__PURE__*/_react.default.createElement(_AutoHideScrollbar.default, {
className: "mx_GroupFilterPanel_scroller" // XXX: Use onMouseDown as a workaround for https://github.com/atlassian/react-beautiful-dnd/issues/273
// instead of onClick. Otherwise we experience https://github.com/vector-im/element-web/issues/6253
,
onMouseDown: this.onMouseDown
}, /*#__PURE__*/_react.default.createElement(_reactBeautifulDnd.Droppable, {
droppableId: "tag-panel-droppable",
type: "draggable-TagTile"
}, (provided, snapshot) => /*#__PURE__*/_react.default.createElement("div", {
className: "mx_GroupFilterPanel_tagTileContainer",
ref: provided.innerRef
}, this.renderGlobalIcon(), tags, /*#__PURE__*/_react.default.createElement("div", null, createButton), provided.placeholder))));
}
}, (0, _defineProperty2.default)(_class2, "contextType", _MatrixClientContext.default), _temp)) || _class);
var _default = GroupFilterPanel;
exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3N0cnVjdHVyZXMvR3JvdXBGaWx0ZXJQYW5lbC5qcyJdLCJuYW1lcyI6WyJHcm91cEZpbHRlclBhbmVsIiwiUmVhY3QiLCJDb21wb25lbnQiLCJvcmRlcmVkVGFncyIsInNlbGVjdGVkVGFncyIsInVubW91bnRlZCIsImRpcyIsImRpc3BhdGNoIiwiR3JvdXBBY3Rpb25zIiwiZmV0Y2hKb2luZWRHcm91cHMiLCJjb250ZXh0Iiwic3luY1N0YXRlIiwicHJldlN0YXRlIiwicmVjb25uZWN0ZWQiLCJlIiwic3RhdGUiLCJsZW5ndGgiLCJhY3Rpb24iLCJldiIsImNvbXBvbmVudERpZE1vdW50Iiwib24iLCJfb25Hcm91cE15TWVtYmVyc2hpcCIsIl9vbkNsaWVudFN5bmMiLCJfZ3JvdXBGaWx0ZXJPcmRlclN0b3JlVG9rZW4iLCJHcm91cEZpbHRlck9yZGVyU3RvcmUiLCJhZGRMaXN0ZW5lciIsInNldFN0YXRlIiwiZ2V0T3JkZXJlZFRhZ3MiLCJnZXRTZWxlY3RlZFRhZ3MiLCJjb21wb25lbnRXaWxsVW5tb3VudCIsInJlbW92ZUxpc3RlbmVyIiwicmVtb3ZlIiwicmVuZGVyR2xvYmFsSWNvbiIsIlNldHRpbmdzU3RvcmUiLCJnZXRWYWx1ZSIsInJlbmRlciIsIkRORFRhZ1RpbGUiLCJzZGsiLCJnZXRDb21wb25lbnQiLCJBY3Rpb25CdXR0b24iLCJ0YWdzIiwibWFwIiwidGFnIiwiaW5kZXgiLCJpbmNsdWRlcyIsIml0ZW1zU2VsZWN0ZWQiLCJjbGFzc2VzIiwibXhfR3JvdXBGaWx0ZXJQYW5lbF9pdGVtc19zZWxlY3RlZCIsImJldGFEb3QiLCJnZXRCZXRhSW5mbyIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJjcmVhdGVCdXR0b24iLCJvbkNsZWFyRmlsdGVyQ2xpY2siLCJvbk1vdXNlRG93biIsInByb3ZpZGVkIiwic25hcHNob3QiLCJpbm5lclJlZiIsInBsYWNlaG9sZGVyIiwiTWF0cml4Q2xpZW50Q29u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LEVBQWlFO0FBQzdEa0IsTUFBQUEsWUFBWSxnQkFDUiw2QkFBQyxZQUFEO0FBQ0ksUUFBQSxPQUFPLE1BRFg7QUFFSSxRQUFBLEtBQUssRUFBRSx5QkFBRyxrQkFBSCxDQUZYO0FBR0ksUUFBQSxNQUFNLEVBQUMsbUJBSFg7QUFJSSxRQUFBLFNBQVMsRUFBQztBQUpkLFFBREo7QUFPSDs7QUFFRCx3QkFBTztBQUFLLE1BQUEsU0FBUyxFQUFFTixPQUFoQjtBQUF5QixNQUFBLE9BQU8sRUFBRSxLQUFLTztBQUF2QyxvQkFDSCw2QkFBQywwQkFBRDtBQUNJLE1BQUEsU0FBUyxFQUFDLDhCQURkLENBRUk7QUFDQTtBQUhKO0FBSUksTUFBQSxXQUFXLEVBQUUsS0FBS0M7QUFKdEIsb0JBTUksNkJBQUMsNEJBQUQ7QUFDSSxNQUFBLFdBQVcsRUFBQyxxQkFEaEI7QUFFSSxNQUFBLElBQUksRUFBQztBQUZULE9BSU0sQ0FBQ0MsUUFBRCxFQUFXQyxRQUFYLGtCQUNFO0FBQ0ksTUFBQSxTQUFTLEVBQUMsc0NBRGQ7QUFFSSxNQUFBLEdBQUcsRUFBRUQsUUFBUSxDQUFDRTtBQUZsQixPQUlNLEtBQUt6QixnQkFBTCxFQUpOLEVBS01RLElBTE4sZUFNSSwwQ0FDS1ksWUFETCxDQU5KLEVBU01HLFFBQVEsQ0FBQ0csV0FUZixDQUxSLENBTkosQ0FERyxDQUFQO0FBMkJIOztBQTlJMEMsQyx3REFDdEJDLDRCO2VBK0lWM0QsZ0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMTcsIDIwMTggTmV3IFZlY3RvciBMdGQuXG5Db3B5cmlnaHQgMjAyMCBUaGUgTWF0cml4Lm9yZyBGb3VuZGF0aW9uIEMuSS5DLlxuXG5MaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xueW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG5TZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG5saW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgR3JvdXBGaWx0ZXJPcmRlclN0b3JlIGZyb20gJy4uLy4uL3N0b3Jlcy9Hcm91cEZpbHRlck9yZGVyU3RvcmUnO1xuXG5pbXBvcnQgR3JvdXBBY3Rpb25zIGZyb20gJy4uLy4uL2FjdGlvbnMvR3JvdXBBY3Rpb25zJztcblxuaW1wb3J0ICogYXMgc2RrIGZyb20gJy4uLy4uL2luZGV4JztcbmltcG9ydCBkaXMgZnJvbSAnLi4vLi4vZGlzcGF0Y2hlci9kaXNwYXRjaGVyJztcbmltcG9ydCB7IF90IH0gZnJvbSAnLi4vLi4vbGFuZ3VhZ2VIYW5kbGVyJztcblxuaW1wb3J0IHsgRHJvcHBhYmxlIH0gZnJvbSAncmVhY3QtYmVhdXRpZnVsLWRuZCc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBNYXRyaXhDbGllbnRDb250ZXh0IGZyb20gXCIuLi8uLi9jb250ZXh0cy9NYXRyaXhDbGllbnRDb250ZXh0XCI7XG5pbXBvcnQgQXV0b0hpZGVTY3JvbGxiYXIgZnJvbSBcIi4vQXV0b0hpZGVTY3JvbGxiYXJcIjtcbmltcG9ydCBTZXR0aW5nc1N0b3JlIGZyb20gXCIuLi8uLi9zZXR0aW5ncy9TZXR0aW5nc1N0b3JlXCI7XG5pbXBvcnQgVXNlclRhZ1RpbGUgZnJvbSBcIi4uL3ZpZXdzL2VsZW1lbnRzL1VzZXJUYWdUaWxlXCI7XG5pbXBvcnQge3JlcGxhY2VhYmxlQ29tcG9uZW50fSBmcm9tIFwiLi4vLi4vdXRpbHMvcmVwbGFjZWFibGVDb21wb25lbnRcIjtcblxuQHJlcGxhY2VhYmxlQ29tcG9uZW50KFwic3RydWN0dXJlcy5Hcm91cEZpbHRlclBhbmVsXCIpXG5jbGFzcyBHcm91cEZpbHRlclBhbmVsIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICBzdGF0aWMgY29udGV4dFR5cGUgPSBNYXRyaXhDbGllbnRDb250ZXh0O1xuXG4gICAgc3RhdGUgPSB7XG4gICAgICAgIG9yZGVyZWRUYWdzOiBbXSxcbiAgICAgICAgc2VsZWN0ZWRUYWdzOiBbXSxcbiAgICB9O1xuXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICAgIHRoaXMudW5tb3VudGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY29udGV4dC5vbihcIkdyb3VwLm15TWVtYmVyc2hpcFwiLCB0aGlzLl9vbkdyb3VwTXlNZW1iZXJzaGlwKTtcbiAgICAgICAgdGhpcy5jb250ZXh0Lm9uKFwic3luY1wiLCB0aGlzLl9vbkNsaWVudFN5bmMpO1xuXG4gICAgICAgIHRoaXMuX2dyb3VwRmlsdGVyT3JkZXJTdG9yZVRva2VuID0gR3JvdXBGaWx0ZXJPcmRlclN0b3JlLmFkZExpc3RlbmVyKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnVubW91bnRlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgIG9yZGVyZWRUYWdzOiBHcm91cEZpbHRlck9yZGVyU3RvcmUuZ2V0T3JkZXJlZFRhZ3MoKSB8fCBbXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRhZ3M6IEdyb3VwRmlsdGVyT3JkZXJTdG9yZS5nZXRTZWxlY3RlZFRhZ3MoKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gVGhpcyBjb3VsZCBiZSBkb25lIGJ5IGFueXRoaW5nIHdpdGggYSBtYXRyaXggY2xpZW50XG4gICAgICAgIGRpcy5kaXNwYXRjaChHcm91cEFjdGlvbnMuZmV0Y2hKb2luZWRHcm91cHModGhpcy5jb250ZXh0KSk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICAgIHRoaXMudW5tb3VudGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jb250ZXh0LnJlbW92ZUxpc3RlbmVyKFwiR3JvdXAubXlNZW1iZXJzaGlwXCIsIHRoaXMuX29uR3JvdXBNeU1lbWJlcnNoaXApO1xuICAgICAgICB0aGlzLmNvbnRleHQucmVtb3ZlTGlzdGVuZXIoXCJzeW5jXCIsIHRoaXMuX29uQ2xpZW50U3luYyk7XG4gICAgICAgIGlmICh0aGlzLl9ncm91cEZpbHRlck9yZGVyU3RvcmVUb2tlbikge1xuICAgICAgICAgICAgdGhpcy5fZ3JvdXBGaWx0ZXJPcmRlclN0b3JlVG9rZW4ucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfb25Hcm91cE15TWVtYmVyc2hpcCA9ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMudW5tb3VudGVkKSByZXR1cm47XG4gICAgICAgIGRpcy5kaXNwYXRjaChHcm91cEFjdGlvbnMuZmV0Y2hKb2luZWRHcm91cHModGhpcy5jb250ZXh0KSk7XG4gICAgfTtcblxuICAgIF9vbkNsaWVudFN5bmMgPSAoc3luY1N0YXRlLCBwcmV2U3RhdGUpID0+IHtcbiAgICAgICAgLy8gQ29uc2lkZXIgdGhlIGNsaWVudCByZWNvbm5lY3RlZCBpZiB0aGVyZSBpcyBubyBlcnJvciB3aXRoIHN5bmNpbmcuXG4gICAgICAgIC8vIFRoaXMgbWVhbnMgdGhlIHN0YXRlIGNvdWxkIGJlIFJFQ09OTkVDVElORywgU1lOQ0lORywgUFJFUEFSRUQgb3IgQ0FUQ0hVUC5cbiAgICAgICAgY29uc3QgcmVjb25uZWN0ZWQgPSBzeW5jU3RhdGUgIT09IFwiRVJST1JcIiAmJiBwcmV2U3RhdGUgIT09IHN5bmNTdGF0ZTtcbiAgICAgICAgaWYgKHJlY29ubmVjdGVkKSB7XG4gICAgICAgICAgICAvLyBMb2FkIGpvaW5lZCBncm91cHNcbiAgICAgICAgICAgIGRpcy5kaXNwYXRjaChHcm91cEFjdGlvbnMuZmV0Y2hKb2luZWRHcm91cHModGhpcy5jb250ZXh0KSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgb25Nb3VzZURvd24gPSBlID0+IHtcbiAgICAgICAgLy8gb25seSBkaXNwYXRjaCBpZiBpdHMgbm90IGEgbm8tb3BcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUuc2VsZWN0ZWRUYWdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGRpcy5kaXNwYXRjaCh7YWN0aW9uOiAnZGVzZWxlY3RfdGFncyd9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBvbkNsZWFyRmlsdGVyQ2xpY2sgPSBldiA9PiB7XG4gICAgICAgIGRpcy5kaXNwYXRjaCh7YWN0aW9uOiAnZGVzZWxlY3RfdGFncyd9KTtcbiAgICB9O1xuXG4gICAgcmVuZGVyR2xvYmFsSWNvbigpIHtcbiAgICAgICAgaWYgKCFTZXR0aW5nc1N0b3JlLmdldFZhbHVlKFwiZmVhdHVyZV9jb21tdW5pdGllc192Ml9wcm90b3R5cGVzXCIpKSByZXR1cm4gbnVsbDtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8VXNlclRhZ1RpbGUgLz5cbiAgICAgICAgICAgICAgICA8aHIgY2xhc3NOYW1lPVwibXhfR3JvdXBGaWx0ZXJQYW5lbF9kaXZpZGVyXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3QgRE5EVGFnVGlsZSA9IHNkay5nZXRDb21wb25lbnQoJ2VsZW1lbnRzLkRORFRhZ1RpbGUnKTtcbiAgICAgICAgY29uc3QgQWN0aW9uQnV0dG9uID0gc2RrLmdldENvbXBvbmVudCgnZWxlbWVudHMuQWN0aW9uQnV0dG9uJyk7XG5cbiAgICAgICAgY29uc3QgdGFncyA9IHRoaXMuc3RhdGUub3JkZXJlZFRhZ3MubWFwKCh0YWcsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gPERORFRhZ1RpbGVcbiAgICAgICAgICAgICAgICBrZXk9e3RhZ31cbiAgICAgICAgICAgICAgICB0YWc9e3RhZ31cbiAgICAgICAgICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQ9e3RoaXMuc3RhdGUuc2VsZWN0ZWRUYWdzLmluY2x1ZGVzKHRhZyl9XG4gICAgICAgICAgICAvPjtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgaXRlbXNTZWxlY3RlZCA9IHRoaXMuc3RhdGUuc2VsZWN0ZWRUYWdzLmxlbmd0aCA+IDA7XG4gICAgICAgIGNvbnN0IGNsYXNzZXMgPSBjbGFzc05hbWVzKCdteF9Hcm91cEZpbHRlclBhbmVsJywge1xuICAgICAgICAgICAgbXhfR3JvdXBGaWx0ZXJQYW5lbF9pdGVtc19zZWxlY3RlZDogaXRlbXNTZWxlY3RlZCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbGV0IGJldGFEb3Q7XG4gICAgICAgIGlmIChTZXR0aW5nc1N0b3JlLmdldEJldGFJbmZvKFwiZmVhdHVyZV9zcGFjZXNcIikgJiYgIWxvY2FsU3RvcmFnZS5nZXRJdGVtKFwibXhfc2VlblNwYWNlc0JldGFcIikpIHtcbiAgICAgICAgICAgIGJldGFEb3QgPSA8ZGl2IGNsYXNzTmFtZT1cIm14X0JldGFEb3RcIiAvPjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjcmVhdGVCdXR0b24gPSAoXG4gICAgICAgICAgICA8QWN0aW9uQnV0dG9uXG4gICAgICAgICAgICAgICAgdG9vbHRpcFxuICAgICAgICAgICAgICAgIGxhYmVsPXtfdChcIkNvbW11bml0aWVzXCIpfVxuICAgICAgICAgICAgICAgIGFjdGlvbj1cInRvZ2dsZV9teV9ncm91cHNcIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm14X1RhZ1RpbGUgbXhfVGFnVGlsZV9wbHVzXCI+XG4gICAgICAgICAgICAgICAgeyBiZXRhRG90IH1cbiAgICAgICAgICAgIDwvQWN0aW9uQnV0dG9uPlxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChTZXR0aW5nc1N0b3JlLmdldFZhbHVlKFwiZmVhdHVyZV9jb21tdW5pdGllc192Ml9wcm90b3R5cGVzXCIpKSB7XG4gICAgICAgICAgICBjcmVhdGVCdXR0b24gPSAoXG4gICAgICAgICAgICAgICAgPEFjdGlvbkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0b29sdGlwXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsPXtfdChcIkNyZWF0ZSBjb21tdW5pdHlcIil9XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbj1cInZpZXdfY3JlYXRlX2dyb3VwXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXhfVGFnVGlsZSBteF9UYWdUaWxlX3BsdXNcIiAvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17Y2xhc3Nlc30gb25DbGljaz17dGhpcy5vbkNsZWFyRmlsdGVyQ2xpY2t9PlxuICAgICAgICAgICAgPEF1dG9IaWRlU2Nyb2xsYmFyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXhfR3JvdXBGaWx0ZXJQYW5lbF9zY3JvbGxlclwiXG4gICAgICAgICAgICAgICAgLy8gWFhYOiBVc2Ugb25Nb3VzZURvd24gYXMgYSB3b3JrYXJvdW5kIGZvciBodHRwczovL2dpdGh1Yi5jb20vYXRsYXNzaWFuL3JlYWN0LWJlYXV0aWZ1bC1kbmQvaXNzdWVzLzI3M1xuICAgICAgICAgICAgICAgIC8vIGluc3RlYWQgb2Ygb25DbGljay4gT3RoZXJ3aXNlIHdlIGV4cGVyaWVuY2UgaHR0cHM6Ly9naXRodWIuY29tL3ZlY3Rvci1pbS9lbGVtZW50LXdlYi9pc3N1ZXMvNjI1M1xuICAgICAgICAgICAgICAgIG9uTW91c2VEb3duPXt0aGlzLm9uTW91c2VEb3dufVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxEcm9wcGFibGVcbiAgICAgICAgICAgICAgICAgICAgZHJvcHBhYmxlSWQ9XCJ0YWctcGFuZWwtZHJvcHBhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImRyYWdnYWJsZS1UYWdUaWxlXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHsgKHByb3ZpZGVkLCBzbmFwc2hvdCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm14X0dyb3VwRmlsdGVyUGFuZWxfdGFnVGlsZUNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmPXtwcm92aWRlZC5pbm5lclJlZn1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHRoaXMucmVuZGVyR2xvYmFsSWNvbigpIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHRhZ3MgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjcmVhdGVCdXR0b259XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBwcm92aWRlZC5wbGFjZWhvbGRlciB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgKSB9XG4gICAgICAgICAgICAgICAgPC9Ecm9wcGFibGU+XG4gICAgICAgICAgICA8L0F1dG9IaWRlU2Nyb2xsYmFyPlxuICAgICAgICA8L2Rpdj47XG4gICAgfVxufVxuZXhwb3J0IGRlZmF1bHQgR3JvdXBGaWx0ZXJQYW5lbDtcbiJdfQ==