@kepler.gl/utils 3.1.0-alpha.7 → 3.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof3 = require("@babel/runtime/helpers/typeof");
4
5
  Object.defineProperty(exports, "__esModule", {
5
6
  value: true
6
7
  });
@@ -29,6 +30,7 @@ exports.reverseFormatNumber = reverseFormatNumber;
29
30
  exports.roundToFour = roundToFour;
30
31
  exports.roundValToStep = roundValToStep;
31
32
  exports.timeToUnixMilli = timeToUnixMilli;
33
+ exports.uint8ArrayToHex = uint8ArrayToHex;
32
34
  exports.unique = unique;
33
35
  exports.validateCoordinate = validateCoordinate;
34
36
  exports.validateLatitude = validateLatitude;
@@ -36,16 +38,20 @@ exports.validateLongitude = validateLongitude;
36
38
  var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
37
39
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
38
40
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
41
+ var arrow = _interopRequireWildcard(require("apache-arrow"));
39
42
  var _assert = _interopRequireDefault(require("assert"));
40
43
  var _d3Format = require("d3-format");
41
44
  var _momentTimezone = _interopRequireDefault(require("moment-timezone"));
45
+ var _arrow = require("@loaders.gl/arrow");
42
46
  var _constants = require("@kepler.gl/constants");
43
47
  var _commonUtils = require("@kepler.gl/common-utils");
44
48
  var _plot = require("./plot");
45
49
  var _utils = require("./utils");
46
50
  var _FIELD_DISPLAY_FORMAT; // SPDX-License-Identifier: MIT
47
51
  // Copyright contributors to the kepler.gl project
48
- // We need threat latitude differently otherwise marcator project view throws
52
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
53
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof3(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
54
+ // We need threat latitude differently otherwise mercator project view throws
49
55
  // a projection matrix error
50
56
  // Uncaught Error: Pixel project matrix not invertible
51
57
  // at WebMercatorViewport16.Viewport6 (viewport.js:81:13)
@@ -288,22 +294,49 @@ var defaultFormatter = exports.defaultFormatter = function defaultFormatter(v) {
288
294
  var floatFormatter = exports.floatFormatter = function floatFormatter(v) {
289
295
  return isNumber(v) ? String(roundToFour(v)) : '';
290
296
  };
297
+
298
+ /**
299
+ * Transforms a WKB in Uint8Array form into a hex WKB string.
300
+ * @param uint8Array WKB in Uint8Array form.
301
+ * @returns hex WKB string.
302
+ */
303
+ function uint8ArrayToHex(data) {
304
+ return Array.from(data).map(function (_byte) {
305
+ return _byte.toString(16).padStart(2, '0');
306
+ }).join('');
307
+ }
291
308
  var FIELD_DISPLAY_FORMAT = exports.FIELD_DISPLAY_FORMAT = (_FIELD_DISPLAY_FORMAT = {}, (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])(_FIELD_DISPLAY_FORMAT, _constants.ALL_FIELD_TYPES.string, defaultFormatter), _constants.ALL_FIELD_TYPES.timestamp, defaultFormatter), _constants.ALL_FIELD_TYPES.integer, defaultFormatter), _constants.ALL_FIELD_TYPES.real, defaultFormatter), _constants.ALL_FIELD_TYPES["boolean"], defaultFormatter), _constants.ALL_FIELD_TYPES.date, defaultFormatter), _constants.ALL_FIELD_TYPES.geojson, function (d) {
292
309
  return typeof d === 'string' ? d : (0, _utils.isPlainObject)(d) ? JSON.stringify(d) : Array.isArray(d) ? "[".concat(String(d), "]") : '';
293
- }), _constants.ALL_FIELD_TYPES.geoarrow, function (d) {
294
- return d;
310
+ }), _constants.ALL_FIELD_TYPES.geoarrow, function (data, field) {
311
+ if (data instanceof arrow.Vector) {
312
+ try {
313
+ var _field$metadata;
314
+ var encoding = field === null || field === void 0 || (_field$metadata = field.metadata) === null || _field$metadata === void 0 ? void 0 : _field$metadata.get('ARROW:extension:name');
315
+ if (encoding) {
316
+ var geometry = (0, _arrow.parseGeometryFromArrow)(data, encoding);
317
+ return JSON.stringify(geometry);
318
+ }
319
+ } catch (error) {
320
+ // ignore for now
321
+ }
322
+ } else if (data instanceof Uint8Array) {
323
+ return uint8ArrayToHex(data);
324
+ }
325
+ return data;
295
326
  }), _constants.ALL_FIELD_TYPES.object, function (value) {
296
327
  try {
297
328
  return JSON.stringify(value);
298
329
  } catch (e) {
299
330
  return String(value);
300
331
  }
301
- }), _constants.ALL_FIELD_TYPES.array, JSON.stringify), (0, _defineProperty2["default"])(_FIELD_DISPLAY_FORMAT, _constants.ALL_FIELD_TYPES.h3, defaultFormatter));
332
+ }), _constants.ALL_FIELD_TYPES.array, function (d) {
333
+ return JSON.stringify(d);
334
+ }), (0, _defineProperty2["default"])(_FIELD_DISPLAY_FORMAT, _constants.ALL_FIELD_TYPES.h3, defaultFormatter));
302
335
 
303
336
  /**
304
337
  * Parse field value and type and return a string representation
305
338
  */
