@carto/kepler.gl 0.0.71-alpha.5 → 0.0.71-alpha.6
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.
|
@@ -136,7 +136,7 @@ var KEPLER_GL_NAME = 'kepler.gl'; // __PACKAGE_VERSION__ is automatically inject
|
|
|
136
136
|
// an empty string which will allow us to retrieve the latest umd version
|
|
137
137
|
|
|
138
138
|
exports.KEPLER_GL_NAME = KEPLER_GL_NAME;
|
|
139
|
-
var KEPLER_GL_VERSION = "0.0.71-alpha.
|
|
139
|
+
var KEPLER_GL_VERSION = "0.0.71-alpha.6";
|
|
140
140
|
exports.KEPLER_GL_VERSION = KEPLER_GL_VERSION;
|
|
141
141
|
var KEPLER_GL_WEBSITE = 'http://kepler.gl/';
|
|
142
142
|
exports.KEPLER_GL_WEBSITE = KEPLER_GL_WEBSITE;
|
|
@@ -1432,7 +1432,7 @@ var Layer = /*#__PURE__*/function () {
|
|
|
1432
1432
|
var colors = dataset.getColumnLayerDomain(dataSetField, _defaultSettings.SCALE_TYPES.ordinal);
|
|
1433
1433
|
|
|
1434
1434
|
_this8.updateLayerVisConfig((0, _defineProperty2["default"])({}, channel.range, _objectSpread(_objectSpread({}, channelConfig), {}, {
|
|
1435
|
-
colors: colors
|
|
1435
|
+
colors: colors.slice(0, 20)
|
|
1436
1436
|
})));
|
|
1437
1437
|
}
|
|
1438
1438
|
});
|
|
@@ -1824,4 +1824,4 @@ var Layer = /*#__PURE__*/function () {
|
|
|
1824
1824
|
|
|
1825
1825
|
var _default = Layer;
|
|
1826
1826
|
exports["default"] = _default;
|
|
1827
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sYXllcnMvYmFzZS1sYXllci5qcyJdLCJuYW1lcyI6WyJnZW5lcmF0ZUNvbG9yIiwiTEFZRVJfSURfTEVOR1RIIiwiRkFMTEJBQ0tfSUNPTiIsIk1BWF9TQU1QTEVfU0laRSIsImRlZmF1bHREb21haW4iLCJkYXRhRmlsdGVyRXh0ZW5zaW9uIiwiRGF0YUZpbHRlckV4dGVuc2lvbiIsImZpbHRlclNpemUiLCJNQVhfR1BVX0ZJTFRFUlMiLCJjb2xsaXNpb25GaWx0ZXJFeHRlbnNpb24iLCJDb2xsaXNpb25GaWx0ZXJFeHRlbnNpb24iLCJkZWZhdWx0RGF0YUFjY2Vzc29yIiwiZGMiLCJkIiwiZGVmYXVsdEdldEZpZWxkVmFsdWUiLCJmaWVsZCIsInZhbHVlQWNjZXNzb3IiLCJzY2FsZUlkZW50aXR5IiwidiIsIk9WRVJMQVlfVFlQRSIsImRlY2tnbCIsIm1hcGJveGdsIiwibGF5ZXJDb2xvcnMiLCJPYmplY3QiLCJ2YWx1ZXMiLCJEYXRhVml6Q29sb3JzIiwibWFwIiwiaGV4VG9SZ2IiLCJpbmRleCIsImxlbmd0aCIsImNvbG9yTWFrZXIiLCJMYXllciIsInByb3BzIiwiaWQiLCJtZXRhIiwibGVnZW5kU2V0dGluZ3MiLCJ2aXNDb25maWdTZXR0aW5ncyIsIl9pbnRlcmFjdGl2aXR5U2V0dGluZ3MiLCJjb25maWciLCJnZXREZWZhdWx0TGF5ZXJDb25maWciLCJjb2x1bW5zIiwiZ2V0TGF5ZXJDb2x1bW5zIiwiRGVmYXVsdExheWVySWNvbiIsInR5cGUiLCJjb2xvciIsInByb3BlcnR5Iiwic2NhbGUiLCJkb21haW4iLCJyYW5nZSIsImtleSIsImNoYW5uZWxTY2FsZVR5cGUiLCJDSEFOTkVMX1NDQUxFUyIsIm51bGxWYWx1ZSIsIk5PX1ZBTFVFX0NPTE9SIiwiZGVmYXVsdFZhbHVlIiwic2l6ZSIsImxhdCIsInBhaXIiLCJmaWVsZFBhaXJLZXkiLCJsbmciLCJsYXQwIiwibG5nMCIsImxhdDEiLCJsbmcxIiwiaW50ZXJhY3Rpdml0eVNldHRpbmdzIiwiQm9vbGVhbiIsImhvdmVyIiwiZmllbGRzIiwiY2xpY2siLCJoYXNUb29sdGlwIiwiZW5hYmxlZCIsImRhdGFJZCIsInZpc2liaWxpdHlCeVpvb20iLCJtaW4iLCJaT09NX0xFVkVMX0xJTUlUUyIsIm1heCIsImxhYmVsIiwiREVGQVVMVF9MQVlFUl9MQUJFTCIsIm5leHQiLCJ2YWx1ZSIsImlzVmlzaWJsZSIsImlzQ29uZmlnQWN0aXZlIiwiaGlnaGxpZ2h0Q29sb3IiLCJERUZBVUxUX0hJR0hMSUdIVF9DT0xPUiIsImhpZGRlbiIsImNvbG9yRmllbGQiLCJjb2xvckRvbWFpbiIsImNvbG9yU2NhbGUiLCJTQ0FMRV9UWVBFUyIsInF1YW50aWxlIiwic2l6ZURvbWFpbiIsInNpemVTY2FsZSIsImxpbmVhciIsInNpemVGaWVsZCIsInJhZGl1c0ZpZWxkIiwidmlzQ29uZmlnIiwidGV4dExhYmVsIiwiREVGQVVMVF9URVhUX0xBQkVMIiwiY29sb3JVSSIsIkRFRkFVTFRfQ09MT1JfVUkiLCJjb2xvclJhbmdlIiwiYW5pbWF0aW9uIiwidmlzdWFsQ2hhbm5lbHMiLCJtZWFzdXJlIiwiZGlzcGxheU5hbWUiLCJuYW1lIiwiZGVmYXVsdE1lYXN1cmUiLCJ1cGRhdGUiLCJmaWVsZElkeCIsImNvbHVtblBhaXJzIiwicGFydG5lcktleSIsInBhcnRuZXJGaWVsZFBhaXJLZXkiLCJ6b29tIiwiem9vbU9mZnNldCIsIk1hdGgiLCJwb3ciLCJlbmFibGVFbGV2YXRpb25ab29tRmFjdG9yIiwiZGF0YXNldHMiLCJmaWx0ZXJlZEluZGV4Iiwib2JqZWN0IiwiZGF0YUNvbnRhaW5lciIsInJvdyIsImNvbmZpZ1RvQ29weSIsInNoYWxsb3dDb3B5IiwiY29uY2F0Iiwibm90VG9Db3B5IiwiZm9yRWFjaCIsImdyb3VwIiwicHVzaCIsImN1cnJlbnRDb25maWciLCJjb3BpZWQiLCJjb3B5TGF5ZXJDb25maWciLCJ1cGRhdGVMYXllckNvbmZpZyIsImtleXMiLCJjaGFubmVsIiwidmFsaWRhdGVWaXN1YWxDaGFubmVsIiwiaW5jbHVkZXMiLCJsYXllclZpc0NvbmZpZ3MiLCJpdGVtIiwiTEFZRVJfVklTX0NPTkZJR1MiLCJldmVyeSIsInAiLCJoYXNPd25Qcm9wZXJ0eSIsImNvbHVtblZhbGlkYXRvcnMiLCJyZXF1aXJlZCIsInJlcXVpcmVkTGF5ZXJDb2x1bW5zIiwicmVkdWNlIiwiYWNjdSIsInZhbGlkYXRvciIsIm9wdGlvbmFsIiwib3B0aW9uYWxDb2x1bW5zIiwibmV3Q29uZmlnIiwibmV3VmlzQ29uZmlnIiwicHJvcCIsInByZXZpb3VzIiwiY29sb3JVSVByb3AiLCJlbnRyaWVzIiwiaXNDb2xvclJhbmdlIiwiY29sb3JzIiwiaGV4Q29sb3IiLCJ1cGRhdGVDb2xvclVJQnlDb2xvclJhbmdlIiwidXBkYXRlQ29sb3JSYW5nZUJ5Q29sb3JVSSIsInVwZGF0ZUN1c3RvbVBhbGV0dGUiLCJjb2xvclJhbmdlQ29uZmlnIiwiY3VzdG9tIiwiY3VzdG9tUGFsZXR0ZSIsInNob3dEcm9wZG93biIsInN0ZXBzIiwicmV2ZXJzZWQiLCJoZXhDb2x1bW4iLCJnZXRIZXhDb2x1bW4iLCJpc0hleENvbHVtbiIsImlzQ29sb3JlZEJ5Q29sb3JDb2x1bW4iLCJzaG91bGRVcGRhdGUiLCJzb21lIiwic2FtZUdyb3VwIiwiQ09MT1JfUkFOR0VTIiwiZmlsdGVyIiwiY3IiLCJmaW5kIiwiY29sb3JNYXAiLCJ1cGRhdGVDb2xvck1hcCIsInVwZGF0ZUxheWVyVmlzQ29uZmlnIiwidXBkYXRlQ2F0ZWdvcnlDb2xvck1hcCIsInVwZGF0ZU51bWVyaWNDb2xvck1hcCIsImFzc2lnbmVkQ2F0ZWdvcmllcyIsIm5ld0NvbG9yTWFwIiwic2xpY2UiLCJjTWFwIiwidW5hc3NpZ25lZENvbG9ycyIsImNhdGVnb3J5IiwiY29sb3JNYXBWYWx1ZXMiLCJjIiwibWF4VmFsdWUiLCJwcmV2VmFsdWUiLCJzdGVwIiwiaSIsImxheWVyRGF0YSIsImRhdGEiLCJoYXNBbGxDb2x1bW5zIiwiaGFzTGF5ZXJEYXRhIiwicmVuZGVyTGF5ZXIiLCJfIiwiQXJyYXkiLCJpc0FycmF5IiwiTWFwIiwiayIsInNldCIsIlNDQUxFX0ZVTkMiLCJmcm9tIiwidW5rbm93biIsIlVOS05PV05fQ09MT1IiLCJnZXRWaXNDaGFubmVsU2NhbGUiLCJmYWxsYmFja0ljb24iLCJ1bmtub3duVmFsdWUiLCJtYXBwaW5nIiwib3RoZXJzTWFya2VyIiwibWFya2VyTWFwIiwibWFya2VyVXJsIiwiZGF0YUFjY2Vzc29yIiwiYXR0cmlidXRlQWNjZXNzb3JzIiwiZml4ZWQiLCJhY2Nlc3NvciIsImdldEF0dHJpYnV0ZVZhbHVlIiwiYWdncmVnYXRpb24iLCJzaG91bGRHZXRTY2FsZSIsImlkZW50aXR5IiwiYXJncyIsImlzRml4ZWQiLCJmaWVsZENvbmZpZyIsImFnZ3JlZ2F0aW9uVmFsdWUiLCJzY2FsZUZ1bmN0aW9uIiwiZ2V0Q29sb3JTY2FsZSIsImN1c3RvbU1hcmtlciIsImdldEN1c3RvbU1hcmtlcnNTY2FsZSIsImN1c3RvbU1hcmtlcnNVcmwiLCJnZXRFbmNvZGVkQ2hhbm5lbFZhbHVlIiwiX2FnZ3JlZ2F0aW9uIiwiQ29uc29sZSIsIndhcm4iLCJvcmRpbmFsIiwiZG9tYWluSXNJbmZpbml0ZSIsIkluZmluaXR5Iiwic2NhbGVGYWN0b3J5IiwicmVzdWx0IiwiZ2V0UG9zaXRpb24iLCJzYW1wbGVEYXRhIiwibnVtUm93cyIsInBvaW50cyIsIm1hcEluZGV4IiwibGF0Qm91bmRzIiwibG5nQm91bmRzIiwiZGF0YVVwZGF0ZVRyaWdnZXJzIiwidHJpZ2dlckNoYW5nZWQiLCJfb2xkRGF0YVVwZGF0ZVRyaWdnZXJzIiwiZ2V0VmFsdWUiLCJjb2xvckNvbHVtblZhbHVlIiwiY2hhbm5lbENvbmZpZyIsImNoYW5uZWxGaWVsZCIsImNvbHVtbkZpZWxkIiwiY29sb3JDb2x1bW4iLCJjb2xvckNvbHVtbklkeCIsInZhbHVlQXQiLCJhdHRyaWJ1dGVWYWx1ZSIsIkFMTF9GSUVMRF9UWVBFUyIsInRpbWVzdGFtcCIsIkRhdGUiLCJzZXR0aW5ncyIsImFsbERhdGEiLCJnZXREYXRhIiwiZGF0YXNldElkIiwiZ2V0TWV0YSIsInRsIiwib2xkTGF5ZXJEYXRhIiwiZGF0YXNldCIsImdldERhdGFzZXQiLCJ1cGRhdGVWaXN1YWxDaGFubmVsRmllbGRzIiwidXBkYXRlSGV4Q29sb3JEb21haW4iLCJnZXRQb3NpdGlvbkFjY2Vzc29yIiwiZ2V0RGF0YVVwZGF0ZVRyaWdnZXJzIiwiZ2V0Q2hhbmdlZFRyaWdnZXJzIiwidXBkYXRlTGF5ZXJNZXRhIiwiY2FsY3VsYXRlRGF0YUF0dHJpYnV0ZSIsIm9sZEZpZWxkIiwiaXNVc2luZ0hleENvbG9yQ29kZSIsIm5ld0RhdGFTZXRGaWVsZCIsImZkIiwibmV3RmlsdGVyIiwidGFibGUiLCJzY2FsZVR5cGUiLCJ1cGRhdGVkRG9tYWluIiwiY2FsY3VsYXRlTGF5ZXJEb21haW4iLCJ2YWxpZGF0ZUZpZWxkVHlwZSIsInZhbGlkYXRlU2NhbGUiLCJ2aXN1YWxDaGFubmVsIiwic3VwcG9ydGVkRmllbGRUeXBlcyIsImNoYW5uZWxTdXBwb3J0ZWRGaWVsZFR5cGVzIiwiQ0hBTk5FTF9TQ0FMRV9TVVBQT1JURURfRklFTERTIiwic2NhbGVPcHRpb25zIiwiZ2V0U2NhbGVPcHRpb25zIiwiRklFTERfT1BUUyIsInVwZGF0ZVRyaWdnZXJzIiwiZGF0YVNldEZpZWxkIiwiZiIsImdldENvbHVtbkxheWVyRG9tYWluIiwibGVnZW5kcyIsImxlZ2VuZCIsImNhbGN1bGF0ZUxlZ2VuZCIsInVwZGF0ZUxheWVyTGVnZW5kIiwib2JqZWN0SW5mbyIsImlzTGF5ZXJIb3ZlcmVkIiwicGlja2VkIiwibGF5ZXIiLCJtYXBTdGF0ZSIsInJhZGl1c0NoYW5uZWwiLCJ2YyIsInJhZGl1cyIsImdldFpvb21GYWN0b3IiLCJyYWRpdXNSYW5nZSIsImNlaWwiLCJub25lTGF5ZXJEYXRhQWZmZWN0aW5nUHJvcHMiLCJpbnRlcmFjdGlvbkNvbmZpZyIsImJydXNoaW5nVGFyZ2V0IiwiYnJ1c2giLCJhdXRvSGlnaGxpZ2h0IiwiYnJ1c2hpbmdSYWRpdXMiLCJicnVzaGluZ0VuYWJsZWQiLCJpZHgiLCJncHVGaWx0ZXIiLCJ2aXNpYmxlIiwibWFza1BvbHlnb24iLCJtYXNrRXh0ZW5zaW9uUHJvcHMiLCJjb29yZGluYXRlU3lzdGVtIiwiQ09PUkRJTkFURV9TWVNURU0iLCJMTkdMQVQiLCJwaWNrYWJsZSIsImhhc0ludGVyYWN0aXZpdHkiLCJ3cmFwTG9uZ2l0dWRlIiwicGFyYW1ldGVycyIsImRlcHRoVGVzdCIsImRyYWdSb3RhdGUiLCJlbmFibGUzZCIsIm9wYWNpdHkiLCJleHRlbnNpb25zIiwiZmlsdGVyUmFuZ2UiLCJ1bmRlZmluZWQiLCJyZW5kZXJPcHRzIiwiZ2V0UmFkaXVzIiwicmFkaXVzU2NhbGUiLCJzaGFyZWRQcm9wcyIsInRleHRMYWJlbHMiLCJnZXRUZXh0IiwibWFpbkxhYmVsIiwic2Vjb25kYXJ5TGFiZWwiLCJhbGlnbm1lbnQiLCJhbmNob3IiLCJnZXRDb2xvciIsIm1haW5GaWVsZCIsIm91dGxpbmVDb2xvciIsImdldFNlY29uZGFyeUNvbG9yIiwic2Vjb25kYXJ5RmllbGQiLCJzZWNvbmRhcnlPdXRsaW5lQ29sb3IiLCJzZWNvbmRhcnlTaXplU2NhbGUiLCJQb2ludExhYmVsTGF5ZXIiLCJjaGFyYWN0ZXJTZXQiLCJjb2xsaXNpb25FbmFibGVkIiwiY29sbGlzaW9uR3JvdXAiLCJnZXRTZWNvbmRhcnlUZXh0IiwiZ2V0VGV4dEFuY2hvciIsImdldEFsaWdubWVudEJhc2VsaW5lIiwiZm9udEZhbWlseSIsImZvbnRTZXR0aW5ncyIsInNkZiIsImZvbnRXZWlnaHQiLCJvdXRsaW5lV2lkdGgiLCJnZXRGaWx0ZXJWYWx1ZSIsImljb25VcmxBY2Nlc3NvciIsIm1hc2siLCJtYXhJY29uU2l6ZSIsImdldE1heE1hcmtlclNpemUiLCJ3YW50ZWRVcmwiLCJpY29uT2siLCJ1cmwiLCJ3aWR0aCIsImhlaWdodCIsImtlcGxlclRhYmxlIiwiZm91bmRMYXllcnMiLCJkZWZhdWx0RmllbGRzIiwiYWxsRmllbGRzIiwicmVxdWlyZWRDb2x1bW5zIiwicHJldiIsInJlcXVpcmVkRmllbGRzIiwiZ2V0QWxsUG9zc2libGVDb2x1bW5QYXJpcyIsImFsbEtleXMiLCJwb2ludGVycyIsImNvdW50UGVyS2V5IiwicGFpcnMiLCJpbmNyZW1lbnRQb2ludGVycyIsIm5ld1BhaXIiLCJjdXVyIiwicHRzIiwiY291bnRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9CQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFZQTs7QUFDQTs7QUFDQTs7QUFRQTs7QUFFQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7Ozs7O3dEQTZCVUEsYTs7QUEzQlY7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNQyxlQUFlLEdBQUcsQ0FBeEIsQyxDQUVQOzs7QUFDQSxJQUFNQyxhQUFhLEdBQ2pCLDBMQURGO0FBR0EsSUFBTUMsZUFBZSxHQUFHLElBQXhCO0FBQ0EsSUFBTUMsYUFBYSxHQUFHLENBQUMsQ0FBRCxFQUFJLENBQUosQ0FBdEI7QUFDQSxJQUFNQyxtQkFBbUIsR0FBRyxJQUFJQywrQkFBSixDQUF3QjtBQUFDQyxFQUFBQSxVQUFVLEVBQUVDO0FBQWIsQ0FBeEIsQ0FBNUI7QUFDQSxJQUFNQyx3QkFBd0IsR0FBRyxJQUFJQyxvQ0FBSixFQUFqQzs7QUFFQSxJQUFNQyxtQkFBbUIsR0FBRyxTQUF0QkEsbUJBQXNCLENBQUFDLEVBQUU7QUFBQSxTQUFJLFVBQUFDLENBQUM7QUFBQSxXQUFJQSxDQUFKO0FBQUEsR0FBTDtBQUFBLENBQTlCOztBQUNBLElBQU1DLG9CQUFvQixHQUFHLFNBQXZCQSxvQkFBdUIsQ0FBQ0MsS0FBRCxFQUFRRixDQUFSO0FBQUEsU0FBY0UsS0FBSyxDQUFDQyxhQUFOLENBQW9CSCxDQUFwQixDQUFkO0FBQUEsQ0FBN0I7O0FBQ0EsSUFBTUksYUFBYSxHQUFHLFNBQWhCQSxhQUFnQixDQUFBQyxDQUFDO0FBQUEsU0FBSUEsQ0FBSjtBQUFBLENBQXZCOztBQUVPLElBQU1DLFlBQVksR0FB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a0JBQWdCNU0sQ0FBaEIsRUFBbUI7QUFDakIsYUFBTywwQkFBU0EsQ0FBVCxDQUFQO0FBQ0Q7Ozs7O2VBNnJDWWpLLEsiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjIgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQge2NvbnNvbGUgYXMgQ29uc29sZX0gZnJvbSAnZ2xvYmFsL3dpbmRvdyc7XG5pbXBvcnQga2V5bWlycm9yIGZyb20gJ2tleW1pcnJvcic7XG5pbXBvcnQge0NvbGxpc2lvbkZpbHRlckV4dGVuc2lvbiwgRGF0YUZpbHRlckV4dGVuc2lvbn0gZnJvbSAnQGRlY2suZ2wvZXh0ZW5zaW9ucyc7XG5pbXBvcnQge0NPT1JESU5BVEVfU1lTVEVNLCBMYXllciBhcyBEZWNrTGF5ZXJ9IGZyb20gJ0BkZWNrLmdsL2NvcmUnO1xuaW1wb3J0IHtfUG9pbnRMYWJlbExheWVyIGFzIFBvaW50TGFiZWxMYXllcn0gZnJvbSAnQGRlY2suZ2wvY2FydG8nO1xuaW1wb3J0IERlZmF1bHRMYXllckljb24gZnJvbSAnLi9kZWZhdWx0LWxheWVyLWljb24nO1xuaW1wb3J0IHtkaWZmVXBkYXRlVHJpZ2dlcnN9IGZyb20gJy4vbGF5ZXItdXBkYXRlJztcblxuaW1wb3J0IHtcbiAgQUxMX0ZJRUxEX1RZUEVTLFxuICBOT19WQUxVRV9DT0xPUixcbiAgU0NBTEVfVFlQRVMsXG4gIENIQU5ORUxfU0NBTEVTLFxuICBGSUVMRF9PUFRTLFxuICBTQ0FMRV9GVU5DLFxuICBDSEFOTkVMX1NDQUxFX1NVUFBPUlRFRF9GSUVMRFMsXG4gIE1BWF9HUFVfRklMVEVSUyxcbiAgVU5LTk9XTl9DT0xPUixcbiAgWk9PTV9MRVZFTF9MSU1JVFNcbn0gZnJvbSAnY29uc3RhbnRzL2RlZmF1bHQtc2V0dGluZ3MnO1xuaW1wb3J0IHtDT0xPUl9SQU5HRVMsIGhleENvbG9yfSBmcm9tICdjb25zdGFudHMvY29sb3ItcmFuZ2VzJztcbmltcG9ydCB7RGF0YVZpekNvbG9yc30gZnJvbSAnY29uc3RhbnRzL2N1c3RvbS1jb2xvci1yYW5nZXMnO1xuaW1wb3J0IHtcbiAgTEFZRVJfVklTX0NPTkZJR1MsXG4gIERFRkFVTFRfVEVYVF9MQUJFTCxcbiAgREVGQVVMVF9DT0xPUl9VSSxcbiAgREVGQVVMVF9ISUdITElHSFRfQ09MT1IsXG4gIERFRkFVTFRfTEFZRVJfTEFCRUxcbn0gZnJvbSAnLi9sYXllci1mYWN0b3J5JztcblxuaW1wb3J0IHtnZW5lcmF0ZUhhc2hJZCwgaXNQbGFpbk9iamVjdH0gZnJvbSAndXRpbHMvdXRpbHMnO1xuXG5pbXBvcnQge2dldExhdExuZ0JvdW5kcywgbm90TnVsbG9yVW5kZWZpbmVkfSBmcm9tICd1dGlscy9kYXRhLXV0aWxzJztcbmltcG9ydCB7Z2V0U2FtcGxlRGF0YX0gZnJvbSAndXRpbHMvdGFibGUtdXRpbHMvZGF0YS1jb250YWluZXItdXRpbHMnO1xuXG5pbXBvcnQge2hleFRvUmdiLCBnZXRDb2xvckdyb3VwQnlOYW1lLCByZXZlcnNlQ29sb3JSYW5nZX0gZnJvbSAndXRpbHMvY29sb3ItdXRpbHMnO1xuaW1wb3J0IHtnZXRNYXNrRXh0ZW5zaW9uUHJvcHN9IGZyb20gJ3V0aWxzL2xheWVyLXV0aWxzJztcbmltcG9ydCB7c2NhbGVPcmRpbmFsfSBmcm9tICdkMy1zY2FsZSc7XG5cbi8qKiBAdHlwZWRlZiB7aW1wb3J0KCcuL2luZGV4JykuTGF5ZXJ9IExheWVyQ2xhc3N9ICovXG5cbi8qKlxuICogQXBwcm94LiBudW1iZXIgb2YgcG9pbnRzIHRvIHNhbXBsZSBpbiBhIGxhcmdlIGRhdGEgc2V0XG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgTEFZRVJfSURfTEVOR1RIID0gNjtcblxuLy8gTm90ZSwgdGhpcyBpcyBpcyBTVkcgb2Ygc29saWQgY2lyY2xlIGVuY29kZWQgYXMgZGF0YS11cmlcbmNvbnN0IEZBTExCQUNLX0lDT04gPVxuICAnZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LFBITjJaeUIyYVdWM1FtOTRQU0l3SURBZ01UQXdJREV3TUNJZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWo0TkNpQWdQR05wY21Oc1pTQmplRDBpTlRBaUlHTjVQU0kxTUNJZ2NqMGlOVEFpTHo0TkNqd3ZjM1puUGc9PSc7XG5cbmNvbnN0IE1BWF9TQU1QTEVfU0laRSA9IDUwMDA7XG5jb25zdCBkZWZhdWx0RG9tYWluID0gWzAsIDFdO1xuY29uc3QgZGF0YUZpbHRlckV4dGVuc2lvbiA9IG5ldyBEYXRhRmlsdGVyRXh0ZW5zaW9uKHtmaWx0ZXJTaXplOiBNQVhfR1BVX0ZJTFRFUlN9KTtcbmNvbnN0IGNvbGxpc2lvbkZpbHRlckV4dGVuc2lvbiA9IG5ldyBDb2xsaXNpb25GaWx0ZXJFeHRlbnNpb24oKTtcblxuY29uc3QgZGVmYXVsdERhdGFBY2Nlc3NvciA9IGRjID0+IGQgPT4gZDtcbmNvbnN0IGRlZmF1bHRHZXRGaWVsZFZhbHVlID0gKGZpZWxkLCBkKSA9PiBmaWVsZC52YWx1ZUFjY2Vzc29yKGQpO1xuY29uc3Qgc2NhbGVJZGVudGl0eSA9IHYgPT4gdjtcblxuZXhwb3J0IGNvbnN0IE9WRVJMQVlfVFlQRSA9IGtleW1pcnJvcih7XG4gIGRlY2tnbDogbnVsbCxcbiAgbWFwYm94Z2w6IG51bGxcbn0pO1xuXG5leHBvcnQgY29uc3QgbGF5ZXJDb2xvcnMgPSBPYmplY3QudmFsdWVzKERhdGFWaXpDb2xvcnMpLm1hcChoZXhUb1JnYik7XG5mdW5jdGlvbiogZ2VuZXJhdGVDb2xvcigpIHtcbiAgbGV0IGluZGV4ID0gMDtcbiAgd2hpbGUgKGluZGV4IDwgbGF5ZXJDb2xvcnMubGVuZ3RoICsgMSkge1xuICAgIGlmIChpbmRleCA9PT0gbGF5ZXJDb2xvcnMubGVuZ3RoKSB7XG4gICAgICBpbmRleCA9IDA7XG4gICAgfVxuICAgIHlpZWxkIGxheWVyQ29sb3JzW2luZGV4KytdO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBjb2xvck1ha2VyID0gZ2VuZXJhdGVDb2xvcigpO1xuXG4vKiogQHR5cGUge0xheWVyQ2xhc3N9ICovXG5jbGFzcyBMYXllciB7XG4gIGNvbnN0cnVjdG9yKHByb3BzID0ge30pIHtcbiAgICB0aGlzLmlkID0gcHJvcHMuaWQgfHwgZ2VuZXJhdGVIYXNoSWQoTEFZRVJfSURfTEVOR1RIKTtcbiAgICAvLyBtZXRhXG4gICAgdGhpcy5tZXRhID0ge307XG5cbiAgICAvLyBsZWdlbmRTZXR0aW5nc1xuICAgIHRoaXMubGVnZW5kU2V0dGluZ3MgPSB7fTtcblxuICAgIC8vIHZpc0NvbmZpZ1NldHRpbmdzXG4gICAgdGhpcy52aXNDb25maWdTZXR0aW5ncyA9IHt9O1xuXG4gICAgLy8gaW50ZXJhY3Rpdml0eVNldHRpbmdzXG4gICAgdGhpcy5faW50ZXJhY3Rpdml0eVNldHRpbmdzID0ge307XG5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdGhpcy5jb25maWcgPSB0aGlzLmdldERlZmF1bHRMYXllckNvbmZpZyh7XG4gICAgICBjb2x1bW5zOiB0aGlzLmdldExheWVyQ29sdW1ucygpLFxuICAgICAgLi4ucHJvcHNcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBsYXllckljb24oKSB7XG4gICAgcmV0dXJuIERlZmF1bHRMYXllckljb247XG4gIH1cblxuICBnZXQgb3ZlcmxheVR5cGUoKSB7XG4gICAgcmV0dXJuIE9WRVJMQVlfVFlQRS5kZWNrZ2w7XG4gIH1cblxuICBnZXQgdHlwZSgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cblxuICBnZXQgaXNBZ2dyZWdhdGVkKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGdldCByZXF1aXJlZExheWVyQ29sdW1ucygpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBnZXQgb3B0aW9uYWxDb2x1bW5zKCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGdldCBub25lTGF5ZXJEYXRhQWZmZWN0aW5nUHJvcHMoKSB7XG4gICAgcmV0dXJuIFsnbGFiZWwnLCAnb3BhY2l0eScsICd0aGlja25lc3MnLCAnaXNWaXNpYmxlJywgJ2hpZGRlbiddO1xuICB9XG5cbiAgZ2V0IHZpc3VhbENoYW5uZWxzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjb2xvcjoge1xuICAgICAgICBwcm9wZXJ0eTogJ2NvbG9yJyxcbiAgICAgICAgZmllbGQ6ICdjb2xvckZpZWxkJyxcbiAgICAgICAgc2NhbGU6ICdjb2xvclNjYWxlJyxcbiAgICAgICAgZG9tYWluOiAnY29sb3JEb21haW4nLFxuICAgICAgICByYW5nZTogJ2NvbG9yUmFuZ2UnLFxuICAgICAgICBrZXk6ICdjb2xvcicsXG4gICAgICAgIGNoYW5uZWxTY2FsZVR5cGU6IENIQU5ORUxfU0NBTEVTLmNvbG9yLFxuICAgICAgICBudWxsVmFsdWU6IE5PX1ZBTFVFX0NPTE9SLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IGNvbmZpZyA9PiBjb25maWcuY29sb3JcbiAgICAgIH0sXG4gICAgICBzaXplOiB7XG4gICAgICAgIHByb3BlcnR5OiAnc2l6ZScsXG4gICAgICAgIGZpZWxkOiAnc2l6ZUZpZWxkJyxcbiAgICAgICAgc2NhbGU6ICdzaXplU2NhbGUnLFxuICAgICAgICBkb21haW46ICdzaXplRG9tYWluJyxcbiAgICAgICAgcmFuZ2U6ICdzaXplUmFuZ2UnLFxuICAgICAgICBrZXk6ICdzaXplJyxcbiAgICAgICAgY2hhbm5lbFNjYWxlVHlwZTogQ0hBTk5FTF9TQ0FMRVMuc2l6ZSxcbiAgICAgICAgbnVsbFZhbHVlOiAwLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IDFcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLypcbiAgICogQ29sdW1uIHBhaXJzIG1hcHMgbGF5ZXIgY29sdW1uIHRvIGEgc3BlY2lmaWMgZmllbGQgcGFpcnMsXG4gICAqIEJ5IGRlZmF1bHQsIGl0IGlzIHNldCB0byBudWxsXG4gICAqL1xuICBnZXQgY29sdW1uUGFpcnMoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKlxuICAgKiBEZWZhdWx0IHBvaW50IGNvbHVtbiBwYWlycywgY2FuIGJlIHVzZWQgZm9yIHBvaW50IGJhc2VkIGxheWVyczogcG9pbnQsIGljb24gZXRjLlxuICAgKi9cbiAgZ2V0IGRlZmF1bHRQb2ludENvbHVtblBhaXJzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBsYXQ6IHtwYWlyOiAnbG5nJywgZmllbGRQYWlyS2V5OiAnbGF0J30sXG4gICAgICBsbmc6IHtwYWlyOiAnbGF0JywgZmllbGRQYWlyS2V5OiAnbG5nJ31cbiAgICB9O1xuICB9XG5cbiAgLypcbiAgICogRGVmYXVsdCBsaW5rIGNvbHVtbiBwYWlycywgY2FuIGJlIHVzZWQgZm9yIGxpbmsgYmFzZWQgbGF5ZXJzOiBhcmMsIGxpbmUgZXRjXG4gICAqL1xuICBnZXQgZGVmYXVsdExpbmtDb2x1bW5QYWlycygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbGF0MDoge3BhaXI6ICdsbmcwJywgZmllbGRQYWlyS2V5OiAnbGF0J30sXG4gICAgICBsbmcwOiB7cGFpcjogJ2xhdDAnLCBmaWVsZFBhaXJLZXk6ICdsbmcnfSxcbiAgICAgIGxhdDE6IHtwYWlyOiAnbG5nMScsIGZpZWxkUGFpcktleTogJ2xhdCd9LFxuICAgICAgbG5nMToge3BhaXI6ICdsYXQxJywgZmllbGRQYWlyS2V5OiAnbG5nJ31cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIFJlYWN0IGNvbXBvbmVudCBmb3IgdG8gcmVuZGVyIGxheWVyIGluc3RydWN0aW9ucyBpbiBhIG1vZGFsXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IC0gYW4gb2JqZWN0XG4gICAqIEBleGFtcGxlXG4gICAqICByZXR1cm4ge1xuICAgKiAgICBpZDogJ2ljb25JbmZvJyxcbiAgICogICAgdGVtcGxhdGU6IEljb25JbmZvTW9kYWwsXG4gICAqICAgIG1vZGFsUHJvcHM6IHtcbiAgICogICAgICB0aXRsZTogJ0hvdyB0byBkcmF3IGljb25zJ1xuICAgKiAgIH07XG4gICAqIH1cbiAgICovXG4gIGdldCBsYXllckluZm9Nb2RhbCgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGdldCBpbnRlcmFjdGl2aXR5U2V0dGluZ3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ludGVyYWN0aXZpdHlTZXR0aW5ncztcbiAgfVxuXG4gIHNldCBpbnRlcmFjdGl2aXR5U2V0dGluZ3MoaW50ZXJhY3Rpdml0eVNldHRpbmdzKSB7XG4gICAgdGhpcy5faW50ZXJhY3Rpdml0eVNldHRpbmdzID0gaW50ZXJhY3Rpdml0eVNldHRpbmdzO1xuICB9XG5cbiAgZ2V0IGhhc1Rvb2x0aXAoKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4oXG4gICAgICB0aGlzLmludGVyYWN0aXZpdHlTZXR0aW5ncz8uaG92ZXI/LmZpZWxkcy5sZW5ndGggfHxcbiAgICAgICAgdGhpcy5pbnRlcmFjdGl2aXR5U2V0dGluZ3M/LmNsaWNrPy5maWVsZHMubGVuZ3RoXG4gICAgKTtcbiAgfVxuXG4gIGdldCBoYXNJbnRlcmFjdGl2aXR5KCkge1xuICAgIHJldHVybiBCb29sZWFuKHRoaXMuaGFzVG9vbHRpcCAmJiB0aGlzLmludGVyYWN0aXZpdHlTZXR0aW5ncz8uZW5hYmxlZCk7XG4gIH1cblxuICAvKlxuICAgKiBHaXZlbiBhIGRhdGFzZXQsIGF1dG9tYXRpY2FsbHkgZmluZCBwcm9wcyB0byBjcmVhdGUgbGF5ZXIgYmFzZWQgb24gaXRcbiAgICogYW5kIHJldHVybiB0aGUgcHJvcHMgYW5kIHByZXZpb3VzIGZvdW5kIGxheWVycy5cbiAgICogQnkgZGVmYXVsdCwgbm8gbGF5ZXJzIHdpbGwgYmUgZm91bmRcbiAgICovXG4gIHN0YXRpYyBmaW5kRGVmYXVsdExheWVyUHJvcHMoZGF0YXNldCwgZm91bmRMYXllcnMpIHtcbiAgICByZXR1cm4ge3Byb3BzOiBbXSwgZm91bmRMYXllcnN9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdpdmVuIGEgYXJyYXkgb2YgcHJlc2V0IHJlcXVpcmVkIGNvbHVtbiBuYW1lc1xuICAgKiBmb3VuZCBmaWVsZCB0aGF0IGhhcyB0aGUgc2FtZSBuYW1lIHRvIHNldCBhcyBsYXllciBjb2x1bW5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGRlZmF1bHRGaWVsZHNcbiAgICogQHBhcmFtIHtvYmplY3RbXX0gYWxsRmllbGRzXG4gICAqIEByZXR1cm5zIHtvYmplY3RbXSB8IG51bGx9IGFsbCBwb3NzaWJsZSByZXF1aXJlZCBsYXllciBjb2x1bW4gcGFpcnNcbiAgICovXG4gIHN0YXRpYyBmaW5kRGVmYXVsdENvbHVtbkZpZWxkKGRlZmF1bHRGaWVsZHMsIGFsbEZpZWxkcykge1xuICAgIC8vIGZpbmQgYWxsIG1hdGNoZWQgZmllbGRzIGZvciBlYWNoIHJlcXVpcmVkIGNvbFxuICAgIGNvbnN0IHJlcXVpcmVkQ29sdW1ucyA9IE9iamVjdC5rZXlzKGRlZmF1bHRGaWVsZHMpLnJlZHVjZSgocHJldiwga2V5KSA9PiB7XG4gICAgICBjb25zdCByZXF1aXJlZEZpZWxkcyA9IGFsbEZpZWxkcy5maWx0ZXIoXG4gICAgICAgIGYgPT4gZi5uYW1lID09PSBkZWZhdWx0RmllbGRzW2tleV0gfHwgZGVmYXVsdEZpZWxkc1trZXldLmluY2x1ZGVzKGYubmFtZSlcbiAgICAgICk7XG5cbiAgICAgIHByZXZba2V5XSA9IHJlcXVpcmVkRmllbGRzLmxlbmd0aFxuICAgICAgICA/IHJlcXVpcmVkRmllbGRzLm1hcChmID0+ICh7XG4gICAgICAgICAgICB2YWx1ZTogZi5uYW1lLFxuICAgICAgICAgICAgZmllbGRJZHg6IGYuZmllbGRJZHhcbiAgICAgICAgICB9KSlcbiAgICAgICAgOiBudWxsO1xuICAgICAgcmV0dXJuIHByZXY7XG4gICAgfSwge30pO1xuXG4gICAgaWYgKCFPYmplY3QudmFsdWVzKHJlcXVpcmVkQ29sdW1ucykuZXZlcnkoQm9vbGVhbikpIHtcbiAgICAgIC8vIGlmIGFueSBmaWVsZCBtaXNzaW5nLCByZXR1cm4gbnVsbFxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0QWxsUG9zc2libGVDb2x1bW5QYXJpcyhyZXF1aXJlZENvbHVtbnMpO1xuICB9XG5cbiAgc3RhdGljIGdldEFsbFBvc3NpYmxlQ29sdW1uUGFyaXMocmVxdWlyZWRDb2x1bW5zKSB7XG4gICAgLy8gZm9yIG11bHRpcGxlIG1hdGNoZWQgZmllbGQgZm9yIG9uZSByZXF1aXJlZCBjb2x1bW4sIHJldHVybiBtdWx0aXBsZVxuICAgIC8vIGNvbWJpbmF0aW9ucywgZS4gZy4gaWYgY29sdW1uIGEgaGFzIDIgbWF0Y2hlZCwgY29sdW1uIGIgaGFzIDMgbWF0Y2hlZFxuICAgIC8vIDYgcG9zc2libGUgY29sdW1uIHBhaXJzIHdpbGwgYmUgcmV0dXJuZWRcbiAgICBjb25zdCBhbGxLZXlzID0gT2JqZWN0LmtleXMocmVxdWlyZWRDb2x1bW5zKTtcbiAgICBjb25zdCBwb2ludGVycyA9IGFsbEtleXMubWFwKChrLCBpKSA9PiAoKGkgPT09IGFsbEtleXMubGVuZ3RoIC0gMSA/IC0xIDogMCkpKTtcbiAgICBjb25zdCBjb3VudFBlcktleSA9IGFsbEtleXMubWFwKGsgPT4gcmVxdWlyZWRDb2x1bW5zW2tdLmxlbmd0aCk7XG4gICAgY29uc3QgcGFpcnMgPSBbXTtcblxuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWxvb3AtZnVuYyAqL1xuICAgIHdoaWxlIChpbmNyZW1lbnRQb2ludGVycyhwb2ludGVycywgY291bnRQZXJLZXksIHBvaW50ZXJzLmxlbmd0aCAtIDEpKSB7XG4gICAgICBjb25zdCBuZXdQYWlyID0gcG9pbnRlcnMucmVkdWNlKChwcmV2LCBjdXVyLCBpKSA9PiB7XG4gICAgICAgIHByZXZbYWxsS2V5c1tpXV0gPSByZXF1aXJlZENvbHVtbnNbYWxsS2V5c1tpXV1bY3V1cl07XG4gICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgfSwge30pO1xuXG4gICAgICBwYWlycy5wdXNoKG5ld1BhaXIpO1xuICAgIH1cbiAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLWxvb3AtZnVuYyAqL1xuXG4gICAgLy8gcmVjdXJzaXZlbHkgaW5jcmVtZW50IHBvaW50ZXJzXG4gICAgZnVuY3Rpb24gaW5jcmVtZW50UG9pbnRlcnMocHRzLCBjb3VudHMsIGluZGV4KSB7XG4gICAgICBpZiAoaW5kZXggPT09IDAgJiYgcHRzWzBdID09PSBjb3VudHNbMF0gLSAxKSB7XG4gICAgICAgIC8vIG5vdGhpbmcgdG8gaW5jcmVtZW50XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHB0c1tpbmRleF0gKyAxIDwgY291bnRzW2luZGV4XSkge1xuICAgICAgICBwdHNbaW5kZXhdID0gcHRzW2luZGV4XSArIDE7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBwdHNbaW5kZXhdID0gMDtcbiAgICAgIHJldHVybiBpbmNyZW1lbnRQb2ludGVycyhwdHMsIGNvdW50cywgaW5kZXggLSAxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFpcnM7XG4gIH1cblxuICBzdGF0aWMgaGV4VG9SZ2IoYykge1xuICAgIHJldHVybiBoZXhUb1JnYihjKTtcbiAgfVxuXG4gIGdldERlZmF1bHRMYXllckNvbmZpZyhwcm9wcyA9IHt9KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGFJZDogcHJvcHMuZGF0YUlkIHx8IG51bGwsXG4gICAgICB2aXNpYmlsaXR5Qnlab29tOiB7XG4gICAgICAgIG1pbjogcHJvcHMudmlzaWJpbGl0eUJ5Wm9vbT8ubWluIHx8IFpPT01fTEVWRUxfTElNSVRTLm1pbixcbiAgICAgICAgbWF4OiBwcm9wcy52aXNpYmlsaXR5Qnlab29tPy5tYXggfHwgWk9PTV9MRVZFTF9MSU1JVFMubWF4XG4gICAgICB9LFxuICAgICAgbGFiZWw6IHByb3BzLmxhYmVsIHx8IERFRkFVTFRfTEFZRVJfTEFCRUwsXG4gICAgICBjb2xvcjogcHJvcHMuY29sb3IgfHwgY29sb3JNYWtlci5uZXh0KCkudmFsdWUsXG4gICAgICBjb2x1bW5zOiBwcm9wcy5jb2x1bW5zIHx8IG51bGwsXG4gICAgICBpc1Zpc2libGU6IHByb3BzLmlzVmlzaWJsZSB8fCBmYWxzZSxcbiAgICAgIGlzQ29uZmlnQWN0aXZlOiBwcm9wcy5pc0NvbmZpZ0FjdGl2ZSB8fCBmYWxzZSxcbiAgICAgIGhpZ2hsaWdodENvbG9yOiBwcm9wcy5oaWdobGlnaHRDb2xvciB8fCBERUZBVUxUX0hJR0hMSUdIVF9DT0xPUixcbiAgICAgIGhpZGRlbjogcHJvcHMuaGlkZGVuIHx8IGZhbHNlLFxuXG4gICAgICAvLyBUT0RPOiByZWZhY3RvciB0aGlzIGludG8gc2VwYXJhdGUgdmlzdWFsIENoYW5uZWwgY29uZmlnXG4gICAgICAvLyBjb2xvciBieSBmaWVsZCwgZG9tYWluIGlzIHNldCBieSBmaWx0ZXJzLCBmaWVsZCwgc2NhbGUgdHlwZVxuICAgICAgY29sb3JGaWVsZDogbnVsbCxcbiAgICAgIGNvbG9yRG9tYWluOiBbMCwgMV0sXG4gICAgICBjb2xvclNjYWxlOiBTQ0FMRV9UWVBFUy5xdWFudGlsZSxcblxuICAgICAgLy8gY29sb3IgYnkgc2l6ZSwgZG9tYWluIGlzIHNldCBieSBmaWx0ZXJzLCBmaWVsZCwgc2NhbGUgdHlwZVxuICAgICAgc2l6ZURvbWFpbjogWzAsIDFdLFxuICAgICAgc2l6ZVNjYWxlOiBTQ0FMRV9UWVBFUy5saW5lYXIsXG4gICAgICBzaXplRmllbGQ6IG51bGwsXG4gICAgICByYWRpdXNGaWVsZDogbnVsbCxcblxuICAgICAgdmlzQ29uZmlnOiB7fSxcblxuICAgICAgdGV4dExhYmVsOiBbREVGQVVMVF9URVhUX0xBQkVMXSxcblxuICAgICAgY29sb3JVSToge1xuICAgICAgICBjb2xvcjogREVGQVVMVF9DT0xPUl9VSSxcbiAgICAgICAgY29sb3JSYW5nZTogREVGQVVMVF9DT0xPUl9VSVxuICAgICAgfSxcbiAgICAgIGFuaW1hdGlvbjoge2VuYWJsZWQ6IGZhbHNlfVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkZXNjcmlwdGlvbiBvZiBhIHZpc3VhbENoYW5uZWwgY29uZmlnXG4gICAqIEBwYXJhbSBrZXlcbiAgICogQHJldHVybnMge3tsYWJlbDogc3RyaW5nLCBtZWFzdXJlOiAoc3RyaW5nfHN0cmluZyl9fVxuICAgKi9cbiAgZ2V0VmlzdWFsQ2hhbm5lbERlc2NyaXB0aW9uKGtleSkge1xuICAgIC8vIGUuZy4gbGFiZWw6IENvbG9yLCBtZWFzdXJlOiBWZWhpY2xlIFR5cGVcbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWw6IHRoaXMudmlzQ29uZmlnU2V0dGluZ3NbdGhpcy52aXN1YWxDaGFubmVsc1trZXldLnJhbmdlXS5sYWJlbCxcbiAgICAgIG1lYXN1cmU6IHRoaXMuY29uZmlnW3RoaXMudmlzdWFsQ2hhbm5lbHNba2V5XS5maWVsZF1cbiAgICAgICAgPyAodGhpcy5jb25maWdbdGhpcy52aXN1YWxDaGFubmVsc1trZXldLmZpZWxkXS5kaXNwbGF5TmFtZSB8fFxuICAgICAgICAgIHRoaXMuY29uZmlnW3RoaXMudmlzdWFsQ2hhbm5lbHNba2V5XS5maWVsZF0ubmFtZSlcbiAgICAgICAgOiB0aGlzLnZpc3VhbENoYW5uZWxzW2tleV0uZGVmYXVsdE1lYXN1cmVcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFzc2lnbiBhIGZpZWxkIHRvIGxheWVyIGNvbHVtbiwgcmV0dXJuIGNvbHVtbiBjb25maWdcbiAgICogQHBhcmFtIGtleSAtIENvbHVtbiBLZXlcbiAgICogQHBhcmFtIGZpZWxkIC0gU2VsZWN0ZWQgZmllbGRcbiAgICogQHJldHVybnMge3t9fSAtIENvbHVtbiBjb25maWdcbiAgICovXG4gIGFzc2lnbkNvbHVtbihrZXksIGZpZWxkKSB7XG4gICAgLy8gZmllbGQgdmFsdWUgY291bGQgYmUgbnVsbCBmb3Igb3B0aW9uYWwgY29sdW1uc1xuICAgIGNvbnN0IHVwZGF0ZSA9IGZpZWxkXG4gICAgICA/IHtcbiAgICAgICAgICB2YWx1ZTogZmllbGQubmFtZSxcbiAgICAgICAgICBmaWVsZElkeDogZmllbGQuZmllbGRJZHhcbiAgICAgICAgfVxuICAgICAgOiB7dmFsdWU6IG51bGwsIGZpZWxkSWR4OiAtMX07XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5jb25maWcuY29sdW1ucyxcbiAgICAgIFtrZXldOiB7XG4gICAgICAgIC4uLnRoaXMuY29uZmlnLmNvbHVtbnNba2V5XSxcbiAgICAgICAgLi4udXBkYXRlXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NpZ24gYSBmaWVsZCBwYWlyIHRvIGNvbHVtbiBjb25maWcsIHJldHVybiBjb2x1bW4gY29uZmlnXG4gICAqIEBwYXJhbSBrZXkgLSBDb2x1bW4gS2V5XG4gICAqIEBwYXJhbSBwYWlyIC0gZmllbGQgUGFpclxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSAtIENvbHVtbiBjb25maWdcbiAgICovXG4gIGFzc2lnbkNvbHVtblBhaXJzKGtleSwgcGFpcikge1xuICAgIGlmICghdGhpcy5jb2x1bW5QYWlycyB8fCAhdGhpcy5jb2x1bW5QYWlycz8uW2tleV0pIHtcbiAgICAgIC8vIHNob3VsZCBub3QgZW5kIGluIHRoaXMgc3RhdGVcbiAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5jb2x1bW5zO1xuICAgIH1cblxuICAgIGNvbnN0IHtwYWlyOiBwYXJ0bmVyS2V5LCBmaWVsZFBhaXJLZXl9ID0gdGhpcy5jb2x1bW5QYWlycz8uW2tleV07XG4gICAgY29uc3Qge2ZpZWxkUGFpcktleTogcGFydG5lckZpZWxkUGFpcktleX0gPSB0aGlzLmNvbHVtblBhaXJzPy5bcGFydG5lcktleV07XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5jb25maWcuY29sdW1ucyxcbiAgICAgIFtrZXldOiBwYWlyW2ZpZWxkUGFpcktleV0sXG4gICAgICBbcGFydG5lcktleV06IHBhaXJbcGFydG5lckZpZWxkUGFpcktleV1cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSBhIHJhZGl1cyB6b29tIG11bHRpcGxpZXIgdG8gcmVuZGVyIHBvaW50cywgc28gdGhleSBhcmUgdmlzaWJsZSBpbiBhbGwgem9vbSBsZXZlbFxuICAgKiBAcGFyYW0ge29iamVjdH0gbWFwU3RhdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IG1hcFN0YXRlLnpvb20gLSBhY3R1YWwgem9vbVxuICAgKiBAcGFyYW0ge251bWJlciB8IHZvaWR9IG1hcFN0YXRlLnpvb21PZmZzZXQgLSB6b29tT2Zmc2V0IHdoZW4gcmVuZGVyIGluIHRoZSBwbG90IGNvbnRhaW5lciBmb3IgZXhwb3J0IGltYWdlXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXRab29tRmFjdG9yKHt6b29tLCB6b29tT2Zmc2V0ID0gMH0pIHtcbiAgICByZXR1cm4gTWF0aC5wb3coMiwgTWF0aC5tYXgoMTQgLSB6b29tICsgem9vbU9mZnNldCwgMCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSBhIGVsZXZhdGlvbiB6b29tIG11bHRpcGxpZXIgdG8gcmVuZGVyIHBvaW50cywgc28gdGhleSBhcmUgdmlzaWJsZSBpbiBhbGwgem9vbSBsZXZlbFxuICAgKiBAcGFyYW0ge29iamVjdH0gbWFwU3RhdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IG1hcFN0YXRlLnpvb20gLSBhY3R1YWwgem9vbVxuICAgKiBAcGFyYW0ge251bWJlciB8IHZvaWR9IG1hcFN0YXRlLnpvb21PZmZzZXQgLSB6b29tT2Zmc2V0IHdoZW4gcmVuZGVyIGluIHRoZSBwbG90IGNvbnRhaW5lciBmb3IgZXhwb3J0IGltYWdlXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXRFbGV2YXRpb25ab29tRmFjdG9yKHt6b29tLCB6b29tT2Zmc2V0ID0gMH0pIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcudmlzQ29uZmlnLmVuYWJsZUVsZXZhdGlvblpvb21GYWN0b3JcbiAgICAgID8gTWF0aC5wb3coMiwgTWF0aC5tYXgoOCAtIHpvb20gKyB6b29tT2Zmc2V0LCAwKSlcbiAgICAgIDogMTtcbiAgfVxuXG4gIGZvcm1hdExheWVyRGF0YShkYXRhc2V0cywgZmlsdGVyZWRJbmRleCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIHJlbmRlckxheWVyKCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGdldEhvdmVyRGF0YShvYmplY3QsIGRhdGFDb250YWluZXIpIHtcbiAgICBpZiAoIW9iamVjdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gQnkgZGVmYXVsdCwgZWFjaCBlbnRyeSBvZiBsYXllckRhdGEgc2hvdWxkIGhhdmUgYW4gaW5kZXggb2YgYSByb3cgaW4gdGhlIG9yaWdpbmFsIGRhdGEgY29udGFpbmVyLlxuICAgIC8vIEVhY2ggbGF5ZXIgY2FuIGltcGxlbWVudCBpdHMgb3duIGdldEhvdmVyRGF0YSBtZXRob2RcbiAgICByZXR1cm4gZGF0YUNvbnRhaW5lci5yb3cob2JqZWN0LmluZGV4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGVuIGNoYW5nZSBsYXllciB0eXBlLCB0cnkgdG8gY29weSBvdmVyIGxheWVyIGNvbmZpZ3MgYXMgbXVjaCBhcyBwb3NzaWJsZVxuICAgKiBAcGFyYW0gY29uZmlnVG9Db3B5IC0gY29uZmlnIHRvIGNvcHkgb3ZlclxuICAgKiBAcGFyYW0gdmlzQ29uZmlnU2V0dGluZ3MgLSB2aXNDb25maWcgc2V0dGluZ3Mgb2YgY29uZmlnIHRvIGNvcHlcbiAgICovXG4gIGFzc2lnbkNvbmZpZ1RvTGF5ZXIoY29uZmlnVG9Db3B5LCB2aXNDb25maWdTZXR0aW5ncykge1xuICAgIC8vIGRvbid0IGRlZXAgbWVyZ2UgdmlzdWFsQ2hhbm5lbCBmaWVsZFxuICAgIC8vIGRvbid0IGRlZXAgbWVyZ2UgY29sb3IgcmFuZ2UsIHJldmVyc2VkOiBpcyBub3QgYSBrZXkgYnkgZGVmYXVsdFxuICAgIGNvbnN0IHNoYWxsb3dDb3B5ID0gWydjb2xvclJhbmdlJywgJ3N0cm9rZUNvbG9yUmFuZ2UnXS5jb25jYXQoXG4gICAgICBPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLm1hcCh2ID0+IHYuZmllbGQpXG4gICAgKTtcblxuICAgIC8vIGRvbid0IGNvcHkgb3ZlciBkb21haW4gYW5kIGFuaW1hdGlvblxuICAgIGNvbnN0IG5vdFRvQ29weSA9IFsnYW5pbWF0aW9uJ10uY29uY2F0KE9iamVjdC52YWx1ZXModGhpcy52aXN1YWxDaGFubmVscykubWFwKHYgPT4gdi5kb21haW4pKTtcbiAgICAvLyBpZiByYW5nZSBpcyBmb3IgdGhlIHNhbWUgcHJvcGVydHkgZ3JvdXAgY29weSBpdCwgb3RoZXJ3aXNlLCBub3QgdG8gY29weVxuICAgIE9iamVjdC52YWx1ZXModGhpcy52aXN1YWxDaGFubmVscykuZm9yRWFjaCh2ID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgY29uZmlnVG9Db3B5LnZpc0NvbmZpZ1t2LnJhbmdlXSAmJlxuICAgICAgICB0aGlzLnZpc0NvbmZpZ1NldHRpbmdzW3YucmFuZ2VdICYmXG4gICAgICAgIHZpc0NvbmZpZ1NldHRpbmdzW3YucmFuZ2VdLmdyb3VwICE9PSB0aGlzLnZpc0NvbmZpZ1NldHRpbmdzW3YucmFuZ2VdLmdyb3VwXG4gICAgICApIHtcbiAgICAgICAgbm90VG9Db3B5LnB1c2godi5yYW5nZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBkb24ndCBjb3B5IG92ZXIgdmlzdWFsQ2hhbm5lbCByYW5nZVxuICAgIGNvbnN0IGN1cnJlbnRDb25maWcgPSB0aGlzLmNvbmZpZztcbiAgICBjb25zdCBjb3BpZWQgPSB0aGlzLmNvcHlMYXllckNvbmZpZyhjdXJyZW50Q29uZmlnLCBjb25maWdUb0NvcHksIHtcbiAgICAgIHNoYWxsb3dDb3B5LFxuICAgICAgbm90VG9Db3B5XG4gICAgfSk7XG4gICAgdGhpcy51cGRhdGVMYXllckNvbmZpZyhjb3BpZWQpO1xuICAgIC8vIHZhbGlkYXRlIHZpc3VhbENoYW5uZWwgZmllbGQgdHlwZSBhbmQgc2NhbGUgdHlwZXNcbiAgICBPYmplY3Qua2V5cyh0aGlzLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKGNoYW5uZWwgPT4ge1xuICAgICAgdGhpcy52YWxpZGF0ZVZpc3VhbENoYW5uZWwoY2hhbm5lbCk7XG4gICAgfSk7XG4gIH1cblxuICAvKlxuICAgKiBSZWN1cnNpdmVseSBjb3B5IGNvbmZpZyBvdmVyIHRvIGFuIGVtcHR5IGxheWVyXG4gICAqIHdoZW4gcmVjZWl2ZWQgc2F2ZWQgY29uZmlnLCBvciBjb3B5IGNvbmZpZyBvdmVyIGZyb20gYSBkaWZmZXJlbnQgbGF5ZXIgdHlwZVxuICAgKiBtYWtlIHN1cmUgdG8gb25seSBjb3B5IG92ZXIgdmFsdWUgdG8gZXhpc3Rpbmcga2V5c1xuICAgKiBAcGFyYW0ge29iamVjdH0gY3VycmVudENvbmZpZyAtIGV4aXN0aW5nIGNvbmZpZyB0byBiZSBvdmVycmlkZVxuICAgKiBAcGFyYW0ge29iamVjdH0gY29uZmlnVG9Db3B5IC0gbmV3IENvbmZpZyB0byBjb3B5IG92ZXJcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gc2hhbGxvd0NvcHkgLSBhcnJheSBvZiBwcm9wZXJ0aWVzIHRvIG5vdCB0byBiZSBkZWVwIGNvcGllZFxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBub3RUb0NvcHkgLSBhcnJheSBvZiBwcm9wZXJ0aWVzIG5vdCB0byBjb3B5XG4gICAqIEByZXR1cm5zIHtvYmplY3R9IC0gY29waWVkIGNvbmZpZ1xuICAgKi9cbiAgY29weUxheWVyQ29uZmlnKGN1cnJlbnRDb25maWcsIGNvbmZpZ1RvQ29weSwge3NoYWxsb3dDb3B5ID0gW10sIG5vdFRvQ29weSA9IFtdfSA9IHt9KSB7XG4gICAgY29uc3QgY29waWVkID0ge307XG4gICAgT2JqZWN0LmtleXMoY3VycmVudENvbmZpZykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBpc1BsYWluT2JqZWN0KGN1cnJlbnRDb25maWdba2V5XSkgJiZcbiAgICAgICAgaXNQbGFpbk9iamVjdChjb25maWdUb0NvcHlba2V5XSkgJiZcbiAgICAgICAgIXNoYWxsb3dDb3B5LmluY2x1ZGVzKGtleSkgJiZcbiAgICAgICAgIW5vdFRvQ29weS5pbmNsdWRlcyhrZXkpXG4gICAgICApIHtcbiAgICAgICAgLy8gcmVjdXJzaXZlbHkgYXNzaWduIG9iamVjdCB2YWx1ZVxuICAgICAgICBjb3BpZWRba2V5XSA9IHRoaXMuY29weUxheWVyQ29uZmlnKGN1cnJlbnRDb25maWdba2V5XSwgY29uZmlnVG9Db3B5W2tleV0sIHtcbiAgICAgICAgICBzaGFsbG93Q29weSxcbiAgICAgICAgICBub3RUb0NvcHlcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKG5vdE51bGxvclVuZGVmaW5lZChjb25maWdUb0NvcHlba2V5XSkgJiYgIW5vdFRvQ29weS5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgIC8vIGNvcHlcbiAgICAgICAgY29waWVkW2tleV0gPSBjb25maWdUb0NvcHlba2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGtlZXAgZXhpc3RpbmdcbiAgICAgICAgY29waWVkW2tleV0gPSBjdXJyZW50Q29uZmlnW2tleV07XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY29waWVkO1xuICB9XG5cbiAgcmVnaXN0ZXJWaXNDb25maWcobGF5ZXJWaXNDb25maWdzKSB7XG4gICAgT2JqZWN0LmtleXMobGF5ZXJWaXNDb25maWdzKS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJyAmJiBMQVlFUl9WSVNfQ09ORklHU1tsYXllclZpc0NvbmZpZ3NbaXRlbV1dKSB7XG4gICAgICAgIC8vIGlmIGFzc2lnbmVkIG9uZSBvZiBkZWZhdWx0IExBWUVSX0NPTkZJR1NcbiAgICAgICAgdGhpcy5jb25maWcudmlzQ29uZmlnW2l0ZW1dID0gTEFZRVJfVklTX0NPTkZJR1NbbGF5ZXJWaXNDb25maWdzW2l0ZW1dXS5kZWZhdWx0VmFsdWU7XG4gICAgICAgIHRoaXMudmlzQ29uZmlnU2V0dGluZ3NbaXRlbV0gPSBMQVlFUl9WSVNfQ09ORklHU1tsYXllclZpc0NvbmZpZ3NbaXRlbV1dO1xuICAgICAgfSBlbHNlIGlmIChbJ3R5cGUnLCAnZGVmYXVsdFZhbHVlJ10uZXZlcnkocCA9PiBsYXllclZpc0NvbmZpZ3NbaXRlbV0uaGFzT3duUHJvcGVydHkocCkpKSB7XG4gICAgICAgIC8vIGlmIHByb3ZpZGVkIGN1c3RvbWl6ZWQgdmlzQ29uZmlnLCBhbmQgaGFzIHR5cGUgJiYgZGVmYXVsdFZhbHVlXG4gICAgICAgIC8vIFRPRE86IGZ1cnRoZXIgY2hlY2sgaWYgY3VzdG9taXplZCB2aXNDb25maWcgaXMgdmFsaWRcbiAgICAgICAgdGhpcy5jb25maWcudmlzQ29uZmlnW2l0ZW1dID0gbGF5ZXJWaXNDb25maWdzW2l0ZW1dLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgdGhpcy52aXNDb25maWdTZXR0aW5nc1tpdGVtXSA9IGxheWVyVmlzQ29uZmlnc1tpdGVtXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldExheWVyQ29sdW1ucygpIHtcbiAgICBjb25zdCBjb2x1bW5WYWxpZGF0b3JzID0gdGhpcy5jb2x1bW5WYWxpZGF0b3JzIHx8IHt9O1xuICAgIGNvbnN0IHJlcXVpcmVkID0gdGhpcy5yZXF1aXJlZExheWVyQ29sdW1ucy5yZWR1Y2UoXG4gICAgICAoYWNjdSwga2V5KSA9PiAoe1xuICAgICAgICAuLi5hY2N1LFxuICAgICAgICBba2V5XTogY29sdW1uVmFsaWRhdG9yc1trZXldXG4gICAgICAgICAgPyB7dmFsdWU6IG51bGwsIGZpZWxkSWR4OiAtMSwgdmFsaWRhdG9yOiBjb2x1bW5WYWxpZGF0b3JzW2tleV19XG4gICAgICAgICAgOiB7dmFsdWU6IG51bGwsIGZpZWxkSWR4OiAtMX1cbiAgICAgIH0pLFxuICAgICAge31cbiAgICApO1xuICAgIGNvbnN0IG9wdGlvbmFsID0gdGhpcy5vcHRpb25hbENvbHVtbnMucmVkdWNlKFxuICAgICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgW2tleV06IHt2YWx1ZTogbnVsbCwgZmllbGRJZHg6IC0xLCBvcHRpb25hbDogdHJ1ZX1cbiAgICAgIH0pLFxuICAgICAge31cbiAgICApO1xuXG4gICAgcmV0dXJuIHsuLi5yZXF1aXJlZCwgLi4ub3B0aW9uYWx9O1xuICB9XG5cbiAgdXBkYXRlTGF5ZXJDb25maWcobmV3Q29uZmlnKSB7XG4gICAgdGhpcy5jb25maWcgPSB7Li4udGhpcy5jb25maWcsIC4uLm5ld0NvbmZpZ307XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB1cGRhdGVMYXllclZpc0NvbmZpZyhuZXdWaXNDb25maWcpIHtcbiAgICB0aGlzLmNvbmZpZy52aXNDb25maWcgPSB7Li4udGhpcy5jb25maWcudmlzQ29uZmlnLCAuLi5uZXdWaXNDb25maWd9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdXBkYXRlTGF5ZXJDb2xvclVJKHByb3AsIG5ld0NvbmZpZykge1xuICAgIGNvbnN0IHtjb2xvclVJOiBwcmV2aW91cywgdmlzQ29uZmlnfSA9IHRoaXMuY29uZmlnO1xuXG4gICAgaWYgKCFpc1BsYWluT2JqZWN0KG5ld0NvbmZpZykgfHwgdHlwZW9mIHByb3AgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBjb25zdCBjb2xvclVJUHJvcCA9IE9iamVjdC5lbnRyaWVzKG5ld0NvbmZpZykucmVkdWNlKChhY2N1LCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmFjY3UsXG4gICAgICAgIFtrZXldOiBpc1BsYWluT2JqZWN0KGFjY3Vba2V5XSkgJiYgaXNQbGFpbk9iamVjdCh2YWx1ZSkgPyB7Li4uYWNjdVtrZXldLCAuLi52YWx1ZX0gOiB2YWx1ZVxuICAgICAgfTtcbiAgICB9LCBwcmV2aW91c1twcm9wXSB8fCBERUZBVUxUX0NPTE9SX1VJKTtcblxuICAgIGNvbnN0IGNvbG9yVUkgPSB7XG4gICAgICAuLi5wcmV2aW91cyxcbiAgICAgIFtwcm9wXTogY29sb3JVSVByb3BcbiAgICB9O1xuXG4gICAgdGhpcy51cGRhdGVMYXllckNvbmZpZyh7Y29sb3JVSX0pO1xuICAgIC8vIGlmIGNvbG9yVUlbcHJvcF0gaXMgY29sb3JSYW5nZS4gSWYgdHlwZSBpcyBoZXhDb2xvciB0aGVuIGl0J3MgYWxzbyBhIHJhbmdlXG4gICAgY29uc3QgaXNDb2xvclJhbmdlID1cbiAgICAgIHZpc0NvbmZpZ1twcm9wXSAmJiAodmlzQ29uZmlnW3Byb3BdLmNvbG9ycyB8fCB2aXNDb25maWdbcHJvcF0udHlwZSA9PT0gaGV4Q29sb3IpO1xuXG4gICAgaWYgKGlzQ29sb3JSYW5nZSkge1xuICAgICAgdGhpcy51cGRhdGVDb2xvclVJQnlDb2xvclJhbmdlKG5ld0NvbmZpZywgcHJvcCk7XG4gICAgICB0aGlzLnVwZGF0ZUNvbG9yUmFuZ2VCeUNvbG9yVUkobmV3Q29uZmlnLCBwcmV2aW91cywgcHJvcCk7XG4gICAgICB0aGlzLnVwZGF0ZUN1c3RvbVBhbGV0dGUobmV3Q29uZmlnLCBwcmV2aW91cywgcHJvcCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB1cGRhdGVDdXN0b21QYWxldHRlKG5ld0NvbmZpZywgcHJldmlvdXMsIHByb3ApIHtcbiAgICBpZiAoIW5ld0NvbmZpZy5jb2xvclJhbmdlQ29uZmlnIHx8ICFuZXdDb25maWcuY29sb3JSYW5nZUNvbmZpZy5jdXN0b20pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7Y29sb3JVSSwgdmlzQ29uZmlnfSA9IHRoaXMuY29uZmlnO1xuXG4gICAgaWYgKCF2aXNDb25maWdbcHJvcF0pIHJldHVybjtcbiAgICBjb25zdCB7Y29sb3JzfSA9IHZpc0NvbmZpZ1twcm9wXTtcbiAgICBjb25zdCBjdXN0b21QYWxldHRlID0ge1xuICAgICAgLi4uY29sb3JVSVtwcm9wXS5jdXN0b21QYWxldHRlLFxuICAgICAgbmFtZTogJ0N1c3RvbSBQYWxldHRlJyxcbiAgICAgIGNvbG9yczogWy4uLmNvbG9yc11cbiAgICB9O1xuICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgY29sb3JVSToge1xuICAgICAgICAuLi5jb2xvclVJLFxuICAgICAgICBbcHJvcF06IHtcbiAgICAgICAgICAuLi5jb2xvclVJW3Byb3BdLFxuICAgICAgICAgIGN1c3RvbVBhbGV0dGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBpZiBvcGVuIGRyb3Bkb3duIGFuZCBwcm9wIGlzIGNvbG9yIHJhbmdlXG4gICAqIEF1dG9tYXRpY2FsbHkgc2V0IGNvbG9yUmFuZ2VDb25maWcncyBzdGVwLCByZXZlcnNlZCBhbmQgdHlwZVxuICAgKiBAcGFyYW0geyp9IG5ld0NvbmZpZ1xuICAgKiBAcGFyYW0geyp9IHByb3BcbiAgICovXG4gIHVwZGF0ZUNvbG9yVUlCeUNvbG9yUmFuZ2UobmV3Q29uZmlnLCBwcm9wKSB7XG4gICAgaWYgKHR5cGVvZiBuZXdDb25maWcuc2hvd0Ryb3Bkb3duICE9PSAnbnVtYmVyJykgcmV0dXJuO1xuXG4gICAgY29uc3Qge2NvbG9yVUksIHZpc0NvbmZpZ30gPSB0aGlzLmNvbmZpZztcbiAgICB0aGlzLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgIGNvbG9yVUk6IHtcbiAgICAgICAgLi4uY29sb3JVSSxcbiAgICAgICAgW3Byb3BdOiB7XG4gICAgICAgICAgLi4uY29sb3JVSVtwcm9wXSxcbiAgICAgICAgICBjb2xvclJhbmdlQ29uZmlnOiB7XG4gICAgICAgICAgICAuLi5jb2xvclVJW3Byb3BdLmNvbG9yUmFuZ2VDb25maWcsXG4gICAgICAgICAgICB0eXBlOiB2aXNDb25maWdbcHJvcF0udHlwZSxcbiAgICAgICAgICAgIHN0ZXBzOiB2aXNDb25maWdbcHJvcF0uY29sb3JzPy5sZW5ndGgsXG4gICAgICAgICAgICByZXZlcnNlZDogQm9vbGVhbih2aXNDb25maWdbcHJvcF0ucmV2ZXJzZWQpLFxuICAgICAgICAgICAgaGV4Q29sdW1uOiB0aGlzLmdldEhleENvbHVtbihwcm9wKSxcbiAgICAgICAgICAgIGlzSGV4Q29sdW1uOiB0aGlzLmlzQ29sb3JlZEJ5Q29sb3JDb2x1bW4ocHJvcClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG4gIHVwZGF0ZUNvbG9yUmFuZ2VCeUNvbG9yVUkobmV3Q29uZmlnLCBwcmV2aW91cywgcHJvcCkge1xuICAgIC8vIG9ubHkgdXBkYXRlIGNvbG9yUmFuZ2UgaWYgY2hhbmdlcyBpbiBVSSBpcyBtYWRlIHRvICdyZXZlcnNlZCcsICdzdGVwcycgb3Igc3RlcHNcbiAgICBjb25zdCBzaG91bGRVcGRhdGUgPVxuICAgICAgbmV3Q29uZmlnLmNvbG9yUmFuZ2VDb25maWcgJiZcbiAgICAgIFsncmV2ZXJzZWQnLCAnc3RlcHMnXS5zb21lKFxuICAgICAgICBrZXkgPT5cbiAgICAgICAgICBuZXdDb25maWcuY29sb3JSYW5nZUNvbmZpZy5oYXNPd25Qcm9wZXJ0eShrZXkpICYmXG4gICAgICAgICAgbmV3Q29uZmlnLmNvbG9yUmFuZ2VDb25maWdba2V5XSAhPT1cbiAgICAgICAgICAgIChwcmV2aW91c1twcm9wXSB8fCBERUZBVUxUX0NPTE9SX1VJKS5jb2xvclJhbmdlQ29uZmlnW2tleV1cbiAgICAgICk7XG4gICAgaWYgKCFzaG91bGRVcGRhdGUpIHJldHVybjtcblxuICAgIGNvbnN0IHtjb2xvclVJLCB2aXNDb25maWd9ID0gdGhpcy5jb25maWc7XG4gICAgY29uc3Qge3N0ZXBzLCByZXZlcnNlZH0gPSBjb2xvclVJW3Byb3BdLmNvbG9yUmFuZ2VDb25maWc7XG4gICAgY29uc3QgY29sb3JSYW5nZSA9IHZpc0NvbmZpZ1twcm9wXTtcbiAgICAvLyBmaW5kIGJhc2VkIG9uIHN0ZXAgb3IgcmV2ZXJzZWRcbiAgICBsZXQgdXBkYXRlO1xuICAgIGlmIChuZXdDb25maWcuY29sb3JSYW5nZUNvbmZpZy5oYXNPd25Qcm9wZXJ0eSgnc3RlcHMnKSkge1xuICAgICAgY29uc3QgZ3JvdXAgPSBnZXRDb2xvckdyb3VwQnlOYW1lKGNvbG9yUmFuZ2UpO1xuXG4gICAgICBpZiAoZ3JvdXApIHtcbiAgICAgICAgY29uc3Qgc2FtZUdyb3VwID0gQ09MT1JfUkFOR0VTLmZpbHRlcihjciA9PiBnZXRDb2xvckdyb3VwQnlOYW1lKGNyKSA9PT0gZ3JvdXApO1xuXG4gICAgICAgIHVwZGF0ZSA9IHNhbWVHcm91cC5maW5kKGNyID0+IGNyLmNvbG9ycy5sZW5ndGggPT09IHN0ZXBzKTtcblxuICAgICAgICBpZiAodXBkYXRlICYmIGNvbG9yUmFuZ2UucmV2ZXJzZWQpIHtcbiAgICAgICAgICB1cGRhdGUgPSByZXZlcnNlQ29sb3JSYW5nZSh0cnVlLCB1cGRhdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHVwZGF0ZSAmJiBjb2xvclJhbmdlLmNvbG9yTWFwKSB7XG4gICAgICAgICAgdXBkYXRlID0gdGhpcy51cGRhdGVDb2xvck1hcChwcm9wLCBjb2xvclJhbmdlLmNvbG9yTWFwLCB1cGRhdGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5ld0NvbmZpZy5jb2xvclJhbmdlQ29uZmlnLmhhc093blByb3BlcnR5KCdyZXZlcnNlZCcpKSB7XG4gICAgICB1cGRhdGUgPSByZXZlcnNlQ29sb3JSYW5nZShyZXZlcnNlZCwgdXBkYXRlIHx8IGNvbG9yUmFuZ2UpO1xuICAgIH1cblxuICAgIGlmICh1cGRhdGUpIHtcbiAgICAgIHRoaXMudXBkYXRlTGF5ZXJWaXNDb25maWcoe1twcm9wXTogdXBkYXRlfSk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlQ29sb3JNYXAocHJvcCwgY29sb3JNYXAsIGNvbG9yUmFuZ2UpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3Qge2ZpZWxkLCBkb21haW59ID0gT2JqZWN0LnZhbHVlcyh0aGlzLnZpc3VhbENoYW5uZWxzKS5maW5kKHZhbHVlID0+IHZhbHVlLnJhbmdlID09PSBwcm9wKTtcbiAgICBjb25zdCB0eXBlID0gdGhpcy5jb25maWdbZmllbGRdPy50eXBlO1xuXG4gICAgaWYgKHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGUgPT09ICdib29sZWFuJyB8fCB0eXBlID09PSAnZGF0ZScpIHtcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUNhdGVnb3J5Q29sb3JNYXAoY29sb3JNYXAsIHRoaXMuY29uZmlnW2RvbWFpbl0sIGNvbG9yUmFuZ2UpO1xuICAgIH1cblxuICAgIC8vIElmIG5vIHR5cGUgb3IgdHlwZSBpcyBub3Qgc3RyaW5nLCBib29sZWFuIG9yIGRhdGVcbiAgICByZXR1cm4gdGhpcy51cGRhdGVOdW1lcmljQ29sb3JNYXAoY29sb3JNYXAsIHRoaXMuY29uZmlnW2RvbWFpbl0sIGNvbG9yUmFuZ2UpO1xuICB9XG5cbiAgdXBkYXRlQ2F0ZWdvcnlDb2xvck1hcChjb2xvck1hcCwgZG9tYWluLCBjb2xvclJhbmdlKSB7XG4gICAgY29uc3QgY29sb3JzID0gY29sb3JSYW5nZS5jb2xvcnM7XG4gICAgY29uc3QgYXNzaWduZWRDYXRlZ29yaWVzID0gW107XG4gICAgaWYgKGNvbG9yUmFuZ2UudHlwZSA9PT0gaGV4Q29sb3IpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmNvbG9yUmFuZ2UsXG4gICAgICAgIGNvbG9yTWFwOiBbXVxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgbmV3Q29sb3JNYXAgPSBjb2xvck1hcC5zbGljZSgwLCBjb2xvcnMubGVuZ3RoKS5tYXAoKGNNYXAsIGluZGV4KSA9PiB7XG4gICAgICBhc3NpZ25lZENhdGVnb3JpZXMucHVzaChjTWFwWzBdKTtcbiAgICAgIHJldHVybiBbY01hcFswXSwgY29sb3JzW2luZGV4XV07XG4gICAgfSk7XG4gICAgY29uc3QgdW5hc3NpZ25lZENvbG9ycyA9IGNvbG9ycy5zbGljZShuZXdDb2xvck1hcC5sZW5ndGgsIGNvbG9ycy5sZW5ndGgpO1xuXG4gICAgZm9yIChjb25zdCBjb2xvciBvZiB1bmFzc2lnbmVkQ29sb3JzKSB7XG4gICAgICBjb25zdCBjYXRlZ29yeSA9IGRvbWFpbi5maW5kKGQgPT4gIWFzc2lnbmVkQ2F0ZWdvcmllcy5pbmNsdWRlcyhkKSk7XG4gICAgICBpZiAoIWNhdGVnb3J5KSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgYXNzaWduZWRDYXRlZ29yaWVzLnB1c2goY2F0ZWdvcnkpO1xuICAgICAgbmV3Q29sb3JNYXAucHVzaChbY2F0ZWdvcnksIGNvbG9yXSk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAuLi5jb2xvclJhbmdlLFxuICAgICAgY29sb3JNYXA6IG5ld0NvbG9yTWFwXG4gICAgfTtcbiAgfVxuXG4gIHVwZGF0ZU51bWVyaWNDb2xvck1hcChjb2xvck1hcCwgZG9tYWluLCB1cGRhdGUpIHtcbiAgICBjb25zdCBjb2xvcnMgPSB1cGRhdGUuY29sb3JzO1xuICAgIGxldCBuZXdDb2xvck1hcCA9IGNvbG9yTWFwLnNsaWNlKDAsIGNvbG9ycy5sZW5ndGgpO1xuXG4gICAgbmV3Q29sb3JNYXAgPSBuZXdDb2xvck1hcC5tYXAoKGNNYXAsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGluZGV4ID09PSBuZXdDb2xvck1hcC5sZW5ndGggLSAxID8gbnVsbCA6IGNNYXBbMF07XG4gICAgICByZXR1cm4gW3ZhbHVlLCBjb2xvcnNbaW5kZXhdXTtcbiAgICB9KTtcbiAgICBjb25zdCB1bmFzc2lnbmVkQ29sb3JzID0gY29sb3JzLnNsaWNlKG5ld0NvbG9yTWFwLmxlbmd0aCwgY29sb3JzLmxlbmd0aCk7XG5cbiAgICBpZiAodW5hc3NpZ25lZENvbG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBjb2xvck1hcFZhbHVlcyA9IGNvbG9yTWFwLm1hcChjID0+IGNbMF0pLmZpbHRlcihjID0+IHR5cGVvZiBjID09PSAnbnVtYmVyJyk7XG4gICAgICBjb25zdCBtYXhWYWx1ZSA9IE1hdGgubWF4KC4uLmNvbG9yTWFwVmFsdWVzLCBkb21haW5bZG9tYWluLmxlbmd0aCAtIDFdKTtcbiAgICAgIGNvbnN0IHByZXZWYWx1ZSA9IG5ld0NvbG9yTWFwW25ld0NvbG9yTWFwLmxlbmd0aCAtIDJdWzBdO1xuICAgICAgY29uc3Qgc3RlcCA9IChtYXhWYWx1ZSAtIHByZXZWYWx1ZSkgLyAodW5hc3NpZ25lZENvbG9ycy5sZW5ndGggKyAxKTtcbiAgICAgIG5ld0NvbG9yTWFwW25ld0NvbG9yTWFwLmxlbmd0aCAtIDFdWzBdID0gcHJldlZhbHVlICsgc3RlcDtcblxuICAgICAgZm9yIChjb25zdCBbaSwgY29sb3JdIG9mIHVuYXNzaWduZWRDb2xvcnMuZW50cmllcygpKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gaSA9PT0gdW5hc3NpZ25lZENvbG9ycy5sZW5ndGggLSAxID8gbnVsbCA6IHByZXZWYWx1ZSArIChzdGVwICogKGkgKyAyKSk7XG4gICAgICAgIG5ld0NvbG9yTWFwLnB1c2goW3ZhbHVlLCBjb2xvcl0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgLi4udXBkYXRlLFxuICAgICAgY29sb3JNYXA6IG5ld0NvbG9yTWFwXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIGxheWVyIGhhcyBhbGwgY29sdW1uc1xuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0geWVzIG9yIG5vXG4gICAqL1xuICBoYXNBbGxDb2x1bW5zKCkge1xuICAgIGNvbnN0IHtjb2x1bW5zfSA9IHRoaXMuY29uZmlnO1xuICAgIHJldHVybiAoXG4gICAgICAoY29sdW1ucyAmJlxuICAgICAgT2JqZWN0LnZhbHVlcyhjb2x1bW5zKS5ldmVyeSh2ID0+IHtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4odi5vcHRpb25hbCB8fCAodi52YWx1ZSAmJiB2LmZpZWxkSWR4ID4gLTEpKTtcbiAgICAgIH0pKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciBsYXllciBoYXMgZGF0YVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgT2JqZWN0fSBsYXllckRhdGFcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHllcyBvciBub1xuICAgKi9cbiAgaGFzTGF5ZXJEYXRhKGxheWVyRGF0YSkge1xuICAgIGlmICghbGF5ZXJEYXRhKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBCb29sZWFuKGxheWVyRGF0YS5kYXRhICYmIGxheWVyRGF0YS5kYXRhLmxlbmd0aCk7XG4gIH1cblxuICBpc1ZhbGlkVG9TYXZlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGUgJiYgdGhpcy5oYXNBbGxDb2x1bW5zKCk7XG4gIH1cblxuICBzaG91bGRSZW5kZXJMYXllcihkYXRhKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICh0aGlzLnR5cGUgJiZcbiAgICAgIHRoaXMuaGFzQWxsQ29sdW1ucygpICYmXG4gICAgICB0aGlzLmhhc0xheWVyRGF0YShkYXRhKSAmJlxuICAgICAgdHlwZW9mIHRoaXMucmVuZGVyTGF5ZXIgPT09ICdmdW5jdGlvbicpXG4gICAgKTtcbiAgfVxuXG4gIGdldENvbG9yU2NhbGUoY29sb3JTY2FsZSwgY29sb3JEb21haW4sIGNvbG9yUmFuZ2UpIHtcbiAgICBpZiAoY29sb3JSYW5nZS50eXBlID09PSBoZXhDb2xvcikge1xuICAgICAgcmV0dXJuIChfLCBjb2xvcikgPT4ge1xuICAgICAgICByZXR1cm4gaGV4VG9SZ2IoY29sb3IpO1xuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoY29sb3JSYW5nZS5jb2xvck1hcCkpIHtcbiAgICAgIGNvbnN0IGNNYXAgPSBuZXcgTWFwKCk7XG4gICAgICBjb2xvclJhbmdlLmNvbG9yTWFwLmZvckVhY2goKFtrLCB2XSkgPT4ge1xuICAgICAgICBjTWFwLnNldChrLCB0eXBlb2YgdiA9PT0gJ3N0cmluZycgPyBoZXhUb1JnYih2KSA6IHYpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIEB0cy1pZ25vcmUgZDMgc2NhbGVcbiAgICAgIGNvbnN0IHNjYWxlID0gU0NBTEVfRlVOQ1tjb2xvclNjYWxlXSgpXG4gICAgICAgIC5kb21haW4oQXJyYXkuZnJvbShjTWFwLmtleXMoKSkpXG4gICAgICAgIC5yYW5nZShBcnJheS5mcm9tKGNNYXAudmFsdWVzKCkpKVxuICAgICAgICAudW5rbm93bihVTktOT1dOX0NPTE9SKTtcbiAgICAgIHJldHVybiBzY2FsZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5nZXRWaXNDaGFubmVsU2NhbGUoY29sb3JTY2FsZSwgY29sb3JEb21haW4sIGNvbG9yUmFuZ2UuY29sb3JzLm1hcChoZXhUb1JnYikpO1xuICB9XG5cbiAgZ2V0Q3VzdG9tTWFya2Vyc1NjYWxlKHJhbmdlLCBmYWxsYmFja0ljb24pIHtcbiAgICBsZXQgdW5rbm93blZhbHVlID0gZmFsbGJhY2tJY29uIHx8IEZBTExCQUNLX0lDT047XG4gICAgaWYgKCFyYW5nZSkge1xuICAgICAgcmV0dXJuICgpID0+IHVua25vd25WYWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBtYXBwaW5nID0gbmV3IE1hcCgpO1xuXG4gICAgaWYgKHJhbmdlLm90aGVyc01hcmtlcikge1xuICAgICAgdW5rbm93blZhbHVlID0gcmFuZ2Uub3RoZXJzTWFya2VyO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHt2YWx1ZSwgbWFya2VyVXJsfSBvZiByYW5nZS5tYXJrZXJNYXApIHtcbiAgICAgIGlmIChtYXJrZXJVcmwpIHtcbiAgICAgICAgbWFwcGluZy5zZXQodmFsdWUsIG1hcmtlclVybCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQHRzLWlnbm9yZSBkMyBzY2FsZVxuICAgIGNvbnN0IHNjYWxlID0gc2NhbGVPcmRpbmFsKClcbiAgICAgIC5kb21haW4oQXJyYXkuZnJvbShtYXBwaW5nLmtleXMoKSkpXG4gICAgICAucmFuZ2UoQXJyYXkuZnJvbShtYXBwaW5nLnZhbHVlcygpKSlcbiAgICAgIC51bmtub3duKHVua25vd25WYWx1ZSk7XG4gICAgcmV0dXJuIHNjYWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcHBpbmcgZnJvbSB2aXN1YWwgY2hhbm5lbHMgdG8gZGVjay5nbCBhY2Nlc29yc1xuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW0gUGFyYW1ldGVyc1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXJhbS5kYXRhQWNjZXNzb3IgQWNjZXNzIGtlcGxlci5nbCBsYXllciBkYXRhIGZyb20gZGVjay5nbCBsYXllclxuICAgKiBAcGFyYW0ge2ltcG9ydCgndXRpbHMvdGFibGUtdXRpbHMvZGF0YS1jb250YWluZXItaW50ZXJmYWNlJykuRGF0YUNvbnRhaW5lckludGVyZmFjZX0gcGFyYW0uZGF0YUNvbnRhaW5lciBEYXRhQ29udGFpbmVyIHRvIHVzZSB1c2Ugd2l0aCBkYXRhQWNjZXNzb3JcbiAgICogQHJldHVybiB7T2JqZWN0fSBhdHRyaWJ1dGVBY2Nlc3NvcnMgLSBkZWNrLmdsIGxheWVyIGF0dHJpYnV0ZSBhY2Nlc3NvcnNcbiAgICovXG4gIGdldEF0dHJpYnV0ZUFjY2Vzc29ycyh7ZGF0YUFjY2Vzc29yID0gZGVmYXVsdERhdGFBY2Nlc3NvciwgZGF0YUNvbnRhaW5lcn0pIHtcbiAgICBjb25zdCBhdHRyaWJ1dGVBY2Nlc3NvcnMgPSB7fTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG4gICAgT2JqZWN0LmtleXModGhpcy52aXN1YWxDaGFubmVscykuZm9yRWFjaChjaGFubmVsID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZmllbGQsXG4gICAgICAgIGZpeGVkLFxuICAgICAgICBzY2FsZSxcbiAgICAgICAgZG9tYWluLFxuICAgICAgICByYW5nZSxcbiAgICAgICAgYWNjZXNzb3IsXG4gICAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgZ2V0QXR0cmlidXRlVmFsdWUsXG4gICAgICAgIG51bGxWYWx1ZSxcbiAgICAgICAgY2hhbm5lbFNjYWxlVHlwZSxcbiAgICAgICAgYWdncmVnYXRpb25cbiAgICAgIH0gPSB0aGlzLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdO1xuXG4gICAgICBjb25zdCBzaG91bGRHZXRTY2FsZSA9IEJvb2xlYW4oXG4gICAgICAgIChzY2FsZSB8fCBjaGFubmVsU2NhbGVUeXBlID09PSBDSEFOTkVMX1NDQUxFUy5pZGVudGl0eSkgJiYgdGhpcy5jb25maWdbZmllbGRdXG4gICAgICApO1xuXG4gICAgICBpZiAoc2hvdWxkR2V0U2NhbGUpIHtcbiAgICAgICAgY29uc3QgYXJncyA9IFt0aGlzLmNvbmZpZ1tzY2FsZV0sIHRoaXMuY29uZmlnW2RvbWFpbl0sIHRoaXMuY29uZmlnLnZpc0NvbmZpZ1tyYW5nZV1dO1xuICAgICAgICBjb25zdCBpc0ZpeGVkID0gZml4ZWQgJiYgdGhpcy5jb25maWcudmlzQ29uZmlnW2ZpeGVkXTtcbiAgICAgICAgLy8gSXQncyBpbXBvcnRhbnQgdG8gZGVjbGFyZSBhcyBjb25zdCBhbGwgdGhlIHBhcmFtZXRlcnMgdGhhdCB3ZSBhcmUgZ29pbmcgdG8gYmUgdXNlIGluIHRoZSBnZXRFbmNvZGVkQ2hhbm5lbFZhbHVlIGNhbGxcbiAgICAgICAgLy8gb3RoZXJ3aXNlLCB0aGUgb2xkTGF5ZXJEYXRhIHBhcmFtZXRlciBpbiBmb3JtYXRMYXllckRhdGEgbWV0aG9kIHdpbGwgYmUgd3JvbmcgKHlvdSBjYW4gY2hlY2sgdGhlIGZvcm1hdExheWVyRGF0YSBUaWxlTGF5ZXIgbWV0aG9kIGluIEJ1aWxkZXIgYXMgZXhhbXBsZSlcbiAgICAgICAgY29uc3QgZmllbGRDb25maWcgPSB0aGlzLmNvbmZpZ1tmaWVsZF07XG4gICAgICAgIGNvbnN0IGFnZ3JlZ2F0aW9uVmFsdWUgPSB0aGlzLmNvbmZpZy52aXNDb25maWdbYWdncmVnYXRpb25dO1xuXG4gICAgICAgIGNvbnN0IHNjYWxlRnVuY3Rpb24gPVxuICAgICAgICAgIGNoYW5uZWxTY2FsZVR5cGUgPT09IENIQU5ORUxfU0NBTEVTLmlkZW50aXR5XG4gICAgICAgICAgICA/IHNjYWxlSWRlbnRpdHlcbiAgICAgICAgICAgIDogY2hhbm5lbFNjYWxlVHlwZSA9PT0gQ0hBTk5FTF9TQ0FMRVMuY29sb3JcbiAgICAgICAgICAgID8gdGhpcy5nZXRDb2xvclNjYWxlKC4uLmFyZ3MpXG4gICAgICAgICAgICA6IGNoYW5uZWxTY2FsZVR5cGUgPT09IENIQU5ORUxfU0NBTEVTLmN1c3RvbU1hcmtlclxuICAgICAgICAgICAgPyB0aGlzLmdldEN1c3RvbU1hcmtlcnNTY2FsZShcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy52aXNDb25maWdbcmFuZ2VdLFxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLnZpc0NvbmZpZy5jdXN0b21NYXJrZXJzVXJsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogdGhpcy5nZXRWaXNDaGFubmVsU2NhbGUoLi4uYXJncywgaXNGaXhlZCk7XG5cbiAgICAgICAgYXR0cmlidXRlQWNjZXNzb3JzW2FjY2Vzc29yXSA9IGQgPT5cbiAgICAgICAgICB0aGlzLmdldEVuY29kZWRDaGFubmVsVmFsdWUoe1xuICAgICAgICAgICAgY2hhbm5lbCxcbiAgICAgICAgICAgIGRhdGFDb250YWluZXIsXG4gICAgICAgICAgICBzY2FsZTogc2NhbGVGdW5jdGlvbixcbiAgICAgICAgICAgIGRhdGE6IGRhdGFBY2Nlc3NvcihkYXRhQ29udGFpbmVyKShkKSxcbiAgICAgICAgICAgIGZpZWxkOiBmaWVsZENvbmZpZyxcbiAgICAgICAgICAgIF9hZ2dyZWdhdGlvbjogYWdncmVnYXRpb25WYWx1ZSxcbiAgICAgICAgICAgIG51bGxWYWx1ZVxuICAgICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZ2V0QXR0cmlidXRlVmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgYXR0cmlidXRlQWNjZXNzb3JzW2FjY2Vzc29yXSA9IGdldEF0dHJpYnV0ZVZhbHVlKHRoaXMuY29uZmlnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF0dHJpYnV0ZUFjY2Vzc29yc1thY2Nlc3Nvcl0gPVxuICAgICAgICAgIHR5cGVvZiBkZWZhdWx0VmFsdWUgPT09ICdmdW5jdGlvbicgPyBkZWZhdWx0VmFsdWUodGhpcy5jb25maWcpIDogZGVmYXVsdFZhbHVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIShhY2Nlc3NvciBpbiBhdHRyaWJ1dGVBY2Nlc3NvcnMpKSB7XG4gICAgICAgIENvbnNvbGUud2FybihgRmFpbGVkIHRvIHByb3ZpZGUgYWNjZXNzb3IgZnVuY3Rpb24gZm9yICR7YWNjZXNzb3IgfHwgY2hhbm5lbH1gKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBhdHRyaWJ1dGVBY2Nlc3NvcnM7XG4gIH1cblxuICBnZXRWaXNDaGFubmVsU2NhbGUoc2NhbGUsIGRvbWFpbiwgcmFuZ2UsIGZpeGVkKSB7XG4gICAgaWYgKHNjYWxlID09PSBTQ0FMRV9UWVBFUy5vcmRpbmFsKSB7XG4gICAgICAvLyBAdHMtaWdub3JlIGQzLXNjYWxlIHR5cGVcbiAgICAgIHJldHVybiBTQ0FMRV9GVU5DW3NjYWxlXSgpXG4gICAgICAgIC5kb21haW4oZG9tYWluLnNsaWNlKDAsIHJhbmdlLmxlbmd0aCkpXG4gICAgICAgIC5yYW5nZShyYW5nZSlcbiAgICAgICAgLnVua25vd24oVU5LTk9XTl9DT0xPUik7XG4gICAgfVxuXG4gICAgLy8gZm9yIGBjb3VudGAgYWdncmVnYXRpb24sIHdlIGRvbWFpbiBpcyBhY3R1YWxseSBgWzAsIEluZmluaXR5XWAgc28gaXQgZG9lc24ndCBtYWtlIHNlbnNlXG4gICAgLy8gdG8gdXNlIGl0LCBzbyBza2lwIHNwZWN5ZnlpbmcgdGhpcyBkb21haW5zXG4gICAgY29uc3QgZG9tYWluSXNJbmZpbml0ZSA9IGRvbWFpbiAmJiAoZG9tYWluWzBdID09PSAwICYmIGRvbWFpblsxXSA9PT0gSW5maW5pdHkpO1xuICAgIGNvbnN0IHNjYWxlRmFjdG9yeSA9IFNDQUxFX0ZVTkNbZml4ZWQgPyAnbGluZWFyJyA6IHNjYWxlXTtcbiAgICAvLyBAdHMtaWdub3JlIGQzLXNjYWxlIHR5cGVcbiAgICBsZXQgcmVzdWx0ID0gc2NhbGVGYWN0b3J5KCk7XG4gICAgaWYgKGRvbWFpbiAmJiAhZG9tYWluSXNJbmZpbml0ZSkge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0LmRvbWFpbihkb21haW4pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0LnJhbmdlKGZpeGVkID8gZG9tYWluIDogcmFuZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBsb25naXR1ZGUgYW5kIGxhdGl0dWRlIGJvdW5kcyBvZiB0aGUgZGF0YS5cbiAgICogQHBhcmFtIHtpbXBvcnQoJ3V0aWxzL3RhYmxlLXV0aWxzL2RhdGEtY29udGFpbmVyLWludGVyZmFjZScpLkRhdGFDb250YWluZXJJbnRlcmZhY2V9IGRhdGFDb250YWluZXIgRGF0YUNvbnRhaW5lciB0byBjYWxjdWxhdGUgYm91bmRzIGZvci5cbiAgICogQHBhcmFtIHsoZDoge2luZGV4OiBudW1iZXJ9LCBkYzogaW1wb3J0KCd1dGlscy90YWJsZS11dGlscy9kYXRhLWNvbnRhaW5lci1pbnRlcmZhY2UnKS5EYXRhQ29udGFpbmVySW50ZXJmYWNlKSA9PiBudW1iZXJbXX0gZ2V0UG9zaXRpb24gQWNjZXNzIGtlcGxlci5nbCBsYXllciBkYXRhIGZyb20gZGVjay5nbCBsYXllclxuICAgKiBAcmV0dXJuIHtudW1iZXJbXXxudWxsfSBib3VuZHMgb2YgdGhlIGRhdGEuXG4gICAqL1xuICBnZXRQb2ludHNCb3VuZHMoZGF0YUNvbnRhaW5lciwgZ2V0UG9zaXRpb24pIHtcbiAgICAvLyBubyBuZWVkIHRvIGxvb3AgdGhyb3VnaCB0aGUgZW50aXJlIGRhdGFzZXRcbiAgICAvLyBnZXQgYSBzYW1wbGUgb2YgZGF0YSB0byBjYWxjdWxhdGUgYm91bmRzXG4gICAgY29uc3Qgc2FtcGxlRGF0YSA9XG4gICAgICBkYXRhQ29udGFpbmVyLm51bVJvd3MoKSA+IE1BWF9TQU1QTEVfU0laRVxuICAgICAgICA/IGdldFNhbXBsZURhdGEoZGF0YUNvbnRhaW5lciwgTUFYX1NBTVBMRV9TSVpFKVxuICAgICAgICA6IGRhdGFDb250YWluZXI7XG5cbiAgICBjb25zdCBwb2ludHMgPSBzYW1wbGVEYXRhLm1hcEluZGV4KGdldFBvc2l0aW9uKTtcblxuICAgIGNvbnN0IGxhdEJvdW5kcyA9IGdldExhdExuZ0JvdW5kcyhwb2ludHMsIDEsIFstOTAsIDkwXSk7XG4gICAgY29uc3QgbG5nQm91bmRzID0gZ2V0TGF0TG5nQm91bmRzKHBvaW50cywgMCwgWy0xODAsIDE4MF0pO1xuXG4gICAgaWYgKCFsYXRCb3VuZHMgfHwgIWxuZ0JvdW5kcykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtsbmdCb3VuZHNbMF0sIGxhdEJvdW5kc1swXSwgbG5nQm91bmRzWzFdLCBsYXRCb3VuZHNbMV1dO1xuICB9XG5cbiAgZ2V0Q2hhbmdlZFRyaWdnZXJzKGRhdGFVcGRhdGVUcmlnZ2Vycykge1xuICAgIGNvbnN0IHRyaWdnZXJDaGFuZ2VkID0gZGlmZlVwZGF0ZVRyaWdnZXJzKGRhdGFVcGRhdGVUcmlnZ2VycywgdGhpcy5fb2xkRGF0YVVwZGF0ZVRyaWdnZXJzKTtcbiAgICB0aGlzLl9vbGREYXRhVXBkYXRlVHJpZ2dlcnMgPSBkYXRhVXBkYXRlVHJpZ2dlcnM7XG5cbiAgICByZXR1cm4gdHJpZ2dlckNoYW5nZWQ7XG4gIH1cblxuICBnZXRFbmNvZGVkQ2hhbm5lbFZhbHVlKHtcbiAgICBjaGFubmVsLFxuICAgIHNjYWxlLFxuICAgIGRhdGEsXG4gICAgZmllbGQsXG4gICAgZGF0YUNvbnRhaW5lcixcbiAgICAvLyBJbiBidWlsZGVyIHdlIG92ZXJ3cml0ZSB0aGUgZ2V0VmFsdWUgZnVuY3Rpb24gYW5kIHdlIHVzZSB0aGUgX2FnZ3JlZ2F0aW9uIHBhcmFtZXRlciBpbiBzcGF0aWFsIGluZGV4IGxheWVycyBhcyB0aGUgUXVhZGtleUxheWVyLlxuICAgIF9hZ2dyZWdhdGlvbixcbiAgICBudWxsVmFsdWUgPSBOT19WQUxVRV9DT0xPUixcbiAgICBnZXRWYWx1ZSA9IGRlZmF1bHRHZXRGaWVsZFZhbHVlXG4gIH0pIHtcbiAgICBsZXQgY29sb3JDb2x1bW5WYWx1ZTtcbiAgICBjb25zdCB7dHlwZX0gPSBmaWVsZDtcbiAgICBjb25zdCB2YWx1ZSA9IGdldFZhbHVlKGZpZWxkLCBkYXRhKTtcbiAgICBjb25zdCBjaGFubmVsQ29uZmlnID0gdGhpcy5jb25maWcudmlzQ29uZmlnW3RoaXMudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF0ucmFuZ2VdO1xuICAgIGNvbnN0IGNoYW5uZWxGaWVsZCA9IHRoaXMuY29uZmlnW3RoaXMudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF0uZmllbGRdO1xuXG4gICAgaWYgKGNoYW5uZWxDb25maWcudHlwZSA9PT0gaGV4Q29sb3IpIHtcbiAgICAgIGNvbnN0IGNvbHVtbkZpZWxkID0ge1xuICAgICAgICBpZDogY2hhbm5lbEZpZWxkLmNvbG9yQ29sdW1uLFxuICAgICAgICBuYW1lOiBjaGFubmVsRmllbGQuY29sb3JDb2x1bW4sXG4gICAgICAgIGZpZWxkSWR4OiBjaGFubmVsRmllbGQuY29sb3JDb2x1bW5JZHgsXG4gICAgICAgIHZhbHVlQWNjZXNzb3I6IGQgPT4ge1xuICAgICAgICAgIHJldHVybiBkYXRhQ29udGFpbmVyLnZhbHVlQXQoZC5pbmRleCwgY2hhbm5lbEZpZWxkLmNvbG9yQ29sdW1uSWR4KTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgY29sb3JDb2x1bW5WYWx1ZSA9IGdldFZhbHVlKGNvbHVtbkZpZWxkLCBkYXRhKTtcbiAgICB9XG5cbiAgICBpZiAoIW5vdE51bGxvclVuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBudWxsVmFsdWU7XG4gICAgfVxuXG4gICAgbGV0IGF0dHJpYnV0ZVZhbHVlO1xuICAgIGlmICh0eXBlID09PSBBTExfRklFTERfVFlQRVMudGltZXN0YW1wKSB7XG4gICAgICAvLyBzaG91bGRuJ3QgbmVlZCB0byBjb252ZXJ0IGhlcmVcbiAgICAgIC8vIHNjYWxlIEZ1bmN0aW9uIHNob3VsZCB0YWtlIGNhcmUgb2YgaXRcbiAgICAgIGF0dHJpYnV0ZVZhbHVlID0gc2NhbGUobmV3IERhdGUodmFsdWUpLCBjb2xvckNvbHVtblZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXR0cmlidXRlVmFsdWUgPSBzY2FsZSh2YWx1ZSwgY29sb3JDb2x1bW5WYWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKCFub3ROdWxsb3JVbmRlZmluZWQoYXR0cmlidXRlVmFsdWUpKSB7XG4gICAgICBhdHRyaWJ1dGVWYWx1ZSA9IG51bGxWYWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXR0cmlidXRlVmFsdWU7XG4gIH1cblxuICB1cGRhdGVNZXRhKG1ldGEpIHtcbiAgICB0aGlzLm1ldGEgPSB7Li4udGhpcy5tZXRhLCAuLi5tZXRhfTtcbiAgfVxuXG4gIHVwZGF0ZUxheWVyTGVnZW5kKHNldHRpbmdzKSB7XG4gICAgdGhpcy5sZWdlbmRTZXR0aW5ncyA9IHsuLi50aGlzLmxlZ2VuZFNldHRpbmdzLCAuLi5zZXR0aW5nc307XG4gIH1cblxuICBnZXREYXRhVXBkYXRlVHJpZ2dlcnMoe2ZpbHRlcmVkSW5kZXgsIGlkLCBhbGxEYXRhfSkge1xuICAgIGNvbnN0IHtjb2x1bW5zfSA9IHRoaXMuY29uZmlnO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGdldERhdGE6IHtkYXRhc2V0SWQ6IGlkLCBhbGxEYXRhLCBjb2x1bW5zLCBmaWx0ZXJlZEluZGV4fSxcbiAgICAgIGdldE1ldGE6IHtkYXRhc2V0SWQ6IGlkLCBhbGxEYXRhLCBjb2x1bW5zfSxcbiAgICAgIC4uLih0aGlzLmNvbmZpZy50ZXh0TGFiZWwgfHwgW10pLnJlZHVjZShcbiAgICAgICAgKGFjY3UsIHRsLCBpKSA9PiAoe1xuICAgICAgICAgIC4uLmFjY3UsXG4gICAgICAgICAgW2BnZXRMYWJlbENoYXJhY3RlclNldC0ke2l9YF06IHRsLmZpZWxkID8gdGwuZmllbGQubmFtZSA6IG51bGxcbiAgICAgICAgfSksXG4gICAgICAgIHt9XG4gICAgICApXG4gICAgfTtcbiAgfVxuXG4gIHVwZGF0ZURhdGEoZGF0YXNldHMsIG9sZExheWVyRGF0YSkge1xuICAgIGlmICghdGhpcy5jb25maWcuZGF0YUlkKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGNvbnN0IGRhdGFzZXQgPSB0aGlzLmdldERhdGFzZXQoZGF0YXNldHMpO1xuICAgIGNvbnN0IHtkYXRhQ29udGFpbmVyfSA9IGRhdGFzZXQ7XG5cbiAgICB0aGlzLnVwZGF0ZVZpc3VhbENoYW5uZWxGaWVsZHMoZGF0YXNldCk7XG4gICAgdGhpcy51cGRhdGVIZXhDb2xvckRvbWFpbihkYXRhc2V0KTtcblxuICAgIGNvbnN0IGdldFBvc2l0aW9uID0gdGhpcy5nZXRQb3NpdGlvbkFjY2Vzc29yKGRhdGFDb250YWluZXIpO1xuICAgIGNvbnN0IGRhdGFVcGRhdGVUcmlnZ2VycyA9IHRoaXMuZ2V0RGF0YVVwZGF0ZVRyaWdnZXJzKGRhdGFzZXQpO1xuICAgIGNvbnN0IHRyaWdnZXJDaGFuZ2VkID0gdGhpcy5nZXRDaGFuZ2VkVHJpZ2dlcnMoZGF0YVVwZGF0ZVRyaWdnZXJzKTtcblxuICAgIGlmICh0cmlnZ2VyQ2hhbmdlZC5nZXRNZXRhKSB7XG4gICAgICB0aGlzLnVwZGF0ZUxheWVyTWV0YShkYXRhQ29udGFpbmVyLCBnZXRQb3NpdGlvbik7XG4gICAgfVxuXG4gICAgbGV0IGRhdGEgPSBbXTtcblxuICAgIGlmICghdHJpZ2dlckNoYW5nZWQuZ2V0RGF0YSAmJiBvbGRMYXllckRhdGEgJiYgb2xkTGF5ZXJEYXRhLmRhdGEpIHtcbiAgICAgIC8vIHNhbWUgZGF0YVxuICAgICAgZGF0YSA9IG9sZExheWVyRGF0YS5kYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRhID0gdGhpcy5jYWxjdWxhdGVEYXRhQXR0cmlidXRlKGRhdGFzZXQsIGdldFBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge2RhdGEsIHRyaWdnZXJDaGFuZ2VkfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgc3R5bGVkIGZpZWxkcyB0byBtYXRjaCBvbmVzIGZyb20gbmV3IGRhdGFzZXQuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhc2V0XG4gICAqL1xuICB1cGRhdGVWaXN1YWxDaGFubmVsRmllbGRzKGRhdGFzZXQpIHtcbiAgICBmb3IgKGNvbnN0IHtmaWVsZCwgcmFuZ2V9IG9mIE9iamVjdC52YWx1ZXModGhpcy52aXN1YWxDaGFubmVscykpIHtcbiAgICAgIGNvbnN0IG9sZEZpZWxkID0gdGhpcy5jb25maWdbZmllbGRdO1xuICAgICAgY29uc3QgaXNVc2luZ0hleENvbG9yQ29kZSA9IHRoaXMuY29uZmlnLnZpc0NvbmZpZ1tyYW5nZV0uaGV4Q29sb3I7XG4gICAgICBpZiAoIW9sZEZpZWxkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxldCBuZXdEYXRhU2V0RmllbGQgPSBkYXRhc2V0LmZpZWxkcy5maW5kKGZkID0+IGZkLm5hbWUgPT09IG9sZEZpZWxkLm5hbWUpIHx8IG51bGw7XG4gICAgICBpZiAoaXNVc2luZ0hleENvbG9yQ29kZSkge1xuICAgICAgICBuZXdEYXRhU2V0RmllbGQgPSB7XG4gICAgICAgICAgLi4ubmV3RGF0YVNldEZpZWxkLFxuICAgICAgICAgIGNvbG9yQ29sdW1uOiBuZXdEYXRhU2V0RmllbGQuY29sb3JDb2x1bW4gfHwgb2xkRmllbGQuY29sb3JDb2x1bW4sXG4gICAgICAgICAgY29sb3JDb2x1bW5JZHg6IG5ld0RhdGFTZXRGaWVsZC5jb2xvckNvbHVtbklkeCB8fCBvbGRGaWVsZC5jb2xvckNvbHVtbklkeFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVMYXllckNvbmZpZyh7W2ZpZWxkXTogbmV3RGF0YVNldEZpZWxkfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGhlbHBlciBmdW5jdGlvbiB0byB1cGRhdGUgb25lIGxheWVyIGRvbWFpbiB3aGVuIHN0YXRlLmRhdGEgY2hhbmdlZFxuICAgKiBpZiBzdGF0ZS5kYXRhIGNoYW5nZSBpcyBkdWUgb3QgdXBkYXRlIGZpbHRlciwgbmV3RmlsZXIgd2lsbCBiZSBwYXNzZWRcbiAgICogY2FsbGVkIGJ5IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YVxuICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YXNldHNcbiAgICogQHBhcmFtIHtPYmplY3R9IG5ld0ZpbHRlclxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBsYXllclxuICAgKi9cbiAgdXBkYXRlTGF5ZXJEb21haW4oZGF0YXNldHMsIG5ld0ZpbHRlcikge1xuICAgIGNvbnN0IHRhYmxlID0gdGhpcy5nZXREYXRhc2V0KGRhdGFzZXRzKTtcbiAgICBpZiAoIXRhYmxlKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKGNoYW5uZWwgPT4ge1xuICAgICAgY29uc3Qge3NjYWxlfSA9IGNoYW5uZWw7XG4gICAgICBjb25zdCBzY2FsZVR5cGUgPSB0aGlzLmNvbmZpZ1tzY2FsZV07XG5cbiAgICAgIC8vIG9yZGluYWwgZG9tYWluIGlzIGJhc2VkIG9uIGRhdGFDb250YWluZXIsIGlmIG9ubHkgZmlsdGVyIGNoYW5nZWRcbiAgICAgIC8vIG5vIG5lZWQgdG8gdXBkYXRlIG9yZGluYWwgZG9tYWluXG4gICAgICBpZiAoIW5ld0ZpbHRlciB8fCBzY2FsZVR5cGUgIT09IFNDQUxFX1RZUEVTLm9yZGluYWwpIHtcbiAgICAgICAgY29uc3Qge2RvbWFpbn0gPSBjaGFubmVsO1xuICAgICAgICBjb25zdCB1cGRhdGVkRG9tYWluID0gdGhpcy5jYWxjdWxhdGVMYXllckRvbWFpbih0YWJsZSwgY2hhbm5lbCk7XG4gICAgICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoe1tkb21haW5dOiB1cGRhdGVkRG9tYWlufSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGdldERhdGFzZXQoZGF0YXNldHMpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuZGF0YUlkID8gZGF0YXNldHNbdGhpcy5jb25maWcuZGF0YUlkXSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdmlzdWFsIGNoYW5uZWwgZmllbGQgYW5kIHNjYWxlcyBiYXNlZCBvbiBzdXBwb3J0ZWQgZmllbGQgJiBzY2FsZSB0eXBlXG4gICAqIEBwYXJhbSBjaGFubmVsXG4gICAqL1xuICB2YWxpZGF0ZVZpc3VhbENoYW5uZWwoY2hhbm5lbCkge1xuICAgIHRoaXMudmFsaWRhdGVGaWVsZFR5cGUoY2hhbm5lbCk7XG4gICAgdGhpcy52YWxpZGF0ZVNjYWxlKGNoYW5uZWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGZpZWxkIHR5cGUgYmFzZWQgb24gY2hhbm5lbFNjYWxlVHlwZVxuICAgKi9cbiAgdmFsaWRhdGVGaWVsZFR5cGUoY2hhbm5lbCkge1xuICAgIGNvbnN0IHZpc3VhbENoYW5uZWwgPSB0aGlzLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdO1xuICAgIGNvbnN0IHtmaWVsZCwgY2hhbm5lbFNjYWxlVHlwZSwgc3VwcG9ydGVkRmllbGRUeXBlc30gPSB2aXN1YWxDaGFubmVsO1xuXG4gICAgaWYgKHRoaXMuY29uZmlnW2ZpZWxkXSkge1xuICAgICAgLy8gaWYgZmllbGQgaXMgc2VsZWN0ZWQsIGNoZWNrIGlmIGZpZWxkIHR5cGUgaXMgc3VwcG9ydGVkXG4gICAgICBjb25zdCBjaGFubmVsU3VwcG9ydGVkRmllbGRUeXBlcyA9XG4gICAgICAgIHN1cHBvcnRlZEZpZWxkVHlwZXMgfHwgQ0hBTk5FTF9TQ0FMRV9TVVBQT1JURURfRklFTERTW2NoYW5uZWxTY2FsZVR5cGVdO1xuXG4gICAgICBpZiAoIWNoYW5uZWxTdXBwb3J0ZWRGaWVsZFR5cGVzLmluY2x1ZGVzKHRoaXMuY29uZmlnW2ZpZWxkXS50eXBlKSkge1xuICAgICAgICAvLyBmaWVsZCB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQsIHNldCBpdCBiYWNrIHRvIG51bGxcbiAgICAgICAgLy8gc2V0IHNjYWxlIGJhY2sgdG8gZGVmYXVsdFxuICAgICAgICB0aGlzLnVwZGF0ZUxheWVyQ29uZmlnKHtbZmllbGRdOiBudWxsfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHNjYWxlIHR5cGUgYmFzZWQgb24gYWdncmVnYXRpb25cbiAgICovXG4gIHZhbGlkYXRlU2NhbGUoY2hhbm5lbCkge1xuICAgIGNvbnN0IHZpc3VhbENoYW5uZWwgPSB0aGlzLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdO1xuICAgIGNvbnN0IHtzY2FsZSwgcmFuZ2V9ID0gdmlzdWFsQ2hhbm5lbDtcbiAgICBpZiAoXG4gICAgICAhc2NhbGUgfHxcbiAgICAgICh0aGlzLmlzQ29sb3JlZEJ5Q29sb3JDb2x1bW4ocmFuZ2UpICYmIHRoaXMuY29uZmlnW3NjYWxlXSA9PT0gU0NBTEVfVFlQRVMuaWRlbnRpdHkpXG4gICAgKSB7XG4gICAgICAvLyB2aXN1YWxDaGFubmVsIGRvZXNuJ3QgaGF2ZSBzY2FsZVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzY2FsZU9wdGlvbnMgPSB0aGlzLmdldFNjYWxlT3B0aW9ucyhjaGFubmVsKTtcbiAgICAvLyBjaGVjayBpZiBjdXJyZW50IHNlbGVjdGVkIHNjYWxlIGlzXG4gICAgLy8gc3VwcG9ydGVkLCBpZiBub3QsIGNoYW5nZSB0byBkZWZhdWx0XG4gICAgaWYgKCFzY2FsZU9wdGlvbnMuaW5jbHVkZXModGhpcy5jb25maWdbc2NhbGVdKSkge1xuICAgICAgdGhpcy51cGRhdGVMYXllckNvbmZpZyh7W3NjYWxlXTogc2NhbGVPcHRpb25zWzBdfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzY2FsZSBvcHRpb25zIGJhc2VkIG9uIGN1cnJlbnQgZmllbGRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNoYW5uZWxcbiAgICogQHJldHVybnMge3N0cmluZ1tdfVxuICAgKi9cbiAgZ2V0U2NhbGVPcHRpb25zKGNoYW5uZWwpIHtcbiAgICBjb25zdCB2aXN1YWxDaGFubmVsID0gdGhpcy52aXN1YWxDaGFubmVsc1tjaGFubmVsXTtcbiAgICBjb25zdCB7ZmllbGQsIHNjYWxlLCBjaGFubmVsU2NhbGVUeXBlfSA9IHZpc3VhbENoYW5uZWw7XG5cbiAgICByZXR1cm4gdGhpcy5jb25maWdbZmllbGRdXG4gICAgICA/IEZJRUxEX09QVFNbdGhpcy5jb25maWdbZmllbGRdLnR5cGVdLnNjYWxlW2NoYW5uZWxTY2FsZVR5cGVdXG4gICAgICA6IFt0aGlzLmdldERlZmF1bHRMYXllckNvbmZpZygpW3NjYWxlXV07XG4gIH1cblxuICB1cGRhdGVMYXllclZpc3VhbENoYW5uZWwoZGF0YXNldCwgY2hhbm5lbCkge1xuICAgIGNvbnN0IHZpc3VhbENoYW5uZWwgPSB0aGlzLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdO1xuICAgIHRoaXMudmFsaWRhdGVWaXN1YWxDaGFubmVsKGNoYW5uZWwpO1xuICAgIC8vIGNhbGN1bGF0ZSBsYXllciBjaGFubmVsIGRvbWFpblxuICAgIGNvbnN0IHVwZGF0ZWREb21haW4gPSB0aGlzLmNhbGN1bGF0ZUxheWVyRG9tYWluKGRhdGFzZXQsIHZpc3VhbENoYW5uZWwpO1xuICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoe1t2aXN1YWxDaGFubmVsLmRvbWFpbl06IHVwZGF0ZWREb21haW59KTtcbiAgfVxuXG4gIGdldFZpc3VhbENoYW5uZWxVcGRhdGVUcmlnZ2VycygpIHtcbiAgICBjb25zdCB1cGRhdGVUcmlnZ2VycyA9IHt9O1xuICAgIE9iamVjdC52YWx1ZXModGhpcy52aXN1YWxDaGFubmVscykuZm9yRWFjaCh2aXN1YWxDaGFubmVsID0+IHtcbiAgICAgIC8vIGZpZWxkIHJhbmdlIHNjYWxlIGRvbWFpblxuICAgICAgY29uc3Qge2FjY2Vzc29yLCBmaWVsZCwgc2NhbGUsIGRvbWFpbiwgcmFuZ2UsIGRlZmF1bHRWYWx1ZSwgZml4ZWR9ID0gdmlzdWFsQ2hhbm5lbDtcblxuICAgICAgdXBkYXRlVHJpZ2dlcnNbYWNjZXNzb3JdID0ge1xuICAgICAgICBbZmllbGRdOiB0aGlzLmNvbmZpZ1tmaWVsZF0sXG4gICAgICAgIFtzY2FsZV06IHRoaXMuY29uZmlnW3NjYWxlXSxcbiAgICAgICAgW2RvbWFpbl06IHRoaXMuY29uZmlnW2RvbWFpbl0sXG4gICAgICAgIFtyYW5nZV06IHRoaXMuY29uZmlnLnZpc0NvbmZpZ1tyYW5nZV0sXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogdHlwZW9mIGRlZmF1bHRWYWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IGRlZmF1bHRWYWx1ZSh0aGlzLmNvbmZpZykgOiBkZWZhdWx0VmFsdWUsXG4gICAgICAgIC4uLihmaXhlZCA/IHtbZml4ZWRdOiB0aGlzLmNvbmZpZy52aXNDb25maWdbZml4ZWRdfSA6IHt9KVxuICAgICAgfTtcbiAgICB9KTtcbiAgICByZXR1cm4gdXBkYXRlVHJpZ2dlcnM7XG4gIH1cblxuICBjYWxjdWxhdGVMYXllckRvbWFpbihkYXRhc2V0LCB2aXN1YWxDaGFubmVsKSB7XG4gICAgY29uc3Qge3NjYWxlfSA9IHZpc3VhbENoYW5uZWw7XG4gICAgY29uc3QgZmllbGQgPSB0aGlzLmNvbmZpZ1t2aXN1YWxDaGFubmVsLmZpZWxkXTtcbiAgICBpZiAoIWZpZWxkIHx8ICFzY2FsZSkge1xuICAgICAgLy8gaWYgY29sb3JGaWVsZCBvciBzaXplRmllbGQgd2VyZSBzZXQgYmFjayB0byBudWxsXG4gICAgICByZXR1cm4gZGVmYXVsdERvbWFpbjtcbiAgICB9XG5cbiAgICBjb25zdCBzY2FsZVR5cGUgPSB0aGlzLmNvbmZpZ1tzY2FsZV07XG4gICAgY29uc3QgZGF0YVNldEZpZWxkID0gZGF0YXNldC5maWVsZHMuZmluZChmID0+IGYubmFtZSA9PT0gZmllbGQubmFtZSk7XG4gICAgaWYgKCFzY2FsZVR5cGUgfHwgIWRhdGFTZXRGaWVsZCkge1xuICAgICAgLy8gaWYgbmV3IGRhdGFzZXQgZG9lc24ndCBjb250YWluIHByZXZpb3VzbHkgc2V0IGZpZWxkXG4gICAgICByZXR1cm4gZGVmYXVsdERvbWFpbjtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YXNldC5nZXRDb2x1bW5MYXllckRvbWFpbihkYXRhU2V0RmllbGQsIHNjYWxlVHlwZSkgfHwgZGVmYXVsdERvbWFpbjtcbiAgfVxuXG4gIHVwZGF0ZUhleENvbG9yRG9tYWluKGRhdGFzZXQpIHtcbiAgICBpZiAoIWRhdGFzZXQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goY2hhbm5lbCA9PiB7XG4gICAgICBjb25zdCBjaGFubmVsQ29uZmlnID0gdGhpcy5jb25maWcudmlzQ29uZmlnW2NoYW5uZWwucmFuZ2VdO1xuICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmNvbmZpZ1tjaGFubmVsLmZpZWxkXTtcblxuICAgICAgaWYgKGNoYW5uZWxDb25maWc/LnR5cGUgPT09IGhleENvbG9yKSB7XG4gICAgICAgIGNvbnN0IGRhdGFTZXRGaWVsZCA9IGRhdGFzZXQuZmllbGRzLmZpbmQoZiA9PiBmLm5hbWUgPT09IGZpZWxkLmNvbG9yQ29sdW1uKTtcbiAgICAgICAgY29uc3QgY29sb3JzID0gZGF0YXNldC5nZXRDb2x1bW5MYXllckRvbWFpbihkYXRhU2V0RmllbGQsIFNDQUxFX1RZUEVTLm9yZGluYWwpO1xuICAgICAgICB0aGlzLnVwZGF0ZUxheWVyVmlzQ29uZmlnKHtbY2hhbm5lbC5yYW5nZV06IHsuLi5jaGFubmVsQ29uZmlnLCBjb2xvcnN9fSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGNhbGN1bGF0ZUhleENvbHVtbkxlZ2VuZChkYXRhc2V0cykge1xuICAgIGNvbnN0IGRhdGFzZXQgPSB0aGlzLmdldERhdGFzZXQoZGF0YXNldHMpO1xuICAgIGlmICghZGF0YXNldHMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBsZWdlbmRTZXR0aW5ncyA9IE9iamVjdC5rZXlzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLnJlZHVjZSgobGVnZW5kcywgY2hhbm5lbCkgPT4ge1xuICAgICAgY29uc3Qge3JhbmdlLCBmaWVsZDogY2hhbm5lbEZpZWxkfSA9IHRoaXMudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF07XG4gICAgICBjb25zdCBjaGFubmVsQ29uZmlnID0gdGhpcy5jb25maWcudmlzQ29uZmlnW3JhbmdlXTtcbiAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5jb25maWdbY2hhbm5lbEZpZWxkXTtcblxuICAgICAgaWYgKGNoYW5uZWxDb25maWc/LnR5cGUgPT09IGhleENvbG9yKSB7XG4gICAgICAgIGNvbnN0IGRhdGFTZXRGaWVsZCA9IGRhdGFzZXQuZmllbGRzLmZpbmQoZiA9PiBmLm5hbWUgPT09IGZpZWxkLmNvbG9yQ29sdW1uKTtcbiAgICAgICAgY29uc3QgbGVnZW5kID0gZGF0YXNldC5jYWxjdWxhdGVMZWdlbmQoZmllbGQsIGRhdGFTZXRGaWVsZCk7XG4gICAgICAgIGxlZ2VuZHNbY2hhbm5lbF0gPSBsZWdlbmQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gbGVnZW5kcztcbiAgICB9LCB7fSk7XG4gICAgdGhpcy51cGRhdGVMYXllckxlZ2VuZChsZWdlbmRTZXR0aW5ncyk7XG4gIH1cblxuICBoYXNIb3ZlcmVkT2JqZWN0KG9iamVjdEluZm8pIHtcbiAgICByZXR1cm4gdGhpcy5pc0xheWVySG92ZXJlZChvYmplY3RJbmZvKSAmJiBvYmplY3RJbmZvLm9iamVjdCA/IG9iamVjdEluZm8ub2JqZWN0IDogbnVsbDtcbiAgfVxuXG4gIGlzTGF5ZXJIb3ZlcmVkKG9iamVjdEluZm8pIHtcbiAgICByZXR1cm4gb2JqZWN0SW5mbz8ucGlja2VkICYmIG9iamVjdEluZm8/LmxheWVyPy5wcm9wcz8uaWQgPT09IHRoaXMuaWQ7XG4gIH1cblxuICBnZXRSYWRpdXNTY2FsZUJ5Wm9vbShtYXBTdGF0ZSkge1xuICAgIGNvbnN0IHJhZGl1c0NoYW5uZWwgPSBPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLmZpbmQodmMgPT4gdmMucHJvcGVydHkgPT09ICdyYWRpdXMnKTtcblxuICAgIGlmICghcmFkaXVzQ2hhbm5lbCkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgY29uc3QgZmllbGQgPSByYWRpdXNDaGFubmVsLmZpZWxkO1xuICAgIGNvbnN0IHtyYWRpdXN9ID0gdGhpcy5jb25maWcudmlzQ29uZmlnO1xuXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiAodGhpcy5jb25maWdbZmllbGRdID8gMSA6IHJhZGl1cykgKiB0aGlzLmdldFpvb21GYWN0b3IobWFwU3RhdGUpO1xuICB9XG5cbiAgZ2V0UmFkaXVzU2NhbGUoKSB7XG4gICAgY29uc3QgcmFkaXVzQ2hhbm5lbCA9IE9iamVjdC52YWx1ZXModGhpcy52aXN1YWxDaGFubmVscykuZmluZCh2YyA9PiB2Yy5wcm9wZXJ0eSA9PT0gJ3JhZGl1cycpO1xuXG4gICAgaWYgKCFyYWRpdXNDaGFubmVsIHx8IHRoaXMuY29uZmlnW3JhZGl1c0NoYW5uZWwuZmllbGRdKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jb25maWcudmlzQ29uZmlnLnJhZGl1cztcbiAgfVxuXG4gIGdldE1heE1hcmtlclNpemUoKSB7XG4gICAgY29uc3Qge3JhZGl1c0ZpZWxkLCBzaXplRmllbGQsIHZpc0NvbmZpZ30gPSB0aGlzLmNvbmZpZztcbiAgICBjb25zdCB7cmFkaXVzUmFuZ2UsIHJhZGl1c30gPSB2aXNDb25maWc7XG4gICAgY29uc3QgZmllbGQgPSByYWRpdXNGaWVsZCB8fCBzaXplRmllbGQ7XG4gICAgcmV0dXJuIE1hdGguY2VpbCgoZmllbGQgJiYgcmFkaXVzUmFuZ2UgPyByYWRpdXNSYW5nZVsxXSA6IHJhZGl1cykpO1xuICB9XG5cbiAgc2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhKHByb3BzKSB7XG4gICAgcmV0dXJuIHByb3BzLnNvbWUocCA9PiAhdGhpcy5ub25lTGF5ZXJEYXRhQWZmZWN0aW5nUHJvcHMuaW5jbHVkZXMocCkpO1xuICB9XG5cbiAgZ2V0QnJ1c2hpbmdFeHRlbnNpb25Qcm9wcyhpbnRlcmFjdGlvbkNvbmZpZywgYnJ1c2hpbmdUYXJnZXQpIHtcbiAgICBjb25zdCB7YnJ1c2h9ID0gaW50ZXJhY3Rpb25Db25maWc7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLy8gYnJ1c2hpbmdcbiAgICAgIGF1dG9IaWdobGlnaHQ6ICFicnVzaC5lbmFibGVkLFxuICAgICAgYnJ1c2hpbmdSYWRpdXM6IGJydXNoLmNvbmZpZy5zaXplICogMTAwMCxcbiAgICAgIGJydXNoaW5nVGFyZ2V0OiBicnVzaGluZ1RhcmdldCB8fCAnc291cmNlJyxcbiAgICAgIGJydXNoaW5nRW5hYmxlZDogYnJ1c2guZW5hYmxlZFxuICAgIH07XG4gIH1cblxuICBnZXREZWZhdWx0RGVja0xheWVyUHJvcHMoe2lkeCwgZ3B1RmlsdGVyLCBtYXBTdGF0ZSwgdmlzaWJsZSwgbWFza1BvbHlnb259KSB7XG4gICAgY29uc3QgbWFza0V4dGVuc2lvblByb3BzID0gZ2V0TWFza0V4dGVuc2lvblByb3BzKG1hc2tQb2x5Z29uKTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4ubWFza0V4dGVuc2lvblByb3BzLFxuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICBpZHgsXG4gICAgICBjb29yZGluYXRlU3lzdGVtOiBDT09SRElOQVRFX1NZU1RFTS5MTkdMQVQsXG4gICAgICBwaWNrYWJsZTogdGhpcy5oYXNJbnRlcmFjdGl2aXR5LFxuICAgICAgd3JhcExvbmdpdHVkZTogdHJ1ZSxcbiAgICAgIHBhcmFtZXRlcnM6IHtkZXB0aFRlc3Q6IEJvb2xlYW4obWFwU3RhdGUuZHJhZ1JvdGF0ZSB8fCB0aGlzLmNvbmZpZy52aXNDb25maWcuZW5hYmxlM2QpfSxcbiAgICAgIGhpZGRlbjogdGhpcy5jb25maWcuaGlkZGVuLFxuICAgICAgdmlzaWJpbGl0eUJ5Wm9vbTogdGhpcy5jb25maWcudmlzaWJpbGl0eUJ5Wm9vbSxcbiAgICAgIC8vIHZpc2NvbmZpZ1xuICAgICAgb3BhY2l0eTogdGhpcy5jb25maWcudmlzQ29uZmlnLm9wYWNpdHksXG4gICAgICBoaWdobGlnaHRDb2xvcjogdGhpcy5jb25maWcuaGlnaGxpZ2h0Q29sb3IsXG4gICAgICAvLyBkYXRhIGZpbHRlcmluZ1xuICAgICAgZXh0ZW5zaW9uczogW2RhdGFGaWx0ZXJFeHRlbnNpb24sIC4uLm1hc2tFeHRlbnNpb25Qcm9wcy5leHRlbnNpb25zXSxcbiAgICAgIGZpbHRlclJhbmdlOiBncHVGaWx0ZXIgPyBncHVGaWx0ZXIuZmlsdGVyUmFuZ2UgOiB1bmRlZmluZWQsXG4gICAgICAvLyBsYXllciBzaG91bGQgYmUgdmlzaWJsZSBhbmQgaWYgc3BsaXRNYXAsIHNob3duIGluIHRvIG9uZSBvZiBwYW5lbFxuICAgICAgdmlzaWJsZTogdGhpcy5jb25maWcuaXNWaXNpYmxlICYmIHZpc2libGVcbiAgICB9O1xuICB9XG5cbiAgZ2V0RGVmYXVsdEhvdmVyTGF5ZXJQcm9wcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGAke3RoaXMuaWR9LWhvdmVyZWRgLFxuICAgICAgcGlja2FibGU6IGZhbHNlLFxuICAgICAgd3JhcExvbmdpdHVkZTogdHJ1ZSxcbiAgICAgIGNvb3JkaW5hdGVTeXN0ZW06IENPT1JESU5BVEVfU1lTVEVNLkxOR0xBVFxuICAgIH07XG4gIH1cblxuICByZW5kZXJUZXh0TGFiZWxMYXllcihcbiAgICB7Z2V0UG9zaXRpb24sIGdldFJhZGl1cywgcmFkaXVzU2NhbGUsIHVwZGF0ZVRyaWdnZXJzLCBzaGFyZWRQcm9wc30sXG4gICAgcmVuZGVyT3B0c1xuICApIHtcbiAgICBjb25zdCB7ZGF0YX0gPSByZW5kZXJPcHRzO1xuICAgIGNvbnN0IHt0ZXh0TGFiZWwsIHZpc2liaWxpdHlCeVpvb219ID0gdGhpcy5jb25maWc7XG4gICAgY29uc3QgZXh0ZW5zaW9ucyA9IFsuLi5zaGFyZWRQcm9wcy5leHRlbnNpb25zLCBjb2xsaXNpb25GaWx0ZXJFeHRlbnNpb25dO1xuXG4gICAgaWYgKCFkYXRhIHx8ICFkYXRhLnRleHRMYWJlbHMgfHwgIWRhdGEudGV4dExhYmVsc1swXSB8fCAhZGF0YS50ZXh0TGFiZWxzWzBdLmdldFRleHQpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBbbWFpbkxhYmVsLCBzZWNvbmRhcnlMYWJlbF0gPSB0ZXh0TGFiZWw7XG4gICAgY29uc3Qge1xuICAgICAgYWxpZ25tZW50LFxuICAgICAgYW5jaG9yLFxuICAgICAgY29sb3I6IGdldENvbG9yLFxuICAgICAgZmllbGQ6IG1haW5GaWVsZCxcbiAgICAgIG91dGxpbmVDb2xvcixcbiAgICAgIHNpemU6IHNpemVTY2FsZVxuICAgIH0gPSBtYWluTGFiZWw7XG4gICAgY29uc3Qge1xuICAgICAgY29sb3I6IGdldFNlY29uZGFyeUNvbG9yLFxuICAgICAgZmllbGQ6IHNlY29uZGFyeUZpZWxkLFxuICAgICAgb3V0bGluZUNvbG9yOiBzZWNvbmRhcnlPdXRsaW5lQ29sb3IsXG4gICAgICBzaXplOiBzZWNvbmRhcnlTaXplU2NhbGVcbiAgICB9ID0gc2Vjb25kYXJ5TGFiZWwgfHwge307XG5cbiAgICByZXR1cm4gW1xuICAgICAgbmV3IFBvaW50TGFiZWxMYXllcih7XG4gICAgICAgIC4uLnNoYXJlZFByb3BzLFxuXG4gICAgICAgIC8vIFJlY3JlYXRlIGxheWVyIHdoZW4gbGFiZWxzIGNoYW5nZSBvdGhlcndpc2UgcmVuZGVyaW5nIGJyZWFrc1xuICAgICAgICAvLyBUT0RPIGNvdWxkIGJlIG1vcmUgZWZmaWNpZW50IHdpdGggdXBkYXRlVHJpZ2dlcnM/XG4gICAgICAgIGlkOiBgJHt0aGlzLmlkfS0ke21haW5GaWVsZD8ubmFtZX0tJHtzZWNvbmRhcnlGaWVsZD8ubmFtZX0tbGFiZWxgLFxuICAgICAgICBkYXRhOiBkYXRhLmRhdGEsXG4gICAgICAgIHZpc2liaWxpdHlCeVpvb20sXG4gICAgICAgIGV4dGVuc2lvbnMsXG5cbiAgICAgICAgY2hhcmFjdGVyU2V0OiAnYXV0bycsXG4gICAgICAgIGNvbGxpc2lvbkVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGNvbGxpc2lvbkdyb3VwOiBgJHt0aGlzLmlkfS1sYWJlbHNgLFxuXG4gICAgICAgIGdldFRleHQ6IGRhdGEudGV4dExhYmVsc1swXS5nZXRUZXh0LFxuICAgICAgICBnZXRDb2xvcixcbiAgICAgICAgc2l6ZVNjYWxlLFxuICAgICAgICBvdXRsaW5lQ29sb3IsXG5cbiAgICAgICAgLi4uKHNlY29uZGFyeUZpZWxkICYmIHtcbiAgICAgICAgICBnZXRTZWNvbmRhcnlUZXh0OiBkYXRhLnRleHRMYWJlbHNbMV0uZ2V0VGV4dCxcbiAgICAgICAgICBnZXRTZWNvbmRhcnlDb2xvcixcbiAgICAgICAgICBzZWNvbmRhcnlTaXplU2NhbGUsXG4gICAgICAgICAgc2Vjb25kYXJ5T3V0bGluZUNvbG9yXG4gICAgICAgIH0pLFxuXG4gICAgICAgIC8vIFBvc2l0aW9uXG4gICAgICAgIGdldFBvc2l0aW9uLFxuICAgICAgICBnZXRSYWRpdXMsXG4gICAgICAgIHJhZGl1c1NjYWxlLFxuICAgICAgICBnZXRUZXh0QW5jaG9yOiBhbmNob3IsXG4gICAgICAgIGdldEFsaWdubWVudEJhc2VsaW5lOiBhbGlnbm1lbnQsXG5cbiAgICAgICAgLy8gU3R5bGVcbiAgICAgICAgZm9udEZhbWlseTogJ0ludGVyLCBzYW5zJyxcbiAgICAgICAgZm9udFNldHRpbmdzOiB7c2RmOiB0cnVlfSxcbiAgICAgICAgZm9udFdlaWdodDogNTAwLFxuICAgICAgICBvdXRsaW5lV2lkdGg6IDQsXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAvLyB0ZXh0IHdpbGwgYWx3YXlzIHNob3cgb24gdG9wIG9mIGFsbCBsYXllcnNcbiAgICAgICAgICBkZXB0aFRlc3Q6IGZhbHNlXG4gICAgICAgIH0sXG5cbiAgICAgICAgZ2V0RmlsdGVyVmFsdWU6IGRhdGEuZ2V0RmlsdGVyVmFsdWUsXG4gICAgICAgIHVwZGF0ZVRyaWdnZXJzOiB7XG4gICAgICAgICAgLi4udXBkYXRlVHJpZ2dlcnMsXG4gICAgICAgICAgZ2V0VGV4dDogbWFpbkZpZWxkPy5uYW1lLFxuICAgICAgICAgIGdldENvbG9yOiBtYWluRmllbGQ/LmNvbG9yLFxuICAgICAgICAgIGdldFRleHRBbmNob3I6IG1haW5MYWJlbC5hbmNob3IsXG4gICAgICAgICAgZ2V0QWxpZ25tZW50QmFzZWxpbmU6IG1haW5MYWJlbC5hbGlnbm1lbnQsXG4gICAgICAgICAgZ2V0U2Vjb25kYXJ5VGV4dDogc2Vjb25kYXJ5RmllbGQ/Lm5hbWVcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICBdO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBkZWNrLmdsIGBJY29uTGF5ZXJgIFwiYXV0b1BhY2tcIiBtb2RlIGFjY2Vzc29yIGZvciBjdXN0b20gbWFya2Vycy5cbiAgICpcbiAgICogQHBhcmFtIHsqfSBpY29uVXJsQWNjZXNzb3IgZGVjay5nbCBhY2Nlc3NvciAob3IgdmFsdWUpIHRoYXQgcmVzb2x2ZXMgdG8gVVJMIG9mIGljb24gZm9yIGdpdmVuIHJvd1xuICAgKiBAcmV0dXJucyBkZWNrLmdsIGFjY2Vzc29yIHRoYXQgcmV0dXJucyBVbnBhY2tlZEljb24gcmVhZHkgdG8gY29uc3VtZSBieSBJY29uTGF5ZXJcbiAgICovXG4gIGdldEN1c3RvbU1hcmtlckljb25BY2Nlc3NvcihpY29uVXJsQWNjZXNzb3IsIG1hc2sgPSB0cnVlKSB7XG4gICAgY29uc3QgbWF4SWNvblNpemUgPSB0aGlzLmdldE1heE1hcmtlclNpemUoKTtcblxuICAgIHJldHVybiBkID0+IHtcbiAgICAgIGNvbnN0IHdhbnRlZFVybCA9XG4gICAgICAgICh0eXBlb2YgaWNvblVybEFjY2Vzc29yID09PSAnZnVuY3Rpb24nKSA/IGljb25VcmxBY2Nlc3NvcihkKSA6IGljb25VcmxBY2Nlc3NvcjtcbiAgICAgIGNvbnN0IGljb25PayA9IEJvb2xlYW4od2FudGVkVXJsKTtcbiAgICAgIG1hc2sgPSBpY29uT2sgPyBtYXNrIDogdHJ1ZTtcbiAgICAgIGNvbnN0IHVybCA9IGljb25PayA/IHdhbnRlZFVybCA6IEZBTExCQUNLX0lDT047XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogYCR7dXJsfUBAJHttYXhJY29uU2l6ZX1AJHttYXNrID8gJ20nIDogJ2MnfWAsXG4gICAgICAgIHVybCxcbiAgICAgICAgd2lkdGg6IG1heEljb25TaXplLFxuICAgICAgICBoZWlnaHQ6IG1heEljb25TaXplLFxuICAgICAgICBtYXNrXG4gICAgICB9O1xuICAgIH07XG4gIH1cblxuICBjYWxjdWxhdGVEYXRhQXR0cmlidXRlKGtlcGxlclRhYmxlLCBnZXRQb3NpdGlvbikge1xuICAgIC8vIGltcGxlbWVudGVkIGluIHN1YmNsYXNzZXNcbiAgICByZXR1cm4gW107XG4gIH1cblxuICB1cGRhdGVMYXllck1ldGEoZGF0YUNvbnRhaW5lciwgZ2V0UG9zaXRpb24pIHtcbiAgICAvLyBpbXBsZW1lbnRlZCBpbiBzdWJjbGFzc2VzXG4gIH1cblxuICBnZXRQb3NpdGlvbkFjY2Vzc29yKGRhdGFDb250YWluZXIpIHtcbiAgICAvLyBpbXBsZW1lbnRlZCBpbiBzdWJjbGFzc2VzXG4gICAgcmV0dXJuICgpID0+IG51bGw7XG4gIH1cblxuICBnZXRIZXhDb2x1bW4ocmFuZ2UpIHtcbiAgICBjb25zdCBmaWVsZCA9IE9iamVjdC52YWx1ZXModGhpcy52aXN1YWxDaGFubmVscyk/LmZpbmQodmFsdWUgPT4gdmFsdWUucmFuZ2UgPT09IHJhbmdlKT8uZmllbGQ7XG4gICAgaWYgKGZpZWxkKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb25maWdbZmllbGRdLmNvbG9yQ29sdW1uO1xuICAgIH1cbiAgfVxuXG4gIGlzQ29sb3JlZEJ5Q29sb3JDb2x1bW4ocmFuZ2UpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcudmlzQ29uZmlnW3JhbmdlXT8uaGV4Q29sb3I7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGF5ZXI7XG4iXX0=
|
|
1827
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sYXllcnMvYmFzZS1sYXllci5qcyJdLCJuYW1lcyI6WyJnZW5lcmF0ZUNvbG9yIiwiTEFZRVJfSURfTEVOR1RIIiwiRkFMTEJBQ0tfSUNPTiIsIk1BWF9TQU1QTEVfU0laRSIsImRlZmF1bHREb21haW4iLCJkYXRhRmlsdGVyRXh0ZW5zaW9uIiwiRGF0YUZpbHRlckV4dGVuc2lvbiIsImZpbHRlclNpemUiLCJNQVhfR1BVX0ZJTFRFUlMiLCJjb2xsaXNpb25GaWx0ZXJFeHRlbnNpb24iLCJDb2xsaXNpb25GaWx0ZXJFeHRlbnNpb24iLCJkZWZhdWx0RGF0YUFjY2Vzc29yIiwiZGMiLCJkIiwiZGVmYXVsdEdldEZpZWxkVmFsdWUiLCJmaWVsZCIsInZhbHVlQWNjZXNzb3IiLCJzY2FsZUlkZW50aXR5IiwidiIsIk9WRVJMQVlfVFlQRSIsImRlY2tnbCIsIm1hcGJveGdsIiwibGF5ZXJDb2xvcnMiLCJPYmplY3QiLCJ2YWx1ZXMiLCJEYXRhVml6Q29sb3JzIiwibWFwIiwiaGV4VG9SZ2IiLCJpbmRleCIsImxlbmd0aCIsImNvbG9yTWFrZXIiLCJMYXllciIsInByb3BzIiwiaWQiLCJtZXRhIiwibGVnZW5kU2V0dGluZ3MiLCJ2aXNDb25maWdTZXR0aW5ncyIsIl9pbnRlcmFjdGl2aXR5U2V0dGluZ3MiLCJjb25maWciLCJnZXREZWZhdWx0TGF5ZXJDb25maWciLCJjb2x1bW5zIiwiZ2V0TGF5ZXJDb2x1bW5zIiwiRGVmYXVsdExheWVySWNvbiIsInR5cGUiLCJjb2xvciIsInByb3BlcnR5Iiwic2NhbGUiLCJkb21haW4iLCJyYW5nZSIsImtleSIsImNoYW5uZWxTY2FsZVR5cGUiLCJDSEFOTkVMX1NDQUxFUyIsIm51bGxWYWx1ZSIsIk5PX1ZBTFVFX0NPTE9SIiwiZGVmYXVsdFZhbHVlIiwic2l6ZSIsImxhdCIsInBhaXIiLCJmaWVsZFBhaXJLZXkiLCJsbmciLCJsYXQwIiwibG5nMCIsImxhdDEiLCJsbmcxIiwiaW50ZXJhY3Rpdml0eVNldHRpbmdzIiwiQm9vbGVhbiIsImhvdmVyIiwiZmllbGRzIiwiY2xpY2siLCJoYXNUb29sdGlwIiwiZW5hYmxlZCIsImRhdGFJZCIsInZpc2liaWxpdHlCeVpvb20iLCJtaW4iLCJaT09NX0xFVkVMX0xJTUlUUyIsIm1heCIsImxhYmVsIiwiREVGQVVMVF9MQVlFUl9MQUJFTCIsIm5leHQiLCJ2YWx1ZSIsImlzVmlzaWJsZSIsImlzQ29uZmlnQWN0aXZlIiwiaGlnaGxpZ2h0Q29sb3IiLCJERUZBVUxUX0hJR0hMSUdIVF9DT0xPUiIsImhpZGRlbiIsImNvbG9yRmllbGQiLCJjb2xvckRvbWFpbiIsImNvbG9yU2NhbGUiLCJTQ0FMRV9UWVBFUyIsInF1YW50aWxlIiwic2l6ZURvbWFpbiIsInNpemVTY2FsZSIsImxpbmVhciIsInNpemVGaWVsZCIsInJhZGl1c0ZpZWxkIiwidmlzQ29uZmlnIiwidGV4dExhYmVsIiwiREVGQVVMVF9URVhUX0xBQkVMIiwiY29sb3JVSSIsIkRFRkFVTFRfQ09MT1JfVUkiLCJjb2xvclJhbmdlIiwiYW5pbWF0aW9uIiwidmlzdWFsQ2hhbm5lbHMiLCJtZWFzdXJlIiwiZGlzcGxheU5hbWUiLCJuYW1lIiwiZGVmYXVsdE1lYXN1cmUiLCJ1cGRhdGUiLCJmaWVsZElkeCIsImNvbHVtblBhaXJzIiwicGFydG5lcktleSIsInBhcnRuZXJGaWVsZFBhaXJLZXkiLCJ6b29tIiwiem9vbU9mZnNldCIsIk1hdGgiLCJwb3ciLCJlbmFibGVFbGV2YXRpb25ab29tRmFjdG9yIiwiZGF0YXNldHMiLCJmaWx0ZXJlZEluZGV4Iiwib2JqZWN0IiwiZGF0YUNvbnRhaW5lciIsInJvdyIsImNvbmZpZ1RvQ29weSIsInNoYWxsb3dDb3B5IiwiY29uY2F0Iiwibm90VG9Db3B5IiwiZm9yRWFjaCIsImdyb3VwIiwicHVzaCIsImN1cnJlbnRDb25maWciLCJjb3BpZWQiLCJjb3B5TGF5ZXJDb25maWciLCJ1cGRhdGVMYXllckNvbmZpZyIsImtleXMiLCJjaGFubmVsIiwidmFsaWRhdGVWaXN1YWxDaGFubmVsIiwiaW5jbHVkZXMiLCJsYXllclZpc0NvbmZpZ3MiLCJpdGVtIiwiTEFZRVJfVklTX0NPTkZJR1MiLCJldmVyeSIsInAiLCJoYXNPd25Qcm9wZXJ0eSIsImNvbHVtblZhbGlkYXRvcnMiLCJyZXF1aXJlZCIsInJlcXVpcmVkTGF5ZXJDb2x1bW5zIiwicmVkdWNlIiwiYWNjdSIsInZhbGlkYXRvciIsIm9wdGlvbmFsIiwib3B0aW9uYWxDb2x1bW5zIiwibmV3Q29uZmlnIiwibmV3VmlzQ29uZmlnIiwicHJvcCIsInByZXZpb3VzIiwiY29sb3JVSVByb3AiLCJlbnRyaWVzIiwiaXNDb2xvclJhbmdlIiwiY29sb3JzIiwiaGV4Q29sb3IiLCJ1cGRhdGVDb2xvclVJQnlDb2xvclJhbmdlIiwidXBkYXRlQ29sb3JSYW5nZUJ5Q29sb3JVSSIsInVwZGF0ZUN1c3RvbVBhbGV0dGUiLCJjb2xvclJhbmdlQ29uZmlnIiwiY3VzdG9tIiwiY3VzdG9tUGFsZXR0ZSIsInNob3dEcm9wZG93biIsInN0ZXBzIiwicmV2ZXJzZWQiLCJoZXhDb2x1bW4iLCJnZXRIZXhDb2x1bW4iLCJpc0hleENvbHVtbiIsImlzQ29sb3JlZEJ5Q29sb3JDb2x1bW4iLCJzaG91bGRVcGRhdGUiLCJzb21lIiwic2FtZUdyb3VwIiwiQ09MT1JfUkFOR0VTIiwiZmlsdGVyIiwiY3IiLCJmaW5kIiwiY29sb3JNYXAiLCJ1cGRhdGVDb2xvck1hcCIsInVwZGF0ZUxheWVyVmlzQ29uZmlnIiwidXBkYXRlQ2F0ZWdvcnlDb2xvck1hcCIsInVwZGF0ZU51bWVyaWNDb2xvck1hcCIsImFzc2lnbmVkQ2F0ZWdvcmllcyIsIm5ld0NvbG9yTWFwIiwic2xpY2UiLCJjTWFwIiwidW5hc3NpZ25lZENvbG9ycyIsImNhdGVnb3J5IiwiY29sb3JNYXBWYWx1ZXMiLCJjIiwibWF4VmFsdWUiLCJwcmV2VmFsdWUiLCJzdGVwIiwiaSIsImxheWVyRGF0YSIsImRhdGEiLCJoYXNBbGxDb2x1bW5zIiwiaGFzTGF5ZXJEYXRhIiwicmVuZGVyTGF5ZXIiLCJfIiwiQXJyYXkiLCJpc0FycmF5IiwiTWFwIiwiayIsInNldCIsIlNDQUxFX0ZVTkMiLCJmcm9tIiwidW5rbm93biIsIlVOS05PV05fQ09MT1IiLCJnZXRWaXNDaGFubmVsU2NhbGUiLCJmYWxsYmFja0ljb24iLCJ1bmtub3duVmFsdWUiLCJtYXBwaW5nIiwib3RoZXJzTWFya2VyIiwibWFya2VyTWFwIiwibWFya2VyVXJsIiwiZGF0YUFjY2Vzc29yIiwiYXR0cmlidXRlQWNjZXNzb3JzIiwiZml4ZWQiLCJhY2Nlc3NvciIsImdldEF0dHJpYnV0ZVZhbHVlIiwiYWdncmVnYXRpb24iLCJzaG91bGRHZXRTY2FsZSIsImlkZW50aXR5IiwiYXJncyIsImlzRml4ZWQiLCJmaWVsZENvbmZpZyIsImFnZ3JlZ2F0aW9uVmFsdWUiLCJzY2FsZUZ1bmN0aW9uIiwiZ2V0Q29sb3JTY2FsZSIsImN1c3RvbU1hcmtlciIsImdldEN1c3RvbU1hcmtlcnNTY2FsZSIsImN1c3RvbU1hcmtlcnNVcmwiLCJnZXRFbmNvZGVkQ2hhbm5lbFZhbHVlIiwiX2FnZ3JlZ2F0aW9uIiwiQ29uc29sZSIsIndhcm4iLCJvcmRpbmFsIiwiZG9tYWluSXNJbmZpbml0ZSIsIkluZmluaXR5Iiwic2NhbGVGYWN0b3J5IiwicmVzdWx0IiwiZ2V0UG9zaXRpb24iLCJzYW1wbGVEYXRhIiwibnVtUm93cyIsInBvaW50cyIsIm1hcEluZGV4IiwibGF0Qm91bmRzIiwibG5nQm91bmRzIiwiZGF0YVVwZGF0ZVRyaWdnZXJzIiwidHJpZ2dlckNoYW5nZWQiLCJfb2xkRGF0YVVwZGF0ZVRyaWdnZXJzIiwiZ2V0VmFsdWUiLCJjb2xvckNvbHVtblZhbHVlIiwiY2hhbm5lbENvbmZpZyIsImNoYW5uZWxGaWVsZCIsImNvbHVtbkZpZWxkIiwiY29sb3JDb2x1bW4iLCJjb2xvckNvbHVtbklkeCIsInZhbHVlQXQiLCJhdHRyaWJ1dGVWYWx1ZSIsIkFMTF9GSUVMRF9UWVBFUyIsInRpbWVzdGFtcCIsIkRhdGUiLCJzZXR0aW5ncyIsImFsbERhdGEiLCJnZXREYXRhIiwiZGF0YXNldElkIiwiZ2V0TWV0YSIsInRsIiwib2xkTGF5ZXJEYXRhIiwiZGF0YXNldCIsImdldERhdGFzZXQiLCJ1cGRhdGVWaXN1YWxDaGFubmVsRmllbGRzIiwidXBkYXRlSGV4Q29sb3JEb21haW4iLCJnZXRQb3NpdGlvbkFjY2Vzc29yIiwiZ2V0RGF0YVVwZGF0ZVRyaWdnZXJzIiwiZ2V0Q2hhbmdlZFRyaWdnZXJzIiwidXBkYXRlTGF5ZXJNZXRhIiwiY2FsY3VsYXRlRGF0YUF0dHJpYnV0ZSIsIm9sZEZpZWxkIiwiaXNVc2luZ0hleENvbG9yQ29kZSIsIm5ld0RhdGFTZXRGaWVsZCIsImZkIiwibmV3RmlsdGVyIiwidGFibGUiLCJzY2FsZVR5cGUiLCJ1cGRhdGVkRG9tYWluIiwiY2FsY3VsYXRlTGF5ZXJEb21haW4iLCJ2YWxpZGF0ZUZpZWxkVHlwZSIsInZhbGlkYXRlU2NhbGUiLCJ2aXN1YWxDaGFubmVsIiwic3VwcG9ydGVkRmllbGRUeXBlcyIsImNoYW5uZWxTdXBwb3J0ZWRGaWVsZFR5cGVzIiwiQ0hBTk5FTF9TQ0FMRV9TVVBQT1JURURfRklFTERTIiwic2NhbGVPcHRpb25zIiwiZ2V0U2NhbGVPcHRpb25zIiwiRklFTERfT1BUUyIsInVwZGF0ZVRyaWdnZXJzIiwiZGF0YVNldEZpZWxkIiwiZiIsImdldENvbHVtbkxheWVyRG9tYWluIiwibGVnZW5kcyIsImxlZ2VuZCIsImNhbGN1bGF0ZUxlZ2VuZCIsInVwZGF0ZUxheWVyTGVnZW5kIiwib2JqZWN0SW5mbyIsImlzTGF5ZXJIb3ZlcmVkIiwicGlja2VkIiwibGF5ZXIiLCJtYXBTdGF0ZSIsInJhZGl1c0NoYW5uZWwiLCJ2YyIsInJhZGl1cyIsImdldFpvb21GYWN0b3IiLCJyYWRpdXNSYW5nZSIsImNlaWwiLCJub25lTGF5ZXJEYXRhQWZmZWN0aW5nUHJvcHMiLCJpbnRlcmFjdGlvbkNvbmZpZyIsImJydXNoaW5nVGFyZ2V0IiwiYnJ1c2giLCJhdXRvSGlnaGxpZ2h0IiwiYnJ1c2hpbmdSYWRpdXMiLCJicnVzaGluZ0VuYWJsZWQiLCJpZHgiLCJncHVGaWx0ZXIiLCJ2aXNpYmxlIiwibWFza1BvbHlnb24iLCJtYXNrRXh0ZW5zaW9uUHJvcHMiLCJjb29yZGluYXRlU3lzdGVtIiwiQ09PUkRJTkFURV9TWVNURU0iLCJMTkdMQVQiLCJwaWNrYWJsZSIsImhhc0ludGVyYWN0aXZpdHkiLCJ3cmFwTG9uZ2l0dWRlIiwicGFyYW1ldGVycyIsImRlcHRoVGVzdCIsImRyYWdSb3RhdGUiLCJlbmFibGUzZCIsIm9wYWNpdHkiLCJleHRlbnNpb25zIiwiZmlsdGVyUmFuZ2UiLCJ1bmRlZmluZWQiLCJyZW5kZXJPcHRzIiwiZ2V0UmFkaXVzIiwicmFkaXVzU2NhbGUiLCJzaGFyZWRQcm9wcyIsInRleHRMYWJlbHMiLCJnZXRUZXh0IiwibWFpbkxhYmVsIiwic2Vjb25kYXJ5TGFiZWwiLCJhbGlnbm1lbnQiLCJhbmNob3IiLCJnZXRDb2xvciIsIm1haW5GaWVsZCIsIm91dGxpbmVDb2xvciIsImdldFNlY29uZGFyeUNvbG9yIiwic2Vjb25kYXJ5RmllbGQiLCJzZWNvbmRhcnlPdXRsaW5lQ29sb3IiLCJzZWNvbmRhcnlTaXplU2NhbGUiLCJQb2ludExhYmVsTGF5ZXIiLCJjaGFyYWN0ZXJTZXQiLCJjb2xsaXNpb25FbmFibGVkIiwiY29sbGlzaW9uR3JvdXAiLCJnZXRTZWNvbmRhcnlUZXh0IiwiZ2V0VGV4dEFuY2hvciIsImdldEFsaWdubWVudEJhc2VsaW5lIiwiZm9udEZhbWlseSIsImZvbnRTZXR0aW5ncyIsInNkZiIsImZvbnRXZWlnaHQiLCJvdXRsaW5lV2lkdGgiLCJnZXRGaWx0ZXJWYWx1ZSIsImljb25VcmxBY2Nlc3NvciIsIm1hc2siLCJtYXhJY29uU2l6ZSIsImdldE1heE1hcmtlclNpemUiLCJ3YW50ZWRVcmwiLCJpY29uT2siLCJ1cmwiLCJ3aWR0aCIsImhlaWdodCIsImtlcGxlclRhYmxlIiwiZm91bmRMYXllcnMiLCJkZWZhdWx0RmllbGRzIiwiYWxsRmllbGRzIiwicmVxdWlyZWRDb2x1bW5zIiwicHJldiIsInJlcXVpcmVkRmllbGRzIiwiZ2V0QWxsUG9zc2libGVDb2x1bW5QYXJpcyIsImFsbEtleXMiLCJwb2ludGVycyIsImNvdW50UGVyS2V5IiwicGFpcnMiLCJpbmNyZW1lbnRQb2ludGVycyIsIm5ld1BhaXIiLCJjdXVyIiwicHRzIiwiY291bnRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9CQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFZQTs7QUFDQTs7QUFDQTs7QUFRQTs7QUFFQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7Ozs7O3dEQTZCVUEsYTs7QUEzQlY7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNQyxlQUFlLEdBQUcsQ0FBeEIsQyxDQUVQOzs7QUFDQSxJQUFNQyxhQUFhLEdBQ2pCLDBMQURGO0FBR0EsSUFBTUMsZUFBZSxHQUFHLElBQXhCO0FBQ0EsSUFBTUMsYUFBYSxHQUFHLENBQUMsQ0FBRCxFQUFJLENBQUosQ0FBdEI7QUFDQSxJQUFNQyxtQkFBbUIsR0FBRyxJQUFJQywrQkFBSixDQUF3QjtBQUFDQyxFQUFBQSxVQUFVLEVBQUVDO0FBQWIsQ0FBeEIsQ0FBNUI7QUFDQSxJQUFNQyx3QkFBd0IsR0FBRyxJQUFJQyxvQ0FBSixFQUFqQzs7QUFFQSxJQUFNQyxtQkFBbUIsR0FBRyxTQUF0QkEsbUJBQXNCLENBQUFDLEVBQUU7QUFBQSxTQUFJLFVBQUFDLENBQUM7QUFBQSxXQUFJQSxDQUFKO0FBQUEsR0FBTDtBQUFBLENBQTlCOztBQUNBLElBQU1DLG9CQUFvQixHQUFHLFNBQXZCQSxvQkFBdUIsQ0FBQ0MsS0FBRCxFQUFRRixDQUFSO0FBQUEsU0FBY0UsS0FBSyxDQUFDQyxhQUFOLENBQW9CSCxDQUFwQixDQUFkO0FBQUEsQ0FBN0I7O0FBQ0EsSUFBTUksYUFBYSxHQUFHLFNBQWhCQSxhQUFnQixDQUFBQyxDQUFDO0FBQUEsU0FBSUEsQ0FBSjtBQUFBLENBQXZCOztBQUVPLElBQU1DLFlBQVksR0FB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QjtBQUNEOztBQUVELGFBQU9nWCxLQUFQO0FBQ0Q7OztXQUVELGtCQUFnQjVNLENBQWhCLEVBQW1CO0FBQ2pCLGFBQU8sMEJBQVNBLENBQVQsQ0FBUDtBQUNEOzs7OztlQStyQ1lqSyxLIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIyIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IHtjb25zb2xlIGFzIENvbnNvbGV9IGZyb20gJ2dsb2JhbC93aW5kb3cnO1xuaW1wb3J0IGtleW1pcnJvciBmcm9tICdrZXltaXJyb3InO1xuaW1wb3J0IHtDb2xsaXNpb25GaWx0ZXJFeHRlbnNpb24sIERhdGFGaWx0ZXJFeHRlbnNpb259IGZyb20gJ0BkZWNrLmdsL2V4dGVuc2lvbnMnO1xuaW1wb3J0IHtDT09SRElOQVRFX1NZU1RFTSwgTGF5ZXIgYXMgRGVja0xheWVyfSBmcm9tICdAZGVjay5nbC9jb3JlJztcbmltcG9ydCB7X1BvaW50TGFiZWxMYXllciBhcyBQb2ludExhYmVsTGF5ZXJ9IGZyb20gJ0BkZWNrLmdsL2NhcnRvJztcbmltcG9ydCBEZWZhdWx0TGF5ZXJJY29uIGZyb20gJy4vZGVmYXVsdC1sYXllci1pY29uJztcbmltcG9ydCB7ZGlmZlVwZGF0ZVRyaWdnZXJzfSBmcm9tICcuL2xheWVyLXVwZGF0ZSc7XG5cbmltcG9ydCB7XG4gIEFMTF9GSUVMRF9UWVBFUyxcbiAgTk9fVkFMVUVfQ09MT1IsXG4gIFNDQUxFX1RZUEVTLFxuICBDSEFOTkVMX1NDQUxFUyxcbiAgRklFTERfT1BUUyxcbiAgU0NBTEVfRlVOQyxcbiAgQ0hBTk5FTF9TQ0FMRV9TVVBQT1JURURfRklFTERTLFxuICBNQVhfR1BVX0ZJTFRFUlMsXG4gIFVOS05PV05fQ09MT1IsXG4gIFpPT01fTEVWRUxfTElNSVRTXG59IGZyb20gJ2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzJztcbmltcG9ydCB7Q09MT1JfUkFOR0VTLCBoZXhDb2xvcn0gZnJvbSAnY29uc3RhbnRzL2NvbG9yLXJhbmdlcyc7XG5pbXBvcnQge0RhdGFWaXpDb2xvcnN9IGZyb20gJ2NvbnN0YW50cy9jdXN0b20tY29sb3ItcmFuZ2VzJztcbmltcG9ydCB7XG4gIExBWUVSX1ZJU19DT05GSUdTLFxuICBERUZBVUxUX1RFWFRfTEFCRUwsXG4gIERFRkFVTFRfQ09MT1JfVUksXG4gIERFRkFVTFRfSElHSExJR0hUX0NPTE9SLFxuICBERUZBVUxUX0xBWUVSX0xBQkVMXG59IGZyb20gJy4vbGF5ZXItZmFjdG9yeSc7XG5cbmltcG9ydCB7Z2VuZXJhdGVIYXNoSWQsIGlzUGxhaW5PYmplY3R9IGZyb20gJ3V0aWxzL3V0aWxzJztcblxuaW1wb3J0IHtnZXRMYXRMbmdCb3VuZHMsIG5vdE51bGxvclVuZGVmaW5lZH0gZnJvbSAndXRpbHMvZGF0YS11dGlscyc7XG5pbXBvcnQge2dldFNhbXBsZURhdGF9IGZyb20gJ3V0aWxzL3RhYmxlLXV0aWxzL2RhdGEtY29udGFpbmVyLXV0aWxzJztcblxuaW1wb3J0IHtoZXhUb1JnYiwgZ2V0Q29sb3JHcm91cEJ5TmFtZSwgcmV2ZXJzZUNvbG9yUmFuZ2V9IGZyb20gJ3V0aWxzL2NvbG9yLXV0aWxzJztcbmltcG9ydCB7Z2V0TWFza0V4dGVuc2lvblByb3BzfSBmcm9tICd1dGlscy9sYXllci11dGlscyc7XG5pbXBvcnQge3NjYWxlT3JkaW5hbH0gZnJvbSAnZDMtc2NhbGUnO1xuXG4vKiogQHR5cGVkZWYge2ltcG9ydCgnLi9pbmRleCcpLkxheWVyfSBMYXllckNsYXNzfSAqL1xuXG4vKipcbiAqIEFwcHJveC4gbnVtYmVyIG9mIHBvaW50cyB0byBzYW1wbGUgaW4gYSBsYXJnZSBkYXRhIHNldFxuICogQHR5cGUge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IExBWUVSX0lEX0xFTkdUSCA9IDY7XG5cbi8vIE5vdGUsIHRoaXMgaXMgaXMgU1ZHIG9mIHNvbGlkIGNpcmNsZSBlbmNvZGVkIGFzIGRhdGEtdXJpXG5jb25zdCBGQUxMQkFDS19JQ09OID1cbiAgJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxQSE4yWnlCMmFXVjNRbTk0UFNJd0lEQWdNVEF3SURFd01DSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklqNE5DaUFnUEdOcGNtTnNaU0JqZUQwaU5UQWlJR041UFNJMU1DSWdjajBpTlRBaUx6NE5Dand2YzNablBnPT0nO1xuXG5jb25zdCBNQVhfU0FNUExFX1NJWkUgPSA1MDAwO1xuY29uc3QgZGVmYXVsdERvbWFpbiA9IFswLCAxXTtcbmNvbnN0IGRhdGFGaWx0ZXJFeHRlbnNpb24gPSBuZXcgRGF0YUZpbHRlckV4dGVuc2lvbih7ZmlsdGVyU2l6ZTogTUFYX0dQVV9GSUxURVJTfSk7XG5jb25zdCBjb2xsaXNpb25GaWx0ZXJFeHRlbnNpb24gPSBuZXcgQ29sbGlzaW9uRmlsdGVyRXh0ZW5zaW9uKCk7XG5cbmNvbnN0IGRlZmF1bHREYXRhQWNjZXNzb3IgPSBkYyA9PiBkID0+IGQ7XG5jb25zdCBkZWZhdWx0R2V0RmllbGRWYWx1ZSA9IChmaWVsZCwgZCkgPT4gZmllbGQudmFsdWVBY2Nlc3NvcihkKTtcbmNvbnN0IHNjYWxlSWRlbnRpdHkgPSB2ID0+IHY7XG5cbmV4cG9ydCBjb25zdCBPVkVSTEFZX1RZUEUgPSBrZXltaXJyb3Ioe1xuICBkZWNrZ2w6IG51bGwsXG4gIG1hcGJveGdsOiBudWxsXG59KTtcblxuZXhwb3J0IGNvbnN0IGxheWVyQ29sb3JzID0gT2JqZWN0LnZhbHVlcyhEYXRhVml6Q29sb3JzKS5tYXAoaGV4VG9SZ2IpO1xuZnVuY3Rpb24qIGdlbmVyYXRlQ29sb3IoKSB7XG4gIGxldCBpbmRleCA9IDA7XG4gIHdoaWxlIChpbmRleCA8IGxheWVyQ29sb3JzLmxlbmd0aCArIDEpIHtcbiAgICBpZiAoaW5kZXggPT09IGxheWVyQ29sb3JzLmxlbmd0aCkge1xuICAgICAgaW5kZXggPSAwO1xuICAgIH1cbiAgICB5aWVsZCBsYXllckNvbG9yc1tpbmRleCsrXTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgY29sb3JNYWtlciA9IGdlbmVyYXRlQ29sb3IoKTtcblxuLyoqIEB0eXBlIHtMYXllckNsYXNzfSAqL1xuY2xhc3MgTGF5ZXIge1xuICBjb25zdHJ1Y3Rvcihwcm9wcyA9IHt9KSB7XG4gICAgdGhpcy5pZCA9IHByb3BzLmlkIHx8IGdlbmVyYXRlSGFzaElkKExBWUVSX0lEX0xFTkdUSCk7XG4gICAgLy8gbWV0YVxuICAgIHRoaXMubWV0YSA9IHt9O1xuXG4gICAgLy8gbGVnZW5kU2V0dGluZ3NcbiAgICB0aGlzLmxlZ2VuZFNldHRpbmdzID0ge307XG5cbiAgICAvLyB2aXNDb25maWdTZXR0aW5nc1xuICAgIHRoaXMudmlzQ29uZmlnU2V0dGluZ3MgPSB7fTtcblxuICAgIC8vIGludGVyYWN0aXZpdHlTZXR0aW5nc1xuICAgIHRoaXMuX2ludGVyYWN0aXZpdHlTZXR0aW5ncyA9IHt9O1xuXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHRoaXMuY29uZmlnID0gdGhpcy5nZXREZWZhdWx0TGF5ZXJDb25maWcoe1xuICAgICAgY29sdW1uczogdGhpcy5nZXRMYXllckNvbHVtbnMoKSxcbiAgICAgIC4uLnByb3BzXG4gICAgfSk7XG4gIH1cblxuICBnZXQgbGF5ZXJJY29uKCkge1xuICAgIHJldHVybiBEZWZhdWx0TGF5ZXJJY29uO1xuICB9XG5cbiAgZ2V0IG92ZXJsYXlUeXBlKCkge1xuICAgIHJldHVybiBPVkVSTEFZX1RZUEUuZGVja2dsO1xuICB9XG5cbiAgZ2V0IHR5cGUoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlO1xuICB9XG5cbiAgZ2V0IGlzQWdncmVnYXRlZCgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXQgcmVxdWlyZWRMYXllckNvbHVtbnMoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgZ2V0IG9wdGlvbmFsQ29sdW1ucygpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBnZXQgbm9uZUxheWVyRGF0YUFmZmVjdGluZ1Byb3BzKCkge1xuICAgIHJldHVybiBbJ2xhYmVsJywgJ29wYWNpdHknLCAndGhpY2tuZXNzJywgJ2lzVmlzaWJsZScsICdoaWRkZW4nXTtcbiAgfVxuXG4gIGdldCB2aXN1YWxDaGFubmVscygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29sb3I6IHtcbiAgICAgICAgcHJvcGVydHk6ICdjb2xvcicsXG4gICAgICAgIGZpZWxkOiAnY29sb3JGaWVsZCcsXG4gICAgICAgIHNjYWxlOiAnY29sb3JTY2FsZScsXG4gICAgICAgIGRvbWFpbjogJ2NvbG9yRG9tYWluJyxcbiAgICAgICAgcmFuZ2U6ICdjb2xvclJhbmdlJyxcbiAgICAgICAga2V5OiAnY29sb3InLFxuICAgICAgICBjaGFubmVsU2NhbGVUeXBlOiBDSEFOTkVMX1NDQUxFUy5jb2xvcixcbiAgICAgICAgbnVsbFZhbHVlOiBOT19WQUxVRV9DT0xPUixcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBjb25maWcgPT4gY29uZmlnLmNvbG9yXG4gICAgICB9LFxuICAgICAgc2l6ZToge1xuICAgICAgICBwcm9wZXJ0eTogJ3NpemUnLFxuICAgICAgICBmaWVsZDogJ3NpemVGaWVsZCcsXG4gICAgICAgIHNjYWxlOiAnc2l6ZVNjYWxlJyxcbiAgICAgICAgZG9tYWluOiAnc2l6ZURvbWFpbicsXG4gICAgICAgIHJhbmdlOiAnc2l6ZVJhbmdlJyxcbiAgICAgICAga2V5OiAnc2l6ZScsXG4gICAgICAgIGNoYW5uZWxTY2FsZVR5cGU6IENIQU5ORUxfU0NBTEVTLnNpemUsXG4gICAgICAgIG51bGxWYWx1ZTogMCxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiAxXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8qXG4gICAqIENvbHVtbiBwYWlycyBtYXBzIGxheWVyIGNvbHVtbiB0byBhIHNwZWNpZmljIGZpZWxkIHBhaXJzLFxuICAgKiBCeSBkZWZhdWx0LCBpdCBpcyBzZXQgdG8gbnVsbFxuICAgKi9cbiAgZ2V0IGNvbHVtblBhaXJzKCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLypcbiAgICogRGVmYXVsdCBwb2ludCBjb2x1bW4gcGFpcnMsIGNhbiBiZSB1c2VkIGZvciBwb2ludCBiYXNlZCBsYXllcnM6IHBvaW50LCBpY29uIGV0Yy5cbiAgICovXG4gIGdldCBkZWZhdWx0UG9pbnRDb2x1bW5QYWlycygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbGF0OiB7cGFpcjogJ2xuZycsIGZpZWxkUGFpcktleTogJ2xhdCd9LFxuICAgICAgbG5nOiB7cGFpcjogJ2xhdCcsIGZpZWxkUGFpcktleTogJ2xuZyd9XG4gICAgfTtcbiAgfVxuXG4gIC8qXG4gICAqIERlZmF1bHQgbGluayBjb2x1bW4gcGFpcnMsIGNhbiBiZSB1c2VkIGZvciBsaW5rIGJhc2VkIGxheWVyczogYXJjLCBsaW5lIGV0Y1xuICAgKi9cbiAgZ2V0IGRlZmF1bHRMaW5rQ29sdW1uUGFpcnMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxhdDA6IHtwYWlyOiAnbG5nMCcsIGZpZWxkUGFpcktleTogJ2xhdCd9LFxuICAgICAgbG5nMDoge3BhaXI6ICdsYXQwJywgZmllbGRQYWlyS2V5OiAnbG5nJ30sXG4gICAgICBsYXQxOiB7cGFpcjogJ2xuZzEnLCBmaWVsZFBhaXJLZXk6ICdsYXQnfSxcbiAgICAgIGxuZzE6IHtwYWlyOiAnbGF0MScsIGZpZWxkUGFpcktleTogJ2xuZyd9XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBSZWFjdCBjb21wb25lbnQgZm9yIHRvIHJlbmRlciBsYXllciBpbnN0cnVjdGlvbnMgaW4gYSBtb2RhbFxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSAtIGFuIG9iamVjdFxuICAgKiBAZXhhbXBsZVxuICAgKiAgcmV0dXJuIHtcbiAgICogICAgaWQ6ICdpY29uSW5mbycsXG4gICAqICAgIHRlbXBsYXRlOiBJY29uSW5mb01vZGFsLFxuICAgKiAgICBtb2RhbFByb3BzOiB7XG4gICAqICAgICAgdGl0bGU6ICdIb3cgdG8gZHJhdyBpY29ucydcbiAgICogICB9O1xuICAgKiB9XG4gICAqL1xuICBnZXQgbGF5ZXJJbmZvTW9kYWwoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXQgaW50ZXJhY3Rpdml0eVNldHRpbmdzKCkge1xuICAgIHJldHVybiB0aGlzLl9pbnRlcmFjdGl2aXR5U2V0dGluZ3M7XG4gIH1cblxuICBzZXQgaW50ZXJhY3Rpdml0eVNldHRpbmdzKGludGVyYWN0aXZpdHlTZXR0aW5ncykge1xuICAgIHRoaXMuX2ludGVyYWN0aXZpdHlTZXR0aW5ncyA9IGludGVyYWN0aXZpdHlTZXR0aW5ncztcbiAgfVxuXG4gIGdldCBoYXNUb29sdGlwKCkge1xuICAgIHJldHVybiBCb29sZWFuKFxuICAgICAgdGhpcy5pbnRlcmFjdGl2aXR5U2V0dGluZ3M/LmhvdmVyPy5maWVsZHMubGVuZ3RoIHx8XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpdml0eVNldHRpbmdzPy5jbGljaz8uZmllbGRzLmxlbmd0aFxuICAgICk7XG4gIH1cblxuICBnZXQgaGFzSW50ZXJhY3Rpdml0eSgpIHtcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLmhhc1Rvb2x0aXAgJiYgdGhpcy5pbnRlcmFjdGl2aXR5U2V0dGluZ3M/LmVuYWJsZWQpO1xuICB9XG5cbiAgLypcbiAgICogR2l2ZW4gYSBkYXRhc2V0LCBhdXRvbWF0aWNhbGx5IGZpbmQgcHJvcHMgdG8gY3JlYXRlIGxheWVyIGJhc2VkIG9uIGl0XG4gICAqIGFuZCByZXR1cm4gdGhlIHByb3BzIGFuZCBwcmV2aW91cyBmb3VuZCBsYXllcnMuXG4gICAqIEJ5IGRlZmF1bHQsIG5vIGxheWVycyB3aWxsIGJlIGZvdW5kXG4gICAqL1xuICBzdGF0aWMgZmluZERlZmF1bHRMYXllclByb3BzKGRhdGFzZXQsIGZvdW5kTGF5ZXJzKSB7XG4gICAgcmV0dXJuIHtwcm9wczogW10sIGZvdW5kTGF5ZXJzfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHaXZlbiBhIGFycmF5IG9mIHByZXNldCByZXF1aXJlZCBjb2x1bW4gbmFtZXNcbiAgICogZm91bmQgZmllbGQgdGhhdCBoYXMgdGhlIHNhbWUgbmFtZSB0byBzZXQgYXMgbGF5ZXIgY29sdW1uXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBkZWZhdWx0RmllbGRzXG4gICAqIEBwYXJhbSB7b2JqZWN0W119IGFsbEZpZWxkc1xuICAgKiBAcmV0dXJucyB7b2JqZWN0W10gfCBudWxsfSBhbGwgcG9zc2libGUgcmVxdWlyZWQgbGF5ZXIgY29sdW1uIHBhaXJzXG4gICAqL1xuICBzdGF0aWMgZmluZERlZmF1bHRDb2x1bW5GaWVsZChkZWZhdWx0RmllbGRzLCBhbGxGaWVsZHMpIHtcbiAgICAvLyBmaW5kIGFsbCBtYXRjaGVkIGZpZWxkcyBmb3IgZWFjaCByZXF1aXJlZCBjb2xcbiAgICBjb25zdCByZXF1aXJlZENvbHVtbnMgPSBPYmplY3Qua2V5cyhkZWZhdWx0RmllbGRzKS5yZWR1Y2UoKHByZXYsIGtleSkgPT4ge1xuICAgICAgY29uc3QgcmVxdWlyZWRGaWVsZHMgPSBhbGxGaWVsZHMuZmlsdGVyKFxuICAgICAgICBmID0+IGYubmFtZSA9PT0gZGVmYXVsdEZpZWxkc1trZXldIHx8IGRlZmF1bHRGaWVsZHNba2V5XS5pbmNsdWRlcyhmLm5hbWUpXG4gICAgICApO1xuXG4gICAgICBwcmV2W2tleV0gPSByZXF1aXJlZEZpZWxkcy5sZW5ndGhcbiAgICAgICAgPyByZXF1aXJlZEZpZWxkcy5tYXAoZiA9PiAoe1xuICAgICAgICAgICAgdmFsdWU6IGYubmFtZSxcbiAgICAgICAgICAgIGZpZWxkSWR4OiBmLmZpZWxkSWR4XG4gICAgICAgICAgfSkpXG4gICAgICAgIDogbnVsbDtcbiAgICAgIHJldHVybiBwcmV2O1xuICAgIH0sIHt9KTtcblxuICAgIGlmICghT2JqZWN0LnZhbHVlcyhyZXF1aXJlZENvbHVtbnMpLmV2ZXJ5KEJvb2xlYW4pKSB7XG4gICAgICAvLyBpZiBhbnkgZmllbGQgbWlzc2luZywgcmV0dXJuIG51bGxcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldEFsbFBvc3NpYmxlQ29sdW1uUGFyaXMocmVxdWlyZWRDb2x1bW5zKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRBbGxQb3NzaWJsZUNvbHVtblBhcmlzKHJlcXVpcmVkQ29sdW1ucykge1xuICAgIC8vIGZvciBtdWx0aXBsZSBtYXRjaGVkIGZpZWxkIGZvciBvbmUgcmVxdWlyZWQgY29sdW1uLCByZXR1cm4gbXVsdGlwbGVcbiAgICAvLyBjb21iaW5hdGlvbnMsIGUuIGcuIGlmIGNvbHVtbiBhIGhhcyAyIG1hdGNoZWQsIGNvbHVtbiBiIGhhcyAzIG1hdGNoZWRcbiAgICAvLyA2IHBvc3NpYmxlIGNvbHVtbiBwYWlycyB3aWxsIGJlIHJldHVybmVkXG4gICAgY29uc3QgYWxsS2V5cyA9IE9iamVjdC5rZXlzKHJlcXVpcmVkQ29sdW1ucyk7XG4gICAgY29uc3QgcG9pbnRlcnMgPSBhbGxLZXlzLm1hcCgoaywgaSkgPT4gKChpID09PSBhbGxLZXlzLmxlbmd0aCAtIDEgPyAtMSA6IDApKSk7XG4gICAgY29uc3QgY291bnRQZXJLZXkgPSBhbGxLZXlzLm1hcChrID0+IHJlcXVpcmVkQ29sdW1uc1trXS5sZW5ndGgpO1xuICAgIGNvbnN0IHBhaXJzID0gW107XG5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1sb29wLWZ1bmMgKi9cbiAgICB3aGlsZSAoaW5jcmVtZW50UG9pbnRlcnMocG9pbnRlcnMsIGNvdW50UGVyS2V5LCBwb2ludGVycy5sZW5ndGggLSAxKSkge1xuICAgICAgY29uc3QgbmV3UGFpciA9IHBvaW50ZXJzLnJlZHVjZSgocHJldiwgY3V1ciwgaSkgPT4ge1xuICAgICAgICBwcmV2W2FsbEtleXNbaV1dID0gcmVxdWlyZWRDb2x1bW5zW2FsbEtleXNbaV1dW2N1dXJdO1xuICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgIH0sIHt9KTtcblxuICAgICAgcGFpcnMucHVzaChuZXdQYWlyKTtcbiAgICB9XG4gICAgLyogZXNsaW50LWVuYWJsZSBuby1sb29wLWZ1bmMgKi9cblxuICAgIC8vIHJlY3Vyc2l2ZWx5IGluY3JlbWVudCBwb2ludGVyc1xuICAgIGZ1bmN0aW9uIGluY3JlbWVudFBvaW50ZXJzKHB0cywgY291bnRzLCBpbmRleCkge1xuICAgICAgaWYgKGluZGV4ID09PSAwICYmIHB0c1swXSA9PT0gY291bnRzWzBdIC0gMSkge1xuICAgICAgICAvLyBub3RoaW5nIHRvIGluY3JlbWVudFxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChwdHNbaW5kZXhdICsgMSA8IGNvdW50c1tpbmRleF0pIHtcbiAgICAgICAgcHRzW2luZGV4XSA9IHB0c1tpbmRleF0gKyAxO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcHRzW2luZGV4XSA9IDA7XG4gICAgICByZXR1cm4gaW5jcmVtZW50UG9pbnRlcnMocHRzLCBjb3VudHMsIGluZGV4IC0gMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhaXJzO1xuICB9XG5cbiAgc3RhdGljIGhleFRvUmdiKGMpIHtcbiAgICByZXR1cm4gaGV4VG9SZ2IoYyk7XG4gIH1cblxuICBnZXREZWZhdWx0TGF5ZXJDb25maWcocHJvcHMgPSB7fSkge1xuICAgIHJldHVybiB7XG4gICAgICBkYXRhSWQ6IHByb3BzLmRhdGFJZCB8fCBudWxsLFxuICAgICAgdmlzaWJpbGl0eUJ5Wm9vbToge1xuICAgICAgICBtaW46IHByb3BzLnZpc2liaWxpdHlCeVpvb20/Lm1pbiB8fCBaT09NX0xFVkVMX0xJTUlUUy5taW4sXG4gICAgICAgIG1heDogcHJvcHMudmlzaWJpbGl0eUJ5Wm9vbT8ubWF4IHx8IFpPT01fTEVWRUxfTElNSVRTLm1heFxuICAgICAgfSxcbiAgICAgIGxhYmVsOiBwcm9wcy5sYWJlbCB8fCBERUZBVUxUX0xBWUVSX0xBQkVMLFxuICAgICAgY29sb3I6IHByb3BzLmNvbG9yIHx8IGNvbG9yTWFrZXIubmV4dCgpLnZhbHVlLFxuICAgICAgY29sdW1uczogcHJvcHMuY29sdW1ucyB8fCBudWxsLFxuICAgICAgaXNWaXNpYmxlOiBwcm9wcy5pc1Zpc2libGUgfHwgZmFsc2UsXG4gICAgICBpc0NvbmZpZ0FjdGl2ZTogcHJvcHMuaXNDb25maWdBY3RpdmUgfHwgZmFsc2UsXG4gICAgICBoaWdobGlnaHRDb2xvcjogcHJvcHMuaGlnaGxpZ2h0Q29sb3IgfHwgREVGQVVMVF9ISUdITElHSFRfQ09MT1IsXG4gICAgICBoaWRkZW46IHByb3BzLmhpZGRlbiB8fCBmYWxzZSxcblxuICAgICAgLy8gVE9ETzogcmVmYWN0b3IgdGhpcyBpbnRvIHNlcGFyYXRlIHZpc3VhbCBDaGFubmVsIGNvbmZpZ1xuICAgICAgLy8gY29sb3IgYnkgZmllbGQsIGRvbWFpbiBpcyBzZXQgYnkgZmlsdGVycywgZmllbGQsIHNjYWxlIHR5cGVcbiAgICAgIGNvbG9yRmllbGQ6IG51bGwsXG4gICAgICBjb2xvckRvbWFpbjogWzAsIDFdLFxuICAgICAgY29sb3JTY2FsZTogU0NBTEVfVFlQRVMucXVhbnRpbGUsXG5cbiAgICAgIC8vIGNvbG9yIGJ5IHNpemUsIGRvbWFpbiBpcyBzZXQgYnkgZmlsdGVycywgZmllbGQsIHNjYWxlIHR5cGVcbiAgICAgIHNpemVEb21haW46IFswLCAxXSxcbiAgICAgIHNpemVTY2FsZTogU0NBTEVfVFlQRVMubGluZWFyLFxuICAgICAgc2l6ZUZpZWxkOiBudWxsLFxuICAgICAgcmFkaXVzRmllbGQ6IG51bGwsXG5cbiAgICAgIHZpc0NvbmZpZzoge30sXG5cbiAgICAgIHRleHRMYWJlbDogW0RFRkFVTFRfVEVYVF9MQUJFTF0sXG5cbiAgICAgIGNvbG9yVUk6IHtcbiAgICAgICAgY29sb3I6IERFRkFVTFRfQ09MT1JfVUksXG4gICAgICAgIGNvbG9yUmFuZ2U6IERFRkFVTFRfQ09MT1JfVUlcbiAgICAgIH0sXG4gICAgICBhbmltYXRpb246IHtlbmFibGVkOiBmYWxzZX1cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGVzY3JpcHRpb24gb2YgYSB2aXN1YWxDaGFubmVsIGNvbmZpZ1xuICAgKiBAcGFyYW0ga2V5XG4gICAqIEByZXR1cm5zIHt7bGFiZWw6IHN0cmluZywgbWVhc3VyZTogKHN0cmluZ3xzdHJpbmcpfX1cbiAgICovXG4gIGdldFZpc3VhbENoYW5uZWxEZXNjcmlwdGlvbihrZXkpIHtcbiAgICAvLyBlLmcuIGxhYmVsOiBDb2xvciwgbWVhc3VyZTogVmVoaWNsZSBUeXBlXG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsOiB0aGlzLnZpc0NvbmZpZ1NldHRpbmdzW3RoaXMudmlzdWFsQ2hhbm5lbHNba2V5XS5yYW5nZV0ubGFiZWwsXG4gICAgICBtZWFzdXJlOiB0aGlzLmNvbmZpZ1t0aGlzLnZpc3VhbENoYW5uZWxzW2tleV0uZmllbGRdXG4gICAgICAgID8gKHRoaXMuY29uZmlnW3RoaXMudmlzdWFsQ2hhbm5lbHNba2V5XS5maWVsZF0uZGlzcGxheU5hbWUgfHxcbiAgICAgICAgICB0aGlzLmNvbmZpZ1t0aGlzLnZpc3VhbENoYW5uZWxzW2tleV0uZmllbGRdLm5hbWUpXG4gICAgICAgIDogdGhpcy52aXN1YWxDaGFubmVsc1trZXldLmRlZmF1bHRNZWFzdXJlXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NpZ24gYSBmaWVsZCB0byBsYXllciBjb2x1bW4sIHJldHVybiBjb2x1bW4gY29uZmlnXG4gICAqIEBwYXJhbSBrZXkgLSBDb2x1bW4gS2V5XG4gICAqIEBwYXJhbSBmaWVsZCAtIFNlbGVjdGVkIGZpZWxkXG4gICAqIEByZXR1cm5zIHt7fX0gLSBDb2x1bW4gY29uZmlnXG4gICAqL1xuICBhc3NpZ25Db2x1bW4oa2V5LCBmaWVsZCkge1xuICAgIC8vIGZpZWxkIHZhbHVlIGNvdWxkIGJlIG51bGwgZm9yIG9wdGlvbmFsIGNvbHVtbnNcbiAgICBjb25zdCB1cGRhdGUgPSBmaWVsZFxuICAgICAgPyB7XG4gICAgICAgICAgdmFsdWU6IGZpZWxkLm5hbWUsXG4gICAgICAgICAgZmllbGRJZHg6IGZpZWxkLmZpZWxkSWR4XG4gICAgICAgIH1cbiAgICAgIDoge3ZhbHVlOiBudWxsLCBmaWVsZElkeDogLTF9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuY29uZmlnLmNvbHVtbnMsXG4gICAgICBba2V5XToge1xuICAgICAgICAuLi50aGlzLmNvbmZpZy5jb2x1bW5zW2tleV0sXG4gICAgICAgIC4uLnVwZGF0ZVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQXNzaWduIGEgZmllbGQgcGFpciB0byBjb2x1bW4gY29uZmlnLCByZXR1cm4gY29sdW1uIGNvbmZpZ1xuICAgKiBAcGFyYW0ga2V5IC0gQ29sdW1uIEtleVxuICAgKiBAcGFyYW0gcGFpciAtIGZpZWxkIFBhaXJcbiAgICogQHJldHVybnMge29iamVjdH0gLSBDb2x1bW4gY29uZmlnXG4gICAqL1xuICBhc3NpZ25Db2x1bW5QYWlycyhrZXksIHBhaXIpIHtcbiAgICBpZiAoIXRoaXMuY29sdW1uUGFpcnMgfHwgIXRoaXMuY29sdW1uUGFpcnM/LltrZXldKSB7XG4gICAgICAvLyBzaG91bGQgbm90IGVuZCBpbiB0aGlzIHN0YXRlXG4gICAgICByZXR1cm4gdGhpcy5jb25maWcuY29sdW1ucztcbiAgICB9XG5cbiAgICBjb25zdCB7cGFpcjogcGFydG5lcktleSwgZmllbGRQYWlyS2V5fSA9IHRoaXMuY29sdW1uUGFpcnM/LltrZXldO1xuICAgIGNvbnN0IHtmaWVsZFBhaXJLZXk6IHBhcnRuZXJGaWVsZFBhaXJLZXl9ID0gdGhpcy5jb2x1bW5QYWlycz8uW3BhcnRuZXJLZXldO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuY29uZmlnLmNvbHVtbnMsXG4gICAgICBba2V5XTogcGFpcltmaWVsZFBhaXJLZXldLFxuICAgICAgW3BhcnRuZXJLZXldOiBwYWlyW3BhcnRuZXJGaWVsZFBhaXJLZXldXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgYSByYWRpdXMgem9vbSBtdWx0aXBsaWVyIHRvIHJlbmRlciBwb2ludHMsIHNvIHRoZXkgYXJlIHZpc2libGUgaW4gYWxsIHpvb20gbGV2ZWxcbiAgICogQHBhcmFtIHtvYmplY3R9IG1hcFN0YXRlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtYXBTdGF0ZS56b29tIC0gYWN0dWFsIHpvb21cbiAgICogQHBhcmFtIHtudW1iZXIgfCB2b2lkfSBtYXBTdGF0ZS56b29tT2Zmc2V0IC0gem9vbU9mZnNldCB3aGVuIHJlbmRlciBpbiB0aGUgcGxvdCBjb250YWluZXIgZm9yIGV4cG9ydCBpbWFnZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0Wm9vbUZhY3Rvcih7em9vbSwgem9vbU9mZnNldCA9IDB9KSB7XG4gICAgcmV0dXJuIE1hdGgucG93KDIsIE1hdGgubWF4KDE0IC0gem9vbSArIHpvb21PZmZzZXQsIDApKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgYSBlbGV2YXRpb24gem9vbSBtdWx0aXBsaWVyIHRvIHJlbmRlciBwb2ludHMsIHNvIHRoZXkgYXJlIHZpc2libGUgaW4gYWxsIHpvb20gbGV2ZWxcbiAgICogQHBhcmFtIHtvYmplY3R9IG1hcFN0YXRlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtYXBTdGF0ZS56b29tIC0gYWN0dWFsIHpvb21cbiAgICogQHBhcmFtIHtudW1iZXIgfCB2b2lkfSBtYXBTdGF0ZS56b29tT2Zmc2V0IC0gem9vbU9mZnNldCB3aGVuIHJlbmRlciBpbiB0aGUgcGxvdCBjb250YWluZXIgZm9yIGV4cG9ydCBpbWFnZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0RWxldmF0aW9uWm9vbUZhY3Rvcih7em9vbSwgem9vbU9mZnNldCA9IDB9KSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnZpc0NvbmZpZy5lbmFibGVFbGV2YXRpb25ab29tRmFjdG9yXG4gICAgICA/IE1hdGgucG93KDIsIE1hdGgubWF4KDggLSB6b29tICsgem9vbU9mZnNldCwgMCkpXG4gICAgICA6IDE7XG4gIH1cblxuICBmb3JtYXRMYXllckRhdGEoZGF0YXNldHMsIGZpbHRlcmVkSW5kZXgpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICByZW5kZXJMYXllcigpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBnZXRIb3ZlckRhdGEob2JqZWN0LCBkYXRhQ29udGFpbmVyKSB7XG4gICAgaWYgKCFvYmplY3QpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIEJ5IGRlZmF1bHQsIGVhY2ggZW50cnkgb2YgbGF5ZXJEYXRhIHNob3VsZCBoYXZlIGFuIGluZGV4IG9mIGEgcm93IGluIHRoZSBvcmlnaW5hbCBkYXRhIGNvbnRhaW5lci5cbiAgICAvLyBFYWNoIGxheWVyIGNhbiBpbXBsZW1lbnQgaXRzIG93biBnZXRIb3ZlckRhdGEgbWV0aG9kXG4gICAgcmV0dXJuIGRhdGFDb250YWluZXIucm93KG9iamVjdC5pbmRleCk7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiBjaGFuZ2UgbGF5ZXIgdHlwZSwgdHJ5IHRvIGNvcHkgb3ZlciBsYXllciBjb25maWdzIGFzIG11Y2ggYXMgcG9zc2libGVcbiAgICogQHBhcmFtIGNvbmZpZ1RvQ29weSAtIGNvbmZpZyB0byBjb3B5IG92ZXJcbiAgICogQHBhcmFtIHZpc0NvbmZpZ1NldHRpbmdzIC0gdmlzQ29uZmlnIHNldHRpbmdzIG9mIGNvbmZpZyB0byBjb3B5XG4gICAqL1xuICBhc3NpZ25Db25maWdUb0xheWVyKGNvbmZpZ1RvQ29weSwgdmlzQ29uZmlnU2V0dGluZ3MpIHtcbiAgICAvLyBkb24ndCBkZWVwIG1lcmdlIHZpc3VhbENoYW5uZWwgZmllbGRcbiAgICAvLyBkb24ndCBkZWVwIG1lcmdlIGNvbG9yIHJhbmdlLCByZXZlcnNlZDogaXMgbm90IGEga2V5IGJ5IGRlZmF1bHRcbiAgICBjb25zdCBzaGFsbG93Q29weSA9IFsnY29sb3JSYW5nZScsICdzdHJva2VDb2xvclJhbmdlJ10uY29uY2F0KFxuICAgICAgT2JqZWN0LnZhbHVlcyh0aGlzLnZpc3VhbENoYW5uZWxzKS5tYXAodiA9PiB2LmZpZWxkKVxuICAgICk7XG5cbiAgICAvLyBkb24ndCBjb3B5IG92ZXIgZG9tYWluIGFuZCBhbmltYXRpb25cbiAgICBjb25zdCBub3RUb0NvcHkgPSBbJ2FuaW1hdGlvbiddLmNvbmNhdChPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLm1hcCh2ID0+IHYuZG9tYWluKSk7XG4gICAgLy8gaWYgcmFuZ2UgaXMgZm9yIHRoZSBzYW1lIHByb3BlcnR5IGdyb3VwIGNvcHkgaXQsIG90aGVyd2lzZSwgbm90IHRvIGNvcHlcbiAgICBPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2godiA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGNvbmZpZ1RvQ29weS52aXNDb25maWdbdi5yYW5nZV0gJiZcbiAgICAgICAgdGhpcy52aXNDb25maWdTZXR0aW5nc1t2LnJhbmdlXSAmJlxuICAgICAgICB2aXNDb25maWdTZXR0aW5nc1t2LnJhbmdlXS5ncm91cCAhPT0gdGhpcy52aXNDb25maWdTZXR0aW5nc1t2LnJhbmdlXS5ncm91cFxuICAgICAgKSB7XG4gICAgICAgIG5vdFRvQ29weS5wdXNoKHYucmFuZ2UpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gZG9uJ3QgY29weSBvdmVyIHZpc3VhbENoYW5uZWwgcmFuZ2VcbiAgICBjb25zdCBjdXJyZW50Q29uZmlnID0gdGhpcy5jb25maWc7XG4gICAgY29uc3QgY29waWVkID0gdGhpcy5jb3B5TGF5ZXJDb25maWcoY3VycmVudENvbmZpZywgY29uZmlnVG9Db3B5LCB7XG4gICAgICBzaGFsbG93Q29weSxcbiAgICAgIG5vdFRvQ29weVxuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoY29waWVkKTtcbiAgICAvLyB2YWxpZGF0ZSB2aXN1YWxDaGFubmVsIGZpZWxkIHR5cGUgYW5kIHNjYWxlIHR5cGVzXG4gICAgT2JqZWN0LmtleXModGhpcy52aXN1YWxDaGFubmVscykuZm9yRWFjaChjaGFubmVsID0+IHtcbiAgICAgIHRoaXMudmFsaWRhdGVWaXN1YWxDaGFubmVsKGNoYW5uZWwpO1xuICAgIH0pO1xuICB9XG5cbiAgLypcbiAgICogUmVjdXJzaXZlbHkgY29weSBjb25maWcgb3ZlciB0byBhbiBlbXB0eSBsYXllclxuICAgKiB3aGVuIHJlY2VpdmVkIHNhdmVkIGNvbmZpZywgb3IgY29weSBjb25maWcgb3ZlciBmcm9tIGEgZGlmZmVyZW50IGxheWVyIHR5cGVcbiAgICogbWFrZSBzdXJlIHRvIG9ubHkgY29weSBvdmVyIHZhbHVlIHRvIGV4aXN0aW5nIGtleXNcbiAgICogQHBhcmFtIHtvYmplY3R9IGN1cnJlbnRDb25maWcgLSBleGlzdGluZyBjb25maWcgdG8gYmUgb3ZlcnJpZGVcbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZ1RvQ29weSAtIG5ldyBDb25maWcgdG8gY29weSBvdmVyXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHNoYWxsb3dDb3B5IC0gYXJyYXkgb2YgcHJvcGVydGllcyB0byBub3QgdG8gYmUgZGVlcCBjb3BpZWRcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gbm90VG9Db3B5IC0gYXJyYXkgb2YgcHJvcGVydGllcyBub3QgdG8gY29weVxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSAtIGNvcGllZCBjb25maWdcbiAgICovXG4gIGNvcHlMYXllckNvbmZpZyhjdXJyZW50Q29uZmlnLCBjb25maWdUb0NvcHksIHtzaGFsbG93Q29weSA9IFtdLCBub3RUb0NvcHkgPSBbXX0gPSB7fSkge1xuICAgIGNvbnN0IGNvcGllZCA9IHt9O1xuICAgIE9iamVjdC5rZXlzKGN1cnJlbnRDb25maWcpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgaXNQbGFpbk9iamVjdChjdXJyZW50Q29uZmlnW2tleV0pICYmXG4gICAgICAgIGlzUGxhaW5PYmplY3QoY29uZmlnVG9Db3B5W2tleV0pICYmXG4gICAgICAgICFzaGFsbG93Q29weS5pbmNsdWRlcyhrZXkpICYmXG4gICAgICAgICFub3RUb0NvcHkuaW5jbHVkZXMoa2V5KVxuICAgICAgKSB7XG4gICAgICAgIC8vIHJlY3Vyc2l2ZWx5IGFzc2lnbiBvYmplY3QgdmFsdWVcbiAgICAgICAgY29waWVkW2tleV0gPSB0aGlzLmNvcHlMYXllckNvbmZpZyhjdXJyZW50Q29uZmlnW2tleV0sIGNvbmZpZ1RvQ29weVtrZXldLCB7XG4gICAgICAgICAgc2hhbGxvd0NvcHksXG4gICAgICAgICAgbm90VG9Db3B5XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChub3ROdWxsb3JVbmRlZmluZWQoY29uZmlnVG9Db3B5W2tleV0pICYmICFub3RUb0NvcHkuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAvLyBjb3B5XG4gICAgICAgIGNvcGllZFtrZXldID0gY29uZmlnVG9Db3B5W2tleV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBrZWVwIGV4aXN0aW5nXG4gICAgICAgIGNvcGllZFtrZXldID0gY3VycmVudENvbmZpZ1trZXldO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNvcGllZDtcbiAgfVxuXG4gIHJlZ2lzdGVyVmlzQ29uZmlnKGxheWVyVmlzQ29uZmlncykge1xuICAgIE9iamVjdC5rZXlzKGxheWVyVmlzQ29uZmlncykuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycgJiYgTEFZRVJfVklTX0NPTkZJR1NbbGF5ZXJWaXNDb25maWdzW2l0ZW1dXSkge1xuICAgICAgICAvLyBpZiBhc3NpZ25lZCBvbmUgb2YgZGVmYXVsdCBMQVlFUl9DT05GSUdTXG4gICAgICAgIHRoaXMuY29uZmlnLnZpc0NvbmZpZ1tpdGVtXSA9IExBWUVSX1ZJU19DT05GSUdTW2xheWVyVmlzQ29uZmlnc1tpdGVtXV0uZGVmYXVsdFZhbHVlO1xuICAgICAgICB0aGlzLnZpc0NvbmZpZ1NldHRpbmdzW2l0ZW1dID0gTEFZRVJfVklTX0NPTkZJR1NbbGF5ZXJWaXNDb25maWdzW2l0ZW1dXTtcbiAgICAgIH0gZWxzZSBpZiAoWyd0eXBlJywgJ2RlZmF1bHRWYWx1ZSddLmV2ZXJ5KHAgPT4gbGF5ZXJWaXNDb25maWdzW2l0ZW1dLmhhc093blByb3BlcnR5KHApKSkge1xuICAgICAgICAvLyBpZiBwcm92aWRlZCBjdXN0b21pemVkIHZpc0NvbmZpZywgYW5kIGhhcyB0eXBlICYmIGRlZmF1bHRWYWx1ZVxuICAgICAgICAvLyBUT0RPOiBmdXJ0aGVyIGNoZWNrIGlmIGN1c3RvbWl6ZWQgdmlzQ29uZmlnIGlzIHZhbGlkXG4gICAgICAgIHRoaXMuY29uZmlnLnZpc0NvbmZpZ1tpdGVtXSA9IGxheWVyVmlzQ29uZmlnc1tpdGVtXS5kZWZhdWx0VmFsdWU7XG4gICAgICAgIHRoaXMudmlzQ29uZmlnU2V0dGluZ3NbaXRlbV0gPSBsYXllclZpc0NvbmZpZ3NbaXRlbV07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXRMYXllckNvbHVtbnMoKSB7XG4gICAgY29uc3QgY29sdW1uVmFsaWRhdG9ycyA9IHRoaXMuY29sdW1uVmFsaWRhdG9ycyB8fCB7fTtcbiAgICBjb25zdCByZXF1aXJlZCA9IHRoaXMucmVxdWlyZWRMYXllckNvbHVtbnMucmVkdWNlKFxuICAgICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgW2tleV06IGNvbHVtblZhbGlkYXRvcnNba2V5XVxuICAgICAgICAgID8ge3ZhbHVlOiBudWxsLCBmaWVsZElkeDogLTEsIHZhbGlkYXRvcjogY29sdW1uVmFsaWRhdG9yc1trZXldfVxuICAgICAgICAgIDoge3ZhbHVlOiBudWxsLCBmaWVsZElkeDogLTF9XG4gICAgICB9KSxcbiAgICAgIHt9XG4gICAgKTtcbiAgICBjb25zdCBvcHRpb25hbCA9IHRoaXMub3B0aW9uYWxDb2x1bW5zLnJlZHVjZShcbiAgICAgIChhY2N1LCBrZXkpID0+ICh7XG4gICAgICAgIC4uLmFjY3UsXG4gICAgICAgIFtrZXldOiB7dmFsdWU6IG51bGwsIGZpZWxkSWR4OiAtMSwgb3B0aW9uYWw6IHRydWV9XG4gICAgICB9KSxcbiAgICAgIHt9XG4gICAgKTtcblxuICAgIHJldHVybiB7Li4ucmVxdWlyZWQsIC4uLm9wdGlvbmFsfTtcbiAgfVxuXG4gIHVwZGF0ZUxheWVyQ29uZmlnKG5ld0NvbmZpZykge1xuICAgIHRoaXMuY29uZmlnID0gey4uLnRoaXMuY29uZmlnLCAuLi5uZXdDb25maWd9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdXBkYXRlTGF5ZXJWaXNDb25maWcobmV3VmlzQ29uZmlnKSB7XG4gICAgdGhpcy5jb25maWcudmlzQ29uZmlnID0gey4uLnRoaXMuY29uZmlnLnZpc0NvbmZpZywgLi4ubmV3VmlzQ29uZmlnfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHVwZGF0ZUxheWVyQ29sb3JVSShwcm9wLCBuZXdDb25maWcpIHtcbiAgICBjb25zdCB7Y29sb3JVSTogcHJldmlvdXMsIHZpc0NvbmZpZ30gPSB0aGlzLmNvbmZpZztcblxuICAgIGlmICghaXNQbGFpbk9iamVjdChuZXdDb25maWcpIHx8IHR5cGVvZiBwcm9wICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgY29uc3QgY29sb3JVSVByb3AgPSBPYmplY3QuZW50cmllcyhuZXdDb25maWcpLnJlZHVjZSgoYWNjdSwgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5hY2N1LFxuICAgICAgICBba2V5XTogaXNQbGFpbk9iamVjdChhY2N1W2tleV0pICYmIGlzUGxhaW5PYmplY3QodmFsdWUpID8gey4uLmFjY3Vba2V5XSwgLi4udmFsdWV9IDogdmFsdWVcbiAgICAgIH07XG4gICAgfSwgcHJldmlvdXNbcHJvcF0gfHwgREVGQVVMVF9DT0xPUl9VSSk7XG5cbiAgICBjb25zdCBjb2xvclVJID0ge1xuICAgICAgLi4ucHJldmlvdXMsXG4gICAgICBbcHJvcF06IGNvbG9yVUlQcm9wXG4gICAgfTtcblxuICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoe2NvbG9yVUl9KTtcbiAgICAvLyBpZiBjb2xvclVJW3Byb3BdIGlzIGNvbG9yUmFuZ2UuIElmIHR5cGUgaXMgaGV4Q29sb3IgdGhlbiBpdCdzIGFsc28gYSByYW5nZVxuICAgIGNvbnN0IGlzQ29sb3JSYW5nZSA9XG4gICAgICB2aXNDb25maWdbcHJvcF0gJiYgKHZpc0NvbmZpZ1twcm9wXS5jb2xvcnMgfHwgdmlzQ29uZmlnW3Byb3BdLnR5cGUgPT09IGhleENvbG9yKTtcblxuICAgIGlmIChpc0NvbG9yUmFuZ2UpIHtcbiAgICAgIHRoaXMudXBkYXRlQ29sb3JVSUJ5Q29sb3JSYW5nZShuZXdDb25maWcsIHByb3ApO1xuICAgICAgdGhpcy51cGRhdGVDb2xvclJhbmdlQnlDb2xvclVJKG5ld0NvbmZpZywgcHJldmlvdXMsIHByb3ApO1xuICAgICAgdGhpcy51cGRhdGVDdXN0b21QYWxldHRlKG5ld0NvbmZpZywgcHJldmlvdXMsIHByb3ApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdXBkYXRlQ3VzdG9tUGFsZXR0ZShuZXdDb25maWcsIHByZXZpb3VzLCBwcm9wKSB7XG4gICAgaWYgKCFuZXdDb25maWcuY29sb3JSYW5nZUNvbmZpZyB8fCAhbmV3Q29uZmlnLmNvbG9yUmFuZ2VDb25maWcuY3VzdG9tKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qge2NvbG9yVUksIHZpc0NvbmZpZ30gPSB0aGlzLmNvbmZpZztcblxuICAgIGlmICghdmlzQ29uZmlnW3Byb3BdKSByZXR1cm47XG4gICAgY29uc3Qge2NvbG9yc30gPSB2aXNDb25maWdbcHJvcF07XG4gICAgY29uc3QgY3VzdG9tUGFsZXR0ZSA9IHtcbiAgICAgIC4uLmNvbG9yVUlbcHJvcF0uY3VzdG9tUGFsZXR0ZSxcbiAgICAgIG5hbWU6ICdDdXN0b20gUGFsZXR0ZScsXG4gICAgICBjb2xvcnM6IFsuLi5jb2xvcnNdXG4gICAgfTtcbiAgICB0aGlzLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgIGNvbG9yVUk6IHtcbiAgICAgICAgLi4uY29sb3JVSSxcbiAgICAgICAgW3Byb3BdOiB7XG4gICAgICAgICAgLi4uY29sb3JVSVtwcm9wXSxcbiAgICAgICAgICBjdXN0b21QYWxldHRlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogaWYgb3BlbiBkcm9wZG93biBhbmQgcHJvcCBpcyBjb2xvciByYW5nZVxuICAgKiBBdXRvbWF0aWNhbGx5IHNldCBjb2xvclJhbmdlQ29uZmlnJ3Mgc3RlcCwgcmV2ZXJzZWQgYW5kIHR5cGVcbiAgICogQHBhcmFtIHsqfSBuZXdDb25maWdcbiAgICogQHBhcmFtIHsqfSBwcm9wXG4gICAqL1xuICB1cGRhdGVDb2xvclVJQnlDb2xvclJhbmdlKG5ld0NvbmZpZywgcHJvcCkge1xuICAgIGlmICh0eXBlb2YgbmV3Q29uZmlnLnNob3dEcm9wZG93biAhPT0gJ251bWJlcicpIHJldHVybjtcblxuICAgIGNvbnN0IHtjb2xvclVJLCB2aXNDb25maWd9ID0gdGhpcy5jb25maWc7XG4gICAgdGhpcy51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICBjb2xvclVJOiB7XG4gICAgICAgIC4uLmNvbG9yVUksXG4gICAgICAgIFtwcm9wXToge1xuICAgICAgICAgIC4uLmNvbG9yVUlbcHJvcF0sXG4gICAgICAgICAgY29sb3JSYW5nZUNvbmZpZzoge1xuICAgICAgICAgICAgLi4uY29sb3JVSVtwcm9wXS5jb2xvclJhbmdlQ29uZmlnLFxuICAgICAgICAgICAgdHlwZTogdmlzQ29uZmlnW3Byb3BdLnR5cGUsXG4gICAgICAgICAgICBzdGVwczogdmlzQ29uZmlnW3Byb3BdLmNvbG9ycz8ubGVuZ3RoLFxuICAgICAgICAgICAgcmV2ZXJzZWQ6IEJvb2xlYW4odmlzQ29uZmlnW3Byb3BdLnJldmVyc2VkKSxcbiAgICAgICAgICAgIGhleENvbHVtbjogdGhpcy5nZXRIZXhDb2x1bW4ocHJvcCksXG4gICAgICAgICAgICBpc0hleENvbHVtbjogdGhpcy5pc0NvbG9yZWRCeUNvbG9yQ29sdW1uKHByb3ApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuICB1cGRhdGVDb2xvclJhbmdlQnlDb2xvclVJKG5ld0NvbmZpZywgcHJldmlvdXMsIHByb3ApIHtcbiAgICAvLyBvbmx5IHVwZGF0ZSBjb2xvclJhbmdlIGlmIGNoYW5nZXMgaW4gVUkgaXMgbWFkZSB0byAncmV2ZXJzZWQnLCAnc3RlcHMnIG9yIHN0ZXBzXG4gICAgY29uc3Qgc2hvdWxkVXBkYXRlID1cbiAgICAgIG5ld0NvbmZpZy5jb2xvclJhbmdlQ29uZmlnICYmXG4gICAgICBbJ3JldmVyc2VkJywgJ3N0ZXBzJ10uc29tZShcbiAgICAgICAga2V5ID0+XG4gICAgICAgICAgbmV3Q29uZmlnLmNvbG9yUmFuZ2VDb25maWcuaGFzT3duUHJvcGVydHkoa2V5KSAmJlxuICAgICAgICAgIG5ld0NvbmZpZy5jb2xvclJhbmdlQ29uZmlnW2tleV0gIT09XG4gICAgICAgICAgICAocHJldmlvdXNbcHJvcF0gfHwgREVGQVVMVF9DT0xPUl9VSSkuY29sb3JSYW5nZUNvbmZpZ1trZXldXG4gICAgICApO1xuICAgIGlmICghc2hvdWxkVXBkYXRlKSByZXR1cm47XG5cbiAgICBjb25zdCB7Y29sb3JVSSwgdmlzQ29uZmlnfSA9IHRoaXMuY29uZmlnO1xuICAgIGNvbnN0IHtzdGVwcywgcmV2ZXJzZWR9ID0gY29sb3JVSVtwcm9wXS5jb2xvclJhbmdlQ29uZmlnO1xuICAgIGNvbnN0IGNvbG9yUmFuZ2UgPSB2aXNDb25maWdbcHJvcF07XG4gICAgLy8gZmluZCBiYXNlZCBvbiBzdGVwIG9yIHJldmVyc2VkXG4gICAgbGV0IHVwZGF0ZTtcbiAgICBpZiAobmV3Q29uZmlnLmNvbG9yUmFuZ2VDb25maWcuaGFzT3duUHJvcGVydHkoJ3N0ZXBzJykpIHtcbiAgICAgIGNvbnN0IGdyb3VwID0gZ2V0Q29sb3JHcm91cEJ5TmFtZShjb2xvclJhbmdlKTtcblxuICAgICAgaWYgKGdyb3VwKSB7XG4gICAgICAgIGNvbnN0IHNhbWVHcm91cCA9IENPTE9SX1JBTkdFUy5maWx0ZXIoY3IgPT4gZ2V0Q29sb3JHcm91cEJ5TmFtZShjcikgPT09IGdyb3VwKTtcblxuICAgICAgICB1cGRhdGUgPSBzYW1lR3JvdXAuZmluZChjciA9PiBjci5jb2xvcnMubGVuZ3RoID09PSBzdGVwcyk7XG5cbiAgICAgICAgaWYgKHVwZGF0ZSAmJiBjb2xvclJhbmdlLnJldmVyc2VkKSB7XG4gICAgICAgICAgdXBkYXRlID0gcmV2ZXJzZUNvbG9yUmFuZ2UodHJ1ZSwgdXBkYXRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1cGRhdGUgJiYgY29sb3JSYW5nZS5jb2xvck1hcCkge1xuICAgICAgICAgIHVwZGF0ZSA9IHRoaXMudXBkYXRlQ29sb3JNYXAocHJvcCwgY29sb3JSYW5nZS5jb2xvck1hcCwgdXBkYXRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChuZXdDb25maWcuY29sb3JSYW5nZUNvbmZpZy5oYXNPd25Qcm9wZXJ0eSgncmV2ZXJzZWQnKSkge1xuICAgICAgdXBkYXRlID0gcmV2ZXJzZUNvbG9yUmFuZ2UocmV2ZXJzZWQsIHVwZGF0ZSB8fCBjb2xvclJhbmdlKTtcbiAgICB9XG5cbiAgICBpZiAodXBkYXRlKSB7XG4gICAgICB0aGlzLnVwZGF0ZUxheWVyVmlzQ29uZmlnKHtbcHJvcF06IHVwZGF0ZX0pO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUNvbG9yTWFwKHByb3AsIGNvbG9yTWFwLCBjb2xvclJhbmdlKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IHtmaWVsZCwgZG9tYWlufSA9IE9iamVjdC52YWx1ZXModGhpcy52aXN1YWxDaGFubmVscykuZmluZCh2YWx1ZSA9PiB2YWx1ZS5yYW5nZSA9PT0gcHJvcCk7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuY29uZmlnW2ZpZWxkXT8udHlwZTtcblxuICAgIGlmICh0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlID09PSAnYm9vbGVhbicgfHwgdHlwZSA9PT0gJ2RhdGUnKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVDYXRlZ29yeUNvbG9yTWFwKGNvbG9yTWFwLCB0aGlzLmNvbmZpZ1tkb21haW5dLCBjb2xvclJhbmdlKTtcbiAgICB9XG5cbiAgICAvLyBJZiBubyB0eXBlIG9yIHR5cGUgaXMgbm90IHN0cmluZywgYm9vbGVhbiBvciBkYXRlXG4gICAgcmV0dXJuIHRoaXMudXBkYXRlTnVtZXJpY0NvbG9yTWFwKGNvbG9yTWFwLCB0aGlzLmNvbmZpZ1tkb21haW5dLCBjb2xvclJhbmdlKTtcbiAgfVxuXG4gIHVwZGF0ZUNhdGVnb3J5Q29sb3JNYXAoY29sb3JNYXAsIGRvbWFpbiwgY29sb3JSYW5nZSkge1xuICAgIGNvbnN0IGNvbG9ycyA9IGNvbG9yUmFuZ2UuY29sb3JzO1xuICAgIGNvbnN0IGFzc2lnbmVkQ2F0ZWdvcmllcyA9IFtdO1xuICAgIGlmIChjb2xvclJhbmdlLnR5cGUgPT09IGhleENvbG9yKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5jb2xvclJhbmdlLFxuICAgICAgICBjb2xvck1hcDogW11cbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IG5ld0NvbG9yTWFwID0gY29sb3JNYXAuc2xpY2UoMCwgY29sb3JzLmxlbmd0aCkubWFwKChjTWFwLCBpbmRleCkgPT4ge1xuICAgICAgYXNzaWduZWRDYXRlZ29yaWVzLnB1c2goY01hcFswXSk7XG4gICAgICByZXR1cm4gW2NNYXBbMF0sIGNvbG9yc1tpbmRleF1dO1xuICAgIH0pO1xuICAgIGNvbnN0IHVuYXNzaWduZWRDb2xvcnMgPSBjb2xvcnMuc2xpY2UobmV3Q29sb3JNYXAubGVuZ3RoLCBjb2xvcnMubGVuZ3RoKTtcblxuICAgIGZvciAoY29uc3QgY29sb3Igb2YgdW5hc3NpZ25lZENvbG9ycykge1xuICAgICAgY29uc3QgY2F0ZWdvcnkgPSBkb21haW4uZmluZChkID0+ICFhc3NpZ25lZENhdGVnb3JpZXMuaW5jbHVkZXMoZCkpO1xuICAgICAgaWYgKCFjYXRlZ29yeSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGFzc2lnbmVkQ2F0ZWdvcmllcy5wdXNoKGNhdGVnb3J5KTtcbiAgICAgIG5ld0NvbG9yTWFwLnB1c2goW2NhdGVnb3J5LCBjb2xvcl0pO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgLi4uY29sb3JSYW5nZSxcbiAgICAgIGNvbG9yTWFwOiBuZXdDb2xvck1hcFxuICAgIH07XG4gIH1cblxuICB1cGRhdGVOdW1lcmljQ29sb3JNYXAoY29sb3JNYXAsIGRvbWFpbiwgdXBkYXRlKSB7XG4gICAgY29uc3QgY29sb3JzID0gdXBkYXRlLmNvbG9ycztcbiAgICBsZXQgbmV3Q29sb3JNYXAgPSBjb2xvck1hcC5zbGljZSgwLCBjb2xvcnMubGVuZ3RoKTtcblxuICAgIG5ld0NvbG9yTWFwID0gbmV3Q29sb3JNYXAubWFwKChjTWFwLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBpbmRleCA9PT0gbmV3Q29sb3JNYXAubGVuZ3RoIC0gMSA/IG51bGwgOiBjTWFwWzBdO1xuICAgICAgcmV0dXJuIFt2YWx1ZSwgY29sb3JzW2luZGV4XV07XG4gICAgfSk7XG4gICAgY29uc3QgdW5hc3NpZ25lZENvbG9ycyA9IGNvbG9ycy5zbGljZShuZXdDb2xvck1hcC5sZW5ndGgsIGNvbG9ycy5sZW5ndGgpO1xuXG4gICAgaWYgKHVuYXNzaWduZWRDb2xvcnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgY29sb3JNYXBWYWx1ZXMgPSBjb2xvck1hcC5tYXAoYyA9PiBjWzBdKS5maWx0ZXIoYyA9PiB0eXBlb2YgYyA9PT0gJ251bWJlcicpO1xuICAgICAgY29uc3QgbWF4VmFsdWUgPSBNYXRoLm1heCguLi5jb2xvck1hcFZhbHVlcywgZG9tYWluW2RvbWFpbi5sZW5ndGggLSAxXSk7XG4gICAgICBjb25zdCBwcmV2VmFsdWUgPSBuZXdDb2xvck1hcFtuZXdDb2xvck1hcC5sZW5ndGggLSAyXVswXTtcbiAgICAgIGNvbnN0IHN0ZXAgPSAobWF4VmFsdWUgLSBwcmV2VmFsdWUpIC8gKHVuYXNzaWduZWRDb2xvcnMubGVuZ3RoICsgMSk7XG4gICAgICBuZXdDb2xvck1hcFtuZXdDb2xvck1hcC5sZW5ndGggLSAxXVswXSA9IHByZXZWYWx1ZSArIHN0ZXA7XG5cbiAgICAgIGZvciAoY29uc3QgW2ksIGNvbG9yXSBvZiB1bmFzc2lnbmVkQ29sb3JzLmVudHJpZXMoKSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGkgPT09IHVuYXNzaWduZWRDb2xvcnMubGVuZ3RoIC0gMSA/IG51bGwgOiBwcmV2VmFsdWUgKyAoc3RlcCAqIChpICsgMikpO1xuICAgICAgICBuZXdDb2xvck1hcC5wdXNoKFt2YWx1ZSwgY29sb3JdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnVwZGF0ZSxcbiAgICAgIGNvbG9yTWFwOiBuZXdDb2xvck1hcFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciBsYXllciBoYXMgYWxsIGNvbHVtbnNcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHllcyBvciBub1xuICAgKi9cbiAgaGFzQWxsQ29sdW1ucygpIHtcbiAgICBjb25zdCB7Y29sdW1uc30gPSB0aGlzLmNvbmZpZztcbiAgICByZXR1cm4gKFxuICAgICAgKGNvbHVtbnMgJiZcbiAgICAgIE9iamVjdC52YWx1ZXMoY29sdW1ucykuZXZlcnkodiA9PiB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKHYub3B0aW9uYWwgfHwgKHYudmFsdWUgJiYgdi5maWVsZElkeCA+IC0xKSk7XG4gICAgICB9KSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgbGF5ZXIgaGFzIGRhdGFcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSB8IE9iamVjdH0gbGF5ZXJEYXRhXG4gICAqIEByZXR1cm5zIHtib29sZWFufSB5ZXMgb3Igbm9cbiAgICovXG4gIGhhc0xheWVyRGF0YShsYXllckRhdGEpIHtcbiAgICBpZiAoIWxheWVyRGF0YSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gQm9vbGVhbihsYXllckRhdGEuZGF0YSAmJiBsYXllckRhdGEuZGF0YS5sZW5ndGgpO1xuICB9XG5cbiAgaXNWYWxpZFRvU2F2ZSgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlICYmIHRoaXMuaGFzQWxsQ29sdW1ucygpO1xuICB9XG5cbiAgc2hvdWxkUmVuZGVyTGF5ZXIoZGF0YSkge1xuICAgIHJldHVybiAoXG4gICAgICAodGhpcy50eXBlICYmXG4gICAgICB0aGlzLmhhc0FsbENvbHVtbnMoKSAmJlxuICAgICAgdGhpcy5oYXNMYXllckRhdGEoZGF0YSkgJiZcbiAgICAgIHR5cGVvZiB0aGlzLnJlbmRlckxheWVyID09PSAnZnVuY3Rpb24nKVxuICAgICk7XG4gIH1cblxuICBnZXRDb2xvclNjYWxlKGNvbG9yU2NhbGUsIGNvbG9yRG9tYWluLCBjb2xvclJhbmdlKSB7XG4gICAgaWYgKGNvbG9yUmFuZ2UudHlwZSA9PT0gaGV4Q29sb3IpIHtcbiAgICAgIHJldHVybiAoXywgY29sb3IpID0+IHtcbiAgICAgICAgcmV0dXJuIGhleFRvUmdiKGNvbG9yKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGNvbG9yUmFuZ2UuY29sb3JNYXApKSB7XG4gICAgICBjb25zdCBjTWFwID0gbmV3IE1hcCgpO1xuICAgICAgY29sb3JSYW5nZS5jb2xvck1hcC5mb3JFYWNoKChbaywgdl0pID0+IHtcbiAgICAgICAgY01hcC5zZXQoaywgdHlwZW9mIHYgPT09ICdzdHJpbmcnID8gaGV4VG9SZ2IodikgOiB2KTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBAdHMtaWdub3JlIGQzIHNjYWxlXG4gICAgICBjb25zdCBzY2FsZSA9IFNDQUxFX0ZVTkNbY29sb3JTY2FsZV0oKVxuICAgICAgICAuZG9tYWluKEFycmF5LmZyb20oY01hcC5rZXlzKCkpKVxuICAgICAgICAucmFuZ2UoQXJyYXkuZnJvbShjTWFwLnZhbHVlcygpKSlcbiAgICAgICAgLnVua25vd24oVU5LTk9XTl9DT0xPUik7XG4gICAgICByZXR1cm4gc2NhbGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0VmlzQ2hhbm5lbFNjYWxlKGNvbG9yU2NhbGUsIGNvbG9yRG9tYWluLCBjb2xvclJhbmdlLmNvbG9ycy5tYXAoaGV4VG9SZ2IpKTtcbiAgfVxuXG4gIGdldEN1c3RvbU1hcmtlcnNTY2FsZShyYW5nZSwgZmFsbGJhY2tJY29uKSB7XG4gICAgbGV0IHVua25vd25WYWx1ZSA9IGZhbGxiYWNrSWNvbiB8fCBGQUxMQkFDS19JQ09OO1xuICAgIGlmICghcmFuZ2UpIHtcbiAgICAgIHJldHVybiAoKSA9PiB1bmtub3duVmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3QgbWFwcGluZyA9IG5ldyBNYXAoKTtcblxuICAgIGlmIChyYW5nZS5vdGhlcnNNYXJrZXIpIHtcbiAgICAgIHVua25vd25WYWx1ZSA9IHJhbmdlLm90aGVyc01hcmtlcjtcbiAgICB9XG4gICAgZm9yIChjb25zdCB7dmFsdWUsIG1hcmtlclVybH0gb2YgcmFuZ2UubWFya2VyTWFwKSB7XG4gICAgICBpZiAobWFya2VyVXJsKSB7XG4gICAgICAgIG1hcHBpbmcuc2V0KHZhbHVlLCBtYXJrZXJVcmwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEB0cy1pZ25vcmUgZDMgc2NhbGVcbiAgICBjb25zdCBzY2FsZSA9IHNjYWxlT3JkaW5hbCgpXG4gICAgICAuZG9tYWluKEFycmF5LmZyb20obWFwcGluZy5rZXlzKCkpKVxuICAgICAgLnJhbmdlKEFycmF5LmZyb20obWFwcGluZy52YWx1ZXMoKSkpXG4gICAgICAudW5rbm93bih1bmtub3duVmFsdWUpO1xuICAgIHJldHVybiBzY2FsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXBwaW5nIGZyb20gdmlzdWFsIGNoYW5uZWxzIHRvIGRlY2suZ2wgYWNjZXNvcnNcbiAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtIFBhcmFtZXRlcnNcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcGFyYW0uZGF0YUFjY2Vzc29yIEFjY2VzcyBrZXBsZXIuZ2wgbGF5ZXIgZGF0YSBmcm9tIGRlY2suZ2wgbGF5ZXJcbiAgICogQHBhcmFtIHtpbXBvcnQoJ3V0aWxzL3RhYmxlLXV0aWxzL2RhdGEtY29udGFpbmVyLWludGVyZmFjZScpLkRhdGFDb250YWluZXJJbnRlcmZhY2V9IHBhcmFtLmRhdGFDb250YWluZXIgRGF0YUNvbnRhaW5lciB0byB1c2UgdXNlIHdpdGggZGF0YUFjY2Vzc29yXG4gICAqIEByZXR1cm4ge09iamVjdH0gYXR0cmlidXRlQWNjZXNzb3JzIC0gZGVjay5nbCBsYXllciBhdHRyaWJ1dGUgYWNjZXNzb3JzXG4gICAqL1xuICBnZXRBdHRyaWJ1dGVBY2Nlc3NvcnMoe2RhdGFBY2Nlc3NvciA9IGRlZmF1bHREYXRhQWNjZXNzb3IsIGRhdGFDb250YWluZXJ9KSB7XG4gICAgY29uc3QgYXR0cmlidXRlQWNjZXNzb3JzID0ge307XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuICAgIE9iamVjdC5rZXlzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goY2hhbm5lbCA9PiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGZpZWxkLFxuICAgICAgICBmaXhlZCxcbiAgICAgICAgc2NhbGUsXG4gICAgICAgIGRvbWFpbixcbiAgICAgICAgcmFuZ2UsXG4gICAgICAgIGFjY2Vzc29yLFxuICAgICAgICBkZWZhdWx0VmFsdWUsXG4gICAgICAgIGdldEF0dHJpYnV0ZVZhbHVlLFxuICAgICAgICBudWxsVmFsdWUsXG4gICAgICAgIGNoYW5uZWxTY2FsZVR5cGUsXG4gICAgICAgIGFnZ3JlZ2F0aW9uXG4gICAgICB9ID0gdGhpcy52aXN1YWxDaGFubmVsc1tjaGFubmVsXTtcblxuICAgICAgY29uc3Qgc2hvdWxkR2V0U2NhbGUgPSBCb29sZWFuKFxuICAgICAgICAoc2NhbGUgfHwgY2hhbm5lbFNjYWxlVHlwZSA9PT0gQ0hBTk5FTF9TQ0FMRVMuaWRlbnRpdHkpICYmIHRoaXMuY29uZmlnW2ZpZWxkXVxuICAgICAgKTtcblxuICAgICAgaWYgKHNob3VsZEdldFNjYWxlKSB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBbdGhpcy5jb25maWdbc2NhbGVdLCB0aGlzLmNvbmZpZ1tkb21haW5dLCB0aGlzLmNvbmZpZy52aXNDb25maWdbcmFuZ2VdXTtcbiAgICAgICAgY29uc3QgaXNGaXhlZCA9IGZpeGVkICYmIHRoaXMuY29uZmlnLnZpc0NvbmZpZ1tmaXhlZF07XG4gICAgICAgIC8vIEl0J3MgaW1wb3J0YW50IHRvIGRlY2xhcmUgYXMgY29uc3QgYWxsIHRoZSBwYXJhbWV0ZXJzIHRoYXQgd2UgYXJlIGdvaW5nIHRvIGJlIHVzZSBpbiB0aGUgZ2V0RW5jb2RlZENoYW5uZWxWYWx1ZSBjYWxsXG4gICAgICAgIC8vIG90aGVyd2lzZSwgdGhlIG9sZExheWVyRGF0YSBwYXJhbWV0ZXIgaW4gZm9ybWF0TGF5ZXJEYXRhIG1ldGhvZCB3aWxsIGJlIHdyb25nICh5b3UgY2FuIGNoZWNrIHRoZSBmb3JtYXRMYXllckRhdGEgVGlsZUxheWVyIG1ldGhvZCBpbiBCdWlsZGVyIGFzIGV4YW1wbGUpXG4gICAgICAgIGNvbnN0IGZpZWxkQ29uZmlnID0gdGhpcy5jb25maWdbZmllbGRdO1xuICAgICAgICBjb25zdCBhZ2dyZWdhdGlvblZhbHVlID0gdGhpcy5jb25maWcudmlzQ29uZmlnW2FnZ3JlZ2F0aW9uXTtcblxuICAgICAgICBjb25zdCBzY2FsZUZ1bmN0aW9uID1cbiAgICAgICAgICBjaGFubmVsU2NhbGVUeXBlID09PSBDSEFOTkVMX1NDQUxFUy5pZGVudGl0eVxuICAgICAgICAgICAgPyBzY2FsZUlkZW50aXR5XG4gICAgICAgICAgICA6IGNoYW5uZWxTY2FsZVR5cGUgPT09IENIQU5ORUxfU0NBTEVTLmNvbG9yXG4gICAgICAgICAgICA/IHRoaXMuZ2V0Q29sb3JTY2FsZSguLi5hcmdzKVxuICAgICAgICAgICAgOiBjaGFubmVsU2NhbGVUeXBlID09PSBDSEFOTkVMX1NDQUxFUy5jdXN0b21NYXJrZXJcbiAgICAgICAgICAgID8gdGhpcy5nZXRDdXN0b21NYXJrZXJzU2NhbGUoXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcudmlzQ29uZmlnW3JhbmdlXSxcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy52aXNDb25maWcuY3VzdG9tTWFya2Vyc1VybFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IHRoaXMuZ2V0VmlzQ2hhbm5lbFNjYWxlKC4uLmFyZ3MsIGlzRml4ZWQpO1xuXG4gICAgICAgIGF0dHJpYnV0ZUFjY2Vzc29yc1thY2Nlc3Nvcl0gPSBkID0+XG4gICAgICAgICAgdGhpcy5nZXRFbmNvZGVkQ2hhbm5lbFZhbHVlKHtcbiAgICAgICAgICAgIGNoYW5uZWwsXG4gICAgICAgICAgICBkYXRhQ29udGFpbmVyLFxuICAgICAgICAgICAgc2NhbGU6IHNjYWxlRnVuY3Rpb24sXG4gICAgICAgICAgICBkYXRhOiBkYXRhQWNjZXNzb3IoZGF0YUNvbnRhaW5lcikoZCksXG4gICAgICAgICAgICBmaWVsZDogZmllbGRDb25maWcsXG4gICAgICAgICAgICBfYWdncmVnYXRpb246IGFnZ3JlZ2F0aW9uVmFsdWUsXG4gICAgICAgICAgICBudWxsVmFsdWVcbiAgICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGdldEF0dHJpYnV0ZVZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGF0dHJpYnV0ZUFjY2Vzc29yc1thY2Nlc3Nvcl0gPSBnZXRBdHRyaWJ1dGVWYWx1ZSh0aGlzLmNvbmZpZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhdHRyaWJ1dGVBY2Nlc3NvcnNbYWNjZXNzb3JdID1cbiAgICAgICAgICB0eXBlb2YgZGVmYXVsdFZhbHVlID09PSAnZnVuY3Rpb24nID8gZGVmYXVsdFZhbHVlKHRoaXMuY29uZmlnKSA6IGRlZmF1bHRWYWx1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCEoYWNjZXNzb3IgaW4gYXR0cmlidXRlQWNjZXNzb3JzKSkge1xuICAgICAgICBDb25zb2xlLndhcm4oYEZhaWxlZCB0byBwcm92aWRlIGFjY2Vzc29yIGZ1bmN0aW9uIGZvciAke2FjY2Vzc29yIHx8IGNoYW5uZWx9YCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXR0cmlidXRlQWNjZXNzb3JzO1xuICB9XG5cbiAgZ2V0VmlzQ2hhbm5lbFNjYWxlKHNjYWxlLCBkb21haW4sIHJhbmdlLCBmaXhlZCkge1xuICAgIGlmIChzY2FsZSA9PT0gU0NBTEVfVFlQRVMub3JkaW5hbCkge1xuICAgICAgLy8gQHRzLWlnbm9yZSBkMy1zY2FsZSB0eXBlXG4gICAgICByZXR1cm4gU0NBTEVfRlVOQ1tzY2FsZV0oKVxuICAgICAgICAuZG9tYWluKGRvbWFpbi5zbGljZSgwLCByYW5nZS5sZW5ndGgpKVxuICAgICAgICAucmFuZ2UocmFuZ2UpXG4gICAgICAgIC51bmtub3duKFVOS05PV05fQ09MT1IpO1xuICAgIH1cblxuICAgIC8vIGZvciBgY291bnRgIGFnZ3JlZ2F0aW9uLCB3ZSBkb21haW4gaXMgYWN0dWFsbHkgYFswLCBJbmZpbml0eV1gIHNvIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZVxuICAgIC8vIHRvIHVzZSBpdCwgc28gc2tpcCBzcGVjeWZ5aW5nIHRoaXMgZG9tYWluc1xuICAgIGNvbnN0IGRvbWFpbklzSW5maW5pdGUgPSBkb21haW4gJiYgKGRvbWFpblswXSA9PT0gMCAmJiBkb21haW5bMV0gPT09IEluZmluaXR5KTtcbiAgICBjb25zdCBzY2FsZUZhY3RvcnkgPSBTQ0FMRV9GVU5DW2ZpeGVkID8gJ2xpbmVhcicgOiBzY2FsZV07XG4gICAgLy8gQHRzLWlnbm9yZSBkMy1zY2FsZSB0eXBlXG4gICAgbGV0IHJlc3VsdCA9IHNjYWxlRmFjdG9yeSgpO1xuICAgIGlmIChkb21haW4gJiYgIWRvbWFpbklzSW5maW5pdGUpIHtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5kb21haW4oZG9tYWluKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdC5yYW5nZShmaXhlZCA/IGRvbWFpbiA6IHJhbmdlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgbG9uZ2l0dWRlIGFuZCBsYXRpdHVkZSBib3VuZHMgb2YgdGhlIGRhdGEuXG4gICAqIEBwYXJhbSB7aW1wb3J0KCd1dGlscy90YWJsZS11dGlscy9kYXRhLWNvbnRhaW5lci1pbnRlcmZhY2UnKS5EYXRhQ29udGFpbmVySW50ZXJmYWNlfSBkYXRhQ29udGFpbmVyIERhdGFDb250YWluZXIgdG8gY2FsY3VsYXRlIGJvdW5kcyBmb3IuXG4gICAqIEBwYXJhbSB7KGQ6IHtpbmRleDogbnVtYmVyfSwgZGM6IGltcG9ydCgndXRpbHMvdGFibGUtdXRpbHMvZGF0YS1jb250YWluZXItaW50ZXJmYWNlJykuRGF0YUNvbnRhaW5lckludGVyZmFjZSkgPT4gbnVtYmVyW119IGdldFBvc2l0aW9uIEFjY2VzcyBrZXBsZXIuZ2wgbGF5ZXIgZGF0YSBmcm9tIGRlY2suZ2wgbGF5ZXJcbiAgICogQHJldHVybiB7bnVtYmVyW118bnVsbH0gYm91bmRzIG9mIHRoZSBkYXRhLlxuICAgKi9cbiAgZ2V0UG9pbnRzQm91bmRzKGRhdGFDb250YWluZXIsIGdldFBvc2l0aW9uKSB7XG4gICAgLy8gbm8gbmVlZCB0byBsb29wIHRocm91Z2ggdGhlIGVudGlyZSBkYXRhc2V0XG4gICAgLy8gZ2V0IGEgc2FtcGxlIG9mIGRhdGEgdG8gY2FsY3VsYXRlIGJvdW5kc1xuICAgIGNvbnN0IHNhbXBsZURhdGEgPVxuICAgICAgZGF0YUNvbnRhaW5lci5udW1Sb3dzKCkgPiBNQVhfU0FNUExFX1NJWkVcbiAgICAgICAgPyBnZXRTYW1wbGVEYXRhKGRhdGFDb250YWluZXIsIE1BWF9TQU1QTEVfU0laRSlcbiAgICAgICAgOiBkYXRhQ29udGFpbmVyO1xuXG4gICAgY29uc3QgcG9pbnRzID0gc2FtcGxlRGF0YS5tYXBJbmRleChnZXRQb3NpdGlvbik7XG5cbiAgICBjb25zdCBsYXRCb3VuZHMgPSBnZXRMYXRMbmdCb3VuZHMocG9pbnRzLCAxLCBbLTkwLCA5MF0pO1xuICAgIGNvbnN0IGxuZ0JvdW5kcyA9IGdldExhdExuZ0JvdW5kcyhwb2ludHMsIDAsIFstMTgwLCAxODBdKTtcblxuICAgIGlmICghbGF0Qm91bmRzIHx8ICFsbmdCb3VuZHMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBbbG5nQm91bmRzWzBdLCBsYXRCb3VuZHNbMF0sIGxuZ0JvdW5kc1sxXSwgbGF0Qm91bmRzWzFdXTtcbiAgfVxuXG4gIGdldENoYW5nZWRUcmlnZ2VycyhkYXRhVXBkYXRlVHJpZ2dlcnMpIHtcbiAgICBjb25zdCB0cmlnZ2VyQ2hhbmdlZCA9IGRpZmZVcGRhdGVUcmlnZ2VycyhkYXRhVXBkYXRlVHJpZ2dlcnMsIHRoaXMuX29sZERhdGFVcGRhdGVUcmlnZ2Vycyk7XG4gICAgdGhpcy5fb2xkRGF0YVVwZGF0ZVRyaWdnZXJzID0gZGF0YVVwZGF0ZVRyaWdnZXJzO1xuXG4gICAgcmV0dXJuIHRyaWdnZXJDaGFuZ2VkO1xuICB9XG5cbiAgZ2V0RW5jb2RlZENoYW5uZWxWYWx1ZSh7XG4gICAgY2hhbm5lbCxcbiAgICBzY2FsZSxcbiAgICBkYXRhLFxuICAgIGZpZWxkLFxuICAgIGRhdGFDb250YWluZXIsXG4gICAgLy8gSW4gYnVpbGRlciB3ZSBvdmVyd3JpdGUgdGhlIGdldFZhbHVlIGZ1bmN0aW9uIGFuZCB3ZSB1c2UgdGhlIF9hZ2dyZWdhdGlvbiBwYXJhbWV0ZXIgaW4gc3BhdGlhbCBpbmRleCBsYXllcnMgYXMgdGhlIFF1YWRrZXlMYXllci5cbiAgICBfYWdncmVnYXRpb24sXG4gICAgbnVsbFZhbHVlID0gTk9fVkFMVUVfQ09MT1IsXG4gICAgZ2V0VmFsdWUgPSBkZWZhdWx0R2V0RmllbGRWYWx1ZVxuICB9KSB7XG4gICAgbGV0IGNvbG9yQ29sdW1uVmFsdWU7XG4gICAgY29uc3Qge3R5cGV9ID0gZmllbGQ7XG4gICAgY29uc3QgdmFsdWUgPSBnZXRWYWx1ZShmaWVsZCwgZGF0YSk7XG4gICAgY29uc3QgY2hhbm5lbENvbmZpZyA9IHRoaXMuY29uZmlnLnZpc0NvbmZpZ1t0aGlzLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdLnJhbmdlXTtcbiAgICBjb25zdCBjaGFubmVsRmllbGQgPSB0aGlzLmNvbmZpZ1t0aGlzLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdLmZpZWxkXTtcblxuICAgIGlmIChjaGFubmVsQ29uZmlnLnR5cGUgPT09IGhleENvbG9yKSB7XG4gICAgICBjb25zdCBjb2x1bW5GaWVsZCA9IHtcbiAgICAgICAgaWQ6IGNoYW5uZWxGaWVsZC5jb2xvckNvbHVtbixcbiAgICAgICAgbmFtZTogY2hhbm5lbEZpZWxkLmNvbG9yQ29sdW1uLFxuICAgICAgICBmaWVsZElkeDogY2hhbm5lbEZpZWxkLmNvbG9yQ29sdW1uSWR4LFxuICAgICAgICB2YWx1ZUFjY2Vzc29yOiBkID0+IHtcbiAgICAgICAgICByZXR1cm4gZGF0YUNvbnRhaW5lci52YWx1ZUF0KGQuaW5kZXgsIGNoYW5uZWxGaWVsZC5jb2xvckNvbHVtbklkeCk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGNvbG9yQ29sdW1uVmFsdWUgPSBnZXRWYWx1ZShjb2x1bW5GaWVsZCwgZGF0YSk7XG4gICAgfVxuXG4gICAgaWYgKCFub3ROdWxsb3JVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgICByZXR1cm4gbnVsbFZhbHVlO1xuICAgIH1cblxuICAgIGxldCBhdHRyaWJ1dGVWYWx1ZTtcbiAgICBpZiAodHlwZSA9PT0gQUxMX0ZJRUxEX1RZUEVTLnRpbWVzdGFtcCkge1xuICAgICAgLy8gc2hvdWxkbid0IG5lZWQgdG8gY29udmVydCBoZXJlXG4gICAgICAvLyBzY2FsZSBGdW5jdGlvbiBzaG91bGQgdGFrZSBjYXJlIG9mIGl0XG4gICAgICBhdHRyaWJ1dGVWYWx1ZSA9IHNjYWxlKG5ldyBEYXRlKHZhbHVlKSwgY29sb3JDb2x1bW5WYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF0dHJpYnV0ZVZhbHVlID0gc2NhbGUodmFsdWUsIGNvbG9yQ29sdW1uVmFsdWUpO1xuICAgIH1cblxuICAgIGlmICghbm90TnVsbG9yVW5kZWZpbmVkKGF0dHJpYnV0ZVZhbHVlKSkge1xuICAgICAgYXR0cmlidXRlVmFsdWUgPSBudWxsVmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF0dHJpYnV0ZVZhbHVlO1xuICB9XG5cbiAgdXBkYXRlTWV0YShtZXRhKSB7XG4gICAgdGhpcy5tZXRhID0gey4uLnRoaXMubWV0YSwgLi4ubWV0YX07XG4gIH1cblxuICB1cGRhdGVMYXllckxlZ2VuZChzZXR0aW5ncykge1xuICAgIHRoaXMubGVnZW5kU2V0dGluZ3MgPSB7Li4udGhpcy5sZWdlbmRTZXR0aW5ncywgLi4uc2V0dGluZ3N9O1xuICB9XG5cbiAgZ2V0RGF0YVVwZGF0ZVRyaWdnZXJzKHtmaWx0ZXJlZEluZGV4LCBpZCwgYWxsRGF0YX0pIHtcbiAgICBjb25zdCB7Y29sdW1uc30gPSB0aGlzLmNvbmZpZztcblxuICAgIHJldHVybiB7XG4gICAgICBnZXREYXRhOiB7ZGF0YXNldElkOiBpZCwgYWxsRGF0YSwgY29sdW1ucywgZmlsdGVyZWRJbmRleH0sXG4gICAgICBnZXRNZXRhOiB7ZGF0YXNldElkOiBpZCwgYWxsRGF0YSwgY29sdW1uc30sXG4gICAgICAuLi4odGhpcy5jb25maWcudGV4dExhYmVsIHx8IFtdKS5yZWR1Y2UoXG4gICAgICAgIChhY2N1LCB0bCwgaSkgPT4gKHtcbiAgICAgICAgICAuLi5hY2N1LFxuICAgICAgICAgIFtgZ2V0TGFiZWxDaGFyYWN0ZXJTZXQtJHtpfWBdOiB0bC5maWVsZCA/IHRsLmZpZWxkLm5hbWUgOiBudWxsXG4gICAgICAgIH0pLFxuICAgICAgICB7fVxuICAgICAgKVxuICAgIH07XG4gIH1cblxuICB1cGRhdGVEYXRhKGRhdGFzZXRzLCBvbGRMYXllckRhdGEpIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLmRhdGFJZCkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBjb25zdCBkYXRhc2V0ID0gdGhpcy5nZXREYXRhc2V0KGRhdGFzZXRzKTtcbiAgICBjb25zdCB7ZGF0YUNvbnRhaW5lcn0gPSBkYXRhc2V0O1xuXG4gICAgdGhpcy51cGRhdGVWaXN1YWxDaGFubmVsRmllbGRzKGRhdGFzZXQpO1xuICAgIHRoaXMudXBkYXRlSGV4Q29sb3JEb21haW4oZGF0YXNldCk7XG5cbiAgICBjb25zdCBnZXRQb3NpdGlvbiA9IHRoaXMuZ2V0UG9zaXRpb25BY2Nlc3NvcihkYXRhQ29udGFpbmVyKTtcbiAgICBjb25zdCBkYXRhVXBkYXRlVHJpZ2dlcnMgPSB0aGlzLmdldERhdGFVcGRhdGVUcmlnZ2VycyhkYXRhc2V0KTtcbiAgICBjb25zdCB0cmlnZ2VyQ2hhbmdlZCA9IHRoaXMuZ2V0Q2hhbmdlZFRyaWdnZXJzKGRhdGFVcGRhdGVUcmlnZ2Vycyk7XG5cbiAgICBpZiAodHJpZ2dlckNoYW5nZWQuZ2V0TWV0YSkge1xuICAgICAgdGhpcy51cGRhdGVMYXllck1ldGEoZGF0YUNvbnRhaW5lciwgZ2V0UG9zaXRpb24pO1xuICAgIH1cblxuICAgIGxldCBkYXRhID0gW107XG5cbiAgICBpZiAoIXRyaWdnZXJDaGFuZ2VkLmdldERhdGEgJiYgb2xkTGF5ZXJEYXRhICYmIG9sZExheWVyRGF0YS5kYXRhKSB7XG4gICAgICAvLyBzYW1lIGRhdGFcbiAgICAgIGRhdGEgPSBvbGRMYXllckRhdGEuZGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0YSA9IHRoaXMuY2FsY3VsYXRlRGF0YUF0dHJpYnV0ZShkYXRhc2V0LCBnZXRQb3NpdGlvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtkYXRhLCB0cmlnZ2VyQ2hhbmdlZH07XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHN0eWxlZCBmaWVsZHMgdG8gbWF0Y2ggb25lcyBmcm9tIG5ldyBkYXRhc2V0LlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YXNldFxuICAgKi9cbiAgdXBkYXRlVmlzdWFsQ2hhbm5lbEZpZWxkcyhkYXRhc2V0KSB7XG4gICAgZm9yIChjb25zdCB7ZmllbGQsIHJhbmdlfSBvZiBPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpKSB7XG4gICAgICBjb25zdCBvbGRGaWVsZCA9IHRoaXMuY29uZmlnW2ZpZWxkXTtcbiAgICAgIGNvbnN0IGlzVXNpbmdIZXhDb2xvckNvZGUgPSB0aGlzLmNvbmZpZy52aXNDb25maWdbcmFuZ2VdLmhleENvbG9yO1xuICAgICAgaWYgKCFvbGRGaWVsZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsZXQgbmV3RGF0YVNldEZpZWxkID0gZGF0YXNldC5maWVsZHMuZmluZChmZCA9PiBmZC5uYW1lID09PSBvbGRGaWVsZC5uYW1lKSB8fCBudWxsO1xuICAgICAgaWYgKGlzVXNpbmdIZXhDb2xvckNvZGUpIHtcbiAgICAgICAgbmV3RGF0YVNldEZpZWxkID0ge1xuICAgICAgICAgIC4uLm5ld0RhdGFTZXRGaWVsZCxcbiAgICAgICAgICBjb2xvckNvbHVtbjogbmV3RGF0YVNldEZpZWxkLmNvbG9yQ29sdW1uIHx8IG9sZEZpZWxkLmNvbG9yQ29sdW1uLFxuICAgICAgICAgIGNvbG9yQ29sdW1uSWR4OiBuZXdEYXRhU2V0RmllbGQuY29sb3JDb2x1bW5JZHggfHwgb2xkRmllbGQuY29sb3JDb2x1bW5JZHhcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoe1tmaWVsZF06IG5ld0RhdGFTZXRGaWVsZH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBoZWxwZXIgZnVuY3Rpb24gdG8gdXBkYXRlIG9uZSBsYXllciBkb21haW4gd2hlbiBzdGF0ZS5kYXRhIGNoYW5nZWRcbiAgICogaWYgc3RhdGUuZGF0YSBjaGFuZ2UgaXMgZHVlIG90IHVwZGF0ZSBmaWx0ZXIsIG5ld0ZpbGVyIHdpbGwgYmUgcGFzc2VkXG4gICAqIGNhbGxlZCBieSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGFcbiAgICogQHBhcmFtIHtPYmplY3R9IGRhdGFzZXRzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBuZXdGaWx0ZXJcbiAgICogQHJldHVybnMge29iamVjdH0gbGF5ZXJcbiAgICovXG4gIHVwZGF0ZUxheWVyRG9tYWluKGRhdGFzZXRzLCBuZXdGaWx0ZXIpIHtcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMuZ2V0RGF0YXNldChkYXRhc2V0cyk7XG4gICAgaWYgKCF0YWJsZSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIE9iamVjdC52YWx1ZXModGhpcy52aXN1YWxDaGFubmVscykuZm9yRWFjaChjaGFubmVsID0+IHtcbiAgICAgIGNvbnN0IHtzY2FsZX0gPSBjaGFubmVsO1xuICAgICAgY29uc3Qgc2NhbGVUeXBlID0gdGhpcy5jb25maWdbc2NhbGVdO1xuXG4gICAgICAvLyBvcmRpbmFsIGRvbWFpbiBpcyBiYXNlZCBvbiBkYXRhQ29udGFpbmVyLCBpZiBvbmx5IGZpbHRlciBjaGFuZ2VkXG4gICAgICAvLyBubyBuZWVkIHRvIHVwZGF0ZSBvcmRpbmFsIGRvbWFpblxuICAgICAgaWYgKCFuZXdGaWx0ZXIgfHwgc2NhbGVUeXBlICE9PSBTQ0FMRV9UWVBFUy5vcmRpbmFsKSB7XG4gICAgICAgIGNvbnN0IHtkb21haW59ID0gY2hhbm5lbDtcbiAgICAgICAgY29uc3QgdXBkYXRlZERvbWFpbiA9IHRoaXMuY2FsY3VsYXRlTGF5ZXJEb21haW4odGFibGUsIGNoYW5uZWwpO1xuICAgICAgICB0aGlzLnVwZGF0ZUxheWVyQ29uZmlnKHtbZG9tYWluXTogdXBkYXRlZERvbWFpbn0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBnZXREYXRhc2V0KGRhdGFzZXRzKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmRhdGFJZCA/IGRhdGFzZXRzW3RoaXMuY29uZmlnLmRhdGFJZF0gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHZpc3VhbCBjaGFubmVsIGZpZWxkIGFuZCBzY2FsZXMgYmFzZWQgb24gc3VwcG9ydGVkIGZpZWxkICYgc2NhbGUgdHlwZVxuICAgKiBAcGFyYW0gY2hhbm5lbFxuICAgKi9cbiAgdmFsaWRhdGVWaXN1YWxDaGFubmVsKGNoYW5uZWwpIHtcbiAgICB0aGlzLnZhbGlkYXRlRmllbGRUeXBlKGNoYW5uZWwpO1xuICAgIHRoaXMudmFsaWRhdGVTY2FsZShjaGFubmVsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBmaWVsZCB0eXBlIGJhc2VkIG9uIGNoYW5uZWxTY2FsZVR5cGVcbiAgICovXG4gIHZhbGlkYXRlRmllbGRUeXBlKGNoYW5uZWwpIHtcbiAgICBjb25zdCB2aXN1YWxDaGFubmVsID0gdGhpcy52aXN1YWxDaGFubmVsc1tjaGFubmVsXTtcbiAgICBjb25zdCB7ZmllbGQsIGNoYW5uZWxTY2FsZVR5cGUsIHN1cHBvcnRlZEZpZWxkVHlwZXN9ID0gdmlzdWFsQ2hhbm5lbDtcblxuICAgIGlmICh0aGlzLmNvbmZpZ1tmaWVsZF0pIHtcbiAgICAgIC8vIGlmIGZpZWxkIGlzIHNlbGVjdGVkLCBjaGVjayBpZiBmaWVsZCB0eXBlIGlzIHN1cHBvcnRlZFxuICAgICAgY29uc3QgY2hhbm5lbFN1cHBvcnRlZEZpZWxkVHlwZXMgPVxuICAgICAgICBzdXBwb3J0ZWRGaWVsZFR5cGVzIHx8IENIQU5ORUxfU0NBTEVfU1VQUE9SVEVEX0ZJRUxEU1tjaGFubmVsU2NhbGVUeXBlXTtcblxuICAgICAgaWYgKCFjaGFubmVsU3VwcG9ydGVkRmllbGRUeXBlcy5pbmNsdWRlcyh0aGlzLmNvbmZpZ1tmaWVsZF0udHlwZSkpIHtcbiAgICAgICAgLy8gZmllbGQgdHlwZSBpcyBub3Qgc3VwcG9ydGVkLCBzZXQgaXQgYmFjayB0byBudWxsXG4gICAgICAgIC8vIHNldCBzY2FsZSBiYWNrIHRvIGRlZmF1bHRcbiAgICAgICAgdGhpcy51cGRhdGVMYXllckNvbmZpZyh7W2ZpZWxkXTogbnVsbH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBzY2FsZSB0eXBlIGJhc2VkIG9uIGFnZ3JlZ2F0aW9uXG4gICAqL1xuICB2YWxpZGF0ZVNjYWxlKGNoYW5uZWwpIHtcbiAgICBjb25zdCB2aXN1YWxDaGFubmVsID0gdGhpcy52aXN1YWxDaGFubmVsc1tjaGFubmVsXTtcbiAgICBjb25zdCB7c2NhbGUsIHJhbmdlfSA9IHZpc3VhbENoYW5uZWw7XG4gICAgaWYgKFxuICAgICAgIXNjYWxlIHx8XG4gICAgICAodGhpcy5pc0NvbG9yZWRCeUNvbG9yQ29sdW1uKHJhbmdlKSAmJiB0aGlzLmNvbmZpZ1tzY2FsZV0gPT09IFNDQUxFX1RZUEVTLmlkZW50aXR5KVxuICAgICkge1xuICAgICAgLy8gdmlzdWFsQ2hhbm5lbCBkb2Vzbid0IGhhdmUgc2NhbGVcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2NhbGVPcHRpb25zID0gdGhpcy5nZXRTY2FsZU9wdGlvbnMoY2hhbm5lbCk7XG4gICAgLy8gY2hlY2sgaWYgY3VycmVudCBzZWxlY3RlZCBzY2FsZSBpc1xuICAgIC8vIHN1cHBvcnRlZCwgaWYgbm90LCBjaGFuZ2UgdG8gZGVmYXVsdFxuICAgIGlmICghc2NhbGVPcHRpb25zLmluY2x1ZGVzKHRoaXMuY29uZmlnW3NjYWxlXSkpIHtcbiAgICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoe1tzY2FsZV06IHNjYWxlT3B0aW9uc1swXX0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc2NhbGUgb3B0aW9ucyBiYXNlZCBvbiBjdXJyZW50IGZpZWxkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjaGFubmVsXG4gICAqIEByZXR1cm5zIHtzdHJpbmdbXX1cbiAgICovXG4gIGdldFNjYWxlT3B0aW9ucyhjaGFubmVsKSB7XG4gICAgY29uc3QgdmlzdWFsQ2hhbm5lbCA9IHRoaXMudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF07XG4gICAgY29uc3Qge2ZpZWxkLCBzY2FsZSwgY2hhbm5lbFNjYWxlVHlwZX0gPSB2aXN1YWxDaGFubmVsO1xuXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnW2ZpZWxkXVxuICAgICAgPyBGSUVMRF9PUFRTW3RoaXMuY29uZmlnW2ZpZWxkXS50eXBlXS5zY2FsZVtjaGFubmVsU2NhbGVUeXBlXVxuICAgICAgOiBbdGhpcy5nZXREZWZhdWx0TGF5ZXJDb25maWcoKVtzY2FsZV1dO1xuICB9XG5cbiAgdXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsKGRhdGFzZXQsIGNoYW5uZWwpIHtcbiAgICBjb25zdCB2aXN1YWxDaGFubmVsID0gdGhpcy52aXN1YWxDaGFubmVsc1tjaGFubmVsXTtcbiAgICB0aGlzLnZhbGlkYXRlVmlzdWFsQ2hhbm5lbChjaGFubmVsKTtcbiAgICAvLyBjYWxjdWxhdGUgbGF5ZXIgY2hhbm5lbCBkb21haW5cbiAgICBjb25zdCB1cGRhdGVkRG9tYWluID0gdGhpcy5jYWxjdWxhdGVMYXllckRvbWFpbihkYXRhc2V0LCB2aXN1YWxDaGFubmVsKTtcbiAgICB0aGlzLnVwZGF0ZUxheWVyQ29uZmlnKHtbdmlzdWFsQ2hhbm5lbC5kb21haW5dOiB1cGRhdGVkRG9tYWlufSk7XG4gIH1cblxuICBnZXRWaXN1YWxDaGFubmVsVXBkYXRlVHJpZ2dlcnMoKSB7XG4gICAgY29uc3QgdXBkYXRlVHJpZ2dlcnMgPSB7fTtcbiAgICBPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2godmlzdWFsQ2hhbm5lbCA9PiB7XG4gICAgICAvLyBmaWVsZCByYW5nZSBzY2FsZSBkb21haW5cbiAgICAgIGNvbnN0IHthY2Nlc3NvciwgZmllbGQsIHNjYWxlLCBkb21haW4sIHJhbmdlLCBkZWZhdWx0VmFsdWUsIGZpeGVkfSA9IHZpc3VhbENoYW5uZWw7XG5cbiAgICAgIHVwZGF0ZVRyaWdnZXJzW2FjY2Vzc29yXSA9IHtcbiAgICAgICAgW2ZpZWxkXTogdGhpcy5jb25maWdbZmllbGRdLFxuICAgICAgICBbc2NhbGVdOiB0aGlzLmNvbmZpZ1tzY2FsZV0sXG4gICAgICAgIFtkb21haW5dOiB0aGlzLmNvbmZpZ1tkb21haW5dLFxuICAgICAgICBbcmFuZ2VdOiB0aGlzLmNvbmZpZy52aXNDb25maWdbcmFuZ2VdLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IHR5cGVvZiBkZWZhdWx0VmFsdWUgPT09ICdmdW5jdGlvbicgPyBkZWZhdWx0VmFsdWUodGhpcy5jb25maWcpIDogZGVmYXVsdFZhbHVlLFxuICAgICAgICAuLi4oZml4ZWQgPyB7W2ZpeGVkXTogdGhpcy5jb25maWcudmlzQ29uZmlnW2ZpeGVkXX0gOiB7fSlcbiAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIHVwZGF0ZVRyaWdnZXJzO1xuICB9XG5cbiAgY2FsY3VsYXRlTGF5ZXJEb21haW4oZGF0YXNldCwgdmlzdWFsQ2hhbm5lbCkge1xuICAgIGNvbnN0IHtzY2FsZX0gPSB2aXN1YWxDaGFubmVsO1xuICAgIGNvbnN0IGZpZWxkID0gdGhpcy5jb25maWdbdmlzdWFsQ2hhbm5lbC5maWVsZF07XG4gICAgaWYgKCFmaWVsZCB8fCAhc2NhbGUpIHtcbiAgICAgIC8vIGlmIGNvbG9yRmllbGQgb3Igc2l6ZUZpZWxkIHdlcmUgc2V0IGJhY2sgdG8gbnVsbFxuICAgICAgcmV0dXJuIGRlZmF1bHREb21haW47XG4gICAgfVxuXG4gICAgY29uc3Qgc2NhbGVUeXBlID0gdGhpcy5jb25maWdbc2NhbGVdO1xuICAgIGNvbnN0IGRhdGFTZXRGaWVsZCA9IGRhdGFzZXQuZmllbGRzLmZpbmQoZiA9PiBmLm5hbWUgPT09IGZpZWxkLm5hbWUpO1xuICAgIGlmICghc2NhbGVUeXBlIHx8ICFkYXRhU2V0RmllbGQpIHtcbiAgICAgIC8vIGlmIG5ldyBkYXRhc2V0IGRvZXNuJ3QgY29udGFpbiBwcmV2aW91c2x5IHNldCBmaWVsZFxuICAgICAgcmV0dXJuIGRlZmF1bHREb21haW47XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGFzZXQuZ2V0Q29sdW1uTGF5ZXJEb21haW4oZGF0YVNldEZpZWxkLCBzY2FsZVR5cGUpIHx8IGRlZmF1bHREb21haW47XG4gIH1cblxuICB1cGRhdGVIZXhDb2xvckRvbWFpbihkYXRhc2V0KSB7XG4gICAgaWYgKCFkYXRhc2V0KSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKGNoYW5uZWwgPT4ge1xuICAgICAgY29uc3QgY2hhbm5lbENvbmZpZyA9IHRoaXMuY29uZmlnLnZpc0NvbmZpZ1tjaGFubmVsLnJhbmdlXTtcbiAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5jb25maWdbY2hhbm5lbC5maWVsZF07XG5cbiAgICAgIGlmIChjaGFubmVsQ29uZmlnPy50eXBlID09PSBoZXhDb2xvcikge1xuICAgICAgICBjb25zdCBkYXRhU2V0RmllbGQgPSBkYXRhc2V0LmZpZWxkcy5maW5kKGYgPT4gZi5uYW1lID09PSBmaWVsZC5jb2xvckNvbHVtbik7XG4gICAgICAgIGNvbnN0IGNvbG9ycyA9IGRhdGFzZXQuZ2V0Q29sdW1uTGF5ZXJEb21haW4oZGF0YVNldEZpZWxkLCBTQ0FMRV9UWVBFUy5vcmRpbmFsKTtcbiAgICAgICAgdGhpcy51cGRhdGVMYXllclZpc0NvbmZpZyh7XG4gICAgICAgICAgW2NoYW5uZWwucmFuZ2VdOiB7Li4uY2hhbm5lbENvbmZpZywgY29sb3JzOiBjb2xvcnMuc2xpY2UoMCwgMjApfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgY2FsY3VsYXRlSGV4Q29sdW1uTGVnZW5kKGRhdGFzZXRzKSB7XG4gICAgY29uc3QgZGF0YXNldCA9IHRoaXMuZ2V0RGF0YXNldChkYXRhc2V0cyk7XG4gICAgaWYgKCFkYXRhc2V0cykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGxlZ2VuZFNldHRpbmdzID0gT2JqZWN0LmtleXModGhpcy52aXN1YWxDaGFubmVscykucmVkdWNlKChsZWdlbmRzLCBjaGFubmVsKSA9PiB7XG4gICAgICBjb25zdCB7cmFuZ2UsIGZpZWxkOiBjaGFubmVsRmllbGR9ID0gdGhpcy52aXN1YWxDaGFubmVsc1tjaGFubmVsXTtcbiAgICAgIGNvbnN0IGNoYW5uZWxDb25maWcgPSB0aGlzLmNvbmZpZy52aXNDb25maWdbcmFuZ2VdO1xuICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmNvbmZpZ1tjaGFubmVsRmllbGRdO1xuXG4gICAgICBpZiAoY2hhbm5lbENvbmZpZz8udHlwZSA9PT0gaGV4Q29sb3IpIHtcbiAgICAgICAgY29uc3QgZGF0YVNldEZpZWxkID0gZGF0YXNldC5maWVsZHMuZmluZChmID0+IGYubmFtZSA9PT0gZmllbGQuY29sb3JDb2x1bW4pO1xuICAgICAgICBjb25zdCBsZWdlbmQgPSBkYXRhc2V0LmNhbGN1bGF0ZUxlZ2VuZChmaWVsZCwgZGF0YVNldEZpZWxkKTtcbiAgICAgICAgbGVnZW5kc1tjaGFubmVsXSA9IGxlZ2VuZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsZWdlbmRzO1xuICAgIH0sIHt9KTtcbiAgICB0aGlzLnVwZGF0ZUxheWVyTGVnZW5kKGxlZ2VuZFNldHRpbmdzKTtcbiAgfVxuXG4gIGhhc0hvdmVyZWRPYmplY3Qob2JqZWN0SW5mbykge1xuICAgIHJldHVybiB0aGlzLmlzTGF5ZXJIb3ZlcmVkKG9iamVjdEluZm8pICYmIG9iamVjdEluZm8ub2JqZWN0ID8gb2JqZWN0SW5mby5vYmplY3QgOiBudWxsO1xuICB9XG5cbiAgaXNMYXllckhvdmVyZWQob2JqZWN0SW5mbykge1xuICAgIHJldHVybiBvYmplY3RJbmZvPy5waWNrZWQgJiYgb2JqZWN0SW5mbz8ubGF5ZXI/LnByb3BzPy5pZCA9PT0gdGhpcy5pZDtcbiAgfVxuXG4gIGdldFJhZGl1c1NjYWxlQnlab29tKG1hcFN0YXRlKSB7XG4gICAgY29uc3QgcmFkaXVzQ2hhbm5lbCA9IE9iamVjdC52YWx1ZXModGhpcy52aXN1YWxDaGFubmVscykuZmluZCh2YyA9PiB2Yy5wcm9wZXJ0eSA9PT0gJ3JhZGl1cycpO1xuXG4gICAgaWYgKCFyYWRpdXNDaGFubmVsKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICBjb25zdCBmaWVsZCA9IHJhZGl1c0NoYW5uZWwuZmllbGQ7XG4gICAgY29uc3Qge3JhZGl1c30gPSB0aGlzLmNvbmZpZy52aXNDb25maWc7XG5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuICh0aGlzLmNvbmZpZ1tmaWVsZF0gPyAxIDogcmFkaXVzKSAqIHRoaXMuZ2V0Wm9vbUZhY3RvcihtYXBTdGF0ZSk7XG4gIH1cblxuICBnZXRSYWRpdXNTY2FsZSgpIHtcbiAgICBjb25zdCByYWRpdXNDaGFubmVsID0gT2JqZWN0LnZhbHVlcyh0aGlzLnZpc3VhbENoYW5uZWxzKS5maW5kKHZjID0+IHZjLnByb3BlcnR5ID09PSAncmFkaXVzJyk7XG5cbiAgICBpZiAoIXJhZGl1c0NoYW5uZWwgfHwgdGhpcy5jb25maWdbcmFkaXVzQ2hhbm5lbC5maWVsZF0pIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNvbmZpZy52aXNDb25maWcucmFkaXVzO1xuICB9XG5cbiAgZ2V0TWF4TWFya2VyU2l6ZSgpIHtcbiAgICBjb25zdCB7cmFkaXVzRmllbGQsIHNpemVGaWVsZCwgdmlzQ29uZmlnfSA9IHRoaXMuY29uZmlnO1xuICAgIGNvbnN0IHtyYWRpdXNSYW5nZSwgcmFkaXVzfSA9IHZpc0NvbmZpZztcbiAgICBjb25zdCBmaWVsZCA9IHJhZGl1c0ZpZWxkIHx8IHNpemVGaWVsZDtcbiAgICByZXR1cm4gTWF0aC5jZWlsKChmaWVsZCAmJiByYWRpdXNSYW5nZSA/IHJhZGl1c1JhbmdlWzFdIDogcmFkaXVzKSk7XG4gIH1cblxuICBzaG91bGRDYWxjdWxhdGVMYXllckRhdGEocHJvcHMpIHtcbiAgICByZXR1cm4gcHJvcHMuc29tZShwID0+ICF0aGlzLm5vbmVMYXllckRhdGFBZmZlY3RpbmdQcm9wcy5pbmNsdWRlcyhwKSk7XG4gIH1cblxuICBnZXRCcnVzaGluZ0V4dGVuc2lvblByb3BzKGludGVyYWN0aW9uQ29uZmlnLCBicnVzaGluZ1RhcmdldCkge1xuICAgIGNvbnN0IHticnVzaH0gPSBpbnRlcmFjdGlvbkNvbmZpZztcblxuICAgIHJldHVybiB7XG4gICAgICAvLyBicnVzaGluZ1xuICAgICAgYXV0b0hpZ2hsaWdodDogIWJydXNoLmVuYWJsZWQsXG4gICAgICBicnVzaGluZ1JhZGl1czogYnJ1c2guY29uZmlnLnNpemUgKiAxMDAwLFxuICAgICAgYnJ1c2hpbmdUYXJnZXQ6IGJydXNoaW5nVGFyZ2V0IHx8ICdzb3VyY2UnLFxuICAgICAgYnJ1c2hpbmdFbmFibGVkOiBicnVzaC5lbmFibGVkXG4gICAgfTtcbiAgfVxuXG4gIGdldERlZmF1bHREZWNrTGF5ZXJQcm9wcyh7aWR4LCBncHVGaWx0ZXIsIG1hcFN0YXRlLCB2aXNpYmxlLCBtYXNrUG9seWdvbn0pIHtcbiAgICBjb25zdCBtYXNrRXh0ZW5zaW9uUHJvcHMgPSBnZXRNYXNrRXh0ZW5zaW9uUHJvcHMobWFza1BvbHlnb24pO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5tYXNrRXh0ZW5zaW9uUHJvcHMsXG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIGlkeCxcbiAgICAgIGNvb3JkaW5hdGVTeXN0ZW06IENPT1JESU5BVEVfU1lTVEVNLkxOR0xBVCxcbiAgICAgIHBpY2thYmxlOiB0aGlzLmhhc0ludGVyYWN0aXZpdHksXG4gICAgICB3cmFwTG9uZ2l0dWRlOiB0cnVlLFxuICAgICAgcGFyYW1ldGVyczoge2RlcHRoVGVzdDogQm9vbGVhbihtYXBTdGF0ZS5kcmFnUm90YXRlIHx8IHRoaXMuY29uZmlnLnZpc0NvbmZpZy5lbmFibGUzZCl9LFxuICAgICAgaGlkZGVuOiB0aGlzLmNvbmZpZy5oaWRkZW4sXG4gICAgICB2aXNpYmlsaXR5Qnlab29tOiB0aGlzLmNvbmZpZy52aXNpYmlsaXR5Qnlab29tLFxuICAgICAgLy8gdmlzY29uZmlnXG4gICAgICBvcGFjaXR5OiB0aGlzLmNvbmZpZy52aXNDb25maWcub3BhY2l0eSxcbiAgICAgIGhpZ2hsaWdodENvbG9yOiB0aGlzLmNvbmZpZy5oaWdobGlnaHRDb2xvcixcbiAgICAgIC8vIGRhdGEgZmlsdGVyaW5nXG4gICAgICBleHRlbnNpb25zOiBbZGF0YUZpbHRlckV4dGVuc2lvbiwgLi4ubWFza0V4dGVuc2lvblByb3BzLmV4dGVuc2lvbnNdLFxuICAgICAgZmlsdGVyUmFuZ2U6IGdwdUZpbHRlciA/IGdwdUZpbHRlci5maWx0ZXJSYW5nZSA6IHVuZGVmaW5lZCxcbiAgICAgIC8vIGxheWVyIHNob3VsZCBiZSB2aXNpYmxlIGFuZCBpZiBzcGxpdE1hcCwgc2hvd24gaW4gdG8gb25lIG9mIHBhbmVsXG4gICAgICB2aXNpYmxlOiB0aGlzLmNvbmZpZy5pc1Zpc2libGUgJiYgdmlzaWJsZVxuICAgIH07XG4gIH1cblxuICBnZXREZWZhdWx0SG92ZXJMYXllclByb3BzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogYCR7dGhpcy5pZH0taG92ZXJlZGAsXG4gICAgICBwaWNrYWJsZTogZmFsc2UsXG4gICAgICB3cmFwTG9uZ2l0dWRlOiB0cnVlLFxuICAgICAgY29vcmRpbmF0ZVN5c3RlbTogQ09PUkRJTkFURV9TWVNURU0uTE5HTEFUXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlclRleHRMYWJlbExheWVyKFxuICAgIHtnZXRQb3NpdGlvbiwgZ2V0UmFkaXVzLCByYWRpdXNTY2FsZSwgdXBkYXRlVHJpZ2dlcnMsIHNoYXJlZFByb3BzfSxcbiAgICByZW5kZXJPcHRzXG4gICkge1xuICAgIGNvbnN0IHtkYXRhfSA9IHJlbmRlck9wdHM7XG4gICAgY29uc3Qge3RleHRMYWJlbCwgdmlzaWJpbGl0eUJ5Wm9vbX0gPSB0aGlzLmNvbmZpZztcbiAgICBjb25zdCBleHRlbnNpb25zID0gWy4uLnNoYXJlZFByb3BzLmV4dGVuc2lvbnMsIGNvbGxpc2lvbkZpbHRlckV4dGVuc2lvbl07XG5cbiAgICBpZiAoIWRhdGEgfHwgIWRhdGEudGV4dExhYmVscyB8fCAhZGF0YS50ZXh0TGFiZWxzWzBdIHx8ICFkYXRhLnRleHRMYWJlbHNbMF0uZ2V0VGV4dCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IFttYWluTGFiZWwsIHNlY29uZGFyeUxhYmVsXSA9IHRleHRMYWJlbDtcbiAgICBjb25zdCB7XG4gICAgICBhbGlnbm1lbnQsXG4gICAgICBhbmNob3IsXG4gICAgICBjb2xvcjogZ2V0Q29sb3IsXG4gICAgICBmaWVsZDogbWFpbkZpZWxkLFxuICAgICAgb3V0bGluZUNvbG9yLFxuICAgICAgc2l6ZTogc2l6ZVNjYWxlXG4gICAgfSA9IG1haW5MYWJlbDtcbiAgICBjb25zdCB7XG4gICAgICBjb2xvcjogZ2V0U2Vjb25kYXJ5Q29sb3IsXG4gICAgICBmaWVsZDogc2Vjb25kYXJ5RmllbGQsXG4gICAgICBvdXRsaW5lQ29sb3I6IHNlY29uZGFyeU91dGxpbmVDb2xvcixcbiAgICAgIHNpemU6IHNlY29uZGFyeVNpemVTY2FsZVxuICAgIH0gPSBzZWNvbmRhcnlMYWJlbCB8fCB7fTtcblxuICAgIHJldHVybiBbXG4gICAgICBuZXcgUG9pbnRMYWJlbExheWVyKHtcbiAgICAgICAgLi4uc2hhcmVkUHJvcHMsXG5cbiAgICAgICAgLy8gUmVjcmVhdGUgbGF5ZXIgd2hlbiBsYWJlbHMgY2hhbmdlIG90aGVyd2lzZSByZW5kZXJpbmcgYnJlYWtzXG4gICAgICAgIC8vIFRPRE8gY291bGQgYmUgbW9yZSBlZmZpY2llbnQgd2l0aCB1cGRhdGVUcmlnZ2Vycz9cbiAgICAgICAgaWQ6IGAke3RoaXMuaWR9LSR7bWFpbkZpZWxkPy5uYW1lfS0ke3NlY29uZGFyeUZpZWxkPy5uYW1lfS1sYWJlbGAsXG4gICAgICAgIGRhdGE6IGRhdGEuZGF0YSxcbiAgICAgICAgdmlzaWJpbGl0eUJ5Wm9vbSxcbiAgICAgICAgZXh0ZW5zaW9ucyxcblxuICAgICAgICBjaGFyYWN0ZXJTZXQ6ICdhdXRvJyxcbiAgICAgICAgY29sbGlzaW9uRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgY29sbGlzaW9uR3JvdXA6IGAke3RoaXMuaWR9LWxhYmVsc2AsXG5cbiAgICAgICAgZ2V0VGV4dDogZGF0YS50ZXh0TGFiZWxzWzBdLmdldFRleHQsXG4gICAgICAgIGdldENvbG9yLFxuICAgICAgICBzaXplU2NhbGUsXG4gICAgICAgIG91dGxpbmVDb2xvcixcblxuICAgICAgICAuLi4oc2Vjb25kYXJ5RmllbGQgJiYge1xuICAgICAgICAgIGdldFNlY29uZGFyeVRleHQ6IGRhdGEudGV4dExhYmVsc1sxXS5nZXRUZXh0LFxuICAgICAgICAgIGdldFNlY29uZGFyeUNvbG9yLFxuICAgICAgICAgIHNlY29uZGFyeVNpemVTY2FsZSxcbiAgICAgICAgICBzZWNvbmRhcnlPdXRsaW5lQ29sb3JcbiAgICAgICAgfSksXG5cbiAgICAgICAgLy8gUG9zaXRpb25cbiAgICAgICAgZ2V0UG9zaXRpb24sXG4gICAgICAgIGdldFJhZGl1cyxcbiAgICAgICAgcmFkaXVzU2NhbGUsXG4gICAgICAgIGdldFRleHRBbmNob3I6IGFuY2hvcixcbiAgICAgICAgZ2V0QWxpZ25tZW50QmFzZWxpbmU6IGFsaWdubWVudCxcblxuICAgICAgICAvLyBTdHlsZVxuICAgICAgICBmb250RmFtaWx5OiAnSW50ZXIsIHNhbnMnLFxuICAgICAgICBmb250U2V0dGluZ3M6IHtzZGY6IHRydWV9LFxuICAgICAgICBmb250V2VpZ2h0OiA1MDAsXG4gICAgICAgIG91dGxpbmVXaWR0aDogNCxcbiAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgIC8vIHRleHQgd2lsbCBhbHdheXMgc2hvdyBvbiB0b3Agb2YgYWxsIGxheWVyc1xuICAgICAgICAgIGRlcHRoVGVzdDogZmFsc2VcbiAgICAgICAgfSxcblxuICAgICAgICBnZXRGaWx0ZXJWYWx1ZTogZGF0YS5nZXRGaWx0ZXJWYWx1ZSxcbiAgICAgICAgdXBkYXRlVHJpZ2dlcnM6IHtcbiAgICAgICAgICAuLi51cGRhdGVUcmlnZ2VycyxcbiAgICAgICAgICBnZXRUZXh0OiBtYWluRmllbGQ/Lm5hbWUsXG4gICAgICAgICAgZ2V0Q29sb3I6IG1haW5GaWVsZD8uY29sb3IsXG4gICAgICAgICAgZ2V0VGV4dEFuY2hvcjogbWFpbkxhYmVsLmFuY2hvcixcbiAgICAgICAgICBnZXRBbGlnbm1lbnRCYXNlbGluZTogbWFpbkxhYmVsLmFsaWdubWVudCxcbiAgICAgICAgICBnZXRTZWNvbmRhcnlUZXh0OiBzZWNvbmRhcnlGaWVsZD8ubmFtZVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIF07XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGRlY2suZ2wgYEljb25MYXllcmAgXCJhdXRvUGFja1wiIG1vZGUgYWNjZXNzb3IgZm9yIGN1c3RvbSBtYXJrZXJzLlxuICAgKlxuICAgKiBAcGFyYW0geyp9IGljb25VcmxBY2Nlc3NvciBkZWNrLmdsIGFjY2Vzc29yIChvciB2YWx1ZSkgdGhhdCByZXNvbHZlcyB0byBVUkwgb2YgaWNvbiBmb3IgZ2l2ZW4gcm93XG4gICAqIEByZXR1cm5zIGRlY2suZ2wgYWNjZXNzb3IgdGhhdCByZXR1cm5zIFVucGFja2VkSWNvbiByZWFkeSB0byBjb25zdW1lIGJ5IEljb25MYXllclxuICAgKi9cbiAgZ2V0Q3VzdG9tTWFya2VySWNvbkFjY2Vzc29yKGljb25VcmxBY2Nlc3NvciwgbWFzayA9IHRydWUpIHtcbiAgICBjb25zdCBtYXhJY29uU2l6ZSA9IHRoaXMuZ2V0TWF4TWFya2VyU2l6ZSgpO1xuXG4gICAgcmV0dXJuIGQgPT4ge1xuICAgICAgY29uc3Qgd2FudGVkVXJsID1cbiAgICAgICAgKHR5cGVvZiBpY29uVXJsQWNjZXNzb3IgPT09ICdmdW5jdGlvbicpID8gaWNvblVybEFjY2Vzc29yKGQpIDogaWNvblVybEFjY2Vzc29yO1xuICAgICAgY29uc3QgaWNvbk9rID0gQm9vbGVhbih3YW50ZWRVcmwpO1xuICAgICAgbWFzayA9IGljb25PayA/IG1hc2sgOiB0cnVlO1xuICAgICAgY29uc3QgdXJsID0gaWNvbk9rID8gd2FudGVkVXJsIDogRkFMTEJBQ0tfSUNPTjtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBgJHt1cmx9QEAke21heEljb25TaXplfUAke21hc2sgPyAnbScgOiAnYyd9YCxcbiAgICAgICAgdXJsLFxuICAgICAgICB3aWR0aDogbWF4SWNvblNpemUsXG4gICAgICAgIGhlaWdodDogbWF4SWNvblNpemUsXG4gICAgICAgIG1hc2tcbiAgICAgIH07XG4gICAgfTtcbiAgfVxuXG4gIGNhbGN1bGF0ZURhdGFBdHRyaWJ1dGUoa2VwbGVyVGFibGUsIGdldFBvc2l0aW9uKSB7XG4gICAgLy8gaW1wbGVtZW50ZWQgaW4gc3ViY2xhc3Nlc1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHVwZGF0ZUxheWVyTWV0YShkYXRhQ29udGFpbmVyLCBnZXRQb3NpdGlvbikge1xuICAgIC8vIGltcGxlbWVudGVkIGluIHN1YmNsYXNzZXNcbiAgfVxuXG4gIGdldFBvc2l0aW9uQWNjZXNzb3IoZGF0YUNvbnRhaW5lcikge1xuICAgIC8vIGltcGxlbWVudGVkIGluIHN1YmNsYXNzZXNcbiAgICByZXR1cm4gKCkgPT4gbnVsbDtcbiAgfVxuXG4gIGdldEhleENvbHVtbihyYW5nZSkge1xuICAgIGNvbnN0IGZpZWxkID0gT2JqZWN0LnZhbHVlcyh0aGlzLnZpc3VhbENoYW5uZWxzKT8uZmluZCh2YWx1ZSA9PiB2YWx1ZS5yYW5nZSA9PT0gcmFuZ2UpPy5maWVsZDtcbiAgICBpZiAoZmllbGQpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbmZpZ1tmaWVsZF0uY29sb3JDb2x1bW47XG4gICAgfVxuICB9XG5cbiAgaXNDb2xvcmVkQnlDb2xvckNvbHVtbihyYW5nZSkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy52aXNDb25maWdbcmFuZ2VdPy5oZXhDb2xvcjtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBMYXllcjtcbiJdfQ==
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@carto/kepler.gl",
|
|
3
3
|
"author": "CARTO",
|
|
4
4
|
"homepage": "https://github.com/CartoDB/carto-kepler#readme",
|
|
5
|
-
"version": "0.0.71-alpha.
|
|
5
|
+
"version": "0.0.71-alpha.6",
|
|
6
6
|
"description": "kepler.gl is a webgl based application to visualize large scale location data in the browser",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"main": "dist/index.js",
|
package/src/layers/base-layer.js
CHANGED
|
@@ -1287,7 +1287,9 @@ class Layer {
|
|
|
1287
1287
|
if (channelConfig?.type === hexColor) {
|
|
1288
1288
|
const dataSetField = dataset.fields.find(f => f.name === field.colorColumn);
|
|
1289
1289
|
const colors = dataset.getColumnLayerDomain(dataSetField, SCALE_TYPES.ordinal);
|
|
1290
|
-
this.updateLayerVisConfig({
|
|
1290
|
+
this.updateLayerVisConfig({
|
|
1291
|
+
[channel.range]: {...channelConfig, colors: colors.slice(0, 20)}
|
|
1292
|
+
});
|
|
1291
1293
|
}
|
|
1292
1294
|
});
|
|
1293
1295
|
|