diff --git a/dist/es5/formatter.js b/dist/es5/formatter.js index 7e5b7ad..0eff6bf 100644 --- a/dist/es5/formatter.js +++ b/dist/es5/formatter.js @@ -116,6 +116,24 @@ var _formatLineNumber = function _formatLineNumber(logEvent) { ); }; +/** + * @function + * @memberOf formatter + * + * @param {LOG_EVENT} logEvent + * + * @return {string} + */ +var _formatColumn = function _formatColumn(logEvent) { + + if (!logEvent.column) { + _getFileDetails(logEvent); + } + + return (/*istanbul ignore next*/'' + logEvent.column + ); +}; + /** * @function * @memberOf formatter @@ -238,6 +256,7 @@ var _formatters = { 'F|file': _formatFile, 'K|map|MAP': _formatMapMessage, 'L|line': _formatLineNumber, + 'column': _formatColumn, 'm|msg|message': _formatLogMessage, 'M|method': _formatMethodName, 'n': _formatLineSeparator, @@ -454,7 +473,10 @@ var _getFileDetails = function _getFileDetails(logEvent) { if (typeof define !== 'undefined') { var path = require('path'); var appDir = path.dirname(require.main.filename); - logEvent.filename = fileParts.join(':').replace(appDir, '').replace(/(\\|\/)/, ''); + if (!fileParts[0].startsWith(appDir)) { + appDir = ''; + } + logEvent.filename = fileParts.join(':').replace(appDir, '').replace(/^(\\|\/)/, ''); } else { logEvent.filename = fileParts.join(':'); } @@ -464,6 +486,7 @@ var _getFileDetails = function _getFileDetails(logEvent) { logEvent.filename = 'anonymous'; logEvent.lineNumber = '?'; } + logEvent.file = logEvent.filename; }; /** @@ -490,4 +513,4 @@ function preCompile(layout) { function format(layout, logEvent) { return _formatLogEvent(_getCompiledLayout(layout), logEvent); } -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZvcm1hdHRlci5qcyJdLCJuYW1lcyI6WyJwcmVDb21waWxlIiwiZm9ybWF0IiwidXRpbGl0eSIsIl9DT01NQU5EX1JFR0VYIiwiX2NvbXBpbGVkTGF5b3V0cyIsIl9mb3JtYXRMb2dnZXIiLCJsb2dFdmVudCIsImxvZ2dlciIsIl9mb3JtYXREYXRlIiwicGFyYW1zIiwiZGF0ZSIsIl9mb3JtYXRFeGNlcHRpb24iLCJtZXNzYWdlIiwiZXJyb3IiLCJzdGFjayIsInVuZGVmaW5lZCIsInN0YWNrcyIsInNwbGl0IiwiZm9yRWFjaCIsIm5hbWUiLCJfZm9ybWF0RmlsZSIsImZpbGUiLCJfZ2V0RmlsZURldGFpbHMiLCJfZm9ybWF0TGluZU51bWJlciIsImxpbmVOdW1iZXIiLCJfZm9ybWF0TWFwTWVzc2FnZSIsInByb3BlcnRpZXMiLCJrZXkiLCJwdXNoIiwiam9pbiIsIl9mb3JtYXRMb2dNZXNzYWdlIiwiX2Zvcm1hdE1ldGhvZE5hbWUiLCJnZXRGdW5jdGlvbk5hbWUiLCJtZXRob2QiLCJfZm9ybWF0TGluZVNlcGFyYXRvciIsIl9mb3JtYXRMZXZlbCIsImxldmVsIiwiRkFUQUwiLCJFUlJPUiIsIldBUk4iLCJJTkZPIiwiREVCVUciLCJUUkFDRSIsIl9mb3JtYXRSZWxhdGl2ZSIsInJlbGF0aXZlIiwiX2Zvcm1hdFNlcXVlbmNlTnVtYmVyIiwic2VxdWVuY2UiLCJfZm9ybWF0dGVycyIsIl9nZXRDb21waWxlZExheW91dCIsImxheW91dCIsIl9jb21waWxlTGF5b3V0IiwiaW5kZXgiLCJpbmRleE9mIiwiY3VycmVudEZvcm1hdFN0cmluZyIsImZvcm1hdEFycmF5Iiwic3Vic3RyaW5nIiwic3RhcnRJbmRleCIsImVuZEluZGV4IiwiX2dldEZvcm1hdHRlck9iamVjdCIsImZvcm1hdFN0cmluZyIsInJlc3VsdCIsImV4ZWMiLCJsZW5ndGgiLCJmb3JtYXR0ZXIiLCJfZ2V0Rm9ybWF0dGVyRnVuY3Rpb24iLCJfZ2V0TGF5b3V0VGFnUGFyYW1zIiwiYWZ0ZXIiLCJsYXN0SW5kZXhPZiIsImNvbW1hbmQiLCJyZWdleCIsImhhc093blByb3BlcnR5IiwiUmVnRXhwIiwibWF0Y2giLCJpIiwiX2Zvcm1hdExvZ0V2ZW50IiwicmVzcG9uc2UiLCJjb3VudCIsIk9iamVjdCIsInRyaW0iLCJsb2dFcnJvclN0YWNrIiwicGFydHMiLCJyZXBsYWNlIiwibG9jYXRpb24iLCJob3N0IiwiZmlsZVBhcnRzIiwiY29sdW1uIiwicG9wIiwiZGVmaW5lIiwicGF0aCIsInJlcXVpcmUiLCJhcHBEaXIiLCJkaXJuYW1lIiwibWFpbiIsImZpbGVuYW1lIl0sIm1hcHBpbmdzIjoiOzs7UUFpZWdCQSxVLEdBQUFBLFU7Z0NBYUFDLE0sR0FBQUEsTTs7QUF2ZWhCOztBQUNBOzs0QkFBWUMsTzs7QUFDWjs7OztBQUVBO0FBQ0EsSUFBTUMsaUJBQWlCLHNCQUF2Qjs7QUFFQTtBQWRBOzs7Ozs7O0FBZUEsSUFBSUMsbUJBQW1CLEVBQXZCOztBQUVBOzs7Ozs7OztBQVFBLElBQUlDLGdCQUFnQixTQUFoQkEsYUFBZ0IsQ0FBVUMsUUFBVixFQUFvQjtBQUN2QyxTQUFPQSxTQUFTQyxNQUFoQjtBQUNBLENBRkQ7O0FBSUE7Ozs7Ozs7OztBQVNBLElBQUlDLGNBQWMsU0FBZEEsV0FBYyxDQUFVRixRQUFWLEVBQW9CRyxNQUFwQixFQUE0QjtBQUM3QyxTQUFPLHdEQUFXSCxTQUFTSSxJQUFwQixFQUEwQkQsT0FBTyxDQUFQLENBQTFCO0FBQVA7QUFDQSxDQUZEOztBQUlBOzs7Ozs7OztBQVFBLElBQUlFLG1CQUFtQixTQUFuQkEsZ0JBQW1CLENBQVVMLFFBQVYsRUFBb0I7O0FBRXZDLE1BQUlNLFVBQVUsRUFBZDs7QUFFQSxNQUFJTixTQUFTTyxLQUFULElBQWtCLElBQXRCLEVBQTRCOztBQUU5QixRQUFJUCxTQUFTTyxLQUFULENBQWVDLEtBQWYsSUFBd0JDLFNBQTVCLEVBQXVDO0FBQ3RDLFVBQUlDLFNBQVNWLFNBQVNPLEtBQVQsQ0FBZUMsS0FBZixDQUFxQkcsS0FBckIsQ0FBMkIsS0FBM0Is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QVA7O0FBRUEsUUFBSU0sWUFBWS9ELEtBQUtKLEtBQUwsQ0FBVyxLQUFYLENBQWhCOztBQUVBWCxhQUFTK0UsTUFBVCxHQUFrQkQsVUFBVUUsR0FBVixFQUFsQjtBQUNBaEYsYUFBU2tCLFVBQVQsR0FBc0I0RCxVQUFVRSxHQUFWLEVBQXRCOztBQUVBLFFBQUksT0FBT0MsTUFBUCxLQUFrQixXQUF0QixFQUFtQztBQUNsQyxVQUFJQyxPQUFPQyxRQUFRLE1BQVIsQ0FBWDtBQUNBLFVBQUlDLFNBQVNGLEtBQUtHLE9BQUwsQ0FBYUYsUUFBUUcsSUFBUixDQUFhQyxRQUExQixDQUFiO0FBQ0F2RixlQUFTdUYsUUFBVCxHQUFvQlQsVUFBVXZELElBQVYsQ0FBZSxHQUFmLEVBQW9Cb0QsT0FBcEIsQ0FBNEJTLE1BQTVCLEVBQW9DLEVBQXBDLEVBQXdDVCxPQUF4QyxDQUFnRCxTQUFoRCxFQUEyRCxFQUEzRCxDQUFwQjtBQUNBLEtBSkQsTUFJTztBQUNOM0UsZUFBU3VGLFFBQVQsR0FBb0JULFVBQVV2RCxJQUFWLENBQWUsR0FBZixDQUFwQjtBQUNBO0FBRUQsR0FyQkQsTUFxQk87O0FBRU52QixhQUFTK0UsTUFBVCxHQUFrQixHQUFsQjtBQUNBL0UsYUFBU3VGLFFBQVQsR0FBb0IsV0FBcEI7QUFDQXZGLGFBQVNrQixVQUFULEdBQXNCLEdBQXRCO0FBRUE7QUFFRCxDQS9CRDs7QUFpQ0E7Ozs7Ozs7O0FBUU8sU0FBU3hCLFVBQVQsQ0FBb0JpRCxNQUFwQixFQUE0QjtBQUNsQ0QscUJBQW1CQyxNQUFuQjtBQUNBOztBQUVEOzs7Ozs7Ozs7QUFTTyxTQUFTaEQsTUFBVCxDQUFnQmdELE1BQWhCLEVBQXdCM0MsUUFBeEIsRUFBa0M7QUFDeEMsU0FBT29FLGdCQUFnQjFCLG1CQUFtQkMsTUFBbkIsQ0FBaEIsRUFBNEMzQyxRQUE1QyxDQUFQO0FBQ0EiLCJmaWxlIjoiZm9ybWF0dGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBsb2c0anMgPGh0dHBzOi8vZ2l0aHViLmNvbS9hbmlnZW5lcm8vbG9nNGpzPlxuICpcbiAqIENvcHlyaWdodCAyMDE2LXByZXNlbnQgUm9iaW4gU2NodWx0eiA8aHR0cDovL2FuaWdlbmVyby5jb20+XG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge2RhdGVGb3JtYXR9IGZyb20gJy4vZGF0ZUZvcm1hdHRlcic7XG5pbXBvcnQgKiBhcyB1dGlsaXR5IGZyb20gJy4vdXRpbGl0eSc7XG5pbXBvcnQge0xvZ0xldmVsfSBmcm9tICcuL2NvbnN0L2xvZ0xldmVsJztcblxuLyoqIEBjb25zdCAqL1xuY29uc3QgX0NPTU1BTkRfUkVHRVggPSAvJShbYS16LEEtWl0rKSg/PVxce3wpLztcblxuLyoqIEB0eXBlIHtPYmplY3R9ICovXG5sZXQgX2NvbXBpbGVkTGF5b3V0cyA9IHt9O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7TE9HX0VWRU5UfSBsb2dFdmVudFxuICpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xubGV0IF9mb3JtYXRMb2dnZXIgPSBmdW5jdGlvbiAobG9nRXZlbnQpIHtcblx0cmV0dXJuIGxvZ0V2ZW50LmxvZ2dlcjtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtMT0dfRVZFTlR9IGxvZ0V2ZW50XG4gKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBwYXJhbXNcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmxldCBfZm9ybWF0RGF0ZSA9IGZ1bmN0aW9uIChsb2dFdmVudCwgcGFyYW1zKSB7XG5cdHJldHVybiBkYXRlRm9ybWF0KGxvZ0V2ZW50LmRhdGUsIHBhcmFtc1swXSk7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7TE9HX0VWRU5UfSBsb2dFdmVudFxuICpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xubGV0IF9mb3JtYXRFeGNlcHRpb24gPSBmdW5jdGlvbiAobG9nRXZlbnQpIHtcblxuICAgIGxldCBtZXNzYWdlID0gJyc7XG5cbiAgICBpZiAobG9nRXZlbnQuZXJyb3IgIT0gbnVsbCkge1xuXG5cdFx0aWYgKGxvZ0V2ZW50LmVycm9yLnN0YWNrICE9IHVuZGVmaW5lZCkge1xuXHRcdFx0bGV0IHN0YWNrcyA9IGxvZ0V2ZW50LmVycm9yLnN0YWNrLnNwbGl0KC9cXG4vZyk7XG4gICAgICAgICAgICBzdGFja3MuZm9yRWFjaChmdW5jdGlvbiAoc3RhY2spIHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlICs9IGBcXHQke3N0YWNrfVxcbmA7XG4gICAgICAgICAgICB9KTtcblx0XHR9IGVsc2UgaWYgKGxvZ0V2ZW50LmVycm9yLm1lc3NhZ2UgIT0gbnVsbCAmJiBsb2dFdmVudC5lcnJvci5tZXNzYWdlICE9ICcnKSB7XG5cdFx0XHRtZXNzYWdlICs9IGBcXHQke2xvZ0V2ZW50LmVycm9yLm5hbWV9OiAke2xvZ0V2ZW50LmVycm9yLm1lc3NhZ2V9XFxuYDtcblx0XHR9XG5cblx0fVxuXG5cdHJldHVybiBtZXNzYWdlO1xuXG59O1xuXG4vKipcbiAqIEZvcm1hdHMgdGhlIGZpbGUgKGUuZy4gdGVzdC5qcykgdG8gdGhlIGZpbGVcbiAqXG4gKiBAcHJpdmF0ZVxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtMT0dfRVZFTlR9IGxvZ0V2ZW50XG4gKi9cbmxldCBfZm9ybWF0RmlsZSA9IGZ1bmN0aW9uIChsb2dFdmVudCkge1xuXG4gICAgaWYgKCFsb2dFdmVudC5maWxlKSB7XG5cdFx0X2dldEZpbGVEZXRhaWxzKGxvZ0V2ZW50KTtcblx0fVxuXG5cdHJldHVybiBsb2dFdmVudC5maWxlO1xuXG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7TE9HX0VWRU5UfSBsb2dFdmVudFxuICpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xubGV0IF9mb3JtYXRMaW5lTnVtYmVyID0gZnVuY3Rpb24gKGxvZ0V2ZW50KSB7XG5cbiAgICBpZiAoIWxvZ0V2ZW50LmxpbmVOdW1iZXIpIHtcblx0XHRfZ2V0RmlsZURldGFpbHMobG9nRXZlbnQpO1xuXHR9XG5cblx0cmV0dXJuIGAke2xvZ0V2ZW50LmxpbmVOdW1iZXJ9YDtcblxufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqXG4gKiBAcGFyYW0ge0xPR19FVkVOVH0gbG9nRXZlbnRcbiAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IHBhcmFtc1xuICpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xubGV0IF9mb3JtYXRNYXBNZXNzYWdlID0gZnVuY3Rpb24gKGxvZ0V2ZW50LCBwYXJhbXMpIHtcblx0bGV0IG1lc3NhZ2UgPSBudWxsO1xuXHRpZiAobG9nRXZlbnQucHJvcGVydGllcykge1xuXG5cdFx0bWVzc2FnZSA9IFtdO1xuXHRcdGZvciAobGV0IGtleSBpbiBsb2dFdmVudC5wcm9wZXJ0aWVzKSB7XG5cdFx0XHRpZiAocGFyYW1zWzBdKSB7XG5cdFx0XHRcdGlmIChwYXJhbXNbMF0gPT0ga2V5KSB7XG5cdFx0XHRcdFx0bWVzc2FnZS5wdXNoKGxvZ0V2ZW50LnByb3BlcnRpZXNba2V5XSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1lc3NhZ2UucHVzaCgneycgKyBrZXkgKyAnLCcgKyBsb2dFdmVudC5wcm9wZXJ0aWVzW2tleV0gKyAnfScpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiAneycgKyBtZXNzYWdlLmpvaW4oJywnKSArICd9JztcblxuXHR9XG5cdHJldHVybiBtZXNzYWdlO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqXG4gKiBAcGFyYW0ge0xPR19FVkVOVH0gbG9nRXZlbnRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmxldCBfZm9ybWF0TG9nTWVzc2FnZSA9IGZ1bmN0aW9uIChsb2dFdmVudCkge1xuXHRyZXR1cm4gbG9nRXZlbnQubWVzc2FnZTtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtMT0dfRVZFTlR9IGxvZ0V2ZW50XG4gKlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5sZXQgX2Zvcm1hdE1ldGhvZE5hbWUgPSBmdW5jdGlvbiAobG9nRXZlbnQpIHtcblx0cmV0dXJuIHV0aWxpdHkuZ2V0RnVuY3Rpb25OYW1lKGxvZ0V2ZW50Lm1ldGhvZCk7XG59O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqL1xubGV0IF9mb3JtYXRMaW5lU2VwYXJhdG9yID0gZnVuY3Rpb24gKCkge1xuXHRyZXR1cm4gJ1xcbic7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7TE9HX0VWRU5UfSBsb2dFdmVudFxuICpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xubGV0IF9mb3JtYXRMZXZlbCA9IGZ1bmN0aW9uIChsb2dFdmVudCkge1xuXG4gICAgc3dpdGNoIChsb2dFdmVudC5sZXZlbCkge1xuXG4gICAgICAgIGNhc2UgTG9nTGV2ZWwuRkFUQUw6XG4gICAgICAgICAgICByZXR1cm4gJ0ZBVEFMJztcbiAgICAgICAgY2FzZSBMb2dMZXZlbC5FUlJPUjpcbiAgICAgICAgICAgIHJldHVybiAnRVJST1InO1xuICAgICAgICBjYXNlIExvZ0xldmVsLldBUk46XG4gICAgICAgICAgICByZXR1cm4gJ1dBUk4nO1xuICAgICAgICBjYXNlIExvZ0xldmVsLklORk86XG4gICAgICAgICAgICByZXR1cm4gJ0lORk8nO1xuICAgICAgICBjYXNlIExvZ0xldmVsLkRFQlVHOlxuICAgICAgICAgICAgcmV0dXJuICdERUJVRyc7XG4gICAgICAgIGNhc2UgTG9nTGV2ZWwuVFJBQ0U6XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gJ1RSQUNFJztcblxuICAgIH1cblxufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqXG4gKiBAcGFyYW0ge0xPR19FVkVOVH0gbG9nRXZlbnRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmxldCBfZm9ybWF0UmVsYXRpdmUgPSBmdW5jdGlvbiAobG9nRXZlbnQpIHtcblx0cmV0dXJuICcnICsgbG9nRXZlbnQucmVsYXRpdmU7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7TE9HX0VWRU5UfSBsb2dFdmVudFxuICpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xubGV0IF9mb3JtYXRTZXF1ZW5jZU51bWJlciA9IGZ1bmN0aW9uIChsb2dFdmVudCkge1xuXHRyZXR1cm4gJycgKyBsb2dFdmVudC5zZXF1ZW5jZTtcbn07XG5cbmxldCBfZm9ybWF0dGVycyA9IHtcblx0J2N8bG9nZ2VyJyA6IF9mb3JtYXRMb2dnZXIsXG5cdCdkfGRhdGUnIDogX2Zvcm1hdERhdGUsXG5cdCdleHxleGNlcHRpb258dGhyb3dhYmxlJyA6IF9mb3JtYXRFeGNlcHRpb24sXG5cdCdGfGZpbGUnIDogX2Zvcm1hdEZpbGUsXG5cdCdLfG1hcHxNQVAnIDogX2Zvcm1hdE1hcE1lc3NhZ2UsXG5cdCdMfGxpbmUnIDogX2Zvcm1hdExpbmVOdW1iZXIsXG5cdCdtfG1zZ3xtZXNzYWdlJyA6IF9mb3JtYXRMb2dNZXNzYWdlLFxuXHQnTXxtZXRob2QnIDogX2Zvcm1hdE1ldGhvZE5hbWUsXG5cdCduJyA6IF9mb3JtYXRMaW5lU2VwYXJhdG9yLFxuXHQncHxsZXZlbCcgOiBfZm9ybWF0TGV2ZWwsXG5cdCdyfHJlbGF0aXZlJyA6IF9mb3JtYXRSZWxhdGl2ZSxcblx0J3NufHNlcXVlbmNlTnVtYmVyJyA6IF9mb3JtYXRTZXF1ZW5jZU51bWJlclxufTtcblxuLyoqXG4gKiBHZXQgdGhlIGNvbXBpbGVkIGxheW91dCBmb3IgdGhlIHNwZWNpZmllZCBsYXlvdXQgc3RyaW5nLiBJZiB0aGUgY29tcGlsZWQgbGF5b3V0IGRvZXMgbm90XG4gKiBleGlzdCwgdGhlbiB3ZSB3YW50IHRvIGNyZWF0ZSBpdC5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbGF5b3V0XG4gKlxuICogQHJldHVybiB7QXJyYXkuPHN0cmluZ3xmdW5jdGlvbj59XG4gKi9cbmxldCBfZ2V0Q29tcGlsZWRMYXlvdXQgPSBmdW5jdGlvbiAobGF5b3V0KSB7XG5cblx0aWYgKF9jb21waWxlZExheW91dHNbbGF5b3V0XSkge1xuXHRcdHJldHVybiBfY29tcGlsZWRMYXlvdXRzW2xheW91dF07XG5cdH1cblxuXHRyZXR1cm4gX2NvbXBpbGVMYXlvdXQobGF5b3V0KTtcblxufTtcblxuLyoqXG4gKiBDb21waWxlcyBhIGxheW91dCBpbnRvIGFuIGFycmF5LiBUaGUgYXJyYXkgY29udGFpbnMgZnVuY3Rpb25zXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxheW91dFxuICpcbiAqIEByZXR1cm4ge0FycmF5LjxzdHJpbmd8ZnVuY3Rpb24+fVxuICovXG5sZXQgX2NvbXBpbGVMYXlvdXQgPSBmdW5jdGlvbiAobGF5b3V0KSB7XG5cblx0bGV0IGluZGV4ID0gbGF5b3V0LmluZGV4T2YoJyUnKTtcblx0bGV0IGN1cnJlbnRGb3JtYXRTdHJpbmcgPSAnJztcblx0bGV0IGZvcm1hdEFycmF5ID0gW107XG5cblx0aWYgKGluZGV4ICE9IDApIHtcblx0XHRmb3JtYXRBcnJheS5wdXNoKGxheW91dC5zdWJzdHJpbmcoMCwgaW5kZXgpKTtcblx0fVxuXG5cdGRvIHtcblxuXHRcdGxldCBzdGFydEluZGV4ID0gaW5kZXg7XG5cdFx0bGV0IGVuZEluZGV4ID0gaW5kZXggPSBsYXlvdXQuaW5kZXhPZignJScsIGluZGV4ICsgMSk7XG5cblx0XHRpZiAoZW5kSW5kZXggPCAwKSB7XG5cdFx0XHRjdXJyZW50Rm9ybWF0U3RyaW5nID0gbGF5b3V0LnN1YnN0cmluZyhzdGFydEluZGV4KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y3VycmVudEZvcm1hdFN0cmluZyA9IGxheW91dC5zdWJzdHJpbmcoc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuXHRcdH1cblxuXHRcdGZvcm1hdEFycmF5LnB1c2goX2dldEZvcm1hdHRlck9iamVjdChjdXJyZW50Rm9ybWF0U3RyaW5nKSk7XG5cblx0fSB3aGlsZSAoaW5kZXggPiAtMSk7XG5cbiAgICAvLyBzZXQgdGhlIGZvcm1hdCBhcnJheSB0byB0aGUgc3BlY2lmaWVkIGNvbXBpbGVkIGxheW91dFxuXHRfY29tcGlsZWRMYXlvdXRzW2xheW91dF0gPSBmb3JtYXRBcnJheTtcblxuXHRyZXR1cm4gZm9ybWF0QXJyYXk7XG5cbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1hdFN0cmluZ1xuICpcbiAqIEByZXR1cm4ge09iamVjdHxzdHJpbmd9XG4gKi9cbmxldCBfZ2V0Rm9ybWF0dGVyT2JqZWN0ID0gZnVuY3Rpb24gKGZvcm1hdFN0cmluZykge1xuXG5cdGxldCByZXN1bHQgPSBfQ09NTUFORF9SRUdFWC5leGVjKGZvcm1hdFN0cmluZyk7XG5cdGlmIChyZXN1bHQgIT0gbnVsbCAmJiByZXN1bHQubGVuZ3RoID09IDIpIHtcblxuXHRcdGxldCBmb3JtYXR0ZXIgPSBfZ2V0Rm9ybWF0dGVyRnVuY3Rpb24ocmVzdWx0WzFdKTtcblx0XHRpZiAoIWZvcm1hdHRlcikge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0bGV0IHBhcmFtcyA9IF9nZXRMYXlvdXRUYWdQYXJhbXMoZm9ybWF0U3RyaW5nKTtcblxuXHRcdGxldCBhZnRlciA9ICcnO1xuXHRcdGxldCBlbmRJbmRleCA9IGZvcm1hdFN0cmluZy5sYXN0SW5kZXhPZignfScpO1xuXHRcdGlmIChlbmRJbmRleCAhPSAtMSkge1xuXHRcdFx0YWZ0ZXIgPSBmb3JtYXRTdHJpbmcuc3Vic3RyaW5nKGVuZEluZGV4ICsgMSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFmdGVyID0gZm9ybWF0U3RyaW5nLnN1YnN0cmluZyhyZXN1bHQuaW5kZXggKyByZXN1bHRbMV0ubGVuZ3RoICsgMSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdCdmb3JtYXR0ZXInIDogZm9ybWF0dGVyLFxuXHRcdFx0J3BhcmFtcycgOiBwYXJhbXMsXG5cdFx0XHQnYWZ0ZXInIDogYWZ0ZXJcblx0XHR9O1xuXG5cdH1cblxuXHRyZXR1cm4gZm9ybWF0U3RyaW5nO1xuXG59O1xuXG4vKipcbiAqIERldGVybWluZXMgd2hhdCBmb3JtYXR0ZXIgZnVuY3Rpb24gaGFzIGJlZW4gY29uZmlndXJlZFxuICpcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21tYW5kXG4gKlxuICogQHJldHVybiB7P3N0cmluZ31cbiAqL1xubGV0IF9nZXRGb3JtYXR0ZXJGdW5jdGlvbiA9IGZ1bmN0aW9uIChjb21tYW5kKSB7XG5cblx0bGV0IHJlZ2V4O1xuXHRmb3IgKGxldCBrZXkgaW4gX2Zvcm1hdHRlcnMpIHtcbiAgICAgICAgaWYgKF9mb3JtYXR0ZXJzLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgIHJlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsga2V5ICsgJykkJyk7XG4gICAgICAgICAgICBpZiAocmVnZXguZXhlYyhjb21tYW5kKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfZm9ybWF0dGVyc1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cdH1cblxuXHRyZXR1cm4gbnVsbDtcblxufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBsYXlvdXQgdGFnIHBhcmFtcyBhc3NvY2lhdGVkIHdpdGggdGhlIGxheW91dCB0YWcuIFNvLCBmb3IgZXhhbXBsZSwgJyVke3l5eXktTU0tZGR9YFxuICogd291bGQgb3V0cHV0IGFuIGFycmF5IG9mIFsneXl5eS1NTS1kZCddXG4gKlxuICogQHByaXZhdGVcbiAqIEBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21tYW5kXG4gKlxuICogQHJldHVybiB7QXJyYXkuPHN0cmluZz59XG4gKi9cbmxldCBfZ2V0TGF5b3V0VGFnUGFyYW1zID0gZnVuY3Rpb24gKGNvbW1hbmQpIHtcblxuXHRsZXQgcGFyYW1zID0gW107XG5cdGxldCByZXN1bHQgPSBjb21tYW5kLm1hdGNoKC9cXHsoW159XSopKD89fSkvZyk7XG5cdGlmIChyZXN1bHQgIT0gbnVsbCkge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRwYXJhbXMucHVzaChyZXN1bHRbaV0uc3Vic3RyaW5nKDEpKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcGFyYW1zO1xuXG59O1xuXG4vKipcbiAqIEhhbmRsZXMgZm9ybWF0dGluZyB0aGUgbG9nIGV2ZW50IHVzaW5nIHRoZSBzcGVjaWZpZWQgZm9ybWF0dGVyIGFycmF5XG4gKlxuICogQHByaXZhdGVcbiAqIEBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7QXJyYXkuPGZ1bmN0aW9ufHN0cmluZz59IGZvcm1hdHRlclxuICogQHBhcmFtIHtMT0dfRVZFTlR9IGxvZ0V2ZW50XG4gKlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5sZXQgX2Zvcm1hdExvZ0V2ZW50ID0gZnVuY3Rpb24gKGZvcm1hdHRlciwgbG9nRXZlbnQpIHtcblxuXHRsZXQgcmVzcG9uc2U7XG5cdGxldCBtZXNzYWdlID0gJyc7XG5cdGxldCBjb3VudCA9IGZvcm1hdHRlci5sZW5ndGg7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuXHRcdGlmIChmb3JtYXR0ZXJbaV0gIT09IG51bGwpIHtcblxuXHRcdFx0aWYgKGZvcm1hdHRlcltpXSBpbnN0YW5jZW9mIE9iamVjdCkge1xuXG5cdFx0XHRcdHJlc3BvbnNlID0gZm9ybWF0dGVyW2ldLmZvcm1hdHRlcihsb2dFdmVudCwgZm9ybWF0dGVyW2ldLnBhcmFtcyk7XG5cdFx0XHRcdGlmIChyZXNwb25zZSAhPSBudWxsKSB7XG5cdFx0XHRcdFx0bWVzc2FnZSArPSByZXNwb25zZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRtZXNzYWdlICs9IGZvcm1hdHRlcltpXS5hZnRlcjtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bWVzc2FnZSArPSBmb3JtYXR0ZXJbaV07XG5cdFx0XHR9XG5cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbWVzc2FnZS50cmltKCk7XG5cbn07XG5cbi8qKlxuICpcbiAqIEBwcml2YXRlXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqXG4gKiBAcGFyYW0ge0xPR19FVkVOVH0gbG9nRXZlbnRcbiAqL1xubGV0IF9nZXRGaWxlRGV0YWlscyA9IGZ1bmN0aW9uIChsb2dFdmVudCkge1xuXG5cdGlmIChsb2dFdmVudC5sb2dFcnJvclN0YWNrKSB7XG5cblx0XHRsZXQgcGFydHMgPSBsb2dFdmVudC5sb2dFcnJvclN0YWNrLnN0YWNrLnNwbGl0KC9cXG4vZyk7XG5cdFx0bGV0IGZpbGUgPSBwYXJ0c1szXTtcblx0XHRmaWxlID0gZmlsZS5yZXBsYWNlKC9hdCAoLipcXCh8KShmaWxlfGh0dHB8aHR0cHN8KSg6fCkoXFwvfCkqLywgJycpO1xuXHRcdGZpbGUgPSBmaWxlLnJlcGxhY2UoJyknLCAnJyk7XG5cdFx0ZmlsZSA9IGZpbGUucmVwbGFjZSgodHlwZW9mIGxvY2F0aW9uICE9PSAndW5kZWZpbmVkJykgPyBsb2NhdGlvbi5ob3N0IDogJycsICcnKS50cmltKCk7XG5cblx0XHRsZXQgZmlsZVBhcnRzID0gZmlsZS5zcGxpdCgvXFw6L2cpO1xuXG5cdFx0bG9nRXZlbnQuY29sdW1uID0gZmlsZVBhcnRzLnBvcCgpO1xuXHRcdGxvZ0V2ZW50LmxpbmVOdW1iZXIgPSBmaWxlUGFydHMucG9wKCk7XG5cblx0XHRpZiAodHlwZW9mIGRlZmluZSAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdGxldCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXHRcdFx0bGV0IGFwcERpciA9IHBhdGguZGlybmFtZShyZXF1aXJlLm1haW4uZmlsZW5hbWUpO1xuXHRcdFx0bG9nRXZlbnQuZmlsZW5hbWUgPSBmaWxlUGFydHMuam9pbignOicpLnJlcGxhY2UoYXBwRGlyLCAnJykucmVwbGFjZSgvKFxcXFx8XFwvKS8sICcnKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bG9nRXZlbnQuZmlsZW5hbWUgPSBmaWxlUGFydHMuam9pbignOicpO1xuXHRcdH1cblxuXHR9IGVsc2Uge1xuXG5cdFx0bG9nRXZlbnQuY29sdW1uID0gJz8nO1xuXHRcdGxvZ0V2ZW50LmZpbGVuYW1lID0gJ2Fub255bW91cyc7XG5cdFx0bG9nRXZlbnQubGluZU51bWJlciA9ICc/JztcblxuXHR9XG5cbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxheW91dFxuICpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZUNvbXBpbGUobGF5b3V0KSB7XG5cdF9nZXRDb21waWxlZExheW91dChsYXlvdXQpO1xufVxuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYXlvdXRcbiAqIEBwYXJhbSB7TE9HX0VWRU5UfSBsb2dFdmVudFxuICpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdChsYXlvdXQsIGxvZ0V2ZW50KSB7XG5cdHJldHVybiBfZm9ybWF0TG9nRXZlbnQoX2dldENvbXBpbGVkTGF5b3V0KGxheW91dCksIGxvZ0V2ZW50KTtcbn1cbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZvcm1hdHRlci5qcyJdLCJuYW1lcyI6WyJwcmVDb21waWxlIiwiZm9ybWF0IiwidXRpbGl0eSIsIl9DT01NQU5EX1JFR0VYIiwiX2NvbXBpbGVkTGF5b3V0cyIsIl9mb3JtYXRMb2dnZXIiLCJsb2dFdmVudCIsImxvZ2dlciIsIl9mb3JtYXREYXRlIiwicGFyYW1zIiwiZGF0ZSIsIl9mb3JtYXRFeGNlcHRpb24iLCJtZXNzYWdlIiwiZXJyb3IiLCJzdGFjayIsInVuZGVmaW5lZCIsInN0YWNrcyIsInNwbGl0IiwiZm9yRWFjaCIsIm5hbWUiLCJfZm9ybWF0RmlsZSIsImZpbGUiLCJfZ2V0RmlsZURldGFpbHMiLCJfZm9ybWF0TGluZU51bWJlciIsImxpbmVOdW1iZXIiLCJfZm9ybWF0Q29sdW1uIiwiY29sdW1uIiwiX2Zvcm1hdE1hcE1lc3NhZ2UiLCJwcm9wZXJ0aWVzIiwia2V5IiwicHVzaCIsImpvaW4iLCJfZm9ybWF0TG9nTWVzc2FnZSIsIl9mb3JtYXRNZXRob2ROYW1lIiwiZ2V0RnVuY3Rpb25OYW1lIiwibWV0aG9kIiwiX2Zvcm1hdExpbmVTZXBhcmF0b3IiLCJfZm9ybWF0TGV2ZWwiLCJsZXZlbCIsIkZBVEFMIiwiRVJST1IiLCJXQVJOIiwiSU5GTyIsIkRFQlVHIiwiVFJBQ0UiLCJfZm9ybWF0UmVsYXRpdmUiLCJyZWxhdGl2ZSIsIl9mb3JtYXRTZXF1ZW5jZU51bWJlciIsInNlcXVlbmNlIiwiX2Zvcm1hdHRlcnMiLCJfZ2V0Q29tcGlsZWRMYXlvdXQiLCJsYXlvdXQiLCJfY29tcGlsZUxheW91dCIsImluZGV4IiwiaW5kZXhPZiIsImN1cnJlbnRGb3JtYXRTdHJpbmciLCJmb3JtYXRBcnJheSIsInN1YnN0cmluZyIsInN0YXJ0SW5kZXgiLCJlbmRJbmRleCIsIl9nZXRGb3JtYXR0ZXJPYmplY3QiLCJmb3JtYXRTdHJpbmciLCJyZXN1bHQiLCJleGVjIiwibGVuZ3RoIiwiZm9ybWF0dGVyIiwiX2dldEZvcm1hdHRlckZ1bmN0aW9uIiwiX2dldExheW91dFRhZ1BhcmFtcyIsImFmdGVyIiwibGFzdEluZGV4T2YiLCJjb21tYW5kIiwicmVnZXgiLCJoYXNPd25Qcm9wZXJ0eSIsIlJlZ0V4cCIsIm1hdGNoIiwiaSIsIl9mb3JtYXRMb2dFdmVudCIsInJlc3BvbnNlIiwiY291bnQiLCJPYmplY3QiLCJ0cmltIiwibG9nRXJyb3JTdGFjayIsInBhcnRzIiwicmVwbGFjZSIsImxvY2F0aW9uIiwiaG9zdCIsImZpbGVQYXJ0cyIsInBvcCIsImRlZmluZSIsInBhdGgiLCJyZXF1aXJlIiwiYXBwRGlyIiwiZGlybmFtZSIsIm1haW4iLCJmaWxlbmFtZSIsInN0YXJ0c1dpdGgiXSwibWFwcGluZ3MiOiI7OztRQXVmZ0JBLFUsR0FBQUEsVTtnQ0FhQUMsTSxHQUFBQSxNOztBQTdmaEI7O0FBQ0E7OzRCQUFZQyxPOztBQUNaOzs7O0FBRUE7QUFDQSxJQUFNQyxpQkFBaUIsc0JBQXZCOztBQUVBO0FBZEE7Ozs7Ozs7QUFlQSxJQUFJQyxtQkFBbUIsRUFBdkI7O0FBRUE7Ozs7Ozs7O0FBUUEsSUFBSUMsZ0JBQWdCLFNBQWhCQSxhQUFnQixDQUFVQyxRQUFWLEVBQW9CO0FBQ3ZDLFNBQU9BLFNBQVNDLE1BQWhCO0FBQ0EsQ0FGRDs7QUFJQTs7Ozs7Ozs7O0FBU0EsSUFBSUMsY0FBYyxTQUFkQSxXQUFjLENBQVVGLFFBQVYsRUFBb0JHLE1BQXBCLEVBQTRCO0FBQzdDLFNBQU8sd0RBQVdILFNBQVNJLElBQXBCLEVBQTBCRCxPQUFPLENBQVAsQ0FBMUI7QUFBUDtBQUNBLENBRkQ7O0FBSUE7Ozs7Ozs7O0FBUUEsSUFBSUUsbUJBQW1CLFNBQW5CQSxnQkFBbUIsQ0FBVUwsUUFBVixFQUFvQjs7QUFFdkMsTUFBSU0sVUFBVSxFQUFkOztBQUVBLE1BQUlOLFNBQVNPLEtBQVQsSUFBa0IsSUFBdEIsRUFBNEI7O0FBRTlCLFFBQUlQLFNBQVNPLEtBQVQsQ0FBZUMsS0FBZixJQUF3QkMsU0FBNUIsRUFBdUM7QUFDdEMsVUFBSUMsU0FBU1YsU0FBU08sS0FBVCxDQUFlQyxL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ZSxJQUFULEdBQWdCZixTQUFTd0YsUUFBekI7QUFDQSxDQWxDRDs7QUFvQ0E7Ozs7Ozs7O0FBUU8sU0FBUzlGLFVBQVQsQ0FBb0JtRCxNQUFwQixFQUE0QjtBQUNsQ0QscUJBQW1CQyxNQUFuQjtBQUNBOztBQUVEOzs7Ozs7Ozs7QUFTTyxTQUFTbEQsTUFBVCxDQUFnQmtELE1BQWhCLEVBQXdCN0MsUUFBeEIsRUFBa0M7QUFDeEMsU0FBT3NFLGdCQUFnQjFCLG1CQUFtQkMsTUFBbkIsQ0FBaEIsRUFBNEM3QyxRQUE1QyxDQUFQO0FBQ0EiLCJmaWxlIjoiZm9ybWF0dGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBsb2c0anMgPGh0dHBzOi8vZ2l0aHViLmNvbS9hbmlnZW5lcm8vbG9nNGpzPlxuICpcbiAqIENvcHlyaWdodCAyMDE2LXByZXNlbnQgUm9iaW4gU2NodWx0eiA8aHR0cDovL2FuaWdlbmVyby5jb20+XG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge2RhdGVGb3JtYXR9IGZyb20gJy4vZGF0ZUZvcm1hdHRlcic7XG5pbXBvcnQgKiBhcyB1dGlsaXR5IGZyb20gJy4vdXRpbGl0eSc7XG5pbXBvcnQge0xvZ0xldmVsfSBmcm9tICcuL2NvbnN0L2xvZ0xldmVsJztcblxuLyoqIEBjb25zdCAqL1xuY29uc3QgX0NPTU1BTkRfUkVHRVggPSAvJShbYS16LEEtWl0rKSg/PVxce3wpLztcblxuLyoqIEB0eXBlIHtPYmplY3R9ICovXG5sZXQgX2NvbXBpbGVkTGF5b3V0cyA9IHt9O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7TE9HX0VWRU5UfSBsb2dFdmVudFxuICpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xubGV0IF9mb3JtYXRMb2dnZXIgPSBmdW5jdGlvbiAobG9nRXZlbnQpIHtcblx0cmV0dXJuIGxvZ0V2ZW50LmxvZ2dlcjtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtMT0dfRVZFTlR9IGxvZ0V2ZW50XG4gKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBwYXJhbXNcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmxldCBfZm9ybWF0RGF0ZSA9IGZ1bmN0aW9uIChsb2dFdmVudCwgcGFyYW1zKSB7XG5cdHJldHVybiBkYXRlRm9ybWF0KGxvZ0V2ZW50LmRhdGUsIHBhcmFtc1swXSk7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7TE9HX0VWRU5UfSBsb2dFdmVudFxuICpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xubGV0IF9mb3JtYXRFeGNlcHRpb24gPSBmdW5jdGlvbiAobG9nRXZlbnQpIHtcblxuICAgIGxldCBtZXNzYWdlID0gJyc7XG5cbiAgICBpZiAobG9nRXZlbnQuZXJyb3IgIT0gbnVsbCkge1xuXG5cdFx0aWYgKGxvZ0V2ZW50LmVycm9yLnN0YWNrICE9IHVuZGVmaW5lZCkge1xuXHRcdFx0bGV0IHN0YWNrcyA9IGxvZ0V2ZW50LmVycm9yLnN0YWNrLnNwbGl0KC9cXG4vZyk7XG4gICAgICAgICAgICBzdGFja3MuZm9yRWFjaChmdW5jdGlvbiAoc3RhY2spIHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlICs9IGBcXHQke3N0YWNrfVxcbmA7XG4gICAgICAgICAgICB9KTtcblx0XHR9IGVsc2UgaWYgKGxvZ0V2ZW50LmVycm9yLm1lc3NhZ2UgIT0gbnVsbCAmJiBsb2dFdmVudC5lcnJvci5tZXNzYWdlICE9ICcnKSB7XG5cdFx0XHRtZXNzYWdlICs9IGBcXHQke2xvZ0V2ZW50LmVycm9yLm5hbWV9OiAke2xvZ0V2ZW50LmVycm9yLm1lc3NhZ2V9XFxuYDtcblx0XHR9XG5cblx0fVxuXG5cdHJldHVybiBtZXNzYWdlO1xuXG59O1xuXG4vKipcbiAqIEZvcm1hdHMgdGhlIGZpbGUgKGUuZy4gdGVzdC5qcykgdG8gdGhlIGZpbGVcbiAqXG4gKiBAcHJpdmF0ZVxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtMT0dfRVZFTlR9IGxvZ0V2ZW50XG4gKi9cbmxldCBfZm9ybWF0RmlsZSA9IGZ1bmN0aW9uIChsb2dFdmVudCkge1xuXG4gICAgaWYgKCFsb2dFdmVudC5maWxlKSB7XG5cdFx0X2dldEZpbGVEZXRhaWxzKGxvZ0V2ZW50KTtcblx0fVxuXG5cdHJldHVybiBsb2dFdmVudC5maWxlO1xuXG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7TE9HX0VWRU5UfSBsb2dFdmVudFxuICpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xubGV0IF9mb3JtYXRMaW5lTnVtYmVyID0gZnVuY3Rpb24gKGxvZ0V2ZW50KSB7XG5cbiAgICBpZiAoIWxvZ0V2ZW50LmxpbmVOdW1iZXIpIHtcblx0XHRfZ2V0RmlsZURldGFpbHMobG9nRXZlbnQpO1xuXHR9XG5cblx0cmV0dXJuIGAke2xvZ0V2ZW50LmxpbmVOdW1iZXJ9YDtcblxufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqXG4gKiBAcGFyYW0ge0xPR19FVkVOVH0gbG9nRXZlbnRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmxldCBfZm9ybWF0Q29sdW1uID0gZnVuY3Rpb24gKGxvZ0V2ZW50KSB7XG5cbiAgICBpZiAoIWxvZ0V2ZW50LmNvbHVtbikge1xuXHRcdF9nZXRGaWxlRGV0YWlscyhsb2dFdmVudCk7XG5cdH1cblxuXHRyZXR1cm4gYCR7bG9nRXZlbnQuY29sdW1ufWA7XG5cbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtMT0dfRVZFTlR9IGxvZ0V2ZW50XG4gKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBwYXJhbXNcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmxldCBfZm9ybWF0TWFwTWVzc2FnZSA9IGZ1bmN0aW9uIChsb2dFdmVudCwgcGFyYW1zKSB7XG5cdGxldCBtZXNzYWdlID0gbnVsbDtcblx0aWYgKGxvZ0V2ZW50LnByb3BlcnRpZXMpIHtcblxuXHRcdG1lc3NhZ2UgPSBbXTtcblx0XHRmb3IgKGxldCBrZXkgaW4gbG9nRXZlbnQucHJvcGVydGllcykge1xuXHRcdFx0aWYgKHBhcmFtc1swXSkge1xuXHRcdFx0XHRpZiAocGFyYW1zWzBdID09IGtleSkge1xuXHRcdFx0XHRcdG1lc3NhZ2UucHVzaChsb2dFdmVudC5wcm9wZXJ0aWVzW2tleV0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtZXNzYWdlLnB1c2goJ3snICsga2V5ICsgJywnICsgbG9nRXZlbnQucHJvcGVydGllc1trZXldICsgJ30nKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gJ3snICsgbWVzc2FnZS5qb2luKCcsJykgKyAnfSc7XG5cblx0fVxuXHRyZXR1cm4gbWVzc2FnZTtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtMT0dfRVZFTlR9IGxvZ0V2ZW50XG4gKlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5sZXQgX2Zvcm1hdExvZ01lc3NhZ2UgPSBmdW5jdGlvbiAobG9nRXZlbnQpIHtcblx0cmV0dXJuIGxvZ0V2ZW50Lm1lc3NhZ2U7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7TE9HX0VWRU5UfSBsb2dFdmVudFxuICpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xubGV0IF9mb3JtYXRNZXRob2ROYW1lID0gZnVuY3Rpb24gKGxvZ0V2ZW50KSB7XG5cdHJldHVybiB1dGlsaXR5LmdldEZ1bmN0aW9uTmFtZShsb2dFdmVudC5tZXRob2QpO1xufTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKi9cbmxldCBfZm9ybWF0TGluZVNlcGFyYXRvciA9IGZ1bmN0aW9uICgpIHtcblx0cmV0dXJuICdcXG4nO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqXG4gKiBAcGFyYW0ge0xPR19FVkVOVH0gbG9nRXZlbnRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmxldCBfZm9ybWF0TGV2ZWwgPSBmdW5jdGlvbiAobG9nRXZlbnQpIHtcblxuICAgIHN3aXRjaCAobG9nRXZlbnQubGV2ZWwpIHtcblxuICAgICAgICBjYXNlIExvZ0xldmVsLkZBVEFMOlxuICAgICAgICAgICAgcmV0dXJuICdGQVRBTCc7XG4gICAgICAgIGNhc2UgTG9nTGV2ZWwuRVJST1I6XG4gICAgICAgICAgICByZXR1cm4gJ0VSUk9SJztcbiAgICAgICAgY2FzZSBMb2dMZXZlbC5XQVJOOlxuICAgICAgICAgICAgcmV0dXJuICdXQVJOJztcbiAgICAgICAgY2FzZSBMb2dMZXZlbC5JTkZPOlxuICAgICAgICAgICAgcmV0dXJuICdJTkZPJztcbiAgICAgICAgY2FzZSBMb2dMZXZlbC5ERUJVRzpcbiAgICAgICAgICAgIHJldHVybiAnREVCVUcnO1xuICAgICAgICBjYXNlIExvZ0xldmVsLlRSQUNFOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuICdUUkFDRSc7XG5cbiAgICB9XG5cbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtMT0dfRVZFTlR9IGxvZ0V2ZW50XG4gKlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5sZXQgX2Zvcm1hdFJlbGF0aXZlID0gZnVuY3Rpb24gKGxvZ0V2ZW50KSB7XG5cdHJldHVybiAnJyArIGxvZ0V2ZW50LnJlbGF0aXZlO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqXG4gKiBAcGFyYW0ge0xPR19FVkVOVH0gbG9nRXZlbnRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmxldCBfZm9ybWF0U2VxdWVuY2VOdW1iZXIgPSBmdW5jdGlvbiAobG9nRXZlbnQpIHtcblx0cmV0dXJuICcnICsgbG9nRXZlbnQuc2VxdWVuY2U7XG59O1xuXG5sZXQgX2Zvcm1hdHRlcnMgPSB7XG5cdCdjfGxvZ2dlcicgOiBfZm9ybWF0TG9nZ2VyLFxuXHQnZHxkYXRlJyA6IF9mb3JtYXREYXRlLFxuXHQnZXh8ZXhjZXB0aW9ufHRocm93YWJsZScgOiBfZm9ybWF0RXhjZXB0aW9uLFxuXHQnRnxmaWxlJyA6IF9mb3JtYXRGaWxlLFxuXHQnS3xtYXB8TUFQJyA6IF9mb3JtYXRNYXBNZXNzYWdlLFxuXHQnTHxsaW5lJyA6IF9mb3JtYXRMaW5lTnVtYmVyLFxuXHQnY29sdW1uJyA6IF9mb3JtYXRDb2x1bW4sXG5cdCdtfG1zZ3xtZXNzYWdlJyA6IF9mb3JtYXRMb2dNZXNzYWdlLFxuXHQnTXxtZXRob2QnIDogX2Zvcm1hdE1ldGhvZE5hbWUsXG5cdCduJyA6IF9mb3JtYXRMaW5lU2VwYXJhdG9yLFxuXHQncHxsZXZlbCcgOiBfZm9ybWF0TGV2ZWwsXG5cdCdyfHJlbGF0aXZlJyA6IF9mb3JtYXRSZWxhdGl2ZSxcblx0J3NufHNlcXVlbmNlTnVtYmVyJyA6IF9mb3JtYXRTZXF1ZW5jZU51bWJlclxufTtcblxuLyoqXG4gKiBHZXQgdGhlIGNvbXBpbGVkIGxheW91dCBmb3IgdGhlIHNwZWNpZmllZCBsYXlvdXQgc3RyaW5nLiBJZiB0aGUgY29tcGlsZWQgbGF5b3V0IGRvZXMgbm90XG4gKiBleGlzdCwgdGhlbiB3ZSB3YW50IHRvIGNyZWF0ZSBpdC5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbGF5b3V0XG4gKlxuICogQHJldHVybiB7QXJyYXkuPHN0cmluZ3xmdW5jdGlvbj59XG4gKi9cbmxldCBfZ2V0Q29tcGlsZWRMYXlvdXQgPSBmdW5jdGlvbiAobGF5b3V0KSB7XG5cblx0aWYgKF9jb21waWxlZExheW91dHNbbGF5b3V0XSkge1xuXHRcdHJldHVybiBfY29tcGlsZWRMYXlvdXRzW2xheW91dF07XG5cdH1cblxuXHRyZXR1cm4gX2NvbXBpbGVMYXlvdXQobGF5b3V0KTtcblxufTtcblxuLyoqXG4gKiBDb21waWxlcyBhIGxheW91dCBpbnRvIGFuIGFycmF5LiBUaGUgYXJyYXkgY29udGFpbnMgZnVuY3Rpb25zXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxheW91dFxuICpcbiAqIEByZXR1cm4ge0FycmF5LjxzdHJpbmd8ZnVuY3Rpb24+fVxuICovXG5sZXQgX2NvbXBpbGVMYXlvdXQgPSBmdW5jdGlvbiAobGF5b3V0KSB7XG5cblx0bGV0IGluZGV4ID0gbGF5b3V0LmluZGV4T2YoJyUnKTtcblx0bGV0IGN1cnJlbnRGb3JtYXRTdHJpbmcgPSAnJztcblx0bGV0IGZvcm1hdEFycmF5ID0gW107XG5cblx0aWYgKGluZGV4ICE9IDApIHtcblx0XHRmb3JtYXRBcnJheS5wdXNoKGxheW91dC5zdWJzdHJpbmcoMCwgaW5kZXgpKTtcblx0fVxuXG5cdGRvIHtcblxuXHRcdGxldCBzdGFydEluZGV4ID0gaW5kZXg7XG5cdFx0bGV0IGVuZEluZGV4ID0gaW5kZXggPSBsYXlvdXQuaW5kZXhPZignJScsIGluZGV4ICsgMSk7XG5cblx0XHRpZiAoZW5kSW5kZXggPCAwKSB7XG5cdFx0XHRjdXJyZW50Rm9ybWF0U3RyaW5nID0gbGF5b3V0LnN1YnN0cmluZyhzdGFydEluZGV4KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y3VycmVudEZvcm1hdFN0cmluZyA9IGxheW91dC5zdWJzdHJpbmcoc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuXHRcdH1cblxuXHRcdGZvcm1hdEFycmF5LnB1c2goX2dldEZvcm1hdHRlck9iamVjdChjdXJyZW50Rm9ybWF0U3RyaW5nKSk7XG5cblx0fSB3aGlsZSAoaW5kZXggPiAtMSk7XG5cbiAgICAvLyBzZXQgdGhlIGZvcm1hdCBhcnJheSB0byB0aGUgc3BlY2lmaWVkIGNvbXBpbGVkIGxheW91dFxuXHRfY29tcGlsZWRMYXlvdXRzW2xheW91dF0gPSBmb3JtYXRBcnJheTtcblxuXHRyZXR1cm4gZm9ybWF0QXJyYXk7XG5cbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1hdFN0cmluZ1xuICpcbiAqIEByZXR1cm4ge09iamVjdHxzdHJpbmd9XG4gKi9cbmxldCBfZ2V0Rm9ybWF0dGVyT2JqZWN0ID0gZnVuY3Rpb24gKGZvcm1hdFN0cmluZykge1xuXG5cdGxldCByZXN1bHQgPSBfQ09NTUFORF9SRUdFWC5leGVjKGZvcm1hdFN0cmluZyk7XG5cdGlmIChyZXN1bHQgIT0gbnVsbCAmJiByZXN1bHQubGVuZ3RoID09IDIpIHtcblxuXHRcdGxldCBmb3JtYXR0ZXIgPSBfZ2V0Rm9ybWF0dGVyRnVuY3Rpb24ocmVzdWx0WzFdKTtcblx0XHRpZiAoIWZvcm1hdHRlcikge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0bGV0IHBhcmFtcyA9IF9nZXRMYXlvdXRUYWdQYXJhbXMoZm9ybWF0U3RyaW5nKTtcblxuXHRcdGxldCBhZnRlciA9ICcnO1xuXHRcdGxldCBlbmRJbmRleCA9IGZvcm1hdFN0cmluZy5sYXN0SW5kZXhPZignfScpO1xuXHRcdGlmIChlbmRJbmRleCAhPSAtMSkge1xuXHRcdFx0YWZ0ZXIgPSBmb3JtYXRTdHJpbmcuc3Vic3RyaW5nKGVuZEluZGV4ICsgMSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFmdGVyID0gZm9ybWF0U3RyaW5nLnN1YnN0cmluZyhyZXN1bHQuaW5kZXggKyByZXN1bHRbMV0ubGVuZ3RoICsgMSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdCdmb3JtYXR0ZXInIDogZm9ybWF0dGVyLFxuXHRcdFx0J3BhcmFtcycgOiBwYXJhbXMsXG5cdFx0XHQnYWZ0ZXInIDogYWZ0ZXJcblx0XHR9O1xuXG5cdH1cblxuXHRyZXR1cm4gZm9ybWF0U3RyaW5nO1xuXG59O1xuXG4vKipcbiAqIERldGVybWluZXMgd2hhdCBmb3JtYXR0ZXIgZnVuY3Rpb24gaGFzIGJlZW4gY29uZmlndXJlZFxuICpcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21tYW5kXG4gKlxuICogQHJldHVybiB7P3N0cmluZ31cbiAqL1xubGV0IF9nZXRGb3JtYXR0ZXJGdW5jdGlvbiA9IGZ1bmN0aW9uIChjb21tYW5kKSB7XG5cblx0bGV0IHJlZ2V4O1xuXHRmb3IgKGxldCBrZXkgaW4gX2Zvcm1hdHRlcnMpIHtcbiAgICAgICAgaWYgKF9mb3JtYXR0ZXJzLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgIHJlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsga2V5ICsgJykkJyk7XG4gICAgICAgICAgICBpZiAocmVnZXguZXhlYyhjb21tYW5kKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfZm9ybWF0dGVyc1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cdH1cblxuXHRyZXR1cm4gbnVsbDtcblxufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBsYXlvdXQgdGFnIHBhcmFtcyBhc3NvY2lhdGVkIHdpdGggdGhlIGxheW91dCB0YWcuIFNvLCBmb3IgZXhhbXBsZSwgJyVke3l5eXktTU0tZGR9YFxuICogd291bGQgb3V0cHV0IGFuIGFycmF5IG9mIFsneXl5eS1NTS1kZCddXG4gKlxuICogQHByaXZhdGVcbiAqIEBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21tYW5kXG4gKlxuICogQHJldHVybiB7QXJyYXkuPHN0cmluZz59XG4gKi9cbmxldCBfZ2V0TGF5b3V0VGFnUGFyYW1zID0gZnVuY3Rpb24gKGNvbW1hbmQpIHtcblxuXHRsZXQgcGFyYW1zID0gW107XG5cdGxldCByZXN1bHQgPSBjb21tYW5kLm1hdGNoKC9cXHsoW159XSopKD89fSkvZyk7XG5cdGlmIChyZXN1bHQgIT0gbnVsbCkge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRwYXJhbXMucHVzaChyZXN1bHRbaV0uc3Vic3RyaW5nKDEpKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcGFyYW1zO1xuXG59O1xuXG4vKipcbiAqIEhhbmRsZXMgZm9ybWF0dGluZyB0aGUgbG9nIGV2ZW50IHVzaW5nIHRoZSBzcGVjaWZpZWQgZm9ybWF0dGVyIGFycmF5XG4gKlxuICogQHByaXZhdGVcbiAqIEBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7QXJyYXkuPGZ1bmN0aW9ufHN0cmluZz59IGZvcm1hdHRlclxuICogQHBhcmFtIHtMT0dfRVZFTlR9IGxvZ0V2ZW50XG4gKlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5sZXQgX2Zvcm1hdExvZ0V2ZW50ID0gZnVuY3Rpb24gKGZvcm1hdHRlciwgbG9nRXZlbnQpIHtcblxuXHRsZXQgcmVzcG9uc2U7XG5cdGxldCBtZXNzYWdlID0gJyc7XG5cdGxldCBjb3VudCA9IGZvcm1hdHRlci5sZW5ndGg7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuXHRcdGlmIChmb3JtYXR0ZXJbaV0gIT09IG51bGwpIHtcblxuXHRcdFx0aWYgKGZvcm1hdHRlcltpXSBpbnN0YW5jZW9mIE9iamVjdCkge1xuXG5cdFx0XHRcdHJlc3BvbnNlID0gZm9ybWF0dGVyW2ldLmZvcm1hdHRlcihsb2dFdmVudCwgZm9ybWF0dGVyW2ldLnBhcmFtcyk7XG5cdFx0XHRcdGlmIChyZXNwb25zZSAhPSBudWxsKSB7XG5cdFx0XHRcdFx0bWVzc2FnZSArPSByZXNwb25zZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRtZXNzYWdlICs9IGZvcm1hdHRlcltpXS5hZnRlcjtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bWVzc2FnZSArPSBmb3JtYXR0ZXJbaV07XG5cdFx0XHR9XG5cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbWVzc2FnZS50cmltKCk7XG5cbn07XG5cbi8qKlxuICpcbiAqIEBwcml2YXRlXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqXG4gKiBAcGFyYW0ge0xPR19FVkVOVH0gbG9nRXZlbnRcbiAqL1xubGV0IF9nZXRGaWxlRGV0YWlscyA9IGZ1bmN0aW9uIChsb2dFdmVudCkge1xuXG5cdGlmIChsb2dFdmVudC5sb2dFcnJvclN0YWNrKSB7XG5cblx0XHRsZXQgcGFydHMgPSBsb2dFdmVudC5sb2dFcnJvclN0YWNrLnN0YWNrLnNwbGl0KC9cXG4vZyk7XG5cdFx0bGV0IGZpbGUgPSBwYXJ0c1szXTtcblx0XHRmaWxlID0gZmlsZS5yZXBsYWNlKC9hdCAoLipcXCh8KShmaWxlfGh0dHB8aHR0cHN8KSg6fCkoXFwvfCkqLywgJycpO1xuXHRcdGZpbGUgPSBmaWxlLnJlcGxhY2UoJyknLCAnJyk7XG5cdFx0ZmlsZSA9IGZpbGUucmVwbGFjZSgodHlwZW9mIGxvY2F0aW9uICE9PSAndW5kZWZpbmVkJykgPyBsb2NhdGlvbi5ob3N0IDogJycsICcnKS50cmltKCk7XG5cblx0XHRsZXQgZmlsZVBhcnRzID0gZmlsZS5zcGxpdCgvXFw6L2cpO1xuXG5cdFx0bG9nRXZlbnQuY29sdW1uID0gZmlsZVBhcnRzLnBvcCgpO1xuXHRcdGxvZ0V2ZW50LmxpbmVOdW1iZXIgPSBmaWxlUGFydHMucG9wKCk7XG5cblx0XHRpZiAodHlwZW9mIGRlZmluZSAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdGxldCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXHRcdFx0bGV0IGFwcERpciA9IHBhdGguZGlybmFtZShyZXF1aXJlLm1haW4uZmlsZW5hbWUpO1xuXHRcdFx0aWYgKCFmaWxlUGFydHNbMF0uc3RhcnRzV2l0aChhcHBEaXIpKSB7XG5cdFx0XHRcdGFwcERpciA9ICcnO1xuXHRcdFx0fVxuXHRcdFx0bG9nRXZlbnQuZmlsZW5hbWUgPSBmaWxlUGFydHMuam9pbignOicpLnJlcGxhY2UoYXBwRGlyLCAnJykucmVwbGFjZSgvXihcXFxcfFxcLykvLCAnJyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGxvZ0V2ZW50LmZpbGVuYW1lID0gZmlsZVBhcnRzLmpvaW4oJzonKTtcblx0XHR9XG5cblx0fSBlbHNlIHtcblxuXHRcdGxvZ0V2ZW50LmNvbHVtbiA9ICc/Jztcblx0XHRsb2dFdmVudC5maWxlbmFtZSA9ICdhbm9ueW1vdXMnO1xuXHRcdGxvZ0V2ZW50LmxpbmVOdW1iZXIgPSAnPyc7XG5cblx0fVxuXHRsb2dFdmVudC5maWxlID0gbG9nRXZlbnQuZmlsZW5hbWU7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYXlvdXRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVDb21waWxlKGxheW91dCkge1xuXHRfZ2V0Q29tcGlsZWRMYXlvdXQobGF5b3V0KTtcbn1cblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbGF5b3V0XG4gKiBAcGFyYW0ge0xPR19FVkVOVH0gbG9nRXZlbnRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXQobGF5b3V0LCBsb2dFdmVudCkge1xuXHRyZXR1cm4gX2Zvcm1hdExvZ0V2ZW50KF9nZXRDb21waWxlZExheW91dChsYXlvdXQpLCBsb2dFdmVudCk7XG59XG4iXX0= \ No newline at end of file diff --git a/dist/es5/index.js b/dist/es5/index.js index 78bd3a9..9112dd3 100644 --- a/dist/es5/index.js +++ b/dist/es5/index.js @@ -296,15 +296,15 @@ function getLogger(context) { } // determine the context - if (typeof context != 'string') { + if (typeof context !== 'string') { - if (typeof context == 'function') { + if (typeof context === 'function') { context = utility.getFunctionName(context); - } else if ( /*istanbul ignore next*/(typeof context === 'undefined' ? 'undefined' : _typeof(context)) == 'object') { + } else if ( /*istanbul ignore next*/(typeof context === 'undefined' ? 'undefined' : _typeof(context)) === 'object') { context = utility.getFunctionName(context.constructor); - if (context == 'Object') { + if (context === 'Object') { context = 'anonymous'; } } else { @@ -328,7 +328,7 @@ function getLogger(context) { */ function setLogLevel(logLevel, logger) { - if (logLevel instanceof Number) { + if (Number.isInteger(logLevel)) { if (logger) { if (_loggers[logger]) { @@ -350,4 +350,4 @@ addAppender( /*istanbul ignore next*/_consoleAppender.ConsoleAppender); /*istanbul ignore next*/exports.LogLevel = _logLevel.LogLevel; /*istanbul ignore next*/exports.LogAppender = _appender.LogAppender; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbImNvbmZpZ3VyZSIsImFkZEFwcGVuZGVyIiwiZ2V0TG9nZ2VyIiwic2V0TG9nTGV2ZWwiLCJmb3JtYXR0ZXIiLCJ1dGlsaXR5IiwiQVBQRU5ERVIiLCJDT05GSUdfUEFSQU1TIiwiX01BSU5fTE9HR0VSIiwiX0RFRkFVTFRfQVBQRU5ERVJTIiwiSU5GTyIsIl9ERUZBVUxUX0NPTkZJRyIsIl9BUFBFTkRFUl9NRVRIT0RTIiwiX2FwcGVuZGVycyIsIl9jb25maWd1cmF0aW9uIiwiX2ZpbmFsaXplZCIsIl9sb2dnZXJzIiwiY29uZmlnIiwiY29uc29sZSIsImVycm9yIiwibGF5b3V0IiwiX2NvbmZpZ3VyZUFwcGVuZGVycyIsImFwcGVuZGVycyIsIl9jb25maWd1cmVMb2dnZXJzIiwibG9nZ2VycyIsIkFycmF5IiwiZm9yRWFjaCIsImFwcGVuZGVyIiwiRnVuY3Rpb24iLCJFcnJvciIsImxvZ2dlciIsInRhZyIsImxvZ0xldmVsIiwiRVJST1IiLCJfZ2V0QXBwZW5kZXJzRm9yTG9nZ2VyIiwiYXBwZW5kZXJMaXN0IiwiT2JqZWN0Iiwia2V5cyIsImtleSIsInByb3RvdHlwZSIsInNldExheW91dCIsInB1c2giLCJhbGxvd0FwcGVuZGVySW5qZWN0aW9uIiwiX3ZhbGlkYXRlQXBwZW5kZXIiLCJuYW1lIiwiYXBwZW5kZXJPYmoiLCJlbGVtZW50IiwidW5kZWZpbmVkIiwiX2FwcGVuZCIsImxvZ0V2ZW50IiwiaXNBY3RpdmUiLCJsZXZlbCIsImFwcGVuZCIsImNvbnRleHQiLCJnZXRGdW5jdGlvbk5hbWUiLCJjb25zdHJ1Y3RvciIsIk51bWJlciIsImhhc093blByb3BlcnR5IiwiTG9nTGV2ZWwiLCJMb2dBcHBlbmRlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztRQWdGZ0JBLFMsR0FBQUEsUztnQ0FxSEFDLFcsR0FBQUEsVztnQ0ErRUFDLFMsR0FBQUEsUztnQ0EyQ0FDLFcsR0FBQUEsVzs7QUExU2hCOzs0QkFBWUMsUzs7QUFD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QVgsRUFBb0I7QUFDMUIsa0JBQVdMO0FBRGUsS0FBcEIsQ0FBUDtBQUlBOztBQUlEOzs7Ozs7Ozs7QUFTTyxTQUFTN0MsV0FBVCxDQUFxQjZCLFFBQXJCLEVBQStCRixNQUEvQixFQUF1Qzs7QUFFMUMsUUFBSUUsb0JBQW9Cd0IsTUFBeEIsRUFBZ0M7O0FBRTVCLFlBQUkxQixNQUFKLEVBQVk7QUFDUixnQkFBSWQsU0FBU2MsTUFBVCxDQUFKLEVBQXNCO0FBQ2xCZCx5QkFBU2MsTUFBVCxFQUFpQjNCLFdBQWpCLENBQTZCNkIsUUFBN0I7QUFDSDtBQUNKLFNBSkQsTUFJTztBQUNILGlCQUFLLElBQUlNLEdBQVQsSUFBZ0J0QixRQUFoQixFQUEwQjtBQUN0QixvQkFBSUEsU0FBU3lDLGNBQVQsQ0FBd0JuQixHQUF4QixDQUFKLEVBQWtDO0FBQzlCdEIsNkJBQVNzQixHQUFULEVBQWNaLE9BQWQsQ0FBc0IsVUFBVUMsUUFBVixFQUFvQjtBQUN0Q0EsaUNBQVN4QixXQUFULENBQXFCNkIsUUFBckI7QUFDSCxxQkFGRDtBQUdIO0FBQ0o7QUFDSjtBQUVKO0FBRUo7O0FBRUQvQjs7Z0NBRVN5RCxRO2dDQUNBQyxXIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBsb2c0anMgPGh0dHBzOi8vZ2l0aHViLmNvbS9hbmlnZW5lcm8vbG9nNGpzPlxuICpcbiAqIENvcHlyaWdodCAyMDE2IFJvYmluIFNjaHVsdHogPGh0dHA6Ly9hbmlnZW5lcm8uY29tPlxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlXG4gKi9cblxuLyoqXG4gKiBIb2xkcyB0aGUgZGVmaW5pdGlvbiBmb3IgdGhlIGFwcGVuZGVyIGNsb3N1cmVcbiAqXG4gKiBAdHlwZWRlZiB7eyBhcHBlbmQgOiBmdW5jdGlvbiAobnVtYmVyLCBMT0dfRVZFTlQpLCBpc0FjdGl2ZSA6IGZ1bmN0aW9uKCksXG4gKiAgICAgICAgICBzZXRMb2dMZXZlbCA6IGZ1bmN0aW9uKG51bWJlciksIHNldExheW91dCA6IGZ1bmN0aW9uKHN0cmluZykgfX1cbiAqL1xubGV0IEFQUEVOREVSO1xuXG4vKipcbiAqIEB0eXBlZGVmIHt7IGFsbG93QXBwZW5kZXJJbmplY3Rpb24gOiBib29sZWFuLCBhcHBlbmRlcnMgOiBBcnJheS48QVBQRU5ERVI+LFxuICogXHRcdFx0YXBwbGljYXRpb24gOiBPYmplY3QsIGxvZ2dlcnMgOiBBcnJheS48TG9nQXBwZW5kZXI+LCBsYXlvdXQgOiBzdHJpbmcgfX1cbiAqL1xubGV0IENPTkZJR19QQVJBTVM7XG5cbmltcG9ydCAqIGFzIGZvcm1hdHRlciBmcm9tICcuL2Zvcm1hdHRlcic7XG5pbXBvcnQgKiBhcyB1dGlsaXR5IGZyb20gJy4vdXRpbGl0eSc7XG5pbXBvcnQge0xvZ0FwcGVuZGVyfSBmcm9tICcuL2FwcGVuZGVyL2FwcGVuZGVyJztcbmltcG9ydCB7TG9nZ2VyfSBmcm9tICcuL2xvZ2dlci9sb2dnZXInO1xuaW1wb3J0IHtMb2dMZXZlbH0gZnJvbSAnLi9jb25zdC9sb2dMZXZlbCc7XG5pbXBvcnQge0NvbnNvbGVBcHBlbmRlcn0gZnJvbSAnLi9hcHBlbmRlci9jb25zb2xlQXBwZW5kZXInO1xuXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBtYWluIGxvZ2dlci4gV2UgdXNlIHRoaXMgaW4gY2FzZSBubyBsb2dnZXIgaXMgc3BlY2lmaWVkXG4gKiBAY29uc3RcbiAqL1xuY29uc3QgX01BSU5fTE9HR0VSID0gJ21haW4nO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IGFwcGVuZGVycyB0aGF0IHNob3VsZCBiZSBpbmNsdWRlZCBpZiBubyBhcHBlbmRlcnMgYXJlIHNwZWNpZmllZFxuICogQGNvbnN0XG4gKi9cbmNvbnN0IF9ERUZBVUxUX0FQUEVOREVSUyA9IFt7XG4gICAgJ2FwcGVuZGVyJyA6IENvbnNvbGVBcHBlbmRlcixcbiAgICAnbGV2ZWwnIDogTG9nTGV2ZWwuSU5GT1xufV07XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgbG9nNGpzMi4gSWYgbm8gY29uZmlndXJhdGlvbiBpcyBzcGVjaWZpZWQsIHRoZW4gdGhpc1xuICogY29uZmlndXJhdGlvbiB3aWxsIGJlIGluamVjdGVkXG4gKiBAY29uc3RcbiAqL1xuY29uc3QgX0RFRkFVTFRfQ09ORklHID0ge1xuICAgICdhbGxvd0FwcGVuZGVySW5qZWN0aW9uJyA6IHRydWUsXG4gICAgJ2FwcGVuZGVycycgOiBfREVGQVVMVF9BUFBFTkRFUlMsXG4gICAgJ2xvZ2dlcnMnIDogW3tcbiAgICAgICAgJ2xldmVsJyA6IExvZ0xldmVsLklORk9cbiAgICB9XSxcbiAgICAnbGF5b3V0JyA6ICclZCBbJXBdICVjIC0gJW0nXG59O1xuXG4vKipcbiAqIFRoZSBtZXRob2RzIHRoYXQgYW4gYXBwZW5kZXIgbXVzdCBjb250YWluXG4gKiBAY29uc3RcbiAqL1xuY29uc3QgX0FQUEVOREVSX01FVEhPRFMgPSBbJ2FwcGVuZCcsICdnZXROYW1lJywgJ2lzQWN0aXZlJywgJ3NldExvZ0xldmVsJywgJ3NldExheW91dCddO1xuXG4vKiogQHR5cGUge09iamVjdH0gKi9cbmxldCBfYXBwZW5kZXJzID0ge307XG4vKiogQHR5cGUgez9DT05GSUdfUEFSQU1TfSAqL1xubGV0IF9jb25maWd1cmF0aW9uID0gbnVsbDtcbi8qKiBAdHlwZSB7Ym9vbGVhbn0gKi9cbmxldCBfZmluYWxpemVkID0gZmFsc2U7XG4vKiogQHR5cGUge09iamVjdH0gKi9cbmxldCBfbG9nZ2VycyA9IHt9O1xuXG4vKipcbiAqIENvbmZpZ3VyZXMgdGhlIGxvZ2dlclxuICpcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGxvZzRqc1xuICpcbiAqIEBwYXJhbXMge0NPTkZJR19QQVJBTVN9IGNvbmZpZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29uZmlndXJlKGNvbmZpZykge1xuXG5cdGlmIChfZmluYWxpemVkKSB7XG5cdFx0Y29uc29sZS5lcnJvcignQ291bGQgbm90IGNvbmZpZ3VyZSAtIGFscmVhZHkgaW4gdXNlJyk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKCFfY29uZmlndXJhdGlvbikge1xuICAgICAgICBfY29uZmlndXJhdGlvbiA9IHt9O1xuICAgIH1cblxuICAgIC8vIHNldCB0aGUgZGVmYXVsdCBsYXlvdXRcbiAgICBpZiAoIWNvbmZpZy5sYXlvdXQgJiYgIV9jb25maWd1cmF0aW9uLmxheW91dCkge1xuICAgICAgICBfY29uZmlndXJhdGlvbi5sYXlvdXQgPSBfREVGQVVMVF9DT05GSUcubGF5b3V0O1xuICAgIH0gZWxzZSBpZiAoY29uZmlnLmxheW91dCkge1xuICAgICAgICBfY29uZmlndXJhdGlvbi5sYXlvdXQgPSBjb25maWcubGF5b3V0O1xuICAgIH1cblxuXHQvLyBjb25maWd1cmUgdGhlIGFwcGVuZGVyc1xuXHRfY29uZmlndXJlQXBwZW5kZXJzKGNvbmZpZy5hcHBlbmRlcnMpO1xuICAgIC8vIGNvbmZpZ3VyZSB0aGUgbG9nZ2Vyc1xuICAgIF9jb25maWd1cmVMb2dnZXJzKGNvbmZpZy5sb2dnZXJzKTtcblxufVxuXG4vKipcbiAqIENvbmZpZ3VyZXMgYXBwZW5kZXJzXG4gKlxuICogQHByaXZhdGVcbiAqIEBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7QXJyYXkuPExvZ0FwcGVuZGVyfGZ1bmN0aW9uPn0gYXBwZW5kZXJzXG4gKi9cbmxldCBfY29uZmlndXJlQXBwZW5kZXJzID0gZnVuY3Rpb24gKGFwcGVuZGVycykge1xuXG4gICAgaWYgKCEoYXBwZW5kZXJzIGluc3RhbmNlb2YgQXJyYXkpKSB7XG4gICAgICAgIGFwcGVuZGVycyA9IF9ERUZBVUxUX0FQUEVOREVSUztcbiAgICB9XG5cbiAgICBhcHBlbmRlcnMuZm9yRWFjaChhcHBlbmRlciA9PiB7XG4gICAgICAgIGlmIChhcHBlbmRlciBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICAgICAgICBhZGRBcHBlbmRlcihhcHBlbmRlcik7XG4gICAgICAgIH1cbiAgICB9KTtcblxufTtcblxuLyoqXG4gKiBDb25maWd1cmVzIHRoZSBsb2dnZXJzXG4gKlxuICogQHByaXZhdGVcbiAqIEBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD59IGxvZ2dlcnNcbiAqL1xubGV0IF9jb25maWd1cmVMb2dnZXJzID0gZnVuY3Rpb24gKGxvZ2dlcnMpIHtcblxuXHRpZiAoIShsb2dnZXJzIGluc3RhbmNlb2YgQXJyYXkpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGxvZ2dlcnMnKTtcblx0fVxuXG4gICAgbG9nZ2Vycy5mb3JFYWNoKGZ1bmN0aW9uIChsb2dnZXIpIHtcblxuICAgICAgICBpZiAoIWxvZ2dlci5sYXlvdXQgfHwgdHlwZW9mIGxvZ2dlci5sYXlvdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBsb2dnZXIubGF5b3V0ID0gX2NvbmZpZ3VyYXRpb24ubGF5b3V0O1xuICAgICAgICB9XG5cbiAgICAgICAgbG9nZ2VyLnRhZyA9IGxvZ2dlci50YWcgfHwgX01BSU5fTE9HR0VSO1xuICAgICAgICBsb2dnZXIubG9nTGV2ZWwgPSBsb2dnZXIubG9nTGV2ZWwgfHwgTG9nTGV2ZWwuRVJST1I7XG5cbiAgICAgICAgX2xvZ2dlcnNbbG9nZ2VyLnRhZ10gPSBfZ2V0QXBwZW5kZXJzRm9yTG9nZ2VyKGxvZ2dlci5sb2dMZXZlbCwgbG9nZ2VyLmxheW91dCk7XG5cbiAgICB9KTtcblxufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBhcHBlbmRlcnMgZm9yIHRoZSBsZXZlbCBhbmQgbGF5b3V0XG4gKlxuICogQHByaXZhdGVcbiAqIEBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBsb2dMZXZlbFxuICogQHBhcmFtIHtzdHJpbmd9IGxheW91dFxuICpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xubGV0IF9nZXRBcHBlbmRlcnNGb3JMb2dnZXIgPSBmdW5jdGlvbiAobG9nTGV2ZWwsIGxheW91dCkge1xuXG4gICAgbGV0IGxvZ2dlcjtcbiAgICBsZXQgYXBwZW5kZXJMaXN0ID0gW107XG5cbiAgICBPYmplY3Qua2V5cyhfYXBwZW5kZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcblxuICAgICAgICBsb2dnZXIgPSAoX2FwcGVuZGVyc1trZXldLnByb3RvdHlwZSBpbnN0YW5jZW9mIExvZ0FwcGVuZGVyKSA/IG5ldyBfYXBwZW5kZXJzW2tleV0oKSA6IF9hcHBlbmRlcnNba2V5XSgpO1xuXG4gICAgICAgIGxvZ2dlci5zZXRMb2dMZXZlbChsb2dMZXZlbCk7XG4gICAgICAgIGxvZ2dlci5zZXRMYXlvdXQobGF5b3V0KTtcblxuICAgICAgICBhcHBlbmRlckxpc3QucHVzaChsb2dnZXIpO1xuXG4gICAgfSk7XG5cblx0cmV0dXJuIGFwcGVuZGVyTGlzdDtcblxufTtcblxuLyoqXG4gKiBBZGRzIGFuIGFwcGVuZGVyIHRvIHRoZSBhcHBlbmRlciBxdWV1ZS4gSWYgdGhlIHN0YWNrIGlzIGZpbmFsaXplZCwgYW5kXG4gKiB0aGUgYWxsb3dBcHBlbmRlckluamVjdGlvbiBpcyBzZXQgdG8gZmFsc2UsIHRoZW4gdGhlIGV2ZW50IHdpbGwgbm90IGJlXG4gKiBhcHBlbmRlZFxuICpcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGxvZzRqc1xuICpcbiAqIEBwYXJhbXMge0xvZ0FwcGVuZGVyfSBhcHBlbmRlclxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkQXBwZW5kZXIoYXBwZW5kZXIpIHtcblxuXHRpZiAoX2ZpbmFsaXplZCAmJiAhX2NvbmZpZ3VyYXRpb24uYWxsb3dBcHBlbmRlckluamVjdGlvbikge1xuXHRcdGNvbnNvbGUuZXJyb3IoJ0Nhbm5vdCBhZGQgYXBwZW5kZXIgd2hlbiBjb25maWd1cmF0aW9uIGZpbmFsaXplZCcpO1xuXHRcdHJldHVybjtcblx0fVxuXG4gICAgX3ZhbGlkYXRlQXBwZW5kZXIoYXBwZW5kZXIpO1xuXG4gICAgLy8gb25seSBwdXQgdGhlIGFwcGVuZGVyIGludG8gdGhlIHNldCBpZiBpdCBkb2Vzbid0IGV4aXN0IGFscmVhZHlcbiAgICBpZiAoIV9hcHBlbmRlcnNbYXBwZW5kZXIubmFtZV0pIHtcbiAgICAgICAgX2FwcGVuZGVyc1thcHBlbmRlci5uYW1lXSA9IGFwcGVuZGVyO1xuICAgIH1cblxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGF0IHRoZSBhcHBlbmRlclxuICpcbiAqIEBwcml2YXRlXG4gKiBAZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW1zIHtBUFBFTkRFUn0gYXBwZW5kZXJcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiB0aGUgYXBwZW5kZXIgaXMgaW52YWxpZFxuICovXG5sZXQgX3ZhbGlkYXRlQXBwZW5kZXIgPSBmdW5jdGlvbiAoYXBwZW5kZXIpIHtcblxuICAgIC8vIGlmIHdlIGFyZSBydW5uaW5nIEVTNiwgd2UgY2FuIG1ha2Ugc3VyZSBpdCBleHRlbmRzIExvZ0FwcGVuZGVyXG4gICAgLy8gb3RoZXJ3aXNlLCBpdCBtdXN0IGJlIGEgZnVuY3Rpb25cbiAgICBpZiAoYXBwZW5kZXIucHJvdG90eXBlIGluc3RhbmNlb2YgTG9nQXBwZW5kZXIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoIShhcHBlbmRlciBpbnN0YW5jZW9mIEZ1bmN0aW9uKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcignSW52YWxpZCBhcHBlbmRlcjogbm90IGEgZnVuY3Rpb24gb3IgY2xhc3MgTG9nQXBwZW5kZXInKTtcblx0fVxuXG5cdC8vIGluc3RhbnRpYXRlIHRoZSBhcHBlbmRlciBmdW5jdGlvblxuXHRsZXQgYXBwZW5kZXJPYmogPSBhcHBlbmRlcigpO1xuXG4gICAgLy8gZW5zdXJlIHRoYXQgdGhlIGFwcGVuZGVyIG1ldGhvZHMgYXJlIHByZXNlbnQgKGFuZCBhcmUgZnVuY3Rpb25zKVxuICAgIF9BUFBFTkRFUl9NRVRIT0RTLmZvckVhY2goZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgICAgaWYgKGFwcGVuZGVyT2JqW2VsZW1lbnRdID09IHVuZGVmaW5lZCB8fCAhKGFwcGVuZGVyT2JqW2VsZW1lbnRdIGluc3RhbmNlb2YgRnVuY3Rpb24pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgYXBwZW5kZXI6IG1pc3NpbmcvaW52YWxpZCBtZXRob2Q6ICR7ZWxlbWVudH1gKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG59O1xuXG4vKipcbiAqIEFwcGVuZHMgdGhlIGxvZyBldmVudFxuICpcbiAqIEBwcml2YXRlXG4gKiBAZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gbG9nRXZlbnRcbiAqL1xuZnVuY3Rpb24gX2FwcGVuZChsb2dFdmVudCkge1xuXG5cdC8vIGZpbmFsaXplIHRoZSBjb25maWd1cmF0aW9uIHRvIG1ha2Ugc3VyZSBubyBvdGhlciBhcHBlbmRlciBjYW4gYmUgaW5qZWN0ZWQgKGlmIHNldClcblx0X2ZpbmFsaXplZCA9IHRydWU7XG5cbiAgICAvLyBjeWNsZSB0aHJvdWdoIGVhY2ggYXBwZW5kZXIgZm9yIHRoZSBsb2dnZXIgYW5kIGFwcGVuZCB0aGUgbG9nZ2luZyBldmVudFxuICAgIChfbG9nZ2Vyc1tsb2dFdmVudC5sb2dnZXJdIHx8IF9sb2dnZXJzW19NQUlOX0xPR0dFUl0pLmZvckVhY2goZnVuY3Rpb24gKGxvZ2dlcikge1xuICAgICAgICBpZiAobG9nZ2VyLmlzQWN0aXZlKGxvZ0V2ZW50LmxldmVsKSkge1xuICAgICAgICAgICAgbG9nZ2VyLmFwcGVuZChsb2dFdmVudCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxufVxuXG4vKipcbiAqIEhhbmRsZXMgY3JlYXRpbmcgdGhlIGxvZ2dlciBhbmQgcmV0dXJuaW5nIGl0XG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgbG9nNGpzXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbnxzdHJpbmc9fSBjb250ZXh0XG4gKlxuICogQHJldHVybiB7TG9nZ2VyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TG9nZ2VyKGNvbnRleHQpIHtcblxuXHQvLyB3ZSBuZWVkIHRvIGluaXRpYWxpemUgaWYgd2UgaGF2ZW4ndFxuXHRpZiAoIV9jb25maWd1cmF0aW9uKSB7XG5cdFx0Y29uZmlndXJlKF9ERUZBVUxUX0NPTkZJRyk7XG5cdH1cblxuICAgIC8vIGRldGVybWluZSB0aGUgY29udGV4dFxuICAgIGlmICh0eXBlb2YgY29udGV4dCAhPSAnc3RyaW5nJykge1xuXG4gICAgICAgIGlmICh0eXBlb2YgY29udGV4dCA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjb250ZXh0ID0gdXRpbGl0eS5nZXRGdW5jdGlvbk5hbWUoY29udGV4dCk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbnRleHQgPT0gJ29iamVjdCcpIHtcblxuICAgICAgICAgICAgY29udGV4dCA9IHV0aWxpdHkuZ2V0RnVuY3Rpb25OYW1lKGNvbnRleHQuY29uc3RydWN0b3IpO1xuXG4gICAgICAgICAgICBpZiAoY29udGV4dCA9PSAnT2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIGNvbnRleHQgPSAnYW5vbnltb3VzJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29udGV4dCA9IF9NQUlOX0xPR0dFUjtcbiAgICAgICAgfVxuXG4gICAgfVxuXG5cdHJldHVybiBuZXcgTG9nZ2VyKGNvbnRleHQsIHtcblx0XHQnYXBwZW5kJyA6IF9hcHBlbmRcblx0fSk7XG5cbn1cblxuXG5cbi8qKlxuICogU2V0cyB0aGUgbG9nIGxldmVsIGZvciBhbGwgYXBwZW5kZXJzIG9mIGEgbG9nZ2VyLCBvciBzcGVjaWZpZWQgbG9nZ2VyXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgbG9nNGpzXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGxvZ0xldmVsXG4gKiBAcGFyYW0ge3N0cmluZz19IGxvZ2dlclxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TG9nTGV2ZWwobG9nTGV2ZWwsIGxvZ2dlcikge1xuXG4gICAgaWYgKGxvZ0xldmVsIGluc3RhbmNlb2YgTnVtYmVyKSB7XG5cbiAgICAgICAgaWYgKGxvZ2dlcikge1xuICAgICAgICAgICAgaWYgKF9sb2dnZXJzW2xvZ2dlcl0pIHtcbiAgICAgICAgICAgICAgICBfbG9nZ2Vyc1tsb2dnZXJdLnNldExvZ0xldmVsKGxvZ0xldmVsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBfbG9nZ2Vycykge1xuICAgICAgICAgICAgICAgIGlmIChfbG9nZ2Vycy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIF9sb2dnZXJzW2tleV0uZm9yRWFjaChmdW5jdGlvbiAoYXBwZW5kZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZGVyLnNldExvZ0xldmVsKGxvZ0xldmVsKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9XG5cbn1cblxuYWRkQXBwZW5kZXIoQ29uc29sZUFwcGVuZGVyKTtcblxuZXhwb3J0IHsgTG9nTGV2ZWwgfTtcbmV4cG9ydCB7IExvZ0FwcGVuZGVyIH07XG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbImNvbmZpZ3VyZSIsImFkZEFwcGVuZGVyIiwiZ2V0TG9nZ2VyIiwic2V0TG9nTGV2ZWwiLCJmb3JtYXR0ZXIiLCJ1dGlsaXR5IiwiQVBQRU5ERVIiLCJDT05GSUdfUEFSQU1TIiwiX01BSU5fTE9HR0VSIiwiX0RFRkFVTFRfQVBQRU5ERVJTIiwiSU5GTyIsIl9ERUZBVUxUX0NPTkZJRyIsIl9BUFBFTkRFUl9NRVRIT0RTIiwiX2FwcGVuZGVycyIsIl9jb25maWd1cmF0aW9uIiwiX2ZpbmFsaXplZCIsIl9sb2dnZXJzIiwiY29uZmlnIiwiY29uc29sZSIsImVycm9yIiwibGF5b3V0IiwiX2NvbmZpZ3VyZUFwcGVuZGVycyIsImFwcGVuZGVycyIsIl9jb25maWd1cmVMb2dnZXJzIiwibG9nZ2VycyIsIkFycmF5IiwiZm9yRWFjaCIsImFwcGVuZGVyIiwiRnVuY3Rpb24iLCJFcnJvciIsImxvZ2dlciIsInRhZyIsImxvZ0xldmVsIiwiRVJST1IiLCJfZ2V0QXBwZW5kZXJzRm9yTG9nZ2VyIiwiYXBwZW5kZXJMaXN0IiwiT2JqZWN0Iiwia2V5cyIsImtleSIsInByb3RvdHlwZSIsInNldExheW91dCIsInB1c2giLCJhbGxvd0FwcGVuZGVySW5qZWN0aW9uIiwiX3ZhbGlkYXRlQXBwZW5kZXIiLCJuYW1lIiwiYXBwZW5kZXJPYmoiLCJlbGVtZW50IiwidW5kZWZpbmVkIiwiX2FwcGVuZCIsImxvZ0V2ZW50IiwiaXNBY3RpdmUiLCJsZXZlbCIsImFwcGVuZCIsImNvbnRleHQiLCJnZXRGdW5jdGlvbk5hbWUiLCJjb25zdHJ1Y3RvciIsIk51bWJlciIsImlzSW50ZWdlciIsImhhc093blByb3BlcnR5IiwiTG9nTGV2ZWwiLCJMb2dBcHBlbmRlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztRQWdGZ0JBLFMsR0FBQUEsUztnQ0FxSEFDLFcsR0FBQUEsVztnQ0ErRUFDLFMsR0FBQUEsUztnQ0EyQ0FDLFcsR0FBQUEsVzs7QUExU2hCOzs0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QU8sMkNBQVc2QyxPQUFYLEVBQW9CO0FBQzFCLGtCQUFXTDtBQURlLEtBQXBCLENBQVA7QUFJQTs7QUFJRDs7Ozs7Ozs7O0FBU08sU0FBUzdDLFdBQVQsQ0FBcUI2QixRQUFyQixFQUErQkYsTUFBL0IsRUFBdUM7O0FBRTFDLFFBQUkwQixPQUFPQyxTQUFQLENBQWlCekIsUUFBakIsQ0FBSixFQUFnQzs7QUFFNUIsWUFBSUYsTUFBSixFQUFZO0FBQ1IsZ0JBQUlkLFNBQVNjLE1BQVQsQ0FBSixFQUFzQjtBQUNsQmQseUJBQVNjLE1BQVQsRUFBaUIzQixXQUFqQixDQUE2QjZCLFFBQTdCO0FBQ0g7QUFDSixTQUpELE1BSU87QUFDSCxpQkFBSyxJQUFJTSxHQUFULElBQWdCdEIsUUFBaEIsRUFBMEI7QUFDdEIsb0JBQUlBLFNBQVMwQyxjQUFULENBQXdCcEIsR0FBeEIsQ0FBSixFQUFrQztBQUM5QnRCLDZCQUFTc0IsR0FBVCxFQUFjWixPQUFkLENBQXNCLFVBQVVDLFFBQVYsRUFBb0I7QUFDdENBLGlDQUFTeEIsV0FBVCxDQUFxQjZCLFFBQXJCO0FBQ0gscUJBRkQ7QUFHSDtBQUNKO0FBQ0o7QUFFSjtBQUVKOztBQUVEL0I7O2dDQUVTMEQsUTtnQ0FDQUMsVyIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogbG9nNGpzIDxodHRwczovL2dpdGh1Yi5jb20vYW5pZ2VuZXJvL2xvZzRqcz5cbiAqXG4gKiBDb3B5cmlnaHQgMjAxNiBSb2JpbiBTY2h1bHR6IDxodHRwOi8vYW5pZ2VuZXJvLmNvbT5cbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZVxuICovXG5cbi8qKlxuICogSG9sZHMgdGhlIGRlZmluaXRpb24gZm9yIHRoZSBhcHBlbmRlciBjbG9zdXJlXG4gKlxuICogQHR5cGVkZWYge3sgYXBwZW5kIDogZnVuY3Rpb24gKG51bWJlciwgTE9HX0VWRU5UKSwgaXNBY3RpdmUgOiBmdW5jdGlvbigpLFxuICogICAgICAgICAgc2V0TG9nTGV2ZWwgOiBmdW5jdGlvbihudW1iZXIpLCBzZXRMYXlvdXQgOiBmdW5jdGlvbihzdHJpbmcpIH19XG4gKi9cbmxldCBBUFBFTkRFUjtcblxuLyoqXG4gKiBAdHlwZWRlZiB7eyBhbGxvd0FwcGVuZGVySW5qZWN0aW9uIDogYm9vbGVhbiwgYXBwZW5kZXJzIDogQXJyYXkuPEFQUEVOREVSPixcbiAqIFx0XHRcdGFwcGxpY2F0aW9uIDogT2JqZWN0LCBsb2dnZXJzIDogQXJyYXkuPExvZ0FwcGVuZGVyPiwgbGF5b3V0IDogc3RyaW5nIH19XG4gKi9cbmxldCBDT05GSUdfUEFSQU1TO1xuXG5pbXBvcnQgKiBhcyBmb3JtYXR0ZXIgZnJvbSAnLi9mb3JtYXR0ZXInO1xuaW1wb3J0ICogYXMgdXRpbGl0eSBmcm9tICcuL3V0aWxpdHknO1xuaW1wb3J0IHtMb2dBcHBlbmRlcn0gZnJvbSAnLi9hcHBlbmRlci9hcHBlbmRlcic7XG5pbXBvcnQge0xvZ2dlcn0gZnJvbSAnLi9sb2dnZXIvbG9nZ2VyJztcbmltcG9ydCB7TG9nTGV2ZWx9IGZyb20gJy4vY29uc3QvbG9nTGV2ZWwnO1xuaW1wb3J0IHtDb25zb2xlQXBwZW5kZXJ9IGZyb20gJy4vYXBwZW5kZXIvY29uc29sZUFwcGVuZGVyJztcblxuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgbWFpbiBsb2dnZXIuIFdlIHVzZSB0aGlzIGluIGNhc2Ugbm8gbG9nZ2VyIGlzIHNwZWNpZmllZFxuICogQGNvbnN0XG4gKi9cbmNvbnN0IF9NQUlOX0xPR0dFUiA9ICdtYWluJztcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBhcHBlbmRlcnMgdGhhdCBzaG91bGQgYmUgaW5jbHVkZWQgaWYgbm8gYXBwZW5kZXJzIGFyZSBzcGVjaWZpZWRcbiAqIEBjb25zdFxuICovXG5jb25zdCBfREVGQVVMVF9BUFBFTkRFUlMgPSBbe1xuICAgICdhcHBlbmRlcicgOiBDb25zb2xlQXBwZW5kZXIsXG4gICAgJ2xldmVsJyA6IExvZ0xldmVsLklORk9cbn1dO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yIGxvZzRqczIuIElmIG5vIGNvbmZpZ3VyYXRpb24gaXMgc3BlY2lmaWVkLCB0aGVuIHRoaXNcbiAqIGNvbmZpZ3VyYXRpb24gd2lsbCBiZSBpbmplY3RlZFxuICogQGNvbnN0XG4gKi9cbmNvbnN0IF9ERUZBVUxUX0NPTkZJRyA9IHtcbiAgICAnYWxsb3dBcHBlbmRlckluamVjdGlvbicgOiB0cnVlLFxuICAgICdhcHBlbmRlcnMnIDogX0RFRkFVTFRfQVBQRU5ERVJTLFxuICAgICdsb2dnZXJzJyA6IFt7XG4gICAgICAgICdsZXZlbCcgOiBMb2dMZXZlbC5JTkZPXG4gICAgfV0sXG4gICAgJ2xheW91dCcgOiAnJWQgWyVwXSAlYyAtICVtJ1xufTtcblxuLyoqXG4gKiBUaGUgbWV0aG9kcyB0aGF0IGFuIGFwcGVuZGVyIG11c3QgY29udGFpblxuICogQGNvbnN0XG4gKi9cbmNvbnN0IF9BUFBFTkRFUl9NRVRIT0RTID0gWydhcHBlbmQnLCAnZ2V0TmFtZScsICdpc0FjdGl2ZScsICdzZXRMb2dMZXZlbCcsICdzZXRMYXlvdXQnXTtcblxuLyoqIEB0eXBlIHtPYmplY3R9ICovXG5sZXQgX2FwcGVuZGVycyA9IHt9O1xuLyoqIEB0eXBlIHs/Q09ORklHX1BBUkFNU30gKi9cbmxldCBfY29uZmlndXJhdGlvbiA9IG51bGw7XG4vKiogQHR5cGUge2Jvb2xlYW59ICovXG5sZXQgX2ZpbmFsaXplZCA9IGZhbHNlO1xuLyoqIEB0eXBlIHtPYmplY3R9ICovXG5sZXQgX2xvZ2dlcnMgPSB7fTtcblxuLyoqXG4gKiBDb25maWd1cmVzIHRoZSBsb2dnZXJcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBsb2c0anNcbiAqXG4gKiBAcGFyYW1zIHtDT05GSUdfUEFSQU1TfSBjb25maWdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbmZpZ3VyZShjb25maWcpIHtcblxuXHRpZiAoX2ZpbmFsaXplZCkge1xuXHRcdGNvbnNvbGUuZXJyb3IoJ0NvdWxkIG5vdCBjb25maWd1cmUgLSBhbHJlYWR5IGluIHVzZScpO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmICghX2NvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgX2NvbmZpZ3VyYXRpb24gPSB7fTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIGRlZmF1bHQgbGF5b3V0XG4gICAgaWYgKCFjb25maWcubGF5b3V0ICYmICFfY29uZmlndXJhdGlvbi5sYXlvdXQpIHtcbiAgICAgICAgX2NvbmZpZ3VyYXRpb24ubGF5b3V0ID0gX0RFRkFVTFRfQ09ORklHLmxheW91dDtcbiAgICB9IGVsc2UgaWYgKGNvbmZpZy5sYXlvdXQpIHtcbiAgICAgICAgX2NvbmZpZ3VyYXRpb24ubGF5b3V0ID0gY29uZmlnLmxheW91dDtcbiAgICB9XG5cblx0Ly8gY29uZmlndXJlIHRoZSBhcHBlbmRlcnNcblx0X2NvbmZpZ3VyZUFwcGVuZGVycyhjb25maWcuYXBwZW5kZXJzKTtcbiAgICAvLyBjb25maWd1cmUgdGhlIGxvZ2dlcnNcbiAgICBfY29uZmlndXJlTG9nZ2Vycyhjb25maWcubG9nZ2Vycyk7XG5cbn1cblxuLyoqXG4gKiBDb25maWd1cmVzIGFwcGVuZGVyc1xuICpcbiAqIEBwcml2YXRlXG4gKiBAZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge0FycmF5LjxMb2dBcHBlbmRlcnxmdW5jdGlvbj59IGFwcGVuZGVyc1xuICovXG5sZXQgX2NvbmZpZ3VyZUFwcGVuZGVycyA9IGZ1bmN0aW9uIChhcHBlbmRlcnMpIHtcblxuICAgIGlmICghKGFwcGVuZGVycyBpbnN0YW5jZW9mIEFycmF5KSkge1xuICAgICAgICBhcHBlbmRlcnMgPSBfREVGQVVMVF9BUFBFTkRFUlM7XG4gICAgfVxuXG4gICAgYXBwZW5kZXJzLmZvckVhY2goYXBwZW5kZXIgPT4ge1xuICAgICAgICBpZiAoYXBwZW5kZXIgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICAgICAgYWRkQXBwZW5kZXIoYXBwZW5kZXIpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbn07XG5cbi8qKlxuICogQ29uZmlndXJlcyB0aGUgbG9nZ2Vyc1xuICpcbiAqIEBwcml2YXRlXG4gKiBAZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+fSBsb2dnZXJzXG4gKi9cbmxldCBfY29uZmlndXJlTG9nZ2VycyA9IGZ1bmN0aW9uIChsb2dnZXJzKSB7XG5cblx0aWYgKCEobG9nZ2VycyBpbnN0YW5jZW9mIEFycmF5KSkge1xuXHRcdHRocm93IG5ldyBFcnJvcignSW52YWxpZCBsb2dnZXJzJyk7XG5cdH1cblxuICAgIGxvZ2dlcnMuZm9yRWFjaChmdW5jdGlvbiAobG9nZ2VyKSB7XG5cbiAgICAgICAgaWYgKCFsb2dnZXIubGF5b3V0IHx8IHR5cGVvZiBsb2dnZXIubGF5b3V0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgbG9nZ2VyLmxheW91dCA9IF9jb25maWd1cmF0aW9uLmxheW91dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxvZ2dlci50YWcgPSBsb2dnZXIudGFnIHx8IF9NQUlOX0xPR0dFUjtcbiAgICAgICAgbG9nZ2VyLmxvZ0xldmVsID0gbG9nZ2VyLmxvZ0xldmVsIHx8IExvZ0xldmVsLkVSUk9SO1xuXG4gICAgICAgIF9sb2dnZXJzW2xvZ2dlci50YWddID0gX2dldEFwcGVuZGVyc0ZvckxvZ2dlcihsb2dnZXIubG9nTGV2ZWwsIGxvZ2dlci5sYXlvdXQpO1xuXG4gICAgfSk7XG5cbn07XG5cbi8qKlxuICogR2V0cyB0aGUgYXBwZW5kZXJzIGZvciB0aGUgbGV2ZWwgYW5kIGxheW91dFxuICpcbiAqIEBwcml2YXRlXG4gKiBAZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gbG9nTGV2ZWxcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYXlvdXRcbiAqXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbmxldCBfZ2V0QXBwZW5kZXJzRm9yTG9nZ2VyID0gZnVuY3Rpb24gKGxvZ0xldmVsLCBsYXlvdXQpIHtcblxuICAgIGxldCBsb2dnZXI7XG4gICAgbGV0IGFwcGVuZGVyTGlzdCA9IFtdO1xuXG4gICAgT2JqZWN0LmtleXMoX2FwcGVuZGVycykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG5cbiAgICAgICAgbG9nZ2VyID0gKF9hcHBlbmRlcnNba2V5XS5wcm90b3R5cGUgaW5zdGFuY2VvZiBMb2dBcHBlbmRlcikgPyBuZXcgX2FwcGVuZGVyc1trZXldKCkgOiBfYXBwZW5kZXJzW2tleV0oKTtcblxuICAgICAgICBsb2dnZXIuc2V0TG9nTGV2ZWwobG9nTGV2ZWwpO1xuICAgICAgICBsb2dnZXIuc2V0TGF5b3V0KGxheW91dCk7XG5cbiAgICAgICAgYXBwZW5kZXJMaXN0LnB1c2gobG9nZ2VyKTtcblxuICAgIH0pO1xuXG5cdHJldHVybiBhcHBlbmRlckxpc3Q7XG5cbn07XG5cbi8qKlxuICogQWRkcyBhbiBhcHBlbmRlciB0byB0aGUgYXBwZW5kZXIgcXVldWUuIElmIHRoZSBzdGFjayBpcyBmaW5hbGl6ZWQsIGFuZFxuICogdGhlIGFsbG93QXBwZW5kZXJJbmplY3Rpb24gaXMgc2V0IHRvIGZhbHNlLCB0aGVuIHRoZSBldmVudCB3aWxsIG5vdCBiZVxuICogYXBwZW5kZWRcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBsb2c0anNcbiAqXG4gKiBAcGFyYW1zIHtMb2dBcHBlbmRlcn0gYXBwZW5kZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZEFwcGVuZGVyKGFwcGVuZGVyKSB7XG5cblx0aWYgKF9maW5hbGl6ZWQgJiYgIV9jb25maWd1cmF0aW9uLmFsbG93QXBwZW5kZXJJbmplY3Rpb24pIHtcblx0XHRjb25zb2xlLmVycm9yKCdDYW5ub3QgYWRkIGFwcGVuZGVyIHdoZW4gY29uZmlndXJhdGlvbiBmaW5hbGl6ZWQnKTtcblx0XHRyZXR1cm47XG5cdH1cblxuICAgIF92YWxpZGF0ZUFwcGVuZGVyKGFwcGVuZGVyKTtcblxuICAgIC8vIG9ubHkgcHV0IHRoZSBhcHBlbmRlciBpbnRvIHRoZSBzZXQgaWYgaXQgZG9lc24ndCBleGlzdCBhbHJlYWR5XG4gICAgaWYgKCFfYXBwZW5kZXJzW2FwcGVuZGVyLm5hbWVdKSB7XG4gICAgICAgIF9hcHBlbmRlcnNbYXBwZW5kZXIubmFtZV0gPSBhcHBlbmRlcjtcbiAgICB9XG5cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhhdCB0aGUgYXBwZW5kZXJcbiAqXG4gKiBAcHJpdmF0ZVxuICogQGZ1bmN0aW9uXG4gKlxuICogQHBhcmFtcyB7QVBQRU5ERVJ9IGFwcGVuZGVyXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlIGFwcGVuZGVyIGlzIGludmFsaWRcbiAqL1xubGV0IF92YWxpZGF0ZUFwcGVuZGVyID0gZnVuY3Rpb24gKGFwcGVuZGVyKSB7XG5cbiAgICAvLyBpZiB3ZSBhcmUgcnVubmluZyBFUzYsIHdlIGNhbiBtYWtlIHN1cmUgaXQgZXh0ZW5kcyBMb2dBcHBlbmRlclxuICAgIC8vIG90aGVyd2lzZSwgaXQgbXVzdCBiZSBhIGZ1bmN0aW9uXG4gICAgaWYgKGFwcGVuZGVyLnByb3RvdHlwZSBpbnN0YW5jZW9mIExvZ0FwcGVuZGVyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKCEoYXBwZW5kZXIgaW5zdGFuY2VvZiBGdW5jdGlvbikpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXBwZW5kZXI6IG5vdCBhIGZ1bmN0aW9uIG9yIGNsYXNzIExvZ0FwcGVuZGVyJyk7XG5cdH1cblxuXHQvLyBpbnN0YW50aWF0ZSB0aGUgYXBwZW5kZXIgZnVuY3Rpb25cblx0bGV0IGFwcGVuZGVyT2JqID0gYXBwZW5kZXIoKTtcblxuICAgIC8vIGVuc3VyZSB0aGF0IHRoZSBhcHBlbmRlciBtZXRob2RzIGFyZSBwcmVzZW50IChhbmQgYXJlIGZ1bmN0aW9ucylcbiAgICBfQVBQRU5ERVJfTUVUSE9EUy5mb3JFYWNoKGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgIGlmIChhcHBlbmRlck9ialtlbGVtZW50XSA9PSB1bmRlZmluZWQgfHwgIShhcHBlbmRlck9ialtlbGVtZW50XSBpbnN0YW5jZW9mIEZ1bmN0aW9uKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGFwcGVuZGVyOiBtaXNzaW5nL2ludmFsaWQgbWV0aG9kOiAke2VsZW1lbnR9YCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxufTtcblxuLyoqXG4gKiBBcHBlbmRzIHRoZSBsb2cgZXZlbnRcbiAqXG4gKiBAcHJpdmF0ZVxuICogQGZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGxvZ0V2ZW50XG4gKi9cbmZ1bmN0aW9uIF9hcHBlbmQobG9nRXZlbnQpIHtcblxuXHQvLyBmaW5hbGl6ZSB0aGUgY29uZmlndXJhdGlvbiB0byBtYWtlIHN1cmUgbm8gb3RoZXIgYXBwZW5kZXIgY2FuIGJlIGluamVjdGVkIChpZiBzZXQpXG5cdF9maW5hbGl6ZWQgPSB0cnVlO1xuXG4gICAgLy8gY3ljbGUgdGhyb3VnaCBlYWNoIGFwcGVuZGVyIGZvciB0aGUgbG9nZ2VyIGFuZCBhcHBlbmQgdGhlIGxvZ2dpbmcgZXZlbnRcbiAgICAoX2xvZ2dlcnNbbG9nRXZlbnQubG9nZ2VyXSB8fCBfbG9nZ2Vyc1tfTUFJTl9MT0dHRVJdKS5mb3JFYWNoKGZ1bmN0aW9uIChsb2dnZXIpIHtcbiAgICAgICAgaWYgKGxvZ2dlci5pc0FjdGl2ZShsb2dFdmVudC5sZXZlbCkpIHtcbiAgICAgICAgICAgIGxvZ2dlci5hcHBlbmQobG9nRXZlbnQpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbn1cblxuLyoqXG4gKiBIYW5kbGVzIGNyZWF0aW5nIHRoZSBsb2dnZXIgYW5kIHJldHVybmluZyBpdFxuICpcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGxvZzRqc1xuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb258c3RyaW5nPX0gY29udGV4dFxuICpcbiAqIEByZXR1cm4ge0xvZ2dlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExvZ2dlcihjb250ZXh0KSB7XG5cblx0Ly8gd2UgbmVlZCB0byBpbml0aWFsaXplIGlmIHdlIGhhdmVuJ3Rcblx0aWYgKCFfY29uZmlndXJhdGlvbikge1xuXHRcdGNvbmZpZ3VyZShfREVGQVVMVF9DT05GSUcpO1xuXHR9XG5cbiAgICAvLyBkZXRlcm1pbmUgdGhlIGNvbnRleHRcbiAgICBpZiAodHlwZW9mIGNvbnRleHQgIT09ICdzdHJpbmcnKSB7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjb250ZXh0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjb250ZXh0ID0gdXRpbGl0eS5nZXRGdW5jdGlvbk5hbWUoY29udGV4dCk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbnRleHQgPT09ICdvYmplY3QnKSB7XG5cbiAgICAgICAgICAgIGNvbnRleHQgPSB1dGlsaXR5LmdldEZ1bmN0aW9uTmFtZShjb250ZXh0LmNvbnN0cnVjdG9yKTtcblxuICAgICAgICAgICAgaWYgKGNvbnRleHQgPT09ICdPYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgY29udGV4dCA9ICdhbm9ueW1vdXMnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250ZXh0ID0gX01BSU5fTE9HR0VSO1xuICAgICAgICB9XG5cbiAgICB9XG5cblx0cmV0dXJuIG5ldyBMb2dnZXIoY29udGV4dCwge1xuXHRcdCdhcHBlbmQnIDogX2FwcGVuZFxuXHR9KTtcblxufVxuXG5cblxuLyoqXG4gKiBTZXRzIHRoZSBsb2cgbGV2ZWwgZm9yIGFsbCBhcHBlbmRlcnMgb2YgYSBsb2dnZXIsIG9yIHNwZWNpZmllZCBsb2dnZXJcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBsb2c0anNcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gbG9nTGV2ZWxcbiAqIEBwYXJhbSB7c3RyaW5nPX0gbG9nZ2VyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRMb2dMZXZlbChsb2dMZXZlbCwgbG9nZ2VyKSB7XG5cbiAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihsb2dMZXZlbCkpIHtcblxuICAgICAgICBpZiAobG9nZ2VyKSB7XG4gICAgICAgICAgICBpZiAoX2xvZ2dlcnNbbG9nZ2VyXSkge1xuICAgICAgICAgICAgICAgIF9sb2dnZXJzW2xvZ2dlcl0uc2V0TG9nTGV2ZWwobG9nTGV2ZWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIF9sb2dnZXJzKSB7XG4gICAgICAgICAgICAgICAgaWYgKF9sb2dnZXJzLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgX2xvZ2dlcnNba2V5XS5mb3JFYWNoKGZ1bmN0aW9uIChhcHBlbmRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kZXIuc2V0TG9nTGV2ZWwobG9nTGV2ZWwpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIH1cblxufVxuXG5hZGRBcHBlbmRlcihDb25zb2xlQXBwZW5kZXIpO1xuXG5leHBvcnQgeyBMb2dMZXZlbCB9O1xuZXhwb3J0IHsgTG9nQXBwZW5kZXIgfTtcbiJdfQ== \ No newline at end of file diff --git a/dist/es5/log4js2.js b/dist/es5/log4js2.js index 5b50a23..ed37a77 100644 --- a/dist/es5/log4js2.js +++ b/dist/es5/log4js2.js @@ -352,15 +352,15 @@ return /******/ (function(modules) { // webpackBootstrap } // determine the context - if (typeof context != 'string') { + if (typeof context !== 'string') { - if (typeof context == 'function') { + if (typeof context === 'function') { context = utility.getFunctionName(context); - } else if ( /*istanbul ignore next*/(typeof context === 'undefined' ? 'undefined' : _typeof(context)) == 'object') { + } else if ( /*istanbul ignore next*/(typeof context === 'undefined' ? 'undefined' : _typeof(context)) === 'object') { context = utility.getFunctionName(context.constructor); - if (context == 'Object') { + if (context === 'Object') { context = 'anonymous'; } } else { @@ -384,7 +384,7 @@ return /******/ (function(modules) { // webpackBootstrap */ function setLogLevel(logLevel, logger) { - if (logLevel instanceof Number) { + if (Number.isInteger(logLevel)) { if (logger) { if (_loggers[logger]) { @@ -406,7 +406,7 @@ return /******/ (function(modules) { // webpackBootstrap /*istanbul ignore next*/exports.LogLevel = _logLevel.LogLevel; /*istanbul ignore next*/exports.LogAppender = _appender.LogAppender; - //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbImNvbmZpZ3VyZSIsImFkZEFwcGVuZGVyIiwiZ2V0TG9nZ2VyIiwic2V0TG9nTGV2ZWwiLCJmb3JtYXR0ZXIiLCJ1dGlsaXR5IiwiQVBQRU5ERVIiLCJDT05GSUdfUEFSQU1TIiwiX01BSU5fTE9HR0VSIiwiX0RFRkFVTFRfQVBQRU5ERVJTIiwiSU5GTyIsIl9ERUZBVUxUX0NPTkZJRyIsIl9BUFBFTkRFUl9NRVRIT0RTIiwiX2FwcGVuZGVycyIsIl9jb25maWd1cmF0aW9uIiwiX2ZpbmFsaXplZCIsIl9sb2dnZXJzIiwiY29uZmlnIiwiY29uc29sZSIsImVycm9yIiwibGF5b3V0IiwiX2NvbmZpZ3VyZUFwcGVuZGVycyIsImFwcGVuZGVycyIsIl9jb25maWd1cmVMb2dnZXJzIiwibG9nZ2VycyIsIkFycmF5IiwiZm9yRWFjaCIsImFwcGVuZGVyIiwiRnVuY3Rpb24iLCJFcnJvciIsImxvZ2dlciIsInRhZyIsImxvZ0xldmVsIiwiRVJST1IiLCJfZ2V0QXBwZW5kZXJzRm9yTG9nZ2VyIiwiYXBwZW5kZXJMaXN0IiwiT2JqZWN0Iiwia2V5cyIsImtleSIsInByb3RvdHlwZSIsInNldExheW91dCIsInB1c2giLCJhbGxvd0FwcGVuZGVySW5qZWN0aW9uIiwiX3ZhbGlkYXRlQXBwZW5kZXIiLCJuYW1lIiwiYXBwZW5kZXJPYmoiLCJlbGVtZW50IiwidW5kZWZpbmVkIiwiX2FwcGVuZCIsImxvZ0V2ZW50IiwiaXNBY3RpdmUiLCJsZXZlbCIsImFwcGVuZCIsImNvbnRleHQiLCJnZXRGdW5jdGlvbk5hbWUiLCJjb25zdHJ1Y3RvciIsIk51bWJlciIsImhhc093blByb3BlcnR5IiwiTG9nTGV2ZWwiLCJMb2dBcHBlbmRlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztRQWdGZ0JBLFMsR0FBQUEsUztnQ0FxSEFDLFcsR0FBQUEsVztnQ0ErRUFDLFMsR0FBQUEsUztnQ0EyQ0FDLFcsR0FBQUEsVzs7QUExU2hCOzs0QkFBWUMsUzs7QUFD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QVgsRUFBb0I7QUFDMUIsa0JBQVdMO0FBRGUsS0FBcEIsQ0FBUDtBQUlBOztBQUlEOzs7Ozs7Ozs7QUFTTyxTQUFTN0MsV0FBVCxDQUFxQjZCLFFBQXJCLEVBQStCRixNQUEvQixFQUF1Qzs7QUFFMUMsUUFBSUUsb0JBQW9Cd0IsTUFBeEIsRUFBZ0M7O0FBRTVCLFlBQUkxQixNQUFKLEVBQVk7QUFDUixnQkFBSWQsU0FBU2MsTUFBVCxDQUFKLEVBQXNCO0FBQ2xCZCx5QkFBU2MsTUFBVCxFQUFpQjNCLFdBQWpCLENBQTZCNkIsUUFBN0I7QUFDSDtBQUNKLFNBSkQsTUFJTztBQUNILGlCQUFLLElBQUlNLEdBQVQsSUFBZ0J0QixRQUFoQixFQUEwQjtBQUN0QixvQkFBSUEsU0FBU3lDLGNBQVQsQ0FBd0JuQixHQUF4QixDQUFKLEVBQWtDO0FBQzlCdEIsNkJBQVNzQixHQUFULEVBQWNaLE9BQWQsQ0FBc0IsVUFBVUMsUUFBVixFQUFvQjtBQUN0Q0EsaUNBQVN4QixXQUFULENBQXFCNkIsUUFBckI7QUFDSCxxQkFGRDtBQUdIO0FBQ0o7QUFDSjtBQUVKO0FBRUo7O0FBRUQvQjs7Z0NBRVN5RCxRO2dDQUNBQyxXIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBsb2c0anMgPGh0dHBzOi8vZ2l0aHViLmNvbS9hbmlnZW5lcm8vbG9nNGpzPlxuICpcbiAqIENvcHlyaWdodCAyMDE2IFJvYmluIFNjaHVsdHogPGh0dHA6Ly9hbmlnZW5lcm8uY29tPlxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlXG4gKi9cblxuLyoqXG4gKiBIb2xkcyB0aGUgZGVmaW5pdGlvbiBmb3IgdGhlIGFwcGVuZGVyIGNsb3N1cmVcbiAqXG4gKiBAdHlwZWRlZiB7eyBhcHBlbmQgOiBmdW5jdGlvbiAobnVtYmVyLCBMT0dfRVZFTlQpLCBpc0FjdGl2ZSA6IGZ1bmN0aW9uKCksXG4gKiAgICAgICAgICBzZXRMb2dMZXZlbCA6IGZ1bmN0aW9uKG51bWJlciksIHNldExheW91dCA6IGZ1bmN0aW9uKHN0cmluZykgfX1cbiAqL1xubGV0IEFQUEVOREVSO1xuXG4vKipcbiAqIEB0eXBlZGVmIHt7IGFsbG93QXBwZW5kZXJJbmplY3Rpb24gOiBib29sZWFuLCBhcHBlbmRlcnMgOiBBcnJheS48QVBQRU5ERVI+LFxuICogXHRcdFx0YXBwbGljYXRpb24gOiBPYmplY3QsIGxvZ2dlcnMgOiBBcnJheS48TG9nQXBwZW5kZXI+LCBsYXlvdXQgOiBzdHJpbmcgfX1cbiAqL1xubGV0IENPTkZJR19QQVJBTVM7XG5cbmltcG9ydCAqIGFzIGZvcm1hdHRlciBmcm9tICcuL2Zvcm1hdHRlcic7XG5pbXBvcnQgKiBhcyB1dGlsaXR5IGZyb20gJy4vdXRpbGl0eSc7XG5pbXBvcnQge0xvZ0FwcGVuZGVyfSBmcm9tICcuL2FwcGVuZGVyL2FwcGVuZGVyJztcbmltcG9ydCB7TG9nZ2VyfSBmcm9tICcuL2xvZ2dlci9sb2dnZXInO1xuaW1wb3J0IHtMb2dMZXZlbH0gZnJvbSAnLi9jb25zdC9sb2dMZXZlbCc7XG5pbXBvcnQge0NvbnNvbGVBcHBlbmRlcn0gZnJvbSAnLi9hcHBlbmRlci9jb25zb2xlQXBwZW5kZXInO1xuXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBtYWluIGxvZ2dlci4gV2UgdXNlIHRoaXMgaW4gY2FzZSBubyBsb2dnZXIgaXMgc3BlY2lmaWVkXG4gKiBAY29uc3RcbiAqL1xuY29uc3QgX01BSU5fTE9HR0VSID0gJ21haW4nO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IGFwcGVuZGVycyB0aGF0IHNob3VsZCBiZSBpbmNsdWRlZCBpZiBubyBhcHBlbmRlcnMgYXJlIHNwZWNpZmllZFxuICogQGNvbnN0XG4gKi9cbmNvbnN0IF9ERUZBVUxUX0FQUEVOREVSUyA9IFt7XG4gICAgJ2FwcGVuZGVyJyA6IENvbnNvbGVBcHBlbmRlcixcbiAgICAnbGV2ZWwnIDogTG9nTGV2ZWwuSU5GT1xufV07XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgbG9nNGpzMi4gSWYgbm8gY29uZmlndXJhdGlvbiBpcyBzcGVjaWZpZWQsIHRoZW4gdGhpc1xuICogY29uZmlndXJhdGlvbiB3aWxsIGJlIGluamVjdGVkXG4gKiBAY29uc3RcbiAqL1xuY29uc3QgX0RFRkFVTFRfQ09ORklHID0ge1xuICAgICdhbGxvd0FwcGVuZGVySW5qZWN0aW9uJyA6IHRydWUsXG4gICAgJ2FwcGVuZGVycycgOiBfREVGQVVMVF9BUFBFTkRFUlMsXG4gICAgJ2xvZ2dlcnMnIDogW3tcbiAgICAgICAgJ2xldmVsJyA6IExvZ0xldmVsLklORk9cbiAgICB9XSxcbiAgICAnbGF5b3V0JyA6ICclZCBbJXBdICVjIC0gJW0nXG59O1xuXG4vKipcbiAqIFRoZSBtZXRob2RzIHRoYXQgYW4gYXBwZW5kZXIgbXVzdCBjb250YWluXG4gKiBAY29uc3RcbiAqL1xuY29uc3QgX0FQUEVOREVSX01FVEhPRFMgPSBbJ2FwcGVuZCcsICdnZXROYW1lJywgJ2lzQWN0aXZlJywgJ3NldExvZ0xldmVsJywgJ3NldExheW91dCddO1xuXG4vKiogQHR5cGUge09iamVjdH0gKi9cbmxldCBfYXBwZW5kZXJzID0ge307XG4vKiogQHR5cGUgez9DT05GSUdfUEFSQU1TfSAqL1xubGV0IF9jb25maWd1cmF0aW9uID0gbnVsbDtcbi8qKiBAdHlwZSB7Ym9vbGVhbn0gKi9cbmxldCBfZmluYWxpemVkID0gZmFsc2U7XG4vKiogQHR5cGUge09iamVjdH0gKi9cbmxldCBfbG9nZ2VycyA9IHt9O1xuXG4vKipcbiAqIENvbmZpZ3VyZXMgdGhlIGxvZ2dlclxuICpcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGxvZzRqc1xuICpcbiAqIEBwYXJhbXMge0NPTkZJR19QQVJBTVN9IGNvbmZpZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29uZmlndXJlKGNvbmZpZykge1xuXG5cdGlmIChfZmluYWxpemVkKSB7XG5cdFx0Y29uc29sZS5lcnJvcignQ291bGQgbm90IGNvbmZpZ3VyZSAtIGFscmVhZHkgaW4gdXNlJyk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKCFfY29uZmlndXJhdGlvbikge1xuICAgICAgICBfY29uZmlndXJhdGlvbiA9IHt9O1xuICAgIH1cblxuICAgIC8vIHNldCB0aGUgZGVmYXVsdCBsYXlvdXRcbiAgICBpZiAoIWNvbmZpZy5sYXlvdXQgJiYgIV9jb25maWd1cmF0aW9uLmxheW91dCkge1xuICAgICAgICBfY29uZmlndXJhdGlvbi5sYXlvdXQgPSBfREVGQVVMVF9DT05GSUcubGF5b3V0O1xuICAgIH0gZWxzZSBpZiAoY29uZmlnLmxheW91dCkge1xuICAgICAgICBfY29uZmlndXJhdGlvbi5sYXlvdXQgPSBjb25maWcubGF5b3V0O1xuICAgIH1cblxuXHQvLyBjb25maWd1cmUgdGhlIGFwcGVuZGVyc1xuXHRfY29uZmlndXJlQXBwZW5kZXJzKGNvbmZpZy5hcHBlbmRlcnMpO1xuICAgIC8vIGNvbmZpZ3VyZSB0aGUgbG9nZ2Vyc1xuICAgIF9jb25maWd1cmVMb2dnZXJzKGNvbmZpZy5sb2dnZXJzKTtcblxufVxuXG4vKipcbiAqIENvbmZpZ3VyZXMgYXBwZW5kZXJzXG4gKlxuICogQHByaXZhdGVcbiAqIEBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7QXJyYXkuPExvZ0FwcGVuZGVyfGZ1bmN0aW9uPn0gYXBwZW5kZXJzXG4gKi9cbmxldCBfY29uZmlndXJlQXBwZW5kZXJzID0gZnVuY3Rpb24gKGFwcGVuZGVycykge1xuXG4gICAgaWYgKCEoYXBwZW5kZXJzIGluc3RhbmNlb2YgQXJyYXkpKSB7XG4gICAgICAgIGFwcGVuZGVycyA9IF9ERUZBVUxUX0FQUEVOREVSUztcbiAgICB9XG5cbiAgICBhcHBlbmRlcnMuZm9yRWFjaChhcHBlbmRlciA9PiB7XG4gICAgICAgIGlmIChhcHBlbmRlciBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICAgICAgICBhZGRBcHBlbmRlcihhcHBlbmRlcik7XG4gICAgICAgIH1cbiAgICB9KTtcblxufTtcblxuLyoqXG4gKiBDb25maWd1cmVzIHRoZSBsb2dnZXJzXG4gKlxuICogQHByaXZhdGVcbiAqIEBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD59IGxvZ2dlcnNcbiAqL1xubGV0IF9jb25maWd1cmVMb2dnZXJzID0gZnVuY3Rpb24gKGxvZ2dlcnMpIHtcblxuXHRpZiAoIShsb2dnZXJzIGluc3RhbmNlb2YgQXJyYXkpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGxvZ2dlcnMnKTtcblx0fVxuXG4gICAgbG9nZ2Vycy5mb3JFYWNoKGZ1bmN0aW9uIChsb2dnZXIpIHtcblxuICAgICAgICBpZiAoIWxvZ2dlci5sYXlvdXQgfHwgdHlwZW9mIGxvZ2dlci5sYXlvdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBsb2dnZXIubGF5b3V0ID0gX2NvbmZpZ3VyYXRpb24ubGF5b3V0O1xuICAgICAgICB9XG5cbiAgICAgICAgbG9nZ2VyLnRhZyA9IGxvZ2dlci50YWcgfHwgX01BSU5fTE9HR0VSO1xuICAgICAgICBsb2dnZXIubG9nTGV2ZWwgPSBsb2dnZXIubG9nTGV2ZWwgfHwgTG9nTGV2ZWwuRVJST1I7XG5cbiAgICAgICAgX2xvZ2dlcnNbbG9nZ2VyLnRhZ10gPSBfZ2V0QXBwZW5kZXJzRm9yTG9nZ2VyKGxvZ2dlci5sb2dMZXZlbCwgbG9nZ2VyLmxheW91dCk7XG5cbiAgICB9KTtcblxufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBhcHBlbmRlcnMgZm9yIHRoZSBsZXZlbCBhbmQgbGF5b3V0XG4gKlxuICogQHByaXZhdGVcbiAqIEBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBsb2dMZXZlbFxuICogQHBhcmFtIHtzdHJpbmd9IGxheW91dFxuICpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xubGV0IF9nZXRBcHBlbmRlcnNGb3JMb2dnZXIgPSBmdW5jdGlvbiAobG9nTGV2ZWwsIGxheW91dCkge1xuXG4gICAgbGV0IGxvZ2dlcjtcbiAgICBsZXQgYXBwZW5kZXJMaXN0ID0gW107XG5cbiAgICBPYmplY3Qua2V5cyhfYXBwZW5kZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcblxuICAgICAgICBsb2dnZXIgPSAoX2FwcGVuZGVyc1trZXldLnByb3RvdHlwZSBpbnN0YW5jZW9mIExvZ0FwcGVuZGVyKSA/IG5ldyBfYXBwZW5kZXJzW2tleV0oKSA6IF9hcHBlbmRlcnNba2V5XSgpO1xuXG4gICAgICAgIGxvZ2dlci5zZXRMb2dMZXZlbChsb2dMZXZlbCk7XG4gICAgICAgIGxvZ2dlci5zZXRMYXlvdXQobGF5b3V0KTtcblxuICAgICAgICBhcHBlbmRlckxpc3QucHVzaChsb2dnZXIpO1xuXG4gICAgfSk7XG5cblx0cmV0dXJuIGFwcGVuZGVyTGlzdDtcblxufTtcblxuLyoqXG4gKiBBZGRzIGFuIGFwcGVuZGVyIHRvIHRoZSBhcHBlbmRlciBxdWV1ZS4gSWYgdGhlIHN0YWNrIGlzIGZpbmFsaXplZCwgYW5kXG4gKiB0aGUgYWxsb3dBcHBlbmRlckluamVjdGlvbiBpcyBzZXQgdG8gZmFsc2UsIHRoZW4gdGhlIGV2ZW50IHdpbGwgbm90IGJlXG4gKiBhcHBlbmRlZFxuICpcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGxvZzRqc1xuICpcbiAqIEBwYXJhbXMge0xvZ0FwcGVuZGVyfSBhcHBlbmRlclxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkQXBwZW5kZXIoYXBwZW5kZXIpIHtcblxuXHRpZiAoX2ZpbmFsaXplZCAmJiAhX2NvbmZpZ3VyYXRpb24uYWxsb3dBcHBlbmRlckluamVjdGlvbikge1xuXHRcdGNvbnNvbGUuZXJyb3IoJ0Nhbm5vdCBhZGQgYXBwZW5kZXIgd2hlbiBjb25maWd1cmF0aW9uIGZpbmFsaXplZCcpO1xuXHRcdHJldHVybjtcblx0fVxuXG4gICAgX3ZhbGlkYXRlQXBwZW5kZXIoYXBwZW5kZXIpO1xuXG4gICAgLy8gb25seSBwdXQgdGhlIGFwcGVuZGVyIGludG8gdGhlIHNldCBpZiBpdCBkb2Vzbid0IGV4aXN0IGFscmVhZHlcbiAgICBpZiAoIV9hcHBlbmRlcnNbYXBwZW5kZXIubmFtZV0pIHtcbiAgICAgICAgX2FwcGVuZGVyc1thcHBlbmRlci5uYW1lXSA9IGFwcGVuZGVyO1xuICAgIH1cblxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGF0IHRoZSBhcHBlbmRlclxuICpcbiAqIEBwcml2YXRlXG4gKiBAZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW1zIHtBUFBFTkRFUn0gYXBwZW5kZXJcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiB0aGUgYXBwZW5kZXIgaXMgaW52YWxpZFxuICovXG5sZXQgX3ZhbGlkYXRlQXBwZW5kZXIgPSBmdW5jdGlvbiAoYXBwZW5kZXIpIHtcblxuICAgIC8vIGlmIHdlIGFyZSBydW5uaW5nIEVTNiwgd2UgY2FuIG1ha2Ugc3VyZSBpdCBleHRlbmRzIExvZ0FwcGVuZGVyXG4gICAgLy8gb3RoZXJ3aXNlLCBpdCBtdXN0IGJlIGEgZnVuY3Rpb25cbiAgICBpZiAoYXBwZW5kZXIucHJvdG90eXBlIGluc3RhbmNlb2YgTG9nQXBwZW5kZXIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoIShhcHBlbmRlciBpbnN0YW5jZW9mIEZ1bmN0aW9uKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcignSW52YWxpZCBhcHBlbmRlcjogbm90IGEgZnVuY3Rpb24gb3IgY2xhc3MgTG9nQXBwZW5kZXInKTtcblx0fVxuXG5cdC8vIGluc3RhbnRpYXRlIHRoZSBhcHBlbmRlciBmdW5jdGlvblxuXHRsZXQgYXBwZW5kZXJPYmogPSBhcHBlbmRlcigpO1xuXG4gICAgLy8gZW5zdXJlIHRoYXQgdGhlIGFwcGVuZGVyIG1ldGhvZHMgYXJlIHByZXNlbnQgKGFuZCBhcmUgZnVuY3Rpb25zKVxuICAgIF9BUFBFTkRFUl9NRVRIT0RTLmZvckVhY2goZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgICAgaWYgKGFwcGVuZGVyT2JqW2VsZW1lbnRdID09IHVuZGVmaW5lZCB8fCAhKGFwcGVuZGVyT2JqW2VsZW1lbnRdIGluc3RhbmNlb2YgRnVuY3Rpb24pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgYXBwZW5kZXI6IG1pc3NpbmcvaW52YWxpZCBtZXRob2Q6ICR7ZWxlbWVudH1gKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG59O1xuXG4vKipcbiAqIEFwcGVuZHMgdGhlIGxvZyBldmVudFxuICpcbiAqIEBwcml2YXRlXG4gKiBAZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gbG9nRXZlbnRcbiAqL1xuZnVuY3Rpb24gX2FwcGVuZChsb2dFdmVudCkge1xuXG5cdC8vIGZpbmFsaXplIHRoZSBjb25maWd1cmF0aW9uIHRvIG1ha2Ugc3VyZSBubyBvdGhlciBhcHBlbmRlciBjYW4gYmUgaW5qZWN0ZWQgKGlmIHNldClcblx0X2ZpbmFsaXplZCA9IHRydWU7XG5cbiAgICAvLyBjeWNsZSB0aHJvdWdoIGVhY2ggYXBwZW5kZXIgZm9yIHRoZSBsb2dnZXIgYW5kIGFwcGVuZCB0aGUgbG9nZ2luZyBldmVudFxuICAgIChfbG9nZ2Vyc1tsb2dFdmVudC5sb2dnZXJdIHx8IF9sb2dnZXJzW19NQUlOX0xPR0dFUl0pLmZvckVhY2goZnVuY3Rpb24gKGxvZ2dlcikge1xuICAgICAgICBpZiAobG9nZ2VyLmlzQWN0aXZlKGxvZ0V2ZW50LmxldmVsKSkge1xuICAgICAgICAgICAgbG9nZ2VyLmFwcGVuZChsb2dFdmVudCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxufVxuXG4vKipcbiAqIEhhbmRsZXMgY3JlYXRpbmcgdGhlIGxvZ2dlciBhbmQgcmV0dXJuaW5nIGl0XG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgbG9nNGpzXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbnxzdHJpbmc9fSBjb250ZXh0XG4gKlxuICogQHJldHVybiB7TG9nZ2VyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TG9nZ2VyKGNvbnRleHQpIHtcblxuXHQvLyB3ZSBuZWVkIHRvIGluaXRpYWxpemUgaWYgd2UgaGF2ZW4ndFxuXHRpZiAoIV9jb25maWd1cmF0aW9uKSB7XG5cdFx0Y29uZmlndXJlKF9ERUZBVUxUX0NPTkZJRyk7XG5cdH1cblxuICAgIC8vIGRldGVybWluZSB0aGUgY29udGV4dFxuICAgIGlmICh0eXBlb2YgY29udGV4dCAhPSAnc3RyaW5nJykge1xuXG4gICAgICAgIGlmICh0eXBlb2YgY29udGV4dCA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjb250ZXh0ID0gdXRpbGl0eS5nZXRGdW5jdGlvbk5hbWUoY29udGV4dCk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbnRleHQgPT0gJ29iamVjdCcpIHtcblxuICAgICAgICAgICAgY29udGV4dCA9IHV0aWxpdHkuZ2V0RnVuY3Rpb25OYW1lKGNvbnRleHQuY29uc3RydWN0b3IpO1xuXG4gICAgICAgICAgICBpZiAoY29udGV4dCA9PSAnT2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIGNvbnRleHQgPSAnYW5vbnltb3VzJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29udGV4dCA9IF9NQUlOX0xPR0dFUjtcbiAgICAgICAgfVxuXG4gICAgfVxuXG5cdHJldHVybiBuZXcgTG9nZ2VyKGNvbnRleHQsIHtcblx0XHQnYXBwZW5kJyA6IF9hcHBlbmRcblx0fSk7XG5cbn1cblxuXG5cbi8qKlxuICogU2V0cyB0aGUgbG9nIGxldmVsIGZvciBhbGwgYXBwZW5kZXJzIG9mIGEgbG9nZ2VyLCBvciBzcGVjaWZpZWQgbG9nZ2VyXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgbG9nNGpzXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGxvZ0xldmVsXG4gKiBAcGFyYW0ge3N0cmluZz19IGxvZ2dlclxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TG9nTGV2ZWwobG9nTGV2ZWwsIGxvZ2dlcikge1xuXG4gICAgaWYgKGxvZ0xldmVsIGluc3RhbmNlb2YgTnVtYmVyKSB7XG5cbiAgICAgICAgaWYgKGxvZ2dlcikge1xuICAgICAgICAgICAgaWYgKF9sb2dnZXJzW2xvZ2dlcl0pIHtcbiAgICAgICAgICAgICAgICBfbG9nZ2Vyc1tsb2dnZXJdLnNldExvZ0xldmVsKGxvZ0xldmVsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBfbG9nZ2Vycykge1xuICAgICAgICAgICAgICAgIGlmIChfbG9nZ2Vycy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIF9sb2dnZXJzW2tleV0uZm9yRWFjaChmdW5jdGlvbiAoYXBwZW5kZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZGVyLnNldExvZ0xldmVsKGxvZ0xldmVsKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9XG5cbn1cblxuYWRkQXBwZW5kZXIoQ29uc29sZUFwcGVuZGVyKTtcblxuZXhwb3J0IHsgTG9nTGV2ZWwgfTtcbmV4cG9ydCB7IExvZ0FwcGVuZGVyIH07XG4iXX0= + //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbImNvbmZpZ3VyZSIsImFkZEFwcGVuZGVyIiwiZ2V0TG9nZ2VyIiwic2V0TG9nTGV2ZWwiLCJmb3JtYXR0ZXIiLCJ1dGlsaXR5IiwiQVBQRU5ERVIiLCJDT05GSUdfUEFSQU1TIiwiX01BSU5fTE9HR0VSIiwiX0RFRkFVTFRfQVBQRU5ERVJTIiwiSU5GTyIsIl9ERUZBVUxUX0NPTkZJRyIsIl9BUFBFTkRFUl9NRVRIT0RTIiwiX2FwcGVuZGVycyIsIl9jb25maWd1cmF0aW9uIiwiX2ZpbmFsaXplZCIsIl9sb2dnZXJzIiwiY29uZmlnIiwiY29uc29sZSIsImVycm9yIiwibGF5b3V0IiwiX2NvbmZpZ3VyZUFwcGVuZGVycyIsImFwcGVuZGVycyIsIl9jb25maWd1cmVMb2dnZXJzIiwibG9nZ2VycyIsIkFycmF5IiwiZm9yRWFjaCIsImFwcGVuZGVyIiwiRnVuY3Rpb24iLCJFcnJvciIsImxvZ2dlciIsInRhZyIsImxvZ0xldmVsIiwiRVJST1IiLCJfZ2V0QXBwZW5kZXJzRm9yTG9nZ2VyIiwiYXBwZW5kZXJMaXN0IiwiT2JqZWN0Iiwia2V5cyIsImtleSIsInByb3RvdHlwZSIsInNldExheW91dCIsInB1c2giLCJhbGxvd0FwcGVuZGVySW5qZWN0aW9uIiwiX3ZhbGlkYXRlQXBwZW5kZXIiLCJuYW1lIiwiYXBwZW5kZXJPYmoiLCJlbGVtZW50IiwidW5kZWZpbmVkIiwiX2FwcGVuZCIsImxvZ0V2ZW50IiwiaXNBY3RpdmUiLCJsZXZlbCIsImFwcGVuZCIsImNvbnRleHQiLCJnZXRGdW5jdGlvbk5hbWUiLCJjb25zdHJ1Y3RvciIsIk51bWJlciIsImlzSW50ZWdlciIsImhhc093blByb3BlcnR5IiwiTG9nTGV2ZWwiLCJMb2dBcHBlbmRlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztRQWdGZ0JBLFMsR0FBQUEsUztnQ0FxSEFDLFcsR0FBQUEsVztnQ0ErRUFDLFMsR0FBQUEsUztnQ0EyQ0FDLFcsR0FBQUEsVzs7QUExU2hCOzs0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QU8sMkNBQVc2QyxPQUFYLEVBQW9CO0FBQzFCLGtCQUFXTDtBQURlLEtBQXBCLENBQVA7QUFJQTs7QUFJRDs7Ozs7Ozs7O0FBU08sU0FBUzdDLFdBQVQsQ0FBcUI2QixRQUFyQixFQUErQkYsTUFBL0IsRUFBdUM7O0FBRTFDLFFBQUkwQixPQUFPQyxTQUFQLENBQWlCekIsUUFBakIsQ0FBSixFQUFnQzs7QUFFNUIsWUFBSUYsTUFBSixFQUFZO0FBQ1IsZ0JBQUlkLFNBQVNjLE1BQVQsQ0FBSixFQUFzQjtBQUNsQmQseUJBQVNjLE1BQVQsRUFBaUIzQixXQUFqQixDQUE2QjZCLFFBQTdCO0FBQ0g7QUFDSixTQUpELE1BSU87QUFDSCxpQkFBSyxJQUFJTSxHQUFULElBQWdCdEIsUUFBaEIsRUFBMEI7QUFDdEIsb0JBQUlBLFNBQVMwQyxjQUFULENBQXdCcEIsR0FBeEIsQ0FBSixFQUFrQztBQUM5QnRCLDZCQUFTc0IsR0FBVCxFQUFjWixPQUFkLENBQXNCLFVBQVVDLFFBQVYsRUFBb0I7QUFDdENBLGlDQUFTeEIsV0FBVCxDQUFxQjZCLFFBQXJCO0FBQ0gscUJBRkQ7QUFHSDtBQUNKO0FBQ0o7QUFFSjtBQUVKOztBQUVEL0I7O2dDQUVTMEQsUTtnQ0FDQUMsVyIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogbG9nNGpzIDxodHRwczovL2dpdGh1Yi5jb20vYW5pZ2VuZXJvL2xvZzRqcz5cbiAqXG4gKiBDb3B5cmlnaHQgMjAxNiBSb2JpbiBTY2h1bHR6IDxodHRwOi8vYW5pZ2VuZXJvLmNvbT5cbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZVxuICovXG5cbi8qKlxuICogSG9sZHMgdGhlIGRlZmluaXRpb24gZm9yIHRoZSBhcHBlbmRlciBjbG9zdXJlXG4gKlxuICogQHR5cGVkZWYge3sgYXBwZW5kIDogZnVuY3Rpb24gKG51bWJlciwgTE9HX0VWRU5UKSwgaXNBY3RpdmUgOiBmdW5jdGlvbigpLFxuICogICAgICAgICAgc2V0TG9nTGV2ZWwgOiBmdW5jdGlvbihudW1iZXIpLCBzZXRMYXlvdXQgOiBmdW5jdGlvbihzdHJpbmcpIH19XG4gKi9cbmxldCBBUFBFTkRFUjtcblxuLyoqXG4gKiBAdHlwZWRlZiB7eyBhbGxvd0FwcGVuZGVySW5qZWN0aW9uIDogYm9vbGVhbiwgYXBwZW5kZXJzIDogQXJyYXkuPEFQUEVOREVSPixcbiAqIFx0XHRcdGFwcGxpY2F0aW9uIDogT2JqZWN0LCBsb2dnZXJzIDogQXJyYXkuPExvZ0FwcGVuZGVyPiwgbGF5b3V0IDogc3RyaW5nIH19XG4gKi9cbmxldCBDT05GSUdfUEFSQU1TO1xuXG5pbXBvcnQgKiBhcyBmb3JtYXR0ZXIgZnJvbSAnLi9mb3JtYXR0ZXInO1xuaW1wb3J0ICogYXMgdXRpbGl0eSBmcm9tICcuL3V0aWxpdHknO1xuaW1wb3J0IHtMb2dBcHBlbmRlcn0gZnJvbSAnLi9hcHBlbmRlci9hcHBlbmRlcic7XG5pbXBvcnQge0xvZ2dlcn0gZnJvbSAnLi9sb2dnZXIvbG9nZ2VyJztcbmltcG9ydCB7TG9nTGV2ZWx9IGZyb20gJy4vY29uc3QvbG9nTGV2ZWwnO1xuaW1wb3J0IHtDb25zb2xlQXBwZW5kZXJ9IGZyb20gJy4vYXBwZW5kZXIvY29uc29sZUFwcGVuZGVyJztcblxuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgbWFpbiBsb2dnZXIuIFdlIHVzZSB0aGlzIGluIGNhc2Ugbm8gbG9nZ2VyIGlzIHNwZWNpZmllZFxuICogQGNvbnN0XG4gKi9cbmNvbnN0IF9NQUlOX0xPR0dFUiA9ICdtYWluJztcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBhcHBlbmRlcnMgdGhhdCBzaG91bGQgYmUgaW5jbHVkZWQgaWYgbm8gYXBwZW5kZXJzIGFyZSBzcGVjaWZpZWRcbiAqIEBjb25zdFxuICovXG5jb25zdCBfREVGQVVMVF9BUFBFTkRFUlMgPSBbe1xuICAgICdhcHBlbmRlcicgOiBDb25zb2xlQXBwZW5kZXIsXG4gICAgJ2xldmVsJyA6IExvZ0xldmVsLklORk9cbn1dO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yIGxvZzRqczIuIElmIG5vIGNvbmZpZ3VyYXRpb24gaXMgc3BlY2lmaWVkLCB0aGVuIHRoaXNcbiAqIGNvbmZpZ3VyYXRpb24gd2lsbCBiZSBpbmplY3RlZFxuICogQGNvbnN0XG4gKi9cbmNvbnN0IF9ERUZBVUxUX0NPTkZJRyA9IHtcbiAgICAnYWxsb3dBcHBlbmRlckluamVjdGlvbicgOiB0cnVlLFxuICAgICdhcHBlbmRlcnMnIDogX0RFRkFVTFRfQVBQRU5ERVJTLFxuICAgICdsb2dnZXJzJyA6IFt7XG4gICAgICAgICdsZXZlbCcgOiBMb2dMZXZlbC5JTkZPXG4gICAgfV0sXG4gICAgJ2xheW91dCcgOiAnJWQgWyVwXSAlYyAtICVtJ1xufTtcblxuLyoqXG4gKiBUaGUgbWV0aG9kcyB0aGF0IGFuIGFwcGVuZGVyIG11c3QgY29udGFpblxuICogQGNvbnN0XG4gKi9cbmNvbnN0IF9BUFBFTkRFUl9NRVRIT0RTID0gWydhcHBlbmQnLCAnZ2V0TmFtZScsICdpc0FjdGl2ZScsICdzZXRMb2dMZXZlbCcsICdzZXRMYXlvdXQnXTtcblxuLyoqIEB0eXBlIHtPYmplY3R9ICovXG5sZXQgX2FwcGVuZGVycyA9IHt9O1xuLyoqIEB0eXBlIHs/Q09ORklHX1BBUkFNU30gKi9cbmxldCBfY29uZmlndXJhdGlvbiA9IG51bGw7XG4vKiogQHR5cGUge2Jvb2xlYW59ICovXG5sZXQgX2ZpbmFsaXplZCA9IGZhbHNlO1xuLyoqIEB0eXBlIHtPYmplY3R9ICovXG5sZXQgX2xvZ2dlcnMgPSB7fTtcblxuLyoqXG4gKiBDb25maWd1cmVzIHRoZSBsb2dnZXJcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBsb2c0anNcbiAqXG4gKiBAcGFyYW1zIHtDT05GSUdfUEFSQU1TfSBjb25maWdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbmZpZ3VyZShjb25maWcpIHtcblxuXHRpZiAoX2ZpbmFsaXplZCkge1xuXHRcdGNvbnNvbGUuZXJyb3IoJ0NvdWxkIG5vdCBjb25maWd1cmUgLSBhbHJlYWR5IGluIHVzZScpO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmICghX2NvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgX2NvbmZpZ3VyYXRpb24gPSB7fTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIGRlZmF1bHQgbGF5b3V0XG4gICAgaWYgKCFjb25maWcubGF5b3V0ICYmICFfY29uZmlndXJhdGlvbi5sYXlvdXQpIHtcbiAgICAgICAgX2NvbmZpZ3VyYXRpb24ubGF5b3V0ID0gX0RFRkFVTFRfQ09ORklHLmxheW91dDtcbiAgICB9IGVsc2UgaWYgKGNvbmZpZy5sYXlvdXQpIHtcbiAgICAgICAgX2NvbmZpZ3VyYXRpb24ubGF5b3V0ID0gY29uZmlnLmxheW91dDtcbiAgICB9XG5cblx0Ly8gY29uZmlndXJlIHRoZSBhcHBlbmRlcnNcblx0X2NvbmZpZ3VyZUFwcGVuZGVycyhjb25maWcuYXBwZW5kZXJzKTtcbiAgICAvLyBjb25maWd1cmUgdGhlIGxvZ2dlcnNcbiAgICBfY29uZmlndXJlTG9nZ2Vycyhjb25maWcubG9nZ2Vycyk7XG5cbn1cblxuLyoqXG4gKiBDb25maWd1cmVzIGFwcGVuZGVyc1xuICpcbiAqIEBwcml2YXRlXG4gKiBAZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge0FycmF5LjxMb2dBcHBlbmRlcnxmdW5jdGlvbj59IGFwcGVuZGVyc1xuICovXG5sZXQgX2NvbmZpZ3VyZUFwcGVuZGVycyA9IGZ1bmN0aW9uIChhcHBlbmRlcnMpIHtcblxuICAgIGlmICghKGFwcGVuZGVycyBpbnN0YW5jZW9mIEFycmF5KSkge1xuICAgICAgICBhcHBlbmRlcnMgPSBfREVGQVVMVF9BUFBFTkRFUlM7XG4gICAgfVxuXG4gICAgYXBwZW5kZXJzLmZvckVhY2goYXBwZW5kZXIgPT4ge1xuICAgICAgICBpZiAoYXBwZW5kZXIgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICAgICAgYWRkQXBwZW5kZXIoYXBwZW5kZXIpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbn07XG5cbi8qKlxuICogQ29uZmlndXJlcyB0aGUgbG9nZ2Vyc1xuICpcbiAqIEBwcml2YXRlXG4gKiBAZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+fSBsb2dnZXJzXG4gKi9cbmxldCBfY29uZmlndXJlTG9nZ2VycyA9IGZ1bmN0aW9uIChsb2dnZXJzKSB7XG5cblx0aWYgKCEobG9nZ2VycyBpbnN0YW5jZW9mIEFycmF5KSkge1xuXHRcdHRocm93IG5ldyBFcnJvcignSW52YWxpZCBsb2dnZXJzJyk7XG5cdH1cblxuICAgIGxvZ2dlcnMuZm9yRWFjaChmdW5jdGlvbiAobG9nZ2VyKSB7XG5cbiAgICAgICAgaWYgKCFsb2dnZXIubGF5b3V0IHx8IHR5cGVvZiBsb2dnZXIubGF5b3V0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgbG9nZ2VyLmxheW91dCA9IF9jb25maWd1cmF0aW9uLmxheW91dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxvZ2dlci50YWcgPSBsb2dnZXIudGFnIHx8IF9NQUlOX0xPR0dFUjtcbiAgICAgICAgbG9nZ2VyLmxvZ0xldmVsID0gbG9nZ2VyLmxvZ0xldmVsIHx8IExvZ0xldmVsLkVSUk9SO1xuXG4gICAgICAgIF9sb2dnZXJzW2xvZ2dlci50YWddID0gX2dldEFwcGVuZGVyc0ZvckxvZ2dlcihsb2dnZXIubG9nTGV2ZWwsIGxvZ2dlci5sYXlvdXQpO1xuXG4gICAgfSk7XG5cbn07XG5cbi8qKlxuICogR2V0cyB0aGUgYXBwZW5kZXJzIGZvciB0aGUgbGV2ZWwgYW5kIGxheW91dFxuICpcbiAqIEBwcml2YXRlXG4gKiBAZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gbG9nTGV2ZWxcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYXlvdXRcbiAqXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbmxldCBfZ2V0QXBwZW5kZXJzRm9yTG9nZ2VyID0gZnVuY3Rpb24gKGxvZ0xldmVsLCBsYXlvdXQpIHtcblxuICAgIGxldCBsb2dnZXI7XG4gICAgbGV0IGFwcGVuZGVyTGlzdCA9IFtdO1xuXG4gICAgT2JqZWN0LmtleXMoX2FwcGVuZGVycykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG5cbiAgICAgICAgbG9nZ2VyID0gKF9hcHBlbmRlcnNba2V5XS5wcm90b3R5cGUgaW5zdGFuY2VvZiBMb2dBcHBlbmRlcikgPyBuZXcgX2FwcGVuZGVyc1trZXldKCkgOiBfYXBwZW5kZXJzW2tleV0oKTtcblxuICAgICAgICBsb2dnZXIuc2V0TG9nTGV2ZWwobG9nTGV2ZWwpO1xuICAgICAgICBsb2dnZXIuc2V0TGF5b3V0KGxheW91dCk7XG5cbiAgICAgICAgYXBwZW5kZXJMaXN0LnB1c2gobG9nZ2VyKTtcblxuICAgIH0pO1xuXG5cdHJldHVybiBhcHBlbmRlckxpc3Q7XG5cbn07XG5cbi8qKlxuICogQWRkcyBhbiBhcHBlbmRlciB0byB0aGUgYXBwZW5kZXIgcXVldWUuIElmIHRoZSBzdGFjayBpcyBmaW5hbGl6ZWQsIGFuZFxuICogdGhlIGFsbG93QXBwZW5kZXJJbmplY3Rpb24gaXMgc2V0IHRvIGZhbHNlLCB0aGVuIHRoZSBldmVudCB3aWxsIG5vdCBiZVxuICogYXBwZW5kZWRcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBsb2c0anNcbiAqXG4gKiBAcGFyYW1zIHtMb2dBcHBlbmRlcn0gYXBwZW5kZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZEFwcGVuZGVyKGFwcGVuZGVyKSB7XG5cblx0aWYgKF9maW5hbGl6ZWQgJiYgIV9jb25maWd1cmF0aW9uLmFsbG93QXBwZW5kZXJJbmplY3Rpb24pIHtcblx0XHRjb25zb2xlLmVycm9yKCdDYW5ub3QgYWRkIGFwcGVuZGVyIHdoZW4gY29uZmlndXJhdGlvbiBmaW5hbGl6ZWQnKTtcblx0XHRyZXR1cm47XG5cdH1cblxuICAgIF92YWxpZGF0ZUFwcGVuZGVyKGFwcGVuZGVyKTtcblxuICAgIC8vIG9ubHkgcHV0IHRoZSBhcHBlbmRlciBpbnRvIHRoZSBzZXQgaWYgaXQgZG9lc24ndCBleGlzdCBhbHJlYWR5XG4gICAgaWYgKCFfYXBwZW5kZXJzW2FwcGVuZGVyLm5hbWVdKSB7XG4gICAgICAgIF9hcHBlbmRlcnNbYXBwZW5kZXIubmFtZV0gPSBhcHBlbmRlcjtcbiAgICB9XG5cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhhdCB0aGUgYXBwZW5kZXJcbiAqXG4gKiBAcHJpdmF0ZVxuICogQGZ1bmN0aW9uXG4gKlxuICogQHBhcmFtcyB7QVBQRU5ERVJ9IGFwcGVuZGVyXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlIGFwcGVuZGVyIGlzIGludmFsaWRcbiAqL1xubGV0IF92YWxpZGF0ZUFwcGVuZGVyID0gZnVuY3Rpb24gKGFwcGVuZGVyKSB7XG5cbiAgICAvLyBpZiB3ZSBhcmUgcnVubmluZyBFUzYsIHdlIGNhbiBtYWtlIHN1cmUgaXQgZXh0ZW5kcyBMb2dBcHBlbmRlclxuICAgIC8vIG90aGVyd2lzZSwgaXQgbXVzdCBiZSBhIGZ1bmN0aW9uXG4gICAgaWYgKGFwcGVuZGVyLnByb3RvdHlwZSBpbnN0YW5jZW9mIExvZ0FwcGVuZGVyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKCEoYXBwZW5kZXIgaW5zdGFuY2VvZiBGdW5jdGlvbikpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXBwZW5kZXI6IG5vdCBhIGZ1bmN0aW9uIG9yIGNsYXNzIExvZ0FwcGVuZGVyJyk7XG5cdH1cblxuXHQvLyBpbnN0YW50aWF0ZSB0aGUgYXBwZW5kZXIgZnVuY3Rpb25cblx0bGV0IGFwcGVuZGVyT2JqID0gYXBwZW5kZXIoKTtcblxuICAgIC8vIGVuc3VyZSB0aGF0IHRoZSBhcHBlbmRlciBtZXRob2RzIGFyZSBwcmVzZW50IChhbmQgYXJlIGZ1bmN0aW9ucylcbiAgICBfQVBQRU5ERVJfTUVUSE9EUy5mb3JFYWNoKGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgIGlmIChhcHBlbmRlck9ialtlbGVtZW50XSA9PSB1bmRlZmluZWQgfHwgIShhcHBlbmRlck9ialtlbGVtZW50XSBpbnN0YW5jZW9mIEZ1bmN0aW9uKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGFwcGVuZGVyOiBtaXNzaW5nL2ludmFsaWQgbWV0aG9kOiAke2VsZW1lbnR9YCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxufTtcblxuLyoqXG4gKiBBcHBlbmRzIHRoZSBsb2cgZXZlbnRcbiAqXG4gKiBAcHJpdmF0ZVxuICogQGZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGxvZ0V2ZW50XG4gKi9cbmZ1bmN0aW9uIF9hcHBlbmQobG9nRXZlbnQpIHtcblxuXHQvLyBmaW5hbGl6ZSB0aGUgY29uZmlndXJhdGlvbiB0byBtYWtlIHN1cmUgbm8gb3RoZXIgYXBwZW5kZXIgY2FuIGJlIGluamVjdGVkIChpZiBzZXQpXG5cdF9maW5hbGl6ZWQgPSB0cnVlO1xuXG4gICAgLy8gY3ljbGUgdGhyb3VnaCBlYWNoIGFwcGVuZGVyIGZvciB0aGUgbG9nZ2VyIGFuZCBhcHBlbmQgdGhlIGxvZ2dpbmcgZXZlbnRcbiAgICAoX2xvZ2dlcnNbbG9nRXZlbnQubG9nZ2VyXSB8fCBfbG9nZ2Vyc1tfTUFJTl9MT0dHRVJdKS5mb3JFYWNoKGZ1bmN0aW9uIChsb2dnZXIpIHtcbiAgICAgICAgaWYgKGxvZ2dlci5pc0FjdGl2ZShsb2dFdmVudC5sZXZlbCkpIHtcbiAgICAgICAgICAgIGxvZ2dlci5hcHBlbmQobG9nRXZlbnQpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbn1cblxuLyoqXG4gKiBIYW5kbGVzIGNyZWF0aW5nIHRoZSBsb2dnZXIgYW5kIHJldHVybmluZyBpdFxuICpcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGxvZzRqc1xuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb258c3RyaW5nPX0gY29udGV4dFxuICpcbiAqIEByZXR1cm4ge0xvZ2dlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExvZ2dlcihjb250ZXh0KSB7XG5cblx0Ly8gd2UgbmVlZCB0byBpbml0aWFsaXplIGlmIHdlIGhhdmVuJ3Rcblx0aWYgKCFfY29uZmlndXJhdGlvbikge1xuXHRcdGNvbmZpZ3VyZShfREVGQVVMVF9DT05GSUcpO1xuXHR9XG5cbiAgICAvLyBkZXRlcm1pbmUgdGhlIGNvbnRleHRcbiAgICBpZiAodHlwZW9mIGNvbnRleHQgIT09ICdzdHJpbmcnKSB7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjb250ZXh0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjb250ZXh0ID0gdXRpbGl0eS5nZXRGdW5jdGlvbk5hbWUoY29udGV4dCk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbnRleHQgPT09ICdvYmplY3QnKSB7XG5cbiAgICAgICAgICAgIGNvbnRleHQgPSB1dGlsaXR5LmdldEZ1bmN0aW9uTmFtZShjb250ZXh0LmNvbnN0cnVjdG9yKTtcblxuICAgICAgICAgICAgaWYgKGNvbnRleHQgPT09ICdPYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgY29udGV4dCA9ICdhbm9ueW1vdXMnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250ZXh0ID0gX01BSU5fTE9HR0VSO1xuICAgICAgICB9XG5cbiAgICB9XG5cblx0cmV0dXJuIG5ldyBMb2dnZXIoY29udGV4dCwge1xuXHRcdCdhcHBlbmQnIDogX2FwcGVuZFxuXHR9KTtcblxufVxuXG5cblxuLyoqXG4gKiBTZXRzIHRoZSBsb2cgbGV2ZWwgZm9yIGFsbCBhcHBlbmRlcnMgb2YgYSBsb2dnZXIsIG9yIHNwZWNpZmllZCBsb2dnZXJcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBsb2c0anNcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gbG9nTGV2ZWxcbiAqIEBwYXJhbSB7c3RyaW5nPX0gbG9nZ2VyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRMb2dMZXZlbChsb2dMZXZlbCwgbG9nZ2VyKSB7XG5cbiAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihsb2dMZXZlbCkpIHtcblxuICAgICAgICBpZiAobG9nZ2VyKSB7XG4gICAgICAgICAgICBpZiAoX2xvZ2dlcnNbbG9nZ2VyXSkge1xuICAgICAgICAgICAgICAgIF9sb2dnZXJzW2xvZ2dlcl0uc2V0TG9nTGV2ZWwobG9nTGV2ZWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIF9sb2dnZXJzKSB7XG4gICAgICAgICAgICAgICAgaWYgKF9sb2dnZXJzLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgX2xvZ2dlcnNba2V5XS5mb3JFYWNoKGZ1bmN0aW9uIChhcHBlbmRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kZXIuc2V0TG9nTGV2ZWwobG9nTGV2ZWwpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIH1cblxufVxuXG5hZGRBcHBlbmRlcihDb25zb2xlQXBwZW5kZXIpO1xuXG5leHBvcnQgeyBMb2dMZXZlbCB9O1xuZXhwb3J0IHsgTG9nQXBwZW5kZXIgfTtcbiJdfQ== /***/ }), /* 1 */ @@ -530,6 +530,24 @@ return /******/ (function(modules) { // webpackBootstrap ); }; + /** + * @function + * @memberOf formatter + * + * @param {LOG_EVENT} logEvent + * + * @return {string} + */ + var _formatColumn = function _formatColumn(logEvent) { + + if (!logEvent.column) { + _getFileDetails(logEvent); + } + + return (/*istanbul ignore next*/'' + logEvent.column + ); + }; + /** * @function * @memberOf formatter @@ -652,6 +670,7 @@ return /******/ (function(modules) { // webpackBootstrap 'F|file': _formatFile, 'K|map|MAP': _formatMapMessage, 'L|line': _formatLineNumber, + 'column': _formatColumn, 'm|msg|message': _formatLogMessage, 'M|method': _formatMethodName, 'n': _formatLineSeparator, @@ -868,7 +887,10 @@ return /******/ (function(modules) { // webpackBootstrap if (true) { var path = __webpack_require__(5); var appDir = path.dirname(__webpack_require__.c[0].filename); - logEvent.filename = fileParts.join(':').replace(appDir, '').replace(/(\\|\/)/, ''); + if (!fileParts[0].startsWith(appDir)) { + appDir = ''; + } + logEvent.filename = fileParts.join(':').replace(appDir, '').replace(/^(\\|\/)/, ''); } else { logEvent.filename = fileParts.join(':'); } @@ -878,6 +900,7 @@ return /******/ (function(modules) { // webpackBootstrap logEvent.filename = 'anonymous'; logEvent.lineNumber = '?'; } + logEvent.file = logEvent.filename; }; /** @@ -904,7 +927,7 @@ return /******/ (function(modules) { // webpackBootstrap function format(layout, logEvent) { return _formatLogEvent(_getCompiledLayout(layout), logEvent); } - //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZvcm1hdHRlci5qcyJdLCJuYW1lcyI6WyJwcmVDb21waWxlIiwiZm9ybWF0IiwidXRpbGl0eSIsIl9DT01NQU5EX1JFR0VYIiwiX2NvbXBpbGVkTGF5b3V0cyIsIl9mb3JtYXRMb2dnZXIiLCJsb2dFdmVudCIsImxvZ2dlciIsIl9mb3JtYXREYXRlIiwicGFyYW1zIiwiZGF0ZSIsIl9mb3JtYXRFeGNlcHRpb24iLCJtZXNzYWdlIiwiZXJyb3IiLCJzdGFjayIsInVuZGVmaW5lZCIsInN0YWNrcyIsInNwbGl0IiwiZm9yRWFjaCIsIm5hbWUiLCJfZm9ybWF0RmlsZSIsImZpbGUiLCJfZ2V0RmlsZURldGFpbHMiLCJfZm9ybWF0TGluZU51bWJlciIsImxpbmVOdW1iZXIiLCJfZm9ybWF0TWFwTWVzc2FnZSIsInByb3BlcnRpZXMiLCJrZXkiLCJwdXNoIiwiam9pbiIsIl9mb3JtYXRMb2dNZXNzYWdlIiwiX2Zvcm1hdE1ldGhvZE5hbWUiLCJnZXRGdW5jdGlvbk5hbWUiLCJtZXRob2QiLCJfZm9ybWF0TGluZVNlcGFyYXRvciIsIl9mb3JtYXRMZXZlbCIsImxldmVsIiwiRkFUQUwiLCJFUlJPUiIsIldBUk4iLCJJTkZPIiwiREVCVUciLCJUUkFDRSIsIl9mb3JtYXRSZWxhdGl2ZSIsInJlbGF0aXZlIiwiX2Zvcm1hdFNlcXVlbmNlTnVtYmVyIiwic2VxdWVuY2UiLCJfZm9ybWF0dGVycyIsIl9nZXRDb21waWxlZExheW91dCIsImxheW91dCIsIl9jb21waWxlTGF5b3V0IiwiaW5kZXgiLCJpbmRleE9mIiwiY3VycmVudEZvcm1hdFN0cmluZyIsImZvcm1hdEFycmF5Iiwic3Vic3RyaW5nIiwic3RhcnRJbmRleCIsImVuZEluZGV4IiwiX2dldEZvcm1hdHRlck9iamVjdCIsImZvcm1hdFN0cmluZyIsInJlc3VsdCIsImV4ZWMiLCJsZW5ndGgiLCJmb3JtYXR0ZXIiLCJfZ2V0Rm9ybWF0dGVyRnVuY3Rpb24iLCJfZ2V0TGF5b3V0VGFnUGFyYW1zIiwiYWZ0ZXIiLCJsYXN0SW5kZXhPZiIsImNvbW1hbmQiLCJyZWdleCIsImhhc093blByb3BlcnR5IiwiUmVnRXhwIiwibWF0Y2giLCJpIiwiX2Zvcm1hdExvZ0V2ZW50IiwicmVzcG9uc2UiLCJjb3VudCIsIk9iamVjdCIsInRyaW0iLCJsb2dFcnJvclN0YWNrIiwicGFydHMiLCJyZXBsYWNlIiwibG9jYXRpb24iLCJob3N0IiwiZmlsZVBhcnRzIiwiY29sdW1uIiwicG9wIiwiZGVmaW5lIiwicGF0aCIsInJlcXVpcmUiLCJhcHBEaXIiLCJkaXJuYW1lIiwibWFpbiIsImZpbGVuYW1lIl0sIm1hcHBpbmdzIjoiOzs7UUFpZWdCQSxVLEdBQUFBLFU7Z0NBYUFDLE0sR0FBQUEsTTs7QUF2ZWhCOztBQUNBOzs0QkFBWUMsTzs7QUFDWjs7OztBQUVBO0FBQ0EsSUFBTUMsaUJBQWlCLHNCQUF2Qjs7QUFFQTtBQWRBOzs7Ozs7O0FBZUEsSUFBSUMsbUJBQW1CLEVBQXZCOztBQUVBOzs7Ozs7OztBQVFBLElBQUlDLGdCQUFnQixTQUFoQkEsYUFBZ0IsQ0FBVUMsUUFBVixFQUFvQjtBQUN2QyxTQUFPQSxTQUFTQyxNQUFoQjtBQUNBLENBRkQ7O0FBSUE7Ozs7Ozs7OztBQVNBLElBQUlDLGNBQWMsU0FBZEEsV0FBYyxDQUFVRixRQUFWLEVBQW9CRyxNQUFwQixFQUE0QjtBQUM3QyxTQUFPLHdEQUFXSCxTQUFTSSxJQUFwQixFQUEwQkQsT0FBTyxDQUFQLENBQTFCO0FBQVA7QUFDQSxDQUZEOztBQUlBOzs7Ozs7OztBQVFBLElBQUlFLG1CQUFtQixTQUFuQkEsZ0JBQW1CLENBQVVMLFFBQVYsRUFBb0I7O0FBRXZDLE1BQUlNLFVBQVUsRUFBZDs7QUFFQSxNQUFJTixTQUFTTyxLQUFULElBQWtCLElBQXRCLEVBQTRCOztBQUU5QixRQUFJUCxTQUFTTyxLQUFULENBQWVDLEtBQWYsSUFBd0JDLFNBQTVCLEVBQXVDO0FBQ3RDLFVBQUlDLFNBQVNWLFNBQVNPLEtBQVQsQ0FBZUMsS0FBZixDQUFxQkcsS0FBckIsQ0FBMkIsS0FBM0Is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QVA7O0FBRUEsUUFBSU0sWUFBWS9ELEtBQUtKLEtBQUwsQ0FBVyxLQUFYLENBQWhCOztBQUVBWCxhQUFTK0UsTUFBVCxHQUFrQkQsVUFBVUUsR0FBVixFQUFsQjtBQUNBaEYsYUFBU2tCLFVBQVQsR0FBc0I0RCxVQUFVRSxHQUFWLEVBQXRCOztBQUVBLFFBQUksT0FBT0MsTUFBUCxLQUFrQixXQUF0QixFQUFtQztBQUNsQyxVQUFJQyxPQUFPQyxRQUFRLE1BQVIsQ0FBWDtBQUNBLFVBQUlDLFNBQVNGLEtBQUtHLE9BQUwsQ0FBYUYsUUFBUUcsSUFBUixDQUFhQyxRQUExQixDQUFiO0FBQ0F2RixlQUFTdUYsUUFBVCxHQUFvQlQsVUFBVXZELElBQVYsQ0FBZSxHQUFmLEVBQW9Cb0QsT0FBcEIsQ0FBNEJTLE1BQTVCLEVBQW9DLEVBQXBDLEVBQXdDVCxPQUF4QyxDQUFnRCxTQUFoRCxFQUEyRCxFQUEzRCxDQUFwQjtBQUNBLEtBSkQsTUFJTztBQUNOM0UsZUFBU3VGLFFBQVQsR0FBb0JULFVBQVV2RCxJQUFWLENBQWUsR0FBZixDQUFwQjtBQUNBO0FBRUQsR0FyQkQsTUFxQk87O0FBRU52QixhQUFTK0UsTUFBVCxHQUFrQixHQUFsQjtBQUNBL0UsYUFBU3VGLFFBQVQsR0FBb0IsV0FBcEI7QUFDQXZGLGFBQVNrQixVQUFULEdBQXNCLEdBQXRCO0FBRUE7QUFFRCxDQS9CRDs7QUFpQ0E7Ozs7Ozs7O0FBUU8sU0FBU3hCLFVBQVQsQ0FBb0JpRCxNQUFwQixFQUE0QjtBQUNsQ0QscUJBQW1CQyxNQUFuQjtBQUNBOztBQUVEOzs7Ozs7Ozs7QUFTTyxTQUFTaEQsTUFBVCxDQUFnQmdELE1BQWhCLEVBQXdCM0MsUUFBeEIsRUFBa0M7QUFDeEMsU0FBT29FLGdCQUFnQjFCLG1CQUFtQkMsTUFBbkIsQ0FBaEIsRUFBNEMzQyxRQUE1QyxDQUFQO0FBQ0EiLCJmaWxlIjoiZm9ybWF0dGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBsb2c0anMgPGh0dHBzOi8vZ2l0aHViLmNvbS9hbmlnZW5lcm8vbG9nNGpzPlxuICpcbiAqIENvcHlyaWdodCAyMDE2LXByZXNlbnQgUm9iaW4gU2NodWx0eiA8aHR0cDovL2FuaWdlbmVyby5jb20+XG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge2RhdGVGb3JtYXR9IGZyb20gJy4vZGF0ZUZvcm1hdHRlcic7XG5pbXBvcnQgKiBhcyB1dGlsaXR5IGZyb20gJy4vdXRpbGl0eSc7XG5pbXBvcnQge0xvZ0xldmVsfSBmcm9tICcuL2NvbnN0L2xvZ0xldmVsJztcblxuLyoqIEBjb25zdCAqL1xuY29uc3QgX0NPTU1BTkRfUkVHRVggPSAvJShbYS16LEEtWl0rKSg/PVxce3wpLztcblxuLyoqIEB0eXBlIHtPYmplY3R9ICovXG5sZXQgX2NvbXBpbGVkTGF5b3V0cyA9IHt9O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7TE9HX0VWRU5UfSBsb2dFdmVudFxuICpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xubGV0IF9mb3JtYXRMb2dnZXIgPSBmdW5jdGlvbiAobG9nRXZlbnQpIHtcblx0cmV0dXJuIGxvZ0V2ZW50LmxvZ2dlcjtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtMT0dfRVZFTlR9IGxvZ0V2ZW50XG4gKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBwYXJhbXNcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmxldCBfZm9ybWF0RGF0ZSA9IGZ1bmN0aW9uIChsb2dFdmVudCwgcGFyYW1zKSB7XG5cdHJldHVybiBkYXRlRm9ybWF0KGxvZ0V2ZW50LmRhdGUsIHBhcmFtc1swXSk7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7TE9HX0VWRU5UfSBsb2dFdmVudFxuICpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xubGV0IF9mb3JtYXRFeGNlcHRpb24gPSBmdW5jdGlvbiAobG9nRXZlbnQpIHtcblxuICAgIGxldCBtZXNzYWdlID0gJyc7XG5cbiAgICBpZiAobG9nRXZlbnQuZXJyb3IgIT0gbnVsbCkge1xuXG5cdFx0aWYgKGxvZ0V2ZW50LmVycm9yLnN0YWNrICE9IHVuZGVmaW5lZCkge1xuXHRcdFx0bGV0IHN0YWNrcyA9IGxvZ0V2ZW50LmVycm9yLnN0YWNrLnNwbGl0KC9cXG4vZyk7XG4gICAgICAgICAgICBzdGFja3MuZm9yRWFjaChmdW5jdGlvbiAoc3RhY2spIHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlICs9IGBcXHQke3N0YWNrfVxcbmA7XG4gICAgICAgICAgICB9KTtcblx0XHR9IGVsc2UgaWYgKGxvZ0V2ZW50LmVycm9yLm1lc3NhZ2UgIT0gbnVsbCAmJiBsb2dFdmVudC5lcnJvci5tZXNzYWdlICE9ICcnKSB7XG5cdFx0XHRtZXNzYWdlICs9IGBcXHQke2xvZ0V2ZW50LmVycm9yLm5hbWV9OiAke2xvZ0V2ZW50LmVycm9yLm1lc3NhZ2V9XFxuYDtcblx0XHR9XG5cblx0fVxuXG5cdHJldHVybiBtZXNzYWdlO1xuXG59O1xuXG4vKipcbiAqIEZvcm1hdHMgdGhlIGZpbGUgKGUuZy4gdGVzdC5qcykgdG8gdGhlIGZpbGVcbiAqXG4gKiBAcHJpdmF0ZVxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtMT0dfRVZFTlR9IGxvZ0V2ZW50XG4gKi9cbmxldCBfZm9ybWF0RmlsZSA9IGZ1bmN0aW9uIChsb2dFdmVudCkge1xuXG4gICAgaWYgKCFsb2dFdmVudC5maWxlKSB7XG5cdFx0X2dldEZpbGVEZXRhaWxzKGxvZ0V2ZW50KTtcblx0fVxuXG5cdHJldHVybiBsb2dFdmVudC5maWxlO1xuXG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7TE9HX0VWRU5UfSBsb2dFdmVudFxuICpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xubGV0IF9mb3JtYXRMaW5lTnVtYmVyID0gZnVuY3Rpb24gKGxvZ0V2ZW50KSB7XG5cbiAgICBpZiAoIWxvZ0V2ZW50LmxpbmVOdW1iZXIpIHtcblx0XHRfZ2V0RmlsZURldGFpbHMobG9nRXZlbnQpO1xuXHR9XG5cblx0cmV0dXJuIGAke2xvZ0V2ZW50LmxpbmVOdW1iZXJ9YDtcblxufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqXG4gKiBAcGFyYW0ge0xPR19FVkVOVH0gbG9nRXZlbnRcbiAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IHBhcmFtc1xuICpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xubGV0IF9mb3JtYXRNYXBNZXNzYWdlID0gZnVuY3Rpb24gKGxvZ0V2ZW50LCBwYXJhbXMpIHtcblx0bGV0IG1lc3NhZ2UgPSBudWxsO1xuXHRpZiAobG9nRXZlbnQucHJvcGVydGllcykge1xuXG5cdFx0bWVzc2FnZSA9IFtdO1xuXHRcdGZvciAobGV0IGtleSBpbiBsb2dFdmVudC5wcm9wZXJ0aWVzKSB7XG5cdFx0XHRpZiAocGFyYW1zWzBdKSB7XG5cdFx0XHRcdGlmIChwYXJhbXNbMF0gPT0ga2V5KSB7XG5cdFx0XHRcdFx0bWVzc2FnZS5wdXNoKGxvZ0V2ZW50LnByb3BlcnRpZXNba2V5XSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1lc3NhZ2UucHVzaCgneycgKyBrZXkgKyAnLCcgKyBsb2dFdmVudC5wcm9wZXJ0aWVzW2tleV0gKyAnfScpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiAneycgKyBtZXNzYWdlLmpvaW4oJywnKSArICd9JztcblxuXHR9XG5cdHJldHVybiBtZXNzYWdlO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqXG4gKiBAcGFyYW0ge0xPR19FVkVOVH0gbG9nRXZlbnRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmxldCBfZm9ybWF0TG9nTWVzc2FnZSA9IGZ1bmN0aW9uIChsb2dFdmVudCkge1xuXHRyZXR1cm4gbG9nRXZlbnQubWVzc2FnZTtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtMT0dfRVZFTlR9IGxvZ0V2ZW50XG4gKlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5sZXQgX2Zvcm1hdE1ldGhvZE5hbWUgPSBmdW5jdGlvbiAobG9nRXZlbnQpIHtcblx0cmV0dXJuIHV0aWxpdHkuZ2V0RnVuY3Rpb25OYW1lKGxvZ0V2ZW50Lm1ldGhvZCk7XG59O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqL1xubGV0IF9mb3JtYXRMaW5lU2VwYXJhdG9yID0gZnVuY3Rpb24gKCkge1xuXHRyZXR1cm4gJ1xcbic7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7TE9HX0VWRU5UfSBsb2dFdmVudFxuICpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xubGV0IF9mb3JtYXRMZXZlbCA9IGZ1bmN0aW9uIChsb2dFdmVudCkge1xuXG4gICAgc3dpdGNoIChsb2dFdmVudC5sZXZlbCkge1xuXG4gICAgICAgIGNhc2UgTG9nTGV2ZWwuRkFUQUw6XG4gICAgICAgICAgICByZXR1cm4gJ0ZBVEFMJztcbiAgICAgICAgY2FzZSBMb2dMZXZlbC5FUlJPUjpcbiAgICAgICAgICAgIHJldHVybiAnRVJST1InO1xuICAgICAgICBjYXNlIExvZ0xldmVsLldBUk46XG4gICAgICAgICAgICByZXR1cm4gJ1dBUk4nO1xuICAgICAgICBjYXNlIExvZ0xldmVsLklORk86XG4gICAgICAgICAgICByZXR1cm4gJ0lORk8nO1xuICAgICAgICBjYXNlIExvZ0xldmVsLkRFQlVHOlxuICAgICAgICAgICAgcmV0dXJuICdERUJVRyc7XG4gICAgICAgIGNhc2UgTG9nTGV2ZWwuVFJBQ0U6XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gJ1RSQUNFJztcblxuICAgIH1cblxufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqXG4gKiBAcGFyYW0ge0xPR19FVkVOVH0gbG9nRXZlbnRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmxldCBfZm9ybWF0UmVsYXRpdmUgPSBmdW5jdGlvbiAobG9nRXZlbnQpIHtcblx0cmV0dXJuICcnICsgbG9nRXZlbnQucmVsYXRpdmU7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7TE9HX0VWRU5UfSBsb2dFdmVudFxuICpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xubGV0IF9mb3JtYXRTZXF1ZW5jZU51bWJlciA9IGZ1bmN0aW9uIChsb2dFdmVudCkge1xuXHRyZXR1cm4gJycgKyBsb2dFdmVudC5zZXF1ZW5jZTtcbn07XG5cbmxldCBfZm9ybWF0dGVycyA9IHtcblx0J2N8bG9nZ2VyJyA6IF9mb3JtYXRMb2dnZXIsXG5cdCdkfGRhdGUnIDogX2Zvcm1hdERhdGUsXG5cdCdleHxleGNlcHRpb258dGhyb3dhYmxlJyA6IF9mb3JtYXRFeGNlcHRpb24sXG5cdCdGfGZpbGUnIDogX2Zvcm1hdEZpbGUsXG5cdCdLfG1hcHxNQVAnIDogX2Zvcm1hdE1hcE1lc3NhZ2UsXG5cdCdMfGxpbmUnIDogX2Zvcm1hdExpbmVOdW1iZXIsXG5cdCdtfG1zZ3xtZXNzYWdlJyA6IF9mb3JtYXRMb2dNZXNzYWdlLFxuXHQnTXxtZXRob2QnIDogX2Zvcm1hdE1ldGhvZE5hbWUsXG5cdCduJyA6IF9mb3JtYXRMaW5lU2VwYXJhdG9yLFxuXHQncHxsZXZlbCcgOiBfZm9ybWF0TGV2ZWwsXG5cdCdyfHJlbGF0aXZlJyA6IF9mb3JtYXRSZWxhdGl2ZSxcblx0J3NufHNlcXVlbmNlTnVtYmVyJyA6IF9mb3JtYXRTZXF1ZW5jZU51bWJlclxufTtcblxuLyoqXG4gKiBHZXQgdGhlIGNvbXBpbGVkIGxheW91dCBmb3IgdGhlIHNwZWNpZmllZCBsYXlvdXQgc3RyaW5nLiBJZiB0aGUgY29tcGlsZWQgbGF5b3V0IGRvZXMgbm90XG4gKiBleGlzdCwgdGhlbiB3ZSB3YW50IHRvIGNyZWF0ZSBpdC5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbGF5b3V0XG4gKlxuICogQHJldHVybiB7QXJyYXkuPHN0cmluZ3xmdW5jdGlvbj59XG4gKi9cbmxldCBfZ2V0Q29tcGlsZWRMYXlvdXQgPSBmdW5jdGlvbiAobGF5b3V0KSB7XG5cblx0aWYgKF9jb21waWxlZExheW91dHNbbGF5b3V0XSkge1xuXHRcdHJldHVybiBfY29tcGlsZWRMYXlvdXRzW2xheW91dF07XG5cdH1cblxuXHRyZXR1cm4gX2NvbXBpbGVMYXlvdXQobGF5b3V0KTtcblxufTtcblxuLyoqXG4gKiBDb21waWxlcyBhIGxheW91dCBpbnRvIGFuIGFycmF5LiBUaGUgYXJyYXkgY29udGFpbnMgZnVuY3Rpb25zXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxheW91dFxuICpcbiAqIEByZXR1cm4ge0FycmF5LjxzdHJpbmd8ZnVuY3Rpb24+fVxuICovXG5sZXQgX2NvbXBpbGVMYXlvdXQgPSBmdW5jdGlvbiAobGF5b3V0KSB7XG5cblx0bGV0IGluZGV4ID0gbGF5b3V0LmluZGV4T2YoJyUnKTtcblx0bGV0IGN1cnJlbnRGb3JtYXRTdHJpbmcgPSAnJztcblx0bGV0IGZvcm1hdEFycmF5ID0gW107XG5cblx0aWYgKGluZGV4ICE9IDApIHtcblx0XHRmb3JtYXRBcnJheS5wdXNoKGxheW91dC5zdWJzdHJpbmcoMCwgaW5kZXgpKTtcblx0fVxuXG5cdGRvIHtcblxuXHRcdGxldCBzdGFydEluZGV4ID0gaW5kZXg7XG5cdFx0bGV0IGVuZEluZGV4ID0gaW5kZXggPSBsYXlvdXQuaW5kZXhPZignJScsIGluZGV4ICsgMSk7XG5cblx0XHRpZiAoZW5kSW5kZXggPCAwKSB7XG5cdFx0XHRjdXJyZW50Rm9ybWF0U3RyaW5nID0gbGF5b3V0LnN1YnN0cmluZyhzdGFydEluZGV4KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y3VycmVudEZvcm1hdFN0cmluZyA9IGxheW91dC5zdWJzdHJpbmcoc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuXHRcdH1cblxuXHRcdGZvcm1hdEFycmF5LnB1c2goX2dldEZvcm1hdHRlck9iamVjdChjdXJyZW50Rm9ybWF0U3RyaW5nKSk7XG5cblx0fSB3aGlsZSAoaW5kZXggPiAtMSk7XG5cbiAgICAvLyBzZXQgdGhlIGZvcm1hdCBhcnJheSB0byB0aGUgc3BlY2lmaWVkIGNvbXBpbGVkIGxheW91dFxuXHRfY29tcGlsZWRMYXlvdXRzW2xheW91dF0gPSBmb3JtYXRBcnJheTtcblxuXHRyZXR1cm4gZm9ybWF0QXJyYXk7XG5cbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1hdFN0cmluZ1xuICpcbiAqIEByZXR1cm4ge09iamVjdHxzdHJpbmd9XG4gKi9cbmxldCBfZ2V0Rm9ybWF0dGVyT2JqZWN0ID0gZnVuY3Rpb24gKGZvcm1hdFN0cmluZykge1xuXG5cdGxldCByZXN1bHQgPSBfQ09NTUFORF9SRUdFWC5leGVjKGZvcm1hdFN0cmluZyk7XG5cdGlmIChyZXN1bHQgIT0gbnVsbCAmJiByZXN1bHQubGVuZ3RoID09IDIpIHtcblxuXHRcdGxldCBmb3JtYXR0ZXIgPSBfZ2V0Rm9ybWF0dGVyRnVuY3Rpb24ocmVzdWx0WzFdKTtcblx0XHRpZiAoIWZvcm1hdHRlcikge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0bGV0IHBhcmFtcyA9IF9nZXRMYXlvdXRUYWdQYXJhbXMoZm9ybWF0U3RyaW5nKTtcblxuXHRcdGxldCBhZnRlciA9ICcnO1xuXHRcdGxldCBlbmRJbmRleCA9IGZvcm1hdFN0cmluZy5sYXN0SW5kZXhPZignfScpO1xuXHRcdGlmIChlbmRJbmRleCAhPSAtMSkge1xuXHRcdFx0YWZ0ZXIgPSBmb3JtYXRTdHJpbmcuc3Vic3RyaW5nKGVuZEluZGV4ICsgMSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFmdGVyID0gZm9ybWF0U3RyaW5nLnN1YnN0cmluZyhyZXN1bHQuaW5kZXggKyByZXN1bHRbMV0ubGVuZ3RoICsgMSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdCdmb3JtYXR0ZXInIDogZm9ybWF0dGVyLFxuXHRcdFx0J3BhcmFtcycgOiBwYXJhbXMsXG5cdFx0XHQnYWZ0ZXInIDogYWZ0ZXJcblx0XHR9O1xuXG5cdH1cblxuXHRyZXR1cm4gZm9ybWF0U3RyaW5nO1xuXG59O1xuXG4vKipcbiAqIERldGVybWluZXMgd2hhdCBmb3JtYXR0ZXIgZnVuY3Rpb24gaGFzIGJlZW4gY29uZmlndXJlZFxuICpcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21tYW5kXG4gKlxuICogQHJldHVybiB7P3N0cmluZ31cbiAqL1xubGV0IF9nZXRGb3JtYXR0ZXJGdW5jdGlvbiA9IGZ1bmN0aW9uIChjb21tYW5kKSB7XG5cblx0bGV0IHJlZ2V4O1xuXHRmb3IgKGxldCBrZXkgaW4gX2Zvcm1hdHRlcnMpIHtcbiAgICAgICAgaWYgKF9mb3JtYXR0ZXJzLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgIHJlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsga2V5ICsgJykkJyk7XG4gICAgICAgICAgICBpZiAocmVnZXguZXhlYyhjb21tYW5kKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfZm9ybWF0dGVyc1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cdH1cblxuXHRyZXR1cm4gbnVsbDtcblxufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBsYXlvdXQgdGFnIHBhcmFtcyBhc3NvY2lhdGVkIHdpdGggdGhlIGxheW91dCB0YWcuIFNvLCBmb3IgZXhhbXBsZSwgJyVke3l5eXktTU0tZGR9YFxuICogd291bGQgb3V0cHV0IGFuIGFycmF5IG9mIFsneXl5eS1NTS1kZCddXG4gKlxuICogQHByaXZhdGVcbiAqIEBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21tYW5kXG4gKlxuICogQHJldHVybiB7QXJyYXkuPHN0cmluZz59XG4gKi9cbmxldCBfZ2V0TGF5b3V0VGFnUGFyYW1zID0gZnVuY3Rpb24gKGNvbW1hbmQpIHtcblxuXHRsZXQgcGFyYW1zID0gW107XG5cdGxldCByZXN1bHQgPSBjb21tYW5kLm1hdGNoKC9cXHsoW159XSopKD89fSkvZyk7XG5cdGlmIChyZXN1bHQgIT0gbnVsbCkge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRwYXJhbXMucHVzaChyZXN1bHRbaV0uc3Vic3RyaW5nKDEpKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcGFyYW1zO1xuXG59O1xuXG4vKipcbiAqIEhhbmRsZXMgZm9ybWF0dGluZyB0aGUgbG9nIGV2ZW50IHVzaW5nIHRoZSBzcGVjaWZpZWQgZm9ybWF0dGVyIGFycmF5XG4gKlxuICogQHByaXZhdGVcbiAqIEBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7QXJyYXkuPGZ1bmN0aW9ufHN0cmluZz59IGZvcm1hdHRlclxuICogQHBhcmFtIHtMT0dfRVZFTlR9IGxvZ0V2ZW50XG4gKlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5sZXQgX2Zvcm1hdExvZ0V2ZW50ID0gZnVuY3Rpb24gKGZvcm1hdHRlciwgbG9nRXZlbnQpIHtcblxuXHRsZXQgcmVzcG9uc2U7XG5cdGxldCBtZXNzYWdlID0gJyc7XG5cdGxldCBjb3VudCA9IGZvcm1hdHRlci5sZW5ndGg7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuXHRcdGlmIChmb3JtYXR0ZXJbaV0gIT09IG51bGwpIHtcblxuXHRcdFx0aWYgKGZvcm1hdHRlcltpXSBpbnN0YW5jZW9mIE9iamVjdCkge1xuXG5cdFx0XHRcdHJlc3BvbnNlID0gZm9ybWF0dGVyW2ldLmZvcm1hdHRlcihsb2dFdmVudCwgZm9ybWF0dGVyW2ldLnBhcmFtcyk7XG5cdFx0XHRcdGlmIChyZXNwb25zZSAhPSBudWxsKSB7XG5cdFx0XHRcdFx0bWVzc2FnZSArPSByZXNwb25zZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRtZXNzYWdlICs9IGZvcm1hdHRlcltpXS5hZnRlcjtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bWVzc2FnZSArPSBmb3JtYXR0ZXJbaV07XG5cdFx0XHR9XG5cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbWVzc2FnZS50cmltKCk7XG5cbn07XG5cbi8qKlxuICpcbiAqIEBwcml2YXRlXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqXG4gKiBAcGFyYW0ge0xPR19FVkVOVH0gbG9nRXZlbnRcbiAqL1xubGV0IF9nZXRGaWxlRGV0YWlscyA9IGZ1bmN0aW9uIChsb2dFdmVudCkge1xuXG5cdGlmIChsb2dFdmVudC5sb2dFcnJvclN0YWNrKSB7XG5cblx0XHRsZXQgcGFydHMgPSBsb2dFdmVudC5sb2dFcnJvclN0YWNrLnN0YWNrLnNwbGl0KC9cXG4vZyk7XG5cdFx0bGV0IGZpbGUgPSBwYXJ0c1szXTtcblx0XHRmaWxlID0gZmlsZS5yZXBsYWNlKC9hdCAoLipcXCh8KShmaWxlfGh0dHB8aHR0cHN8KSg6fCkoXFwvfCkqLywgJycpO1xuXHRcdGZpbGUgPSBmaWxlLnJlcGxhY2UoJyknLCAnJyk7XG5cdFx0ZmlsZSA9IGZpbGUucmVwbGFjZSgodHlwZW9mIGxvY2F0aW9uICE9PSAndW5kZWZpbmVkJykgPyBsb2NhdGlvbi5ob3N0IDogJycsICcnKS50cmltKCk7XG5cblx0XHRsZXQgZmlsZVBhcnRzID0gZmlsZS5zcGxpdCgvXFw6L2cpO1xuXG5cdFx0bG9nRXZlbnQuY29sdW1uID0gZmlsZVBhcnRzLnBvcCgpO1xuXHRcdGxvZ0V2ZW50LmxpbmVOdW1iZXIgPSBmaWxlUGFydHMucG9wKCk7XG5cblx0XHRpZiAodHlwZW9mIGRlZmluZSAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdGxldCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXHRcdFx0bGV0IGFwcERpciA9IHBhdGguZGlybmFtZShyZXF1aXJlLm1haW4uZmlsZW5hbWUpO1xuXHRcdFx0bG9nRXZlbnQuZmlsZW5hbWUgPSBmaWxlUGFydHMuam9pbignOicpLnJlcGxhY2UoYXBwRGlyLCAnJykucmVwbGFjZSgvKFxcXFx8XFwvKS8sICcnKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bG9nRXZlbnQuZmlsZW5hbWUgPSBmaWxlUGFydHMuam9pbignOicpO1xuXHRcdH1cblxuXHR9IGVsc2Uge1xuXG5cdFx0bG9nRXZlbnQuY29sdW1uID0gJz8nO1xuXHRcdGxvZ0V2ZW50LmZpbGVuYW1lID0gJ2Fub255bW91cyc7XG5cdFx0bG9nRXZlbnQubGluZU51bWJlciA9ICc/JztcblxuXHR9XG5cbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxheW91dFxuICpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZUNvbXBpbGUobGF5b3V0KSB7XG5cdF9nZXRDb21waWxlZExheW91dChsYXlvdXQpO1xufVxuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYXlvdXRcbiAqIEBwYXJhbSB7TE9HX0VWRU5UfSBsb2dFdmVudFxuICpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdChsYXlvdXQsIGxvZ0V2ZW50KSB7XG5cdHJldHVybiBfZm9ybWF0TG9nRXZlbnQoX2dldENvbXBpbGVkTGF5b3V0KGxheW91dCksIGxvZ0V2ZW50KTtcbn1cbiJdfQ== + //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZvcm1hdHRlci5qcyJdLCJuYW1lcyI6WyJwcmVDb21waWxlIiwiZm9ybWF0IiwidXRpbGl0eSIsIl9DT01NQU5EX1JFR0VYIiwiX2NvbXBpbGVkTGF5b3V0cyIsIl9mb3JtYXRMb2dnZXIiLCJsb2dFdmVudCIsImxvZ2dlciIsIl9mb3JtYXREYXRlIiwicGFyYW1zIiwiZGF0ZSIsIl9mb3JtYXRFeGNlcHRpb24iLCJtZXNzYWdlIiwiZXJyb3IiLCJzdGFjayIsInVuZGVmaW5lZCIsInN0YWNrcyIsInNwbGl0IiwiZm9yRWFjaCIsIm5hbWUiLCJfZm9ybWF0RmlsZSIsImZpbGUiLCJfZ2V0RmlsZURldGFpbHMiLCJfZm9ybWF0TGluZU51bWJlciIsImxpbmVOdW1iZXIiLCJfZm9ybWF0Q29sdW1uIiwiY29sdW1uIiwiX2Zvcm1hdE1hcE1lc3NhZ2UiLCJwcm9wZXJ0aWVzIiwia2V5IiwicHVzaCIsImpvaW4iLCJfZm9ybWF0TG9nTWVzc2FnZSIsIl9mb3JtYXRNZXRob2ROYW1lIiwiZ2V0RnVuY3Rpb25OYW1lIiwibWV0aG9kIiwiX2Zvcm1hdExpbmVTZXBhcmF0b3IiLCJfZm9ybWF0TGV2ZWwiLCJsZXZlbCIsIkZBVEFMIiwiRVJST1IiLCJXQVJOIiwiSU5GTyIsIkRFQlVHIiwiVFJBQ0UiLCJfZm9ybWF0UmVsYXRpdmUiLCJyZWxhdGl2ZSIsIl9mb3JtYXRTZXF1ZW5jZU51bWJlciIsInNlcXVlbmNlIiwiX2Zvcm1hdHRlcnMiLCJfZ2V0Q29tcGlsZWRMYXlvdXQiLCJsYXlvdXQiLCJfY29tcGlsZUxheW91dCIsImluZGV4IiwiaW5kZXhPZiIsImN1cnJlbnRGb3JtYXRTdHJpbmciLCJmb3JtYXRBcnJheSIsInN1YnN0cmluZyIsInN0YXJ0SW5kZXgiLCJlbmRJbmRleCIsIl9nZXRGb3JtYXR0ZXJPYmplY3QiLCJmb3JtYXRTdHJpbmciLCJyZXN1bHQiLCJleGVjIiwibGVuZ3RoIiwiZm9ybWF0dGVyIiwiX2dldEZvcm1hdHRlckZ1bmN0aW9uIiwiX2dldExheW91dFRhZ1BhcmFtcyIsImFmdGVyIiwibGFzdEluZGV4T2YiLCJjb21tYW5kIiwicmVnZXgiLCJoYXNPd25Qcm9wZXJ0eSIsIlJlZ0V4cCIsIm1hdGNoIiwiaSIsIl9mb3JtYXRMb2dFdmVudCIsInJlc3BvbnNlIiwiY291bnQiLCJPYmplY3QiLCJ0cmltIiwibG9nRXJyb3JTdGFjayIsInBhcnRzIiwicmVwbGFjZSIsImxvY2F0aW9uIiwiaG9zdCIsImZpbGVQYXJ0cyIsInBvcCIsImRlZmluZSIsInBhdGgiLCJyZXF1aXJlIiwiYXBwRGlyIiwiZGlybmFtZSIsIm1haW4iLCJmaWxlbmFtZSIsInN0YXJ0c1dpdGgiXSwibWFwcGluZ3MiOiI7OztRQXVmZ0JBLFUsR0FBQUEsVTtnQ0FhQUMsTSxHQUFBQSxNOztBQTdmaEI7O0FBQ0E7OzRCQUFZQyxPOztBQUNaOzs7O0FBRUE7QUFDQSxJQUFNQyxpQkFBaUIsc0JBQXZCOztBQUVBO0FBZEE7Ozs7Ozs7QUFlQSxJQUFJQyxtQkFBbUIsRUFBdkI7O0FBRUE7Ozs7Ozs7O0FBUUEsSUFBSUMsZ0JBQWdCLFNBQWhCQSxhQUFnQixDQUFVQyxRQUFWLEVBQW9CO0FBQ3ZDLFNBQU9BLFNBQVNDLE1BQWhCO0FBQ0EsQ0FGRDs7QUFJQTs7Ozs7Ozs7O0FBU0EsSUFBSUMsY0FBYyxTQUFkQSxXQUFjLENBQVVGLFFBQVYsRUFBb0JHLE1BQXBCLEVBQTRCO0FBQzdDLFNBQU8sd0RBQVdILFNBQVNJLElBQXBCLEVBQTBCRCxPQUFPLENBQVAsQ0FBMUI7QUFBUDtBQUNBLENBRkQ7O0FBSUE7Ozs7Ozs7O0FBUUEsSUFBSUUsbUJBQW1CLFNBQW5CQSxnQkFBbUIsQ0FBVUwsUUFBVixFQUFvQjs7QUFFdkMsTUFBSU0sVUFBVSxFQUFkOztBQUVBLE1BQUlOLFNBQVNPLEtBQVQsSUFBa0IsSUFBdEIsRUFBNEI7O0FBRTlCLFFBQUlQLFNBQVNPLEtBQVQsQ0FBZUMsS0FBZixJQUF3QkMsU0FBNUIsRUFBdUM7QUFDdEMsVUFBSUMsU0FBU1YsU0FBU08sS0FBVCxDQUFlQyxL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ZSxJQUFULEdBQWdCZixTQUFTd0YsUUFBekI7QUFDQSxDQWxDRDs7QUFvQ0E7Ozs7Ozs7O0FBUU8sU0FBUzlGLFVBQVQsQ0FBb0JtRCxNQUFwQixFQUE0QjtBQUNsQ0QscUJBQW1CQyxNQUFuQjtBQUNBOztBQUVEOzs7Ozs7Ozs7QUFTTyxTQUFTbEQsTUFBVCxDQUFnQmtELE1BQWhCLEVBQXdCN0MsUUFBeEIsRUFBa0M7QUFDeEMsU0FBT3NFLGdCQUFnQjFCLG1CQUFtQkMsTUFBbkIsQ0FBaEIsRUFBNEM3QyxRQUE1QyxDQUFQO0FBQ0EiLCJmaWxlIjoiZm9ybWF0dGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBsb2c0anMgPGh0dHBzOi8vZ2l0aHViLmNvbS9hbmlnZW5lcm8vbG9nNGpzPlxuICpcbiAqIENvcHlyaWdodCAyMDE2LXByZXNlbnQgUm9iaW4gU2NodWx0eiA8aHR0cDovL2FuaWdlbmVyby5jb20+XG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge2RhdGVGb3JtYXR9IGZyb20gJy4vZGF0ZUZvcm1hdHRlcic7XG5pbXBvcnQgKiBhcyB1dGlsaXR5IGZyb20gJy4vdXRpbGl0eSc7XG5pbXBvcnQge0xvZ0xldmVsfSBmcm9tICcuL2NvbnN0L2xvZ0xldmVsJztcblxuLyoqIEBjb25zdCAqL1xuY29uc3QgX0NPTU1BTkRfUkVHRVggPSAvJShbYS16LEEtWl0rKSg/PVxce3wpLztcblxuLyoqIEB0eXBlIHtPYmplY3R9ICovXG5sZXQgX2NvbXBpbGVkTGF5b3V0cyA9IHt9O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7TE9HX0VWRU5UfSBsb2dFdmVudFxuICpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xubGV0IF9mb3JtYXRMb2dnZXIgPSBmdW5jdGlvbiAobG9nRXZlbnQpIHtcblx0cmV0dXJuIGxvZ0V2ZW50LmxvZ2dlcjtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtMT0dfRVZFTlR9IGxvZ0V2ZW50XG4gKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBwYXJhbXNcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmxldCBfZm9ybWF0RGF0ZSA9IGZ1bmN0aW9uIChsb2dFdmVudCwgcGFyYW1zKSB7XG5cdHJldHVybiBkYXRlRm9ybWF0KGxvZ0V2ZW50LmRhdGUsIHBhcmFtc1swXSk7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7TE9HX0VWRU5UfSBsb2dFdmVudFxuICpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xubGV0IF9mb3JtYXRFeGNlcHRpb24gPSBmdW5jdGlvbiAobG9nRXZlbnQpIHtcblxuICAgIGxldCBtZXNzYWdlID0gJyc7XG5cbiAgICBpZiAobG9nRXZlbnQuZXJyb3IgIT0gbnVsbCkge1xuXG5cdFx0aWYgKGxvZ0V2ZW50LmVycm9yLnN0YWNrICE9IHVuZGVmaW5lZCkge1xuXHRcdFx0bGV0IHN0YWNrcyA9IGxvZ0V2ZW50LmVycm9yLnN0YWNrLnNwbGl0KC9cXG4vZyk7XG4gICAgICAgICAgICBzdGFja3MuZm9yRWFjaChmdW5jdGlvbiAoc3RhY2spIHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlICs9IGBcXHQke3N0YWNrfVxcbmA7XG4gICAgICAgICAgICB9KTtcblx0XHR9IGVsc2UgaWYgKGxvZ0V2ZW50LmVycm9yLm1lc3NhZ2UgIT0gbnVsbCAmJiBsb2dFdmVudC5lcnJvci5tZXNzYWdlICE9ICcnKSB7XG5cdFx0XHRtZXNzYWdlICs9IGBcXHQke2xvZ0V2ZW50LmVycm9yLm5hbWV9OiAke2xvZ0V2ZW50LmVycm9yLm1lc3NhZ2V9XFxuYDtcblx0XHR9XG5cblx0fVxuXG5cdHJldHVybiBtZXNzYWdlO1xuXG59O1xuXG4vKipcbiAqIEZvcm1hdHMgdGhlIGZpbGUgKGUuZy4gdGVzdC5qcykgdG8gdGhlIGZpbGVcbiAqXG4gKiBAcHJpdmF0ZVxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtMT0dfRVZFTlR9IGxvZ0V2ZW50XG4gKi9cbmxldCBfZm9ybWF0RmlsZSA9IGZ1bmN0aW9uIChsb2dFdmVudCkge1xuXG4gICAgaWYgKCFsb2dFdmVudC5maWxlKSB7XG5cdFx0X2dldEZpbGVEZXRhaWxzKGxvZ0V2ZW50KTtcblx0fVxuXG5cdHJldHVybiBsb2dFdmVudC5maWxlO1xuXG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7TE9HX0VWRU5UfSBsb2dFdmVudFxuICpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xubGV0IF9mb3JtYXRMaW5lTnVtYmVyID0gZnVuY3Rpb24gKGxvZ0V2ZW50KSB7XG5cbiAgICBpZiAoIWxvZ0V2ZW50LmxpbmVOdW1iZXIpIHtcblx0XHRfZ2V0RmlsZURldGFpbHMobG9nRXZlbnQpO1xuXHR9XG5cblx0cmV0dXJuIGAke2xvZ0V2ZW50LmxpbmVOdW1iZXJ9YDtcblxufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqXG4gKiBAcGFyYW0ge0xPR19FVkVOVH0gbG9nRXZlbnRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmxldCBfZm9ybWF0Q29sdW1uID0gZnVuY3Rpb24gKGxvZ0V2ZW50KSB7XG5cbiAgICBpZiAoIWxvZ0V2ZW50LmNvbHVtbikge1xuXHRcdF9nZXRGaWxlRGV0YWlscyhsb2dFdmVudCk7XG5cdH1cblxuXHRyZXR1cm4gYCR7bG9nRXZlbnQuY29sdW1ufWA7XG5cbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtMT0dfRVZFTlR9IGxvZ0V2ZW50XG4gKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBwYXJhbXNcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmxldCBfZm9ybWF0TWFwTWVzc2FnZSA9IGZ1bmN0aW9uIChsb2dFdmVudCwgcGFyYW1zKSB7XG5cdGxldCBtZXNzYWdlID0gbnVsbDtcblx0aWYgKGxvZ0V2ZW50LnByb3BlcnRpZXMpIHtcblxuXHRcdG1lc3NhZ2UgPSBbXTtcblx0XHRmb3IgKGxldCBrZXkgaW4gbG9nRXZlbnQucHJvcGVydGllcykge1xuXHRcdFx0aWYgKHBhcmFtc1swXSkge1xuXHRcdFx0XHRpZiAocGFyYW1zWzBdID09IGtleSkge1xuXHRcdFx0XHRcdG1lc3NhZ2UucHVzaChsb2dFdmVudC5wcm9wZXJ0aWVzW2tleV0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtZXNzYWdlLnB1c2goJ3snICsga2V5ICsgJywnICsgbG9nRXZlbnQucHJvcGVydGllc1trZXldICsgJ30nKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gJ3snICsgbWVzc2FnZS5qb2luKCcsJykgKyAnfSc7XG5cblx0fVxuXHRyZXR1cm4gbWVzc2FnZTtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtMT0dfRVZFTlR9IGxvZ0V2ZW50XG4gKlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5sZXQgX2Zvcm1hdExvZ01lc3NhZ2UgPSBmdW5jdGlvbiAobG9nRXZlbnQpIHtcblx0cmV0dXJuIGxvZ0V2ZW50Lm1lc3NhZ2U7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7TE9HX0VWRU5UfSBsb2dFdmVudFxuICpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xubGV0IF9mb3JtYXRNZXRob2ROYW1lID0gZnVuY3Rpb24gKGxvZ0V2ZW50KSB7XG5cdHJldHVybiB1dGlsaXR5LmdldEZ1bmN0aW9uTmFtZShsb2dFdmVudC5tZXRob2QpO1xufTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKi9cbmxldCBfZm9ybWF0TGluZVNlcGFyYXRvciA9IGZ1bmN0aW9uICgpIHtcblx0cmV0dXJuICdcXG4nO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqXG4gKiBAcGFyYW0ge0xPR19FVkVOVH0gbG9nRXZlbnRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmxldCBfZm9ybWF0TGV2ZWwgPSBmdW5jdGlvbiAobG9nRXZlbnQpIHtcblxuICAgIHN3aXRjaCAobG9nRXZlbnQubGV2ZWwpIHtcblxuICAgICAgICBjYXNlIExvZ0xldmVsLkZBVEFMOlxuICAgICAgICAgICAgcmV0dXJuICdGQVRBTCc7XG4gICAgICAgIGNhc2UgTG9nTGV2ZWwuRVJST1I6XG4gICAgICAgICAgICByZXR1cm4gJ0VSUk9SJztcbiAgICAgICAgY2FzZSBMb2dMZXZlbC5XQVJOOlxuICAgICAgICAgICAgcmV0dXJuICdXQVJOJztcbiAgICAgICAgY2FzZSBMb2dMZXZlbC5JTkZPOlxuICAgICAgICAgICAgcmV0dXJuICdJTkZPJztcbiAgICAgICAgY2FzZSBMb2dMZXZlbC5ERUJVRzpcbiAgICAgICAgICAgIHJldHVybiAnREVCVUcnO1xuICAgICAgICBjYXNlIExvZ0xldmVsLlRSQUNFOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuICdUUkFDRSc7XG5cbiAgICB9XG5cbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtMT0dfRVZFTlR9IGxvZ0V2ZW50XG4gKlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5sZXQgX2Zvcm1hdFJlbGF0aXZlID0gZnVuY3Rpb24gKGxvZ0V2ZW50KSB7XG5cdHJldHVybiAnJyArIGxvZ0V2ZW50LnJlbGF0aXZlO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqXG4gKiBAcGFyYW0ge0xPR19FVkVOVH0gbG9nRXZlbnRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmxldCBfZm9ybWF0U2VxdWVuY2VOdW1iZXIgPSBmdW5jdGlvbiAobG9nRXZlbnQpIHtcblx0cmV0dXJuICcnICsgbG9nRXZlbnQuc2VxdWVuY2U7XG59O1xuXG5sZXQgX2Zvcm1hdHRlcnMgPSB7XG5cdCdjfGxvZ2dlcicgOiBfZm9ybWF0TG9nZ2VyLFxuXHQnZHxkYXRlJyA6IF9mb3JtYXREYXRlLFxuXHQnZXh8ZXhjZXB0aW9ufHRocm93YWJsZScgOiBfZm9ybWF0RXhjZXB0aW9uLFxuXHQnRnxmaWxlJyA6IF9mb3JtYXRGaWxlLFxuXHQnS3xtYXB8TUFQJyA6IF9mb3JtYXRNYXBNZXNzYWdlLFxuXHQnTHxsaW5lJyA6IF9mb3JtYXRMaW5lTnVtYmVyLFxuXHQnY29sdW1uJyA6IF9mb3JtYXRDb2x1bW4sXG5cdCdtfG1zZ3xtZXNzYWdlJyA6IF9mb3JtYXRMb2dNZXNzYWdlLFxuXHQnTXxtZXRob2QnIDogX2Zvcm1hdE1ldGhvZE5hbWUsXG5cdCduJyA6IF9mb3JtYXRMaW5lU2VwYXJhdG9yLFxuXHQncHxsZXZlbCcgOiBfZm9ybWF0TGV2ZWwsXG5cdCdyfHJlbGF0aXZlJyA6IF9mb3JtYXRSZWxhdGl2ZSxcblx0J3NufHNlcXVlbmNlTnVtYmVyJyA6IF9mb3JtYXRTZXF1ZW5jZU51bWJlclxufTtcblxuLyoqXG4gKiBHZXQgdGhlIGNvbXBpbGVkIGxheW91dCBmb3IgdGhlIHNwZWNpZmllZCBsYXlvdXQgc3RyaW5nLiBJZiB0aGUgY29tcGlsZWQgbGF5b3V0IGRvZXMgbm90XG4gKiBleGlzdCwgdGhlbiB3ZSB3YW50IHRvIGNyZWF0ZSBpdC5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbGF5b3V0XG4gKlxuICogQHJldHVybiB7QXJyYXkuPHN0cmluZ3xmdW5jdGlvbj59XG4gKi9cbmxldCBfZ2V0Q29tcGlsZWRMYXlvdXQgPSBmdW5jdGlvbiAobGF5b3V0KSB7XG5cblx0aWYgKF9jb21waWxlZExheW91dHNbbGF5b3V0XSkge1xuXHRcdHJldHVybiBfY29tcGlsZWRMYXlvdXRzW2xheW91dF07XG5cdH1cblxuXHRyZXR1cm4gX2NvbXBpbGVMYXlvdXQobGF5b3V0KTtcblxufTtcblxuLyoqXG4gKiBDb21waWxlcyBhIGxheW91dCBpbnRvIGFuIGFycmF5LiBUaGUgYXJyYXkgY29udGFpbnMgZnVuY3Rpb25zXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxheW91dFxuICpcbiAqIEByZXR1cm4ge0FycmF5LjxzdHJpbmd8ZnVuY3Rpb24+fVxuICovXG5sZXQgX2NvbXBpbGVMYXlvdXQgPSBmdW5jdGlvbiAobGF5b3V0KSB7XG5cblx0bGV0IGluZGV4ID0gbGF5b3V0LmluZGV4T2YoJyUnKTtcblx0bGV0IGN1cnJlbnRGb3JtYXRTdHJpbmcgPSAnJztcblx0bGV0IGZvcm1hdEFycmF5ID0gW107XG5cblx0aWYgKGluZGV4ICE9IDApIHtcblx0XHRmb3JtYXRBcnJheS5wdXNoKGxheW91dC5zdWJzdHJpbmcoMCwgaW5kZXgpKTtcblx0fVxuXG5cdGRvIHtcblxuXHRcdGxldCBzdGFydEluZGV4ID0gaW5kZXg7XG5cdFx0bGV0IGVuZEluZGV4ID0gaW5kZXggPSBsYXlvdXQuaW5kZXhPZignJScsIGluZGV4ICsgMSk7XG5cblx0XHRpZiAoZW5kSW5kZXggPCAwKSB7XG5cdFx0XHRjdXJyZW50Rm9ybWF0U3RyaW5nID0gbGF5b3V0LnN1YnN0cmluZyhzdGFydEluZGV4KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y3VycmVudEZvcm1hdFN0cmluZyA9IGxheW91dC5zdWJzdHJpbmcoc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuXHRcdH1cblxuXHRcdGZvcm1hdEFycmF5LnB1c2goX2dldEZvcm1hdHRlck9iamVjdChjdXJyZW50Rm9ybWF0U3RyaW5nKSk7XG5cblx0fSB3aGlsZSAoaW5kZXggPiAtMSk7XG5cbiAgICAvLyBzZXQgdGhlIGZvcm1hdCBhcnJheSB0byB0aGUgc3BlY2lmaWVkIGNvbXBpbGVkIGxheW91dFxuXHRfY29tcGlsZWRMYXlvdXRzW2xheW91dF0gPSBmb3JtYXRBcnJheTtcblxuXHRyZXR1cm4gZm9ybWF0QXJyYXk7XG5cbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1hdFN0cmluZ1xuICpcbiAqIEByZXR1cm4ge09iamVjdHxzdHJpbmd9XG4gKi9cbmxldCBfZ2V0Rm9ybWF0dGVyT2JqZWN0ID0gZnVuY3Rpb24gKGZvcm1hdFN0cmluZykge1xuXG5cdGxldCByZXN1bHQgPSBfQ09NTUFORF9SRUdFWC5leGVjKGZvcm1hdFN0cmluZyk7XG5cdGlmIChyZXN1bHQgIT0gbnVsbCAmJiByZXN1bHQubGVuZ3RoID09IDIpIHtcblxuXHRcdGxldCBmb3JtYXR0ZXIgPSBfZ2V0Rm9ybWF0dGVyRnVuY3Rpb24ocmVzdWx0WzFdKTtcblx0XHRpZiAoIWZvcm1hdHRlcikge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0bGV0IHBhcmFtcyA9IF9nZXRMYXlvdXRUYWdQYXJhbXMoZm9ybWF0U3RyaW5nKTtcblxuXHRcdGxldCBhZnRlciA9ICcnO1xuXHRcdGxldCBlbmRJbmRleCA9IGZvcm1hdFN0cmluZy5sYXN0SW5kZXhPZignfScpO1xuXHRcdGlmIChlbmRJbmRleCAhPSAtMSkge1xuXHRcdFx0YWZ0ZXIgPSBmb3JtYXRTdHJpbmcuc3Vic3RyaW5nKGVuZEluZGV4ICsgMSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFmdGVyID0gZm9ybWF0U3RyaW5nLnN1YnN0cmluZyhyZXN1bHQuaW5kZXggKyByZXN1bHRbMV0ubGVuZ3RoICsgMSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdCdmb3JtYXR0ZXInIDogZm9ybWF0dGVyLFxuXHRcdFx0J3BhcmFtcycgOiBwYXJhbXMsXG5cdFx0XHQnYWZ0ZXInIDogYWZ0ZXJcblx0XHR9O1xuXG5cdH1cblxuXHRyZXR1cm4gZm9ybWF0U3RyaW5nO1xuXG59O1xuXG4vKipcbiAqIERldGVybWluZXMgd2hhdCBmb3JtYXR0ZXIgZnVuY3Rpb24gaGFzIGJlZW4gY29uZmlndXJlZFxuICpcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21tYW5kXG4gKlxuICogQHJldHVybiB7P3N0cmluZ31cbiAqL1xubGV0IF9nZXRGb3JtYXR0ZXJGdW5jdGlvbiA9IGZ1bmN0aW9uIChjb21tYW5kKSB7XG5cblx0bGV0IHJlZ2V4O1xuXHRmb3IgKGxldCBrZXkgaW4gX2Zvcm1hdHRlcnMpIHtcbiAgICAgICAgaWYgKF9mb3JtYXR0ZXJzLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgIHJlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsga2V5ICsgJykkJyk7XG4gICAgICAgICAgICBpZiAocmVnZXguZXhlYyhjb21tYW5kKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfZm9ybWF0dGVyc1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cdH1cblxuXHRyZXR1cm4gbnVsbDtcblxufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBsYXlvdXQgdGFnIHBhcmFtcyBhc3NvY2lhdGVkIHdpdGggdGhlIGxheW91dCB0YWcuIFNvLCBmb3IgZXhhbXBsZSwgJyVke3l5eXktTU0tZGR9YFxuICogd291bGQgb3V0cHV0IGFuIGFycmF5IG9mIFsneXl5eS1NTS1kZCddXG4gKlxuICogQHByaXZhdGVcbiAqIEBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21tYW5kXG4gKlxuICogQHJldHVybiB7QXJyYXkuPHN0cmluZz59XG4gKi9cbmxldCBfZ2V0TGF5b3V0VGFnUGFyYW1zID0gZnVuY3Rpb24gKGNvbW1hbmQpIHtcblxuXHRsZXQgcGFyYW1zID0gW107XG5cdGxldCByZXN1bHQgPSBjb21tYW5kLm1hdGNoKC9cXHsoW159XSopKD89fSkvZyk7XG5cdGlmIChyZXN1bHQgIT0gbnVsbCkge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRwYXJhbXMucHVzaChyZXN1bHRbaV0uc3Vic3RyaW5nKDEpKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcGFyYW1zO1xuXG59O1xuXG4vKipcbiAqIEhhbmRsZXMgZm9ybWF0dGluZyB0aGUgbG9nIGV2ZW50IHVzaW5nIHRoZSBzcGVjaWZpZWQgZm9ybWF0dGVyIGFycmF5XG4gKlxuICogQHByaXZhdGVcbiAqIEBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7QXJyYXkuPGZ1bmN0aW9ufHN0cmluZz59IGZvcm1hdHRlclxuICogQHBhcmFtIHtMT0dfRVZFTlR9IGxvZ0V2ZW50XG4gKlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5sZXQgX2Zvcm1hdExvZ0V2ZW50ID0gZnVuY3Rpb24gKGZvcm1hdHRlciwgbG9nRXZlbnQpIHtcblxuXHRsZXQgcmVzcG9uc2U7XG5cdGxldCBtZXNzYWdlID0gJyc7XG5cdGxldCBjb3VudCA9IGZvcm1hdHRlci5sZW5ndGg7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuXHRcdGlmIChmb3JtYXR0ZXJbaV0gIT09IG51bGwpIHtcblxuXHRcdFx0aWYgKGZvcm1hdHRlcltpXSBpbnN0YW5jZW9mIE9iamVjdCkge1xuXG5cdFx0XHRcdHJlc3BvbnNlID0gZm9ybWF0dGVyW2ldLmZvcm1hdHRlcihsb2dFdmVudCwgZm9ybWF0dGVyW2ldLnBhcmFtcyk7XG5cdFx0XHRcdGlmIChyZXNwb25zZSAhPSBudWxsKSB7XG5cdFx0XHRcdFx0bWVzc2FnZSArPSByZXNwb25zZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRtZXNzYWdlICs9IGZvcm1hdHRlcltpXS5hZnRlcjtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bWVzc2FnZSArPSBmb3JtYXR0ZXJbaV07XG5cdFx0XHR9XG5cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbWVzc2FnZS50cmltKCk7XG5cbn07XG5cbi8qKlxuICpcbiAqIEBwcml2YXRlXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqXG4gKiBAcGFyYW0ge0xPR19FVkVOVH0gbG9nRXZlbnRcbiAqL1xubGV0IF9nZXRGaWxlRGV0YWlscyA9IGZ1bmN0aW9uIChsb2dFdmVudCkge1xuXG5cdGlmIChsb2dFdmVudC5sb2dFcnJvclN0YWNrKSB7XG5cblx0XHRsZXQgcGFydHMgPSBsb2dFdmVudC5sb2dFcnJvclN0YWNrLnN0YWNrLnNwbGl0KC9cXG4vZyk7XG5cdFx0bGV0IGZpbGUgPSBwYXJ0c1szXTtcblx0XHRmaWxlID0gZmlsZS5yZXBsYWNlKC9hdCAoLipcXCh8KShmaWxlfGh0dHB8aHR0cHN8KSg6fCkoXFwvfCkqLywgJycpO1xuXHRcdGZpbGUgPSBmaWxlLnJlcGxhY2UoJyknLCAnJyk7XG5cdFx0ZmlsZSA9IGZpbGUucmVwbGFjZSgodHlwZW9mIGxvY2F0aW9uICE9PSAndW5kZWZpbmVkJykgPyBsb2NhdGlvbi5ob3N0IDogJycsICcnKS50cmltKCk7XG5cblx0XHRsZXQgZmlsZVBhcnRzID0gZmlsZS5zcGxpdCgvXFw6L2cpO1xuXG5cdFx0bG9nRXZlbnQuY29sdW1uID0gZmlsZVBhcnRzLnBvcCgpO1xuXHRcdGxvZ0V2ZW50LmxpbmVOdW1iZXIgPSBmaWxlUGFydHMucG9wKCk7XG5cblx0XHRpZiAodHlwZW9mIGRlZmluZSAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdGxldCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXHRcdFx0bGV0IGFwcERpciA9IHBhdGguZGlybmFtZShyZXF1aXJlLm1haW4uZmlsZW5hbWUpO1xuXHRcdFx0aWYgKCFmaWxlUGFydHNbMF0uc3RhcnRzV2l0aChhcHBEaXIpKSB7XG5cdFx0XHRcdGFwcERpciA9ICcnO1xuXHRcdFx0fVxuXHRcdFx0bG9nRXZlbnQuZmlsZW5hbWUgPSBmaWxlUGFydHMuam9pbignOicpLnJlcGxhY2UoYXBwRGlyLCAnJykucmVwbGFjZSgvXihcXFxcfFxcLykvLCAnJyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGxvZ0V2ZW50LmZpbGVuYW1lID0gZmlsZVBhcnRzLmpvaW4oJzonKTtcblx0XHR9XG5cblx0fSBlbHNlIHtcblxuXHRcdGxvZ0V2ZW50LmNvbHVtbiA9ICc/Jztcblx0XHRsb2dFdmVudC5maWxlbmFtZSA9ICdhbm9ueW1vdXMnO1xuXHRcdGxvZ0V2ZW50LmxpbmVOdW1iZXIgPSAnPyc7XG5cblx0fVxuXHRsb2dFdmVudC5maWxlID0gbG9nRXZlbnQuZmlsZW5hbWU7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYXlvdXRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVDb21waWxlKGxheW91dCkge1xuXHRfZ2V0Q29tcGlsZWRMYXlvdXQobGF5b3V0KTtcbn1cblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbGF5b3V0XG4gKiBAcGFyYW0ge0xPR19FVkVOVH0gbG9nRXZlbnRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXQobGF5b3V0LCBsb2dFdmVudCkge1xuXHRyZXR1cm4gX2Zvcm1hdExvZ0V2ZW50KF9nZXRDb21waWxlZExheW91dChsYXlvdXQpLCBsb2dFdmVudCk7XG59XG4iXX0= /***/ }), /* 2 */ diff --git a/dist/es6/formatter.js b/dist/es6/formatter.js index a6561ee..641a13c 100644 --- a/dist/es6/formatter.js +++ b/dist/es6/formatter.js @@ -117,6 +117,23 @@ let _formatLineNumber = function (logEvent) { return `${logEvent.lineNumber}`; }; +/** + * @function + * @memberOf formatter + * + * @param {LOG_EVENT} logEvent + * + * @return {string} + */ +let _formatColumn = function (logEvent) { + + if (!logEvent.column) { + _getFileDetails(logEvent); + } + + return `${logEvent.column}`; +}; + /** * @function * @memberOf formatter @@ -239,6 +256,7 @@ let _formatters = { 'F|file': _formatFile, 'K|map|MAP': _formatMapMessage, 'L|line': _formatLineNumber, + 'column': _formatColumn, 'm|msg|message': _formatLogMessage, 'M|method': _formatMethodName, 'n': _formatLineSeparator, @@ -455,7 +473,10 @@ let _getFileDetails = function (logEvent) { if (typeof define !== 'undefined') { let path = require('path'); let appDir = path.dirname(require.main.filename); - logEvent.filename = fileParts.join(':').replace(appDir, '').replace(/(\\|\/)/, ''); + if (!fileParts[0].startsWith(appDir)) { + appDir = ''; + } + logEvent.filename = fileParts.join(':').replace(appDir, '').replace(/^(\\|\/)/, ''); } else { logEvent.filename = fileParts.join(':'); } @@ -465,6 +486,7 @@ let _getFileDetails = function (logEvent) { logEvent.filename = 'anonymous'; logEvent.lineNumber = '?'; } + logEvent.file = logEvent.filename; }; /** @@ -491,4 +513,4 @@ function preCompile(layout) { function format(layout, logEvent) { return _formatLogEvent(_getCompiledLayout(layout), logEvent); } -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZvcm1hdHRlci5qcyJdLCJuYW1lcyI6WyJwcmVDb21waWxlIiwiZm9ybWF0IiwidXRpbGl0eSIsIl9DT01NQU5EX1JFR0VYIiwiX2NvbXBpbGVkTGF5b3V0cyIsIl9mb3JtYXRMb2dnZXIiLCJsb2dFdmVudCIsImxvZ2dlciIsIl9mb3JtYXREYXRlIiwicGFyYW1zIiwiZGF0ZSIsIl9mb3JtYXRFeGNlcHRpb24iLCJtZXNzYWdlIiwiZXJyb3IiLCJzdGFjayIsInVuZGVmaW5lZCIsInN0YWNrcyIsInNwbGl0IiwiZm9yRWFjaCIsIm5hbWUiLCJfZm9ybWF0RmlsZSIsImZpbGUiLCJfZ2V0RmlsZURldGFpbHMiLCJfZm9ybWF0TGluZU51bWJlciIsImxpbmVOdW1iZXIiLCJfZm9ybWF0TWFwTWVzc2FnZSIsInByb3BlcnRpZXMiLCJrZXkiLCJwdXNoIiwiam9pbiIsIl9mb3JtYXRMb2dNZXNzYWdlIiwiX2Zvcm1hdE1ldGhvZE5hbWUiLCJnZXRGdW5jdGlvbk5hbWUiLCJtZXRob2QiLCJfZm9ybWF0TGluZVNlcGFyYXRvciIsIl9mb3JtYXRMZXZlbCIsImxldmVsIiwiRkFUQUwiLCJFUlJPUiIsIldBUk4iLCJJTkZPIiwiREVCVUciLCJUUkFDRSIsIl9mb3JtYXRSZWxhdGl2ZSIsInJlbGF0aXZlIiwiX2Zvcm1hdFNlcXVlbmNlTnVtYmVyIiwic2VxdWVuY2UiLCJfZm9ybWF0dGVycyIsIl9nZXRDb21waWxlZExheW91dCIsImxheW91dCIsIl9jb21waWxlTGF5b3V0IiwiaW5kZXgiLCJpbmRleE9mIiwiY3VycmVudEZvcm1hdFN0cmluZyIsImZvcm1hdEFycmF5Iiwic3Vic3RyaW5nIiwic3RhcnRJbmRleCIsImVuZEluZGV4IiwiX2dldEZvcm1hdHRlck9iamVjdCIsImZvcm1hdFN0cmluZyIsInJlc3VsdCIsImV4ZWMiLCJsZW5ndGgiLCJmb3JtYXR0ZXIiLCJfZ2V0Rm9ybWF0dGVyRnVuY3Rpb24iLCJfZ2V0TGF5b3V0VGFnUGFyYW1zIiwiYWZ0ZXIiLCJsYXN0SW5kZXhPZiIsImNvbW1hbmQiLCJyZWdleCIsImhhc093blByb3BlcnR5IiwiUmVnRXhwIiwibWF0Y2giLCJpIiwiX2Zvcm1hdExvZ0V2ZW50IiwicmVzcG9uc2UiLCJjb3VudCIsIk9iamVjdCIsInRyaW0iLCJsb2dFcnJvclN0YWNrIiwicGFydHMiLCJyZXBsYWNlIiwibG9jYXRpb24iLCJob3N0IiwiZmlsZVBhcnRzIiwiY29sdW1uIiwicG9wIiwiZGVmaW5lIiwicGF0aCIsInJlcXVpcmUiLCJhcHBEaXIiLCJkaXJuYW1lIiwibWFpbiIsImZpbGVuYW1lIl0sIm1hcHBpbmdzIjoiOzs7OztRQWllZ0JBLFUsR0FBQUEsVTtnQ0FhQUMsTSxHQUFBQSxNOztBQXZlaEI7O0FBQ0E7OzRCQUFZQyxPOztBQUNaOzs7O0FBRUE7QUFDQSxNQUFNQyxpQkFBaUIsc0JBQXZCOztBQUVBO0FBZEE7Ozs7Ozs7QUFlQSxJQUFJQyxtQkFBbUIsRUFBdkI7O0FBRUE7Ozs7Ozs7O0FBUUEsSUFBSUMsZ0JBQWdCLFVBQVVDLFFBQVYsRUFBb0I7QUFDdkMsU0FBT0EsU0FBU0MsTUFBaEI7QUFDQSxDQUZEOztBQUlBOzs7Ozs7Ozs7QUFTQSxJQUFJQyxjQUFjLFVBQVVGLFFBQVYsRUFBb0JHLE1BQXBCLEVBQTRCO0FBQzdDLFNBQU8sd0RBQVdILFNBQVNJLElBQXBCLEVBQTBCRCxPQUFPLENBQVAsQ0FBMUI7QUFBUDtBQUNBLENBRkQ7O0FBSUE7Ozs7Ozs7O0FBUUEsSUFBSUUsbUJBQW1CLFVBQVVMLFFBQVYsRUFBb0I7O0FBRXZDLE1BQUlNLFVBQVUsRUFBZDs7QUFFQSxNQUFJTixTQUFTTyxLQUFULElBQWtCLElBQXRCLEVBQTRCOztBQUU5QixRQUFJUCxTQUFTTyxLQUFULENBQWVDLEtBQWYsSUFBd0JDLFNBQTVCLEVBQXVDO0FBQ3RDLFVBQUlDLFNBQVNWLFNBQVNPLEtBQVQsQ0FBZUMsS0FBZixDQUFxQkcsS0FBckIsQ0FBMkIsS0FBM0IsQ0FBYjtBQUNTRCxhQUFPRSxPQUFQLENBQWUsVUFBVUosS0FB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QUFLRyxPQUFMLENBQWFGLFFBQVFHLElBQVIsQ0FBYUMsUUFBMUIsQ0FBYjtBQUNBdkYsZUFBU3VGLFFBQVQsR0FBb0JULFVBQVV2RCxJQUFWLENBQWUsR0FBZixFQUFvQm9ELE9BQXBCLENBQTRCUyxNQUE1QixFQUFvQyxFQUFwQyxFQUF3Q1QsT0FBeEMsQ0FBZ0QsU0FBaEQsRUFBMkQsRUFBM0QsQ0FBcEI7QUFDQSxLQUpELE1BSU87QUFDTjNFLGVBQVN1RixRQUFULEdBQW9CVCxVQUFVdkQsSUFBVixDQUFlLEdBQWYsQ0FBcEI7QUFDQTtBQUVELEdBckJELE1BcUJPOztBQUVOdkIsYUFBUytFLE1BQVQsR0FBa0IsR0FBbEI7QUFDQS9FLGFBQVN1RixRQUFULEdBQW9CLFdBQXBCO0FBQ0F2RixhQUFTa0IsVUFBVCxHQUFzQixHQUF0QjtBQUVBO0FBRUQsQ0EvQkQ7O0FBaUNBOzs7Ozs7OztBQVFPLFNBQVN4QixVQUFULENBQW9CaUQsTUFBcEIsRUFBNEI7QUFDbENELHFCQUFtQkMsTUFBbkI7QUFDQTs7QUFFRDs7Ozs7Ozs7O0FBU08sU0FBU2hELE1BQVQsQ0FBZ0JnRCxNQUFoQixFQUF3QjNDLFFBQXhCLEVBQWtDO0FBQ3hDLFNBQU9vRSxnQkFBZ0IxQixtQkFBbUJDLE1BQW5CLENBQWhCLEVBQTRDM0MsUUFBNUMsQ0FBUDtBQUNBIiwiZmlsZSI6ImZvcm1hdHRlci5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogbG9nNGpzIDxodHRwczovL2dpdGh1Yi5jb20vYW5pZ2VuZXJvL2xvZzRqcz5cbiAqXG4gKiBDb3B5cmlnaHQgMjAxNi1wcmVzZW50IFJvYmluIFNjaHVsdHogPGh0dHA6Ly9hbmlnZW5lcm8uY29tPlxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlXG4gKi9cblxuaW1wb3J0IHtkYXRlRm9ybWF0fSBmcm9tICcuL2RhdGVGb3JtYXR0ZXInO1xuaW1wb3J0ICogYXMgdXRpbGl0eSBmcm9tICcuL3V0aWxpdHknO1xuaW1wb3J0IHtMb2dMZXZlbH0gZnJvbSAnLi9jb25zdC9sb2dMZXZlbCc7XG5cbi8qKiBAY29uc3QgKi9cbmNvbnN0IF9DT01NQU5EX1JFR0VYID0gLyUoW2EteixBLVpdKykoPz1cXHt8KS87XG5cbi8qKiBAdHlwZSB7T2JqZWN0fSAqL1xubGV0IF9jb21waWxlZExheW91dHMgPSB7fTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqXG4gKiBAcGFyYW0ge0xPR19FVkVOVH0gbG9nRXZlbnRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmxldCBfZm9ybWF0TG9nZ2VyID0gZnVuY3Rpb24gKGxvZ0V2ZW50KSB7XG5cdHJldHVybiBsb2dFdmVudC5sb2dnZXI7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7TE9HX0VWRU5UfSBsb2dFdmVudFxuICogQHBhcmFtIHtBcnJheS48c3RyaW5nPn0gcGFyYW1zXG4gKlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5sZXQgX2Zvcm1hdERhdGUgPSBmdW5jdGlvbiAobG9nRXZlbnQsIHBhcmFtcykge1xuXHRyZXR1cm4gZGF0ZUZvcm1hdChsb2dFdmVudC5kYXRlLCBwYXJhbXNbMF0pO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqXG4gKiBAcGFyYW0ge0xPR19FVkVOVH0gbG9nRXZlbnRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmxldCBfZm9ybWF0RXhjZXB0aW9uID0gZnVuY3Rpb24gKGxvZ0V2ZW50KSB7XG5cbiAgICBsZXQgbWVzc2FnZSA9ICcnO1xuXG4gICAgaWYgKGxvZ0V2ZW50LmVycm9yICE9IG51bGwpIHtcblxuXHRcdGlmIChsb2dFdmVudC5lcnJvci5zdGFjayAhPSB1bmRlZmluZWQpIHtcblx0XHRcdGxldCBzdGFja3MgPSBsb2dFdmVudC5lcnJvci5zdGFjay5zcGxpdCgvXFxuL2cpO1xuICAgICAgICAgICAgc3RhY2tzLmZvckVhY2goZnVuY3Rpb24gKHN0YWNrKSB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZSArPSBgXFx0JHtzdGFja31cXG5gO1xuICAgICAgICAgICAgfSk7XG5cdFx0fSBlbHNlIGlmIChsb2dFdmVudC5lcnJvci5tZXNzYWdlICE9IG51bGwgJiYgbG9nRXZlbnQuZXJyb3IubWVzc2FnZSAhPSAnJykge1xuXHRcdFx0bWVzc2FnZSArPSBgXFx0JHtsb2dFdmVudC5lcnJvci5uYW1lfTogJHtsb2dFdmVudC5lcnJvci5tZXNzYWdlfVxcbmA7XG5cdFx0fVxuXG5cdH1cblxuXHRyZXR1cm4gbWVzc2FnZTtcblxufTtcblxuLyoqXG4gKiBGb3JtYXRzIHRoZSBmaWxlIChlLmcuIHRlc3QuanMpIHRvIHRoZSBmaWxlXG4gKlxuICogQHByaXZhdGVcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7TE9HX0VWRU5UfSBsb2dFdmVudFxuICovXG5sZXQgX2Zvcm1hdEZpbGUgPSBmdW5jdGlvbiAobG9nRXZlbnQpIHtcblxuICAgIGlmICghbG9nRXZlbnQuZmlsZSkge1xuXHRcdF9nZXRGaWxlRGV0YWlscyhsb2dFdmVudCk7XG5cdH1cblxuXHRyZXR1cm4gbG9nRXZlbnQuZmlsZTtcblxufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqXG4gKiBAcGFyYW0ge0xPR19FVkVOVH0gbG9nRXZlbnRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmxldCBfZm9ybWF0TGluZU51bWJlciA9IGZ1bmN0aW9uIChsb2dFdmVudCkge1xuXG4gICAgaWYgKCFsb2dFdmVudC5saW5lTnVtYmVyKSB7XG5cdFx0X2dldEZpbGVEZXRhaWxzKGxvZ0V2ZW50KTtcblx0fVxuXG5cdHJldHVybiBgJHtsb2dFdmVudC5saW5lTnVtYmVyfWA7XG5cbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtMT0dfRVZFTlR9IGxvZ0V2ZW50XG4gKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBwYXJhbXNcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmxldCBfZm9ybWF0TWFwTWVzc2FnZSA9IGZ1bmN0aW9uIChsb2dFdmVudCwgcGFyYW1zKSB7XG5cdGxldCBtZXNzYWdlID0gbnVsbDtcblx0aWYgKGxvZ0V2ZW50LnByb3BlcnRpZXMpIHtcblxuXHRcdG1lc3NhZ2UgPSBbXTtcblx0XHRmb3IgKGxldCBrZXkgaW4gbG9nRXZlbnQucHJvcGVydGllcykge1xuXHRcdFx0aWYgKHBhcmFtc1swXSkge1xuXHRcdFx0XHRpZiAocGFyYW1zWzBdID09IGtleSkge1xuXHRcdFx0XHRcdG1lc3NhZ2UucHVzaChsb2dFdmVudC5wcm9wZXJ0aWVzW2tleV0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtZXNzYWdlLnB1c2goJ3snICsga2V5ICsgJywnICsgbG9nRXZlbnQucHJvcGVydGllc1trZXldICsgJ30nKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gJ3snICsgbWVzc2FnZS5qb2luKCcsJykgKyAnfSc7XG5cblx0fVxuXHRyZXR1cm4gbWVzc2FnZTtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtMT0dfRVZFTlR9IGxvZ0V2ZW50XG4gKlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5sZXQgX2Zvcm1hdExvZ01lc3NhZ2UgPSBmdW5jdGlvbiAobG9nRXZlbnQpIHtcblx0cmV0dXJuIGxvZ0V2ZW50Lm1lc3NhZ2U7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7TE9HX0VWRU5UfSBsb2dFdmVudFxuICpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xubGV0IF9mb3JtYXRNZXRob2ROYW1lID0gZnVuY3Rpb24gKGxvZ0V2ZW50KSB7XG5cdHJldHVybiB1dGlsaXR5LmdldEZ1bmN0aW9uTmFtZShsb2dFdmVudC5tZXRob2QpO1xufTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKi9cbmxldCBfZm9ybWF0TGluZVNlcGFyYXRvciA9IGZ1bmN0aW9uICgpIHtcblx0cmV0dXJuICdcXG4nO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqXG4gKiBAcGFyYW0ge0xPR19FVkVOVH0gbG9nRXZlbnRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmxldCBfZm9ybWF0TGV2ZWwgPSBmdW5jdGlvbiAobG9nRXZlbnQpIHtcblxuICAgIHN3aXRjaCAobG9nRXZlbnQubGV2ZWwpIHtcblxuICAgICAgICBjYXNlIExvZ0xldmVsLkZBVEFMOlxuICAgICAgICAgICAgcmV0dXJuICdGQVRBTCc7XG4gICAgICAgIGNhc2UgTG9nTGV2ZWwuRVJST1I6XG4gICAgICAgICAgICByZXR1cm4gJ0VSUk9SJztcbiAgICAgICAgY2FzZSBMb2dMZXZlbC5XQVJOOlxuICAgICAgICAgICAgcmV0dXJuICdXQVJOJztcbiAgICAgICAgY2FzZSBMb2dMZXZlbC5JTkZPOlxuICAgICAgICAgICAgcmV0dXJuICdJTkZPJztcbiAgICAgICAgY2FzZSBMb2dMZXZlbC5ERUJVRzpcbiAgICAgICAgICAgIHJldHVybiAnREVCVUcnO1xuICAgICAgICBjYXNlIExvZ0xldmVsLlRSQUNFOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuICdUUkFDRSc7XG5cbiAgICB9XG5cbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtMT0dfRVZFTlR9IGxvZ0V2ZW50XG4gKlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5sZXQgX2Zvcm1hdFJlbGF0aXZlID0gZnVuY3Rpb24gKGxvZ0V2ZW50KSB7XG5cdHJldHVybiAnJyArIGxvZ0V2ZW50LnJlbGF0aXZlO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqXG4gKiBAcGFyYW0ge0xPR19FVkVOVH0gbG9nRXZlbnRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmxldCBfZm9ybWF0U2VxdWVuY2VOdW1iZXIgPSBmdW5jdGlvbiAobG9nRXZlbnQpIHtcblx0cmV0dXJuICcnICsgbG9nRXZlbnQuc2VxdWVuY2U7XG59O1xuXG5sZXQgX2Zvcm1hdHRlcnMgPSB7XG5cdCdjfGxvZ2dlcicgOiBfZm9ybWF0TG9nZ2VyLFxuXHQnZHxkYXRlJyA6IF9mb3JtYXREYXRlLFxuXHQnZXh8ZXhjZXB0aW9ufHRocm93YWJsZScgOiBfZm9ybWF0RXhjZXB0aW9uLFxuXHQnRnxmaWxlJyA6IF9mb3JtYXRGaWxlLFxuXHQnS3xtYXB8TUFQJyA6IF9mb3JtYXRNYXBNZXNzYWdlLFxuXHQnTHxsaW5lJyA6IF9mb3JtYXRMaW5lTnVtYmVyLFxuXHQnbXxtc2d8bWVzc2FnZScgOiBfZm9ybWF0TG9nTWVzc2FnZSxcblx0J018bWV0aG9kJyA6IF9mb3JtYXRNZXRob2ROYW1lLFxuXHQnbicgOiBfZm9ybWF0TGluZVNlcGFyYXRvcixcblx0J3B8bGV2ZWwnIDogX2Zvcm1hdExldmVsLFxuXHQncnxyZWxhdGl2ZScgOiBfZm9ybWF0UmVsYXRpdmUsXG5cdCdzbnxzZXF1ZW5jZU51bWJlcicgOiBfZm9ybWF0U2VxdWVuY2VOdW1iZXJcbn07XG5cbi8qKlxuICogR2V0IHRoZSBjb21waWxlZCBsYXlvdXQgZm9yIHRoZSBzcGVjaWZpZWQgbGF5b3V0IHN0cmluZy4gSWYgdGhlIGNvbXBpbGVkIGxheW91dCBkb2VzIG5vdFxuICogZXhpc3QsIHRoZW4gd2Ugd2FudCB0byBjcmVhdGUgaXQuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxheW91dFxuICpcbiAqIEByZXR1cm4ge0FycmF5LjxzdHJpbmd8ZnVuY3Rpb24+fVxuICovXG5sZXQgX2dldENvbXBpbGVkTGF5b3V0ID0gZnVuY3Rpb24gKGxheW91dCkge1xuXG5cdGlmIChfY29tcGlsZWRMYXlvdXRzW2xheW91dF0pIHtcblx0XHRyZXR1cm4gX2NvbXBpbGVkTGF5b3V0c1tsYXlvdXRdO1xuXHR9XG5cblx0cmV0dXJuIF9jb21waWxlTGF5b3V0KGxheW91dCk7XG5cbn07XG5cbi8qKlxuICogQ29tcGlsZXMgYSBsYXlvdXQgaW50byBhbiBhcnJheS4gVGhlIGFycmF5IGNvbnRhaW5zIGZ1bmN0aW9uc1xuICpcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYXlvdXRcbiAqXG4gKiBAcmV0dXJuIHtBcnJheS48c3RyaW5nfGZ1bmN0aW9uPn1cbiAqL1xubGV0IF9jb21waWxlTGF5b3V0ID0gZnVuY3Rpb24gKGxheW91dCkge1xuXG5cdGxldCBpbmRleCA9IGxheW91dC5pbmRleE9mKCclJyk7XG5cdGxldCBjdXJyZW50Rm9ybWF0U3RyaW5nID0gJyc7XG5cdGxldCBmb3JtYXRBcnJheSA9IFtdO1xuXG5cdGlmIChpbmRleCAhPSAwKSB7XG5cdFx0Zm9ybWF0QXJyYXkucHVzaChsYXlvdXQuc3Vic3RyaW5nKDAsIGluZGV4KSk7XG5cdH1cblxuXHRkbyB7XG5cblx0XHRsZXQgc3RhcnRJbmRleCA9IGluZGV4O1xuXHRcdGxldCBlbmRJbmRleCA9IGluZGV4ID0gbGF5b3V0LmluZGV4T2YoJyUnLCBpbmRleCArIDEpO1xuXG5cdFx0aWYgKGVuZEluZGV4IDwgMCkge1xuXHRcdFx0Y3VycmVudEZvcm1hdFN0cmluZyA9IGxheW91dC5zdWJzdHJpbmcoc3RhcnRJbmRleCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGN1cnJlbnRGb3JtYXRTdHJpbmcgPSBsYXlvdXQuc3Vic3RyaW5nKHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcblx0XHR9XG5cblx0XHRmb3JtYXRBcnJheS5wdXNoKF9nZXRGb3JtYXR0ZXJPYmplY3QoY3VycmVudEZvcm1hdFN0cmluZykpO1xuXG5cdH0gd2hpbGUgKGluZGV4ID4gLTEpO1xuXG4gICAgLy8gc2V0IHRoZSBmb3JtYXQgYXJyYXkgdG8gdGhlIHNwZWNpZmllZCBjb21waWxlZCBsYXlvdXRcblx0X2NvbXBpbGVkTGF5b3V0c1tsYXlvdXRdID0gZm9ybWF0QXJyYXk7XG5cblx0cmV0dXJuIGZvcm1hdEFycmF5O1xuXG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXRTdHJpbmdcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R8c3RyaW5nfVxuICovXG5sZXQgX2dldEZvcm1hdHRlck9iamVjdCA9IGZ1bmN0aW9uIChmb3JtYXRTdHJpbmcpIHtcblxuXHRsZXQgcmVzdWx0ID0gX0NPTU1BTkRfUkVHRVguZXhlYyhmb3JtYXRTdHJpbmcpO1xuXHRpZiAocmVzdWx0ICE9IG51bGwgJiYgcmVzdWx0Lmxlbmd0aCA9PSAyKSB7XG5cblx0XHRsZXQgZm9ybWF0dGVyID0gX2dldEZvcm1hdHRlckZ1bmN0aW9uKHJlc3VsdFsxXSk7XG5cdFx0aWYgKCFmb3JtYXR0ZXIpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdGxldCBwYXJhbXMgPSBfZ2V0TGF5b3V0VGFnUGFyYW1zKGZvcm1hdFN0cmluZyk7XG5cblx0XHRsZXQgYWZ0ZXIgPSAnJztcblx0XHRsZXQgZW5kSW5kZXggPSBmb3JtYXRTdHJpbmcubGFzdEluZGV4T2YoJ30nKTtcblx0XHRpZiAoZW5kSW5kZXggIT0gLTEpIHtcblx0XHRcdGFmdGVyID0gZm9ybWF0U3RyaW5nLnN1YnN0cmluZyhlbmRJbmRleCArIDEpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhZnRlciA9IGZvcm1hdFN0cmluZy5zdWJzdHJpbmcocmVzdWx0LmluZGV4ICsgcmVzdWx0WzFdLmxlbmd0aCArIDEpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHQnZm9ybWF0dGVyJyA6IGZvcm1hdHRlcixcblx0XHRcdCdwYXJhbXMnIDogcGFyYW1zLFxuXHRcdFx0J2FmdGVyJyA6IGFmdGVyXG5cdFx0fTtcblxuXHR9XG5cblx0cmV0dXJuIGZvcm1hdFN0cmluZztcblxufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoYXQgZm9ybWF0dGVyIGZ1bmN0aW9uIGhhcyBiZWVuIGNvbmZpZ3VyZWRcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tbWFuZFxuICpcbiAqIEByZXR1cm4gez9zdHJpbmd9XG4gKi9cbmxldCBfZ2V0Rm9ybWF0dGVyRnVuY3Rpb24gPSBmdW5jdGlvbiAoY29tbWFuZCkge1xuXG5cdGxldCByZWdleDtcblx0Zm9yIChsZXQga2V5IGluIF9mb3JtYXR0ZXJzKSB7XG4gICAgICAgIGlmIChfZm9ybWF0dGVycy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICByZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIGtleSArICcpJCcpO1xuICAgICAgICAgICAgaWYgKHJlZ2V4LmV4ZWMoY29tbWFuZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX2Zvcm1hdHRlcnNba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXHR9XG5cblx0cmV0dXJuIG51bGw7XG5cbn07XG5cbi8qKlxuICogR2V0cyB0aGUgbGF5b3V0IHRhZyBwYXJhbXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBsYXlvdXQgdGFnLiBTbywgZm9yIGV4YW1wbGUsICclZHt5eXl5LU1NLWRkfWBcbiAqIHdvdWxkIG91dHB1dCBhbiBhcnJheSBvZiBbJ3l5eXktTU0tZGQnXVxuICpcbiAqIEBwcml2YXRlXG4gKiBAZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tbWFuZFxuICpcbiAqIEByZXR1cm4ge0FycmF5LjxzdHJpbmc+fVxuICovXG5sZXQgX2dldExheW91dFRhZ1BhcmFtcyA9IGZ1bmN0aW9uIChjb21tYW5kKSB7XG5cblx0bGV0IHBhcmFtcyA9IFtdO1xuXHRsZXQgcmVzdWx0ID0gY29tbWFuZC5tYXRjaCgvXFx7KFtefV0qKSg/PX0pL2cpO1xuXHRpZiAocmVzdWx0ICE9IG51bGwpIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0cGFyYW1zLnB1c2gocmVzdWx0W2ldLnN1YnN0cmluZygxKSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHBhcmFtcztcblxufTtcblxuLyoqXG4gKiBIYW5kbGVzIGZvcm1hdHRpbmcgdGhlIGxvZyBldmVudCB1c2luZyB0aGUgc3BlY2lmaWVkIGZvcm1hdHRlciBhcnJheVxuICpcbiAqIEBwcml2YXRlXG4gKiBAZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge0FycmF5LjxmdW5jdGlvbnxzdHJpbmc+fSBmb3JtYXR0ZXJcbiAqIEBwYXJhbSB7TE9HX0VWRU5UfSBsb2dFdmVudFxuICpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xubGV0IF9mb3JtYXRMb2dFdmVudCA9IGZ1bmN0aW9uIChmb3JtYXR0ZXIsIGxvZ0V2ZW50KSB7XG5cblx0bGV0IHJlc3BvbnNlO1xuXHRsZXQgbWVzc2FnZSA9ICcnO1xuXHRsZXQgY291bnQgPSBmb3JtYXR0ZXIubGVuZ3RoO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcblx0XHRpZiAoZm9ybWF0dGVyW2ldICE9PSBudWxsKSB7XG5cblx0XHRcdGlmIChmb3JtYXR0ZXJbaV0gaW5zdGFuY2VvZiBPYmplY3QpIHtcblxuXHRcdFx0XHRyZXNwb25zZSA9IGZvcm1hdHRlcltpXS5mb3JtYXR0ZXIobG9nRXZlbnQsIGZvcm1hdHRlcltpXS5wYXJhbXMpO1xuXHRcdFx0XHRpZiAocmVzcG9uc2UgIT0gbnVsbCkge1xuXHRcdFx0XHRcdG1lc3NhZ2UgKz0gcmVzcG9uc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0bWVzc2FnZSArPSBmb3JtYXR0ZXJbaV0uYWZ0ZXI7XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1lc3NhZ2UgKz0gZm9ybWF0dGVyW2ldO1xuXHRcdFx0fVxuXG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG1lc3NhZ2UudHJpbSgpO1xuXG59O1xuXG4vKipcbiAqXG4gKiBAcHJpdmF0ZVxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtMT0dfRVZFTlR9IGxvZ0V2ZW50XG4gKi9cbmxldCBfZ2V0RmlsZURldGFpbHMgPSBmdW5jdGlvbiAobG9nRXZlbnQpIHtcblxuXHRpZiAobG9nRXZlbnQubG9nRXJyb3JTdGFjaykge1xuXG5cdFx0bGV0IHBhcnRzID0gbG9nRXZlbnQubG9nRXJyb3JTdGFjay5zdGFjay5zcGxpdCgvXFxuL2cpO1xuXHRcdGxldCBmaWxlID0gcGFydHNbM107XG5cdFx0ZmlsZSA9IGZpbGUucmVwbGFjZSgvYXQgKC4qXFwofCkoZmlsZXxodHRwfGh0dHBzfCkoOnwpKFxcL3wpKi8sICcnKTtcblx0XHRmaWxlID0gZmlsZS5yZXBsYWNlKCcpJywgJycpO1xuXHRcdGZpbGUgPSBmaWxlLnJlcGxhY2UoKHR5cGVvZiBsb2NhdGlvbiAhPT0gJ3VuZGVmaW5lZCcpID8gbG9jYXRpb24uaG9zdCA6ICcnLCAnJykudHJpbSgpO1xuXG5cdFx0bGV0IGZpbGVQYXJ0cyA9IGZpbGUuc3BsaXQoL1xcOi9nKTtcblxuXHRcdGxvZ0V2ZW50LmNvbHVtbiA9IGZpbGVQYXJ0cy5wb3AoKTtcblx0XHRsb2dFdmVudC5saW5lTnVtYmVyID0gZmlsZVBhcnRzLnBvcCgpO1xuXG5cdFx0aWYgKHR5cGVvZiBkZWZpbmUgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRsZXQgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcblx0XHRcdGxldCBhcHBEaXIgPSBwYXRoLmRpcm5hbWUocmVxdWlyZS5tYWluLmZpbGVuYW1lKTtcblx0XHRcdGxvZ0V2ZW50LmZpbGVuYW1lID0gZmlsZVBhcnRzLmpvaW4oJzonKS5yZXBsYWNlKGFwcERpciwgJycpLnJlcGxhY2UoLyhcXFxcfFxcLykvLCAnJyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGxvZ0V2ZW50LmZpbGVuYW1lID0gZmlsZVBhcnRzLmpvaW4oJzonKTtcblx0XHR9XG5cblx0fSBlbHNlIHtcblxuXHRcdGxvZ0V2ZW50LmNvbHVtbiA9ICc/Jztcblx0XHRsb2dFdmVudC5maWxlbmFtZSA9ICdhbm9ueW1vdXMnO1xuXHRcdGxvZ0V2ZW50LmxpbmVOdW1iZXIgPSAnPyc7XG5cblx0fVxuXG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYXlvdXRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVDb21waWxlKGxheW91dCkge1xuXHRfZ2V0Q29tcGlsZWRMYXlvdXQobGF5b3V0KTtcbn1cblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbGF5b3V0XG4gKiBAcGFyYW0ge0xPR19FVkVOVH0gbG9nRXZlbnRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXQobGF5b3V0LCBsb2dFdmVudCkge1xuXHRyZXR1cm4gX2Zvcm1hdExvZ0V2ZW50KF9nZXRDb21waWxlZExheW91dChsYXlvdXQpLCBsb2dFdmVudCk7XG59XG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZvcm1hdHRlci5qcyJdLCJuYW1lcyI6WyJwcmVDb21waWxlIiwiZm9ybWF0IiwidXRpbGl0eSIsIl9DT01NQU5EX1JFR0VYIiwiX2NvbXBpbGVkTGF5b3V0cyIsIl9mb3JtYXRMb2dnZXIiLCJsb2dFdmVudCIsImxvZ2dlciIsIl9mb3JtYXREYXRlIiwicGFyYW1zIiwiZGF0ZSIsIl9mb3JtYXRFeGNlcHRpb24iLCJtZXNzYWdlIiwiZXJyb3IiLCJzdGFjayIsInVuZGVmaW5lZCIsInN0YWNrcyIsInNwbGl0IiwiZm9yRWFjaCIsIm5hbWUiLCJfZm9ybWF0RmlsZSIsImZpbGUiLCJfZ2V0RmlsZURldGFpbHMiLCJfZm9ybWF0TGluZU51bWJlciIsImxpbmVOdW1iZXIiLCJfZm9ybWF0Q29sdW1uIiwiY29sdW1uIiwiX2Zvcm1hdE1hcE1lc3NhZ2UiLCJwcm9wZXJ0aWVzIiwia2V5IiwicHVzaCIsImpvaW4iLCJfZm9ybWF0TG9nTWVzc2FnZSIsIl9mb3JtYXRNZXRob2ROYW1lIiwiZ2V0RnVuY3Rpb25OYW1lIiwibWV0aG9kIiwiX2Zvcm1hdExpbmVTZXBhcmF0b3IiLCJfZm9ybWF0TGV2ZWwiLCJsZXZlbCIsIkZBVEFMIiwiRVJST1IiLCJXQVJOIiwiSU5GTyIsIkRFQlVHIiwiVFJBQ0UiLCJfZm9ybWF0UmVsYXRpdmUiLCJyZWxhdGl2ZSIsIl9mb3JtYXRTZXF1ZW5jZU51bWJlciIsInNlcXVlbmNlIiwiX2Zvcm1hdHRlcnMiLCJfZ2V0Q29tcGlsZWRMYXlvdXQiLCJsYXlvdXQiLCJfY29tcGlsZUxheW91dCIsImluZGV4IiwiaW5kZXhPZiIsImN1cnJlbnRGb3JtYXRTdHJpbmciLCJmb3JtYXRBcnJheSIsInN1YnN0cmluZyIsInN0YXJ0SW5kZXgiLCJlbmRJbmRleCIsIl9nZXRGb3JtYXR0ZXJPYmplY3QiLCJmb3JtYXRTdHJpbmciLCJyZXN1bHQiLCJleGVjIiwibGVuZ3RoIiwiZm9ybWF0dGVyIiwiX2dldEZvcm1hdHRlckZ1bmN0aW9uIiwiX2dldExheW91dFRhZ1BhcmFtcyIsImFmdGVyIiwibGFzdEluZGV4T2YiLCJjb21tYW5kIiwicmVnZXgiLCJoYXNPd25Qcm9wZXJ0eSIsIlJlZ0V4cCIsIm1hdGNoIiwiaSIsIl9mb3JtYXRMb2dFdmVudCIsInJlc3BvbnNlIiwiY291bnQiLCJPYmplY3QiLCJ0cmltIiwibG9nRXJyb3JTdGFjayIsInBhcnRzIiwicmVwbGFjZSIsImxvY2F0aW9uIiwiaG9zdCIsImZpbGVQYXJ0cyIsInBvcCIsImRlZmluZSIsInBhdGgiLCJyZXF1aXJlIiwiYXBwRGlyIiwiZGlybmFtZSIsIm1haW4iLCJmaWxlbmFtZSIsInN0YXJ0c1dpdGgiXSwibWFwcGluZ3MiOiI7Ozs7O1FBdWZnQkEsVSxHQUFBQSxVO2dDQWFBQyxNLEdBQUFBLE07O0FBN2ZoQjs7QUFDQTs7NEJBQVlDLE87O0FBQ1o7Ozs7QUFFQTtBQUNBLE1BQU1DLGlCQUFpQixzQkFBdkI7O0FBRUE7QUFkQTs7Ozs7OztBQWVBLElBQUlDLG1CQUFtQixFQUF2Qjs7QUFFQTs7Ozs7Ozs7QUFRQSxJQUFJQyxnQkFBZ0IsVUFBVUMsUUFBVixFQUFvQjtBQUN2QyxTQUFPQSxTQUFTQyxNQUFoQjtBQUNBLENBRkQ7O0FBSUE7Ozs7Ozs7OztBQVNBLElBQUlDLGNBQWMsVUFBVUYsUUFBVixFQUFvQkcsTUFBcEIsRUFBNEI7QUFDN0MsU0FBTyx3REFBV0gsU0FBU0ksSUFBcEIsRUFBMEJELE9BQU8sQ0FBUCxDQUExQjtBQUFQO0FBQ0EsQ0FGRDs7QUFJQTs7Ozs7Ozs7QUFRQSxJQUFJRSxtQkFBbUIsVUFBVUwsUUFBVixFQUFvQjs7QUFFdkMsTUFBSU0sVUFBVSxFQUFkOztBQUVBLE1BQUlOLFNBQVNPLEtBQVQsSUFBa0IsSUFBdEIsRUFBNEI7O0FBRTlCLFFBQUlQLFNBQVNPLEtBQVQsQ0FBZUMsS0FBZixJQUF3QkMsU0FBNUIsRUFBdUM7QUFDdEMsVUFBSUMsU0FBU1YsU0FBU08sS0FBVCxDQUFlQyxLQUFmLENBQXFCRyxLQUFyQixDQUEyQixLQUEzQixDQUFiO0FBQ1NELGFBQU9FLE9BQVAsQ0FBZSxVQUFVSixLQUFWLEVBQWlCO0FBQzVCRixtQkFBWSxLQUFJRSxLQUFNLElBQXRCO0FBQ0gsT0FGRDtBQUdULEtBTEQsTUFLTyxJQUFJUixTQUFTTyxLQUFULENBQWVELE9BQWYsSUFBMEIsSUFBMUIsSUFBa0NOLFNBQVNPLEtBQVQsQ0FBZUQsT0FBZixJQUEwQixFQUFoRSxFQUFvRTtBQUMxRUEsaUJBQVksS0FBSU4sU0FBU08sS0FBVCxDQUFlTSxJQUFLLEtBQUliLFNBQVNPLEtBQVQsQ0FBZUQsT0FBUSxJQUEvRDtBQUNBO0FBRUQ7O0FBRUQsU0FBT0EsT0FBUDtBQUVBLENBbkJEOztBQXFCQTs7Ozs7Ozs7O0FBU0EsSUFBSVEsY0FBYyxVQUFVZCxRQUFWLEVBQW9COztBQUVsQyxNQUFJLENBQUNBLFNBQVNlLElBQWQsRUFBb0I7QUFDdEJDLG9CQUFnQmhCLFFBQWhCO0FBQ0E7O0FBRUQsU0FBT0EsU0FBU2UsSUFBaEI7QUFFQSxDQVJEOztBQVVBOzs7Ozs7OztBQVFBLElBQUlFLG9CQUFvQixVQUFVakIsUUFBVixFQUFvQjs7QUFFeEMsTUFBSSxDQUFDQSxTQUFTa0IsVUFBZCxFQUEwQjtBQUM1QkYsb0JBQWdCaEIsUUFBaEI7QUFDQTs7QUFFRCxTQUFRLEdBQUVBLFNBQVNrQixVQUFXLEVBQTlCO0FBRUEsQ0FSRDs7QUFVQTs7Ozs7Ozs7QUFRQSxJQUFJQyxnQkFBZ0IsVUFBVW5CLFFBQVYsRUFBb0I7O0FBRXBDLE1BQUksQ0FBQ0EsU0FBU29CLE1BQWQsRUFBc0I7QUFDeEJKLG9CQUFnQmhCLFFBQWhCO0FBQ0E7O0FBRUQsU0FBUSxHQUFFQSxTQUFTb0IsTUFBTyxFQUExQjtBQUVBLENBUkQ7O0FBVUE7Ozs7Ozs7OztBQVNBLElBQUlDLG9CQUFvQixVQUFVckIsUUFBVixFQUFvQkcsTUFBcEIsRUFBNEI7QUFDbkQsTUFBSUcsVUFBVSxJQUFkO0FBQ0EsTUFBSU4sU0FBU3NCLFVBQWIsRUFBeUI7O0FBRXhCaEIsY0FBVSxFQUFWO0FBQ0EsU0FBSyxJQUFJaUIsR0FBVCxJQUFnQnZCLFNBQVNzQixVQUF6QixFQUFxQztBQUNwQyxVQUFJbkIsT0FBTyxDQUFQLENBQUosRUFBZTtBQUNkLFlBQUlBLE9BQU8sQ0FBUCxLQUFhb0IsR0FBakIsRUFBc0I7QUFDckJqQixrQkFBUWtCLElBQVIsQ0FBYXhCLFNBQVNzQixVQUFULENBQW9CQyxHQUFwQixDQUFiO0FBQ0E7QUFDRCxPQUpELE1BSU87QUFDTmpCLGdCQUFRa0IsSUFBUixDQUFhLE1BQU1ELEdBQU4sR0FBWSxHQUFaLEdBQWtCdkIsU0FBU3NCLFVBQVQsQ0FBb0JDLEdBQXBCLENBQWxCLEdBQTZDLEdBQTFEO0FBQ0E7QUFDRDs7QUFFRCxXQUFPLE1BQU1qQixRQUFRbUIsSUFBUixDQUFhLEdBQWIsQ0FBTixHQUEwQixHQUFqQztBQUVBO0FBQ0QsU0FBT25CLE9BQVA7QUFDQSxDQW5CRDs7QUFxQkE7Ozs7Ozs7O0FBUUEsSUFBSW9CLG9CQUFvQixVQUFVMUIsUUFBVixFQUFvQjtBQUMzQyxTQUFPQSxTQUFTTSxPQUFoQjtBQUNBLENBRkQ7O0FBSUE7Ozs7Ozs7O0FBUUEsSUFBSXFCLG9CQUFvQixVQUFVM0IsUUFBVixFQUFvQjtBQUMzQyxTQUFPSixRQUFRZ0MsZUFBUixDQUF3QjVCLFNBQVM2QixNQUFqQyxDQUFQO0FBQ0EsQ0FGRDs7QUFJQTs7Ozs7QUFLQSxJQUFJQyx1QkFBdUIsWUFBWTtBQUN0QyxTQUFPLElBQVA7QUFDQSxDQUZEOztBQUlBOzs7Ozs7OztBQVFBLElBQUlDLGVBQWUsVUFBVS9CLFFBQVYsRUFBb0I7O0FBRW5DLFVBQVFBLFNBQVNnQyxLQUFqQjs7QUFFSSxTQUFLLDJDQUFTQyxLQUFkO0FBQ0ksYUFBTyxPQUFQO0FBQ0osU0FBSywyQ0FBU0MsS0FBZDtBQUNJLGFBQU8sT0FBUDtBQUNKLFNBQUssMkNBQVNDLElBQWQ7QUFDSSxhQUFPLE1BQVA7QUFDSixTQUFLLDJDQUFTQyxJQUFkO0FBQ0ksYUFBTyxNQUFQO0FBQ0osU0FBSywyQ0FBU0MsS0FBZDtBQUNJLGFBQU8sT0FBUDtBQUNKLFNBQUssMkNBQVNDLEtBQWQ7QUFDQTtBQUNJLGFBQU8sT0FBUDs7QUFkUjtBQWtCSCxDQXBCRDs7QUFzQkE7Ozs7Ozs7O0FBUUEsSUFBSUMsa0JBQWtCLFVBQVV2QyxRQUFWLEVBQW9CO0FBQ3pDLFNBQU8sS0FBS0EsU0FBU3dDLFFBQXJCO0FBQ0EsQ0FGRDs7QUFJQTs7Ozs7Ozs7QUFRQSxJQUFJQyx3QkFBd0IsVUFBVXpDLFFBQVYsRUFBb0I7QUFDL0MsU0FBTyxLQUFLQSxTQUFTMEMsUUFBckI7QUFDQSxDQUZEOztBQUlBLElBQUlDLGNBQWM7QUFDakIsY0FBYTVDLGFBREk7QUFFakIsWUFBV0csV0FGTTtBQUdqQiw0QkFBMkJHLGdCQUhWO0FBSWpCLFlBQVdTLFdBSk07QUFLakIsZUFBY08saUJBTEc7QUFNakIsWUFBV0osaUJBTk07QUFPakIsWUFBV0UsYUFQTTtBQVFqQixtQkFBa0JPLGlCQVJEO0FBU2pCLGNBQWFDLGlCQVRJO0FBVWpCLE9BQU1HLG9CQVZXO0FBV2pCLGFBQVlDLFlBWEs7QUFZakIsZ0JBQWVRLGVBWkU7QUFhakIsdUJBQXNCRTtBQWJMLENBQWxCOztBQWdCQTs7Ozs7Ozs7Ozs7QUFXQSxJQUFJRyxxQkFBcUIsVUFBVUMsTUFBVixFQUFrQjs7QUFFMUMsTUFBSS9DLGlCQUFpQitDLE1BQWpCLENBQUosRUFBOEI7QUFDN0IsV0FBTy9DLGlCQUFpQitDLE1BQWpCLENBQVA7QUFDQTs7QUFFRCxTQUFPQyxlQUFlRCxNQUFmLENBQVA7QUFFQSxDQVJEOztBQVVBOzs7Ozs7Ozs7O0FBVUEsSUFBSUMsaUJBQWlCLFVBQVVELE1BQVYsRUFBa0I7O0FBRXRDLE1BQUlFLFFBQVFGLE9BQU9HLE9BQVAsQ0FBZSxHQUFmLENBQVo7QUFDQSxNQUFJQyxzQkFBc0IsRUFBMUI7QUFDQSxNQUFJQyxjQUFjLEVBQWxCOztBQUVBLE1BQUlILFNBQVMsQ0FBYixFQUFnQjtBQUNmRyxnQkFBWTFCLElBQVosQ0FBaUJxQixPQUFPTSxTQUFQLENBQWlCLENBQWpCLEVBQW9CSixLQUFwQixDQUFqQjtBQUNBOztBQUVELEtBQUc7O0FBRUYsUUFBSUssYUFBYUwsS0FBakI7QUFDQSxRQUFJTSxXQUFXTixRQUFRRixPQUFPRyxPQUFQLENBQWUsR0FBZixFQUFvQkQsUUFBUSxDQUE1QixDQUF2Qjs7QUFFQSxRQUFJTSxXQUFXLENBQWYsRUFBa0I7QUFDakJKLDRCQUFzQkosT0FBT00sU0FBUCxDQUFpQkMsVUFBakIsQ0FBdEI7QUFDQSxLQUZELE1BRU87QUFDTkgsNEJBQXNCSixPQUFPTSxTQUFQLENBQWlCQyxVQUFqQixFQUE2QkMsUUFBN0IsQ0FBdEI7QUFDQTs7QUFFREgsZ0JBQVkxQixJQUFaLENBQWlCOEIsb0JBQW9CTCxtQkFBcEIsQ0FBakI7QUFFQSxHQWJELFFBYVNGLFFBQVEsQ0FBQyxDQWJsQjs7QUFlRztBQUNIakQsbUJBQWlCK0MsTUFBakIsSUFBMkJLLFdBQTNCOztBQUVBLFNBQU9BLFdBQVA7QUFFQSxDQTlCRDs7QUFnQ0E7Ozs7Ozs7O0FBUUEsSUFBSUksc0JBQXNCLFVBQVVDLFlBQVYsRUFBd0I7O0FBRWpELE1BQUlDLFNBQVMzRCxlQUFlNEQsSUFBZixDQUFvQkYsWUFBcEIsQ0FBYjtBQUNBLE1BQUlDLFVBQVUsSUFBVixJQUFrQkEsT0FBT0UsTUFBUCxJQUFpQixDQUF2QyxFQUEwQzs7QUFFekMsUUFBSUMsWUFBWUMsc0JBQXNCSixPQUFPLENBQVAsQ0FBdEIsQ0FBaEI7QUFDQSxRQUFJLENBQUNHLFNBQUwsRUFBZ0I7QUFDZixhQUFPLElBQVA7QUFDQTs7QUFFRCxRQUFJeEQsU0FBUzBELG9CQUFvQk4sWUFBcEIsQ0FBYjs7QUFFQSxRQUFJTyxRQUFRLEVBQVo7QUFDQSxRQUFJVCxXQUFXRSxhQUFhUSxXQUFiLENBQXlCLEdBQXpCLENBQWY7QUFDQSxRQUFJVixZQUFZLENBQUMsQ0FBakIsRUFBb0I7QUFDbkJTLGNBQVFQLGFBQWFKLFNBQWIsQ0FBdUJFLFdBQVcsQ0FBbEMsQ0FBUjtBQUNBLEtBRkQsTUFFTztBQUNOUyxjQUFRUCxhQUFhSixTQUFiLENBQXVCSyxPQUFPVCxLQUFQLEdBQWVTLE9BQU8sQ0FBUCxFQUFVRSxNQUF6QixHQUFrQyxDQUF6RCxDQUFSO0FBQ0E7O0FBRUQsV0FBTztBQUNOLG1CQUFjQyxTQURSO0FBRU4sZ0JBQVd4RCxNQUZMO0FBR04sZUFBVTJEO0FBSEosS0FBUDtBQU1BOztBQUVELFNBQU9QLFlBQVA7QUFFQSxDQTlCRDs7QUFnQ0E7Ozs7Ozs7Ozs7QUFVQSxJQUFJSyx3QkFBd0IsVUFBVUksT0FBVixFQUFtQjs7QUFFOUMsTUFBSUMsS0FBSjtBQUNBLE9BQUssSUFBSTFDLEdBQVQsSUFBZ0JvQixXQUFoQixFQUE2QjtBQUN0QixRQUFJQSxZQUFZdUIsY0FBWixDQUEyQjNDLEdBQTNCLENBQUosRUFBcUM7QUFDakMwQyxjQUFRLElBQUlFLE1BQUosQ0FBVyxPQUFPNUMsR0FBUCxHQUFhLElBQXhCLENBQVI7QUFDQSxVQUFJMEMsTUFBTVIsSUFBTixDQUFXTyxPQUFYLENBQUosRUFBeUI7QUFDckIsZUFBT3JCLFlBQVlwQixHQUFaLENBQVA7QUFDSDtBQUNKO0FBQ1A7O0FBRUQsU0FBTyxJQUFQO0FBRUEsQ0FkRDs7QUFnQkE7Ozs7Ozs7Ozs7O0FBV0EsSUFBSXNDLHNCQUFzQixVQUFVRyxPQUFWLEVBQW1COztBQUU1QyxNQUFJN0QsU0FBUyxFQUFiO0FBQ0EsTUFBSXFELFNBQVNRLFFBQVFJLEtBQVIsQ0FBYyxpQkFBZCxDQUFiO0FBQ0EsTUFBSVosVUFBVSxJQUFkLEVBQW9CO0FBQ25CLFNBQUssSUFBSWEsSUFBSSxDQUFiLEVBQWdCQSxJQUFJYixPQUFPRSxNQUEzQixFQUFtQ1csR0FBbkMsRUFBd0M7QUFDdkNsRSxhQUFPcUIsSUFBUCxDQUFZZ0MsT0FBT2EsQ0FBUCxFQUFVbEIsU0FBVixDQUFvQixDQUFwQixDQUFaO0FBQ0E7QUFDRDs7QUFFRCxTQUFPaEQsTUFBUDtBQUVBLENBWkQ7O0FBY0E7Ozs7Ozs7Ozs7O0FBV0EsSUFBSW1FLGtCQUFrQixVQUFVWCxTQUFWLEVBQXFCM0QsUUFBckIsRUFBK0I7O0FBRXBELE1BQUl1RSxRQUFKO0FBQ0EsTUFBSWpFLFVBQVUsRUFBZDtBQUNBLE1BQUlrRSxRQUFRYixVQUFVRCxNQUF0QjtBQUNBLE9BQUssSUFBSVcsSUFBSSxDQUFiLEVBQWdCQSxJQUFJRyxLQUFwQixFQUEyQkgsR0FBM0IsRUFBZ0M7QUFDL0IsUUFBSVYsVUFBVVUsQ0FBVixNQUFpQixJQUFyQixFQUEyQjs7QUFFMUIsVUFBSVYsVUFBVVUsQ0FBVixhQUF3QkksTUFBNUIsRUFBb0M7O0FBRW5DRixtQkFBV1osVUFBVVUsQ0FBVixFQUFhVixTQUFiLENBQXVCM0QsUUFBdkIsRUFBaUMyRCxVQUFVVSxDQUFWLEVBQWFsRSxNQUE5QyxDQUFYO0FBQ0EsWUFBSW9FLFlBQVksSUFBaEIsRUFBc0I7QUFDckJqRSxxQkFBV2lFLFFBQVg7QUFDQTtBQUNEakUsbUJBQVdxRCxVQUFVVSxDQUFWLEVBQWFQLEtBQXhCO0FBRUEsT0FSRCxNQVFPO0FBQ054RCxtQkFBV3FELFVBQVVVLENBQVYsQ0FBWDtBQUNBO0FBRUQ7QUFDRDs7QUFFRCxTQUFPL0QsUUFBUW9FLElBQVIsRUFBUDtBQUVBLENBekJEOztBQTJCQTs7Ozs7Ozs7QUFRQSxJQUFJMUQsa0JBQWtCLFVBQVVoQixRQUFWLEVBQW9COztBQUV6QyxNQUFJQSxTQUFTMkUsYUFBYixFQUE0Qjs7QUFFM0IsUUFBSUMsUUFBUTVFLFNBQVMyRSxhQUFULENBQXVCbkUsS0FBdkIsQ0FBNkJHLEtBQTdCLENBQW1DLEtBQW5DLENBQVo7QUFDQSxRQUFJSSxPQUFPNkQsTUFBTSxDQUFOLENBQVg7QUFDQTdELFdBQU9BLEtBQUs4RCxPQUFMLENBQWEsd0NBQWIsRUFBdUQsRUFBdkQsQ0FBUDtBQUNBOUQsV0FBT0EsS0FBSzhELE9BQUwsQ0FBYSxHQUFiLEVBQWtCLEVBQWxCLENBQVA7QUFDQTlELFdBQU9BLEtBQUs4RCxPQUFMLENBQWMsT0FBT0MsUUFBUCxLQUFvQixXQUFyQixHQUFvQ0EsU0FBU0MsSUFBN0MsR0FBb0QsRUFBakUsRUFBcUUsRUFBckUsRUFBeUVMLElBQXpFLEVBQVA7O0FBRUEsUUFBSU0sWUFBWWpFLEtBQUtKLEtBQUwsQ0FBVyxLQUFYLENBQWhCOztBQUVBWCxhQUFTb0IsTUFBVCxHQUFrQjRELFVBQVVDLEdBQVYsRUFBbEI7QUFDQWpGLGFBQVNrQixVQUFULEdBQXNCOEQsVUFBVUMsR0FBVixFQUF0Qjs7QUFFQSxRQUFJLE9BQU9DLE1BQVAsS0FBa0IsV0FBdEIsRUFBbUM7QUFDbEMsVUFBSUMsT0FBT0MsUUFBUSxNQUFSLENBQVg7QUFDQSxVQUFJQyxTQUFTRixLQUFLRyxPQUFMLENBQWFGLFFBQVFHLElBQVIsQ0FBYUMsUUFBMUIsQ0FBYjtBQUNBLFVBQUksQ0FBQ1IsVUFBVSxDQUFWLEVBQWFTLFVBQWIsQ0FBd0JKLE1BQXhCLENBQUwsRUFBc0M7QUFDckNBLGlCQUFTLEVBQVQ7QUFDQTtBQUNEckYsZUFBU3dGLFFBQVQsR0FBb0JSLFVBQVV2RCxJQUFWLENBQWUsR0FBZixFQUFvQm9ELE9BQXBCLENBQTRCUSxNQUE1QixFQUFvQyxFQUFwQyxFQUF3Q1IsT0FBeEMsQ0FBZ0QsVUFBaEQsRUFBNEQsRUFBNUQsQ0FBcEI7QUFDQSxLQVBELE1BT087QUFDTjdFLGVBQVN3RixRQUFULEdBQW9CUixVQUFVdkQsSUFBVixDQUFlLEdBQWYsQ0FBcEI7QUFDQTtBQUVELEdBeEJELE1Bd0JPOztBQUVOekIsYUFBU29CLE1BQVQsR0FBa0IsR0FBbEI7QUFDQXBCLGFBQVN3RixRQUFULEdBQW9CLFdBQXBCO0FBQ0F4RixhQUFTa0IsVUFBVCxHQUFzQixHQUF0QjtBQUVBO0FBQ0RsQixXQUFTZSxJQUFULEdBQWdCZixTQUFTd0YsUUFBekI7QUFDQSxDQWxDRDs7QUFvQ0E7Ozs7Ozs7O0FBUU8sU0FBUzlGLFVBQVQsQ0FBb0JtRCxNQUFwQixFQUE0QjtBQUNsQ0QscUJBQW1CQyxNQUFuQjtBQUNBOztBQUVEOzs7Ozs7Ozs7QUFTTyxTQUFTbEQsTUFBVCxDQUFnQmtELE1BQWhCLEVBQXdCN0MsUUFBeEIsRUFBa0M7QUFDeEMsU0FBT3NFLGdCQUFnQjFCLG1CQUFtQkMsTUFBbkIsQ0FBaEIsRUFBNEM3QyxRQUE1QyxDQUFQO0FBQ0EiLCJmaWxlIjoiZm9ybWF0dGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBsb2c0anMgPGh0dHBzOi8vZ2l0aHViLmNvbS9hbmlnZW5lcm8vbG9nNGpzPlxuICpcbiAqIENvcHlyaWdodCAyMDE2LXByZXNlbnQgUm9iaW4gU2NodWx0eiA8aHR0cDovL2FuaWdlbmVyby5jb20+XG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge2RhdGVGb3JtYXR9IGZyb20gJy4vZGF0ZUZvcm1hdHRlcic7XG5pbXBvcnQgKiBhcyB1dGlsaXR5IGZyb20gJy4vdXRpbGl0eSc7XG5pbXBvcnQge0xvZ0xldmVsfSBmcm9tICcuL2NvbnN0L2xvZ0xldmVsJztcblxuLyoqIEBjb25zdCAqL1xuY29uc3QgX0NPTU1BTkRfUkVHRVggPSAvJShbYS16LEEtWl0rKSg/PVxce3wpLztcblxuLyoqIEB0eXBlIHtPYmplY3R9ICovXG5sZXQgX2NvbXBpbGVkTGF5b3V0cyA9IHt9O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7TE9HX0VWRU5UfSBsb2dFdmVudFxuICpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xubGV0IF9mb3JtYXRMb2dnZXIgPSBmdW5jdGlvbiAobG9nRXZlbnQpIHtcblx0cmV0dXJuIGxvZ0V2ZW50LmxvZ2dlcjtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtMT0dfRVZFTlR9IGxvZ0V2ZW50XG4gKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBwYXJhbXNcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmxldCBfZm9ybWF0RGF0ZSA9IGZ1bmN0aW9uIChsb2dFdmVudCwgcGFyYW1zKSB7XG5cdHJldHVybiBkYXRlRm9ybWF0KGxvZ0V2ZW50LmRhdGUsIHBhcmFtc1swXSk7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7TE9HX0VWRU5UfSBsb2dFdmVudFxuICpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xubGV0IF9mb3JtYXRFeGNlcHRpb24gPSBmdW5jdGlvbiAobG9nRXZlbnQpIHtcblxuICAgIGxldCBtZXNzYWdlID0gJyc7XG5cbiAgICBpZiAobG9nRXZlbnQuZXJyb3IgIT0gbnVsbCkge1xuXG5cdFx0aWYgKGxvZ0V2ZW50LmVycm9yLnN0YWNrICE9IHVuZGVmaW5lZCkge1xuXHRcdFx0bGV0IHN0YWNrcyA9IGxvZ0V2ZW50LmVycm9yLnN0YWNrLnNwbGl0KC9cXG4vZyk7XG4gICAgICAgICAgICBzdGFja3MuZm9yRWFjaChmdW5jdGlvbiAoc3RhY2spIHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlICs9IGBcXHQke3N0YWNrfVxcbmA7XG4gICAgICAgICAgICB9KTtcblx0XHR9IGVsc2UgaWYgKGxvZ0V2ZW50LmVycm9yLm1lc3NhZ2UgIT0gbnVsbCAmJiBsb2dFdmVudC5lcnJvci5tZXNzYWdlICE9ICcnKSB7XG5cdFx0XHRtZXNzYWdlICs9IGBcXHQke2xvZ0V2ZW50LmVycm9yLm5hbWV9OiAke2xvZ0V2ZW50LmVycm9yLm1lc3NhZ2V9XFxuYDtcblx0XHR9XG5cblx0fVxuXG5cdHJldHVybiBtZXNzYWdlO1xuXG59O1xuXG4vKipcbiAqIEZvcm1hdHMgdGhlIGZpbGUgKGUuZy4gdGVzdC5qcykgdG8gdGhlIGZpbGVcbiAqXG4gKiBAcHJpdmF0ZVxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtMT0dfRVZFTlR9IGxvZ0V2ZW50XG4gKi9cbmxldCBfZm9ybWF0RmlsZSA9IGZ1bmN0aW9uIChsb2dFdmVudCkge1xuXG4gICAgaWYgKCFsb2dFdmVudC5maWxlKSB7XG5cdFx0X2dldEZpbGVEZXRhaWxzKGxvZ0V2ZW50KTtcblx0fVxuXG5cdHJldHVybiBsb2dFdmVudC5maWxlO1xuXG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7TE9HX0VWRU5UfSBsb2dFdmVudFxuICpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xubGV0IF9mb3JtYXRMaW5lTnVtYmVyID0gZnVuY3Rpb24gKGxvZ0V2ZW50KSB7XG5cbiAgICBpZiAoIWxvZ0V2ZW50LmxpbmVOdW1iZXIpIHtcblx0XHRfZ2V0RmlsZURldGFpbHMobG9nRXZlbnQpO1xuXHR9XG5cblx0cmV0dXJuIGAke2xvZ0V2ZW50LmxpbmVOdW1iZXJ9YDtcblxufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqXG4gKiBAcGFyYW0ge0xPR19FVkVOVH0gbG9nRXZlbnRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmxldCBfZm9ybWF0Q29sdW1uID0gZnVuY3Rpb24gKGxvZ0V2ZW50KSB7XG5cbiAgICBpZiAoIWxvZ0V2ZW50LmNvbHVtbikge1xuXHRcdF9nZXRGaWxlRGV0YWlscyhsb2dFdmVudCk7XG5cdH1cblxuXHRyZXR1cm4gYCR7bG9nRXZlbnQuY29sdW1ufWA7XG5cbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtMT0dfRVZFTlR9IGxvZ0V2ZW50XG4gKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBwYXJhbXNcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmxldCBfZm9ybWF0TWFwTWVzc2FnZSA9IGZ1bmN0aW9uIChsb2dFdmVudCwgcGFyYW1zKSB7XG5cdGxldCBtZXNzYWdlID0gbnVsbDtcblx0aWYgKGxvZ0V2ZW50LnByb3BlcnRpZXMpIHtcblxuXHRcdG1lc3NhZ2UgPSBbXTtcblx0XHRmb3IgKGxldCBrZXkgaW4gbG9nRXZlbnQucHJvcGVydGllcykge1xuXHRcdFx0aWYgKHBhcmFtc1swXSkge1xuXHRcdFx0XHRpZiAocGFyYW1zWzBdID09IGtleSkge1xuXHRcdFx0XHRcdG1lc3NhZ2UucHVzaChsb2dFdmVudC5wcm9wZXJ0aWVzW2tleV0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtZXNzYWdlLnB1c2goJ3snICsga2V5ICsgJywnICsgbG9nRXZlbnQucHJvcGVydGllc1trZXldICsgJ30nKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gJ3snICsgbWVzc2FnZS5qb2luKCcsJykgKyAnfSc7XG5cblx0fVxuXHRyZXR1cm4gbWVzc2FnZTtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtMT0dfRVZFTlR9IGxvZ0V2ZW50XG4gKlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5sZXQgX2Zvcm1hdExvZ01lc3NhZ2UgPSBmdW5jdGlvbiAobG9nRXZlbnQpIHtcblx0cmV0dXJuIGxvZ0V2ZW50Lm1lc3NhZ2U7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7TE9HX0VWRU5UfSBsb2dFdmVudFxuICpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xubGV0IF9mb3JtYXRNZXRob2ROYW1lID0gZnVuY3Rpb24gKGxvZ0V2ZW50KSB7XG5cdHJldHVybiB1dGlsaXR5LmdldEZ1bmN0aW9uTmFtZShsb2dFdmVudC5tZXRob2QpO1xufTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKi9cbmxldCBfZm9ybWF0TGluZVNlcGFyYXRvciA9IGZ1bmN0aW9uICgpIHtcblx0cmV0dXJuICdcXG4nO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqXG4gKiBAcGFyYW0ge0xPR19FVkVOVH0gbG9nRXZlbnRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmxldCBfZm9ybWF0TGV2ZWwgPSBmdW5jdGlvbiAobG9nRXZlbnQpIHtcblxuICAgIHN3aXRjaCAobG9nRXZlbnQubGV2ZWwpIHtcblxuICAgICAgICBjYXNlIExvZ0xldmVsLkZBVEFMOlxuICAgICAgICAgICAgcmV0dXJuICdGQVRBTCc7XG4gICAgICAgIGNhc2UgTG9nTGV2ZWwuRVJST1I6XG4gICAgICAgICAgICByZXR1cm4gJ0VSUk9SJztcbiAgICAgICAgY2FzZSBMb2dMZXZlbC5XQVJOOlxuICAgICAgICAgICAgcmV0dXJuICdXQVJOJztcbiAgICAgICAgY2FzZSBMb2dMZXZlbC5JTkZPOlxuICAgICAgICAgICAgcmV0dXJuICdJTkZPJztcbiAgICAgICAgY2FzZSBMb2dMZXZlbC5ERUJVRzpcbiAgICAgICAgICAgIHJldHVybiAnREVCVUcnO1xuICAgICAgICBjYXNlIExvZ0xldmVsLlRSQUNFOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuICdUUkFDRSc7XG5cbiAgICB9XG5cbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtMT0dfRVZFTlR9IGxvZ0V2ZW50XG4gKlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5sZXQgX2Zvcm1hdFJlbGF0aXZlID0gZnVuY3Rpb24gKGxvZ0V2ZW50KSB7XG5cdHJldHVybiAnJyArIGxvZ0V2ZW50LnJlbGF0aXZlO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqXG4gKiBAcGFyYW0ge0xPR19FVkVOVH0gbG9nRXZlbnRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmxldCBfZm9ybWF0U2VxdWVuY2VOdW1iZXIgPSBmdW5jdGlvbiAobG9nRXZlbnQpIHtcblx0cmV0dXJuICcnICsgbG9nRXZlbnQuc2VxdWVuY2U7XG59O1xuXG5sZXQgX2Zvcm1hdHRlcnMgPSB7XG5cdCdjfGxvZ2dlcicgOiBfZm9ybWF0TG9nZ2VyLFxuXHQnZHxkYXRlJyA6IF9mb3JtYXREYXRlLFxuXHQnZXh8ZXhjZXB0aW9ufHRocm93YWJsZScgOiBfZm9ybWF0RXhjZXB0aW9uLFxuXHQnRnxmaWxlJyA6IF9mb3JtYXRGaWxlLFxuXHQnS3xtYXB8TUFQJyA6IF9mb3JtYXRNYXBNZXNzYWdlLFxuXHQnTHxsaW5lJyA6IF9mb3JtYXRMaW5lTnVtYmVyLFxuXHQnY29sdW1uJyA6IF9mb3JtYXRDb2x1bW4sXG5cdCdtfG1zZ3xtZXNzYWdlJyA6IF9mb3JtYXRMb2dNZXNzYWdlLFxuXHQnTXxtZXRob2QnIDogX2Zvcm1hdE1ldGhvZE5hbWUsXG5cdCduJyA6IF9mb3JtYXRMaW5lU2VwYXJhdG9yLFxuXHQncHxsZXZlbCcgOiBfZm9ybWF0TGV2ZWwsXG5cdCdyfHJlbGF0aXZlJyA6IF9mb3JtYXRSZWxhdGl2ZSxcblx0J3NufHNlcXVlbmNlTnVtYmVyJyA6IF9mb3JtYXRTZXF1ZW5jZU51bWJlclxufTtcblxuLyoqXG4gKiBHZXQgdGhlIGNvbXBpbGVkIGxheW91dCBmb3IgdGhlIHNwZWNpZmllZCBsYXlvdXQgc3RyaW5nLiBJZiB0aGUgY29tcGlsZWQgbGF5b3V0IGRvZXMgbm90XG4gKiBleGlzdCwgdGhlbiB3ZSB3YW50IHRvIGNyZWF0ZSBpdC5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbGF5b3V0XG4gKlxuICogQHJldHVybiB7QXJyYXkuPHN0cmluZ3xmdW5jdGlvbj59XG4gKi9cbmxldCBfZ2V0Q29tcGlsZWRMYXlvdXQgPSBmdW5jdGlvbiAobGF5b3V0KSB7XG5cblx0aWYgKF9jb21waWxlZExheW91dHNbbGF5b3V0XSkge1xuXHRcdHJldHVybiBfY29tcGlsZWRMYXlvdXRzW2xheW91dF07XG5cdH1cblxuXHRyZXR1cm4gX2NvbXBpbGVMYXlvdXQobGF5b3V0KTtcblxufTtcblxuLyoqXG4gKiBDb21waWxlcyBhIGxheW91dCBpbnRvIGFuIGFycmF5LiBUaGUgYXJyYXkgY29udGFpbnMgZnVuY3Rpb25zXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxheW91dFxuICpcbiAqIEByZXR1cm4ge0FycmF5LjxzdHJpbmd8ZnVuY3Rpb24+fVxuICovXG5sZXQgX2NvbXBpbGVMYXlvdXQgPSBmdW5jdGlvbiAobGF5b3V0KSB7XG5cblx0bGV0IGluZGV4ID0gbGF5b3V0LmluZGV4T2YoJyUnKTtcblx0bGV0IGN1cnJlbnRGb3JtYXRTdHJpbmcgPSAnJztcblx0bGV0IGZvcm1hdEFycmF5ID0gW107XG5cblx0aWYgKGluZGV4ICE9IDApIHtcblx0XHRmb3JtYXRBcnJheS5wdXNoKGxheW91dC5zdWJzdHJpbmcoMCwgaW5kZXgpKTtcblx0fVxuXG5cdGRvIHtcblxuXHRcdGxldCBzdGFydEluZGV4ID0gaW5kZXg7XG5cdFx0bGV0IGVuZEluZGV4ID0gaW5kZXggPSBsYXlvdXQuaW5kZXhPZignJScsIGluZGV4ICsgMSk7XG5cblx0XHRpZiAoZW5kSW5kZXggPCAwKSB7XG5cdFx0XHRjdXJyZW50Rm9ybWF0U3RyaW5nID0gbGF5b3V0LnN1YnN0cmluZyhzdGFydEluZGV4KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y3VycmVudEZvcm1hdFN0cmluZyA9IGxheW91dC5zdWJzdHJpbmcoc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuXHRcdH1cblxuXHRcdGZvcm1hdEFycmF5LnB1c2goX2dldEZvcm1hdHRlck9iamVjdChjdXJyZW50Rm9ybWF0U3RyaW5nKSk7XG5cblx0fSB3aGlsZSAoaW5kZXggPiAtMSk7XG5cbiAgICAvLyBzZXQgdGhlIGZvcm1hdCBhcnJheSB0byB0aGUgc3BlY2lmaWVkIGNvbXBpbGVkIGxheW91dFxuXHRfY29tcGlsZWRMYXlvdXRzW2xheW91dF0gPSBmb3JtYXRBcnJheTtcblxuXHRyZXR1cm4gZm9ybWF0QXJyYXk7XG5cbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1hdFN0cmluZ1xuICpcbiAqIEByZXR1cm4ge09iamVjdHxzdHJpbmd9XG4gKi9cbmxldCBfZ2V0Rm9ybWF0dGVyT2JqZWN0ID0gZnVuY3Rpb24gKGZvcm1hdFN0cmluZykge1xuXG5cdGxldCByZXN1bHQgPSBfQ09NTUFORF9SRUdFWC5leGVjKGZvcm1hdFN0cmluZyk7XG5cdGlmIChyZXN1bHQgIT0gbnVsbCAmJiByZXN1bHQubGVuZ3RoID09IDIpIHtcblxuXHRcdGxldCBmb3JtYXR0ZXIgPSBfZ2V0Rm9ybWF0dGVyRnVuY3Rpb24ocmVzdWx0WzFdKTtcblx0XHRpZiAoIWZvcm1hdHRlcikge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0bGV0IHBhcmFtcyA9IF9nZXRMYXlvdXRUYWdQYXJhbXMoZm9ybWF0U3RyaW5nKTtcblxuXHRcdGxldCBhZnRlciA9ICcnO1xuXHRcdGxldCBlbmRJbmRleCA9IGZvcm1hdFN0cmluZy5sYXN0SW5kZXhPZignfScpO1xuXHRcdGlmIChlbmRJbmRleCAhPSAtMSkge1xuXHRcdFx0YWZ0ZXIgPSBmb3JtYXRTdHJpbmcuc3Vic3RyaW5nKGVuZEluZGV4ICsgMSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFmdGVyID0gZm9ybWF0U3RyaW5nLnN1YnN0cmluZyhyZXN1bHQuaW5kZXggKyByZXN1bHRbMV0ubGVuZ3RoICsgMSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdCdmb3JtYXR0ZXInIDogZm9ybWF0dGVyLFxuXHRcdFx0J3BhcmFtcycgOiBwYXJhbXMsXG5cdFx0XHQnYWZ0ZXInIDogYWZ0ZXJcblx0XHR9O1xuXG5cdH1cblxuXHRyZXR1cm4gZm9ybWF0U3RyaW5nO1xuXG59O1xuXG4vKipcbiAqIERldGVybWluZXMgd2hhdCBmb3JtYXR0ZXIgZnVuY3Rpb24gaGFzIGJlZW4gY29uZmlndXJlZFxuICpcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21tYW5kXG4gKlxuICogQHJldHVybiB7P3N0cmluZ31cbiAqL1xubGV0IF9nZXRGb3JtYXR0ZXJGdW5jdGlvbiA9IGZ1bmN0aW9uIChjb21tYW5kKSB7XG5cblx0bGV0IHJlZ2V4O1xuXHRmb3IgKGxldCBrZXkgaW4gX2Zvcm1hdHRlcnMpIHtcbiAgICAgICAgaWYgKF9mb3JtYXR0ZXJzLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgIHJlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsga2V5ICsgJykkJyk7XG4gICAgICAgICAgICBpZiAocmVnZXguZXhlYyhjb21tYW5kKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfZm9ybWF0dGVyc1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cdH1cblxuXHRyZXR1cm4gbnVsbDtcblxufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBsYXlvdXQgdGFnIHBhcmFtcyBhc3NvY2lhdGVkIHdpdGggdGhlIGxheW91dCB0YWcuIFNvLCBmb3IgZXhhbXBsZSwgJyVke3l5eXktTU0tZGR9YFxuICogd291bGQgb3V0cHV0IGFuIGFycmF5IG9mIFsneXl5eS1NTS1kZCddXG4gKlxuICogQHByaXZhdGVcbiAqIEBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21tYW5kXG4gKlxuICogQHJldHVybiB7QXJyYXkuPHN0cmluZz59XG4gKi9cbmxldCBfZ2V0TGF5b3V0VGFnUGFyYW1zID0gZnVuY3Rpb24gKGNvbW1hbmQpIHtcblxuXHRsZXQgcGFyYW1zID0gW107XG5cdGxldCByZXN1bHQgPSBjb21tYW5kLm1hdGNoKC9cXHsoW159XSopKD89fSkvZyk7XG5cdGlmIChyZXN1bHQgIT0gbnVsbCkge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRwYXJhbXMucHVzaChyZXN1bHRbaV0uc3Vic3RyaW5nKDEpKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcGFyYW1zO1xuXG59O1xuXG4vKipcbiAqIEhhbmRsZXMgZm9ybWF0dGluZyB0aGUgbG9nIGV2ZW50IHVzaW5nIHRoZSBzcGVjaWZpZWQgZm9ybWF0dGVyIGFycmF5XG4gKlxuICogQHByaXZhdGVcbiAqIEBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7QXJyYXkuPGZ1bmN0aW9ufHN0cmluZz59IGZvcm1hdHRlclxuICogQHBhcmFtIHtMT0dfRVZFTlR9IGxvZ0V2ZW50XG4gKlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5sZXQgX2Zvcm1hdExvZ0V2ZW50ID0gZnVuY3Rpb24gKGZvcm1hdHRlciwgbG9nRXZlbnQpIHtcblxuXHRsZXQgcmVzcG9uc2U7XG5cdGxldCBtZXNzYWdlID0gJyc7XG5cdGxldCBjb3VudCA9IGZvcm1hdHRlci5sZW5ndGg7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuXHRcdGlmIChmb3JtYXR0ZXJbaV0gIT09IG51bGwpIHtcblxuXHRcdFx0aWYgKGZvcm1hdHRlcltpXSBpbnN0YW5jZW9mIE9iamVjdCkge1xuXG5cdFx0XHRcdHJlc3BvbnNlID0gZm9ybWF0dGVyW2ldLmZvcm1hdHRlcihsb2dFdmVudCwgZm9ybWF0dGVyW2ldLnBhcmFtcyk7XG5cdFx0XHRcdGlmIChyZXNwb25zZSAhPSBudWxsKSB7XG5cdFx0XHRcdFx0bWVzc2FnZSArPSByZXNwb25zZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRtZXNzYWdlICs9IGZvcm1hdHRlcltpXS5hZnRlcjtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bWVzc2FnZSArPSBmb3JtYXR0ZXJbaV07XG5cdFx0XHR9XG5cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbWVzc2FnZS50cmltKCk7XG5cbn07XG5cbi8qKlxuICpcbiAqIEBwcml2YXRlXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqXG4gKiBAcGFyYW0ge0xPR19FVkVOVH0gbG9nRXZlbnRcbiAqL1xubGV0IF9nZXRGaWxlRGV0YWlscyA9IGZ1bmN0aW9uIChsb2dFdmVudCkge1xuXG5cdGlmIChsb2dFdmVudC5sb2dFcnJvclN0YWNrKSB7XG5cblx0XHRsZXQgcGFydHMgPSBsb2dFdmVudC5sb2dFcnJvclN0YWNrLnN0YWNrLnNwbGl0KC9cXG4vZyk7XG5cdFx0bGV0IGZpbGUgPSBwYXJ0c1szXTtcblx0XHRmaWxlID0gZmlsZS5yZXBsYWNlKC9hdCAoLipcXCh8KShmaWxlfGh0dHB8aHR0cHN8KSg6fCkoXFwvfCkqLywgJycpO1xuXHRcdGZpbGUgPSBmaWxlLnJlcGxhY2UoJyknLCAnJyk7XG5cdFx0ZmlsZSA9IGZpbGUucmVwbGFjZSgodHlwZW9mIGxvY2F0aW9uICE9PSAndW5kZWZpbmVkJykgPyBsb2NhdGlvbi5ob3N0IDogJycsICcnKS50cmltKCk7XG5cblx0XHRsZXQgZmlsZVBhcnRzID0gZmlsZS5zcGxpdCgvXFw6L2cpO1xuXG5cdFx0bG9nRXZlbnQuY29sdW1uID0gZmlsZVBhcnRzLnBvcCgpO1xuXHRcdGxvZ0V2ZW50LmxpbmVOdW1iZXIgPSBmaWxlUGFydHMucG9wKCk7XG5cblx0XHRpZiAodHlwZW9mIGRlZmluZSAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdGxldCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXHRcdFx0bGV0IGFwcERpciA9IHBhdGguZGlybmFtZShyZXF1aXJlLm1haW4uZmlsZW5hbWUpO1xuXHRcdFx0aWYgKCFmaWxlUGFydHNbMF0uc3RhcnRzV2l0aChhcHBEaXIpKSB7XG5cdFx0XHRcdGFwcERpciA9ICcnO1xuXHRcdFx0fVxuXHRcdFx0bG9nRXZlbnQuZmlsZW5hbWUgPSBmaWxlUGFydHMuam9pbignOicpLnJlcGxhY2UoYXBwRGlyLCAnJykucmVwbGFjZSgvXihcXFxcfFxcLykvLCAnJyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGxvZ0V2ZW50LmZpbGVuYW1lID0gZmlsZVBhcnRzLmpvaW4oJzonKTtcblx0XHR9XG5cblx0fSBlbHNlIHtcblxuXHRcdGxvZ0V2ZW50LmNvbHVtbiA9ICc/Jztcblx0XHRsb2dFdmVudC5maWxlbmFtZSA9ICdhbm9ueW1vdXMnO1xuXHRcdGxvZ0V2ZW50LmxpbmVOdW1iZXIgPSAnPyc7XG5cblx0fVxuXHRsb2dFdmVudC5maWxlID0gbG9nRXZlbnQuZmlsZW5hbWU7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYXlvdXRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVDb21waWxlKGxheW91dCkge1xuXHRfZ2V0Q29tcGlsZWRMYXlvdXQobGF5b3V0KTtcbn1cblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbGF5b3V0XG4gKiBAcGFyYW0ge0xPR19FVkVOVH0gbG9nRXZlbnRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXQobGF5b3V0LCBsb2dFdmVudCkge1xuXHRyZXR1cm4gX2Zvcm1hdExvZ0V2ZW50KF9nZXRDb21waWxlZExheW91dChsYXlvdXQpLCBsb2dFdmVudCk7XG59XG4iXX0= \ No newline at end of file diff --git a/dist/es6/index.js b/dist/es6/index.js index c27a7e9..842cdd9 100644 --- a/dist/es6/index.js +++ b/dist/es6/index.js @@ -295,15 +295,15 @@ function getLogger(context) { } // determine the context - if (typeof context != 'string') { + if (typeof context !== 'string') { - if (typeof context == 'function') { + if (typeof context === 'function') { context = utility.getFunctionName(context); - } else if (typeof context == 'object') { + } else if (typeof context === 'object') { context = utility.getFunctionName(context.constructor); - if (context == 'Object') { + if (context === 'Object') { context = 'anonymous'; } } else { @@ -327,7 +327,7 @@ function getLogger(context) { */ function setLogLevel(logLevel, logger) { - if (logLevel instanceof Number) { + if (Number.isInteger(logLevel)) { if (logger) { if (_loggers[logger]) { @@ -349,4 +349,4 @@ addAppender( /*istanbul ignore next*/_consoleAppender.ConsoleAppender); /*istanbul ignore next*/exports.LogLevel = _logLevel.LogLevel; /*istanbul ignore next*/exports.LogAppender = _appender.LogAppender; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbImNvbmZpZ3VyZSIsImFkZEFwcGVuZGVyIiwiZ2V0TG9nZ2VyIiwic2V0TG9nTGV2ZWwiLCJmb3JtYXR0ZXIiLCJ1dGlsaXR5IiwiQVBQRU5ERVIiLCJDT05GSUdfUEFSQU1TIiwiX01BSU5fTE9HR0VSIiwiX0RFRkFVTFRfQVBQRU5ERVJTIiwiSU5GTyIsIl9ERUZBVUxUX0NPTkZJRyIsIl9BUFBFTkRFUl9NRVRIT0RTIiwiX2FwcGVuZGVycyIsIl9jb25maWd1cmF0aW9uIiwiX2ZpbmFsaXplZCIsIl9sb2dnZXJzIiwiY29uZmlnIiwiY29uc29sZSIsImVycm9yIiwibGF5b3V0IiwiX2NvbmZpZ3VyZUFwcGVuZGVycyIsImFwcGVuZGVycyIsIl9jb25maWd1cmVMb2dnZXJzIiwibG9nZ2VycyIsIkFycmF5IiwiZm9yRWFjaCIsImFwcGVuZGVyIiwiRnVuY3Rpb24iLCJFcnJvciIsImxvZ2dlciIsInRhZyIsImxvZ0xldmVsIiwiRVJST1IiLCJfZ2V0QXBwZW5kZXJzRm9yTG9nZ2VyIiwiYXBwZW5kZXJMaXN0IiwiT2JqZWN0Iiwia2V5cyIsImtleSIsInByb3RvdHlwZSIsInNldExheW91dCIsInB1c2giLCJhbGxvd0FwcGVuZGVySW5qZWN0aW9uIiwiX3ZhbGlkYXRlQXBwZW5kZXIiLCJuYW1lIiwiYXBwZW5kZXJPYmoiLCJlbGVtZW50IiwidW5kZWZpbmVkIiwiX2FwcGVuZCIsImxvZ0V2ZW50IiwiaXNBY3RpdmUiLCJsZXZlbCIsImFwcGVuZCIsImNvbnRleHQiLCJnZXRGdW5jdGlvbk5hbWUiLCJjb25zdHJ1Y3RvciIsIk51bWJlciIsImhhc093blByb3BlcnR5IiwiTG9nTGV2ZWwiLCJMb2dBcHBlbmRlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7O1FBZ0ZnQkEsUyxHQUFBQSxTO2dDQXFIQUMsVyxHQUFBQSxXO2dDQStFQUMsUyxHQUFBQSxTO2dDQTJDQUMsVyxHQUFBQSxXOztBQTFTaEI7OzRCQUFZQyxTOztBQUNa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QUFTN0MsV0FBVCxDQUFxQjZCLFFBQXJCLEVBQStCRixNQUEvQixFQUF1Qzs7QUFFMUMsUUFBSUUsb0JBQW9Cd0IsTUFBeEIsRUFBZ0M7O0FBRTVCLFlBQUkxQixNQUFKLEVBQVk7QUFDUixnQkFBSWQsU0FBU2MsTUFBVCxDQUFKLEVBQXNCO0FBQ2xCZCx5QkFBU2MsTUFBVCxFQUFpQjNCLFdBQWpCLENBQTZCNkIsUUFBN0I7QUFDSDtBQUNKLFNBSkQsTUFJTztBQUNILGlCQUFLLElBQUlNLEdBQVQsSUFBZ0J0QixRQUFoQixFQUEwQjtBQUN0QixvQkFBSUEsU0FBU3lDLGNBQVQsQ0FBd0JuQixHQUF4QixDQUFKLEVBQWtDO0FBQzlCdEIsNkJBQVNzQixHQUFULEVBQWNaLE9BQWQsQ0FBc0IsVUFBVUMsUUFBVixFQUFvQjtBQUN0Q0EsaUNBQVN4QixXQUFULENBQXFCNkIsUUFBckI7QUFDSCxxQkFGRDtBQUdIO0FBQ0o7QUFDSjtBQUVKO0FBRUo7O0FBRUQvQjs7Z0NBRVN5RCxRO2dDQUNBQyxXIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBsb2c0anMgPGh0dHBzOi8vZ2l0aHViLmNvbS9hbmlnZW5lcm8vbG9nNGpzPlxuICpcbiAqIENvcHlyaWdodCAyMDE2IFJvYmluIFNjaHVsdHogPGh0dHA6Ly9hbmlnZW5lcm8uY29tPlxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlXG4gKi9cblxuLyoqXG4gKiBIb2xkcyB0aGUgZGVmaW5pdGlvbiBmb3IgdGhlIGFwcGVuZGVyIGNsb3N1cmVcbiAqXG4gKiBAdHlwZWRlZiB7eyBhcHBlbmQgOiBmdW5jdGlvbiAobnVtYmVyLCBMT0dfRVZFTlQpLCBpc0FjdGl2ZSA6IGZ1bmN0aW9uKCksXG4gKiAgICAgICAgICBzZXRMb2dMZXZlbCA6IGZ1bmN0aW9uKG51bWJlciksIHNldExheW91dCA6IGZ1bmN0aW9uKHN0cmluZykgfX1cbiAqL1xubGV0IEFQUEVOREVSO1xuXG4vKipcbiAqIEB0eXBlZGVmIHt7IGFsbG93QXBwZW5kZXJJbmplY3Rpb24gOiBib29sZWFuLCBhcHBlbmRlcnMgOiBBcnJheS48QVBQRU5ERVI+LFxuICogXHRcdFx0YXBwbGljYXRpb24gOiBPYmplY3QsIGxvZ2dlcnMgOiBBcnJheS48TG9nQXBwZW5kZXI+LCBsYXlvdXQgOiBzdHJpbmcgfX1cbiAqL1xubGV0IENPTkZJR19QQVJBTVM7XG5cbmltcG9ydCAqIGFzIGZvcm1hdHRlciBmcm9tICcuL2Zvcm1hdHRlcic7XG5pbXBvcnQgKiBhcyB1dGlsaXR5IGZyb20gJy4vdXRpbGl0eSc7XG5pbXBvcnQge0xvZ0FwcGVuZGVyfSBmcm9tICcuL2FwcGVuZGVyL2FwcGVuZGVyJztcbmltcG9ydCB7TG9nZ2VyfSBmcm9tICcuL2xvZ2dlci9sb2dnZXInO1xuaW1wb3J0IHtMb2dMZXZlbH0gZnJvbSAnLi9jb25zdC9sb2dMZXZlbCc7XG5pbXBvcnQge0NvbnNvbGVBcHBlbmRlcn0gZnJvbSAnLi9hcHBlbmRlci9jb25zb2xlQXBwZW5kZXInO1xuXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBtYWluIGxvZ2dlci4gV2UgdXNlIHRoaXMgaW4gY2FzZSBubyBsb2dnZXIgaXMgc3BlY2lmaWVkXG4gKiBAY29uc3RcbiAqL1xuY29uc3QgX01BSU5fTE9HR0VSID0gJ21haW4nO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IGFwcGVuZGVycyB0aGF0IHNob3VsZCBiZSBpbmNsdWRlZCBpZiBubyBhcHBlbmRlcnMgYXJlIHNwZWNpZmllZFxuICogQGNvbnN0XG4gKi9cbmNvbnN0IF9ERUZBVUxUX0FQUEVOREVSUyA9IFt7XG4gICAgJ2FwcGVuZGVyJyA6IENvbnNvbGVBcHBlbmRlcixcbiAgICAnbGV2ZWwnIDogTG9nTGV2ZWwuSU5GT1xufV07XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgbG9nNGpzMi4gSWYgbm8gY29uZmlndXJhdGlvbiBpcyBzcGVjaWZpZWQsIHRoZW4gdGhpc1xuICogY29uZmlndXJhdGlvbiB3aWxsIGJlIGluamVjdGVkXG4gKiBAY29uc3RcbiAqL1xuY29uc3QgX0RFRkFVTFRfQ09ORklHID0ge1xuICAgICdhbGxvd0FwcGVuZGVySW5qZWN0aW9uJyA6IHRydWUsXG4gICAgJ2FwcGVuZGVycycgOiBfREVGQVVMVF9BUFBFTkRFUlMsXG4gICAgJ2xvZ2dlcnMnIDogW3tcbiAgICAgICAgJ2xldmVsJyA6IExvZ0xldmVsLklORk9cbiAgICB9XSxcbiAgICAnbGF5b3V0JyA6ICclZCBbJXBdICVjIC0gJW0nXG59O1xuXG4vKipcbiAqIFRoZSBtZXRob2RzIHRoYXQgYW4gYXBwZW5kZXIgbXVzdCBjb250YWluXG4gKiBAY29uc3RcbiAqL1xuY29uc3QgX0FQUEVOREVSX01FVEhPRFMgPSBbJ2FwcGVuZCcsICdnZXROYW1lJywgJ2lzQWN0aXZlJywgJ3NldExvZ0xldmVsJywgJ3NldExheW91dCddO1xuXG4vKiogQHR5cGUge09iamVjdH0gKi9cbmxldCBfYXBwZW5kZXJzID0ge307XG4vKiogQHR5cGUgez9DT05GSUdfUEFSQU1TfSAqL1xubGV0IF9jb25maWd1cmF0aW9uID0gbnVsbDtcbi8qKiBAdHlwZSB7Ym9vbGVhbn0gKi9cbmxldCBfZmluYWxpemVkID0gZmFsc2U7XG4vKiogQHR5cGUge09iamVjdH0gKi9cbmxldCBfbG9nZ2VycyA9IHt9O1xuXG4vKipcbiAqIENvbmZpZ3VyZXMgdGhlIGxvZ2dlclxuICpcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGxvZzRqc1xuICpcbiAqIEBwYXJhbXMge0NPTkZJR19QQVJBTVN9IGNvbmZpZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29uZmlndXJlKGNvbmZpZykge1xuXG5cdGlmIChfZmluYWxpemVkKSB7XG5cdFx0Y29uc29sZS5lcnJvcignQ291bGQgbm90IGNvbmZpZ3VyZSAtIGFscmVhZHkgaW4gdXNlJyk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKCFfY29uZmlndXJhdGlvbikge1xuICAgICAgICBfY29uZmlndXJhdGlvbiA9IHt9O1xuICAgIH1cblxuICAgIC8vIHNldCB0aGUgZGVmYXVsdCBsYXlvdXRcbiAgICBpZiAoIWNvbmZpZy5sYXlvdXQgJiYgIV9jb25maWd1cmF0aW9uLmxheW91dCkge1xuICAgICAgICBfY29uZmlndXJhdGlvbi5sYXlvdXQgPSBfREVGQVVMVF9DT05GSUcubGF5b3V0O1xuICAgIH0gZWxzZSBpZiAoY29uZmlnLmxheW91dCkge1xuICAgICAgICBfY29uZmlndXJhdGlvbi5sYXlvdXQgPSBjb25maWcubGF5b3V0O1xuICAgIH1cblxuXHQvLyBjb25maWd1cmUgdGhlIGFwcGVuZGVyc1xuXHRfY29uZmlndXJlQXBwZW5kZXJzKGNvbmZpZy5hcHBlbmRlcnMpO1xuICAgIC8vIGNvbmZpZ3VyZSB0aGUgbG9nZ2Vyc1xuICAgIF9jb25maWd1cmVMb2dnZXJzKGNvbmZpZy5sb2dnZXJzKTtcblxufVxuXG4vKipcbiAqIENvbmZpZ3VyZXMgYXBwZW5kZXJzXG4gKlxuICogQHByaXZhdGVcbiAqIEBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7QXJyYXkuPExvZ0FwcGVuZGVyfGZ1bmN0aW9uPn0gYXBwZW5kZXJzXG4gKi9cbmxldCBfY29uZmlndXJlQXBwZW5kZXJzID0gZnVuY3Rpb24gKGFwcGVuZGVycykge1xuXG4gICAgaWYgKCEoYXBwZW5kZXJzIGluc3RhbmNlb2YgQXJyYXkpKSB7XG4gICAgICAgIGFwcGVuZGVycyA9IF9ERUZBVUxUX0FQUEVOREVSUztcbiAgICB9XG5cbiAgICBhcHBlbmRlcnMuZm9yRWFjaChhcHBlbmRlciA9PiB7XG4gICAgICAgIGlmIChhcHBlbmRlciBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICAgICAgICBhZGRBcHBlbmRlcihhcHBlbmRlcik7XG4gICAgICAgIH1cbiAgICB9KTtcblxufTtcblxuLyoqXG4gKiBDb25maWd1cmVzIHRoZSBsb2dnZXJzXG4gKlxuICogQHByaXZhdGVcbiAqIEBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD59IGxvZ2dlcnNcbiAqL1xubGV0IF9jb25maWd1cmVMb2dnZXJzID0gZnVuY3Rpb24gKGxvZ2dlcnMpIHtcblxuXHRpZiAoIShsb2dnZXJzIGluc3RhbmNlb2YgQXJyYXkpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGxvZ2dlcnMnKTtcblx0fVxuXG4gICAgbG9nZ2Vycy5mb3JFYWNoKGZ1bmN0aW9uIChsb2dnZXIpIHtcblxuICAgICAgICBpZiAoIWxvZ2dlci5sYXlvdXQgfHwgdHlwZW9mIGxvZ2dlci5sYXlvdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBsb2dnZXIubGF5b3V0ID0gX2NvbmZpZ3VyYXRpb24ubGF5b3V0O1xuICAgICAgICB9XG5cbiAgICAgICAgbG9nZ2VyLnRhZyA9IGxvZ2dlci50YWcgfHwgX01BSU5fTE9HR0VSO1xuICAgICAgICBsb2dnZXIubG9nTGV2ZWwgPSBsb2dnZXIubG9nTGV2ZWwgfHwgTG9nTGV2ZWwuRVJST1I7XG5cbiAgICAgICAgX2xvZ2dlcnNbbG9nZ2VyLnRhZ10gPSBfZ2V0QXBwZW5kZXJzRm9yTG9nZ2VyKGxvZ2dlci5sb2dMZXZlbCwgbG9nZ2VyLmxheW91dCk7XG5cbiAgICB9KTtcblxufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBhcHBlbmRlcnMgZm9yIHRoZSBsZXZlbCBhbmQgbGF5b3V0XG4gKlxuICogQHByaXZhdGVcbiAqIEBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBsb2dMZXZlbFxuICogQHBhcmFtIHtzdHJpbmd9IGxheW91dFxuICpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xubGV0IF9nZXRBcHBlbmRlcnNGb3JMb2dnZXIgPSBmdW5jdGlvbiAobG9nTGV2ZWwsIGxheW91dCkge1xuXG4gICAgbGV0IGxvZ2dlcjtcbiAgICBsZXQgYXBwZW5kZXJMaXN0ID0gW107XG5cbiAgICBPYmplY3Qua2V5cyhfYXBwZW5kZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcblxuICAgICAgICBsb2dnZXIgPSAoX2FwcGVuZGVyc1trZXldLnByb3RvdHlwZSBpbnN0YW5jZW9mIExvZ0FwcGVuZGVyKSA/IG5ldyBfYXBwZW5kZXJzW2tleV0oKSA6IF9hcHBlbmRlcnNba2V5XSgpO1xuXG4gICAgICAgIGxvZ2dlci5zZXRMb2dMZXZlbChsb2dMZXZlbCk7XG4gICAgICAgIGxvZ2dlci5zZXRMYXlvdXQobGF5b3V0KTtcblxuICAgICAgICBhcHBlbmRlckxpc3QucHVzaChsb2dnZXIpO1xuXG4gICAgfSk7XG5cblx0cmV0dXJuIGFwcGVuZGVyTGlzdDtcblxufTtcblxuLyoqXG4gKiBBZGRzIGFuIGFwcGVuZGVyIHRvIHRoZSBhcHBlbmRlciBxdWV1ZS4gSWYgdGhlIHN0YWNrIGlzIGZpbmFsaXplZCwgYW5kXG4gKiB0aGUgYWxsb3dBcHBlbmRlckluamVjdGlvbiBpcyBzZXQgdG8gZmFsc2UsIHRoZW4gdGhlIGV2ZW50IHdpbGwgbm90IGJlXG4gKiBhcHBlbmRlZFxuICpcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGxvZzRqc1xuICpcbiAqIEBwYXJhbXMge0xvZ0FwcGVuZGVyfSBhcHBlbmRlclxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkQXBwZW5kZXIoYXBwZW5kZXIpIHtcblxuXHRpZiAoX2ZpbmFsaXplZCAmJiAhX2NvbmZpZ3VyYXRpb24uYWxsb3dBcHBlbmRlckluamVjdGlvbikge1xuXHRcdGNvbnNvbGUuZXJyb3IoJ0Nhbm5vdCBhZGQgYXBwZW5kZXIgd2hlbiBjb25maWd1cmF0aW9uIGZpbmFsaXplZCcpO1xuXHRcdHJldHVybjtcblx0fVxuXG4gICAgX3ZhbGlkYXRlQXBwZW5kZXIoYXBwZW5kZXIpO1xuXG4gICAgLy8gb25seSBwdXQgdGhlIGFwcGVuZGVyIGludG8gdGhlIHNldCBpZiBpdCBkb2Vzbid0IGV4aXN0IGFscmVhZHlcbiAgICBpZiAoIV9hcHBlbmRlcnNbYXBwZW5kZXIubmFtZV0pIHtcbiAgICAgICAgX2FwcGVuZGVyc1thcHBlbmRlci5uYW1lXSA9IGFwcGVuZGVyO1xuICAgIH1cblxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGF0IHRoZSBhcHBlbmRlclxuICpcbiAqIEBwcml2YXRlXG4gKiBAZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW1zIHtBUFBFTkRFUn0gYXBwZW5kZXJcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiB0aGUgYXBwZW5kZXIgaXMgaW52YWxpZFxuICovXG5sZXQgX3ZhbGlkYXRlQXBwZW5kZXIgPSBmdW5jdGlvbiAoYXBwZW5kZXIpIHtcblxuICAgIC8vIGlmIHdlIGFyZSBydW5uaW5nIEVTNiwgd2UgY2FuIG1ha2Ugc3VyZSBpdCBleHRlbmRzIExvZ0FwcGVuZGVyXG4gICAgLy8gb3RoZXJ3aXNlLCBpdCBtdXN0IGJlIGEgZnVuY3Rpb25cbiAgICBpZiAoYXBwZW5kZXIucHJvdG90eXBlIGluc3RhbmNlb2YgTG9nQXBwZW5kZXIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoIShhcHBlbmRlciBpbnN0YW5jZW9mIEZ1bmN0aW9uKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcignSW52YWxpZCBhcHBlbmRlcjogbm90IGEgZnVuY3Rpb24gb3IgY2xhc3MgTG9nQXBwZW5kZXInKTtcblx0fVxuXG5cdC8vIGluc3RhbnRpYXRlIHRoZSBhcHBlbmRlciBmdW5jdGlvblxuXHRsZXQgYXBwZW5kZXJPYmogPSBhcHBlbmRlcigpO1xuXG4gICAgLy8gZW5zdXJlIHRoYXQgdGhlIGFwcGVuZGVyIG1ldGhvZHMgYXJlIHByZXNlbnQgKGFuZCBhcmUgZnVuY3Rpb25zKVxuICAgIF9BUFBFTkRFUl9NRVRIT0RTLmZvckVhY2goZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgICAgaWYgKGFwcGVuZGVyT2JqW2VsZW1lbnRdID09IHVuZGVmaW5lZCB8fCAhKGFwcGVuZGVyT2JqW2VsZW1lbnRdIGluc3RhbmNlb2YgRnVuY3Rpb24pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgYXBwZW5kZXI6IG1pc3NpbmcvaW52YWxpZCBtZXRob2Q6ICR7ZWxlbWVudH1gKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG59O1xuXG4vKipcbiAqIEFwcGVuZHMgdGhlIGxvZyBldmVudFxuICpcbiAqIEBwcml2YXRlXG4gKiBAZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gbG9nRXZlbnRcbiAqL1xuZnVuY3Rpb24gX2FwcGVuZChsb2dFdmVudCkge1xuXG5cdC8vIGZpbmFsaXplIHRoZSBjb25maWd1cmF0aW9uIHRvIG1ha2Ugc3VyZSBubyBvdGhlciBhcHBlbmRlciBjYW4gYmUgaW5qZWN0ZWQgKGlmIHNldClcblx0X2ZpbmFsaXplZCA9IHRydWU7XG5cbiAgICAvLyBjeWNsZSB0aHJvdWdoIGVhY2ggYXBwZW5kZXIgZm9yIHRoZSBsb2dnZXIgYW5kIGFwcGVuZCB0aGUgbG9nZ2luZyBldmVudFxuICAgIChfbG9nZ2Vyc1tsb2dFdmVudC5sb2dnZXJdIHx8IF9sb2dnZXJzW19NQUlOX0xPR0dFUl0pLmZvckVhY2goZnVuY3Rpb24gKGxvZ2dlcikge1xuICAgICAgICBpZiAobG9nZ2VyLmlzQWN0aXZlKGxvZ0V2ZW50LmxldmVsKSkge1xuICAgICAgICAgICAgbG9nZ2VyLmFwcGVuZChsb2dFdmVudCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxufVxuXG4vKipcbiAqIEhhbmRsZXMgY3JlYXRpbmcgdGhlIGxvZ2dlciBhbmQgcmV0dXJuaW5nIGl0XG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgbG9nNGpzXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbnxzdHJpbmc9fSBjb250ZXh0XG4gKlxuICogQHJldHVybiB7TG9nZ2VyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TG9nZ2VyKGNvbnRleHQpIHtcblxuXHQvLyB3ZSBuZWVkIHRvIGluaXRpYWxpemUgaWYgd2UgaGF2ZW4ndFxuXHRpZiAoIV9jb25maWd1cmF0aW9uKSB7XG5cdFx0Y29uZmlndXJlKF9ERUZBVUxUX0NPTkZJRyk7XG5cdH1cblxuICAgIC8vIGRldGVybWluZSB0aGUgY29udGV4dFxuICAgIGlmICh0eXBlb2YgY29udGV4dCAhPSAnc3RyaW5nJykge1xuXG4gICAgICAgIGlmICh0eXBlb2YgY29udGV4dCA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjb250ZXh0ID0gdXRpbGl0eS5nZXRGdW5jdGlvbk5hbWUoY29udGV4dCk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbnRleHQgPT0gJ29iamVjdCcpIHtcblxuICAgICAgICAgICAgY29udGV4dCA9IHV0aWxpdHkuZ2V0RnVuY3Rpb25OYW1lKGNvbnRleHQuY29uc3RydWN0b3IpO1xuXG4gICAgICAgICAgICBpZiAoY29udGV4dCA9PSAnT2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIGNvbnRleHQgPSAnYW5vbnltb3VzJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29udGV4dCA9IF9NQUlOX0xPR0dFUjtcbiAgICAgICAgfVxuXG4gICAgfVxuXG5cdHJldHVybiBuZXcgTG9nZ2VyKGNvbnRleHQsIHtcblx0XHQnYXBwZW5kJyA6IF9hcHBlbmRcblx0fSk7XG5cbn1cblxuXG5cbi8qKlxuICogU2V0cyB0aGUgbG9nIGxldmVsIGZvciBhbGwgYXBwZW5kZXJzIG9mIGEgbG9nZ2VyLCBvciBzcGVjaWZpZWQgbG9nZ2VyXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgbG9nNGpzXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGxvZ0xldmVsXG4gKiBAcGFyYW0ge3N0cmluZz19IGxvZ2dlclxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TG9nTGV2ZWwobG9nTGV2ZWwsIGxvZ2dlcikge1xuXG4gICAgaWYgKGxvZ0xldmVsIGluc3RhbmNlb2YgTnVtYmVyKSB7XG5cbiAgICAgICAgaWYgKGxvZ2dlcikge1xuICAgICAgICAgICAgaWYgKF9sb2dnZXJzW2xvZ2dlcl0pIHtcbiAgICAgICAgICAgICAgICBfbG9nZ2Vyc1tsb2dnZXJdLnNldExvZ0xldmVsKGxvZ0xldmVsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBfbG9nZ2Vycykge1xuICAgICAgICAgICAgICAgIGlmIChfbG9nZ2Vycy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIF9sb2dnZXJzW2tleV0uZm9yRWFjaChmdW5jdGlvbiAoYXBwZW5kZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZGVyLnNldExvZ0xldmVsKGxvZ0xldmVsKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9XG5cbn1cblxuYWRkQXBwZW5kZXIoQ29uc29sZUFwcGVuZGVyKTtcblxuZXhwb3J0IHsgTG9nTGV2ZWwgfTtcbmV4cG9ydCB7IExvZ0FwcGVuZGVyIH07XG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbImNvbmZpZ3VyZSIsImFkZEFwcGVuZGVyIiwiZ2V0TG9nZ2VyIiwic2V0TG9nTGV2ZWwiLCJmb3JtYXR0ZXIiLCJ1dGlsaXR5IiwiQVBQRU5ERVIiLCJDT05GSUdfUEFSQU1TIiwiX01BSU5fTE9HR0VSIiwiX0RFRkFVTFRfQVBQRU5ERVJTIiwiSU5GTyIsIl9ERUZBVUxUX0NPTkZJRyIsIl9BUFBFTkRFUl9NRVRIT0RTIiwiX2FwcGVuZGVycyIsIl9jb25maWd1cmF0aW9uIiwiX2ZpbmFsaXplZCIsIl9sb2dnZXJzIiwiY29uZmlnIiwiY29uc29sZSIsImVycm9yIiwibGF5b3V0IiwiX2NvbmZpZ3VyZUFwcGVuZGVycyIsImFwcGVuZGVycyIsIl9jb25maWd1cmVMb2dnZXJzIiwibG9nZ2VycyIsIkFycmF5IiwiZm9yRWFjaCIsImFwcGVuZGVyIiwiRnVuY3Rpb24iLCJFcnJvciIsImxvZ2dlciIsInRhZyIsImxvZ0xldmVsIiwiRVJST1IiLCJfZ2V0QXBwZW5kZXJzRm9yTG9nZ2VyIiwiYXBwZW5kZXJMaXN0IiwiT2JqZWN0Iiwia2V5cyIsImtleSIsInByb3RvdHlwZSIsInNldExheW91dCIsInB1c2giLCJhbGxvd0FwcGVuZGVySW5qZWN0aW9uIiwiX3ZhbGlkYXRlQXBwZW5kZXIiLCJuYW1lIiwiYXBwZW5kZXJPYmoiLCJlbGVtZW50IiwidW5kZWZpbmVkIiwiX2FwcGVuZCIsImxvZ0V2ZW50IiwiaXNBY3RpdmUiLCJsZXZlbCIsImFwcGVuZCIsImNvbnRleHQiLCJnZXRGdW5jdGlvbk5hbWUiLCJjb25zdHJ1Y3RvciIsIk51bWJlciIsImlzSW50ZWdlciIsImhhc093blByb3BlcnR5IiwiTG9nTGV2ZWwiLCJMb2dBcHBlbmRlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7O1FBZ0ZnQkEsUyxHQUFBQSxTO2dDQXFIQUMsVyxHQUFBQSxXO2dDQStFQUMsUyxHQUFBQSxTO2dDQTJDQUMsVyxHQUFBQSxXOztBQTFTaEI7OzRC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Ozs7Ozs7O0FBU08sU0FBUzdDLFdBQVQsQ0FBcUI2QixRQUFyQixFQUErQkYsTUFBL0IsRUFBdUM7O0FBRTFDLFFBQUkwQixPQUFPQyxTQUFQLENBQWlCekIsUUFBakIsQ0FBSixFQUFnQzs7QUFFNUIsWUFBSUYsTUFBSixFQUFZO0FBQ1IsZ0JBQUlkLFNBQVNjLE1BQVQsQ0FBSixFQUFzQjtBQUNsQmQseUJBQVNjLE1BQVQsRUFBaUIzQixXQUFqQixDQUE2QjZCLFFBQTdCO0FBQ0g7QUFDSixTQUpELE1BSU87QUFDSCxpQkFBSyxJQUFJTSxHQUFULElBQWdCdEIsUUFBaEIsRUFBMEI7QUFDdEIsb0JBQUlBLFNBQVMwQyxjQUFULENBQXdCcEIsR0FBeEIsQ0FBSixFQUFrQztBQUM5QnRCLDZCQUFTc0IsR0FBVCxFQUFjWixPQUFkLENBQXNCLFVBQVVDLFFBQVYsRUFBb0I7QUFDdENBLGlDQUFTeEIsV0FBVCxDQUFxQjZCLFFBQXJCO0FBQ0gscUJBRkQ7QUFHSDtBQUNKO0FBQ0o7QUFFSjtBQUVKOztBQUVEL0I7O2dDQUVTMEQsUTtnQ0FDQUMsVyIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogbG9nNGpzIDxodHRwczovL2dpdGh1Yi5jb20vYW5pZ2VuZXJvL2xvZzRqcz5cbiAqXG4gKiBDb3B5cmlnaHQgMjAxNiBSb2JpbiBTY2h1bHR6IDxodHRwOi8vYW5pZ2VuZXJvLmNvbT5cbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZVxuICovXG5cbi8qKlxuICogSG9sZHMgdGhlIGRlZmluaXRpb24gZm9yIHRoZSBhcHBlbmRlciBjbG9zdXJlXG4gKlxuICogQHR5cGVkZWYge3sgYXBwZW5kIDogZnVuY3Rpb24gKG51bWJlciwgTE9HX0VWRU5UKSwgaXNBY3RpdmUgOiBmdW5jdGlvbigpLFxuICogICAgICAgICAgc2V0TG9nTGV2ZWwgOiBmdW5jdGlvbihudW1iZXIpLCBzZXRMYXlvdXQgOiBmdW5jdGlvbihzdHJpbmcpIH19XG4gKi9cbmxldCBBUFBFTkRFUjtcblxuLyoqXG4gKiBAdHlwZWRlZiB7eyBhbGxvd0FwcGVuZGVySW5qZWN0aW9uIDogYm9vbGVhbiwgYXBwZW5kZXJzIDogQXJyYXkuPEFQUEVOREVSPixcbiAqIFx0XHRcdGFwcGxpY2F0aW9uIDogT2JqZWN0LCBsb2dnZXJzIDogQXJyYXkuPExvZ0FwcGVuZGVyPiwgbGF5b3V0IDogc3RyaW5nIH19XG4gKi9cbmxldCBDT05GSUdfUEFSQU1TO1xuXG5pbXBvcnQgKiBhcyBmb3JtYXR0ZXIgZnJvbSAnLi9mb3JtYXR0ZXInO1xuaW1wb3J0ICogYXMgdXRpbGl0eSBmcm9tICcuL3V0aWxpdHknO1xuaW1wb3J0IHtMb2dBcHBlbmRlcn0gZnJvbSAnLi9hcHBlbmRlci9hcHBlbmRlcic7XG5pbXBvcnQge0xvZ2dlcn0gZnJvbSAnLi9sb2dnZXIvbG9nZ2VyJztcbmltcG9ydCB7TG9nTGV2ZWx9IGZyb20gJy4vY29uc3QvbG9nTGV2ZWwnO1xuaW1wb3J0IHtDb25zb2xlQXBwZW5kZXJ9IGZyb20gJy4vYXBwZW5kZXIvY29uc29sZUFwcGVuZGVyJztcblxuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgbWFpbiBsb2dnZXIuIFdlIHVzZSB0aGlzIGluIGNhc2Ugbm8gbG9nZ2VyIGlzIHNwZWNpZmllZFxuICogQGNvbnN0XG4gKi9cbmNvbnN0IF9NQUlOX0xPR0dFUiA9ICdtYWluJztcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBhcHBlbmRlcnMgdGhhdCBzaG91bGQgYmUgaW5jbHVkZWQgaWYgbm8gYXBwZW5kZXJzIGFyZSBzcGVjaWZpZWRcbiAqIEBjb25zdFxuICovXG5jb25zdCBfREVGQVVMVF9BUFBFTkRFUlMgPSBbe1xuICAgICdhcHBlbmRlcicgOiBDb25zb2xlQXBwZW5kZXIsXG4gICAgJ2xldmVsJyA6IExvZ0xldmVsLklORk9cbn1dO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yIGxvZzRqczIuIElmIG5vIGNvbmZpZ3VyYXRpb24gaXMgc3BlY2lmaWVkLCB0aGVuIHRoaXNcbiAqIGNvbmZpZ3VyYXRpb24gd2lsbCBiZSBpbmplY3RlZFxuICogQGNvbnN0XG4gKi9cbmNvbnN0IF9ERUZBVUxUX0NPTkZJRyA9IHtcbiAgICAnYWxsb3dBcHBlbmRlckluamVjdGlvbicgOiB0cnVlLFxuICAgICdhcHBlbmRlcnMnIDogX0RFRkFVTFRfQVBQRU5ERVJTLFxuICAgICdsb2dnZXJzJyA6IFt7XG4gICAgICAgICdsZXZlbCcgOiBMb2dMZXZlbC5JTkZPXG4gICAgfV0sXG4gICAgJ2xheW91dCcgOiAnJWQgWyVwXSAlYyAtICVtJ1xufTtcblxuLyoqXG4gKiBUaGUgbWV0aG9kcyB0aGF0IGFuIGFwcGVuZGVyIG11c3QgY29udGFpblxuICogQGNvbnN0XG4gKi9cbmNvbnN0IF9BUFBFTkRFUl9NRVRIT0RTID0gWydhcHBlbmQnLCAnZ2V0TmFtZScsICdpc0FjdGl2ZScsICdzZXRMb2dMZXZlbCcsICdzZXRMYXlvdXQnXTtcblxuLyoqIEB0eXBlIHtPYmplY3R9ICovXG5sZXQgX2FwcGVuZGVycyA9IHt9O1xuLyoqIEB0eXBlIHs/Q09ORklHX1BBUkFNU30gKi9cbmxldCBfY29uZmlndXJhdGlvbiA9IG51bGw7XG4vKiogQHR5cGUge2Jvb2xlYW59ICovXG5sZXQgX2ZpbmFsaXplZCA9IGZhbHNlO1xuLyoqIEB0eXBlIHtPYmplY3R9ICovXG5sZXQgX2xvZ2dlcnMgPSB7fTtcblxuLyoqXG4gKiBDb25maWd1cmVzIHRoZSBsb2dnZXJcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBsb2c0anNcbiAqXG4gKiBAcGFyYW1zIHtDT05GSUdfUEFSQU1TfSBjb25maWdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbmZpZ3VyZShjb25maWcpIHtcblxuXHRpZiAoX2ZpbmFsaXplZCkge1xuXHRcdGNvbnNvbGUuZXJyb3IoJ0NvdWxkIG5vdCBjb25maWd1cmUgLSBhbHJlYWR5IGluIHVzZScpO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmICghX2NvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgX2NvbmZpZ3VyYXRpb24gPSB7fTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIGRlZmF1bHQgbGF5b3V0XG4gICAgaWYgKCFjb25maWcubGF5b3V0ICYmICFfY29uZmlndXJhdGlvbi5sYXlvdXQpIHtcbiAgICAgICAgX2NvbmZpZ3VyYXRpb24ubGF5b3V0ID0gX0RFRkFVTFRfQ09ORklHLmxheW91dDtcbiAgICB9IGVsc2UgaWYgKGNvbmZpZy5sYXlvdXQpIHtcbiAgICAgICAgX2NvbmZpZ3VyYXRpb24ubGF5b3V0ID0gY29uZmlnLmxheW91dDtcbiAgICB9XG5cblx0Ly8gY29uZmlndXJlIHRoZSBhcHBlbmRlcnNcblx0X2NvbmZpZ3VyZUFwcGVuZGVycyhjb25maWcuYXBwZW5kZXJzKTtcbiAgICAvLyBjb25maWd1cmUgdGhlIGxvZ2dlcnNcbiAgICBfY29uZmlndXJlTG9nZ2Vycyhjb25maWcubG9nZ2Vycyk7XG5cbn1cblxuLyoqXG4gKiBDb25maWd1cmVzIGFwcGVuZGVyc1xuICpcbiAqIEBwcml2YXRlXG4gKiBAZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge0FycmF5LjxMb2dBcHBlbmRlcnxmdW5jdGlvbj59IGFwcGVuZGVyc1xuICovXG5sZXQgX2NvbmZpZ3VyZUFwcGVuZGVycyA9IGZ1bmN0aW9uIChhcHBlbmRlcnMpIHtcblxuICAgIGlmICghKGFwcGVuZGVycyBpbnN0YW5jZW9mIEFycmF5KSkge1xuICAgICAgICBhcHBlbmRlcnMgPSBfREVGQVVMVF9BUFBFTkRFUlM7XG4gICAgfVxuXG4gICAgYXBwZW5kZXJzLmZvckVhY2goYXBwZW5kZXIgPT4ge1xuICAgICAgICBpZiAoYXBwZW5kZXIgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICAgICAgYWRkQXBwZW5kZXIoYXBwZW5kZXIpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbn07XG5cbi8qKlxuICogQ29uZmlndXJlcyB0aGUgbG9nZ2Vyc1xuICpcbiAqIEBwcml2YXRlXG4gKiBAZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+fSBsb2dnZXJzXG4gKi9cbmxldCBfY29uZmlndXJlTG9nZ2VycyA9IGZ1bmN0aW9uIChsb2dnZXJzKSB7XG5cblx0aWYgKCEobG9nZ2VycyBpbnN0YW5jZW9mIEFycmF5KSkge1xuXHRcdHRocm93IG5ldyBFcnJvcignSW52YWxpZCBsb2dnZXJzJyk7XG5cdH1cblxuICAgIGxvZ2dlcnMuZm9yRWFjaChmdW5jdGlvbiAobG9nZ2VyKSB7XG5cbiAgICAgICAgaWYgKCFsb2dnZXIubGF5b3V0IHx8IHR5cGVvZiBsb2dnZXIubGF5b3V0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgbG9nZ2VyLmxheW91dCA9IF9jb25maWd1cmF0aW9uLmxheW91dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxvZ2dlci50YWcgPSBsb2dnZXIudGFnIHx8IF9NQUlOX0xPR0dFUjtcbiAgICAgICAgbG9nZ2VyLmxvZ0xldmVsID0gbG9nZ2VyLmxvZ0xldmVsIHx8IExvZ0xldmVsLkVSUk9SO1xuXG4gICAgICAgIF9sb2dnZXJzW2xvZ2dlci50YWddID0gX2dldEFwcGVuZGVyc0ZvckxvZ2dlcihsb2dnZXIubG9nTGV2ZWwsIGxvZ2dlci5sYXlvdXQpO1xuXG4gICAgfSk7XG5cbn07XG5cbi8qKlxuICogR2V0cyB0aGUgYXBwZW5kZXJzIGZvciB0aGUgbGV2ZWwgYW5kIGxheW91dFxuICpcbiAqIEBwcml2YXRlXG4gKiBAZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gbG9nTGV2ZWxcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYXlvdXRcbiAqXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbmxldCBfZ2V0QXBwZW5kZXJzRm9yTG9nZ2VyID0gZnVuY3Rpb24gKGxvZ0xldmVsLCBsYXlvdXQpIHtcblxuICAgIGxldCBsb2dnZXI7XG4gICAgbGV0IGFwcGVuZGVyTGlzdCA9IFtdO1xuXG4gICAgT2JqZWN0LmtleXMoX2FwcGVuZGVycykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG5cbiAgICAgICAgbG9nZ2VyID0gKF9hcHBlbmRlcnNba2V5XS5wcm90b3R5cGUgaW5zdGFuY2VvZiBMb2dBcHBlbmRlcikgPyBuZXcgX2FwcGVuZGVyc1trZXldKCkgOiBfYXBwZW5kZXJzW2tleV0oKTtcblxuICAgICAgICBsb2dnZXIuc2V0TG9nTGV2ZWwobG9nTGV2ZWwpO1xuICAgICAgICBsb2dnZXIuc2V0TGF5b3V0KGxheW91dCk7XG5cbiAgICAgICAgYXBwZW5kZXJMaXN0LnB1c2gobG9nZ2VyKTtcblxuICAgIH0pO1xuXG5cdHJldHVybiBhcHBlbmRlckxpc3Q7XG5cbn07XG5cbi8qKlxuICogQWRkcyBhbiBhcHBlbmRlciB0byB0aGUgYXBwZW5kZXIgcXVldWUuIElmIHRoZSBzdGFjayBpcyBmaW5hbGl6ZWQsIGFuZFxuICogdGhlIGFsbG93QXBwZW5kZXJJbmplY3Rpb24gaXMgc2V0IHRvIGZhbHNlLCB0aGVuIHRoZSBldmVudCB3aWxsIG5vdCBiZVxuICogYXBwZW5kZWRcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBsb2c0anNcbiAqXG4gKiBAcGFyYW1zIHtMb2dBcHBlbmRlcn0gYXBwZW5kZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZEFwcGVuZGVyKGFwcGVuZGVyKSB7XG5cblx0aWYgKF9maW5hbGl6ZWQgJiYgIV9jb25maWd1cmF0aW9uLmFsbG93QXBwZW5kZXJJbmplY3Rpb24pIHtcblx0XHRjb25zb2xlLmVycm9yKCdDYW5ub3QgYWRkIGFwcGVuZGVyIHdoZW4gY29uZmlndXJhdGlvbiBmaW5hbGl6ZWQnKTtcblx0XHRyZXR1cm47XG5cdH1cblxuICAgIF92YWxpZGF0ZUFwcGVuZGVyKGFwcGVuZGVyKTtcblxuICAgIC8vIG9ubHkgcHV0IHRoZSBhcHBlbmRlciBpbnRvIHRoZSBzZXQgaWYgaXQgZG9lc24ndCBleGlzdCBhbHJlYWR5XG4gICAgaWYgKCFfYXBwZW5kZXJzW2FwcGVuZGVyLm5hbWVdKSB7XG4gICAgICAgIF9hcHBlbmRlcnNbYXBwZW5kZXIubmFtZV0gPSBhcHBlbmRlcjtcbiAgICB9XG5cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhhdCB0aGUgYXBwZW5kZXJcbiAqXG4gKiBAcHJpdmF0ZVxuICogQGZ1bmN0aW9uXG4gKlxuICogQHBhcmFtcyB7QVBQRU5ERVJ9IGFwcGVuZGVyXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlIGFwcGVuZGVyIGlzIGludmFsaWRcbiAqL1xubGV0IF92YWxpZGF0ZUFwcGVuZGVyID0gZnVuY3Rpb24gKGFwcGVuZGVyKSB7XG5cbiAgICAvLyBpZiB3ZSBhcmUgcnVubmluZyBFUzYsIHdlIGNhbiBtYWtlIHN1cmUgaXQgZXh0ZW5kcyBMb2dBcHBlbmRlclxuICAgIC8vIG90aGVyd2lzZSwgaXQgbXVzdCBiZSBhIGZ1bmN0aW9uXG4gICAgaWYgKGFwcGVuZGVyLnByb3RvdHlwZSBpbnN0YW5jZW9mIExvZ0FwcGVuZGVyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKCEoYXBwZW5kZXIgaW5zdGFuY2VvZiBGdW5jdGlvbikpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXBwZW5kZXI6IG5vdCBhIGZ1bmN0aW9uIG9yIGNsYXNzIExvZ0FwcGVuZGVyJyk7XG5cdH1cblxuXHQvLyBpbnN0YW50aWF0ZSB0aGUgYXBwZW5kZXIgZnVuY3Rpb25cblx0bGV0IGFwcGVuZGVyT2JqID0gYXBwZW5kZXIoKTtcblxuICAgIC8vIGVuc3VyZSB0aGF0IHRoZSBhcHBlbmRlciBtZXRob2RzIGFyZSBwcmVzZW50IChhbmQgYXJlIGZ1bmN0aW9ucylcbiAgICBfQVBQRU5ERVJfTUVUSE9EUy5mb3JFYWNoKGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgIGlmIChhcHBlbmRlck9ialtlbGVtZW50XSA9PSB1bmRlZmluZWQgfHwgIShhcHBlbmRlck9ialtlbGVtZW50XSBpbnN0YW5jZW9mIEZ1bmN0aW9uKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGFwcGVuZGVyOiBtaXNzaW5nL2ludmFsaWQgbWV0aG9kOiAke2VsZW1lbnR9YCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxufTtcblxuLyoqXG4gKiBBcHBlbmRzIHRoZSBsb2cgZXZlbnRcbiAqXG4gKiBAcHJpdmF0ZVxuICogQGZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGxvZ0V2ZW50XG4gKi9cbmZ1bmN0aW9uIF9hcHBlbmQobG9nRXZlbnQpIHtcblxuXHQvLyBmaW5hbGl6ZSB0aGUgY29uZmlndXJhdGlvbiB0byBtYWtlIHN1cmUgbm8gb3RoZXIgYXBwZW5kZXIgY2FuIGJlIGluamVjdGVkIChpZiBzZXQpXG5cdF9maW5hbGl6ZWQgPSB0cnVlO1xuXG4gICAgLy8gY3ljbGUgdGhyb3VnaCBlYWNoIGFwcGVuZGVyIGZvciB0aGUgbG9nZ2VyIGFuZCBhcHBlbmQgdGhlIGxvZ2dpbmcgZXZlbnRcbiAgICAoX2xvZ2dlcnNbbG9nRXZlbnQubG9nZ2VyXSB8fCBfbG9nZ2Vyc1tfTUFJTl9MT0dHRVJdKS5mb3JFYWNoKGZ1bmN0aW9uIChsb2dnZXIpIHtcbiAgICAgICAgaWYgKGxvZ2dlci5pc0FjdGl2ZShsb2dFdmVudC5sZXZlbCkpIHtcbiAgICAgICAgICAgIGxvZ2dlci5hcHBlbmQobG9nRXZlbnQpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbn1cblxuLyoqXG4gKiBIYW5kbGVzIGNyZWF0aW5nIHRoZSBsb2dnZXIgYW5kIHJldHVybmluZyBpdFxuICpcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGxvZzRqc1xuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb258c3RyaW5nPX0gY29udGV4dFxuICpcbiAqIEByZXR1cm4ge0xvZ2dlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExvZ2dlcihjb250ZXh0KSB7XG5cblx0Ly8gd2UgbmVlZCB0byBpbml0aWFsaXplIGlmIHdlIGhhdmVuJ3Rcblx0aWYgKCFfY29uZmlndXJhdGlvbikge1xuXHRcdGNvbmZpZ3VyZShfREVGQVVMVF9DT05GSUcpO1xuXHR9XG5cbiAgICAvLyBkZXRlcm1pbmUgdGhlIGNvbnRleHRcbiAgICBpZiAodHlwZW9mIGNvbnRleHQgIT09ICdzdHJpbmcnKSB7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjb250ZXh0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjb250ZXh0ID0gdXRpbGl0eS5nZXRGdW5jdGlvbk5hbWUoY29udGV4dCk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbnRleHQgPT09ICdvYmplY3QnKSB7XG5cbiAgICAgICAgICAgIGNvbnRleHQgPSB1dGlsaXR5LmdldEZ1bmN0aW9uTmFtZShjb250ZXh0LmNvbnN0cnVjdG9yKTtcblxuICAgICAgICAgICAgaWYgKGNvbnRleHQgPT09ICdPYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgY29udGV4dCA9ICdhbm9ueW1vdXMnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250ZXh0ID0gX01BSU5fTE9HR0VSO1xuICAgICAgICB9XG5cbiAgICB9XG5cblx0cmV0dXJuIG5ldyBMb2dnZXIoY29udGV4dCwge1xuXHRcdCdhcHBlbmQnIDogX2FwcGVuZFxuXHR9KTtcblxufVxuXG5cblxuLyoqXG4gKiBTZXRzIHRoZSBsb2cgbGV2ZWwgZm9yIGFsbCBhcHBlbmRlcnMgb2YgYSBsb2dnZXIsIG9yIHNwZWNpZmllZCBsb2dnZXJcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBsb2c0anNcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gbG9nTGV2ZWxcbiAqIEBwYXJhbSB7c3RyaW5nPX0gbG9nZ2VyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRMb2dMZXZlbChsb2dMZXZlbCwgbG9nZ2VyKSB7XG5cbiAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihsb2dMZXZlbCkpIHtcblxuICAgICAgICBpZiAobG9nZ2VyKSB7XG4gICAgICAgICAgICBpZiAoX2xvZ2dlcnNbbG9nZ2VyXSkge1xuICAgICAgICAgICAgICAgIF9sb2dnZXJzW2xvZ2dlcl0uc2V0TG9nTGV2ZWwobG9nTGV2ZWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIF9sb2dnZXJzKSB7XG4gICAgICAgICAgICAgICAgaWYgKF9sb2dnZXJzLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgX2xvZ2dlcnNba2V5XS5mb3JFYWNoKGZ1bmN0aW9uIChhcHBlbmRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kZXIuc2V0TG9nTGV2ZWwobG9nTGV2ZWwpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIH1cblxufVxuXG5hZGRBcHBlbmRlcihDb25zb2xlQXBwZW5kZXIpO1xuXG5leHBvcnQgeyBMb2dMZXZlbCB9O1xuZXhwb3J0IHsgTG9nQXBwZW5kZXIgfTtcbiJdfQ== \ No newline at end of file diff --git a/dist/es6/log4js2.js b/dist/es6/log4js2.js index 134d455..047fcaf 100644 --- a/dist/es6/log4js2.js +++ b/dist/es6/log4js2.js @@ -351,15 +351,15 @@ return /******/ (function(modules) { // webpackBootstrap } // determine the context - if (typeof context != 'string') { + if (typeof context !== 'string') { - if (typeof context == 'function') { + if (typeof context === 'function') { context = utility.getFunctionName(context); - } else if (typeof context == 'object') { + } else if (typeof context === 'object') { context = utility.getFunctionName(context.constructor); - if (context == 'Object') { + if (context === 'Object') { context = 'anonymous'; } } else { @@ -383,7 +383,7 @@ return /******/ (function(modules) { // webpackBootstrap */ function setLogLevel(logLevel, logger) { - if (logLevel instanceof Number) { + if (Number.isInteger(logLevel)) { if (logger) { if (_loggers[logger]) { @@ -405,7 +405,7 @@ return /******/ (function(modules) { // webpackBootstrap /*istanbul ignore next*/exports.LogLevel = _logLevel.LogLevel; /*istanbul ignore next*/exports.LogAppender = _appender.LogAppender; - //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbImNvbmZpZ3VyZSIsImFkZEFwcGVuZGVyIiwiZ2V0TG9nZ2VyIiwic2V0TG9nTGV2ZWwiLCJmb3JtYXR0ZXIiLCJ1dGlsaXR5IiwiQVBQRU5ERVIiLCJDT05GSUdfUEFSQU1TIiwiX01BSU5fTE9HR0VSIiwiX0RFRkFVTFRfQVBQRU5ERVJTIiwiSU5GTyIsIl9ERUZBVUxUX0NPTkZJRyIsIl9BUFBFTkRFUl9NRVRIT0RTIiwiX2FwcGVuZGVycyIsIl9jb25maWd1cmF0aW9uIiwiX2ZpbmFsaXplZCIsIl9sb2dnZXJzIiwiY29uZmlnIiwiY29uc29sZSIsImVycm9yIiwibGF5b3V0IiwiX2NvbmZpZ3VyZUFwcGVuZGVycyIsImFwcGVuZGVycyIsIl9jb25maWd1cmVMb2dnZXJzIiwibG9nZ2VycyIsIkFycmF5IiwiZm9yRWFjaCIsImFwcGVuZGVyIiwiRnVuY3Rpb24iLCJFcnJvciIsImxvZ2dlciIsInRhZyIsImxvZ0xldmVsIiwiRVJST1IiLCJfZ2V0QXBwZW5kZXJzRm9yTG9nZ2VyIiwiYXBwZW5kZXJMaXN0IiwiT2JqZWN0Iiwia2V5cyIsImtleSIsInByb3RvdHlwZSIsInNldExheW91dCIsInB1c2giLCJhbGxvd0FwcGVuZGVySW5qZWN0aW9uIiwiX3ZhbGlkYXRlQXBwZW5kZXIiLCJuYW1lIiwiYXBwZW5kZXJPYmoiLCJlbGVtZW50IiwidW5kZWZpbmVkIiwiX2FwcGVuZCIsImxvZ0V2ZW50IiwiaXNBY3RpdmUiLCJsZXZlbCIsImFwcGVuZCIsImNvbnRleHQiLCJnZXRGdW5jdGlvbk5hbWUiLCJjb25zdHJ1Y3RvciIsIk51bWJlciIsImhhc093blByb3BlcnR5IiwiTG9nTGV2ZWwiLCJMb2dBcHBlbmRlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7O1FBZ0ZnQkEsUyxHQUFBQSxTO2dDQXFIQUMsVyxHQUFBQSxXO2dDQStFQUMsUyxHQUFBQSxTO2dDQTJDQUMsVyxHQUFBQSxXOztBQTFTaEI7OzRCQUFZQyxTOztBQUNa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QUFTN0MsV0FBVCxDQUFxQjZCLFFBQXJCLEVBQStCRixNQUEvQixFQUF1Qzs7QUFFMUMsUUFBSUUsb0JBQW9Cd0IsTUFBeEIsRUFBZ0M7O0FBRTVCLFlBQUkxQixNQUFKLEVBQVk7QUFDUixnQkFBSWQsU0FBU2MsTUFBVCxDQUFKLEVBQXNCO0FBQ2xCZCx5QkFBU2MsTUFBVCxFQUFpQjNCLFdBQWpCLENBQTZCNkIsUUFBN0I7QUFDSDtBQUNKLFNBSkQsTUFJTztBQUNILGlCQUFLLElBQUlNLEdBQVQsSUFBZ0J0QixRQUFoQixFQUEwQjtBQUN0QixvQkFBSUEsU0FBU3lDLGNBQVQsQ0FBd0JuQixHQUF4QixDQUFKLEVBQWtDO0FBQzlCdEIsNkJBQVNzQixHQUFULEVBQWNaLE9BQWQsQ0FBc0IsVUFBVUMsUUFBVixFQUFvQjtBQUN0Q0EsaUNBQVN4QixXQUFULENBQXFCNkIsUUFBckI7QUFDSCxxQkFGRDtBQUdIO0FBQ0o7QUFDSjtBQUVKO0FBRUo7O0FBRUQvQjs7Z0NBRVN5RCxRO2dDQUNBQyxXIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBsb2c0anMgPGh0dHBzOi8vZ2l0aHViLmNvbS9hbmlnZW5lcm8vbG9nNGpzPlxuICpcbiAqIENvcHlyaWdodCAyMDE2IFJvYmluIFNjaHVsdHogPGh0dHA6Ly9hbmlnZW5lcm8uY29tPlxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlXG4gKi9cblxuLyoqXG4gKiBIb2xkcyB0aGUgZGVmaW5pdGlvbiBmb3IgdGhlIGFwcGVuZGVyIGNsb3N1cmVcbiAqXG4gKiBAdHlwZWRlZiB7eyBhcHBlbmQgOiBmdW5jdGlvbiAobnVtYmVyLCBMT0dfRVZFTlQpLCBpc0FjdGl2ZSA6IGZ1bmN0aW9uKCksXG4gKiAgICAgICAgICBzZXRMb2dMZXZlbCA6IGZ1bmN0aW9uKG51bWJlciksIHNldExheW91dCA6IGZ1bmN0aW9uKHN0cmluZykgfX1cbiAqL1xubGV0IEFQUEVOREVSO1xuXG4vKipcbiAqIEB0eXBlZGVmIHt7IGFsbG93QXBwZW5kZXJJbmplY3Rpb24gOiBib29sZWFuLCBhcHBlbmRlcnMgOiBBcnJheS48QVBQRU5ERVI+LFxuICogXHRcdFx0YXBwbGljYXRpb24gOiBPYmplY3QsIGxvZ2dlcnMgOiBBcnJheS48TG9nQXBwZW5kZXI+LCBsYXlvdXQgOiBzdHJpbmcgfX1cbiAqL1xubGV0IENPTkZJR19QQVJBTVM7XG5cbmltcG9ydCAqIGFzIGZvcm1hdHRlciBmcm9tICcuL2Zvcm1hdHRlcic7XG5pbXBvcnQgKiBhcyB1dGlsaXR5IGZyb20gJy4vdXRpbGl0eSc7XG5pbXBvcnQge0xvZ0FwcGVuZGVyfSBmcm9tICcuL2FwcGVuZGVyL2FwcGVuZGVyJztcbmltcG9ydCB7TG9nZ2VyfSBmcm9tICcuL2xvZ2dlci9sb2dnZXInO1xuaW1wb3J0IHtMb2dMZXZlbH0gZnJvbSAnLi9jb25zdC9sb2dMZXZlbCc7XG5pbXBvcnQge0NvbnNvbGVBcHBlbmRlcn0gZnJvbSAnLi9hcHBlbmRlci9jb25zb2xlQXBwZW5kZXInO1xuXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBtYWluIGxvZ2dlci4gV2UgdXNlIHRoaXMgaW4gY2FzZSBubyBsb2dnZXIgaXMgc3BlY2lmaWVkXG4gKiBAY29uc3RcbiAqL1xuY29uc3QgX01BSU5fTE9HR0VSID0gJ21haW4nO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IGFwcGVuZGVycyB0aGF0IHNob3VsZCBiZSBpbmNsdWRlZCBpZiBubyBhcHBlbmRlcnMgYXJlIHNwZWNpZmllZFxuICogQGNvbnN0XG4gKi9cbmNvbnN0IF9ERUZBVUxUX0FQUEVOREVSUyA9IFt7XG4gICAgJ2FwcGVuZGVyJyA6IENvbnNvbGVBcHBlbmRlcixcbiAgICAnbGV2ZWwnIDogTG9nTGV2ZWwuSU5GT1xufV07XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgbG9nNGpzMi4gSWYgbm8gY29uZmlndXJhdGlvbiBpcyBzcGVjaWZpZWQsIHRoZW4gdGhpc1xuICogY29uZmlndXJhdGlvbiB3aWxsIGJlIGluamVjdGVkXG4gKiBAY29uc3RcbiAqL1xuY29uc3QgX0RFRkFVTFRfQ09ORklHID0ge1xuICAgICdhbGxvd0FwcGVuZGVySW5qZWN0aW9uJyA6IHRydWUsXG4gICAgJ2FwcGVuZGVycycgOiBfREVGQVVMVF9BUFBFTkRFUlMsXG4gICAgJ2xvZ2dlcnMnIDogW3tcbiAgICAgICAgJ2xldmVsJyA6IExvZ0xldmVsLklORk9cbiAgICB9XSxcbiAgICAnbGF5b3V0JyA6ICclZCBbJXBdICVjIC0gJW0nXG59O1xuXG4vKipcbiAqIFRoZSBtZXRob2RzIHRoYXQgYW4gYXBwZW5kZXIgbXVzdCBjb250YWluXG4gKiBAY29uc3RcbiAqL1xuY29uc3QgX0FQUEVOREVSX01FVEhPRFMgPSBbJ2FwcGVuZCcsICdnZXROYW1lJywgJ2lzQWN0aXZlJywgJ3NldExvZ0xldmVsJywgJ3NldExheW91dCddO1xuXG4vKiogQHR5cGUge09iamVjdH0gKi9cbmxldCBfYXBwZW5kZXJzID0ge307XG4vKiogQHR5cGUgez9DT05GSUdfUEFSQU1TfSAqL1xubGV0IF9jb25maWd1cmF0aW9uID0gbnVsbDtcbi8qKiBAdHlwZSB7Ym9vbGVhbn0gKi9cbmxldCBfZmluYWxpemVkID0gZmFsc2U7XG4vKiogQHR5cGUge09iamVjdH0gKi9cbmxldCBfbG9nZ2VycyA9IHt9O1xuXG4vKipcbiAqIENvbmZpZ3VyZXMgdGhlIGxvZ2dlclxuICpcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGxvZzRqc1xuICpcbiAqIEBwYXJhbXMge0NPTkZJR19QQVJBTVN9IGNvbmZpZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29uZmlndXJlKGNvbmZpZykge1xuXG5cdGlmIChfZmluYWxpemVkKSB7XG5cdFx0Y29uc29sZS5lcnJvcignQ291bGQgbm90IGNvbmZpZ3VyZSAtIGFscmVhZHkgaW4gdXNlJyk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKCFfY29uZmlndXJhdGlvbikge1xuICAgICAgICBfY29uZmlndXJhdGlvbiA9IHt9O1xuICAgIH1cblxuICAgIC8vIHNldCB0aGUgZGVmYXVsdCBsYXlvdXRcbiAgICBpZiAoIWNvbmZpZy5sYXlvdXQgJiYgIV9jb25maWd1cmF0aW9uLmxheW91dCkge1xuICAgICAgICBfY29uZmlndXJhdGlvbi5sYXlvdXQgPSBfREVGQVVMVF9DT05GSUcubGF5b3V0O1xuICAgIH0gZWxzZSBpZiAoY29uZmlnLmxheW91dCkge1xuICAgICAgICBfY29uZmlndXJhdGlvbi5sYXlvdXQgPSBjb25maWcubGF5b3V0O1xuICAgIH1cblxuXHQvLyBjb25maWd1cmUgdGhlIGFwcGVuZGVyc1xuXHRfY29uZmlndXJlQXBwZW5kZXJzKGNvbmZpZy5hcHBlbmRlcnMpO1xuICAgIC8vIGNvbmZpZ3VyZSB0aGUgbG9nZ2Vyc1xuICAgIF9jb25maWd1cmVMb2dnZXJzKGNvbmZpZy5sb2dnZXJzKTtcblxufVxuXG4vKipcbiAqIENvbmZpZ3VyZXMgYXBwZW5kZXJzXG4gKlxuICogQHByaXZhdGVcbiAqIEBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7QXJyYXkuPExvZ0FwcGVuZGVyfGZ1bmN0aW9uPn0gYXBwZW5kZXJzXG4gKi9cbmxldCBfY29uZmlndXJlQXBwZW5kZXJzID0gZnVuY3Rpb24gKGFwcGVuZGVycykge1xuXG4gICAgaWYgKCEoYXBwZW5kZXJzIGluc3RhbmNlb2YgQXJyYXkpKSB7XG4gICAgICAgIGFwcGVuZGVycyA9IF9ERUZBVUxUX0FQUEVOREVSUztcbiAgICB9XG5cbiAgICBhcHBlbmRlcnMuZm9yRWFjaChhcHBlbmRlciA9PiB7XG4gICAgICAgIGlmIChhcHBlbmRlciBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICAgICAgICBhZGRBcHBlbmRlcihhcHBlbmRlcik7XG4gICAgICAgIH1cbiAgICB9KTtcblxufTtcblxuLyoqXG4gKiBDb25maWd1cmVzIHRoZSBsb2dnZXJzXG4gKlxuICogQHByaXZhdGVcbiAqIEBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD59IGxvZ2dlcnNcbiAqL1xubGV0IF9jb25maWd1cmVMb2dnZXJzID0gZnVuY3Rpb24gKGxvZ2dlcnMpIHtcblxuXHRpZiAoIShsb2dnZXJzIGluc3RhbmNlb2YgQXJyYXkpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGxvZ2dlcnMnKTtcblx0fVxuXG4gICAgbG9nZ2Vycy5mb3JFYWNoKGZ1bmN0aW9uIChsb2dnZXIpIHtcblxuICAgICAgICBpZiAoIWxvZ2dlci5sYXlvdXQgfHwgdHlwZW9mIGxvZ2dlci5sYXlvdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBsb2dnZXIubGF5b3V0ID0gX2NvbmZpZ3VyYXRpb24ubGF5b3V0O1xuICAgICAgICB9XG5cbiAgICAgICAgbG9nZ2VyLnRhZyA9IGxvZ2dlci50YWcgfHwgX01BSU5fTE9HR0VSO1xuICAgICAgICBsb2dnZXIubG9nTGV2ZWwgPSBsb2dnZXIubG9nTGV2ZWwgfHwgTG9nTGV2ZWwuRVJST1I7XG5cbiAgICAgICAgX2xvZ2dlcnNbbG9nZ2VyLnRhZ10gPSBfZ2V0QXBwZW5kZXJzRm9yTG9nZ2VyKGxvZ2dlci5sb2dMZXZlbCwgbG9nZ2VyLmxheW91dCk7XG5cbiAgICB9KTtcblxufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBhcHBlbmRlcnMgZm9yIHRoZSBsZXZlbCBhbmQgbGF5b3V0XG4gKlxuICogQHByaXZhdGVcbiAqIEBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBsb2dMZXZlbFxuICogQHBhcmFtIHtzdHJpbmd9IGxheW91dFxuICpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xubGV0IF9nZXRBcHBlbmRlcnNGb3JMb2dnZXIgPSBmdW5jdGlvbiAobG9nTGV2ZWwsIGxheW91dCkge1xuXG4gICAgbGV0IGxvZ2dlcjtcbiAgICBsZXQgYXBwZW5kZXJMaXN0ID0gW107XG5cbiAgICBPYmplY3Qua2V5cyhfYXBwZW5kZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcblxuICAgICAgICBsb2dnZXIgPSAoX2FwcGVuZGVyc1trZXldLnByb3RvdHlwZSBpbnN0YW5jZW9mIExvZ0FwcGVuZGVyKSA/IG5ldyBfYXBwZW5kZXJzW2tleV0oKSA6IF9hcHBlbmRlcnNba2V5XSgpO1xuXG4gICAgICAgIGxvZ2dlci5zZXRMb2dMZXZlbChsb2dMZXZlbCk7XG4gICAgICAgIGxvZ2dlci5zZXRMYXlvdXQobGF5b3V0KTtcblxuICAgICAgICBhcHBlbmRlckxpc3QucHVzaChsb2dnZXIpO1xuXG4gICAgfSk7XG5cblx0cmV0dXJuIGFwcGVuZGVyTGlzdDtcblxufTtcblxuLyoqXG4gKiBBZGRzIGFuIGFwcGVuZGVyIHRvIHRoZSBhcHBlbmRlciBxdWV1ZS4gSWYgdGhlIHN0YWNrIGlzIGZpbmFsaXplZCwgYW5kXG4gKiB0aGUgYWxsb3dBcHBlbmRlckluamVjdGlvbiBpcyBzZXQgdG8gZmFsc2UsIHRoZW4gdGhlIGV2ZW50IHdpbGwgbm90IGJlXG4gKiBhcHBlbmRlZFxuICpcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGxvZzRqc1xuICpcbiAqIEBwYXJhbXMge0xvZ0FwcGVuZGVyfSBhcHBlbmRlclxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkQXBwZW5kZXIoYXBwZW5kZXIpIHtcblxuXHRpZiAoX2ZpbmFsaXplZCAmJiAhX2NvbmZpZ3VyYXRpb24uYWxsb3dBcHBlbmRlckluamVjdGlvbikge1xuXHRcdGNvbnNvbGUuZXJyb3IoJ0Nhbm5vdCBhZGQgYXBwZW5kZXIgd2hlbiBjb25maWd1cmF0aW9uIGZpbmFsaXplZCcpO1xuXHRcdHJldHVybjtcblx0fVxuXG4gICAgX3ZhbGlkYXRlQXBwZW5kZXIoYXBwZW5kZXIpO1xuXG4gICAgLy8gb25seSBwdXQgdGhlIGFwcGVuZGVyIGludG8gdGhlIHNldCBpZiBpdCBkb2Vzbid0IGV4aXN0IGFscmVhZHlcbiAgICBpZiAoIV9hcHBlbmRlcnNbYXBwZW5kZXIubmFtZV0pIHtcbiAgICAgICAgX2FwcGVuZGVyc1thcHBlbmRlci5uYW1lXSA9IGFwcGVuZGVyO1xuICAgIH1cblxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGF0IHRoZSBhcHBlbmRlclxuICpcbiAqIEBwcml2YXRlXG4gKiBAZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW1zIHtBUFBFTkRFUn0gYXBwZW5kZXJcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiB0aGUgYXBwZW5kZXIgaXMgaW52YWxpZFxuICovXG5sZXQgX3ZhbGlkYXRlQXBwZW5kZXIgPSBmdW5jdGlvbiAoYXBwZW5kZXIpIHtcblxuICAgIC8vIGlmIHdlIGFyZSBydW5uaW5nIEVTNiwgd2UgY2FuIG1ha2Ugc3VyZSBpdCBleHRlbmRzIExvZ0FwcGVuZGVyXG4gICAgLy8gb3RoZXJ3aXNlLCBpdCBtdXN0IGJlIGEgZnVuY3Rpb25cbiAgICBpZiAoYXBwZW5kZXIucHJvdG90eXBlIGluc3RhbmNlb2YgTG9nQXBwZW5kZXIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoIShhcHBlbmRlciBpbnN0YW5jZW9mIEZ1bmN0aW9uKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcignSW52YWxpZCBhcHBlbmRlcjogbm90IGEgZnVuY3Rpb24gb3IgY2xhc3MgTG9nQXBwZW5kZXInKTtcblx0fVxuXG5cdC8vIGluc3RhbnRpYXRlIHRoZSBhcHBlbmRlciBmdW5jdGlvblxuXHRsZXQgYXBwZW5kZXJPYmogPSBhcHBlbmRlcigpO1xuXG4gICAgLy8gZW5zdXJlIHRoYXQgdGhlIGFwcGVuZGVyIG1ldGhvZHMgYXJlIHByZXNlbnQgKGFuZCBhcmUgZnVuY3Rpb25zKVxuICAgIF9BUFBFTkRFUl9NRVRIT0RTLmZvckVhY2goZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgICAgaWYgKGFwcGVuZGVyT2JqW2VsZW1lbnRdID09IHVuZGVmaW5lZCB8fCAhKGFwcGVuZGVyT2JqW2VsZW1lbnRdIGluc3RhbmNlb2YgRnVuY3Rpb24pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgYXBwZW5kZXI6IG1pc3NpbmcvaW52YWxpZCBtZXRob2Q6ICR7ZWxlbWVudH1gKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG59O1xuXG4vKipcbiAqIEFwcGVuZHMgdGhlIGxvZyBldmVudFxuICpcbiAqIEBwcml2YXRlXG4gKiBAZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gbG9nRXZlbnRcbiAqL1xuZnVuY3Rpb24gX2FwcGVuZChsb2dFdmVudCkge1xuXG5cdC8vIGZpbmFsaXplIHRoZSBjb25maWd1cmF0aW9uIHRvIG1ha2Ugc3VyZSBubyBvdGhlciBhcHBlbmRlciBjYW4gYmUgaW5qZWN0ZWQgKGlmIHNldClcblx0X2ZpbmFsaXplZCA9IHRydWU7XG5cbiAgICAvLyBjeWNsZSB0aHJvdWdoIGVhY2ggYXBwZW5kZXIgZm9yIHRoZSBsb2dnZXIgYW5kIGFwcGVuZCB0aGUgbG9nZ2luZyBldmVudFxuICAgIChfbG9nZ2Vyc1tsb2dFdmVudC5sb2dnZXJdIHx8IF9sb2dnZXJzW19NQUlOX0xPR0dFUl0pLmZvckVhY2goZnVuY3Rpb24gKGxvZ2dlcikge1xuICAgICAgICBpZiAobG9nZ2VyLmlzQWN0aXZlKGxvZ0V2ZW50LmxldmVsKSkge1xuICAgICAgICAgICAgbG9nZ2VyLmFwcGVuZChsb2dFdmVudCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxufVxuXG4vKipcbiAqIEhhbmRsZXMgY3JlYXRpbmcgdGhlIGxvZ2dlciBhbmQgcmV0dXJuaW5nIGl0XG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgbG9nNGpzXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbnxzdHJpbmc9fSBjb250ZXh0XG4gKlxuICogQHJldHVybiB7TG9nZ2VyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TG9nZ2VyKGNvbnRleHQpIHtcblxuXHQvLyB3ZSBuZWVkIHRvIGluaXRpYWxpemUgaWYgd2UgaGF2ZW4ndFxuXHRpZiAoIV9jb25maWd1cmF0aW9uKSB7XG5cdFx0Y29uZmlndXJlKF9ERUZBVUxUX0NPTkZJRyk7XG5cdH1cblxuICAgIC8vIGRldGVybWluZSB0aGUgY29udGV4dFxuICAgIGlmICh0eXBlb2YgY29udGV4dCAhPSAnc3RyaW5nJykge1xuXG4gICAgICAgIGlmICh0eXBlb2YgY29udGV4dCA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjb250ZXh0ID0gdXRpbGl0eS5nZXRGdW5jdGlvbk5hbWUoY29udGV4dCk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbnRleHQgPT0gJ29iamVjdCcpIHtcblxuICAgICAgICAgICAgY29udGV4dCA9IHV0aWxpdHkuZ2V0RnVuY3Rpb25OYW1lKGNvbnRleHQuY29uc3RydWN0b3IpO1xuXG4gICAgICAgICAgICBpZiAoY29udGV4dCA9PSAnT2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIGNvbnRleHQgPSAnYW5vbnltb3VzJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29udGV4dCA9IF9NQUlOX0xPR0dFUjtcbiAgICAgICAgfVxuXG4gICAgfVxuXG5cdHJldHVybiBuZXcgTG9nZ2VyKGNvbnRleHQsIHtcblx0XHQnYXBwZW5kJyA6IF9hcHBlbmRcblx0fSk7XG5cbn1cblxuXG5cbi8qKlxuICogU2V0cyB0aGUgbG9nIGxldmVsIGZvciBhbGwgYXBwZW5kZXJzIG9mIGEgbG9nZ2VyLCBvciBzcGVjaWZpZWQgbG9nZ2VyXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgbG9nNGpzXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGxvZ0xldmVsXG4gKiBAcGFyYW0ge3N0cmluZz19IGxvZ2dlclxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TG9nTGV2ZWwobG9nTGV2ZWwsIGxvZ2dlcikge1xuXG4gICAgaWYgKGxvZ0xldmVsIGluc3RhbmNlb2YgTnVtYmVyKSB7XG5cbiAgICAgICAgaWYgKGxvZ2dlcikge1xuICAgICAgICAgICAgaWYgKF9sb2dnZXJzW2xvZ2dlcl0pIHtcbiAgICAgICAgICAgICAgICBfbG9nZ2Vyc1tsb2dnZXJdLnNldExvZ0xldmVsKGxvZ0xldmVsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBfbG9nZ2Vycykge1xuICAgICAgICAgICAgICAgIGlmIChfbG9nZ2Vycy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIF9sb2dnZXJzW2tleV0uZm9yRWFjaChmdW5jdGlvbiAoYXBwZW5kZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZGVyLnNldExvZ0xldmVsKGxvZ0xldmVsKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9XG5cbn1cblxuYWRkQXBwZW5kZXIoQ29uc29sZUFwcGVuZGVyKTtcblxuZXhwb3J0IHsgTG9nTGV2ZWwgfTtcbmV4cG9ydCB7IExvZ0FwcGVuZGVyIH07XG4iXX0= + //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbImNvbmZpZ3VyZSIsImFkZEFwcGVuZGVyIiwiZ2V0TG9nZ2VyIiwic2V0TG9nTGV2ZWwiLCJmb3JtYXR0ZXIiLCJ1dGlsaXR5IiwiQVBQRU5ERVIiLCJDT05GSUdfUEFSQU1TIiwiX01BSU5fTE9HR0VSIiwiX0RFRkFVTFRfQVBQRU5ERVJTIiwiSU5GTyIsIl9ERUZBVUxUX0NPTkZJRyIsIl9BUFBFTkRFUl9NRVRIT0RTIiwiX2FwcGVuZGVycyIsIl9jb25maWd1cmF0aW9uIiwiX2ZpbmFsaXplZCIsIl9sb2dnZXJzIiwiY29uZmlnIiwiY29uc29sZSIsImVycm9yIiwibGF5b3V0IiwiX2NvbmZpZ3VyZUFwcGVuZGVycyIsImFwcGVuZGVycyIsIl9jb25maWd1cmVMb2dnZXJzIiwibG9nZ2VycyIsIkFycmF5IiwiZm9yRWFjaCIsImFwcGVuZGVyIiwiRnVuY3Rpb24iLCJFcnJvciIsImxvZ2dlciIsInRhZyIsImxvZ0xldmVsIiwiRVJST1IiLCJfZ2V0QXBwZW5kZXJzRm9yTG9nZ2VyIiwiYXBwZW5kZXJMaXN0IiwiT2JqZWN0Iiwia2V5cyIsImtleSIsInByb3RvdHlwZSIsInNldExheW91dCIsInB1c2giLCJhbGxvd0FwcGVuZGVySW5qZWN0aW9uIiwiX3ZhbGlkYXRlQXBwZW5kZXIiLCJuYW1lIiwiYXBwZW5kZXJPYmoiLCJlbGVtZW50IiwidW5kZWZpbmVkIiwiX2FwcGVuZCIsImxvZ0V2ZW50IiwiaXNBY3RpdmUiLCJsZXZlbCIsImFwcGVuZCIsImNvbnRleHQiLCJnZXRGdW5jdGlvbk5hbWUiLCJjb25zdHJ1Y3RvciIsIk51bWJlciIsImlzSW50ZWdlciIsImhhc093blByb3BlcnR5IiwiTG9nTGV2ZWwiLCJMb2dBcHBlbmRlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7O1FBZ0ZnQkEsUyxHQUFBQSxTO2dDQXFIQUMsVyxHQUFBQSxXO2dDQStFQUMsUyxHQUFBQSxTO2dDQTJDQUMsVyxHQUFBQSxXOztBQTFTaEI7OzRC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Ozs7Ozs7O0FBU08sU0FBUzdDLFdBQVQsQ0FBcUI2QixRQUFyQixFQUErQkYsTUFBL0IsRUFBdUM7O0FBRTFDLFFBQUkwQixPQUFPQyxTQUFQLENBQWlCekIsUUFBakIsQ0FBSixFQUFnQzs7QUFFNUIsWUFBSUYsTUFBSixFQUFZO0FBQ1IsZ0JBQUlkLFNBQVNjLE1BQVQsQ0FBSixFQUFzQjtBQUNsQmQseUJBQVNjLE1BQVQsRUFBaUIzQixXQUFqQixDQUE2QjZCLFFBQTdCO0FBQ0g7QUFDSixTQUpELE1BSU87QUFDSCxpQkFBSyxJQUFJTSxHQUFULElBQWdCdEIsUUFBaEIsRUFBMEI7QUFDdEIsb0JBQUlBLFNBQVMwQyxjQUFULENBQXdCcEIsR0FBeEIsQ0FBSixFQUFrQztBQUM5QnRCLDZCQUFTc0IsR0FBVCxFQUFjWixPQUFkLENBQXNCLFVBQVVDLFFBQVYsRUFBb0I7QUFDdENBLGlDQUFTeEIsV0FBVCxDQUFxQjZCLFFBQXJCO0FBQ0gscUJBRkQ7QUFHSDtBQUNKO0FBQ0o7QUFFSjtBQUVKOztBQUVEL0I7O2dDQUVTMEQsUTtnQ0FDQUMsVyIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogbG9nNGpzIDxodHRwczovL2dpdGh1Yi5jb20vYW5pZ2VuZXJvL2xvZzRqcz5cbiAqXG4gKiBDb3B5cmlnaHQgMjAxNiBSb2JpbiBTY2h1bHR6IDxodHRwOi8vYW5pZ2VuZXJvLmNvbT5cbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZVxuICovXG5cbi8qKlxuICogSG9sZHMgdGhlIGRlZmluaXRpb24gZm9yIHRoZSBhcHBlbmRlciBjbG9zdXJlXG4gKlxuICogQHR5cGVkZWYge3sgYXBwZW5kIDogZnVuY3Rpb24gKG51bWJlciwgTE9HX0VWRU5UKSwgaXNBY3RpdmUgOiBmdW5jdGlvbigpLFxuICogICAgICAgICAgc2V0TG9nTGV2ZWwgOiBmdW5jdGlvbihudW1iZXIpLCBzZXRMYXlvdXQgOiBmdW5jdGlvbihzdHJpbmcpIH19XG4gKi9cbmxldCBBUFBFTkRFUjtcblxuLyoqXG4gKiBAdHlwZWRlZiB7eyBhbGxvd0FwcGVuZGVySW5qZWN0aW9uIDogYm9vbGVhbiwgYXBwZW5kZXJzIDogQXJyYXkuPEFQUEVOREVSPixcbiAqIFx0XHRcdGFwcGxpY2F0aW9uIDogT2JqZWN0LCBsb2dnZXJzIDogQXJyYXkuPExvZ0FwcGVuZGVyPiwgbGF5b3V0IDogc3RyaW5nIH19XG4gKi9cbmxldCBDT05GSUdfUEFSQU1TO1xuXG5pbXBvcnQgKiBhcyBmb3JtYXR0ZXIgZnJvbSAnLi9mb3JtYXR0ZXInO1xuaW1wb3J0ICogYXMgdXRpbGl0eSBmcm9tICcuL3V0aWxpdHknO1xuaW1wb3J0IHtMb2dBcHBlbmRlcn0gZnJvbSAnLi9hcHBlbmRlci9hcHBlbmRlcic7XG5pbXBvcnQge0xvZ2dlcn0gZnJvbSAnLi9sb2dnZXIvbG9nZ2VyJztcbmltcG9ydCB7TG9nTGV2ZWx9IGZyb20gJy4vY29uc3QvbG9nTGV2ZWwnO1xuaW1wb3J0IHtDb25zb2xlQXBwZW5kZXJ9IGZyb20gJy4vYXBwZW5kZXIvY29uc29sZUFwcGVuZGVyJztcblxuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgbWFpbiBsb2dnZXIuIFdlIHVzZSB0aGlzIGluIGNhc2Ugbm8gbG9nZ2VyIGlzIHNwZWNpZmllZFxuICogQGNvbnN0XG4gKi9cbmNvbnN0IF9NQUlOX0xPR0dFUiA9ICdtYWluJztcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBhcHBlbmRlcnMgdGhhdCBzaG91bGQgYmUgaW5jbHVkZWQgaWYgbm8gYXBwZW5kZXJzIGFyZSBzcGVjaWZpZWRcbiAqIEBjb25zdFxuICovXG5jb25zdCBfREVGQVVMVF9BUFBFTkRFUlMgPSBbe1xuICAgICdhcHBlbmRlcicgOiBDb25zb2xlQXBwZW5kZXIsXG4gICAgJ2xldmVsJyA6IExvZ0xldmVsLklORk9cbn1dO1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yIGxvZzRqczIuIElmIG5vIGNvbmZpZ3VyYXRpb24gaXMgc3BlY2lmaWVkLCB0aGVuIHRoaXNcbiAqIGNvbmZpZ3VyYXRpb24gd2lsbCBiZSBpbmplY3RlZFxuICogQGNvbnN0XG4gKi9cbmNvbnN0IF9ERUZBVUxUX0NPTkZJRyA9IHtcbiAgICAnYWxsb3dBcHBlbmRlckluamVjdGlvbicgOiB0cnVlLFxuICAgICdhcHBlbmRlcnMnIDogX0RFRkFVTFRfQVBQRU5ERVJTLFxuICAgICdsb2dnZXJzJyA6IFt7XG4gICAgICAgICdsZXZlbCcgOiBMb2dMZXZlbC5JTkZPXG4gICAgfV0sXG4gICAgJ2xheW91dCcgOiAnJWQgWyVwXSAlYyAtICVtJ1xufTtcblxuLyoqXG4gKiBUaGUgbWV0aG9kcyB0aGF0IGFuIGFwcGVuZGVyIG11c3QgY29udGFpblxuICogQGNvbnN0XG4gKi9cbmNvbnN0IF9BUFBFTkRFUl9NRVRIT0RTID0gWydhcHBlbmQnLCAnZ2V0TmFtZScsICdpc0FjdGl2ZScsICdzZXRMb2dMZXZlbCcsICdzZXRMYXlvdXQnXTtcblxuLyoqIEB0eXBlIHtPYmplY3R9ICovXG5sZXQgX2FwcGVuZGVycyA9IHt9O1xuLyoqIEB0eXBlIHs/Q09ORklHX1BBUkFNU30gKi9cbmxldCBfY29uZmlndXJhdGlvbiA9IG51bGw7XG4vKiogQHR5cGUge2Jvb2xlYW59ICovXG5sZXQgX2ZpbmFsaXplZCA9IGZhbHNlO1xuLyoqIEB0eXBlIHtPYmplY3R9ICovXG5sZXQgX2xvZ2dlcnMgPSB7fTtcblxuLyoqXG4gKiBDb25maWd1cmVzIHRoZSBsb2dnZXJcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBsb2c0anNcbiAqXG4gKiBAcGFyYW1zIHtDT05GSUdfUEFSQU1TfSBjb25maWdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbmZpZ3VyZShjb25maWcpIHtcblxuXHRpZiAoX2ZpbmFsaXplZCkge1xuXHRcdGNvbnNvbGUuZXJyb3IoJ0NvdWxkIG5vdCBjb25maWd1cmUgLSBhbHJlYWR5IGluIHVzZScpO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmICghX2NvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgX2NvbmZpZ3VyYXRpb24gPSB7fTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIGRlZmF1bHQgbGF5b3V0XG4gICAgaWYgKCFjb25maWcubGF5b3V0ICYmICFfY29uZmlndXJhdGlvbi5sYXlvdXQpIHtcbiAgICAgICAgX2NvbmZpZ3VyYXRpb24ubGF5b3V0ID0gX0RFRkFVTFRfQ09ORklHLmxheW91dDtcbiAgICB9IGVsc2UgaWYgKGNvbmZpZy5sYXlvdXQpIHtcbiAgICAgICAgX2NvbmZpZ3VyYXRpb24ubGF5b3V0ID0gY29uZmlnLmxheW91dDtcbiAgICB9XG5cblx0Ly8gY29uZmlndXJlIHRoZSBhcHBlbmRlcnNcblx0X2NvbmZpZ3VyZUFwcGVuZGVycyhjb25maWcuYXBwZW5kZXJzKTtcbiAgICAvLyBjb25maWd1cmUgdGhlIGxvZ2dlcnNcbiAgICBfY29uZmlndXJlTG9nZ2Vycyhjb25maWcubG9nZ2Vycyk7XG5cbn1cblxuLyoqXG4gKiBDb25maWd1cmVzIGFwcGVuZGVyc1xuICpcbiAqIEBwcml2YXRlXG4gKiBAZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge0FycmF5LjxMb2dBcHBlbmRlcnxmdW5jdGlvbj59IGFwcGVuZGVyc1xuICovXG5sZXQgX2NvbmZpZ3VyZUFwcGVuZGVycyA9IGZ1bmN0aW9uIChhcHBlbmRlcnMpIHtcblxuICAgIGlmICghKGFwcGVuZGVycyBpbnN0YW5jZW9mIEFycmF5KSkge1xuICAgICAgICBhcHBlbmRlcnMgPSBfREVGQVVMVF9BUFBFTkRFUlM7XG4gICAgfVxuXG4gICAgYXBwZW5kZXJzLmZvckVhY2goYXBwZW5kZXIgPT4ge1xuICAgICAgICBpZiAoYXBwZW5kZXIgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICAgICAgYWRkQXBwZW5kZXIoYXBwZW5kZXIpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbn07XG5cbi8qKlxuICogQ29uZmlndXJlcyB0aGUgbG9nZ2Vyc1xuICpcbiAqIEBwcml2YXRlXG4gKiBAZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+fSBsb2dnZXJzXG4gKi9cbmxldCBfY29uZmlndXJlTG9nZ2VycyA9IGZ1bmN0aW9uIChsb2dnZXJzKSB7XG5cblx0aWYgKCEobG9nZ2VycyBpbnN0YW5jZW9mIEFycmF5KSkge1xuXHRcdHRocm93IG5ldyBFcnJvcignSW52YWxpZCBsb2dnZXJzJyk7XG5cdH1cblxuICAgIGxvZ2dlcnMuZm9yRWFjaChmdW5jdGlvbiAobG9nZ2VyKSB7XG5cbiAgICAgICAgaWYgKCFsb2dnZXIubGF5b3V0IHx8IHR5cGVvZiBsb2dnZXIubGF5b3V0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgbG9nZ2VyLmxheW91dCA9IF9jb25maWd1cmF0aW9uLmxheW91dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxvZ2dlci50YWcgPSBsb2dnZXIudGFnIHx8IF9NQUlOX0xPR0dFUjtcbiAgICAgICAgbG9nZ2VyLmxvZ0xldmVsID0gbG9nZ2VyLmxvZ0xldmVsIHx8IExvZ0xldmVsLkVSUk9SO1xuXG4gICAgICAgIF9sb2dnZXJzW2xvZ2dlci50YWddID0gX2dldEFwcGVuZGVyc0ZvckxvZ2dlcihsb2dnZXIubG9nTGV2ZWwsIGxvZ2dlci5sYXlvdXQpO1xuXG4gICAgfSk7XG5cbn07XG5cbi8qKlxuICogR2V0cyB0aGUgYXBwZW5kZXJzIGZvciB0aGUgbGV2ZWwgYW5kIGxheW91dFxuICpcbiAqIEBwcml2YXRlXG4gKiBAZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gbG9nTGV2ZWxcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYXlvdXRcbiAqXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbmxldCBfZ2V0QXBwZW5kZXJzRm9yTG9nZ2VyID0gZnVuY3Rpb24gKGxvZ0xldmVsLCBsYXlvdXQpIHtcblxuICAgIGxldCBsb2dnZXI7XG4gICAgbGV0IGFwcGVuZGVyTGlzdCA9IFtdO1xuXG4gICAgT2JqZWN0LmtleXMoX2FwcGVuZGVycykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG5cbiAgICAgICAgbG9nZ2VyID0gKF9hcHBlbmRlcnNba2V5XS5wcm90b3R5cGUgaW5zdGFuY2VvZiBMb2dBcHBlbmRlcikgPyBuZXcgX2FwcGVuZGVyc1trZXldKCkgOiBfYXBwZW5kZXJzW2tleV0oKTtcblxuICAgICAgICBsb2dnZXIuc2V0TG9nTGV2ZWwobG9nTGV2ZWwpO1xuICAgICAgICBsb2dnZXIuc2V0TGF5b3V0KGxheW91dCk7XG5cbiAgICAgICAgYXBwZW5kZXJMaXN0LnB1c2gobG9nZ2VyKTtcblxuICAgIH0pO1xuXG5cdHJldHVybiBhcHBlbmRlckxpc3Q7XG5cbn07XG5cbi8qKlxuICogQWRkcyBhbiBhcHBlbmRlciB0byB0aGUgYXBwZW5kZXIgcXVldWUuIElmIHRoZSBzdGFjayBpcyBmaW5hbGl6ZWQsIGFuZFxuICogdGhlIGFsbG93QXBwZW5kZXJJbmplY3Rpb24gaXMgc2V0IHRvIGZhbHNlLCB0aGVuIHRoZSBldmVudCB3aWxsIG5vdCBiZVxuICogYXBwZW5kZWRcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBsb2c0anNcbiAqXG4gKiBAcGFyYW1zIHtMb2dBcHBlbmRlcn0gYXBwZW5kZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZEFwcGVuZGVyKGFwcGVuZGVyKSB7XG5cblx0aWYgKF9maW5hbGl6ZWQgJiYgIV9jb25maWd1cmF0aW9uLmFsbG93QXBwZW5kZXJJbmplY3Rpb24pIHtcblx0XHRjb25zb2xlLmVycm9yKCdDYW5ub3QgYWRkIGFwcGVuZGVyIHdoZW4gY29uZmlndXJhdGlvbiBmaW5hbGl6ZWQnKTtcblx0XHRyZXR1cm47XG5cdH1cblxuICAgIF92YWxpZGF0ZUFwcGVuZGVyKGFwcGVuZGVyKTtcblxuICAgIC8vIG9ubHkgcHV0IHRoZSBhcHBlbmRlciBpbnRvIHRoZSBzZXQgaWYgaXQgZG9lc24ndCBleGlzdCBhbHJlYWR5XG4gICAgaWYgKCFfYXBwZW5kZXJzW2FwcGVuZGVyLm5hbWVdKSB7XG4gICAgICAgIF9hcHBlbmRlcnNbYXBwZW5kZXIubmFtZV0gPSBhcHBlbmRlcjtcbiAgICB9XG5cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhhdCB0aGUgYXBwZW5kZXJcbiAqXG4gKiBAcHJpdmF0ZVxuICogQGZ1bmN0aW9uXG4gKlxuICogQHBhcmFtcyB7QVBQRU5ERVJ9IGFwcGVuZGVyXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlIGFwcGVuZGVyIGlzIGludmFsaWRcbiAqL1xubGV0IF92YWxpZGF0ZUFwcGVuZGVyID0gZnVuY3Rpb24gKGFwcGVuZGVyKSB7XG5cbiAgICAvLyBpZiB3ZSBhcmUgcnVubmluZyBFUzYsIHdlIGNhbiBtYWtlIHN1cmUgaXQgZXh0ZW5kcyBMb2dBcHBlbmRlclxuICAgIC8vIG90aGVyd2lzZSwgaXQgbXVzdCBiZSBhIGZ1bmN0aW9uXG4gICAgaWYgKGFwcGVuZGVyLnByb3RvdHlwZSBpbnN0YW5jZW9mIExvZ0FwcGVuZGVyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKCEoYXBwZW5kZXIgaW5zdGFuY2VvZiBGdW5jdGlvbikpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXBwZW5kZXI6IG5vdCBhIGZ1bmN0aW9uIG9yIGNsYXNzIExvZ0FwcGVuZGVyJyk7XG5cdH1cblxuXHQvLyBpbnN0YW50aWF0ZSB0aGUgYXBwZW5kZXIgZnVuY3Rpb25cblx0bGV0IGFwcGVuZGVyT2JqID0gYXBwZW5kZXIoKTtcblxuICAgIC8vIGVuc3VyZSB0aGF0IHRoZSBhcHBlbmRlciBtZXRob2RzIGFyZSBwcmVzZW50IChhbmQgYXJlIGZ1bmN0aW9ucylcbiAgICBfQVBQRU5ERVJfTUVUSE9EUy5mb3JFYWNoKGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgIGlmIChhcHBlbmRlck9ialtlbGVtZW50XSA9PSB1bmRlZmluZWQgfHwgIShhcHBlbmRlck9ialtlbGVtZW50XSBpbnN0YW5jZW9mIEZ1bmN0aW9uKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGFwcGVuZGVyOiBtaXNzaW5nL2ludmFsaWQgbWV0aG9kOiAke2VsZW1lbnR9YCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxufTtcblxuLyoqXG4gKiBBcHBlbmRzIHRoZSBsb2cgZXZlbnRcbiAqXG4gKiBAcHJpdmF0ZVxuICogQGZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGxvZ0V2ZW50XG4gKi9cbmZ1bmN0aW9uIF9hcHBlbmQobG9nRXZlbnQpIHtcblxuXHQvLyBmaW5hbGl6ZSB0aGUgY29uZmlndXJhdGlvbiB0byBtYWtlIHN1cmUgbm8gb3RoZXIgYXBwZW5kZXIgY2FuIGJlIGluamVjdGVkIChpZiBzZXQpXG5cdF9maW5hbGl6ZWQgPSB0cnVlO1xuXG4gICAgLy8gY3ljbGUgdGhyb3VnaCBlYWNoIGFwcGVuZGVyIGZvciB0aGUgbG9nZ2VyIGFuZCBhcHBlbmQgdGhlIGxvZ2dpbmcgZXZlbnRcbiAgICAoX2xvZ2dlcnNbbG9nRXZlbnQubG9nZ2VyXSB8fCBfbG9nZ2Vyc1tfTUFJTl9MT0dHRVJdKS5mb3JFYWNoKGZ1bmN0aW9uIChsb2dnZXIpIHtcbiAgICAgICAgaWYgKGxvZ2dlci5pc0FjdGl2ZShsb2dFdmVudC5sZXZlbCkpIHtcbiAgICAgICAgICAgIGxvZ2dlci5hcHBlbmQobG9nRXZlbnQpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbn1cblxuLyoqXG4gKiBIYW5kbGVzIGNyZWF0aW5nIHRoZSBsb2dnZXIgYW5kIHJldHVybmluZyBpdFxuICpcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGxvZzRqc1xuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb258c3RyaW5nPX0gY29udGV4dFxuICpcbiAqIEByZXR1cm4ge0xvZ2dlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExvZ2dlcihjb250ZXh0KSB7XG5cblx0Ly8gd2UgbmVlZCB0byBpbml0aWFsaXplIGlmIHdlIGhhdmVuJ3Rcblx0aWYgKCFfY29uZmlndXJhdGlvbikge1xuXHRcdGNvbmZpZ3VyZShfREVGQVVMVF9DT05GSUcpO1xuXHR9XG5cbiAgICAvLyBkZXRlcm1pbmUgdGhlIGNvbnRleHRcbiAgICBpZiAodHlwZW9mIGNvbnRleHQgIT09ICdzdHJpbmcnKSB7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjb250ZXh0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjb250ZXh0ID0gdXRpbGl0eS5nZXRGdW5jdGlvbk5hbWUoY29udGV4dCk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbnRleHQgPT09ICdvYmplY3QnKSB7XG5cbiAgICAgICAgICAgIGNvbnRleHQgPSB1dGlsaXR5LmdldEZ1bmN0aW9uTmFtZShjb250ZXh0LmNvbnN0cnVjdG9yKTtcblxuICAgICAgICAgICAgaWYgKGNvbnRleHQgPT09ICdPYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgY29udGV4dCA9ICdhbm9ueW1vdXMnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250ZXh0ID0gX01BSU5fTE9HR0VSO1xuICAgICAgICB9XG5cbiAgICB9XG5cblx0cmV0dXJuIG5ldyBMb2dnZXIoY29udGV4dCwge1xuXHRcdCdhcHBlbmQnIDogX2FwcGVuZFxuXHR9KTtcblxufVxuXG5cblxuLyoqXG4gKiBTZXRzIHRoZSBsb2cgbGV2ZWwgZm9yIGFsbCBhcHBlbmRlcnMgb2YgYSBsb2dnZXIsIG9yIHNwZWNpZmllZCBsb2dnZXJcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBsb2c0anNcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gbG9nTGV2ZWxcbiAqIEBwYXJhbSB7c3RyaW5nPX0gbG9nZ2VyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRMb2dMZXZlbChsb2dMZXZlbCwgbG9nZ2VyKSB7XG5cbiAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihsb2dMZXZlbCkpIHtcblxuICAgICAgICBpZiAobG9nZ2VyKSB7XG4gICAgICAgICAgICBpZiAoX2xvZ2dlcnNbbG9nZ2VyXSkge1xuICAgICAgICAgICAgICAgIF9sb2dnZXJzW2xvZ2dlcl0uc2V0TG9nTGV2ZWwobG9nTGV2ZWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIF9sb2dnZXJzKSB7XG4gICAgICAgICAgICAgICAgaWYgKF9sb2dnZXJzLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgX2xvZ2dlcnNba2V5XS5mb3JFYWNoKGZ1bmN0aW9uIChhcHBlbmRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kZXIuc2V0TG9nTGV2ZWwobG9nTGV2ZWwpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIH1cblxufVxuXG5hZGRBcHBlbmRlcihDb25zb2xlQXBwZW5kZXIpO1xuXG5leHBvcnQgeyBMb2dMZXZlbCB9O1xuZXhwb3J0IHsgTG9nQXBwZW5kZXIgfTtcbiJdfQ== /***/ }), /* 1 */ @@ -530,6 +530,23 @@ return /******/ (function(modules) { // webpackBootstrap return `${logEvent.lineNumber}`; }; + /** + * @function + * @memberOf formatter + * + * @param {LOG_EVENT} logEvent + * + * @return {string} + */ + let _formatColumn = function (logEvent) { + + if (!logEvent.column) { + _getFileDetails(logEvent); + } + + return `${logEvent.column}`; + }; + /** * @function * @memberOf formatter @@ -652,6 +669,7 @@ return /******/ (function(modules) { // webpackBootstrap 'F|file': _formatFile, 'K|map|MAP': _formatMapMessage, 'L|line': _formatLineNumber, + 'column': _formatColumn, 'm|msg|message': _formatLogMessage, 'M|method': _formatMethodName, 'n': _formatLineSeparator, @@ -868,7 +886,10 @@ return /******/ (function(modules) { // webpackBootstrap if (true) { let path = __webpack_require__(5); let appDir = path.dirname(__webpack_require__.c[0].filename); - logEvent.filename = fileParts.join(':').replace(appDir, '').replace(/(\\|\/)/, ''); + if (!fileParts[0].startsWith(appDir)) { + appDir = ''; + } + logEvent.filename = fileParts.join(':').replace(appDir, '').replace(/^(\\|\/)/, ''); } else { logEvent.filename = fileParts.join(':'); } @@ -878,6 +899,7 @@ return /******/ (function(modules) { // webpackBootstrap logEvent.filename = 'anonymous'; logEvent.lineNumber = '?'; } + logEvent.file = logEvent.filename; }; /** @@ -904,7 +926,7 @@ return /******/ (function(modules) { // webpackBootstrap function format(layout, logEvent) { return _formatLogEvent(_getCompiledLayout(layout), logEvent); } - //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZvcm1hdHRlci5qcyJdLCJuYW1lcyI6WyJwcmVDb21waWxlIiwiZm9ybWF0IiwidXRpbGl0eSIsIl9DT01NQU5EX1JFR0VYIiwiX2NvbXBpbGVkTGF5b3V0cyIsIl9mb3JtYXRMb2dnZXIiLCJsb2dFdmVudCIsImxvZ2dlciIsIl9mb3JtYXREYXRlIiwicGFyYW1zIiwiZGF0ZSIsIl9mb3JtYXRFeGNlcHRpb24iLCJtZXNzYWdlIiwiZXJyb3IiLCJzdGFjayIsInVuZGVmaW5lZCIsInN0YWNrcyIsInNwbGl0IiwiZm9yRWFjaCIsIm5hbWUiLCJfZm9ybWF0RmlsZSIsImZpbGUiLCJfZ2V0RmlsZURldGFpbHMiLCJfZm9ybWF0TGluZU51bWJlciIsImxpbmVOdW1iZXIiLCJfZm9ybWF0TWFwTWVzc2FnZSIsInByb3BlcnRpZXMiLCJrZXkiLCJwdXNoIiwiam9pbiIsIl9mb3JtYXRMb2dNZXNzYWdlIiwiX2Zvcm1hdE1ldGhvZE5hbWUiLCJnZXRGdW5jdGlvbk5hbWUiLCJtZXRob2QiLCJfZm9ybWF0TGluZVNlcGFyYXRvciIsIl9mb3JtYXRMZXZlbCIsImxldmVsIiwiRkFUQUwiLCJFUlJPUiIsIldBUk4iLCJJTkZPIiwiREVCVUciLCJUUkFDRSIsIl9mb3JtYXRSZWxhdGl2ZSIsInJlbGF0aXZlIiwiX2Zvcm1hdFNlcXVlbmNlTnVtYmVyIiwic2VxdWVuY2UiLCJfZm9ybWF0dGVycyIsIl9nZXRDb21waWxlZExheW91dCIsImxheW91dCIsIl9jb21waWxlTGF5b3V0IiwiaW5kZXgiLCJpbmRleE9mIiwiY3VycmVudEZvcm1hdFN0cmluZyIsImZvcm1hdEFycmF5Iiwic3Vic3RyaW5nIiwic3RhcnRJbmRleCIsImVuZEluZGV4IiwiX2dldEZvcm1hdHRlck9iamVjdCIsImZvcm1hdFN0cmluZyIsInJlc3VsdCIsImV4ZWMiLCJsZW5ndGgiLCJmb3JtYXR0ZXIiLCJfZ2V0Rm9ybWF0dGVyRnVuY3Rpb24iLCJfZ2V0TGF5b3V0VGFnUGFyYW1zIiwiYWZ0ZXIiLCJsYXN0SW5kZXhPZiIsImNvbW1hbmQiLCJyZWdleCIsImhhc093blByb3BlcnR5IiwiUmVnRXhwIiwibWF0Y2giLCJpIiwiX2Zvcm1hdExvZ0V2ZW50IiwicmVzcG9uc2UiLCJjb3VudCIsIk9iamVjdCIsInRyaW0iLCJsb2dFcnJvclN0YWNrIiwicGFydHMiLCJyZXBsYWNlIiwibG9jYXRpb24iLCJob3N0IiwiZmlsZVBhcnRzIiwiY29sdW1uIiwicG9wIiwiZGVmaW5lIiwicGF0aCIsInJlcXVpcmUiLCJhcHBEaXIiLCJkaXJuYW1lIiwibWFpbiIsImZpbGVuYW1lIl0sIm1hcHBpbmdzIjoiOzs7OztRQWllZ0JBLFUsR0FBQUEsVTtnQ0FhQUMsTSxHQUFBQSxNOztBQXZlaEI7O0FBQ0E7OzRCQUFZQyxPOztBQUNaOzs7O0FBRUE7QUFDQSxNQUFNQyxpQkFBaUIsc0JBQXZCOztBQUVBO0FBZEE7Ozs7Ozs7QUFlQSxJQUFJQyxtQkFBbUIsRUFBdkI7O0FBRUE7Ozs7Ozs7O0FBUUEsSUFBSUMsZ0JBQWdCLFVBQVVDLFFBQVYsRUFBb0I7QUFDdkMsU0FBT0EsU0FBU0MsTUFBaEI7QUFDQSxDQUZEOztBQUlBOzs7Ozs7Ozs7QUFTQSxJQUFJQyxjQUFjLFVBQVVGLFFBQVYsRUFBb0JHLE1BQXBCLEVBQTRCO0FBQzdDLFNBQU8sd0RBQVdILFNBQVNJLElBQXBCLEVBQTBCRCxPQUFPLENBQVAsQ0FBMUI7QUFBUDtBQUNBLENBRkQ7O0FBSUE7Ozs7Ozs7O0FBUUEsSUFBSUUsbUJBQW1CLFVBQVVMLFFBQVYsRUFBb0I7O0FBRXZDLE1BQUlNLFVBQVUsRUFBZDs7QUFFQSxNQUFJTixTQUFTTyxLQUFULElBQWtCLElBQXRCLEVBQTRCOztBQUU5QixRQUFJUCxTQUFTTyxLQUFULENBQWVDLEtBQWYsSUFBd0JDLFNBQTVCLEVBQXVDO0FBQ3RDLFVBQUlDLFNBQVNWLFNBQVNPLEtBQVQsQ0FBZUMsS0FBZixDQUFxQkcsS0FBckIsQ0FBMkIsS0FBM0IsQ0FBYjtBQUNTRCxhQUFPRSxPQUFQLENBQWUsVUFBVUosS0FB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QUFLRyxPQUFMLENBQWFGLFFBQVFHLElBQVIsQ0FBYUMsUUFBMUIsQ0FBYjtBQUNBdkYsZUFBU3VGLFFBQVQsR0FBb0JULFVBQVV2RCxJQUFWLENBQWUsR0FBZixFQUFvQm9ELE9BQXBCLENBQTRCUyxNQUE1QixFQUFvQyxFQUFwQyxFQUF3Q1QsT0FBeEMsQ0FBZ0QsU0FBaEQsRUFBMkQsRUFBM0QsQ0FBcEI7QUFDQSxLQUpELE1BSU87QUFDTjNFLGVBQVN1RixRQUFULEdBQW9CVCxVQUFVdkQsSUFBVixDQUFlLEdBQWYsQ0FBcEI7QUFDQTtBQUVELEdBckJELE1BcUJPOztBQUVOdkIsYUFBUytFLE1BQVQsR0FBa0IsR0FBbEI7QUFDQS9FLGFBQVN1RixRQUFULEdBQW9CLFdBQXBCO0FBQ0F2RixhQUFTa0IsVUFBVCxHQUFzQixHQUF0QjtBQUVBO0FBRUQsQ0EvQkQ7O0FBaUNBOzs7Ozs7OztBQVFPLFNBQVN4QixVQUFULENBQW9CaUQsTUFBcEIsRUFBNEI7QUFDbENELHFCQUFtQkMsTUFBbkI7QUFDQTs7QUFFRDs7Ozs7Ozs7O0FBU08sU0FBU2hELE1BQVQsQ0FBZ0JnRCxNQUFoQixFQUF3QjNDLFFBQXhCLEVBQWtDO0FBQ3hDLFNBQU9vRSxnQkFBZ0IxQixtQkFBbUJDLE1BQW5CLENBQWhCLEVBQTRDM0MsUUFBNUMsQ0FBUDtBQUNBIiwiZmlsZSI6ImZvcm1hdHRlci5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogbG9nNGpzIDxodHRwczovL2dpdGh1Yi5jb20vYW5pZ2VuZXJvL2xvZzRqcz5cbiAqXG4gKiBDb3B5cmlnaHQgMjAxNi1wcmVzZW50IFJvYmluIFNjaHVsdHogPGh0dHA6Ly9hbmlnZW5lcm8uY29tPlxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlXG4gKi9cblxuaW1wb3J0IHtkYXRlRm9ybWF0fSBmcm9tICcuL2RhdGVGb3JtYXR0ZXInO1xuaW1wb3J0ICogYXMgdXRpbGl0eSBmcm9tICcuL3V0aWxpdHknO1xuaW1wb3J0IHtMb2dMZXZlbH0gZnJvbSAnLi9jb25zdC9sb2dMZXZlbCc7XG5cbi8qKiBAY29uc3QgKi9cbmNvbnN0IF9DT01NQU5EX1JFR0VYID0gLyUoW2EteixBLVpdKykoPz1cXHt8KS87XG5cbi8qKiBAdHlwZSB7T2JqZWN0fSAqL1xubGV0IF9jb21waWxlZExheW91dHMgPSB7fTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqXG4gKiBAcGFyYW0ge0xPR19FVkVOVH0gbG9nRXZlbnRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmxldCBfZm9ybWF0TG9nZ2VyID0gZnVuY3Rpb24gKGxvZ0V2ZW50KSB7XG5cdHJldHVybiBsb2dFdmVudC5sb2dnZXI7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7TE9HX0VWRU5UfSBsb2dFdmVudFxuICogQHBhcmFtIHtBcnJheS48c3RyaW5nPn0gcGFyYW1zXG4gKlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5sZXQgX2Zvcm1hdERhdGUgPSBmdW5jdGlvbiAobG9nRXZlbnQsIHBhcmFtcykge1xuXHRyZXR1cm4gZGF0ZUZvcm1hdChsb2dFdmVudC5kYXRlLCBwYXJhbXNbMF0pO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqXG4gKiBAcGFyYW0ge0xPR19FVkVOVH0gbG9nRXZlbnRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmxldCBfZm9ybWF0RXhjZXB0aW9uID0gZnVuY3Rpb24gKGxvZ0V2ZW50KSB7XG5cbiAgICBsZXQgbWVzc2FnZSA9ICcnO1xuXG4gICAgaWYgKGxvZ0V2ZW50LmVycm9yICE9IG51bGwpIHtcblxuXHRcdGlmIChsb2dFdmVudC5lcnJvci5zdGFjayAhPSB1bmRlZmluZWQpIHtcblx0XHRcdGxldCBzdGFja3MgPSBsb2dFdmVudC5lcnJvci5zdGFjay5zcGxpdCgvXFxuL2cpO1xuICAgICAgICAgICAgc3RhY2tzLmZvckVhY2goZnVuY3Rpb24gKHN0YWNrKSB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZSArPSBgXFx0JHtzdGFja31cXG5gO1xuICAgICAgICAgICAgfSk7XG5cdFx0fSBlbHNlIGlmIChsb2dFdmVudC5lcnJvci5tZXNzYWdlICE9IG51bGwgJiYgbG9nRXZlbnQuZXJyb3IubWVzc2FnZSAhPSAnJykge1xuXHRcdFx0bWVzc2FnZSArPSBgXFx0JHtsb2dFdmVudC5lcnJvci5uYW1lfTogJHtsb2dFdmVudC5lcnJvci5tZXNzYWdlfVxcbmA7XG5cdFx0fVxuXG5cdH1cblxuXHRyZXR1cm4gbWVzc2FnZTtcblxufTtcblxuLyoqXG4gKiBGb3JtYXRzIHRoZSBmaWxlIChlLmcuIHRlc3QuanMpIHRvIHRoZSBmaWxlXG4gKlxuICogQHByaXZhdGVcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7TE9HX0VWRU5UfSBsb2dFdmVudFxuICovXG5sZXQgX2Zvcm1hdEZpbGUgPSBmdW5jdGlvbiAobG9nRXZlbnQpIHtcblxuICAgIGlmICghbG9nRXZlbnQuZmlsZSkge1xuXHRcdF9nZXRGaWxlRGV0YWlscyhsb2dFdmVudCk7XG5cdH1cblxuXHRyZXR1cm4gbG9nRXZlbnQuZmlsZTtcblxufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqXG4gKiBAcGFyYW0ge0xPR19FVkVOVH0gbG9nRXZlbnRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmxldCBfZm9ybWF0TGluZU51bWJlciA9IGZ1bmN0aW9uIChsb2dFdmVudCkge1xuXG4gICAgaWYgKCFsb2dFdmVudC5saW5lTnVtYmVyKSB7XG5cdFx0X2dldEZpbGVEZXRhaWxzKGxvZ0V2ZW50KTtcblx0fVxuXG5cdHJldHVybiBgJHtsb2dFdmVudC5saW5lTnVtYmVyfWA7XG5cbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtMT0dfRVZFTlR9IGxvZ0V2ZW50XG4gKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBwYXJhbXNcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmxldCBfZm9ybWF0TWFwTWVzc2FnZSA9IGZ1bmN0aW9uIChsb2dFdmVudCwgcGFyYW1zKSB7XG5cdGxldCBtZXNzYWdlID0gbnVsbDtcblx0aWYgKGxvZ0V2ZW50LnByb3BlcnRpZXMpIHtcblxuXHRcdG1lc3NhZ2UgPSBbXTtcblx0XHRmb3IgKGxldCBrZXkgaW4gbG9nRXZlbnQucHJvcGVydGllcykge1xuXHRcdFx0aWYgKHBhcmFtc1swXSkge1xuXHRcdFx0XHRpZiAocGFyYW1zWzBdID09IGtleSkge1xuXHRcdFx0XHRcdG1lc3NhZ2UucHVzaChsb2dFdmVudC5wcm9wZXJ0aWVzW2tleV0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtZXNzYWdlLnB1c2goJ3snICsga2V5ICsgJywnICsgbG9nRXZlbnQucHJvcGVydGllc1trZXldICsgJ30nKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gJ3snICsgbWVzc2FnZS5qb2luKCcsJykgKyAnfSc7XG5cblx0fVxuXHRyZXR1cm4gbWVzc2FnZTtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtMT0dfRVZFTlR9IGxvZ0V2ZW50XG4gKlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5sZXQgX2Zvcm1hdExvZ01lc3NhZ2UgPSBmdW5jdGlvbiAobG9nRXZlbnQpIHtcblx0cmV0dXJuIGxvZ0V2ZW50Lm1lc3NhZ2U7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7TE9HX0VWRU5UfSBsb2dFdmVudFxuICpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xubGV0IF9mb3JtYXRNZXRob2ROYW1lID0gZnVuY3Rpb24gKGxvZ0V2ZW50KSB7XG5cdHJldHVybiB1dGlsaXR5LmdldEZ1bmN0aW9uTmFtZShsb2dFdmVudC5tZXRob2QpO1xufTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKi9cbmxldCBfZm9ybWF0TGluZVNlcGFyYXRvciA9IGZ1bmN0aW9uICgpIHtcblx0cmV0dXJuICdcXG4nO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqXG4gKiBAcGFyYW0ge0xPR19FVkVOVH0gbG9nRXZlbnRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmxldCBfZm9ybWF0TGV2ZWwgPSBmdW5jdGlvbiAobG9nRXZlbnQpIHtcblxuICAgIHN3aXRjaCAobG9nRXZlbnQubGV2ZWwpIHtcblxuICAgICAgICBjYXNlIExvZ0xldmVsLkZBVEFMOlxuICAgICAgICAgICAgcmV0dXJuICdGQVRBTCc7XG4gICAgICAgIGNhc2UgTG9nTGV2ZWwuRVJST1I6XG4gICAgICAgICAgICByZXR1cm4gJ0VSUk9SJztcbiAgICAgICAgY2FzZSBMb2dMZXZlbC5XQVJOOlxuICAgICAgICAgICAgcmV0dXJuICdXQVJOJztcbiAgICAgICAgY2FzZSBMb2dMZXZlbC5JTkZPOlxuICAgICAgICAgICAgcmV0dXJuICdJTkZPJztcbiAgICAgICAgY2FzZSBMb2dMZXZlbC5ERUJVRzpcbiAgICAgICAgICAgIHJldHVybiAnREVCVUcnO1xuICAgICAgICBjYXNlIExvZ0xldmVsLlRSQUNFOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuICdUUkFDRSc7XG5cbiAgICB9XG5cbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtMT0dfRVZFTlR9IGxvZ0V2ZW50XG4gKlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5sZXQgX2Zvcm1hdFJlbGF0aXZlID0gZnVuY3Rpb24gKGxvZ0V2ZW50KSB7XG5cdHJldHVybiAnJyArIGxvZ0V2ZW50LnJlbGF0aXZlO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqXG4gKiBAcGFyYW0ge0xPR19FVkVOVH0gbG9nRXZlbnRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmxldCBfZm9ybWF0U2VxdWVuY2VOdW1iZXIgPSBmdW5jdGlvbiAobG9nRXZlbnQpIHtcblx0cmV0dXJuICcnICsgbG9nRXZlbnQuc2VxdWVuY2U7XG59O1xuXG5sZXQgX2Zvcm1hdHRlcnMgPSB7XG5cdCdjfGxvZ2dlcicgOiBfZm9ybWF0TG9nZ2VyLFxuXHQnZHxkYXRlJyA6IF9mb3JtYXREYXRlLFxuXHQnZXh8ZXhjZXB0aW9ufHRocm93YWJsZScgOiBfZm9ybWF0RXhjZXB0aW9uLFxuXHQnRnxmaWxlJyA6IF9mb3JtYXRGaWxlLFxuXHQnS3xtYXB8TUFQJyA6IF9mb3JtYXRNYXBNZXNzYWdlLFxuXHQnTHxsaW5lJyA6IF9mb3JtYXRMaW5lTnVtYmVyLFxuXHQnbXxtc2d8bWVzc2FnZScgOiBfZm9ybWF0TG9nTWVzc2FnZSxcblx0J018bWV0aG9kJyA6IF9mb3JtYXRNZXRob2ROYW1lLFxuXHQnbicgOiBfZm9ybWF0TGluZVNlcGFyYXRvcixcblx0J3B8bGV2ZWwnIDogX2Zvcm1hdExldmVsLFxuXHQncnxyZWxhdGl2ZScgOiBfZm9ybWF0UmVsYXRpdmUsXG5cdCdzbnxzZXF1ZW5jZU51bWJlcicgOiBfZm9ybWF0U2VxdWVuY2VOdW1iZXJcbn07XG5cbi8qKlxuICogR2V0IHRoZSBjb21waWxlZCBsYXlvdXQgZm9yIHRoZSBzcGVjaWZpZWQgbGF5b3V0IHN0cmluZy4gSWYgdGhlIGNvbXBpbGVkIGxheW91dCBkb2VzIG5vdFxuICogZXhpc3QsIHRoZW4gd2Ugd2FudCB0byBjcmVhdGUgaXQuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxheW91dFxuICpcbiAqIEByZXR1cm4ge0FycmF5LjxzdHJpbmd8ZnVuY3Rpb24+fVxuICovXG5sZXQgX2dldENvbXBpbGVkTGF5b3V0ID0gZnVuY3Rpb24gKGxheW91dCkge1xuXG5cdGlmIChfY29tcGlsZWRMYXlvdXRzW2xheW91dF0pIHtcblx0XHRyZXR1cm4gX2NvbXBpbGVkTGF5b3V0c1tsYXlvdXRdO1xuXHR9XG5cblx0cmV0dXJuIF9jb21waWxlTGF5b3V0KGxheW91dCk7XG5cbn07XG5cbi8qKlxuICogQ29tcGlsZXMgYSBsYXlvdXQgaW50byBhbiBhcnJheS4gVGhlIGFycmF5IGNvbnRhaW5zIGZ1bmN0aW9uc1xuICpcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYXlvdXRcbiAqXG4gKiBAcmV0dXJuIHtBcnJheS48c3RyaW5nfGZ1bmN0aW9uPn1cbiAqL1xubGV0IF9jb21waWxlTGF5b3V0ID0gZnVuY3Rpb24gKGxheW91dCkge1xuXG5cdGxldCBpbmRleCA9IGxheW91dC5pbmRleE9mKCclJyk7XG5cdGxldCBjdXJyZW50Rm9ybWF0U3RyaW5nID0gJyc7XG5cdGxldCBmb3JtYXRBcnJheSA9IFtdO1xuXG5cdGlmIChpbmRleCAhPSAwKSB7XG5cdFx0Zm9ybWF0QXJyYXkucHVzaChsYXlvdXQuc3Vic3RyaW5nKDAsIGluZGV4KSk7XG5cdH1cblxuXHRkbyB7XG5cblx0XHRsZXQgc3RhcnRJbmRleCA9IGluZGV4O1xuXHRcdGxldCBlbmRJbmRleCA9IGluZGV4ID0gbGF5b3V0LmluZGV4T2YoJyUnLCBpbmRleCArIDEpO1xuXG5cdFx0aWYgKGVuZEluZGV4IDwgMCkge1xuXHRcdFx0Y3VycmVudEZvcm1hdFN0cmluZyA9IGxheW91dC5zdWJzdHJpbmcoc3RhcnRJbmRleCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGN1cnJlbnRGb3JtYXRTdHJpbmcgPSBsYXlvdXQuc3Vic3RyaW5nKHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcblx0XHR9XG5cblx0XHRmb3JtYXRBcnJheS5wdXNoKF9nZXRGb3JtYXR0ZXJPYmplY3QoY3VycmVudEZvcm1hdFN0cmluZykpO1xuXG5cdH0gd2hpbGUgKGluZGV4ID4gLTEpO1xuXG4gICAgLy8gc2V0IHRoZSBmb3JtYXQgYXJyYXkgdG8gdGhlIHNwZWNpZmllZCBjb21waWxlZCBsYXlvdXRcblx0X2NvbXBpbGVkTGF5b3V0c1tsYXlvdXRdID0gZm9ybWF0QXJyYXk7XG5cblx0cmV0dXJuIGZvcm1hdEFycmF5O1xuXG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXRTdHJpbmdcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R8c3RyaW5nfVxuICovXG5sZXQgX2dldEZvcm1hdHRlck9iamVjdCA9IGZ1bmN0aW9uIChmb3JtYXRTdHJpbmcpIHtcblxuXHRsZXQgcmVzdWx0ID0gX0NPTU1BTkRfUkVHRVguZXhlYyhmb3JtYXRTdHJpbmcpO1xuXHRpZiAocmVzdWx0ICE9IG51bGwgJiYgcmVzdWx0Lmxlbmd0aCA9PSAyKSB7XG5cblx0XHRsZXQgZm9ybWF0dGVyID0gX2dldEZvcm1hdHRlckZ1bmN0aW9uKHJlc3VsdFsxXSk7XG5cdFx0aWYgKCFmb3JtYXR0ZXIpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdGxldCBwYXJhbXMgPSBfZ2V0TGF5b3V0VGFnUGFyYW1zKGZvcm1hdFN0cmluZyk7XG5cblx0XHRsZXQgYWZ0ZXIgPSAnJztcblx0XHRsZXQgZW5kSW5kZXggPSBmb3JtYXRTdHJpbmcubGFzdEluZGV4T2YoJ30nKTtcblx0XHRpZiAoZW5kSW5kZXggIT0gLTEpIHtcblx0XHRcdGFmdGVyID0gZm9ybWF0U3RyaW5nLnN1YnN0cmluZyhlbmRJbmRleCArIDEpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhZnRlciA9IGZvcm1hdFN0cmluZy5zdWJzdHJpbmcocmVzdWx0LmluZGV4ICsgcmVzdWx0WzFdLmxlbmd0aCArIDEpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHQnZm9ybWF0dGVyJyA6IGZvcm1hdHRlcixcblx0XHRcdCdwYXJhbXMnIDogcGFyYW1zLFxuXHRcdFx0J2FmdGVyJyA6IGFmdGVyXG5cdFx0fTtcblxuXHR9XG5cblx0cmV0dXJuIGZvcm1hdFN0cmluZztcblxufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoYXQgZm9ybWF0dGVyIGZ1bmN0aW9uIGhhcyBiZWVuIGNvbmZpZ3VyZWRcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tbWFuZFxuICpcbiAqIEByZXR1cm4gez9zdHJpbmd9XG4gKi9cbmxldCBfZ2V0Rm9ybWF0dGVyRnVuY3Rpb24gPSBmdW5jdGlvbiAoY29tbWFuZCkge1xuXG5cdGxldCByZWdleDtcblx0Zm9yIChsZXQga2V5IGluIF9mb3JtYXR0ZXJzKSB7XG4gICAgICAgIGlmIChfZm9ybWF0dGVycy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICByZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIGtleSArICcpJCcpO1xuICAgICAgICAgICAgaWYgKHJlZ2V4LmV4ZWMoY29tbWFuZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX2Zvcm1hdHRlcnNba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXHR9XG5cblx0cmV0dXJuIG51bGw7XG5cbn07XG5cbi8qKlxuICogR2V0cyB0aGUgbGF5b3V0IHRhZyBwYXJhbXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBsYXlvdXQgdGFnLiBTbywgZm9yIGV4YW1wbGUsICclZHt5eXl5LU1NLWRkfWBcbiAqIHdvdWxkIG91dHB1dCBhbiBhcnJheSBvZiBbJ3l5eXktTU0tZGQnXVxuICpcbiAqIEBwcml2YXRlXG4gKiBAZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tbWFuZFxuICpcbiAqIEByZXR1cm4ge0FycmF5LjxzdHJpbmc+fVxuICovXG5sZXQgX2dldExheW91dFRhZ1BhcmFtcyA9IGZ1bmN0aW9uIChjb21tYW5kKSB7XG5cblx0bGV0IHBhcmFtcyA9IFtdO1xuXHRsZXQgcmVzdWx0ID0gY29tbWFuZC5tYXRjaCgvXFx7KFtefV0qKSg/PX0pL2cpO1xuXHRpZiAocmVzdWx0ICE9IG51bGwpIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykge1xuXHRcdFx0cGFyYW1zLnB1c2gocmVzdWx0W2ldLnN1YnN0cmluZygxKSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHBhcmFtcztcblxufTtcblxuLyoqXG4gKiBIYW5kbGVzIGZvcm1hdHRpbmcgdGhlIGxvZyBldmVudCB1c2luZyB0aGUgc3BlY2lmaWVkIGZvcm1hdHRlciBhcnJheVxuICpcbiAqIEBwcml2YXRlXG4gKiBAZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge0FycmF5LjxmdW5jdGlvbnxzdHJpbmc+fSBmb3JtYXR0ZXJcbiAqIEBwYXJhbSB7TE9HX0VWRU5UfSBsb2dFdmVudFxuICpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xubGV0IF9mb3JtYXRMb2dFdmVudCA9IGZ1bmN0aW9uIChmb3JtYXR0ZXIsIGxvZ0V2ZW50KSB7XG5cblx0bGV0IHJlc3BvbnNlO1xuXHRsZXQgbWVzc2FnZSA9ICcnO1xuXHRsZXQgY291bnQgPSBmb3JtYXR0ZXIubGVuZ3RoO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcblx0XHRpZiAoZm9ybWF0dGVyW2ldICE9PSBudWxsKSB7XG5cblx0XHRcdGlmIChmb3JtYXR0ZXJbaV0gaW5zdGFuY2VvZiBPYmplY3QpIHtcblxuXHRcdFx0XHRyZXNwb25zZSA9IGZvcm1hdHRlcltpXS5mb3JtYXR0ZXIobG9nRXZlbnQsIGZvcm1hdHRlcltpXS5wYXJhbXMpO1xuXHRcdFx0XHRpZiAocmVzcG9uc2UgIT0gbnVsbCkge1xuXHRcdFx0XHRcdG1lc3NhZ2UgKz0gcmVzcG9uc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0bWVzc2FnZSArPSBmb3JtYXR0ZXJbaV0uYWZ0ZXI7XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1lc3NhZ2UgKz0gZm9ybWF0dGVyW2ldO1xuXHRcdFx0fVxuXG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG1lc3NhZ2UudHJpbSgpO1xuXG59O1xuXG4vKipcbiAqXG4gKiBAcHJpdmF0ZVxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtMT0dfRVZFTlR9IGxvZ0V2ZW50XG4gKi9cbmxldCBfZ2V0RmlsZURldGFpbHMgPSBmdW5jdGlvbiAobG9nRXZlbnQpIHtcblxuXHRpZiAobG9nRXZlbnQubG9nRXJyb3JTdGFjaykge1xuXG5cdFx0bGV0IHBhcnRzID0gbG9nRXZlbnQubG9nRXJyb3JTdGFjay5zdGFjay5zcGxpdCgvXFxuL2cpO1xuXHRcdGxldCBmaWxlID0gcGFydHNbM107XG5cdFx0ZmlsZSA9IGZpbGUucmVwbGFjZSgvYXQgKC4qXFwofCkoZmlsZXxodHRwfGh0dHBzfCkoOnwpKFxcL3wpKi8sICcnKTtcblx0XHRmaWxlID0gZmlsZS5yZXBsYWNlKCcpJywgJycpO1xuXHRcdGZpbGUgPSBmaWxlLnJlcGxhY2UoKHR5cGVvZiBsb2NhdGlvbiAhPT0gJ3VuZGVmaW5lZCcpID8gbG9jYXRpb24uaG9zdCA6ICcnLCAnJykudHJpbSgpO1xuXG5cdFx0bGV0IGZpbGVQYXJ0cyA9IGZpbGUuc3BsaXQoL1xcOi9nKTtcblxuXHRcdGxvZ0V2ZW50LmNvbHVtbiA9IGZpbGVQYXJ0cy5wb3AoKTtcblx0XHRsb2dFdmVudC5saW5lTnVtYmVyID0gZmlsZVBhcnRzLnBvcCgpO1xuXG5cdFx0aWYgKHR5cGVvZiBkZWZpbmUgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRsZXQgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcblx0XHRcdGxldCBhcHBEaXIgPSBwYXRoLmRpcm5hbWUocmVxdWlyZS5tYWluLmZpbGVuYW1lKTtcblx0XHRcdGxvZ0V2ZW50LmZpbGVuYW1lID0gZmlsZVBhcnRzLmpvaW4oJzonKS5yZXBsYWNlKGFwcERpciwgJycpLnJlcGxhY2UoLyhcXFxcfFxcLykvLCAnJyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGxvZ0V2ZW50LmZpbGVuYW1lID0gZmlsZVBhcnRzLmpvaW4oJzonKTtcblx0XHR9XG5cblx0fSBlbHNlIHtcblxuXHRcdGxvZ0V2ZW50LmNvbHVtbiA9ICc/Jztcblx0XHRsb2dFdmVudC5maWxlbmFtZSA9ICdhbm9ueW1vdXMnO1xuXHRcdGxvZ0V2ZW50LmxpbmVOdW1iZXIgPSAnPyc7XG5cblx0fVxuXG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYXlvdXRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVDb21waWxlKGxheW91dCkge1xuXHRfZ2V0Q29tcGlsZWRMYXlvdXQobGF5b3V0KTtcbn1cblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbGF5b3V0XG4gKiBAcGFyYW0ge0xPR19FVkVOVH0gbG9nRXZlbnRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXQobGF5b3V0LCBsb2dFdmVudCkge1xuXHRyZXR1cm4gX2Zvcm1hdExvZ0V2ZW50KF9nZXRDb21waWxlZExheW91dChsYXlvdXQpLCBsb2dFdmVudCk7XG59XG4iXX0= + //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZvcm1hdHRlci5qcyJdLCJuYW1lcyI6WyJwcmVDb21waWxlIiwiZm9ybWF0IiwidXRpbGl0eSIsIl9DT01NQU5EX1JFR0VYIiwiX2NvbXBpbGVkTGF5b3V0cyIsIl9mb3JtYXRMb2dnZXIiLCJsb2dFdmVudCIsImxvZ2dlciIsIl9mb3JtYXREYXRlIiwicGFyYW1zIiwiZGF0ZSIsIl9mb3JtYXRFeGNlcHRpb24iLCJtZXNzYWdlIiwiZXJyb3IiLCJzdGFjayIsInVuZGVmaW5lZCIsInN0YWNrcyIsInNwbGl0IiwiZm9yRWFjaCIsIm5hbWUiLCJfZm9ybWF0RmlsZSIsImZpbGUiLCJfZ2V0RmlsZURldGFpbHMiLCJfZm9ybWF0TGluZU51bWJlciIsImxpbmVOdW1iZXIiLCJfZm9ybWF0Q29sdW1uIiwiY29sdW1uIiwiX2Zvcm1hdE1hcE1lc3NhZ2UiLCJwcm9wZXJ0aWVzIiwia2V5IiwicHVzaCIsImpvaW4iLCJfZm9ybWF0TG9nTWVzc2FnZSIsIl9mb3JtYXRNZXRob2ROYW1lIiwiZ2V0RnVuY3Rpb25OYW1lIiwibWV0aG9kIiwiX2Zvcm1hdExpbmVTZXBhcmF0b3IiLCJfZm9ybWF0TGV2ZWwiLCJsZXZlbCIsIkZBVEFMIiwiRVJST1IiLCJXQVJOIiwiSU5GTyIsIkRFQlVHIiwiVFJBQ0UiLCJfZm9ybWF0UmVsYXRpdmUiLCJyZWxhdGl2ZSIsIl9mb3JtYXRTZXF1ZW5jZU51bWJlciIsInNlcXVlbmNlIiwiX2Zvcm1hdHRlcnMiLCJfZ2V0Q29tcGlsZWRMYXlvdXQiLCJsYXlvdXQiLCJfY29tcGlsZUxheW91dCIsImluZGV4IiwiaW5kZXhPZiIsImN1cnJlbnRGb3JtYXRTdHJpbmciLCJmb3JtYXRBcnJheSIsInN1YnN0cmluZyIsInN0YXJ0SW5kZXgiLCJlbmRJbmRleCIsIl9nZXRGb3JtYXR0ZXJPYmplY3QiLCJmb3JtYXRTdHJpbmciLCJyZXN1bHQiLCJleGVjIiwibGVuZ3RoIiwiZm9ybWF0dGVyIiwiX2dldEZvcm1hdHRlckZ1bmN0aW9uIiwiX2dldExheW91dFRhZ1BhcmFtcyIsImFmdGVyIiwibGFzdEluZGV4T2YiLCJjb21tYW5kIiwicmVnZXgiLCJoYXNPd25Qcm9wZXJ0eSIsIlJlZ0V4cCIsIm1hdGNoIiwiaSIsIl9mb3JtYXRMb2dFdmVudCIsInJlc3BvbnNlIiwiY291bnQiLCJPYmplY3QiLCJ0cmltIiwibG9nRXJyb3JTdGFjayIsInBhcnRzIiwicmVwbGFjZSIsImxvY2F0aW9uIiwiaG9zdCIsImZpbGVQYXJ0cyIsInBvcCIsImRlZmluZSIsInBhdGgiLCJyZXF1aXJlIiwiYXBwRGlyIiwiZGlybmFtZSIsIm1haW4iLCJmaWxlbmFtZSIsInN0YXJ0c1dpdGgiXSwibWFwcGluZ3MiOiI7Ozs7O1FBdWZnQkEsVSxHQUFBQSxVO2dDQWFBQyxNLEdBQUFBLE07O0FBN2ZoQjs7QUFDQTs7NEJBQVlDLE87O0FBQ1o7Ozs7QUFFQTtBQUNBLE1BQU1DLGlCQUFpQixzQkFBdkI7O0FBRUE7QUFkQTs7Ozs7OztBQWVBLElBQUlDLG1CQUFtQixFQUF2Qjs7QUFFQTs7Ozs7Ozs7QUFRQSxJQUFJQyxnQkFBZ0IsVUFBVUMsUUFBVixFQUFvQjtBQUN2QyxTQUFPQSxTQUFTQyxNQUFoQjtBQUNBLENBRkQ7O0FBSUE7Ozs7Ozs7OztBQVNBLElBQUlDLGNBQWMsVUFBVUYsUUFBVixFQUFvQkcsTUFBcEIsRUFBNEI7QUFDN0MsU0FBTyx3REFBV0gsU0FBU0ksSUFBcEIsRUFBMEJELE9BQU8sQ0FBUCxDQUExQjtBQUFQO0FBQ0EsQ0FGRDs7QUFJQTs7Ozs7Ozs7QUFRQSxJQUFJRSxtQkFBbUIsVUFBVUwsUUFBVixFQUFvQjs7QUFFdkMsTUFBSU0sVUFBVSxFQUFkOztBQUVBLE1BQUlOLFNBQVNPLEtBQVQsSUFBa0IsSUFBdEIsRUFBNEI7O0FBRTlCLFFBQUlQLFNBQVNPLEtBQVQsQ0FBZUMsS0FBZixJQUF3QkMsU0FBNUIsRUFBdUM7QUFDdEMsVUFBSUMsU0FBU1YsU0FBU08sS0FBVCxDQUFlQyxLQUFmLENBQXFCRyxLQUFyQixDQUEyQixLQUEzQixDQUFiO0FB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QUE1QyxDQUFQO0FBQ0EiLCJmaWxlIjoiZm9ybWF0dGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBsb2c0anMgPGh0dHBzOi8vZ2l0aHViLmNvbS9hbmlnZW5lcm8vbG9nNGpzPlxuICpcbiAqIENvcHlyaWdodCAyMDE2LXByZXNlbnQgUm9iaW4gU2NodWx0eiA8aHR0cDovL2FuaWdlbmVyby5jb20+XG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge2RhdGVGb3JtYXR9IGZyb20gJy4vZGF0ZUZvcm1hdHRlcic7XG5pbXBvcnQgKiBhcyB1dGlsaXR5IGZyb20gJy4vdXRpbGl0eSc7XG5pbXBvcnQge0xvZ0xldmVsfSBmcm9tICcuL2NvbnN0L2xvZ0xldmVsJztcblxuLyoqIEBjb25zdCAqL1xuY29uc3QgX0NPTU1BTkRfUkVHRVggPSAvJShbYS16LEEtWl0rKSg/PVxce3wpLztcblxuLyoqIEB0eXBlIHtPYmplY3R9ICovXG5sZXQgX2NvbXBpbGVkTGF5b3V0cyA9IHt9O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7TE9HX0VWRU5UfSBsb2dFdmVudFxuICpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xubGV0IF9mb3JtYXRMb2dnZXIgPSBmdW5jdGlvbiAobG9nRXZlbnQpIHtcblx0cmV0dXJuIGxvZ0V2ZW50LmxvZ2dlcjtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtMT0dfRVZFTlR9IGxvZ0V2ZW50XG4gKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBwYXJhbXNcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmxldCBfZm9ybWF0RGF0ZSA9IGZ1bmN0aW9uIChsb2dFdmVudCwgcGFyYW1zKSB7XG5cdHJldHVybiBkYXRlRm9ybWF0KGxvZ0V2ZW50LmRhdGUsIHBhcmFtc1swXSk7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7TE9HX0VWRU5UfSBsb2dFdmVudFxuICpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xubGV0IF9mb3JtYXRFeGNlcHRpb24gPSBmdW5jdGlvbiAobG9nRXZlbnQpIHtcblxuICAgIGxldCBtZXNzYWdlID0gJyc7XG5cbiAgICBpZiAobG9nRXZlbnQuZXJyb3IgIT0gbnVsbCkge1xuXG5cdFx0aWYgKGxvZ0V2ZW50LmVycm9yLnN0YWNrICE9IHVuZGVmaW5lZCkge1xuXHRcdFx0bGV0IHN0YWNrcyA9IGxvZ0V2ZW50LmVycm9yLnN0YWNrLnNwbGl0KC9cXG4vZyk7XG4gICAgICAgICAgICBzdGFja3MuZm9yRWFjaChmdW5jdGlvbiAoc3RhY2spIHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlICs9IGBcXHQke3N0YWNrfVxcbmA7XG4gICAgICAgICAgICB9KTtcblx0XHR9IGVsc2UgaWYgKGxvZ0V2ZW50LmVycm9yLm1lc3NhZ2UgIT0gbnVsbCAmJiBsb2dFdmVudC5lcnJvci5tZXNzYWdlICE9ICcnKSB7XG5cdFx0XHRtZXNzYWdlICs9IGBcXHQke2xvZ0V2ZW50LmVycm9yLm5hbWV9OiAke2xvZ0V2ZW50LmVycm9yLm1lc3NhZ2V9XFxuYDtcblx0XHR9XG5cblx0fVxuXG5cdHJldHVybiBtZXNzYWdlO1xuXG59O1xuXG4vKipcbiAqIEZvcm1hdHMgdGhlIGZpbGUgKGUuZy4gdGVzdC5qcykgdG8gdGhlIGZpbGVcbiAqXG4gKiBAcHJpdmF0ZVxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtMT0dfRVZFTlR9IGxvZ0V2ZW50XG4gKi9cbmxldCBfZm9ybWF0RmlsZSA9IGZ1bmN0aW9uIChsb2dFdmVudCkge1xuXG4gICAgaWYgKCFsb2dFdmVudC5maWxlKSB7XG5cdFx0X2dldEZpbGVEZXRhaWxzKGxvZ0V2ZW50KTtcblx0fVxuXG5cdHJldHVybiBsb2dFdmVudC5maWxlO1xuXG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7TE9HX0VWRU5UfSBsb2dFdmVudFxuICpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xubGV0IF9mb3JtYXRMaW5lTnVtYmVyID0gZnVuY3Rpb24gKGxvZ0V2ZW50KSB7XG5cbiAgICBpZiAoIWxvZ0V2ZW50LmxpbmVOdW1iZXIpIHtcblx0XHRfZ2V0RmlsZURldGFpbHMobG9nRXZlbnQpO1xuXHR9XG5cblx0cmV0dXJuIGAke2xvZ0V2ZW50LmxpbmVOdW1iZXJ9YDtcblxufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqXG4gKiBAcGFyYW0ge0xPR19FVkVOVH0gbG9nRXZlbnRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmxldCBfZm9ybWF0Q29sdW1uID0gZnVuY3Rpb24gKGxvZ0V2ZW50KSB7XG5cbiAgICBpZiAoIWxvZ0V2ZW50LmNvbHVtbikge1xuXHRcdF9nZXRGaWxlRGV0YWlscyhsb2dFdmVudCk7XG5cdH1cblxuXHRyZXR1cm4gYCR7bG9nRXZlbnQuY29sdW1ufWA7XG5cbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtMT0dfRVZFTlR9IGxvZ0V2ZW50XG4gKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBwYXJhbXNcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmxldCBfZm9ybWF0TWFwTWVzc2FnZSA9IGZ1bmN0aW9uIChsb2dFdmVudCwgcGFyYW1zKSB7XG5cdGxldCBtZXNzYWdlID0gbnVsbDtcblx0aWYgKGxvZ0V2ZW50LnByb3BlcnRpZXMpIHtcblxuXHRcdG1lc3NhZ2UgPSBbXTtcblx0XHRmb3IgKGxldCBrZXkgaW4gbG9nRXZlbnQucHJvcGVydGllcykge1xuXHRcdFx0aWYgKHBhcmFtc1swXSkge1xuXHRcdFx0XHRpZiAocGFyYW1zWzBdID09IGtleSkge1xuXHRcdFx0XHRcdG1lc3NhZ2UucHVzaChsb2dFdmVudC5wcm9wZXJ0aWVzW2tleV0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtZXNzYWdlLnB1c2goJ3snICsga2V5ICsgJywnICsgbG9nRXZlbnQucHJvcGVydGllc1trZXldICsgJ30nKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gJ3snICsgbWVzc2FnZS5qb2luKCcsJykgKyAnfSc7XG5cblx0fVxuXHRyZXR1cm4gbWVzc2FnZTtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtMT0dfRVZFTlR9IGxvZ0V2ZW50XG4gKlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5sZXQgX2Zvcm1hdExvZ01lc3NhZ2UgPSBmdW5jdGlvbiAobG9nRXZlbnQpIHtcblx0cmV0dXJuIGxvZ0V2ZW50Lm1lc3NhZ2U7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7TE9HX0VWRU5UfSBsb2dFdmVudFxuICpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xubGV0IF9mb3JtYXRNZXRob2ROYW1lID0gZnVuY3Rpb24gKGxvZ0V2ZW50KSB7XG5cdHJldHVybiB1dGlsaXR5LmdldEZ1bmN0aW9uTmFtZShsb2dFdmVudC5tZXRob2QpO1xufTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKi9cbmxldCBfZm9ybWF0TGluZVNlcGFyYXRvciA9IGZ1bmN0aW9uICgpIHtcblx0cmV0dXJuICdcXG4nO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqXG4gKiBAcGFyYW0ge0xPR19FVkVOVH0gbG9nRXZlbnRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmxldCBfZm9ybWF0TGV2ZWwgPSBmdW5jdGlvbiAobG9nRXZlbnQpIHtcblxuICAgIHN3aXRjaCAobG9nRXZlbnQubGV2ZWwpIHtcblxuICAgICAgICBjYXNlIExvZ0xldmVsLkZBVEFMOlxuICAgICAgICAgICAgcmV0dXJuICdGQVRBTCc7XG4gICAgICAgIGNhc2UgTG9nTGV2ZWwuRVJST1I6XG4gICAgICAgICAgICByZXR1cm4gJ0VSUk9SJztcbiAgICAgICAgY2FzZSBMb2dMZXZlbC5XQVJOOlxuICAgICAgICAgICAgcmV0dXJuICdXQVJOJztcbiAgICAgICAgY2FzZSBMb2dMZXZlbC5JTkZPOlxuICAgICAgICAgICAgcmV0dXJuICdJTkZPJztcbiAgICAgICAgY2FzZSBMb2dMZXZlbC5ERUJVRzpcbiAgICAgICAgICAgIHJldHVybiAnREVCVUcnO1xuICAgICAgICBjYXNlIExvZ0xldmVsLlRSQUNFOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuICdUUkFDRSc7XG5cbiAgICB9XG5cbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtMT0dfRVZFTlR9IGxvZ0V2ZW50XG4gKlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5sZXQgX2Zvcm1hdFJlbGF0aXZlID0gZnVuY3Rpb24gKGxvZ0V2ZW50KSB7XG5cdHJldHVybiAnJyArIGxvZ0V2ZW50LnJlbGF0aXZlO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqXG4gKiBAcGFyYW0ge0xPR19FVkVOVH0gbG9nRXZlbnRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmxldCBfZm9ybWF0U2VxdWVuY2VOdW1iZXIgPSBmdW5jdGlvbiAobG9nRXZlbnQpIHtcblx0cmV0dXJuICcnICsgbG9nRXZlbnQuc2VxdWVuY2U7XG59O1xuXG5sZXQgX2Zvcm1hdHRlcnMgPSB7XG5cdCdjfGxvZ2dlcicgOiBfZm9ybWF0TG9nZ2VyLFxuXHQnZHxkYXRlJyA6IF9mb3JtYXREYXRlLFxuXHQnZXh8ZXhjZXB0aW9ufHRocm93YWJsZScgOiBfZm9ybWF0RXhjZXB0aW9uLFxuXHQnRnxmaWxlJyA6IF9mb3JtYXRGaWxlLFxuXHQnS3xtYXB8TUFQJyA6IF9mb3JtYXRNYXBNZXNzYWdlLFxuXHQnTHxsaW5lJyA6IF9mb3JtYXRMaW5lTnVtYmVyLFxuXHQnY29sdW1uJyA6IF9mb3JtYXRDb2x1bW4sXG5cdCdtfG1zZ3xtZXNzYWdlJyA6IF9mb3JtYXRMb2dNZXNzYWdlLFxuXHQnTXxtZXRob2QnIDogX2Zvcm1hdE1ldGhvZE5hbWUsXG5cdCduJyA6IF9mb3JtYXRMaW5lU2VwYXJhdG9yLFxuXHQncHxsZXZlbCcgOiBfZm9ybWF0TGV2ZWwsXG5cdCdyfHJlbGF0aXZlJyA6IF9mb3JtYXRSZWxhdGl2ZSxcblx0J3NufHNlcXVlbmNlTnVtYmVyJyA6IF9mb3JtYXRTZXF1ZW5jZU51bWJlclxufTtcblxuLyoqXG4gKiBHZXQgdGhlIGNvbXBpbGVkIGxheW91dCBmb3IgdGhlIHNwZWNpZmllZCBsYXlvdXQgc3RyaW5nLiBJZiB0aGUgY29tcGlsZWQgbGF5b3V0IGRvZXMgbm90XG4gKiBleGlzdCwgdGhlbiB3ZSB3YW50IHRvIGNyZWF0ZSBpdC5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbGF5b3V0XG4gKlxuICogQHJldHVybiB7QXJyYXkuPHN0cmluZ3xmdW5jdGlvbj59XG4gKi9cbmxldCBfZ2V0Q29tcGlsZWRMYXlvdXQgPSBmdW5jdGlvbiAobGF5b3V0KSB7XG5cblx0aWYgKF9jb21waWxlZExheW91dHNbbGF5b3V0XSkge1xuXHRcdHJldHVybiBfY29tcGlsZWRMYXlvdXRzW2xheW91dF07XG5cdH1cblxuXHRyZXR1cm4gX2NvbXBpbGVMYXlvdXQobGF5b3V0KTtcblxufTtcblxuLyoqXG4gKiBDb21waWxlcyBhIGxheW91dCBpbnRvIGFuIGFycmF5LiBUaGUgYXJyYXkgY29udGFpbnMgZnVuY3Rpb25zXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxheW91dFxuICpcbiAqIEByZXR1cm4ge0FycmF5LjxzdHJpbmd8ZnVuY3Rpb24+fVxuICovXG5sZXQgX2NvbXBpbGVMYXlvdXQgPSBmdW5jdGlvbiAobGF5b3V0KSB7XG5cblx0bGV0IGluZGV4ID0gbGF5b3V0LmluZGV4T2YoJyUnKTtcblx0bGV0IGN1cnJlbnRGb3JtYXRTdHJpbmcgPSAnJztcblx0bGV0IGZvcm1hdEFycmF5ID0gW107XG5cblx0aWYgKGluZGV4ICE9IDApIHtcblx0XHRmb3JtYXRBcnJheS5wdXNoKGxheW91dC5zdWJzdHJpbmcoMCwgaW5kZXgpKTtcblx0fVxuXG5cdGRvIHtcblxuXHRcdGxldCBzdGFydEluZGV4ID0gaW5kZXg7XG5cdFx0bGV0IGVuZEluZGV4ID0gaW5kZXggPSBsYXlvdXQuaW5kZXhPZignJScsIGluZGV4ICsgMSk7XG5cblx0XHRpZiAoZW5kSW5kZXggPCAwKSB7XG5cdFx0XHRjdXJyZW50Rm9ybWF0U3RyaW5nID0gbGF5b3V0LnN1YnN0cmluZyhzdGFydEluZGV4KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y3VycmVudEZvcm1hdFN0cmluZyA9IGxheW91dC5zdWJzdHJpbmcoc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuXHRcdH1cblxuXHRcdGZvcm1hdEFycmF5LnB1c2goX2dldEZvcm1hdHRlck9iamVjdChjdXJyZW50Rm9ybWF0U3RyaW5nKSk7XG5cblx0fSB3aGlsZSAoaW5kZXggPiAtMSk7XG5cbiAgICAvLyBzZXQgdGhlIGZvcm1hdCBhcnJheSB0byB0aGUgc3BlY2lmaWVkIGNvbXBpbGVkIGxheW91dFxuXHRfY29tcGlsZWRMYXlvdXRzW2xheW91dF0gPSBmb3JtYXRBcnJheTtcblxuXHRyZXR1cm4gZm9ybWF0QXJyYXk7XG5cbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyT2YgZm9ybWF0dGVyXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1hdFN0cmluZ1xuICpcbiAqIEByZXR1cm4ge09iamVjdHxzdHJpbmd9XG4gKi9cbmxldCBfZ2V0Rm9ybWF0dGVyT2JqZWN0ID0gZnVuY3Rpb24gKGZvcm1hdFN0cmluZykge1xuXG5cdGxldCByZXN1bHQgPSBfQ09NTUFORF9SRUdFWC5leGVjKGZvcm1hdFN0cmluZyk7XG5cdGlmIChyZXN1bHQgIT0gbnVsbCAmJiByZXN1bHQubGVuZ3RoID09IDIpIHtcblxuXHRcdGxldCBmb3JtYXR0ZXIgPSBfZ2V0Rm9ybWF0dGVyRnVuY3Rpb24ocmVzdWx0WzFdKTtcblx0XHRpZiAoIWZvcm1hdHRlcikge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0bGV0IHBhcmFtcyA9IF9nZXRMYXlvdXRUYWdQYXJhbXMoZm9ybWF0U3RyaW5nKTtcblxuXHRcdGxldCBhZnRlciA9ICcnO1xuXHRcdGxldCBlbmRJbmRleCA9IGZvcm1hdFN0cmluZy5sYXN0SW5kZXhPZignfScpO1xuXHRcdGlmIChlbmRJbmRleCAhPSAtMSkge1xuXHRcdFx0YWZ0ZXIgPSBmb3JtYXRTdHJpbmcuc3Vic3RyaW5nKGVuZEluZGV4ICsgMSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFmdGVyID0gZm9ybWF0U3RyaW5nLnN1YnN0cmluZyhyZXN1bHQuaW5kZXggKyByZXN1bHRbMV0ubGVuZ3RoICsgMSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdCdmb3JtYXR0ZXInIDogZm9ybWF0dGVyLFxuXHRcdFx0J3BhcmFtcycgOiBwYXJhbXMsXG5cdFx0XHQnYWZ0ZXInIDogYWZ0ZXJcblx0XHR9O1xuXG5cdH1cblxuXHRyZXR1cm4gZm9ybWF0U3RyaW5nO1xuXG59O1xuXG4vKipcbiAqIERldGVybWluZXMgd2hhdCBmb3JtYXR0ZXIgZnVuY3Rpb24gaGFzIGJlZW4gY29uZmlndXJlZFxuICpcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21tYW5kXG4gKlxuICogQHJldHVybiB7P3N0cmluZ31cbiAqL1xubGV0IF9nZXRGb3JtYXR0ZXJGdW5jdGlvbiA9IGZ1bmN0aW9uIChjb21tYW5kKSB7XG5cblx0bGV0IHJlZ2V4O1xuXHRmb3IgKGxldCBrZXkgaW4gX2Zvcm1hdHRlcnMpIHtcbiAgICAgICAgaWYgKF9mb3JtYXR0ZXJzLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgIHJlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsga2V5ICsgJykkJyk7XG4gICAgICAgICAgICBpZiAocmVnZXguZXhlYyhjb21tYW5kKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfZm9ybWF0dGVyc1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cdH1cblxuXHRyZXR1cm4gbnVsbDtcblxufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBsYXlvdXQgdGFnIHBhcmFtcyBhc3NvY2lhdGVkIHdpdGggdGhlIGxheW91dCB0YWcuIFNvLCBmb3IgZXhhbXBsZSwgJyVke3l5eXktTU0tZGR9YFxuICogd291bGQgb3V0cHV0IGFuIGFycmF5IG9mIFsneXl5eS1NTS1kZCddXG4gKlxuICogQHByaXZhdGVcbiAqIEBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21tYW5kXG4gKlxuICogQHJldHVybiB7QXJyYXkuPHN0cmluZz59XG4gKi9cbmxldCBfZ2V0TGF5b3V0VGFnUGFyYW1zID0gZnVuY3Rpb24gKGNvbW1hbmQpIHtcblxuXHRsZXQgcGFyYW1zID0gW107XG5cdGxldCByZXN1bHQgPSBjb21tYW5kLm1hdGNoKC9cXHsoW159XSopKD89fSkvZyk7XG5cdGlmIChyZXN1bHQgIT0gbnVsbCkge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRwYXJhbXMucHVzaChyZXN1bHRbaV0uc3Vic3RyaW5nKDEpKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcGFyYW1zO1xuXG59O1xuXG4vKipcbiAqIEhhbmRsZXMgZm9ybWF0dGluZyB0aGUgbG9nIGV2ZW50IHVzaW5nIHRoZSBzcGVjaWZpZWQgZm9ybWF0dGVyIGFycmF5XG4gKlxuICogQHByaXZhdGVcbiAqIEBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7QXJyYXkuPGZ1bmN0aW9ufHN0cmluZz59IGZvcm1hdHRlclxuICogQHBhcmFtIHtMT0dfRVZFTlR9IGxvZ0V2ZW50XG4gKlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5sZXQgX2Zvcm1hdExvZ0V2ZW50ID0gZnVuY3Rpb24gKGZvcm1hdHRlciwgbG9nRXZlbnQpIHtcblxuXHRsZXQgcmVzcG9uc2U7XG5cdGxldCBtZXNzYWdlID0gJyc7XG5cdGxldCBjb3VudCA9IGZvcm1hdHRlci5sZW5ndGg7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuXHRcdGlmIChmb3JtYXR0ZXJbaV0gIT09IG51bGwpIHtcblxuXHRcdFx0aWYgKGZvcm1hdHRlcltpXSBpbnN0YW5jZW9mIE9iamVjdCkge1xuXG5cdFx0XHRcdHJlc3BvbnNlID0gZm9ybWF0dGVyW2ldLmZvcm1hdHRlcihsb2dFdmVudCwgZm9ybWF0dGVyW2ldLnBhcmFtcyk7XG5cdFx0XHRcdGlmIChyZXNwb25zZSAhPSBudWxsKSB7XG5cdFx0XHRcdFx0bWVzc2FnZSArPSByZXNwb25zZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRtZXNzYWdlICs9IGZvcm1hdHRlcltpXS5hZnRlcjtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bWVzc2FnZSArPSBmb3JtYXR0ZXJbaV07XG5cdFx0XHR9XG5cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbWVzc2FnZS50cmltKCk7XG5cbn07XG5cbi8qKlxuICpcbiAqIEBwcml2YXRlXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqXG4gKiBAcGFyYW0ge0xPR19FVkVOVH0gbG9nRXZlbnRcbiAqL1xubGV0IF9nZXRGaWxlRGV0YWlscyA9IGZ1bmN0aW9uIChsb2dFdmVudCkge1xuXG5cdGlmIChsb2dFdmVudC5sb2dFcnJvclN0YWNrKSB7XG5cblx0XHRsZXQgcGFydHMgPSBsb2dFdmVudC5sb2dFcnJvclN0YWNrLnN0YWNrLnNwbGl0KC9cXG4vZyk7XG5cdFx0bGV0IGZpbGUgPSBwYXJ0c1szXTtcblx0XHRmaWxlID0gZmlsZS5yZXBsYWNlKC9hdCAoLipcXCh8KShmaWxlfGh0dHB8aHR0cHN8KSg6fCkoXFwvfCkqLywgJycpO1xuXHRcdGZpbGUgPSBmaWxlLnJlcGxhY2UoJyknLCAnJyk7XG5cdFx0ZmlsZSA9IGZpbGUucmVwbGFjZSgodHlwZW9mIGxvY2F0aW9uICE9PSAndW5kZWZpbmVkJykgPyBsb2NhdGlvbi5ob3N0IDogJycsICcnKS50cmltKCk7XG5cblx0XHRsZXQgZmlsZVBhcnRzID0gZmlsZS5zcGxpdCgvXFw6L2cpO1xuXG5cdFx0bG9nRXZlbnQuY29sdW1uID0gZmlsZVBhcnRzLnBvcCgpO1xuXHRcdGxvZ0V2ZW50LmxpbmVOdW1iZXIgPSBmaWxlUGFydHMucG9wKCk7XG5cblx0XHRpZiAodHlwZW9mIGRlZmluZSAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdGxldCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXHRcdFx0bGV0IGFwcERpciA9IHBhdGguZGlybmFtZShyZXF1aXJlLm1haW4uZmlsZW5hbWUpO1xuXHRcdFx0aWYgKCFmaWxlUGFydHNbMF0uc3RhcnRzV2l0aChhcHBEaXIpKSB7XG5cdFx0XHRcdGFwcERpciA9ICcnO1xuXHRcdFx0fVxuXHRcdFx0bG9nRXZlbnQuZmlsZW5hbWUgPSBmaWxlUGFydHMuam9pbignOicpLnJlcGxhY2UoYXBwRGlyLCAnJykucmVwbGFjZSgvXihcXFxcfFxcLykvLCAnJyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGxvZ0V2ZW50LmZpbGVuYW1lID0gZmlsZVBhcnRzLmpvaW4oJzonKTtcblx0XHR9XG5cblx0fSBlbHNlIHtcblxuXHRcdGxvZ0V2ZW50LmNvbHVtbiA9ICc/Jztcblx0XHRsb2dFdmVudC5maWxlbmFtZSA9ICdhbm9ueW1vdXMnO1xuXHRcdGxvZ0V2ZW50LmxpbmVOdW1iZXIgPSAnPyc7XG5cblx0fVxuXHRsb2dFdmVudC5maWxlID0gbG9nRXZlbnQuZmlsZW5hbWU7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlck9mIGZvcm1hdHRlclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYXlvdXRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVDb21waWxlKGxheW91dCkge1xuXHRfZ2V0Q29tcGlsZWRMYXlvdXQobGF5b3V0KTtcbn1cblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBmb3JtYXR0ZXJcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbGF5b3V0XG4gKiBAcGFyYW0ge0xPR19FVkVOVH0gbG9nRXZlbnRcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXQobGF5b3V0LCBsb2dFdmVudCkge1xuXHRyZXR1cm4gX2Zvcm1hdExvZ0V2ZW50KF9nZXRDb21waWxlZExheW91dChsYXlvdXQpLCBsb2dFdmVudCk7XG59XG4iXX0= /***/ }), /* 2 */ diff --git a/dist/log4js2.es5.min.js b/dist/log4js2.es5.min.js index ca81b33..7de89c1 100644 --- a/dist/log4js2.es5.min.js +++ b/dist/log4js2.es5.min.js @@ -1 +1 @@ -!function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n():"function"==typeof define&&define.amd?define([],n):"object"==typeof exports?exports.log4js=n():e.log4js=n()}(this,function(){return function(e){function n(r){if(t[r])return t[r].exports;var o=t[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var t={};return n.m=e,n.c=t,n.p="",n(0)}([function(e,n,t){"use strict";function r(e){if(e&&e.__esModule)return e;var n={};if(null!=e)for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&(n[t]=e[t]);return n.default=e,n}function o(e){if(w)return void console.error("Could not configure - already in use");M||(M={}),e.layout||M.layout?e.layout&&(M.layout=e.layout):M.layout=L.layout,E(e.appenders),O(e.loggers)}function i(e){if(w&&!M.allowAppenderInjection)return void console.error("Cannot add appender when configuration finalized");R(e),A[e.name]||(A[e.name]=e)}function u(e){w=!0,(T[e.logger]||T[h]).forEach(function(n){n.isActive(e.level)&&n.append(e)})}function a(e){return M||o(L),"string"!=typeof e&&("function"==typeof e?e=p.getFunctionName(e):"object"==(void 0===e?"undefined":s(e))?"Object"==(e=p.getFunctionName(e.constructor))&&(e="anonymous"):e=h),new d.Logger(e,{append:u})}function l(e,n){if(e instanceof Number)if(n)T[n]&&T[n].setLogLevel(e);else for(var t in T)T.hasOwnProperty(t)&&T[t].forEach(function(n){n.setLogLevel(e)})}n.__esModule=!0,n.LogAppender=n.LogLevel=void 0;var s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};n.configure=o,n.addAppender=i,n.getLogger=a,n.setLogLevel=l;var c=t(1),f=(r(c),t(3)),p=r(f),g=t(7),d=t(8),v=t(4),y=t(9),h="main",m=[{appender:y.ConsoleAppender,level:v.LogLevel.INFO}],L={allowAppenderInjection:!0,appenders:m,loggers:[{level:v.LogLevel.INFO}],layout:"%d [%p] %c - %m"},b=["append","getName","isActive","setLogLevel","setLayout"],A={},M=null,w=!1,T={},E=function(e){e instanceof Array||(e=m),e.forEach(function(e){e instanceof Function&&i(e)})},O=function(e){if(!(e instanceof Array))throw new Error("Invalid loggers");e.forEach(function(e){e.layout&&"string"==typeof e.layout||(e.layout=M.layout),e.tag=e.tag||h,e.logLevel=e.logLevel||v.LogLevel.ERROR,T[e.tag]=S(e.logLevel,e.layout)})},S=function(e,n){var t=void 0,r=[];return Object.keys(A).forEach(function(o){t=A[o].prototype instanceof g.LogAppender?new A[o]:A[o](),t.setLogLevel(e),t.setLayout(n),r.push(t)}),r},R=function(e){if(!(e.prototype instanceof g.LogAppender)){if(!(e instanceof Function))throw new Error("Invalid appender: not a function or class LogAppender");var n=e();b.forEach(function(e){if(void 0==n[e]||!(n[e]instanceof Function))throw new Error("Invalid appender: missing/invalid method: "+e)})}};i(y.ConsoleAppender),n.LogLevel=v.LogLevel,n.LogAppender=g.LogAppender},function(e,n,t){"use strict";function r(e){T(e)}function o(e,n){return F(T(e),n)}n.__esModule=!0,n.preCompile=r,n.format=o;var i=t(2),u=t(3),a=function(e){if(e&&e.__esModule)return e;var n={};if(null!=e)for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&(n[t]=e[t]);return n.default=e,n}(u),l=t(4),s=/%([a-z,A-Z]+)(?=\{|)/,c={},f=function(e){return e.logger},p=function(e,n){return(0,i.dateFormat)(e.date,n[0])},g=function(e){var n="";if(null!=e.error)if(void 0!=e.error.stack){var t=e.error.stack.split(/\n/g);t.forEach(function(e){n+="\t"+e+"\n"})}else null!=e.error.message&&""!=e.error.message&&(n+="\t"+e.error.name+": "+e.error.message+"\n");return n},d=function(e){return e.file||j(e),e.file},v=function(e){return e.lineNumber||j(e),""+e.lineNumber},y=function(e,n){var t=null;if(e.properties){t=[];for(var r in e.properties)n[0]?n[0]==r&&t.push(e.properties[r]):t.push("{"+r+","+e.properties[r]+"}");return"{"+t.join(",")+"}"}return t},h=function(e){return e.message},m=function(e){return a.getFunctionName(e.method)},L=function(){return"\n"},b=function(e){switch(e.level){case l.LogLevel.FATAL:return"FATAL";case l.LogLevel.ERROR:return"ERROR";case l.LogLevel.WARN:return"WARN";case l.LogLevel.INFO:return"INFO";case l.LogLevel.DEBUG:return"DEBUG";case l.LogLevel.TRACE:default:return"TRACE"}},A=function(e){return""+e.relative},M=function(e){return""+e.sequence},w={"c|logger":f,"d|date":p,"ex|exception|throwable":g,"F|file":d,"K|map|MAP":y,"L|line":v,"m|msg|message":h,"M|method":m,n:L,"p|level":b,"r|relative":A,"sn|sequenceNumber":M},T=function(e){return c[e]?c[e]:E(e)},E=function(e){var n=e.indexOf("%"),t="",r=[];0!=n&&r.push(e.substring(0,n));do{var o=n,i=n=e.indexOf("%",n+1);t=i<0?e.substring(o):e.substring(o,i),r.push(O(t))}while(n>-1);return c[e]=r,r},O=function(e){var n=s.exec(e);if(null!=n&&2==n.length){var t=S(n[1]);if(!t)return null;var r=R(e),o="",i=e.lastIndexOf("}");return o=-1!=i?e.substring(i+1):e.substring(n.index+n[1].length+1),{formatter:t,params:r,after:o}}return e},S=function(e){var n=void 0;for(var t in w)if(w.hasOwnProperty(t)&&(n=new RegExp("^("+t+")$"),n.exec(e)))return w[t];return null},R=function(e){var n=[],t=e.match(/\{([^}]*)(?=})/g);if(null!=t)for(var r=0;r0?"-":"+")+t(100*Math.floor(Math.abs(h)/60)+Math.abs(h)%60,4)};return n.replace(i,function(e){return e in m?m[e]:e})}n.__esModule=!0,n.dateFormat=r;var o={d:["Sun","Mon","Tue","Wed","Thu","Fri","Sat","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],m:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","January","February","March","April","May","June","July","August","September","October","November","December"]},i=/d{1,4}|M{1,4}|yy(?:yy)?|([HhmsAa])\1?|[LloSZ]|'[^']*'|'[^']*'/g,u=/\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,a=/[^-+\dA-Z]/g,l={DEFAULT:"yyyy-MM-dd HH:mm:ss,S",ABSOLUTE:"HH:MM:ss,S",COMPACT:"yyyyMMddHHmmssS",DATE:"dd MMM yyyy HH:mm:ss,S",ISO8601:"yyyy-MM-ddTHH:mm:ss,S",ISO8601_BASIC:"yyyyMMddTHHmmss,S"}},function(e,n){"use strict";function t(e){var n=e.toString().substring("function ".length);return n=n.substring(0,n.indexOf("(")),n&&n.trim()?n:"anonymous"}n.__esModule=!0,n.getFunctionName=t},function(e,n){"use strict";n.__esModule=!0;n.LogLevel={OFF:0,FATAL:100,ERROR:200,WARN:300,INFO:400,DEBUG:500,TRACE:600,ALL:2147483647}},function(e,n,t){(function(e){function t(e,n){for(var t=0,r=e.length-1;r>=0;r--){var o=e[r];"."===o?e.splice(r,1):".."===o?(e.splice(r,1),t++):t&&(e.splice(r,1),t--)}if(n)for(;t--;t)e.unshift("..");return e}function r(e,n){if(e.filter)return e.filter(n);for(var t=[],r=0;r=-1&&!o;i--){var u=i>=0?arguments[i]:e.cwd();if("string"!=typeof u)throw new TypeError("Arguments to path.resolve must be strings");u&&(n=u+"/"+n,o="/"===u.charAt(0))}return n=t(r(n.split("/"),function(e){return!!e}),!o).join("/"),(o?"/":"")+n||"."},n.normalize=function(e){var o=n.isAbsolute(e),i="/"===u(e,-1);return e=t(r(e.split("/"),function(e){return!!e}),!o).join("/"),e||o||(e="."),e&&i&&(e+="/"),(o?"/":"")+e},n.isAbsolute=function(e){return"/"===e.charAt(0)},n.join=function(){var e=Array.prototype.slice.call(arguments,0);return n.normalize(r(e,function(e,n){if("string"!=typeof e)throw new TypeError("Arguments to path.join must be strings");return e}).join("/"))},n.relative=function(e,t){function r(e){for(var n=0;n=0&&""===e[t];t--);return n>t?[]:e.slice(n,t-n+1)}e=n.resolve(e).substr(1),t=n.resolve(t).substr(1);for(var o=r(e.split("/")),i=r(t.split("/")),u=Math.min(o.length,i.length),a=u,l=0;l1)for(var t=1;t-1&&console.log(n)},u(n,null,[{key:"name",get:function(){return"console"}}]),n}(a.LogAppender)}])}); \ No newline at end of file +!function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n():"function"==typeof define&&define.amd?define([],n):"object"==typeof exports?exports.log4js=n():e.log4js=n()}(this,function(){return function(e){function n(r){if(t[r])return t[r].exports;var o=t[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var t={};return n.m=e,n.c=t,n.p="",n(0)}([function(e,n,t){"use strict";function r(e){if(e&&e.__esModule)return e;var n={};if(null!=e)for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&(n[t]=e[t]);return n.default=e,n}function o(e){if(w)return void console.error("Could not configure - already in use");M||(M={}),e.layout||M.layout?e.layout&&(M.layout=e.layout):M.layout=L.layout,E(e.appenders),O(e.loggers)}function i(e){if(w&&!M.allowAppenderInjection)return void console.error("Cannot add appender when configuration finalized");R(e),A[e.name]||(A[e.name]=e)}function u(e){w=!0,(T[e.logger]||T[m]).forEach(function(n){n.isActive(e.level)&&n.append(e)})}function a(e){return M||o(L),"string"!=typeof e&&("function"==typeof e?e=p.getFunctionName(e):"object"===(void 0===e?"undefined":s(e))?"Object"===(e=p.getFunctionName(e.constructor))&&(e="anonymous"):e=m),new d.Logger(e,{append:u})}function l(e,n){if(Number.isInteger(e))if(n)T[n]&&T[n].setLogLevel(e);else for(var t in T)T.hasOwnProperty(t)&&T[t].forEach(function(n){n.setLogLevel(e)})}n.__esModule=!0,n.LogAppender=n.LogLevel=void 0;var s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};n.configure=o,n.addAppender=i,n.getLogger=a,n.setLogLevel=l;var c=t(1),f=(r(c),t(3)),p=r(f),g=t(7),d=t(8),v=t(4),y=t(9),m="main",h=[{appender:y.ConsoleAppender,level:v.LogLevel.INFO}],L={allowAppenderInjection:!0,appenders:h,loggers:[{level:v.LogLevel.INFO}],layout:"%d [%p] %c - %m"},b=["append","getName","isActive","setLogLevel","setLayout"],A={},M=null,w=!1,T={},E=function(e){e instanceof Array||(e=h),e.forEach(function(e){e instanceof Function&&i(e)})},O=function(e){if(!(e instanceof Array))throw new Error("Invalid loggers");e.forEach(function(e){e.layout&&"string"==typeof e.layout||(e.layout=M.layout),e.tag=e.tag||m,e.logLevel=e.logLevel||v.LogLevel.ERROR,T[e.tag]=S(e.logLevel,e.layout)})},S=function(e,n){var t=void 0,r=[];return Object.keys(A).forEach(function(o){t=A[o].prototype instanceof g.LogAppender?new A[o]:A[o](),t.setLogLevel(e),t.setLayout(n),r.push(t)}),r},R=function(e){if(!(e.prototype instanceof g.LogAppender)){if(!(e instanceof Function))throw new Error("Invalid appender: not a function or class LogAppender");var n=e();b.forEach(function(e){if(void 0==n[e]||!(n[e]instanceof Function))throw new Error("Invalid appender: missing/invalid method: "+e)})}};i(y.ConsoleAppender),n.LogLevel=v.LogLevel,n.LogAppender=g.LogAppender},function(e,n,t){"use strict";function r(e){E(e)}function o(e,n){return j(E(e),n)}n.__esModule=!0,n.preCompile=r,n.format=o;var i=t(2),u=t(3),a=function(e){if(e&&e.__esModule)return e;var n={};if(null!=e)for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&(n[t]=e[t]);return n.default=e,n}(u),l=t(4),s=/%([a-z,A-Z]+)(?=\{|)/,c={},f=function(e){return e.logger},p=function(e,n){return(0,i.dateFormat)(e.date,n[0])},g=function(e){var n="";if(null!=e.error)if(void 0!=e.error.stack){var t=e.error.stack.split(/\n/g);t.forEach(function(e){n+="\t"+e+"\n"})}else null!=e.error.message&&""!=e.error.message&&(n+="\t"+e.error.name+": "+e.error.message+"\n");return n},d=function(e){return e.file||_(e),e.file},v=function(e){return e.lineNumber||_(e),""+e.lineNumber},y=function(e){return e.column||_(e),""+e.column},m=function(e,n){var t=null;if(e.properties){t=[];for(var r in e.properties)n[0]?n[0]==r&&t.push(e.properties[r]):t.push("{"+r+","+e.properties[r]+"}");return"{"+t.join(",")+"}"}return t},h=function(e){return e.message},L=function(e){return a.getFunctionName(e.method)},b=function(){return"\n"},A=function(e){switch(e.level){case l.LogLevel.FATAL:return"FATAL";case l.LogLevel.ERROR:return"ERROR";case l.LogLevel.WARN:return"WARN";case l.LogLevel.INFO:return"INFO";case l.LogLevel.DEBUG:return"DEBUG";case l.LogLevel.TRACE:default:return"TRACE"}},M=function(e){return""+e.relative},w=function(e){return""+e.sequence},T={"c|logger":f,"d|date":p,"ex|exception|throwable":g,"F|file":d,"K|map|MAP":m,"L|line":v,column:y,"m|msg|message":h,"M|method":L,n:b,"p|level":A,"r|relative":M,"sn|sequenceNumber":w},E=function(e){return c[e]?c[e]:O(e)},O=function(e){var n=e.indexOf("%"),t="",r=[];0!=n&&r.push(e.substring(0,n));do{var o=n,i=n=e.indexOf("%",n+1);t=i<0?e.substring(o):e.substring(o,i),r.push(S(t))}while(n>-1);return c[e]=r,r},S=function(e){var n=s.exec(e);if(null!=n&&2==n.length){var t=R(n[1]);if(!t)return null;var r=F(e),o="",i=e.lastIndexOf("}");return o=-1!=i?e.substring(i+1):e.substring(n.index+n[1].length+1),{formatter:t,params:r,after:o}}return e},R=function(e){var n=void 0;for(var t in T)if(T.hasOwnProperty(t)&&(n=new RegExp("^("+t+")$"),n.exec(e)))return T[t];return null},F=function(e){var n=[],t=e.match(/\{([^}]*)(?=})/g);if(null!=t)for(var r=0;r0?"-":"+")+t(100*Math.floor(Math.abs(m)/60)+Math.abs(m)%60,4)};return n.replace(i,function(e){return e in h?h[e]:e})}n.__esModule=!0,n.dateFormat=r;var o={d:["Sun","Mon","Tue","Wed","Thu","Fri","Sat","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],m:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","January","February","March","April","May","June","July","August","September","October","November","December"]},i=/d{1,4}|M{1,4}|yy(?:yy)?|([HhmsAa])\1?|[LloSZ]|'[^']*'|'[^']*'/g,u=/\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,a=/[^-+\dA-Z]/g,l={DEFAULT:"yyyy-MM-dd HH:mm:ss,S",ABSOLUTE:"HH:MM:ss,S",COMPACT:"yyyyMMddHHmmssS",DATE:"dd MMM yyyy HH:mm:ss,S",ISO8601:"yyyy-MM-ddTHH:mm:ss,S",ISO8601_BASIC:"yyyyMMddTHHmmss,S"}},function(e,n){"use strict";function t(e){var n=e.toString().substring("function ".length);return n=n.substring(0,n.indexOf("(")),n&&n.trim()?n:"anonymous"}n.__esModule=!0,n.getFunctionName=t},function(e,n){"use strict";n.__esModule=!0;n.LogLevel={OFF:0,FATAL:100,ERROR:200,WARN:300,INFO:400,DEBUG:500,TRACE:600,ALL:2147483647}},function(e,n,t){(function(e){function t(e,n){for(var t=0,r=e.length-1;r>=0;r--){var o=e[r];"."===o?e.splice(r,1):".."===o?(e.splice(r,1),t++):t&&(e.splice(r,1),t--)}if(n)for(;t--;t)e.unshift("..");return e}function r(e,n){if(e.filter)return e.filter(n);for(var t=[],r=0;r=-1&&!o;i--){var u=i>=0?arguments[i]:e.cwd();if("string"!=typeof u)throw new TypeError("Arguments to path.resolve must be strings");u&&(n=u+"/"+n,o="/"===u.charAt(0))}return n=t(r(n.split("/"),function(e){return!!e}),!o).join("/"),(o?"/":"")+n||"."},n.normalize=function(e){var o=n.isAbsolute(e),i="/"===u(e,-1);return e=t(r(e.split("/"),function(e){return!!e}),!o).join("/"),e||o||(e="."),e&&i&&(e+="/"),(o?"/":"")+e},n.isAbsolute=function(e){return"/"===e.charAt(0)},n.join=function(){var e=Array.prototype.slice.call(arguments,0);return n.normalize(r(e,function(e,n){if("string"!=typeof e)throw new TypeError("Arguments to path.join must be strings");return e}).join("/"))},n.relative=function(e,t){function r(e){for(var n=0;n=0&&""===e[t];t--);return n>t?[]:e.slice(n,t-n+1)}e=n.resolve(e).substr(1),t=n.resolve(t).substr(1);for(var o=r(e.split("/")),i=r(t.split("/")),u=Math.min(o.length,i.length),a=u,l=0;l1)for(var t=1;t-1&&console.log(n)},u(n,null,[{key:"name",get:function(){return"console"}}]),n}(a.LogAppender)}])}); \ No newline at end of file diff --git a/dist/log4js2.es6.min.js b/dist/log4js2.es6.min.js index f4efa52..b18edeb 100644 --- a/dist/log4js2.es6.min.js +++ b/dist/log4js2.es6.min.js @@ -2,22 +2,22 @@ exports.addAppender=addAppender;exports.getLogger=getLogger;exports.setLogLevel=setLogLevel;var _formatter=__webpack_require__(1);var formatter=_interopRequireWildcard(_formatter);var _utility=__webpack_require__(3);var utility=_interopRequireWildcard(_utility);var _appender=__webpack_require__(7);var _logger=__webpack_require__(8);var _logLevel=__webpack_require__(4);var _consoleAppender=__webpack_require__(9);function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key)){newObj[key]=obj[key]}}}newObj.default=obj;return newObj}}let APPENDER;let CONFIG_PARAMS;const _MAIN_LOGGER='main';const _DEFAULT_APPENDERS=[{'appender':_consoleAppender.ConsoleAppender,'level':_logLevel.LogLevel.INFO}];const _DEFAULT_CONFIG={'allowAppenderInjection':true,'appenders':_DEFAULT_APPENDERS,'loggers':[{'level':_logLevel.LogLevel.INFO}],'layout':'%d [%p] %c - %m'}; const _APPENDER_METHODS=['append','getName','isActive','setLogLevel','setLayout'];let _appenders={};let _configuration=null;let _finalized=false;let _loggers={};function configure(config){if(_finalized){console.error('Could not configure - already in use');return}if(!_configuration){_configuration={}}if(!config.layout&&!_configuration.layout){_configuration.layout=_DEFAULT_CONFIG.layout}else if(config.layout){_configuration.layout=config.layout}_configureAppenders(config.appenders);_configureLoggers(config.loggers)}let _configureAppenders=function(appenders){if(!(appenders instanceof Array)){appenders=_DEFAULT_APPENDERS}appenders.forEach(appender=>{if(appender instanceof Function){addAppender(appender)}})};let _configureLoggers=function(loggers){if(!(loggers instanceof Array)){throw new Error('Invalid loggers')}loggers.forEach(function(logger){if(!logger.layout||typeof logger.layout!=='string'){logger.layout=_configuration.layout}logger.tag=logger.tag||_MAIN_LOGGER;logger.logLevel=logger. logLevel||_logLevel.LogLevel.ERROR;_loggers[logger.tag]=_getAppendersForLogger(logger.logLevel,logger.layout)})};let _getAppendersForLogger=function(logLevel,layout){let logger;let appenderList=[];Object.keys(_appenders).forEach(function(key){logger=_appenders[key].prototype instanceof _appender.LogAppender?new _appenders[key]():_appenders[key]();logger.setLogLevel(logLevel);logger.setLayout(layout);appenderList.push(logger)});return appenderList};function addAppender(appender){if(_finalized&&!_configuration.allowAppenderInjection){console.error('Cannot add appender when configuration finalized');return}_validateAppender(appender);if(!_appenders[appender.name]){_appenders[appender.name]=appender}}let _validateAppender=function(appender){if(appender.prototype instanceof _appender.LogAppender){return}else if(!(appender instanceof Function)){throw new Error('Invalid appender: not a function or class LogAppender')}let appenderObj=appender(); -_APPENDER_METHODS.forEach(function(element){if(appenderObj[element]==undefined||!(appenderObj[element]instanceof Function)){throw new Error(`Invalid appender: missing/invalid method: ${ element }`)}})};function _append(logEvent){_finalized=true;(_loggers[logEvent.logger]||_loggers[_MAIN_LOGGER]).forEach(function(logger){if(logger.isActive(logEvent.level)){logger.append(logEvent)}})}function getLogger(context){if(!_configuration){configure(_DEFAULT_CONFIG)}if(typeof context!='string'){if(typeof context=='function'){context=utility.getFunctionName(context)}else if(typeof context=='object'){context=utility.getFunctionName(context.constructor);if(context=='Object'){context='anonymous'}}else{context=_MAIN_LOGGER}}return new _logger.Logger(context,{'append':_append})}function setLogLevel(logLevel,logger){if(logLevel instanceof Number){if(logger){if(_loggers[logger]){_loggers[logger].setLogLevel(logLevel)}}else{for(let key in _loggers){if(_loggers.hasOwnProperty(key)){_loggers[key].forEach(function( -appender){appender.setLogLevel(logLevel)})}}}}}addAppender(_consoleAppender.ConsoleAppender);exports.LogLevel=_logLevel.LogLevel;exports.LogAppender=_appender.LogAppender;}),(function(module,exports,__webpack_require__){'use strict';Object.defineProperty(exports,"__esModule",{value:true});exports.preCompile=preCompile;exports.format=format;var _dateFormatter=__webpack_require__(2);var _utility=__webpack_require__(3);var utility=_interopRequireWildcard(_utility);var _logLevel=__webpack_require__(4);function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key)){newObj[key]=obj[key]}}}newObj.default=obj;return newObj}}const _COMMAND_REGEX=/%([a-z,A-Z]+)(?=\{|)/;let _compiledLayouts={};let _formatLogger=function(logEvent){return logEvent.logger};let _formatDate=function(logEvent,params){return((0,_dateFormatter.dateFormat)(logEvent.date,params[0]))}; -let _formatException=function(logEvent){let message='';if(logEvent.error!=null){if(logEvent.error.stack!=undefined){let stacks=logEvent.error.stack.split(/\n/g);stacks.forEach(function(stack){message+=`\t${ stack }\n`})}else if(logEvent.error.message!=null&&logEvent.error.message!=''){message+=`\t${logEvent.error.name }: ${logEvent.error.message }\n`}}return message};let _formatFile=function(logEvent){if(!logEvent.file){_getFileDetails(logEvent)}return logEvent.file};let _formatLineNumber=function(logEvent){if(!logEvent.lineNumber){_getFileDetails(logEvent)}return `${logEvent.lineNumber }`};let _formatMapMessage=function(logEvent,params){let message=null;if(logEvent.properties){message=[];for(let key in logEvent.properties){if(params[0]){if(params[0]==key){message.push(logEvent.properties[key])}}else{message.push('{'+key+','+logEvent.properties[key]+'}')}}return '{'+message.join(',')+'}'}return message}; -let _formatLogMessage=function(logEvent){return logEvent.message};let _formatMethodName=function(logEvent){return utility.getFunctionName(logEvent.method)};let _formatLineSeparator=function(){return '\n'};let _formatLevel=function(logEvent){switch(logEvent.level){case _logLevel.LogLevel.FATAL:return 'FATAL';case _logLevel.LogLevel.ERROR:return 'ERROR';case _logLevel.LogLevel.WARN:return 'WARN';case _logLevel.LogLevel.INFO:return 'INFO';case _logLevel.LogLevel.DEBUG:return 'DEBUG';case _logLevel.LogLevel.TRACE:default:return 'TRACE'}};let _formatRelative=function(logEvent){return ''+logEvent.relative};let _formatSequenceNumber=function(logEvent){return ''+logEvent.sequence};let _formatters={'c|logger':_formatLogger,'d|date':_formatDate,'ex|exception|throwable':_formatException,'F|file':_formatFile,'K|map|MAP':_formatMapMessage,'L|line':_formatLineNumber,'m|msg|message':_formatLogMessage,'M|method':_formatMethodName,'n':_formatLineSeparator,'p|level':_formatLevel,'r|relative':_formatRelative, -'sn|sequenceNumber':_formatSequenceNumber};let _getCompiledLayout=function(layout){if(_compiledLayouts[layout]){return _compiledLayouts[layout]}return _compileLayout(layout)};let _compileLayout=function(layout){let index=layout.indexOf('%');let currentFormatString='';let formatArray=[];if(index!=0){formatArray.push(layout.substring(0,index))}do{let startIndex=index;let endIndex=index=layout.indexOf('%',index+1);if(endIndex<0){currentFormatString=layout.substring(startIndex)}else{currentFormatString=layout.substring(startIndex,endIndex)}formatArray.push(_getFormatterObject(currentFormatString))}while(index>-1);_compiledLayouts[layout]=formatArray;return formatArray};let _getFormatterObject=function(formatString){let result=_COMMAND_REGEX.exec(formatString);if(result!=null&&result.length==2){let formatter=_getFormatterFunction(result[1]);if(!formatter){return null}let params=_getLayoutTagParams(formatString);let after='';let endIndex=formatString.lastIndexOf('}');if(endIndex!=-1){after= -formatString.substring(endIndex+1)}else{after=formatString.substring(result.index+result[1].length+1)}return{'formatter':formatter,'params':params,'after':after}}return formatString};let _getFormatterFunction=function(command){let regex;for(let key in _formatters){if(_formatters.hasOwnProperty(key)){regex=new RegExp('^('+key+')$');if(regex.exec(command)){return _formatters[key]}}}return null};let _getLayoutTagParams=function(command){let params=[];let result=command.match(/\{([^}]*)(?=})/g);if(result!=null){for(let i=0;i0?'-':'+')+pad(Math.floor(Math.abs(offset)/ -60)*100+Math.abs(offset)%60,4)};return mask.replace(TOKEN,function($0){return $0 in flags?flags[$0]:$0})}}),(function(module,exports){'use strict';Object.defineProperty(exports,"__esModule",{value:true});exports.getFunctionName=getFunctionName;function getFunctionName(func){let name=func.toString().substring('function '.length);name=name.substring(0,name.indexOf('('));return name&&name.trim()?name:'anonymous'}}),(function(module,exports){'use strict';Object.defineProperty(exports,"__esModule",{value:true});const LogLevel=exports.LogLevel={'OFF':0,'FATAL':100,'ERROR':200,'WARN':300,'INFO':400,'DEBUG':500,'TRACE':600,'ALL':2147483647};}),(function(module,exports,__webpack_require__){(function(process){function normalizeArray(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i-=1){var last=parts[i];if(last==='.'){parts.splice(i,1)}else if(last==='..'){parts.splice(i,1);up+=1}else if(up){parts.splice(i,1);up-=1}}if(allowAboveRoot){for(;up-=1;up){parts.unshift('..')}}return parts}var splitPathRe= -/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;var splitPath=function(filename){return splitPathRe.exec(filename).slice(1)};exports.resolve=function(){var resolvedPath='',resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i-=1){var path=(i>=0)?arguments[i]:process.cwd();if(typeof path!=='string'){throw new TypeError('Arguments to path.resolve must be strings')}else if(!path){continue}resolvedPath=path+'/'+resolvedPath;resolvedAbsolute=path.charAt(0)==='/'}resolvedPath=normalizeArray(filter(resolvedPath.split('/'),function(p){return!!p}),!resolvedAbsolute).join('/');return((resolvedAbsolute?'/':'')+resolvedPath)||'.'};exports.normalize=function(path){var isAbsolute=exports.isAbsolute(path),trailingSlash=substr(path,-1)==='/';path=normalizeArray(filter(path.split('/'),function(p){return!!p}),!isAbsolute).join('/');if(!path&&!isAbsolute){path='.'}if(path&&trailingSlash){path+='/'}return(isAbsolute?'/':'')+path};exports.isAbsolute=function(path){ -return path.charAt(0)==='/'};exports.join=function(){var paths=Array.prototype.slice.call(arguments,0);return exports.normalize(filter(paths,function(p,index){if(typeof p!=='string'){throw new TypeError('Arguments to path.join must be strings')}return p}).join('/'))};exports.relative=function(from,to){from=exports.resolve(from).substr(1);to=exports.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end-=1){if(arr[end]!==''){break}}if(start>end){return[]}return arr.slice(start,end-start+1)}var fromParts=trim(from.split('/'));var toParts=trim(to.split('/'));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i1){for(var i=1;i-1){console.log(message)}}}exports.ConsoleAppender=ConsoleAppender;})])});; \ No newline at end of file +_APPENDER_METHODS.forEach(function(element){if(appenderObj[element]==undefined||!(appenderObj[element]instanceof Function)){throw new Error(`Invalid appender: missing/invalid method: ${ element }`)}})};function _append(logEvent){_finalized=true;(_loggers[logEvent.logger]||_loggers[_MAIN_LOGGER]).forEach(function(logger){if(logger.isActive(logEvent.level)){logger.append(logEvent)}})}function getLogger(context){if(!_configuration){configure(_DEFAULT_CONFIG)}if(typeof context!=='string'){if(typeof context==='function'){context=utility.getFunctionName(context)}else if(typeof context==='object'){context=utility.getFunctionName(context.constructor);if(context==='Object'){context='anonymous'}}else{context=_MAIN_LOGGER}}return new _logger.Logger(context,{'append':_append})}function setLogLevel(logLevel,logger){if(Number.isInteger(logLevel)){if(logger){if(_loggers[logger]){_loggers[logger].setLogLevel(logLevel)}}else{for(let key in _loggers){if(_loggers.hasOwnProperty(key)){_loggers[key].forEach( +function(appender){appender.setLogLevel(logLevel)})}}}}}addAppender(_consoleAppender.ConsoleAppender);exports.LogLevel=_logLevel.LogLevel;exports.LogAppender=_appender.LogAppender;}),(function(module,exports,__webpack_require__){'use strict';Object.defineProperty(exports,"__esModule",{value:true});exports.preCompile=preCompile;exports.format=format;var _dateFormatter=__webpack_require__(2);var _utility=__webpack_require__(3);var utility=_interopRequireWildcard(_utility);var _logLevel=__webpack_require__(4);function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key)){newObj[key]=obj[key]}}}newObj.default=obj;return newObj}}const _COMMAND_REGEX=/%([a-z,A-Z]+)(?=\{|)/;let _compiledLayouts={};let _formatLogger=function(logEvent){return logEvent.logger}; +let _formatDate=function(logEvent,params){return((0,_dateFormatter.dateFormat)(logEvent.date,params[0]))};let _formatException=function(logEvent){let message='';if(logEvent.error!=null){if(logEvent.error.stack!=undefined){let stacks=logEvent.error.stack.split(/\n/g);stacks.forEach(function(stack){message+=`\t${ stack }\n`})}else if(logEvent.error.message!=null&&logEvent.error.message!=''){message+=`\t${logEvent.error.name }: ${logEvent.error.message }\n`}}return message};let _formatFile=function(logEvent){if(!logEvent.file){_getFileDetails(logEvent)}return logEvent.file};let _formatLineNumber=function(logEvent){if(!logEvent.lineNumber){_getFileDetails(logEvent)}return `${logEvent.lineNumber }`};let _formatColumn=function(logEvent){if(!logEvent.column){_getFileDetails(logEvent)}return `${logEvent.column }`};let _formatMapMessage=function(logEvent,params){let message=null;if(logEvent.properties){message=[];for(let key in logEvent.properties){if(params[0]){if(params[0]==key){message.push(logEvent. +properties[key])}}else{message.push('{'+key+','+logEvent.properties[key]+'}')}}return '{'+message.join(',')+'}'}return message};let _formatLogMessage=function(logEvent){return logEvent.message};let _formatMethodName=function(logEvent){return utility.getFunctionName(logEvent.method)};let _formatLineSeparator=function(){return '\n'};let _formatLevel=function(logEvent){switch(logEvent.level){case _logLevel.LogLevel.FATAL:return 'FATAL';case _logLevel.LogLevel.ERROR:return 'ERROR';case _logLevel.LogLevel.WARN:return 'WARN';case _logLevel.LogLevel.INFO:return 'INFO';case _logLevel.LogLevel.DEBUG:return 'DEBUG';case _logLevel.LogLevel.TRACE:default:return 'TRACE'}};let _formatRelative=function(logEvent){return ''+logEvent.relative};let _formatSequenceNumber=function(logEvent){return ''+logEvent.sequence};let _formatters={'c|logger':_formatLogger,'d|date':_formatDate,'ex|exception|throwable':_formatException,'F|file':_formatFile,'K|map|MAP':_formatMapMessage,'L|line':_formatLineNumber,'column':_formatColumn, +'m|msg|message':_formatLogMessage,'M|method':_formatMethodName,'n':_formatLineSeparator,'p|level':_formatLevel,'r|relative':_formatRelative,'sn|sequenceNumber':_formatSequenceNumber};let _getCompiledLayout=function(layout){if(_compiledLayouts[layout]){return _compiledLayouts[layout]}return _compileLayout(layout)};let _compileLayout=function(layout){let index=layout.indexOf('%');let currentFormatString='';let formatArray=[];if(index!=0){formatArray.push(layout.substring(0,index))}do{let startIndex=index;let endIndex=index=layout.indexOf('%',index+1);if(endIndex<0){currentFormatString=layout.substring(startIndex)}else{currentFormatString=layout.substring(startIndex,endIndex)}formatArray.push(_getFormatterObject(currentFormatString))}while(index>-1);_compiledLayouts[layout]=formatArray;return formatArray};let _getFormatterObject=function(formatString){let result=_COMMAND_REGEX.exec(formatString);if(result!=null&&result.length==2){let formatter=_getFormatterFunction(result[1]);if(!formatter){ +return null}let params=_getLayoutTagParams(formatString);let after='';let endIndex=formatString.lastIndexOf('}');if(endIndex!=-1){after=formatString.substring(endIndex+1)}else{after=formatString.substring(result.index+result[1].length+1)}return{'formatter':formatter,'params':params,'after':after}}return formatString};let _getFormatterFunction=function(command){let regex;for(let key in _formatters){if(_formatters.hasOwnProperty(key)){regex=new RegExp('^('+key+')$');if(regex.exec(command)){return _formatters[key]}}}return null};let _getLayoutTagParams=function(command){let params=[];let result=command.match(/\{([^}]*)(?=})/g);if(result!=null){for(let i=0;i0?'-':'+')+pad(Math.floor(Math.abs(offset)/60)*100+Math.abs(offset)%60,4)};return mask.replace(TOKEN,function($0){return $0 in flags?flags[$0]:$0})}}),(function(module,exports){'use strict';Object.defineProperty(exports,"__esModule",{value:true});exports.getFunctionName=getFunctionName;function getFunctionName(func){let name=func.toString().substring('function '.length);name=name.substring(0,name.indexOf('('));return name&&name.trim()?name:'anonymous'}}),(function(module,exports){'use strict';Object.defineProperty(exports,"__esModule",{value:true});const LogLevel=exports.LogLevel={'OFF':0,'FATAL':100,'ERROR':200,'WARN':300,'INFO':400,'DEBUG':500,'TRACE':600,'ALL':2147483647};}),(function(module,exports,__webpack_require__){(function(process){function normalizeArray(parts,allowAboveRoot){ +var up=0;for(var i=parts.length-1;i>=0;i-=1){var last=parts[i];if(last==='.'){parts.splice(i,1)}else if(last==='..'){parts.splice(i,1);up+=1}else if(up){parts.splice(i,1);up-=1}}if(allowAboveRoot){for(;up-=1;up){parts.unshift('..')}}return parts}var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;var splitPath=function(filename){return splitPathRe.exec(filename).slice(1)};exports.resolve=function(){var resolvedPath='',resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i-=1){var path=(i>=0)?arguments[i]:process.cwd();if(typeof path!=='string'){throw new TypeError('Arguments to path.resolve must be strings')}else if(!path){continue}resolvedPath=path+'/'+resolvedPath;resolvedAbsolute=path.charAt(0)==='/'}resolvedPath=normalizeArray(filter(resolvedPath.split('/'),function(p){return!!p}),!resolvedAbsolute).join('/');return((resolvedAbsolute?'/':'')+resolvedPath)||'.'};exports.normalize=function(path){var isAbsolute=exports.isAbsolute(path), +trailingSlash=substr(path,-1)==='/';path=normalizeArray(filter(path.split('/'),function(p){return!!p}),!isAbsolute).join('/');if(!path&&!isAbsolute){path='.'}if(path&&trailingSlash){path+='/'}return(isAbsolute?'/':'')+path};exports.isAbsolute=function(path){return path.charAt(0)==='/'};exports.join=function(){var paths=Array.prototype.slice.call(arguments,0);return exports.normalize(filter(paths,function(p,index){if(typeof p!=='string'){throw new TypeError('Arguments to path.join must be strings')}return p}).join('/'))};exports.relative=function(from,to){from=exports.resolve(from).substr(1);to=exports.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end-=1){if(arr[end]!==''){break}}if(start>end){return[]}return arr.slice(start,end-start+1)}var fromParts=trim(from.split('/'));var toParts=trim(to.split('/'));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i= +0;i1){for(var i=1;i-1){console.log(message)}}}exports.ConsoleAppender=ConsoleAppender;})])});; \ No newline at end of file diff --git a/package.json b/package.json index 945642a..9a51d83 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "log4js2", - "version": "1.0.1", + "version": "1.0.2", "scripts": { "build": "gulp build", "test": "gulp test" diff --git a/src/formatter.js b/src/formatter.js index 2f49c0f..3bf9b93 100644 --- a/src/formatter.js +++ b/src/formatter.js @@ -248,7 +248,7 @@ let _formatters = { 'F|file' : _formatFile, 'K|map|MAP' : _formatMapMessage, 'L|line' : _formatLineNumber, - 'column': _formatColumn, + 'column' : _formatColumn, 'm|msg|message' : _formatLogMessage, 'M|method' : _formatMethodName, 'n' : _formatLineSeparator, @@ -471,7 +471,7 @@ let _getFileDetails = function (logEvent) { logEvent.column = fileParts.pop(); logEvent.lineNumber = fileParts.pop(); - + if (typeof define !== 'undefined') { let path = require('path'); let appDir = path.dirname(require.main.filename); diff --git a/src/index.js b/src/index.js index b17c34c..931379b 100644 --- a/src/index.js +++ b/src/index.js @@ -282,15 +282,15 @@ export function getLogger(context) { } // determine the context - if (typeof context != 'string') { + if (typeof context !== 'string') { - if (typeof context == 'function') { + if (typeof context === 'function') { context = utility.getFunctionName(context); - } else if (typeof context == 'object') { + } else if (typeof context === 'object') { context = utility.getFunctionName(context.constructor); - if (context == 'Object') { + if (context === 'Object') { context = 'anonymous'; }