@carto/kepler.gl 0.0.72 → 0.0.73

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.
@@ -1220,11 +1220,13 @@ var Layer = /*#__PURE__*/function () {
1220
1220
  var _this5 = this;
1221
1221
 
1222
1222
  var _loop = function _loop() {
1223
+ var _this5$config$visConf;
1224
+
1223
1225
  var _Object$values$_i = _Object$values[_i],
1224
1226
  field = _Object$values$_i.field,
1225
1227
  range = _Object$values$_i.range;
1226
1228
  var oldField = _this5.config[field];
1227
- var isUsingHexColorCode = _this5.config.visConfig[range].hexColor;
1229
+ var isUsingHexColorCode = (_this5$config$visConf = _this5.config.visConfig[range]) === null || _this5$config$visConf === void 0 ? void 0 : _this5$config$visConf.hexColor;
1228
1230
 
1229
1231
  if (!oldField) {
1230
1232
  return {
@@ -1831,4 +1833,4 @@ var Layer = /*#__PURE__*/function () {
1831
1833
 
1832
1834
  var _default = Layer;
1833
1835
  exports["default"] = _default;
1834
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sYXllcnMvYmFzZS1sYXllci5qcyJdLCJuYW1lcyI6WyJnZW5lcmF0ZUNvbG9yIiwiTEFZRVJfSURfTEVOR1RIIiwiRkFMTEJBQ0tfSUNPTiIsIk1BWF9TQU1QTEVfU0laRSIsImRlZmF1bHREb21haW4iLCJkYXRhRmlsdGVyRXh0ZW5zaW9uIiwiRGF0YUZpbHRlckV4dGVuc2lvbiIsImZpbHRlclNpemUiLCJNQVhfR1BVX0ZJTFRFUlMiLCJjb2xsaXNpb25GaWx0ZXJFeHRlbnNpb24iLCJDb2xsaXNpb25GaWx0ZXJFeHRlbnNpb24iLCJkZWZhdWx0RGF0YUFjY2Vzc29yIiwiZGMiLCJkIiwiZGVmYXVsdEdldEZpZWxkVmFsdWUiLCJmaWVsZCIsInZhbHVlQWNjZXNzb3IiLCJzY2FsZUlkZW50aXR5IiwidiIsIk9WRVJMQVlfVFlQRSIsImRlY2tnbCIsIm1hcGJveGdsIiwibGF5ZXJDb2xvcnMiLCJPYmplY3QiLCJ2YWx1ZXMiLCJEYXRhVml6Q29sb3JzIiwibWFwIiwiaGV4VG9SZ2IiLCJpbmRleCIsImxlbmd0aCIsImNvbG9yTWFrZXIiLCJMYXllciIsInByb3BzIiwiaWQiLCJtZXRhIiwibGVnZW5kU2V0dGluZ3MiLCJ2aXNDb25maWdTZXR0aW5ncyIsIl9pbnRlcmFjdGl2aXR5U2V0dGluZ3MiLCJjb25maWciLCJnZXREZWZhdWx0TGF5ZXJDb25maWciLCJjb2x1bW5zIiwiZ2V0TGF5ZXJDb2x1bW5zIiwiRGVmYXVsdExheWVySWNvbiIsInR5cGUiLCJjb2xvciIsInByb3BlcnR5Iiwic2NhbGUiLCJkb21haW4iLCJyYW5nZSIsImtleSIsImNoYW5uZWxTY2FsZVR5cGUiLCJDSEFOTkVMX1NDQUxFUyIsIm51bGxWYWx1ZSIsIk5PX1ZBTFVFX0NPTE9SIiwiZGVmYXVsdFZhbHVlIiwic2l6ZSIsImxhdCIsInBhaXIiLCJmaWVsZFBhaXJLZXkiLCJsbmciLCJsYXQwIiwibG5nMCIsImxhdDEiLCJsbmcxIiwiaW50ZXJhY3Rpdml0eVNldHRpbmdzIiwiQm9vbGVhbiIsImhvdmVyIiwiZmllbGRzIiwiY2xpY2siLCJoYXNUb29sdGlwIiwiZW5hYmxlZCIsImRhdGFJZCIsInZpc2liaWxpdHlCeVpvb20iLCJtaW4iLCJaT09NX0xFVkVMX0xJTUlUUyIsIm1heCIsImxhYmVsIiwiREVGQVVMVF9MQVlFUl9MQUJFTCIsIm5leHQiLCJ2YWx1ZSIsImlzVmlzaWJsZSIsImlzQ29uZmlnQWN0aXZlIiwiaGlnaGxpZ2h0Q29sb3IiLCJERUZBVUxUX0hJR0hMSUdIVF9DT0xPUiIsImhpZGRlbiIsImNvbG9yRmllbGQiLCJjb2xvckRvbWFpbiIsImNvbG9yU2NhbGUiLCJTQ0FMRV9UWVBFUyIsInF1YW50aWxlIiwic2l6ZURvbWFpbiIsInNpemVTY2FsZSIsImxpbmVhciIsInNpemVGaWVsZCIsInJhZGl1c0ZpZWxkIiwidmlzQ29uZmlnIiwidGV4dExhYmVsIiwiREVGQVVMVF9URVhUX0xBQkVMIiwiY29sb3JVSSIsIkRFRkFVTFRfQ09MT1JfVUkiLCJjb2xvclJhbmdlIiwiYW5pbWF0aW9uIiwidmlzdWFsQ2hhbm5lbHMiLCJtZWFzdXJlIiwiZGlzcGxheU5hbWUiLCJuYW1lIiwiZGVmYXVsdE1lYXN1cmUiLCJ1cGRhdGUiLCJmaWVsZElkeCIsImNvbHVtblBhaXJzIiwicGFydG5lcktleSIsInBhcnRuZXJGaWVsZFBhaXJLZXkiLCJ6b29tIiwiem9vbU9mZnNldCIsIk1hdGgiLCJwb3ciLCJlbmFibGVFbGV2YXRpb25ab29tRmFjdG9yIiwiZGF0YXNldHMiLCJmaWx0ZXJlZEluZGV4Iiwib2JqZWN0IiwiZGF0YUNvbnRhaW5lciIsInJvdyIsImNvbmZpZ1RvQ29weSIsInNoYWxsb3dDb3B5IiwiY29uY2F0Iiwibm90VG9Db3B5IiwiZm9yRWFjaCIsImdyb3VwIiwicHVzaCIsImN1cnJlbnRDb25maWciLCJjb3BpZWQiLCJjb3B5TGF5ZXJDb25maWciLCJ1cGRhdGVMYXllckNvbmZpZyIsImtleXMiLCJjaGFubmVsIiwidmFsaWRhdGVWaXN1YWxDaGFubmVsIiwiaW5jbHVkZXMiLCJsYXllclZpc0NvbmZpZ3MiLCJpdGVtIiwiTEFZRVJfVklTX0NPTkZJR1MiLCJldmVyeSIsInAiLCJoYXNPd25Qcm9wZXJ0eSIsImNvbHVtblZhbGlkYXRvcnMiLCJyZXF1aXJlZCIsInJlcXVpcmVkTGF5ZXJDb2x1bW5zIiwicmVkdWNlIiwiYWNjdSIsInZhbGlkYXRvciIsIm9wdGlvbmFsIiwib3B0aW9uYWxDb2x1bW5zIiwibmV3Q29uZmlnIiwibmV3VmlzQ29uZmlnIiwicHJvcCIsInByZXZpb3VzIiwiY29sb3JVSVByb3AiLCJlbnRyaWVzIiwiaXNDb2xvclJhbmdlIiwiY29sb3JzIiwiaGV4Q29sb3IiLCJ1cGRhdGVDb2xvclVJQnlDb2xvclJhbmdlIiwidXBkYXRlQ29sb3JSYW5nZUJ5Q29sb3JVSSIsInVwZGF0ZUN1c3RvbVBhbGV0dGUiLCJjb2xvclJhbmdlQ29uZmlnIiwiY3VzdG9tIiwiY3VzdG9tUGFsZXR0ZSIsInNob3dEcm9wZG93biIsInN0ZXBzIiwicmV2ZXJzZWQiLCJoZXhDb2x1bW4iLCJnZXRIZXhDb2x1bW4iLCJpc0hleENvbHVtbiIsImlzQ29sb3JlZEJ5Q29sb3JDb2x1bW4iLCJzaG91bGRVcGRhdGUiLCJzb21lIiwic2FtZUdyb3VwIiwiQ09MT1JfUkFOR0VTIiwiZmlsdGVyIiwiY3IiLCJmaW5kIiwiY29sb3JNYXAiLCJ1cGRhdGVDb2xvck1hcCIsInVwZGF0ZUxheWVyVmlzQ29uZmlnIiwidXBkYXRlQ2F0ZWdvcnlDb2xvck1hcCIsInVwZGF0ZU51bWVyaWNDb2xvck1hcCIsImFzc2lnbmVkQ2F0ZWdvcmllcyIsIm5ld0NvbG9yTWFwIiwic2xpY2UiLCJjTWFwIiwidW5hc3NpZ25lZENvbG9ycyIsImNhdGVnb3J5IiwiY29sb3JNYXBWYWx1ZXMiLCJjIiwibWF4VmFsdWUiLCJwcmV2VmFsdWUiLCJzdGVwIiwiaSIsImxheWVyRGF0YSIsImRhdGEiLCJoYXNBbGxDb2x1bW5zIiwiaGFzTGF5ZXJEYXRhIiwicmVuZGVyTGF5ZXIiLCJfIiwiciIsImciLCJiIiwiaXNOYU4iLCJVTktOT1dOX0NPTE9SIiwiQXJyYXkiLCJpc0FycmF5IiwiTWFwIiwiayIsInNldCIsIlNDQUxFX0ZVTkMiLCJmcm9tIiwidW5rbm93biIsImdldFZpc0NoYW5uZWxTY2FsZSIsImZhbGxiYWNrSWNvbiIsInVua25vd25WYWx1ZSIsIm1hcHBpbmciLCJvdGhlcnNNYXJrZXIiLCJtYXJrZXJNYXAiLCJtYXJrZXJVcmwiLCJkYXRhQWNjZXNzb3IiLCJhdHRyaWJ1dGVBY2Nlc3NvcnMiLCJmaXhlZCIsImFjY2Vzc29yIiwiZ2V0QXR0cmlidXRlVmFsdWUiLCJhZ2dyZWdhdGlvbiIsInNob3VsZEdldFNjYWxlIiwiaWRlbnRpdHkiLCJhcmdzIiwiaXNGaXhlZCIsImZpZWxkQ29uZmlnIiwiYWdncmVnYXRpb25WYWx1ZSIsInNjYWxlRnVuY3Rpb24iLCJnZXRDb2xvclNjYWxlIiwiY3VzdG9tTWFya2VyIiwiZ2V0Q3VzdG9tTWFya2Vyc1NjYWxlIiwiY3VzdG9tTWFya2Vyc1VybCIsImdldEVuY29kZWRDaGFubmVsVmFsdWUiLCJfYWdncmVnYXRpb24iLCJDb25zb2xlIiwid2FybiIsIm9yZGluYWwiLCJkb21haW5Jc0luZmluaXRlIiwiSW5maW5pdHkiLCJzY2FsZUZhY3RvcnkiLCJyZXN1bHQiLCJnZXRQb3NpdGlvbiIsInNhbXBsZURhdGEiLCJudW1Sb3dzIiwicG9pbnRzIiwibWFwSW5kZXgiLCJsYXRCb3VuZHMiLCJsbmdCb3VuZHMiLCJkYXRhVXBkYXRlVHJpZ2dlcnMiLCJ0cmlnZ2VyQ2hhbmdlZCIsIl9vbGREYXRhVXBkYXRlVHJpZ2dlcnMiLCJnZXRWYWx1ZSIsImNvbG9yQ29sdW1uVmFsdWUiLCJjaGFubmVsQ29uZmlnIiwiY2hhbm5lbEZpZWxkIiwiY29sdW1uRmllbGQiLCJjb2xvckNvbHVtbiIsImNvbG9yQ29sdW1uSWR4IiwidmFsdWVBdCIsImF0dHJpYnV0ZVZhbHVlIiwiQUxMX0ZJRUxEX1RZUEVTIiwidGltZXN0YW1wIiwiRGF0ZSIsInNldHRpbmdzIiwiYWxsRGF0YSIsImdldERhdGEiLCJkYXRhc2V0SWQiLCJnZXRNZXRhIiwidGwiLCJvbGRMYXllckRhdGEiLCJkYXRhc2V0IiwiZ2V0RGF0YXNldCIsInVwZGF0ZVZpc3VhbENoYW5uZWxGaWVsZHMiLCJ1cGRhdGVIZXhDb2xvckRvbWFpbiIsImdldFBvc2l0aW9uQWNjZXNzb3IiLCJnZXREYXRhVXBkYXRlVHJpZ2dlcnMiLCJnZXRDaGFuZ2VkVHJpZ2dlcnMiLCJ1cGRhdGVMYXllck1ldGEiLCJjYWxjdWxhdGVEYXRhQXR0cmlidXRlIiwib2xkRmllbGQiLCJpc1VzaW5nSGV4Q29sb3JDb2RlIiwibmV3RGF0YVNldEZpZWxkIiwiZmQiLCJuZXdGaWx0ZXIiLCJ0YWJsZSIsInNjYWxlVHlwZSIsInVwZGF0ZWREb21haW4iLCJjYWxjdWxhdGVMYXllckRvbWFpbiIsInZhbGlkYXRlRmllbGRUeXBlIiwidmFsaWRhdGVTY2FsZSIsInZpc3VhbENoYW5uZWwiLCJzdXBwb3J0ZWRGaWVsZFR5cGVzIiwiY2hhbm5lbFN1cHBvcnRlZEZpZWxkVHlwZXMiLCJDSEFOTkVMX1NDQUxFX1NVUFBPUlRFRF9GSUVMRFMiLCJzY2FsZU9wdGlvbnMiLCJnZXRTY2FsZU9wdGlvbnMiLCJGSUVMRF9PUFRTIiwidXBkYXRlVHJpZ2dlcnMiLCJkYXRhU2V0RmllbGQiLCJmIiwiZ2V0Q29sdW1uTGF5ZXJEb21haW4iLCJsZWdlbmRzIiwibGVnZW5kIiwiY2FsY3VsYXRlTGVnZW5kIiwidXBkYXRlTGF5ZXJMZWdlbmQiLCJvYmplY3RJbmZvIiwiaXNMYXllckhvdmVyZWQiLCJwaWNrZWQiLCJsYXllciIsIm1hcFN0YXRlIiwicmFkaXVzQ2hhbm5lbCIsInZjIiwicmFkaXVzIiwiZ2V0Wm9vbUZhY3RvciIsInJhZGl1c1JhbmdlIiwiY2VpbCIsIm5vbmVMYXllckRhdGFBZmZlY3RpbmdQcm9wcyIsImludGVyYWN0aW9uQ29uZmlnIiwiYnJ1c2hpbmdUYXJnZXQiLCJicnVzaCIsImF1dG9IaWdobGlnaHQiLCJicnVzaGluZ1JhZGl1cyIsImJydXNoaW5nRW5hYmxlZCIsImlkeCIsImdwdUZpbHRlciIsInZpc2libGUiLCJtYXNrUG9seWdvbiIsIm1hc2tFeHRlbnNpb25Qcm9wcyIsImNvb3JkaW5hdGVTeXN0ZW0iLCJDT09SRElOQVRFX1NZU1RFTSIsIkxOR0xBVCIsInBpY2thYmxlIiwiaGFzSW50ZXJhY3Rpdml0eSIsIndyYXBMb25naXR1ZGUiLCJwYXJhbWV0ZXJzIiwiZGVwdGhUZXN0IiwiZHJhZ1JvdGF0ZSIsImVuYWJsZTNkIiwib3BhY2l0eSIsImV4dGVuc2lvbnMiLCJmaWx0ZXJSYW5nZSIsInVuZGVmaW5lZCIsInJlbmRlck9wdHMiLCJnZXRSYWRpdXMiLCJyYWRpdXNTY2FsZSIsInNoYXJlZFByb3BzIiwidGV4dExhYmVscyIsImdldFRleHQiLCJtYWluTGFiZWwiLCJzZWNvbmRhcnlMYWJlbCIsImFsaWdubWVudCIsImFuY2hvciIsImdldENvbG9yIiwibWFpbkZpZWxkIiwib3V0bGluZUNvbG9yIiwiZ2V0U2Vjb25kYXJ5Q29sb3IiLCJzZWNvbmRhcnlGaWVsZCIsInNlY29uZGFyeU91dGxpbmVDb2xvciIsInNlY29uZGFyeVNpemVTY2FsZSIsIlBvaW50TGFiZWxMYXllciIsImNoYXJhY3RlclNldCIsImNvbGxpc2lvbkVuYWJsZWQiLCJjb2xsaXNpb25Hcm91cCIsImdldFNlY29uZGFyeVRleHQiLCJnZXRUZXh0QW5jaG9yIiwiZ2V0QWxpZ25tZW50QmFzZWxpbmUiLCJmb250RmFtaWx5IiwiZm9udFNldHRpbmdzIiwic2RmIiwiZm9udFdlaWdodCIsIm91dGxpbmVXaWR0aCIsImdldEZpbHRlclZhbHVlIiwiaWNvblVybEFjY2Vzc29yIiwibWFzayIsIm1heEljb25TaXplIiwiZ2V0TWF4TWFya2VyU2l6ZSIsIndhbnRlZFVybCIsImljb25PayIsInVybCIsIndpZHRoIiwiaGVpZ2h0Iiwia2VwbGVyVGFibGUiLCJmb3VuZExheWVycyIsImRlZmF1bHRGaWVsZHMiLCJhbGxGaWVsZHMiLCJyZXF1aXJlZENvbHVtbnMiLCJwcmV2IiwicmVxdWlyZWRGaWVsZHMiLCJnZXRBbGxQb3NzaWJsZUNvbHVtblBhcmlzIiwiYWxsS2V5cyIsInBvaW50ZXJzIiwiY291bnRQZXJLZXkiLCJwYWlycyIsImluY3JlbWVudFBvaW50ZXJzIiwibmV3UGFpciIsImN1dXIiLCJwdHMiLCJjb3VudHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0JBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQVlBOztBQUNBOztBQUNBOztBQVFBOztBQUVBOztBQUNBOztBQUVBOztBQUNBOztBQUNBOzs7Ozs7Ozs7Ozs7d0RBNkJVQSxhOztBQTNCVjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1DLGVBQWUsR0FBRyxDQUF4QixDLENBRVA7OztBQUNBLElBQU1DLGFBQWEsR0FDakIsMExBREY7QUFHQSxJQUFNQyxlQUFlLEdBQUcsSUFBeEI7QUFDQSxJQUFNQyxhQUFhLEdBQUcsQ0FBQyxDQUFELEVBQUksQ0FBSixDQUF0QjtBQUNBLElBQU1DLG1CQUFtQixHQUFHLElBQUlDLCtCQUFKLENBQXdCO0FBQUNDLEVBQUFBLFVBQVUsRUFBRUM7QUFBYixDQUF4QixDQUE1QjtBQUNBLElBQU1DLHdCQUF3QixHQUFHLElBQUlDLG9DQUFKLEVBQWpDOztBQUVBLElBQU1DLG1CQUFtQixHQUFHLFNBQXRCQSxtQkFBc0IsQ0FBQUMsRUFBRTtBQUFBLFNBQUksVUFBQUMsQ0FBQztBQUFBLFdBQUlBLENBQUo7QUFBQSxHQUFMO0FBQUEsQ0FBOUI7O0FBQ0EsSUFBTUMsb0JBQW9CLEdBQUcsU0FBdkJBLG9CQUF1QixDQUFDQyxLQUFELEVBQVFGLENBQVI7QUFBQSxTQUFjRSxLQUFLLENBQUNDLGFBQU4sQ0FBb0JILENBQXBCLENBQWQ7QUFBQSxDQUE3Qjs7QUFDQSxJQUFNSSxhQUFhLEdBQUcsU0FBaEJBLGFBQWdCLENBQUFDLENBQUM7QUFBQSxTQUFJQSxDQUFKO0FBQUEs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LENBQUMsQ0FBRCxDQUFOLEdBQVksQ0FBMUMsRUFBNkM7QUFDM0M7QUFDQSxpQkFBTyxLQUFQO0FBQ0Q7O0FBRUQsWUFBSUQsR0FBRyxDQUFDeFgsS0FBRCxDQUFILEdBQWEsQ0FBYixHQUFpQnlYLE1BQU0sQ0FBQ3pYLEtBQUQsQ0FBM0IsRUFBb0M7QUFDbEN3WCxVQUFBQSxHQUFHLENBQUN4WCxLQUFELENBQUgsR0FBYXdYLEdBQUcsQ0FBQ3hYLEtBQUQsQ0FBSCxHQUFhLENBQTFCO0FBQ0EsaUJBQU8sSUFBUDtBQUNEOztBQUVEd1gsUUFBQUEsR0FBRyxDQUFDeFgsS0FBRCxDQUFILEdBQWEsQ0FBYjtBQUNBLGVBQU9xWCxpQkFBaUIsQ0FBQ0csR0FBRCxFQUFNQyxNQUFOLEVBQWN6WCxLQUFLLEdBQUcsQ0FBdEIsQ0FBeEI7QUFDRDs7QUFFRCxhQUFPb1gsS0FBUDtBQUNEOzs7V0FFRCxrQkFBZ0JoTixDQUFoQixFQUFtQjtBQUNqQixhQUFPLDBCQUFTQSxDQUFULENBQVA7QUFDRDs7Ozs7ZUFnc0NZakssSyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAyMiBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCB7Y29uc29sZSBhcyBDb25zb2xlfSBmcm9tICdnbG9iYWwvd2luZG93JztcbmltcG9ydCBrZXltaXJyb3IgZnJvbSAna2V5bWlycm9yJztcbmltcG9ydCB7Q29sbGlzaW9uRmlsdGVyRXh0ZW5zaW9uLCBEYXRhRmlsdGVyRXh0ZW5zaW9ufSBmcm9tICdAZGVjay5nbC9leHRlbnNpb25zJztcbmltcG9ydCB7Q09PUkRJTkFURV9TWVNURU0sIExheWVyIGFzIERlY2tMYXllcn0gZnJvbSAnQGRlY2suZ2wvY29yZSc7XG5pbXBvcnQge19Qb2ludExhYmVsTGF5ZXIgYXMgUG9pbnRMYWJlbExheWVyfSBmcm9tICdAZGVjay5nbC9jYXJ0byc7XG5pbXBvcnQgRGVmYXVsdExheWVySWNvbiBmcm9tICcuL2RlZmF1bHQtbGF5ZXItaWNvbic7XG5pbXBvcnQge2RpZmZVcGRhdGVUcmlnZ2Vyc30gZnJvbSAnLi9sYXllci11cGRhdGUnO1xuaW1wb3J0IHtyZ2J9IGZyb20gJ2QzLWNvbG9yJztcblxuaW1wb3J0IHtcbiAgQUxMX0ZJRUxEX1RZUEVTLFxuICBOT19WQUxVRV9DT0xPUixcbiAgU0NBTEVfVFlQRVMsXG4gIENIQU5ORUxfU0NBTEVTLFxuICBGSUVMRF9PUFRTLFxuICBTQ0FMRV9GVU5DLFxuICBDSEFOTkVMX1NDQUxFX1NVUFBPUlRFRF9GSUVMRFMsXG4gIE1BWF9HUFVfRklMVEVSUyxcbiAgVU5LTk9XTl9DT0xPUixcbiAgWk9PTV9MRVZFTF9MSU1JVFNcbn0gZnJvbSAnY29uc3RhbnRzL2RlZmF1bHQtc2V0dGluZ3MnO1xuaW1wb3J0IHtDT0xPUl9SQU5HRVMsIGhleENvbG9yfSBmcm9tICdjb25zdGFudHMvY29sb3ItcmFuZ2VzJztcbmltcG9ydCB7RGF0YVZpekNvbG9yc30gZnJvbSAnY29uc3RhbnRzL2N1c3RvbS1jb2xvci1yYW5nZXMnO1xuaW1wb3J0IHtcbiAgTEFZRVJfVklTX0NPTkZJR1MsXG4gIERFRkFVTFRfVEVYVF9MQUJFTCxcbiAgREVGQVVMVF9DT0xPUl9VSSxcbiAgREVGQVVMVF9ISUdITElHSFRfQ09MT1IsXG4gIERFRkFVTFRfTEFZRVJfTEFCRUxcbn0gZnJvbSAnLi9sYXllci1mYWN0b3J5JztcblxuaW1wb3J0IHtnZW5lcmF0ZUhhc2hJZCwgaXNQbGFpbk9iamVjdH0gZnJvbSAndXRpbHMvdXRpbHMnO1xuXG5pbXBvcnQge2dldExhdExuZ0JvdW5kcywgbm90TnVsbG9yVW5kZWZpbmVkfSBmcm9tICd1dGlscy9kYXRhLXV0aWxzJztcbmltcG9ydCB7Z2V0U2FtcGxlRGF0YX0gZnJvbSAndXRpbHMvdGFibGUtdXRpbHMvZGF0YS1jb250YWluZXItdXRpbHMnO1xuXG5pbXBvcnQge2hleFRvUmdiLCBnZXRDb2xvckdyb3VwQnlOYW1lLCByZXZlcnNlQ29sb3JSYW5nZSwgY2hlY2tDb2xvck9yRmFsbGJhY2t9IGZyb20gJ3V0aWxzL2NvbG9yLXV0aWxzJztcbmltcG9ydCB7Z2V0TWFza0V4dGVuc2lvblByb3BzfSBmcm9tICd1dGlscy9sYXllci11dGlscyc7XG5pbXBvcnQge3NjYWxlT3JkaW5hbH0gZnJvbSAnZDMtc2NhbGUnO1xuXG4vKiogQHR5cGVkZWYge2ltcG9ydCgnLi9pbmRleCcpLkxheWVyfSBMYXllckNsYXNzfSAqL1xuXG4vKipcbiAqIEFwcHJveC4gbnVtYmVyIG9mIHBvaW50cyB0byBzYW1wbGUgaW4gYSBsYXJnZSBkYXRhIHNldFxuICogQHR5cGUge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IExBWUVSX0lEX0xFTkdUSCA9IDY7XG5cbi8vIE5vdGUsIHRoaXMgaXMgaXMgU1ZHIG9mIHNvbGlkIGNpcmNsZSBlbmNvZGVkIGFzIGRhdGEtdXJpXG5jb25zdCBGQUxMQkFDS19JQ09OID1cbiAgJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxQSE4yWnlCMmFXVjNRbTk0UFNJd0lEQWdNVEF3SURFd01DSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklqNE5DaUFnUEdOcGNtTnNaU0JqZUQwaU5UQWlJR041UFNJMU1DSWdjajBpTlRBaUx6NE5Dand2YzNablBnPT0nO1xuXG5jb25zdCBNQVhfU0FNUExFX1NJWkUgPSA1MDAwO1xuY29uc3QgZGVmYXVsdERvbWFpbiA9IFswLCAxXTtcbmNvbnN0IGRhdGFGaWx0ZXJFeHRlbnNpb24gPSBuZXcgRGF0YUZpbHRlckV4dGVuc2lvbih7ZmlsdGVyU2l6ZTogTUFYX0dQVV9GSUxURVJTfSk7XG5jb25zdCBjb2xsaXNpb25GaWx0ZXJFeHRlbnNpb24gPSBuZXcgQ29sbGlzaW9uRmlsdGVyRXh0ZW5zaW9uKCk7XG5cbmNvbnN0IGRlZmF1bHREYXRhQWNjZXNzb3IgPSBkYyA9PiBkID0+IGQ7XG5jb25zdCBkZWZhdWx0R2V0RmllbGRWYWx1ZSA9IChmaWVsZCwgZCkgPT4gZmllbGQudmFsdWVBY2Nlc3NvcihkKTtcbmNvbnN0IHNjYWxlSWRlbnRpdHkgPSB2ID0+IHY7XG5cbmV4cG9ydCBjb25zdCBPVkVSTEFZX1RZUEUgPSBrZXltaXJyb3Ioe1xuICBkZWNrZ2w6IG51bGwsXG4gIG1hcGJveGdsOiBudWxsXG59KTtcblxuZXhwb3J0IGNvbnN0IGxheWVyQ29sb3JzID0gT2JqZWN0LnZhbHVlcyhEYXRhVml6Q29sb3JzKS5tYXAoaGV4VG9SZ2IpO1xuZnVuY3Rpb24qIGdlbmVyYXRlQ29sb3IoKSB7XG4gIGxldCBpbmRleCA9IDA7XG4gIHdoaWxlIChpbmRleCA8IGxheWVyQ29sb3JzLmxlbmd0aCArIDEpIHtcbiAgICBpZiAoaW5kZXggPT09IGxheWVyQ29sb3JzLmxlbmd0aCkge1xuICAgICAgaW5kZXggPSAwO1xuICAgIH1cbiAgICB5aWVsZCBsYXllckNvbG9yc1tpbmRleCsrXTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgY29sb3JNYWtlciA9IGdlbmVyYXRlQ29sb3IoKTtcblxuLyoqIEB0eXBlIHtMYXllckNsYXNzfSAqL1xuY2xhc3MgTGF5ZXIge1xuICBjb25zdHJ1Y3Rvcihwcm9wcyA9IHt9KSB7XG4gICAgdGhpcy5pZCA9IHByb3BzLmlkIHx8IGdlbmVyYXRlSGFzaElkKExBWUVSX0lEX0xFTkdUSCk7XG4gICAgLy8gbWV0YVxuICAgIHRoaXMubWV0YSA9IHt9O1xuXG4gICAgLy8gbGVnZW5kU2V0dGluZ3NcbiAgICB0aGlzLmxlZ2VuZFNldHRpbmdzID0ge307XG5cbiAgICAvLyB2aXNDb25maWdTZXR0aW5nc1xuICAgIHRoaXMudmlzQ29uZmlnU2V0dGluZ3MgPSB7fTtcblxuICAgIC8vIGludGVyYWN0aXZpdHlTZXR0aW5nc1xuICAgIHRoaXMuX2ludGVyYWN0aXZpdHlTZXR0aW5ncyA9IHt9O1xuXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHRoaXMuY29uZmlnID0gdGhpcy5nZXREZWZhdWx0TGF5ZXJDb25maWcoe1xuICAgICAgY29sdW1uczogdGhpcy5nZXRMYXllckNvbHVtbnMoKSxcbiAgICAgIC4uLnByb3BzXG4gICAgfSk7XG4gIH1cblxuICBnZXQgbGF5ZXJJY29uKCkge1xuICAgIHJldHVybiBEZWZhdWx0TGF5ZXJJY29uO1xuICB9XG5cbiAgZ2V0IG92ZXJsYXlUeXBlKCkge1xuICAgIHJldHVybiBPVkVSTEFZX1RZUEUuZGVja2dsO1xuICB9XG5cbiAgZ2V0IHR5cGUoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlO1xuICB9XG5cbiAgZ2V0IGlzQWdncmVnYXRlZCgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXQgcmVxdWlyZWRMYXllckNvbHVtbnMoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgZ2V0IG9wdGlvbmFsQ29sdW1ucygpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBnZXQgbm9uZUxheWVyRGF0YUFmZmVjdGluZ1Byb3BzKCkge1xuICAgIHJldHVybiBbJ2xhYmVsJywgJ29wYWNpdHknLCAndGhpY2tuZXNzJywgJ2lzVmlzaWJsZScsICdoaWRkZW4nXTtcbiAgfVxuXG4gIGdldCB2aXN1YWxDaGFubmVscygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29sb3I6IHtcbiAgICAgICAgcHJvcGVydHk6ICdjb2xvcicsXG4gICAgICAgIGZpZWxkOiAnY29sb3JGaWVsZCcsXG4gICAgICAgIHNjYWxlOiAnY29sb3JTY2FsZScsXG4gICAgICAgIGRvbWFpbjogJ2NvbG9yRG9tYWluJyxcbiAgICAgICAgcmFuZ2U6ICdjb2xvclJhbmdlJyxcbiAgICAgICAga2V5OiAnY29sb3InLFxuICAgICAgICBjaGFubmVsU2NhbGVUeXBlOiBDSEFOTkVMX1NDQUxFUy5jb2xvcixcbiAgICAgICAgbnVsbFZhbHVlOiBOT19WQUxVRV9DT0xPUixcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBjb25maWcgPT4gY29uZmlnLmNvbG9yXG4gICAgICB9LFxuICAgICAgc2l6ZToge1xuICAgICAgICBwcm9wZXJ0eTogJ3NpemUnLFxuICAgICAgICBmaWVsZDogJ3NpemVGaWVsZCcsXG4gICAgICAgIHNjYWxlOiAnc2l6ZVNjYWxlJyxcbiAgICAgICAgZG9tYWluOiAnc2l6ZURvbWFpbicsXG4gICAgICAgIHJhbmdlOiAnc2l6ZVJhbmdlJyxcbiAgICAgICAga2V5OiAnc2l6ZScsXG4gICAgICAgIGNoYW5uZWxTY2FsZVR5cGU6IENIQU5ORUxfU0NBTEVTLnNpemUsXG4gICAgICAgIG51bGxWYWx1ZTogMCxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiAxXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8qXG4gICAqIENvbHVtbiBwYWlycyBtYXBzIGxheWVyIGNvbHVtbiB0byBhIHNwZWNpZmljIGZpZWxkIHBhaXJzLFxuICAgKiBCeSBkZWZhdWx0LCBpdCBpcyBzZXQgdG8gbnVsbFxuICAgKi9cbiAgZ2V0IGNvbHVtblBhaXJzKCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLypcbiAgICogRGVmYXVsdCBwb2ludCBjb2x1bW4gcGFpcnMsIGNhbiBiZSB1c2VkIGZvciBwb2ludCBiYXNlZCBsYXllcnM6IHBvaW50LCBpY29uIGV0Yy5cbiAgICovXG4gIGdldCBkZWZhdWx0UG9pbnRDb2x1bW5QYWlycygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbGF0OiB7cGFpcjogJ2xuZycsIGZpZWxkUGFpcktleTogJ2xhdCd9LFxuICAgICAgbG5nOiB7cGFpcjogJ2xhdCcsIGZpZWxkUGFpcktleTogJ2xuZyd9XG4gICAgfTtcbiAgfVxuXG4gIC8qXG4gICAqIERlZmF1bHQgbGluayBjb2x1bW4gcGFpcnMsIGNhbiBiZSB1c2VkIGZvciBsaW5rIGJhc2VkIGxheWVyczogYXJjLCBsaW5lIGV0Y1xuICAgKi9cbiAgZ2V0IGRlZmF1bHRMaW5rQ29sdW1uUGFpcnMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxhdDA6IHtwYWlyOiAnbG5nMCcsIGZpZWxkUGFpcktleTogJ2xhdCd9LFxuICAgICAgbG5nMDoge3BhaXI6ICdsYXQwJywgZmllbGRQYWlyS2V5OiAnbG5nJ30sXG4gICAgICBsYXQxOiB7cGFpcjogJ2xuZzEnLCBmaWVsZFBhaXJLZXk6ICdsYXQnfSxcbiAgICAgIGxuZzE6IHtwYWlyOiAnbGF0MScsIGZpZWxkUGFpcktleTogJ2xuZyd9XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBSZWFjdCBjb21wb25lbnQgZm9yIHRvIHJlbmRlciBsYXllciBpbnN0cnVjdGlvbnMgaW4gYSBtb2RhbFxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSAtIGFuIG9iamVjdFxuICAgKiBAZXhhbXBsZVxuICAgKiAgcmV0dXJuIHtcbiAgICogICAgaWQ6ICdpY29uSW5mbycsXG4gICAqICAgIHRlbXBsYXRlOiBJY29uSW5mb01vZGFsLFxuICAgKiAgICBtb2RhbFByb3BzOiB7XG4gICAqICAgICAgdGl0bGU6ICdIb3cgdG8gZHJhdyBpY29ucydcbiAgICogICB9O1xuICAgKiB9XG4gICAqL1xuICBnZXQgbGF5ZXJJbmZvTW9kYWwoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXQgaW50ZXJhY3Rpdml0eVNldHRpbmdzKCkge1xuICAgIHJldHVybiB0aGlzLl9pbnRlcmFjdGl2aXR5U2V0dGluZ3M7XG4gIH1cblxuICBzZXQgaW50ZXJhY3Rpdml0eVNldHRpbmdzKGludGVyYWN0aXZpdHlTZXR0aW5ncykge1xuICAgIHRoaXMuX2ludGVyYWN0aXZpdHlTZXR0aW5ncyA9IGludGVyYWN0aXZpdHlTZXR0aW5ncztcbiAgfVxuXG4gIGdldCBoYXNUb29sdGlwKCkge1xuICAgIHJldHVybiBCb29sZWFuKFxuICAgICAgdGhpcy5pbnRlcmFjdGl2aXR5U2V0dGluZ3M/LmhvdmVyPy5maWVsZHMubGVuZ3RoIHx8XG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpdml0eVNldHRpbmdzPy5jbGljaz8uZmllbGRzLmxlbmd0aFxuICAgICk7XG4gIH1cblxuICBnZXQgaGFzSW50ZXJhY3Rpdml0eSgpIHtcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLmhhc1Rvb2x0aXAgJiYgdGhpcy5pbnRlcmFjdGl2aXR5U2V0dGluZ3M/LmVuYWJsZWQpO1xuICB9XG5cbiAgLypcbiAgICogR2l2ZW4gYSBkYXRhc2V0LCBhdXRvbWF0aWNhbGx5IGZpbmQgcHJvcHMgdG8gY3JlYXRlIGxheWVyIGJhc2VkIG9uIGl0XG4gICAqIGFuZCByZXR1cm4gdGhlIHByb3BzIGFuZCBwcmV2aW91cyBmb3VuZCBsYXllcnMuXG4gICAqIEJ5IGRlZmF1bHQsIG5vIGxheWVycyB3aWxsIGJlIGZvdW5kXG4gICAqL1xuICBzdGF0aWMgZmluZERlZmF1bHRMYXllclByb3BzKGRhdGFzZXQsIGZvdW5kTGF5ZXJzKSB7XG4gICAgcmV0dXJuIHtwcm9wczogW10sIGZvdW5kTGF5ZXJzfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHaXZlbiBhIGFycmF5IG9mIHByZXNldCByZXF1aXJlZCBjb2x1bW4gbmFtZXNcbiAgICogZm91bmQgZmllbGQgdGhhdCBoYXMgdGhlIHNhbWUgbmFtZSB0byBzZXQgYXMgbGF5ZXIgY29sdW1uXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBkZWZhdWx0RmllbGRzXG4gICAqIEBwYXJhbSB7b2JqZWN0W119IGFsbEZpZWxkc1xuICAgKiBAcmV0dXJucyB7b2JqZWN0W10gfCBudWxsfSBhbGwgcG9zc2libGUgcmVxdWlyZWQgbGF5ZXIgY29sdW1uIHBhaXJzXG4gICAqL1xuICBzdGF0aWMgZmluZERlZmF1bHRDb2x1bW5GaWVsZChkZWZhdWx0RmllbGRzLCBhbGxGaWVsZHMpIHtcbiAgICAvLyBmaW5kIGFsbCBtYXRjaGVkIGZpZWxkcyBmb3IgZWFjaCByZXF1aXJlZCBjb2xcbiAgICBjb25zdCByZXF1aXJlZENvbHVtbnMgPSBPYmplY3Qua2V5cyhkZWZhdWx0RmllbGRzKS5yZWR1Y2UoKHByZXYsIGtleSkgPT4ge1xuICAgICAgY29uc3QgcmVxdWlyZWRGaWVsZHMgPSBhbGxGaWVsZHMuZmlsdGVyKFxuICAgICAgICBmID0+IGYubmFtZSA9PT0gZGVmYXVsdEZpZWxkc1trZXldIHx8IGRlZmF1bHRGaWVsZHNba2V5XS5pbmNsdWRlcyhmLm5hbWUpXG4gICAgICApO1xuXG4gICAgICBwcmV2W2tleV0gPSByZXF1aXJlZEZpZWxkcy5sZW5ndGhcbiAgICAgICAgPyByZXF1aXJlZEZpZWxkcy5tYXAoZiA9PiAoe1xuICAgICAgICAgICAgdmFsdWU6IGYubmFtZSxcbiAgICAgICAgICAgIGZpZWxkSWR4OiBmLmZpZWxkSWR4XG4gICAgICAgICAgfSkpXG4gICAgICAgIDogbnVsbDtcbiAgICAgIHJldHVybiBwcmV2O1xuICAgIH0sIHt9KTtcblxuICAgIGlmICghT2JqZWN0LnZhbHVlcyhyZXF1aXJlZENvbHVtbnMpLmV2ZXJ5KEJvb2xlYW4pKSB7XG4gICAgICAvLyBpZiBhbnkgZmllbGQgbWlzc2luZywgcmV0dXJuIG51bGxcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldEFsbFBvc3NpYmxlQ29sdW1uUGFyaXMocmVxdWlyZWRDb2x1bW5zKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRBbGxQb3NzaWJsZUNvbHVtblBhcmlzKHJlcXVpcmVkQ29sdW1ucykge1xuICAgIC8vIGZvciBtdWx0aXBsZSBtYXRjaGVkIGZpZWxkIGZvciBvbmUgcmVxdWlyZWQgY29sdW1uLCByZXR1cm4gbXVsdGlwbGVcbiAgICAvLyBjb21iaW5hdGlvbnMsIGUuIGcuIGlmIGNvbHVtbiBhIGhhcyAyIG1hdGNoZWQsIGNvbHVtbiBiIGhhcyAzIG1hdGNoZWRcbiAgICAvLyA2IHBvc3NpYmxlIGNvbHVtbiBwYWlycyB3aWxsIGJlIHJldHVybmVkXG4gICAgY29uc3QgYWxsS2V5cyA9IE9iamVjdC5rZXlzKHJlcXVpcmVkQ29sdW1ucyk7XG4gICAgY29uc3QgcG9pbnRlcnMgPSBhbGxLZXlzLm1hcCgoaywgaSkgPT4gKChpID09PSBhbGxLZXlzLmxlbmd0aCAtIDEgPyAtMSA6IDApKSk7XG4gICAgY29uc3QgY291bnRQZXJLZXkgPSBhbGxLZXlzLm1hcChrID0+IHJlcXVpcmVkQ29sdW1uc1trXS5sZW5ndGgpO1xuICAgIGNvbnN0IHBhaXJzID0gW107XG5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1sb29wLWZ1bmMgKi9cbiAgICB3aGlsZSAoaW5jcmVtZW50UG9pbnRlcnMocG9pbnRlcnMsIGNvdW50UGVyS2V5LCBwb2ludGVycy5sZW5ndGggLSAxKSkge1xuICAgICAgY29uc3QgbmV3UGFpciA9IHBvaW50ZXJzLnJlZHVjZSgocHJldiwgY3V1ciwgaSkgPT4ge1xuICAgICAgICBwcmV2W2FsbEtleXNbaV1dID0gcmVxdWlyZWRDb2x1bW5zW2FsbEtleXNbaV1dW2N1dXJdO1xuICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgIH0sIHt9KTtcblxuICAgICAgcGFpcnMucHVzaChuZXdQYWlyKTtcbiAgICB9XG4gICAgLyogZXNsaW50LWVuYWJsZSBuby1sb29wLWZ1bmMgKi9cblxuICAgIC8vIHJlY3Vyc2l2ZWx5IGluY3JlbWVudCBwb2ludGVyc1xuICAgIGZ1bmN0aW9uIGluY3JlbWVudFBvaW50ZXJzKHB0cywgY291bnRzLCBpbmRleCkge1xuICAgICAgaWYgKGluZGV4ID09PSAwICYmIHB0c1swXSA9PT0gY291bnRzWzBdIC0gMSkge1xuICAgICAgICAvLyBub3RoaW5nIHRvIGluY3JlbWVudFxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChwdHNbaW5kZXhdICsgMSA8IGNvdW50c1tpbmRleF0pIHtcbiAgICAgICAgcHRzW2luZGV4XSA9IHB0c1tpbmRleF0gKyAxO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcHRzW2luZGV4XSA9IDA7XG4gICAgICByZXR1cm4gaW5jcmVtZW50UG9pbnRlcnMocHRzLCBjb3VudHMsIGluZGV4IC0gMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhaXJzO1xuICB9XG5cbiAgc3RhdGljIGhleFRvUmdiKGMpIHtcbiAgICByZXR1cm4gaGV4VG9SZ2IoYyk7XG4gIH1cblxuICBnZXREZWZhdWx0TGF5ZXJDb25maWcocHJvcHMgPSB7fSkge1xuICAgIHJldHVybiB7XG4gICAgICBkYXRhSWQ6IHByb3BzLmRhdGFJZCB8fCBudWxsLFxuICAgICAgdmlzaWJpbGl0eUJ5Wm9vbToge1xuICAgICAgICBtaW46IHByb3BzLnZpc2liaWxpdHlCeVpvb20/Lm1pbiB8fCBaT09NX0xFVkVMX0xJTUlUUy5taW4sXG4gICAgICAgIG1heDogcHJvcHMudmlzaWJpbGl0eUJ5Wm9vbT8ubWF4IHx8IFpPT01fTEVWRUxfTElNSVRTLm1heFxuICAgICAgfSxcbiAgICAgIGxhYmVsOiBwcm9wcy5sYWJlbCB8fCBERUZBVUxUX0xBWUVSX0xBQkVMLFxuICAgICAgY29sb3I6IHByb3BzLmNvbG9yIHx8IGNvbG9yTWFrZXIubmV4dCgpLnZhbHVlLFxuICAgICAgY29sdW1uczogcHJvcHMuY29sdW1ucyB8fCBudWxsLFxuICAgICAgaXNWaXNpYmxlOiBwcm9wcy5pc1Zpc2libGUgfHwgZmFsc2UsXG4gICAgICBpc0NvbmZpZ0FjdGl2ZTogcHJvcHMuaXNDb25maWdBY3RpdmUgfHwgZmFsc2UsXG4gICAgICBoaWdobGlnaHRDb2xvcjogcHJvcHMuaGlnaGxpZ2h0Q29sb3IgfHwgREVGQVVMVF9ISUdITElHSFRfQ09MT1IsXG4gICAgICBoaWRkZW46IHByb3BzLmhpZGRlbiB8fCBmYWxzZSxcblxuICAgICAgLy8gVE9ETzogcmVmYWN0b3IgdGhpcyBpbnRvIHNlcGFyYXRlIHZpc3VhbCBDaGFubmVsIGNvbmZpZ1xuICAgICAgLy8gY29sb3IgYnkgZmllbGQsIGRvbWFpbiBpcyBzZXQgYnkgZmlsdGVycywgZmllbGQsIHNjYWxlIHR5cGVcbiAgICAgIGNvbG9yRmllbGQ6IG51bGwsXG4gICAgICBjb2xvckRvbWFpbjogWzAsIDFdLFxuICAgICAgY29sb3JTY2FsZTogU0NBTEVfVFlQRVMucXVhbnRpbGUsXG5cbiAgICAgIC8vIGNvbG9yIGJ5IHNpemUsIGRvbWFpbiBpcyBzZXQgYnkgZmlsdGVycywgZmllbGQsIHNjYWxlIHR5cGVcbiAgICAgIHNpemVEb21haW46IFswLCAxXSxcbiAgICAgIHNpemVTY2FsZTogU0NBTEVfVFlQRVMubGluZWFyLFxuICAgICAgc2l6ZUZpZWxkOiBudWxsLFxuICAgICAgcmFkaXVzRmllbGQ6IG51bGwsXG5cbiAgICAgIHZpc0NvbmZpZzoge30sXG5cbiAgICAgIHRleHRMYWJlbDogW0RFRkFVTFRfVEVYVF9MQUJFTF0sXG5cbiAgICAgIGNvbG9yVUk6IHtcbiAgICAgICAgY29sb3I6IERFRkFVTFRfQ09MT1JfVUksXG4gICAgICAgIGNvbG9yUmFuZ2U6IERFRkFVTFRfQ09MT1JfVUlcbiAgICAgIH0sXG4gICAgICBhbmltYXRpb246IHtlbmFibGVkOiBmYWxzZX1cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGVzY3JpcHRpb24gb2YgYSB2aXN1YWxDaGFubmVsIGNvbmZpZ1xuICAgKiBAcGFyYW0ga2V5XG4gICAqIEByZXR1cm5zIHt7bGFiZWw6IHN0cmluZywgbWVhc3VyZTogKHN0cmluZ3xzdHJpbmcpfX1cbiAgICovXG4gIGdldFZpc3VhbENoYW5uZWxEZXNjcmlwdGlvbihrZXkpIHtcbiAgICAvLyBlLmcuIGxhYmVsOiBDb2xvciwgbWVhc3VyZTogVmVoaWNsZSBUeXBlXG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsOiB0aGlzLnZpc0NvbmZpZ1NldHRpbmdzW3RoaXMudmlzdWFsQ2hhbm5lbHNba2V5XS5yYW5nZV0ubGFiZWwsXG4gICAgICBtZWFzdXJlOiB0aGlzLmNvbmZpZ1t0aGlzLnZpc3VhbENoYW5uZWxzW2tleV0uZmllbGRdXG4gICAgICAgID8gKHRoaXMuY29uZmlnW3RoaXMudmlzdWFsQ2hhbm5lbHNba2V5XS5maWVsZF0uZGlzcGxheU5hbWUgfHxcbiAgICAgICAgICB0aGlzLmNvbmZpZ1t0aGlzLnZpc3VhbENoYW5uZWxzW2tleV0uZmllbGRdLm5hbWUpXG4gICAgICAgIDogdGhpcy52aXN1YWxDaGFubmVsc1trZXldLmRlZmF1bHRNZWFzdXJlXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NpZ24gYSBmaWVsZCB0byBsYXllciBjb2x1bW4sIHJldHVybiBjb2x1bW4gY29uZmlnXG4gICAqIEBwYXJhbSBrZXkgLSBDb2x1bW4gS2V5XG4gICAqIEBwYXJhbSBmaWVsZCAtIFNlbGVjdGVkIGZpZWxkXG4gICAqIEByZXR1cm5zIHt7fX0gLSBDb2x1bW4gY29uZmlnXG4gICAqL1xuICBhc3NpZ25Db2x1bW4oa2V5LCBmaWVsZCkge1xuICAgIC8vIGZpZWxkIHZhbHVlIGNvdWxkIGJlIG51bGwgZm9yIG9wdGlvbmFsIGNvbHVtbnNcbiAgICBjb25zdCB1cGRhdGUgPSBmaWVsZFxuICAgICAgPyB7XG4gICAgICAgICAgdmFsdWU6IGZpZWxkLm5hbWUsXG4gICAgICAgICAgZmllbGRJZHg6IGZpZWxkLmZpZWxkSWR4XG4gICAgICAgIH1cbiAgICAgIDoge3ZhbHVlOiBudWxsLCBmaWVsZElkeDogLTF9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuY29uZmlnLmNvbHVtbnMsXG4gICAgICBba2V5XToge1xuICAgICAgICAuLi50aGlzLmNvbmZpZy5jb2x1bW5zW2tleV0sXG4gICAgICAgIC4uLnVwZGF0ZVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQXNzaWduIGEgZmllbGQgcGFpciB0byBjb2x1bW4gY29uZmlnLCByZXR1cm4gY29sdW1uIGNvbmZpZ1xuICAgKiBAcGFyYW0ga2V5IC0gQ29sdW1uIEtleVxuICAgKiBAcGFyYW0gcGFpciAtIGZpZWxkIFBhaXJcbiAgICogQHJldHVybnMge29iamVjdH0gLSBDb2x1bW4gY29uZmlnXG4gICAqL1xuICBhc3NpZ25Db2x1bW5QYWlycyhrZXksIHBhaXIpIHtcbiAgICBpZiAoIXRoaXMuY29sdW1uUGFpcnMgfHwgIXRoaXMuY29sdW1uUGFpcnM/LltrZXldKSB7XG4gICAgICAvLyBzaG91bGQgbm90IGVuZCBpbiB0aGlzIHN0YXRlXG4gICAgICByZXR1cm4gdGhpcy5jb25maWcuY29sdW1ucztcbiAgICB9XG5cbiAgICBjb25zdCB7cGFpcjogcGFydG5lcktleSwgZmllbGRQYWlyS2V5fSA9IHRoaXMuY29sdW1uUGFpcnM/LltrZXldO1xuICAgIGNvbnN0IHtmaWVsZFBhaXJLZXk6IHBhcnRuZXJGaWVsZFBhaXJLZXl9ID0gdGhpcy5jb2x1bW5QYWlycz8uW3BhcnRuZXJLZXldO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuY29uZmlnLmNvbHVtbnMsXG4gICAgICBba2V5XTogcGFpcltmaWVsZFBhaXJLZXldLFxuICAgICAgW3BhcnRuZXJLZXldOiBwYWlyW3BhcnRuZXJGaWVsZFBhaXJLZXldXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgYSByYWRpdXMgem9vbSBtdWx0aXBsaWVyIHRvIHJlbmRlciBwb2ludHMsIHNvIHRoZXkgYXJlIHZpc2libGUgaW4gYWxsIHpvb20gbGV2ZWxcbiAgICogQHBhcmFtIHtvYmplY3R9IG1hcFN0YXRlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtYXBTdGF0ZS56b29tIC0gYWN0dWFsIHpvb21cbiAgICogQHBhcmFtIHtudW1iZXIgfCB2b2lkfSBtYXBTdGF0ZS56b29tT2Zmc2V0IC0gem9vbU9mZnNldCB3aGVuIHJlbmRlciBpbiB0aGUgcGxvdCBjb250YWluZXIgZm9yIGV4cG9ydCBpbWFnZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0Wm9vbUZhY3Rvcih7em9vbSwgem9vbU9mZnNldCA9IDB9KSB7XG4gICAgcmV0dXJuIE1hdGgucG93KDIsIE1hdGgubWF4KDE0IC0gem9vbSArIHpvb21PZmZzZXQsIDApKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgYSBlbGV2YXRpb24gem9vbSBtdWx0aXBsaWVyIHRvIHJlbmRlciBwb2ludHMsIHNvIHRoZXkgYXJlIHZpc2libGUgaW4gYWxsIHpvb20gbGV2ZWxcbiAgICogQHBhcmFtIHtvYmplY3R9IG1hcFN0YXRlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtYXBTdGF0ZS56b29tIC0gYWN0dWFsIHpvb21cbiAgICogQHBhcmFtIHtudW1iZXIgfCB2b2lkfSBtYXBTdGF0ZS56b29tT2Zmc2V0IC0gem9vbU9mZnNldCB3aGVuIHJlbmRlciBpbiB0aGUgcGxvdCBjb250YWluZXIgZm9yIGV4cG9ydCBpbWFnZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0RWxldmF0aW9uWm9vbUZhY3Rvcih7em9vbSwgem9vbU9mZnNldCA9IDB9KSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnZpc0NvbmZpZy5lbmFibGVFbGV2YXRpb25ab29tRmFjdG9yXG4gICAgICA/IE1hdGgucG93KDIsIE1hdGgubWF4KDggLSB6b29tICsgem9vbU9mZnNldCwgMCkpXG4gICAgICA6IDE7XG4gIH1cblxuICBmb3JtYXRMYXllckRhdGEoZGF0YXNldHMsIGZpbHRlcmVkSW5kZXgpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICByZW5kZXJMYXllcigpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBnZXRIb3ZlckRhdGEob2JqZWN0LCBkYXRhQ29udGFpbmVyKSB7XG4gICAgaWYgKCFvYmplY3QpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIEJ5IGRlZmF1bHQsIGVhY2ggZW50cnkgb2YgbGF5ZXJEYXRhIHNob3VsZCBoYXZlIGFuIGluZGV4IG9mIGEgcm93IGluIHRoZSBvcmlnaW5hbCBkYXRhIGNvbnRhaW5lci5cbiAgICAvLyBFYWNoIGxheWVyIGNhbiBpbXBsZW1lbnQgaXRzIG93biBnZXRIb3ZlckRhdGEgbWV0aG9kXG4gICAgcmV0dXJuIGRhdGFDb250YWluZXIucm93KG9iamVjdC5pbmRleCk7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiBjaGFuZ2UgbGF5ZXIgdHlwZSwgdHJ5IHRvIGNvcHkgb3ZlciBsYXllciBjb25maWdzIGFzIG11Y2ggYXMgcG9zc2libGVcbiAgICogQHBhcmFtIGNvbmZpZ1RvQ29weSAtIGNvbmZpZyB0byBjb3B5IG92ZXJcbiAgICogQHBhcmFtIHZpc0NvbmZpZ1NldHRpbmdzIC0gdmlzQ29uZmlnIHNldHRpbmdzIG9mIGNvbmZpZyB0byBjb3B5XG4gICAqL1xuICBhc3NpZ25Db25maWdUb0xheWVyKGNvbmZpZ1RvQ29weSwgdmlzQ29uZmlnU2V0dGluZ3MpIHtcbiAgICAvLyBkb24ndCBkZWVwIG1lcmdlIHZpc3VhbENoYW5uZWwgZmllbGRcbiAgICAvLyBkb24ndCBkZWVwIG1lcmdlIGNvbG9yIHJhbmdlLCByZXZlcnNlZDogaXMgbm90IGEga2V5IGJ5IGRlZmF1bHRcbiAgICBjb25zdCBzaGFsbG93Q29weSA9IFsnY29sb3JSYW5nZScsICdzdHJva2VDb2xvclJhbmdlJ10uY29uY2F0KFxuICAgICAgT2JqZWN0LnZhbHVlcyh0aGlzLnZpc3VhbENoYW5uZWxzKS5tYXAodiA9PiB2LmZpZWxkKVxuICAgICk7XG5cbiAgICAvLyBkb24ndCBjb3B5IG92ZXIgZG9tYWluIGFuZCBhbmltYXRpb25cbiAgICBjb25zdCBub3RUb0NvcHkgPSBbJ2FuaW1hdGlvbiddLmNvbmNhdChPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLm1hcCh2ID0+IHYuZG9tYWluKSk7XG4gICAgLy8gaWYgcmFuZ2UgaXMgZm9yIHRoZSBzYW1lIHByb3BlcnR5IGdyb3VwIGNvcHkgaXQsIG90aGVyd2lzZSwgbm90IHRvIGNvcHlcbiAgICBPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2godiA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGNvbmZpZ1RvQ29weS52aXNDb25maWdbdi5yYW5nZV0gJiZcbiAgICAgICAgdGhpcy52aXNDb25maWdTZXR0aW5nc1t2LnJhbmdlXSAmJlxuICAgICAgICB2aXNDb25maWdTZXR0aW5nc1t2LnJhbmdlXS5ncm91cCAhPT0gdGhpcy52aXNDb25maWdTZXR0aW5nc1t2LnJhbmdlXS5ncm91cFxuICAgICAgKSB7XG4gICAgICAgIG5vdFRvQ29weS5wdXNoKHYucmFuZ2UpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gZG9uJ3QgY29weSBvdmVyIHZpc3VhbENoYW5uZWwgcmFuZ2VcbiAgICBjb25zdCBjdXJyZW50Q29uZmlnID0gdGhpcy5jb25maWc7XG4gICAgY29uc3QgY29waWVkID0gdGhpcy5jb3B5TGF5ZXJDb25maWcoY3VycmVudENvbmZpZywgY29uZmlnVG9Db3B5LCB7XG4gICAgICBzaGFsbG93Q29weSxcbiAgICAgIG5vdFRvQ29weVxuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoY29waWVkKTtcbiAgICAvLyB2YWxpZGF0ZSB2aXN1YWxDaGFubmVsIGZpZWxkIHR5cGUgYW5kIHNjYWxlIHR5cGVzXG4gICAgT2JqZWN0LmtleXModGhpcy52aXN1YWxDaGFubmVscykuZm9yRWFjaChjaGFubmVsID0+IHtcbiAgICAgIHRoaXMudmFsaWRhdGVWaXN1YWxDaGFubmVsKGNoYW5uZWwpO1xuICAgIH0pO1xuICB9XG5cbiAgLypcbiAgICogUmVjdXJzaXZlbHkgY29weSBjb25maWcgb3ZlciB0byBhbiBlbXB0eSBsYXllclxuICAgKiB3aGVuIHJlY2VpdmVkIHNhdmVkIGNvbmZpZywgb3IgY29weSBjb25maWcgb3ZlciBmcm9tIGEgZGlmZmVyZW50IGxheWVyIHR5cGVcbiAgICogbWFrZSBzdXJlIHRvIG9ubHkgY29weSBvdmVyIHZhbHVlIHRvIGV4aXN0aW5nIGtleXNcbiAgICogQHBhcmFtIHtvYmplY3R9IGN1cnJlbnRDb25maWcgLSBleGlzdGluZyBjb25maWcgdG8gYmUgb3ZlcnJpZGVcbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZ1RvQ29weSAtIG5ldyBDb25maWcgdG8gY29weSBvdmVyXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHNoYWxsb3dDb3B5IC0gYXJyYXkgb2YgcHJvcGVydGllcyB0byBub3QgdG8gYmUgZGVlcCBjb3BpZWRcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gbm90VG9Db3B5IC0gYXJyYXkgb2YgcHJvcGVydGllcyBub3QgdG8gY29weVxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSAtIGNvcGllZCBjb25maWdcbiAgICovXG4gIGNvcHlMYXllckNvbmZpZyhjdXJyZW50Q29uZmlnLCBjb25maWdUb0NvcHksIHtzaGFsbG93Q29weSA9IFtdLCBub3RUb0NvcHkgPSBbXX0gPSB7fSkge1xuICAgIGNvbnN0IGNvcGllZCA9IHt9O1xuICAgIE9iamVjdC5rZXlzKGN1cnJlbnRDb25maWcpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgaXNQbGFpbk9iamVjdChjdXJyZW50Q29uZmlnW2tleV0pICYmXG4gICAgICAgIGlzUGxhaW5PYmplY3QoY29uZmlnVG9Db3B5W2tleV0pICYmXG4gICAgICAgICFzaGFsbG93Q29weS5pbmNsdWRlcyhrZXkpICYmXG4gICAgICAgICFub3RUb0NvcHkuaW5jbHVkZXMoa2V5KVxuICAgICAgKSB7XG4gICAgICAgIC8vIHJlY3Vyc2l2ZWx5IGFzc2lnbiBvYmplY3QgdmFsdWVcbiAgICAgICAgY29waWVkW2tleV0gPSB0aGlzLmNvcHlMYXllckNvbmZpZyhjdXJyZW50Q29uZmlnW2tleV0sIGNvbmZpZ1RvQ29weVtrZXldLCB7XG4gICAgICAgICAgc2hhbGxvd0NvcHksXG4gICAgICAgICAgbm90VG9Db3B5XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChub3ROdWxsb3JVbmRlZmluZWQoY29uZmlnVG9Db3B5W2tleV0pICYmICFub3RUb0NvcHkuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAvLyBjb3B5XG4gICAgICAgIGNvcGllZFtrZXldID0gY29uZmlnVG9Db3B5W2tleV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBrZWVwIGV4aXN0aW5nXG4gICAgICAgIGNvcGllZFtrZXldID0gY3VycmVudENvbmZpZ1trZXldO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNvcGllZDtcbiAgfVxuXG4gIHJlZ2lzdGVyVmlzQ29uZmlnKGxheWVyVmlzQ29uZmlncykge1xuICAgIE9iamVjdC5rZXlzKGxheWVyVmlzQ29uZmlncykuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycgJiYgTEFZRVJfVklTX0NPTkZJR1NbbGF5ZXJWaXNDb25maWdzW2l0ZW1dXSkge1xuICAgICAgICAvLyBpZiBhc3NpZ25lZCBvbmUgb2YgZGVmYXVsdCBMQVlFUl9DT05GSUdTXG4gICAgICAgIHRoaXMuY29uZmlnLnZpc0NvbmZpZ1tpdGVtXSA9IExBWUVSX1ZJU19DT05GSUdTW2xheWVyVmlzQ29uZmlnc1tpdGVtXV0uZGVmYXVsdFZhbHVlO1xuICAgICAgICB0aGlzLnZpc0NvbmZpZ1NldHRpbmdzW2l0ZW1dID0gTEFZRVJfVklTX0NPTkZJR1NbbGF5ZXJWaXNDb25maWdzW2l0ZW1dXTtcbiAgICAgIH0gZWxzZSBpZiAoWyd0eXBlJywgJ2RlZmF1bHRWYWx1ZSddLmV2ZXJ5KHAgPT4gbGF5ZXJWaXNDb25maWdzW2l0ZW1dLmhhc093blByb3BlcnR5KHApKSkge1xuICAgICAgICAvLyBpZiBwcm92aWRlZCBjdXN0b21pemVkIHZpc0NvbmZpZywgYW5kIGhhcyB0eXBlICYmIGRlZmF1bHRWYWx1ZVxuICAgICAgICAvLyBUT0RPOiBmdXJ0aGVyIGNoZWNrIGlmIGN1c3RvbWl6ZWQgdmlzQ29uZmlnIGlzIHZhbGlkXG4gICAgICAgIHRoaXMuY29uZmlnLnZpc0NvbmZpZ1tpdGVtXSA9IGxheWVyVmlzQ29uZmlnc1tpdGVtXS5kZWZhdWx0VmFsdWU7XG4gICAgICAgIHRoaXMudmlzQ29uZmlnU2V0dGluZ3NbaXRlbV0gPSBsYXllclZpc0NvbmZpZ3NbaXRlbV07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXRMYXllckNvbHVtbnMoKSB7XG4gICAgY29uc3QgY29sdW1uVmFsaWRhdG9ycyA9IHRoaXMuY29sdW1uVmFsaWRhdG9ycyB8fCB7fTtcbiAgICBjb25zdCByZXF1aXJlZCA9IHRoaXMucmVxdWlyZWRMYXllckNvbHVtbnMucmVkdWNlKFxuICAgICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgW2tleV06IGNvbHVtblZhbGlkYXRvcnNba2V5XVxuICAgICAgICAgID8ge3ZhbHVlOiBudWxsLCBmaWVsZElkeDogLTEsIHZhbGlkYXRvcjogY29sdW1uVmFsaWRhdG9yc1trZXldfVxuICAgICAgICAgIDoge3ZhbHVlOiBudWxsLCBmaWVsZElkeDogLTF9XG4gICAgICB9KSxcbiAgICAgIHt9XG4gICAgKTtcbiAgICBjb25zdCBvcHRpb25hbCA9IHRoaXMub3B0aW9uYWxDb2x1bW5zLnJlZHVjZShcbiAgICAgIChhY2N1LCBrZXkpID0+ICh7XG4gICAgICAgIC4uLmFjY3UsXG4gICAgICAgIFtrZXldOiB7dmFsdWU6IG51bGwsIGZpZWxkSWR4OiAtMSwgb3B0aW9uYWw6IHRydWV9XG4gICAgICB9KSxcbiAgICAgIHt9XG4gICAgKTtcblxuICAgIHJldHVybiB7Li4ucmVxdWlyZWQsIC4uLm9wdGlvbmFsfTtcbiAgfVxuXG4gIHVwZGF0ZUxheWVyQ29uZmlnKG5ld0NvbmZpZykge1xuICAgIHRoaXMuY29uZmlnID0gey4uLnRoaXMuY29uZmlnLCAuLi5uZXdDb25maWd9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdXBkYXRlTGF5ZXJWaXNDb25maWcobmV3VmlzQ29uZmlnKSB7XG4gICAgdGhpcy5jb25maWcudmlzQ29uZmlnID0gey4uLnRoaXMuY29uZmlnLnZpc0NvbmZpZywgLi4ubmV3VmlzQ29uZmlnfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHVwZGF0ZUxheWVyQ29sb3JVSShwcm9wLCBuZXdDb25maWcpIHtcbiAgICBjb25zdCB7Y29sb3JVSTogcHJldmlvdXMsIHZpc0NvbmZpZ30gPSB0aGlzLmNvbmZpZztcblxuICAgIGlmICghaXNQbGFpbk9iamVjdChuZXdDb25maWcpIHx8IHR5cGVvZiBwcm9wICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgY29uc3QgY29sb3JVSVByb3AgPSBPYmplY3QuZW50cmllcyhuZXdDb25maWcpLnJlZHVjZSgoYWNjdSwgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5hY2N1LFxuICAgICAgICBba2V5XTogaXNQbGFpbk9iamVjdChhY2N1W2tleV0pICYmIGlzUGxhaW5PYmplY3QodmFsdWUpID8gey4uLmFjY3Vba2V5XSwgLi4udmFsdWV9IDogdmFsdWVcbiAgICAgIH07XG4gICAgfSwgcHJldmlvdXNbcHJvcF0gfHwgREVGQVVMVF9DT0xPUl9VSSk7XG5cbiAgICBjb25zdCBjb2xvclVJID0ge1xuICAgICAgLi4ucHJldmlvdXMsXG4gICAgICBbcHJvcF06IGNvbG9yVUlQcm9wXG4gICAgfTtcblxuICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoe2NvbG9yVUl9KTtcbiAgICAvLyBpZiBjb2xvclVJW3Byb3BdIGlzIGNvbG9yUmFuZ2UuIElmIHR5cGUgaXMgaGV4Q29sb3IgdGhlbiBpdCdzIGFsc28gYSByYW5nZVxuICAgIGNvbnN0IGlzQ29sb3JSYW5nZSA9XG4gICAgICB2aXNDb25maWdbcHJvcF0gJiYgKHZpc0NvbmZpZ1twcm9wXS5jb2xvcnMgfHwgdmlzQ29uZmlnW3Byb3BdLnR5cGUgPT09IGhleENvbG9yKTtcblxuICAgIGlmIChpc0NvbG9yUmFuZ2UpIHtcbiAgICAgIHRoaXMudXBkYXRlQ29sb3JVSUJ5Q29sb3JSYW5nZShuZXdDb25maWcsIHByb3ApO1xuICAgICAgdGhpcy51cGRhdGVDb2xvclJhbmdlQnlDb2xvclVJKG5ld0NvbmZpZywgcHJldmlvdXMsIHByb3ApO1xuICAgICAgdGhpcy51cGRhdGVDdXN0b21QYWxldHRlKG5ld0NvbmZpZywgcHJldmlvdXMsIHByb3ApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdXBkYXRlQ3VzdG9tUGFsZXR0ZShuZXdDb25maWcsIHByZXZpb3VzLCBwcm9wKSB7XG4gICAgaWYgKCFuZXdDb25maWcuY29sb3JSYW5nZUNvbmZpZyB8fCAhbmV3Q29uZmlnLmNvbG9yUmFuZ2VDb25maWcuY3VzdG9tKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qge2NvbG9yVUksIHZpc0NvbmZpZ30gPSB0aGlzLmNvbmZpZztcblxuICAgIGlmICghdmlzQ29uZmlnW3Byb3BdKSByZXR1cm47XG4gICAgY29uc3Qge2NvbG9yc30gPSB2aXNDb25maWdbcHJvcF07XG4gICAgY29uc3QgY3VzdG9tUGFsZXR0ZSA9IHtcbiAgICAgIC4uLmNvbG9yVUlbcHJvcF0uY3VzdG9tUGFsZXR0ZSxcbiAgICAgIG5hbWU6ICdDdXN0b20gUGFsZXR0ZScsXG4gICAgICBjb2xvcnM6IFsuLi5jb2xvcnNdXG4gICAgfTtcbiAgICB0aGlzLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgIGNvbG9yVUk6IHtcbiAgICAgICAgLi4uY29sb3JVSSxcbiAgICAgICAgW3Byb3BdOiB7XG4gICAgICAgICAgLi4uY29sb3JVSVtwcm9wXSxcbiAgICAgICAgICBjdXN0b21QYWxldHRlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogaWYgb3BlbiBkcm9wZG93biBhbmQgcHJvcCBpcyBjb2xvciByYW5nZVxuICAgKiBBdXRvbWF0aWNhbGx5IHNldCBjb2xvclJhbmdlQ29uZmlnJ3Mgc3RlcCwgcmV2ZXJzZWQgYW5kIHR5cGVcbiAgICogQHBhcmFtIHsqfSBuZXdDb25maWdcbiAgICogQHBhcmFtIHsqfSBwcm9wXG4gICAqL1xuICB1cGRhdGVDb2xvclVJQnlDb2xvclJhbmdlKG5ld0NvbmZpZywgcHJvcCkge1xuICAgIGlmICh0eXBlb2YgbmV3Q29uZmlnLnNob3dEcm9wZG93biAhPT0gJ251bWJlcicpIHJldHVybjtcblxuICAgIGNvbnN0IHtjb2xvclVJLCB2aXNDb25maWd9ID0gdGhpcy5jb25maWc7XG4gICAgdGhpcy51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICBjb2xvclVJOiB7XG4gICAgICAgIC4uLmNvbG9yVUksXG4gICAgICAgIFtwcm9wXToge1xuICAgICAgICAgIC4uLmNvbG9yVUlbcHJvcF0sXG4gICAgICAgICAgY29sb3JSYW5nZUNvbmZpZzoge1xuICAgICAgICAgICAgLi4uY29sb3JVSVtwcm9wXS5jb2xvclJhbmdlQ29uZmlnLFxuICAgICAgICAgICAgdHlwZTogdmlzQ29uZmlnW3Byb3BdLnR5cGUsXG4gICAgICAgICAgICBzdGVwczogdmlzQ29uZmlnW3Byb3BdLmNvbG9ycz8ubGVuZ3RoLFxuICAgICAgICAgICAgcmV2ZXJzZWQ6IEJvb2xlYW4odmlzQ29uZmlnW3Byb3BdLnJldmVyc2VkKSxcbiAgICAgICAgICAgIGhleENvbHVtbjogdGhpcy5nZXRIZXhDb2x1bW4ocHJvcCksXG4gICAgICAgICAgICBpc0hleENvbHVtbjogdGhpcy5pc0NvbG9yZWRCeUNvbG9yQ29sdW1uKHByb3ApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuICB1cGRhdGVDb2xvclJhbmdlQnlDb2xvclVJKG5ld0NvbmZpZywgcHJldmlvdXMsIHByb3ApIHtcbiAgICAvLyBvbmx5IHVwZGF0ZSBjb2xvclJhbmdlIGlmIGNoYW5nZXMgaW4gVUkgaXMgbWFkZSB0byAncmV2ZXJzZWQnLCAnc3RlcHMnIG9yIHN0ZXBzXG4gICAgY29uc3Qgc2hvdWxkVXBkYXRlID1cbiAgICAgIG5ld0NvbmZpZy5jb2xvclJhbmdlQ29uZmlnICYmXG4gICAgICBbJ3JldmVyc2VkJywgJ3N0ZXBzJ10uc29tZShcbiAgICAgICAga2V5ID0+XG4gICAgICAgICAgbmV3Q29uZmlnLmNvbG9yUmFuZ2VDb25maWcuaGFzT3duUHJvcGVydHkoa2V5KSAmJlxuICAgICAgICAgIG5ld0NvbmZpZy5jb2xvclJhbmdlQ29uZmlnW2tleV0gIT09XG4gICAgICAgICAgICAocHJldmlvdXNbcHJvcF0gfHwgREVGQVVMVF9DT0xPUl9VSSkuY29sb3JSYW5nZUNvbmZpZ1trZXldXG4gICAgICApO1xuICAgIGlmICghc2hvdWxkVXBkYXRlKSByZXR1cm47XG5cbiAgICBjb25zdCB7Y29sb3JVSSwgdmlzQ29uZmlnfSA9IHRoaXMuY29uZmlnO1xuICAgIGNvbnN0IHtzdGVwcywgcmV2ZXJzZWR9ID0gY29sb3JVSVtwcm9wXS5jb2xvclJhbmdlQ29uZmlnO1xuICAgIGNvbnN0IGNvbG9yUmFuZ2UgPSB2aXNDb25maWdbcHJvcF07XG4gICAgLy8gZmluZCBiYXNlZCBvbiBzdGVwIG9yIHJldmVyc2VkXG4gICAgbGV0IHVwZGF0ZTtcbiAgICBpZiAobmV3Q29uZmlnLmNvbG9yUmFuZ2VDb25maWcuaGFzT3duUHJvcGVydHkoJ3N0ZXBzJykpIHtcbiAgICAgIGNvbnN0IGdyb3VwID0gZ2V0Q29sb3JHcm91cEJ5TmFtZShjb2xvclJhbmdlKTtcblxuICAgICAgaWYgKGdyb3VwKSB7XG4gICAgICAgIGNvbnN0IHNhbWVHcm91cCA9IENPTE9SX1JBTkdFUy5maWx0ZXIoY3IgPT4gZ2V0Q29sb3JHcm91cEJ5TmFtZShjcikgPT09IGdyb3VwKTtcblxuICAgICAgICB1cGRhdGUgPSBzYW1lR3JvdXAuZmluZChjciA9PiBjci5jb2xvcnMubGVuZ3RoID09PSBzdGVwcyk7XG5cbiAgICAgICAgaWYgKHVwZGF0ZSAmJiBjb2xvclJhbmdlLnJldmVyc2VkKSB7XG4gICAgICAgICAgdXBkYXRlID0gcmV2ZXJzZUNvbG9yUmFuZ2UodHJ1ZSwgdXBkYXRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1cGRhdGUgJiYgY29sb3JSYW5nZS5jb2xvck1hcCkge1xuICAgICAgICAgIHVwZGF0ZSA9IHRoaXMudXBkYXRlQ29sb3JNYXAocHJvcCwgY29sb3JSYW5nZS5jb2xvck1hcCwgdXBkYXRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChuZXdDb25maWcuY29sb3JSYW5nZUNvbmZpZy5oYXNPd25Qcm9wZXJ0eSgncmV2ZXJzZWQnKSkge1xuICAgICAgdXBkYXRlID0gcmV2ZXJzZUNvbG9yUmFuZ2UocmV2ZXJzZWQsIHVwZGF0ZSB8fCBjb2xvclJhbmdlKTtcbiAgICB9XG5cbiAgICBpZiAodXBkYXRlKSB7XG4gICAgICB0aGlzLnVwZGF0ZUxheWVyVmlzQ29uZmlnKHtbcHJvcF06IHVwZGF0ZX0pO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUNvbG9yTWFwKHByb3AsIGNvbG9yTWFwLCBjb2xvclJhbmdlKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IHtmaWVsZCwgZG9tYWlufSA9IE9iamVjdC52YWx1ZXModGhpcy52aXN1YWxDaGFubmVscykuZmluZCh2YWx1ZSA9PiB2YWx1ZS5yYW5nZSA9PT0gcHJvcCk7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuY29uZmlnW2ZpZWxkXT8udHlwZTtcblxuICAgIGlmICh0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlID09PSAnYm9vbGVhbicgfHwgdHlwZSA9PT0gJ2RhdGUnKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVDYXRlZ29yeUNvbG9yTWFwKGNvbG9yTWFwLCB0aGlzLmNvbmZpZ1tkb21haW5dLCBjb2xvclJhbmdlKTtcbiAgICB9XG5cbiAgICAvLyBJZiBubyB0eXBlIG9yIHR5cGUgaXMgbm90IHN0cmluZywgYm9vbGVhbiBvciBkYXRlXG4gICAgcmV0dXJuIHRoaXMudXBkYXRlTnVtZXJpY0NvbG9yTWFwKGNvbG9yTWFwLCB0aGlzLmNvbmZpZ1tkb21haW5dLCBjb2xvclJhbmdlKTtcbiAgfVxuXG4gIHVwZGF0ZUNhdGVnb3J5Q29sb3JNYXAoY29sb3JNYXAsIGRvbWFpbiwgY29sb3JSYW5nZSkge1xuICAgIGNvbnN0IGNvbG9ycyA9IGNvbG9yUmFuZ2UuY29sb3JzO1xuICAgIGNvbnN0IGFzc2lnbmVkQ2F0ZWdvcmllcyA9IFtdO1xuICAgIGlmIChjb2xvclJhbmdlLnR5cGUgPT09IGhleENvbG9yKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5jb2xvclJhbmdlLFxuICAgICAgICBjb2xvck1hcDogW11cbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IG5ld0NvbG9yTWFwID0gY29sb3JNYXAuc2xpY2UoMCwgY29sb3JzLmxlbmd0aCkubWFwKChjTWFwLCBpbmRleCkgPT4ge1xuICAgICAgYXNzaWduZWRDYXRlZ29yaWVzLnB1c2goY01hcFswXSk7XG4gICAgICByZXR1cm4gW2NNYXBbMF0sIGNvbG9yc1tpbmRleF1dO1xuICAgIH0pO1xuICAgIGNvbnN0IHVuYXNzaWduZWRDb2xvcnMgPSBjb2xvcnMuc2xpY2UobmV3Q29sb3JNYXAubGVuZ3RoLCBjb2xvcnMubGVuZ3RoKTtcblxuICAgIGZvciAoY29uc3QgY29sb3Igb2YgdW5hc3NpZ25lZENvbG9ycykge1xuICAgICAgY29uc3QgY2F0ZWdvcnkgPSBkb21haW4uZmluZChkID0+ICFhc3NpZ25lZENhdGVnb3JpZXMuaW5jbHVkZXMoZCkpO1xuICAgICAgaWYgKCFjYXRlZ29yeSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGFzc2lnbmVkQ2F0ZWdvcmllcy5wdXNoKGNhdGVnb3J5KTtcbiAgICAgIG5ld0NvbG9yTWFwLnB1c2goW2NhdGVnb3J5LCBjb2xvcl0pO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgLi4uY29sb3JSYW5nZSxcbiAgICAgIGNvbG9yTWFwOiBuZXdDb2xvck1hcFxuICAgIH07XG4gIH1cblxuICB1cGRhdGVOdW1lcmljQ29sb3JNYXAoY29sb3JNYXAsIGRvbWFpbiwgdXBkYXRlKSB7XG4gICAgY29uc3QgY29sb3JzID0gdXBkYXRlLmNvbG9ycztcbiAgICBsZXQgbmV3Q29sb3JNYXAgPSBjb2xvck1hcC5zbGljZSgwLCBjb2xvcnMubGVuZ3RoKTtcblxuICAgIG5ld0NvbG9yTWFwID0gbmV3Q29sb3JNYXAubWFwKChjTWFwLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBpbmRleCA9PT0gbmV3Q29sb3JNYXAubGVuZ3RoIC0gMSA/IG51bGwgOiBjTWFwWzBdO1xuICAgICAgcmV0dXJuIFt2YWx1ZSwgY29sb3JzW2luZGV4XV07XG4gICAgfSk7XG4gICAgY29uc3QgdW5hc3NpZ25lZENvbG9ycyA9IGNvbG9ycy5zbGljZShuZXdDb2xvck1hcC5sZW5ndGgsIGNvbG9ycy5sZW5ndGgpO1xuXG4gICAgaWYgKHVuYXNzaWduZWRDb2xvcnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgY29sb3JNYXBWYWx1ZXMgPSBjb2xvck1hcC5tYXAoYyA9PiBjWzBdKS5maWx0ZXIoYyA9PiB0eXBlb2YgYyA9PT0gJ251bWJlcicpO1xuICAgICAgY29uc3QgbWF4VmFsdWUgPSBNYXRoLm1heCguLi5jb2xvck1hcFZhbHVlcywgZG9tYWluW2RvbWFpbi5sZW5ndGggLSAxXSk7XG4gICAgICBjb25zdCBwcmV2VmFsdWUgPSBuZXdDb2xvck1hcFtuZXdDb2xvck1hcC5sZW5ndGggLSAyXVswXTtcbiAgICAgIGNvbnN0IHN0ZXAgPSAobWF4VmFsdWUgLSBwcmV2VmFsdWUpIC8gKHVuYXNzaWduZWRDb2xvcnMubGVuZ3RoICsgMSk7XG4gICAgICBuZXdDb2xvck1hcFtuZXdDb2xvck1hcC5sZW5ndGggLSAxXVswXSA9IHByZXZWYWx1ZSArIHN0ZXA7XG5cbiAgICAgIGZvciAoY29uc3QgW2ksIGNvbG9yXSBvZiB1bmFzc2lnbmVkQ29sb3JzLmVudHJpZXMoKSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGkgPT09IHVuYXNzaWduZWRDb2xvcnMubGVuZ3RoIC0gMSA/IG51bGwgOiBwcmV2VmFsdWUgKyAoc3RlcCAqIChpICsgMikpO1xuICAgICAgICBuZXdDb2xvck1hcC5wdXNoKFt2YWx1ZSwgY29sb3JdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnVwZGF0ZSxcbiAgICAgIGNvbG9yTWFwOiBuZXdDb2xvck1hcFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciBsYXllciBoYXMgYWxsIGNvbHVtbnNcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHllcyBvciBub1xuICAgKi9cbiAgaGFzQWxsQ29sdW1ucygpIHtcbiAgICBjb25zdCB7Y29sdW1uc30gPSB0aGlzLmNvbmZpZztcbiAgICByZXR1cm4gKFxuICAgICAgKGNvbHVtbnMgJiZcbiAgICAgIE9iamVjdC52YWx1ZXMoY29sdW1ucykuZXZlcnkodiA9PiB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKHYub3B0aW9uYWwgfHwgKHYudmFsdWUgJiYgdi5maWVsZElkeCA+IC0xKSk7XG4gICAgICB9KSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgbGF5ZXIgaGFzIGRhdGFcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSB8IE9iamVjdH0gbGF5ZXJEYXRhXG4gICAqIEByZXR1cm5zIHtib29sZWFufSB5ZXMgb3Igbm9cbiAgICovXG4gIGhhc0xheWVyRGF0YShsYXllckRhdGEpIHtcbiAgICBpZiAoIWxheWVyRGF0YSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gQm9vbGVhbihsYXllckRhdGEuZGF0YSAmJiBsYXllckRhdGEuZGF0YS5sZW5ndGgpO1xuICB9XG5cbiAgaXNWYWxpZFRvU2F2ZSgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlICYmIHRoaXMuaGFzQWxsQ29sdW1ucygpO1xuICB9XG5cbiAgc2hvdWxkUmVuZGVyTGF5ZXIoZGF0YSkge1xuICAgIHJldHVybiAoXG4gICAgICAodGhpcy50eXBlICYmXG4gICAgICB0aGlzLmhhc0FsbENvbHVtbnMoKSAmJlxuICAgICAgdGhpcy5oYXNMYXllckRhdGEoZGF0YSkgJiZcbiAgICAgIHR5cGVvZiB0aGlzLnJlbmRlckxheWVyID09PSAnZnVuY3Rpb24nKVxuICAgICk7XG4gIH1cblxuICBnZXRDb2xvclNjYWxlKGNvbG9yU2NhbGUsIGNvbG9yRG9tYWluLCBjb2xvclJhbmdlKSB7XG4gICAgaWYgKGNvbG9yUmFuZ2UudHlwZSA9PT0gaGV4Q29sb3IpIHtcbiAgICAgIHJldHVybiAoXywgY29sb3IpID0+IHtcbiAgICAgICAgY29uc3Qge3IsIGcsIGJ9ID0gcmdiKGNvbG9yKTtcbiAgICAgICAgcmV0dXJuIFtyLCBnLCBiXS5zb21lKGlzTmFOKSA/IFVOS05PV05fQ09MT1IgOiBbciwgZywgYl07XG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShjb2xvclJhbmdlLmNvbG9yTWFwKSkge1xuICAgICAgY29uc3QgY01hcCA9IG5ldyBNYXAoKTtcbiAgICAgIGNvbG9yUmFuZ2UuY29sb3JNYXAuZm9yRWFjaCgoW2ssIHZdKSA9PiB7XG4gICAgICAgIGNNYXAuc2V0KGssIHR5cGVvZiB2ID09PSAnc3RyaW5nJyA/IGhleFRvUmdiKHYpIDogdik7XG4gICAgICB9KTtcblxuICAgICAgLy8gQHRzLWlnbm9yZSBkMyBzY2FsZVxuICAgICAgY29uc3Qgc2NhbGUgPSBTQ0FMRV9GVU5DW2NvbG9yU2NhbGVdKClcbiAgICAgICAgLmRvbWFpbihBcnJheS5mcm9tKGNNYXAua2V5cygpKSlcbiAgICAgICAgLnJhbmdlKEFycmF5LmZyb20oY01hcC52YWx1ZXMoKSkpXG4gICAgICAgIC51bmtub3duKFVOS05PV05fQ09MT1IpO1xuICAgICAgcmV0dXJuIHNjYWxlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldFZpc0NoYW5uZWxTY2FsZShjb2xvclNjYWxlLCBjb2xvckRvbWFpbiwgY29sb3JSYW5nZS5jb2xvcnMubWFwKGhleFRvUmdiKSk7XG4gIH1cblxuICBnZXRDdXN0b21NYXJrZXJzU2NhbGUocmFuZ2UsIGZhbGxiYWNrSWNvbikge1xuICAgIGxldCB1bmtub3duVmFsdWUgPSBmYWxsYmFja0ljb24gfHwgRkFMTEJBQ0tfSUNPTjtcbiAgICBpZiAoIXJhbmdlKSB7XG4gICAgICByZXR1cm4gKCkgPT4gdW5rbm93blZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0IG1hcHBpbmcgPSBuZXcgTWFwKCk7XG5cbiAgICBpZiAocmFuZ2Uub3RoZXJzTWFya2VyKSB7XG4gICAgICB1bmtub3duVmFsdWUgPSByYW5nZS5vdGhlcnNNYXJrZXI7XG4gICAgfVxuICAgIGZvciAoY29uc3Qge3ZhbHVlLCBtYXJrZXJVcmx9IG9mIHJhbmdlLm1hcmtlck1hcCkge1xuICAgICAgaWYgKG1hcmtlclVybCkge1xuICAgICAgICBtYXBwaW5nLnNldCh2YWx1ZSwgbWFya2VyVXJsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBAdHMtaWdub3JlIGQzIHNjYWxlXG4gICAgY29uc3Qgc2NhbGUgPSBzY2FsZU9yZGluYWwoKVxuICAgICAgLmRvbWFpbihBcnJheS5mcm9tKG1hcHBpbmcua2V5cygpKSlcbiAgICAgIC5yYW5nZShBcnJheS5mcm9tKG1hcHBpbmcudmFsdWVzKCkpKVxuICAgICAgLnVua25vd24odW5rbm93blZhbHVlKTtcbiAgICByZXR1cm4gc2NhbGU7XG4gIH1cblxuICAvKipcbiAgICogTWFwcGluZyBmcm9tIHZpc3VhbCBjaGFubmVscyB0byBkZWNrLmdsIGFjY2Vzb3JzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbSBQYXJhbWV0ZXJzXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHBhcmFtLmRhdGFBY2Nlc3NvciBBY2Nlc3Mga2VwbGVyLmdsIGxheWVyIGRhdGEgZnJvbSBkZWNrLmdsIGxheWVyXG4gICAqIEBwYXJhbSB7aW1wb3J0KCd1dGlscy90YWJsZS11dGlscy9kYXRhLWNvbnRhaW5lci1pbnRlcmZhY2UnKS5EYXRhQ29udGFpbmVySW50ZXJmYWNlfSBwYXJhbS5kYXRhQ29udGFpbmVyIERhdGFDb250YWluZXIgdG8gdXNlIHVzZSB3aXRoIGRhdGFBY2Nlc3NvclxuICAgKiBAcmV0dXJuIHtPYmplY3R9IGF0dHJpYnV0ZUFjY2Vzc29ycyAtIGRlY2suZ2wgbGF5ZXIgYXR0cmlidXRlIGFjY2Vzc29yc1xuICAgKi9cbiAgZ2V0QXR0cmlidXRlQWNjZXNzb3JzKHtkYXRhQWNjZXNzb3IgPSBkZWZhdWx0RGF0YUFjY2Vzc29yLCBkYXRhQ29udGFpbmVyfSkge1xuICAgIGNvbnN0IGF0dHJpYnV0ZUFjY2Vzc29ycyA9IHt9O1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbiAgICBPYmplY3Qua2V5cyh0aGlzLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKGNoYW5uZWwgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBmaWVsZCxcbiAgICAgICAgZml4ZWQsXG4gICAgICAgIHNjYWxlLFxuICAgICAgICBkb21haW4sXG4gICAgICAgIHJhbmdlLFxuICAgICAgICBhY2Nlc3NvcixcbiAgICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgICBnZXRBdHRyaWJ1dGVWYWx1ZSxcbiAgICAgICAgbnVsbFZhbHVlLFxuICAgICAgICBjaGFubmVsU2NhbGVUeXBlLFxuICAgICAgICBhZ2dyZWdhdGlvblxuICAgICAgfSA9IHRoaXMudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF07XG5cbiAgICAgIGNvbnN0IHNob3VsZEdldFNjYWxlID0gQm9vbGVhbihcbiAgICAgICAgKHNjYWxlIHx8IGNoYW5uZWxTY2FsZVR5cGUgPT09IENIQU5ORUxfU0NBTEVTLmlkZW50aXR5KSAmJiB0aGlzLmNvbmZpZ1tmaWVsZF1cbiAgICAgICk7XG5cbiAgICAgIGlmIChzaG91bGRHZXRTY2FsZSkge1xuICAgICAgICBjb25zdCBhcmdzID0gW3RoaXMuY29uZmlnW3NjYWxlXSwgdGhpcy5jb25maWdbZG9tYWluXSwgdGhpcy5jb25maWcudmlzQ29uZmlnW3JhbmdlXV07XG4gICAgICAgIGNvbnN0IGlzRml4ZWQgPSBmaXhlZCAmJiB0aGlzLmNvbmZpZy52aXNDb25maWdbZml4ZWRdO1xuICAgICAgICAvLyBJdCdzIGltcG9ydGFudCB0byBkZWNsYXJlIGFzIGNvbnN0IGFsbCB0aGUgcGFyYW1ldGVycyB0aGF0IHdlIGFyZSBnb2luZyB0byBiZSB1c2UgaW4gdGhlIGdldEVuY29kZWRDaGFubmVsVmFsdWUgY2FsbFxuICAgICAgICAvLyBvdGhlcndpc2UsIHRoZSBvbGRMYXllckRhdGEgcGFyYW1ldGVyIGluIGZvcm1hdExheWVyRGF0YSBtZXRob2Qgd2lsbCBiZSB3cm9uZyAoeW91IGNhbiBjaGVjayB0aGUgZm9ybWF0TGF5ZXJEYXRhIFRpbGVMYXllciBtZXRob2QgaW4gQnVpbGRlciBhcyBleGFtcGxlKVxuICAgICAgICBjb25zdCBmaWVsZENvbmZpZyA9IHRoaXMuY29uZmlnW2ZpZWxkXTtcbiAgICAgICAgY29uc3QgYWdncmVnYXRpb25WYWx1ZSA9IHRoaXMuY29uZmlnLnZpc0NvbmZpZ1thZ2dyZWdhdGlvbl07XG5cbiAgICAgICAgY29uc3Qgc2NhbGVGdW5jdGlvbiA9XG4gICAgICAgICAgY2hhbm5lbFNjYWxlVHlwZSA9PT0gQ0hBTk5FTF9TQ0FMRVMuaWRlbnRpdHlcbiAgICAgICAgICAgID8gc2NhbGVJZGVudGl0eVxuICAgICAgICAgICAgOiBjaGFubmVsU2NhbGVUeXBlID09PSBDSEFOTkVMX1NDQUxFUy5jb2xvclxuICAgICAgICAgICAgPyB0aGlzLmdldENvbG9yU2NhbGUoLi4uYXJncylcbiAgICAgICAgICAgIDogY2hhbm5lbFNjYWxlVHlwZSA9PT0gQ0hBTk5FTF9TQ0FMRVMuY3VzdG9tTWFya2VyXG4gICAgICAgICAgICA/IHRoaXMuZ2V0Q3VzdG9tTWFya2Vyc1NjYWxlKFxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLnZpc0NvbmZpZ1tyYW5nZV0sXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcudmlzQ29uZmlnLmN1c3RvbU1hcmtlcnNVcmxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiB0aGlzLmdldFZpc0NoYW5uZWxTY2FsZSguLi5hcmdzLCBpc0ZpeGVkKTtcblxuICAgICAgICBhdHRyaWJ1dGVBY2Nlc3NvcnNbYWNjZXNzb3JdID0gZCA9PlxuICAgICAgICAgIHRoaXMuZ2V0RW5jb2RlZENoYW5uZWxWYWx1ZSh7XG4gICAgICAgICAgICBjaGFubmVsLFxuICAgICAgICAgICAgZGF0YUNvbnRhaW5lcixcbiAgICAgICAgICAgIHNjYWxlOiBzY2FsZUZ1bmN0aW9uLFxuICAgICAgICAgICAgZGF0YTogZGF0YUFjY2Vzc29yKGRhdGFDb250YWluZXIpKGQpLFxuICAgICAgICAgICAgZmllbGQ6IGZpZWxkQ29uZmlnLFxuICAgICAgICAgICAgX2FnZ3JlZ2F0aW9uOiBhZ2dyZWdhdGlvblZhbHVlLFxuICAgICAgICAgICAgbnVsbFZhbHVlXG4gICAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBnZXRBdHRyaWJ1dGVWYWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBhdHRyaWJ1dGVBY2Nlc3NvcnNbYWNjZXNzb3JdID0gZ2V0QXR0cmlidXRlVmFsdWUodGhpcy5jb25maWcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXR0cmlidXRlQWNjZXNzb3JzW2FjY2Vzc29yXSA9XG4gICAgICAgICAgdHlwZW9mIGRlZmF1bHRWYWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IGRlZmF1bHRWYWx1ZSh0aGlzLmNvbmZpZykgOiBkZWZhdWx0VmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghKGFjY2Vzc29yIGluIGF0dHJpYnV0ZUFjY2Vzc29ycykpIHtcbiAgICAgICAgQ29uc29sZS53YXJuKGBGYWlsZWQgdG8gcHJvdmlkZSBhY2Nlc3NvciBmdW5jdGlvbiBmb3IgJHthY2Nlc3NvciB8fCBjaGFubmVsfWApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGF0dHJpYnV0ZUFjY2Vzc29ycztcbiAgfVxuXG4gIGdldFZpc0NoYW5uZWxTY2FsZShzY2FsZSwgZG9tYWluLCByYW5nZSwgZml4ZWQpIHtcbiAgICBpZiAoc2NhbGUgPT09IFNDQUxFX1RZUEVTLm9yZGluYWwpIHtcbiAgICAgIC8vIEB0cy1pZ25vcmUgZDMtc2NhbGUgdHlwZVxuICAgICAgcmV0dXJuIFNDQUxFX0ZVTkNbc2NhbGVdKClcbiAgICAgICAgLmRvbWFpbihkb21haW4uc2xpY2UoMCwgcmFuZ2UubGVuZ3RoKSlcbiAgICAgICAgLnJhbmdlKHJhbmdlKVxuICAgICAgICAudW5rbm93bihVTktOT1dOX0NPTE9SKTtcbiAgICB9XG5cbiAgICAvLyBmb3IgYGNvdW50YCBhZ2dyZWdhdGlvbiwgd2UgZG9tYWluIGlzIGFjdHVhbGx5IGBbMCwgSW5maW5pdHldYCBzbyBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2VcbiAgICAvLyB0byB1c2UgaXQsIHNvIHNraXAgc3BlY3lmeWluZyB0aGlzIGRvbWFpbnNcbiAgICBjb25zdCBkb21haW5Jc0luZmluaXRlID0gZG9tYWluICYmIChkb21haW5bMF0gPT09IDAgJiYgZG9tYWluWzFdID09PSBJbmZpbml0eSk7XG4gICAgY29uc3Qgc2NhbGVGYWN0b3J5ID0gU0NBTEVfRlVOQ1tmaXhlZCA/ICdsaW5lYXInIDogc2NhbGVdO1xuICAgIC8vIEB0cy1pZ25vcmUgZDMtc2NhbGUgdHlwZVxuICAgIGxldCByZXN1bHQgPSBzY2FsZUZhY3RvcnkoKTtcbiAgICBpZiAoZG9tYWluICYmICFkb21haW5Jc0luZmluaXRlKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQuZG9tYWluKGRvbWFpbik7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQucmFuZ2UoZml4ZWQgPyBkb21haW4gOiByYW5nZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGUgYm91bmRzIG9mIHRoZSBkYXRhLlxuICAgKiBAcGFyYW0ge2ltcG9ydCgndXRpbHMvdGFibGUtdXRpbHMvZGF0YS1jb250YWluZXItaW50ZXJmYWNlJykuRGF0YUNvbnRhaW5lckludGVyZmFjZX0gZGF0YUNvbnRhaW5lciBEYXRhQ29udGFpbmVyIHRvIGNhbGN1bGF0ZSBib3VuZHMgZm9yLlxuICAgKiBAcGFyYW0geyhkOiB7aW5kZXg6IG51bWJlcn0sIGRjOiBpbXBvcnQoJ3V0aWxzL3RhYmxlLXV0aWxzL2RhdGEtY29udGFpbmVyLWludGVyZmFjZScpLkRhdGFDb250YWluZXJJbnRlcmZhY2UpID0+IG51bWJlcltdfSBnZXRQb3NpdGlvbiBBY2Nlc3Mga2VwbGVyLmdsIGxheWVyIGRhdGEgZnJvbSBkZWNrLmdsIGxheWVyXG4gICAqIEByZXR1cm4ge251bWJlcltdfG51bGx9IGJvdW5kcyBvZiB0aGUgZGF0YS5cbiAgICovXG4gIGdldFBvaW50c0JvdW5kcyhkYXRhQ29udGFpbmVyLCBnZXRQb3NpdGlvbikge1xuICAgIC8vIG5vIG5lZWQgdG8gbG9vcCB0aHJvdWdoIHRoZSBlbnRpcmUgZGF0YXNldFxuICAgIC8vIGdldCBhIHNhbXBsZSBvZiBkYXRhIHRvIGNhbGN1bGF0ZSBib3VuZHNcbiAgICBjb25zdCBzYW1wbGVEYXRhID1cbiAgICAgIGRhdGFDb250YWluZXIubnVtUm93cygpID4gTUFYX1NBTVBMRV9TSVpFXG4gICAgICAgID8gZ2V0U2FtcGxlRGF0YShkYXRhQ29udGFpbmVyLCBNQVhfU0FNUExFX1NJWkUpXG4gICAgICAgIDogZGF0YUNvbnRhaW5lcjtcblxuICAgIGNvbnN0IHBvaW50cyA9IHNhbXBsZURhdGEubWFwSW5kZXgoZ2V0UG9zaXRpb24pO1xuXG4gICAgY29uc3QgbGF0Qm91bmRzID0gZ2V0TGF0TG5nQm91bmRzKHBvaW50cywgMSwgWy05MCwgOTBdKTtcbiAgICBjb25zdCBsbmdCb3VuZHMgPSBnZXRMYXRMbmdCb3VuZHMocG9pbnRzLCAwLCBbLTE4MCwgMTgwXSk7XG5cbiAgICBpZiAoIWxhdEJvdW5kcyB8fCAhbG5nQm91bmRzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gW2xuZ0JvdW5kc1swXSwgbGF0Qm91bmRzWzBdLCBsbmdCb3VuZHNbMV0sIGxhdEJvdW5kc1sxXV07XG4gIH1cblxuICBnZXRDaGFuZ2VkVHJpZ2dlcnMoZGF0YVVwZGF0ZVRyaWdnZXJzKSB7XG4gICAgY29uc3QgdHJpZ2dlckNoYW5nZWQgPSBkaWZmVXBkYXRlVHJpZ2dlcnMoZGF0YVVwZGF0ZVRyaWdnZXJzLCB0aGlzLl9vbGREYXRhVXBkYXRlVHJpZ2dlcnMpO1xuICAgIHRoaXMuX29sZERhdGFVcGRhdGVUcmlnZ2VycyA9IGRhdGFVcGRhdGVUcmlnZ2VycztcblxuICAgIHJldHVybiB0cmlnZ2VyQ2hhbmdlZDtcbiAgfVxuXG4gIGdldEVuY29kZWRDaGFubmVsVmFsdWUoe1xuICAgIGNoYW5uZWwsXG4gICAgc2NhbGUsXG4gICAgZGF0YSxcbiAgICBmaWVsZCxcbiAgICBkYXRhQ29udGFpbmVyLFxuICAgIC8vIEluIGJ1aWxkZXIgd2Ugb3ZlcndyaXRlIHRoZSBnZXRWYWx1ZSBmdW5jdGlvbiBhbmQgd2UgdXNlIHRoZSBfYWdncmVnYXRpb24gcGFyYW1ldGVyIGluIHNwYXRpYWwgaW5kZXggbGF5ZXJzIGFzIHRoZSBRdWFka2V5TGF5ZXIuXG4gICAgX2FnZ3JlZ2F0aW9uLFxuICAgIG51bGxWYWx1ZSA9IE5PX1ZBTFVFX0NPTE9SLFxuICAgIGdldFZhbHVlID0gZGVmYXVsdEdldEZpZWxkVmFsdWVcbiAgfSkge1xuICAgIGxldCBjb2xvckNvbHVtblZhbHVlO1xuICAgIGNvbnN0IHt0eXBlfSA9IGZpZWxkO1xuICAgIGNvbnN0IHZhbHVlID0gZ2V0VmFsdWUoZmllbGQsIGRhdGEpO1xuICAgIGNvbnN0IGNoYW5uZWxDb25maWcgPSB0aGlzLmNvbmZpZy52aXNDb25maWdbdGhpcy52aXN1YWxDaGFubmVsc1tjaGFubmVsXS5yYW5nZV07XG4gICAgY29uc3QgY2hhbm5lbEZpZWxkID0gdGhpcy5jb25maWdbdGhpcy52aXN1YWxDaGFubmVsc1tjaGFubmVsXS5maWVsZF07XG5cbiAgICBpZiAoY2hhbm5lbENvbmZpZy50eXBlID09PSBoZXhDb2xvcikge1xuICAgICAgY29uc3QgY29sdW1uRmllbGQgPSB7XG4gICAgICAgIGlkOiBjaGFubmVsRmllbGQuY29sb3JDb2x1bW4sXG4gICAgICAgIG5hbWU6IGNoYW5uZWxGaWVsZC5jb2xvckNvbHVtbixcbiAgICAgICAgZmllbGRJZHg6IGNoYW5uZWxGaWVsZC5jb2xvckNvbHVtbklkeCxcbiAgICAgICAgdmFsdWVBY2Nlc3NvcjogZCA9PiB7XG4gICAgICAgICAgcmV0dXJuIGRhdGFDb250YWluZXIudmFsdWVBdChkLmluZGV4LCBjaGFubmVsRmllbGQuY29sb3JDb2x1bW5JZHgpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjb2xvckNvbHVtblZhbHVlID0gZ2V0VmFsdWUoY29sdW1uRmllbGQsIGRhdGEpO1xuICAgIH0gZWxzZSBpZiAoIW5vdE51bGxvclVuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBudWxsVmFsdWU7XG4gICAgfVxuXG4gICAgbGV0IGF0dHJpYnV0ZVZhbHVlO1xuICAgIGlmICh0eXBlID09PSBBTExfRklFTERfVFlQRVMudGltZXN0YW1wKSB7XG4gICAgICAvLyBzaG91bGRuJ3QgbmVlZCB0byBjb252ZXJ0IGhlcmVcbiAgICAgIC8vIHNjYWxlIEZ1bmN0aW9uIHNob3VsZCB0YWtlIGNhcmUgb2YgaXRcbiAgICAgIGF0dHJpYnV0ZVZhbHVlID0gc2NhbGUobmV3IERhdGUodmFsdWUpLCBjb2xvckNvbHVtblZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXR0cmlidXRlVmFsdWUgPSBzY2FsZSh2YWx1ZSwgY29sb3JDb2x1bW5WYWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKCFub3ROdWxsb3JVbmRlZmluZWQoYXR0cmlidXRlVmFsdWUpKSB7XG4gICAgICBhdHRyaWJ1dGVWYWx1ZSA9IG51bGxWYWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXR0cmlidXRlVmFsdWU7XG4gIH1cblxuICB1cGRhdGVNZXRhKG1ldGEpIHtcbiAgICB0aGlzLm1ldGEgPSB7Li4udGhpcy5tZXRhLCAuLi5tZXRhfTtcbiAgfVxuXG4gIHVwZGF0ZUxheWVyTGVnZW5kKHNldHRpbmdzKSB7XG4gICAgdGhpcy5sZWdlbmRTZXR0aW5ncyA9IHNldHRpbmdzO1xuICB9XG5cbiAgZ2V0RGF0YVVwZGF0ZVRyaWdnZXJzKHtmaWx0ZXJlZEluZGV4LCBpZCwgYWxsRGF0YX0pIHtcbiAgICBjb25zdCB7Y29sdW1uc30gPSB0aGlzLmNvbmZpZztcblxuICAgIHJldHVybiB7XG4gICAgICBnZXREYXRhOiB7ZGF0YXNldElkOiBpZCwgYWxsRGF0YSwgY29sdW1ucywgZmlsdGVyZWRJbmRleH0sXG4gICAgICBnZXRNZXRhOiB7ZGF0YXNldElkOiBpZCwgYWxsRGF0YSwgY29sdW1uc30sXG4gICAgICAuLi4odGhpcy5jb25maWcudGV4dExhYmVsIHx8IFtdKS5yZWR1Y2UoXG4gICAgICAgIChhY2N1LCB0bCwgaSkgPT4gKHtcbiAgICAgICAgICAuLi5hY2N1LFxuICAgICAgICAgIFtgZ2V0TGFiZWxDaGFyYWN0ZXJTZXQtJHtpfWBdOiB0bC5maWVsZCA/IHRsLmZpZWxkLm5hbWUgOiBudWxsXG4gICAgICAgIH0pLFxuICAgICAgICB7fVxuICAgICAgKVxuICAgIH07XG4gIH1cblxuICB1cGRhdGVEYXRhKGRhdGFzZXRzLCBvbGRMYXllckRhdGEpIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLmRhdGFJZCkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBjb25zdCBkYXRhc2V0ID0gdGhpcy5nZXREYXRhc2V0KGRhdGFzZXRzKTtcbiAgICBjb25zdCB7ZGF0YUNvbnRhaW5lcn0gPSBkYXRhc2V0O1xuXG4gICAgdGhpcy51cGRhdGVWaXN1YWxDaGFubmVsRmllbGRzKGRhdGFzZXQpO1xuICAgIHRoaXMudXBkYXRlSGV4Q29sb3JEb21haW4oZGF0YXNldCk7XG5cbiAgICBjb25zdCBnZXRQb3NpdGlvbiA9IHRoaXMuZ2V0UG9zaXRpb25BY2Nlc3NvcihkYXRhQ29udGFpbmVyKTtcbiAgICBjb25zdCBkYXRhVXBkYXRlVHJpZ2dlcnMgPSB0aGlzLmdldERhdGFVcGRhdGVUcmlnZ2VycyhkYXRhc2V0KTtcbiAgICBjb25zdCB0cmlnZ2VyQ2hhbmdlZCA9IHRoaXMuZ2V0Q2hhbmdlZFRyaWdnZXJzKGRhdGFVcGRhdGVUcmlnZ2Vycyk7XG5cbiAgICBpZiAodHJpZ2dlckNoYW5nZWQuZ2V0TWV0YSkge1xuICAgICAgdGhpcy51cGRhdGVMYXllck1ldGEoZGF0YUNvbnRhaW5lciwgZ2V0UG9zaXRpb24pO1xuICAgIH1cblxuICAgIGxldCBkYXRhID0gW107XG5cbiAgICBpZiAoIXRyaWdnZXJDaGFuZ2VkLmdldERhdGEgJiYgb2xkTGF5ZXJEYXRhICYmIG9sZExheWVyRGF0YS5kYXRhKSB7XG4gICAgICAvLyBzYW1lIGRhdGFcbiAgICAgIGRhdGEgPSBvbGRMYXllckRhdGEuZGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0YSA9IHRoaXMuY2FsY3VsYXRlRGF0YUF0dHJpYnV0ZShkYXRhc2V0LCBnZXRQb3NpdGlvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtkYXRhLCB0cmlnZ2VyQ2hhbmdlZH07XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHN0eWxlZCBmaWVsZHMgdG8gbWF0Y2ggb25lcyBmcm9tIG5ldyBkYXRhc2V0LlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YXNldFxuICAgKi9cbiAgdXBkYXRlVmlzdWFsQ2hhbm5lbEZpZWxkcyhkYXRhc2V0KSB7XG4gICAgZm9yIChjb25zdCB7ZmllbGQsIHJhbmdlfSBvZiBPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpKSB7XG4gICAgICBjb25zdCBvbGRGaWVsZCA9IHRoaXMuY29uZmlnW2ZpZWxkXTtcbiAgICAgIGNvbnN0IGlzVXNpbmdIZXhDb2xvckNvZGUgPSB0aGlzLmNvbmZpZy52aXNDb25maWdbcmFuZ2VdLmhleENvbG9yO1xuICAgICAgaWYgKCFvbGRGaWVsZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsZXQgbmV3RGF0YVNldEZpZWxkID0gZGF0YXNldC5maWVsZHMuZmluZChmZCA9PiBmZC5uYW1lID09PSBvbGRGaWVsZC5uYW1lKSB8fCBudWxsO1xuICAgICAgaWYgKGlzVXNpbmdIZXhDb2xvckNvZGUpIHtcbiAgICAgICAgbmV3RGF0YVNldEZpZWxkID0ge1xuICAgICAgICAgIC4uLm5ld0RhdGFTZXRGaWVsZCxcbiAgICAgICAgICBjb2xvckNvbHVtbjogbmV3RGF0YVNldEZpZWxkLmNvbG9yQ29sdW1uIHx8IG9sZEZpZWxkLmNvbG9yQ29sdW1uLFxuICAgICAgICAgIGNvbG9yQ29sdW1uSWR4OiBuZXdEYXRhU2V0RmllbGQuY29sb3JDb2x1bW5JZHggfHwgb2xkRmllbGQuY29sb3JDb2x1bW5JZHhcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoe1tmaWVsZF06IG5ld0RhdGFTZXRGaWVsZH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBoZWxwZXIgZnVuY3Rpb24gdG8gdXBkYXRlIG9uZSBsYXllciBkb21haW4gd2hlbiBzdGF0ZS5kYXRhIGNoYW5nZWRcbiAgICogaWYgc3RhdGUuZGF0YSBjaGFuZ2UgaXMgZHVlIG90IHVwZGF0ZSBmaWx0ZXIsIG5ld0ZpbGVyIHdpbGwgYmUgcGFzc2VkXG4gICAqIGNhbGxlZCBieSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGFcbiAgICogQHBhcmFtIHtPYmplY3R9IGRhdGFzZXRzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBuZXdGaWx0ZXJcbiAgICogQHJldHVybnMge29iamVjdH0gbGF5ZXJcbiAgICovXG4gIHVwZGF0ZUxheWVyRG9tYWluKGRhdGFzZXRzLCBuZXdGaWx0ZXIpIHtcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMuZ2V0RGF0YXNldChkYXRhc2V0cyk7XG4gICAgaWYgKCF0YWJsZSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIE9iamVjdC52YWx1ZXModGhpcy52aXN1YWxDaGFubmVscykuZm9yRWFjaChjaGFubmVsID0+IHtcbiAgICAgIGNvbnN0IHtzY2FsZX0gPSBjaGFubmVsO1xuICAgICAgY29uc3Qgc2NhbGVUeXBlID0gdGhpcy5jb25maWdbc2NhbGVdO1xuXG4gICAgICAvLyBvcmRpbmFsIGRvbWFpbiBpcyBiYXNlZCBvbiBkYXRhQ29udGFpbmVyLCBpZiBvbmx5IGZpbHRlciBjaGFuZ2VkXG4gICAgICAvLyBubyBuZWVkIHRvIHVwZGF0ZSBvcmRpbmFsIGRvbWFpblxuICAgICAgaWYgKCFuZXdGaWx0ZXIgfHwgc2NhbGVUeXBlICE9PSBTQ0FMRV9UWVBFUy5vcmRpbmFsKSB7XG4gICAgICAgIGNvbnN0IHtkb21haW59ID0gY2hhbm5lbDtcbiAgICAgICAgY29uc3QgdXBkYXRlZERvbWFpbiA9IHRoaXMuY2FsY3VsYXRlTGF5ZXJEb21haW4odGFibGUsIGNoYW5uZWwpO1xuICAgICAgICB0aGlzLnVwZGF0ZUxheWVyQ29uZmlnKHtbZG9tYWluXTogdXBkYXRlZERvbWFpbn0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBnZXREYXRhc2V0KGRhdGFzZXRzKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmRhdGFJZCA/IGRhdGFzZXRzW3RoaXMuY29uZmlnLmRhdGFJZF0gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHZpc3VhbCBjaGFubmVsIGZpZWxkIGFuZCBzY2FsZXMgYmFzZWQgb24gc3VwcG9ydGVkIGZpZWxkICYgc2NhbGUgdHlwZVxuICAgKiBAcGFyYW0gY2hhbm5lbFxuICAgKi9cbiAgdmFsaWRhdGVWaXN1YWxDaGFubmVsKGNoYW5uZWwpIHtcbiAgICB0aGlzLnZhbGlkYXRlRmllbGRUeXBlKGNoYW5uZWwpO1xuICAgIHRoaXMudmFsaWRhdGVTY2FsZShjaGFubmVsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBmaWVsZCB0eXBlIGJhc2VkIG9uIGNoYW5uZWxTY2FsZVR5cGVcbiAgICovXG4gIHZhbGlkYXRlRmllbGRUeXBlKGNoYW5uZWwpIHtcbiAgICBjb25zdCB2aXN1YWxDaGFubmVsID0gdGhpcy52aXN1YWxDaGFubmVsc1tjaGFubmVsXTtcbiAgICBjb25zdCB7ZmllbGQsIGNoYW5uZWxTY2FsZVR5cGUsIHN1cHBvcnRlZEZpZWxkVHlwZXN9ID0gdmlzdWFsQ2hhbm5lbDtcblxuICAgIGlmICh0aGlzLmNvbmZpZ1tmaWVsZF0pIHtcbiAgICAgIC8vIGlmIGZpZWxkIGlzIHNlbGVjdGVkLCBjaGVjayBpZiBmaWVsZCB0eXBlIGlzIHN1cHBvcnRlZFxuICAgICAgY29uc3QgY2hhbm5lbFN1cHBvcnRlZEZpZWxkVHlwZXMgPVxuICAgICAgICBzdXBwb3J0ZWRGaWVsZFR5cGVzIHx8IENIQU5ORUxfU0NBTEVfU1VQUE9SVEVEX0ZJRUxEU1tjaGFubmVsU2NhbGVUeXBlXTtcblxuICAgICAgaWYgKCFjaGFubmVsU3VwcG9ydGVkRmllbGRUeXBlcy5pbmNsdWRlcyh0aGlzLmNvbmZpZ1tmaWVsZF0udHlwZSkpIHtcbiAgICAgICAgLy8gZmllbGQgdHlwZSBpcyBub3Qgc3VwcG9ydGVkLCBzZXQgaXQgYmFjayB0byBudWxsXG4gICAgICAgIC8vIHNldCBzY2FsZSBiYWNrIHRvIGRlZmF1bHRcbiAgICAgICAgdGhpcy51cGRhdGVMYXllckNvbmZpZyh7W2ZpZWxkXTogbnVsbH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBzY2FsZSB0eXBlIGJhc2VkIG9uIGFnZ3JlZ2F0aW9uXG4gICAqL1xuICB2YWxpZGF0ZVNjYWxlKGNoYW5uZWwpIHtcbiAgICBjb25zdCB2aXN1YWxDaGFubmVsID0gdGhpcy52aXN1YWxDaGFubmVsc1tjaGFubmVsXTtcbiAgICBjb25zdCB7c2NhbGUsIHJhbmdlfSA9IHZpc3VhbENoYW5uZWw7XG4gICAgaWYgKFxuICAgICAgIXNjYWxlIHx8XG4gICAgICAodGhpcy5pc0NvbG9yZWRCeUNvbG9yQ29sdW1uKHJhbmdlKSAmJiB0aGlzLmNvbmZpZ1tzY2FsZV0gPT09IFNDQUxFX1RZUEVTLmlkZW50aXR5KVxuICAgICkge1xuICAgICAgLy8gdmlzdWFsQ2hhbm5lbCBkb2Vzbid0IGhhdmUgc2NhbGVcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2NhbGVPcHRpb25zID0gdGhpcy5nZXRTY2FsZU9wdGlvbnMoY2hhbm5lbCk7XG4gICAgLy8gY2hlY2sgaWYgY3VycmVudCBzZWxlY3RlZCBzY2FsZSBpc1xuICAgIC8vIHN1cHBvcnRlZCwgaWYgbm90LCBjaGFuZ2UgdG8gZGVmYXVsdFxuICAgIGlmICghc2NhbGVPcHRpb25zLmluY2x1ZGVzKHRoaXMuY29uZmlnW3NjYWxlXSkpIHtcbiAgICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoe1tzY2FsZV06IHNjYWxlT3B0aW9uc1swXX0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc2NhbGUgb3B0aW9ucyBiYXNlZCBvbiBjdXJyZW50IGZpZWxkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjaGFubmVsXG4gICAqIEByZXR1cm5zIHtzdHJpbmdbXX1cbiAgICovXG4gIGdldFNjYWxlT3B0aW9ucyhjaGFubmVsKSB7XG4gICAgY29uc3QgdmlzdWFsQ2hhbm5lbCA9IHRoaXMudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF07XG4gICAgY29uc3Qge2ZpZWxkLCBzY2FsZSwgY2hhbm5lbFNjYWxlVHlwZX0gPSB2aXN1YWxDaGFubmVsO1xuXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnW2ZpZWxkXVxuICAgICAgPyBGSUVMRF9PUFRTW3RoaXMuY29uZmlnW2ZpZWxkXS50eXBlXS5zY2FsZVtjaGFubmVsU2NhbGVUeXBlXVxuICAgICAgOiBbdGhpcy5nZXREZWZhdWx0TGF5ZXJDb25maWcoKVtzY2FsZV1dO1xuICB9XG5cbiAgdXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsKGRhdGFzZXQsIGNoYW5uZWwpIHtcbiAgICBjb25zdCB2aXN1YWxDaGFubmVsID0gdGhpcy52aXN1YWxDaGFubmVsc1tjaGFubmVsXTtcbiAgICB0aGlzLnZhbGlkYXRlVmlzdWFsQ2hhbm5lbChjaGFubmVsKTtcbiAgICAvLyBjYWxjdWxhdGUgbGF5ZXIgY2hhbm5lbCBkb21haW5cbiAgICBjb25zdCB1cGRhdGVkRG9tYWluID0gdGhpcy5jYWxjdWxhdGVMYXllckRvbWFpbihkYXRhc2V0LCB2aXN1YWxDaGFubmVsKTtcbiAgICB0aGlzLnVwZGF0ZUxheWVyQ29uZmlnKHtbdmlzdWFsQ2hhbm5lbC5kb21haW5dOiB1cGRhdGVkRG9tYWlufSk7XG4gIH1cblxuICBnZXRWaXN1YWxDaGFubmVsVXBkYXRlVHJpZ2dlcnMoKSB7XG4gICAgY29uc3QgdXBkYXRlVHJpZ2dlcnMgPSB7fTtcbiAgICBPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2godmlzdWFsQ2hhbm5lbCA9PiB7XG4gICAgICAvLyBmaWVsZCByYW5nZSBzY2FsZSBkb21haW5cbiAgICAgIGNvbnN0IHthY2Nlc3NvciwgZmllbGQsIHNjYWxlLCBkb21haW4sIHJhbmdlLCBkZWZhdWx0VmFsdWUsIGZpeGVkfSA9IHZpc3VhbENoYW5uZWw7XG5cbiAgICAgIHVwZGF0ZVRyaWdnZXJzW2FjY2Vzc29yXSA9IHtcbiAgICAgICAgW2ZpZWxkXTogdGhpcy5jb25maWdbZmllbGRdLFxuICAgICAgICBbc2NhbGVdOiB0aGlzLmNvbmZpZ1tzY2FsZV0sXG4gICAgICAgIFtkb21haW5dOiB0aGlzLmNvbmZpZ1tkb21haW5dLFxuICAgICAgICBbcmFuZ2VdOiB0aGlzLmNvbmZpZy52aXNDb25maWdbcmFuZ2VdLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IHR5cGVvZiBkZWZhdWx0VmFsdWUgPT09ICdmdW5jdGlvbicgPyBkZWZhdWx0VmFsdWUodGhpcy5jb25maWcpIDogZGVmYXVsdFZhbHVlLFxuICAgICAgICAuLi4oZml4ZWQgPyB7W2ZpeGVkXTogdGhpcy5jb25maWcudmlzQ29uZmlnW2ZpeGVkXX0gOiB7fSlcbiAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIHVwZGF0ZVRyaWdnZXJzO1xuICB9XG5cbiAgY2FsY3VsYXRlTGF5ZXJEb21haW4oZGF0YXNldCwgdmlzdWFsQ2hhbm5lbCkge1xuICAgIGNvbnN0IHtzY2FsZX0gPSB2aXN1YWxDaGFubmVsO1xuICAgIGNvbnN0IGZpZWxkID0gdGhpcy5jb25maWdbdmlzdWFsQ2hhbm5lbC5maWVsZF07XG4gICAgaWYgKCFmaWVsZCB8fCAhc2NhbGUpIHtcbiAgICAgIC8vIGlmIGNvbG9yRmllbGQgb3Igc2l6ZUZpZWxkIHdlcmUgc2V0IGJhY2sgdG8gbnVsbFxuICAgICAgcmV0dXJuIGRlZmF1bHREb21haW47XG4gICAgfVxuXG4gICAgY29uc3Qgc2NhbGVUeXBlID0gdGhpcy5jb25maWdbc2NhbGVdO1xuICAgIGNvbnN0IGRhdGFTZXRGaWVsZCA9IGRhdGFzZXQuZmllbGRzLmZpbmQoZiA9PiBmLm5hbWUgPT09IGZpZWxkLm5hbWUpO1xuICAgIGlmICghc2NhbGVUeXBlIHx8ICFkYXRhU2V0RmllbGQpIHtcbiAgICAgIC8vIGlmIG5ldyBkYXRhc2V0IGRvZXNuJ3QgY29udGFpbiBwcmV2aW91c2x5IHNldCBmaWVsZFxuICAgICAgcmV0dXJuIGRlZmF1bHREb21haW47XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGFzZXQuZ2V0Q29sdW1uTGF5ZXJEb21haW4oZGF0YVNldEZpZWxkLCBzY2FsZVR5cGUpIHx8IGRlZmF1bHREb21haW47XG4gIH1cblxuICB1cGRhdGVIZXhDb2xvckRvbWFpbihkYXRhc2V0KSB7XG4gICAgaWYgKCFkYXRhc2V0KSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKGNoYW5uZWwgPT4ge1xuICAgICAgY29uc3QgY2hhbm5lbENvbmZpZyA9IHRoaXMuY29uZmlnLnZpc0NvbmZpZ1tjaGFubmVsLnJhbmdlXTtcbiAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5jb25maWdbY2hhbm5lbC5maWVsZF07XG5cbiAgICAgIGlmIChjaGFubmVsQ29uZmlnPy50eXBlID09PSBoZXhDb2xvciAmJiBmaWVsZD8uY29sb3JDb2x1bW4pIHtcbiAgICAgICAgY29uc3QgZGF0YVNldEZpZWxkID0gZGF0YXNldC5maWVsZHMuZmluZChmID0+IGYubmFtZSA9PT0gZmllbGQuY29sb3JDb2x1bW4pO1xuICAgICAgICBjb25zdCBjb2xvcnMgPSBkYXRhc2V0XG4gICAgICAgICAgLmdldENvbHVtbkxheWVyRG9tYWluKGRhdGFTZXRGaWVsZCwgU0NBTEVfVFlQRVMub3JkaW5hbClcbiAgICAgICAgICAubWFwKGMgPT4gY2hlY2tDb2xvck9yRmFsbGJhY2soYykpO1xuICAgICAgICB0aGlzLnVwZGF0ZUxheWVyVmlzQ29uZmlnKHtcbiAgICAgICAgICBbY2hhbm5lbC5yYW5nZV06IHsuLi5jaGFubmVsQ29uZmlnLCBjb2xvcnN9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBjYWxjdWxhdGVIZXhDb2x1bW5MZWdlbmQoZGF0YXNldHMpIHtcbiAgICBjb25zdCBkYXRhc2V0ID0gdGhpcy5nZXREYXRhc2V0KGRhdGFzZXRzKTtcbiAgICBpZiAoIWRhdGFzZXRzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbGVnZW5kU2V0dGluZ3MgPSBPYmplY3Qua2V5cyh0aGlzLnZpc3VhbENoYW5uZWxzKS5yZWR1Y2UoKGxlZ2VuZHMsIGNoYW5uZWwpID0+IHtcbiAgICAgIGNvbnN0IHtyYW5nZSwgZmllbGQ6IGNoYW5uZWxGaWVsZH0gPSB0aGlzLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdO1xuICAgICAgY29uc3QgY2hhbm5lbENvbmZpZyA9IHRoaXMuY29uZmlnLnZpc0NvbmZpZ1tyYW5nZV07XG4gICAgICBjb25zdCBmaWVsZCA9IHRoaXMuY29uZmlnW2NoYW5uZWxGaWVsZF07XG5cbiAgICAgIGlmIChjaGFubmVsQ29uZmlnPy50eXBlID09PSBoZXhDb2xvciAmJiBmaWVsZD8uY29sb3JDb2x1bW4pIHtcbiAgICAgICAgY29uc3QgZGF0YVNldEZpZWxkID0gZGF0YXNldC5maWVsZHMuZmluZChmID0+IGYubmFtZSA9PT0gZmllbGQuY29sb3JDb2x1bW4pO1xuICAgICAgICBjb25zdCBsZWdlbmQgPSBkYXRhc2V0LmNhbGN1bGF0ZUxlZ2VuZChmaWVsZCwgZGF0YVNldEZpZWxkKTtcbiAgICAgICAgbGVnZW5kc1tjaGFubmVsXSA9IGxlZ2VuZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsZWdlbmRzO1xuICAgIH0sIHt9KTtcbiAgICB0aGlzLnVwZGF0ZUxheWVyTGVnZW5kKGxlZ2VuZFNldHRpbmdzKTtcbiAgfVxuXG4gIGhhc0hvdmVyZWRPYmplY3Qob2JqZWN0SW5mbykge1xuICAgIHJldHVybiB0aGlzLmlzTGF5ZXJIb3ZlcmVkKG9iamVjdEluZm8pICYmIG9iamVjdEluZm8ub2JqZWN0ID8gb2JqZWN0SW5mby5vYmplY3QgOiBudWxsO1xuICB9XG5cbiAgaXNMYXllckhvdmVyZWQob2JqZWN0SW5mbykge1xuICAgIHJldHVybiBvYmplY3RJbmZvPy5waWNrZWQgJiYgb2JqZWN0SW5mbz8ubGF5ZXI/LnByb3BzPy5pZCA9PT0gdGhpcy5pZDtcbiAgfVxuXG4gIGdldFJhZGl1c1NjYWxlQnlab29tKG1hcFN0YXRlKSB7XG4gICAgY29uc3QgcmFkaXVzQ2hhbm5lbCA9IE9iamVjdC52YWx1ZXModGhpcy52aXN1YWxDaGFubmVscykuZmluZCh2YyA9PiB2Yy5wcm9wZXJ0eSA9PT0gJ3JhZGl1cycpO1xuXG4gICAgaWYgKCFyYWRpdXNDaGFubmVsKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICBjb25zdCBmaWVsZCA9IHJhZGl1c0NoYW5uZWwuZmllbGQ7XG4gICAgY29uc3Qge3JhZGl1c30gPSB0aGlzLmNvbmZpZy52aXNDb25maWc7XG5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuICh0aGlzLmNvbmZpZ1tmaWVsZF0gPyAxIDogcmFkaXVzKSAqIHRoaXMuZ2V0Wm9vbUZhY3RvcihtYXBTdGF0ZSk7XG4gIH1cblxuICBnZXRSYWRpdXNTY2FsZSgpIHtcbiAgICBjb25zdCByYWRpdXNDaGFubmVsID0gT2JqZWN0LnZhbHVlcyh0aGlzLnZpc3VhbENoYW5uZWxzKS5maW5kKHZjID0+IHZjLnByb3BlcnR5ID09PSAncmFkaXVzJyk7XG5cbiAgICBpZiAoIXJhZGl1c0NoYW5uZWwgfHwgdGhpcy5jb25maWdbcmFkaXVzQ2hhbm5lbC5maWVsZF0pIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNvbmZpZy52aXNDb25maWcucmFkaXVzO1xuICB9XG5cbiAgZ2V0TWF4TWFya2VyU2l6ZSgpIHtcbiAgICBjb25zdCB7cmFkaXVzRmllbGQsIHNpemVGaWVsZCwgdmlzQ29uZmlnfSA9IHRoaXMuY29uZmlnO1xuICAgIGNvbnN0IHtyYWRpdXNSYW5nZSwgcmFkaXVzfSA9IHZpc0NvbmZpZztcbiAgICBjb25zdCBmaWVsZCA9IHJhZGl1c0ZpZWxkIHx8IHNpemVGaWVsZDtcbiAgICByZXR1cm4gTWF0aC5jZWlsKChmaWVsZCAmJiByYWRpdXNSYW5nZSA/IHJhZGl1c1JhbmdlWzFdIDogcmFkaXVzKSk7XG4gIH1cblxuICBzaG91bGRDYWxjdWxhdGVMYXllckRhdGEocHJvcHMpIHtcbiAgICByZXR1cm4gcHJvcHMuc29tZShwID0+ICF0aGlzLm5vbmVMYXllckRhdGFBZmZlY3RpbmdQcm9wcy5pbmNsdWRlcyhwKSk7XG4gIH1cblxuICBnZXRCcnVzaGluZ0V4dGVuc2lvblByb3BzKGludGVyYWN0aW9uQ29uZmlnLCBicnVzaGluZ1RhcmdldCkge1xuICAgIGNvbnN0IHticnVzaH0gPSBpbnRlcmFjdGlvbkNvbmZpZztcblxuICAgIHJldHVybiB7XG4gICAgICAvLyBicnVzaGluZ1xuICAgICAgYXV0b0hpZ2hsaWdodDogIWJydXNoLmVuYWJsZWQsXG4gICAgICBicnVzaGluZ1JhZGl1czogYnJ1c2guY29uZmlnLnNpemUgKiAxMDAwLFxuICAgICAgYnJ1c2hpbmdUYXJnZXQ6IGJydXNoaW5nVGFyZ2V0IHx8ICdzb3VyY2UnLFxuICAgICAgYnJ1c2hpbmdFbmFibGVkOiBicnVzaC5lbmFibGVkXG4gICAgfTtcbiAgfVxuXG4gIGdldERlZmF1bHREZWNrTGF5ZXJQcm9wcyh7aWR4LCBncHVGaWx0ZXIsIG1hcFN0YXRlLCB2aXNpYmxlLCBtYXNrUG9seWdvbn0pIHtcbiAgICBjb25zdCBtYXNrRXh0ZW5zaW9uUHJvcHMgPSBnZXRNYXNrRXh0ZW5zaW9uUHJvcHMobWFza1BvbHlnb24pO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5tYXNrRXh0ZW5zaW9uUHJvcHMsXG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIGlkeCxcbiAgICAgIGNvb3JkaW5hdGVTeXN0ZW06IENPT1JESU5BVEVfU1lTVEVNLkxOR0xBVCxcbiAgICAgIHBpY2thYmxlOiB0aGlzLmhhc0ludGVyYWN0aXZpdHksXG4gICAgICB3cmFwTG9uZ2l0dWRlOiB0cnVlLFxuICAgICAgcGFyYW1ldGVyczoge2RlcHRoVGVzdDogQm9vbGVhbihtYXBTdGF0ZS5kcmFnUm90YXRlIHx8IHRoaXMuY29uZmlnLnZpc0NvbmZpZy5lbmFibGUzZCl9LFxuICAgICAgaGlkZGVuOiB0aGlzLmNvbmZpZy5oaWRkZW4sXG4gICAgICB2aXNpYmlsaXR5Qnlab29tOiB0aGlzLmNvbmZpZy52aXNpYmlsaXR5Qnlab29tLFxuICAgICAgLy8gdmlzY29uZmlnXG4gICAgICBvcGFjaXR5OiB0aGlzLmNvbmZpZy52aXNDb25maWcub3BhY2l0eSxcbiAgICAgIGhpZ2hsaWdodENvbG9yOiB0aGlzLmNvbmZpZy5oaWdobGlnaHRDb2xvcixcbiAgICAgIC8vIGRhdGEgZmlsdGVyaW5nXG4gICAgICBleHRlbnNpb25zOiBbZGF0YUZpbHRlckV4dGVuc2lvbiwgLi4ubWFza0V4dGVuc2lvblByb3BzLmV4dGVuc2lvbnNdLFxuICAgICAgZmlsdGVyUmFuZ2U6IGdwdUZpbHRlciA/IGdwdUZpbHRlci5maWx0ZXJSYW5nZSA6IHVuZGVmaW5lZCxcbiAgICAgIC8vIGxheWVyIHNob3VsZCBiZSB2aXNpYmxlIGFuZCBpZiBzcGxpdE1hcCwgc2hvd24gaW4gdG8gb25lIG9mIHBhbmVsXG4gICAgICB2aXNpYmxlOiB0aGlzLmNvbmZpZy5pc1Zpc2libGUgJiYgdmlzaWJsZVxuICAgIH07XG4gIH1cblxuICBnZXREZWZhdWx0SG92ZXJMYXllclByb3BzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogYCR7dGhpcy5pZH0taG92ZXJlZGAsXG4gICAgICBwaWNrYWJsZTogZmFsc2UsXG4gICAgICB3cmFwTG9uZ2l0dWRlOiB0cnVlLFxuICAgICAgY29vcmRpbmF0ZVN5c3RlbTogQ09PUkRJTkFURV9TWVNURU0uTE5HTEFUXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlclRleHRMYWJlbExheWVyKFxuICAgIHtnZXRQb3NpdGlvbiwgZ2V0UmFkaXVzLCByYWRpdXNTY2FsZSwgdXBkYXRlVHJpZ2dlcnMsIHNoYXJlZFByb3BzfSxcbiAgICByZW5kZXJPcHRzXG4gICkge1xuICAgIGNvbnN0IHtkYXRhfSA9IHJlbmRlck9wdHM7XG4gICAgY29uc3Qge3RleHRMYWJlbCwgdmlzaWJpbGl0eUJ5Wm9vbX0gPSB0aGlzLmNvbmZpZztcbiAgICBjb25zdCBleHRlbnNpb25zID0gWy4uLnNoYXJlZFByb3BzLmV4dGVuc2lvbnMsIGNvbGxpc2lvbkZpbHRlckV4dGVuc2lvbl07XG5cbiAgICBpZiAoIWRhdGEgfHwgIWRhdGEudGV4dExhYmVscyB8fCAhZGF0YS50ZXh0TGFiZWxzWzBdIHx8ICFkYXRhLnRleHRMYWJlbHNbMF0uZ2V0VGV4dCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IFttYWluTGFiZWwsIHNlY29uZGFyeUxhYmVsXSA9IHRleHRMYWJlbDtcbiAgICBjb25zdCB7XG4gICAgICBhbGlnbm1lbnQsXG4gICAgICBhbmNob3IsXG4gICAgICBjb2xvcjogZ2V0Q29sb3IsXG4gICAgICBmaWVsZDogbWFpbkZpZWxkLFxuICAgICAgb3V0bGluZUNvbG9yLFxuICAgICAgc2l6ZTogc2l6ZVNjYWxlXG4gICAgfSA9IG1haW5MYWJlbDtcbiAgICBjb25zdCB7XG4gICAgICBjb2xvcjogZ2V0U2Vjb25kYXJ5Q29sb3IsXG4gICAgICBmaWVsZDogc2Vjb25kYXJ5RmllbGQsXG4gICAgICBvdXRsaW5lQ29sb3I6IHNlY29uZGFyeU91dGxpbmVDb2xvcixcbiAgICAgIHNpemU6IHNlY29uZGFyeVNpemVTY2FsZVxuICAgIH0gPSBzZWNvbmRhcnlMYWJlbCB8fCB7fTtcblxuICAgIHJldHVybiBbXG4gICAgICBuZXcgUG9pbnRMYWJlbExheWVyKHtcbiAgICAgICAgLi4uc2hhcmVkUHJvcHMsXG5cbiAgICAgICAgLy8gUmVjcmVhdGUgbGF5ZXIgd2hlbiBsYWJlbHMgY2hhbmdlIG90aGVyd2lzZSByZW5kZXJpbmcgYnJlYWtzXG4gICAgICAgIC8vIFRPRE8gY291bGQgYmUgbW9yZSBlZmZpY2llbnQgd2l0aCB1cGRhdGVUcmlnZ2Vycz9cbiAgICAgICAgaWQ6IGAke3RoaXMuaWR9LSR7bWFpbkZpZWxkPy5uYW1lfS0ke3NlY29uZGFyeUZpZWxkPy5uYW1lfS1sYWJlbGAsXG4gICAgICAgIGRhdGE6IGRhdGEuZGF0YSxcbiAgICAgICAgdmlzaWJpbGl0eUJ5Wm9vbSxcbiAgICAgICAgZXh0ZW5zaW9ucyxcblxuICAgICAgICBjaGFyYWN0ZXJTZXQ6ICdhdXRvJyxcbiAgICAgICAgY29sbGlzaW9uRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgY29sbGlzaW9uR3JvdXA6IGAke3RoaXMuaWR9LWxhYmVsc2AsXG5cbiAgICAgICAgZ2V0VGV4dDogZGF0YS50ZXh0TGFiZWxzWzBdLmdldFRleHQsXG4gICAgICAgIGdldENvbG9yLFxuICAgICAgICBzaXplU2NhbGUsXG4gICAgICAgIG91dGxpbmVDb2xvcixcblxuICAgICAgICAuLi4oc2Vjb25kYXJ5RmllbGQgJiYge1xuICAgICAgICAgIGdldFNlY29uZGFyeVRleHQ6IGRhdGEudGV4dExhYmVsc1sxXS5nZXRUZXh0LFxuICAgICAgICAgIGdldFNlY29uZGFyeUNvbG9yLFxuICAgICAgICAgIHNlY29uZGFyeVNpemVTY2FsZSxcbiAgICAgICAgICBzZWNvbmRhcnlPdXRsaW5lQ29sb3JcbiAgICAgICAgfSksXG5cbiAgICAgICAgLy8gUG9zaXRpb25cbiAgICAgICAgZ2V0UG9zaXRpb24sXG4gICAgICAgIGdldFJhZGl1cyxcbiAgICAgICAgcmFkaXVzU2NhbGUsXG4gICAgICAgIGdldFRleHRBbmNob3I6IGFuY2hvcixcbiAgICAgICAgZ2V0QWxpZ25tZW50QmFzZWxpbmU6IGFsaWdubWVudCxcblxuICAgICAgICAvLyBTdHlsZVxuICAgICAgICBmb250RmFtaWx5OiAnSW50ZXIsIHNhbnMnLFxuICAgICAgICBmb250U2V0dGluZ3M6IHtzZGY6IHRydWV9LFxuICAgICAgICBmb250V2VpZ2h0OiA1MDAsXG4gICAgICAgIG91dGxpbmVXaWR0aDogNCxcbiAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgIC8vIHRleHQgd2lsbCBhbHdheXMgc2hvdyBvbiB0b3Agb2YgYWxsIGxheWVyc1xuICAgICAgICAgIGRlcHRoVGVzdDogZmFsc2VcbiAgICAgICAgfSxcblxuICAgICAgICBnZXRGaWx0ZXJWYWx1ZTogZGF0YS5nZXRGaWx0ZXJWYWx1ZSxcbiAgICAgICAgdXBkYXRlVHJpZ2dlcnM6IHtcbiAgICAgICAgICAuLi51cGRhdGVUcmlnZ2VycyxcbiAgICAgICAgICBnZXRUZXh0OiBtYWluRmllbGQ/Lm5hbWUsXG4gICAgICAgICAgZ2V0Q29sb3I6IG1haW5GaWVsZD8uY29sb3IsXG4gICAgICAgICAgZ2V0VGV4dEFuY2hvcjogbWFpbkxhYmVsLmFuY2hvcixcbiAgICAgICAgICBnZXRBbGlnbm1lbnRCYXNlbGluZTogbWFpbkxhYmVsLmFsaWdubWVudCxcbiAgICAgICAgICBnZXRTZWNvbmRhcnlUZXh0OiBzZWNvbmRhcnlGaWVsZD8ubmFtZVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIF07XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGRlY2suZ2wgYEljb25MYXllcmAgXCJhdXRvUGFja1wiIG1vZGUgYWNjZXNzb3IgZm9yIGN1c3RvbSBtYXJrZXJzLlxuICAgKlxuICAgKiBAcGFyYW0geyp9IGljb25VcmxBY2Nlc3NvciBkZWNrLmdsIGFjY2Vzc29yIChvciB2YWx1ZSkgdGhhdCByZXNvbHZlcyB0byBVUkwgb2YgaWNvbiBmb3IgZ2l2ZW4gcm93XG4gICAqIEByZXR1cm5zIGRlY2suZ2wgYWNjZXNzb3IgdGhhdCByZXR1cm5zIFVucGFja2VkSWNvbiByZWFkeSB0byBjb25zdW1lIGJ5IEljb25MYXllclxuICAgKi9cbiAgZ2V0Q3VzdG9tTWFya2VySWNvbkFjY2Vzc29yKGljb25VcmxBY2Nlc3NvciwgbWFzayA9IHRydWUpIHtcbiAgICBjb25zdCBtYXhJY29uU2l6ZSA9IHRoaXMuZ2V0TWF4TWFya2VyU2l6ZSgpO1xuXG4gICAgcmV0dXJuIGQgPT4ge1xuICAgICAgY29uc3Qgd2FudGVkVXJsID1cbiAgICAgICAgKHR5cGVvZiBpY29uVXJsQWNjZXNzb3IgPT09ICdmdW5jdGlvbicpID8gaWNvblVybEFjY2Vzc29yKGQpIDogaWNvblVybEFjY2Vzc29yO1xuICAgICAgY29uc3QgaWNvbk9rID0gQm9vbGVhbih3YW50ZWRVcmwpO1xuICAgICAgbWFzayA9IGljb25PayA/IG1hc2sgOiB0cnVlO1xuICAgICAgY29uc3QgdXJsID0gaWNvbk9rID8gd2FudGVkVXJsIDogRkFMTEJBQ0tfSUNPTjtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBgJHt1cmx9QEAke21heEljb25TaXplfUAke21hc2sgPyAnbScgOiAnYyd9YCxcbiAgICAgICAgdXJsLFxuICAgICAgICB3aWR0aDogbWF4SWNvblNpemUsXG4gICAgICAgIGhlaWdodDogbWF4SWNvblNpemUsXG4gICAgICAgIG1hc2tcbiAgICAgIH07XG4gICAgfTtcbiAgfVxuXG4gIGNhbGN1bGF0ZURhdGFBdHRyaWJ1dGUoa2VwbGVyVGFibGUsIGdldFBvc2l0aW9uKSB7XG4gICAgLy8gaW1wbGVtZW50ZWQgaW4gc3ViY2xhc3Nlc1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHVwZGF0ZUxheWVyTWV0YShkYXRhQ29udGFpbmVyLCBnZXRQb3NpdGlvbikge1xuICAgIC8vIGltcGxlbWVudGVkIGluIHN1YmNsYXNzZXNcbiAgfVxuXG4gIGdldFBvc2l0aW9uQWNjZXNzb3IoZGF0YUNvbnRhaW5lcikge1xuICAgIC8vIGltcGxlbWVudGVkIGluIHN1YmNsYXNzZXNcbiAgICByZXR1cm4gKCkgPT4gbnVsbDtcbiAgfVxuXG4gIGdldEhleENvbHVtbihyYW5nZSkge1xuICAgIGNvbnN0IGZpZWxkID0gT2JqZWN0LnZhbHVlcyh0aGlzLnZpc3VhbENoYW5uZWxzKT8uZmluZCh2YWx1ZSA9PiB2YWx1ZS5yYW5nZSA9PT0gcmFuZ2UpPy5maWVsZDtcbiAgICBpZiAoZmllbGQpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbmZpZ1tmaWVsZF0uY29sb3JDb2x1bW47XG4gICAgfVxuICB9XG5cbiAgaXNDb2xvcmVkQnlDb2xvckNvbHVtbihyYW5nZSkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy52aXNDb25maWdbcmFuZ2VdPy5oZXhDb2xvcjtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBMYXllcjtcbiJdfQ==
1836
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sYXllcnMvYmFzZS1sYXllci5qcyJdLCJuYW1lcyI6WyJnZW5lcmF0ZUNvbG9yIiwiTEFZRVJfSURfTEVOR1RIIiwiRkFMTEJBQ0tfSUNPTiIsIk1BWF9TQU1QTEVfU0laRSIsImRlZmF1bHREb21haW4iLCJkYXRhRmlsdGVyRXh0ZW5zaW9uIiwiRGF0YUZpbHRlckV4dGVuc2lvbiIsImZpbHRlclNpemUiLCJNQVhfR1BVX0ZJTFRFUlMiLCJjb2xsaXNpb25GaWx0ZXJFeHRlbnNpb24iLCJDb2xsaXNpb25GaWx0ZXJFeHRlbnNpb24iLCJkZWZhdWx0RGF0YUFjY2Vzc29yIiwiZGMiLCJkIiwiZGVmYXVsdEdldEZpZWxkVmFsdWUiLCJmaWVsZCIsInZhbHVlQWNjZXNzb3IiLCJzY2FsZUlkZW50aXR5IiwidiIsIk9WRVJMQVlfVFlQRSIsImRlY2tnbCIsIm1hcGJveGdsIiwibGF5ZXJDb2xvcnMiLCJPYmplY3QiLCJ2YWx1ZXMiLCJEYXRhVml6Q29sb3JzIiwibWFwIiwiaGV4VG9SZ2IiLCJpbmRleCIsImxlbmd0aCIsImNvbG9yTWFrZXIiLCJMYXllciIsInByb3BzIiwiaWQiLCJtZXRhIiwibGVnZW5kU2V0dGluZ3MiLCJ2aXNDb25maWdTZXR0aW5ncyIsIl9pbnRlcmFjdGl2aXR5U2V0dGluZ3MiLCJjb25maWciLCJnZXREZWZhdWx0TGF5ZXJDb25maWciLCJjb2x1bW5zIiwiZ2V0TGF5ZXJDb2x1bW5zIiwiRGVmYXVsdExheWVySWNvbiIsInR5cGUiLCJjb2xvciIsInByb3BlcnR5Iiwic2NhbGUiLCJkb21haW4iLCJyYW5nZSIsImtleSIsImNoYW5uZWxTY2FsZVR5cGUiLCJDSEFOTkVMX1NDQUxFUyIsIm51bGxWYWx1ZSIsIk5PX1ZBTFVFX0NPTE9SIiwiZGVmYXVsdFZhbHVlIiwic2l6ZSIsImxhdCIsInBhaXIiLCJmaWVsZFBhaXJLZXkiLCJsbmciLCJsYXQwIiwibG5nMCIsImxhdDEiLCJsbmcxIiwiaW50ZXJhY3Rpdml0eVNldHRpbmdzIiwiQm9vbGVhbiIsImhvdmVyIiwiZmllbGRzIiwiY2xpY2siLCJoYXNUb29sdGlwIiwiZW5hYmxlZCIsImRhdGFJZCIsInZpc2liaWxpdHlCeVpvb20iLCJtaW4iLCJaT09NX0xFVkVMX0xJTUlUUyIsIm1heCIsImxhYmVsIiwiREVGQVVMVF9MQVlFUl9MQUJFTCIsIm5leHQiLCJ2YWx1ZSIsImlzVmlzaWJsZSIsImlzQ29uZmlnQWN0aXZlIiwiaGlnaGxpZ2h0Q29sb3IiLCJERUZBVUxUX0hJR0hMSUdIVF9DT0xPUiIsImhpZGRlbiIsImNvbG9yRmllbGQiLCJjb2xvckRvbWFpbiIsImNvbG9yU2NhbGUiLCJTQ0FMRV9UWVBFUyIsInF1YW50aWxlIiwic2l6ZURvbWFpbiIsInNpemVTY2FsZSIsImxpbmVhciIsInNpemVGaWVsZCIsInJhZGl1c0ZpZWxkIiwidmlzQ29uZmlnIiwidGV4dExhYmVsIiwiREVGQVVMVF9URVhUX0xBQkVMIiwiY29sb3JVSSIsIkRFRkFVTFRfQ09MT1JfVUkiLCJjb2xvclJhbmdlIiwiYW5pbWF0aW9uIiwidmlzdWFsQ2hhbm5lbHMiLCJtZWFzdXJlIiwiZGlzcGxheU5hbWUiLCJuYW1lIiwiZGVmYXVsdE1lYXN1cmUiLCJ1cGRhdGUiLCJmaWVsZElkeCIsImNvbHVtblBhaXJzIiwicGFydG5lcktleSIsInBhcnRuZXJGaWVsZFBhaXJLZXkiLCJ6b29tIiwiem9vbU9mZnNldCIsIk1hdGgiLCJwb3ciLCJlbmFibGVFbGV2YXRpb25ab29tRmFjdG9yIiwiZGF0YXNldHMiLCJmaWx0ZXJlZEluZGV4Iiwib2JqZWN0IiwiZGF0YUNvbnRhaW5lciIsInJvdyIsImNvbmZpZ1RvQ29weSIsInNoYWxsb3dDb3B5IiwiY29uY2F0Iiwibm90VG9Db3B5IiwiZm9yRWFjaCIsImdyb3VwIiwicHVzaCIsImN1cnJlbnRDb25maWciLCJjb3BpZWQiLCJjb3B5TGF5ZXJDb25maWciLCJ1cGRhdGVMYXllckNvbmZpZyIsImtleXMiLCJjaGFubmVsIiwidmFsaWRhdGVWaXN1YWxDaGFubmVsIiwiaW5jbHVkZXMiLCJsYXllclZpc0NvbmZpZ3MiLCJpdGVtIiwiTEFZRVJfVklTX0NPTkZJR1MiLCJldmVyeSIsInAiLCJoYXNPd25Qcm9wZXJ0eSIsImNvbHVtblZhbGlkYXRvcnMiLCJyZXF1aXJlZCIsInJlcXVpcmVkTGF5ZXJDb2x1bW5zIiwicmVkdWNlIiwiYWNjdSIsInZhbGlkYXRvciIsIm9wdGlvbmFsIiwib3B0aW9uYWxDb2x1bW5zIiwibmV3Q29uZmlnIiwibmV3VmlzQ29uZmlnIiwicHJvcCIsInByZXZpb3VzIiwiY29sb3JVSVByb3AiLCJlbnRyaWVzIiwiaXNDb2xvclJhbmdlIiwiY29sb3JzIiwiaGV4Q29sb3IiLCJ1cGRhdGVDb2xvclVJQnlDb2xvclJhbmdlIiwidXBkYXRlQ29sb3JSYW5nZUJ5Q29sb3JVSSIsInVwZGF0ZUN1c3RvbVBhbGV0dGUiLCJjb2xvclJhbmdlQ29uZmlnIiwiY3VzdG9tIiwiY3VzdG9tUGFsZXR0ZSIsInNob3dEcm9wZG93biIsInN0ZXBzIiwicmV2ZXJzZWQiLCJoZXhDb2x1bW4iLCJnZXRIZXhDb2x1bW4iLCJpc0hleENvbHVtbiIsImlzQ29sb3JlZEJ5Q29sb3JDb2x1bW4iLCJzaG91bGRVcGRhdGUiLCJzb21lIiwic2FtZUdyb3VwIiwiQ09MT1JfUkFOR0VTIiwiZmlsdGVyIiwiY3IiLCJmaW5kIiwiY29sb3JNYXAiLCJ1cGRhdGVDb2xvck1hcCIsInVwZGF0ZUxheWVyVmlzQ29uZmlnIiwidXBkYXRlQ2F0ZWdvcnlDb2xvck1hcCIsInVwZGF0ZU51bWVyaWNDb2xvck1hcCIsImFzc2lnbmVkQ2F0ZWdvcmllcyIsIm5ld0NvbG9yTWFwIiwic2xpY2UiLCJjTWFwIiwidW5hc3NpZ25lZENvbG9ycyIsImNhdGVnb3J5IiwiY29sb3JNYXBWYWx1ZXMiLCJjIiwibWF4VmFsdWUiLCJwcmV2VmFsdWUiLCJzdGVwIiwiaSIsImxheWVyRGF0YSIsImRhdGEiLCJoYXNBbGxDb2x1bW5zIiwiaGFzTGF5ZXJEYXRhIiwicmVuZGVyTGF5ZXIiLCJfIiwiciIsImciLCJiIiwiaXNOYU4iLCJVTktOT1dOX0NPTE9SIiwiQXJyYXkiLCJpc0FycmF5IiwiTWFwIiwiayIsInNldCIsIlNDQUxFX0ZVTkMiLCJmcm9tIiwidW5rbm93biIsImdldFZpc0NoYW5uZWxTY2FsZSIsImZhbGxiYWNrSWNvbiIsInVua25vd25WYWx1ZSIsIm1hcHBpbmciLCJvdGhlcnNNYXJrZXIiLCJtYXJrZXJNYXAiLCJtYXJrZXJVcmwiLCJkYXRhQWNjZXNzb3IiLCJhdHRyaWJ1dGVBY2Nlc3NvcnMiLCJmaXhlZCIsImFjY2Vzc29yIiwiZ2V0QXR0cmlidXRlVmFsdWUiLCJhZ2dyZWdhdGlvbiIsInNob3VsZEdldFNjYWxlIiwiaWRlbnRpdHkiLCJhcmdzIiwiaXNGaXhlZCIsImZpZWxkQ29uZmlnIiwiYWdncmVnYXRpb25WYWx1ZSIsInNjYWxlRnVuY3Rpb24iLCJnZXRDb2xvclNjYWxlIiwiY3VzdG9tTWFya2VyIiwiZ2V0Q3VzdG9tTWFya2Vyc1NjYWxlIiwiY3VzdG9tTWFya2Vyc1VybCIsImdldEVuY29kZWRDaGFubmVsVmFsdWUiLCJfYWdncmVnYXRpb24iLCJDb25zb2xlIiwid2FybiIsIm9yZGluYWwiLCJkb21haW5Jc0luZmluaXRlIiwiSW5maW5pdHkiLCJzY2FsZUZhY3RvcnkiLCJyZXN1bHQiLCJnZXRQb3NpdGlvbiIsInNhbXBsZURhdGEiLCJudW1Sb3dzIiwicG9pbnRzIiwibWFwSW5kZXgiLCJsYXRCb3VuZHMiLCJsbmdCb3VuZHMiLCJkYXRhVXBkYXRlVHJpZ2dlcnMiLCJ0cmlnZ2VyQ2hhbmdlZCIsIl9vbGREYXRhVXBkYXRlVHJpZ2dlcnMiLCJnZXRWYWx1ZSIsImNvbG9yQ29sdW1uVmFsdWUiLCJjaGFubmVsQ29uZmlnIiwiY2hhbm5lbEZpZWxkIiwiY29sdW1uRmllbGQiLCJjb2xvckNvbHVtbiIsImNvbG9yQ29sdW1uSWR4IiwidmFsdWVBdCIsImF0dHJpYnV0ZVZhbHVlIiwiQUxMX0ZJRUxEX1RZUEVTIiwidGltZXN0YW1wIiwiRGF0ZSIsInNldHRpbmdzIiwiYWxsRGF0YSIsImdldERhdGEiLCJkYXRhc2V0SWQiLCJnZXRNZXRhIiwidGwiLCJvbGRMYXllckRhdGEiLCJkYXRhc2V0IiwiZ2V0RGF0YXNldCIsInVwZGF0ZVZpc3VhbENoYW5uZWxGaWVsZHMiLCJ1cGRhdGVIZXhDb2xvckRvbWFpbiIsImdldFBvc2l0aW9uQWNjZXNzb3IiLCJnZXREYXRhVXBkYXRlVHJpZ2dlcnMiLCJnZXRDaGFuZ2VkVHJpZ2dlcnMiLCJ1cGRhdGVMYXllck1ldGEiLCJjYWxjdWxhdGVEYXRhQXR0cmlidXRlIiwib2xkRmllbGQiLCJpc1VzaW5nSGV4Q29sb3JDb2RlIiwibmV3RGF0YVNldEZpZWxkIiwiZmQiLCJuZXdGaWx0ZXIiLCJ0YWJsZSIsInNjYWxlVHlwZSIsInVwZGF0ZWREb21haW4iLCJjYWxjdWxhdGVMYXllckRvbWFpbiIsInZhbGlkYXRlRmllbGRUeXBlIiwidmFsaWRhdGVTY2FsZSIsInZpc3VhbENoYW5uZWwiLCJzdXBwb3J0ZWRGaWVsZFR5cGVzIiwiY2hhbm5lbFN1cHBvcnRlZEZpZWxkVHlwZXMiLCJDSEFOTkVMX1NDQUxFX1NVUFBPUlRFRF9GSUVMRFMiLCJzY2FsZU9wdGlvbnMiLCJnZXRTY2FsZU9wdGlvbnMiLCJGSUVMRF9PUFRTIiwidXBkYXRlVHJpZ2dlcnMiLCJkYXRhU2V0RmllbGQiLCJmIiwiZ2V0Q29sdW1uTGF5ZXJEb21haW4iLCJsZWdlbmRzIiwibGVnZW5kIiwiY2FsY3VsYXRlTGVnZW5kIiwidXBkYXRlTGF5ZXJMZWdlbmQiLCJvYmplY3RJbmZvIiwiaXNMYXllckhvdmVyZWQiLCJwaWNrZWQiLCJsYXllciIsIm1hcFN0YXRlIiwicmFkaXVzQ2hhbm5lbCIsInZjIiwicmFkaXVzIiwiZ2V0Wm9vbUZhY3RvciIsInJhZGl1c1JhbmdlIiwiY2VpbCIsIm5vbmVMYXllckRhdGFBZmZlY3RpbmdQcm9wcyIsImludGVyYWN0aW9uQ29uZmlnIiwiYnJ1c2hpbmdUYXJnZXQiLCJicnVzaCIsImF1dG9IaWdobGlnaHQiLCJicnVzaGluZ1JhZGl1cyIsImJydXNoaW5nRW5hYmxlZCIsImlkeCIsImdwdUZpbHRlciIsInZpc2libGUiLCJtYXNrUG9seWdvbiIsIm1hc2tFeHRlbnNpb25Qcm9wcyIsImNvb3JkaW5hdGVTeXN0ZW0iLCJDT09SRElOQVRFX1NZU1RFTSIsIkxOR0xBVCIsInBpY2thYmxlIiwiaGFzSW50ZXJhY3Rpdml0eSIsIndyYXBMb25naXR1ZGUiLCJwYXJhbWV0ZXJzIiwiZGVwdGhUZXN0IiwiZHJhZ1JvdGF0ZSIsImVuYWJsZTNkIiwib3BhY2l0eSIsImV4dGVuc2lvbnMiLCJmaWx0ZXJSYW5nZSIsInVuZGVmaW5lZCIsInJlbmRlck9wdHMiLCJnZXRSYWRpdXMiLCJyYWRpdXNTY2FsZSIsInNoYXJlZFByb3BzIiwidGV4dExhYmVscyIsImdldFRleHQiLCJtYWluTGFiZWwiLCJzZWNvbmRhcnlMYWJlbCIsImFsaWdubWVudCIsImFuY2hvciIsImdldENvbG9yIiwibWFpbkZpZWxkIiwib3V0bGluZUNvbG9yIiwiZ2V0U2Vjb25kYXJ5Q29sb3IiLCJzZWNvbmRhcnlGaWVsZCIsInNlY29uZGFyeU91dGxpbmVDb2xvciIsInNlY29uZGFyeVNpemVTY2FsZSIsIlBvaW50TGFiZWxMYXllciIsImNoYXJhY3RlclNldCIsImNvbGxpc2lvbkVuYWJsZWQiLCJjb2xsaXNpb25Hcm91cCIsImdldFNlY29uZGFyeVRleHQiLCJnZXRUZXh0QW5jaG9yIiwiZ2V0QWxpZ25tZW50QmFzZWxpbmUiLCJmb250RmFtaWx5IiwiZm9udFNldHRpbmdzIiwic2RmIiwiZm9udFdlaWdodCIsIm91dGxpbmVXaWR0aCIsImdldEZpbHRlclZhbHVlIiwiaWNvblVybEFjY2Vzc29yIiwibWFzayIsIm1heEljb25TaXplIiwiZ2V0TWF4TWFya2VyU2l6ZSIsIndhbnRlZFVybCIsImljb25PayIsInVybCIsIndpZHRoIiwiaGVpZ2h0Iiwia2VwbGVyVGFibGUiLCJmb3VuZExheWVycyIsImRlZmF1bHRGaWVsZHMiLCJhbGxGaWVsZHMiLCJyZXF1aXJlZENvbHVtbnMiLCJwcmV2IiwicmVxdWlyZWRGaWVsZHMiLCJnZXRBbGxQb3NzaWJsZUNvbHVtblBhcmlzIiwiYWxsS2V5cyIsInBvaW50ZXJzIiwiY291bnRQZXJLZXkiLCJwYWlycyIsImluY3JlbWVudFBvaW50ZXJzIiwibmV3UGFpciIsImN1dXIiLCJwdHMiLCJjb3VudHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0JBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQVlBOztBQUNBOztBQUNBOztBQVFBOztBQUVBOztBQUNBOztBQUVBOztBQUNBOztBQUNBOzs7Ozs7Ozs7Ozs7d0RBNkJVQSxhOztBQTNCVjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1DLGVBQWUsR0FBRyxDQUF4QixDLENBRVA7OztBQUNBLElBQU1DLGFBQWEsR0FDakIsMExBREY7QUFHQSxJQUFNQyxlQUFlLEdBQUcsSUFBeEI7QUFDQSxJQUFNQyxhQUFhLEdBQUcsQ0FBQyxDQUFELEVBQUksQ0FBSixDQUF0QjtBQUNBLElBQU1DLG1CQUFtQixHQUFHLElBQUlDLCtCQUFKLENBQXdCO0FBQUNDLEVBQUFBLFVBQVUsRUFBRUM7QUFBYixDQUF4QixDQUE1QjtBQUNBLElBQU1DLHdCQUF3QixHQUFHLElBQUlDLG9DQUFKLEVBQWpDOztBQUVBLElBQU1DLG1CQUFtQixHQUFHLFNBQXRCQSxtQkFBc0IsQ0FBQUMsRUFBRTtBQUFBLFNBQUksVUFBQUMsQ0FBQztBQUFBLFdBQUlBLENBQUo7QUFBQSxHQUFMO0FBQUEsQ0FBOUI7O0FBQ0EsSUFBTUMsb0JBQW9CLEdBQUcsU0FBdkJBLG9CQUF1QixDQUFDQyxLQUFELEVBQVFGLENBQVI7QUFBQSxTQUFjRSxLQUFLLENBQUNDLGFBQU4sQ0FBb0JILENBQXBCLENBQWQ7QUFBQSxDQUE3Qjs7QUFDQSxJQUFNSSxhQUFhLEdBQUcsU0FBaEJBLGFBQWdCLENBQUFDLENBQUM7QUFBQSxTQUFJQSxDQUFKO0FBQUEsQ0FBdkI7O0FBRU8sSUFBTUMsWUFBWSxHQUFHLDJCQUFVO0FBQ3BDQyxFQUFBQSxNQUFNLEVBQUUsSUFENEI7QUFFcENDLEVBQUFBLFFBQVEsRUFBRTtBQUYwQixDQUFWLENBQXJCOztBQUtBLElBQU1DLFdBQVcsR0FBR0MsTUFBTSxDQUFDQyxNQUFQLENBQWNDLGdDQUFkLEVBQTZCQyxHQUE3QixDQUFpQ0Msb0JBQWpDLENBQXBCOzs7QUFDUCxTQUFVM0IsYUFBVjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDTTRCLFVBQUFBLEtBRE4sR0FDYyxDQURkOztBQUFBO0FBQUEsZ0JBRVNBLEtBQUssR0FBR04sV0FBVyxDQUFDTyxNQUFaLEdBQXFCLENBRnRDO0FBQUE7QUFBQTtBQUFBOztBQUdJLGNBQUlELEtBQUssS0FBS04sV0FBVyxDQUFDTyxNQUExQixFQUFrQztBQUNoQ0QsWUFBQUEsS0FBSyxHQUFHLENBQVI7QUFDRDs7QUFMTDtBQU1JLGlCQUFNTixXQUFXLENBQUNNLEtBQUssRUFBTixDQUFqQjs7QUFOSjtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBVU8sSUFBTUUsVUFBVSxHQUFHOUIsYUFBYSxFQUFoQztBQUVQOzs7O0lBQ00rQixLO0FBQ0osbUJBQXdCO0FBQUEsUUFBWkMsS0FBWSx1RUFBSixFQUFJO0FBQUE7QUFDdEIsU0FBS0MsRUFBTCxHQUFVRCxLQUFLLENBQUNDLEVBQU4sSUFBWSwyQkFBZWhDLGVBQWYsQ0FBdEIsQ0FEc0IsQ0FFdEI7O0FBQ0EsU0FBS2lDLElBQUwsR0FBWSxFQUFaLENBSHNCLENBS3RCOztBQUNBLFNBQUtDLGNBQUwsR0FBc0IsRUFBdEIsQ0FOc0IsQ0FRdEI7O0FBQ0EsU0FBS0MsaUJBQUwsR0FBeUIsRUFBekIsQ0FUc0IsQ0FXdEI7O0FBQ0EsU0FBS0Msc0JBQUwsR0FBOEIsRUFBOUIsQ0Fac0IsQ0FjdEI7O0FBQ0EsU0FBS0MsTUFBTCxHQUFjLEtBQUtDLHFCQUFMO0FBQ1pDLE1BQUFBLE9BQU8sRUFBRSxLQUFLQyxlQUFMO0FBREcsT0FFVFQsS0FGUyxFQUFkO0FBSUQ7Ozs7U0FFRCxlQUFnQjtBQUNkLGFBQU9VLDRCQUFQO0FBQ0Q7OztTQUVELGVBQWtCO0FBQ2hCLGFBQU92QixZQUFZLENBQUNDLE1BQXBCO0FBQ0Q7OztTQUVELGVBQVc7QUFDVCxhQUFPLElBQVA7QUFDRDs7O1NBRUQsZUFBVztBQUNULGFBQU8sS0FBS3VCLElBQVo7QUFDRDs7O1NBRUQsZUFBbUI7QUFDakIsYUFBTyxLQUFQO0FBQ0Q7OztTQUVELGVBQTJCO0FBQ3pCLGFBQU8sRUFBUDtBQUNEOzs7U0FFRCxlQUFzQjtBQUNwQixhQUFPLEVBQVA7QUFDRDs7O1NBRUQsZUFBa0M7QUFDaEMsYUFBTyxDQUFDLE9BQUQsRUFBVSxTQUFWLEVBQXFCLFdBQXJCLEVBQWtDLFdBQWxDLEVBQStDLFFBQS9DLENBQVA7QUFDRDs7O1NBRUQsZUFBcUI7QUFDbkIsYUFBTztBQUNMQyxRQUFBQSxLQUFLLEVBQUU7QUFDTEMsVUFBQUEsUUFBUSxFQUFFLE9BREw7QUFFTDlCLFVBQUFBLEtBQUssRUFBRSxZQUZGO0FBR0wrQixVQUFBQSxLQUFLLEVBQUUsWUFIRjtBQUlMQyxVQUFBQSxNQUFNLEVBQUUsYUFKSDtBQUtMQyxVQUFBQSxLQUFLLEVBQUUsWUFMRjtBQU1MQyxVQUFBQSxHQUFHLEVBQUUsT0FOQTtBQU9MQyxVQUFBQSxnQkFBZ0IsRUFBRUMsZ0NBQWVQLEtBUDVCO0FBUUxRLFVBQUFBLFNBQVMsRUFBRUMsK0JBUk47QUFTTEMsVUFBQUEsWUFBWSxFQUFFLHNCQUFBaEIsTUFBTTtBQUFBLG1CQUFJQSxNQUFNLENBQUNNLEtBQVg7QUFBQTtBQVRmLFNBREY7QUFZTFcsUUFBQUEsSUFBSSxFQUFFO0FBQ0pWLFVBQUFBLFFBQVEsRUFBRSxNQUROO0FBRUo5QixVQUFBQSxLQUFLLEVBQUUsV0FGSDtBQUdKK0IsVUFBQUEsS0FBSyxFQUFFLFdBSEg7QUFJSkMsVUFBQUEsTUFBTSxFQUFFLFlBSko7QUFLSkMsVUFBQUEsS0FBSyxFQUFFLFdBTEg7QUFNSkMsVUFBQUEsR0FBRyxFQUFFLE1BTkQ7QUFPSkMsVUFBQUEsZ0JBQWdCLEVBQUVDLGdDQUFlSSxJQVA3QjtBQVFKSCxVQUFBQSxTQUFTLEVBQUUsQ0FSUDtBQVNKRSxVQUFBQSxZQUFZLEVBQUU7QUFUVjtBQVpELE9BQVA7QUF3QkQ7QUFFRDtBQUNGO0FBQ0E7QUFDQTs7OztTQUNFLGVBQWtCO0FBQ2hCLGFBQU8sSUFBUDtBQUNEO0FBRUQ7QUFDRjtBQUNBOzs7O1NBQ0UsZUFBOEI7QUFDNUIsYUFBTztBQUNMRSxRQUFBQSxHQUFHLEVBQUU7QUFBQ0MsVUFBQUEsSUFBSSxFQUFFLEtBQVA7QUFBY0MsVUFBQUEsWUFBWSxFQUFFO0FBQTVCLFNBREE7QUFFTEMsUUFBQUEsR0FBRyxFQUFFO0FBQUNGLFVBQUFBLElBQUksRUFBRSxLQUFQO0FBQWNDLFVBQUFBLFlBQVksRUFBRTtBQUE1QjtBQUZBLE9BQVA7QUFJRDtBQUVEO0FBQ0Y7QUFDQTs7OztTQUNFLGVBQTZCO0FBQzNCLGFBQU87QUFDTEUsUUFBQUEsSUFBSSxFQUFFO0FBQUNILFVBQUFBLElBQUksRUFBRSxNQUFQO0FBQWVDLFVBQUFBLFlBQVksRUFBRTtBQUE3QixTQUREO0FBRUxHLFFBQUFBLElBQUksRUFBRTtBQUFDSixVQUFBQSxJQUFJLEVBQUUsTUFBUDtBQUFlQyxVQUFBQSxZQUFZLEVBQUU7QUFBN0IsU0FGRDtBQUdMSSxRQUFBQSxJQUFJLEVBQUU7QUFBQ0wsVUFBQUEsSUFBSSxFQUFFLE1BQVA7QUFBZUMsVUFBQUEsWUFBWSxFQUFFO0FBQTdCLFNBSEQ7QUFJTEssUUFBQUEsSUFBSSxFQUFFO0FBQUNOLFVBQUFBLElBQUksRUFBRSxNQUFQO0FBQWVDLFVBQUFBLFlBQVksRUFBRTtBQUE3QjtBQUpELE9BQVA7QUFNRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztTQUNFLGVBQXFCO0FBQ25CLGFBQU8sSUFBUDtBQUNEOzs7U0FFRCxlQUE0QjtBQUMxQixhQUFPLEtBQUtyQixzQkFBWjtBQUNELEs7U0FFRCxhQUEwQjJCLHFCQUExQixFQUFpRDtBQUMvQyxXQUFLM0Isc0JBQUwsR0FBOEIyQixxQkFBOUI7QUFDRDs7O1NBRUQsZUFBaUI7QUFBQTs7QUFDZixhQUFPQyxPQUFPLENBQ1osK0JBQUtELHFCQUFMLDBHQUE0QkUsS0FBNUIsa0ZBQW1DQyxNQUFuQyxDQUEwQ3RDLE1BQTFDLGdDQUNFLEtBQUttQyxxQkFEUCxxRkFDRSx1QkFBNEJJLEtBRDlCLDJEQUNFLHVCQUFtQ0QsTUFBbkMsQ0FBMEN0QyxNQUQ1QyxDQURZLENBQWQ7QUFJRDs7O1NBRUQsZUFBdUI7QUFBQTs7QUFDckIsYUFBT29DLE9BQU8sQ0FBQyxLQUFLSSxVQUFMLCtCQUFtQixLQUFLTCxxQkFBeEIsMkRBQW1CLHVCQUE0Qk0sT0FBL0MsQ0FBRCxDQUFkO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7O1dBZ0ZFLGlDQUFrQztBQUFBOztBQUFBLFVBQVp0QyxLQUFZLHVFQUFKLEVBQUk7QUFDaEMsYUFBTztBQUNMdUMsUUFBQUEsTUFBTSxFQUFFdkMsS0FBSyxDQUFDdUMsTUFBTixJQUFnQixJQURuQjtBQUVMQyxRQUFBQSxnQkFBZ0IsRUFBRTtBQUNoQkMsVUFBQUEsR0FBRyxFQUFFLDBCQUFBekMsS0FBSyxDQUFDd0MsZ0JBQU4sZ0ZBQXdCQyxHQUF4QixLQUErQkMsbUNBQWtCRCxHQUR0QztBQUVoQkUsVUFBQUEsR0FBRyxFQUFFLDJCQUFBM0MsS0FBSyxDQUFDd0MsZ0JBQU4sa0ZBQXdCRyxHQUF4QixLQUErQkQsbUNBQWtCQztBQUZ0QyxTQUZiO0FBTUxDLFFBQUFBLEtBQUssRUFBRTVDLEtBQUssQ0FBQzRDLEtBQU4sSUFBZUMsaUNBTmpCO0FBT0xqQyxRQUFBQSxLQUFLLEVBQUVaLEtBQUssQ0FBQ1ksS0FBTixJQUFlZCxVQUFVLENBQUNnRCxJQUFYLEdBQWtCQyxLQVBuQztBQVFMdkMsUUFBQUEsT0FBTyxFQUFFUixLQUFLLENBQUNRLE9BQU4sSUFBaUIsSUFSckI7QUFTTHdDLFFBQUFBLFNBQVMsRUFBRWhELEtBQUssQ0FBQ2dELFNBQU4sSUFBbUIsS0FUekI7QUFVTEMsUUFBQUEsY0FBYyxFQUFFakQsS0FBSyxDQUFDaUQsY0FBTixJQUF3QixLQVZuQztBQVdMQyxRQUFBQSxjQUFjLEVBQUVsRCxLQUFLLENBQUNrRCxjQUFOLElBQXdCQyxxQ0FYbkM7QUFZTEMsUUFBQUEsTUFBTSxFQUFFcEQsS0FBSyxDQUFDb0QsTUFBTixJQUFnQixLQVpuQjtBQWNMO0FBQ0E7QUFDQUMsUUFBQUEsVUFBVSxFQUFFLElBaEJQO0FBaUJMQyxRQUFBQSxXQUFXLEVBQUUsQ0FBQyxDQUFELEVBQUksQ0FBSixDQWpCUjtBQWtCTEMsUUFBQUEsVUFBVSxFQUFFQyw2QkFBWUMsUUFsQm5CO0FBb0JMO0FBQ0FDLFFBQUFBLFVBQVUsRUFBRSxDQUFDLENBQUQsRUFBSSxDQUFKLENBckJQO0FBc0JMQyxRQUFBQSxTQUFTLEVBQUVILDZCQUFZSSxNQXRCbEI7QUF1QkxDLFFBQUFBLFNBQVMsRUFBRSxJQXZCTjtBQXdCTEMsUUFBQUEsV0FBVyxFQUFFLElBeEJSO0FBMEJMQyxRQUFBQSxTQUFTLEVBQUUsRUExQk47QUE0QkxDLFFBQUFBLFNBQVMsRUFBRSxDQUFDQyxnQ0FBRCxDQTVCTjtBQThCTEMsUUFBQUEsT0FBTyxFQUFFO0FBQ1B0RCxVQUFBQSxLQUFLLEVBQUV1RCw4QkFEQTtBQUVQQyxVQUFBQSxVQUFVLEVBQUVEO0FBRkwsU0E5Qko7QUFrQ0xFLFFBQUFBLFNBQVMsRUFBRTtBQUFDL0IsVUFBQUEsT0FBTyxFQUFFO0FBQVY7QUFsQ04sT0FBUDtBQW9DRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7V0FDRSxxQ0FBNEJyQixHQUE1QixFQUFpQztBQUMvQjtBQUNBLGFBQU87QUFDTDJCLFFBQUFBLEtBQUssRUFBRSxLQUFLeEMsaUJBQUwsQ0FBdUIsS0FBS2tFLGNBQUwsQ0FBb0JyRCxHQUFwQixFQUF5QkQsS0FBaEQsRUFBdUQ0QixLQUR6RDtBQUVMMkIsUUFBQUEsT0FBTyxFQUFFLEtBQUtqRSxNQUFMLENBQVksS0FBS2dFLGNBQUwsQ0FBb0JyRCxHQUFwQixFQUF5QmxDLEtBQXJDLElBQ0osS0FBS3VCLE1BQUwsQ0FBWSxLQUFLZ0UsY0FBTCxDQUFvQnJELEdBQXBCLEVBQXlCbEMsS0FBckMsRUFBNEN5RixXQUE1QyxJQUNELEtBQUtsRSxNQUFMLENBQVksS0FBS2dFLGNBQUwsQ0FBb0JyRCxHQUFwQixFQUF5QmxDLEtBQXJDLEVBQTRDMEYsSUFGdkMsR0FHTCxLQUFLSCxjQUFMLENBQW9CckQsR0FBcEIsRUFBeUJ5RDtBQUx4QixPQUFQO0FBT0Q7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7V0FDRSxzQkFBYXpELEdBQWIsRUFBa0JsQyxLQUFsQixFQUF5QjtBQUN2QjtBQUNBLFVBQU00RixNQUFNLEdBQUc1RixLQUFLLEdBQ2hCO0FBQ0VnRSxRQUFBQSxLQUFLLEVBQUVoRSxLQUFLLENBQUMwRixJQURmO0FBRUVHLFFBQUFBLFFBQVEsRUFBRTdGLEtBQUssQ0FBQzZGO0FBRmxCLE9BRGdCLEdBS2hCO0FBQUM3QixRQUFBQSxLQUFLLEVBQUUsSUFBUjtBQUFjNkIsUUFBQUEsUUFBUSxFQUFFLENBQUM7QUFBekIsT0FMSjtBQU9BLDZDQUNLLEtBQUt0RSxNQUFMLENBQVlFLE9BRGpCLDRDQUVHUyxHQUZILGtDQUdPLEtBQUtYLE1BQUwsQ0FBWUUsT0FBWixDQUFvQlMsR0FBcEIsQ0FIUCxHQUlPMEQsTUFKUDtBQU9EO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O1dBQ0UsMkJBQWtCMUQsR0FBbEIsRUFBdUJRLElBQXZCLEVBQTZCO0FBQUE7O0FBQzNCLFVBQUksQ0FBQyxLQUFLb0QsV0FBTixJQUFxQix1QkFBQyxLQUFLQSxXQUFOLDhDQUFDLGtCQUFtQjVELEdBQW5CLENBQUQsQ0FBekIsRUFBbUQ7QUFDakQ7QUFDQSxlQUFPLEtBQUtYLE1BQUwsQ0FBWUUsT0FBbkI7QUFDRDs7QUFKMEIsd0RBTWMsS0FBS3FFLFdBTm5CLHVEQU1jLG1CQUFtQjVELEdBQW5CLENBTmQ7QUFBQSxVQU1kNkQsVUFOYyx5QkFNcEJyRCxJQU5vQjtBQUFBLFVBTUZDLFlBTkUseUJBTUZBLFlBTkU7O0FBQUEsd0RBT2lCLEtBQUttRCxXQVB0Qix1REFPaUIsbUJBQW1CQyxVQUFuQixDQVBqQjtBQUFBLFVBT05DLG1CQVBNLHlCQU9wQnJELFlBUG9COztBQVMzQiw2Q0FDSyxLQUFLcEIsTUFBTCxDQUFZRSxPQURqQiw4RUFFR1MsR0FGSCxFQUVTUSxJQUFJLENBQUNDLFlBQUQsQ0FGYixvREFHR29ELFVBSEgsRUFHZ0JyRCxJQUFJLENBQUNzRCxtQkFBRCxDQUhwQjtBQUtEO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7V0FDRSw2QkFBc0M7QUFBQSxVQUF2QkMsSUFBdUIsUUFBdkJBLElBQXVCO0FBQUEsaUNBQWpCQyxVQUFpQjtBQUFBLFVBQWpCQSxVQUFpQixnQ0FBSixDQUFJO0FBQ3BDLGFBQU9DLElBQUksQ0FBQ0MsR0FBTCxDQUFTLENBQVQsRUFBWUQsSUFBSSxDQUFDdkMsR0FBTCxDQUFTLEtBQUtxQyxJQUFMLEdBQVlDLFVBQXJCLEVBQWlDLENBQWpDLENBQVosQ0FBUDtBQUNEO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7V0FDRSx1Q0FBK0M7QUFBQSxVQUF2QkQsSUFBdUIsU0FBdkJBLElBQXVCO0FBQUEsbUNBQWpCQyxVQUFpQjtBQUFBLFVBQWpCQSxVQUFpQixpQ0FBSixDQUFJO0FBQzdDLGFBQU8sS0FBSzNFLE1BQUwsQ0FBWXlELFNBQVosQ0FBc0JxQix5QkFBdEIsR0FDSEYsSUFBSSxDQUFDQyxHQUFMLENBQVMsQ0FBVCxFQUFZRCxJQUFJLENBQUN2QyxHQUFMLENBQVMsSUFBSXFDLElBQUosR0FBV0MsVUFBcEIsRUFBZ0MsQ0FBaEMsQ0FBWixDQURHLEdBRUgsQ0FGSjtBQUdEOzs7V0FFRCx5QkFBZ0JJLFFBQWhCLEVBQTBCQyxhQUExQixFQUF5QztBQUN2QyxhQUFPLEVBQVA7QUFDRDs7O1dBRUQsdUJBQWM7QUFDWixhQUFPLEVBQVA7QUFDRDs7O1dBRUQsc0JBQWFDLE1BQWIsRUFBcUJDLGFBQXJCLEVBQW9DO0FBQ2xDLFVBQUksQ0FBQ0QsTUFBTCxFQUFhO0FBQ1gsZUFBTyxJQUFQO0FBQ0QsT0FIaUMsQ0FLbEM7QUFDQTs7O0FBQ0EsYUFBT0MsYUFBYSxDQUFDQyxHQUFkLENBQWtCRixNQUFNLENBQUMzRixLQUF6QixDQUFQO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7O1dBQ0UsNkJBQW9COEYsWUFBcEIsRUFBa0N0RixpQkFBbEMsRUFBcUQ7QUFBQTs7QUFDbkQ7QUFDQTtBQUNBLFVBQU11RixXQUFXLEdBQUcsQ0FBQyxZQUFELEVBQWUsa0JBQWYsRUFBbUNDLE1BQW5DLENBQ2xCckcsTUFBTSxDQUFDQyxNQUFQLENBQWMsS0FBSzhFLGNBQW5CLEVBQW1DNUUsR0FBbkMsQ0FBdUMsVUFBQVIsQ0FBQztBQUFBLGVBQUlBLENBQUMsQ0FBQ0gsS0FBTjtBQUFBLE9BQXhDLENBRGtCLENBQXBCLENBSG1ELENBT25EOztBQUNBLFVBQU04RyxTQUFTLEdBQUcsQ0FBQyxXQUFELEVBQWNELE1BQWQsQ0FBcUJyRyxNQUFNLENBQUNDLE1BQVAsQ0FBYyxLQUFLOEUsY0FBbkIsRUFBbUM1RSxHQUFuQyxDQUF1QyxVQUFBUixDQUFDO0FBQUEsZUFBSUEsQ0FBQyxDQUFDNkIsTUFBTjtBQUFBLE9BQXhDLENBQXJCLENBQWxCLENBUm1ELENBU25EOztBQUNBeEIsTUFBQUEsTUFBTSxDQUFDQyxNQUFQLENBQWMsS0FBSzhFLGNBQW5CLEVBQW1Dd0IsT0FBbkMsQ0FBMkMsVUFBQTVHLENBQUMsRUFBSTtBQUM5QyxZQUNFd0csWUFBWSxDQUFDM0IsU0FBYixDQUF1QjdFLENBQUMsQ0FBQzhCLEtBQXpCLEtBQ0EsS0FBSSxDQUFDWixpQkFBTCxDQUF1QmxCLENBQUMsQ0FBQzhCLEtBQXpCLENBREEsSUFFQVosaUJBQWlCLENBQUNsQixDQUFDLENBQUM4QixLQUFILENBQWpCLENBQTJCK0UsS0FBM0IsS0FBcUMsS0FBSSxDQUFDM0YsaUJBQUwsQ0FBdUJsQixDQUFDLENBQUM4QixLQUF6QixFQUFnQytFLEtBSHZFLEVBSUU7QUFDQUYsVUFBQUEsU0FBUyxDQUFDRyxJQUFWLENBQWU5RyxDQUFDLENBQUM4QixLQUFqQjtBQUNEO0FBQ0YsT0FSRCxFQVZtRCxDQW9CbkQ7O0FBQ0EsVUFBTWlGLGFBQWEsR0FBRyxLQUFLM0YsTUFBM0I7QUFDQSxVQUFNNEYsTUFBTSxHQUFHLEtBQUtDLGVBQUwsQ0FBcUJGLGFBQXJCLEVBQW9DUCxZQUFwQyxFQUFrRDtBQUMvREMsUUFBQUEsV0FBVyxFQUFYQSxXQUQrRDtBQUUvREUsUUFBQUEsU0FBUyxFQUFUQTtBQUYrRCxPQUFsRCxDQUFmO0FBSUEsV0FBS08saUJBQUwsQ0FBdUJGLE1BQXZCLEVBMUJtRCxDQTJCbkQ7O0FBQ0EzRyxNQUFBQSxNQUFNLENBQUM4RyxJQUFQLENBQVksS0FBSy9CLGNBQWpCLEVBQWlDd0IsT0FBakMsQ0FBeUMsVUFBQVEsT0FBTyxFQUFJO0FBQ2xELFFBQUEsS0FBSSxDQUFDQyxxQkFBTCxDQUEyQkQsT0FBM0I7QUFDRCxPQUZEO0FBR0Q7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztXQUNFLHlCQUFnQkwsYUFBaEIsRUFBK0JQLFlBQS9CLEVBQXNGO0FBQUE7O0FBQUEsc0ZBQUosRUFBSTtBQUFBLG9DQUF4Q0MsV0FBd0M7QUFBQSxVQUF4Q0EsV0FBd0Msa0NBQTFCLEVBQTBCO0FBQUEsa0NBQXRCRSxTQUFzQjtBQUFBLFVBQXRCQSxTQUFzQixnQ0FBVixFQUFVOztBQUNwRixVQUFNSyxNQUFNLEdBQUcsRUFBZjtBQUNBM0csTUFBQUEsTUFBTSxDQUFDOEcsSUFBUCxDQUFZSixhQUFaLEVBQTJCSCxPQUEzQixDQUFtQyxVQUFBN0UsR0FBRyxFQUFJO0FBQ3hDLFlBQ0UsMEJBQWNnRixhQUFhLENBQUNoRixHQUFELENBQTNCLEtBQ0EsMEJBQWN5RSxZQUFZLENBQUN6RSxHQUFELENBQTFCLENBREEsSUFFQSxDQUFDMEUsV0FBVyxDQUFDYSxRQUFaLENBQXFCdkYsR0FBckIsQ0FGRCxJQUdBLENBQUM0RSxTQUFTLENBQUNXLFFBQVYsQ0FBbUJ2RixHQUFuQixDQUpILEVBS0U7QUFDQTtBQUNBaUYsVUFBQUEsTUFBTSxDQUFDakYsR0FBRCxDQUFOLEdBQWMsTUFBSSxDQUFDa0YsZUFBTCxDQUFxQkYsYUFBYSxDQUFDaEYsR0FBRCxDQUFsQyxFQUF5Q3lFLFlBQVksQ0FBQ3pFLEdBQUQsQ0FBckQsRUFBNEQ7QUFDeEUwRSxZQUFBQSxXQUFXLEVBQVhBLFdBRHdFO0FBRXhFRSxZQUFBQSxTQUFTLEVBQVRBO0FBRndFLFdBQTVELENBQWQ7QUFJRCxTQVhELE1BV08sSUFBSSxtQ0FBbUJILFlBQVksQ0FBQ3pFLEdBQUQsQ0FBL0IsS0FBeUMsQ0FBQzRFLFNBQVMsQ0FBQ1csUUFBVixDQUFtQnZGLEdBQW5CLENBQTlDLEVBQXVFO0FBQzVFO0FBQ0FpRixVQUFBQSxNQUFNLENBQUNqRixHQUFELENBQU4sR0FBY3lFLFlBQVksQ0FBQ3pFLEdBQUQsQ0FBMUI7QUFDRCxTQUhNLE1BR0E7QUFDTDtBQUNBaUYsVUFBQUEsTUFBTSxDQUFDakYsR0FBRCxDQUFOLEdBQWNnRixhQUFhLENBQUNoRixHQUFELENBQTNCO0FBQ0Q7QUFDRixPQW5CRDtBQXFCQSxhQUFPaUYsTUFBUDtBQUNEOzs7V0FFRCwyQkFBa0JPLGVBQWxCLEVBQW1DO0FBQUE7O0FBQ2pDbEgsTUFBQUEsTUFBTSxDQUFDOEcsSUFBUCxDQUFZSSxlQUFaLEVBQTZCWCxPQUE3QixDQUFxQyxVQUFBWSxJQUFJLEVBQUk7QUFDM0MsWUFBSSxPQUFPQSxJQUFQLEtBQWdCLFFBQWhCLElBQTRCQyxnQ0FBa0JGLGVBQWUsQ0FBQ0MsSUFBRCxDQUFqQyxDQUFoQyxFQUEwRTtBQUN4RTtBQUNBLFVBQUEsTUFBSSxDQUFDcEcsTUFBTCxDQUFZeUQsU0FBWixDQUFzQjJDLElBQXRCLElBQThCQyxnQ0FBa0JGLGVBQWUsQ0FBQ0MsSUFBRCxDQUFqQyxFQUF5Q3BGLFlBQXZFO0FBQ0EsVUFBQSxNQUFJLENBQUNsQixpQkFBTCxDQUF1QnNHLElBQXZCLElBQStCQyxnQ0FBa0JGLGVBQWUsQ0FBQ0MsSUFBRCxDQUFqQyxDQUEvQjtBQUNELFNBSkQsTUFJTyxJQUFJLENBQUMsTUFBRCxFQUFTLGNBQVQsRUFBeUJFLEtBQXpCLENBQStCLFVBQUFDLENBQUM7QUFBQSxpQkFBSUosZUFBZSxDQUFDQyxJQUFELENBQWYsQ0FBc0JJLGNBQXRCLENBQXFDRCxDQUFyQyxDQUFKO0FBQUEsU0FBaEMsQ0FBSixFQUFrRjtBQUN2RjtBQUNBO0FBQ0EsVUFBQSxNQUFJLENBQUN2RyxNQUFMLENBQVl5RCxTQUFaLENBQXNCMkMsSUFBdEIsSUFBOEJELGVBQWUsQ0FBQ0MsSUFBRCxDQUFmLENBQXNCcEYsWUFBcEQ7QUFDQSxVQUFBLE1BQUksQ0FBQ2xCLGlCQUFMLENBQXVCc0csSUFBdkIsSUFBK0JELGVBQWUsQ0FBQ0MsSUFBRCxDQUE5QztBQUNEO0FBQ0YsT0FYRDtBQVlEOzs7V0FFRCwyQkFBa0I7QUFDaEIsVUFBTUssZ0JBQWdCLEdBQUcsS0FBS0EsZ0JBQUwsSUFBeUIsRUFBbEQ7QUFDQSxVQUFNQyxRQUFRLEdBQUcsS0FBS0Msb0JBQUwsQ0FBMEJDLE1BQTFCLENBQ2YsVUFBQ0MsSUFBRCxFQUFPbEcsR0FBUDtBQUFBLCtDQUNLa0csSUFETCw0Q0FFR2xHLEdBRkgsRUFFUzhGLGdCQUFnQixDQUFDOUYsR0FBRCxDQUFoQixHQUNIO0FBQUM4QixVQUFBQSxLQUFLLEVBQUUsSUFBUjtBQUFjNkIsVUFBQUEsUUFBUSxFQUFFLENBQUMsQ0FBekI7QUFBNEJ3QyxVQUFBQSxTQUFTLEVBQUVMLGdCQUFnQixDQUFDOUYsR0FBRDtBQUF2RCxTQURHLEdBRUg7QUFBQzhCLFVBQUFBLEtBQUssRUFBRSxJQUFSO0FBQWM2QixVQUFBQSxRQUFRLEVBQUUsQ0FBQztBQUF6QixTQUpOO0FBQUEsT0FEZSxFQU9mLEVBUGUsQ0FBakI7QUFTQSxVQUFNeUMsUUFBUSxHQUFHLEtBQUtDLGVBQUwsQ0FBcUJKLE1BQXJCLENBQ2YsVUFBQ0MsSUFBRCxFQUFPbEcsR0FBUDtBQUFBLCtDQUNLa0csSUFETCw0Q0FFR2xHLEdBRkgsRUFFUztBQUFDOEIsVUFBQUEsS0FBSyxFQUFFLElBQVI7QUFBYzZCLFVBQUFBLFFBQVEsRUFBRSxDQUFDLENBQXpCO0FBQTRCeUMsVUFBQUEsUUFBUSxFQUFFO0FBQXRDLFNBRlQ7QUFBQSxPQURlLEVBS2YsRUFMZSxDQUFqQjtBQVFBLDZDQUFXTCxRQUFYLEdBQXdCSyxRQUF4QjtBQUNEOzs7V0FFRCwyQkFBa0JFLFNBQWxCLEVBQTZCO0FBQzNCLFdBQUtqSCxNQUFMLG1DQUFrQixLQUFLQSxNQUF2QixHQUFrQ2lILFNBQWxDO0FBQ0EsYUFBTyxJQUFQO0FBQ0Q7OztXQUVELDhCQUFxQkMsWUFBckIsRUFBbUM7QUFDakMsV0FBS2xILE1BQUwsQ0FBWXlELFNBQVosbUNBQTRCLEtBQUt6RCxNQUFMLENBQVl5RCxTQUF4QyxHQUFzRHlELFlBQXREO0FBQ0EsYUFBTyxJQUFQO0FBQ0Q7OztXQUVELDRCQUFtQkMsSUFBbkIsRUFBeUJGLFNBQXpCLEVBQW9DO0FBQUEseUJBQ0ssS0FBS2pILE1BRFY7QUFBQSxVQUNsQm9ILFFBRGtCLGdCQUMzQnhELE9BRDJCO0FBQUEsVUFDUkgsU0FEUSxnQkFDUkEsU0FEUTs7QUFHbEMsVUFBSSxDQUFDLDBCQUFjd0QsU0FBZCxDQUFELElBQTZCLE9BQU9FLElBQVAsS0FBZ0IsUUFBakQsRUFBMkQ7QUFDekQsZUFBTyxJQUFQO0FBQ0Q7O0FBRUQsVUFBTUUsV0FBVyxHQUFHcEksTUFBTSxDQUFDcUksT0FBUCxDQUFlTCxTQUFmLEVBQTBCTCxNQUExQixDQUFpQyxVQUFDQyxJQUFELFNBQXdCO0FBQUE7QUFBQSxZQUFoQmxHLEdBQWdCO0FBQUEsWUFBWDhCLEtBQVc7O0FBQzNFLCtDQUNLb0UsSUFETCw0Q0FFR2xHLEdBRkgsRUFFUywwQkFBY2tHLElBQUksQ0FBQ2xHLEdBQUQsQ0FBbEIsS0FBNEIsMEJBQWM4QixLQUFkLENBQTVCLG1DQUF1RG9FLElBQUksQ0FBQ2xHLEdBQUQsQ0FBM0QsR0FBcUU4QixLQUFyRSxJQUE4RUEsS0FGdkY7QUFJRCxPQUxtQixFQUtqQjJFLFFBQVEsQ0FBQ0QsSUFBRCxDQUFSLElBQWtCdEQsOEJBTEQsQ0FBcEI7O0FBT0EsVUFBTUQsT0FBTyxtQ0FDUndELFFBRFEsNENBRVZELElBRlUsRUFFSEUsV0FGRyxFQUFiOztBQUtBLFdBQUt2QixpQkFBTCxDQUF1QjtBQUFDbEMsUUFBQUEsT0FBTyxFQUFQQTtBQUFELE9BQXZCLEVBbkJrQyxDQW9CbEM7O0FBQ0EsVUFBTTJELFlBQVksR0FDaEI5RCxTQUFTLENBQUMwRCxJQUFELENBQVQsS0FBb0IxRCxTQUFTLENBQUMwRCxJQUFELENBQVQsQ0FBZ0JLLE1BQWhCLElBQTBCL0QsU0FBUyxDQUFDMEQsSUFBRCxDQUFULENBQWdCOUcsSUFBaEIsS0FBeUJvSCxxQkFBdkUsQ0FERjs7QUFHQSxVQUFJRixZQUFKLEVBQWtCO0FBQ2hCLGFBQUtHLHlCQUFMLENBQStCVCxTQUEvQixFQUEwQ0UsSUFBMUM7QUFDQSxhQUFLUSx5QkFBTCxDQUErQlYsU0FBL0IsRUFBMENHLFFBQTFDLEVBQW9ERCxJQUFwRDtBQUNBLGFBQUtTLG1CQUFMLENBQXlCWCxTQUF6QixFQUFvQ0csUUFBcEMsRUFBOENELElBQTlDO0FBQ0Q7O0FBRUQsYUFBTyxJQUFQO0FBQ0Q7OztXQUVELDZCQUFvQkYsU0FBcEIsRUFBK0JHLFFBQS9CLEVBQXlDRCxJQUF6QyxFQUErQztBQUM3QyxVQUFJLENBQUNGLFNBQVMsQ0FBQ1ksZ0JBQVgsSUFBK0IsQ0FBQ1osU0FBUyxDQUFDWSxnQkFBVixDQUEyQkMsTUFBL0QsRUFBdUU7QUFDckU7QUFDRDs7QUFINEMsMEJBS2hCLEtBQUs5SCxNQUxXO0FBQUEsVUFLdEM0RCxPQUxzQyxpQkFLdENBLE9BTHNDO0FBQUEsVUFLN0JILFNBTDZCLGlCQUs3QkEsU0FMNkI7QUFPN0MsVUFBSSxDQUFDQSxTQUFTLENBQUMwRCxJQUFELENBQWQsRUFBc0I7QUFQdUIsVUFRdENLLE1BUnNDLEdBUTVCL0QsU0FBUyxDQUFDMEQsSUFBRCxDQVJtQixDQVF0Q0ssTUFSc0M7O0FBUzdDLFVBQU1PLGFBQWEsbUNBQ2RuRSxPQUFPLENBQUN1RCxJQUFELENBQVAsQ0FBY1ksYUFEQTtBQUVqQjVELFFBQUFBLElBQUksRUFBRSxnQkFGVztBQUdqQnFELFFBQUFBLE1BQU0sc0NBQU1BLE1BQU47QUFIVyxRQUFuQjs7QUFLQSxXQUFLMUIsaUJBQUwsQ0FBdUI7QUFDckJsQyxRQUFBQSxPQUFPLGtDQUNGQSxPQURFLDRDQUVKdUQsSUFGSSxrQ0FHQXZELE9BQU8sQ0FBQ3VELElBQUQsQ0FIUDtBQUlIWSxVQUFBQSxhQUFhLEVBQWJBO0FBSkc7QUFEYyxPQUF2QjtBQVNEO0FBQ0Q7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O1dBQ0UsbUNBQTBCZCxTQUExQixFQUFxQ0UsSUFBckMsRUFBMkM7QUFBQTs7QUFDekMsVUFBSSxPQUFPRixTQUFTLENBQUNlLFlBQWpCLEtBQWtDLFFBQXRDLEVBQWdEO0FBRFAsMEJBR1osS0FBS2hJLE1BSE87QUFBQSxVQUdsQzRELE9BSGtDLGlCQUdsQ0EsT0FIa0M7QUFBQSxVQUd6QkgsU0FIeUIsaUJBR3pCQSxTQUh5QjtBQUl6QyxXQUFLcUMsaUJBQUwsQ0FBdUI7QUFDckJsQyxRQUFBQSxPQUFPLGtDQUNGQSxPQURFLDRDQUVKdUQsSUFGSSxrQ0FHQXZELE9BQU8sQ0FBQ3VELElBQUQsQ0FIUDtBQUlIVSxVQUFBQSxnQkFBZ0Isa0NBQ1hqRSxPQUFPLENBQUN1RCxJQUFELENBQVAsQ0FBY1UsZ0JBREg7QUFFZHhILFlBQUFBLElBQUksRUFBRW9ELFNBQVMsQ0FBQzBELElBQUQsQ0FBVCxDQUFnQjlHLElBRlI7QUFHZDRILFlBQUFBLEtBQUssMkJBQUV4RSxTQUFTLENBQUMwRCxJQUFELENBQVQsQ0FBZ0JLLE1BQWxCLDBEQUFFLHNCQUF3QmpJLE1BSGpCO0FBSWQySSxZQUFBQSxRQUFRLEVBQUV2RyxPQUFPLENBQUM4QixTQUFTLENBQUMwRCxJQUFELENBQVQsQ0FBZ0JlLFFBQWpCLENBSkg7QUFLZEMsWUFBQUEsU0FBUyxFQUFFLEtBQUtDLFlBQUwsQ0FBa0JqQixJQUFsQixDQUxHO0FBTWRrQixZQUFBQSxXQUFXLEVBQUUsS0FBS0Msc0JBQUwsQ0FBNEJuQixJQUE1QjtBQU5DO0FBSmI7QUFEYyxPQUF2QjtBQWdCRCxLLENBRUQ7Ozs7V0FDQSxtQ0FBMEJGLFNBQTFCLEVBQXFDRyxRQUFyQyxFQUErQ0QsSUFBL0MsRUFBcUQ7QUFDbkQ7QUFDQSxVQUFNb0IsWUFBWSxHQUNoQnRCLFNBQVMsQ0FBQ1ksZ0JBQVYsSUFDQSxDQUFDLFVBQUQsRUFBYSxPQUFiLEVBQXNCVyxJQUF0QixDQUNFLFVBQUE3SCxHQUFHO0FBQUEsZUFDRHNHLFNBQVMsQ0FBQ1ksZ0JBQVYsQ0FBMkJyQixjQUEzQixDQUEwQzdGLEdBQTFDLEtBQ0FzRyxTQUFTLENBQUNZLGdCQUFWLENBQTJCbEgsR0FBM0IsTUFDRSxDQUFDeUcsUUFBUSxDQUFDRCxJQUFELENBQVIsSUFBa0J0RCw4QkFBbkIsRUFBcUNnRSxnQkFBckMsQ0FBc0RsSCxHQUF0RCxDQUhEO0FBQUEsT0FETCxDQUZGO0FBUUEsVUFBSSxDQUFDNEgsWUFBTCxFQUFtQjtBQVZnQywwQkFZdEIsS0FBS3ZJLE1BWmlCO0FBQUEsVUFZNUM0RCxPQVo0QyxpQkFZNUNBLE9BWjRDO0FBQUEsVUFZbkNILFNBWm1DLGlCQVluQ0EsU0FabUM7QUFBQSxrQ0FhekJHLE9BQU8sQ0FBQ3VELElBQUQsQ0FBUCxDQUFjVSxnQkFiVztBQUFBLFVBYTVDSSxLQWI0Qyx5QkFhNUNBLEtBYjRDO0FBQUEsVUFhckNDLFFBYnFDLHlCQWFyQ0EsUUFicUM7QUFjbkQsVUFBTXBFLFVBQVUsR0FBR0wsU0FBUyxDQUFDMEQsSUFBRCxDQUE1QixDQWRtRCxDQWVuRDs7QUFDQSxVQUFJOUMsTUFBSjs7QUFDQSxVQUFJNEMsU0FBUyxDQUFDWSxnQkFBVixDQUEyQnJCLGNBQTNCLENBQTBDLE9BQTFDLENBQUosRUFBd0Q7QUFDdEQsWUFBTWYsS0FBSyxHQUFHLHFDQUFvQjNCLFVBQXBCLENBQWQ7O0FBRUEsWUFBSTJCLEtBQUosRUFBVztBQUNULGNBQU1nRCxTQUFTLEdBQUdDLDBCQUFhQyxNQUFiLENBQW9CLFVBQUFDLEVBQUU7QUFBQSxtQkFBSSxxQ0FBb0JBLEVBQXBCLE1BQTRCbkQsS0FBaEM7QUFBQSxXQUF0QixDQUFsQjs7QUFFQXBCLFVBQUFBLE1BQU0sR0FBR29FLFNBQVMsQ0FBQ0ksSUFBVixDQUFlLFVBQUFELEVBQUU7QUFBQSxtQkFBSUEsRUFBRSxDQUFDcEIsTUFBSCxDQUFVakksTUFBVixLQUFxQjBJLEtBQXpCO0FBQUEsV0FBakIsQ0FBVDs7QUFFQSxjQUFJNUQsTUFBTSxJQUFJUCxVQUFVLENBQUNvRSxRQUF6QixFQUFtQztBQUNqQzdELFlBQUFBLE1BQU0sR0FBRyxtQ0FBa0IsSUFBbEIsRUFBd0JBLE1BQXhCLENBQVQ7QUFDRDs7QUFFRCxjQUFJQSxNQUFNLElBQUlQLFVBQVUsQ0FBQ2dGLFFBQXpCLEVBQW1DO0FBQ2pDekUsWUFBQUEsTUFBTSxHQUFHLEtBQUswRSxjQUFMLENBQW9CNUIsSUFBcEIsRUFBMEJyRCxVQUFVLENBQUNnRixRQUFyQyxFQUErQ3pFLE1BQS9DLENBQVQ7QUFDRDtBQUNGO0FBQ0Y7O0FBRUQsVUFBSTRDLFNBQVMsQ0FBQ1ksZ0JBQVYsQ0FBMkJyQixjQUEzQixDQUEwQyxVQUExQyxDQUFKLEVBQTJEO0FBQ3pEbkMsUUFBQUEsTUFBTSxHQUFHLG1DQUFrQjZELFFBQWxCLEVBQTRCN0QsTUFBTSxJQUFJUCxVQUF0QyxDQUFUO0FBQ0Q7O0FBRUQsVUFBSU8sTUFBSixFQUFZO0FBQ1YsYUFBSzJFLG9CQUFMLHNDQUE0QjdCLElBQTVCLEVBQW1DOUMsTUFBbkM7QUFDRDtBQUNGOzs7V0FFRCx3QkFBZThDLElBQWYsRUFBcUIyQixRQUFyQixFQUErQmhGLFVBQS9CLEVBQTJDO0FBQUE7O0FBQ3pDO0FBRHlDLGdDQUVqQjdFLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjLEtBQUs4RSxjQUFuQixFQUFtQzZFLElBQW5DLENBQXdDLFVBQUFwRyxLQUFLO0FBQUEsZUFBSUEsS0FBSyxDQUFDL0IsS0FBTixLQUFnQnlHLElBQXBCO0FBQUEsT0FBN0MsQ0FGaUI7QUFBQSxVQUVsQzFJLEtBRmtDLHVCQUVsQ0EsS0FGa0M7QUFBQSxVQUUzQmdDLE1BRjJCLHVCQUUzQkEsTUFGMkI7O0FBR3pDLFVBQU1KLElBQUkseUJBQUcsS0FBS0wsTUFBTCxDQUFZdkIsS0FBWixDQUFILHVEQUFHLG1CQUFvQjRCLElBQWpDOztBQUVBLFVBQUlBLElBQUksS0FBSyxRQUFULElBQXFCQSxJQUFJLEtBQUssU0FBOUIsSUFBMkNBLElBQUksS0FBSyxNQUF4RCxFQUFnRTtBQUM5RCxlQUFPLEtBQUs0SSxzQkFBTCxDQUE0QkgsUUFBNUIsRUFBc0MsS0FBSzlJLE1BQUwsQ0FBWVMsTUFBWixDQUF0QyxFQUEyRHFELFVBQTNELENBQVA7QUFDRCxPQVB3QyxDQVN6Qzs7O0FBQ0EsYUFBTyxLQUFLb0YscUJBQUwsQ0FBMkJKLFFBQTNCLEVBQXFDLEtBQUs5SSxNQUFMLENBQVlTLE1BQVosQ0FBckMsRUFBMERxRCxVQUExRCxDQUFQO0FBQ0Q7OztXQUVELGdDQUF1QmdGLFFBQXZCLEVBQWlDckksTUFBakMsRUFBeUNxRCxVQUF6QyxFQUFxRDtBQUNuRCxVQUFNMEQsTUFBTSxHQUFHMUQsVUFBVSxDQUFDMEQsTUFBMUI7QUFDQSxVQUFNMkIsa0JBQWtCLEdBQUcsRUFBM0I7O0FBQ0EsVUFBSXJGLFVBQVUsQ0FBQ3pELElBQVgsS0FBb0JvSCxxQkFBeEIsRUFBa0M7QUFDaEMsK0NBQ0szRCxVQURMO0FBRUVnRixVQUFBQSxRQUFRLEVBQUU7QUFGWjtBQUlEOztBQUNELFVBQU1NLFdBQVcsR0FBR04sUUFBUSxDQUFDTyxLQUFULENBQWUsQ0FBZixFQUFrQjdCLE1BQU0sQ0FBQ2pJLE1BQXpCLEVBQWlDSCxHQUFqQyxDQUFxQyxVQUFDa0ssSUFBRCxFQUFPaEssS0FBUCxFQUFpQjtBQUN4RTZKLFFBQUFBLGtCQUFrQixDQUFDekQsSUFBbkIsQ0FBd0I0RCxJQUFJLENBQUMsQ0FBRCxDQUE1QjtBQUNBLGVBQU8sQ0FBQ0EsSUFBSSxDQUFDLENBQUQsQ0FBTCxFQUFVOUIsTUFBTSxDQUFDbEksS0FBRCxDQUFoQixDQUFQO0FBQ0QsT0FIbUIsQ0FBcEI7QUFJQSxVQUFNaUssZ0JBQWdCLEdBQUcvQixNQUFNLENBQUM2QixLQUFQLENBQWFELFdBQVcsQ0FBQzdKLE1BQXpCLEVBQWlDaUksTUFBTSxDQUFDakksTUFBeEMsQ0FBekI7O0FBYm1ELGlEQWUvQmdLLGdCQWYrQjtBQUFBOztBQUFBO0FBZW5ELDREQUFzQztBQUFBLGNBQTNCakosS0FBMkI7QUFDcEMsY0FBTWtKLFFBQVEsR0FBRy9JLE1BQU0sQ0FBQ29JLElBQVAsQ0FBWSxVQUFBdEssQ0FBQztBQUFBLG1CQUFJLENBQUM0SyxrQkFBa0IsQ0FBQ2pELFFBQW5CLENBQTRCM0gsQ0FBNUIsQ0FBTDtBQUFBLFdBQWIsQ0FBakI7O0FBQ0EsY0FBSSxDQUFDaUwsUUFBTCxFQUFlO0FBQ2I7QUFDRDs7QUFDREwsVUFBQUEsa0JBQWtCLENBQUN6RCxJQUFuQixDQUF3QjhELFFBQXhCO0FBQ0FKLFVBQUFBLFdBQVcsQ0FBQzFELElBQVosQ0FBaUIsQ0FBQzhELFFBQUQsRUFBV2xKLEtBQVgsQ0FBakI7QUFDRDtBQXRCa0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUF1Qm5ELDZDQUNLd0QsVUFETDtBQUVFZ0YsUUFBQUEsUUFBUSxFQUFFTTtBQUZaO0FBSUQ7OztXQUVELCtCQUFzQk4sUUFBdEIsRUFBZ0NySSxNQUFoQyxFQUF3QzRELE1BQXhDLEVBQWdEO0FBQzlDLFVBQU1tRCxNQUFNLEdBQUduRCxNQUFNLENBQUNtRCxNQUF0QjtBQUNBLFVBQUk0QixXQUFXLEdBQUdOLFFBQVEsQ0FBQ08sS0FBVCxDQUFlLENBQWYsRUFBa0I3QixNQUFNLENBQUNqSSxNQUF6QixDQUFsQjtBQUVBNkosTUFBQUEsV0FBVyxHQUFHQSxXQUFXLENBQUNoSyxHQUFaLENBQWdCLFVBQUNrSyxJQUFELEVBQU9oSyxLQUFQLEVBQWlCO0FBQzdDLFlBQU1tRCxLQUFLLEdBQUduRCxLQUFLLEtBQUs4SixXQUFXLENBQUM3SixNQUFaLEdBQXFCLENBQS9CLEdBQW1DLElBQW5DLEdBQTBDK0osSUFBSSxDQUFDLENBQUQsQ0FBNUQ7QUFDQSxlQUFPLENBQUM3RyxLQUFELEVBQVErRSxNQUFNLENBQUNsSSxLQUFELENBQWQsQ0FBUDtBQUNELE9BSGEsQ0FBZDtBQUlBLFVBQU1pSyxnQkFBZ0IsR0FBRy9CLE1BQU0sQ0FBQzZCLEtBQVAsQ0FBYUQsV0FBVyxDQUFDN0osTUFBekIsRUFBaUNpSSxNQUFNLENBQUNqSSxNQUF4QyxDQUF6Qjs7QUFFQSxVQUFJZ0ssZ0JBQWdCLENBQUNoSyxNQUFqQixHQUEwQixDQUE5QixFQUFpQztBQUMvQixZQUFNa0ssY0FBYyxHQUFHWCxRQUFRLENBQUMxSixHQUFULENBQWEsVUFBQXNLLENBQUM7QUFBQSxpQkFBSUEsQ0FBQyxDQUFDLENBQUQsQ0FBTDtBQUFBLFNBQWQsRUFBd0JmLE1BQXhCLENBQStCLFVBQUFlLENBQUM7QUFBQSxpQkFBSSxPQUFPQSxDQUFQLEtBQWEsUUFBakI7QUFBQSxTQUFoQyxDQUF2QjtBQUNBLFlBQU1DLFFBQVEsR0FBRy9FLElBQUksQ0FBQ3ZDLEdBQUwsT0FBQXVDLElBQUksc0NBQVE2RSxjQUFSLFVBQXdCaEosTUFBTSxDQUFDQSxNQUFNLENBQUNsQixNQUFQLEdBQWdCLENBQWpCLENBQTlCLEdBQXJCO0FBQ0EsWUFBTXFLLFNBQVMsR0FBR1IsV0FBVyxDQUFDQSxXQUFXLENBQUM3SixNQUFaLEdBQXFCLENBQXRCLENBQVgsQ0FBb0MsQ0FBcEMsQ0FBbEI7QUFDQSxZQUFNc0ssSUFBSSxHQUFHLENBQUNGLFFBQVEsR0FBR0MsU0FBWixLQUEwQkwsZ0JBQWdCLENBQUNoSyxNQUFqQixHQUEwQixDQUFwRCxDQUFiO0FBQ0E2SixRQUFBQSxXQUFXLENBQUNBLFdBQVcsQ0FBQzdKLE1BQVosR0FBcUIsQ0FBdEIsQ0FBWCxDQUFvQyxDQUFwQyxJQUF5Q3FLLFNBQVMsR0FBR0MsSUFBckQ7O0FBTCtCLG9EQU9OTixnQkFBZ0IsQ0FBQ2pDLE9BQWpCLEVBUE07QUFBQTs7QUFBQTtBQU8vQixpRUFBcUQ7QUFBQTtBQUFBLGdCQUF6Q3dDLENBQXlDO0FBQUEsZ0JBQXRDeEosS0FBc0M7O0FBQ25ELGdCQUFNbUMsS0FBSyxHQUFHcUgsQ0FBQyxLQUFLUCxnQkFBZ0IsQ0FBQ2hLLE1BQWpCLEdBQTBCLENBQWhDLEdBQW9DLElBQXBDLEdBQTJDcUssU0FBUyxHQUFJQyxJQUFJLElBQUlDLENBQUMsR0FBRyxDQUFSLENBQTFFO0FBQ0FWLFlBQUFBLFdBQVcsQ0FBQzFELElBQVosQ0FBaUIsQ0FBQ2pELEtBQUQsRUFBUW5DLEtBQVIsQ0FBakI7QUFDRDtBQVY4QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBV2hDOztBQUNELDZDQUNLK0QsTUFETDtBQUVFeUUsUUFBQUEsUUFBUSxFQUFFTTtBQUZaO0FBSUQ7QUFFRDtBQUNGO0FBQ0E7QUFDQTs7OztXQUNFLHlCQUFnQjtBQUFBLFVBQ1BsSixPQURPLEdBQ0ksS0FBS0YsTUFEVCxDQUNQRSxPQURPO0FBRWQsYUFDR0EsT0FBTyxJQUNSakIsTUFBTSxDQUFDQyxNQUFQLENBQWNnQixPQUFkLEVBQXVCb0csS0FBdkIsQ0FBNkIsVUFBQTFILENBQUMsRUFBSTtBQUNoQyxlQUFPK0MsT0FBTyxDQUFDL0MsQ0FBQyxDQUFDbUksUUFBRixJQUFlbkksQ0FBQyxDQUFDNkQsS0FBRixJQUFXN0QsQ0FBQyxDQUFDMEYsUUFBRixHQUFhLENBQUMsQ0FBekMsQ0FBZDtBQUNELE9BRkQsQ0FGRjtBQU1EO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O1dBQ0Usc0JBQWF5RixTQUFiLEVBQXdCO0FBQ3RCLFVBQUksQ0FBQ0EsU0FBTCxFQUFnQjtBQUNkLGVBQU8sS0FBUDtBQUNEOztBQUNELGFBQU9wSSxPQUFPLENBQUNvSSxTQUFTLENBQUNDLElBQVYsSUFBa0JELFNBQVMsQ0FBQ0MsSUFBVixDQUFlekssTUFBbEMsQ0FBZDtBQUNEOzs7V0FFRCx5QkFBZ0I7QUFDZCxhQUFPLEtBQUtjLElBQUwsSUFBYSxLQUFLNEosYUFBTCxFQUFwQjtBQUNEOzs7V0FFRCwyQkFBa0JELElBQWxCLEVBQXdCO0FBQ3RCLGFBQ0csS0FBSzNKLElBQUwsSUFDRCxLQUFLNEosYUFBTCxFQURDLElBRUQsS0FBS0MsWUFBTCxDQUFrQkYsSUFBbEIsQ0FGQyxJQUdELE9BQU8sS0FBS0csV0FBWixLQUE0QixVQUo5QjtBQU1EOzs7V0FFRCx1QkFBY2xILFVBQWQsRUFBMEJELFdBQTFCLEVBQXVDYyxVQUF2QyxFQUFtRDtBQUNqRCxVQUFJQSxVQUFVLENBQUN6RCxJQUFYLEtBQW9Cb0gscUJBQXhCLEVBQWtDO0FBQ2hDLGVBQU8sVUFBQzJDLENBQUQsRUFBSTlKLEtBQUosRUFBYztBQUFBLHFCQUNELGtCQUFJQSxLQUFKLENBREM7QUFBQSxjQUNaK0osQ0FEWSxRQUNaQSxDQURZO0FBQUEsY0FDVEMsQ0FEUyxRQUNUQSxDQURTO0FBQUEsY0FDTkMsQ0FETSxRQUNOQSxDQURNOztBQUVuQixpQkFBTyxDQUFDRixDQUFELEVBQUlDLENBQUosRUFBT0MsQ0FBUCxFQUFVL0IsSUFBVixDQUFlZ0MsS0FBZixJQUF3QkMsOEJBQXhCLEdBQXdDLENBQUNKLENBQUQsRUFBSUMsQ0FBSixFQUFPQyxDQUFQLENBQS9DO0FBQ0QsU0FIRDtBQUlELE9BTEQsTUFLTyxJQUFJRyxLQUFLLENBQUNDLE9BQU4sQ0FBYzdHLFVBQVUsQ0FBQ2dGLFFBQXpCLENBQUosRUFBd0M7QUFDN0MsWUFBTVEsSUFBSSxHQUFHLElBQUlzQixHQUFKLEVBQWI7QUFDQTlHLFFBQUFBLFVBQVUsQ0FBQ2dGLFFBQVgsQ0FBb0J0RCxPQUFwQixDQUE0QixpQkFBWTtBQUFBO0FBQUEsY0FBVnFGLENBQVU7QUFBQSxjQUFQak0sQ0FBTzs7QUFDdEMwSyxVQUFBQSxJQUFJLENBQUN3QixHQUFMLENBQVNELENBQVQsRUFBWSxPQUFPak0sQ0FBUCxLQUFhLFFBQWIsR0FBd0IsMEJBQVNBLENBQVQsQ0FBeEIsR0FBc0NBLENBQWxEO0FBQ0QsU0FGRCxFQUY2QyxDQU03Qzs7QUFDQSxZQUFNNEIsS0FBSyxHQUFHdUssNEJBQVc5SCxVQUFYLElBQ1h4QyxNQURXLENBQ0ppSyxLQUFLLENBQUNNLElBQU4sQ0FBVzFCLElBQUksQ0FBQ3ZELElBQUwsRUFBWCxDQURJLEVBRVhyRixLQUZXLENBRUxnSyxLQUFLLENBQUNNLElBQU4sQ0FBVzFCLElBQUksQ0FBQ3BLLE1BQUwsRUFBWCxDQUZLLEVBR1grTCxPQUhXLENBR0hSLDhCQUhHLENBQWQ7O0FBSUEsZUFBT2pLLEtBQVA7QUFDRDs7QUFFRCxhQUFPLEtBQUswSyxrQkFBTCxDQUF3QmpJLFVBQXhCLEVBQW9DRCxXQUFwQyxFQUFpRGMsVUFBVSxDQUFDMEQsTUFBWCxDQUFrQnBJLEdBQWxCLENBQXNCQyxvQkFBdEIsQ0FBakQsQ0FBUDtBQUNEOzs7V0FFRCwrQkFBc0JxQixLQUF0QixFQUE2QnlLLFlBQTdCLEVBQTJDO0FBQ3pDLFVBQUlDLFlBQVksR0FBR0QsWUFBWSxJQUFJdk4sYUFBbkM7O0FBQ0EsVUFBSSxDQUFDOEMsS0FBTCxFQUFZO0FBQ1YsZUFBTztBQUFBLGlCQUFNMEssWUFBTjtBQUFBLFNBQVA7QUFDRDs7QUFFRCxVQUFNQyxPQUFPLEdBQUcsSUFBSVQsR0FBSixFQUFoQjs7QUFFQSxVQUFJbEssS0FBSyxDQUFDNEssWUFBVixFQUF3QjtBQUN0QkYsUUFBQUEsWUFBWSxHQUFHMUssS0FBSyxDQUFDNEssWUFBckI7QUFDRDs7QUFWd0Msa0RBV1I1SyxLQUFLLENBQUM2SyxTQVhFO0FBQUE7O0FBQUE7QUFXekMsK0RBQWtEO0FBQUE7QUFBQSxjQUF0QzlJLEtBQXNDLGdCQUF0Q0EsS0FBc0M7QUFBQSxjQUEvQitJLFNBQStCLGdCQUEvQkEsU0FBK0I7O0FBQ2hELGNBQUlBLFNBQUosRUFBZTtBQUNiSCxZQUFBQSxPQUFPLENBQUNQLEdBQVIsQ0FBWXJJLEtBQVosRUFBbUIrSSxTQUFuQjtBQUNEO0FBQ0YsU0Fmd0MsQ0FpQnpDOztBQWpCeUM7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFrQnpDLFVBQU1oTCxLQUFLLEdBQUcsNkJBQ1hDLE1BRFcsQ0FDSmlLLEtBQUssQ0FBQ00sSUFBTixDQUFXSyxPQUFPLENBQUN0RixJQUFSLEVBQVgsQ0FESSxFQUVYckYsS0FGVyxDQUVMZ0ssS0FBSyxDQUFDTSxJQUFOLENBQVdLLE9BQU8sQ0FBQ25NLE1BQVIsRUFBWCxDQUZLLEVBR1grTCxPQUhXLENBR0hHLFlBSEcsQ0FBZDtBQUlBLGFBQU81SyxLQUFQO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztXQUNFLHNDQUEyRTtBQUFBOztBQUFBLHFDQUFwRGlMLFlBQW9EO0FBQUEsVUFBcERBLFlBQW9ELG1DQUFyQ3BOLG1CQUFxQztBQUFBLFVBQWhCNkcsYUFBZ0IsU0FBaEJBLGFBQWdCO0FBQ3pFLFVBQU13RyxrQkFBa0IsR0FBRyxFQUEzQixDQUR5RSxDQUd6RTs7QUFDQXpNLE1BQUFBLE1BQU0sQ0FBQzhHLElBQVAsQ0FBWSxLQUFLL0IsY0FBakIsRUFBaUN3QixPQUFqQyxDQUF5QyxVQUFBUSxPQUFPLEVBQUk7QUFBQSxvQ0FhOUMsTUFBSSxDQUFDaEMsY0FBTCxDQUFvQmdDLE9BQXBCLENBYjhDO0FBQUEsWUFFaER2SCxLQUZnRCx5QkFFaERBLEtBRmdEO0FBQUEsWUFHaERrTixLQUhnRCx5QkFHaERBLEtBSGdEO0FBQUEsWUFJaERuTCxLQUpnRCx5QkFJaERBLEtBSmdEO0FBQUEsWUFLaERDLE1BTGdELHlCQUtoREEsTUFMZ0Q7QUFBQSxZQU1oREMsS0FOZ0QseUJBTWhEQSxLQU5nRDtBQUFBLFlBT2hEa0wsUUFQZ0QseUJBT2hEQSxRQVBnRDtBQUFBLFlBUWhENUssWUFSZ0QseUJBUWhEQSxZQVJnRDtBQUFBLFlBU2hENkssaUJBVGdELHlCQVNoREEsaUJBVGdEO0FBQUEsWUFVaEQvSyxTQVZnRCx5QkFVaERBLFNBVmdEO0FBQUEsWUFXaERGLGdCQVhnRCx5QkFXaERBLGdCQVhnRDtBQUFBLFlBWWhEa0wsV0FaZ0QseUJBWWhEQSxXQVpnRDtBQWVsRCxZQUFNQyxjQUFjLEdBQUdwSyxPQUFPLENBQzVCLENBQUNuQixLQUFLLElBQUlJLGdCQUFnQixLQUFLQyxnQ0FBZW1MLFFBQTlDLEtBQTJELE1BQUksQ0FBQ2hNLE1BQUwsQ0FBWXZCLEtBQVosQ0FEL0IsQ0FBOUI7O0FBSUEsWUFBSXNOLGNBQUosRUFBb0I7QUFDbEIsY0FBTUUsSUFBSSxHQUFHLENBQUMsTUFBSSxDQUFDak0sTUFBTCxDQUFZUSxLQUFaLENBQUQsRUFBcUIsTUFBSSxDQUFDUixNQUFMLENBQVlTLE1BQVosQ0FBckIsRUFBMEMsTUFBSSxDQUFDVCxNQUFMLENBQVl5RCxTQUFaLENBQXNCL0MsS0FBdEIsQ0FBMUMsQ0FBYjtBQUNBLGNBQU13TCxPQUFPLEdBQUdQLEtBQUssSUFBSSxNQUFJLENBQUMzTCxNQUFMLENBQVl5RCxTQUFaLENBQXNCa0ksS0FBdEIsQ0FBekIsQ0FGa0IsQ0FHbEI7QUFDQTs7QUFDQSxjQUFNUSxXQUFXLEdBQUcsTUFBSSxDQUFDbk0sTUFBTCxDQUFZdkIsS0FBWixDQUFwQjtBQUNBLGNBQU0yTixnQkFBZ0IsR0FBRyxNQUFJLENBQUNwTSxNQUFMLENBQVl5RCxTQUFaLENBQXNCcUksV0FBdEIsQ0FBekI7QUFFQSxjQUFNTyxhQUFhLEdBQ2pCekwsZ0JBQWdCLEtBQUtDLGdDQUFlbUwsUUFBcEMsR0FDSXJOLGFBREosR0FFSWlDLGdCQUFnQixLQUFLQyxnQ0FBZVAsS0FBcEMsR0FDQSxNQUFJLENBQUNnTSxhQUFMLE9BQUEsTUFBSSxFQUFrQkwsSUFBbEIsQ0FESixHQUVBckwsZ0JBQWdCLEtBQUtDLGdDQUFlMEwsWUFBcEMsR0FDQSxNQUFJLENBQUNDLHFCQUFMLENBQ0UsTUFBSSxDQUFDeE0sTUFBTCxDQUFZeUQsU0FBWixDQUFzQi9DLEtBQXRCLENBREYsRUFFRSxNQUFJLENBQUNWLE1BQUwsQ0FBWXlELFNBQVosQ0FBc0JnSixnQkFGeEIsQ0FEQSxHQUtBLE1BQUksQ0FBQ3ZCLGtCQUFMLE9BQUEsTUFBSSxFQUF1QmUsSUFBdkIsU0FBNkJDLE9BQTdCLEdBVlY7O0FBWUFSLFVBQUFBLGtCQUFrQixDQUFDRSxRQUFELENBQWxCLEdBQStCLFVBQUFyTixDQUFDO0FBQUEsbUJBQzlCLE1BQUksQ0FBQ21PLHNCQUFMLENBQTRCO0FBQzFCMUcsY0FBQUEsT0FBTyxFQUFQQSxPQUQwQjtBQUUxQmQsY0FBQUEsYUFBYSxFQUFiQSxhQUYwQjtBQUcxQjFFLGNBQUFBLEtBQUssRUFBRTZMLGFBSG1CO0FBSTFCckMsY0FBQUEsSUFBSSxFQUFFeUIsWUFBWSxDQUFDdkcsYUFBRCxDQUFaLENBQTRCM0csQ0FBNUIsQ0FKb0I7QUFLMUJFLGNBQUFBLEtBQUssRUFBRTBOLFdBTG1CO0FBTTFCUSxjQUFBQSxZQUFZLEVBQUVQLGdCQU5ZO0FBTzFCdEwsY0FBQUEsU0FBUyxFQUFUQTtBQVAwQixhQUE1QixDQUQ4QjtBQUFBLFdBQWhDO0FBVUQsU0E5QkQsTUE4Qk8sSUFBSSxPQUFPK0ssaUJBQVAsS0FBNkIsVUFBakMsRUFBNkM7QUFDbERILFVBQUFBLGtCQUFrQixDQUFDRSxRQUFELENBQWxCLEdBQStCQyxpQkFBaUIsQ0FBQyxNQUFJLENBQUM3TCxNQUFOLENBQWhEO0FBQ0QsU0FGTSxNQUVBO0FBQ0wwTCxVQUFBQSxrQkFBa0IsQ0FBQ0UsUUFBRCxDQUFsQixHQUNFLE9BQU81SyxZQUFQLEtBQXdCLFVBQXhCLEdBQXFDQSxZQUFZLENBQUMsTUFBSSxDQUFDaEIsTUFBTixDQUFqRCxHQUFpRWdCLFlBRG5FO0FBRUQ7O0FBRUQsWUFBSSxFQUFFNEssUUFBUSxJQUFJRixrQkFBZCxDQUFKLEVBQXVDO0FBQ3JDa0IsMEJBQVFDLElBQVIsbURBQXdEakIsUUFBUSxJQUFJNUYsT0FBcEU7QUFDRDtBQUNGLE9BM0REO0FBNkRBLGFBQU8wRixrQkFBUDtBQUNEOzs7V0FFRCw0QkFBbUJsTCxLQUFuQixFQUEwQkMsTUFBMUIsRUFBa0NDLEtBQWxDLEVBQXlDaUwsS0FBekMsRUFBZ0Q7QUFDOUMsVUFBSW5MLEtBQUssS0FBSzBDLDZCQUFZNEosT0FBMUIsRUFBbUM7QUFDakM7QUFDQSxlQUFPL0IsNEJBQVd2SyxLQUFYLElBQ0pDLE1BREksQ0FDR0EsTUFBTSxDQUFDNEksS0FBUCxDQUFhLENBQWIsRUFBZ0IzSSxLQUFLLENBQUNuQixNQUF0QixDQURILEVBRUptQixLQUZJLENBRUVBLEtBRkYsRUFHSnVLLE9BSEksQ0FHSVIsOEJBSEosQ0FBUDtBQUlELE9BUDZDLENBUzlDO0FBQ0E7OztBQUNBLFVBQU1zQyxnQkFBZ0IsR0FBR3RNLE1BQU0sSUFBS0EsTUFBTSxDQUFDLENBQUQsQ0FBTixLQUFjLENBQWQsSUFBbUJBLE1BQU0sQ0FBQyxDQUFELENBQU4sS0FBY3VNLFFBQXJFO0FBQ0EsVUFBTUMsWUFBWSxHQUFHbEMsNEJBQVdZLEtBQUssR0FBRyxRQUFILEdBQWNuTCxLQUE5QixDQUFyQixDQVo4QyxDQWE5Qzs7QUFDQSxVQUFJME0sTUFBTSxHQUFHRCxZQUFZLEVBQXpCOztBQUNBLFVBQUl4TSxNQUFNLElBQUksQ0FBQ3NNLGdCQUFmLEVBQWlDO0FBQy9CRyxRQUFBQSxNQUFNLEdBQUdBLE1BQU0sQ0FBQ3pNLE1BQVAsQ0FBY0EsTUFBZCxDQUFUO0FBQ0Q7O0FBQ0QsYUFBT3lNLE1BQU0sQ0FBQ3hNLEtBQVAsQ0FBYWlMLEtBQUssR0FBR2xMLE1BQUgsR0FBWUMsS0FBOUIsQ0FBUDtBQUNEO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O1dBQ0UseUJBQWdCd0UsYUFBaEIsRUFBK0JpSSxXQUEvQixFQUE0QztBQUMxQztBQUNBO0FBQ0EsVUFBTUMsVUFBVSxHQUNkbEksYUFBYSxDQUFDbUksT0FBZCxLQUEwQnhQLGVBQTFCLEdBQ0ksdUNBQWNxSCxhQUFkLEVBQTZCckgsZUFBN0IsQ0FESixHQUVJcUgsYUFITjtBQUtBLFVBQU1vSSxNQUFNLEdBQUdGLFVBQVUsQ0FBQ0csUUFBWCxDQUFvQkosV0FBcEIsQ0FBZjtBQUVBLFVBQU1LLFNBQVMsR0FBRyxnQ0FBZ0JGLE1BQWhCLEVBQXdCLENBQXhCLEVBQTJCLENBQUMsQ0FBQyxFQUFGLEVBQU0sRUFBTixDQUEzQixDQUFsQjtBQUNBLFVBQU1HLFNBQVMsR0FBRyxnQ0FBZ0JILE1BQWhCLEVBQXdCLENBQXhCLEVBQTJCLENBQUMsQ0FBQyxHQUFGLEVBQU8sR0FBUCxDQUEzQixDQUFsQjs7QUFFQSxVQUFJLENBQUNFLFNBQUQsSUFBYyxDQUFDQyxTQUFuQixFQUE4QjtBQUM1QixlQUFPLElBQVA7QUFDRDs7QUFFRCxhQUFPLENBQUNBLFNBQVMsQ0FBQyxDQUFELENBQVYsRUFBZUQsU0FBUyxDQUFDLENBQUQsQ0FBeEIsRUFBNkJDLFNBQVMsQ0FBQyxDQUFELENBQXRDLEVBQTJDRCxTQUFTLENBQUMsQ0FBRCxDQUFwRCxDQUFQO0FBQ0Q7OztXQUVELDRCQUFtQkUsa0JBQW5CLEVBQXVDO0FBQ3JDLFVBQU1DLGNBQWMsR0FBRyxxQ0FBbUJELGtCQUFuQixFQUF1QyxLQUFLRSxzQkFBNUMsQ0FBdkI7QUFDQSxXQUFLQSxzQkFBTCxHQUE4QkYsa0JBQTlCO0FBRUEsYUFBT0MsY0FBUDtBQUNEOzs7V0FFRCx1Q0FVRztBQUFBLFVBVEQzSCxPQVNDLFNBVERBLE9BU0M7QUFBQSxVQVJEeEYsS0FRQyxTQVJEQSxLQVFDO0FBQUEsVUFQRHdKLElBT0MsU0FQREEsSUFPQztBQUFBLFVBTkR2TCxLQU1DLFNBTkRBLEtBTUM7QUFBQSxVQUxEeUcsYUFLQyxTQUxEQSxhQUtDO0FBQUEsVUFIRHlILFlBR0MsU0FIREEsWUFHQztBQUFBLGtDQUZEN0wsU0FFQztBQUFBLFVBRkRBLFNBRUMsZ0NBRldDLCtCQUVYO0FBQUEsaUNBREQ4TSxRQUNDO0FBQUEsVUFEREEsUUFDQywrQkFEVXJQLG9CQUNWO0FBQ0QsVUFBSXNQLGdCQUFKO0FBREMsVUFFTXpOLElBRk4sR0FFYzVCLEtBRmQsQ0FFTTRCLElBRk47QUFHRCxVQUFNb0MsS0FBSyxHQUFHb0wsUUFBUSxDQUFDcFAsS0FBRCxFQUFRdUwsSUFBUixDQUF0QjtBQUNBLFVBQU0rRCxhQUFhLEdBQUcsS0FBSy9OLE1BQUwsQ0FBWXlELFNBQVosQ0FBc0IsS0FBS08sY0FBTCxDQUFvQmdDLE9BQXBCLEVBQTZCdEYsS0FBbkQsQ0FBdEI7QUFDQSxVQUFNc04sWUFBWSxHQUFHLEtBQUtoTyxNQUFMLENBQVksS0FBS2dFLGNBQUwsQ0FBb0JnQyxPQUFwQixFQUE2QnZILEtBQXpDLENBQXJCOztBQUVBLFVBQUlzUCxhQUFhLENBQUMxTixJQUFkLEtBQXVCb0gscUJBQTNCLEVBQXFDO0FBQ25DLFlBQU13RyxXQUFXLEdBQUc7QUFDbEJ0TyxVQUFBQSxFQUFFLEVBQUVxTyxZQUFZLENBQUNFLFdBREM7QUFFbEIvSixVQUFBQSxJQUFJLEVBQUU2SixZQUFZLENBQUNFLFdBRkQ7QUFHbEI1SixVQUFBQSxRQUFRLEVBQUUwSixZQUFZLENBQUNHLGNBSEw7QUFJbEJ6UCxVQUFBQSxhQUFhLEVBQUUsdUJBQUFILENBQUMsRUFBSTtBQUNsQixtQkFBTzJHLGFBQWEsQ0FBQ2tKLE9BQWQsQ0FBc0I3UCxDQUFDLENBQUNlLEtBQXhCLEVBQStCME8sWUFBWSxDQUFDRyxjQUE1QyxDQUFQO0FBQ0Q7QUFOaUIsU0FBcEI7QUFTQUwsUUFBQUEsZ0JBQWdCLEdBQUdELFFBQVEsQ0FBQ0ksV0FBRCxFQUFjakUsSUFBZCxDQUEzQjtBQUNELE9BWEQsTUFXTyxJQUFJLENBQUMsbUNBQW1CdkgsS0FBbkIsQ0FBTCxFQUFnQztBQUNyQyxlQUFPM0IsU0FBUDtBQUNEOztBQUVELFVBQUl1TixjQUFKOztBQUNBLFVBQUloTyxJQUFJLEtBQUtpTyxpQ0FBZ0JDLFNBQTdCLEVBQXdDO0FBQ3RDO0FBQ0E7QUFDQUYsUUFBQUEsY0FBYyxHQUFHN04sS0FBSyxDQUFDLElBQUlnTyxJQUFKLENBQVMvTCxLQUFULENBQUQsRUFBa0JxTCxnQkFBbEIsQ0FBdEI7QUFDRCxPQUpELE1BSU87QUFDTE8sUUFBQUEsY0FBYyxHQUFHN04sS0FBSyxDQUFDaUMsS0FBRCxFQUFRcUwsZ0JBQVIsQ0FBdEI7QUFDRDs7QUFFRCxVQUFJLENBQUMsbUNBQW1CTyxjQUFuQixDQUFMLEVBQXlDO0FBQ3ZDQSxRQUFBQSxjQUFjLEdBQUd2TixTQUFqQjtBQUNEOztBQUVELGFBQU91TixjQUFQO0FBQ0Q7OztXQUVELG9CQUFXek8sSUFBWCxFQUFpQjtBQUNmLFdBQUtBLElBQUwsbUNBQWdCLEtBQUtBLElBQXJCLEdBQThCQSxJQUE5QjtBQUNEOzs7V0FFRCwyQkFBa0I2TyxRQUFsQixFQUE0QjtBQUMxQixXQUFLNU8sY0FBTCxHQUFzQjRPLFFBQXRCO0FBQ0Q7OztXQUVELHVDQUFvRDtBQUFBLFVBQTdCekosYUFBNkIsVUFBN0JBLGFBQTZCO0FBQUEsVUFBZHJGLEVBQWMsVUFBZEEsRUFBYztBQUFBLFVBQVYrTyxPQUFVLFVBQVZBLE9BQVU7QUFBQSxVQUMzQ3hPLE9BRDJDLEdBQ2hDLEtBQUtGLE1BRDJCLENBQzNDRSxPQUQyQztBQUdsRDtBQUNFeU8sUUFBQUEsT0FBTyxFQUFFO0FBQUNDLFVBQUFBLFNBQVMsRUFBRWpQLEVBQVo7QUFBZ0IrTyxVQUFBQSxPQUFPLEVBQVBBLE9BQWhCO0FBQXlCeE8sVUFBQUEsT0FBTyxFQUFQQSxPQUF6QjtBQUFrQzhFLFVBQUFBLGFBQWEsRUFBYkE7QUFBbEMsU0FEWDtBQUVFNkosUUFBQUEsT0FBTyxFQUFFO0FBQUNELFVBQUFBLFNBQVMsRUFBRWpQLEVBQVo7QUFBZ0IrTyxVQUFBQSxPQUFPLEVBQVBBLE9BQWhCO0FBQXlCeE8sVUFBQUEsT0FBTyxFQUFQQTtBQUF6QjtBQUZYLFNBR0ssQ0FBQyxLQUFLRixNQUFMLENBQVkwRCxTQUFaLElBQXlCLEVBQTFCLEVBQThCa0QsTUFBOUIsQ0FDRCxVQUFDQyxJQUFELEVBQU9pSSxFQUFQLEVBQVdoRixDQUFYO0FBQUEsK0NBQ0tqRCxJQURMLDJFQUUyQmlELENBRjNCLEdBRWlDZ0YsRUFBRSxDQUFDclEsS0FBSCxHQUFXcVEsRUFBRSxDQUFDclEsS0FBSCxDQUFTMEYsSUFBcEIsR0FBMkIsSUFGNUQ7QUFBQSxPQURDLEVBS0QsRUFMQyxDQUhMO0FBV0Q7OztXQUVELG9CQUFXWSxRQUFYLEVBQXFCZ0ssWUFBckIsRUFBbUM7QUFDakMsVUFBSSxDQUFDLEtBQUsvTyxNQUFMLENBQVlpQyxNQUFqQixFQUF5QjtBQUN2QixlQUFPLEVBQVA7QUFDRDs7QUFDRCxVQUFNK00sT0FBTyxHQUFHLEtBQUtDLFVBQUwsQ0FBZ0JsSyxRQUFoQixDQUFoQjtBQUppQyxVQUsxQkcsYUFMMEIsR0FLVDhKLE9BTFMsQ0FLMUI5SixhQUwwQjtBQU9qQyxXQUFLZ0sseUJBQUwsQ0FBK0JGLE9BQS9CO0FBQ0EsV0FBS0csb0JBQUwsQ0FBMEJILE9BQTFCO0FBRUEsVUFBTTdCLFdBQVcsR0FBRyxLQUFLaUMsbUJBQUwsQ0FBeUJsSyxhQUF6QixDQUFwQjtBQUNBLFVBQU13SSxrQkFBa0IsR0FBRyxLQUFLMkIscUJBQUwsQ0FBMkJMLE9BQTNCLENBQTNCO0FBQ0EsVUFBTXJCLGNBQWMsR0FBRyxLQUFLMkIsa0JBQUwsQ0FBd0I1QixrQkFBeEIsQ0FBdkI7O0FBRUEsVUFBSUMsY0FBYyxDQUFDa0IsT0FBbkIsRUFBNEI7QUFDMUIsYUFBS1UsZUFBTCxDQUFxQnJLLGFBQXJCLEVBQW9DaUksV0FBcEM7QUFDRDs7QUFFRCxVQUFJbkQsSUFBSSxHQUFHLEVBQVg7O0FBRUEsVUFBSSxDQUFDMkQsY0FBYyxDQUFDZ0IsT0FBaEIsSUFBMkJJLFlBQTNCLElBQTJDQSxZQUFZLENBQUMvRSxJQUE1RCxFQUFrRTtBQUNoRTtBQUNBQSxRQUFBQSxJQUFJLEdBQUcrRSxZQUFZLENBQUMvRSxJQUFwQjtBQUNELE9BSEQsTUFHTztBQUNMQSxRQUFBQSxJQUFJLEdBQUcsS0FBS3dGLHNCQUFMLENBQTRCUixPQUE1QixFQUFxQzdCLFdBQXJDLENBQVA7QUFDRDs7QUFFRCxhQUFPO0FBQUNuRCxRQUFBQSxJQUFJLEVBQUpBLElBQUQ7QUFBTzJELFFBQUFBLGNBQWMsRUFBZEE7QUFBUCxPQUFQO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7O1dBQ0UsbUNBQTBCcUIsT0FBMUIsRUFBbUM7QUFBQTs7QUFBQTtBQUFBOztBQUFBO0FBQUEsWUFDckJ2USxLQURxQixxQkFDckJBLEtBRHFCO0FBQUEsWUFDZGlDLEtBRGMscUJBQ2RBLEtBRGM7QUFFL0IsWUFBTStPLFFBQVEsR0FBRyxNQUFJLENBQUN6UCxNQUFMLENBQVl2QixLQUFaLENBQWpCO0FBQ0EsWUFBTWlSLG1CQUFtQiw0QkFBRyxNQUFJLENBQUMxUCxNQUFMLENBQVl5RCxTQUFaLENBQXNCL0MsS0FBdEIsQ0FBSCwwREFBRyxzQkFBOEIrRyxRQUExRDs7QUFDQSxZQUFJLENBQUNnSSxRQUFMLEVBQWU7QUFDYjtBQUFBO0FBQUE7QUFDRDs7QUFDRCxZQUFJRSxlQUFlLEdBQUdYLE9BQU8sQ0FBQ25OLE1BQVIsQ0FBZWdILElBQWYsQ0FBb0IsVUFBQStHLEVBQUU7QUFBQSxpQkFBSUEsRUFBRSxDQUFDekwsSUFBSCxLQUFZc0wsUUFBUSxDQUFDdEwsSUFBekI7QUFBQSxTQUF0QixLQUF3RCxJQUE5RTs7QUFDQSxZQUFJdUwsbUJBQUosRUFBeUI7QUFDdkJDLFVBQUFBLGVBQWUsbUNBQ1ZBLGVBRFU7QUFFYnpCLFlBQUFBLFdBQVcsRUFBRXlCLGVBQWUsQ0FBQ3pCLFdBQWhCLElBQStCdUIsUUFBUSxDQUFDdkIsV0FGeEM7QUFHYkMsWUFBQUEsY0FBYyxFQUFFd0IsZUFBZSxDQUFDeEIsY0FBaEIsSUFBa0NzQixRQUFRLENBQUN0QjtBQUg5QyxZQUFmO0FBS0Q7O0FBQ0QsUUFBQSxNQUFJLENBQUNySSxpQkFBTCxzQ0FBeUJySCxLQUF6QixFQUFpQ2tSLGVBQWpDO0FBZitCOztBQUNqQyx3Q0FBNkIxUSxNQUFNLENBQUNDLE1BQVAsQ0FBYyxLQUFLOEUsY0FBbkIsQ0FBN0Isb0NBQWlFO0FBQUE7O0FBQUE7QUFlaEU7QUFDRjtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7V0FDRSwyQkFBa0JlLFFBQWxCLEVBQTRCOEssU0FBNUIsRUFBdUM7QUFBQTs7QUFDckMsVUFBTUMsS0FBSyxHQUFHLEtBQUtiLFVBQUwsQ0FBZ0JsSyxRQUFoQixDQUFkOztBQUNBLFVBQUksQ0FBQytLLEtBQUwsRUFBWTtBQUNWLGVBQU8sSUFBUDtBQUNEOztBQUNEN1EsTUFBQUEsTUFBTSxDQUFDQyxNQUFQLENBQWMsS0FBSzhFLGNBQW5CLEVBQW1Dd0IsT0FBbkMsQ0FBMkMsVUFBQVEsT0FBTyxFQUFJO0FBQUEsWUFDN0N4RixLQUQ2QyxHQUNwQ3dGLE9BRG9DLENBQzdDeEYsS0FENkM7QUFFcEQsWUFBTXVQLFNBQVMsR0FBRyxNQUFJLENBQUMvUCxNQUFMLENBQVlRLEtBQVosQ0FBbEIsQ0FGb0QsQ0FJcEQ7QUFDQTs7QUFDQSxZQUFJLENBQUNxUCxTQUFELElBQWNFLFNBQVMsS0FBSzdNLDZCQUFZNEosT0FBNUMsRUFBcUQ7QUFBQSxjQUM1Q3JNLE1BRDRDLEdBQ2xDdUYsT0FEa0MsQ0FDNUN2RixNQUQ0Qzs7QUFFbkQsY0FBTXVQLGFBQWEsR0FBRyxNQUFJLENBQUNDLG9CQUFMLENBQTBCSCxLQUExQixFQUFpQzlKLE9BQWpDLENBQXRCOztBQUNBLFVBQUEsTUFBSSxDQUFDRixpQkFBTCxzQ0FBeUJyRixNQUF6QixFQUFrQ3VQLGFBQWxDO0FBQ0Q7QUFDRixPQVhEO0FBYUEsYUFBTyxJQUFQO0FBQ0Q7OztXQUVELG9CQUFXakwsUUFBWCxFQUFxQjtBQUNuQixhQUFPLEtBQUsvRSxNQUFMLENBQVlpQyxNQUFaLEdBQXFCOEMsUUFBUSxDQUFDLEtBQUsvRSxNQUFMLENBQVlpQyxNQUFiLENBQTdCLEdBQW9ELElBQTNEO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7QUFDQTs7OztXQUNFLCtCQUFzQitELE9BQXRCLEVBQStCO0FBQzdCLFdBQUtrSyxpQkFBTCxDQUF1QmxLLE9BQXZCO0FBQ0EsV0FBS21LLGFBQUwsQ0FBbUJuSyxPQUFuQjtBQUNEO0FBRUQ7QUFDRjtBQUNBOzs7O1dBQ0UsMkJBQWtCQSxPQUFsQixFQUEyQjtBQUN6QixVQUFNb0ssYUFBYSxHQUFHLEtBQUtwTSxjQUFMLENBQW9CZ0MsT0FBcEIsQ0FBdEI7QUFEeUIsVUFFbEJ2SCxLQUZrQixHQUU4QjJSLGFBRjlCLENBRWxCM1IsS0FGa0I7QUFBQSxVQUVYbUMsZ0JBRlcsR0FFOEJ3UCxhQUY5QixDQUVYeFAsZ0JBRlc7QUFBQSxVQUVPeVAsbUJBRlAsR0FFOEJELGFBRjlCLENBRU9DLG1CQUZQOztBQUl6QixVQUFJLEtBQUtyUSxNQUFMLENBQVl2QixLQUFaLENBQUosRUFBd0I7QUFDdEI7QUFDQSxZQUFNNlIsMEJBQTBCLEdBQzlCRCxtQkFBbUIsSUFBSUUsZ0RBQStCM1AsZ0JBQS9CLENBRHpCOztBQUdBLFlBQUksQ0FBQzBQLDBCQUEwQixDQUFDcEssUUFBM0IsQ0FBb0MsS0FBS2xHLE1BQUwsQ0FBWXZCLEtBQVosRUFBbUI0QixJQUF2RCxDQUFMLEVBQW1FO0FBQ2pFO0FBQ0E7QUFDQSxlQUFLeUYsaUJBQUwsc0NBQXlCckgsS0FBekIsRUFBaUMsSUFBakM7QUFDRDtBQUNGO0FBQ0Y7QUFFRDtBQUNGO0FBQ0E7Ozs7V0FDRSx1QkFBY3VILE9BQWQsRUFBdUI7QUFDckIsVUFBTW9LLGFBQWEsR0FBRyxLQUFLcE0sY0FBTCxDQUFvQmdDLE9BQXBCLENBQXRCO0FBRHFCLFVBRWR4RixLQUZjLEdBRUU0UCxhQUZGLENBRWQ1UCxLQUZjO0FBQUEsVUFFUEUsS0FGTyxHQUVFMFAsYUFGRixDQUVQMVAsS0FGTzs7QUFHckIsVUFDRSxDQUFDRixLQUFELElBQ0MsS0FBSzhILHNCQUFMLENBQTRCNUgsS0FBNUIsS0FBc0MsS0FBS1YsTUFBTCxDQUFZUSxLQUFaLE1BQXVCMEMsNkJBQVk4SSxRQUY1RSxFQUdFO0FBQ0E7QUFDQTtBQUNEOztBQUNELFVBQU13RSxZQUFZLEdBQUcsS0FBS0MsZUFBTCxDQUFxQnpLLE9BQXJCLENBQXJCLENBVnFCLENBV3JCO0FBQ0E7O0FBQ0EsVUFBSSxDQUFDd0ssWUFBWSxDQUFDdEssUUFBYixDQUFzQixLQUFLbEcsTUFBTCxDQUFZUSxLQUFaLENBQXRCLENBQUwsRUFBZ0Q7QUFDOUMsYUFBS3NGLGlCQUFMLHNDQUF5QnRGLEtBQXpCLEVBQWlDZ1EsWUFBWSxDQUFDLENBQUQsQ0FBN0M7QUFDRDtBQUNGO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7OztXQUNFLHlCQUFnQnhLLE9BQWhCLEVBQXlCO0FBQ3ZCLFVBQU1vSyxhQUFhLEdBQUcsS0FBS3BNLGNBQUwsQ0FBb0JnQyxPQUFwQixDQUF0QjtBQUR1QixVQUVoQnZILEtBRmdCLEdBRWtCMlIsYUFGbEIsQ0FFaEIzUixLQUZnQjtBQUFBLFVBRVQrQixLQUZTLEdBRWtCNFAsYUFGbEIsQ0FFVDVQLEtBRlM7QUFBQSxVQUVGSSxnQkFGRSxHQUVrQndQLGFBRmxCLENBRUZ4UCxnQkFGRTtBQUl2QixhQUFPLEtBQUtaLE1BQUwsQ0FBWXZCLEtBQVosSUFDSGlTLDRCQUFXLEtBQUsxUSxNQUFMLENBQVl2QixLQUFaLEVBQW1CNEIsSUFBOUIsRUFBb0NHLEtBQXBDLENBQTBDSSxnQkFBMUMsQ0FERyxHQUVILENBQUMsS0FBS1gscUJBQUwsR0FBNkJPLEtBQTdCLENBQUQsQ0FGSjtBQUdEOzs7V0FFRCxrQ0FBeUJ3TyxPQUF6QixFQUFrQ2hKLE9BQWxDLEVBQTJDO0FBQ3pDLFVBQU1vSyxhQUFhLEdBQUcsS0FBS3BNLGNBQUwsQ0FBb0JnQyxPQUFwQixDQUF0QjtBQUNBLFdBQUtDLHFCQUFMLENBQTJCRCxPQUEzQixFQUZ5QyxDQUd6Qzs7QUFDQSxVQUFNZ0ssYUFBYSxHQUFHLEtBQUtDLG9CQUFMLENBQTBCakIsT0FBMUIsRUFBbUNvQixhQUFuQyxDQUF0QjtBQUNBLFdBQUt0SyxpQkFBTCxzQ0FBeUJzSyxhQUFhLENBQUMzUCxNQUF2QyxFQUFnRHVQLGFBQWhEO0FBQ0Q7OztXQUVELDBDQUFpQztBQUFBOztBQUMvQixVQUFNVyxjQUFjLEdBQUcsRUFBdkI7QUFDQTFSLE1BQUFBLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjLEtBQUs4RSxjQUFuQixFQUFtQ3dCLE9BQW5DLENBQTJDLFVBQUE0SyxhQUFhLEVBQUk7QUFBQTs7QUFDMUQ7QUFEMEQsWUFFbkR4RSxRQUZtRCxHQUVXd0UsYUFGWCxDQUVuRHhFLFFBRm1EO0FBQUEsWUFFekNuTixLQUZ5QyxHQUVXMlIsYUFGWCxDQUV6QzNSLEtBRnlDO0FBQUEsWUFFbEMrQixLQUZrQyxHQUVXNFAsYUFGWCxDQUVsQzVQLEtBRmtDO0FBQUEsWUFFM0JDLE1BRjJCLEdBRVcyUCxhQUZYLENBRTNCM1AsTUFGMkI7QUFBQSxZQUVuQkMsS0FGbUIsR0FFVzBQLGFBRlgsQ0FFbkIxUCxLQUZtQjtBQUFBLFlBRVpNLFlBRlksR0FFV29QLGFBRlgsQ0FFWnBQLFlBRlk7QUFBQSxZQUVFMkssS0FGRixHQUVXeUUsYUFGWCxDQUVFekUsS0FGRjtBQUkxRGdGLFFBQUFBLGNBQWMsQ0FBQy9FLFFBQUQsQ0FBZCwwRkFDR25OLEtBREgsRUFDVyxNQUFJLENBQUN1QixNQUFMLENBQVl2QixLQUFaLENBRFgscURBRUcrQixLQUZILEVBRVcsTUFBSSxDQUFDUixNQUFMLENBQVlRLEtBQVosQ0FGWCxxREFHR0MsTUFISCxFQUdZLE1BQUksQ0FBQ1QsTUFBTCxDQUFZUyxNQUFaLENBSFoscURBSUdDLEtBSkgsRUFJVyxNQUFJLENBQUNWLE1BQUwsQ0FBWXlELFNBQVosQ0FBc0IvQyxLQUF0QixDQUpYLHFFQUtnQixPQUFPTSxZQUFQLEtBQXdCLFVBQXhCLEdBQXFDQSxZQUFZLENBQUMsTUFBSSxDQUFDaEIsTUFBTixDQUFqRCxHQUFpRWdCLFlBTGpGLHFCQU1NMkssS0FBSyx3Q0FBS0EsS0FBTCxFQUFhLE1BQUksQ0FBQzNMLE1BQUwsQ0FBWXlELFNBQVosQ0FBc0JrSSxLQUF0QixDQUFiLElBQTZDLEVBTnhEO0FBUUQsT0FaRDtBQWFBLGFBQU9nRixjQUFQO0FBQ0Q7OztXQUVELDhCQUFxQjNCLE9BQXJCLEVBQThCb0IsYUFBOUIsRUFBNkM7QUFBQSxVQUNwQzVQLEtBRG9DLEdBQzNCNFAsYUFEMkIsQ0FDcEM1UCxLQURvQztBQUUzQyxVQUFNL0IsS0FBSyxHQUFHLEtBQUt1QixNQUFMLENBQVlvUSxhQUFhLENBQUMzUixLQUExQixDQUFkOztBQUNBLFVBQUksQ0FBQ0EsS0FBRCxJQUFVLENBQUMrQixLQUFmLEVBQXNCO0FBQ3BCO0FBQ0EsZUFBTzFDLGFBQVA7QUFDRDs7QUFFRCxVQUFNaVMsU0FBUyxHQUFHLEtBQUsvUCxNQUFMLENBQVlRLEtBQVosQ0FBbEI7QUFDQSxVQUFNb1EsWUFBWSxHQUFHNUIsT0FBTyxDQUFDbk4sTUFBUixDQUFlZ0gsSUFBZixDQUFvQixVQUFBZ0ksQ0FBQztBQUFBLGVBQUlBLENBQUMsQ0FBQzFNLElBQUYsS0FBVzFGLEtBQUssQ0FBQzBGLElBQXJCO0FBQUEsT0FBckIsQ0FBckI7O0FBQ0EsVUFBSSxDQUFDNEwsU0FBRCxJQUFjLENBQUNhLFlBQW5CLEVBQWlDO0FBQy9CO0FBQ0EsZUFBTzlTLGFBQVA7QUFDRDs7QUFFRCxhQUFPa1IsT0FBTyxDQUFDOEIsb0JBQVIsQ0FBNkJGLFlBQTdCLEVBQTJDYixTQUEzQyxLQUF5RGpTLGFBQWhFO0FBQ0Q7OztXQUVELDhCQUFxQmtSLE9BQXJCLEVBQThCO0FBQUE7O0FBQzVCLFVBQUksQ0FBQ0EsT0FBTCxFQUFjO0FBQ1osZUFBTyxJQUFQO0FBQ0Q7O0FBQ0QvUCxNQUFBQSxNQUFNLENBQUNDLE1BQVAsQ0FBYyxLQUFLOEUsY0FBbkIsRUFBbUN3QixPQUFuQyxDQUEyQyxVQUFBUSxPQUFPLEVBQUk7QUFDcEQsWUFBTStILGFBQWEsR0FBRyxNQUFJLENBQUMvTixNQUFMLENBQVl5RCxTQUFaLENBQXNCdUMsT0FBTyxDQUFDdEYsS0FBOUIsQ0FBdEI7QUFDQSxZQUFNakMsS0FBSyxHQUFHLE1BQUksQ0FBQ3VCLE1BQUwsQ0FBWWdHLE9BQU8sQ0FBQ3ZILEtBQXBCLENBQWQ7O0FBRUEsWUFBSSxDQUFBc1AsYUFBYSxTQUFiLElBQUFBLGFBQWEsV0FBYixZQUFBQSxhQUFhLENBQUUxTixJQUFmLE1BQXdCb0gscUJBQXhCLElBQW9DaEosS0FBcEMsYUFBb0NBLEtBQXBDLGVBQW9DQSxLQUFLLENBQUV5UCxXQUEvQyxFQUE0RDtBQUMxRCxjQUFNMEMsWUFBWSxHQUFHNUIsT0FBTyxDQUFDbk4sTUFBUixDQUFlZ0gsSUFBZixDQUFvQixVQUFBZ0ksQ0FBQztBQUFBLG1CQUFJQSxDQUFDLENBQUMxTSxJQUFGLEtBQVcxRixLQUFLLENBQUN5UCxXQUFyQjtBQUFBLFdBQXJCLENBQXJCO0FBQ0EsY0FBTTFHLE1BQU0sR0FBR3dILE9BQU8sQ0FDbkI4QixvQkFEWSxDQUNTRixZQURULEVBQ3VCMU4sNkJBQVk0SixPQURuQyxFQUVaMU4sR0FGWSxDQUVSLFVBQUFzSyxDQUFDO0FBQUEsbUJBQUksc0NBQXFCQSxDQUFyQixDQUFKO0FBQUEsV0FGTyxDQUFmOztBQUdBLFVBQUEsTUFBSSxDQUFDVixvQkFBTCxzQ0FDR2hELE9BQU8sQ0FBQ3RGLEtBRFgsa0NBQ3VCcU4sYUFEdkI7QUFDc0N2RyxZQUFBQSxNQUFNLEVBQU5BO0FBRHRDO0FBR0Q7QUFDRixPQWJEO0FBZUEsYUFBTyxJQUFQO0FBQ0Q7OztXQUVELGtDQUF5QnpDLFFBQXpCLEVBQW1DO0FBQUE7O0FBQ2pDLFVBQU1pSyxPQUFPLEdBQUcsS0FBS0MsVUFBTCxDQUFnQmxLLFFBQWhCLENBQWhCOztBQUNBLFVBQUksQ0FBQ0EsUUFBTCxFQUFlO0FBQ2I7QUFDRDs7QUFFRCxVQUFNbEYsY0FBYyxHQUFHWixNQUFNLENBQUM4RyxJQUFQLENBQVksS0FBSy9CLGNBQWpCLEVBQWlDNEMsTUFBakMsQ0FBd0MsVUFBQ21LLE9BQUQsRUFBVS9LLE9BQVYsRUFBc0I7QUFBQSxvQ0FDOUMsTUFBSSxDQUFDaEMsY0FBTCxDQUFvQmdDLE9BQXBCLENBRDhDO0FBQUEsWUFDNUV0RixLQUQ0RSx5QkFDNUVBLEtBRDRFO0FBQUEsWUFDOURzTixZQUQ4RCx5QkFDckV2UCxLQURxRTtBQUVuRixZQUFNc1AsYUFBYSxHQUFHLE1BQUksQ0FBQy9OLE1BQUwsQ0FBWXlELFNBQVosQ0FBc0IvQyxLQUF0QixDQUF0QjtBQUNBLFlBQU1qQyxLQUFLLEdBQUcsTUFBSSxDQUFDdUIsTUFBTCxDQUFZZ08sWUFBWixDQUFkOztBQUVBLFlBQUksQ0FBQUQsYUFBYSxTQUFiLElBQUFBLGFBQWEsV0FBYixZQUFBQSxhQUFhLENBQUUxTixJQUFmLE1BQXdCb0gscUJBQXhCLElBQW9DaEosS0FBcEMsYUFBb0NBLEtBQXBDLGVBQW9DQSxLQUFLLENBQUV5UCxXQUEvQyxFQUE0RDtBQUMxRCxjQUFNMEMsWUFBWSxHQUFHNUIsT0FBTyxDQUFDbk4sTUFBUixDQUFlZ0gsSUFBZixDQUFvQixVQUFBZ0ksQ0FBQztBQUFBLG1CQUFJQSxDQUFDLENBQUMxTSxJQUFGLEtBQVcxRixLQUFLLENBQUN5UCxXQUFyQjtBQUFBLFdBQXJCLENBQXJCO0FBQ0EsY0FBTThDLE1BQU0sR0FBR2hDLE9BQU8sQ0FBQ2lDLGVBQVIsQ0FBd0J4UyxLQUF4QixFQUErQm1TLFlBQS9CLENBQWY7QUFDQUcsVUFBQUEsT0FBTyxDQUFDL0ssT0FBRCxDQUFQLEdBQW1CZ0wsTUFBbkI7QUFDRDs7QUFDRCxlQUFPRCxPQUFQO0FBQ0QsT0FYc0IsRUFXcEIsRUFYb0IsQ0FBdkI7QUFZQSxXQUFLRyxpQkFBTCxDQUF1QnJSLGNBQXZCO0FBQ0Q7OztXQUVELDBCQUFpQnNSLFVBQWpCLEVBQTZCO0FBQzNCLGFBQU8sS0FBS0MsY0FBTCxDQUFvQkQsVUFBcEIsS0FBbUNBLFVBQVUsQ0FBQ2xNLE1BQTlDLEdBQXVEa00sVUFBVSxDQUFDbE0sTUFBbEUsR0FBMkUsSUFBbEY7QUFDRDs7O1dBRUQsd0JBQWVrTSxVQUFmLEVBQTJCO0FBQUE7O0FBQ3pCLGFBQU8sQ0FBQUEsVUFBVSxTQUFWLElBQUFBLFVBQVUsV0FBVixZQUFBQSxVQUFVLENBQUVFLE1BQVosS0FBc0IsQ0FBQUYsVUFBVSxTQUFWLElBQUFBLFVBQVUsV0FBVixpQ0FBQUEsVUFBVSxDQUFFRyxLQUFaLGlHQUFtQjVSLEtBQW5CLGdGQUEwQkMsRUFBMUIsTUFBaUMsS0FBS0EsRUFBbkU7QUFDRDs7O1dBRUQsOEJBQXFCNFIsUUFBckIsRUFBK0I7QUFDN0IsVUFBTUMsYUFBYSxHQUFHdlMsTUFBTSxDQUFDQyxNQUFQLENBQWMsS0FBSzhFLGNBQW5CLEVBQW1DNkUsSUFBbkMsQ0FBd0MsVUFBQTRJLEVBQUU7QUFBQSxlQUFJQSxFQUFFLENBQUNsUixRQUFILEtBQWdCLFFBQXBCO0FBQUEsT0FBMUMsQ0FBdEI7O0FBRUEsVUFBSSxDQUFDaVIsYUFBTCxFQUFvQjtBQUNsQixlQUFPLENBQVA7QUFDRDs7QUFFRCxVQUFNL1MsS0FBSyxHQUFHK1MsYUFBYSxDQUFDL1MsS0FBNUI7QUFQNkIsVUFRdEJpVCxNQVJzQixHQVFaLEtBQUsxUixNQUFMLENBQVl5RCxTQVJBLENBUXRCaU8sTUFSc0IsRUFVN0I7O0FBQ0EsYUFBTyxDQUFDLEtBQUsxUixNQUFMLENBQVl2QixLQUFaLElBQXFCLENBQXJCLEdBQXlCaVQsTUFBMUIsSUFBb0MsS0FBS0MsYUFBTCxDQUFtQkosUUFBbkIsQ0FBM0M7QUFDRDs7O1dBRUQsMEJBQWlCO0FBQ2YsVUFBTUMsYUFBYSxHQUFHdlMsTUFBTSxDQUFDQyxNQUFQLENBQWMsS0FBSzhFLGNBQW5CLEVBQW1DNkUsSUFBbkMsQ0FBd0MsVUFBQTRJLEVBQUU7QUFBQSxlQUFJQSxFQUFFLENBQUNsUixRQUFILEtBQWdCLFFBQXBCO0FBQUEsT0FBMUMsQ0FBdEI7O0FBRUEsVUFBSSxDQUFDaVIsYUFBRCxJQUFrQixLQUFLeFIsTUFBTCxDQUFZd1IsYUFBYSxDQUFDL1MsS0FBMUIsQ0FBdEIsRUFBd0Q7QUFDdEQsZUFBTyxDQUFQO0FBQ0Q7O0FBRUQsYUFBTyxLQUFLdUIsTUFBTCxDQUFZeUQsU0FBWixDQUFzQmlPLE1BQTdCO0FBQ0Q7OztXQUVELDRCQUFtQjtBQUFBLDBCQUMyQixLQUFLMVIsTUFEaEM7QUFBQSxVQUNWd0QsV0FEVSxpQkFDVkEsV0FEVTtBQUFBLFVBQ0dELFNBREgsaUJBQ0dBLFNBREg7QUFBQSxVQUNjRSxTQURkLGlCQUNjQSxTQURkO0FBQUEsVUFFVm1PLFdBRlUsR0FFYW5PLFNBRmIsQ0FFVm1PLFdBRlU7QUFBQSxVQUVHRixNQUZILEdBRWFqTyxTQUZiLENBRUdpTyxNQUZIO0FBR2pCLFVBQU1qVCxLQUFLLEdBQUcrRSxXQUFXLElBQUlELFNBQTdCO0FBQ0EsYUFBT3FCLElBQUksQ0FBQ2lOLElBQUwsQ0FBV3BULEtBQUssSUFBSW1ULFdBQVQsR0FBdUJBLFdBQVcsQ0FBQyxDQUFELENBQWxDLEdBQXdDRixNQUFuRCxDQUFQO0FBQ0Q7OztXQUVELGtDQUF5QmhTLEtBQXpCLEVBQWdDO0FBQUE7O0FBQzlCLGFBQU9BLEtBQUssQ0FBQzhJLElBQU4sQ0FBVyxVQUFBakMsQ0FBQztBQUFBLGVBQUksQ0FBQyxPQUFJLENBQUN1TCwyQkFBTCxDQUFpQzVMLFFBQWpDLENBQTBDSyxDQUExQyxDQUFMO0FBQUEsT0FBWixDQUFQO0FBQ0Q7OztXQUVELG1DQUEwQndMLGlCQUExQixFQUE2Q0MsY0FBN0MsRUFBNkQ7QUFBQSxVQUNwREMsS0FEb0QsR0FDM0NGLGlCQUQyQyxDQUNwREUsS0FEb0Q7QUFHM0QsYUFBTztBQUNMO0FBQ0FDLFFBQUFBLGFBQWEsRUFBRSxDQUFDRCxLQUFLLENBQUNqUSxPQUZqQjtBQUdMbVEsUUFBQUEsY0FBYyxFQUFFRixLQUFLLENBQUNqUyxNQUFOLENBQWFpQixJQUFiLEdBQW9CLElBSC9CO0FBSUwrUSxRQUFBQSxjQUFjLEVBQUVBLGNBQWMsSUFBSSxRQUo3QjtBQUtMSSxRQUFBQSxlQUFlLEVBQUVILEtBQUssQ0FBQ2pRO0FBTGxCLE9BQVA7QUFPRDs7O1dBRUQsMENBQTJFO0FBQUEsVUFBakRxUSxHQUFpRCxVQUFqREEsR0FBaUQ7QUFBQSxVQUE1Q0MsU0FBNEMsVUFBNUNBLFNBQTRDO0FBQUEsVUFBakNmLFFBQWlDLFVBQWpDQSxRQUFpQztBQUFBLFVBQXZCZ0IsT0FBdUIsVUFBdkJBLE9BQXVCO0FBQUEsVUFBZEMsV0FBYyxVQUFkQSxXQUFjO0FBQ3pFLFVBQU1DLGtCQUFrQixHQUFHLHVDQUFzQkQsV0FBdEIsQ0FBM0I7QUFDQSw2Q0FDS0Msa0JBREw7QUFFRTlTLFFBQUFBLEVBQUUsRUFBRSxLQUFLQSxFQUZYO0FBR0UwUyxRQUFBQSxHQUFHLEVBQUhBLEdBSEY7QUFJRUssUUFBQUEsZ0JBQWdCLEVBQUVDLHdCQUFrQkMsTUFKdEM7QUFLRUMsUUFBQUEsUUFBUSxFQUFFLEtBQUtDLGdCQUxqQjtBQU1FQyxRQUFBQSxhQUFhLEVBQUUsSUFOakI7QUFPRUMsUUFBQUEsVUFBVSxFQUFFO0FBQUNDLFVBQUFBLFNBQVMsRUFBRXRSLE9BQU8sQ0FBQzRQLFFBQVEsQ0FBQzJCLFVBQVQsSUFBdUIsS0FBS2xULE1BQUwsQ0FBWXlELFNBQVosQ0FBc0IwUCxRQUE5QztBQUFuQixTQVBkO0FBUUVyUSxRQUFBQSxNQUFNLEVBQUUsS0FBSzlDLE1BQUwsQ0FBWThDLE1BUnRCO0FBU0VaLFFBQUFBLGdCQUFnQixFQUFFLEtBQUtsQyxNQUFMLENBQVlrQyxnQkFUaEM7QUFVRTtBQUNBa1IsUUFBQUEsT0FBTyxFQUFFLEtBQUtwVCxNQUFMLENBQVl5RCxTQUFaLENBQXNCMlAsT0FYakM7QUFZRXhRLFFBQUFBLGNBQWMsRUFBRSxLQUFLNUMsTUFBTCxDQUFZNEMsY0FaOUI7QUFhRTtBQUNBeVEsUUFBQUEsVUFBVSxHQUFHdFYsbUJBQUgsNkNBQTJCMFUsa0JBQWtCLENBQUNZLFVBQTlDLEVBZFo7QUFlRUMsUUFBQUEsV0FBVyxFQUFFaEIsU0FBUyxHQUFHQSxTQUFTLENBQUNnQixXQUFiLEdBQTJCQyxTQWZuRDtBQWdCRTtBQUNBaEIsUUFBQUEsT0FBTyxFQUFFLEtBQUt2UyxNQUFMLENBQVkwQyxTQUFaLElBQXlCNlA7QUFqQnBDO0FBbUJEOzs7V0FFRCxxQ0FBNEI7QUFDMUIsYUFBTztBQUNMNVMsUUFBQUEsRUFBRSxZQUFLLEtBQUtBLEVBQVYsYUFERztBQUVMa1QsUUFBQUEsUUFBUSxFQUFFLEtBRkw7QUFHTEUsUUFBQUEsYUFBYSxFQUFFLElBSFY7QUFJTEwsUUFBQUEsZ0JBQWdCLEVBQUVDLHdCQUFrQkM7QUFKL0IsT0FBUDtBQU1EOzs7V0FFRCxzQ0FFRVksVUFGRixFQUdFO0FBQUEsVUFGQ3JHLFdBRUQsVUFGQ0EsV0FFRDtBQUFBLFVBRmNzRyxTQUVkLFVBRmNBLFNBRWQ7QUFBQSxVQUZ5QkMsV0FFekIsVUFGeUJBLFdBRXpCO0FBQUEsVUFGc0MvQyxjQUV0QyxVQUZzQ0EsY0FFdEM7QUFBQSxVQUZzRGdELFdBRXRELFVBRnNEQSxXQUV0RDtBQUFBLFVBQ08zSixJQURQLEdBQ2V3SixVQURmLENBQ094SixJQURQO0FBQUEsMEJBRXNDLEtBQUtoSyxNQUYzQztBQUFBLFVBRU8wRCxTQUZQLGlCQUVPQSxTQUZQO0FBQUEsVUFFa0J4QixnQkFGbEIsaUJBRWtCQSxnQkFGbEI7QUFHQSxVQUFNbVIsVUFBVSxpREFBT00sV0FBVyxDQUFDTixVQUFuQixJQUErQmxWLHdCQUEvQixFQUFoQjs7QUFFQSxVQUFJLENBQUM2TCxJQUFELElBQVMsQ0FBQ0EsSUFBSSxDQUFDNEosVUFBZixJQUE2QixDQUFDNUosSUFBSSxDQUFDNEosVUFBTCxDQUFnQixDQUFoQixDQUE5QixJQUFvRCxDQUFDNUosSUFBSSxDQUFDNEosVUFBTCxDQUFnQixDQUFoQixFQUFtQkMsT0FBNUUsRUFBcUY7QUFDbkYsZUFBTyxFQUFQO0FBQ0Q7O0FBUEQsdURBU29DblEsU0FUcEM7QUFBQSxVQVNPb1EsU0FUUDtBQUFBLFVBU2tCQyxjQVRsQjs7QUFBQSxVQVdFQyxTQVhGLEdBaUJJRixTQWpCSixDQVdFRSxTQVhGO0FBQUEsVUFZRUMsTUFaRixHQWlCSUgsU0FqQkosQ0FZRUcsTUFaRjtBQUFBLFVBYVNDLFFBYlQsR0FpQklKLFNBakJKLENBYUV4VCxLQWJGO0FBQUEsVUFjUzZULFNBZFQsR0FpQklMLFNBakJKLENBY0VyVixLQWRGO0FBQUEsVUFlRTJWLFlBZkYsR0FpQklOLFNBakJKLENBZUVNLFlBZkY7QUFBQSxVQWdCUS9RLFNBaEJSLEdBaUJJeVEsU0FqQkosQ0FnQkU3UyxJQWhCRjs7QUFBQSxtQkF1Qkk4UyxjQUFjLElBQUksRUF2QnRCO0FBQUEsVUFtQlNNLGlCQW5CVCxVQW1CRS9ULEtBbkJGO0FBQUEsVUFvQlNnVSxjQXBCVCxVQW9CRTdWLEtBcEJGO0FBQUEsVUFxQmdCOFYscUJBckJoQixVQXFCRUgsWUFyQkY7QUFBQSxVQXNCUUksa0JBdEJSLFVBc0JFdlQsSUF0QkY7O0FBeUJBLGFBQU8sQ0FDTCxJQUFJd1QsdUJBQUosK0NBQ0tkLFdBREw7QUFHRTtBQUNBO0FBQ0FoVSxRQUFBQSxFQUFFLFlBQUssS0FBS0EsRUFBVixjQUFnQndVLFNBQWhCLGFBQWdCQSxTQUFoQix1QkFBZ0JBLFNBQVMsQ0FBRWhRLElBQTNCLGNBQW1DbVEsY0FBbkMsYUFBbUNBLGNBQW5DLHVCQUFtQ0EsY0FBYyxDQUFFblEsSUFBbkQsV0FMSjtBQU1FNkYsUUFBQUEsSUFBSSxFQUFFQSxJQUFJLENBQUNBLElBTmI7QUFPRTlILFFBQUFBLGdCQUFnQixFQUFoQkEsZ0JBUEY7QUFRRW1SLFFBQUFBLFVBQVUsRUFBVkEsVUFSRjtBQVVFcUIsUUFBQUEsWUFBWSxFQUFFLE1BVmhCO0FBV0VDLFFBQUFBLGdCQUFnQixFQUFFLElBWHBCO0FBWUVDLFFBQUFBLGNBQWMsWUFBSyxLQUFLalYsRUFBVixZQVpoQjtBQWNFa1UsUUFBQUEsT0FBTyxFQUFFN0osSUFBSSxDQUFDNEosVUFBTCxDQUFnQixDQUFoQixFQUFtQkMsT0FkOUI7QUFlRUssUUFBQUEsUUFBUSxFQUFSQSxRQWZGO0FBZ0JFN1EsUUFBQUEsU0FBUyxFQUFUQSxTQWhCRjtBQWlCRStRLFFBQUFBLFlBQVksRUFBWkE7QUFqQkYsU0FtQk1FLGNBQWMsSUFBSTtBQUNwQk8sUUFBQUEsZ0JBQWdCLEVBQUU3SyxJQUFJLENBQUM0SixVQUFMLENBQWdCLENBQWhCLEVBQW1CQyxPQURqQjtBQUVwQlEsUUFBQUEsaUJBQWlCLEVBQWpCQSxpQkFGb0I7QUFHcEJHLFFBQUFBLGtCQUFrQixFQUFsQkEsa0JBSG9CO0FBSXBCRCxRQUFBQSxxQkFBcUIsRUFBckJBO0FBSm9CLE9BbkJ4QjtBQTBCRTtBQUNBcEgsUUFBQUEsV0FBVyxFQUFYQSxXQTNCRjtBQTRCRXNHLFFBQUFBLFNBQVMsRUFBVEEsU0E1QkY7QUE2QkVDLFFBQUFBLFdBQVcsRUFBWEEsV0E3QkY7QUE4QkVvQixRQUFBQSxhQUFhLEVBQUViLE1BOUJqQjtBQStCRWMsUUFBQUEsb0JBQW9CLEVBQUVmLFNBL0J4QjtBQWlDRTtBQUNBZ0IsUUFBQUEsVUFBVSxFQUFFLGFBbENkO0FBbUNFQyxRQUFBQSxZQUFZLEVBQUU7QUFBQ0MsVUFBQUEsR0FBRyxFQUFFO0FBQU4sU0FuQ2hCO0FBb0NFQyxRQUFBQSxVQUFVLEVBQUUsR0FwQ2Q7QUFxQ0VDLFFBQUFBLFlBQVksRUFBRSxDQXJDaEI7QUFzQ0VwQyxRQUFBQSxVQUFVLEVBQUU7QUFDVjtBQUNBQyxVQUFBQSxTQUFTLEVBQUU7QUFGRCxTQXRDZDtBQTJDRW9DLFFBQUFBLGNBQWMsRUFBRXJMLElBQUksQ0FBQ3FMLGNBM0N2QjtBQTRDRTFFLFFBQUFBLGNBQWMsa0NBQ1RBLGNBRFM7QUFFWmtELFVBQUFBLE9BQU8sRUFBRU0sU0FBRixhQUFFQSxTQUFGLHVCQUFFQSxTQUFTLENBQUVoUSxJQUZSO0FBR1orUCxVQUFBQSxRQUFRLEVBQUVDLFNBQUYsYUFBRUEsU0FBRix1QkFBRUEsU0FBUyxDQUFFN1QsS0FIVDtBQUlad1UsVUFBQUEsYUFBYSxFQUFFaEIsU0FBUyxDQUFDRyxNQUpiO0FBS1pjLFVBQUFBLG9CQUFvQixFQUFFakIsU0FBUyxDQUFDRSxTQUxwQjtBQU1aYSxVQUFBQSxnQkFBZ0IsRUFBRVAsY0FBRixhQUFFQSxjQUFGLHVCQUFFQSxjQUFjLENBQUVuUTtBQU50QjtBQTVDaEIsU0FESyxDQUFQO0FBdUREO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O1dBQ0UscUNBQTRCbVIsZUFBNUIsRUFBMEQ7QUFBQSxVQUFiQyxJQUFhLHVFQUFOLElBQU07QUFDeEQsVUFBTUMsV0FBVyxHQUFHLEtBQUtDLGdCQUFMLEVBQXBCO0FBRUEsYUFBTyxVQUFBbFgsQ0FBQyxFQUFJO0FBQ1YsWUFBTW1YLFNBQVMsR0FDWixPQUFPSixlQUFQLEtBQTJCLFVBQTVCLEdBQTBDQSxlQUFlLENBQUMvVyxDQUFELENBQXpELEdBQStEK1csZUFEakU7QUFFQSxZQUFNSyxNQUFNLEdBQUdoVSxPQUFPLENBQUMrVCxTQUFELENBQXRCO0FBQ0FILFFBQUFBLElBQUksR0FBR0ksTUFBTSxHQUFHSixJQUFILEdBQVUsSUFBdkI7QUFDQSxZQUFNSyxHQUFHLEdBQUdELE1BQU0sR0FBR0QsU0FBSCxHQUFlOVgsYUFBakM7QUFDQSxlQUFPO0FBQ0wrQixVQUFBQSxFQUFFLFlBQUtpVyxHQUFMLGVBQWFKLFdBQWIsY0FBNEJELElBQUksR0FBRyxHQUFILEdBQVMsR0FBekMsQ0FERztBQUVMSyxVQUFBQSxHQUFHLEVBQUhBLEdBRks7QUFHTEMsVUFBQUEsS0FBSyxFQUFFTCxXQUhGO0FBSUxNLFVBQUFBLE1BQU0sRUFBRU4sV0FKSDtBQUtMRCxVQUFBQSxJQUFJLEVBQUpBO0FBTEssU0FBUDtBQU9ELE9BYkQ7QUFjRDs7O1dBRUQsZ0NBQXVCUSxXQUF2QixFQUFvQzVJLFdBQXBDLEVBQWlEO0FBQy9DO0FBQ0EsYUFBTyxFQUFQO0FBQ0Q7OztXQUVELHlCQUFnQmpJLGFBQWhCLEVBQStCaUksV0FBL0IsRUFBNEMsQ0FDMUM7QUFDRDs7O1dBRUQsNkJBQW9CakksYUFBcEIsRUFBbUM7QUFDakM7QUFDQSxhQUFPO0FBQUEsZUFBTSxJQUFOO0FBQUEsT0FBUDtBQUNEOzs7V0FFRCxzQkFBYXhFLEtBQWIsRUFBb0I7QUFBQTs7QUFDbEIsVUFBTWpDLEtBQUssc0JBQUdRLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjLEtBQUs4RSxjQUFuQixDQUFILDRFQUFHLGdCQUFvQzZFLElBQXBDLENBQXlDLFVBQUFwRyxLQUFLO0FBQUEsZUFBSUEsS0FBSyxDQUFDL0IsS0FBTixLQUFnQkEsS0FBcEI7QUFBQSxPQUE5QyxDQUFILHlEQUFHLHFCQUEwRWpDLEtBQXhGOztBQUNBLFVBQUlBLEtBQUosRUFBVztBQUNULGVBQU8sS0FBS3VCLE1BQUwsQ0FBWXZCLEtBQVosRUFBbUJ5UCxXQUExQjtBQUNEO0FBQ0Y7OztXQUVELGdDQUF1QnhOLEtBQXZCLEVBQThCO0FBQUE7O0FBQzVCLHNDQUFPLEtBQUtWLE1BQUwsQ0FBWXlELFNBQVosQ0FBc0IvQyxLQUF0QixDQUFQLDBEQUFPLHNCQUE4QitHLFFBQXJDO0FBQ0Q7OztXQTF3Q0QsK0JBQTZCdUgsT0FBN0IsRUFBc0NnSCxXQUF0QyxFQUFtRDtBQUNqRCxhQUFPO0FBQUN0VyxRQUFBQSxLQUFLLEVBQUUsRUFBUjtBQUFZc1csUUFBQUEsV0FBVyxFQUFYQTtBQUFaLE9BQVA7QUFDRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7V0FDRSxnQ0FBOEJDLGFBQTlCLEVBQTZDQyxTQUE3QyxFQUF3RDtBQUN0RDtBQUNBLFVBQU1DLGVBQWUsR0FBR2xYLE1BQU0sQ0FBQzhHLElBQVAsQ0FBWWtRLGFBQVosRUFBMkJyUCxNQUEzQixDQUFrQyxVQUFDd1AsSUFBRCxFQUFPelYsR0FBUCxFQUFlO0FBQ3ZFLFlBQU0wVixjQUFjLEdBQUdILFNBQVMsQ0FBQ3ZOLE1BQVYsQ0FDckIsVUFBQWtJLENBQUM7QUFBQSxpQkFBSUEsQ0FBQyxDQUFDMU0sSUFBRixLQUFXOFIsYUFBYSxDQUFDdFYsR0FBRCxDQUF4QixJQUFpQ3NWLGFBQWEsQ0FBQ3RWLEdBQUQsQ0FBYixDQUFtQnVGLFFBQW5CLENBQTRCMkssQ0FBQyxDQUFDMU0sSUFBOUIsQ0FBckM7QUFBQSxTQURvQixDQUF2QjtBQUlBaVMsUUFBQUEsSUFBSSxDQUFDelYsR0FBRCxDQUFKLEdBQVkwVixjQUFjLENBQUM5VyxNQUFmLEdBQ1I4VyxjQUFjLENBQUNqWCxHQUFmLENBQW1CLFVBQUF5UixDQUFDO0FBQUEsaUJBQUs7QUFDdkJwTyxZQUFBQSxLQUFLLEVBQUVvTyxDQUFDLENBQUMxTSxJQURjO0FBRXZCRyxZQUFBQSxRQUFRLEVBQUV1TSxDQUFDLENBQUN2TTtBQUZXLFdBQUw7QUFBQSxTQUFwQixDQURRLEdBS1IsSUFMSjtBQU1BLGVBQU84UixJQUFQO0FBQ0QsT0FadUIsRUFZckIsRUFacUIsQ0FBeEI7O0FBY0EsVUFBSSxDQUFDblgsTUFBTSxDQUFDQyxNQUFQLENBQWNpWCxlQUFkLEVBQStCN1AsS0FBL0IsQ0FBcUMzRSxPQUFyQyxDQUFMLEVBQW9EO0FBQ2xEO0FBQ0EsZUFBTyxJQUFQO0FBQ0Q7O0FBRUQsYUFBTyxLQUFLMlUseUJBQUwsQ0FBK0JILGVBQS9CLENBQVA7QUFDRDs7O1dBRUQsbUNBQWlDQSxlQUFqQyxFQUFrRDtBQUNoRDtBQUNBO0FBQ0E7QUFDQSxVQUFNSSxPQUFPLEdBQUd0WCxNQUFNLENBQUM4RyxJQUFQLENBQVlvUSxlQUFaLENBQWhCO0FBQ0EsVUFBTUssUUFBUSxHQUFHRCxPQUFPLENBQUNuWCxHQUFSLENBQVksVUFBQ3lMLENBQUQsRUFBSWYsQ0FBSjtBQUFBLGVBQVlBLENBQUMsS0FBS3lNLE9BQU8sQ0FBQ2hYLE1BQVIsR0FBaUIsQ0FBdkIsR0FBMkIsQ0FBQyxDQUE1QixHQUFnQyxDQUE1QztBQUFBLE9BQVosQ0FBakI7QUFDQSxVQUFNa1gsV0FBVyxHQUFHRixPQUFPLENBQUNuWCxHQUFSLENBQVksVUFBQXlMLENBQUM7QUFBQSxlQUFJc0wsZUFBZSxDQUFDdEwsQ0FBRCxDQUFmLENBQW1CdEwsTUFBdkI7QUFBQSxPQUFiLENBQXBCO0FBQ0EsVUFBTW1YLEtBQUssR0FBRyxFQUFkO0FBRUE7O0FBQ0EsYUFBT0MsaUJBQWlCLENBQUNILFFBQUQsRUFBV0MsV0FBWCxFQUF3QkQsUUFBUSxDQUFDalgsTUFBVCxHQUFrQixDQUExQyxDQUF4QixFQUFzRTtBQUNwRSxZQUFNcVgsT0FBTyxHQUFHSixRQUFRLENBQUM1UCxNQUFULENBQWdCLFVBQUN3UCxJQUFELEVBQU9TLElBQVAsRUFBYS9NLENBQWIsRUFBbUI7QUFDakRzTSxVQUFBQSxJQUFJLENBQUNHLE9BQU8sQ0FBQ3pNLENBQUQsQ0FBUixDQUFKLEdBQW1CcU0sZUFBZSxDQUFDSSxPQUFPLENBQUN6TSxDQUFELENBQVIsQ0FBZixDQUE0QitNLElBQTVCLENBQW5CO0FBQ0EsaUJBQU9ULElBQVA7QUFDRCxTQUhlLEVBR2IsRUFIYSxDQUFoQjtBQUtBTSxRQUFBQSxLQUFLLENBQUNoUixJQUFOLENBQVdrUixPQUFYO0FBQ0Q7QUFDRDtBQUVBOzs7QUFDQSxlQUFTRCxpQkFBVCxDQUEyQkcsR0FBM0IsRUFBZ0NDLE1BQWhDLEVBQXdDelgsS0FBeEMsRUFBK0M7QUFDN0MsWUFBSUEsS0FBSyxLQUFLLENBQVYsSUFBZXdYLEdBQUcsQ0FBQyxDQUFELENBQUgsS0FBV0MsTUFBTSxDQUFDLENBQUQsQ0FBTixHQUFZLENBQTFDLEVBQTZDO0FBQzNDO0FBQ0EsaUJBQU8sS0FBUDtBQUNEOztBQUVELFlBQUlELEdBQUcsQ0FBQ3hYLEtBQUQsQ0FBSCxHQUFhLENBQWIsR0FBaUJ5WCxNQUFNLENBQUN6WCxLQUFELENBQTNCLEVBQW9DO0FBQ2xDd1gsVUFBQUEsR0FBRyxDQUFDeFgsS0FBRCxDQUFILEdBQWF3WCxHQUFHLENBQUN4WCxLQUFELENBQUgsR0FBYSxDQUExQjtBQUNBLGlCQUFPLElBQVA7QUFDRDs7QUFFRHdYLFFBQUFBLEdBQUcsQ0FBQ3hYLEtBQUQsQ0FBSCxHQUFhLENBQWI7QUFDQSxlQUFPcVgsaUJBQWlCLENBQUNHLEdBQUQsRUFBTUMsTUFBTixFQUFjelgsS0FBSyxHQUFHLENBQXRCLENBQXhCO0FBQ0Q7O0FBRUQsYUFBT29YLEtBQVA7QUFDRDs7O1dBRUQsa0JBQWdCaE4sQ0FBaEIsRUFBbUI7QUFDakIsYUFBTywwQkFBU0EsQ0FBVCxDQUFQO0FBQ0Q7Ozs7O2VBZ3NDWWpLLEsiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjIgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQge2NvbnNvbGUgYXMgQ29uc29sZX0gZnJvbSAnZ2xvYmFsL3dpbmRvdyc7XG5pbXBvcnQga2V5bWlycm9yIGZyb20gJ2tleW1pcnJvcic7XG5pbXBvcnQge0NvbGxpc2lvbkZpbHRlckV4dGVuc2lvbiwgRGF0YUZpbHRlckV4dGVuc2lvbn0gZnJvbSAnQGRlY2suZ2wvZXh0ZW5zaW9ucyc7XG5pbXBvcnQge0NPT1JESU5BVEVfU1lTVEVNLCBMYXllciBhcyBEZWNrTGF5ZXJ9IGZyb20gJ0BkZWNrLmdsL2NvcmUnO1xuaW1wb3J0IHtfUG9pbnRMYWJlbExheWVyIGFzIFBvaW50TGFiZWxMYXllcn0gZnJvbSAnQGRlY2suZ2wvY2FydG8nO1xuaW1wb3J0IERlZmF1bHRMYXllckljb24gZnJvbSAnLi9kZWZhdWx0LWxheWVyLWljb24nO1xuaW1wb3J0IHtkaWZmVXBkYXRlVHJpZ2dlcnN9IGZyb20gJy4vbGF5ZXItdXBkYXRlJztcbmltcG9ydCB7cmdifSBmcm9tICdkMy1jb2xvcic7XG5cbmltcG9ydCB7XG4gIEFMTF9GSUVMRF9UWVBFUyxcbiAgTk9fVkFMVUVfQ09MT1IsXG4gIFNDQUxFX1RZUEVTLFxuICBDSEFOTkVMX1NDQUxFUyxcbiAgRklFTERfT1BUUyxcbiAgU0NBTEVfRlVOQyxcbiAgQ0hBTk5FTF9TQ0FMRV9TVVBQT1JURURfRklFTERTLFxuICBNQVhfR1BVX0ZJTFRFUlMsXG4gIFVOS05PV05fQ09MT1IsXG4gIFpPT01fTEVWRUxfTElNSVRTXG59IGZyb20gJ2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzJztcbmltcG9ydCB7Q09MT1JfUkFOR0VTLCBoZXhDb2xvcn0gZnJvbSAnY29uc3RhbnRzL2NvbG9yLXJhbmdlcyc7XG5pbXBvcnQge0RhdGFWaXpDb2xvcnN9IGZyb20gJ2NvbnN0YW50cy9jdXN0b20tY29sb3ItcmFuZ2VzJztcbmltcG9ydCB7XG4gIExBWUVSX1ZJU19DT05GSUdTLFxuICBERUZBVUxUX1RFWFRfTEFCRUwsXG4gIERFRkFVTFRfQ09MT1JfVUksXG4gIERFRkFVTFRfSElHSExJR0hUX0NPTE9SLFxuICBERUZBVUxUX0xBWUVSX0xBQkVMXG59IGZyb20gJy4vbGF5ZXItZmFjdG9yeSc7XG5cbmltcG9ydCB7Z2VuZXJhdGVIYXNoSWQsIGlzUGxhaW5PYmplY3R9IGZyb20gJ3V0aWxzL3V0aWxzJztcblxuaW1wb3J0IHtnZXRMYXRMbmdCb3VuZHMsIG5vdE51bGxvclVuZGVmaW5lZH0gZnJvbSAndXRpbHMvZGF0YS11dGlscyc7XG5pbXBvcnQge2dldFNhbXBsZURhdGF9IGZyb20gJ3V0aWxzL3RhYmxlLXV0aWxzL2RhdGEtY29udGFpbmVyLXV0aWxzJztcblxuaW1wb3J0IHtoZXhUb1JnYiwgZ2V0Q29sb3JHcm91cEJ5TmFtZSwgcmV2ZXJzZUNvbG9yUmFuZ2UsIGNoZWNrQ29sb3JPckZhbGxiYWNrfSBmcm9tICd1dGlscy9jb2xvci11dGlscyc7XG5pbXBvcnQge2dldE1hc2tFeHRlbnNpb25Qcm9wc30gZnJvbSAndXRpbHMvbGF5ZXItdXRpbHMnO1xuaW1wb3J0IHtzY2FsZU9yZGluYWx9IGZyb20gJ2QzLXNjYWxlJztcblxuLyoqIEB0eXBlZGVmIHtpbXBvcnQoJy4vaW5kZXgnKS5MYXllcn0gTGF5ZXJDbGFzc30gKi9cblxuLyoqXG4gKiBBcHByb3guIG51bWJlciBvZiBwb2ludHMgdG8gc2FtcGxlIGluIGEgbGFyZ2UgZGF0YSBzZXRcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBMQVlFUl9JRF9MRU5HVEggPSA2O1xuXG4vLyBOb3RlLCB0aGlzIGlzIGlzIFNWRyBvZiBzb2xpZCBjaXJjbGUgZW5jb2RlZCBhcyBkYXRhLXVyaVxuY29uc3QgRkFMTEJBQ0tfSUNPTiA9XG4gICdkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtODtiYXNlNjQsUEhOMlp5QjJhV1YzUW05NFBTSXdJREFnTVRBd0lERXdNQ0lnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JajROQ2lBZ1BHTnBjbU5zWlNCamVEMGlOVEFpSUdONVBTSTFNQ0lnY2owaU5UQWlMejROQ2p3dmMzWm5QZz09JztcblxuY29uc3QgTUFYX1NBTVBMRV9TSVpFID0gNTAwMDtcbmNvbnN0IGRlZmF1bHREb21haW4gPSBbMCwgMV07XG5jb25zdCBkYXRhRmlsdGVyRXh0ZW5zaW9uID0gbmV3IERhdGFGaWx0ZXJFeHRlbnNpb24oe2ZpbHRlclNpemU6IE1BWF9HUFVfRklMVEVSU30pO1xuY29uc3QgY29sbGlzaW9uRmlsdGVyRXh0ZW5zaW9uID0gbmV3IENvbGxpc2lvbkZpbHRlckV4dGVuc2lvbigpO1xuXG5jb25zdCBkZWZhdWx0RGF0YUFjY2Vzc29yID0gZGMgPT4gZCA9PiBkO1xuY29uc3QgZGVmYXVsdEdldEZpZWxkVmFsdWUgPSAoZmllbGQsIGQpID0+IGZpZWxkLnZhbHVlQWNjZXNzb3IoZCk7XG5jb25zdCBzY2FsZUlkZW50aXR5ID0gdiA9PiB2O1xuXG5leHBvcnQgY29uc3QgT1ZFUkxBWV9UWVBFID0ga2V5bWlycm9yKHtcbiAgZGVja2dsOiBudWxsLFxuICBtYXBib3hnbDogbnVsbFxufSk7XG5cbmV4cG9ydCBjb25zdCBsYXllckNvbG9ycyA9IE9iamVjdC52YWx1ZXMoRGF0YVZpekNvbG9ycykubWFwKGhleFRvUmdiKTtcbmZ1bmN0aW9uKiBnZW5lcmF0ZUNvbG9yKCkge1xuICBsZXQgaW5kZXggPSAwO1xuICB3aGlsZSAoaW5kZXggPCBsYXllckNvbG9ycy5sZW5ndGggKyAxKSB7XG4gICAgaWYgKGluZGV4ID09PSBsYXllckNvbG9ycy5sZW5ndGgpIHtcbiAgICAgIGluZGV4ID0gMDtcbiAgICB9XG4gICAgeWllbGQgbGF5ZXJDb2xvcnNbaW5kZXgrK107XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGNvbG9yTWFrZXIgPSBnZW5lcmF0ZUNvbG9yKCk7XG5cbi8qKiBAdHlwZSB7TGF5ZXJDbGFzc30gKi9cbmNsYXNzIExheWVyIHtcbiAgY29uc3RydWN0b3IocHJvcHMgPSB7fSkge1xuICAgIHRoaXMuaWQgPSBwcm9wcy5pZCB8fCBnZW5lcmF0ZUhhc2hJZChMQVlFUl9JRF9MRU5HVEgpO1xuICAgIC8vIG1ldGFcbiAgICB0aGlzLm1ldGEgPSB7fTtcblxuICAgIC8vIGxlZ2VuZFNldHRpbmdzXG4gICAgdGhpcy5sZWdlbmRTZXR0aW5ncyA9IHt9O1xuXG4gICAgLy8gdmlzQ29uZmlnU2V0dGluZ3NcbiAgICB0aGlzLnZpc0NvbmZpZ1NldHRpbmdzID0ge307XG5cbiAgICAvLyBpbnRlcmFjdGl2aXR5U2V0dGluZ3NcbiAgICB0aGlzLl9pbnRlcmFjdGl2aXR5U2V0dGluZ3MgPSB7fTtcblxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICB0aGlzLmNvbmZpZyA9IHRoaXMuZ2V0RGVmYXVsdExheWVyQ29uZmlnKHtcbiAgICAgIGNvbHVtbnM6IHRoaXMuZ2V0TGF5ZXJDb2x1bW5zKCksXG4gICAgICAuLi5wcm9wc1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGxheWVySWNvbigpIHtcbiAgICByZXR1cm4gRGVmYXVsdExheWVySWNvbjtcbiAgfVxuXG4gIGdldCBvdmVybGF5VHlwZSgpIHtcbiAgICByZXR1cm4gT1ZFUkxBWV9UWVBFLmRlY2tnbDtcbiAgfVxuXG4gIGdldCB0eXBlKCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgfVxuXG4gIGdldCBpc0FnZ3JlZ2F0ZWQoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0IHJlcXVpcmVkTGF5ZXJDb2x1bW5zKCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGdldCBvcHRpb25hbENvbHVtbnMoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgZ2V0IG5vbmVMYXllckRhdGFBZmZlY3RpbmdQcm9wcygpIHtcbiAgICByZXR1cm4gWydsYWJlbCcsICdvcGFjaXR5JywgJ3RoaWNrbmVzcycsICdpc1Zpc2libGUnLCAnaGlkZGVuJ107XG4gIH1cblxuICBnZXQgdmlzdWFsQ2hhbm5lbHMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbG9yOiB7XG4gICAgICAgIHByb3BlcnR5OiAnY29sb3InLFxuICAgICAgICBmaWVsZDogJ2NvbG9yRmllbGQnLFxuICAgICAgICBzY2FsZTogJ2NvbG9yU2NhbGUnLFxuICAgICAgICBkb21haW46ICdjb2xvckRvbWFpbicsXG4gICAgICAgIHJhbmdlOiAnY29sb3JSYW5nZScsXG4gICAgICAgIGtleTogJ2NvbG9yJyxcbiAgICAgICAgY2hhbm5lbFNjYWxlVHlwZTogQ0hBTk5FTF9TQ0FMRVMuY29sb3IsXG4gICAgICAgIG51bGxWYWx1ZTogTk9fVkFMVUVfQ09MT1IsXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogY29uZmlnID0+IGNvbmZpZy5jb2xvclxuICAgICAgfSxcbiAgICAgIHNpemU6IHtcbiAgICAgICAgcHJvcGVydHk6ICdzaXplJyxcbiAgICAgICAgZmllbGQ6ICdzaXplRmllbGQnLFxuICAgICAgICBzY2FsZTogJ3NpemVTY2FsZScsXG4gICAgICAgIGRvbWFpbjogJ3NpemVEb21haW4nLFxuICAgICAgICByYW5nZTogJ3NpemVSYW5nZScsXG4gICAgICAgIGtleTogJ3NpemUnLFxuICAgICAgICBjaGFubmVsU2NhbGVUeXBlOiBDSEFOTkVMX1NDQUxFUy5zaXplLFxuICAgICAgICBudWxsVmFsdWU6IDAsXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogMVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKlxuICAgKiBDb2x1bW4gcGFpcnMgbWFwcyBsYXllciBjb2x1bW4gdG8gYSBzcGVjaWZpYyBmaWVsZCBwYWlycyxcbiAgICogQnkgZGVmYXVsdCwgaXQgaXMgc2V0IHRvIG51bGxcbiAgICovXG4gIGdldCBjb2x1bW5QYWlycygpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qXG4gICAqIERlZmF1bHQgcG9pbnQgY29sdW1uIHBhaXJzLCBjYW4gYmUgdXNlZCBmb3IgcG9pbnQgYmFzZWQgbGF5ZXJzOiBwb2ludCwgaWNvbiBldGMuXG4gICAqL1xuICBnZXQgZGVmYXVsdFBvaW50Q29sdW1uUGFpcnMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxhdDoge3BhaXI6ICdsbmcnLCBmaWVsZFBhaXJLZXk6ICdsYXQnfSxcbiAgICAgIGxuZzoge3BhaXI6ICdsYXQnLCBmaWVsZFBhaXJLZXk6ICdsbmcnfVxuICAgIH07XG4gIH1cblxuICAvKlxuICAgKiBEZWZhdWx0IGxpbmsgY29sdW1uIHBhaXJzLCBjYW4gYmUgdXNlZCBmb3IgbGluayBiYXNlZCBsYXllcnM6IGFyYywgbGluZSBldGNcbiAgICovXG4gIGdldCBkZWZhdWx0TGlua0NvbHVtblBhaXJzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBsYXQwOiB7cGFpcjogJ2xuZzAnLCBmaWVsZFBhaXJLZXk6ICdsYXQnfSxcbiAgICAgIGxuZzA6IHtwYWlyOiAnbGF0MCcsIGZpZWxkUGFpcktleTogJ2xuZyd9LFxuICAgICAgbGF0MToge3BhaXI6ICdsbmcxJywgZmllbGRQYWlyS2V5OiAnbGF0J30sXG4gICAgICBsbmcxOiB7cGFpcjogJ2xhdDEnLCBmaWVsZFBhaXJLZXk6ICdsbmcnfVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgUmVhY3QgY29tcG9uZW50IGZvciB0byByZW5kZXIgbGF5ZXIgaW5zdHJ1Y3Rpb25zIGluIGEgbW9kYWxcbiAgICogQHJldHVybnMge29iamVjdH0gLSBhbiBvYmplY3RcbiAgICogQGV4YW1wbGVcbiAgICogIHJldHVybiB7XG4gICAqICAgIGlkOiAnaWNvbkluZm8nLFxuICAgKiAgICB0ZW1wbGF0ZTogSWNvbkluZm9Nb2RhbCxcbiAgICogICAgbW9kYWxQcm9wczoge1xuICAgKiAgICAgIHRpdGxlOiAnSG93IHRvIGRyYXcgaWNvbnMnXG4gICAqICAgfTtcbiAgICogfVxuICAgKi9cbiAgZ2V0IGxheWVySW5mb01vZGFsKCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZ2V0IGludGVyYWN0aXZpdHlTZXR0aW5ncygpIHtcbiAgICByZXR1cm4gdGhpcy5faW50ZXJhY3Rpdml0eVNldHRpbmdzO1xuICB9XG5cbiAgc2V0IGludGVyYWN0aXZpdHlTZXR0aW5ncyhpbnRlcmFjdGl2aXR5U2V0dGluZ3MpIHtcbiAgICB0aGlzLl9pbnRlcmFjdGl2aXR5U2V0dGluZ3MgPSBpbnRlcmFjdGl2aXR5U2V0dGluZ3M7XG4gIH1cblxuICBnZXQgaGFzVG9vbHRpcCgpIHtcbiAgICByZXR1cm4gQm9vbGVhbihcbiAgICAgIHRoaXMuaW50ZXJhY3Rpdml0eVNldHRpbmdzPy5ob3Zlcj8uZmllbGRzLmxlbmd0aCB8fFxuICAgICAgICB0aGlzLmludGVyYWN0aXZpdHlTZXR0aW5ncz8uY2xpY2s/LmZpZWxkcy5sZW5ndGhcbiAgICApO1xuICB9XG5cbiAgZ2V0IGhhc0ludGVyYWN0aXZpdHkoKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4odGhpcy5oYXNUb29sdGlwICYmIHRoaXMuaW50ZXJhY3Rpdml0eVNldHRpbmdzPy5lbmFibGVkKTtcbiAgfVxuXG4gIC8qXG4gICAqIEdpdmVuIGEgZGF0YXNldCwgYXV0b21hdGljYWxseSBmaW5kIHByb3BzIHRvIGNyZWF0ZSBsYXllciBiYXNlZCBvbiBpdFxuICAgKiBhbmQgcmV0dXJuIHRoZSBwcm9wcyBhbmQgcHJldmlvdXMgZm91bmQgbGF5ZXJzLlxuICAgKiBCeSBkZWZhdWx0LCBubyBsYXllcnMgd2lsbCBiZSBmb3VuZFxuICAgKi9cbiAgc3RhdGljIGZpbmREZWZhdWx0TGF5ZXJQcm9wcyhkYXRhc2V0LCBmb3VuZExheWVycykge1xuICAgIHJldHVybiB7cHJvcHM6IFtdLCBmb3VuZExheWVyc307XG4gIH1cblxuICAvKipcbiAgICogR2l2ZW4gYSBhcnJheSBvZiBwcmVzZXQgcmVxdWlyZWQgY29sdW1uIG5hbWVzXG4gICAqIGZvdW5kIGZpZWxkIHRoYXQgaGFzIHRoZSBzYW1lIG5hbWUgdG8gc2V0IGFzIGxheWVyIGNvbHVtblxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZGVmYXVsdEZpZWxkc1xuICAgKiBAcGFyYW0ge29iamVjdFtdfSBhbGxGaWVsZHNcbiAgICogQHJldHVybnMge29iamVjdFtdIHwgbnVsbH0gYWxsIHBvc3NpYmxlIHJlcXVpcmVkIGxheWVyIGNvbHVtbiBwYWlyc1xuICAgKi9cbiAgc3RhdGljIGZpbmREZWZhdWx0Q29sdW1uRmllbGQoZGVmYXVsdEZpZWxkcywgYWxsRmllbGRzKSB7XG4gICAgLy8gZmluZCBhbGwgbWF0Y2hlZCBmaWVsZHMgZm9yIGVhY2ggcmVxdWlyZWQgY29sXG4gICAgY29uc3QgcmVxdWlyZWRDb2x1bW5zID0gT2JqZWN0LmtleXMoZGVmYXVsdEZpZWxkcykucmVkdWNlKChwcmV2LCBrZXkpID0+IHtcbiAgICAgIGNvbnN0IHJlcXVpcmVkRmllbGRzID0gYWxsRmllbGRzLmZpbHRlcihcbiAgICAgICAgZiA9PiBmLm5hbWUgPT09IGRlZmF1bHRGaWVsZHNba2V5XSB8fCBkZWZhdWx0RmllbGRzW2tleV0uaW5jbHVkZXMoZi5uYW1lKVxuICAgICAgKTtcblxuICAgICAgcHJldltrZXldID0gcmVxdWlyZWRGaWVsZHMubGVuZ3RoXG4gICAgICAgID8gcmVxdWlyZWRGaWVsZHMubWFwKGYgPT4gKHtcbiAgICAgICAgICAgIHZhbHVlOiBmLm5hbWUsXG4gICAgICAgICAgICBmaWVsZElkeDogZi5maWVsZElkeFxuICAgICAgICAgIH0pKVxuICAgICAgICA6IG51bGw7XG4gICAgICByZXR1cm4gcHJldjtcbiAgICB9LCB7fSk7XG5cbiAgICBpZiAoIU9iamVjdC52YWx1ZXMocmVxdWlyZWRDb2x1bW5zKS5ldmVyeShCb29sZWFuKSkge1xuICAgICAgLy8gaWYgYW55IGZpZWxkIG1pc3NpbmcsIHJldHVybiBudWxsXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5nZXRBbGxQb3NzaWJsZUNvbHVtblBhcmlzKHJlcXVpcmVkQ29sdW1ucyk7XG4gIH1cblxuICBzdGF0aWMgZ2V0QWxsUG9zc2libGVDb2x1bW5QYXJpcyhyZXF1aXJlZENvbHVtbnMpIHtcbiAgICAvLyBmb3IgbXVsdGlwbGUgbWF0Y2hlZCBmaWVsZCBmb3Igb25lIHJlcXVpcmVkIGNvbHVtbiwgcmV0dXJuIG11bHRpcGxlXG4gICAgLy8gY29tYmluYXRpb25zLCBlLiBnLiBpZiBjb2x1bW4gYSBoYXMgMiBtYXRjaGVkLCBjb2x1bW4gYiBoYXMgMyBtYXRjaGVkXG4gICAgLy8gNiBwb3NzaWJsZSBjb2x1bW4gcGFpcnMgd2lsbCBiZSByZXR1cm5lZFxuICAgIGNvbnN0IGFsbEtleXMgPSBPYmplY3Qua2V5cyhyZXF1aXJlZENvbHVtbnMpO1xuICAgIGNvbnN0IHBvaW50ZXJzID0gYWxsS2V5cy5tYXAoKGssIGkpID0+ICgoaSA9PT0gYWxsS2V5cy5sZW5ndGggLSAxID8gLTEgOiAwKSkpO1xuICAgIGNvbnN0IGNvdW50UGVyS2V5ID0gYWxsS2V5cy5tYXAoayA9PiByZXF1aXJlZENvbHVtbnNba10ubGVuZ3RoKTtcbiAgICBjb25zdCBwYWlycyA9IFtdO1xuXG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tbG9vcC1mdW5jICovXG4gICAgd2hpbGUgKGluY3JlbWVudFBvaW50ZXJzKHBvaW50ZXJzLCBjb3VudFBlcktleSwgcG9pbnRlcnMubGVuZ3RoIC0gMSkpIHtcbiAgICAgIGNvbnN0IG5ld1BhaXIgPSBwb2ludGVycy5yZWR1Y2UoKHByZXYsIGN1dXIsIGkpID0+IHtcbiAgICAgICAgcHJldlthbGxLZXlzW2ldXSA9IHJlcXVpcmVkQ29sdW1uc1thbGxLZXlzW2ldXVtjdXVyXTtcbiAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICB9LCB7fSk7XG5cbiAgICAgIHBhaXJzLnB1c2gobmV3UGFpcik7XG4gICAgfVxuICAgIC8qIGVzbGludC1lbmFibGUgbm8tbG9vcC1mdW5jICovXG5cbiAgICAvLyByZWN1cnNpdmVseSBpbmNyZW1lbnQgcG9pbnRlcnNcbiAgICBmdW5jdGlvbiBpbmNyZW1lbnRQb2ludGVycyhwdHMsIGNvdW50cywgaW5kZXgpIHtcbiAgICAgIGlmIChpbmRleCA9PT0gMCAmJiBwdHNbMF0gPT09IGNvdW50c1swXSAtIDEpIHtcbiAgICAgICAgLy8gbm90aGluZyB0byBpbmNyZW1lbnRcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAocHRzW2luZGV4XSArIDEgPCBjb3VudHNbaW5kZXhdKSB7XG4gICAgICAgIHB0c1tpbmRleF0gPSBwdHNbaW5kZXhdICsgMTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHB0c1tpbmRleF0gPSAwO1xuICAgICAgcmV0dXJuIGluY3JlbWVudFBvaW50ZXJzKHB0cywgY291bnRzLCBpbmRleCAtIDEpO1xuICAgIH1cblxuICAgIHJldHVybiBwYWlycztcbiAgfVxuXG4gIHN0YXRpYyBoZXhUb1JnYihjKSB7XG4gICAgcmV0dXJuIGhleFRvUmdiKGMpO1xuICB9XG5cbiAgZ2V0RGVmYXVsdExheWVyQ29uZmlnKHByb3BzID0ge30pIHtcbiAgICByZXR1cm4ge1xuICAgICAgZGF0YUlkOiBwcm9wcy5kYXRhSWQgfHwgbnVsbCxcbiAgICAgIHZpc2liaWxpdHlCeVpvb206IHtcbiAgICAgICAgbWluOiBwcm9wcy52aXNpYmlsaXR5Qnlab29tPy5taW4gfHwgWk9PTV9MRVZFTF9MSU1JVFMubWluLFxuICAgICAgICBtYXg6IHByb3BzLnZpc2liaWxpdHlCeVpvb20/Lm1heCB8fCBaT09NX0xFVkVMX0xJTUlUUy5tYXhcbiAgICAgIH0sXG4gICAgICBsYWJlbDogcHJvcHMubGFiZWwgfHwgREVGQVVMVF9MQVlFUl9MQUJFTCxcbiAgICAgIGNvbG9yOiBwcm9wcy5jb2xvciB8fCBjb2xvck1ha2VyLm5leHQoKS52YWx1ZSxcbiAgICAgIGNvbHVtbnM6IHByb3BzLmNvbHVtbnMgfHwgbnVsbCxcbiAgICAgIGlzVmlzaWJsZTogcHJvcHMuaXNWaXNpYmxlIHx8IGZhbHNlLFxuICAgICAgaXNDb25maWdBY3RpdmU6IHByb3BzLmlzQ29uZmlnQWN0aXZlIHx8IGZhbHNlLFxuICAgICAgaGlnaGxpZ2h0Q29sb3I6IHByb3BzLmhpZ2hsaWdodENvbG9yIHx8IERFRkFVTFRfSElHSExJR0hUX0NPTE9SLFxuICAgICAgaGlkZGVuOiBwcm9wcy5oaWRkZW4gfHwgZmFsc2UsXG5cbiAgICAgIC8vIFRPRE86IHJlZmFjdG9yIHRoaXMgaW50byBzZXBhcmF0ZSB2aXN1YWwgQ2hhbm5lbCBjb25maWdcbiAgICAgIC8vIGNvbG9yIGJ5IGZpZWxkLCBkb21haW4gaXMgc2V0IGJ5IGZpbHRlcnMsIGZpZWxkLCBzY2FsZSB0eXBlXG4gICAgICBjb2xvckZpZWxkOiBudWxsLFxuICAgICAgY29sb3JEb21haW46IFswLCAxXSxcbiAgICAgIGNvbG9yU2NhbGU6IFNDQUxFX1RZUEVTLnF1YW50aWxlLFxuXG4gICAgICAvLyBjb2xvciBieSBzaXplLCBkb21haW4gaXMgc2V0IGJ5IGZpbHRlcnMsIGZpZWxkLCBzY2FsZSB0eXBlXG4gICAgICBzaXplRG9tYWluOiBbMCwgMV0sXG4gICAgICBzaXplU2NhbGU6IFNDQUxFX1RZUEVTLmxpbmVhcixcbiAgICAgIHNpemVGaWVsZDogbnVsbCxcbiAgICAgIHJhZGl1c0ZpZWxkOiBudWxsLFxuXG4gICAgICB2aXNDb25maWc6IHt9LFxuXG4gICAgICB0ZXh0TGFiZWw6IFtERUZBVUxUX1RFWFRfTEFCRUxdLFxuXG4gICAgICBjb2xvclVJOiB7XG4gICAgICAgIGNvbG9yOiBERUZBVUxUX0NPTE9SX1VJLFxuICAgICAgICBjb2xvclJhbmdlOiBERUZBVUxUX0NPTE9SX1VJXG4gICAgICB9LFxuICAgICAgYW5pbWF0aW9uOiB7ZW5hYmxlZDogZmFsc2V9XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRlc2NyaXB0aW9uIG9mIGEgdmlzdWFsQ2hhbm5lbCBjb25maWdcbiAgICogQHBhcmFtIGtleVxuICAgKiBAcmV0dXJucyB7e2xhYmVsOiBzdHJpbmcsIG1lYXN1cmU6IChzdHJpbmd8c3RyaW5nKX19XG4gICAqL1xuICBnZXRWaXN1YWxDaGFubmVsRGVzY3JpcHRpb24oa2V5KSB7XG4gICAgLy8gZS5nLiBsYWJlbDogQ29sb3IsIG1lYXN1cmU6IFZlaGljbGUgVHlwZVxuICAgIHJldHVybiB7XG4gICAgICBsYWJlbDogdGhpcy52aXNDb25maWdTZXR0aW5nc1t0aGlzLnZpc3VhbENoYW5uZWxzW2tleV0ucmFuZ2VdLmxhYmVsLFxuICAgICAgbWVhc3VyZTogdGhpcy5jb25maWdbdGhpcy52aXN1YWxDaGFubmVsc1trZXldLmZpZWxkXVxuICAgICAgICA/ICh0aGlzLmNvbmZpZ1t0aGlzLnZpc3VhbENoYW5uZWxzW2tleV0uZmllbGRdLmRpc3BsYXlOYW1lIHx8XG4gICAgICAgICAgdGhpcy5jb25maWdbdGhpcy52aXN1YWxDaGFubmVsc1trZXldLmZpZWxkXS5uYW1lKVxuICAgICAgICA6IHRoaXMudmlzdWFsQ2hhbm5lbHNba2V5XS5kZWZhdWx0TWVhc3VyZVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQXNzaWduIGEgZmllbGQgdG8gbGF5ZXIgY29sdW1uLCByZXR1cm4gY29sdW1uIGNvbmZpZ1xuICAgKiBAcGFyYW0ga2V5IC0gQ29sdW1uIEtleVxuICAgKiBAcGFyYW0gZmllbGQgLSBTZWxlY3RlZCBmaWVsZFxuICAgKiBAcmV0dXJucyB7e319IC0gQ29sdW1uIGNvbmZpZ1xuICAgKi9cbiAgYXNzaWduQ29sdW1uKGtleSwgZmllbGQpIHtcbiAgICAvLyBmaWVsZCB2YWx1ZSBjb3VsZCBiZSBudWxsIGZvciBvcHRpb25hbCBjb2x1bW5zXG4gICAgY29uc3QgdXBkYXRlID0gZmllbGRcbiAgICAgID8ge1xuICAgICAgICAgIHZhbHVlOiBmaWVsZC5uYW1lLFxuICAgICAgICAgIGZpZWxkSWR4OiBmaWVsZC5maWVsZElkeFxuICAgICAgICB9XG4gICAgICA6IHt2YWx1ZTogbnVsbCwgZmllbGRJZHg6IC0xfTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmNvbmZpZy5jb2x1bW5zLFxuICAgICAgW2tleV06IHtcbiAgICAgICAgLi4udGhpcy5jb25maWcuY29sdW1uc1trZXldLFxuICAgICAgICAuLi51cGRhdGVcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFzc2lnbiBhIGZpZWxkIHBhaXIgdG8gY29sdW1uIGNvbmZpZywgcmV0dXJuIGNvbHVtbiBjb25maWdcbiAgICogQHBhcmFtIGtleSAtIENvbHVtbiBLZXlcbiAgICogQHBhcmFtIHBhaXIgLSBmaWVsZCBQYWlyXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IC0gQ29sdW1uIGNvbmZpZ1xuICAgKi9cbiAgYXNzaWduQ29sdW1uUGFpcnMoa2V5LCBwYWlyKSB7XG4gICAgaWYgKCF0aGlzLmNvbHVtblBhaXJzIHx8ICF0aGlzLmNvbHVtblBhaXJzPy5ba2V5XSkge1xuICAgICAgLy8gc2hvdWxkIG5vdCBlbmQgaW4gdGhpcyBzdGF0ZVxuICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLmNvbHVtbnM7XG4gICAgfVxuXG4gICAgY29uc3Qge3BhaXI6IHBhcnRuZXJLZXksIGZpZWxkUGFpcktleX0gPSB0aGlzLmNvbHVtblBhaXJzPy5ba2V5XTtcbiAgICBjb25zdCB7ZmllbGRQYWlyS2V5OiBwYXJ0bmVyRmllbGRQYWlyS2V5fSA9IHRoaXMuY29sdW1uUGFpcnM/LltwYXJ0bmVyS2V5XTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmNvbmZpZy5jb2x1bW5zLFxuICAgICAgW2tleV06IHBhaXJbZmllbGRQYWlyS2V5XSxcbiAgICAgIFtwYXJ0bmVyS2V5XTogcGFpcltwYXJ0bmVyRmllbGRQYWlyS2V5XVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIGEgcmFkaXVzIHpvb20gbXVsdGlwbGllciB0byByZW5kZXIgcG9pbnRzLCBzbyB0aGV5IGFyZSB2aXNpYmxlIGluIGFsbCB6b29tIGxldmVsXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBtYXBTdGF0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gbWFwU3RhdGUuem9vbSAtIGFjdHVhbCB6b29tXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgdm9pZH0gbWFwU3RhdGUuem9vbU9mZnNldCAtIHpvb21PZmZzZXQgd2hlbiByZW5kZXIgaW4gdGhlIHBsb3QgY29udGFpbmVyIGZvciBleHBvcnQgaW1hZ2VcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldFpvb21GYWN0b3Ioe3pvb20sIHpvb21PZmZzZXQgPSAwfSkge1xuICAgIHJldHVybiBNYXRoLnBvdygyLCBNYXRoLm1heCgxNCAtIHpvb20gKyB6b29tT2Zmc2V0LCAwKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIGEgZWxldmF0aW9uIHpvb20gbXVsdGlwbGllciB0byByZW5kZXIgcG9pbnRzLCBzbyB0aGV5IGFyZSB2aXNpYmxlIGluIGFsbCB6b29tIGxldmVsXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBtYXBTdGF0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gbWFwU3RhdGUuem9vbSAtIGFjdHVhbCB6b29tXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgdm9pZH0gbWFwU3RhdGUuem9vbU9mZnNldCAtIHpvb21PZmZzZXQgd2hlbiByZW5kZXIgaW4gdGhlIHBsb3QgY29udGFpbmVyIGZvciBleHBvcnQgaW1hZ2VcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldEVsZXZhdGlvblpvb21GYWN0b3Ioe3pvb20sIHpvb21PZmZzZXQgPSAwfSkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy52aXNDb25maWcuZW5hYmxlRWxldmF0aW9uWm9vbUZhY3RvclxuICAgICAgPyBNYXRoLnBvdygyLCBNYXRoLm1heCg4IC0gem9vbSArIHpvb21PZmZzZXQsIDApKVxuICAgICAgOiAxO1xuICB9XG5cbiAgZm9ybWF0TGF5ZXJEYXRhKGRhdGFzZXRzLCBmaWx0ZXJlZEluZGV4KSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcmVuZGVyTGF5ZXIoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgZ2V0SG92ZXJEYXRhKG9iamVjdCwgZGF0YUNvbnRhaW5lcikge1xuICAgIGlmICghb2JqZWN0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBCeSBkZWZhdWx0LCBlYWNoIGVudHJ5IG9mIGxheWVyRGF0YSBzaG91bGQgaGF2ZSBhbiBpbmRleCBvZiBhIHJvdyBpbiB0aGUgb3JpZ2luYWwgZGF0YSBjb250YWluZXIuXG4gICAgLy8gRWFjaCBsYXllciBjYW4gaW1wbGVtZW50IGl0cyBvd24gZ2V0SG92ZXJEYXRhIG1ldGhvZFxuICAgIHJldHVybiBkYXRhQ29udGFpbmVyLnJvdyhvYmplY3QuaW5kZXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gY2hhbmdlIGxheWVyIHR5cGUsIHRyeSB0byBjb3B5IG92ZXIgbGF5ZXIgY29uZmlncyBhcyBtdWNoIGFzIHBvc3NpYmxlXG4gICAqIEBwYXJhbSBjb25maWdUb0NvcHkgLSBjb25maWcgdG8gY29weSBvdmVyXG4gICAqIEBwYXJhbSB2aXNDb25maWdTZXR0aW5ncyAtIHZpc0NvbmZpZyBzZXR0aW5ncyBvZiBjb25maWcgdG8gY29weVxuICAgKi9cbiAgYXNzaWduQ29uZmlnVG9MYXllcihjb25maWdUb0NvcHksIHZpc0NvbmZpZ1NldHRpbmdzKSB7XG4gICAgLy8gZG9uJ3QgZGVlcCBtZXJnZSB2aXN1YWxDaGFubmVsIGZpZWxkXG4gICAgLy8gZG9uJ3QgZGVlcCBtZXJnZSBjb2xvciByYW5nZSwgcmV2ZXJzZWQ6IGlzIG5vdCBhIGtleSBieSBkZWZhdWx0XG4gICAgY29uc3Qgc2hhbGxvd0NvcHkgPSBbJ2NvbG9yUmFuZ2UnLCAnc3Ryb2tlQ29sb3JSYW5nZSddLmNvbmNhdChcbiAgICAgIE9iamVjdC52YWx1ZXModGhpcy52aXN1YWxDaGFubmVscykubWFwKHYgPT4gdi5maWVsZClcbiAgICApO1xuXG4gICAgLy8gZG9uJ3QgY29weSBvdmVyIGRvbWFpbiBhbmQgYW5pbWF0aW9uXG4gICAgY29uc3Qgbm90VG9Db3B5ID0gWydhbmltYXRpb24nXS5jb25jYXQoT2JqZWN0LnZhbHVlcyh0aGlzLnZpc3VhbENoYW5uZWxzKS5tYXAodiA9PiB2LmRvbWFpbikpO1xuICAgIC8vIGlmIHJhbmdlIGlzIGZvciB0aGUgc2FtZSBwcm9wZXJ0eSBncm91cCBjb3B5IGl0LCBvdGhlcndpc2UsIG5vdCB0byBjb3B5XG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKHYgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBjb25maWdUb0NvcHkudmlzQ29uZmlnW3YucmFuZ2VdICYmXG4gICAgICAgIHRoaXMudmlzQ29uZmlnU2V0dGluZ3Nbdi5yYW5nZV0gJiZcbiAgICAgICAgdmlzQ29uZmlnU2V0dGluZ3Nbdi5yYW5nZV0uZ3JvdXAgIT09IHRoaXMudmlzQ29uZmlnU2V0dGluZ3Nbdi5yYW5nZV0uZ3JvdXBcbiAgICAgICkge1xuICAgICAgICBub3RUb0NvcHkucHVzaCh2LnJhbmdlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIGRvbid0IGNvcHkgb3ZlciB2aXN1YWxDaGFubmVsIHJhbmdlXG4gICAgY29uc3QgY3VycmVudENvbmZpZyA9IHRoaXMuY29uZmlnO1xuICAgIGNvbnN0IGNvcGllZCA9IHRoaXMuY29weUxheWVyQ29uZmlnKGN1cnJlbnRDb25maWcsIGNvbmZpZ1RvQ29weSwge1xuICAgICAgc2hhbGxvd0NvcHksXG4gICAgICBub3RUb0NvcHlcbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZUxheWVyQ29uZmlnKGNvcGllZCk7XG4gICAgLy8gdmFsaWRhdGUgdmlzdWFsQ2hhbm5lbCBmaWVsZCB0eXBlIGFuZCBzY2FsZSB0eXBlc1xuICAgIE9iamVjdC5rZXlzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goY2hhbm5lbCA9PiB7XG4gICAgICB0aGlzLnZhbGlkYXRlVmlzdWFsQ2hhbm5lbChjaGFubmVsKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qXG4gICAqIFJlY3Vyc2l2ZWx5IGNvcHkgY29uZmlnIG92ZXIgdG8gYW4gZW1wdHkgbGF5ZXJcbiAgICogd2hlbiByZWNlaXZlZCBzYXZlZCBjb25maWcsIG9yIGNvcHkgY29uZmlnIG92ZXIgZnJvbSBhIGRpZmZlcmVudCBsYXllciB0eXBlXG4gICAqIG1ha2Ugc3VyZSB0byBvbmx5IGNvcHkgb3ZlciB2YWx1ZSB0byBleGlzdGluZyBrZXlzXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjdXJyZW50Q29uZmlnIC0gZXhpc3RpbmcgY29uZmlnIHRvIGJlIG92ZXJyaWRlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWdUb0NvcHkgLSBuZXcgQ29uZmlnIHRvIGNvcHkgb3ZlclxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBzaGFsbG93Q29weSAtIGFycmF5IG9mIHByb3BlcnRpZXMgdG8gbm90IHRvIGJlIGRlZXAgY29waWVkXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IG5vdFRvQ29weSAtIGFycmF5IG9mIHByb3BlcnRpZXMgbm90IHRvIGNvcHlcbiAgICogQHJldHVybnMge29iamVjdH0gLSBjb3BpZWQgY29uZmlnXG4gICAqL1xuICBjb3B5TGF5ZXJDb25maWcoY3VycmVudENvbmZpZywgY29uZmlnVG9Db3B5LCB7c2hhbGxvd0NvcHkgPSBbXSwgbm90VG9Db3B5ID0gW119ID0ge30pIHtcbiAgICBjb25zdCBjb3BpZWQgPSB7fTtcbiAgICBPYmplY3Qua2V5cyhjdXJyZW50Q29uZmlnKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGlzUGxhaW5PYmplY3QoY3VycmVudENvbmZpZ1trZXldKSAmJlxuICAgICAgICBpc1BsYWluT2JqZWN0KGNvbmZpZ1RvQ29weVtrZXldKSAmJlxuICAgICAgICAhc2hhbGxvd0NvcHkuaW5jbHVkZXMoa2V5KSAmJlxuICAgICAgICAhbm90VG9Db3B5LmluY2x1ZGVzKGtleSlcbiAgICAgICkge1xuICAgICAgICAvLyByZWN1cnNpdmVseSBhc3NpZ24gb2JqZWN0IHZhbHVlXG4gICAgICAgIGNvcGllZFtrZXldID0gdGhpcy5jb3B5TGF5ZXJDb25maWcoY3VycmVudENvbmZpZ1trZXldLCBjb25maWdUb0NvcHlba2V5XSwge1xuICAgICAgICAgIHNoYWxsb3dDb3B5LFxuICAgICAgICAgIG5vdFRvQ29weVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAobm90TnVsbG9yVW5kZWZpbmVkKGNvbmZpZ1RvQ29weVtrZXldKSAmJiAhbm90VG9Db3B5LmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgLy8gY29weVxuICAgICAgICBjb3BpZWRba2V5XSA9IGNvbmZpZ1RvQ29weVtrZXldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8ga2VlcCBleGlzdGluZ1xuICAgICAgICBjb3BpZWRba2V5XSA9IGN1cnJlbnRDb25maWdba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBjb3BpZWQ7XG4gIH1cblxuICByZWdpc3RlclZpc0NvbmZpZyhsYXllclZpc0NvbmZpZ3MpIHtcbiAgICBPYmplY3Qua2V5cyhsYXllclZpc0NvbmZpZ3MpLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnICYmIExBWUVSX1ZJU19DT05GSUdTW2xheWVyVmlzQ29uZmlnc1tpdGVtXV0pIHtcbiAgICAgICAgLy8gaWYgYXNzaWduZWQgb25lIG9mIGRlZmF1bHQgTEFZRVJfQ09ORklHU1xuICAgICAgICB0aGlzLmNvbmZpZy52aXNDb25maWdbaXRlbV0gPSBMQVlFUl9WSVNfQ09ORklHU1tsYXllclZpc0NvbmZpZ3NbaXRlbV1dLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgdGhpcy52aXNDb25maWdTZXR0aW5nc1tpdGVtXSA9IExBWUVSX1ZJU19DT05GSUdTW2xheWVyVmlzQ29uZmlnc1tpdGVtXV07XG4gICAgICB9IGVsc2UgaWYgKFsndHlwZScsICdkZWZhdWx0VmFsdWUnXS5ldmVyeShwID0+IGxheWVyVmlzQ29uZmlnc1tpdGVtXS5oYXNPd25Qcm9wZXJ0eShwKSkpIHtcbiAgICAgICAgLy8gaWYgcHJvdmlkZWQgY3VzdG9taXplZCB2aXNDb25maWcsIGFuZCBoYXMgdHlwZSAmJiBkZWZhdWx0VmFsdWVcbiAgICAgICAgLy8gVE9ETzogZnVydGhlciBjaGVjayBpZiBjdXN0b21pemVkIHZpc0NvbmZpZyBpcyB2YWxpZFxuICAgICAgICB0aGlzLmNvbmZpZy52aXNDb25maWdbaXRlbV0gPSBsYXllclZpc0NvbmZpZ3NbaXRlbV0uZGVmYXVsdFZhbHVlO1xuICAgICAgICB0aGlzLnZpc0NvbmZpZ1NldHRpbmdzW2l0ZW1dID0gbGF5ZXJWaXNDb25maWdzW2l0ZW1dO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0TGF5ZXJDb2x1bW5zKCkge1xuICAgIGNvbnN0IGNvbHVtblZhbGlkYXRvcnMgPSB0aGlzLmNvbHVtblZhbGlkYXRvcnMgfHwge307XG4gICAgY29uc3QgcmVxdWlyZWQgPSB0aGlzLnJlcXVpcmVkTGF5ZXJDb2x1bW5zLnJlZHVjZShcbiAgICAgIChhY2N1LCBrZXkpID0+ICh7XG4gICAgICAgIC4uLmFjY3UsXG4gICAgICAgIFtrZXldOiBjb2x1bW5WYWxpZGF0b3JzW2tleV1cbiAgICAgICAgICA/IHt2YWx1ZTogbnVsbCwgZmllbGRJZHg6IC0xLCB2YWxpZGF0b3I6IGNvbHVtblZhbGlkYXRvcnNba2V5XX1cbiAgICAgICAgICA6IHt2YWx1ZTogbnVsbCwgZmllbGRJZHg6IC0xfVxuICAgICAgfSksXG4gICAgICB7fVxuICAgICk7XG4gICAgY29uc3Qgb3B0aW9uYWwgPSB0aGlzLm9wdGlvbmFsQ29sdW1ucy5yZWR1Y2UoXG4gICAgICAoYWNjdSwga2V5KSA9PiAoe1xuICAgICAgICAuLi5hY2N1LFxuICAgICAgICBba2V5XToge3ZhbHVlOiBudWxsLCBmaWVsZElkeDogLTEsIG9wdGlvbmFsOiB0cnVlfVxuICAgICAgfSksXG4gICAgICB7fVxuICAgICk7XG5cbiAgICByZXR1cm4gey4uLnJlcXVpcmVkLCAuLi5vcHRpb25hbH07XG4gIH1cblxuICB1cGRhdGVMYXllckNvbmZpZyhuZXdDb25maWcpIHtcbiAgICB0aGlzLmNvbmZpZyA9IHsuLi50aGlzLmNvbmZpZywgLi4ubmV3Q29uZmlnfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHVwZGF0ZUxheWVyVmlzQ29uZmlnKG5ld1Zpc0NvbmZpZykge1xuICAgIHRoaXMuY29uZmlnLnZpc0NvbmZpZyA9IHsuLi50aGlzLmNvbmZpZy52aXNDb25maWcsIC4uLm5ld1Zpc0NvbmZpZ307XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB1cGRhdGVMYXllckNvbG9yVUkocHJvcCwgbmV3Q29uZmlnKSB7XG4gICAgY29uc3Qge2NvbG9yVUk6IHByZXZpb3VzLCB2aXNDb25maWd9ID0gdGhpcy5jb25maWc7XG5cbiAgICBpZiAoIWlzUGxhaW5PYmplY3QobmV3Q29uZmlnKSB8fCB0eXBlb2YgcHJvcCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbG9yVUlQcm9wID0gT2JqZWN0LmVudHJpZXMobmV3Q29uZmlnKS5yZWR1Y2UoKGFjY3UsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgW2tleV06IGlzUGxhaW5PYmplY3QoYWNjdVtrZXldKSAmJiBpc1BsYWluT2JqZWN0KHZhbHVlKSA/IHsuLi5hY2N1W2tleV0sIC4uLnZhbHVlfSA6IHZhbHVlXG4gICAgICB9O1xuICAgIH0sIHByZXZpb3VzW3Byb3BdIHx8IERFRkFVTFRfQ09MT1JfVUkpO1xuXG4gICAgY29uc3QgY29sb3JVSSA9IHtcbiAgICAgIC4uLnByZXZpb3VzLFxuICAgICAgW3Byb3BdOiBjb2xvclVJUHJvcFxuICAgIH07XG5cbiAgICB0aGlzLnVwZGF0ZUxheWVyQ29uZmlnKHtjb2xvclVJfSk7XG4gICAgLy8gaWYgY29sb3JVSVtwcm9wXSBpcyBjb2xvclJhbmdlLiBJZiB0eXBlIGlzIGhleENvbG9yIHRoZW4gaXQncyBhbHNvIGEgcmFuZ2VcbiAgICBjb25zdCBpc0NvbG9yUmFuZ2UgPVxuICAgICAgdmlzQ29uZmlnW3Byb3BdICYmICh2aXNDb25maWdbcHJvcF0uY29sb3JzIHx8IHZpc0NvbmZpZ1twcm9wXS50eXBlID09PSBoZXhDb2xvcik7XG5cbiAgICBpZiAoaXNDb2xvclJhbmdlKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNvbG9yVUlCeUNvbG9yUmFuZ2UobmV3Q29uZmlnLCBwcm9wKTtcbiAgICAgIHRoaXMudXBkYXRlQ29sb3JSYW5nZUJ5Q29sb3JVSShuZXdDb25maWcsIHByZXZpb3VzLCBwcm9wKTtcbiAgICAgIHRoaXMudXBkYXRlQ3VzdG9tUGFsZXR0ZShuZXdDb25maWcsIHByZXZpb3VzLCBwcm9wKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHVwZGF0ZUN1c3RvbVBhbGV0dGUobmV3Q29uZmlnLCBwcmV2aW91cywgcHJvcCkge1xuICAgIGlmICghbmV3Q29uZmlnLmNvbG9yUmFuZ2VDb25maWcgfHwgIW5ld0NvbmZpZy5jb2xvclJhbmdlQ29uZmlnLmN1c3RvbSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHtjb2xvclVJLCB2aXNDb25maWd9ID0gdGhpcy5jb25maWc7XG5cbiAgICBpZiAoIXZpc0NvbmZpZ1twcm9wXSkgcmV0dXJuO1xuICAgIGNvbnN0IHtjb2xvcnN9ID0gdmlzQ29uZmlnW3Byb3BdO1xuICAgIGNvbnN0IGN1c3RvbVBhbGV0dGUgPSB7XG4gICAgICAuLi5jb2xvclVJW3Byb3BdLmN1c3RvbVBhbGV0dGUsXG4gICAgICBuYW1lOiAnQ3VzdG9tIFBhbGV0dGUnLFxuICAgICAgY29sb3JzOiBbLi4uY29sb3JzXVxuICAgIH07XG4gICAgdGhpcy51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICBjb2xvclVJOiB7XG4gICAgICAgIC4uLmNvbG9yVUksXG4gICAgICAgIFtwcm9wXToge1xuICAgICAgICAgIC4uLmNvbG9yVUlbcHJvcF0sXG4gICAgICAgICAgY3VzdG9tUGFsZXR0ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIGlmIG9wZW4gZHJvcGRvd24gYW5kIHByb3AgaXMgY29sb3IgcmFuZ2VcbiAgICogQXV0b21hdGljYWxseSBzZXQgY29sb3JSYW5nZUNvbmZpZydzIHN0ZXAsIHJldmVyc2VkIGFuZCB0eXBlXG4gICAqIEBwYXJhbSB7Kn0gbmV3Q29uZmlnXG4gICAqIEBwYXJhbSB7Kn0gcHJvcFxuICAgKi9cbiAgdXBkYXRlQ29sb3JVSUJ5Q29sb3JSYW5nZShuZXdDb25maWcsIHByb3ApIHtcbiAgICBpZiAodHlwZW9mIG5ld0NvbmZpZy5zaG93RHJvcGRvd24gIT09ICdudW1iZXInKSByZXR1cm47XG5cbiAgICBjb25zdCB7Y29sb3JVSSwgdmlzQ29uZmlnfSA9IHRoaXMuY29uZmlnO1xuICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgY29sb3JVSToge1xuICAgICAgICAuLi5jb2xvclVJLFxuICAgICAgICBbcHJvcF06IHtcbiAgICAgICAgICAuLi5jb2xvclVJW3Byb3BdLFxuICAgICAgICAgIGNvbG9yUmFuZ2VDb25maWc6IHtcbiAgICAgICAgICAgIC4uLmNvbG9yVUlbcHJvcF0uY29sb3JSYW5nZUNvbmZpZyxcbiAgICAgICAgICAgIHR5cGU6IHZpc0NvbmZpZ1twcm9wXS50eXBlLFxuICAgICAgICAgICAgc3RlcHM6IHZpc0NvbmZpZ1twcm9wXS5jb2xvcnM/Lmxlbmd0aCxcbiAgICAgICAgICAgIHJldmVyc2VkOiBCb29sZWFuKHZpc0NvbmZpZ1twcm9wXS5yZXZlcnNlZCksXG4gICAgICAgICAgICBoZXhDb2x1bW46IHRoaXMuZ2V0SGV4Q29sdW1uKHByb3ApLFxuICAgICAgICAgICAgaXNIZXhDb2x1bW46IHRoaXMuaXNDb2xvcmVkQnlDb2xvckNvbHVtbihwcm9wKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbiAgdXBkYXRlQ29sb3JSYW5nZUJ5Q29sb3JVSShuZXdDb25maWcsIHByZXZpb3VzLCBwcm9wKSB7XG4gICAgLy8gb25seSB1cGRhdGUgY29sb3JSYW5nZSBpZiBjaGFuZ2VzIGluIFVJIGlzIG1hZGUgdG8gJ3JldmVyc2VkJywgJ3N0ZXBzJyBvciBzdGVwc1xuICAgIGNvbnN0IHNob3VsZFVwZGF0ZSA9XG4gICAgICBuZXdDb25maWcuY29sb3JSYW5nZUNvbmZpZyAmJlxuICAgICAgWydyZXZlcnNlZCcsICdzdGVwcyddLnNvbWUoXG4gICAgICAgIGtleSA9PlxuICAgICAgICAgIG5ld0NvbmZpZy5jb2xvclJhbmdlQ29uZmlnLmhhc093blByb3BlcnR5KGtleSkgJiZcbiAgICAgICAgICBuZXdDb25maWcuY29sb3JSYW5nZUNvbmZpZ1trZXldICE9PVxuICAgICAgICAgICAgKHByZXZpb3VzW3Byb3BdIHx8IERFRkFVTFRfQ09MT1JfVUkpLmNvbG9yUmFuZ2VDb25maWdba2V5XVxuICAgICAgKTtcbiAgICBpZiAoIXNob3VsZFVwZGF0ZSkgcmV0dXJuO1xuXG4gICAgY29uc3Qge2NvbG9yVUksIHZpc0NvbmZpZ30gPSB0aGlzLmNvbmZpZztcbiAgICBjb25zdCB7c3RlcHMsIHJldmVyc2VkfSA9IGNvbG9yVUlbcHJvcF0uY29sb3JSYW5nZUNvbmZpZztcbiAgICBjb25zdCBjb2xvclJhbmdlID0gdmlzQ29uZmlnW3Byb3BdO1xuICAgIC8vIGZpbmQgYmFzZWQgb24gc3RlcCBvciByZXZlcnNlZFxuICAgIGxldCB1cGRhdGU7XG4gICAgaWYgKG5ld0NvbmZpZy5jb2xvclJhbmdlQ29uZmlnLmhhc093blByb3BlcnR5KCdzdGVwcycpKSB7XG4gICAgICBjb25zdCBncm91cCA9IGdldENvbG9yR3JvdXBCeU5hbWUoY29sb3JSYW5nZSk7XG5cbiAgICAgIGlmIChncm91cCkge1xuICAgICAgICBjb25zdCBzYW1lR3JvdXAgPSBDT0xPUl9SQU5HRVMuZmlsdGVyKGNyID0+IGdldENvbG9yR3JvdXBCeU5hbWUoY3IpID09PSBncm91cCk7XG5cbiAgICAgICAgdXBkYXRlID0gc2FtZUdyb3VwLmZpbmQoY3IgPT4gY3IuY29sb3JzLmxlbmd0aCA9PT0gc3RlcHMpO1xuXG4gICAgICAgIGlmICh1cGRhdGUgJiYgY29sb3JSYW5nZS5yZXZlcnNlZCkge1xuICAgICAgICAgIHVwZGF0ZSA9IHJldmVyc2VDb2xvclJhbmdlKHRydWUsIHVwZGF0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXBkYXRlICYmIGNvbG9yUmFuZ2UuY29sb3JNYXApIHtcbiAgICAgICAgICB1cGRhdGUgPSB0aGlzLnVwZGF0ZUNvbG9yTWFwKHByb3AsIGNvbG9yUmFuZ2UuY29sb3JNYXAsIHVwZGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobmV3Q29uZmlnLmNvbG9yUmFuZ2VDb25maWcuaGFzT3duUHJvcGVydHkoJ3JldmVyc2VkJykpIHtcbiAgICAgIHVwZGF0ZSA9IHJldmVyc2VDb2xvclJhbmdlKHJldmVyc2VkLCB1cGRhdGUgfHwgY29sb3JSYW5nZSk7XG4gICAgfVxuXG4gICAgaWYgKHVwZGF0ZSkge1xuICAgICAgdGhpcy51cGRhdGVMYXllclZpc0NvbmZpZyh7W3Byb3BdOiB1cGRhdGV9KTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVDb2xvck1hcChwcm9wLCBjb2xvck1hcCwgY29sb3JSYW5nZSkge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCB7ZmllbGQsIGRvbWFpbn0gPSBPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLmZpbmQodmFsdWUgPT4gdmFsdWUucmFuZ2UgPT09IHByb3ApO1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmNvbmZpZ1tmaWVsZF0/LnR5cGU7XG5cbiAgICBpZiAodHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZSA9PT0gJ2Jvb2xlYW4nIHx8IHR5cGUgPT09ICdkYXRlJykge1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlQ2F0ZWdvcnlDb2xvck1hcChjb2xvck1hcCwgdGhpcy5jb25maWdbZG9tYWluXSwgY29sb3JSYW5nZSk7XG4gICAgfVxuXG4gICAgLy8gSWYgbm8gdHlwZSBvciB0eXBlIGlzIG5vdCBzdHJpbmcsIGJvb2xlYW4gb3IgZGF0ZVxuICAgIHJldHVybiB0aGlzLnVwZGF0ZU51bWVyaWNDb2xvck1hcChjb2xvck1hcCwgdGhpcy5jb25maWdbZG9tYWluXSwgY29sb3JSYW5nZSk7XG4gIH1cblxuICB1cGRhdGVDYXRlZ29yeUNvbG9yTWFwKGNvbG9yTWFwLCBkb21haW4sIGNvbG9yUmFuZ2UpIHtcbiAgICBjb25zdCBjb2xvcnMgPSBjb2xvclJhbmdlLmNvbG9ycztcbiAgICBjb25zdCBhc3NpZ25lZENhdGVnb3JpZXMgPSBbXTtcbiAgICBpZiAoY29sb3JSYW5nZS50eXBlID09PSBoZXhDb2xvcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uY29sb3JSYW5nZSxcbiAgICAgICAgY29sb3JNYXA6IFtdXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBuZXdDb2xvck1hcCA9IGNvbG9yTWFwLnNsaWNlKDAsIGNvbG9ycy5sZW5ndGgpLm1hcCgoY01hcCwgaW5kZXgpID0+IHtcbiAgICAgIGFzc2lnbmVkQ2F0ZWdvcmllcy5wdXNoKGNNYXBbMF0pO1xuICAgICAgcmV0dXJuIFtjTWFwWzBdLCBjb2xvcnNbaW5kZXhdXTtcbiAgICB9KTtcbiAgICBjb25zdCB1bmFzc2lnbmVkQ29sb3JzID0gY29sb3JzLnNsaWNlKG5ld0NvbG9yTWFwLmxlbmd0aCwgY29sb3JzLmxlbmd0aCk7XG5cbiAgICBmb3IgKGNvbnN0IGNvbG9yIG9mIHVuYXNzaWduZWRDb2xvcnMpIHtcbiAgICAgIGNvbnN0IGNhdGVnb3J5ID0gZG9tYWluLmZpbmQoZCA9PiAhYXNzaWduZWRDYXRlZ29yaWVzLmluY2x1ZGVzKGQpKTtcbiAgICAgIGlmICghY2F0ZWdvcnkpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBhc3NpZ25lZENhdGVnb3JpZXMucHVzaChjYXRlZ29yeSk7XG4gICAgICBuZXdDb2xvck1hcC5wdXNoKFtjYXRlZ29yeSwgY29sb3JdKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmNvbG9yUmFuZ2UsXG4gICAgICBjb2xvck1hcDogbmV3Q29sb3JNYXBcbiAgICB9O1xuICB9XG5cbiAgdXBkYXRlTnVtZXJpY0NvbG9yTWFwKGNvbG9yTWFwLCBkb21haW4sIHVwZGF0ZSkge1xuICAgIGNvbnN0IGNvbG9ycyA9IHVwZGF0ZS5jb2xvcnM7XG4gICAgbGV0IG5ld0NvbG9yTWFwID0gY29sb3JNYXAuc2xpY2UoMCwgY29sb3JzLmxlbmd0aCk7XG5cbiAgICBuZXdDb2xvck1hcCA9IG5ld0NvbG9yTWFwLm1hcCgoY01hcCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gaW5kZXggPT09IG5ld0NvbG9yTWFwLmxlbmd0aCAtIDEgPyBudWxsIDogY01hcFswXTtcbiAgICAgIHJldHVybiBbdmFsdWUsIGNvbG9yc1tpbmRleF1dO1xuICAgIH0pO1xuICAgIGNvbnN0IHVuYXNzaWduZWRDb2xvcnMgPSBjb2xvcnMuc2xpY2UobmV3Q29sb3JNYXAubGVuZ3RoLCBjb2xvcnMubGVuZ3RoKTtcblxuICAgIGlmICh1bmFzc2lnbmVkQ29sb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGNvbG9yTWFwVmFsdWVzID0gY29sb3JNYXAubWFwKGMgPT4gY1swXSkuZmlsdGVyKGMgPT4gdHlwZW9mIGMgPT09ICdudW1iZXInKTtcbiAgICAgIGNvbnN0IG1heFZhbHVlID0gTWF0aC5tYXgoLi4uY29sb3JNYXBWYWx1ZXMsIGRvbWFpbltkb21haW4ubGVuZ3RoIC0gMV0pO1xuICAgICAgY29uc3QgcHJldlZhbHVlID0gbmV3Q29sb3JNYXBbbmV3Q29sb3JNYXAubGVuZ3RoIC0gMl1bMF07XG4gICAgICBjb25zdCBzdGVwID0gKG1heFZhbHVlIC0gcHJldlZhbHVlKSAvICh1bmFzc2lnbmVkQ29sb3JzLmxlbmd0aCArIDEpO1xuICAgICAgbmV3Q29sb3JNYXBbbmV3Q29sb3JNYXAubGVuZ3RoIC0gMV1bMF0gPSBwcmV2VmFsdWUgKyBzdGVwO1xuXG4gICAgICBmb3IgKGNvbnN0IFtpLCBjb2xvcl0gb2YgdW5hc3NpZ25lZENvbG9ycy5lbnRyaWVzKCkpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpID09PSB1bmFzc2lnbmVkQ29sb3JzLmxlbmd0aCAtIDEgPyBudWxsIDogcHJldlZhbHVlICsgKHN0ZXAgKiAoaSArIDIpKTtcbiAgICAgICAgbmV3Q29sb3JNYXAucHVzaChbdmFsdWUsIGNvbG9yXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAuLi51cGRhdGUsXG4gICAgICBjb2xvck1hcDogbmV3Q29sb3JNYXBcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgbGF5ZXIgaGFzIGFsbCBjb2x1bW5zXG4gICAqIEByZXR1cm5zIHtib29sZWFufSB5ZXMgb3Igbm9cbiAgICovXG4gIGhhc0FsbENvbHVtbnMoKSB7XG4gICAgY29uc3Qge2NvbHVtbnN9ID0gdGhpcy5jb25maWc7XG4gICAgcmV0dXJuIChcbiAgICAgIChjb2x1bW5zICYmXG4gICAgICBPYmplY3QudmFsdWVzKGNvbHVtbnMpLmV2ZXJ5KHYgPT4ge1xuICAgICAgICByZXR1cm4gQm9vbGVhbih2Lm9wdGlvbmFsIHx8ICh2LnZhbHVlICYmIHYuZmllbGRJZHggPiAtMSkpO1xuICAgICAgfSkpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIGxheWVyIGhhcyBkYXRhXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBPYmplY3R9IGxheWVyRGF0YVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0geWVzIG9yIG5vXG4gICAqL1xuICBoYXNMYXllckRhdGEobGF5ZXJEYXRhKSB7XG4gICAgaWYgKCFsYXllckRhdGEpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIEJvb2xlYW4obGF5ZXJEYXRhLmRhdGEgJiYgbGF5ZXJEYXRhLmRhdGEubGVuZ3RoKTtcbiAgfVxuXG4gIGlzVmFsaWRUb1NhdmUoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZSAmJiB0aGlzLmhhc0FsbENvbHVtbnMoKTtcbiAgfVxuXG4gIHNob3VsZFJlbmRlckxheWVyKGRhdGEpIHtcbiAgICByZXR1cm4gKFxuICAgICAgKHRoaXMudHlwZSAmJlxuICAgICAgdGhpcy5oYXNBbGxDb2x1bW5zKCkgJiZcbiAgICAgIHRoaXMuaGFzTGF5ZXJEYXRhKGRhdGEpICYmXG4gICAgICB0eXBlb2YgdGhpcy5yZW5kZXJMYXllciA9PT0gJ2Z1bmN0aW9uJylcbiAgICApO1xuICB9XG5cbiAgZ2V0Q29sb3JTY2FsZShjb2xvclNjYWxlLCBjb2xvckRvbWFpbiwgY29sb3JSYW5nZSkge1xuICAgIGlmIChjb2xvclJhbmdlLnR5cGUgPT09IGhleENvbG9yKSB7XG4gICAgICByZXR1cm4gKF8sIGNvbG9yKSA9PiB7XG4gICAgICAgIGNvbnN0IHtyLCBnLCBifSA9IHJnYihjb2xvcik7XG4gICAgICAgIHJldHVybiBbciwgZywgYl0uc29tZShpc05hTikgPyBVTktOT1dOX0NPTE9SIDogW3IsIGcsIGJdO1xuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoY29sb3JSYW5nZS5jb2xvck1hcCkpIHtcbiAgICAgIGNvbnN0IGNNYXAgPSBuZXcgTWFwKCk7XG4gICAgICBjb2xvclJhbmdlLmNvbG9yTWFwLmZvckVhY2goKFtrLCB2XSkgPT4ge1xuICAgICAgICBjTWFwLnNldChrLCB0eXBlb2YgdiA9PT0gJ3N0cmluZycgPyBoZXhUb1JnYih2KSA6IHYpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIEB0cy1pZ25vcmUgZDMgc2NhbGVcbiAgICAgIGNvbnN0IHNjYWxlID0gU0NBTEVfRlVOQ1tjb2xvclNjYWxlXSgpXG4gICAgICAgIC5kb21haW4oQXJyYXkuZnJvbShjTWFwLmtleXMoKSkpXG4gICAgICAgIC5yYW5nZShBcnJheS5mcm9tKGNNYXAudmFsdWVzKCkpKVxuICAgICAgICAudW5rbm93bihVTktOT1dOX0NPTE9SKTtcbiAgICAgIHJldHVybiBzY2FsZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5nZXRWaXNDaGFubmVsU2NhbGUoY29sb3JTY2FsZSwgY29sb3JEb21haW4sIGNvbG9yUmFuZ2UuY29sb3JzLm1hcChoZXhUb1JnYikpO1xuICB9XG5cbiAgZ2V0Q3VzdG9tTWFya2Vyc1NjYWxlKHJhbmdlLCBmYWxsYmFja0ljb24pIHtcbiAgICBsZXQgdW5rbm93blZhbHVlID0gZmFsbGJhY2tJY29uIHx8IEZBTExCQUNLX0lDT047XG4gICAgaWYgKCFyYW5nZSkge1xuICAgICAgcmV0dXJuICgpID0+IHVua25vd25WYWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBtYXBwaW5nID0gbmV3IE1hcCgpO1xuXG4gICAgaWYgKHJhbmdlLm90aGVyc01hcmtlcikge1xuICAgICAgdW5rbm93blZhbHVlID0gcmFuZ2Uub3RoZXJzTWFya2VyO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHt2YWx1ZSwgbWFya2VyVXJsfSBvZiByYW5nZS5tYXJrZXJNYXApIHtcbiAgICAgIGlmIChtYXJrZXJVcmwpIHtcbiAgICAgICAgbWFwcGluZy5zZXQodmFsdWUsIG1hcmtlclVybCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQHRzLWlnbm9yZSBkMyBzY2FsZVxuICAgIGNvbnN0IHNjYWxlID0gc2NhbGVPcmRpbmFsKClcbiAgICAgIC5kb21haW4oQXJyYXkuZnJvbShtYXBwaW5nLmtleXMoKSkpXG4gICAgICAucmFuZ2UoQXJyYXkuZnJvbShtYXBwaW5nLnZhbHVlcygpKSlcbiAgICAgIC51bmtub3duKHVua25vd25WYWx1ZSk7XG4gICAgcmV0dXJuIHNjYWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcHBpbmcgZnJvbSB2aXN1YWwgY2hhbm5lbHMgdG8gZGVjay5nbCBhY2Nlc29yc1xuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW0gUGFyYW1ldGVyc1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXJhbS5kYXRhQWNjZXNzb3IgQWNjZXNzIGtlcGxlci5nbCBsYXllciBkYXRhIGZyb20gZGVjay5nbCBsYXllclxuICAgKiBAcGFyYW0ge2ltcG9ydCgndXRpbHMvdGFibGUtdXRpbHMvZGF0YS1jb250YWluZXItaW50ZXJmYWNlJykuRGF0YUNvbnRhaW5lckludGVyZmFjZX0gcGFyYW0uZGF0YUNvbnRhaW5lciBEYXRhQ29udGFpbmVyIHRvIHVzZSB1c2Ugd2l0aCBkYXRhQWNjZXNzb3JcbiAgICogQHJldHVybiB7T2JqZWN0fSBhdHRyaWJ1dGVBY2Nlc3NvcnMgLSBkZWNrLmdsIGxheWVyIGF0dHJpYnV0ZSBhY2Nlc3NvcnNcbiAgICovXG4gIGdldEF0dHJpYnV0ZUFjY2Vzc29ycyh7ZGF0YUFjY2Vzc29yID0gZGVmYXVsdERhdGFBY2Nlc3NvciwgZGF0YUNvbnRhaW5lcn0pIHtcbiAgICBjb25zdCBhdHRyaWJ1dGVBY2Nlc3NvcnMgPSB7fTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG4gICAgT2JqZWN0LmtleXModGhpcy52aXN1YWxDaGFubmVscykuZm9yRWFjaChjaGFubmVsID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZmllbGQsXG4gICAgICAgIGZpeGVkLFxuICAgICAgICBzY2FsZSxcbiAgICAgICAgZG9tYWluLFxuICAgICAgICByYW5nZSxcbiAgICAgICAgYWNjZXNzb3IsXG4gICAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgZ2V0QXR0cmlidXRlVmFsdWUsXG4gICAgICAgIG51bGxWYWx1ZSxcbiAgICAgICAgY2hhbm5lbFNjYWxlVHlwZSxcbiAgICAgICAgYWdncmVnYXRpb25cbiAgICAgIH0gPSB0aGlzLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdO1xuXG4gICAgICBjb25zdCBzaG91bGRHZXRTY2FsZSA9IEJvb2xlYW4oXG4gICAgICAgIChzY2FsZSB8fCBjaGFubmVsU2NhbGVUeXBlID09PSBDSEFOTkVMX1NDQUxFUy5pZGVudGl0eSkgJiYgdGhpcy5jb25maWdbZmllbGRdXG4gICAgICApO1xuXG4gICAgICBpZiAoc2hvdWxkR2V0U2NhbGUpIHtcbiAgICAgICAgY29uc3QgYXJncyA9IFt0aGlzLmNvbmZpZ1tzY2FsZV0sIHRoaXMuY29uZmlnW2RvbWFpbl0sIHRoaXMuY29uZmlnLnZpc0NvbmZpZ1tyYW5nZV1dO1xuICAgICAgICBjb25zdCBpc0ZpeGVkID0gZml4ZWQgJiYgdGhpcy5jb25maWcudmlzQ29uZmlnW2ZpeGVkXTtcbiAgICAgICAgLy8gSXQncyBpbXBvcnRhbnQgdG8gZGVjbGFyZSBhcyBjb25zdCBhbGwgdGhlIHBhcmFtZXRlcnMgdGhhdCB3ZSBhcmUgZ29pbmcgdG8gYmUgdXNlIGluIHRoZSBnZXRFbmNvZGVkQ2hhbm5lbFZhbHVlIGNhbGxcbiAgICAgICAgLy8gb3RoZXJ3aXNlLCB0aGUgb2xkTGF5ZXJEYXRhIHBhcmFtZXRlciBpbiBmb3JtYXRMYXllckRhdGEgbWV0aG9kIHdpbGwgYmUgd3JvbmcgKHlvdSBjYW4gY2hlY2sgdGhlIGZvcm1hdExheWVyRGF0YSBUaWxlTGF5ZXIgbWV0aG9kIGluIEJ1aWxkZXIgYXMgZXhhbXBsZSlcbiAgICAgICAgY29uc3QgZmllbGRDb25maWcgPSB0aGlzLmNvbmZpZ1tmaWVsZF07XG4gICAgICAgIGNvbnN0IGFnZ3JlZ2F0aW9uVmFsdWUgPSB0aGlzLmNvbmZpZy52aXNDb25maWdbYWdncmVnYXRpb25dO1xuXG4gICAgICAgIGNvbnN0IHNjYWxlRnVuY3Rpb24gPVxuICAgICAgICAgIGNoYW5uZWxTY2FsZVR5cGUgPT09IENIQU5ORUxfU0NBTEVTLmlkZW50aXR5XG4gICAgICAgICAgICA/IHNjYWxlSWRlbnRpdHlcbiAgICAgICAgICAgIDogY2hhbm5lbFNjYWxlVHlwZSA9PT0gQ0hBTk5FTF9TQ0FMRVMuY29sb3JcbiAgICAgICAgICAgID8gdGhpcy5nZXRDb2xvclNjYWxlKC4uLmFyZ3MpXG4gICAgICAgICAgICA6IGNoYW5uZWxTY2FsZVR5cGUgPT09IENIQU5ORUxfU0NBTEVTLmN1c3RvbU1hcmtlclxuICAgICAgICAgICAgPyB0aGlzLmdldEN1c3RvbU1hcmtlcnNTY2FsZShcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy52aXNDb25maWdbcmFuZ2VdLFxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLnZpc0NvbmZpZy5jdXN0b21NYXJrZXJzVXJsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogdGhpcy5nZXRWaXNDaGFubmVsU2NhbGUoLi4uYXJncywgaXNGaXhlZCk7XG5cbiAgICAgICAgYXR0cmlidXRlQWNjZXNzb3JzW2FjY2Vzc29yXSA9IGQgPT5cbiAgICAgICAgICB0aGlzLmdldEVuY29kZWRDaGFubmVsVmFsdWUoe1xuICAgICAgICAgICAgY2hhbm5lbCxcbiAgICAgICAgICAgIGRhdGFDb250YWluZXIsXG4gICAgICAgICAgICBzY2FsZTogc2NhbGVGdW5jdGlvbixcbiAgICAgICAgICAgIGRhdGE6IGRhdGFBY2Nlc3NvcihkYXRhQ29udGFpbmVyKShkKSxcbiAgICAgICAgICAgIGZpZWxkOiBmaWVsZENvbmZpZyxcbiAgICAgICAgICAgIF9hZ2dyZWdhdGlvbjogYWdncmVnYXRpb25WYWx1ZSxcbiAgICAgICAgICAgIG51bGxWYWx1ZVxuICAgICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZ2V0QXR0cmlidXRlVmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgYXR0cmlidXRlQWNjZXNzb3JzW2FjY2Vzc29yXSA9IGdldEF0dHJpYnV0ZVZhbHVlKHRoaXMuY29uZmlnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF0dHJpYnV0ZUFjY2Vzc29yc1thY2Nlc3Nvcl0gPVxuICAgICAgICAgIHR5cGVvZiBkZWZhdWx0VmFsdWUgPT09ICdmdW5jdGlvbicgPyBkZWZhdWx0VmFsdWUodGhpcy5jb25maWcpIDogZGVmYXVsdFZhbHVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIShhY2Nlc3NvciBpbiBhdHRyaWJ1dGVBY2Nlc3NvcnMpKSB7XG4gICAgICAgIENvbnNvbGUud2FybihgRmFpbGVkIHRvIHByb3ZpZGUgYWNjZXNzb3IgZnVuY3Rpb24gZm9yICR7YWNjZXNzb3IgfHwgY2hhbm5lbH1gKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBhdHRyaWJ1dGVBY2Nlc3NvcnM7XG4gIH1cblxuICBnZXRWaXNDaGFubmVsU2NhbGUoc2NhbGUsIGRvbWFpbiwgcmFuZ2UsIGZpeGVkKSB7XG4gICAgaWYgKHNjYWxlID09PSBTQ0FMRV9UWVBFUy5vcmRpbmFsKSB7XG4gICAgICAvLyBAdHMtaWdub3JlIGQzLXNjYWxlIHR5cGVcbiAgICAgIHJldHVybiBTQ0FMRV9GVU5DW3NjYWxlXSgpXG4gICAgICAgIC5kb21haW4oZG9tYWluLnNsaWNlKDAsIHJhbmdlLmxlbmd0aCkpXG4gICAgICAgIC5yYW5nZShyYW5nZSlcbiAgICAgICAgLnVua25vd24oVU5LTk9XTl9DT0xPUik7XG4gICAgfVxuXG4gICAgLy8gZm9yIGBjb3VudGAgYWdncmVnYXRpb24sIHdlIGRvbWFpbiBpcyBhY3R1YWxseSBgWzAsIEluZmluaXR5XWAgc28gaXQgZG9lc24ndCBtYWtlIHNlbnNlXG4gICAgLy8gdG8gdXNlIGl0LCBzbyBza2lwIHNwZWN5ZnlpbmcgdGhpcyBkb21haW5zXG4gICAgY29uc3QgZG9tYWluSXNJbmZpbml0ZSA9IGRvbWFpbiAmJiAoZG9tYWluWzBdID09PSAwICYmIGRvbWFpblsxXSA9PT0gSW5maW5pdHkpO1xuICAgIGNvbnN0IHNjYWxlRmFjdG9yeSA9IFNDQUxFX0ZVTkNbZml4ZWQgPyAnbGluZWFyJyA6IHNjYWxlXTtcbiAgICAvLyBAdHMtaWdub3JlIGQzLXNjYWxlIHR5cGVcbiAgICBsZXQgcmVzdWx0ID0gc2NhbGVGYWN0b3J5KCk7XG4gICAgaWYgKGRvbWFpbiAmJiAhZG9tYWluSXNJbmZpbml0ZSkge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0LmRvbWFpbihkb21haW4pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0LnJhbmdlKGZpeGVkID8gZG9tYWluIDogcmFuZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBsb25naXR1ZGUgYW5kIGxhdGl0dWRlIGJvdW5kcyBvZiB0aGUgZGF0YS5cbiAgICogQHBhcmFtIHtpbXBvcnQoJ3V0aWxzL3RhYmxlLXV0aWxzL2RhdGEtY29udGFpbmVyLWludGVyZmFjZScpLkRhdGFDb250YWluZXJJbnRlcmZhY2V9IGRhdGFDb250YWluZXIgRGF0YUNvbnRhaW5lciB0byBjYWxjdWxhdGUgYm91bmRzIGZvci5cbiAgICogQHBhcmFtIHsoZDoge2luZGV4OiBudW1iZXJ9LCBkYzogaW1wb3J0KCd1dGlscy90YWJsZS11dGlscy9kYXRhLWNvbnRhaW5lci1pbnRlcmZhY2UnKS5EYXRhQ29udGFpbmVySW50ZXJmYWNlKSA9PiBudW1iZXJbXX0gZ2V0UG9zaXRpb24gQWNjZXNzIGtlcGxlci5nbCBsYXllciBkYXRhIGZyb20gZGVjay5nbCBsYXllclxuICAgKiBAcmV0dXJuIHtudW1iZXJbXXxudWxsfSBib3VuZHMgb2YgdGhlIGRhdGEuXG4gICAqL1xuICBnZXRQb2ludHNCb3VuZHMoZGF0YUNvbnRhaW5lciwgZ2V0UG9zaXRpb24pIHtcbiAgICAvLyBubyBuZWVkIHRvIGxvb3AgdGhyb3VnaCB0aGUgZW50aXJlIGRhdGFzZXRcbiAgICAvLyBnZXQgYSBzYW1wbGUgb2YgZGF0YSB0byBjYWxjdWxhdGUgYm91bmRzXG4gICAgY29uc3Qgc2FtcGxlRGF0YSA9XG4gICAgICBkYXRhQ29udGFpbmVyLm51bVJvd3MoKSA+IE1BWF9TQU1QTEVfU0laRVxuICAgICAgICA/IGdldFNhbXBsZURhdGEoZGF0YUNvbnRhaW5lciwgTUFYX1NBTVBMRV9TSVpFKVxuICAgICAgICA6IGRhdGFDb250YWluZXI7XG5cbiAgICBjb25zdCBwb2ludHMgPSBzYW1wbGVEYXRhLm1hcEluZGV4KGdldFBvc2l0aW9uKTtcblxuICAgIGNvbnN0IGxhdEJvdW5kcyA9IGdldExhdExuZ0JvdW5kcyhwb2ludHMsIDEsIFstOTAsIDkwXSk7XG4gICAgY29uc3QgbG5nQm91bmRzID0gZ2V0TGF0TG5nQm91bmRzKHBvaW50cywgMCwgWy0xODAsIDE4MF0pO1xuXG4gICAgaWYgKCFsYXRCb3VuZHMgfHwgIWxuZ0JvdW5kcykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtsbmdCb3VuZHNbMF0sIGxhdEJvdW5kc1swXSwgbG5nQm91bmRzWzFdLCBsYXRCb3VuZHNbMV1dO1xuICB9XG5cbiAgZ2V0Q2hhbmdlZFRyaWdnZXJzKGRhdGFVcGRhdGVUcmlnZ2Vycykge1xuICAgIGNvbnN0IHRyaWdnZXJDaGFuZ2VkID0gZGlmZlVwZGF0ZVRyaWdnZXJzKGRhdGFVcGRhdGVUcmlnZ2VycywgdGhpcy5fb2xkRGF0YVVwZGF0ZVRyaWdnZXJzKTtcbiAgICB0aGlzLl9vbGREYXRhVXBkYXRlVHJpZ2dlcnMgPSBkYXRhVXBkYXRlVHJpZ2dlcnM7XG5cbiAgICByZXR1cm4gdHJpZ2dlckNoYW5nZWQ7XG4gIH1cblxuICBnZXRFbmNvZGVkQ2hhbm5lbFZhbHVlKHtcbiAgICBjaGFubmVsLFxuICAgIHNjYWxlLFxuICAgIGRhdGEsXG4gICAgZmllbGQsXG4gICAgZGF0YUNvbnRhaW5lcixcbiAgICAvLyBJbiBidWlsZGVyIHdlIG92ZXJ3cml0ZSB0aGUgZ2V0VmFsdWUgZnVuY3Rpb24gYW5kIHdlIHVzZSB0aGUgX2FnZ3JlZ2F0aW9uIHBhcmFtZXRlciBpbiBzcGF0aWFsIGluZGV4IGxheWVycyBhcyB0aGUgUXVhZGtleUxheWVyLlxuICAgIF9hZ2dyZWdhdGlvbixcbiAgICBudWxsVmFsdWUgPSBOT19WQUxVRV9DT0xPUixcbiAgICBnZXRWYWx1ZSA9IGRlZmF1bHRHZXRGaWVsZFZhbHVlXG4gIH0pIHtcbiAgICBsZXQgY29sb3JDb2x1bW5WYWx1ZTtcbiAgICBjb25zdCB7dHlwZX0gPSBmaWVsZDtcbiAgICBjb25zdCB2YWx1ZSA9IGdldFZhbHVlKGZpZWxkLCBkYXRhKTtcbiAgICBjb25zdCBjaGFubmVsQ29uZmlnID0gdGhpcy5jb25maWcudmlzQ29uZmlnW3RoaXMudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF0ucmFuZ2VdO1xuICAgIGNvbnN0IGNoYW5uZWxGaWVsZCA9IHRoaXMuY29uZmlnW3RoaXMudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF0uZmllbGRdO1xuXG4gICAgaWYgKGNoYW5uZWxDb25maWcudHlwZSA9PT0gaGV4Q29sb3IpIHtcbiAgICAgIGNvbnN0IGNvbHVtbkZpZWxkID0ge1xuICAgICAgICBpZDogY2hhbm5lbEZpZWxkLmNvbG9yQ29sdW1uLFxuICAgICAgICBuYW1lOiBjaGFubmVsRmllbGQuY29sb3JDb2x1bW4sXG4gICAgICAgIGZpZWxkSWR4OiBjaGFubmVsRmllbGQuY29sb3JDb2x1bW5JZHgsXG4gICAgICAgIHZhbHVlQWNjZXNzb3I6IGQgPT4ge1xuICAgICAgICAgIHJldHVybiBkYXRhQ29udGFpbmVyLnZhbHVlQXQoZC5pbmRleCwgY2hhbm5lbEZpZWxkLmNvbG9yQ29sdW1uSWR4KTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgY29sb3JDb2x1bW5WYWx1ZSA9IGdldFZhbHVlKGNvbHVtbkZpZWxkLCBkYXRhKTtcbiAgICB9IGVsc2UgaWYgKCFub3ROdWxsb3JVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgICByZXR1cm4gbnVsbFZhbHVlO1xuICAgIH1cblxuICAgIGxldCBhdHRyaWJ1dGVWYWx1ZTtcbiAgICBpZiAodHlwZSA9PT0gQUxMX0ZJRUxEX1RZUEVTLnRpbWVzdGFtcCkge1xuICAgICAgLy8gc2hvdWxkbid0IG5lZWQgdG8gY29udmVydCBoZXJlXG4gICAgICAvLyBzY2FsZSBGdW5jdGlvbiBzaG91bGQgdGFrZSBjYXJlIG9mIGl0XG4gICAgICBhdHRyaWJ1dGVWYWx1ZSA9IHNjYWxlKG5ldyBEYXRlKHZhbHVlKSwgY29sb3JDb2x1bW5WYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF0dHJpYnV0ZVZhbHVlID0gc2NhbGUodmFsdWUsIGNvbG9yQ29sdW1uVmFsdWUpO1xuICAgIH1cblxuICAgIGlmICghbm90TnVsbG9yVW5kZWZpbmVkKGF0dHJpYnV0ZVZhbHVlKSkge1xuICAgICAgYXR0cmlidXRlVmFsdWUgPSBudWxsVmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF0dHJpYnV0ZVZhbHVlO1xuICB9XG5cbiAgdXBkYXRlTWV0YShtZXRhKSB7XG4gICAgdGhpcy5tZXRhID0gey4uLnRoaXMubWV0YSwgLi4ubWV0YX07XG4gIH1cblxuICB1cGRhdGVMYXllckxlZ2VuZChzZXR0aW5ncykge1xuICAgIHRoaXMubGVnZW5kU2V0dGluZ3MgPSBzZXR0aW5ncztcbiAgfVxuXG4gIGdldERhdGFVcGRhdGVUcmlnZ2Vycyh7ZmlsdGVyZWRJbmRleCwgaWQsIGFsbERhdGF9KSB7XG4gICAgY29uc3Qge2NvbHVtbnN9ID0gdGhpcy5jb25maWc7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZ2V0RGF0YToge2RhdGFzZXRJZDogaWQsIGFsbERhdGEsIGNvbHVtbnMsIGZpbHRlcmVkSW5kZXh9LFxuICAgICAgZ2V0TWV0YToge2RhdGFzZXRJZDogaWQsIGFsbERhdGEsIGNvbHVtbnN9LFxuICAgICAgLi4uKHRoaXMuY29uZmlnLnRleHRMYWJlbCB8fCBbXSkucmVkdWNlKFxuICAgICAgICAoYWNjdSwgdGwsIGkpID0+ICh7XG4gICAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgICBbYGdldExhYmVsQ2hhcmFjdGVyU2V0LSR7aX1gXTogdGwuZmllbGQgPyB0bC5maWVsZC5uYW1lIDogbnVsbFxuICAgICAgICB9KSxcbiAgICAgICAge31cbiAgICAgIClcbiAgICB9O1xuICB9XG5cbiAgdXBkYXRlRGF0YShkYXRhc2V0cywgb2xkTGF5ZXJEYXRhKSB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5kYXRhSWQpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY29uc3QgZGF0YXNldCA9IHRoaXMuZ2V0RGF0YXNldChkYXRhc2V0cyk7XG4gICAgY29uc3Qge2RhdGFDb250YWluZXJ9ID0gZGF0YXNldDtcblxuICAgIHRoaXMudXBkYXRlVmlzdWFsQ2hhbm5lbEZpZWxkcyhkYXRhc2V0KTtcbiAgICB0aGlzLnVwZGF0ZUhleENvbG9yRG9tYWluKGRhdGFzZXQpO1xuXG4gICAgY29uc3QgZ2V0UG9zaXRpb24gPSB0aGlzLmdldFBvc2l0aW9uQWNjZXNzb3IoZGF0YUNvbnRhaW5lcik7XG4gICAgY29uc3QgZGF0YVVwZGF0ZVRyaWdnZXJzID0gdGhpcy5nZXREYXRhVXBkYXRlVHJpZ2dlcnMoZGF0YXNldCk7XG4gICAgY29uc3QgdHJpZ2dlckNoYW5nZWQgPSB0aGlzLmdldENoYW5nZWRUcmlnZ2VycyhkYXRhVXBkYXRlVHJpZ2dlcnMpO1xuXG4gICAgaWYgKHRyaWdnZXJDaGFuZ2VkLmdldE1ldGEpIHtcbiAgICAgIHRoaXMudXBkYXRlTGF5ZXJNZXRhKGRhdGFDb250YWluZXIsIGdldFBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICBsZXQgZGF0YSA9IFtdO1xuXG4gICAgaWYgKCF0cmlnZ2VyQ2hhbmdlZC5nZXREYXRhICYmIG9sZExheWVyRGF0YSAmJiBvbGRMYXllckRhdGEuZGF0YSkge1xuICAgICAgLy8gc2FtZSBkYXRhXG4gICAgICBkYXRhID0gb2xkTGF5ZXJEYXRhLmRhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGEgPSB0aGlzLmNhbGN1bGF0ZURhdGFBdHRyaWJ1dGUoZGF0YXNldCwgZ2V0UG9zaXRpb24pO1xuICAgIH1cblxuICAgIHJldHVybiB7ZGF0YSwgdHJpZ2dlckNoYW5nZWR9O1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBzdHlsZWQgZmllbGRzIHRvIG1hdGNoIG9uZXMgZnJvbSBuZXcgZGF0YXNldC5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGRhdGFzZXRcbiAgICovXG4gIHVwZGF0ZVZpc3VhbENoYW5uZWxGaWVsZHMoZGF0YXNldCkge1xuICAgIGZvciAoY29uc3Qge2ZpZWxkLCByYW5nZX0gb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnZpc3VhbENoYW5uZWxzKSkge1xuICAgICAgY29uc3Qgb2xkRmllbGQgPSB0aGlzLmNvbmZpZ1tmaWVsZF07XG4gICAgICBjb25zdCBpc1VzaW5nSGV4Q29sb3JDb2RlID0gdGhpcy5jb25maWcudmlzQ29uZmlnW3JhbmdlXT8uaGV4Q29sb3I7XG4gICAgICBpZiAoIW9sZEZpZWxkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxldCBuZXdEYXRhU2V0RmllbGQgPSBkYXRhc2V0LmZpZWxkcy5maW5kKGZkID0+IGZkLm5hbWUgPT09IG9sZEZpZWxkLm5hbWUpIHx8IG51bGw7XG4gICAgICBpZiAoaXNVc2luZ0hleENvbG9yQ29kZSkge1xuICAgICAgICBuZXdEYXRhU2V0RmllbGQgPSB7XG4gICAgICAgICAgLi4ubmV3RGF0YVNldEZpZWxkLFxuICAgICAgICAgIGNvbG9yQ29sdW1uOiBuZXdEYXRhU2V0RmllbGQuY29sb3JDb2x1bW4gfHwgb2xkRmllbGQuY29sb3JDb2x1bW4sXG4gICAgICAgICAgY29sb3JDb2x1bW5JZHg6IG5ld0RhdGFTZXRGaWVsZC5jb2xvckNvbHVtbklkeCB8fCBvbGRGaWVsZC5jb2xvckNvbHVtbklkeFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVMYXllckNvbmZpZyh7W2ZpZWxkXTogbmV3RGF0YVNldEZpZWxkfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGhlbHBlciBmdW5jdGlvbiB0byB1cGRhdGUgb25lIGxheWVyIGRvbWFpbiB3aGVuIHN0YXRlLmRhdGEgY2hhbmdlZFxuICAgKiBpZiBzdGF0ZS5kYXRhIGNoYW5nZSBpcyBkdWUgb3QgdXBkYXRlIGZpbHRlciwgbmV3RmlsZXIgd2lsbCBiZSBwYXNzZWRcbiAgICogY2FsbGVkIGJ5IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YVxuICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YXNldHNcbiAgICogQHBhcmFtIHtPYmplY3R9IG5ld0ZpbHRlclxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBsYXllclxuICAgKi9cbiAgdXBkYXRlTGF5ZXJEb21haW4oZGF0YXNldHMsIG5ld0ZpbHRlcikge1xuICAgIGNvbnN0IHRhYmxlID0gdGhpcy5nZXREYXRhc2V0KGRhdGFzZXRzKTtcbiAgICBpZiAoIXRhYmxlKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKGNoYW5uZWwgPT4ge1xuICAgICAgY29uc3Qge3NjYWxlfSA9IGNoYW5uZWw7XG4gICAgICBjb25zdCBzY2FsZVR5cGUgPSB0aGlzLmNvbmZpZ1tzY2FsZV07XG5cbiAgICAgIC8vIG9yZGluYWwgZG9tYWluIGlzIGJhc2VkIG9uIGRhdGFDb250YWluZXIsIGlmIG9ubHkgZmlsdGVyIGNoYW5nZWRcbiAgICAgIC8vIG5vIG5lZWQgdG8gdXBkYXRlIG9yZGluYWwgZG9tYWluXG4gICAgICBpZiAoIW5ld0ZpbHRlciB8fCBzY2FsZVR5cGUgIT09IFNDQUxFX1RZUEVTLm9yZGluYWwpIHtcbiAgICAgICAgY29uc3Qge2RvbWFpbn0gPSBjaGFubmVsO1xuICAgICAgICBjb25zdCB1cGRhdGVkRG9tYWluID0gdGhpcy5jYWxjdWxhdGVMYXllckRvbWFpbih0YWJsZSwgY2hhbm5lbCk7XG4gICAgICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoe1tkb21haW5dOiB1cGRhdGVkRG9tYWlufSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGdldERhdGFzZXQoZGF0YXNldHMpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuZGF0YUlkID8gZGF0YXNldHNbdGhpcy5jb25maWcuZGF0YUlkXSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdmlzdWFsIGNoYW5uZWwgZmllbGQgYW5kIHNjYWxlcyBiYXNlZCBvbiBzdXBwb3J0ZWQgZmllbGQgJiBzY2FsZSB0eXBlXG4gICAqIEBwYXJhbSBjaGFubmVsXG4gICAqL1xuICB2YWxpZGF0ZVZpc3VhbENoYW5uZWwoY2hhbm5lbCkge1xuICAgIHRoaXMudmFsaWRhdGVGaWVsZFR5cGUoY2hhbm5lbCk7XG4gICAgdGhpcy52YWxpZGF0ZVNjYWxlKGNoYW5uZWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGZpZWxkIHR5cGUgYmFzZWQgb24gY2hhbm5lbFNjYWxlVHlwZVxuICAgKi9cbiAgdmFsaWRhdGVGaWVsZFR5cGUoY2hhbm5lbCkge1xuICAgIGNvbnN0IHZpc3VhbENoYW5uZWwgPSB0aGlzLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdO1xuICAgIGNvbnN0IHtmaWVsZCwgY2hhbm5lbFNjYWxlVHlwZSwgc3VwcG9ydGVkRmllbGRUeXBlc30gPSB2aXN1YWxDaGFubmVsO1xuXG4gICAgaWYgKHRoaXMuY29uZmlnW2ZpZWxkXSkge1xuICAgICAgLy8gaWYgZmllbGQgaXMgc2VsZWN0ZWQsIGNoZWNrIGlmIGZpZWxkIHR5cGUgaXMgc3VwcG9ydGVkXG4gICAgICBjb25zdCBjaGFubmVsU3VwcG9ydGVkRmllbGRUeXBlcyA9XG4gICAgICAgIHN1cHBvcnRlZEZpZWxkVHlwZXMgfHwgQ0hBTk5FTF9TQ0FMRV9TVVBQT1JURURfRklFTERTW2NoYW5uZWxTY2FsZVR5cGVdO1xuXG4gICAgICBpZiAoIWNoYW5uZWxTdXBwb3J0ZWRGaWVsZFR5cGVzLmluY2x1ZGVzKHRoaXMuY29uZmlnW2ZpZWxkXS50eXBlKSkge1xuICAgICAgICAvLyBmaWVsZCB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQsIHNldCBpdCBiYWNrIHRvIG51bGxcbiAgICAgICAgLy8gc2V0IHNjYWxlIGJhY2sgdG8gZGVmYXVsdFxuICAgICAgICB0aGlzLnVwZGF0ZUxheWVyQ29uZmlnKHtbZmllbGRdOiBudWxsfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHNjYWxlIHR5cGUgYmFzZWQgb24gYWdncmVnYXRpb25cbiAgICovXG4gIHZhbGlkYXRlU2NhbGUoY2hhbm5lbCkge1xuICAgIGNvbnN0IHZpc3VhbENoYW5uZWwgPSB0aGlzLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdO1xuICAgIGNvbnN0IHtzY2FsZSwgcmFuZ2V9ID0gdmlzdWFsQ2hhbm5lbDtcbiAgICBpZiAoXG4gICAgICAhc2NhbGUgfHxcbiAgICAgICh0aGlzLmlzQ29sb3JlZEJ5Q29sb3JDb2x1bW4ocmFuZ2UpICYmIHRoaXMuY29uZmlnW3NjYWxlXSA9PT0gU0NBTEVfVFlQRVMuaWRlbnRpdHkpXG4gICAgKSB7XG4gICAgICAvLyB2aXN1YWxDaGFubmVsIGRvZXNuJ3QgaGF2ZSBzY2FsZVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzY2FsZU9wdGlvbnMgPSB0aGlzLmdldFNjYWxlT3B0aW9ucyhjaGFubmVsKTtcbiAgICAvLyBjaGVjayBpZiBjdXJyZW50IHNlbGVjdGVkIHNjYWxlIGlzXG4gICAgLy8gc3VwcG9ydGVkLCBpZiBub3QsIGNoYW5nZSB0byBkZWZhdWx0XG4gICAgaWYgKCFzY2FsZU9wdGlvbnMuaW5jbHVkZXModGhpcy5jb25maWdbc2NhbGVdKSkge1xuICAgICAgdGhpcy51cGRhdGVMYXllckNvbmZpZyh7W3NjYWxlXTogc2NhbGVPcHRpb25zWzBdfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzY2FsZSBvcHRpb25zIGJhc2VkIG9uIGN1cnJlbnQgZmllbGRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNoYW5uZWxcbiAgICogQHJldHVybnMge3N0cmluZ1tdfVxuICAgKi9cbiAgZ2V0U2NhbGVPcHRpb25zKGNoYW5uZWwpIHtcbiAgICBjb25zdCB2aXN1YWxDaGFubmVsID0gdGhpcy52aXN1YWxDaGFubmVsc1tjaGFubmVsXTtcbiAgICBjb25zdCB7ZmllbGQsIHNjYWxlLCBjaGFubmVsU2NhbGVUeXBlfSA9IHZpc3VhbENoYW5uZWw7XG5cbiAgICByZXR1cm4gdGhpcy5jb25maWdbZmllbGRdXG4gICAgICA/IEZJRUxEX09QVFNbdGhpcy5jb25maWdbZmllbGRdLnR5cGVdLnNjYWxlW2NoYW5uZWxTY2FsZVR5cGVdXG4gICAgICA6IFt0aGlzLmdldERlZmF1bHRMYXllckNvbmZpZygpW3NjYWxlXV07XG4gIH1cblxuICB1cGRhdGVMYXllclZpc3VhbENoYW5uZWwoZGF0YXNldCwgY2hhbm5lbCkge1xuICAgIGNvbnN0IHZpc3VhbENoYW5uZWwgPSB0aGlzLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdO1xuICAgIHRoaXMudmFsaWRhdGVWaXN1YWxDaGFubmVsKGNoYW5uZWwpO1xuICAgIC8vIGNhbGN1bGF0ZSBsYXllciBjaGFubmVsIGRvbWFpblxuICAgIGNvbnN0IHVwZGF0ZWREb21haW4gPSB0aGlzLmNhbGN1bGF0ZUxheWVyRG9tYWluKGRhdGFzZXQsIHZpc3VhbENoYW5uZWwpO1xuICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoe1t2aXN1YWxDaGFubmVsLmRvbWFpbl06IHVwZGF0ZWREb21haW59KTtcbiAgfVxuXG4gIGdldFZpc3VhbENoYW5uZWxVcGRhdGVUcmlnZ2VycygpIHtcbiAgICBjb25zdCB1cGRhdGVUcmlnZ2VycyA9IHt9O1xuICAgIE9iamVjdC52YWx1ZXModGhpcy52aXN1YWxDaGFubmVscykuZm9yRWFjaCh2aXN1YWxDaGFubmVsID0+IHtcbiAgICAgIC8vIGZpZWxkIHJhbmdlIHNjYWxlIGRvbWFpblxuICAgICAgY29uc3Qge2FjY2Vzc29yLCBmaWVsZCwgc2NhbGUsIGRvbWFpbiwgcmFuZ2UsIGRlZmF1bHRWYWx1ZSwgZml4ZWR9ID0gdmlzdWFsQ2hhbm5lbDtcblxuICAgICAgdXBkYXRlVHJpZ2dlcnNbYWNjZXNzb3JdID0ge1xuICAgICAgICBbZmllbGRdOiB0aGlzLmNvbmZpZ1tmaWVsZF0sXG4gICAgICAgIFtzY2FsZV06IHRoaXMuY29uZmlnW3NjYWxlXSxcbiAgICAgICAgW2RvbWFpbl06IHRoaXMuY29uZmlnW2RvbWFpbl0sXG4gICAgICAgIFtyYW5nZV06IHRoaXMuY29uZmlnLnZpc0NvbmZpZ1tyYW5nZV0sXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogdHlwZW9mIGRlZmF1bHRWYWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IGRlZmF1bHRWYWx1ZSh0aGlzLmNvbmZpZykgOiBkZWZhdWx0VmFsdWUsXG4gICAgICAgIC4uLihmaXhlZCA/IHtbZml4ZWRdOiB0aGlzLmNvbmZpZy52aXNDb25maWdbZml4ZWRdfSA6IHt9KVxuICAgICAgfTtcbiAgICB9KTtcbiAgICByZXR1cm4gdXBkYXRlVHJpZ2dlcnM7XG4gIH1cblxuICBjYWxjdWxhdGVMYXllckRvbWFpbihkYXRhc2V0LCB2aXN1YWxDaGFubmVsKSB7XG4gICAgY29uc3Qge3NjYWxlfSA9IHZpc3VhbENoYW5uZWw7XG4gICAgY29uc3QgZmllbGQgPSB0aGlzLmNvbmZpZ1t2aXN1YWxDaGFubmVsLmZpZWxkXTtcbiAgICBpZiAoIWZpZWxkIHx8ICFzY2FsZSkge1xuICAgICAgLy8gaWYgY29sb3JGaWVsZCBvciBzaXplRmllbGQgd2VyZSBzZXQgYmFjayB0byBudWxsXG4gICAgICByZXR1cm4gZGVmYXVsdERvbWFpbjtcbiAgICB9XG5cbiAgICBjb25zdCBzY2FsZVR5cGUgPSB0aGlzLmNvbmZpZ1tzY2FsZV07XG4gICAgY29uc3QgZGF0YVNldEZpZWxkID0gZGF0YXNldC5maWVsZHMuZmluZChmID0+IGYubmFtZSA9PT0gZmllbGQubmFtZSk7XG4gICAgaWYgKCFzY2FsZVR5cGUgfHwgIWRhdGFTZXRGaWVsZCkge1xuICAgICAgLy8gaWYgbmV3IGRhdGFzZXQgZG9lc24ndCBjb250YWluIHByZXZpb3VzbHkgc2V0IGZpZWxkXG4gICAgICByZXR1cm4gZGVmYXVsdERvbWFpbjtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YXNldC5nZXRDb2x1bW5MYXllckRvbWFpbihkYXRhU2V0RmllbGQsIHNjYWxlVHlwZSkgfHwgZGVmYXVsdERvbWFpbjtcbiAgfVxuXG4gIHVwZGF0ZUhleENvbG9yRG9tYWluKGRhdGFzZXQpIHtcbiAgICBpZiAoIWRhdGFzZXQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goY2hhbm5lbCA9PiB7XG4gICAgICBjb25zdCBjaGFubmVsQ29uZmlnID0gdGhpcy5jb25maWcudmlzQ29uZmlnW2NoYW5uZWwucmFuZ2VdO1xuICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmNvbmZpZ1tjaGFubmVsLmZpZWxkXTtcblxuICAgICAgaWYgKGNoYW5uZWxDb25maWc/LnR5cGUgPT09IGhleENvbG9yICYmIGZpZWxkPy5jb2xvckNvbHVtbikge1xuICAgICAgICBjb25zdCBkYXRhU2V0RmllbGQgPSBkYXRhc2V0LmZpZWxkcy5maW5kKGYgPT4gZi5uYW1lID09PSBmaWVsZC5jb2xvckNvbHVtbik7XG4gICAgICAgIGNvbnN0IGNvbG9ycyA9IGRhdGFzZXRcbiAgICAgICAgICAuZ2V0Q29sdW1uTGF5ZXJEb21haW4oZGF0YVNldEZpZWxkLCBTQ0FMRV9UWVBFUy5vcmRpbmFsKVxuICAgICAgICAgIC5tYXAoYyA9PiBjaGVja0NvbG9yT3JGYWxsYmFjayhjKSk7XG4gICAgICAgIHRoaXMudXBkYXRlTGF5ZXJWaXNDb25maWcoe1xuICAgICAgICAgIFtjaGFubmVsLnJhbmdlXTogey4uLmNoYW5uZWxDb25maWcsIGNvbG9yc31cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGNhbGN1bGF0ZUhleENvbHVtbkxlZ2VuZChkYXRhc2V0cykge1xuICAgIGNvbnN0IGRhdGFzZXQgPSB0aGlzLmdldERhdGFzZXQoZGF0YXNldHMpO1xuICAgIGlmICghZGF0YXNldHMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBsZWdlbmRTZXR0aW5ncyA9IE9iamVjdC5rZXlzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLnJlZHVjZSgobGVnZW5kcywgY2hhbm5lbCkgPT4ge1xuICAgICAgY29uc3Qge3JhbmdlLCBmaWVsZDogY2hhbm5lbEZpZWxkfSA9IHRoaXMudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF07XG4gICAgICBjb25zdCBjaGFubmVsQ29uZmlnID0gdGhpcy5jb25maWcudmlzQ29uZmlnW3JhbmdlXTtcbiAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5jb25maWdbY2hhbm5lbEZpZWxkXTtcblxuICAgICAgaWYgKGNoYW5uZWxDb25maWc/LnR5cGUgPT09IGhleENvbG9yICYmIGZpZWxkPy5jb2xvckNvbHVtbikge1xuICAgICAgICBjb25zdCBkYXRhU2V0RmllbGQgPSBkYXRhc2V0LmZpZWxkcy5maW5kKGYgPT4gZi5uYW1lID09PSBmaWVsZC5jb2xvckNvbHVtbik7XG4gICAgICAgIGNvbnN0IGxlZ2VuZCA9IGRhdGFzZXQuY2FsY3VsYXRlTGVnZW5kKGZpZWxkLCBkYXRhU2V0RmllbGQpO1xuICAgICAgICBsZWdlbmRzW2NoYW5uZWxdID0gbGVnZW5kO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxlZ2VuZHM7XG4gICAgfSwge30pO1xuICAgIHRoaXMudXBkYXRlTGF5ZXJMZWdlbmQobGVnZW5kU2V0dGluZ3MpO1xuICB9XG5cbiAgaGFzSG92ZXJlZE9iamVjdChvYmplY3RJbmZvKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNMYXllckhvdmVyZWQob2JqZWN0SW5mbykgJiYgb2JqZWN0SW5mby5vYmplY3QgPyBvYmplY3RJbmZvLm9iamVjdCA6IG51bGw7XG4gIH1cblxuICBpc0xheWVySG92ZXJlZChvYmplY3RJbmZvKSB7XG4gICAgcmV0dXJuIG9iamVjdEluZm8/LnBpY2tlZCAmJiBvYmplY3RJbmZvPy5sYXllcj8ucHJvcHM/LmlkID09PSB0aGlzLmlkO1xuICB9XG5cbiAgZ2V0UmFkaXVzU2NhbGVCeVpvb20obWFwU3RhdGUpIHtcbiAgICBjb25zdCByYWRpdXNDaGFubmVsID0gT2JqZWN0LnZhbHVlcyh0aGlzLnZpc3VhbENoYW5uZWxzKS5maW5kKHZjID0+IHZjLnByb3BlcnR5ID09PSAncmFkaXVzJyk7XG5cbiAgICBpZiAoIXJhZGl1c0NoYW5uZWwpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIGNvbnN0IGZpZWxkID0gcmFkaXVzQ2hhbm5lbC5maWVsZDtcbiAgICBjb25zdCB7cmFkaXVzfSA9IHRoaXMuY29uZmlnLnZpc0NvbmZpZztcblxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gKHRoaXMuY29uZmlnW2ZpZWxkXSA/IDEgOiByYWRpdXMpICogdGhpcy5nZXRab29tRmFjdG9yKG1hcFN0YXRlKTtcbiAgfVxuXG4gIGdldFJhZGl1c1NjYWxlKCkge1xuICAgIGNvbnN0IHJhZGl1c0NoYW5uZWwgPSBPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLmZpbmQodmMgPT4gdmMucHJvcGVydHkgPT09ICdyYWRpdXMnKTtcblxuICAgIGlmICghcmFkaXVzQ2hhbm5lbCB8fCB0aGlzLmNvbmZpZ1tyYWRpdXNDaGFubmVsLmZpZWxkXSkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnZpc0NvbmZpZy5yYWRpdXM7XG4gIH1cblxuICBnZXRNYXhNYXJrZXJTaXplKCkge1xuICAgIGNvbnN0IHtyYWRpdXNGaWVsZCwgc2l6ZUZpZWxkLCB2aXNDb25maWd9ID0gdGhpcy5jb25maWc7XG4gICAgY29uc3Qge3JhZGl1c1JhbmdlLCByYWRpdXN9ID0gdmlzQ29uZmlnO1xuICAgIGNvbnN0IGZpZWxkID0gcmFkaXVzRmllbGQgfHwgc2l6ZUZpZWxkO1xuICAgIHJldHVybiBNYXRoLmNlaWwoKGZpZWxkICYmIHJhZGl1c1JhbmdlID8gcmFkaXVzUmFuZ2VbMV0gOiByYWRpdXMpKTtcbiAgfVxuXG4gIHNob3VsZENhbGN1bGF0ZUxheWVyRGF0YShwcm9wcykge1xuICAgIHJldHVybiBwcm9wcy5zb21lKHAgPT4gIXRoaXMubm9uZUxheWVyRGF0YUFmZmVjdGluZ1Byb3BzLmluY2x1ZGVzKHApKTtcbiAgfVxuXG4gIGdldEJydXNoaW5nRXh0ZW5zaW9uUHJvcHMoaW50ZXJhY3Rpb25Db25maWcsIGJydXNoaW5nVGFyZ2V0KSB7XG4gICAgY29uc3Qge2JydXNofSA9IGludGVyYWN0aW9uQ29uZmlnO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIGJydXNoaW5nXG4gICAgICBhdXRvSGlnaGxpZ2h0OiAhYnJ1c2guZW5hYmxlZCxcbiAgICAgIGJydXNoaW5nUmFkaXVzOiBicnVzaC5jb25maWcuc2l6ZSAqIDEwMDAsXG4gICAgICBicnVzaGluZ1RhcmdldDogYnJ1c2hpbmdUYXJnZXQgfHwgJ3NvdXJjZScsXG4gICAgICBicnVzaGluZ0VuYWJsZWQ6IGJydXNoLmVuYWJsZWRcbiAgICB9O1xuICB9XG5cbiAgZ2V0RGVmYXVsdERlY2tMYXllclByb3BzKHtpZHgsIGdwdUZpbHRlciwgbWFwU3RhdGUsIHZpc2libGUsIG1hc2tQb2x5Z29ufSkge1xuICAgIGNvbnN0IG1hc2tFeHRlbnNpb25Qcm9wcyA9IGdldE1hc2tFeHRlbnNpb25Qcm9wcyhtYXNrUG9seWdvbik7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm1hc2tFeHRlbnNpb25Qcm9wcyxcbiAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgaWR4LFxuICAgICAgY29vcmRpbmF0ZVN5c3RlbTogQ09PUkRJTkFURV9TWVNURU0uTE5HTEFULFxuICAgICAgcGlja2FibGU6IHRoaXMuaGFzSW50ZXJhY3Rpdml0eSxcbiAgICAgIHdyYXBMb25naXR1ZGU6IHRydWUsXG4gICAgICBwYXJhbWV0ZXJzOiB7ZGVwdGhUZXN0OiBCb29sZWFuKG1hcFN0YXRlLmRyYWdSb3RhdGUgfHwgdGhpcy5jb25maWcudmlzQ29uZmlnLmVuYWJsZTNkKX0sXG4gICAgICBoaWRkZW46IHRoaXMuY29uZmlnLmhpZGRlbixcbiAgICAgIHZpc2liaWxpdHlCeVpvb206IHRoaXMuY29uZmlnLnZpc2liaWxpdHlCeVpvb20sXG4gICAgICAvLyB2aXNjb25maWdcbiAgICAgIG9wYWNpdHk6IHRoaXMuY29uZmlnLnZpc0NvbmZpZy5vcGFjaXR5LFxuICAgICAgaGlnaGxpZ2h0Q29sb3I6IHRoaXMuY29uZmlnLmhpZ2hsaWdodENvbG9yLFxuICAgICAgLy8gZGF0YSBmaWx0ZXJpbmdcbiAgICAgIGV4dGVuc2lvbnM6IFtkYXRhRmlsdGVyRXh0ZW5zaW9uLCAuLi5tYXNrRXh0ZW5zaW9uUHJvcHMuZXh0ZW5zaW9uc10sXG4gICAgICBmaWx0ZXJSYW5nZTogZ3B1RmlsdGVyID8gZ3B1RmlsdGVyLmZpbHRlclJhbmdlIDogdW5kZWZpbmVkLFxuICAgICAgLy8gbGF5ZXIgc2hvdWxkIGJlIHZpc2libGUgYW5kIGlmIHNwbGl0TWFwLCBzaG93biBpbiB0byBvbmUgb2YgcGFuZWxcbiAgICAgIHZpc2libGU6IHRoaXMuY29uZmlnLmlzVmlzaWJsZSAmJiB2aXNpYmxlXG4gICAgfTtcbiAgfVxuXG4gIGdldERlZmF1bHRIb3ZlckxheWVyUHJvcHMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBgJHt0aGlzLmlkfS1ob3ZlcmVkYCxcbiAgICAgIHBpY2thYmxlOiBmYWxzZSxcbiAgICAgIHdyYXBMb25naXR1ZGU6IHRydWUsXG4gICAgICBjb29yZGluYXRlU3lzdGVtOiBDT09SRElOQVRFX1NZU1RFTS5MTkdMQVRcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyVGV4dExhYmVsTGF5ZXIoXG4gICAge2dldFBvc2l0aW9uLCBnZXRSYWRpdXMsIHJhZGl1c1NjYWxlLCB1cGRhdGVUcmlnZ2Vycywgc2hhcmVkUHJvcHN9LFxuICAgIHJlbmRlck9wdHNcbiAgKSB7XG4gICAgY29uc3Qge2RhdGF9ID0gcmVuZGVyT3B0cztcbiAgICBjb25zdCB7dGV4dExhYmVsLCB2aXNpYmlsaXR5Qnlab29tfSA9IHRoaXMuY29uZmlnO1xuICAgIGNvbnN0IGV4dGVuc2lvbnMgPSBbLi4uc2hhcmVkUHJvcHMuZXh0ZW5zaW9ucywgY29sbGlzaW9uRmlsdGVyRXh0ZW5zaW9uXTtcblxuICAgIGlmICghZGF0YSB8fCAhZGF0YS50ZXh0TGFiZWxzIHx8ICFkYXRhLnRleHRMYWJlbHNbMF0gfHwgIWRhdGEudGV4dExhYmVsc1swXS5nZXRUZXh0KSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgW21haW5MYWJlbCwgc2Vjb25kYXJ5TGFiZWxdID0gdGV4dExhYmVsO1xuICAgIGNvbnN0IHtcbiAgICAgIGFsaWdubWVudCxcbiAgICAgIGFuY2hvcixcbiAgICAgIGNvbG9yOiBnZXRDb2xvcixcbiAgICAgIGZpZWxkOiBtYWluRmllbGQsXG4gICAgICBvdXRsaW5lQ29sb3IsXG4gICAgICBzaXplOiBzaXplU2NhbGVcbiAgICB9ID0gbWFpbkxhYmVsO1xuICAgIGNvbnN0IHtcbiAgICAgIGNvbG9yOiBnZXRTZWNvbmRhcnlDb2xvcixcbiAgICAgIGZpZWxkOiBzZWNvbmRhcnlGaWVsZCxcbiAgICAgIG91dGxpbmVDb2xvcjogc2Vjb25kYXJ5T3V0bGluZUNvbG9yLFxuICAgICAgc2l6ZTogc2Vjb25kYXJ5U2l6ZVNjYWxlXG4gICAgfSA9IHNlY29uZGFyeUxhYmVsIHx8IHt9O1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIG5ldyBQb2ludExhYmVsTGF5ZXIoe1xuICAgICAgICAuLi5zaGFyZWRQcm9wcyxcblxuICAgICAgICAvLyBSZWNyZWF0ZSBsYXllciB3aGVuIGxhYmVscyBjaGFuZ2Ugb3RoZXJ3aXNlIHJlbmRlcmluZyBicmVha3NcbiAgICAgICAgLy8gVE9ETyBjb3VsZCBiZSBtb3JlIGVmZmljaWVudCB3aXRoIHVwZGF0ZVRyaWdnZXJzP1xuICAgICAgICBpZDogYCR7dGhpcy5pZH0tJHttYWluRmllbGQ/Lm5hbWV9LSR7c2Vjb25kYXJ5RmllbGQ/Lm5hbWV9LWxhYmVsYCxcbiAgICAgICAgZGF0YTogZGF0YS5kYXRhLFxuICAgICAgICB2aXNpYmlsaXR5Qnlab29tLFxuICAgICAgICBleHRlbnNpb25zLFxuXG4gICAgICAgIGNoYXJhY3RlclNldDogJ2F1dG8nLFxuICAgICAgICBjb2xsaXNpb25FbmFibGVkOiB0cnVlLFxuICAgICAgICBjb2xsaXNpb25Hcm91cDogYCR7dGhpcy5pZH0tbGFiZWxzYCxcblxuICAgICAgICBnZXRUZXh0OiBkYXRhLnRleHRMYWJlbHNbMF0uZ2V0VGV4dCxcbiAgICAgICAgZ2V0Q29sb3IsXG4gICAgICAgIHNpemVTY2FsZSxcbiAgICAgICAgb3V0bGluZUNvbG9yLFxuXG4gICAgICAgIC4uLihzZWNvbmRhcnlGaWVsZCAmJiB7XG4gICAgICAgICAgZ2V0U2Vjb25kYXJ5VGV4dDogZGF0YS50ZXh0TGFiZWxzWzFdLmdldFRleHQsXG4gICAgICAgICAgZ2V0U2Vjb25kYXJ5Q29sb3IsXG4gICAgICAgICAgc2Vjb25kYXJ5U2l6ZVNjYWxlLFxuICAgICAgICAgIHNlY29uZGFyeU91dGxpbmVDb2xvclxuICAgICAgICB9KSxcblxuICAgICAgICAvLyBQb3NpdGlvblxuICAgICAgICBnZXRQb3NpdGlvbixcbiAgICAgICAgZ2V0UmFkaXVzLFxuICAgICAgICByYWRpdXNTY2FsZSxcbiAgICAgICAgZ2V0VGV4dEFuY2hvcjogYW5jaG9yLFxuICAgICAgICBnZXRBbGlnbm1lbnRCYXNlbGluZTogYWxpZ25tZW50LFxuXG4gICAgICAgIC8vIFN0eWxlXG4gICAgICAgIGZvbnRGYW1pbHk6ICdJbnRlciwgc2FucycsXG4gICAgICAgIGZvbnRTZXR0aW5nczoge3NkZjogdHJ1ZX0sXG4gICAgICAgIGZvbnRXZWlnaHQ6IDUwMCxcbiAgICAgICAgb3V0bGluZVdpZHRoOiA0LFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgLy8gdGV4dCB3aWxsIGFsd2F5cyBzaG93IG9uIHRvcCBvZiBhbGwgbGF5ZXJzXG4gICAgICAgICAgZGVwdGhUZXN0OiBmYWxzZVxuICAgICAgICB9LFxuXG4gICAgICAgIGdldEZpbHRlclZhbHVlOiBkYXRhLmdldEZpbHRlclZhbHVlLFxuICAgICAgICB1cGRhdGVUcmlnZ2Vyczoge1xuICAgICAgICAgIC4uLnVwZGF0ZVRyaWdnZXJzLFxuICAgICAgICAgIGdldFRleHQ6IG1haW5GaWVsZD8ubmFtZSxcbiAgICAgICAgICBnZXRDb2xvcjogbWFpbkZpZWxkPy5jb2xvcixcbiAgICAgICAgICBnZXRUZXh0QW5jaG9yOiBtYWluTGFiZWwuYW5jaG9yLFxuICAgICAgICAgIGdldEFsaWdubWVudEJhc2VsaW5lOiBtYWluTGFiZWwuYWxpZ25tZW50LFxuICAgICAgICAgIGdldFNlY29uZGFyeVRleHQ6IHNlY29uZGFyeUZpZWxkPy5uYW1lXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgZGVjay5nbCBgSWNvbkxheWVyYCBcImF1dG9QYWNrXCIgbW9kZSBhY2Nlc3NvciBmb3IgY3VzdG9tIG1hcmtlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gaWNvblVybEFjY2Vzc29yIGRlY2suZ2wgYWNjZXNzb3IgKG9yIHZhbHVlKSB0aGF0IHJlc29sdmVzIHRvIFVSTCBvZiBpY29uIGZvciBnaXZlbiByb3dcbiAgICogQHJldHVybnMgZGVjay5nbCBhY2Nlc3NvciB0aGF0IHJldHVybnMgVW5wYWNrZWRJY29uIHJlYWR5IHRvIGNvbnN1bWUgYnkgSWNvbkxheWVyXG4gICAqL1xuICBnZXRDdXN0b21NYXJrZXJJY29uQWNjZXNzb3IoaWNvblVybEFjY2Vzc29yLCBtYXNrID0gdHJ1ZSkge1xuICAgIGNvbnN0IG1heEljb25TaXplID0gdGhpcy5nZXRNYXhNYXJrZXJTaXplKCk7XG5cbiAgICByZXR1cm4gZCA9PiB7XG4gICAgICBjb25zdCB3YW50ZWRVcmwgPVxuICAgICAgICAodHlwZW9mIGljb25VcmxBY2Nlc3NvciA9PT0gJ2Z1bmN0aW9uJykgPyBpY29uVXJsQWNjZXNzb3IoZCkgOiBpY29uVXJsQWNjZXNzb3I7XG4gICAgICBjb25zdCBpY29uT2sgPSBCb29sZWFuKHdhbnRlZFVybCk7XG4gICAgICBtYXNrID0gaWNvbk9rID8gbWFzayA6IHRydWU7XG4gICAgICBjb25zdCB1cmwgPSBpY29uT2sgPyB3YW50ZWRVcmwgOiBGQUxMQkFDS19JQ09OO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IGAke3VybH1AQCR7bWF4SWNvblNpemV9QCR7bWFzayA/ICdtJyA6ICdjJ31gLFxuICAgICAgICB1cmwsXG4gICAgICAgIHdpZHRoOiBtYXhJY29uU2l6ZSxcbiAgICAgICAgaGVpZ2h0OiBtYXhJY29uU2l6ZSxcbiAgICAgICAgbWFza1xuICAgICAgfTtcbiAgICB9O1xuICB9XG5cbiAgY2FsY3VsYXRlRGF0YUF0dHJpYnV0ZShrZXBsZXJUYWJsZSwgZ2V0UG9zaXRpb24pIHtcbiAgICAvLyBpbXBsZW1lbnRlZCBpbiBzdWJjbGFzc2VzXG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgdXBkYXRlTGF5ZXJNZXRhKGRhdGFDb250YWluZXIsIGdldFBvc2l0aW9uKSB7XG4gICAgLy8gaW1wbGVtZW50ZWQgaW4gc3ViY2xhc3Nlc1xuICB9XG5cbiAgZ2V0UG9zaXRpb25BY2Nlc3NvcihkYXRhQ29udGFpbmVyKSB7XG4gICAgLy8gaW1wbGVtZW50ZWQgaW4gc3ViY2xhc3Nlc1xuICAgIHJldHVybiAoKSA9PiBudWxsO1xuICB9XG5cbiAgZ2V0SGV4Q29sdW1uKHJhbmdlKSB7XG4gICAgY29uc3QgZmllbGQgPSBPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpPy5maW5kKHZhbHVlID0+IHZhbHVlLnJhbmdlID09PSByYW5nZSk/LmZpZWxkO1xuICAgIGlmIChmaWVsZCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29uZmlnW2ZpZWxkXS5jb2xvckNvbHVtbjtcbiAgICB9XG4gIH1cblxuICBpc0NvbG9yZWRCeUNvbG9yQ29sdW1uKHJhbmdlKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnZpc0NvbmZpZ1tyYW5nZV0/LmhleENvbG9yO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IExheWVyO1xuIl19