@carto/kepler.gl 0.0.66 → 0.0.67
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +912 -0
- package/README.md +42 -652
- package/dist/components/plot-container.js +4 -2
- package/dist/components/side-panel/layer-panel/custom-marker-categories-selector.js +45 -0
- package/dist/components/side-panel/layer-panel/layer-config-group.js +3 -3
- package/dist/components/side-panel/layer-panel/text-label-panel.js +14 -7
- package/dist/constants/default-settings.js +4 -4
- package/dist/layers/base-layer.js +73 -77
- package/dist/layers/layer-factory.js +23 -26
- package/dist/layers/layer-text-label.js +2 -23
- package/dist/layers/point-layer/point-layer.js +9 -10
- package/dist/localization/en.js +8 -5
- package/dist/processors/data-processor.js +1 -4
- package/dist/reducers/vis-state-updaters.js +16 -8
- package/package.json +13 -8
- package/src/components/plot-container.js +1 -1
- package/src/components/side-panel/layer-panel/custom-marker-categories-selector.js +33 -0
- package/src/components/side-panel/layer-panel/layer-config-group.js +2 -2
- package/src/components/side-panel/layer-panel/text-label-panel.js +44 -25
- package/src/constants/default-settings.js +2 -2
- package/src/layers/base-layer.js +83 -75
- package/src/layers/layer-factory.js +12 -4
- package/src/layers/layer-text-label.js +3 -34
- package/src/layers/point-layer/point-layer.js +7 -11
- package/src/localization/en.js +7 -4
- package/src/processors/data-processor.js +1 -4
- package/src/reducers/vis-state-updaters.js +13 -10
|
@@ -363,16 +363,24 @@ function addOrRemoveTextLabels(newFields, textLabel) {
|
|
|
363
363
|
|
|
364
364
|
newTextLabel = newTextLabel.filter(function (tl) {
|
|
365
365
|
return tl.field && !deleteFields.includes(tl.field.name);
|
|
366
|
-
});
|
|
367
|
-
newTextLabel = !newTextLabel.length ? [_layerFactory.DEFAULT_TEXT_LABEL] : newTextLabel; // add
|
|
366
|
+
}); // add
|
|
368
367
|
|
|
369
|
-
newTextLabel =
|
|
368
|
+
newTextLabel = newTextLabel.filter(function (tl) {
|
|
370
369
|
return tl.field;
|
|
371
|
-
})
|
|
372
|
-
|
|
370
|
+
});
|
|
371
|
+
var defaultLabel = newTextLabel.length ? _layerFactory.DEFAULT_SECONDARY_TEXT_LABEL : _layerFactory.DEFAULT_TEXT_LABEL;
|
|
372
|
+
newTextLabel = [].concat((0, _toConsumableArray2["default"])(newTextLabel), (0, _toConsumableArray2["default"])(addFields.map(function (af) {
|
|
373
|
+
return _objectSpread(_objectSpread({}, defaultLabel), {}, {
|
|
373
374
|
field: af
|
|
374
375
|
});
|
|
375
|
-
})));
|
|
376
|
+
}))); // limit to 2 labels (overwrite 2nd label with 3rd)
|
|
377
|
+
|
|
378
|
+
if (newTextLabel.length > 2) {
|
|
379
|
+
newTextLabel = [newTextLabel[0], newTextLabel[2]];
|
|
380
|
+
} // default
|
|
381
|
+
|
|
382
|
+
|
|
383
|
+
newTextLabel = !newTextLabel.length ? [_layerFactory.DEFAULT_TEXT_LABEL] : newTextLabel;
|
|
376
384
|
return newTextLabel;
|
|
377
385
|
}
|
|
378
386
|
|
|
@@ -412,7 +420,7 @@ function layerTextLabelChangeUpdater(state, action) {
|
|
|
412
420
|
|
|
413
421
|
if (!textLabel[idx] && idx === textLabel.length) {
|
|
414
422
|
// if idx is set to length, add empty text label
|
|
415
|
-
newTextLabel = [].concat((0, _toConsumableArray2["default"])(textLabel), [_layerFactory.DEFAULT_TEXT_LABEL]);
|
|
423
|
+
newTextLabel = [].concat((0, _toConsumableArray2["default"])(textLabel), [idx === 0 ? _layerFactory.DEFAULT_TEXT_LABEL : _layerFactory.DEFAULT_SECONDARY_TEXT_LABEL]);
|
|
416
424
|
}
|
|
417
425
|
|
|
418
426
|
if (idx === 'all' && prop === 'fields') {
|
|
@@ -2422,4 +2430,4 @@ function setLayerAnimationTimeConfigUpdater(state, _ref30) {
|
|
|
2422
2430
|
var updates = checkTimeConfigArgs(config);
|
|
2423
2431
|
return (0, _composerHelpers.pick_)('animationConfig')((0, _composerHelpers.merge_)(updates))(state);
|
|
2424
2432
|
}
|
|
2425
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZWR1Y2Vycy92aXMtc3RhdGUtdXBkYXRlcnMuanMiXSwibmFtZXMiOlsidmlzU3RhdGVVcGRhdGVycyIsIkRFRkFVTFRfQU5JTUFUSU9OX0NPTkZJRyIsImRvbWFpbiIsImN1cnJlbnRUaW1lIiwic3BlZWQiLCJpc0FuaW1hdGluZyIsInRpbWVGb3JtYXQiLCJ0aW1lem9uZSIsImRlZmF1bHRUaW1lRm9ybWF0IiwiREVGQVVMVF9FRElUT1IiLCJtb2RlIiwiRURJVE9SX01PREVTIiwiRFJBV19QT0xZR09OIiwiZmVhdHVyZXMiLCJzZWxlY3RlZEZlYXR1cmUiLCJ2aXNpYmxlIiwiSU5JVElBTF9WSVNfU1RBVEUiLCJtYXBJbmZvIiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsImxheWVycyIsImxheWVyRGF0YSIsImxheWVyVG9CZU1lcmdlZCIsImxheWVyT3JkZXIiLCJmaWx0ZXJzIiwiZmlsdGVyVG9CZU1lcmdlZCIsImRhdGFzZXRzIiwiZWRpdGluZ0RhdGFzZXQiLCJ1bmRlZmluZWQiLCJpbnRlcmFjdGlvbkNvbmZpZyIsImludGVyYWN0aW9uVG9CZU1lcmdlZCIsImxheWVyQmxlbmRpbmciLCJob3ZlckluZm8iLCJjbGlja2VkIiwibW91c2VQb3MiLCJzcGxpdE1hcHMiLCJzcGxpdE1hcHNUb0JlTWVyZ2VkIiwibGF5ZXJDbGFzc2VzIiwiTGF5ZXJDbGFzc2VzIiwiYW5pbWF0aW9uQ29uZmlnIiwiZWRpdG9yIiwiZmlsZUxvYWRpbmciLCJmaWxlTG9hZGluZ1Byb2dyZXNzIiwibG9hZGVycyIsImxvYWRPcHRpb25zIiwibWVyZ2VycyIsIlZJU19TVEFURV9NRVJHRVJTIiwic2NoZW1hIiwiS2VwbGVyR0xTY2hlbWEiLCJ1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEiLCJzdGF0ZSIsImxheWVyIiwiaWR4IiwibWFwIiwibHlyIiwiaSIsImQiLCJ1cGRhdGVTdGF0ZU9uTGF5ZXJWaXNpYmlsaXR5Q2hhbmdlIiwibmV3U3RhdGUiLCJsZW5ndGgiLCJjb25maWciLCJpc1Zpc2libGUiLCJhbmltYXRpb24iLCJlbmFibGVkIiwidXBkYXRlQW5pbWF0aW9uRG9tYWluIiwibGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyIiwiYWN0aW9uIiwib2xkTGF5ZXIiLCJmaW5kSW5kZXgiLCJsIiwiaWQiLCJwcm9wcyIsIk9iamVjdCIsImtleXMiLCJuZXdDb25maWciLCJkYXRhSWQiLCJyZXN0Q29uZmlnIiwic3RhdGVXaXRoRGF0YUlkIiwibGF5ZXJEYXRhSWRDaGFuZ2VVcGRhdGVyIiwibmV4dExheWVyIiwiZmluZCIsIm5ld0xheWVyIiwidXBkYXRlTGF5ZXJDb25maWciLCJzaG91bGRDYWxjdWxhdGVMYXllckRhdGEiLCJvbGRMYXllckRhdGEiLCJ1cGRhdGVMYXllckRhdGFSZXN1bHQiLCJhZGRPclJlbW92ZVRleHRMYWJlbHMiLCJuZXdGaWVsZHMiLCJ0ZXh0TGFiZWwiLCJuZXdUZXh0TGFiZWwiLCJzbGljZSIsImN1cnJlbnRGaWVsZHMiLCJ0bCIsImZpZWxkIiwibmFtZSIsImZpbHRlciIsImFkZEZpZWxkcyIsImYiLCJpbmNsdWRlcyIsImRlbGV0ZUZpZWxkcyIsImZkIiwiREVGQVVMVF9URVhUX0xBQkVMIiwiYWYiLCJ1cGRhdGVUZXh0TGFiZWxQcm9wQW5kVmFsdWUiLCJwcm9wIiwidmFsdWUiLCJoYXNPd25Qcm9wZXJ0eSIsInNwbGljZSIsImxheWVyVGV4dExhYmVsQ2hhbmdlVXBkYXRlciIsInZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhIiwiZGF0YXNldCIsImxvYWRlZExheWVyIiwiYWxsb3dFbXB0eUNvbHVtbiIsImlzVmFsaWRUb1NhdmUiLCJ2YWxpZGF0ZWQiLCJ0eXBlIiwiaXNDb25maWdBY3RpdmUiLCJ1cGRhdGVMYXllckRvbWFpbiIsImxheWVyVHlwZUNoYW5nZVVwZGF0ZXIiLCJuZXdUeXBlIiwib2xkSWQiLCJDb25zb2xlIiwiZXJyb3IiLCJhc3NpZ25Db25maWdUb0xheWVyIiwidmlzQ29uZmlnU2V0dGluZ3MiLCJzZXR0aW5ncyIsIm9sZExheWVyTWFwIiwib3RoZXJMYXllcnMiLCJsYXllclZpc3VhbENoYW5uZWxDaGFuZ2VVcGRhdGVyIiwiY2hhbm5lbCIsInVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbCIsImxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlciIsIm5ld1Zpc0NvbmZpZyIsInZpc0NvbmZpZyIsInNldEZpbHRlckFuaW1hdGlvblRpbWVVcGRhdGVyIiwic2V0RmlsdGVyVXBkYXRlciIsInNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXIiLCJhbmltYXRpb25XaW5kb3ciLCJ2YWx1ZUluZGV4Iiwib2xkRmlsdGVyIiwibmV3RmlsdGVyIiwiZGF0YXNldElkcyIsIkZJTFRFUl9VUERBVEVSX1BST1BTIiwiZGF0YXNldElkIiwibWVyZ2VEb21haW4iLCJ1cGRhdGVkRmlsdGVyIiwibmV3RGF0YXNldCIsImdwdSIsImxheWVySWQiLCJsYXllcklkRGlmZmVyZW5jZSIsImxheWVyRGF0YUlkcyIsImxpZCIsIm5ld0RhdGFJZHMiLCJlbmxhcmdlZEZpbHRlciIsImVubGFyZ2VkIiwiZGF0YXNldElkc1RvRmlsdGVyIiwiTElNSVRFRF9GSUxURVJfRUZGRUNUX1BST1BTIiwiZmlsdGVyZWREYXRhc2V0cyIsInVwZGF0ZUFsbExheWVyRG9tYWluRGF0YSIsInNldEZpbHRlclBsb3RVcGRhdGVyIiwibmV3UHJvcCIsInBsb3RUeXBlIiwiYWRkRmlsdGVyVXBkYXRlciIsImxheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXIiLCJvbGRWaXhDb25maWciLCJ1cGRhdGVMYXllckNvbG9yVUkiLCJ0b2dnbGVGaWx0ZXJBbmltYXRpb25VcGRhdGVyIiwidG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyIiwidG9nZ2xlTGF5ZXJBbmltYXRpb25Db250cm9sVXBkYXRlciIsImhpZGVDb250cm9sIiwidXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyIiwic2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlciIsInVwZGF0ZUxheWVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyIiwiZW5sYXJnZUZpbHRlclVwZGF0ZXIiLCJ0b2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlciIsImFzc2lnbiIsInJlbW92ZUZpbHRlclVwZGF0ZXIiLCJuZXdGaWx0ZXJzIiwibmV3RWRpdG9yIiwiYWRkTGF5ZXJVcGRhdGVyIiwibmV3TGF5ZXJEYXRhIiwid2FybiIsInJlc3VsdCIsImRlZmF1bHREYXRhc2V0IiwiTGF5ZXIiLCJyZW1vdmVMYXllclVwZGF0ZXIiLCJsYXllclRvUmVtb3ZlIiwibmV3TWFwcyIsInBpZCIsImlzTGF5ZXJIb3ZlcmVkIiwiZHVwbGljYXRlTGF5ZXJVcGRhdGVyIiwib3JpZ2luYWwiLCJvcmlnaW5hbExheWVyT3JkZXJJZHgiLCJuZXdMYWJlbCIsImxhYmVsIiwicG9zdGZpeCIsIkxBWUVSX0lEX0xFTkdUSCIsIm5leHRTdGF0ZSIsIm5ld0xheWVyT3JkZXJJZHgiLCJuZXdMYXllck9yZGVyIiwicmVvcmRlckxheWVyVXBkYXRlciIsIm9yZGVyIiwicmVtb3ZlRGF0YXNldFVwZGF0ZXIiLCJkYXRhc2V0S2V5IiwibmV3RGF0YXNldHMiLCJpbmRleGVzIiwicmVkdWNlIiwibGlzdE9mSW5kZXhlcyIsImluZGV4IiwicHVzaCIsImN1cnJlbnRTdGF0ZSIsImluZGV4Q291bnRlciIsImN1cnJlbnRJbmRleCIsInRvb2x0aXAiLCJmaWVsZHNUb1Nob3ciLCJmaWVsZHMiLCJ1cGRhdGVMYXllckJsZW5kaW5nVXBkYXRlciIsInNob3dEYXRhc2V0VGFibGVVcGRhdGVyIiwicmVzZXRNYXBDb25maWdVcGRhdGVyIiwiaW5pdGlhbFN0YXRlIiwicmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIiLCJwYXlsb2FkIiwib3B0aW9ucyIsInZpc1N0YXRlIiwia2VlcEV4aXN0aW5nQ29uZmlnIiwibWVyZ2VkU3RhdGUiLCJtZXJnZXIiLCJtZXJnZSIsImxheWVySG92ZXJVcGRhdGVyIiwiaW5mbyIsImludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlciIsImNvbnRyYWRpY3QiLCJmb3JFYWNoIiwiayIsImxheWVyQ2xpY2tVcGRhdGVyIiwiY29vcmRpbmF0ZSIsInBpbm5lZCIsInBpY2tlZCIsIm1hcENsaWNrVXBkYXRlciIsIm1vdXNlTW92ZVVwZGF0ZXIiLCJldnQiLCJ2YWx1ZXMiLCJzb21lIiwibW91c2VQb3NpdGlvbiIsInBvaW50IiwibG5nTGF0IiwidG9nZ2xlU3BsaXRNYXBVcGRhdGVyIiwiY2xvc2VTcGVjaWZpY01hcEF0SW5kZXgiLCJ0b2dnbGVMYXllckZvck1hcFVwZGF0ZXIiLCJtYXBJbmRleCIsInNtIiwidXBkYXRlVmlzRGF0YVVwZGF0ZXIiLCJuZXdEYXRhRW50cmllcyIsImFjY3UiLCJyZXN0IiwiZGF0YUVtcHR5IiwicHJldmlvdXNTdGF0ZSIsInRvTWVyZ2VQcm9wIiwidG9NZXJnZSIsIm5ld0xheWVycyIsImF1dG9DcmVhdGVMYXllcnMiLCJhZGREZWZhdWx0TGF5ZXJzIiwidG9vbHRpcEZpZWxkcyIsIkFycmF5IiwiaXNBcnJheSIsImFkZERlZmF1bHRUb29sdGlwcyIsInVwZGF0ZWRTdGF0ZSIsInJlbmFtZURhdGFzZXRVcGRhdGVyIiwiZXhpc3RpbmciLCJpbmRleFRvUmV0cmlldmUiLCJtYXBMYXllcnMiLCJsb2FkRmlsZXNVcGRhdGVyIiwiZmlsZXMiLCJvbkZpbmlzaCIsImxvYWRGaWxlc1N1Y2Nlc3MiLCJmcm9tIiwiaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MiLCJmaWxlQ2FjaGUiLCJmaWxlc1RvTG9hZCIsImxvYWROZXh0RmlsZVVwZGF0ZXIiLCJsb2FkRmlsZVN0ZXBTdWNjZXNzVXBkYXRlciIsImZpbGVOYW1lIiwic3RhdGVXaXRoUHJvZ3Jlc3MiLCJ1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlciIsInByb2dyZXNzIiwicGVyY2VudCIsIm1lc3NhZ2UiLCJzdGF0ZVdpdGhDYWNoZSIsImxvYWROZXh0RmlsZSIsImZpbGUiLCJyZW1haW5pbmdGaWxlc1RvTG9hZCIsIm1ha2VMb2FkRmlsZVRhc2siLCJiaW1hcCIsImdlbiIsImNvbnRlbnQiLCJlcnIiLCJwcm9jZXNzRmlsZUNvbnRlbnRVcGRhdGVyIiwicGFyc2VQcm9ncmVzcyIsInByZXZQcm9ncmVzcyIsIm5leHRGaWxlQmF0Y2hVcGRhdGVyIiwiYWNjdW11bGF0ZWQiLCJuZXh0IiwiZG9uZSIsImxvYWRGaWxlc0VyclVwZGF0ZXIiLCJhcHBseUNQVUZpbHRlclVwZGF0ZXIiLCJkYXRhSWRzIiwic2V0TWFwSW5mb1VwZGF0ZXIiLCJlbXB0eSIsImRlZmF1bHRMYXllcnMiLCJmb3VuZExheWVycyIsImNvbmNhdCIsIl8iLCJtZXRhZGF0YSIsImlzRHluYW1pY1NwYXRpYWxJbmRleCIsIm1lcmdlZCIsImZpeGVkRG9tYWluIiwiYW5pbWF0YWJsZUxheWVycyIsImFuaW1hdGlvbkRvbWFpbiIsIm1lcmdlZERvbWFpbiIsIk1hdGgiLCJtaW4iLCJtYXgiLCJOdW1iZXIiLCJJbmZpbml0eSIsInNldEVkaXRvck1vZGVVcGRhdGVyIiwic2V0RmVhdHVyZXNVcGRhdGVyIiwibGFzdEZlYXR1cmUiLCJwcm9wZXJ0aWVzIiwiaXNDbG9zZWQiLCJFRElUIiwiZmVhdHVyZSIsImZpbHRlcklkIiwiZmVhdHVyZVZhbHVlIiwiZmlsdGVySWR4IiwiZmlsIiwic2V0U2VsZWN0ZWRGZWF0dXJlVXBkYXRlciIsImRlbGV0ZUZlYXR1cmVVcGRhdGVyIiwic2V0UG9seWdvbkZpbHRlckxheWVyVXBkYXRlciIsIm5ld0xheWVySWQiLCJub25lRmlsdGVyRmVhdHVyZSIsImlzTGF5ZXJJbmNsdWRlZCIsInNvcnRUYWJsZUNvbHVtblVwZGF0ZXIiLCJjb2x1bW4iLCJzb3J0TW9kZSIsImN1cnJlbnRNb2RlIiwiU09SVF9PUkRFUiIsIm0iLCJBU0NFTkRJTkciLCJzb3J0ZWQiLCJwaW5UYWJsZUNvbHVtblVwZGF0ZXIiLCJwaW5uZWRDb2x1bW5zIiwiY28iLCJjb3B5VGFibGVDb2x1bW5VcGRhdGVyIiwiZmllbGRJZHgiLCJ0ZXh0IiwiZGF0YUNvbnRhaW5lciIsInJvdyIsInZhbHVlQXQiLCJqb2luIiwidG9nZ2xlRWRpdG9yVmlzaWJpbGl0eVVwZGF0ZXIiLCJzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlciIsIkZJTFRFUl9UWVBFUyIsInRpbWVSYW5nZSIsInVwZGF0ZXMiLCJjaGVja1RpbWVDb25maWdBcmdzIiwiYWxsb3dlZCIsInNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZ1VwZGF0ZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0JBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQUVBOztBQVFBOztBQUNBOztBQWdCQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFFQTs7QUFRQTs7QUFNQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQTs7Ozs7Ozs7Ozs7Ozs7OztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBO0FBQ0E7O0FBQ0EsSUFBTUEsZ0JBQWdCLEdBQUcsSUFBekI7QUFDQTs7QUFFQTs7QUFDTyxJQUFNQyx3QkFBd0IsR0FBRztBQUN0Q0MsRUFBQUEsTUFBTSxFQUFFLElBRDhCO0FBRXRDQyxFQUFBQSxXQUFXLEVBQUUsSUFGeUI7QUFHdENDLEVBQUFBLEtBQUssRUFBRSxDQUgrQjtBQUl0Q0MsRUFBQUEsV0FBVyxFQUFFLEtBSnlCO0FBS3RDQyxFQUFBQSxVQUFVLEVBQUUsSUFMMEI7QUFNdEND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RDtBQUFBLE1BQVRVLE1BQVMsVUFBVEEsTUFBUzs7QUFDbEUsTUFBSSxDQUFDQSxNQUFMLEVBQWE7QUFDWCxXQUFPVixLQUFQO0FBQ0Q7O0FBQ0QsTUFBTXlULE9BQU8sR0FBR0MsbUJBQW1CLENBQUNoVCxNQUFELENBQW5DO0FBQ0EsU0FBTyw0QkFBTSxpQkFBTixFQUF5Qiw2QkFBTytTLE9BQVAsQ0FBekIsRUFBMEN6VCxLQUExQyxDQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjIgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQge2NvbnNvbGUgYXMgQ29uc29sZX0gZnJvbSAnZ2xvYmFsL3dpbmRvdyc7XG5pbXBvcnQge2Rpc2FibGVTdGFja0NhcHR1cmluZywgd2l0aFRhc2t9IGZyb20gJ3JlYWN0LXBhbG0vdGFza3MnO1xuaW1wb3J0IGNsb25lRGVlcCBmcm9tICdsb2Rhc2guY2xvbmVkZWVwJztcbmltcG9ydCB1bmlxIGZyb20gJ2xvZGFzaC51bmlxJztcbmltcG9ydCBnZXQgZnJvbSAnbG9kYXNoLmdldCc7XG5pbXBvcnQgeG9yIGZyb20gJ2xvZGFzaC54b3InO1xuaW1wb3J0IGNvcHkgZnJvbSAnY29weS10by1jbGlwYm9hcmQnO1xuaW1wb3J0IHtwYXJzZUZpZWxkVmFsdWV9IGZyb20gJ3V0aWxzL2RhdGEtdXRpbHMnO1xuLy8gVGFza3NcbmltcG9ydCB7TE9BRF9GSUxFX1RBU0ssIFVOV1JBUF9UQVNLLCBQUk9DRVNTX0ZJTEVfREFUQSwgREVMQVlfVEFTS30gZnJvbSAndGFza3MvdGFza3MnO1xuLy8gQWN0aW9uc1xuaW1wb3J0IHtcbiAgbG9hZEZpbGVzRXJyLFxuICBsb2FkRmlsZXNTdWNjZXNzLFxuICBsb2FkRmlsZVN0ZXBTdWNjZXNzLFxuICBsb2FkTmV4dEZpbGUsXG4gIG5leHRGaWxlQmF0Y2hcbn0gZnJvbSAnYWN0aW9ucy92aXMtc3RhdGUtYWN0aW9ucyc7XG4vLyBVdGlsc1xuaW1wb3J0IHtmaW5kRmllbGRzVG9TaG93LCBnZXREZWZhdWx0SW50ZXJhY3Rpb259IGZyb20gJ3V0aWxzL2ludGVyYWN0aW9uLXV0aWxzJztcbmltcG9ydCB7XG4gIGFwcGx5RmlsdGVyRmllbGROYW1lLFxuICBhcHBseUZpbHRlcnNUb0RhdGFzZXRzLFxuICBmZWF0dXJlVG9GaWx0ZXJWYWx1ZSxcbiAgRklMVEVSX1VQREFURVJfUFJPUFMsXG4gIGZpbHRlckRhdGFzZXRDUFUsXG4gIGdlbmVyYXRlUG9seWdvbkZpbHRlcixcbiAgZ2V0RGVmYXVsdEZpbHRlcixcbiAgZ2V0RGVmYXVsdEZpbHRlclBsb3RUeXBlLFxuICBnZXRGaWx0ZXJJZEluRmVhdHVyZSxcbiAgZ2V0RmlsdGVyUGxvdCxcbiAgZ2V0VGltZVdpZGdldFRpdGxlRm9ybWF0dGVyLFxuICBpc0luUmFuZ2UsXG4gIExJTUlURURfRklMVEVSX0VGRkVDVF9QUk9QUyxcbiAgdXBkYXRlRmlsdGVyRGF0YUlkXG59IGZyb20gJ3V0aWxzL2ZpbHRlci11dGlscyc7XG5pbXBvcnQge2Fzc2lnbkdwdUNoYW5uZWwsIHNldEZpbHRlckdwdU1vZGV9IGZyb20gJ3V0aWxzL2dwdS1maWx0ZXItdXRpbHMnO1xuaW1wb3J0IHtjcmVhdGVOZXdEYXRhRW50cnl9IGZyb20gJ3V0aWxzL2RhdGFzZXQtdXRpbHMnO1xuaW1wb3J0IHtzb3J0RGF0YXNldEJ5Q29sdW1ufSBmcm9tICd1dGlscy90YWJsZS11dGlscy9rZXBsZXItdGFibGUnO1xuaW1wb3J0IHtzZXQsIHRvQXJyYXksIGFycmF5SW5zZXJ0LCBnZW5lcmF0ZUhhc2hJZH0gZnJvbSAndXRpbHMvdXRpbHMnO1xuXG5pbXBvcnQge2NhbGN1bGF0ZUxheWVyRGF0YSwgZmluZERlZmF1bHRMYXllcn0gZnJvbSAndXRpbHMvbGF5ZXItdXRpbHMnO1xuXG5pbXBvcnQge1xuICBpc1ZhbGlkTWVyZ2VyLFxuICBWSVNfU1RBVEVfTUVSR0VSUyxcbiAgdmFsaWRhdGVMYXllcldpdGhEYXRhLFxuICBjcmVhdGVMYXllckZyb21Db25maWcsXG4gIHNlcmlhbGl6ZUxheWVyXG59IGZyb20gJy4vdmlzLXN0YXRlLW1lcmdlcic7XG5cbmltcG9ydCB7XG4gIGFkZE5ld0xheWVyc1RvU3BsaXRNYXAsXG4gIGNvbXB1dGVTcGxpdE1hcExheWVycyxcbiAgcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzXG59IGZyb20gJ3V0aWxzL3NwbGl0LW1hcC11dGlscyc7XG5cbmltcG9ydCB7TGF5ZXIsIExheWVyQ2xhc3NlcywgTEFZRVJfSURfTEVOR1RIfSBmcm9tICdsYXllcnMnO1xuaW1wb3J0IHtERUZBVUxUX1RFWFRfTEFCRUx9IGZyb20gJ2xheWVycy9sYXllci1mYWN0b3J5JztcbmltcG9ydCB7RURJVE9SX01PREVTLCBTT1JUX09SREVSLCBGSUxURVJfVFlQRVN9IGZyb20gJ2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzJztcbmltcG9ydCB7cGlja18sIG1lcmdlXywgc3dhcF99IGZyb20gJy4vY29tcG9zZXItaGVscGVycyc7XG5pbXBvcnQge3Byb2Nlc3NGaWxlQ29udGVudH0gZnJvbSAnYWN0aW9ucy92aXMtc3RhdGUtYWN0aW9ucyc7XG5cbmltcG9ydCBLZXBsZXJHTFNjaGVtYSBmcm9tICdzY2hlbWFzJztcblxuLy8gdHlwZSBpbXBvcnRzXG4vKiogQHR5cGVkZWYge2ltcG9ydCgnLi92aXMtc3RhdGUtdXBkYXRlcnMnKS5GaWVsZH0gRmllbGQgKi9cbi8qKiBAdHlwZWRlZiB7aW1wb3J0KCcuL3Zpcy1zdGF0ZS11cGRhdGVycycpLkZpbHRlcn0gRmlsdGVyICovXG4vKiogQHR5cGVkZWYge2ltcG9ydCgnLi92aXMtc3RhdGUtdXBkYXRlcnMnKS5LZXBsZXJUYWJsZX0gS2VwbGVyVGFibGUgKi9cbi8qKiBAdHlwZWRlZiB7aW1wb3J0KCcuL3Zpcy1zdGF0ZS11cGRhdGVycycpLlZpc1N0YXRlfSBWaXNTdGF0ZSAqL1xuLyoqIEB0eXBlZGVmIHtpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykuRGF0YXNldHN9IERhdGFzZXRzICovXG4vKiogQHR5cGVkZWYge2ltcG9ydCgnLi92aXMtc3RhdGUtdXBkYXRlcnMnKS5BbmltYXRpb25Db25maWd9IEFuaW1hdGlvbkNvbmZpZyAqL1xuLyoqIEB0eXBlZGVmIHtpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykuRWRpdG9yfSBFZGl0b3IgKi9cblxuLy8gcmVhY3QtcGFsbVxuLy8gZGlzYWJsZSBjYXB0dXJlIGV4Y2VwdGlvbiBmb3IgcmVhY3QtcGFsbSBjYWxsIHRvIHdpdGhUYXNrXG5kaXNhYmxlU3RhY2tDYXB0dXJpbmcoKTtcblxuLyoqXG4gKiBVcGRhdGVycyBmb3IgYHZpc1N0YXRlYCByZWR1Y2VyLiBDYW4gYmUgdXNlZCBpbiB5b3VyIHJvb3QgcmVkdWNlciB0byBkaXJlY3RseSBtb2RpZnkga2VwbGVyLmdsJ3Mgc3RhdGUuXG4gKiBSZWFkIG1vcmUgYWJvdXQgW1VzaW5nIHVwZGF0ZXJzXSguLi9hZHZhbmNlZC11c2FnZS91c2luZy11cGRhdGVycy5tZClcbiAqXG4gKiBAcHVibGljXG4gKiBAZXhhbXBsZVxuICpcbiAqIGltcG9ydCBrZXBsZXJHbFJlZHVjZXIsIHt2aXNTdGF0ZVVwZGF0ZXJzfSBmcm9tICdrZXBsZXIuZ2wvcmVkdWNlcnMnO1xuICogLy8gUm9vdCBSZWR1Y2VyXG4gKiBjb25zdCByZWR1Y2VycyA9IGNvbWJpbmVSZWR1Y2Vycyh7XG4gKiAga2VwbGVyR2w6IGtlcGxlckdsUmVkdWNlcixcbiAqICBhcHA6IGFwcFJlZHVjZXJcbiAqIH0pO1xuICpcbiAqIGNvbnN0IGNvbXBvc2VkUmVkdWNlciA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gKiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICogICAgY2FzZSAnQ0xJQ0tfQlVUVE9OJzpcbiAqICAgICAgcmV0dXJuIHtcbiAqICAgICAgICAuLi5zdGF0ZSxcbiAqICAgICAgICBrZXBsZXJHbDoge1xuICogICAgICAgICAgLi4uc3RhdGUua2VwbGVyR2wsXG4gKiAgICAgICAgICBmb286IHtcbiAqICAgICAgICAgICAgIC4uLnN0YXRlLmtlcGxlckdsLmZvbyxcbiAqICAgICAgICAgICAgIHZpc1N0YXRlOiB2aXNTdGF0ZVVwZGF0ZXJzLmVubGFyZ2VGaWx0ZXJVcGRhdGVyKFxuICogICAgICAgICAgICAgICBzdGF0ZS5rZXBsZXJHbC5mb28udmlzU3RhdGUsXG4gKiAgICAgICAgICAgICAgIHtpZHg6IDB9XG4gKiAgICAgICAgICAgICApXG4gKiAgICAgICAgICB9XG4gKiAgICAgICAgfVxuICogICAgICB9O1xuICogIH1cbiAqICByZXR1cm4gcmVkdWNlcnMoc3RhdGUsIGFjdGlvbik7XG4gKiB9O1xuICpcbiAqIGV4cG9ydCBkZWZhdWx0IGNvbXBvc2VkUmVkdWNlcjtcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbi8vIEB0cy1pZ25vcmVcbmNvbnN0IHZpc1N0YXRlVXBkYXRlcnMgPSBudWxsO1xuLyogZXNsaW50LWVuYWJsZSBuby11bnVzZWQtdmFycyAqL1xuXG4vKiogQHR5cGUge0FuaW1hdGlvbkNvbmZpZ30gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FOSU1BVElPTl9DT05GSUcgPSB7XG4gIGRvbWFpbjogbnVsbCxcbiAgY3VycmVudFRpbWU6IG51bGwsXG4gIHNwZWVkOiAxLFxuICBpc0FuaW1hdGluZzogZmFsc2UsXG4gIHRpbWVGb3JtYXQ6IG51bGwsXG4gIHRpbWV6b25lOiBudWxsLFxuICBkZWZhdWx0VGltZUZvcm1hdDogbnVsbFxufTtcblxuLyoqIEB0eXBlIHtFZGl0b3J9ICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9FRElUT1IgPSB7XG4gIG1vZGU6IEVESVRPUl9NT0RFUy5EUkFXX1BPTFlHT04sXG4gIGZlYXR1cmVzOiBbXSxcbiAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsLFxuICB2aXNpYmxlOiB0cnVlXG59O1xuXG4vKipcbiAqIERlZmF1bHQgaW5pdGlhbCBgdmlzU3RhdGVgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7VmlzU3RhdGV9XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBJTklUSUFMX1ZJU19TVEFURSA9IHtcbiAgLy8gbWFwIGluZm9cbiAgbWFwSW5mbzoge1xuICAgIHRpdGxlOiAnJyxcbiAgICBkZXNjcmlwdGlvbjogJydcbiAgfSxcbiAgLy8gbGF5ZXJzXG4gIGxheWVyczogW10sXG4gIGxheWVyRGF0YTogW10sXG4gIGxheWVyVG9CZU1lcmdlZDogW10sXG4gIGxheWVyT3JkZXI6IFtdLFxuXG4gIC8vIGZpbHRlcnNcbiAgZmlsdGVyczogW10sXG4gIGZpbHRlclRvQmVNZXJnZWQ6IFtdLFxuXG4gIC8vIGEgY29sbGVjdGlvbiBvZiBtdWx0aXBsZSBkYXRhc2V0XG4gIGRhdGFzZXRzOiB7fSxcbiAgZWRpdGluZ0RhdGFzZXQ6IHVuZGVmaW5lZCxcblxuICBpbnRlcmFjdGlvbkNvbmZpZzogZ2V0RGVmYXVsdEludGVyYWN0aW9uKCksXG4gIGludGVyYWN0aW9uVG9CZU1lcmdlZDogdW5kZWZpbmVkLFxuXG4gIGxheWVyQmxlbmRpbmc6ICdub3JtYWwnLFxuICBob3ZlckluZm86IHVuZGVmaW5lZCxcbiAgY2xpY2tlZDogdW5kZWZpbmVkLFxuICBtb3VzZVBvczoge30sXG5cbiAgLy8gdGhpcyBpcyB1c2VkIHdoZW4gdXNlciBzcGxpdCBtYXBzXG4gIHNwbGl0TWFwczogW1xuICAgIC8vIHRoaXMgd2lsbCBjb250YWluIGEgbGlzdCBvZiBvYmplY3RzIHRvXG4gICAgLy8gZGVzY3JpYmUgdGhlIHN0YXRlIG9mIGxheWVyIGF2YWlsYWJpbGl0eSBhbmQgdmlzaWJpbGl0eSBmb3IgZWFjaCBtYXBcbiAgICAvLyBbXG4gICAgLy8gICB7XG4gICAgLy8gICAgICBsYXllcnM6IHtsYXllcl9pZDogdHJ1ZSB8IGZhbHNlfVxuICAgIC8vICAgfVxuICAgIC8vIF1cbiAgXSxcbiAgc3BsaXRNYXBzVG9CZU1lcmdlZDogW10sXG5cbiAgLy8gZGVmYXVsdHMgbGF5ZXIgY2xhc3Nlc1xuICBsYXllckNsYXNzZXM6IExheWVyQ2xhc3NlcyxcblxuICAvLyBkZWZhdWx0IGFuaW1hdGlvblxuICAvLyB0aW1lIGluIHVuaXggdGltZXN0YW1wIChtaWxsaXNlY29uZHMpICh0aGUgbnVtYmVyIG9mIHNlY29uZHMgc2luY2UgdGhlIFVuaXggRXBvY2gpXG4gIGFuaW1hdGlvbkNvbmZpZzogREVGQVVMVF9BTklNQVRJT05fQ09ORklHLFxuXG4gIGVkaXRvcjogREVGQVVMVF9FRElUT1IsXG5cbiAgZmlsZUxvYWRpbmc6IGZhbHNlLFxuICBmaWxlTG9hZGluZ1Byb2dyZXNzOiB7fSxcblxuICBsb2FkZXJzOiBbXSxcbiAgbG9hZE9wdGlvbnM6IHt9LFxuXG4gIC8vIHZpc1N0YXRlTWVyZ2Vyc1xuICBtZXJnZXJzOiBWSVNfU1RBVEVfTUVSR0VSUyxcblxuICAvLyBrZXBsZXIgc2NoZW1hc1xuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hXG59O1xuXG4vKipcbiAqIFVwZGF0ZSBzdGF0ZSB3aXRoIHVwZGF0ZWQgbGF5ZXIgYW5kIGxheWVyRGF0YVxuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykudXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhfVxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN0YXRlLmxheWVycy5tYXAoKGx5ciwgaSkgPT4gKGkgPT09IGlkeCA/IGxheWVyIDogbHlyKSksXG4gICAgbGF5ZXJEYXRhOiBsYXllckRhdGFcbiAgICAgID8gc3RhdGUubGF5ZXJEYXRhLm1hcCgoZCwgaSkgPT4gKGkgPT09IGlkeCA/IGxheWVyRGF0YSA6IGQpKVxuICAgICAgOiBzdGF0ZS5sYXllckRhdGFcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlT25MYXllclZpc2liaWxpdHlDaGFuZ2Uoc3RhdGUsIGxheWVyKSB7XG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICBpZiAoc3RhdGUuc3BsaXRNYXBzLmxlbmd0aCkge1xuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBzcGxpdE1hcHM6IGxheWVyLmNvbmZpZy5pc1Zpc2libGVcbiAgICAgICAgPyBhZGROZXdMYXllcnNUb1NwbGl0TWFwKHN0YXRlLnNwbGl0TWFwcywgbGF5ZXIpXG4gICAgICAgIDogcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzKHN0YXRlLnNwbGl0TWFwcywgbGF5ZXIpXG4gICAgfTtcbiAgfVxuXG4gIGlmIChsYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihzdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGJhc2UgY29uZmlnOiBkYXRhSWQsIGxhYmVsLCBjb2x1bW4sIGlzVmlzaWJsZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL3Zpcy1zdGF0ZS11cGRhdGVycycpLmxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcn1cbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKHN0YXRlLCBhY3Rpb24pIHtcbiAgY29uc3Qge29sZExheWVyfSA9IGFjdGlvbjtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgY29uc3QgcHJvcHMgPSBPYmplY3Qua2V5cyhhY3Rpb24ubmV3Q29uZmlnKTtcbiAgaWYgKHR5cGVvZiBhY3Rpb24ubmV3Q29uZmlnLmRhdGFJZCA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCB7ZGF0YUlkLCAuLi5yZXN0Q29uZmlnfSA9IGFjdGlvbi5uZXdDb25maWc7XG4gICAgY29uc3Qgc3RhdGVXaXRoRGF0YUlkID0gbGF5ZXJEYXRhSWRDaGFuZ2VVcGRhdGVyKHN0YXRlLCB7XG4gICAgICBvbGRMYXllcixcbiAgICAgIG5ld0NvbmZpZzoge2RhdGFJZH1cbiAgICB9KTtcbiAgICBjb25zdCBuZXh0TGF5ZXIgPSBzdGF0ZVdpdGhEYXRhSWQubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gICAgcmV0dXJuIG5leHRMYXllciAmJiBPYmplY3Qua2V5cyhyZXN0Q29uZmlnKS5sZW5ndGhcbiAgICAgID8gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKHN0YXRlV2l0aERhdGFJZCwge29sZExheWVyOiBuZXh0TGF5ZXIsIG5ld0NvbmZpZzogcmVzdENvbmZpZ30pXG4gICAgICA6IHN0YXRlV2l0aERhdGFJZDtcbiAgfVxuXG4gIGxldCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKGFjdGlvbi5uZXdDb25maWcpO1xuXG4gIGxldCBsYXllckRhdGE7XG5cbiAgLy8gbGV0IG5ld0xheWVyO1xuICBpZiAobmV3TGF5ZXIuc2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhKHByb3BzKSkge1xuICAgIGNvbnN0IG9sZExheWVyRGF0YSA9IHN0YXRlLmxheWVyRGF0YVtpZHhdO1xuICAgIGNvbnN0IHVwZGF0ZUxheWVyRGF0YVJlc3VsdCA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIG9sZExheWVyRGF0YSk7XG5cbiAgICBsYXllckRhdGEgPSB1cGRhdGVMYXllckRhdGFSZXN1bHQubGF5ZXJEYXRhO1xuICAgIG5ld0xheWVyID0gdXBkYXRlTGF5ZXJEYXRhUmVzdWx0LmxheWVyO1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGlmICgnaXNWaXNpYmxlJyBpbiBhY3Rpb24ubmV3Q29uZmlnKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVTdGF0ZU9uTGF5ZXJWaXNpYmlsaXR5Q2hhbmdlKHN0YXRlLCBuZXdMYXllcik7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5ld1N0YXRlLCB7XG4gICAgbGF5ZXI6IG5ld0xheWVyLFxuICAgIGxheWVyRGF0YSxcbiAgICBpZHhcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZE9yUmVtb3ZlVGV4dExhYmVscyhuZXdGaWVsZHMsIHRleHRMYWJlbCkge1xuICBsZXQgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLnNsaWNlKCk7XG5cbiAgY29uc3QgY3VycmVudEZpZWxkcyA9IHRleHRMYWJlbC5tYXAodGwgPT4gdGwuZmllbGQgJiYgdGwuZmllbGQubmFtZSkuZmlsdGVyKGQgPT4gZCk7XG5cbiAgY29uc3QgYWRkRmllbGRzID0gbmV3RmllbGRzLmZpbHRlcihmID0+ICFjdXJyZW50RmllbGRzLmluY2x1ZGVzKGYubmFtZSkpO1xuICBjb25zdCBkZWxldGVGaWVsZHMgPSBjdXJyZW50RmllbGRzLmZpbHRlcihmID0+ICFuZXdGaWVsZHMuZmluZChmZCA9PiBmZC5uYW1lID09PSBmKSk7XG5cbiAgLy8gZGVsZXRlXG4gIG5ld1RleHRMYWJlbCA9IG5ld1RleHRMYWJlbC5maWx0ZXIodGwgPT4gdGwuZmllbGQgJiYgIWRlbGV0ZUZpZWxkcy5pbmNsdWRlcyh0bC5maWVsZC5uYW1lKSk7XG4gIG5ld1RleHRMYWJlbCA9ICFuZXdUZXh0TGFiZWwubGVuZ3RoID8gW0RFRkFVTFRfVEVYVF9MQUJFTF0gOiBuZXdUZXh0TGFiZWw7XG5cbiAgLy8gYWRkXG4gIG5ld1RleHRMYWJlbCA9IFtcbiAgICAuLi5uZXdUZXh0TGFiZWwuZmlsdGVyKHRsID0+IHRsLmZpZWxkKSxcbiAgICAuLi5hZGRGaWVsZHMubWFwKGFmID0+ICh7XG4gICAgICAuLi5ERUZBVUxUX1RFWFRfTEFCRUwsXG4gICAgICBmaWVsZDogYWZcbiAgICB9KSlcbiAgXTtcblxuICByZXR1cm4gbmV3VGV4dExhYmVsO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVUZXh0TGFiZWxQcm9wQW5kVmFsdWUoaWR4LCBwcm9wLCB2YWx1ZSwgdGV4dExhYmVsKSB7XG4gIGlmICghdGV4dExhYmVsW2lkeF0uaGFzT3duUHJvcGVydHkocHJvcCkpIHtcbiAgICByZXR1cm4gdGV4dExhYmVsO1xuICB9XG5cbiAgbGV0IG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5zbGljZSgpO1xuXG4gIGlmIChwcm9wICYmICh2YWx1ZSB8fCB0ZXh0TGFiZWwubGVuZ3RoID09PSAxKSkge1xuICAgIG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5tYXAoKHRsLCBpKSA9PiAoaSA9PT0gaWR4ID8gey4uLnRsLCBbcHJvcF06IHZhbHVlfSA6IHRsKSk7XG4gIH0gZWxzZSBpZiAocHJvcCA9PT0gJ2ZpZWxkJyAmJiB2YWx1ZSA9PT0gbnVsbCAmJiB0ZXh0TGFiZWwubGVuZ3RoID4gMSkge1xuICAgIC8vIHJlbW92ZSBsYWJlbCB3aGVuIGZpZWxkIHZhbHVlIGlzIHNldCB0byBudWxsXG4gICAgbmV3VGV4dExhYmVsLnNwbGljZShpZHgsIDEpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1RleHRMYWJlbDtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYmFzZSBjb25maWc6IGRhdGFJZCwgbGFiZWwsIGNvbHVtbiwgaXNWaXNpYmxlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykubGF5ZXJUZXh0TGFiZWxDaGFuZ2VVcGRhdGVyfVxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXIoc3RhdGUsIGFjdGlvbikge1xuICBjb25zdCB7b2xkTGF5ZXIsIGlkeCwgcHJvcCwgdmFsdWV9ID0gYWN0aW9uO1xuICBjb25zdCB7dGV4dExhYmVsfSA9IG9sZExheWVyLmNvbmZpZztcblxuICBsZXQgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLnNsaWNlKCk7XG4gIGlmICghdGV4dExhYmVsW2lkeF0gJiYgaWR4ID09PSB0ZXh0TGFiZWwubGVuZ3RoKSB7XG4gICAgLy8gaWYgaWR4IGlzIHNldCB0byBsZW5ndGgsIGFkZCBlbXB0eSB0ZXh0IGxhYmVsXG4gICAgbmV3VGV4dExhYmVsID0gWy4uLnRleHRMYWJlbCwgREVGQVVMVF9URVhUX0xBQkVMXTtcbiAgfVxuXG4gIGlmIChpZHggPT09ICdhbGwnICYmIHByb3AgPT09ICdmaWVsZHMnKSB7XG4gICAgbmV3VGV4dExhYmVsID0gYWRkT3JSZW1vdmVUZXh0TGFiZWxzKHZhbHVlLCB0ZXh0TGFiZWwpO1xuICB9IGVsc2Uge1xuICAgIG5ld1RleHRMYWJlbCA9IHVwZGF0ZVRleHRMYWJlbFByb3BBbmRWYWx1ZShpZHgsIHByb3AsIHZhbHVlLCBuZXdUZXh0TGFiZWwpO1xuICB9XG4gIC8vIHVwZGF0ZSB0ZXh0IGxhYmVsIHByb3AgYW5kIHZhbHVlXG4gIHJldHVybiBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoc3RhdGUsIHtcbiAgICBvbGRMYXllcixcbiAgICBuZXdDb25maWc6IHt0ZXh0TGFiZWw6IG5ld1RleHRMYWJlbH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhKGRhdGFzZXQsIGxheWVyQ2xhc3NlcywgbGF5ZXIpIHtcbiAgY29uc3QgbG9hZGVkTGF5ZXIgPSBzZXJpYWxpemVMYXllcihsYXllcik7XG4gIHJldHVybiB2YWxpZGF0ZUxheWVyV2l0aERhdGEoZGF0YXNldCwgbG9hZGVkTGF5ZXIsIGxheWVyQ2xhc3Nlcywge1xuICAgIGFsbG93RW1wdHlDb2x1bW46IHRydWVcbiAgfSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGNvbmZpZyBkYXRhSWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAdHlwZSB7dHlwZW9mIGltcG9ydCgnLi92aXMtc3RhdGUtdXBkYXRlcnMnKS5sYXllckRhdGFJZENoYW5nZVVwZGF0ZXJ9XG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyRGF0YUlkQ2hhbmdlVXBkYXRlcihzdGF0ZSwgYWN0aW9uKSB7XG4gIGNvbnN0IHtvbGRMYXllciwgbmV3Q29uZmlnfSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFJZH0gPSBuZXdDb25maWc7XG5cbiAgaWYgKCFvbGRMYXllciB8fCAhc3RhdGUuZGF0YXNldHNbZGF0YUlkXSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuXG4gIGxldCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtkYXRhSWR9KTtcbiAgLy8gdGhpcyBtYXkgaGFwcGVuIHdoZW4gYSBsYXllciBpcyBuZXcgKHR5cGU6IG51bGwgYW5kIG5vIGNvbHVtbnMpIGJ1dCBpdCdzIG5vdCByZWFkeSB0byBiZSBzYXZlZFxuICBpZiAobmV3TGF5ZXIuaXNWYWxpZFRvU2F2ZSgpKSB7XG4gICAgY29uc3QgdmFsaWRhdGVkID0gdmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEoXG4gICAgICBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdLFxuICAgICAgc3RhdGUubGF5ZXJDbGFzc2VzLFxuICAgICAgbmV3TGF5ZXJcbiAgICApO1xuICAgIC8vIGlmIGNhbnQgdmFsaWRhdGUgaXQgd2l0aCBkYXRhIGNyZWF0ZSBhIG5ldyBvbmVcbiAgICBpZiAoIXZhbGlkYXRlZCkge1xuICAgICAgbmV3TGF5ZXIgPSBuZXcgc3RhdGUubGF5ZXJDbGFzc2VzW29sZExheWVyLnR5cGVdKHtkYXRhSWQsIGlkOiBvbGRMYXllci5pZH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdMYXllciA9IHZhbGlkYXRlZDtcbiAgICB9XG4gIH1cblxuICBuZXdMYXllciA9IG5ld0xheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICBpc1Zpc2libGU6IG9sZExheWVyLmNvbmZpZy5pc1Zpc2libGUsXG4gICAgaXNDb25maWdBY3RpdmU6IHRydWVcbiAgfSk7XG5cbiAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJEb21haW4oc3RhdGUuZGF0YXNldHMpO1xuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlLCB1bmRlZmluZWQpO1xuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEoc3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgdHlwZS4gUHJldmlld3MgbGF5ZXIgY29uZmlnIHdpbGwgYmUgY29waWVkIGlmIGFwcGxpY2FibGUuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykubGF5ZXJUeXBlQ2hhbmdlVXBkYXRlcn1cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVHlwZUNoYW5nZVVwZGF0ZXIoc3RhdGUsIGFjdGlvbikge1xuICBjb25zdCB7b2xkTGF5ZXIsIG5ld1R5cGV9ID0gYWN0aW9uO1xuICBpZiAoIW9sZExheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG9sZElkID0gb2xkTGF5ZXIuaWQ7XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRJZCk7XG5cbiAgaWYgKCFzdGF0ZS5sYXllckNsYXNzZXNbbmV3VHlwZV0pIHtcbiAgICBDb25zb2xlLmVycm9yKGAke25ld1R5cGV9IGlzIG5vdCBhIHZhbGlkIGxheWVyIHR5cGVgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBnZXQgYSBtaW50IGxheWVyLCB3aXRoIG5ldyBpZCBhbmQgdHlwZVxuICAvLyBiZWNhdXNlIGRlY2suZ2wgdXNlcyBpZCB0byBtYXRjaCBiZXR3ZWVuIG5ldyBhbmQgb2xkIGxheWVyLlxuICAvLyBJZiB0eXBlIGhhcyBjaGFuZ2VkIGJ1dCBpZCBpcyB0aGUgc2FtZSwgaXQgd2lsbCBicmVha1xuICBjb25zdCBuZXdMYXllciA9IG5ldyBzdGF0ZS5sYXllckNsYXNzZXNbbmV3VHlwZV0oKTtcblxuICBuZXdMYXllci5hc3NpZ25Db25maWdUb0xheWVyKG9sZExheWVyLmNvbmZpZywgb2xkTGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MpO1xuXG4gIG5ld0xheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzKTtcbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSk7XG4gIGxldCBuZXdTdGF0ZSA9IHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xuXG4gIGlmIChsYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQgfHwgb2xkTGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xuICB9XG5cbiAgLy8gdXBkYXRlIHNwbGl0TWFwIGxheWVyIGlkXG4gIGlmIChzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoKSB7XG4gICAgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgIHNwbGl0TWFwczogbmV3U3RhdGUuc3BsaXRNYXBzLm1hcChzZXR0aW5ncyA9PiB7XG4gICAgICAgIGNvbnN0IHtbb2xkSWRdOiBvbGRMYXllck1hcCwgLi4ub3RoZXJMYXllcnN9ID0gc2V0dGluZ3MubGF5ZXJzO1xuICAgICAgICByZXR1cm4gb2xkSWQgaW4gc2V0dGluZ3MubGF5ZXJzXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIC4uLnNldHRpbmdzLFxuICAgICAgICAgICAgICBsYXllcnM6IHtcbiAgICAgICAgICAgICAgICAuLi5vdGhlckxheWVycyxcbiAgICAgICAgICAgICAgICBbbGF5ZXIuaWRdOiBvbGRMYXllck1hcFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiBzZXR0aW5ncztcbiAgICAgIH0pXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgdmlzdWFsIGNoYW5uZWxcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAdHlwZSB7dHlwZW9mIGltcG9ydCgnLi92aXMtc3RhdGUtdXBkYXRlcnMnKS5sYXllclZpc3VhbENoYW5uZWxDaGFuZ2VVcGRhdGVyfVxuICogQHJldHVybnMge09iamVjdH0gbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclZpc3VhbENoYW5uZWxDaGFuZ2VVcGRhdGVyKHN0YXRlLCBhY3Rpb24pIHtcbiAgY29uc3Qge29sZExheWVyLCBuZXdDb25maWcsIGNoYW5uZWx9ID0gYWN0aW9uO1xuICBpZiAoIW9sZExheWVyLmNvbmZpZy5kYXRhSWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW29sZExheWVyLmNvbmZpZy5kYXRhSWRdO1xuXG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gIGNvbnN0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcobmV3Q29uZmlnKTtcblxuICBuZXdMYXllci51cGRhdGVMYXllclZpc3VhbENoYW5uZWwoZGF0YXNldCwgY2hhbm5lbCk7XG5cbiAgY29uc3Qgb2xkTGF5ZXJEYXRhID0gc3RhdGUubGF5ZXJEYXRhW2lkeF07XG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIG9sZExheWVyRGF0YSk7XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBgdmlzQ29uZmlnYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL3Zpcy1zdGF0ZS11cGRhdGVycycpLmxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlcn1cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlcihzdGF0ZSwgYWN0aW9uKSB7XG4gIGNvbnN0IHtvbGRMYXllcn0gPSBhY3Rpb247XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gIGNvbnN0IHByb3BzID0gT2JqZWN0LmtleXMoYWN0aW9uLm5ld1Zpc0NvbmZpZyk7XG4gIGNvbnN0IG5ld1Zpc0NvbmZpZyA9IHtcbiAgICAuLi5vbGRMYXllci5jb25maWcudmlzQ29uZmlnLFxuICAgIC4uLmFjdGlvbi5uZXdWaXNDb25maWdcbiAgfTtcblxuICBjb25zdCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHt2aXNDb25maWc6IG5ld1Zpc0NvbmZpZ30pO1xuXG4gIGlmIChuZXdMYXllci5zaG91bGRDYWxjdWxhdGVMYXllckRhdGEocHJvcHMpKSB7XG4gICAgY29uc3Qgb2xkTGF5ZXJEYXRhID0gc3RhdGUubGF5ZXJEYXRhW2lkeF07XG4gICAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgb2xkTGF5ZXJEYXRhKTtcbiAgICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHN0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHN0YXRlLCB7bGF5ZXI6IG5ld0xheWVyLCBpZHh9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZmlsdGVyIHByb3BlcnR5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykuc2V0RmlsdGVyQW5pbWF0aW9uVGltZVVwZGF0ZXJ9XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlcihzdGF0ZSwgYWN0aW9uKSB7XG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKHN0YXRlLCBhY3Rpb24pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBmaWx0ZXIgYW5pbWF0aW9uIHdpbmRvd1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL3Zpcy1zdGF0ZS11cGRhdGVycycpLnNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXJ9XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyKHN0YXRlLCB7aWQsIGFuaW1hdGlvbldpbmRvd30pIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcChmID0+XG4gICAgICBmLmlkID09PSBpZFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLmYsXG4gICAgICAgICAgICBhbmltYXRpb25XaW5kb3dcbiAgICAgICAgICB9XG4gICAgICAgIDogZlxuICAgIClcbiAgfTtcbn1cbi8qKlxuICogVXBkYXRlIGZpbHRlciBwcm9wZXJ0eVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL3Zpcy1zdGF0ZS11cGRhdGVycycpLnNldEZpbHRlclVwZGF0ZXJ9XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJVcGRhdGVyKHN0YXRlLCBhY3Rpb24pIHtcbiAgY29uc3Qge2lkeCwgcHJvcCwgdmFsdWUsIHZhbHVlSW5kZXggPSAwfSA9IGFjdGlvbjtcbiAgY29uc3Qgb2xkRmlsdGVyID0gc3RhdGUuZmlsdGVyc1tpZHhdO1xuXG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgQ29uc29sZS5lcnJvcihgZmlsdGVycy4ke2lkeH0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBuZXdGaWx0ZXIgPSBzZXQoW3Byb3BdLCB2YWx1ZSwgb2xkRmlsdGVyKTtcbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG5cbiAgY29uc3Qge2RhdGFJZH0gPSBuZXdGaWx0ZXI7XG5cbiAgLy8gRW5zdXJpbmcgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICBsZXQgZGF0YXNldElkcyA9IHRvQXJyYXkoZGF0YUlkKTtcblxuICBzd2l0Y2ggKHByb3ApIHtcbiAgICAvLyBUT0RPOiBOZXh0IFBSIGZvciBVSSBpZiB3ZSB1cGRhdGUgZGF0YUlkLCB3ZSBuZWVkIHRvIGNvbnNpZGVyIHR3byBjYXNlczpcbiAgICAvLyAxLiBkYXRhSWQgaXMgZW1wdHk6IGNyZWF0ZSBhIGRlZmF1bHQgZmlsdGVyXG4gICAgLy8gMi4gQWRkIGEgbmV3IGRhdGFzZXQgaWRcbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLmRhdGFJZDpcbiAgICAgIC8vIGlmIHRyeWluZyB0byB1cGRhdGUgZmlsdGVyIGRhdGFJZC4gY3JlYXRlIGFuIGVtcHR5IG5ldyBmaWx0ZXJcbiAgICAgIG5ld0ZpbHRlciA9IHVwZGF0ZUZpbHRlckRhdGFJZChkYXRhSWQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLm5hbWU6XG4gICAgICAvLyB3ZSBhcmUgc3VwcG9ydGluZyB0aGUgY3VycmVudCBmdW5jdGlvbmFsaXR5XG4gICAgICAvLyBUT0RPOiBOZXh0IFBSIGZvciBVSSBmaWx0ZXIgbmFtZSB3aWxsIG9ubHkgdXBkYXRlIGZpbHRlciBuYW1lIGJ1dCBpdCB3b24ndCBoYXZlIHNpZGUgZWZmZWN0c1xuICAgICAgLy8gd2UgYXJlIGdvbm5hIHVzZSBwYWlyIG9mIGRhdGFzZXRzIGFuZCBmaWVsZElkeCB0byB1cGRhdGUgdGhlIGZpbHRlclxuICAgICAgY29uc3QgZGF0YXNldElkID0gbmV3RmlsdGVyLmRhdGFJZFt2YWx1ZUluZGV4XTtcbiAgICAgIGNvbnN0IHtmaWx0ZXI6IHVwZGF0ZWRGaWx0ZXIsIGRhdGFzZXQ6IG5ld0RhdGFzZXR9ID0gYXBwbHlGaWx0ZXJGaWVsZE5hbWUoXG4gICAgICAgIG5ld0ZpbHRlcixcbiAgICAgICAgc3RhdGUuZGF0YXNldHNbZGF0YXNldElkXSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHZhbHVlSW5kZXgsXG4gICAgICAgIHttZXJnZURvbWFpbjogZmFsc2V9XG4gICAgICApO1xuICAgICAgaWYgKCF1cGRhdGVkRmlsdGVyKSB7XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICAgIH1cblxuICAgICAgbmV3RmlsdGVyID0gdXBkYXRlZEZpbHRlcjtcblxuICAgICAgaWYgKG5ld0ZpbHRlci5ncHUpIHtcbiAgICAgICAgbmV3RmlsdGVyID0gc2V0RmlsdGVyR3B1TW9kZShuZXdGaWx0ZXIsIHN0YXRlLmZpbHRlcnMpO1xuICAgICAgICBuZXdGaWx0ZXIgPSBhc3NpZ25HcHVDaGFubmVsKG5ld0ZpbHRlciwgc3RhdGUuZmlsdGVycyk7XG4gICAgICB9XG5cbiAgICAgIG5ld1N0YXRlID0gc2V0KFsnZGF0YXNldHMnLCBkYXRhc2V0SWRdLCBuZXdEYXRhc2V0LCBzdGF0ZSk7XG5cbiAgICAgIC8vIG9ubHkgZmlsdGVyIHRoZSBjdXJyZW50IGRhdGFzZXRcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMubGF5ZXJJZDpcbiAgICAgIC8vIFdlIG5lZWQgdG8gdXBkYXRlIG9ubHkgZGF0YXNldElkL3MgaWYgd2UgaGF2ZSBhZGRlZC9yZW1vdmVkIGxheWVyc1xuICAgICAgLy8gLSBjaGVjayBmb3IgbGF5ZXJJZCBjaGFuZ2VzIChYT1Igd29ya3MgYmVjYXVzZSBvZiBzdHJpbmcgdmFsdWVzKVxuICAgICAgLy8gaWYgbm8gZGlmZmVyZW5jZXMgYmV0d2VlbiBsYXllcklkcywgZG9uJ3QgZG8gYW55IGZpbHRlcmluZ1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgY29uc3QgbGF5ZXJJZERpZmZlcmVuY2UgPSB4b3IobmV3RmlsdGVyLmxheWVySWQsIG9sZEZpbHRlci5sYXllcklkKTtcblxuICAgICAgY29uc3QgbGF5ZXJEYXRhSWRzID0gdW5pcShcbiAgICAgICAgbGF5ZXJJZERpZmZlcmVuY2VcbiAgICAgICAgICAubWFwKGxpZCA9PlxuICAgICAgICAgICAgZ2V0KFxuICAgICAgICAgICAgICBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IGxpZCksXG4gICAgICAgICAgICAgIFsnY29uZmlnJywgJ2RhdGFJZCddXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICAgIC5maWx0ZXIoZCA9PiBkKVxuICAgICAgKTtcblxuICAgICAgLy8gb25seSBmaWx0ZXIgZGF0YXNldHNJZHNcbiAgICAgIGRhdGFzZXRJZHMgPSBsYXllckRhdGFJZHM7XG5cbiAgICAgIC8vIFVwZGF0ZSBuZXdGaWx0ZXIgZGF0YUlkc1xuICAgICAgY29uc3QgbmV3RGF0YUlkcyA9IHVuaXEoXG4gICAgICAgIG5ld0ZpbHRlci5sYXllcklkXG4gICAgICAgICAgLm1hcChsaWQgPT5cbiAgICAgICAgICAgIGdldChcbiAgICAgICAgICAgICAgc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsaWQpLFxuICAgICAgICAgICAgICBbJ2NvbmZpZycsICdkYXRhSWQnXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgICAuZmlsdGVyKGQgPT4gZClcbiAgICAgICk7XG5cbiAgICAgIG5ld0ZpbHRlciA9IHtcbiAgICAgICAgLi4ubmV3RmlsdGVyLFxuICAgICAgICBkYXRhSWQ6IG5ld0RhdGFJZHNcbiAgICAgIH07XG5cbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBicmVhaztcbiAgfVxuXG4gIGNvbnN0IGVubGFyZ2VkRmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gZi5lbmxhcmdlZCk7XG5cbiAgaWYgKGVubGFyZ2VkRmlsdGVyICYmIGVubGFyZ2VkRmlsdGVyLmlkICE9PSBuZXdGaWx0ZXIuaWQpIHtcbiAgICAvLyB0aGVyZSBzaG91bGQgYmUgb25seSBvbmUgZW5sYXJnZWQgZmlsdGVyXG4gICAgbmV3RmlsdGVyLmVubGFyZ2VkID0gZmFsc2U7XG4gIH1cblxuICAvLyBzYXZlIG5ldyBmaWx0ZXJzIHRvIG5ld1N0YXRlXG4gIG5ld1N0YXRlID0gc2V0KFsnZmlsdGVycycsIGlkeF0sIG5ld0ZpbHRlciwgbmV3U3RhdGUpO1xuXG4gIC8vIGlmIHdlIGFyZSBjdXJyZW50bHkgc2V0dGluZyBhIHByb3AgdGhhdCBvbmx5IHJlcXVpcmVzIHRvIGZpbHRlciB0aGUgY3VycmVudFxuICAvLyBkYXRhc2V0IHdlIHdpbGwgcGFzcyBvbmx5IHRoZSBjdXJyZW50IGRhdGFzZXQgdG8gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyBhbmRcbiAgLy8gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhIG90aGVyd2lzZSB3ZSBwYXNzIHRoZSBhbGwgbGlzdCBvZiBkYXRhc2V0cyBhcyBkZWZpbmVkIGluIGRhdGFJZFxuICBjb25zdCBkYXRhc2V0SWRzVG9GaWx0ZXIgPSBMSU1JVEVEX0ZJTFRFUl9FRkZFQ1RfUFJPUFNbcHJvcF1cbiAgICA/IFtkYXRhc2V0SWRzW3ZhbHVlSW5kZXhdXVxuICAgIDogZGF0YXNldElkcztcblxuICAvLyBmaWx0ZXIgZGF0YVxuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICBkYXRhc2V0SWRzVG9GaWx0ZXIsXG4gICAgbmV3U3RhdGUuZGF0YXNldHMsXG4gICAgbmV3U3RhdGUuZmlsdGVycyxcbiAgICBuZXdTdGF0ZS5sYXllcnNcbiAgKTtcblxuICBuZXdTdGF0ZSA9IHNldChbJ2RhdGFzZXRzJ10sIGZpbHRlcmVkRGF0YXNldHMsIG5ld1N0YXRlKTtcbiAgLy8gZGF0YUlkIGlzIGFuIGFycmF5XG4gIC8vIHBhc3Mgb25seSB0aGUgZGF0YXNldCB3ZSBuZWVkIHRvIHVwZGF0ZVxuICBuZXdTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXdTdGF0ZSwgZGF0YXNldElkc1RvRmlsdGVyLCBuZXdGaWx0ZXIpO1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBTZXQgdGhlIHByb3BlcnR5IG9mIGEgZmlsdGVyIHBsb3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAdHlwZSB7dHlwZW9mIGltcG9ydCgnLi92aXMtc3RhdGUtdXBkYXRlcnMnKS5zZXRGaWx0ZXJQbG90VXBkYXRlcn1cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEZpbHRlclBsb3RVcGRhdGVyID0gKHN0YXRlLCB7aWR4LCBuZXdQcm9wLCB2YWx1ZUluZGV4ID0gMH0pID0+IHtcbiAgbGV0IG5ld0ZpbHRlciA9IHsuLi5zdGF0ZS5maWx0ZXJzW2lkeF0sIC4uLm5ld1Byb3B9O1xuICBjb25zdCBwcm9wID0gT2JqZWN0LmtleXMobmV3UHJvcClbMF07XG4gIGlmIChwcm9wID09PSAneUF4aXMnKSB7XG4gICAgY29uc3QgcGxvdFR5cGUgPSBnZXREZWZhdWx0RmlsdGVyUGxvdFR5cGUobmV3RmlsdGVyKTtcbiAgICAvLyBUT0RPOiBwbG90IGlzIG5vdCBzdXBwb3J0ZWQgaW4gbXVsdGkgZGF0YXNldCBmaWx0ZXIgZm9yIG5vd1xuICAgIGlmIChwbG90VHlwZSkge1xuICAgICAgbmV3RmlsdGVyID0ge1xuICAgICAgICAuLi5uZXdGaWx0ZXIsXG4gICAgICAgIC4uLmdldEZpbHRlclBsb3Qoey4uLm5ld0ZpbHRlciwgcGxvdFR5cGV9LCBzdGF0ZS5kYXRhc2V0c1tuZXdGaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdXSksXG4gICAgICAgIHBsb3RUeXBlXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+IChpID09PSBpZHggPyBuZXdGaWx0ZXIgOiBmKSlcbiAgfTtcbn07XG5cbi8qKlxuICogQWRkIGEgbmV3IGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL3Zpcy1zdGF0ZS11cGRhdGVycycpLmFkZEZpbHRlclVwZGF0ZXJ9XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRGaWx0ZXJVcGRhdGVyID0gKHN0YXRlLCBhY3Rpb24pID0+XG4gICFhY3Rpb24uZGF0YUlkXG4gICAgPyBzdGF0ZVxuICAgIDoge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgZmlsdGVyczogWy4uLnN0YXRlLmZpbHRlcnMsIGdldERlZmF1bHRGaWx0ZXIoYWN0aW9uLmRhdGFJZCldXG4gICAgICB9O1xuXG4vKipcbiAqIFNldCBsYXllciBjb2xvciBwYWxldHRlIHVpIHN0YXRlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykubGF5ZXJDb2xvclVJQ2hhbmdlVXBkYXRlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IGxheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXIgPSAoc3RhdGUsIHtvbGRMYXllciwgcHJvcCwgbmV3Q29uZmlnfSkgPT4ge1xuICBjb25zdCBvbGRWaXhDb25maWcgPSBvbGRMYXllci5jb25maWcudmlzQ29uZmlnW3Byb3BdO1xuICBjb25zdCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29sb3JVSShwcm9wLCBuZXdDb25maWcpO1xuICBjb25zdCBuZXdWaXNDb25maWcgPSBuZXdMYXllci5jb25maWcudmlzQ29uZmlnW3Byb3BdO1xuICBpZiAob2xkVml4Q29uZmlnICE9PSBuZXdWaXNDb25maWcpIHtcbiAgICByZXR1cm4gbGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyKHN0YXRlLCB7XG4gICAgICBvbGRMYXllcixcbiAgICAgIG5ld1Zpc0NvbmZpZzoge1xuICAgICAgICBbcHJvcF06IG5ld1Zpc0NvbmZpZ1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBzdGF0ZS5sYXllcnMubWFwKGwgPT4gKGwuaWQgPT09IG9sZExheWVyLmlkID8gbmV3TGF5ZXIgOiBsKSlcbiAgfTtcbn07XG5cbi8qKlxuICogU3RhcnQgYW5kIGVuZCBmaWx0ZXIgYW5pbWF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykudG9nZ2xlRmlsdGVyQW5pbWF0aW9uVXBkYXRlcn1cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXIgPSAoc3RhdGUsIGFjdGlvbikgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PiAoaSA9PT0gYWN0aW9uLmlkeCA/IHsuLi5mLCBpc0FuaW1hdGluZzogIWYuaXNBbmltYXRpbmd9IDogZikpXG59KTtcblxuLyoqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykudG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyfVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyID0gc3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICBpc0FuaW1hdGluZzogIXN0YXRlLmFuaW1hdGlvbkNvbmZpZy5pc0FuaW1hdGluZ1xuICB9XG59KTtcblxuLyoqXG4gKiBIaWRlIGFuZCBzaG93IGxheWVyIGFuaW1hdGlvbiBjb250cm9sXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykudG9nZ2xlTGF5ZXJBbmltYXRpb25Db250cm9sVXBkYXRlcn1cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUxheWVyQW5pbWF0aW9uQ29udHJvbFVwZGF0ZXIgPSBzdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgIGhpZGVDb250cm9sOiAhc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmhpZGVDb250cm9sXG4gIH1cbn0pO1xuXG4vKipcbiAqIENoYW5nZSBmaWx0ZXIgYW5pbWF0aW9uIHNwZWVkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykudXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyfVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyID0gKHN0YXRlLCBhY3Rpb24pID0+ICh7XG4gIC4uLnN0YXRlLFxuICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT4gKGkgPT09IGFjdGlvbi5pZHggPyB7Li4uZiwgc3BlZWQ6IGFjdGlvbi5zcGVlZH0gOiBmKSlcbn0pO1xuXG4vKipcbiAqIFJlc2V0IGFuaW1hdGlvbiBjb25maWcgY3VycmVudCB0aW1lIHRvIGEgc3BlY2lmaWVkIHZhbHVlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykuc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlcn1cbiAqIEBwdWJsaWNcbiAqXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyID0gKHN0YXRlLCB7dmFsdWV9KSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgIGN1cnJlbnRUaW1lOiB2YWx1ZVxuICB9XG59KTtcblxuLyoqXG4gKiBVcGRhdGUgYW5pbWF0aW9uIHNwZWVkIHdpdGggdGhlIHZlcnRpY2FsIHNwZWVkIHNsaWRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL3Zpcy1zdGF0ZS11cGRhdGVycycpLnVwZGF0ZUxheWVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyfVxuICogQHB1YmxpY1xuICpcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUxheWVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyID0gKHN0YXRlLCB7c3BlZWR9KSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICBzcGVlZFxuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogU2hvdyBsYXJnZXIgdGltZSBmaWx0ZXIgYXQgYm90dG9tIGZvciB0aW1lIHBsYXliYWNrIChhcHBseSB0byB0aW1lIGZpbHRlciBvbmx5KVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL3Zpcy1zdGF0ZS11cGRhdGVycycpLmVubGFyZ2VGaWx0ZXJVcGRhdGVyfVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgZW5sYXJnZUZpbHRlclVwZGF0ZXIgPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PlxuICAgICAgaSA9PT0gYWN0aW9uLmlkeFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLmYsXG4gICAgICAgICAgICBlbmxhcmdlZDogIWYuZW5sYXJnZWRcbiAgICAgICAgICB9XG4gICAgICAgIDogZlxuICAgIClcbiAgfTtcbn07XG5cbi8qKlxuICogVG9nZ2xlcyBmaWx0ZXIgZmVhdHVyZSB2aXNpYmlsaXR5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykudG9nZ2xlRmlsdGVyRmVhdHVyZVVwZGF0ZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlciA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbYWN0aW9uLmlkeF07XG4gIGNvbnN0IGlzVmlzaWJsZSA9IGdldChmaWx0ZXIsIFsndmFsdWUnLCAncHJvcGVydGllcycsICdpc1Zpc2libGUnXSk7XG4gIGNvbnN0IG5ld0ZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgdmFsdWU6IGZlYXR1cmVUb0ZpbHRlclZhbHVlKGZpbHRlci52YWx1ZSwgZmlsdGVyLmlkLCB7XG4gICAgICBpc1Zpc2libGU6ICFpc1Zpc2libGVcbiAgICB9KVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogT2JqZWN0LmFzc2lnbihbLi4uc3RhdGUuZmlsdGVyc10sIHtbYWN0aW9uLmlkeF06IG5ld0ZpbHRlcn0pXG4gIH07XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL3Zpcy1zdGF0ZS11cGRhdGVycycpLnJlbW92ZUZpbHRlclVwZGF0ZXJ9XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVGaWx0ZXJVcGRhdGVyID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgY29uc3Qge2lkeH0gPSBhY3Rpb247XG4gIGNvbnN0IHtkYXRhSWQsIGlkfSA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcblxuICBjb25zdCBuZXdGaWx0ZXJzID0gW1xuICAgIC4uLnN0YXRlLmZpbHRlcnMuc2xpY2UoMCwgaWR4KSxcbiAgICAuLi5zdGF0ZS5maWx0ZXJzLnNsaWNlKGlkeCArIDEsIHN0YXRlLmZpbHRlcnMubGVuZ3RoKVxuICBdO1xuXG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKGRhdGFJZCwgc3RhdGUuZGF0YXNldHMsIG5ld0ZpbHRlcnMsIHN0YXRlLmxheWVycyk7XG4gIGNvbnN0IG5ld0VkaXRvciA9XG4gICAgZ2V0RmlsdGVySWRJbkZlYXR1cmUoc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZSkgPT09IGlkXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gICAgICAgIH1cbiAgICAgIDogc3RhdGUuZWRpdG9yO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHNldChbJ2ZpbHRlcnMnXSwgbmV3RmlsdGVycywgc3RhdGUpO1xuICBuZXdTdGF0ZSA9IHNldChbJ2RhdGFzZXRzJ10sIGZpbHRlcmVkRGF0YXNldHMsIG5ld1N0YXRlKTtcbiAgbmV3U3RhdGUgPSBzZXQoWydlZGl0b3InXSwgbmV3RWRpdG9yLCBuZXdTdGF0ZSk7XG5cbiAgcmV0dXJuIHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXdTdGF0ZSwgZGF0YUlkLCB1bmRlZmluZWQpO1xufTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAdHlwZSB7dHlwZW9mIGltcG9ydCgnLi92aXMtc3RhdGUtdXBkYXRlcnMnKS5hZGRMYXllclVwZGF0ZXJ9XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRMYXllclVwZGF0ZXIgPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICBsZXQgbmV3TGF5ZXI7XG4gIGxldCBuZXdMYXllckRhdGE7XG4gIGlmIChhY3Rpb24uY29uZmlnKSB7XG4gICAgbmV3TGF5ZXIgPSBjcmVhdGVMYXllckZyb21Db25maWcoc3RhdGUsIGFjdGlvbi5jb25maWcpO1xuICAgIGlmICghbmV3TGF5ZXIpIHtcbiAgICAgIENvbnNvbGUud2FybihcbiAgICAgICAgJ0ZhaWxlZCB0byBjcmVhdGUgbGF5ZXIgZnJvbSBjb25maWcsIGl0IHVzdWFsbHkgbWVhbnMgdGhlIGNvbmZpZyBpcyBub3QgYmUgaW4gY29ycmVjdCBmb3JtYXQnLFxuICAgICAgICBhY3Rpb24uY29uZmlnXG4gICAgICApO1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUpO1xuICAgIG5ld0xheWVyID0gcmVzdWx0LmxheWVyO1xuICAgIG5ld0xheWVyRGF0YSA9IHJlc3VsdC5sYXllckRhdGE7XG4gIH0gZWxzZSB7XG4gICAgLy8gY3JlYXRlIGFuIGVtcHR5IGxheWVyIHdpdGggdGhlIGZpcnN0IGF2YWlsYWJsZSBkYXRhc2V0XG4gICAgY29uc3QgZGVmYXVsdERhdGFzZXQgPSBPYmplY3Qua2V5cyhzdGF0ZS5kYXRhc2V0cylbMF07XG4gICAgbmV3TGF5ZXIgPSBuZXcgTGF5ZXIoe1xuICAgICAgaXNWaXNpYmxlOiB0cnVlLFxuICAgICAgaXNDb25maWdBY3RpdmU6IHRydWUsXG4gICAgICBkYXRhSWQ6IGRlZmF1bHREYXRhc2V0XG4gICAgfSk7XG4gICAgbmV3TGF5ZXJEYXRhID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IFsuLi5zdGF0ZS5sYXllcnMsIG5ld0xheWVyXSxcbiAgICBsYXllckRhdGE6IFsuLi5zdGF0ZS5sYXllckRhdGEsIG5ld0xheWVyRGF0YV0sXG4gICAgbGF5ZXJPcmRlcjogWy4uLnN0YXRlLmxheWVyT3JkZXIsIHN0YXRlLmxheWVyT3JkZXIubGVuZ3RoXSxcbiAgICBzcGxpdE1hcHM6IGFkZE5ld0xheWVyc1RvU3BsaXRNYXAoc3RhdGUuc3BsaXRNYXBzLCBuZXdMYXllcilcbiAgfTtcbn07XG5cbi8qKlxuICogcmVtb3ZlIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykucmVtb3ZlTGF5ZXJVcGRhdGVyfVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlTGF5ZXJVcGRhdGVyID0gKHN0YXRlLCB7aWR4fSkgPT4ge1xuICBjb25zdCB7bGF5ZXJzLCBsYXllckRhdGEsIGNsaWNrZWQsIGhvdmVySW5mb30gPSBzdGF0ZTtcbiAgY29uc3QgbGF5ZXJUb1JlbW92ZSA9IHN0YXRlLmxheWVyc1tpZHhdO1xuICBjb25zdCBuZXdNYXBzID0gcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzKHN0YXRlLnNwbGl0TWFwcywgbGF5ZXJUb1JlbW92ZSk7XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBbLi4ubGF5ZXJzLnNsaWNlKDAsIGlkeCksIC4uLmxheWVycy5zbGljZShpZHggKyAxLCBsYXllcnMubGVuZ3RoKV0sXG4gICAgbGF5ZXJEYXRhOiBbLi4ubGF5ZXJEYXRhLnNsaWNlKDAsIGlkeCksIC4uLmxheWVyRGF0YS5zbGljZShpZHggKyAxLCBsYXllckRhdGEubGVuZ3RoKV0sXG4gICAgbGF5ZXJPcmRlcjogc3RhdGUubGF5ZXJPcmRlci5maWx0ZXIoaSA9PiBpICE9PSBpZHgpLm1hcChwaWQgPT4gKHBpZCA+IGlkeCA/IHBpZCAtIDEgOiBwaWQpKSxcbiAgICBjbGlja2VkOiBsYXllclRvUmVtb3ZlLmlzTGF5ZXJIb3ZlcmVkKGNsaWNrZWQpID8gdW5kZWZpbmVkIDogY2xpY2tlZCxcbiAgICBob3ZlckluZm86IGxheWVyVG9SZW1vdmUuaXNMYXllckhvdmVyZWQoaG92ZXJJbmZvKSA/IHVuZGVmaW5lZCA6IGhvdmVySW5mbyxcbiAgICBzcGxpdE1hcHM6IG5ld01hcHNcbiAgICAvLyBUT0RPOiB1cGRhdGUgZmlsdGVycywgY3JlYXRlIGhlbHBlciB0byByZW1vdmUgbGF5ZXIgZm9ybSBmaWx0ZXIgKHJlbW92ZSBsYXllcmlkIGFuZCBkYXRhaWQpIGlmIG1hcHBlZFxuICB9O1xuXG4gIHJldHVybiB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xufTtcblxuLyoqXG4gKiBkdXBsaWNhdGUgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAdHlwZSB7dHlwZW9mIGltcG9ydCgnLi92aXMtc3RhdGUtdXBkYXRlcnMnKS5kdXBsaWNhdGVMYXllclVwZGF0ZXJ9XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBkdXBsaWNhdGVMYXllclVwZGF0ZXIgPSAoc3RhdGUsIHtpZHh9KSA9PiB7XG4gIGNvbnN0IHtsYXllcnN9ID0gc3RhdGU7XG4gIGNvbnN0IG9yaWdpbmFsID0gc3RhdGUubGF5ZXJzW2lkeF07XG4gIGNvbnN0IG9yaWdpbmFsTGF5ZXJPcmRlcklkeCA9IHN0YXRlLmxheWVyT3JkZXIuZmluZEluZGV4KGkgPT4gaSA9PT0gaWR4KTtcblxuICBpZiAoIW9yaWdpbmFsKSB7XG4gICAgQ29uc29sZS53YXJuKGBsYXllci4ke2lkeH0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBuZXdMYWJlbCA9IGBDb3B5IG9mICR7b3JpZ2luYWwuY29uZmlnLmxhYmVsfWA7XG4gIGxldCBwb3N0Zml4ID0gMDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuICB3aGlsZSAobGF5ZXJzLmZpbmQobCA9PiBsLmNvbmZpZy5sYWJlbCA9PT0gbmV3TGFiZWwpKSB7XG4gICAgbmV3TGFiZWwgPSBgQ29weSBvZiAke29yaWdpbmFsLmNvbmZpZy5sYWJlbH0gJHsrK3Bvc3RmaXh9YDtcbiAgfVxuXG4gIC8vIGNvbGxlY3QgbGF5ZXIgY29uZmlnIGZyb20gb3JpZ2luYWxcbiAgY29uc3QgbG9hZGVkTGF5ZXIgPSBzZXJpYWxpemVMYXllcihvcmlnaW5hbCk7XG5cbiAgLy8gYXNzaWduIG5ldyBpZCBhbmQgbGFiZWwgdG8gY29waWVkIGxheWVyXG4gIGlmICghbG9hZGVkTGF5ZXIuY29uZmlnKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxvYWRlZExheWVyLmNvbmZpZy5sYWJlbCA9IG5ld0xhYmVsO1xuICBsb2FkZWRMYXllci5pZCA9IGdlbmVyYXRlSGFzaElkKExBWUVSX0lEX0xFTkdUSCk7XG5cbiAgLy8gYWRkIGxheWVyIHRvIHN0YXRlXG4gIGxldCBuZXh0U3RhdGUgPSBhZGRMYXllclVwZGF0ZXIoc3RhdGUsIHtjb25maWc6IGxvYWRlZExheWVyfSk7XG5cbiAgLy8gbmV3IGFkZGVkIGxheWVyIGFyZSBhdCB0aGUgZW5kLCBtb3ZlIGl0IHRvIGJlIG9uIHRvcCBvZiBvcmlnaW5hbCBsYXllclxuICBjb25zdCBuZXdMYXllck9yZGVySWR4ID0gbmV4dFN0YXRlLmxheWVyT3JkZXIubGVuZ3RoIC0gMTtcbiAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IGFycmF5SW5zZXJ0KFxuICAgIG5leHRTdGF0ZS5sYXllck9yZGVyLnNsaWNlKDAsIG5ld0xheWVyT3JkZXJJZHgpLFxuICAgIG9yaWdpbmFsTGF5ZXJPcmRlcklkeCxcbiAgICBuZXdMYXllck9yZGVySWR4XG4gICk7XG5cbiAgbmV4dFN0YXRlID0ge1xuICAgIC4uLm5leHRTdGF0ZSxcbiAgICBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyXG4gIH07XG5cbiAgcmV0dXJuIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXh0U3RhdGUpO1xufTtcblxuLyoqXG4gKiBSZW9yZGVyIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykucmVvcmRlckxheWVyVXBkYXRlcn1cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlb3JkZXJMYXllclVwZGF0ZXIgPSAoc3RhdGUsIHtvcmRlcn0pID0+ICh7XG4gIC4uLnN0YXRlLFxuICBsYXllck9yZGVyOiBvcmRlclxufSk7XG5cbi8qKlxuICogUmVtb3ZlIGEgZGF0YXNldCBhbmQgYWxsIGxheWVycywgZmlsdGVycywgdG9vbHRpcCBjb25maWdzIHRoYXQgYmFzZWQgb24gaXRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAdHlwZSB7dHlwZW9mIGltcG9ydCgnLi92aXMtc3RhdGUtdXBkYXRlcnMnKS5yZW1vdmVEYXRhc2V0VXBkYXRlcn1cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZURhdGFzZXRVcGRhdGVyID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgLy8gZXh0cmFjdCBkYXRhc2V0IGtleVxuICBjb25zdCB7ZGF0YUlkOiBkYXRhc2V0S2V5fSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFzZXRzfSA9IHN0YXRlO1xuXG4gIC8vIGNoZWNrIGlmIGRhdGFzZXQgaXMgcHJlc2VudFxuICBpZiAoIWRhdGFzZXRzW2RhdGFzZXRLZXldKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbiAgY29uc3Qge1xuICAgIGxheWVycyxcbiAgICBkYXRhc2V0czoge1tkYXRhc2V0S2V5XTogZGF0YXNldCwgLi4ubmV3RGF0YXNldHN9XG4gIH0gPSBzdGF0ZTtcbiAgLyogZXNsaW50LWVuYWJsZSBuby11bnVzZWQtdmFycyAqL1xuXG4gIGNvbnN0IGluZGV4ZXMgPSBsYXllcnMucmVkdWNlKChsaXN0T2ZJbmRleGVzLCBsYXllciwgaW5kZXgpID0+IHtcbiAgICBpZiAobGF5ZXIuY29uZmlnLmRhdGFJZCA9PT0gZGF0YXNldEtleSkge1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgbGlzdE9mSW5kZXhlcy5wdXNoKGluZGV4KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpc3RPZkluZGV4ZXM7XG4gIH0sIFtdKTtcblxuICAvLyByZW1vdmUgbGF5ZXJzIGFuZCBkYXRhc2V0c1xuICBjb25zdCB7bmV3U3RhdGV9ID0gaW5kZXhlcy5yZWR1Y2UoXG4gICAgKHtuZXdTdGF0ZTogY3VycmVudFN0YXRlLCBpbmRleENvdW50ZXJ9LCBpZHgpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGlkeCAtIGluZGV4Q291bnRlcjtcbiAgICAgIGN1cnJlbnRTdGF0ZSA9IHJlbW92ZUxheWVyVXBkYXRlcihjdXJyZW50U3RhdGUsIHtpZHg6IGN1cnJlbnRJbmRleH0pO1xuICAgICAgaW5kZXhDb3VudGVyKys7XG4gICAgICByZXR1cm4ge25ld1N0YXRlOiBjdXJyZW50U3RhdGUsIGluZGV4Q291bnRlcn07XG4gICAgfSxcbiAgICB7bmV3U3RhdGU6IHsuLi5zdGF0ZSwgZGF0YXNldHM6IG5ld0RhdGFzZXRzfSwgaW5kZXhDb3VudGVyOiAwfVxuICApO1xuXG4gIC8vIHJlbW92ZSBmaWx0ZXJzXG4gIGNvbnN0IGZpbHRlcnMgPSBzdGF0ZS5maWx0ZXJzLmZpbHRlcihmaWx0ZXIgPT4gIWZpbHRlci5kYXRhSWQuaW5jbHVkZXMoZGF0YXNldEtleSkpO1xuXG4gIC8vIHVwZGF0ZSBpbnRlcmFjdGlvbkNvbmZpZ1xuICBsZXQge2ludGVyYWN0aW9uQ29uZmlnfSA9IHN0YXRlO1xuICBjb25zdCB7dG9vbHRpcH0gPSBpbnRlcmFjdGlvbkNvbmZpZztcbiAgaWYgKHRvb2x0aXApIHtcbiAgICBjb25zdCB7Y29uZmlnfSA9IHRvb2x0aXA7XG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbiAgICBjb25zdCB7W2RhdGFzZXRLZXldOiBmaWVsZHMsIC4uLmZpZWxkc1RvU2hvd30gPSBjb25maWcuZmllbGRzVG9TaG93O1xuICAgIC8qIGVzbGludC1lbmFibGUgbm8tdW51c2VkLXZhcnMgKi9cbiAgICBpbnRlcmFjdGlvbkNvbmZpZyA9IHtcbiAgICAgIC4uLmludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgdG9vbHRpcDogey4uLnRvb2x0aXAsIGNvbmZpZzogey4uLmNvbmZpZywgZmllbGRzVG9TaG93fX1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHsuLi5uZXdTdGF0ZSwgZmlsdGVycywgaW50ZXJhY3Rpb25Db25maWd9O1xufTtcblxuLyoqXG4gKiB1cGRhdGUgbGF5ZXIgYmxlbmRpbmcgbW9kZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL3Zpcy1zdGF0ZS11cGRhdGVycycpLnVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyfVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlTGF5ZXJCbGVuZGluZ1VwZGF0ZXIgPSAoc3RhdGUsIGFjdGlvbikgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGxheWVyQmxlbmRpbmc6IGFjdGlvbi5tb2RlXG59KTtcblxuLyoqXG4gKiBEaXNwbGF5IGRhdGFzZXQgdGFibGUgaW4gYSBtb2RhbFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL3Zpcy1zdGF0ZS11cGRhdGVycycpLnNob3dEYXRhc2V0VGFibGVVcGRhdGVyfVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2hvd0RhdGFzZXRUYWJsZVVwZGF0ZXIgPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRpbmdEYXRhc2V0OiBhY3Rpb24uZGF0YUlkXG4gIH07XG59O1xuXG4vKipcbiAqIHJlc2V0IHZpc1N0YXRlIHRvIGluaXRpYWwgU3RhdGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAdHlwZSB7dHlwZW9mIGltcG9ydCgnLi92aXMtc3RhdGUtdXBkYXRlcnMnKS5yZXNldE1hcENvbmZpZ1VwZGF0ZXJ9XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZXNldE1hcENvbmZpZ1VwZGF0ZXIgPSBzdGF0ZSA9PiAoe1xuICAuLi5JTklUSUFMX1ZJU19TVEFURSxcbiAgLi4uc3RhdGUuaW5pdGlhbFN0YXRlLFxuICBpbml0aWFsU3RhdGU6IHN0YXRlLmluaXRpYWxTdGF0ZVxufSk7XG5cbi8qKlxuICogUHJvcGFnYXRlIGB2aXNTdGF0ZWAgcmVkdWNlciB3aXRoIGEgbmV3IGNvbmZpZ3VyYXRpb24uIEN1cnJlbnQgY29uZmlnIHdpbGwgYmUgb3ZlcnJpZGUuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykucmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXJ9XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZWNlaXZlTWFwQ29uZmlnVXBkYXRlciA9IChzdGF0ZSwge3BheWxvYWQ6IHtjb25maWcgPSB7fSwgb3B0aW9ucyA9IHt9fX0pID0+IHtcbiAgaWYgKCFjb25maWcudmlzU3RhdGUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7a2VlcEV4aXN0aW5nQ29uZmlnfSA9IG9wdGlvbnM7XG5cbiAgLy8gcmVzZXQgY29uZmlnIGlmIGtlZXBFeGlzdGluZ0NvbmZpZyBpcyBmYWxzeVxuICBsZXQgbWVyZ2VkU3RhdGUgPSAha2VlcEV4aXN0aW5nQ29uZmlnID8gcmVzZXRNYXBDb25maWdVcGRhdGVyKHN0YXRlKSA6IHN0YXRlO1xuICBmb3IgKGNvbnN0IG1lcmdlciBvZiBzdGF0ZS5tZXJnZXJzKSB7XG4gICAgaWYgKGlzVmFsaWRNZXJnZXIobWVyZ2VyKSAmJiBjb25maWcudmlzU3RhdGVbbWVyZ2VyLnByb3BdKSB7XG4gICAgICBtZXJnZWRTdGF0ZSA9IG1lcmdlci5tZXJnZShtZXJnZWRTdGF0ZSwgY29uZmlnLnZpc1N0YXRlW21lcmdlci5wcm9wXSwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1lcmdlZFN0YXRlO1xufTtcblxuLyoqXG4gKiBUcmlnZ2VyIGxheWVyIGhvdmVyIGV2ZW50IHdpdGggaG92ZXJlZCBvYmplY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAdHlwZSB7dHlwZW9mIGltcG9ydCgnLi92aXMtc3RhdGUtdXBkYXRlcnMnKS5sYXllckhvdmVyVXBkYXRlcn1cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxheWVySG92ZXJVcGRhdGVyID0gKHN0YXRlLCBhY3Rpb24pID0+ICh7XG4gIC4uLnN0YXRlLFxuICBob3ZlckluZm86IGFjdGlvbi5pbmZvXG59KTtcblxuLyogZXNsaW50LWVuYWJsZSBtYXgtc3RhdGVtZW50cyAqL1xuXG4vKipcbiAqIFVwZGF0ZSBgaW50ZXJhY3Rpb25Db25maWdgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykuaW50ZXJhY3Rpb25Db25maWdDaGFuZ2VVcGRhdGVyfVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gaW50ZXJhY3Rpb25Db25maWdDaGFuZ2VVcGRhdGVyKHN0YXRlLCBhY3Rpb24pIHtcbiAgY29uc3Qge2NvbmZpZ30gPSBhY3Rpb247XG5cbiAgY29uc3QgaW50ZXJhY3Rpb25Db25maWcgPSB7XG4gICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Db25maWcsXG4gICAgLi4ue1tjb25maWcuaWRdOiBjb25maWd9XG4gIH07XG5cbiAgLy8gRG9uJ3QgZW5hYmxlIHRvb2x0aXAgYW5kIGJydXNoIGF0IHRoZSBzYW1lIHRpbWVcbiAgLy8gYnV0IGNvb3JkaW5hdGVzIGNhbiBiZSBzaG93biBhdCBhbGwgdGltZVxuICBjb25zdCBjb250cmFkaWN0ID0gWydicnVzaCcsICd0b29sdGlwJ107XG5cbiAgaWYgKFxuICAgIGNvbnRyYWRpY3QuaW5jbHVkZXMoY29uZmlnLmlkKSAmJlxuICAgIGNvbmZpZy5lbmFibGVkICYmXG4gICAgIXN0YXRlLmludGVyYWN0aW9uQ29uZmlnW2NvbmZpZy5pZF0uZW5hYmxlZFxuICApIHtcbiAgICAvLyBvbmx5IGVuYWJsZSBvbmUgaW50ZXJhY3Rpb24gYXQgYSB0aW1lXG4gICAgY29udHJhZGljdC5mb3JFYWNoKGsgPT4ge1xuICAgICAgaWYgKGsgIT09IGNvbmZpZy5pZCkge1xuICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZ1trXSA9IHsuLi5pbnRlcmFjdGlvbkNvbmZpZ1trXSwgZW5hYmxlZDogZmFsc2V9O1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgaW50ZXJhY3Rpb25Db25maWdcbiAgfTtcblxuICBpZiAoY29uZmlnLmlkID09PSAnZ2VvY29kZXInICYmICFjb25maWcuZW5hYmxlZCkge1xuICAgIHJldHVybiByZW1vdmVEYXRhc2V0VXBkYXRlcihuZXdTdGF0ZSwge2RhdGFJZDogJ2dlb2NvZGVyX2RhdGFzZXQnfSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogVHJpZ2dlciBsYXllciBjbGljayBldmVudCB3aXRoIGNsaWNrZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykubGF5ZXJDbGlja1VwZGF0ZXJ9XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsYXllckNsaWNrVXBkYXRlciA9IChzdGF0ZSwgYWN0aW9uKSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbW91c2VQb3M6IHN0YXRlLmludGVyYWN0aW9uQ29uZmlnLmNvb3JkaW5hdGUuZW5hYmxlZFxuICAgID8ge1xuICAgICAgICAuLi5zdGF0ZS5tb3VzZVBvcyxcbiAgICAgICAgcGlubmVkOiBzdGF0ZS5tb3VzZVBvcy5waW5uZWQgPyBudWxsIDogY2xvbmVEZWVwKHN0YXRlLm1vdXNlUG9zKVxuICAgICAgfVxuICAgIDogc3RhdGUubW91c2VQb3MsXG4gIGNsaWNrZWQ6IGFjdGlvbi5pbmZvICYmIGFjdGlvbi5pbmZvLnBpY2tlZCA/IGFjdGlvbi5pbmZvIDogbnVsbFxufSk7XG5cbi8qKlxuICogVHJpZ2dlciBtYXAgY2xpY2sgZXZlbnQsIHVuc2VsZWN0IGNsaWNrZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykubWFwQ2xpY2tVcGRhdGVyfVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbWFwQ2xpY2tVcGRhdGVyID0gc3RhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNsaWNrZWQ6IG51bGxcbiAgfTtcbn07XG5cbi8qKlxuICogVHJpZ2dlciBtYXAgbW92ZSBldmVudFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL3Zpcy1zdGF0ZS11cGRhdGVycycpLm1vdXNlTW92ZVVwZGF0ZXJ9XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBtb3VzZU1vdmVVcGRhdGVyID0gKHN0YXRlLCB7ZXZ0fSkgPT4ge1xuICBpZiAoT2JqZWN0LnZhbHVlcyhzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZykuc29tZShjb25maWcgPT4gY29uZmlnLmVuYWJsZWQpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbW91c2VQb3M6IHtcbiAgICAgICAgLi4uc3RhdGUubW91c2VQb3MsXG4gICAgICAgIG1vdXNlUG9zaXRpb246IFsuLi5ldnQucG9pbnRdLFxuICAgICAgICBjb29yZGluYXRlOiBbLi4uZXZ0LmxuZ0xhdF1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufTtcbi8qKlxuICogVG9nZ2xlIHZpc2liaWxpdHkgb2YgYSBsYXllciBmb3IgYSBzcGxpdCBtYXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAdHlwZSB7dHlwZW9mIGltcG9ydCgnLi92aXMtc3RhdGUtdXBkYXRlcnMnKS50b2dnbGVTcGxpdE1hcFVwZGF0ZXJ9XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVTcGxpdE1hcFVwZGF0ZXIgPSAoc3RhdGUsIGFjdGlvbikgPT5cbiAgc3RhdGUuc3BsaXRNYXBzICYmIHN0YXRlLnNwbGl0TWFwcy5sZW5ndGggPT09IDBcbiAgICA/IHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIC8vIG1heWJlIHdlIHNob3VsZCB1c2UgYW4gYXJyYXkgdG8gc3RvcmUgc3RhdGUgZm9yIGEgc2luZ2xlIG1hcCBhcyB3ZWxsXG4gICAgICAgIC8vIGlmIGN1cnJlbnQgbWFwcyBsZW5ndGggaXMgZXF1YWwgdG8gMCBpdCBtZWFucyB0aGF0IHdlIGFyZSBhYm91dCB0byBzcGxpdCB0aGUgdmlld1xuICAgICAgICBzcGxpdE1hcHM6IGNvbXB1dGVTcGxpdE1hcExheWVycyhzdGF0ZS5sYXllcnMpXG4gICAgICB9XG4gICAgOiBjbG9zZVNwZWNpZmljTWFwQXRJbmRleChzdGF0ZSwgYWN0aW9uKTtcblxuLyoqXG4gKiBUb2dnbGUgdmlzaWJpbGl0eSBvZiBhIGxheWVyIGluIGEgc3BsaXQgbWFwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykudG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyfVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyID0gKHN0YXRlLCB7bWFwSW5kZXgsIGxheWVySWR9KSA9PiB7XG4gIGNvbnN0IHtzcGxpdE1hcHN9ID0gc3RhdGU7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBzcGxpdE1hcHM6IHNwbGl0TWFwcy5tYXAoKHNtLCBpKSA9PlxuICAgICAgaSA9PT0gbWFwSW5kZXhcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5zcGxpdE1hcHNbaV0sXG4gICAgICAgICAgICBsYXllcnM6IHtcbiAgICAgICAgICAgICAgLi4uc3BsaXRNYXBzW2ldLmxheWVycyxcbiAgICAgICAgICAgICAgLy8gaWYgbGF5ZXJJZCBub3QgaW4gbGF5ZXJzLCBzZXQgaXQgdG8gdmlzaWJsZVxuICAgICAgICAgICAgICBbbGF5ZXJJZF06ICFzcGxpdE1hcHNbaV0ubGF5ZXJzW2xheWVySWRdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA6IHNtXG4gICAgKVxuICB9O1xufTtcblxuLyoqXG4gKiBBZGQgbmV3IGRhdGFzZXQgdG8gYHZpc1N0YXRlYCwgd2l0aCBvcHRpb24gdG8gbG9hZCBhIG1hcCBjb25maWcgYWxvbmcgd2l0aCB0aGUgZGF0YXNldHNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAdHlwZSB7dHlwZW9mIGltcG9ydCgnLi92aXMtc3RhdGUtdXBkYXRlcnMnKS51cGRhdGVWaXNEYXRhVXBkYXRlcn1cbiAqIEBwdWJsaWNcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LXN0YXRlbWVudHMgKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgY29uc3QgdXBkYXRlVmlzRGF0YVVwZGF0ZXIgPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICAvLyBkYXRhc2V0cyBjYW4gYmUgYSBzaW5nbGUgZGF0YSBlbnRyaWVzIG9yIGFuIGFycmF5IG9mIG11bHRpcGxlIGRhdGEgZW50cmllc1xuICBjb25zdCB7Y29uZmlnLCBvcHRpb25zfSA9IGFjdGlvbjtcbiAgY29uc3QgZGF0YXNldHMgPSB0b0FycmF5KGFjdGlvbi5kYXRhc2V0cyk7XG5cbiAgY29uc3QgbmV3RGF0YUVudHJpZXMgPSBkYXRhc2V0cy5yZWR1Y2UoXG4gICAgKGFjY3UsIHtpbmZvID0ge30sIC4uLnJlc3R9ID0ge30pID0+ICh7XG4gICAgICAuLi5hY2N1LFxuICAgICAgLi4uKGNyZWF0ZU5ld0RhdGFFbnRyeSh7aW5mbywgLi4ucmVzdH0sIHN0YXRlLmRhdGFzZXRzKSB8fCB7fSlcbiAgICB9KSxcbiAgICB7fVxuICApO1xuXG4gIGNvbnN0IGRhdGFFbXB0eSA9IE9iamVjdC5rZXlzKG5ld0RhdGFFbnRyaWVzKS5sZW5ndGggPCAxO1xuXG4gIC8vIGFwcGx5IGNvbmZpZyBpZiBwYXNzZWQgZnJvbSBhY3Rpb25cbiAgY29uc3QgcHJldmlvdXNTdGF0ZSA9IGNvbmZpZ1xuICAgID8gcmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIoc3RhdGUsIHtcbiAgICAgICAgcGF5bG9hZDoge2NvbmZpZywgb3B0aW9uc31cbiAgICAgIH0pXG4gICAgOiBzdGF0ZTtcblxuICBsZXQgbWVyZ2VkU3RhdGUgPSB7XG4gICAgLi4ucHJldmlvdXNTdGF0ZSxcbiAgICBkYXRhc2V0czoge1xuICAgICAgLi4ucHJldmlvdXNTdGF0ZS5kYXRhc2V0cyxcbiAgICAgIC4uLm5ld0RhdGFFbnRyaWVzXG4gICAgfVxuICB9O1xuXG4gIC8vIG1lcmdlIHN0YXRlIHdpdGggY29uZmlnIHRvIGJlIG1lcmdlZFxuICBmb3IgKGNvbnN0IG1lcmdlciBvZiBtZXJnZWRTdGF0ZS5tZXJnZXJzKSB7XG4gICAgaWYgKGlzVmFsaWRNZXJnZXIobWVyZ2VyKSAmJiBtZXJnZXIudG9NZXJnZVByb3AgJiYgbWVyZ2VkU3RhdGVbbWVyZ2VyLnRvTWVyZ2VQcm9wXSkge1xuICAgICAgY29uc3QgdG9NZXJnZSA9IG1lcmdlZFN0YXRlW21lcmdlci50b01lcmdlUHJvcF07XG4gICAgICBtZXJnZWRTdGF0ZVttZXJnZXIudG9NZXJnZVByb3BdID0gSU5JVElBTF9WSVNfU1RBVEVbbWVyZ2VyLnRvTWVyZ2VQcm9wXTtcbiAgICAgIG1lcmdlZFN0YXRlID0gbWVyZ2VyLm1lcmdlKG1lcmdlZFN0YXRlLCB0b01lcmdlKTtcbiAgICB9XG4gIH1cblxuICBsZXQgbmV3TGF5ZXJzID0gIWRhdGFFbXB0eVxuICAgID8gbWVyZ2VkU3RhdGUubGF5ZXJzLmZpbHRlcihsID0+IGwuY29uZmlnLmRhdGFJZCAmJiBsLmNvbmZpZy5kYXRhSWQgaW4gbmV3RGF0YUVudHJpZXMpXG4gICAgOiBbXTtcblxuICBpZiAoIW5ld0xheWVycy5sZW5ndGggJiYgKG9wdGlvbnMgfHwge30pLmF1dG9DcmVhdGVMYXllcnMgIT09IGZhbHNlKSB7XG4gICAgLy8gbm8gbGF5ZXIgbWVyZ2VkLCBmaW5kIGRlZmF1bHRzXG4gICAgY29uc3QgcmVzdWx0ID0gYWRkRGVmYXVsdExheWVycyhtZXJnZWRTdGF0ZSwgbmV3RGF0YUVudHJpZXMpO1xuICAgIG1lcmdlZFN0YXRlID0gcmVzdWx0LnN0YXRlO1xuICAgIG5ld0xheWVycyA9IHJlc3VsdC5uZXdMYXllcnM7XG4gIH1cblxuICBpZiAobWVyZ2VkU3RhdGUuc3BsaXRNYXBzLmxlbmd0aCkge1xuICAgIC8vIGlmIG1hcCBpcyBzcGxpdCwgYWRkIG5ldyBsYXllcnMgdG8gc3BsaXRNYXBzXG4gICAgbmV3TGF5ZXJzID0gbWVyZ2VkU3RhdGUubGF5ZXJzLmZpbHRlcihcbiAgICAgIGwgPT4gbC5jb25maWcuZGF0YUlkICYmIGwuY29uZmlnLmRhdGFJZCBpbiBuZXdEYXRhRW50cmllc1xuICAgICk7XG4gICAgbWVyZ2VkU3RhdGUgPSB7XG4gICAgICAuLi5tZXJnZWRTdGF0ZSxcbiAgICAgIHNwbGl0TWFwczogYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcChtZXJnZWRTdGF0ZS5zcGxpdE1hcHMsIG5ld0xheWVycylcbiAgICB9O1xuICB9XG5cbiAgLy8gaWYgbm8gdG9vbHRpcHMgbWVyZ2VkIGFkZCBkZWZhdWx0IHRvb2x0aXBzXG4gIE9iamVjdC5rZXlzKG5ld0RhdGFFbnRyaWVzKS5mb3JFYWNoKGRhdGFJZCA9PiB7XG4gICAgY29uc3QgdG9vbHRpcEZpZWxkcyA9IG1lcmdlZFN0YXRlLmludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAuY29uZmlnLmZpZWxkc1RvU2hvd1tkYXRhSWRdO1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh0b29sdGlwRmllbGRzKSB8fCAhdG9vbHRpcEZpZWxkcy5sZW5ndGgpIHtcbiAgICAgIG1lcmdlZFN0YXRlID0gYWRkRGVmYXVsdFRvb2x0aXBzKG1lcmdlZFN0YXRlLCBuZXdEYXRhRW50cmllc1tkYXRhSWRdKTtcbiAgICB9XG4gIH0pO1xuXG4gIGxldCB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEoXG4gICAgbWVyZ2VkU3RhdGUsXG4gICAgZGF0YUVtcHR5ID8gT2JqZWN0LmtleXMobWVyZ2VkU3RhdGUuZGF0YXNldHMpIDogT2JqZWN0LmtleXMobmV3RGF0YUVudHJpZXMpLFxuICAgIHVuZGVmaW5lZFxuICApO1xuXG4gIC8vIHJlZ2lzdGVyIGxheWVyIGFuaW1hdGlvbiBkb21haW4sXG4gIC8vIG5lZWQgdG8gYmUgY2FsbGVkIGFmdGVyIGxheWVyIGRhdGEgaXMgY2FsY3VsYXRlZFxuICB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4odXBkYXRlZFN0YXRlKTtcblxuICByZXR1cm4gdXBkYXRlZFN0YXRlO1xufTtcbi8qIGVzbGludC1lbmFibGUgbWF4LXN0YXRlbWVudHMgKi9cblxuLyoqXG4gKiBSZW5hbWUgYW4gZXhpc3RpbmcgZGF0YXNldCBpbiBgdmlzU3RhdGVgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykucmVuYW1lRGF0YXNldFVwZGF0ZXJ9XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5hbWVEYXRhc2V0VXBkYXRlcihzdGF0ZSwgYWN0aW9uKSB7XG4gIGNvbnN0IHtkYXRhSWQsIGxhYmVsfSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFzZXRzfSA9IHN0YXRlO1xuICBjb25zdCBleGlzdGluZyA9IGRhdGFzZXRzW2RhdGFJZF07XG4gIC8vIEB0cy1pZ25vcmVcbiAgcmV0dXJuIGV4aXN0aW5nXG4gICAgPyB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBkYXRhc2V0czoge1xuICAgICAgICAgIC4uLmRhdGFzZXRzLFxuICAgICAgICAgIFtkYXRhSWRdOiB7XG4gICAgICAgICAgICAuLi5leGlzdGluZyxcbiAgICAgICAgICAgIGxhYmVsXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgOiAvLyBOby1vcCBpZiB0aGUgZGF0YXNldCBkb2Vzbid0IGV4aXN0XG4gICAgICBzdGF0ZTtcbn1cblxuLyoqXG4gKiBXaGVuIGEgdXNlciBjbGlja3Mgb24gdGhlIHNwZWNpZmljIG1hcCBjbG9zaW5nIGljb25cbiAqIHRoZSBhcHBsaWNhdGlvbiB3aWxsIGNsb3NlIHRoZSBzZWxlY3RlZCBtYXBcbiAqIGFuZCB3aWxsIG1lcmdlIHRoZSByZW1haW5pbmcgb25lIHdpdGggdGhlIGdsb2JhbCBzdGF0ZVxuICogVE9ETzogaSB0aGluayBpbiB0aGUgZnV0dXJlIHRoaXMgYWN0aW9uIHNob3VsZCBiZSBjYWxsZWQgbWVyZ2UgbWFwIGxheWVycyB3aXRoIGdsb2JhbCBzZXR0aW5nc1xuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlIGB2aXNTdGF0ZWBcbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb24gYWN0aW9uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsb3NlU3BlY2lmaWNNYXBBdEluZGV4KHN0YXRlLCBhY3Rpb24pIHtcbiAgLy8gcmV0cmlldmUgbGF5ZXJzIG1ldGEgZGF0YSBmcm9tIHRoZSByZW1haW5pbmcgbWFwIHRoYXQgd2UgbmVlZCB0byBrZWVwXG4gIGNvbnN0IGluZGV4VG9SZXRyaWV2ZSA9IDEgLSBhY3Rpb24ucGF5bG9hZDtcbiAgY29uc3QgbWFwTGF5ZXJzID0gc3RhdGUuc3BsaXRNYXBzW2luZGV4VG9SZXRyaWV2ZV0ubGF5ZXJzO1xuICBjb25zdCB7bGF5ZXJzfSA9IHN0YXRlO1xuXG4gIC8vIHVwZGF0ZSBsYXllciB2aXNpYmlsaXR5XG4gIGNvbnN0IG5ld0xheWVycyA9IGxheWVycy5tYXAobGF5ZXIgPT5cbiAgICAhbWFwTGF5ZXJzW2xheWVyLmlkXSAmJiBsYXllci5jb25maWcuaXNWaXNpYmxlXG4gICAgICA/IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICAvLyBpZiBsYXllci5pZCBpcyBub3QgaW4gbWFwTGF5ZXJzLCBpdCBzaG91bGQgYmUgaW5WaXNpYmxlXG4gICAgICAgICAgaXNWaXNpYmxlOiBmYWxzZVxuICAgICAgICB9KVxuICAgICAgOiBsYXllclxuICApO1xuXG4gIC8vIGRlbGV0ZSBtYXBcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IG5ld0xheWVycyxcbiAgICBzcGxpdE1hcHM6IFtdXG4gIH07XG59XG5cbi8qKlxuICogVHJpZ2dlciBmaWxlIGxvYWRpbmcgZGlzcGF0Y2ggYGFkZERhdGFUb01hcGAgaWYgc3VjY2VlZCwgb3IgYGxvYWRGaWxlc0VycmAgaWYgZmFpbGVkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykubG9hZEZpbGVzVXBkYXRlcn1cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxvYWRGaWxlc1VwZGF0ZXIgPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICBjb25zdCB7ZmlsZXMsIG9uRmluaXNoID0gbG9hZEZpbGVzU3VjY2Vzc30gPSBhY3Rpb247XG4gIGlmICghZmlsZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZmlsZUxvYWRpbmdQcm9ncmVzcyA9IEFycmF5LmZyb20oZmlsZXMpLnJlZHVjZShcbiAgICAoYWNjdSwgZiwgaSkgPT4gbWVyZ2VfKGluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzKGYsIGkpKShhY2N1KSxcbiAgICB7fVxuICApO1xuXG4gIGNvbnN0IGZpbGVMb2FkaW5nID0ge1xuICAgIGZpbGVDYWNoZTogW10sXG4gICAgZmlsZXNUb0xvYWQ6IGZpbGVzLFxuICAgIG9uRmluaXNoXG4gIH07XG5cbiAgY29uc3QgbmV4dFN0YXRlID0gbWVyZ2VfKHtmaWxlTG9hZGluZ1Byb2dyZXNzLCBmaWxlTG9hZGluZ30pKHN0YXRlKTtcblxuICByZXR1cm4gbG9hZE5leHRGaWxlVXBkYXRlcihuZXh0U3RhdGUpO1xufTtcblxuLyoqXG4gKiBTdWNlc3NmdWxseSBsb2FkZWQgb25lIGZpbGUsIG1vdmUgb24gdG8gdGhlIG5leHQgb25lXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykubG9hZEZpbGVTdGVwU3VjY2Vzc1VwZGF0ZXJ9XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRmlsZVN0ZXBTdWNjZXNzVXBkYXRlcihzdGF0ZSwgYWN0aW9uKSB7XG4gIGlmICghc3RhdGUuZmlsZUxvYWRpbmcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qge2ZpbGVOYW1lLCBmaWxlQ2FjaGV9ID0gYWN0aW9uO1xuICBjb25zdCB7ZmlsZXNUb0xvYWQsIG9uRmluaXNofSA9IHN0YXRlLmZpbGVMb2FkaW5nO1xuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtwZXJjZW50OiAxLCBtZXNzYWdlOiAnRG9uZSd9XG4gIH0pO1xuXG4gIC8vIHNhdmUgcHJvY2Vzc2VkIGZpbGUgdG8gZmlsZUNhY2hlXG4gIGNvbnN0IHN0YXRlV2l0aENhY2hlID0gcGlja18oJ2ZpbGVMb2FkaW5nJykobWVyZ2VfKHtmaWxlQ2FjaGV9KSkoc3RhdGVXaXRoUHJvZ3Jlc3MpO1xuXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBzdGF0ZVdpdGhDYWNoZSxcbiAgICBERUxBWV9UQVNLKDIwMCkubWFwKGZpbGVzVG9Mb2FkLmxlbmd0aCA/IGxvYWROZXh0RmlsZSA6ICgpID0+IG9uRmluaXNoKGZpbGVDYWNoZSkpXG4gICk7XG59XG5cbi8vIHdpdGhUYXNrPFQ+KHN0YXRlOiBULCB0YXNrOiBhbnkpOiBUXG5cbi8qKlxuICpcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAdHlwZSB7dHlwZW9mIGltcG9ydCgnLi92aXMtc3RhdGUtdXBkYXRlcnMnKS5sb2FkTmV4dEZpbGVVcGRhdGVyfVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZE5leHRGaWxlVXBkYXRlcihzdGF0ZSkge1xuICBpZiAoIXN0YXRlLmZpbGVMb2FkaW5nKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHtmaWxlc1RvTG9hZH0gPSBzdGF0ZS5maWxlTG9hZGluZztcbiAgY29uc3QgW2ZpbGUsIC4uLnJlbWFpbmluZ0ZpbGVzVG9Mb2FkXSA9IGZpbGVzVG9Mb2FkO1xuXG4gIC8vIHNhdmUgZmlsZXNUb0xvYWQgdG8gc3RhdGVcbiAgY29uc3QgbmV4dFN0YXRlID0gcGlja18oJ2ZpbGVMb2FkaW5nJykobWVyZ2VfKHtmaWxlc1RvTG9hZDogcmVtYWluaW5nRmlsZXNUb0xvYWR9KSkoc3RhdGUpO1xuXG4gIGNvbnN0IHN0YXRlV2l0aFByb2dyZXNzID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIobmV4dFN0YXRlLCB7XG4gICAgZmlsZU5hbWU6IGZpbGUubmFtZSxcbiAgICBwcm9ncmVzczoge3BlcmNlbnQ6IDAsIG1lc3NhZ2U6ICdsb2FkaW5nLi4uJ31cbiAgfSk7XG5cbiAgY29uc3Qge2xvYWRlcnMsIGxvYWRPcHRpb25zfSA9IHN0YXRlO1xuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc3RhdGVXaXRoUHJvZ3Jlc3MsXG4gICAgbWFrZUxvYWRGaWxlVGFzayhmaWxlLCBuZXh0U3RhdGUuZmlsZUxvYWRpbmcuZmlsZUNhY2hlLCBsb2FkZXJzLCBsb2FkT3B0aW9ucylcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VMb2FkRmlsZVRhc2soZmlsZSwgZmlsZUNhY2hlLCBsb2FkZXJzID0gW10sIGxvYWRPcHRpb25zID0ge30pIHtcbiAgcmV0dXJuIExPQURfRklMRV9UQVNLKHtmaWxlLCBmaWxlQ2FjaGUsIGxvYWRlcnMsIGxvYWRPcHRpb25zfSkuYmltYXAoXG4gICAgLy8gcHJldHRpZXIgaWdub3JlXG4gICAgLy8gc3VjY2Vzc1xuICAgIGdlbiA9PlxuICAgICAgbmV4dEZpbGVCYXRjaCh7XG4gICAgICAgIGdlbixcbiAgICAgICAgZmlsZU5hbWU6IGZpbGUubmFtZSxcbiAgICAgICAgb25GaW5pc2g6IHJlc3VsdCA9PlxuICAgICAgICAgIHByb2Nlc3NGaWxlQ29udGVudCh7XG4gICAgICAgICAgICBjb250ZW50OiByZXN1bHQsXG4gICAgICAgICAgICBmaWxlQ2FjaGVcbiAgICAgICAgICB9KVxuICAgICAgfSksXG5cbiAgICAvLyBlcnJvclxuICAgIGVyciA9PiBsb2FkRmlsZXNFcnIoZmlsZS5uYW1lLCBlcnIpXG4gICk7XG59XG5cbi8qKlxuICpcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAdHlwZSB7dHlwZW9mIGltcG9ydCgnLi92aXMtc3RhdGUtdXBkYXRlcnMnKS5wcm9jZXNzRmlsZUNvbnRlbnRVcGRhdGVyfVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlcihzdGF0ZSwgYWN0aW9uKSB7XG4gIGNvbnN0IHtjb250ZW50LCBmaWxlQ2FjaGV9ID0gYWN0aW9uLnBheWxvYWQ7XG5cbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge1xuICAgIGZpbGVOYW1lOiBjb250ZW50LmZpbGVOYW1lLFxuICAgIHByb2dyZXNzOiB7cGVyY2VudDogMSwgbWVzc2FnZTogJ3Byb2Nlc3NpbmcuLi4nfVxuICB9KTtcblxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc3RhdGVXaXRoUHJvZ3Jlc3MsXG4gICAgUFJPQ0VTU19GSUxFX0RBVEEoe2NvbnRlbnQsIGZpbGVDYWNoZX0pLmJpbWFwKFxuICAgICAgcmVzdWx0ID0+IGxvYWRGaWxlU3RlcFN1Y2Nlc3Moe2ZpbGVOYW1lOiBjb250ZW50LmZpbGVOYW1lLCBmaWxlQ2FjaGU6IHJlc3VsdH0pLFxuICAgICAgZXJyID0+IGxvYWRGaWxlc0Vycihjb250ZW50LmZpbGVOYW1lLCBlcnIpXG4gICAgKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQcm9ncmVzcyhwcmV2UHJvZ3Jlc3MgPSB7fSwgcHJvZ3Jlc3MpIHtcbiAgLy8gVGhpcyBoYXBwZW5zIHdoZW4gcmVjZWl2aW5nIHF1ZXJ5IG1ldGFkYXRhIG9yIG90aGVyIGNhc2VzIHdlIGRvbid0XG4gIC8vIGhhdmUgYW4gdXBkYXRlIGZvciB0aGUgdXNlci5cbiAgaWYgKCFwcm9ncmVzcyB8fCAhcHJvZ3Jlc3MucGVyY2VudCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcGVyY2VudDogcHJvZ3Jlc3MucGVyY2VudFxuICB9O1xufVxuXG4vKipcbiAqIGdldHMgY2FsbGVkIHdpdGggcGF5bG9hZCA9IEFzeW5jR2VuZXJhdG9yPD8/Pz5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAdHlwZSB7dHlwZW9mIGltcG9ydCgnLi92aXMtc3RhdGUtdXBkYXRlcnMnKS5uZXh0RmlsZUJhdGNoVXBkYXRlcn1cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IG5leHRGaWxlQmF0Y2hVcGRhdGVyID0gKFxuICBzdGF0ZSxcbiAge3BheWxvYWQ6IHtnZW4sIGZpbGVOYW1lLCBwcm9ncmVzcywgYWNjdW11bGF0ZWQsIG9uRmluaXNofX1cbikgPT4ge1xuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHBhcnNlUHJvZ3Jlc3Moc3RhdGUuZmlsZUxvYWRpbmdQcm9ncmVzc1tmaWxlTmFtZV0sIHByb2dyZXNzKVxuICB9KTtcbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHN0YXRlV2l0aFByb2dyZXNzLFxuICAgIFVOV1JBUF9UQVNLKGdlbi5uZXh0KCkpLmJpbWFwKFxuICAgICAgKHt2YWx1ZSwgZG9uZX0pID0+IHtcbiAgICAgICAgcmV0dXJuIGRvbmVcbiAgICAgICAgICA/IG9uRmluaXNoKGFjY3VtdWxhdGVkKVxuICAgICAgICAgIDogbmV4dEZpbGVCYXRjaCh7XG4gICAgICAgICAgICAgIGdlbixcbiAgICAgICAgICAgICAgZmlsZU5hbWUsXG4gICAgICAgICAgICAgIHByb2dyZXNzOiB2YWx1ZS5wcm9ncmVzcyxcbiAgICAgICAgICAgICAgYWNjdW11bGF0ZWQ6IHZhbHVlLFxuICAgICAgICAgICAgICBvbkZpbmlzaFxuICAgICAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgZXJyID0+IGxvYWRGaWxlc0VycihmaWxlTmFtZSwgZXJyKVxuICAgIClcbiAgKTtcbn07XG5cbi8qKlxuICogVHJpZ2dlciBsb2FkaW5nIGZpbGUgZXJyb3JcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAdHlwZSB7dHlwZW9mIGltcG9ydCgnLi92aXMtc3RhdGUtdXBkYXRlcnMnKS5sb2FkRmlsZXNFcnJVcGRhdGVyfVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbG9hZEZpbGVzRXJyVXBkYXRlciA9IChzdGF0ZSwge2Vycm9yLCBmaWxlTmFtZX0pID0+IHtcbiAgLy8gdXBkYXRlIHVpIHdpdGggZXJyb3IgbWVzc2FnZVxuICBDb25zb2xlLndhcm4oZXJyb3IpO1xuICBpZiAoIXN0YXRlLmZpbGVMb2FkaW5nKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHtmaWxlc1RvTG9hZCwgb25GaW5pc2gsIGZpbGVDYWNoZX0gPSBzdGF0ZS5maWxlTG9hZGluZztcblxuICBjb25zdCBuZXh0U3RhdGUgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge1xuICAgIGZpbGVOYW1lLFxuICAgIHByb2dyZXNzOiB7ZXJyb3J9XG4gIH0pO1xuXG4gIC8vIGtpY2sgb2ZmIG5leHQgZmlsZSBvciBmaW5pc2hcbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIG5leHRTdGF0ZSxcbiAgICBERUxBWV9UQVNLKDIwMCkubWFwKGZpbGVzVG9Mb2FkLmxlbmd0aCA/IGxvYWROZXh0RmlsZSA6ICgpID0+IG9uRmluaXNoKGZpbGVDYWNoZSkpXG4gICk7XG59O1xuXG4vKipcbiAqIFdoZW4gc2VsZWN0IGRhdGFzZXQgZm9yIGV4cG9ydCwgYXBwbHkgY3B1IGZpbHRlciB0byBzZWxlY3RlZCBkYXRhc2V0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykuYXBwbHlDUFVGaWx0ZXJVcGRhdGVyfVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYXBwbHlDUFVGaWx0ZXJVcGRhdGVyID0gKHN0YXRlLCB7ZGF0YUlkfSkgPT4ge1xuICAvLyBhcHBseSBjcHVGaWx0ZXJcbiAgY29uc3QgZGF0YUlkcyA9IHRvQXJyYXkoZGF0YUlkKTtcblxuICByZXR1cm4gZGF0YUlkcy5yZWR1Y2UoKGFjY3UsIGlkKSA9PiBmaWx0ZXJEYXRhc2V0Q1BVKGFjY3UsIGlkKSwgc3RhdGUpO1xufTtcblxuLyoqXG4gKiBVc2VyIGlucHV0IHRvIHVwZGF0ZSB0aGUgaW5mbyBvZiB0aGUgbWFwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykuc2V0TWFwSW5mb1VwZGF0ZXJ9XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRNYXBJbmZvVXBkYXRlciA9IChzdGF0ZSwgYWN0aW9uKSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbWFwSW5mbzoge1xuICAgIC4uLnN0YXRlLm1hcEluZm8sXG4gICAgLi4uYWN0aW9uLmluZm9cbiAgfVxufSk7XG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byB1cGRhdGUgQWxsIGxheWVyIGRvbWFpbiBhbmQgbGF5ZXIgZGF0YSBvZiBzdGF0ZVxuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykuYWRkRGVmYXVsdExheWVyc31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZERlZmF1bHRMYXllcnMoc3RhdGUsIGRhdGFzZXRzKSB7XG4gIC8qKiBAdHlwZSB7TGF5ZXJbXX0gKi9cbiAgY29uc3QgZW1wdHkgPSBbXTtcbiAgY29uc3QgZGVmYXVsdExheWVycyA9IE9iamVjdC52YWx1ZXMoZGF0YXNldHMpLnJlZHVjZSgoYWNjdSwgZGF0YXNldCkgPT4ge1xuICAgIGNvbnN0IGZvdW5kTGF5ZXJzID0gZmluZERlZmF1bHRMYXllcihkYXRhc2V0LCBzdGF0ZS5sYXllckNsYXNzZXMpO1xuICAgIHJldHVybiBmb3VuZExheWVycyAmJiBmb3VuZExheWVycy5sZW5ndGggPyBhY2N1LmNvbmNhdChmb3VuZExheWVycykgOiBhY2N1O1xuICB9LCBlbXB0eSk7XG5cbiAgcmV0dXJuIHtcbiAgICBzdGF0ZToge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBsYXllcnM6IFsuLi5zdGF0ZS5sYXllcnMsIC4uLmRlZmF1bHRMYXllcnNdLFxuICAgICAgbGF5ZXJPcmRlcjogW1xuICAgICAgICAvLyBwdXQgbmV3IGxheWVycyBvbiB0b3Agb2Ygb2xkIG9uZXNcbiAgICAgICAgLi4uZGVmYXVsdExheWVycy5tYXAoKF8sIGkpID0+IHN0YXRlLmxheWVycy5sZW5ndGggKyBpKSxcbiAgICAgICAgLi4uc3RhdGUubGF5ZXJPcmRlclxuICAgICAgXVxuICAgIH0sXG4gICAgbmV3TGF5ZXJzOiBkZWZhdWx0TGF5ZXJzXG4gIH07XG59XG5cbi8qKlxuICogaGVscGVyIGZ1bmN0aW9uIHRvIGZpbmQgZGVmYXVsdCB0b29sdGlwc1xuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gZGF0YXNldFxuICogQHJldHVybnMge09iamVjdH0gbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGREZWZhdWx0VG9vbHRpcHMoc3RhdGUsIGRhdGFzZXQpIHtcbiAgY29uc3QgdG9vbHRpcEZpZWxkcyA9IGRhdGFzZXQubWV0YWRhdGEuaXNEeW5hbWljU3BhdGlhbEluZGV4XG4gICAgPyB7W2RhdGFzZXQuaWRdOiBbXX1cbiAgICA6IGZpbmRGaWVsZHNUb1Nob3coZGF0YXNldCk7XG4gIGNvbnN0IG1lcmdlZCA9IHtcbiAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLmNvbmZpZy5maWVsZHNUb1Nob3csXG4gICAgLi4udG9vbHRpcEZpZWxkc1xuICB9O1xuXG4gIHJldHVybiBzZXQoWydpbnRlcmFjdGlvbkNvbmZpZycsICd0b29sdGlwJywgJ2NvbmZpZycsICdmaWVsZHNUb1Nob3cnXSwgbWVyZ2VkLCBzdGF0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsRmlsZUxvYWRpbmdQcm9ncmVzcyhmaWxlLCBpbmRleCkge1xuICBjb25zdCBmaWxlTmFtZSA9IGZpbGUubmFtZSB8fCBgVW50aXRsZWQgRmlsZSAke2luZGV4fWA7XG4gIHJldHVybiB7XG4gICAgW2ZpbGVOYW1lXToge1xuICAgICAgLy8gcGVyY2VudCBvZiBjdXJyZW50IGZpbGVcbiAgICAgIHBlcmNlbnQ6IDAsXG4gICAgICBtZXNzYWdlOiAnJyxcbiAgICAgIGZpbGVOYW1lLFxuICAgICAgZXJyb3I6IG51bGxcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge2ZpbGVOYW1lLCBwcm9ncmVzc30pIHtcbiAgcmV0dXJuIHBpY2tfKCdmaWxlTG9hZGluZ1Byb2dyZXNzJykocGlja18oZmlsZU5hbWUpKG1lcmdlXyhwcm9ncmVzcykpKShzdGF0ZSk7XG59XG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byB1cGRhdGUgbGF5ZXIgZG9tYWlucyBmb3IgYW4gYXJyYXkgb2YgZGF0YXNldHNcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL3Zpcy1zdGF0ZS11cGRhdGVycycpLnVwZGF0ZUFsbExheWVyRG9tYWluRGF0YX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShzdGF0ZSwgZGF0YUlkLCB1cGRhdGVkRmlsdGVyKSB7XG4gIGNvbnN0IGRhdGFJZHMgPSB0eXBlb2YgZGF0YUlkID09PSAnc3RyaW5nJyA/IFtkYXRhSWRdIDogZGF0YUlkO1xuICBjb25zdCBuZXdMYXllcnMgPSBbXTtcbiAgY29uc3QgbmV3TGF5ZXJEYXRhID0gW107XG5cbiAgc3RhdGUubGF5ZXJzLmZvckVhY2goKG9sZExheWVyLCBpKSA9PiB7XG4gICAgaWYgKG9sZExheWVyLmNvbmZpZy5kYXRhSWQgJiYgZGF0YUlkcy5pbmNsdWRlcyhvbGRMYXllci5jb25maWcuZGF0YUlkKSkge1xuICAgICAgLy8gTm8gbmVlZCB0byByZWNhbGN1bGF0ZSBsYXllciBkb21haW4gaWYgZmlsdGVyIGhhcyBmaXhlZCBkb21haW5cbiAgICAgIGNvbnN0IG5ld0xheWVyID1cbiAgICAgICAgdXBkYXRlZEZpbHRlciAmJiB1cGRhdGVkRmlsdGVyLmZpeGVkRG9tYWluXG4gICAgICAgICAgPyBvbGRMYXllclxuICAgICAgICAgIDogb2xkTGF5ZXIudXBkYXRlTGF5ZXJEb21haW4oc3RhdGUuZGF0YXNldHMsIHVwZGF0ZWRGaWx0ZXIpO1xuXG4gICAgICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlLCBzdGF0ZS5sYXllckRhdGFbaV0pO1xuXG4gICAgICBuZXdMYXllcnMucHVzaChsYXllcik7XG4gICAgICBuZXdMYXllckRhdGEucHVzaChsYXllckRhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdMYXllcnMucHVzaChvbGRMYXllcik7XG4gICAgICBuZXdMYXllckRhdGEucHVzaChzdGF0ZS5sYXllckRhdGFbaV0pO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBuZXdMYXllcnMsXG4gICAgbGF5ZXJEYXRhOiBuZXdMYXllckRhdGFcbiAgfTtcblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVBbmltYXRpb25Eb21haW4oc3RhdGUpIHtcbiAgLy8gbWVyZ2UgYWxsIGFuaW1hdGFibGUgbGF5ZXIgZG9tYWluIGFuZCB1cGRhdGUgZ2xvYmFsIGNvbmZpZ1xuICBjb25zdCBhbmltYXRhYmxlTGF5ZXJzID0gc3RhdGUubGF5ZXJzLmZpbHRlcihcbiAgICBsID0+XG4gICAgICBsLmNvbmZpZy5pc1Zpc2libGUgJiZcbiAgICAgIGwuY29uZmlnLmFuaW1hdGlvbiAmJlxuICAgICAgbC5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQgJiZcbiAgICAgIEFycmF5LmlzQXJyYXkobC5hbmltYXRpb25Eb21haW4pXG4gICk7XG5cbiAgaWYgKCFhbmltYXRhYmxlTGF5ZXJzLmxlbmd0aCkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICAgIGRvbWFpbjogbnVsbCxcbiAgICAgICAgZGVmYXVsdFRpbWVGb3JtYXQ6IG51bGxcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgY29uc3QgbWVyZ2VkRG9tYWluID0gYW5pbWF0YWJsZUxheWVycy5yZWR1Y2UoXG4gICAgKGFjY3UsIGxheWVyKSA9PiBbXG4gICAgICBNYXRoLm1pbihhY2N1WzBdLCBsYXllci5hbmltYXRpb25Eb21haW5bMF0pLFxuICAgICAgTWF0aC5tYXgoYWNjdVsxXSwgbGF5ZXIuYW5pbWF0aW9uRG9tYWluWzFdKVxuICAgIF0sXG4gICAgW051bWJlcihJbmZpbml0eSksIC1JbmZpbml0eV1cbiAgKTtcbiAgY29uc3QgZGVmYXVsdFRpbWVGb3JtYXQgPSBnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIobWVyZ2VkRG9tYWluKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgY3VycmVudFRpbWU6IGlzSW5SYW5nZShzdGF0ZS5hbmltYXRpb25Db25maWcuY3VycmVudFRpbWUsIG1lcmdlZERvbWFpbilcbiAgICAgICAgPyBzdGF0ZS5hbmltYXRpb25Db25maWcuY3VycmVudFRpbWVcbiAgICAgICAgOiBtZXJnZWREb21haW5bMF0sXG4gICAgICBkb21haW46IG1lcmdlZERvbWFpbixcbiAgICAgIGRlZmF1bHRUaW1lRm9ybWF0XG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIFVwZGF0ZSB0aGUgc3RhdHVzIG9mIHRoZSBlZGl0b3JcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAdHlwZSB7dHlwZW9mIGltcG9ydCgnLi92aXMtc3RhdGUtdXBkYXRlcnMnKS5zZXRFZGl0b3JNb2RlVXBkYXRlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IHNldEVkaXRvck1vZGVVcGRhdGVyID0gKHN0YXRlLCB7bW9kZX0pID0+ICh7XG4gIC4uLnN0YXRlLFxuICBlZGl0b3I6IHtcbiAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgbW9kZSxcbiAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGxcbiAgfVxufSk7XG5cbi8vIGNvbnN0IGZlYXR1cmVUb0ZpbHRlclZhbHVlID0gKGZlYXR1cmUpID0+ICh7Li4uZmVhdHVyZSwgaWQ6IGZlYXR1cmUuaWR9KTtcbi8qKlxuICogVXBkYXRlIGVkaXRvciBmZWF0dXJlc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL3Zpcy1zdGF0ZS11cGRhdGVycycpLnNldEZlYXR1cmVzVXBkYXRlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZlYXR1cmVzVXBkYXRlcihzdGF0ZSwge2ZlYXR1cmVzID0gW119KSB7XG4gIGNvbnN0IGxhc3RGZWF0dXJlID0gZmVhdHVyZXMubGVuZ3RoICYmIGZlYXR1cmVzW2ZlYXR1cmVzLmxlbmd0aCAtIDFdO1xuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgLy8gb25seSBzYXZlIG5vbmUgZmlsdGVyIGZlYXR1cmVzIHRvIGVkaXRvclxuICAgICAgZmVhdHVyZXM6IGZlYXR1cmVzLmZpbHRlcihmID0+ICFnZXRGaWx0ZXJJZEluRmVhdHVyZShmKSksXG4gICAgICBtb2RlOiBsYXN0RmVhdHVyZSAmJiBsYXN0RmVhdHVyZS5wcm9wZXJ0aWVzLmlzQ2xvc2VkID8gRURJVE9SX01PREVTLkVESVQgOiBzdGF0ZS5lZGl0b3IubW9kZVxuICAgIH1cbiAgfTtcblxuICAvLyBSZXRyaWV2ZSBleGlzdGluZyBmZWF0dXJlXG4gIGNvbnN0IHtzZWxlY3RlZEZlYXR1cmV9ID0gc3RhdGUuZWRpdG9yO1xuXG4gIC8vIElmIG5vIGZlYXR1cmUgaXMgc2VsZWN0ZWQgd2UgY2FuIHNpbXBseSByZXR1cm4gc2luY2Ugbm8gb3BlcmF0aW9uc1xuICBpZiAoIXNlbGVjdGVkRmVhdHVyZSkge1xuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfVxuXG4gIC8vIFRPRE86IGNoZWNrIGlmIHRoZSBmZWF0dXJlIGhhcyBjaGFuZ2VkXG4gIGNvbnN0IGZlYXR1cmUgPSBmZWF0dXJlcy5maW5kKGYgPT4gZi5pZCA9PT0gc2VsZWN0ZWRGZWF0dXJlLmlkKTtcblxuICAvLyBpZiBmZWF0dXJlIGlzIHBhcnQgb2YgYSBmaWx0ZXJcbiAgY29uc3QgZmlsdGVySWQgPSBmZWF0dXJlICYmIGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpO1xuICBpZiAoZmlsdGVySWQgJiYgZmVhdHVyZSkge1xuICAgIGNvbnN0IGZlYXR1cmVWYWx1ZSA9IGZlYXR1cmVUb0ZpbHRlclZhbHVlKGZlYXR1cmUsIGZpbHRlcklkKTtcbiAgICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmaWwgPT4gZmlsLmlkID09PSBmaWx0ZXJJZCk7XG4gICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkeDogZmlsdGVySWR4LFxuICAgICAgcHJvcDogJ3ZhbHVlJyxcbiAgICAgIHZhbHVlOiBmZWF0dXJlVmFsdWVcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBTZXQgdGhlIGN1cnJlbnQgc2VsZWN0ZWQgZmVhdHVyZVxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykuc2V0U2VsZWN0ZWRGZWF0dXJlVXBkYXRlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IHNldFNlbGVjdGVkRmVhdHVyZVVwZGF0ZXIgPSAoc3RhdGUsIHtmZWF0dXJlfSkgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGVkaXRvcjoge1xuICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICBzZWxlY3RlZEZlYXR1cmU6IGZlYXR1cmVcbiAgfVxufSk7XG5cbi8qKlxuICogRGVsZXRlIGV4aXN0aW5nIGZlYXR1cmUgZnJvbSBmaWx0ZXJzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykuZGVsZXRlRmVhdHVyZVVwZGF0ZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxldGVGZWF0dXJlVXBkYXRlcihzdGF0ZSwge2ZlYXR1cmV9KSB7XG4gIGlmICghZmVhdHVyZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gICAgfVxuICB9O1xuXG4gIGlmIChnZXRGaWx0ZXJJZEluRmVhdHVyZShmZWF0dXJlKSkge1xuICAgIGNvbnN0IGZpbHRlcklkeCA9IG5ld1N0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSkpO1xuXG4gICAgcmV0dXJuIGZpbHRlcklkeCA+IC0xID8gcmVtb3ZlRmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge2lkeDogZmlsdGVySWR4fSkgOiBuZXdTdGF0ZTtcbiAgfVxuXG4gIC8vIG1vZGlmeSBlZGl0b3Igb2JqZWN0XG4gIGNvbnN0IG5ld0VkaXRvciA9IHtcbiAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgZmVhdHVyZXM6IHN0YXRlLmVkaXRvci5mZWF0dXJlcy5maWx0ZXIoZiA9PiBmLmlkICE9PSBmZWF0dXJlLmlkKSxcbiAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGxcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjogbmV3RWRpdG9yXG4gIH07XG59XG5cbi8qKlxuICogVG9nZ2xlIGZlYXR1cmUgYXMgbGF5ZXIgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykuc2V0UG9seWdvbkZpbHRlckxheWVyVXBkYXRlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXIoc3RhdGUsIHBheWxvYWQpIHtcbiAgY29uc3Qge2xheWVyLCBmZWF0dXJlfSA9IHBheWxvYWQ7XG4gIGNvbnN0IGZpbHRlcklkID0gZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSk7XG5cbiAgLy8gbGV0IG5ld0ZpbHRlciA9IG51bGw7XG4gIGxldCBmaWx0ZXJJZHg7XG4gIGxldCBuZXdMYXllcklkID0gW2xheWVyLmlkXTtcbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIC8vIElmIHBvbHlnb24gZmlsdGVyIGFscmVhZHkgZXhpc3RzLCB3ZSBuZWVkIHRvIGZpbmQgb3V0IGlmIHRoZSBjdXJyZW50IGxheWVyIGlzIGFscmVhZHkgaW5jbHVkZWRcbiAgaWYgKGZpbHRlcklkKSB7XG4gICAgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG5cbiAgICBpZiAoIXN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSkge1xuICAgICAgLy8gd2hhdCBpZiBmaWx0ZXIgZG9lc24ndCBleGlzdD8uLi4gbm90IHBvc3NpYmxlLlxuICAgICAgLy8gYmVjYXVzZSBmZWF0dXJlcyBpbiB0aGUgZWRpdG9yIGlzIHBhc3NlZCBpbiBmcm9tIGZpbHRlcnMgYW5kIGVkaXRvcnMuXG4gICAgICAvLyBidXQgd2Ugd2lsbCBtb3ZlIHRoaXMgZmVhdHVyZSBiYWNrIHRvIGVkaXRvciBqdXN0IGluIGNhc2VcbiAgICAgIGNvbnN0IG5vbmVGaWx0ZXJGZWF0dXJlID0ge1xuICAgICAgICAuLi5mZWF0dXJlLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgLi4uZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICAgIGZpbHRlcklkOiBudWxsXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBlZGl0b3I6IHtcbiAgICAgICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAgICAgZmVhdHVyZXM6IFsuLi5zdGF0ZS5lZGl0b3IuZmVhdHVyZXMsIG5vbmVGaWx0ZXJGZWF0dXJlXSxcbiAgICAgICAgICBzZWxlY3RlZEZlYXR1cmU6IG5vbmVGaWx0ZXJGZWF0dXJlXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XTtcbiAgICBjb25zdCB7bGF5ZXJJZCA9IFtdfSA9IGZpbHRlcjtcbiAgICBjb25zdCBpc0xheWVySW5jbHVkZWQgPSBsYXllcklkLmluY2x1ZGVzKGxheWVyLmlkKTtcblxuICAgIG5ld0xheWVySWQgPSBpc0xheWVySW5jbHVkZWRcbiAgICAgID8gLy8gaWYgbGF5ZXIgaXMgaW5jbHVkZWQsIHJlbW92ZSBpdFxuICAgICAgICBsYXllcklkLmZpbHRlcihsID0+IGwgIT09IGxheWVyLmlkKVxuICAgICAgOiBbLi4ubGF5ZXJJZCwgbGF5ZXIuaWRdO1xuICB9IGVsc2Uge1xuICAgIC8vIGlmIHdlIGhhdmVuJ3QgY3JlYXRlIHRoZSBwb2x5Z29uIGZpbHRlciwgY3JlYXRlIGl0XG4gICAgY29uc3QgbmV3RmlsdGVyID0gZ2VuZXJhdGVQb2x5Z29uRmlsdGVyKFtdLCBmZWF0dXJlKTtcbiAgICBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmxlbmd0aDtcblxuICAgIC8vIGFkZCBmZWF0dXJlLCByZW1vdmUgZmVhdHVyZSBmcm9tIGVpZHRvclxuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBmaWx0ZXJzOiBbLi4uc3RhdGUuZmlsdGVycywgbmV3RmlsdGVyXSxcbiAgICAgIGVkaXRvcjoge1xuICAgICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAgIGZlYXR1cmVzOiBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMuZmlsdGVyKGYgPT4gZi5pZCAhPT0gZmVhdHVyZS5pZCksXG4gICAgICAgIHNlbGVjdGVkRmVhdHVyZTogbmV3RmlsdGVyLnZhbHVlXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgcHJvcDogJ2xheWVySWQnLFxuICAgIHZhbHVlOiBuZXdMYXllcklkXG4gIH0pO1xufVxuXG4vKipcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAdHlwZSB7dHlwZW9mIGltcG9ydCgnLi92aXMtc3RhdGUtdXBkYXRlcnMnKS5zb3J0VGFibGVDb2x1bW5VcGRhdGVyfVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc29ydFRhYmxlQ29sdW1uVXBkYXRlcihzdGF0ZSwge2RhdGFJZCwgY29sdW1uLCBtb2RlfSkge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBzb3J0TW9kZSA9IG1vZGU7XG4gIGlmICghc29ydE1vZGUpIHtcbiAgICBjb25zdCBjdXJyZW50TW9kZSA9IGdldChkYXRhc2V0LCBbJ3NvcnRDb2x1bW4nLCBjb2x1bW5dKTtcbiAgICAvLyBAdHMtaWdub3JlIC0gc2hvdWxkIGJlIGZpeGFibGUgaW4gYSBUUyBmaWxlXG4gICAgc29ydE1vZGUgPSBjdXJyZW50TW9kZVxuICAgICAgPyBPYmplY3Qua2V5cyhTT1JUX09SREVSKS5maW5kKG0gPT4gbSAhPT0gY3VycmVudE1vZGUpXG4gICAgICA6IFNPUlRfT1JERVIuQVNDRU5ESU5HO1xuICB9XG5cbiAgY29uc3Qgc29ydGVkID0gc29ydERhdGFzZXRCeUNvbHVtbihkYXRhc2V0LCBjb2x1bW4sIHNvcnRNb2RlKTtcbiAgcmV0dXJuIHNldChbJ2RhdGFzZXRzJywgZGF0YUlkXSwgc29ydGVkLCBzdGF0ZSk7XG59XG5cbi8qKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL3Zpcy1zdGF0ZS11cGRhdGVycycpLnBpblRhYmxlQ29sdW1uVXBkYXRlcn1cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBpblRhYmxlQ29sdW1uVXBkYXRlcihzdGF0ZSwge2RhdGFJZCwgY29sdW1ufSkge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGZpZWxkID0gZGF0YXNldC5maWVsZHMuZmluZChmID0+IGYubmFtZSA9PT0gY29sdW1uKTtcbiAgaWYgKCFmaWVsZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBwaW5uZWRDb2x1bW5zO1xuICBpZiAoQXJyYXkuaXNBcnJheShkYXRhc2V0LnBpbm5lZENvbHVtbnMpICYmIGRhdGFzZXQucGlubmVkQ29sdW1ucy5pbmNsdWRlcyhmaWVsZC5uYW1lKSkge1xuICAgIC8vIHVucGluIGl0XG4gICAgcGlubmVkQ29sdW1ucyA9IGRhdGFzZXQucGlubmVkQ29sdW1ucy5maWx0ZXIoY28gPT4gY28gIT09IGZpZWxkLm5hbWUpO1xuICB9IGVsc2Uge1xuICAgIHBpbm5lZENvbHVtbnMgPSAoZGF0YXNldC5waW5uZWRDb2x1bW5zIHx8IFtdKS5jb25jYXQoZmllbGQubmFtZSk7XG4gIH1cblxuICByZXR1cm4gc2V0KFsnZGF0YXNldHMnLCBkYXRhSWQsICdwaW5uZWRDb2x1bW5zJ10sIHBpbm5lZENvbHVtbnMsIHN0YXRlKTtcbn1cblxuLyoqXG4gKiBDb3B5IGNvbHVtbiBjb250ZW50IGFzIHN0cmluZ3NcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAdHlwZSB7dHlwZW9mIGltcG9ydCgnLi92aXMtc3RhdGUtdXBkYXRlcnMnKS5jb3B5VGFibGVDb2x1bW5VcGRhdGVyfVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29weVRhYmxlQ29sdW1uVXBkYXRlcihzdGF0ZSwge2RhdGFJZCwgY29sdW1ufSkge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGZpZWxkSWR4ID0gZGF0YXNldC5maWVsZHMuZmluZEluZGV4KGYgPT4gZi5uYW1lID09PSBjb2x1bW4pO1xuICBpZiAoZmllbGRJZHggPCAwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHt0eXBlfSA9IGRhdGFzZXQuZmllbGRzW2ZpZWxkSWR4XTtcbiAgY29uc3QgdGV4dCA9IGRhdGFzZXQuZGF0YUNvbnRhaW5lclxuICAgIC5tYXAocm93ID0+IHBhcnNlRmllbGRWYWx1ZShyb3cudmFsdWVBdChmaWVsZElkeCksIHR5cGUpLCB0cnVlKVxuICAgIC5qb2luKCdcXG4nKTtcblxuICBjb3B5KHRleHQpO1xuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZWRpdG9yXG4gKiBAdHlwZSB7dHlwZW9mIGltcG9ydCgnLi92aXMtc3RhdGUtdXBkYXRlcnMnKS50b2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvZ2dsZUVkaXRvclZpc2liaWxpdHlVcGRhdGVyKHN0YXRlKSB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICB2aXNpYmxlOiAhc3RhdGUuZWRpdG9yLnZpc2libGVcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlcihzdGF0ZSwge2lkeCwgY29uZmlnfSkge1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgQ29uc29sZS5lcnJvcihgZmlsdGVycy4ke2lkeH0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChvbGRGaWx0ZXIudHlwZSAhPT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSkge1xuICAgIENvbnNvbGUuZXJyb3IoXG4gICAgICBgc2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZyBjYW4gb25seSBiZSBjYWxsZWQgdG8gdXBkYXRlIGEgdGltZSBmaWx0ZXIuIGNoZWNrIGZpbHRlci50eXBlID09PSAndGltZVJhbmdlJ2BcbiAgICApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZXMgPSBjaGVja1RpbWVDb25maWdBcmdzKGNvbmZpZyk7XG5cbiAgcmV0dXJuIHBpY2tfKCdmaWx0ZXJzJykoc3dhcF8obWVyZ2VfKHVwZGF0ZXMpKG9sZEZpbHRlcikpKShzdGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrVGltZUNvbmZpZ0FyZ3MoY29uZmlnKSB7XG4gIGNvbnN0IGFsbG93ZWQgPSBbJ3RpbWVGb3JtYXQnLCAndGltZXpvbmUnXTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGNvbmZpZykucmVkdWNlKChhY2N1LCBwcm9wKSA9PiB7XG4gICAgaWYgKCFhbGxvd2VkLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICBDb25zb2xlLmVycm9yKFxuICAgICAgICBgc2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnIHRha2VzIHRpbWVGb3JtYXQgYW5kL29yIHRpbWV6b25lIGFzIG9wdGlvbnMsIGZvdW5kICR7cHJvcH1gXG4gICAgICApO1xuICAgICAgcmV0dXJuIGFjY3U7XG4gICAgfVxuXG4gICAgLy8gaGVyZSB3ZSBhcmUgTk9UIGNoZWNraW5nIGlmIHRpbWV6b25lIG9yIHRpbWVGb3JtYXQgaW5wdXQgaXMgdmFsaWRcbiAgICBhY2N1W3Byb3BdID0gY29uZmlnW3Byb3BdO1xuICAgIHJldHVybiBhY2N1O1xuICB9LCB7fSk7XG59XG4vKipcbiAqIFVwZGF0ZSBlZGl0b3JcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL3Zpcy1zdGF0ZS11cGRhdGVycycpLnNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZ1VwZGF0ZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyKHN0YXRlLCB7Y29uZmlnfSkge1xuICBpZiAoIWNvbmZpZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB1cGRhdGVzID0gY2hlY2tUaW1lQ29uZmlnQXJncyhjb25maWcpO1xuICByZXR1cm4gcGlja18oJ2FuaW1hdGlvbkNvbmZpZycpKG1lcmdlXyh1cGRhdGVzKSkoc3RhdGUpO1xufVxuIl19
|
|
2433
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZWR1Y2Vycy92aXMtc3RhdGUtdXBkYXRlcnMuanMiXSwibmFtZXMiOlsidmlzU3RhdGVVcGRhdGVycyIsIkRFRkFVTFRfQU5JTUFUSU9OX0NPTkZJRyIsImRvbWFpbiIsImN1cnJlbnRUaW1lIiwic3BlZWQiLCJpc0FuaW1hdGluZyIsInRpbWVGb3JtYXQiLCJ0aW1lem9uZSIsImRlZmF1bHRUaW1lRm9ybWF0IiwiREVGQVVMVF9FRElUT1IiLCJtb2RlIiwiRURJVE9SX01PREVTIiwiRFJBV19QT0xZR09OIiwiZmVhdHVyZXMiLCJzZWxlY3RlZEZlYXR1cmUiLCJ2aXNpYmxlIiwiSU5JVElBTF9WSVNfU1RBVEUiLCJtYXBJbmZvIiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsImxheWVycyIsImxheWVyRGF0YSIsImxheWVyVG9CZU1lcmdlZCIsImxheWVyT3JkZXIiLCJmaWx0ZXJzIiwiZmlsdGVyVG9CZU1lcmdlZCIsImRhdGFzZXRzIiwiZWRpdGluZ0RhdGFzZXQiLCJ1bmRlZmluZWQiLCJpbnRlcmFjdGlvbkNvbmZpZyIsImludGVyYWN0aW9uVG9CZU1lcmdlZCIsImxheWVyQmxlbmRpbmciLCJob3ZlckluZm8iLCJjbGlja2VkIiwibW91c2VQb3MiLCJzcGxpdE1hcHMiLCJzcGxpdE1hcHNUb0JlTWVyZ2VkIiwibGF5ZXJDbGFzc2VzIiwiTGF5ZXJDbGFzc2VzIiwiYW5pbWF0aW9uQ29uZmlnIiwiZWRpdG9yIiwiZmlsZUxvYWRpbmciLCJmaWxlTG9hZGluZ1Byb2dyZXNzIiwibG9hZGVycyIsImxvYWRPcHRpb25zIiwibWVyZ2VycyIsIlZJU19TVEFURV9NRVJHRVJTIiwic2NoZW1hIiwiS2VwbGVyR0xTY2hlbWEiLCJ1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEiLCJzdGF0ZSIsImxheWVyIiwiaWR4IiwibWFwIiwibHlyIiwiaSIsImQiLCJ1cGRhdGVTdGF0ZU9uTGF5ZXJWaXNpYmlsaXR5Q2hhbmdlIiwibmV3U3RhdGUiLCJsZW5ndGgiLCJjb25maWciLCJpc1Zpc2libGUiLCJhbmltYXRpb24iLCJlbmFibGVkIiwidXBkYXRlQW5pbWF0aW9uRG9tYWluIiwibGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyIiwiYWN0aW9uIiwib2xkTGF5ZXIiLCJmaW5kSW5kZXgiLCJsIiwiaWQiLCJwcm9wcyIsIk9iamVjdCIsImtleXMiLCJuZXdDb25maWciLCJkYXRhSWQiLCJyZXN0Q29uZmlnIiwic3RhdGVXaXRoRGF0YUlkIiwibGF5ZXJEYXRhSWRDaGFuZ2VVcGRhdGVyIiwibmV4dExheWVyIiwiZmluZCIsIm5ld0xheWVyIiwidXBkYXRlTGF5ZXJDb25maWciLCJzaG91bGRDYWxjdWxhdGVMYXllckRhdGEiLCJvbGRMYXllckRhdGEiLCJ1cGRhdGVMYXllckRhdGFSZXN1bHQiLCJhZGRPclJlbW92ZVRleHRMYWJlbHMiLCJuZXdGaWVsZHMiLCJ0ZXh0TGFiZWwiLCJuZXdUZXh0TGFiZWwiLCJzbGljZSIsImN1cnJlbnRGaWVsZHMiLCJ0bCIsImZpZWxkIiwibmFtZSIsImZpbHRlciIsImFkZEZpZWxkcyIsImYiLCJpbmNsdWRlcyIsImRlbGV0ZUZpZWxkcyIsImZkIiwiZGVmYXVsdExhYmVsIiwiREVGQVVMVF9TRUNPTkRBUllfVEVYVF9MQUJFTCIsIkRFRkFVTFRfVEVYVF9MQUJFTCIsImFmIiwidXBkYXRlVGV4dExhYmVsUHJvcEFuZFZhbHVlIiwicHJvcCIsInZhbHVlIiwiaGFzT3duUHJvcGVydHkiLCJzcGxpY2UiLCJsYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXIiLCJ2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YSIsImRhdGFzZXQiLCJsb2FkZWRMYXllciIsImFsbG93RW1wdHlDb2x1bW4iLCJpc1ZhbGlkVG9TYXZlIiwidmFsaWRhdGVkIiwidHlwZSIsImlzQ29uZmlnQWN0aXZlIiwidXBkYXRlTGF5ZXJEb21haW4iLCJsYXllclR5cGVDaGFuZ2VVcGRhdGVyIiwibmV3VHlwZSIsIm9sZElkIiwiQ29uc29sZSIsImVycm9yIiwiYXNzaWduQ29uZmlnVG9MYXllciIsInZpc0NvbmZpZ1NldHRpbmdzIiwic2V0dGluZ3MiLCJvbGRMYXllck1hcCIsIm90aGVyTGF5ZXJzIiwibGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlciIsImNoYW5uZWwiLCJ1cGRhdGVMYXllclZpc3VhbENoYW5uZWwiLCJsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJuZXdWaXNDb25maWciLCJ2aXNDb25maWciLCJzZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlciIsInNldEZpbHRlclVwZGF0ZXIiLCJzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyIiwiYW5pbWF0aW9uV2luZG93IiwidmFsdWVJbmRleCIsIm9sZEZpbHRlciIsIm5ld0ZpbHRlciIsImRhdGFzZXRJZHMiLCJGSUxURVJfVVBEQVRFUl9QUk9QUyIsImRhdGFzZXRJZCIsIm1lcmdlRG9tYWluIiwidXBkYXRlZEZpbHRlciIsIm5ld0RhdGFzZXQiLCJncHUiLCJsYXllcklkIiwibGF5ZXJJZERpZmZlcmVuY2UiLCJsYXllckRhdGFJZHMiLCJsaWQiLCJuZXdEYXRhSWRzIiwiZW5sYXJnZWRGaWx0ZXIiLCJlbmxhcmdlZCIsImRhdGFzZXRJZHNUb0ZpbHRlciIsIkxJTUlURURfRklMVEVSX0VGRkVDVF9QUk9QUyIsImZpbHRlcmVkRGF0YXNldHMiLCJ1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEiLCJzZXRGaWx0ZXJQbG90VXBkYXRlciIsIm5ld1Byb3AiLCJwbG90VHlwZSIsImFkZEZpbHRlclVwZGF0ZXIiLCJsYXllckNvbG9yVUlDaGFuZ2VVcGRhdGVyIiwib2xkVml4Q29uZmlnIiwidXBkYXRlTGF5ZXJDb2xvclVJIiwidG9nZ2xlRmlsdGVyQW5pbWF0aW9uVXBkYXRlciIsInRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlciIsInRvZ2dsZUxheWVyQW5pbWF0aW9uQ29udHJvbFVwZGF0ZXIiLCJoaWRlQ29udHJvbCIsInVwZGF0ZUZpbHRlckFuaW1hdGlvblNwZWVkVXBkYXRlciIsInNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIiLCJ1cGRhdGVMYXllckFuaW1hdGlvblNwZWVkVXBkYXRlciIsImVubGFyZ2VGaWx0ZXJVcGRhdGVyIiwidG9nZ2xlRmlsdGVyRmVhdHVyZVVwZGF0ZXIiLCJhc3NpZ24iLCJyZW1vdmVGaWx0ZXJVcGRhdGVyIiwibmV3RmlsdGVycyIsIm5ld0VkaXRvciIsImFkZExheWVyVXBkYXRlciIsIm5ld0xheWVyRGF0YSIsIndhcm4iLCJyZXN1bHQiLCJkZWZhdWx0RGF0YXNldCIsIkxheWVyIiwicmVtb3ZlTGF5ZXJVcGRhdGVyIiwibGF5ZXJUb1JlbW92ZSIsIm5ld01hcHMiLCJwaWQiLCJpc0xheWVySG92ZXJlZCIsImR1cGxpY2F0ZUxheWVyVXBkYXRlciIsIm9yaWdpbmFsIiwib3JpZ2luYWxMYXllck9yZGVySWR4IiwibmV3TGFiZWwiLCJsYWJlbCIsInBvc3RmaXgiLCJMQVlFUl9JRF9MRU5HVEgiLCJuZXh0U3RhdGUiLCJuZXdMYXllck9yZGVySWR4IiwibmV3TGF5ZXJPcmRlciIsInJlb3JkZXJMYXllclVwZGF0ZXIiLCJvcmRlciIsInJlbW92ZURhdGFzZXRVcGRhdGVyIiwiZGF0YXNldEtleSIsIm5ld0RhdGFzZXRzIiwiaW5kZXhlcyIsInJlZHVjZSIsImxpc3RPZkluZGV4ZXMiLCJpbmRleCIsInB1c2giLCJjdXJyZW50U3RhdGUiLCJpbmRleENvdW50ZXIiLCJjdXJyZW50SW5kZXgiLCJ0b29sdGlwIiwiZmllbGRzVG9TaG93IiwiZmllbGRzIiwidXBkYXRlTGF5ZXJCbGVuZGluZ1VwZGF0ZXIiLCJzaG93RGF0YXNldFRhYmxlVXBkYXRlciIsInJlc2V0TWFwQ29uZmlnVXBkYXRlciIsImluaXRpYWxTdGF0ZSIsInJlY2VpdmVNYXBDb25maWdVcGRhdGVyIiwicGF5bG9hZCIsIm9wdGlvbnMiLCJ2aXNTdGF0ZSIsImtlZXBFeGlzdGluZ0NvbmZpZyIsIm1lcmdlZFN0YXRlIiwibWVyZ2VyIiwibWVyZ2UiLCJsYXllckhvdmVyVXBkYXRlciIsImluZm8iLCJpbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJjb250cmFkaWN0IiwiZm9yRWFjaCIsImsiLCJsYXllckNsaWNrVXBkYXRlciIsImNvb3JkaW5hdGUiLCJwaW5uZWQiLCJwaWNrZWQiLCJtYXBDbGlja1VwZGF0ZXIiLCJtb3VzZU1vdmVVcGRhdGVyIiwiZXZ0IiwidmFsdWVzIiwic29tZSIsIm1vdXNlUG9zaXRpb24iLCJwb2ludCIsImxuZ0xhdCIsInRvZ2dsZVNwbGl0TWFwVXBkYXRlciIsImNsb3NlU3BlY2lmaWNNYXBBdEluZGV4IiwidG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyIiwibWFwSW5kZXgiLCJzbSIsInVwZGF0ZVZpc0RhdGFVcGRhdGVyIiwibmV3RGF0YUVudHJpZXMiLCJhY2N1IiwicmVzdCIsImRhdGFFbXB0eSIsInByZXZpb3VzU3RhdGUiLCJ0b01lcmdlUHJvcCIsInRvTWVyZ2UiLCJuZXdMYXllcnMiLCJhdXRvQ3JlYXRlTGF5ZXJzIiwiYWRkRGVmYXVsdExheWVycyIsInRvb2x0aXBGaWVsZHMiLCJBcnJheSIsImlzQXJyYXkiLCJhZGREZWZhdWx0VG9vbHRpcHMiLCJ1cGRhdGVkU3RhdGUiLCJyZW5hbWVEYXRhc2V0VXBkYXRlciIsImV4aXN0aW5nIiwiaW5kZXhUb1JldHJpZXZlIiwibWFwTGF5ZXJzIiwibG9hZEZpbGVzVXBkYXRlciIsImZpbGVzIiwib25GaW5pc2giLCJsb2FkRmlsZXNTdWNjZXNzIiwiZnJvbSIsImluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzIiwiZmlsZUNhY2hlIiwiZmlsZXNUb0xvYWQiLCJsb2FkTmV4dEZpbGVVcGRhdGVyIiwibG9hZEZpbGVTdGVwU3VjY2Vzc1VwZGF0ZXIiLCJmaWxlTmFtZSIsInN0YXRlV2l0aFByb2dyZXNzIiwidXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIiLCJwcm9ncmVzcyIsInBlcmNlbnQiLCJtZXNzYWdlIiwic3RhdGVXaXRoQ2FjaGUiLCJsb2FkTmV4dEZpbGUiLCJmaWxlIiwicmVtYWluaW5nRmlsZXNUb0xvYWQiLCJtYWtlTG9hZEZpbGVUYXNrIiwiYmltYXAiLCJnZW4iLCJjb250ZW50IiwiZXJyIiwicHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlciIsInBhcnNlUHJvZ3Jlc3MiLCJwcmV2UHJvZ3Jlc3MiLCJuZXh0RmlsZUJhdGNoVXBkYXRlciIsImFjY3VtdWxhdGVkIiwibmV4dCIsImRvbmUiLCJsb2FkRmlsZXNFcnJVcGRhdGVyIiwiYXBwbHlDUFVGaWx0ZXJVcGRhdGVyIiwiZGF0YUlkcyIsInNldE1hcEluZm9VcGRhdGVyIiwiZW1wdHkiLCJkZWZhdWx0TGF5ZXJzIiwiZm91bmRMYXllcnMiLCJjb25jYXQiLCJfIiwibWV0YWRhdGEiLCJpc0R5bmFtaWNTcGF0aWFsSW5kZXgiLCJtZXJnZWQiLCJmaXhlZERvbWFpbiIsImFuaW1hdGFibGVMYXllcnMiLCJhbmltYXRpb25Eb21haW4iLCJtZXJnZWREb21haW4iLCJNYXRoIiwibWluIiwibWF4IiwiTnVtYmVyIiwiSW5maW5pdHkiLCJzZXRFZGl0b3JNb2RlVXBkYXRlciIsInNldEZlYXR1cmVzVXBkYXRlciIsImxhc3RGZWF0dXJlIiwicHJvcGVydGllcyIsImlzQ2xvc2VkIiwiRURJVCIsImZlYXR1cmUiLCJmaWx0ZXJJZCIsImZlYXR1cmVWYWx1ZSIsImZpbHRlcklkeCIsImZpbCIsInNldFNlbGVjdGVkRmVhdHVyZVVwZGF0ZXIiLCJkZWxldGVGZWF0dXJlVXBkYXRlciIsInNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXIiLCJuZXdMYXllcklkIiwibm9uZUZpbHRlckZlYXR1cmUiLCJpc0xheWVySW5jbHVkZWQiLCJzb3J0VGFibGVDb2x1bW5VcGRhdGVyIiwiY29sdW1uIiwic29ydE1vZGUiLCJjdXJyZW50TW9kZSIsIlNPUlRfT1JERVIiLCJtIiwiQVNDRU5ESU5HIiwic29ydGVkIiwicGluVGFibGVDb2x1bW5VcGRhdGVyIiwicGlubmVkQ29sdW1ucyIsImNvIiwiY29weVRhYmxlQ29sdW1uVXBkYXRlciIsImZpZWxkSWR4IiwidGV4dCIsImRhdGFDb250YWluZXIiLCJyb3ciLCJ2YWx1ZUF0Iiwiam9pbiIsInRvZ2dsZUVkaXRvclZpc2liaWxpdHlVcGRhdGVyIiwic2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ1VwZGF0ZXIiLCJGSUxURVJfVFlQRVMiLCJ0aW1lUmFuZ2UiLCJ1cGRhdGVzIiwiY2hlY2tUaW1lQ29uZmlnQXJncyIsImFsbG93ZWQiLCJzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9CQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFFQTs7QUFRQTs7QUFDQTs7QUFnQkE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBRUE7O0FBUUE7O0FBTUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0E7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQTtBQUNBOztBQUNBLElBQU1BLGdCQUFnQixHQUFHLElBQXpCO0FBQ0E7O0FBRUE7O0FBQ08sSUFBTUMsd0JBQXdCLEdBQUc7QUFDdENDLEVBQUFBLE1BQU0sRUFBRSxJQUQ4QjtBQUV0Q0MsRUFBQUEsV0FBVyxFQUFFLElBRnlCO0FBR3RDQyxFQUFBQSxLQUFLLEVBQUUsQ0FIK0I7QUFJdENDLEVBQUFBLFdBQVcsRUFBRSxLQUp5QjtBQUt0Q0MsRUFBQUEsVUFBVSxFQUFFLElBTDBCO0FBTXRDQyxFQUFBQSxRQUFRLEVBQUUsSUFONEI7QUFPdENDLEVBQUFBLGlCQUFpQixFQUFFO0FBUG1CLENBQWpDO0FBVVA7OztBQUNPLElBQU1DLGNBQWMsR0FBRztBQUM1QkMsRUFBQUEsSUFBSSxFQUFFQyw4QkFBYUMsWUFEUztBQUU1QkMsRUFBQUEsUUFBUSxFQUFFLEVBRmtCO0FBRzVCQyxFQUFBQSxlQUFlLEVBQUUsSUFIVztBQUk1QkMsRUFBQUEsT0FBTyxFQUFFO0FBSm1CLENBQXZCO0FBT1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLElBQU1DLGlCQUFpQixHQUFHO0FBQy9CO0FBQ0FDLEVBQUFBLE9BQU8sRUFBRTtBQUNQQyxJQUFBQSxLQUFLLEVBQUUsRUFEQTtBQUVQQyxJQUFBQSxXQUFXLEVBQUU7QUFGTixHQUZzQjtBQU0vQjtBQUNBQyxFQUFBQSxNQUFNLEVBQUUsRUFQdUI7QUFRL0JDLEVBQUFBLFNBQVMsRUFBRSxFQVJvQjtBQVMvQkMsRUFBQUEsZUFBZSxFQUFFLEVBVGM7QUFVL0JDLEVBQUFBLFVBQVUsRUFBRSxFQVZtQjtBQVkvQjtBQUNBQyxFQUFBQSxPQUFPLEVBQUUsRUFic0I7QUFjL0JDLEVBQUFBLGdCQUFnQixFQUFFLEVBZGE7QUFnQi9CO0FBQ0FDLEVBQUFBLFFBQVEsRUFBRSxFQWpCcUI7QUFrQi9CQyxFQUFBQSxjQUFjLEVBQUVDLFNBbEJlO0FBb0IvQkMsRUFBQUEsaUJBQWlCLEVBQUUsOENBcEJZO0FBcUIvQkMsRUFBQUEscUJBQXFCLEVBQUVGLFNBckJRO0FBdUIvQkcsRUFBQUEsYUFBYSxFQUFFLFFBdkJnQjtBQXdCL0JDLEVBQUFBLFNBQVMsRUFBRUosU0F4Qm9CO0FBeUIvQkssRUFBQUEsT0FBTyxFQUFFTCxTQXpCc0I7QUEwQi9CTSxFQUFBQSxRQUFRLEVBQUUsRUExQnFCO0FBNEIvQjtBQUNBQyxFQUFBQSxTQUFTLEVBQUUsQ0FDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBTLEdBN0JvQjtBQXNDL0JDLEVBQUFBLG1CQUFtQixFQUFFLEVBdENVO0FBd0MvQjtBQUNBQyxFQUFBQSxZQUFZLEVBQUVDLG9CQXpDaUI7QUEyQy9CO0FBQ0E7QUFDQUMsRUFBQUEsZUFBZSxFQUFFdEMsd0JBN0NjO0FBK0MvQnVDLEVBQUFBLE1BQU0sRUFBRS9CLGNBL0N1QjtBQWlEL0JnQyxFQUFBQSxXQUFXLEVBQUUsS0FqRGtCO0FBa0QvQkMsRUFBQUEsbUJBQW1CLEVBQUUsRUFsRFU7QUFvRC9CQyxFQUFBQSxPQUFPLEVBQUUsRUFwRHNCO0FBcUQvQkMsRUFBQUEsV0FBVyxFQUFFLEVBckRrQjtBQXVEL0I7QUFDQUMsRUFBQUEsT0FBTyxFQUFFQyxpQ0F4RHNCO0FBMEQvQjtBQUNBQyxFQUFBQSxNQUFNLEVBQUVDO0FBM0R1QixDQUExQjtBQThEUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBQ08sU0FBU0MsMkJBQVQsQ0FBcUNDLEtBQXJDLFFBQXFFO0FBQUEsTUFBeEI3QixTQUF3QixRQUF4QkEsU0FBd0I7QUFBQSxNQUFiOEIsS0FBYSxRQUFiQSxLQUFhO0FBQUEsTUFBTkMsR0FBTSxRQUFOQSxHQUFNO0FBQzFFLHlDQUNLRixLQURMO0FBRUU5QixJQUFBQSxNQUFNLEVBQUU4QixLQUFLLENBQUM5QixNQUFOLENBQWFpQyxHQUFiLENBQWlCLFVBQUNDLEdBQUQsRUFBTUMsQ0FBTjtBQUFBLGFBQWFBLENBQUMsS0FBS0gsR0FBTixHQUFZRCxLQUFaLEdBQW9CRyxHQUFqQztBQUFBLEtBQWpCLENBRlY7QUFHRWpDLElBQUFBLFNBQVMsRUFBRUEsU0FBUyxHQUNoQjZCLEtBQUssQ0FBQzdCLFNBQU4sQ0FBZ0JnQyxHQUFoQixDQUFvQixVQUFDRyxDQUFELEVBQUlELENBQUo7QUFBQSxhQUFXQSxDQUFDLEtBQUtILEdBQU4sR0FBWS9CLFNBQVosR0FBd0JtQyxDQUFuQztBQUFBLEtBQXBCLENBRGdCLEdBRWhCTixLQUFLLENBQUM3QjtBQUxaO0FBT0Q7O0FBRU0sU0FBU29DLGtDQUFULENBQTRDUCxLQUE1QyxFQUFtREMsS0FBbkQsRUFBMEQ7QUFDL0QsTUFBSU8sUUFBUSxHQUFHUixLQUFmOztBQUNBLE1BQUlBLEtBQUssQ0FBQ2YsU0FBTixDQUFnQndCLE1BQXBCLEVBQTRCO0FBQzFCRCxJQUFBQSxRQUFRLG1DQUNIUixLQURHO0FBRU5mLE1BQUFBLFNBQVMsRUFBRWdCLEtBQUssQ0FBQ1MsTUFBTixDQUFhQyxTQUFiLEdBQ1AsMkNBQXVCWCxLQUFLLENBQUNmLFNBQTdCLEVBQXdDZ0IsS0FBeEMsQ0FETyxHQUVQLDZDQUF5QkQsS0FBSyxDQUFDZixTQUEvQixFQUEwQ2dCLEtBQTFDO0FBSkUsTUFBUjtBQU1EOztBQUVELE1BQUlBLEtBQUssQ0FBQ1MsTUFBTixDQUFhRSxTQUFiLENBQXVCQyxPQUEzQixFQUFvQztBQUNsQ0wsSUFBQUEsUUFBUSxHQUFHTSxxQkFBcUIsQ0FBQ2QsS0FBRCxDQUFoQztBQUNEOztBQUVELFNBQU9RLFFBQVA7QUFDRDtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ08sU0FBU08sd0JBQVQsQ0FBa0NmLEtBQWxDLEVBQXlDZ0IsTUFBekMsRUFBaUQ7QUFBQSxNQUMvQ0MsUUFEK0MsR0FDbkNELE1BRG1DLENBQy9DQyxRQUQrQztBQUV0RCxNQUFNZixHQUFHLEdBQUdGLEtBQUssQ0FBQzlCLE1BQU4sQ0FBYWdELFNBQWIsQ0FBdUIsVUFBQUMsQ0FBQztBQUFBLFdBQUlBLENBQUMsQ0FBQ0MsRUFBRixLQUFTSCxRQUFRLENBQUNHLEVBQXRCO0FBQUEsR0FBeEIsQ0FBWjtBQUNBLE1BQU1DLEtBQUssR0FBR0MsTUFBTSxDQUFDQyxJQUFQLENBQVlQLE1BQU0sQ0FBQ1EsU0FBbkIsQ0FBZDs7QUFDQSxNQUFJLE9BQU9SLE1BQU0sQ0FBQ1EsU0FBUCxDQUFpQkMsTUFBeEIsS0FBbUMsUUFBdkMsRUFBaUQ7QUFBQSw0QkFDZlQsTUFBTSxDQUFDUSxTQURRO0FBQUEsUUFDeENDLE1BRHdDLHFCQUN4Q0EsTUFEd0M7QUFBQSxRQUM3QkMsVUFENkI7QUFFL0MsUUFBTUMsZUFBZSxHQUFHQyx3QkFBd0IsQ0FBQzVCLEtBQUQsRUFBUTtBQUN0RGlCLE1BQUFBLFFBQVEsRUFBUkEsUUFEc0Q7QUFFdERPLE1BQUFBLFNBQVMsRUFBRTtBQUFDQyxRQUFBQSxNQUFNLEVBQU5BO0FBQUQ7QUFGMkMsS0FBUixDQUFoRDtBQUlBLFFBQU1JLFNBQVMsR0FBR0YsZUFBZSxDQUFDekQsTUFBaEIsQ0FBdUI0RCxJQUF2QixDQUE0QixVQUFBWCxDQUFDO0FBQUEsYUFBSUEsQ0FBQyxDQUFDQyxFQUFGLEtBQVNILFFBQVEsQ0FBQ0csRUFBdEI7QUFBQSxLQUE3QixDQUFsQjtBQUNBLFdBQU9TLFNBQVMsSUFBSVAsTUFBTSxDQUFDQyxJQUFQLENBQVlHLFVBQVosRUFBd0JqQixNQUFyQyxHQUNITSx3QkFBd0IsQ0FBQ1ksZUFBRCxFQUFrQjtBQUFDVixNQUFBQSxRQUFRLEVBQUVZLFNBQVg7QUFBc0JMLE1BQUFBLFNBQVMsRUFBRUU7QUFBakMsS0FBbEIsQ0FEckIsR0FFSEMsZUFGSjtBQUdEOztBQUVELE1BQUlJLFFBQVEsR0FBR2QsUUFBUSxDQUFDZSxpQkFBVCxDQUEyQmhCLE1BQU0sQ0FBQ1EsU0FBbEMsQ0FBZjtBQUVBLE1BQUlyRCxTQUFKLENBbEJzRCxDQW9CdEQ7O0FBQ0EsTUFBSTRELFFBQVEsQ0FBQ0Usd0JBQVQsQ0FBa0NaLEtBQWxDLENBQUosRUFBOEM7QUFDNUMsUUFBTWEsWUFBWSxHQUFHbEMsS0FBSyxDQUFDN0IsU0FBTixDQUFnQitCLEdBQWhCLENBQXJCO0FBQ0EsUUFBTWlDLHFCQUFxQixHQUFHLG9DQUFtQkosUUFBbkIsRUFBNkIvQixLQUE3QixFQUFvQ2tDLFlBQXBDLENBQTlCO0FBRUEvRCxJQUFBQSxTQUFTLEdBQUdnRSxxQkFBcUIsQ0FBQ2hFLFNBQWxDO0FBQ0E0RCxJQUFBQSxRQUFRLEdBQUdJLHFCQUFxQixDQUFDbEMsS0FBakM7QUFDRDs7QUFFRCxNQUFJTyxRQUFRLEdBQUdSLEtBQWY7O0FBQ0EsTUFBSSxlQUFlZ0IsTUFBTSxDQUFDUSxTQUExQixFQUFxQztBQUNuQ2hCLElBQUFBLFFBQVEsR0FBR0Qsa0NBQWtDLENBQUNQLEtBQUQsRUFBUStCLFFBQVIsQ0FBN0M7QUFDRDs7QUFFRCxTQUFPaEMsMkJBQTJCLENBQUNTLFFBQUQsRUFBVztBQUMzQ1AsSUFBQUEsS0FBSyxFQUFFOEIsUUFEb0M7QUFFM0M1RCxJQUFBQSxTQUFTLEVBQVRBLFNBRjJDO0FBRzNDK0IsSUFBQUEsR0FBRyxFQUFIQTtBQUgyQyxHQUFYLENBQWxDO0FBS0Q7O0FBRUQsU0FBU2tDLHFCQUFULENBQStCQyxTQUEvQixFQUEwQ0MsU0FBMUMsRUFBcUQ7QUFDbkQsTUFBSUMsWUFBWSxHQUFHRCxTQUFTLENBQUNFLEtBQVYsRUFBbkI7QUFFQSxNQUFNQyxhQUFhLEdBQUdILFNBQVMsQ0FBQ25DLEdBQVYsQ0FBYyxVQUFBdUMsRUFBRTtBQUFBLFdBQUlBLEVBQUUsQ0FBQ0MsS0FBSCxJQUFZRCxFQUFFLENBQUNDLEtBQUgsQ0FBU0MsSUFBekI7QUFBQSxHQUFoQixFQUErQ0MsTUFBL0MsQ0FBc0QsVUFBQXZDLENBQUM7QUFBQSxXQUFJQSxDQUFKO0FBQUEsR0FBdkQsQ0FBdEI7QUFFQSxNQUFNd0MsU0FBUyxHQUFHVCxTQUFTLENBQUNRLE1BQVYsQ0FBaUIsVUFBQUUsQ0FBQztBQUFBLFdBQUksQ0FBQ04sYUFBYSxDQUFDTyxRQUFkLENBQXVCRCxDQUFDLENBQUNILElBQXpCLENBQUw7QUFBQSxHQUFsQixDQUFsQjtBQUNBLE1BQU1LLFlBQVksR0FBR1IsYUFBYSxDQUFDSSxNQUFkLENBQXFCLFVBQUFFLENBQUM7QUFBQSxXQUFJLENBQUNWLFNBQVMsQ0FBQ1AsSUFBVixDQUFlLFVBQUFvQixFQUFFO0FBQUEsYUFBSUEsRUFBRSxDQUFDTixJQUFILEtBQVlHLENBQWhCO0FBQUEsS0FBakIsQ0FBTDtBQUFBLEdBQXRCLENBQXJCLENBTm1ELENBUW5EOztBQUNBUixFQUFBQSxZQUFZLEdBQUdBLFlBQVksQ0FBQ00sTUFBYixDQUFvQixVQUFBSCxFQUFFO0FBQUEsV0FBSUEsRUFBRSxDQUFDQyxLQUFILElBQVksQ0FBQ00sWUFBWSxDQUFDRCxRQUFiLENBQXNCTixFQUFFLENBQUNDLEtBQUgsQ0FBU0MsSUFBL0IsQ0FBakI7QUFBQSxHQUF0QixDQUFmLENBVG1ELENBV25EOztBQUNBTCxFQUFBQSxZQUFZLEdBQUdBLFlBQVksQ0FBQ00sTUFBYixDQUFvQixVQUFBSCxFQUFFO0FBQUEsV0FBSUEsRUFBRSxDQUFDQyxLQUFQO0FBQUEsR0FBdEIsQ0FBZjtBQUNBLE1BQU1RLFlBQVksR0FBR1osWUFBWSxDQUFDOUIsTUFBYixHQUFzQjJDLDBDQUF0QixHQUFxREMsZ0NBQTFFO0FBQ0FkLEVBQUFBLFlBQVksaURBQU9BLFlBQVAsdUNBQXdCTyxTQUFTLENBQUMzQyxHQUFWLENBQWMsVUFBQW1ELEVBQUU7QUFBQSwyQ0FBU0gsWUFBVDtBQUF1QlIsTUFBQUEsS0FBSyxFQUFFVztBQUE5QjtBQUFBLEdBQWhCLENBQXhCLEVBQVosQ0FkbUQsQ0FnQm5EOztBQUNBLE1BQUlmLFlBQVksQ0FBQzlCLE1BQWIsR0FBc0IsQ0FBMUIsRUFBNkI7QUFDM0I4QixJQUFBQSxZQUFZLEdBQUcsQ0FBQ0EsWUFBWSxDQUFDLENBQUQsQ0FBYixFQUFrQkEsWUFBWSxDQUFDLENBQUQsQ0FBOUIsQ0FBZjtBQUNELEdBbkJrRCxDQXFCbkQ7OztBQUNBQSxFQUFBQSxZQUFZLEdBQUcsQ0FBQ0EsWUFBWSxDQUFDOUIsTUFBZCxHQUF1QixDQUFDNEMsZ0NBQUQsQ0FBdkIsR0FBOENkLFlBQTdEO0FBRUEsU0FBT0EsWUFBUDtBQUNEOztBQUVELFNBQVNnQiwyQkFBVCxDQUFxQ3JELEdBQXJDLEVBQTBDc0QsSUFBMUMsRUFBZ0RDLEtBQWhELEVBQXVEbkIsU0FBdkQsRUFBa0U7QUFDaEUsTUFBSSxDQUFDQSxTQUFTLENBQUNwQyxHQUFELENBQVQsQ0FBZXdELGNBQWYsQ0FBOEJGLElBQTlCLENBQUwsRUFBMEM7QUFDeEMsV0FBT2xCLFNBQVA7QUFDRDs7QUFFRCxNQUFJQyxZQUFZLEdBQUdELFNBQVMsQ0FBQ0UsS0FBVixFQUFuQjs7QUFFQSxNQUFJZ0IsSUFBSSxLQUFLQyxLQUFLLElBQUluQixTQUFTLENBQUM3QixNQUFWLEtBQXFCLENBQW5DLENBQVIsRUFBK0M7QUFDN0M4QixJQUFBQSxZQUFZLEdBQUdELFNBQVMsQ0FBQ25DLEdBQVYsQ0FBYyxVQUFDdUMsRUFBRCxFQUFLckMsQ0FBTDtBQUFBLGFBQVlBLENBQUMsS0FBS0gsR0FBTixtQ0FBZ0J3QyxFQUFoQiw0Q0FBcUJjLElBQXJCLEVBQTRCQyxLQUE1QixLQUFxQ2YsRUFBakQ7QUFBQSxLQUFkLENBQWY7QUFDRCxHQUZELE1BRU8sSUFBSWMsSUFBSSxLQUFLLE9BQVQsSUFBb0JDLEtBQUssS0FBSyxJQUE5QixJQUFzQ25CLFNBQVMsQ0FBQzdCLE1BQVYsR0FBbUIsQ0FBN0QsRUFBZ0U7QUFDckU7QUFDQThCLElBQUFBLFlBQVksQ0FBQ29CLE1BQWIsQ0FBb0J6RCxHQUFwQixFQUF5QixDQUF6QjtBQUNEOztBQUVELFNBQU9xQyxZQUFQO0FBQ0Q7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLFNBQVNxQiwyQkFBVCxDQUFxQzVELEtBQXJDLEVBQTRDZ0IsTUFBNUMsRUFBb0Q7QUFBQSxNQUNsREMsUUFEa0QsR0FDcEJELE1BRG9CLENBQ2xEQyxRQURrRDtBQUFBLE1BQ3hDZixHQUR3QyxHQUNwQmMsTUFEb0IsQ0FDeENkLEdBRHdDO0FBQUEsTUFDbkNzRCxJQURtQyxHQUNwQnhDLE1BRG9CLENBQ25Dd0MsSUFEbUM7QUFBQSxNQUM3QkMsS0FENkIsR0FDcEJ6QyxNQURvQixDQUM3QnlDLEtBRDZCO0FBQUEsTUFFbERuQixTQUZrRCxHQUVyQ3JCLFFBQVEsQ0FBQ1AsTUFGNEIsQ0FFbEQ0QixTQUZrRDtBQUl6RCxNQUFJQyxZQUFZLEdBQUdELFNBQVMsQ0FBQ0UsS0FBVixFQUFuQjs7QUFDQSxNQUFJLENBQUNGLFNBQVMsQ0FBQ3BDLEdBQUQsQ0FBVixJQUFtQkEsR0FBRyxLQUFLb0MsU0FBUyxDQUFDN0IsTUFBekMsRUFBaUQ7QUFDL0M7QUFDQThCLElBQUFBLFlBQVksaURBQU9ELFNBQVAsSUFBa0JwQyxHQUFHLEtBQUssQ0FBUixHQUFZbUQsZ0NBQVosR0FBaUNELDBDQUFuRCxFQUFaO0FBQ0Q7O0FBRUQsTUFBSWxELEdBQUcsS0FBSyxLQUFSLElBQWlCc0QsSUFBSSxLQUFLLFFBQTlCLEVBQXdDO0FBQ3RDakIsSUFBQUEsWUFBWSxHQUFHSCxxQkFBcUIsQ0FBQ3FCLEtBQUQsRUFBUW5CLFNBQVIsQ0FBcEM7QUFDRCxHQUZELE1BRU87QUFDTEMsSUFBQUEsWUFBWSxHQUFHZ0IsMkJBQTJCLENBQUNyRCxHQUFELEVBQU1zRCxJQUFOLEVBQVlDLEtBQVosRUFBbUJsQixZQUFuQixDQUExQztBQUNELEdBZHdELENBZXpEOzs7QUFDQSxTQUFPeEIsd0JBQXdCLENBQUNmLEtBQUQsRUFBUTtBQUNyQ2lCLElBQUFBLFFBQVEsRUFBUkEsUUFEcUM7QUFFckNPLElBQUFBLFNBQVMsRUFBRTtBQUFDYyxNQUFBQSxTQUFTLEVBQUVDO0FBQVo7QUFGMEIsR0FBUixDQUEvQjtBQUlEOztBQUVELFNBQVNzQiw2QkFBVCxDQUF1Q0MsT0FBdkMsRUFBZ0QzRSxZQUFoRCxFQUE4RGMsS0FBOUQsRUFBcUU7QUFDbkUsTUFBTThELFdBQVcsR0FBRyxvQ0FBZTlELEtBQWYsQ0FBcEI7QUFDQSxTQUFPLDJDQUFzQjZELE9BQXRCLEVBQStCQyxXQUEvQixFQUE0QzVFLFlBQTVDLEVBQTBEO0FBQy9ENkUsSUFBQUEsZ0JBQWdCLEVBQUU7QUFENkMsR0FBMUQsQ0FBUDtBQUdEO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxTQUFTcEMsd0JBQVQsQ0FBa0M1QixLQUFsQyxFQUF5Q2dCLE1BQXpDLEVBQWlEO0FBQUEsTUFDL0NDLFFBRCtDLEdBQ3hCRCxNQUR3QixDQUMvQ0MsUUFEK0M7QUFBQSxNQUNyQ08sU0FEcUMsR0FDeEJSLE1BRHdCLENBQ3JDUSxTQURxQztBQUFBLE1BRS9DQyxNQUYrQyxHQUVyQ0QsU0FGcUMsQ0FFL0NDLE1BRitDOztBQUl0RCxNQUFJLENBQUNSLFFBQUQsSUFBYSxDQUFDakIsS0FBSyxDQUFDeEIsUUFBTixDQUFlaUQsTUFBZixDQUFsQixFQUEwQztBQUN4QyxXQUFPekIsS0FBUDtBQUNEOztBQUNELE1BQU1FLEdBQUcsR0FBR0YsS0FBSyxDQUFDOUIsTUFBTixDQUFhZ0QsU0FBYixDQUF1QixVQUFBQyxDQUFDO0FBQUEsV0FBSUEsQ0FBQyxDQUFDQyxFQUFGLEtBQVNILFFBQVEsQ0FBQ0csRUFBdEI7QUFBQSxHQUF4QixDQUFaO0FBRUEsTUFBSVcsUUFBUSxHQUFHZCxRQUFRLENBQUNlLGlCQUFULENBQTJCO0FBQUNQLElBQUFBLE1BQU0sRUFBTkE7QUFBRCxHQUEzQixDQUFmLENBVHNELENBVXREOztBQUNBLE1BQUlNLFFBQVEsQ0FBQ2tDLGFBQVQsRUFBSixFQUE4QjtBQUM1QixRQUFNQyxTQUFTLEdBQUdMLDZCQUE2QixDQUM3QzdELEtBQUssQ0FBQ3hCLFFBQU4sQ0FBZWlELE1BQWYsQ0FENkMsRUFFN0N6QixLQUFLLENBQUNiLFlBRnVDLEVBRzdDNEMsUUFINkMsQ0FBL0MsQ0FENEIsQ0FNNUI7O0FBQ0EsUUFBSSxDQUFDbUMsU0FBTCxFQUFnQjtBQUNkbkMsTUFBQUEsUUFBUSxHQUFHLElBQUkvQixLQUFLLENBQUNiLFlBQU4sQ0FBbUI4QixRQUFRLENBQUNrRCxJQUE1QixDQUFKLENBQXNDO0FBQUMxQyxRQUFBQSxNQUFNLEVBQU5BLE1BQUQ7QUFBU0wsUUFBQUEsRUFBRSxFQUFFSCxRQUFRLENBQUNHO0FBQXRCLE9BQXRDLENBQVg7QUFDRCxLQUZELE1BRU87QUFDTFcsTUFBQUEsUUFBUSxHQUFHbUMsU0FBWDtBQUNEO0FBQ0Y7O0FBRURuQyxFQUFBQSxRQUFRLEdBQUdBLFFBQVEsQ0FBQ0MsaUJBQVQsQ0FBMkI7QUFDcENyQixJQUFBQSxTQUFTLEVBQUVNLFFBQVEsQ0FBQ1AsTUFBVCxDQUFnQkMsU0FEUztBQUVwQ3lELElBQUFBLGNBQWMsRUFBRTtBQUZvQixHQUEzQixDQUFYO0FBS0FyQyxFQUFBQSxRQUFRLENBQUNzQyxpQkFBVCxDQUEyQnJFLEtBQUssQ0FBQ3hCLFFBQWpDOztBQTlCc0QsNEJBK0IzQixvQ0FBbUJ1RCxRQUFuQixFQUE2Qi9CLEtBQTdCLEVBQW9DdEIsU0FBcEMsQ0EvQjJCO0FBQUEsTUErQi9DUCxTQS9CK0MsdUJBK0IvQ0EsU0EvQitDO0FBQUEsTUErQnBDOEIsS0EvQm9DLHVCQStCcENBLEtBL0JvQzs7QUFpQ3RELFNBQU9GLDJCQUEyQixDQUFDQyxLQUFELEVBQVE7QUFBQzdCLElBQUFBLFNBQVMsRUFBVEEsU0FBRDtBQUFZOEIsSUFBQUEsS0FBSyxFQUFMQSxLQUFaO0FBQW1CQyxJQUFBQSxHQUFHLEVBQUhBO0FBQW5CLEdBQVIsQ0FBbEM7QUFDRDtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ08sU0FBU29FLHNCQUFULENBQWdDdEUsS0FBaEMsRUFBdUNnQixNQUF2QyxFQUErQztBQUFBLE1BQzdDQyxRQUQ2QyxHQUN4QkQsTUFEd0IsQ0FDN0NDLFFBRDZDO0FBQUEsTUFDbkNzRCxPQURtQyxHQUN4QnZELE1BRHdCLENBQ25DdUQsT0FEbUM7O0FBRXBELE1BQUksQ0FBQ3RELFFBQUwsRUFBZTtBQUNiLFdBQU9qQixLQUFQO0FBQ0Q7O0FBQ0QsTUFBTXdFLEtBQUssR0FBR3ZELFFBQVEsQ0FBQ0csRUFBdkI7QUFDQSxNQUFNbEIsR0FBRyxHQUFHRixLQUFLLENBQUM5QixNQUFOLENBQWFnRCxTQUFiLENBQXVCLFVBQUFDLENBQUM7QUFBQSxXQUFJQSxDQUFDLENBQUNDLEVBQUYsS0FBU29ELEtBQWI7QUFBQSxHQUF4QixDQUFaOztBQUVBLE1BQUksQ0FBQ3hFLEtBQUssQ0FBQ2IsWUFBTixDQUFtQm9GLE9BQW5CLENBQUwsRUFBa0M7QUFDaENFLG9CQUFRQyxLQUFSLFdBQWlCSCxPQUFqQjs7QUFDQSxXQUFPdkUsS0FBUDtBQUNELEdBWG1ELENBYXBEO0FBQ0E7QUFDQTs7O0FBQ0EsTUFBTStCLFFBQVEsR0FBRyxJQUFJL0IsS0FBSyxDQUFDYixZQUFOLENBQW1Cb0YsT0FBbkIsQ0FBSixFQUFqQjtBQUVBeEMsRUFBQUEsUUFBUSxDQUFDNEMsbUJBQVQsQ0FBNkIxRCxRQUFRLENBQUNQLE1BQXRDLEVBQThDTyxRQUFRLENBQUMyRCxpQkFBdkQ7QUFFQTdDLEVBQUFBLFFBQVEsQ0FBQ3NDLGlCQUFULENBQTJCckUsS0FBSyxDQUFDeEIsUUFBakM7O0FBcEJvRCw2QkFxQnpCLG9DQUFtQnVELFFBQW5CLEVBQTZCL0IsS0FBN0IsQ0FyQnlCO0FBQUEsTUFxQjdDN0IsU0FyQjZDLHdCQXFCN0NBLFNBckI2QztBQUFBLE1BcUJsQzhCLEtBckJrQyx3QkFxQmxDQSxLQXJCa0M7O0FBc0JwRCxNQUFJTyxRQUFRLEdBQUdULDJCQUEyQixDQUFDQyxLQUFELEVBQVE7QUFBQzdCLElBQUFBLFNBQVMsRUFBVEEsU0FBRDtBQUFZOEIsSUFBQUEsS0FBSyxFQUFMQSxLQUFaO0FBQW1CQyxJQUFBQSxHQUFHLEVBQUhBO0FBQW5CLEdBQVIsQ0FBMUM7O0FBRUEsTUFBSUQsS0FBSyxDQUFDUyxNQUFOLENBQWFFLFNBQWIsQ0FBdUJDLE9BQXZCLElBQWtDSSxRQUFRLENBQUNQLE1BQVQsQ0FBZ0JFLFNBQWhCLENBQTBCQyxPQUFoRSxFQUF5RTtBQUN2RUwsSUFBQUEsUUFBUSxHQUFHTSxxQkFBcUIsQ0FBQ04sUUFBRCxDQUFoQztBQUNELEdBMUJtRCxDQTRCcEQ7OztBQUNBLE1BQUlSLEtBQUssQ0FBQ2YsU0FBTixDQUFnQndCLE1BQXBCLEVBQTRCO0FBQzFCRCxJQUFBQSxRQUFRLG1DQUNIQSxRQURHO0FBRU52QixNQUFBQSxTQUFTLEVBQUV1QixRQUFRLENBQUN2QixTQUFULENBQW1Ca0IsR0FBbkIsQ0FBdUIsVUFBQTBFLFFBQVEsRUFBSTtBQUFBLCtCQUNHQSxRQUFRLENBQUMzRyxNQURaO0FBQUEsWUFDNUI0RyxXQUQ0QixvQkFDcENOLEtBRG9DO0FBQUEsWUFDWk8sV0FEWSxnRUFDcENQLEtBRG9DO0FBRTVDLGVBQU9BLEtBQUssSUFBSUssUUFBUSxDQUFDM0csTUFBbEIsbUNBRUUyRyxRQUZGO0FBR0QzRyxVQUFBQSxNQUFNLGtDQUNENkcsV0FEQyw0Q0FFSDlFLEtBQUssQ0FBQ21CLEVBRkgsRUFFUTBELFdBRlI7QUFITCxhQVFIRCxRQVJKO0FBU0QsT0FYVTtBQUZMLE1BQVI7QUFlRDs7QUFFRCxTQUFPckUsUUFBUDtBQUNEO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLFNBQVN3RSwrQkFBVCxDQUF5Q2hGLEtBQXpDLEVBQWdEZ0IsTUFBaEQsRUFBd0Q7QUFBQSxNQUN0REMsUUFEc0QsR0FDdEJELE1BRHNCLENBQ3REQyxRQURzRDtBQUFBLE1BQzVDTyxTQUQ0QyxHQUN0QlIsTUFEc0IsQ0FDNUNRLFNBRDRDO0FBQUEsTUFDakN5RCxPQURpQyxHQUN0QmpFLE1BRHNCLENBQ2pDaUUsT0FEaUM7O0FBRTdELE1BQUksQ0FBQ2hFLFFBQVEsQ0FBQ1AsTUFBVCxDQUFnQmUsTUFBckIsRUFBNkI7QUFDM0IsV0FBT3pCLEtBQVA7QUFDRDs7QUFDRCxNQUFNOEQsT0FBTyxHQUFHOUQsS0FBSyxDQUFDeEIsUUFBTixDQUFleUMsUUFBUSxDQUFDUCxNQUFULENBQWdCZSxNQUEvQixDQUFoQjtBQUVBLE1BQU12QixHQUFHLEdBQUdGLEtBQUssQ0FBQzlCLE1BQU4sQ0FBYWdELFNBQWIsQ0FBdUIsVUFBQUMsQ0FBQztBQUFBLFdBQUlBLENBQUMsQ0FBQ0MsRUFBRixLQUFTSCxRQUFRLENBQUNHLEVBQXRCO0FBQUEsR0FBeEIsQ0FBWjtBQUNBLE1BQU1XLFFBQVEsR0FBR2QsUUFBUSxDQUFDZSxpQkFBVCxDQUEyQlIsU0FBM0IsQ0FBakI7QUFFQU8sRUFBQUEsUUFBUSxDQUFDbUQsd0JBQVQsQ0FBa0NwQixPQUFsQyxFQUEyQ21CLE9BQTNDO0FBRUEsTUFBTS9DLFlBQVksR0FBR2xDLEtBQUssQ0FBQzdCLFNBQU4sQ0FBZ0IrQixHQUFoQixDQUFyQjs7QUFaNkQsNkJBYWxDLG9DQUFtQjZCLFFBQW5CLEVBQTZCL0IsS0FBN0IsRUFBb0NrQyxZQUFwQyxDQWJrQztBQUFBLE1BYXREL0QsU0Fic0Qsd0JBYXREQSxTQWJzRDtBQUFBLE1BYTNDOEIsS0FiMkMsd0JBYTNDQSxLQWIyQzs7QUFlN0QsU0FBT0YsMkJBQTJCLENBQUNDLEtBQUQsRUFBUTtBQUFDN0IsSUFBQUEsU0FBUyxFQUFUQSxTQUFEO0FBQVk4QixJQUFBQSxLQUFLLEVBQUxBLEtBQVo7QUFBbUJDLElBQUFBLEdBQUcsRUFBSEE7QUFBbkIsR0FBUixDQUFsQztBQUNEO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxTQUFTaUYsMkJBQVQsQ0FBcUNuRixLQUFyQyxFQUE0Q2dCLE1BQTVDLEVBQW9EO0FBQUEsTUFDbERDLFFBRGtELEdBQ3RDRCxNQURzQyxDQUNsREMsUUFEa0Q7QUFFekQsTUFBTWYsR0FBRyxHQUFHRixLQUFLLENBQUM5QixNQUFOLENBQWFnRCxTQUFiLENBQXVCLFVBQUFDLENBQUM7QUFBQSxXQUFJQSxDQUFDLENBQUNDLEVBQUYsS0FBU0gsUUFBUSxDQUFDRyxFQUF0QjtBQUFBLEdBQXhCLENBQVo7QUFDQSxNQUFNQyxLQUFLLEdBQUdDLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZUCxNQUFNLENBQUNvRSxZQUFuQixDQUFkOztBQUNBLE1BQU1BLFlBQVksbUNBQ2JuRSxRQUFRLENBQUNQLE1BQVQsQ0FBZ0IyRSxTQURILEdBRWJyRSxNQUFNLENBQUNvRSxZQUZNLENBQWxCOztBQUtBLE1BQU1yRCxRQUFRLEdBQUdkLFFBQVEsQ0FBQ2UsaUJBQVQsQ0FBMkI7QUFBQ3FELElBQUFBLFNBQVMsRUFBRUQ7QUFBWixHQUEzQixDQUFqQjs7QUFFQSxNQUFJckQsUUFBUSxDQUFDRSx3QkFBVCxDQUFrQ1osS0FBbEMsQ0FBSixFQUE4QztBQUM1QyxRQUFNYSxZQUFZLEdBQUdsQyxLQUFLLENBQUM3QixTQUFOLENBQWdCK0IsR0FBaEIsQ0FBckI7O0FBRDRDLCtCQUVqQixvQ0FBbUI2QixRQUFuQixFQUE2Qi9CLEtBQTdCLEVBQW9Da0MsWUFBcEMsQ0FGaUI7QUFBQSxRQUVyQy9ELFNBRnFDLHdCQUVyQ0EsU0FGcUM7QUFBQSxRQUUxQjhCLEtBRjBCLHdCQUUxQkEsS0FGMEI7O0FBRzVDLFdBQU9GLDJCQUEyQixDQUFDQyxLQUFELEVBQVE7QUFBQzdCLE1BQUFBLFNBQVMsRUFBVEEsU0FBRDtBQUFZOEIsTUFBQUEsS0FBSyxFQUFMQSxLQUFaO0FBQW1CQyxNQUFBQSxHQUFHLEVBQUhBO0FBQW5CLEtBQVIsQ0FBbEM7QUFDRDs7QUFFRCxTQUFPSCwyQkFBMkIsQ0FBQ0MsS0FBRCxFQUFRO0FBQUNDLElBQUFBLEtBQUssRUFBRThCLFFBQVI7QUFBa0I3QixJQUFBQSxHQUFHLEVBQUhBO0FBQWxCLEdBQVIsQ0FBbEM7QUFDRDtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ08sU0FBU29GLDZCQUFULENBQXVDdEYsS0FBdkMsRUFBOENnQixNQUE5QyxFQUFzRDtBQUMzRCxTQUFPdUUsZ0JBQWdCLENBQUN2RixLQUFELEVBQVFnQixNQUFSLENBQXZCO0FBQ0Q7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLFNBQVN3RSwrQkFBVCxDQUF5Q3hGLEtBQXpDLFNBQXVFO0FBQUEsTUFBdEJvQixFQUFzQixTQUF0QkEsRUFBc0I7QUFBQSxNQUFsQnFFLGVBQWtCLFNBQWxCQSxlQUFrQjtBQUM1RSx5Q0FDS3pGLEtBREw7QUFFRTFCLElBQUFBLE9BQU8sRUFBRTBCLEtBQUssQ0FBQzFCLE9BQU4sQ0FBYzZCLEdBQWQsQ0FBa0IsVUFBQTRDLENBQUM7QUFBQSxhQUMxQkEsQ0FBQyxDQUFDM0IsRUFBRixLQUFTQSxFQUFULG1DQUVTMkIsQ0FGVDtBQUdNMEMsUUFBQUEsZUFBZSxFQUFmQTtBQUhOLFdBS0kxQyxDQU5zQjtBQUFBLEtBQW5CO0FBRlg7QUFXRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ08sU0FBU3dDLGdCQUFULENBQTBCdkYsS0FBMUIsRUFBaUNnQixNQUFqQyxFQUF5QztBQUFBLE1BQ3ZDZCxHQUR1QyxHQUNIYyxNQURHLENBQ3ZDZCxHQUR1QztBQUFBLE1BQ2xDc0QsSUFEa0MsR0FDSHhDLE1BREcsQ0FDbEN3QyxJQURrQztBQUFBLE1BQzVCQyxLQUQ0QixHQUNIekMsTUFERyxDQUM1QnlDLEtBRDRCO0FBQUEsMkJBQ0h6QyxNQURHLENBQ3JCMEUsVUFEcUI7QUFBQSxNQUNyQkEsVUFEcUIsbUNBQ1IsQ0FEUTtBQUU5QyxNQUFNQyxTQUFTLEdBQUczRixLQUFLLENBQUMxQixPQUFOLENBQWM0QixHQUFkLENBQWxCOztBQUVBLE1BQUksQ0FBQ3lGLFNBQUwsRUFBZ0I7QUFDZGxCLG9CQUFRQyxLQUFSLG1CQUF5QnhFLEdBQXpCOztBQUNBLFdBQU9GLEtBQVA7QUFDRDs7QUFDRCxNQUFJNEYsU0FBUyxHQUFHLGdCQUFJLENBQUNwQyxJQUFELENBQUosRUFBWUMsS0FBWixFQUFtQmtDLFNBQW5CLENBQWhCO0FBQ0EsTUFBSW5GLFFBQVEsR0FBR1IsS0FBZjtBQVQ4QyxtQkFXN0I0RixTQVg2QjtBQUFBLE1BV3ZDbkUsTUFYdUMsY0FXdkNBLE1BWHVDLEVBYTlDOztBQUNBLE1BQUlvRSxVQUFVLEdBQUcsb0JBQVFwRSxNQUFSLENBQWpCOztBQUVBLFVBQVErQixJQUFSO0FBQ0U7QUFDQTtBQUNBO0FBQ0EsU0FBS3NDLGtDQUFxQnJFLE1BQTFCO0FBQ0U7QUFDQW1FLE1BQUFBLFNBQVMsR0FBRyxxQ0FBbUJuRSxNQUFuQixDQUFaO0FBQ0E7O0FBRUYsU0FBS3FFLGtDQUFxQmxELElBQTFCO0FBQ0U7QUFDQTtBQUNBO0FBQ0EsVUFBTW1ELFNBQVMsR0FBR0gsU0FBUyxDQUFDbkUsTUFBVixDQUFpQmlFLFVBQWpCLENBQWxCOztBQUpGLGtDQUt1RCx1Q0FDbkRFLFNBRG1ELEVBRW5ENUYsS0FBSyxDQUFDeEIsUUFBTixDQUFldUgsU0FBZixDQUZtRCxFQUduRHRDLEtBSG1ELEVBSW5EaUMsVUFKbUQsRUFLbkQ7QUFBQ00sUUFBQUEsV0FBVyxFQUFFO0FBQWQsT0FMbUQsQ0FMdkQ7QUFBQSxVQUtpQkMsYUFMakIseUJBS1NwRCxNQUxUO0FBQUEsVUFLeUNxRCxVQUx6Qyx5QkFLZ0NwQyxPQUxoQzs7QUFZRSxVQUFJLENBQUNtQyxhQUFMLEVBQW9CO0FBQ2xCLGVBQU9qRyxLQUFQO0FBQ0Q7O0FBRUQ0RixNQUFBQSxTQUFTLEdBQUdLLGFBQVo7O0FBRUEsVUFBSUwsU0FBUyxDQUFDTyxHQUFkLEVBQW1CO0FBQ2pCUCxRQUFBQSxTQUFTLEdBQUcsc0NBQWlCQSxTQUFqQixFQUE0QjVGLEtBQUssQ0FBQzFCLE9BQWxDLENBQVo7QUFDQXNILFFBQUFBLFNBQVMsR0FBRyxzQ0FBaUJBLFNBQWpCLEVBQTRCNUYsS0FBSyxDQUFDMUIsT0FBbEMsQ0FBWjtBQUNEOztBQUVEa0MsTUFBQUEsUUFBUSxHQUFHLGdCQUFJLENBQUMsVUFBRCxFQUFhdUYsU0FBYixDQUFKLEVBQTZCRyxVQUE3QixFQUF5Q2xHLEtBQXpDLENBQVgsQ0F2QkYsQ0F5QkU7O0FBQ0E7O0FBQ0YsU0FBSzhGLGtDQUFxQk0sT0FBMUI7QUFDRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQU1DLGlCQUFpQixHQUFHLHlCQUFJVCxTQUFTLENBQUNRLE9BQWQsRUFBdUJULFNBQVMsQ0FBQ1MsT0FBakMsQ0FBMUI7QUFFQSxVQUFNRSxZQUFZLEdBQUcseUJBQ25CRCxpQkFBaUIsQ0FDZGxHLEdBREgsQ0FDTyxVQUFBb0csR0FBRztBQUFBLGVBQ04seUJBQ0V2RyxLQUFLLENBQUM5QixNQUFOLENBQWE0RCxJQUFiLENBQWtCLFVBQUFYLENBQUM7QUFBQSxpQkFBSUEsQ0FBQyxDQUFDQyxFQUFGLEtBQVNtRixHQUFiO0FBQUEsU0FBbkIsQ0FERixFQUVFLENBQUMsUUFBRCxFQUFXLFFBQVgsQ0FGRixDQURNO0FBQUEsT0FEVixFQU9HMUQsTUFQSCxDQU9VLFVBQUF2QyxDQUFDO0FBQUEsZUFBSUEsQ0FBSjtBQUFBLE9BUFgsQ0FEbUIsQ0FBckIsQ0FQRixDQWtCRTs7QUFDQXVGLE1BQUFBLFVBQVUsR0FBR1MsWUFBYixDQW5CRixDQXFCRTs7QUFDQSxVQUFNRSxVQUFVLEdBQUcseUJBQ2pCWixTQUFTLENBQUNRLE9BQVYsQ0FDR2pHLEdBREgsQ0FDTyxVQUFBb0csR0FBRztBQUFBLGVBQ04seUJBQ0V2RyxLQUFLLENBQUM5QixNQUFOLENBQWE0RCxJQUFiLENBQWtCLFVBQUFYLENBQUM7QUFBQSxpQkFBSUEsQ0FBQyxDQUFDQyxFQUFGLEtBQVNtRixHQUFiO0FBQUEsU0FBbkIsQ0FERixFQUVFLENBQUMsUUFBRCxFQUFXLFFBQVgsQ0FGRixDQURNO0FBQUEsT0FEVixFQU9HMUQsTUFQSCxDQU9VLFVBQUF2QyxDQUFDO0FBQUEsZUFBSUEsQ0FBSjtBQUFBLE9BUFgsQ0FEaUIsQ0FBbkI7QUFXQXNGLE1BQUFBLFNBQVMsbUNBQ0pBLFNBREk7QUFFUG5FLFFBQUFBLE1BQU0sRUFBRStFO0FBRkQsUUFBVDtBQUtBOztBQUNGO0FBQ0U7QUE1RUo7O0FBK0VBLE1BQU1DLGNBQWMsR0FBR3pHLEtBQUssQ0FBQzFCLE9BQU4sQ0FBY3dELElBQWQsQ0FBbUIsVUFBQWlCLENBQUM7QUFBQSxXQUFJQSxDQUFDLENBQUMyRCxRQUFOO0FBQUEsR0FBcEIsQ0FBdkI7O0FBRUEsTUFBSUQsY0FBYyxJQUFJQSxjQUFjLENBQUNyRixFQUFmLEtBQXNCd0UsU0FBUyxDQUFDeEUsRUFBdEQsRUFBMEQ7QUFDeEQ7QUFDQXdFLElBQUFBLFNBQVMsQ0FBQ2MsUUFBVixHQUFxQixLQUFyQjtBQUNELEdBcEc2QyxDQXNHOUM7OztBQUNBbEcsRUFBQUEsUUFBUSxHQUFHLGdCQUFJLENBQUMsU0FBRCxFQUFZTixHQUFaLENBQUosRUFBc0IwRixTQUF0QixFQUFpQ3BGLFFBQWpDLENBQVgsQ0F2RzhDLENBeUc5QztBQUNBO0FBQ0E7O0FBQ0EsTUFBTW1HLGtCQUFrQixHQUFHQyx5Q0FBNEJwRCxJQUE1QixJQUN2QixDQUFDcUMsVUFBVSxDQUFDSCxVQUFELENBQVgsQ0FEdUIsR0FFdkJHLFVBRkosQ0E1RzhDLENBZ0g5Qzs7QUFDQSxNQUFNZ0IsZ0JBQWdCLEdBQUcseUNBQ3ZCRixrQkFEdUIsRUFFdkJuRyxRQUFRLENBQUNoQyxRQUZjLEVBR3ZCZ0MsUUFBUSxDQUFDbEMsT0FIYyxFQUl2QmtDLFFBQVEsQ0FBQ3RDLE1BSmMsQ0FBekI7QUFPQXNDLEVBQUFBLFFBQVEsR0FBRyxnQkFBSSxDQUFDLFVBQUQsQ0FBSixFQUFrQnFHLGdCQUFsQixFQUFvQ3JHLFFBQXBDLENBQVgsQ0F4SDhDLENBeUg5QztBQUNBOztBQUNBQSxFQUFBQSxRQUFRLEdBQUdzRyx3QkFBd0IsQ0FBQ3RHLFFBQUQsRUFBV21HLGtCQUFYLEVBQStCZixTQUEvQixDQUFuQztBQUVBLFNBQU9wRixRQUFQO0FBQ0Q7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLElBQU11RyxvQkFBb0IsR0FBRyxTQUF2QkEsb0JBQXVCLENBQUMvRyxLQUFELFNBQTJDO0FBQUEsTUFBbENFLEdBQWtDLFNBQWxDQSxHQUFrQztBQUFBLE1BQTdCOEcsT0FBNkIsU0FBN0JBLE9BQTZCO0FBQUEsK0JBQXBCdEIsVUFBb0I7QUFBQSxNQUFwQkEsVUFBb0IsaUNBQVAsQ0FBTzs7QUFDN0UsTUFBSUUsU0FBUyxtQ0FBTzVGLEtBQUssQ0FBQzFCLE9BQU4sQ0FBYzRCLEdBQWQsQ0FBUCxHQUE4QjhHLE9BQTlCLENBQWI7O0FBQ0EsTUFBTXhELElBQUksR0FBR2xDLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZeUYsT0FBWixFQUFxQixDQUFyQixDQUFiOztBQUNBLE1BQUl4RCxJQUFJLEtBQUssT0FBYixFQUFzQjtBQUNwQixRQUFNeUQsUUFBUSxHQUFHLDJDQUF5QnJCLFNBQXpCLENBQWpCLENBRG9CLENBRXBCOztBQUNBLFFBQUlxQixRQUFKLEVBQWM7QUFDWnJCLE1BQUFBLFNBQVMsaURBQ0pBLFNBREksR0FFSixnRUFBa0JBLFNBQWxCO0FBQTZCcUIsUUFBQUEsUUFBUSxFQUFSQTtBQUE3QixVQUF3Q2pILEtBQUssQ0FBQ3hCLFFBQU4sQ0FBZW9ILFNBQVMsQ0FBQ25FLE1BQVYsQ0FBaUJpRSxVQUFqQixDQUFmLENBQXhDLENBRkk7QUFHUHVCLFFBQUFBLFFBQVEsRUFBUkE7QUFITyxRQUFUO0FBS0Q7QUFDRjs7QUFFRCx5Q0FDS2pILEtBREw7QUFFRTFCLElBQUFBLE9BQU8sRUFBRTBCLEtBQUssQ0FBQzFCLE9BQU4sQ0FBYzZCLEdBQWQsQ0FBa0IsVUFBQzRDLENBQUQsRUFBSTFDLENBQUo7QUFBQSxhQUFXQSxDQUFDLEtBQUtILEdBQU4sR0FBWTBGLFNBQVosR0FBd0I3QyxDQUFuQztBQUFBLEtBQWxCO0FBRlg7QUFJRCxDQW5CTTtBQXFCUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sSUFBTW1FLGdCQUFnQixHQUFHLFNBQW5CQSxnQkFBbUIsQ0FBQ2xILEtBQUQsRUFBUWdCLE1BQVI7QUFBQSxTQUM5QixDQUFDQSxNQUFNLENBQUNTLE1BQVIsR0FDSXpCLEtBREosbUNBR1NBLEtBSFQ7QUFJTTFCLElBQUFBLE9BQU8sZ0RBQU0wQixLQUFLLENBQUMxQixPQUFaLElBQXFCLG1DQUFpQjBDLE1BQU0sQ0FBQ1MsTUFBeEIsQ0FBckI7QUFKYixJQUQ4QjtBQUFBLENBQXpCO0FBUVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDTyxJQUFNMEYseUJBQXlCLEdBQUcsU0FBNUJBLHlCQUE0QixDQUFDbkgsS0FBRCxTQUF3QztBQUFBLE1BQS9CaUIsUUFBK0IsU0FBL0JBLFFBQStCO0FBQUEsTUFBckJ1QyxJQUFxQixTQUFyQkEsSUFBcUI7QUFBQSxNQUFmaEMsU0FBZSxTQUFmQSxTQUFlO0FBQy9FLE1BQU00RixZQUFZLEdBQUduRyxRQUFRLENBQUNQLE1BQVQsQ0FBZ0IyRSxTQUFoQixDQUEwQjdCLElBQTFCLENBQXJCO0FBQ0EsTUFBTXpCLFFBQVEsR0FBR2QsUUFBUSxDQUFDb0csa0JBQVQsQ0FBNEI3RCxJQUE1QixFQUFrQ2hDLFNBQWxDLENBQWpCO0FBQ0EsTUFBTTRELFlBQVksR0FBR3JELFFBQVEsQ0FBQ3JCLE1BQVQsQ0FBZ0IyRSxTQUFoQixDQUEwQjdCLElBQTFCLENBQXJCOztBQUNBLE1BQUk0RCxZQUFZLEtBQUtoQyxZQUFyQixFQUFtQztBQUNqQyxXQUFPRCwyQkFBMkIsQ0FBQ25GLEtBQUQsRUFBUTtBQUN4Q2lCLE1BQUFBLFFBQVEsRUFBUkEsUUFEd0M7QUFFeENtRSxNQUFBQSxZQUFZLHVDQUNUNUIsSUFEUyxFQUNGNEIsWUFERTtBQUY0QixLQUFSLENBQWxDO0FBTUQ7O0FBQ0QseUNBQ0twRixLQURMO0FBRUU5QixJQUFBQSxNQUFNLEVBQUU4QixLQUFLLENBQUM5QixNQUFOLENBQWFpQyxHQUFiLENBQWlCLFVBQUFnQixDQUFDO0FBQUEsYUFBS0EsQ0FBQyxDQUFDQyxFQUFGLEtBQVNILFFBQVEsQ0FBQ0csRUFBbEIsR0FBdUJXLFFBQXZCLEdBQWtDWixDQUF2QztBQUFBLEtBQWxCO0FBRlY7QUFJRCxDQWhCTTtBQWtCUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sSUFBTW1HLDRCQUE0QixHQUFHLFNBQS9CQSw0QkFBK0IsQ0FBQ3RILEtBQUQsRUFBUWdCLE1BQVI7QUFBQSx5Q0FDdkNoQixLQUR1QztBQUUxQzFCLElBQUFBLE9BQU8sRUFBRTBCLEtBQUssQ0FBQzFCLE9BQU4sQ0FBYzZCLEdBQWQsQ0FBa0IsVUFBQzRDLENBQUQsRUFBSTFDLENBQUo7QUFBQSxhQUFXQSxDQUFDLEtBQUtXLE1BQU0sQ0FBQ2QsR0FBYixtQ0FBdUI2QyxDQUF2QjtBQUEwQjVGLFFBQUFBLFdBQVcsRUFBRSxDQUFDNEYsQ0FBQyxDQUFDNUY7QUFBMUMsV0FBeUQ0RixDQUFwRTtBQUFBLEtBQWxCO0FBRmlDO0FBQUEsQ0FBckM7QUFLUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUNPLElBQU13RSwyQkFBMkIsR0FBRyxTQUE5QkEsMkJBQThCLENBQUF2SCxLQUFLO0FBQUEseUNBQzNDQSxLQUQyQztBQUU5Q1gsSUFBQUEsZUFBZSxrQ0FDVlcsS0FBSyxDQUFDWCxlQURJO0FBRWJsQyxNQUFBQSxXQUFXLEVBQUUsQ0FBQzZDLEtBQUssQ0FBQ1gsZUFBTixDQUFzQmxDO0FBRnZCO0FBRitCO0FBQUEsQ0FBekM7QUFRUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sSUFBTXFLLGtDQUFrQyxHQUFHLFNBQXJDQSxrQ0FBcUMsQ0FBQXhILEtBQUs7QUFBQSx5Q0FDbERBLEtBRGtEO0FBRXJEWCxJQUFBQSxlQUFlLGtDQUNWVyxLQUFLLENBQUNYLGVBREk7QUFFYm9JLE1BQUFBLFdBQVcsRUFBRSxDQUFDekgsS0FBSyxDQUFDWCxlQUFOLENBQXNCb0k7QUFGdkI7QUFGc0M7QUFBQSxDQUFoRDtBQVFQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDTyxJQUFNQyxpQ0FBaUMsR0FBRyxTQUFwQ0EsaUNBQW9DLENBQUMxSCxLQUFELEVBQVFnQixNQUFSO0FBQUEseUNBQzVDaEIsS0FENEM7QUFFL0MxQixJQUFBQSxPQUFPLEVBQUUwQixLQUFLLENBQUMxQixPQUFOLENBQWM2QixHQUFkLENBQWtCLFVBQUM0QyxDQUFELEVBQUkxQyxDQUFKO0FBQUEsYUFBV0EsQ0FBQyxLQUFLVyxNQUFNLENBQUNkLEdBQWIsbUNBQXVCNkMsQ0FBdkI7QUFBMEI3RixRQUFBQSxLQUFLLEVBQUU4RCxNQUFNLENBQUM5RDtBQUF4QyxXQUFpRDZGLENBQTVEO0FBQUEsS0FBbEI7QUFGc0M7QUFBQSxDQUExQztBQUtQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUNPLElBQU00RSw0QkFBNEIsR0FBRyxTQUEvQkEsNEJBQStCLENBQUMzSCxLQUFEO0FBQUEsTUFBU3lELEtBQVQsU0FBU0EsS0FBVDtBQUFBLHlDQUN2Q3pELEtBRHVDO0FBRTFDWCxJQUFBQSxlQUFlLGtDQUNWVyxLQUFLLENBQUNYLGVBREk7QUFFYnBDLE1BQUFBLFdBQVcsRUFBRXdHO0FBRkE7QUFGMkI7QUFBQSxDQUFyQztBQVFQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUNPLElBQU1tRSxnQ0FBZ0MsR0FBRyxTQUFuQ0EsZ0NBQW1DLENBQUM1SCxLQUFELFNBQW9CO0FBQUEsTUFBWDlDLEtBQVcsU0FBWEEsS0FBVztBQUNsRSx5Q0FDSzhDLEtBREw7QUFFRVgsSUFBQUEsZUFBZSxrQ0FDVlcsS0FBSyxDQUFDWCxlQURJO0FBRWJuQyxNQUFBQSxLQUFLLEVBQUxBO0FBRmE7QUFGakI7QUFPRCxDQVJNO0FBVVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUNPLElBQU0ySyxvQkFBb0IsR0FBRyxTQUF2QkEsb0JBQXVCLENBQUM3SCxLQUFELEVBQVFnQixNQUFSLEVBQW1CO0FBQ3JELHlDQUNLaEIsS0FETDtBQUVFMUIsSUFBQUEsT0FBTyxFQUFFMEIsS0FBSyxDQUFDMUIsT0FBTixDQUFjNkIsR0FBZCxDQUFrQixVQUFDNEMsQ0FBRCxFQUFJMUMsQ0FBSjtBQUFBLGFBQ3pCQSxDQUFDLEtBQUtXLE1BQU0sQ0FBQ2QsR0FBYixtQ0FFUzZDLENBRlQ7QUFHTTJELFFBQUFBLFFBQVEsRUFBRSxDQUFDM0QsQ0FBQyxDQUFDMkQ7QUFIbkIsV0FLSTNELENBTnFCO0FBQUEsS0FBbEI7QUFGWDtBQVdELENBWk07QUFjUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUNPLElBQU0rRSwwQkFBMEIsR0FBRyxTQUE3QkEsMEJBQTZCLENBQUM5SCxLQUFELEVBQVFnQixNQUFSLEVBQW1CO0FBQzNELE1BQU02QixNQUFNLEdBQUc3QyxLQUFLLENBQUMxQixPQUFOLENBQWMwQyxNQUFNLENBQUNkLEdBQXJCLENBQWY7QUFDQSxNQUFNUyxTQUFTLEdBQUcseUJBQUlrQyxNQUFKLEVBQVksQ0FBQyxPQUFELEVBQVUsWUFBVixFQUF3QixXQUF4QixDQUFaLENBQWxCOztBQUNBLE1BQU0rQyxTQUFTLG1DQUNWL0MsTUFEVTtBQUViWSxJQUFBQSxLQUFLLEVBQUUsdUNBQXFCWixNQUFNLENBQUNZLEtBQTVCLEVBQW1DWixNQUFNLENBQUN6QixFQUExQyxFQUE4QztBQUNuRFQsTUFBQUEsU0FBUyxFQUFFLENBQUNBO0FBRHVDLEtBQTlDO0FBRk0sSUFBZjs7QUFPQSx5Q0FDS1gsS0FETDtBQUVFMUIsSUFBQUEsT0FBTyxFQUFFZ0QsTUFBTSxDQUFDeUcsTUFBUCxxQ0FBa0IvSCxLQUFLLENBQUMxQixPQUF4Qix3Q0FBb0MwQyxNQUFNLENBQUNkLEdBQTNDLEVBQWlEMEYsU0FBakQ7QUFGWDtBQUlELENBZE07QUFnQlA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUNPLElBQU1vQyxtQkFBbUIsR0FBRyxTQUF0QkEsbUJBQXNCLENBQUNoSSxLQUFELEVBQVFnQixNQUFSLEVBQW1CO0FBQUEsTUFDN0NkLEdBRDZDLEdBQ3RDYyxNQURzQyxDQUM3Q2QsR0FENkM7QUFBQSwyQkFFL0JGLEtBQUssQ0FBQzFCLE9BQU4sQ0FBYzRCLEdBQWQsQ0FGK0I7QUFBQSxNQUU3Q3VCLE1BRjZDLHNCQUU3Q0EsTUFGNkM7QUFBQSxNQUVyQ0wsRUFGcUMsc0JBRXJDQSxFQUZxQztBQUlwRCxNQUFNNkcsVUFBVSxpREFDWGpJLEtBQUssQ0FBQzFCLE9BQU4sQ0FBY2tFLEtBQWQsQ0FBb0IsQ0FBcEIsRUFBdUJ0QyxHQUF2QixDQURXLHVDQUVYRixLQUFLLENBQUMxQixPQUFOLENBQWNrRSxLQUFkLENBQW9CdEMsR0FBRyxHQUFHLENBQTFCLEVBQTZCRixLQUFLLENBQUMxQixPQUFOLENBQWNtQyxNQUEzQyxDQUZXLEVBQWhCO0FBS0EsTUFBTW9HLGdCQUFnQixHQUFHLHlDQUF1QnBGLE1BQXZCLEVBQStCekIsS0FBSyxDQUFDeEIsUUFBckMsRUFBK0N5SixVQUEvQyxFQUEyRGpJLEtBQUssQ0FBQzlCLE1BQWpFLENBQXpCO0FBQ0EsTUFBTWdLLFNBQVMsR0FDYix1Q0FBcUJsSSxLQUFLLENBQUNWLE1BQU4sQ0FBYTFCLGVBQWxDLE1BQXVEd0QsRUFBdkQsbUNBRVNwQixLQUFLLENBQUNWLE1BRmY7QUFHTTFCLElBQUFBLGVBQWUsRUFBRTtBQUh2QixPQUtJb0MsS0FBSyxDQUFDVixNQU5aO0FBUUEsTUFBSWtCLFFBQVEsR0FBRyxnQkFBSSxDQUFDLFNBQUQsQ0FBSixFQUFpQnlILFVBQWpCLEVBQTZCakksS0FBN0IsQ0FBZjtBQUNBUSxFQUFBQSxRQUFRLEdBQUcsZ0JBQUksQ0FBQyxVQUFELENBQUosRUFBa0JxRyxnQkFBbEIsRUFBb0NyRyxRQUFwQyxDQUFYO0FBQ0FBLEVBQUFBLFFBQVEsR0FBRyxnQkFBSSxDQUFDLFFBQUQsQ0FBSixFQUFnQjBILFNBQWhCLEVBQTJCMUgsUUFBM0IsQ0FBWDtBQUVBLFNBQU9zRyx3QkFBd0IsQ0FBQ3RHLFFBQUQsRUFBV2lCLE1BQVgsRUFBbUIvQyxTQUFuQixDQUEvQjtBQUNELENBdkJNO0FBeUJQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDTyxJQUFNeUosZUFBZSxHQUFHLFNBQWxCQSxlQUFrQixDQUFDbkksS0FBRCxFQUFRZ0IsTUFBUixFQUFtQjtBQUNoRCxNQUFJZSxRQUFKO0FBQ0EsTUFBSXFHLFlBQUo7O0FBQ0EsTUFBSXBILE1BQU0sQ0FBQ04sTUFBWCxFQUFtQjtBQUNqQnFCLElBQUFBLFFBQVEsR0FBRywyQ0FBc0IvQixLQUF0QixFQUE2QmdCLE1BQU0sQ0FBQ04sTUFBcEMsQ0FBWDs7QUFDQSxRQUFJLENBQUNxQixRQUFMLEVBQWU7QUFDYjBDLHNCQUFRNEQsSUFBUixDQUNFLDZGQURGLEVBRUVySCxNQUFNLENBQUNOLE1BRlQ7O0FBSUEsYUFBT1YsS0FBUDtBQUNEOztBQUVELFFBQU1zSSxNQUFNLEdBQUcsb0NBQW1CdkcsUUFBbkIsRUFBNkIvQixLQUE3QixDQUFmO0FBQ0ErQixJQUFBQSxRQUFRLEdBQUd1RyxNQUFNLENBQUNySSxLQUFsQjtBQUNBbUksSUFBQUEsWUFBWSxHQUFHRSxNQUFNLENBQUNuSyxTQUF0QjtBQUNELEdBYkQsTUFhTztBQUNMO0FBQ0EsUUFBTW9LLGNBQWMsR0FBR2pILE1BQU0sQ0FBQ0MsSUFBUCxDQUFZdkIsS0FBSyxDQUFDeEIsUUFBbEIsRUFBNEIsQ0FBNUIsQ0FBdkI7QUFDQXVELElBQUFBLFFBQVEsR0FBRyxJQUFJeUcsYUFBSixDQUFVO0FBQ25CN0gsTUFBQUEsU0FBUyxFQUFFLElBRFE7QUFFbkJ5RCxNQUFBQSxjQUFjLEVBQUUsSUFGRztBQUduQjNDLE1BQUFBLE1BQU0sRUFBRThHO0FBSFcsS0FBVixDQUFYO0FBS0FILElBQUFBLFlBQVksR0FBRyxFQUFmO0FBQ0Q7O0FBQ0QseUNBQ0twSSxLQURMO0FBRUU5QixJQUFBQSxNQUFNLGdEQUFNOEIsS0FBSyxDQUFDOUIsTUFBWixJQUFvQjZELFFBQXBCLEVBRlI7QUFHRTVELElBQUFBLFNBQVMsZ0RBQU02QixLQUFLLENBQUM3QixTQUFaLElBQXVCaUssWUFBdkIsRUFIWDtBQUlFL0osSUFBQUEsVUFBVSxnREFBTTJCLEtBQUssQ0FBQzNCLFVBQVosSUFBd0IyQixLQUFLLENBQUMzQixVQUFOLENBQWlCb0MsTUFBekMsRUFKWjtBQUtFeEIsSUFBQUEsU0FBUyxFQUFFLDJDQUF1QmUsS0FBSyxDQUFDZixTQUE3QixFQUF3QzhDLFFBQXhDO0FBTGI7QUFPRCxDQWpDTTtBQW1DUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sSUFBTTBHLGtCQUFrQixHQUFHLFNBQXJCQSxrQkFBcUIsQ0FBQ3pJLEtBQUQsU0FBa0I7QUFBQSxNQUFURSxHQUFTLFNBQVRBLEdBQVM7QUFBQSxNQUMzQ2hDLE1BRDJDLEdBQ0Y4QixLQURFLENBQzNDOUIsTUFEMkM7QUFBQSxNQUNuQ0MsU0FEbUMsR0FDRjZCLEtBREUsQ0FDbkM3QixTQURtQztBQUFBLE1BQ3hCWSxPQUR3QixHQUNGaUIsS0FERSxDQUN4QmpCLE9BRHdCO0FBQUEsTUFDZkQsU0FEZSxHQUNGa0IsS0FERSxDQUNmbEIsU0FEZTtBQUVsRCxNQUFNNEosYUFBYSxHQUFHMUksS0FBSyxDQUFDOUIsTUFBTixDQUFhZ0MsR0FBYixDQUF0QjtBQUNBLE1BQU15SSxPQUFPLEdBQUcsNkNBQXlCM0ksS0FBSyxDQUFDZixTQUEvQixFQUEwQ3lKLGFBQTFDLENBQWhCOztBQUVBLE1BQU1sSSxRQUFRLG1DQUNUUixLQURTO0FBRVo5QixJQUFBQSxNQUFNLGdEQUFNQSxNQUFNLENBQUNzRSxLQUFQLENBQWEsQ0FBYixFQUFnQnRDLEdBQWhCLENBQU4sdUNBQStCaEMsTUFBTSxDQUFDc0UsS0FBUCxDQUFhdEMsR0FBRyxHQUFHLENBQW5CLEVBQXNCaEMsTUFBTSxDQUFDdUMsTUFBN0IsQ0FBL0IsRUFGTTtBQUdadEMsSUFBQUEsU0FBUyxnREFBTUEsU0FBUyxDQUFDcUUsS0FBVixDQUFnQixDQUFoQixFQUFtQnRDLEdBQW5CLENBQU4sdUNBQWtDL0IsU0FBUyxDQUFDcUUsS0FBVixDQUFnQnRDLEdBQUcsR0FBRyxDQUF0QixFQUF5Qi9CLFNBQVMsQ0FBQ3NDLE1BQW5DLENBQWxDLEVBSEc7QUFJWnBDLElBQUFBLFVBQVUsRUFBRTJCLEtBQUssQ0FBQzNCLFVBQU4sQ0FBaUJ3RSxNQUFqQixDQUF3QixVQUFBeEMsQ0FBQztBQUFBLGFBQUlBLENBQUMsS0FBS0gsR0FBVjtBQUFBLEtBQXpCLEVBQXdDQyxHQUF4QyxDQUE0QyxVQUFBeUksR0FBRztBQUFBLGFBQUtBLEdBQUcsR0FBRzFJLEdBQU4sR0FBWTBJLEdBQUcsR0FBRyxDQUFsQixHQUFzQkEsR0FBM0I7QUFBQSxLQUEvQyxDQUpBO0FBS1o3SixJQUFBQSxPQUFPLEVBQUUySixhQUFhLENBQUNHLGNBQWQsQ0FBNkI5SixPQUE3QixJQUF3Q0wsU0FBeEMsR0FBb0RLLE9BTGpEO0FBTVpELElBQUFBLFNBQVMsRUFBRTRKLGFBQWEsQ0FBQ0csY0FBZCxDQUE2Qi9KLFNBQTdCLElBQTBDSixTQUExQyxHQUFzREksU0FOckQ7QUFPWkcsSUFBQUEsU0FBUyxFQUFFMEosT0FQQyxDQVFaOztBQVJZLElBQWQ7O0FBV0EsU0FBTzdILHFCQUFxQixDQUFDTixRQUFELENBQTVCO0FBQ0QsQ0FqQk07QUFtQlA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUNPLElBQU1zSSxxQkFBcUIsR0FBRyxTQUF4QkEscUJBQXdCLENBQUM5SSxLQUFELFNBQWtCO0FBQUEsTUFBVEUsR0FBUyxTQUFUQSxHQUFTO0FBQUEsTUFDOUNoQyxNQUQ4QyxHQUNwQzhCLEtBRG9DLENBQzlDOUIsTUFEOEM7QUFFckQsTUFBTTZLLFFBQVEsR0FBRy9JLEtBQUssQ0FBQzlCLE1BQU4sQ0FBYWdDLEdBQWIsQ0FBakI7QUFDQSxNQUFNOEkscUJBQXFCLEdBQUdoSixLQUFLLENBQUMzQixVQUFOLENBQWlCNkMsU0FBakIsQ0FBMkIsVUFBQWIsQ0FBQztBQUFBLFdBQUlBLENBQUMsS0FBS0gsR0FBVjtBQUFBLEdBQTVCLENBQTlCOztBQUVBLE1BQUksQ0FBQzZJLFFBQUwsRUFBZTtBQUNidEUsb0JBQVE0RCxJQUFSLGlCQUFzQm5JLEdBQXRCOztBQUNBLFdBQU9GLEtBQVA7QUFDRDs7QUFDRCxNQUFJaUosUUFBUSxxQkFBY0YsUUFBUSxDQUFDckksTUFBVCxDQUFnQndJLEtBQTlCLENBQVo7QUFDQSxNQUFJQyxPQUFPLEdBQUcsQ0FBZCxDQVZxRCxDQVdyRDs7QUFDQSxTQUFPakwsTUFBTSxDQUFDNEQsSUFBUCxDQUFZLFVBQUFYLENBQUM7QUFBQSxXQUFJQSxDQUFDLENBQUNULE1BQUYsQ0FBU3dJLEtBQVQsS0FBbUJELFFBQXZCO0FBQUEsR0FBYixDQUFQLEVBQXNEO0FBQ3BEQSxJQUFBQSxRQUFRLHFCQUFjRixRQUFRLENBQUNySSxNQUFULENBQWdCd0ksS0FBOUIsY0FBdUMsRUFBRUMsT0FBekMsQ0FBUjtBQUNELEdBZG9ELENBZ0JyRDs7O0FBQ0EsTUFBTXBGLFdBQVcsR0FBRyxvQ0FBZWdGLFFBQWYsQ0FBcEIsQ0FqQnFELENBbUJyRDs7QUFDQSxNQUFJLENBQUNoRixXQUFXLENBQUNyRCxNQUFqQixFQUF5QjtBQUN2QixXQUFPVixLQUFQO0FBQ0Q7O0FBQ0QrRCxFQUFBQSxXQUFXLENBQUNyRCxNQUFaLENBQW1Cd0ksS0FBbkIsR0FBMkJELFFBQTNCO0FBQ0FsRixFQUFBQSxXQUFXLENBQUMzQyxFQUFaLEdBQWlCLDJCQUFlZ0ksdUJBQWYsQ0FBakIsQ0F4QnFELENBMEJyRDs7QUFDQSxNQUFJQyxTQUFTLEdBQUdsQixlQUFlLENBQUNuSSxLQUFELEVBQVE7QUFBQ1UsSUFBQUEsTUFBTSxFQUFFcUQ7QUFBVCxHQUFSLENBQS9CLENBM0JxRCxDQTZCckQ7O0FBQ0EsTUFBTXVGLGdCQUFnQixHQUFHRCxTQUFTLENBQUNoTCxVQUFWLENBQXFCb0MsTUFBckIsR0FBOEIsQ0FBdkQ7QUFDQSxNQUFNOEksYUFBYSxHQUFHLHdCQUNwQkYsU0FBUyxDQUFDaEwsVUFBVixDQUFxQm1FLEtBQXJCLENBQTJCLENBQTNCLEVBQThCOEcsZ0JBQTlCLENBRG9CLEVBRXBCTixxQkFGb0IsRUFHcEJNLGdCQUhvQixDQUF0QjtBQU1BRCxFQUFBQSxTQUFTLG1DQUNKQSxTQURJO0FBRVBoTCxJQUFBQSxVQUFVLEVBQUVrTDtBQUZMLElBQVQ7QUFLQSxTQUFPekkscUJBQXFCLENBQUN1SSxTQUFELENBQTVCO0FBQ0QsQ0EzQ007QUE2Q1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUNPLElBQU1HLG1CQUFtQixHQUFHLFNBQXRCQSxtQkFBc0IsQ0FBQ3hKLEtBQUQ7QUFBQSxNQUFTeUosS0FBVCxTQUFTQSxLQUFUO0FBQUEseUNBQzlCekosS0FEOEI7QUFFakMzQixJQUFBQSxVQUFVLEVBQUVvTDtBQUZxQjtBQUFBLENBQTVCO0FBS1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUNPLElBQU1DLG9CQUFvQixHQUFHLFNBQXZCQSxvQkFBdUIsQ0FBQzFKLEtBQUQsRUFBUWdCLE1BQVIsRUFBbUI7QUFDckQ7QUFEcUQsTUFFdEMySSxVQUZzQyxHQUV4QjNJLE1BRndCLENBRTlDUyxNQUY4QztBQUFBLE1BRzlDakQsUUFIOEMsR0FHbEN3QixLQUhrQyxDQUc5Q3hCLFFBSDhDLEVBS3JEOztBQUNBLE1BQUksQ0FBQ0EsUUFBUSxDQUFDbUwsVUFBRCxDQUFiLEVBQTJCO0FBQ3pCLFdBQU8zSixLQUFQO0FBQ0Q7QUFFRDs7O0FBVnFELE1BWW5EOUIsTUFabUQsR0FjakQ4QixLQWRpRCxDQVluRDlCLE1BWm1EO0FBQUEsd0JBY2pEOEIsS0FkaUQsQ0FhbkR4QixRQWJtRDtBQUFBLE1BYTFCc0YsT0FiMEIsbUJBYXZDNkYsVUFidUM7QUFBQSxNQWFkQyxXQWJjLCtEQWF2Q0QsVUFidUM7QUFlckQ7O0FBRUEsTUFBTUUsT0FBTyxHQUFHM0wsTUFBTSxDQUFDNEwsTUFBUCxDQUFjLFVBQUNDLGFBQUQsRUFBZ0I5SixLQUFoQixFQUF1QitKLEtBQXZCLEVBQWlDO0FBQzdELFFBQUkvSixLQUFLLENBQUNTLE1BQU4sQ0FBYWUsTUFBYixLQUF3QmtJLFVBQTVCLEVBQXdDO0FBQ3RDO0FBQ0FJLE1BQUFBLGFBQWEsQ0FBQ0UsSUFBZCxDQUFtQkQsS0FBbkI7QUFDRDs7QUFDRCxXQUFPRCxhQUFQO0FBQ0QsR0FOZSxFQU1iLEVBTmEsQ0FBaEIsQ0FqQnFELENBeUJyRDs7QUF6QnFELHdCQTBCbENGLE9BQU8sQ0FBQ0MsTUFBUixDQUNqQixrQkFBeUM1SixHQUF6QyxFQUFpRDtBQUFBLFFBQXJDZ0ssWUFBcUMsVUFBL0MxSixRQUErQztBQUFBLFFBQXZCMkosWUFBdUIsVUFBdkJBLFlBQXVCO0FBQy9DLFFBQU1DLFlBQVksR0FBR2xLLEdBQUcsR0FBR2lLLFlBQTNCO0FBQ0FELElBQUFBLFlBQVksR0FBR3pCLGtCQUFrQixDQUFDeUIsWUFBRCxFQUFlO0FBQUNoSyxNQUFBQSxHQUFHLEVBQUVrSztBQUFOLEtBQWYsQ0FBakM7QUFDQUQsSUFBQUEsWUFBWTtBQUNaLFdBQU87QUFBQzNKLE1BQUFBLFFBQVEsRUFBRTBKLFlBQVg7QUFBeUJDLE1BQUFBLFlBQVksRUFBWkE7QUFBekIsS0FBUDtBQUNELEdBTmdCLEVBT2pCO0FBQUMzSixJQUFBQSxRQUFRLGtDQUFNUixLQUFOO0FBQWF4QixNQUFBQSxRQUFRLEVBQUVvTDtBQUF2QixNQUFUO0FBQThDTyxJQUFBQSxZQUFZLEVBQUU7QUFBNUQsR0FQaUIsQ0ExQmtDO0FBQUEsTUEwQjlDM0osUUExQjhDLG1CQTBCOUNBLFFBMUI4QyxFQW9DckQ7OztBQUNBLE1BQU1sQyxPQUFPLEdBQUcwQixLQUFLLENBQUMxQixPQUFOLENBQWN1RSxNQUFkLENBQXFCLFVBQUFBLE1BQU07QUFBQSxXQUFJLENBQUNBLE1BQU0sQ0FBQ3BCLE1BQVAsQ0FBY3VCLFFBQWQsQ0FBdUIyRyxVQUF2QixDQUFMO0FBQUEsR0FBM0IsQ0FBaEIsQ0FyQ3FELENBdUNyRDs7QUF2Q3FELE1Bd0NoRGhMLGlCQXhDZ0QsR0F3QzNCcUIsS0F4QzJCLENBd0NoRHJCLGlCQXhDZ0Q7QUFBQSwyQkF5Q25DQSxpQkF6Q21DO0FBQUEsTUF5QzlDMEwsT0F6QzhDLHNCQXlDOUNBLE9BekM4Qzs7QUEwQ3JELE1BQUlBLE9BQUosRUFBYTtBQUFBLFFBQ0ozSixNQURJLEdBQ00ySixPQUROLENBQ0ozSixNQURJO0FBRVg7O0FBRlcsK0JBR3FDQSxNQUFNLENBQUM0SixZQUg1QztBQUFBLFFBR1VDLE1BSFYsd0JBR0haLFVBSEc7QUFBQSxRQUdxQlcsWUFIckIsb0VBR0hYLFVBSEc7QUFJWDs7QUFDQWhMLElBQUFBLGlCQUFpQixtQ0FDWkEsaUJBRFk7QUFFZjBMLE1BQUFBLE9BQU8sa0NBQU1BLE9BQU47QUFBZTNKLFFBQUFBLE1BQU0sa0NBQU1BLE1BQU47QUFBYzRKLFVBQUFBLFlBQVksRUFBWkE7QUFBZDtBQUFyQjtBQUZRLE1BQWpCO0FBSUQ7O0FBRUQseUNBQVc5SixRQUFYO0FBQXFCbEMsSUFBQUEsT0FBTyxFQUFQQSxPQUFyQjtBQUE4QkssSUFBQUEsaUJBQWlCLEVBQWpCQTtBQUE5QjtBQUNELENBdERNO0FBd0RQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDTyxJQUFNNkwsMEJBQTBCLEdBQUcsU0FBN0JBLDBCQUE2QixDQUFDeEssS0FBRCxFQUFRZ0IsTUFBUjtBQUFBLHlDQUNyQ2hCLEtBRHFDO0FBRXhDbkIsSUFBQUEsYUFBYSxFQUFFbUMsTUFBTSxDQUFDeEQ7QUFGa0I7QUFBQSxDQUFuQztBQUtQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDTyxJQUFNaU4sdUJBQXVCLEdBQUcsU0FBMUJBLHVCQUEwQixDQUFDekssS0FBRCxFQUFRZ0IsTUFBUixFQUFtQjtBQUN4RCx5Q0FDS2hCLEtBREw7QUFFRXZCLElBQUFBLGNBQWMsRUFBRXVDLE1BQU0sQ0FBQ1M7QUFGekI7QUFJRCxDQUxNO0FBT1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUNPLElBQU1pSixxQkFBcUIsR0FBRyxTQUF4QkEscUJBQXdCLENBQUExSyxLQUFLO0FBQUEsdURBQ3JDbEMsaUJBRHFDLEdBRXJDa0MsS0FBSyxDQUFDMkssWUFGK0I7QUFHeENBLElBQUFBLFlBQVksRUFBRTNLLEtBQUssQ0FBQzJLO0FBSG9CO0FBQUEsQ0FBbkM7QUFNUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sSUFBTUMsdUJBQXVCLEdBQUcsU0FBMUJBLHVCQUEwQixDQUFDNUssS0FBRCxVQUFtRDtBQUFBLDhCQUExQzZLLE9BQTBDO0FBQUEsNkNBQWhDbkssTUFBZ0M7QUFBQSxNQUFoQ0EsTUFBZ0Msc0NBQXZCLEVBQXVCO0FBQUEsNkNBQW5Cb0ssT0FBbUI7QUFBQSxNQUFuQkEsT0FBbUIsc0NBQVQsRUFBUzs7QUFDeEYsTUFBSSxDQUFDcEssTUFBTSxDQUFDcUssUUFBWixFQUFzQjtBQUNwQixXQUFPL0ssS0FBUDtBQUNEOztBQUh1RixNQUtqRmdMLGtCQUxpRixHQUszREYsT0FMMkQsQ0FLakZFLGtCQUxpRixFQU94Rjs7QUFDQSxNQUFJQyxXQUFXLEdBQUcsQ0FBQ0Qsa0JBQUQsR0FBc0JOLHFCQUFxQixDQUFDMUssS0FBRCxDQUEzQyxHQUFxREEsS0FBdkU7O0FBUndGLDZDQVNuRUEsS0FBSyxDQUFDTCxPQVQ2RDtBQUFBOztBQUFBO0FBU3hGLHdEQUFvQztBQUFBLFVBQXpCdUwsTUFBeUI7O0FBQ2xDLFVBQUksbUNBQWNBLE1BQWQsS0FBeUJ4SyxNQUFNLENBQUNxSyxRQUFQLENBQWdCRyxNQUFNLENBQUMxSCxJQUF2QixDQUE3QixFQUEyRDtBQUN6RHlILFFBQUFBLFdBQVcsR0FBR0MsTUFBTSxDQUFDQyxLQUFQLENBQWFGLFdBQWIsRUFBMEJ2SyxNQUFNLENBQUNxSyxRQUFQLENBQWdCRyxNQUFNLENBQUMxSCxJQUF2QixDQUExQixFQUF3RCxJQUF4RCxDQUFkO0FBQ0Q7QUFDRjtBQWJ1RjtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQWV4RixTQUFPeUgsV0FBUDtBQUNELENBaEJNO0FBa0JQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDTyxJQUFNRyxpQkFBaUIsR0FBRyxTQUFwQkEsaUJBQW9CLENBQUNwTCxLQUFELEVBQVFnQixNQUFSO0FBQUEseUNBQzVCaEIsS0FENEI7QUFFL0JsQixJQUFBQSxTQUFTLEVBQUVrQyxNQUFNLENBQUNxSztBQUZhO0FBQUEsQ0FBMUI7QUFLUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sU0FBU0MsOEJBQVQsQ0FBd0N0TCxLQUF4QyxFQUErQ2dCLE1BQS9DLEVBQXVEO0FBQUEsTUFDckROLE1BRHFELEdBQzNDTSxNQUQyQyxDQUNyRE4sTUFEcUQ7O0FBRzVELE1BQU0vQixpQkFBaUIsbUNBQ2xCcUIsS0FBSyxDQUFDckIsaUJBRFksd0NBRWhCK0IsTUFBTSxDQUFDVSxFQUZTLEVBRUpWLE1BRkksRUFBdkIsQ0FINEQsQ0FRNUQ7QUFDQTs7O0FBQ0EsTUFBTTZLLFVBQVUsR0FBRyxDQUFDLE9BQUQsRUFBVSxTQUFWLENBQW5COztBQUVBLE1BQ0VBLFVBQVUsQ0FBQ3ZJLFFBQVgsQ0FBb0J0QyxNQUFNLENBQUNVLEVBQTNCLEtBQ0FWLE1BQU0sQ0FBQ0csT0FEUCxJQUVBLENBQUNiLEtBQUssQ0FBQ3JCLGlCQUFOLENBQXdCK0IsTUFBTSxDQUFDVSxFQUEvQixFQUFtQ1AsT0FIdEMsRUFJRTtBQUNBO0FBQ0EwSyxJQUFBQSxVQUFVLENBQUNDLE9BQVgsQ0FBbUIsVUFBQUMsQ0FBQyxFQUFJO0FBQ3RCLFVBQUlBLENBQUMsS0FBSy9LLE1BQU0sQ0FBQ1UsRUFBakIsRUFBcUI7QUFDbkJ6QyxRQUFBQSxpQkFBaUIsQ0FBQzhNLENBQUQsQ0FBakIsbUNBQTJCOU0saUJBQWlCLENBQUM4TSxDQUFELENBQTVDO0FBQWlENUssVUFBQUEsT0FBTyxFQUFFO0FBQTFEO0FBQ0Q7QUFDRixLQUpEO0FBS0Q7O0FBRUQsTUFBTUwsUUFBUSxtQ0FDVFIsS0FEUztBQUVackIsSUFBQUEsaUJBQWlCLEVBQWpCQTtBQUZZLElBQWQ7O0FBS0EsTUFBSStCLE1BQU0sQ0FBQ1UsRUFBUCxLQUFjLFVBQWQsSUFBNEIsQ0FBQ1YsTUFBTSxDQUFDRyxPQUF4QyxFQUFpRDtBQUMvQyxXQUFPNkksb0JBQW9CLENBQUNsSixRQUFELEVBQVc7QUFBQ2lCLE1BQUFBLE1BQU0sRUFBRTtBQUFULEtBQVgsQ0FBM0I7QUFDRDs7QUFFRCxTQUFPakIsUUFBUDtBQUNEO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxJQUFNa0wsaUJBQWlCLEdBQUcsU0FBcEJBLGlCQUFvQixDQUFDMUwsS0FBRCxFQUFRZ0IsTUFBUjtBQUFBLHlDQUM1QmhCLEtBRDRCO0FBRS9CaEIsSUFBQUEsUUFBUSxFQUFFZ0IsS0FBSyxDQUFDckIsaUJBQU4sQ0FBd0JnTixVQUF4QixDQUFtQzlLLE9BQW5DLG1DQUVEYixLQUFLLENBQUNoQixRQUZMO0FBR0o0TSxNQUFBQSxNQUFNLEVBQUU1TCxLQUFLLENBQUNoQixRQUFOLENBQWU0TSxNQUFmLEdBQXdCLElBQXhCLEdBQStCLHdCQUFVNUwsS0FBSyxDQUFDaEIsUUFBaEI7QUFIbkMsU0FLTmdCLEtBQUssQ0FBQ2hCLFFBUHFCO0FBUS9CRCxJQUFBQSxPQUFPLEVBQUVpQyxNQUFNLENBQUNxSyxJQUFQLElBQWVySyxNQUFNLENBQUNxSyxJQUFQLENBQVlRLE1BQTNCLEdBQW9DN0ssTUFBTSxDQUFDcUssSUFBM0MsR0FBa0Q7QUFSNUI7QUFBQSxDQUExQjtBQVdQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDTyxJQUFNUyxlQUFlLEdBQUcsU0FBbEJBLGVBQWtCLENBQUE5TCxLQUFLLEVBQUk7QUFDdEMseUNBQ0tBLEtBREw7QUFFRWpCLElBQUFBLE9BQU8sRUFBRTtBQUZYO0FBSUQsQ0FMTTtBQU9QO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDTyxJQUFNZ04sZ0JBQWdCLEdBQUcsU0FBbkJBLGdCQUFtQixDQUFDL0wsS0FBRCxVQUFrQjtBQUFBLE1BQVRnTSxHQUFTLFVBQVRBLEdBQVM7O0FBQ2hELE1BQUkxSyxNQUFNLENBQUMySyxNQUFQLENBQWNqTSxLQUFLLENBQUNyQixpQkFBcEIsRUFBdUN1TixJQUF2QyxDQUE0QyxVQUFBeEwsTUFBTTtBQUFBLFdBQUlBLE1BQU0sQ0FBQ0csT0FBWDtBQUFBLEdBQWxELENBQUosRUFBMkU7QUFDekUsMkNBQ0tiLEtBREw7QUFFRWhCLE1BQUFBLFFBQVEsa0NBQ0hnQixLQUFLLENBQUNoQixRQURIO0FBRU5tTixRQUFBQSxhQUFhLHNDQUFNSCxHQUFHLENBQUNJLEtBQVYsQ0FGUDtBQUdOVCxRQUFBQSxVQUFVLHNDQUFNSyxHQUFHLENBQUNLLE1BQVY7QUFISjtBQUZWO0FBUUQ7O0FBRUQsU0FBT3JNLEtBQVA7QUFDRCxDQWJNO0FBY1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUNPLElBQU1zTSxxQkFBcUIsR0FBRyxTQUF4QkEscUJBQXdCLENBQUN0TSxLQUFELEVBQVFnQixNQUFSO0FBQUEsU0FDbkNoQixLQUFLLENBQUNmLFNBQU4sSUFBbUJlLEtBQUssQ0FBQ2YsU0FBTixDQUFnQndCLE1BQWhCLEtBQTJCLENBQTlDLG1DQUVTVCxLQUZUO0FBR007QUFDQTtBQUNBZixJQUFBQSxTQUFTLEVBQUUsMENBQXNCZSxLQUFLLENBQUM5QixNQUE1QjtBQUxqQixPQU9JcU8sdUJBQXVCLENBQUN2TSxLQUFELEVBQVFnQixNQUFSLENBUlE7QUFBQSxDQUE5QjtBQVVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDTyxJQUFNd0wsd0JBQXdCLEdBQUcsU0FBM0JBLHdCQUEyQixDQUFDeE0sS0FBRCxVQUFnQztBQUFBLE1BQXZCeU0sUUFBdUIsVUFBdkJBLFFBQXVCO0FBQUEsTUFBYnJHLE9BQWEsVUFBYkEsT0FBYTtBQUFBLE1BQy9EbkgsU0FEK0QsR0FDbERlLEtBRGtELENBQy9EZixTQUQrRDtBQUd0RSx5Q0FDS2UsS0FETDtBQUVFZixJQUFBQSxTQUFTLEVBQUVBLFNBQVMsQ0FBQ2tCLEdBQVYsQ0FBYyxVQUFDdU0sRUFBRCxFQUFLck0sQ0FBTDtBQUFBLGFBQ3ZCQSxDQUFDLEtBQUtvTSxRQUFOLG1DQUVTeE4sU0FBUyxDQUFDb0IsQ0FBRCxDQUZsQjtBQUdNbkMsUUFBQUEsTUFBTSxrQ0FDRGUsU0FBUyxDQUFDb0IsQ0FBRCxDQUFULENBQWFuQyxNQURaLDRDQUdIa0ksT0FIRyxFQUdPLENBQUNuSCxTQUFTLENBQUNvQixDQUFELENBQVQsQ0FBYW5DLE1BQWIsQ0FBb0JrSSxPQUFwQixDQUhSO0FBSFosV0FTSXNHLEVBVm1CO0FBQUEsS0FBZDtBQUZiO0FBZUQsQ0FsQk07QUFvQlA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBO0FBQ0E7Ozs7O0FBQ08sSUFBTUMsb0JBQW9CLEdBQUcsU0FBdkJBLG9CQUF1QixDQUFDM00sS0FBRCxFQUFRZ0IsTUFBUixFQUFtQjtBQUNyRDtBQURxRCxNQUU5Q04sTUFGOEMsR0FFM0JNLE1BRjJCLENBRTlDTixNQUY4QztBQUFBLE1BRXRDb0ssT0FGc0MsR0FFM0I5SixNQUYyQixDQUV0QzhKLE9BRnNDO0FBR3JELE1BQU10TSxRQUFRLEdBQUcsb0JBQVF3QyxNQUFNLENBQUN4QyxRQUFmLENBQWpCO0FBRUEsTUFBTW9PLGNBQWMsR0FBR3BPLFFBQVEsQ0FBQ3NMLE1BQVQsQ0FDckIsVUFBQytDLElBQUQ7QUFBQSxxRkFBOEIsRUFBOUI7QUFBQSw2QkFBUXhCLElBQVI7QUFBQSxRQUFRQSxJQUFSLDRCQUFlLEVBQWY7QUFBQSxRQUFzQnlCLElBQXRCOztBQUFBLDJDQUNLRCxJQURMLEdBRU07QUFBb0J4QixNQUFBQSxJQUFJLEVBQUpBO0FBQXBCLE9BQTZCeUIsSUFBN0IsR0FBb0M5TSxLQUFLLENBQUN4QixRQUExQyxLQUF1RCxFQUY3RDtBQUFBLEdBRHFCLEVBS3JCLEVBTHFCLENBQXZCO0FBUUEsTUFBTXVPLFNBQVMsR0FBR3pMLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZcUwsY0FBWixFQUE0Qm5NLE1BQTVCLEdBQXFDLENBQXZELENBYnFELENBZXJEOztBQUNBLE1BQU11TSxhQUFhLEdBQUd0TSxNQUFNLEdBQ3hCa0ssdUJBQXVCLENBQUM1SyxLQUFELEVBQVE7QUFDN0I2SyxJQUFBQSxPQUFPLEVBQUU7QUFBQ25LLE1BQUFBLE1BQU0sRUFBTkEsTUFBRDtBQUFTb0ssTUFBQUEsT0FBTyxFQUFQQTtBQUFUO0FBRG9CLEdBQVIsQ0FEQyxHQUl4QjlLLEtBSko7O0FBTUEsTUFBSWlMLFdBQVcsbUNBQ1YrQixhQURVO0FBRWJ4TyxJQUFBQSxRQUFRLGtDQUNId08sYUFBYSxDQUFDeE8sUUFEWCxHQUVIb08sY0FGRztBQUZLLElBQWYsQ0F0QnFELENBOEJyRDs7O0FBOUJxRCw4Q0ErQmhDM0IsV0FBVyxDQUFDdEwsT0EvQm9CO0FBQUE7O0FBQUE7QUErQnJELDJEQUEwQztBQUFBLFVBQS9CdUwsTUFBK0I7O0FBQ3hDLFVBQUksbUNBQWNBLE1BQWQsS0FBeUJBLE1BQU0sQ0FBQytCLFdBQWhDLElBQStDaEMsV0FBVyxDQUFDQyxNQUFNLENBQUMrQixXQUFSLENBQTlELEVBQW9GO0FBQ2xGLFlBQU1DLE9BQU8sR0FBR2pDLFdBQVcsQ0FBQ0MsTUFBTSxDQUFDK0IsV0FBUixDQUEzQjtBQUNBaEMsUUFBQUEsV0FBVyxDQUFDQyxNQUFNLENBQUMrQixXQUFSLENBQVgsR0FBa0NuUCxpQkFBaUIsQ0FBQ29OLE1BQU0sQ0FBQytCLFdBQVIsQ0FBbkQ7QUFDQWhDLFFBQUFBLFdBQVcsR0FBR0MsTUFBTSxDQUFDQyxLQUFQLENBQWFGLFdBQWIsRUFBMEJpQyxPQUExQixDQUFkO0FBQ0Q7QUFDRjtBQXJDb0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUF1Q3JELE1BQUlDLFNBQVMsR0FBRyxDQUFDSixTQUFELEdBQ1o5QixXQUFXLENBQUMvTSxNQUFaLENBQW1CMkUsTUFBbkIsQ0FBMEIsVUFBQTFCLENBQUM7QUFBQSxXQUFJQSxDQUFDLENBQUNULE1BQUYsQ0FBU2UsTUFBVCxJQUFtQk4sQ0FBQyxDQUFDVCxNQUFGLENBQVNlLE1BQVQsSUFBbUJtTCxjQUExQztBQUFBLEdBQTNCLENBRFksR0FFWixFQUZKOztBQUlBLE1BQUksQ0FBQ08sU0FBUyxDQUFDMU0sTUFBWCxJQUFxQixDQUFDcUssT0FBTyxJQUFJLEVBQVosRUFBZ0JzQyxnQkFBaEIsS0FBcUMsS0FBOUQsRUFBcUU7QUFDbkU7QUFDQSxRQUFNOUUsTUFBTSxHQUFHK0UsZ0JBQWdCLENBQUNwQyxXQUFELEVBQWMyQixjQUFkLENBQS9CO0FBQ0EzQixJQUFBQSxXQUFXLEdBQUczQyxNQUFNLENBQUN0SSxLQUFyQjtBQUNBbU4sSUFBQUEsU0FBUyxHQUFHN0UsTUFBTSxDQUFDNkUsU0FBbkI7QUFDRDs7QUFFRCxNQUFJbEMsV0FBVyxDQUFDaE0sU0FBWixDQUFzQndCLE1BQTFCLEVBQWtDO0FBQ2hDO0FBQ0EwTSxJQUFBQSxTQUFTLEdBQUdsQyxXQUFXLENBQUMvTSxNQUFaLENBQW1CMkUsTUFBbkIsQ0FDVixVQUFBMUIsQ0FBQztBQUFBLGFBQUlBLENBQUMsQ0FBQ1QsTUFBRixDQUFTZSxNQUFULElBQW1CTixDQUFDLENBQUNULE1BQUYsQ0FBU2UsTUFBVCxJQUFtQm1MLGNBQTFDO0FBQUEsS0FEUyxDQUFaO0FBR0EzQixJQUFBQSxXQUFXLG1DQUNOQSxXQURNO0FBRVRoTSxNQUFBQSxTQUFTLEVBQUUsMkNBQXVCZ00sV0FBVyxDQUFDaE0sU0FBbkMsRUFBOENrTyxTQUE5QztBQUZGLE1BQVg7QUFJRCxHQTNEb0QsQ0E2RHJEOzs7QUFDQTdMLEVBQUFBLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZcUwsY0FBWixFQUE0QnBCLE9BQTVCLENBQW9DLFVBQUEvSixNQUFNLEVBQUk7QUFDNUMsUUFBTTZMLGFBQWEsR0FBR3JDLFdBQVcsQ0FBQ3RNLGlCQUFaLENBQThCMEwsT0FBOUIsQ0FBc0MzSixNQUF0QyxDQUE2QzRKLFlBQTdDLENBQTBEN0ksTUFBMUQsQ0FBdEI7O0FBQ0EsUUFBSSxDQUFDOEwsS0FBSyxDQUFDQyxPQUFOLENBQWNGLGFBQWQsQ0FBRCxJQUFpQyxDQUFDQSxhQUFhLENBQUM3TSxNQUFwRCxFQUE0RDtBQUMxRHdLLE1BQUFBLFdBQVcsR0FBR3dDLGtCQUFrQixDQUFDeEMsV0FBRCxFQUFjMkIsY0FBYyxDQUFDbkwsTUFBRCxDQUE1QixDQUFoQztBQUNEO0FBQ0YsR0FMRDtBQU9BLE1BQUlpTSxZQUFZLEdBQUc1Ryx3QkFBd0IsQ0FDekNtRSxXQUR5QyxFQUV6QzhCLFNBQVMsR0FBR3pMLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZMEosV0FBVyxDQUFDek0sUUFBeEIsQ0FBSCxHQUF1QzhDLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZcUwsY0FBWixDQUZQLEVBR3pDbE8sU0FIeUMsQ0FBM0MsQ0FyRXFELENBMkVyRDtBQUNBOztBQUNBZ1AsRUFBQUEsWUFBWSxHQUFHNU0scUJBQXFCLENBQUM0TSxZQUFELENBQXBDO0FBRUEsU0FBT0EsWUFBUDtBQUNELENBaEZNO0FBaUZQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDTyxTQUFTQyxvQkFBVCxDQUE4QjNOLEtBQTlCLEVBQXFDZ0IsTUFBckMsRUFBNkM7QUFBQSxNQUMzQ1MsTUFEMkMsR0FDMUJULE1BRDBCLENBQzNDUyxNQUQyQztBQUFBLE1BQ25DeUgsS0FEbUMsR0FDMUJsSSxNQUQwQixDQUNuQ2tJLEtBRG1DO0FBQUEsTUFFM0MxSyxRQUYyQyxHQUUvQndCLEtBRitCLENBRTNDeEIsUUFGMkM7QUFHbEQsTUFBTW9QLFFBQVEsR0FBR3BQLFFBQVEsQ0FBQ2lELE1BQUQsQ0FBekIsQ0FIa0QsQ0FJbEQ7O0FBQ0EsU0FBT21NLFFBQVEsbUNBRU41TixLQUZNO0FBR1R4QixJQUFBQSxRQUFRLGtDQUNIQSxRQURHLDRDQUVMaUQsTUFGSyxrQ0FHRG1NLFFBSEM7QUFJSjFFLE1BQUFBLEtBQUssRUFBTEE7QUFKSTtBQUhDLE9BV1g7QUFDQWxKLEVBQUFBLEtBWko7QUFhRDtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ08sU0FBU3VNLHVCQUFULENBQWlDdk0sS0FBakMsRUFBd0NnQixNQUF4QyxFQUFnRDtBQUNyRDtBQUNBLE1BQU02TSxlQUFlLEdBQUcsSUFBSTdNLE1BQU0sQ0FBQzZKLE9BQW5DO0FBQ0EsTUFBTWlELFNBQVMsR0FBRzlOLEtBQUssQ0FBQ2YsU0FBTixDQUFnQjRPLGVBQWhCLEVBQWlDM1AsTUFBbkQ7QUFIcUQsTUFJOUNBLE1BSjhDLEdBSXBDOEIsS0FKb0MsQ0FJOUM5QixNQUo4QyxFQU1yRDs7QUFDQSxNQUFNaVAsU0FBUyxHQUFHalAsTUFBTSxDQUFDaUMsR0FBUCxDQUFXLFVBQUFGLEtBQUs7QUFBQSxXQUNoQyxDQUFDNk4sU0FBUyxDQUFDN04sS0FBSyxDQUFDbUIsRUFBUCxDQUFWLElBQXdCbkIsS0FBSyxDQUFDUyxNQUFOLENBQWFDLFNBQXJDLEdBQ0lWLEtBQUssQ0FBQytCLGlCQUFOLENBQXdCO0FBQ3RCO0FBQ0FyQixNQUFBQSxTQUFTLEVBQUU7QUFGVyxLQUF4QixDQURKLEdBS0lWLEtBTjRCO0FBQUEsR0FBaEIsQ0FBbEIsQ0FQcUQsQ0FnQnJEOztBQUNBLHlDQUNLRCxLQURMO0FBRUU5QixJQUFBQSxNQUFNLEVBQUVpUCxTQUZWO0FBR0VsTyxJQUFBQSxTQUFTLEVBQUU7QUFIYjtBQUtEO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxJQUFNOE8sZ0JBQWdCLEdBQUcsU0FBbkJBLGdCQUFtQixDQUFDL04sS0FBRCxFQUFRZ0IsTUFBUixFQUFtQjtBQUFBLE1BQzFDZ04sS0FEMEMsR0FDSmhOLE1BREksQ0FDMUNnTixLQUQwQztBQUFBLHlCQUNKaE4sTUFESSxDQUNuQ2lOLFFBRG1DO0FBQUEsTUFDbkNBLFFBRG1DLGlDQUN4QkMsaUNBRHdCOztBQUVqRCxNQUFJLENBQUNGLEtBQUssQ0FBQ3ZOLE1BQVgsRUFBbUI7QUFDakIsV0FBT1QsS0FBUDtBQUNEOztBQUVELE1BQU1SLG1CQUFtQixHQUFHK04sS0FBSyxDQUFDWSxJQUFOLENBQVdILEtBQVgsRUFBa0JsRSxNQUFsQixDQUMxQixVQUFDK0MsSUFBRCxFQUFPOUosQ0FBUCxFQUFVMUMsQ0FBVjtBQUFBLFdBQWdCLDZCQUFPK04sMEJBQTBCLENBQUNyTCxDQUFELEVBQUkxQyxDQUFKLENBQWpDLEVBQXlDd00sSUFBekMsQ0FBaEI7QUFBQSxHQUQwQixFQUUxQixFQUYwQixDQUE1QjtBQUtBLE1BQU10TixXQUFXLEdBQUc7QUFDbEI4TyxJQUFBQSxTQUFTLEVBQUUsRUFETztBQUVsQkMsSUFBQUEsV0FBVyxFQUFFTixLQUZLO0FBR2xCQyxJQUFBQSxRQUFRLEVBQVJBO0FBSGtCLEdBQXBCO0FBTUEsTUFBTTVFLFNBQVMsR0FBRyw2QkFBTztBQUFDN0osSUFBQUEsbUJBQW1CLEVBQW5CQSxtQkFBRDtBQUFzQkQsSUFBQUEsV0FBVyxFQUFYQTtBQUF0QixHQUFQLEVBQTJDUyxLQUEzQyxDQUFsQjtBQUVBLFNBQU91TyxtQkFBbUIsQ0FBQ2xGLFNBQUQsQ0FBMUI7QUFDRCxDQXBCTTtBQXNCUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sU0FBU21GLDBCQUFULENBQW9DeE8sS0FBcEMsRUFBMkNnQixNQUEzQyxFQUFtRDtBQUN4RCxNQUFJLENBQUNoQixLQUFLLENBQUNULFdBQVgsRUFBd0I7QUFDdEIsV0FBT1MsS0FBUDtBQUNEOztBQUh1RCxNQUlqRHlPLFFBSmlELEdBSTFCek4sTUFKMEIsQ0FJakR5TixRQUppRDtBQUFBLE1BSXZDSixTQUp1QyxHQUkxQnJOLE1BSjBCLENBSXZDcU4sU0FKdUM7QUFBQSwyQkFLeEJyTyxLQUFLLENBQUNULFdBTGtCO0FBQUEsTUFLakQrTyxXQUxpRCxzQkFLakRBLFdBTGlEO0FBQUEsTUFLcENMLFFBTG9DLHNCQUtwQ0EsUUFMb0M7QUFNeEQsTUFBTVMsaUJBQWlCLEdBQUdDLGdDQUFnQyxDQUFDM08sS0FBRCxFQUFRO0FBQ2hFeU8sSUFBQUEsUUFBUSxFQUFSQSxRQURnRTtBQUVoRUcsSUFBQUEsUUFBUSxFQUFFO0FBQUNDLE1BQUFBLE9BQU8sRUFBRSxDQUFWO0FBQWFDLE1BQUFBLE9BQU8sRUFBRTtBQUF0QjtBQUZzRCxHQUFSLENBQTFELENBTndELENBV3hEOztBQUNBLE1BQU1DLGNBQWMsR0FBRyw0QkFBTSxhQUFOLEVBQXFCLDZCQUFPO0FBQUNWLElBQUFBLFNBQVMsRUFBVEE7QUFBRCxHQUFQLENBQXJCLEVBQTBDSyxpQkFBMUMsQ0FBdkI7QUFFQSxTQUFPLHFCQUNMSyxjQURLLEVBRUwsd0JBQVcsR0FBWCxFQUFnQjVPLEdBQWhCLENBQW9CbU8sV0FBVyxDQUFDN04sTUFBWixHQUFxQnVPLDZCQUFyQixHQUFvQztBQUFBLFdBQU1mLFFBQVEsQ0FBQ0ksU0FBRCxDQUFkO0FBQUEsR0FBeEQsQ0FGSyxDQUFQO0FBSUQsQyxDQUVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ08sU0FBU0UsbUJBQVQsQ0FBNkJ2TyxLQUE3QixFQUFvQztBQUN6QyxNQUFJLENBQUNBLEtBQUssQ0FBQ1QsV0FBWCxFQUF3QjtBQUN0QixXQUFPUyxLQUFQO0FBQ0Q7O0FBSHdDLE1BSWxDc08sV0FKa0MsR0FJbkJ0TyxLQUFLLENBQUNULFdBSmEsQ0FJbEMrTyxXQUprQzs7QUFBQSwrQ0FLREEsV0FMQztBQUFBLE1BS2xDVyxJQUxrQztBQUFBLE1BS3pCQyxvQkFMeUIsMEJBT3pDOzs7QUFDQSxNQUFNN0YsU0FBUyxHQUFHLDRCQUFNLGFBQU4sRUFBcUIsNkJBQU87QUFBQ2lGLElBQUFBLFdBQVcsRUFBRVk7QUFBZCxHQUFQLENBQXJCLEVBQWtFbFAsS0FBbEUsQ0FBbEI7QUFFQSxNQUFNME8saUJBQWlCLEdBQUdDLGdDQUFnQyxDQUFDdEYsU0FBRCxFQUFZO0FBQ3BFb0YsSUFBQUEsUUFBUSxFQUFFUSxJQUFJLENBQUNyTSxJQURxRDtBQUVwRWdNLElBQUFBLFFBQVEsRUFBRTtBQUFDQyxNQUFBQSxPQUFPLEVBQUUsQ0FBVjtBQUFhQyxNQUFBQSxPQUFPLEVBQUU7QUFBdEI7QUFGMEQsR0FBWixDQUExRDtBQVZ5QyxNQWVsQ3JQLE9BZmtDLEdBZVZPLEtBZlUsQ0FlbENQLE9BZmtDO0FBQUEsTUFlekJDLFdBZnlCLEdBZVZNLEtBZlUsQ0FlekJOLFdBZnlCO0FBZ0J6QyxTQUFPLHFCQUNMZ1AsaUJBREssRUFFTFMsZ0JBQWdCLENBQUNGLElBQUQsRUFBTzVGLFNBQVMsQ0FBQzlKLFdBQVYsQ0FBc0I4TyxTQUE3QixFQUF3QzVPLE9BQXhDLEVBQWlEQyxXQUFqRCxDQUZYLENBQVA7QUFJRDs7QUFFTSxTQUFTeVAsZ0JBQVQsQ0FBMEJGLElBQTFCLEVBQWdDWixTQUFoQyxFQUEyRTtBQUFBLE1BQWhDNU8sT0FBZ0MsdUVBQXRCLEVBQXNCO0FBQUEsTUFBbEJDLFdBQWtCLHVFQUFKLEVBQUk7QUFDaEYsU0FBTyw0QkFBZTtBQUFDdVAsSUFBQUEsSUFBSSxFQUFKQSxJQUFEO0FBQU9aLElBQUFBLFNBQVMsRUFBVEEsU0FBUDtBQUFrQjVPLElBQUFBLE9BQU8sRUFBUEEsT0FBbEI7QUFBMkJDLElBQUFBLFdBQVcsRUFBWEE7QUFBM0IsR0FBZixFQUF3RDBQLEtBQXhELEVBQ0w7QUFDQTtBQUNBLFlBQUFDLEdBQUc7QUFBQSxXQUNELG9DQUFjO0FBQ1pBLE1BQUFBLEdBQUcsRUFBSEEsR0FEWTtBQUVaWixNQUFBQSxRQUFRLEVBQUVRLElBQUksQ0FBQ3JNLElBRkg7QUFHWnFMLE1BQUFBLFFBQVEsRUFBRSxrQkFBQTNGLE1BQU07QUFBQSxlQUNkLHlDQUFtQjtBQUNqQmdILFVBQUFBLE9BQU8sRUFBRWhILE1BRFE7QUFFakIrRixVQUFBQSxTQUFTLEVBQVRBO0FBRmlCLFNBQW5CLENBRGM7QUFBQTtBQUhKLEtBQWQsQ0FEQztBQUFBLEdBSEUsRUFjTDtBQUNBLFlBQUFrQixHQUFHO0FBQUEsV0FBSSxtQ0FBYU4sSUFBSSxDQUFDck0sSUFBbEIsRUFBd0IyTSxHQUF4QixDQUFKO0FBQUEsR0FmRSxDQUFQO0FBaUJEO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxTQUFTQyx5QkFBVCxDQUFtQ3hQLEtBQW5DLEVBQTBDZ0IsTUFBMUMsRUFBa0Q7QUFBQSx3QkFDMUJBLE1BQU0sQ0FBQzZKLE9BRG1CO0FBQUEsTUFDaER5RSxPQURnRCxtQkFDaERBLE9BRGdEO0FBQUEsTUFDdkNqQixTQUR1QyxtQkFDdkNBLFNBRHVDO0FBR3ZELE1BQU1LLGlCQUFpQixHQUFHQyxnQ0FBZ0MsQ0FBQzNPLEtBQUQsRUFBUTtBQUNoRXlPLElBQUFBLFFBQVEsRUFBRWEsT0FBTyxDQUFDYixRQUQ4QztBQUVoRUcsSUFBQUEsUUFBUSxFQUFFO0FBQUNDLE1BQUFBLE9BQU8sRUFBRSxDQUFWO0FBQWFDLE1BQUFBLE9BQU8sRUFBRTtBQUF0QjtBQUZzRCxHQUFSLENBQTFEO0FBS0EsU0FBTyxxQkFDTEosaUJBREssRUFFTCwrQkFBa0I7QUFBQ1ksSUFBQUEsT0FBTyxFQUFQQSxPQUFEO0FBQVVqQixJQUFBQSxTQUFTLEVBQVRBO0FBQVYsR0FBbEIsRUFBd0NlLEtBQXhDLENBQ0UsVUFBQTlHLE1BQU07QUFBQSxXQUFJLDBDQUFvQjtBQUFDbUcsTUFBQUEsUUFBUSxFQUFFYSxPQUFPLENBQUNiLFFBQW5CO0FBQTZCSixNQUFBQSxTQUFTLEVBQUUvRjtBQUF4QyxLQUFwQixDQUFKO0FBQUEsR0FEUixFQUVFLFVBQUFpSCxHQUFHO0FBQUEsV0FBSSxtQ0FBYUQsT0FBTyxDQUFDYixRQUFyQixFQUErQmMsR0FBL0IsQ0FBSjtBQUFBLEdBRkwsQ0FGSyxDQUFQO0FBT0Q7O0FBRU0sU0FBU0UsYUFBVCxHQUFvRDtBQUFBLE1BQTdCQyxZQUE2Qix1RUFBZCxFQUFjO0FBQUEsTUFBVmQsUUFBVTs7QUFDekQ7QUFDQTtBQUNBLE1BQUksQ0FBQ0EsUUFBRCxJQUFhLENBQUNBLFFBQVEsQ0FBQ0MsT0FBM0IsRUFBb0M7QUFDbEMsV0FBTyxFQUFQO0FBQ0Q7O0FBRUQsU0FBTztBQUNMQSxJQUFBQSxPQUFPLEVBQUVELFFBQVEsQ0FBQ0M7QUFEYixHQUFQO0FBR0Q7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLElBQU1jLG9CQUFvQixHQUFHLFNBQXZCQSxvQkFBdUIsQ0FDbEMzUCxLQURrQyxVQUcvQjtBQUFBLDhCQURGNkssT0FDRTtBQUFBLE1BRFF3RSxHQUNSLGtCQURRQSxHQUNSO0FBQUEsTUFEYVosUUFDYixrQkFEYUEsUUFDYjtBQUFBLE1BRHVCRyxRQUN2QixrQkFEdUJBLFFBQ3ZCO0FBQUEsTUFEaUNnQixXQUNqQyxrQkFEaUNBLFdBQ2pDO0FBQUEsTUFEOEMzQixRQUM5QyxrQkFEOENBLFFBQzlDO0FBQ0gsTUFBTVMsaUJBQWlCLEdBQUdDLGdDQUFnQyxDQUFDM08sS0FBRCxFQUFRO0FBQ2hFeU8sSUFBQUEsUUFBUSxFQUFSQSxRQURnRTtBQUVoRUcsSUFBQUEsUUFBUSxFQUFFYSxhQUFhLENBQUN6UCxLQUFLLENBQUNSLG1CQUFOLENBQTBCaVAsUUFBMUIsQ0FBRCxFQUFzQ0csUUFBdEM7QUFGeUMsR0FBUixDQUExRDtBQUlBLFNBQU8scUJBQ0xGLGlCQURLLEVBRUwseUJBQVlXLEdBQUcsQ0FBQ1EsSUFBSixFQUFaLEVBQXdCVCxLQUF4QixDQUNFLGtCQUFtQjtBQUFBLFFBQWpCM0wsS0FBaUIsVUFBakJBLEtBQWlCO0FBQUEsUUFBVnFNLElBQVUsVUFBVkEsSUFBVTtBQUNqQixXQUFPQSxJQUFJLEdBQ1A3QixRQUFRLENBQUMyQixXQUFELENBREQsR0FFUCxvQ0FBYztBQUNaUCxNQUFBQSxHQUFHLEVBQUhBLEdBRFk7QUFFWlosTUFBQUEsUUFBUSxFQUFSQSxRQUZZO0FBR1pHLE1BQUFBLFFBQVEsRUFBRW5MLEtBQUssQ0FBQ21MLFFBSEo7QUFJWmdCLE1BQUFBLFdBQVcsRUFBRW5NLEtBSkQ7QUFLWndLLE1BQUFBLFFBQVEsRUFBUkE7QUFMWSxLQUFkLENBRko7QUFTRCxHQVhILEVBWUUsVUFBQXNCLEdBQUc7QUFBQSxXQUFJLG1DQUFhZCxRQUFiLEVBQXVCYyxHQUF2QixDQUFKO0FBQUEsR0FaTCxDQUZLLENBQVA7QUFpQkQsQ0F6Qk07QUEyQlA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUNPLElBQU1RLG1CQUFtQixHQUFHLFNBQXRCQSxtQkFBc0IsQ0FBQy9QLEtBQUQsVUFBOEI7QUFBQSxNQUFyQjBFLEtBQXFCLFVBQXJCQSxLQUFxQjtBQUFBLE1BQWQrSixRQUFjLFVBQWRBLFFBQWM7O0FBQy9EO0FBQ0FoSyxrQkFBUTRELElBQVIsQ0FBYTNELEtBQWI7O0FBQ0EsTUFBSSxDQUFDMUUsS0FBSyxDQUFDVCxXQUFYLEVBQXdCO0FBQ3RCLFdBQU9TLEtBQVA7QUFDRDs7QUFMOEQsNEJBTXBCQSxLQUFLLENBQUNULFdBTmM7QUFBQSxNQU14RCtPLFdBTndELHVCQU14REEsV0FOd0Q7QUFBQSxNQU0zQ0wsUUFOMkMsdUJBTTNDQSxRQU4yQztBQUFBLE1BTWpDSSxTQU5pQyx1QkFNakNBLFNBTmlDO0FBUS9ELE1BQU1oRixTQUFTLEdBQUdzRixnQ0FBZ0MsQ0FBQzNPLEtBQUQsRUFBUTtBQUN4RHlPLElBQUFBLFFBQVEsRUFBUkEsUUFEd0Q7QUFFeERHLElBQUFBLFFBQVEsRUFBRTtBQUFDbEssTUFBQUEsS0FBSyxFQUFMQTtBQUFEO0FBRjhDLEdBQVIsQ0FBbEQsQ0FSK0QsQ0FhL0Q7O0FBQ0EsU0FBTyxxQkFDTDJFLFNBREssRUFFTCx3QkFBVyxHQUFYLEVBQWdCbEosR0FBaEIsQ0FBb0JtTyxXQUFXLENBQUM3TixNQUFaLEdBQXFCdU8sNkJBQXJCLEdBQW9DO0FBQUEsV0FBTWYsUUFBUSxDQUFDSSxTQUFELENBQWQ7QUFBQSxHQUF4RCxDQUZLLENBQVA7QUFJRCxDQWxCTTtBQW9CUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sSUFBTTJCLHFCQUFxQixHQUFHLFNBQXhCQSxxQkFBd0IsQ0FBQ2hRLEtBQUQsVUFBcUI7QUFBQSxNQUFaeUIsTUFBWSxVQUFaQSxNQUFZO0FBQ3hEO0FBQ0EsTUFBTXdPLE9BQU8sR0FBRyxvQkFBUXhPLE1BQVIsQ0FBaEI7QUFFQSxTQUFPd08sT0FBTyxDQUFDbkcsTUFBUixDQUFlLFVBQUMrQyxJQUFELEVBQU96TCxFQUFQO0FBQUEsV0FBYyxtQ0FBaUJ5TCxJQUFqQixFQUF1QnpMLEVBQXZCLENBQWQ7QUFBQSxHQUFmLEVBQXlEcEIsS0FBekQsQ0FBUDtBQUNELENBTE07QUFPUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sSUFBTWtRLGlCQUFpQixHQUFHLFNBQXBCQSxpQkFBb0IsQ0FBQ2xRLEtBQUQsRUFBUWdCLE1BQVI7QUFBQSx5Q0FDNUJoQixLQUQ0QjtBQUUvQmpDLElBQUFBLE9BQU8sa0NBQ0ZpQyxLQUFLLENBQUNqQyxPQURKLEdBRUZpRCxNQUFNLENBQUNxSyxJQUZMO0FBRndCO0FBQUEsQ0FBMUI7QUFPUDtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDTyxTQUFTZ0MsZ0JBQVQsQ0FBMEJyTixLQUExQixFQUFpQ3hCLFFBQWpDLEVBQTJDO0FBQ2hEO0FBQ0EsTUFBTTJSLEtBQUssR0FBRyxFQUFkO0FBQ0EsTUFBTUMsYUFBYSxHQUFHOU8sTUFBTSxDQUFDMkssTUFBUCxDQUFjek4sUUFBZCxFQUF3QnNMLE1BQXhCLENBQStCLFVBQUMrQyxJQUFELEVBQU8vSSxPQUFQLEVBQW1CO0FBQ3RFLFFBQU11TSxXQUFXLEdBQUcsa0NBQWlCdk0sT0FBakIsRUFBMEI5RCxLQUFLLENBQUNiLFlBQWhDLENBQXBCO0FBQ0EsV0FBT2tSLFdBQVcsSUFBSUEsV0FBVyxDQUFDNVAsTUFBM0IsR0FBb0NvTSxJQUFJLENBQUN5RCxNQUFMLENBQVlELFdBQVosQ0FBcEMsR0FBK0R4RCxJQUF0RTtBQUNELEdBSHFCLEVBR25Cc0QsS0FIbUIsQ0FBdEI7QUFLQSxTQUFPO0FBQ0xuUSxJQUFBQSxLQUFLLGtDQUNBQSxLQURBO0FBRUg5QixNQUFBQSxNQUFNLGdEQUFNOEIsS0FBSyxDQUFDOUIsTUFBWix1Q0FBdUJrUyxhQUF2QixFQUZIO0FBR0gvUixNQUFBQSxVQUFVLGdEQUVMK1IsYUFBYSxDQUFDalEsR0FBZCxDQUFrQixVQUFDb1EsQ0FBRCxFQUFJbFEsQ0FBSjtBQUFBLGVBQVVMLEtBQUssQ0FBQzlCLE1BQU4sQ0FBYXVDLE1BQWIsR0FBc0JKLENBQWhDO0FBQUEsT0FBbEIsQ0FGSyx1Q0FHTEwsS0FBSyxDQUFDM0IsVUFIRDtBQUhQLE1BREE7QUFVTDhPLElBQUFBLFNBQVMsRUFBRWlEO0FBVk4sR0FBUDtBQVlEO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxTQUFTM0Msa0JBQVQsQ0FBNEJ6TixLQUE1QixFQUFtQzhELE9BQW5DLEVBQTRDO0FBQ2pELE1BQU13SixhQUFhLEdBQUd4SixPQUFPLENBQUMwTSxRQUFSLENBQWlCQyxxQkFBakIsd0NBQ2hCM00sT0FBTyxDQUFDMUMsRUFEUSxFQUNILEVBREcsSUFFbEIsd0NBQWlCMEMsT0FBakIsQ0FGSjs7QUFHQSxNQUFNNE0sTUFBTSxtQ0FDUDFRLEtBQUssQ0FBQ3JCLGlCQUFOLENBQXdCMEwsT0FBeEIsQ0FBZ0MzSixNQUFoQyxDQUF1QzRKLFlBRGhDLEdBRVBnRCxhQUZPLENBQVo7O0FBS0EsU0FBTyxnQkFBSSxDQUFDLG1CQUFELEVBQXNCLFNBQXRCLEVBQWlDLFFBQWpDLEVBQTJDLGNBQTNDLENBQUosRUFBZ0VvRCxNQUFoRSxFQUF3RTFRLEtBQXhFLENBQVA7QUFDRDs7QUFFTSxTQUFTb08sMEJBQVQsQ0FBb0NhLElBQXBDLEVBQTBDakYsS0FBMUMsRUFBaUQ7QUFDdEQsTUFBTXlFLFFBQVEsR0FBR1EsSUFBSSxDQUFDck0sSUFBTCw0QkFBOEJvSCxLQUE5QixDQUFqQjtBQUNBLDhDQUNHeUUsUUFESCxFQUNjO0FBQ1Y7QUFDQUksSUFBQUEsT0FBTyxFQUFFLENBRkM7QUFHVkMsSUFBQUEsT0FBTyxFQUFFLEVBSEM7QUFJVkwsSUFBQUEsUUFBUSxFQUFSQSxRQUpVO0FBS1YvSixJQUFBQSxLQUFLLEVBQUU7QUFMRyxHQURkO0FBU0Q7O0FBRU0sU0FBU2lLLGdDQUFULENBQTBDM08sS0FBMUMsVUFBdUU7QUFBQSxNQUFyQnlPLFFBQXFCLFVBQXJCQSxRQUFxQjtBQUFBLE1BQVhHLFFBQVcsVUFBWEEsUUFBVztBQUM1RSxTQUFPLDRCQUFNLHFCQUFOLEVBQTZCLDRCQUFNSCxRQUFOLEVBQWdCLDZCQUFPRyxRQUFQLENBQWhCLENBQTdCLEVBQWdFNU8sS0FBaEUsQ0FBUDtBQUNEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLFNBQVM4Ryx3QkFBVCxDQUFrQzlHLEtBQWxDLEVBQXlDeUIsTUFBekMsRUFBaUR3RSxhQUFqRCxFQUFnRTtBQUNyRSxNQUFNZ0ssT0FBTyxHQUFHLE9BQU94TyxNQUFQLEtBQWtCLFFBQWxCLEdBQTZCLENBQUNBLE1BQUQsQ0FBN0IsR0FBd0NBLE1BQXhEO0FBQ0EsTUFBTTBMLFNBQVMsR0FBRyxFQUFsQjtBQUNBLE1BQU0vRSxZQUFZLEdBQUcsRUFBckI7QUFFQXBJLEVBQUFBLEtBQUssQ0FBQzlCLE1BQU4sQ0FBYXNOLE9BQWIsQ0FBcUIsVUFBQ3ZLLFFBQUQsRUFBV1osQ0FBWCxFQUFpQjtBQUNwQyxRQUFJWSxRQUFRLENBQUNQLE1BQVQsQ0FBZ0JlLE1BQWhCLElBQTBCd08sT0FBTyxDQUFDak4sUUFBUixDQUFpQi9CLFFBQVEsQ0FBQ1AsTUFBVCxDQUFnQmUsTUFBakMsQ0FBOUIsRUFBd0U7QUFDdEU7QUFDQSxVQUFNTSxRQUFRLEdBQ1prRSxhQUFhLElBQUlBLGFBQWEsQ0FBQzBLLFdBQS9CLEdBQ0kxUCxRQURKLEdBRUlBLFFBQVEsQ0FBQ29ELGlCQUFULENBQTJCckUsS0FBSyxDQUFDeEIsUUFBakMsRUFBMkN5SCxhQUEzQyxDQUhOOztBQUZzRSxpQ0FPM0Msb0NBQW1CbEUsUUFBbkIsRUFBNkIvQixLQUE3QixFQUFvQ0EsS0FBSyxDQUFDN0IsU0FBTixDQUFnQmtDLENBQWhCLENBQXBDLENBUDJDO0FBQUEsVUFPL0RsQyxTQVArRCx3QkFPL0RBLFNBUCtEO0FBQUEsVUFPcEQ4QixLQVBvRCx3QkFPcERBLEtBUG9EOztBQVN0RWtOLE1BQUFBLFNBQVMsQ0FBQ2xELElBQVYsQ0FBZWhLLEtBQWY7QUFDQW1JLE1BQUFBLFlBQVksQ0FBQzZCLElBQWIsQ0FBa0I5TCxTQUFsQjtBQUNELEtBWEQsTUFXTztBQUNMZ1AsTUFBQUEsU0FBUyxDQUFDbEQsSUFBVixDQUFlaEosUUFBZjtBQUNBbUgsTUFBQUEsWUFBWSxDQUFDNkIsSUFBYixDQUFrQmpLLEtBQUssQ0FBQzdCLFNBQU4sQ0FBZ0JrQyxDQUFoQixDQUFsQjtBQUNEO0FBQ0YsR0FoQkQ7O0FBa0JBLE1BQU1HLFFBQVEsbUNBQ1RSLEtBRFM7QUFFWjlCLElBQUFBLE1BQU0sRUFBRWlQLFNBRkk7QUFHWmhQLElBQUFBLFNBQVMsRUFBRWlLO0FBSEMsSUFBZDs7QUFNQSxTQUFPNUgsUUFBUDtBQUNEOztBQUVNLFNBQVNNLHFCQUFULENBQStCZCxLQUEvQixFQUFzQztBQUMzQztBQUNBLE1BQU00USxnQkFBZ0IsR0FBRzVRLEtBQUssQ0FBQzlCLE1BQU4sQ0FBYTJFLE1BQWIsQ0FDdkIsVUFBQTFCLENBQUM7QUFBQSxXQUNDQSxDQUFDLENBQUNULE1BQUYsQ0FBU0MsU0FBVCxJQUNBUSxDQUFDLENBQUNULE1BQUYsQ0FBU0UsU0FEVCxJQUVBTyxDQUFDLENBQUNULE1BQUYsQ0FBU0UsU0FBVCxDQUFtQkMsT0FGbkIsSUFHQTBNLEtBQUssQ0FBQ0MsT0FBTixDQUFjck0sQ0FBQyxDQUFDMFAsZUFBaEIsQ0FKRDtBQUFBLEdBRHNCLENBQXpCOztBQVFBLE1BQUksQ0FBQ0QsZ0JBQWdCLENBQUNuUSxNQUF0QixFQUE4QjtBQUM1QiwyQ0FDS1QsS0FETDtBQUVFWCxNQUFBQSxlQUFlLGtDQUNWVyxLQUFLLENBQUNYLGVBREk7QUFFYnJDLFFBQUFBLE1BQU0sRUFBRSxJQUZLO0FBR2JNLFFBQUFBLGlCQUFpQixFQUFFO0FBSE47QUFGakI7QUFRRDs7QUFFRCxNQUFNd1QsWUFBWSxHQUFHRixnQkFBZ0IsQ0FBQzlHLE1BQWpCLENBQ25CLFVBQUMrQyxJQUFELEVBQU81TSxLQUFQO0FBQUEsV0FBaUIsQ0FDZjhRLElBQUksQ0FBQ0MsR0FBTCxDQUFTbkUsSUFBSSxDQUFDLENBQUQsQ0FBYixFQUFrQjVNLEtBQUssQ0FBQzRRLGVBQU4sQ0FBc0IsQ0FBdEIsQ0FBbEIsQ0FEZSxFQUVmRSxJQUFJLENBQUNFLEdBQUwsQ0FBU3BFLElBQUksQ0FBQyxDQUFELENBQWIsRUFBa0I1TSxLQUFLLENBQUM0USxlQUFOLENBQXNCLENBQXRCLENBQWxCLENBRmUsQ0FBakI7QUFBQSxHQURtQixFQUtuQixDQUFDSyxNQUFNLENBQUNDLFFBQUQsQ0FBUCxFQUFtQixDQUFDQSxRQUFwQixDQUxtQixDQUFyQjtBQU9BLE1BQU03VCxpQkFBaUIsR0FBRyw4Q0FBNEJ3VCxZQUE1QixDQUExQjtBQUVBLHlDQUNLOVEsS0FETDtBQUVFWCxJQUFBQSxlQUFlLGtDQUNWVyxLQUFLLENBQUNYLGVBREk7QUFFYnBDLE1BQUFBLFdBQVcsRUFBRSw0QkFBVStDLEtBQUssQ0FBQ1gsZUFBTixDQUFzQnBDLFdBQWhDLEVBQTZDNlQsWUFBN0MsSUFDVDlRLEtBQUssQ0FBQ1gsZUFBTixDQUFzQnBDLFdBRGIsR0FFVDZULFlBQVksQ0FBQyxDQUFELENBSkg7QUFLYjlULE1BQUFBLE1BQU0sRUFBRThULFlBTEs7QUFNYnhULE1BQUFBLGlCQUFpQixFQUFqQkE7QUFOYTtBQUZqQjtBQVdEO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ08sSUFBTThULG9CQUFvQixHQUFHLFNBQXZCQSxvQkFBdUIsQ0FBQ3BSLEtBQUQ7QUFBQSxNQUFTeEMsSUFBVCxVQUFTQSxJQUFUO0FBQUEseUNBQy9Cd0MsS0FEK0I7QUFFbENWLElBQUFBLE1BQU0sa0NBQ0RVLEtBQUssQ0FBQ1YsTUFETDtBQUVKOUIsTUFBQUEsSUFBSSxFQUFKQSxJQUZJO0FBR0pJLE1BQUFBLGVBQWUsRUFBRTtBQUhiO0FBRjRCO0FBQUEsQ0FBN0IsQyxDQVNQOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sU0FBU3lULGtCQUFULENBQTRCclIsS0FBNUIsVUFBb0Q7QUFBQSwrQkFBaEJyQyxRQUFnQjtBQUFBLE1BQWhCQSxRQUFnQixnQ0FBTCxFQUFLO0FBQ3pELE1BQU0yVCxXQUFXLEdBQUczVCxRQUFRLENBQUM4QyxNQUFULElBQW1COUMsUUFBUSxDQUFDQSxRQUFRLENBQUM4QyxNQUFULEdBQWtCLENBQW5CLENBQS9DOztBQUVBLE1BQU1ELFFBQVEsbUNBQ1RSLEtBRFM7QUFFWlYsSUFBQUEsTUFBTSxrQ0FDRFUsS0FBSyxDQUFDVixNQURMO0FBRUo7QUFDQTNCLE1BQUFBLFFBQVEsRUFBRUEsUUFBUSxDQUFDa0YsTUFBVCxDQUFnQixVQUFBRSxDQUFDO0FBQUEsZUFBSSxDQUFDLHVDQUFxQkEsQ0FBckIsQ0FBTDtBQUFBLE9BQWpCLENBSE47QUFJSnZGLE1BQUFBLElBQUksRUFBRThULFdBQVcsSUFBSUEsV0FBVyxDQUFDQyxVQUFaLENBQXVCQyxRQUF0QyxHQUFpRC9ULDhCQUFhZ1UsSUFBOUQsR0FBcUV6UixLQUFLLENBQUNWLE1BQU4sQ0FBYTlCO0FBSnBGO0FBRk0sSUFBZCxDQUh5RCxDQWF6RDs7O0FBYnlELE1BY2xESSxlQWRrRCxHQWMvQm9DLEtBQUssQ0FBQ1YsTUFkeUIsQ0FjbEQxQixlQWRrRCxFQWdCekQ7O0FBQ0EsTUFBSSxDQUFDQSxlQUFMLEVBQXNCO0FBQ3BCLFdBQU80QyxRQUFQO0FBQ0QsR0FuQndELENBcUJ6RDs7O0FBQ0EsTUFBTWtSLE9BQU8sR0FBRy9ULFFBQVEsQ0FBQ21FLElBQVQsQ0FBYyxVQUFBaUIsQ0FBQztBQUFBLFdBQUlBLENBQUMsQ0FBQzNCLEVBQUYsS0FBU3hELGVBQWUsQ0FBQ3dELEVBQTdCO0FBQUEsR0FBZixDQUFoQixDQXRCeUQsQ0F3QnpEOztBQUNBLE1BQU11USxRQUFRLEdBQUdELE9BQU8sSUFBSSx1Q0FBcUJBLE9BQXJCLENBQTVCOztBQUNBLE1BQUlDLFFBQVEsSUFBSUQsT0FBaEIsRUFBeUI7QUFDdkIsUUFBTUUsWUFBWSxHQUFHLHVDQUFxQkYsT0FBckIsRUFBOEJDLFFBQTlCLENBQXJCO0FBQ0EsUUFBTUUsU0FBUyxHQUFHN1IsS0FBSyxDQUFDMUIsT0FBTixDQUFjNEMsU0FBZCxDQUF3QixVQUFBNFEsR0FBRztBQUFBLGFBQUlBLEdBQUcsQ0FBQzFRLEVBQUosS0FBV3VRLFFBQWY7QUFBQSxLQUEzQixDQUFsQjtBQUNBLFdBQU9wTSxnQkFBZ0IsQ0FBQy9FLFFBQUQsRUFBVztBQUNoQ04sTUFBQUEsR0FBRyxFQUFFMlIsU0FEMkI7QUFFaENyTyxNQUFBQSxJQUFJLEVBQUUsT0FGMEI7QUFHaENDLE1BQUFBLEtBQUssRUFBRW1PO0FBSHlCLEtBQVgsQ0FBdkI7QUFLRDs7QUFFRCxTQUFPcFIsUUFBUDtBQUNEO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ08sSUFBTXVSLHlCQUF5QixHQUFHLFNBQTVCQSx5QkFBNEIsQ0FBQy9SLEtBQUQ7QUFBQSxNQUFTMFIsT0FBVCxVQUFTQSxPQUFUO0FBQUEseUNBQ3BDMVIsS0FEb0M7QUFFdkNWLElBQUFBLE1BQU0sa0NBQ0RVLEtBQUssQ0FBQ1YsTUFETDtBQUVKMUIsTUFBQUEsZUFBZSxFQUFFOFQ7QUFGYjtBQUZpQztBQUFBLENBQWxDO0FBUVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDTyxTQUFTTSxvQkFBVCxDQUE4QmhTLEtBQTlCLFVBQWdEO0FBQUEsTUFBVjBSLE9BQVUsVUFBVkEsT0FBVTs7QUFDckQsTUFBSSxDQUFDQSxPQUFMLEVBQWM7QUFDWixXQUFPMVIsS0FBUDtBQUNEOztBQUVELE1BQU1RLFFBQVEsbUNBQ1RSLEtBRFM7QUFFWlYsSUFBQUEsTUFBTSxrQ0FDRFUsS0FBSyxDQUFDVixNQURMO0FBRUoxQixNQUFBQSxlQUFlLEVBQUU7QUFGYjtBQUZNLElBQWQ7O0FBUUEsTUFBSSx1Q0FBcUI4VCxPQUFyQixDQUFKLEVBQW1DO0FBQ2pDLFFBQU1HLFNBQVMsR0FBR3JSLFFBQVEsQ0FBQ2xDLE9BQVQsQ0FBaUI0QyxTQUFqQixDQUEyQixVQUFBNkIsQ0FBQztBQUFBLGFBQUlBLENBQUMsQ0FBQzNCLEVBQUYsS0FBUyx1Q0FBcUJzUSxPQUFyQixDQUFiO0FBQUEsS0FBNUIsQ0FBbEI7QUFFQSxXQUFPRyxTQUFTLEdBQUcsQ0FBQyxDQUFiLEdBQWlCN0osbUJBQW1CLENBQUN4SCxRQUFELEVBQVc7QUFBQ04sTUFBQUEsR0FBRyxFQUFFMlI7QUFBTixLQUFYLENBQXBDLEdBQW1FclIsUUFBMUU7QUFDRCxHQWpCb0QsQ0FtQnJEOzs7QUFDQSxNQUFNMEgsU0FBUyxtQ0FDVmxJLEtBQUssQ0FBQ1YsTUFESTtBQUViM0IsSUFBQUEsUUFBUSxFQUFFcUMsS0FBSyxDQUFDVixNQUFOLENBQWEzQixRQUFiLENBQXNCa0YsTUFBdEIsQ0FBNkIsVUFBQUUsQ0FBQztBQUFBLGFBQUlBLENBQUMsQ0FBQzNCLEVBQUYsS0FBU3NRLE9BQU8sQ0FBQ3RRLEVBQXJCO0FBQUEsS0FBOUIsQ0FGRztBQUdieEQsSUFBQUEsZUFBZSxFQUFFO0FBSEosSUFBZjs7QUFNQSx5Q0FDS29DLEtBREw7QUFFRVYsSUFBQUEsTUFBTSxFQUFFNEk7QUFGVjtBQUlEO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ08sU0FBUytKLDRCQUFULENBQXNDalMsS0FBdEMsRUFBNkM2SyxPQUE3QyxFQUFzRDtBQUFBLE1BQ3BENUssS0FEb0QsR0FDbEM0SyxPQURrQyxDQUNwRDVLLEtBRG9EO0FBQUEsTUFDN0N5UixPQUQ2QyxHQUNsQzdHLE9BRGtDLENBQzdDNkcsT0FENkM7QUFFM0QsTUFBTUMsUUFBUSxHQUFHLHVDQUFxQkQsT0FBckIsQ0FBakIsQ0FGMkQsQ0FJM0Q7O0FBQ0EsTUFBSUcsU0FBSjtBQUNBLE1BQUlLLFVBQVUsR0FBRyxDQUFDalMsS0FBSyxDQUFDbUIsRUFBUCxDQUFqQjtBQUNBLE1BQUlaLFFBQVEsR0FBR1IsS0FBZixDQVAyRCxDQVEzRDs7QUFDQSxNQUFJMlIsUUFBSixFQUFjO0FBQ1pFLElBQUFBLFNBQVMsR0FBRzdSLEtBQUssQ0FBQzFCLE9BQU4sQ0FBYzRDLFNBQWQsQ0FBd0IsVUFBQTZCLENBQUM7QUFBQSxhQUFJQSxDQUFDLENBQUMzQixFQUFGLEtBQVN1USxRQUFiO0FBQUEsS0FBekIsQ0FBWjs7QUFFQSxRQUFJLENBQUMzUixLQUFLLENBQUMxQixPQUFOLENBQWN1VCxTQUFkLENBQUwsRUFBK0I7QUFDN0I7QUFDQTtBQUNBO0FBQ0EsVUFBTU0saUJBQWlCLG1DQUNsQlQsT0FEa0I7QUFFckJILFFBQUFBLFVBQVUsa0NBQ0xHLE9BQU8sQ0FBQ0gsVUFESDtBQUVSSSxVQUFBQSxRQUFRLEVBQUU7QUFGRjtBQUZXLFFBQXZCOztBQVFBLDZDQUNLM1IsS0FETDtBQUVFVixRQUFBQSxNQUFNLGtDQUNEVSxLQUFLLENBQUNWLE1BREw7QUFFSjNCLFVBQUFBLFFBQVEsZ0RBQU1xQyxLQUFLLENBQUNWLE1BQU4sQ0FBYTNCLFFBQW5CLElBQTZCd1UsaUJBQTdCLEVBRko7QUFHSnZVLFVBQUFBLGVBQWUsRUFBRXVVO0FBSGI7QUFGUjtBQVFEOztBQUNELFFBQU10UCxNQUFNLEdBQUc3QyxLQUFLLENBQUMxQixPQUFOLENBQWN1VCxTQUFkLENBQWY7QUF4QlksMEJBeUJXaFAsTUF6QlgsQ0F5Qkx1RCxPQXpCSztBQUFBLFFBeUJMQSxPQXpCSyxnQ0F5QkssRUF6Qkw7QUEwQlosUUFBTWdNLGVBQWUsR0FBR2hNLE9BQU8sQ0FBQ3BELFFBQVIsQ0FBaUIvQyxLQUFLLENBQUNtQixFQUF2QixDQUF4QjtBQUVBOFEsSUFBQUEsVUFBVSxHQUFHRSxlQUFlLEdBQ3hCO0FBQ0FoTSxJQUFBQSxPQUFPLENBQUN2RCxNQUFSLENBQWUsVUFBQTFCLENBQUM7QUFBQSxhQUFJQSxDQUFDLEtBQUtsQixLQUFLLENBQUNtQixFQUFoQjtBQUFBLEtBQWhCLENBRndCLGlEQUdwQmdGLE9BSG9CLElBR1huRyxLQUFLLENBQUNtQixFQUhLLEVBQTVCO0FBSUQsR0FoQ0QsTUFnQ087QUFDTDtBQUNBLFFBQU13RSxTQUFTLEdBQUcsd0NBQXNCLEVBQXRCLEVBQTBCOEwsT0FBMUIsQ0FBbEI7QUFDQUcsSUFBQUEsU0FBUyxHQUFHN1IsS0FBSyxDQUFDMUIsT0FBTixDQUFjbUMsTUFBMUIsQ0FISyxDQUtMOztBQUNBRCxJQUFBQSxRQUFRLG1DQUNIUixLQURHO0FBRU4xQixNQUFBQSxPQUFPLGdEQUFNMEIsS0FBSyxDQUFDMUIsT0FBWixJQUFxQnNILFNBQXJCLEVBRkQ7QUFHTnRHLE1BQUFBLE1BQU0sa0NBQ0RVLEtBQUssQ0FBQ1YsTUFETDtBQUVKM0IsUUFBQUEsUUFBUSxFQUFFcUMsS0FBSyxDQUFDVixNQUFOLENBQWEzQixRQUFiLENBQXNCa0YsTUFBdEIsQ0FBNkIsVUFBQUUsQ0FBQztBQUFBLGlCQUFJQSxDQUFDLENBQUMzQixFQUFGLEtBQVNzUSxPQUFPLENBQUN0USxFQUFyQjtBQUFBLFNBQTlCLENBRk47QUFHSnhELFFBQUFBLGVBQWUsRUFBRWdJLFNBQVMsQ0FBQ25DO0FBSHZCO0FBSEEsTUFBUjtBQVNEOztBQUVELFNBQU84QixnQkFBZ0IsQ0FBQy9FLFFBQUQsRUFBVztBQUNoQ04sSUFBQUEsR0FBRyxFQUFFMlIsU0FEMkI7QUFFaENyTyxJQUFBQSxJQUFJLEVBQUUsU0FGMEI7QUFHaENDLElBQUFBLEtBQUssRUFBRXlPO0FBSHlCLEdBQVgsQ0FBdkI7QUFLRDtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLFNBQVNHLHNCQUFULENBQWdDclMsS0FBaEMsVUFBK0Q7QUFBQSxNQUF2QnlCLE1BQXVCLFVBQXZCQSxNQUF1QjtBQUFBLE1BQWY2USxNQUFlLFVBQWZBLE1BQWU7QUFBQSxNQUFQOVUsSUFBTyxVQUFQQSxJQUFPO0FBQ3BFLE1BQU1zRyxPQUFPLEdBQUc5RCxLQUFLLENBQUN4QixRQUFOLENBQWVpRCxNQUFmLENBQWhCOztBQUNBLE1BQUksQ0FBQ3FDLE9BQUwsRUFBYztBQUNaLFdBQU85RCxLQUFQO0FBQ0Q7O0FBQ0QsTUFBSXVTLFFBQVEsR0FBRy9VLElBQWY7O0FBQ0EsTUFBSSxDQUFDK1UsUUFBTCxFQUFlO0FBQ2IsUUFBTUMsV0FBVyxHQUFHLHlCQUFJMU8sT0FBSixFQUFhLENBQUMsWUFBRCxFQUFld08sTUFBZixDQUFiLENBQXBCLENBRGEsQ0FFYjs7QUFDQUMsSUFBQUEsUUFBUSxHQUFHQyxXQUFXLEdBQ2xCbFIsTUFBTSxDQUFDQyxJQUFQLENBQVlrUiwyQkFBWixFQUF3QjNRLElBQXhCLENBQTZCLFVBQUE0USxDQUFDO0FBQUEsYUFBSUEsQ0FBQyxLQUFLRixXQUFWO0FBQUEsS0FBOUIsQ0FEa0IsR0FFbEJDLDRCQUFXRSxTQUZmO0FBR0Q7O0FBRUQsTUFBTUMsTUFBTSxHQUFHLHNDQUFvQjlPLE9BQXBCLEVBQTZCd08sTUFBN0IsRUFBcUNDLFFBQXJDLENBQWY7QUFDQSxTQUFPLGdCQUFJLENBQUMsVUFBRCxFQUFhOVEsTUFBYixDQUFKLEVBQTBCbVIsTUFBMUIsRUFBa0M1UyxLQUFsQyxDQUFQO0FBQ0Q7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxTQUFTNlMscUJBQVQsQ0FBK0I3UyxLQUEvQixVQUF3RDtBQUFBLE1BQWpCeUIsTUFBaUIsVUFBakJBLE1BQWlCO0FBQUEsTUFBVDZRLE1BQVMsVUFBVEEsTUFBUztBQUM3RCxNQUFNeE8sT0FBTyxHQUFHOUQsS0FBSyxDQUFDeEIsUUFBTixDQUFlaUQsTUFBZixDQUFoQjs7QUFDQSxNQUFJLENBQUNxQyxPQUFMLEVBQWM7QUFDWixXQUFPOUQsS0FBUDtBQUNEOztBQUNELE1BQU0yQyxLQUFLLEdBQUdtQixPQUFPLENBQUN5RyxNQUFSLENBQWV6SSxJQUFmLENBQW9CLFVBQUFpQixDQUFDO0FBQUEsV0FBSUEsQ0FBQyxDQUFDSCxJQUFGLEtBQVcwUCxNQUFmO0FBQUEsR0FBckIsQ0FBZDs7QUFDQSxNQUFJLENBQUMzUCxLQUFMLEVBQVk7QUFDVixXQUFPM0MsS0FBUDtBQUNEOztBQUVELE1BQUk4UyxhQUFKOztBQUNBLE1BQUl2RixLQUFLLENBQUNDLE9BQU4sQ0FBYzFKLE9BQU8sQ0FBQ2dQLGFBQXRCLEtBQXdDaFAsT0FBTyxDQUFDZ1AsYUFBUixDQUFzQjlQLFFBQXRCLENBQStCTCxLQUFLLENBQUNDLElBQXJDLENBQTVDLEVBQXdGO0FBQ3RGO0FBQ0FrUSxJQUFBQSxhQUFhLEdBQUdoUCxPQUFPLENBQUNnUCxhQUFSLENBQXNCalEsTUFBdEIsQ0FBNkIsVUFBQWtRLEVBQUU7QUFBQSxhQUFJQSxFQUFFLEtBQUtwUSxLQUFLLENBQUNDLElBQWpCO0FBQUEsS0FBL0IsQ0FBaEI7QUFDRCxHQUhELE1BR087QUFDTGtRLElBQUFBLGFBQWEsR0FBRyxDQUFDaFAsT0FBTyxDQUFDZ1AsYUFBUixJQUF5QixFQUExQixFQUE4QnhDLE1BQTlCLENBQXFDM04sS0FBSyxDQUFDQyxJQUEzQyxDQUFoQjtBQUNEOztBQUVELFNBQU8sZ0JBQUksQ0FBQyxVQUFELEVBQWFuQixNQUFiLEVBQXFCLGVBQXJCLENBQUosRUFBMkNxUixhQUEzQyxFQUEwRDlTLEtBQTFELENBQVA7QUFDRDtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ08sU0FBU2dULHNCQUFULENBQWdDaFQsS0FBaEMsVUFBeUQ7QUFBQSxNQUFqQnlCLE1BQWlCLFVBQWpCQSxNQUFpQjtBQUFBLE1BQVQ2USxNQUFTLFVBQVRBLE1BQVM7QUFDOUQsTUFBTXhPLE9BQU8sR0FBRzlELEtBQUssQ0FBQ3hCLFFBQU4sQ0FBZWlELE1BQWYsQ0FBaEI7O0FBQ0EsTUFBSSxDQUFDcUMsT0FBTCxFQUFjO0FBQ1osV0FBTzlELEtBQVA7QUFDRDs7QUFDRCxNQUFNaVQsUUFBUSxHQUFHblAsT0FBTyxDQUFDeUcsTUFBUixDQUFlckosU0FBZixDQUF5QixVQUFBNkIsQ0FBQztBQUFBLFdBQUlBLENBQUMsQ0FBQ0gsSUFBRixLQUFXMFAsTUFBZjtBQUFBLEdBQTFCLENBQWpCOztBQUNBLE1BQUlXLFFBQVEsR0FBRyxDQUFmLEVBQWtCO0FBQ2hCLFdBQU9qVCxLQUFQO0FBQ0Q7O0FBUjZELE1BU3ZEbUUsSUFUdUQsR0FTL0NMLE9BQU8sQ0FBQ3lHLE1BQVIsQ0FBZTBJLFFBQWYsQ0FUK0MsQ0FTdkQ5TyxJQVR1RDtBQVU5RCxNQUFNK08sSUFBSSxHQUFHcFAsT0FBTyxDQUFDcVAsYUFBUixDQUNWaFQsR0FEVSxDQUNOLFVBQUFpVCxHQUFHO0FBQUEsV0FBSSxnQ0FBZ0JBLEdBQUcsQ0FBQ0MsT0FBSixDQUFZSixRQUFaLENBQWhCLEVBQXVDOU8sSUFBdkMsQ0FBSjtBQUFBLEdBREcsRUFDK0MsSUFEL0MsRUFFVm1QLElBRlUsQ0FFTCxJQUZLLENBQWI7QUFJQSxtQ0FBS0osSUFBTDtBQUVBLFNBQU9sVCxLQUFQO0FBQ0Q7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7O0FBQ08sU0FBU3VULDZCQUFULENBQXVDdlQsS0FBdkMsRUFBOEM7QUFDbkQseUNBQ0tBLEtBREw7QUFFRVYsSUFBQUEsTUFBTSxrQ0FDRFUsS0FBSyxDQUFDVixNQURMO0FBRUp6QixNQUFBQSxPQUFPLEVBQUUsQ0FBQ21DLEtBQUssQ0FBQ1YsTUFBTixDQUFhekI7QUFGbkI7QUFGUjtBQU9EOztBQUVNLFNBQVMyVixtQ0FBVCxDQUE2Q3hULEtBQTdDLFVBQW1FO0FBQUEsTUFBZEUsR0FBYyxVQUFkQSxHQUFjO0FBQUEsTUFBVFEsTUFBUyxVQUFUQSxNQUFTO0FBQ3hFLE1BQU1pRixTQUFTLEdBQUczRixLQUFLLENBQUMxQixPQUFOLENBQWM0QixHQUFkLENBQWxCOztBQUNBLE1BQUksQ0FBQ3lGLFNBQUwsRUFBZ0I7QUFDZGxCLG9CQUFRQyxLQUFSLG1CQUF5QnhFLEdBQXpCOztBQUNBLFdBQU9GLEtBQVA7QUFDRDs7QUFDRCxNQUFJMkYsU0FBUyxDQUFDeEIsSUFBVixLQUFtQnNQLDhCQUFhQyxTQUFwQyxFQUErQztBQUM3Q2pQLG9CQUFRQyxLQUFSOztBQUdBLFdBQU8xRSxLQUFQO0FBQ0Q7O0FBRUQsTUFBTTJULE9BQU8sR0FBR0MsbUJBQW1CLENBQUNsVCxNQUFELENBQW5DO0FBRUEsU0FBTyw0QkFBTSxTQUFOLEVBQWlCLDRCQUFNLDZCQUFPaVQsT0FBUCxFQUFnQmhPLFNBQWhCLENBQU4sQ0FBakIsRUFBb0QzRixLQUFwRCxDQUFQO0FBQ0Q7O0FBRUQsU0FBUzRULG1CQUFULENBQTZCbFQsTUFBN0IsRUFBcUM7QUFDbkMsTUFBTW1ULE9BQU8sR0FBRyxDQUFDLFlBQUQsRUFBZSxVQUFmLENBQWhCO0FBQ0EsU0FBT3ZTLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZYixNQUFaLEVBQW9Cb0osTUFBcEIsQ0FBMkIsVUFBQytDLElBQUQsRUFBT3JKLElBQVAsRUFBZ0I7QUFDaEQsUUFBSSxDQUFDcVEsT0FBTyxDQUFDN1EsUUFBUixDQUFpQlEsSUFBakIsQ0FBTCxFQUE2QjtBQUMzQmlCLHNCQUFRQyxLQUFSLDBGQUNvRmxCLElBRHBGOztBQUdBLGFBQU9xSixJQUFQO0FBQ0QsS0FOK0MsQ0FRaEQ7OztBQUNBQSxJQUFBQSxJQUFJLENBQUNySixJQUFELENBQUosR0FBYTlDLE1BQU0sQ0FBQzhDLElBQUQsQ0FBbkI7QUFDQSxXQUFPcUosSUFBUDtBQUNELEdBWE0sRUFXSixFQVhJLENBQVA7QUFZRDtBQUNEO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxTQUFTaUgsa0NBQVQsQ0FBNEM5VCxLQUE1QyxVQUE2RDtBQUFBLE1BQVRVLE1BQVMsVUFBVEEsTUFBUzs7QUFDbEUsTUFBSSxDQUFDQSxNQUFMLEVBQWE7QUFDWCxXQUFPVixLQUFQO0FBQ0Q7O0FBQ0QsTUFBTTJULE9BQU8sR0FBR0MsbUJBQW1CLENBQUNsVCxNQUFELENBQW5DO0FBQ0EsU0FBTyw0QkFBTSxpQkFBTixFQUF5Qiw2QkFBT2lULE9BQVAsQ0FBekIsRUFBMEMzVCxLQUExQyxDQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjIgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQge2NvbnNvbGUgYXMgQ29uc29sZX0gZnJvbSAnZ2xvYmFsL3dpbmRvdyc7XG5pbXBvcnQge2Rpc2FibGVTdGFja0NhcHR1cmluZywgd2l0aFRhc2t9IGZyb20gJ3JlYWN0LXBhbG0vdGFza3MnO1xuaW1wb3J0IGNsb25lRGVlcCBmcm9tICdsb2Rhc2guY2xvbmVkZWVwJztcbmltcG9ydCB1bmlxIGZyb20gJ2xvZGFzaC51bmlxJztcbmltcG9ydCBnZXQgZnJvbSAnbG9kYXNoLmdldCc7XG5pbXBvcnQgeG9yIGZyb20gJ2xvZGFzaC54b3InO1xuaW1wb3J0IGNvcHkgZnJvbSAnY29weS10by1jbGlwYm9hcmQnO1xuaW1wb3J0IHtwYXJzZUZpZWxkVmFsdWV9IGZyb20gJ3V0aWxzL2RhdGEtdXRpbHMnO1xuLy8gVGFza3NcbmltcG9ydCB7TE9BRF9GSUxFX1RBU0ssIFVOV1JBUF9UQVNLLCBQUk9DRVNTX0ZJTEVfREFUQSwgREVMQVlfVEFTS30gZnJvbSAndGFza3MvdGFza3MnO1xuLy8gQWN0aW9uc1xuaW1wb3J0IHtcbiAgbG9hZEZpbGVzRXJyLFxuICBsb2FkRmlsZXNTdWNjZXNzLFxuICBsb2FkRmlsZVN0ZXBTdWNjZXNzLFxuICBsb2FkTmV4dEZpbGUsXG4gIG5leHRGaWxlQmF0Y2hcbn0gZnJvbSAnYWN0aW9ucy92aXMtc3RhdGUtYWN0aW9ucyc7XG4vLyBVdGlsc1xuaW1wb3J0IHtmaW5kRmllbGRzVG9TaG93LCBnZXREZWZhdWx0SW50ZXJhY3Rpb259IGZyb20gJ3V0aWxzL2ludGVyYWN0aW9uLXV0aWxzJztcbmltcG9ydCB7XG4gIGFwcGx5RmlsdGVyRmllbGROYW1lLFxuICBhcHBseUZpbHRlcnNUb0RhdGFzZXRzLFxuICBmZWF0dXJlVG9GaWx0ZXJWYWx1ZSxcbiAgRklMVEVSX1VQREFURVJfUFJPUFMsXG4gIGZpbHRlckRhdGFzZXRDUFUsXG4gIGdlbmVyYXRlUG9seWdvbkZpbHRlcixcbiAgZ2V0RGVmYXVsdEZpbHRlcixcbiAgZ2V0RGVmYXVsdEZpbHRlclBsb3RUeXBlLFxuICBnZXRGaWx0ZXJJZEluRmVhdHVyZSxcbiAgZ2V0RmlsdGVyUGxvdCxcbiAgZ2V0VGltZVdpZGdldFRpdGxlRm9ybWF0dGVyLFxuICBpc0luUmFuZ2UsXG4gIExJTUlURURfRklMVEVSX0VGRkVDVF9QUk9QUyxcbiAgdXBkYXRlRmlsdGVyRGF0YUlkXG59IGZyb20gJ3V0aWxzL2ZpbHRlci11dGlscyc7XG5pbXBvcnQge2Fzc2lnbkdwdUNoYW5uZWwsIHNldEZpbHRlckdwdU1vZGV9IGZyb20gJ3V0aWxzL2dwdS1maWx0ZXItdXRpbHMnO1xuaW1wb3J0IHtjcmVhdGVOZXdEYXRhRW50cnl9IGZyb20gJ3V0aWxzL2RhdGFzZXQtdXRpbHMnO1xuaW1wb3J0IHtzb3J0RGF0YXNldEJ5Q29sdW1ufSBmcm9tICd1dGlscy90YWJsZS11dGlscy9rZXBsZXItdGFibGUnO1xuaW1wb3J0IHtzZXQsIHRvQXJyYXksIGFycmF5SW5zZXJ0LCBnZW5lcmF0ZUhhc2hJZH0gZnJvbSAndXRpbHMvdXRpbHMnO1xuXG5pbXBvcnQge2NhbGN1bGF0ZUxheWVyRGF0YSwgZmluZERlZmF1bHRMYXllcn0gZnJvbSAndXRpbHMvbGF5ZXItdXRpbHMnO1xuXG5pbXBvcnQge1xuICBpc1ZhbGlkTWVyZ2VyLFxuICBWSVNfU1RBVEVfTUVSR0VSUyxcbiAgdmFsaWRhdGVMYXllcldpdGhEYXRhLFxuICBjcmVhdGVMYXllckZyb21Db25maWcsXG4gIHNlcmlhbGl6ZUxheWVyXG59IGZyb20gJy4vdmlzLXN0YXRlLW1lcmdlcic7XG5cbmltcG9ydCB7XG4gIGFkZE5ld0xheWVyc1RvU3BsaXRNYXAsXG4gIGNvbXB1dGVTcGxpdE1hcExheWVycyxcbiAgcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzXG59IGZyb20gJ3V0aWxzL3NwbGl0LW1hcC11dGlscyc7XG5cbmltcG9ydCB7TGF5ZXIsIExheWVyQ2xhc3NlcywgTEFZRVJfSURfTEVOR1RIfSBmcm9tICdsYXllcnMnO1xuaW1wb3J0IHtERUZBVUxUX1RFWFRfTEFCRUwsIERFRkFVTFRfU0VDT05EQVJZX1RFWFRfTEFCRUx9IGZyb20gJ2xheWVycy9sYXllci1mYWN0b3J5JztcbmltcG9ydCB7RURJVE9SX01PREVTLCBTT1JUX09SREVSLCBGSUxURVJfVFlQRVN9IGZyb20gJ2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzJztcbmltcG9ydCB7cGlja18sIG1lcmdlXywgc3dhcF99IGZyb20gJy4vY29tcG9zZXItaGVscGVycyc7XG5pbXBvcnQge3Byb2Nlc3NGaWxlQ29udGVudH0gZnJvbSAnYWN0aW9ucy92aXMtc3RhdGUtYWN0aW9ucyc7XG5cbmltcG9ydCBLZXBsZXJHTFNjaGVtYSBmcm9tICdzY2hlbWFzJztcblxuLy8gdHlwZSBpbXBvcnRzXG4vKiogQHR5cGVkZWYge2ltcG9ydCgnLi92aXMtc3RhdGUtdXBkYXRlcnMnKS5GaWVsZH0gRmllbGQgKi9cbi8qKiBAdHlwZWRlZiB7aW1wb3J0KCcuL3Zpcy1zdGF0ZS11cGRhdGVycycpLkZpbHRlcn0gRmlsdGVyICovXG4vKiogQHR5cGVkZWYge2ltcG9ydCgnLi92aXMtc3RhdGUtdXBkYXRlcnMnKS5LZXBsZXJUYWJsZX0gS2VwbGVyVGFibGUgKi9cbi8qKiBAdHlwZWRlZiB7aW1wb3J0KCcuL3Zpcy1zdGF0ZS11cGRhdGVycycpLlZpc1N0YXRlfSBWaXNTdGF0ZSAqL1xuLyoqIEB0eXBlZGVmIHtpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykuRGF0YXNldHN9IERhdGFzZXRzICovXG4vKiogQHR5cGVkZWYge2ltcG9ydCgnLi92aXMtc3RhdGUtdXBkYXRlcnMnKS5BbmltYXRpb25Db25maWd9IEFuaW1hdGlvbkNvbmZpZyAqL1xuLyoqIEB0eXBlZGVmIHtpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykuRWRpdG9yfSBFZGl0b3IgKi9cblxuLy8gcmVhY3QtcGFsbVxuLy8gZGlzYWJsZSBjYXB0dXJlIGV4Y2VwdGlvbiBmb3IgcmVhY3QtcGFsbSBjYWxsIHRvIHdpdGhUYXNrXG5kaXNhYmxlU3RhY2tDYXB0dXJpbmcoKTtcblxuLyoqXG4gKiBVcGRhdGVycyBmb3IgYHZpc1N0YXRlYCByZWR1Y2VyLiBDYW4gYmUgdXNlZCBpbiB5b3VyIHJvb3QgcmVkdWNlciB0byBkaXJlY3RseSBtb2RpZnkga2VwbGVyLmdsJ3Mgc3RhdGUuXG4gKiBSZWFkIG1vcmUgYWJvdXQgW1VzaW5nIHVwZGF0ZXJzXSguLi9hZHZhbmNlZC11c2FnZS91c2luZy11cGRhdGVycy5tZClcbiAqXG4gKiBAcHVibGljXG4gKiBAZXhhbXBsZVxuICpcbiAqIGltcG9ydCBrZXBsZXJHbFJlZHVjZXIsIHt2aXNTdGF0ZVVwZGF0ZXJzfSBmcm9tICdrZXBsZXIuZ2wvcmVkdWNlcnMnO1xuICogLy8gUm9vdCBSZWR1Y2VyXG4gKiBjb25zdCByZWR1Y2VycyA9IGNvbWJpbmVSZWR1Y2Vycyh7XG4gKiAga2VwbGVyR2w6IGtlcGxlckdsUmVkdWNlcixcbiAqICBhcHA6IGFwcFJlZHVjZXJcbiAqIH0pO1xuICpcbiAqIGNvbnN0IGNvbXBvc2VkUmVkdWNlciA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gKiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICogICAgY2FzZSAnQ0xJQ0tfQlVUVE9OJzpcbiAqICAgICAgcmV0dXJuIHtcbiAqICAgICAgICAuLi5zdGF0ZSxcbiAqICAgICAgICBrZXBsZXJHbDoge1xuICogICAgICAgICAgLi4uc3RhdGUua2VwbGVyR2wsXG4gKiAgICAgICAgICBmb286IHtcbiAqICAgICAgICAgICAgIC4uLnN0YXRlLmtlcGxlckdsLmZvbyxcbiAqICAgICAgICAgICAgIHZpc1N0YXRlOiB2aXNTdGF0ZVVwZGF0ZXJzLmVubGFyZ2VGaWx0ZXJVcGRhdGVyKFxuICogICAgICAgICAgICAgICBzdGF0ZS5rZXBsZXJHbC5mb28udmlzU3RhdGUsXG4gKiAgICAgICAgICAgICAgIHtpZHg6IDB9XG4gKiAgICAgICAgICAgICApXG4gKiAgICAgICAgICB9XG4gKiAgICAgICAgfVxuICogICAgICB9O1xuICogIH1cbiAqICByZXR1cm4gcmVkdWNlcnMoc3RhdGUsIGFjdGlvbik7XG4gKiB9O1xuICpcbiAqIGV4cG9ydCBkZWZhdWx0IGNvbXBvc2VkUmVkdWNlcjtcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbi8vIEB0cy1pZ25vcmVcbmNvbnN0IHZpc1N0YXRlVXBkYXRlcnMgPSBudWxsO1xuLyogZXNsaW50LWVuYWJsZSBuby11bnVzZWQtdmFycyAqL1xuXG4vKiogQHR5cGUge0FuaW1hdGlvbkNvbmZpZ30gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FOSU1BVElPTl9DT05GSUcgPSB7XG4gIGRvbWFpbjogbnVsbCxcbiAgY3VycmVudFRpbWU6IG51bGwsXG4gIHNwZWVkOiAxLFxuICBpc0FuaW1hdGluZzogZmFsc2UsXG4gIHRpbWVGb3JtYXQ6IG51bGwsXG4gIHRpbWV6b25lOiBudWxsLFxuICBkZWZhdWx0VGltZUZvcm1hdDogbnVsbFxufTtcblxuLyoqIEB0eXBlIHtFZGl0b3J9ICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9FRElUT1IgPSB7XG4gIG1vZGU6IEVESVRPUl9NT0RFUy5EUkFXX1BPTFlHT04sXG4gIGZlYXR1cmVzOiBbXSxcbiAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsLFxuICB2aXNpYmxlOiB0cnVlXG59O1xuXG4vKipcbiAqIERlZmF1bHQgaW5pdGlhbCBgdmlzU3RhdGVgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7VmlzU3RhdGV9XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBJTklUSUFMX1ZJU19TVEFURSA9IHtcbiAgLy8gbWFwIGluZm9cbiAgbWFwSW5mbzoge1xuICAgIHRpdGxlOiAnJyxcbiAgICBkZXNjcmlwdGlvbjogJydcbiAgfSxcbiAgLy8gbGF5ZXJzXG4gIGxheWVyczogW10sXG4gIGxheWVyRGF0YTogW10sXG4gIGxheWVyVG9CZU1lcmdlZDogW10sXG4gIGxheWVyT3JkZXI6IFtdLFxuXG4gIC8vIGZpbHRlcnNcbiAgZmlsdGVyczogW10sXG4gIGZpbHRlclRvQmVNZXJnZWQ6IFtdLFxuXG4gIC8vIGEgY29sbGVjdGlvbiBvZiBtdWx0aXBsZSBkYXRhc2V0XG4gIGRhdGFzZXRzOiB7fSxcbiAgZWRpdGluZ0RhdGFzZXQ6IHVuZGVmaW5lZCxcblxuICBpbnRlcmFjdGlvbkNvbmZpZzogZ2V0RGVmYXVsdEludGVyYWN0aW9uKCksXG4gIGludGVyYWN0aW9uVG9CZU1lcmdlZDogdW5kZWZpbmVkLFxuXG4gIGxheWVyQmxlbmRpbmc6ICdub3JtYWwnLFxuICBob3ZlckluZm86IHVuZGVmaW5lZCxcbiAgY2xpY2tlZDogdW5kZWZpbmVkLFxuICBtb3VzZVBvczoge30sXG5cbiAgLy8gdGhpcyBpcyB1c2VkIHdoZW4gdXNlciBzcGxpdCBtYXBzXG4gIHNwbGl0TWFwczogW1xuICAgIC8vIHRoaXMgd2lsbCBjb250YWluIGEgbGlzdCBvZiBvYmplY3RzIHRvXG4gICAgLy8gZGVzY3JpYmUgdGhlIHN0YXRlIG9mIGxheWVyIGF2YWlsYWJpbGl0eSBhbmQgdmlzaWJpbGl0eSBmb3IgZWFjaCBtYXBcbiAgICAvLyBbXG4gICAgLy8gICB7XG4gICAgLy8gICAgICBsYXllcnM6IHtsYXllcl9pZDogdHJ1ZSB8IGZhbHNlfVxuICAgIC8vICAgfVxuICAgIC8vIF1cbiAgXSxcbiAgc3BsaXRNYXBzVG9CZU1lcmdlZDogW10sXG5cbiAgLy8gZGVmYXVsdHMgbGF5ZXIgY2xhc3Nlc1xuICBsYXllckNsYXNzZXM6IExheWVyQ2xhc3NlcyxcblxuICAvLyBkZWZhdWx0IGFuaW1hdGlvblxuICAvLyB0aW1lIGluIHVuaXggdGltZXN0YW1wIChtaWxsaXNlY29uZHMpICh0aGUgbnVtYmVyIG9mIHNlY29uZHMgc2luY2UgdGhlIFVuaXggRXBvY2gpXG4gIGFuaW1hdGlvbkNvbmZpZzogREVGQVVMVF9BTklNQVRJT05fQ09ORklHLFxuXG4gIGVkaXRvcjogREVGQVVMVF9FRElUT1IsXG5cbiAgZmlsZUxvYWRpbmc6IGZhbHNlLFxuICBmaWxlTG9hZGluZ1Byb2dyZXNzOiB7fSxcblxuICBsb2FkZXJzOiBbXSxcbiAgbG9hZE9wdGlvbnM6IHt9LFxuXG4gIC8vIHZpc1N0YXRlTWVyZ2Vyc1xuICBtZXJnZXJzOiBWSVNfU1RBVEVfTUVSR0VSUyxcblxuICAvLyBrZXBsZXIgc2NoZW1hc1xuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hXG59O1xuXG4vKipcbiAqIFVwZGF0ZSBzdGF0ZSB3aXRoIHVwZGF0ZWQgbGF5ZXIgYW5kIGxheWVyRGF0YVxuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykudXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhfVxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN0YXRlLmxheWVycy5tYXAoKGx5ciwgaSkgPT4gKGkgPT09IGlkeCA/IGxheWVyIDogbHlyKSksXG4gICAgbGF5ZXJEYXRhOiBsYXllckRhdGFcbiAgICAgID8gc3RhdGUubGF5ZXJEYXRhLm1hcCgoZCwgaSkgPT4gKGkgPT09IGlkeCA/IGxheWVyRGF0YSA6IGQpKVxuICAgICAgOiBzdGF0ZS5sYXllckRhdGFcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlT25MYXllclZpc2liaWxpdHlDaGFuZ2Uoc3RhdGUsIGxheWVyKSB7XG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICBpZiAoc3RhdGUuc3BsaXRNYXBzLmxlbmd0aCkge1xuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBzcGxpdE1hcHM6IGxheWVyLmNvbmZpZy5pc1Zpc2libGVcbiAgICAgICAgPyBhZGROZXdMYXllcnNUb1NwbGl0TWFwKHN0YXRlLnNwbGl0TWFwcywgbGF5ZXIpXG4gICAgICAgIDogcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzKHN0YXRlLnNwbGl0TWFwcywgbGF5ZXIpXG4gICAgfTtcbiAgfVxuXG4gIGlmIChsYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihzdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGJhc2UgY29uZmlnOiBkYXRhSWQsIGxhYmVsLCBjb2x1bW4sIGlzVmlzaWJsZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL3Zpcy1zdGF0ZS11cGRhdGVycycpLmxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcn1cbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKHN0YXRlLCBhY3Rpb24pIHtcbiAgY29uc3Qge29sZExheWVyfSA9IGFjdGlvbjtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgY29uc3QgcHJvcHMgPSBPYmplY3Qua2V5cyhhY3Rpb24ubmV3Q29uZmlnKTtcbiAgaWYgKHR5cGVvZiBhY3Rpb24ubmV3Q29uZmlnLmRhdGFJZCA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCB7ZGF0YUlkLCAuLi5yZXN0Q29uZmlnfSA9IGFjdGlvbi5uZXdDb25maWc7XG4gICAgY29uc3Qgc3RhdGVXaXRoRGF0YUlkID0gbGF5ZXJEYXRhSWRDaGFuZ2VVcGRhdGVyKHN0YXRlLCB7XG4gICAgICBvbGRMYXllcixcbiAgICAgIG5ld0NvbmZpZzoge2RhdGFJZH1cbiAgICB9KTtcbiAgICBjb25zdCBuZXh0TGF5ZXIgPSBzdGF0ZVdpdGhEYXRhSWQubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gICAgcmV0dXJuIG5leHRMYXllciAmJiBPYmplY3Qua2V5cyhyZXN0Q29uZmlnKS5sZW5ndGhcbiAgICAgID8gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKHN0YXRlV2l0aERhdGFJZCwge29sZExheWVyOiBuZXh0TGF5ZXIsIG5ld0NvbmZpZzogcmVzdENvbmZpZ30pXG4gICAgICA6IHN0YXRlV2l0aERhdGFJZDtcbiAgfVxuXG4gIGxldCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKGFjdGlvbi5uZXdDb25maWcpO1xuXG4gIGxldCBsYXllckRhdGE7XG5cbiAgLy8gbGV0IG5ld0xheWVyO1xuICBpZiAobmV3TGF5ZXIuc2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhKHByb3BzKSkge1xuICAgIGNvbnN0IG9sZExheWVyRGF0YSA9IHN0YXRlLmxheWVyRGF0YVtpZHhdO1xuICAgIGNvbnN0IHVwZGF0ZUxheWVyRGF0YVJlc3VsdCA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIG9sZExheWVyRGF0YSk7XG5cbiAgICBsYXllckRhdGEgPSB1cGRhdGVMYXllckRhdGFSZXN1bHQubGF5ZXJEYXRhO1xuICAgIG5ld0xheWVyID0gdXBkYXRlTGF5ZXJEYXRhUmVzdWx0LmxheWVyO1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGlmICgnaXNWaXNpYmxlJyBpbiBhY3Rpb24ubmV3Q29uZmlnKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVTdGF0ZU9uTGF5ZXJWaXNpYmlsaXR5Q2hhbmdlKHN0YXRlLCBuZXdMYXllcik7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5ld1N0YXRlLCB7XG4gICAgbGF5ZXI6IG5ld0xheWVyLFxuICAgIGxheWVyRGF0YSxcbiAgICBpZHhcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZE9yUmVtb3ZlVGV4dExhYmVscyhuZXdGaWVsZHMsIHRleHRMYWJlbCkge1xuICBsZXQgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLnNsaWNlKCk7XG5cbiAgY29uc3QgY3VycmVudEZpZWxkcyA9IHRleHRMYWJlbC5tYXAodGwgPT4gdGwuZmllbGQgJiYgdGwuZmllbGQubmFtZSkuZmlsdGVyKGQgPT4gZCk7XG5cbiAgY29uc3QgYWRkRmllbGRzID0gbmV3RmllbGRzLmZpbHRlcihmID0+ICFjdXJyZW50RmllbGRzLmluY2x1ZGVzKGYubmFtZSkpO1xuICBjb25zdCBkZWxldGVGaWVsZHMgPSBjdXJyZW50RmllbGRzLmZpbHRlcihmID0+ICFuZXdGaWVsZHMuZmluZChmZCA9PiBmZC5uYW1lID09PSBmKSk7XG5cbiAgLy8gZGVsZXRlXG4gIG5ld1RleHRMYWJlbCA9IG5ld1RleHRMYWJlbC5maWx0ZXIodGwgPT4gdGwuZmllbGQgJiYgIWRlbGV0ZUZpZWxkcy5pbmNsdWRlcyh0bC5maWVsZC5uYW1lKSk7XG5cbiAgLy8gYWRkXG4gIG5ld1RleHRMYWJlbCA9IG5ld1RleHRMYWJlbC5maWx0ZXIodGwgPT4gdGwuZmllbGQpO1xuICBjb25zdCBkZWZhdWx0TGFiZWwgPSBuZXdUZXh0TGFiZWwubGVuZ3RoID8gREVGQVVMVF9TRUNPTkRBUllfVEVYVF9MQUJFTCA6IERFRkFVTFRfVEVYVF9MQUJFTDtcbiAgbmV3VGV4dExhYmVsID0gWy4uLm5ld1RleHRMYWJlbCwgLi4uYWRkRmllbGRzLm1hcChhZiA9PiAoey4uLmRlZmF1bHRMYWJlbCwgZmllbGQ6IGFmfSkpXTtcblxuICAvLyBsaW1pdCB0byAyIGxhYmVscyAob3ZlcndyaXRlIDJuZCBsYWJlbCB3aXRoIDNyZClcbiAgaWYgKG5ld1RleHRMYWJlbC5sZW5ndGggPiAyKSB7XG4gICAgbmV3VGV4dExhYmVsID0gW25ld1RleHRMYWJlbFswXSwgbmV3VGV4dExhYmVsWzJdXTtcbiAgfVxuXG4gIC8vIGRlZmF1bHRcbiAgbmV3VGV4dExhYmVsID0gIW5ld1RleHRMYWJlbC5sZW5ndGggPyBbREVGQVVMVF9URVhUX0xBQkVMXSA6IG5ld1RleHRMYWJlbDtcblxuICByZXR1cm4gbmV3VGV4dExhYmVsO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVUZXh0TGFiZWxQcm9wQW5kVmFsdWUoaWR4LCBwcm9wLCB2YWx1ZSwgdGV4dExhYmVsKSB7XG4gIGlmICghdGV4dExhYmVsW2lkeF0uaGFzT3duUHJvcGVydHkocHJvcCkpIHtcbiAgICByZXR1cm4gdGV4dExhYmVsO1xuICB9XG5cbiAgbGV0IG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5zbGljZSgpO1xuXG4gIGlmIChwcm9wICYmICh2YWx1ZSB8fCB0ZXh0TGFiZWwubGVuZ3RoID09PSAxKSkge1xuICAgIG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5tYXAoKHRsLCBpKSA9PiAoaSA9PT0gaWR4ID8gey4uLnRsLCBbcHJvcF06IHZhbHVlfSA6IHRsKSk7XG4gIH0gZWxzZSBpZiAocHJvcCA9PT0gJ2ZpZWxkJyAmJiB2YWx1ZSA9PT0gbnVsbCAmJiB0ZXh0TGFiZWwubGVuZ3RoID4gMSkge1xuICAgIC8vIHJlbW92ZSBsYWJlbCB3aGVuIGZpZWxkIHZhbHVlIGlzIHNldCB0byBudWxsXG4gICAgbmV3VGV4dExhYmVsLnNwbGljZShpZHgsIDEpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1RleHRMYWJlbDtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYmFzZSBjb25maWc6IGRhdGFJZCwgbGFiZWwsIGNvbHVtbiwgaXNWaXNpYmxlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykubGF5ZXJUZXh0TGFiZWxDaGFuZ2VVcGRhdGVyfVxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXIoc3RhdGUsIGFjdGlvbikge1xuICBjb25zdCB7b2xkTGF5ZXIsIGlkeCwgcHJvcCwgdmFsdWV9ID0gYWN0aW9uO1xuICBjb25zdCB7dGV4dExhYmVsfSA9IG9sZExheWVyLmNvbmZpZztcblxuICBsZXQgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLnNsaWNlKCk7XG4gIGlmICghdGV4dExhYmVsW2lkeF0gJiYgaWR4ID09PSB0ZXh0TGFiZWwubGVuZ3RoKSB7XG4gICAgLy8gaWYgaWR4IGlzIHNldCB0byBsZW5ndGgsIGFkZCBlbXB0eSB0ZXh0IGxhYmVsXG4gICAgbmV3VGV4dExhYmVsID0gWy4uLnRleHRMYWJlbCwgaWR4ID09PSAwID8gREVGQVVMVF9URVhUX0xBQkVMIDogREVGQVVMVF9TRUNPTkRBUllfVEVYVF9MQUJFTF07XG4gIH1cblxuICBpZiAoaWR4ID09PSAnYWxsJyAmJiBwcm9wID09PSAnZmllbGRzJykge1xuICAgIG5ld1RleHRMYWJlbCA9IGFkZE9yUmVtb3ZlVGV4dExhYmVscyh2YWx1ZSwgdGV4dExhYmVsKTtcbiAgfSBlbHNlIHtcbiAgICBuZXdUZXh0TGFiZWwgPSB1cGRhdGVUZXh0TGFiZWxQcm9wQW5kVmFsdWUoaWR4LCBwcm9wLCB2YWx1ZSwgbmV3VGV4dExhYmVsKTtcbiAgfVxuICAvLyB1cGRhdGUgdGV4dCBsYWJlbCBwcm9wIGFuZCB2YWx1ZVxuICByZXR1cm4gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKHN0YXRlLCB7XG4gICAgb2xkTGF5ZXIsXG4gICAgbmV3Q29uZmlnOiB7dGV4dExhYmVsOiBuZXdUZXh0TGFiZWx9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YShkYXRhc2V0LCBsYXllckNsYXNzZXMsIGxheWVyKSB7XG4gIGNvbnN0IGxvYWRlZExheWVyID0gc2VyaWFsaXplTGF5ZXIobGF5ZXIpO1xuICByZXR1cm4gdmFsaWRhdGVMYXllcldpdGhEYXRhKGRhdGFzZXQsIGxvYWRlZExheWVyLCBsYXllckNsYXNzZXMsIHtcbiAgICBhbGxvd0VtcHR5Q29sdW1uOiB0cnVlXG4gIH0pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBjb25maWcgZGF0YUlkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykubGF5ZXJEYXRhSWRDaGFuZ2VVcGRhdGVyfVxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllckRhdGFJZENoYW5nZVVwZGF0ZXIoc3RhdGUsIGFjdGlvbikge1xuICBjb25zdCB7b2xkTGF5ZXIsIG5ld0NvbmZpZ30gPSBhY3Rpb247XG4gIGNvbnN0IHtkYXRhSWR9ID0gbmV3Q29uZmlnO1xuXG4gIGlmICghb2xkTGF5ZXIgfHwgIXN0YXRlLmRhdGFzZXRzW2RhdGFJZF0pIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcblxuICBsZXQgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyh7ZGF0YUlkfSk7XG4gIC8vIHRoaXMgbWF5IGhhcHBlbiB3aGVuIGEgbGF5ZXIgaXMgbmV3ICh0eXBlOiBudWxsIGFuZCBubyBjb2x1bW5zKSBidXQgaXQncyBub3QgcmVhZHkgdG8gYmUgc2F2ZWRcbiAgaWYgKG5ld0xheWVyLmlzVmFsaWRUb1NhdmUoKSkge1xuICAgIGNvbnN0IHZhbGlkYXRlZCA9IHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhKFxuICAgICAgc3RhdGUuZGF0YXNldHNbZGF0YUlkXSxcbiAgICAgIHN0YXRlLmxheWVyQ2xhc3NlcyxcbiAgICAgIG5ld0xheWVyXG4gICAgKTtcbiAgICAvLyBpZiBjYW50IHZhbGlkYXRlIGl0IHdpdGggZGF0YSBjcmVhdGUgYSBuZXcgb25lXG4gICAgaWYgKCF2YWxpZGF0ZWQpIHtcbiAgICAgIG5ld0xheWVyID0gbmV3IHN0YXRlLmxheWVyQ2xhc3Nlc1tvbGRMYXllci50eXBlXSh7ZGF0YUlkLCBpZDogb2xkTGF5ZXIuaWR9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TGF5ZXIgPSB2YWxpZGF0ZWQ7XG4gICAgfVxuICB9XG5cbiAgbmV3TGF5ZXIgPSBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgaXNWaXNpYmxlOiBvbGRMYXllci5jb25maWcuaXNWaXNpYmxlLFxuICAgIGlzQ29uZmlnQWN0aXZlOiB0cnVlXG4gIH0pO1xuXG4gIG5ld0xheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzKTtcbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgdW5kZWZpbmVkKTtcblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHN0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIHR5cGUuIFByZXZpZXdzIGxheWVyIGNvbmZpZyB3aWxsIGJlIGNvcGllZCBpZiBhcHBsaWNhYmxlLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL3Zpcy1zdGF0ZS11cGRhdGVycycpLmxheWVyVHlwZUNoYW5nZVVwZGF0ZXJ9XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclR5cGVDaGFuZ2VVcGRhdGVyKHN0YXRlLCBhY3Rpb24pIHtcbiAgY29uc3Qge29sZExheWVyLCBuZXdUeXBlfSA9IGFjdGlvbjtcbiAgaWYgKCFvbGRMYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBvbGRJZCA9IG9sZExheWVyLmlkO1xuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkSWQpO1xuXG4gIGlmICghc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdKSB7XG4gICAgQ29uc29sZS5lcnJvcihgJHtuZXdUeXBlfSBpcyBub3QgYSB2YWxpZCBsYXllciB0eXBlYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gZ2V0IGEgbWludCBsYXllciwgd2l0aCBuZXcgaWQgYW5kIHR5cGVcbiAgLy8gYmVjYXVzZSBkZWNrLmdsIHVzZXMgaWQgdG8gbWF0Y2ggYmV0d2VlbiBuZXcgYW5kIG9sZCBsYXllci5cbiAgLy8gSWYgdHlwZSBoYXMgY2hhbmdlZCBidXQgaWQgaXMgdGhlIHNhbWUsIGl0IHdpbGwgYnJlYWtcbiAgY29uc3QgbmV3TGF5ZXIgPSBuZXcgc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdKCk7XG5cbiAgbmV3TGF5ZXIuYXNzaWduQ29uZmlnVG9MYXllcihvbGRMYXllci5jb25maWcsIG9sZExheWVyLnZpc0NvbmZpZ1NldHRpbmdzKTtcblxuICBuZXdMYXllci51cGRhdGVMYXllckRvbWFpbihzdGF0ZS5kYXRhc2V0cyk7XG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUpO1xuICBsZXQgbmV3U3RhdGUgPSB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEoc3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcblxuICBpZiAobGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkIHx8IG9sZExheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIC8vIHVwZGF0ZSBzcGxpdE1hcCBsYXllciBpZFxuICBpZiAoc3RhdGUuc3BsaXRNYXBzLmxlbmd0aCkge1xuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICBzcGxpdE1hcHM6IG5ld1N0YXRlLnNwbGl0TWFwcy5tYXAoc2V0dGluZ3MgPT4ge1xuICAgICAgICBjb25zdCB7W29sZElkXTogb2xkTGF5ZXJNYXAsIC4uLm90aGVyTGF5ZXJzfSA9IHNldHRpbmdzLmxheWVycztcbiAgICAgICAgcmV0dXJuIG9sZElkIGluIHNldHRpbmdzLmxheWVyc1xuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAuLi5zZXR0aW5ncyxcbiAgICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgICAgLi4ub3RoZXJMYXllcnMsXG4gICAgICAgICAgICAgICAgW2xheWVyLmlkXTogb2xkTGF5ZXJNYXBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogc2V0dGluZ3M7XG4gICAgICB9KVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIHZpc3VhbCBjaGFubmVsXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykubGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlcn1cbiAqIEByZXR1cm5zIHtPYmplY3R9IG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlcihzdGF0ZSwgYWN0aW9uKSB7XG4gIGNvbnN0IHtvbGRMYXllciwgbmV3Q29uZmlnLCBjaGFubmVsfSA9IGFjdGlvbjtcbiAgaWYgKCFvbGRMYXllci5jb25maWcuZGF0YUlkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tvbGRMYXllci5jb25maWcuZGF0YUlkXTtcblxuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBjb25zdCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKG5ld0NvbmZpZyk7XG5cbiAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsKGRhdGFzZXQsIGNoYW5uZWwpO1xuXG4gIGNvbnN0IG9sZExheWVyRGF0YSA9IHN0YXRlLmxheWVyRGF0YVtpZHhdO1xuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlLCBvbGRMYXllckRhdGEpO1xuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEoc3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYHZpc0NvbmZpZ2BcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAdHlwZSB7dHlwZW9mIGltcG9ydCgnLi92aXMtc3RhdGUtdXBkYXRlcnMnKS5sYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXJ9XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIoc3RhdGUsIGFjdGlvbikge1xuICBjb25zdCB7b2xkTGF5ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBjb25zdCBwcm9wcyA9IE9iamVjdC5rZXlzKGFjdGlvbi5uZXdWaXNDb25maWcpO1xuICBjb25zdCBuZXdWaXNDb25maWcgPSB7XG4gICAgLi4ub2xkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZyxcbiAgICAuLi5hY3Rpb24ubmV3VmlzQ29uZmlnXG4gIH07XG5cbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyh7dmlzQ29uZmlnOiBuZXdWaXNDb25maWd9KTtcblxuICBpZiAobmV3TGF5ZXIuc2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhKHByb3BzKSkge1xuICAgIGNvbnN0IG9sZExheWVyRGF0YSA9IHN0YXRlLmxheWVyRGF0YVtpZHhdO1xuICAgIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIG9sZExheWVyRGF0YSk7XG4gICAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2xheWVyOiBuZXdMYXllciwgaWR4fSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGZpbHRlciBwcm9wZXJ0eVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL3Zpcy1zdGF0ZS11cGRhdGVycycpLnNldEZpbHRlckFuaW1hdGlvblRpbWVVcGRhdGVyfVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyQW5pbWF0aW9uVGltZVVwZGF0ZXIoc3RhdGUsIGFjdGlvbikge1xuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihzdGF0ZSwgYWN0aW9uKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZmlsdGVyIGFuaW1hdGlvbiB3aW5kb3dcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAdHlwZSB7dHlwZW9mIGltcG9ydCgnLi92aXMtc3RhdGUtdXBkYXRlcnMnKS5zZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyfVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlcihzdGF0ZSwge2lkLCBhbmltYXRpb25XaW5kb3d9KSB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoZiA9PlxuICAgICAgZi5pZCA9PT0gaWRcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5mLFxuICAgICAgICAgICAgYW5pbWF0aW9uV2luZG93XG4gICAgICAgICAgfVxuICAgICAgICA6IGZcbiAgICApXG4gIH07XG59XG4vKipcbiAqIFVwZGF0ZSBmaWx0ZXIgcHJvcGVydHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAdHlwZSB7dHlwZW9mIGltcG9ydCgnLi92aXMtc3RhdGUtdXBkYXRlcnMnKS5zZXRGaWx0ZXJVcGRhdGVyfVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyVXBkYXRlcihzdGF0ZSwgYWN0aW9uKSB7XG4gIGNvbnN0IHtpZHgsIHByb3AsIHZhbHVlLCB2YWx1ZUluZGV4ID0gMH0gPSBhY3Rpb247XG4gIGNvbnN0IG9sZEZpbHRlciA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcblxuICBpZiAoIW9sZEZpbHRlcikge1xuICAgIENvbnNvbGUuZXJyb3IoYGZpbHRlcnMuJHtpZHh9IGlzIHVuZGVmaW5lZGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsZXQgbmV3RmlsdGVyID0gc2V0KFtwcm9wXSwgdmFsdWUsIG9sZEZpbHRlcik7XG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuXG4gIGNvbnN0IHtkYXRhSWR9ID0gbmV3RmlsdGVyO1xuXG4gIC8vIEVuc3VyaW5nIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgbGV0IGRhdGFzZXRJZHMgPSB0b0FycmF5KGRhdGFJZCk7XG5cbiAgc3dpdGNoIChwcm9wKSB7XG4gICAgLy8gVE9ETzogTmV4dCBQUiBmb3IgVUkgaWYgd2UgdXBkYXRlIGRhdGFJZCwgd2UgbmVlZCB0byBjb25zaWRlciB0d28gY2FzZXM6XG4gICAgLy8gMS4gZGF0YUlkIGlzIGVtcHR5OiBjcmVhdGUgYSBkZWZhdWx0IGZpbHRlclxuICAgIC8vIDIuIEFkZCBhIG5ldyBkYXRhc2V0IGlkXG4gICAgY2FzZSBGSUxURVJfVVBEQVRFUl9QUk9QUy5kYXRhSWQ6XG4gICAgICAvLyBpZiB0cnlpbmcgdG8gdXBkYXRlIGZpbHRlciBkYXRhSWQuIGNyZWF0ZSBhbiBlbXB0eSBuZXcgZmlsdGVyXG4gICAgICBuZXdGaWx0ZXIgPSB1cGRhdGVGaWx0ZXJEYXRhSWQoZGF0YUlkKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBGSUxURVJfVVBEQVRFUl9QUk9QUy5uYW1lOlxuICAgICAgLy8gd2UgYXJlIHN1cHBvcnRpbmcgdGhlIGN1cnJlbnQgZnVuY3Rpb25hbGl0eVxuICAgICAgLy8gVE9ETzogTmV4dCBQUiBmb3IgVUkgZmlsdGVyIG5hbWUgd2lsbCBvbmx5IHVwZGF0ZSBmaWx0ZXIgbmFtZSBidXQgaXQgd29uJ3QgaGF2ZSBzaWRlIGVmZmVjdHNcbiAgICAgIC8vIHdlIGFyZSBnb25uYSB1c2UgcGFpciBvZiBkYXRhc2V0cyBhbmQgZmllbGRJZHggdG8gdXBkYXRlIHRoZSBmaWx0ZXJcbiAgICAgIGNvbnN0IGRhdGFzZXRJZCA9IG5ld0ZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF07XG4gICAgICBjb25zdCB7ZmlsdGVyOiB1cGRhdGVkRmlsdGVyLCBkYXRhc2V0OiBuZXdEYXRhc2V0fSA9IGFwcGx5RmlsdGVyRmllbGROYW1lKFxuICAgICAgICBuZXdGaWx0ZXIsXG4gICAgICAgIHN0YXRlLmRhdGFzZXRzW2RhdGFzZXRJZF0sXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB2YWx1ZUluZGV4LFxuICAgICAgICB7bWVyZ2VEb21haW46IGZhbHNlfVxuICAgICAgKTtcbiAgICAgIGlmICghdXBkYXRlZEZpbHRlcikge1xuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICB9XG5cbiAgICAgIG5ld0ZpbHRlciA9IHVwZGF0ZWRGaWx0ZXI7XG5cbiAgICAgIGlmIChuZXdGaWx0ZXIuZ3B1KSB7XG4gICAgICAgIG5ld0ZpbHRlciA9IHNldEZpbHRlckdwdU1vZGUobmV3RmlsdGVyLCBzdGF0ZS5maWx0ZXJzKTtcbiAgICAgICAgbmV3RmlsdGVyID0gYXNzaWduR3B1Q2hhbm5lbChuZXdGaWx0ZXIsIHN0YXRlLmZpbHRlcnMpO1xuICAgICAgfVxuXG4gICAgICBuZXdTdGF0ZSA9IHNldChbJ2RhdGFzZXRzJywgZGF0YXNldElkXSwgbmV3RGF0YXNldCwgc3RhdGUpO1xuXG4gICAgICAvLyBvbmx5IGZpbHRlciB0aGUgY3VycmVudCBkYXRhc2V0XG4gICAgICBicmVhaztcbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLmxheWVySWQ6XG4gICAgICAvLyBXZSBuZWVkIHRvIHVwZGF0ZSBvbmx5IGRhdGFzZXRJZC9zIGlmIHdlIGhhdmUgYWRkZWQvcmVtb3ZlZCBsYXllcnNcbiAgICAgIC8vIC0gY2hlY2sgZm9yIGxheWVySWQgY2hhbmdlcyAoWE9SIHdvcmtzIGJlY2F1c2Ugb2Ygc3RyaW5nIHZhbHVlcylcbiAgICAgIC8vIGlmIG5vIGRpZmZlcmVuY2VzIGJldHdlZW4gbGF5ZXJJZHMsIGRvbid0IGRvIGFueSBmaWx0ZXJpbmdcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGNvbnN0IGxheWVySWREaWZmZXJlbmNlID0geG9yKG5ld0ZpbHRlci5sYXllcklkLCBvbGRGaWx0ZXIubGF5ZXJJZCk7XG5cbiAgICAgIGNvbnN0IGxheWVyRGF0YUlkcyA9IHVuaXEoXG4gICAgICAgIGxheWVySWREaWZmZXJlbmNlXG4gICAgICAgICAgLm1hcChsaWQgPT5cbiAgICAgICAgICAgIGdldChcbiAgICAgICAgICAgICAgc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsaWQpLFxuICAgICAgICAgICAgICBbJ2NvbmZpZycsICdkYXRhSWQnXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgICAuZmlsdGVyKGQgPT4gZClcbiAgICAgICk7XG5cbiAgICAgIC8vIG9ubHkgZmlsdGVyIGRhdGFzZXRzSWRzXG4gICAgICBkYXRhc2V0SWRzID0gbGF5ZXJEYXRhSWRzO1xuXG4gICAgICAvLyBVcGRhdGUgbmV3RmlsdGVyIGRhdGFJZHNcbiAgICAgIGNvbnN0IG5ld0RhdGFJZHMgPSB1bmlxKFxuICAgICAgICBuZXdGaWx0ZXIubGF5ZXJJZFxuICAgICAgICAgIC5tYXAobGlkID0+XG4gICAgICAgICAgICBnZXQoXG4gICAgICAgICAgICAgIHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gbGlkKSxcbiAgICAgICAgICAgICAgWydjb25maWcnLCAnZGF0YUlkJ11cbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgICAgLmZpbHRlcihkID0+IGQpXG4gICAgICApO1xuXG4gICAgICBuZXdGaWx0ZXIgPSB7XG4gICAgICAgIC4uLm5ld0ZpbHRlcixcbiAgICAgICAgZGF0YUlkOiBuZXdEYXRhSWRzXG4gICAgICB9O1xuXG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgYnJlYWs7XG4gIH1cblxuICBjb25zdCBlbmxhcmdlZEZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChmID0+IGYuZW5sYXJnZWQpO1xuXG4gIGlmIChlbmxhcmdlZEZpbHRlciAmJiBlbmxhcmdlZEZpbHRlci5pZCAhPT0gbmV3RmlsdGVyLmlkKSB7XG4gICAgLy8gdGhlcmUgc2hvdWxkIGJlIG9ubHkgb25lIGVubGFyZ2VkIGZpbHRlclxuICAgIG5ld0ZpbHRlci5lbmxhcmdlZCA9IGZhbHNlO1xuICB9XG5cbiAgLy8gc2F2ZSBuZXcgZmlsdGVycyB0byBuZXdTdGF0ZVxuICBuZXdTdGF0ZSA9IHNldChbJ2ZpbHRlcnMnLCBpZHhdLCBuZXdGaWx0ZXIsIG5ld1N0YXRlKTtcblxuICAvLyBpZiB3ZSBhcmUgY3VycmVudGx5IHNldHRpbmcgYSBwcm9wIHRoYXQgb25seSByZXF1aXJlcyB0byBmaWx0ZXIgdGhlIGN1cnJlbnRcbiAgLy8gZGF0YXNldCB3ZSB3aWxsIHBhc3Mgb25seSB0aGUgY3VycmVudCBkYXRhc2V0IHRvIGFwcGx5RmlsdGVyc1RvRGF0YXNldHMgYW5kXG4gIC8vIHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YSBvdGhlcndpc2Ugd2UgcGFzcyB0aGUgYWxsIGxpc3Qgb2YgZGF0YXNldHMgYXMgZGVmaW5lZCBpbiBkYXRhSWRcbiAgY29uc3QgZGF0YXNldElkc1RvRmlsdGVyID0gTElNSVRFRF9GSUxURVJfRUZGRUNUX1BST1BTW3Byb3BdXG4gICAgPyBbZGF0YXNldElkc1t2YWx1ZUluZGV4XV1cbiAgICA6IGRhdGFzZXRJZHM7XG5cbiAgLy8gZmlsdGVyIGRhdGFcbiAgY29uc3QgZmlsdGVyZWREYXRhc2V0cyA9IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoXG4gICAgZGF0YXNldElkc1RvRmlsdGVyLFxuICAgIG5ld1N0YXRlLmRhdGFzZXRzLFxuICAgIG5ld1N0YXRlLmZpbHRlcnMsXG4gICAgbmV3U3RhdGUubGF5ZXJzXG4gICk7XG5cbiAgbmV3U3RhdGUgPSBzZXQoWydkYXRhc2V0cyddLCBmaWx0ZXJlZERhdGFzZXRzLCBuZXdTdGF0ZSk7XG4gIC8vIGRhdGFJZCBpcyBhbiBhcnJheVxuICAvLyBwYXNzIG9ubHkgdGhlIGRhdGFzZXQgd2UgbmVlZCB0byB1cGRhdGVcbiAgbmV3U3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobmV3U3RhdGUsIGRhdGFzZXRJZHNUb0ZpbHRlciwgbmV3RmlsdGVyKTtcblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogU2V0IHRoZSBwcm9wZXJ0eSBvZiBhIGZpbHRlciBwbG90XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykuc2V0RmlsdGVyUGxvdFVwZGF0ZXJ9XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRGaWx0ZXJQbG90VXBkYXRlciA9IChzdGF0ZSwge2lkeCwgbmV3UHJvcCwgdmFsdWVJbmRleCA9IDB9KSA9PiB7XG4gIGxldCBuZXdGaWx0ZXIgPSB7Li4uc3RhdGUuZmlsdGVyc1tpZHhdLCAuLi5uZXdQcm9wfTtcbiAgY29uc3QgcHJvcCA9IE9iamVjdC5rZXlzKG5ld1Byb3ApWzBdO1xuICBpZiAocHJvcCA9PT0gJ3lBeGlzJykge1xuICAgIGNvbnN0IHBsb3RUeXBlID0gZ2V0RGVmYXVsdEZpbHRlclBsb3RUeXBlKG5ld0ZpbHRlcik7XG4gICAgLy8gVE9ETzogcGxvdCBpcyBub3Qgc3VwcG9ydGVkIGluIG11bHRpIGRhdGFzZXQgZmlsdGVyIGZvciBub3dcbiAgICBpZiAocGxvdFR5cGUpIHtcbiAgICAgIG5ld0ZpbHRlciA9IHtcbiAgICAgICAgLi4ubmV3RmlsdGVyLFxuICAgICAgICAuLi5nZXRGaWx0ZXJQbG90KHsuLi5uZXdGaWx0ZXIsIHBsb3RUeXBlfSwgc3RhdGUuZGF0YXNldHNbbmV3RmlsdGVyLmRhdGFJZFt2YWx1ZUluZGV4XV0pLFxuICAgICAgICBwbG90VHlwZVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PiAoaSA9PT0gaWR4ID8gbmV3RmlsdGVyIDogZikpXG4gIH07XG59O1xuXG4vKipcbiAqIEFkZCBhIG5ldyBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAdHlwZSB7dHlwZW9mIGltcG9ydCgnLi92aXMtc3RhdGUtdXBkYXRlcnMnKS5hZGRGaWx0ZXJVcGRhdGVyfVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkRmlsdGVyVXBkYXRlciA9IChzdGF0ZSwgYWN0aW9uKSA9PlxuICAhYWN0aW9uLmRhdGFJZFxuICAgID8gc3RhdGVcbiAgICA6IHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGZpbHRlcnM6IFsuLi5zdGF0ZS5maWx0ZXJzLCBnZXREZWZhdWx0RmlsdGVyKGFjdGlvbi5kYXRhSWQpXVxuICAgICAgfTtcblxuLyoqXG4gKiBTZXQgbGF5ZXIgY29sb3IgcGFsZXR0ZSB1aSBzdGF0ZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL3Zpcy1zdGF0ZS11cGRhdGVycycpLmxheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBsYXllckNvbG9yVUlDaGFuZ2VVcGRhdGVyID0gKHN0YXRlLCB7b2xkTGF5ZXIsIHByb3AsIG5ld0NvbmZpZ30pID0+IHtcbiAgY29uc3Qgb2xkVml4Q29uZmlnID0gb2xkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1twcm9wXTtcbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbG9yVUkocHJvcCwgbmV3Q29uZmlnKTtcbiAgY29uc3QgbmV3VmlzQ29uZmlnID0gbmV3TGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1twcm9wXTtcbiAgaWYgKG9sZFZpeENvbmZpZyAhPT0gbmV3VmlzQ29uZmlnKSB7XG4gICAgcmV0dXJuIGxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlcihzdGF0ZSwge1xuICAgICAgb2xkTGF5ZXIsXG4gICAgICBuZXdWaXNDb25maWc6IHtcbiAgICAgICAgW3Byb3BdOiBuZXdWaXNDb25maWdcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3RhdGUubGF5ZXJzLm1hcChsID0+IChsLmlkID09PSBvbGRMYXllci5pZCA/IG5ld0xheWVyIDogbCkpXG4gIH07XG59O1xuXG4vKipcbiAqIFN0YXJ0IGFuZCBlbmQgZmlsdGVyIGFuaW1hdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL3Zpcy1zdGF0ZS11cGRhdGVycycpLnRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXJ9XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVGaWx0ZXJBbmltYXRpb25VcGRhdGVyID0gKHN0YXRlLCBhY3Rpb24pID0+ICh7XG4gIC4uLnN0YXRlLFxuICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT4gKGkgPT09IGFjdGlvbi5pZHggPyB7Li4uZiwgaXNBbmltYXRpbmc6ICFmLmlzQW5pbWF0aW5nfSA6IGYpKVxufSk7XG5cbi8qKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL3Zpcy1zdGF0ZS11cGRhdGVycycpLnRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlcn1cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlciA9IHN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBhbmltYXRpb25Db25maWc6IHtcbiAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgaXNBbmltYXRpbmc6ICFzdGF0ZS5hbmltYXRpb25Db25maWcuaXNBbmltYXRpbmdcbiAgfVxufSk7XG5cbi8qKlxuICogSGlkZSBhbmQgc2hvdyBsYXllciBhbmltYXRpb24gY29udHJvbFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL3Zpcy1zdGF0ZS11cGRhdGVycycpLnRvZ2dsZUxheWVyQW5pbWF0aW9uQ29udHJvbFVwZGF0ZXJ9XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVMYXllckFuaW1hdGlvbkNvbnRyb2xVcGRhdGVyID0gc3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICBoaWRlQ29udHJvbDogIXN0YXRlLmFuaW1hdGlvbkNvbmZpZy5oaWRlQ29udHJvbFxuICB9XG59KTtcblxuLyoqXG4gKiBDaGFuZ2UgZmlsdGVyIGFuaW1hdGlvbiBzcGVlZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL3Zpcy1zdGF0ZS11cGRhdGVycycpLnVwZGF0ZUZpbHRlckFuaW1hdGlvblNwZWVkVXBkYXRlcn1cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUZpbHRlckFuaW1hdGlvblNwZWVkVXBkYXRlciA9IChzdGF0ZSwgYWN0aW9uKSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+IChpID09PSBhY3Rpb24uaWR4ID8gey4uLmYsIHNwZWVkOiBhY3Rpb24uc3BlZWR9IDogZikpXG59KTtcblxuLyoqXG4gKiBSZXNldCBhbmltYXRpb24gY29uZmlnIGN1cnJlbnQgdGltZSB0byBhIHNwZWNpZmllZCB2YWx1ZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL3Zpcy1zdGF0ZS11cGRhdGVycycpLnNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXJ9XG4gKiBAcHVibGljXG4gKlxuICovXG5leHBvcnQgY29uc3Qgc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlciA9IChzdGF0ZSwge3ZhbHVlfSkgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICBjdXJyZW50VGltZTogdmFsdWVcbiAgfVxufSk7XG5cbi8qKlxuICogVXBkYXRlIGFuaW1hdGlvbiBzcGVlZCB3aXRoIHRoZSB2ZXJ0aWNhbCBzcGVlZCBzbGlkZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAdHlwZSB7dHlwZW9mIGltcG9ydCgnLi92aXMtc3RhdGUtdXBkYXRlcnMnKS51cGRhdGVMYXllckFuaW1hdGlvblNwZWVkVXBkYXRlcn1cbiAqIEBwdWJsaWNcbiAqXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVMYXllckFuaW1hdGlvblNwZWVkVXBkYXRlciA9IChzdGF0ZSwge3NwZWVkfSkgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgc3BlZWRcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIFNob3cgbGFyZ2VyIHRpbWUgZmlsdGVyIGF0IGJvdHRvbSBmb3IgdGltZSBwbGF5YmFjayAoYXBwbHkgdG8gdGltZSBmaWx0ZXIgb25seSlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAdHlwZSB7dHlwZW9mIGltcG9ydCgnLi92aXMtc3RhdGUtdXBkYXRlcnMnKS5lbmxhcmdlRmlsdGVyVXBkYXRlcn1cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGVubGFyZ2VGaWx0ZXJVcGRhdGVyID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT5cbiAgICAgIGkgPT09IGFjdGlvbi5pZHhcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5mLFxuICAgICAgICAgICAgZW5sYXJnZWQ6ICFmLmVubGFyZ2VkXG4gICAgICAgICAgfVxuICAgICAgICA6IGZcbiAgICApXG4gIH07XG59O1xuXG4vKipcbiAqIFRvZ2dsZXMgZmlsdGVyIGZlYXR1cmUgdmlzaWJpbGl0eVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL3Zpcy1zdGF0ZS11cGRhdGVycycpLnRvZ2dsZUZpbHRlckZlYXR1cmVVcGRhdGVyfVxuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlRmlsdGVyRmVhdHVyZVVwZGF0ZXIgPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2FjdGlvbi5pZHhdO1xuICBjb25zdCBpc1Zpc2libGUgPSBnZXQoZmlsdGVyLCBbJ3ZhbHVlJywgJ3Byb3BlcnRpZXMnLCAnaXNWaXNpYmxlJ10pO1xuICBjb25zdCBuZXdGaWx0ZXIgPSB7XG4gICAgLi4uZmlsdGVyLFxuICAgIHZhbHVlOiBmZWF0dXJlVG9GaWx0ZXJWYWx1ZShmaWx0ZXIudmFsdWUsIGZpbHRlci5pZCwge1xuICAgICAgaXNWaXNpYmxlOiAhaXNWaXNpYmxlXG4gICAgfSlcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IE9iamVjdC5hc3NpZ24oWy4uLnN0YXRlLmZpbHRlcnNdLCB7W2FjdGlvbi5pZHhdOiBuZXdGaWx0ZXJ9KVxuICB9O1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAdHlwZSB7dHlwZW9mIGltcG9ydCgnLi92aXMtc3RhdGUtdXBkYXRlcnMnKS5yZW1vdmVGaWx0ZXJVcGRhdGVyfVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlRmlsdGVyVXBkYXRlciA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gIGNvbnN0IHtpZHh9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YUlkLCBpZH0gPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG5cbiAgY29uc3QgbmV3RmlsdGVycyA9IFtcbiAgICAuLi5zdGF0ZS5maWx0ZXJzLnNsaWNlKDAsIGlkeCksXG4gICAgLi4uc3RhdGUuZmlsdGVycy5zbGljZShpZHggKyAxLCBzdGF0ZS5maWx0ZXJzLmxlbmd0aClcbiAgXTtcblxuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhkYXRhSWQsIHN0YXRlLmRhdGFzZXRzLCBuZXdGaWx0ZXJzLCBzdGF0ZS5sYXllcnMpO1xuICBjb25zdCBuZXdFZGl0b3IgPVxuICAgIGdldEZpbHRlcklkSW5GZWF0dXJlKHN0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmUpID09PSBpZFxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICAgICAgICB9XG4gICAgICA6IHN0YXRlLmVkaXRvcjtcblxuICBsZXQgbmV3U3RhdGUgPSBzZXQoWydmaWx0ZXJzJ10sIG5ld0ZpbHRlcnMsIHN0YXRlKTtcbiAgbmV3U3RhdGUgPSBzZXQoWydkYXRhc2V0cyddLCBmaWx0ZXJlZERhdGFzZXRzLCBuZXdTdGF0ZSk7XG4gIG5ld1N0YXRlID0gc2V0KFsnZWRpdG9yJ10sIG5ld0VkaXRvciwgbmV3U3RhdGUpO1xuXG4gIHJldHVybiB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobmV3U3RhdGUsIGRhdGFJZCwgdW5kZWZpbmVkKTtcbn07XG5cbi8qKlxuICogQWRkIGEgbmV3IGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykuYWRkTGF5ZXJVcGRhdGVyfVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkTGF5ZXJVcGRhdGVyID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgbGV0IG5ld0xheWVyO1xuICBsZXQgbmV3TGF5ZXJEYXRhO1xuICBpZiAoYWN0aW9uLmNvbmZpZykge1xuICAgIG5ld0xheWVyID0gY3JlYXRlTGF5ZXJGcm9tQ29uZmlnKHN0YXRlLCBhY3Rpb24uY29uZmlnKTtcbiAgICBpZiAoIW5ld0xheWVyKSB7XG4gICAgICBDb25zb2xlLndhcm4oXG4gICAgICAgICdGYWlsZWQgdG8gY3JlYXRlIGxheWVyIGZyb20gY29uZmlnLCBpdCB1c3VhbGx5IG1lYW5zIHRoZSBjb25maWcgaXMgbm90IGJlIGluIGNvcnJlY3QgZm9ybWF0JyxcbiAgICAgICAgYWN0aW9uLmNvbmZpZ1xuICAgICAgKTtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlKTtcbiAgICBuZXdMYXllciA9IHJlc3VsdC5sYXllcjtcbiAgICBuZXdMYXllckRhdGEgPSByZXN1bHQubGF5ZXJEYXRhO1xuICB9IGVsc2Uge1xuICAgIC8vIGNyZWF0ZSBhbiBlbXB0eSBsYXllciB3aXRoIHRoZSBmaXJzdCBhdmFpbGFibGUgZGF0YXNldFxuICAgIGNvbnN0IGRlZmF1bHREYXRhc2V0ID0gT2JqZWN0LmtleXMoc3RhdGUuZGF0YXNldHMpWzBdO1xuICAgIG5ld0xheWVyID0gbmV3IExheWVyKHtcbiAgICAgIGlzVmlzaWJsZTogdHJ1ZSxcbiAgICAgIGlzQ29uZmlnQWN0aXZlOiB0cnVlLFxuICAgICAgZGF0YUlkOiBkZWZhdWx0RGF0YXNldFxuICAgIH0pO1xuICAgIG5ld0xheWVyRGF0YSA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBbLi4uc3RhdGUubGF5ZXJzLCBuZXdMYXllcl0sXG4gICAgbGF5ZXJEYXRhOiBbLi4uc3RhdGUubGF5ZXJEYXRhLCBuZXdMYXllckRhdGFdLFxuICAgIGxheWVyT3JkZXI6IFsuLi5zdGF0ZS5sYXllck9yZGVyLCBzdGF0ZS5sYXllck9yZGVyLmxlbmd0aF0sXG4gICAgc3BsaXRNYXBzOiBhZGROZXdMYXllcnNUb1NwbGl0TWFwKHN0YXRlLnNwbGl0TWFwcywgbmV3TGF5ZXIpXG4gIH07XG59O1xuXG4vKipcbiAqIHJlbW92ZSBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL3Zpcy1zdGF0ZS11cGRhdGVycycpLnJlbW92ZUxheWVyVXBkYXRlcn1cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUxheWVyVXBkYXRlciA9IChzdGF0ZSwge2lkeH0pID0+IHtcbiAgY29uc3Qge2xheWVycywgbGF5ZXJEYXRhLCBjbGlja2VkLCBob3ZlckluZm99ID0gc3RhdGU7XG4gIGNvbnN0IGxheWVyVG9SZW1vdmUgPSBzdGF0ZS5sYXllcnNbaWR4XTtcbiAgY29uc3QgbmV3TWFwcyA9IHJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyhzdGF0ZS5zcGxpdE1hcHMsIGxheWVyVG9SZW1vdmUpO1xuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogWy4uLmxheWVycy5zbGljZSgwLCBpZHgpLCAuLi5sYXllcnMuc2xpY2UoaWR4ICsgMSwgbGF5ZXJzLmxlbmd0aCldLFxuICAgIGxheWVyRGF0YTogWy4uLmxheWVyRGF0YS5zbGljZSgwLCBpZHgpLCAuLi5sYXllckRhdGEuc2xpY2UoaWR4ICsgMSwgbGF5ZXJEYXRhLmxlbmd0aCldLFxuICAgIGxheWVyT3JkZXI6IHN0YXRlLmxheWVyT3JkZXIuZmlsdGVyKGkgPT4gaSAhPT0gaWR4KS5tYXAocGlkID0+IChwaWQgPiBpZHggPyBwaWQgLSAxIDogcGlkKSksXG4gICAgY2xpY2tlZDogbGF5ZXJUb1JlbW92ZS5pc0xheWVySG92ZXJlZChjbGlja2VkKSA/IHVuZGVmaW5lZCA6IGNsaWNrZWQsXG4gICAgaG92ZXJJbmZvOiBsYXllclRvUmVtb3ZlLmlzTGF5ZXJIb3ZlcmVkKGhvdmVySW5mbykgPyB1bmRlZmluZWQgOiBob3ZlckluZm8sXG4gICAgc3BsaXRNYXBzOiBuZXdNYXBzXG4gICAgLy8gVE9ETzogdXBkYXRlIGZpbHRlcnMsIGNyZWF0ZSBoZWxwZXIgdG8gcmVtb3ZlIGxheWVyIGZvcm0gZmlsdGVyIChyZW1vdmUgbGF5ZXJpZCBhbmQgZGF0YWlkKSBpZiBtYXBwZWRcbiAgfTtcblxuICByZXR1cm4gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbn07XG5cbi8qKlxuICogZHVwbGljYXRlIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykuZHVwbGljYXRlTGF5ZXJVcGRhdGVyfVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgZHVwbGljYXRlTGF5ZXJVcGRhdGVyID0gKHN0YXRlLCB7aWR4fSkgPT4ge1xuICBjb25zdCB7bGF5ZXJzfSA9IHN0YXRlO1xuICBjb25zdCBvcmlnaW5hbCA9IHN0YXRlLmxheWVyc1tpZHhdO1xuICBjb25zdCBvcmlnaW5hbExheWVyT3JkZXJJZHggPSBzdGF0ZS5sYXllck9yZGVyLmZpbmRJbmRleChpID0+IGkgPT09IGlkeCk7XG5cbiAgaWYgKCFvcmlnaW5hbCkge1xuICAgIENvbnNvbGUud2FybihgbGF5ZXIuJHtpZHh9IGlzIHVuZGVmaW5lZGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsZXQgbmV3TGFiZWwgPSBgQ29weSBvZiAke29yaWdpbmFsLmNvbmZpZy5sYWJlbH1gO1xuICBsZXQgcG9zdGZpeCA9IDA7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcbiAgd2hpbGUgKGxheWVycy5maW5kKGwgPT4gbC5jb25maWcubGFiZWwgPT09IG5ld0xhYmVsKSkge1xuICAgIG5ld0xhYmVsID0gYENvcHkgb2YgJHtvcmlnaW5hbC5jb25maWcubGFiZWx9ICR7Kytwb3N0Zml4fWA7XG4gIH1cblxuICAvLyBjb2xsZWN0IGxheWVyIGNvbmZpZyBmcm9tIG9yaWdpbmFsXG4gIGNvbnN0IGxvYWRlZExheWVyID0gc2VyaWFsaXplTGF5ZXIob3JpZ2luYWwpO1xuXG4gIC8vIGFzc2lnbiBuZXcgaWQgYW5kIGxhYmVsIHRvIGNvcGllZCBsYXllclxuICBpZiAoIWxvYWRlZExheWVyLmNvbmZpZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsb2FkZWRMYXllci5jb25maWcubGFiZWwgPSBuZXdMYWJlbDtcbiAgbG9hZGVkTGF5ZXIuaWQgPSBnZW5lcmF0ZUhhc2hJZChMQVlFUl9JRF9MRU5HVEgpO1xuXG4gIC8vIGFkZCBsYXllciB0byBzdGF0ZVxuICBsZXQgbmV4dFN0YXRlID0gYWRkTGF5ZXJVcGRhdGVyKHN0YXRlLCB7Y29uZmlnOiBsb2FkZWRMYXllcn0pO1xuXG4gIC8vIG5ldyBhZGRlZCBsYXllciBhcmUgYXQgdGhlIGVuZCwgbW92ZSBpdCB0byBiZSBvbiB0b3Agb2Ygb3JpZ2luYWwgbGF5ZXJcbiAgY29uc3QgbmV3TGF5ZXJPcmRlcklkeCA9IG5leHRTdGF0ZS5sYXllck9yZGVyLmxlbmd0aCAtIDE7XG4gIGNvbnN0IG5ld0xheWVyT3JkZXIgPSBhcnJheUluc2VydChcbiAgICBuZXh0U3RhdGUubGF5ZXJPcmRlci5zbGljZSgwLCBuZXdMYXllck9yZGVySWR4KSxcbiAgICBvcmlnaW5hbExheWVyT3JkZXJJZHgsXG4gICAgbmV3TGF5ZXJPcmRlcklkeFxuICApO1xuXG4gIG5leHRTdGF0ZSA9IHtcbiAgICAuLi5uZXh0U3RhdGUsXG4gICAgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlclxuICB9O1xuXG4gIHJldHVybiB1cGRhdGVBbmltYXRpb25Eb21haW4obmV4dFN0YXRlKTtcbn07XG5cbi8qKlxuICogUmVvcmRlciBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL3Zpcy1zdGF0ZS11cGRhdGVycycpLnJlb3JkZXJMYXllclVwZGF0ZXJ9XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW9yZGVyTGF5ZXJVcGRhdGVyID0gKHN0YXRlLCB7b3JkZXJ9KSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbGF5ZXJPcmRlcjogb3JkZXJcbn0pO1xuXG4vKipcbiAqIFJlbW92ZSBhIGRhdGFzZXQgYW5kIGFsbCBsYXllcnMsIGZpbHRlcnMsIHRvb2x0aXAgY29uZmlncyB0aGF0IGJhc2VkIG9uIGl0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykucmVtb3ZlRGF0YXNldFVwZGF0ZXJ9XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVEYXRhc2V0VXBkYXRlciA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gIC8vIGV4dHJhY3QgZGF0YXNldCBrZXlcbiAgY29uc3Qge2RhdGFJZDogZGF0YXNldEtleX0gPSBhY3Rpb247XG4gIGNvbnN0IHtkYXRhc2V0c30gPSBzdGF0ZTtcblxuICAvLyBjaGVjayBpZiBkYXRhc2V0IGlzIHByZXNlbnRcbiAgaWYgKCFkYXRhc2V0c1tkYXRhc2V0S2V5XSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4gIGNvbnN0IHtcbiAgICBsYXllcnMsXG4gICAgZGF0YXNldHM6IHtbZGF0YXNldEtleV06IGRhdGFzZXQsIC4uLm5ld0RhdGFzZXRzfVxuICB9ID0gc3RhdGU7XG4gIC8qIGVzbGludC1lbmFibGUgbm8tdW51c2VkLXZhcnMgKi9cblxuICBjb25zdCBpbmRleGVzID0gbGF5ZXJzLnJlZHVjZSgobGlzdE9mSW5kZXhlcywgbGF5ZXIsIGluZGV4KSA9PiB7XG4gICAgaWYgKGxheWVyLmNvbmZpZy5kYXRhSWQgPT09IGRhdGFzZXRLZXkpIHtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGxpc3RPZkluZGV4ZXMucHVzaChpbmRleCk7XG4gICAgfVxuICAgIHJldHVybiBsaXN0T2ZJbmRleGVzO1xuICB9LCBbXSk7XG5cbiAgLy8gcmVtb3ZlIGxheWVycyBhbmQgZGF0YXNldHNcbiAgY29uc3Qge25ld1N0YXRlfSA9IGluZGV4ZXMucmVkdWNlKFxuICAgICh7bmV3U3RhdGU6IGN1cnJlbnRTdGF0ZSwgaW5kZXhDb3VudGVyfSwgaWR4KSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50SW5kZXggPSBpZHggLSBpbmRleENvdW50ZXI7XG4gICAgICBjdXJyZW50U3RhdGUgPSByZW1vdmVMYXllclVwZGF0ZXIoY3VycmVudFN0YXRlLCB7aWR4OiBjdXJyZW50SW5kZXh9KTtcbiAgICAgIGluZGV4Q291bnRlcisrO1xuICAgICAgcmV0dXJuIHtuZXdTdGF0ZTogY3VycmVudFN0YXRlLCBpbmRleENvdW50ZXJ9O1xuICAgIH0sXG4gICAge25ld1N0YXRlOiB7Li4uc3RhdGUsIGRhdGFzZXRzOiBuZXdEYXRhc2V0c30sIGluZGV4Q291bnRlcjogMH1cbiAgKTtcblxuICAvLyByZW1vdmUgZmlsdGVyc1xuICBjb25zdCBmaWx0ZXJzID0gc3RhdGUuZmlsdGVycy5maWx0ZXIoZmlsdGVyID0+ICFmaWx0ZXIuZGF0YUlkLmluY2x1ZGVzKGRhdGFzZXRLZXkpKTtcblxuICAvLyB1cGRhdGUgaW50ZXJhY3Rpb25Db25maWdcbiAgbGV0IHtpbnRlcmFjdGlvbkNvbmZpZ30gPSBzdGF0ZTtcbiAgY29uc3Qge3Rvb2x0aXB9ID0gaW50ZXJhY3Rpb25Db25maWc7XG4gIGlmICh0b29sdGlwKSB7XG4gICAgY29uc3Qge2NvbmZpZ30gPSB0b29sdGlwO1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4gICAgY29uc3Qge1tkYXRhc2V0S2V5XTogZmllbGRzLCAuLi5maWVsZHNUb1Nob3d9ID0gY29uZmlnLmZpZWxkc1RvU2hvdztcbiAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLXVudXNlZC12YXJzICovXG4gICAgaW50ZXJhY3Rpb25Db25maWcgPSB7XG4gICAgICAuLi5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgIHRvb2x0aXA6IHsuLi50b29sdGlwLCBjb25maWc6IHsuLi5jb25maWcsIGZpZWxkc1RvU2hvd319XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7Li4ubmV3U3RhdGUsIGZpbHRlcnMsIGludGVyYWN0aW9uQ29uZmlnfTtcbn07XG5cbi8qKlxuICogdXBkYXRlIGxheWVyIGJsZW5kaW5nIG1vZGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAdHlwZSB7dHlwZW9mIGltcG9ydCgnLi92aXMtc3RhdGUtdXBkYXRlcnMnKS51cGRhdGVMYXllckJsZW5kaW5nVXBkYXRlcn1cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyID0gKHN0YXRlLCBhY3Rpb24pID0+ICh7XG4gIC4uLnN0YXRlLFxuICBsYXllckJsZW5kaW5nOiBhY3Rpb24ubW9kZVxufSk7XG5cbi8qKlxuICogRGlzcGxheSBkYXRhc2V0IHRhYmxlIGluIGEgbW9kYWxcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAdHlwZSB7dHlwZW9mIGltcG9ydCgnLi92aXMtc3RhdGUtdXBkYXRlcnMnKS5zaG93RGF0YXNldFRhYmxlVXBkYXRlcn1cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNob3dEYXRhc2V0VGFibGVVcGRhdGVyID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0aW5nRGF0YXNldDogYWN0aW9uLmRhdGFJZFxuICB9O1xufTtcblxuLyoqXG4gKiByZXNldCB2aXNTdGF0ZSB0byBpbml0aWFsIFN0YXRlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykucmVzZXRNYXBDb25maWdVcGRhdGVyfVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVzZXRNYXBDb25maWdVcGRhdGVyID0gc3RhdGUgPT4gKHtcbiAgLi4uSU5JVElBTF9WSVNfU1RBVEUsXG4gIC4uLnN0YXRlLmluaXRpYWxTdGF0ZSxcbiAgaW5pdGlhbFN0YXRlOiBzdGF0ZS5pbml0aWFsU3RhdGVcbn0pO1xuXG4vKipcbiAqIFByb3BhZ2F0ZSBgdmlzU3RhdGVgIHJlZHVjZXIgd2l0aCBhIG5ldyBjb25maWd1cmF0aW9uLiBDdXJyZW50IGNvbmZpZyB3aWxsIGJlIG92ZXJyaWRlLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL3Zpcy1zdGF0ZS11cGRhdGVycycpLnJlY2VpdmVNYXBDb25maWdVcGRhdGVyfVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIgPSAoc3RhdGUsIHtwYXlsb2FkOiB7Y29uZmlnID0ge30sIG9wdGlvbnMgPSB7fX19KSA9PiB7XG4gIGlmICghY29uZmlnLnZpc1N0YXRlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge2tlZXBFeGlzdGluZ0NvbmZpZ30gPSBvcHRpb25zO1xuXG4gIC8vIHJlc2V0IGNvbmZpZyBpZiBrZWVwRXhpc3RpbmdDb25maWcgaXMgZmFsc3lcbiAgbGV0IG1lcmdlZFN0YXRlID0gIWtlZXBFeGlzdGluZ0NvbmZpZyA/IHJlc2V0TWFwQ29uZmlnVXBkYXRlcihzdGF0ZSkgOiBzdGF0ZTtcbiAgZm9yIChjb25zdCBtZXJnZXIgb2Ygc3RhdGUubWVyZ2Vycykge1xuICAgIGlmIChpc1ZhbGlkTWVyZ2VyKG1lcmdlcikgJiYgY29uZmlnLnZpc1N0YXRlW21lcmdlci5wcm9wXSkge1xuICAgICAgbWVyZ2VkU3RhdGUgPSBtZXJnZXIubWVyZ2UobWVyZ2VkU3RhdGUsIGNvbmZpZy52aXNTdGF0ZVttZXJnZXIucHJvcF0sIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXJnZWRTdGF0ZTtcbn07XG5cbi8qKlxuICogVHJpZ2dlciBsYXllciBob3ZlciBldmVudCB3aXRoIGhvdmVyZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykubGF5ZXJIb3ZlclVwZGF0ZXJ9XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsYXllckhvdmVyVXBkYXRlciA9IChzdGF0ZSwgYWN0aW9uKSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgaG92ZXJJbmZvOiBhY3Rpb24uaW5mb1xufSk7XG5cbi8qIGVzbGludC1lbmFibGUgbWF4LXN0YXRlbWVudHMgKi9cblxuLyoqXG4gKiBVcGRhdGUgYGludGVyYWN0aW9uQ29uZmlnYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL3Zpcy1zdGF0ZS11cGRhdGVycycpLmludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlcn1cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlcihzdGF0ZSwgYWN0aW9uKSB7XG4gIGNvbnN0IHtjb25maWd9ID0gYWN0aW9uO1xuXG4gIGNvbnN0IGludGVyYWN0aW9uQ29uZmlnID0ge1xuICAgIC4uLnN0YXRlLmludGVyYWN0aW9uQ29uZmlnLFxuICAgIC4uLntbY29uZmlnLmlkXTogY29uZmlnfVxuICB9O1xuXG4gIC8vIERvbid0IGVuYWJsZSB0b29sdGlwIGFuZCBicnVzaCBhdCB0aGUgc2FtZSB0aW1lXG4gIC8vIGJ1dCBjb29yZGluYXRlcyBjYW4gYmUgc2hvd24gYXQgYWxsIHRpbWVcbiAgY29uc3QgY29udHJhZGljdCA9IFsnYnJ1c2gnLCAndG9vbHRpcCddO1xuXG4gIGlmIChcbiAgICBjb250cmFkaWN0LmluY2x1ZGVzKGNvbmZpZy5pZCkgJiZcbiAgICBjb25maWcuZW5hYmxlZCAmJlxuICAgICFzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZ1tjb25maWcuaWRdLmVuYWJsZWRcbiAgKSB7XG4gICAgLy8gb25seSBlbmFibGUgb25lIGludGVyYWN0aW9uIGF0IGEgdGltZVxuICAgIGNvbnRyYWRpY3QuZm9yRWFjaChrID0+IHtcbiAgICAgIGlmIChrICE9PSBjb25maWcuaWQpIHtcbiAgICAgICAgaW50ZXJhY3Rpb25Db25maWdba10gPSB7Li4uaW50ZXJhY3Rpb25Db25maWdba10sIGVuYWJsZWQ6IGZhbHNlfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGludGVyYWN0aW9uQ29uZmlnXG4gIH07XG5cbiAgaWYgKGNvbmZpZy5pZCA9PT0gJ2dlb2NvZGVyJyAmJiAhY29uZmlnLmVuYWJsZWQpIHtcbiAgICByZXR1cm4gcmVtb3ZlRGF0YXNldFVwZGF0ZXIobmV3U3RhdGUsIHtkYXRhSWQ6ICdnZW9jb2Rlcl9kYXRhc2V0J30pO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIFRyaWdnZXIgbGF5ZXIgY2xpY2sgZXZlbnQgd2l0aCBjbGlja2VkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL3Zpcy1zdGF0ZS11cGRhdGVycycpLmxheWVyQ2xpY2tVcGRhdGVyfVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbGF5ZXJDbGlja1VwZGF0ZXIgPSAoc3RhdGUsIGFjdGlvbikgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIG1vdXNlUG9zOiBzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZy5jb29yZGluYXRlLmVuYWJsZWRcbiAgICA/IHtcbiAgICAgICAgLi4uc3RhdGUubW91c2VQb3MsXG4gICAgICAgIHBpbm5lZDogc3RhdGUubW91c2VQb3MucGlubmVkID8gbnVsbCA6IGNsb25lRGVlcChzdGF0ZS5tb3VzZVBvcylcbiAgICAgIH1cbiAgICA6IHN0YXRlLm1vdXNlUG9zLFxuICBjbGlja2VkOiBhY3Rpb24uaW5mbyAmJiBhY3Rpb24uaW5mby5waWNrZWQgPyBhY3Rpb24uaW5mbyA6IG51bGxcbn0pO1xuXG4vKipcbiAqIFRyaWdnZXIgbWFwIGNsaWNrIGV2ZW50LCB1bnNlbGVjdCBjbGlja2VkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL3Zpcy1zdGF0ZS11cGRhdGVycycpLm1hcENsaWNrVXBkYXRlcn1cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IG1hcENsaWNrVXBkYXRlciA9IHN0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjbGlja2VkOiBudWxsXG4gIH07XG59O1xuXG4vKipcbiAqIFRyaWdnZXIgbWFwIG1vdmUgZXZlbnRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAdHlwZSB7dHlwZW9mIGltcG9ydCgnLi92aXMtc3RhdGUtdXBkYXRlcnMnKS5tb3VzZU1vdmVVcGRhdGVyfVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbW91c2VNb3ZlVXBkYXRlciA9IChzdGF0ZSwge2V2dH0pID0+IHtcbiAgaWYgKE9iamVjdC52YWx1ZXMoc3RhdGUuaW50ZXJhY3Rpb25Db25maWcpLnNvbWUoY29uZmlnID0+IGNvbmZpZy5lbmFibGVkKSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIG1vdXNlUG9zOiB7XG4gICAgICAgIC4uLnN0YXRlLm1vdXNlUG9zLFxuICAgICAgICBtb3VzZVBvc2l0aW9uOiBbLi4uZXZ0LnBvaW50XSxcbiAgICAgICAgY29vcmRpbmF0ZTogWy4uLmV2dC5sbmdMYXRdXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn07XG4vKipcbiAqIFRvZ2dsZSB2aXNpYmlsaXR5IG9mIGEgbGF5ZXIgZm9yIGEgc3BsaXQgbWFwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykudG9nZ2xlU3BsaXRNYXBVcGRhdGVyfVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlU3BsaXRNYXBVcGRhdGVyID0gKHN0YXRlLCBhY3Rpb24pID0+XG4gIHN0YXRlLnNwbGl0TWFwcyAmJiBzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoID09PSAwXG4gICAgPyB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAvLyBtYXliZSB3ZSBzaG91bGQgdXNlIGFuIGFycmF5IHRvIHN0b3JlIHN0YXRlIGZvciBhIHNpbmdsZSBtYXAgYXMgd2VsbFxuICAgICAgICAvLyBpZiBjdXJyZW50IG1hcHMgbGVuZ3RoIGlzIGVxdWFsIHRvIDAgaXQgbWVhbnMgdGhhdCB3ZSBhcmUgYWJvdXQgdG8gc3BsaXQgdGhlIHZpZXdcbiAgICAgICAgc3BsaXRNYXBzOiBjb21wdXRlU3BsaXRNYXBMYXllcnMoc3RhdGUubGF5ZXJzKVxuICAgICAgfVxuICAgIDogY2xvc2VTcGVjaWZpY01hcEF0SW5kZXgoc3RhdGUsIGFjdGlvbik7XG5cbi8qKlxuICogVG9nZ2xlIHZpc2liaWxpdHkgb2YgYSBsYXllciBpbiBhIHNwbGl0IG1hcFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL3Zpcy1zdGF0ZS11cGRhdGVycycpLnRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlcn1cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlciA9IChzdGF0ZSwge21hcEluZGV4LCBsYXllcklkfSkgPT4ge1xuICBjb25zdCB7c3BsaXRNYXBzfSA9IHN0YXRlO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgc3BsaXRNYXBzOiBzcGxpdE1hcHMubWFwKChzbSwgaSkgPT5cbiAgICAgIGkgPT09IG1hcEluZGV4XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uc3BsaXRNYXBzW2ldLFxuICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgIC4uLnNwbGl0TWFwc1tpXS5sYXllcnMsXG4gICAgICAgICAgICAgIC8vIGlmIGxheWVySWQgbm90IGluIGxheWVycywgc2V0IGl0IHRvIHZpc2libGVcbiAgICAgICAgICAgICAgW2xheWVySWRdOiAhc3BsaXRNYXBzW2ldLmxheWVyc1tsYXllcklkXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgOiBzbVxuICAgIClcbiAgfTtcbn07XG5cbi8qKlxuICogQWRkIG5ldyBkYXRhc2V0IHRvIGB2aXNTdGF0ZWAsIHdpdGggb3B0aW9uIHRvIGxvYWQgYSBtYXAgY29uZmlnIGFsb25nIHdpdGggdGhlIGRhdGFzZXRzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykudXBkYXRlVmlzRGF0YVVwZGF0ZXJ9XG4gKiBAcHVibGljXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1zdGF0ZW1lbnRzICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZXhwb3J0IGNvbnN0IHVwZGF0ZVZpc0RhdGFVcGRhdGVyID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgLy8gZGF0YXNldHMgY2FuIGJlIGEgc2luZ2xlIGRhdGEgZW50cmllcyBvciBhbiBhcnJheSBvZiBtdWx0aXBsZSBkYXRhIGVudHJpZXNcbiAgY29uc3Qge2NvbmZpZywgb3B0aW9uc30gPSBhY3Rpb247XG4gIGNvbnN0IGRhdGFzZXRzID0gdG9BcnJheShhY3Rpb24uZGF0YXNldHMpO1xuXG4gIGNvbnN0IG5ld0RhdGFFbnRyaWVzID0gZGF0YXNldHMucmVkdWNlKFxuICAgIChhY2N1LCB7aW5mbyA9IHt9LCAuLi5yZXN0fSA9IHt9KSA9PiAoe1xuICAgICAgLi4uYWNjdSxcbiAgICAgIC4uLihjcmVhdGVOZXdEYXRhRW50cnkoe2luZm8sIC4uLnJlc3R9LCBzdGF0ZS5kYXRhc2V0cykgfHwge30pXG4gICAgfSksXG4gICAge31cbiAgKTtcblxuICBjb25zdCBkYXRhRW1wdHkgPSBPYmplY3Qua2V5cyhuZXdEYXRhRW50cmllcykubGVuZ3RoIDwgMTtcblxuICAvLyBhcHBseSBjb25maWcgaWYgcGFzc2VkIGZyb20gYWN0aW9uXG4gIGNvbnN0IHByZXZpb3VzU3RhdGUgPSBjb25maWdcbiAgICA/IHJlY2VpdmVNYXBDb25maWdVcGRhdGVyKHN0YXRlLCB7XG4gICAgICAgIHBheWxvYWQ6IHtjb25maWcsIG9wdGlvbnN9XG4gICAgICB9KVxuICAgIDogc3RhdGU7XG5cbiAgbGV0IG1lcmdlZFN0YXRlID0ge1xuICAgIC4uLnByZXZpb3VzU3RhdGUsXG4gICAgZGF0YXNldHM6IHtcbiAgICAgIC4uLnByZXZpb3VzU3RhdGUuZGF0YXNldHMsXG4gICAgICAuLi5uZXdEYXRhRW50cmllc1xuICAgIH1cbiAgfTtcblxuICAvLyBtZXJnZSBzdGF0ZSB3aXRoIGNvbmZpZyB0byBiZSBtZXJnZWRcbiAgZm9yIChjb25zdCBtZXJnZXIgb2YgbWVyZ2VkU3RhdGUubWVyZ2Vycykge1xuICAgIGlmIChpc1ZhbGlkTWVyZ2VyKG1lcmdlcikgJiYgbWVyZ2VyLnRvTWVyZ2VQcm9wICYmIG1lcmdlZFN0YXRlW21lcmdlci50b01lcmdlUHJvcF0pIHtcbiAgICAgIGNvbnN0IHRvTWVyZ2UgPSBtZXJnZWRTdGF0ZVttZXJnZXIudG9NZXJnZVByb3BdO1xuICAgICAgbWVyZ2VkU3RhdGVbbWVyZ2VyLnRvTWVyZ2VQcm9wXSA9IElOSVRJQUxfVklTX1NUQVRFW21lcmdlci50b01lcmdlUHJvcF07XG4gICAgICBtZXJnZWRTdGF0ZSA9IG1lcmdlci5tZXJnZShtZXJnZWRTdGF0ZSwgdG9NZXJnZSk7XG4gICAgfVxuICB9XG5cbiAgbGV0IG5ld0xheWVycyA9ICFkYXRhRW1wdHlcbiAgICA/IG1lcmdlZFN0YXRlLmxheWVycy5maWx0ZXIobCA9PiBsLmNvbmZpZy5kYXRhSWQgJiYgbC5jb25maWcuZGF0YUlkIGluIG5ld0RhdGFFbnRyaWVzKVxuICAgIDogW107XG5cbiAgaWYgKCFuZXdMYXllcnMubGVuZ3RoICYmIChvcHRpb25zIHx8IHt9KS5hdXRvQ3JlYXRlTGF5ZXJzICE9PSBmYWxzZSkge1xuICAgIC8vIG5vIGxheWVyIG1lcmdlZCwgZmluZCBkZWZhdWx0c1xuICAgIGNvbnN0IHJlc3VsdCA9IGFkZERlZmF1bHRMYXllcnMobWVyZ2VkU3RhdGUsIG5ld0RhdGFFbnRyaWVzKTtcbiAgICBtZXJnZWRTdGF0ZSA9IHJlc3VsdC5zdGF0ZTtcbiAgICBuZXdMYXllcnMgPSByZXN1bHQubmV3TGF5ZXJzO1xuICB9XG5cbiAgaWYgKG1lcmdlZFN0YXRlLnNwbGl0TWFwcy5sZW5ndGgpIHtcbiAgICAvLyBpZiBtYXAgaXMgc3BsaXQsIGFkZCBuZXcgbGF5ZXJzIHRvIHNwbGl0TWFwc1xuICAgIG5ld0xheWVycyA9IG1lcmdlZFN0YXRlLmxheWVycy5maWx0ZXIoXG4gICAgICBsID0+IGwuY29uZmlnLmRhdGFJZCAmJiBsLmNvbmZpZy5kYXRhSWQgaW4gbmV3RGF0YUVudHJpZXNcbiAgICApO1xuICAgIG1lcmdlZFN0YXRlID0ge1xuICAgICAgLi4ubWVyZ2VkU3RhdGUsXG4gICAgICBzcGxpdE1hcHM6IGFkZE5ld0xheWVyc1RvU3BsaXRNYXAobWVyZ2VkU3RhdGUuc3BsaXRNYXBzLCBuZXdMYXllcnMpXG4gICAgfTtcbiAgfVxuXG4gIC8vIGlmIG5vIHRvb2x0aXBzIG1lcmdlZCBhZGQgZGVmYXVsdCB0b29sdGlwc1xuICBPYmplY3Qua2V5cyhuZXdEYXRhRW50cmllcykuZm9yRWFjaChkYXRhSWQgPT4ge1xuICAgIGNvbnN0IHRvb2x0aXBGaWVsZHMgPSBtZXJnZWRTdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLmNvbmZpZy5maWVsZHNUb1Nob3dbZGF0YUlkXTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodG9vbHRpcEZpZWxkcykgfHwgIXRvb2x0aXBGaWVsZHMubGVuZ3RoKSB7XG4gICAgICBtZXJnZWRTdGF0ZSA9IGFkZERlZmF1bHRUb29sdGlwcyhtZXJnZWRTdGF0ZSwgbmV3RGF0YUVudHJpZXNbZGF0YUlkXSk7XG4gICAgfVxuICB9KTtcblxuICBsZXQgdXBkYXRlZFN0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKFxuICAgIG1lcmdlZFN0YXRlLFxuICAgIGRhdGFFbXB0eSA/IE9iamVjdC5rZXlzKG1lcmdlZFN0YXRlLmRhdGFzZXRzKSA6IE9iamVjdC5rZXlzKG5ld0RhdGFFbnRyaWVzKSxcbiAgICB1bmRlZmluZWRcbiAgKTtcblxuICAvLyByZWdpc3RlciBsYXllciBhbmltYXRpb24gZG9tYWluLFxuICAvLyBuZWVkIHRvIGJlIGNhbGxlZCBhZnRlciBsYXllciBkYXRhIGlzIGNhbGN1bGF0ZWRcbiAgdXBkYXRlZFN0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKHVwZGF0ZWRTdGF0ZSk7XG5cbiAgcmV0dXJuIHVwZGF0ZWRTdGF0ZTtcbn07XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1zdGF0ZW1lbnRzICovXG5cbi8qKlxuICogUmVuYW1lIGFuIGV4aXN0aW5nIGRhdGFzZXQgaW4gYHZpc1N0YXRlYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL3Zpcy1zdGF0ZS11cGRhdGVycycpLnJlbmFtZURhdGFzZXRVcGRhdGVyfVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuYW1lRGF0YXNldFVwZGF0ZXIoc3RhdGUsIGFjdGlvbikge1xuICBjb25zdCB7ZGF0YUlkLCBsYWJlbH0gPSBhY3Rpb247XG4gIGNvbnN0IHtkYXRhc2V0c30gPSBzdGF0ZTtcbiAgY29uc3QgZXhpc3RpbmcgPSBkYXRhc2V0c1tkYXRhSWRdO1xuICAvLyBAdHMtaWdub3JlXG4gIHJldHVybiBleGlzdGluZ1xuICAgID8ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgZGF0YXNldHM6IHtcbiAgICAgICAgICAuLi5kYXRhc2V0cyxcbiAgICAgICAgICBbZGF0YUlkXToge1xuICAgICAgICAgICAgLi4uZXhpc3RpbmcsXG4gICAgICAgICAgICBsYWJlbFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIDogLy8gTm8tb3AgaWYgdGhlIGRhdGFzZXQgZG9lc24ndCBleGlzdFxuICAgICAgc3RhdGU7XG59XG5cbi8qKlxuICogV2hlbiBhIHVzZXIgY2xpY2tzIG9uIHRoZSBzcGVjaWZpYyBtYXAgY2xvc2luZyBpY29uXG4gKiB0aGUgYXBwbGljYXRpb24gd2lsbCBjbG9zZSB0aGUgc2VsZWN0ZWQgbWFwXG4gKiBhbmQgd2lsbCBtZXJnZSB0aGUgcmVtYWluaW5nIG9uZSB3aXRoIHRoZSBnbG9iYWwgc3RhdGVcbiAqIFRPRE86IGkgdGhpbmsgaW4gdGhlIGZ1dHVyZSB0aGlzIGFjdGlvbiBzaG91bGQgYmUgY2FsbGVkIG1lcmdlIG1hcCBsYXllcnMgd2l0aCBnbG9iYWwgc2V0dGluZ3NcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZSBgdmlzU3RhdGVgXG4gKiBAcGFyYW0ge09iamVjdH0gYWN0aW9uIGFjdGlvblxuICogQHJldHVybnMge09iamVjdH0gbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbG9zZVNwZWNpZmljTWFwQXRJbmRleChzdGF0ZSwgYWN0aW9uKSB7XG4gIC8vIHJldHJpZXZlIGxheWVycyBtZXRhIGRhdGEgZnJvbSB0aGUgcmVtYWluaW5nIG1hcCB0aGF0IHdlIG5lZWQgdG8ga2VlcFxuICBjb25zdCBpbmRleFRvUmV0cmlldmUgPSAxIC0gYWN0aW9uLnBheWxvYWQ7XG4gIGNvbnN0IG1hcExheWVycyA9IHN0YXRlLnNwbGl0TWFwc1tpbmRleFRvUmV0cmlldmVdLmxheWVycztcbiAgY29uc3Qge2xheWVyc30gPSBzdGF0ZTtcblxuICAvLyB1cGRhdGUgbGF5ZXIgdmlzaWJpbGl0eVxuICBjb25zdCBuZXdMYXllcnMgPSBsYXllcnMubWFwKGxheWVyID0+XG4gICAgIW1hcExheWVyc1tsYXllci5pZF0gJiYgbGF5ZXIuY29uZmlnLmlzVmlzaWJsZVxuICAgICAgPyBsYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgICAgLy8gaWYgbGF5ZXIuaWQgaXMgbm90IGluIG1hcExheWVycywgaXQgc2hvdWxkIGJlIGluVmlzaWJsZVxuICAgICAgICAgIGlzVmlzaWJsZTogZmFsc2VcbiAgICAgICAgfSlcbiAgICAgIDogbGF5ZXJcbiAgKTtcblxuICAvLyBkZWxldGUgbWFwXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBuZXdMYXllcnMsXG4gICAgc3BsaXRNYXBzOiBbXVxuICB9O1xufVxuXG4vKipcbiAqIFRyaWdnZXIgZmlsZSBsb2FkaW5nIGRpc3BhdGNoIGBhZGREYXRhVG9NYXBgIGlmIHN1Y2NlZWQsIG9yIGBsb2FkRmlsZXNFcnJgIGlmIGZhaWxlZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL3Zpcy1zdGF0ZS11cGRhdGVycycpLmxvYWRGaWxlc1VwZGF0ZXJ9XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsb2FkRmlsZXNVcGRhdGVyID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgY29uc3Qge2ZpbGVzLCBvbkZpbmlzaCA9IGxvYWRGaWxlc1N1Y2Nlc3N9ID0gYWN0aW9uO1xuICBpZiAoIWZpbGVzLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGZpbGVMb2FkaW5nUHJvZ3Jlc3MgPSBBcnJheS5mcm9tKGZpbGVzKS5yZWR1Y2UoXG4gICAgKGFjY3UsIGYsIGkpID0+IG1lcmdlXyhpbml0aWFsRmlsZUxvYWRpbmdQcm9ncmVzcyhmLCBpKSkoYWNjdSksXG4gICAge31cbiAgKTtcblxuICBjb25zdCBmaWxlTG9hZGluZyA9IHtcbiAgICBmaWxlQ2FjaGU6IFtdLFxuICAgIGZpbGVzVG9Mb2FkOiBmaWxlcyxcbiAgICBvbkZpbmlzaFxuICB9O1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IG1lcmdlXyh7ZmlsZUxvYWRpbmdQcm9ncmVzcywgZmlsZUxvYWRpbmd9KShzdGF0ZSk7XG5cbiAgcmV0dXJuIGxvYWROZXh0RmlsZVVwZGF0ZXIobmV4dFN0YXRlKTtcbn07XG5cbi8qKlxuICogU3VjZXNzZnVsbHkgbG9hZGVkIG9uZSBmaWxlLCBtb3ZlIG9uIHRvIHRoZSBuZXh0IG9uZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL3Zpcy1zdGF0ZS11cGRhdGVycycpLmxvYWRGaWxlU3RlcFN1Y2Nlc3NVcGRhdGVyfVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEZpbGVTdGVwU3VjY2Vzc1VwZGF0ZXIoc3RhdGUsIGFjdGlvbikge1xuICBpZiAoIXN0YXRlLmZpbGVMb2FkaW5nKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHtmaWxlTmFtZSwgZmlsZUNhY2hlfSA9IGFjdGlvbjtcbiAgY29uc3Qge2ZpbGVzVG9Mb2FkLCBvbkZpbmlzaH0gPSBzdGF0ZS5maWxlTG9hZGluZztcbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge1xuICAgIGZpbGVOYW1lLFxuICAgIHByb2dyZXNzOiB7cGVyY2VudDogMSwgbWVzc2FnZTogJ0RvbmUnfVxuICB9KTtcblxuICAvLyBzYXZlIHByb2Nlc3NlZCBmaWxlIHRvIGZpbGVDYWNoZVxuICBjb25zdCBzdGF0ZVdpdGhDYWNoZSA9IHBpY2tfKCdmaWxlTG9hZGluZycpKG1lcmdlXyh7ZmlsZUNhY2hlfSkpKHN0YXRlV2l0aFByb2dyZXNzKTtcblxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc3RhdGVXaXRoQ2FjaGUsXG4gICAgREVMQVlfVEFTSygyMDApLm1hcChmaWxlc1RvTG9hZC5sZW5ndGggPyBsb2FkTmV4dEZpbGUgOiAoKSA9PiBvbkZpbmlzaChmaWxlQ2FjaGUpKVxuICApO1xufVxuXG4vLyB3aXRoVGFzazxUPihzdGF0ZTogVCwgdGFzazogYW55KTogVFxuXG4vKipcbiAqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykubG9hZE5leHRGaWxlVXBkYXRlcn1cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWROZXh0RmlsZVVwZGF0ZXIoc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5maWxlTG9hZGluZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7ZmlsZXNUb0xvYWR9ID0gc3RhdGUuZmlsZUxvYWRpbmc7XG4gIGNvbnN0IFtmaWxlLCAuLi5yZW1haW5pbmdGaWxlc1RvTG9hZF0gPSBmaWxlc1RvTG9hZDtcblxuICAvLyBzYXZlIGZpbGVzVG9Mb2FkIHRvIHN0YXRlXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHBpY2tfKCdmaWxlTG9hZGluZycpKG1lcmdlXyh7ZmlsZXNUb0xvYWQ6IHJlbWFpbmluZ0ZpbGVzVG9Mb2FkfSkpKHN0YXRlKTtcblxuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKG5leHRTdGF0ZSwge1xuICAgIGZpbGVOYW1lOiBmaWxlLm5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtwZXJjZW50OiAwLCBtZXNzYWdlOiAnbG9hZGluZy4uLid9XG4gIH0pO1xuXG4gIGNvbnN0IHtsb2FkZXJzLCBsb2FkT3B0aW9uc30gPSBzdGF0ZTtcbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHN0YXRlV2l0aFByb2dyZXNzLFxuICAgIG1ha2VMb2FkRmlsZVRhc2soZmlsZSwgbmV4dFN0YXRlLmZpbGVMb2FkaW5nLmZpbGVDYWNoZSwgbG9hZGVycywgbG9hZE9wdGlvbnMpXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlTG9hZEZpbGVUYXNrKGZpbGUsIGZpbGVDYWNoZSwgbG9hZGVycyA9IFtdLCBsb2FkT3B0aW9ucyA9IHt9KSB7XG4gIHJldHVybiBMT0FEX0ZJTEVfVEFTSyh7ZmlsZSwgZmlsZUNhY2hlLCBsb2FkZXJzLCBsb2FkT3B0aW9uc30pLmJpbWFwKFxuICAgIC8vIHByZXR0aWVyIGlnbm9yZVxuICAgIC8vIHN1Y2Nlc3NcbiAgICBnZW4gPT5cbiAgICAgIG5leHRGaWxlQmF0Y2goe1xuICAgICAgICBnZW4sXG4gICAgICAgIGZpbGVOYW1lOiBmaWxlLm5hbWUsXG4gICAgICAgIG9uRmluaXNoOiByZXN1bHQgPT5cbiAgICAgICAgICBwcm9jZXNzRmlsZUNvbnRlbnQoe1xuICAgICAgICAgICAgY29udGVudDogcmVzdWx0LFxuICAgICAgICAgICAgZmlsZUNhY2hlXG4gICAgICAgICAgfSlcbiAgICAgIH0pLFxuXG4gICAgLy8gZXJyb3JcbiAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGZpbGUubmFtZSwgZXJyKVxuICApO1xufVxuXG4vKipcbiAqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykucHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlcn1cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NGaWxlQ29udGVudFVwZGF0ZXIoc3RhdGUsIGFjdGlvbikge1xuICBjb25zdCB7Y29udGVudCwgZmlsZUNhY2hlfSA9IGFjdGlvbi5wYXlsb2FkO1xuXG4gIGNvbnN0IHN0YXRlV2l0aFByb2dyZXNzID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZTogY29udGVudC5maWxlTmFtZSxcbiAgICBwcm9ncmVzczoge3BlcmNlbnQ6IDEsIG1lc3NhZ2U6ICdwcm9jZXNzaW5nLi4uJ31cbiAgfSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHN0YXRlV2l0aFByb2dyZXNzLFxuICAgIFBST0NFU1NfRklMRV9EQVRBKHtjb250ZW50LCBmaWxlQ2FjaGV9KS5iaW1hcChcbiAgICAgIHJlc3VsdCA9PiBsb2FkRmlsZVN0ZXBTdWNjZXNzKHtmaWxlTmFtZTogY29udGVudC5maWxlTmFtZSwgZmlsZUNhY2hlOiByZXN1bHR9KSxcbiAgICAgIGVyciA9PiBsb2FkRmlsZXNFcnIoY29udGVudC5maWxlTmFtZSwgZXJyKVxuICAgIClcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUHJvZ3Jlc3MocHJldlByb2dyZXNzID0ge30sIHByb2dyZXNzKSB7XG4gIC8vIFRoaXMgaGFwcGVucyB3aGVuIHJlY2VpdmluZyBxdWVyeSBtZXRhZGF0YSBvciBvdGhlciBjYXNlcyB3ZSBkb24ndFxuICAvLyBoYXZlIGFuIHVwZGF0ZSBmb3IgdGhlIHVzZXIuXG4gIGlmICghcHJvZ3Jlc3MgfHwgIXByb2dyZXNzLnBlcmNlbnQpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHBlcmNlbnQ6IHByb2dyZXNzLnBlcmNlbnRcbiAgfTtcbn1cblxuLyoqXG4gKiBnZXRzIGNhbGxlZCB3aXRoIHBheWxvYWQgPSBBc3luY0dlbmVyYXRvcjw/Pz8+XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykubmV4dEZpbGVCYXRjaFVwZGF0ZXJ9XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBuZXh0RmlsZUJhdGNoVXBkYXRlciA9IChcbiAgc3RhdGUsXG4gIHtwYXlsb2FkOiB7Z2VuLCBmaWxlTmFtZSwgcHJvZ3Jlc3MsIGFjY3VtdWxhdGVkLCBvbkZpbmlzaH19XG4pID0+IHtcbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge1xuICAgIGZpbGVOYW1lLFxuICAgIHByb2dyZXNzOiBwYXJzZVByb2dyZXNzKHN0YXRlLmZpbGVMb2FkaW5nUHJvZ3Jlc3NbZmlsZU5hbWVdLCBwcm9ncmVzcylcbiAgfSk7XG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBzdGF0ZVdpdGhQcm9ncmVzcyxcbiAgICBVTldSQVBfVEFTSyhnZW4ubmV4dCgpKS5iaW1hcChcbiAgICAgICh7dmFsdWUsIGRvbmV9KSA9PiB7XG4gICAgICAgIHJldHVybiBkb25lXG4gICAgICAgICAgPyBvbkZpbmlzaChhY2N1bXVsYXRlZClcbiAgICAgICAgICA6IG5leHRGaWxlQmF0Y2goe1xuICAgICAgICAgICAgICBnZW4sXG4gICAgICAgICAgICAgIGZpbGVOYW1lLFxuICAgICAgICAgICAgICBwcm9ncmVzczogdmFsdWUucHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIGFjY3VtdWxhdGVkOiB2YWx1ZSxcbiAgICAgICAgICAgICAgb25GaW5pc2hcbiAgICAgICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIGVyciA9PiBsb2FkRmlsZXNFcnIoZmlsZU5hbWUsIGVycilcbiAgICApXG4gICk7XG59O1xuXG4vKipcbiAqIFRyaWdnZXIgbG9hZGluZyBmaWxlIGVycm9yXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykubG9hZEZpbGVzRXJyVXBkYXRlcn1cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxvYWRGaWxlc0VyclVwZGF0ZXIgPSAoc3RhdGUsIHtlcnJvciwgZmlsZU5hbWV9KSA9PiB7XG4gIC8vIHVwZGF0ZSB1aSB3aXRoIGVycm9yIG1lc3NhZ2VcbiAgQ29uc29sZS53YXJuKGVycm9yKTtcbiAgaWYgKCFzdGF0ZS5maWxlTG9hZGluZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7ZmlsZXNUb0xvYWQsIG9uRmluaXNoLCBmaWxlQ2FjaGV9ID0gc3RhdGUuZmlsZUxvYWRpbmc7XG5cbiAgY29uc3QgbmV4dFN0YXRlID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZSxcbiAgICBwcm9ncmVzczoge2Vycm9yfVxuICB9KTtcblxuICAvLyBraWNrIG9mZiBuZXh0IGZpbGUgb3IgZmluaXNoXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBuZXh0U3RhdGUsXG4gICAgREVMQVlfVEFTSygyMDApLm1hcChmaWxlc1RvTG9hZC5sZW5ndGggPyBsb2FkTmV4dEZpbGUgOiAoKSA9PiBvbkZpbmlzaChmaWxlQ2FjaGUpKVxuICApO1xufTtcblxuLyoqXG4gKiBXaGVuIHNlbGVjdCBkYXRhc2V0IGZvciBleHBvcnQsIGFwcGx5IGNwdSBmaWx0ZXIgdG8gc2VsZWN0ZWQgZGF0YXNldFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL3Zpcy1zdGF0ZS11cGRhdGVycycpLmFwcGx5Q1BVRmlsdGVyVXBkYXRlcn1cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFwcGx5Q1BVRmlsdGVyVXBkYXRlciA9IChzdGF0ZSwge2RhdGFJZH0pID0+IHtcbiAgLy8gYXBwbHkgY3B1RmlsdGVyXG4gIGNvbnN0IGRhdGFJZHMgPSB0b0FycmF5KGRhdGFJZCk7XG5cbiAgcmV0dXJuIGRhdGFJZHMucmVkdWNlKChhY2N1LCBpZCkgPT4gZmlsdGVyRGF0YXNldENQVShhY2N1LCBpZCksIHN0YXRlKTtcbn07XG5cbi8qKlxuICogVXNlciBpbnB1dCB0byB1cGRhdGUgdGhlIGluZm8gb2YgdGhlIG1hcFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL3Zpcy1zdGF0ZS11cGRhdGVycycpLnNldE1hcEluZm9VcGRhdGVyfVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0TWFwSW5mb1VwZGF0ZXIgPSAoc3RhdGUsIGFjdGlvbikgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIG1hcEluZm86IHtcbiAgICAuLi5zdGF0ZS5tYXBJbmZvLFxuICAgIC4uLmFjdGlvbi5pbmZvXG4gIH1cbn0pO1xuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gdXBkYXRlIEFsbCBsYXllciBkb21haW4gYW5kIGxheWVyIGRhdGEgb2Ygc3RhdGVcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL3Zpcy1zdGF0ZS11cGRhdGVycycpLmFkZERlZmF1bHRMYXllcnN9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGREZWZhdWx0TGF5ZXJzKHN0YXRlLCBkYXRhc2V0cykge1xuICAvKiogQHR5cGUge0xheWVyW119ICovXG4gIGNvbnN0IGVtcHR5ID0gW107XG4gIGNvbnN0IGRlZmF1bHRMYXllcnMgPSBPYmplY3QudmFsdWVzKGRhdGFzZXRzKS5yZWR1Y2UoKGFjY3UsIGRhdGFzZXQpID0+IHtcbiAgICBjb25zdCBmb3VuZExheWVycyA9IGZpbmREZWZhdWx0TGF5ZXIoZGF0YXNldCwgc3RhdGUubGF5ZXJDbGFzc2VzKTtcbiAgICByZXR1cm4gZm91bmRMYXllcnMgJiYgZm91bmRMYXllcnMubGVuZ3RoID8gYWNjdS5jb25jYXQoZm91bmRMYXllcnMpIDogYWNjdTtcbiAgfSwgZW1wdHkpO1xuXG4gIHJldHVybiB7XG4gICAgc3RhdGU6IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbGF5ZXJzOiBbLi4uc3RhdGUubGF5ZXJzLCAuLi5kZWZhdWx0TGF5ZXJzXSxcbiAgICAgIGxheWVyT3JkZXI6IFtcbiAgICAgICAgLy8gcHV0IG5ldyBsYXllcnMgb24gdG9wIG9mIG9sZCBvbmVzXG4gICAgICAgIC4uLmRlZmF1bHRMYXllcnMubWFwKChfLCBpKSA9PiBzdGF0ZS5sYXllcnMubGVuZ3RoICsgaSksXG4gICAgICAgIC4uLnN0YXRlLmxheWVyT3JkZXJcbiAgICAgIF1cbiAgICB9LFxuICAgIG5ld0xheWVyczogZGVmYXVsdExheWVyc1xuICB9O1xufVxuXG4vKipcbiAqIGhlbHBlciBmdW5jdGlvbiB0byBmaW5kIGRlZmF1bHQgdG9vbHRpcHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFzZXRcbiAqIEByZXR1cm5zIHtPYmplY3R9IG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRGVmYXVsdFRvb2x0aXBzKHN0YXRlLCBkYXRhc2V0KSB7XG4gIGNvbnN0IHRvb2x0aXBGaWVsZHMgPSBkYXRhc2V0Lm1ldGFkYXRhLmlzRHluYW1pY1NwYXRpYWxJbmRleFxuICAgID8ge1tkYXRhc2V0LmlkXTogW119XG4gICAgOiBmaW5kRmllbGRzVG9TaG93KGRhdGFzZXQpO1xuICBjb25zdCBtZXJnZWQgPSB7XG4gICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWcuZmllbGRzVG9TaG93LFxuICAgIC4uLnRvb2x0aXBGaWVsZHNcbiAgfTtcblxuICByZXR1cm4gc2V0KFsnaW50ZXJhY3Rpb25Db25maWcnLCAndG9vbHRpcCcsICdjb25maWcnLCAnZmllbGRzVG9TaG93J10sIG1lcmdlZCwgc3RhdGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MoZmlsZSwgaW5kZXgpIHtcbiAgY29uc3QgZmlsZU5hbWUgPSBmaWxlLm5hbWUgfHwgYFVudGl0bGVkIEZpbGUgJHtpbmRleH1gO1xuICByZXR1cm4ge1xuICAgIFtmaWxlTmFtZV06IHtcbiAgICAgIC8vIHBlcmNlbnQgb2YgY3VycmVudCBmaWxlXG4gICAgICBwZXJjZW50OiAwLFxuICAgICAgbWVzc2FnZTogJycsXG4gICAgICBmaWxlTmFtZSxcbiAgICAgIGVycm9yOiBudWxsXG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtmaWxlTmFtZSwgcHJvZ3Jlc3N9KSB7XG4gIHJldHVybiBwaWNrXygnZmlsZUxvYWRpbmdQcm9ncmVzcycpKHBpY2tfKGZpbGVOYW1lKShtZXJnZV8ocHJvZ3Jlc3MpKSkoc3RhdGUpO1xufVxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gdXBkYXRlIGxheWVyIGRvbWFpbnMgZm9yIGFuIGFycmF5IG9mIGRhdGFzZXRzXG4gKiBAdHlwZSB7dHlwZW9mIGltcG9ydCgnLi92aXMtc3RhdGUtdXBkYXRlcnMnKS51cGRhdGVBbGxMYXllckRvbWFpbkRhdGF9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEoc3RhdGUsIGRhdGFJZCwgdXBkYXRlZEZpbHRlcikge1xuICBjb25zdCBkYXRhSWRzID0gdHlwZW9mIGRhdGFJZCA9PT0gJ3N0cmluZycgPyBbZGF0YUlkXSA6IGRhdGFJZDtcbiAgY29uc3QgbmV3TGF5ZXJzID0gW107XG4gIGNvbnN0IG5ld0xheWVyRGF0YSA9IFtdO1xuXG4gIHN0YXRlLmxheWVycy5mb3JFYWNoKChvbGRMYXllciwgaSkgPT4ge1xuICAgIGlmIChvbGRMYXllci5jb25maWcuZGF0YUlkICYmIGRhdGFJZHMuaW5jbHVkZXMob2xkTGF5ZXIuY29uZmlnLmRhdGFJZCkpIHtcbiAgICAgIC8vIE5vIG5lZWQgdG8gcmVjYWxjdWxhdGUgbGF5ZXIgZG9tYWluIGlmIGZpbHRlciBoYXMgZml4ZWQgZG9tYWluXG4gICAgICBjb25zdCBuZXdMYXllciA9XG4gICAgICAgIHVwZGF0ZWRGaWx0ZXIgJiYgdXBkYXRlZEZpbHRlci5maXhlZERvbWFpblxuICAgICAgICAgID8gb2xkTGF5ZXJcbiAgICAgICAgICA6IG9sZExheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzLCB1cGRhdGVkRmlsdGVyKTtcblxuICAgICAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgc3RhdGUubGF5ZXJEYXRhW2ldKTtcblxuICAgICAgbmV3TGF5ZXJzLnB1c2gobGF5ZXIpO1xuICAgICAgbmV3TGF5ZXJEYXRhLnB1c2gobGF5ZXJEYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TGF5ZXJzLnB1c2gob2xkTGF5ZXIpO1xuICAgICAgbmV3TGF5ZXJEYXRhLnB1c2goc3RhdGUubGF5ZXJEYXRhW2ldKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogbmV3TGF5ZXJzLFxuICAgIGxheWVyRGF0YTogbmV3TGF5ZXJEYXRhXG4gIH07XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlQW5pbWF0aW9uRG9tYWluKHN0YXRlKSB7XG4gIC8vIG1lcmdlIGFsbCBhbmltYXRhYmxlIGxheWVyIGRvbWFpbiBhbmQgdXBkYXRlIGdsb2JhbCBjb25maWdcbiAgY29uc3QgYW5pbWF0YWJsZUxheWVycyA9IHN0YXRlLmxheWVycy5maWx0ZXIoXG4gICAgbCA9PlxuICAgICAgbC5jb25maWcuaXNWaXNpYmxlICYmXG4gICAgICBsLmNvbmZpZy5hbmltYXRpb24gJiZcbiAgICAgIGwuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkICYmXG4gICAgICBBcnJheS5pc0FycmF5KGwuYW5pbWF0aW9uRG9tYWluKVxuICApO1xuXG4gIGlmICghYW5pbWF0YWJsZUxheWVycy5sZW5ndGgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICBkb21haW46IG51bGwsXG4gICAgICAgIGRlZmF1bHRUaW1lRm9ybWF0OiBudWxsXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IG1lcmdlZERvbWFpbiA9IGFuaW1hdGFibGVMYXllcnMucmVkdWNlKFxuICAgIChhY2N1LCBsYXllcikgPT4gW1xuICAgICAgTWF0aC5taW4oYWNjdVswXSwgbGF5ZXIuYW5pbWF0aW9uRG9tYWluWzBdKSxcbiAgICAgIE1hdGgubWF4KGFjY3VbMV0sIGxheWVyLmFuaW1hdGlvbkRvbWFpblsxXSlcbiAgICBdLFxuICAgIFtOdW1iZXIoSW5maW5pdHkpLCAtSW5maW5pdHldXG4gICk7XG4gIGNvbnN0IGRlZmF1bHRUaW1lRm9ybWF0ID0gZ2V0VGltZVdpZGdldFRpdGxlRm9ybWF0dGVyKG1lcmdlZERvbWFpbik7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgIGN1cnJlbnRUaW1lOiBpc0luUmFuZ2Uoc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmN1cnJlbnRUaW1lLCBtZXJnZWREb21haW4pXG4gICAgICAgID8gc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmN1cnJlbnRUaW1lXG4gICAgICAgIDogbWVyZ2VkRG9tYWluWzBdLFxuICAgICAgZG9tYWluOiBtZXJnZWREb21haW4sXG4gICAgICBkZWZhdWx0VGltZUZvcm1hdFxuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgdGhlIHN0YXR1cyBvZiB0aGUgZWRpdG9yXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykuc2V0RWRpdG9yTW9kZVVwZGF0ZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFZGl0b3JNb2RlVXBkYXRlciA9IChzdGF0ZSwge21vZGV9KSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZWRpdG9yOiB7XG4gICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgIG1vZGUsXG4gICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gIH1cbn0pO1xuXG4vLyBjb25zdCBmZWF0dXJlVG9GaWx0ZXJWYWx1ZSA9IChmZWF0dXJlKSA9PiAoey4uLmZlYXR1cmUsIGlkOiBmZWF0dXJlLmlkfSk7XG4vKipcbiAqIFVwZGF0ZSBlZGl0b3IgZmVhdHVyZXNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAdHlwZSB7dHlwZW9mIGltcG9ydCgnLi92aXMtc3RhdGUtdXBkYXRlcnMnKS5zZXRGZWF0dXJlc1VwZGF0ZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGZWF0dXJlc1VwZGF0ZXIoc3RhdGUsIHtmZWF0dXJlcyA9IFtdfSkge1xuICBjb25zdCBsYXN0RmVhdHVyZSA9IGZlYXR1cmVzLmxlbmd0aCAmJiBmZWF0dXJlc1tmZWF0dXJlcy5sZW5ndGggLSAxXTtcblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIC8vIG9ubHkgc2F2ZSBub25lIGZpbHRlciBmZWF0dXJlcyB0byBlZGl0b3JcbiAgICAgIGZlYXR1cmVzOiBmZWF0dXJlcy5maWx0ZXIoZiA9PiAhZ2V0RmlsdGVySWRJbkZlYXR1cmUoZikpLFxuICAgICAgbW9kZTogbGFzdEZlYXR1cmUgJiYgbGFzdEZlYXR1cmUucHJvcGVydGllcy5pc0Nsb3NlZCA/IEVESVRPUl9NT0RFUy5FRElUIDogc3RhdGUuZWRpdG9yLm1vZGVcbiAgICB9XG4gIH07XG5cbiAgLy8gUmV0cmlldmUgZXhpc3RpbmcgZmVhdHVyZVxuICBjb25zdCB7c2VsZWN0ZWRGZWF0dXJlfSA9IHN0YXRlLmVkaXRvcjtcblxuICAvLyBJZiBubyBmZWF0dXJlIGlzIHNlbGVjdGVkIHdlIGNhbiBzaW1wbHkgcmV0dXJuIHNpbmNlIG5vIG9wZXJhdGlvbnNcbiAgaWYgKCFzZWxlY3RlZEZlYXR1cmUpIHtcbiAgICByZXR1cm4gbmV3U3RhdGU7XG4gIH1cblxuICAvLyBUT0RPOiBjaGVjayBpZiB0aGUgZmVhdHVyZSBoYXMgY2hhbmdlZFxuICBjb25zdCBmZWF0dXJlID0gZmVhdHVyZXMuZmluZChmID0+IGYuaWQgPT09IHNlbGVjdGVkRmVhdHVyZS5pZCk7XG5cbiAgLy8gaWYgZmVhdHVyZSBpcyBwYXJ0IG9mIGEgZmlsdGVyXG4gIGNvbnN0IGZpbHRlcklkID0gZmVhdHVyZSAmJiBnZXRGaWx0ZXJJZEluRmVhdHVyZShmZWF0dXJlKTtcbiAgaWYgKGZpbHRlcklkICYmIGZlYXR1cmUpIHtcbiAgICBjb25zdCBmZWF0dXJlVmFsdWUgPSBmZWF0dXJlVG9GaWx0ZXJWYWx1ZShmZWF0dXJlLCBmaWx0ZXJJZCk7XG4gICAgY29uc3QgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZmlsID0+IGZpbC5pZCA9PT0gZmlsdGVySWQpO1xuICAgIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICBpZHg6IGZpbHRlcklkeCxcbiAgICAgIHByb3A6ICd2YWx1ZScsXG4gICAgICB2YWx1ZTogZmVhdHVyZVZhbHVlXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogU2V0IHRoZSBjdXJyZW50IHNlbGVjdGVkIGZlYXR1cmVcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL3Zpcy1zdGF0ZS11cGRhdGVycycpLnNldFNlbGVjdGVkRmVhdHVyZVVwZGF0ZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBzZXRTZWxlY3RlZEZlYXR1cmVVcGRhdGVyID0gKHN0YXRlLCB7ZmVhdHVyZX0pID0+ICh7XG4gIC4uLnN0YXRlLFxuICBlZGl0b3I6IHtcbiAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgc2VsZWN0ZWRGZWF0dXJlOiBmZWF0dXJlXG4gIH1cbn0pO1xuXG4vKipcbiAqIERlbGV0ZSBleGlzdGluZyBmZWF0dXJlIGZyb20gZmlsdGVyc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL3Zpcy1zdGF0ZS11cGRhdGVycycpLmRlbGV0ZUZlYXR1cmVVcGRhdGVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsZXRlRmVhdHVyZVVwZGF0ZXIoc3RhdGUsIHtmZWF0dXJlfSkge1xuICBpZiAoIWZlYXR1cmUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICAgIH1cbiAgfTtcblxuICBpZiAoZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSkpIHtcbiAgICBjb25zdCBmaWx0ZXJJZHggPSBuZXdTdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpKTtcblxuICAgIHJldHVybiBmaWx0ZXJJZHggPiAtMSA/IHJlbW92ZUZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtpZHg6IGZpbHRlcklkeH0pIDogbmV3U3RhdGU7XG4gIH1cblxuICAvLyBtb2RpZnkgZWRpdG9yIG9iamVjdFxuICBjb25zdCBuZXdFZGl0b3IgPSB7XG4gICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgIGZlYXR1cmVzOiBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMuZmlsdGVyKGYgPT4gZi5pZCAhPT0gZmVhdHVyZS5pZCksXG4gICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IG5ld0VkaXRvclxuICB9O1xufVxuXG4vKipcbiAqIFRvZ2dsZSBmZWF0dXJlIGFzIGxheWVyIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL3Zpcy1zdGF0ZS11cGRhdGVycycpLnNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRQb2x5Z29uRmlsdGVyTGF5ZXJVcGRhdGVyKHN0YXRlLCBwYXlsb2FkKSB7XG4gIGNvbnN0IHtsYXllciwgZmVhdHVyZX0gPSBwYXlsb2FkO1xuICBjb25zdCBmaWx0ZXJJZCA9IGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpO1xuXG4gIC8vIGxldCBuZXdGaWx0ZXIgPSBudWxsO1xuICBsZXQgZmlsdGVySWR4O1xuICBsZXQgbmV3TGF5ZXJJZCA9IFtsYXllci5pZF07XG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICAvLyBJZiBwb2x5Z29uIGZpbHRlciBhbHJlYWR5IGV4aXN0cywgd2UgbmVlZCB0byBmaW5kIG91dCBpZiB0aGUgY3VycmVudCBsYXllciBpcyBhbHJlYWR5IGluY2x1ZGVkXG4gIGlmIChmaWx0ZXJJZCkge1xuICAgIGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gZmlsdGVySWQpO1xuXG4gICAgaWYgKCFzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0pIHtcbiAgICAgIC8vIHdoYXQgaWYgZmlsdGVyIGRvZXNuJ3QgZXhpc3Q/Li4uIG5vdCBwb3NzaWJsZS5cbiAgICAgIC8vIGJlY2F1c2UgZmVhdHVyZXMgaW4gdGhlIGVkaXRvciBpcyBwYXNzZWQgaW4gZnJvbSBmaWx0ZXJzIGFuZCBlZGl0b3JzLlxuICAgICAgLy8gYnV0IHdlIHdpbGwgbW92ZSB0aGlzIGZlYXR1cmUgYmFjayB0byBlZGl0b3IganVzdCBpbiBjYXNlXG4gICAgICBjb25zdCBub25lRmlsdGVyRmVhdHVyZSA9IHtcbiAgICAgICAgLi4uZmVhdHVyZSxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIC4uLmZlYXR1cmUucHJvcGVydGllcyxcbiAgICAgICAgICBmaWx0ZXJJZDogbnVsbFxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgZWRpdG9yOiB7XG4gICAgICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgICAgIGZlYXR1cmVzOiBbLi4uc3RhdGUuZWRpdG9yLmZlYXR1cmVzLCBub25lRmlsdGVyRmVhdHVyZV0sXG4gICAgICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBub25lRmlsdGVyRmVhdHVyZVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF07XG4gICAgY29uc3Qge2xheWVySWQgPSBbXX0gPSBmaWx0ZXI7XG4gICAgY29uc3QgaXNMYXllckluY2x1ZGVkID0gbGF5ZXJJZC5pbmNsdWRlcyhsYXllci5pZCk7XG5cbiAgICBuZXdMYXllcklkID0gaXNMYXllckluY2x1ZGVkXG4gICAgICA/IC8vIGlmIGxheWVyIGlzIGluY2x1ZGVkLCByZW1vdmUgaXRcbiAgICAgICAgbGF5ZXJJZC5maWx0ZXIobCA9PiBsICE9PSBsYXllci5pZClcbiAgICAgIDogWy4uLmxheWVySWQsIGxheWVyLmlkXTtcbiAgfSBlbHNlIHtcbiAgICAvLyBpZiB3ZSBoYXZlbid0IGNyZWF0ZSB0aGUgcG9seWdvbiBmaWx0ZXIsIGNyZWF0ZSBpdFxuICAgIGNvbnN0IG5ld0ZpbHRlciA9IGdlbmVyYXRlUG9seWdvbkZpbHRlcihbXSwgZmVhdHVyZSk7XG4gICAgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5sZW5ndGg7XG5cbiAgICAvLyBhZGQgZmVhdHVyZSwgcmVtb3ZlIGZlYXR1cmUgZnJvbSBlaWR0b3JcbiAgICBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZmlsdGVyczogWy4uLnN0YXRlLmZpbHRlcnMsIG5ld0ZpbHRlcl0sXG4gICAgICBlZGl0b3I6IHtcbiAgICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgICBmZWF0dXJlczogc3RhdGUuZWRpdG9yLmZlYXR1cmVzLmZpbHRlcihmID0+IGYuaWQgIT09IGZlYXR1cmUuaWQpLFxuICAgICAgICBzZWxlY3RlZEZlYXR1cmU6IG5ld0ZpbHRlci52YWx1ZVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICdsYXllcklkJyxcbiAgICB2YWx1ZTogbmV3TGF5ZXJJZFxuICB9KTtcbn1cblxuLyoqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykuc29ydFRhYmxlQ29sdW1uVXBkYXRlcn1cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvcnRUYWJsZUNvbHVtblVwZGF0ZXIoc3RhdGUsIHtkYXRhSWQsIGNvbHVtbiwgbW9kZX0pIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsZXQgc29ydE1vZGUgPSBtb2RlO1xuICBpZiAoIXNvcnRNb2RlKSB7XG4gICAgY29uc3QgY3VycmVudE1vZGUgPSBnZXQoZGF0YXNldCwgWydzb3J0Q29sdW1uJywgY29sdW1uXSk7XG4gICAgLy8gQHRzLWlnbm9yZSAtIHNob3VsZCBiZSBmaXhhYmxlIGluIGEgVFMgZmlsZVxuICAgIHNvcnRNb2RlID0gY3VycmVudE1vZGVcbiAgICAgID8gT2JqZWN0LmtleXMoU09SVF9PUkRFUikuZmluZChtID0+IG0gIT09IGN1cnJlbnRNb2RlKVxuICAgICAgOiBTT1JUX09SREVSLkFTQ0VORElORztcbiAgfVxuXG4gIGNvbnN0IHNvcnRlZCA9IHNvcnREYXRhc2V0QnlDb2x1bW4oZGF0YXNldCwgY29sdW1uLCBzb3J0TW9kZSk7XG4gIHJldHVybiBzZXQoWydkYXRhc2V0cycsIGRhdGFJZF0sIHNvcnRlZCwgc3RhdGUpO1xufVxuXG4vKipcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAdHlwZSB7dHlwZW9mIGltcG9ydCgnLi92aXMtc3RhdGUtdXBkYXRlcnMnKS5waW5UYWJsZUNvbHVtblVwZGF0ZXJ9XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwaW5UYWJsZUNvbHVtblVwZGF0ZXIoc3RhdGUsIHtkYXRhSWQsIGNvbHVtbn0pIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBmaWVsZCA9IGRhdGFzZXQuZmllbGRzLmZpbmQoZiA9PiBmLm5hbWUgPT09IGNvbHVtbik7XG4gIGlmICghZmllbGQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgcGlubmVkQ29sdW1ucztcbiAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YXNldC5waW5uZWRDb2x1bW5zKSAmJiBkYXRhc2V0LnBpbm5lZENvbHVtbnMuaW5jbHVkZXMoZmllbGQubmFtZSkpIHtcbiAgICAvLyB1bnBpbiBpdFxuICAgIHBpbm5lZENvbHVtbnMgPSBkYXRhc2V0LnBpbm5lZENvbHVtbnMuZmlsdGVyKGNvID0+IGNvICE9PSBmaWVsZC5uYW1lKTtcbiAgfSBlbHNlIHtcbiAgICBwaW5uZWRDb2x1bW5zID0gKGRhdGFzZXQucGlubmVkQ29sdW1ucyB8fCBbXSkuY29uY2F0KGZpZWxkLm5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIHNldChbJ2RhdGFzZXRzJywgZGF0YUlkLCAncGlubmVkQ29sdW1ucyddLCBwaW5uZWRDb2x1bW5zLCBzdGF0ZSk7XG59XG5cbi8qKlxuICogQ29weSBjb2x1bW4gY29udGVudCBhcyBzdHJpbmdzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykuY29weVRhYmxlQ29sdW1uVXBkYXRlcn1cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHlUYWJsZUNvbHVtblVwZGF0ZXIoc3RhdGUsIHtkYXRhSWQsIGNvbHVtbn0pIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBmaWVsZElkeCA9IGRhdGFzZXQuZmllbGRzLmZpbmRJbmRleChmID0+IGYubmFtZSA9PT0gY29sdW1uKTtcbiAgaWYgKGZpZWxkSWR4IDwgMCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7dHlwZX0gPSBkYXRhc2V0LmZpZWxkc1tmaWVsZElkeF07XG4gIGNvbnN0IHRleHQgPSBkYXRhc2V0LmRhdGFDb250YWluZXJcbiAgICAubWFwKHJvdyA9PiBwYXJzZUZpZWxkVmFsdWUocm93LnZhbHVlQXQoZmllbGRJZHgpLCB0eXBlKSwgdHJ1ZSlcbiAgICAuam9pbignXFxuJyk7XG5cbiAgY29weSh0ZXh0KTtcblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogVXBkYXRlIGVkaXRvclxuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJykudG9nZ2xlRWRpdG9yVmlzaWJpbGl0eVVwZGF0ZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlcihzdGF0ZSkge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgdmlzaWJsZTogIXN0YXRlLmVkaXRvci52aXNpYmxlXG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ1VwZGF0ZXIoc3RhdGUsIHtpZHgsIGNvbmZpZ30pIHtcbiAgY29uc3Qgb2xkRmlsdGVyID0gc3RhdGUuZmlsdGVyc1tpZHhdO1xuICBpZiAoIW9sZEZpbHRlcikge1xuICAgIENvbnNvbGUuZXJyb3IoYGZpbHRlcnMuJHtpZHh9IGlzIHVuZGVmaW5lZGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAob2xkRmlsdGVyLnR5cGUgIT09IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UpIHtcbiAgICBDb25zb2xlLmVycm9yKFxuICAgICAgYHNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWcgY2FuIG9ubHkgYmUgY2FsbGVkIHRvIHVwZGF0ZSBhIHRpbWUgZmlsdGVyLiBjaGVjayBmaWx0ZXIudHlwZSA9PT0gJ3RpbWVSYW5nZSdgXG4gICAgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB1cGRhdGVzID0gY2hlY2tUaW1lQ29uZmlnQXJncyhjb25maWcpO1xuXG4gIHJldHVybiBwaWNrXygnZmlsdGVycycpKHN3YXBfKG1lcmdlXyh1cGRhdGVzKShvbGRGaWx0ZXIpKSkoc3RhdGUpO1xufVxuXG5mdW5jdGlvbiBjaGVja1RpbWVDb25maWdBcmdzKGNvbmZpZykge1xuICBjb25zdCBhbGxvd2VkID0gWyd0aW1lRm9ybWF0JywgJ3RpbWV6b25lJ107XG4gIHJldHVybiBPYmplY3Qua2V5cyhjb25maWcpLnJlZHVjZSgoYWNjdSwgcHJvcCkgPT4ge1xuICAgIGlmICghYWxsb3dlZC5pbmNsdWRlcyhwcm9wKSkge1xuICAgICAgQ29uc29sZS5lcnJvcihcbiAgICAgICAgYHNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZyB0YWtlcyB0aW1lRm9ybWF0IGFuZC9vciB0aW1lem9uZSBhcyBvcHRpb25zLCBmb3VuZCAke3Byb3B9YFxuICAgICAgKTtcbiAgICAgIHJldHVybiBhY2N1O1xuICAgIH1cblxuICAgIC8vIGhlcmUgd2UgYXJlIE5PVCBjaGVja2luZyBpZiB0aW1lem9uZSBvciB0aW1lRm9ybWF0IGlucHV0IGlzIHZhbGlkXG4gICAgYWNjdVtwcm9wXSA9IGNvbmZpZ1twcm9wXTtcbiAgICByZXR1cm4gYWNjdTtcbiAgfSwge30pO1xufVxuLyoqXG4gKiBVcGRhdGUgZWRpdG9yXG4gKiBAdHlwZSB7dHlwZW9mIGltcG9ydCgnLi92aXMtc3RhdGUtdXBkYXRlcnMnKS5zZXRMYXllckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlcihzdGF0ZSwge2NvbmZpZ30pIHtcbiAgaWYgKCFjb25maWcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgdXBkYXRlcyA9IGNoZWNrVGltZUNvbmZpZ0FyZ3MoY29uZmlnKTtcbiAgcmV0dXJuIHBpY2tfKCdhbmltYXRpb25Db25maWcnKShtZXJnZV8odXBkYXRlcykpKHN0YXRlKTtcbn1cbiJdfQ==
|