UNPKG

matrix-react-sdk

Version:
161 lines (129 loc) 15.7 kB
"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 _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireDefault(require("react")); var _languageHandler = require("../languageHandler"); var _AutocompleteProvider = _interopRequireDefault(require("./AutocompleteProvider")); var _MatrixClientPeg = require("../MatrixClientPeg"); var _QueryMatcher = _interopRequireDefault(require("./QueryMatcher")); var _Components = require("./Components"); var sdk = _interopRequireWildcard(require("../index")); var _lodash = require("lodash"); var _Permalinks = require("../utils/permalinks/Permalinks"); var _FlairStore = _interopRequireDefault(require("../stores/FlairStore")); var _Media = require("../customisations/Media"); /* Copyright 2018 New Vector Ltd Copyright 2018 Michael Telatynski <7t3chguy@gmail.com> 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 COMMUNITY_REGEX = /\B\+\S*/g; function score(query, space) { const index = space.indexOf(query); if (index === -1) { return Infinity; } else { return index; } } class CommunityProvider extends _AutocompleteProvider.default { constructor() { super(COMMUNITY_REGEX); (0, _defineProperty2.default)(this, "matcher", void 0); this.matcher = new _QueryMatcher.default([], { keys: ['groupId', 'name', 'shortDescription'] }); } async getCompletions(query /*: string*/ , selection /*: ISelectionRange*/ , force = false, limit = -1) /*: Promise<ICompletion[]>*/ { const BaseAvatar = sdk.getComponent('views.avatars.BaseAvatar'); // Disable autocompletions when composing commands because of various issues // (see https://github.com/vector-im/element-web/issues/4762) if (/^(\/join|\/leave)/.test(query)) { return []; } const cli = _MatrixClientPeg.MatrixClientPeg.get(); let completions = []; const { command, range } = this.getCurrentCommand(query, selection, force); if (command) { const joinedGroups = cli.getGroups().filter(({ myMembership }) => myMembership === 'join'); const groups = await Promise.all(joinedGroups.map(async ({ groupId }) => { try { return _FlairStore.default.getGroupProfileCached(cli, groupId); } catch (e) { // if FlairStore failed, fall back to just groupId return Promise.resolve({ name: '', groupId, avatarUrl: '', shortDescription: '' }); } })); this.matcher.setObjects(groups); const matchedString = command[0]; completions = this.matcher.match(matchedString, limit); completions = (0, _lodash.sortBy)(completions, [c => score(matchedString, c.groupId), c => c.groupId.length]).map(({ avatarUrl, groupId, name }) => ({ completion: groupId, suffix: ' ', type: "community", href: (0, _Permalinks.makeGroupPermalink)(groupId), component: /*#__PURE__*/_react.default.createElement(_Components.PillCompletion, { title: name, description: groupId }, /*#__PURE__*/_react.default.createElement(BaseAvatar, { name: name || groupId, width: 24, height: 24, url: avatarUrl ? (0, _Media.mediaFromMxc)(avatarUrl).getSquareThumbnailHttp(24) : null })), range })).slice(0, 4); } return completions; } getName() { return '💬 ' + (0, _languageHandler._t)('Communities'); } renderCompletions(completions /*: React.ReactNode[]*/ ) /*: React.ReactNode*/ { return /*#__PURE__*/_react.default.createElement("div", { className: "mx_Autocomplete_Completion_container_pill mx_Autocomplete_Completion_container_truncate", role: "listbox", "aria-label": (0, _languageHandler._t)("Community Autocomplete") }, completions); } } exports.default = CommunityProvider; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdXRvY29tcGxldGUvQ29tbXVuaXR5UHJvdmlkZXIudHN4Il0sIm5hbWVzIjpbIkNPTU1VTklUWV9SRUdFWCIsInNjb3JlIiwicXVlcnkiLCJzcGFjZSIsImluZGV4IiwiaW5kZXhPZiIsIkluZmluaXR5IiwiQ29tbXVuaXR5UHJvdmlkZXIiLCJBdXRvY29tcGxldGVQcm92aWRlciIsImNvbnN0cnVjdG9yIiwibWF0Y2hlciIsIlF1ZXJ5TWF0Y2hlciIsImtleXMiLCJnZXRDb21wbGV0aW9ucyIsInNlbGVjdGlvbiIsImZvcmNlIiwibGltaXQiLCJCYXNlQXZhdGFyIiwic2RrIiwiZ2V0Q29tcG9uZW50IiwidGVzdCIsImNsaSIsIk1hdHJpeENsaWVudFBlZyIsImdldCIsImNvbXBsZXRpb25zIiwiY29tbWFuZCIsInJhbmdlIiwiZ2V0Q3VycmVudENvbW1hbmQiLCJqb2luZWRHcm91cHMiLCJnZXRHcm91cHMiLCJmaWx0ZXIiLCJteU1lbWJlcnNoaXAiLCJncm91cHMiLCJQcm9taXNlIiwiYWxsIiwibWFwIiwiZ3JvdXBJZCIsIkZsYWlyU3RvcmUiLCJnZXRHcm91cFByb2ZpbGVDYWNoZWQiLCJlIiwicmVzb2x2ZSIsIm5hbWUiLCJhdmF0YXJVcmwiLCJzaG9ydERlc2NyaXB0aW9uIiwic2V0T2JqZWN0cyIsIm1hdGNoZWRTdHJpbmciLCJtYXRjaCIsImMiLCJsZW5ndGgiLCJjb21wbGV0aW9uIiwic3VmZml4IiwidHlwZSIsImhyZWYiLCJjb21wb25lbnQiLCJnZXRTcXVhcmVUaHVtYm5haWxIdHRwIiwic2xpY2UiLCJnZXROYW1lIiwicmVuZGVyQ29tcGxldGlvbnMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFpQkE7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBZ0JBLE1BQU1BLGVBQWUsR0FBRyxVQUF4Qjs7QUFFQSxTQUFTQyxLQUFULENBQWVDLEtBQWYsRUFBc0JDLEtBQXRCLEVBQTZCO0FBQ3pCLFFBQU1DLEtBQUssR0FBR0QsS0FBSyxDQUFDRSxPQUFOLENBQWNILEtBQWQsQ0FBZDs7QUFDQSxNQUFJRSxLQUFLLEtBQUssQ0FBQyxDQUFmLEVBQWtCO0FBQ2QsV0FBT0UsUUFBUDtBQUNILEdBRkQsTUFFTztBQUNILFdBQU9GLEtBQVA7QUFDSDtBQUNKOztBQUVjLE1BQU1HLGlCQUFOLFNBQWdDQyw2QkFBaEMsQ0FBcUQ7QUFHaEVDLEVBQUFBLFdBQVcsR0FBRztBQUNWLFVBQU1ULGVBQU47QUFEVTtBQUVWLFNBQUtVLE9BQUwsR0FBZSxJQUFJQyxxQkFBSixDQUFpQixFQUFqQixFQUFxQjtBQUNoQ0MsTUFBQUEsSUFBSSxFQUFFLENBQUMsU0FBRCxFQUFZLE1BQVosRUFBb0Isa0JBQXBCO0FBRDBCLEtBQXJCLENBQWY7QUFHSDs7QUFFRCxRQUFNQyxjQUFOLENBQ0lYO0FBREo7QUFBQSxJQUVJWTtBQUZKO0FBQUEsSUFHSUMsS0FBSyxHQUFHLEtBSFosRUFJSUMsS0FBSyxHQUFHLENBQUMsQ0FKYjtBQUFBO0FBSzBCO0FBQ3RCLFVBQU1DLFVBQVUsR0FBR0MsR0FBRyxDQUFDQyxZQUFKLENBQWlCLDBCQUFqQixDQUFuQixDQURzQixDQUd0QjtBQUNBOztBQUNBLFFBQUksb0JBQW9CQyxJQUFwQixDQUF5QmxCLEtBQXpCLENBQUosRUFBcUM7QUFDakMsYUFBTyxFQUFQO0FBQ0g7O0FBRUQsVUFBTW1CLEdBQUcsR0FBR0MsaUNBQWdCQyxHQUFoQixFQUFaOztBQUNBLFFBQUlDLFdBQVcsR0FBRyxFQUFsQjtBQUNBLFVBQU07QUFBQ0MsTUFBQUEsT0FBRDtBQUFVQyxNQUFBQTtBQUFWLFFBQW1CLEtBQUtDLGlCQUFMLENBQXVCekIsS0FBdkIsRUFBOEJZLFNBQTlCLEVBQXlDQyxLQUF6QyxDQUF6Qjs7QUFDQSxRQUFJVSxPQUFKLEVBQWE7QUFDVCxZQUFNRyxZQUFZLEdBQUdQLEdBQUcsQ0FBQ1EsU0FBSixHQUFnQkMsTUFBaEIsQ0FBdUIsQ0FBQztBQUFDQyxRQUFBQTtBQUFELE9BQUQsS0FBb0JBLFlBQVksS0FBSyxNQUE1RCxDQUFyQjtBQUVBLFlBQU1DLE1BQU0sR0FBSSxNQUFNQyxPQUFPLENBQUNDLEdBQVIsQ0FBWU4sWUFBWSxDQUFDTyxHQUFiLENBQWlCLE9BQU87QUFBQ0MsUUFBQUE7QUFBRCxPQUFQLEtBQXFCO0FBQ3BFLFlBQUk7QUFDQSxpQkFBT0Msb0JBQVdDLHFCQUFYLENBQWlDakIsR0FBakMsRUFBc0NlLE9BQXRDLENBQVA7QUFDSCxTQUZELENBRUUsT0FBT0csQ0FBUCxFQUFVO0FBQUU7QUFDVixpQkFBT04sT0FBTyxDQUFDTyxPQUFSLENBQWdCO0FBQ25CQyxZQUFBQSxJQUFJLEVBQUUsRUFEYTtBQUVuQkwsWUFBQUEsT0FGbUI7QUFHbkJNLFlBQUFBLFNBQVMsRUFBRSxFQUhRO0FBSW5CQyxZQUFBQSxnQkFBZ0IsRUFBRTtBQUpDLFdBQWhCLENBQVA7QUFNSDtBQUNKLE9BWGlDLENBQVosQ0FBdEI7QUFhQSxXQUFLakMsT0FBTCxDQUFha0MsVUFBYixDQUF3QlosTUFBeEI7QUFFQSxZQUFNYSxhQUFhLEdBQUdwQixPQUFPLENBQUMsQ0FBRCxDQUE3QjtBQUNBRCxNQUFBQSxXQUFXLEdBQUcsS0FBS2QsT0FBTCxDQUFhb0MsS0FBYixDQUFtQkQsYUFBbkIsRUFBa0M3QixLQUFsQyxDQUFkO0FBQ0FRLE1BQUFBLFdBQVcsR0FBRyxvQkFBT0EsV0FBUCxFQUFvQixDQUM3QnVCLENBQUQsSUFBTzlDLEtBQUssQ0FBQzRDLGFBQUQsRUFBZ0JFLENBQUMsQ0FBQ1gsT0FBbEIsQ0FEa0IsRUFFN0JXLENBQUQsSUFBT0EsQ0FBQyxDQUFDWCxPQUFGLENBQVVZLE1BRmEsQ0FBcEIsRUFHWGIsR0FIVyxDQUdQLENBQUM7QUFBQ08sUUFBQUEsU0FBRDtBQUFZTixRQUFBQSxPQUFaO0FBQXFCSyxRQUFBQTtBQUFyQixPQUFELE1BQWlDO0FBQ3BDUSxRQUFBQSxVQUFVLEVBQUViLE9BRHdCO0FBRXBDYyxRQUFBQSxNQUFNLEVBQUUsR0FGNEI7QUFHcENDLFFBQUFBLElBQUksRUFBRSxXQUg4QjtBQUlwQ0MsUUFBQUEsSUFBSSxFQUFFLG9DQUFtQmhCLE9BQW5CLENBSjhCO0FBS3BDaUIsUUFBQUEsU0FBUyxlQUNMLDZCQUFDLDBCQUFEO0FBQWdCLFVBQUEsS0FBSyxFQUFFWixJQUF2QjtBQUE2QixVQUFBLFdBQVcsRUFBRUw7QUFBMUMsd0JBQ0ksNkJBQUMsVUFBRDtBQUNJLFVBQUEsSUFBSSxFQUFFSyxJQUFJLElBQUlMLE9BRGxCO0FBRUksVUFBQSxLQUFLLEVBQUUsRUFGWDtBQUdJLFVBQUEsTUFBTSxFQUFFLEVBSFo7QUFJSSxVQUFBLEdBQUcsRUFBRU0sU0FBUyxHQUFHLHlCQUFhQSxTQUFiLEVBQXdCWSxzQkFBeEIsQ0FBK0MsRUFBL0MsQ0FBSCxHQUF3RDtBQUoxRSxVQURKLENBTmdDO0FBY3BDNUIsUUFBQUE7QUFkb0MsT0FBakMsQ0FITyxFQWtCVjZCLEtBbEJVLENBa0JKLENBbEJJLEVBa0JELENBbEJDLENBQWQ7QUFtQkg7O0FBQ0QsV0FBTy9CLFdBQVA7QUFDSDs7QUFFRGdDLEVBQUFBLE9BQU8sR0FBRztBQUNOLFdBQU8sUUFBUSx5QkFBRyxhQUFILENBQWY7QUFDSDs7QUFFREMsRUFBQUEsaUJBQWlCLENBQUNqQztBQUFEO0FBQUE7QUFBQTtBQUFrRDtBQUMvRCx3QkFDSTtBQUNJLE1BQUEsU0FBUyxFQUFDLHlGQURkO0FBRUksTUFBQSxJQUFJLEVBQUMsU0FGVDtBQUdJLG9CQUFZLHlCQUFHLHdCQUFIO0FBSGhCLE9BS01BLFdBTE4sQ0FESjtBQVNIOztBQXBGK0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMTggTmV3IFZlY3RvciBMdGRcbkNvcHlyaWdodCAyMDE4IE1pY2hhZWwgVGVsYXR5bnNraSA8N3QzY2hndXlAZ21haWwuY29tPlxuXG5MaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xueW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG5TZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG5saW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgR3JvdXAgZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL21vZGVscy9ncm91cFwiO1xuaW1wb3J0IHsgX3QgfSBmcm9tICcuLi9sYW5ndWFnZUhhbmRsZXInO1xuaW1wb3J0IEF1dG9jb21wbGV0ZVByb3ZpZGVyIGZyb20gJy4vQXV0b2NvbXBsZXRlUHJvdmlkZXInO1xuaW1wb3J0IHtNYXRyaXhDbGllbnRQZWd9IGZyb20gJy4uL01hdHJpeENsaWVudFBlZyc7XG5pbXBvcnQgUXVlcnlNYXRjaGVyIGZyb20gJy4vUXVlcnlNYXRjaGVyJztcbmltcG9ydCB7UGlsbENvbXBsZXRpb259IGZyb20gJy4vQ29tcG9uZW50cyc7XG5pbXBvcnQgKiBhcyBzZGsgZnJvbSAnLi4vaW5kZXgnO1xuaW1wb3J0IHtzb3J0Qnl9IGZyb20gXCJsb2Rhc2hcIjtcbmltcG9ydCB7bWFrZUdyb3VwUGVybWFsaW5rfSBmcm9tIFwiLi4vdXRpbHMvcGVybWFsaW5rcy9QZXJtYWxpbmtzXCI7XG5pbXBvcnQge0lDb21wbGV0aW9uLCBJU2VsZWN0aW9uUmFuZ2V9IGZyb20gXCIuL0F1dG9jb21wbGV0ZXJcIjtcbmltcG9ydCBGbGFpclN0b3JlIGZyb20gXCIuLi9zdG9yZXMvRmxhaXJTdG9yZVwiO1xuaW1wb3J0IHttZWRpYUZyb21NeGN9IGZyb20gXCIuLi9jdXN0b21pc2F0aW9ucy9NZWRpYVwiO1xuXG5jb25zdCBDT01NVU5JVFlfUkVHRVggPSAvXFxCXFwrXFxTKi9nO1xuXG5mdW5jdGlvbiBzY29yZShxdWVyeSwgc3BhY2UpIHtcbiAgICBjb25zdCBpbmRleCA9IHNwYWNlLmluZGV4T2YocXVlcnkpO1xuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIEluZmluaXR5O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbW11bml0eVByb3ZpZGVyIGV4dGVuZHMgQXV0b2NvbXBsZXRlUHJvdmlkZXIge1xuICAgIG1hdGNoZXI6IFF1ZXJ5TWF0Y2hlcjxHcm91cD47XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoQ09NTVVOSVRZX1JFR0VYKTtcbiAgICAgICAgdGhpcy5tYXRjaGVyID0gbmV3IFF1ZXJ5TWF0Y2hlcihbXSwge1xuICAgICAgICAgICAga2V5czogWydncm91cElkJywgJ25hbWUnLCAnc2hvcnREZXNjcmlwdGlvbiddLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRDb21wbGV0aW9ucyhcbiAgICAgICAgcXVlcnk6IHN0cmluZyxcbiAgICAgICAgc2VsZWN0aW9uOiBJU2VsZWN0aW9uUmFuZ2UsXG4gICAgICAgIGZvcmNlID0gZmFsc2UsXG4gICAgICAgIGxpbWl0ID0gLTEsXG4gICAgKTogUHJvbWlzZTxJQ29tcGxldGlvbltdPiB7XG4gICAgICAgIGNvbnN0IEJhc2VBdmF0YXIgPSBzZGsuZ2V0Q29tcG9uZW50KCd2aWV3cy5hdmF0YXJzLkJhc2VBdmF0YXInKTtcblxuICAgICAgICAvLyBEaXNhYmxlIGF1dG9jb21wbGV0aW9ucyB3aGVuIGNvbXBvc2luZyBjb21tYW5kcyBiZWNhdXNlIG9mIHZhcmlvdXMgaXNzdWVzXG4gICAgICAgIC8vIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL3ZlY3Rvci1pbS9lbGVtZW50LXdlYi9pc3N1ZXMvNDc2MilcbiAgICAgICAgaWYgKC9eKFxcL2pvaW58XFwvbGVhdmUpLy50ZXN0KHF1ZXJ5KSkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2xpID0gTWF0cml4Q2xpZW50UGVnLmdldCgpO1xuICAgICAgICBsZXQgY29tcGxldGlvbnMgPSBbXTtcbiAgICAgICAgY29uc3Qge2NvbW1hbmQsIHJhbmdlfSA9IHRoaXMuZ2V0Q3VycmVudENvbW1hbmQocXVlcnksIHNlbGVjdGlvbiwgZm9yY2UpO1xuICAgICAgICBpZiAoY29tbWFuZCkge1xuICAgICAgICAgICAgY29uc3Qgam9pbmVkR3JvdXBzID0gY2xpLmdldEdyb3VwcygpLmZpbHRlcigoe215TWVtYmVyc2hpcH0pID0+IG15TWVtYmVyc2hpcCA9PT0gJ2pvaW4nKTtcblxuICAgICAgICAgICAgY29uc3QgZ3JvdXBzID0gKGF3YWl0IFByb21pc2UuYWxsKGpvaW5lZEdyb3Vwcy5tYXAoYXN5bmMgKHtncm91cElkfSkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBGbGFpclN0b3JlLmdldEdyb3VwUHJvZmlsZUNhY2hlZChjbGksIGdyb3VwSWQpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgLy8gaWYgRmxhaXJTdG9yZSBmYWlsZWQsIGZhbGwgYmFjayB0byBqdXN0IGdyb3VwSWRcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdmF0YXJVcmw6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnREZXNjcmlwdGlvbjogJycsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKSk7XG5cbiAgICAgICAgICAgIHRoaXMubWF0Y2hlci5zZXRPYmplY3RzKGdyb3Vwcyk7XG5cbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRTdHJpbmcgPSBjb21tYW5kWzBdO1xuICAgICAgICAgICAgY29tcGxldGlvbnMgPSB0aGlzLm1hdGNoZXIubWF0Y2gobWF0Y2hlZFN0cmluZywgbGltaXQpO1xuICAgICAgICAgICAgY29tcGxldGlvbnMgPSBzb3J0QnkoY29tcGxldGlvbnMsIFtcbiAgICAgICAgICAgICAgICAoYykgPT4gc2NvcmUobWF0Y2hlZFN0cmluZywgYy5ncm91cElkKSxcbiAgICAgICAgICAgICAgICAoYykgPT4gYy5ncm91cElkLmxlbmd0aCxcbiAgICAgICAgICAgIF0pLm1hcCgoe2F2YXRhclVybCwgZ3JvdXBJZCwgbmFtZX0pID0+ICh7XG4gICAgICAgICAgICAgICAgY29tcGxldGlvbjogZ3JvdXBJZCxcbiAgICAgICAgICAgICAgICBzdWZmaXg6ICcgJyxcbiAgICAgICAgICAgICAgICB0eXBlOiBcImNvbW11bml0eVwiLFxuICAgICAgICAgICAgICAgIGhyZWY6IG1ha2VHcm91cFBlcm1hbGluayhncm91cElkKSxcbiAgICAgICAgICAgICAgICBjb21wb25lbnQ6IChcbiAgICAgICAgICAgICAgICAgICAgPFBpbGxDb21wbGV0aW9uIHRpdGxlPXtuYW1lfSBkZXNjcmlwdGlvbj17Z3JvdXBJZH0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8QmFzZUF2YXRhclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9e25hbWUgfHwgZ3JvdXBJZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17MjR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PXsyNH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw9e2F2YXRhclVybCA/IG1lZGlhRnJvbU14YyhhdmF0YXJVcmwpLmdldFNxdWFyZVRodW1ibmFpbEh0dHAoMjQpIDogbnVsbH0gLz5cbiAgICAgICAgICAgICAgICAgICAgPC9QaWxsQ29tcGxldGlvbj5cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHJhbmdlLFxuICAgICAgICAgICAgfSkpLnNsaWNlKDAsIDQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wbGV0aW9ucztcbiAgICB9XG5cbiAgICBnZXROYW1lKCkge1xuICAgICAgICByZXR1cm4gJ/CfkqwgJyArIF90KCdDb21tdW5pdGllcycpO1xuICAgIH1cblxuICAgIHJlbmRlckNvbXBsZXRpb25zKGNvbXBsZXRpb25zOiBSZWFjdC5SZWFjdE5vZGVbXSk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXhfQXV0b2NvbXBsZXRlX0NvbXBsZXRpb25fY29udGFpbmVyX3BpbGwgbXhfQXV0b2NvbXBsZXRlX0NvbXBsZXRpb25fY29udGFpbmVyX3RydW5jYXRlXCJcbiAgICAgICAgICAgICAgICByb2xlPVwibGlzdGJveFwiXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17X3QoXCJDb21tdW5pdHkgQXV0b2NvbXBsZXRlXCIpfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHsgY29tcGxldGlvbnMgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG4gICAgfVxufVxuIl19