306
- var parseFieldValue = exports.parseFieldValue = function parseFieldValue(value, type) {
339
+ var parseFieldValue = exports.parseFieldValue = function parseFieldValue(value, type, field) {
307
340
  if (!(0, _commonUtils.notNullorUndefined)(value)) {
308
341
  return '';
309
342
  }
@@ -313,7 +346,7 @@ var parseFieldValue = exports.parseFieldValue = function parseFieldValue(value,
313
346
  if (typeof value === 'bigint') {
314
347
  return value.toString();
315
348
  }
316
- return FIELD_DISPLAY_FORMAT[type] ? FIELD_DISPLAY_FORMAT[type](value) : String(value);
349
+ return FIELD_DISPLAY_FORMAT[type] ? FIELD_DISPLAY_FORMAT[type](value, field) : String(value);
317
350
  };
318
351
 
319
352
  /**
@@ -498,4 +531,4 @@ function datetimeFormatter(timezone) {
498
531
  };
499
532
  };
500
533
  }
501
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXNzZXJ0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfZDNGb3JtYXQiLCJfbW9tZW50VGltZXpvbmUiLCJfY29uc3RhbnRzIiwiX2NvbW1vblV0aWxzIiwiX3Bsb3QiLCJfdXRpbHMiLCJfRklFTERfRElTUExBWV9GT1JNQVQiLCJNQVhfTEFUSVRVREUiLCJleHBvcnRzIiwiTUlOX0xBVElUVURFIiwiTUFYX0xPTkdJVFVERSIsIk1JTl9MT05HSVRVREUiLCJ2YWxpZGF0ZUxhdGl0dWRlIiwibGF0aXR1ZGUiLCJ2YWxpZGF0ZUNvb3JkaW5hdGUiLCJ2YWxpZGF0ZUxvbmdpdHVkZSIsImxvbmdpdHVkZSIsInZhbHVlIiwibWluVmFsdWUiLCJtYXhWYWx1ZSIsInVuaXF1ZSIsInZhbHVlcyIsInJlc3VsdHMiLCJ1bmlxdWVTZXQiLCJTZXQiLCJmb3JFYWNoIiwidiIsIm5vdE51bGxvclVuZGVmaW5lZCIsInB1c2giLCJnZXRMYXRMbmdCb3VuZHMiLCJwb2ludHMiLCJpZHgiLCJsaW1pdCIsImxhdHMiLCJtYXAiLCJkIiwiTnVtYmVyIiwiQXJyYXkiLCJpc0FycmF5IiwiZmlsdGVyIiwiaXNGaW5pdGUiLCJzb3J0IiwibnVtYmVyU29ydCIsImxlbmd0aCIsIk1hdGgiLCJtYXgiLCJtaW4iLCJjbGFtcCIsIl9yZWYiLCJfcmVmMiIsIl9zbGljZWRUb0FycmF5MiIsInZhbCIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsImdldFNhbXBsZURhdGEiLCJkYXRhIiwic2FtcGxlU2l6ZSIsImdldFZhbHVlIiwic2FtcGxlU3RlcCIsImZsb29yIiwib3V0cHV0IiwiaSIsInRpbWVUb1VuaXhNaWxsaSIsImZvcm1hdCIsIm1vbWVudCIsInV0YyIsInZhbHVlT2YiLCJEYXRlIiwiaXNOdW1iZXIiLCJoYXNPd25Qcm9wZXJ0eSIsIm9iaiIsInByb3AiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJjYWxsIiwiYSIsImIiLCJnZXRTb3J0aW5nRnVuY3Rpb24iLCJmaWVsZFR5cGUiLCJBTExfRklFTERfVFlQRVMiLCJyZWFsIiwiaW50ZWdlciIsInRpbWVzdGFtcCIsInByZWNpc2VSb3VuZCIsIm51bSIsImRlY2ltYWxzIiwidCIsInBvdyIsInJvdW5kIiwic2lnbiIsInRvRml4ZWQiLCJyb3VuZFRvRm91ciIsImNvbmNhdCIsImdldFJvdW5kaW5nRGVjaW1hbEZyb21TdGVwIiwic3RlcCIsImlzTmFOIiwiYXNzZXJ0Iiwic3RlcFN0ciIsInRvU3RyaW5nIiwic3BsaXRFeHBvbmVudGlhbCIsInNwbGl0IiwiY29lZmZaZXJvIiwiY29lZmZEZWNpbWFsIiwicGFyc2VJbnQiLCJzcGxpdFplcm8iLCJub3JtYWxpemVTbGlkZXJWYWx1ZSIsIm1hcmtzIiwic25hcFRvTWFya3MiLCJyb3VuZFZhbFRvU3RlcCIsImRlY2ltYWwiLCJzdGVwcyIsInJlbWFpbiIsImNsb3Nlc3QiLCJyb3VuZGVkIiwiZGVmYXVsdEZvcm1hdHRlciIsIlN0cmluZyIsImZsb2F0Rm9ybWF0dGVyIiwiRklFTERfRElTUExBWV9GT1JNQVQiLCJfZGVmaW5lUHJvcGVydHkyIiwic3RyaW5nIiwiZGF0ZSIsImdlb2pzb24iLCJpc1BsYWluT2JqZWN0IiwiSlNPTiIsInN0cmluZ2lmeSIsImdlb2Fycm93Iiwib2JqZWN0IiwiZSIsImFycmF5IiwiaDMiLCJwYXJzZUZpZWxkVmFsdWUiLCJ0eXBlIiwiZ2V0Rm9ybWF0dGVyIiwiZmllbGQiLCJ0b29sdGlwRm9ybWF0IiwiVE9PTFRJUF9GT1JNQVRTIiwiZmluZCIsImYiLCJUT09MVElQX0tFWSIsImFwcGx5RGVmYXVsdEZvcm1hdCIsImFwcGx5Q3VzdG9tRm9ybWF0IiwiZ2V0Q29sdW1uRm9ybWF0dGVyIiwiZGlzcGxheUZvcm1hdCIsIl90eXBlb2YyIiwiYXBwbHlWYWx1ZU1hcCIsIlRPT0xUSVBfRk9STUFUX1RZUEVTIiwiREVDSU1BTCIsImQzRm9ybWF0IiwiREFURSIsIkRBVEVfVElNRSIsImRhdGV0aW1lRm9ybWF0dGVyIiwiUEVSQ0VOVEFHRSIsIkRFQ0lNQUxfREVDSU1BTF9GSVhFRF8yIiwiQk9PTEVBTiIsImdldEJvb2xlYW5Gb3JtYXR0ZXIiLCJmb3JtYXRMYXJnZU51bWJlciIsIm4iLCJmb3JtYXROdW1iZXIiLCJ0cmFuc2Zvcm1hdGlvbiIsIlkiLCJaIiwiRSIsIlAiLCJUIiwiRyIsIk0iLCJrIiwiaCIsImRhIiwiYyIsIm0iLCLOvCIsInAiLCJ6IiwieSIsInJldmVyc2VGb3JtYXROdW1iZXIiLCJzdHIiLCJyZXR1cm5WYWx1ZSIsInN0ck51bSIsInRyaW0iLCJyZXBsYWNlIiwiZW50cmllcyIsImluY2x1ZGVzIiwicGFyc2VGbG9hdCIsInRpbWV6b25lIiwidHMiLCJ0eiJdLCJzb3VyY2VzIjpbIi4uL3NyYy9kYXRhLXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7Zm9ybWF0IGFzIGQzRm9ybWF0fSBmcm9tICdkMy1mb3JtYXQnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQtdGltZXpvbmUnO1xuXG5pbXBvcnQge1xuICBBTExfRklFTERfVFlQRVMsXG4gIFRPT0xUSVBfRk9STUFUUyxcbiAgVE9PTFRJUF9GT1JNQVRfVFlQRVMsXG4gIFRPT0xUSVBfS0VZLFxuICBUb29sdGlwRm9ybWF0XG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7bm90TnVsbG9yVW5kZWZpbmVkfSBmcm9tICdAa2VwbGVyLmdsL2NvbW1vbi11dGlscyc7XG5pbXBvcnQge0ZpZWxkLCBNaWxsaXNlY29uZH0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5cbmltcG9ydCB7c25hcFRvTWFya3N9IGZyb20gJy4vcGxvdCc7XG5pbXBvcnQge2lzUGxhaW5PYmplY3R9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgdHlwZSBGaWVsZEZvcm1hdHRlciA9ICh2YWx1ZTogYW55KSA9PiBzdHJpbmc7XG5cbi8vIFdlIG5lZWQgdGhyZWF0IGxhdGl0dWRlIGRpZmZlcmVudGx5IG90aGVyd2lzZSBtYXJjYXRvciBwcm9qZWN0IHZpZXcgdGhyb3dzXG4vLyBhIHByb2plY3Rpb24gbWF0cml4IGVycm9yXG4vLyBVbmNhdWdodCBFcnJvcjogUGl4ZWwgcHJvamVjdCBtYXRyaXggbm90IGludmVydGlibGVcbi8vIGF0IFdlYk1lcmNhdG9yVmlld3BvcnQxNi5WaWV3cG9ydDYgKHZpZXdwb3J0LmpzOjgxOjEzKVxuZXhwb3J0IGNvbnN0IE1BWF9MQVRJVFVERSA9IDg5Ljk7XG5leHBvcnQgY29uc3QgTUlOX0xBVElUVURFID0gLTg5Ljk7XG5leHBvcnQgY29uc3QgTUFYX0xPTkdJVFVERSA9IDE4MDtcbmV4cG9ydCBjb25zdCBNSU5fTE9OR0lUVURFID0gLTE4MDtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgYSBsYXRpdHVkZSB2YWx1ZS5cbiAqIEVuc3VyZXMgdGhhdCB0aGUgbGF0aXR1ZGUgaXMgd2l0aGluIHRoZSBkZWZpbmVkIG1pbmltdW0gYW5kIG1heGltdW0gbGF0aXR1ZGUgYm91bmRzLlxuICogSWYgdGhlIHZhbHVlIGlzIG91dCBvZiBib3VuZHMsIGl0IHJldHVybnMgdGhlIG5lYXJlc3QgYm91bmQgdmFsdWUuXG4gKiBAcGFyYW0gbGF0aXR1ZGUgLSBUaGUgbGF0aXR1ZGUgdmFsdWUgdG8gdmFsaWRhdGUuXG4gKiBAcmV0dXJucyBUaGUgdmFsaWRhdGVkIGxhdGl0dWRlIHZhbHVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVMYXRpdHVkZShsYXRpdHVkZTogbnVtYmVyIHwgdW5kZWZpbmVkKTogbnVtYmVyIHtcbiAgcmV0dXJuIHZhbGlkYXRlQ29vcmRpbmF0ZShsYXRpdHVkZSA/PyAwLCBNSU5fTEFUSVRVREUsIE1BWF9MQVRJVFVERSk7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGEgbG9uZ2l0dWRlIHZhbHVlLlxuICogRW5zdXJlcyB0aGF0IHRoZSBsb25naXR1ZGUgaXMgd2l0aGluIHRoZSBkZWZpbmVkIG1pbmltdW0gYW5kIG1heGltdW0gbG9uZ2l0dWRlIGJvdW5kcy5cbiAqIElmIHRoZSB2YWx1ZSBpcyBvdXQgb2YgYm91bmRzLCBpdCByZXR1cm5zIHRoZSBuZWFyZXN0IGJvdW5kIHZhbHVlLlxuICogQHBhcmFtIGxvbmdpdHVkZSAtIFRoZSBsb25naXR1ZGUgdmFsdWUgdG8gdmFsaWRhdGUuXG4gKiBAcmV0dXJucyBUaGUgdmFsaWRhdGVkIGxvbmdpdHVkZSB2YWx1ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTG9uZ2l0dWRlKGxvbmdpdHVkZTogbnVtYmVyIHwgdW5kZWZpbmVkKTogbnVtYmVyIHtcbiAgcmV0dXJuIHZhbGlkYXRlQ29vcmRpbmF0ZShsb25naXR1ZGUgPz8gMCwgTUlOX0xPTkdJVFVERSwgTUFYX0xPTkdJVFVERSk7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGEgY29vcmRpbmF0ZSB2YWx1ZS5cbiAqIEVuc3VyZXMgdGhhdCB0aGUgdmFsdWUgaXMgd2l0aGluIHRoZSBzcGVjaWZpZWQgbWluaW11bSBhbmQgbWF4aW11bSBib3VuZHMuXG4gKiBJZiB0aGUgdmFsdWUgaXMgb3V0IG9mIGJvdW5kcywgaXQgcmV0dXJucyB0aGUgbmVhcmVzdCBib3VuZCB2YWx1ZS5cbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBjb29yZGluYXRlIHZhbHVlIHRvIHZhbGlkYXRlLlxuICogQHBhcmFtIG1pblZhbHVlIC0gVGhlIG1pbmltdW0gYm91bmQgZm9yIHRoZSB2YWx1ZS5cbiAqIEBwYXJhbSBtYXhWYWx1ZSAtIFRoZSBtYXhpbXVtIGJvdW5kIGZvciB0aGUgdmFsdWUuXG4gKiBAcmV0dXJucyBUaGUgdmFsaWRhdGVkIGNvb3JkaW5hdGUgdmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUNvb3JkaW5hdGUodmFsdWU6IG51bWJlciwgbWluVmFsdWU6IG51bWJlciwgbWF4VmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gIGlmICh2YWx1ZSA8PSBtaW5WYWx1ZSkge1xuICAgIHJldHVybiBtaW5WYWx1ZTtcbiAgfVxuICBpZiAodmFsdWUgPj0gbWF4VmFsdWUpIHtcbiAgICByZXR1cm4gbWF4VmFsdWU7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogc2ltcGxlIGdldHRpbmcgdW5pcXVlIHZhbHVlcyBvZiBhbiBhcnJheVxuICpcbiAqIEBwYXJhbSB2YWx1ZXNcbiAqIEByZXR1cm5zIHVuaXF1ZSB2YWx1ZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVuaXF1ZTxUPih2YWx1ZXM6IFRbXSkge1xuICBjb25zdCByZXN1bHRzOiBUW10gPSBbXTtcbiAgY29uc3QgdW5pcXVlU2V0ID0gbmV3IFNldCh2YWx1ZXMpO1xuICB1bmlxdWVTZXQuZm9yRWFjaCh2ID0+IHtcbiAgICBpZiAobm90TnVsbG9yVW5kZWZpbmVkKHYpKSB7XG4gICAgICByZXN1bHRzLnB1c2godik7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXRMbmdCb3VuZHMoXG4gIHBvaW50czogbnVtYmVyW11bXSxcbiAgaWR4OiBudW1iZXIsXG4gIGxpbWl0OiBbbnVtYmVyLCBudW1iZXJdXG4pOiBbbnVtYmVyLCBudW1iZXJdIHwgbnVsbCB7XG4gIGNvbnN0IGxhdHMgPSBwb2ludHNcbiAgICAubWFwKGQgPT4gTnVtYmVyKEFycmF5LmlzQXJyYXkoZCkpICYmIGRbaWR4XSlcbiAgICAuZmlsdGVyKE51bWJlci5pc0Zpbml0ZSlcbiAgICAuc29ydChudW1iZXJTb3J0KTtcblxuICBpZiAoIWxhdHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBjbGFtcCB0byBsaW1pdFxuICByZXR1cm4gW01hdGgubWF4KGxhdHNbMF0sIGxpbWl0WzBdKSwgTWF0aC5taW4obGF0c1tsYXRzLmxlbmd0aCAtIDFdLCBsaW1pdFsxXSldO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xhbXAoW21pbiwgbWF4XTogW251bWJlciwgbnVtYmVyXSwgdmFsID0gMCk6IG51bWJlciB7XG4gIHJldHVybiB2YWwgPD0gbWluID8gbWluIDogdmFsID49IG1heCA/IG1heCA6IHZhbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNhbXBsZURhdGEoZGF0YSwgc2FtcGxlU2l6ZSA9IDUwMCwgZ2V0VmFsdWUgPSBkID0+IGQpIHtcbiAgY29uc3Qgc2FtcGxlU3RlcCA9IE1hdGgubWF4KE1hdGguZmxvb3IoZGF0YS5sZW5ndGggLyBzYW1wbGVTaXplKSwgMSk7XG4gIGNvbnN0IG91dHB1dDogYW55W10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSArPSBzYW1wbGVTdGVwKSB7XG4gICAgb3V0cHV0LnB1c2goZ2V0VmFsdWUoZGF0YVtpXSkpO1xuICB9XG5cbiAgcmV0dXJuIG91dHB1dDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGRpZmZlcmVudCB0aW1lIGZvcm1hdCB0byB1bml4IG1pbGxpc2Vjb25kc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdGltZVRvVW5peE1pbGxpKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBEYXRlLCBmb3JtYXQ6IHN0cmluZyk6IE1pbGxpc2Vjb25kIHwgbnVsbCB7XG4gIGlmIChub3ROdWxsb3JVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBtb21lbnQudXRjKHZhbHVlLCBmb3JtYXQpLnZhbHVlT2YoKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBmb3JtYXQgPT09ICd4JyA/IHZhbHVlICogMTAwMCA6IHZhbHVlO1xuICAgIH1cbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICByZXR1cm4gdmFsdWUudmFsdWVPZigpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIGQgaXMgYSBudW1iZXIsIHRoaXMgZmlsdGVyZWQgb3V0IE5hTiBhcyB3ZWxsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlcihkOiB1bmtub3duKTogZCBpcyBudW1iZXIge1xuICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKGQpO1xufVxuXG4vKipcbiAqIHdoZXRoZXIgb2JqZWN0IGhhcyBwcm9wZXJ0eVxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BcbiAqIEByZXR1cm5zIHtib29sZWFufSAtIHllcyBvciBub1xuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzT3duUHJvcGVydHk8WCBleHRlbmRzIG9iamVjdCwgWSBleHRlbmRzIFByb3BlcnR5S2V5PihcbiAgb2JqOiBYLFxuICBwcm9wOiBZXG4pOiBvYmogaXMgWCAmIFJlY29yZDxZLCB1bmtub3duPiB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG51bWJlclNvcnQoYTogbnVtYmVyLCBiOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gYSAtIGI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTb3J0aW5nRnVuY3Rpb24oZmllbGRUeXBlOiBzdHJpbmcpOiB0eXBlb2YgbnVtYmVyU29ydCB8IHVuZGVmaW5lZCB7XG4gIHN3aXRjaCAoZmllbGRUeXBlKSB7XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMucmVhbDpcbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5pbnRlZ2VyOlxuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLnRpbWVzdGFtcDpcbiAgICAgIHJldHVybiBudW1iZXJTb3J0O1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogcm91bmQgbnVtYmVyIHdpdGggZXhhY3QgbnVtYmVyIG9mIGRlY2ltYWxzXG4gKiByZXR1cm4gYXMgYSBzdHJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZWNpc2VSb3VuZChudW06IG51bWJlciwgZGVjaW1hbHM6IG51bWJlcik6IHN0cmluZyB7XG4gIGNvbnN0IHQgPSBNYXRoLnBvdygxMCwgZGVjaW1hbHMpO1xuICByZXR1cm4gKFxuICAgIE1hdGgucm91bmQoXG4gICAgICBudW0gKiB0ICsgKGRlY2ltYWxzID4gMCA/IDEgOiAwKSAqIChNYXRoLnNpZ24obnVtKSAqICgxMCAvIE1hdGgucG93KDEwMCwgZGVjaW1hbHMpKSlcbiAgICApIC8gdFxuICApLnRvRml4ZWQoZGVjaW1hbHMpO1xufVxuXG4vKipcbiAqIHJvdW5kIGEgZ2l2aW5nIG51bWJlciBhdCBtb3N0IDQgZGVjaW1hbCBwbGFjZXNcbiAqIGUuZy4gMTAgLT4gMTAsIDEuMTIzNDUgLT4gMS4yMzQ1LCAyLjAgLT4gMlxuICovXG5leHBvcnQgZnVuY3Rpb24gcm91bmRUb0ZvdXIobnVtOiBudW1iZXIpOiBudW1iZXIge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gIHJldHVybiBOdW1iZXIoYCR7TWF0aC5yb3VuZChgJHtudW19ZSs0YCl9ZS00YCk7XG59XG4vKipcbiAqIGdldCBudW1iZXIgb2YgZGVjaW1hbHMgdG8gcm91bmQgdG8gZm9yIHNsaWRlciBmcm9tIHN0ZXBcbiAqIEBwYXJhbSBzdGVwXG4gKiBAcmV0dXJucy0gbnVtYmVyIG9mIGRlY2ltYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJvdW5kaW5nRGVjaW1hbEZyb21TdGVwKHN0ZXA6IG51bWJlcik6IG51bWJlciB7XG4gIGlmIChpc05hTihzdGVwKSkge1xuICAgIGFzc2VydCgnc3RlcCBpcyBub3QgYSBudW1iZXInKTtcbiAgICBhc3NlcnQoc3RlcCk7XG4gIH1cblxuICBjb25zdCBzdGVwU3RyID0gc3RlcC50b1N0cmluZygpO1xuXG4gIC8vIGluIGNhc2UgdGhlIHN0ZXAgaXMgYSB2ZXJ5IHNtYWxsIG51bWJlciBlLmcuIDFlLTcsIHJldHVybiBkZWNpbWFsIGUuZy4gNyBkaXJlY3RseVxuICBjb25zdCBzcGxpdEV4cG9uZW50aWFsID0gc3RlcFN0ci5zcGxpdCgnZS0nKTtcbiAgaWYgKHNwbGl0RXhwb25lbnRpYWwubGVuZ3RoID09PSAyKSB7XG4gICAgY29uc3QgY29lZmZaZXJvID0gc3BsaXRFeHBvbmVudGlhbFswXS5zcGxpdCgnLicpO1xuICAgIGNvbnN0IGNvZWZmRGVjaW1hbCA9IGNvZWZmWmVyby5sZW5ndGggPT09IDEgPyAwIDogY29lZmZaZXJvWzFdLmxlbmd0aDtcbiAgICByZXR1cm4gcGFyc2VJbnQoc3BsaXRFeHBvbmVudGlhbFsxXSwgMTApICsgY29lZmZEZWNpbWFsO1xuICB9XG5cbiAgY29uc3Qgc3BsaXRaZXJvID0gc3RlcFN0ci5zcGxpdCgnLicpO1xuICBpZiAoc3BsaXRaZXJvLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIHJldHVybiBzcGxpdFplcm9bMV0ubGVuZ3RoO1xufVxuXG4vKipcbiAqIElmIG1hcmtzIGlzIHByb3ZpZGVkLCBzbmFwIHRvIG1hcmtzLCBpZiBub3Qgbm9ybWFsaXplIHRvIHN0ZXBcbiAqIEBwYXJhbSB2YWxcbiAqIEBwYXJhbSBtaW5WYWx1ZVxuICogQHBhcmFtIHN0ZXBcbiAqIEBwYXJhbSBtYXJrc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplU2xpZGVyVmFsdWUoXG4gIHZhbDogbnVtYmVyLFxuICBtaW5WYWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkLFxuICBzdGVwOiBudW1iZXIsXG4gIG1hcmtzPzogbnVtYmVyW10gfCBudWxsXG4pOiBudW1iZXIge1xuICBpZiAobWFya3MgJiYgbWFya3MubGVuZ3RoKSB7XG4gICAgLy8gVXNlIGluIHNsaWRlciwgZ2l2ZW4gYSBudW1iZXIgYW5kIGFuIGFycmF5IG9mIG51bWJlcnMsIHJldHVybiB0aGUgbmVhcnMgbnVtYmVyIGZyb20gdGhlIGFycmF5XG4gICAgcmV0dXJuIHNuYXBUb01hcmtzKHZhbCwgbWFya3MpO1xuICB9XG5cbiAgcmV0dXJuIHJvdW5kVmFsVG9TdGVwKG1pblZhbHVlLCBzdGVwLCB2YWwpO1xufVxuXG4vKipcbiAqIHJvdW5kIHRoZSB2YWx1ZSB0byBzdGVwIGZvciB0aGUgc2xpZGVyXG4gKiBAcGFyYW0gbWluVmFsdWVcbiAqIEBwYXJhbSBzdGVwXG4gKiBAcGFyYW0gdmFsXG4gKiBAcmV0dXJucyAtIHJvdW5kZWQgbnVtYmVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByb3VuZFZhbFRvU3RlcChtaW5WYWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkLCBzdGVwOiBudW1iZXIsIHZhbDogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKCFpc051bWJlcihzdGVwKSB8fCAhaXNOdW1iZXIobWluVmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuXG4gIGNvbnN0IGRlY2ltYWwgPSBnZXRSb3VuZGluZ0RlY2ltYWxGcm9tU3RlcChzdGVwKTtcbiAgY29uc3Qgc3RlcHMgPSBNYXRoLmZsb29yKCh2YWwgLSBtaW5WYWx1ZSkgLyBzdGVwKTtcbiAgbGV0IHJlbWFpbiA9IHZhbCAtIChzdGVwcyAqIHN0ZXAgKyBtaW5WYWx1ZSk7XG5cbiAgLy8gaGFzIHRvIHJvdW5kIGJlY2F1c2UgamF2YXNjcmlwdCB0dXJucyAwLjEgaW50byAwLjk5OTk5OTk5OTk5OTk5ODdcbiAgcmVtYWluID0gTnVtYmVyKHByZWNpc2VSb3VuZChyZW1haW4sIDgpKTtcblxuICBsZXQgY2xvc2VzdDogbnVtYmVyO1xuICBpZiAocmVtYWluID09PSAwKSB7XG4gICAgY2xvc2VzdCA9IHZhbDtcbiAgfSBlbHNlIGlmIChyZW1haW4gPCBzdGVwIC8gMikge1xuICAgIGNsb3Nlc3QgPSBzdGVwcyAqIHN0ZXAgKyBtaW5WYWx1ZTtcbiAgfSBlbHNlIHtcbiAgICBjbG9zZXN0ID0gKHN0ZXBzICsgMSkgKiBzdGVwICsgbWluVmFsdWU7XG4gIH1cblxuICAvLyBwcmVjaXNlIHJvdW5kIHJldHVybiBhIHN0cmluZyByb3VuZGVkIHRvIHRoZSBkZWZpbmVkIGRlY2ltYWxcbiAgY29uc3Qgcm91bmRlZCA9IHByZWNpc2VSb3VuZChjbG9zZXN0LCBkZWNpbWFsKTtcblxuICByZXR1cm4gTnVtYmVyKHJvdW5kZWQpO1xufVxuXG4vKipcbiAqIEdldCB0aGUgdmFsdWUgZm9ybWF0IGJhc2VkIG9uIGZpZWxkIGFuZCBmb3JtYXQgb3B0aW9uc1xuICogVXNlZCBpbiByZW5kZXIgdG9vbHRpcCB2YWx1ZVxuICovXG5leHBvcnQgY29uc3QgZGVmYXVsdEZvcm1hdHRlcjogRmllbGRGb3JtYXR0ZXIgPSB2ID0+IChub3ROdWxsb3JVbmRlZmluZWQodikgPyBTdHJpbmcodikgOiAnJyk7XG5cbmV4cG9ydCBjb25zdCBmbG9hdEZvcm1hdHRlciA9IHYgPT4gKGlzTnVtYmVyKHYpID8gU3RyaW5nKHJvdW5kVG9Gb3VyKHYpKSA6ICcnKTtcblxuZXhwb3J0IGNvbnN0IEZJRUxEX0RJU1BMQVlfRk9STUFUOiB7XG4gIFtrZXk6IHN0cmluZ106IEZpZWxkRm9ybWF0dGVyO1xufSA9IHtcbiAgW0FMTF9GSUVMRF9UWVBFUy5zdHJpbmddOiBkZWZhdWx0Rm9ybWF0dGVyLFxuICBbQUxMX0ZJRUxEX1RZUEVTLnRpbWVzdGFtcF06IGRlZmF1bHRGb3JtYXR0ZXIsXG4gIFtBTExfRklFTERfVFlQRVMuaW50ZWdlcl06IGRlZmF1bHRGb3JtYXR0ZXIsXG4gIFtBTExfRklFTERfVFlQRVMucmVhbF06IGRlZmF1bHRGb3JtYXR0ZXIsXG4gIFtBTExfRklFTERfVFlQRVMuYm9vbGVhbl06IGRlZmF1bHRGb3JtYXR0ZXIsXG4gIFtBTExfRklFTERfVFlQRVMuZGF0ZV06IGRlZmF1bHRGb3JtYXR0ZXIsXG4gIFtBTExfRklFTERfVFlQRVMuZ2VvanNvbl06IGQgPT5cbiAgICB0eXBlb2YgZCA9PT0gJ3N0cmluZydcbiAgICAgID8gZFxuICAgICAgOiBpc1BsYWluT2JqZWN0KGQpXG4gICAgICA/IEpTT04uc3RyaW5naWZ5KGQpXG4gICAgICA6IEFycmF5LmlzQXJyYXkoZClcbiAgICAgID8gYFske1N0cmluZyhkKX1dYFxuICAgICAgOiAnJyxcbiAgW0FMTF9GSUVMRF9UWVBFUy5nZW9hcnJvd106IGQgPT4gZCxcbiAgW0FMTF9GSUVMRF9UWVBFUy5vYmplY3RdOiAodmFsdWU6IGFueSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgfSxcbiAgW0FMTF9GSUVMRF9UWVBFUy5hcnJheV06IEpTT04uc3RyaW5naWZ5LFxuICBbQUxMX0ZJRUxEX1RZUEVTLmgzXTogZGVmYXVsdEZvcm1hdHRlclxufTtcblxuLyoqXG4gKiBQYXJzZSBmaWVsZCB2YWx1ZSBhbmQgdHlwZSBhbmQgcmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBwYXJzZUZpZWxkVmFsdWUgPSAodmFsdWU6IGFueSwgdHlwZTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgaWYgKCFub3ROdWxsb3JVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIC8vIEJpZ0ludCB2YWx1ZXMgY2Fubm90IGJlIHNlcmlhbGl6ZWQgd2l0aCBKU09OLnN0cmluZ2lmeSgpIGRpcmVjdGx5XG4gIC8vIFdlIG5lZWQgdG8gZXhwbGljaXRseSBjb252ZXJ0IHRoZW0gdG8gc3RyaW5ncyB1c2luZyAudG9TdHJpbmcoKVxuICAvLyBTZWU6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0JpZ0ludCN1c2Vfd2l0aGluX2pzb25cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcpIHtcbiAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcbiAgfVxuICByZXR1cm4gRklFTERfRElTUExBWV9GT1JNQVRbdHlwZV0gPyBGSUVMRF9ESVNQTEFZX0ZPUk1BVFt0eXBlXSh2YWx1ZSkgOiBTdHJpbmcodmFsdWUpO1xufTtcblxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIGZvcm1hdCBiYXNlZCBvbiBmaWVsZCBhbmQgZm9ybWF0IG9wdGlvbnNcbiAqIFVzZWQgaW4gcmVuZGVyIHRvb2x0aXAgdmFsdWVcbiAqIEBwYXJhbSBmb3JtYXRcbiAqIEBwYXJhbSBmaWVsZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybWF0dGVyKFxuICBmb3JtYXQ/OiBzdHJpbmcgfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgbnVsbCxcbiAgZmllbGQ/OiBGaWVsZFxuKTogRmllbGRGb3JtYXR0ZXIge1xuICBpZiAoIWZvcm1hdCkge1xuICAgIHJldHVybiBkZWZhdWx0Rm9ybWF0dGVyO1xuICB9XG4gIGNvbnN0IHRvb2x0aXBGb3JtYXQgPSBPYmplY3QudmFsdWVzKFRPT0xUSVBfRk9STUFUUykuZmluZChmID0+IGZbVE9PTFRJUF9LRVldID09PSBmb3JtYXQpO1xuXG4gIGlmICh0b29sdGlwRm9ybWF0KSB7XG4gICAgcmV0dXJuIGFwcGx5RGVmYXVsdEZvcm1hdCh0b29sdGlwRm9ybWF0IGFzIFRvb2x0aXBGb3JtYXQpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBmb3JtYXQgPT09ICdzdHJpbmcnICYmIGZpZWxkKSB7XG4gICAgcmV0dXJuIGFwcGx5Q3VzdG9tRm9ybWF0KGZvcm1hdCwgZmllbGQpO1xuICB9XG5cbiAgcmV0dXJuIGRlZmF1bHRGb3JtYXR0ZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2x1bW5Gb3JtYXR0ZXIoXG4gIGZpZWxkOiBQaWNrPEZpZWxkLCAndHlwZSc+ICYgUGFydGlhbDxQaWNrPEZpZWxkLCAnZm9ybWF0JyB8ICdkaXNwbGF5Rm9ybWF0Jz4+XG4pOiBGaWVsZEZvcm1hdHRlciB7XG4gIGNvbnN0IHtmb3JtYXQsIGRpc3BsYXlGb3JtYXR9ID0gZmllbGQ7XG5cbiAgaWYgKCFmb3JtYXQgJiYgIWRpc3BsYXlGb3JtYXQpIHtcbiAgICByZXR1cm4gRklFTERfRElTUExBWV9GT1JNQVRbZmllbGQudHlwZV07XG4gIH1cbiAgY29uc3QgdG9vbHRpcEZvcm1hdCA9IE9iamVjdC52YWx1ZXMoVE9PTFRJUF9GT1JNQVRTKS5maW5kKGYgPT4gZltUT09MVElQX0tFWV0gPT09IGRpc3BsYXlGb3JtYXQpO1xuXG4gIGlmICh0b29sdGlwRm9ybWF0KSB7XG4gICAgcmV0dXJuIGFwcGx5RGVmYXVsdEZvcm1hdCh0b29sdGlwRm9ybWF0KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZGlzcGxheUZvcm1hdCA9PT0gJ3N0cmluZycgJiYgZmllbGQpIHtcbiAgICByZXR1cm4gYXBwbHlDdXN0b21Gb3JtYXQoZGlzcGxheUZvcm1hdCwgZmllbGQpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBkaXNwbGF5Rm9ybWF0ID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBhcHBseVZhbHVlTWFwKGRpc3BsYXlGb3JtYXQpO1xuICB9XG5cbiAgcmV0dXJuIGRlZmF1bHRGb3JtYXR0ZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseVZhbHVlTWFwKGZvcm1hdCkge1xuICByZXR1cm4gdiA9PiBmb3JtYXRbdl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseURlZmF1bHRGb3JtYXQodG9vbHRpcEZvcm1hdDogVG9vbHRpcEZvcm1hdCk6ICh2OiBhbnkpID0+IHN0cmluZyB7XG4gIGlmICghdG9vbHRpcEZvcm1hdCB8fCAhdG9vbHRpcEZvcm1hdC5mb3JtYXQpIHtcbiAgICByZXR1cm4gZGVmYXVsdEZvcm1hdHRlcjtcbiAgfVxuXG4gIHN3aXRjaCAodG9vbHRpcEZvcm1hdC50eXBlKSB7XG4gICAgY2FzZSBUT09MVElQX0ZPUk1BVF9UWVBFUy5ERUNJTUFMOlxuICAgICAgcmV0dXJuIGQzRm9ybWF0KHRvb2x0aXBGb3JtYXQuZm9ybWF0KTtcbiAgICBjYXNlIFRPT0xUSVBfRk9STUFUX1RZUEVTLkRBVEU6XG4gICAgY2FzZSBUT09MVElQX0ZPUk1BVF9UWVBFUy5EQVRFX1RJTUU6XG4gICAgICByZXR1cm4gZGF0ZXRpbWVGb3JtYXR0ZXIobnVsbCkodG9vbHRpcEZvcm1hdC5mb3JtYXQpO1xuICAgIGNhc2UgVE9PTFRJUF9GT1JNQVRfVFlQRVMuUEVSQ0VOVEFHRTpcbiAgICAgIHJldHVybiB2ID0+IGAke2QzRm9ybWF0KFRPT0xUSVBfRk9STUFUUy5ERUNJTUFMX0RFQ0lNQUxfRklYRURfMi5mb3JtYXQpKHYpfSVgO1xuICAgIGNhc2UgVE9PTFRJUF9GT1JNQVRfVFlQRVMuQk9PTEVBTjpcbiAgICAgIHJldHVybiBnZXRCb29sZWFuRm9ybWF0dGVyKHRvb2x0aXBGb3JtYXQuZm9ybWF0KTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGRlZmF1bHRGb3JtYXR0ZXI7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEJvb2xlYW5Gb3JtYXR0ZXIoZm9ybWF0OiBzdHJpbmcpOiBGaWVsZEZvcm1hdHRlciB7XG4gIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgY2FzZSAnMDEnOlxuICAgICAgcmV0dXJuICh2OiBib29sZWFuKSA9PiAodiA/ICcxJyA6ICcwJyk7XG4gICAgY2FzZSAneW4nOlxuICAgICAgcmV0dXJuICh2OiBib29sZWFuKSA9PiAodiA/ICd5ZXMnIDogJ25vJyk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBkZWZhdWx0Rm9ybWF0dGVyO1xuICB9XG59XG4vLyBBbGxvdyB1c2VyIHRvIHNwZWNpZnkgY3VzdG9tIHRvb2x0aXAgZm9ybWF0IHZpYSBjb25maWdcbmV4cG9ydCBmdW5jdGlvbiBhcHBseUN1c3RvbUZvcm1hdChmb3JtYXQsIGZpZWxkOiB7dHlwZT86IHN0cmluZ30pOiBGaWVsZEZvcm1hdHRlciB7XG4gIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLnJlYWw6XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMuaW50ZWdlcjpcbiAgICAgIHJldHVybiBkM0Zvcm1hdChmb3JtYXQpO1xuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLmRhdGU6XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMudGltZXN0YW1wOlxuICAgICAgcmV0dXJuIGRhdGV0aW1lRm9ybWF0dGVyKG51bGwpKGZvcm1hdCk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB2ID0+IHY7XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9ybWF0TGFyZ2VOdW1iZXIobikge1xuICAvLyBTSS1wcmVmaXggd2l0aCA0IHNpZ25pZmljYW50IGRpZ2l0c1xuICByZXR1cm4gZDNGb3JtYXQoJy40fnMnKShuKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdE51bWJlcihuOiBudW1iZXIsIHR5cGU/OiBzdHJpbmcpOiBzdHJpbmcge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5pbnRlZ2VyOlxuICAgICAgaWYgKG4gPCAwKSB7XG4gICAgICAgIHJldHVybiBgLSR7Zm9ybWF0TnVtYmVyKC1uLCAnaW50ZWdlcicpfWA7XG4gICAgICB9XG4gICAgICBpZiAobiA8IDEwMDApIHtcbiAgICAgICAgcmV0dXJuIGAke01hdGgucm91bmQobil9YDtcbiAgICAgIH1cbiAgICAgIGlmIChuIDwgMTAgKiAxMDAwKSB7XG4gICAgICAgIHJldHVybiBkM0Zvcm1hdCgnLCcpKE1hdGgucm91bmQobikpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZvcm1hdExhcmdlTnVtYmVyKG4pO1xuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLnJlYWw6XG4gICAgICBpZiAobiA8IDApIHtcbiAgICAgICAgcmV0dXJuIGAtJHtmb3JtYXROdW1iZXIoLW4sICdudW1iZXInKX1gO1xuICAgICAgfVxuICAgICAgaWYgKG4gPCAxMDAwKSB7XG4gICAgICAgIHJldHVybiBkM0Zvcm1hdCgnLjR+cicpKG4pO1xuICAgICAgfVxuICAgICAgaWYgKG4gPCAxMCAqIDEwMDApIHtcbiAgICAgICAgcmV0dXJuIGQzRm9ybWF0KCcsLjJ+ZicpKG4pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZvcm1hdExhcmdlTnVtYmVyKG4pO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmb3JtYXROdW1iZXIobiwgJ3JlYWwnKTtcbiAgfVxufVxuXG5jb25zdCB0cmFuc2Zvcm1hdGlvbiA9IHtcbiAgWTogTWF0aC5wb3coMTAsIDI0KSxcbiAgWjogTWF0aC5wb3coMTAsIDIxKSxcbiAgRTogTWF0aC5wb3coMTAsIDE4KSxcbiAgUDogTWF0aC5wb3coMTAsIDE1KSxcbiAgVDogTWF0aC5wb3coMTAsIDEyKSxcbiAgRzogTWF0aC5wb3coMTAsIDkpLFxuICBNOiBNYXRoLnBvdygxMCwgNiksXG4gIGs6IE1hdGgucG93KDEwLCAzKSxcbiAgaDogTWF0aC5wb3coMTAsIDIpLFxuICBkYTogTWF0aC5wb3coMTAsIDEpLFxuICBkOiBNYXRoLnBvdygxMCwgLTEpLFxuICBjOiBNYXRoLnBvdygxMCwgLTIpLFxuICBtOiBNYXRoLnBvdygxMCwgLTMpLFxuICDOvDogTWF0aC5wb3coMTAsIC02KSxcbiAgbjogTWF0aC5wb3coMTAsIC05KSxcbiAgcDogTWF0aC5wb3coMTAsIC0xMiksXG4gIGY6IE1hdGgucG93KDEwLCAtMTUpLFxuICBhOiBNYXRoLnBvdygxMCwgLTE4KSxcbiAgejogTWF0aC5wb3coMTAsIC0yMSksXG4gIHk6IE1hdGgucG93KDEwLCAtMjQpXG59O1xuXG4vKipcbiAqIENvbnZlcnQgYSBmb3JtYXR0ZWQgbnVtYmVyIGZyb20gc3RyaW5nIGJhY2sgdG8gbnVtYmVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXZlcnNlRm9ybWF0TnVtYmVyKHN0cjogc3RyaW5nKTogbnVtYmVyIHtcbiAgbGV0IHJldHVyblZhbHVlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgY29uc3Qgc3RyTnVtID0gc3RyLnRyaW0oKS5yZXBsYWNlKC8sL2csICcnKTtcbiAgT2JqZWN0LmVudHJpZXModHJhbnNmb3JtYXRpb24pLmZvckVhY2goZCA9PiB7XG4gICAgaWYgKHN0ck51bS5pbmNsdWRlcyhkWzBdKSkge1xuICAgICAgcmV0dXJuVmFsdWUgPSBwYXJzZUZsb2F0KHN0ck51bSkgKiBkWzFdO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSk7XG5cbiAgLy8gaWYgbm8gdHJhbnNmb3JtZXIgZm91bmQsIGNvbnZlcnQgdG8gbnViZXIgcmVnYXJkbGVzc1xuICByZXR1cm4gcmV0dXJuVmFsdWUgPT09IG51bGwgPyBOdW1iZXIoc3RyTnVtKSA6IHJldHVyblZhbHVlO1xufVxuXG4vKipcbiAqIEZvcm1hdCBlcG9jaCBtaWxsaXNlY29uZHMgd2l0aCBhIGZvcm1hdCBzdHJpbmdcbiAqIEB0eXBlIHRpbWV6b25lXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkYXRldGltZUZvcm1hdHRlcihcbiAgdGltZXpvbmU/OiBzdHJpbmcgfCBudWxsXG4pOiAoZm9ybWF0Pzogc3RyaW5nKSA9PiAodHM6IG51bWJlcikgPT4gc3RyaW5nIHtcbiAgcmV0dXJuIHRpbWV6b25lXG4gICAgPyBmb3JtYXQgPT4gdHMgPT4gbW9tZW50LnV0Yyh0cykudHoodGltZXpvbmUpLmZvcm1hdChmb3JtYXQpXG4gICAgOiAvLyByZXR1cm4gZW1wdHkgc3RyaW5nIGluc3RlYWQgb2YgJ0ludmFsaWQgZGF0ZScgaWYgdHMgaXMgdW5kZWZpbmVkL251bGxcbiAgICAgIGZvcm1hdCA9PiB0cyA9PiB0cyA/IG1vbWVudC51dGModHMpLmZvcm1hdChmb3JtYXQpIDogJyc7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsT0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsU0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsZUFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUcsVUFBQSxHQUFBSCxPQUFBO0FBT0EsSUFBQUksWUFBQSxHQUFBSixPQUFBO0FBR0EsSUFBQUssS0FBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sTUFBQSxHQUFBTixPQUFBO0FBQXNDLElBQUFPLHFCQUFBLEVBbEJ0QztBQUNBO0FBcUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTUMsWUFBWSxHQUFBQyxPQUFBLENBQUFELFlBQUEsR0FBRyxJQUFJO0FBQ3pCLElBQU1FLFlBQVksR0FBQUQsT0FBQSxDQUFBQyxZQUFBLEdBQUcsQ0FBQyxJQUFJO0FBQzFCLElBQU1DLGFBQWEsR0FBQUYsT0FBQSxDQUFBRSxhQUFBLEdBQUcsR0FBRztBQUN6QixJQUFNQyxhQUFhLEdBQUFILE9BQUEsQ0FBQUcsYUFBQSxHQUFHLENBQUMsR0FBRzs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQyxnQkFBZ0JBLENBQUNDLFFBQTRCLEVBQVU7RUFDckUsT0FBT0Msa0JBQWtCLENBQUNELFFBQVEsYUFBUkEsUUFBUSxjQUFSQSxRQUFRLEdBQUksQ0FBQyxFQUFFSixZQUFZLEVBQUVGLFlBQVksQ0FBQztBQUN0RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNRLGlCQUFpQkEsQ0FBQ0MsU0FBNkIsRUFBVTtFQUN2RSxPQUFPRixrQkFBa0IsQ0FBQ0UsU0FBUyxhQUFUQSxTQUFTLGNBQVRBLFNBQVMsR0FBSSxDQUFDLEVBQUVMLGFBQWEsRUFBRUQsYUFBYSxDQUFDO0FBQ3pFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNJLGtCQUFrQkEsQ0FBQ0csS0FBYSxFQUFFQyxRQUFnQixFQUFFQyxRQUFnQixFQUFVO0VBQzVGLElBQUlGLEtBQUssSUFBSUMsUUFBUSxFQUFFO0lBQ3JCLE9BQU9BLFFBQVE7RUFDakI7RUFDQSxJQUFJRCxLQUFLLElBQUlFLFFBQVEsRUFBRTtJQUNyQixPQUFPQSxRQUFRO0VBQ2pCO0VBRUEsT0FBT0YsS0FBSztBQUNkOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNHLE1BQU1BLENBQUlDLE1BQVcsRUFBRTtFQUNyQyxJQUFNQyxPQUFZLEdBQUcsRUFBRTtFQUN2QixJQUFNQyxTQUFTLEdBQUcsSUFBSUMsR0FBRyxDQUFDSCxNQUFNLENBQUM7RUFDakNFLFNBQVMsQ0FBQ0UsT0FBTyxDQUFDLFVBQUFDLENBQUMsRUFBSTtJQUNyQixJQUFJLElBQUFDLCtCQUFrQixFQUFDRCxDQUFDLENBQUMsRUFBRTtNQUN6QkosT0FBTyxDQUFDTSxJQUFJLENBQUNGLENBQUMsQ0FBQztJQUNqQjtFQUNGLENBQUMsQ0FBQztFQUNGLE9BQU9KLE9BQU87QUFDaEI7QUFFTyxTQUFTTyxlQUFlQSxDQUM3QkMsTUFBa0IsRUFDbEJDLEdBQVcsRUFDWEMsS0FBdUIsRUFDRTtFQUN6QixJQUFNQyxJQUFJLEdBQUdILE1BQU0sQ0FDaEJJLEdBQUcsQ0FBQyxVQUFBQyxDQUFDO0lBQUEsT0FBSUMsTUFBTSxDQUFDQyxLQUFLLENBQUNDLE9BQU8sQ0FBQ0gsQ0FBQyxDQUFDLENBQUMsSUFBSUEsQ0FBQyxDQUFDSixHQUFHLENBQUM7RUFBQSxFQUFDLENBQzVDUSxNQUFNLENBQUNILE1BQU0sQ0FBQ0ksUUFBUSxDQUFDLENBQ3ZCQyxJQUFJLENBQUNDLFVBQVUsQ0FBQztFQUVuQixJQUFJLENBQUNULElBQUksQ0FBQ1UsTUFBTSxFQUFFO0lBQ2hCLE9BQU8sSUFBSTtFQUNiOztFQUVBO0VBQ0EsT0FBTyxDQUFDQyxJQUFJLENBQUNDLEdBQUcsQ0FBQ1osSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFRCxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRVksSUFBSSxDQUFDRSxHQUFHLENBQUNiLElBQUksQ0FBQ0EsSUFBSSxDQUFDVSxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUVYLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pGO0FBRU8sU0FBU2UsS0FBS0EsQ0FBQUMsSUFBQSxFQUFnRDtFQUFBLElBQUFDLEtBQUEsT0FBQUMsZUFBQSxhQUFBRixJQUFBO0lBQTlDRixHQUFHLEdBQUFHLEtBQUE7SUFBRUosR0FBRyxHQUFBSSxLQUFBO0VBQUEsSUFBcUJFLEdBQUcsR0FBQUMsU0FBQSxDQUFBVCxNQUFBLFFBQUFTLFNBQUEsUUFBQUMsU0FBQSxHQUFBRCxTQUFBLE1BQUcsQ0FBQztFQUN6RCxPQUFPRCxHQUFHLElBQUlMLEdBQUcsR0FBR0EsR0FBRyxHQUFHSyxHQUFHLElBQUlOLEdBQUcsR0FBR0EsR0FBRyxHQUFHTSxHQUFHO0FBQ2xEO0FBRU8sU0FBU0csYUFBYUEsQ0FBQ0MsSUFBSSxFQUF1QztFQUFBLElBQXJDQyxVQUFVLEdBQUFKLFNBQUEsQ0FBQVQsTUFBQSxRQUFBUyxTQUFBLFFBQUFDLFNBQUEsR0FBQUQsU0FBQSxNQUFHLEdBQUc7RUFBQSxJQUFFSyxRQUFRLEdBQUFMLFNBQUEsQ0FBQVQsTUFBQSxRQUFBUyxTQUFBLFFBQUFDLFNBQUEsR0FBQUQsU0FBQSxNQUFHLFVBQUFqQixDQUFDO0lBQUEsT0FBSUEsQ0FBQztFQUFBO0VBQ3JFLElBQU11QixVQUFVLEdBQUdkLElBQUksQ0FBQ0MsR0FBRyxDQUFDRCxJQUFJLENBQUNlLEtBQUssQ0FBQ0osSUFBSSxDQUFDWixNQUFNLEdBQUdhLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNwRSxJQUFNSSxNQUFhLEdBQUcsRUFBRTtFQUN4QixLQUFLLElBQUlDLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR04sSUFBSSxDQUFDWixNQUFNLEVBQUVrQixDQUFDLElBQUlILFVBQVUsRUFBRTtJQUNoREUsTUFBTSxDQUFDaEMsSUFBSSxDQUFDNkIsUUFBUSxDQUFDRixJQUFJLENBQUNNLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDaEM7RUFFQSxPQUFPRCxNQUFNO0FBQ2Y7O0FBRUE7QUFDQTtBQUNBO0FBQ08sU0FBU0UsZUFBZUEsQ0FBQzdDLEtBQTZCLEVBQUU4QyxNQUFjLEVBQXNCO0VBQ2pHLElBQUksSUFBQXBDLCtCQUFrQixFQUFDVixLQUFLLENBQUMsRUFBRTtJQUM3QixJQUFJLE9BQU9BLEtBQUssS0FBSyxRQUFRLEVBQUU7TUFDN0IsT0FBTytDLDBCQUFNLENBQUNDLEdBQUcsQ0FBQ2hELEtBQUssRUFBRThDLE1BQU0sQ0FBQyxDQUFDRyxPQUFPLENBQUMsQ0FBQztJQUM1QztJQUNBLElBQUksT0FBT2pELEtBQUssS0FBSyxRQUFRLEVBQUU7TUFDN0IsT0FBTzhDLE1BQU0sS0FBSyxHQUFHLEdBQUc5QyxLQUFLLEdBQUcsSUFBSSxHQUFHQSxLQUFLO0lBQzlDO0lBQ0EsSUFBSUEsS0FBSyxZQUFZa0QsSUFBSSxFQUFFO01BQ3pCLE9BQU9sRCxLQUFLLENBQUNpRCxPQUFPLENBQUMsQ0FBQztJQUN4QjtFQUNGO0VBQ0EsT0FBTyxJQUFJO0FBQ2I7O0FBRUE7QUFDQTtBQUNBO0FBQ08sU0FBU0UsUUFBUUEsQ0FBQ2pDLENBQVUsRUFBZTtFQUNoRCxPQUFPQyxNQUFNLENBQUNJLFFBQVEsQ0FBQ0wsQ0FBQyxDQUFDO0FBQzNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTa0MsY0FBY0EsQ0FDNUJDLEdBQU0sRUFDTkMsSUFBTyxFQUN3QjtFQUMvQixPQUFPQyxNQUFNLENBQUNDLFNBQVMsQ0FBQ0osY0FBYyxDQUFDSyxJQUFJLENBQUNKLEdBQUcsRUFBRUMsSUFBSSxDQUFDO0FBQ3hEO0FBRU8sU0FBUzdCLFVBQVVBLENBQUNpQyxDQUFTLEVBQUVDLENBQVMsRUFBVTtFQUN2RCxPQUFPRCxDQUFDLEdBQUdDLENBQUM7QUFDZDtBQUVPLFNBQVNDLGtCQUFrQkEsQ0FBQ0MsU0FBaUIsRUFBaUM7RUFDbkYsUUFBUUEsU0FBUztJQUNmLEtBQUtDLDBCQUFlLENBQUNDLElBQUk7SUFDekIsS0FBS0QsMEJBQWUsQ0FBQ0UsT0FBTztJQUM1QixLQUFLRiwwQkFBZSxDQUFDRyxTQUFTO01BQzVCLE9BQU94QyxVQUFVO0lBQ25CO01BQ0UsT0FBT1csU0FBUztFQUNwQjtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBUzhCLFlBQVlBLENBQUNDLEdBQVcsRUFBRUMsUUFBZ0IsRUFBVTtFQUNsRSxJQUFNQyxDQUFDLEdBQUcxQyxJQUFJLENBQUMyQyxHQUFHLENBQUMsRUFBRSxFQUFFRixRQUFRLENBQUM7RUFDaEMsT0FBTyxDQUNMekMsSUFBSSxDQUFDNEMsS0FBSyxDQUNSSixHQUFHLEdBQUdFLENBQUMsR0FBRyxDQUFDRCxRQUFRLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUt6QyxJQUFJLENBQUM2QyxJQUFJLENBQUNMLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBR3hDLElBQUksQ0FBQzJDLEdBQUcsQ0FBQyxHQUFHLEVBQUVGLFFBQVEsQ0FBQyxDQUFDLENBQ3JGLENBQUMsR0FBR0MsQ0FBQyxFQUNMSSxPQUFPLENBQUNMLFFBQVEsQ0FBQztBQUNyQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNNLFdBQVdBLENBQUNQLEdBQVcsRUFBVTtFQUMvQztFQUNBLE9BQU9oRCxNQUFNLElBQUF3RCxNQUFBLENBQUloRCxJQUFJLENBQUM0QyxLQUFLLElBQUFJLE1BQUEsQ0FBSVIsR0FBRyxRQUFLLENBQUMsUUFBSyxDQUFDO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNTLDBCQUEwQkEsQ0FBQ0MsSUFBWSxFQUFVO0VBQy9ELElBQUlDLEtBQUssQ0FBQ0QsSUFBSSxDQUFDLEVBQUU7SUFDZixJQUFBRSxrQkFBTSxFQUFDLHNCQUFzQixDQUFDO0lBQzlCLElBQUFBLGtCQUFNLEVBQUNGLElBQUksQ0FBQztFQUNkO0VBRUEsSUFBTUcsT0FBTyxHQUFHSCxJQUFJLENBQUNJLFFBQVEsQ0FBQyxDQUFDOztFQUUvQjtFQUNBLElBQU1DLGdCQUFnQixHQUFHRixPQUFPLENBQUNHLEtBQUssQ0FBQyxJQUFJLENBQUM7RUFDNUMsSUFBSUQsZ0JBQWdCLENBQUN4RCxNQUFNLEtBQUssQ0FBQyxFQUFFO0lBQ2pDLElBQU0wRCxTQUFTLEdBQUdGLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDQyxLQUFLLENBQUMsR0FBRyxDQUFDO0lBQ2hELElBQU1FLFlBQVksR0FBR0QsU0FBUyxDQUFDMUQsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcwRCxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMxRCxNQUFNO0lBQ3JFLE9BQU80RCxRQUFRLENBQUNKLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHRyxZQUFZO0VBQ3pEO0VBRUEsSUFBTUUsU0FBUyxHQUFHUCxPQUFPLENBQUNHLEtBQUssQ0FBQyxHQUFHLENBQUM7RUFDcEMsSUFBSUksU0FBUyxDQUFDN0QsTUFBTSxLQUFLLENBQUMsRUFBRTtJQUMxQixPQUFPLENBQUM7RUFDVjtFQUNBLE9BQU82RCxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM3RCxNQUFNO0FBQzVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBUzhELG9CQUFvQkEsQ0FDbEN0RCxHQUFXLEVBQ1hqQyxRQUE0QixFQUM1QjRFLElBQVksRUFDWlksS0FBdUIsRUFDZjtFQUNSLElBQUlBLEtBQUssSUFBSUEsS0FBSyxDQUFDL0QsTUFBTSxFQUFFO0lBQ3pCO0lBQ0EsT0FBTyxJQUFBZ0UsaUJBQVcsRUFBQ3hELEdBQUcsRUFBRXVELEtBQUssQ0FBQztFQUNoQztFQUVBLE9BQU9FLGNBQWMsQ0FBQzFGLFFBQVEsRUFBRTRFLElBQUksRUFBRTNDLEdBQUcsQ0FBQztBQUM1Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVN5RCxjQUFjQSxDQUFDMUYsUUFBNEIsRUFBRTRFLElBQVksRUFBRTNDLEdBQVcsRUFBVTtFQUM5RixJQUFJLENBQUNpQixRQUFRLENBQUMwQixJQUFJLENBQUMsSUFBSSxDQUFDMUIsUUFBUSxDQUFDbEQsUUFBUSxDQUFDLEVBQUU7SUFDMUMsT0FBT2lDLEdBQUc7RUFDWjtFQUVBLElBQU0wRCxPQUFPLEdBQUdoQiwwQkFBMEIsQ0FBQ0MsSUFBSSxDQUFDO0VBQ2hELElBQU1nQixLQUFLLEdBQUdsRSxJQUFJLENBQUNlLEtBQUssQ0FBQyxDQUFDUixHQUFHLEdBQUdqQyxRQUFRLElBQUk0RSxJQUFJLENBQUM7RUFDakQsSUFBSWlCLE1BQU0sR0FBRzVELEdBQUcsSUFBSTJELEtBQUssR0FBR2hCLElBQUksR0FBRzVFLFFBQVEsQ0FBQzs7RUFFNUM7RUFDQTZGLE1BQU0sR0FBRzNFLE1BQU0sQ0FBQytDLFlBQVksQ0FBQzRCLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztFQUV4QyxJQUFJQyxPQUFlO0VBQ25CLElBQUlELE1BQU0sS0FBSyxDQUFDLEVBQUU7SUFDaEJDLE9BQU8sR0FBRzdELEdBQUc7RUFDZixDQUFDLE1BQU0sSUFBSTRELE1BQU0sR0FBR2pCLElBQUksR0FBRyxDQUFDLEVBQUU7SUFDNUJrQixPQUFPLEdBQUdGLEtBQUssR0FBR2hCLElBQUksR0FBRzVFLFFBQVE7RUFDbkMsQ0FBQyxNQUFNO0lBQ0w4RixPQUFPLEdBQUcsQ0FBQ0YsS0FBSyxHQUFHLENBQUMsSUFBSWhCLElBQUksR0FBRzVFLFFBQVE7RUFDekM7O0VBRUE7RUFDQSxJQUFNK0YsT0FBTyxHQUFHOUIsWUFBWSxDQUFDNkIsT0FBTyxFQUFFSCxPQUFPLENBQUM7RUFFOUMsT0FBT3pFLE1BQU0sQ0FBQzZFLE9BQU8sQ0FBQztBQUN4Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1DLGdCQUFnQyxHQUFBMUcsT0FBQSxDQUFBMEcsZ0JBQUEsR0FBRyxTQUFuQ0EsZ0JBQWdDQSxDQUFHeEYsQ0FBQztFQUFBLE9BQUssSUFBQUMsK0JBQWtCLEVBQUNELENBQUMsQ0FBQyxHQUFHeUYsTUFBTSxDQUFDekYsQ0FBQyxDQUFDLEdBQUcsRUFBRTtBQUFBLENBQUM7QUFFdEYsSUFBTTBGLGNBQWMsR0FBQTVHLE9BQUEsQ0FBQTRHLGNBQUEsR0FBRyxTQUFqQkEsY0FBY0EsQ0FBRzFGLENBQUM7RUFBQSxPQUFLMEMsUUFBUSxDQUFDMUMsQ0FBQyxDQUFDLEdBQUd5RixNQUFNLENBQUN4QixXQUFXLENBQUNqRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUU7QUFBQSxDQUFDO0FBRXZFLElBQU0yRixvQkFFWixHQUFBN0csT0FBQSxDQUFBNkcsb0JBQUEsSUFBQS9HLHFCQUFBLFdBQUFnSCxnQkFBQSxpQkFBQUEsZ0JBQUEsaUJBQUFBLGdCQUFBLGlCQUFBQSxnQkFBQSxpQkFBQUEsZ0JBQUEsaUJBQUFBLGdCQUFBLGlCQUFBQSxnQkFBQSxpQkFBQUEsZ0JBQUEsaUJBQUFBLGdCQUFBLGlCQUFBQSxnQkFBQSxhQUFBaEgscUJBQUEsRUFDRXlFLDBCQUFlLENBQUN3QyxNQUFNLEVBQUdMLGdCQUFnQixHQUN6Q25DLDBCQUFlLENBQUNHLFNBQVMsRUFBR2dDLGdCQUFnQixHQUM1Q25DLDBCQUFlLENBQUNFLE9BQU8sRUFBR2lDLGdCQUFnQixHQUMxQ25DLDBCQUFlLENBQUNDLElBQUksRUFBR2tDLGdCQUFnQixHQUN2Q25DLDBCQUFlLFdBQVEsRUFBR21DLGdCQUFnQixHQUMxQ25DLDBCQUFlLENBQUN5QyxJQUFJLEVBQUdOLGdCQUFnQixHQUN2Q25DLDBCQUFlLENBQUMwQyxPQUFPLEVBQUcsVUFBQXRGLENBQUM7RUFBQSxPQUMxQixPQUFPQSxDQUFDLEtBQUssUUFBUSxHQUNqQkEsQ0FBQyxHQUNELElBQUF1RixvQkFBYSxFQUFDdkYsQ0FBQyxDQUFDLEdBQ2hCd0YsSUFBSSxDQUFDQyxTQUFTLENBQUN6RixDQUFDLENBQUMsR0FDakJFLEtBQUssQ0FBQ0MsT0FBTyxDQUFDSCxDQUFDLENBQUMsT0FBQXlELE1BQUEsQ0FDWnVCLE1BQU0sQ0FBQ2hGLENBQUMsQ0FBQyxTQUNiLEVBQUU7QUFBQSxJQUNQNEMsMEJBQWUsQ0FBQzhDLFFBQVEsRUFBRyxVQUFBMUYsQ0FBQztFQUFBLE9BQUlBLENBQUM7QUFBQSxJQUNqQzRDLDBCQUFlLENBQUMrQyxNQUFNLEVBQUcsVUFBQzdHLEtBQVUsRUFBSztFQUN4QyxJQUFJO0lBQ0YsT0FBTzBHLElBQUksQ0FBQ0MsU0FBUyxDQUFDM0csS0FBSyxDQUFDO0VBQzlCLENBQUMsQ0FBQyxPQUFPOEcsQ0FBQyxFQUFFO0lBQ1YsT0FBT1osTUFBTSxDQUFDbEcsS0FBSyxDQUFDO0VBQ3RCO0FBQ0YsQ0FBQyxHQUNBOEQsMEJBQWUsQ0FBQ2lELEtBQUssRUFBR0wsSUFBSSxDQUFDQyxTQUFTLE9BQUFOLGdCQUFBLGFBQUFoSCxxQkFBQSxFQUN0Q3lFLDBCQUFlLENBQUNrRCxFQUFFLEVBQUdmLGdCQUFnQixFQUN2Qzs7QUFFRDtBQUNBO0FBQ0E7QUFDTyxJQUFNZ0IsZUFBZSxHQUFBMUgsT0FBQSxDQUFBMEgsZUFBQSxHQUFHLFNBQWxCQSxlQUFlQSxDQUFJakgsS0FBVSxFQUFFa0gsSUFBWSxFQUFhO0VBQ25FLElBQUksQ0FBQyxJQUFBeEcsK0JBQWtCLEVBQUNWLEtBQUssQ0FBQyxFQUFFO0lBQzlCLE9BQU8sRUFBRTtFQUNYO0VBQ0E7RUFDQTtFQUNBO0VBQ0EsSUFBSSxPQUFPQSxLQUFLLEtBQUssUUFBUSxFQUFFO0lBQzdCLE9BQU9BLEtBQUssQ0FBQ2lGLFFBQVEsQ0FBQyxDQUFDO0VBQ3pCO0VBQ0EsT0FBT21CLG9CQUFvQixDQUFDYyxJQUFJLENBQUMsR0FBR2Qsb0JBQW9CLENBQUNjLElBQUksQ0FBQyxDQUFDbEgsS0FBSyxDQUFDLEdBQUdrRyxNQUFNLENBQUNsRyxLQUFLLENBQUM7QUFDdkYsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTbUgsWUFBWUEsQ0FDMUJyRSxNQUErQyxFQUMvQ3NFLEtBQWEsRUFDRztFQUNoQixJQUFJLENBQUN0RSxNQUFNLEVBQUU7SUFDWCxPQUFPbUQsZ0JBQWdCO0VBQ3pCO0VBQ0EsSUFBTW9CLGFBQWEsR0FBRzlELE1BQU0sQ0FBQ25ELE1BQU0sQ0FBQ2tILDBCQUFlLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLFVBQUFDLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUNDLHNCQUFXLENBQUMsS0FBSzNFLE1BQU07RUFBQSxFQUFDO0VBRXpGLElBQUl1RSxhQUFhLEVBQUU7SUFDakIsT0FBT0ssa0JBQWtCLENBQUNMLGFBQThCLENBQUM7RUFDM0QsQ0FBQyxNQUFNLElBQUksT0FBT3ZFLE1BQU0sS0FBSyxRQUFRLElBQUlzRSxLQUFLLEVBQUU7SUFDOUMsT0FBT08saUJBQWlCLENBQUM3RSxNQUFNLEVBQUVzRSxLQUFLLENBQUM7RUFDekM7RUFFQSxPQUFPbkIsZ0JBQWdCO0FBQ3pCO0FBRU8sU0FBUzJCLGtCQUFrQkEsQ0FDaENSLEtBQTZFLEVBQzdEO0VBQ2hCLElBQU90RSxNQUFNLEdBQW1Cc0UsS0FBSyxDQUE5QnRFLE1BQU07SUFBRStFLGFBQWEsR0FBSVQsS0FBSyxDQUF0QlMsYUFBYTtFQUU1QixJQUFJLENBQUMvRSxNQUFNLElBQUksQ0FBQytFLGFBQWEsRUFBRTtJQUM3QixPQUFPekIsb0JBQW9CLENBQUNnQixLQUFLLENBQUNGLElBQUksQ0FBQztFQUN6QztFQUNBLElBQU1HLGFBQWEsR0FBRzlELE1BQU0sQ0FBQ25ELE1BQU0sQ0FBQ2tILDBCQUFlLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLFVBQUFDLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUNDLHNCQUFXLENBQUMsS0FBS0ksYUFBYTtFQUFBLEVBQUM7RUFFaEcsSUFBSVIsYUFBYSxFQUFFO0lBQ2pCLE9BQU9LLGtCQUFrQixDQUFDTCxhQUFhLENBQUM7RUFDMUMsQ0FBQyxNQUFNLElBQUksT0FBT1EsYUFBYSxLQUFLLFFBQVEsSUFBSVQsS0FBSyxFQUFFO0lBQ3JELE9BQU9PLGlCQUFpQixDQUFDRSxhQUFhLEVBQUVULEtBQUssQ0FBQztFQUNoRCxDQUFDLE1BQU0sSUFBSSxJQUFBVSxRQUFBLGFBQU9ELGFBQWEsTUFBSyxRQUFRLEVBQUU7SUFDNUMsT0FBT0UsYUFBYSxDQUFDRixhQUFhLENBQUM7RUFDckM7RUFFQSxPQUFPNUIsZ0JBQWdCO0FBQ3pCO0FBRU8sU0FBUzhCLGFBQWFBLENBQUNqRixNQUFNLEVBQUU7RUFDcEMsT0FBTyxVQUFBckMsQ0FBQztJQUFBLE9BQUlxQyxNQUFNLENBQUNyQyxDQUFDLENBQUM7RUFBQTtBQUN2QjtBQUVPLFNBQVNpSCxrQkFBa0JBLENBQUNMLGFBQTRCLEVBQXNCO0VBQ25GLElBQUksQ0FBQ0EsYUFBYSxJQUFJLENBQUNBLGFBQWEsQ0FBQ3ZFLE1BQU0sRUFBRTtJQUMzQyxPQUFPbUQsZ0JBQWdCO0VBQ3pCO0VBRUEsUUFBUW9CLGFBQWEsQ0FBQ0gsSUFBSTtJQUN4QixLQUFLYywrQkFBb0IsQ0FBQ0MsT0FBTztNQUMvQixPQUFPLElBQUFDLGdCQUFRLEVBQUNiLGFBQWEsQ0FBQ3ZFLE1BQU0sQ0FBQztJQUN2QyxLQUFLa0YsK0JBQW9CLENBQUNHLElBQUk7SUFDOUIsS0FBS0gsK0JBQW9CLENBQUNJLFNBQVM7TUFDakMsT0FBT0MsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUNoQixhQUFhLENBQUN2RSxNQUFNLENBQUM7SUFDdEQsS0FBS2tGLCtCQUFvQixDQUFDTSxVQUFVO01BQ2xDLE9BQU8sVUFBQTdILENBQUM7UUFBQSxVQUFBa0UsTUFBQSxDQUFPLElBQUF1RCxnQkFBUSxFQUFDWiwwQkFBZSxDQUFDaUIsdUJBQXVCLENBQUN6RixNQUFNLENBQUMsQ0FBQ3JDLENBQUMsQ0FBQztNQUFBLENBQUc7SUFDL0UsS0FBS3VILCtCQUFvQixDQUFDUSxPQUFPO01BQy9CLE9BQU9DLG1CQUFtQixDQUFDcEIsYUFBYSxDQUFDdkUsTUFBTSxDQUFDO0lBQ2xEO01BQ0UsT0FBT21ELGdCQUFnQjtFQUMzQjtBQUNGO0FBRU8sU0FBU3dDLG1CQUFtQkEsQ0FBQzNGLE1BQWMsRUFBa0I7RUFDbEUsUUFBUUEsTUFBTTtJQUNaLEtBQUssSUFBSTtNQUNQLE9BQU8sVUFBQ3JDLENBQVU7UUFBQSxPQUFNQSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUc7TUFBQSxDQUFDO0lBQ3hDLEtBQUssSUFBSTtNQUNQLE9BQU8sVUFBQ0EsQ0FBVTtRQUFBLE9BQU1BLENBQUMsR0FBRyxLQUFLLEdBQUcsSUFBSTtNQUFBLENBQUM7SUFDM0M7TUFDRSxPQUFPd0YsZ0JBQWdCO0VBQzNCO0FBQ0Y7QUFDQTtBQUNPLFNBQVMwQixpQkFBaUJBLENBQUM3RSxNQUFNLEVBQUVzRSxLQUFzQixFQUFrQjtFQUNoRixRQUFRQSxLQUFLLENBQUNGLElBQUk7SUFDaEIsS0FBS3BELDBCQUFlLENBQUNDLElBQUk7SUFDekIsS0FBS0QsMEJBQWUsQ0FBQ0UsT0FBTztNQUMxQixPQUFPLElBQUFrRSxnQkFBUSxFQUFDcEYsTUFBTSxDQUFDO0lBQ3pCLEtBQUtnQiwwQkFBZSxDQUFDeUMsSUFBSTtJQUN6QixLQUFLekMsMEJBQWUsQ0FBQ0csU0FBUztNQUM1QixPQUFPb0UsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUN2RixNQUFNLENBQUM7SUFDeEM7TUFDRSxPQUFPLFVBQUFyQyxDQUFDO1FBQUEsT0FBSUEsQ0FBQztNQUFBO0VBQ2pCO0FBQ0Y7QUFFQSxTQUFTaUksaUJBQWlCQSxDQUFDQyxDQUFDLEVBQUU7RUFDNUI7RUFDQSxPQUFPLElBQUFULGdCQUFRLEVBQUMsTUFBTSxDQUFDLENBQUNTLENBQUMsQ0FBQztBQUM1QjtBQUVPLFNBQVNDLFlBQVlBLENBQUNELENBQVMsRUFBRXpCLElBQWEsRUFBVTtFQUM3RCxRQUFRQSxJQUFJO0lBQ1YsS0FBS3BELDBCQUFlLENBQUNFLE9BQU87TUFDMUIsSUFBSTJFLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDVCxXQUFBaEUsTUFBQSxDQUFXaUUsWUFBWSxDQUFDLENBQUNELENBQUMsRUFBRSxTQUFTLENBQUM7TUFDeEM7TUFDQSxJQUFJQSxDQUFDLEdBQUcsSUFBSSxFQUFFO1FBQ1osVUFBQWhFLE1BQUEsQ0FBVWhELElBQUksQ0FBQzRDLEtBQUssQ0FBQ29FLENBQUMsQ0FBQztNQUN6QjtNQUNBLElBQUlBLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFO1FBQ2pCLE9BQU8sSUFBQVQsZ0JBQVEsRUFBQyxHQUFHLENBQUMsQ0FBQ3ZHLElBQUksQ0FBQzRDLEtBQUssQ0FBQ29FLENBQUMsQ0FBQyxDQUFDO01BQ3JDO01BQ0EsT0FBT0QsaUJBQWlCLENBQUNDLENBQUMsQ0FBQztJQUM3QixLQUFLN0UsMEJBQWUsQ0FBQ0MsSUFBSTtNQUN2QixJQUFJNEUsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNULFdBQUFoRSxNQUFBLENBQVdpRSxZQUFZLENBQUMsQ0FBQ0QsQ0FBQyxFQUFFLFFBQVEsQ0FBQztNQUN2QztNQUNBLElBQUlBLENBQUMsR0FBRyxJQUFJLEVBQUU7UUFDWixPQUFPLElBQUFULGdCQUFRLEVBQUMsTUFBTSxDQUFDLENBQUNTLENBQUMsQ0FBQztNQUM1QjtNQUNBLElBQUlBLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFO1FBQ2pCLE9BQU8sSUFBQVQsZ0JBQVEsRUFBQyxPQUFPLENBQUMsQ0FBQ1MsQ0FBQyxDQUFDO01BQzdCO01BQ0EsT0FBT0QsaUJBQWlCLENBQUNDLENBQUMsQ0FBQztJQUU3QjtNQUNFLE9BQU9DLFlBQVksQ0FBQ0QsQ0FBQyxFQUFFLE1BQU0sQ0FBQztFQUNsQztBQUNGO0FBRUEsSUFBTUUsY0FBYyxHQUFHO0VBQ3JCQyxDQUFDLEVBQUVuSCxJQUFJLENBQUMyQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztFQUNuQnlFLENBQUMsRUFBRXBILElBQUksQ0FBQzJDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO0VBQ25CMEUsQ0FBQyxFQUFFckgsSUFBSSxDQUFDMkMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7RUFDbkIyRSxDQUFDLEVBQUV0SCxJQUFJLENBQUMyQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztFQUNuQjRFLENBQUMsRUFBRXZILElBQUksQ0FBQzJDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO0VBQ25CNkUsQ0FBQyxFQUFFeEgsSUFBSSxDQUFDMkMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7RUFDbEI4RSxDQUFDLEVBQUV6SCxJQUFJLENBQUMyQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztFQUNsQitFLENBQUMsRUFBRTFILElBQUksQ0FBQzJDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0VBQ2xCZ0YsQ0FBQyxFQUFFM0gsSUFBSSxDQUFDMkMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7RUFDbEJpRixFQUFFLEVBQUU1SCxJQUFJLENBQUMyQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztFQUNuQnBELENBQUMsRUFBRVMsSUFBSSxDQUFDMkMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUNuQmtGLENBQUMsRUFBRTdILElBQUksQ0FBQzJDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDbkJtRixDQUFDLEVBQUU5SCxJQUFJLENBQUMyQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQ25Cb0YsQ0FBQyxFQUFFL0gsSUFBSSxDQUFDMkMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUNuQnFFLENBQUMsRUFBRWhILElBQUksQ0FBQzJDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDbkJxRixDQUFDLEVBQUVoSSxJQUFJLENBQUMyQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ3BCa0QsQ0FBQyxFQUFFN0YsSUFBSSxDQUFDMkMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNwQlosQ0FBQyxFQUFFL0IsSUFBSSxDQUFDMkMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNwQnNGLENBQUMsRUFBRWpJLElBQUksQ0FBQzJDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDcEJ1RixDQUFDLEVBQUVsSSxJQUFJLENBQUMyQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNyQixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNPLFNBQVN3RixtQkFBbUJBLENBQUNDLEdBQVcsRUFBVTtFQUN2RCxJQUFJQyxXQUEwQixHQUFHLElBQUk7RUFDckMsSUFBTUMsTUFBTSxHQUFHRixHQUFHLENBQUNHLElBQUksQ0FBQyxDQUFDLENBQUNDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO0VBQzNDNUcsTUFBTSxDQUFDNkcsT0FBTyxDQUFDdkIsY0FBYyxDQUFDLENBQUNySSxPQUFPLENBQUMsVUFBQVUsQ0FBQyxFQUFJO0lBQzFDLElBQUkrSSxNQUFNLENBQUNJLFFBQVEsQ0FBQ25KLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO01BQ3pCOEksV0FBVyxHQUFHTSxVQUFVLENBQUNMLE1BQU0sQ0FBQyxHQUFHL0ksQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUN2QyxPQUFPLElBQUk7SUFDYjtJQUNBLE9BQU8sS0FBSztFQUNkLENBQUMsQ0FBQzs7RUFFRjtFQUNBLE9BQU84SSxXQUFXLEtBQUssSUFBSSxHQUFHN0ksTUFBTSxDQUFDOEksTUFBTSxDQUFDLEdBQUdELFdBQVc7QUFDNUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTM0IsaUJBQWlCQSxDQUMvQmtDLFFBQXdCLEVBQ3FCO0VBQzdDLE9BQU9BLFFBQVEsR0FDWCxVQUFBekgsTUFBTTtJQUFBLE9BQUksVUFBQTBILEVBQUU7TUFBQSxPQUFJekgsMEJBQU0sQ0FBQ0MsR0FBRyxDQUFDd0gsRUFBRSxDQUFDLENBQUNDLEVBQUUsQ0FBQ0YsUUFBUSxDQUFDLENBQUN6SCxNQUFNLENBQUNBLE1BQU0sQ0FBQztJQUFBO0VBQUE7RUFDMUQ7RUFDQSxVQUFBQSxNQUFNO0lBQUEsT0FBSSxVQUFBMEgsRUFBRTtNQUFBLE9BQUlBLEVBQUUsR0FBR3pILDBCQUFNLENBQUNDLEdBQUcsQ0FBQ3dILEVBQUUsQ0FBQyxDQUFDMUgsTUFBTSxDQUFDQSxNQUFNLENBQUMsR0FBRyxFQUFFO0lBQUE7RUFBQTtBQUM3RCIsImlnbm9yZUxpc3QiOltdfQ==
534
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhcnJvdyIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsIl9hc3NlcnQiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2QzRm9ybWF0IiwiX21vbWVudFRpbWV6b25lIiwiX2Fycm93IiwiX2NvbnN0YW50cyIsIl9jb21tb25VdGlscyIsIl9wbG90IiwiX3V0aWxzIiwiX0ZJRUxEX0RJU1BMQVlfRk9STUFUIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mMyIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIk1BWF9MQVRJVFVERSIsImV4cG9ydHMiLCJNSU5fTEFUSVRVREUiLCJNQVhfTE9OR0lUVURFIiwiTUlOX0xPTkdJVFVERSIsInZhbGlkYXRlTGF0aXR1ZGUiLCJsYXRpdHVkZSIsInZhbGlkYXRlQ29vcmRpbmF0ZSIsInZhbGlkYXRlTG9uZ2l0dWRlIiwibG9uZ2l0dWRlIiwidmFsdWUiLCJtaW5WYWx1ZSIsIm1heFZhbHVlIiwidW5pcXVlIiwidmFsdWVzIiwicmVzdWx0cyIsInVuaXF1ZVNldCIsIlNldCIsImZvckVhY2giLCJ2Iiwibm90TnVsbG9yVW5kZWZpbmVkIiwicHVzaCIsImdldExhdExuZ0JvdW5kcyIsInBvaW50cyIsImlkeCIsImxpbWl0IiwibGF0cyIsIm1hcCIsImQiLCJOdW1iZXIiLCJBcnJheSIsImlzQXJyYXkiLCJmaWx0ZXIiLCJpc0Zpbml0ZSIsInNvcnQiLCJudW1iZXJTb3J0IiwibGVuZ3RoIiwiTWF0aCIsIm1heCIsIm1pbiIsImNsYW1wIiwiX3JlZiIsIl9yZWYyIiwiX3NsaWNlZFRvQXJyYXkyIiwidmFsIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwiZ2V0U2FtcGxlRGF0YSIsImRhdGEiLCJzYW1wbGVTaXplIiwiZ2V0VmFsdWUiLCJzYW1wbGVTdGVwIiwiZmxvb3IiLCJvdXRwdXQiLCJ0aW1lVG9Vbml4TWlsbGkiLCJmb3JtYXQiLCJtb21lbnQiLCJ1dGMiLCJ2YWx1ZU9mIiwiRGF0ZSIsImlzTnVtYmVyIiwib2JqIiwicHJvcCIsInByb3RvdHlwZSIsImIiLCJnZXRTb3J0aW5nRnVuY3Rpb24iLCJmaWVsZFR5cGUiLCJBTExfRklFTERfVFlQRVMiLCJyZWFsIiwiaW50ZWdlciIsInRpbWVzdGFtcCIsInByZWNpc2VSb3VuZCIsIm51bSIsImRlY2ltYWxzIiwicG93Iiwicm91bmQiLCJzaWduIiwidG9GaXhlZCIsInJvdW5kVG9Gb3VyIiwiY29uY2F0IiwiZ2V0Um91bmRpbmdEZWNpbWFsRnJvbVN0ZXAiLCJzdGVwIiwiaXNOYU4iLCJhc3NlcnQiLCJzdGVwU3RyIiwidG9TdHJpbmciLCJzcGxpdEV4cG9uZW50aWFsIiwic3BsaXQiLCJjb2VmZlplcm8iLCJjb2VmZkRlY2ltYWwiLCJwYXJzZUludCIsInNwbGl0WmVybyIsIm5vcm1hbGl6ZVNsaWRlclZhbHVlIiwibWFya3MiLCJzbmFwVG9NYXJrcyIsInJvdW5kVmFsVG9TdGVwIiwiZGVjaW1hbCIsInN0ZXBzIiwicmVtYWluIiwiY2xvc2VzdCIsInJvdW5kZWQiLCJkZWZhdWx0Rm9ybWF0dGVyIiwiU3RyaW5nIiwiZmxvYXRGb3JtYXR0ZXIiLCJ1aW50OEFycmF5VG9IZXgiLCJmcm9tIiwiYnl0ZSIsInBhZFN0YXJ0Iiwiam9pbiIsIkZJRUxEX0RJU1BMQVlfRk9STUFUIiwiX2RlZmluZVByb3BlcnR5MiIsInN0cmluZyIsImRhdGUiLCJnZW9qc29uIiwiaXNQbGFpbk9iamVjdCIsIkpTT04iLCJzdHJpbmdpZnkiLCJnZW9hcnJvdyIsImZpZWxkIiwiVmVjdG9yIiwiX2ZpZWxkJG1ldGFkYXRhIiwiZW5jb2RpbmciLCJtZXRhZGF0YSIsImdlb21ldHJ5IiwicGFyc2VHZW9tZXRyeUZyb21BcnJvdyIsImVycm9yIiwiVWludDhBcnJheSIsIm9iamVjdCIsImFycmF5IiwiaDMiLCJwYXJzZUZpZWxkVmFsdWUiLCJ0eXBlIiwiZ2V0Rm9ybWF0dGVyIiwidG9vbHRpcEZvcm1hdCIsIlRPT0xUSVBfRk9STUFUUyIsImZpbmQiLCJmIiwiVE9PTFRJUF9LRVkiLCJhcHBseURlZmF1bHRGb3JtYXQiLCJhcHBseUN1c3RvbUZvcm1hdCIsImdldENvbHVtbkZvcm1hdHRlciIsImRpc3BsYXlGb3JtYXQiLCJfdHlwZW9mMiIsImFwcGx5VmFsdWVNYXAiLCJUT09MVElQX0ZPUk1BVF9UWVBFUyIsIkRFQ0lNQUwiLCJkM0Zvcm1hdCIsIkRBVEUiLCJEQVRFX1RJTUUiLCJkYXRldGltZUZvcm1hdHRlciIsIlBFUkNFTlRBR0UiLCJERUNJTUFMX0RFQ0lNQUxfRklYRURfMiIsIkJPT0xFQU4iLCJnZXRCb29sZWFuRm9ybWF0dGVyIiwiZm9ybWF0TGFyZ2VOdW1iZXIiLCJmb3JtYXROdW1iZXIiLCJ0cmFuc2Zvcm1hdGlvbiIsIlkiLCJaIiwiRSIsIlAiLCJUIiwiRyIsIk0iLCJrIiwiaCIsImRhIiwiYyIsIm0iLCLOvCIsInAiLCJ6IiwieSIsInJldmVyc2VGb3JtYXROdW1iZXIiLCJzdHIiLCJyZXR1cm5WYWx1ZSIsInN0ck51bSIsInRyaW0iLCJyZXBsYWNlIiwiZW50cmllcyIsImluY2x1ZGVzIiwicGFyc2VGbG9hdCIsInRpbWV6b25lIiwidHMiLCJ0eiJdLCJzb3VyY2VzIjpbIi4uL3NyYy9kYXRhLXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCAqIGFzIGFycm93IGZyb20gJ2FwYWNoZS1hcnJvdyc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQge2Zvcm1hdCBhcyBkM0Zvcm1hdH0gZnJvbSAnZDMtZm9ybWF0JztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50LXRpbWV6b25lJztcblxuaW1wb3J0IHtwYXJzZUdlb21ldHJ5RnJvbUFycm93fSBmcm9tICdAbG9hZGVycy5nbC9hcnJvdyc7XG5cbmltcG9ydCB7XG4gIEFMTF9GSUVMRF9UWVBFUyxcbiAgVE9PTFRJUF9GT1JNQVRTLFxuICBUT09MVElQX0ZPUk1BVF9UWVBFUyxcbiAgVE9PTFRJUF9LRVksXG4gIFRvb2x0aXBGb3JtYXRcbn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtub3ROdWxsb3JVbmRlZmluZWR9IGZyb20gJ0BrZXBsZXIuZ2wvY29tbW9uLXV0aWxzJztcbmltcG9ydCB7RmllbGQsIE1pbGxpc2Vjb25kLCBQcm90b0RhdGFzZXRGaWVsZH0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5cbmltcG9ydCB7c25hcFRvTWFya3N9IGZyb20gJy4vcGxvdCc7XG5pbXBvcnQge2lzUGxhaW5PYmplY3R9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgdHlwZSBGaWVsZEZvcm1hdHRlciA9ICh2YWx1ZTogYW55LCBmaWVsZD86IFByb3RvRGF0YXNldEZpZWxkKSA9PiBzdHJpbmc7XG5cbi8vIFdlIG5lZWQgdGhyZWF0IGxhdGl0dWRlIGRpZmZlcmVudGx5IG90aGVyd2lzZSBtZXJjYXRvciBwcm9qZWN0IHZpZXcgdGhyb3dzXG4vLyBhIHByb2plY3Rpb24gbWF0cml4IGVycm9yXG4vLyBVbmNhdWdodCBFcnJvcjogUGl4ZWwgcHJvamVjdCBtYXRyaXggbm90IGludmVydGlibGVcbi8vIGF0IFdlYk1lcmNhdG9yVmlld3BvcnQxNi5WaWV3cG9ydDYgKHZpZXdwb3J0LmpzOjgxOjEzKVxuZXhwb3J0IGNvbnN0IE1BWF9MQVRJVFVERSA9IDg5Ljk7XG5leHBvcnQgY29uc3QgTUlOX0xBVElUVURFID0gLTg5Ljk7XG5leHBvcnQgY29uc3QgTUFYX0xPTkdJVFVERSA9IDE4MDtcbmV4cG9ydCBjb25zdCBNSU5fTE9OR0lUVURFID0gLTE4MDtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgYSBsYXRpdHVkZSB2YWx1ZS5cbiAqIEVuc3VyZXMgdGhhdCB0aGUgbGF0aXR1ZGUgaXMgd2l0aGluIHRoZSBkZWZpbmVkIG1pbmltdW0gYW5kIG1heGltdW0gbGF0aXR1ZGUgYm91bmRzLlxuICogSWYgdGhlIHZhbHVlIGlzIG91dCBvZiBib3VuZHMsIGl0IHJldHVybnMgdGhlIG5lYXJlc3QgYm91bmQgdmFsdWUuXG4gKiBAcGFyYW0gbGF0aXR1ZGUgLSBUaGUgbGF0aXR1ZGUgdmFsdWUgdG8gdmFsaWRhdGUuXG4gKiBAcmV0dXJucyBUaGUgdmFsaWRhdGVkIGxhdGl0dWRlIHZhbHVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVMYXRpdHVkZShsYXRpdHVkZTogbnVtYmVyIHwgdW5kZWZpbmVkKTogbnVtYmVyIHtcbiAgcmV0dXJuIHZhbGlkYXRlQ29vcmRpbmF0ZShsYXRpdHVkZSA/PyAwLCBNSU5fTEFUSVRVREUsIE1BWF9MQVRJVFVERSk7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGEgbG9uZ2l0dWRlIHZhbHVlLlxuICogRW5zdXJlcyB0aGF0IHRoZSBsb25naXR1ZGUgaXMgd2l0aGluIHRoZSBkZWZpbmVkIG1pbmltdW0gYW5kIG1heGltdW0gbG9uZ2l0dWRlIGJvdW5kcy5cbiAqIElmIHRoZSB2YWx1ZSBpcyBvdXQgb2YgYm91bmRzLCBpdCByZXR1cm5zIHRoZSBuZWFyZXN0IGJvdW5kIHZhbHVlLlxuICogQHBhcmFtIGxvbmdpdHVkZSAtIFRoZSBsb25naXR1ZGUgdmFsdWUgdG8gdmFsaWRhdGUuXG4gKiBAcmV0dXJucyBUaGUgdmFsaWRhdGVkIGxvbmdpdHVkZSB2YWx1ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTG9uZ2l0dWRlKGxvbmdpdHVkZTogbnVtYmVyIHwgdW5kZWZpbmVkKTogbnVtYmVyIHtcbiAgcmV0dXJuIHZhbGlkYXRlQ29vcmRpbmF0ZShsb25naXR1ZGUgPz8gMCwgTUlOX0xPTkdJVFVERSwgTUFYX0xPTkdJVFVERSk7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGEgY29vcmRpbmF0ZSB2YWx1ZS5cbiAqIEVuc3VyZXMgdGhhdCB0aGUgdmFsdWUgaXMgd2l0aGluIHRoZSBzcGVjaWZpZWQgbWluaW11bSBhbmQgbWF4aW11bSBib3VuZHMuXG4gKiBJZiB0aGUgdmFsdWUgaXMgb3V0IG9mIGJvdW5kcywgaXQgcmV0dXJucyB0aGUgbmVhcmVzdCBib3VuZCB2YWx1ZS5cbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBjb29yZGluYXRlIHZhbHVlIHRvIHZhbGlkYXRlLlxuICogQHBhcmFtIG1pblZhbHVlIC0gVGhlIG1pbmltdW0gYm91bmQgZm9yIHRoZSB2YWx1ZS5cbiAqIEBwYXJhbSBtYXhWYWx1ZSAtIFRoZSBtYXhpbXVtIGJvdW5kIGZvciB0aGUgdmFsdWUuXG4gKiBAcmV0dXJucyBUaGUgdmFsaWRhdGVkIGNvb3JkaW5hdGUgdmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUNvb3JkaW5hdGUodmFsdWU6IG51bWJlciwgbWluVmFsdWU6IG51bWJlciwgbWF4VmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gIGlmICh2YWx1ZSA8PSBtaW5WYWx1ZSkge1xuICAgIHJldHVybiBtaW5WYWx1ZTtcbiAgfVxuICBpZiAodmFsdWUgPj0gbWF4VmFsdWUpIHtcbiAgICByZXR1cm4gbWF4VmFsdWU7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogc2ltcGxlIGdldHRpbmcgdW5pcXVlIHZhbHVlcyBvZiBhbiBhcnJheVxuICpcbiAqIEBwYXJhbSB2YWx1ZXNcbiAqIEByZXR1cm5zIHVuaXF1ZSB2YWx1ZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVuaXF1ZTxUPih2YWx1ZXM6IFRbXSkge1xuICBjb25zdCByZXN1bHRzOiBUW10gPSBbXTtcbiAgY29uc3QgdW5pcXVlU2V0ID0gbmV3IFNldCh2YWx1ZXMpO1xuICB1bmlxdWVTZXQuZm9yRWFjaCh2ID0+IHtcbiAgICBpZiAobm90TnVsbG9yVW5kZWZpbmVkKHYpKSB7XG4gICAgICByZXN1bHRzLnB1c2godik7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXRMbmdCb3VuZHMoXG4gIHBvaW50czogbnVtYmVyW11bXSxcbiAgaWR4OiBudW1iZXIsXG4gIGxpbWl0OiBbbnVtYmVyLCBudW1iZXJdXG4pOiBbbnVtYmVyLCBudW1iZXJdIHwgbnVsbCB7XG4gIGNvbnN0IGxhdHMgPSBwb2ludHNcbiAgICAubWFwKGQgPT4gTnVtYmVyKEFycmF5LmlzQXJyYXkoZCkpICYmIGRbaWR4XSlcbiAgICAuZmlsdGVyKE51bWJlci5pc0Zpbml0ZSlcbiAgICAuc29ydChudW1iZXJTb3J0KTtcblxuICBpZiAoIWxhdHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBjbGFtcCB0byBsaW1pdFxuICByZXR1cm4gW01hdGgubWF4KGxhdHNbMF0sIGxpbWl0WzBdKSwgTWF0aC5taW4obGF0c1tsYXRzLmxlbmd0aCAtIDFdLCBsaW1pdFsxXSldO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xhbXAoW21pbiwgbWF4XTogW251bWJlciwgbnVtYmVyXSwgdmFsID0gMCk6IG51bWJlciB7XG4gIHJldHVybiB2YWwgPD0gbWluID8gbWluIDogdmFsID49IG1heCA/IG1heCA6IHZhbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNhbXBsZURhdGEoZGF0YSwgc2FtcGxlU2l6ZSA9IDUwMCwgZ2V0VmFsdWUgPSBkID0+IGQpIHtcbiAgY29uc3Qgc2FtcGxlU3RlcCA9IE1hdGgubWF4KE1hdGguZmxvb3IoZGF0YS5sZW5ndGggLyBzYW1wbGVTaXplKSwgMSk7XG4gIGNvbnN0IG91dHB1dDogYW55W10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSArPSBzYW1wbGVTdGVwKSB7XG4gICAgb3V0cHV0LnB1c2goZ2V0VmFsdWUoZGF0YVtpXSkpO1xuICB9XG5cbiAgcmV0dXJuIG91dHB1dDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGRpZmZlcmVudCB0aW1lIGZvcm1hdCB0byB1bml4IG1pbGxpc2Vjb25kc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdGltZVRvVW5peE1pbGxpKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBEYXRlLCBmb3JtYXQ6IHN0cmluZyk6IE1pbGxpc2Vjb25kIHwgbnVsbCB7XG4gIGlmIChub3ROdWxsb3JVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBtb21lbnQudXRjKHZhbHVlLCBmb3JtYXQpLnZhbHVlT2YoKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBmb3JtYXQgPT09ICd4JyA/IHZhbHVlICogMTAwMCA6IHZhbHVlO1xuICAgIH1cbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICByZXR1cm4gdmFsdWUudmFsdWVPZigpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIGQgaXMgYSBudW1iZXIsIHRoaXMgZmlsdGVyZWQgb3V0IE5hTiBhcyB3ZWxsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlcihkOiB1bmtub3duKTogZCBpcyBudW1iZXIge1xuICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKGQpO1xufVxuXG4vKipcbiAqIHdoZXRoZXIgb2JqZWN0IGhhcyBwcm9wZXJ0eVxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BcbiAqIEByZXR1cm5zIHtib29sZWFufSAtIHllcyBvciBub1xuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzT3duUHJvcGVydHk8WCBleHRlbmRzIG9iamVjdCwgWSBleHRlbmRzIFByb3BlcnR5S2V5PihcbiAgb2JqOiBYLFxuICBwcm9wOiBZXG4pOiBvYmogaXMgWCAmIFJlY29yZDxZLCB1bmtub3duPiB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG51bWJlclNvcnQoYTogbnVtYmVyLCBiOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gYSAtIGI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTb3J0aW5nRnVuY3Rpb24oZmllbGRUeXBlOiBzdHJpbmcpOiB0eXBlb2YgbnVtYmVyU29ydCB8IHVuZGVmaW5lZCB7XG4gIHN3aXRjaCAoZmllbGRUeXBlKSB7XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMucmVhbDpcbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5pbnRlZ2VyOlxuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLnRpbWVzdGFtcDpcbiAgICAgIHJldHVybiBudW1iZXJTb3J0O1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogcm91bmQgbnVtYmVyIHdpdGggZXhhY3QgbnVtYmVyIG9mIGRlY2ltYWxzXG4gKiByZXR1cm4gYXMgYSBzdHJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZWNpc2VSb3VuZChudW06IG51bWJlciwgZGVjaW1hbHM6IG51bWJlcik6IHN0cmluZyB7XG4gIGNvbnN0IHQgPSBNYXRoLnBvdygxMCwgZGVjaW1hbHMpO1xuICByZXR1cm4gKFxuICAgIE1hdGgucm91bmQoXG4gICAgICBudW0gKiB0ICsgKGRlY2ltYWxzID4gMCA/IDEgOiAwKSAqIChNYXRoLnNpZ24obnVtKSAqICgxMCAvIE1hdGgucG93KDEwMCwgZGVjaW1hbHMpKSlcbiAgICApIC8gdFxuICApLnRvRml4ZWQoZGVjaW1hbHMpO1xufVxuXG4vKipcbiAqIHJvdW5kIGEgZ2l2aW5nIG51bWJlciBhdCBtb3N0IDQgZGVjaW1hbCBwbGFjZXNcbiAqIGUuZy4gMTAgLT4gMTAsIDEuMTIzNDUgLT4gMS4yMzQ1LCAyLjAgLT4gMlxuICovXG5leHBvcnQgZnVuY3Rpb24gcm91bmRUb0ZvdXIobnVtOiBudW1iZXIpOiBudW1iZXIge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gIHJldHVybiBOdW1iZXIoYCR7TWF0aC5yb3VuZChgJHtudW19ZSs0YCl9ZS00YCk7XG59XG4vKipcbiAqIGdldCBudW1iZXIgb2YgZGVjaW1hbHMgdG8gcm91bmQgdG8gZm9yIHNsaWRlciBmcm9tIHN0ZXBcbiAqIEBwYXJhbSBzdGVwXG4gKiBAcmV0dXJucy0gbnVtYmVyIG9mIGRlY2ltYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJvdW5kaW5nRGVjaW1hbEZyb21TdGVwKHN0ZXA6IG51bWJlcik6IG51bWJlciB7XG4gIGlmIChpc05hTihzdGVwKSkge1xuICAgIGFzc2VydCgnc3RlcCBpcyBub3QgYSBudW1iZXInKTtcbiAgICBhc3NlcnQoc3RlcCk7XG4gIH1cblxuICBjb25zdCBzdGVwU3RyID0gc3RlcC50b1N0cmluZygpO1xuXG4gIC8vIGluIGNhc2UgdGhlIHN0ZXAgaXMgYSB2ZXJ5IHNtYWxsIG51bWJlciBlLmcuIDFlLTcsIHJldHVybiBkZWNpbWFsIGUuZy4gNyBkaXJlY3RseVxuICBjb25zdCBzcGxpdEV4cG9uZW50aWFsID0gc3RlcFN0ci5zcGxpdCgnZS0nKTtcbiAgaWYgKHNwbGl0RXhwb25lbnRpYWwubGVuZ3RoID09PSAyKSB7XG4gICAgY29uc3QgY29lZmZaZXJvID0gc3BsaXRFeHBvbmVudGlhbFswXS5zcGxpdCgnLicpO1xuICAgIGNvbnN0IGNvZWZmRGVjaW1hbCA9IGNvZWZmWmVyby5sZW5ndGggPT09IDEgPyAwIDogY29lZmZaZXJvWzFdLmxlbmd0aDtcbiAgICByZXR1cm4gcGFyc2VJbnQoc3BsaXRFeHBvbmVudGlhbFsxXSwgMTApICsgY29lZmZEZWNpbWFsO1xuICB9XG5cbiAgY29uc3Qgc3BsaXRaZXJvID0gc3RlcFN0ci5zcGxpdCgnLicpO1xuICBpZiAoc3BsaXRaZXJvLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIHJldHVybiBzcGxpdFplcm9bMV0ubGVuZ3RoO1xufVxuXG4vKipcbiAqIElmIG1hcmtzIGlzIHByb3ZpZGVkLCBzbmFwIHRvIG1hcmtzLCBpZiBub3Qgbm9ybWFsaXplIHRvIHN0ZXBcbiAqIEBwYXJhbSB2YWxcbiAqIEBwYXJhbSBtaW5WYWx1ZVxuICogQHBhcmFtIHN0ZXBcbiAqIEBwYXJhbSBtYXJrc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplU2xpZGVyVmFsdWUoXG4gIHZhbDogbnVtYmVyLFxuICBtaW5WYWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkLFxuICBzdGVwOiBudW1iZXIsXG4gIG1hcmtzPzogbnVtYmVyW10gfCBudWxsXG4pOiBudW1iZXIge1xuICBpZiAobWFya3MgJiYgbWFya3MubGVuZ3RoKSB7XG4gICAgLy8gVXNlIGluIHNsaWRlciwgZ2l2ZW4gYSBudW1iZXIgYW5kIGFuIGFycmF5IG9mIG51bWJlcnMsIHJldHVybiB0aGUgbmVhcnMgbnVtYmVyIGZyb20gdGhlIGFycmF5XG4gICAgcmV0dXJuIHNuYXBUb01hcmtzKHZhbCwgbWFya3MpO1xuICB9XG5cbiAgcmV0dXJuIHJvdW5kVmFsVG9TdGVwKG1pblZhbHVlLCBzdGVwLCB2YWwpO1xufVxuXG4vKipcbiAqIHJvdW5kIHRoZSB2YWx1ZSB0byBzdGVwIGZvciB0aGUgc2xpZGVyXG4gKiBAcGFyYW0gbWluVmFsdWVcbiAqIEBwYXJhbSBzdGVwXG4gKiBAcGFyYW0gdmFsXG4gKiBAcmV0dXJucyAtIHJvdW5kZWQgbnVtYmVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByb3VuZFZhbFRvU3RlcChtaW5WYWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkLCBzdGVwOiBudW1iZXIsIHZhbDogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKCFpc051bWJlcihzdGVwKSB8fCAhaXNOdW1iZXIobWluVmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuXG4gIGNvbnN0IGRlY2ltYWwgPSBnZXRSb3VuZGluZ0RlY2ltYWxGcm9tU3RlcChzdGVwKTtcbiAgY29uc3Qgc3RlcHMgPSBNYXRoLmZsb29yKCh2YWwgLSBtaW5WYWx1ZSkgLyBzdGVwKTtcbiAgbGV0IHJlbWFpbiA9IHZhbCAtIChzdGVwcyAqIHN0ZXAgKyBtaW5WYWx1ZSk7XG5cbiAgLy8gaGFzIHRvIHJvdW5kIGJlY2F1c2UgamF2YXNjcmlwdCB0dXJucyAwLjEgaW50byAwLjk5OTk5OTk5OTk5OTk5ODdcbiAgcmVtYWluID0gTnVtYmVyKHByZWNpc2VSb3VuZChyZW1haW4sIDgpKTtcblxuICBsZXQgY2xvc2VzdDogbnVtYmVyO1xuICBpZiAocmVtYWluID09PSAwKSB7XG4gICAgY2xvc2VzdCA9IHZhbDtcbiAgfSBlbHNlIGlmIChyZW1haW4gPCBzdGVwIC8gMikge1xuICAgIGNsb3Nlc3QgPSBzdGVwcyAqIHN0ZXAgKyBtaW5WYWx1ZTtcbiAgfSBlbHNlIHtcbiAgICBjbG9zZXN0ID0gKHN0ZXBzICsgMSkgKiBzdGVwICsgbWluVmFsdWU7XG4gIH1cblxuICAvLyBwcmVjaXNlIHJvdW5kIHJldHVybiBhIHN0cmluZyByb3VuZGVkIHRvIHRoZSBkZWZpbmVkIGRlY2ltYWxcbiAgY29uc3Qgcm91bmRlZCA9IHByZWNpc2VSb3VuZChjbG9zZXN0LCBkZWNpbWFsKTtcblxuICByZXR1cm4gTnVtYmVyKHJvdW5kZWQpO1xufVxuXG4vKipcbiAqIEdldCB0aGUgdmFsdWUgZm9ybWF0IGJhc2VkIG9uIGZpZWxkIGFuZCBmb3JtYXQgb3B0aW9uc1xuICogVXNlZCBpbiByZW5kZXIgdG9vbHRpcCB2YWx1ZVxuICovXG5leHBvcnQgY29uc3QgZGVmYXVsdEZvcm1hdHRlcjogRmllbGRGb3JtYXR0ZXIgPSB2ID0+IChub3ROdWxsb3JVbmRlZmluZWQodikgPyBTdHJpbmcodikgOiAnJyk7XG5cbmV4cG9ydCBjb25zdCBmbG9hdEZvcm1hdHRlciA9IHYgPT4gKGlzTnVtYmVyKHYpID8gU3RyaW5nKHJvdW5kVG9Gb3VyKHYpKSA6ICcnKTtcblxuLyoqXG4gKiBUcmFuc2Zvcm1zIGEgV0tCIGluIFVpbnQ4QXJyYXkgZm9ybSBpbnRvIGEgaGV4IFdLQiBzdHJpbmcuXG4gKiBAcGFyYW0gdWludDhBcnJheSBXS0IgaW4gVWludDhBcnJheSBmb3JtLlxuICogQHJldHVybnMgaGV4IFdLQiBzdHJpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1aW50OEFycmF5VG9IZXgoZGF0YTogVWludDhBcnJheSk6IHN0cmluZyB7XG4gIHJldHVybiBBcnJheS5mcm9tKGRhdGEpXG4gICAgLm1hcChieXRlID0+IChieXRlIGFzIGFueSkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJykpXG4gICAgLmpvaW4oJycpO1xufVxuXG5leHBvcnQgY29uc3QgRklFTERfRElTUExBWV9GT1JNQVQ6IHtcbiAgW2tleTogc3RyaW5nXTogRmllbGRGb3JtYXR0ZXI7XG59ID0ge1xuICBbQUxMX0ZJRUxEX1RZUEVTLnN0cmluZ106IGRlZmF1bHRGb3JtYXR0ZXIsXG4gIFtBTExfRklFTERfVFlQRVMudGltZXN0YW1wXTogZGVmYXVsdEZvcm1hdHRlcixcbiAgW0FMTF9GSUVMRF9UWVBFUy5pbnRlZ2VyXTogZGVmYXVsdEZvcm1hdHRlcixcbiAgW0FMTF9GSUVMRF9UWVBFUy5yZWFsXTogZGVmYXVsdEZvcm1hdHRlcixcbiAgW0FMTF9GSUVMRF9UWVBFUy5ib29sZWFuXTogZGVmYXVsdEZvcm1hdHRlcixcbiAgW0FMTF9GSUVMRF9UWVBFUy5kYXRlXTogZGVmYXVsdEZvcm1hdHRlcixcbiAgW0FMTF9GSUVMRF9UWVBFUy5nZW9qc29uXTogZCA9PlxuICAgIHR5cGVvZiBkID09PSAnc3RyaW5nJ1xuICAgICAgPyBkXG4gICAgICA6IGlzUGxhaW5PYmplY3QoZClcbiAgICAgID8gSlNPTi5zdHJpbmdpZnkoZClcbiAgICAgIDogQXJyYXkuaXNBcnJheShkKVxuICAgICAgPyBgWyR7U3RyaW5nKGQpfV1gXG4gICAgICA6ICcnLFxuICBbQUxMX0ZJRUxEX1RZUEVTLmdlb2Fycm93XTogKGRhdGEsIGZpZWxkKSA9PiB7XG4gICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBhcnJvdy5WZWN0b3IpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGVuY29kaW5nID0gZmllbGQ/Lm1ldGFkYXRhPy5nZXQoJ0FSUk9XOmV4dGVuc2lvbjpuYW1lJyk7XG4gICAgICAgIGlmIChlbmNvZGluZykge1xuICAgICAgICAgIGNvbnN0IGdlb21ldHJ5ID0gcGFyc2VHZW9tZXRyeUZyb21BcnJvdyhkYXRhLCBlbmNvZGluZyk7XG4gICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGdlb21ldHJ5KTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gaWdub3JlIGZvciBub3dcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgICByZXR1cm4gdWludDhBcnJheVRvSGV4KGRhdGEpO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbiAgfSxcbiAgW0FMTF9GSUVMRF9UWVBFUy5vYmplY3RdOiAodmFsdWU6IGFueSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgfSxcbiAgW0FMTF9GSUVMRF9UWVBFUy5hcnJheV06IGQgPT4gSlNPTi5zdHJpbmdpZnkoZCksXG4gIFtBTExfRklFTERfVFlQRVMuaDNdOiBkZWZhdWx0Rm9ybWF0dGVyXG59O1xuXG4vKipcbiAqIFBhcnNlIGZpZWxkIHZhbHVlIGFuZCB0eXBlIGFuZCByZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAqL1xuZXhwb3J0IGNvbnN0IHBhcnNlRmllbGRWYWx1ZSA9ICh2YWx1ZTogYW55LCB0eXBlOiBzdHJpbmcsIGZpZWxkPzogRmllbGQpOiBzdHJpbmcgPT4ge1xuICBpZiAoIW5vdE51bGxvclVuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgLy8gQmlnSW50IHZhbHVlcyBjYW5ub3QgYmUgc2VyaWFsaXplZCB3aXRoIEpTT04uc3RyaW5naWZ5KCkgZGlyZWN0bHlcbiAgLy8gV2UgbmVlZCB0byBleHBsaWNpdGx5IGNvbnZlcnQgdGhlbSB0byBzdHJpbmdzIHVzaW5nIC50b1N0cmluZygpXG4gIC8vIFNlZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvQmlnSW50I3VzZV93aXRoaW5fanNvblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnYmlnaW50Jykge1xuICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xuICB9XG4gIHJldHVybiBGSUVMRF9ESVNQTEFZX0ZPUk1BVFt0eXBlXSA/IEZJRUxEX0RJU1BMQVlfRk9STUFUW3R5cGVdKHZhbHVlLCBmaWVsZCkgOiBTdHJpbmcodmFsdWUpO1xufTtcblxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIGZvcm1hdCBiYXNlZCBvbiBmaWVsZCBhbmQgZm9ybWF0IG9wdGlvbnNcbiAqIFVzZWQgaW4gcmVuZGVyIHRvb2x0aXAgdmFsdWVcbiAqIEBwYXJhbSBmb3JtYXRcbiAqIEBwYXJhbSBmaWVsZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybWF0dGVyKFxuICBmb3JtYXQ/OiBzdHJpbmcgfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgbnVsbCxcbiAgZmllbGQ/OiBGaWVsZFxuKTogRmllbGRGb3JtYXR0ZXIge1xuICBpZiAoIWZvcm1hdCkge1xuICAgIHJldHVybiBkZWZhdWx0Rm9ybWF0dGVyO1xuICB9XG4gIGNvbnN0IHRvb2x0aXBGb3JtYXQgPSBPYmplY3QudmFsdWVzKFRPT0xUSVBfRk9STUFUUykuZmluZChmID0+IGZbVE9PTFRJUF9LRVldID09PSBmb3JtYXQpO1xuXG4gIGlmICh0b29sdGlwRm9ybWF0KSB7XG4gICAgcmV0dXJuIGFwcGx5RGVmYXVsdEZvcm1hdCh0b29sdGlwRm9ybWF0IGFzIFRvb2x0aXBGb3JtYXQpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBmb3JtYXQgPT09ICdzdHJpbmcnICYmIGZpZWxkKSB7XG4gICAgcmV0dXJuIGFwcGx5Q3VzdG9tRm9ybWF0KGZvcm1hdCwgZmllbGQpO1xuICB9XG5cbiAgcmV0dXJuIGRlZmF1bHRGb3JtYXR0ZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2x1bW5Gb3JtYXR0ZXIoXG4gIGZpZWxkOiBQaWNrPEZpZWxkLCAndHlwZSc+ICYgUGFydGlhbDxQaWNrPEZpZWxkLCAnZm9ybWF0JyB8ICdkaXNwbGF5Rm9ybWF0Jz4+XG4pOiBGaWVsZEZvcm1hdHRlciB7XG4gIGNvbnN0IHtmb3JtYXQsIGRpc3BsYXlGb3JtYXR9ID0gZmllbGQ7XG5cbiAgaWYgKCFmb3JtYXQgJiYgIWRpc3BsYXlGb3JtYXQpIHtcbiAgICByZXR1cm4gRklFTERfRElTUExBWV9GT1JNQVRbZmllbGQudHlwZV07XG4gIH1cbiAgY29uc3QgdG9vbHRpcEZvcm1hdCA9IE9iamVjdC52YWx1ZXMoVE9PTFRJUF9GT1JNQVRTKS5maW5kKGYgPT4gZltUT09MVElQX0tFWV0gPT09IGRpc3BsYXlGb3JtYXQpO1xuXG4gIGlmICh0b29sdGlwRm9ybWF0KSB7XG4gICAgcmV0dXJuIGFwcGx5RGVmYXVsdEZvcm1hdCh0b29sdGlwRm9ybWF0KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZGlzcGxheUZvcm1hdCA9PT0gJ3N0cmluZycgJiYgZmllbGQpIHtcbiAgICByZXR1cm4gYXBwbHlDdXN0b21Gb3JtYXQoZGlzcGxheUZvcm1hdCwgZmllbGQpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBkaXNwbGF5Rm9ybWF0ID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBhcHBseVZhbHVlTWFwKGRpc3BsYXlGb3JtYXQpO1xuICB9XG5cbiAgcmV0dXJuIGRlZmF1bHRGb3JtYXR0ZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseVZhbHVlTWFwKGZvcm1hdCkge1xuICByZXR1cm4gdiA9PiBmb3JtYXRbdl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseURlZmF1bHRGb3JtYXQodG9vbHRpcEZvcm1hdDogVG9vbHRpcEZvcm1hdCk6ICh2OiBhbnkpID0+IHN0cmluZyB7XG4gIGlmICghdG9vbHRpcEZvcm1hdCB8fCAhdG9vbHRpcEZvcm1hdC5mb3JtYXQpIHtcbiAgICByZXR1cm4gZGVmYXVsdEZvcm1hdHRlcjtcbiAgfVxuXG4gIHN3aXRjaCAodG9vbHRpcEZvcm1hdC50eXBlKSB7XG4gICAgY2FzZSBUT09MVElQX0ZPUk1BVF9UWVBFUy5ERUNJTUFMOlxuICAgICAgcmV0dXJuIGQzRm9ybWF0KHRvb2x0aXBGb3JtYXQuZm9ybWF0KTtcbiAgICBjYXNlIFRPT0xUSVBfRk9STUFUX1RZUEVTLkRBVEU6XG4gICAgY2FzZSBUT09MVElQX0ZPUk1BVF9UWVBFUy5EQVRFX1RJTUU6XG4gICAgICByZXR1cm4gZGF0ZXRpbWVGb3JtYXR0ZXIobnVsbCkodG9vbHRpcEZvcm1hdC5mb3JtYXQpO1xuICAgIGNhc2UgVE9PTFRJUF9GT1JNQVRfVFlQRVMuUEVSQ0VOVEFHRTpcbiAgICAgIHJldHVybiB2ID0+IGAke2QzRm9ybWF0KFRPT0xUSVBfRk9STUFUUy5ERUNJTUFMX0RFQ0lNQUxfRklYRURfMi5mb3JtYXQpKHYpfSVgO1xuICAgIGNhc2UgVE9PTFRJUF9GT1JNQVRfVFlQRVMuQk9PTEVBTjpcbiAgICAgIHJldHVybiBnZXRCb29sZWFuRm9ybWF0dGVyKHRvb2x0aXBGb3JtYXQuZm9ybWF0KTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGRlZmF1bHRGb3JtYXR0ZXI7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEJvb2xlYW5Gb3JtYXR0ZXIoZm9ybWF0OiBzdHJpbmcpOiBGaWVsZEZvcm1hdHRlciB7XG4gIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgY2FzZSAnMDEnOlxuICAgICAgcmV0dXJuICh2OiBib29sZWFuKSA9PiAodiA/ICcxJyA6ICcwJyk7XG4gICAgY2FzZSAneW4nOlxuICAgICAgcmV0dXJuICh2OiBib29sZWFuKSA9PiAodiA/ICd5ZXMnIDogJ25vJyk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBkZWZhdWx0Rm9ybWF0dGVyO1xuICB9XG59XG4vLyBBbGxvdyB1c2VyIHRvIHNwZWNpZnkgY3VzdG9tIHRvb2x0aXAgZm9ybWF0IHZpYSBjb25maWdcbmV4cG9ydCBmdW5jdGlvbiBhcHBseUN1c3RvbUZvcm1hdChmb3JtYXQsIGZpZWxkOiB7dHlwZT86IHN0cmluZ30pOiBGaWVsZEZvcm1hdHRlciB7XG4gIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLnJlYWw6XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMuaW50ZWdlcjpcbiAgICAgIHJldHVybiBkM0Zvcm1hdChmb3JtYXQpO1xuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLmRhdGU6XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMudGltZXN0YW1wOlxuICAgICAgcmV0dXJuIGRhdGV0aW1lRm9ybWF0dGVyKG51bGwpKGZvcm1hdCk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB2ID0+IHY7XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9ybWF0TGFyZ2VOdW1iZXIobikge1xuICAvLyBTSS1wcmVmaXggd2l0aCA0IHNpZ25pZmljYW50IGRpZ2l0c1xuICByZXR1cm4gZDNGb3JtYXQoJy40fnMnKShuKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdE51bWJlcihuOiBudW1iZXIsIHR5cGU/OiBzdHJpbmcpOiBzdHJpbmcge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5pbnRlZ2VyOlxuICAgICAgaWYgKG4gPCAwKSB7XG4gICAgICAgIHJldHVybiBgLSR7Zm9ybWF0TnVtYmVyKC1uLCAnaW50ZWdlcicpfWA7XG4gICAgICB9XG4gICAgICBpZiAobiA8IDEwMDApIHtcbiAgICAgICAgcmV0dXJuIGAke01hdGgucm91bmQobil9YDtcbiAgICAgIH1cbiAgICAgIGlmIChuIDwgMTAgKiAxMDAwKSB7XG4gICAgICAgIHJldHVybiBkM0Zvcm1hdCgnLCcpKE1hdGgucm91bmQobikpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZvcm1hdExhcmdlTnVtYmVyKG4pO1xuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLnJlYWw6XG4gICAgICBpZiAobiA8IDApIHtcbiAgICAgICAgcmV0dXJuIGAtJHtmb3JtYXROdW1iZXIoLW4sICdudW1iZXInKX1gO1xuICAgICAgfVxuICAgICAgaWYgKG4gPCAxMDAwKSB7XG4gICAgICAgIHJldHVybiBkM0Zvcm1hdCgnLjR+cicpKG4pO1xuICAgICAgfVxuICAgICAgaWYgKG4gPCAxMCAqIDEwMDApIHtcbiAgICAgICAgcmV0dXJuIGQzRm9ybWF0KCcsLjJ+ZicpKG4pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZvcm1hdExhcmdlTnVtYmVyKG4pO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmb3JtYXROdW1iZXIobiwgJ3JlYWwnKTtcbiAgfVxufVxuXG5jb25zdCB0cmFuc2Zvcm1hdGlvbiA9IHtcbiAgWTogTWF0aC5wb3coMTAsIDI0KSxcbiAgWjogTWF0aC5wb3coMTAsIDIxKSxcbiAgRTogTWF0aC5wb3coMTAsIDE4KSxcbiAgUDogTWF0aC5wb3coMTAsIDE1KSxcbiAgVDogTWF0aC5wb3coMTAsIDEyKSxcbiAgRzogTWF0aC5wb3coMTAsIDkpLFxuICBNOiBNYXRoLnBvdygxMCwgNiksXG4gIGs6IE1hdGgucG93KDEwLCAzKSxcbiAgaDogTWF0aC5wb3coMTAsIDIpLFxuICBkYTogTWF0aC5wb3coMTAsIDEpLFxuICBkOiBNYXRoLnBvdygxMCwgLTEpLFxuICBjOiBNYXRoLnBvdygxMCwgLTIpLFxuICBtOiBNYXRoLnBvdygxMCwgLTMpLFxuICDOvDogTWF0aC5wb3coMTAsIC02KSxcbiAgbjogTWF0aC5wb3coMTAsIC05KSxcbiAgcDogTWF0aC5wb3coMTAsIC0xMiksXG4gIGY6IE1hdGgucG93KDEwLCAtMTUpLFxuICBhOiBNYXRoLnBvdygxMCwgLTE4KSxcbiAgejogTWF0aC5wb3coMTAsIC0yMSksXG4gIHk6IE1hdGgucG93KDEwLCAtMjQpXG59O1xuXG4vKipcbiAqIENvbnZlcnQgYSBmb3JtYXR0ZWQgbnVtYmVyIGZyb20gc3RyaW5nIGJhY2sgdG8gbnVtYmVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXZlcnNlRm9ybWF0TnVtYmVyKHN0cjogc3RyaW5nKTogbnVtYmVyIHtcbiAgbGV0IHJldHVyblZhbHVlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgY29uc3Qgc3RyTnVtID0gc3RyLnRyaW0oKS5yZXBsYWNlKC8sL2csICcnKTtcbiAgT2JqZWN0LmVudHJpZXModHJhbnNmb3JtYXRpb24pLmZvckVhY2goZCA9PiB7XG4gICAgaWYgKHN0ck51bS5pbmNsdWRlcyhkWzBdKSkge1xuICAgICAgcmV0dXJuVmFsdWUgPSBwYXJzZUZsb2F0KHN0ck51bSkgKiBkWzFdO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSk7XG5cbiAgLy8gaWYgbm8gdHJhbnNmb3JtZXIgZm91bmQsIGNvbnZlcnQgdG8gbnViZXIgcmVnYXJkbGVzc1xuICByZXR1cm4gcmV0dXJuVmFsdWUgPT09IG51bGwgPyBOdW1iZXIoc3RyTnVtKSA6IHJldHVyblZhbHVlO1xufVxuXG4vKipcbiAqIEZvcm1hdCBlcG9jaCBtaWxsaXNlY29uZHMgd2l0aCBhIGZvcm1hdCBzdHJpbmdcbiAqIEB0eXBlIHRpbWV6b25lXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkYXRldGltZUZvcm1hdHRlcihcbiAgdGltZXpvbmU/OiBzdHJpbmcgfCBudWxsXG4pOiAoZm9ybWF0Pzogc3RyaW5nKSA9PiAodHM6IG51bWJlcikgPT4gc3RyaW5nIHtcbiAgcmV0dXJuIHRpbWV6b25lXG4gICAgPyBmb3JtYXQgPT4gdHMgPT4gbW9tZW50LnV0Yyh0cykudHoodGltZXpvbmUpLmZvcm1hdChmb3JtYXQpXG4gICAgOiAvLyByZXR1cm4gZW1wdHkgc3RyaW5nIGluc3RlYWQgb2YgJ0ludmFsaWQgZGF0ZScgaWYgdHMgaXMgdW5kZWZpbmVkL251bGxcbiAgICAgIGZvcm1hdCA9PiB0cyA9PiB0cyA/IG1vbWVudC51dGModHMpLmZvcm1hdChmb3JtYXQpIDogJyc7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxLQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxTQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxlQUFBLEdBQUFGLHNCQUFBLENBQUFGLE9BQUE7QUFFQSxJQUFBSyxNQUFBLEdBQUFMLE9BQUE7QUFFQSxJQUFBTSxVQUFBLEdBQUFOLE9BQUE7QUFPQSxJQUFBTyxZQUFBLEdBQUFQLE9BQUE7QUFHQSxJQUFBUSxLQUFBLEdBQUFSLE9BQUE7QUFDQSxJQUFBUyxNQUFBLEdBQUFULE9BQUE7QUFBc0MsSUFBQVUscUJBQUEsRUFyQnRDO0FBQ0E7QUFBQSxTQUFBQyx5QkFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBRix3QkFBQSxZQUFBQSx5QkFBQUMsQ0FBQSxXQUFBQSxDQUFBLEdBQUFHLENBQUEsR0FBQUQsQ0FBQSxLQUFBRixDQUFBO0FBQUEsU0FBQWIsd0JBQUFhLENBQUEsRUFBQUUsQ0FBQSxTQUFBQSxDQUFBLElBQUFGLENBQUEsSUFBQUEsQ0FBQSxDQUFBSSxVQUFBLFNBQUFKLENBQUEsZUFBQUEsQ0FBQSxnQkFBQUssUUFBQSxDQUFBTCxDQUFBLDBCQUFBQSxDQUFBLHNCQUFBQSxDQUFBLFFB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
@@ -215,16 +215,14 @@ function validateInputData(data) {
215
215
  (0, _assert["default"])("unknown field type ".concat(f.type));
216
216
  return false;
217
217
  }
218
- if (!fields.every(function (field) {
219
- return field.analyzerType;
220
- })) {
221
- (0, _assert["default"])('field missing analyzerType');
218
+ if (!f.analyzerType) {
219
+ (0, _assert["default"])("field ".concat(i, " missing analyzerType"));
222
220
  return false;
223
221
  }
224
222
 
225
223
  // check time format is correct based on first 10 not empty element
226
224
  if (f.type === _constants.ALL_FIELD_TYPES.timestamp) {
227
- var sample = findNonEmptyRowsAtField(rows, i, 10).map(function (r) {
225
+ var sample = (cols ? findNonEmptyRowsAtFieldArrow(cols, i, 10) : findNonEmptyRowsAtField(rows, i, 10)).map(function (r) {
228
226
  return {
229
227
  ts: r[i]
230
228
  };
@@ -235,7 +233,7 @@ function validateInputData(data) {
235
233
 
236
234
  // check existing string field is H3 type
237
235
  if (f.type === _constants.ALL_FIELD_TYPES.string) {
238
- var _sample = findNonEmptyRowsAtField(rows, i, 10).map(function (r) {
236
+ var _sample = (cols ? findNonEmptyRowsAtFieldArrow(cols, i, 10) : findNonEmptyRowsAtField(rows, i, 10)).map(function (r) {
239
237
  return r[i];
240
238
  });
241
239
  return _sample.every(function (item) {
@@ -254,7 +252,9 @@ function validateInputData(data) {
254
252
 
255
253
  // if any field has missing type, recalculate it for everyone
256
254
  // because we simply lost faith in humanity
257
- var sampleData = (0, _commonUtils.getSampleForTypeAnalyze)({
255
+ var sampleData = cols ? (0, _commonUtils.getSampleForTypeAnalyzeArrow)(cols, fields.map(function (f) {
256
+ return f.name;
257
+ })) : (0, _commonUtils.getSampleForTypeAnalyze)({
258
258
  fields: fields.map(function (f) {
259
259
  return f.name;
260
260
  }),
@@ -290,6 +290,21 @@ function findNonEmptyRowsAtField(rows, fieldIdx, total) {
290
290
  }
291
291
  return sample;
292
292
  }
293
+ function findNonEmptyRowsAtFieldArrow(cols, fieldIdx, total) {
294
+ var sample = [];
295
+ var numRows = cols[fieldIdx].length;
296
+ var i = 0;
297
+ while (sample.length < total && i < numRows) {
298
+ if ((0, _commonUtils.notNullorUndefined)(cols[fieldIdx].get(i))) {
299
+ var row = cols.map(function (col) {
300
+ return col.get(i);
301
+ });
302
+ sample.push(row);
303
+ }
304
+ i++;
305
+ }
306
+ return sample;
307
+ }
293
308
  var TIME_DISPLAY = '2020-05-11 14:00';
294
309
  var addTimeLabel = exports.addTimeLabel = function addTimeLabel(formats) {
295
310
  return formats.map(function (f) {
@@ -312,4 +327,4 @@ var getFormatLabels = exports.getFormatLabels = function getFormatLabels(fields,
312
327
  })) === null || _fields$find === void 0 ? void 0 : _fields$find.type;
313
328
  return getFieldFormatLabels(fieldType);
314
329
  };
315
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29uc3RhbnRzIiwicmVxdWlyZSIsIl9jb21tb25VdGlscyIsIl90eXBlQW5hbHl6ZXIiLCJfYXNzZXJ0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl91dGlscyIsIl9kYXRhVXRpbHMiLCJfZm9ybWF0IiwiX2NvbG9yVXRpbHMiLCJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsIl9tYXJrZWQiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiZ2VuZXJhdGVDb2xvciIsImRhdGFzZXRDb2xvcnMiLCJtYXAiLCJoZXhUb1JnYiIsImluZGV4Iiwid3JhcCIsImdlbmVyYXRlQ29sb3IkIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsInN0b3AiLCJkYXRhc2V0Q29sb3JNYWtlciIsImV4cG9ydHMiLCJFWENMVURFRF9ERUZBVUxUX0ZJRUxEUyIsIk1FVFJJQ19ERUZBVUxUX0ZJRUxEUyIsImZpbmREZWZhdWx0Q29sb3JGaWVsZCIsIl9yZWYiLCJmaWVsZHMiLCJfcmVmJGZpZWxkUGFpcnMiLCJmaWVsZFBhaXJzIiwiZmllbGRzV2l0aG91dEV4Y2x1ZGVkIiwiZmllbGQiLCJ0eXBlIiwiQUxMX0ZJRUxEX1RZUEVTIiwicmVhbCIsImludGVnZXIiLCJmaW5kIiwicGFpciIsImxhdCIsInZhbHVlIiwibmFtZSIsImxuZyIsIm5vcm1hbGl6ZWRGaWVsZE5hbWUiLCJ0b0xvd2VyQ2FzZSIsImhhc0V4Y2x1ZGVkIiwiZiIsInN0YXJ0c1dpdGgiLCJlbmRzV2l0aCIsImhhc0luY2x1c2lvbiIsInNvcnRlZEZpZWxkcyIsInNvcnQiLCJsZWZ0IiwicmlnaHQiLCJub3JtYWxpemVkTGVmdCIsIm5vcm1hbGl6ZWRSaWdodCIsImxlZnRIYXNJbmNsdXNpb24iLCJmaW5kSW5kZXgiLCJyaWdodEhhc0luY2x1c2lvbiIsInZhbGlkYXRlSW5wdXREYXRhIiwiZGF0YSIsImlzUGxhaW5PYmplY3QiLCJhc3NlcnQiLCJBcnJheSIsImlzQXJyYXkiLCJyb3dzIiwiY29scyIsImFsbFZhbGlkIiwiZXZlcnkiLCJpIiwiY29uY2F0IiwiX3R5cGVvZjIiLCJzdHJpbmciLCJKU09OIiwic3RyaW5naWZ5IiwiYW5hbHl6ZXJUeXBlIiwidGltZXN0YW1wIiwic2FtcGxlIiwiZmluZE5vbkVtcHR5Um93c0F0RmllbGQiLCJ0cyIsImFuYWx5emVkVHlwZSIsIkFuYWx5emVyIiwiY29tcHV0ZUNvbE1ldGEiLCJjYXRlZ29yeSIsImZvcm1hdCIsIml0ZW0iLCJoM0lzVmFsaWQiLCJzYW1wbGVEYXRhIiwiZ2V0U2FtcGxlRm9yVHlwZUFuYWx5emUiLCJmaWVsZE9yZGVyIiwibWV0YSIsImdldEZpZWxkc0Zyb21EYXRhIiwidXBkYXRlZEZpZWxkcyIsImZpZWxkSWR4IiwidG90YWwiLCJfcm93cyRpIiwibm90TnVsbG9yVW5kZWZpbmVkIiwiVElNRV9ESVNQTEFZIiwiYWRkVGltZUxhYmVsIiwiZm9ybWF0cyIsImxhYmVsIiwiVE9PTFRJUF9GT1JNQVRfVFlQRVMiLCJEQVRFX1RJTUUiLCJEQVRFIiwiZ2V0Rm9ybWF0dGVyIiwiZ2V0Rm9ybWF0VmFsdWUiLCJnZXRGaWVsZEZvcm1hdExhYmVscyIsImZpZWxkVHlwZSIsInRvb2x0aXBUeXBlcyIsIkZJRUxEX09QVFMiLCJ0b29sdGlwIiwiZm9ybWF0TGFiZWxzIiwidmFsdWVzIiwiVE9PTFRJUF9GT1JNQVRTIiwiaW5jbHVkZXMiLCJnZXRGb3JtYXRMYWJlbHMiLCJmaWVsZE5hbWUiLCJfZmllbGRzJGZpbmQiXSwic291cmNlcyI6WyIuLi9zcmMvZGF0YXNldC11dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge1xuICBBTExfRklFTERfVFlQRVMsXG4gIEZJRUxEX09QVFMsXG4gIFRPT0xUSVBfRk9STUFUUyxcbiAgVE9PTFRJUF9GT1JNQVRfVFlQRVNcbn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtnZXRTYW1wbGVGb3JUeXBlQW5hbHl6ZSwgZ2V0RmllbGRzRnJvbURhdGF9IGZyb20gJ0BrZXBsZXIuZ2wvY29tbW9uLXV0aWxzJztcbmltcG9ydCB7QW5hbHl6ZXJ9IGZyb20gJ3R5cGUtYW5hbHl6ZXInO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQge1xuICBQcm9jZXNzb3JSZXN1bHQsXG4gIFJHQkNvbG9yLFxuICBGaWVsZCxcbiAgRmllbGRQYWlyLFxuICBUaW1lTGFiZWxGb3JtYXQsXG4gIFRvb2x0aXBGaWVsZHMsXG4gIFByb3RvRGF0YXNldFxufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7VG9vbHRpcEZvcm1hdH0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtub3ROdWxsb3JVbmRlZmluZWQsIGgzSXNWYWxpZH0gZnJvbSAnQGtlcGxlci5nbC9jb21tb24tdXRpbHMnO1xuXG5pbXBvcnQge2lzUGxhaW5PYmplY3R9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHtnZXRGb3JtYXR0ZXJ9IGZyb20gJy4vZGF0YS11dGlscyc7XG5pbXBvcnQge2dldEZvcm1hdFZhbHVlfSBmcm9tICcuL2Zvcm1hdCc7XG5pbXBvcnQge2hleFRvUmdifSBmcm9tICcuL2NvbG9yLXV0aWxzJztcblxuLy8gYXBwbHkgYSBjb2xvciBmb3IgZWFjaCBkYXRhc2V0XG4vLyB0byB1c2UgYXMgbGFiZWwgY29sb3JzXG5jb25zdCBkYXRhc2V0Q29sb3JzID0gW1xuICAnIzhGMkZCRicsXG4gICcjMDA1Q0ZGJyxcbiAgJyNDMDZDODQnLFxuICAnI0Y4QjE5NScsXG4gICcjNTQ3QTgyJyxcbiAgJyMzRUFDQTgnLFxuICAnI0EyRDRBQidcbl0ubWFwKGhleFRvUmdiKTtcblxuLyoqXG4gKiBSYW5kb20gY29sb3IgZ2VuZXJhdG9yXG4gKi9cbmZ1bmN0aW9uKiBnZW5lcmF0ZUNvbG9yKCk6IEdlbmVyYXRvcjxSR0JDb2xvcj4ge1xuICBsZXQgaW5kZXggPSAwO1xuICB3aGlsZSAoaW5kZXggPCBkYXRhc2V0Q29sb3JzLmxlbmd0aCArIDEpIHtcbiAgICBpZiAoaW5kZXggPT09IGRhdGFzZXRDb2xvcnMubGVuZ3RoKSB7XG4gICAgICBpbmRleCA9IDA7XG4gICAgfVxuICAgIHlpZWxkIGRhdGFzZXRDb2xvcnNbaW5kZXgrK107XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGRhdGFzZXRDb2xvck1ha2VyID0gZ2VuZXJhdGVDb2xvcigpO1xuXG4vKipcbiAqIEZpZWxkIG5hbWUgcHJlZml4ZXMgYW5kIHN1ZmZpeGVzIHdoaWNoIHNob3VsZCBub3QgYmUgY29uc2lkZXJlZFxuICogYXMgbWV0cmljcy4gRmllbGRzIHdpbGwgc3RpbGwgYmUgaW5jbHVkZWQgaWYgYSAnbWV0cmljIHdvcmQnXG4gKiBpcyBmb3VuZCBvbiB0aGUgZmllbGQgbmFtZSwgaG93ZXZlci5cbiAqL1xuY29uc3QgRVhDTFVERURfREVGQVVMVF9GSUVMRFMgPSBbXG4gIC8vIFNlcmlhbCBudW1iZXJzIGFuZCBpZGVudGlmaWNhdGlvbiBudW1iZXJzXG4gICdfaWQnLFxuICAnaWQnLFxuICAnaW5kZXgnLFxuICAndXVpZCcsXG4gICdndWlkJyxcbiAgJ3VpZCcsXG4gICdnaWQnLFxuICAnc2VyaWFsJyxcbiAgLy8gR2VvZ3JhcGhpYyBJRHMgYXJlIHVubGlrZWx5IHRvIGJlIGludGVyZXN0aW5nIHRvIGNvbG9yXG4gICd6aXAnLFxuICAnY29kZScsXG4gICdwb3N0JyxcbiAgJ3JlZ2lvbicsXG4gICdmaXBzJyxcbiAgJ2NiZ3MnLFxuICAnaDMnLFxuICAnczInLFxuICAvLyBHZW9ncmFwaGljIGNvb3JkcyAoYnV0IG5vdCB6L2VsZXZhdGlvbi9hbHRpdHVkZVxuICAvLyBzaW5jZSB0aGF0IG1pZ2h0IGJlIGEgbWV0cmljKVxuICAnbGF0JyxcbiAgJ2xvbicsXG4gICdsbmcnLFxuICAnbGF0aXR1ZGUnLFxuICAnbG9uZ2l0dWRlJyxcbiAgJ194JyxcbiAgJ195J1xuXTtcblxuLyoqXG4gKiBQcmVmaXhlcyBhbmQgc3VmZml4ZXMgdGhhdCBpbmRpY2F0ZSBhIGZpZWxkIGlzIGEgbWV0cmljLlxuICpcbiAqIE5vdGUgdGhhdCB0aGVzZSBhcmUgaW4gb3JkZXIgb2YgcHJlZmVyZW5jZSwgZmlyc3QgYmVpbmdcbiAqIG1vc3QgcHJlZmVycmVkLlxuICovXG5jb25zdCBNRVRSSUNfREVGQVVMVF9GSUVMRFMgPSBbXG4gICdtZXRyaWMnLFxuICAndmFsdWUnLFxuICAnc3VtJyxcbiAgJ2NvdW50JyxcbiAgJ3VuaXF1ZScsXG4gICdtZWFuJyxcbiAgJ21vZGUnLFxuICAnbWVkaWFuJyxcbiAgJ21heCcsXG4gICdtaW4nLFxuICAnZGV2aWF0aW9uJyxcbiAgJ3ZhcmlhbmNlJyxcbiAgJ3A5OScsXG4gICdwOTUnLFxuICAncDc1JyxcbiAgJ3A1MCcsXG4gICdwMjUnLFxuICAncDA1JyxcbiAgLy8gQWJicmV2aWF0aW9ucyBhcmUgbGVzcyBwcmVmZXJyZWRcbiAgJ2NudCcsXG4gICd2YWwnXG5dO1xuXG4vKipcbiAqIENob29zZSBhIGZpZWxkIHRvIHVzZSBhcyB0aGUgZGVmYXVsdCBjb2xvciBmaWVsZCBvZiBhIGxheWVyLlxuICpcbiAqIFRoZSBoZXVyaXN0aWMgaXM6XG4gKlxuICogRmlyc3QsIGV4Y2x1ZGUgZmllbGRzIHRoYXQgYXJlIG9uIHRoZSBleGNsdXNpb24gbGlzdCBhbmQgZG9uJ3RcbiAqIGhhdmUgbmFtZXMgdGhhdCBzdWdnZXN0IHRoZXkgY29udGFpbiBtZXRyaWNzLiBBbHNvIGV4Y2x1ZGVcbiAqIGZpZWxkIG5hbWVzIHRoYXQgYXJlIGJsYW5rLlxuICpcbiAqIE5leHQsIGxvb2sgZm9yIGEgZmllbGQgdGhhdCBpcyBvZiByZWFsIHR5cGUgYW5kIGNvbnRhaW5zIG9uZVxuICogb2YgdGhlIHByZWZlcnJlZCBuYW1lcyAoaW4gb3JkZXIgb2YgdGhlIHByZWZlcnJlZCBuYW1lcykuXG4gKlxuICogTmV4dCwgbG9vayBmb3IgYSBmaWVsZCB0aGF0IGlzIG9mIGludGVnZXIgdHlwZSBhbmQgY29udGFpbnNcbiAqIG9uZSBvZiB0aGUgcHJlZmVycmVkIG5hbWVzIChpbiBvcmRlciBvZiB0aGUgcHJlZmVycmVkIG5hbWVzKS5cbiAqXG4gKiBOZXh0LCBsb29rIGZvciB0aGUgZmlyc3QgZmllbGQgdGhhdCBpcyBvZiByZWFsIHR5cGUgKGluIG9yZGVyXG4gKiBvZiBmaWVsZCBpbmRleCkuXG4gKlxuICogTmV4dCwgbG9vayBmb3IgdGhlIGZpcnN0IGZpZWxkIHRoYXQgaXMgb2YgaW50ZWdlciB0eXBlIChpblxuICogb3JkZXIgb2YgZmllbGQgaW5kZXgpLlxuICpcbiAqIEl0J3MgcG9zc2libGUgbm8gZmllbGQgd2lsbCBiZSBjaG9zZW4gKGkuZS4gYmVjYXVzZSBhbGwgZmllbGRzXG4gKiBhcmUgc3RyaW5ncy4pXG4gKlxuICogQHBhcmFtIGRhdGFzZXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmREZWZhdWx0Q29sb3JGaWVsZCh7XG4gIGZpZWxkcyxcbiAgZmllbGRQYWlycyA9IFtdXG59OiB7XG4gIGZpZWxkczogRmllbGRbXTtcbiAgZmllbGRQYWlyczogRmllbGRQYWlyW107XG59KTogbnVsbCB8IEZpZWxkIHtcbiAgY29uc3QgZmllbGRzV2l0aG91dEV4Y2x1ZGVkID0gZmllbGRzLmZpbHRlcihmaWVsZCA9PiB7XG4gICAgaWYgKGZpZWxkLnR5cGUgIT09IEFMTF9GSUVMRF9UWVBFUy5yZWFsICYmIGZpZWxkLnR5cGUgIT09IEFMTF9GSUVMRF9UWVBFUy5pbnRlZ2VyKSB7XG4gICAgICAvLyBPbmx5IHNlbGVjdCBudW1lcmljIGZpZWxkcy5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgZmllbGRQYWlycy5maW5kKFxuICAgICAgICBwYWlyID0+IHBhaXIucGFpci5sYXQudmFsdWUgPT09IGZpZWxkLm5hbWUgfHwgcGFpci5wYWlyLmxuZy52YWx1ZSA9PT0gZmllbGQubmFtZVxuICAgICAgKVxuICAgICkge1xuICAgICAgLy8gRG8gbm90IHBlcm1pdCBsYXQsIGxvbiBmaWVsZHNcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBub3JtYWxpemVkRmllbGROYW1lID0gZmllbGQubmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChub3JtYWxpemVkRmllbGROYW1lID09PSAnJykge1xuICAgICAgLy8gU3BlY2lhbCBjYXNlIGV4Y2x1ZGVkIG5hbWUgd2hlbiB0aGUgbmFtZSBpcyBibGFuay5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgaGFzRXhjbHVkZWQgPSBFWENMVURFRF9ERUZBVUxUX0ZJRUxEUy5maW5kKFxuICAgICAgZiA9PiBub3JtYWxpemVkRmllbGROYW1lLnN0YXJ0c1dpdGgoZikgfHwgbm9ybWFsaXplZEZpZWxkTmFtZS5lbmRzV2l0aChmKVxuICAgICk7XG4gICAgY29uc3QgaGFzSW5jbHVzaW9uID0gTUVUUklDX0RFRkFVTFRfRklFTERTLmZpbmQoXG4gICAgICBmID0+IG5vcm1hbGl6ZWRGaWVsZE5hbWUuc3RhcnRzV2l0aChmKSB8fCBub3JtYWxpemVkRmllbGROYW1lLmVuZHNXaXRoKGYpXG4gICAgKTtcbiAgICByZXR1cm4gIWhhc0V4Y2x1ZGVkIHx8IGhhc0luY2x1c2lvbjtcbiAgfSk7XG5cbiAgY29uc3Qgc29ydGVkRmllbGRzID0gZmllbGRzV2l0aG91dEV4Y2x1ZGVkLnNvcnQoKGxlZnQsIHJpZ2h0KSA9PiB7XG4gICAgY29uc3Qgbm9ybWFsaXplZExlZnQgPSBsZWZ0Lm5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBub3JtYWxpemVkUmlnaHQgPSByaWdodC5uYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgbGVmdEhhc0luY2x1c2lvbiA9IE1FVFJJQ19ERUZBVUxUX0ZJRUxEUy5maW5kSW5kZXgoXG4gICAgICBmID0+IG5vcm1hbGl6ZWRMZWZ0LnN0YXJ0c1dpdGgoZikgfHwgbm9ybWFsaXplZExlZnQuZW5kc1dpdGgoZilcbiAgICApO1xuICAgIGNvbnN0IHJpZ2h0SGFzSW5jbHVzaW9uID0gTUVUUklDX0RFRkFVTFRfRklFTERTLmZpbmRJbmRleChcbiAgICAgIGYgPT4gbm9ybWFsaXplZFJpZ2h0LnN0YXJ0c1dpdGgoZikgfHwgbm9ybWFsaXplZFJpZ2h0LmVuZHNXaXRoKGYpXG4gICAgKTtcbiAgICBpZiAobGVmdEhhc0luY2x1c2lvbiAhPT0gcmlnaHRIYXNJbmNsdXNpb24pIHtcbiAgICAgIGlmIChsZWZ0SGFzSW5jbHVzaW9uID09PSAtMSkge1xuICAgICAgICAvLyBFbGVtZW50cyB0aGF0IGRvIG5vdCBoYXZlIHRoZSBpbmNsdXNpb24gbGlzdCBzaG91bGQgZ28gYWZ0ZXIgdGhvc2UgdGhhdCBkby5cbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9IGVsc2UgaWYgKHJpZ2h0SGFzSW5jbHVzaW9uID09PSAtMSkge1xuICAgICAgICAvLyBFbGVtZW50cyB0aGF0IGRvIGhhdmUgdGhlIGluY2x1c2lvbiBsaXN0IHNob3VsZCBnbyBiZWZvcmUgdGhvc2UgdGhhdCBkb24ndC5cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgLy8gQ29tcGFyZSBiYXNlZCBvbiBvcmRlciBpbiB0aGUgaW5jbHVzaW9uIGxpc3RcbiAgICAgIHJldHVybiBsZWZ0SGFzSW5jbHVzaW9uIC0gcmlnaHRIYXNJbmNsdXNpb247XG4gICAgfVxuXG4gICAgLy8gQ29tcGFyZSBiYXNlZCBvbiB0eXBlXG4gICAgaWYgKGxlZnQudHlwZSAhPT0gcmlnaHQudHlwZSkge1xuICAgICAgaWYgKGxlZnQudHlwZSA9PT0gQUxMX0ZJRUxEX1RZUEVTLnJlYWwpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgLy8gbGVmdCBpcyBhbiBpbnRlZ2VyIGFuZCByaWdodCBpcyBub3RcbiAgICAgIC8vIGFuZCByZWFscyBjb21lIGJlZm9yZSBpbnRlZ2Vyc1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgLy8gRmluYWxseSwgb3JkZXIgYmFzZWQgb24gdGhlIG9yZGVyIGluIHRoZSBkYXRhc2V0cyBjb2x1bW5zXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIHJldHVybiBsZWZ0LmluZGV4IC0gcmlnaHQuaW5kZXg7XG4gIH0pO1xuXG4gIGlmIChzb3J0ZWRGaWVsZHMubGVuZ3RoKSB7XG4gICAgLy8gVGhlcmUgd2FzIGEgYmVzdCBtYXRjaFxuICAgIHJldHVybiBzb3J0ZWRGaWVsZHNbMF07XG4gIH1cbiAgLy8gTm8gbWF0Y2hlc1xuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBpbnB1dCBkYXRhLCBhZGRpbmcgbWlzc2luZyBmaWVsZCB0eXBlcywgcmVuYW1lIGR1cGxpY2F0ZSBjb2x1bW5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUlucHV0RGF0YShkYXRhOiBQcm90b0RhdGFzZXRbJ2RhdGEnXSk6IFByb2Nlc3NvclJlc3VsdCB7XG4gIGlmICghaXNQbGFpbk9iamVjdChkYXRhKSkge1xuICAgIGFzc2VydCgnYWRkRGF0YVRvTWFwIEVycm9yOiBkYXRhc2V0LmRhdGEgY2Fubm90IGJlIG51bGwnKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSBlbHNlIGlmICghQXJyYXkuaXNBcnJheShkYXRhLmZpZWxkcykpIHtcbiAgICBhc3NlcnQoJ2FkZERhdGFUb01hcCBFcnJvcjogZXhwZWN0IGRhdGFzZXQuZGF0YS5maWVsZHMgdG8gYmUgYW4gYXJyYXknKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSBlbHNlIGlmICghQXJyYXkuaXNBcnJheShkYXRhLnJvd3MpKSB7XG4gICAgYXNzZXJ0KCdhZGREYXRhVG9NYXAgRXJyb3I6IGV4cGVjdCBkYXRhc2V0LmRhdGEucm93cyB0byBiZSBhbiBhcnJheScpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3Qge2ZpZWxkcywgcm93cywgY29sc30gPSBkYXRhO1xuXG4gIC8vIGNoZWNrIGlmIGFsbCBmaWVsZHMgaGFzIG5hbWUsIGZvcm1hdCBhbmQgdHlwZVxuICBjb25zdCBhbGxWYWxpZCA9IGZpZWxkcy5ldmVyeSgoZiwgaSkgPT4ge1xuICAgIGlmICghaXNQbGFpbk9iamVjdChmKSkge1xuICAgICAgYXNzZXJ0KGBmaWVsZHMgbmVlZHMgdG8gYmUgYW4gYXJyYXkgb2Ygb2JqZWN0LCBidXQgZmluZCAke3R5cGVvZiBmfWApO1xuICAgICAgZmllbGRzW2ldID0ge25hbWU6IGBjb2x1bW5fJHtpfWAsIHR5cGU6IEFMTF9GSUVMRF9UWVBFUy5zdHJpbmd9O1xuICAgIH1cblxuICAgIGlmICghZi5uYW1lKSB7XG4gICAgICBhc3NlcnQoYGZpZWxkLm5hbWUgaXMgcmVxdWlyZWQgYnV0IG1pc3NpbmcgaW4gJHtKU09OLnN0cmluZ2lmeShmKX1gKTtcbiAgICAgIC8vIGFzc2lnbiBhIG5hbWVcbiAgICAgIGZpZWxkc1tpXS5uYW1lID0gYGNvbHVtbl8ke2l9YDtcbiAgICB9XG5cbiAgICBpZiAoIWYudHlwZSB8fCAhQUxMX0ZJRUxEX1RZUEVTW2YudHlwZV0pIHtcbiAgICAgIGFzc2VydChgdW5rbm93biBmaWVsZCB0eXBlICR7Zi50eXBlfWApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghZmllbGRzLmV2ZXJ5KGZpZWxkID0+IGZpZWxkLmFuYWx5emVyVHlwZSkpIHtcbiAgICAgIGFzc2VydCgnZmllbGQgbWlzc2luZyBhbmFseXplclR5cGUnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBjaGVjayB0aW1lIGZvcm1hdCBpcyBjb3JyZWN0IGJhc2VkIG9uIGZpcnN0IDEwIG5vdCBlbXB0eSBlbGVtZW50XG4gICAgaWYgKGYudHlwZSA9PT0gQUxMX0ZJRUxEX1RZUEVTLnRpbWVzdGFtcCkge1xuICAgICAgY29uc3Qgc2FtcGxlID0gZmluZE5vbkVtcHR5Um93c0F0RmllbGQocm93cywgaSwgMTApLm1hcChyID0+ICh7dHM6IHJbaV19KSk7XG4gICAgICBjb25zdCBhbmFseXplZFR5cGUgPSBBbmFseXplci5jb21wdXRlQ29sTWV0YShzYW1wbGUpWzBdO1xuICAgICAgcmV0dXJuIGFuYWx5emVkVHlwZSAmJiBhbmFseXplZFR5cGUuY2F0ZWdvcnkgPT09ICdUSU1FJyAmJiBhbmFseXplZFR5cGUuZm9ybWF0ID09PSBmLmZvcm1hdDtcbiAgICB9XG5cbiAgICAvLyBjaGVjayBleGlzdGluZyBzdHJpbmcgZmllbGQgaXMgSDMgdHlwZVxuICAgIGlmIChmLnR5cGUgPT09IEFMTF9GSUVMRF9UWVBFUy5zdHJpbmcpIHtcbiAgICAgIGNvbnN0IHNhbXBsZSA9IGZpbmROb25FbXB0eVJvd3NBdEZpZWxkKHJvd3MsIGksIDEwKS5tYXAociA9PiByW2ldKTtcbiAgICAgIHJldHVybiBzYW1wbGUuZXZlcnkoaXRlbSA9PiAhaDNJc1ZhbGlkKGl0ZW0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSk7XG5cbiAgaWYgKGFsbFZhbGlkKSB7XG4gICAgcmV0dXJuIHtyb3dzLCBmaWVsZHMsIGNvbHN9O1xuICB9XG5cbiAgLy8gaWYgYW55IGZpZWxkIGhhcyBtaXNzaW5nIHR5cGUsIHJlY2FsY3VsYXRlIGl0IGZvciBldmVyeW9uZVxuICAvLyBiZWNhdXNlIHdlIHNpbXBseSBsb3N0IGZhaXRoIGluIGh1bWFuaXR5XG4gIGNvbnN0IHNhbXBsZURhdGEgPSBnZXRTYW1wbGVGb3JUeXBlQW5hbHl6ZSh7XG4gICAgZmllbGRzOiBmaWVsZHMubWFwKGYgPT4gZi5uYW1lKSxcbiAgICByb3dzXG4gIH0pO1xuICBjb25zdCBmaWVsZE9yZGVyID0gZmllbGRzLm1hcChmID0+IGYubmFtZSk7XG4gIGNvbnN0IG1ldGEgPSBnZXRGaWVsZHNGcm9tRGF0YShzYW1wbGVEYXRhLCBmaWVsZE9yZGVyKTtcbiAgY29uc3QgdXBkYXRlZEZpZWxkcyA9IGZpZWxkcy5tYXAoKGYsIGkpID0+ICh7XG4gICAgLi4uZixcbiAgICB0eXBlOiBtZXRhW2ldLnR5cGUsXG4gICAgZm9ybWF0OiBtZXRhW2ldLmZvcm1hdCxcbiAgICBhbmFseXplclR5cGU6IG1ldGFbaV0uYW5hbHl6ZXJUeXBlXG4gIH0pKTtcblxuICByZXR1cm4ge2ZpZWxkczogdXBkYXRlZEZpZWxkcywgcm93cywgLi4uKGNvbHMgPyB7Y29sc30gOiB7fSl9O1xufVxuXG5mdW5jdGlvbiBmaW5kTm9uRW1wdHlSb3dzQXRGaWVsZChyb3dzOiB1bmtub3duW11bXSwgZmllbGRJZHg6IG51bWJlciwgdG90YWw6IG51bWJlcik6IGFueVtdIHtcbiAgY29uc3Qgc2FtcGxlOiBhbnlbXSA9IFtdO1xuICBsZXQgaSA9IDA7XG4gIHdoaWxlIChzYW1wbGUubGVuZ3RoIDwgdG90YWwgJiYgaSA8IHJvd3MubGVuZ3RoKSB7XG4gICAgaWYgKG5vdE51bGxvclVuZGVmaW5lZChyb3dzW2ldPy5bZmllbGRJZHhdKSkge1xuICAgICAgc2FtcGxlLnB1c2gocm93c1tpXSk7XG4gICAgfVxuICAgIGkrKztcbiAgfVxuICByZXR1cm4gc2FtcGxlO1xufVxuXG5jb25zdCBUSU1FX0RJU1BMQVkgPSAnMjAyMC0wNS0xMSAxNDowMCc7XG5cbmV4cG9ydCBjb25zdCBhZGRUaW1lTGFiZWwgPSAoZm9ybWF0czogVGltZUxhYmVsRm9ybWF0W10pID0+XG4gIGZvcm1hdHMubWFwKGYgPT4gKHtcbiAgICAuLi5mLFxuICAgIGxhYmVsOlxuICAgICAgZi50eXBlID09PSBUT09MVElQX0ZPUk1BVF9UWVBFUy5EQVRFX1RJTUUgfHwgZi50eXBlID09PSBUT09MVElQX0ZPUk1BVF9UWVBFUy5EQVRFXG4gICAgICAgID8gZ2V0Rm9ybWF0dGVyKGdldEZvcm1hdFZhbHVlKGYpKShUSU1FX0RJU1BMQVkpXG4gICAgICAgIDogZi5sYWJlbFxuICB9KSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWVsZEZvcm1hdExhYmVscyhmaWVsZFR5cGU/OiBzdHJpbmcpOiBUb29sdGlwRm9ybWF0W10ge1xuICBjb25zdCB0b29sdGlwVHlwZXMgPSAoZmllbGRUeXBlICYmIEZJRUxEX09QVFNbZmllbGRUeXBlXS5mb3JtYXQudG9vbHRpcCkgfHwgW107XG4gIGNvbnN0IGZvcm1hdExhYmVsczogVGltZUxhYmVsRm9ybWF0W10gPSBPYmplY3QudmFsdWVzKFRPT0xUSVBfRk9STUFUUykuZmlsdGVyKHQgPT5cbiAgICB0b29sdGlwVHlwZXMuaW5jbHVkZXModC50eXBlKVxuICApO1xuICByZXR1cm4gYWRkVGltZUxhYmVsKGZvcm1hdExhYmVscyk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRGb3JtYXRMYWJlbHMgPSAoZmllbGRzOiBUb29sdGlwRmllbGRzW10sIGZpZWxkTmFtZTogc3RyaW5nKTogVG9vbHRpcEZvcm1hdFtdID0+IHtcbiAgY29uc3QgZmllbGRUeXBlID0gZmllbGRzLmZpbmQoZiA9PiBmLm5hbWUgPT09IGZpZWxkTmFtZSk/LnR5cGU7XG4gIHJldHVybiBnZXRGaWVsZEZvcm1hdExhYmVscyhmaWVsZFR5cGUpO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxVQUFBLEdBQUFDLE9BQUE7QUFNQSxJQUFBQyxZQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxhQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxPQUFBLEdBQUFDLHNCQUFBLENBQUFKLE9BQUE7QUFjQSxJQUFBSyxNQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxVQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxPQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSxX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
330
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29uc3RhbnRzIiwicmVxdWlyZSIsIl9jb21tb25VdGlscyIsIl90eXBlQW5hbHl6ZXIiLCJfYXNzZXJ0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl91dGlscyIsIl9kYXRhVXRpbHMiLCJfZm9ybWF0IiwiX2NvbG9yVXRpbHMiLCJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsIl9tYXJrZWQiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiZ2VuZXJhdGVDb2xvciIsImRhdGFzZXRDb2xvcnMiLCJtYXAiLCJoZXhUb1JnYiIsImluZGV4Iiwid3JhcCIsImdlbmVyYXRlQ29sb3IkIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsInN0b3AiLCJkYXRhc2V0Q29sb3JNYWtlciIsImV4cG9ydHMiLCJFWENMVURFRF9ERUZBVUxUX0ZJRUxEUyIsIk1FVFJJQ19ERUZBVUxUX0ZJRUxEUyIsImZpbmREZWZhdWx0Q29sb3JGaWVsZCIsIl9yZWYiLCJmaWVsZHMiLCJfcmVmJGZpZWxkUGFpcnMiLCJmaWVsZFBhaXJzIiwiZmllbGRzV2l0aG91dEV4Y2x1ZGVkIiwiZmllbGQiLCJ0eXBlIiwiQUxMX0ZJRUxEX1RZUEVTIiwicmVhbCIsImludGVnZXIiLCJmaW5kIiwicGFpciIsImxhdCIsInZhbHVlIiwibmFtZSIsImxuZyIsIm5vcm1hbGl6ZWRGaWVsZE5hbWUiLCJ0b0xvd2VyQ2FzZSIsImhhc0V4Y2x1ZGVkIiwiZiIsInN0YXJ0c1dpdGgiLCJlbmRzV2l0aCIsImhhc0luY2x1c2lvbiIsInNvcnRlZEZpZWxkcyIsInNvcnQiLCJsZWZ0IiwicmlnaHQiLCJub3JtYWxpemVkTGVmdCIsIm5vcm1hbGl6ZWRSaWdodCIsImxlZnRIYXNJbmNsdXNpb24iLCJmaW5kSW5kZXgiLCJyaWdodEhhc0luY2x1c2lvbiIsInZhbGlkYXRlSW5wdXREYXRhIiwiZGF0YSIsImlzUGxhaW5PYmplY3QiLCJhc3NlcnQiLCJBcnJheSIsImlzQXJyYXkiLCJyb3dzIiwiY29scyIsImFsbFZhbGlkIiwiZXZlcnkiLCJpIiwiY29uY2F0IiwiX3R5cGVvZjIiLCJzdHJpbmciLCJKU09OIiwic3RyaW5naWZ5IiwiYW5hbHl6ZXJUeXBlIiwidGltZXN0YW1wIiwic2FtcGxlIiwiZmluZE5vbkVtcHR5Um93c0F0RmllbGRBcnJvdyIsImZpbmROb25FbXB0eVJvd3NBdEZpZWxkIiwidHMiLCJhbmFseXplZFR5cGUiLCJBbmFseXplciIsImNvbXB1dGVDb2xNZXRhIiwiY2F0ZWdvcnkiLCJmb3JtYXQiLCJpdGVtIiwiaDNJc1ZhbGlkIiwic2FtcGxlRGF0YSIsImdldFNhbXBsZUZvclR5cGVBbmFseXplQXJyb3ciLCJnZXRTYW1wbGVGb3JUeXBlQW5hbHl6ZSIsImZpZWxkT3JkZXIiLCJtZXRhIiwiZ2V0RmllbGRzRnJvbURhdGEiLCJ1cGRhdGVkRmllbGRzIiwiZmllbGRJZHgiLCJ0b3RhbCIsIl9yb3dzJGkiLCJub3ROdWxsb3JVbmRlZmluZWQiLCJudW1Sb3dzIiwiZ2V0Iiwicm93IiwiY29sIiwiVElNRV9ESVNQTEFZIiwiYWRkVGltZUxhYmVsIiwiZm9ybWF0cyIsImxhYmVsIiwiVE9PTFRJUF9GT1JNQVRfVFlQRVMiLCJEQVRFX1RJTUUiLCJEQVRFIiwiZ2V0Rm9ybWF0dGVyIiwiZ2V0Rm9ybWF0VmFsdWUiLCJnZXRGaWVsZEZvcm1hdExhYmVscyIsImZpZWxkVHlwZSIsInRvb2x0aXBUeXBlcyIsIkZJRUxEX09QVFMiLCJ0b29sdGlwIiwiZm9ybWF0TGFiZWxzIiwidmFsdWVzIiwiVE9PTFRJUF9GT1JNQVRTIiwiaW5jbHVkZXMiLCJnZXRGb3JtYXRMYWJlbHMiLCJmaWVsZE5hbWUiLCJfZmllbGRzJGZpbmQiXSwic291cmNlcyI6WyIuLi9zcmMvZGF0YXNldC11dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgKiBhcyBhcnJvdyBmcm9tICdhcGFjaGUtYXJyb3cnO1xuaW1wb3J0IHtcbiAgQUxMX0ZJRUxEX1RZUEVTLFxuICBGSUVMRF9PUFRTLFxuICBUT09MVElQX0ZPUk1BVFMsXG4gIFRPT0xUSVBfRk9STUFUX1RZUEVTXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7XG4gIGdldFNhbXBsZUZvclR5cGVBbmFseXplLFxuICBnZXRTYW1wbGVGb3JUeXBlQW5hbHl6ZUFycm93LFxuICBnZXRGaWVsZHNGcm9tRGF0YVxufSBmcm9tICdAa2VwbGVyLmdsL2NvbW1vbi11dGlscyc7XG5pbXBvcnQge0FuYWx5emVyfSBmcm9tICd0eXBlLWFuYWx5emVyJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHtcbiAgUHJvY2Vzc29yUmVzdWx0LFxuICBSR0JDb2xvcixcbiAgRmllbGQsXG4gIEZpZWxkUGFpcixcbiAgVGltZUxhYmVsRm9ybWF0LFxuICBUb29sdGlwRmllbGRzLFxuICBQcm90b0RhdGFzZXRcbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge1Rvb2x0aXBGb3JtYXR9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7bm90TnVsbG9yVW5kZWZpbmVkLCBoM0lzVmFsaWR9IGZyb20gJ0BrZXBsZXIuZ2wvY29tbW9uLXV0aWxzJztcblxuaW1wb3J0IHtpc1BsYWluT2JqZWN0fSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7Z2V0Rm9ybWF0dGVyfSBmcm9tICcuL2RhdGEtdXRpbHMnO1xuaW1wb3J0IHtnZXRGb3JtYXRWYWx1ZX0gZnJvbSAnLi9mb3JtYXQnO1xuaW1wb3J0IHtoZXhUb1JnYn0gZnJvbSAnLi9jb2xvci11dGlscyc7XG5cbi8vIGFwcGx5IGEgY29sb3IgZm9yIGVhY2ggZGF0YXNldFxuLy8gdG8gdXNlIGFzIGxhYmVsIGNvbG9yc1xuY29uc3QgZGF0YXNldENvbG9ycyA9IFtcbiAgJyM4RjJGQkYnLFxuICAnIzAwNUNGRicsXG4gICcjQzA2Qzg0JyxcbiAgJyNGOEIxOTUnLFxuICAnIzU0N0E4MicsXG4gICcjM0VBQ0E4JyxcbiAgJyNBMkQ0QUInXG5dLm1hcChoZXhUb1JnYik7XG5cbi8qKlxuICogUmFuZG9tIGNvbG9yIGdlbmVyYXRvclxuICovXG5mdW5jdGlvbiogZ2VuZXJhdGVDb2xvcigpOiBHZW5lcmF0b3I8UkdCQ29sb3I+IHtcbiAgbGV0IGluZGV4ID0gMDtcbiAgd2hpbGUgKGluZGV4IDwgZGF0YXNldENvbG9ycy5sZW5ndGggKyAxKSB7XG4gICAgaWYgKGluZGV4ID09PSBkYXRhc2V0Q29sb3JzLmxlbmd0aCkge1xuICAgICAgaW5kZXggPSAwO1xuICAgIH1cbiAgICB5aWVsZCBkYXRhc2V0Q29sb3JzW2luZGV4KytdO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBkYXRhc2V0Q29sb3JNYWtlciA9IGdlbmVyYXRlQ29sb3IoKTtcblxuLyoqXG4gKiBGaWVsZCBuYW1lIHByZWZpeGVzIGFuZCBzdWZmaXhlcyB3aGljaCBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWRcbiAqIGFzIG1ldHJpY3MuIEZpZWxkcyB3aWxsIHN0aWxsIGJlIGluY2x1ZGVkIGlmIGEgJ21ldHJpYyB3b3JkJ1xuICogaXMgZm91bmQgb24gdGhlIGZpZWxkIG5hbWUsIGhvd2V2ZXIuXG4gKi9cbmNvbnN0IEVYQ0xVREVEX0RFRkFVTFRfRklFTERTID0gW1xuICAvLyBTZXJpYWwgbnVtYmVycyBhbmQgaWRlbnRpZmljYXRpb24gbnVtYmVyc1xuICAnX2lkJyxcbiAgJ2lkJyxcbiAgJ2luZGV4JyxcbiAgJ3V1aWQnLFxuICAnZ3VpZCcsXG4gICd1aWQnLFxuICAnZ2lkJyxcbiAgJ3NlcmlhbCcsXG4gIC8vIEdlb2dyYXBoaWMgSURzIGFyZSB1bmxpa2VseSB0byBiZSBpbnRlcmVzdGluZyB0byBjb2xvclxuICAnemlwJyxcbiAgJ2NvZGUnLFxuICAncG9zdCcsXG4gICdyZWdpb24nLFxuICAnZmlwcycsXG4gICdjYmdzJyxcbiAgJ2gzJyxcbiAgJ3MyJyxcbiAgLy8gR2VvZ3JhcGhpYyBjb29yZHMgKGJ1dCBub3Qgei9lbGV2YXRpb24vYWx0aXR1ZGVcbiAgLy8gc2luY2UgdGhhdCBtaWdodCBiZSBhIG1ldHJpYylcbiAgJ2xhdCcsXG4gICdsb24nLFxuICAnbG5nJyxcbiAgJ2xhdGl0dWRlJyxcbiAgJ2xvbmdpdHVkZScsXG4gICdfeCcsXG4gICdfeSdcbl07XG5cbi8qKlxuICogUHJlZml4ZXMgYW5kIHN1ZmZpeGVzIHRoYXQgaW5kaWNhdGUgYSBmaWVsZCBpcyBhIG1ldHJpYy5cbiAqXG4gKiBOb3RlIHRoYXQgdGhlc2UgYXJlIGluIG9yZGVyIG9mIHByZWZlcmVuY2UsIGZpcnN0IGJlaW5nXG4gKiBtb3N0IHByZWZlcnJlZC5cbiAqL1xuY29uc3QgTUVUUklDX0RFRkFVTFRfRklFTERTID0gW1xuICAnbWV0cmljJyxcbiAgJ3ZhbHVlJyxcbiAgJ3N1bScsXG4gICdjb3VudCcsXG4gICd1bmlxdWUnLFxuICAnbWVhbicsXG4gICdtb2RlJyxcbiAgJ21lZGlhbicsXG4gICdtYXgnLFxuICAnbWluJyxcbiAgJ2RldmlhdGlvbicsXG4gICd2YXJpYW5jZScsXG4gICdwOTknLFxuICAncDk1JyxcbiAgJ3A3NScsXG4gICdwNTAnLFxuICAncDI1JyxcbiAgJ3AwNScsXG4gIC8vIEFiYnJldmlhdGlvbnMgYXJlIGxlc3MgcHJlZmVycmVkXG4gICdjbnQnLFxuICAndmFsJ1xuXTtcblxuLyoqXG4gKiBDaG9vc2UgYSBmaWVsZCB0byB1c2UgYXMgdGhlIGRlZmF1bHQgY29sb3IgZmllbGQgb2YgYSBsYXllci5cbiAqXG4gKiBUaGUgaGV1cmlzdGljIGlzOlxuICpcbiAqIEZpcnN0LCBleGNsdWRlIGZpZWxkcyB0aGF0IGFyZSBvbiB0aGUgZXhjbHVzaW9uIGxpc3QgYW5kIGRvbid0XG4gKiBoYXZlIG5hbWVzIHRoYXQgc3VnZ2VzdCB0aGV5IGNvbnRhaW4gbWV0cmljcy4gQWxzbyBleGNsdWRlXG4gKiBmaWVsZCBuYW1lcyB0aGF0IGFyZSBibGFuay5cbiAqXG4gKiBOZXh0LCBsb29rIGZvciBhIGZpZWxkIHRoYXQgaXMgb2YgcmVhbCB0eXBlIGFuZCBjb250YWlucyBvbmVcbiAqIG9mIHRoZSBwcmVmZXJyZWQgbmFtZXMgKGluIG9yZGVyIG9mIHRoZSBwcmVmZXJyZWQgbmFtZXMpLlxuICpcbiAqIE5leHQsIGxvb2sgZm9yIGEgZmllbGQgdGhhdCBpcyBvZiBpbnRlZ2VyIHR5cGUgYW5kIGNvbnRhaW5zXG4gKiBvbmUgb2YgdGhlIHByZWZlcnJlZCBuYW1lcyAoaW4gb3JkZXIgb2YgdGhlIHByZWZlcnJlZCBuYW1lcykuXG4gKlxuICogTmV4dCwgbG9vayBmb3IgdGhlIGZpcnN0IGZpZWxkIHRoYXQgaXMgb2YgcmVhbCB0eXBlIChpbiBvcmRlclxuICogb2YgZmllbGQgaW5kZXgpLlxuICpcbiAqIE5leHQsIGxvb2sgZm9yIHRoZSBmaXJzdCBmaWVsZCB0aGF0IGlzIG9mIGludGVnZXIgdHlwZSAoaW5cbiAqIG9yZGVyIG9mIGZpZWxkIGluZGV4KS5cbiAqXG4gKiBJdCdzIHBvc3NpYmxlIG5vIGZpZWxkIHdpbGwgYmUgY2hvc2VuIChpLmUuIGJlY2F1c2UgYWxsIGZpZWxkc1xuICogYXJlIHN0cmluZ3MuKVxuICpcbiAqIEBwYXJhbSBkYXRhc2V0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRGVmYXVsdENvbG9yRmllbGQoe1xuICBmaWVsZHMsXG4gIGZpZWxkUGFpcnMgPSBbXVxufToge1xuICBmaWVsZHM6IEZpZWxkW107XG4gIGZpZWxkUGFpcnM6IEZpZWxkUGFpcltdO1xufSk6IG51bGwgfCBGaWVsZCB7XG4gIGNvbnN0IGZpZWxkc1dpdGhvdXRFeGNsdWRlZCA9IGZpZWxkcy5maWx0ZXIoZmllbGQgPT4ge1xuICAgIGlmIChmaWVsZC50eXBlICE9PSBBTExfRklFTERfVFlQRVMucmVhbCAmJiBmaWVsZC50eXBlICE9PSBBTExfRklFTERfVFlQRVMuaW50ZWdlcikge1xuICAgICAgLy8gT25seSBzZWxlY3QgbnVtZXJpYyBmaWVsZHMuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGZpZWxkUGFpcnMuZmluZChcbiAgICAgICAgcGFpciA9PiBwYWlyLnBhaXIubGF0LnZhbHVlID09PSBmaWVsZC5uYW1lIHx8IHBhaXIucGFpci5sbmcudmFsdWUgPT09IGZpZWxkLm5hbWVcbiAgICAgIClcbiAgICApIHtcbiAgICAgIC8vIERvIG5vdCBwZXJtaXQgbGF0LCBsb24gZmllbGRzXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9ybWFsaXplZEZpZWxkTmFtZSA9IGZpZWxkLm5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAobm9ybWFsaXplZEZpZWxkTmFtZSA9PT0gJycpIHtcbiAgICAgIC8vIFNwZWNpYWwgY2FzZSBleGNsdWRlZCBuYW1lIHdoZW4gdGhlIG5hbWUgaXMgYmxhbmsuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGhhc0V4Y2x1ZGVkID0gRVhDTFVERURfREVGQVVMVF9GSUVMRFMuZmluZChcbiAgICAgIGYgPT4gbm9ybWFsaXplZEZpZWxkTmFtZS5zdGFydHNXaXRoKGYpIHx8IG5vcm1hbGl6ZWRGaWVsZE5hbWUuZW5kc1dpdGgoZilcbiAgICApO1xuICAgIGNvbnN0IGhhc0luY2x1c2lvbiA9IE1FVFJJQ19ERUZBVUxUX0ZJRUxEUy5maW5kKFxuICAgICAgZiA9PiBub3JtYWxpemVkRmllbGROYW1lLnN0YXJ0c1dpdGgoZikgfHwgbm9ybWFsaXplZEZpZWxkTmFtZS5lbmRzV2l0aChmKVxuICAgICk7XG4gICAgcmV0dXJuICFoYXNFeGNsdWRlZCB8fCBoYXNJbmNsdXNpb247XG4gIH0pO1xuXG4gIGNvbnN0IHNvcnRlZEZpZWxkcyA9IGZpZWxkc1dpdGhvdXRFeGNsdWRlZC5zb3J0KChsZWZ0LCByaWdodCkgPT4ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRMZWZ0ID0gbGVmdC5uYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3Qgbm9ybWFsaXplZFJpZ2h0ID0gcmlnaHQubmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGxlZnRIYXNJbmNsdXNpb24gPSBNRVRSSUNfREVGQVVMVF9GSUVMRFMuZmluZEluZGV4KFxuICAgICAgZiA9PiBub3JtYWxpemVkTGVmdC5zdGFydHNXaXRoKGYpIHx8IG5vcm1hbGl6ZWRMZWZ0LmVuZHNXaXRoKGYpXG4gICAgKTtcbiAgICBjb25zdCByaWdodEhhc0luY2x1c2lvbiA9IE1FVFJJQ19ERUZBVUxUX0ZJRUxEUy5maW5kSW5kZXgoXG4gICAgICBmID0+IG5vcm1hbGl6ZWRSaWdodC5zdGFydHNXaXRoKGYpIHx8IG5vcm1hbGl6ZWRSaWdodC5lbmRzV2l0aChmKVxuICAgICk7XG4gICAgaWYgKGxlZnRIYXNJbmNsdXNpb24gIT09IHJpZ2h0SGFzSW5jbHVzaW9uKSB7XG4gICAgICBpZiAobGVmdEhhc0luY2x1c2lvbiA9PT0gLTEpIHtcbiAgICAgICAgLy8gRWxlbWVudHMgdGhhdCBkbyBub3QgaGF2ZSB0aGUgaW5jbHVzaW9uIGxpc3Qgc2hvdWxkIGdvIGFmdGVyIHRob3NlIHRoYXQgZG8uXG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfSBlbHNlIGlmIChyaWdodEhhc0luY2x1c2lvbiA9PT0gLTEpIHtcbiAgICAgICAgLy8gRWxlbWVudHMgdGhhdCBkbyBoYXZlIHRoZSBpbmNsdXNpb24gbGlzdCBzaG91bGQgZ28gYmVmb3JlIHRob3NlIHRoYXQgZG9uJ3QuXG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICAgIC8vIENvbXBhcmUgYmFzZWQgb24gb3JkZXIgaW4gdGhlIGluY2x1c2lvbiBsaXN0XG4gICAgICByZXR1cm4gbGVmdEhhc0luY2x1c2lvbiAtIHJpZ2h0SGFzSW5jbHVzaW9uO1xuICAgIH1cblxuICAgIC8vIENvbXBhcmUgYmFzZWQgb24gdHlwZVxuICAgIGlmIChsZWZ0LnR5cGUgIT09IHJpZ2h0LnR5cGUpIHtcbiAgICAgIGlmIChsZWZ0LnR5cGUgPT09IEFMTF9GSUVMRF9UWVBFUy5yZWFsKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICAgIC8vIGxlZnQgaXMgYW4gaW50ZWdlciBhbmQgcmlnaHQgaXMgbm90XG4gICAgICAvLyBhbmQgcmVhbHMgY29tZSBiZWZvcmUgaW50ZWdlcnNcbiAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIC8vIEZpbmFsbHksIG9yZGVyIGJhc2VkIG9uIHRoZSBvcmRlciBpbiB0aGUgZGF0YXNldHMgY29sdW1uc1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICByZXR1cm4gbGVmdC5pbmRleCAtIHJpZ2h0LmluZGV4O1xuICB9KTtcblxuICBpZiAoc29ydGVkRmllbGRzLmxlbmd0aCkge1xuICAgIC8vIFRoZXJlIHdhcyBhIGJlc3QgbWF0Y2hcbiAgICByZXR1cm4gc29ydGVkRmllbGRzWzBdO1xuICB9XG4gIC8vIE5vIG1hdGNoZXNcbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgaW5wdXQgZGF0YSwgYWRkaW5nIG1pc3NpbmcgZmllbGQgdHlwZXMsIHJlbmFtZSBkdXBsaWNhdGUgY29sdW1uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVJbnB1dERhdGEoZGF0YTogUHJvdG9EYXRhc2V0WydkYXRhJ10pOiBQcm9jZXNzb3JSZXN1bHQge1xuICBpZiAoIWlzUGxhaW5PYmplY3QoZGF0YSkpIHtcbiAgICBhc3NlcnQoJ2FkZERhdGFUb01hcCBFcnJvcjogZGF0YXNldC5kYXRhIGNhbm5vdCBiZSBudWxsJyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YS5maWVsZHMpKSB7XG4gICAgYXNzZXJ0KCdhZGREYXRhVG9NYXAgRXJyb3I6IGV4cGVjdCBkYXRhc2V0LmRhdGEuZmllbGRzIHRvIGJlIGFuIGFycmF5Jyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YS5yb3dzKSkge1xuICAgIGFzc2VydCgnYWRkRGF0YVRvTWFwIEVycm9yOiBleHBlY3QgZGF0YXNldC5kYXRhLnJvd3MgdG8gYmUgYW4gYXJyYXknKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHtmaWVsZHMsIHJvd3MsIGNvbHN9ID0gZGF0YTtcblxuICAvLyBjaGVjayBpZiBhbGwgZmllbGRzIGhhcyBuYW1lLCBmb3JtYXQgYW5kIHR5cGVcbiAgY29uc3QgYWxsVmFsaWQgPSBmaWVsZHMuZXZlcnkoKGYsIGkpID0+IHtcbiAgICBpZiAoIWlzUGxhaW5PYmplY3QoZikpIHtcbiAgICAgIGFzc2VydChgZmllbGRzIG5lZWRzIHRvIGJlIGFuIGFycmF5IG9mIG9iamVjdCwgYnV0IGZpbmQgJHt0eXBlb2YgZn1gKTtcbiAgICAgIGZpZWxkc1tpXSA9IHtuYW1lOiBgY29sdW1uXyR7aX1gLCB0eXBlOiBBTExfRklFTERfVFlQRVMuc3RyaW5nfTtcbiAgICB9XG5cbiAgICBpZiAoIWYubmFtZSkge1xuICAgICAgYXNzZXJ0KGBmaWVsZC5uYW1lIGlzIHJlcXVpcmVkIGJ1dCBtaXNzaW5nIGluICR7SlNPTi5zdHJpbmdpZnkoZil9YCk7XG4gICAgICAvLyBhc3NpZ24gYSBuYW1lXG4gICAgICBmaWVsZHNbaV0ubmFtZSA9IGBjb2x1bW5fJHtpfWA7XG4gICAgfVxuXG4gICAgaWYgKCFmLnR5cGUgfHwgIUFMTF9GSUVMRF9UWVBFU1tmLnR5cGVdKSB7XG4gICAgICBhc3NlcnQoYHVua25vd24gZmllbGQgdHlwZSAke2YudHlwZX1gKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIWYuYW5hbHl6ZXJUeXBlKSB7XG4gICAgICBhc3NlcnQoYGZpZWxkICR7aX0gbWlzc2luZyBhbmFseXplclR5cGVgKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBjaGVjayB0aW1lIGZvcm1hdCBpcyBjb3JyZWN0IGJhc2VkIG9uIGZpcnN0IDEwIG5vdCBlbXB0eSBlbGVtZW50XG4gICAgaWYgKGYudHlwZSA9PT0gQUxMX0ZJRUxEX1RZUEVTLnRpbWVzdGFtcCkge1xuICAgICAgY29uc3Qgc2FtcGxlID0gKFxuICAgICAgICBjb2xzID8gZmluZE5vbkVtcHR5Um93c0F0RmllbGRBcnJvdyhjb2xzLCBpLCAxMCkgOiBmaW5kTm9uRW1wdHlSb3dzQXRGaWVsZChyb3dzLCBpLCAxMClcbiAgICAgICkubWFwKHIgPT4gKHt0czogcltpXX0pKTtcbiAgICAgIGNvbnN0IGFuYWx5emVkVHlwZSA9IEFuYWx5emVyLmNvbXB1dGVDb2xNZXRhKHNhbXBsZSlbMF07XG4gICAgICByZXR1cm4gYW5hbHl6ZWRUeXBlICYmIGFuYWx5emVkVHlwZS5jYXRlZ29yeSA9PT0gJ1RJTUUnICYmIGFuYWx5emVkVHlwZS5mb3JtYXQgPT09IGYuZm9ybWF0O1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGV4aXN0aW5nIHN0cmluZyBmaWVsZCBpcyBIMyB0eXBlXG4gICAgaWYgKGYudHlwZSA9PT0gQUxMX0ZJRUxEX1RZUEVTLnN0cmluZykge1xuICAgICAgY29uc3Qgc2FtcGxlID0gKFxuICAgICAgICBjb2xzID8gZmluZE5vbkVtcHR5Um93c0F0RmllbGRBcnJvdyhjb2xzLCBpLCAxMCkgOiBmaW5kTm9uRW1wdHlSb3dzQXRGaWVsZChyb3dzLCBpLCAxMClcbiAgICAgICkubWFwKHIgPT4gcltpXSk7XG4gICAgICByZXR1cm4gc2FtcGxlLmV2ZXJ5KGl0ZW0gPT4gIWgzSXNWYWxpZChpdGVtKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0pO1xuXG4gIGlmIChhbGxWYWxpZCkge1xuICAgIHJldHVybiB7cm93cywgZmllbGRzLCBjb2xzfTtcbiAgfVxuXG4gIC8vIGlmIGFueSBmaWVsZCBoYXMgbWlzc2luZyB0eXBlLCByZWNhbGN1bGF0ZSBpdCBmb3IgZXZlcnlvbmVcbiAgLy8gYmVjYXVzZSB3ZSBzaW1wbHkgbG9zdCBmYWl0aCBpbiBodW1hbml0eVxuICBjb25zdCBzYW1wbGVEYXRhID0gY29sc1xuICAgID8gZ2V0U2FtcGxlRm9yVHlwZUFuYWx5emVBcnJvdyhcbiAgICAgICAgY29scyxcbiAgICAgICAgZmllbGRzLm1hcChmID0+IGYubmFtZSlcbiAgICAgIClcbiAgICA6IGdldFNhbXBsZUZvclR5cGVBbmFseXplKHtcbiAgICAgICAgZmllbGRzOiBmaWVsZHMubWFwKGYgPT4gZi5uYW1lKSxcbiAgICAgICAgcm93c1xuICAgICAgfSk7XG4gIGNvbnN0IGZpZWxkT3JkZXIgPSBmaWVsZHMubWFwKGYgPT4gZi5uYW1lKTtcbiAgY29uc3QgbWV0YSA9IGdldEZpZWxkc0Zyb21EYXRhKHNhbXBsZURhdGEsIGZpZWxkT3JkZXIpO1xuICBjb25zdCB1cGRhdGVkRmllbGRzID0gZmllbGRzLm1hcCgoZiwgaSkgPT4gKHtcbiAgICAuLi5mLFxuICAgIHR5cGU6IG1ldGFbaV0udHlwZSxcbiAgICBmb3JtYXQ6IG1ldGFbaV0uZm9ybWF0LFxuICAgIGFuYWx5emVyVHlwZTogbWV0YVtpXS5hbmFseXplclR5cGVcbiAgfSkpO1xuXG4gIHJldHVybiB7ZmllbGRzOiB1cGRhdGVkRmllbGRzLCByb3dzLCAuLi4oY29scyA/IHtjb2xzfSA6IHt9KX07XG59XG5cbmZ1bmN0aW9uIGZpbmROb25FbXB0eVJvd3NBdEZpZWxkKHJvd3M6IHVua25vd25bXVtdLCBmaWVsZElkeDogbnVtYmVyLCB0b3RhbDogbnVtYmVyKTogYW55W10ge1xuICBjb25zdCBzYW1wbGU6IGFueVtdID0gW107XG4gIGxldCBpID0gMDtcbiAgd2hpbGUgKHNhbXBsZS5sZW5ndGggPCB0b3RhbCAmJiBpIDwgcm93cy5sZW5ndGgpIHtcbiAgICBpZiAobm90TnVsbG9yVW5kZWZpbmVkKHJvd3NbaV0/LltmaWVsZElkeF0pKSB7XG4gICAgICBzYW1wbGUucHVzaChyb3dzW2ldKTtcbiAgICB9XG4gICAgaSsrO1xuICB9XG4gIHJldHVybiBzYW1wbGU7XG59XG5cbmZ1bmN0aW9uIGZpbmROb25FbXB0eVJvd3NBdEZpZWxkQXJyb3coXG4gIGNvbHM6IGFycm93LlZlY3RvcltdLFxuICBmaWVsZElkeDogbnVtYmVyLFxuICB0b3RhbDogbnVtYmVyXG4pOiBhbnlbXSB7XG4gIGNvbnN0IHNhbXBsZTogYW55W10gPSBbXTtcbiAgY29uc3QgbnVtUm93cyA9IGNvbHNbZmllbGRJZHhdLmxlbmd0aDtcbiAgbGV0IGkgPSAwO1xuICB3aGlsZSAoc2FtcGxlLmxlbmd0aCA8IHRvdGFsICYmIGkgPCBudW1Sb3dzKSB7XG4gICAgaWYgKG5vdE51bGxvclVuZGVmaW5lZChjb2xzW2ZpZWxkSWR4XS5nZXQoaSkpKSB7XG4gICAgICBjb25zdCByb3cgPSBjb2xzLm1hcChjb2wgPT4gY29sLmdldChpKSk7XG4gICAgICBzYW1wbGUucHVzaChyb3cpO1xuICAgIH1cbiAgICBpKys7XG4gIH1cbiAgcmV0dXJuIHNhbXBsZTtcbn1cblxuY29uc3QgVElNRV9ESVNQTEFZID0gJzIwMjAtMDUtMTEgMTQ6MDAnO1xuXG5leHBvcnQgY29uc3QgYWRkVGltZUxhYmVsID0gKGZvcm1hdHM6IFRpbWVMYWJlbEZvcm1hdFtdKSA9PlxuICBmb3JtYXRzLm1hcChmID0+ICh7XG4gICAgLi4uZixcbiAgICBsYWJlbDpcbiAgICAgIGYudHlwZSA9PT0gVE9PTFRJUF9GT1JNQVRfVFlQRVMuREFURV9USU1FIHx8IGYudHlwZSA9PT0gVE9PTFRJUF9GT1JNQVRfVFlQRVMuREFURVxuICAgICAgICA/IGdldEZvcm1hdHRlcihnZXRGb3JtYXRWYWx1ZShmKSkoVElNRV9ESVNQTEFZKVxuICAgICAgICA6IGYubGFiZWxcbiAgfSkpO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmllbGRGb3JtYXRMYWJlbHMoZmllbGRUeXBlPzogc3RyaW5nKTogVG9vbHRpcEZvcm1hdFtdIHtcbiAgY29uc3QgdG9vbHRpcFR5cGVzID0gKGZpZWxkVHlwZSAmJiBGSUVMRF9PUFRTW2ZpZWxkVHlwZV0uZm9ybWF0LnRvb2x0aXApIHx8IFtdO1xuICBjb25zdCBmb3JtYXRMYWJlbHM6IFRpbWVMYWJlbEZvcm1hdFtdID0gT2JqZWN0LnZhbHVlcyhUT09MVElQX0ZPUk1BVFMpLmZpbHRlcih0ID0+XG4gICAgdG9vbHRpcFR5cGVzLmluY2x1ZGVzKHQudHlwZSlcbiAgKTtcbiAgcmV0dXJuIGFkZFRpbWVMYWJlbChmb3JtYXRMYWJlbHMpO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0Rm9ybWF0TGFiZWxzID0gKGZpZWxkczogVG9vbHRpcEZpZWxkc1tdLCBmaWVsZE5hbWU6IHN0cmluZyk6IFRvb2x0aXBGb3JtYXRbXSA9PiB7XG4gIGNvbnN0IGZpZWxkVHlwZSA9IGZpZWxkcy5maW5kKGYgPT4gZi5uYW1lID09PSBmaWVsZE5hbWUpPy50eXBlO1xuICByZXR1cm4gZ2V0RmllbGRGb3JtYXRMYWJlbHMoZmllbGRUeXBlKTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBSUEsSUFBQUEsVUFBQSxHQUFBQyxPQUFBO0FBTUEsSUFBQUMsWUFBQSxHQUFBRCxPQUFBO0FBS0EsSUFBQUUsYUFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsT0FBQSxHQUFBQyxzQkFBQSxDQUFBSixPQUFBO0FBY0EsSUFBQUssTUFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sVUFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sT0FBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsV0FBQSxHQUFBUixPQUFBO0FBQXVDLFNBQUFTLFFBQUFDLENBQUEsRUFBQUMsQ0FBQSxRQUFBQyxDQUFBLEdBQUFDLE1B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
@@ -26,8 +26,8 @@ export declare class IndexedDataContainer implements DataContainerInterface {
26
26
  getPlainIndex(): number[];
27
27
  flattenData(): any[][];
28
28
  map<T>(func: (row: DataRow, index: number) => T, sharedRow?: SharedRowOptions, options?: RangeOptions): T[];
29
- mapIndex<T>(func: ({ index: number }: {
30
- index: any;
29
+ mapIndex<T>(func: ({ index }: {
30
+ index: number;
31
31
  }, dc: DataContainerInterface) => T, options?: RangeOptions): T[];
32
32
  find(func: (row: DataRow, index: number) => boolean, sharedRow?: SharedRowOptions): DataRow | undefined;
33
33
  reduce<T>(func: (acc: T, row: DataRow, index: number) => T, initialValue: T, sharedRow?: SharedRowOptions): T;
@@ -211,4 +211,4 @@ var IndexedDataContainer = exports.IndexedDataContainer = /*#__PURE__*/function
211
211
  }
212
212
  }]);
