UNPKG

975 kBJavaScriptView Raw
1(function webpackUniversalModuleDefinition(root, factory) {
2 if(typeof exports === 'object' && typeof module === 'object')
3 module.exports = factory();
4 else if(typeof define === 'function' && define.amd)
5 define([], factory);
6 else if(typeof exports === 'object')
7 exports["sqlFormatter"] = factory();
8 else
9 root["sqlFormatter"] = factory();
10})(self, () => {
11return /******/ (() => { // webpackBootstrap
12/******/ "use strict";
13/******/ var __webpack_modules__ = ({
14
15/***/ "./src/core/AliasAs.ts":
16/*!*****************************!*\
17 !*** ./src/core/AliasAs.ts ***!
18 \*****************************/
19/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
20
21__webpack_require__.r(__webpack_exports__);
22/* harmony export */ __webpack_require__.d(__webpack_exports__, {
23/* harmony export */ "default": () => (/* binding */ AliasAs)
24/* harmony export */ });
25/* harmony import */ var _token__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./token */ "./src/core/token.ts");
26function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
27
28function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
29
30function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
31
32
33/** Decides addition and removal of AS tokens */
34
35var AliasAs = /*#__PURE__*/function () {
36 function AliasAs(aliasAs, formatter) {
37 _classCallCheck(this, AliasAs);
38
39 this.aliasAs = aliasAs;
40 this.formatter = formatter;
41 }
42 /** True when AS keyword should be added *before* current token */
43
44
45 _createClass(AliasAs, [{
46 key: "shouldAddBefore",
47 value: function shouldAddBefore(token) {
48 return this.isMissingTableAlias(token) || this.isMissingSelectColumnAlias(token);
49 } // if table alias is missing and should be added
50
51 }, {
52 key: "isMissingTableAlias",
53 value: function isMissingTableAlias(token) {
54 return this.aliasAs === 'always' && token.type === _token__WEBPACK_IMPORTED_MODULE_0__.TokenType.WORD && this.lookBehind().value === ')';
55 } // if select column alias is missing and should be added
56
57 }, {
58 key: "isMissingSelectColumnAlias",
59 value: function isMissingSelectColumnAlias(token) {
60 var prevToken = this.lookBehind();
61 var nextToken = this.lookAhead();
62 return (this.aliasAs === 'always' || this.aliasAs === 'select') && this.formatter.isWithinSelect() && token.type === _token__WEBPACK_IMPORTED_MODULE_0__.TokenType.WORD && (_token__WEBPACK_IMPORTED_MODULE_0__.isToken.END(prevToken) || (prevToken.type === _token__WEBPACK_IMPORTED_MODULE_0__.TokenType.WORD || prevToken.type === _token__WEBPACK_IMPORTED_MODULE_0__.TokenType.NUMBER) && (nextToken.value === ',' || (0,_token__WEBPACK_IMPORTED_MODULE_0__.isCommand)(nextToken)));
63 }
64 /** True when AS keyword should be added *after* current token */
65
66 }, {
67 key: "shouldAddAfter",
68 value: function shouldAddAfter() {
69 return this.isEdgeCaseCTE() || this.isEdgeCaseCreateTable() || this.isMissingTypeCastAs();
70 } // checks for CAST(«expression» [AS] type)
71
72 }, {
73 key: "isMissingTypeCastAs",
74 value: function isMissingTypeCastAs() {
75 return this.aliasAs === 'never' && this.formatter.isWithinSelect() && _token__WEBPACK_IMPORTED_MODULE_0__.isToken.CAST(this.formatter.getPreviousReservedToken()) && _token__WEBPACK_IMPORTED_MODULE_0__.isToken.AS(this.lookAhead()) && (this.lookAhead(2).type === _token__WEBPACK_IMPORTED_MODULE_0__.TokenType.WORD || this.lookAhead(2).type === _token__WEBPACK_IMPORTED_MODULE_0__.TokenType.RESERVED_KEYWORD) && this.lookAhead(3).value === ')';
76 } // checks for WITH `table` [AS] (
77
78 }, {
79 key: "isEdgeCaseCTE",
80 value: function isEdgeCaseCTE() {
81 var nextToken = this.lookAhead();
82 return this.aliasAs === 'never' && _token__WEBPACK_IMPORTED_MODULE_0__.isToken.WITH(this.lookBehind()) && (nextToken.value === '(' || _token__WEBPACK_IMPORTED_MODULE_0__.isToken.AS(nextToken) && this.lookAhead(2).value === '(');
83 } // checks for CREATE TABLE `table` [AS] WITH (
84
85 }, {
86 key: "isEdgeCaseCreateTable",
87 value: function isEdgeCaseCreateTable() {
88 var prevToken = this.lookBehind();
89 var nextToken = this.lookAhead();
90 return this.aliasAs === 'never' && (_token__WEBPACK_IMPORTED_MODULE_0__.isToken.TABLE(prevToken) || prevToken.value.endsWith('TABLE')) && (_token__WEBPACK_IMPORTED_MODULE_0__.isToken.WITH(nextToken) || _token__WEBPACK_IMPORTED_MODULE_0__.isToken.AS(nextToken) && _token__WEBPACK_IMPORTED_MODULE_0__.isToken.WITH(this.lookAhead(2)));
91 }
92 /* True when the current AS token should be discarded */
93
94 }, {
95 key: "shouldRemove",
96 value: function shouldRemove() {
97 return this.aliasAs === 'never' || this.aliasAs === 'select' && this.isRemovableNonSelectAs();
98 }
99 }, {
100 key: "isRemovableNonSelectAs",
101 value: function isRemovableNonSelectAs() {
102 return this.lookBehind().value === ')' && // ) [AS] alias but not SELECT (a) [AS] alpha
103 !this.formatter.isWithinSelect() && this.lookAhead().value !== '(' // skip WITH foo [AS] ( ...
104 ;
105 }
106 }, {
107 key: "lookBehind",
108 value: function lookBehind(n) {
109 return this.formatter.tokenLookBehind(n);
110 }
111 }, {
112 key: "lookAhead",
113 value: function lookAhead(n) {
114 return this.formatter.tokenLookAhead(n);
115 }
116 }]);
117
118 return AliasAs;
119}();
120
121
122
123/***/ }),
124
125/***/ "./src/core/AsTokenFactory.ts":
126/*!************************************!*\
127 !*** ./src/core/AsTokenFactory.ts ***!
128 \************************************/
129/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
130
131__webpack_require__.r(__webpack_exports__);
132/* harmony export */ __webpack_require__.d(__webpack_exports__, {
133/* harmony export */ "default": () => (/* binding */ AsTokenFactory)
134/* harmony export */ });
135/* harmony import */ var _token__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./token */ "./src/core/token.ts");
136function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
137
138function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
139
140function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
141
142
143
144var AsTokenFactory = /*#__PURE__*/function () {
145 function AsTokenFactory(keywordCase) {
146 var tokens = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
147
148 _classCallCheck(this, AsTokenFactory);
149
150 this.keywordCase = keywordCase;
151 this.detectedCase = this.autoDetectCase(tokens);
152 }
153
154 _createClass(AsTokenFactory, [{
155 key: "autoDetectCase",
156 value: function autoDetectCase(tokens) {
157 var asTokens = tokens.filter(_token__WEBPACK_IMPORTED_MODULE_0__.isToken.AS);
158 var upperAsTokens = asTokens.filter(function (_ref) {
159 var value = _ref.value;
160 return value === 'AS';
161 });
162 return upperAsTokens.length > asTokens.length / 2 ? 'upper' : 'lower';
163 }
164 /** Returns AS token with either upper- or lowercase text */
165
166 }, {
167 key: "token",
168 value: function token() {
169 return {
170 type: _token__WEBPACK_IMPORTED_MODULE_0__.TokenType.RESERVED_KEYWORD,
171 value: this.asTokenValue()
172 };
173 }
174 }, {
175 key: "asTokenValue",
176 value: function asTokenValue() {
177 var keywordCase = this.keywordCase === 'preserve' ? this.detectedCase : this.keywordCase;
178 return keywordCase === 'upper' ? 'AS' : 'as';
179 }
180 }]);
181
182 return AsTokenFactory;
183}();
184
185
186
187/***/ }),
188
189/***/ "./src/core/Formatter.ts":
190/*!*******************************!*\
191 !*** ./src/core/Formatter.ts ***!
192 \*******************************/
193/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
194
195__webpack_require__.r(__webpack_exports__);
196/* harmony export */ __webpack_require__.d(__webpack_exports__, {
197/* harmony export */ "default": () => (/* binding */ Formatter)
198/* harmony export */ });
199/* harmony import */ var _Indentation__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Indentation */ "./src/core/Indentation.ts");
200/* harmony import */ var _InlineBlock__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./InlineBlock */ "./src/core/InlineBlock.ts");
201/* harmony import */ var _Params__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Params */ "./src/core/Params.ts");
202/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils */ "./src/utils.ts");
203/* harmony import */ var _token__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./token */ "./src/core/token.ts");
204/* harmony import */ var _formatCommaPositions__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./formatCommaPositions */ "./src/core/formatCommaPositions.ts");
205/* harmony import */ var _formatAliasPositions__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./formatAliasPositions */ "./src/core/formatAliasPositions.ts");
206/* harmony import */ var _tabularStyle__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./tabularStyle */ "./src/core/tabularStyle.ts");
207/* harmony import */ var _AliasAs__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./AliasAs */ "./src/core/AliasAs.ts");
208/* harmony import */ var _AsTokenFactory__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./AsTokenFactory */ "./src/core/AsTokenFactory.ts");
209function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
210
211function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
212
213function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
214
215function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
216
217function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
218
219function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
220
221
222
223
224
225
226
227
228
229
230
231/** Main formatter class that produces a final output string from list of tokens */
232
233var Formatter = /*#__PURE__*/function () {
234 function Formatter(cfg) {
235 _classCallCheck(this, Formatter);
236
237 this.currentNewline = true;
238 this.previousReservedToken = _token__WEBPACK_IMPORTED_MODULE_4__.EOF_TOKEN;
239 this.previousCommandToken = _token__WEBPACK_IMPORTED_MODULE_4__.EOF_TOKEN;
240 this.tokens = [];
241 this.index = -1;
242 this.cfg = cfg;
243 this.indentation = new _Indentation__WEBPACK_IMPORTED_MODULE_0__["default"](this.indentString());
244 this.inlineBlock = new _InlineBlock__WEBPACK_IMPORTED_MODULE_1__["default"](this.cfg.expressionWidth);
245 this.aliasAs = new _AliasAs__WEBPACK_IMPORTED_MODULE_8__["default"](this.cfg.aliasAs, this);
246 this.params = new _Params__WEBPACK_IMPORTED_MODULE_2__["default"](this.cfg.params);
247 this.asTokenFactory = new _AsTokenFactory__WEBPACK_IMPORTED_MODULE_9__["default"](this.cfg.keywordCase);
248 }
249
250 _createClass(Formatter, [{
251 key: "indentString",
252 value: function indentString() {
253 if (this.isTabularStyle()) {
254 return ' '.repeat(10);
255 }
256
257 if (this.cfg.useTabs) {
258 return '\t';
259 }
260
261 return ' '.repeat(this.cfg.tabWidth);
262 }
263 /**
264 * SQL Tokenizer for this formatter, provided by subclasses.
265 */
266
267 }, {
268 key: "tokenizer",
269 value: function tokenizer() {
270 throw new Error('tokenizer() not implemented by subclass');
271 }
272 /**
273 * Reprocess and modify a token based on parsed context.
274 * Subclasses can override this to modify tokens during formatting.
275 * @param {Token} token - The token to modify
276 * @return {Token} new token or the original
277 */
278
279 }, {
280 key: "tokenOverride",
281 value: function tokenOverride(token) {
282 return token;
283 }
284 /**
285 * Formats an SQL query.
286 * @param {string} query - The SQL query string to be formatted
287 * @return {string} The formatter query
288 */
289
290 }, {
291 key: "format",
292 value: function format(query) {
293 this.tokens = this.tokenizer().tokenize(query);
294 this.asTokenFactory = new _AsTokenFactory__WEBPACK_IMPORTED_MODULE_9__["default"](this.cfg.keywordCase, this.tokens);
295 var formattedQuery = this.getFormattedQueryFromTokens();
296 var finalQuery = this.postFormat(formattedQuery);
297 return finalQuery.replace(/^\n*/, '').trimEnd();
298 }
299 /**
300 * Does post-processing on the formatted query.
301 */
302
303 }, {
304 key: "postFormat",
305 value: function postFormat(query) {
306 if (this.cfg.tabulateAlias) {
307 query = (0,_formatAliasPositions__WEBPACK_IMPORTED_MODULE_6__["default"])(query);
308 }
309
310 if (this.cfg.commaPosition === 'before' || this.cfg.commaPosition === 'tabular') {
311 query = (0,_formatCommaPositions__WEBPACK_IMPORTED_MODULE_5__["default"])(query, this.cfg.commaPosition, this.indentString());
312 }
313
314 return query;
315 }
316 /**
317 * Performs main construction of query from token list, delegates to other methods for formatting based on token criteria
318 */
319
320 }, {
321 key: "getFormattedQueryFromTokens",
322 value: function getFormattedQueryFromTokens() {
323 var formattedQuery = '';
324
325 for (this.index = 0; this.index < this.tokens.length; this.index++) {
326 var token = this.tokenOverride(this.tokens[this.index]); // if token is a Reserved Keyword, Command, Binary Command, Dependent Clause, Logical Operator
327
328 if ((0,_token__WEBPACK_IMPORTED_MODULE_4__.isReserved)(token)) {
329 this.previousReservedToken = token;
330
331 if (token.type !== _token__WEBPACK_IMPORTED_MODULE_4__.TokenType.RESERVED_KEYWORD && token.type !== _token__WEBPACK_IMPORTED_MODULE_4__.TokenType.RESERVED_JOIN_CONDITION) {
332 // convert Reserved Command or Logical Operator to tabular format if needed
333 token = (0,_tabularStyle__WEBPACK_IMPORTED_MODULE_7__.toTabularToken)(token, this.cfg.indentStyle);
334 }
335
336 if (token.type === _token__WEBPACK_IMPORTED_MODULE_4__.TokenType.RESERVED_COMMAND) {
337 this.previousCommandToken = token;
338 }
339 }
340
341 if (token.type === _token__WEBPACK_IMPORTED_MODULE_4__.TokenType.LINE_COMMENT) {
342 formattedQuery = this.formatLineComment(token, formattedQuery);
343 } else if (token.type === _token__WEBPACK_IMPORTED_MODULE_4__.TokenType.BLOCK_COMMENT) {
344 formattedQuery = this.formatBlockComment(token, formattedQuery);
345 } else if (token.type === _token__WEBPACK_IMPORTED_MODULE_4__.TokenType.RESERVED_COMMAND) {
346 this.currentNewline = this.checkNewline(token);
347 formattedQuery = this.formatCommand(token, formattedQuery);
348 } else if (token.type === _token__WEBPACK_IMPORTED_MODULE_4__.TokenType.RESERVED_BINARY_COMMAND) {
349 formattedQuery = this.formatBinaryCommand(token, formattedQuery);
350 } else if (token.type === _token__WEBPACK_IMPORTED_MODULE_4__.TokenType.RESERVED_DEPENDENT_CLAUSE) {
351 formattedQuery = this.formatDependentClause(token, formattedQuery);
352 } else if (token.type === _token__WEBPACK_IMPORTED_MODULE_4__.TokenType.RESERVED_JOIN_CONDITION) {
353 formattedQuery = this.formatJoinCondition(token, formattedQuery);
354 } else if (token.type === _token__WEBPACK_IMPORTED_MODULE_4__.TokenType.RESERVED_LOGICAL_OPERATOR) {
355 formattedQuery = this.formatLogicalOperator(token, formattedQuery);
356 } else if (token.type === _token__WEBPACK_IMPORTED_MODULE_4__.TokenType.RESERVED_KEYWORD) {
357 formattedQuery = this.formatKeyword(token, formattedQuery);
358 } else if (token.type === _token__WEBPACK_IMPORTED_MODULE_4__.TokenType.BLOCK_START) {
359 formattedQuery = this.formatBlockStart(token, formattedQuery);
360 } else if (token.type === _token__WEBPACK_IMPORTED_MODULE_4__.TokenType.BLOCK_END) {
361 formattedQuery = this.formatBlockEnd(token, formattedQuery);
362 } else if (token.type === _token__WEBPACK_IMPORTED_MODULE_4__.TokenType.PLACEHOLDER) {
363 formattedQuery = this.formatPlaceholder(token, formattedQuery);
364 } else if (token.type === _token__WEBPACK_IMPORTED_MODULE_4__.TokenType.OPERATOR) {
365 formattedQuery = this.formatOperator(token, formattedQuery);
366 } else {
367 formattedQuery = this.formatWord(token, formattedQuery);
368 }
369 }
370
371 return (0,_tabularStyle__WEBPACK_IMPORTED_MODULE_7__.replaceTabularPlaceholders)(formattedQuery);
372 }
373 /**
374 * Formats word tokens + any potential AS tokens for aliases
375 */
376
377 }, {
378 key: "formatWord",
379 value: function formatWord(token, query) {
380 var finalQuery = query;
381
382 if (this.aliasAs.shouldAddBefore(token)) {
383 finalQuery = this.formatWithSpaces(this.asTokenFactory.token(), finalQuery);
384 }
385
386 finalQuery = this.formatWithSpaces(token, finalQuery);
387
388 if (this.aliasAs.shouldAddAfter()) {
389 finalQuery = this.formatWithSpaces(this.asTokenFactory.token(), finalQuery);
390 }
391
392 return finalQuery;
393 }
394 /**
395 * Checks if a newline should currently be inserted
396 */
397
398 }, {
399 key: "checkNewline",
400 value: function checkNewline(token) {
401 var nextTokens = this.tokensUntilNextCommandOrQueryEnd(); // auto break if SELECT includes CASE statements
402
403 if (this.isWithinSelect() && nextTokens.some(_token__WEBPACK_IMPORTED_MODULE_4__.isToken.CASE)) {
404 return true;
405 }
406
407 switch (this.cfg.multilineLists) {
408 case 'always':
409 return true;
410
411 case 'avoid':
412 return false;
413
414 case 'expressionWidth':
415 return this.inlineWidth(token, nextTokens) > this.cfg.expressionWidth;
416
417 default:
418 // multilineLists mode is a number
419 return this.countClauses(nextTokens) > this.cfg.multilineLists || this.inlineWidth(token, nextTokens) > this.cfg.expressionWidth;
420 }
421 }
422 }, {
423 key: "inlineWidth",
424 value: function inlineWidth(token, tokens) {
425 var tokensString = tokens.map(function (_ref) {
426 var value = _ref.value;
427 return value === ',' ? value + ' ' : value;
428 }).join('');
429 return "".concat(token.whitespaceBefore).concat(token.value, " ").concat(tokensString).length;
430 }
431 /**
432 * Counts comma-separated clauses (doesn't count commas inside blocks)
433 * Note: There's always at least one clause.
434 */
435
436 }, {
437 key: "countClauses",
438 value: function countClauses(tokens) {
439 var count = 1;
440 var openBlocks = 0;
441
442 var _iterator = _createForOfIteratorHelper(tokens),
443 _step;
444
445 try {
446 for (_iterator.s(); !(_step = _iterator.n()).done;) {
447 var _step$value = _step.value,
448 type = _step$value.type,
449 value = _step$value.value;
450
451 if (value === ',' && openBlocks === 0) {
452 count++;
453 }
454
455 if (type === _token__WEBPACK_IMPORTED_MODULE_4__.TokenType.BLOCK_START) {
456 openBlocks++;
457 }
458
459 if (type === _token__WEBPACK_IMPORTED_MODULE_4__.TokenType.BLOCK_END) {
460 openBlocks--;
461 }
462 }
463 } catch (err) {
464 _iterator.e(err);
465 } finally {
466 _iterator.f();
467 }
468
469 return count;
470 }
471 /** get all tokens between current token and next Reserved Command or query end */
472
473 }, {
474 key: "tokensUntilNextCommandOrQueryEnd",
475 value: function tokensUntilNextCommandOrQueryEnd() {
476 var tail = this.tokens.slice(this.index + 1);
477 return tail.slice(0, tail.length ? tail.findIndex(function (token) {
478 return (0,_token__WEBPACK_IMPORTED_MODULE_4__.isCommand)(token) || token.value === ';';
479 }) : undefined);
480 }
481 /** Formats a line comment onto query */
482
483 }, {
484 key: "formatLineComment",
485 value: function formatLineComment(token, query) {
486 return this.addNewline(query + this.show(token));
487 }
488 /** Formats a block comment onto query */
489
490 }, {
491 key: "formatBlockComment",
492 value: function formatBlockComment(token, query) {
493 return this.addNewline(this.addNewline(query) + this.indentComment(token.value));
494 }
495 /** Aligns comment to current indentation level */
496
497 }, {
498 key: "indentComment",
499 value: function indentComment(comment) {
500 return comment.replace(/\n[\t ]*/g, '\n' + this.indentation.getIndent() + ' ');
501 }
502 /**
503 * Formats a Reserved Command onto query, increasing indentation level where necessary
504 */
505
506 }, {
507 key: "formatCommand",
508 value: function formatCommand(token, query) {
509 this.indentation.decreaseTopLevel();
510 query = this.addNewline(query); // indent tabular formats, except when preceding a (
511
512 if (this.isTabularStyle()) {
513 if (this.tokenLookAhead().value !== '(') {
514 this.indentation.increaseTopLevel();
515 }
516 } else {
517 this.indentation.increaseTopLevel();
518 }
519
520 query += this.equalizeWhitespace(this.show(token)); // print token onto query
521
522 if (this.currentNewline && !this.isTabularStyle()) {
523 query = this.addNewline(query);
524 } else {
525 query += ' ';
526 }
527
528 return query;
529 }
530 /**
531 * Formats a Reserved Binary Command onto query, joining neighbouring tokens
532 */
533
534 }, {
535 key: "formatBinaryCommand",
536 value: function formatBinaryCommand(token, query) {
537 var isJoin = /JOIN/i.test(token.value); // check if token contains JOIN
538
539 if (!isJoin || this.isTabularStyle()) {
540 // decrease for boolean set operators or in tabular mode
541 this.indentation.decreaseTopLevel();
542 }
543
544 query = this.addNewline(query) + this.equalizeWhitespace(this.show(token));
545 return isJoin ? query + ' ' : this.addNewline(query);
546 }
547 /**
548 * Formats a Reserved Keyword onto query, skipping AS if disabled
549 */
550
551 }, {
552 key: "formatKeyword",
553 value: function formatKeyword(token, query) {
554 if (_token__WEBPACK_IMPORTED_MODULE_4__.isToken.AS(token) && this.aliasAs.shouldRemove()) {
555 return query;
556 }
557
558 return this.formatWithSpaces(token, query);
559 }
560 /**
561 * Formats a Reserved Dependent Clause token onto query, supporting the keyword that precedes it
562 */
563
564 }, {
565 key: "formatDependentClause",
566 value: function formatDependentClause(token, query) {
567 return this.addNewline(query) + this.equalizeWhitespace(this.show(token)) + ' ';
568 } // Formats ON and USING keywords
569
570 }, {
571 key: "formatJoinCondition",
572 value: function formatJoinCondition(token, query) {
573 return query + this.equalizeWhitespace(this.show(token)) + ' ';
574 }
575 /**
576 * Formats an Operator onto query, following rules for specific characters
577 */
578
579 }, {
580 key: "formatOperator",
581 value: function formatOperator(token, query) {
582 // special operator
583 if (token.value === ',') {
584 return this.formatComma(token, query);
585 } else if (token.value === ';') {
586 return this.formatQuerySeparator(token, query);
587 } else if (['$', '['].includes(token.value)) {
588 return this.formatWithSpaces(token, query, 'before');
589 } else if ([':', ']'].includes(token.value)) {
590 return this.formatWithSpaces(token, query, 'after');
591 } else if (['.', '{', '}', '`'].includes(token.value)) {
592 return this.formatWithoutSpaces(token, query);
593 } // regular operator
594
595
596 if (this.cfg.denseOperators && this.tokenLookBehind().type !== _token__WEBPACK_IMPORTED_MODULE_4__.TokenType.RESERVED_COMMAND) {
597 // do not trim whitespace if SELECT *
598 return this.formatWithoutSpaces(token, query);
599 }
600
601 return this.formatWithSpaces(token, query);
602 }
603 /**
604 * Formats a Logical Operator onto query, joining boolean conditions
605 */
606
607 }, {
608 key: "formatLogicalOperator",
609 value: function formatLogicalOperator(token, query) {
610 // ignore AND when BETWEEN x [AND] y
611 if (_token__WEBPACK_IMPORTED_MODULE_4__.isToken.AND(token) && _token__WEBPACK_IMPORTED_MODULE_4__.isToken.BETWEEN(this.tokenLookBehind(2))) {
612 return this.formatWithSpaces(token, query);
613 }
614
615 if (this.isTabularStyle()) {
616 this.indentation.decreaseTopLevel();
617 }
618
619 if (this.cfg.logicalOperatorNewline === 'before') {
620 return (this.currentNewline ? this.addNewline(query) : query) + this.equalizeWhitespace(this.show(token)) + ' ';
621 } else {
622 query += this.show(token);
623 return this.currentNewline ? this.addNewline(query) : query;
624 }
625 }
626 /** Replace any sequence of whitespace characters with single space */
627
628 }, {
629 key: "equalizeWhitespace",
630 value: function equalizeWhitespace(string) {
631 return string.replace(/[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]+/g, ' ');
632 }
633 /**
634 * Formats a Block Start token (left paren/bracket/brace, CASE) onto query, beginning an Inline Block or increasing indentation where necessary
635 */
636
637 }, {
638 key: "formatBlockStart",
639 value: function formatBlockStart(token, query) {
640 var _a;
641
642 if (_token__WEBPACK_IMPORTED_MODULE_4__.isToken.CASE(token)) {
643 query = this.formatWithSpaces(token, query);
644 } else {
645 // Take out the preceding space unless there was whitespace there in the original query
646 // or another opening parens or line comment
647 var preserveWhitespaceFor = [_token__WEBPACK_IMPORTED_MODULE_4__.TokenType.BLOCK_START, _token__WEBPACK_IMPORTED_MODULE_4__.TokenType.LINE_COMMENT, _token__WEBPACK_IMPORTED_MODULE_4__.TokenType.OPERATOR];
648
649 if (((_a = token.whitespaceBefore) === null || _a === void 0 ? void 0 : _a.length) === 0 && !preserveWhitespaceFor.includes(this.tokenLookBehind().type)) {
650 query = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.trimSpacesEnd)(query);
651 } else if (!this.cfg.newlineBeforeOpenParen) {
652 query = query.trimEnd() + ' ';
653 }
654
655 query += this.show(token);
656 this.inlineBlock.beginIfPossible(this.tokens, this.index);
657 }
658
659 if (!this.inlineBlock.isActive()) {
660 this.indentation.increaseBlockLevel();
661
662 if (!_token__WEBPACK_IMPORTED_MODULE_4__.isToken.CASE(token) || this.cfg.multilineLists === 'always') {
663 query = this.addNewline(query);
664 }
665 }
666
667 return query;
668 }
669 /**
670 * Formats a Block End token (right paren/bracket/brace, END) onto query, closing an Inline Block or decreasing indentation where necessary
671 */
672
673 }, {
674 key: "formatBlockEnd",
675 value: function formatBlockEnd(token, query) {
676 if (this.inlineBlock.isActive()) {
677 this.inlineBlock.end();
678
679 if (_token__WEBPACK_IMPORTED_MODULE_4__.isToken.END(token)) {
680 return this.formatWithSpaces(token, query); // add space before END when closing inline block
681 }
682
683 return this.formatWithSpaces(token, query, 'after'); // do not add space before )
684 } else {
685 this.indentation.decreaseBlockLevel();
686
687 if (this.isTabularStyle()) {
688 // +1 extra indentation step for the closing paren
689 query = this.addNewline(query) + this.indentation.getSingleIndent();
690 } else if (this.cfg.newlineBeforeCloseParen) {
691 query = this.addNewline(query);
692 } else {
693 query = query.trimEnd() + ' ';
694 }
695
696 return this.formatWithSpaces(token, query);
697 }
698 }
699 /**
700 * Formats a Placeholder item onto query, to be replaced with the value of the placeholder
701 */
702
703 }, {
704 key: "formatPlaceholder",
705 value: function formatPlaceholder(token, query) {
706 return query + this.params.get(token) + ' ';
707 }
708 /**
709 * Formats a comma Operator onto query, ending line unless in an Inline Block
710 */
711
712 }, {
713 key: "formatComma",
714 value: function formatComma(token, query) {
715 query = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.trimSpacesEnd)(query) + this.show(token) + ' ';
716
717 if (this.inlineBlock.isActive()) {
718 return query;
719 } else if (_token__WEBPACK_IMPORTED_MODULE_4__.isToken.LIMIT(this.getPreviousReservedToken())) {
720 return query;
721 } else if (this.currentNewline) {
722 return this.addNewline(query);
723 } else {
724 return query;
725 }
726 }
727 /** Simple append of token onto query */
728
729 }, {
730 key: "formatWithoutSpaces",
731 value: function formatWithoutSpaces(token, query) {
732 return (0,_utils__WEBPACK_IMPORTED_MODULE_3__.trimSpacesEnd)(query) + this.show(token);
733 }
734 /**
735 * Add token onto query with spaces - either before, after, or both
736 */
737
738 }, {
739 key: "formatWithSpaces",
740 value: function formatWithSpaces(token, query) {
741 var addSpace = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'both';
742 var before = addSpace === 'after' ? (0,_utils__WEBPACK_IMPORTED_MODULE_3__.trimSpacesEnd)(query) : query;
743 var after = addSpace === 'before' ? '' : ' ';
744 return before + this.show(token) + after;
745 }
746 }, {
747 key: "formatQuerySeparator",
748 value: function formatQuerySeparator(token, query) {
749 this.indentation.resetIndentation();
750 return [(0,_utils__WEBPACK_IMPORTED_MODULE_3__.trimSpacesEnd)(query), this.cfg.newlineBeforeSemicolon ? '\n' : '', this.show(token), '\n'.repeat(this.cfg.linesBetweenQueries + 1)].join('');
751 }
752 /** Converts token to string, uppercasing if enabled */
753
754 }, {
755 key: "show",
756 value: function show(token) {
757 if ((0,_token__WEBPACK_IMPORTED_MODULE_4__.isReserved)(token) || token.type === _token__WEBPACK_IMPORTED_MODULE_4__.TokenType.BLOCK_START || token.type === _token__WEBPACK_IMPORTED_MODULE_4__.TokenType.BLOCK_END) {
758 switch (this.cfg.keywordCase) {
759 case 'preserve':
760 return token.value;
761
762 case 'upper':
763 return token.value.toUpperCase();
764
765 case 'lower':
766 return token.value.toLowerCase();
767 }
768 } else {
769 return token.value;
770 }
771 }
772 /** Inserts a newline onto the query */
773
774 }, {
775 key: "addNewline",
776 value: function addNewline(query) {
777 query = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.trimSpacesEnd)(query);
778
779 if (!query.endsWith('\n')) {
780 query += '\n';
781 }
782
783 return query + this.indentation.getIndent();
784 }
785 }, {
786 key: "isTabularStyle",
787 value: function isTabularStyle() {
788 return this.cfg.indentStyle === 'tabularLeft' || this.cfg.indentStyle === 'tabularRight';
789 }
790 /** Returns the latest encountered reserved keyword token */
791
792 }, {
793 key: "getPreviousReservedToken",
794 value: function getPreviousReservedToken() {
795 return this.previousReservedToken;
796 }
797 /** True when currently within SELECT command */
798
799 }, {
800 key: "isWithinSelect",
801 value: function isWithinSelect() {
802 return _token__WEBPACK_IMPORTED_MODULE_4__.isToken.SELECT(this.previousCommandToken);
803 }
804 /** Fetches nth previous token from the token stream */
805
806 }, {
807 key: "tokenLookBehind",
808 value: function tokenLookBehind() {
809 var n = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
810 return this.tokens[this.index - n] || _token__WEBPACK_IMPORTED_MODULE_4__.EOF_TOKEN;
811 }
812 /** Fetches nth next token from the token stream */
813
814 }, {
815 key: "tokenLookAhead",
816 value: function tokenLookAhead() {
817 var n = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
818 return this.tokens[this.index + n] || _token__WEBPACK_IMPORTED_MODULE_4__.EOF_TOKEN;
819 }
820 }]);
821
822 return Formatter;
823}();
824
825
826
827/***/ }),
828
829/***/ "./src/core/Indentation.ts":
830/*!*********************************!*\
831 !*** ./src/core/Indentation.ts ***!
832 \*********************************/
833/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
834
835__webpack_require__.r(__webpack_exports__);
836/* harmony export */ __webpack_require__.d(__webpack_exports__, {
837/* harmony export */ "default": () => (/* binding */ Indentation)
838/* harmony export */ });
839/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils */ "./src/utils.ts");
840function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
841
842function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
843
844function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
845
846
847var INDENT_TYPE_TOP_LEVEL = 'top-level';
848var INDENT_TYPE_BLOCK_LEVEL = 'block-level';
849/**
850 * Manages indentation levels.
851 *
852 * There are two types of indentation levels:
853 *
854 * - BLOCK_LEVEL : increased by open-parenthesis
855 * - TOP_LEVEL : increased by RESERVED_COMMAND words
856 */
857
858var Indentation = /*#__PURE__*/function () {
859 /**
860 * @param {string} indent A string to indent with
861 */
862 function Indentation(indent) {
863 _classCallCheck(this, Indentation);
864
865 this.indent = indent;
866 this.indentTypes = [];
867 }
868 /**
869 * Returns indentation string for single indentation step.
870 */
871
872
873 _createClass(Indentation, [{
874 key: "getSingleIndent",
875 value: function getSingleIndent() {
876 return this.indent;
877 }
878 /**
879 * Returns current indentation string.
880 * @return {string} indentation string based on indentTypes
881 */
882
883 }, {
884 key: "getIndent",
885 value: function getIndent() {
886 return this.indent.repeat(this.indentTypes.length);
887 }
888 /**
889 * Increases indentation by one top-level indent.
890 */
891
892 }, {
893 key: "increaseTopLevel",
894 value: function increaseTopLevel() {
895 this.indentTypes.push(INDENT_TYPE_TOP_LEVEL);
896 }
897 /**
898 * Increases indentation by one block-level indent.
899 */
900
901 }, {
902 key: "increaseBlockLevel",
903 value: function increaseBlockLevel() {
904 this.indentTypes.push(INDENT_TYPE_BLOCK_LEVEL);
905 }
906 /**
907 * Decreases indentation by one top-level indent.
908 * Does nothing when the previous indent is not top-level.
909 */
910
911 }, {
912 key: "decreaseTopLevel",
913 value: function decreaseTopLevel() {
914 if (this.indentTypes.length > 0 && (0,_utils__WEBPACK_IMPORTED_MODULE_0__.last)(this.indentTypes) === INDENT_TYPE_TOP_LEVEL) {
915 this.indentTypes.pop();
916 }
917 }
918 /**
919 * Decreases indentation by one block-level indent.
920 * If there are top-level indents within the block-level indent,
921 * throws away these as well.
922 */
923
924 }, {
925 key: "decreaseBlockLevel",
926 value: function decreaseBlockLevel() {
927 while (this.indentTypes.length > 0) {
928 var type = this.indentTypes.pop();
929
930 if (type !== INDENT_TYPE_TOP_LEVEL) {
931 break;
932 }
933 }
934 }
935 /** Clears all indentation */
936
937 }, {
938 key: "resetIndentation",
939 value: function resetIndentation() {
940 this.indentTypes = [];
941 }
942 }]);
943
944 return Indentation;
945}();
946
947
948
949/***/ }),
950
951/***/ "./src/core/InlineBlock.ts":
952/*!*********************************!*\
953 !*** ./src/core/InlineBlock.ts ***!
954 \*********************************/
955/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
956
957__webpack_require__.r(__webpack_exports__);
958/* harmony export */ __webpack_require__.d(__webpack_exports__, {
959/* harmony export */ "default": () => (/* binding */ InlineBlock)
960/* harmony export */ });
961/* harmony import */ var _token__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./token */ "./src/core/token.ts");
962function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
963
964function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
965
966function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
967
968
969/**
970 * Bookkeeper for inline blocks.
971 *
972 * Inline blocks are parenthesised expressions that are shorter than INLINE_MAX_LENGTH.
973 * These blocks are formatted on a single line, unlike longer parenthesised
974 * expressions where open-parenthesis causes newline and increase of indentation.
975 */
976
977var InlineBlock = /*#__PURE__*/function () {
978 function InlineBlock(expressionWidth) {
979 _classCallCheck(this, InlineBlock);
980
981 this.level = 0;
982 this.expressionWidth = expressionWidth;
983 }
984 /**
985 * Begins inline block when lookahead through upcoming tokens determines
986 * that the block would be smaller than INLINE_MAX_LENGTH.
987 * @param {Token[]} tokens Array of all tokens
988 * @param {Number} index Current token position
989 */
990
991
992 _createClass(InlineBlock, [{
993 key: "beginIfPossible",
994 value: function beginIfPossible(tokens, index) {
995 if (this.level === 0 && this.isInlineBlock(tokens, index)) {
996 this.level = 1;
997 } else if (this.level > 0) {
998 this.level++;
999 } else {
1000 this.level = 0;
1001 }
1002 }
1003 /**
1004 * Finishes current inline block.
1005 * There might be several nested ones.
1006 */
1007
1008 }, {
1009 key: "end",
1010 value: function end() {
1011 this.level--;
1012 }
1013 /**
1014 * True when inside an inline block
1015 */
1016
1017 }, {
1018 key: "isActive",
1019 value: function isActive() {
1020 return this.level > 0;
1021 }
1022 /**
1023 * Check if this should be an inline parentheses block
1024 * Examples are "NOW()", "COUNT(*)", "int(10)", key(`somecolumn`), DECIMAL(7,2)
1025 */
1026
1027 }, {
1028 key: "isInlineBlock",
1029 value: function isInlineBlock(tokens, index) {
1030 var length = 0;
1031 var level = 0;
1032
1033 for (var i = index; i < tokens.length; i++) {
1034 var token = tokens[i];
1035 length += token.value.length;
1036
1037 if (this.isForbiddenToken(token)) {
1038 return false;
1039 } // Overran max length
1040
1041
1042 if (length > this.expressionWidth) {
1043 return false;
1044 }
1045
1046 if (token.type === _token__WEBPACK_IMPORTED_MODULE_0__.TokenType.BLOCK_START) {
1047 level++;
1048 } else if (token.type === _token__WEBPACK_IMPORTED_MODULE_0__.TokenType.BLOCK_END) {
1049 level--;
1050
1051 if (level === 0) {
1052 return true;
1053 }
1054 }
1055 }
1056
1057 return false;
1058 } // Reserved words that cause newlines, comments and semicolons
1059 // are not allowed inside inline parentheses block
1060
1061 }, {
1062 key: "isForbiddenToken",
1063 value: function isForbiddenToken(_ref) {
1064 var type = _ref.type,
1065 value = _ref.value;
1066 return type === _token__WEBPACK_IMPORTED_MODULE_0__.TokenType.RESERVED_COMMAND || type === _token__WEBPACK_IMPORTED_MODULE_0__.TokenType.RESERVED_LOGICAL_OPERATOR || // type === TokenType.LINE_COMMENT ||
1067 type === _token__WEBPACK_IMPORTED_MODULE_0__.TokenType.BLOCK_COMMENT || value === ';' || _token__WEBPACK_IMPORTED_MODULE_0__.isToken.CASE({
1068 type: type,
1069 value: value
1070 }) // CASE cannot have inline blocks
1071 ;
1072 }
1073 }]);
1074
1075 return InlineBlock;
1076}();
1077
1078
1079
1080/***/ }),
1081
1082/***/ "./src/core/Params.ts":
1083/*!****************************!*\
1084 !*** ./src/core/Params.ts ***!
1085 \****************************/
1086/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1087
1088__webpack_require__.r(__webpack_exports__);
1089/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1090/* harmony export */ "default": () => (/* binding */ Params)
1091/* harmony export */ });
1092function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
1093
1094function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
1095
1096function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
1097
1098/**
1099 * Handles placeholder replacement with given params.
1100 */
1101var Params = /*#__PURE__*/function () {
1102 function Params(params) {
1103 _classCallCheck(this, Params);
1104
1105 this.params = params;
1106 this.index = 0;
1107 }
1108 /**
1109 * Returns param value that matches given placeholder with param key.
1110 * @param {Token} token
1111 * @return {string} param or token.value when params are missing
1112 */
1113
1114
1115 _createClass(Params, [{
1116 key: "get",
1117 value: function get(_ref) {
1118 var key = _ref.key,
1119 value = _ref.value;
1120
1121 if (!this.params) {
1122 return value;
1123 }
1124
1125 if (key) {
1126 return this.params[key];
1127 }
1128
1129 return this.params[this.index++];
1130 }
1131 }]);
1132
1133 return Params;
1134}();
1135
1136
1137
1138/***/ }),
1139
1140/***/ "./src/core/Tokenizer.ts":
1141/*!*******************************!*\
1142 !*** ./src/core/Tokenizer.ts ***!
1143 \*******************************/
1144/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1145
1146__webpack_require__.r(__webpack_exports__);
1147/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1148/* harmony export */ "WHITESPACE_REGEX": () => (/* binding */ WHITESPACE_REGEX),
1149/* harmony export */ "default": () => (/* binding */ Tokenizer)
1150/* harmony export */ });
1151/* harmony import */ var _regexFactory__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./regexFactory */ "./src/core/regexFactory.ts");
1152/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils */ "./src/utils.ts");
1153/* harmony import */ var _token__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./token */ "./src/core/token.ts");
1154function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
1155
1156function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
1157
1158function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
1159
1160function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
1161
1162function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
1163
1164function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
1165
1166function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
1167
1168function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
1169
1170function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
1171
1172function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
1173
1174
1175
1176 // convert to partial type import in TS 4.5
1177
1178var WHITESPACE_REGEX = /^([\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]+)/;
1179var NULL_REGEX = /(?!)/; // zero-width negative lookahead, matches nothing
1180
1181/** Converts SQL language string into a token stream */
1182
1183var Tokenizer = /*#__PURE__*/function () {
1184 /**
1185 * @param {TokenizerOptions} cfg
1186 * @param {string[]} cfg.reservedKeywords - Reserved words in SQL
1187 * @param {string[]} cfg.reservedDependentClauses - Words that following a specific Statement and must have data attached
1188 * @param {string[]} cfg.reservedLogicalOperators - Words that are set to newline
1189 * @param {string[]} cfg.reservedCommands - Words that are set to new line separately
1190 * @param {string[]} cfg.reservedBinaryCommands - Words that are top level but have no indentation
1191 * @param {string[]} cfg.reservedJoinConditions - ON and USING
1192 * @param {string[]} cfg.stringTypes - string types to enable - "", '', ``, [], N''
1193 * @param {string[]} cfg.blockStart - Opening parentheses to enable, like (, [
1194 * @param {string[]} cfg.blockEnd - Closing parentheses to enable, like ), ]
1195 * @param {string[]} cfg.indexedPlaceholderTypes - Prefixes for indexed placeholders, like ?
1196 * @param {string[]} cfg.namedPlaceholderTypes - Prefixes for named placeholders, like @ and :
1197 * @param {string[]} cfg.lineCommentTypes - Line comments to enable, like # and --
1198 * @param {string[]} cfg.specialWordChars - Special chars that can be found inside of words, like @ and #
1199 * @param {string[]} cfg.operators - Additional operators to recognize
1200 */
1201 function Tokenizer(cfg) {
1202 var _this = this,
1203 _this$REGEX_MAP;
1204
1205 _classCallCheck(this, Tokenizer);
1206
1207 var _a, _b, _c, _d;
1208 /** Curried function of `getTokenOnFirstMatch` that allows token type to be passed first */
1209
1210
1211 this.matchToken = function (tokenType) {
1212 return function (input) {
1213 return _this.getTokenOnFirstMatch({
1214 input: input,
1215 type: tokenType,
1216 regex: _this.REGEX_MAP[tokenType]
1217 });
1218 };
1219 };
1220
1221 var specialWordCharsAll = Object.values((_a = cfg.specialWordChars) !== null && _a !== void 0 ? _a : {}).join('');
1222 this.REGEX_MAP = (_this$REGEX_MAP = {}, _defineProperty(_this$REGEX_MAP, _token__WEBPACK_IMPORTED_MODULE_2__.TokenType.WORD, _regexFactory__WEBPACK_IMPORTED_MODULE_0__.createWordRegex(cfg.specialWordChars)), _defineProperty(_this$REGEX_MAP, _token__WEBPACK_IMPORTED_MODULE_2__.TokenType.STRING, _regexFactory__WEBPACK_IMPORTED_MODULE_0__.createStringRegex(cfg.stringTypes)), _defineProperty(_this$REGEX_MAP, _token__WEBPACK_IMPORTED_MODULE_2__.TokenType.RESERVED_KEYWORD, _regexFactory__WEBPACK_IMPORTED_MODULE_0__.createReservedWordRegex(cfg.reservedKeywords, specialWordCharsAll)), _defineProperty(_this$REGEX_MAP, _token__WEBPACK_IMPORTED_MODULE_2__.TokenType.RESERVED_DEPENDENT_CLAUSE, _regexFactory__WEBPACK_IMPORTED_MODULE_0__.createReservedWordRegex((_b = cfg.reservedDependentClauses) !== null && _b !== void 0 ? _b : [], specialWordCharsAll)), _defineProperty(_this$REGEX_MAP, _token__WEBPACK_IMPORTED_MODULE_2__.TokenType.RESERVED_LOGICAL_OPERATOR, _regexFactory__WEBPACK_IMPORTED_MODULE_0__.createReservedWordRegex(cfg.reservedLogicalOperators, specialWordCharsAll)), _defineProperty(_this$REGEX_MAP, _token__WEBPACK_IMPORTED_MODULE_2__.TokenType.RESERVED_COMMAND, _regexFactory__WEBPACK_IMPORTED_MODULE_0__.createReservedWordRegex(cfg.reservedCommands, specialWordCharsAll)), _defineProperty(_this$REGEX_MAP, _token__WEBPACK_IMPORTED_MODULE_2__.TokenType.RESERVED_BINARY_COMMAND, _regexFactory__WEBPACK_IMPORTED_MODULE_0__.createReservedWordRegex(cfg.reservedBinaryCommands, specialWordCharsAll)), _defineProperty(_this$REGEX_MAP, _token__WEBPACK_IMPORTED_MODULE_2__.TokenType.RESERVED_JOIN_CONDITION, _regexFactory__WEBPACK_IMPORTED_MODULE_0__.createReservedWordRegex(cfg.reservedJoinConditions, specialWordCharsAll)), _defineProperty(_this$REGEX_MAP, _token__WEBPACK_IMPORTED_MODULE_2__.TokenType.OPERATOR, _regexFactory__WEBPACK_IMPORTED_MODULE_0__.createOperatorRegex('+-/*%&|^><=.,;[]{}`:$', ['<>', '<=', '>=', '!='].concat(_toConsumableArray((_c = cfg.operators) !== null && _c !== void 0 ? _c : [])))), _defineProperty(_this$REGEX_MAP, _token__WEBPACK_IMPORTED_MODULE_2__.TokenType.BLOCK_START, _regexFactory__WEBPACK_IMPORTED_MODULE_0__.createParenRegex(cfg.blockStart)), _defineProperty(_this$REGEX_MAP, _token__WEBPACK_IMPORTED_MODULE_2__.TokenType.BLOCK_END, _regexFactory__WEBPACK_IMPORTED_MODULE_0__.createParenRegex(cfg.blockEnd)), _defineProperty(_this$REGEX_MAP, _token__WEBPACK_IMPORTED_MODULE_2__.TokenType.LINE_COMMENT, _regexFactory__WEBPACK_IMPORTED_MODULE_0__.createLineCommentRegex(cfg.lineCommentTypes)), _defineProperty(_this$REGEX_MAP, _token__WEBPACK_IMPORTED_MODULE_2__.TokenType.BLOCK_COMMENT, /^(\/\*(?:(?![])[\s\S])*?(?:\*\/|$))/), _defineProperty(_this$REGEX_MAP, _token__WEBPACK_IMPORTED_MODULE_2__.TokenType.NUMBER, /^(0x[0-9A-Fa-f]+|0b[01]+|(\x2D[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]*)?[0-9]+(\.[0-9]*)?([Ee][\+\x2D]?[0-9]+(\.[0-9]+)?)?)/), _defineProperty(_this$REGEX_MAP, _token__WEBPACK_IMPORTED_MODULE_2__.TokenType.PLACEHOLDER, NULL_REGEX), _defineProperty(_this$REGEX_MAP, _token__WEBPACK_IMPORTED_MODULE_2__.TokenType.EOF, NULL_REGEX), _this$REGEX_MAP);
1223 this.INDEXED_PLACEHOLDER_REGEX = _regexFactory__WEBPACK_IMPORTED_MODULE_0__.createPlaceholderRegex((_d = cfg.indexedPlaceholderTypes) !== null && _d !== void 0 ? _d : [], '[0-9]*');
1224 this.IDENT_NAMED_PLACEHOLDER_REGEX = _regexFactory__WEBPACK_IMPORTED_MODULE_0__.createPlaceholderRegex(cfg.namedPlaceholderTypes, '[a-zA-Z0-9._$]+');
1225 this.STRING_NAMED_PLACEHOLDER_REGEX = _regexFactory__WEBPACK_IMPORTED_MODULE_0__.createPlaceholderRegex(cfg.namedPlaceholderTypes, _regexFactory__WEBPACK_IMPORTED_MODULE_0__.createStringPattern(cfg.stringTypes));
1226 }
1227 /**
1228 * Takes a SQL string and breaks it into tokens.
1229 * Each token is an object with type and value.
1230 *
1231 * @param {string} input - The SQL string
1232 * @returns {Token[]} output token stream
1233 */
1234
1235
1236 _createClass(Tokenizer, [{
1237 key: "tokenize",
1238 value: function tokenize(input) {
1239 var tokens = [];
1240 var token; // Keep processing the string until it is empty
1241
1242 while (input.length) {
1243 // grab any preceding whitespace
1244 var whitespaceBefore = this.getWhitespace(input);
1245 input = input.substring(whitespaceBefore.length);
1246
1247 if (input.length) {
1248 // Get the next token and the token type
1249 token = this.getNextToken(input, token); // Advance the string
1250
1251 input = input.substring(token.value.length);
1252 tokens.push(Object.assign(Object.assign({}, token), {
1253 whitespaceBefore: whitespaceBefore
1254 }));
1255 }
1256 }
1257
1258 return tokens;
1259 }
1260 /** Matches preceding whitespace if present */
1261
1262 }, {
1263 key: "getWhitespace",
1264 value: function getWhitespace(input) {
1265 var matches = input.match(WHITESPACE_REGEX);
1266 return matches ? matches[1] : '';
1267 }
1268 /** Attempts to match next token from input string, tests RegExp patterns in decreasing priority */
1269
1270 }, {
1271 key: "getNextToken",
1272 value: function getNextToken(input, previousToken) {
1273 return this.matchToken(_token__WEBPACK_IMPORTED_MODULE_2__.TokenType.LINE_COMMENT)(input) || this.matchToken(_token__WEBPACK_IMPORTED_MODULE_2__.TokenType.BLOCK_COMMENT)(input) || this.matchToken(_token__WEBPACK_IMPORTED_MODULE_2__.TokenType.STRING)(input) || this.matchToken(_token__WEBPACK_IMPORTED_MODULE_2__.TokenType.BLOCK_START)(input) || this.matchToken(_token__WEBPACK_IMPORTED_MODULE_2__.TokenType.BLOCK_END)(input) || this.getPlaceholderToken(input) || this.matchToken(_token__WEBPACK_IMPORTED_MODULE_2__.TokenType.NUMBER)(input) || this.getReservedWordToken(input, previousToken) || this.matchToken(_token__WEBPACK_IMPORTED_MODULE_2__.TokenType.WORD)(input) || this.matchToken(_token__WEBPACK_IMPORTED_MODULE_2__.TokenType.OPERATOR)(input);
1274 }
1275 /**
1276 * Attempts to match a placeholder token pattern
1277 * @return {Token | undefined} - The placeholder token if found, otherwise undefined
1278 */
1279
1280 }, {
1281 key: "getPlaceholderToken",
1282 value: function getPlaceholderToken(input) {
1283 var _this2 = this;
1284
1285 var _a, _b, _c;
1286
1287 var placeholderTokenRegexMap = [// pattern for placeholder with identifier name
1288 {
1289 regex: (_a = this.IDENT_NAMED_PLACEHOLDER_REGEX) !== null && _a !== void 0 ? _a : NULL_REGEX,
1290 parseKey: function parseKey(v) {
1291 return v.slice(1);
1292 }
1293 }, // pattern for placeholder with string name
1294 {
1295 regex: (_b = this.STRING_NAMED_PLACEHOLDER_REGEX) !== null && _b !== void 0 ? _b : NULL_REGEX,
1296 parseKey: function parseKey(v) {
1297 return _this2.getEscapedPlaceholderKey({
1298 key: v.slice(2, -1),
1299 quoteChar: v.slice(-1)
1300 });
1301 }
1302 }, // pattern for placeholder with numeric index
1303 {
1304 regex: (_c = this.INDEXED_PLACEHOLDER_REGEX) !== null && _c !== void 0 ? _c : NULL_REGEX,
1305 parseKey: function parseKey(v) {
1306 return v.slice(1);
1307 }
1308 }];
1309 return placeholderTokenRegexMap.reduce(function (acc, _ref) {
1310 var regex = _ref.regex,
1311 parseKey = _ref.parseKey;
1312
1313 var token = _this2.getTokenOnFirstMatch({
1314 input: input,
1315 regex: regex,
1316 type: _token__WEBPACK_IMPORTED_MODULE_2__.TokenType.PLACEHOLDER
1317 });
1318
1319 return token ? Object.assign(Object.assign({}, token), {
1320 key: parseKey(token.value)
1321 }) : acc;
1322 }, undefined);
1323 }
1324 }, {
1325 key: "getEscapedPlaceholderKey",
1326 value: function getEscapedPlaceholderKey(_ref2) {
1327 var key = _ref2.key,
1328 quoteChar = _ref2.quoteChar;
1329 return key.replace(new RegExp((0,_utils__WEBPACK_IMPORTED_MODULE_1__.escapeRegExp)('\\' + quoteChar), 'gu'), quoteChar);
1330 }
1331 /**
1332 * Attempts to match a Reserved word token pattern, avoiding edge cases of Reserved words within string tokens
1333 * @return {Token | undefined} - The Reserved word token if found, otherwise undefined
1334 */
1335
1336 }, {
1337 key: "getReservedWordToken",
1338 value: function getReservedWordToken(input, previousToken) {
1339 var _this3 = this;
1340
1341 // A reserved word cannot be preceded by a '.'
1342 // this makes it so in "mytable.from", "from" is not considered a reserved word
1343 if ((previousToken === null || previousToken === void 0 ? void 0 : previousToken.value) === '.') {
1344 return undefined;
1345 } // prioritised list of Reserved token types
1346
1347
1348 var reservedTokenList = [_token__WEBPACK_IMPORTED_MODULE_2__.TokenType.RESERVED_COMMAND, _token__WEBPACK_IMPORTED_MODULE_2__.TokenType.RESERVED_BINARY_COMMAND, _token__WEBPACK_IMPORTED_MODULE_2__.TokenType.RESERVED_DEPENDENT_CLAUSE, _token__WEBPACK_IMPORTED_MODULE_2__.TokenType.RESERVED_LOGICAL_OPERATOR, _token__WEBPACK_IMPORTED_MODULE_2__.TokenType.RESERVED_KEYWORD, _token__WEBPACK_IMPORTED_MODULE_2__.TokenType.RESERVED_JOIN_CONDITION];
1349 return reservedTokenList.reduce(function (matchedToken, tokenType) {
1350 return matchedToken || _this3.matchToken(tokenType)(input);
1351 }, undefined);
1352 }
1353 /**
1354 * Attempts to match RegExp from head of input, returning undefined if not found
1355 * @param {string} _.input - The string to match
1356 * @param {TokenType} _.type - The type of token to match against
1357 * @param {RegExp} _.regex - The regex to match
1358 * @return {Token | undefined} - The matched token if found, otherwise undefined
1359 */
1360
1361 }, {
1362 key: "getTokenOnFirstMatch",
1363 value: function getTokenOnFirstMatch(_ref3) {
1364 var input = _ref3.input,
1365 type = _ref3.type,
1366 regex = _ref3.regex;
1367 var matches = input.match(regex);
1368 return matches ? {
1369 type: type,
1370 value: matches[1]
1371 } : undefined;
1372 }
1373 }]);
1374
1375 return Tokenizer;
1376}();
1377
1378
1379
1380/***/ }),
1381
1382/***/ "./src/core/formatAliasPositions.ts":
1383/*!******************************************!*\
1384 !*** ./src/core/formatAliasPositions.ts ***!
1385 \******************************************/
1386/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1387
1388__webpack_require__.r(__webpack_exports__);
1389/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1390/* harmony export */ "default": () => (/* binding */ formatAliasPositions)
1391/* harmony export */ });
1392/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils */ "./src/utils.ts");
1393function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
1394
1395function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
1396
1397function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
1398
1399function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
1400
1401function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
1402
1403function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
1404
1405
1406/**
1407 * Handles select alias placement - tabulates if enabled
1408 */
1409
1410function formatAliasPositions(query) {
1411 var lines = query.split('\n');
1412 var newQuery = [];
1413
1414 for (var i = 0; i < lines.length; i++) {
1415 // find SELECT rows with trailing comma, if no comma (only one row) - no-op
1416 if (lines[i].match(/^\s*SELECT/i)) {
1417 var _ret = function () {
1418 var aliasLines = [];
1419
1420 if (lines[i].match(/.*,$/)) {
1421 aliasLines = [lines[i]]; // add select to aliasLines in case of tabular formats
1422 } else {
1423 newQuery.push(lines[i]); // add select to new query
1424
1425 if (lines[i].match(/^\s*SELECT\s+.+(?!,$)/i)) {
1426 return "continue";
1427 }
1428
1429 aliasLines.push(lines[++i]);
1430 } // get all lines in SELECT clause
1431
1432
1433 while (lines[i++].match(/.*,$/)) {
1434 aliasLines.push(lines[i]);
1435 } // break lines into alias with optional AS, and all preceding text
1436
1437
1438 var splitLines = aliasLines.map(function (line) {
1439 return {
1440 line: line,
1441 matches: line.match(/(^.*?\S) (AS )?(\S+,?$)/i)
1442 };
1443 }).map(function (_ref) {
1444 var line = _ref.line,
1445 matches = _ref.matches;
1446
1447 if (!matches) {
1448 return {
1449 precedingText: line
1450 };
1451 }
1452
1453 return {
1454 precedingText: matches[1],
1455 as: matches[2],
1456 alias: matches[3]
1457 };
1458 }); // get longest of precedingText, trim trailing comma for non-alias columns
1459
1460 var aliasMaxLength = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.maxLength)(splitLines.map(function (_ref2) {
1461 var precedingText = _ref2.precedingText;
1462 return precedingText.replace(/\s*,\s*$/, '');
1463 })); // re-construct line, aligning by inserting space before AS or alias
1464
1465 aliasLines = splitLines.map(function (_ref3) {
1466 var precedingText = _ref3.precedingText,
1467 as = _ref3.as,
1468 alias = _ref3.alias;
1469 return precedingText + (alias ? ' '.repeat(aliasMaxLength - precedingText.length + 1) + (as !== null && as !== void 0 ? as : '') + alias : '');
1470 });
1471 newQuery = [].concat(_toConsumableArray(newQuery), _toConsumableArray(aliasLines));
1472 }();
1473
1474 if (_ret === "continue") continue;
1475 }
1476
1477 newQuery.push(lines[i]);
1478 }
1479
1480 return newQuery.join('\n');
1481}
1482
1483/***/ }),
1484
1485/***/ "./src/core/formatCommaPositions.ts":
1486/*!******************************************!*\
1487 !*** ./src/core/formatCommaPositions.ts ***!
1488 \******************************************/
1489/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1490
1491__webpack_require__.r(__webpack_exports__);
1492/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1493/* harmony export */ "default": () => (/* binding */ formatCommaPositions)
1494/* harmony export */ });
1495/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils */ "./src/utils.ts");
1496/* harmony import */ var _Tokenizer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Tokenizer */ "./src/core/Tokenizer.ts");
1497function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
1498
1499function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
1500
1501function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
1502
1503function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
1504
1505function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
1506
1507function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
1508
1509
1510
1511/**
1512 * Handles comma placement - either before, after or tabulated
1513 */
1514
1515function formatCommaPositions(query, commaPosition, indent) {
1516 return groupCommaDelimitedLines(query.split('\n')).flatMap(function (commaLines) {
1517 if (commaLines.length === 1) {
1518 return commaLines;
1519 } else if (commaPosition === 'tabular') {
1520 return formatTabular(commaLines);
1521 } else if (commaPosition === 'before') {
1522 return formatBefore(commaLines, indent);
1523 } else {
1524 throw new Error("Unexpected commaPosition: ".concat(commaPosition));
1525 }
1526 }).join('\n');
1527}
1528/**
1529 * Given lines like this:
1530 *
1531 * [
1532 * 'SELECT',
1533 * ' foo,',
1534 * ' bar,',
1535 * ' baz',
1536 * 'FROM'
1537 * ]
1538 *
1539 * Returns groups like this:
1540 *
1541 * [
1542 * ['SELECT'],
1543 * [' foo,', ' bar,', ' baz'],
1544 * ['FROM']
1545 * ]
1546 */
1547
1548function groupCommaDelimitedLines(lines) {
1549 var groups = [];
1550
1551 for (var i = 0; i < lines.length; i++) {
1552 var group = [lines[i]]; // when line ends with comma,
1553 // gather together all following lines that also end with comma,
1554 // plus one (which doesn't end with comma)
1555
1556 while (lines[i].match(/.*,$/)) {
1557 i++;
1558 group.push(lines[i]);
1559 }
1560
1561 groups.push(group);
1562 }
1563
1564 return groups;
1565} // makes all lines the same length by appending spaces before comma
1566
1567
1568function formatTabular(commaLines) {
1569 var maxLineLength = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.maxLength)(commaLines);
1570 return trimTrailingCommas(commaLines).map(function (line, i) {
1571 if (i === commaLines.length - 1) {
1572 return line; // do not add comma for last item
1573 }
1574
1575 return line + ' '.repeat(maxLineLength - line.length - 1) + ',';
1576 });
1577}
1578
1579function formatBefore(commaLines, indent) {
1580 return trimTrailingCommas(commaLines).map(function (line, i) {
1581 if (i === 0) {
1582 return line; // do not add comma for first item
1583 }
1584
1585 var _ref = line.match(_Tokenizer__WEBPACK_IMPORTED_MODULE_1__.WHITESPACE_REGEX) || [''],
1586 _ref2 = _slicedToArray(_ref, 1),
1587 whitespace = _ref2[0];
1588
1589 return removeLastIndent(whitespace, indent) + indent.replace(/ {2}$/, ', ') + // add comma to the end of last indent
1590 line.trimStart();
1591 });
1592}
1593
1594function removeLastIndent(whitespace, indent) {
1595 return whitespace.replace(new RegExp(indent + '$'), '');
1596}
1597
1598function trimTrailingCommas(lines) {
1599 return lines.map(function (line) {
1600 return line.replace(/,$/, '');
1601 });
1602}
1603
1604/***/ }),
1605
1606/***/ "./src/core/regexFactory.ts":
1607/*!**********************************!*\
1608 !*** ./src/core/regexFactory.ts ***!
1609 \**********************************/
1610/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1611
1612__webpack_require__.r(__webpack_exports__);
1613/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1614/* harmony export */ "createLineCommentRegex": () => (/* binding */ createLineCommentRegex),
1615/* harmony export */ "createOperatorRegex": () => (/* binding */ createOperatorRegex),
1616/* harmony export */ "createParenRegex": () => (/* binding */ createParenRegex),
1617/* harmony export */ "createPlaceholderRegex": () => (/* binding */ createPlaceholderRegex),
1618/* harmony export */ "createReservedWordRegex": () => (/* binding */ createReservedWordRegex),
1619/* harmony export */ "createStringPattern": () => (/* binding */ createStringPattern),
1620/* harmony export */ "createStringRegex": () => (/* binding */ createStringRegex),
1621/* harmony export */ "createWordRegex": () => (/* binding */ createWordRegex)
1622/* harmony export */ });
1623/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils */ "./src/utils.ts");
1624
1625/**
1626 * Builds a RegExp containing all operators for a SQL dialect
1627 * @param {string} monadOperators - concatenated string of all 1-length operators
1628 * @param {string[]} polyadOperators - list of strings of all >1-length operators
1629 */
1630
1631var createOperatorRegex = function createOperatorRegex(monadOperators, polyadOperators) {
1632 return new RegExp("^(".concat((0,_utils__WEBPACK_IMPORTED_MODULE_0__.sortByLengthDesc)(polyadOperators).map(_utils__WEBPACK_IMPORTED_MODULE_0__.escapeRegExp).join('|'), "|") + "[".concat(monadOperators.split('').map(_utils__WEBPACK_IMPORTED_MODULE_0__.escapeRegExp).join(''), "])"), 'u');
1633};
1634/**
1635 * Builds a RegExp for valid line comments in a SQL dialect
1636 * @param {string[]} lineCommentTypes - list of character strings that denote line comments
1637 */
1638
1639var createLineCommentRegex = function createLineCommentRegex(lineCommentTypes) {
1640 return new RegExp("^((?:".concat(lineCommentTypes.map(function (c) {
1641 return (0,_utils__WEBPACK_IMPORTED_MODULE_0__.escapeRegExp)(c);
1642 }).join('|'), ").*?)(?:\r\n|\r|\n|$)"), 'u');
1643};
1644/**
1645 * Builds a RegExp for all Reserved Keywords in a SQL dialect
1646 * @param {string[]} reservedKeywords - list of strings of all Reserved Keywords
1647 * @param {string} specialWordChars - concatenated string of all special chars that can appear in valid identifiers (and not in Reserved Keywords)
1648 */
1649
1650var createReservedWordRegex = function createReservedWordRegex(reservedKeywords) {
1651 var specialWordChars = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
1652
1653 if (reservedKeywords.length === 0) {
1654 return /^\b$/;
1655 }
1656
1657 var reservedKeywordsPattern = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.sortByLengthDesc)(reservedKeywords).join('|').replace(/ /g, '\\s+');
1658 return new RegExp("^(".concat(reservedKeywordsPattern, ")(?![").concat((0,_utils__WEBPACK_IMPORTED_MODULE_0__.escapeRegExp)(specialWordChars), "]+)\\b"), 'iu');
1659};
1660/**
1661 * Builds a RegExp for valid identifiers in a SQL dialect
1662 * @param {Object} specialChars
1663 * @param {string} specialChars.any - concatenated string of chars that can appear anywhere in a valid identifier
1664 * @param {string} specialChars.prefix - concatenated string of chars that only appear at the beginning of a valid identifier
1665 * @param {string} specialChars.suffix - concatenated string of chars that only appear at the end of a valid identifier
1666 */
1667
1668var createWordRegex = function createWordRegex() {
1669 var specialChars = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
1670
1671 var _a, _b, _c;
1672
1673 var prefixLookBehind = "[".concat((0,_utils__WEBPACK_IMPORTED_MODULE_0__.escapeRegExp)((_a = specialChars.prefix) !== null && _a !== void 0 ? _a : ''), "]*");
1674 var suffixLookAhead = "[".concat((0,_utils__WEBPACK_IMPORTED_MODULE_0__.escapeRegExp)((_b = specialChars.suffix) !== null && _b !== void 0 ? _b : ''), "]*");
1675 var unicodeWordChar = '\\p{Alphabetic}\\p{Mark}\\p{Decimal_Number}\\p{Connector_Punctuation}\\p{Join_Control}';
1676 var specialWordChars = "".concat((0,_utils__WEBPACK_IMPORTED_MODULE_0__.escapeRegExp)((_c = specialChars.any) !== null && _c !== void 0 ? _c : ''));
1677 var arrayAccessor = '\\[\\d\\]';
1678 var mapAccessor = "\\[['\"][".concat(unicodeWordChar, "]+['\"]\\]");
1679 return new RegExp("^((".concat(prefixLookBehind, "([").concat(unicodeWordChar).concat(specialWordChars, "]+)").concat(suffixLookAhead, ")(").concat(arrayAccessor, "|").concat(mapAccessor, ")?)"), 'u');
1680}; // This enables the following string patterns:
1681// 1. backtick quoted string using `` to escape
1682// 2. square bracket quoted string (SQL Server) using ]] to escape
1683// 3. double quoted string using "" or \" to escape
1684// 4. single quoted string using '' or \' to escape
1685// 5. national character quoted string using N'' or N\' to escape
1686// 6. Unicode single-quoted string using \' to escape
1687// 7. Unicode double-quoted string using \" to escape
1688// 8. PostgreSQL dollar-quoted strings
1689
1690var patterns = {
1691 '``': '((`[^`]*($|`))+)',
1692 '{}': '((\\{[^\\}]*($|\\}))+)',
1693 '[]': '((\\[[^\\]]*($|\\]))(\\][^\\]]*($|\\]))*)',
1694 '""': '(("[^"\\\\]*(?:\\\\.[^"\\\\]*)*("|$))+)',
1695 "''": "(('[^'\\\\]*(?:\\\\.[^'\\\\]*)*('|$))+)",
1696 "N''": "((N'[^'\\\\]*(?:\\\\.[^'\\\\]*)*('|$))+)",
1697 "x''": "(([xX]'[^'\\\\]*(?:\\\\.[^'\\\\]*)*('|$))+)",
1698 "E''": "((E'[^'\\\\]*(?:\\\\.[^'\\\\]*)*('|$))+)",
1699 "U&''": "((U&'[^'\\\\]*(?:\\\\.[^'\\\\]*)*('|$))+)",
1700 'U&""': '((U&"[^"\\\\]*(?:\\\\.[^"\\\\]*)*("|$))+)',
1701 '$$': '((?<tag>\\$\\w*\\$)[\\s\\S]*?(?:\\k<tag>|$))'
1702};
1703/**
1704 * Builds a string pattern for matching string patterns for all given string types
1705 * @param {StringPatternType[]} stringTypes - list of strings that denote string patterns
1706 */
1707
1708var createStringPattern = function createStringPattern(stringTypes) {
1709 return stringTypes.map(function (t) {
1710 return patterns[t];
1711 }).join('|');
1712};
1713/**
1714 * Builds a RegExp for matching string patterns using `createStringPattern`
1715 * @param {StringPatternType[]} stringTypes - list of strings that denote string patterns
1716 */
1717
1718var createStringRegex = function createStringRegex(stringTypes) {
1719 return new RegExp('^(' + createStringPattern(stringTypes) + ')', 'u');
1720};
1721/** Escapes paren characters for RegExp patterns */
1722
1723var escapeParen = function escapeParen(paren) {
1724 if (paren.length === 1) {
1725 // A single punctuation character
1726 return (0,_utils__WEBPACK_IMPORTED_MODULE_0__.escapeRegExp)(paren);
1727 } else {
1728 // longer word
1729 return '\\b' + paren + '\\b';
1730 }
1731};
1732/**
1733 * Builds a RegExp for matching parenthesis patterns, escaping them with `escapeParen`
1734 * @param {string[]} parens - list of strings that denote parenthesis patterns
1735 */
1736
1737
1738var createParenRegex = function createParenRegex(parens) {
1739 return new RegExp('^(' + parens.map(escapeParen).join('|') + ')', 'iu');
1740};
1741/**
1742 * Builds a RegExp for placeholder patterns
1743 * @param {string[]} types - list of strings that denote placeholder types
1744 * @param {string} pattern - string that denotes placeholder pattern
1745 */
1746
1747var createPlaceholderRegex = function createPlaceholderRegex(types, pattern) {
1748 if ((0,_utils__WEBPACK_IMPORTED_MODULE_0__.isEmpty)(types)) {
1749 return undefined;
1750 }
1751
1752 var typesRegex = types.map(_utils__WEBPACK_IMPORTED_MODULE_0__.escapeRegExp).join('|');
1753 return new RegExp("^((?:".concat(typesRegex, ")(?:").concat(pattern, "))"), 'u');
1754};
1755
1756/***/ }),
1757
1758/***/ "./src/core/tabularStyle.ts":
1759/*!**********************************!*\
1760 !*** ./src/core/tabularStyle.ts ***!
1761 \**********************************/
1762/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1763
1764__webpack_require__.r(__webpack_exports__);
1765/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1766/* harmony export */ "replaceTabularPlaceholders": () => (/* binding */ replaceTabularPlaceholders),
1767/* harmony export */ "toTabularToken": () => (/* binding */ toTabularToken)
1768/* harmony export */ });
1769/* harmony import */ var _token__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./token */ "./src/core/token.ts");
1770function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
1771
1772function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
1773
1774function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
1775
1776function _toArray(arr) { return _arrayWithHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableRest(); }
1777
1778function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
1779
1780function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
1781
1782function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
1783
1784function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
1785
1786function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
1787
1788
1789/**
1790 * When tabular style enabled,
1791 * produces a 10-char wide version of reserved token.
1792 *
1793 * It'll be padded by zero-width space characters
1794 * instead of normal spaces, so that these spaces will survive
1795 * trimming of spaces in other parts of formatter.
1796 * They'll be converted to normal spaces in the end of
1797 * all the normal formatting with the replaceTabularPlaceholders()
1798 */
1799
1800function toTabularToken(token, indentStyle) {
1801 if (indentStyle === 'standard') {
1802 return token;
1803 }
1804
1805 var bufferItem = token.value; // store which part of keyword receives 10-space buffer
1806
1807 var tail = []; // rest of keyword
1808
1809 if (bufferItem.length >= 10 && bufferItem.includes(' ')) {
1810 // split for long keywords like INNER JOIN or UNION DISTINCT
1811 var _bufferItem$split = bufferItem.split(' ');
1812
1813 var _bufferItem$split2 = _toArray(_bufferItem$split);
1814
1815 bufferItem = _bufferItem$split2[0];
1816 tail = _bufferItem$split2.slice(1);
1817 }
1818
1819 if (indentStyle === 'tabularLeft') {
1820 bufferItem = bufferItem.padEnd(9, _token__WEBPACK_IMPORTED_MODULE_0__.ZWS);
1821 } else {
1822 bufferItem = bufferItem.padStart(9, _token__WEBPACK_IMPORTED_MODULE_0__.ZWS);
1823 }
1824
1825 return Object.assign(Object.assign({}, token), {
1826 value: bufferItem + [''].concat(_toConsumableArray(tail)).join(' ')
1827 });
1828}
1829/**
1830 * Replaces zero-width-spaces added by the above function
1831 */
1832
1833function replaceTabularPlaceholders(query) {
1834 return query.replace(new RegExp(_token__WEBPACK_IMPORTED_MODULE_0__.ZWS, 'ugim'), ' ');
1835}
1836
1837/***/ }),
1838
1839/***/ "./src/core/token.ts":
1840/*!***************************!*\
1841 !*** ./src/core/token.ts ***!
1842 \***************************/
1843/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1844
1845__webpack_require__.r(__webpack_exports__);
1846/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1847/* harmony export */ "EOF_TOKEN": () => (/* binding */ EOF_TOKEN),
1848/* harmony export */ "TokenType": () => (/* binding */ TokenType),
1849/* harmony export */ "ZWS": () => (/* binding */ ZWS),
1850/* harmony export */ "isCommand": () => (/* binding */ isCommand),
1851/* harmony export */ "isReserved": () => (/* binding */ isReserved),
1852/* harmony export */ "isToken": () => (/* binding */ isToken),
1853/* harmony export */ "testToken": () => (/* binding */ testToken)
1854/* harmony export */ });
1855/** Token type enum for all possible Token categories */
1856var TokenType;
1857
1858(function (TokenType) {
1859 TokenType["WORD"] = "WORD";
1860 TokenType["STRING"] = "STRING";
1861 TokenType["RESERVED_KEYWORD"] = "RESERVED_KEYWORD";
1862 TokenType["RESERVED_LOGICAL_OPERATOR"] = "RESERVED_LOGICAL_OPERATOR";
1863 TokenType["RESERVED_DEPENDENT_CLAUSE"] = "RESERVED_DEPENDENT_CLAUSE";
1864 TokenType["RESERVED_BINARY_COMMAND"] = "RESERVED_BINARY_COMMAND";
1865 TokenType["RESERVED_COMMAND"] = "RESERVED_COMMAND";
1866 TokenType["RESERVED_JOIN_CONDITION"] = "RESERVED_JOIN_CONDITION";
1867 TokenType["OPERATOR"] = "OPERATOR";
1868 TokenType["BLOCK_START"] = "BLOCK_START";
1869 TokenType["BLOCK_END"] = "BLOCK_END";
1870 TokenType["LINE_COMMENT"] = "LINE_COMMENT";
1871 TokenType["BLOCK_COMMENT"] = "BLOCK_COMMENT";
1872 TokenType["NUMBER"] = "NUMBER";
1873 TokenType["PLACEHOLDER"] = "PLACEHOLDER";
1874 TokenType["EOF"] = "EOF";
1875})(TokenType || (TokenType = {}));
1876/**
1877 * For use as a "missing token"
1878 * e.g. in lookAhead and lookBehind to avoid dealing with null values
1879 */
1880
1881
1882var EOF_TOKEN = {
1883 type: TokenType.EOF,
1884 value: '«EOF»'
1885};
1886/** Special Unicode character to serve as a placeholder for tabular formats as \w whitespace is unavailable */
1887
1888var ZWS = '​'; // uses zero-width space (&#8203; / U+200B)
1889
1890var ZWS_REGEX = "\u200B";
1891var spaces = "[".concat(ZWS_REGEX, "\\s]");
1892/** Checks if two tokens are equivalent */
1893
1894var testToken = function testToken(compareToken) {
1895 return function (token) {
1896 return token.type === compareToken.type && new RegExp("^".concat(spaces, "*").concat(compareToken.value).concat(spaces, "*$"), 'iu').test(token.value);
1897 };
1898};
1899/** Util object that allows for easy checking of Reserved Keywords */
1900
1901var isToken = {
1902 AS: testToken({
1903 value: 'AS',
1904 type: TokenType.RESERVED_KEYWORD
1905 }),
1906 AND: testToken({
1907 value: 'AND',
1908 type: TokenType.RESERVED_LOGICAL_OPERATOR
1909 }),
1910 BETWEEN: testToken({
1911 value: 'BETWEEN',
1912 type: TokenType.RESERVED_KEYWORD
1913 }),
1914 CASE: testToken({
1915 value: 'CASE',
1916 type: TokenType.BLOCK_START
1917 }),
1918 CAST: testToken({
1919 value: 'CAST',
1920 type: TokenType.RESERVED_KEYWORD
1921 }),
1922 BY: testToken({
1923 value: 'BY',
1924 type: TokenType.RESERVED_KEYWORD
1925 }),
1926 END: testToken({
1927 value: 'END',
1928 type: TokenType.BLOCK_END
1929 }),
1930 FROM: testToken({
1931 value: 'FROM',
1932 type: TokenType.RESERVED_COMMAND
1933 }),
1934 LIMIT: testToken({
1935 value: 'LIMIT',
1936 type: TokenType.RESERVED_COMMAND
1937 }),
1938 SELECT: testToken({
1939 value: 'SELECT',
1940 type: TokenType.RESERVED_COMMAND
1941 }),
1942 SET: testToken({
1943 value: 'SET',
1944 type: TokenType.RESERVED_COMMAND
1945 }),
1946 TABLE: testToken({
1947 value: 'TABLE',
1948 type: TokenType.RESERVED_KEYWORD
1949 }),
1950 WINDOW: testToken({
1951 value: 'WINDOW',
1952 type: TokenType.RESERVED_COMMAND
1953 }),
1954 WITH: testToken({
1955 value: 'WITH',
1956 type: TokenType.RESERVED_COMMAND
1957 })
1958};
1959/** Checks if token is a Reserved Command or Reserved Binary Command */
1960
1961var isCommand = function isCommand(token) {
1962 return token.type === TokenType.RESERVED_COMMAND || token.type === TokenType.RESERVED_BINARY_COMMAND;
1963};
1964/** Checks if token is any Reserved Keyword or Command */
1965
1966var isReserved = function isReserved(token) {
1967 return token.type === TokenType.RESERVED_KEYWORD || token.type === TokenType.RESERVED_LOGICAL_OPERATOR || token.type === TokenType.RESERVED_DEPENDENT_CLAUSE || token.type === TokenType.RESERVED_JOIN_CONDITION || token.type === TokenType.RESERVED_COMMAND || token.type === TokenType.RESERVED_BINARY_COMMAND;
1968};
1969
1970/***/ }),
1971
1972/***/ "./src/languages/bigquery.formatter.ts":
1973/*!*********************************************!*\
1974 !*** ./src/languages/bigquery.formatter.ts ***!
1975 \*********************************************/
1976/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1977
1978__webpack_require__.r(__webpack_exports__);
1979/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1980/* harmony export */ "default": () => (/* binding */ BigQueryFormatter)
1981/* harmony export */ });
1982/* harmony import */ var _core_Formatter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/Formatter */ "./src/core/Formatter.ts");
1983/* harmony import */ var _core_Tokenizer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/Tokenizer */ "./src/core/Tokenizer.ts");
1984/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils */ "./src/utils.ts");
1985function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
1986
1987function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
1988
1989function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
1990
1991function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
1992
1993function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
1994
1995function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
1996
1997function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
1998
1999function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
2000
2001function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
2002
2003function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
2004
2005function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
2006
2007function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
2008
2009function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
2010
2011function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
2012
2013function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
2014
2015function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
2016
2017function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
2018
2019
2020
2021
2022/**
2023 * Priority 5 (last)
2024 * Full list of reserved functions
2025 * distinct from Keywords due to interaction with parentheses
2026 */
2027
2028var reservedFunctions = {
2029 // https://cloud.google.com/bigquery/docs/reference/standard-sql/aead_encryption_functions
2030 aead: ['KEYS.NEW_KEYSET', 'KEYS.ADD_KEY_FROM_RAW_BYTES', 'AEAD.DECRYPT_BYTES', 'AEAD.DECRYPT_STRING', 'AEAD.ENCRYPT', 'KEYS.KEYSET_CHAIN', 'KEYS.KEYSET_FROM_JSON', 'KEYS.KEYSET_TO_JSON', 'KEYS.ROTATE_KEYSET', 'KEYS.KEYSET_LENGTH'],
2031 // https://cloud.google.com/bigquery/docs/reference/standard-sql/aggregate_analytic_functions
2032 aggregateAnalytic: ['ANY_VALUE', 'ARRAY_AGG', 'AVG', 'CORR', 'COUNT', 'COUNTIF', 'COVAR_POP', 'COVAR_SAMP', 'MAX', 'MIN', 'ST_CLUSTERDBSCAN', 'STDDEV_POP', 'STDDEV_SAMP', 'STRING_AGG', 'SUM', 'VAR_POP', 'VAR_SAMP'],
2033 // https://cloud.google.com/bigquery/docs/reference/standard-sql/aggregate_functions
2034 aggregate: ['ANY_VALUE', 'ARRAY_AGG', 'ARRAY_CONCAT_AGG', 'AVG', 'BIT_AND', 'BIT_OR', 'BIT_XOR', 'COUNT', 'COUNTIF', 'LOGICAL_AND', 'LOGICAL_OR', 'MAX', 'MIN', 'STRING_AGG', 'SUM'],
2035 // https://cloud.google.com/bigquery/docs/reference/standard-sql/approximate_aggregate_functions
2036 approximateAggregate: ['APPROX_COUNT_DISTINCT', 'APPROX_QUANTILES', 'APPROX_TOP_COUNT', 'APPROX_TOP_SUM'],
2037 // https://cloud.google.com/bigquery/docs/reference/standard-sql/array_functions
2038 array: ['ARRAY', 'ARRAY_CONCAT', 'ARRAY_LENGTH', 'ARRAY_TO_STRING', 'GENERATE_ARRAY', 'GENERATE_DATE_ARRAY', 'GENERATE_TIMESTAMP_ARRAY', 'ARRAY_REVERSE', 'OFFSET', 'SAFE_OFFSET', 'ORDINAL', 'SAFE_ORDINAL'],
2039 // https://cloud.google.com/bigquery/docs/reference/standard-sql/bit_functions
2040 bitwise: ['BIT_COUNT'],
2041 // https://cloud.google.com/bigquery/docs/reference/standard-sql/conversion_functions
2042 conversion: ['CASE', 'PARSE_BIGNUMERIC', 'PARSE_NUMERIC', 'SAFE_CAST'],
2043 // https://cloud.google.com/bigquery/docs/reference/standard-sql/date_functions
2044 date: ['CURRENT_DATE', 'EXTRACT', 'DATE', 'DATE_ADD', 'DATE_SUB', 'DATE_DIFF', 'DATE_TRUNC', 'DATE_FROM_UNIX_DATE', 'FORMAT_DATE', 'LAST_DAY', 'PARSE_DATE', 'UNIX_DATE'],
2045 // https://cloud.google.com/bigquery/docs/reference/standard-sql/datetime_functions
2046 datetime: ['CURRENT_DATETIME', 'DATETIME', 'EXTRACT', 'DATETIME_ADD', 'DATETIME_SUB', 'DATETIME_DIFF', 'DATETIME_TRUNC', 'FORMAT_DATETIME', 'LAST_DAY', 'PARSE_DATETIME'],
2047 // https://cloud.google.com/bigquery/docs/reference/standard-sql/debugging_functions
2048 debugging: ['ERROR'],
2049 // https://cloud.google.com/bigquery/docs/reference/standard-sql/federated_query_functions
2050 federatedQuery: ['EXTERNAL_QUERY'],
2051 // https://cloud.google.com/bigquery/docs/reference/standard-sql/geography_functions
2052 geography: ['S2_CELLIDFROMPOINT', 'S2_COVERINGCELLIDS', 'ST_ANGLE', 'ST_AREA', 'ST_ASBINARY', 'ST_ASGEOJSON', 'ST_ASTEXT', 'ST_AZIMUTH', 'ST_BOUNDARY', 'ST_BOUNDINGBOX', 'ST_BUFFER', 'ST_BUFFERWITHTOLERANCE', 'ST_CENTROID', 'ST_CENTROID_AGG', 'ST_CLOSESTPOINT', 'ST_CLUSTERDBSCAN', 'ST_CONTAINS', 'ST_CONVEXHULL', 'ST_COVEREDBY', 'ST_COVERS', 'ST_DIFFERENCE', 'ST_DIMENSION', 'ST_DISJOINT', 'ST_DISTANCE', 'ST_DUMP', 'ST_DWITHIN', 'ST_ENDPOINT', 'ST_EQUALS', 'ST_EXTENT', 'ST_EXTERIORRING', 'ST_GEOGFROM', 'ST_GEOGFROMGEOJSON', 'ST_GEOGFROMTEXT', 'ST_GEOGFROMWKB', 'ST_GEOGPOINT', 'ST_GEOGPOINTFROMGEOHASH', 'ST_GEOHASH', 'ST_GEOMETRYTYPE', 'ST_INTERIORRINGS', 'ST_INTERSECTION', 'ST_INTERSECTS', 'ST_INTERSECTSBOX', 'ST_ISCOLLECTION', 'ST_ISEMPTY', 'ST_LENGTH', 'ST_MAKELINE', 'ST_MAKEPOLYGON', 'ST_MAKEPOLYGONORIENTED', 'ST_MAXDISTANCE', 'ST_NPOINTS', 'ST_NUMGEOMETRIES', 'ST_NUMPOINTS', 'ST_PERIMETER', 'ST_POINTN', 'ST_SIMPLIFY', 'ST_SNAPTOGRID', 'ST_STARTPOINT', 'ST_TOUCHES', 'ST_UNION', 'ST_UNION_AGG', 'ST_WITHIN', 'ST_X', 'ST_Y'],
2053 // https://cloud.google.com/bigquery/docs/reference/standard-sql/hash_functions
2054 hash: ['FARM_FINGERPRINT', 'MD5', 'SHA1', 'SHA256', 'SHA512'],
2055 // https://cloud.google.com/bigquery/docs/reference/standard-sql/hll_functions
2056 hll: ['HLL_COUNT.INIT', 'HLL_COUNT.MERGE', 'HLL_COUNT.MERGE_PARTIAL', 'HLL_COUNT.EXTRACT'],
2057 // https://cloud.google.com/bigquery/docs/reference/standard-sql/interval_functions
2058 interval: ['MAKE_INTERVAL', 'EXTRACT', 'JUSTIFY_DAYS', 'JUSTIFY_HOURS', 'JUSTIFY_INTERVAL'],
2059 // https://cloud.google.com/bigquery/docs/reference/standard-sql/json_functions
2060 json: ['JSON_EXTRACT', 'JSON_QUERY', 'JSON_EXTRACT_SCALAR', 'JSON_VALUE', 'JSON_EXTRACT_ARRAY', 'JSON_QUERY_ARRAY', 'JSON_EXTRACT_STRING_ARRAY', 'JSON_VALUE_ARRAY', 'TO_JSON_STRING'],
2061 // https://cloud.google.com/bigquery/docs/reference/standard-sql/mathematical_functions
2062 math: ['ABS', 'SIGN', 'IS_INF', 'IS_NAN', 'IEEE_DIVIDE', 'RAND', 'SQRT', 'POW', 'POWER', 'EXP', 'LN', 'LOG', 'LOG10', 'GREATEST', 'LEAST', 'DIV', 'SAFE_DIVIDE', 'SAFE_MULTIPLY', 'SAFE_NEGATE', 'SAFE_ADD', 'SAFE_SUBTRACT', 'MOD', 'ROUND', 'TRUNC', 'CEIL', 'CEILING', 'FLOOR', 'COS', 'COSH', 'ACOS', 'ACOSH', 'SIN', 'SINH', 'ASIN', 'ASINH', 'TAN', 'TANH', 'ATAN', 'ATANH', 'ATAN2', 'RANGE_BUCKET'],
2063 // https://cloud.google.com/bigquery/docs/reference/standard-sql/navigation_functions
2064 navigation: ['FIRST_VALUE', 'LAST_VALUE', 'NTH_VALUE', 'LEAD', 'LAG', 'PERCENTILE_CONT', 'PERCENTILE_DISC'],
2065 // https://cloud.google.com/bigquery/docs/reference/standard-sql/net_functions
2066 net: ['NET.IP_FROM_STRING', 'NET.SAFE_IP_FROM_STRING', 'NET.IP_TO_STRING', 'NET.IP_NET_MASK', 'NET.IP_TRUNC', 'NET.IPV4_FROM_INT64', 'NET.IPV4_TO_INT64', 'NET.HOST', 'NET.PUBLIC_SUFFIX', 'NET.REG_DOMAIN'],
2067 // https://cloud.google.com/bigquery/docs/reference/standard-sql/numbering_functions
2068 numbering: ['RANK', 'DENSE_RANK', 'PERCENT_RANK', 'CUME_DIST', 'NTILE', 'ROW_NUMBER'],
2069 // https://cloud.google.com/bigquery/docs/reference/standard-sql/security_functions
2070 security: ['SESSION_USER'],
2071 // https://cloud.google.com/bigquery/docs/reference/standard-sql/statistical_aggregate_functions
2072 statisticalAggregate: ['CORR', 'COVAR_POP', 'COVAR_SAMP', 'STDDEV_POP', 'STDDEV_SAMP', 'STDDEV', 'VAR_POP', 'VAR_SAMP', 'VARIANCE'],
2073 // https://cloud.google.com/bigquery/docs/reference/standard-sql/string_functions
2074 string: ['ASCII', 'BYTE_LENGTH', 'CHAR_LENGTH', 'CHARACTER_LENGTH', 'CHR', 'CODE_POINTS_TO_BYTES', 'CODE_POINTS_TO_STRING', 'CONCAT', 'CONTAINS_SUBSTR', 'ENDS_WITH', 'FORMAT', 'FROM_BASE32', 'FROM_BASE64', 'FROM_HEX', 'INITCAP', 'INSTR', 'LEFT', 'LENGTH', 'LPAD', 'LOWER', 'LTRIM', 'NORMALIZE', 'NORMALIZE_AND_CASEFOLD', 'OCTET_LENGTH', 'REGEXP_CONTAINS', 'REGEXP_EXTRACT', 'REGEXP_EXTRACT_ALL', 'REGEXP_INSTR', 'REGEXP_REPLACE', 'REGEXP_SUBSTR', 'REPLACE', 'REPEAT', 'REVERSE', 'RIGHT', 'RPAD', 'RTRIM', 'SAFE_CONVERT_BYTES_TO_STRING', 'SOUNDEX', 'SPLIT', 'STARTS_WITH', 'STRPOS', 'SUBSTR', 'SUBSTRING', 'TO_BASE32', 'TO_BASE64', 'TO_CODE_POINTS', 'TO_HEX', 'TRANSLATE', 'TRIM', 'UNICODE', 'UPPER'],
2075 // https://cloud.google.com/bigquery/docs/reference/standard-sql/time_functions
2076 time: ['CURRENT_TIME', 'TIME', 'EXTRACT', 'TIME_ADD', 'TIME_SUB', 'TIME_DIFF', 'TIME_TRUNC', 'FORMAT_TIME', 'PARSE_TIME'],
2077 // https://cloud.google.com/bigquery/docs/reference/standard-sql/timestamp_functions
2078 timestamp: ['CURRENT_TIMESTAMP', 'EXTRACT', 'STRING', 'TIMESTAMP', 'TIMESTAMP_ADD', 'TIMESTAMP_SUB', 'TIMESTAMP_DIFF', 'TIMESTAMP_TRUNC', 'FORMAT_TIMESTAMP', 'PARSE_TIMESTAMP', 'TIMESTAMP_SECONDS', 'TIMESTAMP_MILLIS', 'TIMESTAMP_MICROS', 'UNIX_SECONDS', 'UNIX_MILLIS', 'UNIX_MICROS'],
2079 // https://cloud.google.com/bigquery/docs/reference/standard-sql/uuid_functions
2080 uuid: ['GENERATE_UUID'],
2081 // https://cloud.google.com/bigquery/docs/reference/standard-sql/conditional_expressions
2082 conditional: ['COALESCE', 'IF', 'IFNULL', 'NULLIF'],
2083 // https://cloud.google.com/bigquery/docs/reference/legacy-sql
2084 legacyAggregate: ['AVG', 'BIT_AND', 'BIT_OR', 'BIT_XOR', 'CORR', 'COUNT', 'COVAR_POP', 'COVAR_SAMP', 'EXACT_COUNT_DISTINCT', 'FIRST', 'GROUP_CONCAT', 'GROUP_CONCAT_UNQUOTED', 'LAST', 'MAX', 'MIN', 'NEST', 'NTH', 'QUANTILES', 'STDDEV', 'STDDEV_POP', 'STDDEV_SAMP', 'SUM', 'TOP', 'UNIQUE', 'VARIANCE', 'VAR_POP', 'VAR_SAMP'],
2085 legacyBitwise: ['BIT_COUNT'],
2086 legacyCasting: ['BOOLEAN', 'BYTES', 'CAST', 'FLOAT', 'HEX_STRING', 'INTEGER', 'STRING'],
2087 legacyComparison: [// expr 'IN',
2088 'COALESCE', 'GREATEST', 'IFNULL', 'IS_INF', 'IS_NAN', 'IS_EXPLICITLY_DEFINED', 'LEAST', 'NVL'],
2089 legacyDatetime: ['CURRENT_DATE', 'CURRENT_TIME', 'CURRENT_TIMESTAMP', 'DATE', 'DATE_ADD', 'DATEDIFF', 'DAY', 'DAYOFWEEK', 'DAYOFYEAR', 'FORMAT_UTC_USEC', 'HOUR', 'MINUTE', 'MONTH', 'MSEC_TO_TIMESTAMP', 'NOW', 'PARSE_UTC_USEC', 'QUARTER', 'SEC_TO_TIMESTAMP', 'SECOND', 'STRFTIME_UTC_USEC', 'TIME', 'TIMESTAMP', 'TIMESTAMP_TO_MSEC', 'TIMESTAMP_TO_SEC', 'TIMESTAMP_TO_USEC', 'USEC_TO_TIMESTAMP', 'UTC_USEC_TO_DAY', 'UTC_USEC_TO_HOUR', 'UTC_USEC_TO_MONTH', 'UTC_USEC_TO_WEEK', 'UTC_USEC_TO_YEAR', 'WEEK', 'YEAR'],
2090 legacyIp: ['FORMAT_IP', 'PARSE_IP', 'FORMAT_PACKED_IP', 'PARSE_PACKED_IP'],
2091 legacyJson: ['JSON_EXTRACT', 'JSON_EXTRACT_SCALAR'],
2092 legacyMath: ['ABS', 'ACOS', 'ACOSH', 'ASIN', 'ASINH', 'ATAN', 'ATANH', 'ATAN2', 'CEIL', 'COS', 'COSH', 'DEGREES', 'EXP', 'FLOOR', 'LN', 'LOG', 'LOG2', 'LOG10', 'PI', 'POW', 'RADIANS', 'RAND', 'ROUND', 'SIN', 'SINH', 'SQRT', 'TAN', 'TANH'],
2093 legacyRegex: ['REGEXP_MATCH', 'REGEXP_EXTRACT', 'REGEXP_REPLACE'],
2094 legacyString: ['CONCAT', // expr CONTAINS 'str'
2095 'INSTR', 'LEFT', 'LENGTH', 'LOWER', 'LPAD', 'LTRIM', 'REPLACE', 'RIGHT', 'RPAD', 'RTRIM', 'SPLIT', 'SUBSTR', 'UPPER'],
2096 legacyTableWildcard: ['TABLE_DATE_RANGE', 'TABLE_DATE_RANGE_STRICT', 'TABLE_QUERY'],
2097 legacyUrl: ['HOST', 'DOMAIN', 'TLD'],
2098 legacyWindow: ['AVG', 'COUNT', 'MAX', 'MIN', 'STDDEV', 'SUM', 'CUME_DIST', 'DENSE_RANK', 'FIRST_VALUE', 'LAG', 'LAST_VALUE', 'LEAD', 'NTH_VALUE', 'NTILE', 'PERCENT_RANK', 'PERCENTILE_CONT', 'PERCENTILE_DISC', 'RANK', 'RATIO_TO_REPORT', 'ROW_NUMBER'],
2099 legacyMisc: ['CURRENT_USER', 'EVERY', 'FROM_BASE64', 'HASH', 'FARM_FINGERPRINT', 'IF', 'POSITION', 'SHA1', 'SOME', 'TO_BASE64'],
2100 other: ['BQ.JOBS.CANCEL', 'BQ.REFRESH_MATERIALIZED_VIEW']
2101};
2102/**
2103 * Priority 5 (last)
2104 * Full list of reserved words
2105 * any words that are in a higher priority are removed
2106 */
2107
2108var reservedKeywords = {
2109 keywords: ['ALL', // 'AND',
2110 'ANY', // 'ARRAY',
2111 'AS', 'ASC', 'ASSERT_ROWS_MODIFIED', 'AT', 'BETWEEN', 'BY', // 'CASE',
2112 'CAST', 'COLLATE', 'CONTAINS', // 'CREATE',
2113 // 'CROSS',
2114 'CUBE', 'CURRENT', 'DEFAULT', 'DEFINE', 'DESC', 'DISTINCT', // 'ELSE',
2115 // 'END',
2116 'ENUM', 'ESCAPE', // 'EXCEPT',
2117 // 'EXCLUDE',
2118 'EXISTS', 'EXTRACT', 'FALSE', // 'FETCH',
2119 'FOLLOWING', 'FOR', // 'FROM',
2120 'FULL', // 'GROUP',
2121 'GROUPING', 'GROUPS', 'HASH', // 'HAVING',
2122 'IF', 'IGNORE', 'IN', // 'INNER',
2123 // 'INTERSECT',
2124 // 'INTERVAL',
2125 'INTO', 'IS', // 'JOIN',
2126 // 'LATERAL',
2127 // 'LEFT',
2128 'LIKE', // 'LIMIT',
2129 'LOOKUP', // 'MERGE',
2130 // 'NATURAL',
2131 'NEW', 'NO', 'NOT', 'NULL', 'NULLS', 'OF', // 'ON',
2132 // 'OR',
2133 // 'ORDER',
2134 // 'OUTER',
2135 'OVER', 'PARTITION', 'PRECEDING', 'PROTO', 'RANGE', 'RECURSIVE', 'RESPECT', // 'RIGHT',
2136 'ROLLUP', 'ROWS', // 'SELECT',
2137 // 'SET',
2138 'SOME', // 'STRUCT',
2139 'TABLE', // 'TABLESAMPLE',
2140 'THEN', 'TO', 'TREAT', 'TRUE', 'UNBOUNDED', // 'UNION',
2141 // 'UNNEST',
2142 // 'USING',
2143 // 'WHEN',
2144 // 'WHERE',
2145 // 'WINDOW',
2146 // 'WITH',
2147 'WITHIN'],
2148 datatypes: ['ARRAY', 'BOOL', 'BYTES', 'DATE', 'DATETIME', 'GEOGRAPHY', 'INTERVAL', 'INT64', 'INT', 'SMALLINT', 'INTEGER', 'BIGINT', 'TINYINT', 'BYTEINT', 'NUMERIC', 'DECIMAL', 'BIGNUMERIC', 'BIGDECIMAL', 'FLOAT64', 'STRING', 'STRUCT', 'TIME', 'TIMEZONE'],
2149 // https://cloud.google.com/bigquery/docs/reference/standard-sql/conversion_functions#formatting_syntax
2150 stringFormat: ['HEX', 'BASEX', 'BASE64M', 'ASCII', 'UTF-8', 'UTF8'],
2151 misc: ['SAFE']
2152};
2153/**
2154 * Priority 1 (first)
2155 * keywords that begin a new statement
2156 * will begin new indented block
2157 */
2158
2159var reservedCommands = [// DQL, https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax
2160'SELECT', 'FROM', 'UNNEST', 'PIVOT', 'UNPIVOT', 'TABLESAMPLE SYSTEM', 'WHERE', 'GROUP BY', 'HAVING', 'ORDER BY', 'QUALIFY', 'WINDOW', 'LIMIT', 'OFFSET', 'WITH', 'OMIT RECORD IF', // DML, https://cloud.google.com/bigquery/docs/reference/standard-sql/dml-syntax
2161'INSERT', 'INSERT INTO', 'VALUES', 'DELETE', // 'DELETE FROM',
2162'TRUNCATE TABLE', 'UPDATE', 'MERGE', 'MERGE INTO', // 'USING',
2163// DDL, https://cloud.google.com/bigquery/docs/reference/standard-sql/data-definition-language
2164'SET SCHEMA', 'CREATE SCHEMA', 'CREATE TABLE', 'CREATE TABLE LIKE', 'CREATE TABLE COPY', 'CREATE SNAPSHOT TABLE', 'CREATE TABLE CLONE', 'CREATE VIEW', 'CREATE MATERIALIZED VIEW', 'CREATE EXTERNAL TABLE', 'CREATE FUNCTION', 'CREATE TABLE FUNCTION', 'CREATE PROCEDURE', 'CREATE ROW ACCESS POLICY', 'ALTER SCHEMA SET OPTIONS', 'ALTER TABLE SET OPTIONS', 'ALTER TABLE ADD COLUMN', 'ALTER TABLE RENAME TO', 'ALTER TABLE DROP COLUMN', 'ALTER COLUMN SET OPTIONS', 'ALTER COLUMN DROP NOT NULL', 'ALTER COLUMN SET DATA TYPE', 'ALTER VIEW SET OPTIONS', 'ALTER MATERIALIZED VIEW SET OPTIONS', 'DROP SCHEMA', 'DROP TABLE', 'DROP SNAPSHOT TABLE', 'DROP EXTERNAL TABLE', 'DROP VIEW', 'DROP MATERIALIZED VIEW', 'DROP FUNCTION', 'DROP TABLE FUNCTION', 'DROP PROCEDURE', 'DROP ROW ACCESS POLICY', // DCL, https://cloud.google.com/bigquery/docs/reference/standard-sql/data-control-language
2165'GRANT', 'REVOKE', 'CREATE CAPACITY', 'CREATE RESERVATION', 'CREATE ASSIGNMENT', 'DROP CAPACITY', 'DROP RESERVATION', 'DROP ASSIGNMENT', // Script, https://cloud.google.com/bigquery/docs/reference/standard-sql/scripting
2166'DECLARE', 'SET', 'EXECUTE IMMEDIATE', 'LOOP', 'END LOOP', 'REPEAT', 'END REPEAT', 'WHILE', 'END WHILE', 'BREAK', 'LEAVE', 'CONTINUE', 'ITERATE', 'FOR', 'END FOR', 'BEGIN', 'BEGIN TRANSACTION', 'COMMIT TRANSACTION', 'ROLLBACK TRANSACTION', 'RAISE', 'RETURN', 'CALL', // Debug, https://cloud.google.com/bigquery/docs/reference/standard-sql/debugging-statements
2167'ASSERT', // Other, https://cloud.google.com/bigquery/docs/reference/standard-sql/other-statements
2168'EXPORT DATA'];
2169/**
2170 * Priority 2
2171 * commands that operate on two tables or subqueries
2172 * two main categories: joins and boolean set operators
2173 */
2174
2175var reservedBinaryCommands = [// set booleans
2176'INTERSECT', 'INTERSECT ALL', 'INTERSECT DISTINCT', 'UNION', 'UNION ALL', 'UNION DISTINCT', 'EXCEPT', 'EXCEPT ALL', 'EXCEPT DISTINCT', // joins
2177'JOIN', 'INNER JOIN', 'LEFT JOIN', 'LEFT OUTER JOIN', 'RIGHT JOIN', 'RIGHT OUTER JOIN', 'FULL JOIN', 'FULL OUTER JOIN', 'CROSS JOIN'];
2178/**
2179 * Priority 3
2180 * keywords that follow a previous Statement, must be attached to subsequent data
2181 * can be fully inline or on newline with optional indent
2182 */
2183
2184var reservedDependentClauses = ['WHEN', 'ELSE']; // https://cloud.google.com/bigquery/docs/reference/#standard-sql-reference
2185
2186var BigQueryFormatter = /*#__PURE__*/function (_Formatter) {
2187 _inherits(BigQueryFormatter, _Formatter);
2188
2189 var _super = _createSuper(BigQueryFormatter);
2190
2191 function BigQueryFormatter() {
2192 _classCallCheck(this, BigQueryFormatter);
2193
2194 return _super.apply(this, arguments);
2195 }
2196
2197 _createClass(BigQueryFormatter, [{
2198 key: "tokenizer",
2199 value: // TODO: handle trailing comma in select clause
2200 function tokenizer() {
2201 return new _core_Tokenizer__WEBPACK_IMPORTED_MODULE_1__["default"]({
2202 reservedCommands: BigQueryFormatter.reservedCommands,
2203 reservedBinaryCommands: BigQueryFormatter.reservedBinaryCommands,
2204 reservedDependentClauses: BigQueryFormatter.reservedDependentClauses,
2205 reservedJoinConditions: BigQueryFormatter.reservedJoinConditions,
2206 reservedLogicalOperators: BigQueryFormatter.reservedLogicalOperators,
2207 reservedKeywords: BigQueryFormatter.fullReservedWords,
2208 stringTypes: BigQueryFormatter.stringTypes,
2209 blockStart: BigQueryFormatter.blockStart,
2210 blockEnd: BigQueryFormatter.blockEnd,
2211 indexedPlaceholderTypes: BigQueryFormatter.indexedPlaceholderTypes,
2212 namedPlaceholderTypes: BigQueryFormatter.namedPlaceholderTypes,
2213 lineCommentTypes: BigQueryFormatter.lineCommentTypes,
2214 specialWordChars: BigQueryFormatter.specialWordChars,
2215 operators: BigQueryFormatter.operators
2216 });
2217 }
2218 }, {
2219 key: "tokenOverride",
2220 value: function tokenOverride(token) {
2221 if ((/ARRAY/i.test(token.value) || /STRUCT/i.test(token.value)) && this.tokenLookAhead().value === '<') {
2222 var level = 0;
2223 var finalToken = token.value;
2224
2225 do {
2226 var nextToken = this.tokenLookAhead();
2227
2228 if (nextToken.value === '>' || nextToken.value === '>>') {
2229 level -= nextToken.value.length;
2230 } else if (nextToken.value === '<') {
2231 level++;
2232 }
2233
2234 finalToken += this.tokens.splice(this.index + 1, 1)[0].value;
2235 } while (level > 0);
2236
2237 return Object.assign(Object.assign({}, token), {
2238 value: finalToken
2239 });
2240 }
2241
2242 return token;
2243 }
2244 }]);
2245
2246 return BigQueryFormatter;
2247}(_core_Formatter__WEBPACK_IMPORTED_MODULE_0__["default"]);
2248
2249
2250BigQueryFormatter.reservedCommands = reservedCommands;
2251BigQueryFormatter.reservedBinaryCommands = reservedBinaryCommands;
2252BigQueryFormatter.reservedDependentClauses = reservedDependentClauses;
2253BigQueryFormatter.reservedJoinConditions = ['ON', 'USING'];
2254BigQueryFormatter.reservedLogicalOperators = ['AND', 'OR'];
2255BigQueryFormatter.fullReservedWords = (0,_utils__WEBPACK_IMPORTED_MODULE_2__.dedupe)([].concat(_toConsumableArray(Object.values(reservedFunctions).reduce(function (acc, arr) {
2256 return [].concat(_toConsumableArray(acc), _toConsumableArray(arr));
2257}, [])), _toConsumableArray(Object.values(reservedKeywords).reduce(function (acc, arr) {
2258 return [].concat(_toConsumableArray(acc), _toConsumableArray(arr));
2259}, []))));
2260BigQueryFormatter.stringTypes = ['""', "''", '``']; // add: '''''', """""" ; prefixes: r, b
2261
2262BigQueryFormatter.blockStart = ['(', 'CASE'];
2263BigQueryFormatter.blockEnd = [')', 'END'];
2264BigQueryFormatter.indexedPlaceholderTypes = ['?'];
2265BigQueryFormatter.namedPlaceholderTypes = [];
2266BigQueryFormatter.lineCommentTypes = ['--', '#'];
2267BigQueryFormatter.specialWordChars = {
2268 any: '_@$-'
2269};
2270BigQueryFormatter.operators = ['>>', '<<', '||'];
2271
2272/***/ }),
2273
2274/***/ "./src/languages/db2.formatter.ts":
2275/*!****************************************!*\
2276 !*** ./src/languages/db2.formatter.ts ***!
2277 \****************************************/
2278/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2279
2280__webpack_require__.r(__webpack_exports__);
2281/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2282/* harmony export */ "default": () => (/* binding */ Db2Formatter)
2283/* harmony export */ });
2284/* harmony import */ var _core_Formatter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/Formatter */ "./src/core/Formatter.ts");
2285/* harmony import */ var _core_Tokenizer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/Tokenizer */ "./src/core/Tokenizer.ts");
2286/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils */ "./src/utils.ts");
2287function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
2288
2289function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
2290
2291function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
2292
2293function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
2294
2295function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
2296
2297function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
2298
2299function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
2300
2301function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
2302
2303function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
2304
2305function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
2306
2307function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
2308
2309function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
2310
2311function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
2312
2313function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
2314
2315function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
2316
2317function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
2318
2319function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
2320
2321
2322
2323
2324/**
2325 * Priority 5 (last)
2326 * Full list of reserved functions
2327 * distinct from Keywords due to interaction with parentheses
2328 */
2329
2330var reservedFunctions = {
2331 // https://www.ibm.com/docs/en/db2-for-zos/11?topic=functions-aggregate
2332 aggregate: ['ARRAY_AGG', 'AVG', 'CORR', 'CORRELATION', 'COUNT', 'COUNT_BIG', 'COVAR_POP', 'COVARIANCE', 'COVAR', 'COVAR_SAMP', 'COVARIANCE_SAMP', 'CUME_DIST', 'GROUPING', 'LISTAGG', 'MAX', 'MEDIAN', 'MIN', 'PERCENTILE_CONT', 'PERCENTILE_DISC', 'PERCENT_RANK', 'REGR_AVGX', 'REGR_AVGY', 'REGR_COUNT', 'REGR_INTERCEPT', 'REGR_ICPT', 'REGR_R2', 'REGR_SLOPE', 'REGR_SXX', 'REGR_SXY', 'REGR_SYY', 'STDDEV_POP', 'STDDEV', 'STDDEV_SAMP', 'SUM', 'VAR_POP', 'VARIANCE', 'VAR', 'VAR_SAMP', 'VARIANCE_SAMP', 'XMLAGG'],
2333 // https://www.ibm.com/docs/en/db2-for-zos/11?topic=functions-scalar
2334 scalar: ['ABS', 'ABSVAL', 'ACOS', 'ADD_DAYS', 'ADD_MONTHS', 'ARRAY_DELETE', 'ARRAY_FIRST', 'ARRAY_LAST', 'ARRAY_NEXT', 'ARRAY_PRIOR', 'ARRAY_TRIM', 'ASCII', 'ASCII_CHR', 'ASCII_STR', 'ASCIISTR', 'ASIN', 'ATAN', 'ATANH', 'ATAN2', 'BIGINT', 'BINARY', 'BITAND', 'BITANDNOT', 'BITOR', 'BITXOR', 'BITNOT', 'BLOB', 'BTRIM', 'CARDINALITY', 'CCSID_ENCODING', 'CEILING', 'CEIL', 'CHAR', 'CHAR9', 'CHARACTER_LENGTH', 'CHAR_LENGTH', 'CHR', 'CLOB', 'COALESCE', 'COLLATION_KEY', 'COMPARE_DECFLOAT', 'CONCAT', 'CONTAINS', 'COS', 'COSH', 'DATE', 'DAY', 'DAYOFMONTH', 'DAYOFWEEK', 'DAYOFWEEK_ISO', 'DAYOFYEAR', 'DAYS', 'DAYS_BETWEEN', 'DBCLOB', 'DECFLOAT', 'DECFLOAT_FORMAT', 'DECFLOAT_SORTKEY', 'DECIMAL', 'DEC', 'DECODE', 'DECRYPT_BINARY', 'DECRYPT_BIT', 'DECRYPT_CHAR', 'DECRYPT_DB', 'DECRYPT_DATAKEY_BIGINT', 'DECRYPT_DATAKEY_BIT', 'DECRYPT_DATAKEY_CLOB', 'DECRYPT_DATAKEY_DBCLOB', 'DECRYPT_DATAKEY_DECIMAL', 'DECRYPT_DATAKEY_INTEGER', 'DECRYPT_DATAKEY_VARCHAR', 'DECRYPT_DATAKEY_VARGRAPHIC', 'DEGREES', 'DIFFERENCE', 'DIGITS', 'DOUBLE_PRECISION', 'DOUBLE', 'DSN_XMLVALIDATE', 'EBCDIC_CHR', 'EBCDIC_STR', 'ENCRYPT_DATAKEY', 'ENCRYPT_TDES', 'EXP', 'EXTRACT', 'FLOAT', 'FLOOR', 'GENERATE_UNIQUE', 'GENERATE_UNIQUE_BINARY', 'GETHINT', 'GETVARIABLE', 'GRAPHIC', 'GREATEST', 'HASH', 'HASH_CRC32', 'HASH_MD5', 'HASH_SHA1', 'HASH_SHA256', 'HEX', 'HOUR', 'IDENTITY_VAL_LOCAL', 'IFNULL', 'INSERT', 'INSTR', 'INTEGER', 'INT', 'JULIAN_DAY', 'LAST_DAY', 'LCASE', 'LEAST', 'LEFT', 'LENGTH', 'LN', 'LOCATE', 'LOCATE_IN_STRING', 'LOG10', 'LOWER', 'LPAD', 'LTRIM', 'MAX', 'MAX_CARDINALITY', 'MICROSECOND', 'MIDNIGHT_SECONDS', 'MIN', 'MINUTE', 'MOD', 'MONTH', 'MONTHS_BETWEEN', 'MQREAD', 'MQREADCLOB', 'MQRECEIVE', 'MQRECEIVECLOB', 'MQSEND', 'MULTIPLY_ALT', 'NEXT_DAY', 'NEXT_MONTH', 'NORMALIZE_DECFLOAT', 'NORMALIZE_STRING', 'NULLIF', 'NVL', 'OVERLAY', 'PACK', 'POSITION', 'POSSTR', 'POWER', 'POW', 'QUANTIZE', 'QUARTER', 'RADIANS', 'RAISE_ERROR', 'RANDOM', 'RAND', 'REAL', 'REGEXP_COUNT', 'REGEXP_INSTR', 'REGEXP_LIKE', 'REGEXP_REPLACE', 'REGEXP_SUBSTR', 'REPEAT', 'REPLACE', 'RID', 'RIGHT', 'ROUND', 'ROUND_TIMESTAMP', 'ROWID', 'RPAD', 'RTRIM', 'SCORE', 'SECOND', 'SIGN', 'SIN', 'SINH', 'SMALLINT', 'SOUNDEX', 'SOAPHTTPC', 'SOAPHTTPV', 'SOAPHTTPNC', 'SOAPHTTPNV', 'SPACE', 'SQRT', 'STRIP', 'STRLEFT', 'STRPOS', 'STRRIGHT', 'SUBSTR', 'SUBSTRING', 'TAN', 'TANH', 'TIME', 'TIMESTAMP', 'TIMESTAMPADD', 'TIMESTAMPDIFF', 'TIMESTAMP_FORMAT', 'TIMESTAMP_ISO', 'TIMESTAMP_TZ', 'TO_CHAR', 'TO_CLOB', 'TO_DATE', 'TO_NUMBER', 'TOTALORDER', 'TO_TIMESTAMP', 'TRANSLATE', 'TRIM', 'TRIM_ARRAY', 'TRUNCATE', 'TRUNC', 'TRUNC_TIMESTAMP', 'UCASE', 'UNICODE', 'UNICODE_STR', 'UNISTR', 'UPPER', 'VALUE', 'VARBINARY', 'VARCHAR', 'VARCHAR9', 'VARCHAR_BIT_FORMAT', 'VARCHAR_FORMAT', 'VARGRAPHIC', 'VERIFY_GROUP_FOR_USER', 'VERIFY_ROLE_FOR_USER', 'VERIFY_TRUSTED_CONTEXT_ROLE_FOR_USER', 'WEEK', 'WEEK_ISO', 'WRAP', 'XMLATTRIBUTES', 'XMLCOMMENT', 'XMLCONCAT', 'XMLDOCUMENT', 'XMLELEMENT', 'XMLFOREST', 'XMLMODIFY', 'XMLNAMESPACES', 'XMLPARSE', 'XMLPI', 'XMLQUERY', 'XMLSERIALIZE', 'XMLTEXT', 'XMLXSROBJECTID', 'XSLTRANSFORM', 'YEAR'],
2335 // https://www.ibm.com/docs/en/db2-for-zos/11?topic=functions-table
2336 table: ['ADMIN_TASK_LIST', 'ADMIN_TASK_OUTPUT', 'ADMIN_TASK_STATUS', 'BLOCKING_THREADS', 'MQREADALL', 'MQREADALLCLOB', 'MQRECEIVEALL', 'MQRECEIVEALLCLOB', 'XMLTABLE'],
2337 // https://www.ibm.com/docs/en/db2-for-zos/11?topic=functions-row
2338 row: ['UNPACK'],
2339 // https://www.ibm.com/docs/en/db2-for-zos/12?topic=expressions-olap-specification
2340 olap: ['FIRST_VALUE', 'LAG', 'LAST_VALUE', 'LEAD', 'NTH_VALUE', 'NTILE', 'RATIO_TO_REPORT']
2341};
2342/**
2343 * Priority 5 (last)
2344 * Full list of reserved words
2345 * any words that are in a higher priority are removed
2346 */
2347
2348var reservedKeywords = {
2349 // https://www.ibm.com/docs/en/db2-for-zos/11?topic=words-reserved#db2z_reservedwords__newresword
2350 standard: ['ALL', 'ALLOCATE', 'ALLOW', 'ALTERAND', 'ANY', 'AS', 'ARRAY', 'ARRAY_EXISTS', 'ASENSITIVE', 'ASSOCIATE', 'ASUTIME', 'AT', 'AUDIT', 'AUX', 'AUXILIARY', 'BEFORE', 'BEGIN', 'BETWEEN', 'BUFFERPOOL', 'BY', 'CAPTURE', 'CASCADED', 'CASE', 'CAST', 'CCSID', 'CHARACTER', 'CHECK', 'CLONE', 'CLUSTER', 'COLLECTION', 'COLLID', 'COLUMN', 'CONDITION', 'CONNECTION', 'CONSTRAINT', 'CONTENT', 'CONTINUE', 'CREATE', 'CUBE', 'CURRENT', 'CURRENT_DATE', 'CURRENT_LC_CTYPE', 'CURRENT_PATH', 'CURRENT_SCHEMA', 'CURRENT_TIME', 'CURRENT_TIMESTAMP', 'CURRVAL', 'CURSOR', 'DATA', 'DATABASE', 'DBINFO', 'DECLARE', 'DEFAULT', 'DESCRIPTOR', 'DETERMINISTIC', 'DISABLE', 'DISALLOW', 'DISTINCT', 'DO', 'DOCUMENT', 'DSSIZE', 'DYNAMIC', 'EDITPROC', 'ENCODING', 'ENCRYPTION', 'ENDING', 'END-EXEC', 'ERASE', 'ESCAPE', 'EXCEPTION', 'EXISTS', 'EXIT', 'EXTERNAL', 'FENCED', 'FIELDPROC', 'FINAL', 'FIRST', 'FOR', 'FREE', 'FULL', 'FUNCTION', 'GENERATED', 'GET', 'GLOBAL', 'GOTO', 'GROUP', 'HANDLER', 'HOLD', 'HOURS', 'IF', 'IMMEDIATE', 'IN', 'INCLUSIVE', 'INDEX', 'INHERIT', 'INNER', 'INOUT', 'INSENSITIVE', 'INTO', 'IS', 'ISOBID', 'ITERATE', 'JAR', 'KEEP', 'KEY', 'LANGUAGE', 'LAST', 'LC_CTYPE', 'LEAVE', 'LIKE', 'LOCAL', 'LOCALE', 'LOCATOR', 'LOCATORS', 'LOCK', 'LOCKMAX', 'LOCKSIZE', 'LONG', 'LOOP', 'MAINTAINED', 'MATERIALIZED', 'MICROSECONDS', 'MINUTEMINUTES', 'MODIFIES', 'MONTHS', 'NEXT', 'NEXTVAL', 'NO', 'NONE', 'NOT', 'NULL', 'NULLS', 'NUMPARTS', 'OBID', 'OF', 'OLD', 'ON DELETE', 'ON UPDATE', 'OPTIMIZATION', 'OPTIMIZE', 'ORDER', 'ORGANIZATION', 'OUT', 'OUTER', 'PACKAGE', 'PARAMETER', 'PART', 'PADDED', 'PARTITION', 'PARTITIONED', 'PARTITIONING', 'PATH', 'PIECESIZE', 'PERIOD', 'PLAN', 'PRECISION', 'PREVVAL', 'PRIOR', 'PRIQTY', 'PRIVILEGES', 'PROCEDURE', 'PROGRAM', 'PSID', 'PUBLIC', 'QUERY', 'QUERYNO', 'READS', 'REFERENCES', 'RESIGNAL', 'RESTRICT', 'RESULT', 'RESULT_SET_LOCATOR', 'RETURN', 'RETURNS', 'ROLE', 'ROLLUP', 'ROUND_CEILING', 'ROUND_DOWN', 'ROUND_FLOOR', 'ROUND_HALF_DOWN', 'ROUND_HALF_EVEN', 'ROUND_HALF_UP', 'ROUND_UP', 'ROW', 'ROWSET', 'SCHEMA', 'SCRATCHPAD', 'SECONDS', 'SECQTY', 'SECURITY', 'SEQUENCE', 'SENSITIVE', 'SESSION_USER', 'SIMPLE', 'SOME', 'SOURCE', 'SPECIFIC', 'STANDARD', 'STATIC', 'STATEMENT', 'STAY', 'STOGROUP', 'STORES', 'STYLE', 'SUMMARY', 'SYNONYM', 'SYSDATE', 'SYSTEM', 'SYSTIMESTAMP', 'TABLE', 'TABLESPACE', 'THEN', 'TO', 'TRIGGER', 'TYPE', 'UNDO', 'UNIQUE', 'UNTIL', 'USER', 'VALIDPROC', 'VARIABLE', 'VARIANT', 'VCAT', 'VERSIONING', 'VIEW', 'VOLATILE', 'VOLUMES', 'WHILE', 'WLM', 'XMLEXISTS', 'XMLCAST', 'YEARS', 'ZONE'],
2351 // https://www.ibm.com/docs/en/db2-for-zos/11?topic=utilities-db2-online
2352 onlineUtilies: ['BACKUP SYSTEM', 'CATENFM', 'CATMAINT', 'CHECK DATA', 'CHECK INDEX', 'CHECK LOB', 'COPY', 'COPYTOCOPY', 'DIAGNOSE', 'EXEC SQL', 'LISTDEF', 'LOAD', 'MERGECOPY', 'MODIFY RECOVERY', 'MODIFY STATISTICS', 'OPTIONS', 'QUIESCE', 'REBUILD INDEX', 'RECOVER', 'REORG INDEX', 'REORG TABLESPACE', 'REPAIR', 'REPORT', 'RESTORE SYSTEM', 'RUNSTATS', 'STOSPACE', 'TEMPLATE', 'UNLOAD'],
2353 // https://www.ibm.com/docs/en/db2-for-zos/11?topic=db2-commands
2354 commands: ['ABEND', 'ACCESS DATABASE', 'ALTER BUFFERPOOL', 'ALTER GROUPBUFFERPOOL', 'ALTER UTILITY', 'ARCHIVE LOG', 'BIND PACKAGE', 'BIND PLAN', 'BIND QUERY', 'BIND SERVICE', 'BIND', 'REBIND', 'CANCEL THREAD', 'DCLGEN', 'DISPLAY ACCEL', 'DISPLAY ARCHIVE', 'DISPLAY BLOCKERS', 'DISPLAY BUFFERPOOL', 'DISPLAY DATABASE', 'DISPLAY DDF', 'DISPLAY FUNCTION SPECIFIC', 'DISPLAY GROUP', 'DISPLAY GROUPBUFFERPOOL', 'DISPLAY LOCATION', 'DISPLAY LOG', 'DISPLAY PROCEDURE', 'DISPLAY PROFILE', 'DISPLAY RLIMIT', 'DISPLAY RESTSVC', 'DISPLAY THREAD', 'DISPLAY TRACE', 'DISPLAY UTILITY', 'DSN', 'DSNH', 'END', 'FREE PACKAGE', 'FREE PLAN', 'FREE QUERY', 'FREE SERVICE', 'MODIFY admtproc,APPL=SHUTDOWN', 'MODIFY admtproc,APPL=TRACE', 'MODIFY DDF', 'MODIFY irlmproc,ABEND', 'MODIFY irlmproc,DIAG', 'MODIFY irlmproc,PURGE', 'MODIFY irlmproc,SET', 'MODIFY irlmproc,STATUS', 'MODIFY TRACE', 'REBIND PACKAGE', 'REBIND PLAN', 'REBIND TRIGGER PACKAGE', 'RECOVER BSDS', 'RECOVER INDOUBT', 'RECOVER POSTPONED', 'REFRESH DB2,EARLY', 'RESET GENERICLU', 'RESET INDOUBT', 'RUN', 'SET ARCHIVE', 'SET LOG', 'SET SYSPARM', 'SPUFI', 'START ACCEL', 'START admtproc', 'START CDDS', 'START DATABASE', 'START DB2', 'START DDF', 'START FUNCTION SPECIFIC', 'START irlmproc', 'START PROCEDURE', 'START PROFILE', 'START RLIMIT', 'START RESTSVC', 'START TRACE', 'STOP ACCEL', 'STOP admtproc', 'STOP CDDS', 'STOP DATABASE', 'STOP DB2', 'STOP DDF', 'STOP FUNCTION SPECIFIC', 'STOP irlmproc', 'STOP PROCEDURE', 'STOP PROFILE', 'STOP RLIMIT', 'STOP RESTSVC', 'STOP TRACE', 'TERM UTILITY', 'TRACE CT']
2355};
2356/**
2357 * Priority 1 (first)
2358 * keywords that begin a new statement
2359 * will begin new indented block
2360 */
2361// https://www.ibm.com/docs/en/db2-for-zos/11?topic=statements-list-supported
2362
2363var reservedCommands = ['ALLOCATE CURSOR', 'ALTER DATABASE', 'ALTER FUNCTION', 'ALTER INDEX', 'ALTER MASK', 'ALTER PERMISSION', 'ALTER PROCEDURE', 'ALTER SEQUENCE', 'ALTER STOGROUP', 'ALTER TABLE', 'ALTER TABLESPACE', 'ALTER TRIGGER', 'ALTER TRUSTED CONTEXT', 'ALTER VIEW', 'ASSOCIATE LOCATORS', 'BEGIN DECLARE SECTION', 'CALL', 'CLOSE', 'COMMENT', 'COMMIT', 'CONNECT', 'CREATE ALIAS', 'CREATE AUXILIARY TABLE', 'CREATE DATABASE', 'CREATE FUNCTION', 'CREATE GLOBAL TEMPORARY TABLE', 'CREATE INDEX', 'CREATE LOB TABLESPACE', 'CREATE MASK', 'CREATE PERMISSION', 'CREATE PROCEDURE', 'CREATE ROLE', 'CREATE SEQUENCE', 'CREATE STOGROUP', 'CREATE SYNONYM', 'CREATE TABLE', 'CREATE TABLESPACE', 'CREATE TRIGGER', 'CREATE TRUSTED CONTEXT', 'CREATE TYPE', 'CREATE VARIABLE', 'CREATE VIEW', 'DECLARE CURSOR', 'DECLARE GLOBAL TEMPORARY TABLE', 'DECLARE STATEMENT', 'DECLARE TABLE', 'DECLARE VARIABLE', 'DELETE', 'DESCRIBE CURSOR', 'DESCRIBE INPUT', 'DESCRIBE OUTPUT', 'DESCRIBE PROCEDURE', 'DESCRIBE TABLE', 'DROP', 'END DECLARE SECTION', 'EXCHANGE', 'EXECUTE', 'EXECUTE IMMEDIATE', 'EXPLAIN', 'FETCH', 'FREE LOCATOR', 'GET DIAGNOSTICS', 'GRANT', 'HOLD LOCATOR', 'INCLUDE', 'INSERT', 'LABEL', 'LOCK TABLE', 'MERGE', 'OPEN', 'PREPARE', 'REFRESH', 'RELEASE', 'RELEASE SAVEPOINT', 'RENAME', 'REVOKE', 'ROLLBACK', 'SAVEPOINT', 'SELECT', 'SELECT INTO', 'SET CONNECTION', 'SET', 'SET CURRENT ACCELERATOR', 'SET CURRENT APPLICATION COMPATIBILITY', 'SET CURRENT APPLICATION ENCODING SCHEME', 'SET CURRENT DEBUG MODE', 'SET CURRENT DECFLOAT ROUNDING MODE', 'SET CURRENT DEGREE', 'SET CURRENT EXPLAIN MODE', 'SET CURRENT GET_ACCEL_ARCHIVE', 'SET CURRENT LOCALE LC_CTYPE', 'SET CURRENT MAINTAINED TABLE TYPES FOR OPTIMIZATION', 'SET CURRENT OPTIMIZATION HINT', 'SET CURRENT PACKAGE PATH', 'SET CURRENT PACKAGESET', 'SET CURRENT PRECISION', 'SET CURRENT QUERY ACCELERATION', 'SET CURRENT QUERY ACCELERATION WAITFORDATA', 'SET CURRENT REFRESH AGE', 'SET CURRENT ROUTINE VERSION', 'SET CURRENT RULES', 'SET CURRENT SQLID', 'SET CURRENT TEMPORAL BUSINESS_TIME', 'SET CURRENT TEMPORAL SYSTEM_TIME', 'SET ENCRYPTION PASSWORD', 'SET PATH', 'SET SCHEMA', 'SET SESSION TIME ZONE', 'SIGNAL', 'TRUNCATE', 'UPDATE', 'VALUES', 'VALUES INTO', 'WHENEVER', // other
2364'ADD', 'ALTER COLUMN', 'AFTER', 'DROP TABLE', 'FETCH FIRST', 'FROM', 'GROUP BY', 'GO', 'HAVING', 'INSERT INTO', 'LIMIT', 'OFFSET', 'ORDER BY', 'SELECT', 'SET CURRENT SCHEMA', 'WHERE', 'WITH'];
2365/**
2366 * Priority 2
2367 * commands that operate on two tables or subqueries
2368 * two main categories: joins and boolean set operators
2369 */
2370
2371var reservedBinaryCommands = [// set booleans
2372'INTERSECT', 'INTERSECT ALL', 'INTERSECT DISTINCT', 'UNION', 'UNION ALL', 'UNION DISTINCT', 'EXCEPT', 'EXCEPT ALL', 'EXCEPT DISTINCT', // joins
2373'JOIN', 'INNER JOIN', 'LEFT JOIN', 'LEFT OUTER JOIN', 'RIGHT JOIN', 'RIGHT OUTER JOIN', 'FULL JOIN', 'FULL OUTER JOIN', 'CROSS JOIN', 'NATURAL JOIN'];
2374/**
2375 * Priority 3
2376 * keywords that follow a previous Statement, must be attached to subsequent data
2377 * can be fully inline or on newline with optional indent
2378 */
2379
2380var reservedDependentClauses = ['WHEN', 'ELSE', 'ELSEIF']; // https://www.ibm.com/support/knowledgecenter/en/ssw_ibm_i_72/db2/rbafzintro.htm
2381
2382var Db2Formatter = /*#__PURE__*/function (_Formatter) {
2383 _inherits(Db2Formatter, _Formatter);
2384
2385 var _super = _createSuper(Db2Formatter);
2386
2387 function Db2Formatter() {
2388 _classCallCheck(this, Db2Formatter);
2389
2390 return _super.apply(this, arguments);
2391 }
2392
2393 _createClass(Db2Formatter, [{
2394 key: "tokenizer",
2395 value: function tokenizer() {
2396 return new _core_Tokenizer__WEBPACK_IMPORTED_MODULE_1__["default"]({
2397 reservedCommands: Db2Formatter.reservedCommands,
2398 reservedBinaryCommands: Db2Formatter.reservedBinaryCommands,
2399 reservedDependentClauses: Db2Formatter.reservedDependentClauses,
2400 reservedJoinConditions: Db2Formatter.reservedJoinConditions,
2401 reservedLogicalOperators: Db2Formatter.reservedLogicalOperators,
2402 reservedKeywords: Db2Formatter.fullReservedWords,
2403 stringTypes: Db2Formatter.stringTypes,
2404 blockStart: Db2Formatter.blockStart,
2405 blockEnd: Db2Formatter.blockEnd,
2406 indexedPlaceholderTypes: Db2Formatter.indexedPlaceholderTypes,
2407 namedPlaceholderTypes: Db2Formatter.namedPlaceholderTypes,
2408 lineCommentTypes: Db2Formatter.lineCommentTypes,
2409 specialWordChars: Db2Formatter.specialWordChars,
2410 operators: Db2Formatter.operators
2411 });
2412 }
2413 }]);
2414
2415 return Db2Formatter;
2416}(_core_Formatter__WEBPACK_IMPORTED_MODULE_0__["default"]);
2417
2418
2419Db2Formatter.reservedCommands = reservedCommands;
2420Db2Formatter.reservedBinaryCommands = reservedBinaryCommands;
2421Db2Formatter.reservedDependentClauses = reservedDependentClauses;
2422Db2Formatter.reservedJoinConditions = ['ON', 'USING'];
2423Db2Formatter.reservedLogicalOperators = ['AND', 'OR'];
2424Db2Formatter.fullReservedWords = (0,_utils__WEBPACK_IMPORTED_MODULE_2__.dedupe)([].concat(_toConsumableArray(Object.values(reservedFunctions).reduce(function (acc, arr) {
2425 return [].concat(_toConsumableArray(acc), _toConsumableArray(arr));
2426}, [])), _toConsumableArray(Object.values(reservedKeywords).reduce(function (acc, arr) {
2427 return [].concat(_toConsumableArray(acc), _toConsumableArray(arr));
2428}, []))));
2429Db2Formatter.stringTypes = ["\"\"", "''", '``', '[]', "x''"];
2430Db2Formatter.blockStart = ['('];
2431Db2Formatter.blockEnd = [')'];
2432Db2Formatter.indexedPlaceholderTypes = ['?'];
2433Db2Formatter.namedPlaceholderTypes = [':'];
2434Db2Formatter.lineCommentTypes = ['--'];
2435Db2Formatter.specialWordChars = {
2436 any: '#@'
2437};
2438Db2Formatter.operators = ['**', '!>', '!<', '||'];
2439
2440/***/ }),
2441
2442/***/ "./src/languages/hive.formatter.ts":
2443/*!*****************************************!*\
2444 !*** ./src/languages/hive.formatter.ts ***!
2445 \*****************************************/
2446/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2447
2448__webpack_require__.r(__webpack_exports__);
2449/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2450/* harmony export */ "default": () => (/* binding */ HiveFormatter)
2451/* harmony export */ });
2452/* harmony import */ var _core_Formatter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/Formatter */ "./src/core/Formatter.ts");
2453/* harmony import */ var _core_Tokenizer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/Tokenizer */ "./src/core/Tokenizer.ts");
2454/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils */ "./src/utils.ts");
2455function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
2456
2457function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
2458
2459function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
2460
2461function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
2462
2463function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
2464
2465function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
2466
2467function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
2468
2469function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
2470
2471function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
2472
2473function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
2474
2475function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
2476
2477function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
2478
2479function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
2480
2481function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
2482
2483function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
2484
2485function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
2486
2487function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
2488
2489
2490
2491
2492/**
2493 * Priority 5 (last)
2494 * Full list of reserved functions
2495 * distinct from Keywords due to interaction with parentheses
2496 */
2497// https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF
2498
2499var reservedFunctions = {
2500 math: ['ABS', 'ACOS', 'ASIN', 'ATAN', 'BIN', 'BROUND', 'CBRT', 'CEIL', 'CEILING', 'CONV', 'COS', 'DEGREES', // 'E',
2501 'EXP', 'FACTORIAL', 'FLOOR', 'GREATEST', 'HEX', 'LEAST', 'LN', 'LOG', 'LOG10', 'LOG2', 'NEGATIVE', 'PI', 'PMOD', 'POSITIVE', 'POW', 'POWER', 'RADIANS', 'RAND', 'ROUND', 'SHIFTLEFT', 'SHIFTRIGHT', 'SHIFTRIGHTUNSIGNED', 'SIGN', 'SIN', 'SQRT', 'TAN', 'UNHEX', 'WIDTH_BUCKET'],
2502 array: ['ARRAY_CONTAINS', 'MAP_KEYS', 'MAP_VALUES', 'SIZE', 'SORT_ARRAY'],
2503 conversion: ['BINARY', 'CAST'],
2504 date: ['ADD_MONTHS', 'DATE', 'DATE_ADD', 'DATE_FORMAT', 'DATE_SUB', 'DATEDIFF', 'DAY', 'DAYNAME', 'DAYOFMONTH', 'DAYOFYEAR', 'EXTRACT', 'FROM_UNIXTIME', 'FROM_UTC_TIMESTAMP', 'HOUR', 'LAST_DAY', 'MINUTE', 'MONTH', 'MONTHS_BETWEEN', 'NEXT_DAY', 'QUARTER', 'SECOND', 'TIMESTAMP', 'TO_DATE', 'TO_UTC_TIMESTAMP', 'TRUNC', 'UNIX_TIMESTAMP', 'WEEKOFYEAR', 'YEAR'],
2505 conditional: ['ASSERT_TRUE', 'COALESCE', 'IF', 'ISNOTNULL', 'ISNULL', 'NULLIF', 'NVL'],
2506 string: ['ASCII', 'BASE64', 'CHARACTER_LENGTH', 'CHR', 'CONCAT', 'CONCAT_WS', 'CONTEXT_NGRAMS', 'DECODE', 'ELT', 'ENCODE', 'FIELD', 'FIND_IN_SET', 'FORMAT_NUMBER', 'GET_JSON_OBJECT', 'IN_FILE', 'INITCAP', 'INSTR', 'LCASE', 'LENGTH', 'LEVENSHTEIN', 'LOCATE', 'LOWER', 'LPAD', 'LTRIM', 'NGRAMS', 'OCTET_LENGTH', 'PARSE_URL', 'PRINTF', 'QUOTE', 'REGEXP_EXTRACT', 'REGEXP_REPLACE', 'REPEAT', 'REVERSE', 'RPAD', 'RTRIM', 'SENTENCES', 'SOUNDEX', 'SPACE', 'SPLIT', 'STR_TO_MAP', 'SUBSTR', 'SUBSTRING', 'TRANSLATE', 'TRIM', 'UCASE', 'UNBASE64', 'UPPER'],
2507 masking: ['MASK', 'MASK_FIRST_N', 'MASK_HASH', 'MASK_LAST_N', 'MASK_SHOW_FIRST_N', 'MASK_SHOW_LAST_N'],
2508 misc: ['AES_DECRYPT', 'AES_ENCRYPT', 'CRC32', 'CURRENT_DATABASE', 'CURRENT_USER', 'HASH', 'JAVA_METHOD', 'LOGGED_IN_USER', 'MD5', 'REFLECT', 'SHA', 'SHA1', 'SHA2', 'SURROGATE_KEY', 'VERSION'],
2509 aggregate: ['AVG', 'COLLECT_LIST', 'COLLECT_SET', 'CORR', 'COUNT', 'COVAR_POP', 'COVAR_SAMP', 'HISTOGRAM_NUMERIC', 'MAX', 'MIN', 'NTILE', 'PERCENTILE', 'PERCENTILE_APPROX', 'REGR_AVGX', 'REGR_AVGY', 'REGR_COUNT', 'REGR_INTERCEPT', 'REGR_R2', 'REGR_SLOPE', 'REGR_SXX', 'REGR_SXY', 'REGR_SYY', 'STDDEV_POP', 'STDDEV_SAMP', 'SUM', 'VAR_POP', 'VAR_SAMP', 'VARIANCE'],
2510 table: ['EXPLODE', 'INLINE', 'JSON_TUPLE', 'PARSE_URL_TUPLE', 'POSEXPLODE', 'STACK']
2511};
2512/**
2513 * Priority 5 (last)
2514 * Full list of reserved words
2515 * any words that are in a higher priority are removed
2516 */
2517// https://cwiki.apache.org/confluence/display/hive/languagemanual+ddl
2518
2519var reservedKeywords = {
2520 // Non-reserved keywords have proscribed meanings in. HiveQL, but can still be used as table or column names
2521 nonReserved: ['ADD', 'ADMIN', 'AFTER', 'ANALYZE', 'ARCHIVE', 'ASC', 'BEFORE', 'BUCKET', 'BUCKETS', 'CASCADE', 'CHANGE', 'CLUSTER', 'CLUSTERED', 'CLUSTERSTATUS', 'COLLECTION', 'COLUMNS', 'COMMENT', 'COMPACT', 'COMPACTIONS', 'COMPUTE', 'CONCATENATE', 'CONTINUE', 'DATA', 'DATABASES', 'DATETIME', 'DAY', 'DBPROPERTIES', 'DEFERRED', 'DEFINED', 'DELIMITED', 'DEPENDENCY', 'DESC', 'DIRECTORIES', 'DIRECTORY', 'DISABLE', 'DISTRIBUTE', 'ELEM_TYPE', 'ENABLE', 'ESCAPED', 'EXCLUSIVE', 'EXPLAIN', 'EXPORT', 'FIELDS', 'FILE', 'FILEFORMAT', 'FIRST', 'FORMAT', 'FORMATTED', 'FUNCTIONS', 'HOLD_DDLTIME', 'HOUR', 'IDXPROPERTIES', 'IGNORE', 'INDEX', 'INDEXES', 'INPATH', 'INPUTDRIVER', 'INPUTFORMAT', 'ITEMS', 'JAR', 'KEYS', 'KEY_TYPE', 'LIMIT', 'LINES', 'LOAD', 'LOCATION', 'LOCK', 'LOCKS', 'LOGICAL', 'LONG', 'MAPJOIN', 'MATERIALIZED', 'METADATA', 'MINUS', 'MINUTE', 'MONTH', 'MSCK', 'NOSCAN', 'NO_DROP', 'OFFLINE', 'OPTION', 'OUTPUTDRIVER', 'OUTPUTFORMAT', 'OVERWRITE', 'OWNER', 'PARTITIONED', 'PARTITIONS', 'PLUS', 'PRETTY', 'PRINCIPALS', 'PROTECTION', 'PURGE', 'READ', 'READONLY', 'REBUILD', 'RECORDREADER', 'RECORDWRITER', 'RELOAD', 'RENAME', 'REPAIR', 'REPLACE', 'REPLICATION', 'RESTRICT', 'REWRITE', 'ROLE', 'ROLES', 'SCHEMA', 'SCHEMAS', 'SECOND', 'SEMI', 'SERDE', 'SERDEPROPERTIES', 'SERVER', 'SETS', 'SHARED', 'SHOW', 'SHOW_DATABASE', 'SKEWED', 'SORT', 'SORTED', 'SSL', 'STATISTICS', 'STORED', 'STREAMTABLE', 'STRING', 'STRUCT', 'TABLES', 'TBLPROPERTIES', 'TEMPORARY', 'TERMINATED', 'TINYINT', 'TOUCH', 'TRANSACTIONS', 'UNARCHIVE', 'UNDO', 'UNIONTYPE', 'UNLOCK', 'UNSET', 'UNSIGNED', 'URI', // 'USE',
2522 'UTC', 'UTCTIMESTAMP', 'VALUE_TYPE', 'VIEW', 'WHILE', 'YEAR', 'AUTOCOMMIT', 'ISOLATION', 'LEVEL', 'OFFSET', 'SNAPSHOT', 'TRANSACTION', 'WORK', 'WRITE', 'ABORT', 'KEY', 'LAST', 'NORELY', 'NOVALIDATE', 'NULLS', 'RELY', 'VALIDATE', 'DETAIL', 'DOW', 'EXPRESSION', 'OPERATOR', 'QUARTER', 'SUMMARY', 'VECTORIZATION', 'WEEK', 'YEARS', 'MONTHS', 'WEEKS', 'DAYS', 'HOURS', 'MINUTES', 'SECONDS', 'TIMESTAMPTZ', 'ZONE'],
2523 reserved: [// reserved
2524 'ALL', // 'ALTER',
2525 // 'AND',
2526 'ARRAY', 'AS', 'AUTHORIZATION', 'BETWEEN', 'BIGINT', 'BINARY', 'BOOLEAN', 'BOTH', 'BY', // 'CASE',
2527 'CAST', 'CHAR', 'COLUMN', 'CONF', // 'CREATE',
2528 'CROSS', 'CUBE', 'CURRENT', 'CURRENT_DATE', 'CURRENT_TIMESTAMP', 'CURSOR', 'DATABASE', 'DATE', 'DECIMAL', 'DELETE', // 'DESCRIBE',
2529 'DISTINCT', 'DOUBLE', // 'DROP',
2530 // 'ELSE',
2531 // 'END',
2532 'EXCHANGE', 'EXISTS', 'EXTENDED', 'EXTERNAL', 'FALSE', // 'FETCH',
2533 'FLOAT', 'FOLLOWING', 'FOR', // 'FROM',
2534 'FULL', 'FUNCTION', 'GRANT', // 'GROUP',
2535 'GROUPING', // 'HAVING',
2536 'IF', 'IMPORT', 'IN', 'INNER', // 'INSERT',
2537 'INT', // 'INTERSECT',
2538 'INTERVAL', 'INTO', 'IS', // 'JOIN',
2539 'LATERAL', 'LEFT', 'LESS', 'LIKE', 'LOCAL', 'MACRO', 'MAP', 'MORE', 'NONE', 'NOT', 'NULL', 'OF', // 'ON',
2540 // 'OR',
2541 'ORDER', 'OUT', 'OUTER', 'OVER', 'PARTIALSCAN', 'PARTITION', 'PERCENT', 'PRECEDING', 'PRESERVE', 'PROCEDURE', 'RANGE', 'READS', 'REDUCE', 'REVOKE', 'RIGHT', 'ROLLUP', 'ROW', 'ROWS', // 'SELECT',
2542 'SET', 'SMALLINT', 'TABLE', 'TABLESAMPLE', 'THEN', 'TIMESTAMP', 'TO', 'TRANSFORM', 'TRIGGER', 'TRUE', // 'TRUNCATE',
2543 'UNBOUNDED', // 'UNION',
2544 'UNIQUEJOIN', // 'UPDATE',
2545 'USER', 'UTC_TMESTAMP', // 'VALUES',
2546 'VARCHAR', // 'WHEN',
2547 // 'WHERE',
2548 'WINDOW', // 'WITH',
2549 'COMMIT', 'ONLY', 'REGEXP', 'RLIKE', 'ROLLBACK', 'START', 'CACHE', 'CONSTRAINT', 'FOREIGN', 'PRIMARY', 'REFERENCES', 'DAYOFWEEK', 'EXTRACT', 'FLOOR', 'INTEGER', 'PRECISION', 'VIEWS', 'TIME', 'NUMERIC', 'SYNC'],
2550 fileTypes: ['TEXTFILE', 'SEQUENCEFILE', 'ORC', 'CSV', 'TSV', 'PARQUET', 'AVRO', 'RCFILE', 'JSONFILE', 'INPUTFORMAT', 'OUTPUTFORMAT']
2551};
2552/**
2553 * Priority 1 (first)
2554 * keywords that begin a new statement
2555 * will begin new indented block
2556 */
2557
2558var reservedCommands = [// commands
2559'ALTER', 'ALTER COLUMN', 'ALTER TABLE', 'CREATE', 'CREATE TABLE', 'USE', 'DESCRIBE', 'DROP', 'DROP TABLE', 'FETCH', 'FROM', 'GROUP BY', 'HAVING', 'INSERT', 'INSERT INTO', 'LIMIT', 'OFFSET', 'ORDER BY', 'SELECT', 'SET', 'SET SCHEMA', 'SHOW', 'SORT BY', 'TRUNCATE', 'UPDATE', 'VALUES', 'WHERE', 'WITH', // newline keywords
2560'STORED AS', 'STORED BY', 'ROW FORMAT'];
2561/**
2562 * Priority 2
2563 * commands that operate on two tables or subqueries
2564 * two main categories: joins and boolean set operators
2565 */
2566
2567var reservedBinaryCommands = [// set booleans
2568'INTERSECT', 'INTERSECT ALL', 'INTERSECT DISTINCT', 'UNION', 'UNION ALL', 'UNION DISTINCT', // joins
2569'JOIN', 'INNER JOIN', 'LEFT JOIN', 'LEFT OUTER JOIN', 'RIGHT JOIN', 'RIGHT OUTER JOIN', 'FULL JOIN', 'FULL OUTER JOIN', 'CROSS JOIN'];
2570/**
2571 * Priority 3
2572 * keywords that follow a previous 'Statement', must be attached to subsequent data
2573 * can be fully inline or on newline with optional indent
2574 */
2575
2576var reservedDependentClauses = ['WHEN', 'ELSE']; // https://cwiki.apache.org/confluence/display/Hive/LanguageManual
2577
2578var HiveFormatter = /*#__PURE__*/function (_Formatter) {
2579 _inherits(HiveFormatter, _Formatter);
2580
2581 var _super = _createSuper(HiveFormatter);
2582
2583 function HiveFormatter() {
2584 _classCallCheck(this, HiveFormatter);
2585
2586 return _super.apply(this, arguments);
2587 }
2588
2589 _createClass(HiveFormatter, [{
2590 key: "tokenizer",
2591 value: function tokenizer() {
2592 return new _core_Tokenizer__WEBPACK_IMPORTED_MODULE_1__["default"]({
2593 reservedCommands: HiveFormatter.reservedCommands,
2594 reservedBinaryCommands: HiveFormatter.reservedBinaryCommands,
2595 reservedDependentClauses: HiveFormatter.reservedDependentClauses,
2596 reservedJoinConditions: HiveFormatter.reservedJoinConditions,
2597 reservedLogicalOperators: HiveFormatter.reservedLogicalOperators,
2598 reservedKeywords: HiveFormatter.fullReservedWords,
2599 stringTypes: HiveFormatter.stringTypes,
2600 blockStart: HiveFormatter.blockStart,
2601 blockEnd: HiveFormatter.blockEnd,
2602 indexedPlaceholderTypes: HiveFormatter.indexedPlaceholderTypes,
2603 namedPlaceholderTypes: HiveFormatter.namedPlaceholderTypes,
2604 lineCommentTypes: HiveFormatter.lineCommentTypes,
2605 specialWordChars: HiveFormatter.specialWordChars,
2606 operators: HiveFormatter.operators
2607 });
2608 }
2609 }]);
2610
2611 return HiveFormatter;
2612}(_core_Formatter__WEBPACK_IMPORTED_MODULE_0__["default"]);
2613
2614
2615HiveFormatter.reservedCommands = reservedCommands;
2616HiveFormatter.reservedBinaryCommands = reservedBinaryCommands;
2617HiveFormatter.reservedDependentClauses = reservedDependentClauses;
2618HiveFormatter.reservedJoinConditions = ['ON', 'USING'];
2619HiveFormatter.reservedLogicalOperators = ['AND', 'OR'];
2620HiveFormatter.fullReservedWords = (0,_utils__WEBPACK_IMPORTED_MODULE_2__.dedupe)([].concat(_toConsumableArray(Object.values(reservedFunctions).reduce(function (acc, arr) {
2621 return [].concat(_toConsumableArray(acc), _toConsumableArray(arr));
2622}, [])), _toConsumableArray(Object.values(reservedKeywords).reduce(function (acc, arr) {
2623 return [].concat(_toConsumableArray(acc), _toConsumableArray(arr));
2624}, []))));
2625HiveFormatter.stringTypes = ['""', "''", '``'];
2626HiveFormatter.blockStart = ['(', 'CASE'];
2627HiveFormatter.blockEnd = [')', 'END'];
2628HiveFormatter.indexedPlaceholderTypes = ['?'];
2629HiveFormatter.namedPlaceholderTypes = [];
2630HiveFormatter.lineCommentTypes = ['--'];
2631HiveFormatter.specialWordChars = {};
2632HiveFormatter.operators = ['<=>', '==', '||'];
2633
2634/***/ }),
2635
2636/***/ "./src/languages/mariadb.formatter.ts":
2637/*!********************************************!*\
2638 !*** ./src/languages/mariadb.formatter.ts ***!
2639 \********************************************/
2640/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2641
2642__webpack_require__.r(__webpack_exports__);
2643/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2644/* harmony export */ "default": () => (/* binding */ MariaDbFormatter)
2645/* harmony export */ });
2646/* harmony import */ var _core_Formatter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/Formatter */ "./src/core/Formatter.ts");
2647/* harmony import */ var _core_Tokenizer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/Tokenizer */ "./src/core/Tokenizer.ts");
2648/* harmony import */ var _core_token__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../core/token */ "./src/core/token.ts");
2649/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils */ "./src/utils.ts");
2650function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
2651
2652function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
2653
2654function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
2655
2656function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
2657
2658function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
2659
2660function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
2661
2662function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
2663
2664function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
2665
2666function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
2667
2668function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
2669
2670function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
2671
2672
2673
2674
2675
2676/**
2677 * Priority 5 (last)
2678 * Full list of reserved functions
2679 * distinct from Keywords due to interaction with parentheses
2680 */
2681// https://mariadb.com/kb/en/information-schema-sql_functions-table/
2682
2683var reservedFunctions = ['ADDDATE', 'ADD_MONTHS', 'BIT_AND', 'BIT_OR', 'BIT_XOR', 'CAST', 'COUNT', 'CUME_DIST', 'CURDATE', 'CURTIME', 'DATE_ADD', 'DATE_SUB', 'DATE_FORMAT', 'DECODE', 'DENSE_RANK', 'EXTRACT', 'FIRST_VALUE', 'GROUP_CONCAT', 'JSON_ARRAYAGG', 'JSON_OBJECTAGG', 'LAG', 'LEAD', 'MAX', 'MEDIAN', 'MID', 'MIN', 'NOW', 'NTH_VALUE', 'NTILE', 'POSITION', 'PERCENT_RANK', 'PERCENTILE_CONT', 'PERCENTILE_DISC', 'RANK', 'ROW_NUMBER', 'SESSION_USER', 'STD', 'STDDEV', 'STDDEV_POP', 'STDDEV_SAMP', 'SUBDATE', 'SUBSTR', 'SUBSTRING', 'SUM', 'SYSTEM_USER', 'TRIM', 'TRIM_ORACLE', 'VARIANCE', 'VAR_POP', 'VAR_SAMP', 'ABS', 'ACOS', 'ADDTIME', 'AES_DECRYPT', 'AES_ENCRYPT', 'ASIN', 'ATAN', 'ATAN2', 'BENCHMARK', 'BIN', 'BINLOG_GTID_POS', 'BIT_COUNT', 'BIT_LENGTH', 'CEIL', 'CEILING', 'CHARACTER_LENGTH', 'CHAR_LENGTH', 'CHR', 'COERCIBILITY', 'COLUMN_CHECK', 'COLUMN_EXISTS', 'COLUMN_LIST', 'COLUMN_JSON', 'COMPRESS', 'CONCAT', 'CONCAT_OPERATOR_ORACLE', 'CONCAT_WS', 'CONNECTION_ID', 'CONV', 'CONVERT_TZ', 'COS', 'COT', 'CRC32', 'DATEDIFF', 'DAYNAME', 'DAYOFMONTH', 'DAYOFWEEK', 'DAYOFYEAR', 'DEGREES', 'DECODE_HISTOGRAM', 'DECODE_ORACLE', 'DES_DECRYPT', 'DES_ENCRYPT', 'ELT', 'ENCODE', 'ENCRYPT', 'EXP', 'EXPORT_SET', 'EXTRACTVALUE', 'FIELD', 'FIND_IN_SET', 'FLOOR', 'FORMAT', 'FOUND_ROWS', 'FROM_BASE64', 'FROM_DAYS', 'FROM_UNIXTIME', 'GET_LOCK', 'GREATEST', 'HEX', 'IFNULL', 'INSTR', 'ISNULL', 'IS_FREE_LOCK', 'IS_USED_LOCK', 'JSON_ARRAY', 'JSON_ARRAY_APPEND', 'JSON_ARRAY_INSERT', 'JSON_COMPACT', 'JSON_CONTAINS', 'JSON_CONTAINS_PATH', 'JSON_DEPTH', 'JSON_DETAILED', 'JSON_EXISTS', 'JSON_EXTRACT', 'JSON_INSERT', 'JSON_KEYS', 'JSON_LENGTH', 'JSON_LOOSE', 'JSON_MERGE', 'JSON_MERGE_PATCH', 'JSON_MERGE_PRESERVE', 'JSON_QUERY', 'JSON_QUOTE', 'JSON_OBJECT', 'JSON_REMOVE', 'JSON_REPLACE', 'JSON_SET', 'JSON_SEARCH', 'JSON_TYPE', 'JSON_UNQUOTE', 'JSON_VALID', 'JSON_VALUE', 'LAST_DAY', 'LAST_INSERT_ID', 'LCASE', 'LEAST', 'LENGTH', 'LENGTHB', 'LN', 'LOAD_FILE', 'LOCATE', 'LOG', 'LOG10', 'LOG2', 'LOWER', 'LPAD', 'LPAD_ORACLE', 'LTRIM', 'LTRIM_ORACLE', 'MAKEDATE', 'MAKETIME', 'MAKE_SET', 'MASTER_GTID_WAIT', 'MASTER_POS_WAIT', 'MD5', 'MONTHNAME', 'NAME_CONST', 'NVL', 'NVL2', 'NULLIF', 'OCT', 'OCTET_LENGTH', 'ORD', 'PERIOD_ADD', 'PERIOD_DIFF', 'PI', 'POW', 'POWER', 'QUOTE', 'REGEXP_INSTR', 'REGEXP_REPLACE', 'REGEXP_SUBSTR', 'RADIANS', 'RAND', 'RELEASE_ALL_LOCKS', 'RELEASE_LOCK', 'REPLACE_ORACLE', 'REVERSE', 'ROUND', 'RPAD', 'RPAD_ORACLE', 'RTRIM', 'RTRIM_ORACLE', 'SEC_TO_TIME', 'SHA', 'SHA1', 'SHA2', 'SIGN', 'SIN', 'SLEEP', 'SOUNDEX', 'SPACE', 'SQRT', 'STRCMP', 'STR_TO_DATE', 'SUBSTR_ORACLE', 'SUBSTRING_INDEX', 'SUBTIME', 'SYS_GUID', 'TAN', 'TIMEDIFF', 'TIME_FORMAT', 'TIME_TO_SEC', 'TO_BASE64', 'TO_CHAR', 'TO_DAYS', 'TO_SECONDS', 'UCASE', 'UNCOMPRESS', 'UNCOMPRESSED_LENGTH', 'UNHEX', 'UNIX_TIMESTAMP', 'UPDATEXML', 'UPPER', 'UUID', 'UUID_SHORT', 'VERSION', 'WEEKDAY', 'WEEKOFYEAR', 'WSREP_LAST_WRITTEN_GTID', 'WSREP_LAST_SEEN_GTID', 'WSREP_SYNC_WAIT_UPTO_GTID', 'YEARWEEK'];
2684/**
2685 * Priority 5 (last)
2686 * Full list of reserved words
2687 * any words that are in a higher priority are removed
2688 */
2689// https://mariadb.com/kb/en/information-schema-keywords-table/
2690
2691var reservedKeywords = ['ACCESSIBLE', 'ACCOUNT', 'ACTION', 'ADMIN', 'AFTER', 'AGAINST', 'AGGREGATE', 'ALL', 'ALGORITHM', 'ALTER', 'ALWAYS', 'ANY', 'AS', 'ASC', 'ASCII', 'ASENSITIVE', 'AT', 'ATOMIC', 'AUTHORS', 'AUTO_INCREMENT', 'AUTOEXTEND_SIZE', 'AUTO', 'AVG', 'AVG_ROW_LENGTH', 'BACKUP', 'BEFORE', 'BETWEEN', 'BIGINT', 'BINARY', 'BIT', 'BLOB', 'BLOCK', 'BODY', 'BOOL', 'BOOLEAN', 'BOTH', 'BTREE', 'BY', 'BYTE', 'CACHE', 'CASCADE', 'CASCADED', 'CATALOG_NAME', 'CHAIN', 'CHANGE', 'CHANGED', 'CHAR', 'CHARACTER', 'CHARACTER SET', 'CHARSET', 'CHECK', 'CHECKPOINT', 'CHECKSUM', 'CIPHER', 'CLASS_ORIGIN', 'CLIENT', 'CLOB', 'CLOSE', 'COALESCE', 'CODE', 'COLLATE', 'COLLATION', 'COLUMN', 'COLUMN_NAME', 'COLUMNS', 'COLUMN_ADD', 'COLUMN_CREATE', 'COLUMN_DELETE', 'COLUMN_GET', 'COMMENT', 'COMMITTED', 'COMPACT', 'COMPLETION', 'COMPRESSED', 'CONCURRENT', 'CONDITION', 'CONNECTION', 'CONSISTENT', 'CONSTRAINT', 'CONSTRAINT_CATALOG', 'CONSTRAINT_NAME', 'CONSTRAINT_SCHEMA', 'CONTAINS', 'CONTEXT', 'CONTINUE', 'CONTRIBUTORS', 'CONVERT', 'CPU', 'CREATE', 'CROSS', 'CUBE', 'CURRENT', 'CURRENT_DATE', 'CURRENT_POS', 'CURRENT_ROLE', 'CURRENT_TIME', 'CURRENT_TIMESTAMP', 'CURRENT_USER', 'CURSOR', 'CURSOR_NAME', 'CYCLE', 'DATA', 'DATABASE', 'DATABASES', 'DATAFILE', 'DATE', 'DATETIME', 'DAY', 'DAY_HOUR', 'DAY_MICROSECOND', 'DAY_MINUTE', 'DAY_SECOND', 'DEALLOCATE', 'DEC', 'DECIMAL', 'DECLARE', 'DEFAULT', 'DEFINER', 'DELAYED', 'DELAY_KEY_WRITE', 'DELETE_DOMAIN_ID', 'DES_KEY_FILE', 'DETERMINISTIC', 'DIAGNOSTICS', 'DIRECTORY', 'DISABLE', 'DISCARD', 'DISK', 'DISTINCT', 'DISTINCTROW', 'DIV', 'DOUBLE', 'DO_DOMAIN_IDS', 'DROP', 'DUAL', 'DUMPFILE', 'DUPLICATE', 'DYNAMIC', 'EACH', 'EMPTY', 'ENABLE', 'ENCLOSED', 'ENDS', 'ENGINE', 'ENGINES', 'ENUM', 'ERROR', 'ERRORS', 'ESCAPE', 'ESCAPED', 'EVENT', 'EVENTS', 'EVERY', 'EXAMINED', 'EXCHANGE', 'EXCLUDE', 'EXCEPTION', 'EXISTS', 'EXIT', 'EXPANSION', 'EXPIRE', 'EXPORT', 'EXTENDED', 'EXTENT_SIZE', 'FALSE', 'FAST', 'FAULTS', 'FEDERATED', 'FETCH', 'FIELDS', 'FILE', 'FIRST', 'FIXED', 'FLOAT', 'FLOAT4', 'FLOAT8', 'FOLLOWING', 'FOLLOWS', 'FOR', 'FORCE', 'FOREIGN', 'FOUND', 'FULL', 'FULLTEXT', 'FUNCTION', 'GENERAL', 'GENERATED', 'GET_FORMAT', 'GET', 'GLOBAL', 'GOTO', 'GRANTS', 'GROUP', 'HARD', 'HASH', 'HIGH_PRIORITY', 'HISTORY', 'HOST', 'HOSTS', 'HOUR', 'HOUR_MICROSECOND', 'HOUR_MINUTE', 'HOUR_SECOND', // 'ID',
2692'IDENTIFIED', 'IF', 'IGNORE', 'IGNORED', 'IGNORE_DOMAIN_IDS', 'IGNORE_SERVER_IDS', 'IMMEDIATE', 'IMPORT', 'IN', 'INCREMENT', 'INDEX', 'INDEXES', 'INFILE', 'INITIAL_SIZE', 'INNER', 'INOUT', 'INSENSITIVE', 'INSERT_METHOD', 'INSTALL', 'INT', 'INT1', 'INT2', 'INT3', 'INT4', 'INT8', 'INTEGER', 'INTERVAL', 'INVISIBLE', 'INTO', 'IO', 'IO_THREAD', 'IPC', 'IS', 'ISOLATION', 'ISOPEN', 'ISSUER', 'ITERATE', 'INVOKER', 'JSON', 'JSON_TABLE', 'KEY', 'KEYS', 'KEY_BLOCK_SIZE', 'LANGUAGE', 'LAST', 'LAST_VALUE', 'LASTVAL', 'LEADING', 'LEAVE', 'LEAVES', 'LEFT', 'LESS', 'LEVEL', 'LIKE', 'LINEAR', 'LINES', 'LIST', 'LOAD', 'LOCAL', 'LOCALTIME', 'LOCALTIMESTAMP', 'LOCK', 'LOCKED', 'LOCKS', 'LOGFILE', 'LOGS', 'LONG', 'LONGBLOB', 'LONGTEXT', 'LOOP', 'LOW_PRIORITY', 'MASTER', 'MASTER_CONNECT_RETRY', 'MASTER_DELAY', 'MASTER_GTID_POS', 'MASTER_HOST', 'MASTER_LOG_FILE', 'MASTER_LOG_POS', 'MASTER_PASSWORD', 'MASTER_PORT', 'MASTER_SERVER_ID', 'MASTER_SSL', 'MASTER_SSL_CA', 'MASTER_SSL_CAPATH', 'MASTER_SSL_CERT', 'MASTER_SSL_CIPHER', 'MASTER_SSL_CRL', 'MASTER_SSL_CRLPATH', 'MASTER_SSL_KEY', 'MASTER_SSL_VERIFY_SERVER_CERT', 'MASTER_USER', 'MASTER_USE_GTID', 'MASTER_HEARTBEAT_PERIOD', 'MATCH', 'MAX_CONNECTIONS_PER_HOUR', 'MAX_QUERIES_PER_HOUR', 'MAX_ROWS', 'MAX_SIZE', 'MAX_STATEMENT_TIME', 'MAX_UPDATES_PER_HOUR', 'MAX_USER_CONNECTIONS', 'MAXVALUE', 'MEDIUM', 'MEDIUMBLOB', 'MEDIUMINT', 'MEDIUMTEXT', 'MEMORY', 'MERGE', 'MESSAGE_TEXT', 'MICROSECOND', 'MIDDLEINT', 'MIGRATE', 'MINUS', 'MINUTE', 'MINUTE_MICROSECOND', 'MINUTE_SECOND', 'MINVALUE', 'MIN_ROWS', 'MOD', 'MODE', 'MODIFIES', 'MODIFY', 'MONITOR', 'MONTH', 'MUTEX', 'MYSQL', 'MYSQL_ERRNO', 'NAME', 'NAMES', 'NATIONAL', 'NATURAL', 'NCHAR', 'NESTED', 'NEVER', 'NEW', 'NEXT', 'NEXTVAL', 'NO', 'NOMAXVALUE', 'NOMINVALUE', 'NOCACHE', 'NOCYCLE', 'NO_WAIT', 'NOWAIT', 'NODEGROUP', 'NONE', 'NOT', 'NOTFOUND', 'NO_WRITE_TO_BINLOG', 'NULL', 'NUMBER', 'NUMERIC', 'NVARCHAR', 'OF', 'OFFSET', 'OLD_PASSWORD', 'ON DELETE', 'ON UPDATE', 'ONE', 'ONLINE', 'ONLY', 'OPEN', 'OPTIMIZE', 'OPTIONS', 'OPTION', 'OPTIONALLY', 'ORDER', 'ORDINALITY', 'OTHERS', 'OUT', 'OUTER', 'OUTFILE', 'OVER', 'OVERLAPS', 'OWNER', 'PACKAGE', 'PACK_KEYS', 'PAGE', 'PAGE_CHECKSUM', 'PARSER', 'PARSE_VCOL_EXPR', 'PATH', 'PERIOD', 'PARTIAL', 'PARTITION', 'PARTITIONING', 'PARTITIONS', 'PASSWORD', 'PERSISTENT', 'PHASE', 'PLUGIN', 'PLUGINS', 'PORT', 'PORTION', 'PRECEDES', 'PRECEDING', 'PRECISION', 'PRESERVE', 'PREV', 'PREVIOUS', 'PRIMARY', 'PRIVILEGES', 'PROCEDURE', 'PROCESS', 'PROCESSLIST', 'PROFILE', 'PROFILES', 'PROXY', 'PURGE', 'QUARTER', 'QUERY', 'QUICK', 'RAISE', 'RANGE', 'RAW', 'READ', 'READ_ONLY', 'READ_WRITE', 'READS', 'REAL', 'REBUILD', 'RECOVER', 'RECURSIVE', 'REDO_BUFFER_SIZE', 'REDOFILE', 'REDUNDANT', 'REFERENCES', 'REGEXP', 'RELAY', 'RELAYLOG', 'RELAY_LOG_FILE', 'RELAY_LOG_POS', 'RELAY_THREAD', 'RELEASE', 'RELOAD', 'REMOVE', 'RENAME', 'REORGANIZE', 'REPAIR', 'REPEATABLE', 'REPLAY', 'REPLICA', 'REPLICAS', 'REPLICA_POS', 'REPLICATION', 'REPEAT', 'REQUIRE', 'RESET', 'RESTART', 'RESTORE', 'RESTRICT', 'RESUME', 'RETURNED_SQLSTATE', 'RETURN', 'RETURNS', 'REUSE', 'RIGHT', 'RLIKE', 'ROLE', 'ROLLUP', 'ROUTINE', 'ROW', 'ROWCOUNT', 'ROWNUM', 'ROWS', 'ROWTYPE', 'ROW_COUNT', 'ROW_FORMAT', 'RTREE', 'SCHEDULE', 'SCHEMA', 'SCHEMA_NAME', 'SCHEMAS', 'SECOND', 'SECOND_MICROSECOND', 'SECURITY', 'SENSITIVE', 'SEPARATOR', 'SEQUENCE', 'SERIAL', 'SERIALIZABLE', 'SESSION', 'SERVER', 'SETVAL', 'SHARE', 'SIGNED', 'SIMPLE', 'SKIP', 'SLAVE', 'SLAVES', 'SLAVE_POS', 'SLOW', 'SNAPSHOT', 'SMALLINT', 'SOCKET', 'SOFT', 'SOME', 'SONAME', 'SOUNDS', 'SOURCE', 'STAGE', 'STORED', 'SPATIAL', 'SPECIFIC', 'REF_SYSTEM_ID', 'SQL', 'SQLEXCEPTION', 'SQLSTATE', 'SQLWARNING', 'SQL_BIG_RESULT', 'SQL_BUFFER_RESULT', 'SQL_CACHE', 'SQL_CALC_FOUND_ROWS', 'SQL_NO_CACHE', 'SQL_SMALL_RESULT', 'SQL_THREAD', 'SQL_TSI_SECOND', 'SQL_TSI_MINUTE', 'SQL_TSI_HOUR', 'SQL_TSI_DAY', 'SQL_TSI_WEEK', 'SQL_TSI_MONTH', 'SQL_TSI_QUARTER', 'SQL_TSI_YEAR', 'SSL', 'START', 'STARTING', 'STARTS', 'STATEMENT', 'STATS_AUTO_RECALC', 'STATS_PERSISTENT', 'STATS_SAMPLE_PAGES', 'STATUS', 'STOP', 'STORAGE', 'STRING', 'SUBCLASS_ORIGIN', 'SUBJECT', 'SUBPARTITION', 'SUBPARTITIONS', 'SUPER', 'SUSPEND', 'SWAPS', 'SWITCHES', 'SYSDATE', 'SYSTEM', 'SYSTEM_TIME', 'TABLE', 'TABLE_NAME', 'TABLES', 'TABLESPACE', 'TABLE_CHECKSUM', 'TEMPORARY', 'TEMPTABLE', 'TERMINATED', 'TEXT', 'THAN', 'THEN', 'TIES', 'TIME', 'TIMESTAMP', 'TIMESTAMPADD', 'TIMESTAMPDIFF', 'TINYBLOB', 'TINYINT', 'TINYTEXT', 'TO', 'TRAILING', 'TRANSACTION', 'TRANSACTIONAL', 'THREADS', 'TRIGGER', 'TRIGGERS', 'TRUE', 'TYPE', 'TYPES', 'UNBOUNDED', 'UNCOMMITTED', 'UNDEFINED', 'UNDO_BUFFER_SIZE', 'UNDOFILE', 'UNDO', 'UNICODE', 'UNIQUE', 'UNKNOWN', 'UNLOCK', 'UNINSTALL', 'UNSIGNED', 'UNTIL', 'UPGRADE', 'USAGE', 'USER', 'USER_RESOURCES', 'USE_FRM', 'UTC_DATE', 'UTC_TIME', 'UTC_TIMESTAMP', 'VALUE', 'VARBINARY', 'VARCHAR', 'VARCHARACTER', 'VARCHAR2', 'VARIABLES', 'VARYING', 'VIA', 'VIEW', 'VIRTUAL', 'VISIBLE', 'VERSIONING', 'WAIT', 'WARNINGS', 'WEEK', 'WEIGHT_STRING', 'WHILE', 'WINDOW', 'WITHIN', 'WITHOUT', 'WORK', 'WRAPPER', 'WRITE', 'X509', 'XA', 'XML', 'YEAR', 'YEAR_MONTH', 'ZEROFILL'];
2693/**
2694 * Priority 1 (first)
2695 * keywords that begin a new statement
2696 * will begin new indented block
2697 */
2698// https://mariadb.com/docs/reference/mdb/sql-statements/
2699
2700var reservedCommands = ['ALTER DATABASE', 'ALTER DATABASE COMMENT', 'ALTER EVENT', 'ALTER FUNCTION', 'ALTER PROCEDURE', 'ALTER SCHEMA', 'ALTER SCHEMA COMMENT', 'ALTER SEQUENCE', 'ALTER SERVER', 'ALTER TABLE', 'ALTER USER', 'ALTER VIEW', 'ANALYZE', 'ANALYZE TABLE', 'BACKUP LOCK', 'BACKUP STAGE', 'BACKUP UNLOCK', 'BEGIN', 'BINLOG', 'CACHE INDEX', 'CALL', 'CHANGE MASTER TO', 'CHECK TABLE', 'CHECK VIEW', 'CHECKSUM TABLE', 'COMMIT', 'CREATE AGGREGATE FUNCTION', 'CREATE DATABASE', 'CREATE EVENT', 'CREATE FUNCTION', 'CREATE INDEX', 'CREATE PROCEDURE', 'CREATE ROLE', 'CREATE SEQUENCE', 'CREATE SERVER', 'CREATE SPATIAL INDEX', 'CREATE TABLE', 'CREATE TRIGGER', 'CREATE UNIQUE INDEX', 'CREATE USER', 'CREATE VIEW', 'DEALLOCATE PREPARE', 'DELETE', 'DESC', 'DESCRIBE', 'DO', 'DROP DATABASE', 'DROP EVENT', 'DROP FUNCTION', 'DROP INDEX', 'DROP PREPARE', 'DROP PROCEDURE', 'DROP ROLE', 'DROP SEQUENCE', 'DROP SERVER', 'DROP TABLE', 'DROP TRIGGER', 'DROP USER', 'DROP VIEW', 'EXECUTE', 'EXPLAIN', 'FLUSH', 'GET DIAGNOSTICS', 'GET DIAGNOSTICS CONDITION', 'GRANT', 'HANDLER', 'HELP', 'INSERT', 'INSTALL PLUGIN', 'INSTALL SONAME', 'KILL', 'LOAD DATA INFILE', 'LOAD INDEX INTO CACHE', 'LOAD XML INFILE', 'LOCK TABLE', 'OPTIMIZE TABLE', 'PREPARE', 'PURGE BINARY LOGS', 'PURGE MASTER LOGS', 'RELEASE SAVEPOINT', 'RENAME TABLE', 'RENAME USER', 'REPAIR TABLE', 'REPAIR VIEW', 'REPLACE', 'RESET MASTER', 'RESET QUERY CACHE', 'RESET REPLICA', 'RESET SLAVE', 'RESIGNAL', 'RETURNING', 'REVOKE', 'ROLLBACK', 'SAVEPOINT', 'SELECT', 'SET', 'SET CHARACTER SET', 'SET DEFAULT ROLE', 'SET GLOBAL TRANSACTION', 'SET NAMES', 'SET PASSWORD', 'SET ROLE', 'SET STATEMENT', 'SET TRANSACTION', 'SHOW', 'SHOW ALL REPLICAS STATUS', 'SHOW ALL SLAVES STATUS', 'SHOW AUTHORS', 'SHOW BINARY LOGS', 'SHOW BINLOG EVENTS', 'SHOW BINLOG STATUS', 'SHOW CHARACTER SET', 'SHOW CLIENT_STATISTICS', 'SHOW COLLATION', 'SHOW COLUMNS', 'SHOW CONTRIBUTORS', 'SHOW CREATE DATABASE', 'SHOW CREATE EVENT', 'SHOW CREATE FUNCTION', 'SHOW CREATE PACKAGE', 'SHOW CREATE PACKAGE BODY', 'SHOW CREATE PROCEDURE', 'SHOW CREATE SEQUENCE', 'SHOW CREATE TABLE', 'SHOW CREATE TRIGGER', 'SHOW CREATE USER', 'SHOW CREATE VIEW', 'SHOW DATABASES', 'SHOW ENGINE', 'SHOW ENGINE INNODB STATUS', 'SHOW ENGINES', 'SHOW ERRORS', 'SHOW EVENTS', 'SHOW EXPLAIN', 'SHOW FUNCTION CODE', 'SHOW FUNCTION STATUS', 'SHOW GRANTS', 'SHOW INDEX', 'SHOW INDEXES', 'SHOW INDEX_STATISTICS', 'SHOW KEYS', 'SHOW LOCALES', 'SHOW MASTER LOGS', 'SHOW MASTER STATUS', 'SHOW OPEN TABLES', 'SHOW PACKAGE BODY CODE', 'SHOW PACKAGE BODY STATUS', 'SHOW PACKAGE STATUS', 'SHOW PLUGINS', 'SHOW PLUGINS SONAME', 'SHOW PRIVILEGES', 'SHOW PROCEDURE CODE', 'SHOW PROCEDURE STATUS', 'SHOW PROCESSLIST', 'SHOW PROFILE', 'SHOW PROFILES', 'SHOW QUERY_RESPONSE_TIME', 'SHOW RELAYLOG EVENTS', 'SHOW REPLICA', 'SHOW REPLICA HOSTS', 'SHOW REPLICA STATUS', 'SHOW SCHEMAS', 'SHOW SLAVE', 'SHOW SLAVE HOSTS', 'SHOW SLAVE STATUS', 'SHOW STATUS', 'SHOW STORAGE ENGINES', 'SHOW TABLE STATUS', 'SHOW TABLES', 'SHOW TRIGGERS', 'SHOW USER_STATISTICS', 'SHOW VARIABLES', 'SHOW WARNINGS', 'SHOW WSREP_MEMBERSHIP', 'SHOW WSREP_STATUS', 'SHUTDOWN', 'SIGNAL', 'START ALL REPLICAS', 'START ALL SLAVES', 'START REPLICA', 'START SLAVE', 'START TRANSACTION', 'STOP ALL REPLICAS', 'STOP ALL SLAVES', 'STOP REPLICA', 'STOP SLAVE', 'TRUNCATE', 'TRUNCATE TABLE', 'UNINSTALL PLUGIN', 'UNINSTALL SONAME', 'UNLOCK TABLE', 'UPDATE', 'USE', 'WITH', 'XA BEGIN', 'XA COMMIT', 'XA END', 'XA PREPARE', 'XA RECOVER', 'XA ROLLBACK', 'XA START', // other
2701'ADD', 'ALTER COLUMN', 'FROM', 'GROUP BY', 'HAVING', 'INSERT INTO', 'INSERT', 'LIMIT', 'OFFSET', 'ORDER BY', 'SELECT', 'VALUES', 'WHERE'];
2702/**
2703 * Priority 2
2704 * commands that operate on two tables or subqueries
2705 * two main categories: joins and boolean set operators
2706 */
2707
2708var reservedBinaryCommands = [// set booleans
2709'INTERSECT', 'INTERSECT ALL', 'INTERSECT DISTINCT', 'UNION', 'UNION ALL', 'UNION DISTINCT', 'EXCEPT', 'EXCEPT ALL', 'EXCEPT DISTINCT', 'MINUS', 'MINUS ALL', 'MINUS DISTINCT', // joins
2710'JOIN', 'INNER JOIN', 'LEFT JOIN', 'LEFT OUTER JOIN', 'RIGHT JOIN', 'RIGHT OUTER JOIN', 'CROSS JOIN', 'NATURAL JOIN', // non-standard joins
2711'STRAIGHT_JOIN', 'NATURAL LEFT JOIN', 'NATURAL LEFT OUTER JOIN', 'NATURAL RIGHT JOIN', 'NATURAL RIGHT OUTER JOIN'];
2712/**
2713 * Priority 3
2714 * keywords that follow a previous Statement, must be attached to subsequent data
2715 * can be fully inline or on newline with optional indent
2716 */
2717
2718var reservedDependentClauses = ['WHEN', 'ELSE', 'ELSEIF', 'ELSIF']; // For reference: https://mariadb.com/kb/en/sql-statements-structure/
2719
2720var MariaDbFormatter = /*#__PURE__*/function (_Formatter) {
2721 _inherits(MariaDbFormatter, _Formatter);
2722
2723 var _super = _createSuper(MariaDbFormatter);
2724
2725 function MariaDbFormatter() {
2726 _classCallCheck(this, MariaDbFormatter);
2727
2728 return _super.apply(this, arguments);
2729 }
2730
2731 _createClass(MariaDbFormatter, [{
2732 key: "tokenizer",
2733 value: function tokenizer() {
2734 return new _core_Tokenizer__WEBPACK_IMPORTED_MODULE_1__["default"]({
2735 reservedCommands: MariaDbFormatter.reservedCommands,
2736 reservedBinaryCommands: MariaDbFormatter.reservedBinaryCommands,
2737 reservedDependentClauses: MariaDbFormatter.reservedDependentClauses,
2738 reservedJoinConditions: MariaDbFormatter.reservedJoinConditions,
2739 reservedLogicalOperators: MariaDbFormatter.reservedLogicalOperators,
2740 reservedKeywords: MariaDbFormatter.reservedKeywords,
2741 stringTypes: MariaDbFormatter.stringTypes,
2742 blockStart: MariaDbFormatter.blockStart,
2743 blockEnd: MariaDbFormatter.blockEnd,
2744 indexedPlaceholderTypes: MariaDbFormatter.indexedPlaceholderTypes,
2745 namedPlaceholderTypes: MariaDbFormatter.namedPlaceholderTypes,
2746 lineCommentTypes: MariaDbFormatter.lineCommentTypes,
2747 specialWordChars: MariaDbFormatter.specialWordChars,
2748 operators: MariaDbFormatter.operators
2749 });
2750 }
2751 }, {
2752 key: "tokenOverride",
2753 value: function tokenOverride(token) {
2754 // [SET] ( ...
2755 if (_core_token__WEBPACK_IMPORTED_MODULE_2__.isToken.SET(token) && this.tokenLookAhead().value === '(') {
2756 // This is SET datatype, not SET statement
2757 return {
2758 type: _core_token__WEBPACK_IMPORTED_MODULE_2__.TokenType.RESERVED_KEYWORD,
2759 value: token.value
2760 };
2761 }
2762
2763 return token;
2764 }
2765 }]);
2766
2767 return MariaDbFormatter;
2768}(_core_Formatter__WEBPACK_IMPORTED_MODULE_0__["default"]);
2769
2770
2771MariaDbFormatter.reservedCommands = reservedCommands;
2772MariaDbFormatter.reservedBinaryCommands = reservedBinaryCommands;
2773MariaDbFormatter.reservedJoinConditions = ['ON', 'USING'];
2774MariaDbFormatter.reservedLogicalOperators = ['AND', 'OR', 'XOR'];
2775MariaDbFormatter.reservedDependentClauses = reservedDependentClauses;
2776MariaDbFormatter.reservedKeywords = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.dedupe)([].concat(reservedKeywords, reservedFunctions));
2777MariaDbFormatter.stringTypes = ['``', "''", '""'];
2778MariaDbFormatter.blockStart = ['(', 'CASE'];
2779MariaDbFormatter.blockEnd = [')', 'END'];
2780MariaDbFormatter.indexedPlaceholderTypes = ['?'];
2781MariaDbFormatter.namedPlaceholderTypes = [];
2782MariaDbFormatter.lineCommentTypes = ['--', '#'];
2783MariaDbFormatter.specialWordChars = {
2784 prefix: '@'
2785};
2786MariaDbFormatter.operators = [':=', '<<', '>>', '<=>', '&&', '||'];
2787
2788/***/ }),
2789
2790/***/ "./src/languages/mysql.formatter.ts":
2791/*!******************************************!*\
2792 !*** ./src/languages/mysql.formatter.ts ***!
2793 \******************************************/
2794/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2795
2796__webpack_require__.r(__webpack_exports__);
2797/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2798/* harmony export */ "default": () => (/* binding */ MySqlFormatter)
2799/* harmony export */ });
2800/* harmony import */ var _core_Formatter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/Formatter */ "./src/core/Formatter.ts");
2801/* harmony import */ var _core_Tokenizer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/Tokenizer */ "./src/core/Tokenizer.ts");
2802/* harmony import */ var _core_token__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../core/token */ "./src/core/token.ts");
2803/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils */ "./src/utils.ts");
2804function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
2805
2806function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
2807
2808function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
2809
2810function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
2811
2812function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
2813
2814function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
2815
2816function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
2817
2818function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
2819
2820function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
2821
2822function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
2823
2824function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
2825
2826
2827
2828
2829 // TODO: split this into object with function categories
2830
2831/**
2832 * Priority 5 (last)
2833 * Full list of reserved functions
2834 * distinct from Keywords due to interaction with parentheses
2835 */
2836// https://dev.mysql.com/doc/refman/8.0/en/built-in-function-reference.html
2837
2838var reservedFunctions = ['ABS', 'ACOS', 'ADDDATE', 'ADDTIME', 'AES_DECRYPT', 'AES_ENCRYPT', 'AND', 'ANY_VALUE', 'ASCII', 'ASIN', 'ATAN', 'ATAN2', 'AVG', 'BENCHMARK', 'BIN', 'BIN_TO_UUID', 'BINARY', 'BIT_AND', 'BIT_COUNT', 'BIT_LENGTH', 'BIT_OR', 'BIT_XOR', 'CAN_ACCESS_COLUMN', 'CAN_ACCESS_DATABASE', 'CAN_ACCESS_TABLE', 'CAN_ACCESS_USER', 'CAN_ACCESS_VIEW', 'CASE', 'CAST', 'CEIL', 'CEILING', 'CHAR', 'CHAR_LENGTH', 'CHARACTER_LENGTH', 'CHARSET', 'COALESCE', 'COERCIBILITY', 'COLLATION', 'COMPRESS', 'CONCAT', 'CONCAT_WS', 'CONNECTION_ID', 'CONV', 'CONVERT', 'CONVERT_TZ', 'COS', 'COT', 'COUNT', 'CRC32', 'CUME_DIST', 'CURDATE', 'CURRENT_DATE', 'CURRENT_ROLE', 'CURRENT_TIME', 'CURRENT_TIMESTAMP', 'CURRENT_USER', 'CURTIME', 'DATABASE', 'DATE', 'DATE_ADD', 'DATE_FORMAT', 'DATE_SUB', 'DATEDIFF', 'DAY', 'DAYNAME', 'DAYOFMONTH', 'DAYOFWEEK', 'DAYOFYEAR', 'DEFAULT', 'DEGREES', 'DENSE_RANK', 'DIV', 'ELT', 'EXP', 'EXPORT_SET', 'EXTRACT', 'ExtractValue', 'FIELD', 'FIND_IN_SET', 'FIRST_VALUE', 'FLOOR', 'FORMAT', 'FORMAT_BYTES', 'FORMAT_PICO_TIME', 'FOUND_ROWS', 'FROM_BASE64', 'FROM_DAYS', 'FROM_UNIXTIME', 'GeomCollection', 'GeometryCollection', 'GET_DD_COLUMN_PRIVILEGES', 'GET_DD_CREATE_OPTIONS', 'GET_DD_INDEX_SUB_PART_LENGTH', 'GET_FORMAT', 'GET_LOCK', 'GREATEST', 'GROUP_CONCAT', 'GROUPING', 'GTID_SUBSET', 'GTID_SUBTRACT', 'HEX', 'HOUR', 'ICU_VERSION', 'IF', 'IFNULL', 'IN', 'INET_ATON', 'INET_NTOA', 'INET6_ATON', 'INET6_NTOA', 'INSERT', 'INSTR', 'INTERNAL_AUTO_INCREMENT', 'INTERNAL_AVG_ROW_LENGTH', 'INTERNAL_CHECK_TIME', 'INTERNAL_CHECKSUM', 'INTERNAL_DATA_FREE', 'INTERNAL_DATA_LENGTH', 'INTERNAL_DD_CHAR_LENGTH', 'INTERNAL_GET_COMMENT_OR_ERROR', 'INTERNAL_GET_ENABLED_ROLE_JSON', 'INTERNAL_GET_HOSTNAME', 'INTERNAL_GET_USERNAME', 'INTERNAL_GET_VIEW_WARNING_OR_ERROR', 'INTERNAL_INDEX_COLUMN_CARDINALITY', 'INTERNAL_INDEX_LENGTH', 'INTERNAL_IS_ENABLED_ROLE', 'INTERNAL_IS_MANDATORY_ROLE', 'INTERNAL_KEYS_DISABLED', 'INTERNAL_MAX_DATA_LENGTH', 'INTERNAL_TABLE_ROWS', 'INTERNAL_UPDATE_TIME', 'INTERVAL', 'IS', 'IS_FREE_LOCK', 'IS_IPV4', 'IS_IPV4_COMPAT', 'IS_IPV4_MAPPED', 'IS_IPV6', 'IS NOT', 'IS NOT NULL', 'IS NULL', 'IS_USED_LOCK', 'IS_UUID', 'ISNULL', 'JSON_ARRAY', 'JSON_ARRAY_APPEND', 'JSON_ARRAY_INSERT', 'JSON_ARRAYAGG', 'JSON_CONTAINS', 'JSON_CONTAINS_PATH', 'JSON_DEPTH', 'JSON_EXTRACT', 'JSON_INSERT', 'JSON_KEYS', 'JSON_LENGTH', 'JSON_MERGE', 'JSON_MERGE_PATCH', 'JSON_MERGE_PRESERVE', 'JSON_OBJECT', 'JSON_OBJECTAGG', 'JSON_OVERLAPS', 'JSON_PRETTY', 'JSON_QUOTE', 'JSON_REMOVE', 'JSON_REPLACE', 'JSON_SCHEMA_VALID', 'JSON_SCHEMA_VALIDATION_REPORT', 'JSON_SEARCH', 'JSON_SET', 'JSON_STORAGE_FREE', 'JSON_STORAGE_SIZE', 'JSON_TABLE', 'JSON_TYPE', 'JSON_UNQUOTE', 'JSON_VALID', 'JSON_VALUE', 'LAG', 'LAST_DAY', 'LAST_INSERT_ID', 'LAST_VALUE', 'LCASE', 'LEAD', 'LEAST', 'LEFT', 'LENGTH', 'LIKE', 'LineString', 'LN', 'LOAD_FILE', 'LOCALTIME', 'LOCALTIMESTAMP', 'LOCATE', 'LOG', 'LOG10', 'LOG2', 'LOWER', 'LPAD', 'LTRIM', 'MAKE_SET', 'MAKEDATE', 'MAKETIME', 'MASTER_POS_WAIT', 'MATCH', 'MAX', 'MBRContains', 'MBRCoveredBy', 'MBRCovers', 'MBRDisjoint', 'MBREquals', 'MBRIntersects', 'MBROverlaps', 'MBRTouches', 'MBRWithin', 'MD5', 'MEMBER OF', 'MICROSECOND', 'MID', 'MIN', 'MINUTE', 'MOD', 'MONTH', 'MONTHNAME', 'MultiLineString', 'MultiPoint', 'MultiPolygon', 'NAME_CONST', 'NOT', 'NOT IN', 'NOT LIKE', 'NOT REGEXP', 'NOW', 'NTH_VALUE', 'NTILE', 'NULLIF', 'OCT', 'OCTET_LENGTH', 'OR', 'ORD', 'PERCENT_RANK', 'PERIOD_ADD', 'PERIOD_DIFF', 'PI', 'Point', 'Polygon', 'POSITION', 'POW', 'POWER', 'PS_CURRENT_THREAD_ID', 'PS_THREAD_ID', 'QUARTER', 'QUOTE', 'RADIANS', 'RAND', 'RANDOM_BYTES', 'RANK', 'REGEXP', 'REGEXP_INSTR', 'REGEXP_LIKE', 'REGEXP_REPLACE', 'REGEXP_SUBSTR', 'RELEASE_ALL_LOCKS', 'RELEASE_LOCK', 'REPEAT', 'REPLACE', 'REVERSE', 'RIGHT', 'RLIKE', 'ROLES_GRAPHML', 'ROUND', 'ROW_COUNT', 'ROW_NUMBER', 'RPAD', 'RTRIM', 'SCHEMA', 'SEC_TO_TIME', 'SECOND', 'SESSION_USER', 'SHA1', 'SHA2', 'SIGN', 'SIN', 'SLEEP', 'SOUNDEX', 'SOUNDS LIKE', 'SOURCE_POS_WAIT', 'SPACE', 'SQRT', 'ST_Area', 'ST_AsBinary', 'ST_AsGeoJSON', 'ST_AsText', 'ST_Buffer', 'ST_Buffer_Strategy', 'ST_Centroid', 'ST_Collect', 'ST_Contains', 'ST_ConvexHull', 'ST_Crosses', 'ST_Difference', 'ST_Dimension', 'ST_Disjoint', 'ST_Distance', 'ST_Distance_Sphere', 'ST_EndPoint', 'ST_Envelope', 'ST_Equals', 'ST_ExteriorRing', 'ST_FrechetDistance', 'ST_GeoHash', 'ST_GeomCollFromText', 'ST_GeomCollFromWKB', 'ST_GeometryN', 'ST_GeometryType', 'ST_GeomFromGeoJSON', 'ST_GeomFromText', 'ST_GeomFromWKB', 'ST_HausdorffDistance', 'ST_InteriorRingN', 'ST_Intersection', 'ST_Intersects', 'ST_IsClosed', 'ST_IsEmpty', 'ST_IsSimple', 'ST_IsValid', 'ST_LatFromGeoHash', 'ST_Latitude', 'ST_Length', 'ST_LineFromText', 'ST_LineFromWKB', 'ST_LineInterpolatePoint', 'ST_LineInterpolatePoints', 'ST_LongFromGeoHash', 'ST_Longitude', 'ST_MakeEnvelope', 'ST_MLineFromText', 'ST_MLineFromWKB', 'ST_MPointFromText', 'ST_MPointFromWKB', 'ST_MPolyFromText', 'ST_MPolyFromWKB', 'ST_NumGeometries', 'ST_NumInteriorRing', 'ST_NumPoints', 'ST_Overlaps', 'ST_PointAtDistance', 'ST_PointFromGeoHash', 'ST_PointFromText', 'ST_PointFromWKB', 'ST_PointN', 'ST_PolyFromText', 'ST_PolyFromWKB', 'ST_Simplify', 'ST_SRID', 'ST_StartPoint', 'ST_SwapXY', 'ST_SymDifference', 'ST_Touches', 'ST_Transform', 'ST_Union', 'ST_Validate', 'ST_Within', 'ST_X', 'ST_Y', 'STATEMENT_DIGEST', 'STATEMENT_DIGEST_TEXT', 'STD', 'STDDEV', 'STDDEV_POP', 'STDDEV_SAMP', 'STR_TO_DATE', 'STRCMP', 'SUBDATE', 'SUBSTR', 'SUBSTRING', 'SUBSTRING_INDEX', 'SUBTIME', 'SUM', 'SYSDATE', 'SYSTEM_USER', 'TAN', 'TIME', 'TIME_FORMAT', 'TIME_TO_SEC', 'TIMEDIFF', 'TIMESTAMP', 'TIMESTAMPADD', 'TIMESTAMPDIFF', 'TO_BASE64', 'TO_DAYS', 'TO_SECONDS', 'TRIM', 'TRUNCATE', 'UCASE', 'UNCOMPRESS', 'UNCOMPRESSED_LENGTH', 'UNHEX', 'UNIX_TIMESTAMP', 'UpdateXML', 'UPPER', 'USER', 'UTC_DATE', 'UTC_TIME', 'UTC_TIMESTAMP', 'UUID', 'UUID_SHORT', 'UUID_TO_BIN', 'VALIDATE_PASSWORD_STRENGTH', 'VALUES', 'VAR_POP', 'VAR_SAMP', 'VARIANCE', 'VERSION', 'WAIT_FOR_EXECUTED_GTID_SET', 'WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS', 'WEEK', 'WEEKDAY', 'WEEKOFYEAR', 'WEIGHT_STRING', 'XOR', 'YEAR', 'YEARWEEK'];
2839/**
2840 * Priority 5 (last)
2841 * Full list of reserved words
2842 * any words that are in a higher priority are removed
2843 */
2844// https://dev.mysql.com/doc/refman/8.0/en/keywords.html
2845
2846var reservedKeywords = ['ACCESSIBLE', 'ACCOUNT', 'ACTION', 'ACTIVE', 'ADMIN', 'AFTER', 'AGAINST', 'AGGREGATE', 'ALGORITHM', 'ALL', 'ALTER', 'ALWAYS', 'ANALYSE', 'ANALYZE', 'ANY', 'ARRAY', 'AS', 'ASC', 'ASENSITIVE', 'AT', 'ATTRIBUTE', 'AUTHENTICATION', 'AUTOEXTEND_SIZE', 'AUTO_INCREMENT', 'AVG_ROW_LENGTH', 'BACKUP', 'BEFORE', 'BEGIN', 'BETWEEN', 'BIGINT', 'BIT', 'BLOB', 'BLOCK', 'BOOL', 'BOOLEAN', 'BOTH', 'BTREE', 'BUCKETS', 'BY', 'BYTE', 'CACHE', 'CASCADE', 'CASCADED', 'CATALOG_NAME', 'CHAIN', 'CHALLENGE_RESPONSE', 'CHANGE', 'CHANGED', 'CHANNEL', 'CHARACTER', 'CHARACTER SET', 'CHECK', 'CHECKSUM', 'CIPHER', 'CLASS_ORIGIN', 'CLIENT', 'CLOSE', 'CODE', 'COLLATE', 'COLUMN', 'COLUMNS', 'COLUMN_FORMAT', 'COLUMN_NAME', 'COMMENT', 'COMMITTED', 'COMPACT', 'COMPLETION', 'COMPONENT', 'COMPRESSED', 'COMPRESSION', 'CONCURRENT', 'CONDITION', 'CONNECTION', 'CONSISTENT', 'CONSTRAINT', 'CONSTRAINT_CATALOG', 'CONSTRAINT_NAME', 'CONSTRAINT_SCHEMA', 'CONTAINS', 'CONTEXT', 'CONTINUE', 'CPU', 'CREATE', 'CROSS', 'CUBE', 'CURRENT', 'CURSOR', 'CURSOR_NAME', 'DATA', 'DATABASES', 'DATAFILE', 'DATETIME', 'DAY_HOUR', 'DAY_MICROSECOND', 'DAY_MINUTE', 'DAY_SECOND', 'DEALLOCATE', 'DEC', 'DECIMAL', 'DECLARE', 'DEFAULT_AUTH', 'DEFINER', 'DEFINITION', 'DELAYED', 'DELAY_KEY_WRITE', 'DESC', 'DESCRIPTION', 'DES_KEY_FILE', 'DETERMINISTIC', 'DIAGNOSTICS', 'DIRECTORY', 'DISABLE', 'DISCARD', 'DISK', 'DISTINCT', 'DISTINCTROW', 'DOUBLE', 'DROP', 'DUAL', 'DUMPFILE', 'DUPLICATE', 'DYNAMIC', 'EACH', 'EMPTY', 'ENABLE', 'ENCLOSED', 'ENCRYPTION', 'ENDS', 'ENFORCED', 'ENGINE', 'ENGINES', 'ENGINE_ATTRIBUTE', 'ENUM', 'ERROR', 'ERRORS', 'ESCAPE', 'ESCAPED', 'EVENT', 'EVENTS', 'EVERY', 'EXCHANGE', 'EXCLUDE', 'EXISTS', 'EXIT', 'EXPANSION', 'EXPIRE', 'EXPORT', 'EXTENDED', 'EXTENT_SIZE', 'FACTOR', 'FAILED_LOGIN_ATTEMPTS', 'FALSE', 'FAST', 'FAULTS', 'FETCH', 'FIELDS', 'FILE', 'FILE_BLOCK_SIZE', 'FILTER', 'FINISH', 'FIRST', 'FIXED', 'FLOAT', 'FLOAT4', 'FLOAT8', 'FOLLOWING', 'FOLLOWS', 'FOR', 'FORCE', 'FOREIGN', 'FOUND', 'FULL', 'FULLTEXT', 'FUNCTION', 'GENERAL', 'GENERATED', 'GEOMCOLLECTION', 'GEOMETRY', 'GEOMETRYCOLLECTION', 'GET', 'GET_MASTER_PUBLIC_KEY', 'GET_SOURCE_PUBLIC_KEY', 'GLOBAL', '@@GLOBAL', 'GRANTS', 'GROUP', 'GROUPS', 'GROUP_REPLICATION', 'GTID_ONLY', 'HASH', 'HIGH_PRIORITY', 'HISTOGRAM', 'HISTORY', 'HOST', 'HOSTS', 'HOUR_MICROSECOND', 'HOUR_MINUTE', 'HOUR_SECOND', 'IDENTIFIED', 'IGNORE', 'IGNORE_SERVER_IDS', 'IMPORT', 'INACTIVE', 'INDEX', 'INDEXES', 'INFILE', 'INITIAL', 'INITIAL_SIZE', 'INITIATE', 'INNER', 'INOUT', 'INSENSITIVE', 'INSERT_METHOD', 'INSTALL', 'INSTANCE', 'INT', 'INT1', 'INT2', 'INT3', 'INT4', 'INT8', 'INTEGER', 'INTO', 'INVISIBLE', 'INVOKER', 'IO', 'IO_AFTER_GTIDS', 'IO_BEFORE_GTIDS', 'IO_THREAD', 'IPC', 'ISOLATION', 'ISSUER', 'ITERATE', 'JSON', 'KEY', 'KEYRING', 'KEYS', 'KEY_BLOCK_SIZE', 'LANGUAGE', 'LAST', 'LATERAL', 'LEADING', 'LEAVE', 'LEAVES', 'LESS', 'LEVEL', 'LINEAR', 'LINES', 'LINESTRING', 'LIST', 'LOAD', 'LOCAL', 'LOCK', 'LOCKED', 'LOCKS', 'LOGFILE', 'LOGS', 'LONG', 'LONGBLOB', 'LONGTEXT', 'LOOP', 'LOW_PRIORITY', 'MASTER', 'MASTER_AUTO_POSITION', 'MASTER_BIND', 'MASTER_COMPRESSION_ALGORITHMS', 'MASTER_CONNECT_RETRY', 'MASTER_DELAY', 'MASTER_HEARTBEAT_PERIOD', 'MASTER_HOST', 'MASTER_LOG_FILE', 'MASTER_LOG_POS', 'MASTER_PASSWORD', 'MASTER_PORT', 'MASTER_PUBLIC_KEY_PATH', 'MASTER_RETRY_COUNT', 'MASTER_SERVER_ID', 'MASTER_SSL', 'MASTER_SSL_CA', 'MASTER_SSL_CAPATH', 'MASTER_SSL_CERT', 'MASTER_SSL_CIPHER', 'MASTER_SSL_CRL', 'MASTER_SSL_CRLPATH', 'MASTER_SSL_KEY', 'MASTER_SSL_VERIFY_SERVER_CERT', 'MASTER_TLS_CIPHERSUITES', 'MASTER_TLS_VERSION', 'MASTER_USER', 'MASTER_ZSTD_COMPRESSION_LEVEL', 'MAXVALUE', 'MAX_CONNECTIONS_PER_HOUR', 'MAX_QUERIES_PER_HOUR', 'MAX_ROWS', 'MAX_SIZE', 'MAX_UPDATES_PER_HOUR', 'MAX_USER_CONNECTIONS', 'MEDIUM', 'MEDIUMBLOB', 'MEDIUMINT', 'MEDIUMTEXT', 'MEMBER', 'MEMORY', 'MERGE', 'MESSAGE_TEXT', 'MIDDLEINT', 'MIGRATE', 'MINUTE_MICROSECOND', 'MINUTE_SECOND', 'MIN_ROWS', 'MODE', 'MODIFIES', 'MODIFY', 'MULTILINESTRING', 'MULTIPOINT', 'MULTIPOLYGON', 'MUTEX', 'MYSQL_ERRNO', 'NAME', 'NAMES', 'NATIONAL', 'NATURAL', 'NCHAR', 'NDB', 'NDBCLUSTER', 'NESTED', 'NETWORK_NAMESPACE', 'NEVER', 'NEW', 'NEXT', 'NO', 'NODEGROUP', 'NONE', 'NOWAIT', 'NO_WAIT', 'NO_WRITE_TO_BINLOG', 'NULL', 'NULLS', 'NUMBER', 'NUMERIC', 'NVARCHAR', 'OF', 'OFF', 'OFFSET', 'OJ', 'OLD', 'ON DELETE', 'ON UPDATE', 'ONE', 'ONLY', 'OPEN', 'OPTIMIZE', 'OPTIMIZER_COSTS', 'OPTION', 'OPTIONAL', 'OPTIONALLY', 'OPTIONS', 'ORDER', 'ORDINALITY', 'ORGANIZATION', 'OTHERS', 'OUT', 'OUTER', 'OUTFILE', 'OVER', 'OWNER', 'PACK_KEYS', 'PAGE', 'PARSER', 'PARSE_GCOL_EXPR', 'PARTIAL', 'PARTITION', 'PARTITIONING', 'PARTITIONS', 'PASSWORD', 'PASSWORD_LOCK_TIME', 'PATH', 'PERSIST', '@@PERSIST', 'PERSIST_ONLY', '@@PERSIST_ONLY', 'PHASE', 'PLUGIN', 'PLUGINS', 'PLUGIN_DIR', 'POINT', 'POLYGON', 'PORT', 'PRECEDES', 'PRECEDING', 'PRECISION', 'PRESERVE', 'PREV', 'PRIMARY', 'PRIVILEGES', 'PRIVILEGE_CHECKS_USER', 'PROCEDURE', 'PROCESS', 'PROCESSLIST', 'PROFILE', 'PROFILES', 'PROXY', 'PURGE', 'QUERY', 'QUICK', 'RANDOM', 'RANGE', 'READ', 'READS', 'READ_ONLY', 'READ_WRITE', 'REAL', 'REBUILD', 'RECOVER', 'RECURSIVE', 'REDOFILE', 'REDO_BUFFER_SIZE', 'REDUNDANT', 'REFERENCE', 'REFERENCES', 'REGISTRATION', 'RELAY', 'RELAYLOG', 'RELAY_LOG_FILE', 'RELAY_LOG_POS', 'RELAY_THREAD', 'RELEASE', 'RELOAD', 'REMOTE', 'REMOVE', 'RENAME', 'REORGANIZE', 'REPAIR', 'REPEATABLE', 'REPLICA', 'REPLICAS', 'REPLICATE_DO_DB', 'REPLICATE_DO_TABLE', 'REPLICATE_IGNORE_DB', 'REPLICATE_IGNORE_TABLE', 'REPLICATE_REWRITE_DB', 'REPLICATE_WILD_DO_TABLE', 'REPLICATE_WILD_IGNORE_TABLE', 'REPLICATION', 'REQUIRE', 'REQUIRE_ROW_FORMAT', 'RESIGNAL', 'RESOURCE', 'RESPECT', 'RESTORE', 'RESTRICT', 'RESUME', 'RETAIN', 'RETURN', 'RETURNED_SQLSTATE', 'RETURNING', 'RETURNS', 'REUSE', 'ROLE', 'ROLLUP', 'ROTATE', 'ROUTINE', 'ROW', 'ROWS', 'ROW_FORMAT', 'RTREE', 'SCHEDULE', 'SCHEMAS', 'SCHEMA_NAME', 'SECONDARY', 'SECONDARY_ENGINE', 'SECONDARY_ENGINE_ATTRIBUTE', 'SECONDARY_LOAD', 'SECONDARY_UNLOAD', 'SECOND_MICROSECOND', 'SECURITY', 'SENSITIVE', 'SEPARATOR', 'SERIAL', 'SERIALIZABLE', 'SERVER', 'SESSION', '@@SESSION', 'SHARE', 'SIGNAL', 'SIGNED', 'SIMPLE', 'SKIP', 'SLAVE', 'SLOW', 'SMALLINT', 'SNAPSHOT', 'SOCKET', 'SOME', 'SONAME', 'SOUNDS', 'SOURCE', 'SOURCE_AUTO_POSITION', 'SOURCE_BIND', 'SOURCE_COMPRESSION_ALGORITHMS', 'SOURCE_CONNECT_RETRY', 'SOURCE_DELAY', 'SOURCE_HEARTBEAT_PERIOD', 'SOURCE_HOST', 'SOURCE_LOG_FILE', 'SOURCE_LOG_POS', 'SOURCE_PASSWORD', 'SOURCE_PORT', 'SOURCE_PUBLIC_KEY_PATH', 'SOURCE_RETRY_COUNT', 'SOURCE_SSL', 'SOURCE_SSL_CA', 'SOURCE_SSL_CAPATH', 'SOURCE_SSL_CERT', 'SOURCE_SSL_CIPHER', 'SOURCE_SSL_CRL', 'SOURCE_SSL_CRLPATH', 'SOURCE_SSL_KEY', 'SOURCE_SSL_VERIFY_SERVER_CERT', 'SOURCE_TLS_CIPHERSUITES', 'SOURCE_TLS_VERSION', 'SOURCE_USER', 'SOURCE_ZSTD_COMPRESSION_LEVEL', 'SPATIAL', 'SPECIFIC', 'SQL', 'SQLEXCEPTION', 'SQLSTATE', 'SQLWARNING', 'SQL_AFTER_GTIDS', 'SQL_AFTER_MTS_GAPS', 'SQL_BEFORE_GTIDS', 'SQL_BIG_RESULT', 'SQL_BUFFER_RESULT', 'SQL_CACHE', 'SQL_CALC_FOUND_ROWS', 'SQL_NO_CACHE', 'SQL_SMALL_RESULT', 'SQL_THREAD', 'SQL_TSI_DAY', 'SQL_TSI_HOUR', 'SQL_TSI_MINUTE', 'SQL_TSI_MONTH', 'SQL_TSI_QUARTER', 'SQL_TSI_SECOND', 'SQL_TSI_WEEK', 'SQL_TSI_YEAR', 'SRID', 'SSL', 'STACKED', 'START', 'STARTING', 'STARTS', 'STATS_AUTO_RECALC', 'STATS_PERSISTENT', 'STATS_SAMPLE_PAGES', 'STATUS', 'STOP', 'STORAGE', 'STORED', 'STREAM', 'STRING', 'SUBCLASS_ORIGIN', 'SUBJECT', 'SUBPARTITION', 'SUBPARTITIONS', 'SUPER', 'SUSPEND', 'SWAPS', 'SWITCHES', 'SYSTEM', 'TABLES', 'TABLESPACE', 'TABLE_CHECKSUM', 'TABLE_NAME', 'TEMPORARY', 'TEMPTABLE', 'TERMINATED', 'TEXT', 'THAN', 'THEN', 'THREAD_PRIORITY', 'TIES', 'TINYBLOB', 'TINYINT', 'TINYTEXT', 'TLS', 'TO', 'TRAILING', 'TRANSACTION', 'TRIGGER', 'TRIGGERS', 'TRUE', 'TYPE', 'TYPES', 'UNBOUNDED', 'UNCOMMITTED', 'UNDEFINED', 'UNDO', 'UNDOFILE', 'UNDO_BUFFER_SIZE', 'UNICODE', 'UNINSTALL', 'UNIQUE', 'UNKNOWN', 'UNLOCK', 'UNREGISTER', 'UNSIGNED', 'UNTIL', 'UPGRADE', 'USAGE', 'USER_RESOURCES', 'USE_FRM', 'VALIDATION', 'VALUE', 'VARBINARY', 'VARCHAR', 'VARCHARACTER', 'VARIABLES', 'VARYING', 'VCPU', 'VIEW', 'VIRTUAL', 'VISIBLE', 'WAIT', 'WARNINGS', 'WHILE', 'WINDOW', 'WITHOUT', 'WORK', 'WRAPPER', 'WRITE', 'X509', 'XID', 'XML', 'YEAR_MONTH', 'ZEROFILL', 'ZONE'];
2847/**
2848 * Priority 1 (first)
2849 * keywords that begin a new statement
2850 * will begin new indented block
2851 */
2852// https://dev.mysql.com/doc/refman/8.0/en/sql-statements.html
2853
2854var reservedCommands = ['ALTER DATABASE', 'ALTER EVENT', 'ALTER FUNCTION', 'ALTER INSTANCE', 'ALTER LOGFILE GROUP', 'ALTER PROCEDURE', 'ALTER RESOURCE GROUP', 'ALTER SERVER', 'ALTER TABLE', 'ALTER TABLESPACE', 'ALTER USER', 'ALTER VIEW', 'ANALYZE TABLE', 'BINLOG', 'CACHE INDEX', 'CALL', 'CHANGE MASTER TO', 'CHANGE REPLICATION FILTER', 'CHANGE REPLICATION SOURCE TO', 'CHECK TABLE', 'CHECKSUM TABLE', 'CLONE', 'COMMIT', 'CREATE DATABASE', 'CREATE EVENT', 'CREATE FUNCTION', 'CREATE FUNCTION', 'CREATE INDEX', 'CREATE LOGFILE GROUP', 'CREATE PROCEDURE', 'CREATE RESOURCE GROUP', 'CREATE ROLE', 'CREATE SERVER', 'CREATE SPATIAL REFERENCE SYSTEM', 'CREATE TABLE', 'CREATE TABLESPACE', 'CREATE TRIGGER', 'CREATE USER', 'CREATE VIEW', 'DEALLOCATE PREPARE', 'DELETE', 'DESCRIBE', 'DO', 'DROP DATABASE', 'DROP EVENT', 'DROP FUNCTION', 'DROP FUNCTION', 'DROP INDEX', 'DROP LOGFILE GROUP', 'DROP PROCEDURE', 'DROP RESOURCE GROUP', 'DROP ROLE', 'DROP SERVER', 'DROP SPATIAL REFERENCE SYSTEM', 'DROP TABLE', 'DROP TABLESPACE', 'DROP TRIGGER', 'DROP USER', 'DROP VIEW', 'EXECUTE', 'EXPLAIN', 'FLUSH', 'GRANT', 'HANDLER', 'HELP', 'IMPORT TABLE', 'INSERT', 'INSTALL COMPONENT', 'INSTALL PLUGIN', 'KILL', 'LOAD DATA', 'LOAD INDEX INTO CACHE', 'LOAD XML', 'LOCK INSTANCE FOR BACKUP', 'LOCK TABLES', 'MASTER_POS_WAIT', 'OPTIMIZE TABLE', 'PREPARE', 'PURGE BINARY LOGS', 'RELEASE SAVEPOINT', 'RENAME TABLE', 'RENAME USER', 'REPAIR TABLE', 'REPLACE', 'RESET', 'RESET MASTER', 'RESET PERSIST', 'RESET REPLICA', 'RESET SLAVE', 'RESTART', 'REVOKE', 'ROLLBACK', 'ROLLBACK TO SAVEPOINT', 'SAVEPOINT', 'SELECT', 'SET', 'SET CHARACTER SET', 'SET DEFAULT ROLE', 'SET NAMES', 'SET PASSWORD', 'SET RESOURCE GROUP', 'SET ROLE', 'SET TRANSACTION', 'SHOW', 'SHOW BINARY LOGS', 'SHOW BINLOG EVENTS', 'SHOW CHARACTER SET', 'SHOW COLLATION', 'SHOW COLUMNS', 'SHOW CREATE DATABASE', 'SHOW CREATE EVENT', 'SHOW CREATE FUNCTION', 'SHOW CREATE PROCEDURE', 'SHOW CREATE TABLE', 'SHOW CREATE TRIGGER', 'SHOW CREATE USER', 'SHOW CREATE VIEW', 'SHOW DATABASES', 'SHOW ENGINE', 'SHOW ENGINES', 'SHOW ERRORS', 'SHOW EVENTS', 'SHOW FUNCTION CODE', 'SHOW FUNCTION STATUS', 'SHOW GRANTS', 'SHOW INDEX', 'SHOW MASTER STATUS', 'SHOW OPEN TABLES', 'SHOW PLUGINS', 'SHOW PRIVILEGES', 'SHOW PROCEDURE CODE', 'SHOW PROCEDURE STATUS', 'SHOW PROCESSLIST', 'SHOW PROFILE', 'SHOW PROFILES', 'SHOW RELAYLOG EVENTS', 'SHOW REPLICA STATUS', 'SHOW REPLICAS', 'SHOW SLAVE', 'SHOW SLAVE HOSTS', 'SHOW STATUS', 'SHOW TABLE STATUS', 'SHOW TABLES', 'SHOW TRIGGERS', 'SHOW VARIABLES', 'SHOW WARNINGS', 'SHUTDOWN', 'SOURCE_POS_WAIT', 'START GROUP_REPLICATION', 'START REPLICA', 'START SLAVE', 'START TRANSACTION', 'STOP GROUP_REPLICATION', 'STOP REPLICA', 'STOP SLAVE', 'TABLE', 'TRUNCATE TABLE', 'UNINSTALL COMPONENT', 'UNINSTALL PLUGIN', 'UNLOCK INSTANCE', 'UNLOCK TABLES', 'UPDATE', 'USE', 'VALUES', 'WITH', 'XA', // flow control
2855// 'IF',
2856'ITERATE', 'LEAVE', 'LOOP', 'REPEAT', 'RETURN', 'WHILE', // other
2857'ADD', 'ALTER COLUMN', 'FROM', 'GROUP BY', 'HAVING', 'INSERT INTO', 'LIMIT', 'OFFSET', 'ORDER BY', 'WHERE'];
2858/**
2859 * Priority 2
2860 * commands that operate on two tables or subqueries
2861 * two main categories: joins and boolean set operators
2862 */
2863
2864var reservedBinaryCommands = [// set booleans
2865'INTERSECT', 'INTERSECT ALL', 'INTERSECT DISTINCT', 'UNION', 'UNION ALL', 'UNION DISTINCT', 'EXCEPT', 'EXCEPT ALL', 'EXCEPT DISTINCT', // joins
2866'JOIN', 'INNER JOIN', 'LEFT JOIN', 'LEFT OUTER JOIN', 'RIGHT JOIN', 'RIGHT OUTER JOIN', 'CROSS JOIN', 'NATURAL JOIN', // non-standard joins
2867'STRAIGHT_JOIN', 'NATURAL LEFT JOIN', 'NATURAL LEFT OUTER JOIN', 'NATURAL RIGHT JOIN', 'NATURAL RIGHT OUTER JOIN'];
2868/**
2869 * Priority 3
2870 * keywords that follow a previous Statement, must be attached to subsequent data
2871 * can be fully inline or on newline with optional indent
2872 */
2873
2874var reservedDependentClauses = ['WHEN', 'ELSE', 'ELSEIF']; // https://dev.mysql.com/doc/refman/8.0/en/
2875
2876var MySqlFormatter = /*#__PURE__*/function (_Formatter) {
2877 _inherits(MySqlFormatter, _Formatter);
2878
2879 var _super = _createSuper(MySqlFormatter);
2880
2881 function MySqlFormatter() {
2882 _classCallCheck(this, MySqlFormatter);
2883
2884 return _super.apply(this, arguments);
2885 }
2886
2887 _createClass(MySqlFormatter, [{
2888 key: "tokenizer",
2889 value: function tokenizer() {
2890 return new _core_Tokenizer__WEBPACK_IMPORTED_MODULE_1__["default"]({
2891 reservedCommands: MySqlFormatter.reservedCommands,
2892 reservedBinaryCommands: MySqlFormatter.reservedBinaryCommands,
2893 reservedDependentClauses: MySqlFormatter.reservedDependentClauses,
2894 reservedJoinConditions: MySqlFormatter.reservedJoinConditions,
2895 reservedLogicalOperators: MySqlFormatter.reservedLogicalOperators,
2896 reservedKeywords: MySqlFormatter.reservedKeywords,
2897 stringTypes: MySqlFormatter.stringTypes,
2898 blockStart: MySqlFormatter.blockStart,
2899 blockEnd: MySqlFormatter.blockEnd,
2900 indexedPlaceholderTypes: MySqlFormatter.indexedPlaceholderTypes,
2901 namedPlaceholderTypes: MySqlFormatter.namedPlaceholderTypes,
2902 lineCommentTypes: MySqlFormatter.lineCommentTypes,
2903 specialWordChars: MySqlFormatter.specialWordChars,
2904 operators: MySqlFormatter.operators
2905 });
2906 }
2907 }, {
2908 key: "tokenOverride",
2909 value: function tokenOverride(token) {
2910 // [SET] ( ...
2911 if (_core_token__WEBPACK_IMPORTED_MODULE_2__.isToken.SET(token) && this.tokenLookAhead().value === '(') {
2912 // This is SET datatype, not SET statement
2913 return {
2914 type: _core_token__WEBPACK_IMPORTED_MODULE_2__.TokenType.RESERVED_KEYWORD,
2915 value: token.value
2916 };
2917 }
2918
2919 return token;
2920 }
2921 }]);
2922
2923 return MySqlFormatter;
2924}(_core_Formatter__WEBPACK_IMPORTED_MODULE_0__["default"]);
2925
2926
2927MySqlFormatter.reservedCommands = reservedCommands;
2928MySqlFormatter.reservedBinaryCommands = reservedBinaryCommands;
2929MySqlFormatter.reservedDependentClauses = reservedDependentClauses;
2930MySqlFormatter.reservedJoinConditions = ['ON', 'USING'];
2931MySqlFormatter.reservedLogicalOperators = ['AND', 'OR', 'XOR'];
2932MySqlFormatter.reservedKeywords = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.dedupe)([].concat(reservedKeywords, reservedFunctions));
2933MySqlFormatter.stringTypes = ['``', "''", '""'];
2934MySqlFormatter.blockStart = ['(', 'CASE'];
2935MySqlFormatter.blockEnd = [')', 'END'];
2936MySqlFormatter.indexedPlaceholderTypes = ['?'];
2937MySqlFormatter.namedPlaceholderTypes = [];
2938MySqlFormatter.lineCommentTypes = ['--', '#'];
2939MySqlFormatter.specialWordChars = {
2940 prefix: '@:'
2941};
2942MySqlFormatter.operators = [':=', '<<', '>>', '<=>', '&&', '||', '->', '->>'];
2943
2944/***/ }),
2945
2946/***/ "./src/languages/n1ql.formatter.ts":
2947/*!*****************************************!*\
2948 !*** ./src/languages/n1ql.formatter.ts ***!
2949 \*****************************************/
2950/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2951
2952__webpack_require__.r(__webpack_exports__);
2953/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2954/* harmony export */ "default": () => (/* binding */ N1qlFormatter)
2955/* harmony export */ });
2956/* harmony import */ var _core_Formatter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/Formatter */ "./src/core/Formatter.ts");
2957/* harmony import */ var _core_Tokenizer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/Tokenizer */ "./src/core/Tokenizer.ts");
2958/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils */ "./src/utils.ts");
2959function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
2960
2961function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
2962
2963function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
2964
2965function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
2966
2967function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
2968
2969function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
2970
2971function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
2972
2973function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
2974
2975function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
2976
2977function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
2978
2979function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
2980
2981
2982
2983 // TODO: split this into object with function categories
2984
2985/**
2986 * Priority 5 (last)
2987 * Full list of reserved functions
2988 * distinct from Keywords due to interaction with parentheses
2989 */
2990// https://docs.couchbase.com/server/current/n1ql/n1ql-language-reference/functions.html
2991
2992var reservedFunctions = ['ABORT', 'ABS', 'ACOS', 'ADVISOR', 'ARRAY_AGG', 'ARRAY_AGG', 'ARRAY_APPEND', 'ARRAY_AVG', 'ARRAY_BINARY_SEARCH', 'ARRAY_CONCAT', 'ARRAY_CONTAINS', 'ARRAY_COUNT', 'ARRAY_DISTINCT', 'ARRAY_EXCEPT', 'ARRAY_FLATTEN', 'ARRAY_IFNULL', 'ARRAY_INSERT', 'ARRAY_INTERSECT', 'ARRAY_LENGTH', 'ARRAY_MAX', 'ARRAY_MIN', 'ARRAY_MOVE', 'ARRAY_POSITION', 'ARRAY_PREPEND', 'ARRAY_PUT', 'ARRAY_RANGE', 'ARRAY_REMOVE', 'ARRAY_REPEAT', 'ARRAY_REPLACE', 'ARRAY_REVERSE', 'ARRAY_SORT', 'ARRAY_STAR', 'ARRAY_SUM', 'ARRAY_SYMDIFF', 'ARRAY_SYMDIFF1', 'ARRAY_SYMDIFFN', 'ARRAY_UNION', 'ASIN', 'ATAN', 'ATAN2', 'AVG', 'BASE64', 'BASE64_DECODE', 'BASE64_ENCODE', 'BITAND ', 'BITCLEAR ', 'BITNOT ', 'BITOR ', 'BITSET ', 'BITSHIFT ', 'BITTEST ', 'BITXOR ', 'CEIL', 'CLOCK_LOCAL', 'CLOCK_MILLIS', 'CLOCK_STR', 'CLOCK_TZ', 'CLOCK_UTC', 'COALESCE', 'CONCAT', 'CONCAT2', 'CONTAINS', 'CONTAINS_TOKEN', 'CONTAINS_TOKEN_LIKE', 'CONTAINS_TOKEN_REGEXP', 'COS', 'COUNT', 'COUNT', 'COUNTN', 'CUME_DIST', 'CURL', 'DATE_ADD_MILLIS', 'DATE_ADD_STR', 'DATE_DIFF_MILLIS', 'DATE_DIFF_STR', 'DATE_FORMAT_STR', 'DATE_PART_MILLIS', 'DATE_PART_STR', 'DATE_RANGE_MILLIS', 'DATE_RANGE_STR', 'DATE_TRUNC_MILLIS', 'DATE_TRUNC_STR', 'DECODE', 'DECODE_JSON', 'DEGREES', 'DENSE_RANK', 'DURATION_TO_STR', // 'E',
2993'ENCODED_SIZE', 'ENCODE_JSON', 'EXP', 'FIRST_VALUE', 'FLOOR', 'GREATEST', 'HAS_TOKEN', 'IFINF', 'IFMISSING', 'IFMISSINGORNULL', 'IFNAN', 'IFNANORINF', 'IFNULL', 'INITCAP', 'ISARRAY', 'ISATOM', 'ISBITSET', 'ISBOOLEAN', 'ISNUMBER', 'ISOBJECT', 'ISSTRING', 'LAG', 'LAST_VALUE', 'LEAD', 'LEAST', 'LENGTH', 'LN', 'LOG', 'LOWER', 'LTRIM', 'MAX', 'MEAN', 'MEDIAN', 'META', 'MILLIS', 'MILLIS_TO_LOCAL', 'MILLIS_TO_STR', 'MILLIS_TO_TZ', 'MILLIS_TO_UTC', 'MILLIS_TO_ZONE_NAME', 'MIN', 'MISSINGIF', 'NANIF', 'NEGINFIF', 'NOW_LOCAL', 'NOW_MILLIS', 'NOW_STR', 'NOW_TZ', 'NOW_UTC', 'NTH_VALUE', 'NTILE', 'NULLIF', 'NVL', 'NVL2', 'OBJECT_ADD', 'OBJECT_CONCAT', 'OBJECT_INNER_PAIRS', 'OBJECT_INNER_VALUES', 'OBJECT_LENGTH', 'OBJECT_NAMES', 'OBJECT_PAIRS', 'OBJECT_PUT', 'OBJECT_REMOVE', 'OBJECT_RENAME', 'OBJECT_REPLACE', 'OBJECT_UNWRAP', 'OBJECT_VALUES', 'PAIRS', 'PERCENT_RANK', 'PI', 'POLY_LENGTH', 'POSINFIF', 'POSITION', 'POWER', 'RADIANS', 'RANDOM', 'RANK', 'RATIO_TO_REPORT', 'REGEXP_CONTAINS', 'REGEXP_LIKE', 'REGEXP_MATCHES', 'REGEXP_POSITION', 'REGEXP_REPLACE', 'REGEXP_SPLIT', 'REGEX_CONTAINS', 'REGEX_LIKE', 'REGEX_MATCHES', 'REGEX_POSITION', 'REGEX_REPLACE', 'REGEX_SPLIT', 'REPEAT', 'REPLACE', 'REVERSE', 'ROUND', 'ROW_NUMBER', 'RTRIM', 'SEARCH', 'SEARCH_META', 'SEARCH_SCORE', 'SIGN', 'SIN', 'SPLIT', 'SQRT', 'STDDEV', 'STDDEV_POP', 'STDDEV_SAMP', 'STR_TO_DURATION', 'STR_TO_MILLIS', 'STR_TO_TZ', 'STR_TO_UTC', 'STR_TO_ZONE_NAME', 'SUBSTR', 'SUFFIXES', 'SUM', 'TAN', 'TITLE', 'TOARRAY', 'TOATOM', 'TOBOOLEAN', 'TOKENS', 'TOKENS', 'TONUMBER', 'TOOBJECT', 'TOSTRING', 'TRIM', 'TRUNC', // 'TYPE', // disabled
2994'UPPER', 'UUID', 'VARIANCE', 'VARIANCE_POP', 'VARIANCE_SAMP', 'VAR_POP', 'VAR_SAMP', 'WEEKDAY_MILLIS', 'WEEKDAY_STR'];
2995/**
2996 * Priority 5 (last)
2997 * Full list of reserved words
2998 * any words that are in a higher priority are removed
2999 */
3000// https://docs.couchbase.com/server/current/n1ql/n1ql-language-reference/reservedwords.html
3001
3002var reservedKeywords = ['ALL', 'ALTER', 'ANALYZE', 'ANY', 'ARRAY', 'AS', 'ASC', 'AT', 'BEGIN', 'BETWEEN', 'BINARY', 'BOOLEAN', 'BREAK', 'BUCKET', 'BUILD', 'BY', 'CALL', 'CAST', 'CHAR', 'CLUSTER', 'COLLATE', 'COLLECTION', 'COMMIT', 'COMMITTED', 'CONNECT', 'CONTINUE', 'CORRELATE', 'CORRELATED', 'COVER', 'CREATE', 'CURRENT', 'DATABASE', 'DATASET', 'DATASTORE', 'DECLARE', 'DECREMENT', 'DERIVED', 'DESC', 'DESCRIBE', 'DISTINCT', 'DO', 'DROP', 'EACH', 'ELEMENT', 'EVERY', 'EXCLUDE', 'EXISTS', 'FALSE', 'FETCH', 'FILTER', 'FIRST', 'FLATTEN', 'FLUSH', 'FOLLOWING', 'FOR', 'FORCE', 'FTS', 'FUNCTION', 'GOLANG', 'GROUP', 'GROUPS', 'GSI', 'HASH', 'IF', 'IGNORE', 'ILIKE', 'IN', 'INCLUDE', 'INCREMENT', 'INDEX', 'INLINE', 'INNER', 'INTO', 'IS', 'ISOLATION', 'JAVASCRIPT', 'KEY', 'KEYS', 'KEYSPACE', 'KNOWN', 'LANGUAGE', 'LAST', 'LEFT', 'LETTING', 'LEVEL', 'LIKE', 'LSM', 'MAP', 'MAPPING', 'MATCHED', 'MATERIALIZED', 'MISSING', 'NAMESPACE', 'NL', 'NO', 'NOT', 'NULL', 'NULLS', 'NUMBER', 'OBJECT', 'OFFSET', 'OPTION', 'OPTIONS', 'ORDER', 'OTHERS', 'OUTER', 'OVER', 'PARSE', 'PARTITION', 'PASSWORD', 'PATH', 'POOL', 'PRECEDING', 'PRIMARY', 'PRIVATE', 'PRIVILEGE', 'PROBE', 'PROCEDURE', 'PUBLIC', 'RANGE', 'RAW', 'REALM', 'REDUCE', 'RENAME', 'RESPECT', 'RETURN', 'RIGHT', 'ROLE', 'ROLLBACK', 'ROW', 'ROWS', 'SATISFIES', 'SCHEMA', 'SCOPE', 'SELF', 'SEMI', 'SOME', 'START', 'STATISTICS', 'STRING', 'SYSTEM', 'THEN', 'TIES', 'TO', 'TRAN', 'TRANSACTION', 'TRIGGER', 'TRUE', 'TRUNCATE', 'UNBOUNDED', 'UNDER', 'UNIQUE', 'UNKNOWN', 'UNSET', 'USE', 'USER', 'VALIDATE', 'VALUE', 'VALUED', 'VIA', 'VIEW', 'WHILE', 'WINDOW', 'WITHIN', 'WORK'];
3003/**
3004 * Priority 1 (first)
3005 * keywords that begin a new statement
3006 * will begin new indented block
3007 */
3008// https://docs.couchbase.com/server/current/n1ql/n1ql-language-reference/reservedwords.html
3009
3010var reservedCommands = ['ADVISE', 'ALTER INDEX', 'BEGIN TRANSACTION', 'BUILD INDEX', 'COMMIT TRANSACTION', 'CREATE COLLECTION', 'CREATE FUNCTION', 'CREATE INDEX', 'CREATE PRIMARY INDEX', 'CREATE SCOPE', 'CREATE TABLE', 'DELETE', 'DROP COLLECTION', 'DROP FUNCTION', 'DROP INDEX', 'DROP PRIMARY INDEX', 'DROP SCOPE', 'EXECUTE', 'EXECUTE FUNCTION', 'EXPLAIN', 'GRANT', 'INFER', 'INSERT', 'MERGE', 'PREPARE', 'RETURNING', 'REVOKE', 'ROLLBACK TRANSACTION', 'SAVEPOINT', 'SELECT', 'SET TRANSACTION', 'UPDATE', 'UPDATE STATISTICS', 'UPSERT', // other
3011'DROP TABLE', 'FROM', 'GROUP BY', 'HAVING', 'INSERT INTO', 'LET', 'LIMIT', 'OFFSET', 'NEST', 'ORDER BY', 'SET CURRENT SCHEMA', 'SET SCHEMA', 'SET', 'SHOW', 'UNNEST', 'USE KEYS', 'VALUES', 'WHERE', 'WITH'];
3012/**
3013 * Priority 2
3014 * commands that operate on two tables or subqueries
3015 * two main categories: joins and boolean set operators
3016 */
3017
3018var reservedBinaryCommands = [// set booleans
3019'INTERSECT', 'INTERSECT ALL', 'INTERSECT DISTINCT', 'UNION', 'UNION ALL', 'UNION DISTINCT', 'EXCEPT', 'EXCEPT ALL', 'EXCEPT DISTINCT', 'MINUS', 'MINUS ALL', 'MINUS DISTINCT', // joins
3020'JOIN', 'INNER JOIN', 'LEFT JOIN', 'LEFT OUTER JOIN', 'RIGHT JOIN', 'RIGHT OUTER JOIN'];
3021/**
3022 * Priority 3
3023 * keywords that follow a previous Statement, must be attached to subsequent data
3024 * can be fully inline or on newline with optional indent
3025 */
3026
3027var reservedDependentClauses = ['WHEN', 'ELSE']; // For reference: http://docs.couchbase.com.s3-website-us-west-1.amazonaws.com/server/6.0/n1ql/n1ql-language-reference/index.html
3028
3029var N1qlFormatter = /*#__PURE__*/function (_Formatter) {
3030 _inherits(N1qlFormatter, _Formatter);
3031
3032 var _super = _createSuper(N1qlFormatter);
3033
3034 function N1qlFormatter() {
3035 _classCallCheck(this, N1qlFormatter);
3036
3037 return _super.apply(this, arguments);
3038 }
3039
3040 _createClass(N1qlFormatter, [{
3041 key: "tokenizer",
3042 value: function tokenizer() {
3043 return new _core_Tokenizer__WEBPACK_IMPORTED_MODULE_1__["default"]({
3044 reservedCommands: N1qlFormatter.reservedCommands,
3045 reservedBinaryCommands: N1qlFormatter.reservedBinaryCommands,
3046 reservedDependentClauses: N1qlFormatter.reservedDependentClauses,
3047 reservedJoinConditions: N1qlFormatter.reservedJoinConditions,
3048 reservedLogicalOperators: N1qlFormatter.reservedLogicalOperators,
3049 reservedKeywords: N1qlFormatter.reservedKeywords,
3050 stringTypes: N1qlFormatter.stringTypes,
3051 blockStart: N1qlFormatter.blockStart,
3052 blockEnd: N1qlFormatter.blockEnd,
3053 namedPlaceholderTypes: N1qlFormatter.namedPlaceholderTypes,
3054 lineCommentTypes: N1qlFormatter.lineCommentTypes,
3055 operators: N1qlFormatter.operators
3056 });
3057 }
3058 }]);
3059
3060 return N1qlFormatter;
3061}(_core_Formatter__WEBPACK_IMPORTED_MODULE_0__["default"]);
3062
3063
3064N1qlFormatter.reservedCommands = reservedCommands;
3065N1qlFormatter.reservedBinaryCommands = reservedBinaryCommands;
3066N1qlFormatter.reservedDependentClauses = reservedDependentClauses;
3067N1qlFormatter.reservedJoinConditions = ['ON', 'USING'];
3068N1qlFormatter.reservedLogicalOperators = ['AND', 'OR', 'XOR'];
3069N1qlFormatter.reservedKeywords = (0,_utils__WEBPACK_IMPORTED_MODULE_2__.dedupe)([].concat(reservedKeywords, reservedFunctions));
3070N1qlFormatter.stringTypes = ["\"\"", "''", '``'];
3071N1qlFormatter.blockStart = ['(', '[', '{', 'CASE'];
3072N1qlFormatter.blockEnd = [')', ']', '}', 'END'];
3073N1qlFormatter.namedPlaceholderTypes = ['$'];
3074N1qlFormatter.lineCommentTypes = ['#', '--'];
3075N1qlFormatter.operators = ['=='];
3076
3077/***/ }),
3078
3079/***/ "./src/languages/plsql.formatter.ts":
3080/*!******************************************!*\
3081 !*** ./src/languages/plsql.formatter.ts ***!
3082 \******************************************/
3083/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3084
3085__webpack_require__.r(__webpack_exports__);
3086/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3087/* harmony export */ "default": () => (/* binding */ PlSqlFormatter)
3088/* harmony export */ });
3089/* harmony import */ var _core_Formatter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/Formatter */ "./src/core/Formatter.ts");
3090/* harmony import */ var _core_Tokenizer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/Tokenizer */ "./src/core/Tokenizer.ts");
3091/* harmony import */ var _core_token__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../core/token */ "./src/core/token.ts");
3092/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils */ "./src/utils.ts");
3093function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
3094
3095function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
3096
3097function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
3098
3099function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
3100
3101function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
3102
3103function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
3104
3105function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
3106
3107function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
3108
3109function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
3110
3111function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
3112
3113function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
3114
3115
3116
3117 // convert to partial type import in TS 4.5
3118
3119
3120/**
3121 * Priority 5 (last)
3122 * Full list of reserved words
3123 * any words that are in a higher priority are removed
3124 */
3125
3126var reservedKeywords = [// 'A',
3127'ACCESSIBLE', 'AGENT', 'AGGREGATE', 'ALL', 'ALTER', 'ANY', 'ARRAY', 'AS', 'ASC', 'AT', 'ATTRIBUTE', 'AUTHID', 'AVG', 'BETWEEN', 'BFILE_BASE', 'BINARY', 'BINARY_INTEGER', 'BLOB_BASE', 'BLOCK', 'BODY', 'BOOLEAN', 'BOTH', 'BOUND', 'BREADTH', 'BULK', 'BY', 'BYTE', // 'C',
3128'CALL', 'CALLING', 'CASCADE', 'CAST', 'CHAR', 'CHARACTER', 'CHARSET', 'CHARSETFORM', 'CHARSETID', 'CHAR_BASE', 'CHECK', 'CLOB_BASE', 'CLONE', 'CLOSE', 'CLUSTER', 'CLUSTERS', 'COALESCE', 'COLAUTH', 'COLLECT', 'COLUMNS', 'COMMENT', 'COMMIT', 'COMMITTED', 'COMPILED', 'COMPRESS', 'CONNECT', 'CONSTANT', 'CONSTRUCTOR', 'CONTEXT', 'CONTINUE', 'CONVERT', 'COUNT', 'CRASH', 'CREATE', 'CREDENTIAL', 'CURRENT', 'CURRVAL', 'CURSOR', 'CUSTOMDATUM', 'DANGLING', 'DATA', 'DATE', 'DATE_BASE', 'DAY', 'DECIMAL', 'DEFAULT', 'DEFINE', 'DEPTH', 'DESC', 'DETERMINISTIC', 'DIRECTORY', 'DISTINCT', 'DO', 'DOUBLE', 'DROP', 'DURATION', 'ELEMENT', 'ELSIF', 'EMPTY', 'ESCAPE', 'EXCEPTIONS', 'EXCLUSIVE', 'EXECUTE', 'EXISTS', 'EXIT', 'EXTENDS', 'EXTERNAL', 'EXTRACT', 'FALSE', 'FETCH', 'FINAL', 'FIRST', 'FIXED', 'FLOAT', 'FOR', 'FORALL', 'FORCE', 'FUNCTION', 'GENERAL', 'GOTO', 'GRANT', 'GROUP', 'HASH', 'HEAP', 'HIDDEN', 'HOUR', 'IDENTIFIED', 'IF', 'IMMEDIATE', 'IN', 'INCLUDING', 'INDEX', 'INDEXES', 'INDICATOR', 'INDICES', 'INFINITE', 'INSTANTIABLE', 'INT', 'INTEGER', 'INTERFACE', 'INTERVAL', 'INTO', 'INVALIDATE', 'IS', 'ISOLATION', 'JAVA', 'LANGUAGE', 'LARGE', 'LEADING', 'LENGTH', 'LEVEL', 'LIBRARY', 'LIKE', 'LIKE2', 'LIKE4', 'LIKEC', 'LIMITED', 'LOCAL', 'LOCK', 'LONG', 'MAP', 'MAX', 'MAXLEN', 'MEMBER', 'MERGE', 'MIN', 'MINUTE', 'MLSLABEL', 'MOD', 'MODE', 'MONTH', 'MULTISET', 'NAME', 'NAN', 'NATIONAL', 'NATIVE', 'NATURAL', 'NATURALN', 'NCHAR', 'NEW', 'NEXTVAL', 'NOCOMPRESS', 'NOCOPY', 'NOT', 'NOWAIT', 'NULL', 'NULLIF', 'NUMBER', 'NUMBER_BASE', 'OBJECT', 'OCICOLL', 'OCIDATE', 'OCIDATETIME', 'OCIDURATION', 'OCIINTERVAL', 'OCILOBLOCATOR', 'OCINUMBER', 'OCIRAW', 'OCIREF', 'OCIREFCURSOR', 'OCIROWID', 'OCISTRING', 'OCITYPE', 'OF', 'OLD', 'ON DELETE', 'ON UPDATE', 'ONLY', 'OPAQUE', 'OPEN', 'OPERATOR', 'OPTION', 'ORACLE', 'ORADATA', 'ORDER', 'ORGANIZATION', 'ORLANY', 'ORLVARY', 'OTHERS', 'OUT', 'OVERLAPS', 'OVERRIDING', 'PACKAGE', 'PARALLEL_ENABLE', 'PARAMETER', 'PARAMETERS', 'PARENT', 'PARTITION', 'PASCAL', 'PCTFREE', 'PIPE', 'PIPELINED', 'PLS_INTEGER', 'PLUGGABLE', 'POSITIVE', 'POSITIVEN', 'PRAGMA', 'PRECISION', 'PRIOR', 'PRIVATE', 'PROCEDURE', 'PUBLIC', 'RAISE', 'RANGE', 'RAW', 'READ', 'REAL', 'RECORD', 'REF', 'REFERENCE', 'RELEASE', 'RELIES_ON', 'REM', 'REMAINDER', 'RENAME', 'RESOURCE', 'RESULT', 'RESULT_CACHE', 'RETURN', 'REVERSE', 'REVOKE', 'ROLLBACK', 'ROW', 'ROWID', 'ROWNUM', 'ROWTYPE', 'SAMPLE', 'SAVE', 'SAVEPOINT', 'SB1', 'SB2', 'SB4', 'SEARCH', 'SECOND', 'SEGMENT', 'SELF', 'SEPARATE', 'SEQUENCE', 'SERIALIZABLE', 'SHARE', 'SHORT', 'SIZE', 'SIZE_T', 'SMALLINT', 'SOME', 'SPACE', 'SPARSE', 'SQL', 'SQLCODE', 'SQLDATA', 'SQLERRM', 'SQLNAME', 'SQLSTATE', 'STANDARD', 'START', 'STATIC', 'STDDEV', 'STORED', 'STRING', 'STRUCT', 'STYLE', 'SUBMULTISET', 'SUBPARTITION', 'SUBSTITUTABLE', 'SUBTYPE', 'SUCCESSFUL', 'SUM', 'SYNONYM', 'SYSDATE', 'TABAUTH', 'TABLE', 'TDO', 'THE', 'THEN', 'TIME', 'TIMESTAMP', 'TIMEZONE_ABBR', 'TIMEZONE_HOUR', 'TIMEZONE_MINUTE', 'TIMEZONE_REGION', 'TO', 'TRAILING', 'TRANSACTION', 'TRANSACTIONAL', 'TRIGGER', 'TRUE', 'TRUSTED', 'TYPE', 'UB1', 'UB2', 'UB4', 'UID', 'UNDER', 'UNIQUE', 'UNPLUG', 'UNSIGNED', 'UNTRUSTED', 'USE', 'USER', 'VALIDATE', 'VALIST', 'VALUE', 'VARCHAR', 'VARCHAR2', 'VARIABLE', 'VARIANCE', 'VARRAY', 'VARYING', 'VIEW', 'VIEWS', 'VOID', 'WHENEVER', 'WHILE', 'WORK', 'WRAPPED', 'WRITE', 'YEAR', 'ZONE'];
3129/**
3130 * Priority 1 (first)
3131 * keywords that begin a new statement
3132 * will begin new indented block
3133 */
3134
3135var reservedCommands = ['ADD', 'ALTER COLUMN', 'ALTER TABLE', 'BEGIN', 'CONNECT BY', 'CREATE TABLE', 'DROP TABLE', 'DECLARE', // 'DELETE FROM', // disabled
3136'DELETE', 'END', 'EXCEPT', 'EXCEPTION', 'FETCH FIRST', 'FROM', 'GROUP BY', 'HAVING', 'INSERT INTO', 'INSERT', 'LIMIT', 'OFFSET', 'LOOP', 'MODIFY', 'ORDER BY', 'RETURNING', 'SELECT', 'SET CURRENT SCHEMA', 'SET SCHEMA', 'SET', 'START WITH', 'UPDATE', 'VALUES', 'WHERE', 'WITH'];
3137/**
3138 * Priority 2
3139 * commands that operate on two tables or subqueries
3140 * two main categories: joins and boolean set operators
3141 */
3142
3143var reservedBinaryCommands = [// set booleans
3144'INTERSECT', 'INTERSECT ALL', 'INTERSECT DISTINCT', 'UNION', 'UNION ALL', 'UNION DISTINCT', 'EXCEPT', 'EXCEPT ALL', 'EXCEPT DISTINCT', 'MINUS', 'MINUS ALL', 'MINUS DISTINCT', // joins
3145'JOIN', 'INNER JOIN', 'LEFT JOIN', 'LEFT OUTER JOIN', 'RIGHT JOIN', 'RIGHT OUTER JOIN', 'FULL JOIN', 'FULL OUTER JOIN', 'CROSS JOIN', 'NATURAL JOIN', // apply
3146'CROSS APPLY', 'OUTER APPLY'];
3147/**
3148 * Priority 3
3149 * keywords that follow a previous Statement, must be attached to subsequent data
3150 * can be fully inline or on newline with optional indent
3151 */
3152
3153var reservedDependentClauses = ['WHEN', 'ELSE'];
3154
3155var PlSqlFormatter = /*#__PURE__*/function (_Formatter) {
3156 _inherits(PlSqlFormatter, _Formatter);
3157
3158 var _super = _createSuper(PlSqlFormatter);
3159
3160 function PlSqlFormatter() {
3161 _classCallCheck(this, PlSqlFormatter);
3162
3163 return _super.apply(this, arguments);
3164 }
3165
3166 _createClass(PlSqlFormatter, [{
3167 key: "tokenizer",
3168 value: function tokenizer() {
3169 return new _core_Tokenizer__WEBPACK_IMPORTED_MODULE_1__["default"]({
3170 reservedCommands: PlSqlFormatter.reservedCommands,
3171 reservedBinaryCommands: PlSqlFormatter.reservedBinaryCommands,
3172 reservedDependentClauses: PlSqlFormatter.reservedDependentClauses,
3173 reservedJoinConditions: PlSqlFormatter.reservedJoinConditions,
3174 reservedLogicalOperators: PlSqlFormatter.reservedLogicalOperators,
3175 reservedKeywords: PlSqlFormatter.reservedKeywords,
3176 stringTypes: PlSqlFormatter.stringTypes,
3177 blockStart: PlSqlFormatter.blockStart,
3178 blockEnd: PlSqlFormatter.blockEnd,
3179 indexedPlaceholderTypes: PlSqlFormatter.indexedPlaceholderTypes,
3180 namedPlaceholderTypes: PlSqlFormatter.namedPlaceholderTypes,
3181 lineCommentTypes: PlSqlFormatter.lineCommentTypes,
3182 specialWordChars: PlSqlFormatter.specialWordChars,
3183 operators: PlSqlFormatter.operators
3184 });
3185 }
3186 }, {
3187 key: "tokenOverride",
3188 value: function tokenOverride(token) {
3189 // `table`[.]`column`
3190 if (token.value === '.' && this.tokenLookAhead().value.startsWith('`') && this.tokenLookBehind().value.endsWith('`')) {
3191 // This is an operator, do not insert spaces
3192 return {
3193 type: _core_token__WEBPACK_IMPORTED_MODULE_2__.TokenType.OPERATOR,
3194 value: token.value
3195 };
3196 } // BY [SET]
3197
3198
3199 if (_core_token__WEBPACK_IMPORTED_MODULE_2__.isToken.SET(token) && _core_token__WEBPACK_IMPORTED_MODULE_2__.isToken.BY(this.getPreviousReservedToken())) {
3200 return {
3201 type: _core_token__WEBPACK_IMPORTED_MODULE_2__.TokenType.RESERVED_KEYWORD,
3202 value: token.value
3203 };
3204 }
3205
3206 return token;
3207 }
3208 }]);
3209
3210 return PlSqlFormatter;
3211}(_core_Formatter__WEBPACK_IMPORTED_MODULE_0__["default"]);
3212
3213
3214PlSqlFormatter.reservedCommands = reservedCommands;
3215PlSqlFormatter.reservedBinaryCommands = reservedBinaryCommands;
3216PlSqlFormatter.reservedDependentClauses = reservedDependentClauses;
3217PlSqlFormatter.reservedJoinConditions = ['ON', 'USING'];
3218PlSqlFormatter.reservedLogicalOperators = ['AND', 'OR', 'XOR'];
3219PlSqlFormatter.reservedKeywords = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.dedupe)(reservedKeywords);
3220PlSqlFormatter.stringTypes = ["\"\"", "N''", "''", '``'];
3221PlSqlFormatter.blockStart = ['(', 'CASE'];
3222PlSqlFormatter.blockEnd = [')', 'END'];
3223PlSqlFormatter.indexedPlaceholderTypes = ['?'];
3224PlSqlFormatter.namedPlaceholderTypes = [':'];
3225PlSqlFormatter.lineCommentTypes = ['--'];
3226PlSqlFormatter.specialWordChars = {
3227 any: '_$#.@'
3228};
3229PlSqlFormatter.operators = ['||', '**', ':=', '~=', '^=', '>>', '<<', '=>' // '..' // breaks operator test, handled by .
3230];
3231
3232/***/ }),
3233
3234/***/ "./src/languages/postgresql.formatter.ts":
3235/*!***********************************************!*\
3236 !*** ./src/languages/postgresql.formatter.ts ***!
3237 \***********************************************/
3238/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3239
3240__webpack_require__.r(__webpack_exports__);
3241/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3242/* harmony export */ "default": () => (/* binding */ PostgreSqlFormatter)
3243/* harmony export */ });
3244/* harmony import */ var _core_Formatter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/Formatter */ "./src/core/Formatter.ts");
3245/* harmony import */ var _core_Tokenizer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/Tokenizer */ "./src/core/Tokenizer.ts");
3246/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils */ "./src/utils.ts");
3247function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
3248
3249function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
3250
3251function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3252
3253function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
3254
3255function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
3256
3257function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
3258
3259function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
3260
3261function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
3262
3263function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
3264
3265function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
3266
3267function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
3268
3269function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
3270
3271function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
3272
3273function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
3274
3275function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
3276
3277function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
3278
3279function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
3280
3281
3282
3283
3284/**
3285 * Priority 5 (last)
3286 * Full list of reserved functions
3287 * distinct from Keywords due to interaction with parentheses
3288 */
3289// https://www.postgresql.org/docs/14/functions.html
3290
3291var reservedFunctions = {
3292 // https://www.postgresql.org/docs/14/functions-math.html
3293 math: ['ABS', 'ACOS', 'ACOSD', 'ACOSH', 'ASIN', 'ASIND', 'ASINH', 'ATAN', 'ATAN2', 'ATAN2D', 'ATAND', 'ATANH', 'CBRT', 'CEIL', 'CEILING', 'COS', 'COSD', 'COSH', 'COT', 'COTD', 'DEGREES', 'DIV', 'EXP', 'FACTORIAL', 'FLOOR', 'GCD', 'LCM', 'LN', 'LOG', 'LOG10', 'MIN_SCALE', 'MOD', 'PI', 'POWER', 'RADIANS', 'RANDOM', 'ROUND', 'SCALE', 'SETSEED', 'SIGN', 'SIN', 'SIND', 'SINH', 'SQRT', 'TAN', 'TAND', 'TANH', 'TRIM_SCALE', 'TRUNC', 'WIDTH_BUCKET'],
3294 // https://www.postgresql.org/docs/14/functions-string.html
3295 string: ['ABS', 'ASCII', 'BIT_LENGTH', 'BTRIM', 'CHARACTER_LENGTH', 'CHAR_LENGTH', 'CHR', 'CONCAT', 'CONCAT_WS', 'FORMAT', 'INITCAP', 'LEFT', 'LENGTH', 'LOWER', 'LPAD', 'LTRIM', 'MD5', 'NORMALIZE', 'OCTET_LENGTH', 'OVERLAY', 'PARSE_IDENT', 'PG_CLIENT_ENCODING', 'POSITION', 'QUOTE_IDENT', 'QUOTE_LITERAL', 'QUOTE_NULLABLE', 'REGEXP_MATCH', 'REGEXP_MATCHES', 'REGEXP_REPLACE', 'REGEXP_SPLIT_TO_ARRAY', 'REGEXP_SPLIT_TO_TABLE', 'REPEAT', 'REPLACE', 'REVERSE', 'RIGHT', 'RPAD', 'RTRIM', 'SPLIT_PART', 'SPRINTF', 'STARTS_WITH', 'STRING_AGG', 'STRING_TO_ARRAY', 'STRING_TO_TABLE', 'STRPOS', 'SUBSTR', 'SUBSTRING', 'TO_ASCII', 'TO_HEX', 'TRANSLATE', 'TRIM', 'UNISTR', 'UPPER'],
3296 // https://www.postgresql.org/docs/14/functions-binarystring.html
3297 binary: ['BIT_COUNT', 'BIT_LENGTH', 'BTRIM', 'CONVERT', 'CONVERT_FROM', 'CONVERT_TO', 'DECODE', 'ENCODE', 'GET_BIT', 'GET_BYTE', 'LENGTH', 'LTRIM', 'MD5', 'OCTET_LENGTH', 'OVERLAY', 'POSITION', 'RTRIM', 'SET_BIT', 'SET_BYTE', 'SHA224', 'SHA256', 'SHA384', 'SHA512', 'STRING_AGG', 'SUBSTR', 'SUBSTRING', 'TRIM'],
3298 // https://www.postgresql.org/docs/14/functions-bitstring.html
3299 bitstring: ['BIT_COUNT', 'BIT_LENGTH', 'GET_BIT', 'LENGTH', 'OCTET_LENGTH', 'OVERLAY', 'POSITION', 'SET_BIT', 'SUBSTRING'],
3300 // https://www.postgresql.org/docs/14/functions-matching.html
3301 pattern: ['REGEXP_MATCH', 'REGEXP_MATCHES', 'REGEXP_REPLACE', 'REGEXP_SPLIT_TO_ARRAY', 'REGEXP_SPLIT_TO_TABLE'],
3302 // https://www.postgresql.org/docs/14/functions-formatting.html
3303 datatype: ['TO_CHAR', 'TO_DATE', 'TO_NUMBER', 'TO_TIMESTAMP'],
3304 // https://www.postgresql.org/docs/14/functions-datetime.html
3305 datetime: [// 'AGE',
3306 'CLOCK_TIMESTAMP', 'CURRENT_DATE', 'CURRENT_TIME', 'CURRENT_TIMESTAMP', 'DATE_BIN', 'DATE_PART', 'DATE_TRUNC', 'EXTRACT', 'ISFINITE', 'JUSTIFY_DAYS', 'JUSTIFY_HOURS', 'JUSTIFY_INTERVAL', 'LOCALTIME', 'LOCALTIMESTAMP', 'MAKE_DATE', 'MAKE_INTERVAL', 'MAKE_TIME', 'MAKE_TIMESTAMP', 'MAKE_TIMESTAMPTZ', 'NOW', 'PG_SLEEP', 'PG_SLEEP_FOR', 'PG_SLEEP_UNTIL', 'STATEMENT_TIMESTAMP', 'TIMEOFDAY', 'TO_TIMESTAMP', 'TRANSACTION_TIMESTAMP'],
3307 // https://www.postgresql.org/docs/14/functions-enum.html
3308 "enum": ['ENUM_FIRST', 'ENUM_LAST', 'ENUM_RANGE'],
3309 // https://www.postgresql.org/docs/14/functions-geometry.html
3310 geometry: ['AREA', 'BOUND_BOX', 'BOX', 'CENTER', 'CIRCLE', 'DIAGONAL', 'DIAMETER', 'HEIGHT', 'ISCLOSED', 'ISOPEN', 'LENGTH', 'LINE', 'LSEG', 'NPOINTS', 'PATH', 'PCLOSE', 'POINT', 'POLYGON', 'POPEN', 'RADIUS', 'SLOPE', 'WIDTH'],
3311 // https://www.postgresql.org/docs/14/functions-net.html
3312 network: ['ABBREV', 'BROADCAST', 'FAMILY', 'HOST', 'HOSTMASK', 'INET_MERGE', 'INET_SAME_FAMILY', 'MACADDR8_SET7BIT', 'MASKLEN', 'NETMASK', 'NETWORK', 'SET_MASKLEN', 'TEXT', 'TRUNC'],
3313 // https://www.postgresql.org/docs/14/functions-textsearch.html
3314 textsearch: ['ARRAY_TO_TSVECTOR', 'GET_CURRENT_TS_CONFIG', 'JSONB_TO_TSVECTOR', 'JSON_TO_TSVECTOR', 'LENGTH', 'NUMNODE', 'PHRASETO_TSQUERY', 'PLAINTO_TSQUERY', 'QUERYTREE', 'SETWEIGHT', 'STRIP', 'TO_TSQUERY', 'TO_TSVECTOR', 'TSQUERY_PHRASE', 'TSVECTOR_TO_ARRAY', 'TS_DEBUG', 'TS_DELETE', 'TS_FILTER', 'TS_HEADLINE', 'TS_LEXIZE', 'TS_PARSE', 'TS_RANK', 'TS_RANK_CD', 'TS_REWRITE', 'TS_STAT', 'TS_TOKEN_TYPE', 'WEBSEARCH_TO_TSQUERY'],
3315 // https://www.postgresql.org/docs/14/functions-uuid.html
3316 uuid: ['UUID'],
3317 // https://www.postgresql.org/docs/14/functions-xml.html
3318 xml: ['CURSOR_TO_XML', 'CURSOR_TO_XMLSCHEMA', 'DATABASE_TO_XML', 'DATABASE_TO_XMLSCHEMA', 'DATABASE_TO_XML_AND_XMLSCHEMA', 'NEXTVAL', 'QUERY_TO_XML', 'QUERY_TO_XMLSCHEMA', 'QUERY_TO_XML_AND_XMLSCHEMA', 'SCHEMA_TO_XML', 'SCHEMA_TO_XMLSCHEMA', 'SCHEMA_TO_XML_AND_XMLSCHEMA', 'STRING', 'TABLE_TO_XML', 'TABLE_TO_XMLSCHEMA', 'TABLE_TO_XML_AND_XMLSCHEMA', 'XMLAGG', 'XMLCOMMENT', 'XMLCONCAT', 'XMLELEMENT', 'XMLEXISTS', 'XMLFOREST', 'XMLPARSE', 'XMLPI', 'XMLROOT', 'XMLSERIALIZE', 'XMLTABLE', 'XML_IS_WELL_FORMED', 'XML_IS_WELL_FORMED_CONTENT', 'XML_IS_WELL_FORMED_DOCUMENT', 'XPATH', 'XPATH_EXISTS'],
3319 // https://www.postgresql.org/docs/14/functions-json.html
3320 json: ['ARRAY_TO_JSON', 'JSONB_AGG', 'JSONB_ARRAY_ELEMENTS', 'JSONB_ARRAY_ELEMENTS_TEXT', 'JSONB_ARRAY_LENGTH', 'JSONB_BUILD_ARRAY', 'JSONB_BUILD_OBJECT', 'JSONB_EACH', 'JSONB_EACH_TEXT', 'JSONB_EXTRACT_PATH', 'JSONB_EXTRACT_PATH_TEXT', 'JSONB_INSERT', 'JSONB_OBJECT', 'JSONB_OBJECT_AGG', 'JSONB_OBJECT_KEYS', 'JSONB_PATH_EXISTS', 'JSONB_PATH_EXISTS_TZ', 'JSONB_PATH_MATCH', 'JSONB_PATH_MATCH_TZ', 'JSONB_PATH_QUERY', 'JSONB_PATH_QUERY_ARRAY', 'JSONB_PATH_QUERY_ARRAY_TZ', 'JSONB_PATH_QUERY_FIRST', 'JSONB_PATH_QUERY_FIRST_TZ', 'JSONB_PATH_QUERY_TZ', 'JSONB_POPULATE_RECORD', 'JSONB_POPULATE_RECORDSET', 'JSONB_PRETTY', 'JSONB_SET', 'JSONB_SET_LAX', 'JSONB_STRIP_NULLS', 'JSONB_TO_RECORD', 'JSONB_TO_RECORDSET', 'JSONB_TYPEOF', 'JSON_AGG', 'JSON_ARRAY_ELEMENTS', 'JSON_ARRAY_ELEMENTS_TEXT', 'JSON_ARRAY_LENGTH', 'JSON_BUILD_ARRAY', 'JSON_BUILD_OBJECT', 'JSON_EACH', 'JSON_EACH_TEXT', 'JSON_EXTRACT_PATH', 'JSON_EXTRACT_PATH_TEXT', 'JSON_OBJECT', 'JSON_OBJECT_AGG', 'JSON_OBJECT_KEYS', 'JSON_POPULATE_RECORD', 'JSON_POPULATE_RECORDSET', 'JSON_STRIP_NULLS', 'JSON_TO_RECORD', 'JSON_TO_RECORDSET', 'JSON_TYPEOF', 'ROW_TO_JSON', 'TO_JSON', 'TO_JSONB', 'TO_TIMESTAMP'],
3321 // https://www.postgresql.org/docs/14/functions-sequence.html
3322 sequence: ['CURRVAL', 'LASTVAL', 'NEXTVAL', 'SETVAL'],
3323 // https://www.postgresql.org/docs/14/functions-conditional.html
3324 conditional: [// 'CASE',
3325 'COALESCE', 'GREATEST', 'LEAST', 'NULLIF'],
3326 // https://www.postgresql.org/docs/14/functions-array.html
3327 array: ['ARRAY_AGG', 'ARRAY_APPEND', 'ARRAY_CAT', 'ARRAY_DIMS', 'ARRAY_FILL', 'ARRAY_LENGTH', 'ARRAY_LOWER', 'ARRAY_NDIMS', 'ARRAY_POSITION', 'ARRAY_POSITIONS', 'ARRAY_PREPEND', 'ARRAY_REMOVE', 'ARRAY_REPLACE', 'ARRAY_TO_STRING', 'ARRAY_UPPER', 'CARDINALITY', 'STRING_TO_ARRAY', 'TRIM_ARRAY', 'UNNEST'],
3328 // https://www.postgresql.org/docs/14/functions-range.html
3329 range: ['ISEMPTY', 'LOWER', 'LOWER_INC', 'LOWER_INF', 'MULTIRANGE', 'RANGE_MERGE', 'UPPER', 'UPPER_INC', 'UPPER_INF'],
3330 // https://www.postgresql.org/docs/14/functions-aggregate.html
3331 aggregate: ['ANY', 'ARRAY_AGG', 'AVG', 'BIT_AND', 'BIT_OR', 'BIT_XOR', 'BOOL_AND', 'BOOL_OR', 'COALESCE', 'CORR', 'COUNT', 'COVAR_POP', 'COVAR_SAMP', 'CUME_DIST', 'DENSE_RANK', 'EVERY', 'GROUPING', 'JSONB_AGG', 'JSONB_OBJECT_AGG', 'JSON_AGG', 'JSON_OBJECT_AGG', 'MAX', 'MIN', 'MODE', 'PERCENTILE_CONT', 'PERCENTILE_DISC', 'PERCENT_RANK', 'RANGE_AGG', 'RANGE_INTERSECT_AGG', 'RANK', 'REGR_AVGX', 'REGR_AVGY', 'REGR_COUNT', 'REGR_INTERCEPT', 'REGR_R2', 'REGR_SLOPE', 'REGR_SXX', 'REGR_SXY', 'REGR_SYY', 'SOME', 'STDDEV', 'STDDEV_POP', 'STDDEV_SAMP', 'STRING_AGG', 'SUM', 'TO_JSON', 'TO_JSONB', 'VARIANCE', 'VAR_POP', 'VAR_SAMP', 'XMLAGG'],
3332 // https://www.postgresql.org/docs/14/functions-window.html
3333 window: ['CUME_DIST', 'DENSE_RANK', 'FIRST_VALUE', 'LAG', 'LAST_VALUE', 'LEAD', 'NTH_VALUE', 'NTILE', 'PERCENT_RANK', 'RANK', 'ROW_NUMBER'],
3334 // https://www.postgresql.org/docs/14/functions-srf.html
3335 set: ['GENERATE_SERIES', 'GENERATE_SUBSCRIPTS'],
3336 // https://www.postgresql.org/docs/14/functions-info.html
3337 sysInfo: ['ACLDEFAULT', 'ACLEXPLODE', 'COL_DESCRIPTION', 'CURRENT_CATALOG', 'CURRENT_DATABASE', 'CURRENT_QUERY', 'CURRENT_ROLE', 'CURRENT_SCHEMA', 'CURRENT_SCHEMAS', 'CURRENT_USER', 'FORMAT_TYPE', 'HAS_ANY_COLUMN_PRIVILEGE', 'HAS_COLUMN_PRIVILEGE', 'HAS_DATABASE_PRIVILEGE', 'HAS_FOREIGN_DATA_WRAPPER_PRIVILEGE', 'HAS_FUNCTION_PRIVILEGE', 'HAS_LANGUAGE_PRIVILEGE', 'HAS_SCHEMA_PRIVILEGE', 'HAS_SEQUENCE_PRIVILEGE', 'HAS_SERVER_PRIVILEGE', 'HAS_TABLESPACE_PRIVILEGE', 'HAS_TABLE_PRIVILEGE', 'HAS_TYPE_PRIVILEGE', 'INET_CLIENT_ADDR', 'INET_CLIENT_PORT', 'INET_SERVER_ADDR', 'INET_SERVER_PORT', 'MAKEACLITEM', 'OBJ_DESCRIPTION', 'PG_BACKEND_PID', 'PG_BLOCKING_PIDS', 'PG_COLLATION_IS_VISIBLE', 'PG_CONF_LOAD_TIME', 'PG_CONTROL_CHECKPOINT', 'PG_CONTROL_INIT', 'PG_CONTROL_SYSTEM', 'PG_CONVERSION_IS_VISIBLE', 'PG_CURRENT_LOGFILE', 'PG_CURRENT_SNAPSHOT', 'PG_CURRENT_XACT_ID', 'PG_CURRENT_XACT_ID_IF_ASSIGNED', 'PG_DESCRIBE_OBJECT', 'PG_FUNCTION_IS_VISIBLE', 'PG_GET_CATALOG_FOREIGN_KEYS', 'PG_GET_CONSTRAINTDEF', 'PG_GET_EXPR', 'PG_GET_FUNCTIONDEF', 'PG_GET_FUNCTION_ARGUMENTS', 'PG_GET_FUNCTION_IDENTITY_ARGUMENTS', 'PG_GET_FUNCTION_RESULT', 'PG_GET_INDEXDEF', 'PG_GET_KEYWORDS', 'PG_GET_OBJECT_ADDRESS', 'PG_GET_OWNED_SEQUENCE', 'PG_GET_RULEDEF', 'PG_GET_SERIAL_SEQUENCE', 'PG_GET_STATISTICSOBJDEF', 'PG_GET_TRIGGERDEF', 'PG_GET_USERBYID', 'PG_GET_VIEWDEF', 'PG_HAS_ROLE', 'PG_IDENTIFY_OBJECT', 'PG_IDENTIFY_OBJECT_AS_ADDRESS', 'PG_INDEXAM_HAS_PROPERTY', 'PG_INDEX_COLUMN_HAS_PROPERTY', 'PG_INDEX_HAS_PROPERTY', 'PG_IS_OTHER_TEMP_SCHEMA', 'PG_JIT_AVAILABLE', 'PG_LAST_COMMITTED_XACT', 'PG_LISTENING_CHANNELS', 'PG_MY_TEMP_SCHEMA', 'PG_NOTIFICATION_QUEUE_USAGE', 'PG_OPCLASS_IS_VISIBLE', 'PG_OPERATOR_IS_VISIBLE', 'PG_OPFAMILY_IS_VISIBLE', 'PG_OPTIONS_TO_TABLE', 'PG_POSTMASTER_START_TIME', 'PG_SAFE_SNAPSHOT_BLOCKING_PIDS', 'PG_SNAPSHOT_XIP', 'PG_SNAPSHOT_XMAX', 'PG_SNAPSHOT_XMIN', 'PG_STATISTICS_OBJ_IS_VISIBLE', 'PG_TABLESPACE_DATABASES', 'PG_TABLESPACE_LOCATION', 'PG_TABLE_IS_VISIBLE', 'PG_TRIGGER_DEPTH', 'PG_TS_CONFIG_IS_VISIBLE', 'PG_TS_DICT_IS_VISIBLE', 'PG_TS_PARSER_IS_VISIBLE', 'PG_TS_TEMPLATE_IS_VISIBLE', 'PG_TYPEOF', 'PG_TYPE_IS_VISIBLE', 'PG_VISIBLE_IN_SNAPSHOT', 'PG_XACT_COMMIT_TIMESTAMP', 'PG_XACT_COMMIT_TIMESTAMP_ORIGIN', 'PG_XACT_STATUS', 'PQSERVERVERSION', 'ROW_SECURITY_ACTIVE', 'SESSION_USER', 'SHOBJ_DESCRIPTION', 'TO_REGCLASS', 'TO_REGCOLLATION', 'TO_REGNAMESPACE', 'TO_REGOPER', 'TO_REGOPERATOR', 'TO_REGPROC', 'TO_REGPROCEDURE', 'TO_REGROLE', 'TO_REGTYPE', 'TXID_CURRENT', 'TXID_CURRENT_IF_ASSIGNED', 'TXID_CURRENT_SNAPSHOT', 'TXID_SNAPSHOT_XIP', 'TXID_SNAPSHOT_XMAX', 'TXID_SNAPSHOT_XMIN', 'TXID_STATUS', 'TXID_VISIBLE_IN_SNAPSHOT', 'USER', 'VERSION'],
3338 // https://www.postgresql.org/docs/14/functions-admin.html
3339 sysAdmin: ['BRIN_DESUMMARIZE_RANGE', 'BRIN_SUMMARIZE_NEW_VALUES', 'BRIN_SUMMARIZE_RANGE', 'CONVERT_FROM', 'CURRENT_SETTING', 'GIN_CLEAN_PENDING_LIST', 'PG_ADVISORY_LOCK', 'PG_ADVISORY_LOCK_SHARED', 'PG_ADVISORY_UNLOCK', 'PG_ADVISORY_UNLOCK_ALL', 'PG_ADVISORY_UNLOCK_SHARED', 'PG_ADVISORY_XACT_LOCK', 'PG_ADVISORY_XACT_LOCK_SHARED', 'PG_BACKUP_START_TIME', 'PG_CANCEL_BACKEND', 'PG_COLLATION_ACTUAL_VERSION', 'PG_COLUMN_COMPRESSION', 'PG_COLUMN_SIZE', 'PG_COPY_LOGICAL_REPLICATION_SLOT', 'PG_COPY_PHYSICAL_REPLICATION_SLOT', 'PG_CREATE_LOGICAL_REPLICATION_SLOT', 'PG_CREATE_PHYSICAL_REPLICATION_SLOT', 'PG_CREATE_RESTORE_POINT', 'PG_CURRENT_WAL_FLUSH_LSN', 'PG_CURRENT_WAL_INSERT_LSN', 'PG_CURRENT_WAL_LSN', 'PG_DATABASE_SIZE', 'PG_DROP_REPLICATION_SLOT', 'PG_EXPORT_SNAPSHOT', 'PG_FILENODE_RELATION', 'PG_GET_WAL_REPLAY_PAUSE_STATE', 'PG_IMPORT_SYSTEM_COLLATIONS', 'PG_INDEXES_SIZE', 'PG_IS_IN_BACKUP', 'PG_IS_IN_RECOVERY', 'PG_IS_WAL_REPLAY_PAUSED', 'PG_LAST_WAL_RECEIVE_LSN', 'PG_LAST_WAL_REPLAY_LSN', 'PG_LAST_XACT_REPLAY_TIMESTAMP', 'PG_LOGICAL_EMIT_MESSAGE', 'PG_LOGICAL_SLOT_GET_BINARY_CHANGES', 'PG_LOGICAL_SLOT_GET_CHANGES', 'PG_LOGICAL_SLOT_PEEK_BINARY_CHANGES', 'PG_LOGICAL_SLOT_PEEK_CHANGES', 'PG_LOG_BACKEND_MEMORY_CONTEXTS', 'PG_LS_ARCHIVE_STATUSDIR', 'PG_LS_DIR', 'PG_LS_LOGDIR', 'PG_LS_TMPDIR', 'PG_LS_WALDIR', 'PG_PARTITION_ANCESTORS', 'PG_PARTITION_ROOT', 'PG_PARTITION_TREE', 'PG_PROMOTE', 'PG_READ_BINARY_FILE', 'PG_READ_FILE', 'PG_RELATION_FILENODE', 'PG_RELATION_FILEPATH', 'PG_RELATION_SIZE', 'PG_RELOAD_CONF', 'PG_REPLICATION_ORIGIN_ADVANCE', 'PG_REPLICATION_ORIGIN_CREATE', 'PG_REPLICATION_ORIGIN_DROP', 'PG_REPLICATION_ORIGIN_OID', 'PG_REPLICATION_ORIGIN_PROGRESS', 'PG_REPLICATION_ORIGIN_SESSION_IS_SETUP', 'PG_REPLICATION_ORIGIN_SESSION_PROGRESS', 'PG_REPLICATION_ORIGIN_SESSION_RESET', 'PG_REPLICATION_ORIGIN_SESSION_SETUP', 'PG_REPLICATION_ORIGIN_XACT_RESET', 'PG_REPLICATION_ORIGIN_XACT_SETUP', 'PG_REPLICATION_SLOT_ADVANCE', 'PG_ROTATE_LOGFILE', 'PG_SIZE_BYTES', 'PG_SIZE_PRETTY', 'PG_START_BACKUP', 'PG_STAT_FILE', 'PG_STOP_BACKUP', 'PG_SWITCH_WAL', 'PG_TABLESPACE_SIZE', 'PG_TABLE_SIZE', 'PG_TERMINATE_BACKEND', 'PG_TOTAL_RELATION_SIZE', 'PG_TRY_ADVISORY_LOCK', 'PG_TRY_ADVISORY_LOCK_SHARED', 'PG_TRY_ADVISORY_XACT_LOCK', 'PG_TRY_ADVISORY_XACT_LOCK_SHARED', 'PG_WALFILE_NAME', 'PG_WALFILE_NAME_OFFSET', 'PG_WAL_LSN_DIFF', 'PG_WAL_REPLAY_PAUSE', 'PG_WAL_REPLAY_RESUME', 'SET_CONFIG'],
3340 // https://www.postgresql.org/docs/14/functions-trigger.html
3341 trigger: ['SUPPRESS_REDUNDANT_UPDATES_TRIGGER', 'TSVECTOR_UPDATE_TRIGGER', 'TSVECTOR_UPDATE_TRIGGER_COLUMN'],
3342 // https://www.postgresql.org/docs/14/functions-event-triggers.html
3343 eventTrigger: ['PG_EVENT_TRIGGER_DDL_COMMANDS', 'PG_EVENT_TRIGGER_DROPPED_OBJECTS', 'PG_EVENT_TRIGGER_TABLE_REWRITE_OID', 'PG_EVENT_TRIGGER_TABLE_REWRITE_REASON', 'PG_GET_OBJECT_ADDRESS'],
3344 // https://www.postgresql.org/docs/14/functions-statistics.html
3345 stats: ['PG_MCV_LIST_ITEMS']
3346};
3347/**
3348 * Priority 5 (last)
3349 * Full list of reserved words
3350 * any words that are in a higher priority are removed
3351 */
3352// https://www.postgresql.org/docs/14/sql-keywords-appendix.html
3353
3354var reservedKeywords = ['ABSENT', 'ABSOLUTE', 'ACCESS', 'ACCORDING', 'ACTION', 'ADA', 'ADMIN', 'AGGREGATE', 'ALL', 'ALLOCATE', 'ALSO', 'ALTER', 'ALWAYS', 'ANALYSE', 'ARE', 'ARRAY', 'ARRAY_MAX_CARDINALITY', 'AS', 'ASC', 'ASENSITIVE', 'ASSERTION', 'ASSIGNMENT', 'ASYMMETRIC', 'AT', 'ATOMIC', 'ATTACH', 'ATTRIBUTE', 'ATTRIBUTES', 'AUTHORIZATION', 'BACKWARD', 'BASE64', 'BEFORE', 'BEGIN_FRAME', 'BEGIN_PARTITION', 'BERNOULLI', 'BETWEEN', 'BIGINT', 'BINARY', 'BIT', 'BLOB', 'BLOCKED', 'BOM', 'BOOLEAN', 'BOTH', 'BREADTH', 'BY', 'CACHE', 'CALLED', 'CASCADE', 'CASCADED', 'CAST', 'CATALOG', 'CATALOG_NAME', 'CHAIN', 'CHAINING', 'CHAR', 'CHARACTER', 'CHARACTERISTICS', 'CHARACTERS', 'CHARACTER_SET_CATALOG', 'CHARACTER_SET_NAME', 'CHARACTER_SET_SCHEMA', 'CHECK', 'CLASS', 'CLASSIFIER', 'CLASS_ORIGIN', 'CLOB', 'COBOL', 'COLLATE', 'COLLATION', 'COLLATION_CATALOG', 'COLLATION_NAME', 'COLLATION_SCHEMA', 'COLLECT', 'COLUMN', 'COLUMNS', 'COLUMN_NAME', 'COMMAND_FUNCTION', 'COMMAND_FUNCTION_CODE', 'COMMENTS', 'COMMITTED', 'COMPRESSION', 'CONCURRENTLY', 'CONDITION', 'CONDITIONAL', 'CONDITION_NUMBER', 'CONFIGURATION', 'CONFLICT', 'CONNECT', 'CONNECTION', 'CONNECTION_NAME', 'CONSTRAINT', 'CONSTRAINTS', 'CONSTRAINT_CATALOG', 'CONSTRAINT_NAME', 'CONSTRAINT_SCHEMA', 'CONSTRUCTOR', 'CONTAINS', 'CONTENT', 'CONTINUE', 'CONTROL', 'CONVERSION', 'CORRESPONDING', 'COST', 'CREATE', 'CROSS', 'CSV', 'CUBE', 'CURRENT', 'CURRENT_DEFAULT_TRANSFORM_GROUP', 'CURRENT_PATH', 'CURRENT_ROW', 'CURRENT_TRANSFORM_GROUP_FOR_TYPE', 'CURSOR', 'CURSOR_NAME', 'CYCLE', 'DATA', 'DATABASE', 'DATALINK', 'DATE', 'DATETIME_INTERVAL_CODE', 'DATETIME_INTERVAL_PRECISION', 'DAY', 'DB', 'DEC', 'DECFLOAT', 'DECIMAL', 'DEFAULT', 'DEFAULTS', 'DEFERRABLE', 'DEFERRED', 'DEFINE', 'DEFINED', 'DEFINER', 'DEGREE', 'DELIMITER', 'DELIMITERS', 'DEPENDS', 'DEPTH', 'DEREF', 'DERIVED', 'DESC', 'DESCRIBE', 'DESCRIPTOR', 'DETACH', 'DETERMINISTIC', 'DIAGNOSTICS', 'DICTIONARY', 'DISABLE', 'DISCONNECT', 'DISPATCH', 'DISTINCT', 'DLNEWCOPY', 'DLPREVIOUSCOPY', 'DLURLCOMPLETE', 'DLURLCOMPLETEONLY', 'DLURLCOMPLETEWRITE', 'DLURLPATH', 'DLURLPATHONLY', 'DLURLPATHWRITE', 'DLURLSCHEME', 'DLURLSERVER', 'DLVALUE', 'DOCUMENT', 'DOMAIN', 'DOUBLE', 'DROP', 'DYNAMIC', 'DYNAMIC_FUNCTION', 'DYNAMIC_FUNCTION_CODE', 'EACH', 'ELEMENT', 'EMPTY', 'ENABLE', 'ENCODING', 'ENCRYPTED', 'END-EXEC', 'END_FRAME', 'END_PARTITION', 'ENFORCED', 'ENUM', 'EQUALS', 'ERROR', 'ESCAPE', 'EVENT', 'EXCEPTION', 'EXCLUDE', 'EXCLUDING', 'EXCLUSIVE', 'EXEC', 'EXISTS', 'EXPRESSION', 'EXTENSION', 'EXTERNAL', 'FALSE', 'FILE', 'FILTER', 'FINAL', 'FINALIZE', 'FINISH', 'FIRST', 'FLAG', 'FLOAT', 'FOLLOWING', 'FOR', 'FORCE', 'FOREIGN', 'FORTRAN', 'FORWARD', 'FOUND', 'FRAME_ROW', 'FREE', 'FREEZE', 'FS', 'FULFILL', 'FULL', 'FUNCTION', 'FUNCTIONS', 'FUSION', 'GENERAL', 'GENERATED', 'GET', 'GLOBAL', 'GO', 'GOTO', 'GRANTED', 'GROUP', 'GROUPS', 'HANDLER', 'HEADER', 'HEX', 'HIERARCHY', 'HOLD', 'HOUR', // 'ID',
3355'IDENTITY', 'IF', 'IGNORE', 'ILIKE', 'IMMEDIATE', 'IMMEDIATELY', 'IMMUTABLE', 'IMPLEMENTATION', 'IMPLICIT', 'IMPORT', 'IN', 'INCLUDE', 'INCLUDING', 'INCREMENT', 'INDENT', 'INDEX', 'INDEXES', 'INDICATOR', 'INHERIT', 'INHERITS', 'INITIAL', 'INITIALLY', 'INLINE', 'INNER', 'INOUT', 'INPUT', 'INSENSITIVE', 'INSTANCE', 'INSTANTIABLE', 'INSTEAD', 'INT', 'INTEGER', 'INTEGRITY', 'INTERSECTION', 'INTERVAL', 'INTO', 'INVOKER', 'IS', 'ISNULL', 'ISOLATION', 'JSON', 'JSON_ARRAY', 'JSON_ARRAYAGG', 'JSON_EXISTS', 'JSON_OBJECTAGG', 'JSON_QUERY', 'JSON_TABLE', 'JSON_TABLE_PRIMITIVE', 'JSON_VALUE', 'KEEP', 'KEY', 'KEYS', 'KEY_MEMBER', 'KEY_TYPE', 'LABEL', 'LANGUAGE', 'LARGE', 'LAST', 'LATERAL', 'LEADING', 'LEAKPROOF', 'LEVEL', 'LIBRARY', 'LIKE', 'LIKE_REGEX', 'LINK', 'LISTAGG', 'LOCAL', 'LOCATION', 'LOCATOR', 'LOCKED', 'LOGGED', 'MAP', 'MAPPING', 'MATCH', 'MATCHED', 'MATCHES', 'MATCH_NUMBER', 'MATCH_RECOGNIZE', 'MATERIALIZED', 'MAXVALUE', 'MEASURES', 'MEMBER', 'MERGE', 'MESSAGE_LENGTH', 'MESSAGE_OCTET_LENGTH', 'MESSAGE_TEXT', 'METHOD', 'MINUTE', 'MINVALUE', 'MODIFIES', 'MODULE', 'MONTH', 'MORE', 'MULTISET', 'MUMPS', 'NAME', 'NAMES', 'NAMESPACE', 'NATIONAL', 'NATURAL', 'NCHAR', 'NCLOB', 'NESTED', 'NESTING', 'NEW', 'NEXT', 'NFC', 'NFD', 'NFKC', 'NFKD', 'NIL', 'NO', 'NONE', 'NORMALIZED', 'NOT', 'NOTHING', 'NOTNULL', 'NOWAIT', 'NULL', 'NULLABLE', 'NULLS', 'NUMBER', 'NUMERIC', 'OBJECT', 'OCCURRENCES_REGEX', 'OCTETS', 'OF', 'OFF', 'OFFSET', 'OIDS', 'OLD', 'OMIT', 'ON COMMIT', 'ON DELETE', 'ON UPDATE', 'ONE', 'ONLY', 'OPEN', 'OPERATOR', 'OPTION', 'OPTIONS', 'ORDER', 'ORDERING', 'ORDINALITY', 'OTHERS', 'OUT', 'OUTER', 'OUTPUT', 'OVER', 'OVERFLOW', 'OVERLAPS', 'OVERRIDING', 'OWNED', 'OWNER', 'PAD', 'PARALLEL', 'PARAMETER', 'PARAMETER_MODE', 'PARAMETER_NAME', 'PARAMETER_ORDINAL_POSITION', 'PARAMETER_SPECIFIC_CATALOG', 'PARAMETER_SPECIFIC_NAME', 'PARAMETER_SPECIFIC_SCHEMA', 'PARSER', 'PARTIAL', 'PARTITION', 'PASCAL', 'PASS', 'PASSING', 'PASSTHROUGH', 'PASSWORD', 'PAST', 'PATTERN', 'PER', 'PERCENT', 'PERIOD', 'PERMISSION', 'PERMUTE', 'PLACING', 'PLAN', 'PLANS', 'PLI', 'POLICY', 'PORTION', 'POSITION_REGEX', 'PRECEDES', 'PRECEDING', 'PRECISION', 'PREPARED', 'PRESERVE', 'PRIMARY', 'PRIOR', 'PRIVATE', 'PRIVILEGES', 'PROCEDURAL', 'PROCEDURE', 'PROCEDURES', 'PROGRAM', 'PRUNE', 'PTF', 'PUBLIC', 'PUBLICATION', 'QUOTE', 'QUOTES', 'RANGE', 'READ', 'READS', 'REAL', 'REASSIGN', 'RECHECK', 'RECOVERY', 'RECURSIVE', 'REF', 'REFERENCES', 'REFERENCING', 'REFRESH', 'RELATIVE', 'RELEASE', 'RENAME', 'REPEATABLE', 'REPLICA', 'REQUIRING', 'RESPECT', 'RESTART', 'RESTORE', 'RESTRICT', 'RESULT', 'RETURN', 'RETURNED_CARDINALITY', 'RETURNED_LENGTH', 'RETURNED_OCTET_LENGTH', 'RETURNED_SQLSTATE', 'RETURNS', 'ROLE', 'ROLLUP', 'ROUTINE', 'ROUTINES', 'ROUTINE_CATALOG', 'ROUTINE_NAME', 'ROUTINE_SCHEMA', 'ROW', 'ROWS', 'ROW_COUNT', 'RULE', 'RUNNING', 'SCALAR', 'SCHEMA', 'SCHEMAS', 'SCHEMA_NAME', 'SCOPE', 'SCOPE_CATALOG', 'SCOPE_NAME', 'SCOPE_SCHEMA', 'SCROLL', 'SEARCH', 'SECOND', 'SECTION', 'SECURITY', 'SEEK', 'SELECTIVE', 'SELF', 'SENSITIVE', 'SEQUENCE', 'SEQUENCES', 'SERIALIZABLE', 'SERVER', 'SERVER_NAME', 'SESSION', 'SETOF', 'SETS', 'SHARE', 'SIMILAR', 'SIMPLE', 'SIZE', 'SKIP', 'SMALLINT', 'SNAPSHOT', 'SOURCE', 'SPACE', 'SPECIFIC', 'SPECIFICTYPE', 'SPECIFIC_NAME', 'SQL', 'SQLCODE', 'SQLERROR', 'SQLEXCEPTION', 'SQLSTATE', 'SQLWARNING', 'STABLE', 'STANDALONE', 'START', 'STATE', 'STATEMENT', 'STATIC', 'STATISTICS', 'STDIN', 'STDOUT', 'STORAGE', 'STORED', 'STRICT', 'STRUCTURE', 'STYLE', 'SUBCLASS_ORIGIN', 'SUBMULTISET', 'SUBSCRIPTION', 'SUBSET', 'SUBSTRING_REGEX', 'SUCCEEDS', 'SUPPORT', 'SYMMETRIC', 'SYSID', 'SYSTEM', 'SYSTEM_TIME', 'SYSTEM_USER', 'TABLE', 'TABLES', 'TABLESAMPLE', 'TABLESPACE', 'TABLE_NAME', 'TEMP', 'TEMPLATE', 'TEMPORARY', 'THEN', 'THROUGH', 'TIES', 'TIME', 'TIMESTAMP', 'TIMEZONE_HOUR', 'TIMEZONE_MINUTE', 'TO', 'TOKEN', 'TOP_LEVEL_COUNT', 'TRAILING', 'TRANSACTION', 'TRANSACTIONS_COMMITTED', 'TRANSACTIONS_ROLLED_BACK', 'TRANSACTION_ACTIVE', 'TRANSFORM', 'TRANSFORMS', 'TRANSLATE_REGEX', 'TRANSLATION', 'TREAT', 'TRIGGER', 'TRIGGER_CATALOG', 'TRIGGER_NAME', 'TRIGGER_SCHEMA', 'TRUE', 'TRUSTED', 'TYPE', 'TYPES', 'UESCAPE', 'UNBOUNDED', 'UNCOMMITTED', 'UNCONDITIONAL', 'UNDER', 'UNENCRYPTED', 'UNIQUE', 'UNKNOWN', 'UNLINK', 'UNLOGGED', 'UNMATCHED', 'UNNAMED', 'UNTIL', 'UNTYPED', 'URI', 'USAGE', 'USER_DEFINED_TYPE_CATALOG', 'USER_DEFINED_TYPE_CODE', 'USER_DEFINED_TYPE_NAME', 'USER_DEFINED_TYPE_SCHEMA', 'UTF16', 'UTF32', 'UTF8', 'VALID', 'VALIDATE', 'VALIDATOR', 'VALUE', 'VALUE_OF', 'VARBINARY', 'VARCHAR', 'VARIADIC', 'VARYING', 'VERBOSE', 'VERSIONING', 'VIEW', 'VIEWS', 'VOLATILE', 'WHENEVER', 'WHITESPACE', 'WINDOW', 'WITHIN', 'WITHOUT', 'WORK', 'WRAPPER', 'WRITE', 'XML', 'XMLATTRIBUTES', 'XMLBINARY', 'XMLCAST', 'XMLDECLARATION', 'XMLDOCUMENT', 'XMLITERATE', 'XMLNAMESPACES', 'XMLQUERY', 'XMLSCHEMA', 'XMLTEXT', 'XMLVALIDATE', 'YEAR', 'YES', 'ZONE'];
3356/**
3357 * Priority 1 (first)
3358 * keywords that begin a new statement
3359 * will begin new indented block
3360 */
3361// https://www.postgresql.org/docs/14/sql-commands.html
3362
3363var reservedCommands = ['ABORT', 'ALTER AGGREGATE', 'ALTER COLLATION', 'ALTER CONVERSION', 'ALTER DATABASE', 'ALTER DEFAULT PRIVILEGES', 'ALTER DOMAIN', 'ALTER EVENT TRIGGER', 'ALTER EXTENSION', 'ALTER FOREIGN DATA WRAPPER', 'ALTER FOREIGN TABLE', 'ALTER FUNCTION', 'ALTER GROUP', 'ALTER INDEX', 'ALTER LANGUAGE', 'ALTER LARGE OBJECT', 'ALTER MATERIALIZED VIEW', 'ALTER OPERATOR', 'ALTER OPERATOR CLASS', 'ALTER OPERATOR FAMILY', 'ALTER POLICY', 'ALTER PROCEDURE', 'ALTER PUBLICATION', 'ALTER ROLE', 'ALTER ROUTINE', 'ALTER RULE', 'ALTER SCHEMA', 'ALTER SEQUENCE', 'ALTER SERVER', 'ALTER STATISTICS', 'ALTER SUBSCRIPTION', 'ALTER SYSTEM', 'ALTER TABLE', 'ALTER TABLESPACE', 'ALTER TEXT SEARCH CONFIGURATION', 'ALTER TEXT SEARCH DICTIONARY', 'ALTER TEXT SEARCH PARSER', 'ALTER TEXT SEARCH TEMPLATE', 'ALTER TRIGGER', 'ALTER TYPE', 'ALTER USER', 'ALTER USER MAPPING', 'ALTER VIEW', 'ANALYZE', 'BEGIN', 'CALL', 'CHECKPOINT', 'CLOSE', 'CLUSTER', 'COMMENT', 'COMMIT', 'COMMIT PREPARED', 'COPY', 'CREATE ACCESS METHOD', 'CREATE AGGREGATE', 'CREATE CAST', 'CREATE COLLATION', 'CREATE CONVERSION', 'CREATE DATABASE', 'CREATE DOMAIN', 'CREATE EVENT TRIGGER', 'CREATE EXTENSION', 'CREATE FOREIGN DATA WRAPPER', 'CREATE FOREIGN TABLE', 'CREATE FUNCTION', 'CREATE GROUP', 'CREATE INDEX', 'CREATE LANGUAGE', 'CREATE MATERIALIZED VIEW', 'CREATE OPERATOR', 'CREATE OPERATOR CLASS', 'CREATE OPERATOR FAMILY', 'CREATE POLICY', 'CREATE PROCEDURE', 'CREATE PUBLICATION', 'CREATE ROLE', 'CREATE RULE', 'CREATE SCHEMA', 'CREATE SEQUENCE', 'CREATE SERVER', 'CREATE STATISTICS', 'CREATE SUBSCRIPTION', 'CREATE TABLE', 'CREATE TABLE AS', 'CREATE TABLESPACE', 'CREATE TEXT SEARCH CONFIGURATION', 'CREATE TEXT SEARCH DICTIONARY', 'CREATE TEXT SEARCH PARSER', 'CREATE TEXT SEARCH TEMPLATE', 'CREATE TRANSFORM', 'CREATE TRIGGER', 'CREATE TYPE', 'CREATE USER', 'CREATE USER MAPPING', 'CREATE VIEW', 'DEALLOCATE', 'DECLARE', 'DELETE', 'DISCARD', 'DO', 'DROP ACCESS METHOD', 'DROP AGGREGATE', 'DROP CAST', 'DROP COLLATION', 'DROP CONVERSION', 'DROP DATABASE', 'DROP DOMAIN', 'DROP EVENT TRIGGER', 'DROP EXTENSION', 'DROP FOREIGN DATA WRAPPER', 'DROP FOREIGN TABLE', 'DROP FUNCTION', 'DROP GROUP', 'DROP INDEX', 'DROP LANGUAGE', 'DROP MATERIALIZED VIEW', 'DROP OPERATOR', 'DROP OPERATOR CLASS', 'DROP OPERATOR FAMILY', 'DROP OWNED', 'DROP POLICY', 'DROP PROCEDURE', 'DROP PUBLICATION', 'DROP ROLE', 'DROP ROUTINE', 'DROP RULE', 'DROP SCHEMA', 'DROP SEQUENCE', 'DROP SERVER', 'DROP STATISTICS', 'DROP SUBSCRIPTION', 'DROP TABLE', 'DROP TABLESPACE', 'DROP TEXT SEARCH CONFIGURATION', 'DROP TEXT SEARCH DICTIONARY', 'DROP TEXT SEARCH PARSER', 'DROP TEXT SEARCH TEMPLATE', 'DROP TRANSFORM', 'DROP TRIGGER', 'DROP TYPE', 'DROP USER', 'DROP USER MAPPING', 'DROP VIEW', 'END', 'EXECUTE', 'EXPLAIN', 'FETCH', 'GRANT', 'IMPORT FOREIGN SCHEMA', 'INSERT', 'LISTEN', 'LOAD', 'LOCK', 'MOVE', 'NOTIFY', 'PREPARE', 'PREPARE TRANSACTION', 'REASSIGN OWNED', 'REFRESH MATERIALIZED VIEW', 'REINDEX', 'RELEASE SAVEPOINT', 'RESET', 'RETURNING', 'REVOKE', 'ROLLBACK', 'ROLLBACK PREPARED', 'ROLLBACK TO SAVEPOINT', 'SAVEPOINT', 'SECURITY LABEL', 'SELECT', 'SELECT INTO', 'SET', 'SET CONSTRAINTS', 'SET ROLE', 'SET SESSION AUTHORIZATION', 'SET TRANSACTION', 'SHOW', 'START TRANSACTION', 'TRUNCATE', 'UNLISTEN', 'UPDATE', 'VACUUM', 'VALUES', // other
3364'ADD', 'AFTER', 'ALTER COLUMN', 'INSERT INTO', 'SET SCHEMA', 'FROM', 'GROUP BY', 'HAVING', 'LIMIT', 'OFFSET', 'ORDER BY', 'WHERE', 'WITH'];
3365/**
3366 * Priority 2
3367 * commands that operate on two tables or subqueries
3368 * two main categories: joins and boolean set operators
3369 */
3370
3371var reservedBinaryCommands = [// set booleans
3372'INTERSECT', 'INTERSECT ALL', 'INTERSECT DISTINCT', 'UNION', 'UNION ALL', 'UNION DISTINCT', 'EXCEPT', 'EXCEPT ALL', 'EXCEPT DISTINCT', 'MINUS', 'MINUS ALL', 'MINUS DISTINCT', // joins
3373'JOIN', 'INNER JOIN', 'LEFT JOIN', 'LEFT OUTER JOIN', 'RIGHT JOIN', 'RIGHT OUTER JOIN', 'FULL JOIN', 'FULL OUTER JOIN', 'CROSS JOIN', 'NATURAL JOIN'];
3374/**
3375 * Priority 3
3376 * keywords that follow a previous Statement, must be attached to subsequent data
3377 * can be fully inline or on newline with optional indent
3378 */
3379
3380var reservedDependentClauses = ['WHEN', 'ELSE'];
3381var binaryOperators = ['<<', '>>', '||/', '|/', '::', ':=', '->>', '->', '=>', '~~*', '~~', '!~~*', '!~~', '~*', '!~*', '!~', '!!', '||', '@-@', '@@', '##', '<->', '&&', '&<', '&>', '<<|', '&<|', '|>>', '|&>', '<^', '^>', '?#', '?-', '?|', '?-|', '?||', '@>', '<@', '~=', '>>=', '<<=', '@@@']; // https://www.postgresql.org/docs/14/index.html
3382
3383var PostgreSqlFormatter = /*#__PURE__*/function (_Formatter) {
3384 _inherits(PostgreSqlFormatter, _Formatter);
3385
3386 var _super = _createSuper(PostgreSqlFormatter);
3387
3388 function PostgreSqlFormatter() {
3389 _classCallCheck(this, PostgreSqlFormatter);
3390
3391 return _super.apply(this, arguments);
3392 }
3393
3394 _createClass(PostgreSqlFormatter, [{
3395 key: "tokenizer",
3396 value: function tokenizer() {
3397 return new _core_Tokenizer__WEBPACK_IMPORTED_MODULE_1__["default"]({
3398 reservedCommands: PostgreSqlFormatter.reservedCommands,
3399 reservedBinaryCommands: PostgreSqlFormatter.reservedBinaryCommands,
3400 reservedDependentClauses: PostgreSqlFormatter.reservedDependentClauses,
3401 reservedJoinConditions: PostgreSqlFormatter.reservedJoinConditions,
3402 reservedLogicalOperators: PostgreSqlFormatter.reservedLogicalOperators,
3403 reservedKeywords: PostgreSqlFormatter.reservedKeywords,
3404 stringTypes: PostgreSqlFormatter.stringTypes,
3405 blockStart: PostgreSqlFormatter.blockStart,
3406 blockEnd: PostgreSqlFormatter.blockEnd,
3407 indexedPlaceholderTypes: PostgreSqlFormatter.indexedPlaceholderTypes,
3408 namedPlaceholderTypes: PostgreSqlFormatter.namedPlaceholderTypes,
3409 lineCommentTypes: PostgreSqlFormatter.lineCommentTypes,
3410 operators: PostgreSqlFormatter.operators
3411 });
3412 }
3413 }]);
3414
3415 return PostgreSqlFormatter;
3416}(_core_Formatter__WEBPACK_IMPORTED_MODULE_0__["default"]);
3417
3418
3419PostgreSqlFormatter.reservedCommands = reservedCommands;
3420PostgreSqlFormatter.reservedBinaryCommands = reservedBinaryCommands;
3421PostgreSqlFormatter.reservedDependentClauses = reservedDependentClauses;
3422PostgreSqlFormatter.reservedJoinConditions = ['ON', 'USING'];
3423PostgreSqlFormatter.reservedLogicalOperators = ['AND', 'OR'];
3424PostgreSqlFormatter.reservedKeywords = (0,_utils__WEBPACK_IMPORTED_MODULE_2__.dedupe)([].concat(_toConsumableArray(Object.values(reservedFunctions).reduce(function (acc, arr) {
3425 return [].concat(_toConsumableArray(acc), _toConsumableArray(arr));
3426}, [])), reservedKeywords));
3427PostgreSqlFormatter.stringTypes = ["\"\"", "''", "U&''", 'U&""', '$$', '``', "E''"];
3428PostgreSqlFormatter.blockStart = ['(', 'CASE'];
3429PostgreSqlFormatter.blockEnd = [')', 'END'];
3430PostgreSqlFormatter.indexedPlaceholderTypes = ['$'];
3431PostgreSqlFormatter.namedPlaceholderTypes = [':'];
3432PostgreSqlFormatter.lineCommentTypes = ['--'];
3433PostgreSqlFormatter.operators = binaryOperators;
3434
3435/***/ }),
3436
3437/***/ "./src/languages/redshift.formatter.ts":
3438/*!*********************************************!*\
3439 !*** ./src/languages/redshift.formatter.ts ***!
3440 \*********************************************/
3441/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3442
3443__webpack_require__.r(__webpack_exports__);
3444/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3445/* harmony export */ "default": () => (/* binding */ RedshiftFormatter)
3446/* harmony export */ });
3447/* harmony import */ var _core_Formatter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/Formatter */ "./src/core/Formatter.ts");
3448/* harmony import */ var _core_Tokenizer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/Tokenizer */ "./src/core/Tokenizer.ts");
3449/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils */ "./src/utils.ts");
3450function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
3451
3452function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
3453
3454function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3455
3456function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
3457
3458function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
3459
3460function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
3461
3462function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
3463
3464function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
3465
3466function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
3467
3468function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
3469
3470function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
3471
3472function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
3473
3474function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
3475
3476function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
3477
3478function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
3479
3480function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
3481
3482function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
3483
3484
3485
3486
3487/**
3488 * Priority 5 (last)
3489 * Full list of reserved functions
3490 * distinct from Keywords due to interaction with parentheses
3491 */
3492
3493var reservedFunctions = {
3494 // https://docs.aws.amazon.com/redshift/latest/dg/c_Aggregate_Functions.html
3495 aggregate: ['ANY_VALUE', 'APPROXIMATE PERCENTILE_DISC', 'AVG', 'COUNT', 'LISTAGG', 'MAX', 'MEDIAN', 'MIN', 'PERCENTILE_CONT', 'STDDEV_SAMP', 'STDDEV_POP', 'SUM', 'VAR_SAMP', 'VAR_POP'],
3496 // https://docs.aws.amazon.com/redshift/latest/dg/c_Array_Functions.html
3497 array: ['array', 'array_concat', 'array_flatten', 'get_array_length', 'split_to_array', 'subarray'],
3498 // https://docs.aws.amazon.com/redshift/latest/dg/c_bitwise_aggregate_functions.html
3499 bitwise: ['BIT_AND', 'BIT_OR', 'BOOL_AND', 'BOOL_OR'],
3500 // https://docs.aws.amazon.com/redshift/latest/dg/c_conditional_expressions.html
3501 conditional: ['CASE', 'COALESCE', 'DECODE', 'GREATEST', 'LEAST', 'NVL', 'NVL2', 'NULLIF'],
3502 // https://docs.aws.amazon.com/redshift/latest/dg/Date_functions_header.html
3503 dateTime: ['ADD_MONTHS', 'AT TIME ZONE', 'CONVERT_TIMEZONE', 'CURRENT_DATE', 'CURRENT_TIME', 'CURRENT_TIMESTAMP', 'DATE_CMP', 'DATE_CMP_TIMESTAMP', 'DATE_CMP_TIMESTAMPTZ', 'DATE_PART_YEAR', 'DATEADD', 'DATEDIFF', 'DATE_PART', 'DATE_TRUNC', 'EXTRACT', 'GETDATE', 'INTERVAL_CMP', 'LAST_DAY', 'MONTHS_BETWEEN', 'NEXT_DAY', 'SYSDATE', 'TIMEOFDAY', 'TIMESTAMP_CMP', 'TIMESTAMP_CMP_DATE', 'TIMESTAMP_CMP_TIMESTAMPTZ', 'TIMESTAMPTZ_CMP', 'TIMESTAMPTZ_CMP_DATE', 'TIMESTAMPTZ_CMP_TIMESTAMP', 'TIMEZONE', 'TO_TIMESTAMP', 'TRUNC'],
3504 // https://docs.aws.amazon.com/redshift/latest/dg/geospatial-functions.html
3505 spatial: ['AddBBox', 'DropBBox', 'GeometryType', 'ST_AddPoint', 'ST_Angle', 'ST_Area', 'ST_AsBinary', 'ST_AsEWKB', 'ST_AsEWKT', 'ST_AsGeoJSON', 'ST_AsText', 'ST_Azimuth', 'ST_Boundary', 'ST_Collect', 'ST_Contains', 'ST_ContainsProperly', 'ST_ConvexHull', 'ST_CoveredBy', 'ST_Covers', 'ST_Crosses', 'ST_Dimension', 'ST_Disjoint', 'ST_Distance', 'ST_DistanceSphere', 'ST_DWithin', 'ST_EndPoint', 'ST_Envelope', 'ST_Equals', 'ST_ExteriorRing', 'ST_Force2D', 'ST_Force3D', 'ST_Force3DM', 'ST_Force3DZ', 'ST_Force4D', 'ST_GeometryN', 'ST_GeometryType', 'ST_GeomFromEWKB', 'ST_GeomFromEWKT', 'ST_GeomFromText', 'ST_GeomFromWKB', 'ST_InteriorRingN', 'ST_Intersects', 'ST_IsPolygonCCW', 'ST_IsPolygonCW', 'ST_IsClosed', 'ST_IsCollection', 'ST_IsEmpty', 'ST_IsSimple', 'ST_IsValid', 'ST_Length', 'ST_LengthSphere', 'ST_Length2D', 'ST_LineFromMultiPoint', 'ST_LineInterpolatePoint', 'ST_M', 'ST_MakeEnvelope', 'ST_MakeLine', 'ST_MakePoint', 'ST_MakePolygon', 'ST_MemSize', 'ST_MMax', 'ST_MMin', 'ST_Multi', 'ST_NDims', 'ST_NPoints', 'ST_NRings', 'ST_NumGeometries', 'ST_NumInteriorRings', 'ST_NumPoints', 'ST_Perimeter', 'ST_Perimeter2D', 'ST_Point', 'ST_PointN', 'ST_Points', 'ST_Polygon', 'ST_RemovePoint', 'ST_Reverse', 'ST_SetPoint', 'ST_SetSRID', 'ST_Simplify', 'ST_SRID', 'ST_StartPoint', 'ST_Touches', 'ST_Within', 'ST_X', 'ST_XMax', 'ST_XMin', 'ST_Y', 'ST_YMax', 'ST_YMin', 'ST_Z', 'ST_ZMax', 'ST_ZMin', 'SupportsBBox'],
3506 // https://docs.aws.amazon.com/redshift/latest/dg/hash-functions.html
3507 hash: ['CHECKSUM', 'FUNC_SHA1', 'FNV_HASH', 'MD5', 'SHA', 'SHA1', 'SHA2'],
3508 // https://docs.aws.amazon.com/redshift/latest/dg/hyperloglog-functions.html
3509 hyperLogLog: ['HLL', 'HLL_CREATE_SKETCH', 'HLL_CARDINALITY', 'HLL_COMBINE'],
3510 // https://docs.aws.amazon.com/redshift/latest/dg/json-functions.html
3511 json: ['IS_VALID_JSON', 'IS_VALID_JSON_ARRAY', 'JSON_ARRAY_LENGTH', 'JSON_EXTRACT_ARRAY_ELEMENT_TEXT', 'JSON_EXTRACT_PATH_TEXT', 'JSON_PARSE', 'JSON_SERIALIZE'],
3512 // https://docs.aws.amazon.com/redshift/latest/dg/Math_functions.html
3513 math: ['ABS', 'ACOS', 'ASIN', 'ATAN', 'ATAN2', 'CBRT', 'CEILING', 'CEIL', 'COS', 'COT', 'DEGREES', 'DEXP', 'DLOG1', 'DLOG10', 'EXP', 'FLOOR', 'LN', 'LOG', 'MOD', 'PI', 'POWER', 'RADIANS', 'RANDOM', 'ROUND', 'SIN', 'SIGN', 'SQRT', 'TAN', 'TO_HEX', 'TRUNC'],
3514 // https://docs.aws.amazon.com/redshift/latest/dg/ml-function.html
3515 machineLearning: ['EXPLAIN_MODEL'],
3516 // https://docs.aws.amazon.com/redshift/latest/dg/String_functions_header.html
3517 string: ['ASCII', 'BPCHARCMP', 'BTRIM', 'BTTEXT_PATTERN_CMP', 'CHAR_LENGTH', 'CHARACTER_LENGTH', 'CHARINDEX', 'CHR', 'COLLATE', 'CONCAT', 'CRC32', 'DIFFERENCE', 'INITCAP', 'LEFT', 'RIGHT', 'LEN', 'LENGTH', 'LOWER', 'LPAD', 'RPAD', 'LTRIM', 'OCTETINDEX', 'OCTET_LENGTH', 'POSITION', 'QUOTE_IDENT', 'QUOTE_LITERAL', 'REGEXP_COUNT', 'REGEXP_INSTR', 'REGEXP_REPLACE', 'REGEXP_SUBSTR', 'REPEAT', 'REPLACE', 'REPLICATE', 'REVERSE', 'RTRIM', 'SOUNDEX', 'SPLIT_PART', 'STRPOS', 'STRTOL', 'SUBSTRING', 'TEXTLEN', 'TRANSLATE', 'TRIM', 'UPPER'],
3518 // https://docs.aws.amazon.com/redshift/latest/dg/c_Type_Info_Functions.html
3519 superType: ['decimal_precision', 'decimal_scale', 'is_array', 'is_bigint', 'is_boolean', 'is_char', 'is_decimal', 'is_float', 'is_integer', 'is_object', 'is_scalar', 'is_smallint', 'is_varchar', 'json_typeof'],
3520 // https://docs.aws.amazon.com/redshift/latest/dg/c_Window_functions.html
3521 window: ['AVG', 'COUNT', 'CUME_DIST', 'DENSE_RANK', 'FIRST_VALUE', 'LAST_VALUE', 'LAG', 'LEAD', 'LISTAGG', 'MAX', 'MEDIAN', 'MIN', 'NTH_VALUE', 'NTILE', 'PERCENT_RANK', 'PERCENTILE_CONT', 'PERCENTILE_DISC', 'RANK', 'RATIO_TO_REPORT', 'ROW_NUMBER', 'STDDEV_SAMP', 'STDDEV_POP', 'SUM', 'VAR_SAMP', 'VAR_POP'],
3522 // https://docs.aws.amazon.com/redshift/latest/dg/r_Data_type_formatting.html
3523 dataType: ['CAST', 'CONVERT', 'TO_CHAR', 'TO_DATE', 'TO_NUMBER', 'TEXT_TO_INT_ALT', 'TEXT_TO_NUMERIC_ALT'],
3524 // https://docs.aws.amazon.com/redshift/latest/dg/r_System_administration_functions.html
3525 sysAdmin: ['CHANGE_QUERY_PRIORITY', 'CHANGE_SESSION_PRIORITY', 'CHANGE_USER_PRIORITY', 'CURRENT_SETTING', 'PG_CANCEL_BACKEND', 'PG_TERMINATE_BACKEND', 'REBOOT_CLUSTER', 'SET_CONFIG'],
3526 // https://docs.aws.amazon.com/redshift/latest/dg/r_System_information_functions.html
3527 sysInfo: ['CURRENT_AWS_ACCOUNT', 'CURRENT_DATABASE', 'CURRENT_NAMESPACE', 'CURRENT_SCHEMA', 'CURRENT_SCHEMAS', 'CURRENT_USER', 'CURRENT_USER_ID', 'HAS_ASSUMEROLE_PRIVILEGE', 'HAS_DATABASE_PRIVILEGE', 'HAS_SCHEMA_PRIVILEGE', 'HAS_TABLE_PRIVILEGE', 'PG_BACKEND_PID', 'PG_GET_COLS', 'PG_GET_GRANTEE_BY_IAM_ROLE', 'PG_GET_IAM_ROLE_BY_USER', 'PG_GET_LATE_BINDING_VIEW_COLS', 'PG_LAST_COPY_COUNT', 'PG_LAST_COPY_ID', 'PG_LAST_UNLOAD_ID', 'PG_LAST_QUERY_ID', 'PG_LAST_UNLOAD_COUNT', 'SESSION_USER', 'SLICE_NUM', 'USER', 'VERSION']
3528};
3529/**
3530 * Priority 5 (last)
3531 * Full list of reserved words
3532 * any words that are in a higher priority are removed
3533 */
3534
3535var reservedKeywords = {
3536 // https://docs.aws.amazon.com/redshift/latest/dg/r_pg_keywords.html
3537 standard: ['AES128', 'AES256', 'ALL', 'ALLOWOVERWRITE', 'ANY', 'ARRAY', 'AS', 'ASC', 'AUTHORIZATION', 'BACKUP', 'BETWEEN', 'BINARY', 'BOTH', 'CHECK', 'COLUMN', 'CONSTRAINT', 'CREATE', 'CROSS', 'DEFAULT', 'DEFERRABLE', 'DEFLATE', 'DEFRAG', 'DESC', 'DISABLE', 'DISTINCT', 'DO', 'ENABLE', 'ENCODE', 'ENCRYPT', 'ENCRYPTION', 'EXPLICIT', 'FALSE', 'FOR', 'FOREIGN', 'FREEZE', 'FROM', 'FULL', 'GLOBALDICT256', 'GLOBALDICT64K', 'GROUP', 'IDENTITY', 'IGNORE', 'ILIKE', 'IN', 'INITIALLY', 'INNER', 'INTO', 'IS', 'ISNULL', 'LANGUAGE', 'LEADING', 'LIKE', 'LIMIT', 'LOCALTIME', 'LOCALTIMESTAMP', 'LUN', 'LUNS', 'MINUS', 'NATURAL', 'NEW', 'NOT', 'NOTNULL', 'NULL', 'NULLS', 'OFF', 'OFFLINE', 'OFFSET', 'OID', 'OLD', 'ONLY', 'OPEN', 'ORDER', 'OUTER', 'OVERLAPS', 'PARALLEL', 'PARTITION', 'PERCENT', 'PERMISSIONS', 'PLACING', 'PRIMARY', 'RECOVER', 'REFERENCES', 'REJECTLOG', 'RESORT', 'RESPECT', 'RESTORE', 'SIMILAR', 'SNAPSHOT', 'SOME', 'SYSTEM', 'TABLE', 'TAG', 'TDES', 'THEN', 'TIMESTAMP', 'TO', 'TOP', 'TRAILING', 'TRUE', 'UNIQUE', 'VERBOSE', 'WALLET', 'WITHOUT'],
3538 // https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-conversion.html
3539 dataConversionParams: ['ACCEPTANYDATE', 'ACCEPTINVCHARS', 'BLANKSASNULL', 'DATEFORMAT', 'EMPTYASNULL', 'ENCODING', 'ESCAPE', 'EXPLICIT_IDS', 'FILLRECORD', 'IGNOREBLANKLINES', 'IGNOREHEADER', 'NULL AS', 'REMOVEQUOTES', 'ROUNDEC', 'TIMEFORMAT', 'TRIMBLANKS', 'TRUNCATECOLUMNS'],
3540 // https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-load.html
3541 dataLoadParams: ['COMPROWS', 'COMPUPDATE', 'MAXERROR', 'NOLOAD', 'STATUPDATE'],
3542 // https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-format.html
3543 dataFormatParams: ['FORMAT', 'CSV', 'DELIMITER', 'FIXEDWIDTH', 'SHAPEFILE', 'AVRO', 'JSON', 'PARQUET', 'ORC'],
3544 // https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-authorization.html
3545 copyAuthParams: ['ACCESS_KEY_ID', 'CREDENTIALS', 'ENCRYPTED', 'IAM_ROLE', 'MASTER_SYMMETRIC_KEY', 'SECRET_ACCESS_KEY', 'SESSION_TOKEN'],
3546 // https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-file-compression.html
3547 copyCompressionParams: ['BZIP2', 'GZIP', 'LZOP', 'ZSTD'],
3548 // https://docs.aws.amazon.com/redshift/latest/dg/r_COPY-alphabetical-parm-list.html
3549 copyMiscParams: ['MANIFEST', 'READRATIO', 'REGION', 'SSH'],
3550 // https://docs.aws.amazon.com/redshift/latest/dg/c_Compression_encodings.html
3551 compressionEncodings: ['RAW', 'AZ64', 'BYTEDICT', 'DELTA', 'DELTA32K', 'LZO', 'MOSTLY8', 'MOSTLY16', 'MOSTLY32', 'RUNLENGTH', 'TEXT255', 'TEXT32K'],
3552 misc: [// CREATE EXTERNAL SCHEMA (https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html)
3553 'CATALOG_ROLE', 'SECRET_ARN', 'EXTERNAL', 'HIVE METASTORE', // https://docs.aws.amazon.com/redshift/latest/dg/c_choosing_dist_sort.html
3554 'AUTO', 'EVEN', 'KEY', 'PREDICATE', // unknown
3555 'COMPRESSION', 'DATA CATALOG'],
3556
3557 /**
3558 * Other keywords not included:
3559 * STL: https://docs.aws.amazon.com/redshift/latest/dg/c_intro_STL_tables.html
3560 * SVCS: https://docs.aws.amazon.com/redshift/latest/dg/svcs_views.html
3561 * SVL: https://docs.aws.amazon.com/redshift/latest/dg/svl_views.html
3562 * SVV: https://docs.aws.amazon.com/redshift/latest/dg/svv_views.html
3563 */
3564 dataTypes: ['CHAR', 'CHARACTER', 'NCHAR', 'VARCHAR', 'CHARACTER VARYING', 'NVARCHAR', 'BPCHAR', 'TEXT']
3565};
3566/**
3567 * Priority 1 (first)
3568 * keywords that begin a new statement
3569 * will begin new indented block
3570 */
3571// https://docs.aws.amazon.com/redshift/latest/dg/c_SQL_commands.html
3572
3573var reservedCommands = ['ABORT', 'ALTER DATABASE', 'ALTER DATASHARE', 'ALTER DEFAULT PRIVILEGES', 'ALTER GROUP', 'ALTER MATERIALIZED VIEW', 'ALTER PROCEDURE', 'ALTER SCHEMA', 'ALTER TABLE', 'ALTER TABLE APPEND', 'ALTER USER', 'ANALYSE', 'ANALYZE', 'ANALYSE COMPRESSION', 'ANALYZE COMPRESSION', 'BEGIN', 'CALL', 'CANCEL', 'CLOSE', 'COMMENT', 'COMMIT', 'COPY', 'CREATE DATABASE', 'CREATE DATASHARE', 'CREATE EXTERNAL FUNCTION', 'CREATE EXTERNAL SCHEMA', 'CREATE EXTERNAL TABLE', 'CREATE FUNCTION', 'CREATE GROUP', 'CREATE LIBRARY', 'CREATE MATERIALIZED VIEW', 'CREATE MODEL', 'CREATE PROCEDURE', 'CREATE SCHEMA', 'CREATE TABLE', 'CREATE TABLE AS', 'CREATE USER', 'CREATE VIEW', 'DEALLOCATE', 'DECLARE', 'DELETE', 'DESC DATASHARE', 'DROP DATABASE', 'DROP DATASHARE', 'DROP FUNCTION', 'DROP GROUP', 'DROP LIBRARY', 'DROP MODEL', 'DROP MATERIALIZED VIEW', 'DROP PROCEDURE', 'DROP SCHEMA', 'DROP TABLE', 'DROP USER', 'DROP VIEW', 'DROP', 'END', 'EXECUTE', 'EXPLAIN', 'FETCH', 'FROM', 'GRANT', 'HAVING', 'INSERT', 'LOCK', 'PREPARE', 'REFRESH MATERIALIZED VIEW', 'RESET', 'REVOKE', 'ROLLBACK', 'SELECT', 'SELECT INTO', 'SET', 'SET SESSION AUTHORIZATION', 'SET SESSION CHARACTERISTICS', 'SHOW', 'SHOW EXTERNAL TABLE', 'SHOW MODEL', 'SHOW DATASHARES', 'SHOW PROCEDURE', 'SHOW TABLE', 'SHOW VIEW', 'START TRANSACTION', 'TRUNCATE', 'UNLOAD', 'UPDATE', 'VACUUM', 'WHERE', 'WITH', // other
3574'GROUP BY', 'ORDER BY', 'LIMIT', 'OFFSET', 'VALUES', 'MODIFY', 'INSERT INTO', 'ALTER COLUMN', 'SET SCHEMA' // verify
3575];
3576/**
3577 * Priority 2
3578 * commands that operate on two tables or subqueries
3579 * two main categories: joins and boolean set operators
3580 */
3581
3582var reservedBinaryCommands = [// set booleans
3583'INTERSECT', 'INTERSECT ALL', 'INTERSECT DISTINCT', 'UNION', 'UNION ALL', 'UNION DISTINCT', 'EXCEPT', 'EXCEPT ALL', 'EXCEPT DISTINCT', // joins
3584'JOIN', 'INNER JOIN', 'LEFT JOIN', 'LEFT OUTER JOIN', 'RIGHT JOIN', 'RIGHT OUTER JOIN', 'FULL JOIN', 'FULL OUTER JOIN', 'CROSS JOIN', 'NATURAL JOIN'];
3585/**
3586 * Priority 3
3587 * keywords that follow a previous Statement, must be attached to subsequent data
3588 * can be fully inline or on newline with optional indent
3589 */
3590
3591var reservedDependentClauses = ['WHEN', 'ELSE']; // https://docs.aws.amazon.com/redshift/latest/dg/cm_chap_SQLCommandRef.html
3592
3593var RedshiftFormatter = /*#__PURE__*/function (_Formatter) {
3594 _inherits(RedshiftFormatter, _Formatter);
3595
3596 var _super = _createSuper(RedshiftFormatter);
3597
3598 function RedshiftFormatter() {
3599 _classCallCheck(this, RedshiftFormatter);
3600
3601 return _super.apply(this, arguments);
3602 }
3603
3604 _createClass(RedshiftFormatter, [{
3605 key: "tokenizer",
3606 value: function tokenizer() {
3607 return new _core_Tokenizer__WEBPACK_IMPORTED_MODULE_1__["default"]({
3608 reservedCommands: RedshiftFormatter.reservedCommands,
3609 reservedBinaryCommands: RedshiftFormatter.reservedBinaryCommands,
3610 reservedDependentClauses: RedshiftFormatter.reservedDependentClauses,
3611 reservedJoinConditions: RedshiftFormatter.reservedJoinConditions,
3612 reservedLogicalOperators: RedshiftFormatter.reservedLogicalOperators,
3613 reservedKeywords: RedshiftFormatter.reservedKeywords,
3614 stringTypes: RedshiftFormatter.stringTypes,
3615 blockStart: RedshiftFormatter.blockStart,
3616 blockEnd: RedshiftFormatter.blockEnd,
3617 indexedPlaceholderTypes: RedshiftFormatter.indexedPlaceholderTypes,
3618 namedPlaceholderTypes: RedshiftFormatter.namedPlaceholderTypes,
3619 lineCommentTypes: RedshiftFormatter.lineCommentTypes,
3620 operators: RedshiftFormatter.operators
3621 });
3622 }
3623 }]);
3624
3625 return RedshiftFormatter;
3626}(_core_Formatter__WEBPACK_IMPORTED_MODULE_0__["default"]);
3627
3628
3629RedshiftFormatter.reservedCommands = reservedCommands;
3630RedshiftFormatter.reservedBinaryCommands = reservedBinaryCommands;
3631RedshiftFormatter.reservedDependentClauses = reservedDependentClauses;
3632RedshiftFormatter.reservedJoinConditions = ['ON', 'USING'];
3633RedshiftFormatter.reservedLogicalOperators = ['AND', 'OR'];
3634RedshiftFormatter.reservedKeywords = (0,_utils__WEBPACK_IMPORTED_MODULE_2__.dedupe)([].concat(_toConsumableArray(Object.values(reservedFunctions).reduce(function (acc, arr) {
3635 return [].concat(_toConsumableArray(acc), _toConsumableArray(arr));
3636}, [])), _toConsumableArray(Object.values(reservedKeywords).reduce(function (acc, arr) {
3637 return [].concat(_toConsumableArray(acc), _toConsumableArray(arr));
3638}, []))));
3639RedshiftFormatter.stringTypes = ["\"\"", "''", '``'];
3640RedshiftFormatter.blockStart = ['('];
3641RedshiftFormatter.blockEnd = [')'];
3642RedshiftFormatter.indexedPlaceholderTypes = ['?'];
3643RedshiftFormatter.namedPlaceholderTypes = ['@', '#', '$'];
3644RedshiftFormatter.lineCommentTypes = ['--'];
3645RedshiftFormatter.operators = ['|/', '||/', '<<', '>>', '||'];
3646
3647/***/ }),
3648
3649/***/ "./src/languages/sparksql.formatter.ts":
3650/*!*********************************************!*\
3651 !*** ./src/languages/sparksql.formatter.ts ***!
3652 \*********************************************/
3653/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3654
3655__webpack_require__.r(__webpack_exports__);
3656/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3657/* harmony export */ "default": () => (/* binding */ SparkSqlFormatter)
3658/* harmony export */ });
3659/* harmony import */ var _core_Formatter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/Formatter */ "./src/core/Formatter.ts");
3660/* harmony import */ var _core_Tokenizer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/Tokenizer */ "./src/core/Tokenizer.ts");
3661/* harmony import */ var _core_token__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../core/token */ "./src/core/token.ts");
3662/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils */ "./src/utils.ts");
3663function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
3664
3665function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
3666
3667function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3668
3669function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
3670
3671function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
3672
3673function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
3674
3675function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
3676
3677function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
3678
3679function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
3680
3681function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
3682
3683function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
3684
3685function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
3686
3687function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
3688
3689function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
3690
3691function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
3692
3693function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
3694
3695function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
3696
3697
3698
3699 // convert to partial type import in TS 4.5
3700
3701
3702/**
3703 * Priority 5 (last)
3704 * Full list of reserved functions
3705 * distinct from Keywords due to interaction with parentheses
3706 */
3707// http://spark.apache.org/docs/latest/sql-ref-functions.html
3708
3709var reservedFunctions = {
3710 // http://spark.apache.org/docs/latest/sql-ref-functions-builtin.html#aggregate-functions
3711 aggregate: ['ANY', 'APPROX_COUNT_DISTINCT', 'APPROX_PERCENTILE', 'AVG', 'BIT_AND', 'BIT_OR', 'BIT_XOR', 'BOOL_AND', 'BOOL_OR', 'COLLECT_LIST', 'COLLECT_SET', 'CORR', 'COUNT', 'COUNT', 'COUNT', 'COUNT_IF', 'COUNT_MIN_SKETCH', 'COVAR_POP', 'COVAR_SAMP', 'EVERY', 'FIRST', 'FIRST_VALUE', 'GROUPING', 'GROUPING_ID', 'KURTOSIS', 'LAST', 'LAST_VALUE', 'MAX', 'MAX_BY', 'MEAN', 'MIN', 'MIN_BY', 'PERCENTILE', 'PERCENTILE', 'PERCENTILE_APPROX', 'SKEWNESS', 'SOME', 'STD', 'STDDEV', 'STDDEV_POP', 'STDDEV_SAMP', 'SUM', 'VAR_POP', 'VAR_SAMP', 'VARIANCE'],
3712 // http://spark.apache.org/docs/latest/sql-ref-functions-builtin.html#window-functions
3713 window: ['CUME_DIST', 'DENSE_RANK', 'LAG', 'LEAD', 'NTH_VALUE', 'NTILE', 'PERCENT_RANK', 'RANK', 'ROW_NUMBER'],
3714 // http://spark.apache.org/docs/latest/sql-ref-functions-builtin.html#array-functions
3715 array: ['ARRAY', 'ARRAY_CONTAINS', 'ARRAY_DISTINCT', 'ARRAY_EXCEPT', 'ARRAY_INTERSECT', 'ARRAY_JOIN', 'ARRAY_MAX', 'ARRAY_MIN', 'ARRAY_POSITION', 'ARRAY_REMOVE', 'ARRAY_REPEAT', 'ARRAY_UNION', 'ARRAYS_OVERLAP', 'ARRAYS_ZIP', 'FLATTEN', 'SEQUENCE', 'SHUFFLE', 'SLICE', 'SORT_ARRAY'],
3716 // http://spark.apache.org/docs/latest/sql-ref-functions-builtin.html#map-functions
3717 map: ['ELEMENT_AT', 'ELEMENT_AT', 'MAP', 'MAP_CONCAT', 'MAP_ENTRIES', 'MAP_FROM_ARRAYS', 'MAP_FROM_ENTRIES', 'MAP_KEYS', 'MAP_VALUES', 'STR_TO_MAP'],
3718 // http://spark.apache.org/docs/latest/sql-ref-functions-builtin.html#date-and-timestamp-functions
3719 datetime: ['ADD_MONTHS', 'CURRENT_DATE', 'CURRENT_DATE', 'CURRENT_TIMESTAMP', 'CURRENT_TIMESTAMP', 'CURRENT_TIMEZONE', 'DATE_ADD', 'DATE_FORMAT', 'DATE_FROM_UNIX_DATE', 'DATE_PART', 'DATE_SUB', 'DATE_TRUNC', 'DATEDIFF', 'DAY', 'DAYOFMONTH', 'DAYOFWEEK', 'DAYOFYEAR', 'EXTRACT', 'FROM_UNIXTIME', 'FROM_UTC_TIMESTAMP', 'HOUR', 'LAST_DAY', 'MAKE_DATE', 'MAKE_DT_INTERVAL', 'MAKE_INTERVAL', 'MAKE_TIMESTAMP', 'MAKE_YM_INTERVAL', 'MINUTE', 'MONTH', 'MONTHS_BETWEEN', 'NEXT_DAY', 'NOW', 'QUARTER', 'SECOND', 'SESSION_WINDOW', 'TIMESTAMP_MICROS', 'TIMESTAMP_MILLIS', 'TIMESTAMP_SECONDS', 'TO_DATE', 'TO_TIMESTAMP', 'TO_UNIX_TIMESTAMP', 'TO_UTC_TIMESTAMP', 'TRUNC', 'UNIX_DATE', 'UNIX_MICROS', 'UNIX_MILLIS', 'UNIX_SECONDS', 'UNIX_TIMESTAMP', 'WEEKDAY', 'WEEKOFYEAR', 'WINDOW', 'YEAR'],
3720 // http://spark.apache.org/docs/latest/sql-ref-functions-builtin.html#json-functions
3721 json: ['FROM_JSON', 'GET_JSON_OBJECT', 'JSON_ARRAY_LENGTH', 'JSON_OBJECT_KEYS', 'JSON_TUPLE', 'SCHEMA_OF_JSON', 'TO_JSON'],
3722 // http://spark.apache.org/docs/latest/api/sql/index.html
3723 misc: ['ABS', 'ACOS', 'ACOSH', 'AGGREGATE', 'ARRAY_SORT', 'ASCII', 'ASIN', 'ASINH', 'ASSERT_TRUE', 'ATAN', 'ATAN2', 'ATANH', 'BASE64', 'BIGINT', 'BIN', 'BINARY', 'BIT_COUNT', 'BIT_GET', 'BIT_LENGTH', 'BOOLEAN', 'BROUND', 'BTRIM', 'CARDINALITY', 'CBRT', 'CEIL', 'CEILING', 'CHAR', 'CHAR_LENGTH', 'CHARACTER_LENGTH', 'CHR', 'CONCAT', 'CONCAT_WS', 'CONV', 'COS', 'COSH', 'COT', 'CRC32', 'CURRENT_CATALOG', 'CURRENT_DATABASE', 'CURRENT_USER', 'DATE', 'DECIMAL', 'DEGREES', 'DOUBLE', // 'E',
3724 'ELT', 'EXP', 'EXPM1', 'FACTORIAL', 'FIND_IN_SET', 'FLOAT', 'FLOOR', 'FORALL', 'FORMAT_NUMBER', 'FORMAT_STRING', 'FROM_CSV', 'GETBIT', 'HASH', 'HEX', 'HYPOT', 'INITCAP', 'INLINE', 'INLINE_OUTER', 'INPUT_FILE_BLOCK_LENGTH', 'INPUT_FILE_BLOCK_START', 'INPUT_FILE_NAME', 'INSTR', 'INT', 'ISNAN', 'ISNOTNULL', 'ISNULL', 'JAVA_METHOD', 'LCASE', 'LEFT', 'LENGTH', 'LEVENSHTEIN', 'LN', 'LOCATE', 'LOG', 'LOG10', 'LOG1P', 'LOG2', 'LOWER', 'LPAD', 'LTRIM', 'MAP_FILTER', 'MAP_ZIP_WITH', 'MD5', 'MOD', 'MONOTONICALLY_INCREASING_ID', 'NAMED_STRUCT', 'NANVL', 'NEGATIVE', 'NVL', 'NVL2', 'OCTET_LENGTH', 'OVERLAY', 'PARSE_URL', 'PI', 'PMOD', 'POSEXPLODE', 'POSEXPLODE_OUTER', 'POSITION', 'POSITIVE', 'POW', 'POWER', 'PRINTF', 'RADIANS', 'RAISE_ERROR', 'RAND', 'RANDN', 'RANDOM', 'REFLECT', 'REGEXP_EXTRACT', 'REGEXP_EXTRACT_ALL', 'REGEXP_LIKE', 'REGEXP_REPLACE', 'REPEAT', 'REPLACE', 'REVERSE', 'RIGHT', 'RINT', 'ROUND', 'RPAD', 'RTRIM', 'SCHEMA_OF_CSV', 'SENTENCES', 'SHA', 'SHA1', 'SHA2', 'SHIFTLEFT', 'SHIFTRIGHT', 'SHIFTRIGHTUNSIGNED', 'SIGN', 'SIGNUM', 'SIN', 'SINH', 'SMALLINT', 'SOUNDEX', 'SPACE', 'SPARK_PARTITION_ID', 'SPLIT', 'SQRT', 'STACK', 'SUBSTR', 'SUBSTRING', 'SUBSTRING_INDEX', 'TAN', 'TANH', 'TIMESTAMP', 'TINYINT', 'TO_CSV', 'TRANSFORM_KEYS', 'TRANSFORM_VALUES', 'TRANSLATE', 'TRIM', 'TRY_ADD', 'TRY_DIVIDE', 'TYPEOF', 'UCASE', 'UNBASE64', 'UNHEX', 'UPPER', 'UUID', 'VERSION', 'WIDTH_BUCKET', 'XPATH', 'XPATH_BOOLEAN', 'XPATH_DOUBLE', 'XPATH_FLOAT', 'XPATH_INT', 'XPATH_LONG', 'XPATH_NUMBER', 'XPATH_SHORT', 'XPATH_STRING', 'XXHASH64', 'ZIP_WITH']
3725};
3726/**
3727 * Priority 5 (last)
3728 * Full list of reserved words
3729 * any words that are in a higher priority are removed
3730 */
3731// https://deepkb.com/CO_000013/en/kb/IMPORT-fbfa59f0-2bf1-31fe-bb7b-0f9efe9932c6/spark-sql-keywords
3732
3733var reservedKeywords = ['ADD', 'AFTER', 'ALL', 'ALTER', 'ANALYZE', 'AND', 'ANTI', 'ANY', 'ARCHIVE', 'ARRAY', 'AS', 'ASC', 'AT', 'AUTHORIZATION', 'BETWEEN', 'BOTH', 'BUCKET', 'BUCKETS', 'BY', 'CACHE', 'CASCADE', 'CAST', 'CHANGE', 'CHECK', 'CLEAR', 'CLUSTER', 'CLUSTERED', 'CODEGEN', 'COLLATE', 'COLLECTION', 'COLUMN', 'COLUMNS', 'COMMENT', 'COMMIT', 'COMPACT', 'COMPACTIONS', 'COMPUTE', 'CONCATENATE', 'CONSTRAINT', 'COST', 'CREATE', 'CROSS', 'CUBE', 'CURRENT', 'CURRENT_DATE', 'CURRENT_TIME', 'CURRENT_TIMESTAMP', 'CURRENT_USER', 'DATA', 'DATABASE', 'DATABASES', 'DAY', 'DBPROPERTIES', 'DEFINED', 'DELETE', 'DELIMITED', 'DESC', 'DESCRIBE', 'DFS', 'DIRECTORIES', 'DIRECTORY', 'DISTINCT', 'DISTRIBUTE', 'DIV', 'DROP', 'ESCAPE', 'ESCAPED', 'EXCEPT', 'EXCHANGE', 'EXISTS', 'EXPORT', 'EXTENDED', 'EXTERNAL', 'EXTRACT', 'FALSE', 'FETCH', 'FIELDS', 'FILTER', 'FILEFORMAT', 'FIRST', 'FIRST_VALUE', 'FOLLOWING', 'FOR', 'FOREIGN', 'FORMAT', 'FORMATTED', 'FULL', 'FUNCTION', 'FUNCTIONS', 'GLOBAL', 'GRANT', 'GROUP', 'GROUPING', 'HOUR', 'IF', 'IGNORE', 'IMPORT', 'IN', 'INDEX', 'INDEXES', 'INNER', 'INPATH', 'INPUTFORMAT', 'INTERSECT', 'INTERVAL', 'INTO', 'IS', 'ITEMS', 'KEYS', 'LAST', 'LAST_VALUE', 'LATERAL', 'LAZY', 'LEADING', 'LEFT', 'LIKE', 'LINES', 'LIST', 'LOCAL', 'LOCATION', 'LOCK', 'LOCKS', 'LOGICAL', 'MACRO', 'MAP', 'MATCHED', 'MERGE', 'MINUTE', 'MONTH', 'MSCK', 'NAMESPACE', 'NAMESPACES', 'NATURAL', 'NO', 'NOT', 'NULL', 'NULLS', 'OF', 'ONLY', 'OPTION', 'OPTIONS', 'OR', 'ORDER', 'OUT', 'OUTER', 'OUTPUTFORMAT', 'OVER', 'OVERLAPS', 'OVERLAY', 'OVERWRITE', 'OWNER', 'PARTITION', 'PARTITIONED', 'PARTITIONS', 'PERCENT', 'PLACING', 'POSITION', 'PRECEDING', 'PRIMARY', 'PRINCIPALS', 'PROPERTIES', 'PURGE', 'QUERY', 'RANGE', 'RECORDREADER', 'RECORDWRITER', 'RECOVER', 'REDUCE', 'REFERENCES', 'RENAME', 'REPAIR', 'REPLACE', 'RESPECT', 'RESTRICT', 'REVOKE', 'RIGHT', 'RLIKE', 'ROLE', 'ROLES', 'ROLLBACK', 'ROLLUP', 'ROW', 'ROWS', 'SCHEMA', 'SECOND', 'SELECT', 'SEMI', 'SEPARATED', 'SERDE', 'SERDEPROPERTIES', 'SESSION_USER', 'SETS', 'SHOW', 'SKEWED', 'SOME', 'SORT', 'SORTED', 'START', 'STATISTICS', 'STORED', 'STRATIFY', 'STRUCT', 'SUBSTR', 'SUBSTRING', 'TABLE', 'TABLES', 'TBLPROPERTIES', 'TEMPORARY', 'TERMINATED', 'THEN', 'TO', 'TOUCH', 'TRAILING', 'TRANSACTION', 'TRANSACTIONS', 'TRIM', 'TRUE', 'TRUNCATE', 'UNARCHIVE', 'UNBOUNDED', 'UNCACHE', 'UNIQUE', 'UNKNOWN', 'UNLOCK', 'UNSET', 'USE', 'USER', 'VIEW', 'WINDOW', 'YEAR', // other
3734'ANALYSE', 'ARRAY_ZIP', 'COALESCE', 'CONTAINS', 'CONVERT', 'CURRENT ROW', 'DAYS', 'DAY_HOUR', 'DAY_MINUTE', 'DAY_SECOND', 'DECODE', 'DEFAULT', 'DISTINCTROW', 'ENCODE', 'EXPLODE', 'EXPLODE_OUTER', 'FIXED', 'GREATEST', 'GROUP_CONCAT', 'HOURS', 'HOUR_MINUTE', 'HOUR_SECOND', 'IFNULL', 'LEAST', 'LEVEL', 'MINUTE_SECOND', 'NULLIF', 'OFFSET', 'ON DELETE', 'ON UPDATE', 'OPTIMIZE', 'REGEXP', 'SEPARATOR', 'SIZE', 'STRING', 'TYPE', 'TYPES', 'UNSIGNED', 'VARIABLES', 'YEAR_MONTH'];
3735/**
3736 * Priority 1 (first)
3737 * keywords that begin a new statement
3738 * will begin new indented block
3739 */
3740// http://spark.apache.org/docs/latest/sql-ref-syntax.html
3741
3742var reservedCommands = [// DDL
3743'ALTER COLUMN', 'ALTER DATABASE', 'ALTER TABLE', 'ALTER VIEW', 'CREATE DATABASE', 'CREATE FUNCTION', 'CREATE TABLE', 'CREATE VIEW', 'DROP DATABASE', 'DROP FUNCTION', 'DROP TABLE', 'DROP VIEW', 'REPAIR TABLE', 'TRUNCATE TABLE', 'USE DATABASE', // DML
3744'INSERT INTO', 'INSERT OVERWRITE', 'INSERT OVERWRITE DIRECTORY', 'LOAD', // Data Retrieval
3745'SELECT', 'WITH', 'CLUSTER BY', 'DISTRIBUTE BY', 'PARTITION BY', 'GROUP BY', 'HAVING', 'VALUES', 'LIMIT', 'OFFSET', 'ORDER BY', 'SORT BY', 'TABLESAMPLE', 'WHERE', 'PIVOT', 'TRANSFORM', 'EXPLAIN', // Auxiliary
3746'ADD FILE', 'ADD JAR', 'ANALYZE TABLE', 'CACHE TABLE', 'CLEAR CACHE', 'DESCRIBE DATABASE', 'DESCRIBE FUNCTION', 'DESCRIBE QUERY', 'DESCRIBE TABLE', 'LIST FILE', 'LIST JAR', 'REFRESH', 'REFRESH TABLE', 'REFRESH FUNCTION', 'RESET', 'SET', 'SET SCHEMA', 'SHOW COLUMNS', 'SHOW CREATE TABLE', 'SHOW DATABASES', 'SHOW FUNCTIONS', 'SHOW PARTITIONS', 'SHOW TABLE EXTENDED', 'SHOW TABLES', 'SHOW TBLPROPERTIES', 'SHOW VIEWS', 'UNCACHE TABLE', // other
3747'FROM', 'INSERT', 'LATERAL VIEW', 'UPDATE', 'WINDOW' // verify
3748];
3749/**
3750 * Priority 2
3751 * commands that operate on two tables or subqueries
3752 * two main categories: joins and boolean set operators
3753 */
3754
3755var reservedBinaryCommands = [// set booleans
3756'INTERSECT', 'INTERSECT ALL', 'INTERSECT DISTINCT', 'UNION', 'UNION ALL', 'UNION DISTINCT', 'EXCEPT', 'EXCEPT ALL', 'EXCEPT DISTINCT', 'MINUS', 'MINUS ALL', 'MINUS DISTINCT', // joins
3757'JOIN', 'INNER JOIN', 'LEFT JOIN', 'LEFT OUTER JOIN', 'RIGHT JOIN', 'RIGHT OUTER JOIN', 'FULL JOIN', 'FULL OUTER JOIN', 'CROSS JOIN', 'NATURAL JOIN', // apply
3758'CROSS APPLY', 'OUTER APPLY', // non-standard-joins
3759'ANTI JOIN', 'SEMI JOIN', 'LEFT ANTI JOIN', 'LEFT SEMI JOIN', 'RIGHT OUTER JOIN', 'RIGHT SEMI JOIN', 'NATURAL ANTI JOIN', 'NATURAL FULL OUTER JOIN', 'NATURAL INNER JOIN', 'NATURAL LEFT ANTI JOIN', 'NATURAL LEFT OUTER JOIN', 'NATURAL LEFT SEMI JOIN', 'NATURAL OUTER JOIN', 'NATURAL RIGHT OUTER JOIN', 'NATURAL RIGHT SEMI JOIN', 'NATURAL SEMI JOIN', 'CROSS APPLY', 'OUTER APPLY'];
3760/**
3761 * Priority 3
3762 * keywords that follow a previous Statement, must be attached to subsequent data
3763 * can be fully inline or on newline with optional indent
3764 */
3765
3766var reservedDependentClauses = ['WHEN', 'ELSE']; // http://spark.apache.org/docs/latest/sql-programming-guide.html
3767
3768var SparkSqlFormatter = /*#__PURE__*/function (_Formatter) {
3769 _inherits(SparkSqlFormatter, _Formatter);
3770
3771 var _super = _createSuper(SparkSqlFormatter);
3772
3773 function SparkSqlFormatter() {
3774 _classCallCheck(this, SparkSqlFormatter);
3775
3776 return _super.apply(this, arguments);
3777 }
3778
3779 _createClass(SparkSqlFormatter, [{
3780 key: "tokenizer",
3781 value: function tokenizer() {
3782 return new _core_Tokenizer__WEBPACK_IMPORTED_MODULE_1__["default"]({
3783 reservedCommands: SparkSqlFormatter.reservedCommands,
3784 reservedBinaryCommands: SparkSqlFormatter.reservedBinaryCommands,
3785 reservedDependentClauses: SparkSqlFormatter.reservedDependentClauses,
3786 reservedJoinConditions: SparkSqlFormatter.reservedJoinConditions,
3787 reservedLogicalOperators: SparkSqlFormatter.reservedLogicalOperators,
3788 reservedKeywords: SparkSqlFormatter.reservedKeywords,
3789 stringTypes: SparkSqlFormatter.stringTypes,
3790 blockStart: SparkSqlFormatter.blockStart,
3791 blockEnd: SparkSqlFormatter.blockEnd,
3792 indexedPlaceholderTypes: SparkSqlFormatter.indexedPlaceholderTypes,
3793 namedPlaceholderTypes: SparkSqlFormatter.namedPlaceholderTypes,
3794 lineCommentTypes: SparkSqlFormatter.lineCommentTypes,
3795 operators: SparkSqlFormatter.operators
3796 });
3797 }
3798 }, {
3799 key: "tokenOverride",
3800 value: function tokenOverride(token) {
3801 // [WINDOW](...)
3802 if (_core_token__WEBPACK_IMPORTED_MODULE_2__.isToken.WINDOW(token) && this.tokenLookAhead().type === _core_token__WEBPACK_IMPORTED_MODULE_2__.TokenType.BLOCK_START) {
3803 // This is a function call, treat it as a reserved word
3804 return {
3805 type: _core_token__WEBPACK_IMPORTED_MODULE_2__.TokenType.RESERVED_KEYWORD,
3806 value: token.value
3807 };
3808 } // .[END]
3809
3810
3811 if (_core_token__WEBPACK_IMPORTED_MODULE_2__.isToken.END(token) && this.tokenLookBehind().value === '.') {
3812 // This is window().end (or similar) not CASE ... END
3813 return {
3814 type: _core_token__WEBPACK_IMPORTED_MODULE_2__.TokenType.WORD,
3815 value: token.value
3816 };
3817 } // TODO: deprecate this once ITEMS is merged with COLLECTION
3818
3819
3820 if (/ITEMS/i.test(token.value) && token.type === _core_token__WEBPACK_IMPORTED_MODULE_2__.TokenType.RESERVED_KEYWORD) {
3821 if (!(/COLLECTION/i.test(this.tokenLookBehind().value) && /TERMINATED/i.test(this.tokenLookAhead().value))) {
3822 // this is a word and not COLLECTION ITEMS
3823 return {
3824 type: _core_token__WEBPACK_IMPORTED_MODULE_2__.TokenType.WORD,
3825 value: token.value
3826 };
3827 }
3828 }
3829
3830 return token;
3831 }
3832 }]);
3833
3834 return SparkSqlFormatter;
3835}(_core_Formatter__WEBPACK_IMPORTED_MODULE_0__["default"]);
3836
3837
3838SparkSqlFormatter.reservedCommands = reservedCommands;
3839SparkSqlFormatter.reservedBinaryCommands = reservedBinaryCommands;
3840SparkSqlFormatter.reservedDependentClauses = reservedDependentClauses;
3841SparkSqlFormatter.reservedJoinConditions = ['ON', 'USING'];
3842SparkSqlFormatter.reservedLogicalOperators = ['AND', 'OR', 'XOR'];
3843SparkSqlFormatter.reservedKeywords = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.dedupe)([].concat(_toConsumableArray(Object.values(reservedFunctions).reduce(function (acc, arr) {
3844 return [].concat(_toConsumableArray(acc), _toConsumableArray(arr));
3845}, [])), reservedKeywords));
3846SparkSqlFormatter.stringTypes = ["\"\"", "''", '``', '{}'];
3847SparkSqlFormatter.blockStart = ['(', 'CASE'];
3848SparkSqlFormatter.blockEnd = [')', 'END'];
3849SparkSqlFormatter.indexedPlaceholderTypes = ['?'];
3850SparkSqlFormatter.namedPlaceholderTypes = ['$'];
3851SparkSqlFormatter.lineCommentTypes = ['--'];
3852SparkSqlFormatter.operators = ['<=>', '&&', '||', '==', '->'];
3853
3854/***/ }),
3855
3856/***/ "./src/languages/standardsql.formatter.ts":
3857/*!************************************************!*\
3858 !*** ./src/languages/standardsql.formatter.ts ***!
3859 \************************************************/
3860/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3861
3862__webpack_require__.r(__webpack_exports__);
3863/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3864/* harmony export */ "default": () => (/* binding */ StandardSqlFormatter)
3865/* harmony export */ });
3866/* harmony import */ var _core_Formatter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/Formatter */ "./src/core/Formatter.ts");
3867/* harmony import */ var _core_Tokenizer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/Tokenizer */ "./src/core/Tokenizer.ts");
3868/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils */ "./src/utils.ts");
3869function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
3870
3871function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
3872
3873function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
3874
3875function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
3876
3877function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
3878
3879function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
3880
3881function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
3882
3883function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
3884
3885function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
3886
3887function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
3888
3889function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
3890
3891
3892
3893
3894/**
3895 * Priority 5 (last)
3896 * Full list of reserved words
3897 * any words that are in a higher priority are removed
3898 */
3899// https://jakewheat.github.io/sql-overview/sql-2008-foundation-grammar.html#reserved-word
3900
3901var reservedKeywords = ['ABS', 'ALL', 'ALLOCATE', 'ALTER', 'ANY', 'ARE', 'ARRAY', 'AS', 'ASENSITIVE', 'ASYMMETRIC', 'AT', 'ATOMIC', 'AUTHORIZATION', 'AVG', 'BEGIN', 'BETWEEN', 'BIGINT', 'BINARY', 'BLOB', 'BOOLEAN', 'BOTH', 'BY', 'CALL', 'CALLED', 'CARDINALITY', 'CASCADED', 'CAST', 'CEIL', 'CEILING', 'CHAR', 'CHARACTER', 'CHARACTER_LENGTH', 'CHAR_LENGTH', 'CHECK', 'CLOB', 'CLOSE', 'COALESCE', 'COLLATE', 'COLLECT', 'COLUMN', 'COMMIT', 'CONDITION', 'CONNECT', 'CONSTRAINT', 'CONVERT', 'CORR', 'CORRESPONDING', 'COUNT', 'COVAR_POP', 'COVAR_SAMP', 'CREATE', 'CROSS', 'CUBE', 'CUME_DIST', 'CURRENT', 'CURRENT_CATALOG', 'CURRENT_DATE', 'CURRENT_DEFAULT_TRANSFORM_GROUP', 'CURRENT_PATH', 'CURRENT_ROLE', 'CURRENT_SCHEMA', 'CURRENT_TIME', 'CURRENT_TIMESTAMP', 'CURRENT_TRANSFORM_GROUP_FOR_TYPE', 'CURRENT_USER', 'CURSOR', 'CYCLE', 'DATE', 'DAY', 'DEALLOCATE', 'DEC', 'DECIMAL', 'DECLARE', 'DEFAULT', 'DELETE', 'DENSE_RANK', 'DEREF', 'DESCRIBE', 'DETERMINISTIC', 'DISCONNECT', 'DISTINCT', 'DOUBLE', 'DROP', 'DYNAMIC', 'EACH', 'ELEMENT', 'END-EXEC', 'ESCAPE', 'EVERY', 'EXCEPT', 'EXEC', 'EXECUTE', 'EXISTS', 'EXP', 'EXTERNAL', 'EXTRACT', 'FALSE', 'FETCH', 'FILTER', 'FLOAT', 'FLOOR', 'FOR', 'FOREIGN', 'FREE', 'FROM', 'FULL', 'FUNCTION', 'FUSION', 'GET', 'GLOBAL', 'GRANT', 'GROUP', 'GROUPING', 'HAVING', 'HOLD', 'HOUR', 'IDENTITY', 'IN', 'INDICATOR', 'INNER', 'INOUT', 'INSENSITIVE', 'INSERT', 'INT', 'INTEGER', 'INTERSECT', 'INTERSECTION', 'INTERVAL', 'INTO', 'IS', 'LANGUAGE', 'LARGE', 'LATERAL', 'LEADING', 'LEFT', 'LIKE', 'LIKE_REGEX', 'LN', 'LOCAL', 'LOCALTIME', 'LOCALTIMESTAMP', 'LOWER', 'MATCH', 'MAX', 'MEMBER', 'MERGE', 'METHOD', 'MIN', 'MINUTE', 'MOD', 'MODIFIES', 'MODULE', 'MONTH', 'MULTISET', 'NATIONAL', 'NATURAL', 'NCHAR', 'NCLOB', 'NEW', 'NO', 'NONE', 'NORMALIZE', 'NOT', 'NULL', 'NULLIF', 'NUMERIC', 'OCCURRENCES_REGEX', 'OCTET_LENGTH', 'OF', 'OLD', 'ON DELETE', 'ON UPDATE', 'ONLY', 'OPEN', 'ORDER', 'OUT', 'OUTER', 'OVER', 'OVERLAPS', 'OVERLAY', 'PARAMETER', 'PARTITION', 'PERCENTILE_CONT', 'PERCENTILE_DISC', 'PERCENT_RANK', 'POSITION', 'POSITION_REGEX', 'POWER', 'PRECISION', 'PREPARE', 'PRIMARY', 'PROCEDURE', 'RANGE', 'RANK', 'READS', 'REAL', 'RECURSIVE', 'REF', 'REFERENCES', 'REFERENCING', 'REGR_AVGX', 'REGR_AVGY', 'REGR_COUNT', 'REGR_INTERCEPT', 'REGR_R2', 'REGR_SLOPE', 'REGR_SXX', 'REGR_SXY', 'REGR_SYY', 'RELEASE', 'RESULT', 'RETURN', 'RETURNS', 'REVOKE', 'RIGHT', 'ROLLBACK', 'ROLLUP', 'ROW', 'ROWS', 'ROW_NUMBER', 'SAVEPOINT', 'SCOPE', 'SCROLL', 'SEARCH', 'SECOND', 'SELECT', 'SENSITIVE', 'SESSION_USER', 'SET', 'SIMILAR', 'SMALLINT', 'SOME', 'SPECIFIC', 'SPECIFICTYPE', 'SQL', 'SQLEXCEPTION', 'SQLSTATE', 'SQLWARNING', 'SQRT', 'START', 'STATIC', 'STDDEV_POP', 'STDDEV_SAMP', 'SUBMULTISET', 'SUBSTRING', 'SUBSTRING_REGEX', 'SUM', 'SYMMETRIC', 'SYSTEM', 'SYSTEM_USER', 'TABLE', 'TABLESAMPLE', 'THEN', 'TIME', 'TIMESTAMP', 'TIMEZONE_HOUR', 'TIMEZONE_MINUTE', 'TO', 'TRAILING', 'TRANSLATE', 'TRANSLATE_REGEX', 'TRANSLATION', 'TREAT', 'TRIGGER', 'TRIM', 'TRUE', 'UESCAPE', 'UNION', 'UNIQUE', 'UNKNOWN', 'UNNEST', 'UPDATE', 'UPPER', 'USER', 'VALUE', 'VALUES', 'VARBINARY', 'VARCHAR', 'VARYING', 'VAR_POP', 'VAR_SAMP', 'WHENEVER', 'WIDTH_BUCKET', 'WINDOW', 'WITHIN', 'WITHOUT', 'YEAR'];
3902/**
3903 * Priority 1 (first)
3904 * keywords that begin a new statement
3905 * will begin new indented block
3906 */
3907
3908var reservedCommands = ['ADD', 'ALTER COLUMN', 'ALTER TABLE', 'CREATE TABLE', 'DROP TABLE', 'END', 'FETCH FIRST', 'FETCH NEXT', 'FETCH PRIOR', 'FETCH LAST', 'FETCH ABSOLUTE', 'FETCH RELATIVE', 'FROM', 'GROUP BY', 'HAVING', 'INSERT INTO', 'LIMIT', 'OFFSET', 'ORDER BY', 'SELECT', 'SET SCHEMA', 'SET', 'UPDATE', 'VALUES', 'WHERE', 'WITH'];
3909/**
3910 * Priority 2
3911 * commands that operate on two tables or subqueries
3912 * two main categories: joins and boolean set operators
3913 */
3914
3915var reservedBinaryCommands = [// set booleans
3916'INTERSECT', 'INTERSECT ALL', 'INTERSECT DISTINCT', 'UNION', 'UNION ALL', 'UNION DISTINCT', 'EXCEPT', 'EXCEPT ALL', 'EXCEPT DISTINCT', // joins
3917'JOIN', 'INNER JOIN', 'LEFT JOIN', 'LEFT OUTER JOIN', 'RIGHT JOIN', 'RIGHT OUTER JOIN', 'FULL JOIN', 'FULL OUTER JOIN', 'CROSS JOIN', 'NATURAL JOIN'];
3918/**
3919 * Priority 3
3920 * keywords that follow a previous Statement, must be attached to subsequent data
3921 * can be fully inline or on newline with optional indent
3922 */
3923
3924var reservedDependentClauses = ['WHEN', 'ELSE'];
3925
3926var StandardSqlFormatter = /*#__PURE__*/function (_Formatter) {
3927 _inherits(StandardSqlFormatter, _Formatter);
3928
3929 var _super = _createSuper(StandardSqlFormatter);
3930
3931 function StandardSqlFormatter() {
3932 _classCallCheck(this, StandardSqlFormatter);
3933
3934 return _super.apply(this, arguments);
3935 }
3936
3937 _createClass(StandardSqlFormatter, [{
3938 key: "tokenizer",
3939 value: function tokenizer() {
3940 return new _core_Tokenizer__WEBPACK_IMPORTED_MODULE_1__["default"]({
3941 reservedCommands: StandardSqlFormatter.reservedCommands,
3942 reservedBinaryCommands: StandardSqlFormatter.reservedBinaryCommands,
3943 reservedDependentClauses: StandardSqlFormatter.reservedDependentClauses,
3944 reservedJoinConditions: StandardSqlFormatter.reservedJoinConditions,
3945 reservedLogicalOperators: StandardSqlFormatter.reservedLogicalOperators,
3946 reservedKeywords: StandardSqlFormatter.reservedKeywords,
3947 stringTypes: StandardSqlFormatter.stringTypes,
3948 blockStart: StandardSqlFormatter.blockStart,
3949 blockEnd: StandardSqlFormatter.blockEnd,
3950 indexedPlaceholderTypes: StandardSqlFormatter.indexedPlaceholderTypes,
3951 namedPlaceholderTypes: StandardSqlFormatter.namedPlaceholderTypes,
3952 lineCommentTypes: StandardSqlFormatter.lineCommentTypes
3953 });
3954 }
3955 }]);
3956
3957 return StandardSqlFormatter;
3958}(_core_Formatter__WEBPACK_IMPORTED_MODULE_0__["default"]);
3959
3960
3961StandardSqlFormatter.reservedCommands = reservedCommands;
3962StandardSqlFormatter.reservedBinaryCommands = reservedBinaryCommands;
3963StandardSqlFormatter.reservedDependentClauses = reservedDependentClauses;
3964StandardSqlFormatter.reservedJoinConditions = ['ON', 'USING'];
3965StandardSqlFormatter.reservedLogicalOperators = ['AND', 'OR'];
3966StandardSqlFormatter.reservedKeywords = (0,_utils__WEBPACK_IMPORTED_MODULE_2__.dedupe)(reservedKeywords);
3967StandardSqlFormatter.stringTypes = ["\"\"", "''", '``'];
3968StandardSqlFormatter.blockStart = ['(', 'CASE'];
3969StandardSqlFormatter.blockEnd = [')', 'END'];
3970StandardSqlFormatter.indexedPlaceholderTypes = ['?'];
3971StandardSqlFormatter.namedPlaceholderTypes = [];
3972StandardSqlFormatter.lineCommentTypes = ['--'];
3973StandardSqlFormatter.operators = [];
3974
3975/***/ }),
3976
3977/***/ "./src/languages/tsql.formatter.ts":
3978/*!*****************************************!*\
3979 !*** ./src/languages/tsql.formatter.ts ***!
3980 \*****************************************/
3981/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3982
3983__webpack_require__.r(__webpack_exports__);
3984/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3985/* harmony export */ "default": () => (/* binding */ TSqlFormatter)
3986/* harmony export */ });
3987/* harmony import */ var _core_Formatter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/Formatter */ "./src/core/Formatter.ts");
3988/* harmony import */ var _core_Tokenizer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/Tokenizer */ "./src/core/Tokenizer.ts");
3989/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils */ "./src/utils.ts");
3990function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
3991
3992function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
3993
3994function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3995
3996function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
3997
3998function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
3999
4000function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
4001
4002function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
4003
4004function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
4005
4006function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
4007
4008function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
4009
4010function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
4011
4012function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
4013
4014function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
4015
4016function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
4017
4018function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
4019
4020function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
4021
4022function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
4023
4024
4025
4026
4027/**
4028 * Priority 5 (last)
4029 * Full list of reserved functions
4030 * distinct from Keywords due to interaction with parentheses
4031 */
4032// https://docs.microsoft.com/en-us/sql/t-sql/functions/functions?view=sql-server-ver15
4033
4034var reservedFunctions = {
4035 aggregate: ['APPROX_COUNT_DISTINCT', 'AVG', 'CHECKSUM_AGG', 'COUNT', 'COUNT_BIG', 'GROUPING', 'GROUPING_ID', 'MAX', 'MIN', 'STDEV', 'STDEVP', 'SUM', 'VAR', 'VARP'],
4036 analytic: ['CUME_DIST', 'FIRST_VALUE', 'LAG', 'LAST_VALUE', 'LEAD', 'PERCENTILE_CONT', 'PERCENTILE_DISC', 'PERCENT_RANK', 'Collation - COLLATIONPROPERTY', 'Collation - TERTIARY_WEIGHTS'],
4037 configuration: ['@@DBTS', '@@LANGID', '@@LANGUAGE', '@@LOCK_TIMEOUT', '@@MAX_CONNECTIONS', '@@MAX_PRECISION', '@@NESTLEVEL', '@@OPTIONS', '@@REMSERVER', '@@SERVERNAME', '@@SERVICENAME', '@@SPID', '@@TEXTSIZE', '@@VERSION'],
4038 conversion: ['CAST', 'CONVERT', 'PARSE', 'TRY_CAST', 'TRY_CONVERT', 'TRY_PARSE'],
4039 cryptographic: ['ASYMKEY_ID', 'ASYMKEYPROPERTY', 'CERTPROPERTY', 'CERT_ID', 'CRYPT_GEN_RANDOM', 'DECRYPTBYASYMKEY', 'DECRYPTBYCERT', 'DECRYPTBYKEY', 'DECRYPTBYKEYAUTOASYMKEY', 'DECRYPTBYKEYAUTOCERT', 'DECRYPTBYPASSPHRASE', 'ENCRYPTBYASYMKEY', 'ENCRYPTBYCERT', 'ENCRYPTBYKEY', 'ENCRYPTBYPASSPHRASE', 'HASHBYTES', 'IS_OBJECTSIGNED', 'KEY_GUID', 'KEY_ID', 'KEY_NAME', 'SIGNBYASYMKEY', 'SIGNBYCERT', 'SYMKEYPROPERTY', 'VERIFYSIGNEDBYCERT', 'VERIFYSIGNEDBYASYMKEY'],
4040 cursor: ['@@CURSOR_ROWS', '@@FETCH_STATUS', 'CURSOR_STATUS'],
4041 dataType: ['DATALENGTH', 'IDENT_CURRENT', 'IDENT_INCR', 'IDENT_SEED', 'IDENTITY', 'SQL_VARIANT_PROPERTY'],
4042 datetime: ['@@DATEFIRST', 'CURRENT_TIMESTAMP', 'CURRENT_TIMEZONE', 'CURRENT_TIMEZONE_ID', 'DATEADD', 'DATEDIFF', 'DATEDIFF_BIG', 'DATEFROMPARTS', 'DATENAME', 'DATEPART', 'DATETIME2FROMPARTS', 'DATETIMEFROMPARTS', 'DATETIMEOFFSETFROMPARTS', 'DAY', 'EOMONTH', 'GETDATE', 'GETUTCDATE', 'ISDATE', 'MONTH', 'SMALLDATETIMEFROMPARTS', 'SWITCHOFFSET', 'SYSDATETIME', 'SYSDATETIMEOFFSET', 'SYSUTCDATETIME', 'TIMEFROMPARTS', 'TODATETIMEOFFSET', 'YEAR', 'JSON', 'ISJSON', 'JSON_VALUE', 'JSON_QUERY', 'JSON_MODIFY'],
4043 mathematical: ['ABS', 'ACOS', 'ASIN', 'ATAN', 'ATN2', 'CEILING', 'COS', 'COT', 'DEGREES', 'EXP', 'FLOOR', 'LOG', 'LOG10', 'PI', 'POWER', 'RADIANS', 'RAND', 'ROUND', 'SIGN', 'SIN', 'SQRT', 'SQUARE', 'TAN', 'CHOOSE', 'GREATEST', 'IIF', 'LEAST'],
4044 metadata: ['@@PROCID', 'APP_NAME', 'APPLOCK_MODE', 'APPLOCK_TEST', 'ASSEMBLYPROPERTY', 'COL_LENGTH', 'COL_NAME', 'COLUMNPROPERTY', 'DATABASEPROPERTYEX', 'DB_ID', 'DB_NAME', 'FILE_ID', 'FILE_IDEX', 'FILE_NAME', 'FILEGROUP_ID', 'FILEGROUP_NAME', 'FILEGROUPPROPERTY', 'FILEPROPERTY', 'FILEPROPERTYEX', 'FULLTEXTCATALOGPROPERTY', 'FULLTEXTSERVICEPROPERTY', 'INDEX_COL', 'INDEXKEY_PROPERTY', 'INDEXPROPERTY', 'NEXT VALUE FOR', 'OBJECT_DEFINITION', 'OBJECT_ID', 'OBJECT_NAME', 'OBJECT_SCHEMA_NAME', 'OBJECTPROPERTY', 'OBJECTPROPERTYEX', 'ORIGINAL_DB_NAME', 'PARSENAME', 'SCHEMA_ID', 'SCHEMA_NAME', 'SCOPE_IDENTITY', 'SERVERPROPERTY', 'STATS_DATE', 'TYPE_ID', 'TYPE_NAME', 'TYPEPROPERTY'],
4045 ranking: ['DENSE_RANK', 'NTILE', 'RANK', 'ROW_NUMBER', 'PUBLISHINGSERVERNAME'],
4046 security: ['CERTENCODED', 'CERTPRIVATEKEY', 'CURRENT_USER', 'DATABASE_PRINCIPAL_ID', 'HAS_DBACCESS', 'HAS_PERMS_BY_NAME', 'IS_MEMBER', 'IS_ROLEMEMBER', 'IS_SRVROLEMEMBER', 'LOGINPROPERTY', 'ORIGINAL_LOGIN', 'PERMISSIONS', 'PWDENCRYPT', 'PWDCOMPARE', 'SESSION_USER', 'SESSIONPROPERTY', 'SUSER_ID', 'SUSER_NAME', 'SUSER_SID', 'SUSER_SNAME', 'SYSTEM_USER', 'USER', 'USER_ID', 'USER_NAME'],
4047 string: ['ASCII', 'CHAR', 'CHARINDEX', 'CONCAT', 'CONCAT_WS', 'DIFFERENCE', 'FORMAT', 'LEFT', 'LEN', 'LOWER', 'LTRIM', 'NCHAR', 'PATINDEX', 'QUOTENAME', 'REPLACE', 'REPLICATE', 'REVERSE', 'RIGHT', 'RTRIM', 'SOUNDEX', 'SPACE', 'STR', 'STRING_AGG', 'STRING_ESCAPE', 'STUFF', 'SUBSTRING', 'TRANSLATE', 'TRIM', 'UNICODE', 'UPPER'],
4048 system: ['$PARTITION', '@@ERROR', '@@IDENTITY', '@@PACK_RECEIVED', '@@ROWCOUNT', '@@TRANCOUNT', 'BINARY_CHECKSUM', 'CHECKSUM', 'COMPRESS', 'CONNECTIONPROPERTY', 'CONTEXT_INFO', 'CURRENT_REQUEST_ID', 'CURRENT_TRANSACTION_ID', 'DECOMPRESS', 'ERROR_LINE', 'ERROR_MESSAGE', 'ERROR_NUMBER', 'ERROR_PROCEDURE', 'ERROR_SEVERITY', 'ERROR_STATE', 'FORMATMESSAGE', 'GET_FILESTREAM_TRANSACTION_CONTEXT', 'GETANSINULL', 'HOST_ID', 'HOST_NAME', 'ISNULL', 'ISNUMERIC', 'MIN_ACTIVE_ROWVERSION', 'NEWID', 'NEWSEQUENTIALID', 'ROWCOUNT_BIG', 'SESSION_CONTEXT', 'XACT_STATE'],
4049 statistical: ['@@CONNECTIONS', '@@CPU_BUSY', '@@IDLE', '@@IO_BUSY', '@@PACK_SENT', '@@PACKET_ERRORS', '@@TIMETICKS', '@@TOTAL_ERRORS', '@@TOTAL_READ', '@@TOTAL_WRITE', 'TEXTPTR', 'TEXTVALID'],
4050 trigger: ['COLUMNS_UPDATED', 'EVENTDATA', 'TRIGGER_NESTLEVEL', 'UPDATE']
4051}; // TODO: dedupe these reserved word lists
4052// https://docs.microsoft.com/en-us/sql/t-sql/language-elements/reserved-keywords-transact-sql?view=sql-server-ver15
4053
4054/**
4055 * Priority 5 (last)
4056 * Full list of reserved words
4057 * any words that are in a higher priority are removed
4058 */
4059
4060var reservedKeywords = {
4061 standard: ['ADD', 'ALL', 'ALTER', 'AND', 'ANY', 'AS', 'ASC', 'AUTHORIZATION', 'BACKUP', 'BEGIN', 'BETWEEN', 'BREAK', 'BROWSE', 'BULK', 'BY', 'CASCADE', 'CASE', 'CHECK', 'CHECKPOINT', 'CLOSE', 'CLUSTERED', 'COALESCE', 'COLLATE', 'COLUMN', 'COMMIT', 'COMPUTE', 'CONSTRAINT', 'CONTAINS', 'CONTAINSTABLE', 'CONTINUE', 'CONVERT', 'CREATE', 'CROSS', 'CURRENT', 'CURRENT_DATE', 'CURRENT_TIME', 'CURRENT_TIMESTAMP', 'CURRENT_USER', 'CURSOR', 'DATABASE', 'DBCC', 'DEALLOCATE', 'DECLARE', 'DEFAULT', 'DELETE', 'DENY', 'DESC', 'DISK', 'DISTINCT', 'DISTRIBUTED', 'DOUBLE', 'DROP', 'DUMP', 'ERRLVL', 'ESCAPE', 'EXEC', 'EXECUTE', 'EXISTS', 'EXIT', 'EXTERNAL', 'FETCH', 'FILE', 'FILLFACTOR', 'FOR', 'FOREIGN', 'FREETEXT', 'FREETEXTTABLE', 'FROM', 'FULL', 'FUNCTION', 'GOTO', 'GRANT', 'GROUP', 'HAVING', 'HOLDLOCK', 'IDENTITY', 'IDENTITYCOL', 'IDENTITY_INSERT', 'IF', 'IN', 'INDEX', 'INNER', 'INSERT', 'INTERSECT', 'INTO', 'IS', 'JOIN', 'KEY', 'KILL', 'LEFT', 'LIKE', 'LINENO', 'LOAD', 'MERGE', 'NATIONAL', 'NOCHECK', 'NONCLUSTERED', 'NOT', 'NULL', 'NULLIF', 'OF', 'OFF', 'OFFSETS', 'ON DELETE', 'ON UPDATE', 'OPEN', 'OPENDATASOURCE', 'OPENQUERY', 'OPENROWSET', 'OPENXML', 'OPTION', 'OR', 'ORDER', 'OUTER', 'OVER', 'PERCENT', 'PIVOT', 'PLAN', 'PRECISION', 'PRIMARY', 'PRINT', 'PROC', 'PROCEDURE', 'PUBLIC', 'RAISERROR', 'READ', 'READTEXT', 'RECONFIGURE', 'REFERENCES', 'REPLICATION', 'RESTORE', 'RESTRICT', 'RETURN', 'REVERT', 'REVOKE', 'RIGHT', 'ROLLBACK', 'ROWCOUNT', 'ROWGUIDCOL', 'RULE', 'SAVE', 'SCHEMA', 'SECURITYAUDIT', 'SELECT', 'SEMANTICKEYPHRASETABLE', 'SEMANTICSIMILARITYDETAILSTABLE', 'SEMANTICSIMILARITYTABLE', 'SESSION_USER', 'SET', 'SETUSER', 'SHUTDOWN', 'SOME', 'STATISTICS', 'SYSTEM_USER', 'TABLE', 'TABLESAMPLE', 'TEXTSIZE', 'THEN', 'TO', 'TOP', 'TRAN', 'TRANSACTION', 'TRIGGER', 'TRUNCATE', 'TRY_CONVERT', 'TSEQUAL', 'UNION', 'UNIQUE', 'UNPIVOT', 'UPDATE', 'UPDATETEXT', 'USE', 'USER', 'VALUES', 'VARYING', 'VIEW', 'WAITFOR', 'WHERE', 'WHILE', 'WITH', 'WITHIN GROUP', 'WRITETEXT'],
4062 odbc: ['ABSOLUTE', 'ACTION', 'ADA', 'ADD', 'ALL', 'ALLOCATE', 'ALTER', 'AND', 'ANY', 'ARE', 'AS', 'ASC', 'ASSERTION', 'AT', 'AUTHORIZATION', 'AVG', 'BEGIN', 'BETWEEN', 'BIT', 'BIT_LENGTH', 'BOTH', 'BY', 'CASCADE', 'CASCADED', 'CASE', 'CAST', 'CATALOG', 'CHAR', 'CHARACTER', 'CHARACTER_LENGTH', 'CHAR_LENGTH', 'CHECK', 'CLOSE', 'COALESCE', 'COLLATE', 'COLLATION', 'COLUMN', 'COMMIT', 'CONNECT', 'CONNECTION', 'CONSTRAINT', 'CONSTRAINTS', 'CONTINUE', 'CONVERT', 'CORRESPONDING', 'COUNT', 'CREATE', 'CROSS', 'CURRENT', 'CURRENT_DATE', 'CURRENT_TIME', 'CURRENT_TIMESTAMP', 'CURRENT_USER', 'CURSOR', 'DATE', 'DAY', 'DEALLOCATE', 'DEC', 'DECIMAL', 'DECLARE', 'DEFAULT', 'DEFERRABLE', 'DEFERRED', 'DELETE', 'DESC', 'DESCRIBE', 'DESCRIPTOR', 'DIAGNOSTICS', 'DISCONNECT', 'DISTINCT', 'DOMAIN', 'DOUBLE', 'DROP', 'END-EXEC', 'ESCAPE', 'EXCEPTION', 'EXEC', 'EXECUTE', 'EXISTS', 'EXTERNAL', 'EXTRACT', 'FALSE', 'FETCH', 'FIRST', 'FLOAT', 'FOR', 'FOREIGN', 'FORTRAN', 'FOUND', 'FROM', 'FULL', 'GET', 'GLOBAL', 'GO', 'GOTO', 'GRANT', 'GROUP', 'HAVING', 'HOUR', 'IDENTITY', 'IMMEDIATE', 'IN', 'INCLUDE', 'INDEX', 'INDICATOR', 'INITIALLY', 'INNER', 'INPUT', 'INSENSITIVE', 'INSERT', 'INT', 'INTEGER', 'INTERSECT', 'INTERVAL', 'INTO', 'IS', 'ISOLATION', 'JOIN', 'KEY', 'LANGUAGE', 'LAST', 'LEADING', 'LEFT', 'LEVEL', 'LIKE', 'LOCAL', 'LOWER', 'MATCH', 'MAX', 'MIN', 'MINUTE', 'MODULE', 'MONTH', 'NAMES', 'NATIONAL', 'NATURAL', 'NCHAR', 'NEXT', 'NO', 'NONE', 'NOT', 'NULL', 'NULLIF', 'NUMERIC', 'OCTET_LENGTH', 'OF', 'ONLY', 'OPEN', 'OPTION', 'OR', 'ORDER', 'OUTER', 'OUTPUT', 'OVERLAPS', 'PAD', 'PARTIAL', 'PASCAL', 'POSITION', 'PRECISION', 'PREPARE', 'PRESERVE', 'PRIMARY', 'PRIOR', 'PRIVILEGES', 'PROCEDURE', 'PUBLIC', 'READ', 'REAL', 'REFERENCES', 'RELATIVE', 'RESTRICT', 'REVOKE', 'RIGHT', 'ROLLBACK', 'ROWS', 'SCHEMA', 'SCROLL', 'SECOND', 'SECTION', 'SELECT', 'SESSION', 'SESSION_USER', 'SET', 'SIZE', 'SMALLINT', 'SOME', 'SPACE', 'SQL', 'SQLCA', 'SQLCODE', 'SQLERROR', 'SQLSTATE', 'SQLWARNING', 'SUBSTRING', 'SUM', 'SYSTEM_USER', 'TABLE', 'TEMPORARY', 'TIME', 'TIMESTAMP', 'TIMEZONE_HOUR', 'TIMEZONE_MINUTE', 'TO', 'TRAILING', 'TRANSACTION', 'TRANSLATE', 'TRANSLATION', 'TRIM', 'TRUE', 'UNION', 'UNIQUE', 'UNKNOWN', 'UPDATE', 'UPPER', 'USAGE', 'USER', 'VALUE', 'VALUES', 'VARCHAR', 'VARYING', 'VIEW', 'WHENEVER', 'WHERE', 'WITH', 'WORK', 'WRITE', 'YEAR', 'ZONE'],
4063 future: ['ABSOLUTE', 'ACTION', 'ADMIN', 'AFTER', 'AGGREGATE', 'ALIAS', 'ALLOCATE', 'ARE', 'ARRAY', 'ASENSITIVE', 'ASSERTION', 'ASYMMETRIC', 'AT', 'ATOMIC', 'BEFORE', 'BINARY', 'BIT', 'BLOB', 'BOOLEAN', 'BOTH', 'BREADTH', 'CALL', 'CALLED', 'CARDINALITY', 'CASCADED', 'CAST', 'CATALOG', 'CHAR', 'CHARACTER', 'CLASS', 'CLOB', 'COLLATION', 'COLLECT', 'COMPLETION', 'CONDITION', 'CONNECT', 'CONNECTION', 'CONSTRAINTS', 'CONSTRUCTOR', 'CORR', 'CORRESPONDING', 'COVAR_POP', 'COVAR_SAMP', 'CUBE', 'CUME_DIST', 'CURRENT_CATALOG', 'CURRENT_DEFAULT_TRANSFORM_GROUP', 'CURRENT_PATH', 'CURRENT_ROLE', 'CURRENT_SCHEMA', 'CURRENT_TRANSFORM_GROUP_FOR_TYPE', 'CYCLE', 'DATA', 'DATE', 'DAY', 'DEC', 'DECIMAL', 'DEFERRABLE', 'DEFERRED', 'DEPTH', 'DEREF', 'DESCRIBE', 'DESCRIPTOR', 'DESTROY', 'DESTRUCTOR', 'DETERMINISTIC', 'DIAGNOSTICS', 'DICTIONARY', 'DISCONNECT', 'DOMAIN', 'DYNAMIC', 'EACH', 'ELEMENT', 'END-EXEC', 'EQUALS', 'EVERY', 'FALSE', 'FILTER', 'FIRST', 'FLOAT', 'FOUND', 'FREE', 'FULLTEXTTABLE', 'FUSION', 'GENERAL', 'GET', 'GLOBAL', 'GO', 'GROUPING', 'HOLD', 'HOST', 'HOUR', 'IGNORE', 'IMMEDIATE', 'INDICATOR', 'INITIALIZE', 'INITIALLY', 'INOUT', 'INPUT', 'INT', 'INTEGER', 'INTERSECTION', 'INTERVAL', 'ISOLATION', 'ITERATE', 'LANGUAGE', 'LARGE', 'LAST', 'LATERAL', 'LEADING', 'LESS', 'LEVEL', 'LIKE_REGEX', 'LIMIT', 'LN', 'LOCAL', 'LOCALTIME', 'LOCALTIMESTAMP', 'LOCATOR', 'MAP', 'MATCH', 'MEMBER', 'METHOD', 'MINUTE', 'MOD', 'MODIFIES', 'MODIFY', 'MODULE', 'MONTH', 'MULTISET', 'NAMES', 'NATURAL', 'NCHAR', 'NCLOB', 'NEW', 'NEXT', 'NO', 'NONE', 'NORMALIZE', 'NUMERIC', 'OBJECT', 'OCCURRENCES_REGEX', 'OLD', 'ONLY', 'OPERATION', 'ORDINALITY', 'OUT', 'OUTPUT', 'OVERLAY', 'PAD', 'PARAMETER', 'PARAMETERS', 'PARTIAL', 'PARTITION', 'PATH', 'PERCENTILE_CONT', 'PERCENTILE_DISC', 'PERCENT_RANK', 'POSITION_REGEX', 'POSTFIX', 'PREFIX', 'PREORDER', 'PREPARE', 'PRESERVE', 'PRIOR', 'PRIVILEGES', 'RANGE', 'READS', 'REAL', 'RECURSIVE', 'REF', 'REFERENCING', 'REGR_AVGX', 'REGR_AVGY', 'REGR_COUNT', 'REGR_INTERCEPT', 'REGR_R2', 'REGR_SLOPE', 'REGR_SXX', 'REGR_SXY', 'REGR_SYY', 'RELATIVE', 'RELEASE', 'RESULT', 'RETURNS', 'ROLE', 'ROLLUP', 'ROUTINE', 'ROW', 'ROWS', 'SAVEPOINT', 'SCOPE', 'SCROLL', 'SEARCH', 'SECOND', 'SECTION', 'SENSITIVE', 'SEQUENCE', 'SESSION', 'SETS', 'SIMILAR', 'SIZE', 'SMALLINT', 'SPACE', 'SPECIFIC', 'SPECIFICTYPE', 'SQL', 'SQLEXCEPTION', 'SQLSTATE', 'SQLWARNING', 'START', 'STATE', 'STATEMENT', 'STATIC', 'STDDEV_POP', 'STDDEV_SAMP', 'STRUCTURE', 'SUBMULTISET', 'SUBSTRING_REGEX', 'SYMMETRIC', 'SYSTEM', 'TEMPORARY', 'TERMINATE', 'THAN', 'TIME', 'TIMESTAMP', 'TIMEZONE_HOUR', 'TIMEZONE_MINUTE', 'TRAILING', 'TRANSLATE_REGEX', 'TRANSLATION', 'TREAT', 'TRUE', 'UESCAPE', 'UNDER', 'UNKNOWN', 'UNNEST', 'USAGE', 'USING', 'VALUE', 'VARCHAR', 'VARIABLE', 'VAR_POP', 'VAR_SAMP', 'WHENEVER', 'WIDTH_BUCKET', 'WINDOW', 'WITHIN', 'WITHOUT', 'WORK', 'WRITE', 'XMLAGG', 'XMLATTRIBUTES', 'XMLBINARY', 'XMLCAST', 'XMLCOMMENT', 'XMLCONCAT', 'XMLDOCUMENT', 'XMLELEMENT', 'XMLEXISTS', 'XMLFOREST', 'XMLITERATE', 'XMLNAMESPACES', 'XMLPARSE', 'XMLPI', 'XMLQUERY', 'XMLSERIALIZE', 'XMLTABLE', 'XMLTEXT', 'XMLVALIDATE', 'YEAR', 'ZONE']
4064};
4065/**
4066 * Priority 1 (first)
4067 * keywords that begin a new statement
4068 * will begin new indented block
4069 */
4070// https://docs.microsoft.com/en-us/sql/t-sql/statements/statements?view=sql-server-ver15
4071
4072var reservedCommands = ['ADD SENSITIVITY CLASSIFICATION', 'ADD SIGNATURE', 'AGGREGATE', 'ANSI_DEFAULTS', 'ANSI_NULLS', 'ANSI_NULL_DFLT_OFF', 'ANSI_NULL_DFLT_ON', 'ANSI_PADDING', 'ANSI_WARNINGS', 'APPLICATION ROLE', 'ARITHABORT', 'ARITHIGNORE', 'ASSEMBLY', 'ASYMMETRIC KEY', 'AUTHORIZATION', 'AVAILABILITY GROUP', 'BACKUP', 'BACKUP CERTIFICATE', 'BACKUP MASTER KEY', 'BACKUP SERVICE MASTER KEY', 'BEGIN CONVERSATION TIMER', 'BEGIN DIALOG CONVERSATION', 'BROKER PRIORITY', 'BULK INSERT', 'CERTIFICATE', 'CLOSE MASTER KEY', 'CLOSE SYMMETRIC KEY', 'COLLATE', 'COLUMN ENCRYPTION KEY', 'COLUMN MASTER KEY', 'COLUMNSTORE INDEX', 'CONCAT_NULL_YIELDS_NULL', 'CONTEXT_INFO', 'CONTRACT', 'CREDENTIAL', 'CRYPTOGRAPHIC PROVIDER', 'CURSOR_CLOSE_ON_COMMIT', 'DATABASE', 'DATABASE AUDIT SPECIFICATION', 'DATABASE ENCRYPTION KEY', 'DATABASE HADR', 'DATABASE SCOPED CONFIGURATION', 'DATABASE SCOPED CREDENTIAL', 'DATABASE SET', 'DATEFIRST', 'DATEFORMAT', 'DEADLOCK_PRIORITY', 'DEFAULT', 'DELETE', 'DENY', 'DENY XML', 'DISABLE TRIGGER', 'ENABLE TRIGGER', 'END CONVERSATION', 'ENDPOINT', 'EVENT NOTIFICATION', 'EVENT SESSION', 'EXECUTE AS', 'EXTERNAL DATA SOURCE', 'EXTERNAL FILE FORMAT', 'EXTERNAL LANGUAGE', 'EXTERNAL LIBRARY', 'EXTERNAL RESOURCE POOL', 'EXTERNAL TABLE', 'FIPS_FLAGGER', 'FMTONLY', 'FORCEPLAN', 'FULLTEXT CATALOG', 'FULLTEXT INDEX', 'FULLTEXT STOPLIST', 'FUNCTION', 'GET CONVERSATION GROUP', 'GET_TRANSMISSION_STATUS', 'GRANT', 'GRANT XML', 'IDENTITY_INSERT', 'IMPLICIT_TRANSACTIONS', 'INDEX', 'INSERT', 'LANGUAGE', 'LOCK_TIMEOUT', 'LOGIN', 'MASTER KEY', 'MERGE', 'MESSAGE TYPE', 'MOVE CONVERSATION', 'NOCOUNT', 'NOEXEC', 'NUMERIC_ROUNDABORT', 'OFFSETS', 'OPEN MASTER KEY', 'OPEN SYMMETRIC KEY', 'PARSEONLY', 'PARTITION FUNCTION', 'PARTITION SCHEME', 'PROCEDURE', 'QUERY_GOVERNOR_COST_LIMIT', 'QUEUE', 'QUOTED_IDENTIFIER', 'RECEIVE', 'REMOTE SERVICE BINDING', 'REMOTE_PROC_TRANSACTIONS', 'RESOURCE GOVERNOR', 'RESOURCE POOL', 'RESTORE', 'RESTORE FILELISTONLY', 'RESTORE HEADERONLY', 'RESTORE LABELONLY', 'RESTORE MASTER KEY', 'RESTORE REWINDONLY', 'RESTORE SERVICE MASTER KEY', 'RESTORE VERIFYONLY', 'REVERT', 'REVOKE', 'REVOKE XML', 'ROLE', 'ROUTE', 'ROWCOUNT', 'RULE', 'SCHEMA', 'SEARCH PROPERTY LIST', 'SECURITY POLICY', 'SELECTIVE XML INDEX', 'SEND', 'SENSITIVITY CLASSIFICATION', 'SEQUENCE', 'SERVER AUDIT', 'SERVER AUDIT SPECIFICATION', 'SERVER CONFIGURATION', 'SERVER ROLE', 'SERVICE', 'SERVICE MASTER KEY', 'SET', 'SETUSER', 'SHOWPLAN_ALL', 'SHOWPLAN_TEXT', 'SHOWPLAN_XML', 'SIGNATURE', 'SPATIAL INDEX', 'STATISTICS', 'STATISTICS IO', 'STATISTICS PROFILE', 'STATISTICS TIME', 'STATISTICS XML', 'SYMMETRIC KEY', 'SYNONYM', 'TABLE', 'TABLE IDENTITY', 'TEXTSIZE', 'TRANSACTION ISOLATION LEVEL', 'TRIGGER', 'TRUNCATE TABLE', 'TYPE', 'UPDATE', 'UPDATE STATISTICS', 'USER', 'VIEW', 'WORKLOAD GROUP', 'XACT_ABORT', 'XML INDEX', 'XML SCHEMA COLLECTION', // other
4073'ALTER COLUMN', 'ALTER TABLE', 'CREATE TABLE', 'FROM', 'GROUP BY', 'HAVING', 'INSERT INTO', 'DROP TABLE', 'SET SCHEMA', 'LIMIT', 'OFFSET', 'ORDER BY', 'SELECT', 'VALUES', 'WHERE', 'WITH'];
4074/**
4075 * Priority 2
4076 * commands that operate on two tables or subqueries
4077 * two main categories: joins and boolean set operators
4078 */
4079
4080var reservedBinaryCommands = [// set booleans
4081'INTERSECT', 'INTERSECT ALL', 'INTERSECT DISTINCT', 'UNION', 'UNION ALL', 'UNION DISTINCT', 'EXCEPT', 'EXCEPT ALL', 'EXCEPT DISTINCT', 'MINUS', 'MINUS ALL', 'MINUS DISTINCT', // joins
4082'JOIN', 'INNER JOIN', 'LEFT JOIN', 'LEFT OUTER JOIN', 'RIGHT JOIN', 'RIGHT OUTER JOIN', 'FULL JOIN', 'FULL OUTER JOIN', 'CROSS JOIN'];
4083/**
4084 * Priority 3
4085 * keywords that follow a previous Statement, must be attached to subsequent data
4086 * can be fully inline or on newline with optional indent
4087 */
4088
4089var reservedDependentClauses = ['WHEN', 'ELSE']; // https://docs.microsoft.com/en-us/sql/t-sql/language-reference?view=sql-server-ver15
4090
4091var TSqlFormatter = /*#__PURE__*/function (_Formatter) {
4092 _inherits(TSqlFormatter, _Formatter);
4093
4094 var _super = _createSuper(TSqlFormatter);
4095
4096 function TSqlFormatter() {
4097 _classCallCheck(this, TSqlFormatter);
4098
4099 return _super.apply(this, arguments);
4100 }
4101
4102 _createClass(TSqlFormatter, [{
4103 key: "tokenizer",
4104 value: function tokenizer() {
4105 return new _core_Tokenizer__WEBPACK_IMPORTED_MODULE_1__["default"]({
4106 reservedCommands: TSqlFormatter.reservedCommands,
4107 reservedBinaryCommands: TSqlFormatter.reservedBinaryCommands,
4108 reservedDependentClauses: TSqlFormatter.reservedDependentClauses,
4109 reservedJoinConditions: TSqlFormatter.reservedJoinConditions,
4110 reservedLogicalOperators: TSqlFormatter.reservedLogicalOperators,
4111 reservedKeywords: TSqlFormatter.reservedKeywords,
4112 stringTypes: TSqlFormatter.stringTypes,
4113 blockStart: TSqlFormatter.blockStart,
4114 blockEnd: TSqlFormatter.blockEnd,
4115 indexedPlaceholderTypes: TSqlFormatter.indexedPlaceholderTypes,
4116 namedPlaceholderTypes: TSqlFormatter.namedPlaceholderTypes,
4117 lineCommentTypes: TSqlFormatter.lineCommentTypes,
4118 specialWordChars: TSqlFormatter.specialWordChars,
4119 operators: TSqlFormatter.operators // TODO: Support for money constants
4120
4121 });
4122 }
4123 }]);
4124
4125 return TSqlFormatter;
4126}(_core_Formatter__WEBPACK_IMPORTED_MODULE_0__["default"]);
4127
4128
4129TSqlFormatter.reservedCommands = reservedCommands;
4130TSqlFormatter.reservedBinaryCommands = reservedBinaryCommands;
4131TSqlFormatter.reservedDependentClauses = reservedDependentClauses;
4132TSqlFormatter.reservedJoinConditions = ['ON', 'USING'];
4133TSqlFormatter.reservedLogicalOperators = ['AND', 'OR'];
4134TSqlFormatter.reservedKeywords = (0,_utils__WEBPACK_IMPORTED_MODULE_2__.dedupe)([].concat(_toConsumableArray(Object.values(reservedFunctions).reduce(function (acc, arr) {
4135 return [].concat(_toConsumableArray(acc), _toConsumableArray(arr));
4136}, [])), _toConsumableArray(Object.values(reservedKeywords).reduce(function (acc, arr) {
4137 return [].concat(_toConsumableArray(acc), _toConsumableArray(arr));
4138}, []))));
4139TSqlFormatter.stringTypes = ["\"\"", "N''", "''", '[]', '``'];
4140TSqlFormatter.blockStart = ['(', 'CASE'];
4141TSqlFormatter.blockEnd = [')', 'END'];
4142TSqlFormatter.indexedPlaceholderTypes = [];
4143TSqlFormatter.namedPlaceholderTypes = ['@'];
4144TSqlFormatter.lineCommentTypes = ['--'];
4145TSqlFormatter.specialWordChars = {
4146 any: '#@'
4147};
4148TSqlFormatter.operators = ['!<', '!>', '+=', '-=', '*=', '/=', '%=', '|=', '&=', '^=', '::'];
4149
4150/***/ }),
4151
4152/***/ "./src/sqlFormatter.ts":
4153/*!*****************************!*\
4154 !*** ./src/sqlFormatter.ts ***!
4155 \*****************************/
4156/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
4157
4158__webpack_require__.r(__webpack_exports__);
4159/* harmony export */ __webpack_require__.d(__webpack_exports__, {
4160/* harmony export */ "ConfigError": () => (/* binding */ ConfigError),
4161/* harmony export */ "format": () => (/* binding */ format),
4162/* harmony export */ "formatters": () => (/* binding */ formatters),
4163/* harmony export */ "supportedDialects": () => (/* binding */ supportedDialects)
4164/* harmony export */ });
4165/* harmony import */ var _languages_bigquery_formatter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./languages/bigquery.formatter */ "./src/languages/bigquery.formatter.ts");
4166/* harmony import */ var _languages_db2_formatter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./languages/db2.formatter */ "./src/languages/db2.formatter.ts");
4167/* harmony import */ var _languages_hive_formatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./languages/hive.formatter */ "./src/languages/hive.formatter.ts");
4168/* harmony import */ var _languages_mariadb_formatter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./languages/mariadb.formatter */ "./src/languages/mariadb.formatter.ts");
4169/* harmony import */ var _languages_mysql_formatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./languages/mysql.formatter */ "./src/languages/mysql.formatter.ts");
4170/* harmony import */ var _languages_n1ql_formatter__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./languages/n1ql.formatter */ "./src/languages/n1ql.formatter.ts");
4171/* harmony import */ var _languages_plsql_formatter__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./languages/plsql.formatter */ "./src/languages/plsql.formatter.ts");
4172/* harmony import */ var _languages_postgresql_formatter__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./languages/postgresql.formatter */ "./src/languages/postgresql.formatter.ts");
4173/* harmony import */ var _languages_redshift_formatter__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./languages/redshift.formatter */ "./src/languages/redshift.formatter.ts");
4174/* harmony import */ var _languages_sparksql_formatter__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./languages/sparksql.formatter */ "./src/languages/sparksql.formatter.ts");
4175/* harmony import */ var _languages_standardsql_formatter__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./languages/standardsql.formatter */ "./src/languages/standardsql.formatter.ts");
4176/* harmony import */ var _languages_tsql_formatter__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./languages/tsql.formatter */ "./src/languages/tsql.formatter.ts");
4177/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./utils */ "./src/utils.ts");
4178function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
4179
4180function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
4181
4182function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
4183
4184function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
4185
4186function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
4187
4188function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
4189
4190function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
4191
4192function _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== "function") { throw new TypeError("Super expression must either be null or a function"); } if (typeof _cache !== "undefined") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }
4193
4194function _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }
4195
4196function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
4197
4198function _isNativeFunction(fn) { return Function.toString.call(fn).indexOf("[native code]") !== -1; }
4199
4200function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
4201
4202function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
4203
4204function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
4205
4206
4207
4208
4209
4210
4211
4212
4213
4214
4215
4216
4217
4218
4219var formatters = {
4220 bigquery: _languages_bigquery_formatter__WEBPACK_IMPORTED_MODULE_0__["default"],
4221 db2: _languages_db2_formatter__WEBPACK_IMPORTED_MODULE_1__["default"],
4222 hive: _languages_hive_formatter__WEBPACK_IMPORTED_MODULE_2__["default"],
4223 mariadb: _languages_mariadb_formatter__WEBPACK_IMPORTED_MODULE_3__["default"],
4224 mysql: _languages_mysql_formatter__WEBPACK_IMPORTED_MODULE_4__["default"],
4225 n1ql: _languages_n1ql_formatter__WEBPACK_IMPORTED_MODULE_5__["default"],
4226 plsql: _languages_plsql_formatter__WEBPACK_IMPORTED_MODULE_6__["default"],
4227 postgresql: _languages_postgresql_formatter__WEBPACK_IMPORTED_MODULE_7__["default"],
4228 redshift: _languages_redshift_formatter__WEBPACK_IMPORTED_MODULE_8__["default"],
4229 spark: _languages_sparksql_formatter__WEBPACK_IMPORTED_MODULE_9__["default"],
4230 sql: _languages_standardsql_formatter__WEBPACK_IMPORTED_MODULE_10__["default"],
4231 tsql: _languages_tsql_formatter__WEBPACK_IMPORTED_MODULE_11__["default"]
4232};
4233var supportedDialects = Object.keys(formatters);
4234var defaultOptions = {
4235 language: 'sql',
4236 tabWidth: 2,
4237 useTabs: false,
4238 keywordCase: 'preserve',
4239 indentStyle: 'standard',
4240 multilineLists: 'always',
4241 logicalOperatorNewline: 'before',
4242 aliasAs: 'preserve',
4243 tabulateAlias: false,
4244 commaPosition: 'after',
4245 newlineBeforeOpenParen: true,
4246 newlineBeforeCloseParen: true,
4247 expressionWidth: 50,
4248 linesBetweenQueries: 1,
4249 denseOperators: false,
4250 newlineBeforeSemicolon: false
4251};
4252/**
4253 * Format whitespace in a query to make it easier to read.
4254 *
4255 * @param {string} query - input SQL query string
4256 * @param {FormatOptions} cfg Configuration options (see docs in README)
4257 * @return {string} formatted query
4258 */
4259
4260var format = function format(query) {
4261 var cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
4262
4263 if (typeof query !== 'string') {
4264 throw new Error('Invalid query argument. Expected string, instead got ' + _typeof(query));
4265 }
4266
4267 var options = validateConfig(Object.assign(Object.assign({}, defaultOptions), cfg));
4268 var Formatter = formatters[options.language];
4269 return new Formatter(options).format(query);
4270};
4271var ConfigError = /*#__PURE__*/function (_Error) {
4272 _inherits(ConfigError, _Error);
4273
4274 var _super = _createSuper(ConfigError);
4275
4276 function ConfigError() {
4277 _classCallCheck(this, ConfigError);
4278
4279 return _super.apply(this, arguments);
4280 }
4281
4282 return _createClass(ConfigError);
4283}( /*#__PURE__*/_wrapNativeSuper(Error));
4284
4285function validateConfig(cfg) {
4286 if (!supportedDialects.includes(cfg.language)) {
4287 throw new ConfigError("Unsupported SQL dialect: ".concat(cfg.language));
4288 }
4289
4290 if ((0,_utils__WEBPACK_IMPORTED_MODULE_12__.isNumber)(cfg.multilineLists) && cfg.multilineLists <= 0) {
4291 throw new ConfigError('multilineLists config must be a positive number.');
4292 }
4293
4294 if (cfg.expressionWidth <= 0) {
4295 throw new ConfigError("expressionWidth config must be positive number. Received ".concat(cfg.expressionWidth, " instead."));
4296 }
4297
4298 if (cfg.commaPosition === 'before' && cfg.useTabs) {
4299 throw new ConfigError('commaPosition: before does not work when tabs are used for indentation.');
4300 }
4301
4302 return cfg;
4303}
4304
4305/***/ }),
4306
4307/***/ "./src/types.ts":
4308/*!**********************!*\
4309 !*** ./src/types.ts ***!
4310 \**********************/
4311/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
4312
4313__webpack_require__.r(__webpack_exports__);
4314
4315
4316/***/ }),
4317
4318/***/ "./src/utils.ts":
4319/*!**********************!*\
4320 !*** ./src/utils.ts ***!
4321 \**********************/
4322/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
4323
4324__webpack_require__.r(__webpack_exports__);
4325/* harmony export */ __webpack_require__.d(__webpack_exports__, {
4326/* harmony export */ "dedupe": () => (/* binding */ dedupe),
4327/* harmony export */ "escapeRegExp": () => (/* binding */ escapeRegExp),
4328/* harmony export */ "isEmpty": () => (/* binding */ isEmpty),
4329/* harmony export */ "isNumber": () => (/* binding */ isNumber),
4330/* harmony export */ "last": () => (/* binding */ last),
4331/* harmony export */ "maxLength": () => (/* binding */ maxLength),
4332/* harmony export */ "sortByLengthDesc": () => (/* binding */ sortByLengthDesc),
4333/* harmony export */ "trimSpacesEnd": () => (/* binding */ trimSpacesEnd)
4334/* harmony export */ });
4335function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
4336
4337function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
4338
4339function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
4340
4341function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
4342
4343function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
4344
4345function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
4346
4347var dedupe = function dedupe(arr) {
4348 return _toConsumableArray(new Set(arr));
4349}; // Only removes spaces, not newlines
4350
4351var trimSpacesEnd = function trimSpacesEnd(str) {
4352 return str.replace(/[\t ]+$/, '');
4353}; // Last element from array
4354
4355var last = function last(arr) {
4356 return arr[arr.length - 1];
4357}; // True array is empty, or it's not an array at all
4358
4359var isEmpty = function isEmpty(arr) {
4360 return !Array.isArray(arr) || arr.length === 0;
4361}; // Escapes regex special chars
4362
4363var escapeRegExp = function escapeRegExp(string) {
4364 return string.replace(/[\$\(-\+\.\?\[-\^\{-\}]/g, '\\$&');
4365}; // Sorts strings by length, so that longer ones are first
4366// Also sorts alphabetically after sorting by length.
4367
4368var sortByLengthDesc = function sortByLengthDesc(strings) {
4369 return strings.sort(function (a, b) {
4370 return b.length - a.length || a.localeCompare(b);
4371 });
4372};
4373/** Get length of longest string in list of strings */
4374
4375var maxLength = function maxLength(strings) {
4376 return strings.reduce(function (max, cur) {
4377 return Math.max(max, cur.length);
4378 }, 0);
4379};
4380var isNumber = function isNumber(value) {
4381 return typeof value === 'number';
4382};
4383
4384/***/ })
4385
4386/******/ });
4387/************************************************************************/
4388/******/ // The module cache
4389/******/ var __webpack_module_cache__ = {};
4390/******/
4391/******/ // The require function
4392/******/ function __webpack_require__(moduleId) {
4393/******/ // Check if module is in cache
4394/******/ var cachedModule = __webpack_module_cache__[moduleId];
4395/******/ if (cachedModule !== undefined) {
4396/******/ return cachedModule.exports;
4397/******/ }
4398/******/ // Create a new module (and put it into the cache)
4399/******/ var module = __webpack_module_cache__[moduleId] = {
4400/******/ // no module.id needed
4401/******/ // no module.loaded needed
4402/******/ exports: {}
4403/******/ };
4404/******/
4405/******/ // Execute the module function
4406/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
4407/******/
4408/******/ // Return the exports of the module
4409/******/ return module.exports;
4410/******/ }
4411/******/
4412/************************************************************************/
4413/******/ /* webpack/runtime/define property getters */
4414/******/ (() => {
4415/******/ // define getter functions for harmony exports
4416/******/ __webpack_require__.d = (exports, definition) => {
4417/******/ for(var key in definition) {
4418/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
4419/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
4420/******/ }
4421/******/ }
4422/******/ };
4423/******/ })();
4424/******/
4425/******/ /* webpack/runtime/hasOwnProperty shorthand */
4426/******/ (() => {
4427/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
4428/******/ })();
4429/******/
4430/******/ /* webpack/runtime/make namespace object */
4431/******/ (() => {
4432/******/ // define __esModule on exports
4433/******/ __webpack_require__.r = (exports) => {
4434/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
4435/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4436/******/ }
4437/******/ Object.defineProperty(exports, '__esModule', { value: true });
4438/******/ };
4439/******/ })();
4440/******/
4441/************************************************************************/
4442var __webpack_exports__ = {};
4443// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
4444(() => {
4445/*!**********************!*\
4446 !*** ./src/index.ts ***!
4447 \**********************/
4448__webpack_require__.r(__webpack_exports__);
4449/* harmony export */ __webpack_require__.d(__webpack_exports__, {
4450/* harmony export */ "ConfigError": () => (/* reexport safe */ _sqlFormatter__WEBPACK_IMPORTED_MODULE_0__.ConfigError),
4451/* harmony export */ "format": () => (/* reexport safe */ _sqlFormatter__WEBPACK_IMPORTED_MODULE_0__.format),
4452/* harmony export */ "formatters": () => (/* reexport safe */ _sqlFormatter__WEBPACK_IMPORTED_MODULE_0__.formatters),
4453/* harmony export */ "supportedDialects": () => (/* reexport safe */ _sqlFormatter__WEBPACK_IMPORTED_MODULE_0__.supportedDialects)
4454/* harmony export */ });
4455/* harmony import */ var _sqlFormatter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sqlFormatter */ "./src/sqlFormatter.ts");
4456/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./types */ "./src/types.ts");
4457
4458
4459})();
4460
4461/******/ return __webpack_exports__;
4462/******/ })()
4463;
4464});
4465//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QW1CUixZQW5CUSxFQW9CUixJQXBCUSxFQXFCUixTQXJCUSxFQXNCUixVQXRCUSxFQXVCUixNQXZCUSxFQXdCUixNQXhCUSxFQXlCUixPQXpCUSxFQTBCUixXQTFCUSxFQTJCUixPQTNCUSxFQTRCUixPQTVCUSxFQTZCUixTQTdCUSxFQThCUixZQTlCUSxFQStCUixRQS9CUSxFQWdDUixRQWhDUSxFQWlDUixXQWpDUSxFQWtDUixZQWxDUSxFQW1DUixZQW5DUSxFQW9DUixTQXBDUSxFQXFDUixVQXJDUSxFQXNDUixRQXRDUSxFQXVDUixNQXZDUSxFQXdDUixTQXhDUSxFQXlDUixjQXpDUSxFQTBDUixrQkExQ1EsRUEyQ1IsY0EzQ1EsRUE0Q1IsZ0JBNUNRLEVBNkNSLGNBN0NRLEVBOENSLG1CQTlDUSxFQStDUixTQS9DUSxFQWdEUixRQWhEUSxFQWlEUixNQWpEUSxFQWtEUixVQWxEUSxFQW1EUixRQW5EUSxFQW9EUixTQXBEUSxFQXFEUixTQXJEUSxFQXNEUixZQXREUSxFQXVEUixlQXZEUSxFQXdEUixTQXhEUSxFQXlEUixVQXpEUSxFQTBEUixVQTFEUSxFQTJEUixJQTNEUSxFQTREUixVQTVEUSxFQTZEUixRQTdEUSxFQThEUixTQTlEUSxFQStEUixVQS9EUSxFQWdFUixVQWhFUSxFQWlFUixZQWpFUSxFQWtFUixRQWxFUSxFQW1FUixVQW5FUSxFQW9FUixPQXBFUSxFQXFFUixRQXJFUSxFQXNFUixXQXRFUSxFQXVFUixRQXZFUSxFQXdFUixNQXhFUSxFQXlFUixVQXpFUSxFQTBFUixRQTFFUSxFQTJFUixXQTNFUSxFQTRFUixPQTVFUSxFQTZFUixPQTdFUSxFQThFUixLQTlFUSxFQStFUixNQS9FUSxFQWdGUixNQWhGUSxFQWlGUixVQWpGUSxFQWtGUixXQWxGUSxFQW1GUixLQW5GUSxFQW9GUixRQXBGUSxFQXFGUixNQXJGUSxFQXNGUixPQXRGUSxFQXVGUixTQXZGUSxFQXdGUixNQXhGUSxFQXlGUixPQXpGUSxFQTBGUixJQTFGUSxFQTJGUixXQTNGUSxFQTRGUixJQTVGUSxFQTZGUixXQTdGUSxFQThGUixPQTlGUSxFQStGUixTQS9GUSxFQWdHUixPQWhHUSxFQWlHUixPQWpHUSxFQWtHUixhQWxHUSxFQW1HUixNQW5HUSxFQW9HUixJQXBHUSxFQXFHUixRQXJHUSxFQXNHUixTQXRHUSxFQXVHUixLQXZHUSxFQXdHUixNQXhHUSxFQXlHUixLQXpHUSxFQTBHUixVQTFHUSxFQTJHUixNQTNHUSxFQTRHUixVQTVHUSxFQTZHUixPQTdHUSxFQThHUixNQTlHUSxFQStHUixPQS9HUSxFQWdIUixRQWhIUSxFQWlIUixTQWpIUSxFQWtIUixVQWxIUSxFQW1IUixNQW5IUSxFQW9IUixTQXBIUSxFQXFIUixVQXJIUSxFQXNIUixNQXRIUSxFQXVIUixNQXZIUSxFQXdIUixZQXhIUSxFQXlIUixjQXpIUSxFQTBIUixjQTFIUSxFQTJIUixlQTNIUSxFQTRIUixVQTVIUSxFQTZIUixRQTdIUSxFQThIUixNQTlIUSxFQStIUixTQS9IUSxFQWdJUixJQWhJUSxFQWlJUixNQWpJUSxFQWtJUixLQWxJUSxFQW1JUixNQW5JUSxFQW9JUixPQXBJUSxFQXFJUixVQXJJUSxFQXNJUixNQXRJUSxFQXVJUixJQXZJUSxFQXdJUixLQXhJUSxFQXlJUixXQXpJUSxFQTBJUixXQTFJUSxFQTJJUixjQTNJUSxFQTRJUixVQTVJUSxFQTZJUixPQTdJUSxFQThJUixjQTlJUSxFQStJUixLQS9JUSxFQWdKUixPQWhKUSxFQWlKUixTQWpKUSxFQWtKUixXQWxKUSxFQW1KUixNQW5KUSxFQW9KUixRQXBKUSxFQXFKUixXQXJKUSxFQXNKUixhQXRKUSxFQXVKUixjQXZKUSxFQXdKUixNQXhKUSxFQXlKUixXQXpKUSxFQTBKUixRQTFKUSxFQTJKUixNQTNKUSxFQTRKUixXQTVKUSxFQTZKUixTQTdKUSxFQThKUixPQTlKUSxFQStKUixRQS9KUSxFQWdLUixZQWhLUSxFQWlLUixXQWpLUSxFQWtLUixTQWxLUSxFQW1LUixNQW5LUSxFQW9LUixRQXBLUSxFQXFLUixPQXJLUSxFQXNLUixTQXRLUSxFQXVLUixPQXZLUSxFQXdLUixZQXhL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aEdJLEVBaUdKLE9BakdJLEVBa0dKLFFBbEdJLEVBbUdKLE1BbkdJLEVBb0dKLFVBcEdJLEVBcUdKLFdBckdJLEVBc0dKLElBdEdJLEVBdUdKLFNBdkdJLEVBd0dKLE9BeEdJLEVBeUdKLFdBekdJLEVBMEdKLFdBMUdJLEVBMkdKLE9BM0dJLEVBNEdKLE9BNUdJLEVBNkdKLGFBN0dJLEVBOEdKLFFBOUdJLEVBK0dKLEtBL0dJLEVBZ0hKLFNBaEhJLEVBaUhKLFdBakhJLEVBa0hKLFVBbEhJLEVBbUhKLE1BbkhJLEVBb0hKLElBcEhJLEVBcUhKLFdBckhJLEVBc0hKLE1BdEhJLEVBdUhKLEtBdkhJLEVBd0hKLFVBeEhJLEVBeUhKLE1BekhJLEVBMEhKLFNBMUhJLEVBMkhKLE1BM0hJLEVBNEhKLE9BNUhJLEVBNkhKLE1BN0hJLEVBOEhKLE9BOUhJLEVBK0hKLE9BL0hJLEVBZ0lKLE9BaElJLEVBaUlKLEtBaklJLEVBa0lKLEtBbElJLEVBbUlKLFFBbklJLEVBb0lKLFFBcElJLEVBcUlKLE9BcklJLEVBc0lKLE9BdElJLEVBdUlKLFVBdklJLEVBd0lKLFNBeElJLEVBeUlKLE9BeklJLEVBMElKLE1BMUlJLEVBMklKLElBM0lJLEVBNElKLE1BNUlJLEVBNklKLEtBN0lJLEVBOElKLE1BOUlJLEVBK0lKLFFBL0lJLEVBZ0pKLFNBaEpJLEVBaUpKLGNBakpJLEVBa0pKLElBbEpJLEVBbUpKLE1BbkpJLEVBb0pKLE1BcEpJLEVBcUpKLFFBckpJLEVBc0pKLElBdEpJLEVBdUpKLE9BdkpJLEVBd0pKLE9BeEpJLEVBeUpKLFFBekpJLEVBMEpKLFVBMUpJLEVBMkpKLEtBM0pJLEVBNEpKLFNBNUpJLEVBNkpKLFFBN0pJLEVBOEpKLFVBOUpJLEVBK0pKLFdBL0pJLEVBZ0tKLFNBaEtJLEVBaUtKLFVBaktJLEVBa0tKLFNBbEtJLEVBbUtKLE9BbktJLEVBb0tKLFlBcEtJLEVBcUtKLFdBcktJLEVBc0tKLFFBdEtJLEVBdUtKLE1BdktJLEVBd0tKLE1BeEtJLEVBeUtKLFlBektJLEVBMEtKLFVBMUtJLEVBMktKLFVBM0tJLEVBNEtKLFFBNUtJLEVBNktKLE9BN0tJLEVBOEtKLFVBOUtJLEVBK0tKLE1BL0tJLEVBZ0xKLFFBaExJLEVBaUxKLFFBakxJLEVBa0xKLFFBbExJLEVBbUxKLFNBbkxJLEVBb0xKLFFBcExJLEVBcUxKLFNBckxJLEVBc0xKLGNBdExJLEVBdUxKLEtBdkxJLEVBd0xKLE1BeExJLEVBeUxKLFVBekxJLEVBMExKLE1BMUxJLEVBMkxKLE9BM0xJLEVBNExKLEtBNUxJLEVBNkxKLE9BN0xJLEVBOExKLFNBOUxJLEVBK0xKLFVBL0xJLEVBZ01KLFVBaE1JLEVBaU1KLFlBak1JLEVBa01KLFdBbE1JLEVBbU1KLEtBbk1JLEVBb01KLGFBcE1JLEVBcU1KLE9Bck1JLEVBc01KLFdBdE1JLEVBdU1KLE1Bdk1JLEVBd01KLFdBeE1JLEVBeU1KLGVBek1JLEVBME1KLGlCQTFNSSxFQTJNSixJQTNNSSxFQTRNSixVQTVNSSxFQTZNSixhQTdNSSxFQThNSixXQTlNSSxFQStNSixhQS9NSSxFQWdOSixNQWhOSSxFQWlOSixNQWpOSSxFQWtOSixPQWxOSSxFQW1OSixRQW5OSSxFQW9OSixTQXBOSSxFQXFOSixRQXJOSSxFQXNOSixPQXROSSxFQXVOSixPQXZOSSxFQXdOSixNQXhOSSxFQXlOSixPQXpOSSxFQTBOSixRQTFOSSxFQTJOSixTQTNOSSxFQTROSixTQTVOSSxFQTZOSixNQTdOSSxFQThOSixVQTlOSSxFQStOSixPQS9OSSxFQWdPSixNQWhPSSxFQWlPSixNQWpPSSxFQWtPSixPQWxPSSxFQW1PSixNQW5PSSxFQW9PSixNQXBPSSxDQXpMaUI7QUErWnZCQyxRQUFNLEVBQUUsQ0FDTixVQURNLEVBRU4sUUFGTSxFQUdOLE9BSE0sRUFJTixPQUpNLEVBS04sV0FMTSxFQU1OLE9BTk0sRUFPTixVQVBNLEVBUU4sS0FSTSxFQVNOLE9BVE0sRUFVTixZQVZNLEVBV04sV0FYTSxFQVlOLFlBWk0sRUFhTixJQWJNLEVBY04sUUFkTSxFQWVOLFFBZk0sRUFnQk4sUUFoQk0sRUFpQk4sS0FqQk0sRUFrQk4sTUFsQk0sRUFtQk4sU0FuQk0sRUFvQk4sTUFwQk0sRUFxQk4sU0FyQk0sRUFzQk4sTUF0Qk0sRUF1Qk4sUUF2Qk0sRUF3Qk4sYUF4Qk0sRUF5Qk4sVUF6Qk0sRUEwQk4sTUExQk0sRUEyQk4sU0EzQk0sRUE0Qk4sTUE1Qk0sRUE2Qk4sV0E3Qk0sRUE4Qk4sT0E5Qk0sRUErQk4sTUEvQk0sRUFnQ04sV0FoQ00sRUFpQ04sU0FqQ00sRUFrQ04sWUFsQ00sRUFtQ04sV0FuQ00sRUFvQ04sU0FwQ00sRUFxQ04sWUFyQ00sRUFzQ04sYUF0Q00sRUF1Q04sYUF2Q00sRUF3Q04sTUF4Q00sRUF5Q04sZUF6Q00sRUEwQ04sV0ExQ00sRUEyQ04sWUEzQ00sRUE0Q04sTUE1Q00sRUE2Q04sV0E3Q00sRUE4Q04saUJBOUNNLEVBK0NOLGlDQS9DTSxFQWdETixjQWhETSxFQWlETixjQWpETSxFQWtETixnQkFsRE0sRUFtRE4sa0NBbkRNLEVBb0ROLE9BcERNLEVBcUROLE1BckRNLEVBc0ROLE1BdERNLEVBdUROLEtBdkRNLEVBd0ROLEtBeERNLEVBeUROLFNBekRNLEVBMEROLFlBMURNLEVBMkROLFVBM0RNLEVBNEROLE9BNURNLEVBNkROLE9BN0RNLEVBOEROLFVBOURNLEVBK0ROLFlBL0RNLEVBZ0VOLFNBaEVNLEVBaUVOLFlBakVNLEVBa0VOLGVBbEVNLEVBbUVOLGFBbkVNLEVBb0VOLFlBcEVNLEVBcUVOLFlBckVNLEVBc0VOLFFBdEVNLEVBdUVOLFNBdkVNLEVBd0VOLE1BeEVNLEVBeUVOLFNBekVNLEVBMEVOLFVBMUVNLEVBMkVOLFFBM0VNLEVBNEVOLE9BNUVNLEVBNkVOLE9BN0VNLEVBOEVOLFFBOUVNLEVBK0VOLE9BL0VNLEVBZ0ZOLE9BaEZNLEVBaUZOLE9BakZNLEVBa0ZOLE1BbEZNLEVBbUZOLGVBbkZNLEVBb0ZOLFFBcEZNLEVBcUZOLFNBckZNLEVBc0ZOLEtBdEZNLEVBdUZOLFFBdkZNLEVBd0ZOLElBeEZNLEVBeUZOLFVBekZNLEVBMEZOLE1BMUZNLEVBMkZOLE1BM0ZNLEVBNEZOLE1BNUZNLEVBNkZOLFFBN0ZNLEVBOEZOLFdBOUZNLEVBK0ZOLFdBL0ZNLEVBZ0dOLFlBaEdNLEVBaUdOLFdBakdNLEVBa0dOLE9BbEdNLEVBbUdOLE9BbkdNLEVBb0dOLEtBcEdNLEVBcUdOLFNBckdNLEVBc0dOLGNBdEdNLEVBdUdOLFVBdkdNLEVBd0dOLFdBeEdNLEVBeUdOLFNBekdNLEVBMEdOLFVBMUdNLEVBMkdOLE9BM0dNLEVBNEdOLE1BNUdNLEVBNkdOLFNBN0dNLEVBOEdOLFNBOUdNLEVBK0dOLE1BL0dNLEVBZ0hOLE9BaEhNLEVBaUhOLFlBakhNLEVBa0hOLE9BbEhNLEVBbUhOLElBbkhNLEVBb0hOLE9BcEhNLEVBcUhOLFdBckhNLEVBc0hOLGdCQXRITSxFQXVITixTQXZITSxFQXdITixLQXhITSxFQXlITixPQXpITSxFQTBITixRQTFITSxFQTJITixRQTNITSxFQTRITixRQTVITSxFQTZITixLQTdITSxFQThITixVQTlITSxFQStITixRQS9ITSxFQWdJTixRQWhJTSxFQWlJTixPQWpJTSxFQWtJTixVQWxJTSxFQW1JTixPQW5JTSxFQW9JTixTQXBJTSxFQXFJTixPQXJJTSxFQXNJTixPQXRJTSxFQXVJTixLQXZJTSxFQXdJTixNQXhJTSxFQXlJTixJQXpJTSxFQTBJTixNQTFJTSxFQTJJTixXQTNJTSxFQTRJTixTQTVJTSxFQTZJTixRQTdJTSxFQThJTixtQkE5SU0sRUErSU4sS0EvSU0sRUFnSk4sTUFoSk0sRUFpSk4sV0FqSk0sRUFrSk4sWUFsSk0sRUFtSk4sS0FuSk0sRUFvSk4sUUFwSk0sRUFxSk4sU0FySk0sRUFzSk4sS0F0Sk0sRUF1Sk4sV0F2Sk0sRUF3Sk4sWUF4Sk0sRUF5Sk4sU0F6Sk0sRUEwSk4sV0ExSk0sRUEySk4sTUEzSk0sRUE0Sk4saUJBNUpNLEVBNkpOLGlCQTdKTSxFQThKTixjQTlKTSxFQStKTixnQkEvSk0sRUFnS04sU0FoS00sRUFpS04sUUFqS00sRUFrS04sVUFsS00sRUFtS04sU0FuS00sRUFvS04sVUFwS00sRUFxS04sT0FyS00sRUFzS04sWUF0S00sRUF1S04sT0F2S00sRUF3S04sT0F4S00sRUF5S04sTUF6S00sRUEwS04sV0ExS00sRUEyS04sS0EzS00sRUE0S04sYUE1S00sRUE2S04sV0E3S00sRUE4S04sV0E5S00sRUErS04sWUEvS00sRUFnTE4sZ0JBaExNLEVBaUxOLFNBakxNLEVBa0xOLFlBbExNLEVBbUxOLFVBbkxNLEVBb0xOLFVBcExNLEVBcUxOLFVBckxNLEVBc0xOLFVBdExNLEVBdUxOLFNBdkxNLEVBd0xOLFFBeExNLEVBeUxOLFNBekxNLEVBMExOLE1BMUxNLEVBMkxOLFFBM0xNLEVBNExOLFNBNUxNLEVBNkxOLEtBN0xNLEVBOExOLE1BOUxNLEVBK0xOLFdBL0xNLEVBZ01OLE9BaE1NLEVBaU1OLFFBak1NLEVBa01OLFFBbE1NLEVBbU1OLFFBbk1NLEVBb01OLFNBcE1NLEVBcU1OLFdBck1NLEVBc01OLFVBdE1NLEVBdU1OLFNBdk1NLEVBd01OLE1BeE1NLEVBeU1OLFNBek1NLEVBME1OLE1BMU1NLEVBMk1OLFVBM01NLEVBNE1OLE9BNU1NLEVBNk1OLFVBN01NLEVBOE1OLGNBOU1NLEVBK01OLEtBL01NLEVBZ05OLGNBaE5NLEVBaU5OLFVBak5NLEVBa05OLFlBbE5NLEVBbU5OLE9Bbk5NLEVBb05OLE9BcE5NLEVBcU5OLFdBck5NLEVBc05OLFFBdE5NLEVBdU5OLFlBdk5NLEVBd05OLGFBeE5NLEVBeU5OLFdBek5NLEVBME5OLGFBMU5NLEVBMk5OLGlCQTNOTSxFQTROTixXQTVOTSxFQTZOTixRQTdOTSxFQThOTixXQTlOTSxFQStOTixXQS9OTSxFQWdPTixNQWhPTSxFQWlPTixNQWpPTSxFQWtPTixXQWxPTSxFQW1PTixlQW5PTSxFQW9PTixpQkFwT00sRUFxT04sVUFyT00sRUFzT04saUJBdE9NLEVBdU9OLGFBdk9NLEVBd09OLE9BeE9NLEVBeU9OLE1Bek9NLEVBME9OLFNBMU9NLEVBMk9OLE9BM09NLEVBNE9OLFNBNU9NLEVBNk9OLFFBN09NLEVBOE9OLE9BOU9NLEVBK09OLE9BL09NLEVBZ1BOLE9BaFBNLEVBaVBOLFNBalBNLEVBa1BOLFVBbFBNLEVBbVBOLFNBblBNLEVBb1BOLFVBcFBNLEVBcVBOLFVBclBNLEVBc1BOLGNBdFBNLEVBdVBOLFFBdlBNLEVBd1BOLFFBeFBNLEVBeVBOLFNBelBNLEVBMFBOLE1BMVBNLEVBMlBOLE9BM1BNLEVBNFBOLFFBNVBNLEVBNlBOLGVBN1BNLEVBOFBOLFdBOVBNLEVBK1BOLFNBL1BNLEVBZ1FOLFlBaFFNLEVBaVFOLFdBalFNLEVBa1FOLGFBbFFNLEVBbVFOLFlBblFNLEVBb1FOLFdBcFFNLEVBcVFOLFdBclFNLEVBc1FOLFlBdFFNLEVBdVFOLGVBdlFNLEVBd1FOLFVBeFFNLEVBeVFOLE9BelFNLEVBMFFOLFVBMVFNLEVBMlFOLGNBM1FNLEVBNFFOLFVBNVFNLEVBNlFOLFNBN1FNLEVBOFFOLGFBOVFNLEVBK1FOLE1BL1FNLEVBZ1JOLE1BaFJNO0FBL1plLENBQXpCO0FBbXJCQTs7Ozs7QUFLQTs7QUFDQSxJQUFNcE4sZ0JBQWdCLEdBQUcsQ0FDdkIsZ0NBRHVCLEVBRXZCLGVBRnVCLEVBR3ZCLFdBSHVCLEVBSXZCLGVBSnVCLEVBS3ZCLFlBTHVCLEVBTXZCLG9CQU51QixFQU92QixtQkFQdUIsRUFRdkIsY0FSdUIsRUFTdkIsZUFUdUIsRUFVdkIsa0JBVnVCLEVBV3ZCLFlBWHVCLEVBWXZCLGFBWnVCLEVBYXZCLFVBYnVCLEVBY3ZCLGdCQWR1QixFQWV2QixlQWZ1QixFQWdCdkIsb0JBaEJ1QixFQWlCdkIsUUFqQnVCLEVBa0J2QixvQkFsQnVCLEVBbUJ2QixtQkFuQnVCLEVBb0J2QiwyQkFwQnVCLEVBcUJ2QiwwQkFyQnVCLEVBc0J2QiwyQkF0QnVCLEVBdUJ2QixpQkF2QnVCLEVBd0J2QixhQXhCdUIsRUF5QnZCLGFBekJ1QixFQTBCdkIsa0JBMUJ1QixFQTJCdkIscUJBM0J1QixFQTRCdkIsU0E1QnVCLEVBNkJ2Qix1QkE3QnVCLEVBOEJ2QixtQkE5QnVCLEVBK0J2QixtQkEvQnVCLEVBZ0N2Qix5QkFoQ3VCLEVBaUN2QixjQWpDdUIsRUFrQ3ZCLFVBbEN1QixFQW1DdkIsWUFuQ3VCLEVBb0N2Qix3QkFwQ3VCLEVBcUN2Qix3QkFyQ3VCLEVBc0N2QixVQXRDdUIsRUF1Q3ZCLDhCQXZDdUIsRUF3Q3ZCLHlCQXhDdUIsRUF5Q3ZCLGVBekN1QixFQTBDdkIsK0JBMUN1QixFQTJDdkIsNEJBM0N1QixFQTRDdkIsY0E1Q3VCLEVBNkN2QixXQTdDdUIsRUE4Q3ZCLFlBOUN1QixFQStDdkIsbUJBL0N1QixFQWdEdkIsU0FoRHVCLEVBaUR2QixRQWpEdUIsRUFrRHZCLE1BbER1QixFQW1EdkIsVUFuRHVCLEVBb0R2QixpQkFwRHVCLEVBcUR2QixnQkFyRHVCLEVBc0R2QixrQkF0RHVCLEVBdUR2QixVQXZEdUIsRUF3RHZCLG9CQXhEdUIsRUF5RHZCLGVBekR1QixFQTBEdkIsWUExRHVCLEVBMkR2QixzQkEzRHVCLEVBNER2QixzQkE1RHVCLEVBNkR2QixtQkE3RHVCLEVBOER2QixrQkE5RHVCLEVBK0R2Qix3QkEvRHVCLEVBZ0V2QixnQkFoRXVCLEVBaUV2QixjQWpFdUIsRUFrRXZCLFNBbEV1QixFQW1FdkIsV0FuRXVCLEVBb0V2QixrQkFwRXVCLEVBcUV2QixnQkFyRXVCLEVBc0V2QixtQkF0RXVCLEVBdUV2QixVQXZFdUIsRUF3RXZCLHdCQXhFdUIsRUF5RXZCLHlCQXpFdUIsRUEwRXZCLE9BMUV1QixFQTJFdkIsV0EzRXVCLEVBNEV2QixpQkE1RXVCLEVBNkV2Qix1QkE3RXVCLEVBOEV2QixPQTlFdUIsRUErRXZCLFFBL0V1QixFQWdGdkIsVUFoRnVCLEVBaUZ2QixjQWpGdUIsRUFrRnZCLE9BbEZ1QixFQW1GdkIsWUFuRnVCLEVBb0Z2QixPQXBGdUIsRUFxRnZCLGNBckZ1QixFQXNGdkIsbUJBdEZ1QixFQXVGdkIsU0F2RnVCLEVBd0Z2QixRQXhGdUIsRUF5RnZCLG9CQXpGdUIsRUEwRnZCLFNBMUZ1QixFQTJGdkIsaUJBM0Z1QixFQTRGdkIsb0JBNUZ1QixFQTZGdkIsV0E3RnVCLEVBOEZ2QixvQkE5RnVCLEVBK0Z2QixrQkEvRnVCLEVBZ0d2QixXQWhHdUIsRUFpR3ZCLDJCQWpHdUIsRUFrR3ZCLE9BbEd1QixFQW1HdkIsbUJBbkd1QixFQW9HdkIsU0FwR3VCLEVBcUd2Qix3QkFyR3VCLEVBc0d2QiwwQkF0R3VCLEVBdUd2QixtQkF2R3VCLEVBd0d2QixlQXhHdUIsRUF5R3ZCLFNBekd1QixFQTBHdkIsc0JBMUd1QixFQTJHdkIsb0JBM0d1QixFQTRHdkIsbUJBNUd1QixFQTZHdkIsb0JBN0d1QixFQThHdkIsb0JBOUd1QixFQStHdkIsNEJBL0d1QixFQWdIdkIsb0JBaEh1QixFQWlIdkIsUUFqSHVCLEVBa0h2QixRQWxIdUIsRUFtSHZCLFlBbkh1QixFQW9IdkIsTUFwSHVCLEVBcUh2QixPQXJIdUIsRUFzSHZCLFVBdEh1QixFQXVIdkIsTUF2SHVCLEVBd0h2QixRQXhIdUIsRUF5SHZCLHNCQXpIdUIsRUEwSHZCLGlCQTFIdUIsRUEySHZCLHFCQTNIdUIsRUE0SHZCLE1BNUh1QixFQTZIdkIsNEJBN0h1QixFQThIdkIsVUE5SHVCLEVBK0h2QixjQS9IdUIsRUFnSXZCLDRCQWhJdUIsRUFpSXZCLHNCQWpJdUIsRUFrSXZCLGFBbEl1QixFQW1JdkIsU0FuSXVCLEVBb0l2QixvQkFwSXVCLEVBcUl2QixLQXJJdUIsRUFzSXZCLFNBdEl1QixFQXVJdkIsY0F2SXVCLEVBd0l2QixlQXhJdUIsRUF5SXZCLGNBekl1QixFQTBJdkIsV0ExSXVCLEVBMkl2QixlQTNJdUIsRUE0SXZCLFlBNUl1QixFQTZJdkIsZUE3SXVCLEVBOEl2QixvQkE5SXVCLEVBK0l2QixpQkEvSXVCLEVBZ0p2QixnQkFoSnVCLEVBaUp2QixlQWpKdUIsRUFrSnZCLFNBbEp1QixFQW1KdkIsT0FuSnVCLEVBb0p2QixnQkFwSnVCLEVBcUp2QixVQXJKdUIsRUFzSnZCLDZCQXRKdUIsRUF1SnZCLFNBdkp1QixFQXdKdkIsZ0JBeEp1QixFQXlKdkIsTUF6SnVCLEVBMEp2QixRQTFKdUIsRUEySnZCLG1CQTNKdUIsRUE0SnZCLE1BNUp1QixFQTZKdkIsTUE3SnVCLEVBOEp2QixnQkE5SnVCLEVBK0p2QixZQS9KdUIsRUFnS3ZCLFdBaEt1QixFQWlLdkIsdUJBakt1QixFQWtLdkI7QUFDQSxjQW5LdUIsRUFvS3ZCLGFBcEt1QixFQXFLdkIsY0FyS3VCLEVBc0t2QixNQXRLdUIsRUF1S3ZCLFVBdkt1QixFQXdLdkIsUUF4S3VCLEVBeUt2QixhQXpLdUIsRUEwS3ZCLFlBMUt1QixFQTJLdkIsWUEzS3VCLEVBNEt2QixPQTVLdUIsRUE2S3ZCLFFBN0t1QixFQThLdkIsVUE5S3VCLEVBK0t2QixRQS9LdUIsRUFnTHZCLFFBaEx1QixFQWlMdkIsT0FqTHVCLEVBa0x2QixNQWxMdUIsQ0FBekI7QUFxTEE7Ozs7OztBQUtBLElBQU1DLHNCQUFzQixHQUFHLENBQzdCO0FBQ0EsV0FGNkIsRUFHN0IsZUFINkIsRUFJN0Isb0JBSjZCLEVBSzdCLE9BTDZCLEVBTTdCLFdBTjZCLEVBTzdCLGdCQVA2QixFQVE3QixRQVI2QixFQVM3QixZQVQ2QixFQVU3QixpQkFWNkIsRUFXN0IsT0FYNkIsRUFZN0IsV0FaNkIsRUFhN0IsZ0JBYjZCLEVBYzdCO0FBQ0EsTUFmNkIsRUFnQjdCLFlBaEI2QixFQWlCN0IsV0FqQjZCLEVBa0I3QixpQkFsQjZCLEVBbUI3QixZQW5CNkIsRUFvQjdCLGtCQXBCNkIsRUFxQjdCLFdBckI2QixFQXNCN0IsaUJBdEI2QixFQXVCN0IsWUF2QjZCLENBQS9CO0FBMEJBOzs7Ozs7QUFLQSxJQUFNSix3QkFBd0IsR0FBRyxDQUFDLE1BQUQsRUFBUyxNQUFULENBQWpDLEVBRUE7O0lBQ3FCd047Ozs7Ozs7Ozs7Ozs7V0FtQm5CLHFCQUFTO0FBQ1AsYUFBTyxJQUFJeE8sdURBQUosQ0FBYztBQUNuQm1CLHdCQUFnQixFQUFFcU4sYUFBYSxDQUFDck4sZ0JBRGI7QUFFbkJDLDhCQUFzQixFQUFFb04sYUFBYSxDQUFDcE4sc0JBRm5CO0FBR25CSixnQ0FBd0IsRUFBRXdOLGFBQWEsQ0FBQ3hOLHdCQUhyQjtBQUluQkssOEJBQXNCLEVBQUVtTixhQUFhLENBQUNuTixzQkFKbkI7QUFLbkJILGdDQUF3QixFQUFFc04sYUFBYSxDQUFDdE4sd0JBTHJCO0FBTW5CSCx3QkFBZ0IsRUFBRXlOLGFBQWEsQ0FBQ3pOLGdCQU5iO0FBT25CRixtQkFBVyxFQUFFMk4sYUFBYSxDQUFDM04sV0FQUjtBQVFuQmEsa0JBQVUsRUFBRThNLGFBQWEsQ0FBQzlNLFVBUlA7QUFTbkJDLGdCQUFRLEVBQUU2TSxhQUFhLENBQUM3TSxRQVRMO0FBVW5CTSwrQkFBdUIsRUFBRXVNLGFBQWEsQ0FBQ3ZNLHVCQVZwQjtBQVduQkcsNkJBQXFCLEVBQUVvTSxhQUFhLENBQUNwTSxxQkFYbEI7QUFZbkJQLHdCQUFnQixFQUFFMk0sYUFBYSxDQUFDM00sZ0JBWmI7QUFhbkJwQix3QkFBZ0IsRUFBRStOLGFBQWEsQ0FBQy9OLGdCQWJiO0FBY25CYyxpQkFBUyxFQUFFaU4sYUFBYSxDQUFDak4sU0FkTixDQWVuQjs7QUFmbUIsT0FBZCxDQUFQO0FBaUJEOzs7O0VBckN3QzNKOzs7QUFDbEM0VyxpQ0FBbUJyTixnQkFBbkI7QUFDQXFOLHVDQUF5QnBOLHNCQUF6QjtBQUNBb04seUNBQTJCeE4sd0JBQTNCO0FBQ0F3Tix1Q0FBeUIsQ0FBQyxJQUFELEVBQU8sT0FBUCxDQUF6QjtBQUNBQSx5Q0FBMkIsQ0FBQyxLQUFELEVBQVEsSUFBUixDQUEzQjtBQUNBQSxpQ0FBbUJwSCw4Q0FBTSw4QkFDM0I3RyxNQUFNLENBQUNDLE1BQVAsQ0FBYzZHLGlCQUFkLEVBQWlDaEUsTUFBakMsQ0FBd0MsVUFBQ0MsR0FBRCxFQUFNaUgsR0FBTjtBQUFBLHNDQUFrQmpILEdBQWxCLHNCQUEwQmlILEdBQTFCO0FBQUEsQ0FBeEMsRUFBd0UsRUFBeEUsQ0FEMkIsc0JBRTNCaEssTUFBTSxDQUFDQyxNQUFQLENBQWNPLGdCQUFkLEVBQWdDc0MsTUFBaEMsQ0FBdUMsVUFBQ0MsR0FBRCxFQUFNaUgsR0FBTjtBQUFBLHNDQUFrQmpILEdBQWxCLHNCQUEwQmlILEdBQTFCO0FBQUEsQ0FBdkMsRUFBdUUsRUFBdkUsQ0FGMkIsR0FBekI7QUFJQWlFLDRCQUFtQyxTQUFPLEtBQVAsRUFBYyxJQUFkLEVBQW9CLElBQXBCLEVBQTBCLElBQTFCLENBQW5DO0FBQ0FBLDJCQUFhLENBQUMsR0FBRCxFQUFNLE1BQU4sQ0FBYjtBQUNBQSx5QkFBVyxDQUFDLEdBQUQsRUFBTSxLQUFOLENBQVg7QUFDQUEsd0NBQTBCLEVBQTFCO0FBQ0FBLHNDQUF3QixDQUFDLEdBQUQsQ0FBeEI7QUFDQUEsaUNBQW1CLENBQUMsSUFBRCxDQUFuQjtBQUNBQSxpQ0FBbUI7QUFBRTNJLEtBQUcsRUFBRTtBQUFQLENBQW5CO0FBQ0EySSwwQkFBWSxDQUFDLElBQUQsRUFBTyxJQUFQLEVBQWEsSUFBYixFQUFtQixJQUFuQixFQUF5QixJQUF6QixFQUErQixJQUEvQixFQUFxQyxJQUFyQyxFQUEyQyxJQUEzQyxFQUFpRCxJQUFqRCxFQUF1RCxJQUF2RCxFQUE2RCxJQUE3RCxDQUFaOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbnVDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUVPLElBQU1FLFVBQVUsR0FBRztBQUN4QkMsVUFBUSxFQUFFeEUscUVBRGM7QUFFeEJ5RSxLQUFHLEVBQUU3RCxnRUFGbUI7QUFHeEI4RCxNQUFJLEVBQUV6RCxpRUFIa0I7QUFJeEIwRCxTQUFPLEVBQUV6RCxvRUFKZTtBQUt4QjBELE9BQUssRUFBRXpELGtFQUxpQjtBQU14QjBELE1BQUksRUFBRXpELGlFQU5rQjtBQU94QjBELE9BQUssRUFBRXpELGtFQVBpQjtBQVF4QjBELFlBQVUsRUFBRXZDLHVFQVJZO0FBU3hCd0MsVUFBUSxFQUFFekIscUVBVGM7QUFVeEIwQixPQUFLLEVBQUV6QixxRUFWaUI7QUFXeEIwQixLQUFHLEVBQUV6Qix5RUFYbUI7QUFZeEIwQixNQUFJLEVBQUVkLGtFQUFhQTtBQVpLLENBQW5CO0FBZUEsSUFBTWUsaUJBQWlCLEdBQUdoUCxNQUFNLENBQUNpUCxJQUFQLENBQVlkLFVBQVosQ0FBMUI7QUFJUCxJQUFNZSxjQUFjLEdBQW9CO0FBQ3RDQyxVQUFRLEVBQUUsS0FENEI7QUFFdENuWCxVQUFRLEVBQUUsQ0FGNEI7QUFHdENELFNBQU8sRUFBRSxLQUg2QjtBQUl0QzdCLGFBQVcsRUFBRSxVQUp5QjtBQUt0QytDLGFBQVcsRUFBRSxVQUx5QjtBQU10Q2tDLGdCQUFjLEVBQUUsUUFOc0I7QUFPdEMrQix3QkFBc0IsRUFBRSxRQVBjO0FBUXRDOUksU0FBTyxFQUFFLFVBUjZCO0FBU3RDdUUsZUFBYSxFQUFFLEtBVHVCO0FBVXRDQyxlQUFhLEVBQUUsT0FWdUI7QUFXdEMwRSx3QkFBc0IsRUFBRSxJQVhjO0FBWXRDTyx5QkFBdUIsRUFBRSxJQVphO0FBYXRDbkcsaUJBQWUsRUFBRSxFQWJxQjtBQWN0QzJHLHFCQUFtQixFQUFFLENBZGlCO0FBZXRDdEIsZ0JBQWMsRUFBRSxLQWZzQjtBQWdCdENxQix3QkFBc0IsRUFBRTtBQWhCYyxDQUF4QztBQW1CQTs7Ozs7Ozs7QUFPTyxJQUFNZ1IsTUFBTSxHQUFHLFNBQVRBLE1BQVMsQ0FBQ2xYLEtBQUQsRUFBOEQ7QUFBQSxNQUE5Q1osR0FBOEMsdUVBQWQsRUFBYzs7QUFDbEYsTUFBSSxPQUFPWSxLQUFQLEtBQWlCLFFBQXJCLEVBQStCO0FBQzdCLFVBQU0sSUFBSUQsS0FBSixDQUFVLGtFQUFpRUMsS0FBakUsQ0FBVixDQUFOO0FBQ0Q7O0FBRUQsTUFBTW1YLE9BQU8sR0FBR0MsY0FBYyxpQ0FDekJKLGNBRHlCLEdBRXpCNVgsR0FGeUIsRUFBOUI7QUFLQSxNQUFNRCxTQUFTLEdBQUc4VyxVQUFVLENBQUNrQixPQUFPLENBQUNGLFFBQVQsQ0FBNUI7QUFDQSxTQUFPLElBQUk5WCxTQUFKLENBQWNnWSxPQUFkLEVBQXVCRCxNQUF2QixDQUE4QmxYLEtBQTlCLENBQVA7QUFDRCxDQVpNO0FBY0EsSUFBTXFYLFdBQWI7QUFBQTs7QUFBQTs7QUFBQTtBQUFBOztBQUFBO0FBQUE7O0FBQUE7QUFBQSxpQ0FBaUN0WCxLQUFqQzs7QUFFQSxTQUFTcVgsY0FBVCxDQUF3QmhZLEdBQXhCLEVBQTRDO0FBQzFDLE1BQUksQ0FBQzBYLGlCQUFpQixDQUFDblMsUUFBbEIsQ0FBMkJ2RixHQUFHLENBQUM2WCxRQUEvQixDQUFMLEVBQStDO0FBQzdDLFVBQU0sSUFBSUksV0FBSixvQ0FBNENqWSxHQUFHLENBQUM2WCxRQUFoRCxFQUFOO0FBQ0Q7O0FBRUQsTUFBSWpCLGlEQUFRLENBQUM1VyxHQUFHLENBQUM2RCxjQUFMLENBQVIsSUFBZ0M3RCxHQUFHLENBQUM2RCxjQUFKLElBQXNCLENBQTFELEVBQTZEO0FBQzNELFVBQU0sSUFBSW9VLFdBQUosQ0FBZ0Isa0RBQWhCLENBQU47QUFDRDs7QUFFRCxNQUFJalksR0FBRyxDQUFDSSxlQUFKLElBQXVCLENBQTNCLEVBQThCO0FBQzVCLFVBQU0sSUFBSTZYLFdBQUosb0VBQ3dEalksR0FBRyxDQUFDSSxlQUQ1RCxlQUFOO0FBR0Q7O0FBRUQsTUFBSUosR0FBRyxDQUFDc0IsYUFBSixLQUFzQixRQUF0QixJQUFrQ3RCLEdBQUcsQ0FBQ1MsT0FBMUMsRUFBbUQ7QUFDakQsVUFBTSxJQUFJd1gsV0FBSixDQUNKLHlFQURJLENBQU47QUFHRDs7QUFFRCxTQUFPalksR0FBUDtBQUNEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ25HTSxJQUFNdVAsTUFBTSxHQUFHLFNBQVRBLE1BQVMsQ0FBQ21ELEdBQUQ7QUFBQSw0QkFBdUIsSUFBSXdGLEdBQUosQ0FBUXhGLEdBQVIsQ0FBdkI7QUFBQSxDQUFmLEVBRVA7O0FBQ08sSUFBTWxULGFBQWEsR0FBRyxTQUFoQkEsYUFBZ0IsQ0FBQzJZLEdBQUQ7QUFBQSxTQUFpQkEsR0FBRyxDQUFDaFgsT0FBSixDQUFZLFNBQVosRUFBd0IsRUFBeEIsQ0FBakI7QUFBQSxDQUF0QixFQUVQOztBQUNPLElBQU1nRyxJQUFJLEdBQUcsU0FBUEEsSUFBTyxDQUFnQnVMLEdBQWhCO0FBQUEsU0FBNkJBLEdBQUcsQ0FBQ0EsR0FBRyxDQUFDdlQsTUFBSixHQUFhLENBQWQsQ0FBaEM7QUFBQSxDQUFiLEVBRVA7O0FBQ08sSUFBTWlPLE9BQU8sR0FBRyxTQUFWQSxPQUFVLENBQUNzRixHQUFEO0FBQUEsU0FBZ0IsQ0FBQzBGLEtBQUssQ0FBQ0MsT0FBTixDQUFjM0YsR0FBZCxDQUFELElBQXVCQSxHQUFHLENBQUN2VCxNQUFKLEtBQWUsQ0FBdEQ7QUFBQSxDQUFoQixFQUVQOztBQUNPLElBQU02SSxZQUFZLEdBQUcsU0FBZkEsWUFBZSxDQUFDbkMsTUFBRDtBQUFBLFNBQW9CQSxNQUFNLENBQUMxRSxPQUFQLENBQWUsMEJBQWYsRUFBdUMsTUFBdkMsQ0FBcEI7QUFBQSxDQUFyQixFQUVQO0FBQ0E7O0FBQ08sSUFBTWtNLGdCQUFnQixHQUFHLFNBQW5CQSxnQkFBbUIsQ0FBQ2lMLE9BQUQ7QUFBQSxTQUM5QkEsT0FBTyxDQUFDQyxJQUFSLENBQWEsVUFBQ0MsQ0FBRCxFQUFJQyxDQUFKO0FBQUEsV0FBVUEsQ0FBQyxDQUFDdFosTUFBRixHQUFXcVosQ0FBQyxDQUFDclosTUFBYixJQUF1QnFaLENBQUMsQ0FBQ0UsYUFBRixDQUFnQkQsQ0FBaEIsQ0FBakM7QUFBQSxHQUFiLENBRDhCO0FBQUEsQ0FBekI7QUFHUDs7QUFDTyxJQUFNNU0sU0FBUyxHQUFHLFNBQVpBLFNBQVksQ0FBQ3lNLE9BQUQ7QUFBQSxTQUN2QkEsT0FBTyxDQUFDOU0sTUFBUixDQUFlLFVBQUNtTixHQUFELEVBQU1DLEdBQU47QUFBQSxXQUFjQyxJQUFJLENBQUNGLEdBQUwsQ0FBU0EsR0FBVCxFQUFjQyxHQUFHLENBQUN6WixNQUFsQixDQUFkO0FBQUEsR0FBZixFQUF3RCxDQUF4RCxDQUR1QjtBQUFBLENBQWxCO0FBR0EsSUFBTXlYLFFBQVEsR0FBRyxTQUFYQSxRQUFXLENBQUN0WixLQUFEO0FBQUEsU0FBaUMsT0FBT0EsS0FBUCxLQUFpQixRQUFsRDtBQUFBLENBQWpCOzs7Ozs7VUN2QlA7VUFDQTs7VUFFQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTs7VUFFQTtVQUNBOztVQUVBO1VBQ0E7VUFDQTs7Ozs7V0N0QkE7V0FDQTtXQUNBO1dBQ0E7V0FDQSx5Q0FBeUMsd0NBQXdDO1dBQ2pGO1dBQ0E7V0FDQTs7Ozs7V0NQQTs7Ozs7V0NBQTtXQUNBO1dBQ0E7V0FDQSx1REFBdUQsaUJBQWlCO1dBQ3hFO1dBQ0EsZ0RBQWdELGFBQWE7V0FDN0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNOQSIsInNvdXJjZXMiOlsid2VicGFjazovL3NxbEZvcm1hdHRlci93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vc3FsRm9ybWF0dGVyLy4vc3JjL2NvcmUvQWxpYXNBcy50cyIsIndlYnBhY2s6Ly9zcWxGb3JtYXR0ZXIvLi9zcmMvY29yZS9Bc1Rva2VuRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9zcWxGb3JtYXR0ZXIvLi9zcmMvY29yZS9Gb3JtYXR0ZXIudHMiLCJ3ZWJwYWNrOi8vc3FsRm9ybWF0dGVyLy4vc3JjL2NvcmUvSW5kZW50YXRpb24udHMiLCJ3ZWJwYWNrOi8vc3FsRm9ybWF0dGVyLy4vc3JjL2NvcmUvSW5saW5lQmxvY2sudHMiLCJ3ZWJwYWNrOi8vc3FsRm9ybWF0dGVyLy4vc3JjL2NvcmUvUGFyYW1zLnRzIiwid2VicGFjazovL3NxbEZvcm1hdHRlci8uL3NyYy9jb3JlL1Rva2VuaXplci50cyIsIndlYnBhY2s6Ly9zcWxGb3JtYXR0ZXIvLi9zcmMvY29yZS9mb3JtYXRBbGlhc1Bvc2l0aW9ucy50cyIsIndlYnBhY2s6Ly9zcWxGb3JtYXR0ZXIvLi9zcmMvY29yZS9mb3JtYXRDb21tYVBvc2l0aW9ucy50cyIsIndlYnBhY2s6Ly9zcWxGb3JtYXR0ZXIvLi9zcmMvY29yZS9yZWdleEZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vc3FsRm9ybWF0dGVyLy4vc3JjL2NvcmUvdGFidWxhclN0eWxlLnRzIiwid2VicGFjazovL3NxbEZvcm1hdHRlci8uL3NyYy9jb3JlL3Rva2VuLnRzIiwid2VicGFjazovL3NxbEZvcm1hdHRlci8uL3NyYy9sYW5ndWFnZXMvYmlncXVlcnkuZm9ybWF0dGVyLnRzIiwid2VicGFjazovL3NxbEZvcm1hdHRlci8uL3NyYy9sYW5ndWFnZXMvZGIyLmZvcm1hdHRlci50cyIsIndlYnBhY2s6Ly9zcWxGb3JtYXR0ZXIvLi9zcmMvbGFuZ3VhZ2VzL2hpdmUuZm9ybWF0dGVyLnRzIiwid2VicGFjazovL3NxbEZvcm1hdHRlci8uL3NyYy9sYW5ndWFnZXMvbWFyaWFkYi5mb3JtYXR0ZXIudHMiLCJ3ZWJwYWNrOi8vc3FsRm9ybWF0dGVyLy4vc3JjL2xhbmd1YWdlcy9teXNxbC5mb3JtYXR0ZXIudHMiLCJ3ZWJwYWNrOi8vc3FsRm9ybWF0dGVyLy4vc3JjL2xhbmd1YWdlcy9uMXFsLmZvcm1hdHRlci50cyIsIndlYnBhY2s6Ly9zcWxGb3JtYXR0ZXIvLi9zcmMvbGFuZ3VhZ2VzL3Bsc3FsLmZvcm1hdHRlci50cyIsIndlYnBhY2s6Ly9zcWxGb3JtYXR0ZXIvLi9zcmMvbGFuZ3VhZ2VzL3Bvc3RncmVzcWwuZm9ybWF0dGVyLnRzIiwid2VicGFjazovL3NxbEZvcm1hdHRlci8uL3NyYy9sYW5ndWFnZXMvcmVkc2hpZnQuZm9ybWF0dGVyLnRzIiwid2VicGFjazovL3NxbEZvcm1hdHRlci8uL3NyYy9sYW5ndWFnZXMvc3BhcmtzcWwuZm9ybWF0dGVyLnRzIiwid2VicGFjazovL3NxbEZvcm1hdHRlci8uL3NyYy9sYW5ndWFnZXMvc3RhbmRhcmRzcWwuZm9ybWF0dGVyLnRzIiwid2VicGFjazovL3NxbEZvcm1hdHRlci8uL3NyYy9sYW5ndWFnZXMvdHNxbC5mb3JtYXR0ZXIudHMiLCJ3ZWJwYWNrOi8vc3FsRm9ybWF0dGVyLy4vc3JjL3NxbEZvcm1hdHRlci50cyIsIndlYnBhY2s6Ly9zcWxGb3JtYXR0ZXIvLi9zcmMvdXRpbHMudHMiLCJ3ZWJwYWNrOi8vc3FsRm9ybWF0dGVyL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL3NxbEZvcm1hdHRlci93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vc3FsRm9ybWF0dGVyL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vc3FsRm9ybWF0dGVyL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vc3FsRm9ybWF0dGVyLy4vc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcInNxbEZvcm1hdHRlclwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJzcWxGb3JtYXR0ZXJcIl0gPSBmYWN0b3J5KCk7XG59KShzZWxmLCAoKSA9PiB7XG5yZXR1cm4gIiwiaW1wb3J0IHsgQWxpYXNNb2RlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgaXNDb21tYW5kLCBpc1Rva2VuLCBUb2tlbiwgVG9rZW5UeXBlIH0gZnJvbSAnLi90b2tlbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9rZW5TdHJlYW0ge1xuICBpc1dpdGhpblNlbGVjdCgpOiBib29sZWFuO1xuICBnZXRQcmV2aW91c1Jlc2VydmVkVG9rZW4oKTogVG9rZW47XG4gIHRva2VuTG9va0JlaGluZChuPzogbnVtYmVyKTogVG9rZW47XG4gIHRva2VuTG9va0FoZWFkKG4/OiBudW1iZXIpOiBUb2tlbjtcbn1cblxuLyoqIERlY2lkZXMgYWRkaXRpb24gYW5kIHJlbW92YWwgb2YgQVMgdG9rZW5zICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBbGlhc0FzIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBhbGlhc0FzOiBBbGlhc01vZGUsIHByaXZhdGUgZm9ybWF0dGVyOiBUb2tlblN0cmVhbSkge31cblxuICAvKiogVHJ1ZSB3aGVuIEFTIGtleXdvcmQgc2hvdWxkIGJlIGFkZGVkICpiZWZvcmUqIGN1cnJlbnQgdG9rZW4gKi9cbiAgcHVibGljIHNob3VsZEFkZEJlZm9yZSh0b2tlbjogVG9rZW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc01pc3NpbmdUYWJsZUFsaWFzKHRva2VuKSB8fCB0aGlzLmlzTWlzc2luZ1NlbGVjdENvbHVtbkFsaWFzKHRva2VuKTtcbiAgfVxuXG4gIC8vIGlmIHRhYmxlIGFsaWFzIGlzIG1pc3NpbmcgYW5kIHNob3VsZCBiZSBhZGRlZFxuICBwcml2YXRlIGlzTWlzc2luZ1RhYmxlQWxpYXModG9rZW46IFRva2VuKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuYWxpYXNBcyA9PT0gJ2Fsd2F5cycgJiYgdG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLldPUkQgJiYgdGhpcy5sb29rQmVoaW5kKCkudmFsdWUgPT09ICcpJ1xuICAgICk7XG4gIH1cblxuICAvLyBpZiBzZWxlY3QgY29sdW1uIGFsaWFzIGlzIG1pc3NpbmcgYW5kIHNob3VsZCBiZSBhZGRlZFxuICBwcml2YXRlIGlzTWlzc2luZ1NlbGVjdENvbHVtbkFsaWFzKHRva2VuOiBUb2tlbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHByZXZUb2tlbiA9IHRoaXMubG9va0JlaGluZCgpO1xuICAgIGNvbnN0IG5leHRUb2tlbiA9IHRoaXMubG9va0FoZWFkKCk7XG4gICAgcmV0dXJuIChcbiAgICAgICh0aGlzLmFsaWFzQXMgPT09ICdhbHdheXMnIHx8IHRoaXMuYWxpYXNBcyA9PT0gJ3NlbGVjdCcpICYmXG4gICAgICB0aGlzLmZvcm1hdHRlci5pc1dpdGhpblNlbGVjdCgpICYmXG4gICAgICB0b2tlbi50eXBlID09PSBUb2tlblR5cGUuV09SRCAmJlxuICAgICAgKGlzVG9rZW4uRU5EKHByZXZUb2tlbikgfHxcbiAgICAgICAgKChwcmV2VG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLldPUkQgfHwgcHJldlRva2VuLnR5cGUgPT09IFRva2VuVHlwZS5OVU1CRVIpICYmXG4gICAgICAgICAgKG5leHRUb2tlbi52YWx1ZSA9PT0gJywnIHx8IGlzQ29tbWFuZChuZXh0VG9rZW4pKSkpXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBUcnVlIHdoZW4gQVMga2V5d29yZCBzaG91bGQgYmUgYWRkZWQgKmFmdGVyKiBjdXJyZW50IHRva2VuICovXG4gIHB1YmxpYyBzaG91bGRBZGRBZnRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0VkZ2VDYXNlQ1RFKCkgfHwgdGhpcy5pc0VkZ2VDYXNlQ3JlYXRlVGFibGUoKSB8fCB0aGlzLmlzTWlzc2luZ1R5cGVDYXN0QXMoKTtcbiAgfVxuXG4gIC8vIGNoZWNrcyBmb3IgQ0FTVCjCq2V4cHJlc3Npb27CuyBbQVNdIHR5cGUpXG4gIHByaXZhdGUgaXNNaXNzaW5nVHlwZUNhc3RBcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5hbGlhc0FzID09PSAnbmV2ZXInICYmXG4gICAgICB0aGlzLmZvcm1hdHRlci5pc1dpdGhpblNlbGVjdCgpICYmXG4gICAgICBpc1Rva2VuLkNBU1QodGhpcy5mb3JtYXR0ZXIuZ2V0UHJldmlvdXNSZXNlcnZlZFRva2VuKCkpICYmXG4gICAgICBpc1Rva2VuLkFTKHRoaXMubG9va0FoZWFkKCkpICYmXG4gICAgICAodGhpcy5sb29rQWhlYWQoMikudHlwZSA9PT0gVG9rZW5UeXBlLldPUkQgfHxcbiAgICAgICAgdGhpcy5sb29rQWhlYWQoMikudHlwZSA9PT0gVG9rZW5UeXBlLlJFU0VSVkVEX0tFWVdPUkQpICYmXG4gICAgICB0aGlzLmxvb2tBaGVhZCgzKS52YWx1ZSA9PT0gJyknXG4gICAgKTtcbiAgfVxuXG4gIC8vIGNoZWNrcyBmb3IgV0lUSCBgdGFibGVgIFtBU10gKFxuICBwcml2YXRlIGlzRWRnZUNhc2VDVEUoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbmV4dFRva2VuID0gdGhpcy5sb29rQWhlYWQoKTtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5hbGlhc0FzID09PSAnbmV2ZXInICYmXG4gICAgICBpc1Rva2VuLldJVEgodGhpcy5sb29rQmVoaW5kKCkpICYmXG4gICAgICAobmV4dFRva2VuLnZhbHVlID09PSAnKCcgfHwgKGlzVG9rZW4uQVMobmV4dFRva2VuKSAmJiB0aGlzLmxvb2tBaGVhZCgyKS52YWx1ZSA9PT0gJygnKSlcbiAgICApO1xuICB9XG5cbiAgLy8gY2hlY2tzIGZvciBDUkVBVEUgVEFCTEUgYHRhYmxlYCBbQVNdIFdJVEggKFxuICBwcml2YXRlIGlzRWRnZUNhc2VDcmVhdGVUYWJsZSgpOiBib29sZWFuIHtcbiAgICBjb25zdCBwcmV2VG9rZW4gPSB0aGlzLmxvb2tCZWhpbmQoKTtcbiAgICBjb25zdCBuZXh0VG9rZW4gPSB0aGlzLmxvb2tBaGVhZCgpO1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmFsaWFzQXMgPT09ICduZXZlcicgJiZcbiAgICAgIChpc1Rva2VuLlRBQkxFKHByZXZUb2tlbikgfHwgcHJldlRva2VuLnZhbHVlLmVuZHNXaXRoKCdUQUJMRScpKSAmJlxuICAgICAgKGlzVG9rZW4uV0lUSChuZXh0VG9rZW4pIHx8IChpc1Rva2VuLkFTKG5leHRUb2tlbikgJiYgaXNUb2tlbi5XSVRIKHRoaXMubG9va0FoZWFkKDIpKSkpXG4gICAgKTtcbiAgfVxuXG4gIC8qIFRydWUgd2hlbiB0aGUgY3VycmVudCBBUyB0b2tlbiBzaG91bGQgYmUgZGlzY2FyZGVkICovXG4gIHB1YmxpYyBzaG91bGRSZW1vdmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYWxpYXNBcyA9PT0gJ25ldmVyJyB8fCAodGhpcy5hbGlhc0FzID09PSAnc2VsZWN0JyAmJiB0aGlzLmlzUmVtb3ZhYmxlTm9uU2VsZWN0QXMoKSk7XG4gIH1cblxuICBwcml2YXRlIGlzUmVtb3ZhYmxlTm9uU2VsZWN0QXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMubG9va0JlaGluZCgpLnZhbHVlID09PSAnKScgJiYgLy8gKSBbQVNdIGFsaWFzIGJ1dCBub3QgU0VMRUNUIChhKSBbQVNdIGFscGhhXG4gICAgICAhdGhpcy5mb3JtYXR0ZXIuaXNXaXRoaW5TZWxlY3QoKSAmJlxuICAgICAgdGhpcy5sb29rQWhlYWQoKS52YWx1ZSAhPT0gJygnIC8vIHNraXAgV0lUSCBmb28gW0FTXSAoIC4uLlxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGxvb2tCZWhpbmQobj86IG51bWJlcik6IFRva2VuIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtYXR0ZXIudG9rZW5Mb29rQmVoaW5kKG4pO1xuICB9XG5cbiAgcHJpdmF0ZSBsb29rQWhlYWQobj86IG51bWJlcik6IFRva2VuIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtYXR0ZXIudG9rZW5Mb29rQWhlYWQobik7XG4gIH1cbn1cbiIsImltcG9ydCB7IEtleXdvcmRDYXNlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgaXNUb2tlbiwgVG9rZW4sIFRva2VuVHlwZSB9IGZyb20gJy4vdG9rZW4nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBc1Rva2VuRmFjdG9yeSB7XG4gIHByaXZhdGUgZGV0ZWN0ZWRDYXNlOiBLZXl3b3JkQ2FzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGtleXdvcmRDYXNlOiBLZXl3b3JkQ2FzZSwgdG9rZW5zOiBUb2tlbltdID0gW10pIHtcbiAgICB0aGlzLmRldGVjdGVkQ2FzZSA9IHRoaXMuYXV0b0RldGVjdENhc2UodG9rZW5zKTtcbiAgfVxuXG4gIHByaXZhdGUgYXV0b0RldGVjdENhc2UodG9rZW5zOiBUb2tlbltdKSB7XG4gICAgY29uc3QgYXNUb2tlbnMgPSB0b2tlbnMuZmlsdGVyKGlzVG9rZW4uQVMpO1xuICAgIGNvbnN0IHVwcGVyQXNUb2tlbnMgPSBhc1Rva2Vucy5maWx0ZXIoKHsgdmFsdWUgfSkgPT4gdmFsdWUgPT09ICdBUycpO1xuICAgIHJldHVybiB1cHBlckFzVG9rZW5zLmxlbmd0aCA+IGFzVG9rZW5zLmxlbmd0aCAvIDIgPyAndXBwZXInIDogJ2xvd2VyJztcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIEFTIHRva2VuIHdpdGggZWl0aGVyIHVwcGVyLSBvciBsb3dlcmNhc2UgdGV4dCAqL1xuICBwdWJsaWMgdG9rZW4oKTogVG9rZW4ge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBUb2tlblR5cGUuUkVTRVJWRURfS0VZV09SRCxcbiAgICAgIHZhbHVlOiB0aGlzLmFzVG9rZW5WYWx1ZSgpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzVG9rZW5WYWx1ZSgpOiAnQVMnIHwgJ2FzJyB7XG4gICAgY29uc3Qga2V5d29yZENhc2UgPSB0aGlzLmtleXdvcmRDYXNlID09PSAncHJlc2VydmUnID8gdGhpcy5kZXRlY3RlZENhc2UgOiB0aGlzLmtleXdvcmRDYXNlO1xuICAgIHJldHVybiBrZXl3b3JkQ2FzZSA9PT0gJ3VwcGVyJyA/ICdBUycgOiAnYXMnO1xuICB9XG59XG4iLCJpbXBvcnQgSW5kZW50YXRpb24gZnJvbSAnLi9JbmRlbnRhdGlvbic7XG5pbXBvcnQgSW5saW5lQmxvY2sgZnJvbSAnLi9JbmxpbmVCbG9jayc7XG5pbXBvcnQgUGFyYW1zIGZyb20gJy4vUGFyYW1zJztcbmltcG9ydCB7IHRyaW1TcGFjZXNFbmQgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBpc1Jlc2VydmVkLCBpc0NvbW1hbmQsIGlzVG9rZW4sIFRva2VuLCBUb2tlblR5cGUsIEVPRl9UT0tFTiB9IGZyb20gJy4vdG9rZW4nO1xuaW1wb3J0IFRva2VuaXplciBmcm9tICcuL1Rva2VuaXplcic7XG5pbXBvcnQgeyBGb3JtYXRPcHRpb25zIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IGZvcm1hdENvbW1hUG9zaXRpb25zIGZyb20gJy4vZm9ybWF0Q29tbWFQb3NpdGlvbnMnO1xuaW1wb3J0IGZvcm1hdEFsaWFzUG9zaXRpb25zIGZyb20gJy4vZm9ybWF0QWxpYXNQb3NpdGlvbnMnO1xuaW1wb3J0IHsgdG9UYWJ1bGFyVG9rZW4sIHJlcGxhY2VUYWJ1bGFyUGxhY2Vob2xkZXJzIH0gZnJvbSAnLi90YWJ1bGFyU3R5bGUnO1xuaW1wb3J0IEFsaWFzQXMgZnJvbSAnLi9BbGlhc0FzJztcbmltcG9ydCBBc1Rva2VuRmFjdG9yeSBmcm9tICcuL0FzVG9rZW5GYWN0b3J5JztcblxuLyoqIE1haW4gZm9ybWF0dGVyIGNsYXNzIHRoYXQgcHJvZHVjZXMgYSBmaW5hbCBvdXRwdXQgc3RyaW5nIGZyb20gbGlzdCBvZiB0b2tlbnMgKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZvcm1hdHRlciB7XG4gIHByaXZhdGUgY2ZnOiBGb3JtYXRPcHRpb25zO1xuICBwcml2YXRlIGluZGVudGF0aW9uOiBJbmRlbnRhdGlvbjtcbiAgcHJpdmF0ZSBpbmxpbmVCbG9jazogSW5saW5lQmxvY2s7XG4gIHByaXZhdGUgYWxpYXNBczogQWxpYXNBcztcbiAgcHJpdmF0ZSBwYXJhbXM6IFBhcmFtcztcbiAgcHJpdmF0ZSBhc1Rva2VuRmFjdG9yeTogQXNUb2tlbkZhY3Rvcnk7XG5cbiAgcHJpdmF0ZSBjdXJyZW50TmV3bGluZSA9IHRydWU7XG4gIHByaXZhdGUgcHJldmlvdXNSZXNlcnZlZFRva2VuOiBUb2tlbiA9IEVPRl9UT0tFTjtcbiAgcHJpdmF0ZSBwcmV2aW91c0NvbW1hbmRUb2tlbjogVG9rZW4gPSBFT0ZfVE9LRU47XG4gIHByb3RlY3RlZCB0b2tlbnM6IFRva2VuW10gPSBbXTtcbiAgcHJvdGVjdGVkIGluZGV4ID0gLTE7XG5cbiAgY29uc3RydWN0b3IoY2ZnOiBGb3JtYXRPcHRpb25zKSB7XG4gICAgdGhpcy5jZmcgPSBjZmc7XG4gICAgdGhpcy5pbmRlbnRhdGlvbiA9IG5ldyBJbmRlbnRhdGlvbih0aGlzLmluZGVudFN0cmluZygpKTtcbiAgICB0aGlzLmlubGluZUJsb2NrID0gbmV3IElubGluZUJsb2NrKHRoaXMuY2ZnLmV4cHJlc3Npb25XaWR0aCk7XG4gICAgdGhpcy5hbGlhc0FzID0gbmV3IEFsaWFzQXModGhpcy5jZmcuYWxpYXNBcywgdGhpcyk7XG4gICAgdGhpcy5wYXJhbXMgPSBuZXcgUGFyYW1zKHRoaXMuY2ZnLnBhcmFtcyk7XG4gICAgdGhpcy5hc1Rva2VuRmFjdG9yeSA9IG5ldyBBc1Rva2VuRmFjdG9yeSh0aGlzLmNmZy5rZXl3b3JkQ2FzZSk7XG4gIH1cblxuICBwcml2YXRlIGluZGVudFN0cmluZygpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmlzVGFidWxhclN0eWxlKCkpIHtcbiAgICAgIHJldHVybiAnICcucmVwZWF0KDEwKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2ZnLnVzZVRhYnMpIHtcbiAgICAgIHJldHVybiAnXFx0JztcbiAgICB9XG4gICAgcmV0dXJuICcgJy5yZXBlYXQodGhpcy5jZmcudGFiV2lkdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNRTCBUb2tlbml6ZXIgZm9yIHRoaXMgZm9ybWF0dGVyLCBwcm92aWRlZCBieSBzdWJjbGFzc2VzLlxuICAgKi9cbiAgcHJvdGVjdGVkIHRva2VuaXplcigpOiBUb2tlbml6ZXIge1xuICAgIHRocm93IG5ldyBFcnJvcigndG9rZW5pemVyKCkgbm90IGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzJyk7XG4gIH1cblxuICAvKipcbiAgICogUmVwcm9jZXNzIGFuZCBtb2RpZnkgYSB0b2tlbiBiYXNlZCBvbiBwYXJzZWQgY29udGV4dC5cbiAgICogU3ViY2xhc3NlcyBjYW4gb3ZlcnJpZGUgdGhpcyB0byBtb2RpZnkgdG9rZW5zIGR1cmluZyBmb3JtYXR0aW5nLlxuICAgKiBAcGFyYW0ge1Rva2VufSB0b2tlbiAtIFRoZSB0b2tlbiB0byBtb2RpZnlcbiAgICogQHJldHVybiB7VG9rZW59IG5ldyB0b2tlbiBvciB0aGUgb3JpZ2luYWxcbiAgICovXG4gIHByb3RlY3RlZCB0b2tlbk92ZXJyaWRlKHRva2VuOiBUb2tlbik6IFRva2VuIHtcbiAgICByZXR1cm4gdG9rZW47XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0cyBhbiBTUUwgcXVlcnkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBxdWVyeSAtIFRoZSBTUUwgcXVlcnkgc3RyaW5nIHRvIGJlIGZvcm1hdHRlZFxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZXIgcXVlcnlcbiAgICovXG4gIHB1YmxpYyBmb3JtYXQocXVlcnk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdGhpcy50b2tlbnMgPSB0aGlzLnRva2VuaXplcigpLnRva2VuaXplKHF1ZXJ5KTtcbiAgICB0aGlzLmFzVG9rZW5GYWN0b3J5ID0gbmV3IEFzVG9rZW5GYWN0b3J5KHRoaXMuY2ZnLmtleXdvcmRDYXNlLCB0aGlzLnRva2Vucyk7XG4gICAgY29uc3QgZm9ybWF0dGVkUXVlcnkgPSB0aGlzLmdldEZvcm1hdHRlZFF1ZXJ5RnJvbVRva2VucygpO1xuICAgIGNvbnN0IGZpbmFsUXVlcnkgPSB0aGlzLnBvc3RGb3JtYXQoZm9ybWF0dGVkUXVlcnkpO1xuXG4gICAgcmV0dXJuIGZpbmFsUXVlcnkucmVwbGFjZSgvXlxcbiovdSwgJycpLnRyaW1FbmQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEb2VzIHBvc3QtcHJvY2Vzc2luZyBvbiB0aGUgZm9ybWF0dGVkIHF1ZXJ5LlxuICAgKi9cbiAgcHJpdmF0ZSBwb3N0Rm9ybWF0KHF1ZXJ5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmNmZy50YWJ1bGF0ZUFsaWFzKSB7XG4gICAgICBxdWVyeSA9IGZvcm1hdEFsaWFzUG9zaXRpb25zKHF1ZXJ5KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2ZnLmNvbW1hUG9zaXRpb24gPT09ICdiZWZvcmUnIHx8IHRoaXMuY2ZnLmNvbW1hUG9zaXRpb24gPT09ICd0YWJ1bGFyJykge1xuICAgICAgcXVlcnkgPSBmb3JtYXRDb21tYVBvc2l0aW9ucyhxdWVyeSwgdGhpcy5jZmcuY29tbWFQb3NpdGlvbiwgdGhpcy5pbmRlbnRTdHJpbmcoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHF1ZXJ5O1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm1zIG1haW4gY29uc3RydWN0aW9uIG9mIHF1ZXJ5IGZyb20gdG9rZW4gbGlzdCwgZGVsZWdhdGVzIHRvIG90aGVyIG1ldGhvZHMgZm9yIGZvcm1hdHRpbmcgYmFzZWQgb24gdG9rZW4gY3JpdGVyaWFcbiAgICovXG4gIHByaXZhdGUgZ2V0Rm9ybWF0dGVkUXVlcnlGcm9tVG9rZW5zKCk6IHN0cmluZyB7XG4gICAgbGV0IGZvcm1hdHRlZFF1ZXJ5ID0gJyc7XG5cbiAgICBmb3IgKHRoaXMuaW5kZXggPSAwOyB0aGlzLmluZGV4IDwgdGhpcy50b2tlbnMubGVuZ3RoOyB0aGlzLmluZGV4KyspIHtcbiAgICAgIGxldCB0b2tlbiA9IHRoaXMudG9rZW5PdmVycmlkZSh0aGlzLnRva2Vuc1t0aGlzLmluZGV4XSk7XG5cbiAgICAgIC8vIGlmIHRva2VuIGlzIGEgUmVzZXJ2ZWQgS2V5d29yZCwgQ29tbWFuZCwgQmluYXJ5IENvbW1hbmQsIERlcGVuZGVudCBDbGF1c2UsIExvZ2ljYWwgT3BlcmF0b3JcbiAgICAgIGlmIChpc1Jlc2VydmVkKHRva2VuKSkge1xuICAgICAgICB0aGlzLnByZXZpb3VzUmVzZXJ2ZWRUb2tlbiA9IHRva2VuO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdG9rZW4udHlwZSAhPT0gVG9rZW5UeXBlLlJFU0VSVkVEX0tFWVdPUkQgJiZcbiAgICAgICAgICB0b2tlbi50eXBlICE9PSBUb2tlblR5cGUuUkVTRVJWRURfSk9JTl9DT05ESVRJT05cbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gY29udmVydCBSZXNlcnZlZCBDb21tYW5kIG9yIExvZ2ljYWwgT3BlcmF0b3IgdG8gdGFidWxhciBmb3JtYXQgaWYgbmVlZGVkXG4gICAgICAgICAgdG9rZW4gPSB0b1RhYnVsYXJUb2tlbih0b2tlbiwgdGhpcy5jZmcuaW5kZW50U3R5bGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlblR5cGUuUkVTRVJWRURfQ09NTUFORCkge1xuICAgICAgICAgIHRoaXMucHJldmlvdXNDb21tYW5kVG9rZW4gPSB0b2tlbjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLkxJTkVfQ09NTUVOVCkge1xuICAgICAgICBmb3JtYXR0ZWRRdWVyeSA9IHRoaXMuZm9ybWF0TGluZUNvbW1lbnQodG9rZW4sIGZvcm1hdHRlZFF1ZXJ5KTtcbiAgICAgIH0gZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLkJMT0NLX0NPTU1FTlQpIHtcbiAgICAgICAgZm9ybWF0dGVkUXVlcnkgPSB0aGlzLmZvcm1hdEJsb2NrQ29tbWVudCh0b2tlbiwgZm9ybWF0dGVkUXVlcnkpO1xuICAgICAgfSBlbHNlIGlmICh0b2tlbi50eXBlID09PSBUb2tlblR5cGUuUkVTRVJWRURfQ09NTUFORCkge1xuICAgICAgICB0aGlzLmN1cnJlbnROZXdsaW5lID0gdGhpcy5jaGVja05ld2xpbmUodG9rZW4pO1xuICAgICAgICBmb3JtYXR0ZWRRdWVyeSA9IHRoaXMuZm9ybWF0Q29tbWFuZCh0b2tlbiwgZm9ybWF0dGVkUXVlcnkpO1xuICAgICAgfSBlbHNlIGlmICh0b2tlbi50eXBlID09PSBUb2tlblR5cGUuUkVTRVJWRURfQklOQVJZX0NPTU1BTkQpIHtcbiAgICAgICAgZm9ybWF0dGVkUXVlcnkgPSB0aGlzLmZvcm1hdEJpbmFyeUNvbW1hbmQodG9rZW4sIGZvcm1hdHRlZFF1ZXJ5KTtcbiAgICAgIH0gZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLlJFU0VSVkVEX0RFUEVOREVOVF9DTEFVU0UpIHtcbiAgICAgICAgZm9ybWF0dGVkUXVlcnkgPSB0aGlzLmZvcm1hdERlcGVuZGVudENsYXVzZSh0b2tlbiwgZm9ybWF0dGVkUXVlcnkpO1xuICAgICAgfSBlbHNlIGlmICh0b2tlbi50eXBlID09PSBUb2tlblR5cGUuUkVTRVJWRURfSk9JTl9DT05ESVRJT04pIHtcbiAgICAgICAgZm9ybWF0dGVkUXVlcnkgPSB0aGlzLmZvcm1hdEpvaW5Db25kaXRpb24odG9rZW4sIGZvcm1hdHRlZFF1ZXJ5KTtcbiAgICAgIH0gZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLlJFU0VSVkVEX0xPR0lDQUxfT1BFUkFUT1IpIHtcbiAgICAgICAgZm9ybWF0dGVkUXVlcnkgPSB0aGlzLmZvcm1hdExvZ2ljYWxPcGVyYXRvcih0b2tlbiwgZm9ybWF0dGVkUXVlcnkpO1xuICAgICAgfSBlbHNlIGlmICh0b2tlbi50eXBlID09PSBUb2tlblR5cGUuUkVTRVJWRURfS0VZV09SRCkge1xuICAgICAgICBmb3JtYXR0ZWRRdWVyeSA9IHRoaXMuZm9ybWF0S2V5d29yZCh0b2tlbiwgZm9ybWF0dGVkUXVlcnkpO1xuICAgICAgfSBlbHNlIGlmICh0b2tlbi50eXBlID09PSBUb2tlblR5cGUuQkxPQ0tfU1RBUlQpIHtcbiAgICAgICAgZm9ybWF0dGVkUXVlcnkgPSB0aGlzLmZvcm1hdEJsb2NrU3RhcnQodG9rZW4sIGZvcm1hdHRlZFF1ZXJ5KTtcbiAgICAgIH0gZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLkJMT0NLX0VORCkge1xuICAgICAgICBmb3JtYXR0ZWRRdWVyeSA9IHRoaXMuZm9ybWF0QmxvY2tFbmQodG9rZW4sIGZvcm1hdHRlZFF1ZXJ5KTtcbiAgICAgIH0gZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLlBMQUNFSE9MREVSKSB7XG4gICAgICAgIGZvcm1hdHRlZFF1ZXJ5ID0gdGhpcy5mb3JtYXRQbGFjZWhvbGRlcih0b2tlbiwgZm9ybWF0dGVkUXVlcnkpO1xuICAgICAgfSBlbHNlIGlmICh0b2tlbi50eXBlID09PSBUb2tlblR5cGUuT1BFUkFUT1IpIHtcbiAgICAgICAgZm9ybWF0dGVkUXVlcnkgPSB0aGlzLmZvcm1hdE9wZXJhdG9yKHRva2VuLCBmb3JtYXR0ZWRRdWVyeSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3JtYXR0ZWRRdWVyeSA9IHRoaXMuZm9ybWF0V29yZCh0b2tlbiwgZm9ybWF0dGVkUXVlcnkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVwbGFjZVRhYnVsYXJQbGFjZWhvbGRlcnMoZm9ybWF0dGVkUXVlcnkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdHMgd29yZCB0b2tlbnMgKyBhbnkgcG90ZW50aWFsIEFTIHRva2VucyBmb3IgYWxpYXNlc1xuICAgKi9cbiAgcHJpdmF0ZSBmb3JtYXRXb3JkKHRva2VuOiBUb2tlbiwgcXVlcnk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IGZpbmFsUXVlcnkgPSBxdWVyeTtcbiAgICBpZiAodGhpcy5hbGlhc0FzLnNob3VsZEFkZEJlZm9yZSh0b2tlbikpIHtcbiAgICAgIGZpbmFsUXVlcnkgPSB0aGlzLmZvcm1hdFdpdGhTcGFjZXModGhpcy5hc1Rva2VuRmFjdG9yeS50b2tlbigpLCBmaW5hbFF1ZXJ5KTtcbiAgICB9XG5cbiAgICBmaW5hbFF1ZXJ5ID0gdGhpcy5mb3JtYXRXaXRoU3BhY2VzKHRva2VuLCBmaW5hbFF1ZXJ5KTtcblxuICAgIGlmICh0aGlzLmFsaWFzQXMuc2hvdWxkQWRkQWZ0ZXIoKSkge1xuICAgICAgZmluYWxRdWVyeSA9IHRoaXMuZm9ybWF0V2l0aFNwYWNlcyh0aGlzLmFzVG9rZW5GYWN0b3J5LnRva2VuKCksIGZpbmFsUXVlcnkpO1xuICAgIH1cblxuICAgIHJldHVybiBmaW5hbFF1ZXJ5O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhIG5ld2xpbmUgc2hvdWxkIGN1cnJlbnRseSBiZSBpbnNlcnRlZFxuICAgKi9cbiAgcHJpdmF0ZSBjaGVja05ld2xpbmUodG9rZW46IFRva2VuKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbmV4dFRva2VucyA9IHRoaXMudG9rZW5zVW50aWxOZXh0Q29tbWFuZE9yUXVlcnlFbmQoKTtcblxuICAgIC8vIGF1dG8gYnJlYWsgaWYgU0VMRUNUIGluY2x1ZGVzIENBU0Ugc3RhdGVtZW50c1xuICAgIGlmICh0aGlzLmlzV2l0aGluU2VsZWN0KCkgJiYgbmV4dFRva2Vucy5zb21lKGlzVG9rZW4uQ0FTRSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHN3aXRjaCAodGhpcy5jZmcubXVsdGlsaW5lTGlzdHMpIHtcbiAgICAgIGNhc2UgJ2Fsd2F5cyc6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgY2FzZSAnYXZvaWQnOlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICBjYXNlICdleHByZXNzaW9uV2lkdGgnOlxuICAgICAgICByZXR1cm4gdGhpcy5pbmxpbmVXaWR0aCh0b2tlbiwgbmV4dFRva2VucykgPiB0aGlzLmNmZy5leHByZXNzaW9uV2lkdGg7XG4gICAgICBkZWZhdWx0OiAvLyBtdWx0aWxpbmVMaXN0cyBtb2RlIGlzIGEgbnVtYmVyXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgdGhpcy5jb3VudENsYXVzZXMobmV4dFRva2VucykgPiB0aGlzLmNmZy5tdWx0aWxpbmVMaXN0cyB8fFxuICAgICAgICAgIHRoaXMuaW5saW5lV2lkdGgodG9rZW4sIG5leHRUb2tlbnMpID4gdGhpcy5jZmcuZXhwcmVzc2lvbldpZHRoXG4gICAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbmxpbmVXaWR0aCh0b2tlbjogVG9rZW4sIHRva2VuczogVG9rZW5bXSk6IG51bWJlciB7XG4gICAgY29uc3QgdG9rZW5zU3RyaW5nID0gdG9rZW5zLm1hcCgoeyB2YWx1ZSB9KSA9PiAodmFsdWUgPT09ICcsJyA/IHZhbHVlICsgJyAnIDogdmFsdWUpKS5qb2luKCcnKTtcbiAgICByZXR1cm4gYCR7dG9rZW4ud2hpdGVzcGFjZUJlZm9yZX0ke3Rva2VuLnZhbHVlfSAke3Rva2Vuc1N0cmluZ31gLmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3VudHMgY29tbWEtc2VwYXJhdGVkIGNsYXVzZXMgKGRvZXNuJ3QgY291bnQgY29tbWFzIGluc2lkZSBibG9ja3MpXG4gICAqIE5vdGU6IFRoZXJlJ3MgYWx3YXlzIGF0IGxlYXN0IG9uZSBjbGF1c2UuXG4gICAqL1xuICBwcml2YXRlIGNvdW50Q2xhdXNlcyh0b2tlbnM6IFRva2VuW10pOiBudW1iZXIge1xuICAgIGxldCBjb3VudCA9IDE7XG4gICAgbGV0IG9wZW5CbG9ja3MgPSAwO1xuICAgIGZvciAoY29uc3QgeyB0eXBlLCB2YWx1ZSB9IG9mIHRva2Vucykge1xuICAgICAgaWYgKHZhbHVlID09PSAnLCcgJiYgb3BlbkJsb2NrcyA9PT0gMCkge1xuICAgICAgICBjb3VudCsrO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGUgPT09IFRva2VuVHlwZS5CTE9DS19TVEFSVCkge1xuICAgICAgICBvcGVuQmxvY2tzKys7XG4gICAgICB9XG4gICAgICBpZiAodHlwZSA9PT0gVG9rZW5UeXBlLkJMT0NLX0VORCkge1xuICAgICAgICBvcGVuQmxvY2tzLS07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb3VudDtcbiAgfVxuXG4gIC8qKiBnZXQgYWxsIHRva2VucyBiZXR3ZWVuIGN1cnJlbnQgdG9rZW4gYW5kIG5leHQgUmVzZXJ2ZWQgQ29tbWFuZCBvciBxdWVyeSBlbmQgKi9cbiAgcHJpdmF0ZSB0b2tlbnNVbnRpbE5leHRDb21tYW5kT3JRdWVyeUVuZCgpOiBUb2tlbltdIHtcbiAgICBjb25zdCB0YWlsID0gdGhpcy50b2tlbnMuc2xpY2UodGhpcy5pbmRleCArIDEpO1xuICAgIHJldHVybiB0YWlsLnNsaWNlKFxuICAgICAgMCxcbiAgICAgIHRhaWwubGVuZ3RoID8gdGFpbC5maW5kSW5kZXgodG9rZW4gPT4gaXNDb21tYW5kKHRva2VuKSB8fCB0b2tlbi52YWx1ZSA9PT0gJzsnKSA6IHVuZGVmaW5lZFxuICAgICk7XG4gIH1cblxuICAvKiogRm9ybWF0cyBhIGxpbmUgY29tbWVudCBvbnRvIHF1ZXJ5ICovXG4gIHByaXZhdGUgZm9ybWF0TGluZUNvbW1lbnQodG9rZW46IFRva2VuLCBxdWVyeTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5hZGROZXdsaW5lKHF1ZXJ5ICsgdGhpcy5zaG93KHRva2VuKSk7XG4gIH1cblxuICAvKiogRm9ybWF0cyBhIGJsb2NrIGNvbW1lbnQgb250byBxdWVyeSAqL1xuICBwcml2YXRlIGZvcm1hdEJsb2NrQ29tbWVudCh0b2tlbjogVG9rZW4sIHF1ZXJ5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmFkZE5ld2xpbmUodGhpcy5hZGROZXdsaW5lKHF1ZXJ5KSArIHRoaXMuaW5kZW50Q29tbWVudCh0b2tlbi52YWx1ZSkpO1xuICB9XG5cbiAgLyoqIEFsaWducyBjb21tZW50IHRvIGN1cnJlbnQgaW5kZW50YXRpb24gbGV2ZWwgKi9cbiAgcHJpdmF0ZSBpbmRlbnRDb21tZW50KGNvbW1lbnQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNvbW1lbnQucmVwbGFjZSgvXFxuWyBcXHRdKi9ndSwgJ1xcbicgKyB0aGlzLmluZGVudGF0aW9uLmdldEluZGVudCgpICsgJyAnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXRzIGEgUmVzZXJ2ZWQgQ29tbWFuZCBvbnRvIHF1ZXJ5LCBpbmNyZWFzaW5nIGluZGVudGF0aW9uIGxldmVsIHdoZXJlIG5lY2Vzc2FyeVxuICAgKi9cbiAgcHJpdmF0ZSBmb3JtYXRDb21tYW5kKHRva2VuOiBUb2tlbiwgcXVlcnk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdGhpcy5pbmRlbnRhdGlvbi5kZWNyZWFzZVRvcExldmVsKCk7XG5cbiAgICBxdWVyeSA9IHRoaXMuYWRkTmV3bGluZShxdWVyeSk7XG5cbiAgICAvLyBpbmRlbnQgdGFidWxhciBmb3JtYXRzLCBleGNlcHQgd2hlbiBwcmVjZWRpbmcgYSAoXG4gICAgaWYgKHRoaXMuaXNUYWJ1bGFyU3R5bGUoKSkge1xuICAgICAgaWYgKHRoaXMudG9rZW5Mb29rQWhlYWQoKS52YWx1ZSAhPT0gJygnKSB7XG4gICAgICAgIHRoaXMuaW5kZW50YXRpb24uaW5jcmVhc2VUb3BMZXZlbCgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmluZGVudGF0aW9uLmluY3JlYXNlVG9wTGV2ZWwoKTtcbiAgICB9XG5cbiAgICBxdWVyeSArPSB0aGlzLmVxdWFsaXplV2hpdGVzcGFjZSh0aGlzLnNob3codG9rZW4pKTsgLy8gcHJpbnQgdG9rZW4gb250byBxdWVyeVxuICAgIGlmICh0aGlzLmN1cnJlbnROZXdsaW5lICYmICF0aGlzLmlzVGFidWxhclN0eWxlKCkpIHtcbiAgICAgIHF1ZXJ5ID0gdGhpcy5hZGROZXdsaW5lKHF1ZXJ5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcXVlcnkgKz0gJyAnO1xuICAgIH1cbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0cyBhIFJlc2VydmVkIEJpbmFyeSBDb21tYW5kIG9udG8gcXVlcnksIGpvaW5pbmcgbmVpZ2hib3VyaW5nIHRva2Vuc1xuICAgKi9cbiAgcHJpdmF0ZSBmb3JtYXRCaW5hcnlDb21tYW5kKHRva2VuOiBUb2tlbiwgcXVlcnk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgaXNKb2luID0gL0pPSU4vaS50ZXN0KHRva2VuLnZhbHVlKTsgLy8gY2hlY2sgaWYgdG9rZW4gY29udGFpbnMgSk9JTlxuICAgIGlmICghaXNKb2luIHx8IHRoaXMuaXNUYWJ1bGFyU3R5bGUoKSkge1xuICAgICAgLy8gZGVjcmVhc2UgZm9yIGJvb2xlYW4gc2V0IG9wZXJhdG9ycyBvciBpbiB0YWJ1bGFyIG1vZGVcbiAgICAgIHRoaXMuaW5kZW50YXRpb24uZGVjcmVhc2VUb3BMZXZlbCgpO1xuICAgIH1cbiAgICBxdWVyeSA9IHRoaXMuYWRkTmV3bGluZShxdWVyeSkgKyB0aGlzLmVxdWFsaXplV2hpdGVzcGFjZSh0aGlzLnNob3codG9rZW4pKTtcbiAgICByZXR1cm4gaXNKb2luID8gcXVlcnkgKyAnICcgOiB0aGlzLmFkZE5ld2xpbmUocXVlcnkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdHMgYSBSZXNlcnZlZCBLZXl3b3JkIG9udG8gcXVlcnksIHNraXBwaW5nIEFTIGlmIGRpc2FibGVkXG4gICAqL1xuICBwcml2YXRlIGZvcm1hdEtleXdvcmQodG9rZW46IFRva2VuLCBxdWVyeTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoaXNUb2tlbi5BUyh0b2tlbikgJiYgdGhpcy5hbGlhc0FzLnNob3VsZFJlbW92ZSgpKSB7XG4gICAgICByZXR1cm4gcXVlcnk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZm9ybWF0V2l0aFNwYWNlcyh0b2tlbiwgcXVlcnkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdHMgYSBSZXNlcnZlZCBEZXBlbmRlbnQgQ2xhdXNlIHRva2VuIG9udG8gcXVlcnksIHN1cHBvcnRpbmcgdGhlIGtleXdvcmQgdGhhdCBwcmVjZWRlcyBpdFxuICAgKi9cbiAgcHJpdmF0ZSBmb3JtYXREZXBlbmRlbnRDbGF1c2UodG9rZW46IFRva2VuLCBxdWVyeTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5hZGROZXdsaW5lKHF1ZXJ5KSArIHRoaXMuZXF1YWxpemVXaGl0ZXNwYWNlKHRoaXMuc2hvdyh0b2tlbikpICsgJyAnO1xuICB9XG5cbiAgLy8gRm9ybWF0cyBPTiBhbmQgVVNJTkcga2V5d29yZHNcbiAgcHJpdmF0ZSBmb3JtYXRKb2luQ29uZGl0aW9uKHRva2VuOiBUb2tlbiwgcXVlcnk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHF1ZXJ5ICsgdGhpcy5lcXVhbGl6ZVdoaXRlc3BhY2UodGhpcy5zaG93KHRva2VuKSkgKyAnICc7XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0cyBhbiBPcGVyYXRvciBvbnRvIHF1ZXJ5LCBmb2xsb3dpbmcgcnVsZXMgZm9yIHNwZWNpZmljIGNoYXJhY3RlcnNcbiAgICovXG4gIHByaXZhdGUgZm9ybWF0T3BlcmF0b3IodG9rZW46IFRva2VuLCBxdWVyeTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBzcGVjaWFsIG9wZXJhdG9yXG4gICAgaWYgKHRva2VuLnZhbHVlID09PSAnLCcpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1hdENvbW1hKHRva2VuLCBxdWVyeSk7XG4gICAgfSBlbHNlIGlmICh0b2tlbi52YWx1ZSA9PT0gJzsnKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtYXRRdWVyeVNlcGFyYXRvcih0b2tlbiwgcXVlcnkpO1xuICAgIH0gZWxzZSBpZiAoWyckJywgJ1snXS5pbmNsdWRlcyh0b2tlbi52YWx1ZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1hdFdpdGhTcGFjZXModG9rZW4sIHF1ZXJ5LCAnYmVmb3JlJyk7XG4gICAgfSBlbHNlIGlmIChbJzonLCAnXSddLmluY2x1ZGVzKHRva2VuLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0V2l0aFNwYWNlcyh0b2tlbiwgcXVlcnksICdhZnRlcicpO1xuICAgIH0gZWxzZSBpZiAoWycuJywgJ3snLCAnfScsICdgJ10uaW5jbHVkZXModG9rZW4udmFsdWUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtYXRXaXRob3V0U3BhY2VzKHRva2VuLCBxdWVyeSk7XG4gICAgfVxuXG4gICAgLy8gcmVndWxhciBvcGVyYXRvclxuICAgIGlmICh0aGlzLmNmZy5kZW5zZU9wZXJhdG9ycyAmJiB0aGlzLnRva2VuTG9va0JlaGluZCgpLnR5cGUgIT09IFRva2VuVHlwZS5SRVNFUlZFRF9DT01NQU5EKSB7XG4gICAgICAvLyBkbyBub3QgdHJpbSB3aGl0ZXNwYWNlIGlmIFNFTEVDVCAqXG4gICAgICByZXR1cm4gdGhpcy5mb3JtYXRXaXRob3V0U3BhY2VzKHRva2VuLCBxdWVyeSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZvcm1hdFdpdGhTcGFjZXModG9rZW4sIHF1ZXJ5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXRzIGEgTG9naWNhbCBPcGVyYXRvciBvbnRvIHF1ZXJ5LCBqb2luaW5nIGJvb2xlYW4gY29uZGl0aW9uc1xuICAgKi9cbiAgcHJpdmF0ZSBmb3JtYXRMb2dpY2FsT3BlcmF0b3IodG9rZW46IFRva2VuLCBxdWVyeTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBpZ25vcmUgQU5EIHdoZW4gQkVUV0VFTiB4IFtBTkRdIHlcbiAgICBpZiAoaXNUb2tlbi5BTkQodG9rZW4pICYmIGlzVG9rZW4uQkVUV0VFTih0aGlzLnRva2VuTG9va0JlaGluZCgyKSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1hdFdpdGhTcGFjZXModG9rZW4sIHF1ZXJ5KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1RhYnVsYXJTdHlsZSgpKSB7XG4gICAgICB0aGlzLmluZGVudGF0aW9uLmRlY3JlYXNlVG9wTGV2ZWwoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jZmcubG9naWNhbE9wZXJhdG9yTmV3bGluZSA9PT0gJ2JlZm9yZScpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICh0aGlzLmN1cnJlbnROZXdsaW5lID8gdGhpcy5hZGROZXdsaW5lKHF1ZXJ5KSA6IHF1ZXJ5KSArXG4gICAgICAgIHRoaXMuZXF1YWxpemVXaGl0ZXNwYWNlKHRoaXMuc2hvdyh0b2tlbikpICtcbiAgICAgICAgJyAnXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBxdWVyeSArPSB0aGlzLnNob3codG9rZW4pO1xuICAgICAgcmV0dXJuIHRoaXMuY3VycmVudE5ld2xpbmUgPyB0aGlzLmFkZE5ld2xpbmUocXVlcnkpIDogcXVlcnk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFJlcGxhY2UgYW55IHNlcXVlbmNlIG9mIHdoaXRlc3BhY2UgY2hhcmFjdGVycyB3aXRoIHNpbmdsZSBzcGFjZSAqL1xuICBwcml2YXRlIGVxdWFsaXplV2hpdGVzcGFjZShzdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXHMrL2d1LCAnICcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdHMgYSBCbG9jayBTdGFydCB0b2tlbiAobGVmdCBwYXJlbi9icmFja2V0L2JyYWNlLCBDQVNFKSBvbnRvIHF1ZXJ5LCBiZWdpbm5pbmcgYW4gSW5saW5lIEJsb2NrIG9yIGluY3JlYXNpbmcgaW5kZW50YXRpb24gd2hlcmUgbmVjZXNzYXJ5XG4gICAqL1xuICBwcml2YXRlIGZvcm1hdEJsb2NrU3RhcnQodG9rZW46IFRva2VuLCBxdWVyeTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoaXNUb2tlbi5DQVNFKHRva2VuKSkge1xuICAgICAgcXVlcnkgPSB0aGlzLmZvcm1hdFdpdGhTcGFjZXModG9rZW4sIHF1ZXJ5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGFrZSBvdXQgdGhlIHByZWNlZGluZyBzcGFjZSB1bmxlc3MgdGhlcmUgd2FzIHdoaXRlc3BhY2UgdGhlcmUgaW4gdGhlIG9yaWdpbmFsIHF1ZXJ5XG4gICAgICAvLyBvciBhbm90aGVyIG9wZW5pbmcgcGFyZW5zIG9yIGxpbmUgY29tbWVudFxuICAgICAgY29uc3QgcHJlc2VydmVXaGl0ZXNwYWNlRm9yID0gW1xuICAgICAgICBUb2tlblR5cGUuQkxPQ0tfU1RBUlQsXG4gICAgICAgIFRva2VuVHlwZS5MSU5FX0NPTU1FTlQsXG4gICAgICAgIFRva2VuVHlwZS5PUEVSQVRPUixcbiAgICAgIF07XG4gICAgICBpZiAoXG4gICAgICAgIHRva2VuLndoaXRlc3BhY2VCZWZvcmU/Lmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAhcHJlc2VydmVXaGl0ZXNwYWNlRm9yLmluY2x1ZGVzKHRoaXMudG9rZW5Mb29rQmVoaW5kKCkudHlwZSlcbiAgICAgICkge1xuICAgICAgICBxdWVyeSA9IHRyaW1TcGFjZXNFbmQocXVlcnkpO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5jZmcubmV3bGluZUJlZm9yZU9wZW5QYXJlbikge1xuICAgICAgICBxdWVyeSA9IHF1ZXJ5LnRyaW1FbmQoKSArICcgJztcbiAgICAgIH1cbiAgICAgIHF1ZXJ5ICs9IHRoaXMuc2hvdyh0b2tlbik7XG4gICAgICB0aGlzLmlubGluZUJsb2NrLmJlZ2luSWZQb3NzaWJsZSh0aGlzLnRva2VucywgdGhpcy5pbmRleCk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmlubGluZUJsb2NrLmlzQWN0aXZlKCkpIHtcbiAgICAgIHRoaXMuaW5kZW50YXRpb24uaW5jcmVhc2VCbG9ja0xldmVsKCk7XG4gICAgICBpZiAoIWlzVG9rZW4uQ0FTRSh0b2tlbikgfHwgdGhpcy5jZmcubXVsdGlsaW5lTGlzdHMgPT09ICdhbHdheXMnKSB7XG4gICAgICAgIHF1ZXJ5ID0gdGhpcy5hZGROZXdsaW5lKHF1ZXJ5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHF1ZXJ5O1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdHMgYSBCbG9jayBFbmQgdG9rZW4gKHJpZ2h0IHBhcmVuL2JyYWNrZXQvYnJhY2UsIEVORCkgb250byBxdWVyeSwgY2xvc2luZyBhbiBJbmxpbmUgQmxvY2sgb3IgZGVjcmVhc2luZyBpbmRlbnRhdGlvbiB3aGVyZSBuZWNlc3NhcnlcbiAgICovXG4gIHByaXZhdGUgZm9ybWF0QmxvY2tFbmQodG9rZW46IFRva2VuLCBxdWVyeTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5pbmxpbmVCbG9jay5pc0FjdGl2ZSgpKSB7XG4gICAgICB0aGlzLmlubGluZUJsb2NrLmVuZCgpO1xuICAgICAgaWYgKGlzVG9rZW4uRU5EKHRva2VuKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXRXaXRoU3BhY2VzKHRva2VuLCBxdWVyeSk7IC8vIGFkZCBzcGFjZSBiZWZvcmUgRU5EIHdoZW4gY2xvc2luZyBpbmxpbmUgYmxvY2tcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmZvcm1hdFdpdGhTcGFjZXModG9rZW4sIHF1ZXJ5LCAnYWZ0ZXInKTsgLy8gZG8gbm90IGFkZCBzcGFjZSBiZWZvcmUgKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmluZGVudGF0aW9uLmRlY3JlYXNlQmxvY2tMZXZlbCgpO1xuXG4gICAgICBpZiAodGhpcy5pc1RhYnVsYXJTdHlsZSgpKSB7XG4gICAgICAgIC8vICsxIGV4dHJhIGluZGVudGF0aW9uIHN0ZXAgZm9yIHRoZSBjbG9zaW5nIHBhcmVuXG4gICAgICAgIHF1ZXJ5ID0gdGhpcy5hZGROZXdsaW5lKHF1ZXJ5KSArIHRoaXMuaW5kZW50YXRpb24uZ2V0U2luZ2xlSW5kZW50KCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2ZnLm5ld2xpbmVCZWZvcmVDbG9zZVBhcmVuKSB7XG4gICAgICAgIHF1ZXJ5ID0gdGhpcy5hZGROZXdsaW5lKHF1ZXJ5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXJ5ID0gcXVlcnkudHJpbUVuZCgpICsgJyAnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5mb3JtYXRXaXRoU3BhY2VzKHRva2VuLCBxdWVyeSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdHMgYSBQbGFjZWhvbGRlciBpdGVtIG9udG8gcXVlcnksIHRvIGJlIHJlcGxhY2VkIHdpdGggdGhlIHZhbHVlIG9mIHRoZSBwbGFjZWhvbGRlclxuICAgKi9cbiAgZm9ybWF0UGxhY2Vob2xkZXIodG9rZW46IFRva2VuLCBxdWVyeTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcXVlcnkgKyB0aGlzLnBhcmFtcy5nZXQodG9rZW4pICsgJyAnO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdHMgYSBjb21tYSBPcGVyYXRvciBvbnRvIHF1ZXJ5LCBlbmRpbmcgbGluZSB1bmxlc3MgaW4gYW4gSW5saW5lIEJsb2NrXG4gICAqL1xuICBwcml2YXRlIGZvcm1hdENvbW1hKHRva2VuOiBUb2tlbiwgcXVlcnk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcXVlcnkgPSB0cmltU3BhY2VzRW5kKHF1ZXJ5KSArIHRoaXMuc2hvdyh0b2tlbikgKyAnICc7XG5cbiAgICBpZiAodGhpcy5pbmxpbmVCbG9jay5pc0FjdGl2ZSgpKSB7XG4gICAgICByZXR1cm4gcXVlcnk7XG4gICAgfSBlbHNlIGlmIChpc1Rva2VuLkxJTUlUKHRoaXMuZ2V0UHJldmlvdXNSZXNlcnZlZFRva2VuKCkpKSB7XG4gICAgICByZXR1cm4gcXVlcnk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnROZXdsaW5lKSB7XG4gICAgICByZXR1cm4gdGhpcy5hZGROZXdsaW5lKHF1ZXJ5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHF1ZXJ5O1xuICAgIH1cbiAgfVxuXG4gIC8qKiBTaW1wbGUgYXBwZW5kIG9mIHRva2VuIG9udG8gcXVlcnkgKi9cbiAgcHJpdmF0ZSBmb3JtYXRXaXRob3V0U3BhY2VzKHRva2VuOiBUb2tlbiwgcXVlcnk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRyaW1TcGFjZXNFbmQocXVlcnkpICsgdGhpcy5zaG93KHRva2VuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgdG9rZW4gb250byBxdWVyeSB3aXRoIHNwYWNlcyAtIGVpdGhlciBiZWZvcmUsIGFmdGVyLCBvciBib3RoXG4gICAqL1xuICBwcml2YXRlIGZvcm1hdFdpdGhTcGFjZXMoXG4gICAgdG9rZW46IFRva2VuLFxuICAgIHF1ZXJ5OiBzdHJpbmcsXG4gICAgYWRkU3BhY2U6ICdiZWZvcmUnIHwgJ2FmdGVyJyB8ICdib3RoJyA9ICdib3RoJ1xuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IGJlZm9yZSA9IGFkZFNwYWNlID09PSAnYWZ0ZXInID8gdHJpbVNwYWNlc0VuZChxdWVyeSkgOiBxdWVyeTtcbiAgICBjb25zdCBhZnRlciA9IGFkZFNwYWNlID09PSAnYmVmb3JlJyA/ICcnIDogJyAnO1xuICAgIHJldHVybiBiZWZvcmUgKyB0aGlzLnNob3codG9rZW4pICsgYWZ0ZXI7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdFF1ZXJ5U2VwYXJhdG9yKHRva2VuOiBUb2tlbiwgcXVlcnk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdGhpcy5pbmRlbnRhdGlvbi5yZXNldEluZGVudGF0aW9uKCk7XG4gICAgcmV0dXJuIFtcbiAgICAgIHRyaW1TcGFjZXNFbmQocXVlcnkpLFxuICAgICAgdGhpcy5jZmcubmV3bGluZUJlZm9yZVNlbWljb2xvbiA/ICdcXG4nIDogJycsXG4gICAgICB0aGlzLnNob3codG9rZW4pLFxuICAgICAgJ1xcbicucmVwZWF0KHRoaXMuY2ZnLmxpbmVzQmV0d2VlblF1ZXJpZXMgKyAxKSxcbiAgICBdLmpvaW4oJycpO1xuICB9XG5cbiAgLyoqIENvbnZlcnRzIHRva2VuIHRvIHN0cmluZywgdXBwZXJjYXNpbmcgaWYgZW5hYmxlZCAqL1xuICBwcml2YXRlIHNob3codG9rZW46IFRva2VuKTogc3RyaW5nIHtcbiAgICBpZiAoXG4gICAgICBpc1Jlc2VydmVkKHRva2VuKSB8fFxuICAgICAgdG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLkJMT0NLX1NUQVJUIHx8XG4gICAgICB0b2tlbi50eXBlID09PSBUb2tlblR5cGUuQkxPQ0tfRU5EXG4gICAgKSB7XG4gICAgICBzd2l0Y2ggKHRoaXMuY2ZnLmtleXdvcmRDYXNlKSB7XG4gICAgICAgIGNhc2UgJ3ByZXNlcnZlJzpcbiAgICAgICAgICByZXR1cm4gdG9rZW4udmFsdWU7XG4gICAgICAgIGNhc2UgJ3VwcGVyJzpcbiAgICAgICAgICByZXR1cm4gdG9rZW4udmFsdWUudG9VcHBlckNhc2UoKTtcbiAgICAgICAgY2FzZSAnbG93ZXInOlxuICAgICAgICAgIHJldHVybiB0b2tlbi52YWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdG9rZW4udmFsdWU7XG4gICAgfVxuICB9XG5cbiAgLyoqIEluc2VydHMgYSBuZXdsaW5lIG9udG8gdGhlIHF1ZXJ5ICovXG4gIHByaXZhdGUgYWRkTmV3bGluZShxdWVyeTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBxdWVyeSA9IHRyaW1TcGFjZXNFbmQocXVlcnkpO1xuICAgIGlmICghcXVlcnkuZW5kc1dpdGgoJ1xcbicpKSB7XG4gICAgICBxdWVyeSArPSAnXFxuJztcbiAgICB9XG4gICAgcmV0dXJuIHF1ZXJ5ICsgdGhpcy5pbmRlbnRhdGlvbi5nZXRJbmRlbnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNUYWJ1bGFyU3R5bGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY2ZnLmluZGVudFN0eWxlID09PSAndGFidWxhckxlZnQnIHx8IHRoaXMuY2ZnLmluZGVudFN0eWxlID09PSAndGFidWxhclJpZ2h0JztcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIHRoZSBsYXRlc3QgZW5jb3VudGVyZWQgcmVzZXJ2ZWQga2V5d29yZCB0b2tlbiAqL1xuICBwdWJsaWMgZ2V0UHJldmlvdXNSZXNlcnZlZFRva2VuKCk6IFRva2VuIHtcbiAgICByZXR1cm4gdGhpcy5wcmV2aW91c1Jlc2VydmVkVG9rZW47XG4gIH1cblxuICAvKiogVHJ1ZSB3aGVuIGN1cnJlbnRseSB3aXRoaW4gU0VMRUNUIGNvbW1hbmQgKi9cbiAgcHVibGljIGlzV2l0aGluU2VsZWN0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc1Rva2VuLlNFTEVDVCh0aGlzLnByZXZpb3VzQ29tbWFuZFRva2VuKTtcbiAgfVxuXG4gIC8qKiBGZXRjaGVzIG50aCBwcmV2aW91cyB0b2tlbiBmcm9tIHRoZSB0b2tlbiBzdHJlYW0gKi9cbiAgcHVibGljIHRva2VuTG9va0JlaGluZChuID0gMSk6IFRva2VuIHtcbiAgICByZXR1cm4gdGhpcy50b2tlbnNbdGhpcy5pbmRleCAtIG5dIHx8IEVPRl9UT0tFTjtcbiAgfVxuXG4gIC8qKiBGZXRjaGVzIG50aCBuZXh0IHRva2VuIGZyb20gdGhlIHRva2VuIHN0cmVhbSAqL1xuICBwdWJsaWMgdG9rZW5Mb29rQWhlYWQobiA9IDEpOiBUb2tlbiB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5zW3RoaXMuaW5kZXggKyBuXSB8fCBFT0ZfVE9LRU47XG4gIH1cbn1cbiIsImltcG9ydCB7IGxhc3QgfSBmcm9tICcuLi91dGlscyc7XG5cbmNvbnN0IElOREVOVF9UWVBFX1RPUF9MRVZFTCA9ICd0b3AtbGV2ZWwnO1xuY29uc3QgSU5ERU5UX1RZUEVfQkxPQ0tfTEVWRUwgPSAnYmxvY2stbGV2ZWwnO1xuXG4vKipcbiAqIE1hbmFnZXMgaW5kZW50YXRpb24gbGV2ZWxzLlxuICpcbiAqIFRoZXJlIGFyZSB0d28gdHlwZXMgb2YgaW5kZW50YXRpb24gbGV2ZWxzOlxuICpcbiAqIC0gQkxPQ0tfTEVWRUwgOiBpbmNyZWFzZWQgYnkgb3Blbi1wYXJlbnRoZXNpc1xuICogLSBUT1BfTEVWRUwgOiBpbmNyZWFzZWQgYnkgUkVTRVJWRURfQ09NTUFORCB3b3Jkc1xuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbmRlbnRhdGlvbiB7XG4gIHByaXZhdGUgaW5kZW50VHlwZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpbmRlbnQgQSBzdHJpbmcgdG8gaW5kZW50IHdpdGhcbiAgICovXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaW5kZW50OiBzdHJpbmcpIHt9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgaW5kZW50YXRpb24gc3RyaW5nIGZvciBzaW5nbGUgaW5kZW50YXRpb24gc3RlcC5cbiAgICovXG4gIGdldFNpbmdsZUluZGVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmluZGVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGN1cnJlbnQgaW5kZW50YXRpb24gc3RyaW5nLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IGluZGVudGF0aW9uIHN0cmluZyBiYXNlZCBvbiBpbmRlbnRUeXBlc1xuICAgKi9cbiAgZ2V0SW5kZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5kZW50LnJlcGVhdCh0aGlzLmluZGVudFR5cGVzLmxlbmd0aCk7XG4gIH1cblxuICAvKipcbiAgICogSW5jcmVhc2VzIGluZGVudGF0aW9uIGJ5IG9uZSB0b3AtbGV2ZWwgaW5kZW50LlxuICAgKi9cbiAgaW5jcmVhc2VUb3BMZXZlbCgpIHtcbiAgICB0aGlzLmluZGVudFR5cGVzLnB1c2goSU5ERU5UX1RZUEVfVE9QX0xFVkVMKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmNyZWFzZXMgaW5kZW50YXRpb24gYnkgb25lIGJsb2NrLWxldmVsIGluZGVudC5cbiAgICovXG4gIGluY3JlYXNlQmxvY2tMZXZlbCgpIHtcbiAgICB0aGlzLmluZGVudFR5cGVzLnB1c2goSU5ERU5UX1RZUEVfQkxPQ0tfTEVWRUwpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlY3JlYXNlcyBpbmRlbnRhdGlvbiBieSBvbmUgdG9wLWxldmVsIGluZGVudC5cbiAgICogRG9lcyBub3RoaW5nIHdoZW4gdGhlIHByZXZpb3VzIGluZGVudCBpcyBub3QgdG9wLWxldmVsLlxuICAgKi9cbiAgZGVjcmVhc2VUb3BMZXZlbCgpIHtcbiAgICBpZiAodGhpcy5pbmRlbnRUeXBlcy5sZW5ndGggPiAwICYmIGxhc3QodGhpcy5pbmRlbnRUeXBlcykgPT09IElOREVOVF9UWVBFX1RPUF9MRVZFTCkge1xuICAgICAgdGhpcy5pbmRlbnRUeXBlcy5wb3AoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGVjcmVhc2VzIGluZGVudGF0aW9uIGJ5IG9uZSBibG9jay1sZXZlbCBpbmRlbnQuXG4gICAqIElmIHRoZXJlIGFyZSB0b3AtbGV2ZWwgaW5kZW50cyB3aXRoaW4gdGhlIGJsb2NrLWxldmVsIGluZGVudCxcbiAgICogdGhyb3dzIGF3YXkgdGhlc2UgYXMgd2VsbC5cbiAgICovXG4gIGRlY3JlYXNlQmxvY2tMZXZlbCgpIHtcbiAgICB3aGlsZSAodGhpcy5pbmRlbnRUeXBlcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCB0eXBlID0gdGhpcy5pbmRlbnRUeXBlcy5wb3AoKTtcbiAgICAgIGlmICh0eXBlICE9PSBJTkRFTlRfVFlQRV9UT1BfTEVWRUwpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIENsZWFycyBhbGwgaW5kZW50YXRpb24gKi9cbiAgcmVzZXRJbmRlbnRhdGlvbigpIHtcbiAgICB0aGlzLmluZGVudFR5cGVzID0gW107XG4gIH1cbn1cbiIsImltcG9ydCB7IGlzVG9rZW4sIFRva2VuLCBUb2tlblR5cGUgfSBmcm9tICcuL3Rva2VuJztcblxuLyoqXG4gKiBCb29ra2VlcGVyIGZvciBpbmxpbmUgYmxvY2tzLlxuICpcbiAqIElubGluZSBibG9ja3MgYXJlIHBhcmVudGhlc2lzZWQgZXhwcmVzc2lvbnMgdGhhdCBhcmUgc2hvcnRlciB0aGFuIElOTElORV9NQVhfTEVOR1RILlxuICogVGhlc2UgYmxvY2tzIGFyZSBmb3JtYXR0ZWQgb24gYSBzaW5nbGUgbGluZSwgdW5saWtlIGxvbmdlciBwYXJlbnRoZXNpc2VkXG4gKiBleHByZXNzaW9ucyB3aGVyZSBvcGVuLXBhcmVudGhlc2lzIGNhdXNlcyBuZXdsaW5lIGFuZCBpbmNyZWFzZSBvZiBpbmRlbnRhdGlvbi5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5saW5lQmxvY2sge1xuICBsZXZlbDogbnVtYmVyO1xuICBleHByZXNzaW9uV2lkdGg6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihleHByZXNzaW9uV2lkdGg6IG51bWJlcikge1xuICAgIHRoaXMubGV2ZWwgPSAwO1xuICAgIHRoaXMuZXhwcmVzc2lvbldpZHRoID0gZXhwcmVzc2lvbldpZHRoO1xuICB9XG5cbiAgLyoqXG4gICAqIEJlZ2lucyBpbmxpbmUgYmxvY2sgd2hlbiBsb29rYWhlYWQgdGhyb3VnaCB1cGNvbWluZyB0b2tlbnMgZGV0ZXJtaW5lc1xuICAgKiB0aGF0IHRoZSBibG9jayB3b3VsZCBiZSBzbWFsbGVyIHRoYW4gSU5MSU5FX01BWF9MRU5HVEguXG4gICAqIEBwYXJhbSAge1Rva2VuW119IHRva2VucyBBcnJheSBvZiBhbGwgdG9rZW5zXG4gICAqIEBwYXJhbSAge051bWJlcn0gaW5kZXggQ3VycmVudCB0b2tlbiBwb3NpdGlvblxuICAgKi9cbiAgYmVnaW5JZlBvc3NpYmxlKHRva2VuczogVG9rZW5bXSwgaW5kZXg6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmxldmVsID09PSAwICYmIHRoaXMuaXNJbmxpbmVCbG9jayh0b2tlbnMsIGluZGV4KSkge1xuICAgICAgdGhpcy5sZXZlbCA9IDE7XG4gICAgfSBlbHNlIGlmICh0aGlzLmxldmVsID4gMCkge1xuICAgICAgdGhpcy5sZXZlbCsrO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxldmVsID0gMDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmluaXNoZXMgY3VycmVudCBpbmxpbmUgYmxvY2suXG4gICAqIFRoZXJlIG1pZ2h0IGJlIHNldmVyYWwgbmVzdGVkIG9uZXMuXG4gICAqL1xuICBlbmQoKSB7XG4gICAgdGhpcy5sZXZlbC0tO1xuICB9XG5cbiAgLyoqXG4gICAqIFRydWUgd2hlbiBpbnNpZGUgYW4gaW5saW5lIGJsb2NrXG4gICAqL1xuICBpc0FjdGl2ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5sZXZlbCA+IDA7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhpcyBzaG91bGQgYmUgYW4gaW5saW5lIHBhcmVudGhlc2VzIGJsb2NrXG4gICAqIEV4YW1wbGVzIGFyZSBcIk5PVygpXCIsIFwiQ09VTlQoKilcIiwgXCJpbnQoMTApXCIsIGtleShgc29tZWNvbHVtbmApLCBERUNJTUFMKDcsMilcbiAgICovXG4gIGlzSW5saW5lQmxvY2sodG9rZW5zOiBUb2tlbltdLCBpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgbGV0IGxlbmd0aCA9IDA7XG4gICAgbGV0IGxldmVsID0gMDtcblxuICAgIGZvciAobGV0IGkgPSBpbmRleDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdG9rZW4gPSB0b2tlbnNbaV07XG4gICAgICBsZW5ndGggKz0gdG9rZW4udmFsdWUubGVuZ3RoO1xuXG4gICAgICBpZiAodGhpcy5pc0ZvcmJpZGRlblRva2VuKHRva2VuKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8vIE92ZXJyYW4gbWF4IGxlbmd0aFxuICAgICAgaWYgKGxlbmd0aCA+IHRoaXMuZXhwcmVzc2lvbldpZHRoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuVHlwZS5CTE9DS19TVEFSVCkge1xuICAgICAgICBsZXZlbCsrO1xuICAgICAgfSBlbHNlIGlmICh0b2tlbi50eXBlID09PSBUb2tlblR5cGUuQkxPQ0tfRU5EKSB7XG4gICAgICAgIGxldmVsLS07XG4gICAgICAgIGlmIChsZXZlbCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIFJlc2VydmVkIHdvcmRzIHRoYXQgY2F1c2UgbmV3bGluZXMsIGNvbW1lbnRzIGFuZCBzZW1pY29sb25zXG4gIC8vIGFyZSBub3QgYWxsb3dlZCBpbnNpZGUgaW5saW5lIHBhcmVudGhlc2VzIGJsb2NrXG4gIGlzRm9yYmlkZGVuVG9rZW4oeyB0eXBlLCB2YWx1ZSB9OiBUb2tlbikge1xuICAgIHJldHVybiAoXG4gICAgICB0eXBlID09PSBUb2tlblR5cGUuUkVTRVJWRURfQ09NTUFORCB8fFxuICAgICAgdHlwZSA9PT0gVG9rZW5UeXBlLlJFU0VSVkVEX0xPR0lDQUxfT1BFUkFUT1IgfHxcbiAgICAgIC8vIHR5cGUgPT09IFRva2VuVHlwZS5MSU5FX0NPTU1FTlQgfHxcbiAgICAgIHR5cGUgPT09IFRva2VuVHlwZS5CTE9DS19DT01NRU5UIHx8XG4gICAgICB2YWx1ZSA9PT0gJzsnIHx8XG4gICAgICBpc1Rva2VuLkNBU0UoeyB0eXBlLCB2YWx1ZSB9KSAvLyBDQVNFIGNhbm5vdCBoYXZlIGlubGluZSBibG9ja3NcbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgdHlwZSB7IFRva2VuIH0gZnJvbSAnLi90b2tlbic7XG5cbmV4cG9ydCB0eXBlIFBhcmFtSXRlbXMgPSB7IFtrOiBzdHJpbmddOiBzdHJpbmcgfTtcblxuLyoqXG4gKiBIYW5kbGVzIHBsYWNlaG9sZGVyIHJlcGxhY2VtZW50IHdpdGggZ2l2ZW4gcGFyYW1zLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYXJhbXMge1xuICAvKipcbiAgICogQHBhcmFtIHtQYXJhbUl0ZW1zfSBwYXJhbXNcbiAgICovXG4gIHBhcmFtczogUGFyYW1JdGVtcyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuICBpbmRleDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHBhcmFtczogUGFyYW1JdGVtcyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5wYXJhbXMgPSBwYXJhbXM7XG4gICAgdGhpcy5pbmRleCA9IDA7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBwYXJhbSB2YWx1ZSB0aGF0IG1hdGNoZXMgZ2l2ZW4gcGxhY2Vob2xkZXIgd2l0aCBwYXJhbSBrZXkuXG4gICAqIEBwYXJhbSB7VG9rZW59IHRva2VuXG4gICAqIEByZXR1cm4ge3N0cmluZ30gcGFyYW0gb3IgdG9rZW4udmFsdWUgd2hlbiBwYXJhbXMgYXJlIG1pc3NpbmdcbiAgICovXG4gIGdldCh7IGtleSwgdmFsdWUgfTogVG9rZW4pOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5wYXJhbXMpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAoa2V5KSB7XG4gICAgICByZXR1cm4gKHRoaXMucGFyYW1zIGFzIFBhcmFtSXRlbXMpW2tleV07XG4gICAgfVxuICAgIHJldHVybiAodGhpcy5wYXJhbXMgYXMgc3RyaW5nW10pW3RoaXMuaW5kZXgrK107XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIHJlZ2V4RmFjdG9yeSBmcm9tICcuL3JlZ2V4RmFjdG9yeSc7XG5pbXBvcnQgeyBlc2NhcGVSZWdFeHAgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBUb2tlbiwgVG9rZW5UeXBlIH0gZnJvbSAnLi90b2tlbic7IC8vIGNvbnZlcnQgdG8gcGFydGlhbCB0eXBlIGltcG9ydCBpbiBUUyA0LjVcblxuZXhwb3J0IGNvbnN0IFdISVRFU1BBQ0VfUkVHRVggPSAvXihcXHMrKS91O1xuY29uc3QgTlVMTF9SRUdFWCA9IC8oPyEpLzsgLy8gemVyby13aWR0aCBuZWdhdGl2ZSBsb29rYWhlYWQsIG1hdGNoZXMgbm90aGluZ1xuXG4vKiogU3RydWN0IHRoYXQgZGVmaW5lcyBob3cgYSBTUUwgbGFuZ3VhZ2UgY2FuIGJlIGJyb2tlbiBpbnRvIHRva2VucyAqL1xuaW50ZXJmYWNlIFRva2VuaXplck9wdGlvbnMge1xuICByZXNlcnZlZEtleXdvcmRzOiBzdHJpbmdbXTtcbiAgcmVzZXJ2ZWRDb21tYW5kczogc3RyaW5nW107XG4gIHJlc2VydmVkTG9naWNhbE9wZXJhdG9yczogc3RyaW5nW107XG4gIHJlc2VydmVkRGVwZW5kZW50Q2xhdXNlczogc3RyaW5nW107XG4gIHJlc2VydmVkQmluYXJ5Q29tbWFuZHM6IHN0cmluZ1tdO1xuICByZXNlcnZlZEpvaW5Db25kaXRpb25zOiBzdHJpbmdbXTtcbiAgc3RyaW5nVHlwZXM6IHJlZ2V4RmFjdG9yeS5TdHJpbmdQYXR0ZXJuVHlwZVtdO1xuICBibG9ja1N0YXJ0OiBzdHJpbmdbXTtcbiAgYmxvY2tFbmQ6IHN0cmluZ1tdO1xuICBpbmRleGVkUGxhY2Vob2xkZXJUeXBlcz86IHN0cmluZ1tdO1xuICBuYW1lZFBsYWNlaG9sZGVyVHlwZXM6IHN0cmluZ1tdO1xuICBsaW5lQ29tbWVudFR5cGVzOiBzdHJpbmdbXTtcbiAgc3BlY2lhbFdvcmRDaGFycz86IHsgcHJlZml4Pzogc3RyaW5nOyBhbnk/OiBzdHJpbmc7IHN1ZmZpeD86IHN0cmluZyB9O1xuICBvcGVyYXRvcnM/OiBzdHJpbmdbXTtcbn1cblxuLyoqIENvbnZlcnRzIFNRTCBsYW5ndWFnZSBzdHJpbmcgaW50byBhIHRva2VuIHN0cmVhbSAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9rZW5pemVyIHtcbiAgUkVHRVhfTUFQOiB7IFt0b2tlblR5cGUgaW4gVG9rZW5UeXBlXTogUmVnRXhwIH07XG5cbiAgSU5ERVhFRF9QTEFDRUhPTERFUl9SRUdFWD86IFJlZ0V4cDtcbiAgSURFTlRfTkFNRURfUExBQ0VIT0xERVJfUkVHRVg/OiBSZWdFeHA7XG4gIFNUUklOR19OQU1FRF9QTEFDRUhPTERFUl9SRUdFWD86IFJlZ0V4cDtcblxuICAvKipcbiAgICogQHBhcmFtIHtUb2tlbml6ZXJPcHRpb25zfSBjZmdcbiAgICogIEBwYXJhbSB7c3RyaW5nW119IGNmZy5yZXNlcnZlZEtleXdvcmRzIC0gUmVzZXJ2ZWQgd29yZHMgaW4gU1FMXG4gICAqICBAcGFyYW0ge3N0cmluZ1tdfSBjZmcucmVzZXJ2ZWREZXBlbmRlbnRDbGF1c2VzIC0gV29yZHMgdGhhdCBmb2xsb3dpbmcgYSBzcGVjaWZpYyBTdGF0ZW1lbnQgYW5kIG11c3QgaGF2ZSBkYXRhIGF0dGFjaGVkXG4gICAqICBAcGFyYW0ge3N0cmluZ1tdfSBjZmcucmVzZXJ2ZWRMb2dpY2FsT3BlcmF0b3JzIC0gV29yZHMgdGhhdCBhcmUgc2V0IHRvIG5ld2xpbmVcbiAgICogIEBwYXJhbSB7c3RyaW5nW119IGNmZy5yZXNlcnZlZENvbW1hbmRzIC0gV29yZHMgdGhhdCBhcmUgc2V0IHRvIG5ldyBsaW5lIHNlcGFyYXRlbHlcbiAgICogIEBwYXJhbSB7c3RyaW5nW119IGNmZy5yZXNlcnZlZEJpbmFyeUNvbW1hbmRzIC0gV29yZHMgdGhhdCBhcmUgdG9wIGxldmVsIGJ1dCBoYXZlIG5vIGluZGVudGF0aW9uXG4gICAqICBAcGFyYW0ge3N0cmluZ1tdfSBjZmcucmVzZXJ2ZWRKb2luQ29uZGl0aW9ucyAtIE9OIGFuZCBVU0lOR1xuICAgKiAgQHBhcmFtIHtzdHJpbmdbXX0gY2ZnLnN0cmluZ1R5cGVzIC0gc3RyaW5nIHR5cGVzIHRvIGVuYWJsZSAtIFwiXCIsICcnLCBgYCwgW10sIE4nJ1xuICAgKiAgQHBhcmFtIHtzdHJpbmdbXX0gY2ZnLmJsb2NrU3RhcnQgLSBPcGVuaW5nIHBhcmVudGhlc2VzIHRvIGVuYWJsZSwgbGlrZSAoLCBbXG4gICAqICBAcGFyYW0ge3N0cmluZ1tdfSBjZmcuYmxvY2tFbmQgLSBDbG9zaW5nIHBhcmVudGhlc2VzIHRvIGVuYWJsZSwgbGlrZSApLCBdXG4gICAqICBAcGFyYW0ge3N0cmluZ1tdfSBjZmcuaW5kZXhlZFBsYWNlaG9sZGVyVHlwZXMgLSBQcmVmaXhlcyBmb3IgaW5kZXhlZCBwbGFjZWhvbGRlcnMsIGxpa2UgP1xuICAgKiAgQHBhcmFtIHtzdHJpbmdbXX0gY2ZnLm5hbWVkUGxhY2Vob2xkZXJUeXBlcyAtIFByZWZpeGVzIGZvciBuYW1lZCBwbGFjZWhvbGRlcnMsIGxpa2UgQCBhbmQgOlxuICAgKiAgQHBhcmFtIHtzdHJpbmdbXX0gY2ZnLmxpbmVDb21tZW50VHlwZXMgLSBMaW5lIGNvbW1lbnRzIHRvIGVuYWJsZSwgbGlrZSAjIGFuZCAtLVxuICAgKiAgQHBhcmFtIHtzdHJpbmdbXX0gY2ZnLnNwZWNpYWxXb3JkQ2hhcnMgLSBTcGVjaWFsIGNoYXJzIHRoYXQgY2FuIGJlIGZvdW5kIGluc2lkZSBvZiB3b3JkcywgbGlrZSBAIGFuZCAjXG4gICAqICBAcGFyYW0ge3N0cmluZ1tdfSBjZmcub3BlcmF0b3JzIC0gQWRkaXRpb25hbCBvcGVyYXRvcnMgdG8gcmVjb2duaXplXG4gICAqL1xuICBjb25zdHJ1Y3RvcihjZmc6IFRva2VuaXplck9wdGlvbnMpIHtcbiAgICBjb25zdCBzcGVjaWFsV29yZENoYXJzQWxsID0gT2JqZWN0LnZhbHVlcyhjZmcuc3BlY2lhbFdvcmRDaGFycyA/PyB7fSkuam9pbignJyk7XG4gICAgdGhpcy5SRUdFWF9NQVAgPSB7XG4gICAgICBbVG9rZW5UeXBlLldPUkRdOiByZWdleEZhY3RvcnkuY3JlYXRlV29yZFJlZ2V4KGNmZy5zcGVjaWFsV29yZENoYXJzKSxcbiAgICAgIFtUb2tlblR5cGUuU1RSSU5HXTogcmVnZXhGYWN0b3J5LmNyZWF0ZVN0cmluZ1JlZ2V4KGNmZy5zdHJpbmdUeXBlcyksXG4gICAgICBbVG9rZW5UeXBlLlJFU0VSVkVEX0tFWVdPUkRdOiByZWdleEZhY3RvcnkuY3JlYXRlUmVzZXJ2ZWRXb3JkUmVnZXgoXG4gICAgICAgIGNmZy5yZXNlcnZlZEtleXdvcmRzLFxuICAgICAgICBzcGVjaWFsV29yZENoYXJzQWxsXG4gICAgICApLFxuICAgICAgW1Rva2VuVHlwZS5SRVNFUlZFRF9ERVBFTkRFTlRfQ0xBVVNFXTogcmVnZXhGYWN0b3J5LmNyZWF0ZVJlc2VydmVkV29yZFJlZ2V4KFxuICAgICAgICBjZmcucmVzZXJ2ZWREZXBlbmRlbnRDbGF1c2VzID8/IFtdLFxuICAgICAgICBzcGVjaWFsV29yZENoYXJzQWxsXG4gICAgICApLFxuICAgICAgW1Rva2VuVHlwZS5SRVNFUlZFRF9MT0dJQ0FMX09QRVJBVE9SXTogcmVnZXhGYWN0b3J5LmNyZWF0ZVJlc2VydmVkV29yZFJlZ2V4KFxuICAgICAgICBjZmcucmVzZXJ2ZWRMb2dpY2FsT3BlcmF0b3JzLFxuICAgICAgICBzcGVjaWFsV29yZENoYXJzQWxsXG4gICAgICApLFxuICAgICAgW1Rva2VuVHlwZS5SRVNFUlZFRF9DT01NQU5EXTogcmVnZXhGYWN0b3J5LmNyZWF0ZVJlc2VydmVkV29yZFJlZ2V4KFxuICAgICAgICBjZmcucmVzZXJ2ZWRDb21tYW5kcyxcbiAgICAgICAgc3BlY2lhbFdvcmRDaGFyc0FsbFxuICAgICAgKSxcbiAgICAgIFtUb2tlblR5cGUuUkVTRVJWRURfQklOQVJZX0NPTU1BTkRdOiByZWdleEZhY3RvcnkuY3JlYXRlUmVzZXJ2ZWRXb3JkUmVnZXgoXG4gICAgICAgIGNmZy5yZXNlcnZlZEJpbmFyeUNvbW1hbmRzLFxuICAgICAgICBzcGVjaWFsV29yZENoYXJzQWxsXG4gICAgICApLFxuICAgICAgW1Rva2VuVHlwZS5SRVNFUlZFRF9KT0lOX0NPTkRJVElPTl06IHJlZ2V4RmFjdG9yeS5jcmVhdGVSZXNlcnZlZFdvcmRSZWdleChcbiAgICAgICAgY2ZnLnJlc2VydmVkSm9pbkNvbmRpdGlvbnMsXG4gICAgICAgIHNwZWNpYWxXb3JkQ2hhcnNBbGxcbiAgICAgICksXG4gICAgICBbVG9rZW5UeXBlLk9QRVJBVE9SXTogcmVnZXhGYWN0b3J5LmNyZWF0ZU9wZXJhdG9yUmVnZXgoJystLyolJnxePjw9Liw7W117fWA6JCcsIFtcbiAgICAgICAgJzw+JyxcbiAgICAgICAgJzw9JyxcbiAgICAgICAgJz49JyxcbiAgICAgICAgJyE9JyxcbiAgICAgICAgLi4uKGNmZy5vcGVyYXRvcnMgPz8gW10pLFxuICAgICAgXSksXG4gICAgICBbVG9rZW5UeXBlLkJMT0NLX1NUQVJUXTogcmVnZXhGYWN0b3J5LmNyZWF0ZVBhcmVuUmVnZXgoY2ZnLmJsb2NrU3RhcnQpLFxuICAgICAgW1Rva2VuVHlwZS5CTE9DS19FTkRdOiByZWdleEZhY3RvcnkuY3JlYXRlUGFyZW5SZWdleChjZmcuYmxvY2tFbmQpLFxuICAgICAgW1Rva2VuVHlwZS5MSU5FX0NPTU1FTlRdOiByZWdleEZhY3RvcnkuY3JlYXRlTGluZUNvbW1lbnRSZWdleChjZmcubGluZUNvbW1lbnRUeXBlcyksXG4gICAgICBbVG9rZW5UeXBlLkJMT0NLX0NPTU1FTlRdOiAvXihcXC9cXCpbXl0qPyg/OlxcKlxcL3wkKSkvdSxcbiAgICAgIFtUb2tlblR5cGUuTlVNQkVSXTpcbiAgICAgICAgL14oMHhbMC05YS1mQS1GXSt8MGJbMDFdK3woLVxccyopP1swLTldKyhcXC5bMC05XSopPyhbZUVdWy0rXT9bMC05XSsoXFwuWzAtOV0rKT8pPykvdSxcbiAgICAgIFtUb2tlblR5cGUuUExBQ0VIT0xERVJdOiBOVUxMX1JFR0VYLCAvLyBtYXRjaGVzIG5vdGhpbmdcbiAgICAgIFtUb2tlblR5cGUuRU9GXTogTlVMTF9SRUdFWCwgLy8gbWF0Y2hlcyBub3RoaW5nXG4gICAgfTtcblxuICAgIHRoaXMuSU5ERVhFRF9QTEFDRUhPTERFUl9SRUdFWCA9IHJlZ2V4RmFjdG9yeS5jcmVhdGVQbGFjZWhvbGRlclJlZ2V4KFxuICAgICAgY2ZnLmluZGV4ZWRQbGFjZWhvbGRlclR5cGVzID8/IFtdLFxuICAgICAgJ1swLTldKidcbiAgICApO1xuICAgIHRoaXMuSURFTlRfTkFNRURfUExBQ0VIT0xERVJfUkVHRVggPSByZWdleEZhY3RvcnkuY3JlYXRlUGxhY2Vob2xkZXJSZWdleChcbiAgICAgIGNmZy5uYW1lZFBsYWNlaG9sZGVyVHlwZXMsXG4gICAgICAnW2EtekEtWjAtOS5fJF0rJ1xuICAgICk7XG4gICAgdGhpcy5TVFJJTkdfTkFNRURfUExBQ0VIT0xERVJfUkVHRVggPSByZWdleEZhY3RvcnkuY3JlYXRlUGxhY2Vob2xkZXJSZWdleChcbiAgICAgIGNmZy5uYW1lZFBsYWNlaG9sZGVyVHlwZXMsXG4gICAgICByZWdleEZhY3RvcnkuY3JlYXRlU3RyaW5nUGF0dGVybihjZmcuc3RyaW5nVHlwZXMpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUYWtlcyBhIFNRTCBzdHJpbmcgYW5kIGJyZWFrcyBpdCBpbnRvIHRva2Vucy5cbiAgICogRWFjaCB0b2tlbiBpcyBhbiBvYmplY3Qgd2l0aCB0eXBlIGFuZCB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlucHV0IC0gVGhlIFNRTCBzdHJpbmdcbiAgICogQHJldHVybnMge1Rva2VuW119IG91dHB1dCB0b2tlbiBzdHJlYW1cbiAgICovXG4gIHRva2VuaXplKGlucHV0OiBzdHJpbmcpOiBUb2tlbltdIHtcbiAgICBjb25zdCB0b2tlbnM6IFRva2VuW10gPSBbXTtcbiAgICBsZXQgdG9rZW46IFRva2VuIHwgdW5kZWZpbmVkO1xuXG4gICAgLy8gS2VlcCBwcm9jZXNzaW5nIHRoZSBzdHJpbmcgdW50aWwgaXQgaXMgZW1wdHlcbiAgICB3aGlsZSAoaW5wdXQubGVuZ3RoKSB7XG4gICAgICAvLyBncmFiIGFueSBwcmVjZWRpbmcgd2hpdGVzcGFjZVxuICAgICAgY29uc3Qgd2hpdGVzcGFjZUJlZm9yZSA9IHRoaXMuZ2V0V2hpdGVzcGFjZShpbnB1dCk7XG4gICAgICBpbnB1dCA9IGlucHV0LnN1YnN0cmluZyh3aGl0ZXNwYWNlQmVmb3JlLmxlbmd0aCk7XG5cbiAgICAgIGlmIChpbnB1dC5sZW5ndGgpIHtcbiAgICAgICAgLy8gR2V0IHRoZSBuZXh0IHRva2VuIGFuZCB0aGUgdG9rZW4gdHlwZVxuICAgICAgICB0b2tlbiA9IHRoaXMuZ2V0TmV4dFRva2VuKGlucHV0LCB0b2tlbik7XG4gICAgICAgIC8vIEFkdmFuY2UgdGhlIHN0cmluZ1xuICAgICAgICBpbnB1dCA9IGlucHV0LnN1YnN0cmluZyh0b2tlbi52YWx1ZS5sZW5ndGgpO1xuXG4gICAgICAgIHRva2Vucy5wdXNoKHsgLi4udG9rZW4sIHdoaXRlc3BhY2VCZWZvcmUgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0b2tlbnM7XG4gIH1cblxuICAvKiogTWF0Y2hlcyBwcmVjZWRpbmcgd2hpdGVzcGFjZSBpZiBwcmVzZW50ICovXG4gIGdldFdoaXRlc3BhY2UoaW5wdXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IGlucHV0Lm1hdGNoKFdISVRFU1BBQ0VfUkVHRVgpO1xuICAgIHJldHVybiBtYXRjaGVzID8gbWF0Y2hlc1sxXSA6ICcnO1xuICB9XG5cbiAgLyoqIEN1cnJpZWQgZnVuY3Rpb24gb2YgYGdldFRva2VuT25GaXJzdE1hdGNoYCB0aGF0IGFsbG93cyB0b2tlbiB0eXBlIHRvIGJlIHBhc3NlZCBmaXJzdCAqL1xuICBtYXRjaFRva2VuID1cbiAgICAodG9rZW5UeXBlOiBUb2tlblR5cGUpID0+XG4gICAgKGlucHV0OiBzdHJpbmcpOiBUb2tlbiB8IHVuZGVmaW5lZCA9PlxuICAgICAgdGhpcy5nZXRUb2tlbk9uRmlyc3RNYXRjaCh7XG4gICAgICAgIGlucHV0LFxuICAgICAgICB0eXBlOiB0b2tlblR5cGUsXG4gICAgICAgIHJlZ2V4OiB0aGlzLlJFR0VYX01BUFt0b2tlblR5cGVdLFxuICAgICAgfSk7XG5cbiAgLyoqIEF0dGVtcHRzIHRvIG1hdGNoIG5leHQgdG9rZW4gZnJvbSBpbnB1dCBzdHJpbmcsIHRlc3RzIFJlZ0V4cCBwYXR0ZXJucyBpbiBkZWNyZWFzaW5nIHByaW9yaXR5ICovXG4gIGdldE5leHRUb2tlbihpbnB1dDogc3RyaW5nLCBwcmV2aW91c1Rva2VuPzogVG9rZW4pIHtcbiAgICByZXR1cm4gKHRoaXMubWF0Y2hUb2tlbihUb2tlblR5cGUuTElORV9DT01NRU5UKShpbnB1dCkgfHxcbiAgICAgIHRoaXMubWF0Y2hUb2tlbihUb2tlblR5cGUuQkxPQ0tfQ09NTUVOVCkoaW5wdXQpIHx8XG4gICAgICB0aGlzLm1hdGNoVG9rZW4oVG9rZW5UeXBlLlNUUklORykoaW5wdXQpIHx8XG4gICAgICB0aGlzLm1hdGNoVG9rZW4oVG9rZW5UeXBlLkJMT0NLX1NUQVJUKShpbnB1dCkgfHxcbiAgICAgIHRoaXMubWF0Y2hUb2tlbihUb2tlblR5cGUuQkxPQ0tfRU5EKShpbnB1dCkgfHxcbiAgICAgIHRoaXMuZ2V0UGxhY2Vob2xkZXJUb2tlbihpbnB1dCkgfHxcbiAgICAgIHRoaXMubWF0Y2hUb2tlbihUb2tlblR5cGUuTlVNQkVSKShpbnB1dCkgfHxcbiAgICAgIHRoaXMuZ2V0UmVzZXJ2ZWRXb3JkVG9rZW4oaW5wdXQsIHByZXZpb3VzVG9rZW4pIHx8XG4gICAgICB0aGlzLm1hdGNoVG9rZW4oVG9rZW5UeXBlLldPUkQpKGlucHV0KSB8fFxuICAgICAgdGhpcy5tYXRjaFRva2VuKFRva2VuVHlwZS5PUEVSQVRPUikoaW5wdXQpKSBhcyBUb2tlbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRlbXB0cyB0byBtYXRjaCBhIHBsYWNlaG9sZGVyIHRva2VuIHBhdHRlcm5cbiAgICogQHJldHVybiB7VG9rZW4gfCB1bmRlZmluZWR9IC0gVGhlIHBsYWNlaG9sZGVyIHRva2VuIGlmIGZvdW5kLCBvdGhlcndpc2UgdW5kZWZpbmVkXG4gICAqL1xuICBnZXRQbGFjZWhvbGRlclRva2VuKGlucHV0OiBzdHJpbmcpOiBUb2tlbiB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcGxhY2Vob2xkZXJUb2tlblJlZ2V4TWFwOiB7IHJlZ2V4OiBSZWdFeHA7IHBhcnNlS2V5OiAoczogc3RyaW5nKSA9PiBzdHJpbmcgfVtdID0gW1xuICAgICAgLy8gcGF0dGVybiBmb3IgcGxhY2Vob2xkZXIgd2l0aCBpZGVudGlmaWVyIG5hbWVcbiAgICAgIHtcbiAgICAgICAgcmVnZXg6IHRoaXMuSURFTlRfTkFNRURfUExBQ0VIT0xERVJfUkVHRVggPz8gTlVMTF9SRUdFWCxcbiAgICAgICAgcGFyc2VLZXk6IHYgPT4gdi5zbGljZSgxKSxcbiAgICAgIH0sXG4gICAgICAvLyBwYXR0ZXJuIGZvciBwbGFjZWhvbGRlciB3aXRoIHN0cmluZyBuYW1lXG4gICAgICB7XG4gICAgICAgIHJlZ2V4OiB0aGlzLlNUUklOR19OQU1FRF9QTEFDRUhPTERFUl9SRUdFWCA/PyBOVUxMX1JFR0VYLFxuICAgICAgICBwYXJzZUtleTogdiA9PlxuICAgICAgICAgIHRoaXMuZ2V0RXNjYXBlZFBsYWNlaG9sZGVyS2V5KHsga2V5OiB2LnNsaWNlKDIsIC0xKSwgcXVvdGVDaGFyOiB2LnNsaWNlKC0xKSB9KSxcbiAgICAgIH0sXG4gICAgICAvLyBwYXR0ZXJuIGZvciBwbGFjZWhvbGRlciB3aXRoIG51bWVyaWMgaW5kZXhcbiAgICAgIHtcbiAgICAgICAgcmVnZXg6IHRoaXMuSU5ERVhFRF9QTEFDRUhPTERFUl9SRUdFWCA/PyBOVUxMX1JFR0VYLFxuICAgICAgICBwYXJzZUtleTogdiA9PiB2LnNsaWNlKDEpLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgcmV0dXJuIHBsYWNlaG9sZGVyVG9rZW5SZWdleE1hcC5yZWR1Y2UoKGFjYywgeyByZWdleCwgcGFyc2VLZXkgfSkgPT4ge1xuICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmdldFRva2VuT25GaXJzdE1hdGNoKHsgaW5wdXQsIHJlZ2V4LCB0eXBlOiBUb2tlblR5cGUuUExBQ0VIT0xERVIgfSk7XG4gICAgICByZXR1cm4gdG9rZW4gPyB7IC4uLnRva2VuLCBrZXk6IHBhcnNlS2V5KHRva2VuLnZhbHVlKSB9IDogYWNjO1xuICAgIH0sIHVuZGVmaW5lZCBhcyBUb2tlbiB8IHVuZGVmaW5lZCk7XG4gIH1cblxuICBnZXRFc2NhcGVkUGxhY2Vob2xkZXJLZXkoeyBrZXksIHF1b3RlQ2hhciB9OiB7IGtleTogc3RyaW5nOyBxdW90ZUNoYXI6IHN0cmluZyB9KTogc3RyaW5nIHtcbiAgICByZXR1cm4ga2V5LnJlcGxhY2UobmV3IFJlZ0V4cChlc2NhcGVSZWdFeHAoJ1xcXFwnICsgcXVvdGVDaGFyKSwgJ2d1JyksIHF1b3RlQ2hhcik7XG4gIH1cblxuICAvKipcbiAgICogQXR0ZW1wdHMgdG8gbWF0Y2ggYSBSZXNlcnZlZCB3b3JkIHRva2VuIHBhdHRlcm4sIGF2b2lkaW5nIGVkZ2UgY2FzZXMgb2YgUmVzZXJ2ZWQgd29yZHMgd2l0aGluIHN0cmluZyB0b2tlbnNcbiAgICogQHJldHVybiB7VG9rZW4gfCB1bmRlZmluZWR9IC0gVGhlIFJlc2VydmVkIHdvcmQgdG9rZW4gaWYgZm91bmQsIG90aGVyd2lzZSB1bmRlZmluZWRcbiAgICovXG4gIGdldFJlc2VydmVkV29yZFRva2VuKGlucHV0OiBzdHJpbmcsIHByZXZpb3VzVG9rZW4/OiBUb2tlbik6IFRva2VuIHwgdW5kZWZpbmVkIHtcbiAgICAvLyBBIHJlc2VydmVkIHdvcmQgY2Fubm90IGJlIHByZWNlZGVkIGJ5IGEgJy4nXG4gICAgLy8gdGhpcyBtYWtlcyBpdCBzbyBpbiBcIm15dGFibGUuZnJvbVwiLCBcImZyb21cIiBpcyBub3QgY29uc2lkZXJlZCBhIHJlc2VydmVkIHdvcmRcbiAgICBpZiAocHJldmlvdXNUb2tlbj8udmFsdWUgPT09ICcuJykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBwcmlvcml0aXNlZCBsaXN0IG9mIFJlc2VydmVkIHRva2VuIHR5cGVzXG4gICAgY29uc3QgcmVzZXJ2ZWRUb2tlbkxpc3QgPSBbXG4gICAgICBUb2tlblR5cGUuUkVTRVJWRURfQ09NTUFORCxcbiAgICAgIFRva2VuVHlwZS5SRVNFUlZFRF9CSU5BUllfQ09NTUFORCxcbiAgICAgIFRva2VuVHlwZS5SRVNFUlZFRF9ERVBFTkRFTlRfQ0xBVVNFLFxuICAgICAgVG9rZW5UeXBlLlJFU0VSVkVEX0xPR0lDQUxfT1BFUkFUT1IsXG4gICAgICBUb2tlblR5cGUuUkVTRVJWRURfS0VZV09SRCxcbiAgICAgIFRva2VuVHlwZS5SRVNFUlZFRF9KT0lOX0NPTkRJVElPTixcbiAgICBdO1xuXG4gICAgcmV0dXJuIHJlc2VydmVkVG9rZW5MaXN0LnJlZHVjZShcbiAgICAgIChtYXRjaGVkVG9rZW4sIHRva2VuVHlwZSkgPT4gbWF0Y2hlZFRva2VuIHx8IHRoaXMubWF0Y2hUb2tlbih0b2tlblR5cGUpKGlucHV0KSxcbiAgICAgIHVuZGVmaW5lZCBhcyBUb2tlbiB8IHVuZGVmaW5lZFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQXR0ZW1wdHMgdG8gbWF0Y2ggUmVnRXhwIGZyb20gaGVhZCBvZiBpbnB1dCwgcmV0dXJuaW5nIHVuZGVmaW5lZCBpZiBub3QgZm91bmRcbiAgICogQHBhcmFtIHtzdHJpbmd9IF8uaW5wdXQgLSBUaGUgc3RyaW5nIHRvIG1hdGNoXG4gICAqIEBwYXJhbSB7VG9rZW5UeXBlfSBfLnR5cGUgLSBUaGUgdHlwZSBvZiB0b2tlbiB0byBtYXRjaCBhZ2FpbnN0XG4gICAqIEBwYXJhbSB7UmVnRXhwfSBfLnJlZ2V4IC0gVGhlIHJlZ2V4IHRvIG1hdGNoXG4gICAqIEByZXR1cm4ge1Rva2VuIHwgdW5kZWZpbmVkfSAtIFRoZSBtYXRjaGVkIHRva2VuIGlmIGZvdW5kLCBvdGhlcndpc2UgdW5kZWZpbmVkXG4gICAqL1xuICBnZXRUb2tlbk9uRmlyc3RNYXRjaCh7XG4gICAgaW5wdXQsXG4gICAgdHlwZSxcbiAgICByZWdleCxcbiAgfToge1xuICAgIGlucHV0OiBzdHJpbmc7XG4gICAgdHlwZTogVG9rZW5UeXBlO1xuICAgIHJlZ2V4OiBSZWdFeHA7XG4gIH0pOiBUb2tlbiB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IGlucHV0Lm1hdGNoKHJlZ2V4KTtcbiAgICByZXR1cm4gbWF0Y2hlcyA/ICh7IHR5cGUsIHZhbHVlOiBtYXRjaGVzWzFdIH0gYXMgVG9rZW4pIDogdW5kZWZpbmVkO1xuICB9XG59XG4iLCJpbXBvcnQgeyBtYXhMZW5ndGggfSBmcm9tICcuLi91dGlscyc7XG5cbi8qKlxuICogSGFuZGxlcyBzZWxlY3QgYWxpYXMgcGxhY2VtZW50IC0gdGFidWxhdGVzIGlmIGVuYWJsZWRcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybWF0QWxpYXNQb3NpdGlvbnMocXVlcnk6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGxpbmVzID0gcXVlcnkuc3BsaXQoJ1xcbicpO1xuXG4gIGxldCBuZXdRdWVyeTogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgIC8vIGZpbmQgU0VMRUNUIHJvd3Mgd2l0aCB0cmFpbGluZyBjb21tYSwgaWYgbm8gY29tbWEgKG9ubHkgb25lIHJvdykgLSBuby1vcFxuICAgIGlmIChsaW5lc1tpXS5tYXRjaCgvXlxccypTRUxFQ1QvaSkpIHtcbiAgICAgIGxldCBhbGlhc0xpbmVzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgaWYgKGxpbmVzW2ldLm1hdGNoKC8uKiwkLykpIHtcbiAgICAgICAgYWxpYXNMaW5lcyA9IFtsaW5lc1tpXV07IC8vIGFkZCBzZWxlY3QgdG8gYWxpYXNMaW5lcyBpbiBjYXNlIG9mIHRhYnVsYXIgZm9ybWF0c1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3UXVlcnkucHVzaChsaW5lc1tpXSk7IC8vIGFkZCBzZWxlY3QgdG8gbmV3IHF1ZXJ5XG4gICAgICAgIGlmIChsaW5lc1tpXS5tYXRjaCgvXlxccypTRUxFQ1RcXHMrLisoPyEsJCkvaSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBhbGlhc0xpbmVzLnB1c2gobGluZXNbKytpXSk7XG4gICAgICB9XG5cbiAgICAgIC8vIGdldCBhbGwgbGluZXMgaW4gU0VMRUNUIGNsYXVzZVxuICAgICAgd2hpbGUgKGxpbmVzW2krK10ubWF0Y2goLy4qLCQvKSkge1xuICAgICAgICBhbGlhc0xpbmVzLnB1c2gobGluZXNbaV0pO1xuICAgICAgfVxuXG4gICAgICAvLyBicmVhayBsaW5lcyBpbnRvIGFsaWFzIHdpdGggb3B0aW9uYWwgQVMsIGFuZCBhbGwgcHJlY2VkaW5nIHRleHRcbiAgICAgIGNvbnN0IHNwbGl0TGluZXMgPSBhbGlhc0xpbmVzXG4gICAgICAgIC5tYXAobGluZSA9PiAoeyBsaW5lLCBtYXRjaGVzOiBsaW5lLm1hdGNoKC8oXi4qP1xcUykgKEFTICk/KFxcUyssPyQpL2kpIH0pKVxuICAgICAgICAubWFwKCh7IGxpbmUsIG1hdGNoZXMgfSkgPT4ge1xuICAgICAgICAgIGlmICghbWF0Y2hlcykge1xuICAgICAgICAgICAgcmV0dXJuIHsgcHJlY2VkaW5nVGV4dDogbGluZSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJlY2VkaW5nVGV4dDogbWF0Y2hlc1sxXSxcbiAgICAgICAgICAgIGFzOiBtYXRjaGVzWzJdLFxuICAgICAgICAgICAgYWxpYXM6IG1hdGNoZXNbM10sXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG5cbiAgICAgIC8vIGdldCBsb25nZXN0IG9mIHByZWNlZGluZ1RleHQsIHRyaW0gdHJhaWxpbmcgY29tbWEgZm9yIG5vbi1hbGlhcyBjb2x1bW5zXG4gICAgICBjb25zdCBhbGlhc01heExlbmd0aCA9IG1heExlbmd0aChcbiAgICAgICAgc3BsaXRMaW5lcy5tYXAoKHsgcHJlY2VkaW5nVGV4dCB9KSA9PiBwcmVjZWRpbmdUZXh0LnJlcGxhY2UoL1xccyosXFxzKiQvLCAnJykpXG4gICAgICApO1xuICAgICAgLy8gcmUtY29uc3RydWN0IGxpbmUsIGFsaWduaW5nIGJ5IGluc2VydGluZyBzcGFjZSBiZWZvcmUgQVMgb3IgYWxpYXNcbiAgICAgIGFsaWFzTGluZXMgPSBzcGxpdExpbmVzLm1hcChcbiAgICAgICAgKHsgcHJlY2VkaW5nVGV4dCwgYXMsIGFsaWFzIH0pID0+XG4gICAgICAgICAgcHJlY2VkaW5nVGV4dCArXG4gICAgICAgICAgKGFsaWFzID8gJyAnLnJlcGVhdChhbGlhc01heExlbmd0aCAtIHByZWNlZGluZ1RleHQubGVuZ3RoICsgMSkgKyAoYXMgPz8gJycpICsgYWxpYXMgOiAnJylcbiAgICAgICk7XG4gICAgICBuZXdRdWVyeSA9IFsuLi5uZXdRdWVyeSwgLi4uYWxpYXNMaW5lc107XG4gICAgfVxuICAgIG5ld1F1ZXJ5LnB1c2gobGluZXNbaV0pO1xuICB9XG5cbiAgcmV0dXJuIG5ld1F1ZXJ5LmpvaW4oJ1xcbicpO1xufVxuIiwiaW1wb3J0IHsgQ29tbWFQb3NpdGlvbiB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IG1heExlbmd0aCB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IFdISVRFU1BBQ0VfUkVHRVggfSBmcm9tICcuL1Rva2VuaXplcic7XG5cbi8qKlxuICogSGFuZGxlcyBjb21tYSBwbGFjZW1lbnQgLSBlaXRoZXIgYmVmb3JlLCBhZnRlciBvciB0YWJ1bGF0ZWRcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybWF0Q29tbWFQb3NpdGlvbnMoXG4gIHF1ZXJ5OiBzdHJpbmcsXG4gIGNvbW1hUG9zaXRpb246IENvbW1hUG9zaXRpb24sXG4gIGluZGVudDogc3RyaW5nXG4pOiBzdHJpbmcge1xuICByZXR1cm4gZ3JvdXBDb21tYURlbGltaXRlZExpbmVzKHF1ZXJ5LnNwbGl0KCdcXG4nKSlcbiAgICAuZmxhdE1hcChjb21tYUxpbmVzID0+IHtcbiAgICAgIGlmIChjb21tYUxpbmVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gY29tbWFMaW5lcztcbiAgICAgIH0gZWxzZSBpZiAoY29tbWFQb3NpdGlvbiA9PT0gJ3RhYnVsYXInKSB7XG4gICAgICAgIHJldHVybiBmb3JtYXRUYWJ1bGFyKGNvbW1hTGluZXMpO1xuICAgICAgfSBlbHNlIGlmIChjb21tYVBvc2l0aW9uID09PSAnYmVmb3JlJykge1xuICAgICAgICByZXR1cm4gZm9ybWF0QmVmb3JlKGNvbW1hTGluZXMsIGluZGVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgY29tbWFQb3NpdGlvbjogJHtjb21tYVBvc2l0aW9ufWApO1xuICAgICAgfVxuICAgIH0pXG4gICAgLmpvaW4oJ1xcbicpO1xufVxuXG4vKipcbiAqIEdpdmVuIGxpbmVzIGxpa2UgdGhpczpcbiAqXG4gKiAgICAgW1xuICogICAgICAgJ1NFTEVDVCcsXG4gKiAgICAgICAnICBmb28sJyxcbiAqICAgICAgICcgIGJhciwnLFxuICogICAgICAgJyAgYmF6JyxcbiAqICAgICAgICdGUk9NJ1xuICogICAgIF1cbiAqXG4gKiBSZXR1cm5zIGdyb3VwcyBsaWtlIHRoaXM6XG4gKlxuICogICAgIFtcbiAqICAgICAgIFsnU0VMRUNUJ10sXG4gKiAgICAgICBbJyAgZm9vLCcsICcgIGJhciwnLCAnICBiYXonXSxcbiAqICAgICAgIFsnRlJPTSddXG4gKiAgICAgXVxuICovXG5mdW5jdGlvbiBncm91cENvbW1hRGVsaW1pdGVkTGluZXMobGluZXM6IHN0cmluZ1tdKTogc3RyaW5nW11bXSB7XG4gIGNvbnN0IGdyb3Vwczogc3RyaW5nW11bXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgZ3JvdXAgPSBbbGluZXNbaV1dO1xuICAgIC8vIHdoZW4gbGluZSBlbmRzIHdpdGggY29tbWEsXG4gICAgLy8gZ2F0aGVyIHRvZ2V0aGVyIGFsbCBmb2xsb3dpbmcgbGluZXMgdGhhdCBhbHNvIGVuZCB3aXRoIGNvbW1hLFxuICAgIC8vIHBsdXMgb25lICh3aGljaCBkb2Vzbid0IGVuZCB3aXRoIGNvbW1hKVxuICAgIHdoaWxlIChsaW5lc1tpXS5tYXRjaCgvLiosJC8pKSB7XG4gICAgICBpKys7XG4gICAgICBncm91cC5wdXNoKGxpbmVzW2ldKTtcbiAgICB9XG4gICAgZ3JvdXBzLnB1c2goZ3JvdXApO1xuICB9XG4gIHJldHVybiBncm91cHM7XG59XG5cbi8vIG1ha2VzIGFsbCBsaW5lcyB0aGUgc2FtZSBsZW5ndGggYnkgYXBwZW5kaW5nIHNwYWNlcyBiZWZvcmUgY29tbWFcbmZ1bmN0aW9uIGZvcm1hdFRhYnVsYXIoY29tbWFMaW5lczogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IG1heExpbmVMZW5ndGggPSBtYXhMZW5ndGgoY29tbWFMaW5lcyk7XG4gIHJldHVybiB0cmltVHJhaWxpbmdDb21tYXMoY29tbWFMaW5lcykubWFwKChsaW5lLCBpKSA9PiB7XG4gICAgaWYgKGkgPT09IGNvbW1hTGluZXMubGVuZ3RoIC0gMSkge1xuICAgICAgcmV0dXJuIGxpbmU7IC8vIGRvIG5vdCBhZGQgY29tbWEgZm9yIGxhc3QgaXRlbVxuICAgIH1cbiAgICByZXR1cm4gbGluZSArICcgJy5yZXBlYXQobWF4TGluZUxlbmd0aCAtIGxpbmUubGVuZ3RoIC0gMSkgKyAnLCc7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRCZWZvcmUoY29tbWFMaW5lczogc3RyaW5nW10sIGluZGVudDogc3RyaW5nKTogc3RyaW5nW10ge1xuICByZXR1cm4gdHJpbVRyYWlsaW5nQ29tbWFzKGNvbW1hTGluZXMpLm1hcCgobGluZSwgaSkgPT4ge1xuICAgIGlmIChpID09PSAwKSB7XG4gICAgICByZXR1cm4gbGluZTsgLy8gZG8gbm90IGFkZCBjb21tYSBmb3IgZmlyc3QgaXRlbVxuICAgIH1cbiAgICBjb25zdCBbd2hpdGVzcGFjZV0gPSBsaW5lLm1hdGNoKFdISVRFU1BBQ0VfUkVHRVgpIHx8IFsnJ107XG4gICAgcmV0dXJuIChcbiAgICAgIHJlbW92ZUxhc3RJbmRlbnQod2hpdGVzcGFjZSwgaW5kZW50KSArXG4gICAgICBpbmRlbnQucmVwbGFjZSgvIHsyfSQvLCAnLCAnKSArIC8vIGFkZCBjb21tYSB0byB0aGUgZW5kIG9mIGxhc3QgaW5kZW50XG4gICAgICBsaW5lLnRyaW1TdGFydCgpXG4gICAgKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUxhc3RJbmRlbnQod2hpdGVzcGFjZTogc3RyaW5nLCBpbmRlbnQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB3aGl0ZXNwYWNlLnJlcGxhY2UobmV3IFJlZ0V4cChpbmRlbnQgKyAnJCcpLCAnJyk7XG59XG5cbmZ1bmN0aW9uIHRyaW1UcmFpbGluZ0NvbW1hcyhsaW5lczogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gIHJldHVybiBsaW5lcy5tYXAobGluZSA9PiBsaW5lLnJlcGxhY2UoLywkLywgJycpKTtcbn1cbiIsImltcG9ydCB7IGVzY2FwZVJlZ0V4cCwgaXNFbXB0eSwgc29ydEJ5TGVuZ3RoRGVzYyB9IGZyb20gJy4uL3V0aWxzJztcblxuLyoqXG4gKiBCdWlsZHMgYSBSZWdFeHAgY29udGFpbmluZyBhbGwgb3BlcmF0b3JzIGZvciBhIFNRTCBkaWFsZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gbW9uYWRPcGVyYXRvcnMgLSBjb25jYXRlbmF0ZWQgc3RyaW5nIG9mIGFsbCAxLWxlbmd0aCBvcGVyYXRvcnNcbiAqIEBwYXJhbSB7c3RyaW5nW119IHBvbHlhZE9wZXJhdG9ycyAtIGxpc3Qgb2Ygc3RyaW5ncyBvZiBhbGwgPjEtbGVuZ3RoIG9wZXJhdG9yc1xuICovXG5leHBvcnQgY29uc3QgY3JlYXRlT3BlcmF0b3JSZWdleCA9IChtb25hZE9wZXJhdG9yczogc3RyaW5nLCBwb2x5YWRPcGVyYXRvcnM6IHN0cmluZ1tdKTogUmVnRXhwID0+XG4gIG5ldyBSZWdFeHAoXG4gICAgYF4oJHtzb3J0QnlMZW5ndGhEZXNjKHBvbHlhZE9wZXJhdG9ycykubWFwKGVzY2FwZVJlZ0V4cCkuam9pbignfCcpfXxgICtcbiAgICAgIGBbJHttb25hZE9wZXJhdG9ycy5zcGxpdCgnJykubWFwKGVzY2FwZVJlZ0V4cCkuam9pbignJyl9XSlgLFxuICAgICd1J1xuICApO1xuXG4vKipcbiAqIEJ1aWxkcyBhIFJlZ0V4cCBmb3IgdmFsaWQgbGluZSBjb21tZW50cyBpbiBhIFNRTCBkaWFsZWN0XG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBsaW5lQ29tbWVudFR5cGVzIC0gbGlzdCBvZiBjaGFyYWN0ZXIgc3RyaW5ncyB0aGF0IGRlbm90ZSBsaW5lIGNvbW1lbnRzXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVMaW5lQ29tbWVudFJlZ2V4ID0gKGxpbmVDb21tZW50VHlwZXM6IHN0cmluZ1tdKTogUmVnRXhwID0+XG4gIG5ldyBSZWdFeHAoXG4gICAgYF4oKD86JHtsaW5lQ29tbWVudFR5cGVzLm1hcChjID0+IGVzY2FwZVJlZ0V4cChjKSkuam9pbignfCcpfSkuKj8pKD86XFxyXFxufFxccnxcXG58JClgLFxuICAgICd1J1xuICApO1xuXG4vKipcbiAqIEJ1aWxkcyBhIFJlZ0V4cCBmb3IgYWxsIFJlc2VydmVkIEtleXdvcmRzIGluIGEgU1FMIGRpYWxlY3RcbiAqIEBwYXJhbSB7c3RyaW5nW119IHJlc2VydmVkS2V5d29yZHMgLSBsaXN0IG9mIHN0cmluZ3Mgb2YgYWxsIFJlc2VydmVkIEtleXdvcmRzXG4gKiBAcGFyYW0ge3N0cmluZ30gc3BlY2lhbFdvcmRDaGFycyAtIGNvbmNhdGVuYXRlZCBzdHJpbmcgb2YgYWxsIHNwZWNpYWwgY2hhcnMgdGhhdCBjYW4gYXBwZWFyIGluIHZhbGlkIGlkZW50aWZpZXJzIChhbmQgbm90IGluIFJlc2VydmVkIEtleXdvcmRzKVxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlUmVzZXJ2ZWRXb3JkUmVnZXggPSAoXG4gIHJlc2VydmVkS2V5d29yZHM6IHN0cmluZ1tdLFxuICBzcGVjaWFsV29yZENoYXJzOiBzdHJpbmcgPSAnJ1xuKTogUmVnRXhwID0+IHtcbiAgaWYgKHJlc2VydmVkS2V5d29yZHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIC9eXFxiJC91O1xuICB9XG4gIGNvbnN0IHJlc2VydmVkS2V5d29yZHNQYXR0ZXJuID0gc29ydEJ5TGVuZ3RoRGVzYyhyZXNlcnZlZEtleXdvcmRzKVxuICAgIC5qb2luKCd8JylcbiAgICAucmVwbGFjZSgvIC9ndSwgJ1xcXFxzKycpO1xuICByZXR1cm4gbmV3IFJlZ0V4cChcbiAgICBgXigke3Jlc2VydmVkS2V5d29yZHNQYXR0ZXJufSkoPyFbJHtlc2NhcGVSZWdFeHAoc3BlY2lhbFdvcmRDaGFycyl9XSspXFxcXGJgLFxuICAgICdpdSdcbiAgKTtcbn07XG5cbi8qKlxuICogQnVpbGRzIGEgUmVnRXhwIGZvciB2YWxpZCBpZGVudGlmaWVycyBpbiBhIFNRTCBkaWFsZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gc3BlY2lhbENoYXJzXG4gKiBAcGFyYW0ge3N0cmluZ30gc3BlY2lhbENoYXJzLmFueSAtIGNvbmNhdGVuYXRlZCBzdHJpbmcgb2YgY2hhcnMgdGhhdCBjYW4gYXBwZWFyIGFueXdoZXJlIGluIGEgdmFsaWQgaWRlbnRpZmllclxuICogQHBhcmFtIHtzdHJpbmd9IHNwZWNpYWxDaGFycy5wcmVmaXggLSBjb25jYXRlbmF0ZWQgc3RyaW5nIG9mIGNoYXJzIHRoYXQgb25seSBhcHBlYXIgYXQgdGhlIGJlZ2lubmluZyBvZiBhIHZhbGlkIGlkZW50aWZpZXJcbiAqIEBwYXJhbSB7c3RyaW5nfSBzcGVjaWFsQ2hhcnMuc3VmZml4IC0gY29uY2F0ZW5hdGVkIHN0cmluZyBvZiBjaGFycyB0aGF0IG9ubHkgYXBwZWFyIGF0IHRoZSBlbmQgb2YgYSB2YWxpZCBpZGVudGlmaWVyXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVXb3JkUmVnZXggPSAoXG4gIHNwZWNpYWxDaGFyczogeyBhbnk/OiBzdHJpbmc7IHByZWZpeD86IHN0cmluZzsgc3VmZml4Pzogc3RyaW5nIH0gPSB7fVxuKTogUmVnRXhwID0+IHtcbiAgY29uc3QgcHJlZml4TG9va0JlaGluZCA9IGBbJHtlc2NhcGVSZWdFeHAoc3BlY2lhbENoYXJzLnByZWZpeCA/PyAnJyl9XSpgO1xuICBjb25zdCBzdWZmaXhMb29rQWhlYWQgPSBgWyR7ZXNjYXBlUmVnRXhwKHNwZWNpYWxDaGFycy5zdWZmaXggPz8gJycpfV0qYDtcbiAgY29uc3QgdW5pY29kZVdvcmRDaGFyID1cbiAgICAnXFxcXHB7QWxwaGFiZXRpY31cXFxccHtNYXJrfVxcXFxwe0RlY2ltYWxfTnVtYmVyfVxcXFxwe0Nvbm5lY3Rvcl9QdW5jdHVhdGlvbn1cXFxccHtKb2luX0NvbnRyb2x9JztcbiAgY29uc3Qgc3BlY2lhbFdvcmRDaGFycyA9IGAke2VzY2FwZVJlZ0V4cChzcGVjaWFsQ2hhcnMuYW55ID8/ICcnKX1gO1xuXG4gIGNvbnN0IGFycmF5QWNjZXNzb3IgPSAnXFxcXFtcXFxcZFxcXFxdJztcbiAgY29uc3QgbWFwQWNjZXNzb3IgPSBgXFxcXFtbJ1wiXVske3VuaWNvZGVXb3JkQ2hhcn1dK1snXCJdXFxcXF1gO1xuXG4gIHJldHVybiBuZXcgUmVnRXhwKFxuICAgIGBeKCgke3ByZWZpeExvb2tCZWhpbmR9KFske3VuaWNvZGVXb3JkQ2hhcn0ke3NwZWNpYWxXb3JkQ2hhcnN9XSspJHtzdWZmaXhMb29rQWhlYWR9KSgke2FycmF5QWNjZXNzb3J9fCR7bWFwQWNjZXNzb3J9KT8pYCxcbiAgICAndSdcbiAgKTtcbn07XG5cbi8vIFRoaXMgZW5hYmxlcyB0aGUgZm9sbG93aW5nIHN0cmluZyBwYXR0ZXJuczpcbi8vIDEuIGJhY2t0aWNrIHF1b3RlZCBzdHJpbmcgdXNpbmcgYGAgdG8gZXNjYXBlXG4vLyAyLiBzcXVhcmUgYnJhY2tldCBxdW90ZWQgc3RyaW5nIChTUUwgU2VydmVyKSB1c2luZyBdXSB0byBlc2NhcGVcbi8vIDMuIGRvdWJsZSBxdW90ZWQgc3RyaW5nIHVzaW5nIFwiXCIgb3IgXFxcIiB0byBlc2NhcGVcbi8vIDQuIHNpbmdsZSBxdW90ZWQgc3RyaW5nIHVzaW5nICcnIG9yIFxcJyB0byBlc2NhcGVcbi8vIDUuIG5hdGlvbmFsIGNoYXJhY3RlciBxdW90ZWQgc3RyaW5nIHVzaW5nIE4nJyBvciBOXFwnIHRvIGVzY2FwZVxuLy8gNi4gVW5pY29kZSBzaW5nbGUtcXVvdGVkIHN0cmluZyB1c2luZyBcXCcgdG8gZXNjYXBlXG4vLyA3LiBVbmljb2RlIGRvdWJsZS1xdW90ZWQgc3RyaW5nIHVzaW5nIFxcXCIgdG8gZXNjYXBlXG4vLyA4LiBQb3N0Z3JlU1FMIGRvbGxhci1xdW90ZWQgc3RyaW5nc1xuY29uc3QgcGF0dGVybnMgPSB7XG4gICdgYCc6ICcoKGBbXmBdKigkfGApKSspJyxcbiAgJ3t9JzogJygoXFxcXHtbXlxcXFx9XSooJHxcXFxcfSkpKyknLFxuICAnW10nOiAnKChcXFxcW1teXFxcXF1dKigkfFxcXFxdKSkoXFxcXF1bXlxcXFxdXSooJHxcXFxcXSkpKiknLFxuICAnXCJcIic6ICcoKFwiW15cIlxcXFxcXFxcXSooPzpcXFxcXFxcXC5bXlwiXFxcXFxcXFxdKikqKFwifCQpKSspJyxcbiAgXCInJ1wiOiBcIigoJ1teJ1xcXFxcXFxcXSooPzpcXFxcXFxcXC5bXidcXFxcXFxcXF0qKSooJ3wkKSkrKVwiLFxuICBcIk4nJ1wiOiBcIigoTidbXidcXFxcXFxcXF0qKD86XFxcXFxcXFwuW14nXFxcXFxcXFxdKikqKCd8JCkpKylcIixcbiAgXCJ4JydcIjogXCIoKFt4WF0nW14nXFxcXFxcXFxdKig/OlxcXFxcXFxcLlteJ1xcXFxcXFxcXSopKignfCQpKSspXCIsXG4gIFwiRScnXCI6IFwiKChFJ1teJ1xcXFxcXFxcXSooPzpcXFxcXFxcXC5bXidcXFxcXFxcXF0qKSooJ3wkKSkrKVwiLFxuICBcIlUmJydcIjogXCIoKFUmJ1teJ1xcXFxcXFxcXSooPzpcXFxcXFxcXC5bXidcXFxcXFxcXF0qKSooJ3wkKSkrKVwiLFxuICAnVSZcIlwiJzogJygoVSZcIlteXCJcXFxcXFxcXF0qKD86XFxcXFxcXFwuW15cIlxcXFxcXFxcXSopKihcInwkKSkrKScsXG4gICckJCc6ICcoKD88dGFnPlxcXFwkXFxcXHcqXFxcXCQpW1xcXFxzXFxcXFNdKj8oPzpcXFxcazx0YWc+fCQpKScsXG59O1xuZXhwb3J0IHR5cGUgU3RyaW5nUGF0dGVyblR5cGUgPSBrZXlvZiB0eXBlb2YgcGF0dGVybnM7XG5cbi8qKlxuICogQnVpbGRzIGEgc3RyaW5nIHBhdHRlcm4gZm9yIG1hdGNoaW5nIHN0cmluZyBwYXR0ZXJucyBmb3IgYWxsIGdpdmVuIHN0cmluZyB0eXBlc1xuICogQHBhcmFtIHtTdHJpbmdQYXR0ZXJuVHlwZVtdfSBzdHJpbmdUeXBlcyAtIGxpc3Qgb2Ygc3RyaW5ncyB0aGF0IGRlbm90ZSBzdHJpbmcgcGF0dGVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZVN0cmluZ1BhdHRlcm4gPSAoc3RyaW5nVHlwZXM6IFN0cmluZ1BhdHRlcm5UeXBlW10pOiBzdHJpbmcgPT5cbiAgc3RyaW5nVHlwZXMubWFwKHQgPT4gcGF0dGVybnNbdF0pLmpvaW4oJ3wnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSBSZWdFeHAgZm9yIG1hdGNoaW5nIHN0cmluZyBwYXR0ZXJucyB1c2luZyBgY3JlYXRlU3RyaW5nUGF0dGVybmBcbiAqIEBwYXJhbSB7U3RyaW5nUGF0dGVyblR5cGVbXX0gc3RyaW5nVHlwZXMgLSBsaXN0IG9mIHN0cmluZ3MgdGhhdCBkZW5vdGUgc3RyaW5nIHBhdHRlcm5zXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVTdHJpbmdSZWdleCA9IChzdHJpbmdUeXBlczogU3RyaW5nUGF0dGVyblR5cGVbXSk6IFJlZ0V4cCA9PlxuICBuZXcgUmVnRXhwKCdeKCcgKyBjcmVhdGVTdHJpbmdQYXR0ZXJuKHN0cmluZ1R5cGVzKSArICcpJywgJ3UnKTtcblxuLyoqIEVzY2FwZXMgcGFyZW4gY2hhcmFjdGVycyBmb3IgUmVnRXhwIHBhdHRlcm5zICovXG5jb25zdCBlc2NhcGVQYXJlbiA9IChwYXJlbjogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgaWYgKHBhcmVuLmxlbmd0aCA9PT0gMSkge1xuICAgIC8vIEEgc2luZ2xlIHB1bmN0dWF0aW9uIGNoYXJhY3RlclxuICAgIHJldHVybiBlc2NhcGVSZWdFeHAocGFyZW4pO1xuICB9IGVsc2Uge1xuICAgIC8vIGxvbmdlciB3b3JkXG4gICAgcmV0dXJuICdcXFxcYicgKyBwYXJlbiArICdcXFxcYic7XG4gIH1cbn07XG5cbi8qKlxuICogQnVpbGRzIGEgUmVnRXhwIGZvciBtYXRjaGluZyBwYXJlbnRoZXNpcyBwYXR0ZXJucywgZXNjYXBpbmcgdGhlbSB3aXRoIGBlc2NhcGVQYXJlbmBcbiAqIEBwYXJhbSB7c3RyaW5nW119IHBhcmVucyAtIGxpc3Qgb2Ygc3RyaW5ncyB0aGF0IGRlbm90ZSBwYXJlbnRoZXNpcyBwYXR0ZXJuc1xuICovXG5leHBvcnQgY29uc3QgY3JlYXRlUGFyZW5SZWdleCA9IChwYXJlbnM6IHN0cmluZ1tdKTogUmVnRXhwID0+XG4gIG5ldyBSZWdFeHAoJ14oJyArIHBhcmVucy5tYXAoZXNjYXBlUGFyZW4pLmpvaW4oJ3wnKSArICcpJywgJ2l1Jyk7XG5cbi8qKlxuICogQnVpbGRzIGEgUmVnRXhwIGZvciBwbGFjZWhvbGRlciBwYXR0ZXJuc1xuICogQHBhcmFtIHtzdHJpbmdbXX0gdHlwZXMgLSBsaXN0IG9mIHN0cmluZ3MgdGhhdCBkZW5vdGUgcGxhY2Vob2xkZXIgdHlwZXNcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXR0ZXJuIC0gc3RyaW5nIHRoYXQgZGVub3RlcyBwbGFjZWhvbGRlciBwYXR0ZXJuXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVQbGFjZWhvbGRlclJlZ2V4ID0gKHR5cGVzOiBzdHJpbmdbXSwgcGF0dGVybjogc3RyaW5nKTogUmVnRXhwIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKGlzRW1wdHkodHlwZXMpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCB0eXBlc1JlZ2V4ID0gdHlwZXMubWFwKGVzY2FwZVJlZ0V4cCkuam9pbignfCcpO1xuXG4gIHJldHVybiBuZXcgUmVnRXhwKGBeKCg/OiR7dHlwZXNSZWdleH0pKD86JHtwYXR0ZXJufSkpYCwgJ3UnKTtcbn07XG4iLCJpbXBvcnQgeyBJbmRlbnRTdHlsZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IFRva2VuLCBaV1MgfSBmcm9tICcuL3Rva2VuJztcblxuLyoqXG4gKiBXaGVuIHRhYnVsYXIgc3R5bGUgZW5hYmxlZCxcbiAqIHByb2R1Y2VzIGEgMTAtY2hhciB3aWRlIHZlcnNpb24gb2YgcmVzZXJ2ZWQgdG9rZW4uXG4gKlxuICogSXQnbGwgYmUgcGFkZGVkIGJ5IHplcm8td2lkdGggc3BhY2UgY2hhcmFjdGVyc1xuICogaW5zdGVhZCBvZiBub3JtYWwgc3BhY2VzLCBzbyB0aGF0IHRoZXNlIHNwYWNlcyB3aWxsIHN1cnZpdmVcbiAqIHRyaW1taW5nIG9mIHNwYWNlcyBpbiBvdGhlciBwYXJ0cyBvZiBmb3JtYXR0ZXIuXG4gKiBUaGV5J2xsIGJlIGNvbnZlcnRlZCB0byBub3JtYWwgc3BhY2VzIGluIHRoZSBlbmQgb2ZcbiAqIGFsbCB0aGUgbm9ybWFsIGZvcm1hdHRpbmcgd2l0aCB0aGUgcmVwbGFjZVRhYnVsYXJQbGFjZWhvbGRlcnMoKVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9UYWJ1bGFyVG9rZW4odG9rZW46IFRva2VuLCBpbmRlbnRTdHlsZTogSW5kZW50U3R5bGUpOiBUb2tlbiB7XG4gIGlmIChpbmRlbnRTdHlsZSA9PT0gJ3N0YW5kYXJkJykge1xuICAgIHJldHVybiB0b2tlbjtcbiAgfVxuXG4gIGxldCBidWZmZXJJdGVtID0gdG9rZW4udmFsdWU7IC8vIHN0b3JlIHdoaWNoIHBhcnQgb2Yga2V5d29yZCByZWNlaXZlcyAxMC1zcGFjZSBidWZmZXJcbiAgbGV0IHRhaWwgPSBbXSBhcyBzdHJpbmdbXTsgLy8gcmVzdCBvZiBrZXl3b3JkXG4gIGlmIChidWZmZXJJdGVtLmxlbmd0aCA+PSAxMCAmJiBidWZmZXJJdGVtLmluY2x1ZGVzKCcgJykpIHtcbiAgICAvLyBzcGxpdCBmb3IgbG9uZyBrZXl3b3JkcyBsaWtlIElOTkVSIEpPSU4gb3IgVU5JT04gRElTVElOQ1RcbiAgICBbYnVmZmVySXRlbSwgLi4udGFpbF0gPSBidWZmZXJJdGVtLnNwbGl0KCcgJyk7XG4gIH1cblxuICBpZiAoaW5kZW50U3R5bGUgPT09ICd0YWJ1bGFyTGVmdCcpIHtcbiAgICBidWZmZXJJdGVtID0gYnVmZmVySXRlbS5wYWRFbmQoOSwgWldTKTtcbiAgfSBlbHNlIHtcbiAgICBidWZmZXJJdGVtID0gYnVmZmVySXRlbS5wYWRTdGFydCg5LCBaV1MpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi50b2tlbixcbiAgICB2YWx1ZTogYnVmZmVySXRlbSArIFsnJywgLi4udGFpbF0uam9pbignICcpLFxuICB9O1xufVxuXG4vKipcbiAqIFJlcGxhY2VzIHplcm8td2lkdGgtc3BhY2VzIGFkZGVkIGJ5IHRoZSBhYm92ZSBmdW5jdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZVRhYnVsYXJQbGFjZWhvbGRlcnMocXVlcnk6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBxdWVyeS5yZXBsYWNlKG5ldyBSZWdFeHAoWldTLCAndWdpbScpLCAnICcpO1xufVxuIiwiLyoqIFRva2VuIHR5cGUgZW51bSBmb3IgYWxsIHBvc3NpYmxlIFRva2VuIGNhdGVnb3JpZXMgKi9cbmV4cG9ydCBlbnVtIFRva2VuVHlwZSB7XG4gIFdPUkQgPSAnV09SRCcsXG4gIFNUUklORyA9ICdTVFJJTkcnLFxuICBSRVNFUlZFRF9LRVlXT1JEID0gJ1JFU0VSVkVEX0tFWVdPUkQnLFxuICBSRVNFUlZFRF9MT0dJQ0FMX09QRVJBVE9SID0gJ1JFU0VSVkVEX0xPR0lDQUxfT1BFUkFUT1InLFxuICBSRVNFUlZFRF9ERVBFTkRFTlRfQ0xBVVNFID0gJ1JFU0VSVkVEX0RFUEVOREVOVF9DTEFVU0UnLFxuICBSRVNFUlZFRF9CSU5BUllfQ09NTUFORCA9ICdSRVNFUlZFRF9CSU5BUllfQ09NTUFORCcsXG4gIFJFU0VSVkVEX0NPTU1BTkQgPSAnUkVTRVJWRURfQ09NTUFORCcsXG4gIFJFU0VSVkVEX0pPSU5fQ09ORElUSU9OID0gJ1JFU0VSVkVEX0pPSU5fQ09ORElUSU9OJyxcbiAgT1BFUkFUT1IgPSAnT1BFUkFUT1InLFxuICBCTE9DS19TVEFSVCA9ICdCTE9DS19TVEFSVCcsXG4gIEJMT0NLX0VORCA9ICdCTE9DS19FTkQnLFxuICBMSU5FX0NPTU1FTlQgPSAnTElORV9DT01NRU5UJyxcbiAgQkxPQ0tfQ09NTUVOVCA9ICdCTE9DS19DT01NRU5UJyxcbiAgTlVNQkVSID0gJ05VTUJFUicsXG4gIFBMQUNFSE9MREVSID0gJ1BMQUNFSE9MREVSJyxcbiAgRU9GID0gJ0VPRicsXG59XG5cbi8qKiBTdHJ1Y3QgdG8gc3RvcmUgdGhlIG1vc3QgYmFzaWMgY29oZXNpdmUgdW5pdCBvZiBsYW5ndWFnZSBncmFtbWFyICovXG5leHBvcnQgaW50ZXJmYWNlIFRva2VuIHtcbiAgdmFsdWU6IHN0cmluZztcbiAgdHlwZTogVG9rZW5UeXBlO1xuICBrZXk/OiBzdHJpbmc7XG4gIHdoaXRlc3BhY2VCZWZvcmU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRm9yIHVzZSBhcyBhIFwibWlzc2luZyB0b2tlblwiXG4gKiBlLmcuIGluIGxvb2tBaGVhZCBhbmQgbG9va0JlaGluZCB0byBhdm9pZCBkZWFsaW5nIHdpdGggbnVsbCB2YWx1ZXNcbiAqL1xuZXhwb3J0IGNvbnN0IEVPRl9UT0tFTiA9IHsgdHlwZTogVG9rZW5UeXBlLkVPRiwgdmFsdWU6ICfCq0VPRsK7JyB9O1xuXG4vKiogU3BlY2lhbCBVbmljb2RlIGNoYXJhY3RlciB0byBzZXJ2ZSBhcyBhIHBsYWNlaG9sZGVyIGZvciB0YWJ1bGFyIGZvcm1hdHMgYXMgXFx3IHdoaXRlc3BhY2UgaXMgdW5hdmFpbGFibGUgKi9cbmV4cG9ydCBjb25zdCBaV1MgPSAn4oCLJzsgLy8gdXNlcyB6ZXJvLXdpZHRoIHNwYWNlICgmIzgyMDM7IC8gVSsyMDBCKVxuY29uc3QgWldTX1JFR0VYID0gJ1xcdTIwMGInO1xuY29uc3Qgc3BhY2VzID0gYFske1pXU19SRUdFWH1cXFxcc11gO1xuXG4vKiogQ2hlY2tzIGlmIHR3byB0b2tlbnMgYXJlIGVxdWl2YWxlbnQgKi9cbmV4cG9ydCBjb25zdCB0ZXN0VG9rZW4gPVxuICAoY29tcGFyZVRva2VuOiBUb2tlbikgPT5cbiAgKHRva2VuOiBUb2tlbik6IGJvb2xlYW4gPT5cbiAgICB0b2tlbi50eXBlID09PSBjb21wYXJlVG9rZW4udHlwZSAmJlxuICAgIG5ldyBSZWdFeHAoYF4ke3NwYWNlc30qJHtjb21wYXJlVG9rZW4udmFsdWV9JHtzcGFjZXN9KiRgLCAnaXUnKS50ZXN0KHRva2VuLnZhbHVlKTtcblxuLyoqIFV0aWwgb2JqZWN0IHRoYXQgYWxsb3dzIGZvciBlYXN5IGNoZWNraW5nIG9mIFJlc2VydmVkIEtleXdvcmRzICovXG5leHBvcnQgY29uc3QgaXNUb2tlbiA9IHtcbiAgQVM6IHRlc3RUb2tlbih7IHZhbHVlOiAnQVMnLCB0eXBlOiBUb2tlblR5cGUuUkVTRVJWRURfS0VZV09SRCB9KSxcbiAgQU5EOiB0ZXN0VG9rZW4oeyB2YWx1ZTogJ0FORCcsIHR5cGU6IFRva2VuVHlwZS5SRVNFUlZFRF9MT0dJQ0FMX09QRVJBVE9SIH0pLFxuICBCRVRXRUVOOiB0ZXN0VG9rZW4oeyB2YWx1ZTogJ0JFVFdFRU4nLCB0eXBlOiBUb2tlblR5cGUuUkVTRVJWRURfS0VZV09SRCB9KSxcbiAgQ0FTRTogdGVzdFRva2VuKHsgdmFsdWU6ICdDQVNFJywgdHlwZTogVG9rZW5UeXBlLkJMT0NLX1NUQVJUIH0pLFxuICBDQVNUOiB0ZXN0VG9rZW4oeyB2YWx1ZTogJ0NBU1QnLCB0eXBlOiBUb2tlblR5cGUuUkVTRVJWRURfS0VZV09SRCB9KSxcbiAgQlk6IHRlc3RUb2tlbih7IHZhbHVlOiAnQlknLCB0eXBlOiBUb2tlblR5cGUuUkVTRVJWRURfS0VZV09SRCB9KSxcbiAgRU5EOiB0ZXN0VG9rZW4oeyB2YWx1ZTogJ0VORCcsIHR5cGU6IFRva2VuVHlwZS5CTE9DS19FTkQgfSksXG4gIEZST006IHRlc3RUb2tlbih7IHZhbHVlOiAnRlJPTScsIHR5cGU6IFRva2VuVHlwZS5SRVNFUlZFRF9DT01NQU5EIH0pLFxuICBMSU1JVDogdGVzdFRva2VuKHsgdmFsdWU6ICdMSU1JVCcsIHR5cGU6IFRva2VuVHlwZS5SRVNFUlZFRF9DT01NQU5EIH0pLFxuICBTRUxFQ1Q6IHRlc3RUb2tlbih7IHZhbHVlOiAnU0VMRUNUJywgdHlwZTogVG9rZW5UeXBlLlJFU0VSVkVEX0NPTU1BTkQgfSksXG4gIFNFVDogdGVzdFRva2VuKHsgdmFsdWU6ICdTRVQnLCB0eXBlOiBUb2tlblR5cGUuUkVTRVJWRURfQ09NTUFORCB9KSxcbiAgVEFCTEU6IHRlc3RUb2tlbih7IHZhbHVlOiAnVEFCTEUnLCB0eXBlOiBUb2tlblR5cGUuUkVTRVJWRURfS0VZV09SRCB9KSxcbiAgV0lORE9XOiB0ZXN0VG9rZW4oeyB2YWx1ZTogJ1dJTkRPVycsIHR5cGU6IFRva2VuVHlwZS5SRVNFUlZFRF9DT01NQU5EIH0pLFxuICBXSVRIOiB0ZXN0VG9rZW4oeyB2YWx1ZTogJ1dJVEgnLCB0eXBlOiBUb2tlblR5cGUuUkVTRVJWRURfQ09NTUFORCB9KSxcbn07XG5cbi8qKiBDaGVja3MgaWYgdG9rZW4gaXMgYSBSZXNlcnZlZCBDb21tYW5kIG9yIFJlc2VydmVkIEJpbmFyeSBDb21tYW5kICovXG5leHBvcnQgY29uc3QgaXNDb21tYW5kID0gKHRva2VuOiBUb2tlbik6IGJvb2xlYW4gPT5cbiAgdG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLlJFU0VSVkVEX0NPTU1BTkQgfHwgdG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLlJFU0VSVkVEX0JJTkFSWV9DT01NQU5EO1xuXG4vKiogQ2hlY2tzIGlmIHRva2VuIGlzIGFueSBSZXNlcnZlZCBLZXl3b3JkIG9yIENvbW1hbmQgKi9cbmV4cG9ydCBjb25zdCBpc1Jlc2VydmVkID0gKHRva2VuOiBUb2tlbik6IGJvb2xlYW4gPT5cbiAgdG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLlJFU0VSVkVEX0tFWVdPUkQgfHxcbiAgdG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLlJFU0VSVkVEX0xPR0lDQUxfT1BFUkFUT1IgfHxcbiAgdG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLlJFU0VSVkVEX0RFUEVOREVOVF9DTEFVU0UgfHxcbiAgdG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLlJFU0VSVkVEX0pPSU5fQ09ORElUSU9OIHx8XG4gIHRva2VuLnR5cGUgPT09IFRva2VuVHlwZS5SRVNFUlZFRF9DT01NQU5EIHx8XG4gIHRva2VuLnR5cGUgPT09IFRva2VuVHlwZS5SRVNFUlZFRF9CSU5BUllfQ09NTUFORDtcbiIsImltcG9ydCBGb3JtYXR0ZXIgZnJvbSAnLi4vY29yZS9Gb3JtYXR0ZXInO1xuaW1wb3J0IFRva2VuaXplciBmcm9tICcuLi9jb3JlL1Rva2VuaXplcic7XG5pbXBvcnQgdHlwZSB7IFN0cmluZ1BhdHRlcm5UeXBlIH0gZnJvbSAnLi4vY29yZS9yZWdleEZhY3RvcnknO1xuaW1wb3J0IHsgVG9rZW4gfSBmcm9tICcuLi9jb3JlL3Rva2VuJztcbmltcG9ydCB7IGRlZHVwZSB9IGZyb20gJy4uL3V0aWxzJztcblxuLyoqXG4gKiBQcmlvcml0eSA1IChsYXN0KVxuICogRnVsbCBsaXN0IG9mIHJlc2VydmVkIGZ1bmN0aW9uc1xuICogZGlzdGluY3QgZnJvbSBLZXl3b3JkcyBkdWUgdG8gaW50ZXJhY3Rpb24gd2l0aCBwYXJlbnRoZXNlc1xuICovXG5jb25zdCByZXNlcnZlZEZ1bmN0aW9ucyA9IHtcbiAgLy8gaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2JpZ3F1ZXJ5L2RvY3MvcmVmZXJlbmNlL3N0YW5kYXJkLXNxbC9hZWFkX2VuY3J5cHRpb25fZnVuY3Rpb25zXG4gIGFlYWQ6IFtcbiAgICAnS0VZUy5ORVdfS0VZU0VUJyxcbiAgICAnS0VZUy5BRERfS0VZX0ZST01fUkFXX0JZVEVTJyxcbiAgICAnQUVBRC5ERUNSWVBUX0JZVEVTJyxcbiAgICAnQUVBRC5ERUNSWVBUX1NUUklORycsXG4gICAgJ0FFQUQuRU5DUllQVCcsXG4gICAgJ0tFWVMuS0VZU0VUX0NIQUlOJyxcbiAgICAnS0VZUy5LRVlTRVRfRlJPTV9KU09OJyxcbiAgICAnS0VZUy5LRVlTRVRfVE9fSlNPTicsXG4gICAgJ0tFWVMuUk9UQVRFX0tFWVNFVCcsXG4gICAgJ0tFWVMuS0VZU0VUX0xFTkdUSCcsXG4gIF0sXG4gIC8vIGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9iaWdxdWVyeS9kb2NzL3JlZmVyZW5jZS9zdGFuZGFyZC1zcWwvYWdncmVnYXRlX2FuYWx5dGljX2Z1bmN0aW9uc1xuICBhZ2dyZWdhdGVBbmFseXRpYzogW1xuICAgICdBTllfVkFMVUUnLFxuICAgICdBUlJBWV9BR0cnLFxuICAgICdBVkcnLFxuICAgICdDT1JSJyxcbiAgICAnQ09VTlQnLFxuICAgICdDT1VOVElGJyxcbiAgICAnQ09WQVJfUE9QJyxcbiAgICAnQ09WQVJfU0FNUCcsXG4gICAgJ01BWCcsXG4gICAgJ01JTicsXG4gICAgJ1NUX0NMVVNURVJEQlNDQU4nLFxuICAgICdTVERERVZfUE9QJyxcbiAgICAnU1REREVWX1NBTVAnLFxuICAgICdTVFJJTkdfQUdHJyxcbiAgICAnU1VNJyxcbiAgICAnVkFSX1BPUCcsXG4gICAgJ1ZBUl9TQU1QJyxcbiAgXSxcbiAgLy8gaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2JpZ3F1ZXJ5L2RvY3MvcmVmZXJlbmNlL3N0YW5kYXJkLXNxbC9hZ2dyZWdhdGVfZnVuY3Rpb25zXG4gIGFnZ3JlZ2F0ZTogW1xuICAgICdBTllfVkFMVUUnLFxuICAgICdBUlJBWV9BR0cnLFxuICAgICdBUlJBWV9DT05DQVRfQUdHJyxcbiAgICAnQVZHJyxcbiAgICAnQklUX0FORCcsXG4gICAgJ0JJVF9PUicsXG4gICAgJ0JJVF9YT1InLFxuICAgICdDT1VOVCcsXG4gICAgJ0NPVU5USUYnLFxuICAgICdMT0dJQ0FMX0FORCcsXG4gICAgJ0xPR0lDQUxfT1InLFxuICAgICdNQVgnLFxuICAgICdNSU4nLFxuICAgICdTVFJJTkdfQUdHJyxcbiAgICAnU1VNJyxcbiAgXSxcbiAgLy8gaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2JpZ3F1ZXJ5L2RvY3MvcmVmZXJlbmNlL3N0YW5kYXJkLXNxbC9hcHByb3hpbWF0ZV9hZ2dyZWdhdGVfZnVuY3Rpb25zXG4gIGFwcHJveGltYXRlQWdncmVnYXRlOiBbXG4gICAgJ0FQUFJPWF9DT1VOVF9ESVNUSU5DVCcsXG4gICAgJ0FQUFJPWF9RVUFOVElMRVMnLFxuICAgICdBUFBST1hfVE9QX0NPVU5UJyxcbiAgICAnQVBQUk9YX1RPUF9TVU0nLFxuICBdLFxuICAvLyBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vYmlncXVlcnkvZG9jcy9yZWZlcmVuY2Uvc3RhbmRhcmQtc3FsL2FycmF5X2Z1bmN0aW9uc1xuICBhcnJheTogW1xuICAgICdBUlJBWScsXG4gICAgJ0FSUkFZX0NPTkNBVCcsXG4gICAgJ0FSUkFZX0xFTkdUSCcsXG4gICAgJ0FSUkFZX1RPX1NUUklORycsXG4gICAgJ0dFTkVSQVRFX0FSUkFZJyxcbiAgICAnR0VORVJBVEVfREFURV9BUlJBWScsXG4gICAgJ0dFTkVSQVRFX1RJTUVTVEFNUF9BUlJBWScsXG4gICAgJ0FSUkFZX1JFVkVSU0UnLFxuICAgICdPRkZTRVQnLFxuICAgICdTQUZFX09GRlNFVCcsXG4gICAgJ09SRElOQUwnLFxuICAgICdTQUZFX09SRElOQUwnLFxuICBdLFxuICAvLyBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vYmlncXVlcnkvZG9jcy9yZWZlcmVuY2Uvc3RhbmRhcmQtc3FsL2JpdF9mdW5jdGlvbnNcbiAgYml0d2lzZTogWydCSVRfQ09VTlQnXSxcbiAgLy8gaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2JpZ3F1ZXJ5L2RvY3MvcmVmZXJlbmNlL3N0YW5kYXJkLXNxbC9jb252ZXJzaW9uX2Z1bmN0aW9uc1xuICBjb252ZXJzaW9uOiBbJ0NBU0UnLCAnUEFSU0VfQklHTlVNRVJJQycsICdQQVJTRV9OVU1FUklDJywgJ1NBRkVfQ0FTVCddLFxuICAvLyBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vYmlncXVlcnkvZG9jcy9yZWZlcmVuY2Uvc3RhbmRhcmQtc3FsL2RhdGVfZnVuY3Rpb25zXG4gIGRhdGU6IFtcbiAgICAnQ1VSUkVOVF9EQVRFJyxcbiAgICAnRVhUUkFDVCcsXG4gICAgJ0RBVEUnLFxuICAgICdEQVRFX0FERCcsXG4gICAgJ0RBVEVfU1VCJyxcbiAgICAnREFURV9ESUZGJyxcbiAgICAnREFURV9UUlVOQycsXG4gICAgJ0RBVEVfRlJPTV9VTklYX0RBVEUnLFxuICAgICdGT1JNQVRfREFURScsXG4gICAgJ0xBU1RfREFZJyxcbiAgICAnUEFSU0VfREFURScsXG4gICAgJ1VOSVhfREFURScsXG4gIF0sXG4gIC8vIGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9iaWdxdWVyeS9kb2NzL3JlZmVyZW5jZS9zdGFuZGFyZC1zcWwvZGF0ZXRpbWVfZnVuY3Rpb25zXG4gIGRhdGV0aW1lOiBbXG4gICAgJ0NVUlJFTlRfREFURVRJTUUnLFxuICAgICdEQVRFVElNRScsXG4gICAgJ0VYVFJBQ1QnLFxuICAgICdEQVRFVElNRV9BREQnLFxuICAgICdEQVRFVElNRV9TVUInLFxuICAgICdEQVRFVElNRV9ESUZGJyxcbiAgICAnREFURVRJTUVfVFJVTkMnLFxuICAgICdGT1JNQVRfREFURVRJTUUnLFxuICAgICdMQVNUX0RBWScsXG4gICAgJ1BBUlNFX0RBVEVUSU1FJyxcbiAgXSxcbiAgLy8gaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2JpZ3F1ZXJ5L2RvY3MvcmVmZXJlbmNlL3N0YW5kYXJkLXNxbC9kZWJ1Z2dpbmdfZnVuY3Rpb25zXG4gIGRlYnVnZ2luZzogWydFUlJPUiddLFxuICAvLyBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vYmlncXVlcnkvZG9jcy9yZWZlcmVuY2Uvc3RhbmRhcmQtc3FsL2ZlZGVyYXRlZF9xdWVyeV9mdW5jdGlvbnNcbiAgZmVkZXJhdGVkUXVlcnk6IFsnRVhURVJOQUxfUVVFUlknXSxcbiAgLy8gaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2JpZ3F1ZXJ5L2RvY3MvcmVmZXJlbmNlL3N0YW5kYXJkLXNxbC9nZW9ncmFwaHlfZnVuY3Rpb25zXG4gIGdlb2dyYXBoeTogW1xuICAgICdTMl9DRUxMSURGUk9NUE9JTlQnLFxuICAgICdTMl9DT1ZFUklOR0NFTExJRFMnLFxuICAgICdTVF9BTkdMRScsXG4gICAgJ1NUX0FSRUEnLFxuICAgICdTVF9BU0JJTkFSWScsXG4gICAgJ1NUX0FTR0VPSlNPTicsXG4gICAgJ1NUX0FTVEVYVCcsXG4gICAgJ1NUX0FaSU1VVEgnLFxuICAgICdTVF9CT1VOREFSWScsXG4gICAgJ1NUX0JPVU5ESU5HQk9YJyxcbiAgICAnU1RfQlVGRkVSJyxcbiAgICAnU1RfQlVGRkVSV0lUSFRPTEVSQU5DRScsXG4gICAgJ1NUX0NFTlRST0lEJyxcbiAgICAnU1RfQ0VOVFJPSURfQUdHJyxcbiAgICAnU1RfQ0xPU0VTVFBPSU5UJyxcbiAgICAnU1RfQ0xVU1RFUkRCU0NBTicsXG4gICAgJ1NUX0NPTlRBSU5TJyxcbiAgICAnU1RfQ09OVkVYSFVMTCcsXG4gICAgJ1NUX0NPVkVSRURCWScsXG4gICAgJ1NUX0NPVkVSUycsXG4gICAgJ1NUX0RJRkZFUkVOQ0UnLFxuICAgICdTVF9ESU1FTlNJT04nLFxuICAgICdTVF9ESVNKT0lOVCcsXG4gICAgJ1NUX0RJU1RBTkNFJyxcbiAgICAnU1RfRFVNUCcsXG4gICAgJ1NUX0RXSVRISU4nLFxuICAgICdTVF9FTkRQT0lOVCcsXG4gICAgJ1NUX0VRVUFMUycsXG4gICAgJ1NUX0VYVEVOVCcsXG4gICAgJ1NUX0VYVEVSSU9SUklORycsXG4gICAgJ1NUX0dFT0dGUk9NJyxcbiAgICAnU1RfR0VPR0ZST01HRU9KU09OJyxcbiAgICAnU1RfR0VPR0ZST01URVhUJyxcbiAgICAnU1RfR0VPR0ZST01XS0InLFxuICAgICdTVF9HRU9HUE9JTlQnLFxuICAgICdTVF9HRU9HUE9JTlRGUk9NR0VPSEFTSCcsXG4gICAgJ1NUX0dFT0hBU0gnLFxuICAgICdTVF9HRU9NRVRSWVRZUEUnLFxuICAgICdTVF9JTlRFUklPUlJJTkdTJyxcbiAgICAnU1RfSU5URVJTRUNUSU9OJyxcbiAgICAnU1RfSU5URVJTRUNUUycsXG4gICAgJ1NUX0lOVEVSU0VDVFNCT1gnLFxuICAgICdTVF9JU0NPTExFQ1RJT04nLFxuICAgICdTVF9JU0VNUFRZJyxcbiAgICAnU1RfTEVOR1RIJyxcbiAgICAnU1RfTUFLRUxJTkUnLFxuICAgICdTVF9NQUtFUE9MWUdPTicsXG4gICAgJ1NUX01BS0VQT0xZR09OT1JJRU5URUQnLFxuICAgICdTVF9NQVhESVNUQU5DRScsXG4gICAgJ1NUX05QT0lOVFMnLFxuICAgICdTVF9OVU1HRU9NRVRSSUVTJyxcbiAgICAnU1RfTlVNUE9JTlRTJyxcbiAgICAnU1RfUEVSSU1FVEVSJyxcbiAgICAnU1RfUE9JTlROJyxcbiAgICAnU1RfU0lNUExJRlknLFxuICAgICdTVF9TTkFQVE9HUklEJyxcbiAgICAnU1RfU1RBUlRQT0lOVCcsXG4gICAgJ1NUX1RPVUNIRVMnLFxuICAgICdTVF9VTklPTicsXG4gICAgJ1NUX1VOSU9OX0FHRycsXG4gICAgJ1NUX1dJVEhJTicsXG4gICAgJ1NUX1gnLFxuICAgICdTVF9ZJyxcbiAgXSxcbiAgLy8gaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2JpZ3F1ZXJ5L2RvY3MvcmVmZXJlbmNlL3N0YW5kYXJkLXNxbC9oYXNoX2Z1bmN0aW9uc1xuICBoYXNoOiBbJ0ZBUk1fRklOR0VSUFJJTlQnLCAnTUQ1JywgJ1NIQTEnLCAnU0hBMjU2JywgJ1NIQTUxMiddLFxuICAvLyBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vYmlncXVlcnkvZG9jcy9yZWZlcmVuY2Uvc3RhbmRhcmQtc3FsL2hsbF9mdW5jdGlvbnNcbiAgaGxsOiBbJ0hMTF9DT1VOVC5JTklUJywgJ0hMTF9DT1VOVC5NRVJHRScsICdITExfQ09VTlQuTUVSR0VfUEFSVElBTCcsICdITExfQ09VTlQuRVhUUkFDVCddLFxuICAvLyBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vYmlncXVlcnkvZG9jcy9yZWZlcmVuY2Uvc3RhbmRhcmQtc3FsL2ludGVydmFsX2Z1bmN0aW9uc1xuICBpbnRlcnZhbDogWydNQUtFX0lOVEVSVkFMJywgJ0VYVFJBQ1QnLCAnSlVTVElGWV9EQVlTJywgJ0pVU1RJRllfSE9VUlMnLCAnSlVTVElGWV9JTlRFUlZBTCddLFxuICAvLyBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vYmlncXVlcnkvZG9jcy9yZWZlcmVuY2Uvc3RhbmRhcmQtc3FsL2pzb25fZnVuY3Rpb25zXG4gIGpzb246IFtcbiAgICAnSlNPTl9FWFRSQUNUJyxcbiAgICAnSlNPTl9RVUVSWScsXG4gICAgJ0pTT05fRVhUUkFDVF9TQ0FMQVInLFxuICAgICdKU09OX1ZBTFVFJyxcbiAgICAnSlNPTl9FWFRSQUNUX0FSUkFZJyxcbiAgICAnSlNPTl9RVUVSWV9BUlJBWScsXG4gICAgJ0pTT05fRVhUUkFDVF9TVFJJTkdfQVJSQVknLFxuICAgICdKU09OX1ZBTFVFX0FSUkFZJyxcbiAgICAnVE9fSlNPTl9TVFJJTkcnLFxuICBdLFxuICAvLyBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vYmlncXVlcnkvZG9jcy9yZWZlcmVuY2Uvc3RhbmRhcmQtc3FsL21hdGhlbWF0aWNhbF9mdW5jdGlvbnNcbiAgbWF0aDogW1xuICAgICdBQlMnLFxuICAgICdTSUdOJyxcbiAgICAnSVNfSU5GJyxcbiAgICAnSVNfTkFOJyxcbiAgICAnSUVFRV9ESVZJREUnLFxuICAgICdSQU5EJyxcbiAgICAnU1FSVCcsXG4gICAgJ1BPVycsXG4gICAgJ1BPV0VSJyxcbiAgICAnRVhQJyxcbiAgICAnTE4nLFxuICAgICdMT0cnLFxuICAgICdMT0cxMCcsXG4gICAgJ0dSRUFURVNUJyxcbiAgICAnTEVBU1QnLFxuICAgICdESVYnLFxuICAgICdTQUZFX0RJVklERScsXG4gICAgJ1NBRkVfTVVMVElQTFknLFxuICAgICdTQUZFX05FR0FURScsXG4gICAgJ1NBRkVfQUREJyxcbiAgICAnU0FGRV9TVUJUUkFDVCcsXG4gICAgJ01PRCcsXG4gICAgJ1JPVU5EJyxcbiAgICAnVFJVTkMnLFxuICAgICdDRUlMJyxcbiAgICAnQ0VJTElORycsXG4gICAgJ0ZMT09SJyxcbiAgICAnQ09TJyxcbiAgICAnQ09TSCcsXG4gICAgJ0FDT1MnLFxuICAgICdBQ09TSCcsXG4gICAgJ1NJTicsXG4gICAgJ1NJTkgnLFxuICAgICdBU0lOJyxcbiAgICAnQVNJTkgnLFxuICAgICdUQU4nLFxuICAgICdUQU5IJyxcbiAgICAnQVRBTicsXG4gICAgJ0FUQU5IJyxcbiAgICAnQVRBTjInLFxuICAgICdSQU5HRV9CVUNLRVQnLFxuICBdLFxuICAvLyBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vYmlncXVlcnkvZG9jcy9yZWZlcmVuY2Uvc3RhbmRhcmQtc3FsL25hdmlnYXRpb25fZnVuY3Rpb25zXG4gIG5hdmlnYXRpb246IFtcbiAgICAnRklSU1RfVkFMVUUnLFxuICAgICdMQVNUX1ZBTFVFJyxcbiAgICAnTlRIX1ZBTFVFJyxcbiAgICAnTEVBRCcsXG4gICAgJ0xBRycsXG4gICAgJ1BFUkNFTlRJTEVfQ09OVCcsXG4gICAgJ1BFUkNFTlRJTEVfRElTQycsXG4gIF0sXG4gIC8vIGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9iaWdxdWVyeS9kb2NzL3JlZmVyZW5jZS9zdGFuZGFyZC1zcWwvbmV0X2Z1bmN0aW9uc1xuICBuZXQ6IFtcbiAgICAnTkVULklQX0ZST01fU1RSSU5HJyxcbiAgICAnTkVULlNBRkVfSVBfRlJPTV9TVFJJTkcnLFxuICAgICdORVQuSVBfVE9fU1RSSU5HJyxcbiAgICAnTkVULklQX05FVF9NQVNLJyxcbiAgICAnTkVULklQX1RSVU5DJyxcbiAgICAnTkVULklQVjRfRlJPTV9JTlQ2NCcsXG4gICAgJ05FVC5JUFY0X1RPX0lOVDY0JyxcbiAgICAnTkVULkhPU1QnLFxuICAgICdORVQuUFVCTElDX1NVRkZJWCcsXG4gICAgJ05FVC5SRUdfRE9NQUlOJyxcbiAgXSxcbiAgLy8gaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2JpZ3F1ZXJ5L2RvY3MvcmVmZXJlbmNlL3N0YW5kYXJkLXNxbC9udW1iZXJpbmdfZnVuY3Rpb25zXG4gIG51bWJlcmluZzogWydSQU5LJywgJ0RFTlNFX1JBTksnLCAnUEVSQ0VOVF9SQU5LJywgJ0NVTUVfRElTVCcsICdOVElMRScsICdST1dfTlVNQkVSJ10sXG4gIC8vIGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9iaWdxdWVyeS9kb2NzL3JlZmVyZW5jZS9zdGFuZGFyZC1zcWwvc2VjdXJpdHlfZnVuY3Rpb25zXG4gIHNlY3VyaXR5OiBbJ1NFU1NJT05fVVNFUiddLFxuICAvLyBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vYmlncXVlcnkvZG9jcy9yZWZlcmVuY2Uvc3RhbmRhcmQtc3FsL3N0YXRpc3RpY2FsX2FnZ3JlZ2F0ZV9mdW5jdGlvbnNcbiAgc3RhdGlzdGljYWxBZ2dyZWdhdGU6IFtcbiAgICAnQ09SUicsXG4gICAgJ0NPVkFSX1BPUCcsXG4gICAgJ0NPVkFSX1NBTVAnLFxuICAgICdTVERERVZfUE9QJyxcbiAgICAnU1REREVWX1NBTVAnLFxuICAgICdTVERERVYnLFxuICAgICdWQVJfUE9QJyxcbiAgICAnVkFSX1NBTVAnLFxuICAgICdWQVJJQU5DRScsXG4gIF0sXG4gIC8vIGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9iaWdxdWVyeS9kb2NzL3JlZmVyZW5jZS9zdGFuZGFyZC1zcWwvc3RyaW5nX2Z1bmN0aW9uc1xuICBzdHJpbmc6IFtcbiAgICAnQVNDSUknLFxuICAgICdCWVRFX0xFTkdUSCcsXG4gICAgJ0NIQVJfTEVOR1RIJyxcbiAgICAnQ0hBUkFDVEVSX0xFTkdUSCcsXG4gICAgJ0NIUicsXG4gICAgJ0NPREVfUE9JTlRTX1RPX0JZVEVTJyxcbiAgICAnQ09ERV9QT0lOVFNfVE9fU1RSSU5HJyxcbiAgICAnQ09OQ0FUJyxcbiAgICAnQ09OVEFJTlNfU1VCU1RSJyxcbiAgICAnRU5EU19XSVRIJyxcbiAgICAnRk9STUFUJyxcbiAgICAnRlJPTV9CQVNFMzInLFxuICAgICdGUk9NX0JBU0U2NCcsXG4gICAgJ0ZST01fSEVYJyxcbiAgICAnSU5JVENBUCcsXG4gICAgJ0lOU1RSJyxcbiAgICAnTEVGVCcsXG4gICAgJ0xFTkdUSCcsXG4gICAgJ0xQQUQnLFxuICAgICdMT1dFUicsXG4gICAgJ0xUUklNJyxcbiAgICAnTk9STUFMSVpFJyxcbiAgICAnTk9STUFMSVpFX0FORF9DQVNFRk9MRCcsXG4gICAgJ09DVEVUX0xFTkdUSCcsXG4gICAgJ1JFR0VYUF9DT05UQUlOUycsXG4gICAgJ1JFR0VYUF9FWFRSQUNUJyxcbiAgICAnUkVHRVhQX0VYVFJBQ1RfQUxMJyxcbiAgICAnUkVHRVhQX0lOU1RSJyxcbiAgICAnUkVHRVhQX1JFUExBQ0UnLFxuICAgICdSRUdFWFBfU1VCU1RSJyxcbiAgICAnUkVQTEFDRScsXG4gICAgJ1JFUEVBVCcsXG4gICAgJ1JFVkVSU0UnLFxuICAgICdSSUdIVCcsXG4gICAgJ1JQQUQnLFxuICAgICdSVFJJTScsXG4gICAgJ1NBRkVfQ09OVkVSVF9CWVRFU19UT19TVFJJTkcnLFxuICAgICdTT1VOREVYJyxcbiAgICAnU1BMSVQnLFxuICAgICdTVEFSVFNfV0lUSCcsXG4gICAgJ1NUUlBPUycsXG4gICAgJ1NVQlNUUicsXG4gICAgJ1NVQlNUUklORycsXG4gICAgJ1RPX0JBU0UzMicsXG4gICAgJ1RPX0JBU0U2NCcsXG4gICAgJ1RPX0NPREVfUE9JTlRTJyxcbiAgICAnVE9fSEVYJyxcbiAgICAnVFJBTlNMQVRFJyxcbiAgICAnVFJJTScsXG4gICAgJ1VOSUNPREUnLFxuICAgICdVUFBFUicsXG4gIF0sXG4gIC8vIGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9iaWdxdWVyeS9kb2NzL3JlZmVyZW5jZS9zdGFuZGFyZC1zcWwvdGltZV9mdW5jdGlvbnNcbiAgdGltZTogW1xuICAgICdDVVJSRU5UX1RJTUUnLFxuICAgICdUSU1FJyxcbiAgICAnRVhUUkFDVCcsXG4gICAgJ1RJTUVfQUREJyxcbiAgICAnVElNRV9TVUInLFxuICAgICdUSU1FX0RJRkYnLFxuICAgICdUSU1FX1RSVU5DJyxcbiAgICAnRk9STUFUX1RJTUUnLFxuICAgICdQQVJTRV9USU1FJyxcbiAgXSxcbiAgLy8gaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2JpZ3F1ZXJ5L2RvY3MvcmVmZXJlbmNlL3N0YW5kYXJkLXNxbC90aW1lc3RhbXBfZnVuY3Rpb25zXG4gIHRpbWVzdGFtcDogW1xuICAgICdDVVJSRU5UX1RJTUVTVEFNUCcsXG4gICAgJ0VYVFJBQ1QnLFxuICAgICdTVFJJTkcnLFxuICAgICdUSU1FU1RBTVAnLFxuICAgICdUSU1FU1RBTVBfQUREJyxcbiAgICAnVElNRVNUQU1QX1NVQicsXG4gICAgJ1RJTUVTVEFNUF9ESUZGJyxcbiAgICAnVElNRVNUQU1QX1RSVU5DJyxcbiAgICAnRk9STUFUX1RJTUVTVEFNUCcsXG4gICAgJ1BBUlNFX1RJTUVTVEFNUCcsXG4gICAgJ1RJTUVTVEFNUF9TRUNPTkRTJyxcbiAgICAnVElNRVNUQU1QX01JTExJUycsXG4gICAgJ1RJTUVTVEFNUF9NSUNST1MnLFxuICAgICdVTklYX1NFQ09ORFMnLFxuICAgICdVTklYX01JTExJUycsXG4gICAgJ1VOSVhfTUlDUk9TJyxcbiAgXSxcbiAgLy8gaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2JpZ3F1ZXJ5L2RvY3MvcmVmZXJlbmNlL3N0YW5kYXJkLXNxbC91dWlkX2Z1bmN0aW9uc1xuICB1dWlkOiBbJ0dFTkVSQVRFX1VVSUQnXSxcbiAgLy8gaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2JpZ3F1ZXJ5L2RvY3MvcmVmZXJlbmNlL3N0YW5kYXJkLXNxbC9jb25kaXRpb25hbF9leHByZXNzaW9uc1xuICBjb25kaXRpb25hbDogWydDT0FMRVNDRScsICdJRicsICdJRk5VTEwnLCAnTlVMTElGJ10sXG4gIC8vIGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9iaWdxdWVyeS9kb2NzL3JlZmVyZW5jZS9sZWdhY3ktc3FsXG4gIGxlZ2FjeUFnZ3JlZ2F0ZTogW1xuICAgICdBVkcnLFxuICAgICdCSVRfQU5EJyxcbiAgICAnQklUX09SJyxcbiAgICAnQklUX1hPUicsXG4gICAgJ0NPUlInLFxuICAgICdDT1VOVCcsXG4gICAgJ0NPVkFSX1BPUCcsXG4gICAgJ0NPVkFSX1NBTVAnLFxuICAgICdFWEFDVF9DT1VOVF9ESVNUSU5DVCcsXG4gICAgJ0ZJUlNUJyxcbiAgICAnR1JPVVBfQ09OQ0FUJyxcbiAgICAnR1JPVVBfQ09OQ0FUX1VOUVVPVEVEJyxcbiAgICAnTEFTVCcsXG4gICAgJ01BWCcsXG4gICAgJ01JTicsXG4gICAgJ05FU1QnLFxuICAgICdOVEgnLFxuICAgICdRVUFOVElMRVMnLFxuICAgICdTVERERVYnLFxuICAgICdTVERERVZfUE9QJyxcbiAgICAnU1REREVWX1NBTVAnLFxuICAgICdTVU0nLFxuICAgICdUT1AnLFxuICAgICdVTklRVUUnLFxuICAgICdWQVJJQU5DRScsXG4gICAgJ1ZBUl9QT1AnLFxuICAgICdWQVJfU0FNUCcsXG4gIF0sXG4gIGxlZ2FjeUJpdHdpc2U6IFsnQklUX0NPVU5UJ10sXG4gIGxlZ2FjeUNhc3Rpbmc6IFsnQk9PTEVBTicsICdCWVRFUycsICdDQVNUJywgJ0ZMT0FUJywgJ0hFWF9TVFJJTkcnLCAnSU5URUdFUicsICdTVFJJTkcnXSxcbiAgbGVnYWN5Q29tcGFyaXNvbjogW1xuICAgIC8vIGV4cHIgJ0lOJyxcbiAgICAnQ09BTEVTQ0UnLFxuICAgICdHUkVBVEVTVCcsXG4gICAgJ0lGTlVMTCcsXG4gICAgJ0lTX0lORicsXG4gICAgJ0lTX05BTicsXG4gICAgJ0lTX0VYUExJQ0lUTFlfREVGSU5FRCcsXG4gICAgJ0xFQVNUJyxcbiAgICAnTlZMJyxcbiAgXSxcbiAgbGVnYWN5RGF0ZXRpbWU6IFtcbiAgICAnQ1VSUkVOVF9EQVRFJyxcbiAgICAnQ1VSUkVOVF9USU1FJyxcbiAgICAnQ1VSUkVOVF9USU1FU1RBTVAnLFxuICAgICdEQVRFJyxcbiAgICAnREFURV9BREQnLFxuICAgICdEQVRFRElGRicsXG4gICAgJ0RBWScsXG4gICAgJ0RBWU9GV0VFSycsXG4gICAgJ0RBWU9GWUVBUicsXG4gICAgJ0ZPUk1BVF9VVENfVVNFQycsXG4gICAgJ0hPVVInLFxuICAgICdNSU5VVEUnLFxuICAgICdNT05USCcsXG4gICAgJ01TRUNfVE9fVElNRVNUQU1QJyxcbiAgICAnTk9XJyxcbiAgICAnUEFSU0VfVVRDX1VTRUMnLFxuICAgICdRVUFSVEVSJyxcbiAgICAnU0VDX1RPX1RJTUVTVEFNUCcsXG4gICAgJ1NFQ09ORCcsXG4gICAgJ1NUUkZUSU1FX1VUQ19VU0VDJyxcbiAgICAnVElNRScsXG4gICAgJ1RJTUVTVEFNUCcsXG4gICAgJ1RJTUVTVEFNUF9UT19NU0VDJyxcbiAgICAnVElNRVNUQU1QX1RPX1NFQycsXG4gICAgJ1RJTUVTVEFNUF9UT19VU0VDJyxcbiAgICAnVVNFQ19UT19USU1FU1RBTVAnLFxuICAgICdVVENfVVNFQ19UT19EQVknLFxuICAgICdVVENfVVNFQ19UT19IT1VSJyxcbiAgICAnVVRDX1VTRUNfVE9fTU9OVEgnLFxuICAgICdVVENfVVNFQ19UT19XRUVLJyxcbiAgICAnVVRDX1VTRUNfVE9fWUVBUicsXG4gICAgJ1dFRUsnLFxuICAgICdZRUFSJyxcbiAgXSxcbiAgbGVnYWN5SXA6IFsnRk9STUFUX0lQJywgJ1BBUlNFX0lQJywgJ0ZPUk1BVF9QQUNLRURfSVAnLCAnUEFSU0VfUEFDS0VEX0lQJ10sXG4gIGxlZ2FjeUpzb246IFsnSlNPTl9FWFRSQUNUJywgJ0pTT05fRVhUUkFDVF9TQ0FMQVInXSxcbiAgbGVnYWN5TWF0aDogW1xuICAgICdBQlMnLFxuICAgICdBQ09TJyxcbiAgICAnQUNPU0gnLFxuICAgICdBU0lOJyxcbiAgICAnQVNJTkgnLFxuICAgICdBVEFOJyxcbiAgICAnQVRBTkgnLFxuICAgICdBVEFOMicsXG4gICAgJ0NFSUwnLFxuICAgICdDT1MnLFxuICAgICdDT1NIJyxcbiAgICAnREVHUkVFUycsXG4gICAgJ0VYUCcsXG4gICAgJ0ZMT09SJyxcbiAgICAnTE4nLFxuICAgICdMT0cnLFxuICAgICdMT0cyJyxcbiAgICAnTE9HMTAnLFxuICAgICdQSScsXG4gICAgJ1BPVycsXG4gICAgJ1JBRElBTlMnLFxuICAgICdSQU5EJyxcbiAgICAnUk9VTkQnLFxuICAgICdTSU4nLFxuICAgICdTSU5IJyxcbiAgICAnU1FSVCcsXG4gICAgJ1RBTicsXG4gICAgJ1RBTkgnLFxuICBdLFxuICBsZWdhY3lSZWdleDogWydSRUdFWFBfTUFUQ0gnLCAnUkVHRVhQX0VYVFJBQ1QnLCAnUkVHRVhQX1JFUExBQ0UnXSxcbiAgbGVnYWN5U3RyaW5nOiBbXG4gICAgJ0NPTkNBVCcsXG4gICAgLy8gZXhwciBDT05UQUlOUyAnc3RyJ1xuICAgICdJTlNUUicsXG4gICAgJ0xFRlQnLFxuICAgICdMRU5HVEgnLFxuICAgICdMT1dFUicsXG4gICAgJ0xQQUQnLFxuICAgICdMVFJJTScsXG4gICAgJ1JFUExBQ0UnLFxuICAgICdSSUdIVCcsXG4gICAgJ1JQQUQnLFxuICAgICdSVFJJTScsXG4gICAgJ1NQTElUJyxcbiAgICAnU1VCU1RSJyxcbiAgICAnVVBQRVInLFxuICBdLFxuICBsZWdhY3lUYWJsZVdpbGRjYXJkOiBbJ1RBQkxFX0RBVEVfUkFOR0UnLCAnVEFCTEVfREFURV9SQU5HRV9TVFJJQ1QnLCAnVEFCTEVfUVVFUlknXSxcbiAgbGVnYWN5VXJsOiBbJ0hPU1QnLCAnRE9NQUlOJywgJ1RMRCddLFxuICBsZWdhY3lXaW5kb3c6IFtcbiAgICAnQVZHJyxcbiAgICAnQ09VTlQnLFxuICAgICdNQVgnLFxuICAgICdNSU4nLFxuICAgICdTVERERVYnLFxuICAgICdTVU0nLFxuICAgICdDVU1FX0RJU1QnLFxuICAgICdERU5TRV9SQU5LJyxcbiAgICAnRklSU1RfVkFMVUUnLFxuICAgICdMQUcnLFxuICAgICdMQVNUX1ZBTFVFJyxcbiAgICAnTEVBRCcsXG4gICAgJ05USF9WQUxVRScsXG4gICAgJ05USUxFJyxcbiAgICAnUEVSQ0VOVF9SQU5LJyxcbiAgICAnUEVSQ0VOVElMRV9DT05UJyxcbiAgICAnUEVSQ0VOVElMRV9ESVNDJyxcbiAgICAnUkFOSycsXG4gICAgJ1JBVElPX1RPX1JFUE9SVCcsXG4gICAgJ1JPV19OVU1CRVInLFxuICBdLFxuICBsZWdhY3lNaXNjOiBbXG4gICAgJ0NVUlJFTlRfVVNFUicsXG4gICAgJ0VWRVJZJyxcbiAgICAnRlJPTV9CQVNFNjQnLFxuICAgICdIQVNIJyxcbiAgICAnRkFSTV9GSU5HRVJQUklOVCcsXG4gICAgJ0lGJyxcbiAgICAnUE9TSVRJT04nLFxuICAgICdTSEExJyxcbiAgICAnU09NRScsXG4gICAgJ1RPX0JBU0U2NCcsXG4gIF0sXG4gIG90aGVyOiBbJ0JRLkpPQlMuQ0FOQ0VMJywgJ0JRLlJFRlJFU0hfTUFURVJJQUxJWkVEX1ZJRVcnXSxcbn07XG5cbi8qKlxuICogUHJpb3JpdHkgNSAobGFzdClcbiAqIEZ1bGwgbGlzdCBvZiByZXNlcnZlZCB3b3Jkc1xuICogYW55IHdvcmRzIHRoYXQgYXJlIGluIGEgaGlnaGVyIHByaW9yaXR5IGFyZSByZW1vdmVkXG4gKi9cbmNvbnN0IHJlc2VydmVkS2V5d29yZHMgPSB7XG4gIGtleXdvcmRzOiBbXG4gICAgJ0FMTCcsXG4gICAgLy8gJ0FORCcsXG4gICAgJ0FOWScsXG4gICAgLy8gJ0FSUkFZJyxcbiAgICAnQVMnLFxuICAgICdBU0MnLFxuICAgICdBU1NFUlRfUk9XU19NT0RJRklFRCcsXG4gICAgJ0FUJyxcbiAgICAnQkVUV0VFTicsXG4gICAgJ0JZJyxcbiAgICAvLyAnQ0FTRScsXG4gICAgJ0NBU1QnLFxuICAgICdDT0xMQVRFJyxcbiAgICAnQ09OVEFJTlMnLFxuICAgIC8vICdDUkVBVEUnLFxuICAgIC8vICdDUk9TUycsXG4gICAgJ0NVQkUnLFxuICAgICdDVVJSRU5UJyxcbiAgICAnREVGQVVMVCcsXG4gICAgJ0RFRklORScsXG4gICAgJ0RFU0MnLFxuICAgICdESVNUSU5DVCcsXG4gICAgLy8gJ0VMU0UnLFxuICAgIC8vICdFTkQnLFxuICAgICdFTlVNJyxcbiAgICAnRVNDQVBFJyxcbiAgICAvLyAnRVhDRVBUJyxcbiAgICAvLyAnRVhDTFVERScsXG4gICAgJ0VYSVNUUycsXG4gICAgJ0VYVFJBQ1QnLFxuICAgICdGQUxTRScsXG4gICAgLy8gJ0ZFVENIJyxcbiAgICAnRk9MTE9XSU5HJyxcbiAgICAnRk9SJyxcbiAgICAvLyAnRlJPTScsXG4gICAgJ0ZVTEwnLFxuICAgIC8vICdHUk9VUCcsXG4gICAgJ0dST1VQSU5HJyxcbiAgICAnR1JPVVBTJyxcbiAgICAnSEFTSCcsXG4gICAgLy8gJ0hBVklORycsXG4gICAgJ0lGJyxcbiAgICAnSUdOT1JFJyxcbiAgICAnSU4nLFxuICAgIC8vICdJTk5FUicsXG4gICAgLy8gJ0lOVEVSU0VDVCcsXG4gICAgLy8gJ0lOVEVSVkFMJyxcbiAgICAnSU5UTycsXG4gICAgJ0lTJyxcbiAgICAvLyAnSk9JTicsXG4gICAgLy8gJ0xBVEVSQUwnLFxuICAgIC8vICdMRUZUJyxcbiAgICAnTElLRScsXG4gICAgLy8gJ0xJTUlUJyxcbiAgICAnTE9PS1VQJyxcbiAgICAvLyAnTUVSR0UnLFxuICAgIC8vICdOQVRVUkFMJyxcbiAgICAnTkVXJyxcbiAgICAnTk8nLFxuICAgICdOT1QnLFxuICAgICdOVUxMJyxcbiAgICAnTlVMTFMnLFxuICAgICdPRicsXG4gICAgLy8gJ09OJyxcbiAgICAvLyAnT1InLFxuICAgIC8vICdPUkRFUicsXG4gICAgLy8gJ09VVEVSJyxcbiAgICAnT1ZFUicsXG4gICAgJ1BBUlRJVElPTicsXG4gICAgJ1BSRUNFRElORycsXG4gICAgJ1BST1RPJyxcbiAgICAnUkFOR0UnLFxuICAgICdSRUNVUlNJVkUnLFxuICAgICdSRVNQRUNUJyxcbiAgICAvLyAnUklHSFQnLFxuICAgICdST0xMVVAnLFxuICAgICdST1dTJyxcbiAgICAvLyAnU0VMRUNUJyxcbiAgICAvLyAnU0VUJyxcbiAgICAnU09NRScsXG4gICAgLy8gJ1NUUlVDVCcsXG4gICAgJ1RBQkxFJyxcbiAgICAvLyAnVEFCTEVTQU1QTEUnLFxuICAgICdUSEVOJyxcbiAgICAnVE8nLFxuICAgICdUUkVBVCcsXG4gICAgJ1RSVUUnLFxuICAgICdVTkJPVU5ERUQnLFxuICAgIC8vICdVTklPTicsXG4gICAgLy8gJ1VOTkVTVCcsXG4gICAgLy8gJ1VTSU5HJyxcbiAgICAvLyAnV0hFTicsXG4gICAgLy8gJ1dIRVJFJyxcbiAgICAvLyAnV0lORE9XJyxcbiAgICAvLyAnV0lUSCcsXG4gICAgJ1dJVEhJTicsXG4gIF0sXG4gIGRhdGF0eXBlczogW1xuICAgICdBUlJBWScsIC8vIHBhcmFtZXRyaWMsIEFSUkFZPFQ+XG4gICAgJ0JPT0wnLFxuICAgICdCWVRFUycsIC8vIHBhcmFtZXRlcmlzZWQsIEJZVEVTKExlbmd0aClcbiAgICAnREFURScsXG4gICAgJ0RBVEVUSU1FJyxcbiAgICAnR0VPR1JBUEhZJyxcbiAgICAnSU5URVJWQUwnLFxuICAgICdJTlQ2NCcsXG4gICAgJ0lOVCcsXG4gICAgJ1NNQUxMSU5UJyxcbiAgICAnSU5URUdFUicsXG4gICAgJ0JJR0lOVCcsXG4gICAgJ1RJTllJTlQnLFxuICAgICdCWVRFSU5UJyxcbiAgICAnTlVNRVJJQycsIC8vIHBhcmFtZXRlcmlzZWQsIE5VTUVSSUMoUHJlY2lzaW9uWywgU2NhbGVdKVxuICAgICdERUNJTUFMJywgLy8gcGFyYW1ldGVyaXNlZCwgREVDSU1BTChQcmVjaXNpb25bLCBTY2FsZV0pXG4gICAgJ0JJR05VTUVSSUMnLCAvLyBwYXJhbWV0ZXJpc2VkLCBCSUdOVU1FUklDKFByZWNpc2lvblssIFNjYWxlXSlcbiAgICAnQklHREVDSU1BTCcsIC8vIHBhcmFtZXRlcmlzZWQsIEJJR0RFQ0lNQUwoUHJlY2lzaW9uWywgU2NhbGVdKVxuICAgICdGTE9BVDY0JyxcbiAgICAnU1RSSU5HJywgLy8gcGFyYW1ldGVyaXNlZCwgU1RSSU5HKExlbmd0aClcbiAgICAnU1RSVUNUJywgLy8gcGFyYW1ldHJpYywgU1RSVUNUPFQ+XG4gICAgJ1RJTUUnLFxuICAgICdUSU1FWk9ORScsXG4gIF0sXG4gIC8vIGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9iaWdxdWVyeS9kb2NzL3JlZmVyZW5jZS9zdGFuZGFyZC1zcWwvY29udmVyc2lvbl9mdW5jdGlvbnMjZm9ybWF0dGluZ19zeW50YXhcbiAgc3RyaW5nRm9ybWF0OiBbJ0hFWCcsICdCQVNFWCcsICdCQVNFNjRNJywgJ0FTQ0lJJywgJ1VURi04JywgJ1VURjgnXSxcbiAgbWlzYzogWydTQUZFJ10sXG59O1xuXG4vKipcbiAqIFByaW9yaXR5IDEgKGZpcnN0KVxuICoga2V5d29yZHMgdGhhdCBiZWdpbiBhIG5ldyBzdGF0ZW1lbnRcbiAqIHdpbGwgYmVnaW4gbmV3IGluZGVudGVkIGJsb2NrXG4gKi9cbmNvbnN0IHJlc2VydmVkQ29tbWFuZHMgPSBbXG4gIC8vIERRTCwgaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2JpZ3F1ZXJ5L2RvY3MvcmVmZXJlbmNlL3N0YW5kYXJkLXNxbC9xdWVyeS1zeW50YXhcbiAgJ1NFTEVDVCcsXG4gICdGUk9NJyxcbiAgJ1VOTkVTVCcsXG4gICdQSVZPVCcsXG4gICdVTlBJVk9UJyxcbiAgJ1RBQkxFU0FNUExFIFNZU1RFTScsXG4gICdXSEVSRScsXG4gICdHUk9VUCBCWScsXG4gICdIQVZJTkcnLFxuICAnT1JERVIgQlknLFxuICAnUVVBTElGWScsXG4gICdXSU5ET1cnLFxuICAnTElNSVQnLFxuICAnT0ZGU0VUJyxcbiAgJ1dJVEgnLFxuICAnT01JVCBSRUNPUkQgSUYnLCAvLyBsZWdhY3lcbiAgLy8gRE1MLCBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vYmlncXVlcnkvZG9jcy9yZWZlcmVuY2Uvc3RhbmRhcmQtc3FsL2RtbC1zeW50YXhcbiAgJ0lOU0VSVCcsXG4gICdJTlNFUlQgSU5UTycsXG4gICdWQUxVRVMnLFxuICAnREVMRVRFJyxcbiAgLy8gJ0RFTEVURSBGUk9NJyxcbiAgJ1RSVU5DQVRFIFRBQkxFJyxcbiAgJ1VQREFURScsXG4gICdNRVJHRScsXG4gICdNRVJHRSBJTlRPJyxcbiAgLy8gJ1VTSU5HJyxcbiAgLy8gRERMLCBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vYmlncXVlcnkvZG9jcy9yZWZlcmVuY2Uvc3RhbmRhcmQtc3FsL2RhdGEtZGVmaW5pdGlvbi1sYW5ndWFnZVxuICAnU0VUIFNDSEVNQScsIC8vIGFkZGVkXG4gICdDUkVBVEUgU0NIRU1BJyxcbiAgJ0NSRUFURSBUQUJMRScsXG4gICdDUkVBVEUgVEFCTEUgTElLRScsXG4gICdDUkVBVEUgVEFCTEUgQ09QWScsXG4gICdDUkVBVEUgU05BUFNIT1QgVEFCTEUnLFxuICAnQ1JFQVRFIFRBQkxFIENMT05FJyxcbiAgJ0NSRUFURSBWSUVXJyxcbiAgJ0NSRUFURSBNQVRFUklBTElaRUQgVklFVycsXG4gICdDUkVBVEUgRVhURVJOQUwgVEFCTEUnLFxuICAnQ1JFQVRFIEZVTkNUSU9OJyxcbiAgJ0NSRUFURSBUQUJMRSBGVU5DVElPTicsXG4gICdDUkVBVEUgUFJPQ0VEVVJFJyxcbiAgJ0NSRUFURSBST1cgQUNDRVNTIFBPTElDWScsXG4gICdBTFRFUiBTQ0hFTUEgU0VUIE9QVElPTlMnLFxuICAnQUxURVIgVEFCTEUgU0VUIE9QVElPTlMnLFxuICAnQUxURVIgVEFCTEUgQUREIENPTFVNTicsXG4gICdBTFRFUiBUQUJMRSBSRU5BTUUgVE8nLFxuICAnQUxURVIgVEFCTEUgRFJPUCBDT0xVTU4nLFxuICAnQUxURVIgQ09MVU1OIFNFVCBPUFRJT05TJyxcbiAgJ0FMVEVSIENPTFVNTiBEUk9QIE5PVCBOVUxMJyxcbiAgJ0FMVEVSIENPTFVNTiBTRVQgREFUQSBUWVBFJyxcbiAgJ0FMVEVSIFZJRVcgU0VUIE9QVElPTlMnLFxuICAnQUxURVIgTUFURVJJQUxJWkVEIFZJRVcgU0VUIE9QVElPTlMnLFxuICAnRFJPUCBTQ0hFTUEnLFxuICAnRFJPUCBUQUJMRScsXG4gICdEUk9QIFNOQVBTSE9UIFRBQkxFJyxcbiAgJ0RST1AgRVhURVJOQUwgVEFCTEUnLFxuICAnRFJPUCBWSUVXJyxcbiAgJ0RST1AgTUFURVJJQUxJWkVEIFZJRVcnLFxuICAnRFJPUCBGVU5DVElPTicsXG4gICdEUk9QIFRBQkxFIEZVTkNUSU9OJyxcbiAgJ0RST1AgUFJPQ0VEVVJFJyxcbiAgJ0RST1AgUk9XIEFDQ0VTUyBQT0xJQ1knLFxuICAvLyBEQ0wsIGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9iaWdxdWVyeS9kb2NzL3JlZmVyZW5jZS9zdGFuZGFyZC1zcWwvZGF0YS1jb250cm9sLWxhbmd1YWdlXG4gICdHUkFOVCcsXG4gICdSRVZPS0UnLFxuICAnQ1JFQVRFIENBUEFDSVRZJyxcbiAgJ0NSRUFURSBSRVNFUlZBVElPTicsXG4gICdDUkVBVEUgQVNTSUdOTUVOVCcsXG4gICdEUk9QIENBUEFDSVRZJyxcbiAgJ0RST1AgUkVTRVJWQVRJT04nLFxuICAnRFJPUCBBU1NJR05NRU5UJyxcbiAgLy8gU2NyaXB0LCBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vYmlncXVlcnkvZG9jcy9yZWZlcmVuY2Uvc3RhbmRhcmQtc3FsL3NjcmlwdGluZ1xuICAnREVDTEFSRScsXG4gICdTRVQnLFxuICAnRVhFQ1VURSBJTU1FRElBVEUnLFxuICAnTE9PUCcsXG4gICdFTkQgTE9PUCcsXG4gICdSRVBFQVQnLFxuICAnRU5EIFJFUEVBVCcsXG4gICdXSElMRScsXG4gICdFTkQgV0hJTEUnLFxuICAnQlJFQUsnLFxuICAnTEVBVkUnLFxuICAnQ09OVElOVUUnLFxuICAnSVRFUkFURScsXG4gICdGT1InLFxuICAnRU5EIEZPUicsXG4gICdCRUdJTicsXG4gICdCRUdJTiBUUkFOU0FDVElPTicsXG4gICdDT01NSVQgVFJBTlNBQ1RJT04nLFxuICAnUk9MTEJBQ0sgVFJBTlNBQ1RJT04nLFxuICAnUkFJU0UnLFxuICAnUkVUVVJOJyxcbiAgJ0NBTEwnLFxuICAvLyBEZWJ1ZywgaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2JpZ3F1ZXJ5L2RvY3MvcmVmZXJlbmNlL3N0YW5kYXJkLXNxbC9kZWJ1Z2dpbmctc3RhdGVtZW50c1xuICAnQVNTRVJUJyxcbiAgLy8gT3RoZXIsIGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9iaWdxdWVyeS9kb2NzL3JlZmVyZW5jZS9zdGFuZGFyZC1zcWwvb3RoZXItc3RhdGVtZW50c1xuICAnRVhQT1JUIERBVEEnLFxuXTtcblxuLyoqXG4gKiBQcmlvcml0eSAyXG4gKiBjb21tYW5kcyB0aGF0IG9wZXJhdGUgb24gdHdvIHRhYmxlcyBvciBzdWJxdWVyaWVzXG4gKiB0d28gbWFpbiBjYXRlZ29yaWVzOiBqb2lucyBhbmQgYm9vbGVhbiBzZXQgb3BlcmF0b3JzXG4gKi9cbmNvbnN0IHJlc2VydmVkQmluYXJ5Q29tbWFuZHMgPSBbXG4gIC8vIHNldCBib29sZWFuc1xuICAnSU5URVJTRUNUJyxcbiAgJ0lOVEVSU0VDVCBBTEwnLFxuICAnSU5URVJTRUNUIERJU1RJTkNUJyxcbiAgJ1VOSU9OJyxcbiAgJ1VOSU9OIEFMTCcsXG4gICdVTklPTiBESVNUSU5DVCcsXG4gICdFWENFUFQnLFxuICAnRVhDRVBUIEFMTCcsXG4gICdFWENFUFQgRElTVElOQ1QnLFxuICAvLyBqb2luc1xuICAnSk9JTicsXG4gICdJTk5FUiBKT0lOJyxcbiAgJ0xFRlQgSk9JTicsXG4gICdMRUZUIE9VVEVSIEpPSU4nLFxuICAnUklHSFQgSk9JTicsXG4gICdSSUdIVCBPVVRFUiBKT0lOJyxcbiAgJ0ZVTEwgSk9JTicsXG4gICdGVUxMIE9VVEVSIEpPSU4nLFxuICAnQ1JPU1MgSk9JTicsXG5dO1xuXG4vKipcbiAqIFByaW9yaXR5IDNcbiAqIGtleXdvcmRzIHRoYXQgZm9sbG93IGEgcHJldmlvdXMgU3RhdGVtZW50LCBtdXN0IGJlIGF0dGFjaGVkIHRvIHN1YnNlcXVlbnQgZGF0YVxuICogY2FuIGJlIGZ1bGx5IGlubGluZSBvciBvbiBuZXdsaW5lIHdpdGggb3B0aW9uYWwgaW5kZW50XG4gKi9cbmNvbnN0IHJlc2VydmVkRGVwZW5kZW50Q2xhdXNlcyA9IFsnV0hFTicsICdFTFNFJ107XG5cbi8vIGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9iaWdxdWVyeS9kb2NzL3JlZmVyZW5jZS8jc3RhbmRhcmQtc3FsLXJlZmVyZW5jZVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmlnUXVlcnlGb3JtYXR0ZXIgZXh0ZW5kcyBGb3JtYXR0ZXIge1xuICBzdGF0aWMgcmVzZXJ2ZWRDb21tYW5kcyA9IHJlc2VydmVkQ29tbWFuZHM7XG4gIHN0YXRpYyByZXNlcnZlZEJpbmFyeUNvbW1hbmRzID0gcmVzZXJ2ZWRCaW5hcnlDb21tYW5kcztcbiAgc3RhdGljIHJlc2VydmVkRGVwZW5kZW50Q2xhdXNlcyA9IHJlc2VydmVkRGVwZW5kZW50Q2xhdXNlcztcbiAgc3RhdGljIHJlc2VydmVkSm9pbkNvbmRpdGlvbnMgPSBbJ09OJywgJ1VTSU5HJ107XG4gIHN0YXRpYyByZXNlcnZlZExvZ2ljYWxPcGVyYXRvcnMgPSBbJ0FORCcsICdPUiddO1xuICBzdGF0aWMgZnVsbFJlc2VydmVkV29yZHMgPSBkZWR1cGUoW1xuICAgIC4uLk9iamVjdC52YWx1ZXMocmVzZXJ2ZWRGdW5jdGlvbnMpLnJlZHVjZSgoYWNjLCBhcnIpID0+IFsuLi5hY2MsIC4uLmFycl0sIFtdKSxcbiAgICAuLi5PYmplY3QudmFsdWVzKHJlc2VydmVkS2V5d29yZHMpLnJlZHVjZSgoYWNjLCBhcnIpID0+IFsuLi5hY2MsIC4uLmFycl0sIFtdKSxcbiAgXSk7XG5cbiAgc3RhdGljIHN0cmluZ1R5cGVzOiBTdHJpbmdQYXR0ZXJuVHlwZVtdID0gWydcIlwiJywgXCInJ1wiLCAnYGAnXTsgLy8gYWRkOiAnJycnJycsIFwiXCJcIlwiXCJcIiA7IHByZWZpeGVzOiByLCBiXG4gIHN0YXRpYyBibG9ja1N0YXJ0ID0gWycoJywgJ0NBU0UnXTtcbiAgc3RhdGljIGJsb2NrRW5kID0gWycpJywgJ0VORCddO1xuICBzdGF0aWMgaW5kZXhlZFBsYWNlaG9sZGVyVHlwZXMgPSBbJz8nXTtcbiAgc3RhdGljIG5hbWVkUGxhY2Vob2xkZXJUeXBlcyA9IFtdO1xuICBzdGF0aWMgbGluZUNvbW1lbnRUeXBlcyA9IFsnLS0nLCAnIyddO1xuICBzdGF0aWMgc3BlY2lhbFdvcmRDaGFycyA9IHsgYW55OiAnX0AkLScgfTtcbiAgc3RhdGljIG9wZXJhdG9ycyA9IFsnPj4nLCAnPDwnLCAnfHwnXTtcbiAgLy8gVE9ETzogaGFuZGxlIHRyYWlsaW5nIGNvbW1hIGluIHNlbGVjdCBjbGF1c2VcblxuICB0b2tlbml6ZXIoKSB7XG4gICAgcmV0dXJuIG5ldyBUb2tlbml6ZXIoe1xuICAgICAgcmVzZXJ2ZWRDb21tYW5kczogQmlnUXVlcnlGb3JtYXR0ZXIucmVzZXJ2ZWRDb21tYW5kcyxcbiAgICAgIHJlc2VydmVkQmluYXJ5Q29tbWFuZHM6IEJpZ1F1ZXJ5Rm9ybWF0dGVyLnJlc2VydmVkQmluYXJ5Q29tbWFuZHMsXG4gICAgICByZXNlcnZlZERlcGVuZGVudENsYXVzZXM6IEJpZ1F1ZXJ5Rm9ybWF0dGVyLnJlc2VydmVkRGVwZW5kZW50Q2xhdXNlcyxcbiAgICAgIHJlc2VydmVkSm9pbkNvbmRpdGlvbnM6IEJpZ1F1ZXJ5Rm9ybWF0dGVyLnJlc2VydmVkSm9pbkNvbmRpdGlvbnMsXG4gICAgICByZXNlcnZlZExvZ2ljYWxPcGVyYXRvcnM6IEJpZ1F1ZXJ5Rm9ybWF0dGVyLnJlc2VydmVkTG9naWNhbE9wZXJhdG9ycyxcbiAgICAgIHJlc2VydmVkS2V5d29yZHM6IEJpZ1F1ZXJ5Rm9ybWF0dGVyLmZ1bGxSZXNlcnZlZFdvcmRzLFxuICAgICAgc3RyaW5nVHlwZXM6IEJpZ1F1ZXJ5Rm9ybWF0dGVyLnN0cmluZ1R5cGVzLFxuICAgICAgYmxvY2tTdGFydDogQmlnUXVlcnlGb3JtYXR0ZXIuYmxvY2tTdGFydCxcbiAgICAgIGJsb2NrRW5kOiBCaWdRdWVyeUZvcm1hdHRlci5ibG9ja0VuZCxcbiAgICAgIGluZGV4ZWRQbGFjZWhvbGRlclR5cGVzOiBCaWdRdWVyeUZvcm1hdHRlci5pbmRleGVkUGxhY2Vob2xkZXJUeXBlcyxcbiAgICAgIG5hbWVkUGxhY2Vob2xkZXJUeXBlczogQmlnUXVlcnlGb3JtYXR0ZXIubmFtZWRQbGFjZWhvbGRlclR5cGVzLFxuICAgICAgbGluZUNvbW1lbnRUeXBlczogQmlnUXVlcnlGb3JtYXR0ZXIubGluZUNvbW1lbnRUeXBlcyxcbiAgICAgIHNwZWNpYWxXb3JkQ2hhcnM6IEJpZ1F1ZXJ5Rm9ybWF0dGVyLnNwZWNpYWxXb3JkQ2hhcnMsXG4gICAgICBvcGVyYXRvcnM6IEJpZ1F1ZXJ5Rm9ybWF0dGVyLm9wZXJhdG9ycyxcbiAgICB9KTtcbiAgfVxuXG4gIHRva2VuT3ZlcnJpZGUodG9rZW46IFRva2VuKSB7XG4gICAgaWYgKFxuICAgICAgKC9BUlJBWS9pLnRlc3QodG9rZW4udmFsdWUpIHx8IC9TVFJVQ1QvaS50ZXN0KHRva2VuLnZhbHVlKSkgJiZcbiAgICAgIHRoaXMudG9rZW5Mb29rQWhlYWQoKS52YWx1ZSA9PT0gJzwnXG4gICAgKSB7XG4gICAgICBsZXQgbGV2ZWwgPSAwO1xuICAgICAgbGV0IGZpbmFsVG9rZW4gPSB0b2tlbi52YWx1ZTtcblxuICAgICAgZG8ge1xuICAgICAgICBjb25zdCBuZXh0VG9rZW4gPSB0aGlzLnRva2VuTG9va0FoZWFkKCk7XG4gICAgICAgIGlmIChuZXh0VG9rZW4udmFsdWUgPT09ICc+JyB8fCBuZXh0VG9rZW4udmFsdWUgPT09ICc+PicpIHtcbiAgICAgICAgICBsZXZlbCAtPSBuZXh0VG9rZW4udmFsdWUubGVuZ3RoO1xuICAgICAgICB9IGVsc2UgaWYgKG5leHRUb2tlbi52YWx1ZSA9PT0gJzwnKSB7XG4gICAgICAgICAgbGV2ZWwrKztcbiAgICAgICAgfVxuICAgICAgICBmaW5hbFRva2VuICs9IHRoaXMudG9rZW5zLnNwbGljZSh0aGlzLmluZGV4ICsgMSwgMSlbMF0udmFsdWU7XG4gICAgICB9IHdoaWxlIChsZXZlbCA+IDApO1xuXG4gICAgICByZXR1cm4geyAuLi50b2tlbiwgdmFsdWU6IGZpbmFsVG9rZW4gfTtcbiAgICB9XG5cbiAgICByZXR1cm4gdG9rZW47XG4gIH1cbn1cbiIsImltcG9ydCBGb3JtYXR0ZXIgZnJvbSAnLi4vY29yZS9Gb3JtYXR0ZXInO1xuaW1wb3J0IFRva2VuaXplciBmcm9tICcuLi9jb3JlL1Rva2VuaXplcic7XG5pbXBvcnQgdHlwZSB7IFN0cmluZ1BhdHRlcm5UeXBlIH0gZnJvbSAnLi4vY29yZS9yZWdleEZhY3RvcnknO1xuaW1wb3J0IHsgZGVkdXBlIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG4vKipcbiAqIFByaW9yaXR5IDUgKGxhc3QpXG4gKiBGdWxsIGxpc3Qgb2YgcmVzZXJ2ZWQgZnVuY3Rpb25zXG4gKiBkaXN0aW5jdCBmcm9tIEtleXdvcmRzIGR1ZSB0byBpbnRlcmFjdGlvbiB3aXRoIHBhcmVudGhlc2VzXG4gKi9cbmNvbnN0IHJlc2VydmVkRnVuY3Rpb25zID0ge1xuICAvLyBodHRwczovL3d3dy5pYm0uY29tL2RvY3MvZW4vZGIyLWZvci16b3MvMTE/dG9waWM9ZnVuY3Rpb25zLWFnZ3JlZ2F0ZVxuICBhZ2dyZWdhdGU6IFtcbiAgICAnQVJSQVlfQUdHJyxcbiAgICAnQVZHJyxcbiAgICAnQ09SUicsXG4gICAgJ0NPUlJFTEFUSU9OJyxcbiAgICAnQ09VTlQnLFxuICAgICdDT1VOVF9CSUcnLFxuICAgICdDT1ZBUl9QT1AnLFxuICAgICdDT1ZBUklBTkNFJyxcbiAgICAnQ09WQVInLFxuICAgICdDT1ZBUl9TQU1QJyxcbiAgICAnQ09WQVJJQU5DRV9TQU1QJyxcbiAgICAnQ1VNRV9ESVNUJyxcbiAgICAnR1JPVVBJTkcnLFxuICAgICdMSVNUQUdHJyxcbiAgICAnTUFYJyxcbiAgICAnTUVESUFOJyxcbiAgICAnTUlOJyxcbiAgICAnUEVSQ0VOVElMRV9DT05UJyxcbiAgICAnUEVSQ0VOVElMRV9ESVNDJyxcbiAgICAnUEVSQ0VOVF9SQU5LJyxcbiAgICAnUkVHUl9BVkdYJyxcbiAgICAnUkVHUl9BVkdZJyxcbiAgICAnUkVHUl9DT1VOVCcsXG4gICAgJ1JFR1JfSU5URVJDRVBUJyxcbiAgICAnUkVHUl9JQ1BUJyxcbiAgICAnUkVHUl9SMicsXG4gICAgJ1JFR1JfU0xPUEUnLFxuICAgICdSRUdSX1NYWCcsXG4gICAgJ1JFR1JfU1hZJyxcbiAgICAnUkVHUl9TWVknLFxuICAgICdTVERERVZfUE9QJyxcbiAgICAnU1REREVWJyxcbiAgICAnU1REREVWX1NBTVAnLFxuICAgICdTVU0nLFxuICAgICdWQVJfUE9QJyxcbiAgICAnVkFSSUFOQ0UnLFxuICAgICdWQVInLFxuICAgICdWQVJfU0FNUCcsXG4gICAgJ1ZBUklBTkNFX1NBTVAnLFxuICAgICdYTUxBR0cnLFxuICBdLFxuICAvLyBodHRwczovL3d3dy5pYm0uY29tL2RvY3MvZW4vZGIyLWZvci16b3MvMTE/dG9waWM9ZnVuY3Rpb25zLXNjYWxhclxuICBzY2FsYXI6IFtcbiAgICAnQUJTJyxcbiAgICAnQUJTVkFMJyxcbiAgICAnQUNPUycsXG4gICAgJ0FERF9EQVlTJyxcbiAgICAnQUREX01PTlRIUycsXG4gICAgJ0FSUkFZX0RFTEVURScsXG4gICAgJ0FSUkFZX0ZJUlNUJyxcbiAgICAnQVJSQVlfTEFTVCcsXG4gICAgJ0FSUkFZX05FWFQnLFxuICAgICdBUlJBWV9QUklPUicsXG4gICAgJ0FSUkFZX1RSSU0nLFxuICAgICdBU0NJSScsXG4gICAgJ0FTQ0lJX0NIUicsXG4gICAgJ0FTQ0lJX1NUUicsXG4gICAgJ0FTQ0lJU1RSJyxcbiAgICAnQVNJTicsXG4gICAgJ0FUQU4nLFxuICAgICdBVEFOSCcsXG4gICAgJ0FUQU4yJyxcbiAgICAnQklHSU5UJyxcbiAgICAnQklOQVJZJyxcbiAgICAnQklUQU5EJyxcbiAgICAnQklUQU5ETk9UJyxcbiAgICAnQklUT1InLFxuICAgICdCSVRYT1InLFxuICAgICdCSVROT1QnLFxuICAgICdCTE9CJyxcbiAgICAnQlRSSU0nLFxuICAgICdDQVJESU5BTElUWScsXG4gICAgJ0NDU0lEX0VOQ09ESU5HJyxcbiAgICAnQ0VJTElORycsXG4gICAgJ0NFSUwnLFxuICAgICdDSEFSJyxcbiAgICAnQ0hBUjknLFxuICAgICdDSEFSQUNURVJfTEVOR1RIJyxcbiAgICAnQ0hBUl9MRU5HVEgnLFxuICAgICdDSFInLFxuICAgICdDTE9CJyxcbiAgICAnQ09BTEVTQ0UnLFxuICAgICdDT0xMQVRJT05fS0VZJyxcbiAgICAnQ09NUEFSRV9ERUNGTE9BVCcsXG4gICAgJ0NPTkNBVCcsXG4gICAgJ0NPTlRBSU5TJyxcbiAgICAnQ09TJyxcbiAgICAnQ09TSCcsXG4gICAgJ0RBVEUnLFxuICAgICdEQVknLFxuICAgICdEQVlPRk1PTlRIJyxcbiAgICAnREFZT0ZXRUVLJyxcbiAgICAnREFZT0ZXRUVLX0lTTycsXG4gICAgJ0RBWU9GWUVBUicsXG4gICAgJ0RBWVMnLFxuICAgICdEQVlTX0JFVFdFRU4nLFxuICAgICdEQkNMT0InLFxuICAgICdERUNGTE9BVCcsXG4gICAgJ0RFQ0ZMT0FUX0ZPUk1BVCcsXG4gICAgJ0RFQ0ZMT0FUX1NPUlRLRVknLFxuICAgICdERUNJTUFMJyxcbiAgICAnREVDJyxcbiAgICAnREVDT0RFJyxcbiAgICAnREVDUllQVF9CSU5BUlknLFxuICAgICdERUNSWVBUX0JJVCcsXG4gICAgJ0RFQ1JZUFRfQ0hBUicsXG4gICAgJ0RFQ1JZUFRfREInLFxuICAgICdERUNSWVBUX0RBVEFLRVlfQklHSU5UJyxcbiAgICAnREVDUllQVF9EQVRBS0VZX0JJVCcsXG4gICAgJ0RFQ1JZUFRfREFUQUtFWV9DTE9CJyxcbiAgICAnREVDUllQVF9EQVRBS0VZX0RCQ0xPQicsXG4gICAgJ0RFQ1JZUFRfREFUQUtFWV9ERUNJTUFMJyxcbiAgICAnREVDUllQVF9EQVRBS0VZX0lOVEVHRVInLFxuICAgICdERUNSWVBUX0RBVEFLRVlfVkFSQ0hBUicsXG4gICAgJ0RFQ1JZUFRfREFUQUtFWV9WQVJHUkFQSElDJyxcbiAgICAnREVHUkVFUycsXG4gICAgJ0RJRkZFUkVOQ0UnLFxuICAgICdESUdJVFMnLFxuICAgICdET1VCTEVfUFJFQ0lTSU9OJyxcbiAgICAnRE9VQkxFJyxcbiAgICAnRFNOX1hNTFZBTElEQVRFJyxcbiAgICAnRUJDRElDX0NIUicsXG4gICAgJ0VCQ0RJQ19TVFInLFxuICAgICdFTkNSWVBUX0RBVEFLRVknLFxuICAgICdFTkNSWVBUX1RERVMnLFxuICAgICdFWFAnLFxuICAgICdFWFRSQUNUJyxcbiAgICAnRkxPQVQnLFxuICAgICdGTE9PUicsXG4gICAgJ0dFTkVSQVRFX1VOSVFVRScsXG4gICAgJ0dFTkVSQVRFX1VOSVFVRV9CSU5BUlknLFxuICAgICdHRVRISU5UJyxcbiAgICAnR0VUVkFSSUFCTEUnLFxuICAgICdHUkFQSElDJyxcbiAgICAnR1JFQVRFU1QnLFxuICAgICdIQVNIJyxcbiAgICAnSEFTSF9DUkMzMicsXG4gICAgJ0hBU0hfTUQ1JyxcbiAgICAnSEFTSF9TSEExJyxcbiAgICAnSEFTSF9TSEEyNTYnLFxuICAgICdIRVgnLFxuICAgICdIT1VSJyxcbiAgICAnSURFTlRJVFlfVkFMX0xPQ0FMJyxcbiAgICAnSUZOVUxMJyxcbiAgICAnSU5TRVJUJyxcbiAgICAnSU5TVFInLFxuICAgICdJTlRFR0VSJyxcbiAgICAnSU5UJyxcbiAgICAnSlVMSUFOX0RBWScsXG4gICAgJ0xBU1RfREFZJyxcbiAgICAnTENBU0UnLFxuICAgICdMRUFTVCcsXG4gICAgJ0xFRlQnLFxuICAgICdMRU5HVEgnLFxuICAgICdMTicsXG4gICAgJ0xPQ0FURScsXG4gICAgJ0xPQ0FURV9JTl9TVFJJTkcnLFxuICAgICdMT0cxMCcsXG4gICAgJ0xPV0VSJyxcbiAgICAnTFBBRCcsXG4gICAgJ0xUUklNJyxcbiAgICAnTUFYJyxcbiAgICAnTUFYX0NBUkRJTkFMSVRZJyxcbiAgICAnTUlDUk9TRUNPTkQnLFxuICAgICdNSUROSUdIVF9TRUNPTkRTJyxcbiAgICAnTUlOJyxcbiAgICAnTUlOVVRFJyxcbiAgICAnTU9EJyxcbiAgICAnTU9OVEgnLFxuICAgICdNT05USFNfQkVUV0VFTicsXG4gICAgJ01RUkVBRCcsXG4gICAgJ01RUkVBRENMT0InLFxuICAgICdNUVJFQ0VJVkUnLFxuICAgICdNUVJFQ0VJVkVDTE9CJyxcbiAgICAnTVFTRU5EJyxcbiAgICAnTVVMVElQTFlfQUxUJyxcbiAgICAnTkVYVF9EQVknLFxuICAgICdORVhUX01PTlRIJyxcbiAgICAnTk9STUFMSVpFX0RFQ0ZMT0FUJyxcbiAgICAnTk9STUFMSVpFX1NUUklORycsXG4gICAgJ05VTExJRicsXG4gICAgJ05WTCcsXG4gICAgJ09WRVJMQVknLFxuICAgICdQQUNLJyxcbiAgICAnUE9TSVRJT04nLFxuICAgICdQT1NTVFInLFxuICAgICdQT1dFUicsXG4gICAgJ1BPVycsXG4gICAgJ1FVQU5USVpFJyxcbiAgICAnUVVBUlRFUicsXG4gICAgJ1JBRElBTlMnLFxuICAgICdSQUlTRV9FUlJPUicsXG4gICAgJ1JBTkRPTScsXG4gICAgJ1JBTkQnLFxuICAgICdSRUFMJyxcbiAgICAnUkVHRVhQX0NPVU5UJyxcbiAgICAnUkVHRVhQX0lOU1RSJyxcbiAgICAnUkVHRVhQX0xJS0UnLFxuICAgICdSRUdFWFBfUkVQTEFDRScsXG4gICAgJ1JFR0VYUF9TVUJTVFInLFxuICAgICdSRVBFQVQnLFxuICAgICdSRVBMQUNFJyxcbiAgICAnUklEJyxcbiAgICAnUklHSFQnLFxuICAgICdST1VORCcsXG4gICAgJ1JPVU5EX1RJTUVTVEFNUCcsXG4gICAgJ1JPV0lEJyxcbiAgICAnUlBBRCcsXG4gICAgJ1JUUklNJyxcbiAgICAnU0NPUkUnLFxuICAgICdTRUNPTkQnLFxuICAgICdTSUdOJyxcbiAgICAnU0lOJyxcbiAgICAnU0lOSCcsXG4gICAgJ1NNQUxMSU5UJyxcbiAgICAnU09VTkRFWCcsXG4gICAgJ1NPQVBIVFRQQycsXG4gICAgJ1NPQVBIVFRQVicsXG4gICAgJ1NPQVBIVFRQTkMnLFxuICAgICdTT0FQSFRUUE5WJyxcbiAgICAnU1BBQ0UnLFxuICAgICdTUVJUJyxcbiAgICAnU1RSSVAnLFxuICAgICdTVFJMRUZUJyxcbiAgICAnU1RSUE9TJyxcbiAgICAnU1RSUklHSFQnLFxuICAgICdTVUJTVFInLFxuICAgICdTVUJTVFJJTkcnLFxuICAgICdUQU4nLFxuICAgICdUQU5IJyxcbiAgICAnVElNRScsXG4gICAgJ1RJTUVTVEFNUCcsXG4gICAgJ1RJTUVTVEFNUEFERCcsXG4gICAgJ1RJTUVTVEFNUERJRkYnLFxuICAgICdUSU1FU1RBTVBfRk9STUFUJyxcbiAgICAnVElNRVNUQU1QX0lTTycsXG4gICAgJ1RJTUVTVEFNUF9UWicsXG4gICAgJ1RPX0NIQVInLFxuICAgICdUT19DTE9CJyxcbiAgICAnVE9fREFURScsXG4gICAgJ1RPX05VTUJFUicsXG4gICAgJ1RPVEFMT1JERVInLFxuICAgICdUT19USU1FU1RBTVAnLFxuICAgICdUUkFOU0xBVEUnLFxuICAgICdUUklNJyxcbiAgICAnVFJJTV9BUlJBWScsXG4gICAgJ1RSVU5DQVRFJyxcbiAgICAnVFJVTkMnLFxuICAgICdUUlVOQ19USU1FU1RBTVAnLFxuICAgICdVQ0FTRScsXG4gICAgJ1VOSUNPREUnLFxuICAgICdVTklDT0RFX1NUUicsXG4gICAgJ1VOSVNUUicsXG4gICAgJ1VQUEVSJyxcbiAgICAnVkFMVUUnLFxuICAgICdWQVJCSU5BUlknLFxuICAgICdWQVJDSEFSJyxcbiAgICAnVkFSQ0hBUjknLFxuICAgICdWQVJDSEFSX0JJVF9GT1JNQVQnLFxuICAgICdWQVJDSEFSX0ZPUk1BVCcsXG4gICAgJ1ZBUkdSQVBISUMnLFxuICAgICdWRVJJRllfR1JPVVBfRk9SX1VTRVInLFxuICAgICdWRVJJRllfUk9MRV9GT1JfVVNFUicsXG4gICAgJ1ZFUklGWV9UUlVTVEVEX0NPTlRFWFRfUk9MRV9GT1JfVVNFUicsXG4gICAgJ1dFRUsnLFxuICAgICdXRUVLX0lTTycsXG4gICAgJ1dSQVAnLFxuICAgICdYTUxBVFRSSUJVVEVTJyxcbiAgICAnWE1MQ09NTUVOVCcsXG4gICAgJ1hNTENPTkNBVCcsXG4gICAgJ1hNTERPQ1VNRU5UJyxcbiAgICAnWE1MRUxFTUVOVCcsXG4gICAgJ1hNTEZPUkVTVCcsXG4gICAgJ1hNTE1PRElGWScsXG4gICAgJ1hNTE5BTUVTUEFDRVMnLFxuICAgICdYTUxQQVJTRScsXG4gICAgJ1hNTFBJJyxcbiAgICAnWE1MUVVFUlknLFxuICAgICdYTUxTRVJJQUxJWkUnLFxuICAgICdYTUxURVhUJyxcbiAgICAnWE1MWFNST0JKRUNUSUQnLFxuICAgICdYU0xUUkFOU0ZPUk0nLFxuICAgICdZRUFSJyxcbiAgXSxcbiAgLy8gaHR0cHM6Ly93d3cuaWJtLmNvbS9kb2NzL2VuL2RiMi1mb3Item9zLzExP3RvcGljPWZ1bmN0aW9ucy10YWJsZVxuICB0YWJsZTogW1xuICAgICdBRE1JTl9UQVNLX0xJU1QnLFxuICAgICdBRE1JTl9UQVNLX09VVFBVVCcsXG4gICAgJ0FETUlOX1RBU0tfU1RBVFVTJyxcbiAgICAnQkxPQ0tJTkdfVEhSRUFEUycsXG4gICAgJ01RUkVBREFMTCcsXG4gICAgJ01RUkVBREFMTENMT0InLFxuICAgICdNUVJFQ0VJVkVBTEwnLFxuICAgICdNUVJFQ0VJVkVBTExDTE9CJyxcbiAgICAnWE1MVEFCTEUnLFxuICBdLFxuICAvLyBodHRwczovL3d3dy5pYm0uY29tL2RvY3MvZW4vZGIyLWZvci16b3MvMTE/dG9waWM9ZnVuY3Rpb25zLXJvd1xuICByb3c6IFsnVU5QQUNLJ10sXG4gIC8vIGh0dHBzOi8vd3d3LmlibS5jb20vZG9jcy9lbi9kYjItZm9yLXpvcy8xMj90b3BpYz1leHByZXNzaW9ucy1vbGFwLXNwZWNpZmljYXRpb25cbiAgb2xhcDogWydGSVJTVF9WQUxVRScsICdMQUcnLCAnTEFTVF9WQUxVRScsICdMRUFEJywgJ05USF9WQUxVRScsICdOVElMRScsICdSQVRJT19UT19SRVBPUlQnXSxcbn07XG5cbi8qKlxuICogUHJpb3JpdHkgNSAobGFzdClcbiAqIEZ1bGwgbGlzdCBvZiByZXNlcnZlZCB3b3Jkc1xuICogYW55IHdvcmRzIHRoYXQgYXJlIGluIGEgaGlnaGVyIHByaW9yaXR5IGFyZSByZW1vdmVkXG4gKi9cbmNvbnN0IHJlc2VydmVkS2V5d29yZHMgPSB7XG4gIC8vIGh0dHBzOi8vd3d3LmlibS5jb20vZG9jcy9lbi9kYjItZm9yLXpvcy8xMT90b3BpYz13b3Jkcy1yZXNlcnZlZCNkYjJ6X3Jlc2VydmVkd29yZHNfX25ld3Jlc3dvcmRcbiAgc3RhbmRhcmQ6IFtcbiAgICAnQUxMJyxcbiAgICAnQUxMT0NBVEUnLFxuICAgICdBTExPVycsXG4gICAgJ0FMVEVSQU5EJyxcbiAgICAnQU5ZJyxcbiAgICAnQVMnLFxuICAgICdBUlJBWScsXG4gICAgJ0FSUkFZX0VYSVNUUycsXG4gICAgJ0FTRU5TSVRJVkUnLFxuICAgICdBU1NPQ0lBVEUnLFxuICAgICdBU1VUSU1FJyxcbiAgICAnQVQnLFxuICAgICdBVURJVCcsXG4gICAgJ0FVWCcsXG4gICAgJ0FVWElMSUFSWScsXG4gICAgJ0JFRk9SRScsXG4gICAgJ0JFR0lOJyxcbiAgICAnQkVUV0VFTicsXG4gICAgJ0JVRkZFUlBPT0wnLFxuICAgICdCWScsXG4gICAgJ0NBUFRVUkUnLFxuICAgICdDQVNDQURFRCcsXG4gICAgJ0NBU0UnLFxuICAgICdDQVNUJyxcbiAgICAnQ0NTSUQnLFxuICAgICdDSEFSQUNURVInLFxuICAgICdDSEVDSycsXG4gICAgJ0NMT05FJyxcbiAgICAnQ0xVU1RFUicsXG4gICAgJ0NPTExFQ1RJT04nLFxuICAgICdDT0xMSUQnLFxuICAgICdDT0xVTU4nLFxuICAgICdDT05ESVRJT04nLFxuICAgICdDT05ORUNUSU9OJyxcbiAgICAnQ09OU1RSQUlOVCcsXG4gICAgJ0NPTlRFTlQnLFxuICAgICdDT05USU5VRScsXG4gICAgJ0NSRUFURScsXG4gICAgJ0NVQkUnLFxuICAgICdDVVJSRU5UJyxcbiAgICAnQ1VSUkVOVF9EQVRFJyxcbiAgICAnQ1VSUkVOVF9MQ19DVFlQRScsXG4gICAgJ0NVUlJFTlRfUEFUSCcsXG4gICAgJ0NVUlJFTlRfU0NIRU1BJyxcbiAgICAnQ1VSUkVOVF9USU1FJyxcbiAgICAnQ1VSUkVOVF9USU1FU1RBTVAnLFxuICAgICdDVVJSVkFMJyxcbiAgICAnQ1VSU09SJyxcbiAgICAnREFUQScsXG4gICAgJ0RBVEFCQVNFJyxcbiAgICAnREJJTkZPJyxcbiAgICAnREVDTEFSRScsXG4gICAgJ0RFRkFVTFQnLFxuICAgICdERVNDUklQVE9SJyxcbiAgICAnREVURVJNSU5JU1RJQycsXG4gICAgJ0RJU0FCTEUnLFxuICAgICdESVNBTExPVycsXG4gICAgJ0RJU1RJTkNUJyxcbiAgICAnRE8nLFxuICAgICdET0NVTUVOVCcsXG4gICAgJ0RTU0laRScsXG4gICAgJ0RZTkFNSUMnLFxuICAgICdFRElUUFJPQycsXG4gICAgJ0VOQ09ESU5HJyxcbiAgICAnRU5DUllQVElPTicsXG4gICAgJ0VORElORycsXG4gICAgJ0VORC1FWEVDJyxcbiAgICAnRVJBU0UnLFxuICAgICdFU0NBUEUnLFxuICAgICdFWENFUFRJT04nLFxuICAgICdFWElTVFMnLFxuICAgICdFWElUJyxcbiAgICAnRVhURVJOQUwnLFxuICAgICdGRU5DRUQnLFxuICAgICdGSUVMRFBST0MnLFxuICAgICdGSU5BTCcsXG4gICAgJ0ZJUlNUJyxcbiAgICAnRk9SJyxcbiAgICAnRlJFRScsXG4gICAgJ0ZVTEwnLFxuICAgICdGVU5DVElPTicsXG4gICAgJ0dFTkVSQVRFRCcsXG4gICAgJ0dFVCcsXG4gICAgJ0dMT0JBTCcsXG4gICAgJ0dPVE8nLFxuICAgICdHUk9VUCcsXG4gICAgJ0hBTkRMRVInLFxuICAgICdIT0xEJyxcbiAgICAnSE9VUlMnLFxuICAgICdJRicsXG4gICAgJ0lNTUVESUFURScsXG4gICAgJ0lOJyxcbiAgICAnSU5DTFVTSVZFJyxcbiAgICAnSU5ERVgnLFxuICAgICdJTkhFUklUJyxcbiAgICAnSU5ORVInLFxuICAgICdJTk9VVCcsXG4gICAgJ0lOU0VOU0lUSVZFJyxcbiAgICAnSU5UTycsXG4gICAgJ0lTJyxcbiAgICAnSVNPQklEJyxcbiAgICAnSVRFUkFURScsXG4gICAgJ0pBUicsXG4gICAgJ0tFRVAnLFxuICAgICdLRVknLFxuICAgICdMQU5HVUFHRScsXG4gICAgJ0xBU1QnLFxuICAgICdMQ19DVFlQRScsXG4gICAgJ0xFQVZFJyxcbiAgICAnTElLRScsXG4gICAgJ0xPQ0FMJyxcbiAgICAnTE9DQUxFJyxcbiAgICAnTE9DQVRPUicsXG4gICAgJ0xPQ0FUT1JTJyxcbiAgICAnTE9DSycsXG4gICAgJ0xPQ0tNQVgnLFxuICAgICdMT0NLU0laRScsXG4gICAgJ0xPTkcnLFxuICAgICdMT09QJyxcbiAgICAnTUFJTlRBSU5FRCcsXG4gICAgJ01BVEVSSUFMSVpFRCcsXG4gICAgJ01JQ1JPU0VDT05EUycsXG4gICAgJ01JTlVURU1JTlVURVMnLFxuICAgICdNT0RJRklFUycsXG4gICAgJ01PTlRIUycsXG4gICAgJ05FWFQnLFxuICAgICdORVhUVkFMJyxcbiAgICAnTk8nLFxuICAgICdOT05FJyxcbiAgICAnTk9UJyxcbiAgICAnTlVMTCcsXG4gICAgJ05VTExTJyxcbiAgICAnTlVNUEFSVFMnLFxuICAgICdPQklEJyxcbiAgICAnT0YnLFxuICAgICdPTEQnLFxuICAgICdPTiBERUxFVEUnLFxuICAgICdPTiBVUERBVEUnLFxuICAgICdPUFRJTUlaQVRJT04nLFxuICAgICdPUFRJTUlaRScsXG4gICAgJ09SREVSJyxcbiAgICAnT1JHQU5JWkFUSU9OJyxcbiAgICAnT1VUJyxcbiAgICAnT1VURVInLFxuICAgICdQQUNLQUdFJyxcbiAgICAnUEFSQU1FVEVSJyxcbiAgICAnUEFSVCcsXG4gICAgJ1BBRERFRCcsXG4gICAgJ1BBUlRJVElPTicsXG4gICAgJ1BBUlRJVElPTkVEJyxcbiAgICAnUEFSVElUSU9OSU5HJyxcbiAgICAnUEFUSCcsXG4gICAgJ1BJRUNFU0laRScsXG4gICAgJ1BFUklPRCcsXG4gICAgJ1BMQU4nLFxuICAgICdQUkVDSVNJT04nLFxuICAgICdQUkVWVkFMJyxcbiAgICAnUFJJT1InLFxuICAgICdQUklRVFknLFxuICAgICdQUklWSUxFR0VTJyxcbiAgICAnUFJPQ0VEVVJFJyxcbiAgICAnUFJPR1JBTScsXG4gICAgJ1BTSUQnLFxuICAgICdQVUJMSUMnLFxuICAgICdRVUVSWScsXG4gICAgJ1FVRVJZTk8nLFxuICAgICdSRUFEUycsXG4gICAgJ1JFRkVSRU5DRVMnLFxuICAgICdSRVNJR05BTCcsXG4gICAgJ1JFU1RSSUNUJyxcbiAgICAnUkVTVUxUJyxcbiAgICAnUkVTVUxUX1NFVF9MT0NBVE9SJyxcbiAgICAnUkVUVVJOJyxcbiAgICAnUkVUVVJOUycsXG4gICAgJ1JPTEUnLFxuICAgICdST0xMVVAnLFxuICAgICdST1VORF9DRUlMSU5HJyxcbiAgICAnUk9VTkRfRE9XTicsXG4gICAgJ1JPVU5EX0ZMT09SJyxcbiAgICAnUk9VTkRfSEFMRl9ET1dOJyxcbiAgICAnUk9VTkRfSEFMRl9FVkVOJyxcbiAgICAnUk9VTkRfSEFMRl9VUCcsXG4gICAgJ1JPVU5EX1VQJyxcbiAgICAnUk9XJyxcbiAgICAnUk9XU0VUJyxcbiAgICAnU0NIRU1BJyxcbiAgICAnU0NSQVRDSFBBRCcsXG4gICAgJ1NFQ09ORFMnLFxuICAgICdTRUNRVFknLFxuICAgICdTRUNVUklUWScsXG4gICAgJ1NFUVVFTkNFJyxcbiAgICAnU0VOU0lUSVZFJyxcbiAgICAnU0VTU0lPTl9VU0VSJyxcbiAgICAnU0lNUExFJyxcbiAgICAnU09NRScsXG4gICAgJ1NPVVJDRScsXG4gICAgJ1NQRUNJRklDJyxcbiAgICAnU1RBTkRBUkQnLFxuICAgICdTVEFUSUMnLFxuICAgICdTVEFURU1FTlQnLFxuICAgICdTVEFZJyxcbiAgICAnU1RPR1JPVVAnLFxuICAgICdTVE9SRVMnLFxuICAgICdTVFlMRScsXG4gICAgJ1NVTU1BUlknLFxuICAgICdTWU5PTllNJyxcbiAgICAnU1lTREFURScsXG4gICAgJ1NZU1RFTScsXG4gICAgJ1NZU1RJTUVTVEFNUCcsXG4gICAgJ1RBQkxFJyxcbiAgICAnVEFCTEVTUEFDRScsXG4gICAgJ1RIRU4nLFxuICAgICdUTycsXG4gICAgJ1RSSUdHRVInLFxuICAgICdUWVBFJyxcbiAgICAnVU5ETycsXG4gICAgJ1VOSVFVRScsXG4gICAgJ1VOVElMJyxcbiAgICAnVVNFUicsXG4gICAgJ1ZBTElEUFJPQycsXG4gICAgJ1ZBUklBQkxFJyxcbiAgICAnVkFSSUFOVCcsXG4gICAgJ1ZDQVQnLFxuICAgICdWRVJTSU9OSU5HJyxcbiAgICAnVklFVycsXG4gICAgJ1ZPTEFUSUxFJyxcbiAgICAnVk9MVU1FUycsXG4gICAgJ1dISUxFJyxcbiAgICAnV0xNJyxcbiAgICAnWE1MRVhJU1RTJyxcbiAgICAnWE1MQ0FTVCcsXG4gICAgJ1lFQVJTJyxcbiAgICAnWk9ORScsXG4gIF0sXG4gIC8vIGh0dHBzOi8vd3d3LmlibS5jb20vZG9jcy9lbi9kYjItZm9yLXpvcy8xMT90b3BpYz11dGlsaXRpZXMtZGIyLW9ubGluZVxuICBvbmxpbmVVdGlsaWVzOiBbXG4gICAgJ0JBQ0tVUCBTWVNURU0nLFxuICAgICdDQVRFTkZNJyxcbiAgICAnQ0FUTUFJTlQnLFxuICAgICdDSEVDSyBEQVRBJyxcbiAgICAnQ0hFQ0sgSU5ERVgnLFxuICAgICdDSEVDSyBMT0InLFxuICAgICdDT1BZJyxcbiAgICAnQ09QWVRPQ09QWScsXG4gICAgJ0RJQUdOT1NFJyxcbiAgICAnRVhFQyBTUUwnLFxuICAgICdMSVNUREVGJyxcbiAgICAnTE9BRCcsXG4gICAgJ01FUkdFQ09QWScsXG4gICAgJ01PRElGWSBSRUNPVkVSWScsXG4gICAgJ01PRElGWSBTVEFUSVNUSUNTJyxcbiAgICAnT1BUSU9OUycsXG4gICAgJ1FVSUVTQ0UnLFxuICAgICdSRUJVSUxEIElOREVYJyxcbiAgICAnUkVDT1ZFUicsXG4gICAgJ1JFT1JHIElOREVYJyxcbiAgICAnUkVPUkcgVEFCTEVTUEFDRScsXG4gICAgJ1JFUEFJUicsXG4gICAgJ1JFUE9SVCcsXG4gICAgJ1JFU1RPUkUgU1lTVEVNJyxcbiAgICAnUlVOU1RBVFMnLFxuICAgICdTVE9TUEFDRScsXG4gICAgJ1RFTVBMQVRFJyxcbiAgICAnVU5MT0FEJyxcbiAgXSxcbiAgLy8gaHR0cHM6Ly93d3cuaWJtLmNvbS9kb2NzL2VuL2RiMi1mb3Item9zLzExP3RvcGljPWRiMi1jb21tYW5kc1xuICBjb21tYW5kczogW1xuICAgICdBQkVORCcsXG4gICAgJ0FDQ0VTUyBEQVRBQkFTRScsXG4gICAgJ0FMVEVSIEJVRkZFUlBPT0wnLFxuICAgICdBTFRFUiBHUk9VUEJVRkZFUlBPT0wnLFxuICAgICdBTFRFUiBVVElMSVRZJyxcbiAgICAnQVJDSElWRSBMT0cnLFxuICAgICdCSU5EIFBBQ0tBR0UnLFxuICAgICdCSU5EIFBMQU4nLFxuICAgICdCSU5EIFFVRVJZJyxcbiAgICAnQklORCBTRVJWSUNFJyxcbiAgICAnQklORCcsXG4gICAgJ1JFQklORCcsXG4gICAgJ0NBTkNFTCBUSFJFQUQnLFxuICAgICdEQ0xHRU4nLFxuICAgICdESVNQTEFZIEFDQ0VMJyxcbiAgICAnRElTUExBWSBBUkNISVZFJyxcbiAgICAnRElTUExBWSBCTE9DS0VSUycsXG4gICAgJ0RJU1BMQVkgQlVGRkVSUE9PTCcsXG4gICAgJ0RJU1BMQVkgREFUQUJBU0UnLFxuICAgICdESVNQTEFZIERERicsXG4gICAgJ0RJU1BMQVkgRlVOQ1RJT04gU1BFQ0lGSUMnLFxuICAgICdESVNQTEFZIEdST1VQJyxcbiAgICAnRElTUExBWSBHUk9VUEJVRkZFUlBPT0wnLFxuICAgICdESVNQTEFZIExPQ0FUSU9OJyxcbiAgICAnRElTUExBWSBMT0cnLFxuICAgICdESVNQTEFZIFBST0NFRFVSRScsXG4gICAgJ0RJU1BMQVkgUFJPRklMRScsXG4gICAgJ0RJU1BMQVkgUkxJTUlUJyxcbiAgICAnRElTUExBWSBSRVNUU1ZDJyxcbiAgICAnRElTUExBWSBUSFJFQUQnLFxuICAgICdESVNQTEFZIFRSQUNFJyxcbiAgICAnRElTUExBWSBVVElMSVRZJyxcbiAgICAnRFNOJyxcbiAgICAnRFNOSCcsXG4gICAgJ0VORCcsXG4gICAgJ0ZSRUUgUEFDS0FHRScsXG4gICAgJ0ZSRUUgUExBTicsXG4gICAgJ0ZSRUUgUVVFUlknLFxuICAgICdGUkVFIFNFUlZJQ0UnLFxuICAgICdNT0RJRlkgYWRtdHByb2MsQVBQTD1TSFVURE9XTicsXG4gICAgJ01PRElGWSBhZG10cHJvYyxBUFBMPVRSQUNFJyxcbiAgICAnTU9ESUZZIERERicsXG4gICAgJ01PRElGWSBpcmxtcHJvYyxBQkVORCcsXG4gICAgJ01PRElGWSBpcmxtcHJvYyxESUFHJyxcbiAgICAnTU9ESUZZIGlybG1wcm9jLFBVUkdFJyxcbiAgICAnTU9ESUZZIGlybG1wcm9jLFNFVCcsXG4gICAgJ01PRElGWSBpcmxtcHJvYyxTVEFUVVMnLFxuICAgICdNT0RJRlkgVFJBQ0UnLFxuICAgICdSRUJJTkQgUEFDS0FHRScsXG4gICAgJ1JFQklORCBQTEFOJyxcbiAgICAnUkVCSU5EIFRSSUdHRVIgUEFDS0FHRScsXG4gICAgJ1JFQ09WRVIgQlNEUycsXG4gICAgJ1JFQ09WRVIgSU5ET1VCVCcsXG4gICAgJ1JFQ09WRVIgUE9TVFBPTkVEJyxcbiAgICAnUkVGUkVTSCBEQjIsRUFSTFknLFxuICAgICdSRVNFVCBHRU5FUklDTFUnLFxuICAgICdSRVNFVCBJTkRPVUJUJyxcbiAgICAnUlVOJyxcbiAgICAnU0VUIEFSQ0hJVkUnLFxuICAgICdTRVQgTE9HJyxcbiAgICAnU0VUIFNZU1BBUk0nLFxuICAgICdTUFVGSScsXG4gICAgJ1NUQVJUIEFDQ0VMJyxcbiAgICAnU1RBUlQgYWRtdHByb2MnLFxuICAgICdTVEFSVCBDRERTJyxcbiAgICAnU1RBUlQgREFUQUJBU0UnLFxuICAgICdTVEFSVCBEQjInLFxuICAgICdTVEFSVCBEREYnLFxuICAgICdTVEFSVCBGVU5DVElPTiBTUEVDSUZJQycsXG4gICAgJ1NUQVJUIGlybG1wcm9jJyxcbiAgICAnU1RBUlQgUFJPQ0VEVVJFJyxcbiAgICAnU1RBUlQgUFJPRklMRScsXG4gICAgJ1NUQVJUIFJMSU1JVCcsXG4gICAgJ1NUQVJUIFJFU1RTVkMnLFxuICAgICdTVEFSVCBUUkFDRScsXG4gICAgJ1NUT1AgQUNDRUwnLFxuICAgICdTVE9QIGFkbXRwcm9jJyxcbiAgICAnU1RPUCBDRERTJyxcbiAgICAnU1RPUCBEQVRBQkFTRScsXG4gICAgJ1NUT1AgREIyJyxcbiAgICAnU1RPUCBEREYnLFxuICAgICdTVE9QIEZVTkNUSU9OIFNQRUNJRklDJyxcbiAgICAnU1RPUCBpcmxtcHJvYycsXG4gICAgJ1NUT1AgUFJPQ0VEVVJFJyxcbiAgICAnU1RPUCBQUk9GSUxFJyxcbiAgICAnU1RPUCBSTElNSVQnLFxuICAgICdTVE9QIFJFU1RTVkMnLFxuICAgICdTVE9QIFRSQUNFJyxcbiAgICAnVEVSTSBVVElMSVRZJyxcbiAgICAnVFJBQ0UgQ1QnLFxuICBdLFxufTtcblxuLyoqXG4gKiBQcmlvcml0eSAxIChmaXJzdClcbiAqIGtleXdvcmRzIHRoYXQgYmVnaW4gYSBuZXcgc3RhdGVtZW50XG4gKiB3aWxsIGJlZ2luIG5ldyBpbmRlbnRlZCBibG9ja1xuICovXG4vLyBodHRwczovL3d3dy5pYm0uY29tL2RvY3MvZW4vZGIyLWZvci16b3MvMTE/dG9waWM9c3RhdGVtZW50cy1saXN0LXN1cHBvcnRlZFxuY29uc3QgcmVzZXJ2ZWRDb21tYW5kcyA9IFtcbiAgJ0FMTE9DQVRFIENVUlNPUicsXG4gICdBTFRFUiBEQVRBQkFTRScsXG4gICdBTFRFUiBGVU5DVElPTicsXG4gICdBTFRFUiBJTkRFWCcsXG4gICdBTFRFUiBNQVNLJyxcbiAgJ0FMVEVSIFBFUk1JU1NJT04nLFxuICAnQUxURVIgUFJPQ0VEVVJFJyxcbiAgJ0FMVEVSIFNFUVVFTkNFJyxcbiAgJ0FMVEVSIFNUT0dST1VQJyxcbiAgJ0FMVEVSIFRBQkxFJyxcbiAgJ0FMVEVSIFRBQkxFU1BBQ0UnLFxuICAnQUxURVIgVFJJR0dFUicsXG4gICdBTFRFUiBUUlVTVEVEIENPTlRFWFQnLFxuICAnQUxURVIgVklFVycsXG4gICdBU1NPQ0lBVEUgTE9DQVRPUlMnLFxuICAnQkVHSU4gREVDTEFSRSBTRUNUSU9OJyxcbiAgJ0NBTEwnLFxuICAnQ0xPU0UnLFxuICAnQ09NTUVOVCcsXG4gICdDT01NSVQnLFxuICAnQ09OTkVDVCcsXG4gICdDUkVBVEUgQUxJQVMnLFxuICAnQ1JFQVRFIEFVWElMSUFSWSBUQUJMRScsXG4gICdDUkVBVEUgREFUQUJBU0UnLFxuICAnQ1JFQVRFIEZVTkNUSU9OJyxcbiAgJ0NSRUFURSBHTE9CQUwgVEVNUE9SQVJZIFRBQkxFJyxcbiAgJ0NSRUFURSBJTkRFWCcsXG4gICdDUkVBVEUgTE9CIFRBQkxFU1BBQ0UnLFxuICAnQ1JFQVRFIE1BU0snLFxuICAnQ1JFQVRFIFBFUk1JU1NJT04nLFxuICAnQ1JFQVRFIFBST0NFRFVSRScsXG4gICdDUkVBVEUgUk9MRScsXG4gICdDUkVBVEUgU0VRVUVOQ0UnLFxuICAnQ1JFQVRFIFNUT0dST1VQJyxcbiAgJ0NSRUFURSBTWU5PTllNJyxcbiAgJ0NSRUFURSBUQUJMRScsXG4gICdDUkVBVEUgVEFCTEVTUEFDRScsXG4gICdDUkVBVEUgVFJJR0dFUicsXG4gICdDUkVBVEUgVFJVU1RFRCBDT05URVhUJyxcbiAgJ0NSRUFURSBUWVBFJyxcbiAgJ0NSRUFURSBWQVJJQUJMRScsXG4gICdDUkVBVEUgVklFVycsXG4gICdERUNMQVJFIENVUlNPUicsXG4gICdERUNMQVJFIEdMT0JBTCBURU1QT1JBUlkgVEFCTEUnLFxuICAnREVDTEFSRSBTVEFURU1FTlQnLFxuICAnREVDTEFSRSBUQUJMRScsXG4gICdERUNMQVJFIFZBUklBQkxFJyxcbiAgJ0RFTEVURScsXG4gICdERVNDUklCRSBDVVJTT1InLFxuICAnREVTQ1JJQkUgSU5QVVQnLFxuICAnREVTQ1JJQkUgT1VUUFVUJyxcbiAgJ0RFU0NSSUJFIFBST0NFRFVSRScsXG4gICdERVNDUklCRSBUQUJMRScsXG4gICdEUk9QJyxcbiAgJ0VORCBERUNMQVJFIFNFQ1RJT04nLFxuICAnRVhDSEFOR0UnLFxuICAnRVhFQ1VURScsXG4gICdFWEVDVVRFIElNTUVESUFURScsXG4gICdFWFBMQUlOJyxcbiAgJ0ZFVENIJyxcbiAgJ0ZSRUUgTE9DQVRPUicsXG4gICdHRVQgRElBR05PU1RJQ1MnLFxuICAnR1JBTlQnLFxuICAnSE9MRCBMT0NBVE9SJyxcbiAgJ0lOQ0xVREUnLFxuICAnSU5TRVJUJyxcbiAgJ0xBQkVMJyxcbiAgJ0xPQ0sgVEFCTEUnLFxuICAnTUVSR0UnLFxuICAnT1BFTicsXG4gICdQUkVQQVJFJyxcbiAgJ1JFRlJFU0gnLFxuICAnUkVMRUFTRScsXG4gICdSRUxFQVNFIFNBVkVQT0lOVCcsXG4gICdSRU5BTUUnLFxuICAnUkVWT0tFJyxcbiAgJ1JPTExCQUNLJyxcbiAgJ1NBVkVQT0lOVCcsXG4gICdTRUxFQ1QnLFxuICAnU0VMRUNUIElOVE8nLFxuICAnU0VUIENPTk5FQ1RJT04nLFxuICAnU0VUJyxcbiAgJ1NFVCBDVVJSRU5UIEFDQ0VMRVJBVE9SJyxcbiAgJ1NFVCBDVVJSRU5UIEFQUExJQ0FUSU9OIENPTVBBVElCSUxJVFknLFxuICAnU0VUIENVUlJFTlQgQVBQTElDQVRJT04gRU5DT0RJTkcgU0NIRU1FJyxcbiAgJ1NFVCBDVVJSRU5UIERFQlVHIE1PREUnLFxuICAnU0VUIENVUlJFTlQgREVDRkxPQVQgUk9VTkRJTkcgTU9ERScsXG4gICdTRVQgQ1VSUkVOVCBERUdSRUUnLFxuICAnU0VUIENVUlJFTlQgRVhQTEFJTiBNT0RFJyxcbiAgJ1NFVCBDVVJSRU5UIEdFVF9BQ0NFTF9BUkNISVZFJyxcbiAgJ1NFVCBDVVJSRU5UIExPQ0FMRSBMQ19DVFlQRScsXG4gICdTRVQgQ1VSUkVOVCBNQUlOVEFJTkVEIFRBQkxFIFRZUEVTIEZPUiBPUFRJTUlaQVRJT04nLFxuICAnU0VUIENVUlJFTlQgT1BUSU1JWkFUSU9OIEhJTlQnLFxuICAnU0VUIENVUlJFTlQgUEFDS0FHRSBQQVRIJyxcbiAgJ1NFVCBDVVJSRU5UIFBBQ0tBR0VTRVQnLFxuICAnU0VUIENVUlJFTlQgUFJFQ0lTSU9OJyxcbiAgJ1NFVCBDVVJSRU5UIFFVRVJZIEFDQ0VMRVJBVElPTicsXG4gICdTRVQgQ1VSUkVOVCBRVUVSWSBBQ0NFTEVSQVRJT04gV0FJVEZPUkRBVEEnLFxuICAnU0VUIENVUlJFTlQgUkVGUkVTSCBBR0UnLFxuICAnU0VUIENVUlJFTlQgUk9VVElORSBWRVJTSU9OJyxcbiAgJ1NFVCBDVVJSRU5UIFJVTEVTJyxcbiAgJ1NFVCBDVVJSRU5UIFNRTElEJyxcbiAgJ1NFVCBDVVJSRU5UIFRFTVBPUkFMIEJVU0lORVNTX1RJTUUnLFxuICAnU0VUIENVUlJFTlQgVEVNUE9SQUwgU1lTVEVNX1RJTUUnLFxuICAnU0VUIEVOQ1JZUFRJT04gUEFTU1dPUkQnLFxuICAnU0VUIFBBVEgnLFxuICAnU0VUIFNDSEVNQScsXG4gICdTRVQgU0VTU0lPTiBUSU1FIFpPTkUnLFxuICAnU0lHTkFMJyxcbiAgJ1RSVU5DQVRFJyxcbiAgJ1VQREFURScsXG4gICdWQUxVRVMnLFxuICAnVkFMVUVTIElOVE8nLFxuICAnV0hFTkVWRVInLFxuICAvLyBvdGhlclxuICAnQUREJyxcbiAgJ0FMVEVSIENPTFVNTicsIC8vIHZlcmlmeVxuICAnQUZURVInLFxuICAnRFJPUCBUQUJMRScsIC8vIHZlcmlmeVxuICAnRkVUQ0ggRklSU1QnLFxuICAnRlJPTScsXG4gICdHUk9VUCBCWScsXG4gICdHTycsXG4gICdIQVZJTkcnLFxuICAnSU5TRVJUIElOVE8nLFxuICAnTElNSVQnLFxuICAnT0ZGU0VUJyxcbiAgJ09SREVSIEJZJyxcbiAgJ1NFTEVDVCcsXG4gICdTRVQgQ1VSUkVOVCBTQ0hFTUEnLFxuICAnV0hFUkUnLFxuICAnV0lUSCcsXG5dO1xuXG4vKipcbiAqIFByaW9yaXR5IDJcbiAqIGNvbW1hbmRzIHRoYXQgb3BlcmF0ZSBvbiB0d28gdGFibGVzIG9yIHN1YnF1ZXJpZXNcbiAqIHR3byBtYWluIGNhdGVnb3JpZXM6IGpvaW5zIGFuZCBib29sZWFuIHNldCBvcGVyYXRvcnNcbiAqL1xuY29uc3QgcmVzZXJ2ZWRCaW5hcnlDb21tYW5kcyA9IFtcbiAgLy8gc2V0IGJvb2xlYW5zXG4gICdJTlRFUlNFQ1QnLFxuICAnSU5URVJTRUNUIEFMTCcsXG4gICdJTlRFUlNFQ1QgRElTVElOQ1QnLFxuICAnVU5JT04nLFxuICAnVU5JT04gQUxMJyxcbiAgJ1VOSU9OIERJU1RJTkNUJyxcbiAgJ0VYQ0VQVCcsXG4gICdFWENFUFQgQUxMJyxcbiAgJ0VYQ0VQVCBESVNUSU5DVCcsXG4gIC8vIGpvaW5zXG4gICdKT0lOJyxcbiAgJ0lOTkVSIEpPSU4nLFxuICAnTEVGVCBKT0lOJyxcbiAgJ0xFRlQgT1VURVIgSk9JTicsXG4gICdSSUdIVCBKT0lOJyxcbiAgJ1JJR0hUIE9VVEVSIEpPSU4nLFxuICAnRlVMTCBKT0lOJyxcbiAgJ0ZVTEwgT1VURVIgSk9JTicsXG4gICdDUk9TUyBKT0lOJyxcbiAgJ05BVFVSQUwgSk9JTicsXG5dO1xuXG4vKipcbiAqIFByaW9yaXR5IDNcbiAqIGtleXdvcmRzIHRoYXQgZm9sbG93IGEgcHJldmlvdXMgU3RhdGVtZW50LCBtdXN0IGJlIGF0dGFjaGVkIHRvIHN1YnNlcXVlbnQgZGF0YVxuICogY2FuIGJlIGZ1bGx5IGlubGluZSBvciBvbiBuZXdsaW5lIHdpdGggb3B0aW9uYWwgaW5kZW50XG4gKi9cbmNvbnN0IHJlc2VydmVkRGVwZW5kZW50Q2xhdXNlcyA9IFsnV0hFTicsICdFTFNFJywgJ0VMU0VJRiddO1xuXG4vLyBodHRwczovL3d3dy5pYm0uY29tL3N1cHBvcnQva25vd2xlZGdlY2VudGVyL2VuL3Nzd19pYm1faV83Mi9kYjIvcmJhZnppbnRyby5odG1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERiMkZvcm1hdHRlciBleHRlbmRzIEZvcm1hdHRlciB7XG4gIHN0YXRpYyByZXNlcnZlZENvbW1hbmRzID0gcmVzZXJ2ZWRDb21tYW5kcztcbiAgc3RhdGljIHJlc2VydmVkQmluYXJ5Q29tbWFuZHMgPSByZXNlcnZlZEJpbmFyeUNvbW1hbmRzO1xuICBzdGF0aWMgcmVzZXJ2ZWREZXBlbmRlbnRDbGF1c2VzID0gcmVzZXJ2ZWREZXBlbmRlbnRDbGF1c2VzO1xuICBzdGF0aWMgcmVzZXJ2ZWRKb2luQ29uZGl0aW9ucyA9IFsnT04nLCAnVVNJTkcnXTtcbiAgc3RhdGljIHJlc2VydmVkTG9naWNhbE9wZXJhdG9ycyA9IFsnQU5EJywgJ09SJ107XG4gIHN0YXRpYyBmdWxsUmVzZXJ2ZWRXb3JkcyA9IGRlZHVwZShbXG4gICAgLi4uT2JqZWN0LnZhbHVlcyhyZXNlcnZlZEZ1bmN0aW9ucykucmVkdWNlKChhY2MsIGFycikgPT4gWy4uLmFjYywgLi4uYXJyXSwgW10pLFxuICAgIC4uLk9iamVjdC52YWx1ZXMocmVzZXJ2ZWRLZXl3b3JkcykucmVkdWNlKChhY2MsIGFycikgPT4gWy4uLmFjYywgLi4uYXJyXSwgW10pLFxuICBdKTtcblxuICBzdGF0aWMgc3RyaW5nVHlwZXM6IFN0cmluZ1BhdHRlcm5UeXBlW10gPSBbYFwiXCJgLCBcIicnXCIsICdgYCcsICdbXScsIFwieCcnXCJdO1xuICBzdGF0aWMgYmxvY2tTdGFydCA9IFsnKCddO1xuICBzdGF0aWMgYmxvY2tFbmQgPSBbJyknXTtcbiAgc3RhdGljIGluZGV4ZWRQbGFjZWhvbGRlclR5cGVzID0gWyc/J107XG4gIHN0YXRpYyBuYW1lZFBsYWNlaG9sZGVyVHlwZXMgPSBbJzonXTtcbiAgc3RhdGljIGxpbmVDb21tZW50VHlwZXMgPSBbJy0tJ107XG4gIHN0YXRpYyBzcGVjaWFsV29yZENoYXJzID0geyBhbnk6ICcjQCcgfTtcbiAgc3RhdGljIG9wZXJhdG9ycyA9IFsnKionLCAnIT4nLCAnITwnLCAnfHwnXTtcblxuICB0b2tlbml6ZXIoKSB7XG4gICAgcmV0dXJuIG5ldyBUb2tlbml6ZXIoe1xuICAgICAgcmVzZXJ2ZWRDb21tYW5kczogRGIyRm9ybWF0dGVyLnJlc2VydmVkQ29tbWFuZHMsXG4gICAgICByZXNlcnZlZEJpbmFyeUNvbW1hbmRzOiBEYjJGb3JtYXR0ZXIucmVzZXJ2ZWRCaW5hcnlDb21tYW5kcyxcbiAgICAgIHJlc2VydmVkRGVwZW5kZW50Q2xhdXNlczogRGIyRm9ybWF0dGVyLnJlc2VydmVkRGVwZW5kZW50Q2xhdXNlcyxcbiAgICAgIHJlc2VydmVkSm9pbkNvbmRpdGlvbnM6IERiMkZvcm1hdHRlci5yZXNlcnZlZEpvaW5Db25kaXRpb25zLFxuICAgICAgcmVzZXJ2ZWRMb2dpY2FsT3BlcmF0b3JzOiBEYjJGb3JtYXR0ZXIucmVzZXJ2ZWRMb2dpY2FsT3BlcmF0b3JzLFxuICAgICAgcmVzZXJ2ZWRLZXl3b3JkczogRGIyRm9ybWF0dGVyLmZ1bGxSZXNlcnZlZFdvcmRzLFxuICAgICAgc3RyaW5nVHlwZXM6IERiMkZvcm1hdHRlci5zdHJpbmdUeXBlcyxcbiAgICAgIGJsb2NrU3RhcnQ6IERiMkZvcm1hdHRlci5ibG9ja1N0YXJ0LFxuICAgICAgYmxvY2tFbmQ6IERiMkZvcm1hdHRlci5ibG9ja0VuZCxcbiAgICAgIGluZGV4ZWRQbGFjZWhvbGRlclR5cGVzOiBEYjJGb3JtYXR0ZXIuaW5kZXhlZFBsYWNlaG9sZGVyVHlwZXMsXG4gICAgICBuYW1lZFBsYWNlaG9sZGVyVHlwZXM6IERiMkZvcm1hdHRlci5uYW1lZFBsYWNlaG9sZGVyVHlwZXMsXG4gICAgICBsaW5lQ29tbWVudFR5cGVzOiBEYjJGb3JtYXR0ZXIubGluZUNvbW1lbnRUeXBlcyxcbiAgICAgIHNwZWNpYWxXb3JkQ2hhcnM6IERiMkZvcm1hdHRlci5zcGVjaWFsV29yZENoYXJzLFxuICAgICAgb3BlcmF0b3JzOiBEYjJGb3JtYXR0ZXIub3BlcmF0b3JzLFxuICAgIH0pO1xuICB9XG59XG4iLCJpbXBvcnQgRm9ybWF0dGVyIGZyb20gJy4uL2NvcmUvRm9ybWF0dGVyJztcbmltcG9ydCBUb2tlbml6ZXIgZnJvbSAnLi4vY29yZS9Ub2tlbml6ZXInO1xuaW1wb3J0IHR5cGUgeyBTdHJpbmdQYXR0ZXJuVHlwZSB9IGZyb20gJy4uL2NvcmUvcmVnZXhGYWN0b3J5JztcbmltcG9ydCB7IGRlZHVwZSB9IGZyb20gJy4uL3V0aWxzJztcblxuLyoqXG4gKiBQcmlvcml0eSA1IChsYXN0KVxuICogRnVsbCBsaXN0IG9mIHJlc2VydmVkIGZ1bmN0aW9uc1xuICogZGlzdGluY3QgZnJvbSBLZXl3b3JkcyBkdWUgdG8gaW50ZXJhY3Rpb24gd2l0aCBwYXJlbnRoZXNlc1xuICovXG4vLyBodHRwczovL2N3aWtpLmFwYWNoZS5vcmcvY29uZmx1ZW5jZS9kaXNwbGF5L0hpdmUvTGFuZ3VhZ2VNYW51YWwrVURGXG5jb25zdCByZXNlcnZlZEZ1bmN0aW9ucyA9IHtcbiAgbWF0aDogW1xuICAgICdBQlMnLFxuICAgICdBQ09TJyxcbiAgICAnQVNJTicsXG4gICAgJ0FUQU4nLFxuICAgICdCSU4nLFxuICAgICdCUk9VTkQnLFxuICAgICdDQlJUJyxcbiAgICAnQ0VJTCcsXG4gICAgJ0NFSUxJTkcnLFxuICAgICdDT05WJyxcbiAgICAnQ09TJyxcbiAgICAnREVHUkVFUycsXG4gICAgLy8gJ0UnLFxuICAgICdFWFAnLFxuICAgICdGQUNUT1JJQUwnLFxuICAgICdGTE9PUicsXG4gICAgJ0dSRUFURVNUJyxcbiAgICAnSEVYJyxcbiAgICAnTEVBU1QnLFxuICAgICdMTicsXG4gICAgJ0xPRycsXG4gICAgJ0xPRzEwJyxcbiAgICAnTE9HMicsXG4gICAgJ05FR0FUSVZFJyxcbiAgICAnUEknLFxuICAgICdQTU9EJyxcbiAgICAnUE9TSVRJVkUnLFxuICAgICdQT1cnLFxuICAgICdQT1dFUicsXG4gICAgJ1JBRElBTlMnLFxuICAgICdSQU5EJyxcbiAgICAnUk9VTkQnLFxuICAgICdTSElGVExFRlQnLFxuICAgICdTSElGVFJJR0hUJyxcbiAgICAnU0hJRlRSSUdIVFVOU0lHTkVEJyxcbiAgICAnU0lHTicsXG4gICAgJ1NJTicsXG4gICAgJ1NRUlQnLFxuICAgICdUQU4nLFxuICAgICdVTkhFWCcsXG4gICAgJ1dJRFRIX0JVQ0tFVCcsXG4gIF0sXG4gIGFycmF5OiBbJ0FSUkFZX0NPTlRBSU5TJywgJ01BUF9LRVlTJywgJ01BUF9WQUxVRVMnLCAnU0laRScsICdTT1JUX0FSUkFZJ10sXG4gIGNvbnZlcnNpb246IFsnQklOQVJZJywgJ0NBU1QnXSxcbiAgZGF0ZTogW1xuICAgICdBRERfTU9OVEhTJyxcbiAgICAnREFURScsXG4gICAgJ0RBVEVfQUREJyxcbiAgICAnREFURV9GT1JNQVQnLFxuICAgICdEQVRFX1NVQicsXG4gICAgJ0RBVEVESUZGJyxcbiAgICAnREFZJyxcbiAgICAnREFZTkFNRScsXG4gICAgJ0RBWU9GTU9OVEgnLFxuICAgICdEQVlPRllFQVInLFxuICAgICdFWFRSQUNUJyxcbiAgICAnRlJPTV9VTklYVElNRScsXG4gICAgJ0ZST01fVVRDX1RJTUVTVEFNUCcsXG4gICAgJ0hPVVInLFxuICAgICdMQVNUX0RBWScsXG4gICAgJ01JTlVURScsXG4gICAgJ01PTlRIJyxcbiAgICAnTU9OVEhTX0JFVFdFRU4nLFxuICAgICdORVhUX0RBWScsXG4gICAgJ1FVQVJURVInLFxuICAgICdTRUNPTkQnLFxuICAgICdUSU1FU1RBTVAnLFxuICAgICdUT19EQVRFJyxcbiAgICAnVE9fVVRDX1RJTUVTVEFNUCcsXG4gICAgJ1RSVU5DJyxcbiAgICAnVU5JWF9USU1FU1RBTVAnLFxuICAgICdXRUVLT0ZZRUFSJyxcbiAgICAnWUVBUicsXG4gIF0sXG4gIGNvbmRpdGlvbmFsOiBbJ0FTU0VSVF9UUlVFJywgJ0NPQUxFU0NFJywgJ0lGJywgJ0lTTk9UTlVMTCcsICdJU05VTEwnLCAnTlVMTElGJywgJ05WTCddLFxuICBzdHJpbmc6IFtcbiAgICAnQVNDSUknLFxuICAgICdCQVNFNjQnLFxuICAgICdDSEFSQUNURVJfTEVOR1RIJyxcbiAgICAnQ0hSJyxcbiAgICAnQ09OQ0FUJyxcbiAgICAnQ09OQ0FUX1dTJyxcbiAgICAnQ09OVEVYVF9OR1JBTVMnLFxuICAgICdERUNPREUnLFxuICAgICdFTFQnLFxuICAgICdFTkNPREUnLFxuICAgICdGSUVMRCcsXG4gICAgJ0ZJTkRfSU5fU0VUJyxcbiAgICAnRk9STUFUX05VTUJFUicsXG4gICAgJ0dFVF9KU09OX09CSkVDVCcsXG4gICAgJ0lOX0ZJTEUnLFxuICAgICdJTklUQ0FQJyxcbiAgICAnSU5TVFInLFxuICAgICdMQ0FTRScsXG4gICAgJ0xFTkdUSCcsXG4gICAgJ0xFVkVOU0hURUlOJyxcbiAgICAnTE9DQVRFJyxcbiAgICAnTE9XRVInLFxuICAgICdMUEFEJyxcbiAgICAnTFRSSU0nLFxuICAgICdOR1JBTVMnLFxuICAgICdPQ1RFVF9MRU5HVEgnLFxuICAgICdQQVJTRV9VUkwnLFxuICAgICdQUklOVEYnLFxuICAgICdRVU9URScsXG4gICAgJ1JFR0VYUF9FWFRSQUNUJyxcbiAgICAnUkVHRVhQX1JFUExBQ0UnLFxuICAgICdSRVBFQVQnLFxuICAgICdSRVZFUlNFJyxcbiAgICAnUlBBRCcsXG4gICAgJ1JUUklNJyxcbiAgICAnU0VOVEVOQ0VTJyxcbiAgICAnU09VTkRFWCcsXG4gICAgJ1NQQUNFJyxcbiAgICAnU1BMSVQnLFxuICAgICdTVFJfVE9fTUFQJyxcbiAgICAnU1VCU1RSJyxcbiAgICAnU1VCU1RSSU5HJyxcbiAgICAnVFJBTlNMQVRFJyxcbiAgICAnVFJJTScsXG4gICAgJ1VDQVNFJyxcbiAgICAnVU5CQVNFNjQnLFxuICAgICdVUFBFUicsXG4gIF0sXG4gIG1hc2tpbmc6IFtcbiAgICAnTUFTSycsXG4gICAgJ01BU0tfRklSU1RfTicsXG4gICAgJ01BU0tfSEFTSCcsXG4gICAgJ01BU0tfTEFTVF9OJyxcbiAgICAnTUFTS19TSE9XX0ZJUlNUX04nLFxuICAgICdNQVNLX1NIT1dfTEFTVF9OJyxcbiAgXSxcbiAgbWlzYzogW1xuICAgICdBRVNfREVDUllQVCcsXG4gICAgJ0FFU19FTkNSWVBUJyxcbiAgICAnQ1JDMzInLFxuICAgICdDVVJSRU5UX0RBVEFCQVNFJyxcbiAgICAnQ1VSUkVOVF9VU0VSJyxcbiAgICAnSEFTSCcsXG4gICAgJ0pBVkFfTUVUSE9EJyxcbiAgICAnTE9HR0VEX0lOX1VTRVInLFxuICAgICdNRDUnLFxuICAgICdSRUZMRUNUJyxcbiAgICAnU0hBJyxcbiAgICAnU0hBMScsXG4gICAgJ1NIQTInLFxuICAgICdTVVJST0dBVEVfS0VZJyxcbiAgICAnVkVSU0lPTicsXG4gIF0sXG4gIGFnZ3JlZ2F0ZTogW1xuICAgICdBVkcnLFxuICAgICdDT0xMRUNUX0xJU1QnLFxuICAgICdDT0xMRUNUX1NFVCcsXG4gICAgJ0NPUlInLFxuICAgICdDT1VOVCcsXG4gICAgJ0NPVkFSX1BPUCcsXG4gICAgJ0NPVkFSX1NBTVAnLFxuICAgICdISVNUT0dSQU1fTlVNRVJJQycsXG4gICAgJ01BWCcsXG4gICAgJ01JTicsXG4gICAgJ05USUxFJyxcbiAgICAnUEVSQ0VOVElMRScsXG4gICAgJ1BFUkNFTlRJTEVfQVBQUk9YJyxcbiAgICAnUkVHUl9BVkdYJyxcbiAgICAnUkVHUl9BVkdZJyxcbiAgICAnUkVHUl9DT1VOVCcsXG4gICAgJ1JFR1JfSU5URVJDRVBUJyxcbiAgICAnUkVHUl9SMicsXG4gICAgJ1JFR1JfU0xPUEUnLFxuICAgICdSRUdSX1NYWCcsXG4gICAgJ1JFR1JfU1hZJyxcbiAgICAnUkVHUl9TWVknLFxuICAgICdTVERERVZfUE9QJyxcbiAgICAnU1REREVWX1NBTVAnLFxuICAgICdTVU0nLFxuICAgICdWQVJfUE9QJyxcbiAgICAnVkFSX1NBTVAnLFxuICAgICdWQVJJQU5DRScsXG4gIF0sXG4gIHRhYmxlOiBbJ0VYUExPREUnLCAnSU5MSU5FJywgJ0pTT05fVFVQTEUnLCAnUEFSU0VfVVJMX1RVUExFJywgJ1BPU0VYUExPREUnLCAnU1RBQ0snXSxcbn07XG5cbi8qKlxuICogUHJpb3JpdHkgNSAobGFzdClcbiAqIEZ1bGwgbGlzdCBvZiByZXNlcnZlZCB3b3Jkc1xuICogYW55IHdvcmRzIHRoYXQgYXJlIGluIGEgaGlnaGVyIHByaW9yaXR5IGFyZSByZW1vdmVkXG4gKi9cbi8vIGh0dHBzOi8vY3dpa2kuYXBhY2hlLm9yZy9jb25mbHVlbmNlL2Rpc3BsYXkvaGl2ZS9sYW5ndWFnZW1hbnVhbCtkZGxcbmNvbnN0IHJlc2VydmVkS2V5d29yZHMgPSB7XG4gIC8vIE5vbi1yZXNlcnZlZCBrZXl3b3JkcyBoYXZlIHByb3NjcmliZWQgbWVhbmluZ3MgaW4uIEhpdmVRTCwgYnV0IGNhbiBzdGlsbCBiZSB1c2VkIGFzIHRhYmxlIG9yIGNvbHVtbiBuYW1lc1xuICBub25SZXNlcnZlZDogW1xuICAgICdBREQnLFxuICAgICdBRE1JTicsXG4gICAgJ0FGVEVSJyxcbiAgICAnQU5BTFlaRScsXG4gICAgJ0FSQ0hJVkUnLFxuICAgICdBU0MnLFxuICAgICdCRUZPUkUnLFxuICAgICdCVUNLRVQnLFxuICAgICdCVUNLRVRTJyxcbiAgICAnQ0FTQ0FERScsXG4gICAgJ0NIQU5HRScsXG4gICAgJ0NMVVNURVInLFxuICAgICdDTFVTVEVSRUQnLFxuICAgICdDTFVTVEVSU1RBVFVTJyxcbiAgICAnQ09MTEVDVElPTicsXG4gICAgJ0NPTFVNTlMnLFxuICAgICdDT01NRU5UJyxcbiAgICAnQ09NUEFDVCcsXG4gICAgJ0NPTVBBQ1RJT05TJyxcbiAgICAnQ09NUFVURScsXG4gICAgJ0NPTkNBVEVOQVRFJyxcbiAgICAnQ09OVElOVUUnLFxuICAgICdEQVRBJyxcbiAgICAnREFUQUJBU0VTJyxcbiAgICAnREFURVRJTUUnLFxuICAgICdEQVknLFxuICAgICdEQlBST1BFUlRJRVMnLFxuICAgICdERUZFUlJFRCcsXG4gICAgJ0RFRklORUQnLFxuICAgICdERUxJTUlURUQnLFxuICAgICdERVBFTkRFTkNZJyxcbiAgICAnREVTQycsXG4gICAgJ0RJUkVDVE9SSUVTJyxcbiAgICAnRElSRUNUT1JZJyxcbiAgICAnRElTQUJMRScsXG4gICAgJ0RJU1RSSUJVVEUnLFxuICAgICdFTEVNX1RZUEUnLFxuICAgICdFTkFCTEUnLFxuICAgICdFU0NBUEVEJyxcbiAgICAnRVhDTFVTSVZFJyxcbiAgICAnRVhQTEFJTicsXG4gICAgJ0VYUE9SVCcsXG4gICAgJ0ZJRUxEUycsXG4gICAgJ0ZJTEUnLFxuICAgICdGSUxFRk9STUFUJyxcbiAgICAnRklSU1QnLFxuICAgICdGT1JNQVQnLFxuICAgICdGT1JNQVRURUQnLFxuICAgICdGVU5DVElPTlMnLFxuICAgICdIT0xEX0RETFRJTUUnLFxuICAgICdIT1VSJyxcbiAgICAnSURYUFJPUEVSVElFUycsXG4gICAgJ0lHTk9SRScsXG4gICAgJ0lOREVYJyxcbiAgICAnSU5ERVhFUycsXG4gICAgJ0lOUEFUSCcsXG4gICAgJ0lOUFVURFJJVkVSJyxcbiAgICAnSU5QVVRGT1JNQVQnLFxuICAgICdJVEVNUycsXG4gICAgJ0pBUicsXG4gICAgJ0tFWVMnLFxuICAgICdLRVlfVFlQRScsXG4gICAgJ0xJTUlUJyxcbiAgICAnTElORVMnLFxuICAgICdMT0FEJyxcbiAgICAnTE9DQVRJT04nLFxuICAgICdMT0NLJyxcbiAgICAnTE9DS1MnLFxuICAgICdMT0dJQ0FMJyxcbiAgICAnTE9ORycsXG4gICAgJ01BUEpPSU4nLFxuICAgICdNQVRFUklBTElaRUQnLFxuICAgICdNRVRBREFUQScsXG4gICAgJ01JTlVTJyxcbiAgICAnTUlOVVRFJyxcbiAgICAnTU9OVEgnLFxuICAgICdNU0NLJyxcbiAgICAnTk9TQ0FOJyxcbiAgICAnTk9fRFJPUCcsXG4gICAgJ09GRkxJTkUnLFxuICAgICdPUFRJT04nLFxuICAgICdPVVRQVVREUklWRVInLFxuICAgICdPVVRQVVRGT1JNQVQnLFxuICAgICdPVkVSV1JJVEUnLFxuICAgICdPV05FUicsXG4gICAgJ1BBUlRJVElPTkVEJyxcbiAgICAnUEFSVElUSU9OUycsXG4gICAgJ1BMVVMnLFxuICAgICdQUkVUVFknLFxuICAgICdQUklOQ0lQQUxTJyxcbiAgICAnUFJPVEVDVElPTicsXG4gICAgJ1BVUkdFJyxcbiAgICAnUkVBRCcsXG4gICAgJ1JFQURPTkxZJyxcbiAgICAnUkVCVUlMRCcsXG4gICAgJ1JFQ09SRFJFQURFUicsXG4gICAgJ1JFQ09SRFdSSVRFUicsXG4gICAgJ1JFTE9BRCcsXG4gICAgJ1JFTkFNRScsXG4gICAgJ1JFUEFJUicsXG4gICAgJ1JFUExBQ0UnLFxuICAgICdSRVBMSUNBVElPTicsXG4gICAgJ1JFU1RSSUNUJyxcbiAgICAnUkVXUklURScsXG4gICAgJ1JPTEUnLFxuICAgICdST0xFUycsXG4gICAgJ1NDSEVNQScsXG4gICAgJ1NDSEVNQVMnLFxuICAgICdTRUNPTkQnLFxuICAgICdTRU1JJyxcbiAgICAnU0VSREUnLFxuICAgICdTRVJERVBST1BFUlRJRVMnLFxuICAgICdTRVJWRVInLFxuICAgICdTRVRTJyxcbiAgICAnU0hBUkVEJyxcbiAgICAnU0hPVycsXG4gICAgJ1NIT1dfREFUQUJBU0UnLFxuICAgICdTS0VXRUQnLFxuICAgICdTT1JUJyxcbiAgICAnU09SVEVEJyxcbiAgICAnU1NMJyxcbiAgICAnU1RBVElTVElDUycsXG4gICAgJ1NUT1JFRCcsXG4gICAgJ1NUUkVBTVRBQkxFJyxcbiAgICAnU1RSSU5HJyxcbiAgICAnU1RSVUNUJyxcbiAgICAnVEFCTEVTJyxcbiAgICAnVEJMUFJPUEVSVElFUycsXG4gICAgJ1RFTVBPUkFSWScsXG4gICAgJ1RFUk1JTkFURUQnLFxuICAgICdUSU5ZSU5UJyxcbiAgICAnVE9VQ0gnLFxuICAgICdUUkFOU0FDVElPTlMnLFxuICAgICdVTkFSQ0hJVkUnLFxuICAgICdVTkRPJyxcbiAgICAnVU5JT05UWVBFJyxcbiAgICAnVU5MT0NLJyxcbiAgICAnVU5TRVQnLFxuICAgICdVTlNJR05FRCcsXG4gICAgJ1VSSScsXG4gICAgLy8gJ1VTRScsXG4gICAgJ1VUQycsXG4gICAgJ1VUQ1RJTUVTVEFNUCcsXG4gICAgJ1ZBTFVFX1RZUEUnLFxuICAgICdWSUVXJyxcbiAgICAnV0hJTEUnLFxuICAgICdZRUFSJyxcbiAgICAnQVVUT0NPTU1JVCcsXG4gICAgJ0lTT0xBVElPTicsXG4gICAgJ0xFVkVMJyxcbiAgICAnT0ZGU0VUJyxcbiAgICAnU05BUFNIT1QnLFxuICAgICdUUkFOU0FDVElPTicsXG4gICAgJ1dPUksnLFxuICAgICdXUklURScsXG4gICAgJ0FCT1JUJyxcbiAgICAnS0VZJyxcbiAgICAnTEFTVCcsXG4gICAgJ05PUkVMWScsXG4gICAgJ05PVkFMSURBVEUnLFxuICAgICdOVUxMUycsXG4gICAgJ1JFTFknLFxuICAgICdWQUxJREFURScsXG4gICAgJ0RFVEFJTCcsXG4gICAgJ0RPVycsXG4gICAgJ0VYUFJFU1NJT04nLFxuICAgICdPUEVSQVRPUicsXG4gICAgJ1FVQVJURVInLFxuICAgICdTVU1NQVJZJyxcbiAgICAnVkVDVE9SSVpBVElPTicsXG4gICAgJ1dFRUsnLFxuICAgICdZRUFSUycsXG4gICAgJ01PTlRIUycsXG4gICAgJ1dFRUtTJyxcbiAgICAnREFZUycsXG4gICAgJ0hPVVJTJyxcbiAgICAnTUlOVVRFUycsXG4gICAgJ1NFQ09ORFMnLFxuICAgICdUSU1FU1RBTVBUWicsXG4gICAgJ1pPTkUnLFxuICBdLFxuICByZXNlcnZlZDogW1xuICAgIC8vIHJlc2VydmVkXG4gICAgJ0FMTCcsXG4gICAgLy8gJ0FMVEVSJyxcbiAgICAvLyAnQU5EJyxcbiAgICAnQVJSQVknLFxuICAgICdBUycsXG4gICAgJ0FVVEhPUklaQVRJT04nLFxuICAgICdCRVRXRUVOJyxcbiAgICAnQklHSU5UJyxcbiAgICAnQklOQVJZJyxcbiAgICAnQk9PTEVBTicsXG4gICAgJ0JPVEgnLFxuICAgICdCWScsXG4gICAgLy8gJ0NBU0UnLFxuICAgICdDQVNUJyxcbiAgICAnQ0hBUicsXG4gICAgJ0NPTFVNTicsXG4gICAgJ0NPTkYnLFxuICAgIC8vICdDUkVBVEUnLFxuICAgICdDUk9TUycsXG4gICAgJ0NVQkUnLFxuICAgICdDVVJSRU5UJyxcbiAgICAnQ1VSUkVOVF9EQVRFJyxcbiAgICAnQ1VSUkVOVF9USU1FU1RBTVAnLFxuICAgICdDVVJTT1InLFxuICAgICdEQVRBQkFTRScsXG4gICAgJ0RBVEUnLFxuICAgICdERUNJTUFMJyxcbiAgICAnREVMRVRFJyxcbiAgICAvLyAnREVTQ1JJQkUnLFxuICAgICdESVNUSU5DVCcsXG4gICAgJ0RPVUJMRScsXG4gICAgLy8gJ0RST1AnLFxuICAgIC8vICdFTFNFJyxcbiAgICAvLyAnRU5EJyxcbiAgICAnRVhDSEFOR0UnLFxuICAgICdFWElTVFMnLFxuICAgICdFWFRFTkRFRCcsXG4gICAgJ0VYVEVSTkFMJyxcbiAgICAnRkFMU0UnLFxuICAgIC8vICdGRVRDSCcsXG4gICAgJ0ZMT0FUJyxcbiAgICAnRk9MTE9XSU5HJyxcbiAgICAnRk9SJyxcbiAgICAvLyAnRlJPTScsXG4gICAgJ0ZVTEwnLFxuICAgICdGVU5DVElPTicsXG4gICAgJ0dSQU5UJyxcbiAgICAvLyAnR1JPVVAnLFxuICAgICdHUk9VUElORycsXG4gICAgLy8gJ0hBVklORycsXG4gICAgJ0lGJyxcbiAgICAnSU1QT1JUJyxcbiAgICAnSU4nLFxuICAgICdJTk5FUicsXG4gICAgLy8gJ0lOU0VSVCcsXG4gICAgJ0lOVCcsXG4gICAgLy8gJ0lOVEVSU0VDVCcsXG4gICAgJ0lOVEVSVkFMJyxcbiAgICAnSU5UTycsXG4gICAgJ0lTJyxcbiAgICAvLyAnSk9JTicsXG4gICAgJ0xBVEVSQUwnLFxuICAgICdMRUZUJyxcbiAgICAnTEVTUycsXG4gICAgJ0xJS0UnLFxuICAgICdMT0NBTCcsXG4gICAgJ01BQ1JPJyxcbiAgICAnTUFQJyxcbiAgICAnTU9SRScsXG4gICAgJ05PTkUnLFxuICAgICdOT1QnLFxuICAgICdOVUxMJyxcbiAgICAnT0YnLFxuICAgIC8vICdPTicsXG4gICAgLy8gJ09SJyxcbiAgICAnT1JERVInLFxuICAgICdPVVQnLFxuICAgICdPVVRFUicsXG4gICAgJ09WRVInLFxuICAgICdQQVJUSUFMU0NBTicsXG4gICAgJ1BBUlRJVElPTicsXG4gICAgJ1BFUkNFTlQnLFxuICAgICdQUkVDRURJTkcnLFxuICAgICdQUkVTRVJWRScsXG4gICAgJ1BST0NFRFVSRScsXG4gICAgJ1JBTkdFJyxcbiAgICAnUkVBRFMnLFxuICAgICdSRURVQ0UnLFxuICAgICdSRVZPS0UnLFxuICAgICdSSUdIVCcsXG4gICAgJ1JPTExVUCcsXG4gICAgJ1JPVycsXG4gICAgJ1JPV1MnLFxuICAgIC8vICdTRUxFQ1QnLFxuICAgICdTRVQnLFxuICAgICdTTUFMTElOVCcsXG4gICAgJ1RBQkxFJyxcbiAgICAnVEFCTEVTQU1QTEUnLFxuICAgICdUSEVOJyxcbiAgICAnVElNRVNUQU1QJyxcbiAgICAnVE8nLFxuICAgICdUUkFOU0ZPUk0nLFxuICAgICdUUklHR0VSJyxcbiAgICAnVFJVRScsXG4gICAgLy8gJ1RSVU5DQVRFJyxcbiAgICAnVU5CT1VOREVEJyxcbiAgICAvLyAnVU5JT04nLFxuICAgICdVTklRVUVKT0lOJyxcbiAgICAvLyAnVVBEQVRFJyxcbiAgICAnVVNFUicsXG4gICAgJ1VUQ19UTUVTVEFNUCcsXG4gICAgLy8gJ1ZBTFVFUycsXG4gICAgJ1ZBUkNIQVInLFxuICAgIC8vICdXSEVOJyxcbiAgICAvLyAnV0hFUkUnLFxuICAgICdXSU5ET1cnLFxuICAgIC8vICdXSVRIJyxcbiAgICAnQ09NTUlUJyxcbiAgICAnT05MWScsXG4gICAgJ1JFR0VYUCcsXG4gICAgJ1JMSUtFJyxcbiAgICAnUk9MTEJBQ0snLFxuICAgICdTVEFSVCcsXG4gICAgJ0NBQ0hFJyxcbiAgICAnQ09OU1RSQUlOVCcsXG4gICAgJ0ZPUkVJR04nLFxuICAgICdQUklNQVJZJyxcbiAgICAnUkVGRVJFTkNFUycsXG4gICAgJ0RBWU9GV0VFSycsXG4gICAgJ0VYVFJBQ1QnLFxuICAgICdGTE9PUicsXG4gICAgJ0lOVEVHRVInLFxuICAgICdQUkVDSVNJT04nLFxuICAgICdWSUVXUycsXG4gICAgJ1RJTUUnLFxuICAgICdOVU1FUklDJyxcbiAgICAnU1lOQycsXG4gIF0sXG4gIGZpbGVUeXBlczogW1xuICAgICdURVhURklMRScsXG4gICAgJ1NFUVVFTkNFRklMRScsXG4gICAgJ09SQycsXG4gICAgJ0NTVicsXG4gICAgJ1RTVicsXG4gICAgJ1BBUlFVRVQnLFxuICAgICdBVlJPJyxcbiAgICAnUkNGSUxFJyxcbiAgICAnSlNPTkZJTEUnLFxuICAgICdJTlBVVEZPUk1BVCcsXG4gICAgJ09VVFBVVEZPUk1BVCcsXG4gIF0sXG59O1xuXG4vKipcbiAqIFByaW9yaXR5IDEgKGZpcnN0KVxuICoga2V5d29yZHMgdGhhdCBiZWdpbiBhIG5ldyBzdGF0ZW1lbnRcbiAqIHdpbGwgYmVnaW4gbmV3IGluZGVudGVkIGJsb2NrXG4gKi9cbmNvbnN0IHJlc2VydmVkQ29tbWFuZHMgPSBbXG4gIC8vIGNvbW1hbmRzXG4gICdBTFRFUicsXG4gICdBTFRFUiBDT0xVTU4nLCAvLyBhZGRlZFxuICAnQUxURVIgVEFCTEUnLCAvLyBhZGRlZFxuICAnQ1JFQVRFJyxcbiAgJ0NSRUFURSBUQUJMRScsIC8vIGFkZGVkXG4gICdVU0UnLFxuICAnREVTQ1JJQkUnLFxuICAnRFJPUCcsXG4gICdEUk9QIFRBQkxFJywgLy8gYWRkZWRcbiAgJ0ZFVENIJyxcbiAgJ0ZST00nLFxuICAnR1JPVVAgQlknLFxuICAnSEFWSU5HJyxcbiAgJ0lOU0VSVCcsXG4gICdJTlNFUlQgSU5UTycsIC8vIGFkZGVkXG4gICdMSU1JVCcsXG4gICdPRkZTRVQnLFxuICAnT1JERVIgQlknLFxuICAnU0VMRUNUJyxcbiAgJ1NFVCcsXG4gICdTRVQgU0NIRU1BJywgLy8gYWRkZWRcbiAgJ1NIT1cnLFxuICAnU09SVCBCWScsXG4gICdUUlVOQ0FURScsXG4gICdVUERBVEUnLFxuICAnVkFMVUVTJyxcbiAgJ1dIRVJFJyxcbiAgJ1dJVEgnLFxuXG4gIC8vIG5ld2xpbmUga2V5d29yZHNcbiAgJ1NUT1JFRCBBUycsXG4gICdTVE9SRUQgQlknLFxuICAnUk9XIEZPUk1BVCcsXG5dO1xuXG4vKipcbiAqIFByaW9yaXR5IDJcbiAqIGNvbW1hbmRzIHRoYXQgb3BlcmF0ZSBvbiB0d28gdGFibGVzIG9yIHN1YnF1ZXJpZXNcbiAqIHR3byBtYWluIGNhdGVnb3JpZXM6IGpvaW5zIGFuZCBib29sZWFuIHNldCBvcGVyYXRvcnNcbiAqL1xuY29uc3QgcmVzZXJ2ZWRCaW5hcnlDb21tYW5kcyA9IFtcbiAgLy8gc2V0IGJvb2xlYW5zXG4gICdJTlRFUlNFQ1QnLFxuICAnSU5URVJTRUNUIEFMTCcsXG4gICdJTlRFUlNFQ1QgRElTVElOQ1QnLFxuICAnVU5JT04nLFxuICAnVU5JT04gQUxMJyxcbiAgJ1VOSU9OIERJU1RJTkNUJyxcbiAgLy8gam9pbnNcbiAgJ0pPSU4nLFxuICAnSU5ORVIgSk9JTicsXG4gICdMRUZUIEpPSU4nLFxuICAnTEVGVCBPVVRFUiBKT0lOJyxcbiAgJ1JJR0hUIEpPSU4nLFxuICAnUklHSFQgT1VURVIgSk9JTicsXG4gICdGVUxMIEpPSU4nLFxuICAnRlVMTCBPVVRFUiBKT0lOJyxcbiAgJ0NST1NTIEpPSU4nLFxuXTtcblxuLyoqXG4gKiBQcmlvcml0eSAzXG4gKiBrZXl3b3JkcyB0aGF0IGZvbGxvdyBhIHByZXZpb3VzICdTdGF0ZW1lbnQnLCBtdXN0IGJlIGF0dGFjaGVkIHRvIHN1YnNlcXVlbnQgZGF0YVxuICogY2FuIGJlIGZ1bGx5IGlubGluZSBvciBvbiBuZXdsaW5lIHdpdGggb3B0aW9uYWwgaW5kZW50XG4gKi9cbmNvbnN0IHJlc2VydmVkRGVwZW5kZW50Q2xhdXNlcyA9IFsnV0hFTicsICdFTFNFJ107XG5cbi8vIGh0dHBzOi8vY3dpa2kuYXBhY2hlLm9yZy9jb25mbHVlbmNlL2Rpc3BsYXkvSGl2ZS9MYW5ndWFnZU1hbnVhbFxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSGl2ZUZvcm1hdHRlciBleHRlbmRzIEZvcm1hdHRlciB7XG4gIHN0YXRpYyByZXNlcnZlZENvbW1hbmRzID0gcmVzZXJ2ZWRDb21tYW5kcztcbiAgc3RhdGljIHJlc2VydmVkQmluYXJ5Q29tbWFuZHMgPSByZXNlcnZlZEJpbmFyeUNvbW1hbmRzO1xuICBzdGF0aWMgcmVzZXJ2ZWREZXBlbmRlbnRDbGF1c2VzID0gcmVzZXJ2ZWREZXBlbmRlbnRDbGF1c2VzO1xuICBzdGF0aWMgcmVzZXJ2ZWRKb2luQ29uZGl0aW9ucyA9IFsnT04nLCAnVVNJTkcnXTtcbiAgc3RhdGljIHJlc2VydmVkTG9naWNhbE9wZXJhdG9ycyA9IFsnQU5EJywgJ09SJ107XG4gIHN0YXRpYyBmdWxsUmVzZXJ2ZWRXb3JkcyA9IGRlZHVwZShbXG4gICAgLi4uT2JqZWN0LnZhbHVlcyhyZXNlcnZlZEZ1bmN0aW9ucykucmVkdWNlKChhY2MsIGFycikgPT4gWy4uLmFjYywgLi4uYXJyXSwgW10pLFxuICAgIC4uLk9iamVjdC52YWx1ZXMocmVzZXJ2ZWRLZXl3b3JkcykucmVkdWNlKChhY2MsIGFycikgPT4gWy4uLmFjYywgLi4uYXJyXSwgW10pLFxuICBdKTtcblxuICBzdGF0aWMgc3RyaW5nVHlwZXM6IFN0cmluZ1BhdHRlcm5UeXBlW10gPSBbJ1wiXCInLCBcIicnXCIsICdgYCddO1xuICBzdGF0aWMgYmxvY2tTdGFydCA9IFsnKCcsICdDQVNFJ107XG4gIHN0YXRpYyBibG9ja0VuZCA9IFsnKScsICdFTkQnXTtcbiAgc3RhdGljIGluZGV4ZWRQbGFjZWhvbGRlclR5cGVzID0gWyc/J107XG4gIHN0YXRpYyBuYW1lZFBsYWNlaG9sZGVyVHlwZXMgPSBbXTtcbiAgc3RhdGljIGxpbmVDb21tZW50VHlwZXMgPSBbJy0tJ107XG4gIHN0YXRpYyBzcGVjaWFsV29yZENoYXJzID0ge307XG4gIHN0YXRpYyBvcGVyYXRvcnMgPSBbJzw9PicsICc9PScsICd8fCddO1xuXG4gIHRva2VuaXplcigpIHtcbiAgICByZXR1cm4gbmV3IFRva2VuaXplcih7XG4gICAgICByZXNlcnZlZENvbW1hbmRzOiBIaXZlRm9ybWF0dGVyLnJlc2VydmVkQ29tbWFuZHMsXG4gICAgICByZXNlcnZlZEJpbmFyeUNvbW1hbmRzOiBIaXZlRm9ybWF0dGVyLnJlc2VydmVkQmluYXJ5Q29tbWFuZHMsXG4gICAgICByZXNlcnZlZERlcGVuZGVudENsYXVzZXM6IEhpdmVGb3JtYXR0ZXIucmVzZXJ2ZWREZXBlbmRlbnRDbGF1c2VzLFxuICAgICAgcmVzZXJ2ZWRKb2luQ29uZGl0aW9uczogSGl2ZUZvcm1hdHRlci5yZXNlcnZlZEpvaW5Db25kaXRpb25zLFxuICAgICAgcmVzZXJ2ZWRMb2dpY2FsT3BlcmF0b3JzOiBIaXZlRm9ybWF0dGVyLnJlc2VydmVkTG9naWNhbE9wZXJhdG9ycyxcbiAgICAgIHJlc2VydmVkS2V5d29yZHM6IEhpdmVGb3JtYXR0ZXIuZnVsbFJlc2VydmVkV29yZHMsXG4gICAgICBzdHJpbmdUeXBlczogSGl2ZUZvcm1hdHRlci5zdHJpbmdUeXBlcyxcbiAgICAgIGJsb2NrU3RhcnQ6IEhpdmVGb3JtYXR0ZXIuYmxvY2tTdGFydCxcbiAgICAgIGJsb2NrRW5kOiBIaXZlRm9ybWF0dGVyLmJsb2NrRW5kLFxuICAgICAgaW5kZXhlZFBsYWNlaG9sZGVyVHlwZXM6IEhpdmVGb3JtYXR0ZXIuaW5kZXhlZFBsYWNlaG9sZGVyVHlwZXMsXG4gICAgICBuYW1lZFBsYWNlaG9sZGVyVHlwZXM6IEhpdmVGb3JtYXR0ZXIubmFtZWRQbGFjZWhvbGRlclR5cGVzLFxuICAgICAgbGluZUNvbW1lbnRUeXBlczogSGl2ZUZvcm1hdHRlci5saW5lQ29tbWVudFR5cGVzLFxuICAgICAgc3BlY2lhbFdvcmRDaGFyczogSGl2ZUZvcm1hdHRlci5zcGVjaWFsV29yZENoYXJzLFxuICAgICAgb3BlcmF0b3JzOiBIaXZlRm9ybWF0dGVyLm9wZXJhdG9ycyxcbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0IEZvcm1hdHRlciBmcm9tICcuLi9jb3JlL0Zvcm1hdHRlcic7XG5pbXBvcnQgVG9rZW5pemVyIGZyb20gJy4uL2NvcmUvVG9rZW5pemVyJztcbmltcG9ydCB7IGlzVG9rZW4sIFRva2VuLCBUb2tlblR5cGUgfSBmcm9tICcuLi9jb3JlL3Rva2VuJztcbmltcG9ydCB0eXBlIHsgU3RyaW5nUGF0dGVyblR5cGUgfSBmcm9tICcuLi9jb3JlL3JlZ2V4RmFjdG9yeSc7XG5pbXBvcnQgeyBkZWR1cGUgfSBmcm9tICcuLi91dGlscyc7XG5cbi8qKlxuICogUHJpb3JpdHkgNSAobGFzdClcbiAqIEZ1bGwgbGlzdCBvZiByZXNlcnZlZCBmdW5jdGlvbnNcbiAqIGRpc3RpbmN0IGZyb20gS2V5d29yZHMgZHVlIHRvIGludGVyYWN0aW9uIHdpdGggcGFyZW50aGVzZXNcbiAqL1xuLy8gaHR0cHM6Ly9tYXJpYWRiLmNvbS9rYi9lbi9pbmZvcm1hdGlvbi1zY2hlbWEtc3FsX2Z1bmN0aW9ucy10YWJsZS9cbmNvbnN0IHJlc2VydmVkRnVuY3Rpb25zID0gW1xuICAnQUREREFURScsXG4gICdBRERfTU9OVEhTJyxcbiAgJ0JJVF9BTkQnLFxuICAnQklUX09SJyxcbiAgJ0JJVF9YT1InLFxuICAnQ0FTVCcsXG4gICdDT1VOVCcsXG4gICdDVU1FX0RJU1QnLFxuICAnQ1VSREFURScsXG4gICdDVVJUSU1FJyxcbiAgJ0RBVEVfQUREJyxcbiAgJ0RBVEVfU1VCJyxcbiAgJ0RBVEVfRk9STUFUJyxcbiAgJ0RFQ09ERScsXG4gICdERU5TRV9SQU5LJyxcbiAgJ0VYVFJBQ1QnLFxuICAnRklSU1RfVkFMVUUnLFxuICAnR1JPVVBfQ09OQ0FUJyxcbiAgJ0pTT05fQVJSQVlBR0cnLFxuICAnSlNPTl9PQkpFQ1RBR0cnLFxuICAnTEFHJyxcbiAgJ0xFQUQnLFxuICAnTUFYJyxcbiAgJ01FRElBTicsXG4gICdNSUQnLFxuICAnTUlOJyxcbiAgJ05PVycsXG4gICdOVEhfVkFMVUUnLFxuICAnTlRJTEUnLFxuICAnUE9TSVRJT04nLFxuICAnUEVSQ0VOVF9SQU5LJyxcbiAgJ1BFUkNFTlRJTEVfQ09OVCcsXG4gICdQRVJDRU5USUxFX0RJU0MnLFxuICAnUkFOSycsXG4gICdST1dfTlVNQkVSJyxcbiAgJ1NFU1NJT05fVVNFUicsXG4gICdTVEQnLFxuICAnU1REREVWJyxcbiAgJ1NURERFVl9QT1AnLFxuICAnU1REREVWX1NBTVAnLFxuICAnU1VCREFURScsXG4gICdTVUJTVFInLFxuICAnU1VCU1RSSU5HJyxcbiAgJ1NVTScsXG4gICdTWVNURU1fVVNFUicsXG4gICdUUklNJyxcbiAgJ1RSSU1fT1JBQ0xFJyxcbiAgJ1ZBUklBTkNFJyxcbiAgJ1ZBUl9QT1AnLFxuICAnVkFSX1NBTVAnLFxuICAnQUJTJyxcbiAgJ0FDT1MnLFxuICAnQUREVElNRScsXG4gICdBRVNfREVDUllQVCcsXG4gICdBRVNfRU5DUllQVCcsXG4gICdBU0lOJyxcbiAgJ0FUQU4nLFxuICAnQVRBTjInLFxuICAnQkVOQ0hNQVJLJyxcbiAgJ0JJTicsXG4gICdCSU5MT0dfR1RJRF9QT1MnLFxuICAnQklUX0NPVU5UJyxcbiAgJ0JJVF9MRU5HVEgnLFxuICAnQ0VJTCcsXG4gICdDRUlMSU5HJyxcbiAgJ0NIQVJBQ1RFUl9MRU5HVEgnLFxuICAnQ0hBUl9MRU5HVEgnLFxuICAnQ0hSJyxcbiAgJ0NPRVJDSUJJTElUWScsXG4gICdDT0xVTU5fQ0hFQ0snLFxuICAnQ09MVU1OX0VYSVNUUycsXG4gICdDT0xVTU5fTElTVCcsXG4gICdDT0xVTU5fSlNPTicsXG4gICdDT01QUkVTUycsXG4gICdDT05DQVQnLFxuICAnQ09OQ0FUX09QRVJBVE9SX09SQUNMRScsXG4gICdDT05DQVRfV1MnLFxuICAnQ09OTkVDVElPTl9JRCcsXG4gICdDT05WJyxcbiAgJ0NPTlZFUlRfVFonLFxuICAnQ09TJyxcbiAgJ0NPVCcsXG4gICdDUkMzMicsXG4gICdEQVRFRElGRicsXG4gICdEQVlOQU1FJyxcbiAgJ0RBWU9GTU9OVEgnLFxuICAnREFZT0ZXRUVLJyxcbiAgJ0RBWU9GWUVBUicsXG4gICdERUdSRUVTJyxcbiAgJ0RFQ09ERV9ISVNUT0dSQU0nLFxuICAnREVDT0RFX09SQUNMRScsXG4gICdERVNfREVDUllQVCcsXG4gICdERVNfRU5DUllQVCcsXG4gICdFTFQnLFxuICAnRU5DT0RFJyxcbiAgJ0VOQ1JZUFQnLFxuICAnRVhQJyxcbiAgJ0VYUE9SVF9TRVQnLFxuICAnRVhUUkFDVFZBTFVFJyxcbiAgJ0ZJRUxEJyxcbiAgJ0ZJTkRfSU5fU0VUJyxcbiAgJ0ZMT09SJyxcbiAgJ0ZPUk1BVCcsXG4gICdGT1VORF9ST1dTJyxcbiAgJ0ZST01fQkFTRTY0JyxcbiAgJ0ZST01fREFZUycsXG4gICdGUk9NX1VOSVhUSU1FJyxcbiAgJ0dFVF9MT0NLJyxcbiAgJ0dSRUFURVNUJyxcbiAgJ0hFWCcsXG4gICdJRk5VTEwnLFxuICAnSU5TVFInLFxuICAnSVNOVUxMJyxcbiAgJ0lTX0ZSRUVfTE9DSycsXG4gICdJU19VU0VEX0xPQ0snLFxuICAnSlNPTl9BUlJBWScsXG4gICdKU09OX0FSUkFZX0FQUEVORCcsXG4gICdKU09OX0FSUkFZX0lOU0VSVCcsXG4gICdKU09OX0NPTVBBQ1QnLFxuICAnSlNPTl9DT05UQUlOUycsXG4gICdKU09OX0NPTlRBSU5TX1BBVEgnLFxuICAnSlNPTl9ERVBUSCcsXG4gICdKU09OX0RFVEFJTEVEJyxcbiAgJ0pTT05fRVhJU1RTJyxcbiAgJ0pTT05fRVhUUkFDVCcsXG4gICdKU09OX0lOU0VSVCcsXG4gICdKU09OX0tFWVMnLFxuICAnSlNPTl9MRU5HVEgnLFxuICAnSlNPTl9MT09TRScsXG4gICdKU09OX01FUkdFJyxcbiAgJ0pTT05fTUVSR0VfUEFUQ0gnLFxuICAnSlNPTl9NRVJHRV9QUkVTRVJWRScsXG4gICdKU09OX1FVRVJZJyxcbiAgJ0pTT05fUVVPVEUnLFxuICAnSlNPTl9PQkpFQ1QnLFxuICAnSlNPTl9SRU1PVkUnLFxuICAnSlNPTl9SRVBMQUNFJyxcbiAgJ0pTT05fU0VUJyxcbiAgJ0pTT05fU0VBUkNIJyxcbiAgJ0pTT05fVFlQRScsXG4gICdKU09OX1VOUVVPVEUnLFxuICAnSlNPTl9WQUxJRCcsXG4gICdKU09OX1ZBTFVFJyxcbiAgJ0xBU1RfREFZJyxcbiAgJ0xBU1RfSU5TRVJUX0lEJyxcbiAgJ0xDQVNFJyxcbiAgJ0xFQVNUJyxcbiAgJ0xFTkdUSCcsXG4gICdMRU5HVEhCJyxcbiAgJ0xOJyxcbiAgJ0xPQURfRklMRScsXG4gICdMT0NBVEUnLFxuICAnTE9HJyxcbiAgJ0xPRzEwJyxcbiAgJ0xPRzInLFxuICAnTE9XRVInLFxuICAnTFBBRCcsXG4gICdMUEFEX09SQUNMRScsXG4gICdMVFJJTScsXG4gICdMVFJJTV9PUkFDTEUnLFxuICAnTUFLRURBVEUnLFxuICAnTUFLRVRJTUUnLFxuICAnTUFLRV9TRVQnLFxuICAnTUFTVEVSX0dUSURfV0FJVCcsXG4gICdNQVNURVJfUE9TX1dBSVQnLFxuICAnTUQ1JyxcbiAgJ01PTlRITkFNRScsXG4gICdOQU1FX0NPTlNUJyxcbiAgJ05WTCcsXG4gICdOVkwyJyxcbiAgJ05VTExJRicsXG4gICdPQ1QnLFxuICAnT0NURVRfTEVOR1RIJyxcbiAgJ09SRCcsXG4gICdQRVJJT0RfQUREJyxcbiAgJ1BFUklPRF9ESUZGJyxcbiAgJ1BJJyxcbiAgJ1BPVycsXG4gICdQT1dFUicsXG4gICdRVU9URScsXG4gICdSRUdFWFBfSU5TVFInLFxuICAnUkVHRVhQX1JFUExBQ0UnLFxuICAnUkVHRVhQX1NVQlNUUicsXG4gICdSQURJQU5TJyxcbiAgJ1JBTkQnLFxuICAnUkVMRUFTRV9BTExfTE9DS1MnLFxuICAnUkVMRUFTRV9MT0NLJyxcbiAgJ1JFUExBQ0VfT1JBQ0xFJyxcbiAgJ1JFVkVSU0UnLFxuICAnUk9VTkQnLFxuICAnUlBBRCcsXG4gICdSUEFEX09SQUNMRScsXG4gICdSVFJJTScsXG4gICdSVFJJTV9PUkFDTEUnLFxuICAnU0VDX1RPX1RJTUUnLFxuICAnU0hBJyxcbiAgJ1NIQTEnLFxuICAnU0hBMicsXG4gICdTSUdOJyxcbiAgJ1NJTicsXG4gICdTTEVFUCcsXG4gICdTT1VOREVYJyxcbiAgJ1NQQUNFJyxcbiAgJ1NRUlQnLFxuICAnU1RSQ01QJyxcbiAgJ1NUUl9UT19EQVRFJyxcbiAgJ1NVQlNUUl9PUkFDTEUnLFxuICAnU1VCU1RSSU5HX0lOREVYJyxcbiAgJ1NVQlRJTUUnLFxuICAnU1lTX0dVSUQnLFxuICAnVEFOJyxcbiAgJ1RJTUVESUZGJyxcbiAgJ1RJTUVfRk9STUFUJyxcbiAgJ1RJTUVfVE9fU0VDJyxcbiAgJ1RPX0JBU0U2NCcsXG4gICdUT19DSEFSJyxcbiAgJ1RPX0RBWVMnLFxuICAnVE9fU0VDT05EUycsXG4gICdVQ0FTRScsXG4gICdVTkNPTVBSRVNTJyxcbiAgJ1VOQ09NUFJFU1NFRF9MRU5HVEgnLFxuICAnVU5IRVgnLFxuICAnVU5JWF9USU1FU1RBTVAnLFxuICAnVVBEQVRFWE1MJyxcbiAgJ1VQUEVSJyxcbiAgJ1VVSUQnLFxuICAnVVVJRF9TSE9SVCcsXG4gICdWRVJTSU9OJyxcbiAgJ1dFRUtEQVknLFxuICAnV0VFS09GWUVBUicsXG4gICdXU1JFUF9MQVNUX1dSSVRURU5fR1RJRCcsXG4gICdXU1JFUF9MQVNUX1NFRU5fR1RJRCcsXG4gICdXU1JFUF9TWU5DX1dBSVRfVVBUT19HVElEJyxcbiAgJ1lFQVJXRUVLJyxcbl07XG5cbi8qKlxuICogUHJpb3JpdHkgNSAobGFzdClcbiAqIEZ1bGwgbGlzdCBvZiByZXNlcnZlZCB3b3Jkc1xuICogYW55IHdvcmRzIHRoYXQgYXJlIGluIGEgaGlnaGVyIHByaW9yaXR5IGFyZSByZW1vdmVkXG4gKi9cbi8vIGh0dHBzOi8vbWFyaWFkYi5jb20va2IvZW4vaW5mb3JtYXRpb24tc2NoZW1hLWtleXdvcmRzLXRhYmxlL1xuY29uc3QgcmVzZXJ2ZWRLZXl3b3JkcyA9IFtcbiAgJ0FDQ0VTU0lCTEUnLFxuICAnQUNDT1VOVCcsXG4gICdBQ1RJT04nLFxuICAnQURNSU4nLFxuICAnQUZURVInLFxuICAnQUdBSU5TVCcsXG4gICdBR0dSRUdBVEUnLFxuICAnQUxMJyxcbiAgJ0FMR09SSVRITScsXG4gICdBTFRFUicsXG4gICdBTFdBWVMnLFxuICAnQU5ZJyxcbiAgJ0FTJyxcbiAgJ0FTQycsXG4gICdBU0NJSScsXG4gICdBU0VOU0lUSVZFJyxcbiAgJ0FUJyxcbiAgJ0FUT01JQycsXG4gICdBVVRIT1JTJyxcbiAgJ0FVVE9fSU5DUkVNRU5UJyxcbiAgJ0FVVE9FWFRFTkRfU0laRScsXG4gICdBVVRPJyxcbiAgJ0FWRycsXG4gICdBVkdfUk9XX0xFTkdUSCcsXG4gICdCQUNLVVAnLFxuICAnQkVGT1JFJyxcbiAgJ0JFVFdFRU4nLFxuICAnQklHSU5UJyxcbiAgJ0JJTkFSWScsXG4gICdCSVQnLFxuICAnQkxPQicsXG4gICdCTE9DSycsXG4gICdCT0RZJyxcbiAgJ0JPT0wnLFxuICAnQk9PTEVBTicsXG4gICdCT1RIJyxcbiAgJ0JUUkVFJyxcbiAgJ0JZJyxcbiAgJ0JZVEUnLFxuICAnQ0FDSEUnLFxuICAnQ0FTQ0FERScsXG4gICdDQVNDQURFRCcsXG4gICdDQVRBTE9HX05BTUUnLFxuICAnQ0hBSU4nLFxuICAnQ0hBTkdFJyxcbiAgJ0NIQU5HRUQnLFxuICAnQ0hBUicsXG4gICdDSEFSQUNURVInLFxuICAnQ0hBUkFDVEVSIFNFVCcsXG4gICdDSEFSU0VUJyxcbiAgJ0NIRUNLJyxcbiAgJ0NIRUNLUE9JTlQnLFxuICAnQ0hFQ0tTVU0nLFxuICAnQ0lQSEVSJyxcbiAgJ0NMQVNTX09SSUdJTicsXG4gICdDTElFTlQnLFxuICAnQ0xPQicsXG4gICdDTE9TRScsXG4gICdDT0FMRVNDRScsXG4gICdDT0RFJyxcbiAgJ0NPTExBVEUnLFxuICAnQ09MTEFUSU9OJyxcbiAgJ0NPTFVNTicsXG4gICdDT0xVTU5fTkFNRScsXG4gICdDT0xVTU5TJyxcbiAgJ0NPTFVNTl9BREQnLFxuICAnQ09MVU1OX0NSRUFURScsXG4gICdDT0xVTU5fREVMRVRFJyxcbiAgJ0NPTFVNTl9HRVQnLFxuICAnQ09NTUVOVCcsXG4gICdDT01NSVRURUQnLFxuICAnQ09NUEFDVCcsXG4gICdDT01QTEVUSU9OJyxcbiAgJ0NPTVBSRVNTRUQnLFxuICAnQ09OQ1VSUkVOVCcsXG4gICdDT05ESVRJT04nLFxuICAnQ09OTkVDVElPTicsXG4gICdDT05TSVNURU5UJyxcbiAgJ0NPTlNUUkFJTlQnLFxuICAnQ09OU1RSQUlOVF9DQVRBTE9HJyxcbiAgJ0NPTlNUUkFJTlRfTkFNRScsXG4gICdDT05TVFJBSU5UX1NDSEVNQScsXG4gICdDT05UQUlOUycsXG4gICdDT05URVhUJyxcbiAgJ0NPTlRJTlVFJyxcbiAgJ0NPTlRSSUJVVE9SUycsXG4gICdDT05WRVJUJyxcbiAgJ0NQVScsXG4gICdDUkVBVEUnLFxuICAnQ1JPU1MnLFxuICAnQ1VCRScsXG4gICdDVVJSRU5UJyxcbiAgJ0NVUlJFTlRfREFURScsXG4gICdDVVJSRU5UX1BPUycsXG4gICdDVVJSRU5UX1JPTEUnLFxuICAnQ1VSUkVOVF9USU1FJyxcbiAgJ0NVUlJFTlRfVElNRVNUQU1QJyxcbiAgJ0NVUlJFTlRfVVNFUicsXG4gICdDVVJTT1InLFxuICAnQ1VSU09SX05BTUUnLFxuICAnQ1lDTEUnLFxuICAnREFUQScsXG4gICdEQVRBQkFTRScsXG4gICdEQVRBQkFTRVMnLFxuICAnREFUQUZJTEUnLFxuICAnREFURScsXG4gICdEQVRFVElNRScsXG4gICdEQVknLFxuICAnREFZX0hPVVInLFxuICAnREFZX01JQ1JPU0VDT05EJyxcbiAgJ0RBWV9NSU5VVEUnLFxuICAnREFZX1NFQ09ORCcsXG4gICdERUFMTE9DQVRFJyxcbiAgJ0RFQycsXG4gICdERUNJTUFMJyxcbiAgJ0RFQ0xBUkUnLFxuICAnREVGQVVMVCcsXG4gICdERUZJTkVSJyxcbiAgJ0RFTEFZRUQnLFxuICAnREVMQVlfS0VZX1dSSVRFJyxcbiAgJ0RFTEVURV9ET01BSU5fSUQnLFxuICAnREVTX0tFWV9GSUxFJyxcbiAgJ0RFVEVSTUlOSVNUSUMnLFxuICAnRElBR05PU1RJQ1MnLFxuICAnRElSRUNUT1JZJyxcbiAgJ0RJU0FCTEUnLFxuICAnRElTQ0FSRCcsXG4gICdESVNLJyxcbiAgJ0RJU1RJTkNUJyxcbiAgJ0RJU1RJTkNUUk9XJyxcbiAgJ0RJVicsXG4gICdET1VCTEUnLFxuICAnRE9fRE9NQUlOX0lEUycsXG4gICdEUk9QJyxcbiAgJ0RVQUwnLFxuICAnRFVNUEZJTEUnLFxuICAnRFVQTElDQVRFJyxcbiAgJ0RZTkFNSUMnLFxuICAnRUFDSCcsXG4gICdFTVBUWScsXG4gICdFTkFCTEUnLFxuICAnRU5DTE9TRUQnLFxuICAnRU5EUycsXG4gICdFTkdJTkUnLFxuICAnRU5HSU5FUycsXG4gICdFTlVNJyxcbiAgJ0VSUk9SJyxcbiAgJ0VSUk9SUycsXG4gICdFU0NBUEUnLFxuICAnRVNDQVBFRCcsXG4gICdFVkVOVCcsXG4gICdFVkVOVFMnLFxuICAnRVZFUlknLFxuICAnRVhBTUlORUQnLFxuICAnRVhDSEFOR0UnLFxuICAnRVhDTFVERScsXG4gICdFWENFUFRJT04nLFxuICAnRVhJU1RTJyxcbiAgJ0VYSVQnLFxuICAnRVhQQU5TSU9OJyxcbiAgJ0VYUElSRScsXG4gICdFWFBPUlQnLFxuICAnRVhURU5ERUQnLFxuICAnRVhURU5UX1NJWkUnLFxuICAnRkFMU0UnLFxuICAnRkFTVCcsXG4gICdGQVVMVFMnLFxuICAnRkVERVJBVEVEJyxcbiAgJ0ZFVENIJyxcbiAgJ0ZJRUxEUycsXG4gICdGSUxFJyxcbiAgJ0ZJUlNUJyxcbiAgJ0ZJWEVEJyxcbiAgJ0ZMT0FUJyxcbiAgJ0ZMT0FUNCcsXG4gICdGTE9BVDgnLFxuICAnRk9MTE9XSU5HJyxcbiAgJ0ZPTExPV1MnLFxuICAnRk9SJyxcbiAgJ0ZPUkNFJyxcbiAgJ0ZPUkVJR04nLFxuICAnRk9VTkQnLFxuICAnRlVMTCcsXG4gICdGVUxMVEVYVCcsXG4gICdGVU5DVElPTicsXG4gICdHRU5FUkFMJyxcbiAgJ0dFTkVSQVRFRCcsXG4gICdHRVRfRk9STUFUJyxcbiAgJ0dFVCcsXG4gICdHTE9CQUwnLFxuICAnR09UTycsXG4gICdHUkFOVFMnLFxuICAnR1JPVVAnLFxuICAnSEFSRCcsXG4gICdIQVNIJyxcbiAgJ0hJR0hfUFJJT1JJVFknLFxuICAnSElTVE9SWScsXG4gICdIT1NUJyxcbiAgJ0hPU1RTJyxcbiAgJ0hPVVInLFxuICAnSE9VUl9NSUNST1NFQ09ORCcsXG4gICdIT1VSX01JTlVURScsXG4gICdIT1VSX1NFQ09ORCcsXG4gIC8vICdJRCcsXG4gICdJREVOVElGSUVEJyxcbiAgJ0lGJyxcbiAgJ0lHTk9SRScsXG4gICdJR05PUkVEJyxcbiAgJ0lHTk9SRV9ET01BSU5fSURTJyxcbiAgJ0lHTk9SRV9TRVJWRVJfSURTJyxcbiAgJ0lNTUVESUFURScsXG4gICdJTVBPUlQnLFxuICAnSU4nLFxuICAnSU5DUkVNRU5UJyxcbiAgJ0lOREVYJyxcbiAgJ0lOREVYRVMnLFxuICAnSU5GSUxFJyxcbiAgJ0lOSVRJQUxfU0laRScsXG4gICdJTk5FUicsXG4gICdJTk9VVCcsXG4gICdJTlNFTlNJVElWRScsXG4gICdJTlNFUlRfTUVUSE9EJyxcbiAgJ0lOU1RBTEwnLFxuICAnSU5UJyxcbiAgJ0lOVDEnLFxuICAnSU5UMicsXG4gICdJTlQzJyxcbiAgJ0lOVDQnLFxuICAnSU5UOCcsXG4gICdJTlRFR0VSJyxcbiAgJ0lOVEVSVkFMJyxcbiAgJ0lOVklTSUJMRScsXG4gICdJTlRPJyxcbiAgJ0lPJyxcbiAgJ0lPX1RIUkVBRCcsXG4gICdJUEMnLFxuICAnSVMnLFxuICAnSVNPTEFUSU9OJyxcbiAgJ0lTT1BFTicsXG4gICdJU1NVRVInLFxuICAnSVRFUkFURScsXG4gICdJTlZPS0VSJyxcbiAgJ0pTT04nLFxuICAnSlNPTl9UQUJMRScsXG4gICdLRVknLFxuICAnS0VZUycsXG4gICdLRVlfQkxPQ0tfU0laRScsXG4gICdMQU5HVUFHRScsXG4gICdMQVNUJyxcbiAgJ0xBU1RfVkFMVUUnLFxuICAnTEFTVFZBTCcsXG4gICdMRUFESU5HJyxcbiAgJ0xFQVZFJyxcbiAgJ0xFQVZFUycsXG4gICdMRUZUJyxcbiAgJ0xFU1MnLFxuICAnTEVWRUwnLFxuICAnTElLRScsXG4gICdMSU5FQVInLFxuICAnTElORVMnLFxuICAnTElTVCcsXG4gICdMT0FEJyxcbiAgJ0xPQ0FMJyxcbiAgJ0xPQ0FMVElNRScsXG4gICdMT0NBTFRJTUVTVEFNUCcsXG4gICdMT0NLJyxcbiAgJ0xPQ0tFRCcsXG4gICdMT0NLUycsXG4gICdMT0dGSUxFJyxcbiAgJ0xPR1MnLFxuICAnTE9ORycsXG4gICdMT05HQkxPQicsXG4gICdMT05HVEVYVCcsXG4gICdMT09QJyxcbiAgJ0xPV19QUklPUklUWScsXG4gICdNQVNURVInLFxuICAnTUFTVEVSX0NPTk5FQ1RfUkVUUlknLFxuICAnTUFTVEVSX0RFTEFZJyxcbiAgJ01BU1RFUl9HVElEX1BPUycsXG4gICdNQVNURVJfSE9TVCcsXG4gICdNQVNURVJfTE9HX0ZJTEUnLFxuICAnTUFTVEVSX0xPR19QT1MnLFxuICAnTUFTVEVSX1BBU1NXT1JEJyxcbiAgJ01BU1RFUl9QT1JUJyxcbiAgJ01BU1RFUl9TRVJWRVJfSUQnLFxuICAnTUFTVEVSX1NTTCcsXG4gICdNQVNURVJfU1NMX0NBJyxcbiAgJ01BU1RFUl9TU0xfQ0FQQVRIJyxcbiAgJ01BU1RFUl9TU0xfQ0VSVCcsXG4gICdNQVNURVJfU1NMX0NJUEhFUicsXG4gICdNQVNURVJfU1NMX0NSTCcsXG4gICdNQVNURVJfU1NMX0NSTFBBVEgnLFxuICAnTUFTVEVSX1NTTF9LRVknLFxuICAnTUFTVEVSX1NTTF9WRVJJRllfU0VSVkVSX0NFUlQnLFxuICAnTUFTVEVSX1VTRVInLFxuICAnTUFTVEVSX1VTRV9HVElEJyxcbiAgJ01BU1RFUl9IRUFSVEJFQVRfUEVSSU9EJyxcbiAgJ01BVENIJyxcbiAgJ01BWF9DT05ORUNUSU9OU19QRVJfSE9VUicsXG4gICdNQVhfUVVFUklFU19QRVJfSE9VUicsXG4gICdNQVhfUk9XUycsXG4gICdNQVhfU0laRScsXG4gICdNQVhfU1RBVEVNRU5UX1RJTUUnLFxuICAnTUFYX1VQREFURVNfUEVSX0hPVVInLFxuICAnTUFYX1VTRVJfQ09OTkVDVElPTlMnLFxuICAnTUFYVkFMVUUnLFxuICAnTUVESVVNJyxcbiAgJ01FRElVTUJMT0InLFxuICAnTUVESVVNSU5UJyxcbiAgJ01FRElVTVRFWFQnLFxuICAnTUVNT1JZJyxcbiAgJ01FUkdFJyxcbiAgJ01FU1NBR0VfVEVYVCcsXG4gICdNSUNST1NFQ09ORCcsXG4gICdNSURETEVJTlQnLFxuICAnTUlHUkFURScsXG4gICdNSU5VUycsXG4gICdNSU5VVEUnLFxuICAnTUlOVVRFX01JQ1JPU0VDT05EJyxcbiAgJ01JTlVURV9TRUNPTkQnLFxuICAnTUlOVkFMVUUnLFxuICAnTUlOX1JPV1MnLFxuICAnTU9EJyxcbiAgJ01PREUnLFxuICAnTU9ESUZJRVMnLFxuICAnTU9ESUZZJyxcbiAgJ01PTklUT1InLFxuICAnTU9OVEgnLFxuICAnTVVURVgnLFxuICAnTVlTUUwnLFxuICAnTVlTUUxfRVJSTk8nLFxuICAnTkFNRScsXG4gICdOQU1FUycsXG4gICdOQVRJT05BTCcsXG4gICdOQVRVUkFMJyxcbiAgJ05DSEFSJyxcbiAgJ05FU1RFRCcsXG4gICdORVZFUicsXG4gICdORVcnLFxuICAnTkVYVCcsXG4gICdORVhUVkFMJyxcbiAgJ05PJyxcbiAgJ05PTUFYVkFMVUUnLFxuICAnTk9NSU5WQUxVRScsXG4gICdOT0NBQ0hFJyxcbiAgJ05PQ1lDTEUnLFxuICAnTk9fV0FJVCcsXG4gICdOT1dBSVQnLFxuICAnTk9ERUdST1VQJyxcbiAgJ05PTkUnLFxuICAnTk9UJyxcbiAgJ05PVEZPVU5EJyxcbiAgJ05PX1dSSVRFX1RPX0JJTkxPRycsXG4gICdOVUxMJyxcbiAgJ05VTUJFUicsXG4gICdOVU1FUklDJyxcbiAgJ05WQVJDSEFSJyxcbiAgJ09GJyxcbiAgJ09GRlNFVCcsXG4gICdPTERfUEFTU1dPUkQnLFxuICAnT04gREVMRVRFJyxcbiAgJ09OIFVQREFURScsXG4gICdPTkUnLFxuICAnT05MSU5FJyxcbiAgJ09OTFknLFxuICAnT1BFTicsXG4gICdPUFRJTUlaRScsXG4gICdPUFRJT05TJyxcbiAgJ09QVElPTicsXG4gICdPUFRJT05BTExZJyxcbiAgJ09SREVSJyxcbiAgJ09SRElOQUxJVFknLFxuICAnT1RIRVJTJyxcbiAgJ09VVCcsXG4gICdPVVRFUicsXG4gICdPVVRGSUxFJyxcbiAgJ09WRVInLFxuICAnT1ZFUkxBUFMnLFxuICAnT1dORVInLFxuICAnUEFDS0FHRScsXG4gICdQQUNLX0tFWVMnLFxuICAnUEFHRScsXG4gICdQQUdFX0NIRUNLU1VNJyxcbiAgJ1BBUlNFUicsXG4gICdQQVJTRV9WQ09MX0VYUFInLFxuICAnUEFUSCcsXG4gICdQRVJJT0QnLFxuICAnUEFSVElBTCcsXG4gICdQQVJUSVRJT04nLFxuICAnUEFSVElUSU9OSU5HJyxcbiAgJ1BBUlRJVElPTlMnLFxuICAnUEFTU1dPUkQnLFxuICAnUEVSU0lTVEVOVCcsXG4gICdQSEFTRScsXG4gICdQTFVHSU4nLFxuICAnUExVR0lOUycsXG4gICdQT1JUJyxcbiAgJ1BPUlRJT04nLFxuICAnUFJFQ0VERVMnLFxuICAnUFJFQ0VESU5HJyxcbiAgJ1BSRUNJU0lPTicsXG4gICdQUkVTRVJWRScsXG4gICdQUkVWJyxcbiAgJ1BSRVZJT1VTJyxcbiAgJ1BSSU1BUlknLFxuICAnUFJJVklMRUdFUycsXG4gICdQUk9DRURVUkUnLFxuICAnUFJPQ0VTUycsXG4gICdQUk9DRVNTTElTVCcsXG4gICdQUk9GSUxFJyxcbiAgJ1BST0ZJTEVTJyxcbiAgJ1BST1hZJyxcbiAgJ1BVUkdFJyxcbiAgJ1FVQVJURVInLFxuICAnUVVFUlknLFxuICAnUVVJQ0snLFxuICAnUkFJU0UnLFxuICAnUkFOR0UnLFxuICAnUkFXJyxcbiAgJ1JFQUQnLFxuICAnUkVBRF9PTkxZJyxcbiAgJ1JFQURfV1JJVEUnLFxuICAnUkVBRFMnLFxuICAnUkVBTCcsXG4gICdSRUJVSUxEJyxcbiAgJ1JFQ09WRVInLFxuICAnUkVDVVJTSVZFJyxcbiAgJ1JFRE9fQlVGRkVSX1NJWkUnLFxuICAnUkVET0ZJTEUnLFxuICAnUkVEVU5EQU5UJyxcbiAgJ1JFRkVSRU5DRVMnLFxuICAnUkVHRVhQJyxcbiAgJ1JFTEFZJyxcbiAgJ1JFTEFZTE9HJyxcbiAgJ1JFTEFZX0xPR19GSUxFJyxcbiAgJ1JFTEFZX0xPR19QT1MnLFxuICAnUkVMQVlfVEhSRUFEJyxcbiAgJ1JFTEVBU0UnLFxuICAnUkVMT0FEJyxcbiAgJ1JFTU9WRScsXG4gICdSRU5BTUUnLFxuICAnUkVPUkdBTklaRScsXG4gICdSRVBBSVInLFxuICAnUkVQRUFUQUJMRScsXG4gICdSRVBMQVknLFxuICAnUkVQTElDQScsXG4gICdSRVBMSUNBUycsXG4gICdSRVBMSUNBX1BPUycsXG4gICdSRVBMSUNBVElPTicsXG4gICdSRVBFQVQnLFxuICAnUkVRVUlSRScsXG4gICdSRVNFVCcsXG4gICdSRVNUQVJUJyxcbiAgJ1JFU1RPUkUnLFxuICAnUkVTVFJJQ1QnLFxuICAnUkVTVU1FJyxcbiAgJ1JFVFVSTkVEX1NRTFNUQVRFJyxcbiAgJ1JFVFVSTicsXG4gICdSRVRVUk5TJyxcbiAgJ1JFVVNFJyxcbiAgJ1JJR0hUJyxcbiAgJ1JMSUtFJyxcbiAgJ1JPTEUnLFxuICAnUk9MTFVQJyxcbiAgJ1JPVVRJTkUnLFxuICAnUk9XJyxcbiAgJ1JPV0NPVU5UJyxcbiAgJ1JPV05VTScsXG4gICdST1dTJyxcbiAgJ1JPV1RZUEUnLFxuICAnUk9XX0NPVU5UJyxcbiAgJ1JPV19GT1JNQVQnLFxuICAnUlRSRUUnLFxuICAnU0NIRURVTEUnLFxuICAnU0NIRU1BJyxcbiAgJ1NDSEVNQV9OQU1FJyxcbiAgJ1NDSEVNQVMnLFxuICAnU0VDT05EJyxcbiAgJ1NFQ09ORF9NSUNST1NFQ09ORCcsXG4gICdTRUNVUklUWScsXG4gICdTRU5TSVRJVkUnLFxuICAnU0VQQVJBVE9SJyxcbiAgJ1NFUVVFTkNFJyxcbiAgJ1NFUklBTCcsXG4gICdTRVJJQUxJWkFCTEUnLFxuICAnU0VTU0lPTicsXG4gICdTRVJWRVInLFxuICAnU0VUVkFMJyxcbiAgJ1NIQVJFJyxcbiAgJ1NJR05FRCcsXG4gICdTSU1QTEUnLFxuICAnU0tJUCcsXG4gICdTTEFWRScsXG4gICdTTEFWRVMnLFxuICAnU0xBVkVfUE9TJyxcbiAgJ1NMT1cnLFxuICAnU05BUFNIT1QnLFxuICAnU01BTExJTlQnLFxuICAnU09DS0VUJyxcbiAgJ1NPRlQnLFxuICAnU09NRScsXG4gICdTT05BTUUnLFxuICAnU09VTkRTJyxcbiAgJ1NPVVJDRScsXG4gICdTVEFHRScsXG4gICdTVE9SRUQnLFxuICAnU1BBVElBTCcsXG4gICdTUEVDSUZJQycsXG4gICdSRUZfU1lTVEVNX0lEJyxcbiAgJ1NRTCcsXG4gICdTUUxFWENFUFRJT04nLFxuICAnU1FMU1RBVEUnLFxuICAnU1FMV0FSTklORycsXG4gICdTUUxfQklHX1JFU1VMVCcsXG4gICdTUUxfQlVGRkVSX1JFU1VMVCcsXG4gICdTUUxfQ0FDSEUnLFxuICAnU1FMX0NBTENfRk9VTkRfUk9XUycsXG4gICdTUUxfTk9fQ0FDSEUnLFxuICAnU1FMX1NNQUxMX1JFU1VMVCcsXG4gICdTUUxfVEhSRUFEJyxcbiAgJ1NRTF9UU0lfU0VDT05EJyxcbiAgJ1NRTF9UU0lfTUlOVVRFJyxcbiAgJ1NRTF9UU0lfSE9VUicsXG4gICdTUUxfVFNJX0RBWScsXG4gICdTUUxfVFNJX1dFRUsnLFxuICAnU1FMX1RTSV9NT05USCcsXG4gICdTUUxfVFNJX1FVQVJURVInLFxuICAnU1FMX1RTSV9ZRUFSJyxcbiAgJ1NTTCcsXG4gICdTVEFSVCcsXG4gICdTVEFSVElORycsXG4gICdTVEFSVFMnLFxuICAnU1RBVEVNRU5UJyxcbiAgJ1NUQVRTX0FVVE9fUkVDQUxDJyxcbiAgJ1NUQVRTX1BFUlNJU1RFTlQnLFxuICAnU1RBVFNfU0FNUExFX1BBR0VTJyxcbiAgJ1NUQVRVUycsXG4gICdTVE9QJyxcbiAgJ1NUT1JBR0UnLFxuICAnU1RSSU5HJyxcbiAgJ1NVQkNMQVNTX09SSUdJTicsXG4gICdTVUJKRUNUJyxcbiAgJ1NVQlBBUlRJVElPTicsXG4gICdTVUJQQVJUSVRJT05TJyxcbiAgJ1NVUEVSJyxcbiAgJ1NVU1BFTkQnLFxuICAnU1dBUFMnLFxuICAnU1dJVENIRVMnLFxuICAnU1lTREFURScsXG4gICdTWVNURU0nLFxuICAnU1lTVEVNX1RJTUUnLFxuICAnVEFCTEUnLFxuICAnVEFCTEVfTkFNRScsXG4gICdUQUJMRVMnLFxuICAnVEFCTEVTUEFDRScsXG4gICdUQUJMRV9DSEVDS1NVTScsXG4gICdURU1QT1JBUlknLFxuICAnVEVNUFRBQkxFJyxcbiAgJ1RFUk1JTkFURUQnLFxuICAnVEVYVCcsXG4gICdUSEFOJyxcbiAgJ1RIRU4nLFxuICAnVElFUycsXG4gICdUSU1FJyxcbiAgJ1RJTUVTVEFNUCcsXG4gICdUSU1FU1RBTVBBREQnLFxuICAnVElNRVNUQU1QRElGRicsXG4gICdUSU5ZQkxPQicsXG4gICdUSU5ZSU5UJyxcbiAgJ1RJTllURVhUJyxcbiAgJ1RPJyxcbiAgJ1RSQUlMSU5HJyxcbiAgJ1RSQU5TQUNUSU9OJyxcbiAgJ1RSQU5TQUNUSU9OQUwnLFxuICAnVEhSRUFEUycsXG4gICdUUklHR0VSJyxcbiAgJ1RSSUdHRVJTJyxcbiAgJ1RSVUUnLFxuICAnVFlQRScsXG4gICdUWVBFUycsXG4gICdVTkJPVU5ERUQnLFxuICAnVU5DT01NSVRURUQnLFxuICAnVU5ERUZJTkVEJyxcbiAgJ1VORE9fQlVGRkVSX1NJWkUnLFxuICAnVU5ET0ZJTEUnLFxuICAnVU5ETycsXG4gICdVTklDT0RFJyxcbiAgJ1VOSVFVRScsXG4gICdVTktOT1dOJyxcbiAgJ1VOTE9DSycsXG4gICdVTklOU1RBTEwnLFxuICAnVU5TSUdORUQnLFxuICAnVU5USUwnLFxuICAnVVBHUkFERScsXG4gICdVU0FHRScsXG4gICdVU0VSJyxcbiAgJ1VTRVJfUkVTT1VSQ0VTJyxcbiAgJ1VTRV9GUk0nLFxuICAnVVRDX0RBVEUnLFxuICAnVVRDX1RJTUUnLFxuICAnVVRDX1RJTUVTVEFNUCcsXG4gICdWQUxVRScsXG4gICdWQVJCSU5BUlknLFxuICAnVkFSQ0hBUicsXG4gICdWQVJDSEFSQUNURVInLFxuICAnVkFSQ0hBUjInLFxuICAnVkFSSUFCTEVTJyxcbiAgJ1ZBUllJTkcnLFxuICAnVklBJyxcbiAgJ1ZJRVcnLFxuICAnVklSVFVBTCcsXG4gICdWSVNJQkxFJyxcbiAgJ1ZFUlNJT05JTkcnLFxuICAnV0FJVCcsXG4gICdXQVJOSU5HUycsXG4gICdXRUVLJyxcbiAgJ1dFSUdIVF9TVFJJTkcnLFxuICAnV0hJTEUnLFxuICAnV0lORE9XJyxcbiAgJ1dJVEhJTicsXG4gICdXSVRIT1VUJyxcbiAgJ1dPUksnLFxuICAnV1JBUFBFUicsXG4gICdXUklURScsXG4gICdYNTA5JyxcbiAgJ1hBJyxcbiAgJ1hNTCcsXG4gICdZRUFSJyxcbiAgJ1lFQVJfTU9OVEgnLFxuICAnWkVST0ZJTEwnLFxuXTtcblxuLyoqXG4gKiBQcmlvcml0eSAxIChmaXJzdClcbiAqIGtleXdvcmRzIHRoYXQgYmVnaW4gYSBuZXcgc3RhdGVtZW50XG4gKiB3aWxsIGJlZ2luIG5ldyBpbmRlbnRlZCBibG9ja1xuICovXG4vLyBodHRwczovL21hcmlhZGIuY29tL2RvY3MvcmVmZXJlbmNlL21kYi9zcWwtc3RhdGVtZW50cy9cbmNvbnN0IHJlc2VydmVkQ29tbWFuZHMgPSBbXG4gICdBTFRFUiBEQVRBQkFTRScsXG4gICdBTFRFUiBEQVRBQkFTRSBDT01NRU5UJyxcbiAgJ0FMVEVSIEVWRU5UJyxcbiAgJ0FMVEVSIEZVTkNUSU9OJyxcbiAgJ0FMVEVSIFBST0NFRFVSRScsXG4gICdBTFRFUiBTQ0hFTUEnLFxuICAnQUxURVIgU0NIRU1BIENPTU1FTlQnLFxuICAnQUxURVIgU0VRVUVOQ0UnLFxuICAnQUxURVIgU0VSVkVSJyxcbiAgJ0FMVEVSIFRBQkxFJyxcbiAgJ0FMVEVSIFVTRVInLFxuICAnQUxURVIgVklFVycsXG4gICdBTkFMWVpFJyxcbiAgJ0FOQUxZWkUgVEFCTEUnLFxuICAnQkFDS1VQIExPQ0snLFxuICAnQkFDS1VQIFNUQUdFJyxcbiAgJ0JBQ0tVUCBVTkxPQ0snLFxuICAnQkVHSU4nLFxuICAnQklOTE9HJyxcbiAgJ0NBQ0hFIElOREVYJyxcbiAgJ0NBTEwnLFxuICAnQ0hBTkdFIE1BU1RFUiBUTycsXG4gICdDSEVDSyBUQUJMRScsXG4gICdDSEVDSyBWSUVXJyxcbiAgJ0NIRUNLU1VNIFRBQkxFJyxcbiAgJ0NPTU1JVCcsXG4gICdDUkVBVEUgQUdHUkVHQVRFIEZVTkNUSU9OJyxcbiAgJ0NSRUFURSBEQVRBQkFTRScsXG4gICdDUkVBVEUgRVZFTlQnLFxuICAnQ1JFQVRFIEZVTkNUSU9OJyxcbiAgJ0NSRUFURSBJTkRFWCcsXG4gICdDUkVBVEUgUFJPQ0VEVVJFJyxcbiAgJ0NSRUFURSBST0xFJyxcbiAgJ0NSRUFURSBTRVFVRU5DRScsXG4gICdDUkVBVEUgU0VSVkVSJyxcbiAgJ0NSRUFURSBTUEFUSUFMIElOREVYJyxcbiAgJ0NSRUFURSBUQUJMRScsXG4gICdDUkVBVEUgVFJJR0dFUicsXG4gICdDUkVBVEUgVU5JUVVFIElOREVYJyxcbiAgJ0NSRUFURSBVU0VSJyxcbiAgJ0NSRUFURSBWSUVXJyxcbiAgJ0RFQUxMT0NBVEUgUFJFUEFSRScsXG4gICdERUxFVEUnLFxuICAnREVTQycsXG4gICdERVNDUklCRScsXG4gICdETycsXG4gICdEUk9QIERBVEFCQVNFJyxcbiAgJ0RST1AgRVZFTlQnLFxuICAnRFJPUCBGVU5DVElPTicsXG4gICdEUk9QIElOREVYJyxcbiAgJ0RST1AgUFJFUEFSRScsXG4gICdEUk9QIFBST0NFRFVSRScsXG4gICdEUk9QIFJPTEUnLFxuICAnRFJPUCBTRVFVRU5DRScsXG4gICdEUk9QIFNFUlZFUicsXG4gICdEUk9QIFRBQkxFJyxcbiAgJ0RST1AgVFJJR0dFUicsXG4gICdEUk9QIFVTRVInLFxuICAnRFJPUCBWSUVXJyxcbiAgJ0VYRUNVVEUnLFxuICAnRVhQTEFJTicsXG4gICdGTFVTSCcsXG4gICdHRVQgRElBR05PU1RJQ1MnLFxuICAnR0VUIERJQUdOT1NUSUNTIENPTkRJVElPTicsXG4gICdHUkFOVCcsXG4gICdIQU5ETEVSJyxcbiAgJ0hFTFAnLFxuICAnSU5TRVJUJyxcbiAgJ0lOU1RBTEwgUExVR0lOJyxcbiAgJ0lOU1RBTEwgU09OQU1FJyxcbiAgJ0tJTEwnLFxuICAnTE9BRCBEQVRBIElORklMRScsXG4gICdMT0FEIElOREVYIElOVE8gQ0FDSEUnLFxuICAnTE9BRCBYTUwgSU5GSUxFJyxcbiAgJ0xPQ0sgVEFCTEUnLFxuICAnT1BUSU1JWkUgVEFCTEUnLFxuICAnUFJFUEFSRScsXG4gICdQVVJHRSBCSU5BUlkgTE9HUycsXG4gICdQVVJHRSBNQVNURVIgTE9HUycsXG4gICdSRUxFQVNFIFNBVkVQT0lOVCcsXG4gICdSRU5BTUUgVEFCTEUnLFxuICAnUkVOQU1FIFVTRVInLFxuICAnUkVQQUlSIFRBQkxFJyxcbiAgJ1JFUEFJUiBWSUVXJyxcbiAgJ1JFUExBQ0UnLFxuICAnUkVTRVQgTUFTVEVSJyxcbiAgJ1JFU0VUIFFVRVJZIENBQ0hFJyxcbiAgJ1JFU0VUIFJFUExJQ0EnLFxuICAnUkVTRVQgU0xBVkUnLFxuICAnUkVTSUdOQUwnLFxuICAnUkVUVVJOSU5HJyxcbiAgJ1JFVk9LRScsXG4gICdST0xMQkFDSycsXG4gICdTQVZFUE9JTlQnLFxuICAnU0VMRUNUJyxcbiAgJ1NFVCcsXG4gICdTRVQgQ0hBUkFDVEVSIFNFVCcsXG4gICdTRVQgREVGQVVMVCBST0xFJyxcbiAgJ1NFVCBHTE9CQUwgVFJBTlNBQ1RJT04nLFxuICAnU0VUIE5BTUVTJyxcbiAgJ1NFVCBQQVNTV09SRCcsXG4gICdTRVQgUk9MRScsXG4gICdTRVQgU1RBVEVNRU5UJyxcbiAgJ1NFVCBUUkFOU0FDVElPTicsXG4gICdTSE9XJyxcbiAgJ1NIT1cgQUxMIFJFUExJQ0FTIFNUQVRVUycsXG4gICdTSE9XIEFMTCBTTEFWRVMgU1RBVFVTJyxcbiAgJ1NIT1cgQVVUSE9SUycsXG4gICdTSE9XIEJJTkFSWSBMT0dTJyxcbiAgJ1NIT1cgQklOTE9HIEVWRU5UUycsXG4gICdTSE9XIEJJTkxPRyBTVEFUVVMnLFxuICAnU0hPVyBDSEFSQUNURVIgU0VUJyxcbiAgJ1NIT1cgQ0xJRU5UX1NUQVRJU1RJQ1MnLFxuICAnU0hPVyBDT0xMQVRJT04nLFxuICAnU0hPVyBDT0xVTU5TJyxcbiAgJ1NIT1cgQ09OVFJJQlVUT1JTJyxcbiAgJ1NIT1cgQ1JFQVRFIERBVEFCQVNFJyxcbiAgJ1NIT1cgQ1JFQVRFIEVWRU5UJyxcbiAgJ1NIT1cgQ1JFQVRFIEZVTkNUSU9OJyxcbiAgJ1NIT1cgQ1JFQVRFIFBBQ0tBR0UnLFxuICAnU0hPVyBDUkVBVEUgUEFDS0FHRSBCT0RZJyxcbiAgJ1NIT1cgQ1JFQVRFIFBST0NFRFVSRScsXG4gICdTSE9XIENSRUFURSBTRVFVRU5DRScsXG4gICdTSE9XIENSRUFURSBUQUJMRScsXG4gICdTSE9XIENSRUFURSBUUklHR0VSJyxcbiAgJ1NIT1cgQ1JFQVRFIFVTRVInLFxuICAnU0hPVyBDUkVBVEUgVklFVycsXG4gICdTSE9XIERBVEFCQVNFUycsXG4gICdTSE9XIEVOR0lORScsXG4gICdTSE9XIEVOR0lORSBJTk5PREIgU1RBVFVTJyxcbiAgJ1NIT1cgRU5HSU5FUycsXG4gICdTSE9XIEVSUk9SUycsXG4gICdTSE9XIEVWRU5UUycsXG4gICdTSE9XIEVYUExBSU4nLFxuICAnU0hPVyBGVU5DVElPTiBDT0RFJyxcbiAgJ1NIT1cgRlVOQ1RJT04gU1RBVFVTJyxcbiAgJ1NIT1cgR1JBTlRTJyxcbiAgJ1NIT1cgSU5ERVgnLFxuICAnU0hPVyBJTkRFWEVTJyxcbiAgJ1NIT1cgSU5ERVhfU1RBVElTVElDUycsXG4gICdTSE9XIEtFWVMnLFxuICAnU0hPVyBMT0NBTEVTJyxcbiAgJ1NIT1cgTUFTVEVSIExPR1MnLFxuICAnU0hPVyBNQVNURVIgU1RBVFVTJyxcbiAgJ1NIT1cgT1BFTiBUQUJMRVMnLFxuICAnU0hPVyBQQUNLQUdFIEJPRFkgQ09ERScsXG4gICdTSE9XIFBBQ0tBR0UgQk9EWSBTVEFUVVMnLFxuICAnU0hPVyBQQUNLQUdFIFNUQVRVUycsXG4gICdTSE9XIFBMVUdJTlMnLFxuICAnU0hPVyBQTFVHSU5TIFNPTkFNRScsXG4gICdTSE9XIFBSSVZJTEVHRVMnLFxuICAnU0hPVyBQUk9DRURVUkUgQ09ERScsXG4gICdTSE9XIFBST0NFRFVSRSBTVEFUVVMnLFxuICAnU0hPVyBQUk9DRVNTTElTVCcsXG4gICdTSE9XIFBST0ZJTEUnLFxuICAnU0hPVyBQUk9GSUxFUycsXG4gICdTSE9XIFFVRVJZX1JFU1BPTlNFX1RJTUUnLFxuICAnU0hPVyBSRUxBWUxPRyBFVkVOVFMnLFxuICAnU0hPVyBSRVBMSUNBJyxcbiAgJ1NIT1cgUkVQTElDQSBIT1NUUycsXG4gICdTSE9XIFJFUExJQ0EgU1RBVFVTJyxcbiAgJ1NIT1cgU0NIRU1BUycsXG4gICdTSE9XIFNMQVZFJyxcbiAgJ1NIT1cgU0xBVkUgSE9TVFMnLFxuICAnU0hPVyBTTEFWRSBTVEFUVVMnLFxuICAnU0hPVyBTVEFUVVMnLFxuICAnU0hPVyBTVE9SQUdFIEVOR0lORVMnLFxuICAnU0hPVyBUQUJMRSBTVEFUVVMnLFxuICAnU0hPVyBUQUJMRVMnLFxuICAnU0hPVyBUUklHR0VSUycsXG4gICdTSE9XIFVTRVJfU1RBVElTVElDUycsXG4gICdTSE9XIFZBUklBQkxFUycsXG4gICdTSE9XIFdBUk5JTkdTJyxcbiAgJ1NIT1cgV1NSRVBfTUVNQkVSU0hJUCcsXG4gICdTSE9XIFdTUkVQX1NUQVRVUycsXG4gICdTSFVURE9XTicsXG4gICdTSUdOQUwnLFxuICAnU1RBUlQgQUxMIFJFUExJQ0FTJyxcbiAgJ1NUQVJUIEFMTCBTTEFWRVMnLFxuICAnU1RBUlQgUkVQTElDQScsXG4gICdTVEFSVCBTTEFWRScsXG4gICdTVEFSVCBUUkFOU0FDVElPTicsXG4gICdTVE9QIEFMTCBSRVBMSUNBUycsXG4gICdTVE9QIEFMTCBTTEFWRVMnLFxuICAnU1RPUCBSRVBMSUNBJyxcbiAgJ1NUT1AgU0xBVkUnLFxuICAnVFJVTkNBVEUnLFxuICAnVFJVTkNBVEUgVEFCTEUnLFxuICAnVU5JTlNUQUxMIFBMVUdJTicsXG4gICdVTklOU1RBTEwgU09OQU1FJyxcbiAgJ1VOTE9DSyBUQUJMRScsXG4gICdVUERBVEUnLFxuICAnVVNFJyxcbiAgJ1dJVEgnLFxuICAnWEEgQkVHSU4nLFxuICAnWEEgQ09NTUlUJyxcbiAgJ1hBIEVORCcsXG4gICdYQSBQUkVQQVJFJyxcbiAgJ1hBIFJFQ09WRVInLFxuICAnWEEgUk9MTEJBQ0snLFxuICAnWEEgU1RBUlQnLFxuICAvLyBvdGhlclxuICAnQUREJyxcbiAgJ0FMVEVSIENPTFVNTicsXG4gICdGUk9NJyxcbiAgJ0dST1VQIEJZJyxcbiAgJ0hBVklORycsXG4gICdJTlNFUlQgSU5UTycsXG4gICdJTlNFUlQnLFxuICAnTElNSVQnLFxuICAnT0ZGU0VUJyxcbiAgJ09SREVSIEJZJyxcbiAgJ1NFTEVDVCcsXG4gICdWQUxVRVMnLFxuICAnV0hFUkUnLFxuXTtcblxuLyoqXG4gKiBQcmlvcml0eSAyXG4gKiBjb21tYW5kcyB0aGF0IG9wZXJhdGUgb24gdHdvIHRhYmxlcyBvciBzdWJxdWVyaWVzXG4gKiB0d28gbWFpbiBjYXRlZ29yaWVzOiBqb2lucyBhbmQgYm9vbGVhbiBzZXQgb3BlcmF0b3JzXG4gKi9cbmNvbnN0IHJlc2VydmVkQmluYXJ5Q29tbWFuZHMgPSBbXG4gIC8vIHNldCBib29sZWFuc1xuICAnSU5URVJTRUNUJyxcbiAgJ0lOVEVSU0VDVCBBTEwnLFxuICAnSU5URVJTRUNUIERJU1RJTkNUJyxcbiAgJ1VOSU9OJyxcbiAgJ1VOSU9OIEFMTCcsXG4gICdVTklPTiBESVNUSU5DVCcsXG4gICdFWENFUFQnLFxuICAnRVhDRVBUIEFMTCcsXG4gICdFWENFUFQgRElTVElOQ1QnLFxuICAnTUlOVVMnLFxuICAnTUlOVVMgQUxMJyxcbiAgJ01JTlVTIERJU1RJTkNUJyxcbiAgLy8gam9pbnNcbiAgJ0pPSU4nLFxuICAnSU5ORVIgSk9JTicsXG4gICdMRUZUIEpPSU4nLFxuICAnTEVGVCBPVVRFUiBKT0lOJyxcbiAgJ1JJR0hUIEpPSU4nLFxuICAnUklHSFQgT1VURVIgSk9JTicsXG4gICdDUk9TUyBKT0lOJyxcbiAgJ05BVFVSQUwgSk9JTicsXG4gIC8vIG5vbi1zdGFuZGFyZCBqb2luc1xuICAnU1RSQUlHSFRfSk9JTicsXG4gICdOQVRVUkFMIExFRlQgSk9JTicsXG4gICdOQVRVUkFMIExFRlQgT1VURVIgSk9JTicsXG4gICdOQVRVUkFMIFJJR0hUIEpPSU4nLFxuICAnTkFUVVJBTCBSSUdIVCBPVVRFUiBKT0lOJyxcbl07XG5cbi8qKlxuICogUHJpb3JpdHkgM1xuICoga2V5d29yZHMgdGhhdCBmb2xsb3cgYSBwcmV2aW91cyBTdGF0ZW1lbnQsIG11c3QgYmUgYXR0YWNoZWQgdG8gc3Vic2VxdWVudCBkYXRhXG4gKiBjYW4gYmUgZnVsbHkgaW5saW5lIG9yIG9uIG5ld2xpbmUgd2l0aCBvcHRpb25hbCBpbmRlbnRcbiAqL1xuY29uc3QgcmVzZXJ2ZWREZXBlbmRlbnRDbGF1c2VzID0gWydXSEVOJywgJ0VMU0UnLCAnRUxTRUlGJywgJ0VMU0lGJ107XG5cbi8vIEZvciByZWZlcmVuY2U6IGh0dHBzOi8vbWFyaWFkYi5jb20va2IvZW4vc3FsLXN0YXRlbWVudHMtc3RydWN0dXJlL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWFyaWFEYkZvcm1hdHRlciBleHRlbmRzIEZvcm1hdHRlciB7XG4gIHN0YXRpYyByZXNlcnZlZENvbW1hbmRzID0gcmVzZXJ2ZWRDb21tYW5kcztcbiAgc3RhdGljIHJlc2VydmVkQmluYXJ5Q29tbWFuZHMgPSByZXNlcnZlZEJpbmFyeUNvbW1hbmRzO1xuICBzdGF0aWMgcmVzZXJ2ZWRKb2luQ29uZGl0aW9ucyA9IFsnT04nLCAnVVNJTkcnXTtcbiAgc3RhdGljIHJlc2VydmVkTG9naWNhbE9wZXJhdG9ycyA9IFsnQU5EJywgJ09SJywgJ1hPUiddO1xuICBzdGF0aWMgcmVzZXJ2ZWREZXBlbmRlbnRDbGF1c2VzID0gcmVzZXJ2ZWREZXBlbmRlbnRDbGF1c2VzO1xuICBzdGF0aWMgcmVzZXJ2ZWRLZXl3b3JkcyA9IGRlZHVwZShbLi4ucmVzZXJ2ZWRLZXl3b3JkcywgLi4ucmVzZXJ2ZWRGdW5jdGlvbnNdKTtcbiAgc3RhdGljIHN0cmluZ1R5cGVzOiBTdHJpbmdQYXR0ZXJuVHlwZVtdID0gWydgYCcsIFwiJydcIiwgJ1wiXCInXTtcbiAgc3RhdGljIGJsb2NrU3RhcnQgPSBbJygnLCAnQ0FTRSddO1xuICBzdGF0aWMgYmxvY2tFbmQgPSBbJyknLCAnRU5EJ107XG4gIHN0YXRpYyBpbmRleGVkUGxhY2Vob2xkZXJUeXBlcyA9IFsnPyddO1xuICBzdGF0aWMgbmFtZWRQbGFjZWhvbGRlclR5cGVzID0gW107XG4gIHN0YXRpYyBsaW5lQ29tbWVudFR5cGVzID0gWyctLScsICcjJ107XG4gIHN0YXRpYyBzcGVjaWFsV29yZENoYXJzID0geyBwcmVmaXg6ICdAJyB9O1xuICBzdGF0aWMgb3BlcmF0b3JzID0gWyc6PScsICc8PCcsICc+PicsICc8PT4nLCAnJiYnLCAnfHwnXTtcblxuICB0b2tlbml6ZXIoKSB7XG4gICAgcmV0dXJuIG5ldyBUb2tlbml6ZXIoe1xuICAgICAgcmVzZXJ2ZWRDb21tYW5kczogTWFyaWFEYkZvcm1hdHRlci5yZXNlcnZlZENvbW1hbmRzLFxuICAgICAgcmVzZXJ2ZWRCaW5hcnlDb21tYW5kczogTWFyaWFEYkZvcm1hdHRlci5yZXNlcnZlZEJpbmFyeUNvbW1hbmRzLFxuICAgICAgcmVzZXJ2ZWREZXBlbmRlbnRDbGF1c2VzOiBNYXJpYURiRm9ybWF0dGVyLnJlc2VydmVkRGVwZW5kZW50Q2xhdXNlcyxcbiAgICAgIHJlc2VydmVkSm9pbkNvbmRpdGlvbnM6IE1hcmlhRGJGb3JtYXR0ZXIucmVzZXJ2ZWRKb2luQ29uZGl0aW9ucyxcbiAgICAgIHJlc2VydmVkTG9naWNhbE9wZXJhdG9yczogTWFyaWFEYkZvcm1hdHRlci5yZXNlcnZlZExvZ2ljYWxPcGVyYXRvcnMsXG4gICAgICByZXNlcnZlZEtleXdvcmRzOiBNYXJpYURiRm9ybWF0dGVyLnJlc2VydmVkS2V5d29yZHMsXG4gICAgICBzdHJpbmdUeXBlczogTWFyaWFEYkZvcm1hdHRlci5zdHJpbmdUeXBlcyxcbiAgICAgIGJsb2NrU3RhcnQ6IE1hcmlhRGJGb3JtYXR0ZXIuYmxvY2tTdGFydCxcbiAgICAgIGJsb2NrRW5kOiBNYXJpYURiRm9ybWF0dGVyLmJsb2NrRW5kLFxuICAgICAgaW5kZXhlZFBsYWNlaG9sZGVyVHlwZXM6IE1hcmlhRGJGb3JtYXR0ZXIuaW5kZXhlZFBsYWNlaG9sZGVyVHlwZXMsXG4gICAgICBuYW1lZFBsYWNlaG9sZGVyVHlwZXM6IE1hcmlhRGJGb3JtYXR0ZXIubmFtZWRQbGFjZWhvbGRlclR5cGVzLFxuICAgICAgbGluZUNvbW1lbnRUeXBlczogTWFyaWFEYkZvcm1hdHRlci5saW5lQ29tbWVudFR5cGVzLFxuICAgICAgc3BlY2lhbFdvcmRDaGFyczogTWFyaWFEYkZvcm1hdHRlci5zcGVjaWFsV29yZENoYXJzLFxuICAgICAgb3BlcmF0b3JzOiBNYXJpYURiRm9ybWF0dGVyLm9wZXJhdG9ycyxcbiAgICB9KTtcbiAgfVxuXG4gIHRva2VuT3ZlcnJpZGUodG9rZW46IFRva2VuKSB7XG4gICAgLy8gW1NFVF0gKCAuLi5cbiAgICBpZiAoaXNUb2tlbi5TRVQodG9rZW4pICYmIHRoaXMudG9rZW5Mb29rQWhlYWQoKS52YWx1ZSA9PT0gJygnKSB7XG4gICAgICAvLyBUaGlzIGlzIFNFVCBkYXRhdHlwZSwgbm90IFNFVCBzdGF0ZW1lbnRcbiAgICAgIHJldHVybiB7IHR5cGU6IFRva2VuVHlwZS5SRVNFUlZFRF9LRVlXT1JELCB2YWx1ZTogdG9rZW4udmFsdWUgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gdG9rZW47XG4gIH1cbn1cbiIsImltcG9ydCBGb3JtYXR0ZXIgZnJvbSAnLi4vY29yZS9Gb3JtYXR0ZXInO1xuaW1wb3J0IFRva2VuaXplciBmcm9tICcuLi9jb3JlL1Rva2VuaXplcic7XG5pbXBvcnQgeyBpc1Rva2VuLCBUb2tlbiwgVG9rZW5UeXBlIH0gZnJvbSAnLi4vY29yZS90b2tlbic7XG5pbXBvcnQgdHlwZSB7IFN0cmluZ1BhdHRlcm5UeXBlIH0gZnJvbSAnLi4vY29yZS9yZWdleEZhY3RvcnknO1xuaW1wb3J0IHsgZGVkdXBlIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG4vLyBUT0RPOiBzcGxpdCB0aGlzIGludG8gb2JqZWN0IHdpdGggZnVuY3Rpb24gY2F0ZWdvcmllc1xuLyoqXG4gKiBQcmlvcml0eSA1IChsYXN0KVxuICogRnVsbCBsaXN0IG9mIHJlc2VydmVkIGZ1bmN0aW9uc1xuICogZGlzdGluY3QgZnJvbSBLZXl3b3JkcyBkdWUgdG8gaW50ZXJhY3Rpb24gd2l0aCBwYXJlbnRoZXNlc1xuICovXG4vLyBodHRwczovL2Rldi5teXNxbC5jb20vZG9jL3JlZm1hbi84LjAvZW4vYnVpbHQtaW4tZnVuY3Rpb24tcmVmZXJlbmNlLmh0bWxcbmNvbnN0IHJlc2VydmVkRnVuY3Rpb25zID0gW1xuICAnQUJTJyxcbiAgJ0FDT1MnLFxuICAnQUREREFURScsXG4gICdBRERUSU1FJyxcbiAgJ0FFU19ERUNSWVBUJyxcbiAgJ0FFU19FTkNSWVBUJyxcbiAgJ0FORCcsXG4gICdBTllfVkFMVUUnLFxuICAnQVNDSUknLFxuICAnQVNJTicsXG4gICdBVEFOJyxcbiAgJ0FUQU4yJyxcbiAgJ0FWRycsXG4gICdCRU5DSE1BUksnLFxuICAnQklOJyxcbiAgJ0JJTl9UT19VVUlEJyxcbiAgJ0JJTkFSWScsXG4gICdCSVRfQU5EJyxcbiAgJ0JJVF9DT1VOVCcsXG4gICdCSVRfTEVOR1RIJyxcbiAgJ0JJVF9PUicsXG4gICdCSVRfWE9SJyxcbiAgJ0NBTl9BQ0NFU1NfQ09MVU1OJyxcbiAgJ0NBTl9BQ0NFU1NfREFUQUJBU0UnLFxuICAnQ0FOX0FDQ0VTU19UQUJMRScsXG4gICdDQU5fQUNDRVNTX1VTRVInLFxuICAnQ0FOX0FDQ0VTU19WSUVXJyxcbiAgJ0NBU0UnLFxuICAnQ0FTVCcsXG4gICdDRUlMJyxcbiAgJ0NFSUxJTkcnLFxuICAnQ0hBUicsXG4gICdDSEFSX0xFTkdUSCcsXG4gICdDSEFSQUNURVJfTEVOR1RIJyxcbiAgJ0NIQVJTRVQnLFxuICAnQ09BTEVTQ0UnLFxuICAnQ09FUkNJQklMSVRZJyxcbiAgJ0NPTExBVElPTicsXG4gICdDT01QUkVTUycsXG4gICdDT05DQVQnLFxuICAnQ09OQ0FUX1dTJyxcbiAgJ0NPTk5FQ1RJT05fSUQnLFxuICAnQ09OVicsXG4gICdDT05WRVJUJyxcbiAgJ0NPTlZFUlRfVFonLFxuICAnQ09TJyxcbiAgJ0NPVCcsXG4gICdDT1VOVCcsXG4gICdDUkMzMicsXG4gICdDVU1FX0RJU1QnLFxuICAnQ1VSREFURScsXG4gICdDVVJSRU5UX0RBVEUnLFxuICAnQ1VSUkVOVF9ST0xFJyxcbiAgJ0NVUlJFTlRfVElNRScsXG4gICdDVVJSRU5UX1RJTUVTVEFNUCcsXG4gICdDVVJSRU5UX1VTRVInLFxuICAnQ1VSVElNRScsXG4gICdEQVRBQkFTRScsXG4gICdEQVRFJyxcbiAgJ0RBVEVfQUREJyxcbiAgJ0RBVEVfRk9STUFUJyxcbiAgJ0RBVEVfU1VCJyxcbiAgJ0RBVEVESUZGJyxcbiAgJ0RBWScsXG4gICdEQVlOQU1FJyxcbiAgJ0RBWU9GTU9OVEgnLFxuICAnREFZT0ZXRUVLJyxcbiAgJ0RBWU9GWUVBUicsXG4gICdERUZBVUxUJyxcbiAgJ0RFR1JFRVMnLFxuICAnREVOU0VfUkFOSycsXG4gICdESVYnLFxuICAnRUxUJyxcbiAgJ0VYUCcsXG4gICdFWFBPUlRfU0VUJyxcbiAgJ0VYVFJBQ1QnLFxuICAnRXh0cmFjdFZhbHVlJyxcbiAgJ0ZJRUxEJyxcbiAgJ0ZJTkRfSU5fU0VUJyxcbiAgJ0ZJUlNUX1ZBTFVFJyxcbiAgJ0ZMT09SJyxcbiAgJ0ZPUk1BVCcsXG4gICdGT1JNQVRfQllURVMnLFxuICAnRk9STUFUX1BJQ09fVElNRScsXG4gICdGT1VORF9ST1dTJyxcbiAgJ0ZST01fQkFTRTY0JyxcbiAgJ0ZST01fREFZUycsXG4gICdGUk9NX1VOSVhUSU1FJyxcbiAgJ0dlb21Db2xsZWN0aW9uJyxcbiAgJ0dlb21ldHJ5Q29sbGVjdGlvbicsXG4gICdHRVRfRERfQ09MVU1OX1BSSVZJTEVHRVMnLFxuICAnR0VUX0REX0NSRUFURV9PUFRJT05TJyxcbiAgJ0dFVF9ERF9JTkRFWF9TVUJfUEFSVF9MRU5HVEgnLFxuICAnR0VUX0ZPUk1BVCcsXG4gICdHRVRfTE9DSycsXG4gICdHUkVBVEVTVCcsXG4gICdHUk9VUF9DT05DQVQnLFxuICAnR1JPVVBJTkcnLFxuICAnR1RJRF9TVUJTRVQnLFxuICAnR1RJRF9TVUJUUkFDVCcsXG4gICdIRVgnLFxuICAnSE9VUicsXG4gICdJQ1VfVkVSU0lPTicsXG4gICdJRicsXG4gICdJRk5VTEwnLFxuICAnSU4nLFxuICAnSU5FVF9BVE9OJyxcbiAgJ0lORVRfTlRPQScsXG4gICdJTkVUNl9BVE9OJyxcbiAgJ0lORVQ2X05UT0EnLFxuICAnSU5TRVJUJyxcbiAgJ0lOU1RSJyxcbiAgJ0lOVEVSTkFMX0FVVE9fSU5DUkVNRU5UJyxcbiAgJ0lOVEVSTkFMX0FWR19ST1dfTEVOR1RIJyxcbiAgJ0lOVEVSTkFMX0NIRUNLX1RJTUUnLFxuICAnSU5URVJOQUxfQ0hFQ0tTVU0nLFxuICAnSU5URVJOQUxfREFUQV9GUkVFJyxcbiAgJ0lOVEVSTkFMX0RBVEFfTEVOR1RIJyxcbiAgJ0lOVEVSTkFMX0REX0NIQVJfTEVOR1RIJyxcbiAgJ0lOVEVSTkFMX0dFVF9DT01NRU5UX09SX0VSUk9SJyxcbiAgJ0lOVEVSTkFMX0dFVF9FTkFCTEVEX1JPTEVfSlNPTicsXG4gICdJTlRFUk5BTF9HRVRfSE9TVE5BTUUnLFxuICAnSU5URVJOQUxfR0VUX1VTRVJOQU1FJyxcbiAgJ0lOVEVSTkFMX0dFVF9WSUVXX1dBUk5JTkdfT1JfRVJST1InLFxuICAnSU5URVJOQUxfSU5ERVhfQ09MVU1OX0NBUkRJTkFMSVRZJyxcbiAgJ0lOVEVSTkFMX0lOREVYX0xFTkdUSCcsXG4gICdJTlRFUk5BTF9JU19FTkFCTEVEX1JPTEUnLFxuICAnSU5URVJOQUxfSVNfTUFOREFUT1JZX1JPTEUnLFxuICAnSU5URVJOQUxfS0VZU19ESVNBQkxFRCcsXG4gICdJTlRFUk5BTF9NQVhfREFUQV9MRU5HVEgnLFxuICAnSU5URVJOQUxfVEFCTEVfUk9XUycsXG4gICdJTlRFUk5BTF9VUERBVEVfVElNRScsXG4gICdJTlRFUlZBTCcsXG4gICdJUycsXG4gICdJU19GUkVFX0xPQ0snLFxuICAnSVNfSVBWNCcsXG4gICdJU19JUFY0X0NPTVBBVCcsXG4gICdJU19JUFY0X01BUFBFRCcsXG4gICdJU19JUFY2JyxcbiAgJ0lTIE5PVCcsXG4gICdJUyBOT1QgTlVMTCcsXG4gICdJUyBOVUxMJyxcbiAgJ0lTX1VTRURfTE9DSycsXG4gICdJU19VVUlEJyxcbiAgJ0lTTlVMTCcsXG4gICdKU09OX0FSUkFZJyxcbiAgJ0pTT05fQVJSQVlfQVBQRU5EJyxcbiAgJ0pTT05fQVJSQVlfSU5TRVJUJyxcbiAgJ0pTT05fQVJSQVlBR0cnLFxuICAnSlNPTl9DT05UQUlOUycsXG4gICdKU09OX0NPTlRBSU5TX1BBVEgnLFxuICAnSlNPTl9ERVBUSCcsXG4gICdKU09OX0VYVFJBQ1QnLFxuICAnSlNPTl9JTlNFUlQnLFxuICAnSlNPTl9LRVlTJyxcbiAgJ0pTT05fTEVOR1RIJyxcbiAgJ0pTT05fTUVSR0UnLFxuICAnSlNPTl9NRVJHRV9QQVRDSCcsXG4gICdKU09OX01FUkdFX1BSRVNFUlZFJyxcbiAgJ0pTT05fT0JKRUNUJyxcbiAgJ0pTT05fT0JKRUNUQUdHJyxcbiAgJ0pTT05fT1ZFUkxBUFMnLFxuICAnSlNPTl9QUkVUVFknLFxuICAnSlNPTl9RVU9URScsXG4gICdKU09OX1JFTU9WRScsXG4gICdKU09OX1JFUExBQ0UnLFxuICAnSlNPTl9TQ0hFTUFfVkFMSUQnLFxuICAnSlNPTl9TQ0hFTUFfVkFMSURBVElPTl9SRVBPUlQnLFxuICAnSlNPTl9TRUFSQ0gnLFxuICAnSlNPTl9TRVQnLFxuICAnSlNPTl9TVE9SQUdFX0ZSRUUnLFxuICAnSlNPTl9TVE9SQUdFX1NJWkUnLFxuICAnSlNPTl9UQUJMRScsXG4gICdKU09OX1RZUEUnLFxuICAnSlNPTl9VTlFVT1RFJyxcbiAgJ0pTT05fVkFMSUQnLFxuICAnSlNPTl9WQUxVRScsXG4gICdMQUcnLFxuICAnTEFTVF9EQVknLFxuICAnTEFTVF9JTlNFUlRfSUQnLFxuICAnTEFTVF9WQUxVRScsXG4gICdMQ0FTRScsXG4gICdMRUFEJyxcbiAgJ0xFQVNUJyxcbiAgJ0xFRlQnLFxuICAnTEVOR1RIJyxcbiAgJ0xJS0UnLFxuICAnTGluZVN0cmluZycsXG4gICdMTicsXG4gICdMT0FEX0ZJTEUnLFxuICAnTE9DQUxUSU1FJyxcbiAgJ0xPQ0FMVElNRVNUQU1QJyxcbiAgJ0xPQ0FURScsXG4gICdMT0cnLFxuICAnTE9HMTAnLFxuICAnTE9HMicsXG4gICdMT1dFUicsXG4gICdMUEFEJyxcbiAgJ0xUUklNJyxcbiAgJ01BS0VfU0VUJyxcbiAgJ01BS0VEQVRFJyxcbiAgJ01BS0VUSU1FJyxcbiAgJ01BU1RFUl9QT1NfV0FJVCcsXG4gICdNQVRDSCcsXG4gICdNQVgnLFxuICAnTUJSQ29udGFpbnMnLFxuICAnTUJSQ292ZXJlZEJ5JyxcbiAgJ01CUkNvdmVycycsXG4gICdNQlJEaXNqb2ludCcsXG4gICdNQlJFcXVhbHMnLFxuICAnTUJSSW50ZXJzZWN0cycsXG4gICdNQlJPdmVybGFwcycsXG4gICdNQlJUb3VjaGVzJyxcbiAgJ01CUldpdGhpbicsXG4gICdNRDUnLFxuICAnTUVNQkVSIE9GJyxcbiAgJ01JQ1JPU0VDT05EJyxcbiAgJ01JRCcsXG4gICdNSU4nLFxuICAnTUlOVVRFJyxcbiAgJ01PRCcsXG4gICdNT05USCcsXG4gICdNT05USE5BTUUnLFxuICAnTXVsdGlMaW5lU3RyaW5nJyxcbiAgJ011bHRpUG9pbnQnLFxuICAnTXVsdGlQb2x5Z29uJyxcbiAgJ05BTUVfQ09OU1QnLFxuICAnTk9UJyxcbiAgJ05PVCBJTicsXG4gICdOT1QgTElLRScsXG4gICdOT1QgUkVHRVhQJyxcbiAgJ05PVycsXG4gICdOVEhfVkFMVUUnLFxuICAnTlRJTEUnLFxuICAnTlVMTElGJyxcbiAgJ09DVCcsXG4gICdPQ1RFVF9MRU5HVEgnLFxuICAnT1InLFxuICAnT1JEJyxcbiAgJ1BFUkNFTlRfUkFOSycsXG4gICdQRVJJT0RfQUREJyxcbiAgJ1BFUklPRF9ESUZGJyxcbiAgJ1BJJyxcbiAgJ1BvaW50JyxcbiAgJ1BvbHlnb24nLFxuICAnUE9TSVRJT04nLFxuICAnUE9XJyxcbiAgJ1BPV0VSJyxcbiAgJ1BTX0NVUlJFTlRfVEhSRUFEX0lEJyxcbiAgJ1BTX1RIUkVBRF9JRCcsXG4gICdRVUFSVEVSJyxcbiAgJ1FVT1RFJyxcbiAgJ1JBRElBTlMnLFxuICAnUkFORCcsXG4gICdSQU5ET01fQllURVMnLFxuICAnUkFOSycsXG4gICdSRUdFWFAnLFxuICAnUkVHRVhQX0lOU1RSJyxcbiAgJ1JFR0VYUF9MSUtFJyxcbiAgJ1JFR0VYUF9SRVBMQUNFJyxcbiAgJ1JFR0VYUF9TVUJTVFInLFxuICAnUkVMRUFTRV9BTExfTE9DS1MnLFxuICAnUkVMRUFTRV9MT0NLJyxcbiAgJ1JFUEVBVCcsXG4gICdSRVBMQUNFJyxcbiAgJ1JFVkVSU0UnLFxuICAnUklHSFQnLFxuICAnUkxJS0UnLFxuICAnUk9MRVNfR1JBUEhNTCcsXG4gICdST1VORCcsXG4gICdST1dfQ09VTlQnLFxuICAnUk9XX05VTUJFUicsXG4gICdSUEFEJyxcbiAgJ1JUUklNJyxcbiAgJ1NDSEVNQScsXG4gICdTRUNfVE9fVElNRScsXG4gICdTRUNPTkQnLFxuICAnU0VTU0lPTl9VU0VSJyxcbiAgJ1NIQTEnLFxuICAnU0hBMicsXG4gICdTSUdOJyxcbiAgJ1NJTicsXG4gICdTTEVFUCcsXG4gICdTT1VOREVYJyxcbiAgJ1NPVU5EUyBMSUtFJyxcbiAgJ1NPVVJDRV9QT1NfV0FJVCcsXG4gICdTUEFDRScsXG4gICdTUVJUJyxcbiAgJ1NUX0FyZWEnLFxuICAnU1RfQXNCaW5hcnknLFxuICAnU1RfQXNHZW9KU09OJyxcbiAgJ1NUX0FzVGV4dCcsXG4gICdTVF9CdWZmZXInLFxuICAnU1RfQnVmZmVyX1N0cmF0ZWd5JyxcbiAgJ1NUX0NlbnRyb2lkJyxcbiAgJ1NUX0NvbGxlY3QnLFxuICAnU1RfQ29udGFpbnMnLFxuICAnU1RfQ29udmV4SHVsbCcsXG4gICdTVF9Dcm9zc2VzJyxcbiAgJ1NUX0RpZmZlcmVuY2UnLFxuICAnU1RfRGltZW5zaW9uJyxcbiAgJ1NUX0Rpc2pvaW50JyxcbiAgJ1NUX0Rpc3RhbmNlJyxcbiAgJ1NUX0Rpc3RhbmNlX1NwaGVyZScsXG4gICdTVF9FbmRQb2ludCcsXG4gICdTVF9FbnZlbG9wZScsXG4gICdTVF9FcXVhbHMnLFxuICAnU1RfRXh0ZXJpb3JSaW5nJyxcbiAgJ1NUX0ZyZWNoZXREaXN0YW5jZScsXG4gICdTVF9HZW9IYXNoJyxcbiAgJ1NUX0dlb21Db2xsRnJvbVRleHQnLFxuICAnU1RfR2VvbUNvbGxGcm9tV0tCJyxcbiAgJ1NUX0dlb21ldHJ5TicsXG4gICdTVF9HZW9tZXRyeVR5cGUnLFxuICAnU1RfR2VvbUZyb21HZW9KU09OJyxcbiAgJ1NUX0dlb21Gcm9tVGV4dCcsXG4gICdTVF9HZW9tRnJvbVdLQicsXG4gICdTVF9IYXVzZG9yZmZEaXN0YW5jZScsXG4gICdTVF9JbnRlcmlvclJpbmdOJyxcbiAgJ1NUX0ludGVyc2VjdGlvbicsXG4gICdTVF9JbnRlcnNlY3RzJyxcbiAgJ1NUX0lzQ2xvc2VkJyxcbiAgJ1NUX0lzRW1wdHknLFxuICAnU1RfSXNTaW1wbGUnLFxuICAnU1RfSXNWYWxpZCcsXG4gICdTVF9MYXRGcm9tR2VvSGFzaCcsXG4gICdTVF9MYXRpdHVkZScsXG4gICdTVF9MZW5ndGgnLFxuICAnU1RfTGluZUZyb21UZXh0JyxcbiAgJ1NUX0xpbmVGcm9tV0tCJyxcbiAgJ1NUX0xpbmVJbnRlcnBvbGF0ZVBvaW50JyxcbiAgJ1NUX0xpbmVJbnRlcnBvbGF0ZVBvaW50cycsXG4gICdTVF9Mb25nRnJvbUdlb0hhc2gnLFxuICAnU1RfTG9uZ2l0dWRlJyxcbiAgJ1NUX01ha2VFbnZlbG9wZScsXG4gICdTVF9NTGluZUZyb21UZXh0JyxcbiAgJ1NUX01MaW5lRnJvbVdLQicsXG4gICdTVF9NUG9pbnRGcm9tVGV4dCcsXG4gICdTVF9NUG9pbnRGcm9tV0tCJyxcbiAgJ1NUX01Qb2x5RnJvbVRleHQnLFxuICAnU1RfTVBvbHlGcm9tV0tCJyxcbiAgJ1NUX051bUdlb21ldHJpZXMnLFxuICAnU1RfTnVtSW50ZXJpb3JSaW5nJyxcbiAgJ1NUX051bVBvaW50cycsXG4gICdTVF9PdmVybGFwcycsXG4gICdTVF9Qb2ludEF0RGlzdGFuY2UnLFxuICAnU1RfUG9pbnRGcm9tR2VvSGFzaCcsXG4gICdTVF9Qb2ludEZyb21UZXh0JyxcbiAgJ1NUX1BvaW50RnJvbVdLQicsXG4gICdTVF9Qb2ludE4nLFxuICAnU1RfUG9seUZyb21UZXh0JyxcbiAgJ1NUX1BvbHlGcm9tV0tCJyxcbiAgJ1NUX1NpbXBsaWZ5JyxcbiAgJ1NUX1NSSUQnLFxuICAnU1RfU3RhcnRQb2ludCcsXG4gICdTVF9Td2FwWFknLFxuICAnU1RfU3ltRGlmZmVyZW5jZScsXG4gICdTVF9Ub3VjaGVzJyxcbiAgJ1NUX1RyYW5zZm9ybScsXG4gICdTVF9VbmlvbicsXG4gICdTVF9WYWxpZGF0ZScsXG4gICdTVF9XaXRoaW4nLFxuICAnU1RfWCcsXG4gICdTVF9ZJyxcbiAgJ1NUQVRFTUVOVF9ESUdFU1QnLFxuICAnU1RBVEVNRU5UX0RJR0VTVF9URVhUJyxcbiAgJ1NURCcsXG4gICdTVERERVYnLFxuICAnU1REREVWX1BPUCcsXG4gICdTVERERVZfU0FNUCcsXG4gICdTVFJfVE9fREFURScsXG4gICdTVFJDTVAnLFxuICAnU1VCREFURScsXG4gICdTVUJTVFInLFxuICAnU1VCU1RSSU5HJyxcbiAgJ1NVQlNUUklOR19JTkRFWCcsXG4gICdTVUJUSU1FJyxcbiAgJ1NVTScsXG4gICdTWVNEQVRFJyxcbiAgJ1NZU1RFTV9VU0VSJyxcbiAgJ1RBTicsXG4gICdUSU1FJyxcbiAgJ1RJTUVfRk9STUFUJyxcbiAgJ1RJTUVfVE9fU0VDJyxcbiAgJ1RJTUVESUZGJyxcbiAgJ1RJTUVTVEFNUCcsXG4gICdUSU1FU1RBTVBBREQnLFxuICAnVElNRVNUQU1QRElGRicsXG4gICdUT19CQVNFNjQnLFxuICAnVE9fREFZUycsXG4gICdUT19TRUNPTkRTJyxcbiAgJ1RSSU0nLFxuICAnVFJVTkNBVEUnLFxuICAnVUNBU0UnLFxuICAnVU5DT01QUkVTUycsXG4gICdVTkNPTVBSRVNTRURfTEVOR1RIJyxcbiAgJ1VOSEVYJyxcbiAgJ1VOSVhfVElNRVNUQU1QJyxcbiAgJ1VwZGF0ZVhNTCcsXG4gICdVUFBFUicsXG4gICdVU0VSJyxcbiAgJ1VUQ19EQVRFJyxcbiAgJ1VUQ19USU1FJyxcbiAgJ1VUQ19USU1FU1RBTVAnLFxuICAnVVVJRCcsXG4gICdVVUlEX1NIT1JUJyxcbiAgJ1VVSURfVE9fQklOJyxcbiAgJ1ZBTElEQVRFX1BBU1NXT1JEX1NUUkVOR1RIJyxcbiAgJ1ZBTFVFUycsXG4gICdWQVJfUE9QJyxcbiAgJ1ZBUl9TQU1QJyxcbiAgJ1ZBUklBTkNFJyxcbiAgJ1ZFUlNJT04nLFxuICAnV0FJVF9GT1JfRVhFQ1VURURfR1RJRF9TRVQnLFxuICAnV0FJVF9VTlRJTF9TUUxfVEhSRUFEX0FGVEVSX0dUSURTJyxcbiAgJ1dFRUsnLFxuICAnV0VFS0RBWScsXG4gICdXRUVLT0ZZRUFSJyxcbiAgJ1dFSUdIVF9TVFJJTkcnLFxuICAnWE9SJyxcbiAgJ1lFQVInLFxuICAnWUVBUldFRUsnLFxuXTtcblxuLyoqXG4gKiBQcmlvcml0eSA1IChsYXN0KVxuICogRnVsbCBsaXN0IG9mIHJlc2VydmVkIHdvcmRzXG4gKiBhbnkgd29yZHMgdGhhdCBhcmUgaW4gYSBoaWdoZXIgcHJpb3JpdHkgYXJlIHJlbW92ZWRcbiAqL1xuLy8gaHR0cHM6Ly9kZXYubXlzcWwuY29tL2RvYy9yZWZtYW4vOC4wL2VuL2tleXdvcmRzLmh0bWxcbmNvbnN0IHJlc2VydmVkS2V5d29yZHMgPSBbXG4gICdBQ0NFU1NJQkxFJyxcbiAgJ0FDQ09VTlQnLFxuICAnQUNUSU9OJyxcbiAgJ0FDVElWRScsXG4gICdBRE1JTicsXG4gICdBRlRFUicsXG4gICdBR0FJTlNUJyxcbiAgJ0FHR1JFR0FURScsXG4gICdBTEdPUklUSE0nLFxuICAnQUxMJyxcbiAgJ0FMVEVSJyxcbiAgJ0FMV0FZUycsXG4gICdBTkFMWVNFJyxcbiAgJ0FOQUxZWkUnLFxuICAnQU5ZJyxcbiAgJ0FSUkFZJyxcbiAgJ0FTJyxcbiAgJ0FTQycsXG4gICdBU0VOU0lUSVZFJyxcbiAgJ0FUJyxcbiAgJ0FUVFJJQlVURScsXG4gICdBVVRIRU5USUNBVElPTicsXG4gICdBVVRPRVhURU5EX1NJWkUnLFxuICAnQVVUT19JTkNSRU1FTlQnLFxuICAnQVZHX1JPV19MRU5HVEgnLFxuICAnQkFDS1VQJyxcbiAgJ0JFRk9SRScsXG4gICdCRUdJTicsXG4gICdCRVRXRUVOJyxcbiAgJ0JJR0lOVCcsXG4gICdCSVQnLFxuICAnQkxPQicsXG4gICdCTE9DSycsXG4gICdCT09MJyxcbiAgJ0JPT0xFQU4nLFxuICAnQk9USCcsXG4gICdCVFJFRScsXG4gICdCVUNLRVRTJyxcbiAgJ0JZJyxcbiAgJ0JZVEUnLFxuICAnQ0FDSEUnLFxuICAnQ0FTQ0FERScsXG4gICdDQVNDQURFRCcsXG4gICdDQVRBTE9HX05BTUUnLFxuICAnQ0hBSU4nLFxuICAnQ0hBTExFTkdFX1JFU1BPTlNFJyxcbiAgJ0NIQU5HRScsXG4gICdDSEFOR0VEJyxcbiAgJ0NIQU5ORUwnLFxuICAnQ0hBUkFDVEVSJyxcbiAgJ0NIQVJBQ1RFUiBTRVQnLFxuICAnQ0hFQ0snLFxuICAnQ0hFQ0tTVU0nLFxuICAnQ0lQSEVSJyxcbiAgJ0NMQVNTX09SSUdJTicsXG4gICdDTElFTlQnLFxuICAnQ0xPU0UnLFxuICAnQ09ERScsXG4gICdDT0xMQVRFJyxcbiAgJ0NPTFVNTicsXG4gICdDT0xVTU5TJyxcbiAgJ0NPTFVNTl9GT1JNQVQnLFxuICAnQ09MVU1OX05BTUUnLFxuICAnQ09NTUVOVCcsXG4gICdDT01NSVRURUQnLFxuICAnQ09NUEFDVCcsXG4gICdDT01QTEVUSU9OJyxcbiAgJ0NPTVBPTkVOVCcsXG4gICdDT01QUkVTU0VEJyxcbiAgJ0NPTVBSRVNTSU9OJyxcbiAgJ0NPTkNVUlJFTlQnLFxuICAnQ09ORElUSU9OJyxcbiAgJ0NPTk5FQ1RJT04nLFxuICAnQ09OU0lTVEVOVCcsXG4gICdDT05TVFJBSU5UJyxcbiAgJ0NPTlNUUkFJTlRfQ0FUQUxPRycsXG4gICdDT05TVFJBSU5UX05BTUUnLFxuICAnQ09OU1RSQUlOVF9TQ0hFTUEnLFxuICAnQ09OVEFJTlMnLFxuICAnQ09OVEVYVCcsXG4gICdDT05USU5VRScsXG4gICdDUFUnLFxuICAnQ1JFQVRFJyxcbiAgJ0NST1NTJyxcbiAgJ0NVQkUnLFxuICAnQ1VSUkVOVCcsXG4gICdDVVJTT1InLFxuICAnQ1VSU09SX05BTUUnLFxuICAnREFUQScsXG4gICdEQVRBQkFTRVMnLFxuICAnREFUQUZJTEUnLFxuICAnREFURVRJTUUnLFxuICAnREFZX0hPVVInLFxuICAnREFZX01JQ1JPU0VDT05EJyxcbiAgJ0RBWV9NSU5VVEUnLFxuICAnREFZX1NFQ09ORCcsXG4gICdERUFMTE9DQVRFJyxcbiAgJ0RFQycsXG4gICdERUNJTUFMJyxcbiAgJ0RFQ0xBUkUnLFxuICAnREVGQVVMVF9BVVRIJyxcbiAgJ0RFRklORVInLFxuICAnREVGSU5JVElPTicsXG4gICdERUxBWUVEJyxcbiAgJ0RFTEFZX0tFWV9XUklURScsXG4gICdERVNDJyxcbiAgJ0RFU0NSSVBUSU9OJyxcbiAgJ0RFU19LRVlfRklMRScsXG4gICdERVRFUk1JTklTVElDJyxcbiAgJ0RJQUdOT1NUSUNTJyxcbiAgJ0RJUkVDVE9SWScsXG4gICdESVNBQkxFJyxcbiAgJ0RJU0NBUkQnLFxuICAnRElTSycsXG4gICdESVNUSU5DVCcsXG4gICdESVNUSU5DVFJPVycsXG4gICdET1VCTEUnLFxuICAnRFJPUCcsXG4gICdEVUFMJyxcbiAgJ0RVTVBGSUxFJyxcbiAgJ0RVUExJQ0FURScsXG4gICdEWU5BTUlDJyxcbiAgJ0VBQ0gnLFxuICAnRU1QVFknLFxuICAnRU5BQkxFJyxcbiAgJ0VOQ0xPU0VEJyxcbiAgJ0VOQ1JZUFRJT04nLFxuICAnRU5EUycsXG4gICdFTkZPUkNFRCcsXG4gICdFTkdJTkUnLFxuICAnRU5HSU5FUycsXG4gICdFTkdJTkVfQVRUUklCVVRFJyxcbiAgJ0VOVU0nLFxuICAnRVJST1InLFxuICAnRVJST1JTJyxcbiAgJ0VTQ0FQRScsXG4gICdFU0NBUEVEJyxcbiAgJ0VWRU5UJyxcbiAgJ0VWRU5UUycsXG4gICdFVkVSWScsXG4gICdFWENIQU5HRScsXG4gICdFWENMVURFJyxcbiAgJ0VYSVNUUycsXG4gICdFWElUJyxcbiAgJ0VYUEFOU0lPTicsXG4gICdFWFBJUkUnLFxuICAnRVhQT1JUJyxcbiAgJ0VYVEVOREVEJyxcbiAgJ0VYVEVOVF9TSVpFJyxcbiAgJ0ZBQ1RPUicsXG4gICdGQUlMRURfTE9HSU5fQVRURU1QVFMnLFxuICAnRkFMU0UnLFxuICAnRkFTVCcsXG4gICdGQVVMVFMnLFxuICAnRkVUQ0gnLFxuICAnRklFTERTJyxcbiAgJ0ZJTEUnLFxuICAnRklMRV9CTE9DS19TSVpFJyxcbiAgJ0ZJTFRFUicsXG4gICdGSU5JU0gnLFxuICAnRklSU1QnLFxuICAnRklYRUQnLFxuICAnRkxPQVQnLFxuICAnRkxPQVQ0JyxcbiAgJ0ZMT0FUOCcsXG4gICdGT0xMT1dJTkcnLFxuICAnRk9MTE9XUycsXG4gICdGT1InLFxuICAnRk9SQ0UnLFxuICAnRk9SRUlHTicsXG4gICdGT1VORCcsXG4gICdGVUxMJyxcbiAgJ0ZVTExURVhUJyxcbiAgJ0ZVTkNUSU9OJyxcbiAgJ0dFTkVSQUwnLFxuICAnR0VORVJBVEVEJyxcbiAgJ0dFT01DT0xMRUNUSU9OJyxcbiAgJ0dFT01FVFJZJyxcbiAgJ0dFT01FVFJZQ09MTEVDVElPTicsXG4gICdHRVQnLFxuICAnR0VUX01BU1RFUl9QVUJMSUNfS0VZJyxcbiAgJ0dFVF9TT1VSQ0VfUFVCTElDX0tFWScsXG4gICdHTE9CQUwnLFxuICAnQEBHTE9CQUwnLFxuICAnR1JBTlRTJyxcbiAgJ0dST1VQJyxcbiAgJ0dST1VQUycsXG4gICdHUk9VUF9SRVBMSUNBVElPTicsXG4gICdHVElEX09OTFknLFxuICAnSEFTSCcsXG4gICdISUdIX1BSSU9SSVRZJyxcbiAgJ0hJU1RPR1JBTScsXG4gICdISVNUT1JZJyxcbiAgJ0hPU1QnLFxuICAnSE9TVFMnLFxuICAnSE9VUl9NSUNST1NFQ09ORCcsXG4gICdIT1VSX01JTlVURScsXG4gICdIT1VSX1NFQ09ORCcsXG4gICdJREVOVElGSUVEJyxcbiAgJ0lHTk9SRScsXG4gICdJR05PUkVfU0VSVkVSX0lEUycsXG4gICdJTVBPUlQnLFxuICAnSU5BQ1RJVkUnLFxuICAnSU5ERVgnLFxuICAnSU5ERVhFUycsXG4gICdJTkZJTEUnLFxuICAnSU5JVElBTCcsXG4gICdJTklUSUFMX1NJWkUnLFxuICAnSU5JVElBVEUnLFxuICAnSU5ORVInLFxuICAnSU5PVVQnLFxuICAnSU5TRU5TSVRJVkUnLFxuICAnSU5TRVJUX01FVEhPRCcsXG4gICdJTlNUQUxMJyxcbiAgJ0lOU1RBTkNFJyxcbiAgJ0lOVCcsXG4gICdJTlQxJyxcbiAgJ0lOVDInLFxuICAnSU5UMycsXG4gICdJTlQ0JyxcbiAgJ0lOVDgnLFxuICAnSU5URUdFUicsXG4gICdJTlRPJyxcbiAgJ0lOVklTSUJMRScsXG4gICdJTlZPS0VSJyxcbiAgJ0lPJyxcbiAgJ0lPX0FGVEVSX0dUSURTJyxcbiAgJ0lPX0JFRk9SRV9HVElEUycsXG4gICdJT19USFJFQUQnLFxuICAnSVBDJyxcbiAgJ0lTT0xBVElPTicsXG4gICdJU1NVRVInLFxuICAnSVRFUkFURScsXG4gICdKU09OJyxcbiAgJ0tFWScsXG4gICdLRVlSSU5HJyxcbiAgJ0tFWVMnLFxuICAnS0VZX0JMT0NLX1NJWkUnLFxuICAnTEFOR1VBR0UnLFxuICAnTEFTVCcsXG4gICdMQVRFUkFMJyxcbiAgJ0xFQURJTkcnLFxuICAnTEVBVkUnLFxuICAnTEVBVkVTJyxcbiAgJ0xFU1MnLFxuICAnTEVWRUwnLFxuICAnTElORUFSJyxcbiAgJ0xJTkVTJyxcbiAgJ0xJTkVTVFJJTkcnLFxuICAnTElTVCcsXG4gICdMT0FEJyxcbiAgJ0xPQ0FMJyxcbiAgJ0xPQ0snLFxuICAnTE9DS0VEJyxcbiAgJ0xPQ0tTJyxcbiAgJ0xPR0ZJTEUnLFxuICAnTE9HUycsXG4gICdMT05HJyxcbiAgJ0xPTkdCTE9CJyxcbiAgJ0xPTkdURVhUJyxcbiAgJ0xPT1AnLFxuICAnTE9XX1BSSU9SSVRZJyxcbiAgJ01BU1RFUicsXG4gICdNQVNURVJfQVVUT19QT1NJVElPTicsXG4gICdNQVNURVJfQklORCcsXG4gICdNQVNURVJfQ09NUFJFU1NJT05fQUxHT1JJVEhNUycsXG4gICdNQVNURVJfQ09OTkVDVF9SRVRSWScsXG4gICdNQVNURVJfREVMQVknLFxuICAnTUFTVEVSX0hFQVJUQkVBVF9QRVJJT0QnLFxuICAnTUFTVEVSX0hPU1QnLFxuICAnTUFTVEVSX0xPR19GSUxFJyxcbiAgJ01BU1RFUl9MT0dfUE9TJyxcbiAgJ01BU1RFUl9QQVNTV09SRCcsXG4gICdNQVNURVJfUE9SVCcsXG4gICdNQVNURVJfUFVCTElDX0tFWV9QQVRIJyxcbiAgJ01BU1RFUl9SRVRSWV9DT1VOVCcsXG4gICdNQVNURVJfU0VSVkVSX0lEJyxcbiAgJ01BU1RFUl9TU0wnLFxuICAnTUFTVEVSX1NTTF9DQScsXG4gICdNQVNURVJfU1NMX0NBUEFUSCcsXG4gICdNQVNURVJfU1NMX0NFUlQnLFxuICAnTUFTVEVSX1NTTF9DSVBIRVInLFxuICAnTUFTVEVSX1NTTF9DUkwnLFxuICAnTUFTVEVSX1NTTF9DUkxQQVRIJyxcbiAgJ01BU1RFUl9TU0xfS0VZJyxcbiAgJ01BU1RFUl9TU0xfVkVSSUZZX1NFUlZFUl9DRVJUJyxcbiAgJ01BU1RFUl9UTFNfQ0lQSEVSU1VJVEVTJyxcbiAgJ01BU1RFUl9UTFNfVkVSU0lPTicsXG4gICdNQVNURVJfVVNFUicsXG4gICdNQVNURVJfWlNURF9DT01QUkVTU0lPTl9MRVZFTCcsXG4gICdNQVhWQUxVRScsXG4gICdNQVhfQ09OTkVDVElPTlNfUEVSX0hPVVInLFxuICAnTUFYX1FVRVJJRVNfUEVSX0hPVVInLFxuICAnTUFYX1JPV1MnLFxuICAnTUFYX1NJWkUnLFxuICAnTUFYX1VQREFURVNfUEVSX0hPVVInLFxuICAnTUFYX1VTRVJfQ09OTkVDVElPTlMnLFxuICAnTUVESVVNJyxcbiAgJ01FRElVTUJMT0InLFxuICAnTUVESVVNSU5UJyxcbiAgJ01FRElVTVRFWFQnLFxuICAnTUVNQkVSJyxcbiAgJ01FTU9SWScsXG4gICdNRVJHRScsXG4gICdNRVNTQUdFX1RFWFQnLFxuICAnTUlERExFSU5UJyxcbiAgJ01JR1JBVEUnLFxuICAnTUlOVVRFX01JQ1JPU0VDT05EJyxcbiAgJ01JTlVURV9TRUNPTkQnLFxuICAnTUlOX1JPV1MnLFxuICAnTU9ERScsXG4gICdNT0RJRklFUycsXG4gICdNT0RJRlknLFxuICAnTVVMVElMSU5FU1RSSU5HJyxcbiAgJ01VTFRJUE9JTlQnLFxuICAnTVVMVElQT0xZR09OJyxcbiAgJ01VVEVYJyxcbiAgJ01ZU1FMX0VSUk5PJyxcbiAgJ05BTUUnLFxuICAnTkFNRVMnLFxuICAnTkFUSU9OQUwnLFxuICAnTkFUVVJBTCcsXG4gICdOQ0hBUicsXG4gICdOREInLFxuICAnTkRCQ0xVU1RFUicsXG4gICdORVNURUQnLFxuICAnTkVUV09SS19OQU1FU1BBQ0UnLFxuICAnTkVWRVInLFxuICAnTkVXJyxcbiAgJ05FWFQnLFxuICAnTk8nLFxuICAnTk9ERUdST1VQJyxcbiAgJ05PTkUnLFxuICAnTk9XQUlUJyxcbiAgJ05PX1dBSVQnLFxuICAnTk9fV1JJVEVfVE9fQklOTE9HJyxcbiAgJ05VTEwnLFxuICAnTlVMTFMnLFxuICAnTlVNQkVSJyxcbiAgJ05VTUVSSUMnLFxuICAnTlZBUkNIQVInLFxuICAnT0YnLFxuICAnT0ZGJyxcbiAgJ09GRlNFVCcsXG4gICdPSicsXG4gICdPTEQnLFxuICAnT04gREVMRVRFJyxcbiAgJ09OIFVQREFURScsXG4gICdPTkUnLFxuICAnT05MWScsXG4gICdPUEVOJyxcbiAgJ09QVElNSVpFJyxcbiAgJ09QVElNSVpFUl9DT1NUUycsXG4gICdPUFRJT04nLFxuICAnT1BUSU9OQUwnLFxuICAnT1BUSU9OQUxMWScsXG4gICdPUFRJT05TJyxcbiAgJ09SREVSJyxcbiAgJ09SRElOQUxJVFknLFxuICAnT1JHQU5JWkFUSU9OJyxcbiAgJ09USEVSUycsXG4gICdPVVQnLFxuICAnT1VURVInLFxuICAnT1VURklMRScsXG4gICdPVkVSJyxcbiAgJ09XTkVSJyxcbiAgJ1BBQ0tfS0VZUycsXG4gICdQQUdFJyxcbiAgJ1BBUlNFUicsXG4gICdQQVJTRV9HQ09MX0VYUFInLFxuICAnUEFSVElBTCcsXG4gICdQQVJUSVRJT04nLFxuICAnUEFSVElUSU9OSU5HJyxcbiAgJ1BBUlRJVElPTlMnLFxuICAnUEFTU1dPUkQnLFxuICAnUEFTU1dPUkRfTE9DS19USU1FJyxcbiAgJ1BBVEgnLFxuICAnUEVSU0lTVCcsXG4gICdAQFBFUlNJU1QnLFxuICAnUEVSU0lTVF9PTkxZJyxcbiAgJ0BAUEVSU0lTVF9PTkxZJyxcbiAgJ1BIQVNFJyxcbiAgJ1BMVUdJTicsXG4gICdQTFVHSU5TJyxcbiAgJ1BMVUdJTl9ESVInLFxuICAnUE9JTlQnLFxuICAnUE9MWUdPTicsXG4gICdQT1JUJyxcbiAgJ1BSRUNFREVTJyxcbiAgJ1BSRUNFRElORycsXG4gICdQUkVDSVNJT04nLFxuICAnUFJFU0VSVkUnLFxuICAnUFJFVicsXG4gICdQUklNQVJZJyxcbiAgJ1BSSVZJTEVHRVMnLFxuICAnUFJJVklMRUdFX0NIRUNLU19VU0VSJyxcbiAgJ1BST0NFRFVSRScsXG4gICdQUk9DRVNTJyxcbiAgJ1BST0NFU1NMSVNUJyxcbiAgJ1BST0ZJTEUnLFxuICAnUFJPRklMRVMnLFxuICAnUFJPWFknLFxuICAnUFVSR0UnLFxuICAnUVVFUlknLFxuICAnUVVJQ0snLFxuICAnUkFORE9NJyxcbiAgJ1JBTkdFJyxcbiAgJ1JFQUQnLFxuICAnUkVBRFMnLFxuICAnUkVBRF9PTkxZJyxcbiAgJ1JFQURfV1JJVEUnLFxuICAnUkVBTCcsXG4gICdSRUJVSUxEJyxcbiAgJ1JFQ09WRVInLFxuICAnUkVDVVJTSVZFJyxcbiAgJ1JFRE9GSUxFJyxcbiAgJ1JFRE9fQlVGRkVSX1NJWkUnLFxuICAnUkVEVU5EQU5UJyxcbiAgJ1JFRkVSRU5DRScsXG4gICdSRUZFUkVOQ0VTJyxcbiAgJ1JFR0lTVFJBVElPTicsXG4gICdSRUxBWScsXG4gICdSRUxBWUxPRycsXG4gICdSRUxBWV9MT0dfRklMRScsXG4gICdSRUxBWV9MT0dfUE9TJyxcbiAgJ1JFTEFZX1RIUkVBRCcsXG4gICdSRUxFQVNFJyxcbiAgJ1JFTE9BRCcsXG4gICdSRU1PVEUnLFxuICAnUkVNT1ZFJyxcbiAgJ1JFTkFNRScsXG4gICdSRU9SR0FOSVpFJyxcbiAgJ1JFUEFJUicsXG4gICdSRVBFQVRBQkxFJyxcbiAgJ1JFUExJQ0EnLFxuICAnUkVQTElDQVMnLFxuICAnUkVQTElDQVRFX0RPX0RCJyxcbiAgJ1JFUExJQ0FURV9ET19UQUJMRScsXG4gICdSRVBMSUNBVEVfSUdOT1JFX0RCJyxcbiAgJ1JFUExJQ0FURV9JR05PUkVfVEFCTEUnLFxuICAnUkVQTElDQVRFX1JFV1JJVEVfREInLFxuICAnUkVQTElDQVRFX1dJTERfRE9fVEFCTEUnLFxuICAnUkVQTElDQVRFX1dJTERfSUdOT1JFX1RBQkxFJyxcbiAgJ1JFUExJQ0FUSU9OJyxcbiAgJ1JFUVVJUkUnLFxuICAnUkVRVUlSRV9ST1dfRk9STUFUJyxcbiAgJ1JFU0lHTkFMJyxcbiAgJ1JFU09VUkNFJyxcbiAgJ1JFU1BFQ1QnLFxuICAnUkVTVE9SRScsXG4gICdSRVNUUklDVCcsXG4gICdSRVNVTUUnLFxuICAnUkVUQUlOJyxcbiAgJ1JFVFVSTicsXG4gICdSRVRVUk5FRF9TUUxTVEFURScsXG4gICdSRVRVUk5JTkcnLFxuICAnUkVUVVJOUycsXG4gICdSRVVTRScsXG4gICdST0xFJyxcbiAgJ1JPTExVUCcsXG4gICdST1RBVEUnLFxuICAnUk9VVElORScsXG4gICdST1cnLFxuICAnUk9XUycsXG4gICdST1dfRk9STUFUJyxcbiAgJ1JUUkVFJyxcbiAgJ1NDSEVEVUxFJyxcbiAgJ1NDSEVNQVMnLFxuICAnU0NIRU1BX05BTUUnLFxuICAnU0VDT05EQVJZJyxcbiAgJ1NFQ09OREFSWV9FTkdJTkUnLFxuICAnU0VDT05EQVJZX0VOR0lORV9BVFRSSUJVVEUnLFxuICAnU0VDT05EQVJZX0xPQUQnLFxuICAnU0VDT05EQVJZX1VOTE9BRCcsXG4gICdTRUNPTkRfTUlDUk9TRUNPTkQnLFxuICAnU0VDVVJJVFknLFxuICAnU0VOU0lUSVZFJyxcbiAgJ1NFUEFSQVRPUicsXG4gICdTRVJJQUwnLFxuICAnU0VSSUFMSVpBQkxFJyxcbiAgJ1NFUlZFUicsXG4gICdTRVNTSU9OJyxcbiAgJ0BAU0VTU0lPTicsXG4gICdTSEFSRScsXG4gICdTSUdOQUwnLFxuICAnU0lHTkVEJyxcbiAgJ1NJTVBMRScsXG4gICdTS0lQJyxcbiAgJ1NMQVZFJyxcbiAgJ1NMT1cnLFxuICAnU01BTExJTlQnLFxuICAnU05BUFNIT1QnLFxuICAnU09DS0VUJyxcbiAgJ1NPTUUnLFxuICAnU09OQU1FJyxcbiAgJ1NPVU5EUycsXG4gICdTT1VSQ0UnLFxuICAnU09VUkNFX0FVVE9fUE9TSVRJT04nLFxuICAnU09VUkNFX0JJTkQnLFxuICAnU09VUkNFX0NPTVBSRVNTSU9OX0FMR09SSVRITVMnLFxuICAnU09VUkNFX0NPTk5FQ1RfUkVUUlknLFxuICAnU09VUkNFX0RFTEFZJyxcbiAgJ1NPVVJDRV9IRUFSVEJFQVRfUEVSSU9EJyxcbiAgJ1NPVVJDRV9IT1NUJyxcbiAgJ1NPVVJDRV9MT0dfRklMRScsXG4gICdTT1VSQ0VfTE9HX1BPUycsXG4gICdTT1VSQ0VfUEFTU1dPUkQnLFxuICAnU09VUkNFX1BPUlQnLFxuICAnU09VUkNFX1BVQkxJQ19LRVlfUEFUSCcsXG4gICdTT1VSQ0VfUkVUUllfQ09VTlQnLFxuICAnU09VUkNFX1NTTCcsXG4gICdTT1VSQ0VfU1NMX0NBJyxcbiAgJ1NPVVJDRV9TU0xfQ0FQQVRIJyxcbiAgJ1NPVVJDRV9TU0xfQ0VSVCcsXG4gICdTT1VSQ0VfU1NMX0NJUEhFUicsXG4gICdTT1VSQ0VfU1NMX0NSTCcsXG4gICdTT1VSQ0VfU1NMX0NSTFBBVEgnLFxuICAnU09VUkNFX1NTTF9LRVknLFxuICAnU09VUkNFX1NTTF9WRVJJRllfU0VSVkVSX0NFUlQnLFxuICAnU09VUkNFX1RMU19DSVBIRVJTVUlURVMnLFxuICAnU09VUkNFX1RMU19WRVJTSU9OJyxcbiAgJ1NPVVJDRV9VU0VSJyxcbiAgJ1NPVVJDRV9aU1REX0NPTVBSRVNTSU9OX0xFVkVMJyxcbiAgJ1NQQVRJQUwnLFxuICAnU1BFQ0lGSUMnLFxuICAnU1FMJyxcbiAgJ1NRTEVYQ0VQVElPTicsXG4gICdTUUxTVEFURScsXG4gICdTUUxXQVJOSU5HJyxcbiAgJ1NRTF9BRlRFUl9HVElEUycsXG4gICdTUUxfQUZURVJfTVRTX0dBUFMnLFxuICAnU1FMX0JFRk9SRV9HVElEUycsXG4gICdTUUxfQklHX1JFU1VMVCcsXG4gICdTUUxfQlVGRkVSX1JFU1VMVCcsXG4gICdTUUxfQ0FDSEUnLFxuICAnU1FMX0NBTENfRk9VTkRfUk9XUycsXG4gICdTUUxfTk9fQ0FDSEUnLFxuICAnU1FMX1NNQUxMX1JFU1VMVCcsXG4gICdTUUxfVEhSRUFEJyxcbiAgJ1NRTF9UU0lfREFZJyxcbiAgJ1NRTF9UU0lfSE9VUicsXG4gICdTUUxfVFNJX01JTlVURScsXG4gICdTUUxfVFNJX01PTlRIJyxcbiAgJ1NRTF9UU0lfUVVBUlRFUicsXG4gICdTUUxfVFNJX1NFQ09ORCcsXG4gICdTUUxfVFNJX1dFRUsnLFxuICAnU1FMX1RTSV9ZRUFSJyxcbiAgJ1NSSUQnLFxuICAnU1NMJyxcbiAgJ1NUQUNLRUQnLFxuICAnU1RBUlQnLFxuICAnU1RBUlRJTkcnLFxuICAnU1RBUlRTJyxcbiAgJ1NUQVRTX0FVVE9fUkVDQUxDJyxcbiAgJ1NUQVRTX1BFUlNJU1RFTlQnLFxuICAnU1RBVFNfU0FNUExFX1BBR0VTJyxcbiAgJ1NUQVRVUycsXG4gICdTVE9QJyxcbiAgJ1NUT1JBR0UnLFxuICAnU1RPUkVEJyxcbiAgJ1NUUkVBTScsXG4gICdTVFJJTkcnLFxuICAnU1VCQ0xBU1NfT1JJR0lOJyxcbiAgJ1NVQkpFQ1QnLFxuICAnU1VCUEFSVElUSU9OJyxcbiAgJ1NVQlBBUlRJVElPTlMnLFxuICAnU1VQRVInLFxuICAnU1VTUEVORCcsXG4gICdTV0FQUycsXG4gICdTV0lUQ0hFUycsXG4gICdTWVNURU0nLFxuICAnVEFCTEVTJyxcbiAgJ1RBQkxFU1BBQ0UnLFxuICAnVEFCTEVfQ0hFQ0tTVU0nLFxuICAnVEFCTEVfTkFNRScsXG4gICdURU1QT1JBUlknLFxuICAnVEVNUFRBQkxFJyxcbiAgJ1RFUk1JTkFURUQnLFxuICAnVEVYVCcsXG4gICdUSEFOJyxcbiAgJ1RIRU4nLFxuICAnVEhSRUFEX1BSSU9SSVRZJyxcbiAgJ1RJRVMnLFxuICAnVElOWUJMT0InLFxuICAnVElOWUlOVCcsXG4gICdUSU5ZVEVYVCcsXG4gICdUTFMnLFxuICAnVE8nLFxuICAnVFJBSUxJTkcnLFxuICAnVFJBTlNBQ1RJT04nLFxuICAnVFJJR0dFUicsXG4gICdUUklHR0VSUycsXG4gICdUUlVFJyxcbiAgJ1RZUEUnLFxuICAnVFlQRVMnLFxuICAnVU5CT1VOREVEJyxcbiAgJ1VOQ09NTUlUVEVEJyxcbiAgJ1VOREVGSU5FRCcsXG4gICdVTkRPJyxcbiAgJ1VORE9GSUxFJyxcbiAgJ1VORE9fQlVGRkVSX1NJWkUnLFxuICAnVU5JQ09ERScsXG4gICdVTklOU1RBTEwnLFxuICAnVU5JUVVFJyxcbiAgJ1VOS05PV04nLFxuICAnVU5MT0NLJyxcbiAgJ1VOUkVHSVNURVInLFxuICAnVU5TSUdORUQnLFxuICAnVU5USUwnLFxuICAnVVBHUkFERScsXG4gICdVU0FHRScsXG4gICdVU0VSX1JFU09VUkNFUycsXG4gICdVU0VfRlJNJyxcbiAgJ1ZBTElEQVRJT04nLFxuICAnVkFMVUUnLFxuICAnVkFSQklOQVJZJyxcbiAgJ1ZBUkNIQVInLFxuICAnVkFSQ0hBUkFDVEVSJyxcbiAgJ1ZBUklBQkxFUycsXG4gICdWQVJZSU5HJyxcbiAgJ1ZDUFUnLFxuICAnVklFVycsXG4gICdWSVJUVUFMJyxcbiAgJ1ZJU0lCTEUnLFxuICAnV0FJVCcsXG4gICdXQVJOSU5HUycsXG4gICdXSElMRScsXG4gICdXSU5ET1cnLFxuICAnV0lUSE9VVCcsXG4gICdXT1JLJyxcbiAgJ1dSQVBQRVInLFxuICAnV1JJVEUnLFxuICAnWDUwOScsXG4gICdYSUQnLFxuICAnWE1MJyxcbiAgJ1lFQVJfTU9OVEgnLFxuICAnWkVST0ZJTEwnLFxuICAnWk9ORScsXG5dO1xuXG4vKipcbiAqIFByaW9yaXR5IDEgKGZpcnN0KVxuICoga2V5d29yZHMgdGhhdCBiZWdpbiBhIG5ldyBzdGF0ZW1lbnRcbiAqIHdpbGwgYmVnaW4gbmV3IGluZGVudGVkIGJsb2NrXG4gKi9cbi8vIGh0dHBzOi8vZGV2Lm15c3FsLmNvbS9kb2MvcmVmbWFuLzguMC9lbi9zcWwtc3RhdGVtZW50cy5odG1sXG5jb25zdCByZXNlcnZlZENvbW1hbmRzID0gW1xuICAnQUxURVIgREFUQUJBU0UnLFxuICAnQUxURVIgRVZFTlQnLFxuICAnQUxURVIgRlVOQ1RJT04nLFxuICAnQUxURVIgSU5TVEFOQ0UnLFxuICAnQUxURVIgTE9HRklMRSBHUk9VUCcsXG4gICdBTFRFUiBQUk9DRURVUkUnLFxuICAnQUxURVIgUkVTT1VSQ0UgR1JPVVAnLFxuICAnQUxURVIgU0VSVkVSJyxcbiAgJ0FMVEVSIFRBQkxFJyxcbiAgJ0FMVEVSIFRBQkxFU1BBQ0UnLFxuICAnQUxURVIgVVNFUicsXG4gICdBTFRFUiBWSUVXJyxcbiAgJ0FOQUxZWkUgVEFCTEUnLFxuICAnQklOTE9HJyxcbiAgJ0NBQ0hFIElOREVYJyxcbiAgJ0NBTEwnLFxuICAnQ0hBTkdFIE1BU1RFUiBUTycsXG4gICdDSEFOR0UgUkVQTElDQVRJT04gRklMVEVSJyxcbiAgJ0NIQU5HRSBSRVBMSUNBVElPTiBTT1VSQ0UgVE8nLFxuICAnQ0hFQ0sgVEFCTEUnLFxuICAnQ0hFQ0tTVU0gVEFCTEUnLFxuICAnQ0xPTkUnLFxuICAnQ09NTUlUJyxcbiAgJ0NSRUFURSBEQVRBQkFTRScsXG4gICdDUkVBVEUgRVZFTlQnLFxuICAnQ1JFQVRFIEZVTkNUSU9OJyxcbiAgJ0NSRUFURSBGVU5DVElPTicsXG4gICdDUkVBVEUgSU5ERVgnLFxuICAnQ1JFQVRFIExPR0ZJTEUgR1JPVVAnLFxuICAnQ1JFQVRFIFBST0NFRFVSRScsXG4gICdDUkVBVEUgUkVTT1VSQ0UgR1JPVVAnLFxuICAnQ1JFQVRFIFJPTEUnLFxuICAnQ1JFQVRFIFNFUlZFUicsXG4gICdDUkVBVEUgU1BBVElBTCBSRUZFUkVOQ0UgU1lTVEVNJyxcbiAgJ0NSRUFURSBUQUJMRScsXG4gICdDUkVBVEUgVEFCTEVTUEFDRScsXG4gICdDUkVBVEUgVFJJR0dFUicsXG4gICdDUkVBVEUgVVNFUicsXG4gICdDUkVBVEUgVklFVycsXG4gICdERUFMTE9DQVRFIFBSRVBBUkUnLFxuICAnREVMRVRFJyxcbiAgJ0RFU0NSSUJFJyxcbiAgJ0RPJyxcbiAgJ0RST1AgREFUQUJBU0UnLFxuICAnRFJPUCBFVkVOVCcsXG4gICdEUk9QIEZVTkNUSU9OJyxcbiAgJ0RST1AgRlVOQ1RJT04nLFxuICAnRFJPUCBJTkRFWCcsXG4gICdEUk9QIExPR0ZJTEUgR1JPVVAnLFxuICAnRFJPUCBQUk9DRURVUkUnLFxuICAnRFJPUCBSRVNPVVJDRSBHUk9VUCcsXG4gICdEUk9QIFJPTEUnLFxuICAnRFJPUCBTRVJWRVInLFxuICAnRFJPUCBTUEFUSUFMIFJFRkVSRU5DRSBTWVNURU0nLFxuICAnRFJPUCBUQUJMRScsXG4gICdEUk9QIFRBQkxFU1BBQ0UnLFxuICAnRFJPUCBUUklHR0VSJyxcbiAgJ0RST1AgVVNFUicsXG4gICdEUk9QIFZJRVcnLFxuICAnRVhFQ1VURScsXG4gICdFWFBMQUlOJyxcbiAgJ0ZMVVNIJyxcbiAgJ0dSQU5UJyxcbiAgJ0hBTkRMRVInLFxuICAnSEVMUCcsXG4gICdJTVBPUlQgVEFCTEUnLFxuICAnSU5TRVJUJyxcbiAgJ0lOU1RBTEwgQ09NUE9ORU5UJyxcbiAgJ0lOU1RBTEwgUExVR0lOJyxcbiAgJ0tJTEwnLFxuICAnTE9BRCBEQVRBJyxcbiAgJ0xPQUQgSU5ERVggSU5UTyBDQUNIRScsXG4gICdMT0FEIFhNTCcsXG4gICdMT0NLIElOU1RBTkNFIEZPUiBCQUNLVVAnLFxuICAnTE9DSyBUQUJMRVMnLFxuICAnTUFTVEVSX1BPU19XQUlUJyxcbiAgJ09QVElNSVpFIFRBQkxFJyxcbiAgJ1BSRVBBUkUnLFxuICAnUFVSR0UgQklOQVJZIExPR1MnLFxuICAnUkVMRUFTRSBTQVZFUE9JTlQnLFxuICAnUkVOQU1FIFRBQkxFJyxcbiAgJ1JFTkFNRSBVU0VSJyxcbiAgJ1JFUEFJUiBUQUJMRScsXG4gICdSRVBMQUNFJyxcbiAgJ1JFU0VUJyxcbiAgJ1JFU0VUIE1BU1RFUicsXG4gICdSRVNFVCBQRVJTSVNUJyxcbiAgJ1JFU0VUIFJFUExJQ0EnLFxuICAnUkVTRVQgU0xBVkUnLFxuICAnUkVTVEFSVCcsXG4gICdSRVZPS0UnLFxuICAnUk9MTEJBQ0snLFxuICAnUk9MTEJBQ0sgVE8gU0FWRVBPSU5UJyxcbiAgJ1NBVkVQT0lOVCcsXG4gICdTRUxFQ1QnLFxuICAnU0VUJyxcbiAgJ1NFVCBDSEFSQUNURVIgU0VUJyxcbiAgJ1NFVCBERUZBVUxUIFJPTEUnLFxuICAnU0VUIE5BTUVTJyxcbiAgJ1NFVCBQQVNTV09SRCcsXG4gICdTRVQgUkVTT1VSQ0UgR1JPVVAnLFxuICAnU0VUIFJPTEUnLFxuICAnU0VUIFRSQU5TQUNUSU9OJyxcbiAgJ1NIT1cnLFxuICAnU0hPVyBCSU5BUlkgTE9HUycsXG4gICdTSE9XIEJJTkxPRyBFVkVOVFMnLFxuICAnU0hPVyBDSEFSQUNURVIgU0VUJyxcbiAgJ1NIT1cgQ09MTEFUSU9OJyxcbiAgJ1NIT1cgQ09MVU1OUycsXG4gICdTSE9XIENSRUFURSBEQVRBQkFTRScsXG4gICdTSE9XIENSRUFURSBFVkVOVCcsXG4gICdTSE9XIENSRUFURSBGVU5DVElPTicsXG4gICdTSE9XIENSRUFURSBQUk9DRURVUkUnLFxuICAnU0hPVyBDUkVBVEUgVEFCTEUnLFxuICAnU0hPVyBDUkVBVEUgVFJJR0dFUicsXG4gICdTSE9XIENSRUFURSBVU0VSJyxcbiAgJ1NIT1cgQ1JFQVRFIFZJRVcnLFxuICAnU0hPVyBEQVRBQkFTRVMnLFxuICAnU0hPVyBFTkdJTkUnLFxuICAnU0hPVyBFTkdJTkVTJyxcbiAgJ1NIT1cgRVJST1JTJyxcbiAgJ1NIT1cgRVZFTlRTJyxcbiAgJ1NIT1cgRlVOQ1RJT04gQ09ERScsXG4gICdTSE9XIEZVTkNUSU9OIFNUQVRVUycsXG4gICdTSE9XIEdSQU5UUycsXG4gICdTSE9XIElOREVYJyxcbiAgJ1NIT1cgTUFTVEVSIFNUQVRVUycsXG4gICdTSE9XIE9QRU4gVEFCTEVTJyxcbiAgJ1NIT1cgUExVR0lOUycsXG4gICdTSE9XIFBSSVZJTEVHRVMnLFxuICAnU0hPVyBQUk9DRURVUkUgQ09ERScsXG4gICdTSE9XIFBST0NFRFVSRSBTVEFUVVMnLFxuICAnU0hPVyBQUk9DRVNTTElTVCcsXG4gICdTSE9XIFBST0ZJTEUnLFxuICAnU0hPVyBQUk9GSUxFUycsXG4gICdTSE9XIFJFTEFZTE9HIEVWRU5UUycsXG4gICdTSE9XIFJFUExJQ0EgU1RBVFVTJyxcbiAgJ1NIT1cgUkVQTElDQVMnLFxuICAnU0hPVyBTTEFWRScsXG4gICdTSE9XIFNMQVZFIEhPU1RTJyxcbiAgJ1NIT1cgU1RBVFVTJyxcbiAgJ1NIT1cgVEFCTEUgU1RBVFVTJyxcbiAgJ1NIT1cgVEFCTEVTJyxcbiAgJ1NIT1cgVFJJR0dFUlMnLFxuICAnU0hPVyBWQVJJQUJMRVMnLFxuICAnU0hPVyBXQVJOSU5HUycsXG4gICdTSFVURE9XTicsXG4gICdTT1VSQ0VfUE9TX1dBSVQnLFxuICAnU1RBUlQgR1JPVVBfUkVQTElDQVRJT04nLFxuICAnU1RBUlQgUkVQTElDQScsXG4gICdTVEFSVCBTTEFWRScsXG4gICdTVEFSVCBUUkFOU0FDVElPTicsXG4gICdTVE9QIEdST1VQX1JFUExJQ0FUSU9OJyxcbiAgJ1NUT1AgUkVQTElDQScsXG4gICdTVE9QIFNMQVZFJyxcbiAgJ1RBQkxFJyxcbiAgJ1RSVU5DQVRFIFRBQkxFJyxcbiAgJ1VOSU5TVEFMTCBDT01QT05FTlQnLFxuICAnVU5JTlNUQUxMIFBMVUdJTicsXG4gICdVTkxPQ0sgSU5TVEFOQ0UnLFxuICAnVU5MT0NLIFRBQkxFUycsXG4gICdVUERBVEUnLFxuICAnVVNFJyxcbiAgJ1ZBTFVFUycsXG4gICdXSVRIJyxcbiAgJ1hBJyxcbiAgLy8gZmxvdyBjb250cm9sXG4gIC8vICdJRicsXG4gICdJVEVSQVRFJyxcbiAgJ0xFQVZFJyxcbiAgJ0xPT1AnLFxuICAnUkVQRUFUJyxcbiAgJ1JFVFVSTicsXG4gICdXSElMRScsXG4gIC8vIG90aGVyXG4gICdBREQnLFxuICAnQUxURVIgQ09MVU1OJyxcbiAgJ0ZST00nLFxuICAnR1JPVVAgQlknLFxuICAnSEFWSU5HJyxcbiAgJ0lOU0VSVCBJTlRPJyxcbiAgJ0xJTUlUJyxcbiAgJ09GRlNFVCcsXG4gICdPUkRFUiBCWScsXG4gICdXSEVSRScsXG5dO1xuXG4vKipcbiAqIFByaW9yaXR5IDJcbiAqIGNvbW1hbmRzIHRoYXQgb3BlcmF0ZSBvbiB0d28gdGFibGVzIG9yIHN1YnF1ZXJpZXNcbiAqIHR3byBtYWluIGNhdGVnb3JpZXM6IGpvaW5zIGFuZCBib29sZWFuIHNldCBvcGVyYXRvcnNcbiAqL1xuY29uc3QgcmVzZXJ2ZWRCaW5hcnlDb21tYW5kcyA9IFtcbiAgLy8gc2V0IGJvb2xlYW5zXG4gICdJTlRFUlNFQ1QnLFxuICAnSU5URVJTRUNUIEFMTCcsXG4gICdJTlRFUlNFQ1QgRElTVElOQ1QnLFxuICAnVU5JT04nLFxuICAnVU5JT04gQUxMJyxcbiAgJ1VOSU9OIERJU1RJTkNUJyxcbiAgJ0VYQ0VQVCcsXG4gICdFWENFUFQgQUxMJyxcbiAgJ0VYQ0VQVCBESVNUSU5DVCcsXG4gIC8vIGpvaW5zXG4gICdKT0lOJyxcbiAgJ0lOTkVSIEpPSU4nLFxuICAnTEVGVCBKT0lOJyxcbiAgJ0xFRlQgT1VURVIgSk9JTicsXG4gICdSSUdIVCBKT0lOJyxcbiAgJ1JJR0hUIE9VVEVSIEpPSU4nLFxuICAnQ1JPU1MgSk9JTicsXG4gICdOQVRVUkFMIEpPSU4nLFxuICAvLyBub24tc3RhbmRhcmQgam9pbnNcbiAgJ1NUUkFJR0hUX0pPSU4nLFxuICAnTkFUVVJBTCBMRUZUIEpPSU4nLFxuICAnTkFUVVJBTCBMRUZUIE9VVEVSIEpPSU4nLFxuICAnTkFUVVJBTCBSSUdIVCBKT0lOJyxcbiAgJ05BVFVSQUwgUklHSFQgT1VURVIgSk9JTicsXG5dO1xuXG4vKipcbiAqIFByaW9yaXR5IDNcbiAqIGtleXdvcmRzIHRoYXQgZm9sbG93IGEgcHJldmlvdXMgU3RhdGVtZW50LCBtdXN0IGJlIGF0dGFjaGVkIHRvIHN1YnNlcXVlbnQgZGF0YVxuICogY2FuIGJlIGZ1bGx5IGlubGluZSBvciBvbiBuZXdsaW5lIHdpdGggb3B0aW9uYWwgaW5kZW50XG4gKi9cbmNvbnN0IHJlc2VydmVkRGVwZW5kZW50Q2xhdXNlcyA9IFsnV0hFTicsICdFTFNFJywgJ0VMU0VJRiddO1xuXG4vLyBodHRwczovL2Rldi5teXNxbC5jb20vZG9jL3JlZm1hbi84LjAvZW4vXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNeVNxbEZvcm1hdHRlciBleHRlbmRzIEZvcm1hdHRlciB7XG4gIHN0YXRpYyByZXNlcnZlZENvbW1hbmRzID0gcmVzZXJ2ZWRDb21tYW5kcztcbiAgc3RhdGljIHJlc2VydmVkQmluYXJ5Q29tbWFuZHMgPSByZXNlcnZlZEJpbmFyeUNvbW1hbmRzO1xuICBzdGF0aWMgcmVzZXJ2ZWREZXBlbmRlbnRDbGF1c2VzID0gcmVzZXJ2ZWREZXBlbmRlbnRDbGF1c2VzO1xuICBzdGF0aWMgcmVzZXJ2ZWRKb2luQ29uZGl0aW9ucyA9IFsnT04nLCAnVVNJTkcnXTtcbiAgc3RhdGljIHJlc2VydmVkTG9naWNhbE9wZXJhdG9ycyA9IFsnQU5EJywgJ09SJywgJ1hPUiddO1xuICBzdGF0aWMgcmVzZXJ2ZWRLZXl3b3JkcyA9IGRlZHVwZShbLi4ucmVzZXJ2ZWRLZXl3b3JkcywgLi4ucmVzZXJ2ZWRGdW5jdGlvbnNdKTtcbiAgc3RhdGljIHN0cmluZ1R5cGVzOiBTdHJpbmdQYXR0ZXJuVHlwZVtdID0gWydgYCcsIFwiJydcIiwgJ1wiXCInXTtcbiAgc3RhdGljIGJsb2NrU3RhcnQgPSBbJygnLCAnQ0FTRSddO1xuICBzdGF0aWMgYmxvY2tFbmQgPSBbJyknLCAnRU5EJ107XG4gIHN0YXRpYyBpbmRleGVkUGxhY2Vob2xkZXJUeXBlcyA9IFsnPyddO1xuICBzdGF0aWMgbmFtZWRQbGFjZWhvbGRlclR5cGVzID0gW107XG4gIHN0YXRpYyBsaW5lQ29tbWVudFR5cGVzID0gWyctLScsICcjJ107XG4gIHN0YXRpYyBzcGVjaWFsV29yZENoYXJzID0geyBwcmVmaXg6ICdAOicgfTtcbiAgc3RhdGljIG9wZXJhdG9ycyA9IFsnOj0nLCAnPDwnLCAnPj4nLCAnPD0+JywgJyYmJywgJ3x8JywgJy0+JywgJy0+PiddO1xuXG4gIHRva2VuaXplcigpIHtcbiAgICByZXR1cm4gbmV3IFRva2VuaXplcih7XG4gICAgICByZXNlcnZlZENvbW1hbmRzOiBNeVNxbEZvcm1hdHRlci5yZXNlcnZlZENvbW1hbmRzLFxuICAgICAgcmVzZXJ2ZWRCaW5hcnlDb21tYW5kczogTXlTcWxGb3JtYXR0ZXIucmVzZXJ2ZWRCaW5hcnlDb21tYW5kcyxcbiAgICAgIHJlc2VydmVkRGVwZW5kZW50Q2xhdXNlczogTXlTcWxGb3JtYXR0ZXIucmVzZXJ2ZWREZXBlbmRlbnRDbGF1c2VzLFxuICAgICAgcmVzZXJ2ZWRKb2luQ29uZGl0aW9uczogTXlTcWxGb3JtYXR0ZXIucmVzZXJ2ZWRKb2luQ29uZGl0aW9ucyxcbiAgICAgIHJlc2VydmVkTG9naWNhbE9wZXJhdG9yczogTXlTcWxGb3JtYXR0ZXIucmVzZXJ2ZWRMb2dpY2FsT3BlcmF0b3JzLFxuICAgICAgcmVzZXJ2ZWRLZXl3b3JkczogTXlTcWxGb3JtYXR0ZXIucmVzZXJ2ZWRLZXl3b3JkcyxcbiAgICAgIHN0cmluZ1R5cGVzOiBNeVNxbEZvcm1hdHRlci5zdHJpbmdUeXBlcyxcbiAgICAgIGJsb2NrU3RhcnQ6IE15U3FsRm9ybWF0dGVyLmJsb2NrU3RhcnQsXG4gICAgICBibG9ja0VuZDogTXlTcWxGb3JtYXR0ZXIuYmxvY2tFbmQsXG4gICAgICBpbmRleGVkUGxhY2Vob2xkZXJUeXBlczogTXlTcWxGb3JtYXR0ZXIuaW5kZXhlZFBsYWNlaG9sZGVyVHlwZXMsXG4gICAgICBuYW1lZFBsYWNlaG9sZGVyVHlwZXM6IE15U3FsRm9ybWF0dGVyLm5hbWVkUGxhY2Vob2xkZXJUeXBlcyxcbiAgICAgIGxpbmVDb21tZW50VHlwZXM6IE15U3FsRm9ybWF0dGVyLmxpbmVDb21tZW50VHlwZXMsXG4gICAgICBzcGVjaWFsV29yZENoYXJzOiBNeVNxbEZvcm1hdHRlci5zcGVjaWFsV29yZENoYXJzLFxuICAgICAgb3BlcmF0b3JzOiBNeVNxbEZvcm1hdHRlci5vcGVyYXRvcnMsXG4gICAgfSk7XG4gIH1cblxuICB0b2tlbk92ZXJyaWRlKHRva2VuOiBUb2tlbikge1xuICAgIC8vIFtTRVRdICggLi4uXG4gICAgaWYgKGlzVG9rZW4uU0VUKHRva2VuKSAmJiB0aGlzLnRva2VuTG9va0FoZWFkKCkudmFsdWUgPT09ICcoJykge1xuICAgICAgLy8gVGhpcyBpcyBTRVQgZGF0YXR5cGUsIG5vdCBTRVQgc3RhdGVtZW50XG4gICAgICByZXR1cm4geyB0eXBlOiBUb2tlblR5cGUuUkVTRVJWRURfS0VZV09SRCwgdmFsdWU6IHRva2VuLnZhbHVlIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG59XG4iLCJpbXBvcnQgRm9ybWF0dGVyIGZyb20gJy4uL2NvcmUvRm9ybWF0dGVyJztcbmltcG9ydCBUb2tlbml6ZXIgZnJvbSAnLi4vY29yZS9Ub2tlbml6ZXInO1xuaW1wb3J0IHR5cGUgeyBTdHJpbmdQYXR0ZXJuVHlwZSB9IGZyb20gJy4uL2NvcmUvcmVnZXhGYWN0b3J5JztcbmltcG9ydCB7IGRlZHVwZSB9IGZyb20gJy4uL3V0aWxzJztcblxuLy8gVE9ETzogc3BsaXQgdGhpcyBpbnRvIG9iamVjdCB3aXRoIGZ1bmN0aW9uIGNhdGVnb3JpZXNcbi8qKlxuICogUHJpb3JpdHkgNSAobGFzdClcbiAqIEZ1bGwgbGlzdCBvZiByZXNlcnZlZCBmdW5jdGlvbnNcbiAqIGRpc3RpbmN0IGZyb20gS2V5d29yZHMgZHVlIHRvIGludGVyYWN0aW9uIHdpdGggcGFyZW50aGVzZXNcbiAqL1xuLy8gaHR0cHM6Ly9kb2NzLmNvdWNoYmFzZS5jb20vc2VydmVyL2N1cnJlbnQvbjFxbC9uMXFsLWxhbmd1YWdlLXJlZmVyZW5jZS9mdW5jdGlvbnMuaHRtbFxuY29uc3QgcmVzZXJ2ZWRGdW5jdGlvbnMgPSBbXG4gICdBQk9SVCcsXG4gICdBQlMnLFxuICAnQUNPUycsXG4gICdBRFZJU09SJyxcbiAgJ0FSUkFZX0FHRycsXG4gICdBUlJBWV9BR0cnLFxuICAnQVJSQVlfQVBQRU5EJyxcbiAgJ0FSUkFZX0FWRycsXG4gICdBUlJBWV9CSU5BUllfU0VBUkNIJyxcbiAgJ0FSUkFZX0NPTkNBVCcsXG4gICdBUlJBWV9DT05UQUlOUycsXG4gICdBUlJBWV9DT1VOVCcsXG4gICdBUlJBWV9ESVNUSU5DVCcsXG4gICdBUlJBWV9FWENFUFQnLFxuICAnQVJSQVlfRkxBVFRFTicsXG4gICdBUlJBWV9JRk5VTEwnLFxuICAnQVJSQVlfSU5TRVJUJyxcbiAgJ0FSUkFZX0lOVEVSU0VDVCcsXG4gICdBUlJBWV9MRU5HVEgnLFxuICAnQVJSQVlfTUFYJyxcbiAgJ0FSUkFZX01JTicsXG4gICdBUlJBWV9NT1ZFJyxcbiAgJ0FSUkFZX1BPU0lUSU9OJyxcbiAgJ0FSUkFZX1BSRVBFTkQnLFxuICAnQVJSQVlfUFVUJyxcbiAgJ0FSUkFZX1JBTkdFJyxcbiAgJ0FSUkFZX1JFTU9WRScsXG4gICdBUlJBWV9SRVBFQVQnLFxuICAnQVJSQVlfUkVQTEFDRScsXG4gICdBUlJBWV9SRVZFUlNFJyxcbiAgJ0FSUkFZX1NPUlQnLFxuICAnQVJSQVlfU1RBUicsXG4gICdBUlJBWV9TVU0nLFxuICAnQVJSQVlfU1lNRElGRicsXG4gICdBUlJBWV9TWU1ESUZGMScsXG4gICdBUlJBWV9TWU1ESUZGTicsXG4gICdBUlJBWV9VTklPTicsXG4gICdBU0lOJyxcbiAgJ0FUQU4nLFxuICAnQVRBTjInLFxuICAnQVZHJyxcbiAgJ0JBU0U2NCcsXG4gICdCQVNFNjRfREVDT0RFJyxcbiAgJ0JBU0U2NF9FTkNPREUnLFxuICAnQklUQU5EICcsXG4gICdCSVRDTEVBUiAnLFxuICAnQklUTk9UICcsXG4gICdCSVRPUiAnLFxuICAnQklUU0VUICcsXG4gICdCSVRTSElGVCAnLFxuICAnQklUVEVTVCAnLFxuICAnQklUWE9SICcsXG4gICdDRUlMJyxcbiAgJ0NMT0NLX0xPQ0FMJyxcbiAgJ0NMT0NLX01JTExJUycsXG4gICdDTE9DS19TVFInLFxuICAnQ0xPQ0tfVFonLFxuICAnQ0xPQ0tfVVRDJyxcbiAgJ0NPQUxFU0NFJyxcbiAgJ0NPTkNBVCcsXG4gICdDT05DQVQyJyxcbiAgJ0NPTlRBSU5TJyxcbiAgJ0NPTlRBSU5TX1RPS0VOJyxcbiAgJ0NPTlRBSU5TX1RPS0VOX0xJS0UnLFxuICAnQ09OVEFJTlNfVE9LRU5fUkVHRVhQJyxcbiAgJ0NPUycsXG4gICdDT1VOVCcsXG4gICdDT1VOVCcsXG4gICdDT1VOVE4nLFxuICAnQ1VNRV9ESVNUJyxcbiAgJ0NVUkwnLFxuICAnREFURV9BRERfTUlMTElTJyxcbiAgJ0RBVEVfQUREX1NUUicsXG4gICdEQVRFX0RJRkZfTUlMTElTJyxcbiAgJ0RBVEVfRElGRl9TVFInLFxuICAnREFURV9GT1JNQVRfU1RSJyxcbiAgJ0RBVEVfUEFSVF9NSUxMSVMnLFxuICAnREFURV9QQVJUX1NUUicsXG4gICdEQVRFX1JBTkdFX01JTExJUycsXG4gICdEQVRFX1JBTkdFX1NUUicsXG4gICdEQVRFX1RSVU5DX01JTExJUycsXG4gICdEQVRFX1RSVU5DX1NUUicsXG4gICdERUNPREUnLFxuICAnREVDT0RFX0pTT04nLFxuICAnREVHUkVFUycsXG4gICdERU5TRV9SQU5LJyxcbiAgJ0RVUkFUSU9OX1RPX1NUUicsXG4gIC8vICdFJyxcbiAgJ0VOQ09ERURfU0laRScsXG4gICdFTkNPREVfSlNPTicsXG4gICdFWFAnLFxuICAnRklSU1RfVkFMVUUnLFxuICAnRkxPT1InLFxuICAnR1JFQVRFU1QnLFxuICAnSEFTX1RPS0VOJyxcbiAgJ0lGSU5GJyxcbiAgJ0lGTUlTU0lORycsXG4gICdJRk1JU1NJTkdPUk5VTEwnLFxuICAnSUZOQU4nLFxuICAnSUZOQU5PUklORicsXG4gICdJRk5VTEwnLFxuICAnSU5JVENBUCcsXG4gICdJU0FSUkFZJyxcbiAgJ0lTQVRPTScsXG4gICdJU0JJVFNFVCcsXG4gICdJU0JPT0xFQU4nLFxuICAnSVNOVU1CRVInLFxuICAnSVNPQkpFQ1QnLFxuICAnSVNTVFJJTkcnLFxuICAnTEFHJyxcbiAgJ0xBU1RfVkFMVUUnLFxuICAnTEVBRCcsXG4gICdMRUFTVCcsXG4gICdMRU5HVEgnLFxuICAnTE4nLFxuICAnTE9HJyxcbiAgJ0xPV0VSJyxcbiAgJ0xUUklNJyxcbiAgJ01BWCcsXG4gICdNRUFOJyxcbiAgJ01FRElBTicsXG4gICdNRVRBJyxcbiAgJ01JTExJUycsXG4gICdNSUxMSVNfVE9fTE9DQUwnLFxuICAnTUlMTElTX1RPX1NUUicsXG4gICdNSUxMSVNfVE9fVFonLFxuICAnTUlMTElTX1RPX1VUQycsXG4gICdNSUxMSVNfVE9fWk9ORV9OQU1FJyxcbiAgJ01JTicsXG4gICdNSVNTSU5HSUYnLFxuICAnTkFOSUYnLFxuICAnTkVHSU5GSUYnLFxuICAnTk9XX0xPQ0FMJyxcbiAgJ05PV19NSUxMSVMnLFxuICAnTk9XX1NUUicsXG4gICdOT1dfVFonLFxuICAnTk9XX1VUQycsXG4gICdOVEhfVkFMVUUnLFxuICAnTlRJTEUnLFxuICAnTlVMTElGJyxcbiAgJ05WTCcsXG4gICdOVkwyJyxcbiAgJ09CSkVDVF9BREQnLFxuICAnT0JKRUNUX0NPTkNBVCcsXG4gICdPQkpFQ1RfSU5ORVJfUEFJUlMnLFxuICAnT0JKRUNUX0lOTkVSX1ZBTFVFUycsXG4gICdPQkpFQ1RfTEVOR1RIJyxcbiAgJ09CSkVDVF9OQU1FUycsXG4gICdPQkpFQ1RfUEFJUlMnLFxuICAnT0JKRUNUX1BVVCcsXG4gICdPQkpFQ1RfUkVNT1ZFJyxcbiAgJ09CSkVDVF9SRU5BTUUnLFxuICAnT0JKRUNUX1JFUExBQ0UnLFxuICAnT0JKRUNUX1VOV1JBUCcsXG4gICdPQkpFQ1RfVkFMVUVTJyxcbiAgJ1BBSVJTJyxcbiAgJ1BFUkNFTlRfUkFOSycsXG4gICdQSScsXG4gICdQT0xZX0xFTkdUSCcsXG4gICdQT1NJTkZJRicsXG4gICdQT1NJVElPTicsXG4gICdQT1dFUicsXG4gICdSQURJQU5TJyxcbiAgJ1JBTkRPTScsXG4gICdSQU5LJyxcbiAgJ1JBVElPX1RPX1JFUE9SVCcsXG4gICdSRUdFWFBfQ09OVEFJTlMnLFxuICAnUkVHRVhQX0xJS0UnLFxuICAnUkVHRVhQX01BVENIRVMnLFxuICAnUkVHRVhQX1BPU0lUSU9OJyxcbiAgJ1JFR0VYUF9SRVBMQUNFJyxcbiAgJ1JFR0VYUF9TUExJVCcsXG4gICdSRUdFWF9DT05UQUlOUycsXG4gICdSRUdFWF9MSUtFJyxcbiAgJ1JFR0VYX01BVENIRVMnLFxuICAnUkVHRVhfUE9TSVRJT04nLFxuICAnUkVHRVhfUkVQTEFDRScsXG4gICdSRUdFWF9TUExJVCcsXG4gICdSRVBFQVQnLFxuICAnUkVQTEFDRScsXG4gICdSRVZFUlNFJyxcbiAgJ1JPVU5EJyxcbiAgJ1JPV19OVU1CRVInLFxuICAnUlRSSU0nLFxuICAnU0VBUkNIJyxcbiAgJ1NFQVJDSF9NRVRBJyxcbiAgJ1NFQVJDSF9TQ09SRScsXG4gICdTSUdOJyxcbiAgJ1NJTicsXG4gICdTUExJVCcsXG4gICdTUVJUJyxcbiAgJ1NURERFVicsXG4gICdTVERERVZfUE9QJyxcbiAgJ1NURERFVl9TQU1QJyxcbiAgJ1NUUl9UT19EVVJBVElPTicsXG4gICdTVFJfVE9fTUlMTElTJyxcbiAgJ1NUUl9UT19UWicsXG4gICdTVFJfVE9fVVRDJyxcbiAgJ1NUUl9UT19aT05FX05BTUUnLFxuICAnU1VCU1RSJyxcbiAgJ1NVRkZJWEVTJyxcbiAgJ1NVTScsXG4gICdUQU4nLFxuICAnVElUTEUnLFxuICAnVE9BUlJBWScsXG4gICdUT0FUT00nLFxuICAnVE9CT09MRUFOJyxcbiAgJ1RPS0VOUycsXG4gICdUT0tFTlMnLFxuICAnVE9OVU1CRVInLFxuICAnVE9PQkpFQ1QnLFxuICAnVE9TVFJJTkcnLFxuICAnVFJJTScsXG4gICdUUlVOQycsXG4gIC8vICdUWVBFJywgLy8gZGlzYWJsZWRcbiAgJ1VQUEVSJyxcbiAgJ1VVSUQnLFxuICAnVkFSSUFOQ0UnLFxuICAnVkFSSUFOQ0VfUE9QJyxcbiAgJ1ZBUklBTkNFX1NBTVAnLFxuICAnVkFSX1BPUCcsXG4gICdWQVJfU0FNUCcsXG4gICdXRUVLREFZX01JTExJUycsXG4gICdXRUVLREFZX1NUUicsXG5dO1xuXG4vKipcbiAqIFByaW9yaXR5IDUgKGxhc3QpXG4gKiBGdWxsIGxpc3Qgb2YgcmVzZXJ2ZWQgd29yZHNcbiAqIGFueSB3b3JkcyB0aGF0IGFyZSBpbiBhIGhpZ2hlciBwcmlvcml0eSBhcmUgcmVtb3ZlZFxuICovXG4vLyBodHRwczovL2RvY3MuY291Y2hiYXNlLmNvbS9zZXJ2ZXIvY3VycmVudC9uMXFsL24xcWwtbGFuZ3VhZ2UtcmVmZXJlbmNlL3Jlc2VydmVkd29yZHMuaHRtbFxuY29uc3QgcmVzZXJ2ZWRLZXl3b3JkcyA9IFtcbiAgJ0FMTCcsXG4gICdBTFRFUicsXG4gICdBTkFMWVpFJyxcbiAgJ0FOWScsXG4gICdBUlJBWScsXG4gICdBUycsXG4gICdBU0MnLFxuICAnQVQnLFxuICAnQkVHSU4nLFxuICAnQkVUV0VFTicsXG4gICdCSU5BUlknLFxuICAnQk9PTEVBTicsXG4gICdCUkVBSycsXG4gICdCVUNLRVQnLFxuICAnQlVJTEQnLFxuICAnQlknLFxuICAnQ0FMTCcsXG4gICdDQVNUJyxcbiAgJ0NIQVInLCAvLyB2ZXJpZnlcbiAgJ0NMVVNURVInLFxuICAnQ09MTEFURScsXG4gICdDT0xMRUNUSU9OJyxcbiAgJ0NPTU1JVCcsXG4gICdDT01NSVRURUQnLFxuICAnQ09OTkVDVCcsXG4gICdDT05USU5VRScsXG4gICdDT1JSRUxBVEUnLFxuICAnQ09SUkVMQVRFRCcsXG4gICdDT1ZFUicsXG4gICdDUkVBVEUnLFxuICAnQ1VSUkVOVCcsXG4gICdEQVRBQkFTRScsXG4gICdEQVRBU0VUJyxcbiAgJ0RBVEFTVE9SRScsXG4gICdERUNMQVJFJyxcbiAgJ0RFQ1JFTUVOVCcsXG4gICdERVJJVkVEJyxcbiAgJ0RFU0MnLFxuICAnREVTQ1JJQkUnLFxuICAnRElTVElOQ1QnLFxuICAnRE8nLFxuICAnRFJPUCcsXG4gICdFQUNIJyxcbiAgJ0VMRU1FTlQnLFxuICAnRVZFUlknLFxuICAnRVhDTFVERScsXG4gICdFWElTVFMnLFxuICAnRkFMU0UnLFxuICAnRkVUQ0gnLFxuICAnRklMVEVSJyxcbiAgJ0ZJUlNUJyxcbiAgJ0ZMQVRURU4nLFxuICAnRkxVU0gnLFxuICAnRk9MTE9XSU5HJyxcbiAgJ0ZPUicsXG4gICdGT1JDRScsXG4gICdGVFMnLFxuICAnRlVOQ1RJT04nLFxuICAnR09MQU5HJyxcbiAgJ0dST1VQJyxcbiAgJ0dST1VQUycsXG4gICdHU0knLFxuICAnSEFTSCcsXG4gICdJRicsXG4gICdJR05PUkUnLFxuICAnSUxJS0UnLFxuICAnSU4nLFxuICAnSU5DTFVERScsXG4gICdJTkNSRU1FTlQnLFxuICAnSU5ERVgnLFxuICAnSU5MSU5FJyxcbiAgJ0lOTkVSJyxcbiAgJ0lOVE8nLFxuICAnSVMnLFxuICAnSVNPTEFUSU9OJyxcbiAgJ0pBVkFTQ1JJUFQnLFxuICAnS0VZJyxcbiAgJ0tFWVMnLFxuICAnS0VZU1BBQ0UnLFxuICAnS05PV04nLFxuICAnTEFOR1VBR0UnLFxuICAnTEFTVCcsXG4gICdMRUZUJyxcbiAgJ0xFVFRJTkcnLFxuICAnTEVWRUwnLFxuICAnTElLRScsXG4gICdMU00nLFxuICAnTUFQJyxcbiAgJ01BUFBJTkcnLFxuICAnTUFUQ0hFRCcsXG4gICdNQVRFUklBTElaRUQnLFxuICAnTUlTU0lORycsXG4gICdOQU1FU1BBQ0UnLFxuICAnTkwnLFxuICAnTk8nLFxuICAnTk9UJyxcbiAgJ05VTEwnLFxuICAnTlVMTFMnLFxuICAnTlVNQkVSJyxcbiAgJ09CSkVDVCcsXG4gICdPRkZTRVQnLFxuICAnT1BUSU9OJyxcbiAgJ09QVElPTlMnLFxuICAnT1JERVInLFxuICAnT1RIRVJTJyxcbiAgJ09VVEVSJyxcbiAgJ09WRVInLFxuICAnUEFSU0UnLFxuICAnUEFSVElUSU9OJyxcbiAgJ1BBU1NXT1JEJyxcbiAgJ1BBVEgnLFxuICAnUE9PTCcsXG4gICdQUkVDRURJTkcnLFxuICAnUFJJTUFSWScsXG4gICdQUklWQVRFJyxcbiAgJ1BSSVZJTEVHRScsXG4gICdQUk9CRScsXG4gICdQUk9DRURVUkUnLFxuICAnUFVCTElDJyxcbiAgJ1JBTkdFJyxcbiAgJ1JBVycsXG4gICdSRUFMTScsXG4gICdSRURVQ0UnLFxuICAnUkVOQU1FJyxcbiAgJ1JFU1BFQ1QnLFxuICAnUkVUVVJOJyxcbiAgJ1JJR0hUJyxcbiAgJ1JPTEUnLFxuICAnUk9MTEJBQ0snLFxuICAnUk9XJyxcbiAgJ1JPV1MnLFxuICAnU0FUSVNGSUVTJyxcbiAgJ1NDSEVNQScsXG4gICdTQ09QRScsXG4gICdTRUxGJyxcbiAgJ1NFTUknLFxuICAnU09NRScsXG4gICdTVEFSVCcsXG4gICdTVEFUSVNUSUNTJyxcbiAgJ1NUUklORycsXG4gICdTWVNURU0nLFxuICAnVEhFTicsXG4gICdUSUVTJyxcbiAgJ1RPJyxcbiAgJ1RSQU4nLFxuICAnVFJBTlNBQ1RJT04nLFxuICAnVFJJR0dFUicsXG4gICdUUlVFJyxcbiAgJ1RSVU5DQVRFJyxcbiAgJ1VOQk9VTkRFRCcsXG4gICdVTkRFUicsXG4gICdVTklRVUUnLFxuICAnVU5LTk9XTicsXG4gICdVTlNFVCcsXG4gICdVU0UnLFxuICAnVVNFUicsXG4gICdWQUxJREFURScsXG4gICdWQUxVRScsXG4gICdWQUxVRUQnLFxuICAnVklBJyxcbiAgJ1ZJRVcnLFxuICAnV0hJTEUnLFxuICAnV0lORE9XJyxcbiAgJ1dJVEhJTicsXG4gICdXT1JLJyxcbl07XG5cbi8qKlxuICogUHJpb3JpdHkgMSAoZmlyc3QpXG4gKiBrZXl3b3JkcyB0aGF0IGJlZ2luIGEgbmV3IHN0YXRlbWVudFxuICogd2lsbCBiZWdpbiBuZXcgaW5kZW50ZWQgYmxvY2tcbiAqL1xuLy8gaHR0cHM6Ly9kb2NzLmNvdWNoYmFzZS5jb20vc2VydmVyL2N1cnJlbnQvbjFxbC9uMXFsLWxhbmd1YWdlLXJlZmVyZW5jZS9yZXNlcnZlZHdvcmRzLmh0bWxcbmNvbnN0IHJlc2VydmVkQ29tbWFuZHMgPSBbXG4gICdBRFZJU0UnLFxuICAnQUxURVIgSU5ERVgnLFxuICAnQkVHSU4gVFJBTlNBQ1RJT04nLFxuICAnQlVJTEQgSU5ERVgnLFxuICAnQ09NTUlUIFRSQU5TQUNUSU9OJyxcbiAgJ0NSRUFURSBDT0xMRUNUSU9OJyxcbiAgJ0NSRUFURSBGVU5DVElPTicsXG4gICdDUkVBVEUgSU5ERVgnLFxuICAnQ1JFQVRFIFBSSU1BUlkgSU5ERVgnLFxuICAnQ1JFQVRFIFNDT1BFJyxcbiAgJ0NSRUFURSBUQUJMRScsIC8vIHZlcmlmeVxuICAnREVMRVRFJyxcbiAgJ0RST1AgQ09MTEVDVElPTicsXG4gICdEUk9QIEZVTkNUSU9OJyxcbiAgJ0RST1AgSU5ERVgnLFxuICAnRFJPUCBQUklNQVJZIElOREVYJyxcbiAgJ0RST1AgU0NPUEUnLFxuICAnRVhFQ1VURScsXG4gICdFWEVDVVRFIEZVTkNUSU9OJyxcbiAgJ0VYUExBSU4nLFxuICAnR1JBTlQnLFxuICAnSU5GRVInLFxuICAnSU5TRVJUJyxcbiAgJ01FUkdFJyxcbiAgJ1BSRVBBUkUnLFxuICAnUkVUVVJOSU5HJyxcbiAgJ1JFVk9LRScsXG4gICdST0xMQkFDSyBUUkFOU0FDVElPTicsXG4gICdTQVZFUE9JTlQnLFxuICAnU0VMRUNUJyxcbiAgJ1NFVCBUUkFOU0FDVElPTicsXG4gICdVUERBVEUnLFxuICAnVVBEQVRFIFNUQVRJU1RJQ1MnLFxuICAnVVBTRVJUJyxcbiAgLy8gb3RoZXJcbiAgJ0RST1AgVEFCTEUnLCAvLyB2ZXJpZnksXG4gICdGUk9NJyxcbiAgJ0dST1VQIEJZJyxcbiAgJ0hBVklORycsXG4gICdJTlNFUlQgSU5UTycsXG4gICdMRVQnLFxuICAnTElNSVQnLFxuICAnT0ZGU0VUJyxcbiAgJ05FU1QnLFxuICAnT1JERVIgQlknLFxuICAnU0VUIENVUlJFTlQgU0NIRU1BJyxcbiAgJ1NFVCBTQ0hFTUEnLFxuICAnU0VUJyxcbiAgJ1NIT1cnLFxuICAnVU5ORVNUJyxcbiAgJ1VTRSBLRVlTJyxcbiAgJ1ZBTFVFUycsXG4gICdXSEVSRScsXG4gICdXSVRIJyxcbl07XG5cbi8qKlxuICogUHJpb3JpdHkgMlxuICogY29tbWFuZHMgdGhhdCBvcGVyYXRlIG9uIHR3byB0YWJsZXMgb3Igc3VicXVlcmllc1xuICogdHdvIG1haW4gY2F0ZWdvcmllczogam9pbnMgYW5kIGJvb2xlYW4gc2V0IG9wZXJhdG9yc1xuICovXG5jb25zdCByZXNlcnZlZEJpbmFyeUNvbW1hbmRzID0gW1xuICAvLyBzZXQgYm9vbGVhbnNcbiAgJ0lOVEVSU0VDVCcsXG4gICdJTlRFUlNFQ1QgQUxMJyxcbiAgJ0lOVEVSU0VDVCBESVNUSU5DVCcsXG4gICdVTklPTicsXG4gICdVTklPTiBBTEwnLFxuICAnVU5JT04gRElTVElOQ1QnLFxuICAnRVhDRVBUJyxcbiAgJ0VYQ0VQVCBBTEwnLFxuICAnRVhDRVBUIERJU1RJTkNUJyxcbiAgJ01JTlVTJyxcbiAgJ01JTlVTIEFMTCcsXG4gICdNSU5VUyBESVNUSU5DVCcsXG4gIC8vIGpvaW5zXG4gICdKT0lOJyxcbiAgJ0lOTkVSIEpPSU4nLFxuICAnTEVGVCBKT0lOJyxcbiAgJ0xFRlQgT1VURVIgSk9JTicsXG4gICdSSUdIVCBKT0lOJyxcbiAgJ1JJR0hUIE9VVEVSIEpPSU4nLFxuXTtcblxuLyoqXG4gKiBQcmlvcml0eSAzXG4gKiBrZXl3b3JkcyB0aGF0IGZvbGxvdyBhIHByZXZpb3VzIFN0YXRlbWVudCwgbXVzdCBiZSBhdHRhY2hlZCB0byBzdWJzZXF1ZW50IGRhdGFcbiAqIGNhbiBiZSBmdWxseSBpbmxpbmUgb3Igb24gbmV3bGluZSB3aXRoIG9wdGlvbmFsIGluZGVudFxuICovXG5jb25zdCByZXNlcnZlZERlcGVuZGVudENsYXVzZXMgPSBbJ1dIRU4nLCAnRUxTRSddO1xuXG4vLyBGb3IgcmVmZXJlbmNlOiBodHRwOi8vZG9jcy5jb3VjaGJhc2UuY29tLnMzLXdlYnNpdGUtdXMtd2VzdC0xLmFtYXpvbmF3cy5jb20vc2VydmVyLzYuMC9uMXFsL24xcWwtbGFuZ3VhZ2UtcmVmZXJlbmNlL2luZGV4Lmh0bWxcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE4xcWxGb3JtYXR0ZXIgZXh0ZW5kcyBGb3JtYXR0ZXIge1xuICBzdGF0aWMgcmVzZXJ2ZWRDb21tYW5kcyA9IHJlc2VydmVkQ29tbWFuZHM7XG4gIHN0YXRpYyByZXNlcnZlZEJpbmFyeUNvbW1hbmRzID0gcmVzZXJ2ZWRCaW5hcnlDb21tYW5kcztcbiAgc3RhdGljIHJlc2VydmVkRGVwZW5kZW50Q2xhdXNlcyA9IHJlc2VydmVkRGVwZW5kZW50Q2xhdXNlcztcbiAgc3RhdGljIHJlc2VydmVkSm9pbkNvbmRpdGlvbnMgPSBbJ09OJywgJ1VTSU5HJ107XG4gIHN0YXRpYyByZXNlcnZlZExvZ2ljYWxPcGVyYXRvcnMgPSBbJ0FORCcsICdPUicsICdYT1InXTtcbiAgc3RhdGljIHJlc2VydmVkS2V5d29yZHMgPSBkZWR1cGUoWy4uLnJlc2VydmVkS2V5d29yZHMsIC4uLnJlc2VydmVkRnVuY3Rpb25zXSk7XG4gIHN0YXRpYyBzdHJpbmdUeXBlczogU3RyaW5nUGF0dGVyblR5cGVbXSA9IFtgXCJcImAsIFwiJydcIiwgJ2BgJ107XG4gIHN0YXRpYyBibG9ja1N0YXJ0ID0gWycoJywgJ1snLCAneycsICdDQVNFJ107XG4gIHN0YXRpYyBibG9ja0VuZCA9IFsnKScsICddJywgJ30nLCAnRU5EJ107XG4gIHN0YXRpYyBuYW1lZFBsYWNlaG9sZGVyVHlwZXMgPSBbJyQnXTtcbiAgc3RhdGljIGxpbmVDb21tZW50VHlwZXMgPSBbJyMnLCAnLS0nXTtcbiAgc3RhdGljIG9wZXJhdG9ycyA9IFsnPT0nXTtcblxuICB0b2tlbml6ZXIoKSB7XG4gICAgcmV0dXJuIG5ldyBUb2tlbml6ZXIoe1xuICAgICAgcmVzZXJ2ZWRDb21tYW5kczogTjFxbEZvcm1hdHRlci5yZXNlcnZlZENvbW1hbmRzLFxuICAgICAgcmVzZXJ2ZWRCaW5hcnlDb21tYW5kczogTjFxbEZvcm1hdHRlci5yZXNlcnZlZEJpbmFyeUNvbW1hbmRzLFxuICAgICAgcmVzZXJ2ZWREZXBlbmRlbnRDbGF1c2VzOiBOMXFsRm9ybWF0dGVyLnJlc2VydmVkRGVwZW5kZW50Q2xhdXNlcyxcbiAgICAgIHJlc2VydmVkSm9pbkNvbmRpdGlvbnM6IE4xcWxGb3JtYXR0ZXIucmVzZXJ2ZWRKb2luQ29uZGl0aW9ucyxcbiAgICAgIHJlc2VydmVkTG9naWNhbE9wZXJhdG9yczogTjFxbEZvcm1hdHRlci5yZXNlcnZlZExvZ2ljYWxPcGVyYXRvcnMsXG4gICAgICByZXNlcnZlZEtleXdvcmRzOiBOMXFsRm9ybWF0dGVyLnJlc2VydmVkS2V5d29yZHMsXG4gICAgICBzdHJpbmdUeXBlczogTjFxbEZvcm1hdHRlci5zdHJpbmdUeXBlcyxcbiAgICAgIGJsb2NrU3RhcnQ6IE4xcWxGb3JtYXR0ZXIuYmxvY2tTdGFydCxcbiAgICAgIGJsb2NrRW5kOiBOMXFsRm9ybWF0dGVyLmJsb2NrRW5kLFxuICAgICAgbmFtZWRQbGFjZWhvbGRlclR5cGVzOiBOMXFsRm9ybWF0dGVyLm5hbWVkUGxhY2Vob2xkZXJUeXBlcyxcbiAgICAgIGxpbmVDb21tZW50VHlwZXM6IE4xcWxGb3JtYXR0ZXIubGluZUNvbW1lbnRUeXBlcyxcbiAgICAgIG9wZXJhdG9yczogTjFxbEZvcm1hdHRlci5vcGVyYXRvcnMsXG4gICAgfSk7XG4gIH1cbn1cbiIsImltcG9ydCBGb3JtYXR0ZXIgZnJvbSAnLi4vY29yZS9Gb3JtYXR0ZXInO1xuaW1wb3J0IFRva2VuaXplciBmcm9tICcuLi9jb3JlL1Rva2VuaXplcic7XG5pbXBvcnQgeyBpc1Rva2VuLCBUb2tlbiwgVG9rZW5UeXBlIH0gZnJvbSAnLi4vY29yZS90b2tlbic7IC8vIGNvbnZlcnQgdG8gcGFydGlhbCB0eXBlIGltcG9ydCBpbiBUUyA0LjVcbmltcG9ydCB0eXBlIHsgU3RyaW5nUGF0dGVyblR5cGUgfSBmcm9tICcuLi9jb3JlL3JlZ2V4RmFjdG9yeSc7XG5pbXBvcnQgeyBkZWR1cGUgfSBmcm9tICcuLi91dGlscyc7XG5cbi8qKlxuICogUHJpb3JpdHkgNSAobGFzdClcbiAqIEZ1bGwgbGlzdCBvZiByZXNlcnZlZCB3b3Jkc1xuICogYW55IHdvcmRzIHRoYXQgYXJlIGluIGEgaGlnaGVyIHByaW9yaXR5IGFyZSByZW1vdmVkXG4gKi9cbmNvbnN0IHJlc2VydmVkS2V5d29yZHMgPSBbXG4gIC8vICdBJyxcbiAgJ0FDQ0VTU0lCTEUnLFxuICAnQUdFTlQnLFxuICAnQUdHUkVHQVRFJyxcbiAgJ0FMTCcsXG4gICdBTFRFUicsXG4gICdBTlknLFxuICAnQVJSQVknLFxuICAnQVMnLFxuICAnQVNDJyxcbiAgJ0FUJyxcbiAgJ0FUVFJJQlVURScsXG4gICdBVVRISUQnLFxuICAnQVZHJyxcbiAgJ0JFVFdFRU4nLFxuICAnQkZJTEVfQkFTRScsXG4gICdCSU5BUlknLFxuICAnQklOQVJZX0lOVEVHRVInLFxuICAnQkxPQl9CQVNFJyxcbiAgJ0JMT0NLJyxcbiAgJ0JPRFknLFxuICAnQk9PTEVBTicsXG4gICdCT1RIJyxcbiAgJ0JPVU5EJyxcbiAgJ0JSRUFEVEgnLFxuICAnQlVMSycsXG4gICdCWScsXG4gICdCWVRFJyxcbiAgLy8gJ0MnLFxuICAnQ0FMTCcsXG4gICdDQUxMSU5HJyxcbiAgJ0NBU0NBREUnLFxuICAnQ0FTVCcsXG4gICdDSEFSJyxcbiAgJ0NIQVJBQ1RFUicsXG4gICdDSEFSU0VUJyxcbiAgJ0NIQVJTRVRGT1JNJyxcbiAgJ0NIQVJTRVRJRCcsXG4gICdDSEFSX0JBU0UnLFxuICAnQ0hFQ0snLFxuICAnQ0xPQl9CQVNFJyxcbiAgJ0NMT05FJyxcbiAgJ0NMT1NFJyxcbiAgJ0NMVVNURVInLFxuICAnQ0xVU1RFUlMnLFxuICAnQ09BTEVTQ0UnLFxuICAnQ09MQVVUSCcsXG4gICdDT0xMRUNUJyxcbiAgJ0NPTFVNTlMnLFxuICAnQ09NTUVOVCcsXG4gICdDT01NSVQnLFxuICAnQ09NTUlUVEVEJyxcbiAgJ0NPTVBJTEVEJyxcbiAgJ0NPTVBSRVNTJyxcbiAgJ0NPTk5FQ1QnLFxuICAnQ09OU1RBTlQnLFxuICAnQ09OU1RSVUNUT1InLFxuICAnQ09OVEVYVCcsXG4gICdDT05USU5VRScsXG4gICdDT05WRVJUJyxcbiAgJ0NPVU5UJyxcbiAgJ0NSQVNIJyxcbiAgJ0NSRUFURScsXG4gICdDUkVERU5USUFMJyxcbiAgJ0NVUlJFTlQnLFxuICAnQ1VSUlZBTCcsXG4gICdDVVJTT1InLFxuICAnQ1VTVE9NREFUVU0nLFxuICAnREFOR0xJTkcnLFxuICAnREFUQScsXG4gICdEQVRFJyxcbiAgJ0RBVEVfQkFTRScsXG4gICdEQVknLFxuICAnREVDSU1BTCcsXG4gICdERUZBVUxUJyxcbiAgJ0RFRklORScsXG4gICdERVBUSCcsXG4gICdERVNDJyxcbiAgJ0RFVEVSTUlOSVNUSUMnLFxuICAnRElSRUNUT1JZJyxcbiAgJ0RJU1RJTkNUJyxcbiAgJ0RPJyxcbiAgJ0RPVUJMRScsXG4gICdEUk9QJyxcbiAgJ0RVUkFUSU9OJyxcbiAgJ0VMRU1FTlQnLFxuICAnRUxTSUYnLFxuICAnRU1QVFknLFxuICAnRVNDQVBFJyxcbiAgJ0VYQ0VQVElPTlMnLFxuICAnRVhDTFVTSVZFJyxcbiAgJ0VYRUNVVEUnLFxuICAnRVhJU1RTJyxcbiAgJ0VYSVQnLFxuICAnRVhURU5EUycsXG4gICdFWFRFUk5BTCcsXG4gICdFWFRSQUNUJyxcbiAgJ0ZBTFNFJyxcbiAgJ0ZFVENIJyxcbiAgJ0ZJTkFMJyxcbiAgJ0ZJUlNUJyxcbiAgJ0ZJWEVEJyxcbiAgJ0ZMT0FUJyxcbiAgJ0ZPUicsXG4gICdGT1JBTEwnLFxuICAnRk9SQ0UnLFxuICAnRlVOQ1RJT04nLFxuICAnR0VORVJBTCcsXG4gICdHT1RPJyxcbiAgJ0dSQU5UJyxcbiAgJ0dST1VQJyxcbiAgJ0hBU0gnLFxuICAnSEVBUCcsXG4gICdISURERU4nLFxuICAnSE9VUicsXG4gICdJREVOVElGSUVEJyxcbiAgJ0lGJyxcbiAgJ0lNTUVESUFURScsXG4gICdJTicsXG4gICdJTkNMVURJTkcnLFxuICAnSU5ERVgnLFxuICAnSU5ERVhFUycsXG4gICdJTkRJQ0FUT1InLFxuICAnSU5ESUNFUycsXG4gICdJTkZJTklURScsXG4gICdJTlNUQU5USUFCTEUnLFxuICAnSU5UJyxcbiAgJ0lOVEVHRVInLFxuICAnSU5URVJGQUNFJyxcbiAgJ0lOVEVSVkFMJyxcbiAgJ0lOVE8nLFxuICAnSU5WQUxJREFURScsXG4gICdJUycsXG4gICdJU09MQVRJT04nLFxuICAnSkFWQScsXG4gICdMQU5HVUFHRScsXG4gICdMQVJHRScsXG4gICdMRUFESU5HJyxcbiAgJ0xFTkdUSCcsXG4gICdMRVZFTCcsXG4gICdMSUJSQVJZJyxcbiAgJ0xJS0UnLFxuICAnTElLRTInLFxuICAnTElLRTQnLFxuICAnTElLRUMnLFxuICAnTElNSVRFRCcsXG4gICdMT0NBTCcsXG4gICdMT0NLJyxcbiAgJ0xPTkcnLFxuICAnTUFQJyxcbiAgJ01BWCcsXG4gICdNQVhMRU4nLFxuICAnTUVNQkVSJyxcbiAgJ01FUkdFJyxcbiAgJ01JTicsXG4gICdNSU5VVEUnLFxuICAnTUxTTEFCRUwnLFxuICAnTU9EJyxcbiAgJ01PREUnLFxuICAnTU9OVEgnLFxuICAnTVVMVElTRVQnLFxuICAnTkFNRScsXG4gICdOQU4nLFxuICAnTkFUSU9OQUwnLFxuICAnTkFUSVZFJyxcbiAgJ05BVFVSQUwnLFxuICAnTkFUVVJBTE4nLFxuICAnTkNIQVInLFxuICAnTkVXJyxcbiAgJ05FWFRWQUwnLFxuICAnTk9DT01QUkVTUycsXG4gICdOT0NPUFknLFxuICAnTk9UJyxcbiAgJ05PV0FJVCcsXG4gICdOVUxMJyxcbiAgJ05VTExJRicsXG4gICdOVU1CRVInLFxuICAnTlVNQkVSX0JBU0UnLFxuICAnT0JKRUNUJyxcbiAgJ09DSUNPTEwnLFxuICAnT0NJREFURScsXG4gICdPQ0lEQVRFVElNRScsXG4gICdPQ0lEVVJBVElPTicsXG4gICdPQ0lJTlRFUlZBTCcsXG4gICdPQ0lMT0JMT0NBVE9SJyxcbiAgJ09DSU5VTUJFUicsXG4gICdPQ0lSQVcnLFxuICAnT0NJUkVGJyxcbiAgJ09DSVJFRkNVUlNPUicsXG4gICdPQ0lST1dJRCcsXG4gICdPQ0lTVFJJTkcnLFxuICAnT0NJVFlQRScsXG4gICdPRicsXG4gICdPTEQnLFxuICAnT04gREVMRVRFJyxcbiAgJ09OIFVQREFURScsXG4gICdPTkxZJyxcbiAgJ09QQVFVRScsXG4gICdPUEVOJyxcbiAgJ09QRVJBVE9SJyxcbiAgJ09QVElPTicsXG4gICdPUkFDTEUnLFxuICAnT1JBREFUQScsXG4gICdPUkRFUicsXG4gICdPUkdBTklaQVRJT04nLFxuICAnT1JMQU5ZJyxcbiAgJ09STFZBUlknLFxuICAnT1RIRVJTJyxcbiAgJ09VVCcsXG4gICdPVkVSTEFQUycsXG4gICdPVkVSUklESU5HJyxcbiAgJ1BBQ0tBR0UnLFxuICAnUEFSQUxMRUxfRU5BQkxFJyxcbiAgJ1BBUkFNRVRFUicsXG4gICdQQVJBTUVURVJTJyxcbiAgJ1BBUkVOVCcsXG4gICdQQVJUSVRJT04nLFxuICAnUEFTQ0FMJyxcbiAgJ1BDVEZSRUUnLFxuICAnUElQRScsXG4gICdQSVBFTElORUQnLFxuICAnUExTX0lOVEVHRVInLFxuICAnUExVR0dBQkxFJyxcbiAgJ1BPU0lUSVZFJyxcbiAgJ1BPU0lUSVZFTicsXG4gICdQUkFHTUEnLFxuICAnUFJFQ0lTSU9OJyxcbiAgJ1BSSU9SJyxcbiAgJ1BSSVZBVEUnLFxuICAnUFJPQ0VEVVJFJyxcbiAgJ1BVQkxJQycsXG4gICdSQUlTRScsXG4gICdSQU5HRScsXG4gICdSQVcnLFxuICAnUkVBRCcsXG4gICdSRUFMJyxcbiAgJ1JFQ09SRCcsXG4gICdSRUYnLFxuICAnUkVGRVJFTkNFJyxcbiAgJ1JFTEVBU0UnLFxuICAnUkVMSUVTX09OJyxcbiAgJ1JFTScsXG4gICdSRU1BSU5ERVInLFxuICAnUkVOQU1FJyxcbiAgJ1JFU09VUkNFJyxcbiAgJ1JFU1VMVCcsXG4gICdSRVNVTFRfQ0FDSEUnLFxuICAnUkVUVVJOJyxcbiAgJ1JFVkVSU0UnLFxuICAnUkVWT0tFJyxcbiAgJ1JPTExCQUNLJyxcbiAgJ1JPVycsXG4gICdST1dJRCcsXG4gICdST1dOVU0nLFxuICAnUk9XVFlQRScsXG4gICdTQU1QTEUnLFxuICAnU0FWRScsXG4gICdTQVZFUE9JTlQnLFxuICAnU0IxJyxcbiAgJ1NCMicsXG4gICdTQjQnLFxuICAnU0VBUkNIJyxcbiAgJ1NFQ09ORCcsXG4gICdTRUdNRU5UJyxcbiAgJ1NFTEYnLFxuICAnU0VQQVJBVEUnLFxuICAnU0VRVUVOQ0UnLFxuICAnU0VSSUFMSVpBQkxFJyxcbiAgJ1NIQVJFJyxcbiAgJ1NIT1JUJyxcbiAgJ1NJWkUnLFxuICAnU0laRV9UJyxcbiAgJ1NNQUxMSU5UJyxcbiAgJ1NPTUUnLFxuICAnU1BBQ0UnLFxuICAnU1BBUlNFJyxcbiAgJ1NRTCcsXG4gICdTUUxDT0RFJyxcbiAgJ1NRTERBVEEnLFxuICAnU1FMRVJSTScsXG4gICdTUUxOQU1FJyxcbiAgJ1NRTFNUQVRFJyxcbiAgJ1NUQU5EQVJEJyxcbiAgJ1NUQVJUJyxcbiAgJ1NUQVRJQycsXG4gICdTVERERVYnLFxuICAnU1RPUkVEJyxcbiAgJ1NUUklORycsXG4gICdTVFJVQ1QnLFxuICAnU1RZTEUnLFxuICAnU1VCTVVMVElTRVQnLFxuICAnU1VCUEFSVElUSU9OJyxcbiAgJ1NVQlNUSVRVVEFCTEUnLFxuICAnU1VCVFlQRScsXG4gICdTVUNDRVNTRlVMJyxcbiAgJ1NVTScsXG4gICdTWU5PTllNJyxcbiAgJ1NZU0RBVEUnLFxuICAnVEFCQVVUSCcsXG4gICdUQUJMRScsXG4gICdURE8nLFxuICAnVEhFJyxcbiAgJ1RIRU4nLFxuICAnVElNRScsXG4gICdUSU1FU1RBTVAnLFxuICAnVElNRVpPTkVfQUJCUicsXG4gICdUSU1FWk9ORV9IT1VSJyxcbiAgJ1RJTUVaT05FX01JTlVURScsXG4gICdUSU1FWk9ORV9SRUdJT04nLFxuICAnVE8nLFxuICAnVFJBSUxJTkcnLFxuICAnVFJBTlNBQ1RJT04nLFxuICAnVFJBTlNBQ1RJT05BTCcsXG4gICdUUklHR0VSJyxcbiAgJ1RSVUUnLFxuICAnVFJVU1RFRCcsXG4gICdUWVBFJyxcbiAgJ1VCMScsXG4gICdVQjInLFxuICAnVUI0JyxcbiAgJ1VJRCcsXG4gICdVTkRFUicsXG4gICdVTklRVUUnLFxuICAnVU5QTFVHJyxcbiAgJ1VOU0lHTkVEJyxcbiAgJ1VOVFJVU1RFRCcsXG4gICdVU0UnLFxuICAnVVNFUicsXG4gICdWQUxJREFURScsXG4gICdWQUxJU1QnLFxuICAnVkFMVUUnLFxuICAnVkFSQ0hBUicsXG4gICdWQVJDSEFSMicsXG4gICdWQVJJQUJMRScsXG4gICdWQVJJQU5DRScsXG4gICdWQVJSQVknLFxuICAnVkFSWUlORycsXG4gICdWSUVXJyxcbiAgJ1ZJRVdTJyxcbiAgJ1ZPSUQnLFxuICAnV0hFTkVWRVInLFxuICAnV0hJTEUnLFxuICAnV09SSycsXG4gICdXUkFQUEVEJyxcbiAgJ1dSSVRFJyxcbiAgJ1lFQVInLFxuICAnWk9ORScsXG5dO1xuXG4vKipcbiAqIFByaW9yaXR5IDEgKGZpcnN0KVxuICoga2V5d29yZHMgdGhhdCBiZWdpbiBhIG5ldyBzdGF0ZW1lbnRcbiAqIHdpbGwgYmVnaW4gbmV3IGluZGVudGVkIGJsb2NrXG4gKi9cbmNvbnN0IHJlc2VydmVkQ29tbWFuZHMgPSBbXG4gICdBREQnLFxuICAnQUxURVIgQ09MVU1OJyxcbiAgJ0FMVEVSIFRBQkxFJyxcbiAgJ0JFR0lOJyxcbiAgJ0NPTk5FQ1QgQlknLFxuICAnQ1JFQVRFIFRBQkxFJywgLy8gdmVyaWZ5XG4gICdEUk9QIFRBQkxFJywgLy8gdmVyaWZ5XG4gICdERUNMQVJFJyxcbiAgLy8gJ0RFTEVURSBGUk9NJywgLy8gZGlzYWJsZWRcbiAgJ0RFTEVURScsXG4gICdFTkQnLFxuICAnRVhDRVBUJyxcbiAgJ0VYQ0VQVElPTicsXG4gICdGRVRDSCBGSVJTVCcsXG4gICdGUk9NJyxcbiAgJ0dST1VQIEJZJyxcbiAgJ0hBVklORycsXG4gICdJTlNFUlQgSU5UTycsXG4gICdJTlNFUlQnLFxuICAnTElNSVQnLFxuICAnT0ZGU0VUJyxcbiAgJ0xPT1AnLFxuICAnTU9ESUZZJyxcbiAgJ09SREVSIEJZJyxcbiAgJ1JFVFVSTklORycsXG4gICdTRUxFQ1QnLFxuICAnU0VUIENVUlJFTlQgU0NIRU1BJyxcbiAgJ1NFVCBTQ0hFTUEnLFxuICAnU0VUJyxcbiAgJ1NUQVJUIFdJVEgnLFxuICAnVVBEQVRFJyxcbiAgJ1ZBTFVFUycsXG4gICdXSEVSRScsXG4gICdXSVRIJyxcbl07XG5cbi8qKlxuICogUHJpb3JpdHkgMlxuICogY29tbWFuZHMgdGhhdCBvcGVyYXRlIG9uIHR3byB0YWJsZXMgb3Igc3VicXVlcmllc1xuICogdHdvIG1haW4gY2F0ZWdvcmllczogam9pbnMgYW5kIGJvb2xlYW4gc2V0IG9wZXJhdG9yc1xuICovXG5jb25zdCByZXNlcnZlZEJpbmFyeUNvbW1hbmRzID0gW1xuICAvLyBzZXQgYm9vbGVhbnNcbiAgJ0lOVEVSU0VDVCcsXG4gICdJTlRFUlNFQ1QgQUxMJyxcbiAgJ0lOVEVSU0VDVCBESVNUSU5DVCcsXG4gICdVTklPTicsXG4gICdVTklPTiBBTEwnLFxuICAnVU5JT04gRElTVElOQ1QnLFxuICAnRVhDRVBUJyxcbiAgJ0VYQ0VQVCBBTEwnLFxuICAnRVhDRVBUIERJU1RJTkNUJyxcbiAgJ01JTlVTJyxcbiAgJ01JTlVTIEFMTCcsXG4gICdNSU5VUyBESVNUSU5DVCcsXG4gIC8vIGpvaW5zXG4gICdKT0lOJyxcbiAgJ0lOTkVSIEpPSU4nLFxuICAnTEVGVCBKT0lOJyxcbiAgJ0xFRlQgT1VURVIgSk9JTicsXG4gICdSSUdIVCBKT0lOJyxcbiAgJ1JJR0hUIE9VVEVSIEpPSU4nLFxuICAnRlVMTCBKT0lOJyxcbiAgJ0ZVTEwgT1VURVIgSk9JTicsXG4gICdDUk9TUyBKT0lOJyxcbiAgJ05BVFVSQUwgSk9JTicsXG4gIC8vIGFwcGx5XG4gICdDUk9TUyBBUFBMWScsXG4gICdPVVRFUiBBUFBMWScsXG5dO1xuXG4vKipcbiAqIFByaW9yaXR5IDNcbiAqIGtleXdvcmRzIHRoYXQgZm9sbG93IGEgcHJldmlvdXMgU3RhdGVtZW50LCBtdXN0IGJlIGF0dGFjaGVkIHRvIHN1YnNlcXVlbnQgZGF0YVxuICogY2FuIGJlIGZ1bGx5IGlubGluZSBvciBvbiBuZXdsaW5lIHdpdGggb3B0aW9uYWwgaW5kZW50XG4gKi9cbmNvbnN0IHJlc2VydmVkRGVwZW5kZW50Q2xhdXNlcyA9IFsnV0hFTicsICdFTFNFJ107XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBsU3FsRm9ybWF0dGVyIGV4dGVuZHMgRm9ybWF0dGVyIHtcbiAgc3RhdGljIHJlc2VydmVkQ29tbWFuZHMgPSByZXNlcnZlZENvbW1hbmRzO1xuICBzdGF0aWMgcmVzZXJ2ZWRCaW5hcnlDb21tYW5kcyA9IHJlc2VydmVkQmluYXJ5Q29tbWFuZHM7XG4gIHN0YXRpYyByZXNlcnZlZERlcGVuZGVudENsYXVzZXMgPSByZXNlcnZlZERlcGVuZGVudENsYXVzZXM7XG4gIHN0YXRpYyByZXNlcnZlZEpvaW5Db25kaXRpb25zID0gWydPTicsICdVU0lORyddO1xuICBzdGF0aWMgcmVzZXJ2ZWRMb2dpY2FsT3BlcmF0b3JzID0gWydBTkQnLCAnT1InLCAnWE9SJ107XG4gIHN0YXRpYyByZXNlcnZlZEtleXdvcmRzID0gZGVkdXBlKHJlc2VydmVkS2V5d29yZHMpO1xuICBzdGF0aWMgc3RyaW5nVHlwZXM6IFN0cmluZ1BhdHRlcm5UeXBlW10gPSBbYFwiXCJgLCBcIk4nJ1wiLCBcIicnXCIsICdgYCddO1xuICBzdGF0aWMgYmxvY2tTdGFydCA9IFsnKCcsICdDQVNFJ107XG4gIHN0YXRpYyBibG9ja0VuZCA9IFsnKScsICdFTkQnXTtcbiAgc3RhdGljIGluZGV4ZWRQbGFjZWhvbGRlclR5cGVzID0gWyc/J107XG4gIHN0YXRpYyBuYW1lZFBsYWNlaG9sZGVyVHlwZXMgPSBbJzonXTtcbiAgc3RhdGljIGxpbmVDb21tZW50VHlwZXMgPSBbJy0tJ107XG4gIHN0YXRpYyBzcGVjaWFsV29yZENoYXJzID0geyBhbnk6ICdfJCMuQCcgfTtcbiAgc3RhdGljIG9wZXJhdG9ycyA9IFtcbiAgICAnfHwnLFxuICAgICcqKicsXG4gICAgJzo9JyxcbiAgICAnfj0nLFxuICAgICdePScsXG4gICAgJz4+JyxcbiAgICAnPDwnLFxuICAgICc9PicsXG4gICAgLy8gICcuLicgLy8gYnJlYWtzIG9wZXJhdG9yIHRlc3QsIGhhbmRsZWQgYnkgLlxuICBdO1xuXG4gIHRva2VuaXplcigpIHtcbiAgICByZXR1cm4gbmV3IFRva2VuaXplcih7XG4gICAgICByZXNlcnZlZENvbW1hbmRzOiBQbFNxbEZvcm1hdHRlci5yZXNlcnZlZENvbW1hbmRzLFxuICAgICAgcmVzZXJ2ZWRCaW5hcnlDb21tYW5kczogUGxTcWxGb3JtYXR0ZXIucmVzZXJ2ZWRCaW5hcnlDb21tYW5kcyxcbiAgICAgIHJlc2VydmVkRGVwZW5kZW50Q2xhdXNlczogUGxTcWxGb3JtYXR0ZXIucmVzZXJ2ZWREZXBlbmRlbnRDbGF1c2VzLFxuICAgICAgcmVzZXJ2ZWRKb2luQ29uZGl0aW9uczogUGxTcWxGb3JtYXR0ZXIucmVzZXJ2ZWRKb2luQ29uZGl0aW9ucyxcbiAgICAgIHJlc2VydmVkTG9naWNhbE9wZXJhdG9yczogUGxTcWxGb3JtYXR0ZXIucmVzZXJ2ZWRMb2dpY2FsT3BlcmF0b3JzLFxuICAgICAgcmVzZXJ2ZWRLZXl3b3JkczogUGxTcWxGb3JtYXR0ZXIucmVzZXJ2ZWRLZXl3b3JkcyxcbiAgICAgIHN0cmluZ1R5cGVzOiBQbFNxbEZvcm1hdHRlci5zdHJpbmdUeXBlcyxcbiAgICAgIGJsb2NrU3RhcnQ6IFBsU3FsRm9ybWF0dGVyLmJsb2NrU3RhcnQsXG4gICAgICBibG9ja0VuZDogUGxTcWxGb3JtYXR0ZXIuYmxvY2tFbmQsXG4gICAgICBpbmRleGVkUGxhY2Vob2xkZXJUeXBlczogUGxTcWxGb3JtYXR0ZXIuaW5kZXhlZFBsYWNlaG9sZGVyVHlwZXMsXG4gICAgICBuYW1lZFBsYWNlaG9sZGVyVHlwZXM6IFBsU3FsRm9ybWF0dGVyLm5hbWVkUGxhY2Vob2xkZXJUeXBlcyxcbiAgICAgIGxpbmVDb21tZW50VHlwZXM6IFBsU3FsRm9ybWF0dGVyLmxpbmVDb21tZW50VHlwZXMsXG4gICAgICBzcGVjaWFsV29yZENoYXJzOiBQbFNxbEZvcm1hdHRlci5zcGVjaWFsV29yZENoYXJzLFxuICAgICAgb3BlcmF0b3JzOiBQbFNxbEZvcm1hdHRlci5vcGVyYXRvcnMsXG4gICAgfSk7XG4gIH1cblxuICB0b2tlbk92ZXJyaWRlKHRva2VuOiBUb2tlbikge1xuICAgIC8vIGB0YWJsZWBbLl1gY29sdW1uYFxuICAgIGlmIChcbiAgICAgIHRva2VuLnZhbHVlID09PSAnLicgJiZcbiAgICAgIHRoaXMudG9rZW5Mb29rQWhlYWQoKS52YWx1ZS5zdGFydHNXaXRoKCdgJykgJiZcbiAgICAgIHRoaXMudG9rZW5Mb29rQmVoaW5kKCkudmFsdWUuZW5kc1dpdGgoJ2AnKVxuICAgICkge1xuICAgICAgLy8gVGhpcyBpcyBhbiBvcGVyYXRvciwgZG8gbm90IGluc2VydCBzcGFjZXNcbiAgICAgIHJldHVybiB7IHR5cGU6IFRva2VuVHlwZS5PUEVSQVRPUiwgdmFsdWU6IHRva2VuLnZhbHVlIH07XG4gICAgfVxuXG4gICAgLy8gQlkgW1NFVF1cbiAgICBpZiAoaXNUb2tlbi5TRVQodG9rZW4pICYmIGlzVG9rZW4uQlkodGhpcy5nZXRQcmV2aW91c1Jlc2VydmVkVG9rZW4oKSkpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6IFRva2VuVHlwZS5SRVNFUlZFRF9LRVlXT1JELCB2YWx1ZTogdG9rZW4udmFsdWUgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gdG9rZW47XG4gIH1cbn1cbiIsImltcG9ydCBGb3JtYXR0ZXIgZnJvbSAnLi4vY29yZS9Gb3JtYXR0ZXInO1xuaW1wb3J0IFRva2VuaXplciBmcm9tICcuLi9jb3JlL1Rva2VuaXplcic7XG5pbXBvcnQgdHlwZSB7IFN0cmluZ1BhdHRlcm5UeXBlIH0gZnJvbSAnLi4vY29yZS9yZWdleEZhY3RvcnknO1xuaW1wb3J0IHsgZGVkdXBlIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG4vKipcbiAqIFByaW9yaXR5IDUgKGxhc3QpXG4gKiBGdWxsIGxpc3Qgb2YgcmVzZXJ2ZWQgZnVuY3Rpb25zXG4gKiBkaXN0aW5jdCBmcm9tIEtleXdvcmRzIGR1ZSB0byBpbnRlcmFjdGlvbiB3aXRoIHBhcmVudGhlc2VzXG4gKi9cbi8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTQvZnVuY3Rpb25zLmh0bWxcbmNvbnN0IHJlc2VydmVkRnVuY3Rpb25zID0ge1xuICAvLyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzE0L2Z1bmN0aW9ucy1tYXRoLmh0bWxcbiAgbWF0aDogW1xuICAgICdBQlMnLFxuICAgICdBQ09TJyxcbiAgICAnQUNPU0QnLFxuICAgICdBQ09TSCcsXG4gICAgJ0FTSU4nLFxuICAgICdBU0lORCcsXG4gICAgJ0FTSU5IJyxcbiAgICAnQVRBTicsXG4gICAgJ0FUQU4yJyxcbiAgICAnQVRBTjJEJyxcbiAgICAnQVRBTkQnLFxuICAgICdBVEFOSCcsXG4gICAgJ0NCUlQnLFxuICAgICdDRUlMJyxcbiAgICAnQ0VJTElORycsXG4gICAgJ0NPUycsXG4gICAgJ0NPU0QnLFxuICAgICdDT1NIJyxcbiAgICAnQ09UJyxcbiAgICAnQ09URCcsXG4gICAgJ0RFR1JFRVMnLFxuICAgICdESVYnLFxuICAgICdFWFAnLFxuICAgICdGQUNUT1JJQUwnLFxuICAgICdGTE9PUicsXG4gICAgJ0dDRCcsXG4gICAgJ0xDTScsXG4gICAgJ0xOJyxcbiAgICAnTE9HJyxcbiAgICAnTE9HMTAnLFxuICAgICdNSU5fU0NBTEUnLFxuICAgICdNT0QnLFxuICAgICdQSScsXG4gICAgJ1BPV0VSJyxcbiAgICAnUkFESUFOUycsXG4gICAgJ1JBTkRPTScsXG4gICAgJ1JPVU5EJyxcbiAgICAnU0NBTEUnLFxuICAgICdTRVRTRUVEJyxcbiAgICAnU0lHTicsXG4gICAgJ1NJTicsXG4gICAgJ1NJTkQnLFxuICAgICdTSU5IJyxcbiAgICAnU1FSVCcsXG4gICAgJ1RBTicsXG4gICAgJ1RBTkQnLFxuICAgICdUQU5IJyxcbiAgICAnVFJJTV9TQ0FMRScsXG4gICAgJ1RSVU5DJyxcbiAgICAnV0lEVEhfQlVDS0VUJyxcbiAgXSxcbiAgLy8gaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy8xNC9mdW5jdGlvbnMtc3RyaW5nLmh0bWxcbiAgc3RyaW5nOiBbXG4gICAgJ0FCUycsXG4gICAgJ0FTQ0lJJyxcbiAgICAnQklUX0xFTkdUSCcsXG4gICAgJ0JUUklNJyxcbiAgICAnQ0hBUkFDVEVSX0xFTkdUSCcsXG4gICAgJ0NIQVJfTEVOR1RIJyxcbiAgICAnQ0hSJyxcbiAgICAnQ09OQ0FUJyxcbiAgICAnQ09OQ0FUX1dTJyxcbiAgICAnRk9STUFUJyxcbiAgICAnSU5JVENBUCcsXG4gICAgJ0xFRlQnLFxuICAgICdMRU5HVEgnLFxuICAgICdMT1dFUicsXG4gICAgJ0xQQUQnLFxuICAgICdMVFJJTScsXG4gICAgJ01ENScsXG4gICAgJ05PUk1BTElaRScsXG4gICAgJ09DVEVUX0xFTkdUSCcsXG4gICAgJ09WRVJMQVknLFxuICAgICdQQVJTRV9JREVOVCcsXG4gICAgJ1BHX0NMSUVOVF9FTkNPRElORycsXG4gICAgJ1BPU0lUSU9OJyxcbiAgICAnUVVPVEVfSURFTlQnLFxuICAgICdRVU9URV9MSVRFUkFMJyxcbiAgICAnUVVPVEVfTlVMTEFCTEUnLFxuICAgICdSRUdFWFBfTUFUQ0gnLFxuICAgICdSRUdFWFBfTUFUQ0hFUycsXG4gICAgJ1JFR0VYUF9SRVBMQUNFJyxcbiAgICAnUkVHRVhQX1NQTElUX1RPX0FSUkFZJyxcbiAgICAnUkVHRVhQX1NQTElUX1RPX1RBQkxFJyxcbiAgICAnUkVQRUFUJyxcbiAgICAnUkVQTEFDRScsXG4gICAgJ1JFVkVSU0UnLFxuICAgICdSSUdIVCcsXG4gICAgJ1JQQUQnLFxuICAgICdSVFJJTScsXG4gICAgJ1NQTElUX1BBUlQnLFxuICAgICdTUFJJTlRGJyxcbiAgICAnU1RBUlRTX1dJVEgnLFxuICAgICdTVFJJTkdfQUdHJyxcbiAgICAnU1RSSU5HX1RPX0FSUkFZJyxcbiAgICAnU1RSSU5HX1RPX1RBQkxFJyxcbiAgICAnU1RSUE9TJyxcbiAgICAnU1VCU1RSJyxcbiAgICAnU1VCU1RSSU5HJyxcbiAgICAnVE9fQVNDSUknLFxuICAgICdUT19IRVgnLFxuICAgICdUUkFOU0xBVEUnLFxuICAgICdUUklNJyxcbiAgICAnVU5JU1RSJyxcbiAgICAnVVBQRVInLFxuICBdLFxuICAvLyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzE0L2Z1bmN0aW9ucy1iaW5hcnlzdHJpbmcuaHRtbFxuICBiaW5hcnk6IFtcbiAgICAnQklUX0NPVU5UJyxcbiAgICAnQklUX0xFTkdUSCcsXG4gICAgJ0JUUklNJyxcbiAgICAnQ09OVkVSVCcsXG4gICAgJ0NPTlZFUlRfRlJPTScsXG4gICAgJ0NPTlZFUlRfVE8nLFxuICAgICdERUNPREUnLFxuICAgICdFTkNPREUnLFxuICAgICdHRVRfQklUJyxcbiAgICAnR0VUX0JZVEUnLFxuICAgICdMRU5HVEgnLFxuICAgICdMVFJJTScsXG4gICAgJ01ENScsXG4gICAgJ09DVEVUX0xFTkdUSCcsXG4gICAgJ09WRVJMQVknLFxuICAgICdQT1NJVElPTicsXG4gICAgJ1JUUklNJyxcbiAgICAnU0VUX0JJVCcsXG4gICAgJ1NFVF9CWVRFJyxcbiAgICAnU0hBMjI0JyxcbiAgICAnU0hBMjU2JyxcbiAgICAnU0hBMzg0JyxcbiAgICAnU0hBNTEyJyxcbiAgICAnU1RSSU5HX0FHRycsXG4gICAgJ1NVQlNUUicsXG4gICAgJ1NVQlNUUklORycsXG4gICAgJ1RSSU0nLFxuICBdLFxuICAvLyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzE0L2Z1bmN0aW9ucy1iaXRzdHJpbmcuaHRtbFxuICBiaXRzdHJpbmc6IFtcbiAgICAnQklUX0NPVU5UJyxcbiAgICAnQklUX0xFTkdUSCcsXG4gICAgJ0dFVF9CSVQnLFxuICAgICdMRU5HVEgnLFxuICAgICdPQ1RFVF9MRU5HVEgnLFxuICAgICdPVkVSTEFZJyxcbiAgICAnUE9TSVRJT04nLFxuICAgICdTRVRfQklUJyxcbiAgICAnU1VCU1RSSU5HJyxcbiAgXSxcbiAgLy8gaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy8xNC9mdW5jdGlvbnMtbWF0Y2hpbmcuaHRtbFxuICBwYXR0ZXJuOiBbXG4gICAgJ1JFR0VYUF9NQVRDSCcsXG4gICAgJ1JFR0VYUF9NQVRDSEVTJyxcbiAgICAnUkVHRVhQX1JFUExBQ0UnLFxuICAgICdSRUdFWFBfU1BMSVRfVE9fQVJSQVknLFxuICAgICdSRUdFWFBfU1BMSVRfVE9fVEFCTEUnLFxuICBdLFxuICAvLyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzE0L2Z1bmN0aW9ucy1mb3JtYXR0aW5nLmh0bWxcbiAgZGF0YXR5cGU6IFsnVE9fQ0hBUicsICdUT19EQVRFJywgJ1RPX05VTUJFUicsICdUT19USU1FU1RBTVAnXSxcbiAgLy8gaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy8xNC9mdW5jdGlvbnMtZGF0ZXRpbWUuaHRtbFxuICBkYXRldGltZTogW1xuICAgIC8vICdBR0UnLFxuICAgICdDTE9DS19USU1FU1RBTVAnLFxuICAgICdDVVJSRU5UX0RBVEUnLFxuICAgICdDVVJSRU5UX1RJTUUnLFxuICAgICdDVVJSRU5UX1RJTUVTVEFNUCcsXG4gICAgJ0RBVEVfQklOJyxcbiAgICAnREFURV9QQVJUJyxcbiAgICAnREFURV9UUlVOQycsXG4gICAgJ0VYVFJBQ1QnLFxuICAgICdJU0ZJTklURScsXG4gICAgJ0pVU1RJRllfREFZUycsXG4gICAgJ0pVU1RJRllfSE9VUlMnLFxuICAgICdKVVNUSUZZX0lOVEVSVkFMJyxcbiAgICAnTE9DQUxUSU1FJyxcbiAgICAnTE9DQUxUSU1FU1RBTVAnLFxuICAgICdNQUtFX0RBVEUnLFxuICAgICdNQUtFX0lOVEVSVkFMJyxcbiAgICAnTUFLRV9USU1FJyxcbiAgICAnTUFLRV9USU1FU1RBTVAnLFxuICAgICdNQUtFX1RJTUVTVEFNUFRaJyxcbiAgICAnTk9XJyxcbiAgICAnUEdfU0xFRVAnLFxuICAgICdQR19TTEVFUF9GT1InLFxuICAgICdQR19TTEVFUF9VTlRJTCcsXG4gICAgJ1NUQVRFTUVOVF9USU1FU1RBTVAnLFxuICAgICdUSU1FT0ZEQVknLFxuICAgICdUT19USU1FU1RBTVAnLFxuICAgICdUUkFOU0FDVElPTl9USU1FU1RBTVAnLFxuICBdLFxuICAvLyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzE0L2Z1bmN0aW9ucy1lbnVtLmh0bWxcbiAgZW51bTogWydFTlVNX0ZJUlNUJywgJ0VOVU1fTEFTVCcsICdFTlVNX1JBTkdFJ10sXG4gIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTQvZnVuY3Rpb25zLWdlb21ldHJ5Lmh0bWxcbiAgZ2VvbWV0cnk6IFtcbiAgICAnQVJFQScsXG4gICAgJ0JPVU5EX0JPWCcsXG4gICAgJ0JPWCcsXG4gICAgJ0NFTlRFUicsXG4gICAgJ0NJUkNMRScsXG4gICAgJ0RJQUdPTkFMJyxcbiAgICAnRElBTUVURVInLFxuICAgICdIRUlHSFQnLFxuICAgICdJU0NMT1NFRCcsXG4gICAgJ0lTT1BFTicsXG4gICAgJ0xFTkdUSCcsXG4gICAgJ0xJTkUnLFxuICAgICdMU0VHJyxcbiAgICAnTlBPSU5UUycsXG4gICAgJ1BBVEgnLFxuICAgICdQQ0xPU0UnLFxuICAgICdQT0lOVCcsXG4gICAgJ1BPTFlHT04nLFxuICAgICdQT1BFTicsXG4gICAgJ1JBRElVUycsXG4gICAgJ1NMT1BFJyxcbiAgICAnV0lEVEgnLFxuICBdLFxuICAvLyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzE0L2Z1bmN0aW9ucy1uZXQuaHRtbFxuICBuZXR3b3JrOiBbXG4gICAgJ0FCQlJFVicsXG4gICAgJ0JST0FEQ0FTVCcsXG4gICAgJ0ZBTUlMWScsXG4gICAgJ0hPU1QnLFxuICAgICdIT1NUTUFTSycsXG4gICAgJ0lORVRfTUVSR0UnLFxuICAgICdJTkVUX1NBTUVfRkFNSUxZJyxcbiAgICAnTUFDQUREUjhfU0VUN0JJVCcsXG4gICAgJ01BU0tMRU4nLFxuICAgICdORVRNQVNLJyxcbiAgICAnTkVUV09SSycsXG4gICAgJ1NFVF9NQVNLTEVOJyxcbiAgICAnVEVYVCcsXG4gICAgJ1RSVU5DJyxcbiAgXSxcbiAgLy8gaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy8xNC9mdW5jdGlvbnMtdGV4dHNlYXJjaC5odG1sXG4gIHRleHRzZWFyY2g6IFtcbiAgICAnQVJSQVlfVE9fVFNWRUNUT1InLFxuICAgICdHRVRfQ1VSUkVOVF9UU19DT05GSUcnLFxuICAgICdKU09OQl9UT19UU1ZFQ1RPUicsXG4gICAgJ0pTT05fVE9fVFNWRUNUT1InLFxuICAgICdMRU5HVEgnLFxuICAgICdOVU1OT0RFJyxcbiAgICAnUEhSQVNFVE9fVFNRVUVSWScsXG4gICAgJ1BMQUlOVE9fVFNRVUVSWScsXG4gICAgJ1FVRVJZVFJFRScsXG4gICAgJ1NFVFdFSUdIVCcsXG4gICAgJ1NUUklQJyxcbiAgICAnVE9fVFNRVUVSWScsXG4gICAgJ1RPX1RTVkVDVE9SJyxcbiAgICAnVFNRVUVSWV9QSFJBU0UnLFxuICAgICdUU1ZFQ1RPUl9UT19BUlJBWScsXG4gICAgJ1RTX0RFQlVHJyxcbiAgICAnVFNfREVMRVRFJyxcbiAgICAnVFNfRklMVEVSJyxcbiAgICAnVFNfSEVBRExJTkUnLFxuICAgICdUU19MRVhJWkUnLFxuICAgICdUU19QQVJTRScsXG4gICAgJ1RTX1JBTksnLFxuICAgICdUU19SQU5LX0NEJyxcbiAgICAnVFNfUkVXUklURScsXG4gICAgJ1RTX1NUQVQnLFxuICAgICdUU19UT0tFTl9UWVBFJyxcbiAgICAnV0VCU0VBUkNIX1RPX1RTUVVFUlknLFxuICBdLFxuICAvLyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzE0L2Z1bmN0aW9ucy11dWlkLmh0bWxcbiAgdXVpZDogWydVVUlEJ10sXG4gIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTQvZnVuY3Rpb25zLXhtbC5odG1sXG4gIHhtbDogW1xuICAgICdDVVJTT1JfVE9fWE1MJyxcbiAgICAnQ1VSU09SX1RPX1hNTFNDSEVNQScsXG4gICAgJ0RBVEFCQVNFX1RPX1hNTCcsXG4gICAgJ0RBVEFCQVNFX1RPX1hNTFNDSEVNQScsXG4gICAgJ0RBVEFCQVNFX1RPX1hNTF9BTkRfWE1MU0NIRU1BJyxcbiAgICAnTkVYVFZBTCcsXG4gICAgJ1FVRVJZX1RPX1hNTCcsXG4gICAgJ1FVRVJZX1RPX1hNTFNDSEVNQScsXG4gICAgJ1FVRVJZX1RPX1hNTF9BTkRfWE1MU0NIRU1BJyxcbiAgICAnU0NIRU1BX1RPX1hNTCcsXG4gICAgJ1NDSEVNQV9UT19YTUxTQ0hFTUEnLFxuICAgICdTQ0hFTUFfVE9fWE1MX0FORF9YTUxTQ0hFTUEnLFxuICAgICdTVFJJTkcnLFxuICAgICdUQUJMRV9UT19YTUwnLFxuICAgICdUQUJMRV9UT19YTUxTQ0hFTUEnLFxuICAgICdUQUJMRV9UT19YTUxfQU5EX1hNTFNDSEVNQScsXG4gICAgJ1hNTEFHRycsXG4gICAgJ1hNTENPTU1FTlQnLFxuICAgICdYTUxDT05DQVQnLFxuICAgICdYTUxFTEVNRU5UJyxcbiAgICAnWE1MRVhJU1RTJyxcbiAgICAnWE1MRk9SRVNUJyxcbiAgICAnWE1MUEFSU0UnLFxuICAgICdYTUxQSScsXG4gICAgJ1hNTFJPT1QnLFxuICAgICdYTUxTRVJJQUxJWkUnLFxuICAgICdYTUxUQUJMRScsXG4gICAgJ1hNTF9JU19XRUxMX0ZPUk1FRCcsXG4gICAgJ1hNTF9JU19XRUxMX0ZPUk1FRF9DT05URU5UJyxcbiAgICAnWE1MX0lTX1dFTExfRk9STUVEX0RPQ1VNRU5UJyxcbiAgICAnWFBBVEgnLFxuICAgICdYUEFUSF9FWElTVFMnLFxuICBdLFxuICAvLyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzE0L2Z1bmN0aW9ucy1qc29uLmh0bWxcbiAganNvbjogW1xuICAgICdBUlJBWV9UT19KU09OJyxcbiAgICAnSlNPTkJfQUdHJyxcbiAgICAnSlNPTkJfQVJSQVlfRUxFTUVOVFMnLFxuICAgICdKU09OQl9BUlJBWV9FTEVNRU5UU19URVhUJyxcbiAgICAnSlNPTkJfQVJSQVlfTEVOR1RIJyxcbiAgICAnSlNPTkJfQlVJTERfQVJSQVknLFxuICAgICdKU09OQl9CVUlMRF9PQkpFQ1QnLFxuICAgICdKU09OQl9FQUNIJyxcbiAgICAnSlNPTkJfRUFDSF9URVhUJyxcbiAgICAnSlNPTkJfRVhUUkFDVF9QQVRIJyxcbiAgICAnSlNPTkJfRVhUUkFDVF9QQVRIX1RFWFQnLFxuICAgICdKU09OQl9JTlNFUlQnLFxuICAgICdKU09OQl9PQkpFQ1QnLFxuICAgICdKU09OQl9PQkpFQ1RfQUdHJyxcbiAgICAnSlNPTkJfT0JKRUNUX0tFWVMnLFxuICAgICdKU09OQl9QQVRIX0VYSVNUUycsXG4gICAgJ0pTT05CX1BBVEhfRVhJU1RTX1RaJyxcbiAgICAnSlNPTkJfUEFUSF9NQVRDSCcsXG4gICAgJ0pTT05CX1BBVEhfTUFUQ0hfVFonLFxuICAgICdKU09OQl9QQVRIX1FVRVJZJyxcbiAgICAnSlNPTkJfUEFUSF9RVUVSWV9BUlJBWScsXG4gICAgJ0pTT05CX1BBVEhfUVVFUllfQVJSQVlfVFonLFxuICAgICdKU09OQl9QQVRIX1FVRVJZX0ZJUlNUJyxcbiAgICAnSlNPTkJfUEFUSF9RVUVSWV9GSVJTVF9UWicsXG4gICAgJ0pTT05CX1BBVEhfUVVFUllfVFonLFxuICAgICdKU09OQl9QT1BVTEFURV9SRUNPUkQnLFxuICAgICdKU09OQl9QT1BVTEFURV9SRUNPUkRTRVQnLFxuICAgICdKU09OQl9QUkVUVFknLFxuICAgICdKU09OQl9TRVQnLFxuICAgICdKU09OQl9TRVRfTEFYJyxcbiAgICAnSlNPTkJfU1RSSVBfTlVMTFMnLFxuICAgICdKU09OQl9UT19SRUNPUkQnLFxuICAgICdKU09OQl9UT19SRUNPUkRTRVQnLFxuICAgICdKU09OQl9UWVBFT0YnLFxuICAgICdKU09OX0FHRycsXG4gICAgJ0pTT05fQVJSQVlfRUxFTUVOVFMnLFxuICAgICdKU09OX0FSUkFZX0VMRU1FTlRTX1RFWFQnLFxuICAgICdKU09OX0FSUkFZX0xFTkdUSCcsXG4gICAgJ0pTT05fQlVJTERfQVJSQVknLFxuICAgICdKU09OX0JVSUxEX09CSkVDVCcsXG4gICAgJ0pTT05fRUFDSCcsXG4gICAgJ0pTT05fRUFDSF9URVhUJyxcbiAgICAnSlNPTl9FWFRSQUNUX1BBVEgnLFxuICAgICdKU09OX0VYVFJBQ1RfUEFUSF9URVhUJyxcbiAgICAnSlNPTl9PQkpFQ1QnLFxuICAgICdKU09OX09CSkVDVF9BR0cnLFxuICAgICdKU09OX09CSkVDVF9LRVlTJyxcbiAgICAnSlNPTl9QT1BVTEFURV9SRUNPUkQnLFxuICAgICdKU09OX1BPUFVMQVRFX1JFQ09SRFNFVCcsXG4gICAgJ0pTT05fU1RSSVBfTlVMTFMnLFxuICAgICdKU09OX1RPX1JFQ09SRCcsXG4gICAgJ0pTT05fVE9fUkVDT1JEU0VUJyxcbiAgICAnSlNPTl9UWVBFT0YnLFxuICAgICdST1dfVE9fSlNPTicsXG4gICAgJ1RPX0pTT04nLFxuICAgICdUT19KU09OQicsXG4gICAgJ1RPX1RJTUVTVEFNUCcsXG4gIF0sXG4gIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTQvZnVuY3Rpb25zLXNlcXVlbmNlLmh0bWxcbiAgc2VxdWVuY2U6IFsnQ1VSUlZBTCcsICdMQVNUVkFMJywgJ05FWFRWQUwnLCAnU0VUVkFMJ10sXG4gIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTQvZnVuY3Rpb25zLWNvbmRpdGlvbmFsLmh0bWxcbiAgY29uZGl0aW9uYWw6IFtcbiAgICAvLyAnQ0FTRScsXG4gICAgJ0NPQUxFU0NFJyxcbiAgICAnR1JFQVRFU1QnLFxuICAgICdMRUFTVCcsXG4gICAgJ05VTExJRicsXG4gIF0sXG4gIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTQvZnVuY3Rpb25zLWFycmF5Lmh0bWxcbiAgYXJyYXk6IFtcbiAgICAnQVJSQVlfQUdHJyxcbiAgICAnQVJSQVlfQVBQRU5EJyxcbiAgICAnQVJSQVlfQ0FUJyxcbiAgICAnQVJSQVlfRElNUycsXG4gICAgJ0FSUkFZX0ZJTEwnLFxuICAgICdBUlJBWV9MRU5HVEgnLFxuICAgICdBUlJBWV9MT1dFUicsXG4gICAgJ0FSUkFZX05ESU1TJyxcbiAgICAnQVJSQVlfUE9TSVRJT04nLFxuICAgICdBUlJBWV9QT1NJVElPTlMnLFxuICAgICdBUlJBWV9QUkVQRU5EJyxcbiAgICAnQVJSQVlfUkVNT1ZFJyxcbiAgICAnQVJSQVlfUkVQTEFDRScsXG4gICAgJ0FSUkFZX1RPX1NUUklORycsXG4gICAgJ0FSUkFZX1VQUEVSJyxcbiAgICAnQ0FSRElOQUxJVFknLFxuICAgICdTVFJJTkdfVE9fQVJSQVknLFxuICAgICdUUklNX0FSUkFZJyxcbiAgICAnVU5ORVNUJyxcbiAgXSxcbiAgLy8gaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy8xNC9mdW5jdGlvbnMtcmFuZ2UuaHRtbFxuICByYW5nZTogW1xuICAgICdJU0VNUFRZJyxcbiAgICAnTE9XRVInLFxuICAgICdMT1dFUl9JTkMnLFxuICAgICdMT1dFUl9JTkYnLFxuICAgICdNVUxUSVJBTkdFJyxcbiAgICAnUkFOR0VfTUVSR0UnLFxuICAgICdVUFBFUicsXG4gICAgJ1VQUEVSX0lOQycsXG4gICAgJ1VQUEVSX0lORicsXG4gIF0sXG4gIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTQvZnVuY3Rpb25zLWFnZ3JlZ2F0ZS5odG1sXG4gIGFnZ3JlZ2F0ZTogW1xuICAgICdBTlknLFxuICAgICdBUlJBWV9BR0cnLFxuICAgICdBVkcnLFxuICAgICdCSVRfQU5EJyxcbiAgICAnQklUX09SJyxcbiAgICAnQklUX1hPUicsXG4gICAgJ0JPT0xfQU5EJyxcbiAgICAnQk9PTF9PUicsXG4gICAgJ0NPQUxFU0NFJyxcbiAgICAnQ09SUicsXG4gICAgJ0NPVU5UJyxcbiAgICAnQ09WQVJfUE9QJyxcbiAgICAnQ09WQVJfU0FNUCcsXG4gICAgJ0NVTUVfRElTVCcsXG4gICAgJ0RFTlNFX1JBTksnLFxuICAgICdFVkVSWScsXG4gICAgJ0dST1VQSU5HJyxcbiAgICAnSlNPTkJfQUdHJyxcbiAgICAnSlNPTkJfT0JKRUNUX0FHRycsXG4gICAgJ0pTT05fQUdHJyxcbiAgICAnSlNPTl9PQkpFQ1RfQUdHJyxcbiAgICAnTUFYJyxcbiAgICAnTUlOJyxcbiAgICAnTU9ERScsXG4gICAgJ1BFUkNFTlRJTEVfQ09OVCcsXG4gICAgJ1BFUkNFTlRJTEVfRElTQycsXG4gICAgJ1BFUkNFTlRfUkFOSycsXG4gICAgJ1JBTkdFX0FHRycsXG4gICAgJ1JBTkdFX0lOVEVSU0VDVF9BR0cnLFxuICAgICdSQU5LJyxcbiAgICAnUkVHUl9BVkdYJyxcbiAgICAnUkVHUl9BVkdZJyxcbiAgICAnUkVHUl9DT1VOVCcsXG4gICAgJ1JFR1JfSU5URVJDRVBUJyxcbiAgICAnUkVHUl9SMicsXG4gICAgJ1JFR1JfU0xPUEUnLFxuICAgICdSRUdSX1NYWCcsXG4gICAgJ1JFR1JfU1hZJyxcbiAgICAnUkVHUl9TWVknLFxuICAgICdTT01FJyxcbiAgICAnU1REREVWJyxcbiAgICAnU1REREVWX1BPUCcsXG4gICAgJ1NURERFVl9TQU1QJyxcbiAgICAnU1RSSU5HX0FHRycsXG4gICAgJ1NVTScsXG4gICAgJ1RPX0pTT04nLFxuICAgICdUT19KU09OQicsXG4gICAgJ1ZBUklBTkNFJyxcbiAgICAnVkFSX1BPUCcsXG4gICAgJ1ZBUl9TQU1QJyxcbiAgICAnWE1MQUdHJyxcbiAgXSxcbiAgLy8gaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy8xNC9mdW5jdGlvbnMtd2luZG93Lmh0bWxcbiAgd2luZG93OiBbXG4gICAgJ0NVTUVfRElTVCcsXG4gICAgJ0RFTlNFX1JBTksnLFxuICAgICdGSVJTVF9WQUxVRScsXG4gICAgJ0xBRycsXG4gICAgJ0xBU1RfVkFMVUUnLFxuICAgICdMRUFEJyxcbiAgICAnTlRIX1ZBTFVFJyxcbiAgICAnTlRJTEUnLFxuICAgICdQRVJDRU5UX1JBTksnLFxuICAgICdSQU5LJyxcbiAgICAnUk9XX05VTUJFUicsXG4gIF0sXG4gIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTQvZnVuY3Rpb25zLXNyZi5odG1sXG4gIHNldDogWydHRU5FUkFURV9TRVJJRVMnLCAnR0VORVJBVEVfU1VCU0NSSVBUUyddLFxuICAvLyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzE0L2Z1bmN0aW9ucy1pbmZvLmh0bWxcbiAgc3lzSW5mbzogW1xuICAgICdBQ0xERUZBVUxUJyxcbiAgICAnQUNMRVhQTE9ERScsXG4gICAgJ0NPTF9ERVNDUklQVElPTicsXG4gICAgJ0NVUlJFTlRfQ0FUQUxPRycsXG4gICAgJ0NVUlJFTlRfREFUQUJBU0UnLFxuICAgICdDVVJSRU5UX1FVRVJZJyxcbiAgICAnQ1VSUkVOVF9ST0xFJyxcbiAgICAnQ1VSUkVOVF9TQ0hFTUEnLFxuICAgICdDVVJSRU5UX1NDSEVNQVMnLFxuICAgICdDVVJSRU5UX1VTRVInLFxuICAgICdGT1JNQVRfVFlQRScsXG4gICAgJ0hBU19BTllfQ09MVU1OX1BSSVZJTEVHRScsXG4gICAgJ0hBU19DT0xVTU5fUFJJVklMRUdFJyxcbiAgICAnSEFTX0RBVEFCQVNFX1BSSVZJTEVHRScsXG4gICAgJ0hBU19GT1JFSUdOX0RBVEFfV1JBUFBFUl9QUklWSUxFR0UnLFxuICAgICdIQVNfRlVOQ1RJT05fUFJJVklMRUdFJyxcbiAgICAnSEFTX0xBTkdVQUdFX1BSSVZJTEVHRScsXG4gICAgJ0hBU19TQ0hFTUFfUFJJVklMRUdFJyxcbiAgICAnSEFTX1NFUVVFTkNFX1BSSVZJTEVHRScsXG4gICAgJ0hBU19TRVJWRVJfUFJJVklMRUdFJyxcbiAgICAnSEFTX1RBQkxFU1BBQ0VfUFJJVklMRUdFJyxcbiAgICAnSEFTX1RBQkxFX1BSSVZJTEVHRScsXG4gICAgJ0hBU19UWVBFX1BSSVZJTEVHRScsXG4gICAgJ0lORVRfQ0xJRU5UX0FERFInLFxuICAgICdJTkVUX0NMSUVOVF9QT1JUJyxcbiAgICAnSU5FVF9TRVJWRVJfQUREUicsXG4gICAgJ0lORVRfU0VSVkVSX1BPUlQnLFxuICAgICdNQUtFQUNMSVRFTScsXG4gICAgJ09CSl9ERVNDUklQVElPTicsXG4gICAgJ1BHX0JBQ0tFTkRfUElEJyxcbiAgICAnUEdfQkxPQ0tJTkdfUElEUycsXG4gICAgJ1BHX0NPTExBVElPTl9JU19WSVNJQkxFJyxcbiAgICAnUEdfQ09ORl9MT0FEX1RJTUUnLFxuICAgICdQR19DT05UUk9MX0NIRUNLUE9JTlQnLFxuICAgICdQR19DT05UUk9MX0lOSVQnLFxuICAgICdQR19DT05UUk9MX1NZU1RFTScsXG4gICAgJ1BHX0NPTlZFUlNJT05fSVNfVklTSUJMRScsXG4gICAgJ1BHX0NVUlJFTlRfTE9HRklMRScsXG4gICAgJ1BHX0NVUlJFTlRfU05BUFNIT1QnLFxuICAgICdQR19DVVJSRU5UX1hBQ1RfSUQnLFxuICAgICdQR19DVVJSRU5UX1hBQ1RfSURfSUZfQVNTSUdORUQnLFxuICAgICdQR19ERVNDUklCRV9PQkpFQ1QnLFxuICAgICdQR19GVU5DVElPTl9JU19WSVNJQkxFJyxcbiAgICAnUEdfR0VUX0NBVEFMT0dfRk9SRUlHTl9LRVlTJyxcbiAgICAnUEdfR0VUX0NPTlNUUkFJTlRERUYnLFxuICAgICdQR19HRVRfRVhQUicsXG4gICAgJ1BHX0dFVF9GVU5DVElPTkRFRicsXG4gICAgJ1BHX0dFVF9GVU5DVElPTl9BUkdVTUVOVFMnLFxuICAgICdQR19HRVRfRlVOQ1RJT05fSURFTlRJVFlfQVJHVU1FTlRTJyxcbiAgICAnUEdfR0VUX0ZVTkNUSU9OX1JFU1VMVCcsXG4gICAgJ1BHX0dFVF9JTkRFWERFRicsXG4gICAgJ1BHX0dFVF9LRVlXT1JEUycsXG4gICAgJ1BHX0dFVF9PQkpFQ1RfQUREUkVTUycsXG4gICAgJ1BHX0dFVF9PV05FRF9TRVFVRU5DRScsXG4gICAgJ1BHX0dFVF9SVUxFREVGJyxcbiAgICAnUEdfR0VUX1NFUklBTF9TRVFVRU5DRScsXG4gICAgJ1BHX0dFVF9TVEFUSVNUSUNTT0JKREVGJyxcbiAgICAnUEdfR0VUX1RSSUdHRVJERUYnLFxuICAgICdQR19HRVRfVVNFUkJZSUQnLFxuICAgICdQR19HRVRfVklFV0RFRicsXG4gICAgJ1BHX0hBU19ST0xFJyxcbiAgICAnUEdfSURFTlRJRllfT0JKRUNUJyxcbiAgICAnUEdfSURFTlRJRllfT0JKRUNUX0FTX0FERFJFU1MnLFxuICAgICdQR19JTkRFWEFNX0hBU19QUk9QRVJUWScsXG4gICAgJ1BHX0lOREVYX0NPTFVNTl9IQVNfUFJPUEVSVFknLFxuICAgICdQR19JTkRFWF9IQVNfUFJPUEVSVFknLFxuICAgICdQR19JU19PVEhFUl9URU1QX1NDSEVNQScsXG4gICAgJ1BHX0pJVF9BVkFJTEFCTEUnLFxuICAgICdQR19MQVNUX0NPTU1JVFRFRF9YQUNUJyxcbiAgICAnUEdfTElTVEVOSU5HX0NIQU5ORUxTJyxcbiAgICAnUEdfTVlfVEVNUF9TQ0hFTUEnLFxuICAgICdQR19OT1RJRklDQVRJT05fUVVFVUVfVVNBR0UnLFxuICAgICdQR19PUENMQVNTX0lTX1ZJU0lCTEUnLFxuICAgICdQR19PUEVSQVRPUl9JU19WSVNJQkxFJyxcbiAgICAnUEdfT1BGQU1JTFlfSVNfVklTSUJMRScsXG4gICAgJ1BHX09QVElPTlNfVE9fVEFCTEUnLFxuICAgICdQR19QT1NUTUFTVEVSX1NUQVJUX1RJTUUnLFxuICAgICdQR19TQUZFX1NOQVBTSE9UX0JMT0NLSU5HX1BJRFMnLFxuICAgICdQR19TTkFQU0hPVF9YSVAnLFxuICAgICdQR19TTkFQU0hPVF9YTUFYJyxcbiAgICAnUEdfU05BUFNIT1RfWE1JTicsXG4gICAgJ1BHX1NUQVRJU1RJQ1NfT0JKX0lTX1ZJU0lCTEUnLFxuICAgICdQR19UQUJMRVNQQUNFX0RBVEFCQVNFUycsXG4gICAgJ1BHX1RBQkxFU1BBQ0VfTE9DQVRJT04nLFxuICAgICdQR19UQUJMRV9JU19WSVNJQkxFJyxcbiAgICAnUEdfVFJJR0dFUl9ERVBUSCcsXG4gICAgJ1BHX1RTX0NPTkZJR19JU19WSVNJQkxFJyxcbiAgICAnUEdfVFNfRElDVF9JU19WSVNJQkxFJyxcbiAgICAnUEdfVFNfUEFSU0VSX0lTX1ZJU0lCTEUnLFxuICAgICdQR19UU19URU1QTEFURV9JU19WSVNJQkxFJyxcbiAgICAnUEdfVFlQRU9GJyxcbiAgICAnUEdfVFlQRV9JU19WSVNJQkxFJyxcbiAgICAnUEdfVklTSUJMRV9JTl9TTkFQU0hPVCcsXG4gICAgJ1BHX1hBQ1RfQ09NTUlUX1RJTUVTVEFNUCcsXG4gICAgJ1BHX1hBQ1RfQ09NTUlUX1RJTUVTVEFNUF9PUklHSU4nLFxuICAgICdQR19YQUNUX1NUQVRVUycsXG4gICAgJ1BRU0VSVkVSVkVSU0lPTicsXG4gICAgJ1JPV19TRUNVUklUWV9BQ1RJVkUnLFxuICAgICdTRVNTSU9OX1VTRVInLFxuICAgICdTSE9CSl9ERVNDUklQVElPTicsXG4gICAgJ1RPX1JFR0NMQVNTJyxcbiAgICAnVE9fUkVHQ09MTEFUSU9OJyxcbiAgICAnVE9fUkVHTkFNRVNQQUNFJyxcbiAgICAnVE9fUkVHT1BFUicsXG4gICAgJ1RPX1JFR09QRVJBVE9SJyxcbiAgICAnVE9fUkVHUFJPQycsXG4gICAgJ1RPX1JFR1BST0NFRFVSRScsXG4gICAgJ1RPX1JFR1JPTEUnLFxuICAgICdUT19SRUdUWVBFJyxcbiAgICAnVFhJRF9DVVJSRU5UJyxcbiAgICAnVFhJRF9DVVJSRU5UX0lGX0FTU0lHTkVEJyxcbiAgICAnVFhJRF9DVVJSRU5UX1NOQVBTSE9UJyxcbiAgICAnVFhJRF9TTkFQU0hPVF9YSVAnLFxuICAgICdUWElEX1NOQVBTSE9UX1hNQVgnLFxuICAgICdUWElEX1NOQVBTSE9UX1hNSU4nLFxuICAgICdUWElEX1NUQVRVUycsXG4gICAgJ1RYSURfVklTSUJMRV9JTl9TTkFQU0hPVCcsXG4gICAgJ1VTRVInLFxuICAgICdWRVJTSU9OJyxcbiAgXSxcbiAgLy8gaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy8xNC9mdW5jdGlvbnMtYWRtaW4uaHRtbFxuICBzeXNBZG1pbjogW1xuICAgICdCUklOX0RFU1VNTUFSSVpFX1JBTkdFJyxcbiAgICAnQlJJTl9TVU1NQVJJWkVfTkVXX1ZBTFVFUycsXG4gICAgJ0JSSU5fU1VNTUFSSVpFX1JBTkdFJyxcbiAgICAnQ09OVkVSVF9GUk9NJyxcbiAgICAnQ1VSUkVOVF9TRVRUSU5HJyxcbiAgICAnR0lOX0NMRUFOX1BFTkRJTkdfTElTVCcsXG4gICAgJ1BHX0FEVklTT1JZX0xPQ0snLFxuICAgICdQR19BRFZJU09SWV9MT0NLX1NIQVJFRCcsXG4gICAgJ1BHX0FEVklTT1JZX1VOTE9DSycsXG4gICAgJ1BHX0FEVklTT1JZX1VOTE9DS19BTEwnLFxuICAgICdQR19BRFZJU09SWV9VTkxPQ0tfU0hBUkVEJyxcbiAgICAnUEdfQURWSVNPUllfWEFDVF9MT0NLJyxcbiAgICAnUEdfQURWSVNPUllfWEFDVF9MT0NLX1NIQVJFRCcsXG4gICAgJ1BHX0JBQ0tVUF9TVEFSVF9USU1FJyxcbiAgICAnUEdfQ0FOQ0VMX0JBQ0tFTkQnLFxuICAgICdQR19DT0xMQVRJT05fQUNUVUFMX1ZFUlNJT04nLFxuICAgICdQR19DT0xVTU5fQ09NUFJFU1NJT04nLFxuICAgICdQR19DT0xVTU5fU0laRScsXG4gICAgJ1BHX0NPUFlfTE9HSUNBTF9SRVBMSUNBVElPTl9TTE9UJyxcbiAgICAnUEdfQ09QWV9QSFlTSUNBTF9SRVBMSUNBVElPTl9TTE9UJyxcbiAgICAnUEdfQ1JFQVRFX0xPR0lDQUxfUkVQTElDQVRJT05fU0xPVCcsXG4gICAgJ1BHX0NSRUFURV9QSFlTSUNBTF9SRVBMSUNBVElPTl9TTE9UJyxcbiAgICAnUEdfQ1JFQVRFX1JFU1RPUkVfUE9JTlQnLFxuICAgICdQR19DVVJSRU5UX1dBTF9GTFVTSF9MU04nLFxuICAgICdQR19DVVJSRU5UX1dBTF9JTlNFUlRfTFNOJyxcbiAgICAnUEdfQ1VSUkVOVF9XQUxfTFNOJyxcbiAgICAnUEdfREFUQUJBU0VfU0laRScsXG4gICAgJ1BHX0RST1BfUkVQTElDQVRJT05fU0xPVCcsXG4gICAgJ1BHX0VYUE9SVF9TTkFQU0hPVCcsXG4gICAgJ1BHX0ZJTEVOT0RFX1JFTEFUSU9OJyxcbiAgICAnUEdfR0VUX1dBTF9SRVBMQVlfUEFVU0VfU1RBVEUnLFxuICAgICdQR19JTVBPUlRfU1lTVEVNX0NPTExBVElPTlMnLFxuICAgICdQR19JTkRFWEVTX1NJWkUnLFxuICAgICdQR19JU19JTl9CQUNLVVAnLFxuICAgICdQR19JU19JTl9SRUNPVkVSWScsXG4gICAgJ1BHX0lTX1dBTF9SRVBMQVlfUEFVU0VEJyxcbiAgICAnUEdfTEFTVF9XQUxfUkVDRUlWRV9MU04nLFxuICAgICdQR19MQVNUX1dBTF9SRVBMQVlfTFNOJyxcbiAgICAnUEdfTEFTVF9YQUNUX1JFUExBWV9USU1FU1RBTVAnLFxuICAgICdQR19MT0dJQ0FMX0VNSVRfTUVTU0FHRScsXG4gICAgJ1BHX0xPR0lDQUxfU0xPVF9HRVRfQklOQVJZX0NIQU5HRVMnLFxuICAgICdQR19MT0dJQ0FMX1NMT1RfR0VUX0NIQU5HRVMnLFxuICAgICdQR19MT0dJQ0FMX1NMT1RfUEVFS19CSU5BUllfQ0hBTkdFUycsXG4gICAgJ1BHX0xPR0lDQUxfU0xPVF9QRUVLX0NIQU5HRVMnLFxuICAgICdQR19MT0dfQkFDS0VORF9NRU1PUllfQ09OVEVYVFMnLFxuICAgICdQR19MU19BUkNISVZFX1NUQVRVU0RJUicsXG4gICAgJ1BHX0xTX0RJUicsXG4gICAgJ1BHX0xTX0xPR0RJUicsXG4gICAgJ1BHX0xTX1RNUERJUicsXG4gICAgJ1BHX0xTX1dBTERJUicsXG4gICAgJ1BHX1BBUlRJVElPTl9BTkNFU1RPUlMnLFxuICAgICdQR19QQVJUSVRJT05fUk9PVCcsXG4gICAgJ1BHX1BBUlRJVElPTl9UUkVFJyxcbiAgICAnUEdfUFJPTU9URScsXG4gICAgJ1BHX1JFQURfQklOQVJZX0ZJTEUnLFxuICAgICdQR19SRUFEX0ZJTEUnLFxuICAgICdQR19SRUxBVElPTl9GSUxFTk9ERScsXG4gICAgJ1BHX1JFTEFUSU9OX0ZJTEVQQVRIJyxcbiAgICAnUEdfUkVMQVRJT05fU0laRScsXG4gICAgJ1BHX1JFTE9BRF9DT05GJyxcbiAgICAnUEdfUkVQTElDQVRJT05fT1JJR0lOX0FEVkFOQ0UnLFxuICAgICdQR19SRVBMSUNBVElPTl9PUklHSU5fQ1JFQVRFJyxcbiAgICAnUEdfUkVQTElDQVRJT05fT1JJR0lOX0RST1AnLFxuICAgICdQR19SRVBMSUNBVElPTl9PUklHSU5fT0lEJyxcbiAgICAnUEdfUkVQTElDQVRJT05fT1JJR0lOX1BST0dSRVNTJyxcbiAgICAnUEdfUkVQTElDQVRJT05fT1JJR0lOX1NFU1NJT05fSVNfU0VUVVAnLFxuICAgICdQR19SRVBMSUNBVElPTl9PUklHSU5fU0VTU0lPTl9QUk9HUkVTUycsXG4gICAgJ1BHX1JFUExJQ0FUSU9OX09SSUdJTl9TRVNTSU9OX1JFU0VUJyxcbiAgICAnUEdfUkVQTElDQVRJT05fT1JJR0lOX1NFU1NJT05fU0VUVVAnLFxuICAgICdQR19SRVBMSUNBVElPTl9PUklHSU5fWEFDVF9SRVNFVCcsXG4gICAgJ1BHX1JFUExJQ0FUSU9OX09SSUdJTl9YQUNUX1NFVFVQJyxcbiAgICAnUEdfUkVQTElDQVRJT05fU0xPVF9BRFZBTkNFJyxcbiAgICAnUEdfUk9UQVRFX0xPR0ZJTEUnLFxuICAgICdQR19TSVpFX0JZVEVTJyxcbiAgICAnUEdfU0laRV9QUkVUVFknLFxuICAgICdQR19TVEFSVF9CQUNLVVAnLFxuICAgICdQR19TVEFUX0ZJTEUnLFxuICAgICdQR19TVE9QX0JBQ0tVUCcsXG4gICAgJ1BHX1NXSVRDSF9XQUwnLFxuICAgICdQR19UQUJMRVNQQUNFX1NJWkUnLFxuICAgICdQR19UQUJMRV9TSVpFJyxcbiAgICAnUEdfVEVSTUlOQVRFX0JBQ0tFTkQnLFxuICAgICdQR19UT1RBTF9SRUxBVElPTl9TSVpFJyxcbiAgICAnUEdfVFJZX0FEVklTT1JZX0xPQ0snLFxuICAgICdQR19UUllfQURWSVNPUllfTE9DS19TSEFSRUQnLFxuICAgICdQR19UUllfQURWSVNPUllfWEFDVF9MT0NLJyxcbiAgICAnUEdfVFJZX0FEVklTT1JZX1hBQ1RfTE9DS19TSEFSRUQnLFxuICAgICdQR19XQUxGSUxFX05BTUUnLFxuICAgICdQR19XQUxGSUxFX05BTUVfT0ZGU0VUJyxcbiAgICAnUEdfV0FMX0xTTl9ESUZGJyxcbiAgICAnUEdfV0FMX1JFUExBWV9QQVVTRScsXG4gICAgJ1BHX1dBTF9SRVBMQVlfUkVTVU1FJyxcbiAgICAnU0VUX0NPTkZJRycsXG4gIF0sXG4gIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTQvZnVuY3Rpb25zLXRyaWdnZXIuaHRtbFxuICB0cmlnZ2VyOiBbXG4gICAgJ1NVUFBSRVNTX1JFRFVOREFOVF9VUERBVEVTX1RSSUdHRVInLFxuICAgICdUU1ZFQ1RPUl9VUERBVEVfVFJJR0dFUicsXG4gICAgJ1RTVkVDVE9SX1VQREFURV9UUklHR0VSX0NPTFVNTicsXG4gIF0sXG4gIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTQvZnVuY3Rpb25zLWV2ZW50LXRyaWdnZXJzLmh0bWxcbiAgZXZlbnRUcmlnZ2VyOiBbXG4gICAgJ1BHX0VWRU5UX1RSSUdHRVJfRERMX0NPTU1BTkRTJyxcbiAgICAnUEdfRVZFTlRfVFJJR0dFUl9EUk9QUEVEX09CSkVDVFMnLFxuICAgICdQR19FVkVOVF9UUklHR0VSX1RBQkxFX1JFV1JJVEVfT0lEJyxcbiAgICAnUEdfRVZFTlRfVFJJR0dFUl9UQUJMRV9SRVdSSVRFX1JFQVNPTicsXG4gICAgJ1BHX0dFVF9PQkpFQ1RfQUREUkVTUycsXG4gIF0sXG4gIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTQvZnVuY3Rpb25zLXN0YXRpc3RpY3MuaHRtbFxuICBzdGF0czogWydQR19NQ1ZfTElTVF9JVEVNUyddLFxufTtcblxuLyoqXG4gKiBQcmlvcml0eSA1IChsYXN0KVxuICogRnVsbCBsaXN0IG9mIHJlc2VydmVkIHdvcmRzXG4gKiBhbnkgd29yZHMgdGhhdCBhcmUgaW4gYSBoaWdoZXIgcHJpb3JpdHkgYXJlIHJlbW92ZWRcbiAqL1xuLy8gaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy8xNC9zcWwta2V5d29yZHMtYXBwZW5kaXguaHRtbFxuY29uc3QgcmVzZXJ2ZWRLZXl3b3JkcyA9IFtcbiAgJ0FCU0VOVCcsXG4gICdBQlNPTFVURScsXG4gICdBQ0NFU1MnLFxuICAnQUNDT1JESU5HJyxcbiAgJ0FDVElPTicsXG4gICdBREEnLFxuICAnQURNSU4nLFxuICAnQUdHUkVHQVRFJyxcbiAgJ0FMTCcsXG4gICdBTExPQ0FURScsXG4gICdBTFNPJyxcbiAgJ0FMVEVSJyxcbiAgJ0FMV0FZUycsXG4gICdBTkFMWVNFJyxcbiAgJ0FSRScsXG4gICdBUlJBWScsXG4gICdBUlJBWV9NQVhfQ0FSRElOQUxJVFknLFxuICAnQVMnLFxuICAnQVNDJyxcbiAgJ0FTRU5TSVRJVkUnLFxuICAnQVNTRVJUSU9OJyxcbiAgJ0FTU0lHTk1FTlQnLFxuICAnQVNZTU1FVFJJQycsXG4gICdBVCcsXG4gICdBVE9NSUMnLFxuICAnQVRUQUNIJyxcbiAgJ0FUVFJJQlVURScsXG4gICdBVFRSSUJVVEVTJyxcbiAgJ0FVVEhPUklaQVRJT04nLFxuICAnQkFDS1dBUkQnLFxuICAnQkFTRTY0JyxcbiAgJ0JFRk9SRScsXG4gICdCRUdJTl9GUkFNRScsXG4gICdCRUdJTl9QQVJUSVRJT04nLFxuICAnQkVSTk9VTExJJyxcbiAgJ0JFVFdFRU4nLFxuICAnQklHSU5UJyxcbiAgJ0JJTkFSWScsXG4gICdCSVQnLFxuICAnQkxPQicsXG4gICdCTE9DS0VEJyxcbiAgJ0JPTScsXG4gICdCT09MRUFOJyxcbiAgJ0JPVEgnLFxuICAnQlJFQURUSCcsXG4gICdCWScsXG4gICdDQUNIRScsXG4gICdDQUxMRUQnLFxuICAnQ0FTQ0FERScsXG4gICdDQVNDQURFRCcsXG4gICdDQVNUJyxcbiAgJ0NBVEFMT0cnLFxuICAnQ0FUQUxPR19OQU1FJyxcbiAgJ0NIQUlOJyxcbiAgJ0NIQUlOSU5HJyxcbiAgJ0NIQVInLFxuICAnQ0hBUkFDVEVSJyxcbiAgJ0NIQVJBQ1RFUklTVElDUycsXG4gICdDSEFSQUNURVJTJyxcbiAgJ0NIQVJBQ1RFUl9TRVRfQ0FUQUxPRycsXG4gICdDSEFSQUNURVJfU0VUX05BTUUnLFxuICAnQ0hBUkFDVEVSX1NFVF9TQ0hFTUEnLFxuICAnQ0hFQ0snLFxuICAnQ0xBU1MnLFxuICAnQ0xBU1NJRklFUicsXG4gICdDTEFTU19PUklHSU4nLFxuICAnQ0xPQicsXG4gICdDT0JPTCcsXG4gICdDT0xMQVRFJyxcbiAgJ0NPTExBVElPTicsXG4gICdDT0xMQVRJT05fQ0FUQUxPRycsXG4gICdDT0xMQVRJT05fTkFNRScsXG4gICdDT0xMQVRJT05fU0NIRU1BJyxcbiAgJ0NPTExFQ1QnLFxuICAnQ09MVU1OJyxcbiAgJ0NPTFVNTlMnLFxuICAnQ09MVU1OX05BTUUnLFxuICAnQ09NTUFORF9GVU5DVElPTicsXG4gICdDT01NQU5EX0ZVTkNUSU9OX0NPREUnLFxuICAnQ09NTUVOVFMnLFxuICAnQ09NTUlUVEVEJyxcbiAgJ0NPTVBSRVNTSU9OJyxcbiAgJ0NPTkNVUlJFTlRMWScsXG4gICdDT05ESVRJT04nLFxuICAnQ09ORElUSU9OQUwnLFxuICAnQ09ORElUSU9OX05VTUJFUicsXG4gICdDT05GSUdVUkFUSU9OJyxcbiAgJ0NPTkZMSUNUJyxcbiAgJ0NPTk5FQ1QnLFxuICAnQ09OTkVDVElPTicsXG4gICdDT05ORUNUSU9OX05BTUUnLFxuICAnQ09OU1RSQUlOVCcsXG4gICdDT05TVFJBSU5UUycsXG4gICdDT05TVFJBSU5UX0NBVEFMT0cnLFxuICAnQ09OU1RSQUlOVF9OQU1FJyxcbiAgJ0NPTlNUUkFJTlRfU0NIRU1BJyxcbiAgJ0NPTlNUUlVDVE9SJyxcbiAgJ0NPTlRBSU5TJyxcbiAgJ0NPTlRFTlQnLFxuICAnQ09OVElOVUUnLFxuICAnQ09OVFJPTCcsXG4gICdDT05WRVJTSU9OJyxcbiAgJ0NPUlJFU1BPTkRJTkcnLFxuICAnQ09TVCcsXG4gICdDUkVBVEUnLFxuICAnQ1JPU1MnLFxuICAnQ1NWJyxcbiAgJ0NVQkUnLFxuICAnQ1VSUkVOVCcsXG4gICdDVVJSRU5UX0RFRkFVTFRfVFJBTlNGT1JNX0dST1VQJyxcbiAgJ0NVUlJFTlRfUEFUSCcsXG4gICdDVVJSRU5UX1JPVycsXG4gICdDVVJSRU5UX1RSQU5TRk9STV9HUk9VUF9GT1JfVFlQRScsXG4gICdDVVJTT1InLFxuICAnQ1VSU09SX05BTUUnLFxuICAnQ1lDTEUnLFxuICAnREFUQScsXG4gICdEQVRBQkFTRScsXG4gICdEQVRBTElOSycsXG4gICdEQVRFJyxcbiAgJ0RBVEVUSU1FX0lOVEVSVkFMX0NPREUnLFxuICAnREFURVRJTUVfSU5URVJWQUxfUFJFQ0lTSU9OJyxcbiAgJ0RBWScsXG4gICdEQicsXG4gICdERUMnLFxuICAnREVDRkxPQVQnLFxuICAnREVDSU1BTCcsXG4gICdERUZBVUxUJyxcbiAgJ0RFRkFVTFRTJyxcbiAgJ0RFRkVSUkFCTEUnLFxuICAnREVGRVJSRUQnLFxuICAnREVGSU5FJyxcbiAgJ0RFRklORUQnLFxuICAnREVGSU5FUicsXG4gICdERUdSRUUnLFxuICAnREVMSU1JVEVSJyxcbiAgJ0RFTElNSVRFUlMnLFxuICAnREVQRU5EUycsXG4gICdERVBUSCcsXG4gICdERVJFRicsXG4gICdERVJJVkVEJyxcbiAgJ0RFU0MnLFxuICAnREVTQ1JJQkUnLFxuICAnREVTQ1JJUFRPUicsXG4gICdERVRBQ0gnLFxuICAnREVURVJNSU5JU1RJQycsXG4gICdESUFHTk9TVElDUycsXG4gICdESUNUSU9OQVJZJyxcbiAgJ0RJU0FCTEUnLFxuICAnRElTQ09OTkVDVCcsXG4gICdESVNQQVRDSCcsXG4gICdESVNUSU5DVCcsXG4gICdETE5FV0NPUFknLFxuICAnRExQUkVWSU9VU0NPUFknLFxuICAnRExVUkxDT01QTEVURScsXG4gICdETFVSTENPTVBMRVRFT05MWScsXG4gICdETFVSTENPTVBMRVRFV1JJVEUnLFxuICAnRExVUkxQQVRIJyxcbiAgJ0RMVVJMUEFUSE9OTFknLFxuICAnRExVUkxQQVRIV1JJVEUnLFxuICAnRExVUkxTQ0hFTUUnLFxuICAnRExVUkxTRVJWRVInLFxuICAnRExWQUxVRScsXG4gICdET0NVTUVOVCcsXG4gICdET01BSU4nLFxuICAnRE9VQkxFJyxcbiAgJ0RST1AnLFxuICAnRFlOQU1JQycsXG4gICdEWU5BTUlDX0ZVTkNUSU9OJyxcbiAgJ0RZTkFNSUNfRlVOQ1RJT05fQ09ERScsXG4gICdFQUNIJyxcbiAgJ0VMRU1FTlQnLFxuICAnRU1QVFknLFxuICAnRU5BQkxFJyxcbiAgJ0VOQ09ESU5HJyxcbiAgJ0VOQ1JZUFRFRCcsXG4gICdFTkQtRVhFQycsXG4gICdFTkRfRlJBTUUnLFxuICAnRU5EX1BBUlRJVElPTicsXG4gICdFTkZPUkNFRCcsXG4gICdFTlVNJyxcbiAgJ0VRVUFMUycsXG4gICdFUlJPUicsXG4gICdFU0NBUEUnLFxuICAnRVZFTlQnLFxuICAnRVhDRVBUSU9OJyxcbiAgJ0VYQ0xVREUnLFxuICAnRVhDTFVESU5HJyxcbiAgJ0VYQ0xVU0lWRScsXG4gICdFWEVDJyxcbiAgJ0VYSVNUUycsXG4gICdFWFBSRVNTSU9OJyxcbiAgJ0VYVEVOU0lPTicsXG4gICdFWFRFUk5BTCcsXG4gICdGQUxTRScsXG4gICdGSUxFJyxcbiAgJ0ZJTFRFUicsXG4gICdGSU5BTCcsXG4gICdGSU5BTElaRScsXG4gICdGSU5JU0gnLFxuICAnRklSU1QnLFxuICAnRkxBRycsXG4gICdGTE9BVCcsXG4gICdGT0xMT1dJTkcnLFxuICAnRk9SJyxcbiAgJ0ZPUkNFJyxcbiAgJ0ZPUkVJR04nLFxuICAnRk9SVFJBTicsXG4gICdGT1JXQVJEJyxcbiAgJ0ZPVU5EJyxcbiAgJ0ZSQU1FX1JPVycsXG4gICdGUkVFJyxcbiAgJ0ZSRUVaRScsXG4gICdGUycsXG4gICdGVUxGSUxMJyxcbiAgJ0ZVTEwnLFxuICAnRlVOQ1RJT04nLFxuICAnRlVOQ1RJT05TJyxcbiAgJ0ZVU0lPTicsXG4gICdHRU5FUkFMJyxcbiAgJ0dFTkVSQVRFRCcsXG4gICdHRVQnLFxuICAnR0xPQkFMJyxcbiAgJ0dPJyxcbiAgJ0dPVE8nLFxuICAnR1JBTlRFRCcsXG4gICdHUk9VUCcsXG4gICdHUk9VUFMnLFxuICAnSEFORExFUicsXG4gICdIRUFERVInLFxuICAnSEVYJyxcbiAgJ0hJRVJBUkNIWScsXG4gICdIT0xEJyxcbiAgJ0hPVVInLFxuICAvLyAnSUQnLFxuICAnSURFTlRJVFknLFxuICAnSUYnLFxuICAnSUdOT1JFJyxcbiAgJ0lMSUtFJyxcbiAgJ0lNTUVESUFURScsXG4gICdJTU1FRElBVEVMWScsXG4gICdJTU1VVEFCTEUnLFxuICAnSU1QTEVNRU5UQVRJT04nLFxuICAnSU1QTElDSVQnLFxuICAnSU1QT1JUJyxcbiAgJ0lOJyxcbiAgJ0lOQ0xVREUnLFxuICAnSU5DTFVESU5HJyxcbiAgJ0lOQ1JFTUVOVCcsXG4gICdJTkRFTlQnLFxuICAnSU5ERVgnLFxuICAnSU5ERVhFUycsXG4gICdJTkRJQ0FUT1InLFxuICAnSU5IRVJJVCcsXG4gICdJTkhFUklUUycsXG4gICdJTklUSUFMJyxcbiAgJ0lOSVRJQUxMWScsXG4gICdJTkxJTkUnLFxuICAnSU5ORVInLFxuICAnSU5PVVQnLFxuICAnSU5QVVQnLFxuICAnSU5TRU5TSVRJVkUnLFxuICAnSU5TVEFOQ0UnLFxuICAnSU5TVEFOVElBQkxFJyxcbiAgJ0lOU1RFQUQnLFxuICAnSU5UJyxcbiAgJ0lOVEVHRVInLFxuICAnSU5URUdSSVRZJyxcbiAgJ0lOVEVSU0VDVElPTicsXG4gICdJTlRFUlZBTCcsXG4gICdJTlRPJyxcbiAgJ0lOVk9LRVInLFxuICAnSVMnLFxuICAnSVNOVUxMJyxcbiAgJ0lTT0xBVElPTicsXG4gICdKU09OJyxcbiAgJ0pTT05fQVJSQVknLFxuICAnSlNPTl9BUlJBWUFHRycsXG4gICdKU09OX0VYSVNUUycsXG4gICdKU09OX09CSkVDVEFHRycsXG4gICdKU09OX1FVRVJZJyxcbiAgJ0pTT05fVEFCTEUnLFxuICAnSlNPTl9UQUJMRV9QUklNSVRJVkUnLFxuICAnSlNPTl9WQUxVRScsXG4gICdLRUVQJyxcbiAgJ0tFWScsXG4gICdLRVlTJyxcbiAgJ0tFWV9NRU1CRVInLFxuICAnS0VZX1RZUEUnLFxuICAnTEFCRUwnLFxuICAnTEFOR1VBR0UnLFxuICAnTEFSR0UnLFxuICAnTEFTVCcsXG4gICdMQVRFUkFMJyxcbiAgJ0xFQURJTkcnLFxuICAnTEVBS1BST09GJyxcbiAgJ0xFVkVMJyxcbiAgJ0xJQlJBUlknLFxuICAnTElLRScsXG4gICdMSUtFX1JFR0VYJyxcbiAgJ0xJTksnLFxuICAnTElTVEFHRycsXG4gICdMT0NBTCcsXG4gICdMT0NBVElPTicsXG4gICdMT0NBVE9SJyxcbiAgJ0xPQ0tFRCcsXG4gICdMT0dHRUQnLFxuICAnTUFQJyxcbiAgJ01BUFBJTkcnLFxuICAnTUFUQ0gnLFxuICAnTUFUQ0hFRCcsXG4gICdNQVRDSEVTJyxcbiAgJ01BVENIX05VTUJFUicsXG4gICdNQVRDSF9SRUNPR05JWkUnLFxuICAnTUFURVJJQUxJWkVEJyxcbiAgJ01BWFZBTFVFJyxcbiAgJ01FQVNVUkVTJyxcbiAgJ01FTUJFUicsXG4gICdNRVJHRScsXG4gICdNRVNTQUdFX0xFTkdUSCcsXG4gICdNRVNTQUdFX09DVEVUX0xFTkdUSCcsXG4gICdNRVNTQUdFX1RFWFQnLFxuICAnTUVUSE9EJyxcbiAgJ01JTlVURScsXG4gICdNSU5WQUxVRScsXG4gICdNT0RJRklFUycsXG4gICdNT0RVTEUnLFxuICAnTU9OVEgnLFxuICAnTU9SRScsXG4gICdNVUxUSVNFVCcsXG4gICdNVU1QUycsXG4gICdOQU1FJyxcbiAgJ05BTUVTJyxcbiAgJ05BTUVTUEFDRScsXG4gICdOQVRJT05BTCcsXG4gICdOQVRVUkFMJyxcbiAgJ05DSEFSJyxcbiAgJ05DTE9CJyxcbiAgJ05FU1RFRCcsXG4gICdORVNUSU5HJyxcbiAgJ05FVycsXG4gICdORVhUJyxcbiAgJ05GQycsXG4gICdORkQnLFxuICAnTkZLQycsXG4gICdORktEJyxcbiAgJ05JTCcsXG4gICdOTycsXG4gICdOT05FJyxcbiAgJ05PUk1BTElaRUQnLFxuICAnTk9UJyxcbiAgJ05PVEhJTkcnLFxuICAnTk9UTlVMTCcsXG4gICdOT1dBSVQnLFxuICAnTlVMTCcsXG4gICdOVUxMQUJMRScsXG4gICdOVUxMUycsXG4gICdOVU1CRVInLFxuICAnTlVNRVJJQycsXG4gICdPQkpFQ1QnLFxuICAnT0NDVVJSRU5DRVNfUkVHRVgnLFxuICAnT0NURVRTJyxcbiAgJ09GJyxcbiAgJ09GRicsXG4gICdPRkZTRVQnLFxuICAnT0lEUycsXG4gICdPTEQnLFxuICAnT01JVCcsXG4gICdPTiBDT01NSVQnLFxuICAnT04gREVMRVRFJyxcbiAgJ09OIFVQREFURScsXG4gICdPTkUnLFxuICAnT05MWScsXG4gICdPUEVOJyxcbiAgJ09QRVJBVE9SJyxcbiAgJ09QVElPTicsXG4gICdPUFRJT05TJyxcbiAgJ09SREVSJyxcbiAgJ09SREVSSU5HJyxcbiAgJ09SRElOQUxJVFknLFxuICAnT1RIRVJTJyxcbiAgJ09VVCcsXG4gICdPVVRFUicsXG4gICdPVVRQVVQnLFxuICAnT1ZFUicsXG4gICdPVkVSRkxPVycsXG4gICdPVkVSTEFQUycsXG4gICdPVkVSUklESU5HJyxcbiAgJ09XTkVEJyxcbiAgJ09XTkVSJyxcbiAgJ1BBRCcsXG4gICdQQVJBTExFTCcsXG4gICdQQVJBTUVURVInLFxuICAnUEFSQU1FVEVSX01PREUnLFxuICAnUEFSQU1FVEVSX05BTUUnLFxuICAnUEFSQU1FVEVSX09SRElOQUxfUE9TSVRJT04nLFxuICAnUEFSQU1FVEVSX1NQRUNJRklDX0NBVEFMT0cnLFxuICAnUEFSQU1FVEVSX1NQRUNJRklDX05BTUUnLFxuICAnUEFSQU1FVEVSX1NQRUNJRklDX1NDSEVNQScsXG4gICdQQVJTRVInLFxuICAnUEFSVElBTCcsXG4gICdQQVJUSVRJT04nLFxuICAnUEFTQ0FMJyxcbiAgJ1BBU1MnLFxuICAnUEFTU0lORycsXG4gICdQQVNTVEhST1VHSCcsXG4gICdQQVNTV09SRCcsXG4gICdQQVNUJyxcbiAgJ1BBVFRFUk4nLFxuICAnUEVSJyxcbiAgJ1BFUkNFTlQnLFxuICAnUEVSSU9EJyxcbiAgJ1BFUk1JU1NJT04nLFxuICAnUEVSTVVURScsXG4gICdQTEFDSU5HJyxcbiAgJ1BMQU4nLFxuICAnUExBTlMnLFxuICAnUExJJyxcbiAgJ1BPTElDWScsXG4gICdQT1JUSU9OJyxcbiAgJ1BPU0lUSU9OX1JFR0VYJyxcbiAgJ1BSRUNFREVTJyxcbiAgJ1BSRUNFRElORycsXG4gICdQUkVDSVNJT04nLFxuICAnUFJFUEFSRUQnLFxuICAnUFJFU0VSVkUnLFxuICAnUFJJTUFSWScsXG4gICdQUklPUicsXG4gICdQUklWQVRFJyxcbiAgJ1BSSVZJTEVHRVMnLFxuICAnUFJPQ0VEVVJBTCcsXG4gICdQUk9DRURVUkUnLFxuICAnUFJPQ0VEVVJFUycsXG4gICdQUk9HUkFNJyxcbiAgJ1BSVU5FJyxcbiAgJ1BURicsXG4gICdQVUJMSUMnLFxuICAnUFVCTElDQVRJT04nLFxuICAnUVVPVEUnLFxuICAnUVVPVEVTJyxcbiAgJ1JBTkdFJyxcbiAgJ1JFQUQnLFxuICAnUkVBRFMnLFxuICAnUkVBTCcsXG4gICdSRUFTU0lHTicsXG4gICdSRUNIRUNLJyxcbiAgJ1JFQ09WRVJZJyxcbiAgJ1JFQ1VSU0lWRScsXG4gICdSRUYnLFxuICAnUkVGRVJFTkNFUycsXG4gICdSRUZFUkVOQ0lORycsXG4gICdSRUZSRVNIJyxcbiAgJ1JFTEFUSVZFJyxcbiAgJ1JFTEVBU0UnLFxuICAnUkVOQU1FJyxcbiAgJ1JFUEVBVEFCTEUnLFxuICAnUkVQTElDQScsXG4gICdSRVFVSVJJTkcnLFxuICAnUkVTUEVDVCcsXG4gICdSRVNUQVJUJyxcbiAgJ1JFU1RPUkUnLFxuICAnUkVTVFJJQ1QnLFxuICAnUkVTVUxUJyxcbiAgJ1JFVFVSTicsXG4gICdSRVRVUk5FRF9DQVJESU5BTElUWScsXG4gICdSRVRVUk5FRF9MRU5HVEgnLFxuICAnUkVUVVJORURfT0NURVRfTEVOR1RIJyxcbiAgJ1JFVFVSTkVEX1NRTFNUQVRFJyxcbiAgJ1JFVFVSTlMnLFxuICAnUk9MRScsXG4gICdST0xMVVAnLFxuICAnUk9VVElORScsXG4gICdST1VUSU5FUycsXG4gICdST1VUSU5FX0NBVEFMT0cnLFxuICAnUk9VVElORV9OQU1FJyxcbiAgJ1JPVVRJTkVfU0NIRU1BJyxcbiAgJ1JPVycsXG4gICdST1dTJyxcbiAgJ1JPV19DT1VOVCcsXG4gICdSVUxFJyxcbiAgJ1JVTk5JTkcnLFxuICAnU0NBTEFSJyxcbiAgJ1NDSEVNQScsXG4gICdTQ0hFTUFTJyxcbiAgJ1NDSEVNQV9OQU1FJyxcbiAgJ1NDT1BFJyxcbiAgJ1NDT1BFX0NBVEFMT0cnLFxuICAnU0NPUEVfTkFNRScsXG4gICdTQ09QRV9TQ0hFTUEnLFxuICAnU0NST0xMJyxcbiAgJ1NFQVJDSCcsXG4gICdTRUNPTkQnLFxuICAnU0VDVElPTicsXG4gICdTRUNVUklUWScsXG4gICdTRUVLJyxcbiAgJ1NFTEVDVElWRScsXG4gICdTRUxGJyxcbiAgJ1NFTlNJVElWRScsXG4gICdTRVFVRU5DRScsXG4gICdTRVFVRU5DRVMnLFxuICAnU0VSSUFMSVpBQkxFJyxcbiAgJ1NFUlZFUicsXG4gICdTRVJWRVJfTkFNRScsXG4gICdTRVNTSU9OJyxcbiAgJ1NFVE9GJyxcbiAgJ1NFVFMnLFxuICAnU0hBUkUnLFxuICAnU0lNSUxBUicsXG4gICdTSU1QTEUnLFxuICAnU0laRScsXG4gICdTS0lQJyxcbiAgJ1NNQUxMSU5UJyxcbiAgJ1NOQVBTSE9UJyxcbiAgJ1NPVVJDRScsXG4gICdTUEFDRScsXG4gICdTUEVDSUZJQycsXG4gICdTUEVDSUZJQ1RZUEUnLFxuICAnU1BFQ0lGSUNfTkFNRScsXG4gICdTUUwnLFxuICAnU1FMQ09ERScsXG4gICdTUUxFUlJPUicsXG4gICdTUUxFWENFUFRJT04nLFxuICAnU1FMU1RBVEUnLFxuICAnU1FMV0FSTklORycsXG4gICdTVEFCTEUnLFxuICAnU1RBTkRBTE9ORScsXG4gICdTVEFSVCcsXG4gICdTVEFURScsXG4gICdTVEFURU1FTlQnLFxuICAnU1RBVElDJyxcbiAgJ1NUQVRJU1RJQ1MnLFxuICAnU1RESU4nLFxuICAnU1RET1VUJyxcbiAgJ1NUT1JBR0UnLFxuICAnU1RPUkVEJyxcbiAgJ1NUUklDVCcsXG4gICdTVFJVQ1RVUkUnLFxuICAnU1RZTEUnLFxuICAnU1VCQ0xBU1NfT1JJR0lOJyxcbiAgJ1NVQk1VTFRJU0VUJyxcbiAgJ1NVQlNDUklQVElPTicsXG4gICdTVUJTRVQnLFxuICAnU1VCU1RSSU5HX1JFR0VYJyxcbiAgJ1NVQ0NFRURTJyxcbiAgJ1NVUFBPUlQnLFxuICAnU1lNTUVUUklDJyxcbiAgJ1NZU0lEJyxcbiAgJ1NZU1RFTScsXG4gICdTWVNURU1fVElNRScsXG4gICdTWVNURU1fVVNFUicsXG4gICdUQUJMRScsXG4gICdUQUJMRVMnLFxuICAnVEFCTEVTQU1QTEUnLFxuICAnVEFCTEVTUEFDRScsXG4gICdUQUJMRV9OQU1FJyxcbiAgJ1RFTVAnLFxuICAnVEVNUExBVEUnLFxuICAnVEVNUE9SQVJZJyxcbiAgJ1RIRU4nLFxuICAnVEhST1VHSCcsXG4gICdUSUVTJyxcbiAgJ1RJTUUnLFxuICAnVElNRVNUQU1QJyxcbiAgJ1RJTUVaT05FX0hPVVInLFxuICAnVElNRVpPTkVfTUlOVVRFJyxcbiAgJ1RPJyxcbiAgJ1RPS0VOJyxcbiAgJ1RPUF9MRVZFTF9DT1VOVCcsXG4gICdUUkFJTElORycsXG4gICdUUkFOU0FDVElPTicsXG4gICdUUkFOU0FDVElPTlNfQ09NTUlUVEVEJyxcbiAgJ1RSQU5TQUNUSU9OU19ST0xMRURfQkFDSycsXG4gICdUUkFOU0FDVElPTl9BQ1RJVkUnLFxuICAnVFJBTlNGT1JNJyxcbiAgJ1RSQU5TRk9STVMnLFxuICAnVFJBTlNMQVRFX1JFR0VYJyxcbiAgJ1RSQU5TTEFUSU9OJyxcbiAgJ1RSRUFUJyxcbiAgJ1RSSUdHRVInLFxuICAnVFJJR0dFUl9DQVRBTE9HJyxcbiAgJ1RSSUdHRVJfTkFNRScsXG4gICdUUklHR0VSX1NDSEVNQScsXG4gICdUUlVFJyxcbiAgJ1RSVVNURUQnLFxuICAnVFlQRScsXG4gICdUWVBFUycsXG4gICdVRVNDQVBFJyxcbiAgJ1VOQk9VTkRFRCcsXG4gICdVTkNPTU1JVFRFRCcsXG4gICdVTkNPTkRJVElPTkFMJyxcbiAgJ1VOREVSJyxcbiAgJ1VORU5DUllQVEVEJyxcbiAgJ1VOSVFVRScsXG4gICdVTktOT1dOJyxcbiAgJ1VOTElOSycsXG4gICdVTkxPR0dFRCcsXG4gICdVTk1BVENIRUQnLFxuICAnVU5OQU1FRCcsXG4gICdVTlRJTCcsXG4gICdVTlRZUEVEJyxcbiAgJ1VSSScsXG4gICdVU0FHRScsXG4gICdVU0VSX0RFRklORURfVFlQRV9DQVRBTE9HJyxcbiAgJ1VTRVJfREVGSU5FRF9UWVBFX0NPREUnLFxuICAnVVNFUl9ERUZJTkVEX1RZUEVfTkFNRScsXG4gICdVU0VSX0RFRklORURfVFlQRV9TQ0hFTUEnLFxuICAnVVRGMTYnLFxuICAnVVRGMzInLFxuICAnVVRGOCcsXG4gICdWQUxJRCcsXG4gICdWQUxJREFURScsXG4gICdWQUxJREFUT1InLFxuICAnVkFMVUUnLFxuICAnVkFMVUVfT0YnLFxuICAnVkFSQklOQVJZJyxcbiAgJ1ZBUkNIQVInLFxuICAnVkFSSUFESUMnLFxuICAnVkFSWUlORycsXG4gICdWRVJCT1NFJyxcbiAgJ1ZFUlNJT05JTkcnLFxuICAnVklFVycsXG4gICdWSUVXUycsXG4gICdWT0xBVElMRScsXG4gICdXSEVORVZFUicsXG4gICdXSElURVNQQUNFJyxcbiAgJ1dJTkRPVycsXG4gICdXSVRISU4nLFxuICAnV0lUSE9VVCcsXG4gICdXT1JLJyxcbiAgJ1dSQVBQRVInLFxuICAnV1JJVEUnLFxuICAnWE1MJyxcbiAgJ1hNTEFUVFJJQlVURVMnLFxuICAnWE1MQklOQVJZJyxcbiAgJ1hNTENBU1QnLFxuICAnWE1MREVDTEFSQVRJT04nLFxuICAnWE1MRE9DVU1FTlQnLFxuICAnWE1MSVRFUkFURScsXG4gICdYTUxOQU1FU1BBQ0VTJyxcbiAgJ1hNTFFVRVJZJyxcbiAgJ1hNTFNDSEVNQScsXG4gICdYTUxURVhUJyxcbiAgJ1hNTFZBTElEQVRFJyxcbiAgJ1lFQVInLFxuICAnWUVTJyxcbiAgJ1pPTkUnLFxuXTtcblxuLyoqXG4gKiBQcmlvcml0eSAxIChmaXJzdClcbiAqIGtleXdvcmRzIHRoYXQgYmVnaW4gYSBuZXcgc3RhdGVtZW50XG4gKiB3aWxsIGJlZ2luIG5ldyBpbmRlbnRlZCBibG9ja1xuICovXG4vLyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzE0L3NxbC1jb21tYW5kcy5odG1sXG5jb25zdCByZXNlcnZlZENvbW1hbmRzID0gW1xuICAnQUJPUlQnLFxuICAnQUxURVIgQUdHUkVHQVRFJyxcbiAgJ0FMVEVSIENPTExBVElPTicsXG4gICdBTFRFUiBDT05WRVJTSU9OJyxcbiAgJ0FMVEVSIERBVEFCQVNFJyxcbiAgJ0FMVEVSIERFRkFVTFQgUFJJVklMRUdFUycsXG4gICdBTFRFUiBET01BSU4nLFxuICAnQUxURVIgRVZFTlQgVFJJR0dFUicsXG4gICdBTFRFUiBFWFRFTlNJT04nLFxuICAnQUxURVIgRk9SRUlHTiBEQVRBIFdSQVBQRVInLFxuICAnQUxURVIgRk9SRUlHTiBUQUJMRScsXG4gICdBTFRFUiBGVU5DVElPTicsXG4gICdBTFRFUiBHUk9VUCcsXG4gICdBTFRFUiBJTkRFWCcsXG4gICdBTFRFUiBMQU5HVUFHRScsXG4gICdBTFRFUiBMQVJHRSBPQkpFQ1QnLFxuICAnQUxURVIgTUFURVJJQUxJWkVEIFZJRVcnLFxuICAnQUxURVIgT1BFUkFUT1InLFxuICAnQUxURVIgT1BFUkFUT1IgQ0xBU1MnLFxuICAnQUxURVIgT1BFUkFUT1IgRkFNSUxZJyxcbiAgJ0FMVEVSIFBPTElDWScsXG4gICdBTFRFUiBQUk9DRURVUkUnLFxuICAnQUxURVIgUFVCTElDQVRJT04nLFxuICAnQUxURVIgUk9MRScsXG4gICdBTFRFUiBST1VUSU5FJyxcbiAgJ0FMVEVSIFJVTEUnLFxuICAnQUxURVIgU0NIRU1BJyxcbiAgJ0FMVEVSIFNFUVVFTkNFJyxcbiAgJ0FMVEVSIFNFUlZFUicsXG4gICdBTFRFUiBTVEFUSVNUSUNTJyxcbiAgJ0FMVEVSIFNVQlNDUklQVElPTicsXG4gICdBTFRFUiBTWVNURU0nLFxuICAnQUxURVIgVEFCTEUnLFxuICAnQUxURVIgVEFCTEVTUEFDRScsXG4gICdBTFRFUiBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OJyxcbiAgJ0FMVEVSIFRFWFQgU0VBUkNIIERJQ1RJT05BUlknLFxuICAnQUxURVIgVEVYVCBTRUFSQ0ggUEFSU0VSJyxcbiAgJ0FMVEVSIFRFWFQgU0VBUkNIIFRFTVBMQVRFJyxcbiAgJ0FMVEVSIFRSSUdHRVInLFxuICAnQUxURVIgVFlQRScsXG4gICdBTFRFUiBVU0VSJyxcbiAgJ0FMVEVSIFVTRVIgTUFQUElORycsXG4gICdBTFRFUiBWSUVXJyxcbiAgJ0FOQUxZWkUnLFxuICAnQkVHSU4nLFxuICAnQ0FMTCcsXG4gICdDSEVDS1BPSU5UJyxcbiAgJ0NMT1NFJyxcbiAgJ0NMVVNURVInLFxuICAnQ09NTUVOVCcsXG4gICdDT01NSVQnLFxuICAnQ09NTUlUIFBSRVBBUkVEJyxcbiAgJ0NPUFknLFxuICAnQ1JFQVRFIEFDQ0VTUyBNRVRIT0QnLFxuICAnQ1JFQVRFIEFHR1JFR0FURScsXG4gICdDUkVBVEUgQ0FTVCcsXG4gICdDUkVBVEUgQ09MTEFUSU9OJyxcbiAgJ0NSRUFURSBDT05WRVJTSU9OJyxcbiAgJ0NSRUFURSBEQVRBQkFTRScsXG4gICdDUkVBVEUgRE9NQUlOJyxcbiAgJ0NSRUFURSBFVkVOVCBUUklHR0VSJyxcbiAgJ0NSRUFURSBFWFRFTlNJT04nLFxuICAnQ1JFQVRFIEZPUkVJR04gREFUQSBXUkFQUEVSJyxcbiAgJ0NSRUFURSBGT1JFSUdOIFRBQkxFJyxcbiAgJ0NSRUFURSBGVU5DVElPTicsXG4gICdDUkVBVEUgR1JPVVAnLFxuICAnQ1JFQVRFIElOREVYJyxcbiAgJ0NSRUFURSBMQU5HVUFHRScsXG4gICdDUkVBVEUgTUFURVJJQUxJWkVEIFZJRVcnLFxuICAnQ1JFQVRFIE9QRVJBVE9SJyxcbiAgJ0NSRUFURSBPUEVSQVRPUiBDTEFTUycsXG4gICdDUkVBVEUgT1BFUkFUT1IgRkFNSUxZJyxcbiAgJ0NSRUFURSBQT0xJQ1knLFxuICAnQ1JFQVRFIFBST0NFRFVSRScsXG4gICdDUkVBVEUgUFVCTElDQVRJT04nLFxuICAnQ1JFQVRFIFJPTEUnLFxuICAnQ1JFQVRFIFJVTEUnLFxuICAnQ1JFQVRFIFNDSEVNQScsXG4gICdDUkVBVEUgU0VRVUVOQ0UnLFxuICAnQ1JFQVRFIFNFUlZFUicsXG4gICdDUkVBVEUgU1RBVElTVElDUycsXG4gICdDUkVBVEUgU1VCU0NSSVBUSU9OJyxcbiAgJ0NSRUFURSBUQUJMRScsXG4gICdDUkVBVEUgVEFCTEUgQVMnLFxuICAnQ1JFQVRFIFRBQkxFU1BBQ0UnLFxuICAnQ1JFQVRFIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04nLFxuICAnQ1JFQVRFIFRFWFQgU0VBUkNIIERJQ1RJT05BUlknLFxuICAnQ1JFQVRFIFRFWFQgU0VBUkNIIFBBUlNFUicsXG4gICdDUkVBVEUgVEVYVCBTRUFSQ0ggVEVNUExBVEUnLFxuICAnQ1JFQVRFIFRSQU5TRk9STScsXG4gICdDUkVBVEUgVFJJR0dFUicsXG4gICdDUkVBVEUgVFlQRScsXG4gICdDUkVBVEUgVVNFUicsXG4gICdDUkVBVEUgVVNFUiBNQVBQSU5HJyxcbiAgJ0NSRUFURSBWSUVXJyxcbiAgJ0RFQUxMT0NBVEUnLFxuICAnREVDTEFSRScsXG4gICdERUxFVEUnLFxuICAnRElTQ0FSRCcsXG4gICdETycsXG4gICdEUk9QIEFDQ0VTUyBNRVRIT0QnLFxuICAnRFJPUCBBR0dSRUdBVEUnLFxuICAnRFJPUCBDQVNUJyxcbiAgJ0RST1AgQ09MTEFUSU9OJyxcbiAgJ0RST1AgQ09OVkVSU0lPTicsXG4gICdEUk9QIERBVEFCQVNFJyxcbiAgJ0RST1AgRE9NQUlOJyxcbiAgJ0RST1AgRVZFTlQgVFJJR0dFUicsXG4gICdEUk9QIEVYVEVOU0lPTicsXG4gICdEUk9QIEZPUkVJR04gREFUQSBXUkFQUEVSJyxcbiAgJ0RST1AgRk9SRUlHTiBUQUJMRScsXG4gICdEUk9QIEZVTkNUSU9OJyxcbiAgJ0RST1AgR1JPVVAnLFxuICAnRFJPUCBJTkRFWCcsXG4gICdEUk9QIExBTkdVQUdFJyxcbiAgJ0RST1AgTUFURVJJQUxJWkVEIFZJRVcnLFxuICAnRFJPUCBPUEVSQVRPUicsXG4gICdEUk9QIE9QRVJBVE9SIENMQVNTJyxcbiAgJ0RST1AgT1BFUkFUT1IgRkFNSUxZJyxcbiAgJ0RST1AgT1dORUQnLFxuICAnRFJPUCBQT0xJQ1knLFxuICAnRFJPUCBQUk9DRURVUkUnLFxuICAnRFJPUCBQVUJMSUNBVElPTicsXG4gICdEUk9QIFJPTEUnLFxuICAnRFJPUCBST1VUSU5FJyxcbiAgJ0RST1AgUlVMRScsXG4gICdEUk9QIFNDSEVNQScsXG4gICdEUk9QIFNFUVVFTkNFJyxcbiAgJ0RST1AgU0VSVkVSJyxcbiAgJ0RST1AgU1RBVElTVElDUycsXG4gICdEUk9QIFNVQlNDUklQVElPTicsXG4gICdEUk9QIFRBQkxFJyxcbiAgJ0RST1AgVEFCTEVTUEFDRScsXG4gICdEUk9QIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04nLFxuICAnRFJPUCBURVhUIFNFQVJDSCBESUNUSU9OQVJZJyxcbiAgJ0RST1AgVEVYVCBTRUFSQ0ggUEFSU0VSJyxcbiAgJ0RST1AgVEVYVCBTRUFSQ0ggVEVNUExBVEUnLFxuICAnRFJPUCBUUkFOU0ZPUk0nLFxuICAnRFJPUCBUUklHR0VSJyxcbiAgJ0RST1AgVFlQRScsXG4gICdEUk9QIFVTRVInLFxuICAnRFJPUCBVU0VSIE1BUFBJTkcnLFxuICAnRFJPUCBWSUVXJyxcbiAgJ0VORCcsXG4gICdFWEVDVVRFJyxcbiAgJ0VYUExBSU4nLFxuICAnRkVUQ0gnLFxuICAnR1JBTlQnLFxuICAnSU1QT1JUIEZPUkVJR04gU0NIRU1BJyxcbiAgJ0lOU0VSVCcsXG4gICdMSVNURU4nLFxuICAnTE9BRCcsXG4gICdMT0NLJyxcbiAgJ01PVkUnLFxuICAnTk9USUZZJyxcbiAgJ1BSRVBBUkUnLFxuICAnUFJFUEFSRSBUUkFOU0FDVElPTicsXG4gICdSRUFTU0lHTiBPV05FRCcsXG4gICdSRUZSRVNIIE1BVEVSSUFMSVpFRCBWSUVXJyxcbiAgJ1JFSU5ERVgnLFxuICAnUkVMRUFTRSBTQVZFUE9JTlQnLFxuICAnUkVTRVQnLFxuICAnUkVUVVJOSU5HJyxcbiAgJ1JFVk9LRScsXG4gICdST0xMQkFDSycsXG4gICdST0xMQkFDSyBQUkVQQVJFRCcsXG4gICdST0xMQkFDSyBUTyBTQVZFUE9JTlQnLFxuICAnU0FWRVBPSU5UJyxcbiAgJ1NFQ1VSSVRZIExBQkVMJyxcbiAgJ1NFTEVDVCcsXG4gICdTRUxFQ1QgSU5UTycsXG4gICdTRVQnLFxuICAnU0VUIENPTlNUUkFJTlRTJyxcbiAgJ1NFVCBST0xFJyxcbiAgJ1NFVCBTRVNTSU9OIEFVVEhPUklaQVRJT04nLFxuICAnU0VUIFRSQU5TQUNUSU9OJyxcbiAgJ1NIT1cnLFxuICAnU1RBUlQgVFJBTlNBQ1RJT04nLFxuICAnVFJVTkNBVEUnLFxuICAnVU5MSVNURU4nLFxuICAnVVBEQVRFJyxcbiAgJ1ZBQ1VVTScsXG4gICdWQUxVRVMnLFxuICAvLyBvdGhlclxuICAnQUREJyxcbiAgJ0FGVEVSJyxcbiAgJ0FMVEVSIENPTFVNTicsXG4gICdJTlNFUlQgSU5UTycsIC8vIHZlcmlmeVxuICAnU0VUIFNDSEVNQScsIC8vIHZlcmlmeVxuICAnRlJPTScsXG4gICdHUk9VUCBCWScsXG4gICdIQVZJTkcnLFxuICAnTElNSVQnLFxuICAnT0ZGU0VUJyxcbiAgJ09SREVSIEJZJyxcbiAgJ1dIRVJFJyxcbiAgJ1dJVEgnLFxuXTtcblxuLyoqXG4gKiBQcmlvcml0eSAyXG4gKiBjb21tYW5kcyB0aGF0IG9wZXJhdGUgb24gdHdvIHRhYmxlcyBvciBzdWJxdWVyaWVzXG4gKiB0d28gbWFpbiBjYXRlZ29yaWVzOiBqb2lucyBhbmQgYm9vbGVhbiBzZXQgb3BlcmF0b3JzXG4gKi9cbmNvbnN0IHJlc2VydmVkQmluYXJ5Q29tbWFuZHMgPSBbXG4gIC8vIHNldCBib29sZWFuc1xuICAnSU5URVJTRUNUJyxcbiAgJ0lOVEVSU0VDVCBBTEwnLFxuICAnSU5URVJTRUNUIERJU1RJTkNUJyxcbiAgJ1VOSU9OJyxcbiAgJ1VOSU9OIEFMTCcsXG4gICdVTklPTiBESVNUSU5DVCcsXG4gICdFWENFUFQnLFxuICAnRVhDRVBUIEFMTCcsXG4gICdFWENFUFQgRElTVElOQ1QnLFxuICAnTUlOVVMnLFxuICAnTUlOVVMgQUxMJyxcbiAgJ01JTlVTIERJU1RJTkNUJyxcbiAgLy8gam9pbnNcbiAgJ0pPSU4nLFxuICAnSU5ORVIgSk9JTicsXG4gICdMRUZUIEpPSU4nLFxuICAnTEVGVCBPVVRFUiBKT0lOJyxcbiAgJ1JJR0hUIEpPSU4nLFxuICAnUklHSFQgT1VURVIgSk9JTicsXG4gICdGVUxMIEpPSU4nLFxuICAnRlVMTCBPVVRFUiBKT0lOJyxcbiAgJ0NST1NTIEpPSU4nLFxuICAnTkFUVVJBTCBKT0lOJyxcbl07XG5cbi8qKlxuICogUHJpb3JpdHkgM1xuICoga2V5d29yZHMgdGhhdCBmb2xsb3cgYSBwcmV2aW91cyBTdGF0ZW1lbnQsIG11c3QgYmUgYXR0YWNoZWQgdG8gc3Vic2VxdWVudCBkYXRhXG4gKiBjYW4gYmUgZnVsbHkgaW5saW5lIG9yIG9uIG5ld2xpbmUgd2l0aCBvcHRpb25hbCBpbmRlbnRcbiAqL1xuY29uc3QgcmVzZXJ2ZWREZXBlbmRlbnRDbGF1c2VzID0gWydXSEVOJywgJ0VMU0UnXTtcblxuY29uc3QgYmluYXJ5T3BlcmF0b3JzID0gW1xuICAnPDwnLFxuICAnPj4nLFxuICAnfHwvJyxcbiAgJ3wvJyxcbiAgJzo6JyxcbiAgJzo9JyxcbiAgJy0+PicsXG4gICctPicsXG4gICc9PicsXG4gICd+fionLFxuICAnfn4nLFxuICAnIX5+KicsXG4gICchfn4nLFxuICAnfionLFxuICAnIX4qJyxcbiAgJyF+JyxcbiAgJyEhJyxcbiAgJ3x8JyxcbiAgJ0AtQCcsXG4gICdAQCcsXG4gICcjIycsXG4gICc8LT4nLFxuICAnJiYnLFxuICAnJjwnLFxuICAnJj4nLFxuICAnPDx8JyxcbiAgJyY8fCcsXG4gICd8Pj4nLFxuICAnfCY+JyxcbiAgJzxeJyxcbiAgJ14+JyxcbiAgJz8jJyxcbiAgJz8tJyxcbiAgJz98JyxcbiAgJz8tfCcsXG4gICc/fHwnLFxuICAnQD4nLFxuICAnPEAnLFxuICAnfj0nLFxuICAnPj49JyxcbiAgJzw8PScsXG4gICdAQEAnLFxuXTtcblxuLy8gaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy8xNC9pbmRleC5odG1sXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQb3N0Z3JlU3FsRm9ybWF0dGVyIGV4dGVuZHMgRm9ybWF0dGVyIHtcbiAgc3RhdGljIHJlc2VydmVkQ29tbWFuZHMgPSByZXNlcnZlZENvbW1hbmRzO1xuICBzdGF0aWMgcmVzZXJ2ZWRCaW5hcnlDb21tYW5kcyA9IHJlc2VydmVkQmluYXJ5Q29tbWFuZHM7XG4gIHN0YXRpYyByZXNlcnZlZERlcGVuZGVudENsYXVzZXMgPSByZXNlcnZlZERlcGVuZGVudENsYXVzZXM7XG4gIHN0YXRpYyByZXNlcnZlZEpvaW5Db25kaXRpb25zID0gWydPTicsICdVU0lORyddO1xuICBzdGF0aWMgcmVzZXJ2ZWRMb2dpY2FsT3BlcmF0b3JzID0gWydBTkQnLCAnT1InXTtcbiAgc3RhdGljIHJlc2VydmVkS2V5d29yZHMgPSBkZWR1cGUoW1xuICAgIC4uLk9iamVjdC52YWx1ZXMocmVzZXJ2ZWRGdW5jdGlvbnMpLnJlZHVjZSgoYWNjLCBhcnIpID0+IFsuLi5hY2MsIC4uLmFycl0sIFtdKSxcbiAgICAuLi5yZXNlcnZlZEtleXdvcmRzLFxuICBdKTtcbiAgc3RhdGljIHN0cmluZ1R5cGVzOiBTdHJpbmdQYXR0ZXJuVHlwZVtdID0gW2BcIlwiYCwgXCInJ1wiLCBcIlUmJydcIiwgJ1UmXCJcIicsICckJCcsICdgYCcsIFwiRScnXCJdO1xuICBzdGF0aWMgYmxvY2tTdGFydCA9IFsnKCcsICdDQVNFJ107XG4gIHN0YXRpYyBibG9ja0VuZCA9IFsnKScsICdFTkQnXTtcbiAgc3RhdGljIGluZGV4ZWRQbGFjZWhvbGRlclR5cGVzID0gWyckJ107XG4gIHN0YXRpYyBuYW1lZFBsYWNlaG9sZGVyVHlwZXMgPSBbJzonXTtcbiAgc3RhdGljIGxpbmVDb21tZW50VHlwZXMgPSBbJy0tJ107XG4gIHN0YXRpYyBvcGVyYXRvcnMgPSBiaW5hcnlPcGVyYXRvcnM7XG5cbiAgdG9rZW5pemVyKCkge1xuICAgIHJldHVybiBuZXcgVG9rZW5pemVyKHtcbiAgICAgIHJlc2VydmVkQ29tbWFuZHM6IFBvc3RncmVTcWxGb3JtYXR0ZXIucmVzZXJ2ZWRDb21tYW5kcyxcbiAgICAgIHJlc2VydmVkQmluYXJ5Q29tbWFuZHM6IFBvc3RncmVTcWxGb3JtYXR0ZXIucmVzZXJ2ZWRCaW5hcnlDb21tYW5kcyxcbiAgICAgIHJlc2VydmVkRGVwZW5kZW50Q2xhdXNlczogUG9zdGdyZVNxbEZvcm1hdHRlci5yZXNlcnZlZERlcGVuZGVudENsYXVzZXMsXG4gICAgICByZXNlcnZlZEpvaW5Db25kaXRpb25zOiBQb3N0Z3JlU3FsRm9ybWF0dGVyLnJlc2VydmVkSm9pbkNvbmRpdGlvbnMsXG4gICAgICByZXNlcnZlZExvZ2ljYWxPcGVyYXRvcnM6IFBvc3RncmVTcWxGb3JtYXR0ZXIucmVzZXJ2ZWRMb2dpY2FsT3BlcmF0b3JzLFxuICAgICAgcmVzZXJ2ZWRLZXl3b3JkczogUG9zdGdyZVNxbEZvcm1hdHRlci5yZXNlcnZlZEtleXdvcmRzLFxuICAgICAgc3RyaW5nVHlwZXM6IFBvc3RncmVTcWxGb3JtYXR0ZXIuc3RyaW5nVHlwZXMsXG4gICAgICBibG9ja1N0YXJ0OiBQb3N0Z3JlU3FsRm9ybWF0dGVyLmJsb2NrU3RhcnQsXG4gICAgICBibG9ja0VuZDogUG9zdGdyZVNxbEZvcm1hdHRlci5ibG9ja0VuZCxcbiAgICAgIGluZGV4ZWRQbGFjZWhvbGRlclR5cGVzOiBQb3N0Z3JlU3FsRm9ybWF0dGVyLmluZGV4ZWRQbGFjZWhvbGRlclR5cGVzLFxuICAgICAgbmFtZWRQbGFjZWhvbGRlclR5cGVzOiBQb3N0Z3JlU3FsRm9ybWF0dGVyLm5hbWVkUGxhY2Vob2xkZXJUeXBlcyxcbiAgICAgIGxpbmVDb21tZW50VHlwZXM6IFBvc3RncmVTcWxGb3JtYXR0ZXIubGluZUNvbW1lbnRUeXBlcyxcbiAgICAgIG9wZXJhdG9yczogUG9zdGdyZVNxbEZvcm1hdHRlci5vcGVyYXRvcnMsXG4gICAgfSk7XG4gIH1cbn1cbiIsImltcG9ydCBGb3JtYXR0ZXIgZnJvbSAnLi4vY29yZS9Gb3JtYXR0ZXInO1xuaW1wb3J0IFRva2VuaXplciBmcm9tICcuLi9jb3JlL1Rva2VuaXplcic7XG5pbXBvcnQgdHlwZSB7IFN0cmluZ1BhdHRlcm5UeXBlIH0gZnJvbSAnLi4vY29yZS9yZWdleEZhY3RvcnknO1xuaW1wb3J0IHsgZGVkdXBlIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG4vKipcbiAqIFByaW9yaXR5IDUgKGxhc3QpXG4gKiBGdWxsIGxpc3Qgb2YgcmVzZXJ2ZWQgZnVuY3Rpb25zXG4gKiBkaXN0aW5jdCBmcm9tIEtleXdvcmRzIGR1ZSB0byBpbnRlcmFjdGlvbiB3aXRoIHBhcmVudGhlc2VzXG4gKi9cbmNvbnN0IHJlc2VydmVkRnVuY3Rpb25zID0ge1xuICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcmVkc2hpZnQvbGF0ZXN0L2RnL2NfQWdncmVnYXRlX0Z1bmN0aW9ucy5odG1sXG4gIGFnZ3JlZ2F0ZTogW1xuICAgICdBTllfVkFMVUUnLFxuICAgICdBUFBST1hJTUFURSBQRVJDRU5USUxFX0RJU0MnLFxuICAgICdBVkcnLFxuICAgICdDT1VOVCcsXG4gICAgJ0xJU1RBR0cnLFxuICAgICdNQVgnLFxuICAgICdNRURJQU4nLFxuICAgICdNSU4nLFxuICAgICdQRVJDRU5USUxFX0NPTlQnLFxuICAgICdTVERERVZfU0FNUCcsXG4gICAgJ1NURERFVl9QT1AnLFxuICAgICdTVU0nLFxuICAgICdWQVJfU0FNUCcsXG4gICAgJ1ZBUl9QT1AnLFxuICBdLFxuICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcmVkc2hpZnQvbGF0ZXN0L2RnL2NfQXJyYXlfRnVuY3Rpb25zLmh0bWxcbiAgYXJyYXk6IFtcbiAgICAnYXJyYXknLFxuICAgICdhcnJheV9jb25jYXQnLFxuICAgICdhcnJheV9mbGF0dGVuJyxcbiAgICAnZ2V0X2FycmF5X2xlbmd0aCcsXG4gICAgJ3NwbGl0X3RvX2FycmF5JyxcbiAgICAnc3ViYXJyYXknLFxuICBdLFxuICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcmVkc2hpZnQvbGF0ZXN0L2RnL2NfYml0d2lzZV9hZ2dyZWdhdGVfZnVuY3Rpb25zLmh0bWxcbiAgYml0d2lzZTogWydCSVRfQU5EJywgJ0JJVF9PUicsICdCT09MX0FORCcsICdCT09MX09SJ10sXG4gIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9yZWRzaGlmdC9sYXRlc3QvZGcvY19jb25kaXRpb25hbF9leHByZXNzaW9ucy5odG1sXG4gIGNvbmRpdGlvbmFsOiBbJ0NBU0UnLCAnQ09BTEVTQ0UnLCAnREVDT0RFJywgJ0dSRUFURVNUJywgJ0xFQVNUJywgJ05WTCcsICdOVkwyJywgJ05VTExJRiddLFxuICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcmVkc2hpZnQvbGF0ZXN0L2RnL0RhdGVfZnVuY3Rpb25zX2hlYWRlci5odG1sXG4gIGRhdGVUaW1lOiBbXG4gICAgJ0FERF9NT05USFMnLFxuICAgICdBVCBUSU1FIFpPTkUnLFxuICAgICdDT05WRVJUX1RJTUVaT05FJyxcbiAgICAnQ1VSUkVOVF9EQVRFJyxcbiAgICAnQ1VSUkVOVF9USU1FJyxcbiAgICAnQ1VSUkVOVF9USU1FU1RBTVAnLFxuICAgICdEQVRFX0NNUCcsXG4gICAgJ0RBVEVfQ01QX1RJTUVTVEFNUCcsXG4gICAgJ0RBVEVfQ01QX1RJTUVTVEFNUFRaJyxcbiAgICAnREFURV9QQVJUX1lFQVInLFxuICAgICdEQVRFQUREJyxcbiAgICAnREFURURJRkYnLFxuICAgICdEQVRFX1BBUlQnLFxuICAgICdEQVRFX1RSVU5DJyxcbiAgICAnRVhUUkFDVCcsXG4gICAgJ0dFVERBVEUnLFxuICAgICdJTlRFUlZBTF9DTVAnLFxuICAgICdMQVNUX0RBWScsXG4gICAgJ01PTlRIU19CRVRXRUVOJyxcbiAgICAnTkVYVF9EQVknLFxuICAgICdTWVNEQVRFJyxcbiAgICAnVElNRU9GREFZJyxcbiAgICAnVElNRVNUQU1QX0NNUCcsXG4gICAgJ1RJTUVTVEFNUF9DTVBfREFURScsXG4gICAgJ1RJTUVTVEFNUF9DTVBfVElNRVNUQU1QVFonLFxuICAgICdUSU1FU1RBTVBUWl9DTVAnLFxuICAgICdUSU1FU1RBTVBUWl9DTVBfREFURScsXG4gICAgJ1RJTUVTVEFNUFRaX0NNUF9USU1FU1RBTVAnLFxuICAgICdUSU1FWk9ORScsXG4gICAgJ1RPX1RJTUVTVEFNUCcsXG4gICAgJ1RSVU5DJyxcbiAgXSxcbiAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3JlZHNoaWZ0L2xhdGVzdC9kZy9nZW9zcGF0aWFsLWZ1bmN0aW9ucy5odG1sXG4gIHNwYXRpYWw6IFtcbiAgICAnQWRkQkJveCcsXG4gICAgJ0Ryb3BCQm94JyxcbiAgICAnR2VvbWV0cnlUeXBlJyxcbiAgICAnU1RfQWRkUG9pbnQnLFxuICAgICdTVF9BbmdsZScsXG4gICAgJ1NUX0FyZWEnLFxuICAgICdTVF9Bc0JpbmFyeScsXG4gICAgJ1NUX0FzRVdLQicsXG4gICAgJ1NUX0FzRVdLVCcsXG4gICAgJ1NUX0FzR2VvSlNPTicsXG4gICAgJ1NUX0FzVGV4dCcsXG4gICAgJ1NUX0F6aW11dGgnLFxuICAgICdTVF9Cb3VuZGFyeScsXG4gICAgJ1NUX0NvbGxlY3QnLFxuICAgICdTVF9Db250YWlucycsXG4gICAgJ1NUX0NvbnRhaW5zUHJvcGVybHknLFxuICAgICdTVF9Db252ZXhIdWxsJyxcbiAgICAnU1RfQ292ZXJlZEJ5JyxcbiAgICAnU1RfQ292ZXJzJyxcbiAgICAnU1RfQ3Jvc3NlcycsXG4gICAgJ1NUX0RpbWVuc2lvbicsXG4gICAgJ1NUX0Rpc2pvaW50JyxcbiAgICAnU1RfRGlzdGFuY2UnLFxuICAgICdTVF9EaXN0YW5jZVNwaGVyZScsXG4gICAgJ1NUX0RXaXRoaW4nLFxuICAgICdTVF9FbmRQb2ludCcsXG4gICAgJ1NUX0VudmVsb3BlJyxcbiAgICAnU1RfRXF1YWxzJyxcbiAgICAnU1RfRXh0ZXJpb3JSaW5nJyxcbiAgICAnU1RfRm9yY2UyRCcsXG4gICAgJ1NUX0ZvcmNlM0QnLFxuICAgICdTVF9Gb3JjZTNETScsXG4gICAgJ1NUX0ZvcmNlM0RaJyxcbiAgICAnU1RfRm9yY2U0RCcsXG4gICAgJ1NUX0dlb21ldHJ5TicsXG4gICAgJ1NUX0dlb21ldHJ5VHlwZScsXG4gICAgJ1NUX0dlb21Gcm9tRVdLQicsXG4gICAgJ1NUX0dlb21Gcm9tRVdLVCcsXG4gICAgJ1NUX0dlb21Gcm9tVGV4dCcsXG4gICAgJ1NUX0dlb21Gcm9tV0tCJyxcbiAgICAnU1RfSW50ZXJpb3JSaW5nTicsXG4gICAgJ1NUX0ludGVyc2VjdHMnLFxuICAgICdTVF9Jc1BvbHlnb25DQ1cnLFxuICAgICdTVF9Jc1BvbHlnb25DVycsXG4gICAgJ1NUX0lzQ2xvc2VkJyxcbiAgICAnU1RfSXNDb2xsZWN0aW9uJyxcbiAgICAnU1RfSXNFbXB0eScsXG4gICAgJ1NUX0lzU2ltcGxlJyxcbiAgICAnU1RfSXNWYWxpZCcsXG4gICAgJ1NUX0xlbmd0aCcsXG4gICAgJ1NUX0xlbmd0aFNwaGVyZScsXG4gICAgJ1NUX0xlbmd0aDJEJyxcbiAgICAnU1RfTGluZUZyb21NdWx0aVBvaW50JyxcbiAgICAnU1RfTGluZUludGVycG9sYXRlUG9pbnQnLFxuICAgICdTVF9NJyxcbiAgICAnU1RfTWFrZUVudmVsb3BlJyxcbiAgICAnU1RfTWFrZUxpbmUnLFxuICAgICdTVF9NYWtlUG9pbnQnLFxuICAgICdTVF9NYWtlUG9seWdvbicsXG4gICAgJ1NUX01lbVNpemUnLFxuICAgICdTVF9NTWF4JyxcbiAgICAnU1RfTU1pbicsXG4gICAgJ1NUX011bHRpJyxcbiAgICAnU1RfTkRpbXMnLFxuICAgICdTVF9OUG9pbnRzJyxcbiAgICAnU1RfTlJpbmdzJyxcbiAgICAnU1RfTnVtR2VvbWV0cmllcycsXG4gICAgJ1NUX051bUludGVyaW9yUmluZ3MnLFxuICAgICdTVF9OdW1Qb2ludHMnLFxuICAgICdTVF9QZXJpbWV0ZXInLFxuICAgICdTVF9QZXJpbWV0ZXIyRCcsXG4gICAgJ1NUX1BvaW50JyxcbiAgICAnU1RfUG9pbnROJyxcbiAgICAnU1RfUG9pbnRzJyxcbiAgICAnU1RfUG9seWdvbicsXG4gICAgJ1NUX1JlbW92ZVBvaW50JyxcbiAgICAnU1RfUmV2ZXJzZScsXG4gICAgJ1NUX1NldFBvaW50JyxcbiAgICAnU1RfU2V0U1JJRCcsXG4gICAgJ1NUX1NpbXBsaWZ5JyxcbiAgICAnU1RfU1JJRCcsXG4gICAgJ1NUX1N0YXJ0UG9pbnQnLFxuICAgICdTVF9Ub3VjaGVzJyxcbiAgICAnU1RfV2l0aGluJyxcbiAgICAnU1RfWCcsXG4gICAgJ1NUX1hNYXgnLFxuICAgICdTVF9YTWluJyxcbiAgICAnU1RfWScsXG4gICAgJ1NUX1lNYXgnLFxuICAgICdTVF9ZTWluJyxcbiAgICAnU1RfWicsXG4gICAgJ1NUX1pNYXgnLFxuICAgICdTVF9aTWluJyxcbiAgICAnU3VwcG9ydHNCQm94JyxcbiAgXSxcbiAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3JlZHNoaWZ0L2xhdGVzdC9kZy9oYXNoLWZ1bmN0aW9ucy5odG1sXG4gIGhhc2g6IFsnQ0hFQ0tTVU0nLCAnRlVOQ19TSEExJywgJ0ZOVl9IQVNIJywgJ01ENScsICdTSEEnLCAnU0hBMScsICdTSEEyJ10sXG4gIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9yZWRzaGlmdC9sYXRlc3QvZGcvaHlwZXJsb2dsb2ctZnVuY3Rpb25zLmh0bWxcbiAgaHlwZXJMb2dMb2c6IFsnSExMJywgJ0hMTF9DUkVBVEVfU0tFVENIJywgJ0hMTF9DQVJESU5BTElUWScsICdITExfQ09NQklORSddLFxuICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcmVkc2hpZnQvbGF0ZXN0L2RnL2pzb24tZnVuY3Rpb25zLmh0bWxcbiAganNvbjogW1xuICAgICdJU19WQUxJRF9KU09OJyxcbiAgICAnSVNfVkFMSURfSlNPTl9BUlJBWScsXG4gICAgJ0pTT05fQVJSQVlfTEVOR1RIJyxcbiAgICAnSlNPTl9FWFRSQUNUX0FSUkFZX0VMRU1FTlRfVEVYVCcsXG4gICAgJ0pTT05fRVhUUkFDVF9QQVRIX1RFWFQnLFxuICAgICdKU09OX1BBUlNFJyxcbiAgICAnSlNPTl9TRVJJQUxJWkUnLFxuICBdLFxuICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcmVkc2hpZnQvbGF0ZXN0L2RnL01hdGhfZnVuY3Rpb25zLmh0bWxcbiAgbWF0aDogW1xuICAgICdBQlMnLFxuICAgICdBQ09TJyxcbiAgICAnQVNJTicsXG4gICAgJ0FUQU4nLFxuICAgICdBVEFOMicsXG4gICAgJ0NCUlQnLFxuICAgICdDRUlMSU5HJyxcbiAgICAnQ0VJTCcsXG4gICAgJ0NPUycsXG4gICAgJ0NPVCcsXG4gICAgJ0RFR1JFRVMnLFxuICAgICdERVhQJyxcbiAgICAnRExPRzEnLFxuICAgICdETE9HMTAnLFxuICAgICdFWFAnLFxuICAgICdGTE9PUicsXG4gICAgJ0xOJyxcbiAgICAnTE9HJyxcbiAgICAnTU9EJyxcbiAgICAnUEknLFxuICAgICdQT1dFUicsXG4gICAgJ1JBRElBTlMnLFxuICAgICdSQU5ET00nLFxuICAgICdST1VORCcsXG4gICAgJ1NJTicsXG4gICAgJ1NJR04nLFxuICAgICdTUVJUJyxcbiAgICAnVEFOJyxcbiAgICAnVE9fSEVYJyxcbiAgICAnVFJVTkMnLFxuICBdLFxuICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcmVkc2hpZnQvbGF0ZXN0L2RnL21sLWZ1bmN0aW9uLmh0bWxcbiAgbWFjaGluZUxlYXJuaW5nOiBbJ0VYUExBSU5fTU9ERUwnXSxcbiAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3JlZHNoaWZ0L2xhdGVzdC9kZy9TdHJpbmdfZnVuY3Rpb25zX2hlYWRlci5odG1sXG4gIHN0cmluZzogW1xuICAgICdBU0NJSScsXG4gICAgJ0JQQ0hBUkNNUCcsXG4gICAgJ0JUUklNJyxcbiAgICAnQlRURVhUX1BBVFRFUk5fQ01QJyxcbiAgICAnQ0hBUl9MRU5HVEgnLFxuICAgICdDSEFSQUNURVJfTEVOR1RIJyxcbiAgICAnQ0hBUklOREVYJyxcbiAgICAnQ0hSJyxcbiAgICAnQ09MTEFURScsXG4gICAgJ0NPTkNBVCcsXG4gICAgJ0NSQzMyJyxcbiAgICAnRElGRkVSRU5DRScsXG4gICAgJ0lOSVRDQVAnLFxuICAgICdMRUZUJyxcbiAgICAnUklHSFQnLFxuICAgICdMRU4nLFxuICAgICdMRU5HVEgnLFxuICAgICdMT1dFUicsXG4gICAgJ0xQQUQnLFxuICAgICdSUEFEJyxcbiAgICAnTFRSSU0nLFxuICAgICdPQ1RFVElOREVYJyxcbiAgICAnT0NURVRfTEVOR1RIJyxcbiAgICAnUE9TSVRJT04nLFxuICAgICdRVU9URV9JREVOVCcsXG4gICAgJ1FVT1RFX0xJVEVSQUwnLFxuICAgICdSRUdFWFBfQ09VTlQnLFxuICAgICdSRUdFWFBfSU5TVFInLFxuICAgICdSRUdFWFBfUkVQTEFDRScsXG4gICAgJ1JFR0VYUF9TVUJTVFInLFxuICAgICdSRVBFQVQnLFxuICAgICdSRVBMQUNFJyxcbiAgICAnUkVQTElDQVRFJyxcbiAgICAnUkVWRVJTRScsXG4gICAgJ1JUUklNJyxcbiAgICAnU09VTkRFWCcsXG4gICAgJ1NQTElUX1BBUlQnLFxuICAgICdTVFJQT1MnLFxuICAgICdTVFJUT0wnLFxuICAgICdTVUJTVFJJTkcnLFxuICAgICdURVhUTEVOJyxcbiAgICAnVFJBTlNMQVRFJyxcbiAgICAnVFJJTScsXG4gICAgJ1VQUEVSJyxcbiAgXSxcbiAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3JlZHNoaWZ0L2xhdGVzdC9kZy9jX1R5cGVfSW5mb19GdW5jdGlvbnMuaHRtbFxuICBzdXBlclR5cGU6IFtcbiAgICAnZGVjaW1hbF9wcmVjaXNpb24nLFxuICAgICdkZWNpbWFsX3NjYWxlJyxcbiAgICAnaXNfYXJyYXknLFxuICAgICdpc19iaWdpbnQnLFxuICAgICdpc19ib29sZWFuJyxcbiAgICAnaXNfY2hhcicsXG4gICAgJ2lzX2RlY2ltYWwnLFxuICAgICdpc19mbG9hdCcsXG4gICAgJ2lzX2ludGVnZXInLFxuICAgICdpc19vYmplY3QnLFxuICAgICdpc19zY2FsYXInLFxuICAgICdpc19zbWFsbGludCcsXG4gICAgJ2lzX3ZhcmNoYXInLFxuICAgICdqc29uX3R5cGVvZicsXG4gIF0sXG4gIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9yZWRzaGlmdC9sYXRlc3QvZGcvY19XaW5kb3dfZnVuY3Rpb25zLmh0bWxcbiAgd2luZG93OiBbXG4gICAgJ0FWRycsXG4gICAgJ0NPVU5UJyxcbiAgICAnQ1VNRV9ESVNUJyxcbiAgICAnREVOU0VfUkFOSycsXG4gICAgJ0ZJUlNUX1ZBTFVFJyxcbiAgICAnTEFTVF9WQUxVRScsXG4gICAgJ0xBRycsXG4gICAgJ0xFQUQnLFxuICAgICdMSVNUQUdHJyxcbiAgICAnTUFYJyxcbiAgICAnTUVESUFOJyxcbiAgICAnTUlOJyxcbiAgICAnTlRIX1ZBTFVFJyxcbiAgICAnTlRJTEUnLFxuICAgICdQRVJDRU5UX1JBTksnLFxuICAgICdQRVJDRU5USUxFX0NPTlQnLFxuICAgICdQRVJDRU5USUxFX0RJU0MnLFxuICAgICdSQU5LJyxcbiAgICAnUkFUSU9fVE9fUkVQT1JUJyxcbiAgICAnUk9XX05VTUJFUicsXG4gICAgJ1NURERFVl9TQU1QJyxcbiAgICAnU1REREVWX1BPUCcsXG4gICAgJ1NVTScsXG4gICAgJ1ZBUl9TQU1QJyxcbiAgICAnVkFSX1BPUCcsXG4gIF0sXG4gIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9yZWRzaGlmdC9sYXRlc3QvZGcvcl9EYXRhX3R5cGVfZm9ybWF0dGluZy5odG1sXG4gIGRhdGFUeXBlOiBbXG4gICAgJ0NBU1QnLFxuICAgICdDT05WRVJUJyxcbiAgICAnVE9fQ0hBUicsXG4gICAgJ1RPX0RBVEUnLFxuICAgICdUT19OVU1CRVInLFxuICAgICdURVhUX1RPX0lOVF9BTFQnLFxuICAgICdURVhUX1RPX05VTUVSSUNfQUxUJyxcbiAgXSxcbiAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3JlZHNoaWZ0L2xhdGVzdC9kZy9yX1N5c3RlbV9hZG1pbmlzdHJhdGlvbl9mdW5jdGlvbnMuaHRtbFxuICBzeXNBZG1pbjogW1xuICAgICdDSEFOR0VfUVVFUllfUFJJT1JJVFknLFxuICAgICdDSEFOR0VfU0VTU0lPTl9QUklPUklUWScsXG4gICAgJ0NIQU5HRV9VU0VSX1BSSU9SSVRZJyxcbiAgICAnQ1VSUkVOVF9TRVRUSU5HJyxcbiAgICAnUEdfQ0FOQ0VMX0JBQ0tFTkQnLFxuICAgICdQR19URVJNSU5BVEVfQkFDS0VORCcsXG4gICAgJ1JFQk9PVF9DTFVTVEVSJyxcbiAgICAnU0VUX0NPTkZJRycsXG4gIF0sXG4gIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9yZWRzaGlmdC9sYXRlc3QvZGcvcl9TeXN0ZW1faW5mb3JtYXRpb25fZnVuY3Rpb25zLmh0bWxcbiAgc3lzSW5mbzogW1xuICAgICdDVVJSRU5UX0FXU19BQ0NPVU5UJyxcbiAgICAnQ1VSUkVOVF9EQVRBQkFTRScsXG4gICAgJ0NVUlJFTlRfTkFNRVNQQUNFJyxcbiAgICAnQ1VSUkVOVF9TQ0hFTUEnLFxuICAgICdDVVJSRU5UX1NDSEVNQVMnLFxuICAgICdDVVJSRU5UX1VTRVInLFxuICAgICdDVVJSRU5UX1VTRVJfSUQnLFxuICAgICdIQVNfQVNTVU1FUk9MRV9QUklWSUxFR0UnLFxuICAgICdIQVNfREFUQUJBU0VfUFJJVklMRUdFJyxcbiAgICAnSEFTX1NDSEVNQV9QUklWSUxFR0UnLFxuICAgICdIQVNfVEFCTEVfUFJJVklMRUdFJyxcbiAgICAnUEdfQkFDS0VORF9QSUQnLFxuICAgICdQR19HRVRfQ09MUycsXG4gICAgJ1BHX0dFVF9HUkFOVEVFX0JZX0lBTV9ST0xFJyxcbiAgICAnUEdfR0VUX0lBTV9ST0xFX0JZX1VTRVInLFxuICAgICdQR19HRVRfTEFURV9CSU5ESU5HX1ZJRVdfQ09MUycsXG4gICAgJ1BHX0xBU1RfQ09QWV9DT1VOVCcsXG4gICAgJ1BHX0xBU1RfQ09QWV9JRCcsXG4gICAgJ1BHX0xBU1RfVU5MT0FEX0lEJyxcbiAgICAnUEdfTEFTVF9RVUVSWV9JRCcsXG4gICAgJ1BHX0xBU1RfVU5MT0FEX0NPVU5UJyxcbiAgICAnU0VTU0lPTl9VU0VSJyxcbiAgICAnU0xJQ0VfTlVNJyxcbiAgICAnVVNFUicsXG4gICAgJ1ZFUlNJT04nLFxuICBdLFxufTtcblxuLyoqXG4gKiBQcmlvcml0eSA1IChsYXN0KVxuICogRnVsbCBsaXN0IG9mIHJlc2VydmVkIHdvcmRzXG4gKiBhbnkgd29yZHMgdGhhdCBhcmUgaW4gYSBoaWdoZXIgcHJpb3JpdHkgYXJlIHJlbW92ZWRcbiAqL1xuY29uc3QgcmVzZXJ2ZWRLZXl3b3JkcyA9IHtcbiAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3JlZHNoaWZ0L2xhdGVzdC9kZy9yX3BnX2tleXdvcmRzLmh0bWxcbiAgc3RhbmRhcmQ6IFtcbiAgICAnQUVTMTI4JyxcbiAgICAnQUVTMjU2JyxcbiAgICAnQUxMJyxcbiAgICAnQUxMT1dPVkVSV1JJVEUnLFxuICAgICdBTlknLFxuICAgICdBUlJBWScsXG4gICAgJ0FTJyxcbiAgICAnQVNDJyxcbiAgICAnQVVUSE9SSVpBVElPTicsXG4gICAgJ0JBQ0tVUCcsXG4gICAgJ0JFVFdFRU4nLFxuICAgICdCSU5BUlknLFxuICAgICdCT1RIJyxcbiAgICAnQ0hFQ0snLFxuICAgICdDT0xVTU4nLFxuICAgICdDT05TVFJBSU5UJyxcbiAgICAnQ1JFQVRFJyxcbiAgICAnQ1JPU1MnLFxuICAgICdERUZBVUxUJyxcbiAgICAnREVGRVJSQUJMRScsXG4gICAgJ0RFRkxBVEUnLFxuICAgICdERUZSQUcnLFxuICAgICdERVNDJyxcbiAgICAnRElTQUJMRScsXG4gICAgJ0RJU1RJTkNUJyxcbiAgICAnRE8nLFxuICAgICdFTkFCTEUnLFxuICAgICdFTkNPREUnLFxuICAgICdFTkNSWVBUJyxcbiAgICAnRU5DUllQVElPTicsXG4gICAgJ0VYUExJQ0lUJyxcbiAgICAnRkFMU0UnLFxuICAgICdGT1InLFxuICAgICdGT1JFSUdOJyxcbiAgICAnRlJFRVpFJyxcbiAgICAnRlJPTScsXG4gICAgJ0ZVTEwnLFxuICAgICdHTE9CQUxESUNUMjU2JyxcbiAgICAnR0xPQkFMRElDVDY0SycsXG4gICAgJ0dST1VQJyxcbiAgICAnSURFTlRJVFknLFxuICAgICdJR05PUkUnLFxuICAgICdJTElLRScsXG4gICAgJ0lOJyxcbiAgICAnSU5JVElBTExZJyxcbiAgICAnSU5ORVInLFxuICAgICdJTlRPJyxcbiAgICAnSVMnLFxuICAgICdJU05VTEwnLFxuICAgICdMQU5HVUFHRScsXG4gICAgJ0xFQURJTkcnLFxuICAgICdMSUtFJyxcbiAgICAnTElNSVQnLFxuICAgICdMT0NBTFRJTUUnLFxuICAgICdMT0NBTFRJTUVTVEFNUCcsXG4gICAgJ0xVTicsXG4gICAgJ0xVTlMnLFxuICAgICdNSU5VUycsXG4gICAgJ05BVFVSQUwnLFxuICAgICdORVcnLFxuICAgICdOT1QnLFxuICAgICdOT1ROVUxMJyxcbiAgICAnTlVMTCcsXG4gICAgJ05VTExTJyxcbiAgICAnT0ZGJyxcbiAgICAnT0ZGTElORScsXG4gICAgJ09GRlNFVCcsXG4gICAgJ09JRCcsXG4gICAgJ09MRCcsXG4gICAgJ09OTFknLFxuICAgICdPUEVOJyxcbiAgICAnT1JERVInLFxuICAgICdPVVRFUicsXG4gICAgJ09WRVJMQVBTJyxcbiAgICAnUEFSQUxMRUwnLFxuICAgICdQQVJUSVRJT04nLFxuICAgICdQRVJDRU5UJyxcbiAgICAnUEVSTUlTU0lPTlMnLFxuICAgICdQTEFDSU5HJyxcbiAgICAnUFJJTUFSWScsXG4gICAgJ1JFQ09WRVInLFxuICAgICdSRUZFUkVOQ0VTJyxcbiAgICAnUkVKRUNUTE9HJyxcbiAgICAnUkVTT1JUJyxcbiAgICAnUkVTUEVDVCcsXG4gICAgJ1JFU1RPUkUnLFxuICAgICdTSU1JTEFSJyxcbiAgICAnU05BUFNIT1QnLFxuICAgICdTT01FJyxcbiAgICAnU1lTVEVNJyxcbiAgICAnVEFCTEUnLFxuICAgICdUQUcnLFxuICAgICdUREVTJyxcbiAgICAnVEhFTicsXG4gICAgJ1RJTUVTVEFNUCcsXG4gICAgJ1RPJyxcbiAgICAnVE9QJyxcbiAgICAnVFJBSUxJTkcnLFxuICAgICdUUlVFJyxcbiAgICAnVU5JUVVFJyxcbiAgICAnVkVSQk9TRScsXG4gICAgJ1dBTExFVCcsXG4gICAgJ1dJVEhPVVQnLFxuICBdLFxuICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcmVkc2hpZnQvbGF0ZXN0L2RnL2NvcHktcGFyYW1ldGVycy1kYXRhLWNvbnZlcnNpb24uaHRtbFxuICBkYXRhQ29udmVyc2lvblBhcmFtczogW1xuICAgICdBQ0NFUFRBTllEQVRFJyxcbiAgICAnQUNDRVBUSU5WQ0hBUlMnLFxuICAgICdCTEFOS1NBU05VTEwnLFxuICAgICdEQVRFRk9STUFUJyxcbiAgICAnRU1QVFlBU05VTEwnLFxuICAgICdFTkNPRElORycsXG4gICAgJ0VTQ0FQRScsXG4gICAgJ0VYUExJQ0lUX0lEUycsXG4gICAgJ0ZJTExSRUNPUkQnLFxuICAgICdJR05PUkVCTEFOS0xJTkVTJyxcbiAgICAnSUdOT1JFSEVBREVSJyxcbiAgICAnTlVMTCBBUycsXG4gICAgJ1JFTU9WRVFVT1RFUycsXG4gICAgJ1JPVU5ERUMnLFxuICAgICdUSU1FRk9STUFUJyxcbiAgICAnVFJJTUJMQU5LUycsXG4gICAgJ1RSVU5DQVRFQ09MVU1OUycsXG4gIF0sXG4gIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9yZWRzaGlmdC9sYXRlc3QvZGcvY29weS1wYXJhbWV0ZXJzLWRhdGEtbG9hZC5odG1sXG4gIGRhdGFMb2FkUGFyYW1zOiBbJ0NPTVBST1dTJywgJ0NPTVBVUERBVEUnLCAnTUFYRVJST1InLCAnTk9MT0FEJywgJ1NUQVRVUERBVEUnXSxcbiAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3JlZHNoaWZ0L2xhdGVzdC9kZy9jb3B5LXBhcmFtZXRlcnMtZGF0YS1mb3JtYXQuaHRtbFxuICBkYXRhRm9ybWF0UGFyYW1zOiBbXG4gICAgJ0ZPUk1BVCcsXG4gICAgJ0NTVicsXG4gICAgJ0RFTElNSVRFUicsXG4gICAgJ0ZJWEVEV0lEVEgnLFxuICAgICdTSEFQRUZJTEUnLFxuICAgICdBVlJPJyxcbiAgICAnSlNPTicsXG4gICAgJ1BBUlFVRVQnLFxuICAgICdPUkMnLFxuICBdLFxuICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcmVkc2hpZnQvbGF0ZXN0L2RnL2NvcHktcGFyYW1ldGVycy1hdXRob3JpemF0aW9uLmh0bWxcbiAgY29weUF1dGhQYXJhbXM6IFtcbiAgICAnQUNDRVNTX0tFWV9JRCcsXG4gICAgJ0NSRURFTlRJQUxTJyxcbiAgICAnRU5DUllQVEVEJyxcbiAgICAnSUFNX1JPTEUnLFxuICAgICdNQVNURVJfU1lNTUVUUklDX0tFWScsXG4gICAgJ1NFQ1JFVF9BQ0NFU1NfS0VZJyxcbiAgICAnU0VTU0lPTl9UT0tFTicsXG4gIF0sXG4gIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9yZWRzaGlmdC9sYXRlc3QvZGcvY29weS1wYXJhbWV0ZXJzLWZpbGUtY29tcHJlc3Npb24uaHRtbFxuICBjb3B5Q29tcHJlc3Npb25QYXJhbXM6IFsnQlpJUDInLCAnR1pJUCcsICdMWk9QJywgJ1pTVEQnXSxcbiAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3JlZHNoaWZ0L2xhdGVzdC9kZy9yX0NPUFktYWxwaGFiZXRpY2FsLXBhcm0tbGlzdC5odG1sXG4gIGNvcHlNaXNjUGFyYW1zOiBbJ01BTklGRVNUJywgJ1JFQURSQVRJTycsICdSRUdJT04nLCAnU1NIJ10sXG4gIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9yZWRzaGlmdC9sYXRlc3QvZGcvY19Db21wcmVzc2lvbl9lbmNvZGluZ3MuaHRtbFxuICBjb21wcmVzc2lvbkVuY29kaW5nczogW1xuICAgICdSQVcnLFxuICAgICdBWjY0JyxcbiAgICAnQllURURJQ1QnLFxuICAgICdERUxUQScsXG4gICAgJ0RFTFRBMzJLJyxcbiAgICAnTFpPJyxcbiAgICAnTU9TVExZOCcsXG4gICAgJ01PU1RMWTE2JyxcbiAgICAnTU9TVExZMzInLFxuICAgICdSVU5MRU5HVEgnLFxuICAgICdURVhUMjU1JyxcbiAgICAnVEVYVDMySycsXG4gIF0sXG4gIG1pc2M6IFtcbiAgICAvLyBDUkVBVEUgRVhURVJOQUwgU0NIRU1BIChodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcmVkc2hpZnQvbGF0ZXN0L2RnL3JfQ1JFQVRFX0VYVEVSTkFMX1NDSEVNQS5odG1sKVxuICAgICdDQVRBTE9HX1JPTEUnLFxuICAgICdTRUNSRVRfQVJOJyxcbiAgICAnRVhURVJOQUwnLFxuICAgICdISVZFIE1FVEFTVE9SRScsIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9yZWRzaGlmdC9sYXRlc3QvZGcvYy1zcGVjdHJ1bS1leHRlcm5hbC1zY2hlbWFzLmh0bWxcbiAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcmVkc2hpZnQvbGF0ZXN0L2RnL2NfY2hvb3NpbmdfZGlzdF9zb3J0Lmh0bWxcbiAgICAnQVVUTycsXG4gICAgJ0VWRU4nLFxuICAgICdLRVknLFxuICAgICdQUkVESUNBVEUnLCAvLyBBTkFMWVpFIHwgQU5BTFlTRSAoaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3JlZHNoaWZ0L2xhdGVzdC9kZy9yX0FOQUxZWkUuaHRtbClcbiAgICAvLyB1bmtub3duXG4gICAgJ0NPTVBSRVNTSU9OJyxcbiAgICAnREFUQSBDQVRBTE9HJyxcbiAgXSxcbiAgLyoqXG4gICAqIE90aGVyIGtleXdvcmRzIG5vdCBpbmNsdWRlZDpcbiAgICogU1RMOiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcmVkc2hpZnQvbGF0ZXN0L2RnL2NfaW50cm9fU1RMX3RhYmxlcy5odG1sXG4gICAqIFNWQ1M6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9yZWRzaGlmdC9sYXRlc3QvZGcvc3Zjc192aWV3cy5odG1sXG4gICAqIFNWTDogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3JlZHNoaWZ0L2xhdGVzdC9kZy9zdmxfdmlld3MuaHRtbFxuICAgKiBTVlY6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9yZWRzaGlmdC9sYXRlc3QvZGcvc3Z2X3ZpZXdzLmh0bWxcbiAgICovXG4gIGRhdGFUeXBlczogW1xuICAgICdDSEFSJyxcbiAgICAnQ0hBUkFDVEVSJyxcbiAgICAnTkNIQVInLFxuICAgICdWQVJDSEFSJyxcbiAgICAnQ0hBUkFDVEVSIFZBUllJTkcnLFxuICAgICdOVkFSQ0hBUicsXG4gICAgJ0JQQ0hBUicsXG4gICAgJ1RFWFQnLFxuICBdLFxufTtcblxuLyoqXG4gKiBQcmlvcml0eSAxIChmaXJzdClcbiAqIGtleXdvcmRzIHRoYXQgYmVnaW4gYSBuZXcgc3RhdGVtZW50XG4gKiB3aWxsIGJlZ2luIG5ldyBpbmRlbnRlZCBibG9ja1xuICovXG4vLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcmVkc2hpZnQvbGF0ZXN0L2RnL2NfU1FMX2NvbW1hbmRzLmh0bWxcbmNvbnN0IHJlc2VydmVkQ29tbWFuZHMgPSBbXG4gICdBQk9SVCcsXG4gICdBTFRFUiBEQVRBQkFTRScsXG4gICdBTFRFUiBEQVRBU0hBUkUnLFxuICAnQUxURVIgREVGQVVMVCBQUklWSUxFR0VTJyxcbiAgJ0FMVEVSIEdST1VQJyxcbiAgJ0FMVEVSIE1BVEVSSUFMSVpFRCBWSUVXJyxcbiAgJ0FMVEVSIFBST0NFRFVSRScsXG4gICdBTFRFUiBTQ0hFTUEnLFxuICAnQUxURVIgVEFCTEUnLFxuICAnQUxURVIgVEFCTEUgQVBQRU5EJyxcbiAgJ0FMVEVSIFVTRVInLFxuICAnQU5BTFlTRScsXG4gICdBTkFMWVpFJyxcbiAgJ0FOQUxZU0UgQ09NUFJFU1NJT04nLFxuICAnQU5BTFlaRSBDT01QUkVTU0lPTicsXG4gICdCRUdJTicsXG4gICdDQUxMJyxcbiAgJ0NBTkNFTCcsXG4gICdDTE9TRScsXG4gICdDT01NRU5UJyxcbiAgJ0NPTU1JVCcsXG4gICdDT1BZJyxcbiAgJ0NSRUFURSBEQVRBQkFTRScsXG4gICdDUkVBVEUgREFUQVNIQVJFJyxcbiAgJ0NSRUFURSBFWFRFUk5BTCBGVU5DVElPTicsXG4gICdDUkVBVEUgRVhURVJOQUwgU0NIRU1BJyxcbiAgJ0NSRUFURSBFWFRFUk5BTCBUQUJMRScsXG4gICdDUkVBVEUgRlVOQ1RJT04nLFxuICAnQ1JFQVRFIEdST1VQJyxcbiAgJ0NSRUFURSBMSUJSQVJZJyxcbiAgJ0NSRUFURSBNQVRFUklBTElaRUQgVklFVycsXG4gICdDUkVBVEUgTU9ERUwnLFxuICAnQ1JFQVRFIFBST0NFRFVSRScsXG4gICdDUkVBVEUgU0NIRU1BJyxcbiAgJ0NSRUFURSBUQUJMRScsXG4gICdDUkVBVEUgVEFCTEUgQVMnLFxuICAnQ1JFQVRFIFVTRVInLFxuICAnQ1JFQVRFIFZJRVcnLFxuICAnREVBTExPQ0FURScsXG4gICdERUNMQVJFJyxcbiAgJ0RFTEVURScsXG4gICdERVNDIERBVEFTSEFSRScsXG4gICdEUk9QIERBVEFCQVNFJyxcbiAgJ0RST1AgREFUQVNIQVJFJyxcbiAgJ0RST1AgRlVOQ1RJT04nLFxuICAnRFJPUCBHUk9VUCcsXG4gICdEUk9QIExJQlJBUlknLFxuICAnRFJPUCBNT0RFTCcsXG4gICdEUk9QIE1BVEVSSUFMSVpFRCBWSUVXJyxcbiAgJ0RST1AgUFJPQ0VEVVJFJyxcbiAgJ0RST1AgU0NIRU1BJyxcbiAgJ0RST1AgVEFCTEUnLFxuICAnRFJPUCBVU0VSJyxcbiAgJ0RST1AgVklFVycsXG4gICdEUk9QJyxcbiAgJ0VORCcsXG4gICdFWEVDVVRFJyxcbiAgJ0VYUExBSU4nLFxuICAnRkVUQ0gnLFxuICAnRlJPTScsXG4gICdHUkFOVCcsXG4gICdIQVZJTkcnLFxuICAnSU5TRVJUJyxcbiAgJ0xPQ0snLFxuICAnUFJFUEFSRScsXG4gICdSRUZSRVNIIE1BVEVSSUFMSVpFRCBWSUVXJyxcbiAgJ1JFU0VUJyxcbiAgJ1JFVk9LRScsXG4gICdST0xMQkFDSycsXG4gICdTRUxFQ1QnLFxuICAnU0VMRUNUIElOVE8nLFxuICAnU0VUJyxcbiAgJ1NFVCBTRVNTSU9OIEFVVEhPUklaQVRJT04nLFxuICAnU0VUIFNFU1NJT04gQ0hBUkFDVEVSSVNUSUNTJyxcbiAgJ1NIT1cnLFxuICAnU0hPVyBFWFRFUk5BTCBUQUJMRScsXG4gICdTSE9XIE1PREVMJyxcbiAgJ1NIT1cgREFUQVNIQVJFUycsXG4gICdTSE9XIFBST0NFRFVSRScsXG4gICdTSE9XIFRBQkxFJyxcbiAgJ1NIT1cgVklFVycsXG4gICdTVEFSVCBUUkFOU0FDVElPTicsXG4gICdUUlVOQ0FURScsXG4gICdVTkxPQUQnLFxuICAnVVBEQVRFJyxcbiAgJ1ZBQ1VVTScsXG4gICdXSEVSRScsXG4gICdXSVRIJyxcbiAgLy8gb3RoZXJcbiAgJ0dST1VQIEJZJyxcbiAgJ09SREVSIEJZJyxcbiAgJ0xJTUlUJyxcbiAgJ09GRlNFVCcsXG4gICdWQUxVRVMnLFxuICAnTU9ESUZZJywgLy8gdmVyaWZ5XG4gICdJTlNFUlQgSU5UTycsIC8vIHZlcmlmeVxuICAnQUxURVIgQ09MVU1OJywgLy8gdmVyaWZ5XG4gICdTRVQgU0NIRU1BJywgLy8gdmVyaWZ5XG5dO1xuXG4vKipcbiAqIFByaW9yaXR5IDJcbiAqIGNvbW1hbmRzIHRoYXQgb3BlcmF0ZSBvbiB0d28gdGFibGVzIG9yIHN1YnF1ZXJpZXNcbiAqIHR3byBtYWluIGNhdGVnb3JpZXM6IGpvaW5zIGFuZCBib29sZWFuIHNldCBvcGVyYXRvcnNcbiAqL1xuY29uc3QgcmVzZXJ2ZWRCaW5hcnlDb21tYW5kcyA9IFtcbiAgLy8gc2V0IGJvb2xlYW5zXG4gICdJTlRFUlNFQ1QnLFxuICAnSU5URVJTRUNUIEFMTCcsXG4gICdJTlRFUlNFQ1QgRElTVElOQ1QnLFxuICAnVU5JT04nLFxuICAnVU5JT04gQUxMJyxcbiAgJ1VOSU9OIERJU1RJTkNUJyxcbiAgJ0VYQ0VQVCcsXG4gICdFWENFUFQgQUxMJyxcbiAgJ0VYQ0VQVCBESVNUSU5DVCcsXG4gIC8vIGpvaW5zXG4gICdKT0lOJyxcbiAgJ0lOTkVSIEpPSU4nLFxuICAnTEVGVCBKT0lOJyxcbiAgJ0xFRlQgT1VURVIgSk9JTicsXG4gICdSSUdIVCBKT0lOJyxcbiAgJ1JJR0hUIE9VVEVSIEpPSU4nLFxuICAnRlVMTCBKT0lOJyxcbiAgJ0ZVTEwgT1VURVIgSk9JTicsXG4gICdDUk9TUyBKT0lOJyxcbiAgJ05BVFVSQUwgSk9JTicsXG5dO1xuXG4vKipcbiAqIFByaW9yaXR5IDNcbiAqIGtleXdvcmRzIHRoYXQgZm9sbG93IGEgcHJldmlvdXMgU3RhdGVtZW50LCBtdXN0IGJlIGF0dGFjaGVkIHRvIHN1YnNlcXVlbnQgZGF0YVxuICogY2FuIGJlIGZ1bGx5IGlubGluZSBvciBvbiBuZXdsaW5lIHdpdGggb3B0aW9uYWwgaW5kZW50XG4gKi9cbmNvbnN0IHJlc2VydmVkRGVwZW5kZW50Q2xhdXNlcyA9IFsnV0hFTicsICdFTFNFJ107XG5cbi8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9yZWRzaGlmdC9sYXRlc3QvZGcvY21fY2hhcF9TUUxDb21tYW5kUmVmLmh0bWxcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZHNoaWZ0Rm9ybWF0dGVyIGV4dGVuZHMgRm9ybWF0dGVyIHtcbiAgc3RhdGljIHJlc2VydmVkQ29tbWFuZHMgPSByZXNlcnZlZENvbW1hbmRzO1xuICBzdGF0aWMgcmVzZXJ2ZWRCaW5hcnlDb21tYW5kcyA9IHJlc2VydmVkQmluYXJ5Q29tbWFuZHM7XG4gIHN0YXRpYyByZXNlcnZlZERlcGVuZGVudENsYXVzZXMgPSByZXNlcnZlZERlcGVuZGVudENsYXVzZXM7XG4gIHN0YXRpYyByZXNlcnZlZEpvaW5Db25kaXRpb25zID0gWydPTicsICdVU0lORyddO1xuICBzdGF0aWMgcmVzZXJ2ZWRMb2dpY2FsT3BlcmF0b3JzID0gWydBTkQnLCAnT1InXTtcbiAgc3RhdGljIHJlc2VydmVkS2V5d29yZHMgPSBkZWR1cGUoW1xuICAgIC4uLk9iamVjdC52YWx1ZXMocmVzZXJ2ZWRGdW5jdGlvbnMpLnJlZHVjZSgoYWNjLCBhcnIpID0+IFsuLi5hY2MsIC4uLmFycl0sIFtdKSxcbiAgICAuLi5PYmplY3QudmFsdWVzKHJlc2VydmVkS2V5d29yZHMpLnJlZHVjZSgoYWNjLCBhcnIpID0+IFsuLi5hY2MsIC4uLmFycl0sIFtdKSxcbiAgXSk7XG4gIHN0YXRpYyBzdHJpbmdUeXBlczogU3RyaW5nUGF0dGVyblR5cGVbXSA9IFtgXCJcImAsIFwiJydcIiwgJ2BgJ107XG4gIHN0YXRpYyBibG9ja1N0YXJ0ID0gWycoJ107XG4gIHN0YXRpYyBibG9ja0VuZCA9IFsnKSddO1xuICBzdGF0aWMgaW5kZXhlZFBsYWNlaG9sZGVyVHlwZXMgPSBbJz8nXTtcbiAgc3RhdGljIG5hbWVkUGxhY2Vob2xkZXJUeXBlcyA9IFsnQCcsICcjJywgJyQnXTtcbiAgc3RhdGljIGxpbmVDb21tZW50VHlwZXMgPSBbJy0tJ107XG4gIHN0YXRpYyBvcGVyYXRvcnMgPSBbJ3wvJywgJ3x8LycsICc8PCcsICc+PicsICd8fCddO1xuXG4gIHRva2VuaXplcigpIHtcbiAgICByZXR1cm4gbmV3IFRva2VuaXplcih7XG4gICAgICByZXNlcnZlZENvbW1hbmRzOiBSZWRzaGlmdEZvcm1hdHRlci5yZXNlcnZlZENvbW1hbmRzLFxuICAgICAgcmVzZXJ2ZWRCaW5hcnlDb21tYW5kczogUmVkc2hpZnRGb3JtYXR0ZXIucmVzZXJ2ZWRCaW5hcnlDb21tYW5kcyxcbiAgICAgIHJlc2VydmVkRGVwZW5kZW50Q2xhdXNlczogUmVkc2hpZnRGb3JtYXR0ZXIucmVzZXJ2ZWREZXBlbmRlbnRDbGF1c2VzLFxuICAgICAgcmVzZXJ2ZWRKb2luQ29uZGl0aW9uczogUmVkc2hpZnRGb3JtYXR0ZXIucmVzZXJ2ZWRKb2luQ29uZGl0aW9ucyxcbiAgICAgIHJlc2VydmVkTG9naWNhbE9wZXJhdG9yczogUmVkc2hpZnRGb3JtYXR0ZXIucmVzZXJ2ZWRMb2dpY2FsT3BlcmF0b3JzLFxuICAgICAgcmVzZXJ2ZWRLZXl3b3JkczogUmVkc2hpZnRGb3JtYXR0ZXIucmVzZXJ2ZWRLZXl3b3JkcyxcbiAgICAgIHN0cmluZ1R5cGVzOiBSZWRzaGlmdEZvcm1hdHRlci5zdHJpbmdUeXBlcyxcbiAgICAgIGJsb2NrU3RhcnQ6IFJlZHNoaWZ0Rm9ybWF0dGVyLmJsb2NrU3RhcnQsXG4gICAgICBibG9ja0VuZDogUmVkc2hpZnRGb3JtYXR0ZXIuYmxvY2tFbmQsXG4gICAgICBpbmRleGVkUGxhY2Vob2xkZXJUeXBlczogUmVkc2hpZnRGb3JtYXR0ZXIuaW5kZXhlZFBsYWNlaG9sZGVyVHlwZXMsXG4gICAgICBuYW1lZFBsYWNlaG9sZGVyVHlwZXM6IFJlZHNoaWZ0Rm9ybWF0dGVyLm5hbWVkUGxhY2Vob2xkZXJUeXBlcyxcbiAgICAgIGxpbmVDb21tZW50VHlwZXM6IFJlZHNoaWZ0Rm9ybWF0dGVyLmxpbmVDb21tZW50VHlwZXMsXG4gICAgICBvcGVyYXRvcnM6IFJlZHNoaWZ0Rm9ybWF0dGVyLm9wZXJhdG9ycyxcbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0IEZvcm1hdHRlciBmcm9tICcuLi9jb3JlL0Zvcm1hdHRlcic7XG5pbXBvcnQgVG9rZW5pemVyIGZyb20gJy4uL2NvcmUvVG9rZW5pemVyJztcbmltcG9ydCB7IGlzVG9rZW4sIFRva2VuLCBUb2tlblR5cGUgfSBmcm9tICcuLi9jb3JlL3Rva2VuJzsgLy8gY29udmVydCB0byBwYXJ0aWFsIHR5cGUgaW1wb3J0IGluIFRTIDQuNVxuaW1wb3J0IHR5cGUgeyBTdHJpbmdQYXR0ZXJuVHlwZSB9IGZyb20gJy4uL2NvcmUvcmVnZXhGYWN0b3J5JztcbmltcG9ydCB7IGRlZHVwZSB9IGZyb20gJy4uL3V0aWxzJztcblxuLyoqXG4gKiBQcmlvcml0eSA1IChsYXN0KVxuICogRnVsbCBsaXN0IG9mIHJlc2VydmVkIGZ1bmN0aW9uc1xuICogZGlzdGluY3QgZnJvbSBLZXl3b3JkcyBkdWUgdG8gaW50ZXJhY3Rpb24gd2l0aCBwYXJlbnRoZXNlc1xuICovXG4vLyBodHRwOi8vc3BhcmsuYXBhY2hlLm9yZy9kb2NzL2xhdGVzdC9zcWwtcmVmLWZ1bmN0aW9ucy5odG1sXG5jb25zdCByZXNlcnZlZEZ1bmN0aW9ucyA9IHtcbiAgLy8gaHR0cDovL3NwYXJrLmFwYWNoZS5vcmcvZG9jcy9sYXRlc3Qvc3FsLXJlZi1mdW5jdGlvbnMtYnVpbHRpbi5odG1sI2FnZ3JlZ2F0ZS1mdW5jdGlvbnNcbiAgYWdncmVnYXRlOiBbXG4gICAgJ0FOWScsXG4gICAgJ0FQUFJPWF9DT1VOVF9ESVNUSU5DVCcsXG4gICAgJ0FQUFJPWF9QRVJDRU5USUxFJyxcbiAgICAnQVZHJyxcbiAgICAnQklUX0FORCcsXG4gICAgJ0JJVF9PUicsXG4gICAgJ0JJVF9YT1InLFxuICAgICdCT09MX0FORCcsXG4gICAgJ0JPT0xfT1InLFxuICAgICdDT0xMRUNUX0xJU1QnLFxuICAgICdDT0xMRUNUX1NFVCcsXG4gICAgJ0NPUlInLFxuICAgICdDT1VOVCcsXG4gICAgJ0NPVU5UJyxcbiAgICAnQ09VTlQnLFxuICAgICdDT1VOVF9JRicsXG4gICAgJ0NPVU5UX01JTl9TS0VUQ0gnLFxuICAgICdDT1ZBUl9QT1AnLFxuICAgICdDT1ZBUl9TQU1QJyxcbiAgICAnRVZFUlknLFxuICAgICdGSVJTVCcsXG4gICAgJ0ZJUlNUX1ZBTFVFJyxcbiAgICAnR1JPVVBJTkcnLFxuICAgICdHUk9VUElOR19JRCcsXG4gICAgJ0tVUlRPU0lTJyxcbiAgICAnTEFTVCcsXG4gICAgJ0xBU1RfVkFMVUUnLFxuICAgICdNQVgnLFxuICAgICdNQVhfQlknLFxuICAgICdNRUFOJyxcbiAgICAnTUlOJyxcbiAgICAnTUlOX0JZJyxcbiAgICAnUEVSQ0VOVElMRScsXG4gICAgJ1BFUkNFTlRJTEUnLFxuICAgICdQRVJDRU5USUxFX0FQUFJPWCcsXG4gICAgJ1NLRVdORVNTJyxcbiAgICAnU09NRScsXG4gICAgJ1NURCcsXG4gICAgJ1NURERFVicsXG4gICAgJ1NURERFVl9QT1AnLFxuICAgICdTVERERVZfU0FNUCcsXG4gICAgJ1NVTScsXG4gICAgJ1ZBUl9QT1AnLFxuICAgICdWQVJfU0FNUCcsXG4gICAgJ1ZBUklBTkNFJyxcbiAgXSxcbiAgLy8gaHR0cDovL3NwYXJrLmFwYWNoZS5vcmcvZG9jcy9sYXRlc3Qvc3FsLXJlZi1mdW5jdGlvbnMtYnVpbHRpbi5odG1sI3dpbmRvdy1mdW5jdGlvbnNcbiAgd2luZG93OiBbXG4gICAgJ0NVTUVfRElTVCcsXG4gICAgJ0RFTlNFX1JBTksnLFxuICAgICdMQUcnLFxuICAgICdMRUFEJyxcbiAgICAnTlRIX1ZBTFVFJyxcbiAgICAnTlRJTEUnLFxuICAgICdQRVJDRU5UX1JBTksnLFxuICAgICdSQU5LJyxcbiAgICAnUk9XX05VTUJFUicsXG4gIF0sXG4gIC8vIGh0dHA6Ly9zcGFyay5hcGFjaGUub3JnL2RvY3MvbGF0ZXN0L3NxbC1yZWYtZnVuY3Rpb25zLWJ1aWx0aW4uaHRtbCNhcnJheS1mdW5jdGlvbnNcbiAgYXJyYXk6IFtcbiAgICAnQVJSQVknLFxuICAgICdBUlJBWV9DT05UQUlOUycsXG4gICAgJ0FSUkFZX0RJU1RJTkNUJyxcbiAgICAnQVJSQVlfRVhDRVBUJyxcbiAgICAnQVJSQVlfSU5URVJTRUNUJyxcbiAgICAnQVJSQVlfSk9JTicsXG4gICAgJ0FSUkFZX01BWCcsXG4gICAgJ0FSUkFZX01JTicsXG4gICAgJ0FSUkFZX1BPU0lUSU9OJyxcbiAgICAnQVJSQVlfUkVNT1ZFJyxcbiAgICAnQVJSQVlfUkVQRUFUJyxcbiAgICAnQVJSQVlfVU5JT04nLFxuICAgICdBUlJBWVNfT1ZFUkxBUCcsXG4gICAgJ0FSUkFZU19aSVAnLFxuICAgICdGTEFUVEVOJyxcbiAgICAnU0VRVUVOQ0UnLFxuICAgICdTSFVGRkxFJyxcbiAgICAnU0xJQ0UnLFxuICAgICdTT1JUX0FSUkFZJyxcbiAgXSxcbiAgLy8gaHR0cDovL3NwYXJrLmFwYWNoZS5vcmcvZG9jcy9sYXRlc3Qvc3FsLXJlZi1mdW5jdGlvbnMtYnVpbHRpbi5odG1sI21hcC1mdW5jdGlvbnNcbiAgbWFwOiBbXG4gICAgJ0VMRU1FTlRfQVQnLFxuICAgICdFTEVNRU5UX0FUJyxcbiAgICAnTUFQJyxcbiAgICAnTUFQX0NPTkNBVCcsXG4gICAgJ01BUF9FTlRSSUVTJyxcbiAgICAnTUFQX0ZST01fQVJSQVlTJyxcbiAgICAnTUFQX0ZST01fRU5UUklFUycsXG4gICAgJ01BUF9LRVlTJyxcbiAgICAnTUFQX1ZBTFVFUycsXG4gICAgJ1NUUl9UT19NQVAnLFxuICBdLFxuICAvLyBodHRwOi8vc3BhcmsuYXBhY2hlLm9yZy9kb2NzL2xhdGVzdC9zcWwtcmVmLWZ1bmN0aW9ucy1idWlsdGluLmh0bWwjZGF0ZS1hbmQtdGltZXN0YW1wLWZ1bmN0aW9uc1xuICBkYXRldGltZTogW1xuICAgICdBRERfTU9OVEhTJyxcbiAgICAnQ1VSUkVOVF9EQVRFJyxcbiAgICAnQ1VSUkVOVF9EQVRFJyxcbiAgICAnQ1VSUkVOVF9USU1FU1RBTVAnLFxuICAgICdDVVJSRU5UX1RJTUVTVEFNUCcsXG4gICAgJ0NVUlJFTlRfVElNRVpPTkUnLFxuICAgICdEQVRFX0FERCcsXG4gICAgJ0RBVEVfRk9STUFUJyxcbiAgICAnREFURV9GUk9NX1VOSVhfREFURScsXG4gICAgJ0RBVEVfUEFSVCcsXG4gICAgJ0RBVEVfU1VCJyxcbiAgICAnREFURV9UUlVOQycsXG4gICAgJ0RBVEVESUZGJyxcbiAgICAnREFZJyxcbiAgICAnREFZT0ZNT05USCcsXG4gICAgJ0RBWU9GV0VFSycsXG4gICAgJ0RBWU9GWUVBUicsXG4gICAgJ0VYVFJBQ1QnLFxuICAgICdGUk9NX1VOSVhUSU1FJyxcbiAgICAnRlJPTV9VVENfVElNRVNUQU1QJyxcbiAgICAnSE9VUicsXG4gICAgJ0xBU1RfREFZJyxcbiAgICAnTUFLRV9EQVRFJyxcbiAgICAnTUFLRV9EVF9JTlRFUlZBTCcsXG4gICAgJ01BS0VfSU5URVJWQUwnLFxuICAgICdNQUtFX1RJTUVTVEFNUCcsXG4gICAgJ01BS0VfWU1fSU5URVJWQUwnLFxuICAgICdNSU5VVEUnLFxuICAgICdNT05USCcsXG4gICAgJ01PTlRIU19CRVRXRUVOJyxcbiAgICAnTkVYVF9EQVknLFxuICAgICdOT1cnLFxuICAgICdRVUFSVEVSJyxcbiAgICAnU0VDT05EJyxcbiAgICAnU0VTU0lPTl9XSU5ET1cnLFxuICAgICdUSU1FU1RBTVBfTUlDUk9TJyxcbiAgICAnVElNRVNUQU1QX01JTExJUycsXG4gICAgJ1RJTUVTVEFNUF9TRUNPTkRTJyxcbiAgICAnVE9fREFURScsXG4gICAgJ1RPX1RJTUVTVEFNUCcsXG4gICAgJ1RPX1VOSVhfVElNRVNUQU1QJyxcbiAgICAnVE9fVVRDX1RJTUVTVEFNUCcsXG4gICAgJ1RSVU5DJyxcbiAgICAnVU5JWF9EQVRFJyxcbiAgICAnVU5JWF9NSUNST1MnLFxuICAgICdVTklYX01JTExJUycsXG4gICAgJ1VOSVhfU0VDT05EUycsXG4gICAgJ1VOSVhfVElNRVNUQU1QJyxcbiAgICAnV0VFS0RBWScsXG4gICAgJ1dFRUtPRllFQVInLFxuICAgICdXSU5ET1cnLFxuICAgICdZRUFSJyxcbiAgXSxcbiAgLy8gaHR0cDovL3NwYXJrLmFwYWNoZS5vcmcvZG9jcy9sYXRlc3Qvc3FsLXJlZi1mdW5jdGlvbnMtYnVpbHRpbi5odG1sI2pzb24tZnVuY3Rpb25zXG4gIGpzb246IFtcbiAgICAnRlJPTV9KU09OJyxcbiAgICAnR0VUX0pTT05fT0JKRUNUJyxcbiAgICAnSlNPTl9BUlJBWV9MRU5HVEgnLFxuICAgICdKU09OX09CSkVDVF9LRVlTJyxcbiAgICAnSlNPTl9UVVBMRScsXG4gICAgJ1NDSEVNQV9PRl9KU09OJyxcbiAgICAnVE9fSlNPTicsXG4gIF0sXG4gIC8vIGh0dHA6Ly9zcGFyay5hcGFjaGUub3JnL2RvY3MvbGF0ZXN0L2FwaS9zcWwvaW5kZXguaHRtbFxuICBtaXNjOiBbXG4gICAgJ0FCUycsXG4gICAgJ0FDT1MnLFxuICAgICdBQ09TSCcsXG4gICAgJ0FHR1JFR0FURScsXG4gICAgJ0FSUkFZX1NPUlQnLFxuICAgICdBU0NJSScsXG4gICAgJ0FTSU4nLFxuICAgICdBU0lOSCcsXG4gICAgJ0FTU0VSVF9UUlVFJyxcbiAgICAnQVRBTicsXG4gICAgJ0FUQU4yJyxcbiAgICAnQVRBTkgnLFxuICAgICdCQVNFNjQnLFxuICAgICdCSUdJTlQnLFxuICAgICdCSU4nLFxuICAgICdCSU5BUlknLFxuICAgICdCSVRfQ09VTlQnLFxuICAgICdCSVRfR0VUJyxcbiAgICAnQklUX0xFTkdUSCcsXG4gICAgJ0JPT0xFQU4nLFxuICAgICdCUk9VTkQnLFxuICAgICdCVFJJTScsXG4gICAgJ0NBUkRJTkFMSVRZJyxcbiAgICAnQ0JSVCcsXG4gICAgJ0NFSUwnLFxuICAgICdDRUlMSU5HJyxcbiAgICAnQ0hBUicsXG4gICAgJ0NIQVJfTEVOR1RIJyxcbiAgICAnQ0hBUkFDVEVSX0xFTkdUSCcsXG4gICAgJ0NIUicsXG4gICAgJ0NPTkNBVCcsXG4gICAgJ0NPTkNBVF9XUycsXG4gICAgJ0NPTlYnLFxuICAgICdDT1MnLFxuICAgICdDT1NIJyxcbiAgICAnQ09UJyxcbiAgICAnQ1JDMzInLFxuICAgICdDVVJSRU5UX0NBVEFMT0cnLFxuICAgICdDVVJSRU5UX0RBVEFCQVNFJyxcbiAgICAnQ1VSUkVOVF9VU0VSJyxcbiAgICAnREFURScsXG4gICAgJ0RFQ0lNQUwnLFxuICAgICdERUdSRUVTJyxcbiAgICAnRE9VQkxFJyxcbiAgICAvLyAnRScsXG4gICAgJ0VMVCcsXG4gICAgJ0VYUCcsXG4gICAgJ0VYUE0xJyxcbiAgICAnRkFDVE9SSUFMJyxcbiAgICAnRklORF9JTl9TRVQnLFxuICAgICdGTE9BVCcsXG4gICAgJ0ZMT09SJyxcbiAgICAnRk9SQUxMJyxcbiAgICAnRk9STUFUX05VTUJFUicsXG4gICAgJ0ZPUk1BVF9TVFJJTkcnLFxuICAgICdGUk9NX0NTVicsXG4gICAgJ0dFVEJJVCcsXG4gICAgJ0hBU0gnLFxuICAgICdIRVgnLFxuICAgICdIWVBPVCcsXG4gICAgJ0lOSVRDQVAnLFxuICAgICdJTkxJTkUnLFxuICAgICdJTkxJTkVfT1VURVInLFxuICAgICdJTlBVVF9GSUxFX0JMT0NLX0xFTkdUSCcsXG4gICAgJ0lOUFVUX0ZJTEVfQkxPQ0tfU1RBUlQnLFxuICAgICdJTlBVVF9GSUxFX05BTUUnLFxuICAgICdJTlNUUicsXG4gICAgJ0lOVCcsXG4gICAgJ0lTTkFOJyxcbiAgICAnSVNOT1ROVUxMJyxcbiAgICAnSVNOVUxMJyxcbiAgICAnSkFWQV9NRVRIT0QnLFxuICAgICdMQ0FTRScsXG4gICAgJ0xFRlQnLFxuICAgICdMRU5HVEgnLFxuICAgICdMRVZFTlNIVEVJTicsXG4gICAgJ0xOJyxcbiAgICAnTE9DQVRFJyxcbiAgICAnTE9HJyxcbiAgICAnTE9HMTAnLFxuICAgICdMT0cxUCcsXG4gICAgJ0xPRzInLFxuICAgICdMT1dFUicsXG4gICAgJ0xQQUQnLFxuICAgICdMVFJJTScsXG4gICAgJ01BUF9GSUxURVInLFxuICAgICdNQVBfWklQX1dJVEgnLFxuICAgICdNRDUnLFxuICAgICdNT0QnLFxuICAgICdNT05PVE9OSUNBTExZX0lOQ1JFQVNJTkdfSUQnLFxuICAgICdOQU1FRF9TVFJVQ1QnLFxuICAgICdOQU5WTCcsXG4gICAgJ05FR0FUSVZFJyxcbiAgICAnTlZMJyxcbiAgICAnTlZMMicsXG4gICAgJ09DVEVUX0xFTkdUSCcsXG4gICAgJ09WRVJMQVknLFxuICAgICdQQVJTRV9VUkwnLFxuICAgICdQSScsXG4gICAgJ1BNT0QnLFxuICAgICdQT1NFWFBMT0RFJyxcbiAgICAnUE9TRVhQTE9ERV9PVVRFUicsXG4gICAgJ1BPU0lUSU9OJyxcbiAgICAnUE9TSVRJVkUnLFxuICAgICdQT1cnLFxuICAgICdQT1dFUicsXG4gICAgJ1BSSU5URicsXG4gICAgJ1JBRElBTlMnLFxuICAgICdSQUlTRV9FUlJPUicsXG4gICAgJ1JBTkQnLFxuICAgICdSQU5ETicsXG4gICAgJ1JBTkRPTScsXG4gICAgJ1JFRkxFQ1QnLFxuICAgICdSRUdFWFBfRVhUUkFDVCcsXG4gICAgJ1JFR0VYUF9FWFRSQUNUX0FMTCcsXG4gICAgJ1JFR0VYUF9MSUtFJyxcbiAgICAnUkVHRVhQX1JFUExBQ0UnLFxuICAgICdSRVBFQVQnLFxuICAgICdSRVBMQUNFJyxcbiAgICAnUkVWRVJTRScsXG4gICAgJ1JJR0hUJyxcbiAgICAnUklOVCcsXG4gICAgJ1JPVU5EJyxcbiAgICAnUlBBRCcsXG4gICAgJ1JUUklNJyxcbiAgICAnU0NIRU1BX09GX0NTVicsXG4gICAgJ1NFTlRFTkNFUycsXG4gICAgJ1NIQScsXG4gICAgJ1NIQTEnLFxuICAgICdTSEEyJyxcbiAgICAnU0hJRlRMRUZUJyxcbiAgICAnU0hJRlRSSUdIVCcsXG4gICAgJ1NISUZUUklHSFRVTlNJR05FRCcsXG4gICAgJ1NJR04nLFxuICAgICdTSUdOVU0nLFxuICAgICdTSU4nLFxuICAgICdTSU5IJyxcbiAgICAnU01BTExJTlQnLFxuICAgICdTT1VOREVYJyxcbiAgICAnU1BBQ0UnLFxuICAgICdTUEFSS19QQVJUSVRJT05fSUQnLFxuICAgICdTUExJVCcsXG4gICAgJ1NRUlQnLFxuICAgICdTVEFDSycsXG4gICAgJ1NVQlNUUicsXG4gICAgJ1NVQlNUUklORycsXG4gICAgJ1NVQlNUUklOR19JTkRFWCcsXG4gICAgJ1RBTicsXG4gICAgJ1RBTkgnLFxuICAgICdUSU1FU1RBTVAnLFxuICAgICdUSU5ZSU5UJyxcbiAgICAnVE9fQ1NWJyxcbiAgICAnVFJBTlNGT1JNX0tFWVMnLFxuICAgICdUUkFOU0ZPUk1fVkFMVUVTJyxcbiAgICAnVFJBTlNMQVRFJyxcbiAgICAnVFJJTScsXG4gICAgJ1RSWV9BREQnLFxuICAgICdUUllfRElWSURFJyxcbiAgICAnVFlQRU9GJyxcbiAgICAnVUNBU0UnLFxuICAgICdVTkJBU0U2NCcsXG4gICAgJ1VOSEVYJyxcbiAgICAnVVBQRVInLFxuICAgICdVVUlEJyxcbiAgICAnVkVSU0lPTicsXG4gICAgJ1dJRFRIX0JVQ0tFVCcsXG4gICAgJ1hQQVRIJyxcbiAgICAnWFBBVEhfQk9PTEVBTicsXG4gICAgJ1hQQVRIX0RPVUJMRScsXG4gICAgJ1hQQVRIX0ZMT0FUJyxcbiAgICAnWFBBVEhfSU5UJyxcbiAgICAnWFBBVEhfTE9ORycsXG4gICAgJ1hQQVRIX05VTUJFUicsXG4gICAgJ1hQQVRIX1NIT1JUJyxcbiAgICAnWFBBVEhfU1RSSU5HJyxcbiAgICAnWFhIQVNINjQnLFxuICAgICdaSVBfV0lUSCcsXG4gIF0sXG59O1xuXG4vKipcbiAqIFByaW9yaXR5IDUgKGxhc3QpXG4gKiBGdWxsIGxpc3Qgb2YgcmVzZXJ2ZWQgd29yZHNcbiAqIGFueSB3b3JkcyB0aGF0IGFyZSBpbiBhIGhpZ2hlciBwcmlvcml0eSBhcmUgcmVtb3ZlZFxuICovXG4vLyBodHRwczovL2RlZXBrYi5jb20vQ09fMDAwMDEzL2VuL2tiL0lNUE9SVC1mYmZhNTlmMC0yYmYxLTMxZmUtYmI3Yi0wZjllZmU5OTMyYzYvc3Bhcmstc3FsLWtleXdvcmRzXG5jb25zdCByZXNlcnZlZEtleXdvcmRzID0gW1xuICAnQUREJyxcbiAgJ0FGVEVSJyxcbiAgJ0FMTCcsXG4gICdBTFRFUicsXG4gICdBTkFMWVpFJyxcbiAgJ0FORCcsXG4gICdBTlRJJyxcbiAgJ0FOWScsXG4gICdBUkNISVZFJyxcbiAgJ0FSUkFZJyxcbiAgJ0FTJyxcbiAgJ0FTQycsXG4gICdBVCcsXG4gICdBVVRIT1JJWkFUSU9OJyxcbiAgJ0JFVFdFRU4nLFxuICAnQk9USCcsXG4gICdCVUNLRVQnLFxuICAnQlVDS0VUUycsXG4gICdCWScsXG4gICdDQUNIRScsXG4gICdDQVNDQURFJyxcbiAgJ0NBU1QnLFxuICAnQ0hBTkdFJyxcbiAgJ0NIRUNLJyxcbiAgJ0NMRUFSJyxcbiAgJ0NMVVNURVInLFxuICAnQ0xVU1RFUkVEJyxcbiAgJ0NPREVHRU4nLFxuICAnQ09MTEFURScsXG4gICdDT0xMRUNUSU9OJyxcbiAgJ0NPTFVNTicsXG4gICdDT0xVTU5TJyxcbiAgJ0NPTU1FTlQnLFxuICAnQ09NTUlUJyxcbiAgJ0NPTVBBQ1QnLFxuICAnQ09NUEFDVElPTlMnLFxuICAnQ09NUFVURScsXG4gICdDT05DQVRFTkFURScsXG4gICdDT05TVFJBSU5UJyxcbiAgJ0NPU1QnLFxuICAnQ1JFQVRFJyxcbiAgJ0NST1NTJyxcbiAgJ0NVQkUnLFxuICAnQ1VSUkVOVCcsXG4gICdDVVJSRU5UX0RBVEUnLFxuICAnQ1VSUkVOVF9USU1FJyxcbiAgJ0NVUlJFTlRfVElNRVNUQU1QJyxcbiAgJ0NVUlJFTlRfVVNFUicsXG4gICdEQVRBJyxcbiAgJ0RBVEFCQVNFJyxcbiAgJ0RBVEFCQVNFUycsXG4gICdEQVknLFxuICAnREJQUk9QRVJUSUVTJyxcbiAgJ0RFRklORUQnLFxuICAnREVMRVRFJyxcbiAgJ0RFTElNSVRFRCcsXG4gICdERVNDJyxcbiAgJ0RFU0NSSUJFJyxcbiAgJ0RGUycsXG4gICdESVJFQ1RPUklFUycsXG4gICdESVJFQ1RPUlknLFxuICAnRElTVElOQ1QnLFxuICAnRElTVFJJQlVURScsXG4gICdESVYnLFxuICAnRFJPUCcsXG4gICdFU0NBUEUnLFxuICAnRVNDQVBFRCcsXG4gICdFWENFUFQnLFxuICAnRVhDSEFOR0UnLFxuICAnRVhJU1RTJyxcbiAgJ0VYUE9SVCcsXG4gICdFWFRFTkRFRCcsXG4gICdFWFRFUk5BTCcsXG4gICdFWFRSQUNUJyxcbiAgJ0ZBTFNFJyxcbiAgJ0ZFVENIJyxcbiAgJ0ZJRUxEUycsXG4gICdGSUxURVInLFxuICAnRklMRUZPUk1BVCcsXG4gICdGSVJTVCcsXG4gICdGSVJTVF9WQUxVRScsXG4gICdGT0xMT1dJTkcnLFxuICAnRk9SJyxcbiAgJ0ZPUkVJR04nLFxuICAnRk9STUFUJyxcbiAgJ0ZPUk1BVFRFRCcsXG4gICdGVUxMJyxcbiAgJ0ZVTkNUSU9OJyxcbiAgJ0ZVTkNUSU9OUycsXG4gICdHTE9CQUwnLFxuICAnR1JBTlQnLFxuICAnR1JPVVAnLFxuICAnR1JPVVBJTkcnLFxuICAnSE9VUicsXG4gICdJRicsXG4gICdJR05PUkUnLFxuICAnSU1QT1JUJyxcbiAgJ0lOJyxcbiAgJ0lOREVYJyxcbiAgJ0lOREVYRVMnLFxuICAnSU5ORVInLFxuICAnSU5QQVRIJyxcbiAgJ0lOUFVURk9STUFUJyxcbiAgJ0lOVEVSU0VDVCcsXG4gICdJTlRFUlZBTCcsXG4gICdJTlRPJyxcbiAgJ0lTJyxcbiAgJ0lURU1TJyxcbiAgJ0tFWVMnLFxuICAnTEFTVCcsXG4gICdMQVNUX1ZBTFVFJyxcbiAgJ0xBVEVSQUwnLFxuICAnTEFaWScsXG4gICdMRUFESU5HJyxcbiAgJ0xFRlQnLFxuICAnTElLRScsXG4gICdMSU5FUycsXG4gICdMSVNUJyxcbiAgJ0xPQ0FMJyxcbiAgJ0xPQ0FUSU9OJyxcbiAgJ0xPQ0snLFxuICAnTE9DS1MnLFxuICAnTE9HSUNBTCcsXG4gICdNQUNSTycsXG4gICdNQVAnLFxuICAnTUFUQ0hFRCcsXG4gICdNRVJHRScsXG4gICdNSU5VVEUnLFxuICAnTU9OVEgnLFxuICAnTVNDSycsXG4gICdOQU1FU1BBQ0UnLFxuICAnTkFNRVNQQUNFUycsXG4gICdOQVRVUkFMJyxcbiAgJ05PJyxcbiAgJ05PVCcsXG4gICdOVUxMJyxcbiAgJ05VTExTJyxcbiAgJ09GJyxcbiAgJ09OTFknLFxuICAnT1BUSU9OJyxcbiAgJ09QVElPTlMnLFxuICAnT1InLFxuICAnT1JERVInLFxuICAnT1VUJyxcbiAgJ09VVEVSJyxcbiAgJ09VVFBVVEZPUk1BVCcsXG4gICdPVkVSJyxcbiAgJ09WRVJMQVBTJyxcbiAgJ09WRVJMQVknLFxuICAnT1ZFUldSSVRFJyxcbiAgJ09XTkVSJyxcbiAgJ1BBUlRJVElPTicsXG4gICdQQVJUSVRJT05FRCcsXG4gICdQQVJUSVRJT05TJyxcbiAgJ1BFUkNFTlQnLFxuICAnUExBQ0lORycsXG4gICdQT1NJVElPTicsXG4gICdQUkVDRURJTkcnLFxuICAnUFJJTUFSWScsXG4gICdQUklOQ0lQQUxTJyxcbiAgJ1BST1BFUlRJRVMnLFxuICAnUFVSR0UnLFxuICAnUVVFUlknLFxuICAnUkFOR0UnLFxuICAnUkVDT1JEUkVBREVSJyxcbiAgJ1JFQ09SRFdSSVRFUicsXG4gICdSRUNPVkVSJyxcbiAgJ1JFRFVDRScsXG4gICdSRUZFUkVOQ0VTJyxcbiAgJ1JFTkFNRScsXG4gICdSRVBBSVInLFxuICAnUkVQTEFDRScsXG4gICdSRVNQRUNUJyxcbiAgJ1JFU1RSSUNUJyxcbiAgJ1JFVk9LRScsXG4gICdSSUdIVCcsXG4gICdSTElLRScsXG4gICdST0xFJyxcbiAgJ1JPTEVTJyxcbiAgJ1JPTExCQUNLJyxcbiAgJ1JPTExVUCcsXG4gICdST1cnLFxuICAnUk9XUycsXG4gICdTQ0hFTUEnLFxuICAnU0VDT05EJyxcbiAgJ1NFTEVDVCcsXG4gICdTRU1JJyxcbiAgJ1NFUEFSQVRFRCcsXG4gICdTRVJERScsXG4gICdTRVJERVBST1BFUlRJRVMnLFxuICAnU0VTU0lPTl9VU0VSJyxcbiAgJ1NFVFMnLFxuICAnU0hPVycsXG4gICdTS0VXRUQnLFxuICAnU09NRScsXG4gICdTT1JUJyxcbiAgJ1NPUlRFRCcsXG4gICdTVEFSVCcsXG4gICdTVEFUSVNUSUNTJyxcbiAgJ1NUT1JFRCcsXG4gICdTVFJBVElGWScsXG4gICdTVFJVQ1QnLFxuICAnU1VCU1RSJyxcbiAgJ1NVQlNUUklORycsXG4gICdUQUJMRScsXG4gICdUQUJMRVMnLFxuICAnVEJMUFJPUEVSVElFUycsXG4gICdURU1QT1JBUlknLFxuICAnVEVSTUlOQVRFRCcsXG4gICdUSEVOJyxcbiAgJ1RPJyxcbiAgJ1RPVUNIJyxcbiAgJ1RSQUlMSU5HJyxcbiAgJ1RSQU5TQUNUSU9OJyxcbiAgJ1RSQU5TQUNUSU9OUycsXG4gICdUUklNJyxcbiAgJ1RSVUUnLFxuICAnVFJVTkNBVEUnLFxuICAnVU5BUkNISVZFJyxcbiAgJ1VOQk9VTkRFRCcsXG4gICdVTkNBQ0hFJyxcbiAgJ1VOSVFVRScsXG4gICdVTktOT1dOJyxcbiAgJ1VOTE9DSycsXG4gICdVTlNFVCcsXG4gICdVU0UnLFxuICAnVVNFUicsXG4gICdWSUVXJyxcbiAgJ1dJTkRPVycsXG4gICdZRUFSJyxcbiAgLy8gb3RoZXJcbiAgJ0FOQUxZU0UnLFxuICAnQVJSQVlfWklQJyxcbiAgJ0NPQUxFU0NFJyxcbiAgJ0NPTlRBSU5TJyxcbiAgJ0NPTlZFUlQnLFxuICAnQ1VSUkVOVCBST1cnLFxuICAnREFZUycsXG4gICdEQVlfSE9VUicsXG4gICdEQVlfTUlOVVRFJyxcbiAgJ0RBWV9TRUNPTkQnLFxuICAnREVDT0RFJyxcbiAgJ0RFRkFVTFQnLFxuICAnRElTVElOQ1RST1cnLFxuICAnRU5DT0RFJyxcbiAgJ0VYUExPREUnLFxuICAnRVhQTE9ERV9PVVRFUicsXG4gICdGSVhFRCcsXG4gICdHUkVBVEVTVCcsXG4gICdHUk9VUF9DT05DQVQnLFxuICAnSE9VUlMnLFxuICAnSE9VUl9NSU5VVEUnLFxuICAnSE9VUl9TRUNPTkQnLFxuICAnSUZOVUxMJyxcbiAgJ0xFQVNUJyxcbiAgJ0xFVkVMJyxcbiAgJ01JTlVURV9TRUNPTkQnLFxuICAnTlVMTElGJyxcbiAgJ09GRlNFVCcsXG4gICdPTiBERUxFVEUnLFxuICAnT04gVVBEQVRFJyxcbiAgJ09QVElNSVpFJyxcbiAgJ1JFR0VYUCcsXG4gICdTRVBBUkFUT1InLFxuICAnU0laRScsXG4gICdTVFJJTkcnLFxuICAnVFlQRScsXG4gICdUWVBFUycsXG4gICdVTlNJR05FRCcsXG4gICdWQVJJQUJMRVMnLFxuICAnWUVBUl9NT05USCcsXG5dO1xuXG4vKipcbiAqIFByaW9yaXR5IDEgKGZpcnN0KVxuICoga2V5d29yZHMgdGhhdCBiZWdpbiBhIG5ldyBzdGF0ZW1lbnRcbiAqIHdpbGwgYmVnaW4gbmV3IGluZGVudGVkIGJsb2NrXG4gKi9cbi8vIGh0dHA6Ly9zcGFyay5hcGFjaGUub3JnL2RvY3MvbGF0ZXN0L3NxbC1yZWYtc3ludGF4Lmh0bWxcbmNvbnN0IHJlc2VydmVkQ29tbWFuZHMgPSBbXG4gIC8vIERETFxuICAnQUxURVIgQ09MVU1OJyxcbiAgJ0FMVEVSIERBVEFCQVNFJyxcbiAgJ0FMVEVSIFRBQkxFJyxcbiAgJ0FMVEVSIFZJRVcnLFxuICAnQ1JFQVRFIERBVEFCQVNFJyxcbiAgJ0NSRUFURSBGVU5DVElPTicsXG4gICdDUkVBVEUgVEFCTEUnLFxuICAnQ1JFQVRFIFZJRVcnLFxuICAnRFJPUCBEQVRBQkFTRScsXG4gICdEUk9QIEZVTkNUSU9OJyxcbiAgJ0RST1AgVEFCTEUnLFxuICAnRFJPUCBWSUVXJyxcbiAgJ1JFUEFJUiBUQUJMRScsXG4gICdUUlVOQ0FURSBUQUJMRScsXG4gICdVU0UgREFUQUJBU0UnLFxuICAvLyBETUxcbiAgJ0lOU0VSVCBJTlRPJyxcbiAgJ0lOU0VSVCBPVkVSV1JJVEUnLFxuICAnSU5TRVJUIE9WRVJXUklURSBESVJFQ1RPUlknLFxuICAnTE9BRCcsXG4gIC8vIERhdGEgUmV0cmlldmFsXG4gICdTRUxFQ1QnLFxuICAnV0lUSCcsXG4gICdDTFVTVEVSIEJZJyxcbiAgJ0RJU1RSSUJVVEUgQlknLFxuICAnUEFSVElUSU9OIEJZJywgLy8gdmVyaWZ5XG4gICdHUk9VUCBCWScsXG4gICdIQVZJTkcnLFxuICAnVkFMVUVTJyxcbiAgJ0xJTUlUJyxcbiAgJ09GRlNFVCcsXG4gICdPUkRFUiBCWScsXG4gICdTT1JUIEJZJyxcbiAgJ1RBQkxFU0FNUExFJyxcbiAgJ1dIRVJFJyxcbiAgJ1BJVk9UJyxcbiAgJ1RSQU5TRk9STScsXG4gICdFWFBMQUlOJyxcbiAgLy8gQXV4aWxpYXJ5XG4gICdBREQgRklMRScsXG4gICdBREQgSkFSJyxcbiAgJ0FOQUxZWkUgVEFCTEUnLFxuICAnQ0FDSEUgVEFCTEUnLFxuICAnQ0xFQVIgQ0FDSEUnLFxuICAnREVTQ1JJQkUgREFUQUJBU0UnLFxuICAnREVTQ1JJQkUgRlVOQ1RJT04nLFxuICAnREVTQ1JJQkUgUVVFUlknLFxuICAnREVTQ1JJQkUgVEFCTEUnLFxuICAnTElTVCBGSUxFJyxcbiAgJ0xJU1QgSkFSJyxcbiAgJ1JFRlJFU0gnLFxuICAnUkVGUkVTSCBUQUJMRScsXG4gICdSRUZSRVNIIEZVTkNUSU9OJyxcbiAgJ1JFU0VUJyxcbiAgJ1NFVCcsXG4gICdTRVQgU0NIRU1BJywgLy8gdmVyaWZ5XG4gICdTSE9XIENPTFVNTlMnLFxuICAnU0hPVyBDUkVBVEUgVEFCTEUnLFxuICAnU0hPVyBEQVRBQkFTRVMnLFxuICAnU0hPVyBGVU5DVElPTlMnLFxuICAnU0hPVyBQQVJUSVRJT05TJyxcbiAgJ1NIT1cgVEFCTEUgRVhURU5ERUQnLFxuICAnU0hPVyBUQUJMRVMnLFxuICAnU0hPVyBUQkxQUk9QRVJUSUVTJyxcbiAgJ1NIT1cgVklFV1MnLFxuICAnVU5DQUNIRSBUQUJMRScsXG4gIC8vIG90aGVyXG4gICdGUk9NJyxcbiAgJ0lOU0VSVCcsXG4gICdMQVRFUkFMIFZJRVcnLFxuICAnVVBEQVRFJyxcbiAgJ1dJTkRPVycsIC8vIHZlcmlmeVxuXTtcblxuLyoqXG4gKiBQcmlvcml0eSAyXG4gKiBjb21tYW5kcyB0aGF0IG9wZXJhdGUgb24gdHdvIHRhYmxlcyBvciBzdWJxdWVyaWVzXG4gKiB0d28gbWFpbiBjYXRlZ29yaWVzOiBqb2lucyBhbmQgYm9vbGVhbiBzZXQgb3BlcmF0b3JzXG4gKi9cbmNvbnN0IHJlc2VydmVkQmluYXJ5Q29tbWFuZHMgPSBbXG4gIC8vIHNldCBib29sZWFuc1xuICAnSU5URVJTRUNUJyxcbiAgJ0lOVEVSU0VDVCBBTEwnLFxuICAnSU5URVJTRUNUIERJU1RJTkNUJyxcbiAgJ1VOSU9OJyxcbiAgJ1VOSU9OIEFMTCcsXG4gICdVTklPTiBESVNUSU5DVCcsXG4gICdFWENFUFQnLFxuICAnRVhDRVBUIEFMTCcsXG4gICdFWENFUFQgRElTVElOQ1QnLFxuICAnTUlOVVMnLFxuICAnTUlOVVMgQUxMJyxcbiAgJ01JTlVTIERJU1RJTkNUJyxcbiAgLy8gam9pbnNcbiAgJ0pPSU4nLFxuICAnSU5ORVIgSk9JTicsXG4gICdMRUZUIEpPSU4nLFxuICAnTEVGVCBPVVRFUiBKT0lOJyxcbiAgJ1JJR0hUIEpPSU4nLFxuICAnUklHSFQgT1VURVIgSk9JTicsXG4gICdGVUxMIEpPSU4nLFxuICAnRlVMTCBPVVRFUiBKT0lOJyxcbiAgJ0NST1NTIEpPSU4nLFxuICAnTkFUVVJBTCBKT0lOJyxcbiAgLy8gYXBwbHlcbiAgJ0NST1NTIEFQUExZJyxcbiAgJ09VVEVSIEFQUExZJyxcbiAgLy8gbm9uLXN0YW5kYXJkLWpvaW5zXG4gICdBTlRJIEpPSU4nLFxuICAnU0VNSSBKT0lOJyxcbiAgJ0xFRlQgQU5USSBKT0lOJyxcbiAgJ0xFRlQgU0VNSSBKT0lOJyxcbiAgJ1JJR0hUIE9VVEVSIEpPSU4nLFxuICAnUklHSFQgU0VNSSBKT0lOJyxcbiAgJ05BVFVSQUwgQU5USSBKT0lOJyxcbiAgJ05BVFVSQUwgRlVMTCBPVVRFUiBKT0lOJyxcbiAgJ05BVFVSQUwgSU5ORVIgSk9JTicsXG4gICdOQVRVUkFMIExFRlQgQU5USSBKT0lOJyxcbiAgJ05BVFVSQUwgTEVGVCBPVVRFUiBKT0lOJyxcbiAgJ05BVFVSQUwgTEVGVCBTRU1JIEpPSU4nLFxuICAnTkFUVVJBTCBPVVRFUiBKT0lOJyxcbiAgJ05BVFVSQUwgUklHSFQgT1VURVIgSk9JTicsXG4gICdOQVRVUkFMIFJJR0hUIFNFTUkgSk9JTicsXG4gICdOQVRVUkFMIFNFTUkgSk9JTicsXG4gICdDUk9TUyBBUFBMWScsXG4gICdPVVRFUiBBUFBMWScsXG5dO1xuXG4vKipcbiAqIFByaW9yaXR5IDNcbiAqIGtleXdvcmRzIHRoYXQgZm9sbG93IGEgcHJldmlvdXMgU3RhdGVtZW50LCBtdXN0IGJlIGF0dGFjaGVkIHRvIHN1YnNlcXVlbnQgZGF0YVxuICogY2FuIGJlIGZ1bGx5IGlubGluZSBvciBvbiBuZXdsaW5lIHdpdGggb3B0aW9uYWwgaW5kZW50XG4gKi9cbmNvbnN0IHJlc2VydmVkRGVwZW5kZW50Q2xhdXNlcyA9IFsnV0hFTicsICdFTFNFJ107XG5cbi8vIGh0dHA6Ly9zcGFyay5hcGFjaGUub3JnL2RvY3MvbGF0ZXN0L3NxbC1wcm9ncmFtbWluZy1ndWlkZS5odG1sXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTcGFya1NxbEZvcm1hdHRlciBleHRlbmRzIEZvcm1hdHRlciB7XG4gIHN0YXRpYyByZXNlcnZlZENvbW1hbmRzID0gcmVzZXJ2ZWRDb21tYW5kcztcbiAgc3RhdGljIHJlc2VydmVkQmluYXJ5Q29tbWFuZHMgPSByZXNlcnZlZEJpbmFyeUNvbW1hbmRzO1xuICBzdGF0aWMgcmVzZXJ2ZWREZXBlbmRlbnRDbGF1c2VzID0gcmVzZXJ2ZWREZXBlbmRlbnRDbGF1c2VzO1xuICBzdGF0aWMgcmVzZXJ2ZWRKb2luQ29uZGl0aW9ucyA9IFsnT04nLCAnVVNJTkcnXTtcbiAgc3RhdGljIHJlc2VydmVkTG9naWNhbE9wZXJhdG9ycyA9IFsnQU5EJywgJ09SJywgJ1hPUiddO1xuICBzdGF0aWMgcmVzZXJ2ZWRLZXl3b3JkcyA9IGRlZHVwZShbXG4gICAgLi4uT2JqZWN0LnZhbHVlcyhyZXNlcnZlZEZ1bmN0aW9ucykucmVkdWNlKChhY2MsIGFycikgPT4gWy4uLmFjYywgLi4uYXJyXSwgW10pLFxuICAgIC4uLnJlc2VydmVkS2V5d29yZHMsXG4gIF0pO1xuICBzdGF0aWMgc3RyaW5nVHlwZXM6IFN0cmluZ1BhdHRlcm5UeXBlW10gPSBbYFwiXCJgLCBcIicnXCIsICdgYCcsICd7fSddO1xuICBzdGF0aWMgYmxvY2tTdGFydCA9IFsnKCcsICdDQVNFJ107XG4gIHN0YXRpYyBibG9ja0VuZCA9IFsnKScsICdFTkQnXTtcbiAgc3RhdGljIGluZGV4ZWRQbGFjZWhvbGRlclR5cGVzID0gWyc/J107XG4gIHN0YXRpYyBuYW1lZFBsYWNlaG9sZGVyVHlwZXMgPSBbJyQnXTtcbiAgc3RhdGljIGxpbmVDb21tZW50VHlwZXMgPSBbJy0tJ107XG4gIHN0YXRpYyBvcGVyYXRvcnMgPSBbJzw9PicsICcmJicsICd8fCcsICc9PScsICctPiddO1xuXG4gIHRva2VuaXplcigpIHtcbiAgICByZXR1cm4gbmV3IFRva2VuaXplcih7XG4gICAgICByZXNlcnZlZENvbW1hbmRzOiBTcGFya1NxbEZvcm1hdHRlci5yZXNlcnZlZENvbW1hbmRzLFxuICAgICAgcmVzZXJ2ZWRCaW5hcnlDb21tYW5kczogU3BhcmtTcWxGb3JtYXR0ZXIucmVzZXJ2ZWRCaW5hcnlDb21tYW5kcyxcbiAgICAgIHJlc2VydmVkRGVwZW5kZW50Q2xhdXNlczogU3BhcmtTcWxGb3JtYXR0ZXIucmVzZXJ2ZWREZXBlbmRlbnRDbGF1c2VzLFxuICAgICAgcmVzZXJ2ZWRKb2luQ29uZGl0aW9uczogU3BhcmtTcWxGb3JtYXR0ZXIucmVzZXJ2ZWRKb2luQ29uZGl0aW9ucyxcbiAgICAgIHJlc2VydmVkTG9naWNhbE9wZXJhdG9yczogU3BhcmtTcWxGb3JtYXR0ZXIucmVzZXJ2ZWRMb2dpY2FsT3BlcmF0b3JzLFxuICAgICAgcmVzZXJ2ZWRLZXl3b3JkczogU3BhcmtTcWxGb3JtYXR0ZXIucmVzZXJ2ZWRLZXl3b3JkcyxcbiAgICAgIHN0cmluZ1R5cGVzOiBTcGFya1NxbEZvcm1hdHRlci5zdHJpbmdUeXBlcyxcbiAgICAgIGJsb2NrU3RhcnQ6IFNwYXJrU3FsRm9ybWF0dGVyLmJsb2NrU3RhcnQsXG4gICAgICBibG9ja0VuZDogU3BhcmtTcWxGb3JtYXR0ZXIuYmxvY2tFbmQsXG4gICAgICBpbmRleGVkUGxhY2Vob2xkZXJUeXBlczogU3BhcmtTcWxGb3JtYXR0ZXIuaW5kZXhlZFBsYWNlaG9sZGVyVHlwZXMsXG4gICAgICBuYW1lZFBsYWNlaG9sZGVyVHlwZXM6IFNwYXJrU3FsRm9ybWF0dGVyLm5hbWVkUGxhY2Vob2xkZXJUeXBlcyxcbiAgICAgIGxpbmVDb21tZW50VHlwZXM6IFNwYXJrU3FsRm9ybWF0dGVyLmxpbmVDb21tZW50VHlwZXMsXG4gICAgICBvcGVyYXRvcnM6IFNwYXJrU3FsRm9ybWF0dGVyLm9wZXJhdG9ycyxcbiAgICB9KTtcbiAgfVxuXG4gIHRva2VuT3ZlcnJpZGUodG9rZW46IFRva2VuKSB7XG4gICAgLy8gW1dJTkRPV10oLi4uKVxuICAgIGlmIChpc1Rva2VuLldJTkRPVyh0b2tlbikgJiYgdGhpcy50b2tlbkxvb2tBaGVhZCgpLnR5cGUgPT09IFRva2VuVHlwZS5CTE9DS19TVEFSVCkge1xuICAgICAgLy8gVGhpcyBpcyBhIGZ1bmN0aW9uIGNhbGwsIHRyZWF0IGl0IGFzIGEgcmVzZXJ2ZWQgd29yZFxuICAgICAgcmV0dXJuIHsgdHlwZTogVG9rZW5UeXBlLlJFU0VSVkVEX0tFWVdPUkQsIHZhbHVlOiB0b2tlbi52YWx1ZSB9O1xuICAgIH1cblxuICAgIC8vIC5bRU5EXVxuICAgIGlmIChpc1Rva2VuLkVORCh0b2tlbikgJiYgdGhpcy50b2tlbkxvb2tCZWhpbmQoKS52YWx1ZSA9PT0gJy4nKSB7XG4gICAgICAvLyBUaGlzIGlzIHdpbmRvdygpLmVuZCAob3Igc2ltaWxhcikgbm90IENBU0UgLi4uIEVORFxuICAgICAgcmV0dXJuIHsgdHlwZTogVG9rZW5UeXBlLldPUkQsIHZhbHVlOiB0b2tlbi52YWx1ZSB9O1xuICAgIH1cblxuICAgIC8vIFRPRE86IGRlcHJlY2F0ZSB0aGlzIG9uY2UgSVRFTVMgaXMgbWVyZ2VkIHdpdGggQ09MTEVDVElPTlxuICAgIGlmICgvSVRFTVMvaS50ZXN0KHRva2VuLnZhbHVlKSAmJiB0b2tlbi50eXBlID09PSBUb2tlblR5cGUuUkVTRVJWRURfS0VZV09SRCkge1xuICAgICAgaWYgKFxuICAgICAgICAhKFxuICAgICAgICAgIC9DT0xMRUNUSU9OL2kudGVzdCh0aGlzLnRva2VuTG9va0JlaGluZCgpLnZhbHVlKSAmJlxuICAgICAgICAgIC9URVJNSU5BVEVEL2kudGVzdCh0aGlzLnRva2VuTG9va0FoZWFkKCkudmFsdWUpXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICAvLyB0aGlzIGlzIGEgd29yZCBhbmQgbm90IENPTExFQ1RJT04gSVRFTVNcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogVG9rZW5UeXBlLldPUkQsIHZhbHVlOiB0b2tlbi52YWx1ZSB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0b2tlbjtcbiAgfVxufVxuIiwiaW1wb3J0IEZvcm1hdHRlciBmcm9tICcuLi9jb3JlL0Zvcm1hdHRlcic7XG5pbXBvcnQgVG9rZW5pemVyIGZyb20gJy4uL2NvcmUvVG9rZW5pemVyJztcbmltcG9ydCB0eXBlIHsgU3RyaW5nUGF0dGVyblR5cGUgfSBmcm9tICcuLi9jb3JlL3JlZ2V4RmFjdG9yeSc7XG5pbXBvcnQgeyBkZWR1cGUgfSBmcm9tICcuLi91dGlscyc7XG5cbi8qKlxuICogUHJpb3JpdHkgNSAobGFzdClcbiAqIEZ1bGwgbGlzdCBvZiByZXNlcnZlZCB3b3Jkc1xuICogYW55IHdvcmRzIHRoYXQgYXJlIGluIGEgaGlnaGVyIHByaW9yaXR5IGFyZSByZW1vdmVkXG4gKi9cbi8vIGh0dHBzOi8vamFrZXdoZWF0LmdpdGh1Yi5pby9zcWwtb3ZlcnZpZXcvc3FsLTIwMDgtZm91bmRhdGlvbi1ncmFtbWFyLmh0bWwjcmVzZXJ2ZWQtd29yZFxuY29uc3QgcmVzZXJ2ZWRLZXl3b3JkcyA9IFtcbiAgJ0FCUycsXG4gICdBTEwnLFxuICAnQUxMT0NBVEUnLFxuICAnQUxURVInLFxuICAnQU5ZJyxcbiAgJ0FSRScsXG4gICdBUlJBWScsXG4gICdBUycsXG4gICdBU0VOU0lUSVZFJyxcbiAgJ0FTWU1NRVRSSUMnLFxuICAnQVQnLFxuICAnQVRPTUlDJyxcbiAgJ0FVVEhPUklaQVRJT04nLFxuICAnQVZHJyxcbiAgJ0JFR0lOJyxcbiAgJ0JFVFdFRU4nLFxuICAnQklHSU5UJyxcbiAgJ0JJTkFSWScsXG4gICdCTE9CJyxcbiAgJ0JPT0xFQU4nLFxuICAnQk9USCcsXG4gICdCWScsXG4gICdDQUxMJyxcbiAgJ0NBTExFRCcsXG4gICdDQVJESU5BTElUWScsXG4gICdDQVNDQURFRCcsXG4gICdDQVNUJyxcbiAgJ0NFSUwnLFxuICAnQ0VJTElORycsXG4gICdDSEFSJyxcbiAgJ0NIQVJBQ1RFUicsXG4gICdDSEFSQUNURVJfTEVOR1RIJyxcbiAgJ0NIQVJfTEVOR1RIJyxcbiAgJ0NIRUNLJyxcbiAgJ0NMT0InLFxuICAnQ0xPU0UnLFxuICAnQ09BTEVTQ0UnLFxuICAnQ09MTEFURScsXG4gICdDT0xMRUNUJyxcbiAgJ0NPTFVNTicsXG4gICdDT01NSVQnLFxuICAnQ09ORElUSU9OJyxcbiAgJ0NPTk5FQ1QnLFxuICAnQ09OU1RSQUlOVCcsXG4gICdDT05WRVJUJyxcbiAgJ0NPUlInLFxuICAnQ09SUkVTUE9ORElORycsXG4gICdDT1VOVCcsXG4gICdDT1ZBUl9QT1AnLFxuICAnQ09WQVJfU0FNUCcsXG4gICdDUkVBVEUnLFxuICAnQ1JPU1MnLFxuICAnQ1VCRScsXG4gICdDVU1FX0RJU1QnLFxuICAnQ1VSUkVOVCcsXG4gICdDVVJSRU5UX0NBVEFMT0cnLFxuICAnQ1VSUkVOVF9EQVRFJyxcbiAgJ0NVUlJFTlRfREVGQVVMVF9UUkFOU0ZPUk1fR1JPVVAnLFxuICAnQ1VSUkVOVF9QQVRIJyxcbiAgJ0NVUlJFTlRfUk9MRScsXG4gICdDVVJSRU5UX1NDSEVNQScsXG4gICdDVVJSRU5UX1RJTUUnLFxuICAnQ1VSUkVOVF9USU1FU1RBTVAnLFxuICAnQ1VSUkVOVF9UUkFOU0ZPUk1fR1JPVVBfRk9SX1RZUEUnLFxuICAnQ1VSUkVOVF9VU0VSJyxcbiAgJ0NVUlNPUicsXG4gICdDWUNMRScsXG4gICdEQVRFJyxcbiAgJ0RBWScsXG4gICdERUFMTE9DQVRFJyxcbiAgJ0RFQycsXG4gICdERUNJTUFMJyxcbiAgJ0RFQ0xBUkUnLFxuICAnREVGQVVMVCcsXG4gICdERUxFVEUnLFxuICAnREVOU0VfUkFOSycsXG4gICdERVJFRicsXG4gICdERVNDUklCRScsXG4gICdERVRFUk1JTklTVElDJyxcbiAgJ0RJU0NPTk5FQ1QnLFxuICAnRElTVElOQ1QnLFxuICAnRE9VQkxFJyxcbiAgJ0RST1AnLFxuICAnRFlOQU1JQycsXG4gICdFQUNIJyxcbiAgJ0VMRU1FTlQnLFxuICAnRU5ELUVYRUMnLFxuICAnRVNDQVBFJyxcbiAgJ0VWRVJZJyxcbiAgJ0VYQ0VQVCcsXG4gICdFWEVDJyxcbiAgJ0VYRUNVVEUnLFxuICAnRVhJU1RTJyxcbiAgJ0VYUCcsXG4gICdFWFRFUk5BTCcsXG4gICdFWFRSQUNUJyxcbiAgJ0ZBTFNFJyxcbiAgJ0ZFVENIJyxcbiAgJ0ZJTFRFUicsXG4gICdGTE9BVCcsXG4gICdGTE9PUicsXG4gICdGT1InLFxuICAnRk9SRUlHTicsXG4gICdGUkVFJyxcbiAgJ0ZST00nLFxuICAnRlVMTCcsXG4gICdGVU5DVElPTicsXG4gICdGVVNJT04nLFxuICAnR0VUJyxcbiAgJ0dMT0JBTCcsXG4gICdHUkFOVCcsXG4gICdHUk9VUCcsXG4gICdHUk9VUElORycsXG4gICdIQVZJTkcnLFxuICAnSE9MRCcsXG4gICdIT1VSJyxcbiAgJ0lERU5USVRZJyxcbiAgJ0lOJyxcbiAgJ0lORElDQVRPUicsXG4gICdJTk5FUicsXG4gICdJTk9VVCcsXG4gICdJTlNFTlNJVElWRScsXG4gICdJTlNFUlQnLFxuICAnSU5UJyxcbiAgJ0lOVEVHRVInLFxuICAnSU5URVJTRUNUJyxcbiAgJ0lOVEVSU0VDVElPTicsXG4gICdJTlRFUlZBTCcsXG4gICdJTlRPJyxcbiAgJ0lTJyxcbiAgJ0xBTkdVQUdFJyxcbiAgJ0xBUkdFJyxcbiAgJ0xBVEVSQUwnLFxuICAnTEVBRElORycsXG4gICdMRUZUJyxcbiAgJ0xJS0UnLFxuICAnTElLRV9SRUdFWCcsXG4gICdMTicsXG4gICdMT0NBTCcsXG4gICdMT0NBTFRJTUUnLFxuICAnTE9DQUxUSU1FU1RBTVAnLFxuICAnTE9XRVInLFxuICAnTUFUQ0gnLFxuICAnTUFYJyxcbiAgJ01FTUJFUicsXG4gICdNRVJHRScsXG4gICdNRVRIT0QnLFxuICAnTUlOJyxcbiAgJ01JTlVURScsXG4gICdNT0QnLFxuICAnTU9ESUZJRVMnLFxuICAnTU9EVUxFJyxcbiAgJ01PTlRIJyxcbiAgJ01VTFRJU0VUJyxcbiAgJ05BVElPTkFMJyxcbiAgJ05BVFVSQUwnLFxuICAnTkNIQVInLFxuICAnTkNMT0InLFxuICAnTkVXJyxcbiAgJ05PJyxcbiAgJ05PTkUnLFxuICAnTk9STUFMSVpFJyxcbiAgJ05PVCcsXG4gICdOVUxMJyxcbiAgJ05VTExJRicsXG4gICdOVU1FUklDJyxcbiAgJ09DQ1VSUkVOQ0VTX1JFR0VYJyxcbiAgJ09DVEVUX0xFTkdUSCcsXG4gICdPRicsXG4gICdPTEQnLFxuICAnT04gREVMRVRFJyxcbiAgJ09OIFVQREFURScsXG4gICdPTkxZJyxcbiAgJ09QRU4nLFxuICAnT1JERVInLFxuICAnT1VUJyxcbiAgJ09VVEVSJyxcbiAgJ09WRVInLFxuICAnT1ZFUkxBUFMnLFxuICAnT1ZFUkxBWScsXG4gICdQQVJBTUVURVInLFxuICAnUEFSVElUSU9OJyxcbiAgJ1BFUkNFTlRJTEVfQ09OVCcsXG4gICdQRVJDRU5USUxFX0RJU0MnLFxuICAnUEVSQ0VOVF9SQU5LJyxcbiAgJ1BPU0lUSU9OJyxcbiAgJ1BPU0lUSU9OX1JFR0VYJyxcbiAgJ1BPV0VSJyxcbiAgJ1BSRUNJU0lPTicsXG4gICdQUkVQQVJFJyxcbiAgJ1BSSU1BUlknLFxuICAnUFJPQ0VEVVJFJyxcbiAgJ1JBTkdFJyxcbiAgJ1JBTksnLFxuICAnUkVBRFMnLFxuICAnUkVBTCcsXG4gICdSRUNVUlNJVkUnLFxuICAnUkVGJyxcbiAgJ1JFRkVSRU5DRVMnLFxuICAnUkVGRVJFTkNJTkcnLFxuICAnUkVHUl9BVkdYJyxcbiAgJ1JFR1JfQVZHWScsXG4gICdSRUdSX0NPVU5UJyxcbiAgJ1JFR1JfSU5URVJDRVBUJyxcbiAgJ1JFR1JfUjInLFxuICAnUkVHUl9TTE9QRScsXG4gICdSRUdSX1NYWCcsXG4gICdSRUdSX1NYWScsXG4gICdSRUdSX1NZWScsXG4gICdSRUxFQVNFJyxcbiAgJ1JFU1VMVCcsXG4gICdSRVRVUk4nLFxuICAnUkVUVVJOUycsXG4gICdSRVZPS0UnLFxuICAnUklHSFQnLFxuICAnUk9MTEJBQ0snLFxuICAnUk9MTFVQJyxcbiAgJ1JPVycsXG4gICdST1dTJyxcbiAgJ1JPV19OVU1CRVInLFxuICAnU0FWRVBPSU5UJyxcbiAgJ1NDT1BFJyxcbiAgJ1NDUk9MTCcsXG4gICdTRUFSQ0gnLFxuICAnU0VDT05EJyxcbiAgJ1NFTEVDVCcsXG4gICdTRU5TSVRJVkUnLFxuICAnU0VTU0lPTl9VU0VSJyxcbiAgJ1NFVCcsXG4gICdTSU1JTEFSJyxcbiAgJ1NNQUxMSU5UJyxcbiAgJ1NPTUUnLFxuICAnU1BFQ0lGSUMnLFxuICAnU1BFQ0lGSUNUWVBFJyxcbiAgJ1NRTCcsXG4gICdTUUxFWENFUFRJT04nLFxuICAnU1FMU1RBVEUnLFxuICAnU1FMV0FSTklORycsXG4gICdTUVJUJyxcbiAgJ1NUQVJUJyxcbiAgJ1NUQVRJQycsXG4gICdTVERERVZfUE9QJyxcbiAgJ1NURERFVl9TQU1QJyxcbiAgJ1NVQk1VTFRJU0VUJyxcbiAgJ1NVQlNUUklORycsXG4gICdTVUJTVFJJTkdfUkVHRVgnLFxuICAnU1VNJyxcbiAgJ1NZTU1FVFJJQycsXG4gICdTWVNURU0nLFxuICAnU1lTVEVNX1VTRVInLFxuICAnVEFCTEUnLFxuICAnVEFCTEVTQU1QTEUnLFxuICAnVEhFTicsXG4gICdUSU1FJyxcbiAgJ1RJTUVTVEFNUCcsXG4gICdUSU1FWk9ORV9IT1VSJyxcbiAgJ1RJTUVaT05FX01JTlVURScsXG4gICdUTycsXG4gICdUUkFJTElORycsXG4gICdUUkFOU0xBVEUnLFxuICAnVFJBTlNMQVRFX1JFR0VYJyxcbiAgJ1RSQU5TTEFUSU9OJyxcbiAgJ1RSRUFUJyxcbiAgJ1RSSUdHRVInLFxuICAnVFJJTScsXG4gICdUUlVFJyxcbiAgJ1VFU0NBUEUnLFxuICAnVU5JT04nLFxuICAnVU5JUVVFJyxcbiAgJ1VOS05PV04nLFxuICAnVU5ORVNUJyxcbiAgJ1VQREFURScsXG4gICdVUFBFUicsXG4gICdVU0VSJyxcbiAgJ1ZBTFVFJyxcbiAgJ1ZBTFVFUycsXG4gICdWQVJCSU5BUlknLFxuICAnVkFSQ0hBUicsXG4gICdWQVJZSU5HJyxcbiAgJ1ZBUl9QT1AnLFxuICAnVkFSX1NBTVAnLFxuICAnV0hFTkVWRVInLFxuICAnV0lEVEhfQlVDS0VUJyxcbiAgJ1dJTkRPVycsXG4gICdXSVRISU4nLFxuICAnV0lUSE9VVCcsXG4gICdZRUFSJyxcbl07XG5cbi8qKlxuICogUHJpb3JpdHkgMSAoZmlyc3QpXG4gKiBrZXl3b3JkcyB0aGF0IGJlZ2luIGEgbmV3IHN0YXRlbWVudFxuICogd2lsbCBiZWdpbiBuZXcgaW5kZW50ZWQgYmxvY2tcbiAqL1xuY29uc3QgcmVzZXJ2ZWRDb21tYW5kcyA9IFtcbiAgJ0FERCcsXG4gICdBTFRFUiBDT0xVTU4nLFxuICAnQUxURVIgVEFCTEUnLFxuICAnQ1JFQVRFIFRBQkxFJyxcbiAgJ0RST1AgVEFCTEUnLFxuICAnRU5EJyxcbiAgJ0ZFVENIIEZJUlNUJyxcbiAgJ0ZFVENIIE5FWFQnLFxuICAnRkVUQ0ggUFJJT1InLFxuICAnRkVUQ0ggTEFTVCcsXG4gICdGRVRDSCBBQlNPTFVURScsXG4gICdGRVRDSCBSRUxBVElWRScsXG4gICdGUk9NJyxcbiAgJ0dST1VQIEJZJyxcbiAgJ0hBVklORycsXG4gICdJTlNFUlQgSU5UTycsXG4gICdMSU1JVCcsXG4gICdPRkZTRVQnLFxuICAnT1JERVIgQlknLFxuICAnU0VMRUNUJyxcbiAgJ1NFVCBTQ0hFTUEnLFxuICAnU0VUJyxcbiAgJ1VQREFURScsXG4gICdWQUxVRVMnLFxuICAnV0hFUkUnLFxuICAnV0lUSCcsXG5dO1xuXG4vKipcbiAqIFByaW9yaXR5IDJcbiAqIGNvbW1hbmRzIHRoYXQgb3BlcmF0ZSBvbiB0d28gdGFibGVzIG9yIHN1YnF1ZXJpZXNcbiAqIHR3byBtYWluIGNhdGVnb3JpZXM6IGpvaW5zIGFuZCBib29sZWFuIHNldCBvcGVyYXRvcnNcbiAqL1xuY29uc3QgcmVzZXJ2ZWRCaW5hcnlDb21tYW5kcyA9IFtcbiAgLy8gc2V0IGJvb2xlYW5zXG4gICdJTlRFUlNFQ1QnLFxuICAnSU5URVJTRUNUIEFMTCcsXG4gICdJTlRFUlNFQ1QgRElTVElOQ1QnLFxuICAnVU5JT04nLFxuICAnVU5JT04gQUxMJyxcbiAgJ1VOSU9OIERJU1RJTkNUJyxcbiAgJ0VYQ0VQVCcsXG4gICdFWENFUFQgQUxMJyxcbiAgJ0VYQ0VQVCBESVNUSU5DVCcsXG4gIC8vIGpvaW5zXG4gICdKT0lOJyxcbiAgJ0lOTkVSIEpPSU4nLFxuICAnTEVGVCBKT0lOJyxcbiAgJ0xFRlQgT1VURVIgSk9JTicsXG4gICdSSUdIVCBKT0lOJyxcbiAgJ1JJR0hUIE9VVEVSIEpPSU4nLFxuICAnRlVMTCBKT0lOJyxcbiAgJ0ZVTEwgT1VURVIgSk9JTicsXG4gICdDUk9TUyBKT0lOJyxcbiAgJ05BVFVSQUwgSk9JTicsXG5dO1xuXG4vKipcbiAqIFByaW9yaXR5IDNcbiAqIGtleXdvcmRzIHRoYXQgZm9sbG93IGEgcHJldmlvdXMgU3RhdGVtZW50LCBtdXN0IGJlIGF0dGFjaGVkIHRvIHN1YnNlcXVlbnQgZGF0YVxuICogY2FuIGJlIGZ1bGx5IGlubGluZSBvciBvbiBuZXdsaW5lIHdpdGggb3B0aW9uYWwgaW5kZW50XG4gKi9cbmNvbnN0IHJlc2VydmVkRGVwZW5kZW50Q2xhdXNlcyA9IFsnV0hFTicsICdFTFNFJ107XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YW5kYXJkU3FsRm9ybWF0dGVyIGV4dGVuZHMgRm9ybWF0dGVyIHtcbiAgc3RhdGljIHJlc2VydmVkQ29tbWFuZHMgPSByZXNlcnZlZENvbW1hbmRzO1xuICBzdGF0aWMgcmVzZXJ2ZWRCaW5hcnlDb21tYW5kcyA9IHJlc2VydmVkQmluYXJ5Q29tbWFuZHM7XG4gIHN0YXRpYyByZXNlcnZlZERlcGVuZGVudENsYXVzZXMgPSByZXNlcnZlZERlcGVuZGVudENsYXVzZXM7XG4gIHN0YXRpYyByZXNlcnZlZEpvaW5Db25kaXRpb25zID0gWydPTicsICdVU0lORyddO1xuICBzdGF0aWMgcmVzZXJ2ZWRMb2dpY2FsT3BlcmF0b3JzID0gWydBTkQnLCAnT1InXTtcbiAgc3RhdGljIHJlc2VydmVkS2V5d29yZHMgPSBkZWR1cGUocmVzZXJ2ZWRLZXl3b3Jkcyk7XG4gIHN0YXRpYyBzdHJpbmdUeXBlczogU3RyaW5nUGF0dGVyblR5cGVbXSA9IFtgXCJcImAsIFwiJydcIiwgJ2BgJ107XG4gIHN0YXRpYyBibG9ja1N0YXJ0ID0gWycoJywgJ0NBU0UnXTtcbiAgc3RhdGljIGJsb2NrRW5kID0gWycpJywgJ0VORCddO1xuICBzdGF0aWMgaW5kZXhlZFBsYWNlaG9sZGVyVHlwZXMgPSBbJz8nXTtcbiAgc3RhdGljIG5hbWVkUGxhY2Vob2xkZXJUeXBlcyA9IFtdO1xuICBzdGF0aWMgbGluZUNvbW1lbnRUeXBlcyA9IFsnLS0nXTtcbiAgc3RhdGljIG9wZXJhdG9ycyA9IFtdO1xuXG4gIHRva2VuaXplcigpIHtcbiAgICByZXR1cm4gbmV3IFRva2VuaXplcih7XG4gICAgICByZXNlcnZlZENvbW1hbmRzOiBTdGFuZGFyZFNxbEZvcm1hdHRlci5yZXNlcnZlZENvbW1hbmRzLFxuICAgICAgcmVzZXJ2ZWRCaW5hcnlDb21tYW5kczogU3RhbmRhcmRTcWxGb3JtYXR0ZXIucmVzZXJ2ZWRCaW5hcnlDb21tYW5kcyxcbiAgICAgIHJlc2VydmVkRGVwZW5kZW50Q2xhdXNlczogU3RhbmRhcmRTcWxGb3JtYXR0ZXIucmVzZXJ2ZWREZXBlbmRlbnRDbGF1c2VzLFxuICAgICAgcmVzZXJ2ZWRKb2luQ29uZGl0aW9uczogU3RhbmRhcmRTcWxGb3JtYXR0ZXIucmVzZXJ2ZWRKb2luQ29uZGl0aW9ucyxcbiAgICAgIHJlc2VydmVkTG9naWNhbE9wZXJhdG9yczogU3RhbmRhcmRTcWxGb3JtYXR0ZXIucmVzZXJ2ZWRMb2dpY2FsT3BlcmF0b3JzLFxuICAgICAgcmVzZXJ2ZWRLZXl3b3JkczogU3RhbmRhcmRTcWxGb3JtYXR0ZXIucmVzZXJ2ZWRLZXl3b3JkcyxcbiAgICAgIHN0cmluZ1R5cGVzOiBTdGFuZGFyZFNxbEZvcm1hdHRlci5zdHJpbmdUeXBlcyxcbiAgICAgIGJsb2NrU3RhcnQ6IFN0YW5kYXJkU3FsRm9ybWF0dGVyLmJsb2NrU3RhcnQsXG4gICAgICBibG9ja0VuZDogU3RhbmRhcmRTcWxGb3JtYXR0ZXIuYmxvY2tFbmQsXG4gICAgICBpbmRleGVkUGxhY2Vob2xkZXJUeXBlczogU3RhbmRhcmRTcWxGb3JtYXR0ZXIuaW5kZXhlZFBsYWNlaG9sZGVyVHlwZXMsXG4gICAgICBuYW1lZFBsYWNlaG9sZGVyVHlwZXM6IFN0YW5kYXJkU3FsRm9ybWF0dGVyLm5hbWVkUGxhY2Vob2xkZXJUeXBlcyxcbiAgICAgIGxpbmVDb21tZW50VHlwZXM6IFN0YW5kYXJkU3FsRm9ybWF0dGVyLmxpbmVDb21tZW50VHlwZXMsXG4gICAgfSk7XG4gIH1cbn1cbiIsImltcG9ydCBGb3JtYXR0ZXIgZnJvbSAnLi4vY29yZS9Gb3JtYXR0ZXInO1xuaW1wb3J0IFRva2VuaXplciBmcm9tICcuLi9jb3JlL1Rva2VuaXplcic7XG5pbXBvcnQgdHlwZSB7IFN0cmluZ1BhdHRlcm5UeXBlIH0gZnJvbSAnLi4vY29yZS9yZWdleEZhY3RvcnknO1xuaW1wb3J0IHsgZGVkdXBlIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG4vKipcbiAqIFByaW9yaXR5IDUgKGxhc3QpXG4gKiBGdWxsIGxpc3Qgb2YgcmVzZXJ2ZWQgZnVuY3Rpb25zXG4gKiBkaXN0aW5jdCBmcm9tIEtleXdvcmRzIGR1ZSB0byBpbnRlcmFjdGlvbiB3aXRoIHBhcmVudGhlc2VzXG4gKi9cbi8vIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3NxbC90LXNxbC9mdW5jdGlvbnMvZnVuY3Rpb25zP3ZpZXc9c3FsLXNlcnZlci12ZXIxNVxuY29uc3QgcmVzZXJ2ZWRGdW5jdGlvbnMgPSB7XG4gIGFnZ3JlZ2F0ZTogW1xuICAgICdBUFBST1hfQ09VTlRfRElTVElOQ1QnLFxuICAgICdBVkcnLFxuICAgICdDSEVDS1NVTV9BR0cnLFxuICAgICdDT1VOVCcsXG4gICAgJ0NPVU5UX0JJRycsXG4gICAgJ0dST1VQSU5HJyxcbiAgICAnR1JPVVBJTkdfSUQnLFxuICAgICdNQVgnLFxuICAgICdNSU4nLFxuICAgICdTVERFVicsXG4gICAgJ1NUREVWUCcsXG4gICAgJ1NVTScsXG4gICAgJ1ZBUicsXG4gICAgJ1ZBUlAnLFxuICBdLFxuICBhbmFseXRpYzogW1xuICAgICdDVU1FX0RJU1QnLFxuICAgICdGSVJTVF9WQUxVRScsXG4gICAgJ0xBRycsXG4gICAgJ0xBU1RfVkFMVUUnLFxuICAgICdMRUFEJyxcbiAgICAnUEVSQ0VOVElMRV9DT05UJyxcbiAgICAnUEVSQ0VOVElMRV9ESVNDJyxcbiAgICAnUEVSQ0VOVF9SQU5LJyxcbiAgICAnQ29sbGF0aW9uIC0gQ09MTEFUSU9OUFJPUEVSVFknLFxuICAgICdDb2xsYXRpb24gLSBURVJUSUFSWV9XRUlHSFRTJyxcbiAgXSxcbiAgY29uZmlndXJhdGlvbjogW1xuICAgICdAQERCVFMnLFxuICAgICdAQExBTkdJRCcsXG4gICAgJ0BATEFOR1VBR0UnLFxuICAgICdAQExPQ0tfVElNRU9VVCcsXG4gICAgJ0BATUFYX0NPTk5FQ1RJT05TJyxcbiAgICAnQEBNQVhfUFJFQ0lTSU9OJyxcbiAgICAnQEBORVNUTEVWRUwnLFxuICAgICdAQE9QVElPTlMnLFxuICAgICdAQFJFTVNFUlZFUicsXG4gICAgJ0BAU0VSVkVSTkFNRScsXG4gICAgJ0BAU0VSVklDRU5BTUUnLFxuICAgICdAQFNQSUQnLFxuICAgICdAQFRFWFRTSVpFJyxcbiAgICAnQEBWRVJTSU9OJyxcbiAgXSxcbiAgY29udmVyc2lvbjogWydDQVNUJywgJ0NPTlZFUlQnLCAnUEFSU0UnLCAnVFJZX0NBU1QnLCAnVFJZX0NPTlZFUlQnLCAnVFJZX1BBUlNFJ10sXG4gIGNyeXB0b2dyYXBoaWM6IFtcbiAgICAnQVNZTUtFWV9JRCcsXG4gICAgJ0FTWU1LRVlQUk9QRVJUWScsXG4gICAgJ0NFUlRQUk9QRVJUWScsXG4gICAgJ0NFUlRfSUQnLFxuICAgICdDUllQVF9HRU5fUkFORE9NJyxcbiAgICAnREVDUllQVEJZQVNZTUtFWScsXG4gICAgJ0RFQ1JZUFRCWUNFUlQnLFxuICAgICdERUNSWVBUQllLRVknLFxuICAgICdERUNSWVBUQllLRVlBVVRPQVNZTUtFWScsXG4gICAgJ0RFQ1JZUFRCWUtFWUFVVE9DRVJUJyxcbiAgICAnREVDUllQVEJZUEFTU1BIUkFTRScsXG4gICAgJ0VOQ1JZUFRCWUFTWU1LRVknLFxuICAgICdFTkNSWVBUQllDRVJUJyxcbiAgICAnRU5DUllQVEJZS0VZJyxcbiAgICAnRU5DUllQVEJZUEFTU1BIUkFTRScsXG4gICAgJ0hBU0hCWVRFUycsXG4gICAgJ0lTX09CSkVDVFNJR05FRCcsXG4gICAgJ0tFWV9HVUlEJyxcbiAgICAnS0VZX0lEJyxcbiAgICAnS0VZX05BTUUnLFxuICAgICdTSUdOQllBU1lNS0VZJyxcbiAgICAnU0lHTkJZQ0VSVCcsXG4gICAgJ1NZTUtFWVBST1BFUlRZJyxcbiAgICAnVkVSSUZZU0lHTkVEQllDRVJUJyxcbiAgICAnVkVSSUZZU0lHTkVEQllBU1lNS0VZJyxcbiAgXSxcbiAgY3Vyc29yOiBbJ0BAQ1VSU09SX1JPV1MnLCAnQEBGRVRDSF9TVEFUVVMnLCAnQ1VSU09SX1NUQVRVUyddLFxuICBkYXRhVHlwZTogW1xuICAgICdEQVRBTEVOR1RIJyxcbiAgICAnSURFTlRfQ1VSUkVOVCcsXG4gICAgJ0lERU5UX0lOQ1InLFxuICAgICdJREVOVF9TRUVEJyxcbiAgICAnSURFTlRJVFknLFxuICAgICdTUUxfVkFSSUFOVF9QUk9QRVJUWScsXG4gIF0sXG4gIGRhdGV0aW1lOiBbXG4gICAgJ0BAREFURUZJUlNUJyxcbiAgICAnQ1VSUkVOVF9USU1FU1RBTVAnLFxuICAgICdDVVJSRU5UX1RJTUVaT05FJyxcbiAgICAnQ1VSUkVOVF9USU1FWk9ORV9JRCcsXG4gICAgJ0RBVEVBREQnLFxuICAgICdEQVRFRElGRicsXG4gICAgJ0RBVEVESUZGX0JJRycsXG4gICAgJ0RBVEVGUk9NUEFSVFMnLFxuICAgICdEQVRFTkFNRScsXG4gICAgJ0RBVEVQQVJUJyxcbiAgICAnREFURVRJTUUyRlJPTVBBUlRTJyxcbiAgICAnREFURVRJTUVGUk9NUEFSVFMnLFxuICAgICdEQVRFVElNRU9GRlNFVEZST01QQVJUUycsXG4gICAgJ0RBWScsXG4gICAgJ0VPTU9OVEgnLFxuICAgICdHRVREQVRFJyxcbiAgICAnR0VUVVRDREFURScsXG4gICAgJ0lTREFURScsXG4gICAgJ01PTlRIJyxcbiAgICAnU01BTExEQVRFVElNRUZST01QQVJUUycsXG4gICAgJ1NXSVRDSE9GRlNFVCcsXG4gICAgJ1NZU0RBVEVUSU1FJyxcbiAgICAnU1lTREFURVRJTUVPRkZTRVQnLFxuICAgICdTWVNVVENEQVRFVElNRScsXG4gICAgJ1RJTUVGUk9NUEFSVFMnLFxuICAgICdUT0RBVEVUSU1FT0ZGU0VUJyxcbiAgICAnWUVBUicsXG4gICAgJ0pTT04nLFxuICAgICdJU0pTT04nLFxuICAgICdKU09OX1ZBTFVFJyxcbiAgICAnSlNPTl9RVUVSWScsXG4gICAgJ0pTT05fTU9ESUZZJyxcbiAgXSxcbiAgbWF0aGVtYXRpY2FsOiBbXG4gICAgJ0FCUycsXG4gICAgJ0FDT1MnLFxuICAgICdBU0lOJyxcbiAgICAnQVRBTicsXG4gICAgJ0FUTjInLFxuICAgICdDRUlMSU5HJyxcbiAgICAnQ09TJyxcbiAgICAnQ09UJyxcbiAgICAnREVHUkVFUycsXG4gICAgJ0VYUCcsXG4gICAgJ0ZMT09SJyxcbiAgICAnTE9HJyxcbiAgICAnTE9HMTAnLFxuICAgICdQSScsXG4gICAgJ1BPV0VSJyxcbiAgICAnUkFESUFOUycsXG4gICAgJ1JBTkQnLFxuICAgICdST1VORCcsXG4gICAgJ1NJR04nLFxuICAgICdTSU4nLFxuICAgICdTUVJUJyxcbiAgICAnU1FVQVJFJyxcbiAgICAnVEFOJyxcbiAgICAnQ0hPT1NFJyxcbiAgICAnR1JFQVRFU1QnLFxuICAgICdJSUYnLFxuICAgICdMRUFTVCcsXG4gIF0sXG4gIG1ldGFkYXRhOiBbXG4gICAgJ0BAUFJPQ0lEJyxcbiAgICAnQVBQX05BTUUnLFxuICAgICdBUFBMT0NLX01PREUnLFxuICAgICdBUFBMT0NLX1RFU1QnLFxuICAgICdBU1NFTUJMWVBST1BFUlRZJyxcbiAgICAnQ09MX0xFTkdUSCcsXG4gICAgJ0NPTF9OQU1FJyxcbiAgICAnQ09MVU1OUFJPUEVSVFknLFxuICAgICdEQVRBQkFTRVBST1BFUlRZRVgnLFxuICAgICdEQl9JRCcsXG4gICAgJ0RCX05BTUUnLFxuICAgICdGSUxFX0lEJyxcbiAgICAnRklMRV9JREVYJyxcbiAgICAnRklMRV9OQU1FJyxcbiAgICAnRklMRUdST1VQX0lEJyxcbiAgICAnRklMRUdST1VQX05BTUUnLFxuICAgICdGSUxFR1JPVVBQUk9QRVJUWScsXG4gICAgJ0ZJTEVQUk9QRVJUWScsXG4gICAgJ0ZJTEVQUk9QRVJUWUVYJyxcbiAgICAnRlVMTFRFWFRDQVRBTE9HUFJPUEVSVFknLFxuICAgICdGVUxMVEVYVFNFUlZJQ0VQUk9QRVJUWScsXG4gICAgJ0lOREVYX0NPTCcsXG4gICAgJ0lOREVYS0VZX1BST1BFUlRZJyxcbiAgICAnSU5ERVhQUk9QRVJUWScsXG4gICAgJ05FWFQgVkFMVUUgRk9SJyxcbiAgICAnT0JKRUNUX0RFRklOSVRJT04nLFxuICAgICdPQkpFQ1RfSUQnLFxuICAgICdPQkpFQ1RfTkFNRScsXG4gICAgJ09CSkVDVF9TQ0hFTUFfTkFNRScsXG4gICAgJ09CSkVDVFBST1BFUlRZJyxcbiAgICAnT0JKRUNUUFJPUEVSVFlFWCcsXG4gICAgJ09SSUdJTkFMX0RCX05BTUUnLFxuICAgICdQQVJTRU5BTUUnLFxuICAgICdTQ0hFTUFfSUQnLFxuICAgICdTQ0hFTUFfTkFNRScsXG4gICAgJ1NDT1BFX0lERU5USVRZJyxcbiAgICAnU0VSVkVSUFJPUEVSVFknLFxuICAgICdTVEFUU19EQVRFJyxcbiAgICAnVFlQRV9JRCcsXG4gICAgJ1RZUEVfTkFNRScsXG4gICAgJ1RZUEVQUk9QRVJUWScsXG4gIF0sXG4gIHJhbmtpbmc6IFsnREVOU0VfUkFOSycsICdOVElMRScsICdSQU5LJywgJ1JPV19OVU1CRVInLCAnUFVCTElTSElOR1NFUlZFUk5BTUUnXSxcbiAgc2VjdXJpdHk6IFtcbiAgICAnQ0VSVEVOQ09ERUQnLFxuICAgICdDRVJUUFJJVkFURUtFWScsXG4gICAgJ0NVUlJFTlRfVVNFUicsXG4gICAgJ0RBVEFCQVNFX1BSSU5DSVBBTF9JRCcsXG4gICAgJ0hBU19EQkFDQ0VTUycsXG4gICAgJ0hBU19QRVJNU19CWV9OQU1FJyxcbiAgICAnSVNfTUVNQkVSJyxcbiAgICAnSVNfUk9MRU1FTUJFUicsXG4gICAgJ0lTX1NSVlJPTEVNRU1CRVInLFxuICAgICdMT0dJTlBST1BFUlRZJyxcbiAgICAnT1JJR0lOQUxfTE9HSU4nLFxuICAgICdQRVJNSVNTSU9OUycsXG4gICAgJ1BXREVOQ1JZUFQnLFxuICAgICdQV0RDT01QQVJFJyxcbiAgICAnU0VTU0lPTl9VU0VSJyxcbiAgICAnU0VTU0lPTlBST1BFUlRZJyxcbiAgICAnU1VTRVJfSUQnLFxuICAgICdTVVNFUl9OQU1FJyxcbiAgICAnU1VTRVJfU0lEJyxcbiAgICAnU1VTRVJfU05BTUUnLFxuICAgICdTWVNURU1fVVNFUicsXG4gICAgJ1VTRVInLFxuICAgICdVU0VSX0lEJyxcbiAgICAnVVNFUl9OQU1FJyxcbiAgXSxcbiAgc3RyaW5nOiBbXG4gICAgJ0FTQ0lJJyxcbiAgICAnQ0hBUicsXG4gICAgJ0NIQVJJTkRFWCcsXG4gICAgJ0NPTkNBVCcsXG4gICAgJ0NPTkNBVF9XUycsXG4gICAgJ0RJRkZFUkVOQ0UnLFxuICAgICdGT1JNQVQnLFxuICAgICdMRUZUJyxcbiAgICAnTEVOJyxcbiAgICAnTE9XRVInLFxuICAgICdMVFJJTScsXG4gICAgJ05DSEFSJyxcbiAgICAnUEFUSU5ERVgnLFxuICAgICdRVU9URU5BTUUnLFxuICAgICdSRVBMQUNFJyxcbiAgICAnUkVQTElDQVRFJyxcbiAgICAnUkVWRVJTRScsXG4gICAgJ1JJR0hUJyxcbiAgICAnUlRSSU0nLFxuICAgICdTT1VOREVYJyxcbiAgICAnU1BBQ0UnLFxuICAgICdTVFInLFxuICAgICdTVFJJTkdfQUdHJyxcbiAgICAnU1RSSU5HX0VTQ0FQRScsXG4gICAgJ1NUVUZGJyxcbiAgICAnU1VCU1RSSU5HJyxcbiAgICAnVFJBTlNMQVRFJyxcbiAgICAnVFJJTScsXG4gICAgJ1VOSUNPREUnLFxuICAgICdVUFBFUicsXG4gIF0sXG4gIHN5c3RlbTogW1xuICAgICckUEFSVElUSU9OJyxcbiAgICAnQEBFUlJPUicsXG4gICAgJ0BASURFTlRJVFknLFxuICAgICdAQFBBQ0tfUkVDRUlWRUQnLFxuICAgICdAQFJPV0NPVU5UJyxcbiAgICAnQEBUUkFOQ09VTlQnLFxuICAgICdCSU5BUllfQ0hFQ0tTVU0nLFxuICAgICdDSEVDS1NVTScsXG4gICAgJ0NPTVBSRVNTJyxcbiAgICAnQ09OTkVDVElPTlBST1BFUlRZJyxcbiAgICAnQ09OVEVYVF9JTkZPJyxcbiAgICAnQ1VSUkVOVF9SRVFVRVNUX0lEJyxcbiAgICAnQ1VSUkVOVF9UUkFOU0FDVElPTl9JRCcsXG4gICAgJ0RFQ09NUFJFU1MnLFxuICAgICdFUlJPUl9MSU5FJyxcbiAgICAnRVJST1JfTUVTU0FHRScsXG4gICAgJ0VSUk9SX05VTUJFUicsXG4gICAgJ0VSUk9SX1BST0NFRFVSRScsXG4gICAgJ0VSUk9SX1NFVkVSSVRZJyxcbiAgICAnRVJST1JfU1RBVEUnLFxuICAgICdGT1JNQVRNRVNTQUdFJyxcbiAgICAnR0VUX0ZJTEVTVFJFQU1fVFJBTlNBQ1RJT05fQ09OVEVYVCcsXG4gICAgJ0dFVEFOU0lOVUxMJyxcbiAgICAnSE9TVF9JRCcsXG4gICAgJ0hPU1RfTkFNRScsXG4gICAgJ0lTTlVMTCcsXG4gICAgJ0lTTlVNRVJJQycsXG4gICAgJ01JTl9BQ1RJVkVfUk9XVkVSU0lPTicsXG4gICAgJ05FV0lEJyxcbiAgICAnTkVXU0VRVUVOVElBTElEJyxcbiAgICAnUk9XQ09VTlRfQklHJyxcbiAgICAnU0VTU0lPTl9DT05URVhUJyxcbiAgICAnWEFDVF9TVEFURScsXG4gIF0sXG4gIHN0YXRpc3RpY2FsOiBbXG4gICAgJ0BAQ09OTkVDVElPTlMnLFxuICAgICdAQENQVV9CVVNZJyxcbiAgICAnQEBJRExFJyxcbiAgICAnQEBJT19CVVNZJyxcbiAgICAnQEBQQUNLX1NFTlQnLFxuICAgICdAQFBBQ0tFVF9FUlJPUlMnLFxuICAgICdAQFRJTUVUSUNLUycsXG4gICAgJ0BAVE9UQUxfRVJST1JTJyxcbiAgICAnQEBUT1RBTF9SRUFEJyxcbiAgICAnQEBUT1RBTF9XUklURScsXG4gICAgJ1RFWFRQVFInLFxuICAgICdURVhUVkFMSUQnLFxuICBdLFxuICB0cmlnZ2VyOiBbJ0NPTFVNTlNfVVBEQVRFRCcsICdFVkVOVERBVEEnLCAnVFJJR0dFUl9ORVNUTEVWRUwnLCAnVVBEQVRFJ10sXG59O1xuXG4vLyBUT0RPOiBkZWR1cGUgdGhlc2UgcmVzZXJ2ZWQgd29yZCBsaXN0c1xuLy8gaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvc3FsL3Qtc3FsL2xhbmd1YWdlLWVsZW1lbnRzL3Jlc2VydmVkLWtleXdvcmRzLXRyYW5zYWN0LXNxbD92aWV3PXNxbC1zZXJ2ZXItdmVyMTVcbi8qKlxuICogUHJpb3JpdHkgNSAobGFzdClcbiAqIEZ1bGwgbGlzdCBvZiByZXNlcnZlZCB3b3Jkc1xuICogYW55IHdvcmRzIHRoYXQgYXJlIGluIGEgaGlnaGVyIHByaW9yaXR5IGFyZSByZW1vdmVkXG4gKi9cbmNvbnN0IHJlc2VydmVkS2V5d29yZHMgPSB7XG4gIHN0YW5kYXJkOiBbXG4gICAgJ0FERCcsXG4gICAgJ0FMTCcsXG4gICAgJ0FMVEVSJyxcbiAgICAnQU5EJyxcbiAgICAnQU5ZJyxcbiAgICAnQVMnLFxuICAgICdBU0MnLFxuICAgICdBVVRIT1JJWkFUSU9OJyxcbiAgICAnQkFDS1VQJyxcbiAgICAnQkVHSU4nLFxuICAgICdCRVRXRUVOJyxcbiAgICAnQlJFQUsnLFxuICAgICdCUk9XU0UnLFxuICAgICdCVUxLJyxcbiAgICAnQlknLFxuICAgICdDQVNDQURFJyxcbiAgICAnQ0FTRScsXG4gICAgJ0NIRUNLJyxcbiAgICAnQ0hFQ0tQT0lOVCcsXG4gICAgJ0NMT1NFJyxcbiAgICAnQ0xVU1RFUkVEJyxcbiAgICAnQ09BTEVTQ0UnLFxuICAgICdDT0xMQVRFJyxcbiAgICAnQ09MVU1OJyxcbiAgICAnQ09NTUlUJyxcbiAgICAnQ09NUFVURScsXG4gICAgJ0NPTlNUUkFJTlQnLFxuICAgICdDT05UQUlOUycsXG4gICAgJ0NPTlRBSU5TVEFCTEUnLFxuICAgICdDT05USU5VRScsXG4gICAgJ0NPTlZFUlQnLFxuICAgICdDUkVBVEUnLFxuICAgICdDUk9TUycsXG4gICAgJ0NVUlJFTlQnLFxuICAgICdDVVJSRU5UX0RBVEUnLFxuICAgICdDVVJSRU5UX1RJTUUnLFxuICAgICdDVVJSRU5UX1RJTUVTVEFNUCcsXG4gICAgJ0NVUlJFTlRfVVNFUicsXG4gICAgJ0NVUlNPUicsXG4gICAgJ0RBVEFCQVNFJyxcbiAgICAnREJDQycsXG4gICAgJ0RFQUxMT0NBVEUnLFxuICAgICdERUNMQVJFJyxcbiAgICAnREVGQVVMVCcsXG4gICAgJ0RFTEVURScsXG4gICAgJ0RFTlknLFxuICAgICdERVNDJyxcbiAgICAnRElTSycsXG4gICAgJ0RJU1RJTkNUJyxcbiAgICAnRElTVFJJQlVURUQnLFxuICAgICdET1VCTEUnLFxuICAgICdEUk9QJyxcbiAgICAnRFVNUCcsXG4gICAgJ0VSUkxWTCcsXG4gICAgJ0VTQ0FQRScsXG4gICAgJ0VYRUMnLFxuICAgICdFWEVDVVRFJyxcbiAgICAnRVhJU1RTJyxcbiAgICAnRVhJVCcsXG4gICAgJ0VYVEVSTkFMJyxcbiAgICAnRkVUQ0gnLFxuICAgICdGSUxFJyxcbiAgICAnRklMTEZBQ1RPUicsXG4gICAgJ0ZPUicsXG4gICAgJ0ZPUkVJR04nLFxuICAgICdGUkVFVEVYVCcsXG4gICAgJ0ZSRUVURVhUVEFCTEUnLFxuICAgICdGUk9NJyxcbiAgICAnRlVMTCcsXG4gICAgJ0ZVTkNUSU9OJyxcbiAgICAnR09UTycsXG4gICAgJ0dSQU5UJyxcbiAgICAnR1JPVVAnLFxuICAgICdIQVZJTkcnLFxuICAgICdIT0xETE9DSycsXG4gICAgJ0lERU5USVRZJyxcbiAgICAnSURFTlRJVFlDT0wnLFxuICAgICdJREVOVElUWV9JTlNFUlQnLFxuICAgICdJRicsXG4gICAgJ0lOJyxcbiAgICAnSU5ERVgnLFxuICAgICdJTk5FUicsXG4gICAgJ0lOU0VSVCcsXG4gICAgJ0lOVEVSU0VDVCcsXG4gICAgJ0lOVE8nLFxuICAgICdJUycsXG4gICAgJ0pPSU4nLFxuICAgICdLRVknLFxuICAgICdLSUxMJyxcbiAgICAnTEVGVCcsXG4gICAgJ0xJS0UnLFxuICAgICdMSU5FTk8nLFxuICAgICdMT0FEJyxcbiAgICAnTUVSR0UnLFxuICAgICdOQVRJT05BTCcsXG4gICAgJ05PQ0hFQ0snLFxuICAgICdOT05DTFVTVEVSRUQnLFxuICAgICdOT1QnLFxuICAgICdOVUxMJyxcbiAgICAnTlVMTElGJyxcbiAgICAnT0YnLFxuICAgICdPRkYnLFxuICAgICdPRkZTRVRTJyxcbiAgICAnT04gREVMRVRFJyxcbiAgICAnT04gVVBEQVRFJyxcbiAgICAnT1BFTicsXG4gICAgJ09QRU5EQVRBU09VUkNFJyxcbiAgICAnT1BFTlFVRVJZJyxcbiAgICAnT1BFTlJPV1NFVCcsXG4gICAgJ09QRU5YTUwnLFxuICAgICdPUFRJT04nLFxuICAgICdPUicsXG4gICAgJ09SREVSJyxcbiAgICAnT1VURVInLFxuICAgICdPVkVSJyxcbiAgICAnUEVSQ0VOVCcsXG4gICAgJ1BJVk9UJyxcbiAgICAnUExBTicsXG4gICAgJ1BSRUNJU0lPTicsXG4gICAgJ1BSSU1BUlknLFxuICAgICdQUklOVCcsXG4gICAgJ1BST0MnLFxuICAgICdQUk9DRURVUkUnLFxuICAgICdQVUJMSUMnLFxuICAgICdSQUlTRVJST1InLFxuICAgICdSRUFEJyxcbiAgICAnUkVBRFRFWFQnLFxuICAgICdSRUNPTkZJR1VSRScsXG4gICAgJ1JFRkVSRU5DRVMnLFxuICAgICdSRVBMSUNBVElPTicsXG4gICAgJ1JFU1RPUkUnLFxuICAgICdSRVNUUklDVCcsXG4gICAgJ1JFVFVSTicsXG4gICAgJ1JFVkVSVCcsXG4gICAgJ1JFVk9LRScsXG4gICAgJ1JJR0hUJyxcbiAgICAnUk9MTEJBQ0snLFxuICAgICdST1dDT1VOVCcsXG4gICAgJ1JPV0dVSURDT0wnLFxuICAgICdSVUxFJyxcbiAgICAnU0FWRScsXG4gICAgJ1NDSEVNQScsXG4gICAgJ1NFQ1VSSVRZQVVESVQnLFxuICAgICdTRUxFQ1QnLFxuICAgICdTRU1BTlRJQ0tFWVBIUkFTRVRBQkxFJyxcbiAgICAnU0VNQU5USUNTSU1JTEFSSVRZREVUQUlMU1RBQkxFJyxcbiAgICAnU0VNQU5USUNTSU1JTEFSSVRZVEFCTEUnLFxuICAgICdTRVNTSU9OX1VTRVInLFxuICAgICdTRVQnLFxuICAgICdTRVRVU0VSJyxcbiAgICAnU0hVVERPV04nLFxuICAgICdTT01FJyxcbiAgICAnU1RBVElTVElDUycsXG4gICAgJ1NZU1RFTV9VU0VSJyxcbiAgICAnVEFCTEUnLFxuICAgICdUQUJMRVNBTVBMRScsXG4gICAgJ1RFWFRTSVpFJyxcbiAgICAnVEhFTicsXG4gICAgJ1RPJyxcbiAgICAnVE9QJyxcbiAgICAnVFJBTicsXG4gICAgJ1RSQU5TQUNUSU9OJyxcbiAgICAnVFJJR0dFUicsXG4gICAgJ1RSVU5DQVRFJyxcbiAgICAnVFJZX0NPTlZFUlQnLFxuICAgICdUU0VRVUFMJyxcbiAgICAnVU5JT04nLFxuICAgICdVTklRVUUnLFxuICAgICdVTlBJVk9UJyxcbiAgICAnVVBEQVRFJyxcbiAgICAnVVBEQVRFVEVYVCcsXG4gICAgJ1VTRScsXG4gICAgJ1VTRVInLFxuICAgICdWQUxVRVMnLFxuICAgICdWQVJZSU5HJyxcbiAgICAnVklFVycsXG4gICAgJ1dBSVRGT1InLFxuICAgICdXSEVSRScsXG4gICAgJ1dISUxFJyxcbiAgICAnV0lUSCcsXG4gICAgJ1dJVEhJTiBHUk9VUCcsXG4gICAgJ1dSSVRFVEVYVCcsXG4gIF0sXG4gIG9kYmM6IFtcbiAgICAnQUJTT0xVVEUnLFxuICAgICdBQ1RJT04nLFxuICAgICdBREEnLFxuICAgICdBREQnLFxuICAgICdBTEwnLFxuICAgICdBTExPQ0FURScsXG4gICAgJ0FMVEVSJyxcbiAgICAnQU5EJyxcbiAgICAnQU5ZJyxcbiAgICAnQVJFJyxcbiAgICAnQVMnLFxuICAgICdBU0MnLFxuICAgICdBU1NFUlRJT04nLFxuICAgICdBVCcsXG4gICAgJ0FVVEhPUklaQVRJT04nLFxuICAgICdBVkcnLFxuICAgICdCRUdJTicsXG4gICAgJ0JFVFdFRU4nLFxuICAgICdCSVQnLFxuICAgICdCSVRfTEVOR1RIJyxcbiAgICAnQk9USCcsXG4gICAgJ0JZJyxcbiAgICAnQ0FTQ0FERScsXG4gICAgJ0NBU0NBREVEJyxcbiAgICAnQ0FTRScsXG4gICAgJ0NBU1QnLFxuICAgICdDQVRBTE9HJyxcbiAgICAnQ0hBUicsXG4gICAgJ0NIQVJBQ1RFUicsXG4gICAgJ0NIQVJBQ1RFUl9MRU5HVEgnLFxuICAgICdDSEFSX0xFTkdUSCcsXG4gICAgJ0NIRUNLJyxcbiAgICAnQ0xPU0UnLFxuICAgICdDT0FMRVNDRScsXG4gICAgJ0NPTExBVEUnLFxuICAgICdDT0xMQVRJT04nLFxuICAgICdDT0xVTU4nLFxuICAgICdDT01NSVQnLFxuICAgICdDT05ORUNUJyxcbiAgICAnQ09OTkVDVElPTicsXG4gICAgJ0NPTlNUUkFJTlQnLFxuICAgICdDT05TVFJBSU5UUycsXG4gICAgJ0NPTlRJTlVFJyxcbiAgICAnQ09OVkVSVCcsXG4gICAgJ0NPUlJFU1BPTkRJTkcnLFxuICAgICdDT1VOVCcsXG4gICAgJ0NSRUFURScsXG4gICAgJ0NST1NTJyxcbiAgICAnQ1VSUkVOVCcsXG4gICAgJ0NVUlJFTlRfREFURScsXG4gICAgJ0NVUlJFTlRfVElNRScsXG4gICAgJ0NVUlJFTlRfVElNRVNUQU1QJyxcbiAgICAnQ1VSUkVOVF9VU0VSJyxcbiAgICAnQ1VSU09SJyxcbiAgICAnREFURScsXG4gICAgJ0RBWScsXG4gICAgJ0RFQUxMT0NBVEUnLFxuICAgICdERUMnLFxuICAgICdERUNJTUFMJyxcbiAgICAnREVDTEFSRScsXG4gICAgJ0RFRkFVTFQnLFxuICAgICdERUZFUlJBQkxFJyxcbiAgICAnREVGRVJSRUQnLFxuICAgICdERUxFVEUnLFxuICAgICdERVNDJyxcbiAgICAnREVTQ1JJQkUnLFxuICAgICdERVNDUklQVE9SJyxcbiAgICAnRElBR05PU1RJQ1MnLFxuICAgICdESVNDT05ORUNUJyxcbiAgICAnRElTVElOQ1QnLFxuICAgICdET01BSU4nLFxuICAgICdET1VCTEUnLFxuICAgICdEUk9QJyxcbiAgICAnRU5ELUVYRUMnLFxuICAgICdFU0NBUEUnLFxuICAgICdFWENFUFRJT04nLFxuICAgICdFWEVDJyxcbiAgICAnRVhFQ1VURScsXG4gICAgJ0VYSVNUUycsXG4gICAgJ0VYVEVSTkFMJyxcbiAgICAnRVhUUkFDVCcsXG4gICAgJ0ZBTFNFJyxcbiAgICAnRkVUQ0gnLFxuICAgICdGSVJTVCcsXG4gICAgJ0ZMT0FUJyxcbiAgICAnRk9SJyxcbiAgICAnRk9SRUlHTicsXG4gICAgJ0ZPUlRSQU4nLFxuICAgICdGT1VORCcsXG4gICAgJ0ZST00nLFxuICAgICdGVUxMJyxcbiAgICAnR0VUJyxcbiAgICAnR0xPQkFMJyxcbiAgICAnR08nLFxuICAgICdHT1RPJyxcbiAgICAnR1JBTlQnLFxuICAgICdHUk9VUCcsXG4gICAgJ0hBVklORycsXG4gICAgJ0hPVVInLFxuICAgICdJREVOVElUWScsXG4gICAgJ0lNTUVESUFURScsXG4gICAgJ0lOJyxcbiAgICAnSU5DTFVERScsXG4gICAgJ0lOREVYJyxcbiAgICAnSU5ESUNBVE9SJyxcbiAgICAnSU5JVElBTExZJyxcbiAgICAnSU5ORVInLFxuICAgICdJTlBVVCcsXG4gICAgJ0lOU0VOU0lUSVZFJyxcbiAgICAnSU5TRVJUJyxcbiAgICAnSU5UJyxcbiAgICAnSU5URUdFUicsXG4gICAgJ0lOVEVSU0VDVCcsXG4gICAgJ0lOVEVSVkFMJyxcbiAgICAnSU5UTycsXG4gICAgJ0lTJyxcbiAgICAnSVNPTEFUSU9OJyxcbiAgICAnSk9JTicsXG4gICAgJ0tFWScsXG4gICAgJ0xBTkdVQUdFJyxcbiAgICAnTEFTVCcsXG4gICAgJ0xFQURJTkcnLFxuICAgICdMRUZUJyxcbiAgICAnTEVWRUwnLFxuICAgICdMSUtFJyxcbiAgICAnTE9DQUwnLFxuICAgICdMT1dFUicsXG4gICAgJ01BVENIJyxcbiAgICAnTUFYJyxcbiAgICAnTUlOJyxcbiAgICAnTUlOVVRFJyxcbiAgICAnTU9EVUxFJyxcbiAgICAnTU9OVEgnLFxuICAgICdOQU1FUycsXG4gICAgJ05BVElPTkFMJyxcbiAgICAnTkFUVVJBTCcsXG4gICAgJ05DSEFSJyxcbiAgICAnTkVYVCcsXG4gICAgJ05PJyxcbiAgICAnTk9ORScsXG4gICAgJ05PVCcsXG4gICAgJ05VTEwnLFxuICAgICdOVUxMSUYnLFxuICAgICdOVU1FUklDJyxcbiAgICAnT0NURVRfTEVOR1RIJyxcbiAgICAnT0YnLFxuICAgICdPTkxZJyxcbiAgICAnT1BFTicsXG4gICAgJ09QVElPTicsXG4gICAgJ09SJyxcbiAgICAnT1JERVInLFxuICAgICdPVVRFUicsXG4gICAgJ09VVFBVVCcsXG4gICAgJ09WRVJMQVBTJyxcbiAgICAnUEFEJyxcbiAgICAnUEFSVElBTCcsXG4gICAgJ1BBU0NBTCcsXG4gICAgJ1BPU0lUSU9OJyxcbiAgICAnUFJFQ0lTSU9OJyxcbiAgICAnUFJFUEFSRScsXG4gICAgJ1BSRVNFUlZFJyxcbiAgICAnUFJJTUFSWScsXG4gICAgJ1BSSU9SJyxcbiAgICAnUFJJVklMRUdFUycsXG4gICAgJ1BST0NFRFVSRScsXG4gICAgJ1BVQkxJQycsXG4gICAgJ1JFQUQnLFxuICAgICdSRUFMJyxcbiAgICAnUkVGRVJFTkNFUycsXG4gICAgJ1JFTEFUSVZFJyxcbiAgICAnUkVTVFJJQ1QnLFxuICAgICdSRVZPS0UnLFxuICAgICdSSUdIVCcsXG4gICAgJ1JPTExCQUNLJyxcbiAgICAnUk9XUycsXG4gICAgJ1NDSEVNQScsXG4gICAgJ1NDUk9MTCcsXG4gICAgJ1NFQ09ORCcsXG4gICAgJ1NFQ1RJT04nLFxuICAgICdTRUxFQ1QnLFxuICAgICdTRVNTSU9OJyxcbiAgICAnU0VTU0lPTl9VU0VSJyxcbiAgICAnU0VUJyxcbiAgICAnU0laRScsXG4gICAgJ1NNQUxMSU5UJyxcbiAgICAnU09NRScsXG4gICAgJ1NQQUNFJyxcbiAgICAnU1FMJyxcbiAgICAnU1FMQ0EnLFxuICAgICdTUUxDT0RFJyxcbiAgICAnU1FMRVJST1InLFxuICAgICdTUUxTVEFURScsXG4gICAgJ1NRTFdBUk5JTkcnLFxuICAgICdTVUJTVFJJTkcnLFxuICAgICdTVU0nLFxuICAgICdTWVNURU1fVVNFUicsXG4gICAgJ1RBQkxFJyxcbiAgICAnVEVNUE9SQVJZJyxcbiAgICAnVElNRScsXG4gICAgJ1RJTUVTVEFNUCcsXG4gICAgJ1RJTUVaT05FX0hPVVInLFxuICAgICdUSU1FWk9ORV9NSU5VVEUnLFxuICAgICdUTycsXG4gICAgJ1RSQUlMSU5HJyxcbiAgICAnVFJBTlNBQ1RJT04nLFxuICAgICdUUkFOU0xBVEUnLFxuICAgICdUUkFOU0xBVElPTicsXG4gICAgJ1RSSU0nLFxuICAgICdUUlVFJyxcbiAgICAnVU5JT04nLFxuICAgICdVTklRVUUnLFxuICAgICdVTktOT1dOJyxcbiAgICAnVVBEQVRFJyxcbiAgICAnVVBQRVInLFxuICAgICdVU0FHRScsXG4gICAgJ1VTRVInLFxuICAgICdWQUxVRScsXG4gICAgJ1ZBTFVFUycsXG4gICAgJ1ZBUkNIQVInLFxuICAgICdWQVJZSU5HJyxcbiAgICAnVklFVycsXG4gICAgJ1dIRU5FVkVSJyxcbiAgICAnV0hFUkUnLFxuICAgICdXSVRIJyxcbiAgICAnV09SSycsXG4gICAgJ1dSSVRFJyxcbiAgICAnWUVBUicsXG4gICAgJ1pPTkUnLFxuICBdLFxuICBmdXR1cmU6IFtcbiAgICAnQUJTT0xVVEUnLFxuICAgICdBQ1RJT04nLFxuICAgICdBRE1JTicsXG4gICAgJ0FGVEVSJyxcbiAgICAnQUdHUkVHQVRFJyxcbiAgICAnQUxJQVMnLFxuICAgICdBTExPQ0FURScsXG4gICAgJ0FSRScsXG4gICAgJ0FSUkFZJyxcbiAgICAnQVNFTlNJVElWRScsXG4gICAgJ0FTU0VSVElPTicsXG4gICAgJ0FTWU1NRVRSSUMnLFxuICAgICdBVCcsXG4gICAgJ0FUT01JQycsXG4gICAgJ0JFRk9SRScsXG4gICAgJ0JJTkFSWScsXG4gICAgJ0JJVCcsXG4gICAgJ0JMT0InLFxuICAgICdCT09MRUFOJyxcbiAgICAnQk9USCcsXG4gICAgJ0JSRUFEVEgnLFxuICAgICdDQUxMJyxcbiAgICAnQ0FMTEVEJyxcbiAgICAnQ0FSRElOQUxJVFknLFxuICAgICdDQVNDQURFRCcsXG4gICAgJ0NBU1QnLFxuICAgICdDQVRBTE9HJyxcbiAgICAnQ0hBUicsXG4gICAgJ0NIQVJBQ1RFUicsXG4gICAgJ0NMQVNTJyxcbiAgICAnQ0xPQicsXG4gICAgJ0NPTExBVElPTicsXG4gICAgJ0NPTExFQ1QnLFxuICAgICdDT01QTEVUSU9OJyxcbiAgICAnQ09ORElUSU9OJyxcbiAgICAnQ09OTkVDVCcsXG4gICAgJ0NPTk5FQ1RJT04nLFxuICAgICdDT05TVFJBSU5UUycsXG4gICAgJ0NPTlNUUlVDVE9SJyxcbiAgICAnQ09SUicsXG4gICAgJ0NPUlJFU1BPTkRJTkcnLFxuICAgICdDT1ZBUl9QT1AnLFxuICAgICdDT1ZBUl9TQU1QJyxcbiAgICAnQ1VCRScsXG4gICAgJ0NVTUVfRElTVCcsXG4gICAgJ0NVUlJFTlRfQ0FUQUxPRycsXG4gICAgJ0NVUlJFTlRfREVGQVVMVF9UUkFOU0ZPUk1fR1JPVVAnLFxuICAgICdDVVJSRU5UX1BBVEgnLFxuICAgICdDVVJSRU5UX1JPTEUnLFxuICAgICdDVVJSRU5UX1NDSEVNQScsXG4gICAgJ0NVUlJFTlRfVFJBTlNGT1JNX0dST1VQX0ZPUl9UWVBFJyxcbiAgICAnQ1lDTEUnLFxuICAgICdEQVRBJyxcbiAgICAnREFURScsXG4gICAgJ0RBWScsXG4gICAgJ0RFQycsXG4gICAgJ0RFQ0lNQUwnLFxuICAgICdERUZFUlJBQkxFJyxcbiAgICAnREVGRVJSRUQnLFxuICAgICdERVBUSCcsXG4gICAgJ0RFUkVGJyxcbiAgICAnREVTQ1JJQkUnLFxuICAgICdERVNDUklQVE9SJyxcbiAgICAnREVTVFJPWScsXG4gICAgJ0RFU1RSVUNUT1InLFxuICAgICdERVRFUk1JTklTVElDJyxcbiAgICAnRElBR05PU1RJQ1MnLFxuICAgICdESUNUSU9OQVJZJyxcbiAgICAnRElTQ09OTkVDVCcsXG4gICAgJ0RPTUFJTicsXG4gICAgJ0RZTkFNSUMnLFxuICAgICdFQUNIJyxcbiAgICAnRUxFTUVOVCcsXG4gICAgJ0VORC1FWEVDJyxcbiAgICAnRVFVQUxTJyxcbiAgICAnRVZFUlknLFxuICAgICdGQUxTRScsXG4gICAgJ0ZJTFRFUicsXG4gICAgJ0ZJUlNUJyxcbiAgICAnRkxPQVQnLFxuICAgICdGT1VORCcsXG4gICAgJ0ZSRUUnLFxuICAgICdGVUxMVEVYVFRBQkxFJyxcbiAgICAnRlVTSU9OJyxcbiAgICAnR0VORVJBTCcsXG4gICAgJ0dFVCcsXG4gICAgJ0dMT0JBTCcsXG4gICAgJ0dPJyxcbiAgICAnR1JPVVBJTkcnLFxuICAgICdIT0xEJyxcbiAgICAnSE9TVCcsXG4gICAgJ0hPVVInLFxuICAgICdJR05PUkUnLFxuICAgICdJTU1FRElBVEUnLFxuICAgICdJTkRJQ0FUT1InLFxuICAgICdJTklUSUFMSVpFJyxcbiAgICAnSU5JVElBTExZJyxcbiAgICAnSU5PVVQnLFxuICAgICdJTlBVVCcsXG4gICAgJ0lOVCcsXG4gICAgJ0lOVEVHRVInLFxuICAgICdJTlRFUlNFQ1RJT04nLFxuICAgICdJTlRFUlZBTCcsXG4gICAgJ0lTT0xBVElPTicsXG4gICAgJ0lURVJBVEUnLFxuICAgICdMQU5HVUFHRScsXG4gICAgJ0xBUkdFJyxcbiAgICAnTEFTVCcsXG4gICAgJ0xBVEVSQUwnLFxuICAgICdMRUFESU5HJyxcbiAgICAnTEVTUycsXG4gICAgJ0xFVkVMJyxcbiAgICAnTElLRV9SRUdFWCcsXG4gICAgJ0xJTUlUJyxcbiAgICAnTE4nLFxuICAgICdMT0NBTCcsXG4gICAgJ0xPQ0FMVElNRScsXG4gICAgJ0xPQ0FMVElNRVNUQU1QJyxcbiAgICAnTE9DQVRPUicsXG4gICAgJ01BUCcsXG4gICAgJ01BVENIJyxcbiAgICAnTUVNQkVSJyxcbiAgICAnTUVUSE9EJyxcbiAgICAnTUlOVVRFJyxcbiAgICAnTU9EJyxcbiAgICAnTU9ESUZJRVMnLFxuICAgICdNT0RJRlknLFxuICAgICdNT0RVTEUnLFxuICAgICdNT05USCcsXG4gICAgJ01VTFRJU0VUJyxcbiAgICAnTkFNRVMnLFxuICAgICdOQVRVUkFMJyxcbiAgICAnTkNIQVInLFxuICAgICdOQ0xPQicsXG4gICAgJ05FVycsXG4gICAgJ05FWFQnLFxuICAgICdOTycsXG4gICAgJ05PTkUnLFxuICAgICdOT1JNQUxJWkUnLFxuICAgICdOVU1FUklDJyxcbiAgICAnT0JKRUNUJyxcbiAgICAnT0NDVVJSRU5DRVNfUkVHRVgnLFxuICAgICdPTEQnLFxuICAgICdPTkxZJyxcbiAgICAnT1BFUkFUSU9OJyxcbiAgICAnT1JESU5BTElUWScsXG4gICAgJ09VVCcsXG4gICAgJ09VVFBVVCcsXG4gICAgJ09WRVJMQVknLFxuICAgICdQQUQnLFxuICAgICdQQVJBTUVURVInLFxuICAgICdQQVJBTUVURVJTJyxcbiAgICAnUEFSVElBTCcsXG4gICAgJ1BBUlRJVElPTicsXG4gICAgJ1BBVEgnLFxuICAgICdQRVJDRU5USUxFX0NPTlQnLFxuICAgICdQRVJDRU5USUxFX0RJU0MnLFxuICAgICdQRVJDRU5UX1JBTksnLFxuICAgICdQT1NJVElPTl9SRUdFWCcsXG4gICAgJ1BPU1RGSVgnLFxuICAgICdQUkVGSVgnLFxuICAgICdQUkVPUkRFUicsXG4gICAgJ1BSRVBBUkUnLFxuICAgICdQUkVTRVJWRScsXG4gICAgJ1BSSU9SJyxcbiAgICAnUFJJVklMRUdFUycsXG4gICAgJ1JBTkdFJyxcbiAgICAnUkVBRFMnLFxuICAgICdSRUFMJyxcbiAgICAnUkVDVVJTSVZFJyxcbiAgICAnUkVGJyxcbiAgICAnUkVGRVJFTkNJTkcnLFxuICAgICdSRUdSX0FWR1gnLFxuICAgICdSRUdSX0FWR1knLFxuICAgICdSRUdSX0NPVU5UJyxcbiAgICAnUkVHUl9JTlRFUkNFUFQnLFxuICAgICdSRUdSX1IyJyxcbiAgICAnUkVHUl9TTE9QRScsXG4gICAgJ1JFR1JfU1hYJyxcbiAgICAnUkVHUl9TWFknLFxuICAgICdSRUdSX1NZWScsXG4gICAgJ1JFTEFUSVZFJyxcbiAgICAnUkVMRUFTRScsXG4gICAgJ1JFU1VMVCcsXG4gICAgJ1JFVFVSTlMnLFxuICAgICdST0xFJyxcbiAgICAnUk9MTFVQJyxcbiAgICAnUk9VVElORScsXG4gICAgJ1JPVycsXG4gICAgJ1JPV1MnLFxuICAgICdTQVZFUE9JTlQnLFxuICAgICdTQ09QRScsXG4gICAgJ1NDUk9MTCcsXG4gICAgJ1NFQVJDSCcsXG4gICAgJ1NFQ09ORCcsXG4gICAgJ1NFQ1RJT04nLFxuICAgICdTRU5TSVRJVkUnLFxuICAgICdTRVFVRU5DRScsXG4gICAgJ1NFU1NJT04nLFxuICAgICdTRVRTJyxcbiAgICAnU0lNSUxBUicsXG4gICAgJ1NJWkUnLFxuICAgICdTTUFMTElOVCcsXG4gICAgJ1NQQUNFJyxcbiAgICAnU1BFQ0lGSUMnLFxuICAgICdTUEVDSUZJQ1RZUEUnLFxuICAgICdTUUwnLFxuICAgICdTUUxFWENFUFRJT04nLFxuICAgICdTUUxTVEFURScsXG4gICAgJ1NRTFdBUk5JTkcnLFxuICAgICdTVEFSVCcsXG4gICAgJ1NUQVRFJyxcbiAgICAnU1RBVEVNRU5UJyxcbiAgICAnU1RBVElDJyxcbiAgICAnU1REREVWX1BPUCcsXG4gICAgJ1NURERFVl9TQU1QJyxcbiAgICAnU1RSVUNUVVJFJyxcbiAgICAnU1VCTVVMVElTRVQnLFxuICAgICdTVUJTVFJJTkdfUkVHRVgnLFxuICAgICdTWU1NRVRSSUMnLFxuICAgICdTWVNURU0nLFxuICAgICdURU1QT1JBUlknLFxuICAgICdURVJNSU5BVEUnLFxuICAgICdUSEFOJyxcbiAgICAnVElNRScsXG4gICAgJ1RJTUVTVEFNUCcsXG4gICAgJ1RJTUVaT05FX0hPVVInLFxuICAgICdUSU1FWk9ORV9NSU5VVEUnLFxuICAgICdUUkFJTElORycsXG4gICAgJ1RSQU5TTEFURV9SRUdFWCcsXG4gICAgJ1RSQU5TTEFUSU9OJyxcbiAgICAnVFJFQVQnLFxuICAgICdUUlVFJyxcbiAgICAnVUVTQ0FQRScsXG4gICAgJ1VOREVSJyxcbiAgICAnVU5LTk9XTicsXG4gICAgJ1VOTkVTVCcsXG4gICAgJ1VTQUdFJyxcbiAgICAnVVNJTkcnLFxuICAgICdWQUxVRScsXG4gICAgJ1ZBUkNIQVInLFxuICAgICdWQVJJQUJMRScsXG4gICAgJ1ZBUl9QT1AnLFxuICAgICdWQVJfU0FNUCcsXG4gICAgJ1dIRU5FVkVSJyxcbiAgICAnV0lEVEhfQlVDS0VUJyxcbiAgICAnV0lORE9XJyxcbiAgICAnV0lUSElOJyxcbiAgICAnV0lUSE9VVCcsXG4gICAgJ1dPUksnLFxuICAgICdXUklURScsXG4gICAgJ1hNTEFHRycsXG4gICAgJ1hNTEFUVFJJQlVURVMnLFxuICAgICdYTUxCSU5BUlknLFxuICAgICdYTUxDQVNUJyxcbiAgICAnWE1MQ09NTUVOVCcsXG4gICAgJ1hNTENPTkNBVCcsXG4gICAgJ1hNTERPQ1VNRU5UJyxcbiAgICAnWE1MRUxFTUVOVCcsXG4gICAgJ1hNTEVYSVNUUycsXG4gICAgJ1hNTEZPUkVTVCcsXG4gICAgJ1hNTElURVJBVEUnLFxuICAgICdYTUxOQU1FU1BBQ0VTJyxcbiAgICAnWE1MUEFSU0UnLFxuICAgICdYTUxQSScsXG4gICAgJ1hNTFFVRVJZJyxcbiAgICAnWE1MU0VSSUFMSVpFJyxcbiAgICAnWE1MVEFCTEUnLFxuICAgICdYTUxURVhUJyxcbiAgICAnWE1MVkFMSURBVEUnLFxuICAgICdZRUFSJyxcbiAgICAnWk9ORScsXG4gIF0sXG59O1xuXG4vKipcbiAqIFByaW9yaXR5IDEgKGZpcnN0KVxuICoga2V5d29yZHMgdGhhdCBiZWdpbiBhIG5ldyBzdGF0ZW1lbnRcbiAqIHdpbGwgYmVnaW4gbmV3IGluZGVudGVkIGJsb2NrXG4gKi9cbi8vIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3NxbC90LXNxbC9zdGF0ZW1lbnRzL3N0YXRlbWVudHM/dmlldz1zcWwtc2VydmVyLXZlcjE1XG5jb25zdCByZXNlcnZlZENvbW1hbmRzID0gW1xuICAnQUREIFNFTlNJVElWSVRZIENMQVNTSUZJQ0FUSU9OJyxcbiAgJ0FERCBTSUdOQVRVUkUnLFxuICAnQUdHUkVHQVRFJyxcbiAgJ0FOU0lfREVGQVVMVFMnLFxuICAnQU5TSV9OVUxMUycsXG4gICdBTlNJX05VTExfREZMVF9PRkYnLFxuICAnQU5TSV9OVUxMX0RGTFRfT04nLFxuICAnQU5TSV9QQURESU5HJyxcbiAgJ0FOU0lfV0FSTklOR1MnLFxuICAnQVBQTElDQVRJT04gUk9MRScsXG4gICdBUklUSEFCT1JUJyxcbiAgJ0FSSVRISUdOT1JFJyxcbiAgJ0FTU0VNQkxZJyxcbiAgJ0FTWU1NRVRSSUMgS0VZJyxcbiAgJ0FVVEhPUklaQVRJT04nLFxuICAnQVZBSUxBQklMSVRZIEdST1VQJyxcbiAgJ0JBQ0tVUCcsXG4gICdCQUNLVVAgQ0VSVElGSUNBVEUnLFxuICAnQkFDS1VQIE1BU1RFUiBLRVknLFxuICAnQkFDS1VQIFNFUlZJQ0UgTUFTVEVSIEtFWScsXG4gICdCRUdJTiBDT05WRVJTQVRJT04gVElNRVInLFxuICAnQkVHSU4gRElBTE9HIENPTlZFUlNBVElPTicsXG4gICdCUk9LRVIgUFJJT1JJVFknLFxuICAnQlVMSyBJTlNFUlQnLFxuICAnQ0VSVElGSUNBVEUnLFxuICAnQ0xPU0UgTUFTVEVSIEtFWScsXG4gICdDTE9TRSBTWU1NRVRSSUMgS0VZJyxcbiAgJ0NPTExBVEUnLFxuICAnQ09MVU1OIEVOQ1JZUFRJT04gS0VZJyxcbiAgJ0NPTFVNTiBNQVNURVIgS0VZJyxcbiAgJ0NPTFVNTlNUT1JFIElOREVYJyxcbiAgJ0NPTkNBVF9OVUxMX1lJRUxEU19OVUxMJyxcbiAgJ0NPTlRFWFRfSU5GTycsXG4gICdDT05UUkFDVCcsXG4gICdDUkVERU5USUFMJyxcbiAgJ0NSWVBUT0dSQVBISUMgUFJPVklERVInLFxuICAnQ1VSU09SX0NMT1NFX09OX0NPTU1JVCcsXG4gICdEQVRBQkFTRScsXG4gICdEQVRBQkFTRSBBVURJVCBTUEVDSUZJQ0FUSU9OJyxcbiAgJ0RBVEFCQVNFIEVOQ1JZUFRJT04gS0VZJyxcbiAgJ0RBVEFCQVNFIEhBRFInLFxuICAnREFUQUJBU0UgU0NPUEVEIENPTkZJR1VSQVRJT04nLFxuICAnREFUQUJBU0UgU0NPUEVEIENSRURFTlRJQUwnLFxuICAnREFUQUJBU0UgU0VUJyxcbiAgJ0RBVEVGSVJTVCcsXG4gICdEQVRFRk9STUFUJyxcbiAgJ0RFQURMT0NLX1BSSU9SSVRZJyxcbiAgJ0RFRkFVTFQnLFxuICAnREVMRVRFJyxcbiAgJ0RFTlknLFxuICAnREVOWSBYTUwnLFxuICAnRElTQUJMRSBUUklHR0VSJyxcbiAgJ0VOQUJMRSBUUklHR0VSJyxcbiAgJ0VORCBDT05WRVJTQVRJT04nLFxuICAnRU5EUE9JTlQnLFxuICAnRVZFTlQgTk9USUZJQ0FUSU9OJyxcbiAgJ0VWRU5UIFNFU1NJT04nLFxuICAnRVhFQ1VURSBBUycsXG4gICdFWFRFUk5BTCBEQVRBIFNPVVJDRScsXG4gICdFWFRFUk5BTCBGSUxFIEZPUk1BVCcsXG4gICdFWFRFUk5BTCBMQU5HVUFHRScsXG4gICdFWFRFUk5BTCBMSUJSQVJZJyxcbiAgJ0VYVEVSTkFMIFJFU09VUkNFIFBPT0wnLFxuICAnRVhURVJOQUwgVEFCTEUnLFxuICAnRklQU19GTEFHR0VSJyxcbiAgJ0ZNVE9OTFknLFxuICAnRk9SQ0VQTEFOJyxcbiAgJ0ZVTExURVhUIENBVEFMT0cnLFxuICAnRlVMTFRFWFQgSU5ERVgnLFxuICAnRlVMTFRFWFQgU1RPUExJU1QnLFxuICAnRlVOQ1RJT04nLFxuICAnR0VUIENPTlZFUlNBVElPTiBHUk9VUCcsXG4gICdHRVRfVFJBTlNNSVNTSU9OX1NUQVRVUycsXG4gICdHUkFOVCcsXG4gICdHUkFOVCBYTUwnLFxuICAnSURFTlRJVFlfSU5TRVJUJyxcbiAgJ0lNUExJQ0lUX1RSQU5TQUNUSU9OUycsXG4gICdJTkRFWCcsXG4gICdJTlNFUlQnLFxuICAnTEFOR1VBR0UnLFxuICAnTE9DS19USU1FT1VUJyxcbiAgJ0xPR0lOJyxcbiAgJ01BU1RFUiBLRVknLFxuICAnTUVSR0UnLFxuICAnTUVTU0FHRSBUWVBFJyxcbiAgJ01PVkUgQ09OVkVSU0FUSU9OJyxcbiAgJ05PQ09VTlQnLFxuICAnTk9FWEVDJyxcbiAgJ05VTUVSSUNfUk9VTkRBQk9SVCcsXG4gICdPRkZTRVRTJyxcbiAgJ09QRU4gTUFTVEVSIEtFWScsXG4gICdPUEVOIFNZTU1FVFJJQyBLRVknLFxuICAnUEFSU0VPTkxZJyxcbiAgJ1BBUlRJVElPTiBGVU5DVElPTicsXG4gICdQQVJUSVRJT04gU0NIRU1FJyxcbiAgJ1BST0NFRFVSRScsXG4gICdRVUVSWV9HT1ZFUk5PUl9DT1NUX0xJTUlUJyxcbiAgJ1FVRVVFJyxcbiAgJ1FVT1RFRF9JREVOVElGSUVSJyxcbiAgJ1JFQ0VJVkUnLFxuICAnUkVNT1RFIFNFUlZJQ0UgQklORElORycsXG4gICdSRU1PVEVfUFJPQ19UUkFOU0FDVElPTlMnLFxuICAnUkVTT1VSQ0UgR09WRVJOT1InLFxuICAnUkVTT1VSQ0UgUE9PTCcsXG4gICdSRVNUT1JFJyxcbiAgJ1JFU1RPUkUgRklMRUxJU1RPTkxZJyxcbiAgJ1JFU1RPUkUgSEVBREVST05MWScsXG4gICdSRVNUT1JFIExBQkVMT05MWScsXG4gICdSRVNUT1JFIE1BU1RFUiBLRVknLFxuICAnUkVTVE9SRSBSRVdJTkRPTkxZJyxcbiAgJ1JFU1RPUkUgU0VSVklDRSBNQVNURVIgS0VZJyxcbiAgJ1JFU1RPUkUgVkVSSUZZT05MWScsXG4gICdSRVZFUlQnLFxuICAnUkVWT0tFJyxcbiAgJ1JFVk9LRSBYTUwnLFxuICAnUk9MRScsXG4gICdST1VURScsXG4gICdST1dDT1VOVCcsXG4gICdSVUxFJyxcbiAgJ1NDSEVNQScsXG4gICdTRUFSQ0ggUFJPUEVSVFkgTElTVCcsXG4gICdTRUNVUklUWSBQT0xJQ1knLFxuICAnU0VMRUNUSVZFIFhNTCBJTkRFWCcsXG4gICdTRU5EJyxcbiAgJ1NFTlNJVElWSVRZIENMQVNTSUZJQ0FUSU9OJyxcbiAgJ1NFUVVFTkNFJyxcbiAgJ1NFUlZFUiBBVURJVCcsXG4gICdTRVJWRVIgQVVESVQgU1BFQ0lGSUNBVElPTicsXG4gICdTRVJWRVIgQ09ORklHVVJBVElPTicsXG4gICdTRVJWRVIgUk9MRScsXG4gICdTRVJWSUNFJyxcbiAgJ1NFUlZJQ0UgTUFTVEVSIEtFWScsXG4gICdTRVQnLFxuICAnU0VUVVNFUicsXG4gICdTSE9XUExBTl9BTEwnLFxuICAnU0hPV1BMQU5fVEVYVCcsXG4gICdTSE9XUExBTl9YTUwnLFxuICAnU0lHTkFUVVJFJyxcbiAgJ1NQQVRJQUwgSU5ERVgnLFxuICAnU1RBVElTVElDUycsXG4gICdTVEFUSVNUSUNTIElPJyxcbiAgJ1NUQVRJU1RJQ1MgUFJPRklMRScsXG4gICdTVEFUSVNUSUNTIFRJTUUnLFxuICAnU1RBVElTVElDUyBYTUwnLFxuICAnU1lNTUVUUklDIEtFWScsXG4gICdTWU5PTllNJyxcbiAgJ1RBQkxFJyxcbiAgJ1RBQkxFIElERU5USVRZJyxcbiAgJ1RFWFRTSVpFJyxcbiAgJ1RSQU5TQUNUSU9OIElTT0xBVElPTiBMRVZFTCcsXG4gICdUUklHR0VSJyxcbiAgJ1RSVU5DQVRFIFRBQkxFJyxcbiAgJ1RZUEUnLFxuICAnVVBEQVRFJyxcbiAgJ1VQREFURSBTVEFUSVNUSUNTJyxcbiAgJ1VTRVInLFxuICAnVklFVycsXG4gICdXT1JLTE9BRCBHUk9VUCcsXG4gICdYQUNUX0FCT1JUJyxcbiAgJ1hNTCBJTkRFWCcsXG4gICdYTUwgU0NIRU1BIENPTExFQ1RJT04nLFxuICAvLyBvdGhlclxuICAnQUxURVIgQ09MVU1OJyxcbiAgJ0FMVEVSIFRBQkxFJyxcbiAgJ0NSRUFURSBUQUJMRScsXG4gICdGUk9NJyxcbiAgJ0dST1VQIEJZJyxcbiAgJ0hBVklORycsXG4gICdJTlNFUlQgSU5UTycsIC8vIHZlcmlmeVxuICAnRFJPUCBUQUJMRScsIC8vIHZlcmlmeVxuICAnU0VUIFNDSEVNQScsIC8vIHZlcmlmeVxuICAnTElNSVQnLFxuICAnT0ZGU0VUJyxcbiAgJ09SREVSIEJZJyxcbiAgJ1NFTEVDVCcsXG4gICdWQUxVRVMnLFxuICAnV0hFUkUnLFxuICAnV0lUSCcsXG5dO1xuXG4vKipcbiAqIFByaW9yaXR5IDJcbiAqIGNvbW1hbmRzIHRoYXQgb3BlcmF0ZSBvbiB0d28gdGFibGVzIG9yIHN1YnF1ZXJpZXNcbiAqIHR3byBtYWluIGNhdGVnb3JpZXM6IGpvaW5zIGFuZCBib29sZWFuIHNldCBvcGVyYXRvcnNcbiAqL1xuY29uc3QgcmVzZXJ2ZWRCaW5hcnlDb21tYW5kcyA9IFtcbiAgLy8gc2V0IGJvb2xlYW5zXG4gICdJTlRFUlNFQ1QnLFxuICAnSU5URVJTRUNUIEFMTCcsXG4gICdJTlRFUlNFQ1QgRElTVElOQ1QnLFxuICAnVU5JT04nLFxuICAnVU5JT04gQUxMJyxcbiAgJ1VOSU9OIERJU1RJTkNUJyxcbiAgJ0VYQ0VQVCcsXG4gICdFWENFUFQgQUxMJyxcbiAgJ0VYQ0VQVCBESVNUSU5DVCcsXG4gICdNSU5VUycsXG4gICdNSU5VUyBBTEwnLFxuICAnTUlOVVMgRElTVElOQ1QnLFxuICAvLyBqb2luc1xuICAnSk9JTicsXG4gICdJTk5FUiBKT0lOJyxcbiAgJ0xFRlQgSk9JTicsXG4gICdMRUZUIE9VVEVSIEpPSU4nLFxuICAnUklHSFQgSk9JTicsXG4gICdSSUdIVCBPVVRFUiBKT0lOJyxcbiAgJ0ZVTEwgSk9JTicsXG4gICdGVUxMIE9VVEVSIEpPSU4nLFxuICAnQ1JPU1MgSk9JTicsXG5dO1xuXG4vKipcbiAqIFByaW9yaXR5IDNcbiAqIGtleXdvcmRzIHRoYXQgZm9sbG93IGEgcHJldmlvdXMgU3RhdGVtZW50LCBtdXN0IGJlIGF0dGFjaGVkIHRvIHN1YnNlcXVlbnQgZGF0YVxuICogY2FuIGJlIGZ1bGx5IGlubGluZSBvciBvbiBuZXdsaW5lIHdpdGggb3B0aW9uYWwgaW5kZW50XG4gKi9cbmNvbnN0IHJlc2VydmVkRGVwZW5kZW50Q2xhdXNlcyA9IFsnV0hFTicsICdFTFNFJ107XG5cbi8vIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3NxbC90LXNxbC9sYW5ndWFnZS1yZWZlcmVuY2U/dmlldz1zcWwtc2VydmVyLXZlcjE1XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUU3FsRm9ybWF0dGVyIGV4dGVuZHMgRm9ybWF0dGVyIHtcbiAgc3RhdGljIHJlc2VydmVkQ29tbWFuZHMgPSByZXNlcnZlZENvbW1hbmRzO1xuICBzdGF0aWMgcmVzZXJ2ZWRCaW5hcnlDb21tYW5kcyA9IHJlc2VydmVkQmluYXJ5Q29tbWFuZHM7XG4gIHN0YXRpYyByZXNlcnZlZERlcGVuZGVudENsYXVzZXMgPSByZXNlcnZlZERlcGVuZGVudENsYXVzZXM7XG4gIHN0YXRpYyByZXNlcnZlZEpvaW5Db25kaXRpb25zID0gWydPTicsICdVU0lORyddO1xuICBzdGF0aWMgcmVzZXJ2ZWRMb2dpY2FsT3BlcmF0b3JzID0gWydBTkQnLCAnT1InXTtcbiAgc3RhdGljIHJlc2VydmVkS2V5d29yZHMgPSBkZWR1cGUoW1xuICAgIC4uLk9iamVjdC52YWx1ZXMocmVzZXJ2ZWRGdW5jdGlvbnMpLnJlZHVjZSgoYWNjLCBhcnIpID0+IFsuLi5hY2MsIC4uLmFycl0sIFtdKSxcbiAgICAuLi5PYmplY3QudmFsdWVzKHJlc2VydmVkS2V5d29yZHMpLnJlZHVjZSgoYWNjLCBhcnIpID0+IFsuLi5hY2MsIC4uLmFycl0sIFtdKSxcbiAgXSk7XG4gIHN0YXRpYyBzdHJpbmdUeXBlczogU3RyaW5nUGF0dGVyblR5cGVbXSA9IFtgXCJcImAsIFwiTicnXCIsIFwiJydcIiwgJ1tdJywgJ2BgJ107XG4gIHN0YXRpYyBibG9ja1N0YXJ0ID0gWycoJywgJ0NBU0UnXTtcbiAgc3RhdGljIGJsb2NrRW5kID0gWycpJywgJ0VORCddO1xuICBzdGF0aWMgaW5kZXhlZFBsYWNlaG9sZGVyVHlwZXMgPSBbXTtcbiAgc3RhdGljIG5hbWVkUGxhY2Vob2xkZXJUeXBlcyA9IFsnQCddO1xuICBzdGF0aWMgbGluZUNvbW1lbnRUeXBlcyA9IFsnLS0nXTtcbiAgc3RhdGljIHNwZWNpYWxXb3JkQ2hhcnMgPSB7IGFueTogJyNAJyB9O1xuICBzdGF0aWMgb3BlcmF0b3JzID0gWychPCcsICchPicsICcrPScsICctPScsICcqPScsICcvPScsICclPScsICd8PScsICcmPScsICdePScsICc6OiddO1xuXG4gIHRva2VuaXplcigpIHtcbiAgICByZXR1cm4gbmV3IFRva2VuaXplcih7XG4gICAgICByZXNlcnZlZENvbW1hbmRzOiBUU3FsRm9ybWF0dGVyLnJlc2VydmVkQ29tbWFuZHMsXG4gICAgICByZXNlcnZlZEJpbmFyeUNvbW1hbmRzOiBUU3FsRm9ybWF0dGVyLnJlc2VydmVkQmluYXJ5Q29tbWFuZHMsXG4gICAgICByZXNlcnZlZERlcGVuZGVudENsYXVzZXM6IFRTcWxGb3JtYXR0ZXIucmVzZXJ2ZWREZXBlbmRlbnRDbGF1c2VzLFxuICAgICAgcmVzZXJ2ZWRKb2luQ29uZGl0aW9uczogVFNxbEZvcm1hdHRlci5yZXNlcnZlZEpvaW5Db25kaXRpb25zLFxuICAgICAgcmVzZXJ2ZWRMb2dpY2FsT3BlcmF0b3JzOiBUU3FsRm9ybWF0dGVyLnJlc2VydmVkTG9naWNhbE9wZXJhdG9ycyxcbiAgICAgIHJlc2VydmVkS2V5d29yZHM6IFRTcWxGb3JtYXR0ZXIucmVzZXJ2ZWRLZXl3b3JkcyxcbiAgICAgIHN0cmluZ1R5cGVzOiBUU3FsRm9ybWF0dGVyLnN0cmluZ1R5cGVzLFxuICAgICAgYmxvY2tTdGFydDogVFNxbEZvcm1hdHRlci5ibG9ja1N0YXJ0LFxuICAgICAgYmxvY2tFbmQ6IFRTcWxGb3JtYXR0ZXIuYmxvY2tFbmQsXG4gICAgICBpbmRleGVkUGxhY2Vob2xkZXJUeXBlczogVFNxbEZvcm1hdHRlci5pbmRleGVkUGxhY2Vob2xkZXJUeXBlcyxcbiAgICAgIG5hbWVkUGxhY2Vob2xkZXJUeXBlczogVFNxbEZvcm1hdHRlci5uYW1lZFBsYWNlaG9sZGVyVHlwZXMsXG4gICAgICBsaW5lQ29tbWVudFR5cGVzOiBUU3FsRm9ybWF0dGVyLmxpbmVDb21tZW50VHlwZXMsXG4gICAgICBzcGVjaWFsV29yZENoYXJzOiBUU3FsRm9ybWF0dGVyLnNwZWNpYWxXb3JkQ2hhcnMsXG4gICAgICBvcGVyYXRvcnM6IFRTcWxGb3JtYXR0ZXIub3BlcmF0b3JzLFxuICAgICAgLy8gVE9ETzogU3VwcG9ydCBmb3IgbW9uZXkgY29uc3RhbnRzXG4gICAgfSk7XG4gIH1cbn1cbiIsImltcG9ydCBCaWdRdWVyeUZvcm1hdHRlciBmcm9tICcuL2xhbmd1YWdlcy9iaWdxdWVyeS5mb3JtYXR0ZXInO1xuaW1wb3J0IERiMkZvcm1hdHRlciBmcm9tICcuL2xhbmd1YWdlcy9kYjIuZm9ybWF0dGVyJztcbmltcG9ydCBIaXZlRm9ybWF0dGVyIGZyb20gJy4vbGFuZ3VhZ2VzL2hpdmUuZm9ybWF0dGVyJztcbmltcG9ydCBNYXJpYURiRm9ybWF0dGVyIGZyb20gJy4vbGFuZ3VhZ2VzL21hcmlhZGIuZm9ybWF0dGVyJztcbmltcG9ydCBNeVNxbEZvcm1hdHRlciBmcm9tICcuL2xhbmd1YWdlcy9teXNxbC5mb3JtYXR0ZXInO1xuaW1wb3J0IE4xcWxGb3JtYXR0ZXIgZnJvbSAnLi9sYW5ndWFnZXMvbjFxbC5mb3JtYXR0ZXInO1xuaW1wb3J0IFBsU3FsRm9ybWF0dGVyIGZyb20gJy4vbGFuZ3VhZ2VzL3Bsc3FsLmZvcm1hdHRlcic7XG5pbXBvcnQgUG9zdGdyZVNxbEZvcm1hdHRlciBmcm9tICcuL2xhbmd1YWdlcy9wb3N0Z3Jlc3FsLmZvcm1hdHRlcic7XG5pbXBvcnQgUmVkc2hpZnRGb3JtYXR0ZXIgZnJvbSAnLi9sYW5ndWFnZXMvcmVkc2hpZnQuZm9ybWF0dGVyJztcbmltcG9ydCBTcGFya1NxbEZvcm1hdHRlciBmcm9tICcuL2xhbmd1YWdlcy9zcGFya3NxbC5mb3JtYXR0ZXInO1xuaW1wb3J0IFN0YW5kYXJkU3FsRm9ybWF0dGVyIGZyb20gJy4vbGFuZ3VhZ2VzL3N0YW5kYXJkc3FsLmZvcm1hdHRlcic7XG5pbXBvcnQgVFNxbEZvcm1hdHRlciBmcm9tICcuL2xhbmd1YWdlcy90c3FsLmZvcm1hdHRlcic7XG5cbmltcG9ydCB7IEZvcm1hdE9wdGlvbnMgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGlzTnVtYmVyIH0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBmb3JtYXR0ZXJzID0ge1xuICBiaWdxdWVyeTogQmlnUXVlcnlGb3JtYXR0ZXIsXG4gIGRiMjogRGIyRm9ybWF0dGVyLFxuICBoaXZlOiBIaXZlRm9ybWF0dGVyLFxuICBtYXJpYWRiOiBNYXJpYURiRm9ybWF0dGVyLFxuICBteXNxbDogTXlTcWxGb3JtYXR0ZXIsXG4gIG4xcWw6IE4xcWxGb3JtYXR0ZXIsXG4gIHBsc3FsOiBQbFNxbEZvcm1hdHRlcixcbiAgcG9zdGdyZXNxbDogUG9zdGdyZVNxbEZvcm1hdHRlcixcbiAgcmVkc2hpZnQ6IFJlZHNoaWZ0Rm9ybWF0dGVyLFxuICBzcGFyazogU3BhcmtTcWxGb3JtYXR0ZXIsXG4gIHNxbDogU3RhbmRhcmRTcWxGb3JtYXR0ZXIsXG4gIHRzcWw6IFRTcWxGb3JtYXR0ZXIsXG59O1xuZXhwb3J0IHR5cGUgU3FsTGFuZ3VhZ2UgPSBrZXlvZiB0eXBlb2YgZm9ybWF0dGVycztcbmV4cG9ydCBjb25zdCBzdXBwb3J0ZWREaWFsZWN0cyA9IE9iamVjdC5rZXlzKGZvcm1hdHRlcnMpO1xuXG5leHBvcnQgdHlwZSBGb3JtYXRGbk9wdGlvbnMgPSBGb3JtYXRPcHRpb25zICYgeyBsYW5ndWFnZTogU3FsTGFuZ3VhZ2UgfTtcblxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IEZvcm1hdEZuT3B0aW9ucyA9IHtcbiAgbGFuZ3VhZ2U6ICdzcWwnLFxuICB0YWJXaWR0aDogMixcbiAgdXNlVGFiczogZmFsc2UsXG4gIGtleXdvcmRDYXNlOiAncHJlc2VydmUnLFxuICBpbmRlbnRTdHlsZTogJ3N0YW5kYXJkJyxcbiAgbXVsdGlsaW5lTGlzdHM6ICdhbHdheXMnLFxuICBsb2dpY2FsT3BlcmF0b3JOZXdsaW5lOiAnYmVmb3JlJyxcbiAgYWxpYXNBczogJ3ByZXNlcnZlJyxcbiAgdGFidWxhdGVBbGlhczogZmFsc2UsXG4gIGNvbW1hUG9zaXRpb246ICdhZnRlcicsXG4gIG5ld2xpbmVCZWZvcmVPcGVuUGFyZW46IHRydWUsXG4gIG5ld2xpbmVCZWZvcmVDbG9zZVBhcmVuOiB0cnVlLFxuICBleHByZXNzaW9uV2lkdGg6IDUwLFxuICBsaW5lc0JldHdlZW5RdWVyaWVzOiAxLFxuICBkZW5zZU9wZXJhdG9yczogZmFsc2UsXG4gIG5ld2xpbmVCZWZvcmVTZW1pY29sb246IGZhbHNlLFxufTtcblxuLyoqXG4gKiBGb3JtYXQgd2hpdGVzcGFjZSBpbiBhIHF1ZXJ5IHRvIG1ha2UgaXQgZWFzaWVyIHRvIHJlYWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHF1ZXJ5IC0gaW5wdXQgU1FMIHF1ZXJ5IHN0cmluZ1xuICogQHBhcmFtIHtGb3JtYXRPcHRpb25zfSBjZmcgQ29uZmlndXJhdGlvbiBvcHRpb25zIChzZWUgZG9jcyBpbiBSRUFETUUpXG4gKiBAcmV0dXJuIHtzdHJpbmd9IGZvcm1hdHRlZCBxdWVyeVxuICovXG5leHBvcnQgY29uc3QgZm9ybWF0ID0gKHF1ZXJ5OiBzdHJpbmcsIGNmZzogUGFydGlhbDxGb3JtYXRGbk9wdGlvbnM+ID0ge30pOiBzdHJpbmcgPT4ge1xuICBpZiAodHlwZW9mIHF1ZXJ5ICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBxdWVyeSBhcmd1bWVudC4gRXhwZWN0ZWQgc3RyaW5nLCBpbnN0ZWFkIGdvdCAnICsgdHlwZW9mIHF1ZXJ5KTtcbiAgfVxuXG4gIGNvbnN0IG9wdGlvbnMgPSB2YWxpZGF0ZUNvbmZpZyh7XG4gICAgLi4uZGVmYXVsdE9wdGlvbnMsXG4gICAgLi4uY2ZnLFxuICB9KTtcblxuICBjb25zdCBGb3JtYXR0ZXIgPSBmb3JtYXR0ZXJzW29wdGlvbnMubGFuZ3VhZ2VdO1xuICByZXR1cm4gbmV3IEZvcm1hdHRlcihvcHRpb25zKS5mb3JtYXQocXVlcnkpO1xufTtcblxuZXhwb3J0IGNsYXNzIENvbmZpZ0Vycm9yIGV4dGVuZHMgRXJyb3Ige31cblxuZnVuY3Rpb24gdmFsaWRhdGVDb25maWcoY2ZnOiBGb3JtYXRGbk9wdGlvbnMpOiBGb3JtYXRGbk9wdGlvbnMge1xuICBpZiAoIXN1cHBvcnRlZERpYWxlY3RzLmluY2x1ZGVzKGNmZy5sYW5ndWFnZSkpIHtcbiAgICB0aHJvdyBuZXcgQ29uZmlnRXJyb3IoYFVuc3VwcG9ydGVkIFNRTCBkaWFsZWN0OiAke2NmZy5sYW5ndWFnZX1gKTtcbiAgfVxuXG4gIGlmIChpc051bWJlcihjZmcubXVsdGlsaW5lTGlzdHMpICYmIGNmZy5tdWx0aWxpbmVMaXN0cyA8PSAwKSB7XG4gICAgdGhyb3cgbmV3IENvbmZpZ0Vycm9yKCdtdWx0aWxpbmVMaXN0cyBjb25maWcgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlci4nKTtcbiAgfVxuXG4gIGlmIChjZmcuZXhwcmVzc2lvbldpZHRoIDw9IDApIHtcbiAgICB0aHJvdyBuZXcgQ29uZmlnRXJyb3IoXG4gICAgICBgZXhwcmVzc2lvbldpZHRoIGNvbmZpZyBtdXN0IGJlIHBvc2l0aXZlIG51bWJlci4gUmVjZWl2ZWQgJHtjZmcuZXhwcmVzc2lvbldpZHRofSBpbnN0ZWFkLmBcbiAgICApO1xuICB9XG5cbiAgaWYgKGNmZy5jb21tYVBvc2l0aW9uID09PSAnYmVmb3JlJyAmJiBjZmcudXNlVGFicykge1xuICAgIHRocm93IG5ldyBDb25maWdFcnJvcihcbiAgICAgICdjb21tYVBvc2l0aW9uOiBiZWZvcmUgZG9lcyBub3Qgd29yayB3aGVuIHRhYnMgYXJlIHVzZWQgZm9yIGluZGVudGF0aW9uLidcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGNmZztcbn1cblxuZXhwb3J0IHR5cGUgRm9ybWF0Rm4gPSB0eXBlb2YgZm9ybWF0O1xuIiwiZXhwb3J0IGNvbnN0IGRlZHVwZSA9IChhcnI6IHN0cmluZ1tdKSA9PiBbLi4ubmV3IFNldChhcnIpXTtcblxuLy8gT25seSByZW1vdmVzIHNwYWNlcywgbm90IG5ld2xpbmVzXG5leHBvcnQgY29uc3QgdHJpbVNwYWNlc0VuZCA9IChzdHI6IHN0cmluZykgPT4gc3RyLnJlcGxhY2UoL1sgXFx0XSskL3UsICcnKTtcblxuLy8gTGFzdCBlbGVtZW50IGZyb20gYXJyYXlcbmV4cG9ydCBjb25zdCBsYXN0ID0gPFQgZXh0ZW5kcyBhbnk+KGFycjogVFtdKSA9PiBhcnJbYXJyLmxlbmd0aCAtIDFdO1xuXG4vLyBUcnVlIGFycmF5IGlzIGVtcHR5LCBvciBpdCdzIG5vdCBhbiBhcnJheSBhdCBhbGxcbmV4cG9ydCBjb25zdCBpc0VtcHR5ID0gKGFycjogYW55W10pID0+ICFBcnJheS5pc0FycmF5KGFycikgfHwgYXJyLmxlbmd0aCA9PT0gMDtcblxuLy8gRXNjYXBlcyByZWdleCBzcGVjaWFsIGNoYXJzXG5leHBvcnQgY29uc3QgZXNjYXBlUmVnRXhwID0gKHN0cmluZzogc3RyaW5nKSA9PiBzdHJpbmcucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2d1LCAnXFxcXCQmJyk7XG5cbi8vIFNvcnRzIHN0cmluZ3MgYnkgbGVuZ3RoLCBzbyB0aGF0IGxvbmdlciBvbmVzIGFyZSBmaXJzdFxuLy8gQWxzbyBzb3J0cyBhbHBoYWJldGljYWxseSBhZnRlciBzb3J0aW5nIGJ5IGxlbmd0aC5cbmV4cG9ydCBjb25zdCBzb3J0QnlMZW5ndGhEZXNjID0gKHN0cmluZ3M6IHN0cmluZ1tdKSA9PlxuICBzdHJpbmdzLnNvcnQoKGEsIGIpID0+IGIubGVuZ3RoIC0gYS5sZW5ndGggfHwgYS5sb2NhbGVDb21wYXJlKGIpKTtcblxuLyoqIEdldCBsZW5ndGggb2YgbG9uZ2VzdCBzdHJpbmcgaW4gbGlzdCBvZiBzdHJpbmdzICovXG5leHBvcnQgY29uc3QgbWF4TGVuZ3RoID0gKHN0cmluZ3M6IHN0cmluZ1tdKSA9PlxuICBzdHJpbmdzLnJlZHVjZSgobWF4LCBjdXIpID0+IE1hdGgubWF4KG1heCwgY3VyLmxlbmd0aCksIDApO1xuXG5leHBvcnQgY29uc3QgaXNOdW1iZXIgPSAodmFsdWU6IGFueSk6IHZhbHVlIGlzIG51bWJlciA9PiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInO1xuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCJleHBvcnQgKiBmcm9tICcuL3NxbEZvcm1hdHRlcic7XG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJztcbiJdLCJuYW1lcyI6WyJpc0NvbW1hbmQiLCJpc1Rva2VuIiwiVG9rZW5UeXBlIiwiQWxpYXNBcyIsImFsaWFzQXMiLCJmb3JtYXR0ZXIiLCJ0b2tlbiIsImlzTWlzc2luZ1RhYmxlQWxpYXMiLCJpc01pc3NpbmdTZWxlY3RDb2x1bW5BbGlhcyIsInR5cGUiLCJXT1JEIiwibG9va0JlaGluZCIsInZhbHVlIiwicHJldlRva2VuIiwibmV4dFRva2VuIiwibG9va0FoZWFkIiwiaXNXaXRoaW5TZWxlY3QiLCJFTkQiLCJOVU1CRVIiLCJpc0VkZ2VDYXNlQ1RFIiwiaXNFZGdlQ2FzZUNyZWF0ZVRhYmxlIiwiaXNNaXNzaW5nVHlwZUNhc3RBcyIsIkNBU1QiLCJnZXRQcmV2aW91c1Jlc2VydmVkVG9rZW4iLCJBUyIsIlJFU0VSVkVEX0tFWVdPUkQiLCJXSVRIIiwiVEFCTEUiLCJlbmRzV2l0aCIsImlzUmVtb3ZhYmxlTm9uU2VsZWN0QXMiLCJuIiwidG9rZW5Mb29rQmVoaW5kIiwidG9rZW5Mb29rQWhlYWQiLCJBc1Rva2VuRmFjdG9yeSIsImtleXdvcmRDYXNlIiwidG9rZW5zIiwiZGV0ZWN0ZWRDYXNlIiwiYXV0b0RldGVjdENhc2UiLCJhc1Rva2VucyIsImZpbHRlciIsInVwcGVyQXNUb2tlbnMiLCJsZW5ndGgiLCJhc1Rva2VuVmFsdWUiLCJJbmRlbnRhdGlvbiIsIklubGluZUJsb2NrIiwiUGFyYW1zIiwidHJpbVNwYWNlc0VuZCIsImlzUmVzZXJ2ZWQiLCJFT0ZfVE9LRU4iLCJmb3JtYXRDb21tYVBvc2l0aW9ucyIsImZvcm1hdEFsaWFzUG9zaXRpb25zIiwidG9UYWJ1bGFyVG9rZW4iLCJyZXBsYWNlVGFidWxhclBsYWNlaG9sZGVycyIsIkZvcm1hdHRlciIsImNmZyIsImluZGVudGF0aW9uIiwiaW5kZW50U3RyaW5nIiwiaW5saW5lQmxvY2siLCJleHByZXNzaW9uV2lkdGgiLCJwYXJhbXMiLCJhc1Rva2VuRmFjdG9yeSIsImlzVGFidWxhclN0eWxlIiwicmVwZWF0IiwidXNlVGFicyIsInRhYldpZHRoIiwiRXJyb3IiLCJxdWVyeSIsInRva2VuaXplciIsInRva2VuaXplIiwiZm9ybWF0dGVkUXVlcnkiLCJnZXRGb3JtYXR0ZWRRdWVyeUZyb21Ub2tlbnMiLCJmaW5hbFF1ZXJ5IiwicG9zdEZvcm1hdCIsInJlcGxhY2UiLCJ0cmltRW5kIiwidGFidWxhdGVBbGlhcyIsImNvbW1hUG9zaXRpb24iLCJpbmRleCIsInRva2VuT3ZlcnJpZGUiLCJwcmV2aW91c1Jlc2VydmVkVG9rZW4iLCJSRVNFUlZFRF9KT0lOX0NPTkRJVElPTiIsImluZGVudFN0eWxlIiwiUkVTRVJWRURfQ09NTUFORCIsInByZXZpb3VzQ29tbWFuZFRva2VuIiwiTElORV9DT01NRU5UIiwiZm9ybWF0TGluZUNvbW1lbnQiLCJCTE9DS19DT01NRU5UIiwiZm9ybWF0QmxvY2tDb21tZW50IiwiY3VycmVudE5ld2xpbmUiLCJjaGVja05ld2xpbmUiLCJmb3JtYXRDb21tYW5kIiwiUkVTRVJWRURfQklOQVJZX0NPTU1BTkQiLCJmb3JtYXRCaW5hcnlDb21tYW5kIiwiUkVTRVJWRURfREVQRU5ERU5UX0NMQVVTRSIsImZvcm1hdERlcGVuZGVudENsYXVzZSIsImZvcm1hdEpvaW5Db25kaXRpb24iLCJSRVNFUlZFRF9MT0dJQ0FMX09QRVJBVE9SIiwiZm9ybWF0TG9naWNhbE9wZXJhdG9yIiwiZm9ybWF0S2V5d29yZCIsIkJMT0NLX1NUQVJUIiwiZm9ybWF0QmxvY2tTdGFydCIsIkJMT0NLX0VORCIsImZvcm1hdEJsb2NrRW5kIiwiUExBQ0VIT0xERVIiLCJmb3JtYXRQbGFjZWhvbGRlciIsIk9QRVJBVE9SIiwiZm9ybWF0T3BlcmF0b3IiLCJmb3JtYXRXb3JkIiwic2hvdWxkQWRkQmVmb3JlIiwiZm9ybWF0V2l0aFNwYWNlcyIsInNob3VsZEFkZEFmdGVyIiwibmV4dFRva2VucyIsInRva2Vuc1VudGlsTmV4dENvbW1hbmRPclF1ZXJ5RW5kIiwic29tZSIsIkNBU0UiLCJtdWx0aWxpbmVMaXN0cyIsImlubGluZVdpZHRoIiwiY291bnRDbGF1c2VzIiwidG9rZW5zU3RyaW5nIiwibWFwIiwiam9pbiIsIndoaXRlc3BhY2VCZWZvcmUiLCJjb3VudCIsIm9wZW5CbG9ja3MiLCJ0YWlsIiwic2xpY2UiLCJmaW5kSW5kZXgiLCJ1bmRlZmluZWQiLCJhZGROZXdsaW5lIiwic2hvdyIsImluZGVudENvbW1lbnQiLCJjb21tZW50IiwiZ2V0SW5kZW50IiwiZGVjcmVhc2VUb3BMZXZlbCIsImluY3JlYXNlVG9wTGV2ZWwiLCJlcXVhbGl6ZVdoaXRlc3BhY2UiLCJpc0pvaW4iLCJ0ZXN0Iiwic2hvdWxkUmVtb3ZlIiwiZm9ybWF0Q29tbWEiLCJmb3JtYXRRdWVyeVNlcGFyYXRvciIsImluY2x1ZGVzIiwiZm9ybWF0V2l0aG91dFNwYWNlcyIsImRlbnNlT3BlcmF0b3JzIiwiQU5EIiwiQkVUV0VFTiIsImxvZ2ljYWxPcGVyYXRvck5ld2xpbmUiLCJzdHJpbmciLCJwcmVzZXJ2ZVdoaXRlc3BhY2VGb3IiLCJfYSIsIm5ld2xpbmVCZWZvcmVPcGVuUGFyZW4iLCJiZWdpbklmUG9zc2libGUiLCJpc0FjdGl2ZSIsImluY3JlYXNlQmxvY2tMZXZlbCIsImVuZCIsImRlY3JlYXNlQmxvY2tMZXZlbCIsImdldFNpbmdsZUluZGVudCIsIm5ld2xpbmVCZWZvcmVDbG9zZVBhcmVuIiwiZ2V0IiwiTElNSVQiLCJhZGRTcGFjZSIsImJlZm9yZSIsImFmdGVyIiwicmVzZXRJbmRlbnRhdGlvbiIsIm5ld2xpbmVCZWZvcmVTZW1pY29sb24iLCJsaW5lc0JldHdlZW5RdWVyaWVzIiwidG9VcHBlckNhc2UiLCJ0b0xvd2VyQ2FzZSIsIlNFTEVDVCIsImxhc3QiLCJJTkRFTlRfVFlQRV9UT1BfTEVWRUwiLCJJTkRFTlRfVFlQRV9CTE9DS19MRVZFTCIsImluZGVudCIsImluZGVudFR5cGVzIiwicHVzaCIsInBvcCIsImxldmVsIiwiaXNJbmxpbmVCbG9jayIsImkiLCJpc0ZvcmJpZGRlblRva2VuIiwia2V5IiwicmVnZXhGYWN0b3J5IiwiZXNjYXBlUmVnRXhwIiwiV0hJVEVTUEFDRV9SRUdFWCIsIk5VTExfUkVHRVgiLCJUb2tlbml6ZXIiLCJ0b2tlblR5cGUiLCJpbnB1dCIsImdldFRva2VuT25GaXJzdE1hdGNoIiwicmVnZXgiLCJSRUdFWF9NQVAiLCJzcGVjaWFsV29yZENoYXJzQWxsIiwiT2JqZWN0IiwidmFsdWVzIiwic3BlY2lhbFdvcmRDaGFycyIsImNyZWF0ZVdvcmRSZWdleCIsIlNUUklORyIsImNyZWF0ZVN0cmluZ1JlZ2V4Iiwic3RyaW5nVHlwZXMiLCJjcmVhdGVSZXNlcnZlZFdvcmRSZWdleCIsInJlc2VydmVkS2V5d29yZHMiLCJyZXNlcnZlZERlcGVuZGVudENsYXVzZXMiLCJfYiIsInJlc2VydmVkTG9naWNhbE9wZXJhdG9ycyIsInJlc2VydmVkQ29tbWFuZHMiLCJyZXNlcnZlZEJpbmFyeUNvbW1hbmRzIiwicmVzZXJ2ZWRKb2luQ29uZGl0aW9ucyIsImNyZWF0ZU9wZXJhdG9yUmVnZXgiLCJvcGVyYXRvcnMiLCJfYyIsImNyZWF0ZVBhcmVuUmVnZXgiLCJibG9ja1N0YXJ0IiwiYmxvY2tFbmQiLCJjcmVhdGVMaW5lQ29tbWVudFJlZ2V4IiwibGluZUNvbW1lbnRUeXBlcyIsIkVPRiIsIklOREVYRURfUExBQ0VIT0xERVJfUkVHRVgiLCJjcmVhdGVQbGFjZWhvbGRlclJlZ2V4IiwiaW5kZXhlZFBsYWNlaG9sZGVyVHlwZXMiLCJfZCIsIklERU5UX05BTUVEX1BMQUNFSE9MREVSX1JFR0VYIiwibmFtZWRQbGFjZWhvbGRlclR5cGVzIiwiU1RSSU5HX05BTUVEX1BMQUNFSE9MREVSX1JFR0VYIiwiY3JlYXRlU3RyaW5nUGF0dGVybiIsImdldFdoaXRlc3BhY2UiLCJzdWJzdHJpbmciLCJnZXROZXh0VG9rZW4iLCJtYXRjaGVzIiwibWF0Y2giLCJwcmV2aW91c1Rva2VuIiwibWF0Y2hUb2tlbiIsImdldFBsYWNlaG9sZGVyVG9rZW4iLCJnZXRSZXNlcnZlZFdvcmRUb2tlbiIsInBsYWNlaG9sZGVyVG9rZW5SZWdleE1hcCIsInBhcnNlS2V5IiwidiIsImdldEVzY2FwZWRQbGFjZWhvbGRlcktleSIsInF1b3RlQ2hhciIsInJlZHVjZSIsImFjYyIsIlJlZ0V4cCIsInJlc2VydmVkVG9rZW5MaXN0IiwibWF0Y2hlZFRva2VuIiwibWF4TGVuZ3RoIiwibGluZXMiLCJzcGxpdCIsIm5ld1F1ZXJ5IiwiYWxpYXNMaW5lcyIsInNwbGl0TGluZXMiLCJsaW5lIiwicHJlY2VkaW5nVGV4dCIsImFzIiwiYWxpYXMiLCJhbGlhc01heExlbmd0aCIsImdyb3VwQ29tbWFEZWxpbWl0ZWRMaW5lcyIsImZsYXRNYXAiLCJjb21tYUxpbmVzIiwiZm9ybWF0VGFidWxhciIsImZvcm1hdEJlZm9yZSIsImdyb3VwcyIsImdyb3VwIiwibWF4TGluZUxlbmd0aCIsInRyaW1UcmFpbGluZ0NvbW1hcyIsIndoaXRlc3BhY2UiLCJyZW1vdmVMYXN0SW5kZW50IiwidHJpbVN0YXJ0IiwiaXNFbXB0eSIsInNvcnRCeUxlbmd0aERlc2MiLCJtb25hZE9wZXJhdG9ycyIsInBvbHlhZE9wZXJhdG9ycyIsImMiLCJyZXNlcnZlZEtleXdvcmRzUGF0dGVybiIsInNwZWNpYWxDaGFycyIsInByZWZpeExvb2tCZWhpbmQiLCJwcmVmaXgiLCJzdWZmaXhMb29rQWhlYWQiLCJzdWZmaXgiLCJ1bmljb2RlV29yZENoYXIiLCJhbnkiLCJhcnJheUFjY2Vzc29yIiwibWFwQWNjZXNzb3IiLCJwYXR0ZXJucyIsInQiLCJlc2NhcGVQYXJlbiIsInBhcmVuIiwicGFyZW5zIiwidHlwZXMiLCJwYXR0ZXJuIiwidHlwZXNSZWdleCIsIlpXUyIsImJ1ZmZlckl0ZW0iLCJwYWRFbmQiLCJwYWRTdGFydCIsIlpXU19SRUdFWCIsInNwYWNlcyIsInRlc3RUb2tlbiIsImNvbXBhcmVUb2tlbiIsIkJZIiwiRlJPTSIsIlNFVCIsIldJTkRPVyIsImRlZHVwZSIsInJlc2VydmVkRnVuY3Rpb25zIiwiYWVhZCIsImFnZ3JlZ2F0ZUFuYWx5dGljIiwiYWdncmVnYXRlIiwiYXBwcm94aW1hdGVBZ2dyZWdhdGUiLCJhcnJheSIsImJpdHdpc2UiLCJjb252ZXJzaW9uIiwiZGF0ZSIsImRhdGV0aW1lIiwiZGVidWdnaW5nIiwiZmVkZXJhdGVkUXVlcnkiLCJnZW9ncmFwaHkiLCJoYXNoIiwiaGxsIiwiaW50ZXJ2YWwiLCJqc29uIiwibWF0aCIsIm5hdmlnYXRpb24iLCJuZXQiLCJudW1iZXJpbmciLCJzZWN1cml0eSIsInN0YXRpc3RpY2FsQWdncmVnYXRlIiwidGltZSIsInRpbWVzdGFtcCIsInV1aWQiLCJjb25kaXRpb25hbCIsImxlZ2FjeUFnZ3JlZ2F0ZSIsImxlZ2FjeUJpdHdpc2UiLCJsZWdhY3lDYXN0aW5nIiwibGVnYWN5Q29tcGFyaXNvbiIsImxlZ2FjeURhdGV0aW1lIiwibGVnYWN5SXAiLCJsZWdhY3lKc29uIiwibGVnYWN5TWF0aCIsImxlZ2FjeVJlZ2V4IiwibGVnYWN5U3RyaW5nIiwibGVnYWN5VGFibGVXaWxkY2FyZCIsImxlZ2FjeVVybCIsImxlZ2FjeVdpbmRvdyIsImxlZ2FjeU1pc2MiLCJvdGhlciIsImtleXdvcmRzIiwiZGF0YXR5cGVzIiwic3RyaW5nRm9ybWF0IiwibWlzYyIsIkJpZ1F1ZXJ5Rm9ybWF0dGVyIiwiZnVsbFJlc2VydmVkV29yZHMiLCJmaW5hbFRva2VuIiwic3BsaWNlIiwiYXJyIiwic2NhbGFyIiwidGFibGUiLCJyb3ciLCJvbGFwIiwic3RhbmRhcmQiLCJvbmxpbmVVdGlsaWVzIiwiY29tbWFuZHMiLCJEYjJGb3JtYXR0ZXIiLCJtYXNraW5nIiwibm9uUmVzZXJ2ZWQiLCJyZXNlcnZlZCIsImZpbGVUeXBlcyIsIkhpdmVGb3JtYXR0ZXIiLCJNYXJpYURiRm9ybWF0dGVyIiwiTXlTcWxGb3JtYXR0ZXIiLCJOMXFsRm9ybWF0dGVyIiwiUGxTcWxGb3JtYXR0ZXIiLCJzdGFydHNXaXRoIiwiYmluYXJ5IiwiYml0c3RyaW5nIiwiZGF0YXR5cGUiLCJnZW9tZXRyeSIsIm5ldHdvcmsiLCJ0ZXh0c2VhcmNoIiwieG1sIiwic2VxdWVuY2UiLCJyYW5nZSIsIndpbmRvdyIsInNldCIsInN5c0luZm8iLCJzeXNBZG1pbiIsInRyaWdnZXIiLCJldmVudFRyaWdnZXIiLCJzdGF0cyIsImJpbmFyeU9wZXJhdG9ycyIsIlBvc3RncmVTcWxGb3JtYXR0ZXIiLCJkYXRlVGltZSIsInNwYXRpYWwiLCJoeXBlckxvZ0xvZyIsIm1hY2hpbmVMZWFybmluZyIsInN1cGVyVHlwZSIsImRhdGFUeXBlIiwiZGF0YUNvbnZlcnNpb25QYXJhbXMiLCJkYXRhTG9hZFBhcmFtcyIsImRhdGFGb3JtYXRQYXJhbXMiLCJjb3B5QXV0aFBhcmFtcyIsImNvcHlDb21wcmVzc2lvblBhcmFtcyIsImNvcHlNaXNjUGFyYW1zIiwiY29tcHJlc3Npb25FbmNvZGluZ3MiLCJkYXRhVHlwZXMiLCJSZWRzaGlmdEZvcm1hdHRlciIsIlNwYXJrU3FsRm9ybWF0dGVyIiwiU3RhbmRhcmRTcWxGb3JtYXR0ZXIiLCJhbmFseXRpYyIsImNvbmZpZ3VyYXRpb24iLCJjcnlwdG9ncmFwaGljIiwiY3Vyc29yIiwibWF0aGVtYXRpY2FsIiwibWV0YWRhdGEiLCJyYW5raW5nIiwic3lzdGVtIiwic3RhdGlzdGljYWwiLCJvZGJjIiwiZnV0dXJlIiwiVFNxbEZvcm1hdHRlciIsImlzTnVtYmVyIiwiZm9ybWF0dGVycyIsImJpZ3F1ZXJ5IiwiZGIyIiwiaGl2ZSIsIm1hcmlhZGIiLCJteXNxbCIsIm4xcWwiLCJwbHNxbCIsInBvc3RncmVzcWwiLCJyZWRzaGlmdCIsInNwYXJrIiwic3FsIiwidHNxbCIsInN1cHBvcnRlZERpYWxlY3RzIiwia2V5cyIsImRlZmF1bHRPcHRpb25zIiwibGFuZ3VhZ2UiLCJmb3JtYXQiLCJvcHRpb25zIiwidmFsaWRhdGVDb25maWciLCJDb25maWdFcnJvciIsIlNldCIsInN0ciIsIkFycmF5IiwiaXNBcnJheSIsInN0cmluZ3MiLCJzb3J0IiwiYSIsImIiLCJsb2NhbGVDb21wYXJlIiwibWF4IiwiY3VyIiwiTWF0aCJdLCJzb3VyY2VSb290IjoiIn0=
\No newline at end of file