matrix-react-sdk
Version:
SDK for matrix.org using React
392 lines (372 loc) • 37.2 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.defaultBindingsProvider = void 0;
var _KeyBindingsManager = require("./KeyBindingsManager");
var _Keyboard = require("./Keyboard");
var _SettingsStore = _interopRequireDefault(require("./settings/SettingsStore"));
/*
Copyright 2021 Clemens Zeidler
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 messageComposerBindings = () =>
/*: KeyBinding<MessageComposerAction>[]*/
{
const bindings
/*: KeyBinding<MessageComposerAction>[]*/
= [{
action: _KeyBindingsManager.MessageComposerAction.SelectPrevSendHistory,
keyCombo: {
key: _Keyboard.Key.ARROW_UP,
altKey: true,
ctrlKey: true
}
}, {
action: _KeyBindingsManager.MessageComposerAction.SelectNextSendHistory,
keyCombo: {
key: _Keyboard.Key.ARROW_DOWN,
altKey: true,
ctrlKey: true
}
}, {
action: _KeyBindingsManager.MessageComposerAction.EditPrevMessage,
keyCombo: {
key: _Keyboard.Key.ARROW_UP
}
}, {
action: _KeyBindingsManager.MessageComposerAction.EditNextMessage,
keyCombo: {
key: _Keyboard.Key.ARROW_DOWN
}
}, {
action: _KeyBindingsManager.MessageComposerAction.CancelEditing,
keyCombo: {
key: _Keyboard.Key.ESCAPE
}
}, {
action: _KeyBindingsManager.MessageComposerAction.FormatBold,
keyCombo: {
key: _Keyboard.Key.B,
ctrlOrCmd: true
}
}, {
action: _KeyBindingsManager.MessageComposerAction.FormatItalics,
keyCombo: {
key: _Keyboard.Key.I,
ctrlOrCmd: true
}
}, {
action: _KeyBindingsManager.MessageComposerAction.FormatQuote,
keyCombo: {
key: _Keyboard.Key.GREATER_THAN,
ctrlOrCmd: true,
shiftKey: true
}
}, {
action: _KeyBindingsManager.MessageComposerAction.EditUndo,
keyCombo: {
key: _Keyboard.Key.Z,
ctrlOrCmd: true
}
}, {
action: _KeyBindingsManager.MessageComposerAction.MoveCursorToStart,
keyCombo: {
key: _Keyboard.Key.HOME,
ctrlOrCmd: true
}
}, {
action: _KeyBindingsManager.MessageComposerAction.MoveCursorToEnd,
keyCombo: {
key: _Keyboard.Key.END,
ctrlOrCmd: true
}
}];
if (_Keyboard.isMac) {
bindings.push({
action: _KeyBindingsManager.MessageComposerAction.EditRedo,
keyCombo: {
key: _Keyboard.Key.Z,
ctrlOrCmd: true,
shiftKey: true
}
});
} else {
bindings.push({
action: _KeyBindingsManager.MessageComposerAction.EditRedo,
keyCombo: {
key: _Keyboard.Key.Y,
ctrlOrCmd: true
}
});
}
if (_SettingsStore.default.getValue('MessageComposerInput.ctrlEnterToSend')) {
bindings.push({
action: _KeyBindingsManager.MessageComposerAction.Send,
keyCombo: {
key: _Keyboard.Key.ENTER,
ctrlOrCmd: true
}
});
bindings.push({
action: _KeyBindingsManager.MessageComposerAction.NewLine,
keyCombo: {
key: _Keyboard.Key.ENTER
}
});
} else {
bindings.push({
action: _KeyBindingsManager.MessageComposerAction.Send,
keyCombo: {
key: _Keyboard.Key.ENTER
}
});
bindings.push({
action: _KeyBindingsManager.MessageComposerAction.NewLine,
keyCombo: {
key: _Keyboard.Key.ENTER,
shiftKey: true
}
});
if (_Keyboard.isMac) {
bindings.push({
action: _KeyBindingsManager.MessageComposerAction.NewLine,
keyCombo: {
key: _Keyboard.Key.ENTER,
altKey: true
}
});
}
}
return bindings;
};
const autocompleteBindings = () =>
/*: KeyBinding<AutocompleteAction>[]*/
{
return [{
action: _KeyBindingsManager.AutocompleteAction.CompleteOrNextSelection,
keyCombo: {
key: _Keyboard.Key.TAB
}
}, {
action: _KeyBindingsManager.AutocompleteAction.CompleteOrNextSelection,
keyCombo: {
key: _Keyboard.Key.TAB,
ctrlKey: true
}
}, {
action: _KeyBindingsManager.AutocompleteAction.CompleteOrPrevSelection,
keyCombo: {
key: _Keyboard.Key.TAB,
shiftKey: true
}
}, {
action: _KeyBindingsManager.AutocompleteAction.CompleteOrPrevSelection,
keyCombo: {
key: _Keyboard.Key.TAB,
ctrlKey: true,
shiftKey: true
}
}, {
action: _KeyBindingsManager.AutocompleteAction.Cancel,
keyCombo: {
key: _Keyboard.Key.ESCAPE
}
}, {
action: _KeyBindingsManager.AutocompleteAction.PrevSelection,
keyCombo: {
key: _Keyboard.Key.ARROW_UP
}
}, {
action: _KeyBindingsManager.AutocompleteAction.NextSelection,
keyCombo: {
key: _Keyboard.Key.ARROW_DOWN
}
}];
};
const roomListBindings = () =>
/*: KeyBinding<RoomListAction>[]*/
{
return [{
action: _KeyBindingsManager.RoomListAction.ClearSearch,
keyCombo: {
key: _Keyboard.Key.ESCAPE
}
}, {
action: _KeyBindingsManager.RoomListAction.PrevRoom,
keyCombo: {
key: _Keyboard.Key.ARROW_UP
}
}, {
action: _KeyBindingsManager.RoomListAction.NextRoom,
keyCombo: {
key: _Keyboard.Key.ARROW_DOWN
}
}, {
action: _KeyBindingsManager.RoomListAction.SelectRoom,
keyCombo: {
key: _Keyboard.Key.ENTER
}
}, {
action: _KeyBindingsManager.RoomListAction.CollapseSection,
keyCombo: {
key: _Keyboard.Key.ARROW_LEFT
}
}, {
action: _KeyBindingsManager.RoomListAction.ExpandSection,
keyCombo: {
key: _Keyboard.Key.ARROW_RIGHT
}
}];
};
const roomBindings = () =>
/*: KeyBinding<RoomAction>[]*/
{
const bindings
/*: KeyBinding<RoomAction>[]*/
= [{
action: _KeyBindingsManager.RoomAction.ScrollUp,
keyCombo: {
key: _Keyboard.Key.PAGE_UP
}
}, {
action: _KeyBindingsManager.RoomAction.RoomScrollDown,
keyCombo: {
key: _Keyboard.Key.PAGE_DOWN
}
}, {
action: _KeyBindingsManager.RoomAction.DismissReadMarker,
keyCombo: {
key: _Keyboard.Key.ESCAPE
}
}, {
action: _KeyBindingsManager.RoomAction.JumpToOldestUnread,
keyCombo: {
key: _Keyboard.Key.PAGE_UP,
shiftKey: true
}
}, {
action: _KeyBindingsManager.RoomAction.UploadFile,
keyCombo: {
key: _Keyboard.Key.U,
ctrlOrCmd: true,
shiftKey: true
}
}, {
action: _KeyBindingsManager.RoomAction.JumpToFirstMessage,
keyCombo: {
key: _Keyboard.Key.HOME,
ctrlKey: true
}
}, {
action: _KeyBindingsManager.RoomAction.JumpToLatestMessage,
keyCombo: {
key: _Keyboard.Key.END,
ctrlKey: true
}
}];
if (_SettingsStore.default.getValue('ctrlFForSearch')) {
bindings.push({
action: _KeyBindingsManager.RoomAction.FocusSearch,
keyCombo: {
key: _Keyboard.Key.F,
ctrlOrCmd: true
}
});
}
return bindings;
};
const navigationBindings = () =>
/*: KeyBinding<NavigationAction>[]*/
{
return [{
action: _KeyBindingsManager.NavigationAction.FocusRoomSearch,
keyCombo: {
key: _Keyboard.Key.K,
ctrlOrCmd: true
}
}, {
action: _KeyBindingsManager.NavigationAction.ToggleRoomSidePanel,
keyCombo: {
key: _Keyboard.Key.PERIOD,
ctrlOrCmd: true
}
}, {
action: _KeyBindingsManager.NavigationAction.ToggleUserMenu,
// Ideally this would be CTRL+P for "Profile", but that's
// taken by the print dialog. CTRL+I for "Information"
// was previously chosen but conflicted with italics in
// composer, so CTRL+` it is
keyCombo: {
key: _Keyboard.Key.BACKTICK,
ctrlOrCmd: true
}
}, {
action: _KeyBindingsManager.NavigationAction.ToggleShortCutDialog,
keyCombo: {
key: _Keyboard.Key.SLASH,
ctrlOrCmd: true
}
}, {
action: _KeyBindingsManager.NavigationAction.ToggleShortCutDialog,
keyCombo: {
key: _Keyboard.Key.SLASH,
ctrlOrCmd: true,
shiftKey: true
}
}, {
action: _KeyBindingsManager.NavigationAction.GoToHome,
keyCombo: {
key: _Keyboard.Key.H,
ctrlKey: true,
altKey: !_Keyboard.isMac,
shiftKey: _Keyboard.isMac
}
}, {
action: _KeyBindingsManager.NavigationAction.SelectPrevRoom,
keyCombo: {
key: _Keyboard.Key.ARROW_UP,
altKey: true
}
}, {
action: _KeyBindingsManager.NavigationAction.SelectNextRoom,
keyCombo: {
key: _Keyboard.Key.ARROW_DOWN,
altKey: true
}
}, {
action: _KeyBindingsManager.NavigationAction.SelectPrevUnreadRoom,
keyCombo: {
key: _Keyboard.Key.ARROW_UP,
altKey: true,
shiftKey: true
}
}, {
action: _KeyBindingsManager.NavigationAction.SelectNextUnreadRoom,
keyCombo: {
key: _Keyboard.Key.ARROW_DOWN,
altKey: true,
shiftKey: true
}
}];
};
const defaultBindingsProvider
/*: IKeyBindingsProvider*/
= {
getMessageComposerBindings: messageComposerBindings,
getAutocompleteBindings: autocompleteBindings,
getRoomListBindings: roomListBindings,
getRoomBindings: roomBindings,
getNavigationBindings: navigationBindings
};
exports.defaultBindingsProvider = defaultBindingsProvider;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9LZXlCaW5kaW5nc0RlZmF1bHRzLnRzIl0sIm5hbWVzIjpbIm1lc3NhZ2VDb21wb3NlckJpbmRpbmdzIiwiYmluZGluZ3MiLCJhY3Rpb24iLCJNZXNzYWdlQ29tcG9zZXJBY3Rpb24iLCJTZWxlY3RQcmV2U2VuZEhpc3RvcnkiLCJrZXlDb21ibyIsImtleSIsIktleSIsIkFSUk9XX1VQIiwiYWx0S2V5IiwiY3RybEtleSIsIlNlbGVjdE5leHRTZW5kSGlzdG9yeSIsIkFSUk9XX0RPV04iLCJFZGl0UHJldk1lc3NhZ2UiLCJFZGl0TmV4dE1lc3NhZ2UiLCJDYW5jZWxFZGl0aW5nIiwiRVNDQVBFIiwiRm9ybWF0Qm9sZCIsIkIiLCJjdHJsT3JDbWQiLCJGb3JtYXRJdGFsaWNzIiwiSSIsIkZvcm1hdFF1b3RlIiwiR1JFQVRFUl9USEFOIiwic2hpZnRLZXkiLCJFZGl0VW5kbyIsIloiLCJNb3ZlQ3Vyc29yVG9TdGFydCIsIkhPTUUiLCJNb3ZlQ3Vyc29yVG9FbmQiLCJFTkQiLCJpc01hYyIsInB1c2giLCJFZGl0UmVkbyIsIlkiLCJTZXR0aW5nc1N0b3JlIiwiZ2V0VmFsdWUiLCJTZW5kIiwiRU5URVIiLCJOZXdMaW5lIiwiYXV0b2NvbXBsZXRlQmluZGluZ3MiLCJBdXRvY29tcGxldGVBY3Rpb24iLCJDb21wbGV0ZU9yTmV4dFNlbGVjdGlvbiIsIlRBQiIsIkNvbXBsZXRlT3JQcmV2U2VsZWN0aW9uIiwiQ2FuY2VsIiwiUHJldlNlbGVjdGlvbiIsIk5leHRTZWxlY3Rpb24iLCJyb29tTGlzdEJpbmRpbmdzIiwiUm9vbUxpc3RBY3Rpb24iLCJDbGVhclNlYXJjaCIsIlByZXZSb29tIiwiTmV4dFJvb20iLCJTZWxlY3RSb29tIiwiQ29sbGFwc2VTZWN0aW9uIiwiQVJST1dfTEVGVCIsIkV4cGFuZFNlY3Rpb24iLCJBUlJPV19SSUdIVCIsInJvb21CaW5kaW5ncyIsIlJvb21BY3Rpb24iLCJTY3JvbGxVcCIsIlBBR0VfVVAiLCJSb29tU2Nyb2xsRG93biIsIlBBR0VfRE9XTiIsIkRpc21pc3NSZWFkTWFya2VyIiwiSnVtcFRvT2xkZXN0VW5yZWFkIiwiVXBsb2FkRmlsZSIsIlUiLCJKdW1wVG9GaXJzdE1lc3NhZ2UiLCJKdW1wVG9MYXRlc3RNZXNzYWdlIiwiRm9jdXNTZWFyY2giLCJGIiwibmF2aWdhdGlvbkJpbmRpbmdzIiwiTmF2aWdhdGlvbkFjdGlvbiIsIkZvY3VzUm9vbVNlYXJjaCIsIksiLCJUb2dnbGVSb29tU2lkZVBhbmVsIiwiUEVSSU9EIiwiVG9nZ2xlVXNlck1lbnUiLCJCQUNLVElDSyIsIlRvZ2dsZVNob3J0Q3V0RGlhbG9nIiwiU0xBU0giLCJHb1RvSG9tZSIsIkgiLCJTZWxlY3RQcmV2Um9vbSIsIlNlbGVjdE5leHRSb29tIiwiU2VsZWN0UHJldlVucmVhZFJvb20iLCJTZWxlY3ROZXh0VW5yZWFkUm9vbSIsImRlZmF1bHRCaW5kaW5nc1Byb3ZpZGVyIiwiZ2V0TWVzc2FnZUNvbXBvc2VyQmluZGluZ3MiLCJnZXRBdXRvY29tcGxldGVCaW5kaW5ncyIsImdldFJvb21MaXN0QmluZGluZ3MiLCJnZXRSb29tQmluZGluZ3MiLCJnZXROYXZpZ2F0aW9uQmluZGluZ3MiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQWdCQTs7QUFFQTs7QUFDQTs7QUFuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBT0EsTUFBTUEsdUJBQXVCLEdBQUc7QUFBQTtBQUEyQztBQUN2RSxRQUFNQztBQUE2QztBQUFBLElBQUcsQ0FDbEQ7QUFDSUMsSUFBQUEsTUFBTSxFQUFFQywwQ0FBc0JDLHFCQURsQztBQUVJQyxJQUFBQSxRQUFRLEVBQUU7QUFDTkMsTUFBQUEsR0FBRyxFQUFFQyxjQUFJQyxRQURIO0FBRU5DLE1BQUFBLE1BQU0sRUFBRSxJQUZGO0FBR05DLE1BQUFBLE9BQU8sRUFBRTtBQUhIO0FBRmQsR0FEa0QsRUFTbEQ7QUFDSVIsSUFBQUEsTUFBTSxFQUFFQyww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LE1BQUFBLE1BQU0sRUFBRSxJQUZGO0FBR05lLE1BQUFBLFFBQVEsRUFBRTtBQUhKO0FBRmQsR0F4RUcsQ0FBUDtBQWlGSCxDQWxGRDs7QUFvRk8sTUFBTWdFO0FBQTZDO0FBQUEsRUFBRztBQUN6REMsRUFBQUEsMEJBQTBCLEVBQUV6Rix1QkFENkI7QUFFekQwRixFQUFBQSx1QkFBdUIsRUFBRWxELG9CQUZnQztBQUd6RG1ELEVBQUFBLG1CQUFtQixFQUFFM0MsZ0JBSG9DO0FBSXpENEMsRUFBQUEsZUFBZSxFQUFFbEMsWUFKd0M7QUFLekRtQyxFQUFBQSxxQkFBcUIsRUFBRXJCO0FBTGtDLENBQXREIiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDIxIENsZW1lbnMgWmVpZGxlclxuXG5MaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xueW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG5TZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG5saW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cbmltcG9ydCB7IEF1dG9jb21wbGV0ZUFjdGlvbiwgSUtleUJpbmRpbmdzUHJvdmlkZXIsIEtleUJpbmRpbmcsIE1lc3NhZ2VDb21wb3NlckFjdGlvbiwgTmF2aWdhdGlvbkFjdGlvbiwgUm9vbUFjdGlvbixcbiAgICBSb29tTGlzdEFjdGlvbiB9IGZyb20gXCIuL0tleUJpbmRpbmdzTWFuYWdlclwiO1xuaW1wb3J0IHsgaXNNYWMsIEtleSB9IGZyb20gXCIuL0tleWJvYXJkXCI7XG5pbXBvcnQgU2V0dGluZ3NTdG9yZSBmcm9tIFwiLi9zZXR0aW5ncy9TZXR0aW5nc1N0b3JlXCI7XG5cbmNvbnN0IG1lc3NhZ2VDb21wb3NlckJpbmRpbmdzID0gKCk6IEtleUJpbmRpbmc8TWVzc2FnZUNvbXBvc2VyQWN0aW9uPltdID0+IHtcbiAgICBjb25zdCBiaW5kaW5nczogS2V5QmluZGluZzxNZXNzYWdlQ29tcG9zZXJBY3Rpb24+W10gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFjdGlvbjogTWVzc2FnZUNvbXBvc2VyQWN0aW9uLlNlbGVjdFByZXZTZW5kSGlzdG9yeSxcbiAgICAgICAgICAgIGtleUNvbWJvOiB7XG4gICAgICAgICAgICAgICAga2V5OiBLZXkuQVJST1dfVVAsXG4gICAgICAgICAgICAgICAgYWx0S2V5OiB0cnVlLFxuICAgICAgICAgICAgICAgIGN0cmxLZXk6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBhY3Rpb246IE1lc3NhZ2VDb21wb3NlckFjdGlvbi5TZWxlY3ROZXh0U2VuZEhpc3RvcnksXG4gICAgICAgICAgICBrZXlDb21ibzoge1xuICAgICAgICAgICAgICAgIGtleTogS2V5LkFSUk9XX0RPV04sXG4gICAgICAgICAgICAgICAgYWx0S2V5OiB0cnVlLFxuICAgICAgICAgICAgICAgIGN0cmxLZXk6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBhY3Rpb246IE1lc3NhZ2VDb21wb3NlckFjdGlvbi5FZGl0UHJldk1lc3NhZ2UsXG4gICAgICAgICAgICBrZXlDb21ibzoge1xuICAgICAgICAgICAgICAgIGtleTogS2V5LkFSUk9XX1VQLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgYWN0aW9uOiBNZXNzYWdlQ29tcG9zZXJBY3Rpb24uRWRpdE5leHRNZXNzYWdlLFxuICAgICAgICAgICAga2V5Q29tYm86IHtcbiAgICAgICAgICAgICAgICBrZXk6IEtleS5BUlJPV19ET1dOLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgYWN0aW9uOiBNZXNzYWdlQ29tcG9zZXJBY3Rpb24uQ2FuY2VsRWRpdGluZyxcbiAgICAgICAgICAgIGtleUNvbWJvOiB7XG4gICAgICAgICAgICAgICAga2V5OiBLZXkuRVNDQVBFLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgYWN0aW9uOiBNZXNzYWdlQ29tcG9zZXJBY3Rpb24uRm9ybWF0Qm9sZCxcbiAgICAgICAgICAgIGtleUNvbWJvOiB7XG4gICAgICAgICAgICAgICAga2V5OiBLZXkuQixcbiAgICAgICAgICAgICAgICBjdHJsT3JDbWQ6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBhY3Rpb246IE1lc3NhZ2VDb21wb3NlckFjdGlvbi5Gb3JtYXRJdGFsaWNzLFxuICAgICAgICAgICAga2V5Q29tYm86IHtcbiAgICAgICAgICAgICAgICBrZXk6IEtleS5JLFxuICAgICAgICAgICAgICAgIGN0cmxPckNtZDogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFjdGlvbjogTWVzc2FnZUNvbXBvc2VyQWN0aW9uLkZvcm1hdFF1b3RlLFxuICAgICAgICAgICAga2V5Q29tYm86IHtcbiAgICAgICAgICAgICAgICBrZXk6IEtleS5HUkVBVEVSX1RIQU4sXG4gICAgICAgICAgICAgICAgY3RybE9yQ21kOiB0cnVlLFxuICAgICAgICAgICAgICAgIHNoaWZ0S2V5OiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgYWN0aW9uOiBNZXNzYWdlQ29tcG9zZXJBY3Rpb24uRWRpdFVuZG8sXG4gICAgICAgICAgICBrZXlDb21ibzoge1xuICAgICAgICAgICAgICAgIGtleTogS2V5LlosXG4gICAgICAgICAgICAgICAgY3RybE9yQ21kOiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgYWN0aW9uOiBNZXNzYWdlQ29tcG9zZXJBY3Rpb24uTW92ZUN1cnNvclRvU3RhcnQsXG4gICAgICAgICAgICBrZXlDb21ibzoge1xuICAgICAgICAgICAgICAgIGtleTogS2V5LkhPTUUsXG4gICAgICAgICAgICAgICAgY3RybE9yQ21kOiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgYWN0aW9uOiBNZXNzYWdlQ29tcG9zZXJBY3Rpb24uTW92ZUN1cnNvclRvRW5kLFxuICAgICAgICAgICAga2V5Q29tYm86IHtcbiAgICAgICAgICAgICAgICBrZXk6IEtleS5FTkQsXG4gICAgICAgICAgICAgICAgY3RybE9yQ21kOiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICBdO1xuICAgIGlmIChpc01hYykge1xuICAgICAgICBiaW5kaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIGFjdGlvbjogTWVzc2FnZUNvbXBvc2VyQWN0aW9uLkVkaXRSZWRvLFxuICAgICAgICAgICAga2V5Q29tYm86IHtcbiAgICAgICAgICAgICAgICBrZXk6IEtleS5aLFxuICAgICAgICAgICAgICAgIGN0cmxPckNtZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzaGlmdEtleTogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGJpbmRpbmdzLnB1c2goe1xuICAgICAgICAgICAgYWN0aW9uOiBNZXNzYWdlQ29tcG9zZXJBY3Rpb24uRWRpdFJlZG8sXG4gICAgICAgICAgICBrZXlDb21ibzoge1xuICAgICAgICAgICAgICAgIGtleTogS2V5LlksXG4gICAgICAgICAgICAgICAgY3RybE9yQ21kOiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChTZXR0aW5nc1N0b3JlLmdldFZhbHVlKCdNZXNzYWdlQ29tcG9zZXJJbnB1dC5jdHJsRW50ZXJUb1NlbmQnKSkge1xuICAgICAgICBiaW5kaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIGFjdGlvbjogTWVzc2FnZUNvbXBvc2VyQWN0aW9uLlNlbmQsXG4gICAgICAgICAgICBrZXlDb21ibzoge1xuICAgICAgICAgICAgICAgIGtleTogS2V5LkVOVEVSLFxuICAgICAgICAgICAgICAgIGN0cmxPckNtZDogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBiaW5kaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIGFjdGlvbjogTWVzc2FnZUNvbXBvc2VyQWN0aW9uLk5ld0xpbmUsXG4gICAgICAgICAgICBrZXlDb21ibzoge1xuICAgICAgICAgICAgICAgIGtleTogS2V5LkVOVEVSLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYmluZGluZ3MucHVzaCh7XG4gICAgICAgICAgICBhY3Rpb246IE1lc3NhZ2VDb21wb3NlckFjdGlvbi5TZW5kLFxuICAgICAgICAgICAga2V5Q29tYm86IHtcbiAgICAgICAgICAgICAgICBrZXk6IEtleS5FTlRFUixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBiaW5kaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIGFjdGlvbjogTWVzc2FnZUNvbXBvc2VyQWN0aW9uLk5ld0xpbmUsXG4gICAgICAgICAgICBrZXlDb21ibzoge1xuICAgICAgICAgICAgICAgIGtleTogS2V5LkVOVEVSLFxuICAgICAgICAgICAgICAgIHNoaWZ0S2V5OiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpc01hYykge1xuICAgICAgICAgICAgYmluZGluZ3MucHVzaCh7XG4gICAgICAgICAgICAgICAgYWN0aW9uOiBNZXNzYWdlQ29tcG9zZXJBY3Rpb24uTmV3TGluZSxcbiAgICAgICAgICAgICAgICBrZXlDb21ibzoge1xuICAgICAgICAgICAgICAgICAgICBrZXk6IEtleS5FTlRFUixcbiAgICAgICAgICAgICAgICAgICAgYWx0S2V5OiB0cnVlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYmluZGluZ3M7XG59XG5cbmNvbnN0IGF1dG9jb21wbGV0ZUJpbmRpbmdzID0gKCk6IEtleUJpbmRpbmc8QXV0b2NvbXBsZXRlQWN0aW9uPltdID0+IHtcbiAgICByZXR1cm4gW1xuICAgICAgICB7XG4gICAgICAgICAgICBhY3Rpb246IEF1dG9jb21wbGV0ZUFjdGlvbi5Db21wbGV0ZU9yTmV4dFNlbGVjdGlvbixcbiAgICAgICAgICAgIGtleUNvbWJvOiB7XG4gICAgICAgICAgICAgICAga2V5OiBLZXkuVEFCLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgYWN0aW9uOiBBdXRvY29tcGxldGVBY3Rpb24uQ29tcGxldGVPck5leHRTZWxlY3Rpb24sXG4gICAgICAgICAgICBrZXlDb21ibzoge1xuICAgICAgICAgICAgICAgIGtleTogS2V5LlRBQixcbiAgICAgICAgICAgICAgICBjdHJsS2V5OiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgYWN0aW9uOiBBdXRvY29tcGxldGVBY3Rpb24uQ29tcGxldGVPclByZXZTZWxlY3Rpb24sXG4gICAgICAgICAgICBrZXlDb21ibzoge1xuICAgICAgICAgICAgICAgIGtleTogS2V5LlRBQixcbiAgICAgICAgICAgICAgICBzaGlmdEtleTogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFjdGlvbjogQXV0b2NvbXBsZXRlQWN0aW9uLkNvbXBsZXRlT3JQcmV2U2VsZWN0aW9uLFxuICAgICAgICAgICAga2V5Q29tYm86IHtcbiAgICAgICAgICAgICAgICBrZXk6IEtleS5UQUIsXG4gICAgICAgICAgICAgICAgY3RybEtleTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzaGlmdEtleTogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFjdGlvbjogQXV0b2NvbXBsZXRlQWN0aW9uLkNhbmNlbCxcbiAgICAgICAgICAgIGtleUNvbWJvOiB7XG4gICAgICAgICAgICAgICAga2V5OiBLZXkuRVNDQVBFLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgYWN0aW9uOiBBdXRvY29tcGxldGVBY3Rpb24uUHJldlNlbGVjdGlvbixcbiAgICAgICAgICAgIGtleUNvbWJvOiB7XG4gICAgICAgICAgICAgICAga2V5OiBLZXkuQVJST1dfVVAsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBhY3Rpb246IEF1dG9jb21wbGV0ZUFjdGlvbi5OZXh0U2VsZWN0aW9uLFxuICAgICAgICAgICAga2V5Q29tYm86IHtcbiAgICAgICAgICAgICAgICBrZXk6IEtleS5BUlJPV19ET1dOLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICBdO1xufVxuXG5jb25zdCByb29tTGlzdEJpbmRpbmdzID0gKCk6IEtleUJpbmRpbmc8Um9vbUxpc3RBY3Rpb24+W10gPT4ge1xuICAgIHJldHVybiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFjdGlvbjogUm9vbUxpc3RBY3Rpb24uQ2xlYXJTZWFyY2gsXG4gICAgICAgICAgICBrZXlDb21ibzoge1xuICAgICAgICAgICAgICAgIGtleTogS2V5LkVTQ0FQRSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFjdGlvbjogUm9vbUxpc3RBY3Rpb24uUHJldlJvb20sXG4gICAgICAgICAgICBrZXlDb21ibzoge1xuICAgICAgICAgICAgICAgIGtleTogS2V5LkFSUk9XX1VQLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgYWN0aW9uOiBSb29tTGlzdEFjdGlvbi5OZXh0Um9vbSxcbiAgICAgICAgICAgIGtleUNvbWJvOiB7XG4gICAgICAgICAgICAgICAga2V5OiBLZXkuQVJST1dfRE9XTixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFjdGlvbjogUm9vbUxpc3RBY3Rpb24uU2VsZWN0Um9vbSxcbiAgICAgICAgICAgIGtleUNvbWJvOiB7XG4gICAgICAgICAgICAgICAga2V5OiBLZXkuRU5URVIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBhY3Rpb246IFJvb21MaXN0QWN0aW9uLkNvbGxhcHNlU2VjdGlvbixcbiAgICAgICAgICAgIGtleUNvbWJvOiB7XG4gICAgICAgICAgICAgICAga2V5OiBLZXkuQVJST1dfTEVGVCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFjdGlvbjogUm9vbUxpc3RBY3Rpb24uRXhwYW5kU2VjdGlvbixcbiAgICAgICAgICAgIGtleUNvbWJvOiB7XG4gICAgICAgICAgICAgICAga2V5OiBLZXkuQVJST1dfUklHSFQsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIF07XG59XG5cbmNvbnN0IHJvb21CaW5kaW5ncyA9ICgpOiBLZXlCaW5kaW5nPFJvb21BY3Rpb24+W10gPT4ge1xuICAgIGNvbnN0IGJpbmRpbmdzOiBLZXlCaW5kaW5nPFJvb21BY3Rpb24+W10gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFjdGlvbjogUm9vbUFjdGlvbi5TY3JvbGxVcCxcbiAgICAgICAgICAgIGtleUNvbWJvOiB7XG4gICAgICAgICAgICAgICAga2V5OiBLZXkuUEFHRV9VUCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFjdGlvbjogUm9vbUFjdGlvbi5Sb29tU2Nyb2xsRG93bixcbiAgICAgICAgICAgIGtleUNvbWJvOiB7XG4gICAgICAgICAgICAgICAga2V5OiBLZXkuUEFHRV9ET1dOLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgYWN0aW9uOiBSb29tQWN0aW9uLkRpc21pc3NSZWFkTWFya2VyLFxuICAgICAgICAgICAga2V5Q29tYm86IHtcbiAgICAgICAgICAgICAgICBrZXk6IEtleS5FU0NBUEUsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBhY3Rpb246IFJvb21BY3Rpb24uSnVtcFRvT2xkZXN0VW5yZWFkLFxuICAgICAgICAgICAga2V5Q29tYm86IHtcbiAgICAgICAgICAgICAgICBrZXk6IEtleS5QQUdFX1VQLFxuICAgICAgICAgICAgICAgIHNoaWZ0S2V5OiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgYWN0aW9uOiBSb29tQWN0aW9uLlVwbG9hZEZpbGUsXG4gICAgICAgICAgICBrZXlDb21ibzoge1xuICAgICAgICAgICAgICAgIGtleTogS2V5LlUsXG4gICAgICAgICAgICAgICAgY3RybE9yQ21kOiB0cnVlLFxuICAgICAgICAgICAgICAgIHNoaWZ0S2V5OiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgYWN0aW9uOiBSb29tQWN0aW9uLkp1bXBUb0ZpcnN0TWVzc2FnZSxcbiAgICAgICAgICAgIGtleUNvbWJvOiB7XG4gICAgICAgICAgICAgICAga2V5OiBLZXkuSE9NRSxcbiAgICAgICAgICAgICAgICBjdHJsS2V5OiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgYWN0aW9uOiBSb29tQWN0aW9uLkp1bXBUb0xhdGVzdE1lc3NhZ2UsXG4gICAgICAgICAgICBrZXlDb21ibzoge1xuICAgICAgICAgICAgICAgIGtleTogS2V5LkVORCxcbiAgICAgICAgICAgICAgICBjdHJsS2V5OiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICBdO1xuXG4gICAgaWYgKFNldHRpbmdzU3RvcmUuZ2V0VmFsdWUoJ2N0cmxGRm9yU2VhcmNoJykpIHtcbiAgICAgICAgYmluZGluZ3MucHVzaCh7XG4gICAgICAgICAgICBhY3Rpb246IFJvb21BY3Rpb24uRm9jdXNTZWFyY2gsXG4gICAgICAgICAgICBrZXlDb21ibzoge1xuICAgICAgICAgICAgICAgIGtleTogS2V5LkYsXG4gICAgICAgICAgICAgICAgY3RybE9yQ21kOiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJpbmRpbmdzO1xufVxuXG5jb25zdCBuYXZpZ2F0aW9uQmluZGluZ3MgPSAoKTogS2V5QmluZGluZzxOYXZpZ2F0aW9uQWN0aW9uPltdID0+IHtcbiAgICByZXR1cm4gW1xuICAgICAgICB7XG4gICAgICAgICAgICBhY3Rpb246IE5hdmlnYXRpb25BY3Rpb24uRm9jdXNSb29tU2VhcmNoLFxuICAgICAgICAgICAga2V5Q29tYm86IHtcbiAgICAgICAgICAgICAgICBrZXk6IEtleS5LLFxuICAgICAgICAgICAgICAgIGN0cmxPckNtZDogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFjdGlvbjogTmF2aWdhdGlvbkFjdGlvbi5Ub2dnbGVSb29tU2lkZVBhbmVsLFxuICAgICAgICAgICAga2V5Q29tYm86IHtcbiAgICAgICAgICAgICAgICBrZXk6IEtleS5QRVJJT0QsXG4gICAgICAgICAgICAgICAgY3RybE9yQ21kOiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgYWN0aW9uOiBOYXZpZ2F0aW9uQWN0aW9uLlRvZ2dsZVVzZXJNZW51LFxuICAgICAgICAgICAgLy8gSWRlYWxseSB0aGlzIHdvdWxkIGJlIENUUkwrUCBmb3IgXCJQcm9maWxlXCIsIGJ1dCB0aGF0J3NcbiAgICAgICAgICAgIC8vIHRha2VuIGJ5IHRoZSBwcmludCBkaWFsb2cuIENUUkwrSSBmb3IgXCJJbmZvcm1hdGlvblwiXG4gICAgICAgICAgICAvLyB3YXMgcHJldmlvdXNseSBjaG9zZW4gYnV0IGNvbmZsaWN0ZWQgd2l0aCBpdGFsaWNzIGluXG4gICAgICAgICAgICAvLyBjb21wb3Nlciwgc28gQ1RSTCtgIGl0IGlzXG4gICAgICAgICAgICBrZXlDb21ibzoge1xuICAgICAgICAgICAgICAgIGtleTogS2V5LkJBQ0tUSUNLLFxuICAgICAgICAgICAgICAgIGN0cmxPckNtZDogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFjdGlvbjogTmF2aWdhdGlvbkFjdGlvbi5Ub2dnbGVTaG9ydEN1dERpYWxvZyxcbiAgICAgICAgICAgIGtleUNvbWJvOiB7XG4gICAgICAgICAgICAgICAga2V5OiBLZXkuU0xBU0gsXG4gICAgICAgICAgICAgICAgY3RybE9yQ21kOiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgYWN0aW9uOiBOYXZpZ2F0aW9uQWN0aW9uLlRvZ2dsZVNob3J0Q3V0RGlhbG9nLFxuICAgICAgICAgICAga2V5Q29tYm86IHtcbiAgICAgICAgICAgICAgICBrZXk6IEtleS5TTEFTSCxcbiAgICAgICAgICAgICAgICBjdHJsT3JDbWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgc2hpZnRLZXk6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBhY3Rpb246IE5hdmlnYXRpb25BY3Rpb24uR29Ub0hvbWUsXG4gICAgICAgICAgICBrZXlDb21ibzoge1xuICAgICAgICAgICAgICAgIGtleTogS2V5LkgsXG4gICAgICAgICAgICAgICAgY3RybEtleTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBhbHRLZXk6ICFpc01hYyxcbiAgICAgICAgICAgICAgICBzaGlmdEtleTogaXNNYWMsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBhY3Rpb246IE5hdmlnYXRpb25BY3Rpb24uU2VsZWN0UHJldlJvb20sXG4gICAgICAgICAgICBrZXlDb21ibzoge1xuICAgICAgICAgICAgICAgIGtleTogS2V5LkFSUk9XX1VQLFxuICAgICAgICAgICAgICAgIGFsdEtleTogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFjdGlvbjogTmF2aWdhdGlvbkFjdGlvbi5TZWxlY3ROZXh0Um9vbSxcbiAgICAgICAgICAgIGtleUNvbWJvOiB7XG4gICAgICAgICAgICAgICAga2V5OiBLZXkuQVJST1dfRE9XTixcbiAgICAgICAgICAgICAgICBhbHRLZXk6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBhY3Rpb246IE5hdmlnYXRpb25BY3Rpb24uU2VsZWN0UHJldlVucmVhZFJvb20sXG4gICAgICAgICAgICBrZXlDb21ibzoge1xuICAgICAgICAgICAgICAgIGtleTogS2V5LkFSUk9XX1VQLFxuICAgICAgICAgICAgICAgIGFsdEtleTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzaGlmdEtleTogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFjdGlvbjogTmF2aWdhdGlvbkFjdGlvbi5TZWxlY3ROZXh0VW5yZWFkUm9vbSxcbiAgICAgICAgICAgIGtleUNvbWJvOiB7XG4gICAgICAgICAgICAgICAga2V5OiBLZXkuQVJST1dfRE9XTixcbiAgICAgICAgICAgICAgICBhbHRLZXk6IHRydWUsXG4gICAgICAgICAgICAgICAgc2hpZnRLZXk6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIF07XG59XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0QmluZGluZ3NQcm92aWRlcjogSUtleUJpbmRpbmdzUHJvdmlkZXIgPSB7XG4gICAgZ2V0TWVzc2FnZUNvbXBvc2VyQmluZGluZ3M6IG1lc3NhZ2VDb21wb3NlckJpbmRpbmdzLFxuICAgIGdldEF1dG9jb21wbGV0ZUJpbmRpbmdzOiBhdXRvY29tcGxldGVCaW5kaW5ncyxcbiAgICBnZXRSb29tTGlzdEJpbmRpbmdzOiByb29tTGlzdEJpbmRpbmdzLFxuICAgIGdldFJvb21CaW5kaW5nczogcm9vbUJpbmRpbmdzLFxuICAgIGdldE5hdmlnYXRpb25CaW5kaW5nczogbmF2aWdhdGlvbkJpbmRpbmdzLFxufVxuIl19