Simon Priet 9e2991e668 init
2021-09-05 22:53:58 +02:00

213 lines
19 KiB
JavaScript

'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray');
var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
var _defineProperty2 = require('babel-runtime/helpers/defineProperty');
var _defineProperty3 = _interopRequireDefault(_defineProperty2);
var _CHARACTERS, _IS_ISSUE;
exports.isIssue = isIssue;
exports.formatIssue = formatIssue;
var _lodash = require('lodash');
var _lodash2 = _interopRequireDefault(_lodash);
var _location_helpers = require('./location_helpers');
var _step_result_helpers = require('./step_result_helpers');
var _indentString = require('indent-string');
var _indentString2 = _interopRequireDefault(_indentString);
var _status = require('../../status');
var _status2 = _interopRequireDefault(_status);
var _figures = require('figures');
var _figures2 = _interopRequireDefault(_figures);
var _cliTable = require('cli-table');
var _cliTable2 = _interopRequireDefault(_cliTable);
var _keyword_type = require('./keyword_type');
var _keyword_type2 = _interopRequireDefault(_keyword_type);
var _step_arguments = require('../../step_arguments');
var _gherkin_document_parser = require('./gherkin_document_parser');
var _pickle_parser = require('./pickle_parser');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var CHARACTERS = (_CHARACTERS = {}, (0, _defineProperty3.default)(_CHARACTERS, _status2.default.AMBIGUOUS, _figures2.default.cross), (0, _defineProperty3.default)(_CHARACTERS, _status2.default.FAILED, _figures2.default.cross), (0, _defineProperty3.default)(_CHARACTERS, _status2.default.PASSED, _figures2.default.tick), (0, _defineProperty3.default)(_CHARACTERS, _status2.default.PENDING, '?'), (0, _defineProperty3.default)(_CHARACTERS, _status2.default.SKIPPED, '-'), (0, _defineProperty3.default)(_CHARACTERS, _status2.default.UNDEFINED, '?'), _CHARACTERS);
var IS_ISSUE = (_IS_ISSUE = {}, (0, _defineProperty3.default)(_IS_ISSUE, _status2.default.AMBIGUOUS, true), (0, _defineProperty3.default)(_IS_ISSUE, _status2.default.FAILED, true), (0, _defineProperty3.default)(_IS_ISSUE, _status2.default.PASSED, false), (0, _defineProperty3.default)(_IS_ISSUE, _status2.default.PENDING, true), (0, _defineProperty3.default)(_IS_ISSUE, _status2.default.SKIPPED, false), (0, _defineProperty3.default)(_IS_ISSUE, _status2.default.UNDEFINED, true), _IS_ISSUE);
function formatDataTable(arg) {
var rows = arg.rows.map(function (row) {
return row.cells.map(function (cell) {
return cell.value.replace(/\\/g, '\\\\').replace(/\n/g, '\\n');
});
});
var table = new _cliTable2.default({
chars: {
bottom: '',
'bottom-left': '',
'bottom-mid': '',
'bottom-right': '',
left: '|',
'left-mid': '',
mid: '',
'mid-mid': '',
middle: '|',
right: '|',
'right-mid': '',
top: '',
'top-left': '',
'top-mid': '',
'top-right': ''
},
style: {
border: [],
'padding-left': 1,
'padding-right': 1
}
});
table.push.apply(table, (0, _toConsumableArray3.default)(rows));
return table.toString();
}
function formatDocString(arg) {
return '"""\n' + arg.content + '\n"""';
}
function formatStep(_ref) {
var colorFns = _ref.colorFns,
isBeforeHook = _ref.isBeforeHook,
keyword = _ref.keyword,
keywordType = _ref.keywordType,
pickleStep = _ref.pickleStep,
snippetBuilder = _ref.snippetBuilder,
testStep = _ref.testStep;
var status = testStep.result.status;
var colorFn = colorFns[status];
var identifier = void 0;
if (testStep.sourceLocation) {
identifier = keyword + (pickleStep.text || '');
} else {
identifier = isBeforeHook ? 'Before' : 'After';
}
var text = colorFn(CHARACTERS[status] + ' ' + identifier);
var actionLocation = testStep.actionLocation;
if (actionLocation) {
text += ' # ' + colorFns.location((0, _location_helpers.formatLocation)(actionLocation));
}
text += '\n';
if (pickleStep) {
var str = void 0;
var iterator = (0, _step_arguments.buildStepArgumentIterator)({
dataTable: function dataTable(arg) {
return str = formatDataTable(arg);
},
docString: function docString(arg) {
return str = formatDocString(arg);
}
});
_lodash2.default.each(pickleStep.arguments, iterator);
if (str) {
text += (0, _indentString2.default)(colorFn(str) + '\n', 4);
}
}
if (testStep.attachments) {
testStep.attachments.forEach(function (_ref2) {
var media = _ref2.media,
data = _ref2.data;
var message = media.type === 'text/plain' ? ': ' + data : '';
text += (0, _indentString2.default)('Attachment (' + media.type + ')' + message + '\n', 4);
});
}
var message = (0, _step_result_helpers.getStepMessage)({
colorFns: colorFns,
keywordType: keywordType,
pickleStep: pickleStep,
snippetBuilder: snippetBuilder,
testStep: testStep
});
if (message) {
text += (0, _indentString2.default)(message, 4) + '\n';
}
return text;
}
function isIssue(status) {
return IS_ISSUE[status];
}
function formatIssue(_ref3) {
var colorFns = _ref3.colorFns,
gherkinDocument = _ref3.gherkinDocument,
number = _ref3.number,
pickle = _ref3.pickle,
snippetBuilder = _ref3.snippetBuilder,
testCase = _ref3.testCase;
var prefix = number + ') ';
var text = prefix;
var scenarioLocation = (0, _location_helpers.formatLocation)(testCase.sourceLocation);
text += 'Scenario: ' + pickle.name + ' # ' + colorFns.location(scenarioLocation) + '\n';
var stepLineToKeywordMap = (0, _gherkin_document_parser.getStepLineToKeywordMap)(gherkinDocument);
var stepLineToPickledStepMap = (0, _pickle_parser.getStepLineToPickledStepMap)(pickle);
var isBeforeHook = true;
var previousKeywordType = _keyword_type2.default.PRECONDITION;
_lodash2.default.each(testCase.steps, function (testStep) {
isBeforeHook = isBeforeHook && !testStep.sourceLocation;
var keyword = void 0,
keywordType = void 0,
pickleStep = void 0;
if (testStep.sourceLocation) {
pickleStep = stepLineToPickledStepMap[testStep.sourceLocation.line];
keyword = (0, _pickle_parser.getStepKeyword)({ pickleStep: pickleStep, stepLineToKeywordMap: stepLineToKeywordMap });
keywordType = (0, _keyword_type.getStepKeywordType)({
keyword: keyword,
language: gherkinDocument.feature.language,
previousKeywordType: previousKeywordType
});
}
var formattedStep = formatStep({
colorFns: colorFns,
isBeforeHook: isBeforeHook,
keyword: keyword,
keywordType: keywordType,
pickleStep: pickleStep,
snippetBuilder: snippetBuilder,
testStep: testStep
});
text += (0, _indentString2.default)(formattedStep, prefix.length);
previousKeywordType = keywordType;
});
return text + '\n';
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mb3JtYXR0ZXIvaGVscGVycy9pc3N1ZV9oZWxwZXJzLmpzIl0sIm5hbWVzIjpbImlzSXNzdWUiLCJmb3JtYXRJc3N1ZSIsIkNIQVJBQ1RFUlMiLCJBTUJJR1VPVVMiLCJjcm9zcyIsIkZBSUxFRCIsIlBBU1NFRCIsInRpY2siLCJQRU5ESU5HIiwiU0tJUFBFRCIsIlVOREVGSU5FRCIsIklTX0lTU1VFIiwiZm9ybWF0RGF0YVRhYmxlIiwiYXJnIiwicm93cyIsIm1hcCIsInJvdyIsImNlbGxzIiwiY2VsbCIsInZhbHVlIiwicmVwbGFjZSIsInRhYmxlIiwiY2hhcnMiLCJib3R0b20iLCJsZWZ0IiwibWlkIiwibWlkZGxlIiwicmlnaHQiLCJ0b3AiLCJzdHlsZSIsImJvcmRlciIsInB1c2giLCJ0b1N0cmluZyIsImZvcm1hdERvY1N0cmluZyIsImNvbnRlbnQiLCJmb3JtYXRTdGVwIiwiY29sb3JGbnMiLCJpc0JlZm9yZUhvb2siLCJrZXl3b3JkIiwia2V5d29yZFR5cGUiLCJwaWNrbGVTdGVwIiwic25pcHBldEJ1aWxkZXIiLCJ0ZXN0U3RlcCIsInN0YXR1cyIsInJlc3VsdCIsImNvbG9yRm4iLCJpZGVudGlmaWVyIiwic291cmNlTG9jYXRpb24iLCJ0ZXh0IiwiYWN0aW9uTG9jYXRpb24iLCJsb2NhdGlvbiIsInN0ciIsIml0ZXJhdG9yIiwiZGF0YVRhYmxlIiwiZG9jU3RyaW5nIiwiZWFjaCIsImFyZ3VtZW50cyIsImF0dGFjaG1lbnRzIiwiZm9yRWFjaCIsIm1lZGlhIiwiZGF0YSIsIm1lc3NhZ2UiLCJ0eXBlIiwiZ2hlcmtpbkRvY3VtZW50IiwibnVtYmVyIiwicGlja2xlIiwidGVzdENhc2UiLCJwcmVmaXgiLCJzY2VuYXJpb0xvY2F0aW9uIiwibmFtZSIsInN0ZXBMaW5lVG9LZXl3b3JkTWFwIiwic3RlcExpbmVUb1BpY2tsZWRTdGVwTWFwIiwicHJldmlvdXNLZXl3b3JkVHlwZSIsIlBSRUNPTkRJVElPTiIsInN0ZXBzIiwi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ZixDQUFWO0FBQ0EvQixvQkFBYyxzQ0FBbUI7QUFDL0JELHdCQUQrQjtBQUUvQnNDLGtCQUFVYixnQkFBZ0JjLE9BQWhCLENBQXdCRCxRQUZIO0FBRy9CSjtBQUgrQixPQUFuQixDQUFkO0FBS0Q7QUFDRCxRQUFNTSxnQkFBZ0IzQyxXQUFXO0FBQy9CQyx3QkFEK0I7QUFFL0JDLGdDQUYrQjtBQUcvQkMsc0JBSCtCO0FBSS9CQyw4QkFKK0I7QUFLL0JDLDRCQUwrQjtBQU0vQkMsb0NBTitCO0FBTy9CQztBQVArQixLQUFYLENBQXRCO0FBU0FNLFlBQVEsNEJBQWE4QixhQUFiLEVBQTRCWCxPQUFPWSxNQUFuQyxDQUFSO0FBQ0FQLDBCQUFzQmpDLFdBQXRCO0FBQ0QsR0F2QkQ7QUF3QkEsU0FBVVMsSUFBVjtBQUNEIiwiZmlsZSI6Imlzc3VlX2hlbHBlcnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnXG5pbXBvcnQgeyBmb3JtYXRMb2NhdGlvbiB9IGZyb20gJy4vbG9jYXRpb25faGVscGVycydcbmltcG9ydCB7IGdldFN0ZXBNZXNzYWdlIH0gZnJvbSAnLi9zdGVwX3Jlc3VsdF9oZWxwZXJzJ1xuaW1wb3J0IGluZGVudFN0cmluZyBmcm9tICdpbmRlbnQtc3RyaW5nJ1xuaW1wb3J0IFN0YXR1cyBmcm9tICcuLi8uLi9zdGF0dXMnXG5pbXBvcnQgZmlndXJlcyBmcm9tICdmaWd1cmVzJ1xuaW1wb3J0IFRhYmxlIGZyb20gJ2NsaS10YWJsZSdcbmltcG9ydCBLZXl3b3JkVHlwZSwgeyBnZXRTdGVwS2V5d29yZFR5cGUgfSBmcm9tICcuL2tleXdvcmRfdHlwZSdcbmltcG9ydCB7IGJ1aWxkU3RlcEFyZ3VtZW50SXRlcmF0b3IgfSBmcm9tICcuLi8uLi9zdGVwX2FyZ3VtZW50cydcbmltcG9ydCB7IGdldFN0ZXBMaW5lVG9LZXl3b3JkTWFwIH0gZnJvbSAnLi9naGVya2luX2RvY3VtZW50X3BhcnNlcidcbmltcG9ydCB7IGdldFN0ZXBMaW5lVG9QaWNrbGVkU3RlcE1hcCwgZ2V0U3RlcEtleXdvcmQgfSBmcm9tICcuL3BpY2tsZV9wYXJzZXInXG5cbmNvbnN0IENIQVJBQ1RFUlMgPSB7XG4gIFtTdGF0dXMuQU1CSUdVT1VTXTogZmlndXJlcy5jcm9zcyxcbiAgW1N0YXR1cy5GQUlMRURdOiBmaWd1cmVzLmNyb3NzLFxuICBbU3RhdHVzLlBBU1NFRF06IGZpZ3VyZXMudGljayxcbiAgW1N0YXR1cy5QRU5ESU5HXTogJz8nLFxuICBbU3RhdHVzLlNLSVBQRURdOiAnLScsXG4gIFtTdGF0dXMuVU5ERUZJTkVEXTogJz8nLFxufVxuXG5jb25zdCBJU19JU1NVRSA9IHtcbiAgW1N0YXR1cy5BTUJJR1VPVVNdOiB0cnVlLFxuICBbU3RhdHVzLkZBSUxFRF06IHRydWUsXG4gIFtTdGF0dXMuUEFTU0VEXTogZmFsc2UsXG4gIFtTdGF0dXMuUEVORElOR106IHRydWUsXG4gIFtTdGF0dXMuU0tJUFBFRF06IGZhbHNlLFxuICBbU3RhdHVzLlVOREVGSU5FRF06IHRydWUsXG59XG5cbmZ1bmN0aW9uIGZvcm1hdERhdGFUYWJsZShhcmcpIHtcbiAgY29uc3Qgcm93cyA9IGFyZy5yb3dzLm1hcChyb3cgPT5cbiAgICByb3cuY2VsbHMubWFwKGNlbGwgPT5cbiAgICAgIGNlbGwudmFsdWUucmVwbGFjZSgvXFxcXC9nLCAnXFxcXFxcXFwnKS5yZXBsYWNlKC9cXG4vZywgJ1xcXFxuJylcbiAgICApXG4gIClcbiAgY29uc3QgdGFibGUgPSBuZXcgVGFibGUoe1xuICAgIGNoYXJzOiB7XG4gICAgICBib3R0b206ICcnLFxuICAgICAgJ2JvdHRvbS1sZWZ0JzogJycsXG4gICAgICAnYm90dG9tLW1pZCc6ICcnLFxuICAgICAgJ2JvdHRvbS1yaWdodCc6ICcnLFxuICAgICAgbGVmdDogJ3wnLFxuICAgICAgJ2xlZnQtbWlkJzogJycsXG4gICAgICBtaWQ6ICcnLFxuICAgICAgJ21pZC1taWQnOiAnJyxcbiAgICAgIG1pZGRsZTogJ3wnLFxuICAgICAgcmlnaHQ6ICd8JyxcbiAgICAgICdyaWdodC1taWQnOiAnJyxcbiAgICAgIHRvcDogJycsXG4gICAgICAndG9wLWxlZnQnOiAnJyxcbiAgICAgICd0b3AtbWlkJzogJycsXG4gICAgICAndG9wLXJpZ2h0JzogJycsXG4gICAgfSxcbiAgICBzdHlsZToge1xuICAgICAgYm9yZGVyOiBbXSxcbiAgICAgICdwYWRkaW5nLWxlZnQnOiAxLFxuICAgICAgJ3BhZGRpbmctcmlnaHQnOiAxLFxuICAgIH0sXG4gIH0pXG4gIHRhYmxlLnB1c2goLi4ucm93cylcbiAgcmV0dXJuIHRhYmxlLnRvU3RyaW5nKClcbn1cblxuZnVuY3Rpb24gZm9ybWF0RG9jU3RyaW5nKGFyZykge1xuICByZXR1cm4gYFwiXCJcIlxcbiR7YXJnLmNvbnRlbnR9XFxuXCJcIlwiYFxufVxuXG5mdW5jdGlvbiBmb3JtYXRTdGVwKHtcbiAgY29sb3JGbnMsXG4gIGlzQmVmb3JlSG9vayxcbiAga2V5d29yZCxcbiAga2V5d29yZFR5cGUsXG4gIHBpY2tsZVN0ZXAsXG4gIHNuaXBwZXRCdWlsZGVyLFxuICB0ZXN0U3RlcCxcbn0pIHtcbiAgY29uc3QgeyBzdGF0dXMgfSA9IHRlc3RTdGVwLnJlc3VsdFxuICBjb25zdCBjb2xvckZuID0gY29sb3JGbnNbc3RhdHVzXVxuXG4gIGxldCBpZGVudGlmaWVyXG4gIGlmICh0ZXN0U3RlcC5zb3VyY2VMb2NhdGlvbikge1xuICAgIGlkZW50aWZpZXIgPSBrZXl3b3JkICsgKHBpY2tsZVN0ZXAudGV4dCB8fCAnJylcbiAgfSBlbHNlIHtcbiAgICBpZGVudGlmaWVyID0gaXNCZWZvcmVIb29rID8gJ0JlZm9yZScgOiAnQWZ0ZXInXG4gIH1cblxuICBsZXQgdGV4dCA9IGNvbG9yRm4oYCR7Q0hBUkFDVEVSU1tzdGF0dXNdfSAke2lkZW50aWZpZXJ9YClcblxuICBjb25zdCB7IGFjdGlvbkxvY2F0aW9uIH0gPSB0ZXN0U3RlcFxuICBpZiAoYWN0aW9uTG9jYXRpb24pIHtcbiAgICB0ZXh0ICs9IGAgIyAke2NvbG9yRm5zLmxvY2F0aW9uKGZvcm1hdExvY2F0aW9uKGFjdGlvbkxvY2F0aW9uKSl9YFxuICB9XG4gIHRleHQgKz0gJ1xcbidcblxuICBpZiAocGlja2xlU3RlcCkge1xuICAgIGxldCBzdHJcbiAgICBjb25zdCBpdGVyYXRvciA9IGJ1aWxkU3RlcEFyZ3VtZW50SXRlcmF0b3Ioe1xuICAgICAgZGF0YVRhYmxlOiBhcmcgPT4gKHN0ciA9IGZvcm1hdERhdGFUYWJsZShhcmcpKSxcbiAgICAgIGRvY1N0cmluZzogYXJnID0+IChzdHIgPSBmb3JtYXREb2NTdHJpbmcoYXJnKSksXG4gICAgfSlcbiAgICBfLmVhY2gocGlja2xlU3RlcC5hcmd1bWVudHMsIGl0ZXJhdG9yKVxuICAgIGlmIChzdHIpIHtcbiAgICAgIHRleHQgKz0gaW5kZW50U3RyaW5nKGAke2NvbG9yRm4oc3RyKX1cXG5gLCA0KVxuICAgIH1cbiAgfVxuXG4gIGlmICh0ZXN0U3RlcC5hdHRhY2htZW50cykge1xuICAgIHRlc3RTdGVwLmF0dGFjaG1lbnRzLmZvckVhY2goKHsgbWVkaWEsIGRhdGEgfSkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IG1lZGlhLnR5cGUgPT09ICd0ZXh0L3BsYWluJyA/IGA6ICR7ZGF0YX1gIDogJydcbiAgICAgIHRleHQgKz0gaW5kZW50U3RyaW5nKGBBdHRhY2htZW50ICgke21lZGlhLnR5cGV9KSR7bWVzc2FnZX1cXG5gLCA0KVxuICAgIH0pXG4gIH1cblxuICBjb25zdCBtZXNzYWdlID0gZ2V0U3RlcE1lc3NhZ2Uoe1xuICAgIGNvbG9yRm5zLFxuICAgIGtleXdvcmRUeXBlLFxuICAgIHBpY2tsZVN0ZXAsXG4gICAgc25pcHBldEJ1aWxkZXIsXG4gICAgdGVzdFN0ZXAsXG4gIH0pXG4gIGlmIChtZXNzYWdlKSB7XG4gICAgdGV4dCArPSBgJHtpbmRlbnRTdHJpbmcobWVzc2FnZSwgNCl9XFxuYFxuICB9XG4gIHJldHVybiB0ZXh0XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0lzc3VlKHN0YXR1cykge1xuICByZXR1cm4gSVNfSVNTVUVbc3RhdHVzXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0SXNzdWUoe1xuICBjb2xvckZucyxcbiAgZ2hlcmtpbkRvY3VtZW50LFxuICBudW1iZXIsXG4gIHBpY2tsZSxcbiAgc25pcHBldEJ1aWxkZXIsXG4gIHRlc3RDYXNlLFxufSkge1xuICBjb25zdCBwcmVmaXggPSBgJHtudW1iZXJ9KSBgXG4gIGxldCB0ZXh0ID0gcHJlZml4XG4gIGNvbnN0IHNjZW5hcmlvTG9jYXRpb24gPSBmb3JtYXRMb2NhdGlvbih0ZXN0Q2FzZS5zb3VyY2VMb2NhdGlvbilcbiAgdGV4dCArPSBgU2NlbmFyaW86ICR7cGlja2xlLm5hbWV9ICMgJHtjb2xvckZucy5sb2NhdGlvbihzY2VuYXJpb0xvY2F0aW9uKX1cXG5gXG4gIGNvbnN0IHN0ZXBMaW5lVG9LZXl3b3JkTWFwID0gZ2V0U3RlcExpbmVUb0tleXdvcmRNYXAoZ2hlcmtpbkRvY3VtZW50KVxuICBjb25zdCBzdGVwTGluZVRvUGlja2xlZFN0ZXBNYXAgPSBnZXRTdGVwTGluZVRvUGlja2xlZFN0ZXBNYXAocGlja2xlKVxuICBsZXQgaXNCZWZvcmVIb29rID0gdHJ1ZVxuICBsZXQgcHJldmlvdXNLZXl3b3JkVHlwZSA9IEtleXdvcmRUeXBlLlBSRUNPTkRJVElPTlxuICBfLmVhY2godGVzdENhc2Uuc3RlcHMsIHRlc3RTdGVwID0+IHtcbiAgICBpc0JlZm9yZUhvb2sgPSBpc0JlZm9yZUhvb2sgJiYgIXRlc3RTdGVwLnNvdXJjZUxvY2F0aW9uXG4gICAgbGV0IGtleXdvcmQsIGtleXdvcmRUeXBlLCBwaWNrbGVTdGVwXG4gICAgaWYgKHRlc3RTdGVwLnNvdXJjZUxvY2F0aW9uKSB7XG4gICAgICBwaWNrbGVTdGVwID0gc3RlcExpbmVUb1BpY2tsZWRTdGVwTWFwW3Rlc3RTdGVwLnNvdXJjZUxvY2F0aW9uLmxpbmVdXG4gICAgICBrZXl3b3JkID0gZ2V0U3RlcEtleXdvcmQoeyBwaWNrbGVTdGVwLCBzdGVwTGluZVRvS2V5d29yZE1hcCB9KVxuICAgICAga2V5d29yZFR5cGUgPSBnZXRTdGVwS2V5d29yZFR5cGUoe1xuICAgICAgICBrZXl3b3JkLFxuICAgICAgICBsYW5ndWFnZTogZ2hlcmtpbkRvY3VtZW50LmZlYXR1cmUubGFuZ3VhZ2UsXG4gICAgICAgIHByZXZpb3VzS2V5d29yZFR5cGUsXG4gICAgICB9KVxuICAgIH1cbiAgICBjb25zdCBmb3JtYXR0ZWRTdGVwID0gZm9ybWF0U3RlcCh7XG4gICAgICBjb2xvckZucyxcbiAgICAgIGlzQmVmb3JlSG9vayxcbiAgICAgIGtleXdvcmQsXG4gICAgICBrZXl3b3JkVHlwZSxcbiAgICAgIHBpY2tsZVN0ZXAsXG4gICAgICBzbmlwcGV0QnVpbGRlcixcbiAgICAgIHRlc3RTdGVwLFxuICAgIH0pXG4gICAgdGV4dCArPSBpbmRlbnRTdHJpbmcoZm9ybWF0dGVkU3RlcCwgcHJlZml4Lmxlbmd0aClcbiAgICBwcmV2aW91c0tleXdvcmRUeXBlID0ga2V5d29yZFR5cGVcbiAgfSlcbiAgcmV0dXJuIGAke3RleHR9XFxuYFxufVxuIl19