clientnode 4.0.1442 → 4.0.1443
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Lock.js +69 -83
- package/dist/Logger.js +756 -163
- package/dist/Semaphore.js +56 -46
- package/dist/array.js +661 -337
- package/dist/bundle/Lock.js +86 -0
- package/dist/bundle/Logger.js +778 -0
- package/dist/bundle/Semaphore.js +75 -0
- package/dist/bundle/array.js +776 -0
- package/dist/bundle/cli.js +59 -0
- package/dist/bundle/constants.js +214 -0
- package/dist/bundle/context.js +280 -0
- package/dist/bundle/cookie.js +301 -0
- package/dist/bundle/data-transfer.js +825 -0
- package/dist/bundle/datetime.js +1148 -0
- package/dist/bundle/domNode.js +549 -0
- package/dist/bundle/expression/evaluators.js +1228 -0
- package/dist/bundle/expression/helper.js +117 -0
- package/dist/bundle/expression/index.js +1357 -0
- package/dist/bundle/expression/indicator-functions.js +332 -0
- package/dist/bundle/expression/type.js +16 -0
- package/dist/bundle/filesystem.js +436 -0
- package/dist/bundle/function.js +117 -0
- package/dist/bundle/index.js +3249 -0
- package/dist/bundle/indicators.js +565 -0
- package/dist/bundle/module.js +213 -0
- package/dist/bundle/number.js +527 -0
- package/dist/bundle/object.js +1104 -0
- package/dist/bundle/process.js +291 -0
- package/dist/bundle/property-types.js +36 -0
- package/dist/bundle/scope.js +2121 -0
- package/dist/bundle/string.js +1213 -0
- package/dist/bundle/test-helper.js +802 -0
- package/dist/bundle/type.js +16 -0
- package/dist/bundle/utility.js +420 -0
- package/dist/cli.js +45 -37
- package/dist/compatible/Lock.js +86 -0
- package/dist/compatible/Logger.js +778 -0
- package/dist/compatible/Semaphore.js +75 -0
- package/dist/compatible/array.js +776 -0
- package/dist/compatible/cli.js +59 -0
- package/dist/compatible/constants.js +214 -0
- package/dist/compatible/context.js +280 -0
- package/dist/compatible/cookie.js +301 -0
- package/dist/compatible/data-transfer.js +825 -0
- package/dist/compatible/datetime.js +1148 -0
- package/dist/compatible/domNode.js +549 -0
- package/dist/compatible/expression/evaluators.js +1228 -0
- package/dist/compatible/expression/helper.js +117 -0
- package/dist/compatible/expression/index.js +1357 -0
- package/dist/compatible/expression/indicator-functions.js +332 -0
- package/dist/compatible/expression/type.js +16 -0
- package/dist/compatible/filesystem.js +436 -0
- package/dist/compatible/function.js +117 -0
- package/dist/compatible/index.js +3249 -0
- package/dist/compatible/indicators.js +565 -0
- package/dist/compatible/module.js +213 -0
- package/dist/compatible/number.js +527 -0
- package/dist/compatible/object.js +1104 -0
- package/dist/compatible/process.js +291 -0
- package/dist/compatible/property-types.js +36 -0
- package/dist/compatible/scope.js +2121 -0
- package/dist/compatible/string.js +1213 -0
- package/dist/compatible/test-helper.js +802 -0
- package/dist/compatible/type.js +16 -0
- package/dist/compatible/utility.js +420 -0
- package/dist/constants.js +198 -110
- package/dist/context.js +265 -25
- package/dist/cookie.js +265 -48
- package/dist/data-transfer.js +775 -166
- package/dist/datetime.js +1107 -241
- package/dist/domNode.js +495 -277
- package/dist/expression/evaluators.js +1189 -234
- package/dist/expression/helper.js +102 -82
- package/dist/expression/index.js +1341 -10
- package/dist/expression/indicator-functions.js +316 -21
- package/dist/expression/type.js +1 -5
- package/dist/filesystem.js +349 -323
- package/dist/function.js +93 -51
- package/dist/index.js +3232 -26
- package/dist/indicators.js +512 -68
- package/dist/module.js +197 -99
- package/dist/number.js +491 -25
- package/dist/object.js +917 -775
- package/dist/process.js +261 -38
- package/dist/property-types.js +17 -96
- package/dist/scope.js +2092 -56
- package/dist/string.js +991 -603
- package/dist/test-helper.js +633 -171
- package/dist/type.js +4 -9
- package/dist/utility.js +372 -91
- package/package.json +2 -2
package/dist/object.js
CHANGED
|
@@ -1,9 +1,30 @@
|
|
|
1
|
+
if(typeof window==='undefined'||window===null)var window=(typeof global==='undefined'||global===null)?{}:global;import * as __WEBPACK_EXTERNAL_MODULE_core_js_modules_es_array_includes_js_66c3fd7d__ from "core-js/modules/es.array.includes.js";
|
|
2
|
+
import * as __WEBPACK_EXTERNAL_MODULE_core_js_modules_es_regexp_flags_js_c0be7d17__ from "core-js/modules/es.regexp.flags.js";
|
|
3
|
+
/******/ var __webpack_modules__ = ([
|
|
4
|
+
/* 0 */
|
|
5
|
+
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
|
6
|
+
|
|
7
|
+
var x = function(y) {
|
|
8
|
+
var x = {}; __webpack_require__.d(x, y); return x
|
|
9
|
+
}
|
|
10
|
+
var y = function(x) { return function() { return x; }; }
|
|
11
|
+
module.exports = x({ });
|
|
12
|
+
|
|
13
|
+
/***/ }),
|
|
14
|
+
/* 1 */
|
|
15
|
+
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
16
|
+
|
|
17
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
18
|
+
/* harmony export */ FI: function() { return /* binding */ SPECIAL_REGEX_SEQUENCES; },
|
|
19
|
+
/* harmony export */ Fp: function() { return /* binding */ VALUE_COPY_SYMBOL; },
|
|
20
|
+
/* harmony export */ jE: function() { return /* binding */ PLAIN_OBJECT_PROTOTYPES; },
|
|
21
|
+
/* harmony export */ p_: function() { return /* binding */ IGNORE_NULL_AND_UNDEFINED_SYMBOL; },
|
|
22
|
+
/* harmony export */ rq: function() { return /* binding */ CLASS_TO_TYPE_MAPPING; }
|
|
23
|
+
/* harmony export */ });
|
|
24
|
+
/* unused harmony exports DEFAULT_ENCODING, CLOSE_EVENT_NAMES, CONSOLE_METHODS, ABBREVIATIONS, ANIMATION_END_EVENT_NAMES, KEY_CODES, KEYBOARD_CODES, LOCALES, TRANSITION_END_EVENT_NAMES */
|
|
1
25
|
// #!/usr/bin/env babel-node
|
|
2
26
|
// -*- coding: utf-8 -*-
|
|
3
|
-
/** @module
|
|
4
|
-
'use strict';
|
|
5
|
-
|
|
6
|
-
/* !
|
|
27
|
+
/** @module constants *//* !
|
|
7
28
|
region header
|
|
8
29
|
[Project page](https://torben.website/clientnode)
|
|
9
30
|
|
|
@@ -16,29 +37,68 @@
|
|
|
16
37
|
naming 3.0 unported license.
|
|
17
38
|
See https://creativecommons.org/licenses/by/3.0/deed.de
|
|
18
39
|
endregion
|
|
19
|
-
*/
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
import "core-js/modules/es.map.get-or-insert-computed.js";
|
|
28
|
-
import "core-js/modules/es.regexp.flags.js";
|
|
29
|
-
import "core-js/modules/es.set.difference.v2.js";
|
|
30
|
-
import "core-js/modules/es.set.intersection.v2.js";
|
|
31
|
-
import "core-js/modules/es.set.is-disjoint-from.v2.js";
|
|
32
|
-
import "core-js/modules/es.set.is-subset-of.v2.js";
|
|
33
|
-
import "core-js/modules/es.set.is-superset-of.v2.js";
|
|
34
|
-
import "core-js/modules/es.set.symmetric-difference.v2.js";
|
|
35
|
-
import "core-js/modules/es.set.union.v2.js";
|
|
36
|
-
import { CLASS_TO_TYPE_MAPPING, IGNORE_NULL_AND_UNDEFINED_SYMBOL, VALUE_COPY_SYMBOL } from "./constants.js";
|
|
37
|
-
import { isFunction, isObject, isPlainObject, isMap, isProxy, isSet, isNumeric } from "./indicators.js";
|
|
38
|
-
import { isNotANumber } from "./number.js";
|
|
39
|
-
import { escapeRegularExpressions, evaluateAndThrowError } from "./string.js";
|
|
40
|
+
*/var DEFAULT_ENCODING="utf8";var CLOSE_EVENT_NAMES=(/* unused pure expression or super */ null && (["close","exit","SIGINT","SIGTERM","SIGQUIT","uncaughtException"]));var CONSOLE_METHODS=(/* unused pure expression or super */ null && (["debug","error","info","log","warn"]));var VALUE_COPY_SYMBOL=Symbol.for("clientnodeValue");var IGNORE_NULL_AND_UNDEFINED_SYMBOL=Symbol.for("clientnodeIgnoreNullAndUndefined");// Lists all known abbreviation for proper camel case to delimited and back
|
|
41
|
+
// conversion.
|
|
42
|
+
var ABBREVIATIONS=(/* unused pure expression or super */ null && (["html","id","url","us","de","api","href"]));// Saves a string with all css3 browser specific animation end event names.
|
|
43
|
+
var ANIMATION_END_EVENT_NAMES="animationend webkitAnimationEnd oAnimationEnd MSAnimationEnd";// String representation to object type name mapping.
|
|
44
|
+
var CLASS_TO_TYPE_MAPPING={"[object Array]":"array","[object Boolean]":"boolean","[object Date]":"date","[object Error]":"error","[object Function]":"function","[object Map]":"map","[object Number]":"number","[object Object]":"object","[object RegExp]":"regexp","[object Set]":"set","[object String]":"string"};// Saves a mapping from key codes to their corresponding name.
|
|
45
|
+
var KEY_CODES=(/* unused pure expression or super */ null && ({BACKSPACE:8,SPACE:32,TAB:9,DELETE:46,ENTER:13,COMMA:188,PERIOD:190,END:35,ESCAPE:27,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,HOME:36,NUMPAD_ADD:107,NUMPAD_SUBTRACT:109,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,PAGE_UP:33,PAGE_DOWN:34,UP:38,DOWN:40,LEFT:37,RIGHT:39}));var KEYBOARD_CODES=(/* unused pure expression or super */ null && ({BACKSPACE:"Backspace",SPACE:"Space",TAB:"Tab",DELETE:"Delete",ENTER:"Enter",COMMA:"Comma",PERIOD:"Period",END:"End",ESCAPE:"Escape",F1:"F1",F2:"F2",F3:"F3",F4:"F4",F5:"F5",F6:"F6",F7:"F7",F8:"F8",F9:"F9",F10:"F10",F11:"F111",F12:"F12",HOME:"Home",NUMPAD_ADD:"NumpadAdd",NUMPAD_SUBTRACT:"NumpadSubtract",NUMPAD_DECIMAL:"NumpadDecimal",NUMPAD_DIVIDE:"NumpadDivide",NUMPAD_ENTER:"NumpadEnter",NUMPAD_MULTIPLY:"NumpadMultiply",PAGE_UP:"PageUp",PAGE_DOWN:"PageUp",UP:"ArrowUp",DOWN:"ArrowDown",LEFT:"ArrowLeft",RIGHT:"ArrowUp"}));var LOCALES=(/* unused pure expression or super */ null && ([]));var PLAIN_OBJECT_PROTOTYPES=[Object.prototype];// A list of special regular expression symbols.
|
|
46
|
+
var SPECIAL_REGEX_SEQUENCES=["-","[","]","(",")","^","$","*","+",".","{","}"];// Saves a string with all css3 browser specific transition end event names.
|
|
47
|
+
var TRANSITION_END_EVENT_NAMES="transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd";
|
|
40
48
|
|
|
41
|
-
|
|
49
|
+
/***/ }),
|
|
50
|
+
/* 2 */
|
|
51
|
+
/***/ (function(__webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
52
|
+
|
|
53
|
+
__webpack_require__.a(__webpack_module__, async function (__webpack_handle_async_dependencies__, __webpack_async_result__) { try {
|
|
54
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
55
|
+
/* harmony export */ C: function() { return /* binding */ _copy; },
|
|
56
|
+
/* harmony export */ Do: function() { return /* binding */ _represent; },
|
|
57
|
+
/* harmony export */ J3: function() { return /* binding */ evaluateDynamicData; },
|
|
58
|
+
/* harmony export */ Pi: function() { return /* binding */ _evaluateAsyncDynamicData; },
|
|
59
|
+
/* harmony export */ QB: function() { return /* binding */ _addDynamicGetterAndSetter; },
|
|
60
|
+
/* harmony export */ Sj: function() { return /* binding */ determineType; },
|
|
61
|
+
/* harmony export */ X$: function() { return /* binding */ _extend; },
|
|
62
|
+
/* harmony export */ _2: function() { return /* binding */ _modifyObject; },
|
|
63
|
+
/* harmony export */ aI: function() { return /* binding */ _equals; },
|
|
64
|
+
/* harmony export */ bo: function() { return /* binding */ getProxyHandler; },
|
|
65
|
+
/* harmony export */ dK: function() { return /* binding */ _mask; },
|
|
66
|
+
/* harmony export */ di: function() { return /* binding */ sort; },
|
|
67
|
+
/* harmony export */ dr: function() { return /* binding */ _convertSubstringInPlainObject; },
|
|
68
|
+
/* harmony export */ eQ: function() { return /* binding */ _convertPlainObjectToMap; },
|
|
69
|
+
/* harmony export */ iE: function() { return /* binding */ _removeKeysInEvaluation; },
|
|
70
|
+
/* harmony export */ oW: function() { return /* binding */ _convertMapToPlainObject; },
|
|
71
|
+
/* harmony export */ q1: function() { return /* binding */ _unwrapProxy; },
|
|
72
|
+
/* harmony export */ uu: function() { return /* binding */ _removeKeyPrefixes; },
|
|
73
|
+
/* harmony export */ zP: function() { return /* binding */ convertCircularObjectToJSON; }
|
|
74
|
+
/* harmony export */ });
|
|
75
|
+
/* harmony import */ var core_js_modules_es_array_includes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0);
|
|
76
|
+
/* harmony import */ var core_js_modules_es_regexp_flags_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7);
|
|
77
|
+
/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1);
|
|
78
|
+
/* harmony import */ var _indicators_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(3);
|
|
79
|
+
/* harmony import */ var _number_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(8);
|
|
80
|
+
/* harmony import */ var _string_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(6);
|
|
81
|
+
var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_indicators_js__WEBPACK_IMPORTED_MODULE_3__, _number_js__WEBPACK_IMPORTED_MODULE_4__, _string_js__WEBPACK_IMPORTED_MODULE_5__]);
|
|
82
|
+
var __webpack_async_dependencies_result__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
|
|
83
|
+
_indicators_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_async_dependencies_result__[0];
|
|
84
|
+
_number_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_async_dependencies_result__[1];
|
|
85
|
+
_string_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_async_dependencies_result__[2];
|
|
86
|
+
// #!/usr/bin/env babel-node
|
|
87
|
+
// -*- coding: utf-8 -*-
|
|
88
|
+
/** @module object *//* !
|
|
89
|
+
region header
|
|
90
|
+
[Project page](https://torben.website/clientnode)
|
|
91
|
+
|
|
92
|
+
Copyright Torben Sickert (info["~at~"]torben.website) 16.12.2012
|
|
93
|
+
|
|
94
|
+
License
|
|
95
|
+
-------
|
|
96
|
+
|
|
97
|
+
This library written by Torben Sickert stands under a creative commons
|
|
98
|
+
naming 3.0 unported license.
|
|
99
|
+
See https://creativecommons.org/licenses/by/3.0/deed.de
|
|
100
|
+
endregion
|
|
101
|
+
*/function _toConsumableArray(r){return _arrayWithoutHoles(r)||_iterableToArray(r)||_unsupportedIterableToArray(r)||_nonIterableSpread()}function _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.")}function _iterableToArray(r){if("undefined"!=typeof Symbol&&null!=r[Symbol.iterator]||null!=r["@@iterator"])return Array.from(r)}function _arrayWithoutHoles(r){if(Array.isArray(r))return _arrayLikeToArray(r)}function _regenerator(){/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */var e,t,r="function"==typeof Symbol?Symbol:{},n=r.iterator||"@@iterator",o=r.toStringTag||"@@toStringTag";function i(r,n,o,i){var c=n&&n.prototype instanceof Generator?n:Generator,u=Object.create(c.prototype);return _regeneratorDefine2(u,"_invoke",function(r,n,o){var i,c,u,f=0,p=o||[],y=!1,G={p:0,n:0,v:e,a:d,f:d.bind(e,4),d:function d(t,r){return i=t,c=0,u=e,G.n=r,a}};function d(r,n){for(c=r,u=n,t=0;!y&&f&&!o&&t<p.length;t++){var o,i=p[t],d=G.p,l=i[2];r>3?(o=l===n)&&(u=i[(c=i[4])?5:(c=3,3)],i[4]=i[5]=e):i[0]<=d&&((o=r<2&&d<i[1])?(c=0,G.v=n,G.n=i[1]):d<l&&(o=r<3||i[0]>n||n>l)&&(i[4]=r,i[5]=n,G.n=l,c=0))}if(o||r>1)return a;throw y=!0,n}return function(o,p,l){if(f>1)throw TypeError("Generator is already running");for(y&&1===p&&d(p,l),c=p,u=l;(t=c<2?e:u)||!y;){i||(c?c<3?(c>1&&(G.n=-1),d(c,u)):G.n=u:G.v=u);try{if(f=2,i){if(c||(o="next"),t=i[o]){if(!(t=t.call(i,u)))throw TypeError("iterator result is not an object");if(!t.done)return t;u=t.value,c<2&&(c=0)}else 1===c&&(t=i.return)&&t.call(i),c<2&&(u=TypeError("The iterator does not provide a '"+o+"' method"),c=1);i=e}else if((t=(y=G.n<0)?u:r.call(n,G))!==a)break}catch(t){i=e,c=1,u=t}finally{f=1}}return{value:t,done:y}}}(r,o,i),!0),u}var a={};function Generator(){}function GeneratorFunction(){}function GeneratorFunctionPrototype(){}t=Object.getPrototypeOf;var c=[][n]?t(t([][n]())):(_regeneratorDefine2(t={},n,function(){return this}),t),u=GeneratorFunctionPrototype.prototype=Generator.prototype=Object.create(c);function f(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,GeneratorFunctionPrototype):(e.__proto__=GeneratorFunctionPrototype,_regeneratorDefine2(e,o,"GeneratorFunction")),e.prototype=Object.create(u),e}return GeneratorFunction.prototype=GeneratorFunctionPrototype,_regeneratorDefine2(u,"constructor",GeneratorFunctionPrototype),_regeneratorDefine2(GeneratorFunctionPrototype,"constructor",GeneratorFunction),GeneratorFunction.displayName="GeneratorFunction",_regeneratorDefine2(GeneratorFunctionPrototype,o,"GeneratorFunction"),_regeneratorDefine2(u),_regeneratorDefine2(u,o,"Generator"),_regeneratorDefine2(u,n,function(){return this}),_regeneratorDefine2(u,"toString",function(){return"[object Generator]"}),(_regenerator=function _regenerator(){return{w:i,m:f}})()}function _regeneratorDefine2(e,r,n,t){var i=Object.defineProperty;try{i({},"",{})}catch(e){i=0}_regeneratorDefine2=function _regeneratorDefine(e,r,n,t){function o(r,n){_regeneratorDefine2(e,r,function(e){return this._invoke(r,n,e)})}r?i?i(e,r,{value:n,enumerable:!t,configurable:!t,writable:!t}):e[r]=n:(o("next",0),o("throw",1),o("return",2))},_regeneratorDefine2(e,r,n,t)}function asyncGeneratorStep(n,t,e,r,o,a,c){try{var i=n[a](c),u=i.value}catch(n){return void e(n)}i.done?t(u):Promise.resolve(u).then(r,o)}function _asyncToGenerator(n){return function(){var t=this,e=arguments;return new Promise(function(r,o){var a=n.apply(t,e);function _next(n){asyncGeneratorStep(a,r,o,_next,_throw,"next",n)}function _throw(n){asyncGeneratorStep(a,r,o,_next,_throw,"throw",n)}_next(void 0)})}}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,o)}return t}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){_defineProperty(e,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})}return e}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}function _slicedToArray(r,e){return _arrayWithHoles(r)||_iterableToArrayLimit(r,e)||_unsupportedIterableToArray(r,e)||_nonIterableRest()}function _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.")}function _iterableToArrayLimit(r,l){var t=null==r?null:"undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(null!=t){var e,n,i,u,a=[],f=!0,o=!1;try{if(i=(t=t.call(r)).next,0===l){if(Object(t)!==t)return;f=!1}else for(;!(f=(e=i.call(t)).done)&&(a.push(e.value),a.length!==l);f=!0);}catch(r){o=!0,n=r}finally{try{if(!f&&null!=t.return&&(u=t.return(),Object(u)!==u))return}finally{if(o)throw n}}return a}}function _arrayWithHoles(r){if(Array.isArray(r))return r}function _createForOfIteratorHelper(r,e){var t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(!t){if(Array.isArray(r)||(t=_unsupportedIterableToArray(r))||e&&r&&"number"==typeof r.length){t&&(r=t);var _n=0,F=function F(){};return{s:F,n:function n(){return _n>=r.length?{done:!0}:{done:!1,value:r[_n++]}},e:function e(r){throw r},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 o,a=!0,u=!1;return{s:function s(){t=t.call(r)},n:function n(){var r=t.next();return a=r.done,r},e:function e(r){u=!0,o=r},f:function f(){try{a||null==t.return||t.return()}finally{if(u)throw o}}}}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}/**
|
|
42
102
|
* Adds dynamic getter and setter to any given data structure such as maps.
|
|
43
103
|
* @param object - Object to proxy.
|
|
44
104
|
* @param getterWrapper - Function to wrap each property get.
|
|
@@ -49,44 +109,7 @@ import { escapeRegularExpressions, evaluateAndThrowError } from "./string.js";
|
|
|
49
109
|
* @param typesToExtend - Types which should be extended (Checks are
|
|
50
110
|
* performed via "value instanceof type".).
|
|
51
111
|
* @returns Returns given object wrapped with a dynamic getter proxy.
|
|
52
|
-
*/
|
|
53
|
-
export const addDynamicGetterAndSetter = (object, getterWrapper = null, setterWrapper = null, methodNames = {}, deep = true, typesToExtend = [Object]) => {
|
|
54
|
-
if (deep && typeof object === 'object') if (Array.isArray(object)) {
|
|
55
|
-
let index = 0;
|
|
56
|
-
for (const value of object) {
|
|
57
|
-
object[index] = addDynamicGetterAndSetter(value, getterWrapper, setterWrapper, methodNames, deep);
|
|
58
|
-
index += 1;
|
|
59
|
-
}
|
|
60
|
-
} else if (isMap(object)) for (const [key, value] of object) object.set(key, addDynamicGetterAndSetter(value, getterWrapper, setterWrapper, methodNames, deep));else if (isSet(object)) {
|
|
61
|
-
const cache = [];
|
|
62
|
-
for (const value of object) {
|
|
63
|
-
object.delete(value);
|
|
64
|
-
cache.push(addDynamicGetterAndSetter(value, getterWrapper, setterWrapper, methodNames, deep));
|
|
65
|
-
}
|
|
66
|
-
for (const value of cache) object.add(value);
|
|
67
|
-
} else if (object !== null) for (const [key, value] of Object.entries(object)) object[key] = addDynamicGetterAndSetter(value, getterWrapper, setterWrapper, methodNames, deep);
|
|
68
|
-
if (getterWrapper || setterWrapper) for (const type of typesToExtend) if (isObject(object) && object instanceof type) {
|
|
69
|
-
const defaultHandler = getProxyHandler(object, methodNames);
|
|
70
|
-
const handler = getProxyHandler(object, methodNames);
|
|
71
|
-
if (getterWrapper) handler.get = (_target, name) => {
|
|
72
|
-
if (name === '__target__') return object;
|
|
73
|
-
if (name === '__revoke__') return () => {
|
|
74
|
-
revoke();
|
|
75
|
-
return object;
|
|
76
|
-
};
|
|
77
|
-
if (typeof object[name] === 'function') return object[name];
|
|
78
|
-
return getterWrapper(defaultHandler.get(proxy, name), name, object);
|
|
79
|
-
};
|
|
80
|
-
if (setterWrapper) handler.set = (_target, name, value) => defaultHandler.set(proxy, name, setterWrapper(name, value, object));
|
|
81
|
-
const {
|
|
82
|
-
proxy,
|
|
83
|
-
revoke
|
|
84
|
-
} = Proxy.revocable({}, handler);
|
|
85
|
-
return proxy;
|
|
86
|
-
}
|
|
87
|
-
return object;
|
|
88
|
-
};
|
|
89
|
-
/**
|
|
112
|
+
*/var _addDynamicGetterAndSetter=function addDynamicGetterAndSetter(object,getterWrapper,setterWrapper,methodNames,deep,typesToExtend){if(getterWrapper===void 0){getterWrapper=null}if(setterWrapper===void 0){setterWrapper=null}if(methodNames===void 0){methodNames={}}if(deep===void 0){deep=true}if(typesToExtend===void 0){typesToExtend=[Object]}if(deep&&_typeof(object)==="object")if(Array.isArray(object)){var index=0;var _iterator=_createForOfIteratorHelper(object),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var value=_step.value;object[index]=_addDynamicGetterAndSetter(value,getterWrapper,setterWrapper,methodNames,deep);index+=1}}catch(err){_iterator.e(err)}finally{_iterator.f()}}else if((0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isMap */ .jh)(object)){var _iterator2=_createForOfIteratorHelper(object),_step2;try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var _step2$value=_slicedToArray(_step2.value,2),key=_step2$value[0],_value=_step2$value[1];object.set(key,_addDynamicGetterAndSetter(_value,getterWrapper,setterWrapper,methodNames,deep))}}catch(err){_iterator2.e(err)}finally{_iterator2.f()}}else if((0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isSet */ .vM)(object)){var cache=[];var _iterator3=_createForOfIteratorHelper(object),_step3;try{for(_iterator3.s();!(_step3=_iterator3.n()).done;){var _value3=_step3.value;object.delete(_value3);cache.push(_addDynamicGetterAndSetter(_value3,getterWrapper,setterWrapper,methodNames,deep))}}catch(err){_iterator3.e(err)}finally{_iterator3.f()}for(var _i=0,_cache=cache;_i<_cache.length;_i++){var _value2=_cache[_i];object.add(_value2)}}else if(object!==null)for(var _i2=0,_Object$entries=Object.entries(object);_i2<_Object$entries.length;_i2++){var _Object$entries$_i=_slicedToArray(_Object$entries[_i2],2),_key=_Object$entries$_i[0],_value4=_Object$entries$_i[1];object[_key]=_addDynamicGetterAndSetter(_value4,getterWrapper,setterWrapper,methodNames,deep)}if(getterWrapper||setterWrapper){var _iterator4=_createForOfIteratorHelper(typesToExtend),_step4;try{var _loop=function _loop(){var type=_step4.value;if((0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isObject */ .Gv)(object)&&object instanceof type){var defaultHandler=getProxyHandler(object,methodNames);var handler=getProxyHandler(object,methodNames);if(getterWrapper)handler.get=function(_target,name){if(name==="__target__")return object;if(name==="__revoke__")return function(){revoke();return object};if(typeof object[name]==="function")return object[name];return getterWrapper(defaultHandler.get(proxy,name),name,object)};if(setterWrapper)handler.set=function(_target,name,value){return defaultHandler.set(proxy,name,setterWrapper(name,value,object))};var _Proxy$revocable=Proxy.revocable({},handler),proxy=_Proxy$revocable.proxy,revoke=_Proxy$revocable.revoke;return{v:proxy}}},_ret;for(_iterator4.s();!(_step4=_iterator4.n()).done;){_ret=_loop();if(_ret)return _ret.v}}catch(err){_iterator4.e(err)}finally{_iterator4.f()}}return object};/**
|
|
90
113
|
* Converts given object into its serialized JSON representation by
|
|
91
114
|
* replacing circular references with a given provided value.
|
|
92
115
|
*
|
|
@@ -98,115 +121,27 @@ export const addDynamicGetterAndSetter = (object, getterWrapper = null, setterWr
|
|
|
98
121
|
* value depending on given redundant value.
|
|
99
122
|
* @param numberOfSpaces - Number of spaces to use for string formatting.
|
|
100
123
|
* @returns The formatted JSON string.
|
|
101
|
-
*/
|
|
102
|
-
|
|
103
|
-
const seenObjects = new Map();
|
|
104
|
-
const stringifier = object => {
|
|
105
|
-
const replacer = (key, value) => {
|
|
106
|
-
if (isObject(value)) {
|
|
107
|
-
if (seenObjects.has(value)) return determineCircularReferenceValue(seenObjects.get(value) ?? null, key, value, seenObjects);
|
|
108
|
-
|
|
109
|
-
// NOTE: Set before traversing deeper to detect cycles.
|
|
110
|
-
seenObjects.set(value, null);
|
|
111
|
-
let result;
|
|
112
|
-
if (Array.isArray(value)) {
|
|
113
|
-
result = [];
|
|
114
|
-
for (const item of value) result.push(replacer(null, item));
|
|
115
|
-
} else {
|
|
116
|
-
result = {};
|
|
117
|
-
for (const [name, subValue] of Object.entries(value)) result[name] = replacer(name, subValue);
|
|
118
|
-
}
|
|
119
|
-
seenObjects.set(value, result);
|
|
120
|
-
return result;
|
|
121
|
-
}
|
|
122
|
-
return value;
|
|
123
|
-
};
|
|
124
|
-
return JSON.stringify(object, replacer, numberOfSpaces);
|
|
125
|
-
};
|
|
126
|
-
return stringifier(object);
|
|
127
|
-
};
|
|
128
|
-
/**
|
|
124
|
+
*/var convertCircularObjectToJSON=function convertCircularObjectToJSON(object,determineCircularReferenceValue,numberOfSpaces){if(determineCircularReferenceValue===void 0){determineCircularReferenceValue=function determineCircularReferenceValue(serializedValue){return serializedValue!==null&&serializedValue!==void 0?serializedValue:"__circularReference__"}}if(numberOfSpaces===void 0){numberOfSpaces=0}var seenObjects=new Map;var stringifier=function stringifier(object){var _replacer=function replacer(key,value){if((0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isObject */ .Gv)(value)){var _seenObjects$get;if(seenObjects.has(value))return determineCircularReferenceValue((_seenObjects$get=seenObjects.get(value))!==null&&_seenObjects$get!==void 0?_seenObjects$get:null,key,value,seenObjects);// NOTE: Set before traversing deeper to detect cycles.
|
|
125
|
+
seenObjects.set(value,null);var result;if(Array.isArray(value)){result=[];var _iterator5=_createForOfIteratorHelper(value),_step5;try{for(_iterator5.s();!(_step5=_iterator5.n()).done;){var item=_step5.value;result.push(_replacer(null,item))}}catch(err){_iterator5.e(err)}finally{_iterator5.f()}}else{result={};for(var _i3=0,_Object$entries2=Object.entries(value);_i3<_Object$entries2.length;_i3++){var _Object$entries2$_i=_slicedToArray(_Object$entries2[_i3],2),name=_Object$entries2$_i[0],subValue=_Object$entries2$_i[1];result[name]=_replacer(name,subValue)}}seenObjects.set(value,result);return result}return value};return JSON.stringify(object,_replacer,numberOfSpaces)};return stringifier(object)};/**
|
|
129
126
|
* Converts given map and all nested found maps objects to corresponding
|
|
130
127
|
* object.
|
|
131
128
|
* @param object - Map to convert to.
|
|
132
129
|
* @param deep - Indicates whether to perform a recursive conversion.
|
|
133
130
|
* @returns Given map as object.
|
|
134
|
-
*/
|
|
135
|
-
export const convertMapToPlainObject = (object, deep = true) => {
|
|
136
|
-
if (typeof object === 'object') {
|
|
137
|
-
if (isMap(object)) {
|
|
138
|
-
const newObject = {};
|
|
139
|
-
for (let [key, value] of object) {
|
|
140
|
-
if (deep) value = convertMapToPlainObject(value, deep);
|
|
141
|
-
if (['number', 'string'].includes(typeof key)) newObject[String(key)] = value;
|
|
142
|
-
}
|
|
143
|
-
return newObject;
|
|
144
|
-
}
|
|
145
|
-
if (deep) if (isPlainObject(object)) for (const [key, value] of Object.entries(object)) object[key] = convertMapToPlainObject(value, deep);else if (Array.isArray(object)) {
|
|
146
|
-
let index = 0;
|
|
147
|
-
for (const value of object) {
|
|
148
|
-
object[index] = convertMapToPlainObject(value, deep);
|
|
149
|
-
index += 1;
|
|
150
|
-
}
|
|
151
|
-
} else if (isSet(object)) {
|
|
152
|
-
const cache = [];
|
|
153
|
-
for (const value of object) {
|
|
154
|
-
object.delete(value);
|
|
155
|
-
cache.push(convertMapToPlainObject(value, deep));
|
|
156
|
-
}
|
|
157
|
-
for (const value of cache) object.add(value);
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
return object;
|
|
161
|
-
};
|
|
162
|
-
/**
|
|
131
|
+
*/var _convertMapToPlainObject=function convertMapToPlainObject(object,deep){if(deep===void 0){deep=true}if(_typeof(object)==="object"){if((0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isMap */ .jh)(object)){var newObject={};var _iterator6=_createForOfIteratorHelper(object),_step6;try{for(_iterator6.s();!(_step6=_iterator6.n()).done;){var _step6$value=_slicedToArray(_step6.value,2),key=_step6$value[0],value=_step6$value[1];if(deep)value=_convertMapToPlainObject(value,deep);if(["number","string"].includes(_typeof(key)))newObject[String(key)]=value}}catch(err){_iterator6.e(err)}finally{_iterator6.f()}return newObject}if(deep)if((0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isPlainObject */ .Qd)(object))for(var _i4=0,_Object$entries3=Object.entries(object);_i4<_Object$entries3.length;_i4++){var _Object$entries3$_i=_slicedToArray(_Object$entries3[_i4],2),_key2=_Object$entries3$_i[0],_value5=_Object$entries3$_i[1];object[_key2]=_convertMapToPlainObject(_value5,deep)}else if(Array.isArray(object)){var index=0;for(var _i5=0,_arr=object;_i5<_arr.length;_i5++){var _value6=_arr[_i5];object[index]=_convertMapToPlainObject(_value6,deep);index+=1}}else if((0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isSet */ .vM)(object)){var cache=[];var _iterator7=_createForOfIteratorHelper(object),_step7;try{for(_iterator7.s();!(_step7=_iterator7.n()).done;){var _value8=_step7.value;object.delete(_value8);cache.push(_convertMapToPlainObject(_value8,deep))}}catch(err){_iterator7.e(err)}finally{_iterator7.f()}for(var _i6=0,_cache2=cache;_i6<_cache2.length;_i6++){var _value7=_cache2[_i6];object.add(_value7)}}}return object};/**
|
|
163
132
|
* Converts given plain object and all nested found objects to
|
|
164
133
|
* corresponding map.
|
|
165
134
|
* @param object - Object to convert to.
|
|
166
135
|
* @param deep - Indicates whether to perform a recursive conversion.
|
|
167
136
|
* @returns Given object as map.
|
|
168
|
-
*/
|
|
169
|
-
export const convertPlainObjectToMap = (object, deep = true) => {
|
|
170
|
-
if (typeof object === 'object') {
|
|
171
|
-
if (isPlainObject(object)) {
|
|
172
|
-
const newObject = new Map();
|
|
173
|
-
for (const [key, value] of Object.entries(object)) {
|
|
174
|
-
if (deep) object[key] = convertPlainObjectToMap(value, deep);
|
|
175
|
-
newObject.set(key, object[key]);
|
|
176
|
-
}
|
|
177
|
-
return newObject;
|
|
178
|
-
}
|
|
179
|
-
if (deep) if (Array.isArray(object)) {
|
|
180
|
-
let index = 0;
|
|
181
|
-
for (const value of object) {
|
|
182
|
-
object[index] = convertPlainObjectToMap(value, deep);
|
|
183
|
-
index += 1;
|
|
184
|
-
}
|
|
185
|
-
} else if (isMap(object)) for (const [key, value] of object) object.set(key, convertPlainObjectToMap(value, deep));else if (isSet(object)) {
|
|
186
|
-
const cache = [];
|
|
187
|
-
for (const value of object) {
|
|
188
|
-
object.delete(value);
|
|
189
|
-
cache.push(convertPlainObjectToMap(value, deep));
|
|
190
|
-
}
|
|
191
|
-
for (const value of cache) object.add(value);
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
return object;
|
|
195
|
-
};
|
|
196
|
-
/**
|
|
137
|
+
*/var _convertPlainObjectToMap=function convertPlainObjectToMap(object,deep){if(deep===void 0){deep=true}if(_typeof(object)==="object"){if((0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isPlainObject */ .Qd)(object)){var newObject=new Map;for(var _i7=0,_Object$entries4=Object.entries(object);_i7<_Object$entries4.length;_i7++){var _Object$entries4$_i=_slicedToArray(_Object$entries4[_i7],2),key=_Object$entries4$_i[0],value=_Object$entries4$_i[1];if(deep)object[key]=_convertPlainObjectToMap(value,deep);newObject.set(key,object[key])}return newObject}if(deep)if(Array.isArray(object)){var index=0;for(var _i8=0,_arr2=object;_i8<_arr2.length;_i8++){var _value9=_arr2[_i8];object[index]=_convertPlainObjectToMap(_value9,deep);index+=1}}else if((0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isMap */ .jh)(object)){var _iterator8=_createForOfIteratorHelper(object),_step8;try{for(_iterator8.s();!(_step8=_iterator8.n()).done;){var _step8$value=_slicedToArray(_step8.value,2),_key3=_step8$value[0],_value0=_step8$value[1];object.set(_key3,_convertPlainObjectToMap(_value0,deep))}}catch(err){_iterator8.e(err)}finally{_iterator8.f()}}else if((0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isSet */ .vM)(object)){var cache=[];var _iterator9=_createForOfIteratorHelper(object),_step9;try{for(_iterator9.s();!(_step9=_iterator9.n()).done;){var _value10=_step9.value;object.delete(_value10);cache.push(_convertPlainObjectToMap(_value10,deep))}}catch(err){_iterator9.e(err)}finally{_iterator9.f()}for(var _i9=0,_cache3=cache;_i9<_cache3.length;_i9++){var _value1=_cache3[_i9];object.add(_value1)}}}return object};/**
|
|
197
138
|
* Replaces given pattern in each value in given object recursively with
|
|
198
139
|
* given string replacement.
|
|
199
140
|
* @param object - Object to convert substrings in.
|
|
200
141
|
* @param pattern - Regular expression to replace.
|
|
201
142
|
* @param replacement - String to use as replacement for found patterns.
|
|
202
143
|
* @returns Converted object with replaced patterns.
|
|
203
|
-
*/
|
|
204
|
-
export const convertSubstringInPlainObject = (object, pattern, replacement) => {
|
|
205
|
-
for (const [key, value] of Object.entries(object)) if (isPlainObject(value)) object[key] = convertSubstringInPlainObject(value, pattern, replacement);else if (typeof value === 'string') object[key] = value.replace(pattern, replacement);
|
|
206
|
-
return object;
|
|
207
|
-
};
|
|
208
|
-
/* eslint-disable jsdoc/require-description-complete-sentence */
|
|
209
|
-
/**
|
|
144
|
+
*/var _convertSubstringInPlainObject=function convertSubstringInPlainObject(object,pattern,replacement){for(var _i0=0,_Object$entries5=Object.entries(object);_i0<_Object$entries5.length;_i0++){var _Object$entries5$_i=_slicedToArray(_Object$entries5[_i0],2),key=_Object$entries5$_i[0],value=_Object$entries5$_i[1];if((0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isPlainObject */ .Qd)(value))object[key]=_convertSubstringInPlainObject(value,pattern,replacement);else if(typeof value==="string")object[key]=value.replace(pattern,replacement)}return object};/* eslint-disable jsdoc/require-description-complete-sentence *//**
|
|
210
145
|
* Copies given object (of any type) into optionally given destination.
|
|
211
146
|
* @param source - Object to copy.
|
|
212
147
|
* @param copyBlobs - Determines whether to copy blobs as well.
|
|
@@ -223,60 +158,11 @@ export const convertSubstringInPlainObject = (object, pattern, replacement) => {
|
|
|
223
158
|
* @param recursionLevel - Internally used to track current recursion level in
|
|
224
159
|
* given source data structure.
|
|
225
160
|
* @returns Value "true" if both objects are equal and "false" otherwise.
|
|
226
|
-
*/
|
|
227
|
-
export const copy = (source, copyBlobs = false, recursionLimit = -1, recursionEndValue = VALUE_COPY_SYMBOL, destination = null, cyclic = false, knownReferences = [], recursionLevel = 0) => {
|
|
228
|
-
/* eslint-enable jsdoc/require-description-complete-sentence */
|
|
229
|
-
if (isObject(source)) if (destination) {
|
|
230
|
-
if (source === destination) throw new Error(`Can't copy because source and destination are ` + 'identical.');
|
|
231
|
-
if (!cyclic && ![undefined, null].includes(source)) {
|
|
232
|
-
const index = knownReferences.indexOf(source);
|
|
233
|
-
if (index !== -1) return knownReferences[index];
|
|
234
|
-
knownReferences.push(source);
|
|
235
|
-
}
|
|
236
|
-
const copyValue = value => {
|
|
237
|
-
if (recursionLimit !== -1 && recursionLimit < recursionLevel + 1) return recursionEndValue === VALUE_COPY_SYMBOL ? value : recursionEndValue;
|
|
238
|
-
const result = copy(value, copyBlobs, recursionLimit, recursionEndValue, null, cyclic, knownReferences, recursionLevel + 1);
|
|
239
|
-
if (!cyclic && ![undefined, null].includes(value) && typeof value === 'object') knownReferences.push(value);
|
|
240
|
-
return result;
|
|
241
|
-
};
|
|
242
|
-
if (Array.isArray(source)) for (const item of source) destination.push(copyValue(item));else if (source instanceof Map) for (const [key, value] of source) destination.set(key, copyValue(value));else if (source instanceof Set) for (const value of source) destination.add(copyValue(value));else for (const [key, value] of Object.entries(source)) try {
|
|
243
|
-
destination[key] = copyValue(value);
|
|
244
|
-
} catch (error) {
|
|
245
|
-
throw new Error('Failed to copy property value object "' + `${key}": ${represent(error)}`, {
|
|
246
|
-
cause: error
|
|
247
|
-
});
|
|
248
|
-
}
|
|
249
|
-
} else {
|
|
250
|
-
if (Array.isArray(source)) return copy(source, copyBlobs, recursionLimit, recursionEndValue, [], cyclic, knownReferences, recursionLevel);
|
|
251
|
-
if (source instanceof Map) return copy(source, copyBlobs, recursionLimit, recursionEndValue, new Map(), cyclic, knownReferences, recursionLevel);
|
|
252
|
-
if (source instanceof Set) return copy(source, copyBlobs, recursionLimit, recursionEndValue, new Set(), cyclic, knownReferences, recursionLevel);
|
|
253
|
-
if (source instanceof Date) return new Date(source.getTime());
|
|
254
|
-
if (source instanceof RegExp) {
|
|
255
|
-
const modifier = /[^/]*$/.exec(source.toString());
|
|
256
|
-
destination = new RegExp(source.source, modifier ? modifier[0] : undefined);
|
|
257
|
-
destination.lastIndex = source.lastIndex;
|
|
258
|
-
return destination;
|
|
259
|
-
}
|
|
260
|
-
if (typeof Blob !== 'undefined' && source instanceof Blob) return copyBlobs ? source.slice(0, source.size, source.type) : source;
|
|
261
|
-
return copy(source, copyBlobs, recursionLimit, recursionEndValue, {}, cyclic, knownReferences, recursionLevel);
|
|
262
|
-
}
|
|
263
|
-
return destination || source;
|
|
264
|
-
};
|
|
265
|
-
/**
|
|
161
|
+
*/var _copy=function copy(source,copyBlobs,recursionLimit,recursionEndValue,destination,cyclic,knownReferences,recursionLevel){if(copyBlobs===void 0){copyBlobs=false}if(recursionLimit===void 0){recursionLimit=-1}if(recursionEndValue===void 0){recursionEndValue=_constants_js__WEBPACK_IMPORTED_MODULE_2__/* .VALUE_COPY_SYMBOL */ .Fp}if(destination===void 0){destination=null}if(cyclic===void 0){cyclic=false}if(knownReferences===void 0){knownReferences=[]}if(recursionLevel===void 0){recursionLevel=0}/* eslint-enable jsdoc/require-description-complete-sentence */if((0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isObject */ .Gv)(source))if(destination){if(source===destination)throw new Error("Can't copy because source and destination are "+"identical.");if(!cyclic&&![undefined,null].includes(source)){var index=knownReferences.indexOf(source);if(index!==-1)return knownReferences[index];knownReferences.push(source)}var copyValue=function copyValue(value){if(recursionLimit!==-1&&recursionLimit<recursionLevel+1)return recursionEndValue===_constants_js__WEBPACK_IMPORTED_MODULE_2__/* .VALUE_COPY_SYMBOL */ .Fp?value:recursionEndValue;var result=_copy(value,copyBlobs,recursionLimit,recursionEndValue,null,cyclic,knownReferences,recursionLevel+1);if(!cyclic&&![undefined,null].includes(value)&&_typeof(value)==="object")knownReferences.push(value);return result};if(Array.isArray(source)){var _iterator0=_createForOfIteratorHelper(source),_step0;try{for(_iterator0.s();!(_step0=_iterator0.n()).done;){var item=_step0.value;destination.push(copyValue(item))}}catch(err){_iterator0.e(err)}finally{_iterator0.f()}}else if(source instanceof Map){var _iterator1=_createForOfIteratorHelper(source),_step1;try{for(_iterator1.s();!(_step1=_iterator1.n()).done;){var _step1$value=_slicedToArray(_step1.value,2),key=_step1$value[0],value=_step1$value[1];destination.set(key,copyValue(value))}}catch(err){_iterator1.e(err)}finally{_iterator1.f()}}else if(source instanceof Set){var _iterator10=_createForOfIteratorHelper(source),_step10;try{for(_iterator10.s();!(_step10=_iterator10.n()).done;){var _value11=_step10.value;destination.add(copyValue(_value11))}}catch(err){_iterator10.e(err)}finally{_iterator10.f()}}else for(var _i1=0,_Object$entries6=Object.entries(source);_i1<_Object$entries6.length;_i1++){var _Object$entries6$_i=_slicedToArray(_Object$entries6[_i1],2),_key4=_Object$entries6$_i[0],_value12=_Object$entries6$_i[1];try{destination[_key4]=copyValue(_value12)}catch(error){throw new Error("Failed to copy property value object \""+"".concat(_key4,"\": ").concat(_represent(error)),{cause:error})}}}else{if(Array.isArray(source))return _copy(source,copyBlobs,recursionLimit,recursionEndValue,[],cyclic,knownReferences,recursionLevel);if(source instanceof Map)return _copy(source,copyBlobs,recursionLimit,recursionEndValue,new Map,cyclic,knownReferences,recursionLevel);if(source instanceof Set)return _copy(source,copyBlobs,recursionLimit,recursionEndValue,new Set,cyclic,knownReferences,recursionLevel);if(source instanceof Date)return new Date(source.getTime());if(source instanceof RegExp){var modifier=/[^/]*$/.exec(source.toString());destination=new RegExp(source.source,modifier?modifier[0]:undefined);destination.lastIndex=source.lastIndex;return destination}if(typeof Blob!=="undefined"&&source instanceof Blob)return copyBlobs?source.slice(0,source.size,source.type):source;return _copy(source,copyBlobs,recursionLimit,recursionEndValue,{},cyclic,knownReferences,recursionLevel)}return destination||source};/**
|
|
266
162
|
* Determine the internal JavaScript [[Class]] of an object.
|
|
267
163
|
* @param value - Value to analyze.
|
|
268
164
|
* @returns Name of determined type.
|
|
269
|
-
*/
|
|
270
|
-
export const determineType = value => {
|
|
271
|
-
if ([null, undefined].includes(value)) return String(value);
|
|
272
|
-
const type = typeof value;
|
|
273
|
-
if (['function', 'object'].includes(type) && 'toString' in value) {
|
|
274
|
-
const stringRepresentation = Object.prototype.toString.call(value);
|
|
275
|
-
if (Object.prototype.hasOwnProperty.call(CLASS_TO_TYPE_MAPPING, stringRepresentation)) return CLASS_TO_TYPE_MAPPING[stringRepresentation];
|
|
276
|
-
}
|
|
277
|
-
return type;
|
|
278
|
-
};
|
|
279
|
-
/**
|
|
165
|
+
*/var determineType=function determineType(value){if([null,undefined].includes(value))return String(value);var type=_typeof(value);if(["function","object"].includes(type)&&"toString"in value){var stringRepresentation=Object.prototype.toString.call(value);if(Object.prototype.hasOwnProperty.call(_constants_js__WEBPACK_IMPORTED_MODULE_2__/* .CLASS_TO_TYPE_MAPPING */ .rq,stringRepresentation))return _constants_js__WEBPACK_IMPORTED_MODULE_2__/* .CLASS_TO_TYPE_MAPPING */ .rq[stringRepresentation]}return type};/**
|
|
280
166
|
* Returns true if given items are equal for given property list. If
|
|
281
167
|
* property list isn't set all properties will be checked. All keys which
|
|
282
168
|
* starts with one of the exception prefixes will be omitted.
|
|
@@ -300,146 +186,18 @@ export const determineType = value => {
|
|
|
300
186
|
* If "compareBlobs" is activated, and we're running in a browser like
|
|
301
187
|
* environment and binary data is given, then a promise wrapping the
|
|
302
188
|
* determined boolean values is returned.
|
|
303
|
-
*/
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
if (options.compareBlobs && typeof Blob !== 'undefined' && firstValue instanceof Blob && secondValue instanceof Blob) return new Promise(resolve => {
|
|
316
|
-
const values = [];
|
|
317
|
-
for (const value of [firstValue, secondValue]) {
|
|
318
|
-
const fileReader = new FileReader();
|
|
319
|
-
fileReader.onload = event => {
|
|
320
|
-
if (event.target === null) values.push(null);else values.push(event.target.result);
|
|
321
|
-
if (values.length === 2) if (values[0] === values[1]) resolve(true);else resolve(options.returnReasonIfNotEqual ? `>>> Blob(${represent(values[0])}) !== ` + `Blob(${represent(values[1])})` : false);
|
|
322
|
-
};
|
|
323
|
-
fileReader.readAsDataURL(value);
|
|
324
|
-
}
|
|
325
|
-
});
|
|
326
|
-
if (isPlainObject(firstValue) && isPlainObject(secondValue) && !(firstValue instanceof RegExp || secondValue instanceof RegExp) || Array.isArray(firstValue) && Array.isArray(secondValue) && firstValue.length === secondValue.length || determineType(firstValue) === determineType(secondValue) && ['map', 'set'].includes(determineType(firstValue)) && firstValue.size === secondValue.size) {
|
|
327
|
-
const promises = [];
|
|
328
|
-
for (const [first, second] of [[firstValue, secondValue], [secondValue, firstValue]]) {
|
|
329
|
-
const firstIsArray = Array.isArray(first);
|
|
330
|
-
if (firstIsArray && (!Array.isArray(second) || first.length !== second.length)) return options.returnReasonIfNotEqual ? '.length' : false;
|
|
331
|
-
const firstIsMap = isMap(first);
|
|
332
|
-
if (firstIsMap && (!isMap(second) || first.size !== second.size)) return options.returnReasonIfNotEqual ? '.size' : false;
|
|
333
|
-
const firstIsSet = isSet(first);
|
|
334
|
-
if (firstIsSet && (!isSet(second) || first.size !== second.size)) return options.returnReasonIfNotEqual ? '.size' : false;
|
|
335
|
-
if (firstIsArray) {
|
|
336
|
-
let index = 0;
|
|
337
|
-
for (const value of first) {
|
|
338
|
-
if (options.deep !== 0) {
|
|
339
|
-
const result = equals(value, second[index], {
|
|
340
|
-
...options,
|
|
341
|
-
deep: options.deep - 1
|
|
342
|
-
});
|
|
343
|
-
if (!result) return false;
|
|
344
|
-
const currentIndex = index;
|
|
345
|
-
const determineResult = result => typeof result === 'string' ? `[${String(currentIndex)}]` + ({
|
|
346
|
-
'[': '',
|
|
347
|
-
'>': ' '
|
|
348
|
-
}[result[0]] ?? '.') + result : result;
|
|
349
|
-
if (Object.prototype.hasOwnProperty.call(result, 'then')) promises.push(result.then(determineResult));
|
|
350
|
-
if (typeof result === 'string') return determineResult(result);
|
|
351
|
-
}
|
|
352
|
-
index += 1;
|
|
353
|
-
}
|
|
354
|
-
} else if (firstIsMap) {
|
|
355
|
-
for (const [key, value] of first) if (options.deep !== 0) {
|
|
356
|
-
const result = equals(value, second.get(key), {
|
|
357
|
-
...options,
|
|
358
|
-
deep: options.deep - 1
|
|
359
|
-
});
|
|
360
|
-
if (!result) return false;
|
|
361
|
-
const determineResult = result => typeof result === 'string' ? `get(${represent(key)})` + ({
|
|
362
|
-
'[': '',
|
|
363
|
-
'>': ' '
|
|
364
|
-
}[result[0]] ?? '.') + result : result;
|
|
365
|
-
if (Object.prototype.hasOwnProperty.call(result, 'then')) promises.push(result.then(determineResult));
|
|
366
|
-
if (typeof result === 'string') return determineResult(result);
|
|
367
|
-
}
|
|
368
|
-
} else if (firstIsSet) {
|
|
369
|
-
for (const value of first) if (options.deep !== 0) {
|
|
370
|
-
let equal = false;
|
|
371
|
-
const subPromises = [];
|
|
372
|
-
/*
|
|
373
|
-
NOTE: Check if their exists at least one being
|
|
374
|
-
equally.
|
|
375
|
-
*/
|
|
376
|
-
for (const secondValue of second) {
|
|
377
|
-
const result = equals(value, secondValue, {
|
|
378
|
-
...options,
|
|
379
|
-
deep: options.deep - 1
|
|
380
|
-
});
|
|
381
|
-
if (typeof result === 'boolean') {
|
|
382
|
-
if (result) {
|
|
383
|
-
equal = true;
|
|
384
|
-
break;
|
|
385
|
-
}
|
|
386
|
-
} else subPromises.push(result);
|
|
387
|
-
}
|
|
388
|
-
const determineResult = equal => equal ? true : options.returnReasonIfNotEqual ? `>>> {-> ${represent(value)} not found}` : false;
|
|
389
|
-
if (equal)
|
|
390
|
-
/*
|
|
391
|
-
NOTE: We do not have to wait for promises to be
|
|
392
|
-
resolved when one match could be found.
|
|
393
|
-
*/
|
|
394
|
-
continue;
|
|
395
|
-
if (subPromises.length) promises.push(new Promise(resolve => {
|
|
396
|
-
Promise.all(subPromises).then(results => {
|
|
397
|
-
resolve(determineResult(results.some(result => result)));
|
|
398
|
-
}, () => {
|
|
399
|
-
// Do nothing.
|
|
400
|
-
});
|
|
401
|
-
}));
|
|
402
|
-
return determineResult(false);
|
|
403
|
-
}
|
|
404
|
-
} else for (const [key, value] of Object.entries(first)) {
|
|
405
|
-
if (options.properties && !options.properties.includes(key)) break;
|
|
406
|
-
let doBreak = false;
|
|
407
|
-
for (const exceptionPrefix of options.exceptionPrefixes) if (key.startsWith(exceptionPrefix)) {
|
|
408
|
-
doBreak = true;
|
|
409
|
-
break;
|
|
410
|
-
}
|
|
411
|
-
if (doBreak) break;
|
|
412
|
-
if (options.deep !== 0) {
|
|
413
|
-
const result = equals(value, second[key], {
|
|
414
|
-
...options,
|
|
415
|
-
deep: options.deep - 1
|
|
416
|
-
});
|
|
417
|
-
if (!result) return false;
|
|
418
|
-
const determineResult = result => typeof result === 'string' ? key + ({
|
|
419
|
-
'[': '',
|
|
420
|
-
'>': ' '
|
|
421
|
-
}[result[0]] ?? '.') + result : result;
|
|
422
|
-
if (Object.prototype.hasOwnProperty.call(result, 'then')) promises.push(result.then(determineResult));
|
|
423
|
-
if (typeof result === 'string') return determineResult(result);
|
|
424
|
-
}
|
|
425
|
-
}
|
|
426
|
-
}
|
|
427
|
-
if (promises.length) return new Promise(resolve => {
|
|
428
|
-
Promise.all(promises).then(results => {
|
|
429
|
-
for (const result of results) if (!result || typeof result === 'string') {
|
|
430
|
-
resolve(result);
|
|
431
|
-
break;
|
|
432
|
-
}
|
|
433
|
-
resolve(true);
|
|
434
|
-
}, () => {
|
|
435
|
-
// Do nothing.
|
|
436
|
-
});
|
|
437
|
-
});
|
|
438
|
-
return true;
|
|
439
|
-
}
|
|
440
|
-
return options.returnReasonIfNotEqual ? `>>> ${represent(firstValue)} !== ${represent(secondValue)}` : false;
|
|
441
|
-
};
|
|
442
|
-
/**
|
|
189
|
+
*/var _equals=function equals(firstValue,secondValue,givenOptions){if(givenOptions===void 0){givenOptions={}}var options=_objectSpread({compareBlobs:false,deep:-1,exceptionPrefixes:[],ignoreFunctions:true,properties:null,returnReasonIfNotEqual:false},givenOptions);if(options.ignoreFunctions&&(0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isFunction */ .Tn)(firstValue)&&(0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isFunction */ .Tn)(secondValue)||firstValue===secondValue||(0,_number_js__WEBPACK_IMPORTED_MODULE_4__/* .isNotANumber */ .W2)(firstValue)&&(0,_number_js__WEBPACK_IMPORTED_MODULE_4__/* .isNotANumber */ .W2)(secondValue)||firstValue instanceof RegExp&&secondValue instanceof RegExp&&firstValue.toString()===secondValue.toString()&&firstValue.flags.split("").sort().join("")===secondValue.flags.split("").sort().join("")||firstValue instanceof Date&&secondValue instanceof Date&&(isNaN(firstValue.getTime())&&isNaN(secondValue.getTime())||!isNaN(firstValue.getTime())&&!isNaN(secondValue.getTime())&&firstValue.getTime()===secondValue.getTime())||options.compareBlobs&&eval("typeof Buffer")!=="undefined"&&Object.prototype.hasOwnProperty.call(eval("Buffer"),"isBuffer")&&firstValue instanceof eval("Buffer")&&secondValue instanceof eval("Buffer")&&firstValue.toString("base64")===secondValue.toString("base64"))return true;if(options.compareBlobs&&typeof Blob!=="undefined"&&firstValue instanceof Blob&&secondValue instanceof Blob)return new Promise(function(resolve){var values=[];for(var _i10=0,_arr3=[firstValue,secondValue];_i10<_arr3.length;_i10++){var value=_arr3[_i10];var fileReader=new FileReader;fileReader.onload=function(event){if(event.target===null)values.push(null);else values.push(event.target.result);if(values.length===2)if(values[0]===values[1])resolve(true);else resolve(options.returnReasonIfNotEqual?">>> Blob(".concat(_represent(values[0]),") !== ")+"Blob(".concat(_represent(values[1]),")"):false)};fileReader.readAsDataURL(value)}});if((0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isPlainObject */ .Qd)(firstValue)&&(0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isPlainObject */ .Qd)(secondValue)&&!(firstValue instanceof RegExp||secondValue instanceof RegExp)||Array.isArray(firstValue)&&Array.isArray(secondValue)&&firstValue.length===secondValue.length||determineType(firstValue)===determineType(secondValue)&&["map","set"].includes(determineType(firstValue))&&firstValue.size===secondValue.size){var promises=[];for(var _i11=0,_arr4=[[firstValue,secondValue],[secondValue,firstValue]];_i11<_arr4.length;_i11++){var _arr4$_i=_slicedToArray(_arr4[_i11],2),first=_arr4$_i[0],second=_arr4$_i[1];var firstIsArray=Array.isArray(first);if(firstIsArray&&(!Array.isArray(second)||first.length!==second.length))return options.returnReasonIfNotEqual?".length":false;var firstIsMap=(0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isMap */ .jh)(first);if(firstIsMap&&(!(0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isMap */ .jh)(second)||first.size!==second.size))return options.returnReasonIfNotEqual?".size":false;var firstIsSet=(0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isSet */ .vM)(first);if(firstIsSet&&(!(0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isSet */ .vM)(second)||first.size!==second.size))return options.returnReasonIfNotEqual?".size":false;if(firstIsArray){var index=0;var _loop2=function _loop2(){var value=_arr5[_i12];if(options.deep!==0){var result=_equals(value,second[index],_objectSpread(_objectSpread({},options),{},{deep:options.deep-1}));if(!result)return{v:false};var currentIndex=index;var determineResult=function determineResult(result){var _$$result$;return typeof result==="string"?"[".concat(String(currentIndex),"]")+((_$$result$={"[":"",">":" "}[result[0]])!==null&&_$$result$!==void 0?_$$result$:".")+result:result};if(Object.prototype.hasOwnProperty.call(result,"then"))promises.push(result.then(determineResult));if(typeof result==="string")return{v:determineResult(result)}}index+=1},_ret2;for(var _i12=0,_arr5=first;_i12<_arr5.length;_i12++){_ret2=_loop2();if(_ret2)return _ret2.v}}else if(firstIsMap){var _iterator11=_createForOfIteratorHelper(first),_step11;try{var _loop3=function _loop3(){var _step11$value=_slicedToArray(_step11.value,2),key=_step11$value[0],value=_step11$value[1];if(options.deep!==0){var result=_equals(value,second.get(key),_objectSpread(_objectSpread({},options),{},{deep:options.deep-1}));if(!result)return{v:false};var determineResult=function determineResult(result){var _$$result$2;return typeof result==="string"?"get(".concat(_represent(key),")")+((_$$result$2={"[":"",">":" "}[result[0]])!==null&&_$$result$2!==void 0?_$$result$2:".")+result:result};if(Object.prototype.hasOwnProperty.call(result,"then"))promises.push(result.then(determineResult));if(typeof result==="string")return{v:determineResult(result)}}},_ret3;for(_iterator11.s();!(_step11=_iterator11.n()).done;){_ret3=_loop3();if(_ret3)return _ret3.v}}catch(err){_iterator11.e(err)}finally{_iterator11.f()}}else if(firstIsSet){var _iterator12=_createForOfIteratorHelper(first),_step12;try{var _loop4=function _loop4(){var value=_step12.value;if(options.deep!==0){var equal=false;var subPromises=[];/*
|
|
190
|
+
NOTE: Check if their exists at least one being
|
|
191
|
+
equally.
|
|
192
|
+
*/var _iterator13=_createForOfIteratorHelper(second),_step13;try{for(_iterator13.s();!(_step13=_iterator13.n()).done;){var _secondValue=_step13.value;var result=_equals(value,_secondValue,_objectSpread(_objectSpread({},options),{},{deep:options.deep-1}));if(typeof result==="boolean"){if(result){equal=true;break}}else subPromises.push(result)}}catch(err){_iterator13.e(err)}finally{_iterator13.f()}var determineResult=function determineResult(equal){return equal?true:options.returnReasonIfNotEqual?">>> {-> ".concat(_represent(value)," not found}"):false};if(equal)/*
|
|
193
|
+
NOTE: We do not have to wait for promises to be
|
|
194
|
+
resolved when one match could be found.
|
|
195
|
+
*/return 0;// continue
|
|
196
|
+
if(subPromises.length)promises.push(new Promise(function(resolve){Promise.all(subPromises).then(function(results){resolve(determineResult(results.some(function(result){return result})))},function(){// Do nothing.
|
|
197
|
+
})}));return{v:determineResult(false)}}},_ret4;for(_iterator12.s();!(_step12=_iterator12.n()).done;){_ret4=_loop4();if(_ret4===0)continue;if(_ret4)return _ret4.v}}catch(err){_iterator12.e(err)}finally{_iterator12.f()}}else{var _loop5=function _loop5(){var _Object$entries7$_i=_slicedToArray(_Object$entries7[_i13],2),key=_Object$entries7$_i[0],value=_Object$entries7$_i[1];if(options.properties&&!options.properties.includes(key))return 0;// break
|
|
198
|
+
var doBreak=false;var _iterator14=_createForOfIteratorHelper(options.exceptionPrefixes),_step14;try{for(_iterator14.s();!(_step14=_iterator14.n()).done;){var exceptionPrefix=_step14.value;if(key.startsWith(exceptionPrefix)){doBreak=true;break}}}catch(err){_iterator14.e(err)}finally{_iterator14.f()}if(doBreak)return 0;// break
|
|
199
|
+
if(options.deep!==0){var result=_equals(value,second[key],_objectSpread(_objectSpread({},options),{},{deep:options.deep-1}));if(!result)return{v:false};var determineResult=function determineResult(result){var _$$result$3;return typeof result==="string"?key+((_$$result$3={"[":"",">":" "}[result[0]])!==null&&_$$result$3!==void 0?_$$result$3:".")+result:result};if(Object.prototype.hasOwnProperty.call(result,"then"))promises.push(result.then(determineResult));if(typeof result==="string")return{v:determineResult(result)}}},_ret5;for(var _i13=0,_Object$entries7=Object.entries(first);_i13<_Object$entries7.length;_i13++){_ret5=_loop5();if(_ret5===0)break;if(_ret5)return _ret5.v}}}if(promises.length)return new Promise(function(resolve){Promise.all(promises).then(function(results){var _iterator15=_createForOfIteratorHelper(results),_step15;try{for(_iterator15.s();!(_step15=_iterator15.n()).done;){var result=_step15.value;if(!result||typeof result==="string"){resolve(result);break}}}catch(err){_iterator15.e(err)}finally{_iterator15.f()}resolve(true)},function(){// Do nothing.
|
|
200
|
+
})});return true}return options.returnReasonIfNotEqual?">>> ".concat(_represent(firstValue)," !== ").concat(_represent(secondValue)):false};/**
|
|
443
201
|
* Wraps given data structure into proxies recursively to evaluate and resolve
|
|
444
202
|
* each get request to data having an object with indicating keys and replaces
|
|
445
203
|
* that object with corresponding evaluated values. All nested objects are
|
|
@@ -454,95 +212,16 @@ export const equals = (firstValue, secondValue, givenOptions = {}) => {
|
|
|
454
212
|
* @param givenOptions.executionIndicatorKey - Indicator property name to mark
|
|
455
213
|
* a value to evaluate.
|
|
456
214
|
* @returns Evaluated given mapping.
|
|
457
|
-
*/
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
if (!(options.selfReferenceName in options.scope)) options.scope[options.selfReferenceName] = object;
|
|
468
|
-
const internalEvaluateAndThrowError = (code, type = options.expressionIndicatorKey) => evaluateAndThrowError(code, options.scope, type === options.executionIndicatorKey);
|
|
469
|
-
const addProxyRecursively = data => {
|
|
470
|
-
if (typeof data !== 'object' || data === null || typeof Proxy === 'undefined') return data;
|
|
471
|
-
for (const [key, givenValue] of Object.entries(data)) if (key !== '__target__' && isObject(givenValue)) {
|
|
472
|
-
const value = givenValue;
|
|
473
|
-
addProxyRecursively(value);
|
|
474
|
-
// NOTE: We only wrap needed objects for performance reasons.
|
|
475
|
-
if (Object.prototype.hasOwnProperty.call(value, options.expressionIndicatorKey) || Object.prototype.hasOwnProperty.call(value, options.executionIndicatorKey)) {
|
|
476
|
-
const backup = value;
|
|
477
|
-
data[key] = new Proxy(value, {
|
|
478
|
-
get: (target, key) => {
|
|
479
|
-
if (key === '__target__') return target;
|
|
480
|
-
if (key === 'hasOwnProperty') return target[key];
|
|
481
|
-
|
|
482
|
-
/*
|
|
483
|
-
NOTE: Very complicated section, do only
|
|
484
|
-
changes while having good tests.
|
|
485
|
-
*/
|
|
486
|
-
for (const type of [options.expressionIndicatorKey, options.executionIndicatorKey]) if (key === type && typeof target[key] === 'string') return resolve(internalEvaluateAndThrowError(target[key], type));
|
|
487
|
-
const resolvedTarget = resolve(target);
|
|
488
|
-
if (key === 'toString') {
|
|
489
|
-
const result = internalEvaluateAndThrowError(resolvedTarget);
|
|
490
|
-
return result[key].bind(result);
|
|
491
|
-
}
|
|
492
|
-
if (typeof key !== 'string') {
|
|
493
|
-
const result = internalEvaluateAndThrowError(resolvedTarget);
|
|
494
|
-
if (result[key]?.bind) return result[key].bind(result);
|
|
495
|
-
return result[key];
|
|
496
|
-
}
|
|
497
|
-
for (const type of [options.expressionIndicatorKey, options.executionIndicatorKey]) if (Object.prototype.hasOwnProperty.call(target, type)) return internalEvaluateAndThrowError(resolvedTarget, type)[key];
|
|
498
|
-
return resolvedTarget[key];
|
|
499
|
-
// End of complicated stuff.
|
|
500
|
-
},
|
|
501
|
-
ownKeys: target => {
|
|
502
|
-
for (const type of [options.expressionIndicatorKey, options.executionIndicatorKey]) if (Object.prototype.hasOwnProperty.call(target, type)) return Object.getOwnPropertyNames(resolve(internalEvaluateAndThrowError(target[type], type)));
|
|
503
|
-
return Object.getOwnPropertyNames(target);
|
|
504
|
-
}
|
|
505
|
-
});
|
|
506
|
-
|
|
507
|
-
/*
|
|
508
|
-
NOTE: Known proxy polyfills does not provide the
|
|
509
|
-
"__target__" api.
|
|
510
|
-
*/
|
|
511
|
-
if (!data[key].__target__) data[key].__target__ = backup;
|
|
512
|
-
}
|
|
513
|
-
}
|
|
514
|
-
return data;
|
|
515
|
-
};
|
|
516
|
-
const resolve = data => {
|
|
517
|
-
if (isObject(data)) {
|
|
518
|
-
if (isProxy(data)) {
|
|
519
|
-
// NOTE: We have to skip "ownKeys" proxy trap here.
|
|
520
|
-
for (const type of [options.expressionIndicatorKey, options.executionIndicatorKey]) if (Object.prototype.hasOwnProperty.call(data, type)) return data[type];
|
|
521
|
-
data = data.__target__;
|
|
522
|
-
}
|
|
523
|
-
for (const [key, value] of Object.entries(data)) {
|
|
524
|
-
if ([options.expressionIndicatorKey, options.executionIndicatorKey].includes(key)) {
|
|
525
|
-
if (typeof Proxy === 'undefined') return resolve(internalEvaluateAndThrowError(value));
|
|
526
|
-
return value;
|
|
527
|
-
}
|
|
528
|
-
data[key] = resolve(value);
|
|
529
|
-
}
|
|
530
|
-
}
|
|
531
|
-
return data;
|
|
532
|
-
};
|
|
533
|
-
options.scope.resolve = resolve;
|
|
534
|
-
const removeProxyRecursively = data => {
|
|
535
|
-
if (isObject(data)) for (const [key, value] of Object.entries(data)) if (key !== '__target__' && value !== null && ['function', 'undefined'].includes(typeof value)) {
|
|
536
|
-
const target = value.__target__;
|
|
537
|
-
if (typeof target !== 'undefined') data[key] = target;
|
|
538
|
-
removeProxyRecursively(value);
|
|
539
|
-
}
|
|
540
|
-
return data;
|
|
541
|
-
};
|
|
542
|
-
if (Object.prototype.hasOwnProperty.call(object, options.expressionIndicatorKey)) return internalEvaluateAndThrowError(object[options.expressionIndicatorKey]);else if (Object.prototype.hasOwnProperty.call(object, options.executionIndicatorKey)) return internalEvaluateAndThrowError(object[options.executionIndicatorKey], options.executionIndicatorKey);
|
|
543
|
-
return removeProxyRecursively(resolve(addProxyRecursively(object)));
|
|
544
|
-
};
|
|
545
|
-
/**
|
|
215
|
+
*/var evaluateDynamicData=function evaluateDynamicData(object,givenOptions){if(givenOptions===void 0){givenOptions={}}var options=_objectSpread({scope:{},selfReferenceName:"self",expressionIndicatorKey:"__evaluate__",executionIndicatorKey:"__execute__"},givenOptions);if(_typeof(object)!=="object"||object===null)return object;if(!(options.selfReferenceName in options.scope))options.scope[options.selfReferenceName]=object;var internalEvaluateAndThrowError=function internalEvaluateAndThrowError(code,type){if(type===void 0){type=options.expressionIndicatorKey}return (0,_string_js__WEBPACK_IMPORTED_MODULE_5__/* .evaluateAndThrowError */ .nD)(code,options.scope,type===options.executionIndicatorKey)};var _addProxyRecursively=function addProxyRecursively(data){if(_typeof(data)!=="object"||data===null||typeof Proxy==="undefined")return data;for(var _i14=0,_Object$entries8=Object.entries(data);_i14<_Object$entries8.length;_i14++){var _Object$entries8$_i=_slicedToArray(_Object$entries8[_i14],2),key=_Object$entries8$_i[0],givenValue=_Object$entries8$_i[1];if(key!=="__target__"&&(0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isObject */ .Gv)(givenValue)){var value=givenValue;_addProxyRecursively(value);// NOTE: We only wrap needed objects for performance reasons.
|
|
216
|
+
if(Object.prototype.hasOwnProperty.call(value,options.expressionIndicatorKey)||Object.prototype.hasOwnProperty.call(value,options.executionIndicatorKey)){var backup=value;data[key]=new Proxy(value,{get:function get(target,key){if(key==="__target__")return target;if(key==="hasOwnProperty")return target[key];/*
|
|
217
|
+
NOTE: Very complicated section, do only
|
|
218
|
+
changes while having good tests.
|
|
219
|
+
*/for(var _i15=0,_arr6=[options.expressionIndicatorKey,options.executionIndicatorKey];_i15<_arr6.length;_i15++){var type=_arr6[_i15];if(key===type&&typeof target[key]==="string")return _resolve(internalEvaluateAndThrowError(target[key],type))}var resolvedTarget=_resolve(target);if(key==="toString"){var result=internalEvaluateAndThrowError(resolvedTarget);return result[key].bind(result)}if(typeof key!=="string"){var _result$key;var _result=internalEvaluateAndThrowError(resolvedTarget);if((_result$key=_result[key])!==null&&_result$key!==void 0&&_result$key.bind)return _result[key].bind(_result);return _result[key]}for(var _i16=0,_arr7=[options.expressionIndicatorKey,options.executionIndicatorKey];_i16<_arr7.length;_i16++){var _type=_arr7[_i16];if(Object.prototype.hasOwnProperty.call(target,_type))return internalEvaluateAndThrowError(resolvedTarget,_type)[key]}return resolvedTarget[key];// End of complicated stuff.
|
|
220
|
+
},ownKeys:function ownKeys(target){for(var _i17=0,_arr8=[options.expressionIndicatorKey,options.executionIndicatorKey];_i17<_arr8.length;_i17++){var type=_arr8[_i17];if(Object.prototype.hasOwnProperty.call(target,type))return Object.getOwnPropertyNames(_resolve(internalEvaluateAndThrowError(target[type],type)))}return Object.getOwnPropertyNames(target)}});/*
|
|
221
|
+
NOTE: Known proxy polyfills does not provide the
|
|
222
|
+
"__target__" api.
|
|
223
|
+
*/if(!data[key].__target__)data[key].__target__=backup}}}return data};var _resolve=function resolve(data){if((0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isObject */ .Gv)(data)){if((0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isProxy */ .ju)(data)){// NOTE: We have to skip "ownKeys" proxy trap here.
|
|
224
|
+
for(var _i18=0,_arr9=[options.expressionIndicatorKey,options.executionIndicatorKey];_i18<_arr9.length;_i18++){var type=_arr9[_i18];if(Object.prototype.hasOwnProperty.call(data,type))return data[type]}data=data.__target__}for(var _i19=0,_Object$entries9=Object.entries(data);_i19<_Object$entries9.length;_i19++){var _Object$entries9$_i=_slicedToArray(_Object$entries9[_i19],2),key=_Object$entries9$_i[0],value=_Object$entries9$_i[1];if([options.expressionIndicatorKey,options.executionIndicatorKey].includes(key)){if(typeof Proxy==="undefined")return _resolve(internalEvaluateAndThrowError(value));return value}data[key]=_resolve(value)}}return data};options.scope.resolve=_resolve;var _removeProxyRecursively=function removeProxyRecursively(data){if((0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isObject */ .Gv)(data))for(var _i20=0,_Object$entries0=Object.entries(data);_i20<_Object$entries0.length;_i20++){var _Object$entries0$_i=_slicedToArray(_Object$entries0[_i20],2),key=_Object$entries0$_i[0],value=_Object$entries0$_i[1];if(key!=="__target__"&&value!==null&&["function","undefined"].includes(_typeof(value))){var target=value.__target__;if(typeof target!=="undefined")data[key]=target;_removeProxyRecursively(value)}}return data};if(Object.prototype.hasOwnProperty.call(object,options.expressionIndicatorKey))return internalEvaluateAndThrowError(object[options.expressionIndicatorKey]);else if(Object.prototype.hasOwnProperty.call(object,options.executionIndicatorKey))return internalEvaluateAndThrowError(object[options.executionIndicatorKey],options.executionIndicatorKey);return _removeProxyRecursively(_resolve(_addProxyRecursively(object)))};/**
|
|
546
225
|
* Searches for indicating keys and replaces that data with corresponding
|
|
547
226
|
* evaluated and promise resolved value.
|
|
548
227
|
* @param data - Given mapping to resolve.
|
|
@@ -555,35 +234,12 @@ export const evaluateDynamicData = (object, givenOptions = {}) => {
|
|
|
555
234
|
* @param givenOptions.executionIndicatorKey - Indicator property name to mark
|
|
556
235
|
* a value to evaluate.
|
|
557
236
|
* @returns Evaluated given mapping.
|
|
558
|
-
*/
|
|
559
|
-
export const evaluateAsyncDynamicData = async (data, givenOptions = {}) => {
|
|
560
|
-
const options = {
|
|
561
|
-
scope: {},
|
|
562
|
-
selfReferenceName: 'self',
|
|
563
|
-
expressionIndicatorKey: '__await_evaluate__',
|
|
564
|
-
executionIndicatorKey: '__await_execute__',
|
|
565
|
-
...givenOptions
|
|
566
|
-
};
|
|
567
|
-
if (typeof data !== 'object' || data === null) return data;
|
|
568
|
-
if (!(options.selfReferenceName in options.scope)) options.scope[options.selfReferenceName] = data;
|
|
569
|
-
const result = data;
|
|
570
|
-
for (const [key, value] of Object.entries(data)) {
|
|
571
|
-
if ([options.expressionIndicatorKey, options.executionIndicatorKey].includes(key)) return await evaluateAndThrowError(value, options.scope, key === options.executionIndicatorKey);
|
|
572
|
-
if (isPlainObject(value)) result[key] = await evaluateAsyncDynamicData(value, options);
|
|
573
|
-
}
|
|
574
|
-
return result;
|
|
575
|
-
};
|
|
576
|
-
/**
|
|
237
|
+
*/var _evaluateAsyncDynamicData=/*#__PURE__*/function(){var _evaluateAsyncDynamicData2=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(data,givenOptions){var options,result,_i21,_Object$entries1,_Object$entries1$_i,key,value;return _regenerator().w(function(_context){while(1)switch(_context.n){case 0:if(givenOptions===void 0){givenOptions={}}options=_objectSpread({scope:{},selfReferenceName:"self",expressionIndicatorKey:"__await_evaluate__",executionIndicatorKey:"__await_execute__"},givenOptions);if(!(_typeof(data)!=="object"||data===null)){_context.n=1;break}return _context.a(2,data);case 1:if(!(options.selfReferenceName in options.scope))options.scope[options.selfReferenceName]=data;result=data;_i21=0,_Object$entries1=Object.entries(data);case 2:if(!(_i21<_Object$entries1.length)){_context.n=7;break}_Object$entries1$_i=_slicedToArray(_Object$entries1[_i21],2),key=_Object$entries1$_i[0],value=_Object$entries1$_i[1];if(![options.expressionIndicatorKey,options.executionIndicatorKey].includes(key)){_context.n=4;break}_context.n=3;return (0,_string_js__WEBPACK_IMPORTED_MODULE_5__/* .evaluateAndThrowError */ .nD)(value,options.scope,key===options.executionIndicatorKey);case 3:return _context.a(2,_context.v);case 4:if(!(0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isPlainObject */ .Qd)(value)){_context.n=6;break}_context.n=5;return _evaluateAsyncDynamicData(value,options);case 5:result[key]=_context.v;case 6:_i21++;_context.n=2;break;case 7:return _context.a(2,result)}},_callee)}));function evaluateAsyncDynamicData(_x,_x2){return _evaluateAsyncDynamicData2.apply(this,arguments)}return evaluateAsyncDynamicData}();/**
|
|
577
238
|
* Removes properties in objects where a dynamic indicator lives.
|
|
578
239
|
* @param data - Object to traverse recursively.
|
|
579
240
|
* @param expressionIndicators - Property key to remove.
|
|
580
241
|
* @returns Given object with removed properties.
|
|
581
|
-
*/
|
|
582
|
-
export const removeKeysInEvaluation = (data, expressionIndicators = ['__evaluate__', '__execute__']) => {
|
|
583
|
-
for (const [key, value] of Object.entries(data)) if (!expressionIndicators.includes(key) && expressionIndicators.some(name => Object.prototype.hasOwnProperty.call(data, name))) delete data[key];else if (isPlainObject(value)) removeKeysInEvaluation(value, expressionIndicators);
|
|
584
|
-
return data;
|
|
585
|
-
};
|
|
586
|
-
/**
|
|
242
|
+
*/var _removeKeysInEvaluation=function removeKeysInEvaluation(data,expressionIndicators){if(expressionIndicators===void 0){expressionIndicators=["__evaluate__","__execute__"]}for(var _i22=0,_Object$entries10=Object.entries(data);_i22<_Object$entries10.length;_i22++){var _Object$entries10$_i=_slicedToArray(_Object$entries10[_i22],2),key=_Object$entries10$_i[0],value=_Object$entries10$_i[1];if(!expressionIndicators.includes(key)&&expressionIndicators.some(function(name){return Object.prototype.hasOwnProperty.call(data,name)}))delete data[key];else if((0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isPlainObject */ .Qd)(value))_removeKeysInEvaluation(value,expressionIndicators)}return data};/**
|
|
587
243
|
* Extends given target object with given sources object. As target and
|
|
588
244
|
* sources many expandable types are allowed but target and sources have to
|
|
589
245
|
* come from the same type.
|
|
@@ -592,79 +248,16 @@ export const removeKeysInEvaluation = (data, expressionIndicators = ['__evaluate
|
|
|
592
248
|
* argument.
|
|
593
249
|
* @param additionalSources - Source objects to extend into target.
|
|
594
250
|
* @returns Returns given target extended with all given sources.
|
|
595
|
-
*/
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
let sources = additionalSources;
|
|
599
|
-
let target;
|
|
600
|
-
if (targetOrDeepIndicator === IGNORE_NULL_AND_UNDEFINED_SYMBOL || typeof targetOrDeepIndicator === 'boolean') {
|
|
601
|
-
// Handle a deep copy situation and skip deep indicator and target.
|
|
602
|
-
deep = targetOrDeepIndicator;
|
|
603
|
-
target = targetOrSource;
|
|
604
|
-
} else {
|
|
605
|
-
target = targetOrDeepIndicator;
|
|
606
|
-
if (isObject(targetOrSource)) sources = [targetOrSource, ...sources];else if (targetOrSource !== undefined) target = targetOrSource;
|
|
607
|
-
}
|
|
608
|
-
const mergeValue = (targetValue, value) => {
|
|
609
|
-
if (value === targetValue) return targetValue;
|
|
610
|
-
|
|
611
|
-
// Traverse recursively if we're merging plain objects or maps.
|
|
612
|
-
if (deep && value && (isPlainObject(value) || isMap(value))) {
|
|
613
|
-
let clone;
|
|
614
|
-
if (isMap(value)) clone = targetValue && isMap(targetValue) ? targetValue : new Map();else clone = targetValue && isPlainObject(targetValue) ? targetValue : {};
|
|
615
|
-
return extend(deep, clone, value);
|
|
616
|
-
}
|
|
617
|
-
return value;
|
|
618
|
-
};
|
|
619
|
-
for (const source of sources) {
|
|
620
|
-
let targetType = typeof target;
|
|
621
|
-
let sourceType = typeof source;
|
|
622
|
-
if (isMap(target)) targetType += ' Map';
|
|
623
|
-
if (isMap(source)) sourceType += ' Map';
|
|
624
|
-
if (targetType === sourceType && target !== source) {
|
|
625
|
-
if (isMap(target) && isMap(source)) for (const [key, value] of source) target.set(key, mergeValue(target.get(key), value));else if (isObject(target) && !Array.isArray(target) && !(typeof Blob !== 'undefined' && target instanceof Blob) && isObject(source) && !Array.isArray(source) && !(typeof Blob !== 'undefined' && source instanceof Blob)) {
|
|
626
|
-
for (const [key, value] of Object.entries(source)) if (!(deep === IGNORE_NULL_AND_UNDEFINED_SYMBOL && [null, undefined].includes(value))) target[key] = mergeValue(target[key], value);
|
|
627
|
-
} else target = source;
|
|
628
|
-
} else target = source;
|
|
629
|
-
}
|
|
630
|
-
return target;
|
|
631
|
-
};
|
|
632
|
-
/**
|
|
251
|
+
*/var _extend=function extend(targetOrDeepIndicator,targetOrSource){var deep=false;for(var _len=arguments.length,additionalSources=new Array(_len>2?_len-2:0),_key5=2;_key5<_len;_key5++){additionalSources[_key5-2]=arguments[_key5]}var sources=additionalSources;var target;if(targetOrDeepIndicator===_constants_js__WEBPACK_IMPORTED_MODULE_2__/* .IGNORE_NULL_AND_UNDEFINED_SYMBOL */ .p_||typeof targetOrDeepIndicator==="boolean"){// Handle a deep copy situation and skip deep indicator and target.
|
|
252
|
+
deep=targetOrDeepIndicator;target=targetOrSource}else{target=targetOrDeepIndicator;if((0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isObject */ .Gv)(targetOrSource))sources=[targetOrSource].concat(_toConsumableArray(sources));else if(targetOrSource!==undefined)target=targetOrSource}var mergeValue=function mergeValue(targetValue,value){if(value===targetValue)return targetValue;// Traverse recursively if we're merging plain objects or maps.
|
|
253
|
+
if(deep&&value&&((0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isPlainObject */ .Qd)(value)||(0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isMap */ .jh)(value))){var clone;if((0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isMap */ .jh)(value))clone=targetValue&&(0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isMap */ .jh)(targetValue)?targetValue:new Map;else clone=targetValue&&(0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isPlainObject */ .Qd)(targetValue)?targetValue:{};return _extend(deep,clone,value)}return value};var _iterator16=_createForOfIteratorHelper(sources),_step16;try{for(_iterator16.s();!(_step16=_iterator16.n()).done;){var source=_step16.value;var targetType=_typeof(target);var sourceType=_typeof(source);if((0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isMap */ .jh)(target))targetType+=" Map";if((0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isMap */ .jh)(source))sourceType+=" Map";if(targetType===sourceType&&target!==source){if((0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isMap */ .jh)(target)&&(0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isMap */ .jh)(source)){var _iterator17=_createForOfIteratorHelper(source),_step17;try{for(_iterator17.s();!(_step17=_iterator17.n()).done;){var _step17$value=_slicedToArray(_step17.value,2),key=_step17$value[0],value=_step17$value[1];target.set(key,mergeValue(target.get(key),value))}}catch(err){_iterator17.e(err)}finally{_iterator17.f()}}else if((0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isObject */ .Gv)(target)&&!Array.isArray(target)&&!(typeof Blob!=="undefined"&&target instanceof Blob)&&(0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isObject */ .Gv)(source)&&!Array.isArray(source)&&!(typeof Blob!=="undefined"&&source instanceof Blob)){for(var _i23=0,_Object$entries11=Object.entries(source);_i23<_Object$entries11.length;_i23++){var _Object$entries11$_i=_slicedToArray(_Object$entries11[_i23],2),_key6=_Object$entries11$_i[0],_value13=_Object$entries11$_i[1];if(!(deep===_constants_js__WEBPACK_IMPORTED_MODULE_2__/* .IGNORE_NULL_AND_UNDEFINED_SYMBOL */ .p_&&[null,undefined].includes(_value13)))target[_key6]=mergeValue(target[_key6],_value13)}}else target=source;}else target=source}}catch(err){_iterator16.e(err)}finally{_iterator16.f()}return target};/**
|
|
633
254
|
* Generates a proxy handler which forwards all operations to given object
|
|
634
255
|
* as there wouldn't be a proxy.
|
|
635
256
|
* @param target - Object to proxy.
|
|
636
257
|
* @param methodNames - Mapping of operand name to object specific method
|
|
637
258
|
* name.
|
|
638
259
|
* @returns Determined proxy handler.
|
|
639
|
-
*/
|
|
640
|
-
export const getProxyHandler = (target, methodNames = {}) => {
|
|
641
|
-
methodNames = {
|
|
642
|
-
delete: '[]',
|
|
643
|
-
get: '[]',
|
|
644
|
-
has: '[]',
|
|
645
|
-
set: '[]',
|
|
646
|
-
...methodNames
|
|
647
|
-
};
|
|
648
|
-
return {
|
|
649
|
-
deleteProperty: (_targetObject, key) => {
|
|
650
|
-
if (methodNames.delete === '[]' && typeof key === 'string') delete target[key];else return target[methodNames.delete](key);
|
|
651
|
-
return true;
|
|
652
|
-
},
|
|
653
|
-
get: (_targetObject, key) => {
|
|
654
|
-
if (methodNames.get === '[]' && typeof key === 'string') return target[key];
|
|
655
|
-
return target[methodNames.get](key);
|
|
656
|
-
},
|
|
657
|
-
has: (_targetObject, key) => {
|
|
658
|
-
if (methodNames.has === '[]') return key in target;
|
|
659
|
-
return target[methodNames.has](key);
|
|
660
|
-
},
|
|
661
|
-
set: (_targetObject, key, value) => {
|
|
662
|
-
if (methodNames.set === '[]' && typeof key === 'string') target[key] = value;else return target[methodNames.set](key, value);
|
|
663
|
-
return true;
|
|
664
|
-
}
|
|
665
|
-
};
|
|
666
|
-
};
|
|
667
|
-
/**
|
|
260
|
+
*/var getProxyHandler=function getProxyHandler(target,methodNames){if(methodNames===void 0){methodNames={}}methodNames=_objectSpread({delete:"[]",get:"[]",has:"[]",set:"[]"},methodNames);return{deleteProperty:function deleteProperty(_targetObject,key){if(methodNames.delete==="[]"&&typeof key==="string")delete target[key];else return target[methodNames.delete](key);return true},get:function get(_targetObject,key){if(methodNames.get==="[]"&&typeof key==="string")return target[key];return target[methodNames.get](key)},has:function has(_targetObject,key){if(methodNames.has==="[]")return key in target;return target[methodNames.has](key)},set:function set(_targetObject,key,value){if(methodNames.set==="[]"&&typeof key==="string")target[key]=value;else return target[methodNames.set](key,value);return true}}};/**
|
|
668
261
|
* Slices all properties from given object which does not match provided
|
|
669
262
|
* object mask. Items can be explicitly whitelisted via "include" mask
|
|
670
263
|
* configuration or black listed via "exclude" mask configuration.
|
|
@@ -672,50 +265,8 @@ export const getProxyHandler = (target, methodNames = {}) => {
|
|
|
672
265
|
* @param maskConfiguration - Mask configuration.
|
|
673
266
|
* @returns Given but sliced object. If (nested) object will be modified a
|
|
674
267
|
* flat copy of that object will be returned.
|
|
675
|
-
*/
|
|
676
|
-
|
|
677
|
-
maskConfiguration = {
|
|
678
|
-
exclude: false,
|
|
679
|
-
include: true,
|
|
680
|
-
...maskConfiguration
|
|
681
|
-
};
|
|
682
|
-
if (maskConfiguration.exclude === true || Array.isArray(maskConfiguration.exclude) && maskConfiguration.exclude.length === 0 || maskConfiguration.include === false || typeof object !== 'object') return {};
|
|
683
|
-
const exclude = Array.isArray(maskConfiguration.exclude) ? maskConfiguration.exclude.reduce((mask, key) => ({
|
|
684
|
-
...mask,
|
|
685
|
-
[key]: true
|
|
686
|
-
}), {}) : maskConfiguration.exclude;
|
|
687
|
-
const include = Array.isArray(maskConfiguration.include) ? maskConfiguration.include.reduce((mask, key) => ({
|
|
688
|
-
...mask,
|
|
689
|
-
[key]: true
|
|
690
|
-
}), {}) : maskConfiguration.include;
|
|
691
|
-
let result = {};
|
|
692
|
-
if (isPlainObject(include)) {
|
|
693
|
-
for (const [key, value] of Object.entries(include)) if (Object.prototype.hasOwnProperty.call(object, key)) if (value === true) result[key] = object[key];else if ((isPlainObject(value) || Array.isArray(value) && value.length) && typeof object[key] === 'object') result[key] = mask(object[key], {
|
|
694
|
-
include: value
|
|
695
|
-
});
|
|
696
|
-
} else
|
|
697
|
-
// In this branch "mask.include === true" holds.
|
|
698
|
-
result = object;
|
|
699
|
-
if (isPlainObject(exclude)) {
|
|
700
|
-
let useCopy = false;
|
|
701
|
-
const copy = {
|
|
702
|
-
...result
|
|
703
|
-
};
|
|
704
|
-
for (const [key, value] of Object.entries(exclude)) if (Object.prototype.hasOwnProperty.call(copy, key)) if (value === true) {
|
|
705
|
-
useCopy = true;
|
|
706
|
-
delete copy[key];
|
|
707
|
-
} else if ((isPlainObject(value) || Array.isArray(value) && value.length) && typeof copy[key] === 'object') {
|
|
708
|
-
const current = copy[key];
|
|
709
|
-
copy[key] = mask(copy[key], {
|
|
710
|
-
exclude: value
|
|
711
|
-
});
|
|
712
|
-
if (copy[key] !== current) useCopy = true;
|
|
713
|
-
}
|
|
714
|
-
if (useCopy) result = copy;
|
|
715
|
-
}
|
|
716
|
-
return result;
|
|
717
|
-
};
|
|
718
|
-
/**
|
|
268
|
+
*/var _mask=function mask(object,maskConfiguration){maskConfiguration=_objectSpread({exclude:false,include:true},maskConfiguration);if(maskConfiguration.exclude===true||Array.isArray(maskConfiguration.exclude)&&maskConfiguration.exclude.length===0||maskConfiguration.include===false||_typeof(object)!=="object")return{};var exclude=Array.isArray(maskConfiguration.exclude)?maskConfiguration.exclude.reduce(function(mask,key){return _objectSpread(_objectSpread({},mask),{},_defineProperty({},key,true))},{}):maskConfiguration.exclude;var include=Array.isArray(maskConfiguration.include)?maskConfiguration.include.reduce(function(mask,key){return _objectSpread(_objectSpread({},mask),{},_defineProperty({},key,true))},{}):maskConfiguration.include;var result={};if((0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isPlainObject */ .Qd)(include)){for(var _i24=0,_Object$entries12=Object.entries(include);_i24<_Object$entries12.length;_i24++){var _Object$entries12$_i=_slicedToArray(_Object$entries12[_i24],2),key=_Object$entries12$_i[0],value=_Object$entries12$_i[1];if(Object.prototype.hasOwnProperty.call(object,key))if(value===true)result[key]=object[key];else if(((0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isPlainObject */ .Qd)(value)||Array.isArray(value)&&value.length)&&_typeof(object[key])==="object")result[key]=_mask(object[key],{include:value})}}else// In this branch "mask.include === true" holds.
|
|
269
|
+
result=object;if((0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isPlainObject */ .Qd)(exclude)){var useCopy=false;var copy=_objectSpread({},result);for(var _i25=0,_Object$entries13=Object.entries(exclude);_i25<_Object$entries13.length;_i25++){var _Object$entries13$_i=_slicedToArray(_Object$entries13[_i25],2),_key7=_Object$entries13$_i[0],_value14=_Object$entries13$_i[1];if(Object.prototype.hasOwnProperty.call(copy,_key7))if(_value14===true){useCopy=true;delete copy[_key7]}else if(((0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isPlainObject */ .Qd)(_value14)||Array.isArray(_value14)&&_value14.length)&&_typeof(copy[_key7])==="object"){var current=copy[_key7];copy[_key7]=_mask(copy[_key7],{exclude:_value14});if(copy[_key7]!==current)useCopy=true}}if(useCopy)result=copy}return result};/**
|
|
719
270
|
* Modifies given target corresponding to given source and removes source
|
|
720
271
|
* modification infos.
|
|
721
272
|
* @param target - Object to modify.
|
|
@@ -735,93 +286,12 @@ export const mask = (object, maskConfiguration) => {
|
|
|
735
286
|
* @param parentKey - Source key in given source context to remove
|
|
736
287
|
* modification info from (usually only needed internally).
|
|
737
288
|
* @returns Given target modified with given source.
|
|
738
|
-
*/
|
|
739
|
-
export const modifyObject = (target, source, removeIndicatorKey = '__remove__', prependIndicatorKey = '__prepend__', appendIndicatorKey = '__append__', positionPrefix = '__', positionSuffix = '__', parentSource = null, parentKey = null) => {
|
|
740
|
-
if (isMap(source) && isMap(target)) {
|
|
741
|
-
for (const [key, value] of source) if (target.has(key)) modifyObject(target.get(key), value, removeIndicatorKey, prependIndicatorKey, appendIndicatorKey, positionPrefix, positionSuffix, source, key);
|
|
742
|
-
} else if (isObject(source) && isObject(target)) for (const [key, sourceValue] of Object.entries(source)) {
|
|
743
|
-
let index = NaN;
|
|
744
|
-
if (Array.isArray(target) && key.startsWith(positionPrefix) && key.endsWith(positionSuffix)) {
|
|
745
|
-
index = parseInt(key.substring(positionPrefix.length, key.length - positionSuffix.length), 10);
|
|
746
|
-
if (index < 0 || index >= target.length) index = NaN;
|
|
747
|
-
}
|
|
748
|
-
if ([removeIndicatorKey, prependIndicatorKey, appendIndicatorKey].includes(key) || !isNaN(index)) {
|
|
749
|
-
if (Array.isArray(target)) {
|
|
750
|
-
if (key === removeIndicatorKey) {
|
|
751
|
-
const values = [].concat(sourceValue);
|
|
752
|
-
for (const value of values) if (typeof value === 'string' && value.startsWith(positionPrefix) && value.endsWith(positionSuffix)) target.splice(parseInt(value.substring(positionPrefix.length, value.length - positionSuffix.length), 10), 1);else if (target.includes(value)) target.splice(target.indexOf(value), 1);else if (typeof value === 'number' && value < target.length) target.splice(value, 1);
|
|
753
|
-
} else if (key === appendIndicatorKey) target = target.concat(sourceValue);else if (key === prependIndicatorKey) target = [].concat(sourceValue).concat(target);else if (isObject(target[index]) && isObject(sourceValue)) extend(true, modifyObject(target[index], sourceValue, removeIndicatorKey, prependIndicatorKey, appendIndicatorKey, positionPrefix, positionSuffix), target[index], sourceValue);else target[index] = sourceValue;
|
|
754
|
-
} else if (key === removeIndicatorKey) for (const value of [].concat(sourceValue)) if (typeof value === 'string' && Object.prototype.hasOwnProperty.call(target, value)) delete target[value];
|
|
755
|
-
delete source[key];
|
|
756
|
-
if (parentSource && typeof parentKey === 'string') delete parentSource[parentKey];
|
|
757
|
-
} else if (target !== null && Object.prototype.hasOwnProperty.call(target, key)) target[key] = modifyObject(target[key], sourceValue, removeIndicatorKey, prependIndicatorKey, appendIndicatorKey, positionPrefix, positionSuffix, source, key);
|
|
758
|
-
}
|
|
759
|
-
return target;
|
|
760
|
-
};
|
|
761
|
-
/**
|
|
289
|
+
*/var _modifyObject=function modifyObject(target,source,removeIndicatorKey,prependIndicatorKey,appendIndicatorKey,positionPrefix,positionSuffix,parentSource,parentKey){if(removeIndicatorKey===void 0){removeIndicatorKey="__remove__"}if(prependIndicatorKey===void 0){prependIndicatorKey="__prepend__"}if(appendIndicatorKey===void 0){appendIndicatorKey="__append__"}if(positionPrefix===void 0){positionPrefix="__"}if(positionSuffix===void 0){positionSuffix="__"}if(parentSource===void 0){parentSource=null}if(parentKey===void 0){parentKey=null}if((0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isMap */ .jh)(source)&&(0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isMap */ .jh)(target)){var _iterator18=_createForOfIteratorHelper(source),_step18;try{for(_iterator18.s();!(_step18=_iterator18.n()).done;){var _step18$value=_slicedToArray(_step18.value,2),key=_step18$value[0],value=_step18$value[1];if(target.has(key))_modifyObject(target.get(key),value,removeIndicatorKey,prependIndicatorKey,appendIndicatorKey,positionPrefix,positionSuffix,source,key)}}catch(err){_iterator18.e(err)}finally{_iterator18.f()}}else if((0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isObject */ .Gv)(source)&&(0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isObject */ .Gv)(target))for(var _i26=0,_Object$entries14=Object.entries(source);_i26<_Object$entries14.length;_i26++){var _Object$entries14$_i=_slicedToArray(_Object$entries14[_i26],2),_key8=_Object$entries14$_i[0],sourceValue=_Object$entries14$_i[1];var index=NaN;if(Array.isArray(target)&&_key8.startsWith(positionPrefix)&&_key8.endsWith(positionSuffix)){index=parseInt(_key8.substring(positionPrefix.length,_key8.length-positionSuffix.length),10);if(index<0||index>=target.length)index=NaN}if([removeIndicatorKey,prependIndicatorKey,appendIndicatorKey].includes(_key8)||!isNaN(index)){if(Array.isArray(target)){if(_key8===removeIndicatorKey){var values=[].concat(sourceValue);var _iterator19=_createForOfIteratorHelper(values),_step19;try{for(_iterator19.s();!(_step19=_iterator19.n()).done;){var _value15=_step19.value;if(typeof _value15==="string"&&_value15.startsWith(positionPrefix)&&_value15.endsWith(positionSuffix))target.splice(parseInt(_value15.substring(positionPrefix.length,_value15.length-positionSuffix.length),10),1);else if(target.includes(_value15))target.splice(target.indexOf(_value15),1);else if(typeof _value15==="number"&&_value15<target.length)target.splice(_value15,1)}}catch(err){_iterator19.e(err)}finally{_iterator19.f()}}else if(_key8===appendIndicatorKey)target=target.concat(sourceValue);else if(_key8===prependIndicatorKey)target=[].concat(sourceValue).concat(target);else if((0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isObject */ .Gv)(target[index])&&(0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isObject */ .Gv)(sourceValue))_extend(true,_modifyObject(target[index],sourceValue,removeIndicatorKey,prependIndicatorKey,appendIndicatorKey,positionPrefix,positionSuffix),target[index],sourceValue);else target[index]=sourceValue;}else if(_key8===removeIndicatorKey){var _iterator20=_createForOfIteratorHelper([].concat(sourceValue)),_step20;try{for(_iterator20.s();!(_step20=_iterator20.n()).done;){var _value16=_step20.value;if(typeof _value16==="string"&&Object.prototype.hasOwnProperty.call(target,_value16))delete target[_value16]}}catch(err){_iterator20.e(err)}finally{_iterator20.f()}}delete source[_key8];if(parentSource&&typeof parentKey==="string")delete parentSource[parentKey]}else if(target!==null&&Object.prototype.hasOwnProperty.call(target,_key8))target[_key8]=_modifyObject(target[_key8],sourceValue,removeIndicatorKey,prependIndicatorKey,appendIndicatorKey,positionPrefix,positionSuffix,source,_key8)}return target};/**
|
|
762
290
|
* Removes given key from given object recursively.
|
|
763
291
|
* @param object - Object to process.
|
|
764
292
|
* @param keys - List of keys to remove.
|
|
765
293
|
* @returns Processed given object.
|
|
766
|
-
*/
|
|
767
|
-
export const removeKeyPrefixes = (object, keys = '#') => {
|
|
768
|
-
const resolvedKeys = [].concat(keys);
|
|
769
|
-
if (Array.isArray(object)) {
|
|
770
|
-
let index = 0;
|
|
771
|
-
for (const subObject of object.slice()) {
|
|
772
|
-
let skip = false;
|
|
773
|
-
if (typeof subObject === 'string') {
|
|
774
|
-
for (const key of resolvedKeys) if (subObject.startsWith(`${key}:`)) {
|
|
775
|
-
object.splice(index, 1);
|
|
776
|
-
skip = true;
|
|
777
|
-
break;
|
|
778
|
-
}
|
|
779
|
-
if (skip) continue;
|
|
780
|
-
}
|
|
781
|
-
object[index] = removeKeyPrefixes(subObject, resolvedKeys);
|
|
782
|
-
index += 1;
|
|
783
|
-
}
|
|
784
|
-
} else if (isSet(object)) for (const subObject of new Set(object)) {
|
|
785
|
-
let skip = false;
|
|
786
|
-
if (typeof subObject === 'string') {
|
|
787
|
-
for (const key of resolvedKeys) if (subObject.startsWith(`${key}:`)) {
|
|
788
|
-
object.delete(subObject);
|
|
789
|
-
skip = true;
|
|
790
|
-
break;
|
|
791
|
-
}
|
|
792
|
-
if (skip) continue;
|
|
793
|
-
}
|
|
794
|
-
removeKeyPrefixes(subObject, resolvedKeys);
|
|
795
|
-
} else if (isMap(object)) for (const [key, subObject] of new Map(object)) {
|
|
796
|
-
let skip = false;
|
|
797
|
-
if (typeof key === 'string') {
|
|
798
|
-
for (const resolvedKey of resolvedKeys) {
|
|
799
|
-
const escapedKey = escapeRegularExpressions(resolvedKey);
|
|
800
|
-
if (new RegExp(`^${escapedKey}[0-9]*$`).test(key)) {
|
|
801
|
-
object.delete(key);
|
|
802
|
-
skip = true;
|
|
803
|
-
break;
|
|
804
|
-
}
|
|
805
|
-
}
|
|
806
|
-
if (skip) continue;
|
|
807
|
-
}
|
|
808
|
-
object.set(key, removeKeyPrefixes(subObject, resolvedKeys));
|
|
809
|
-
} else if (isObject(object)) for (const [key, value] of Object.entries(Object.assign({}, object))) {
|
|
810
|
-
let skip = false;
|
|
811
|
-
for (const resolvedKey of resolvedKeys) {
|
|
812
|
-
const escapedKey = escapeRegularExpressions(resolvedKey);
|
|
813
|
-
if (new RegExp(`^${escapedKey}[0-9]*$`).test(key)) {
|
|
814
|
-
delete object[key];
|
|
815
|
-
skip = true;
|
|
816
|
-
break;
|
|
817
|
-
}
|
|
818
|
-
}
|
|
819
|
-
if (skip) continue;
|
|
820
|
-
object[key] = removeKeyPrefixes(value, resolvedKeys);
|
|
821
|
-
}
|
|
822
|
-
return object;
|
|
823
|
-
};
|
|
824
|
-
/**
|
|
294
|
+
*/var _removeKeyPrefixes=function removeKeyPrefixes(object,keys){if(keys===void 0){keys="#"}var resolvedKeys=[].concat(keys);if(Array.isArray(object)){var index=0;var _iterator21=_createForOfIteratorHelper(object.slice()),_step21;try{for(_iterator21.s();!(_step21=_iterator21.n()).done;){var subObject=_step21.value;var skip=false;if(typeof subObject==="string"){var _iterator22=_createForOfIteratorHelper(resolvedKeys),_step22;try{for(_iterator22.s();!(_step22=_iterator22.n()).done;){var key=_step22.value;if(subObject.startsWith("".concat(key,":"))){object.splice(index,1);skip=true;break}}}catch(err){_iterator22.e(err)}finally{_iterator22.f()}if(skip)continue}object[index]=_removeKeyPrefixes(subObject,resolvedKeys);index+=1}}catch(err){_iterator21.e(err)}finally{_iterator21.f()}}else if((0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isSet */ .vM)(object)){var _iterator23=_createForOfIteratorHelper(new Set(object)),_step23;try{for(_iterator23.s();!(_step23=_iterator23.n()).done;){var _subObject=_step23.value;var _skip=false;if(typeof _subObject==="string"){var _iterator24=_createForOfIteratorHelper(resolvedKeys),_step24;try{for(_iterator24.s();!(_step24=_iterator24.n()).done;){var _key9=_step24.value;if(_subObject.startsWith("".concat(_key9,":"))){object.delete(_subObject);_skip=true;break}}}catch(err){_iterator24.e(err)}finally{_iterator24.f()}if(_skip)continue}_removeKeyPrefixes(_subObject,resolvedKeys)}}catch(err){_iterator23.e(err)}finally{_iterator23.f()}}else if((0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isMap */ .jh)(object)){var _iterator25=_createForOfIteratorHelper(new Map(object)),_step25;try{for(_iterator25.s();!(_step25=_iterator25.n()).done;){var _step25$value=_slicedToArray(_step25.value,2),_key0=_step25$value[0],_subObject2=_step25$value[1];var _skip2=false;if(typeof _key0==="string"){var _iterator26=_createForOfIteratorHelper(resolvedKeys),_step26;try{for(_iterator26.s();!(_step26=_iterator26.n()).done;){var resolvedKey=_step26.value;var escapedKey=(0,_string_js__WEBPACK_IMPORTED_MODULE_5__/* .escapeRegularExpressions */ .jt)(resolvedKey);if(new RegExp("^".concat(escapedKey,"[0-9]*$")).test(_key0)){object.delete(_key0);_skip2=true;break}}}catch(err){_iterator26.e(err)}finally{_iterator26.f()}if(_skip2)continue}object.set(_key0,_removeKeyPrefixes(_subObject2,resolvedKeys))}}catch(err){_iterator25.e(err)}finally{_iterator25.f()}}else if((0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isObject */ .Gv)(object))for(var _i27=0,_Object$entries15=Object.entries(Object.assign({},object));_i27<_Object$entries15.length;_i27++){var _Object$entries15$_i=_slicedToArray(_Object$entries15[_i27],2),_key1=_Object$entries15$_i[0],value=_Object$entries15$_i[1];var _skip3=false;var _iterator27=_createForOfIteratorHelper(resolvedKeys),_step27;try{for(_iterator27.s();!(_step27=_iterator27.n()).done;){var _resolvedKey=_step27.value;var _escapedKey=(0,_string_js__WEBPACK_IMPORTED_MODULE_5__/* .escapeRegularExpressions */ .jt)(_resolvedKey);if(new RegExp("^".concat(_escapedKey,"[0-9]*$")).test(_key1)){delete object[_key1];_skip3=true;break}}}catch(err){_iterator27.e(err)}finally{_iterator27.f()}if(_skip3)continue;object[_key1]=_removeKeyPrefixes(value,resolvedKeys)}return object};/**
|
|
825
295
|
* Represents given object as formatted string.
|
|
826
296
|
* @param object - Object to represent.
|
|
827
297
|
* @param maximumLengthOfLists - Maximum number of array item to render.
|
|
@@ -833,130 +303,802 @@ export const removeKeyPrefixes = (object, keys = '#') => {
|
|
|
833
303
|
* @param numberOfLevels - Specifies number of levels to traverse given
|
|
834
304
|
* data structure.
|
|
835
305
|
* @returns Representation string.
|
|
836
|
-
*/
|
|
837
|
-
export const represent = (object, maximumLengthOfLists = 30, indention = ' ', initialIndention = '', maximumNumberOfLevelsReachedIdentifier = '__maximum_number_of_levels_reached__', numberOfLevels = 8) => {
|
|
838
|
-
if (numberOfLevels === 0) return String(maximumNumberOfLevelsReachedIdentifier);
|
|
839
|
-
if (object === null) return 'null';
|
|
840
|
-
if (object === undefined) return 'undefined';
|
|
841
|
-
if (typeof object === 'string') return `"${object.replace(/\n/g, `\n${initialIndention}`)}"`;
|
|
842
|
-
if (isNumeric(object) || typeof object === 'boolean') return String(object);
|
|
843
|
-
if (object instanceof Date) return object.toISOString();
|
|
844
|
-
if (Array.isArray(object)) {
|
|
845
|
-
let result = '[';
|
|
846
|
-
let firstSeen = false;
|
|
847
|
-
let counter = 1;
|
|
848
|
-
for (const item of object) {
|
|
849
|
-
if (counter > maximumLengthOfLists) {
|
|
850
|
-
result += `\n${initialIndention}...`;
|
|
851
|
-
break;
|
|
852
|
-
}
|
|
853
|
-
if (firstSeen) result += ',';
|
|
854
|
-
result += `\n${initialIndention}${indention}` + represent(item, maximumLengthOfLists, indention, `${initialIndention}${indention}`, maximumNumberOfLevelsReachedIdentifier, numberOfLevels - 1);
|
|
855
|
-
firstSeen = true;
|
|
856
|
-
counter += 1;
|
|
857
|
-
}
|
|
858
|
-
if (firstSeen) result += `\n${initialIndention}`;
|
|
859
|
-
result += ']';
|
|
860
|
-
return result;
|
|
861
|
-
}
|
|
862
|
-
if (isMap(object)) {
|
|
863
|
-
let result = '';
|
|
864
|
-
let firstSeen = false;
|
|
865
|
-
let counter = 1;
|
|
866
|
-
for (const [key, item] of object) {
|
|
867
|
-
if (counter > maximumLengthOfLists) {
|
|
868
|
-
result += `,\n${initialIndention}...`;
|
|
869
|
-
break;
|
|
870
|
-
}
|
|
871
|
-
if (firstSeen) result += `,\n${initialIndention}${indention}`;
|
|
872
|
-
result += represent(key, maximumLengthOfLists, indention, `${initialIndention}${indention}`, maximumNumberOfLevelsReachedIdentifier, numberOfLevels - 1) + ' -> ' + represent(item, maximumLengthOfLists, indention, `${initialIndention}${indention}`, maximumNumberOfLevelsReachedIdentifier, numberOfLevels - 1);
|
|
873
|
-
firstSeen = true;
|
|
874
|
-
counter += 1;
|
|
875
|
-
}
|
|
876
|
-
if (!firstSeen) result = 'EmptyMap';
|
|
877
|
-
return result;
|
|
878
|
-
}
|
|
879
|
-
if (isSet(object)) {
|
|
880
|
-
let result = '{';
|
|
881
|
-
let firstSeen = false;
|
|
882
|
-
let counter = 1;
|
|
883
|
-
for (const item of object) {
|
|
884
|
-
if (counter > maximumLengthOfLists) {
|
|
885
|
-
result += `,\n${initialIndention}...`;
|
|
886
|
-
break;
|
|
887
|
-
}
|
|
888
|
-
if (firstSeen) result += ',';
|
|
889
|
-
result += `\n${initialIndention}${indention}` + represent(item, maximumLengthOfLists, indention, `${initialIndention}${indention}`, maximumNumberOfLevelsReachedIdentifier, numberOfLevels - 1);
|
|
890
|
-
firstSeen = true;
|
|
891
|
-
counter += 1;
|
|
892
|
-
}
|
|
893
|
-
if (firstSeen) result += `\n${initialIndention}}`;else result = 'EmptySet';
|
|
894
|
-
return result;
|
|
895
|
-
}
|
|
896
|
-
if (isFunction(object)) return '__function__';
|
|
897
|
-
let result = '{';
|
|
898
|
-
const keys = Object.getOwnPropertyNames(object).sort();
|
|
899
|
-
let firstSeen = false;
|
|
900
|
-
let counter = 1;
|
|
901
|
-
for (const key of keys) {
|
|
902
|
-
if (counter > maximumLengthOfLists) {
|
|
903
|
-
result += `,\n${initialIndention}...`;
|
|
904
|
-
break;
|
|
905
|
-
}
|
|
906
|
-
if (firstSeen) result += ',';
|
|
907
|
-
result += `\n${initialIndention}${indention}${key}: ` + represent(object[key], maximumLengthOfLists, indention, `${initialIndention}${indention}`, maximumNumberOfLevelsReachedIdentifier, numberOfLevels - 1);
|
|
908
|
-
firstSeen = true;
|
|
909
|
-
counter += 1;
|
|
910
|
-
}
|
|
911
|
-
if (firstSeen) result += `\n${initialIndention}`;
|
|
912
|
-
result += '}';
|
|
913
|
-
return result;
|
|
914
|
-
};
|
|
915
|
-
/**
|
|
306
|
+
*/var _represent=function represent(object,maximumLengthOfLists,indention,initialIndention,maximumNumberOfLevelsReachedIdentifier,numberOfLevels){if(maximumLengthOfLists===void 0){maximumLengthOfLists=30}if(indention===void 0){indention=" "}if(initialIndention===void 0){initialIndention=""}if(maximumNumberOfLevelsReachedIdentifier===void 0){maximumNumberOfLevelsReachedIdentifier="__maximum_number_of_levels_reached__"}if(numberOfLevels===void 0){numberOfLevels=8}if(numberOfLevels===0)return String(maximumNumberOfLevelsReachedIdentifier);if(object===null)return"null";if(object===undefined)return"undefined";if(typeof object==="string")return"\"".concat(object.replace(/\n/g,"\n".concat(initialIndention)),"\"");if((0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isNumeric */ .kf)(object)||typeof object==="boolean")return String(object);if(object instanceof Date)return object.toISOString();if(Array.isArray(object)){var _result2="[";var _firstSeen=false;var _counter=1;var _iterator28=_createForOfIteratorHelper(object),_step28;try{for(_iterator28.s();!(_step28=_iterator28.n()).done;){var item=_step28.value;if(_counter>maximumLengthOfLists){_result2+="\n".concat(initialIndention,"...");break}if(_firstSeen)_result2+=",";_result2+="\n".concat(initialIndention).concat(indention)+_represent(item,maximumLengthOfLists,indention,"".concat(initialIndention).concat(indention),maximumNumberOfLevelsReachedIdentifier,numberOfLevels-1);_firstSeen=true;_counter+=1}}catch(err){_iterator28.e(err)}finally{_iterator28.f()}if(_firstSeen)_result2+="\n".concat(initialIndention);_result2+="]";return _result2}if((0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isMap */ .jh)(object)){var _result3="";var _firstSeen2=false;var _counter2=1;var _iterator29=_createForOfIteratorHelper(object),_step29;try{for(_iterator29.s();!(_step29=_iterator29.n()).done;){var _step29$value=_slicedToArray(_step29.value,2),key=_step29$value[0],_item=_step29$value[1];if(_counter2>maximumLengthOfLists){_result3+=",\n".concat(initialIndention,"...");break}if(_firstSeen2)_result3+=",\n".concat(initialIndention).concat(indention);_result3+=_represent(key,maximumLengthOfLists,indention,"".concat(initialIndention).concat(indention),maximumNumberOfLevelsReachedIdentifier,numberOfLevels-1)+" -> "+_represent(_item,maximumLengthOfLists,indention,"".concat(initialIndention).concat(indention),maximumNumberOfLevelsReachedIdentifier,numberOfLevels-1);_firstSeen2=true;_counter2+=1}}catch(err){_iterator29.e(err)}finally{_iterator29.f()}if(!_firstSeen2)_result3="EmptyMap";return _result3}if((0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isSet */ .vM)(object)){var _result4="{";var _firstSeen3=false;var _counter3=1;var _iterator30=_createForOfIteratorHelper(object),_step30;try{for(_iterator30.s();!(_step30=_iterator30.n()).done;){var _item2=_step30.value;if(_counter3>maximumLengthOfLists){_result4+=",\n".concat(initialIndention,"...");break}if(_firstSeen3)_result4+=",";_result4+="\n".concat(initialIndention).concat(indention)+_represent(_item2,maximumLengthOfLists,indention,"".concat(initialIndention).concat(indention),maximumNumberOfLevelsReachedIdentifier,numberOfLevels-1);_firstSeen3=true;_counter3+=1}}catch(err){_iterator30.e(err)}finally{_iterator30.f()}if(_firstSeen3)_result4+="\n".concat(initialIndention,"}");else _result4="EmptySet";return _result4}if((0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isFunction */ .Tn)(object))return"__function__";var result="{";var keys=Object.getOwnPropertyNames(object).sort();var firstSeen=false;var counter=1;var _iterator31=_createForOfIteratorHelper(keys),_step31;try{for(_iterator31.s();!(_step31=_iterator31.n()).done;){var _key10=_step31.value;if(counter>maximumLengthOfLists){result+=",\n".concat(initialIndention,"...");break}if(firstSeen)result+=",";result+="\n".concat(initialIndention).concat(indention).concat(_key10,": ")+_represent(object[_key10],maximumLengthOfLists,indention,"".concat(initialIndention).concat(indention),maximumNumberOfLevelsReachedIdentifier,numberOfLevels-1);firstSeen=true;counter+=1}}catch(err){_iterator31.e(err)}finally{_iterator31.f()}if(firstSeen)result+="\n".concat(initialIndention);result+="}";return result};/**
|
|
916
307
|
* Sort given objects keys.
|
|
917
308
|
* @param object - Object which keys should be sorted.
|
|
918
309
|
* @returns Sorted list of given keys.
|
|
919
|
-
*/
|
|
920
|
-
export const sort = object => {
|
|
921
|
-
const keys = [];
|
|
922
|
-
if (Array.isArray(object)) for (let index = 0; index < object.length; index++) keys.push(index);else if (typeof object === 'object') if (isMap(object)) for (const keyValuePair of object) keys.push(keyValuePair[0]);else if (object !== null) for (const key of Object.keys(object)) keys.push(key);
|
|
923
|
-
return keys.sort();
|
|
924
|
-
};
|
|
925
|
-
/**
|
|
310
|
+
*/var sort=function sort(object){var keys=[];if(Array.isArray(object))for(var index=0;index<object.length;index++)keys.push(index);else if(_typeof(object)==="object")if((0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isMap */ .jh)(object)){var _iterator32=_createForOfIteratorHelper(object),_step32;try{for(_iterator32.s();!(_step32=_iterator32.n()).done;){var keyValuePair=_step32.value;keys.push(keyValuePair[0])}}catch(err){_iterator32.e(err)}finally{_iterator32.f()}}else if(object!==null)for(var _i28=0,_Object$keys=Object.keys(object);_i28<_Object$keys.length;_i28++){var key=_Object$keys[_i28];keys.push(key)}return keys.sort()};/**
|
|
926
311
|
* Removes a proxy from given data structure recursively.
|
|
927
312
|
* @param object - Object to proxy.
|
|
928
313
|
* @param seenObjects - Tracks all already processed objects to avoid
|
|
929
314
|
* endless loops (usually only needed for internal purpose).
|
|
930
315
|
* @returns Returns given object unwrapped from a dynamic proxy.
|
|
931
|
-
*/
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL29iamVjdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAjIS91c3IvYmluL2VudiBiYWJlbC1ub2RlXG4vLyAtKi0gY29kaW5nOiB1dGYtOCAtKi1cbi8qKiBAbW9kdWxlIG9iamVjdCAqL1xuJ3VzZSBzdHJpY3QnXG4vKiAhXG4gICAgcmVnaW9uIGhlYWRlclxuICAgIFtQcm9qZWN0IHBhZ2VdKGh0dHBzOi8vdG9yYmVuLndlYnNpdGUvY2xpZW50bm9kZSlcblxuICAgIENvcHlyaWdodCBUb3JiZW4gU2lja2VydCAoaW5mb1tcIn5hdH5cIl10b3JiZW4ud2Vic2l0ZSkgMTYuMTIuMjAxMlxuXG4gICAgTGljZW5zZVxuICAgIC0tLS0tLS1cblxuICAgIFRoaXMgbGlicmFyeSB3cml0dGVuIGJ5IFRvcmJlbiBTaWNrZXJ0IHN0YW5kcyB1bmRlciBhIGNyZWF0aXZlIGNvbW1vbnNcbiAgICBuYW1pbmcgMy4wIHVucG9ydGVkIGxpY2Vuc2UuXG4gICAgU2VlIGh0dHBzOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS8zLjAvZGVlZC5kZVxuICAgIGVuZHJlZ2lvblxuKi9cbmltcG9ydCB0eXBlIHtcbiAgICBBbnlGdW5jdGlvbixcbiAgICBDb21wYXJlT3B0aW9ucyxcbiAgICBFdmFsdWF0ZUR5bmFtaWNEYXRhT3B0aW9ucyxcbiAgICBHZXR0ZXJGdW5jdGlvbixcbiAgICBNYXBwaW5nLFxuICAgIE5vcm1hbGl6ZWRPYmplY3RNYXNrLFxuICAgIE9iamVjdE1hc2tDb25maWd1cmF0aW9uLFxuICAgIFBsYWluT2JqZWN0LFxuICAgIFByb3h5SGFuZGxlcixcbiAgICBQcm94eVR5cGUsXG4gICAgUmVjdXJzaXZlQXN5bmNFdmFsdWF0ZWFibGUsXG4gICAgUmVjdXJzaXZlRXZhbHVhdGVhYmxlLFxuICAgIFJlY3Vyc2l2ZVBhcnRpYWwsXG4gICAgU2V0dGVyRnVuY3Rpb24sXG4gICAgVW5rbm93bkZ1bmN0aW9uLFxuICAgIFZhbHVlT2Zcbn0gZnJvbSAnLi90eXBlJ1xuXG5pbXBvcnQge1xuICAgIENMQVNTX1RPX1RZUEVfTUFQUElORywgSUdOT1JFX05VTExfQU5EX1VOREVGSU5FRF9TWU1CT0wsIFZBTFVFX0NPUFlfU1lNQk9MXG59IGZyb20gJy4vY29uc3RhbnRzJ1xuaW1wb3J0IHtcbiAgICBpc0Z1bmN0aW9uLCBpc09iamVjdCwgaXNQbGFpbk9iamVjdCwgaXNNYXAsIGlzUHJveHksIGlzU2V0LCBpc051bWVyaWNcbn0gZnJvbSAnLi9pbmRpY2F0b3JzJ1xuaW1wb3J0IHtpc05vdEFOdW1iZXJ9IGZyb20gJy4vbnVtYmVyJ1xuaW1wb3J0IHtlc2NhcGVSZWd1bGFyRXhwcmVzc2lvbnMsIGV2YWx1YXRlQW5kVGhyb3dFcnJvcn0gZnJvbSAnLi9zdHJpbmcnXG5cbi8qKlxuICogQWRkcyBkeW5hbWljIGdldHRlciBhbmQgc2V0dGVyIHRvIGFueSBnaXZlbiBkYXRhIHN0cnVjdHVyZSBzdWNoIGFzIG1hcHMuXG4gKiBAcGFyYW0gb2JqZWN0IC0gT2JqZWN0IHRvIHByb3h5LlxuICogQHBhcmFtIGdldHRlcldyYXBwZXIgLSBGdW5jdGlvbiB0byB3cmFwIGVhY2ggcHJvcGVydHkgZ2V0LlxuICogQHBhcmFtIHNldHRlcldyYXBwZXIgLSBGdW5jdGlvbiB0byB3cmFwIGVhY2ggcHJvcGVydHkgc2V0LlxuICogQHBhcmFtIG1ldGhvZE5hbWVzIC0gTWV0aG9kIG5hbWVzIHRvIHBlcmZvcm0gYWN0aW9ucyBvbiB0aGUgZ2l2ZW5cbiAqIG9iamVjdC5cbiAqIEBwYXJhbSBkZWVwIC0gSW5kaWNhdGVzIHRvIHBlcmZvcm0gYSBkZWVwIHdyYXBwaW5nIG9mIHNwZWNpZmllZCB0eXBlcy5cbiAqIEBwYXJhbSB0eXBlc1RvRXh0ZW5kIC0gVHlwZXMgd2hpY2ggc2hvdWxkIGJlIGV4dGVuZGVkIChDaGVja3MgYXJlXG4gKiBwZXJmb3JtZWQgdmlhIFwidmFsdWUgaW5zdGFuY2VvZiB0eXBlXCIuKS5cbiAqIEByZXR1cm5zIFJldHVybnMgZ2l2ZW4gb2JqZWN0IHdyYXBwZWQgd2l0aCBhIGR5bmFtaWMgZ2V0dGVyIHByb3h5LlxuICovXG5leHBvcnQgY29uc3QgYWRkRHluYW1pY0dldHRlckFuZFNldHRlciA9IDxUID0gdW5rbm93bj4oXG4gICAgb2JqZWN0OiBULFxuICAgIGdldHRlcldyYXBwZXI6IEdldHRlckZ1bmN0aW9uIHwgbnVsbCA9IG51bGwsXG4gICAgc2V0dGVyV3JhcHBlcjogbnVsbCB8IFNldHRlckZ1bmN0aW9uID0gbnVsbCxcbiAgICBtZXRob2ROYW1lczogTWFwcGluZyA9IHt9LFxuICAgIGRlZXAgPSB0cnVlLFxuICAgIHR5cGVzVG9FeHRlbmQ6IEFycmF5PHVua25vd24+ID0gW09iamVjdF1cbik6IFByb3h5VHlwZTxUPiB8IFQgPT4ge1xuICAgIGlmIChkZWVwICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnKVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG4gICAgICAgICAgICBsZXQgaW5kZXggPSAwXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIG9iamVjdCkge1xuICAgICAgICAgICAgICAgIG9iamVjdFtpbmRleF0gPSBhZGREeW5hbWljR2V0dGVyQW5kU2V0dGVyKFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSwgZ2V0dGVyV3JhcHBlciwgc2V0dGVyV3JhcHBlciwgbWV0aG9kTmFtZXMsIGRlZXBcbiAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgICAgICBpbmRleCArPSAxXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoaXNNYXAob2JqZWN0KSlcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIG9iamVjdClcbiAgICAgICAgICAgICAgICBvYmplY3Quc2V0KGtleSwgYWRkRHluYW1pY0dldHRlckFuZFNldHRlcihcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsIGdldHRlcldyYXBwZXIsIHNldHRlcldyYXBwZXIsIG1ldGhvZE5hbWVzLCBkZWVwKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgZWxzZSBpZiAoaXNTZXQob2JqZWN0KSkge1xuICAgICAgICAgICAgY29uc3QgY2FjaGU6IEFycmF5PHVua25vd24+ID0gW11cbiAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2Ygb2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgb2JqZWN0LmRlbGV0ZSh2YWx1ZSlcbiAgICAgICAgICAgICAgICBjYWNoZS5wdXNoKGFkZER5bmFtaWNHZXR0ZXJBbmRTZXR0ZXIoXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLCBnZXR0ZXJXcmFwcGVyLCBzZXR0ZXJXcmFwcGVyLCBtZXRob2ROYW1lcywgZGVlcClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgY2FjaGUpXG4gICAgICAgICAgICAgICAgb2JqZWN0LmFkZCh2YWx1ZSlcbiAgICAgICAgfSBlbHNlIGlmIChvYmplY3QgIT09IG51bGwpXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhvYmplY3QpKVxuICAgICAgICAgICAgICAgIChvYmplY3QgYXMgdW5rbm93biBhcyBNYXBwaW5nPHVua25vd24+KVtrZXldID1cbiAgICAgICAgICAgICAgICAgICAgYWRkRHluYW1pY0dldHRlckFuZFNldHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGFzIFRbRXh0cmFjdDxrZXlvZiBULCBzdHJpbmc+XSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldHRlcldyYXBwZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXR0ZXJXcmFwcGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kTmFtZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWVwXG4gICAgICAgICAgICAgICAgICAgIClcblxuICAgIGlmIChnZXR0ZXJXcmFwcGVyIHx8IHNldHRlcldyYXBwZXIpXG4gICAgICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlc1RvRXh0ZW5kKVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGlzT2JqZWN0KG9iamVjdCkgJiYgb2JqZWN0IGluc3RhbmNlb2YgKHR5cGUgYXMgQW55RnVuY3Rpb24pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkZWZhdWx0SGFuZGxlcjogUHJveHlIYW5kbGVyPFQ+ID1cbiAgICAgICAgICAgICAgICAgICAgZ2V0UHJveHlIYW5kbGVyPFQ+KG9iamVjdCwgbWV0aG9kTmFtZXMpXG4gICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlcjogUHJveHlIYW5kbGVyPFQ+ID1cbiAgICAgICAgICAgICAgICAgICAgZ2V0UHJveHlIYW5kbGVyPFQ+KG9iamVjdCwgbWV0aG9kTmFtZXMpXG5cbiAgICAgICAgICAgICAgICBpZiAoZ2V0dGVyV3JhcHBlcilcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5nZXQgPSAoXG4gICAgICAgICAgICAgICAgICAgICAgICBfdGFyZ2V0OiBULCBuYW1lOiBzdHJpbmcgfCBzeW1ib2xcbiAgICAgICAgICAgICAgICAgICAgKTogdW5rbm93biA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gJ19fdGFyZ2V0X18nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3RcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdfX3Jldm9rZV9fJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCk6IHVua25vd24gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXZva2UoKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0W25hbWUgYXMga2V5b2YgVF0gPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdFtuYW1lIGFzIGtleW9mIFRdXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXR0ZXJXcmFwcGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRIYW5kbGVyLmdldChwcm94eSBhcyBULCBuYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoc2V0dGVyV3JhcHBlcilcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5zZXQgPSAoXG4gICAgICAgICAgICAgICAgICAgICAgICBfdGFyZ2V0OiBULCBuYW1lOiBzdHJpbmcgfCBzeW1ib2wsIHZhbHVlOiB1bmtub3duXG4gICAgICAgICAgICAgICAgICAgICk6IGJvb2xlYW4gPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRIYW5kbGVyLnNldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm94eSBhcyBULFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGVyV3JhcHBlcihuYW1lLCB2YWx1ZSwgb2JqZWN0KVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGNvbnN0IHtwcm94eSwgcmV2b2tlfSA9XG4gICAgICAgICAgICAgICAgICAgIFByb3h5LnJldm9jYWJsZSh7fSwgaGFuZGxlciBhcyBQcm94eUhhbmRsZXI8b2JqZWN0PilcblxuICAgICAgICAgICAgICAgIHJldHVybiBwcm94eSBhcyBQcm94eVR5cGU8VD5cbiAgICAgICAgICAgIH1cblxuICAgIHJldHVybiBvYmplY3Rcbn1cbi8qKlxuICogQ29udmVydHMgZ2l2ZW4gb2JqZWN0IGludG8gaXRzIHNlcmlhbGl6ZWQgSlNPTiByZXByZXNlbnRhdGlvbiBieVxuICogcmVwbGFjaW5nIGNpcmN1bGFyIHJlZmVyZW5jZXMgd2l0aCBhIGdpdmVuIHByb3ZpZGVkIHZhbHVlLlxuICpcbiAqIFRoaXMgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBvYmplY3QgcmVjdXJzaXZlbHkgYW5kIHRyYWNrcyBvZiBzZWVuIGFuZFxuICogYWxyZWFkeSBzZXJpYWxpemVkIHN0cnVjdHVyZXMgdG8gcmV1c2UgZ2VuZXJhdGVkIHN0cmluZ3Mgb3IgbWFyayBhXG4gKiBjaXJjdWxhciByZWZlcmVuY2UuXG4gKiBAcGFyYW0gb2JqZWN0IC0gT2JqZWN0IHRvIHNlcmlhbGl6ZS5cbiAqIEBwYXJhbSBkZXRlcm1pbmVDaXJjdWxhclJlZmVyZW5jZVZhbHVlIC0gQ2FsbGJhY2sgdG8gY3JlYXRlIGEgZmFsbGJhY2tcbiAqIHZhbHVlIGRlcGVuZGluZyBvbiBnaXZlbiByZWR1bmRhbnQgdmFsdWUuXG4gKiBAcGFyYW0gbnVtYmVyT2ZTcGFjZXMgLSBOdW1iZXIgb2Ygc3BhY2VzIHRvIHVzZSBmb3Igc3RyaW5nIGZvcm1hdHRpbmcuXG4gKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIEpTT04gc3RyaW5nLlxuICovXG5leHBvcnQgY29uc3QgY29udmVydENpcmN1bGFyT2JqZWN0VG9KU09OID0gKFxuICAgIG9iamVjdDogdW5rbm93bixcbiAgICBkZXRlcm1pbmVDaXJjdWxhclJlZmVyZW5jZVZhbHVlOiAoKFxuICAgICAgICBzZXJpYWxpemVkVmFsdWU6IHVua25vd24sXG4gICAgICAgIGtleTogbnVsbCB8IHN0cmluZyxcbiAgICAgICAgdmFsdWU6IHVua25vd24sXG4gICAgICAgIHNlZW5PYmplY3RzOiBNYXA8dW5rbm93biwgdW5rbm93bj5cbiAgICApID0+IHVua25vd24pID0gKHNlcmlhbGl6ZWRWYWx1ZTogdW5rbm93bik6IHVua25vd24gPT5cbiAgICAgICAgc2VyaWFsaXplZFZhbHVlID8/ICdfX2NpcmN1bGFyUmVmZXJlbmNlX18nLFxuICAgIG51bWJlck9mU3BhY2VzID0gMFxuKTogUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5zdHJpbmdpZnk+IHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCBzZWVuT2JqZWN0czogTWFwPHVua25vd24sIHVua25vd24+ID0gbmV3IE1hcDx1bmtub3duLCB1bmtub3duPigpXG5cbiAgICBjb25zdCBzdHJpbmdpZmllciA9IChvYmplY3Q6IHVua25vd24pOiBzdHJpbmcgPT4ge1xuICAgICAgICBjb25zdCByZXBsYWNlciA9IChrZXk6IG51bGwgfCBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdW5rbm93biA9PiB7XG4gICAgICAgICAgICBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlZW5PYmplY3RzLmhhcyh2YWx1ZSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkZXRlcm1pbmVDaXJjdWxhclJlZmVyZW5jZVZhbHVlKFxuICAgICAgICAgICAgICAgICAgICAgICAgc2Vlbk9iamVjdHMuZ2V0KHZhbHVlKSA/PyBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWVuT2JqZWN0c1xuICAgICAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgICAgICAvLyBOT1RFOiBTZXQgYmVmb3JlIHRyYXZlcnNpbmcgZGVlcGVyIHRvIGRldGVjdCBjeWNsZXMuXG4gICAgICAgICAgICAgICAgc2Vlbk9iamVjdHMuc2V0KHZhbHVlLCBudWxsKVxuXG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdDogQXJyYXk8dW5rbm93bj4gfCBNYXBwaW5nPHVua25vd24+XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFtdXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHJlcGxhY2VyKG51bGwsIGl0ZW0pKVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHt9XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW25hbWUsIHN1YlZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbbmFtZV0gPSByZXBsYWNlcihuYW1lLCBzdWJWYWx1ZSlcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzZWVuT2JqZWN0cy5zZXQodmFsdWUsIHJlc3VsdClcblxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqZWN0LCByZXBsYWNlciwgbnVtYmVyT2ZTcGFjZXMpXG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmluZ2lmaWVyKG9iamVjdClcbn1cbi8qKlxuICogQ29udmVydHMgZ2l2ZW4gbWFwIGFuZCBhbGwgbmVzdGVkIGZvdW5kIG1hcHMgb2JqZWN0cyB0byBjb3JyZXNwb25kaW5nXG4gKiBvYmplY3QuXG4gKiBAcGFyYW0gb2JqZWN0IC0gTWFwIHRvIGNvbnZlcnQgdG8uXG4gKiBAcGFyYW0gZGVlcCAtIEluZGljYXRlcyB3aGV0aGVyIHRvIHBlcmZvcm0gYSByZWN1cnNpdmUgY29udmVyc2lvbi5cbiAqIEByZXR1cm5zIEdpdmVuIG1hcCBhcyBvYmplY3QuXG4gKi9cbmV4cG9ydCBjb25zdCBjb252ZXJ0TWFwVG9QbGFpbk9iamVjdCA9IChcbiAgICBvYmplY3Q6IHVua25vd24sIGRlZXAgPSB0cnVlXG4pOiB1bmtub3duID0+IHtcbiAgICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKGlzTWFwKG9iamVjdCkpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld09iamVjdDogTWFwcGluZzx1bmtub3duPiA9IHt9XG4gICAgICAgICAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2Ygb2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKGRlZXApXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gY29udmVydE1hcFRvUGxhaW5PYmplY3QodmFsdWUsIGRlZXApXG5cbiAgICAgICAgICAgICAgICBpZiAoWydudW1iZXInLCAnc3RyaW5nJ10uaW5jbHVkZXModHlwZW9mIGtleSkpXG4gICAgICAgICAgICAgICAgICAgIG5ld09iamVjdFtTdHJpbmcoa2V5KV0gPSB2YWx1ZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbmV3T2JqZWN0XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVlcClcbiAgICAgICAgICAgIGlmIChpc1BsYWluT2JqZWN0KG9iamVjdCkpXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMob2JqZWN0KSlcbiAgICAgICAgICAgICAgICAgICAgKG9iamVjdCBhcyBNYXBwaW5nPHVua25vd24+KVtrZXldID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRNYXBUb1BsYWluT2JqZWN0KHZhbHVlLCBkZWVwKVxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gMFxuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBvYmplY3QgYXMgQXJyYXk8dW5rbm93bj4pIHtcbiAgICAgICAgICAgICAgICAgICAgKG9iamVjdCBhcyBBcnJheTx1bmtub3duPilbaW5kZXhdID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRNYXBUb1BsYWluT2JqZWN0KHZhbHVlLCBkZWVwKVxuXG4gICAgICAgICAgICAgICAgICAgIGluZGV4ICs9IDFcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzU2V0KG9iamVjdCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjYWNoZTogQXJyYXk8dW5rbm93bj4gPSBbXVxuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmRlbGV0ZSh2YWx1ZSlcblxuICAgICAgICAgICAgICAgICAgICBjYWNoZS5wdXNoKGNvbnZlcnRNYXBUb1BsYWluT2JqZWN0KHZhbHVlLCBkZWVwKSlcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGNhY2hlKVxuICAgICAgICAgICAgICAgICAgICBvYmplY3QuYWRkKHZhbHVlKVxuICAgICAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvYmplY3Rcbn1cbi8qKlxuICogQ29udmVydHMgZ2l2ZW4gcGxhaW4gb2JqZWN0IGFuZCBhbGwgbmVzdGVkIGZvdW5kIG9iamVjdHMgdG9cbiAqIGNvcnJlc3BvbmRpbmcgbWFwLlxuICogQHBhcmFtIG9iamVjdCAtIE9iamVjdCB0byBjb252ZXJ0IHRvLlxuICogQHBhcmFtIGRlZXAgLSBJbmRpY2F0ZXMgd2hldGhlciB0byBwZXJmb3JtIGEgcmVjdXJzaXZlIGNvbnZlcnNpb24uXG4gKiBAcmV0dXJucyBHaXZlbiBvYmplY3QgYXMgbWFwLlxuICovXG5leHBvcnQgY29uc3QgY29udmVydFBsYWluT2JqZWN0VG9NYXAgPSAoXG4gICAgb2JqZWN0OiB1bmtub3duLCBkZWVwID0gdHJ1ZVxuKTogdW5rbm93biA9PiB7XG4gICAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChpc1BsYWluT2JqZWN0KG9iamVjdCkpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld09iamVjdCA9IG5ldyBNYXA8bnVtYmVyIHwgc3RyaW5nLCB1bmtub3duPigpXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhvYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRlZXApXG4gICAgICAgICAgICAgICAgICAgIChvYmplY3QgYXMgTWFwcGluZzx1bmtub3duPilba2V5XSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0UGxhaW5PYmplY3RUb01hcCh2YWx1ZSwgZGVlcClcblxuICAgICAgICAgICAgICAgIG5ld09iamVjdC5zZXQoa2V5LCAob2JqZWN0IGFzIE1hcHBpbmc8dW5rbm93bj4pW2tleV0pXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBuZXdPYmplY3RcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZWVwKVxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xuICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IDBcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIG9iamVjdCBhcyBBcnJheTx1bmtub3duPikge1xuICAgICAgICAgICAgICAgICAgICAob2JqZWN0IGFzIEFycmF5PHVua25vd24+KVtpbmRleF0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydFBsYWluT2JqZWN0VG9NYXAodmFsdWUsIGRlZXApXG5cbiAgICAgICAgICAgICAgICAgICAgaW5kZXggKz0gMVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNNYXAob2JqZWN0KSlcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBvYmplY3QpXG4gICAgICAgICAgICAgICAgICAgIG9iamVjdC5zZXQoa2V5LCBjb252ZXJ0UGxhaW5PYmplY3RUb01hcCh2YWx1ZSwgZGVlcCkpXG4gICAgICAgICAgICBlbHNlIGlmIChpc1NldChvYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2FjaGU6IEFycmF5PHVua25vd24+ID0gW11cblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2Ygb2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIG9iamVjdC5kZWxldGUodmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIGNhY2hlLnB1c2goY29udmVydFBsYWluT2JqZWN0VG9NYXAodmFsdWUsIGRlZXApKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgY2FjaGUpXG4gICAgICAgICAgICAgICAgICAgIG9iamVjdC5hZGQodmFsdWUpXG4gICAgICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iamVjdFxufVxuLyoqXG4gKiBSZXBsYWNlcyBnaXZlbiBwYXR0ZXJuIGluIGVhY2ggdmFsdWUgaW4gZ2l2ZW4gb2JqZWN0IHJlY3Vyc2l2ZWx5IHdpdGhcbiAqIGdpdmVuIHN0cmluZyByZXBsYWNlbWVudC5cbiAqIEBwYXJhbSBvYmplY3QgLSBPYmplY3QgdG8gY29udmVydCBzdWJzdHJpbmdzIGluLlxuICogQHBhcmFtIHBhdHRlcm4gLSBSZWd1bGFyIGV4cHJlc3Npb24gdG8gcmVwbGFjZS5cbiAqIEBwYXJhbSByZXBsYWNlbWVudCAtIFN0cmluZyB0byB1c2UgYXMgcmVwbGFjZW1lbnQgZm9yIGZvdW5kIHBhdHRlcm5zLlxuICogQHJldHVybnMgQ29udmVydGVkIG9iamVjdCB3aXRoIHJlcGxhY2VkIHBhdHRlcm5zLlxuICovXG5leHBvcnQgY29uc3QgY29udmVydFN1YnN0cmluZ0luUGxhaW5PYmplY3QgPSA8XG4gICAgVHlwZSBleHRlbmRzIE1hcHBpbmc8dW5rbm93bj4gPSBQbGFpbk9iamVjdFxuPihvYmplY3Q6IFR5cGUsIHBhdHRlcm46IFJlZ0V4cCB8IHN0cmluZywgcmVwbGFjZW1lbnQ6IHN0cmluZyk6IFR5cGUgPT4ge1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG9iamVjdCkpXG4gICAgICAgIGlmIChpc1BsYWluT2JqZWN0KHZhbHVlKSlcbiAgICAgICAgICAgIG9iamVjdFtrZXkgYXMga2V5b2YgVHlwZV0gPVxuICAgICAgICAgICAgICAgIGNvbnZlcnRTdWJzdHJpbmdJblBsYWluT2JqZWN0KHZhbHVlLCBwYXR0ZXJuLCByZXBsYWNlbWVudCkgYXNcbiAgICAgICAgICAgICAgICAgICAgdW5rbm93biBhcyBWYWx1ZU9mPFR5cGU+XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpXG4gICAgICAgICAgICAob2JqZWN0IGFzIHVua25vd24gYXMgTWFwcGluZylba2V5XSA9XG4gICAgICAgICAgICAgICAgdmFsdWUucmVwbGFjZShwYXR0ZXJuLCByZXBsYWNlbWVudClcblxuICAgIHJldHVybiBvYmplY3Rcbn1cbi8qIGVzbGludC1kaXNhYmxlIGpzZG9jL3JlcXVpcmUtZGVzY3JpcHRpb24tY29tcGxldGUtc2VudGVuY2UgKi9cbi8qKlxuICogQ29waWVzIGdpdmVuIG9iamVjdCAob2YgYW55IHR5cGUpIGludG8gb3B0aW9uYWxseSBnaXZlbiBkZXN0aW5hdGlvbi5cbiAqIEBwYXJhbSBzb3VyY2UgLSBPYmplY3QgdG8gY29weS5cbiAqIEBwYXJhbSBjb3B5QmxvYnMgLSBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gY29weSBibG9icyBhcyB3ZWxsLlxuICogQHBhcmFtIHJlY3Vyc2lvbkxpbWl0IC0gU3BlY2lmaWVzIGhvdyBkZWVwIHdlIHNob3VsZCB0cmF2ZXJzZSBpbnRvIGdpdmVuXG4gKiBvYmplY3QgcmVjdXJzaXZlbHkuXG4gKiBAcGFyYW0gcmVjdXJzaW9uRW5kVmFsdWUgLSBJbmRpY2F0ZXMgd2hpY2ggdmFsdWUgdG8gdXNlIGZvciByZWN1cnNpb24gZW5kcy5cbiAqIFVzdWFsbHkgYSByZWZlcmVuY2UgdG8gY29ycmVzcG9uZGluZyBzb3VyY2UgdmFsdWUgd2lsbCBiZSB1c2VkLlxuICogQHBhcmFtIGRlc3RpbmF0aW9uIC0gVGFyZ2V0IHRvIGNvcHkgc291cmNlIHRvLlxuICogQHBhcmFtIGN5Y2xpYyAtIEluZGljYXRlcyB3aGV0aGVyIGtub3duIHN1YiBzdHJ1Y3R1cmVzIHNob3VsZCBiZSBjb3BpZWQgb3JcbiAqIHJlZmVyZW5jZWQgKGlmIFwidHJ1ZVwiIGVuZGxlc3MgbG9vcHMgY2FuIG9jY3VyIGlmIHNvdXJjZSBoYXMgY3ljbGljXG4gKiBzdHJ1Y3R1cmVzKS5cbiAqIEBwYXJhbSBrbm93blJlZmVyZW5jZXMgLSBVc2VkIHRvIGF2b2lkIHRyYXZlcnNpbmcgbG9vcHMgYW5kIG5vdCB0byBjb3B5XG4gKiByZWZlcmVuY2VzIGUuZy4gdG8gb2JqZWN0cyBub3QgdG8gY29weSAoZS5nLiBzeW1ib2wgcG9seWZpbGxzKS5cbiAqIEBwYXJhbSByZWN1cnNpb25MZXZlbCAtIEludGVybmFsbHkgdXNlZCB0byB0cmFjayBjdXJyZW50IHJlY3Vyc2lvbiBsZXZlbCBpblxuICogZ2l2ZW4gc291cmNlIGRhdGEgc3RydWN0dXJlLlxuICogQHJldHVybnMgVmFsdWUgXCJ0cnVlXCIgaWYgYm90aCBvYmplY3RzIGFyZSBlcXVhbCBhbmQgXCJmYWxzZVwiIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGNvcHkgPSA8VHlwZSA9IHVua25vd24+KFxuICAgIHNvdXJjZTogVHlwZSxcbiAgICBjb3B5QmxvYnMgPSBmYWxzZSxcbiAgICByZWN1cnNpb25MaW1pdCA9IC0xLFxuICAgIHJlY3Vyc2lvbkVuZFZhbHVlOiB1bmtub3duID0gVkFMVUVfQ09QWV9TWU1CT0wsXG4gICAgZGVzdGluYXRpb246IG51bGwgfCBUeXBlID0gbnVsbCxcbiAgICBjeWNsaWMgPSBmYWxzZSxcbiAgICBrbm93blJlZmVyZW5jZXM6IEFycmF5PHVua25vd24+ID0gW10sXG4gICAgcmVjdXJzaW9uTGV2ZWwgPSAwXG4pOiBUeXBlID0+IHtcbiAgICAvKiBlc2xpbnQtZW5hYmxlIGpzZG9jL3JlcXVpcmUtZGVzY3JpcHRpb24tY29tcGxldGUtc2VudGVuY2UgKi9cbiAgICBpZiAoaXNPYmplY3Qoc291cmNlKSlcbiAgICAgICAgaWYgKGRlc3RpbmF0aW9uKSB7XG4gICAgICAgICAgICBpZiAoc291cmNlID09PSBkZXN0aW5hdGlvbilcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBDYW4ndCBjb3B5IGJlY2F1c2Ugc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmUgYCArXG4gICAgICAgICAgICAgICAgICAgICdpZGVudGljYWwuJ1xuICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICFjeWNsaWMgJiZcbiAgICAgICAgICAgICAgICAhW3VuZGVmaW5lZCwgbnVsbF0uaW5jbHVkZXMoc291cmNlIGFzIHVua25vd24gYXMgbnVsbClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4OiBudW1iZXIgPSBrbm93blJlZmVyZW5jZXMuaW5kZXhPZihzb3VyY2UpXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtub3duUmVmZXJlbmNlc1tpbmRleF0gYXMgVHlwZVxuXG4gICAgICAgICAgICAgICAga25vd25SZWZlcmVuY2VzLnB1c2goc291cmNlKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjb3B5VmFsdWUgPSA8Vj4odmFsdWU6IFYpOiBudWxsIHwgViA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICByZWN1cnNpb25MaW1pdCAhPT0gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgcmVjdXJzaW9uTGltaXQgPCByZWN1cnNpb25MZXZlbCArIDFcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWN1cnNpb25FbmRWYWx1ZSA9PT0gVkFMVUVfQ09QWV9TWU1CT0wgP1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVjdXJzaW9uRW5kVmFsdWUgYXMgbnVsbCB8IFZcblxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogbnVsbCB8IFYgPSBjb3B5KFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgY29weUJsb2JzLFxuICAgICAgICAgICAgICAgICAgICByZWN1cnNpb25MaW1pdCxcbiAgICAgICAgICAgICAgICAgICAgcmVjdXJzaW9uRW5kVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGN5Y2xpYyxcbiAgICAgICAgICAgICAgICAgICAga25vd25SZWZlcmVuY2VzLFxuICAgICAgICAgICAgICAgICAgICByZWN1cnNpb25MZXZlbCArIDFcbiAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICFjeWNsaWMgJiZcbiAgICAgICAgICAgICAgICAgICAgIVt1bmRlZmluZWQsIG51bGxdLmluY2x1ZGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgYXMgdW5rbm93biBhcyBudWxsXG4gICAgICAgICAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAga25vd25SZWZlcmVuY2VzLnB1c2godmFsdWUpXG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNvdXJjZSkpXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHNvdXJjZSlcbiAgICAgICAgICAgICAgICAgICAgKGRlc3RpbmF0aW9uIGFzIHVua25vd24gYXMgQXJyYXk8dW5rbm93bj4pXG4gICAgICAgICAgICAgICAgICAgICAgICAucHVzaChjb3B5VmFsdWUoaXRlbSkpXG4gICAgICAgICAgICBlbHNlIGlmIChzb3VyY2UgaW5zdGFuY2VvZiBNYXApXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2Ygc291cmNlKVxuICAgICAgICAgICAgICAgICAgICAoZGVzdGluYXRpb24gYXMgdW5rbm93biBhcyBNYXA8dW5rbm93biwgdW5rbm93bj4pXG4gICAgICAgICAgICAgICAgICAgICAgICAuc2V0KGtleSwgY29weVZhbHVlKHZhbHVlKSlcbiAgICAgICAgICAgIGVsc2UgaWYgKHNvdXJjZSBpbnN0YW5jZW9mIFNldClcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHNvdXJjZSlcbiAgICAgICAgICAgICAgICAgICAgKGRlc3RpbmF0aW9uIGFzIHVua25vd24gYXMgU2V0PHVua25vd24+KVxuICAgICAgICAgICAgICAgICAgICAgICAgLmFkZChjb3B5VmFsdWUodmFsdWUpKVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHNvdXJjZSkpXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAoZGVzdGluYXRpb24gYXMgTWFwcGluZzxWYWx1ZU9mPFR5cGU+Pilba2V5XSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29weVZhbHVlKHZhbHVlIGFzIFZhbHVlT2Y8VHlwZT4pIGFzIFZhbHVlT2Y8VHlwZT5cbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRmFpbGVkIHRvIGNvcHkgcHJvcGVydHkgdmFsdWUgb2JqZWN0IFwiJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7a2V5fVwiOiAke3JlcHJlc2VudChlcnJvcil9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2F1c2U6IGVycm9yfVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzb3VyY2UpKVxuICAgICAgICAgICAgICAgIHJldHVybiBjb3B5KFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgIGNvcHlCbG9icyxcbiAgICAgICAgICAgICAgICAgICAgcmVjdXJzaW9uTGltaXQsXG4gICAgICAgICAgICAgICAgICAgIHJlY3Vyc2lvbkVuZFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAoW10gYXMgdW5rbm93biBhcyBUeXBlKSxcbiAgICAgICAgICAgICAgICAgICAgY3ljbGljLFxuICAgICAgICAgICAgICAgICAgICBrbm93blJlZmVyZW5jZXMsXG4gICAgICAgICAgICAgICAgICAgIHJlY3Vyc2lvbkxldmVsXG4gICAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICBpZiAoc291cmNlIGluc3RhbmNlb2YgTWFwKVxuICAgICAgICAgICAgICAgIHJldHVybiBjb3B5KFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgIGNvcHlCbG9icyxcbiAgICAgICAgICAgICAgICAgICAgcmVjdXJzaW9uTGltaXQsXG4gICAgICAgICAgICAgICAgICAgIHJlY3Vyc2lvbkVuZFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAobmV3IE1hcCgpIGFzIHVua25vd24gYXMgVHlwZSksXG4gICAgICAgICAgICAgICAgICAgIGN5Y2xpYyxcbiAgICAgICAgICAgICAgICAgICAga25vd25SZWZlcmVuY2VzLFxuICAgICAgICAgICAgICAgICAgICByZWN1cnNpb25MZXZlbFxuICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgaWYgKHNvdXJjZSBpbnN0YW5jZW9mIFNldClcbiAgICAgICAgICAgICAgICByZXR1cm4gY29weShcbiAgICAgICAgICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgICAgICAgICBjb3B5QmxvYnMsXG4gICAgICAgICAgICAgICAgICAgIHJlY3Vyc2lvbkxpbWl0LFxuICAgICAgICAgICAgICAgICAgICByZWN1cnNpb25FbmRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgKG5ldyBTZXQoKSBhcyB1bmtub3duIGFzIFR5cGUpLFxuICAgICAgICAgICAgICAgICAgICBjeWNsaWMsXG4gICAgICAgICAgICAgICAgICAgIGtub3duUmVmZXJlbmNlcyxcbiAgICAgICAgICAgICAgICAgICAgcmVjdXJzaW9uTGV2ZWxcbiAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgIGlmIChzb3VyY2UgaW5zdGFuY2VvZiBEYXRlKVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShzb3VyY2UuZ2V0VGltZSgpKSBhcyB1bmtub3duIGFzIFR5cGVcblxuICAgICAgICAgICAgaWYgKHNvdXJjZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1vZGlmaWVyID0gL1teL10qJC8uZXhlYyhzb3VyY2UudG9TdHJpbmcoKSlcbiAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbiA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZS5zb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyID8gbW9kaWZpZXJbMF0gOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICApIGFzIHVua25vd24gYXMgVHlwZVxuICAgICAgICAgICAgICAgIChkZXN0aW5hdGlvbiBhcyB1bmtub3duIGFzIFJlZ0V4cCkubGFzdEluZGV4ID1cbiAgICAgICAgICAgICAgICAgICAgc291cmNlLmxhc3RJbmRleFxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgJiYgc291cmNlIGluc3RhbmNlb2YgQmxvYilcbiAgICAgICAgICAgICAgICByZXR1cm4gY29weUJsb2JzID9cbiAgICAgICAgICAgICAgICAgICAgc291cmNlLnNsaWNlKDAsIHNvdXJjZS5zaXplLCBzb3VyY2UudHlwZSkgYXNcbiAgICAgICAgICAgICAgICAgICAgICAgIHVua25vd24gYXNcbiAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgOlxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VcblxuICAgICAgICAgICAgcmV0dXJuIGNvcHkoXG4gICAgICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgICAgIGNvcHlCbG9icyxcbiAgICAgICAgICAgICAgICByZWN1cnNpb25MaW1pdCxcbiAgICAgICAgICAgICAgICByZWN1cnNpb25FbmRWYWx1ZSxcbiAgICAgICAgICAgICAgICAoe30gYXMgdW5rbm93biBhcyBUeXBlKSxcbiAgICAgICAgICAgICAgICBjeWNsaWMsXG4gICAgICAgICAgICAgICAga25vd25SZWZlcmVuY2VzLFxuICAgICAgICAgICAgICAgIHJlY3Vyc2lvbkxldmVsXG4gICAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgIHJldHVybiBkZXN0aW5hdGlvbiB8fCBzb3VyY2Vcbn1cbi8qKlxuICogRGV0ZXJtaW5lIHRoZSBpbnRlcm5hbCBKYXZhU2NyaXB0IFtbQ2xhc3NdXSBvZiBhbiBvYmplY3QuXG4gKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBhbmFseXplLlxuICogQHJldHVybnMgTmFtZSBvZiBkZXRlcm1pbmVkIHR5cGUuXG4gKi9cbmV4cG9ydCBjb25zdCBkZXRlcm1pbmVUeXBlID0gKHZhbHVlPzogdW5rbm93bik6IHN0cmluZyA9PiB7XG4gICAgaWYgKFtudWxsLCB1bmRlZmluZWRdLmluY2x1ZGVzKHZhbHVlIGFzIG51bGwpKVxuICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKVxuXG4gICAgY29uc3QgdHlwZTogc3RyaW5nID0gdHlwZW9mIHZhbHVlXG5cbiAgICBpZiAoXG4gICAgICAgIFsnZnVuY3Rpb24nLCAnb2JqZWN0J10uaW5jbHVkZXModHlwZSkgJiZcbiAgICAgICAgJ3RvU3RyaW5nJyBpbiAodmFsdWUgYXMgb2JqZWN0KVxuICAgICkge1xuICAgICAgICBjb25zdCBzdHJpbmdSZXByZXNlbnRhdGlvbiA9XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpXG5cbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChcbiAgICAgICAgICAgIENMQVNTX1RPX1RZUEVfTUFQUElORywgc3RyaW5nUmVwcmVzZW50YXRpb25cbiAgICAgICAgKSlcbiAgICAgICAgICAgIHJldHVybiBDTEFTU19UT19UWVBFX01BUFBJTkdbXG4gICAgICAgICAgICAgICAgc3RyaW5nUmVwcmVzZW50YXRpb24gYXNcbiAgICAgICAgICAgICAgICAgICAga2V5b2YgdHlwZW9mIENMQVNTX1RPX1RZUEVfTUFQUElOR1xuICAgICAgICAgICAgXVxuICAgIH1cblxuICAgIHJldHVybiB0eXBlXG59XG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiBnaXZlbiBpdGVtcyBhcmUgZXF1YWwgZm9yIGdpdmVuIHByb3BlcnR5IGxpc3QuIElmXG4gKiBwcm9wZXJ0eSBsaXN0IGlzbid0IHNldCBhbGwgcHJvcGVydGllcyB3aWxsIGJlIGNoZWNrZWQuIEFsbCBrZXlzIHdoaWNoXG4gKiBzdGFydHMgd2l0aCBvbmUgb2YgdGhlIGV4Y2VwdGlvbiBwcmVmaXhlcyB3aWxsIGJlIG9taXR0ZWQuXG4gKiBAcGFyYW0gZmlyc3RWYWx1ZSAtIEZpcnN0IG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHNlY29uZFZhbHVlIC0gU2Vjb25kIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIGdpdmVuT3B0aW9ucyAtIE9wdGlvbnMgdG8gZGVmaW5lIGhvdyB0byBjb21wYXJlLlxuICogQHBhcmFtIGdpdmVuT3B0aW9ucy5wcm9wZXJ0aWVzIC0gUHJvcGVydHkgbmFtZXMgdG8gY2hlY2suIENoZWNrIGFsbCBpZlxuICogXCJudWxsXCIgaXMgc2VsZWN0ZWQgKGRlZmF1bHQpLlxuICogQHBhcmFtIGdpdmVuT3B0aW9ucy5kZWVwIC0gUmVjdXJzaW9uIGRlcHRoIG5lZ2F0aXZlIHZhbHVlcyBtZWFuc1xuICogaW5maW5pdGVseSBkZWVwIChkZWZhdWx0KS5cbiAqIEBwYXJhbSBnaXZlbk9wdGlvbnMuZXhjZXB0aW9uUHJlZml4ZXMgLSBQcm9wZXJ0eSBwcmVmaXhlcyB3aGljaFxuICogaW5kaWNhdGVzIHByb3BlcnRpZXMgdG8gaWdub3JlLlxuICogQHBhcmFtIGdpdmVuT3B0aW9ucy5pZ25vcmVGdW5jdGlvbnMgLSBJbmRpY2F0ZXMgd2hldGhlciBmdW5jdGlvbnMgaGF2ZVxuICogdG8gYmUgaWRlbnRpY2FsIHRvIGludGVycHJldCBpcyBhcyBlcXVhbC4gSWYgc2V0IHRvIFwidHJ1ZVwiIHR3byBmdW5jdGlvbnNcbiAqIHdpbGwgYmUgYXNzdW1lZCB0byBiZSBlcXVhbCAoZGVmYXVsdCkuXG4gKiBAcGFyYW0gZ2l2ZW5PcHRpb25zLmNvbXBhcmVCbG9icyAtIEluZGljYXRlcyB3aGV0aGVyIGJpbmFyeSBkYXRhIHNob3VsZFxuICogYmUgY29udmVydGVkIHRvIGEgYmFzZTY0IHN0cmluZyB0byBjb21wYXJlIHRoZWlyIGNvbnRlbnQuIE1ha2VzIHRoaXNcbiAqIGZ1bmN0aW9uIGFzeW5jaHJvbm91cyBpbiBicm93c2VycyBhbmQgcG90ZW50aWFsbHkgdGFrZXMgYSBsb3Qgb2ZcbiAqIHJlc291cmNlcy5cbiAqIEByZXR1cm5zIFZhbHVlIFwidHJ1ZVwiIGlmIGJvdGggb2JqZWN0cyBhcmUgZXF1YWwgYW5kIFwiZmFsc2VcIiBvdGhlcndpc2UuXG4gKiBJZiBcImNvbXBhcmVCbG9ic1wiIGlzIGFjdGl2YXRlZCwgYW5kIHdlJ3JlIHJ1bm5pbmcgaW4gYSBicm93c2VyIGxpa2VcbiAqIGVudmlyb25tZW50IGFuZCBiaW5hcnkgZGF0YSBpcyBnaXZlbiwgdGhlbiBhIHByb21pc2Ugd3JhcHBpbmcgdGhlXG4gKiBkZXRlcm1pbmVkIGJvb2xlYW4gdmFsdWVzIGlzIHJldHVybmVkLlxuICovXG5leHBvcnQgY29uc3QgZXF1YWxzID0gKFxuICAgIGZpcnN0VmFsdWU6IHVua25vd24sXG4gICAgc2Vjb25kVmFsdWU6IHVua25vd24sXG4gICAgZ2l2ZW5PcHRpb25zOiBQYXJ0aWFsPENvbXBhcmVPcHRpb25zPiA9IHt9XG4pOiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuIHwgc3RyaW5nPiB8IHN0cmluZyA9PiB7XG4gICAgY29uc3Qgb3B0aW9uczogQ29tcGFyZU9wdGlvbnMgPSB7XG4gICAgICAgIGNvbXBhcmVCbG9iczogZmFsc2UsXG4gICAgICAgIGRlZXA6IC0xLFxuICAgICAgICBleGNlcHRpb25QcmVmaXhlczogW10sXG4gICAgICAgIGlnbm9yZUZ1bmN0aW9uczogdHJ1ZSxcbiAgICAgICAgcHJvcGVydGllczogbnVsbCxcbiAgICAgICAgcmV0dXJuUmVhc29uSWZOb3RFcXVhbDogZmFsc2UsXG4gICAgICAgIC4uLmdpdmVuT3B0aW9uc1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgICAgb3B0aW9ucy5pZ25vcmVGdW5jdGlvbnMgJiZcbiAgICAgICAgaXNGdW5jdGlvbihmaXJzdFZhbHVlKSAmJiBpc0Z1bmN0aW9uKHNlY29uZFZhbHVlKSB8fFxuICAgICAgICBmaXJzdFZhbHVlID09PSBzZWNvbmRWYWx1ZSB8fFxuICAgICAgICBpc05vdEFOdW1iZXIoZmlyc3RWYWx1ZSkgJiYgaXNOb3RBTnVtYmVyKHNlY29uZFZhbHVlKSB8fFxuICAgICAgICBmaXJzdFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwICYmIHNlY29uZFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwICYmXG4gICAgICAgIGZpcnN0VmFsdWUudG9TdHJpbmcoKSA9PT0gc2Vjb25kVmFsdWUudG9TdHJpbmcoKSAmJlxuICAgICAgICBmaXJzdFZhbHVlLmZsYWdzLnNwbGl0KCcnKS5zb3J0KCkuam9pbignJykgPT09XG4gICAgICAgIHNlY29uZFZhbHVlLmZsYWdzLnNwbGl0KCcnKS5zb3J0KCkuam9pbignJykgfHxcbiAgICAgICAgZmlyc3RWYWx1ZSBpbnN0YW5jZW9mIERhdGUgJiYgc2Vjb25kVmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmXG4gICAgICAgIChcbiAgICAgICAgICAgIGlzTmFOKGZpcnN0VmFsdWUuZ2V0VGltZSgpKSAmJlxuICAgICAgICAgICAgaXNOYU4oc2Vjb25kVmFsdWUuZ2V0VGltZSgpKSB8fFxuICAgICAgICAgICAgIWlzTmFOKGZpcnN0VmFsdWUuZ2V0VGltZSgpKSAmJlxuICAgICAgICAgICAgIWlzTmFOKHNlY29uZFZhbHVlLmdldFRpbWUoKSkgJiZcbiAgICAgICAgICAgIGZpcnN0VmFsdWUuZ2V0VGltZSgpID09PSBzZWNvbmRWYWx1ZS5nZXRUaW1lKClcbiAgICAgICAgKSB8fFxuICAgICAgICBvcHRpb25zLmNvbXBhcmVCbG9icyAmJlxuICAgICAgICBldmFsKCd0eXBlb2YgQnVmZmVyJykgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChcbiAgICAgICAgICAgIChldmFsKCdCdWZmZXInKSBhcyB0eXBlb2YgQnVmZmVyKSwgJ2lzQnVmZmVyJ1xuICAgICAgICApICYmXG4gICAgICAgIGZpcnN0VmFsdWUgaW5zdGFuY2VvZiBldmFsKCdCdWZmZXInKSAmJlxuICAgICAgICBzZWNvbmRWYWx1ZSBpbnN0YW5jZW9mIGV2YWwoJ0J1ZmZlcicpICYmXG4gICAgICAgIChmaXJzdFZhbHVlIGFzIEJ1ZmZlcikudG9TdHJpbmcoJ2Jhc2U2NCcpID09PVxuICAgICAgICAoc2Vjb25kVmFsdWUgYXMgQnVmZmVyKS50b1N0cmluZygnYmFzZTY0JylcbiAgICApXG4gICAgICAgIHJldHVybiB0cnVlXG5cbiAgICBpZiAoXG4gICAgICAgIG9wdGlvbnMuY29tcGFyZUJsb2JzICYmXG4gICAgICAgIHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICBmaXJzdFZhbHVlIGluc3RhbmNlb2YgQmxvYiAmJlxuICAgICAgICBzZWNvbmRWYWx1ZSBpbnN0YW5jZW9mIEJsb2JcbiAgICApXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxib29sZWFuIHwgc3RyaW5nPigoXG4gICAgICAgICAgICByZXNvbHZlOiAodmFsdWU6IGJvb2xlYW4gfCBzdHJpbmcpID0+IHZvaWRcbiAgICAgICAgKTogdm9pZCA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXM6IEFycmF5PEFycmF5QnVmZmVyIHwgbnVsbCB8IHN0cmluZz4gPSBbXVxuICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBbZmlyc3RWYWx1ZSwgc2Vjb25kVmFsdWVdKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZVJlYWRlcjogRmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgICAgICAgICAgICAgICBmaWxlUmVhZGVyLm9ubG9hZCA9IChldmVudDogRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LnRhcmdldCA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKG51bGwpXG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKChldmVudC50YXJnZXQgYXMgRmlsZVJlYWRlcikucmVzdWx0KVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID09PSAyKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlc1swXSA9PT0gdmFsdWVzWzFdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG9wdGlvbnMucmV0dXJuUmVhc29uSWZOb3RFcXVhbCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGA+Pj4gQmxvYigke3JlcHJlc2VudCh2YWx1ZXNbMF0pfSkgICE9PSBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYEJsb2IoJHtyZXByZXNlbnQodmFsdWVzWzFdKX0pYCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZpbGVSZWFkZXIucmVhZEFzRGF0YVVSTCh2YWx1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgIGlmIChcbiAgICAgICAgaXNQbGFpbk9iamVjdChmaXJzdFZhbHVlKSAmJlxuICAgICAgICBpc1BsYWluT2JqZWN0KHNlY29uZFZhbHVlKSAmJlxuICAgICAgICAhKGZpcnN0VmFsdWUgaW5zdGFuY2VvZiBSZWdFeHAgfHwgc2Vjb25kVmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHx8XG4gICAgICAgIEFycmF5LmlzQXJyYXkoZmlyc3RWYWx1ZSkgJiZcbiAgICAgICAgQXJyYXkuaXNBcnJheShzZWNvbmRWYWx1ZSkgJiZcbiAgICAgICAgZmlyc3RWYWx1ZS5sZW5ndGggPT09IHNlY29uZFZhbHVlLmxlbmd0aCB8fFxuICAgICAgICAoXG4gICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgZGV0ZXJtaW5lVHlwZShmaXJzdFZhbHVlKSA9PT0gZGV0ZXJtaW5lVHlwZShzZWNvbmRWYWx1ZSkgJiZcbiAgICAgICAgICAgICAgICBbJ21hcCcsICdzZXQnXS5pbmNsdWRlcyhkZXRlcm1pbmVUeXBlKGZpcnN0VmFsdWUpKVxuICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgKGZpcnN0VmFsdWUgYXMgU2V0PHVua25vd24+KS5zaXplID09PVxuICAgICAgICAgICAgKHNlY29uZFZhbHVlIGFzIFNldDx1bmtub3duPikuc2l6ZVxuICAgICAgICApXG4gICAgKSB7XG4gICAgICAgIGNvbnN0IHByb21pc2VzOiBBcnJheTxQcm9taXNlPGJvb2xlYW4gfCBzdHJpbmc+PiA9IFtdXG4gICAgICAgIGZvciAoY29uc3QgW2ZpcnN0LCBzZWNvbmRdIG9mIFtcbiAgICAgICAgICAgIFtmaXJzdFZhbHVlLCBzZWNvbmRWYWx1ZV0sXG4gICAgICAgICAgICBbc2Vjb25kVmFsdWUsIGZpcnN0VmFsdWVdXG4gICAgICAgIF0pIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0SXNBcnJheTogYm9vbGVhbiA9IEFycmF5LmlzQXJyYXkoZmlyc3QpXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZmlyc3RJc0FycmF5ICYmXG4gICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAhQXJyYXkuaXNBcnJheShzZWNvbmQpIHx8XG4gICAgICAgICAgICAgICAgICAgIChmaXJzdCBhcyBBcnJheTx1bmtub3duPikubGVuZ3RoICE9PVxuICAgICAgICAgICAgICAgICAgICAoc2Vjb25kIGFzIEFycmF5PHVua25vd24+KS5sZW5ndGhcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMucmV0dXJuUmVhc29uSWZOb3RFcXVhbCA/ICcubGVuZ3RoJyA6IGZhbHNlXG5cbiAgICAgICAgICAgIGNvbnN0IGZpcnN0SXNNYXAgPSBpc01hcChmaXJzdClcbiAgICAgICAgICAgIGlmIChmaXJzdElzTWFwICYmICghaXNNYXAoc2Vjb25kKSB8fCBmaXJzdC5zaXplICE9PSBzZWNvbmQuc2l6ZSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMucmV0dXJuUmVhc29uSWZOb3RFcXVhbCA/ICcuc2l6ZScgOiBmYWxzZVxuXG4gICAgICAgICAgICBjb25zdCBmaXJzdElzU2V0ID0gaXNTZXQoZmlyc3QpXG4gICAgICAgICAgICBpZiAoZmlyc3RJc1NldCAmJiAoIWlzU2V0KHNlY29uZCkgfHwgZmlyc3Quc2l6ZSAhPT0gc2Vjb25kLnNpemUpKVxuICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb25zLnJldHVyblJlYXNvbklmTm90RXF1YWwgPyAnLnNpemUnIDogZmFsc2VcblxuICAgICAgICAgICAgaWYgKGZpcnN0SXNBcnJheSkge1xuICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IDBcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGZpcnN0IGFzIEFycmF5PHVua25vd24+KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmRlZXAgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4gfCBzdHJpbmc+IHwgc3RyaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICApID0gZXF1YWxzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWNvbmQgYXMgQXJyYXk8dW5rbm93bj4pW2luZGV4XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Li4ub3B0aW9ucywgZGVlcDogb3B0aW9ucy5kZWVwIC0gMX1cbiAgICAgICAgICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleDogbnVtYmVyID0gaW5kZXhcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGV0ZXJtaW5lUmVzdWx0ID0gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdDogYm9vbGVhbiB8IHN0cmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgKTogYm9vbGVhbiB8IHN0cmluZyA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYFske1N0cmluZyhjdXJyZW50SW5kZXgpfV1gICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHsnWyc6ICcnLCAnPic6ICcgJ31bcmVzdWx0WzBdXSA/PyAnLicpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LCAndGhlbidcbiAgICAgICAgICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaCgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCBhcyBQcm9taXNlPGJvb2xlYW4gfCBzdHJpbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKS50aGVuKGRldGVybWluZVJlc3VsdCkpXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGV0ZXJtaW5lUmVzdWx0KHJlc3VsdClcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGluZGV4ICs9IDFcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZpcnN0SXNNYXApIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBmaXJzdClcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGVlcCAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0OiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbiB8IHN0cmluZz4gfCBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICkgPSBlcXVhbHMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlY29uZCBhcyBNYXA8dW5rbm93biwgdW5rbm93bj4pLmdldChrZXkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsuLi5vcHRpb25zLCBkZWVwOiBvcHRpb25zLmRlZXAgLSAxfVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGV0ZXJtaW5lUmVzdWx0ID0gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdDogYm9vbGVhbiB8IHN0cmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgKTogYm9vbGVhbiB8IHN0cmluZyA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGdldCgke3JlcHJlc2VudChrZXkpfSlgICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHsnWyc6ICcnLCAnPic6ICcgJ31bcmVzdWx0WzBdXSA/PyAnLicpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LCAndGhlbidcbiAgICAgICAgICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaCgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCBhcyBQcm9taXNlPGJvb2xlYW4gfCBzdHJpbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKS50aGVuKGRldGVybWluZVJlc3VsdCkpXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGV0ZXJtaW5lUmVzdWx0KHJlc3VsdClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChmaXJzdElzU2V0KSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBmaXJzdClcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGVlcCAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGVxdWFsID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN1YlByb21pc2VzOiBBcnJheTxQcm9taXNlPGJvb2xlYW4gfCBzdHJpbmc+PiA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW11cbiAgICAgICAgICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTk9URTogQ2hlY2sgaWYgdGhlaXIgZXhpc3RzIGF0IGxlYXN0IG9uZSBiZWluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVxdWFsbHkuXG4gICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBzZWNvbmRWYWx1ZSBvZiBzZWNvbmQgYXMgU2V0PHVua25vd24+KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0OiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4gfCBzdHJpbmc+IHwgc3RyaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA9IGVxdWFscyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Li4ub3B0aW9ucywgZGVlcDogb3B0aW9ucy5kZWVwIC0gMX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVxdWFsID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJQcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IGFzIFByb21pc2U8Ym9vbGVhbiB8IHN0cmluZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZXRlcm1pbmVSZXN1bHQgPSAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXF1YWw6IGJvb2xlYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICk6IGJvb2xlYW4gfCBzdHJpbmcgPT4gZXF1YWwgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucmV0dXJuUmVhc29uSWZOb3RFcXVhbCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGA+Pj4gey0+ICR7cmVwcmVzZW50KHZhbHVlKX0gbm90IGZvdW5kfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXF1YWwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTk9URTogV2UgZG8gbm90IGhhdmUgdG8gd2FpdCBmb3IgcHJvbWlzZXMgdG8gYmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWQgd2hlbiBvbmUgbWF0Y2ggY291bGQgYmUgZm91bmQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ViUHJvbWlzZXMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2gobmV3IFByb21pc2U8Ym9vbGVhbiB8IHN0cmluZz4oKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlOiAodmFsdWU6IGJvb2xlYW4gfCBzdHJpbmcpID0+IHZvaWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvbWlzZS5hbGw8Ym9vbGVhbiB8IHN0cmluZz4oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJQcm9taXNlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLnRoZW4oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVzdWx0czogQXJyYXk8Ym9vbGVhbiB8IHN0cmluZz4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRldGVybWluZVJlc3VsdChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5zb21lKChyZXN1bHQpID0+IHJlc3VsdClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEbyBub3RoaW5nLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZXRlcm1pbmVSZXN1bHQoZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKFxuICAgICAgICAgICAgICAgICAgICBmaXJzdCBhcyBNYXBwaW5nPHVua25vd24+XG4gICAgICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnByb3BlcnRpZXMgJiYgIW9wdGlvbnMucHJvcGVydGllcy5pbmNsdWRlcyhrZXkpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGRvQnJlYWsgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGV4Y2VwdGlvblByZWZpeCBvZiBvcHRpb25zLmV4Y2VwdGlvblByZWZpeGVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtleS5zdGFydHNXaXRoKGV4Y2VwdGlvblByZWZpeCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb0JyZWFrID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGRvQnJlYWspXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmRlZXAgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4gfCBzdHJpbmc+IHwgc3RyaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICApID0gZXF1YWxzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWNvbmQgYXMgTWFwcGluZzx1bmtub3duPilba2V5XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Li4ub3B0aW9ucywgZGVlcDogb3B0aW9ucy5kZWVwIC0gMX1cbiAgICAgICAgICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRldGVybWluZVJlc3VsdCA9IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IGJvb2xlYW4gfCBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICk6IGJvb2xlYW4gfCBzdHJpbmcgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJyA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeydbJzogJycsICc+JzogJyAnfVtyZXN1bHRbMF1dID8/ICcuJykgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQsICd0aGVuJ1xuICAgICAgICAgICAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IGFzIFByb21pc2U8Ym9vbGVhbiB8IHN0cmluZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLnRoZW4oZGV0ZXJtaW5lUmVzdWx0KSlcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZXRlcm1pbmVSZXN1bHQocmVzdWx0KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb21pc2VzLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxib29sZWFuIHwgc3RyaW5nPigoXG4gICAgICAgICAgICAgICAgcmVzb2x2ZTogKHZhbHVlOiBib29sZWFuIHwgc3RyaW5nKSA9PiB2b2lkXG4gICAgICAgICAgICApOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdHM6IEFycmF5PGJvb2xlYW4gfCBzdHJpbmc+KTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0IHx8IHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvIG5vdGhpbmcuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgcmV0dXJuIG9wdGlvbnMucmV0dXJuUmVhc29uSWZOb3RFcXVhbCA/XG4gICAgICAgIGA+Pj4gJHtyZXByZXNlbnQoZmlyc3RWYWx1ZSl9ICE9PSAke3JlcHJlc2VudChzZWNvbmRWYWx1ZSl9YCA6XG4gICAgICAgIGZhbHNlXG59XG4vKipcbiAqIFdyYXBzIGdpdmVuIGRhdGEgc3RydWN0dXJlIGludG8gcHJveGllcyByZWN1cnNpdmVseSB0byBldmFsdWF0ZSBhbmQgcmVzb2x2ZVxuICogZWFjaCBnZXQgcmVxdWVzdCB0byBkYXRhIGhhdmluZyBhbiBvYmplY3Qgd2l0aCBpbmRpY2F0aW5nIGtleXMgYW5kIHJlcGxhY2VzXG4gKiB0aGF0IG9iamVjdCB3aXRoIGNvcnJlc3BvbmRpbmcgZXZhbHVhdGVkIHZhbHVlcy4gQWxsIG5lc3RlZCBvYmplY3RzIGFyZVxuICogd3JhcHBlZCB3aXRoIGEgcHJveHkgdG8gcmVzb2x2ZSBjaGFpbnMgb2YgcmVmZXJlbmNpbmcgZXhwcmVzc2lvbnMgYXMgd2VsbC5cbiAqIEBwYXJhbSBvYmplY3QgLSBHaXZlbiBtYXBwaW5nIHRvIHJlc29sdmUuXG4gKiBAcGFyYW0gZ2l2ZW5PcHRpb25zIC0gT3B0aW9ucyB0byBjb25maWd1cmUgZXZhbHVhdGlvbi5cbiAqIEBwYXJhbSBnaXZlbk9wdGlvbnMuc2NvcGUgLSBTY29wZSB0byB1c2UgZXZhbHVhdGUgYWdhaW4uXG4gKiBAcGFyYW0gZ2l2ZW5PcHRpb25zLnNlbGZSZWZlcmVuY2VOYW1lIC0gTmFtZSB0byB1c2UgZm9yIHJlZmVyZW5jZSB0byBnaXZlblxuICogb2JqZWN0LlxuICogQHBhcmFtIGdpdmVuT3B0aW9ucy5leHByZXNzaW9uSW5kaWNhdG9yS2V5IC0gSW5kaWNhdG9yIHByb3BlcnR5IG5hbWUgdG8gbWFya1xuICogYSB2YWx1ZSB0byBldmFsdWF0ZS5cbiAqIEBwYXJhbSBnaXZlbk9wdGlvbnMuZXhlY3V0aW9uSW5kaWNhdG9yS2V5IC0gSW5kaWNhdG9yIHByb3BlcnR5IG5hbWUgdG8gbWFya1xuICogYSB2YWx1ZSB0byBldmFsdWF0ZS5cbiAqIEByZXR1cm5zIEV2YWx1YXRlZCBnaXZlbiBtYXBwaW5nLlxuICovXG5leHBvcnQgY29uc3QgZXZhbHVhdGVEeW5hbWljRGF0YSA9IDxUeXBlID0gdW5rbm93bj4oXG4gICAgb2JqZWN0OiBudWxsIHwgUmVjdXJzaXZlRXZhbHVhdGVhYmxlPFR5cGU+LFxuICAgIGdpdmVuT3B0aW9uczogUGFydGlhbDxFdmFsdWF0ZUR5bmFtaWNEYXRhT3B0aW9ucz4gPSB7fVxuKTogVHlwZSA9PiB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgc2NvcGU6IHt9LFxuICAgICAgICBzZWxmUmVmZXJlbmNlTmFtZTogJ3NlbGYnLFxuICAgICAgICBleHByZXNzaW9uSW5kaWNhdG9yS2V5OiAnX19ldmFsdWF0ZV9fJyxcbiAgICAgICAgZXhlY3V0aW9uSW5kaWNhdG9yS2V5OiAnX19leGVjdXRlX18nLFxuICAgICAgICAuLi5naXZlbk9wdGlvbnNcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iamVjdCAhPT0gJ29iamVjdCcgfHwgb2JqZWN0ID09PSBudWxsKVxuICAgICAgICByZXR1cm4gb2JqZWN0IGFzIHVua25vd24gYXMgVHlwZVxuXG4gICAgaWYgKCEob3B0aW9ucy5zZWxmUmVmZXJlbmNlTmFtZSBpbiBvcHRpb25zLnNjb3BlKSlcbiAgICAgICAgb3B0aW9ucy5zY29wZVtvcHRpb25zLnNlbGZSZWZlcmVuY2VOYW1lXSA9IG9iamVjdFxuXG4gICAgY29uc3QgaW50ZXJuYWxFdmFsdWF0ZUFuZFRocm93RXJyb3IgPSAoXG4gICAgICAgIGNvZGU6IHN0cmluZywgdHlwZTogc3RyaW5nID0gb3B0aW9ucy5leHByZXNzaW9uSW5kaWNhdG9yS2V5XG4gICAgKTogVHlwZSA9PlxuICAgICAgICBldmFsdWF0ZUFuZFRocm93RXJyb3I8VHlwZT4oXG4gICAgICAgICAgICBjb2RlLCBvcHRpb25zLnNjb3BlLCB0eXBlID09PSBvcHRpb25zLmV4ZWN1dGlvbkluZGljYXRvcktleVxuICAgICAgICApXG5cbiAgICBjb25zdCBhZGRQcm94eVJlY3Vyc2l2ZWx5ID0gKGRhdGE6IHVua25vd24pOiB1bmtub3duID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnIHx8XG4gICAgICAgICAgICBkYXRhID09PSBudWxsIHx8XG4gICAgICAgICAgICB0eXBlb2YgUHJveHkgPT09ICd1bmRlZmluZWQnXG4gICAgICAgIClcbiAgICAgICAgICAgIHJldHVybiBkYXRhXG5cbiAgICAgICAgZm9yIChjb25zdCBba2V5LCBnaXZlblZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkYXRhKSlcbiAgICAgICAgICAgIGlmIChrZXkgIT09ICdfX3RhcmdldF9fJyAmJiBpc09iamVjdChnaXZlblZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlOiB1bmtub3duID0gZ2l2ZW5WYWx1ZVxuXG4gICAgICAgICAgICAgICAgYWRkUHJveHlSZWN1cnNpdmVseSh2YWx1ZSlcbiAgICAgICAgICAgICAgICAvLyBOT1RFOiBXZSBvbmx5IHdyYXAgbmVlZGVkIG9iamVjdHMgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuXG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSwgb3B0aW9ucy5leHByZXNzaW9uSW5kaWNhdG9yS2V5XG4gICAgICAgICAgICAgICAgICAgICkgfHxcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsIG9wdGlvbnMuZXhlY3V0aW9uSW5kaWNhdG9yS2V5XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFja3VwOiBNYXBwaW5nPHVua25vd24+ID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGFzIE1hcHBpbmc8dW5rbm93bj5cbiAgICAgICAgICAgICAgICAgICAgKGRhdGEgYXMgTWFwcGluZzxQcm94eVR5cGU+KVtrZXldID0gbmV3IFByb3h5KFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgYXMgUmVjb3JkPHN0cmluZyB8IHN5bWJvbCwgdW5rbm93bj4sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDogUmVjb3JkPHN0cmluZyB8IHN5bWJvbCwgdW5rbm93bj4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogc3RyaW5nIHwgc3ltYm9sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTogdW5rbm93biA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09ICdfX3RhcmdldF9fJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXRcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSAnaGFzT3duUHJvcGVydHknKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldFtrZXldXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PVEU6IFZlcnkgY29tcGxpY2F0ZWQgc2VjdGlvbiwgZG8gb25seVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlcyB3aGlsZSBoYXZpbmcgZ29vZCB0ZXN0cy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCB0eXBlIG9mIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuZXhwcmVzc2lvbkluZGljYXRvcktleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuZXhlY3V0aW9uSW5kaWNhdG9yS2V5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ID09PSB0eXBlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHRhcmdldFtrZXldID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbEV2YWx1YXRlQW5kVGhyb3dFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFtrZXldLCB0eXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWRUYXJnZXQ6IHVua25vd24gPSByZXNvbHZlKHRhcmdldClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gJ3RvU3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBNYXBwaW5nPFVua25vd25GdW5jdGlvbj4gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsRXZhbHVhdGVBbmRUaHJvd0Vycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlZFRhcmdldCBhcyBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIGFzIE1hcHBpbmc8VW5rbm93bkZ1bmN0aW9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0W2tleV0uYmluZChyZXN1bHQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxFdmFsdWF0ZUFuZFRocm93RXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVkVGFyZ2V0IGFzIHN0cmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgYXMgUmVjb3JkPHN5bWJvbCwgdW5rbm93bj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRba2V5XSBhcyBudWxsIHwgVW5rbm93bkZ1bmN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApPy5iaW5kKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldIGFzIFVua25vd25GdW5jdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkuYmluZChyZXN1bHQpXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRba2V5XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCB0eXBlIG9mIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuZXhwcmVzc2lvbkluZGljYXRvcktleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuZXhlY3V0aW9uSW5kaWNhdG9yS2V5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jYWxsKHRhcmdldCwgdHlwZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGludGVybmFsRXZhbHVhdGVBbmRUaHJvd0Vycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlZFRhcmdldCBhcyBzdHJpbmcsIHR5cGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIGFzIE1hcHBpbmc8dW5rbm93bj4pW2tleV1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRUYXJnZXQgYXMgTWFwcGluZzx1bmtub3duPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApW2tleV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW5kIG9mIGNvbXBsaWNhdGVkIHN0dWZmLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duS2V5czogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IE1hcHBpbmc8dW5rbm93bj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOiBBcnJheTxzdHJpbmc+ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCB0eXBlIG9mIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuZXhwcmVzc2lvbkluZGljYXRvcktleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuZXhlY3V0aW9uSW5kaWNhdG9yS2V5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jYWxsKHRhcmdldCwgdHlwZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbEV2YWx1YXRlQW5kVGhyb3dFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRbdHlwZV0gYXMgc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGFyZ2V0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKSBhcyBQcm94eVR5cGVcblxuICAgICAgICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgICAgICAgICAgTk9URTogS25vd24gcHJveHkgcG9seWZpbGxzIGRvZXMgbm90IHByb3ZpZGUgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICBcIl9fdGFyZ2V0X19cIiBhcGkuXG4gICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIGlmICghKGRhdGEgYXMgTWFwcGluZzxQcm94eVR5cGU+KVtrZXldLl9fdGFyZ2V0X18pXG4gICAgICAgICAgICAgICAgICAgICAgICAoZGF0YSBhcyBNYXBwaW5nPFByb3h5VHlwZT4pW2tleV0uX190YXJnZXRfXyA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja3VwXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRhXG4gICAgfVxuXG4gICAgY29uc3QgcmVzb2x2ZSA9IChkYXRhOiB1bmtub3duKTogdW5rbm93biA9PiB7XG4gICAgICAgIGlmIChpc09iamVjdChkYXRhKSkge1xuICAgICAgICAgICAgaWYgKGlzUHJveHkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAvLyBOT1RFOiBXZSBoYXZlIHRvIHNraXAgXCJvd25LZXlzXCIgcHJveHkgdHJhcCBoZXJlLlxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdHlwZSBvZiBbXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuZXhwcmVzc2lvbkluZGljYXRvcktleSxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5leGVjdXRpb25JbmRpY2F0b3JLZXlcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIHR5cGUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChkYXRhIGFzIE1hcHBpbmc8dW5rbm93bj4pW3R5cGVdXG5cbiAgICAgICAgICAgICAgICBkYXRhID0gZGF0YS5fX3RhcmdldF9fXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKFxuICAgICAgICAgICAgICAgIGRhdGEgYXMgTWFwcGluZzx1bmtub3duPlxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICAgIGlmIChbXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuZXhwcmVzc2lvbkluZGljYXRvcktleSxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5leGVjdXRpb25JbmRpY2F0b3JLZXlcbiAgICAgICAgICAgICAgICBdLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBQcm94eSA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbEV2YWx1YXRlQW5kVGhyb3dFcnJvcih2YWx1ZSBhcyBzdHJpbmcpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgKGRhdGEgYXMgTWFwcGluZzx1bmtub3duPilba2V5XSA9IHJlc29sdmUodmFsdWUpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0YVxuICAgIH1cblxuICAgIG9wdGlvbnMuc2NvcGUucmVzb2x2ZSA9IHJlc29sdmVcbiAgICBjb25zdCByZW1vdmVQcm94eVJlY3Vyc2l2ZWx5ID0gKGRhdGE6IHVua25vd24pOiB1bmtub3duID0+IHtcbiAgICAgICAgaWYgKGlzT2JqZWN0KGRhdGEpKVxuICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGF0YSkpXG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBrZXkgIT09ICdfX3RhcmdldF9fJyAmJlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgICAgICBbJ2Z1bmN0aW9uJywgJ3VuZGVmaW5lZCddLmluY2x1ZGVzKHR5cGVvZiB2YWx1ZSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0OiB1bmtub3duID1cbiAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZSBhcyB7X190YXJnZXRfXzogdW5rbm93bn0pLl9fdGFyZ2V0X19cbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0YXJnZXQgIT09ICd1bmRlZmluZWQnKVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtrZXldID0gdGFyZ2V0XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVByb3h5UmVjdXJzaXZlbHkodmFsdWUpXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRhXG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChcbiAgICAgICAgb2JqZWN0LCBvcHRpb25zLmV4cHJlc3Npb25JbmRpY2F0b3JLZXlcbiAgICApKVxuICAgICAgICByZXR1cm4gaW50ZXJuYWxFdmFsdWF0ZUFuZFRocm93RXJyb3Iob2JqZWN0W1xuICAgICAgICAgICAgb3B0aW9ucy5leHByZXNzaW9uSW5kaWNhdG9yS2V5IGFzIGtleW9mIFJlY3Vyc2l2ZUV2YWx1YXRlYWJsZTxUeXBlPlxuICAgICAgICBdKVxuICAgIGVsc2UgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChcbiAgICAgICAgb2JqZWN0LCBvcHRpb25zLmV4ZWN1dGlvbkluZGljYXRvcktleVxuICAgICkpXG4gICAgICAgIHJldHVybiBpbnRlcm5hbEV2YWx1YXRlQW5kVGhyb3dFcnJvcihcbiAgICAgICAgICAgIG9iamVjdFtvcHRpb25zLmV4ZWN1dGlvbkluZGljYXRvcktleSBhc1xuICAgICAgICAgICAgICAgIGtleW9mIFJlY3Vyc2l2ZUV2YWx1YXRlYWJsZTxUeXBlPl0sXG4gICAgICAgICAgICBvcHRpb25zLmV4ZWN1dGlvbkluZGljYXRvcktleVxuICAgICAgICApXG5cbiAgICByZXR1cm4gcmVtb3ZlUHJveHlSZWN1cnNpdmVseShyZXNvbHZlKGFkZFByb3h5UmVjdXJzaXZlbHkob2JqZWN0KSkpIGFzIFR5cGVcbn1cbi8qKlxuICogU2VhcmNoZXMgZm9yIGluZGljYXRpbmcga2V5cyBhbmQgcmVwbGFjZXMgdGhhdCBkYXRhIHdpdGggY29ycmVzcG9uZGluZ1xuICogZXZhbHVhdGVkIGFuZCBwcm9taXNlIHJlc29sdmVkIHZhbHVlLlxuICogQHBhcmFtIGRhdGEgLSBHaXZlbiBtYXBwaW5nIHRvIHJlc29sdmUuXG4gKiBAcGFyYW0gZ2l2ZW5PcHRpb25zIC0gT3B0aW9ucyB0byBjb25maWd1cmUgZXZhbHVhdGlvbi5cbiAqIEBwYXJhbSBnaXZlbk9wdGlvbnMuc2NvcGUgLSBTY29wZSB0byB1c2UgZXZhbHVhdGUgYWdhaW4uXG4gKiBAcGFyYW0gZ2l2ZW5PcHRpb25zLnNlbGZSZWZlcmVuY2VOYW1lIC0gTmFtZSB0byB1c2UgZm9yIHJlZmVyZW5jZSB0byBnaXZlblxuICogb2JqZWN0LlxuICogQHBhcmFtIGdpdmVuT3B0aW9ucy5leHByZXNzaW9uSW5kaWNhdG9yS2V5IC0gSW5kaWNhdG9yIHByb3BlcnR5IG5hbWUgdG8gbWFya1xuICogYSB2YWx1ZSB0byBldmFsdWF0ZS5cbiAqIEBwYXJhbSBnaXZlbk9wdGlvbnMuZXhlY3V0aW9uSW5kaWNhdG9yS2V5IC0gSW5kaWNhdG9yIHByb3BlcnR5IG5hbWUgdG8gbWFya1xuICogYSB2YWx1ZSB0byBldmFsdWF0ZS5cbiAqIEByZXR1cm5zIEV2YWx1YXRlZCBnaXZlbiBtYXBwaW5nLlxuICovXG5leHBvcnQgY29uc3QgZXZhbHVhdGVBc3luY0R5bmFtaWNEYXRhID0gYXN5bmMgPFR5cGUgPSB1bmtub3duPihcbiAgICBkYXRhOiBudWxsIHwgUmVjdXJzaXZlQXN5bmNFdmFsdWF0ZWFibGU8VHlwZT4sXG4gICAgZ2l2ZW5PcHRpb25zOiBQYXJ0aWFsPEV2YWx1YXRlRHluYW1pY0RhdGFPcHRpb25zPiA9IHt9XG4pOiBQcm9taXNlPFR5cGU+ID0+IHtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICBzY29wZToge30sXG4gICAgICAgIHNlbGZSZWZlcmVuY2VOYW1lOiAnc2VsZicsXG4gICAgICAgIGV4cHJlc3Npb25JbmRpY2F0b3JLZXk6ICdfX2F3YWl0X2V2YWx1YXRlX18nLFxuICAgICAgICBleGVjdXRpb25JbmRpY2F0b3JLZXk6ICdfX2F3YWl0X2V4ZWN1dGVfXycsXG4gICAgICAgIC4uLmdpdmVuT3B0aW9uc1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcgfHwgZGF0YSA9PT0gbnVsbClcbiAgICAgICAgcmV0dXJuIGRhdGEgYXMgdW5rbm93biBhcyBUeXBlXG5cbiAgICBpZiAoIShvcHRpb25zLnNlbGZSZWZlcmVuY2VOYW1lIGluIG9wdGlvbnMuc2NvcGUpKVxuICAgICAgICBvcHRpb25zLnNjb3BlW29wdGlvbnMuc2VsZlJlZmVyZW5jZU5hbWVdID0gZGF0YVxuXG4gICAgY29uc3QgcmVzdWx0OiBUeXBlID0gZGF0YSBhcyBUeXBlXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGF0YSkpIHtcbiAgICAgICAgaWYgKFtcbiAgICAgICAgICAgIG9wdGlvbnMuZXhwcmVzc2lvbkluZGljYXRvcktleSwgb3B0aW9ucy5leGVjdXRpb25JbmRpY2F0b3JLZXlcbiAgICAgICAgXS5pbmNsdWRlcyhrZXkpKVxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGV2YWx1YXRlQW5kVGhyb3dFcnJvcihcbiAgICAgICAgICAgICAgICB2YWx1ZSBhcyBzdHJpbmcsXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5zY29wZSxcbiAgICAgICAgICAgICAgICBrZXkgPT09IG9wdGlvbnMuZXhlY3V0aW9uSW5kaWNhdG9yS2V5XG4gICAgICAgICAgICApXG5cbiAgICAgICAgaWYgKGlzUGxhaW5PYmplY3QodmFsdWUpKVxuICAgICAgICAgICAgKHJlc3VsdCBhcyBNYXBwaW5nPHVua25vd24+KVtrZXldID1cbiAgICAgICAgICAgICAgICBhd2FpdCBldmFsdWF0ZUFzeW5jRHluYW1pY0RhdGEodmFsdWUsIG9wdGlvbnMpXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdFxufVxuLyoqXG4gKiBSZW1vdmVzIHByb3BlcnRpZXMgaW4gb2JqZWN0cyB3aGVyZSBhIGR5bmFtaWMgaW5kaWNhdG9yIGxpdmVzLlxuICogQHBhcmFtIGRhdGEgLSBPYmplY3QgdG8gdHJhdmVyc2UgcmVjdXJzaXZlbHkuXG4gKiBAcGFyYW0gZXhwcmVzc2lvbkluZGljYXRvcnMgLSBQcm9wZXJ0eSBrZXkgdG8gcmVtb3ZlLlxuICogQHJldHVybnMgR2l2ZW4gb2JqZWN0IHdpdGggcmVtb3ZlZCBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlS2V5c0luRXZhbHVhdGlvbiA9IDxcbiAgICBUIGV4dGVuZHMgTWFwcGluZzx1bmtub3duPiA9IE1hcHBpbmc8dW5rbm93bj5cbj4oXG4gICAgICAgIGRhdGE6IFQsXG4gICAgICAgIGV4cHJlc3Npb25JbmRpY2F0b3JzOiBBcnJheTxzdHJpbmc+ID0gWydfX2V2YWx1YXRlX18nLCAnX19leGVjdXRlX18nXVxuICAgICk6IFQgPT4ge1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhZXhwcmVzc2lvbkluZGljYXRvcnMuaW5jbHVkZXMoa2V5KSAmJlxuICAgICAgICAgICAgZXhwcmVzc2lvbkluZGljYXRvcnMuc29tZSgobmFtZTogc3RyaW5nKTogYm9vbGVhbiA9PlxuICAgICAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBuYW1lKVxuICAgICAgICAgICAgKVxuICAgICAgICApXG4gICAgICAgICAgICBkZWxldGUgKGRhdGEgYXMgdW5rbm93biBhcyBNYXBwaW5nPHVua25vd24+KVtrZXldXG4gICAgICAgIGVsc2UgaWYgKGlzUGxhaW5PYmplY3QodmFsdWUpKVxuICAgICAgICAgICAgcmVtb3ZlS2V5c0luRXZhbHVhdGlvbih2YWx1ZSwgZXhwcmVzc2lvbkluZGljYXRvcnMpXG5cbiAgICByZXR1cm4gZGF0YVxufVxuLyoqXG4gKiBFeHRlbmRzIGdpdmVuIHRhcmdldCBvYmplY3Qgd2l0aCBnaXZlbiBzb3VyY2VzIG9iamVjdC4gQXMgdGFyZ2V0IGFuZFxuICogc291cmNlcyBtYW55IGV4cGFuZGFibGUgdHlwZXMgYXJlIGFsbG93ZWQgYnV0IHRhcmdldCBhbmQgc291cmNlcyBoYXZlIHRvXG4gKiBjb21lIGZyb20gdGhlIHNhbWUgdHlwZS5cbiAqIEBwYXJhbSB0YXJnZXRPckRlZXBJbmRpY2F0b3IgLSBNYXliZSB0aGUgdGFyZ2V0IG9yIGRlZXAgaW5kaWNhdG9yLlxuICogQHBhcmFtIHRhcmdldE9yU291cmNlIC0gVGFyZ2V0IG9yIHNvdXJjZSBvYmplY3Q7IGRlcGVuZGluZyBvbiBmaXJzdFxuICogYXJndW1lbnQuXG4gKiBAcGFyYW0gYWRkaXRpb25hbFNvdXJjZXMgLSBTb3VyY2Ugb2JqZWN0cyB0byBleHRlbmQgaW50byB0YXJnZXQuXG4gKiBAcmV0dXJucyBSZXR1cm5zIGdpdmVuIHRhcmdldCBleHRlbmRlZCB3aXRoIGFsbCBnaXZlbiBzb3VyY2VzLlxuICovXG5leHBvcnQgY29uc3QgZXh0ZW5kID0gPFQgPSBNYXBwaW5nPHVua25vd24+PihcbiAgICB0YXJnZXRPckRlZXBJbmRpY2F0b3I6IChcbiAgICAgICAgYm9vbGVhbiB8IHR5cGVvZiBJR05PUkVfTlVMTF9BTkRfVU5ERUZJTkVEX1NZTUJPTCB8IFJlY3Vyc2l2ZVBhcnRpYWw8VD5cbiAgICApLFxuICAgIHRhcmdldE9yU291cmNlPzogbnVsbCB8IFJlY3Vyc2l2ZVBhcnRpYWw8VD4sXG4gICAgLi4uYWRkaXRpb25hbFNvdXJjZXM6IEFycmF5PFJlY3Vyc2l2ZVBhcnRpYWw8VD4+XG4pOiBUID0+IHtcbiAgICBsZXQgZGVlcDogYm9vbGVhbiB8IHR5cGVvZiBJR05PUkVfTlVMTF9BTkRfVU5ERUZJTkVEX1NZTUJPTCA9IGZhbHNlXG4gICAgbGV0IHNvdXJjZXM6IEFycmF5PFJlY3Vyc2l2ZVBhcnRpYWw8VD4gfCBudWxsPiA9IGFkZGl0aW9uYWxTb3VyY2VzXG4gICAgbGV0IHRhcmdldDogbnVsbCB8IFJlY3Vyc2l2ZVBhcnRpYWw8VD4gfCB1bmRlZmluZWRcblxuICAgIGlmIChcbiAgICAgICAgdGFyZ2V0T3JEZWVwSW5kaWNhdG9yID09PSBJR05PUkVfTlVMTF9BTkRfVU5ERUZJTkVEX1NZTUJPTCB8fFxuICAgICAgICB0eXBlb2YgdGFyZ2V0T3JEZWVwSW5kaWNhdG9yID09PSAnYm9vbGVhbidcbiAgICApIHtcbiAgICAgICAgLy8gSGFuZGxlIGEgZGVlcCBjb3B5IHNpdHVhdGlvbiBhbmQgc2tpcCBkZWVwIGluZGljYXRvciBhbmQgdGFyZ2V0LlxuICAgICAgICBkZWVwID0gdGFyZ2V0T3JEZWVwSW5kaWNhdG9yIGFzXG4gICAgICAgICAgICBib29sZWFuIHwgdHlwZW9mIElHTk9SRV9OVUxMX0FORF9VTkRFRklORURfU1lNQk9MXG4gICAgICAgIHRhcmdldCA9IHRhcmdldE9yU291cmNlXG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0T3JEZWVwSW5kaWNhdG9yXG4gICAgICAgIGlmIChpc09iamVjdCh0YXJnZXRPclNvdXJjZSkpXG4gICAgICAgICAgICBzb3VyY2VzID0gW3RhcmdldE9yU291cmNlLCAuLi5zb3VyY2VzXVxuICAgICAgICBlbHNlIGlmICh0YXJnZXRPclNvdXJjZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0T3JTb3VyY2VcbiAgICB9XG5cbiAgICBjb25zdCBtZXJnZVZhbHVlID0gKFxuICAgICAgICB0YXJnZXRWYWx1ZTogVmFsdWVPZjxUPiwgdmFsdWU6IFZhbHVlT2Y8VD5cbiAgICApOiBWYWx1ZU9mPFQ+ID0+IHtcbiAgICAgICAgaWYgKHZhbHVlID09PSB0YXJnZXRWYWx1ZSlcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXRWYWx1ZVxuXG4gICAgICAgIC8vIFRyYXZlcnNlIHJlY3Vyc2l2ZWx5IGlmIHdlJ3JlIG1lcmdpbmcgcGxhaW4gb2JqZWN0cyBvciBtYXBzLlxuICAgICAgICBpZiAoZGVlcCAmJiB2YWx1ZSAmJiAoaXNQbGFpbk9iamVjdCh2YWx1ZSkgfHwgaXNNYXAodmFsdWUpKSkge1xuICAgICAgICAgICAgbGV0IGNsb25lOiBWYWx1ZU9mPFQ+XG4gICAgICAgICAgICBpZiAoaXNNYXAodmFsdWUpKVxuICAgICAgICAgICAgICAgIGNsb25lID0gKHRhcmdldFZhbHVlICYmIGlzTWFwKHRhcmdldFZhbHVlKSkgP1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRWYWx1ZSA6XG4gICAgICAgICAgICAgICAgICAgIG5ldyBNYXAoKSBhcyB1bmtub3duIGFzIFZhbHVlT2Y8VD5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBjbG9uZSA9ICh0YXJnZXRWYWx1ZSAmJiBpc1BsYWluT2JqZWN0KHRhcmdldFZhbHVlKSkgP1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRWYWx1ZSA6XG4gICAgICAgICAgICAgICAgICAgIHt9IGFzIHVua25vd24gYXMgVmFsdWVPZjxUPlxuXG4gICAgICAgICAgICByZXR1cm4gZXh0ZW5kKGRlZXAsIGNsb25lIGFzIFJlY3Vyc2l2ZVBhcnRpYWw8VD4sIHZhbHVlKSBhc1xuICAgICAgICAgICAgICAgIFZhbHVlT2Y8VD5cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1ZVxuICAgIH1cblxuICAgIGZvciAoY29uc3Qgc291cmNlIG9mIHNvdXJjZXMpIHtcbiAgICAgICAgbGV0IHRhcmdldFR5cGU6IHN0cmluZyA9IHR5cGVvZiB0YXJnZXRcbiAgICAgICAgbGV0IHNvdXJjZVR5cGU6IHN0cmluZyA9IHR5cGVvZiBzb3VyY2VcblxuICAgICAgICBpZiAoaXNNYXAodGFyZ2V0KSlcbiAgICAgICAgICAgIHRhcmdldFR5cGUgKz0gJyBNYXAnXG4gICAgICAgIGlmIChpc01hcChzb3VyY2UpKVxuICAgICAgICAgICAgc291cmNlVHlwZSArPSAnIE1hcCdcblxuICAgICAgICBpZiAodGFyZ2V0VHlwZSA9PT0gc291cmNlVHlwZSAmJiB0YXJnZXQgIT09IHNvdXJjZSlcbiAgICAgICAgICAgIGlmIChpc01hcCh0YXJnZXQpICYmIGlzTWFwKHNvdXJjZSkpXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2Ygc291cmNlKVxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQuc2V0KFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VWYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQuZ2V0KGtleSkgYXMgVmFsdWVPZjxUPixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBhcyBWYWx1ZU9mPFQ+XG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIGlzT2JqZWN0KHRhcmdldCkgJiYgIUFycmF5LmlzQXJyYXkodGFyZ2V0KSAmJlxuICAgICAgICAgICAgICAgICEodHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnICYmIHRhcmdldCBpbnN0YW5jZW9mIEJsb2IpICYmXG4gICAgICAgICAgICAgICAgaXNPYmplY3Qoc291cmNlKSAmJiAhQXJyYXkuaXNBcnJheShzb3VyY2UpICYmXG4gICAgICAgICAgICAgICAgISh0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgJiYgc291cmNlIGluc3RhbmNlb2YgQmxvYilcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHNvdXJjZSkpXG4gICAgICAgICAgICAgICAgICAgIGlmICghKFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVlcCA9PT0gSUdOT1JFX05VTExfQU5EX1VOREVGSU5FRF9TWU1CT0wgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIFtudWxsLCB1bmRlZmluZWRdLmluY2x1ZGVzKHZhbHVlIGFzIG51bGwpXG4gICAgICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRba2V5IGFzIGtleW9mIFRdID0gbWVyZ2VWYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRba2V5IGFzIGtleW9mIFRdIGFzIFZhbHVlT2Y8VD4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgYXMgVmFsdWVPZjxUPlxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gc291cmNlXG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRhcmdldCA9IHNvdXJjZVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXQgYXMgVFxufVxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBwcm94eSBoYW5kbGVyIHdoaWNoIGZvcndhcmRzIGFsbCBvcGVyYXRpb25zIHRvIGdpdmVuIG9iamVjdFxuICogYXMgdGhlcmUgd291bGRuJ3QgYmUgYSBwcm94eS5cbiAqIEBwYXJhbSB0YXJnZXQgLSBPYmplY3QgdG8gcHJveHkuXG4gKiBAcGFyYW0gbWV0aG9kTmFtZXMgLSBNYXBwaW5nIG9mIG9wZXJhbmQgbmFtZSB0byBvYmplY3Qgc3BlY2lmaWMgbWV0aG9kXG4gKiBuYW1lLlxuICogQHJldHVybnMgRGV0ZXJtaW5lZCBwcm94eSBoYW5kbGVyLlxuICovXG5leHBvcnQgY29uc3QgZ2V0UHJveHlIYW5kbGVyID0gPFQgPSB1bmtub3duPihcbiAgICB0YXJnZXQ6IFQsIG1ldGhvZE5hbWVzOiBNYXBwaW5nID0ge31cbik6IFByb3h5SGFuZGxlcjxUPiA9PiB7XG4gICAgbWV0aG9kTmFtZXMgPSB7XG4gICAgICAgIGRlbGV0ZTogJ1tdJyxcbiAgICAgICAgZ2V0OiAnW10nLFxuICAgICAgICBoYXM6ICdbXScsXG4gICAgICAgIHNldDogJ1tdJyxcbiAgICAgICAgLi4ubWV0aG9kTmFtZXNcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBkZWxldGVQcm9wZXJ0eTogKF90YXJnZXRPYmplY3Q6IFQsIGtleTogc3RyaW5nIHwgc3ltYm9sKTogYm9vbGVhbiA9PiB7XG4gICAgICAgICAgICBpZiAobWV0aG9kTmFtZXMuZGVsZXRlID09PSAnW10nICYmIHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0YXJnZXRba2V5IGFzIGtleW9mIFRdXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W21ldGhvZE5hbWVzLmRlbGV0ZSBhcyBrZXlvZiBUXSBhc1xuICAgICAgICAgICAgICAgICAgICAgICAgdW5rbm93biBhc1xuICAgICAgICAgICAgICAgICAgICAgICAgKGtleTogc3RyaW5nIHwgc3ltYm9sKSA9PiBib29sZWFuXG4gICAgICAgICAgICAgICAgKShrZXkpXG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIGdldDogKF90YXJnZXRPYmplY3Q6IFQsIGtleTogc3RyaW5nIHwgc3ltYm9sKTogdW5rbm93biA9PiB7XG4gICAgICAgICAgICBpZiAobWV0aG9kTmFtZXMuZ2V0ID09PSAnW10nICYmIHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXRba2V5IGFzIGtleW9mIFRdXG5cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgdGFyZ2V0W21ldGhvZE5hbWVzLmdldCBhcyBrZXlvZiBUXSBhc1xuICAgICAgICAgICAgICAgICAgICB1bmtub3duIGFzXG4gICAgICAgICAgICAgICAgICAgIChrZXk6IHN0cmluZyB8IHN5bWJvbCkgPT4gdW5rbm93blxuICAgICAgICAgICAgKShrZXkpXG4gICAgICAgIH0sXG4gICAgICAgIGhhczogKF90YXJnZXRPYmplY3Q6IFQsIGtleTogc3RyaW5nIHwgc3ltYm9sKTogYm9vbGVhbiA9PiB7XG4gICAgICAgICAgICBpZiAobWV0aG9kTmFtZXMuaGFzID09PSAnW10nKVxuICAgICAgICAgICAgICAgIHJldHVybiBrZXkgaW4gKHRhcmdldCBhcyBvYmplY3QpXG5cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgdGFyZ2V0W21ldGhvZE5hbWVzLmhhcyBhcyBrZXlvZiBUXSBhc1xuICAgICAgICAgICAgICAgICAgICB1bmtub3duIGFzXG4gICAgICAgICAgICAgICAgICAgIChrZXk6IHN0cmluZyB8IHN5bWJvbCkgPT4gYm9vbGVhblxuICAgICAgICAgICAgKShrZXkpXG4gICAgICAgIH0sXG4gICAgICAgIHNldDogKFxuICAgICAgICAgICAgX3RhcmdldE9iamVjdDogVCwga2V5OiBzdHJpbmcgfCBzeW1ib2wsIHZhbHVlOiB1bmtub3duXG4gICAgICAgICk6IGJvb2xlYW4gPT4ge1xuICAgICAgICAgICAgaWYgKG1ldGhvZE5hbWVzLnNldCA9PT0gJ1tdJyAmJiB0eXBlb2Yga2V5ID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgICAgICB0YXJnZXRba2V5IGFzIGtleW9mIFRdID0gdmFsdWUgYXMgVFtrZXlvZiBUXVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiAodGFyZ2V0W21ldGhvZE5hbWVzLnNldCBhcyBrZXlvZiBUXSBhc1xuICAgICAgICAgICAgICAgICAgICAgICAgdW5rbm93biBhc1xuICAgICAgICAgICAgICAgICAgICAgICAgKGtleTogc3RyaW5nIHwgc3ltYm9sLCB2YWx1ZTogdW5rbm93bikgPT4gYm9vbGVhblxuICAgICAgICAgICAgICAgICkoa2V5LCB2YWx1ZSlcblxuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuICAgIH1cbn1cbi8qKlxuICogU2xpY2VzIGFsbCBwcm9wZXJ0aWVzIGZyb20gZ2l2ZW4gb2JqZWN0IHdoaWNoIGRvZXMgbm90IG1hdGNoIHByb3ZpZGVkXG4gKiBvYmplY3QgbWFzay4gSXRlbXMgY2FuIGJlIGV4cGxpY2l0bHkgd2hpdGVsaXN0ZWQgdmlhIFwiaW5jbHVkZVwiIG1hc2tcbiAqIGNvbmZpZ3VyYXRpb24gb3IgYmxhY2sgbGlzdGVkIHZpYSBcImV4Y2x1ZGVcIiBtYXNrIGNvbmZpZ3VyYXRpb24uXG4gKiBAcGFyYW0gb2JqZWN0IC0gT2JqZWN0IHRvIHNsaWNlLlxuICogQHBhcmFtIG1hc2tDb25maWd1cmF0aW9uIC0gTWFzayBjb25maWd1cmF0aW9uLlxuICogQHJldHVybnMgR2l2ZW4gYnV0IHNsaWNlZCBvYmplY3QuIElmIChuZXN0ZWQpIG9iamVjdCB3aWxsIGJlIG1vZGlmaWVkIGFcbiAqIGZsYXQgY29weSBvZiB0aGF0IG9iamVjdCB3aWxsIGJlIHJldHVybmVkLlxuICovXG5leHBvcnQgY29uc3QgbWFzayA9IDxUeXBlIGV4dGVuZHMgTWFwcGluZzx1bmtub3duPiA9IE1hcHBpbmc8dW5rbm93bj4+KFxuICAgIG9iamVjdDogVHlwZSwgbWFza0NvbmZpZ3VyYXRpb246IE9iamVjdE1hc2tDb25maWd1cmF0aW9uXG4pOiBSZWN1cnNpdmVQYXJ0aWFsPFR5cGU+ID0+IHtcbiAgICBtYXNrQ29uZmlndXJhdGlvbiA9IHtleGNsdWRlOiBmYWxzZSwgaW5jbHVkZTogdHJ1ZSwgLi4ubWFza0NvbmZpZ3VyYXRpb259XG5cbiAgICBpZiAoXG4gICAgICAgIG1hc2tDb25maWd1cmF0aW9uLmV4Y2x1ZGUgPT09IHRydWUgfHxcbiAgICAgICAgQXJyYXkuaXNBcnJheShtYXNrQ29uZmlndXJhdGlvbi5leGNsdWRlKSAmJlxuICAgICAgICBtYXNrQ29uZmlndXJhdGlvbi5leGNsdWRlLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICBtYXNrQ29uZmlndXJhdGlvbi5pbmNsdWRlID09PSBmYWxzZSB8fFxuICAgICAgICB0eXBlb2Ygb2JqZWN0ICE9PSAnb2JqZWN0J1xuICAgIClcbiAgICAgICAgcmV0dXJuIHt9XG5cbiAgICBjb25zdCBleGNsdWRlOiBOb3JtYWxpemVkT2JqZWN0TWFzayA9XG4gICAgICAgIEFycmF5LmlzQXJyYXkobWFza0NvbmZpZ3VyYXRpb24uZXhjbHVkZSkgP1xuICAgICAgICAgICAgbWFza0NvbmZpZ3VyYXRpb24uZXhjbHVkZS5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgKG1hc2ssIGtleSkgPT4gKHsuLi5tYXNrLCBba2V5XTogdHJ1ZX0pLFxuICAgICAgICAgICAgICAgIHt9XG4gICAgICAgICAgICApIDpcbiAgICAgICAgICAgIG1hc2tDb25maWd1cmF0aW9uLmV4Y2x1ZGUgYXMgTm9ybWFsaXplZE9iamVjdE1hc2tcbiAgICBjb25zdCBpbmNsdWRlOiBOb3JtYWxpemVkT2JqZWN0TWFzayA9XG4gICAgICAgIEFycmF5LmlzQXJyYXkobWFza0NvbmZpZ3VyYXRpb24uaW5jbHVkZSkgP1xuICAgICAgICAgICAgbWFza0NvbmZpZ3VyYXRpb24uaW5jbHVkZS5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgKG1hc2ssIGtleSkgPT4gKHsuLi5tYXNrLCBba2V5XTogdHJ1ZX0pLFxuICAgICAgICAgICAgICAgIHt9XG4gICAgICAgICAgICApIDpcbiAgICAgICAgICAgIG1hc2tDb25maWd1cmF0aW9uLmluY2x1ZGUgYXMgTm9ybWFsaXplZE9iamVjdE1hc2tcblxuICAgIGxldCByZXN1bHQ6IFBhcnRpYWw8VHlwZT4gPSB7fVxuICAgIGlmIChpc1BsYWluT2JqZWN0KGluY2x1ZGUpKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGluY2x1ZGUpKVxuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSB0cnVlKVxuICAgICAgICAgICAgICAgICAgICByZXN1bHRba2V5IGFzIGtleW9mIFR5cGVdID0gb2JqZWN0W2tleSBhcyBrZXlvZiBUeXBlXVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1BsYWluT2JqZWN0KHZhbHVlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIG9iamVjdFtrZXkgYXMga2V5b2YgVHlwZV0gPT09ICdvYmplY3QnXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAocmVzdWx0IGFzIE1hcHBpbmc8TWFwcGluZzx1bmtub3duPj4pW2tleV0gPSBtYXNrKFxuICAgICAgICAgICAgICAgICAgICAgICAgKG9iamVjdCBhcyBNYXBwaW5nPE1hcHBpbmc8dW5rbm93bj4+KVtrZXldLFxuICAgICAgICAgICAgICAgICAgICAgICAge2luY2x1ZGU6IHZhbHVlfVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgfSBlbHNlXG4gICAgICAgIC8vIEluIHRoaXMgYnJhbmNoIFwibWFzay5pbmNsdWRlID09PSB0cnVlXCIgaG9sZHMuXG4gICAgICAgIHJlc3VsdCA9IG9iamVjdFxuXG4gICAgaWYgKGlzUGxhaW5PYmplY3QoZXhjbHVkZSkpIHtcbiAgICAgICAgbGV0IHVzZUNvcHkgPSBmYWxzZVxuICAgICAgICBjb25zdCBjb3B5OiBSZWN1cnNpdmVQYXJ0aWFsPFR5cGU+ID0gey4uLnJlc3VsdH1cblxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhleGNsdWRlKSlcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29weSwga2V5KSlcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdXNlQ29weSA9IHRydWVcblxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgY29weVtrZXkgYXMga2V5b2YgVHlwZV1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1BsYWluT2JqZWN0KHZhbHVlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGNvcHlba2V5IGFzIGtleW9mIFR5cGVdID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50OiBWYWx1ZU9mPFR5cGU+ID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlba2V5IGFzIGtleW9mIFR5cGVdIGFzIFZhbHVlT2Y8VHlwZT5cblxuICAgICAgICAgICAgICAgICAgICA7KGNvcHkgYXMgTWFwcGluZzxNYXBwaW5nPHVua25vd24+Pilba2V5XSA9IG1hc2soXG4gICAgICAgICAgICAgICAgICAgICAgICAoY29weSBhcyBNYXBwaW5nPE1hcHBpbmc8dW5rbm93bj4+KVtrZXldLFxuICAgICAgICAgICAgICAgICAgICAgICAge2V4Y2x1ZGU6IHZhbHVlfVxuICAgICAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgY29weVtrZXkgYXMga2V5b2YgVHlwZV0gYXMgVmFsdWVPZjxUeXBlPiAhPT1cbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlQ29weSA9IHRydWVcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgaWYgKHVzZUNvcHkpXG4gICAgICAgICAgICByZXN1bHQgPSBjb3B5XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdFxufVxuLyoqXG4gKiBNb2RpZmllcyBnaXZlbiB0YXJnZXQgY29ycmVzcG9uZGluZyB0byBnaXZlbiBzb3VyY2UgYW5kIHJlbW92ZXMgc291cmNlXG4gKiBtb2RpZmljYXRpb24gaW5mb3MuXG4gKiBAcGFyYW0gdGFyZ2V0IC0gT2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSBzb3VyY2UgLSBTb3VyY2Ugb2JqZWN0IHRvIGxvYWQgbW9kaWZpY2F0aW9ucyBmcm9tLlxuICogQHBhcmFtIHJlbW92ZUluZGljYXRvcktleSAtIEluZGljYXRvciBwcm9wZXJ0eSBuYW1lIG9yIHZhbHVlIHRvIG1hcmsgYVxuICogdmFsdWUgdG8gcmVtb3ZlIGZyb20gb2JqZWN0IG9yIGxpc3QuXG4gKiBAcGFyYW0gcHJlcGVuZEluZGljYXRvcktleSAtIEluZGljYXRvciBwcm9wZXJ0eSBuYW1lIHRvIG1hcmsgYSB2YWx1ZSB0b1xuICogcHJlcGVuZCB0byB0YXJnZXQgbGlzdC5cbiAqIEBwYXJhbSBhcHBlbmRJbmRpY2F0b3JLZXkgLSBJbmRpY2F0b3IgcHJvcGVydHkgbmFtZSB0byBtYXJrIGEgdmFsdWUgdG9cbiAqIGFwcGVuZCB0byB0YXJnZXQgbGlzdC5cbiAqIEBwYXJhbSBwb3NpdGlvblByZWZpeCAtIEluZGljYXRlcyBhIHByZWZpeCB0byB1c2UgYSB2YWx1ZSBvbiBnaXZlblxuICogcG9zaXRpb24gdG8gYWRkIG9yIHJlbW92ZS5cbiAqIEBwYXJhbSBwb3NpdGlvblN1ZmZpeCAtIEluZGljYXRlcyBhIHN1ZmZpeCB0byB1c2UgYSB2YWx1ZSBvbiBnaXZlblxuICogcG9zaXRpb24gdG8gYWRkIG9yIHJlbW92ZS5cbiAqIEBwYXJhbSBwYXJlbnRTb3VyY2UgLSBTb3VyY2UgY29udGV4dCB0byByZW1vdmUgbW9kaWZpY2F0aW9uIGluZm8gZnJvbVxuICogKHVzdWFsbHkgb25seSBuZWVkZWQgaW50ZXJuYWxseSkuXG4gKiBAcGFyYW0gcGFyZW50S2V5IC0gU291cmNlIGtleSBpbiBnaXZlbiBzb3VyY2UgY29udGV4dCB0byByZW1vdmVcbiAqIG1vZGlmaWNhdGlvbiBpbmZvIGZyb20gKHVzdWFsbHkgb25seSBuZWVkZWQgaW50ZXJuYWxseSkuXG4gKiBAcmV0dXJucyBHaXZlbiB0YXJnZXQgbW9kaWZpZWQgd2l0aCBnaXZlbiBzb3VyY2UuXG4gKi9cbmV4cG9ydCBjb25zdCBtb2RpZnlPYmplY3QgPSA8VCA9IHVua25vd24+KFxuICAgIHRhcmdldDogVCxcbiAgICBzb3VyY2U6IHVua25vd24sXG4gICAgcmVtb3ZlSW5kaWNhdG9yS2V5ID0gJ19fcmVtb3ZlX18nLFxuICAgIHByZXBlbmRJbmRpY2F0b3JLZXkgPSAnX19wcmVwZW5kX18nLFxuICAgIGFwcGVuZEluZGljYXRvcktleSA9ICdfX2FwcGVuZF9fJyxcbiAgICBwb3NpdGlvblByZWZpeCA9ICdfXycsXG4gICAgcG9zaXRpb25TdWZmaXggPSAnX18nLFxuICAgIHBhcmVudFNvdXJjZTogdW5rbm93biA9IG51bGwsXG4gICAgcGFyZW50S2V5OiB1bmtub3duID0gbnVsbFxuKTogVCA9PiB7XG4gICAgaWYgKGlzTWFwKHNvdXJjZSkgJiYgaXNNYXAodGFyZ2V0KSkge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBzb3VyY2UpXG4gICAgICAgICAgICBpZiAodGFyZ2V0LmhhcyhrZXkpKVxuICAgICAgICAgICAgICAgIG1vZGlmeU9iamVjdChcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmdldChrZXkpIGFzIFZhbHVlT2Y8VD4sXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlIGFzIE1hcDx1bmtub3duLCB1bmtub3duPiB8IE1hcHBpbmc8dW5rbm93bj4gfCBudWxsLFxuICAgICAgICAgICAgICAgICAgICByZW1vdmVJbmRpY2F0b3JLZXksXG4gICAgICAgICAgICAgICAgICAgIHByZXBlbmRJbmRpY2F0b3JLZXksXG4gICAgICAgICAgICAgICAgICAgIGFwcGVuZEluZGljYXRvcktleSxcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25QcmVmaXgsXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uU3VmZml4LFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgIGtleVxuICAgICAgICAgICAgICAgIClcbiAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KHNvdXJjZSkgJiYgaXNPYmplY3QodGFyZ2V0KSlcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCBzb3VyY2VWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoc291cmNlKSkge1xuICAgICAgICAgICAgbGV0IGluZGV4ID0gTmFOXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheSh0YXJnZXQpICYmXG4gICAgICAgICAgICAgICAga2V5LnN0YXJ0c1dpdGgocG9zaXRpb25QcmVmaXgpICYmXG4gICAgICAgICAgICAgICAga2V5LmVuZHNXaXRoKHBvc2l0aW9uU3VmZml4KVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBwYXJzZUludChcbiAgICAgICAgICAgICAgICAgICAga2V5LnN1YnN0cmluZyhcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uUHJlZml4Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleS5sZW5ndGggLVxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25TdWZmaXgubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIDEwXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGFyZ2V0Lmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBOYU5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIFtyZW1vdmVJbmRpY2F0b3JLZXksIHByZXBlbmRJbmRpY2F0b3JLZXksIGFwcGVuZEluZGljYXRvcktleV1cbiAgICAgICAgICAgICAgICAgICAgLmluY2x1ZGVzKGtleSkgfHxcbiAgICAgICAgICAgICAgICAhaXNOYU4oaW5kZXgpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0YXJnZXQpKVxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSByZW1vdmVJbmRpY2F0b3JLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlczogQXJyYXk8dW5rbm93bj4gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChbXSBhcyBBcnJheTx1bmtub3duPikuY29uY2F0KHNvdXJjZVZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLnN0YXJ0c1dpdGgocG9zaXRpb25QcmVmaXgpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLmVuZHNXaXRoKHBvc2l0aW9uU3VmZml4KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnNwbGljZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLnN1YnN0cmluZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25QcmVmaXgubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5sZW5ndGggLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvblN1ZmZpeC5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGFyZ2V0LmluY2x1ZGVzKHZhbHVlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnNwbGljZSh0YXJnZXQuaW5kZXhPZih2YWx1ZSksIDEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPCB0YXJnZXQubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQuc3BsaWNlKHZhbHVlLCAxKVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gYXBwZW5kSW5kaWNhdG9yS2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LmNvbmNhdChzb3VyY2VWYWx1ZSkgYXMgdW5rbm93biBhcyBUXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gcHJlcGVuZEluZGljYXRvcktleSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IChbXSBhcyBBcnJheTx1bmtub3duPilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KHNvdXJjZVZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQodGFyZ2V0KSBhcyB1bmtub3duIGFzIFRcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNPYmplY3QodGFyZ2V0W2luZGV4XSkgJiYgaXNPYmplY3Qoc291cmNlVmFsdWUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZ5T2JqZWN0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRbaW5kZXhdIGFzIFJlY3Vyc2l2ZVBhcnRpYWw8VmFsdWVPZjxUPj4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVZhbHVlIGFzIFJlY3Vyc2l2ZVBhcnRpYWw8VmFsdWVPZjxUPj4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUluZGljYXRvcktleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlcGVuZEluZGljYXRvcktleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kSW5kaWNhdG9yS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvblByZWZpeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25TdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFtpbmRleF0gYXMgUmVjdXJzaXZlUGFydGlhbDxWYWx1ZU9mPFQ+PixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VWYWx1ZSBhcyBSZWN1cnNpdmVQYXJ0aWFsPFZhbHVlT2Y8VD4+XG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFtpbmRleF0gPSBzb3VyY2VWYWx1ZSBhcyBWYWx1ZU9mPFQ+XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSByZW1vdmVJbmRpY2F0b3JLZXkpXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgKFtdIGFzIEFycmF5PHVua25vd24+KS5jb25jYXQoXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VWYWx1ZVxuICAgICAgICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCwgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IGFzIHVua25vd24gYXMgTWFwcGluZzx1bmtub3duPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClbdmFsdWVdXG4gICAgICAgICAgICAgICAgZGVsZXRlIHNvdXJjZVtrZXldXG5cbiAgICAgICAgICAgICAgICBpZiAocGFyZW50U291cmNlICYmIHR5cGVvZiBwYXJlbnRLZXkgPT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgKFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50U291cmNlIGFzIE1hcHBpbmc8dW5rbm93bj5cbiAgICAgICAgICAgICAgICAgICAgKVtwYXJlbnRLZXldXG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHRhcmdldCAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0YXJnZXQsIGtleSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAodGFyZ2V0IGFzIHVua25vd24gYXMgTWFwcGluZzx1bmtub3duPilba2V5XSA9XG4gICAgICAgICAgICAgICAgICAgIG1vZGlmeU9iamVjdChcbiAgICAgICAgICAgICAgICAgICAgICAgICh0YXJnZXQgYXMgdW5rbm93biBhcyBNYXBwaW5nPFZhbHVlT2Y8VD4+KVtrZXldLFxuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVJbmRpY2F0b3JLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmVwZW5kSW5kaWNhdG9yS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kSW5kaWNhdG9yS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25QcmVmaXgsXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvblN1ZmZpeCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgIHJldHVybiB0YXJnZXRcbn1cbi8qKlxuICogUmVtb3ZlcyBnaXZlbiBrZXkgZnJvbSBnaXZlbiBvYmplY3QgcmVjdXJzaXZlbHkuXG4gKiBAcGFyYW0gb2JqZWN0IC0gT2JqZWN0IHRvIHByb2Nlc3MuXG4gKiBAcGFyYW0ga2V5cyAtIExpc3Qgb2Yga2V5cyB0byByZW1vdmUuXG4gKiBAcmV0dXJucyBQcm9jZXNzZWQgZ2l2ZW4gb2JqZWN0LlxuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlS2V5UHJlZml4ZXMgPSA8VD4oXG4gICAgb2JqZWN0OiBULCBrZXlzOiBBcnJheTxzdHJpbmc+IHwgc3RyaW5nID0gJyMnXG4pOiBUID0+IHtcbiAgICBjb25zdCByZXNvbHZlZEtleXM6IEFycmF5PHN0cmluZz4gPSAoW10gYXMgQXJyYXk8c3RyaW5nPikuY29uY2F0KGtleXMpXG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG4gICAgICAgIGxldCBpbmRleCA9IDBcbiAgICAgICAgZm9yIChjb25zdCBzdWJPYmplY3Qgb2Ygb2JqZWN0LnNsaWNlKCkpIHtcbiAgICAgICAgICAgIGxldCBza2lwID0gZmFsc2VcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3ViT2JqZWN0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHJlc29sdmVkS2V5cylcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN1Yk9iamVjdC5zdGFydHNXaXRoKGAke2tleX06YCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIChvYmplY3QgYXMgQXJyYXk8c3RyaW5nPikuc3BsaWNlKGluZGV4LCAxKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBza2lwID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHNraXApXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIChvYmplY3QgYXMgQXJyYXk8dW5rbm93bj4pW2luZGV4XSA9XG4gICAgICAgICAgICAgICAgcmVtb3ZlS2V5UHJlZml4ZXMoc3ViT2JqZWN0LCByZXNvbHZlZEtleXMpXG5cbiAgICAgICAgICAgIGluZGV4ICs9IDFcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNTZXQob2JqZWN0KSlcbiAgICAgICAgZm9yIChjb25zdCBzdWJPYmplY3Qgb2YgbmV3IFNldChvYmplY3QpKSB7XG4gICAgICAgICAgICBsZXQgc2tpcCA9IGZhbHNlXG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3ViT2JqZWN0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHJlc29sdmVkS2V5cylcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN1Yk9iamVjdC5zdGFydHNXaXRoKGAke2tleX06YCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5kZWxldGUoc3ViT2JqZWN0KVxuICAgICAgICAgICAgICAgICAgICAgICAgc2tpcCA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChza2lwKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZW1vdmVLZXlQcmVmaXhlcyhzdWJPYmplY3QsIHJlc29sdmVkS2V5cylcbiAgICAgICAgfVxuICAgIGVsc2UgaWYgKGlzTWFwKG9iamVjdCkpXG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgc3ViT2JqZWN0XSBvZiBuZXcgTWFwKG9iamVjdCkpIHtcbiAgICAgICAgICAgIGxldCBza2lwID0gZmFsc2VcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCByZXNvbHZlZEtleSBvZiByZXNvbHZlZEtleXMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXNjYXBlZEtleSA9IGVzY2FwZVJlZ3VsYXJFeHByZXNzaW9ucyhyZXNvbHZlZEtleSlcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5ldyBSZWdFeHAoYF4ke2VzY2FwZWRLZXl9WzAtOV0qJGApLnRlc3Qoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmRlbGV0ZShrZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICBza2lwID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChza2lwKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvYmplY3Quc2V0KGtleSwgcmVtb3ZlS2V5UHJlZml4ZXMoc3ViT2JqZWN0LCByZXNvbHZlZEtleXMpKVxuICAgICAgICB9XG4gICAgZWxzZSBpZiAoaXNPYmplY3Qob2JqZWN0KSlcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAgIHt9LCBvYmplY3RcbiAgICAgICAgKSkpIHtcbiAgICAgICAgICAgIGxldCBza2lwID0gZmFsc2VcblxuICAgICAgICAgICAgZm9yIChjb25zdCByZXNvbHZlZEtleSBvZiByZXNvbHZlZEtleXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlc2NhcGVkS2V5OiBzdHJpbmcgPSBlc2NhcGVSZWd1bGFyRXhwcmVzc2lvbnMocmVzb2x2ZWRLZXkpXG5cbiAgICAgICAgICAgICAgICBpZiAobmV3IFJlZ0V4cChgXiR7ZXNjYXBlZEtleX1bMC05XSokYCkudGVzdChrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSAob2JqZWN0IGFzIHVua25vd24gYXMgTWFwcGluZzx1bmtub3duPilba2V5XVxuICAgICAgICAgICAgICAgICAgICBza2lwID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNraXApXG4gICAgICAgICAgICAgICAgY29udGludWVcblxuICAgICAgICAgICAgOyhvYmplY3QgYXMgdW5rbm93biBhcyBNYXBwaW5nPHVua25vd24+KVtrZXldID1cbiAgICAgICAgICAgICAgICByZW1vdmVLZXlQcmVmaXhlcyh2YWx1ZSwgcmVzb2x2ZWRLZXlzKVxuICAgICAgICB9XG5cbiAgICByZXR1cm4gb2JqZWN0XG59XG4vKipcbiAqIFJlcHJlc2VudHMgZ2l2ZW4gb2JqZWN0IGFzIGZvcm1hdHRlZCBzdHJpbmcuXG4gKiBAcGFyYW0gb2JqZWN0IC0gT2JqZWN0IHRvIHJlcHJlc2VudC5cbiAqIEBwYXJhbSBtYXhpbXVtTGVuZ3RoT2ZMaXN0cyAtIE1heGltdW0gbnVtYmVyIG9mIGFycmF5IGl0ZW0gdG8gcmVuZGVyLlxuICogQHBhcmFtIGluZGVudGlvbiAtIFN0cmluZyAodXN1YWxseSB3aGl0ZXNwYWNlcykgdG8gdXNlIGFzIGluZGVudGlvbi5cbiAqIEBwYXJhbSBpbml0aWFsSW5kZW50aW9uIC0gU3RyaW5nICh1c3VhbGx5IHdoaXRlc3BhY2VzKSB0byB1c2UgYXNcbiAqIGFkZGl0aW9uYWwgaW5kZW50aW9uIGZvciB0aGUgZmlyc3Qgb2JqZWN0IHRyYXZlcnNpbmcgbGV2ZWwuXG4gKiBAcGFyYW0gbWF4aW11bU51bWJlck9mTGV2ZWxzUmVhY2hlZElkZW50aWZpZXIgLSBSZXBsYWNlbWVudCBmb3Igb2JqZWN0c1xuICogd2hpY2ggYXJlIG91dCBvZiBzcGVjaWZpZWQgYm91bmRzIHRvIHRyYXZlcnNlLlxuICogQHBhcmFtIG51bWJlck9mTGV2ZWxzIC0gU3BlY2lmaWVzIG51bWJlciBvZiBsZXZlbHMgdG8gdHJhdmVyc2UgZ2l2ZW5cbiAqIGRhdGEgc3RydWN0dXJlLlxuICogQHJldHVybnMgUmVwcmVzZW50YXRpb24gc3RyaW5nLlxuICovXG5leHBvcnQgY29uc3QgcmVwcmVzZW50ID0gKFxuICAgIG9iamVjdDogdW5rbm93bixcbiAgICBtYXhpbXVtTGVuZ3RoT2ZMaXN0cyA9IDMwLFxuICAgIGluZGVudGlvbiA9ICcgICAgJyxcbiAgICBpbml0aWFsSW5kZW50aW9uID0gJycsXG4gICAgbWF4aW11bU51bWJlck9mTGV2ZWxzUmVhY2hlZElkZW50aWZpZXI6IG51bWJlciB8IHN0cmluZyA9XG4gICAgJ19fbWF4aW11bV9udW1iZXJfb2ZfbGV2ZWxzX3JlYWNoZWRfXycsXG4gICAgbnVtYmVyT2ZMZXZlbHMgPSA4XG4pOiBzdHJpbmcgPT4ge1xuICAgIGlmIChudW1iZXJPZkxldmVscyA9PT0gMClcbiAgICAgICAgcmV0dXJuIFN0cmluZyhtYXhpbXVtTnVtYmVyT2ZMZXZlbHNSZWFjaGVkSWRlbnRpZmllcilcblxuICAgIGlmIChvYmplY3QgPT09IG51bGwpXG4gICAgICAgIHJldHVybiAnbnVsbCdcblxuICAgIGlmIChvYmplY3QgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuICd1bmRlZmluZWQnXG5cbiAgICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ3N0cmluZycpXG4gICAgICAgIHJldHVybiBgXCIke29iamVjdC5yZXBsYWNlKC9cXG4vZywgYFxcbiR7aW5pdGlhbEluZGVudGlvbn1gKX1cImBcblxuICAgIGlmIChpc051bWVyaWMob2JqZWN0KSB8fCB0eXBlb2Ygb2JqZWN0ID09PSAnYm9vbGVhbicpXG4gICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0KVxuXG4gICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIERhdGUpXG4gICAgICAgIHJldHVybiBvYmplY3QudG9JU09TdHJpbmcoKVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gJ1snXG5cbiAgICAgICAgbGV0IGZpcnN0U2VlbiA9IGZhbHNlXG4gICAgICAgIGxldCBjb3VudGVyID0gMVxuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygb2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAoY291bnRlciA+IG1heGltdW1MZW5ndGhPZkxpc3RzKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IGBcXG4ke2luaXRpYWxJbmRlbnRpb259Li4uYFxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmaXJzdFNlZW4pXG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9ICcsJ1xuXG4gICAgICAgICAgICByZXN1bHQgKz1cbiAgICAgICAgICAgICAgICBgXFxuJHtpbml0aWFsSW5kZW50aW9ufSR7aW5kZW50aW9ufWAgK1xuICAgICAgICAgICAgICAgIHJlcHJlc2VudChcbiAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgbWF4aW11bUxlbmd0aE9mTGlzdHMsXG4gICAgICAgICAgICAgICAgICAgIGluZGVudGlvbixcbiAgICAgICAgICAgICAgICAgICAgYCR7aW5pdGlhbEluZGVudGlvbn0ke2luZGVudGlvbn1gLFxuICAgICAgICAgICAgICAgICAgICBtYXhpbXVtTnVtYmVyT2ZMZXZlbHNSZWFjaGVkSWRlbnRpZmllcixcbiAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZMZXZlbHMgLSAxXG4gICAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICBmaXJzdFNlZW4gPSB0cnVlXG5cbiAgICAgICAgICAgIGNvdW50ZXIgKz0gMVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpcnN0U2VlbilcbiAgICAgICAgICAgIHJlc3VsdCArPSBgXFxuJHtpbml0aWFsSW5kZW50aW9ufWBcblxuICAgICAgICByZXN1bHQgKz0gJ10nXG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cblxuICAgIGlmIChpc01hcChvYmplY3QpKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSAnJ1xuXG4gICAgICAgIGxldCBmaXJzdFNlZW4gPSBmYWxzZVxuICAgICAgICBsZXQgY291bnRlciA9IDFcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCBpdGVtXSBvZiBvYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChjb3VudGVyID4gbWF4aW11bUxlbmd0aE9mTGlzdHMpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gYCxcXG4ke2luaXRpYWxJbmRlbnRpb259Li4uYFxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmaXJzdFNlZW4pXG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IGAsXFxuJHtpbml0aWFsSW5kZW50aW9ufSR7aW5kZW50aW9ufWBcblxuICAgICAgICAgICAgcmVzdWx0ICs9XG4gICAgICAgICAgICAgICAgcmVwcmVzZW50KFxuICAgICAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgICAgIG1heGltdW1MZW5ndGhPZkxpc3RzLFxuICAgICAgICAgICAgICAgICAgICBpbmRlbnRpb24sXG4gICAgICAgICAgICAgICAgICAgIGAke2luaXRpYWxJbmRlbnRpb259JHtpbmRlbnRpb259YCxcbiAgICAgICAgICAgICAgICAgICAgbWF4aW11bU51bWJlck9mTGV2ZWxzUmVhY2hlZElkZW50aWZpZXIsXG4gICAgICAgICAgICAgICAgICAgIG51bWJlck9mTGV2ZWxzIC0gMVxuICAgICAgICAgICAgICAgICkgK1xuICAgICAgICAgICAgICAgICcgLT4gJyArXG4gICAgICAgICAgICAgICAgcmVwcmVzZW50KFxuICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICBtYXhpbXVtTGVuZ3RoT2ZMaXN0cyxcbiAgICAgICAgICAgICAgICAgICAgaW5kZW50aW9uLFxuICAgICAgICAgICAgICAgICAgICBgJHtpbml0aWFsSW5kZW50aW9ufSR7aW5kZW50aW9ufWAsXG4gICAgICAgICAgICAgICAgICAgIG1heGltdW1OdW1iZXJPZkxldmVsc1JlYWNoZWRJZGVudGlmaWVyLFxuICAgICAgICAgICAgICAgICAgICBudW1iZXJPZkxldmVscyAtIDFcbiAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgIGZpcnN0U2VlbiA9IHRydWVcblxuICAgICAgICAgICAgY291bnRlciArPSAxXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWZpcnN0U2VlbilcbiAgICAgICAgICAgIHJlc3VsdCA9ICdFbXB0eU1hcCdcblxuICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuXG4gICAgaWYgKGlzU2V0KG9iamVjdCkpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9ICd7J1xuXG4gICAgICAgIGxldCBmaXJzdFNlZW4gPSBmYWxzZVxuICAgICAgICBsZXQgY291bnRlciA9IDFcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIG9iamVjdCkge1xuICAgICAgICAgICAgaWYgKGNvdW50ZXIgPiBtYXhpbXVtTGVuZ3RoT2ZMaXN0cykge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBgLFxcbiR7aW5pdGlhbEluZGVudGlvbn0uLi5gXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGZpcnN0U2VlbilcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gJywnXG5cbiAgICAgICAgICAgIHJlc3VsdCArPVxuICAgICAgICAgICAgICAgIGBcXG4ke2luaXRpYWxJbmRlbnRpb259JHtpbmRlbnRpb259YCArXG4gICAgICAgICAgICAgICAgcmVwcmVzZW50KFxuICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICBtYXhpbXVtTGVuZ3RoT2ZMaXN0cyxcbiAgICAgICAgICAgICAgICAgICAgaW5kZW50aW9uLFxuICAgICAgICAgICAgICAgICAgICBgJHtpbml0aWFsSW5kZW50aW9ufSR7aW5kZW50aW9ufWAsXG4gICAgICAgICAgICAgICAgICAgIG1heGltdW1OdW1iZXJPZkxldmVsc1JlYWNoZWRJZGVudGlmaWVyLFxuICAgICAgICAgICAgICAgICAgICBudW1iZXJPZkxldmVscyAtIDFcbiAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgIGZpcnN0U2VlbiA9IHRydWVcblxuICAgICAgICAgICAgY291bnRlciArPSAxXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlyc3RTZWVuKVxuICAgICAgICAgICAgcmVzdWx0ICs9IGBcXG4ke2luaXRpYWxJbmRlbnRpb259fWBcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmVzdWx0ID0gJ0VtcHR5U2V0J1xuXG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICB9XG5cbiAgICBpZiAoaXNGdW5jdGlvbihvYmplY3QpKVxuICAgICAgICByZXR1cm4gJ19fZnVuY3Rpb25fXydcblxuICAgIGxldCByZXN1bHQgPSAneydcbiAgICBjb25zdCBrZXlzOiBBcnJheTxzdHJpbmc+ID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0KS5zb3J0KClcbiAgICBsZXQgZmlyc3RTZWVuID0gZmFsc2VcbiAgICBsZXQgY291bnRlciA9IDFcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgIGlmIChjb3VudGVyID4gbWF4aW11bUxlbmd0aE9mTGlzdHMpIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSBgLFxcbiR7aW5pdGlhbEluZGVudGlvbn0uLi5gXG4gICAgICAgICAgICBicmVha1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpcnN0U2VlbilcbiAgICAgICAgICAgIHJlc3VsdCArPSAnLCdcblxuICAgICAgICByZXN1bHQgKz1cbiAgICAgICAgICAgIGBcXG4ke2luaXRpYWxJbmRlbnRpb259JHtpbmRlbnRpb259JHtrZXl9OiBgICtcbiAgICAgICAgICAgIHJlcHJlc2VudChcbiAgICAgICAgICAgICAgICAob2JqZWN0IGFzIE1hcHBpbmc8dW5rbm93bj4pW2tleV0sXG4gICAgICAgICAgICAgICAgbWF4aW11bUxlbmd0aE9mTGlzdHMsXG4gICAgICAgICAgICAgICAgaW5kZW50aW9uLFxuICAgICAgICAgICAgICAgIGAke2luaXRpYWxJbmRlbnRpb259JHtpbmRlbnRpb259YCxcbiAgICAgICAgICAgICAgICBtYXhpbXVtTnVtYmVyT2ZMZXZlbHNSZWFjaGVkSWRlbnRpZmllcixcbiAgICAgICAgICAgICAgICBudW1iZXJPZkxldmVscyAtIDFcbiAgICAgICAgICAgIClcblxuICAgICAgICBmaXJzdFNlZW4gPSB0cnVlXG5cbiAgICAgICAgY291bnRlciArPSAxXG4gICAgfVxuXG4gICAgaWYgKGZpcnN0U2VlbilcbiAgICAgICAgcmVzdWx0ICs9IGBcXG4ke2luaXRpYWxJbmRlbnRpb259YFxuXG4gICAgcmVzdWx0ICs9ICd9J1xuXG4gICAgcmV0dXJuIHJlc3VsdFxufVxuLyoqXG4gKiBTb3J0IGdpdmVuIG9iamVjdHMga2V5cy5cbiAqIEBwYXJhbSBvYmplY3QgLSBPYmplY3Qgd2hpY2gga2V5cyBzaG91bGQgYmUgc29ydGVkLlxuICogQHJldHVybnMgU29ydGVkIGxpc3Qgb2YgZ2l2ZW4ga2V5cy5cbiAqL1xuZXhwb3J0IGNvbnN0IHNvcnQgPSAob2JqZWN0OiB1bmtub3duKTogQXJyYXk8dW5rbm93bj4gPT4ge1xuICAgIGNvbnN0IGtleXM6IEFycmF5PHVua25vd24+ID0gW11cblxuICAgIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBvYmplY3QubGVuZ3RoOyBpbmRleCsrKVxuICAgICAgICAgICAga2V5cy5wdXNoKGluZGV4KVxuICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnKVxuICAgICAgICBpZiAoaXNNYXAob2JqZWN0KSlcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5VmFsdWVQYWlyIG9mIG9iamVjdClcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goa2V5VmFsdWVQYWlyWzBdKVxuICAgICAgICBlbHNlIGlmIChvYmplY3QgIT09IG51bGwpXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvYmplY3QpKVxuICAgICAgICAgICAgICAgIGtleXMucHVzaChrZXkpXG5cbiAgICByZXR1cm4ga2V5cy5zb3J0KClcbn1cbi8qKlxuICogUmVtb3ZlcyBhIHByb3h5IGZyb20gZ2l2ZW4gZGF0YSBzdHJ1Y3R1cmUgcmVjdXJzaXZlbHkuXG4gKiBAcGFyYW0gb2JqZWN0IC0gT2JqZWN0IHRvIHByb3h5LlxuICogQHBhcmFtIHNlZW5PYmplY3RzIC0gVHJhY2tzIGFsbCBhbHJlYWR5IHByb2Nlc3NlZCBvYmplY3RzIHRvIGF2b2lkXG4gKiBlbmRsZXNzIGxvb3BzICh1c3VhbGx5IG9ubHkgbmVlZGVkIGZvciBpbnRlcm5hbCBwdXJwb3NlKS5cbiAqIEByZXR1cm5zIFJldHVybnMgZ2l2ZW4gb2JqZWN0IHVud3JhcHBlZCBmcm9tIGEgZHluYW1pYyBwcm94eS5cbiAqL1xuZXhwb3J0IGNvbnN0IHVud3JhcFByb3h5ID0gPFQgPSB1bmtub3duPihcbiAgICBvYmplY3Q6IFByb3h5VHlwZTxUPiB8IFQsIHNlZW5PYmplY3RzOiBTZXQ8dW5rbm93bj4gPSBuZXcgU2V0PHVua25vd24+KClcbik6IFQgPT4ge1xuICAgIGlmIChpc09iamVjdChvYmplY3QpKSB7XG4gICAgICAgIGlmIChzZWVuT2JqZWN0cy5oYXMob2JqZWN0KSlcbiAgICAgICAgICAgIHJldHVybiBvYmplY3RcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24ob2JqZWN0Ll9fcmV2b2tlX18pKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzUHJveHkob2JqZWN0KSlcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0ID0gb2JqZWN0Ll9fdGFyZ2V0X19cblxuICAgICAgICAgICAgICAgIDsob2JqZWN0IGFzIHVua25vd24gYXMge19fcmV2b2tlX186ICgpID0+IHZvaWR9KS5fX3Jldm9rZV9fKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4gb2JqZWN0XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBzZWVuT2JqZWN0cy5hZGQob2JqZWN0KVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xuICAgICAgICAgICAgbGV0IGluZGV4ID0gMFxuICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBvYmplY3QpIHtcbiAgICAgICAgICAgICAgICBvYmplY3RbaW5kZXhdID0gdW53cmFwUHJveHkodmFsdWUsIHNlZW5PYmplY3RzKVxuXG4gICAgICAgICAgICAgICAgaW5kZXggKz0gMVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGlzTWFwKG9iamVjdCkpXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBvYmplY3QpXG4gICAgICAgICAgICAgICAgb2JqZWN0LnNldChrZXksIHVud3JhcFByb3h5KHZhbHVlLCBzZWVuT2JqZWN0cykpXG4gICAgICAgIGVsc2UgaWYgKGlzU2V0KG9iamVjdCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhY2hlOiBBcnJheTx1bmtub3duPiA9IFtdXG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2Ygb2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgb2JqZWN0LmRlbGV0ZSh2YWx1ZSlcbiAgICAgICAgICAgICAgICBjYWNoZS5wdXNoKHVud3JhcFByb3h5KHZhbHVlLCBzZWVuT2JqZWN0cykpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgY2FjaGUpXG4gICAgICAgICAgICAgICAgb2JqZWN0LmFkZCh2YWx1ZSlcbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhcbiAgICAgICAgICAgICAgICBvYmplY3QgYXMgdW5rbm93biBhcyBvYmplY3RcbiAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgICAgb2JqZWN0W2tleSBhcyBrZXlvZiBUXSA9XG4gICAgICAgICAgICAgICAgICAgIHVud3JhcFByb3h5KHZhbHVlLCBzZWVuT2JqZWN0cykgYXMgVmFsdWVPZjxUPlxuICAgIH1cblxuICAgIHJldHVybiBvYmplY3Rcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBYkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFpQ0EsU0FDSSxxQkFBcUIsRUFBRSxnQ0FBZ0MsRUFBRSxpQkFBaUI7QUFFOUUsU0FDSSxVQUFV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
|
|
316
|
+
*/var _unwrapProxy=function unwrapProxy(object,seenObjects){if(seenObjects===void 0){seenObjects=new Set}if((0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isObject */ .Gv)(object)){if(seenObjects.has(object))return object;try{if((0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isFunction */ .Tn)(object.__revoke__)){if((0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isProxy */ .ju)(object))object=object.__target__;object.__revoke__()}}catch(_unused){return object}finally{seenObjects.add(object)}if(Array.isArray(object)){var index=0;var _iterator33=_createForOfIteratorHelper(object),_step33;try{for(_iterator33.s();!(_step33=_iterator33.n()).done;){var value=_step33.value;object[index]=_unwrapProxy(value,seenObjects);index+=1}}catch(err){_iterator33.e(err)}finally{_iterator33.f()}}else if((0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isMap */ .jh)(object)){var _iterator34=_createForOfIteratorHelper(object),_step34;try{for(_iterator34.s();!(_step34=_iterator34.n()).done;){var _step34$value=_slicedToArray(_step34.value,2),key=_step34$value[0],_value17=_step34$value[1];object.set(key,_unwrapProxy(_value17,seenObjects))}}catch(err){_iterator34.e(err)}finally{_iterator34.f()}}else if((0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isSet */ .vM)(object)){var cache=[];var _iterator35=_createForOfIteratorHelper(object),_step35;try{for(_iterator35.s();!(_step35=_iterator35.n()).done;){var _value19=_step35.value;object.delete(_value19);cache.push(_unwrapProxy(_value19,seenObjects))}}catch(err){_iterator35.e(err)}finally{_iterator35.f()}for(var _i29=0,_cache4=cache;_i29<_cache4.length;_i29++){var _value18=_cache4[_i29];object.add(_value18)}}else for(var _i30=0,_Object$entries16=Object.entries(object);_i30<_Object$entries16.length;_i30++){var _Object$entries16$_i=_slicedToArray(_Object$entries16[_i30],2),_key11=_Object$entries16$_i[0],_value20=_Object$entries16$_i[1];object[_key11]=_unwrapProxy(_value20,seenObjects)}}return object};
|
|
317
|
+
__webpack_async_result__();
|
|
318
|
+
} catch(e) { __webpack_async_result__(e); } });
|
|
319
|
+
|
|
320
|
+
/***/ }),
|
|
321
|
+
/* 3 */
|
|
322
|
+
/***/ (function(__webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
323
|
+
|
|
324
|
+
__webpack_require__.a(__webpack_module__, async function (__webpack_handle_async_dependencies__, __webpack_async_result__) { try {
|
|
325
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
326
|
+
/* harmony export */ Gv: function() { return /* binding */ isObject; },
|
|
327
|
+
/* harmony export */ Qd: function() { return /* binding */ isPlainObject; },
|
|
328
|
+
/* harmony export */ Tn: function() { return /* binding */ isFunction; },
|
|
329
|
+
/* harmony export */ jh: function() { return /* binding */ isMap; },
|
|
330
|
+
/* harmony export */ ju: function() { return /* binding */ isProxy; },
|
|
331
|
+
/* harmony export */ kf: function() { return /* binding */ isNumeric; },
|
|
332
|
+
/* harmony export */ vM: function() { return /* binding */ isSet; }
|
|
333
|
+
/* harmony export */ });
|
|
334
|
+
/* unused harmony exports isWindow, isArrayLike, isAnyMatching */
|
|
335
|
+
/* unused harmony import specifier */ var determineType;
|
|
336
|
+
/* harmony import */ var core_js_modules_es_array_includes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0);
|
|
337
|
+
/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1);
|
|
338
|
+
/* harmony import */ var _object_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2);
|
|
339
|
+
var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_object_js__WEBPACK_IMPORTED_MODULE_2__]);
|
|
340
|
+
var __webpack_async_dependencies_result__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
|
|
341
|
+
_object_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_async_dependencies_result__[0];
|
|
342
|
+
// #!/usr/bin/env babel-node
|
|
343
|
+
// -*- coding: utf-8 -*-
|
|
344
|
+
/** @module indicators *//* !
|
|
345
|
+
region header
|
|
346
|
+
[Project page](https://torben.website/clientnode)
|
|
347
|
+
|
|
348
|
+
Copyright Torben Sickert (info["~at~"]torben.website) 16.12.2012
|
|
349
|
+
|
|
350
|
+
License
|
|
351
|
+
-------
|
|
352
|
+
|
|
353
|
+
This library written by Torben Sickert stands under a creative commons
|
|
354
|
+
naming 3.0 unported license.
|
|
355
|
+
See https://creativecommons.org/licenses/by/3.0/deed.de
|
|
356
|
+
endregion
|
|
357
|
+
*/function _createForOfIteratorHelper(r,e){var t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(!t){if(Array.isArray(r)||(t=_unsupportedIterableToArray(r))||e&&r&&"number"==typeof r.length){t&&(r=t);var _n=0,F=function F(){};return{s:F,n:function n(){return _n>=r.length?{done:!0}:{done:!1,value:r[_n++]}},e:function e(r){throw r},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 o,a=!0,u=!1;return{s:function s(){t=t.call(r)},n:function n(){var r=t.next();return a=r.done,r},e:function e(r){u=!0,o=r},f:function f(){try{a||null==t.return||t.return()}finally{if(u)throw o}}}}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}/**
|
|
358
|
+
* Determines whether its argument represents a JavaScript number.
|
|
359
|
+
* @param value - Value to analyze.
|
|
360
|
+
* @returns A boolean value indicating whether given object is numeric
|
|
361
|
+
* like.
|
|
362
|
+
*/var isNumeric=function isNumeric(value){var type=(0,_object_js__WEBPACK_IMPORTED_MODULE_2__/* .determineType */ .Sj)(value);/*
|
|
363
|
+
NOTE: "parseFloat" "NaNs" numeric-cast false positives ("") but
|
|
364
|
+
misinterprets leading-number strings, particularly hex literals
|
|
365
|
+
("0x...") subtraction forces infinities to NaN.
|
|
366
|
+
*/return["number","string"].includes(type)&&!isNaN(value-parseFloat(value))};/**
|
|
367
|
+
* Determine whether the argument is a window.
|
|
368
|
+
* @param value - Value to check for.
|
|
369
|
+
* @returns Boolean value indicating the result.
|
|
370
|
+
*/var isWindow=function isWindow(value){return![null,undefined].includes(value)&&_typeof(value)==="object"&&value===(value===null||value===void 0?void 0:value.window)};/**
|
|
371
|
+
* Checks if given object is similar to an array and can be handled like an
|
|
372
|
+
* array.
|
|
373
|
+
* @param object - Object to check behavior for.
|
|
374
|
+
* @returns A boolean value indicating whether given object is array like.
|
|
375
|
+
*/var isArrayLike=function isArrayLike(object){var length;try{length=Boolean(object)&&object.length}catch(_unused){return false}var type=determineType(object);if(type==="function"||isWindow(object))return false;if(type==="array"||length===0)return true;if(typeof length==="number"&&length>0)try{var _dump=object[length-1];return true}catch(_unused2){// Continue regardless of an error.
|
|
376
|
+
}return false};/**
|
|
377
|
+
* Checks whether one of the given pattern matches given string.
|
|
378
|
+
* @param target - Target to check in pattern for.
|
|
379
|
+
* @param pattern - List of pattern to check for.
|
|
380
|
+
* @returns Value "true" if given object is matches by at leas one of the
|
|
381
|
+
* given pattern and "false" otherwise.
|
|
382
|
+
*/var isAnyMatching=function isAnyMatching(target,pattern){var _iterator=_createForOfIteratorHelper(pattern),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var currentPattern=_step.value;if(typeof currentPattern==="string"){if(currentPattern===target)return true}else if(currentPattern.test(target))return true}}catch(err){_iterator.e(err)}finally{_iterator.f()}return false};/**
|
|
383
|
+
* Checks whether given object is a native object but not null.
|
|
384
|
+
* @param value - Value to check.
|
|
385
|
+
* @returns Value "true" if given object is a plain javaScript object and
|
|
386
|
+
* "false" otherwise.
|
|
387
|
+
*/var isObject=function isObject(value){return value!==null&&_typeof(value)==="object"};/**
|
|
388
|
+
* Checks whether given object is a plain native object.
|
|
389
|
+
* @param value - Value to check.
|
|
390
|
+
* @returns Value "true" if given object is a plain javaScript object and
|
|
391
|
+
* "false" otherwise.
|
|
392
|
+
*/var isPlainObject=function isPlainObject(value){return isObject(value)&&_constants_js__WEBPACK_IMPORTED_MODULE_1__/* .PLAIN_OBJECT_PROTOTYPES */ .jE.includes(Object.getPrototypeOf(value))};/**
|
|
393
|
+
* Checks whether given object is a set.
|
|
394
|
+
* @param value - Value to check.
|
|
395
|
+
* @returns Value "true" if given object is a set and "false" otherwise.
|
|
396
|
+
*/var isSet=function isSet(value){return (0,_object_js__WEBPACK_IMPORTED_MODULE_2__/* .determineType */ .Sj)(value)==="set"};/**
|
|
397
|
+
* Checks whether given object is a map.
|
|
398
|
+
* @param value - Value to check.
|
|
399
|
+
* @returns Value "true" if given object is a map and "false" otherwise.
|
|
400
|
+
*/var isMap=function isMap(value){return (0,_object_js__WEBPACK_IMPORTED_MODULE_2__/* .determineType */ .Sj)(value)==="map"};/**
|
|
401
|
+
* Checks whether given object is a proxy.
|
|
402
|
+
* @param value - Value to check.
|
|
403
|
+
* @returns Value "true" if given object is a proxy and "false" otherwise.
|
|
404
|
+
*/var isProxy=function isProxy(value){return Boolean(value.__target__)};/**
|
|
405
|
+
* Checks whether given object is a function.
|
|
406
|
+
* @param value - Value to check.
|
|
407
|
+
* @returns Value "true" if given object is a function and "false"
|
|
408
|
+
* otherwise.
|
|
409
|
+
*/var isFunction=function isFunction(value){return Boolean(value)&&["[object AsyncFunction]","[object Function]"].includes({}.toString.call(value))};
|
|
410
|
+
__webpack_async_result__();
|
|
411
|
+
} catch(e) { __webpack_async_result__(e); } });
|
|
412
|
+
|
|
413
|
+
/***/ }),
|
|
414
|
+
/* 4 */
|
|
415
|
+
/***/ (function(__webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
416
|
+
|
|
417
|
+
__webpack_require__.a(__webpack_module__, async function (__webpack_handle_async_dependencies__, __webpack_async_result__) { try {
|
|
418
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
419
|
+
/* harmony export */ Lz: function() { return /* binding */ globalContext; }
|
|
420
|
+
/* harmony export */ });
|
|
421
|
+
/* unused harmony exports setGlobalContext, MAXIMAL_NUMBER_OF_ITERATIONS, NOOP, mockConsole */
|
|
422
|
+
/* unused harmony import specifier */ var CONSOLE_METHODS;
|
|
423
|
+
/* harmony import */ var _module_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5);
|
|
424
|
+
var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_module_js__WEBPACK_IMPORTED_MODULE_0__]);
|
|
425
|
+
var __webpack_async_dependencies_result__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
|
|
426
|
+
_module_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_async_dependencies_result__[0];
|
|
427
|
+
// #!/usr/bin/env babel-node
|
|
428
|
+
// -*- coding: utf-8 -*-
|
|
429
|
+
/** @module context *//* !
|
|
430
|
+
region header
|
|
431
|
+
[Project page](https://torben.website/clientnode)
|
|
432
|
+
|
|
433
|
+
Copyright Torben Sickert (info["~at~"]torben.website) 16.12.2012
|
|
434
|
+
|
|
435
|
+
License
|
|
436
|
+
-------
|
|
437
|
+
|
|
438
|
+
This library written by Torben Sickert stands under a creative commons
|
|
439
|
+
naming 3.0 unported license.
|
|
440
|
+
See https://creativecommons.org/licenses/by/3.0/deed.de
|
|
441
|
+
endregion
|
|
442
|
+
*/var _optionalRequire$defa,_optionalRequire;function _createForOfIteratorHelper(r,e){var t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(!t){if(Array.isArray(r)||(t=_unsupportedIterableToArray(r))||e&&r&&"number"==typeof r.length){t&&(r=t);var _n=0,F=function F(){};return{s:F,n:function n(){return _n>=r.length?{done:!0}:{done:!1,value:r[_n++]}},e:function e(r){throw r},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 o,a=!0,u=!1;return{s:function s(){t=t.call(r)},n:function n(){var r=t.next();return a=r.done,r},e:function e(r){u=!0,o=r},f:function f(){try{a||null==t.return||t.return()}finally{if(u)throw o}}}}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}var globalContext=(0,_module_js__WEBPACK_IMPORTED_MODULE_0__/* .determineGlobalContext */ .a8)();var setGlobalContext=function setGlobalContext(context){globalContext=context};globalContext.fetch=globalContext.fetch?globalContext.fetch.bind(globalContext):(_optionalRequire$defa=(_optionalRequire=(0,_module_js__WEBPACK_IMPORTED_MODULE_0__/* .optionalRequire */ .I5)("node-fetch"))===null||_optionalRequire===void 0?void 0:_optionalRequire.default)!==null&&_optionalRequire$defa!==void 0?_optionalRequire$defa:function(){for(var _len=arguments.length,parameters=new Array(_len),_key=0;_key<_len;_key++){parameters[_key]=arguments[_key]}return (0,_module_js__WEBPACK_IMPORTED_MODULE_0__/* .optionalImport */ .Sw)(/* webpackIgnore: true */"node-fetch").then(function(module){var _ref;return(_ref=module).default.apply(_ref,parameters)})};var MAXIMAL_NUMBER_OF_ITERATIONS=(/* unused pure expression or super */ null && ({value:100}));// A no-op dummy function.
|
|
443
|
+
var NOOP=function NOOP(){// Do nothing.
|
|
444
|
+
};var mockConsole=function mockConsole(){// Avoid errors in browsers that lack a console.
|
|
445
|
+
if(!Object.prototype.hasOwnProperty.call(globalContext,"console"))globalContext.console={};if(!globalContext.console)globalContext.console={};var _iterator=_createForOfIteratorHelper(CONSOLE_METHODS),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var methodName=_step.value;if(!(methodName in globalContext.console))globalContext.console[methodName]=NOOP}}catch(err){_iterator.e(err)}finally{_iterator.f()}};
|
|
446
|
+
__webpack_async_result__();
|
|
447
|
+
} catch(e) { __webpack_async_result__(e); } });
|
|
448
|
+
|
|
449
|
+
/***/ }),
|
|
450
|
+
/* 5 */
|
|
451
|
+
/***/ (function(__webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
452
|
+
|
|
453
|
+
__webpack_require__.a(__webpack_module__, async function (__webpack_handle_async_dependencies__, __webpack_async_result__) { try {
|
|
454
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
455
|
+
/* harmony export */ I5: function() { return /* binding */ optionalRequire; },
|
|
456
|
+
/* harmony export */ Sw: function() { return /* binding */ optionalImport; },
|
|
457
|
+
/* harmony export */ a8: function() { return /* binding */ determineGlobalContext; }
|
|
458
|
+
/* harmony export */ });
|
|
459
|
+
/* unused harmony exports isImportSyntaxSupported, currentRequire, clearRequireCache, isolatedRequire */
|
|
460
|
+
// #!/usr/bin/env babel-node
|
|
461
|
+
// -*- coding: utf-8 -*-
|
|
462
|
+
/** @module module *//* !
|
|
463
|
+
region header
|
|
464
|
+
[Project page](https://torben.website/clientnode)
|
|
465
|
+
|
|
466
|
+
Copyright Torben Sickert (info["~at~"]torben.website) 16.12.2012
|
|
467
|
+
|
|
468
|
+
License
|
|
469
|
+
-------
|
|
470
|
+
|
|
471
|
+
This library written by Torben Sickert stands under a creative commons
|
|
472
|
+
naming 3.0 unported license.
|
|
473
|
+
See https://creativecommons.org/licenses/by/3.0/deed.de
|
|
474
|
+
endregion
|
|
475
|
+
*/function _regenerator(){/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */var e,t,r="function"==typeof Symbol?Symbol:{},n=r.iterator||"@@iterator",o=r.toStringTag||"@@toStringTag";function i(r,n,o,i){var c=n&&n.prototype instanceof Generator?n:Generator,u=Object.create(c.prototype);return _regeneratorDefine2(u,"_invoke",function(r,n,o){var i,c,u,f=0,p=o||[],y=!1,G={p:0,n:0,v:e,a:d,f:d.bind(e,4),d:function d(t,r){return i=t,c=0,u=e,G.n=r,a}};function d(r,n){for(c=r,u=n,t=0;!y&&f&&!o&&t<p.length;t++){var o,i=p[t],d=G.p,l=i[2];r>3?(o=l===n)&&(u=i[(c=i[4])?5:(c=3,3)],i[4]=i[5]=e):i[0]<=d&&((o=r<2&&d<i[1])?(c=0,G.v=n,G.n=i[1]):d<l&&(o=r<3||i[0]>n||n>l)&&(i[4]=r,i[5]=n,G.n=l,c=0))}if(o||r>1)return a;throw y=!0,n}return function(o,p,l){if(f>1)throw TypeError("Generator is already running");for(y&&1===p&&d(p,l),c=p,u=l;(t=c<2?e:u)||!y;){i||(c?c<3?(c>1&&(G.n=-1),d(c,u)):G.n=u:G.v=u);try{if(f=2,i){if(c||(o="next"),t=i[o]){if(!(t=t.call(i,u)))throw TypeError("iterator result is not an object");if(!t.done)return t;u=t.value,c<2&&(c=0)}else 1===c&&(t=i.return)&&t.call(i),c<2&&(u=TypeError("The iterator does not provide a '"+o+"' method"),c=1);i=e}else if((t=(y=G.n<0)?u:r.call(n,G))!==a)break}catch(t){i=e,c=1,u=t}finally{f=1}}return{value:t,done:y}}}(r,o,i),!0),u}var a={};function Generator(){}function GeneratorFunction(){}function GeneratorFunctionPrototype(){}t=Object.getPrototypeOf;var c=[][n]?t(t([][n]())):(_regeneratorDefine2(t={},n,function(){return this}),t),u=GeneratorFunctionPrototype.prototype=Generator.prototype=Object.create(c);function f(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,GeneratorFunctionPrototype):(e.__proto__=GeneratorFunctionPrototype,_regeneratorDefine2(e,o,"GeneratorFunction")),e.prototype=Object.create(u),e}return GeneratorFunction.prototype=GeneratorFunctionPrototype,_regeneratorDefine2(u,"constructor",GeneratorFunctionPrototype),_regeneratorDefine2(GeneratorFunctionPrototype,"constructor",GeneratorFunction),GeneratorFunction.displayName="GeneratorFunction",_regeneratorDefine2(GeneratorFunctionPrototype,o,"GeneratorFunction"),_regeneratorDefine2(u),_regeneratorDefine2(u,o,"Generator"),_regeneratorDefine2(u,n,function(){return this}),_regeneratorDefine2(u,"toString",function(){return"[object Generator]"}),(_regenerator=function _regenerator(){return{w:i,m:f}})()}function _regeneratorDefine2(e,r,n,t){var i=Object.defineProperty;try{i({},"",{})}catch(e){i=0}_regeneratorDefine2=function _regeneratorDefine(e,r,n,t){function o(r,n){_regeneratorDefine2(e,r,function(e){return this._invoke(r,n,e)})}r?i?i(e,r,{value:n,enumerable:!t,configurable:!t,writable:!t}):e[r]=n:(o("next",0),o("throw",1),o("return",2))},_regeneratorDefine2(e,r,n,t)}function asyncGeneratorStep(n,t,e,r,o,a,c){try{var i=n[a](c),u=i.value}catch(n){return void e(n)}i.done?t(u):Promise.resolve(u).then(r,o)}function _asyncToGenerator(n){return function(){var t=this,e=arguments;return new Promise(function(r,o){var a=n.apply(t,e);function _next(n){asyncGeneratorStep(a,r,o,_next,_throw,"next",n)}function _throw(n){asyncGeneratorStep(a,r,o,_next,_throw,"throw",n)}_next(void 0)})}}function _slicedToArray(r,e){return _arrayWithHoles(r)||_iterableToArrayLimit(r,e)||_unsupportedIterableToArray(r,e)||_nonIterableRest()}function _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.")}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}function _iterableToArrayLimit(r,l){var t=null==r?null:"undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(null!=t){var e,n,i,u,a=[],f=!0,o=!1;try{if(i=(t=t.call(r)).next,0===l){if(Object(t)!==t)return;f=!1}else for(;!(f=(e=i.call(t)).done)&&(a.push(e.value),a.length!==l);f=!0);}catch(r){o=!0,n=r}finally{try{if(!f&&null!=t.return&&(u=t.return(),Object(u)!==u))return}finally{if(o)throw n}}return a}}function _arrayWithHoles(r){if(Array.isArray(r))return r}var determineGlobalContext=function determineGlobalContext(){if(typeof globalThis==="undefined"){if(typeof window==="undefined"){if(typeof __webpack_require__.g==="undefined")return typeof module==="undefined"?{}:module;if(Object.prototype.hasOwnProperty.call(__webpack_require__.g,"window"))return __webpack_require__.g.window;return __webpack_require__.g}return window}return globalThis};var globalContext=determineGlobalContext();// Make preprocessed import function available at runtime.
|
|
476
|
+
var isImportSyntaxSupported=function isImportSyntaxSupported(){try{// eslint-disable-next-line @typescript-eslint/no-implied-eval
|
|
477
|
+
new Function("import(\"data:text/javascript,\")");return true}catch(_unused){return false}};// Make preprocessed require function available at runtime.
|
|
478
|
+
var customRequire=typeof globalContext.require==="undefined"?null:globalContext.require;if(!customRequire&&isImportSyntaxSupported())try{var _await$Function=/*
|
|
479
|
+
eslint-disable
|
|
480
|
+
@typescript-eslint/no-implied-eval,
|
|
481
|
+
@typescript-eslint/no-unsafe-call
|
|
482
|
+
*/await new Function("return import(\"node:module\")")(),createRequire=_await$Function.createRequire;/*
|
|
483
|
+
eslint-enable
|
|
484
|
+
@typescript-eslint/no-implied-eval,
|
|
485
|
+
@typescript-eslint/no-unsafe-call
|
|
486
|
+
*/// eslint-disable-next-line @typescript-eslint/no-unsafe-call
|
|
487
|
+
customRequire=createRequire("file:///__w/clientnode/clientnode/src/module.ts")}catch(_unused2){// Ignore error.
|
|
488
|
+
}var currentRequire=customRequire;var optionalRequire=function optionalRequire(id){try{return currentRequire?currentRequire(id):null}catch(_unused3){return null}};var clearRequireCache=function clearRequireCache(cache){if(cache===void 0){cache=(currentRequire===null||currentRequire===void 0?void 0:currentRequire.cache)||require.cache}var backup={};for(var _i=0,_Object$entries=Object.entries(cache);_i<_Object$entries.length;_i++){var _Object$entries$_i=_slicedToArray(_Object$entries[_i],2),key=_Object$entries$_i[0],_module=_Object$entries$_i[1];backup[key]=_module;delete cache[key]}return backup};var restoreRequireCache=function restoreRequireCache(cache,backup){if(cache===void 0){cache=(currentRequire===null||currentRequire===void 0?void 0:currentRequire.cache)||require.cache}clearRequireCache();for(var _i2=0,_Object$entries2=Object.entries(backup);_i2<_Object$entries2.length;_i2++){var _Object$entries2$_i=_slicedToArray(_Object$entries2[_i2],2),key=_Object$entries2$_i[0],_module2=_Object$entries2$_i[1];cache[key]=_module2}};var isolatedRequire=function isolatedRequire(path,requireFunction){if(requireFunction===void 0){requireFunction=currentRequire||require}var backup=clearRequireCache(requireFunction.cache);try{return requireFunction(path);// eslint-disable-next-line no-useless-catch
|
|
489
|
+
}catch(error){throw error}finally{restoreRequireCache(requireFunction.cache,backup)}};var optionalImport=/*#__PURE__*/function(){var _optionalImport=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(id,options){var _t,_t2;return _regenerator().w(function(_context){while(1)switch(_context.p=_context.n){case 0:if(options===void 0){options={}}_context.p=1;if(!isImportSyntaxSupported()){_context.n=3;break}_context.n=2;return new Function("options","return import('".concat(id,"', options)"))(options);case 2:_t=_context.v;_context.n=5;break;case 3:_context.n=4;return Promise.resolve(null);case 4:_t=_context.v;case 5:return _context.a(2,_t);case 6:_context.p=6;_t2=_context.v;_context.n=7;return Promise.resolve(null);case 7:return _context.a(2,_context.v)}},_callee,null,[[1,6]])}));function optionalImport(_x,_x2){return _optionalImport.apply(this,arguments)}return optionalImport}();
|
|
490
|
+
__webpack_async_result__();
|
|
491
|
+
} catch(e) { __webpack_async_result__(e); } }, 1);
|
|
492
|
+
|
|
493
|
+
/***/ }),
|
|
494
|
+
/* 6 */
|
|
495
|
+
/***/ (function(__webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
496
|
+
|
|
497
|
+
__webpack_require__.a(__webpack_module__, async function (__webpack_handle_async_dependencies__, __webpack_async_result__) { try {
|
|
498
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
499
|
+
/* harmony export */ jt: function() { return /* binding */ escapeRegularExpressions; },
|
|
500
|
+
/* harmony export */ nD: function() { return /* binding */ evaluateAndThrowError; }
|
|
501
|
+
/* harmony export */ });
|
|
502
|
+
/* unused harmony exports POLYFILL_TEMPLATE_STRINGS, ALLOWED_VARIABLE_SYMBOLS, ALLOWED_STARTING_VARIABLE_SYMBOLS, FIX_ENCODING_ERROR_MAPPING, convertToValidVariableName, encodeURIComponentExtended, addSeparatorToPath, hasPathPrefix, getDomainName, getPortNumber, getProtocolName, getURLParameter, serviceURLEquals, normalizeURL, representURL, camelCaseToDelimited, capitalize, compressStyleValue, decodeHTMLEntities, delimitedToCamelCase, compile, evaluate, findNormalizedMatchRange, fixKnownEncodingErrors, format, getEditDistance, maskForRegularExpression, lowerCase, mark, normalizePhoneNumber, normalizeZipCode, parseEncodedObject, representPhoneNumber, sliceAllExceptNumberAndLastSeparator, normalizeDomNodeSelector, limit */
|
|
503
|
+
/* unused harmony import specifier */ var ABBREVIATIONS;
|
|
504
|
+
/* unused harmony import specifier */ var DEFAULT_ENCODING;
|
|
505
|
+
/* unused harmony import specifier */ var globalContext;
|
|
506
|
+
/* unused harmony import specifier */ var MAXIMAL_NUMBER_OF_ITERATIONS;
|
|
507
|
+
/* unused harmony import specifier */ var imports;
|
|
508
|
+
/* unused harmony import specifier */ var isFileSync;
|
|
509
|
+
/* unused harmony import specifier */ var determineType;
|
|
510
|
+
/* harmony import */ var core_js_modules_es_array_includes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0);
|
|
511
|
+
/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1);
|
|
512
|
+
/* harmony import */ var _context_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4);
|
|
513
|
+
/* harmony import */ var _object_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(2);
|
|
514
|
+
var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_context_js__WEBPACK_IMPORTED_MODULE_2__, _object_js__WEBPACK_IMPORTED_MODULE_3__]);
|
|
515
|
+
var __webpack_async_dependencies_result__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
|
|
516
|
+
_context_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_async_dependencies_result__[0];
|
|
517
|
+
_object_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_async_dependencies_result__[1];
|
|
518
|
+
// #!/usr/bin/env babel-node
|
|
519
|
+
// -*- coding: utf-8 -*-
|
|
520
|
+
/** @module string *//* !
|
|
521
|
+
region header
|
|
522
|
+
[Project page](https://torben.website/clientnode)
|
|
523
|
+
|
|
524
|
+
Copyright Torben Sickert (info["~at~"]torben.website) 16.12.2012
|
|
525
|
+
|
|
526
|
+
License
|
|
527
|
+
-------
|
|
528
|
+
|
|
529
|
+
This library written by Torben Sickert stands under a creative commons
|
|
530
|
+
naming 3.0 unported license.
|
|
531
|
+
See https://creativecommons.org/licenses/by/3.0/deed.de
|
|
532
|
+
endregion
|
|
533
|
+
*/// region imports
|
|
534
|
+
function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,o)}return t}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){_defineProperty(e,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})}return e}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}function _slicedToArray(r,e){return _arrayWithHoles(r)||_iterableToArrayLimit(r,e)||_unsupportedIterableToArray(r,e)||_nonIterableRest()}function _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.")}function _iterableToArrayLimit(r,l){var t=null==r?null:"undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(null!=t){var e,n,i,u,a=[],f=!0,o=!1;try{if(i=(t=t.call(r)).next,0===l){if(Object(t)!==t)return;f=!1}else for(;!(f=(e=i.call(t)).done)&&(a.push(e.value),a.length!==l);f=!0);}catch(r){o=!0,n=r}finally{try{if(!f&&null!=t.return&&(u=t.return(),Object(u)!==u))return}finally{if(o)throw n}}return a}}function _arrayWithHoles(r){if(Array.isArray(r))return r}function _construct(t,e,r){if(_isNativeReflectConstruct())return Reflect.construct.apply(null,arguments);var o=[null];o.push.apply(o,e);var p=new(t.bind.apply(t,o));return r&&_setPrototypeOf(p,r.prototype),p}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t})()}function _toConsumableArray(r){return _arrayWithoutHoles(r)||_iterableToArray(r)||_unsupportedIterableToArray(r)||_nonIterableSpread()}function _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.")}function _iterableToArray(r){if("undefined"!=typeof Symbol&&null!=r[Symbol.iterator]||null!=r["@@iterator"])return Array.from(r)}function _arrayWithoutHoles(r){if(Array.isArray(r))return _arrayLikeToArray(r)}function _createForOfIteratorHelper(r,e){var t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(!t){if(Array.isArray(r)||(t=_unsupportedIterableToArray(r))||e&&r&&"number"==typeof r.length){t&&(r=t);var _n=0,F=function F(){};return{s:F,n:function n(){return _n>=r.length?{done:!0}:{done:!1,value:r[_n++]}},e:function e(r){throw r},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 o,a=!0,u=!1;return{s:function s(){t=t.call(r)},n:function n(){var r=t.next();return a=r.done,r},e:function e(r){u=!0,o=r},f:function f(){try{a||null==t.return||t.return()}finally{if(u)throw o}}}}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}// endregion
|
|
535
|
+
var POLYFILL_TEMPLATE_STRINGS={value:false};// Partial regular expression matching symbols which should be allowed within a
|
|
536
|
+
// variable name excluding the first character.
|
|
537
|
+
var ALLOWED_VARIABLE_SYMBOLS="0-9a-zA-Z_$";// Partial regular expression matching symbols which should be allowed as
|
|
538
|
+
// starting character for a variable name.
|
|
539
|
+
var ALLOWED_STARTING_VARIABLE_SYMBOLS="a-zA-Z_$";var FIX_ENCODING_ERROR_MAPPING=(/* unused pure expression or super */ null && ([["\xC3\\x84","\xC4"],["\xC3\\x96","\xD6"],["\xC3\\x9c","\xDC"],["\xC3\xA4","\xE4"],["\xC3\xB6","\xF6"],["\xC3\xBC","\xFC"],["\\x96","-"],["\xC3\xA9","\xE9"],["\xC3\xA8","e"],["\xC3\xB4","o"],["\xC3 ","\xE1"],["\xC3\xB8","\xF8"],["\xC3\\x9f","\xDF"],["\xC3","\xDF"]]));/**
|
|
540
|
+
* Translates a given string into the regular expression validated
|
|
541
|
+
* representation.
|
|
542
|
+
* @param value - String to convert.
|
|
543
|
+
* @param excludeSymbols - Symbols not to escape.
|
|
544
|
+
* @returns Converted string.
|
|
545
|
+
*/var escapeRegularExpressions=function escapeRegularExpressions(value,excludeSymbols){if(excludeSymbols===void 0){excludeSymbols=[]}// NOTE: This is only for performance improvements.
|
|
546
|
+
if(value.length===1&&!_constants_js__WEBPACK_IMPORTED_MODULE_1__/* .SPECIAL_REGEX_SEQUENCES */ .FI.includes(value))return value;// The escape sequence must also be escaped; but at first.
|
|
547
|
+
if(!excludeSymbols.includes("\\"))value.replace(/\\/g,"\\\\");var _iterator=_createForOfIteratorHelper(_constants_js__WEBPACK_IMPORTED_MODULE_1__/* .SPECIAL_REGEX_SEQUENCES */ .FI),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var replace=_step.value;if(!excludeSymbols.includes(replace))value=value.replace(new RegExp("\\".concat(replace),"g"),"\\".concat(replace))}}catch(err){_iterator.e(err)}finally{_iterator.f()}return value};/**
|
|
548
|
+
* Translates a given name into a valid JavaScript one.
|
|
549
|
+
* @param name - Name to convert.
|
|
550
|
+
* @returns Converted name is returned.
|
|
551
|
+
*/var convertToValidVariableName=function convertToValidVariableName(name){if(["class","default"].includes(name))return"_".concat(name);return name// Remove all disallowed starting characters.
|
|
552
|
+
.replace(new RegExp("^[^".concat(ALLOWED_STARTING_VARIABLE_SYMBOLS,"]+")),"")// Remove all disallowed characters within a variable name and make
|
|
553
|
+
// continuing character upper case.
|
|
554
|
+
.replace(new RegExp("[^".concat(ALLOWED_VARIABLE_SYMBOLS,"]+([a-zA-Z])"),"g"),function(_fullMatch,firstLetter){return firstLetter.toUpperCase()})};// region url handline
|
|
555
|
+
/**
|
|
556
|
+
* This method is intended for encoding *key* or *value* parts of a query
|
|
557
|
+
* component. We need a custom method because "encodeURIComponent()" is too
|
|
558
|
+
* aggressive and encodes stuff that doesn't have to be encoded per
|
|
559
|
+
* "http://tools.ietf.org/html/rfc3986:".
|
|
560
|
+
* @param url - URL to encode.
|
|
561
|
+
* @param encodeSpaces - Indicates whether given url should encode
|
|
562
|
+
* whitespaces as "+" or "%20".
|
|
563
|
+
* @returns Encoded given url.
|
|
564
|
+
*/var encodeURIComponentExtended=function encodeURIComponentExtended(url,encodeSpaces){if(encodeSpaces===void 0){encodeSpaces=false}return encodeURIComponent(url).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,encodeSpaces?"%20":"+")};/**
|
|
565
|
+
* Appends a path selector to the given path if there isn't one yet.
|
|
566
|
+
* @param path - The path for appending a selector.
|
|
567
|
+
* @param pathSeparator - The selector for appending to a path.
|
|
568
|
+
* @returns The appended path.
|
|
569
|
+
*/var addSeparatorToPath=function addSeparatorToPath(path,pathSeparator){if(pathSeparator===void 0){pathSeparator="/"}path=path.trim();if(path.substring(path.length-1)!==pathSeparator&&path.length)return path+pathSeparator;return path};/**
|
|
570
|
+
* Checks if a given path has given path prefix.
|
|
571
|
+
* @param prefix - Path prefix to search for.
|
|
572
|
+
* @param path - Path to search in.
|
|
573
|
+
* @param separator - Delimiter to use in a path (default is the posix
|
|
574
|
+
* conform slash).
|
|
575
|
+
* @returns Value "true" if given prefix occurs and "false" otherwise.
|
|
576
|
+
*/var hasPathPrefix=function hasPathPrefix(prefix,path,separator){if(prefix===void 0){prefix="/admin"}if(path===void 0){var _globalContext$locati;path=((_globalContext$locati=globalContext.location)===null||_globalContext$locati===void 0?void 0:_globalContext$locati.pathname)||""}if(separator===void 0){separator="/"}if(typeof prefix==="string"){if(!prefix.endsWith(separator))prefix+=separator;return path===prefix.substring(0,prefix.length-separator.length)||path.startsWith(prefix)}return false};/**
|
|
577
|
+
* Extracts domain name from given url. If no explicit domain name given
|
|
578
|
+
* current domain name will be assumed. If no parameter is given, the current
|
|
579
|
+
* domain name will be determined.
|
|
580
|
+
* @param url - The url to extract domain from.
|
|
581
|
+
* @param fallback - The fallback host name if no one exits in given url
|
|
582
|
+
* (default is current hostname).
|
|
583
|
+
* @returns Extracted domain.
|
|
584
|
+
*/var getDomainName=function getDomainName(url,fallback){if(url===void 0){var _globalContext$locati2;url=((_globalContext$locati2=globalContext.location)===null||_globalContext$locati2===void 0?void 0:_globalContext$locati2.href)||""}if(fallback===void 0){var _globalContext$locati3;fallback=((_globalContext$locati3=globalContext.location)===null||_globalContext$locati3===void 0?void 0:_globalContext$locati3.hostname)||""}var result=/^([a-z]*:?\/\/)?([^/]+?)(?::[0-9]+)?(?:\/.*|$)/i.exec(url);if(result&&result.length>2&&result[1]&&result[2])return result[2];return fallback};/**
|
|
585
|
+
* Extracts port number from given url. If no explicit port number is given
|
|
586
|
+
* and no fallback is defined, the current port number will be assumed for local
|
|
587
|
+
* links. For external links 80 will be assumed for http protocols and 443
|
|
588
|
+
* for https protocols.
|
|
589
|
+
* @param url - The url to extract port from.
|
|
590
|
+
* @param fallback - Fallback port number if no explicit one was found.
|
|
591
|
+
* Default is derived from the current protocol name.
|
|
592
|
+
* @returns Extracted port number.
|
|
593
|
+
*/var getPortNumber=function getPortNumber(url,fallback){var _globalContext$locati6;if(url===void 0){var _globalContext$locati4;url=((_globalContext$locati4=globalContext.location)===null||_globalContext$locati4===void 0?void 0:_globalContext$locati4.href)||""}if(fallback===void 0){var _globalContext$locati5;fallback=(_globalContext$locati5=globalContext.location)!==null&&_globalContext$locati5!==void 0&&_globalContext$locati5.port?parseInt(globalContext.location.port):null}var result=/^(?:[a-z]*:?\/\/[^/]+?)?[^/]+?:([0-9]+)/i.exec(url);if(result&&result.length>1)return parseInt(result[1],10);if(fallback!==null)return fallback;if(// NOTE: Would result in an endless loop:
|
|
594
|
+
// serviceURLEquals(url, ...parameters) &&
|
|
595
|
+
(_globalContext$locati6=globalContext.location)!==null&&_globalContext$locati6!==void 0&&_globalContext$locati6.port&&parseInt(globalContext.location.port,10))return parseInt(globalContext.location.port,10);return getProtocolName(url)==="https"?443:80};/**
|
|
596
|
+
* Extracts protocol name from given url. If no explicit url is given,
|
|
597
|
+
* the current protocol will be assumed. If no parameter is given, the current
|
|
598
|
+
* protocol number will be determined.
|
|
599
|
+
* @param url - The url to extract protocol from.
|
|
600
|
+
* @param fallback - Fallback port to use if no protocol exists in given
|
|
601
|
+
* url (default is current protocol).
|
|
602
|
+
* @returns Extracted protocol.
|
|
603
|
+
*/var getProtocolName=function getProtocolName(url,fallback){if(url===void 0){var _globalContext$locati7;url=((_globalContext$locati7=globalContext.location)===null||_globalContext$locati7===void 0?void 0:_globalContext$locati7.href)||""}if(fallback===void 0){var _globalContext$locati8;fallback=((_globalContext$locati8=globalContext.location)===null||_globalContext$locati8===void 0?void 0:_globalContext$locati8.protocol)&&globalContext.location.protocol.substring(0,globalContext.location.protocol.length-1)||""}var result=/^([a-z]+):\/\//i.exec(url);if(result&&result.length>1&&result[1])return result[1];return fallback};/**
|
|
604
|
+
* Read a page's GET URL variables and return them as an associative array
|
|
605
|
+
* and preserves ordering.
|
|
606
|
+
* @param keyToGet - If provided the corresponding value for a given key is
|
|
607
|
+
* returned or full object otherwise.
|
|
608
|
+
* @param allowDuplicates - Indicates whether to return arrays of values or
|
|
609
|
+
* single values. If set to "false" (default) last values will overwrite
|
|
610
|
+
* preceding values.
|
|
611
|
+
* @param givenInput - An alternative input to the url search parameter. If
|
|
612
|
+
* "#" is given, the complete current hashtag will be interpreted as url and
|
|
613
|
+
* search parameter will be extracted from there. If "&" is given a classical
|
|
614
|
+
* search parameter, and hash parameter will be taken in an account. If a
|
|
615
|
+
* search string is given, this will be analyzed. The default is to take a
|
|
616
|
+
* given search part into account.
|
|
617
|
+
* @param subDelimiter - Defines which sequence indicates the start of
|
|
618
|
+
* parameter in a hash part of the url.
|
|
619
|
+
* @param hashedPathIndicator - If defined and given hash starts with this
|
|
620
|
+
* indicator, given hash will be interpreted as a path containing search and
|
|
621
|
+
* hash parts.
|
|
622
|
+
* @param givenSearch - Search part to take into account defaults to
|
|
623
|
+
* current url search part.
|
|
624
|
+
* @param givenHash - Hash part to take into account defaults to current
|
|
625
|
+
* url hash part.
|
|
626
|
+
* @returns Returns the current get array or requested value. If the requested
|
|
627
|
+
* key doesn't exist, "undefined" is returned.
|
|
628
|
+
*/var getURLParameter=function getURLParameter(keyToGet,allowDuplicates,givenInput,subDelimiter,hashedPathIndicator,givenSearch,givenHash){if(keyToGet===void 0){keyToGet=null}if(allowDuplicates===void 0){allowDuplicates=false}if(givenInput===void 0){givenInput=null}if(subDelimiter===void 0){subDelimiter="$"}if(hashedPathIndicator===void 0){hashedPathIndicator="!"}if(givenSearch===void 0){givenSearch=null}if(givenHash===void 0){var _globalContext$locati9,_globalContext$locati0;givenHash=(_globalContext$locati9=(_globalContext$locati0=globalContext.location)===null||_globalContext$locati0===void 0?void 0:_globalContext$locati0.hash)!==null&&_globalContext$locati9!==void 0?_globalContext$locati9:""}// region set search and hash
|
|
629
|
+
var hash=givenHash!==null&&givenHash!==void 0?givenHash:"#";var search="";if(givenSearch)search=givenSearch;else if(hashedPathIndicator&&hash.startsWith(hashedPathIndicator)){var subHashStartIndex=hash.indexOf("#");var pathAndSearch;if(subHashStartIndex===-1){pathAndSearch=hash.substring(hashedPathIndicator.length);hash=""}else{pathAndSearch=hash.substring(hashedPathIndicator.length,subHashStartIndex);hash=hash.substring(subHashStartIndex)}var subSearchStartIndex=pathAndSearch.indexOf("?");if(subSearchStartIndex!==-1)search=pathAndSearch.substring(subSearchStartIndex)}else if(globalContext.location)search=globalContext.location.search||"";var input=givenInput?givenInput:search;// endregion
|
|
630
|
+
// region determine data from search and hash if specified
|
|
631
|
+
var both=input==="&";if(both||input==="#"){var decodedHash="";try{decodedHash=decodeURIComponent(hash)}catch(_unused){// Continue regardless of an error.
|
|
632
|
+
}var subDelimiterIndex=decodedHash.indexOf(subDelimiter);if(subDelimiterIndex===-1)input="";else{input=decodedHash.substring(subDelimiterIndex);if(input.startsWith(subDelimiter))input=input.substring(subDelimiter.length)}}else if(input.startsWith("?"))input=input.substring("?".length);var data=input?input.split("&"):[];search=search.substring("?".length);if(both&&search)data=data.concat(search.split("&"));// endregion
|
|
633
|
+
// region construct data structure
|
|
634
|
+
var parameters=[];var _iterator2=_createForOfIteratorHelper(data),_step2;try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var _value=_step2.value;var keyValuePair=_value.split("=");var key=void 0;try{key=decodeURIComponent(keyValuePair[0])}catch(_unused2){key=""}try{_value=decodeURIComponent(keyValuePair[1])}catch(_unused3){_value=""}parameters.push(key);if(allowDuplicates){if(Object.prototype.hasOwnProperty.call(parameters,key)&&Array.isArray(parameters[key]))parameters[key].push(_value);else parameters[key]=[_value];}else parameters[key]=_value}// endregion
|
|
635
|
+
}catch(err){_iterator2.e(err)}finally{_iterator2.f()}if(keyToGet){if(Object.prototype.hasOwnProperty.call(parameters,keyToGet))return parameters[keyToGet];return null}return parameters};/**
|
|
636
|
+
* Checks if given url points to another "service" than the second given url.
|
|
637
|
+
* If no second given url is provided, the current url will be assumed.
|
|
638
|
+
* @param url - URL to check against second url.
|
|
639
|
+
* @param referenceURL - URL to check against first url.
|
|
640
|
+
* @returns Returns "true" if given first url has same domain as given
|
|
641
|
+
* second (or current).
|
|
642
|
+
*/var serviceURLEquals=function serviceURLEquals(url,referenceURL){if(referenceURL===void 0){var _globalContext$locati1;referenceURL=((_globalContext$locati1=globalContext.location)===null||_globalContext$locati1===void 0?void 0:_globalContext$locati1.href)||""}var domain=getDomainName(url,"");var protocol=getProtocolName(url,"");var port=getPortNumber(url);return(domain===""||domain===getDomainName(referenceURL))&&(protocol===""||protocol===getProtocolName(referenceURL))&&(port===null||port===getPortNumber(referenceURL))};/**
|
|
643
|
+
* Normalized given website url.
|
|
644
|
+
* @param givenURL - Uniform resource locator to normalize.
|
|
645
|
+
* @returns Normalized result.
|
|
646
|
+
*/var normalizeURL=function normalizeURL(givenURL){if(typeof givenURL==="string"){var url=givenURL.replace(/^:?\/+/,"").replace(/\/+$/,"").trim();if(url.startsWith("http"))return url;return"http://".concat(url)}return""};/**
|
|
647
|
+
* Represents given website url.
|
|
648
|
+
* @param url - Uniform resource locator to represent.
|
|
649
|
+
* @returns Represented result.
|
|
650
|
+
*/var representURL=function representURL(url){if(typeof url==="string")return url.replace(/^(https?)?:?\/+/,"").replace(/\/+$/,"").trim();return""};// endregion
|
|
651
|
+
/**
|
|
652
|
+
* Converts a camel-cased string to its delimited string version.
|
|
653
|
+
* @param value - The string to format.
|
|
654
|
+
* @param delimiter - Defines delimiter string.
|
|
655
|
+
* @param abbreviations - Collection of shortcut words to represent uppercased.
|
|
656
|
+
* @returns The formatted string.
|
|
657
|
+
*/var camelCaseToDelimited=function camelCaseToDelimited(value,delimiter,abbreviations){if(delimiter===void 0){delimiter="-"}if(abbreviations===void 0){abbreviations=null}if(!abbreviations)abbreviations=ABBREVIATIONS;var escapedDelimiter=maskForRegularExpression(delimiter);if(abbreviations.length){var abbreviationPattern="";var _iterator3=_createForOfIteratorHelper(abbreviations),_step3;try{for(_iterator3.s();!(_step3=_iterator3.n()).done;){var abbreviation=_step3.value;if(abbreviationPattern)abbreviationPattern+="|";abbreviationPattern+=abbreviation.toUpperCase()}}catch(err){_iterator3.e(err)}finally{_iterator3.f()}value=value.replace(new RegExp("(".concat(abbreviationPattern,")(").concat(abbreviationPattern,")"),"g"),"$1".concat(delimiter,"$2"))}value=value.replace(new RegExp("([^".concat(escapedDelimiter,"])([A-Z][a-z]+)"),"g"),"$1".concat(delimiter,"$2"));return value.replace(new RegExp("([a-z0-9])([A-Z])","g"),"$1".concat(delimiter,"$2")).toLowerCase()};/**
|
|
658
|
+
* Converts a string to its capitalized representation.
|
|
659
|
+
* @param string - The string to format.
|
|
660
|
+
* @returns The formatted string.
|
|
661
|
+
*/var capitalize=function capitalize(string){return string.charAt(0).toUpperCase()+string.substring(1)};/**
|
|
662
|
+
* Compresses given style attribute value.
|
|
663
|
+
* @param styleValue - Style value to compress.
|
|
664
|
+
* @returns The compressed value.
|
|
665
|
+
*/var compressStyleValue=function compressStyleValue(styleValue){return styleValue.replace(/ *([:;]) */g,"$1").replace(/ +/g," ").replace(/^;+/,"").replace(/;+$/,"").trim()};/**
|
|
666
|
+
* Decodes all html symbols in text nodes in a given html string.
|
|
667
|
+
* @param htmlString - HTML string to decode.
|
|
668
|
+
* @returns Decoded html string.
|
|
669
|
+
*/var decodeHTMLEntities=function decodeHTMLEntities(htmlString){if(globalContext.document){var textareaDomNode=globalContext.document.createElement("textarea");textareaDomNode.innerHTML=htmlString;return textareaDomNode.value}return null};/**
|
|
670
|
+
* Converts a delimited string to its camel case representation.
|
|
671
|
+
* @param value - The string to format.
|
|
672
|
+
* @param delimiter - Delimiter string to use.
|
|
673
|
+
* @param abbreviations - Collection of shortcut words to represent uppercased.
|
|
674
|
+
* @param preserveWrongFormattedAbbreviations - If set to "True" wrong
|
|
675
|
+
* formatted camel case abbreviations will be ignored.
|
|
676
|
+
* @param removeMultipleDelimiter - Indicates whether a series of delimiter
|
|
677
|
+
* should be consolidated.
|
|
678
|
+
* @returns The formatted string.
|
|
679
|
+
*/var delimitedToCamelCase=function delimitedToCamelCase(value,delimiter,abbreviations,preserveWrongFormattedAbbreviations,removeMultipleDelimiter){if(delimiter===void 0){delimiter="-"}if(abbreviations===void 0){abbreviations=null}if(preserveWrongFormattedAbbreviations===void 0){preserveWrongFormattedAbbreviations=false}if(removeMultipleDelimiter===void 0){removeMultipleDelimiter=false}var escapedDelimiter=maskForRegularExpression(delimiter);if(!abbreviations)abbreviations=ABBREVIATIONS;var abbreviationPattern;if(preserveWrongFormattedAbbreviations)abbreviationPattern=ABBREVIATIONS.join("|");else{abbreviationPattern="";var _iterator4=_createForOfIteratorHelper(abbreviations),_step4;try{for(_iterator4.s();!(_step4=_iterator4.n()).done;){var abbreviation=_step4.value;if(abbreviationPattern)abbreviationPattern+="|";abbreviationPattern+="".concat(capitalize(abbreviation),"|").concat(abbreviation)}}catch(err){_iterator4.e(err)}finally{_iterator4.f()}}var stringStartsWithDelimiter=value.startsWith(delimiter);if(stringStartsWithDelimiter)value=value.substring(delimiter.length);value=value.replace(new RegExp("(".concat(escapedDelimiter,")(").concat(abbreviationPattern,")")+"(".concat(escapedDelimiter,"|$)"),"g"),function(_fullMatch,before,abbreviation,after){return before+abbreviation.toUpperCase()+after});if(removeMultipleDelimiter)escapedDelimiter="(?:".concat(escapedDelimiter,")+");value=value.replace(new RegExp("".concat(escapedDelimiter,"([a-zA-Z0-9])"),"g"),function(_fullMatch,firstLetter){return firstLetter.toUpperCase()});if(stringStartsWithDelimiter)value=delimiter+value;return value};/**
|
|
680
|
+
* Compiles a given string as an expression with given scope names.
|
|
681
|
+
* @param expression - The string to interpret.
|
|
682
|
+
* @param scope - Scope to extract names from.
|
|
683
|
+
* @param execute - Indicates whether to execute or evaluate.
|
|
684
|
+
* @param removeGlobalScope - Indicates whether to shadow global variables via
|
|
685
|
+
* "undefined".
|
|
686
|
+
* @param binding - Object to apply as "this" in evaluation scope.
|
|
687
|
+
* @returns Object of prepared scope name mappings and compiled function or
|
|
688
|
+
* error string message if given expression couldn't be compiled.
|
|
689
|
+
*/var compile=function compile(expression,scope,execute,removeGlobalScope,binding){var _Babel;if(scope===void 0){scope=[]}if(execute===void 0){execute=false}if(removeGlobalScope===void 0){removeGlobalScope=true}if(binding===void 0){binding={}}/*
|
|
690
|
+
NOTE: We do this global variable name determining as close as possible
|
|
691
|
+
to the compiling step to cover as much as possible global introduces
|
|
692
|
+
variables.
|
|
693
|
+
*/var globalNames=Object.keys(globalThis).concat("globalThis").filter(function(name){return new RegExp("^[".concat(ALLOWED_STARTING_VARIABLE_SYMBOLS,"]")+"[".concat(ALLOWED_VARIABLE_SYMBOLS,"]*$")).test(name)});var result={error:null,globalNames:globalNames,globalNamesUndefinedList:globalNames.map(function(){return undefined}),originalScopeNames:Array.isArray(scope)?scope:typeof scope==="string"?[scope]:Object.keys(scope),scopeNameMapping:{},scopeNames:[],templateFunction:function templateFunction(){return undefined}};var _iterator5=_createForOfIteratorHelper(result.originalScopeNames),_step5;try{for(_iterator5.s();!(_step5=_iterator5.n()).done;){var name=_step5.value;var newName=convertToValidVariableName(name);result.scopeNameMapping[name]=newName;result.scopeNames.push(newName)}// region try to polyfill template string literals for older engines
|
|
694
|
+
}catch(err){_iterator5.e(err)}finally{_iterator5.f()}if(POLYFILL_TEMPLATE_STRINGS.value)if((_Babel=_context_js__WEBPACK_IMPORTED_MODULE_2__/* .globalContext */ .Lz.Babel)!==null&&_Babel!==void 0&&_Babel.transform)expression=_context_js__WEBPACK_IMPORTED_MODULE_2__/* .globalContext */ .Lz.Babel.transform("(".concat(expression,")"),{plugins:["transform-template-literals"]}).code;else if(expression.startsWith("`")&&expression.endsWith("`")){var escapeMarker="####";// Convert template string into legacy string concatenations.
|
|
695
|
+
expression=expression// Mark simple escape sequences.
|
|
696
|
+
.replace(/\\\$/g,escapeMarker)// Handle avoidable template expression: Use raw code.
|
|
697
|
+
.replace(/^`\$\{([\s\S]+)}`$/,"String($1)")// Use plain string with single quotes.
|
|
698
|
+
.replace(/^`([^']+)`$/,"'$1'")// Use plain string with double quotes.
|
|
699
|
+
.replace(/^`([^"]+)`$/,"\"$1\"");// Use single quotes and hope (just a heuristic).
|
|
700
|
+
var quote=expression.charAt(0)==="`"?"'":expression.charAt(0);expression=expression// Replace a simple placeholder.
|
|
701
|
+
// NOTE: Replace complete bracket pairs.
|
|
702
|
+
.replace(/\$\{((([^{]*{[^}]*}[^}]*})|[^{}]+)+)}/g,"".concat(quote,"+($1)+").concat(quote)).replace(/^`([\s\S]+)`$/,"".concat(quote,"$1").concat(quote))// Remove remaining newlines.
|
|
703
|
+
.replace(/\n+/g,"")// Replace marked escape sequences.
|
|
704
|
+
.replace(new RegExp(escapeMarker,"g"),"\\$")}// endregion
|
|
705
|
+
var innerTemplateFunction;try{// eslint-disable-next-line @typescript-eslint/no-implied-eval
|
|
706
|
+
innerTemplateFunction=_construct(Function,_toConsumableArray(removeGlobalScope?result.globalNames:[]).concat(_toConsumableArray(result.scopeNames),["".concat(execute?"":"return ").concat(expression)]))}catch(error){result.error="Given expression \"".concat(expression,"\" could not be compiled width ")+"given scope names \"".concat(result.scopeNames.join("\", \""),"\": ")+(0,_object_js__WEBPACK_IMPORTED_MODULE_3__/* .represent */ .Do)(error)}if(innerTemplateFunction){var boundInnerTemplateFunction=innerTemplateFunction.bind(binding);result.templateFunction=removeGlobalScope?function(){for(var _len=arguments.length,parameters=new Array(_len),_key=0;_key<_len;_key++){parameters[_key]=arguments[_key]}return(/*
|
|
707
|
+
NOTE: We shadow existing global names to sandbox
|
|
708
|
+
expressions.
|
|
709
|
+
*/boundInnerTemplateFunction.apply(void 0,_toConsumableArray(result.globalNamesUndefinedList).concat(parameters)))}:boundInnerTemplateFunction}return result};/**
|
|
710
|
+
* Evaluates a given string as an expression against a given scope.
|
|
711
|
+
* @param expression - The string to interpret.
|
|
712
|
+
* @param scope - Scope to render against.
|
|
713
|
+
* @param execute - Indicates whether to execute or evaluate.
|
|
714
|
+
* @param removeGlobalScope - Indicates whether to shadow global variables via
|
|
715
|
+
* "undefined".
|
|
716
|
+
* @param binding - Object to apply as "this" in evaluation scope.
|
|
717
|
+
* @returns Object with an error message during parsing / running or result.
|
|
718
|
+
*/var evaluate=function evaluate(expression,scope,execute,removeGlobalScope,binding){if(scope===void 0){scope={}}if(execute===void 0){execute=false}if(removeGlobalScope===void 0){removeGlobalScope=true}if(binding===void 0){binding={}}// NOTE: We extract string-only types from given scope type.
|
|
719
|
+
var _compile=compile(expression,scope,execute,removeGlobalScope,binding),error=_compile.error,originalScopeNames=_compile.originalScopeNames,scopeNames=_compile.scopeNames,templateFunction=_compile.templateFunction;var result={compileError:null,runtimeError:null,error:"Not yet evaluated.",result:undefined};if(error){result.compileError=result.error=error;return result}try{result={compileError:null,runtimeError:null,error:null,result:templateFunction.apply(void 0,_toConsumableArray(originalScopeNames.map(function(name){return scope[name]})))}}catch(error){result.error=result.runtimeError="Given expression \"".concat(expression,"\" could not be evaluated ")+"with given scope names \"".concat(scopeNames.join("\", \""),"\": ")+(0,_object_js__WEBPACK_IMPORTED_MODULE_3__/* .represent */ .Do)(error)}return result};/**
|
|
720
|
+
* Evaluates a given string as an expression against a given scope. Does same
|
|
721
|
+
* as "evaluate" but throws an exception if an error occurs and returns the
|
|
722
|
+
* evaluated value instead of an object with error and result.
|
|
723
|
+
* @param expression - The string to interpret.
|
|
724
|
+
* @param scope - Scope to render against.
|
|
725
|
+
* @param execute - Indicates whether to execute or evaluate.
|
|
726
|
+
* @param removeGlobalScope - Indicates whether to shadow global variables via
|
|
727
|
+
* "undefined".
|
|
728
|
+
* @param binding - Object to apply as "this" in evaluation scope.
|
|
729
|
+
* @returns Object with an error message during parsing / running or result.
|
|
730
|
+
*/var evaluateAndThrowError=function evaluateAndThrowError(expression,scope,execute,removeGlobalScope,binding){if(scope===void 0){scope={}}if(execute===void 0){execute=false}if(removeGlobalScope===void 0){removeGlobalScope=true}if(binding===void 0){binding={}}var evaluated=evaluate(expression,scope,execute,removeGlobalScope,binding);if(evaluated.error)throw new Error(evaluated.error);return evaluated.result};/**
|
|
731
|
+
* Finds the string match of a given query in a given target text by applying a
|
|
732
|
+
* given normalization function to target and query.
|
|
733
|
+
* @param target - Target to search in.
|
|
734
|
+
* @param query - Search string to search for.
|
|
735
|
+
* @param normalizer - Function to use as normalization for queries and search
|
|
736
|
+
* targets.
|
|
737
|
+
* @param skipTagDelimitedParts - Indicates whether to, for example, ignore
|
|
738
|
+
* html tags via "['<', '>']" (the default).
|
|
739
|
+
* @returns Start and end index of matching range.
|
|
740
|
+
*/var findNormalizedMatchRange=function findNormalizedMatchRange(target,query,normalizer,skipTagDelimitedParts){if(normalizer===void 0){normalizer=function normalizer(value){return String(value).toLowerCase()}}if(skipTagDelimitedParts===void 0){skipTagDelimitedParts=["<",">"]}var normalizedQuery=normalizer(query);var normalizedTarget=normalizer(target);var stringTarget=typeof target==="string"?target:normalizedTarget;if(normalizedTarget&&normalizedQuery){var inTag=false;for(var index=0;index<stringTarget.length;index+=1){if(inTag){if(Array.isArray(skipTagDelimitedParts)&&stringTarget.charAt(index)===skipTagDelimitedParts[1])inTag=false;continue}if(Array.isArray(skipTagDelimitedParts)&&stringTarget.charAt(index)===skipTagDelimitedParts[0]){inTag=true;continue}if(normalizer(stringTarget.substring(index)).startsWith(normalizedQuery)){if(normalizedQuery.length===1)return[index,index+1];for(var subIndex=stringTarget.length;subIndex>index;subIndex-=1)if(!normalizer(stringTarget.substring(index,subIndex)).startsWith(normalizedQuery))return[index,subIndex+1]}}}return null};/**
|
|
741
|
+
* Fixes known encoding problems in given data.
|
|
742
|
+
* @param data - To process.
|
|
743
|
+
* @returns Processed data.
|
|
744
|
+
*/var fixKnownEncodingErrors=function fixKnownEncodingErrors(data){for(var _i=0,_FIX_ENCODING_ERROR_M=FIX_ENCODING_ERROR_MAPPING;_i<_FIX_ENCODING_ERROR_M.length;_i++){var _FIX_ENCODING_ERROR_M2=_slicedToArray(_FIX_ENCODING_ERROR_M[_i],2),search=_FIX_ENCODING_ERROR_M2[0],replacement=_FIX_ENCODING_ERROR_M2[1];data=data.replace(new RegExp(search,"g"),replacement)}return data};/**
|
|
745
|
+
* Performs a string formation. Replaces every placeholder "{i}" with the i'th
|
|
746
|
+
* argument.
|
|
747
|
+
* @param string - The string to format.
|
|
748
|
+
* @param additionalArguments - Additional arguments are interpreted as
|
|
749
|
+
* replacements for string formatting.
|
|
750
|
+
* @returns The formatted string.
|
|
751
|
+
*/var format=function format(string){for(var _len2=arguments.length,additionalArguments=new Array(_len2>1?_len2-1:0),_key2=1;_key2<_len2;_key2++){additionalArguments[_key2-1]=arguments[_key2]}additionalArguments.unshift(string);var index=0;for(var _i2=0,_additionalArguments=additionalArguments;_i2<_additionalArguments.length;_i2++){var _value2=_additionalArguments[_i2];string=string.replace(new RegExp("\\{".concat(String(index),"\\}"),"gm"),String(_value2));index+=1}return string};/**
|
|
752
|
+
* Calculates the edit (levenstein) distance between two given strings.
|
|
753
|
+
* @param first - First string to compare.
|
|
754
|
+
* @param second - Second string to compare.
|
|
755
|
+
* @returns The distance as number.
|
|
756
|
+
*/var getEditDistance=function getEditDistance(first,second){/*
|
|
757
|
+
Create empty edit distance matrix for all possible modifications of
|
|
758
|
+
substrings of "first" to substrings of "second".
|
|
759
|
+
*/var distanceMatrix=Array(second.length+1).fill(null).map(function(){return Array(first.length+1).fill(null)});/*
|
|
760
|
+
Fill the first row of the matrix.
|
|
761
|
+
If this is the first row, then, we're transforming an empty string to
|
|
762
|
+
"first". In this case the number of transformations equals to the size
|
|
763
|
+
of the "first" substring.
|
|
764
|
+
*/for(var index=0;index<=first.length;index++)distanceMatrix[0][index]=index;/*
|
|
765
|
+
Fill the first column of the matrix.
|
|
766
|
+
If this is the first column, then we're transforming an empty string to
|
|
767
|
+
"second".
|
|
768
|
+
In this case the number of transformations equals to the size of the
|
|
769
|
+
"second" substring.
|
|
770
|
+
*/for(var _index=0;_index<=second.length;_index++)distanceMatrix[_index][0]=_index;for(var firstIndex=1;firstIndex<=second.length;firstIndex++)for(var secondIndex=1;secondIndex<=first.length;secondIndex++){var indicator=first[secondIndex-1]===second[firstIndex-1]?0:1;distanceMatrix[firstIndex][secondIndex]=Math.min(// deletion
|
|
771
|
+
distanceMatrix[firstIndex][secondIndex-1]+1,// insertion
|
|
772
|
+
distanceMatrix[firstIndex-1][secondIndex]+1,// substitution
|
|
773
|
+
distanceMatrix[firstIndex-1][secondIndex-1]+indicator)}return distanceMatrix[second.length][first.length]};/**
|
|
774
|
+
* Validates the current string for using in a regular expression pattern.
|
|
775
|
+
* Special regular expression chars will be escaped.
|
|
776
|
+
* @param value - The string to format.
|
|
777
|
+
* @returns The formatted string.
|
|
778
|
+
*/var maskForRegularExpression=function maskForRegularExpression(value){return value.replace(/([\\|.*$^+[\]()?\-{}])/g,"\\$1")};/**
|
|
779
|
+
* Converts a string to its lower case representation.
|
|
780
|
+
* @param string - The string to format.
|
|
781
|
+
* @returns The formatted string.
|
|
782
|
+
*/var lowerCase=function lowerCase(string){return string.charAt(0).toLowerCase()+string.substring(1)};/**
|
|
783
|
+
* Wraps given mark strings in a given target with a given marker.
|
|
784
|
+
* @param target - String to search for marker.
|
|
785
|
+
* @param givenWords - String or array of strings to search in target for.
|
|
786
|
+
* @param givenOptions - Defines highlighting behavior.
|
|
787
|
+
* @param givenOptions.marker - HTML template string to mark.
|
|
788
|
+
* @param givenOptions.normalizer - Pure normalization function to use before
|
|
789
|
+
* searching for matches.
|
|
790
|
+
* @param givenOptions.skipTagDelimitedParts - Indicates whether to, for
|
|
791
|
+
* example, ignore html tags via "['<', '>']" (the default).
|
|
792
|
+
* @returns Processed result.
|
|
793
|
+
*/var mark=function mark(target,givenWords,givenOptions){if(givenOptions===void 0){givenOptions={}}if(typeof target==="string"&&givenWords!==null&&givenWords!==void 0&&givenWords.length){var _options=_objectSpread({marker:"<span class=\"tools-mark\">{1}</span>",normalizer:function normalizer(value){return String(value).toLowerCase()},skipTagDelimitedParts:["<",">"]},givenOptions);target=target.trim();var markedTarget=[];var words=[].concat(givenWords);var index=0;var _iterator6=_createForOfIteratorHelper(words),_step6;try{for(_iterator6.s();!(_step6=_iterator6.n()).done;){var _word=_step6.value;words[index]=_options.normalizer(_word).trim();index+=1}}catch(err){_iterator6.e(err)}finally{_iterator6.f()}var restTarget=target;var offset=0;/*
|
|
794
|
+
Search for matches as long there is enough target text remaining to
|
|
795
|
+
walk through.
|
|
796
|
+
*/for(var iteration=0;iteration<MAXIMAL_NUMBER_OF_ITERATIONS.value;iteration++){var nearestRange=null;var currentRange=void 0;// Find the nearest next matching word.
|
|
797
|
+
var _iterator7=_createForOfIteratorHelper(words),_step7;try{for(_iterator7.s();!(_step7=_iterator7.n()).done;){var word=_step7.value;currentRange=findNormalizedMatchRange(restTarget,word,_options.normalizer,_options.skipTagDelimitedParts);if(currentRange&&(!nearestRange||currentRange[0]<nearestRange[0]))nearestRange=currentRange}}catch(err){_iterator7.e(err)}finally{_iterator7.f()}if(nearestRange){if(nearestRange[0]>0)markedTarget.push(target.substring(offset,offset+nearestRange[0]));markedTarget.push(typeof _options.marker==="string"?format(_options.marker,target.substring(offset+nearestRange[0],offset+nearestRange[1])):_options.marker(target.substring(offset+nearestRange[0],offset+nearestRange[1]),markedTarget));offset+=nearestRange[1];restTarget=target.substring(offset)}else{if(restTarget.length)markedTarget.push(restTarget);break}}return typeof _options.marker==="string"?markedTarget.join(""):markedTarget}return target};/**
|
|
798
|
+
* Normalizes a given phone number for automatic dialing or comparison.
|
|
799
|
+
* @param value - Number to normalize.
|
|
800
|
+
* @param dialable - Indicates whether the result should be dialed or
|
|
801
|
+
* represented as lossless data.
|
|
802
|
+
* @returns Normalized number.
|
|
803
|
+
*/var normalizePhoneNumber=function normalizePhoneNumber(value,dialable){if(dialable===void 0){dialable=true}if(typeof value==="string"||typeof value==="number"){var normalizedValue=String(value).trim();// Normalize country code prefix.
|
|
804
|
+
normalizedValue=normalizedValue.replace(/^[^0-9]*\+/,"00");// Remove alternate direct dial numbers.
|
|
805
|
+
normalizedValue=normalizedValue.replace(/([0-9].*?) *(,|o[rd]?)\.? ?-?[0-9]+$/,"$1");if(dialable)return normalizedValue.replace(/[^0-9]+/g,"");var separatorPattern="(?:[ /\\-]+)";// Remove unneeded area code zero in brackets.
|
|
806
|
+
normalizedValue=normalizedValue.replace(new RegExp("^(.+?)".concat(separatorPattern,"?\\(0\\)").concat(separatorPattern,"?")+"(.+)$"),"$1-$2");// Remove unneeded area code brackets.
|
|
807
|
+
normalizedValue=normalizedValue.replace(new RegExp("^(.+?)".concat(separatorPattern,"?\\((.+)\\)")+"".concat(separatorPattern,"?(.+)$")),"$1-$2-$3");/*
|
|
808
|
+
Remove separators that don't mark semantics:
|
|
809
|
+
1: Country code
|
|
810
|
+
2: Area code
|
|
811
|
+
3: Number
|
|
812
|
+
*/var compiledPattern=new RegExp("^(00[0-9]+)".concat(separatorPattern,"([0-9]+)").concat(separatorPattern)+"(.+)$");if(compiledPattern.test(normalizedValue))// Country code and area code matched.
|
|
813
|
+
normalizedValue=normalizedValue.replace(compiledPattern,function(_match,countryCode,areaCode,number){return"".concat(countryCode,"-").concat(areaCode,"-")+sliceAllExceptNumberAndLastSeparator(number)});else{/*
|
|
814
|
+
One prefix code matched:
|
|
815
|
+
1: Prefix code
|
|
816
|
+
2: Number
|
|
817
|
+
*/compiledPattern=/^([0-9 ]+)[/-](.+)$/;var replacer=function replacer(_match,prefixCode,number){return"".concat(prefixCode.replace(/ +/,""),"-")+sliceAllExceptNumberAndLastSeparator(number)};if(compiledPattern.test(normalizedValue))// Prefer "/" or "-" over " " as area code separator.
|
|
818
|
+
normalizedValue=normalizedValue.replace(compiledPattern,replacer);else normalizedValue=normalizedValue.replace(new RegExp("^([0-9]+)".concat(separatorPattern,"(.+)$")),replacer)}return normalizedValue.replace(/[^0-9-]+/g,"").replace(/^-+$/,"")}return""};/**
|
|
819
|
+
* Normalizes a given zip code for automatic address processing.
|
|
820
|
+
* @param value - Number to normalize.
|
|
821
|
+
* @returns Normalized number.
|
|
822
|
+
*/var normalizeZipCode=function normalizeZipCode(value){if(typeof value==="string"||typeof value==="number")return String(value).trim().replace(/^([^0-9]*[a-zA-Z]-)?(.+)$/,function(match,prefix,code){if(prefix)prefix=prefix.substring(prefix.length-2).charAt(0).toUpperCase()+"-";return(prefix!==null&&prefix!==void 0?prefix:"")+(code!==null&&code!==void 0?code:"").trim().replace(/[^0-9]+/g,"")});return""};/**
|
|
823
|
+
* Converts a given serialized, base64 encoded or file path given object into a
|
|
824
|
+
* native JavaScript one if possible.
|
|
825
|
+
* @param serializedObject - Object as string.
|
|
826
|
+
* @param scope - An optional scope which will be used to evaluate given object
|
|
827
|
+
* in.
|
|
828
|
+
* @param name - The name under given scope will be available.
|
|
829
|
+
* @returns The parsed object if possible and null otherwise.
|
|
830
|
+
*/var parseEncodedObject=function parseEncodedObject(serializedObject,scope,name){var _imports$fs;if(scope===void 0){scope={}}if(name===void 0){name="scope"}if(!((_imports$fs=imports.fs)!==null&&_imports$fs!==void 0&&_imports$fs.readFileSync))throw new Error("File system api could not be loaded.");if(serializedObject.endsWith(".json")&&isFileSync(serializedObject))serializedObject=imports.fs.readFileSync(serializedObject,{encoding:DEFAULT_ENCODING});serializedObject=serializedObject.trim();if(!serializedObject.startsWith("{"))serializedObject=eval("Buffer").from(serializedObject,"base64").toString(DEFAULT_ENCODING);var result=evaluate(serializedObject,_defineProperty({},name,scope));if(_typeof(result.result)==="object")return result.result;return null};/**
|
|
831
|
+
* Represents a given phone number. NOTE: Currently only support German phone
|
|
832
|
+
* numbers.
|
|
833
|
+
* @param value - Number to format.
|
|
834
|
+
* @returns Formatted number.
|
|
835
|
+
*/var representPhoneNumber=function representPhoneNumber(value){if(["number","string"].includes(determineType(value))&&value){// Represent country code and leading area code zero.
|
|
836
|
+
var normalizedValue=// eslint-disable-next-line @typescript-eslint/no-base-to-string
|
|
837
|
+
String(value).replace(/^(00|\+)([0-9]+)-([0-9-]+)$/,"+$2 (0) $3");// Add German country code if not exists.
|
|
838
|
+
normalizedValue=normalizedValue.replace(/^0([1-9][0-9-]+)$/,"+49 (0) $1");// Separate area code from base number.
|
|
839
|
+
normalizedValue=normalizedValue.replace(/^([^-]+)-([0-9-]+)$/,"$1 / $2");// Partition base number in one triple and tuples or tuples only.
|
|
840
|
+
return normalizedValue.replace(/^(.*?)([0-9]+)(-?[0-9]*)$/,function(_match,prefix,number,suffix){return prefix+(number.length%2===0?number.replace(/([0-9]{2})/g,"$1 "):number.replace(/^([0-9]{3})([0-9]+)$/,function(_match,triple,rest){return"".concat(triple," ")+rest.replace(/([0-9]{2})/g,"$1 ").trim()})+suffix).trim()}).trim()}return""};/**
|
|
841
|
+
* Slices all none numbers but preserves last separator.
|
|
842
|
+
* @param value - String to process.
|
|
843
|
+
* @returns - Sliced given value.
|
|
844
|
+
*/var sliceAllExceptNumberAndLastSeparator=function sliceAllExceptNumberAndLastSeparator(value){/*
|
|
845
|
+
1: baseNumber
|
|
846
|
+
2: directDialingNumberSuffix
|
|
847
|
+
*/var compiledPattern=/^(.*[0-9].*)-([0-9]+)$/;if(compiledPattern.test(value))return value.replace(compiledPattern,function(_match,baseNumber,directDialingNumberSuffix){return"".concat(baseNumber.replace(/[^0-9]+/g,""),"-")+directDialingNumberSuffix});return value.replace(/[^0-9]+/g,"")};/**
|
|
848
|
+
* Converts a dom selector to a prefixed dom selector string.
|
|
849
|
+
* @param selector - A dom node selector.
|
|
850
|
+
* @param selectorPrefix - A dom node selector prefix to take into account.
|
|
851
|
+
* @returns Returns given selector prefixed.
|
|
852
|
+
*/var normalizeDomNodeSelector=function normalizeDomNodeSelector(selector,selectorPrefix){if(selectorPrefix===void 0){selectorPrefix=""}var domNodeSelectorPrefix="";if(selectorPrefix)domNodeSelectorPrefix="".concat(selectorPrefix," ");if(!(selector.startsWith(domNodeSelectorPrefix)||selector.trim().startsWith("<")))selector=domNodeSelectorPrefix+selector;return selector.trim()};/**
|
|
853
|
+
* Abbreviates a given string if it excesses a given limit.
|
|
854
|
+
* @param value - String to abbreviate.
|
|
855
|
+
* @param limit - Maximum length of processed string.
|
|
856
|
+
* @returns Abbreviated given string.
|
|
857
|
+
*/var limit=function limit(value,_limit){if(_limit===void 0){_limit=100}if(value.length<=_limit)return value;var dots="...";return value.substring(0,_limit-dots.length)+dots};
|
|
858
|
+
__webpack_async_result__();
|
|
859
|
+
} catch(e) { __webpack_async_result__(e); } });
|
|
860
|
+
|
|
861
|
+
/***/ }),
|
|
862
|
+
/* 7 */
|
|
863
|
+
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
|
864
|
+
|
|
865
|
+
var x = function(y) {
|
|
866
|
+
var x = {}; __webpack_require__.d(x, y); return x
|
|
867
|
+
}
|
|
868
|
+
var y = function(x) { return function() { return x; }; }
|
|
869
|
+
module.exports = x({ });
|
|
870
|
+
|
|
871
|
+
/***/ }),
|
|
872
|
+
/* 8 */
|
|
873
|
+
/***/ (function(__webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
874
|
+
|
|
875
|
+
__webpack_require__.a(__webpack_module__, async function (__webpack_handle_async_dependencies__, __webpack_async_result__) { try {
|
|
876
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
877
|
+
/* harmony export */ W2: function() { return /* binding */ isNotANumber; }
|
|
878
|
+
/* harmony export */ });
|
|
879
|
+
/* unused harmony exports getUTCTimestamp, round, ceil, floor */
|
|
880
|
+
/* harmony import */ var core_js_modules_es_array_includes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0);
|
|
881
|
+
/* harmony import */ var _object_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2);
|
|
882
|
+
var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_object_js__WEBPACK_IMPORTED_MODULE_1__]);
|
|
883
|
+
var __webpack_async_dependencies_result__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
|
|
884
|
+
_object_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_async_dependencies_result__[0];
|
|
885
|
+
// #!/usr/bin/env babel-node
|
|
886
|
+
// -*- coding: utf-8 -*-
|
|
887
|
+
/** @module number *//* !
|
|
888
|
+
region header
|
|
889
|
+
[Project page](https://torben.website/clientnode)
|
|
890
|
+
|
|
891
|
+
Copyright Torben Sickert (info["~at~"]torben.website) 16.12.2012
|
|
892
|
+
|
|
893
|
+
License
|
|
894
|
+
-------
|
|
895
|
+
|
|
896
|
+
This library written by Torben Sickert stands under a creative commons
|
|
897
|
+
naming 3.0 unported license.
|
|
898
|
+
See https://creativecommons.org/licenses/by/3.0/deed.de
|
|
899
|
+
endregion
|
|
900
|
+
*//**
|
|
901
|
+
* Determines corresponding utc timestamp for given date object.
|
|
902
|
+
* @param value - Date to convert.
|
|
903
|
+
* @param inMilliseconds - Indicates whether given number should be in
|
|
904
|
+
* seconds (default) or milliseconds.
|
|
905
|
+
* @returns Determined numerous value.
|
|
906
|
+
*/var getUTCTimestamp=function getUTCTimestamp(value,inMilliseconds){if(inMilliseconds===void 0){inMilliseconds=false}var date=[null,undefined].includes(value)?new Date:new Date(value);return Date.UTC(date.getUTCFullYear(),date.getUTCMonth(),date.getUTCDate(),date.getUTCHours(),date.getUTCMinutes(),date.getUTCSeconds(),date.getUTCMilliseconds())/(inMilliseconds?1:1000)};/**
|
|
907
|
+
* Checks if given object is java scripts native "Number.NaN" object.
|
|
908
|
+
* @param value - Value to check.
|
|
909
|
+
* @returns Returns whether given value is not a number or not.
|
|
910
|
+
*/var isNotANumber=function isNotANumber(value){return (0,_object_js__WEBPACK_IMPORTED_MODULE_1__/* .determineType */ .Sj)(value)==="number"&&isNaN(value)};/**
|
|
911
|
+
* Rounds a given number accurate to given number of digits.
|
|
912
|
+
* @param number - The number to round.
|
|
913
|
+
* @param digits - The number of digits after comma.
|
|
914
|
+
* @returns Returns the rounded number.
|
|
915
|
+
*/var round=function round(number,digits){if(digits===void 0){digits=0}return Math.round(number*Math.pow(10,digits))/Math.pow(10,digits)};/**
|
|
916
|
+
* Rounds a given number up accurate to given number of digits.
|
|
917
|
+
* @param number - The number to round.
|
|
918
|
+
* @param digits - The number of digits after comma.
|
|
919
|
+
* @returns Returns the rounded number.
|
|
920
|
+
*/var ceil=function ceil(number,digits){if(digits===void 0){digits=0}return Math.ceil(number*Math.pow(10,digits))/Math.pow(10,digits)};/**
|
|
921
|
+
* Rounds a given number down accurate to given number of digits.
|
|
922
|
+
* @param number - The number to round.
|
|
923
|
+
* @param digits - The number of digits after comma.
|
|
924
|
+
* @returns Returns the rounded number.
|
|
925
|
+
*/var floor=function floor(number,digits){if(digits===void 0){digits=0}return Math.floor(number*Math.pow(10,digits))/Math.pow(10,digits)};
|
|
926
|
+
__webpack_async_result__();
|
|
927
|
+
} catch(e) { __webpack_async_result__(e); } });
|
|
928
|
+
|
|
929
|
+
/***/ })
|
|
930
|
+
/******/ ]);
|
|
931
|
+
/************************************************************************/
|
|
932
|
+
/******/ // The module cache
|
|
933
|
+
/******/ var __webpack_module_cache__ = {};
|
|
934
|
+
/******/
|
|
935
|
+
/******/ // The require function
|
|
936
|
+
/******/ function __webpack_require__(moduleId) {
|
|
937
|
+
/******/ // Check if module is in cache
|
|
938
|
+
/******/ var cachedModule = __webpack_module_cache__[moduleId];
|
|
939
|
+
/******/ if (cachedModule !== undefined) {
|
|
940
|
+
/******/ return cachedModule.exports;
|
|
941
|
+
/******/ }
|
|
942
|
+
/******/ // Create a new module (and put it into the cache)
|
|
943
|
+
/******/ var module = __webpack_module_cache__[moduleId] = {
|
|
944
|
+
/******/ // no module.id needed
|
|
945
|
+
/******/ // no module.loaded needed
|
|
946
|
+
/******/ exports: {}
|
|
947
|
+
/******/ };
|
|
948
|
+
/******/
|
|
949
|
+
/******/ // Execute the module function
|
|
950
|
+
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
|
951
|
+
/******/
|
|
952
|
+
/******/ // Return the exports of the module
|
|
953
|
+
/******/ return module.exports;
|
|
954
|
+
/******/ }
|
|
955
|
+
/******/
|
|
956
|
+
/************************************************************************/
|
|
957
|
+
/******/ /* webpack/runtime/async module */
|
|
958
|
+
/******/ !function() {
|
|
959
|
+
/******/ var hasSymbol = typeof Symbol === "function";
|
|
960
|
+
/******/ var webpackQueues = hasSymbol ? Symbol("webpack queues") : "__webpack_queues__";
|
|
961
|
+
/******/ var webpackExports = hasSymbol ? Symbol("webpack exports") : "__webpack_exports__";
|
|
962
|
+
/******/ var webpackError = hasSymbol ? Symbol("webpack error") : "__webpack_error__";
|
|
963
|
+
/******/
|
|
964
|
+
/******/ var resolveQueue = function(queue) {
|
|
965
|
+
/******/ if(queue && queue.d < 1) {
|
|
966
|
+
/******/ queue.d = 1;
|
|
967
|
+
/******/ queue.forEach(function(fn) { fn.r--; });
|
|
968
|
+
/******/ queue.forEach(function(fn) { fn.r-- ? fn.r++ : fn(); });
|
|
969
|
+
/******/ }
|
|
970
|
+
/******/ }
|
|
971
|
+
/******/ var wrapDeps = function(deps) { return deps.map(function(dep) {
|
|
972
|
+
/******/ if(dep !== null && typeof dep === "object") {
|
|
973
|
+
/******/
|
|
974
|
+
/******/ if(dep[webpackQueues]) return dep;
|
|
975
|
+
/******/ if(dep.then) {
|
|
976
|
+
/******/ var queue = [];
|
|
977
|
+
/******/ queue.d = 0;
|
|
978
|
+
/******/ dep.then(function(r) {
|
|
979
|
+
/******/ obj[webpackExports] = r;
|
|
980
|
+
/******/ resolveQueue(queue);
|
|
981
|
+
/******/ }, function(e) {
|
|
982
|
+
/******/ obj[webpackError] = e;
|
|
983
|
+
/******/ resolveQueue(queue);
|
|
984
|
+
/******/ });
|
|
985
|
+
/******/ var obj = {};
|
|
986
|
+
/******/
|
|
987
|
+
/******/ obj[webpackQueues] = function(fn) { fn(queue); };
|
|
988
|
+
/******/ return obj;
|
|
989
|
+
/******/ }
|
|
990
|
+
/******/ }
|
|
991
|
+
/******/ var ret = {};
|
|
992
|
+
/******/ ret[webpackQueues] = function() {};
|
|
993
|
+
/******/ ret[webpackExports] = dep;
|
|
994
|
+
/******/ return ret;
|
|
995
|
+
/******/ }); };
|
|
996
|
+
/******/ __webpack_require__.a = function(module, body, hasAwait) {
|
|
997
|
+
/******/ var queue;
|
|
998
|
+
/******/ hasAwait && ((queue = []).d = -1);
|
|
999
|
+
/******/ var depQueues = new Set();
|
|
1000
|
+
/******/ var exports = module.exports;
|
|
1001
|
+
/******/ var currentDeps;
|
|
1002
|
+
/******/ var outerResolve;
|
|
1003
|
+
/******/ var reject;
|
|
1004
|
+
/******/ var promise = new Promise(function(resolve, rej) {
|
|
1005
|
+
/******/ reject = rej;
|
|
1006
|
+
/******/ outerResolve = resolve;
|
|
1007
|
+
/******/ });
|
|
1008
|
+
/******/ promise[webpackExports] = exports;
|
|
1009
|
+
/******/ promise[webpackQueues] = function(fn) { queue && fn(queue), depQueues.forEach(fn), promise["catch"](function() {}); };
|
|
1010
|
+
/******/ module.exports = promise;
|
|
1011
|
+
/******/ var handle = function(deps) {
|
|
1012
|
+
/******/ currentDeps = wrapDeps(deps);
|
|
1013
|
+
/******/ var fn;
|
|
1014
|
+
/******/ var getResult = function() { return currentDeps.map(function(d) {
|
|
1015
|
+
/******/
|
|
1016
|
+
/******/ if(d[webpackError]) throw d[webpackError];
|
|
1017
|
+
/******/ return d[webpackExports];
|
|
1018
|
+
/******/ }); }
|
|
1019
|
+
/******/ var promise = new Promise(function(resolve) {
|
|
1020
|
+
/******/ fn = function() { resolve(getResult); };
|
|
1021
|
+
/******/ fn.r = 0;
|
|
1022
|
+
/******/ var fnQueue = function(q) { q !== queue && !depQueues.has(q) && (depQueues.add(q), q && !q.d && (fn.r++, q.push(fn))); };
|
|
1023
|
+
/******/ currentDeps.map(function(dep) { dep[webpackQueues](fnQueue); });
|
|
1024
|
+
/******/ });
|
|
1025
|
+
/******/ return fn.r ? promise : getResult();
|
|
1026
|
+
/******/ }
|
|
1027
|
+
/******/ var done = function(err) { (err ? reject(promise[webpackError] = err) : outerResolve(exports)), resolveQueue(queue); }
|
|
1028
|
+
/******/ body(handle, done);
|
|
1029
|
+
/******/ queue && queue.d < 0 && (queue.d = 0);
|
|
1030
|
+
/******/ };
|
|
1031
|
+
/******/ }();
|
|
1032
|
+
/******/
|
|
1033
|
+
/******/ /* webpack/runtime/define property getters */
|
|
1034
|
+
/******/ !function() {
|
|
1035
|
+
/******/ // define getter/value functions for harmony exports
|
|
1036
|
+
/******/ __webpack_require__.d = function(exports, definition) {
|
|
1037
|
+
/******/ if(Array.isArray(definition)) {
|
|
1038
|
+
/******/ var i = 0;
|
|
1039
|
+
/******/ while(i < definition.length) {
|
|
1040
|
+
/******/ var key = definition[i++];
|
|
1041
|
+
/******/ var binding = definition[i++];
|
|
1042
|
+
/******/ if(!__webpack_require__.o(exports, key)) {
|
|
1043
|
+
/******/ if(binding === 0) {
|
|
1044
|
+
/******/ Object.defineProperty(exports, key, { enumerable: true, value: definition[i++] });
|
|
1045
|
+
/******/ } else {
|
|
1046
|
+
/******/ Object.defineProperty(exports, key, { enumerable: true, get: binding });
|
|
1047
|
+
/******/ }
|
|
1048
|
+
/******/ } else if(binding === 0) { i++; }
|
|
1049
|
+
/******/ }
|
|
1050
|
+
/******/ } else {
|
|
1051
|
+
/******/ for(var key in definition) {
|
|
1052
|
+
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
|
|
1053
|
+
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
|
|
1054
|
+
/******/ }
|
|
1055
|
+
/******/ }
|
|
1056
|
+
/******/ }
|
|
1057
|
+
/******/ };
|
|
1058
|
+
/******/ }();
|
|
1059
|
+
/******/
|
|
1060
|
+
/******/ /* webpack/runtime/global */
|
|
1061
|
+
/******/ !function() {
|
|
1062
|
+
/******/ __webpack_require__.g = (function() {
|
|
1063
|
+
/******/ if (typeof globalThis === 'object') return globalThis;
|
|
1064
|
+
/******/ try {
|
|
1065
|
+
/******/ return this || new Function('return this')();
|
|
1066
|
+
/******/ } catch (e) {
|
|
1067
|
+
/******/ if (typeof window === 'object') return window;
|
|
1068
|
+
/******/ }
|
|
1069
|
+
/******/ })();
|
|
1070
|
+
/******/ }();
|
|
1071
|
+
/******/
|
|
1072
|
+
/******/ /* webpack/runtime/hasOwnProperty shorthand */
|
|
1073
|
+
/******/ !function() {
|
|
1074
|
+
/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }
|
|
1075
|
+
/******/ }();
|
|
1076
|
+
/******/
|
|
1077
|
+
/************************************************************************/
|
|
1078
|
+
/******/
|
|
1079
|
+
/******/ // startup
|
|
1080
|
+
/******/ // Load entry module and return exports
|
|
1081
|
+
/******/ // This entry module is referenced by other modules so it can't be inlined
|
|
1082
|
+
/******/ var __webpack_exports__ = __webpack_require__(2);
|
|
1083
|
+
/******/ __webpack_exports__ = await __webpack_exports__;
|
|
1084
|
+
/******/ var __webpack_exports__addDynamicGetterAndSetter = __webpack_exports__.QB;
|
|
1085
|
+
/******/ var __webpack_exports__convertCircularObjectToJSON = __webpack_exports__.zP;
|
|
1086
|
+
/******/ var __webpack_exports__convertMapToPlainObject = __webpack_exports__.oW;
|
|
1087
|
+
/******/ var __webpack_exports__convertPlainObjectToMap = __webpack_exports__.eQ;
|
|
1088
|
+
/******/ var __webpack_exports__convertSubstringInPlainObject = __webpack_exports__.dr;
|
|
1089
|
+
/******/ var __webpack_exports__copy = __webpack_exports__.C;
|
|
1090
|
+
/******/ var __webpack_exports__determineType = __webpack_exports__.Sj;
|
|
1091
|
+
/******/ var __webpack_exports__equals = __webpack_exports__.aI;
|
|
1092
|
+
/******/ var __webpack_exports__evaluateAsyncDynamicData = __webpack_exports__.Pi;
|
|
1093
|
+
/******/ var __webpack_exports__evaluateDynamicData = __webpack_exports__.J3;
|
|
1094
|
+
/******/ var __webpack_exports__extend = __webpack_exports__.X$;
|
|
1095
|
+
/******/ var __webpack_exports__getProxyHandler = __webpack_exports__.bo;
|
|
1096
|
+
/******/ var __webpack_exports__mask = __webpack_exports__.dK;
|
|
1097
|
+
/******/ var __webpack_exports__modifyObject = __webpack_exports__._2;
|
|
1098
|
+
/******/ var __webpack_exports__removeKeyPrefixes = __webpack_exports__.uu;
|
|
1099
|
+
/******/ var __webpack_exports__removeKeysInEvaluation = __webpack_exports__.iE;
|
|
1100
|
+
/******/ var __webpack_exports__represent = __webpack_exports__.Do;
|
|
1101
|
+
/******/ var __webpack_exports__sort = __webpack_exports__.di;
|
|
1102
|
+
/******/ var __webpack_exports__unwrapProxy = __webpack_exports__.q1;
|
|
1103
|
+
/******/ export { __webpack_exports__addDynamicGetterAndSetter as addDynamicGetterAndSetter, __webpack_exports__convertCircularObjectToJSON as convertCircularObjectToJSON, __webpack_exports__convertMapToPlainObject as convertMapToPlainObject, __webpack_exports__convertPlainObjectToMap as convertPlainObjectToMap, __webpack_exports__convertSubstringInPlainObject as convertSubstringInPlainObject, __webpack_exports__copy as copy, __webpack_exports__determineType as determineType, __webpack_exports__equals as equals, __webpack_exports__evaluateAsyncDynamicData as evaluateAsyncDynamicData, __webpack_exports__evaluateDynamicData as evaluateDynamicData, __webpack_exports__extend as extend, __webpack_exports__getProxyHandler as getProxyHandler, __webpack_exports__mask as mask, __webpack_exports__modifyObject as modifyObject, __webpack_exports__removeKeyPrefixes as removeKeyPrefixes, __webpack_exports__removeKeysInEvaluation as removeKeysInEvaluation, __webpack_exports__represent as represent, __webpack_exports__sort as sort, __webpack_exports__unwrapProxy as unwrapProxy };
|
|
1104
|
+
/******/
|