213
213
  }();
214
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZGF0YVJvdyIsInJlcXVpcmUiLCJfbWFya2VkIiwiX3JlZ2VuZXJhdG9yIiwibWFyayIsInJvd3NJdGVyYXRvciIsIl9tYXJrZWQyIiwiY29sdW1uSXRlcmF0b3IiLCJkYXRhQ29udGFpbmVyIiwiaW5kaWNlcyIsInNoYXJlZFJvdyIsIm51bVJvd3MiLCJyb3dJbmRleCIsIm1hcHBlZFJvd0luZGV4Iiwid3JhcCIsInJvd3NJdGVyYXRvciQiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwibGVuZ3RoIiwicm93Iiwic3RvcCIsImNvbHVtbkluZGV4IiwiY29sdW1uSXRlcmF0b3IkIiwiX2NvbnRleHQyIiwidmFsdWVBdCIsIkluZGV4ZWREYXRhQ29udGFpbmVyIiwiZXhwb3J0cyIsInBhcmVudERhdGFDb250YWluZXIiLCJfY2xhc3NDYWxsQ2hlY2syIiwiX2RlZmluZVByb3BlcnR5MiIsIl9wYXJlbnREYXRhQ29udGFpbmVyIiwiX2luZGljZXMiLCJfY3JlYXRlQ2xhc3MyIiwia2V5IiwidmFsdWUiLCJudW1Db2x1bW5zIiwiX21hcHBlZFJvd0luZGV4Iiwicm93QXNBcnJheSIsInJvd3MiLCJjb2x1bW4iLCJnZXRQbGFpbkluZGV4IiwibWFwIiwiXyIsImkiLCJmbGF0dGVuRGF0YSIsIl90aGlzIiwidFNoYXJlZFJvdyIsIkRhdGFSb3ciLCJjcmVhdGVTaGFyZWRSb3ciLCJ2YWx1ZXMiLCJmdW5jIiwib3B0aW9ucyIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsIl9vcHRpb25zJHN0YXJ0Iiwic3RhcnQiLCJfb3B0aW9ucyRlbmQiLCJlbmQiLCJlbmRSb3ciLCJNYXRoIiwibWluIiwib3V0IiwicHVzaCIsIm1hcEluZGV4IiwiX29wdGlvbnMkc3RhcnQyIiwiX29wdGlvbnMkZW5kMiIsImluZGV4IiwiZmluZCIsInJlZHVjZSIsImluaXRpYWxWYWx1ZSJdLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleGVkLWRhdGEtY29udGFpbmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7RGF0YUNvbnRhaW5lckludGVyZmFjZSwgUmFuZ2VPcHRpb25zfSBmcm9tICcuL2RhdGEtY29udGFpbmVyLWludGVyZmFjZSc7XG5pbXBvcnQge0RhdGFSb3csIFNoYXJlZFJvd09wdGlvbnN9IGZyb20gJy4vZGF0YS1yb3cnO1xuXG4vKipcbiAqIEBwYXJhbSBkYXRhQ29udGFpbmVyXG4gKiBAcGFyYW0gaW5kaWNlc1xuICogQHBhcmFtIHNoYXJlZFJvd1xuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24qIHJvd3NJdGVyYXRvcihcbiAgZGF0YUNvbnRhaW5lcjogRGF0YUNvbnRhaW5lckludGVyZmFjZSxcbiAgaW5kaWNlczogbnVtYmVyW10sXG4gIHNoYXJlZFJvdzogU2hhcmVkUm93T3B0aW9uc1xuKTogR2VuZXJhdG9yPERhdGFSb3c+IHtcbiAgY29uc3QgbnVtUm93cyA9IGluZGljZXMubGVuZ3RoO1xuICBmb3IgKGxldCByb3dJbmRleCA9IDA7IHJvd0luZGV4IDwgbnVtUm93czsgKytyb3dJbmRleCkge1xuICAgIGNvbnN0IG1hcHBlZFJvd0luZGV4ID0gaW5kaWNlc1tyb3dJbmRleF07XG4gICAgeWllbGQgZGF0YUNvbnRhaW5lci5yb3cobWFwcGVkUm93SW5kZXgsIHNoYXJlZFJvdyk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0gZGF0YUNvbnRhaW5lclxuICogQHBhcmFtIGluZGljZXNcbiAqIEBwYXJhbSBjb2x1bW5JbmRleFxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24qIGNvbHVtbkl0ZXJhdG9yKFxuICBkYXRhQ29udGFpbmVyOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlLFxuICBpbmRpY2VzOiBudW1iZXJbXSxcbiAgY29sdW1uSW5kZXg6IG51bWJlclxuKTogR2VuZXJhdG9yPGFueT4ge1xuICBjb25zdCBudW1Sb3dzID0gaW5kaWNlcy5sZW5ndGg7XG4gIGZvciAobGV0IHJvd0luZGV4ID0gMDsgcm93SW5kZXggPCBudW1Sb3dzOyArK3Jvd0luZGV4KSB7XG4gICAgY29uc3QgbWFwcGVkUm93SW5kZXggPSBpbmRpY2VzW3Jvd0luZGV4XTtcbiAgICB5aWVsZCBkYXRhQ29udGFpbmVyLnZhbHVlQXQobWFwcGVkUm93SW5kZXgsIGNvbHVtbkluZGV4KTtcbiAgfVxufVxuXG4vKipcbiAqIEEgZGF0YSBjb250YWluZXIgd3JhcHBlciBhcm91bmQgYW5vdGhlciBkYXRhIGNvbnRhaW5lci5cbiAqIFlvdSBoYXZlIHRvIHBhc3MgYW4gYXJyYXkgb2YgaW5kaWNlcyB0byByZWZlcmVuY2Ugcm93cyBpbiB0aGUgcGFyZW50IGRhdGEgY29udGFpbmVyLlxuICogRm9yIGV4YW1wbGUgaW5kaWNlcyBbMywgNCwgNiwgOF0gbWVhbnMgdGhhdCBJbmRleGVkRGF0YUNvbnRhaW5lciBpcyBnb2luZyB0byBoYXZlXG4gKiA0IHJvd3MgYW5kIHJvdygyKSBwb2ludHMgdG8gNnRoIHJvdyBpbiB0aGUgcmVmZXJlbmNlZCBkYXRhIGNvbnRhaW5lci5cbiAqL1xuZXhwb3J0IGNsYXNzIEluZGV4ZWREYXRhQ29udGFpbmVyIGltcGxlbWVudHMgRGF0YUNvbnRhaW5lckludGVyZmFjZSB7XG4gIF9wYXJlbnREYXRhQ29udGFpbmVyOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlO1xuICBfaW5kaWNlczogbnVtYmVyW107XG5cbiAgY29uc3RydWN0b3IocGFyZW50RGF0YUNvbnRhaW5lcjogRGF0YUNvbnRhaW5lckludGVyZmFjZSwgaW5kaWNlczogbnVtYmVyW10pIHtcbiAgICB0aGlzLl9wYXJlbnREYXRhQ29udGFpbmVyID0gcGFyZW50RGF0YUNvbnRhaW5lcjtcbiAgICB0aGlzLl9pbmRpY2VzID0gaW5kaWNlcztcbiAgfVxuXG4gIG51bVJvd3MoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5faW5kaWNlcy5sZW5ndGg7XG4gIH1cblxuICBudW1Db2x1bW5zKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcmVudERhdGFDb250YWluZXIubnVtQ29sdW1ucygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbWFwcyBhIGxvY2FsIGluZGV4IHRvIGFuIGluZGV4IGluIHRoZSBwYXJlbnQgZGF0YXNldFxuICAgKiBAcGFyYW0gcm93SW5kZXhcbiAgICogQHJldHVybnMgbnVtYmVyXG4gICAqL1xuICBfbWFwcGVkUm93SW5kZXgocm93SW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2luZGljZXNbcm93SW5kZXhdO1xuICB9XG5cbiAgdmFsdWVBdChyb3dJbmRleDogbnVtYmVyLCBjb2x1bW5JbmRleDogbnVtYmVyKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fcGFyZW50RGF0YUNvbnRhaW5lci52YWx1ZUF0KHRoaXMuX21hcHBlZFJvd0luZGV4KHJvd0luZGV4KSwgY29sdW1uSW5kZXgpO1xuICB9XG5cbiAgcm93KHJvd0luZGV4OiBudW1iZXIsIHNoYXJlZFJvdz86IFNoYXJlZFJvd09wdGlvbnMpOiBEYXRhUm93IHtcbiAgICByZXR1cm4gdGhpcy5fcGFyZW50RGF0YUNvbnRhaW5lci5yb3codGhpcy5fbWFwcGVkUm93SW5kZXgocm93SW5kZXgpLCBzaGFyZWRSb3cpO1xuICB9XG5cbiAgcm93QXNBcnJheShyb3dJbmRleDogbnVtYmVyKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLl9wYXJlbnREYXRhQ29udGFpbmVyLnJvd0FzQXJyYXkodGhpcy5fbWFwcGVkUm93SW5kZXgocm93SW5kZXgpKTtcbiAgfVxuXG4gIHJvd3Moc2hhcmVkUm93PzogU2hhcmVkUm93T3B0aW9ucykge1xuICAgIHJldHVybiByb3dzSXRlcmF0b3IodGhpcy5fcGFyZW50RGF0YUNvbnRhaW5lciwgdGhpcy5faW5kaWNlcywgc2hhcmVkUm93KTtcbiAgfVxuXG4gIGNvbHVtbihjb2x1bW5JbmRleDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGNvbHVtbkl0ZXJhdG9yKHRoaXMuX3BhcmVudERhdGFDb250YWluZXIsIHRoaXMuX2luZGljZXMsIGNvbHVtbkluZGV4KTtcbiAgfVxuXG4gIGdldFBsYWluSW5kZXgoKTogbnVtYmVyW10ge1xuICAgIHJldHVybiB0aGlzLl9pbmRpY2VzLm1hcCgoXywgaSkgPT4gaSk7XG4gIH1cblxuICBmbGF0dGVuRGF0YSgpOiBhbnlbXVtdIHtcbiAgICBjb25zdCB0U2hhcmVkUm93ID0gRGF0YVJvdy5jcmVhdGVTaGFyZWRSb3codHJ1ZSk7XG5cbiAgICByZXR1cm4gdGhpcy5faW5kaWNlcy5tYXAoKF8sIGkpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnJvdyhpLCB0U2hhcmVkUm93KS52YWx1ZXMoKTtcbiAgICB9LCB0aGlzKTtcbiAgfVxuXG4gIG1hcDxUPihcbiAgICBmdW5jOiAocm93OiBEYXRhUm93LCBpbmRleDogbnVtYmVyKSA9PiBULFxuICAgIHNoYXJlZFJvdz86IFNoYXJlZFJvd09wdGlvbnMsXG4gICAgb3B0aW9uczogUmFuZ2VPcHRpb25zID0ge31cbiAgKTogVFtdIHtcbiAgICBjb25zdCB7c3RhcnQgPSAwLCBlbmQgPSB0aGlzLm51bVJvd3MoKX0gPSBvcHRpb25zO1xuICAgIGNvbnN0IGVuZFJvdyA9IE1hdGgubWluKHRoaXMubnVtUm93cygpLCBlbmQpO1xuXG4gICAgY29uc3QgdFNoYXJlZFJvdyA9IERhdGFSb3cuY3JlYXRlU2hhcmVkUm93KHNoYXJlZFJvdyk7XG5cbiAgICBjb25zdCBvdXQ6IFRbXSA9IFtdO1xuICAgIGZvciAobGV0IHJvd0luZGV4ID0gc3RhcnQ7IHJvd0luZGV4IDwgZW5kUm93OyArK3Jvd0luZGV4KSB7XG4gICAgICBjb25zdCByb3cgPSB0aGlzLnJvdyhyb3dJbmRleCwgdFNoYXJlZFJvdyk7XG4gICAgICBvdXQucHVzaChmdW5jKHJvdywgcm93SW5kZXgpKTtcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIG1hcEluZGV4PFQ+KFxuICAgIGZ1bmM6ICh7aW5kZXg6IG51bWJlcn0sIGRjOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlKSA9PiBULFxuICAgIG9wdGlvbnM6IFJhbmdlT3B0aW9ucyA9IHt9XG4gICk6IFRbXSB7XG4gICAgY29uc3Qge3N0YXJ0ID0gMCwgZW5kID0gdGhpcy5udW1Sb3dzKCl9ID0gb3B0aW9ucztcbiAgICBjb25zdCBlbmRSb3cgPSBNYXRoLm1pbih0aGlzLm51bVJvd3MoKSwgZW5kKTtcblxuICAgIGNvbnN0IG91dDogVFtdID0gW107XG4gICAgZm9yIChsZXQgcm93SW5kZXggPSBzdGFydDsgcm93SW5kZXggPCBlbmRSb3c7ICsrcm93SW5kZXgpIHtcbiAgICAgIG91dC5wdXNoKGZ1bmMoe2luZGV4OiB0aGlzLl9tYXBwZWRSb3dJbmRleChyb3dJbmRleCl9LCB0aGlzLl9wYXJlbnREYXRhQ29udGFpbmVyKSk7XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICBmaW5kKFxuICAgIGZ1bmM6IChyb3c6IERhdGFSb3csIGluZGV4OiBudW1iZXIpID0+IGJvb2xlYW4sXG4gICAgc2hhcmVkUm93PzogU2hhcmVkUm93T3B0aW9uc1xuICApOiBEYXRhUm93IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCB0U2hhcmVkUm93ID0gRGF0YVJvdy5jcmVhdGVTaGFyZWRSb3coc2hhcmVkUm93KTtcblxuICAgIGZvciAobGV0IHJvd0luZGV4ID0gMDsgcm93SW5kZXggPCB0aGlzLm51bVJvd3MoKTsgKytyb3dJbmRleCkge1xuICAgICAgY29uc3Qgcm93ID0gdGhpcy5yb3cocm93SW5kZXgsIHRTaGFyZWRSb3cpO1xuICAgICAgaWYgKGZ1bmMocm93LCByb3dJbmRleCkpIHtcbiAgICAgICAgcmV0dXJuIHJvdztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJlZHVjZTxUPihcbiAgICBmdW5jOiAoYWNjOiBULCByb3c6IERhdGFSb3csIGluZGV4OiBudW1iZXIpID0+IFQsXG4gICAgaW5pdGlhbFZhbHVlOiBULFxuICAgIHNoYXJlZFJvdz86IFNoYXJlZFJvd09wdGlvbnNcbiAgKTogVCB7XG4gICAgY29uc3QgdFNoYXJlZFJvdyA9IERhdGFSb3cuY3JlYXRlU2hhcmVkUm93KHNoYXJlZFJvdyk7XG5cbiAgICBmb3IgKGxldCByb3dJbmRleCA9IDA7IHJvd0luZGV4IDwgdGhpcy5faW5kaWNlcy5sZW5ndGg7ICsrcm93SW5kZXgpIHtcbiAgICAgIGNvbnN0IHJvdyA9IHRoaXMucm93KHJvd0luZGV4LCB0U2hhcmVkUm93KTtcbiAgICAgIGluaXRpYWxWYWx1ZSA9IGZ1bmMoaW5pdGlhbFZhbHVlLCByb3csIHJvd0luZGV4KTtcbiAgICB9XG4gICAgcmV0dXJuIGluaXRpYWxWYWx1ZTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUlBLElBQUFBLFFBQUEsR0FBQUMsT0FBQTtBQUFxRCxJQUFBQyxPQUFBLGdCQUFBQyxZQUFBLFlBQUFDLElBQUEsQ0FRM0NDLFlBQVk7RUFBQUMsUUFBQSxnQkFBQUgsWUFBQSxZQUFBQyxJQUFBLENBa0JaRyxjQUFjLEdBOUJ4QjtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBVUYsWUFBWUEsQ0FDcEJHLGFBQXFDLEVBQ3JDQyxPQUFpQixFQUNqQkMsU0FBMkI7RUFBQSxJQUFBQyxPQUFBLEVBQUFDLFFBQUEsRUFBQUMsY0FBQTtFQUFBLE9BQUFWLFlBQUEsWUFBQVcsSUFBQSxVQUFBQyxjQUFBQyxRQUFBO0lBQUEsa0JBQUFBLFFBQUEsQ0FBQUMsSUFBQSxHQUFBRCxRQUFBLENBQUFFLElBQUE7TUFBQTtRQUVyQlAsT0FBTyxHQUFHRixPQUFPLENBQUNVLE1BQU07UUFDckJQLFFBQVEsR0FBRyxDQUFDO01BQUE7UUFBQSxNQUFFQSxRQUFRLEdBQUdELE9BQU87VUFBQUssUUFBQSxDQUFBRSxJQUFBO1VBQUE7UUFBQTtRQUNqQ0wsY0FBYyxHQUFH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
214
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZGF0YVJvdyIsInJlcXVpcmUiLCJfbWFya2VkIiwiX3JlZ2VuZXJhdG9yIiwibWFyayIsInJvd3NJdGVyYXRvciIsIl9tYXJrZWQyIiwiY29sdW1uSXRlcmF0b3IiLCJkYXRhQ29udGFpbmVyIiwiaW5kaWNlcyIsInNoYXJlZFJvdyIsIm51bVJvd3MiLCJyb3dJbmRleCIsIm1hcHBlZFJvd0luZGV4Iiwid3JhcCIsInJvd3NJdGVyYXRvciQiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwibGVuZ3RoIiwicm93Iiwic3RvcCIsImNvbHVtbkluZGV4IiwiY29sdW1uSXRlcmF0b3IkIiwiX2NvbnRleHQyIiwidmFsdWVBdCIsIkluZGV4ZWREYXRhQ29udGFpbmVyIiwiZXhwb3J0cyIsInBhcmVudERhdGFDb250YWluZXIiLCJfY2xhc3NDYWxsQ2hlY2syIiwiX2RlZmluZVByb3BlcnR5MiIsIl9wYXJlbnREYXRhQ29udGFpbmVyIiwiX2luZGljZXMiLCJfY3JlYXRlQ2xhc3MyIiwia2V5IiwidmFsdWUiLCJudW1Db2x1bW5zIiwiX21hcHBlZFJvd0luZGV4Iiwicm93QXNBcnJheSIsInJvd3MiLCJjb2x1bW4iLCJnZXRQbGFpbkluZGV4IiwibWFwIiwiXyIsImkiLCJmbGF0dGVuRGF0YSIsIl90aGlzIiwidFNoYXJlZFJvdyIsIkRhdGFSb3ciLCJjcmVhdGVTaGFyZWRSb3ciLCJ2YWx1ZXMiLCJmdW5jIiwib3B0aW9ucyIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsIl9vcHRpb25zJHN0YXJ0Iiwic3RhcnQiLCJfb3B0aW9ucyRlbmQiLCJlbmQiLCJlbmRSb3ciLCJNYXRoIiwibWluIiwib3V0IiwicHVzaCIsIm1hcEluZGV4IiwiX29wdGlvbnMkc3RhcnQyIiwiX29wdGlvbnMkZW5kMiIsImluZGV4IiwiZmluZCIsInJlZHVjZSIsImluaXRpYWxWYWx1ZSJdLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleGVkLWRhdGEtY29udGFpbmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7RGF0YUNvbnRhaW5lckludGVyZmFjZSwgUmFuZ2VPcHRpb25zfSBmcm9tICcuL2RhdGEtY29udGFpbmVyLWludGVyZmFjZSc7XG5pbXBvcnQge0RhdGFSb3csIFNoYXJlZFJvd09wdGlvbnN9IGZyb20gJy4vZGF0YS1yb3cnO1xuXG4vKipcbiAqIEBwYXJhbSBkYXRhQ29udGFpbmVyXG4gKiBAcGFyYW0gaW5kaWNlc1xuICogQHBhcmFtIHNoYXJlZFJvd1xuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24qIHJvd3NJdGVyYXRvcihcbiAgZGF0YUNvbnRhaW5lcjogRGF0YUNvbnRhaW5lckludGVyZmFjZSxcbiAgaW5kaWNlczogbnVtYmVyW10sXG4gIHNoYXJlZFJvdzogU2hhcmVkUm93T3B0aW9uc1xuKTogR2VuZXJhdG9yPERhdGFSb3c+IHtcbiAgY29uc3QgbnVtUm93cyA9IGluZGljZXMubGVuZ3RoO1xuICBmb3IgKGxldCByb3dJbmRleCA9IDA7IHJvd0luZGV4IDwgbnVtUm93czsgKytyb3dJbmRleCkge1xuICAgIGNvbnN0IG1hcHBlZFJvd0luZGV4ID0gaW5kaWNlc1tyb3dJbmRleF07XG4gICAgeWllbGQgZGF0YUNvbnRhaW5lci5yb3cobWFwcGVkUm93SW5kZXgsIHNoYXJlZFJvdyk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0gZGF0YUNvbnRhaW5lclxuICogQHBhcmFtIGluZGljZXNcbiAqIEBwYXJhbSBjb2x1bW5JbmRleFxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24qIGNvbHVtbkl0ZXJhdG9yKFxuICBkYXRhQ29udGFpbmVyOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlLFxuICBpbmRpY2VzOiBudW1iZXJbXSxcbiAgY29sdW1uSW5kZXg6IG51bWJlclxuKTogR2VuZXJhdG9yPGFueT4ge1xuICBjb25zdCBudW1Sb3dzID0gaW5kaWNlcy5sZW5ndGg7XG4gIGZvciAobGV0IHJvd0luZGV4ID0gMDsgcm93SW5kZXggPCBudW1Sb3dzOyArK3Jvd0luZGV4KSB7XG4gICAgY29uc3QgbWFwcGVkUm93SW5kZXggPSBpbmRpY2VzW3Jvd0luZGV4XTtcbiAgICB5aWVsZCBkYXRhQ29udGFpbmVyLnZhbHVlQXQobWFwcGVkUm93SW5kZXgsIGNvbHVtbkluZGV4KTtcbiAgfVxufVxuXG4vKipcbiAqIEEgZGF0YSBjb250YWluZXIgd3JhcHBlciBhcm91bmQgYW5vdGhlciBkYXRhIGNvbnRhaW5lci5cbiAqIFlvdSBoYXZlIHRvIHBhc3MgYW4gYXJyYXkgb2YgaW5kaWNlcyB0byByZWZlcmVuY2Ugcm93cyBpbiB0aGUgcGFyZW50IGRhdGEgY29udGFpbmVyLlxuICogRm9yIGV4YW1wbGUgaW5kaWNlcyBbMywgNCwgNiwgOF0gbWVhbnMgdGhhdCBJbmRleGVkRGF0YUNvbnRhaW5lciBpcyBnb2luZyB0byBoYXZlXG4gKiA0IHJvd3MgYW5kIHJvdygyKSBwb2ludHMgdG8gNnRoIHJvdyBpbiB0aGUgcmVmZXJlbmNlZCBkYXRhIGNvbnRhaW5lci5cbiAqL1xuZXhwb3J0IGNsYXNzIEluZGV4ZWREYXRhQ29udGFpbmVyIGltcGxlbWVudHMgRGF0YUNvbnRhaW5lckludGVyZmFjZSB7XG4gIF9wYXJlbnREYXRhQ29udGFpbmVyOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlO1xuICBfaW5kaWNlczogbnVtYmVyW107XG5cbiAgY29uc3RydWN0b3IocGFyZW50RGF0YUNvbnRhaW5lcjogRGF0YUNvbnRhaW5lckludGVyZmFjZSwgaW5kaWNlczogbnVtYmVyW10pIHtcbiAgICB0aGlzLl9wYXJlbnREYXRhQ29udGFpbmVyID0gcGFyZW50RGF0YUNvbnRhaW5lcjtcbiAgICB0aGlzLl9pbmRpY2VzID0gaW5kaWNlcztcbiAgfVxuXG4gIG51bVJvd3MoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5faW5kaWNlcy5sZW5ndGg7XG4gIH1cblxuICBudW1Db2x1bW5zKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcmVudERhdGFDb250YWluZXIubnVtQ29sdW1ucygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbWFwcyBhIGxvY2FsIGluZGV4IHRvIGFuIGluZGV4IGluIHRoZSBwYXJlbnQgZGF0YXNldFxuICAgKiBAcGFyYW0gcm93SW5kZXhcbiAgICogQHJldHVybnMgbnVtYmVyXG4gICAqL1xuICBfbWFwcGVkUm93SW5kZXgocm93SW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2luZGljZXNbcm93SW5kZXhdO1xuICB9XG5cbiAgdmFsdWVBdChyb3dJbmRleDogbnVtYmVyLCBjb2x1bW5JbmRleDogbnVtYmVyKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fcGFyZW50RGF0YUNvbnRhaW5lci52YWx1ZUF0KHRoaXMuX21hcHBlZFJvd0luZGV4KHJvd0luZGV4KSwgY29sdW1uSW5kZXgpO1xuICB9XG5cbiAgcm93KHJvd0luZGV4OiBudW1iZXIsIHNoYXJlZFJvdz86IFNoYXJlZFJvd09wdGlvbnMpOiBEYXRhUm93IHtcbiAgICByZXR1cm4gdGhpcy5fcGFyZW50RGF0YUNvbnRhaW5lci5yb3codGhpcy5fbWFwcGVkUm93SW5kZXgocm93SW5kZXgpLCBzaGFyZWRSb3cpO1xuICB9XG5cbiAgcm93QXNBcnJheShyb3dJbmRleDogbnVtYmVyKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLl9wYXJlbnREYXRhQ29udGFpbmVyLnJvd0FzQXJyYXkodGhpcy5fbWFwcGVkUm93SW5kZXgocm93SW5kZXgpKTtcbiAgfVxuXG4gIHJvd3Moc2hhcmVkUm93PzogU2hhcmVkUm93T3B0aW9ucykge1xuICAgIHJldHVybiByb3dzSXRlcmF0b3IodGhpcy5fcGFyZW50RGF0YUNvbnRhaW5lciwgdGhpcy5faW5kaWNlcywgc2hhcmVkUm93KTtcbiAgfVxuXG4gIGNvbHVtbihjb2x1bW5JbmRleDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGNvbHVtbkl0ZXJhdG9yKHRoaXMuX3BhcmVudERhdGFDb250YWluZXIsIHRoaXMuX2luZGljZXMsIGNvbHVtbkluZGV4KTtcbiAgfVxuXG4gIGdldFBsYWluSW5kZXgoKTogbnVtYmVyW10ge1xuICAgIHJldHVybiB0aGlzLl9pbmRpY2VzLm1hcCgoXywgaSkgPT4gaSk7XG4gIH1cblxuICBmbGF0dGVuRGF0YSgpOiBhbnlbXVtdIHtcbiAgICBjb25zdCB0U2hhcmVkUm93ID0gRGF0YVJvdy5jcmVhdGVTaGFyZWRSb3codHJ1ZSk7XG5cbiAgICByZXR1cm4gdGhpcy5faW5kaWNlcy5tYXAoKF8sIGkpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnJvdyhpLCB0U2hhcmVkUm93KS52YWx1ZXMoKTtcbiAgICB9LCB0aGlzKTtcbiAgfVxuXG4gIG1hcDxUPihcbiAgICBmdW5jOiAocm93OiBEYXRhUm93LCBpbmRleDogbnVtYmVyKSA9PiBULFxuICAgIHNoYXJlZFJvdz86IFNoYXJlZFJvd09wdGlvbnMsXG4gICAgb3B0aW9uczogUmFuZ2VPcHRpb25zID0ge31cbiAgKTogVFtdIHtcbiAgICBjb25zdCB7c3RhcnQgPSAwLCBlbmQgPSB0aGlzLm51bVJvd3MoKX0gPSBvcHRpb25zO1xuICAgIGNvbnN0IGVuZFJvdyA9IE1hdGgubWluKHRoaXMubnVtUm93cygpLCBlbmQpO1xuXG4gICAgY29uc3QgdFNoYXJlZFJvdyA9IERhdGFSb3cuY3JlYXRlU2hhcmVkUm93KHNoYXJlZFJvdyk7XG5cbiAgICBjb25zdCBvdXQ6IFRbXSA9IFtdO1xuICAgIGZvciAobGV0IHJvd0luZGV4ID0gc3RhcnQ7IHJvd0luZGV4IDwgZW5kUm93OyArK3Jvd0luZGV4KSB7XG4gICAgICBjb25zdCByb3cgPSB0aGlzLnJvdyhyb3dJbmRleCwgdFNoYXJlZFJvdyk7XG4gICAgICBvdXQucHVzaChmdW5jKHJvdywgcm93SW5kZXgpKTtcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIG1hcEluZGV4PFQ+KFxuICAgIGZ1bmM6ICh7aW5kZXh9OiB7aW5kZXg6IG51bWJlcn0sIGRjOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlKSA9PiBULFxuICAgIG9wdGlvbnM6IFJhbmdlT3B0aW9ucyA9IHt9XG4gICk6IFRbXSB7XG4gICAgY29uc3Qge3N0YXJ0ID0gMCwgZW5kID0gdGhpcy5udW1Sb3dzKCl9ID0gb3B0aW9ucztcbiAgICBjb25zdCBlbmRSb3cgPSBNYXRoLm1pbih0aGlzLm51bVJvd3MoKSwgZW5kKTtcblxuICAgIGNvbnN0IG91dDogVFtdID0gW107XG4gICAgZm9yIChsZXQgcm93SW5kZXggPSBzdGFydDsgcm93SW5kZXggPCBlbmRSb3c7ICsrcm93SW5kZXgpIHtcbiAgICAgIG91dC5wdXNoKGZ1bmMoe2luZGV4OiB0aGlzLl9tYXBwZWRSb3dJbmRleChyb3dJbmRleCl9LCB0aGlzLl9wYXJlbnREYXRhQ29udGFpbmVyKSk7XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICBmaW5kKFxuICAgIGZ1bmM6IChyb3c6IERhdGFSb3csIGluZGV4OiBudW1iZXIpID0+IGJvb2xlYW4sXG4gICAgc2hhcmVkUm93PzogU2hhcmVkUm93T3B0aW9uc1xuICApOiBEYXRhUm93IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCB0U2hhcmVkUm93ID0gRGF0YVJvdy5jcmVhdGVTaGFyZWRSb3coc2hhcmVkUm93KTtcblxuICAgIGZvciAobGV0IHJvd0luZGV4ID0gMDsgcm93SW5kZXggPCB0aGlzLm51bVJvd3MoKTsgKytyb3dJbmRleCkge1xuICAgICAgY29uc3Qgcm93ID0gdGhpcy5yb3cocm93SW5kZXgsIHRTaGFyZWRSb3cpO1xuICAgICAgaWYgKGZ1bmMocm93LCByb3dJbmRleCkpIHtcbiAgICAgICAgcmV0dXJuIHJvdztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJlZHVjZTxUPihcbiAgICBmdW5jOiAoYWNjOiBULCByb3c6IERhdGFSb3csIGluZGV4OiBudW1iZXIpID0+IFQsXG4gICAgaW5pdGlhbFZhbHVlOiBULFxuICAgIHNoYXJlZFJvdz86IFNoYXJlZFJvd09wdGlvbnNcbiAgKTogVCB7XG4gICAgY29uc3QgdFNoYXJlZFJvdyA9IERhdGFSb3cuY3JlYXRlU2hhcmVkUm93KHNoYXJlZFJvdyk7XG5cbiAgICBmb3IgKGxldCByb3dJbmRleCA9IDA7IHJvd0luZGV4IDwgdGhpcy5faW5kaWNlcy5sZW5ndGg7ICsrcm93SW5kZXgpIHtcbiAgICAgIGNvbnN0IHJvdyA9IHRoaXMucm93KHJvd0luZGV4LCB0U2hhcmVkUm93KTtcbiAgICAgIGluaXRpYWxWYWx1ZSA9IGZ1bmMoaW5pdGlhbFZhbHVlLCByb3csIHJvd0luZGV4KTtcbiAgICB9XG4gICAgcmV0dXJuIGluaXRpYWxWYWx1ZTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUlBLElBQUFBLFFBQUEsR0FBQUMsT0FBQTtBQUFxRCxJQUFBQyxPQUFBLGdCQUFBQyxZQUFBLFlBQUFDLElBQUEsQ0FRM0NDLFlBQVk7RUFBQUMsUUFBQSxnQkFBQUgsWUFBQSxZQUFBQyxJQUFBLENBa0JaRyxjQUFjLEdBOUJ4QjtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBVUYsWUFBWUEsQ0FDcEJHLGFBQXFDLEVBQ3JDQyxPQUFpQixFQUNqQkMsU0FBMkI7RUFBQSxJQUFBQyxPQUFBLEVBQUFDLFFBQUEsRUFBQUMsY0FBQTtFQUFBLE9BQUFWLFlBQUEsWUFBQVcsSUFBQSxVQUFBQyxjQUFBQyxRQUFBO0lBQUEsa0JBQUFBLFFBQUEsQ0FBQUMsSUFBQSxHQUFBRCxRQUFBLENBQUFFLElBQUE7TUFBQTtRQUVyQlAsT0FBTyxHQUFHRixPQUFPLENBQUNVLE1BQU07UUFDckJQLFFBQVEsR0FBRyxDQUFDO01BQUE7UUFBQSxNQUFFQSxRQUFRLEdBQUdELE9BQU87VUFBQUssUUFBQSxDQUFBRSxJQUFBO1VBQUE7UUFBQTtRQUNqQ0wsY0FBYyxHQUFHSixPQUFPLENBQUNHLFFBQVEsQ0FBQztRQUFBSSxRQUFBLENBQUFFLElBQUE7UUFDeEMsT0FBTVYsYUFBYSxDQUFDWSxHQUFHLENBQUNQLGNBQWMsRUFBRUgsU0FBUyxDQUFDO01BQUE7UUFGVCxFQUFFRSxRQUFRO1FBQUFJLFFBQUEsQ0FBQUUsSUFBQTtRQUFBO01BQUE7TUFBQTtRQUFBLE9BQUFGLFFBQUEsQ0FBQUssSUFBQTtJQUFBO0VBQUEsR0FBQW5CLE9BQUE7QUFBQTs7QUFNdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBVUssY0FBY0EsQ0FDdEJDLGFBQXFDLEVBQ3JDQyxPQUFpQixFQUNqQmEsV0FBbUI7RUFBQSxJQUFBWCxPQUFBLEVBQUFDLFFBQUEsRUFBQUMsY0FBQTtFQUFBLE9BQUFWLFlBQUEsWUFBQVcsSUFBQSxVQUFBUyxnQkFBQUMsU0FBQTtJQUFBLGtCQUFBQSxTQUFBLENBQUFQLElBQUEsR0FBQU8sU0FBQSxDQUFBTixJQUFBO01BQUE7UUFFYlAsT0FBTyxHQUFHRixPQUFPLENBQUNVLE1BQU07UUFDckJQLFFBQVEsR0FBRyxDQUFDO01BQUE7UUFBQSxNQUFFQSxRQUFRLEdBQUdELE9BQU87VUFBQWEsU0FBQSxDQUFBTixJQUFBO1VBQUE7UUFBQTtRQUNqQ0wsY0FBYyxHQUFHSixPQUFPLENBQUNHLFFBQVEsQ0FBQztRQUFBWSxTQUFBLENBQUFOLElBQUE7UUFDeEMsT0FBTVYsYUFBYSxDQUFDaUIsT0FBTyxDQUFDWixjQUFjLEVBQUVTLFdBQVcsQ0FBQztNQUFBO1FBRmYsRUFBRVYsUUFBUTtRQUFBWSxTQUFBLENBQUFOLElBQUE7UUFBQTtNQUFBO01BQUE7UUFBQSxPQUFBTSxTQUFBLENBQUFILElBQUE7SUFBQTtFQUFBLEdBQUFmLFFBQUE7QUFBQTs7QUFNdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEEsSUFNYW9CLG9CQUFvQixHQUFBQyxPQUFBLENBQUFELG9CQUFBO0VBSS9CLFNBQUFBLHFCQUFZRSxtQkFBMkMsRUFBRW5CLE9BQWlCLEVBQUU7SUFBQSxJQUFBb0IsZ0JBQUEsbUJBQUFILG9CQUFBO0lBQUEsSUFBQUksZ0JBQUE7SUFBQSxJQUFBQSxnQkFBQTtJQUMxRSxJQUFJLENBQUNDLG9CQUFvQixHQUFHSCxtQkFBbUI7SUFDL0MsSUFBSSxDQUFDSSxRQUFRLEdBQUd2QixPQUFPO0VBQ3pCO0VBQUMsV0FBQXdCLGFBQUEsYUFBQVAsb0JBQUE7SUFBQVEsR0FBQTtJQUFBQyxLQUFBLEVBRUQsU0FBQXhCLE9BQU9BLENBQUEsRUFBVztNQUNoQixPQUFPLElBQUksQ0FBQ3FCLFFBQVEsQ0FBQ2IsTUFBTTtJQUM3QjtFQUFDO0lBQUFlLEdBQUE7SUFBQUMsS0FBQSxFQUVELFNBQUFDLFVBQVVBLENBQUEsRUFBVztNQUNuQixPQUFPLElBQUksQ0FBQ0wsb0JBQW9CLENBQUNLLFVBQVUsQ0FBQyxDQUFDO0lBQy9DOztJQUVBO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7RUFKRTtJQUFBRixHQUFBO0lBQUFDLEtBQUEsRUFLQSxTQUFBRSxlQUFlQSxDQUFDekIsUUFBZ0IsRUFBVTtNQUN4QyxPQUFPLElBQUksQ0FBQ29CLFFBQVEsQ0FBQ3BCLFFBQVEsQ0FBQztJQUNoQztFQUFDO0lBQUFzQixHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFBVixPQUFPQSxDQUFDYixRQUFnQixFQUFFVSxXQUFtQixFQUFPO01BQ2xELE9BQU8sSUFBSSxDQUFDUyxvQkFBb0IsQ0FBQ04sT0FBTyxDQUFDLElBQUksQ0FBQ1ksZUFBZSxDQUFDekIsUUFBUSxDQUFDLEVBQUVVLFdBQVcsQ0FBQztJQUN2RjtFQUFDO0lBQUFZLEdBQUE7SUFBQUMsS0FBQSxFQUVELFNBQUFmLEdBQUdBLENBQUNSLFFBQWdCLEVBQUVGLFNBQTRCLEVBQVc7TUFDM0QsT0FBTyxJQUFJLENBQUNxQixvQkFBb0IsQ0FBQ1gsR0FBRyxDQUFDLElBQUksQ0FBQ2lCLGVBQWUsQ0FBQ3pCLFFBQVEsQ0FBQyxFQUFFRixTQUFTLENBQUM7SUFDakY7RUFBQztJQUFBd0IsR0FBQTtJQUFBQyxLQUFBLEVBRUQsU0FBQUcsVUFBVUEsQ0FBQzFCLFFBQWdCLEVBQVM7TUFDbEMsT0FBTyxJQUFJLENBQUNtQixvQkFBb0IsQ0FBQ08sVUFBVSxDQUFDLElBQUksQ0FBQ0QsZUFBZSxDQUFDekIsUUFBUSxDQUFDLENBQUM7SUFDN0U7RUFBQztJQUFBc0IsR0FBQTtJQUFBQyxLQUFBLEVBRUQsU0FBQUksSUFBSUEsQ0FBQzdCLFNBQTRCLEVBQUU7TUFDakMsT0FBT0wsWUFBWSxDQUFDLElBQUksQ0FBQzBCLG9CQUFvQixFQUFFLElBQUksQ0FBQ0MsUUFBUSxFQUFFdEIsU0FBUyxDQUFDO0lBQzFFO0VBQUM7SUFBQXdCLEdBQUE7SUFBQUMsS0FBQSxFQUVELFNBQUFLLE1BQU1BLENBQUNsQixXQUFtQixFQUFFO01BQzFCLE9BQU9mLGNBQWMsQ0FBQyxJQUFJLENBQUN3QixvQkFBb0IsRUFBRSxJQUFJLENBQUNDLFFBQVEsRUFBRVYsV0FBVyxDQUFDO0lBQzlFO0VBQUM7SUFBQVksR0FBQTtJQUFBQyxLQUFBLEVBRUQsU0FBQU0sYUFBYUEsQ0FBQSxFQUFhO01BQ3hCLE9BQU8sSUFBSSxDQUFDVCxRQUFRLENBQUNVLEdBQUcsQ0FBQyxVQUFDQyxDQUFDLEVBQUVDLENBQUM7UUFBQSxPQUFLQSxDQUFDO01BQUEsRUFBQztJQUN2QztFQUFDO0lBQUFWLEdBQUE7SUFBQUMsS0FBQSxFQUVELFNBQUFVLFdBQVdBLENBQUEsRUFBWTtNQUFBLElBQUFDLEtBQUE7TUFDckIsSUFBTUMsVUFBVSxHQUFHQyxnQkFBTyxDQUFDQyxlQUFlLENBQUMsSUFBSSxDQUFDO01BRWhELE9BQU8sSUFBSSxDQUFDakIsUUFBUSxDQUFDVSxHQUFHLENBQUMsVUFBQ0MsQ0FBQyxFQUFFQyxDQUFDLEVBQUs7UUFDakMsT0FBT0UsS0FBSSxDQUFDMUIsR0FBRyxDQUFDd0IsQ0FBQyxFQUFFRyxVQUFVLENBQUMsQ0FBQ0csTUFBTSxDQUFDLENBQUM7TUFDekMsQ0FBQyxFQUFFLElBQUksQ0FBQztJQUNWO0VBQUM7SUFBQWhCLEdBQUE7SUFBQUMsS0FBQSxFQUVELFNBQUFPLEdBQUdBLENBQ0RTLElBQXdDLEVBQ3hDekMsU0FBNEIsRUFFdkI7TUFBQSxJQURMMEMsT0FBcUIsR0FBQUMsU0FBQSxDQUFBbEMsTUFBQSxRQUFBa0MsU0FBQSxRQUFBQyxTQUFBLEdBQUFELFNBQUEsTUFBRyxDQUFDLENBQUM7TUFFMUIsSUFBQUUsY0FBQSxHQUEwQ0gsT0FBTyxDQUExQ0ksS0FBSztRQUFMQSxLQUFLLEdBQUFELGNBQUEsY0FBRyxDQUFDLEdBQUFBLGNBQUE7UUFBQUUsWUFBQSxHQUEwQkwsT0FBTyxDQUEvQk0sR0FBRztRQUFIQSxHQUFHLEdBQUFELFlBQUEsY0FBRyxJQUFJLENBQUM5QyxPQUFPLENBQUMsQ0FBQyxHQUFBOEMsWUFBQTtNQUN0QyxJQUFNRSxNQUFNLEdBQUdDLElBQUksQ0FBQ0MsR0FBRyxDQUFDLElBQUksQ0FBQ2xELE9BQU8sQ0FBQyxDQUFDLEVBQUUrQyxHQUFHLENBQUM7TUFFNUMsSUFBTVgsVUFBVSxHQUFHQyxnQkFBTyxDQUFDQyxlQUFlLENBQUN2QyxTQUFTLENBQUM7TUFFckQsSUFBTW9ELEdBQVEsR0FBRyxFQUFFO01BQ25CLEtBQUssSUFBSWxELFFBQVEsR0FBRzRDLEtBQUssRUFBRTVDLFFBQVEsR0FBRytDLE1BQU0sRUFBRSxFQUFFL0MsUUFBUSxFQUFFO1FBQ3hELElBQU1RLEdBQUcsR0FBRyxJQUFJLENBQUNBLEdBQUcsQ0FBQ1IsUUFBUSxFQUFFbUMsVUFBVSxDQUFDO1FBQzFDZSxHQUFHLENBQUNDLElBQUksQ0FBQ1osSUFBSSxDQUFDL0IsR0FBRyxFQUFFUixRQUFRLENBQUMsQ0FBQztNQUMvQjtNQUNBLE9BQU9rRCxHQUFHO0lBQ1o7RUFBQztJQUFBNUIsR0FBQTtJQUFBQyxLQUFBLEVBRUQsU0FBQTZCLFFBQVFBLENBQ05iLElBQWlFLEVBRTVEO01BQUEsSUFETEMsT0FBcUIsR0FBQUMsU0FBQSxDQUFBbEMsTUFBQSxRQUFBa0MsU0FBQSxRQUFBQyxTQUFBLEdBQUFELFNBQUEsTUFBRyxDQUFDLENBQUM7TUFFMUIsSUFBQVksZUFBQSxHQUEwQ2IsT0FBTyxDQUExQ0ksS0FBSztRQUFMQSxLQUFLLEdBQUFTLGVBQUEsY0FBRyxDQUFDLEdBQUFBLGVBQUE7UUFBQUMsYUFBQSxHQUEwQmQsT0FBTyxDQUEvQk0sR0FBRztRQUFIQSxHQUFHLEdBQUFRLGFBQUEsY0FBRyxJQUFJLENBQUN2RCxPQUFPLENBQUMsQ0FBQyxHQUFBdUQsYUFBQTtNQUN0QyxJQUFNUCxNQUFNLEdBQUdDLElBQUksQ0FBQ0MsR0FBRyxDQUFDLElBQUksQ0FBQ2xELE9BQU8sQ0FBQyxDQUFDLEVBQUUrQyxHQUFHLENBQUM7TUFFNUMsSUFBTUksR0FBUSxHQUFHLEVBQUU7TUFDbkIsS0FBSyxJQUFJbEQsUUFBUSxHQUFHNEMsS0FBSyxFQUFFNUMsUUFBUSxHQUFHK0MsTUFBTSxFQUFFLEVBQUUvQyxRQUFRLEVBQUU7UUFDeERrRCxHQUFHLENBQUNDLElBQUksQ0FBQ1osSUFBSSxDQUFDO1VBQUNnQixLQUFLLEVBQUUsSUFBSSxDQUFDOUIsZUFBZSxDQUFDekIsUUFBUTtRQUFDLENBQUMsRUFBRSxJQUFJLENBQUNtQixvQkFBb0IsQ0FBQyxDQUFDO01BQ3BGO01BQ0EsT0FBTytCLEdBQUc7SUFDWjtFQUFDO0lBQUE1QixHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFBaUMsSUFBSUEsQ0FDRmpCLElBQThDLEVBQzlDekMsU0FBNEIsRUFDUDtNQUNyQixJQUFNcUMsVUFBVSxHQUFHQyxnQkFBTyxDQUFDQyxlQUFlLENBQUN2QyxTQUFTLENBQUM7TUFFckQsS0FBSyxJQUFJRSxRQUFRLEdBQUcsQ0FBQyxFQUFFQSxRQUFRLEdBQUcsSUFBSSxDQUFDRCxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUVDLFFBQVEsRUFBRTtRQUM1RCxJQUFNUSxHQUFHLEdBQUcsSUFBSSxDQUFDQSxHQUFHLENBQUNSLFFBQVEsRUFBRW1DLFVBQVUsQ0FBQztRQUMxQyxJQUFJSSxJQUFJLENBQUMvQixHQUFHLEVBQUVSLFFBQVEsQ0FBQyxFQUFFO1VBQ3ZCLE9BQU9RLEdBQUc7UUFDWjtNQUNGO01BQ0EsT0FBT2tDLFNBQVM7SUFDbEI7RUFBQztJQUFBcEIsR0FBQTtJQUFBQyxLQUFBLEVBRUQsU0FBQWtDLE1BQU1BLENBQ0psQixJQUFnRCxFQUNoRG1CLFlBQWUsRUFDZjVELFNBQTRCLEVBQ3pCO01BQ0gsSUFBTXFDLFVBQVUsR0FBR0MsZ0JBQU8sQ0FBQ0MsZUFBZSxDQUFDdkMsU0FBUyxDQUFDO01BRXJELEtBQUssSUFBSUUsUUFBUSxHQUFHLENBQUMsRUFBRUEsUUFBUSxHQUFHLElBQUksQ0FBQ29CLFFBQVEsQ0FBQ2IsTUFBTSxFQUFFLEVBQUVQLFFBQVEsRUFBRTtRQUNsRSxJQUFNUSxHQUFHLEdBQUcsSUFBSSxDQUFDQSxHQUFHLENBQUNSLFFBQVEsRUFBRW1DLFVBQVUsQ0FBQztRQUMxQ3VCLFlBQVksR0FBR25CLElBQUksQ0FBQ21CLFlBQVksRUFBRWxELEdBQUcsRUFBRVIsUUFBUSxDQUFDO01BQ2xEO01BQ0EsT0FBTzBELFlBQVk7SUFDckI7RUFBQztBQUFBIiwiaWdub3JlTGlzdCI6W119
@@ -11,7 +11,7 @@ export declare function isStyleUsingOpenStreetMapTiles(mapStyle: any): boolean;
11
11
  * @param mapboxKey mapbox api key
12
12
  * @returns transformed url
13
13
  */
14
- export declare const transformRequest: (mapboxKey: string) => (url: string, resourceType: string) => {
14
+ export declare const transformRequest: (_mapboxKey: string) => (url: string, resourceType: string) => {
15
15
  url: string;
16
16
  };
17
17
  export declare const getBaseMapLibrary: (baseMapStyle?: {